Mini Kabibi Habibi

Current Path : C:/Program Files/Adobe/Adobe Photoshop 2025/Required/UXP/com.adobe.cclibrariespanel/
Upload File :
Current File : C:/Program Files/Adobe/Adobe Photoshop 2025/Required/UXP/com.adobe.cclibrariespanel/main.js.map

{"version":3,"file":"main.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAqB,YAAID,IAEzBD,EAAkB,YAAIC,IARxB,CASGK,MAAM,I,+CCTT,IAAIC,EAAM,CACT,8BAA+B,CAC9B,MACA,MAED,6BAA8B,CAC7B,MACA,MAED,+BAAgC,CAC/B,MACA,MAED,4BAA6B,CAC5B,MACA,MAED,8BAA+B,CAC9B,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,IAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,KACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,mCAAoC,CACnC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,KACA,MAED,oCAAqC,CACpC,IACA,KAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,KAED,mCAAoC,CACnC,MACA,KAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,mCAAoC,CACnC,MACA,MAED,oCAAqC,CACpC,MACA,KAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,KACA,MAED,oCAAqC,CACpC,KACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,KACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,6BAA8B,CAC7B,MACA,MAED,4BAA6B,CAC5B,MACA,MAED,2BAA4B,CAC3B,MACA,MAED,8BAA+B,CAC9B,MACA,MAED,4BAA6B,CAC5B,MACA,MAED,8BAA+B,CAC9B,KACA,MAED,6BAA8B,CAC7B,MACA,KAED,+BAAgC,CAC/B,MACA,MAED,4BAA6B,CAC5B,MACA,MAED,8BAA+B,CAC9B,KACA,MAED,6BAA8B,CAC7B,MACA,MAED,+BAAgC,CAC/B,KACA,MAED,4BAA6B,CAC5B,MACA,MAED,+BAAgC,CAC/B,KACA,MAED,6BAA8B,CAC7B,MACA,MAED,gCAAiC,CAChC,MACA,MAED,oCAAqC,CACpC,KACA,MAED,uCAAwC,CACvC,MACA,MAED,4BAA6B,CAC5B,MACA,MAED,8BAA+B,CAC9B,MACA,MAED,6BAA8B,CAC7B,MACA,KAED,+BAAgC,CAC/B,KACA,MAED,4BAA6B,CAC5B,MACA,MAED,8BAA+B,CAC9B,MACA,MAED,6BAA8B,CAC7B,MACA,MAED,+BAAgC,CAC/B,MACA,MAED,gCAAiC,CAChC,MACA,MAED,kCAAmC,CAClC,MACA,MAED,iCAAkC,CACjC,MACA,MAED,mCAAoC,CACnC,MACA,MAED,4BAA6B,CAC5B,MACA,MAED,kCAAmC,CAClC,KACA,MAED,8BAA+B,CAC9B,MACA,MAED,mCAAoC,CACnC,MACA,MAED,+BAAgC,CAC/B,MACA,MAED,qCAAsC,CACrC,KACA,MAED,4BAA6B,CAC5B,MACA,MAED,8BAA+B,CAC9B,MACA,MAED,6BAA8B,CAC7B,MACA,MAED,+BAAgC,CAC/B,MACA,MAED,gCAAiC,CAChC,MACA,MAED,kCAAmC,CAClC,MACA,MAED,iCAAkC,CACjC,MACA,MAED,mCAAoC,CACnC,KACA,MAED,+BAAgC,CAC/B,MACA,MAED,4BAA6B,CAC5B,IACA,MAED,8BAA+B,CAC9B,MACA,MAED,oCAAqC,CACpC,KACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,KAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,mCAAoC,CACnC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,KACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,mCAAoC,CACnC,MACA,MAED,oCAAqC,CACpC,MACA,KAED,oCAAqC,CACpC,MACA,KAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,mCAAoC,CACnC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,KACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,oCAAqC,CACpC,MACA,KAED,6BAA8B,CAC7B,MACA,MAED,oCAAqC,CACpC,MACA,MAED,qCAAsC,CACrC,MACA,MAED,+BAAgC,CAC/B,MACA,MAED,8BAA+B,CAC9B,MACA,MAED,+BAAgC,CAC/B,MACA,MAED,qCAAsC,CACrC,MACA,MAED,8BAA+B,CAC9B,MACA,MAED,+BAAgC,CAC/B,MACA,OAGF,SAASC,EAAoBC,GAC5B,IAAIC,EAAoBC,EAAEJ,EAAKE,GAC9B,OAAOG,QAAQC,UAAUC,MAAK,KAC7B,IAAIC,EAAI,IAAIC,MAAM,uBAAyBP,EAAM,KAEjD,MADAM,EAAEE,KAAO,mBACHF,KAIR,IAAIG,EAAMX,EAAIE,GAAMU,EAAKD,EAAI,GAC7B,OAAOR,EAAoBK,EAAE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,MACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,QACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,QACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,YAAa,iBACb,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,UACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,aAAc,MACd,IAAO,KACP,QAAS,MACT,QAAS,MACT,YAAa,iBACb,aAAc,mBACd,QAAS,MACT,YAAa,MACb,QAAS,KACT,UAAW,gBACX,WAAY,KACZ,QAAS,MACT,QAAS,MACT,QAAS,MACT,QAAS,MACT,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,GAAM,KACN,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,GAAM,KACN,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,SAAU,KACV,YAAa,KACb,SAAU,KACV,aAAc,KACd,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,QACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,YAAa,MACb,YAAa,MACb,SAAU,MACV,YAAa,MACb,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,GAAM,UACN,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,QACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,GAAM,MACN,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,QACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,aAAc,SACd,cAAe,MACf,cAAe,MACf,aAAc,MACd,YAAa,MACb,qBAAsB,cACtB,aAAc,MACd,cAAe,MACf,YAAa,MACb,YAAa,MACb,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,SAAU,KACV,cAAe,UACf,cAAe,UACf,SAAU,MACV,WAAY,KACZ,WAAY,MACZ,SAAU,eACV,aAAc,MACd,SAAU,MACV,WAAY,MACZ,SAAU,MACV,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,MAEXp6D,EAAQm6D,eAAiB,CACrB,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,sCACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,QACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,WACP,IAAO,KACP,IAAO,WACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,QACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,cACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,+CACP,IAAO,KACP,IAAO,KACP,IAAO,QACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,oBACP,IAAO,QACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,UACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,WACN,IAAO,KACP,IAAO,WACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,QACN,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,QACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,GAAM,QACN,IAAO,QACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,cACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,I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,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,UAAW,aACX,GAAM,aACN,GAAM,aACN,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,UAAW,aACX,IAAO,cACP,IAAO,cACP,GAAM,cACN,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,UAAW,aACX,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,WAAY,cACZ,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,QAAS,aACT,QAAS,aACT,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,GAAM,aACN,IAAO,cACP,GAAM,aACN,GAAM,aACN,GAAM,cACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,GAAM,cACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,GAAM,aACN,GAAM,aACN,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,eACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,GAAM,aACN,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,QAAS,aACT,UAAW,aACX,QAAS,aACT,QAAS,aACT,QAAS,aACT,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,UAAW,aACX,QAAS,aACT,UAAW,aACX,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,UAAW,aACX,QAAS,aACT,UAAW,aACX,QAAS,aACT,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,WAAY,cACZ,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,SAAU,cACV,WAAY,cACZ,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,QAAS,aACT,UAAW,aACX,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,QAAS,aACT,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,UAAW,aACX,QAAS,aACT,IAAO,cACP,IAAO,cACP,WAAY,cACZ,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,eACP,GAAM,aACN,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,SAAU,cACV,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,UAAW,aACX,UAAW,aACX,UAAW,aACX,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,GAAM,aACN,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,UAAW,aACX,QAAS,aACT,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,UAAW,aACX,QAAS,aACT,QAAS,aACT,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,aACP,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,cACX,SAAU,aACV,WAAY,aACZ,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,cACV,SAAU,aACV,WAAY,aACZ,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,cACf,cAAe,cACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,cACf,cAAe,cACf,cAAe,aACf,cAAe,aACf,cAAe,cACf,WAAY,cACZ,WAAY,aACZ,SAAU,aACV,SAAU,aACV,WAAY,aACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,SAAU,aACV,WAAY,aACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,aACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,aACZ,SAAU,cACV,SAAU,aACV,WAAY,cACZ,WAAY,aACZ,SAAU,aACV,WAAY,cACZ,WAAY,cACZ,SAAU,cACV,SAAU,aACV,WAAY,cACZ,WAAY,aACZ,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,SAAU,cACV,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,cACV,SAAU,aACV,WAAY,aACZ,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,cACf,cAAe,aACf,SAAU,aACV,SAAU,aACV,WAAY,aACZ,cAAe,aACf,cAAe,cACf,cAAe,cACf,cAAe,cACf,WAAY,aACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,aACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,SAAU,aACV,WAAY,aACZ,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,aACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,aACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,aACZ,SAAU,aACV,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,aACZ,WAAY,aACZ,cAAe,cACf,SAAU,cACV,SAAU,aACV,WAAY,aACZ,WAAY,aACZ,SAAU,aACV,WAAY,aACZ,WAAY,aACZ,WAAY,aACZ,WAAY,cACZ,WAAY,aACZ,WAAY,aACZ,WAAY,aACZ,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,WAAY,aACZ,SAAU,aACV,WAAY,cACZ,SAAU,cACV,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,aACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,aACZ,WAAY,aACZ,SAAU,aACV,SAAU,aACV,WAAY,aACZ,WAAY,cACZ,WAAY,aACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,aACZ,WAAY,aACZ,WAAY,cACZ,SAAU,aACV,WAAY,aACZ,WAAY,aACZ,SAAU,aACV,SAAU,aACV,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,aACZ,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,cACf,cAAe,aACf,cAAe,aACf,cAAe,cACf,cAAe,aACf,cAAe,aACf,cAAe,cACf,cAAe,aACf,SAAU,aACV,WAAY,cACZ,SAAU,aACV,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,WAAY,aACZ,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,WAAY,aACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,aACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,aACZ,WAAY,aACZ,SAAU,aACV,SAAU,aACV,WAAY,cACZ,SAAU,aACV,WAAY,cACZ,SAAU,cACV,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,aACZ,cAAe,cACf,cAAe,cACf,SAAU,aACV,SAAU,aACV,WAAY,aACZ,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,SAAU,aACV,WAAY,cACZ,SAAU,aACV,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,WAAY,cACZ,WAAY,aACZ,WAAY,cACZ,WAAY,aACZ,SAAU,aACV,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,WAAY,aACZ,SAAU,aACV,SAAU,cACV,SAAU,cACV,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,SAAU,aACV,WAAY,cACZ,SAAU,aACV,SAAU,aACV,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,cACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,SAAU,aACV,WAAY,cACZ,SAAU,aACV,SAAU,aACV,WAAY,cACZ,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,aACZ,WAAY,aACZ,SAAU,aACV,WAAY,aACZ,WAAY,aACZ,WAAY,aACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,SAAU,aACV,WAAY,aACZ,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,WAAY,aACZ,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,WAAY,aACZ,SAAU,aACV,WAAY,cACZ,SAAU,aACV,WAAY,cACZ,SAAU,aACV,WAAY,aACZ,WAAY,aACZ,cAAe,cACf,cAAe,cACf,cAAe,cACf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AAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,QAAS,CACL,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,QAAS,CACL,IACA,IACA,KACA,MAEJ,QAAS,CACL,IACA,IACA,KACA,MAEJ,QAAS,CACL,IACA,IACA,KACA,MAEJ,QAAS,CACL,IACA,IACA,KACA,MAEJ,QAAS,CACL,IACA,IACA,KACA,MAEJ,QAAS,CACL,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,SAAU,CACN,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,SAAU,CACN,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,K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,EA9yBgB,GAszB3B,SAASY,GAASmB,GACd,OAASA,GAAa,IAAMA,GAAa,KACpCA,GAAa,IAAMA,GAAa,GA+BzC,SAASjC,GAAct9iB,GACnB,OAASA,GAAK,GAAUA,GAAK,IACnB,KAANA,GACM,MAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,EAMR,SAASu9iB,GAAiBv9iB,GACtB,OAASA,GAAK,IAAUA,GAAK,IACnB,KAANA,GACCA,GAAK,IAAUA,GAAK,IACf,KAANA,GACM,KAANA,GACM,KAANA,GACM,KAANA,GACM,KAANA,GACM,KAANA,GACCA,GAAK,IAAUA,GAAK,IACpBA,GAAK,IAAUA,GAAK,IACpBA,GAAK,IAAUA,GAAK,IACpBA,GAAK,IAAUA,GAAK,IACf,KAANA,GACM,KAANA,GACM,KAANA,GACM,KAANA,GACM,KAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACCA,GAAK,KAAUA,GAAK,KACf,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,KACf,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAA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","sources":["webpack://CCLibraries/webpack/universalModuleDefinition","webpack://CCLibraries/./app/applications/ lazy ^\\.\\/.*\\/main\\.scss$ chunkName: css/[request] namespace object","webpack://CCLibraries/./app/images/GenStudio/ sync nonrecursive .svg$","webpack://CCLibraries/./app/images/audio/ sync nonrecursive .svg$","webpack://CCLibraries/./app/images/fallbacks/ sync nonrecursive .svg$","webpack://CCLibraries/./app/images/icons/ sync nonrecursive .svg$","webpack://CCLibraries/./node_modules/@sentry/webpack-plugin/src/sentry-webpack.module.js","webpack://CCLibraries/./node_modules/@sentry/src/baseclient.ts","webpack://CCLibraries/./node_modules/@sentry/src/clientreport.ts","webpack://CCLibraries/./node_modules/src/client.ts","webpack://CCLibraries/./node_modules/@sentry/src/envelope.ts","webpack://CCLibraries/./node_modules/src/eventbuilder.ts","webpack://CCLibraries/./node_modules/src/helpers.ts","webpack://CCLibraries/./node_modules/@sentry/src/eventbuilder.ts","webpack://CCLibraries/./node_modules/@sentry/src/integrations/linkederrors.ts","webpack://CCLibraries/./node_modules/@sentry/src/metadata.ts","webpack://CCLibraries/./node_modules/@sentry/src/integrations/metadata.ts","webpack://CCLibraries/./node_modules/@sentry/src/tracing/utils.ts","webpack://CCLibraries/./node_modules/@sentry/src/tracing/errors.ts","webpack://CCLibraries/./node_modules/@sentry/src/baggage.ts","webpack://CCLibraries/./node_modules/@sentry/src/tracing.ts","webpack://CCLibraries/./node_modules/@sentry/src/tracing/span.ts","webpack://CCLibraries/./node_modules/@sentry/src/tracing/transaction.ts","webpack://CCLibraries/./node_modules/@sentry/src/tracing/idletransaction.ts","webpack://CCLibraries/./node_modules/@sentry/src/tracing/sampling.ts","webpack://CCLibraries/./node_modules/@sentry/src/tracing/hubextensions.ts","webpack://CCLibraries/./node_modules/@sentry/src/tracing/trace.ts","webpack://CCLibraries/./node_modules/@sentry/src/transports/multiplexed.ts","webpack://CCLibraries/./node_modules/@sentry/src/tracing/measurement.ts","webpack://CCLibraries/./node_modules/@sentry/src/isBrowser.ts","webpack://CCLibraries/./node_modules/@sentry-internal/src/browser/web-vitals/lib/bindReporter.ts","webpack://CCLibraries/./node_modules/@sentry-internal/src/browser/types.ts","webpack://CCLibraries/./node_modules/@sentry-internal/src/browser/web-vitals/lib/getNavigationEntry.ts","webpack://CCLibraries/./node_modules/@sentry-internal/src/browser/web-vitals/lib/getActivationStart.ts","webpack://CCLibraries/./node_modules/@sentry-internal/src/browser/web-vitals/lib/initMetric.ts","webpack://CCLibraries/./node_modules/@sentry-internal/src/browser/web-vitals/lib/generateUniqueID.ts","webpack://CCLibraries/./node_modules/@sentry-internal/src/browser/web-vitals/lib/observe.ts","webpack://CCLibraries/./node_modules/@sentry-internal/src/browser/web-vitals/lib/onHidden.ts","webpack://CCLibraries/./node_modules/@sentry-internal/src/browser/web-vitals/lib/getVisibilityWatcher.ts","webpack://CCLibraries/./node_modules/@sentry-internal/src/browser/web-vitals/getLCP.ts","webpack://CCLibraries/./node_modules/@sentry-internal/src/browser/instrument.ts","webpack://CCLibraries/./node_modules/@sentry-internal/src/browser/web-vitals/getCLS.ts","webpack://CCLibraries/./node_modules/@sentry-internal/src/browser/web-vitals/getFID.ts","webpack://CCLibraries/./node_modules/src/constants.ts","webpack://CCLibraries/../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb-snapshot/es/rrweb-snapshot.js","webpack://CCLibraries/../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/utils.js","webpack://CCLibraries/../node_modules/@sentry-internal/rrweb/es/rrweb/packages/types/dist/rrweb-types.js","webpack://CCLibraries/../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/mutation.js","webpack://CCLibraries/../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/error-handler.js","webpack://CCLibraries/../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observer.js","webpack://CCLibraries/../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/cross-origin-iframe-mirror.js","webpack://CCLibraries/../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/iframe-manager.js","webpack://CCLibraries/../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/shadow-dom-manager.js","webpack://CCLibraries/../node_modules/@sentry-internal/rrweb/es/rrweb/ext/tslib/tslib.es6.js","webpack://CCLibraries/../node_modules/@sentry-internal/rrweb/es/rrweb/ext/base64-arraybuffer/dist/base64-arraybuffer.es5.js","webpack://CCLibraries/../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/serialize-args.js","webpack://CCLibraries/../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas.js","webpack://CCLibraries/../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/webgl.js","webpack://CCLibraries/../node_modules/@sentry-internal/rrweb/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js","webpack://CCLibraries/../node_modules/@sentry-internal/rrweb/es/rrweb/_virtual/image-bitmap-data-url-worker.js","webpack://CCLibraries/../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas-manager.js","webpack://CCLibraries/../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/2d.js","webpack://CCLibraries/../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/stylesheet-manager.js","webpack://CCLibraries/../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/processed-node-manager.js","webpack://CCLibraries/../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/index.js","webpack://CCLibraries/./node_modules/src/util/timestamp.ts","webpack://CCLibraries/./node_modules/src/coreHandlers/util/addBreadcrumbEvent.ts","webpack://CCLibraries/./node_modules/src/coreHandlers/util/domUtils.ts","webpack://CCLibraries/./node_modules/src/coreHandlers/util/onWindowOpen.ts","webpack://CCLibraries/./node_modules/src/coreHandlers/handleClick.ts","webpack://CCLibraries/./node_modules/src/util/createBreadcrumb.ts","webpack://CCLibraries/../node_modules/@sentry-internal/rrweb-snapshot/es/rrweb-snapshot.js","webpack://CCLibraries/./node_modules/src/coreHandlers/util/getAttributesToRecord.ts","webpack://CCLibraries/./node_modules/src/coreHandlers/handleDom.ts","webpack://CCLibraries/./node_modules/src/coreHandlers/handleKeyboardEvent.ts","webpack://CCLibraries/./node_modules/src/util/createPerformanceEntries.ts","webpack://CCLibraries/./node_modules/src/coreHandlers/performanceObserver.ts","webpack://CCLibraries/./node_modules/src/eventBuffer/error.ts","webpack://CCLibraries/./node_modules/src/eventBuffer/EventBufferArray.ts","webpack://CCLibraries/./node_modules/src/eventBuffer/WorkerHandler.ts","webpack://CCLibraries/./node_modules/src/eventBuffer/EventBufferCompressionWorker.ts","webpack://CCLibraries/./node_modules/src/eventBuffer/EventBufferProxy.ts","webpack://CCLibraries/./node_modules/src/eventBuffer/index.ts","webpack://CCLibraries/./replay-worker/build/npm/esm/index.js","webpack://CCLibraries/./replay-worker/build/npm/esm/worker.ts","webpack://CCLibraries/./node_modules/src/util/hasSessionStorage.ts","webpack://CCLibraries/./node_modules/src/session/clearSession.ts","webpack://CCLibraries/./node_modules/src/util/isSampled.ts","webpack://CCLibraries/./node_modules/src/session/saveSession.ts","webpack://CCLibraries/./node_modules/src/session/Session.ts","webpack://CCLibraries/./node_modules/src/session/createSession.ts","webpack://CCLibraries/./node_modules/src/util/isExpired.ts","webpack://CCLibraries/./node_modules/src/util/isSessionExpired.ts","webpack://CCLibraries/./node_modules/src/session/shouldRefreshSession.ts","webpack://CCLibraries/./node_modules/src/session/loadOrCreateSession.ts","webpack://CCLibraries/./node_modules/src/session/fetchSession.ts","webpack://CCLibraries/./node_modules/src/util/addEvent.ts","webpack://CCLibraries/./node_modules/src/util/eventUtils.ts","webpack://CCLibraries/./node_modules/src/coreHandlers/handleAfterSendEvent.ts","webpack://CCLibraries/./node_modules/src/coreHandlers/handleGlobalEvent.ts","webpack://CCLibraries/./node_modules/src/util/isRrwebError.ts","webpack://CCLibraries/./node_modules/src/coreHandlers/util/shouldSampleForBufferEvent.ts","webpack://CCLibraries/./node_modules/src/util/createPerformanceSpans.ts","webpack://CCLibraries/./node_modules/src/coreHandlers/handleHistory.ts","webpack://CCLibraries/./node_modules/src/coreHandlers/util/addNetworkBreadcrumb.ts","webpack://CCLibraries/./node_modules/src/util/shouldFilterRequest.ts","webpack://CCLibraries/./node_modules/src/coreHandlers/handleXhr.ts","webpack://CCLibraries/./node_modules/src/util/truncateJson/constants.ts","webpack://CCLibraries/./node_modules/src/util/truncateJson/completeJson.ts","webpack://CCLibraries/./node_modules/src/util/truncateJson/evaluateJson.ts","webpack://CCLibraries/./node_modules/src/util/truncateJson/fixJson.ts","webpack://CCLibraries/./node_modules/src/coreHandlers/util/networkUtils.ts","webpack://CCLibraries/./node_modules/src/coreHandlers/util/fetchUtils.ts","webpack://CCLibraries/./node_modules/src/coreHandlers/util/xhrUtils.ts","webpack://CCLibraries/./node_modules/src/coreHandlers/handleNetworkBreadcrumbs.ts","webpack://CCLibraries/./node_modules/src/coreHandlers/handleFetch.ts","webpack://CCLibraries/./node_modules/src/coreHandlers/handleScope.ts","webpack://CCLibraries/./node_modules/src/util/addGlobalListeners.ts","webpack://CCLibraries/./node_modules/src/util/addMemoryEntry.ts","webpack://CCLibraries/./node_modules/src/util/handleRecordingEmit.ts","webpack://CCLibraries/./node_modules/src/util/createReplayEnvelope.ts","webpack://CCLibraries/./node_modules/src/util/prepareRecordingData.ts","webpack://CCLibraries/./node_modules/src/util/prepareReplayEvent.ts","webpack://CCLibraries/./node_modules/src/util/sendReplayRequest.ts","webpack://CCLibraries/./node_modules/src/util/sendReplay.ts","webpack://CCLibraries/./node_modules/src/util/throttle.ts","webpack://CCLibraries/./node_modules/src/replay.ts","webpack://CCLibraries/./node_modules/src/util/debounce.ts","webpack://CCLibraries/./node_modules/src/types/rrweb.ts","webpack://CCLibraries/./node_modules/src/util/getPrivacyOptions.ts","webpack://CCLibraries/./node_modules/src/integration.ts","webpack://CCLibraries/./node_modules/src/util/maskAttribute.ts","webpack://CCLibraries/./node_modules/@sentry-internal/src/browser/metrics/utils.ts","webpack://CCLibraries/./node_modules/@sentry-internal/src/browser/metrics/index.ts","webpack://CCLibraries/./node_modules/@sentry-internal/src/browser/request.ts","webpack://CCLibraries/./node_modules/@sentry-internal/src/browser/browsertracing.ts","webpack://CCLibraries/./node_modules/@sentry-internal/src/browser/router.ts","webpack://CCLibraries/./node_modules/@sentry-internal/src/browser/backgroundtab.ts","webpack://CCLibraries/./node_modules/@sentry/src/transports/offline.ts","webpack://CCLibraries/./node_modules/src/transports/offline.ts","webpack://CCLibraries/./node_modules/src/profiling/utils.ts","webpack://CCLibraries/./node_modules/src/profiling/hubextensions.ts","webpack://CCLibraries/./node_modules/src/profiling/integration.ts","webpack://CCLibraries/./node_modules/src/index.ts","webpack://CCLibraries/./node_modules/src/integrations/breadcrumbs.ts","webpack://CCLibraries/./node_modules/src/integrations/dedupe.ts","webpack://CCLibraries/./node_modules/src/integrations/globalhandlers.ts","webpack://CCLibraries/./node_modules/src/integrations/httpcontext.ts","webpack://CCLibraries/./node_modules/src/integrations/linkederrors.ts","webpack://CCLibraries/./node_modules/src/integrations/trycatch.ts","webpack://CCLibraries/./node_modules/src/sdk.ts","webpack://CCLibraries/./node_modules/@sentry/src/sdk.ts","webpack://CCLibraries/./node_modules/src/stack-parsers.ts","webpack://CCLibraries/./node_modules/src/transports/utils.ts","webpack://CCLibraries/./node_modules/src/transports/fetch.ts","webpack://CCLibraries/./node_modules/src/transports/xhr.ts","webpack://CCLibraries/./node_modules/src/userfeedback.ts","webpack://CCLibraries/./node_modules/@sentry/src/api.ts","webpack://CCLibraries/./node_modules/@sentry/src/constants.ts","webpack://CCLibraries/./node_modules/@sentry/src/eventProcessors.ts","webpack://CCLibraries/./node_modules/@sentry/src/exports.ts","webpack://CCLibraries/./node_modules/@sentry/src/hub.ts","webpack://CCLibraries/./node_modules/@sentry/src/integration.ts","webpack://CCLibraries/./node_modules/@sentry/src/integrations/functiontostring.ts","webpack://CCLibraries/./node_modules/@sentry/src/integrations/inboundfilters.ts","webpack://CCLibraries/./node_modules/@sentry/src/scope.ts","webpack://CCLibraries/./node_modules/@sentry/src/session.ts","webpack://CCLibraries/./node_modules/@sentry/src/tracing/dynamicSamplingContext.ts","webpack://CCLibraries/./node_modules/@sentry/src/promisebuffer.ts","webpack://CCLibraries/./node_modules/@sentry/src/transports/base.ts","webpack://CCLibraries/./node_modules/@sentry/src/utils/isSentryRequestUrl.ts","webpack://CCLibraries/./node_modules/@sentry/src/utils/prepareEvent.ts","webpack://CCLibraries/./node_modules/@sentry/src/version.ts","webpack://CCLibraries/./node_modules/src/captureconsole.ts","webpack://CCLibraries/./node_modules/src/debug.ts","webpack://CCLibraries/./node_modules/src/dedupe.ts","webpack://CCLibraries/./node_modules/src/extraerrordata.ts","webpack://CCLibraries/./node_modules/src/offline.ts","webpack://CCLibraries/./node_modules/src/reportingobserver.ts","webpack://CCLibraries/./node_modules/@sentry/src/path.ts","webpack://CCLibraries/./node_modules/src/rewriteframes.ts","webpack://CCLibraries/./node_modules/src/sessiontiming.ts","webpack://CCLibraries/./node_modules/src/transaction.ts","webpack://CCLibraries/./node_modules/src/httpclient.ts","webpack://CCLibraries/./node_modules/src/contextlines.ts","webpack://CCLibraries/./node_modules/@sentry/react/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","webpack://CCLibraries/./node_modules/@sentry/src/aggregate-errors.ts","webpack://CCLibraries/./node_modules/@sentry/src/browser.ts","webpack://CCLibraries/./node_modules/@sentry/src/dsn.ts","webpack://CCLibraries/./node_modules/@sentry/src/env.ts","webpack://CCLibraries/./node_modules/@sentry/src/error.ts","webpack://CCLibraries/./node_modules/@sentry/src/vendor/supportsHistory.ts","webpack://CCLibraries/./node_modules/@sentry/src/instrument.ts","webpack://CCLibraries/./node_modules/@sentry/src/is.ts","webpack://CCLibraries/./node_modules/@sentry/src/logger.ts","webpack://CCLibraries/./node_modules/@sentry/src/misc.ts","webpack://CCLibraries/./node_modules/@sentry/src/node.ts","webpack://CCLibraries/./node_modules/@sentry/src/normalize.ts","webpack://CCLibraries/./node_modules/@sentry/src/memo.ts","webpack://CCLibraries/./node_modules/@sentry/src/object.ts","webpack://CCLibraries/./node_modules/@sentry/src/ratelimit.ts","webpack://CCLibraries/./node_modules/@sentry/src/severity.ts","webpack://CCLibraries/./node_modules/@sentry/src/stacktrace.ts","webpack://CCLibraries/./node_modules/@sentry/src/string.ts","webpack://CCLibraries/./node_modules/@sentry/src/supports.ts","webpack://CCLibraries/./node_modules/@sentry/src/syncpromise.ts","webpack://CCLibraries/./node_modules/@sentry/src/time.ts","webpack://CCLibraries/./node_modules/@sentry/src/url.ts","webpack://CCLibraries/./node_modules/@sentry/src/worldwide.ts","webpack://CCLibraries/./node_modules/@ccx-public/component-shared/sentry/index.js","webpack://CCLibraries/./node_modules/@ccx-public/component-shared/utils/retargetEvents.js","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-web-component-fallbacks/fallbackTagName.js","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-web-component-fallbacks/version.js","webpack://CCLibraries/./node_modules/@exc/metrics/src/BuildVersion.ts","webpack://CCLibraries/./node_modules/@exc/metrics/src/Level.ts","webpack://CCLibraries/./node_modules/@exc/metrics/src/Metrics.ts","webpack://CCLibraries/./node_modules/@exc/metrics/src/MetricsEvents.ts","webpack://CCLibraries/./node_modules/@exc/metrics/src/RecordType.ts","webpack://CCLibraries/./node_modules/@exc/metrics/src/User.ts","webpack://CCLibraries/./node_modules/@exc/metrics/src/index.ts","webpack://CCLibraries/./node_modules/@formatjs/intl-getcanonicallocales/index.js","webpack://CCLibraries/./node_modules/@formatjs/intl-getcanonicallocales/polyfill.js","webpack://CCLibraries/./node_modules/@formatjs/intl-getcanonicallocales/should-polyfill.js","webpack://CCLibraries/./node_modules/@formatjs/intl-getcanonicallocales/src/aliases.generated.js","webpack://CCLibraries/./node_modules/@formatjs/intl-getcanonicallocales/src/canonicalizer.js","webpack://CCLibraries/./node_modules/@formatjs/intl-getcanonicallocales/src/emitter.js","webpack://CCLibraries/./node_modules/@formatjs/intl-getcanonicallocales/src/likelySubtags.generated.js","webpack://CCLibraries/./node_modules/@formatjs/intl-getcanonicallocales/src/parser.js","webpack://CCLibraries/./node_modules/@formatjs/intl-getcanonicallocales/src/types.js","webpack://CCLibraries/./node_modules/@genstudio/instrumentation/src/index.ts","webpack://CCLibraries/./node_modules/@genstudio/instrumentation/src/metrics/metricsEvent.ts","webpack://CCLibraries/./node_modules/abort-controller/src/abort-signal.ts","webpack://CCLibraries/./node_modules/abort-controller/src/abort-controller.ts","webpack://CCLibraries/./node_modules/abort-controller/polyfill.js","webpack://CCLibraries/./node_modules/autobind-decorator/lib/index.js","webpack://CCLibraries/./node_modules/babel-runtime/core-js/object/assign.js","webpack://CCLibraries/./node_modules/babel-runtime/core-js/object/create.js","webpack://CCLibraries/./node_modules/babel-runtime/core-js/object/define-property.js","webpack://CCLibraries/./node_modules/babel-runtime/core-js/object/get-prototype-of.js","webpack://CCLibraries/./node_modules/babel-runtime/core-js/object/keys.js","webpack://CCLibraries/./node_modules/babel-runtime/core-js/object/set-prototype-of.js","webpack://CCLibraries/./node_modules/babel-runtime/core-js/symbol.js","webpack://CCLibraries/./node_modules/babel-runtime/core-js/symbol/iterator.js","webpack://CCLibraries/./node_modules/babel-runtime/helpers/classCallCheck.js","webpack://CCLibraries/./node_modules/babel-runtime/helpers/createClass.js","webpack://CCLibraries/./node_modules/babel-runtime/helpers/extends.js","webpack://CCLibraries/./node_modules/babel-runtime/helpers/inherits.js","webpack://CCLibraries/./node_modules/babel-runtime/helpers/objectWithoutProperties.js","webpack://CCLibraries/./node_modules/babel-runtime/helpers/possibleConstructorReturn.js","webpack://CCLibraries/./node_modules/babel-runtime/helpers/typeof.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/fn/object/assign.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/fn/object/create.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/fn/object/define-property.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/fn/object/get-prototype-of.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/fn/object/keys.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/fn/object/set-prototype-of.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/fn/symbol/index.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/fn/symbol/iterator.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_a-function.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_add-to-unscopables.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_an-object.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_array-includes.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_cof.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_core.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_ctx.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_defined.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_descriptors.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_dom-create.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_enum-bug-keys.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_enum-keys.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_export.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_fails.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_global.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_has.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_hide.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_html.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_ie8-dom-define.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_iobject.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_is-array.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_is-object.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_iter-create.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_iter-define.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_iter-step.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_iterators.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_library.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_meta.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-assign.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-create.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-dp.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-dps.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gopd.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gopn-ext.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gopn.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gops.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gpo.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-keys-internal.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-keys.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-pie.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-sap.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_property-desc.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_redefine.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_set-proto.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_set-to-string-tag.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_shared-key.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_shared.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_string-at.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-absolute-index.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-integer.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-iobject.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-length.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-object.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-primitive.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_uid.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_wks-define.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_wks-ext.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/_wks.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.array.iterator.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.object.assign.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.object.create.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.object.define-property.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.object.get-prototype-of.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.object.keys.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.object.set-prototype-of.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.string.iterator.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.symbol.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/es7.symbol.async-iterator.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/es7.symbol.observable.js","webpack://CCLibraries/./node_modules/babel-runtime/node_modules/core-js/library/modules/web.dom.iterable.js","webpack://CCLibraries/./node_modules/charenc/charenc.js","webpack://CCLibraries/./node_modules/classnames/index.js","webpack://CCLibraries/./node_modules/copy-to-clipboard/index.js","webpack://CCLibraries/./node_modules/core-js/es/object/values.js","webpack://CCLibraries/./node_modules/core-js/es/string/pad-start.js","webpack://CCLibraries/./node_modules/core-js/es/string/trim-start.js","webpack://CCLibraries/./node_modules/core-js/es/symbol/async-iterator.js","webpack://CCLibraries/./node_modules/core-js/features/object/values.js","webpack://CCLibraries/./node_modules/core-js/features/string/pad-start.js","webpack://CCLibraries/./node_modules/core-js/features/string/trim-start.js","webpack://CCLibraries/./node_modules/core-js/features/symbol/async-iterator.js","webpack://CCLibraries/./node_modules/core-js/internals/a-callable.js","webpack://CCLibraries/./node_modules/core-js/internals/an-object.js","webpack://CCLibraries/./node_modules/core-js/internals/array-includes.js","webpack://CCLibraries/./node_modules/core-js/internals/classof-raw.js","webpack://CCLibraries/./node_modules/core-js/internals/classof.js","webpack://CCLibraries/./node_modules/core-js/internals/copy-constructor-properties.js","webpack://CCLibraries/./node_modules/core-js/internals/create-non-enumerable-property.js","webpack://CCLibraries/./node_modules/core-js/internals/create-property-descriptor.js","webpack://CCLibraries/./node_modules/core-js/internals/define-well-known-symbol.js","webpack://CCLibraries/./node_modules/core-js/internals/descriptors.js","webpack://CCLibraries/./node_modules/core-js/internals/document-create-element.js","webpack://CCLibraries/./node_modules/core-js/internals/engine-user-agent.js","webpack://CCLibraries/./node_modules/core-js/internals/engine-v8-version.js","webpack://CCLibraries/./node_modules/core-js/internals/entry-unbind.js","webpack://CCLibraries/./node_modules/core-js/internals/enum-bug-keys.js","webpack://CCLibraries/./node_modules/core-js/internals/export.js","webpack://CCLibraries/./node_modules/core-js/internals/fails.js","webpack://CCLibraries/./node_modules/core-js/internals/function-bind-context.js","webpack://CCLibraries/./node_modules/core-js/internals/function-name.js","webpack://CCLibraries/./node_modules/core-js/internals/get-built-in.js","webpack://CCLibraries/./node_modules/core-js/internals/get-method.js","webpack://CCLibraries/./node_modules/core-js/internals/global.js","webpack://CCLibraries/./node_modules/core-js/internals/has-own-property.js","webpack://CCLibraries/./node_modules/core-js/internals/hidden-keys.js","webpack://CCLibraries/./node_modules/core-js/internals/ie8-dom-define.js","webpack://CCLibraries/./node_modules/core-js/internals/indexed-object.js","webpack://CCLibraries/./node_modules/core-js/internals/inspect-source.js","webpack://CCLibraries/./node_modules/core-js/internals/internal-state.js","webpack://CCLibraries/./node_modules/core-js/internals/is-callable.js","webpack://CCLibraries/./node_modules/core-js/internals/is-forced.js","webpack://CCLibraries/./node_modules/core-js/internals/is-object.js","webpack://CCLibraries/./node_modules/core-js/internals/is-pure.js","webpack://CCLibraries/./node_modules/core-js/internals/is-symbol.js","webpack://CCLibraries/./node_modules/core-js/internals/length-of-array-like.js","webpack://CCLibraries/./node_modules/core-js/internals/native-symbol.js","webpack://CCLibraries/./node_modules/core-js/internals/native-weak-map.js","webpack://CCLibraries/./node_modules/core-js/internals/object-define-property.js","webpack://CCLibraries/./node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack://CCLibraries/./node_modules/core-js/internals/object-get-own-property-names.js","webpack://CCLibraries/./node_modules/core-js/internals/object-get-own-property-symbols.js","webpack://CCLibraries/./node_modules/core-js/internals/object-keys-internal.js","webpack://CCLibraries/./node_modules/core-js/internals/object-keys.js","webpack://CCLibraries/./node_modules/core-js/internals/object-property-is-enumerable.js","webpack://CCLibraries/./node_modules/core-js/internals/object-to-array.js","webpack://CCLibraries/./node_modules/core-js/internals/ordinary-to-primitive.js","webpack://CCLibraries/./node_modules/core-js/internals/own-keys.js","webpack://CCLibraries/./node_modules/core-js/internals/path.js","webpack://CCLibraries/./node_modules/core-js/internals/redefine.js","webpack://CCLibraries/./node_modules/core-js/internals/require-object-coercible.js","webpack://CCLibraries/./node_modules/core-js/internals/set-global.js","webpack://CCLibraries/./node_modules/core-js/internals/shared-key.js","webpack://CCLibraries/./node_modules/core-js/internals/shared-store.js","webpack://CCLibraries/./node_modules/core-js/internals/shared.js","webpack://CCLibraries/./node_modules/core-js/internals/string-pad-webkit-bug.js","webpack://CCLibraries/./node_modules/core-js/internals/string-pad.js","webpack://CCLibraries/./node_modules/core-js/internals/string-repeat.js","webpack://CCLibraries/./node_modules/core-js/internals/string-trim-forced.js","webpack://CCLibraries/./node_modules/core-js/internals/string-trim.js","webpack://CCLibraries/./node_modules/core-js/internals/to-absolute-index.js","webpack://CCLibraries/./node_modules/core-js/internals/to-indexed-object.js","webpack://CCLibraries/./node_modules/core-js/internals/to-integer-or-infinity.js","webpack://CCLibraries/./node_modules/core-js/internals/to-length.js","webpack://CCLibraries/./node_modules/core-js/internals/to-object.js","webpack://CCLibraries/./node_modules/core-js/internals/to-primitive.js","webpack://CCLibraries/./node_modules/core-js/internals/to-property-key.js","webpack://CCLibraries/./node_modules/core-js/internals/to-string-tag-support.js","webpack://CCLibraries/./node_modules/core-js/internals/to-string.js","webpack://CCLibraries/./node_modules/core-js/internals/try-to-string.js","webpack://CCLibraries/./node_modules/core-js/internals/uid.js","webpack://CCLibraries/./node_modules/core-js/internals/use-symbol-as-uid.js","webpack://CCLibraries/./node_modules/core-js/internals/well-known-symbol-wrapped.js","webpack://CCLibraries/./node_modules/core-js/internals/well-known-symbol.js","webpack://CCLibraries/./node_modules/core-js/internals/whitespaces.js","webpack://CCLibraries/./node_modules/core-js/modules/es.object.values.js","webpack://CCLibraries/./node_modules/core-js/modules/es.string.pad-start.js","webpack://CCLibraries/./node_modules/core-js/modules/es.string.trim-start.js","webpack://CCLibraries/./node_modules/core-js/modules/es.symbol.async-iterator.js","webpack://CCLibraries/./node_modules/core-js/stable/object/values.js","webpack://CCLibraries/./node_modules/core-js/stable/string/pad-start.js","webpack://CCLibraries/./node_modules/core-js/stable/string/trim-start.js","webpack://CCLibraries/./node_modules/core-js/stable/symbol/async-iterator.js","webpack://CCLibraries/./node_modules/crypt/crypt.js","webpack://CCLibraries/./node_modules/decode-uri-component/index.js","webpack://CCLibraries/./node_modules/dom-helpers/lib/activeElement.js","webpack://CCLibraries/./node_modules/dom-helpers/lib/class/addClass.js","webpack://CCLibraries/./node_modules/dom-helpers/lib/class/hasClass.js","webpack://CCLibraries/./node_modules/dom-helpers/lib/class/index.js","webpack://CCLibraries/./node_modules/dom-helpers/lib/class/removeClass.js","webpack://CCLibraries/./node_modules/dom-helpers/lib/events/off.js","webpack://CCLibraries/./node_modules/dom-helpers/lib/events/on.js","webpack://CCLibraries/./node_modules/dom-helpers/lib/ownerDocument.js","webpack://CCLibraries/./node_modules/dom-helpers/lib/query/closest.js","webpack://CCLibraries/./node_modules/dom-helpers/lib/query/contains.js","webpack://CCLibraries/./node_modules/dom-helpers/lib/query/isWindow.js","webpack://CCLibraries/./node_modules/dom-helpers/lib/query/matches.js","webpack://CCLibraries/./node_modules/dom-helpers/lib/query/offset.js","webpack://CCLibraries/./node_modules/dom-helpers/lib/query/offsetParent.js","webpack://CCLibraries/./node_modules/dom-helpers/lib/query/position.js","webpack://CCLibraries/./node_modules/dom-helpers/lib/query/querySelectorAll.js","webpack://CCLibraries/./node_modules/dom-helpers/lib/query/scrollLeft.js","webpack://CCLibraries/./node_modules/dom-helpers/lib/query/scrollTop.js","webpack://CCLibraries/./node_modules/dom-helpers/lib/style/getComputedStyle.js","webpack://CCLibraries/./node_modules/dom-helpers/lib/style/index.js","webpack://CCLibraries/./node_modules/dom-helpers/lib/style/removeStyle.js","webpack://CCLibraries/./node_modules/dom-helpers/lib/transition/isTransform.js","webpack://CCLibraries/./node_modules/dom-helpers/lib/transition/properties.js","webpack://CCLibraries/./node_modules/dom-helpers/lib/util/camelize.js","webpack://CCLibraries/./node_modules/dom-helpers/lib/util/camelizeStyle.js","webpack://CCLibraries/./node_modules/dom-helpers/lib/util/hyphenate.js","webpack://CCLibraries/./node_modules/dom-helpers/lib/util/hyphenateStyle.js","webpack://CCLibraries/./node_modules/dom-helpers/lib/util/inDOM.js","webpack://CCLibraries/./node_modules/dom-helpers/lib/util/scrollbarSize.js","webpack://CCLibraries/./node_modules/event-target-shim/src/event.mjs","webpack://CCLibraries/./node_modules/event-target-shim/src/event-target.mjs","webpack://CCLibraries/./node_modules/events/events.js","webpack://CCLibraries/./node_modules/filter-obj/index.js","webpack://CCLibraries/./node_modules/intl-messageformat-parser/index.js","webpack://CCLibraries/../../../../src/parser.js","webpack://CCLibraries/./node_modules/is-buffer/index.js","webpack://CCLibraries/./node_modules/localforage/dist/localforage.js","webpack://CCLibraries/./node_modules/lottie-web/build/player/lottie.js","webpack://CCLibraries/./node_modules/md5/md5.js","webpack://CCLibraries/./node_modules/mobx-react/index.js","webpack://CCLibraries/./node_modules/mobx-react/index.module.js","webpack://CCLibraries/./node_modules/mobx/lib/mobx.module.js","webpack://CCLibraries/./node_modules/object-assign/index.js","webpack://CCLibraries/./node_modules/path-browserify/index.js","webpack://CCLibraries/./node_modules/process/browser.js","webpack://CCLibraries/./node_modules/prop-types-extra/lib/componentOrElement.js","webpack://CCLibraries/./node_modules/prop-types-extra/lib/deprecated.js","webpack://CCLibraries/./node_modules/prop-types-extra/lib/elementType.js","webpack://CCLibraries/./node_modules/prop-types-extra/lib/utils/createChainableTypeChecker.js","webpack://CCLibraries/./node_modules/prop-types-extra/node_modules/warning/warning.js","webpack://CCLibraries/./node_modules/prop-types/factoryWithThrowingShims.js","webpack://CCLibraries/./node_modules/prop-types/index.js","webpack://CCLibraries/./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack://CCLibraries/./node_modules/punycode/punycode.js","webpack://CCLibraries/./node_modules/react-dom/cjs/react-dom.production.min.js","webpack://CCLibraries/./node_modules/react-dom/index.js","webpack://CCLibraries/./node_modules/react-fast-compare/index.js","webpack://CCLibraries/./node_modules/react-is/cjs/react-is.production.min.js","webpack://CCLibraries/./node_modules/react-is/index.js","webpack://CCLibraries/./node_modules/react-lifecycles-compat/react-lifecycles-compat.es.js","webpack://CCLibraries/./node_modules/react-overlays/lib/LegacyPortal.js","webpack://CCLibraries/./node_modules/react-overlays/lib/Modal.js","webpack://CCLibraries/./node_modules/react-overlays/lib/ModalManager.js","webpack://CCLibraries/./node_modules/react-overlays/lib/Portal.js","webpack://CCLibraries/./node_modules/react-overlays/lib/RefHolder.js","webpack://CCLibraries/./node_modules/react-overlays/lib/RootCloseWrapper.js","webpack://CCLibraries/./node_modules/react-overlays/lib/utils/addEventListener.js","webpack://CCLibraries/./node_modules/react-overlays/lib/utils/addFocusListener.js","webpack://CCLibraries/./node_modules/react-overlays/lib/utils/getContainer.js","webpack://CCLibraries/./node_modules/react-overlays/lib/utils/isOverflowing.js","webpack://CCLibraries/./node_modules/react-overlays/lib/utils/manageAriaHidden.js","webpack://CCLibraries/./node_modules/react-overlays/lib/utils/ownerDocument.js","webpack://CCLibraries/./node_modules/react-popper/node_modules/warning/warning.js","webpack://CCLibraries/./node_modules/react-transition-group/Transition.js","webpack://CCLibraries/./node_modules/react-transition-group/utils/PropTypes.js","webpack://CCLibraries/./node_modules/react-virtualized/dist/es/vendor/detectElementResize.js","webpack://CCLibraries/./node_modules/react-virtualized/dist/es/AutoSizer/AutoSizer.js","webpack://CCLibraries/./node_modules/react-virtualized/dist/es/utils/createCallbackMemoizer.js","webpack://CCLibraries/./node_modules/react-virtualized/dist/es/Collection/CollectionView.js","webpack://CCLibraries/./node_modules/react-virtualized/dist/es/Collection/Section.js","webpack://CCLibraries/./node_modules/react-virtualized/dist/es/Collection/SectionManager.js","webpack://CCLibraries/./node_modules/react-virtualized/dist/es/utils/getUpdatedOffsetForIndex.js","webpack://CCLibraries/./node_modules/react-virtualized/dist/es/Collection/Collection.js","webpack://CCLibraries/./node_modules/react-virtualized/dist/es/Collection/utils/calculateSizeAndPositionData.js","webpack://CCLibraries/./node_modules/react/cjs/react.production.min.js","webpack://CCLibraries/./node_modules/react/index.js","webpack://CCLibraries/./node_modules/regenerator-runtime/runtime.js","webpack://CCLibraries/./node_modules/sanitize-filename/index.js","webpack://CCLibraries/./node_modules/scheduler/cjs/scheduler.production.min.js","webpack://CCLibraries/./node_modules/scheduler/index.js","webpack://CCLibraries/./node_modules/semver-compare/index.js","webpack://CCLibraries/./node_modules/semver/classes/comparator.js","webpack://CCLibraries/./node_modules/semver/classes/range.js","webpack://CCLibraries/./node_modules/semver/classes/semver.js","webpack://CCLibraries/./node_modules/semver/functions/cmp.js","webpack://CCLibraries/./node_modules/semver/functions/compare.js","webpack://CCLibraries/./node_modules/semver/functions/eq.js","webpack://CCLibraries/./node_modules/semver/functions/gt.js","webpack://CCLibraries/./node_modules/semver/functions/gte.js","webpack://CCLibraries/./node_modules/semver/functions/lt.js","webpack://CCLibraries/./node_modules/semver/functions/lte.js","webpack://CCLibraries/./node_modules/semver/functions/neq.js","webpack://CCLibraries/./node_modules/semver/functions/satisfies.js","webpack://CCLibraries/./node_modules/semver/internal/constants.js","webpack://CCLibraries/./node_modules/semver/internal/debug.js","webpack://CCLibraries/./node_modules/semver/internal/identifiers.js","webpack://CCLibraries/./node_modules/semver/internal/parse-options.js","webpack://CCLibraries/./node_modules/semver/internal/re.js","webpack://CCLibraries/./node_modules/semver/node_modules/lru-cache/index.js","webpack://CCLibraries/./node_modules/semver/node_modules/yallist/iterator.js","webpack://CCLibraries/./node_modules/semver/node_modules/yallist/yallist.js","webpack://CCLibraries/./node_modules/split-on-first/index.js","webpack://CCLibraries/./node_modules/strict-uri-encode/index.js","webpack://CCLibraries/./node_modules/toggle-selection/index.js","webpack://CCLibraries/./node_modules/truncate-utf8-bytes/browser.js","webpack://CCLibraries/./node_modules/truncate-utf8-bytes/lib/truncate.js","webpack://CCLibraries/./node_modules/uri-templates/uri-templates.js","webpack://CCLibraries/./node_modules/utf8-byte-length/browser.js","webpack://CCLibraries/./node_modules/uuid/index.js","webpack://CCLibraries/./node_modules/uuid/lib/bytesToUuid.js","webpack://CCLibraries/./node_modules/uuid/lib/rng-browser.js","webpack://CCLibraries/./node_modules/uuid/v1.js","webpack://CCLibraries/./node_modules/uuid/v4.js","webpack://CCLibraries/./node_modules/warning/browser.js","webpack://CCLibraries/./node_modules/ws/browser.js","webpack://CCLibraries/./node_modules/xmldom/dom-parser.js","webpack://CCLibraries/./node_modules/xmldom/dom.js","webpack://CCLibraries/./node_modules/xmldom/sax.js","webpack://CCLibraries/./scripts/prevent-arbitrary-code-execution.js","webpack://CCLibraries/./scripts/set-public-path.js","webpack://CCLibraries/./app/images/icons/AH404Error.svg","webpack://CCLibraries/./app/images/icons/AHEmptyLibrary.svg","webpack://CCLibraries/./app/images/icons/ActivateFonts.svg","webpack://CCLibraries/./app/images/icons/ActivateFontsSpinner.svg","webpack://CCLibraries/./app/images/icons/Add.svg","webpack://CCLibraries/./app/images/icons/Add12.svg","webpack://CCLibraries/./app/images/icons/Add14.svg","webpack://CCLibraries/./app/images/icons/AddAnimation.svg","webpack://CCLibraries/./app/images/icons/AddBrush.svg","webpack://CCLibraries/./app/images/icons/AddCCLibrary.svg","webpack://CCLibraries/./app/images/icons/AddCharacterStyle.svg","webpack://CCLibraries/./app/images/icons/AddCircle.svg","webpack://CCLibraries/./app/images/icons/AddCircleOutline.svg","webpack://CCLibraries/./app/images/icons/AddComponent.svg","webpack://CCLibraries/./app/images/icons/AddCopy.svg","webpack://CCLibraries/./app/images/icons/AddDropdown.svg","webpack://CCLibraries/./app/images/icons/AddGroup.svg","webpack://CCLibraries/./app/images/icons/AddImage.svg","webpack://CCLibraries/./app/images/icons/AddLayerStyle.svg","webpack://CCLibraries/./app/images/icons/AddLink.svg","webpack://CCLibraries/./app/images/icons/AddLook.svg","webpack://CCLibraries/./app/images/icons/AddModel.svg","webpack://CCLibraries/./app/images/icons/AddParagraphStyle.svg","webpack://CCLibraries/./app/images/icons/AddStock.svg","webpack://CCLibraries/./app/images/icons/AddText.svg","webpack://CCLibraries/./app/images/icons/AdobeFonts.svg","webpack://CCLibraries/./app/images/icons/Alert.svg","webpack://CCLibraries/./app/images/icons/AlertOutline.svg","webpack://CCLibraries/./app/images/icons/AllFilterIcon.svg","webpack://CCLibraries/./app/images/icons/ArrowDown.svg","webpack://CCLibraries/./app/images/icons/ArrowUp.svg","webpack://CCLibraries/./app/images/icons/AssetBrokenElement.svg","webpack://CCLibraries/./app/images/icons/AssetBrokenLink.svg","webpack://CCLibraries/./app/images/icons/AssetLinked.svg","webpack://CCLibraries/./app/images/icons/AssetRestricted.svg","webpack://CCLibraries/./app/images/icons/AssetUpdate.svg","webpack://CCLibraries/./app/images/icons/AssetUploading.svg","webpack://CCLibraries/./app/images/icons/Back.svg","webpack://CCLibraries/./app/images/icons/BackArrow.svg","webpack://CCLibraries/./app/images/icons/Browse.svg","webpack://CCLibraries/./app/images/icons/BrowseTeamLibrary.svg","webpack://CCLibraries/./app/images/icons/Building.svg","webpack://CCLibraries/./app/images/icons/CCLibrary.svg","webpack://CCLibraries/./app/images/icons/CCLibrary16.svg","webpack://CCLibraries/./app/images/icons/CCLibraryLocked.svg","webpack://CCLibraries/./app/images/icons/CCXCreateBrandPlus.svg","webpack://CCLibraries/./app/images/icons/CCXCreateColor.svg","webpack://CCLibraries/./app/images/icons/CCXCreateFont.svg","webpack://CCLibraries/./app/images/icons/CCXCreateImage.svg","webpack://CCLibraries/./app/images/icons/CCXCreateLogo.svg","webpack://CCLibraries/./app/images/icons/CCXCreateTemplate.svg","webpack://CCLibraries/./app/images/icons/CCXDiscoverLibraries.svg","webpack://CCLibraries/./app/images/icons/CCXEmptyBrands.svg","webpack://CCLibraries/./app/images/icons/CCXEmptyLibrary.svg","webpack://CCLibraries/./app/images/icons/CCXGenericLibraries.svg","webpack://CCLibraries/./app/images/icons/CCXLibraryLarge.svg","webpack://CCLibraries/./app/images/icons/Capture.svg","webpack://CCLibraries/./app/images/icons/ChangeCloud.svg","webpack://CCLibraries/./app/images/icons/Checkmark.svg","webpack://CCLibraries/./app/images/icons/CheckmarkCircle.svg","webpack://CCLibraries/./app/images/icons/CheckmarkRounded.svg","webpack://CCLibraries/./app/images/icons/ChevronDownMedium.svg","webpack://CCLibraries/./app/images/icons/ChevronDownSmall.svg","webpack://CCLibraries/./app/images/icons/ChevronLeftMedium.svg","webpack://CCLibraries/./app/images/icons/ChevronLeftSmall.svg","webpack://CCLibraries/./app/images/icons/ChevronRightMedium.svg","webpack://CCLibraries/./app/images/icons/ChevronRightSmall.svg","webpack://CCLibraries/./app/images/icons/Clock.svg","webpack://CCLibraries/./app/images/icons/Close.svg","webpack://CCLibraries/./app/images/icons/Cloud.svg","webpack://CCLibraries/./app/images/icons/Copy.svg","webpack://CCLibraries/./app/images/icons/CreateATeamLibrary.svg","webpack://CCLibraries/./app/images/icons/CreateColor.svg","webpack://CCLibraries/./app/images/icons/CreateColortheme.svg","webpack://CCLibraries/./app/images/icons/CreateFont.svg","webpack://CCLibraries/./app/images/icons/CreateImage.svg","webpack://CCLibraries/./app/images/icons/CreateLogo.svg","webpack://CCLibraries/./app/images/icons/CreateTemplate.svg","webpack://CCLibraries/./app/images/icons/CreativeCloud.svg","webpack://CCLibraries/./app/images/icons/CreativeCloudAlert.svg","webpack://CCLibraries/./app/images/icons/CreativeCloudError.svg","webpack://CCLibraries/./app/images/icons/Date.svg","webpack://CCLibraries/./app/images/icons/Delete.svg","webpack://CCLibraries/./app/images/icons/DiscoverLibraries.svg","webpack://CCLibraries/./app/images/icons/DocumentAssets.svg","webpack://CCLibraries/./app/images/icons/DownArrow.svg","webpack://CCLibraries/./app/images/icons/Duplicate.svg","webpack://CCLibraries/./app/images/icons/Edit.svg","webpack://CCLibraries/./app/images/icons/EmptyLibrary.svg","webpack://CCLibraries/./app/images/icons/EmptyLibrary1.svg","webpack://CCLibraries/./app/images/icons/EmptyLibrary2.svg","webpack://CCLibraries/./app/images/icons/EmptyLibrary3.svg","webpack://CCLibraries/./app/images/icons/Error.svg","webpack://CCLibraries/./app/images/icons/Filter.svg","webpack://CCLibraries/./app/images/icons/Filter16.svg","webpack://CCLibraries/./app/images/icons/FilterApplied.svg","webpack://CCLibraries/./app/images/icons/FilterNotification16.svg","webpack://CCLibraries/./app/images/icons/FilterWarning.svg","webpack://CCLibraries/./app/images/icons/Flag.svg","webpack://CCLibraries/./app/images/icons/Folder.svg","webpack://CCLibraries/./app/images/icons/FolderOpen.svg","webpack://CCLibraries/./app/images/icons/Globe.svg","webpack://CCLibraries/./app/images/icons/GlobeSearch.svg","webpack://CCLibraries/./app/images/icons/GridView.svg","webpack://CCLibraries/./app/images/icons/Group.svg","webpack://CCLibraries/./app/images/icons/HelpOutline.svg","webpack://CCLibraries/./app/images/icons/IlluAccessAssetsEverywhere.svg","webpack://CCLibraries/./app/images/icons/Info.svg","webpack://CCLibraries/./app/images/icons/InfoOutline.svg","webpack://CCLibraries/./app/images/icons/Invite.svg","webpack://CCLibraries/./app/images/icons/Leave.svg","webpack://CCLibraries/./app/images/icons/LibraryAccess.svg","webpack://CCLibraries/./app/images/icons/Link.svg","webpack://CCLibraries/./app/images/icons/LinkedDocumentLibrary_CanEdit.svg","webpack://CCLibraries/./app/images/icons/LinkedDocumentLibrary_CanView.svg","webpack://CCLibraries/./app/images/icons/LinkedLibrary.svg","webpack://CCLibraries/./app/images/icons/ListView.svg","webpack://CCLibraries/./app/images/icons/Lock.svg","webpack://CCLibraries/./app/images/icons/LockMenu.svg","webpack://CCLibraries/./app/images/icons/LockPopup.svg","webpack://CCLibraries/./app/images/icons/Logos.svg","webpack://CCLibraries/./app/images/icons/Magnify.svg","webpack://CCLibraries/./app/images/icons/MissingFontWarning.svg","webpack://CCLibraries/./app/images/icons/More.svg","webpack://CCLibraries/./app/images/icons/Move.svg","webpack://CCLibraries/./app/images/icons/NamingOrder.svg","webpack://CCLibraries/./app/images/icons/Next.svg","webpack://CCLibraries/./app/images/icons/NoSearchResults.svg","webpack://CCLibraries/./app/images/icons/Note.svg","webpack://CCLibraries/./app/images/icons/OnboardingCCLibrary.svg","webpack://CCLibraries/./app/images/icons/OpenIn.svg","webpack://CCLibraries/./app/images/icons/Organisations.svg","webpack://CCLibraries/./app/images/icons/PathView.svg","webpack://CCLibraries/./app/images/icons/PlaceOnCanvas.svg","webpack://CCLibraries/./app/images/icons/Plus.svg","webpack://CCLibraries/./app/images/icons/PlusDrag.svg","webpack://CCLibraries/./app/images/icons/Projects.svg","webpack://CCLibraries/./app/images/icons/PublishRemove.svg","webpack://CCLibraries/./app/images/icons/Question.svg","webpack://CCLibraries/./app/images/icons/ReadOnly.svg","webpack://CCLibraries/./app/images/icons/Rename.svg","webpack://CCLibraries/./app/images/icons/ReuseUpdateAssets.svg","webpack://CCLibraries/./app/images/icons/SX_Buildings.svg","webpack://CCLibraries/./app/images/icons/SX_Delete.svg","webpack://CCLibraries/./app/images/icons/SX_Edit.svg","webpack://CCLibraries/./app/images/icons/SX_Filter.svg","webpack://CCLibraries/./app/images/icons/SX_Flag.svg","webpack://CCLibraries/./app/images/icons/SX_GlobeGrid.svg","webpack://CCLibraries/./app/images/icons/SX_Invite.svg","webpack://CCLibraries/./app/images/icons/SX_Leave.svg","webpack://CCLibraries/./app/images/icons/SX_PublishRemove.svg","webpack://CCLibraries/./app/images/icons/SX_Rename.svg","webpack://CCLibraries/./app/images/icons/SX_Search.svg","webpack://CCLibraries/./app/images/icons/SX_SortOrderDown.svg","webpack://CCLibraries/./app/images/icons/SX_SortOrderUp.svg","webpack://CCLibraries/./app/images/icons/SX_User.svg","webpack://CCLibraries/./app/images/icons/SX_UserGroup.svg","webpack://CCLibraries/./app/images/icons/S_MoveTo_18_N.svg","webpack://CCLibraries/./app/images/icons/Settings.svg","webpack://CCLibraries/./app/images/icons/ShareAssets.svg","webpack://CCLibraries/./app/images/icons/Shop.svg","webpack://CCLibraries/./app/images/icons/ShoppingCart.svg","webpack://CCLibraries/./app/images/icons/ShowMenu.svg","webpack://CCLibraries/./app/images/icons/Sort.svg","webpack://CCLibraries/./app/images/icons/SortDescending.svg","webpack://CCLibraries/./app/images/icons/StockLicensedBadge.svg","webpack://CCLibraries/./app/images/icons/Subscribed.svg","webpack://CCLibraries/./app/images/icons/SyncAlert.svg","webpack://CCLibraries/./app/images/icons/SyncDefault.svg","webpack://CCLibraries/./app/images/icons/SyncError.svg","webpack://CCLibraries/./app/images/icons/Syncing.svg","webpack://CCLibraries/./app/images/icons/SyncingSpinner.svg","webpack://CCLibraries/./app/images/icons/TraditionalLibrary_CanEdit.svg","webpack://CCLibraries/./app/images/icons/TraditionalLibrary_CanView.svg","webpack://CCLibraries/./app/images/icons/TreeView.svg","webpack://CCLibraries/./app/images/icons/UploadDocAssets.svg","webpack://CCLibraries/./app/images/icons/UploadImage.svg","webpack://CCLibraries/./app/images/icons/UseAsBrand.svg","webpack://CCLibraries/./app/images/icons/UseAsLibrary.svg","webpack://CCLibraries/./app/images/icons/User.svg","webpack://CCLibraries/./app/images/icons/UserGroup.svg","webpack://CCLibraries/./app/images/icons/VerifyContentAuthenticity.svg","webpack://CCLibraries/./app/images/icons/Visibility.svg","webpack://CCLibraries/./app/images/icons/XDFile.svg","webpack://CCLibraries/./app/js/components/spectrum/SpectrumPagination.jsx","webpack://CCLibraries/./app/js/components/BaseInfoPanelController.jsx","webpack://CCLibraries/./app/js/components/Button.jsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/ButtonGroup.tsx","webpack://CCLibraries/./app/js/components/ButtonGroup.jsx","webpack://CCLibraries/./app/js/components/ContextMenuButton/index.scss","webpack://CCLibraries/./app/js/components/ContextMenuButton/index.jsx","webpack://CCLibraries/./app/js/components/CreateItemCard/index.scss","webpack://CCLibraries/./app/js/components/CreateItemCard/index.jsx","webpack://CCLibraries/./app/js/components/DialogContainerView.jsx","webpack://CCLibraries/./app/js/components/DiscoverLibrariesMessage.jsx","webpack://CCLibraries/./app/js/components/EmptyFilterLibraryView/index.scss","webpack://CCLibraries/./app/js/components/EmptyFilterLibraryView/index.jsx","webpack://CCLibraries/./app/js/components/HTMLText.jsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/utils.ts","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/Add.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/AddCircle.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/Alert.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/Building.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/Browse.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/Brush.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/CCLibrary.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/Checkmark.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/ChevronDown.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/ChevronLeft.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/ChevronRight.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/ClassicGridView.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/Close.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/Cloud.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/CloudDisconnected.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/CloudError.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/ColorPalette.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/Date.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/Delete.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/DownloadFromCloudOutline.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/Edit.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/Filter.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/FilterCheck.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/Flag.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/Folder.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/FolderAdd.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/FolderOpen.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/Globe.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/GlobeSearch.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/HelpOutline.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/Image.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/Invite.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/Info.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/InfoOutline.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/Link.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/LinkOut.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/LockClosed.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/Magnify.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/More.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/OpenIn.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/Organisations.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/PublishRemove.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/RailRightClose.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/Refresh.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/Rename.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/Settings.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/ShoppingCart.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/Share.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/Shop.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/ShowMenu.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/SortOrderDown.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/SortOrderUp.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/Text.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/TextParagraph.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/User.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/UserGroup.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/UserLock.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/ViewList.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Icon/Visibility.tsx","webpack://CCLibraries/./app/js/components/Icon/spectrumIconRegistry.js","webpack://CCLibraries/./app/js/components/Icon/index.jsx","webpack://CCLibraries/./app/js/components/InfoPanelView.jsx","webpack://CCLibraries/./app/js/components/ElementTypeHeader.jsx","webpack://CCLibraries/./app/js/components/TimestampHeader.jsx","webpack://CCLibraries/./app/js/components/path-view/GroupTreeView.jsx","webpack://CCLibraries/./app/js/components/GroupHeaderView.jsx","webpack://CCLibraries/./app/js/components/GroupView.jsx","webpack://CCLibraries/./app/js/components/DropZoneView.jsx","webpack://CCLibraries/./app/js/components/utils/TargetMap.js","webpack://CCLibraries/./app/js/components/path-view/GroupPathAutocomplete.jsx","webpack://CCLibraries/./app/js/components/LibraryContentsView/BaseContentView.jsx","webpack://CCLibraries/./app/js/managers/dragDrop/groupDropTarget.js","webpack://CCLibraries/./app/js/components/LibraryContentsView/items/utils.js","webpack://CCLibraries/./app/js/components/LibraryContentsView/items/constants.js","webpack://CCLibraries/./app/js/components/LibraryContentsView/items/getViewByGroupItems.js","webpack://CCLibraries/./app/js/components/LibraryContentsView/GroupContentView.jsx","webpack://CCLibraries/./app/js/components/LibraryContentsView/items/getViewByTypeItems.js","webpack://CCLibraries/./app/js/components/LibraryContentsView/TypeContentView.jsx","webpack://CCLibraries/./app/js/components/LibraryContentsView/index.jsx","webpack://CCLibraries/./app/js/components/LibraryDropTarget.jsx","webpack://CCLibraries/./app/js/components/editable-names/EditableLibraryName.jsx","webpack://CCLibraries/./app/js/components/LibraryListItem.jsx","webpack://CCLibraries/./app/js/components/EmptyLibraryView.jsx","webpack://CCLibraries/./app/js/components/LibraryDragLayer.jsx","webpack://CCLibraries/./app/js/components/NoRelinkResult.jsx","webpack://CCLibraries/./app/js/components/LibraryView.jsx","webpack://CCLibraries/./app/js/components/MenuItems/index.scss","webpack://CCLibraries/./app/js/components/MenuItems/index.tsx","webpack://CCLibraries/./app/js/components/MenuView.jsx","webpack://CCLibraries/./app/js/components/MosaicView/index.scss","webpack://CCLibraries/./app/js/components/MosaicView/MosaicElementView.jsx","webpack://CCLibraries/./app/js/components/MosaicView/index.jsx","webpack://CCLibraries/./app/js/components/NoLibrariesView.jsx","webpack://CCLibraries/./app/js/components/NoSearchResult.jsx","webpack://CCLibraries/./app/js/components/panel-header/SearchSourceDropdown.jsx","webpack://CCLibraries/./app/js/components/panel-header/SearchBar.jsx","webpack://CCLibraries/./app/js/components/panel-header/SearchFiltersDropdown.jsx","webpack://CCLibraries/./app/js/components/panel-header/ShareButton.jsx","webpack://CCLibraries/./app/js/components/panel-header/NavigationHeaderRow.jsx","webpack://CCLibraries/./app/js/components/panel-header/HeaderView.jsx","webpack://CCLibraries/./app/js/components/panel-footer/RelinkFooterView.jsx","webpack://CCLibraries/./app/js/components/panel-footer/RemovedElementsFooterView.jsx","webpack://CCLibraries/./app/js/components/panel-footer/UpdateAllFooterView.jsx","webpack://CCLibraries/./app/js/components/panel-footer/BaseFooterMenuView.jsx","webpack://CCLibraries/./app/js/components/panel-footer/AddAssetView.jsx","webpack://CCLibraries/./app/js/components/panel-footer/AddLibraryMenuView.jsx","webpack://CCLibraries/./app/js/components/panel-footer/DocumentLibraryMenuView.js","webpack://CCLibraries/./app/js/components/panel-footer/DeleteButton.jsx","webpack://CCLibraries/./app/js/components/panel-footer/LockedPopup.jsx","webpack://CCLibraries/./app/js/components/panel-footer/LockedButton.jsx","webpack://CCLibraries/./app/js/components/panel-footer/FooterView.jsx","webpack://CCLibraries/./app/js/components/stock/StockSearchTips.jsx","webpack://CCLibraries/./app/js/components/stock/SearchFooter.jsx","webpack://CCLibraries/./app/js/components/stock/Loading.jsx","webpack://CCLibraries/./app/js/components/stock/StockSearchResults.jsx","webpack://CCLibraries/./app/js/components/stock/StockSearchView.jsx","webpack://CCLibraries/./app/js/components/PanelRootView.jsx","webpack://CCLibraries/./app/js/components/editable-names/EditableOneUpName.jsx","webpack://CCLibraries/./app/js/components/OneUpView.jsx","webpack://CCLibraries/./app/js/components/PanelView.jsx","webpack://CCLibraries/./app/js/components/ProgressBar.jsx","webpack://CCLibraries/./app/js/components/ProjectGradient/index.scss","webpack://CCLibraries/./app/js/components/ProjectGradient/index.jsx","webpack://CCLibraries/./node_modules/emoji-regex/index.mjs","webpack://CCLibraries/./app/js/components/ProjectsBanner/index.scss","webpack://CCLibraries/./app/js/components/ProjectsBanner/index.jsx","webpack://CCLibraries/./app/js/components/SearchResultHeader.jsx","webpack://CCLibraries/./app/js/components/ToastContainerView.jsx","webpack://CCLibraries/./node_modules/react-popper/lib/esm/Manager.js","webpack://CCLibraries/./node_modules/react-popper/lib/esm/utils.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/dom-utils/getWindow.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/enums.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/utils/orderModifiers.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/createPopper.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/utils/debounce.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/utils/mergeByName.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/modifiers/eventListeners.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/utils/getBasePlacement.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/utils/getVariation.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/utils/computeOffsets.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/utils/math.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/modifiers/computeStyles.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/modifiers/offset.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/dom-utils/contains.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/utils/rectToClientRect.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/utils/expandToHashMap.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/utils/detectOverflow.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/utils/within.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/utils/getAltAxis.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/modifiers/arrow.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/modifiers/hide.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/popper.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/modifiers/applyStyles.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/modifiers/flip.js","webpack://CCLibraries/./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","webpack://CCLibraries/./node_modules/react-popper/lib/esm/usePopper.js","webpack://CCLibraries/./node_modules/react-popper/lib/esm/Popper.js","webpack://CCLibraries/./node_modules/react-popper/lib/esm/Reference.js","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Tooltip.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/OverlayTrigger.tsx","webpack://CCLibraries/./app/js/components/Tooltip.jsx","webpack://CCLibraries/./app/js/components/debug/DebugHUD/index.scss","webpack://CCLibraries/./app/js/components/debug/DebugHUD/index.jsx","webpack://CCLibraries/./app/js/components/dialogs/BaseDialog.jsx","webpack://CCLibraries/./app/js/components/dialogs/CreateOrPublishLibraryDialog.jsx","webpack://CCLibraries/./app/js/components/dialogs/RelinkDocumentAssetDialog.jsx","webpack://CCLibraries/./app/js/components/dialogs/RelinkDocumentLibraryDialog.jsx","webpack://CCLibraries/./app/js/components/dialogs/RelinkOrphanedLibraryDialog.jsx","webpack://CCLibraries/./app/js/components/dialogs/ResolveBrokenLinksDialog.jsx","webpack://CCLibraries/./app/js/components/editable-names/EditableDescription.jsx","webpack://CCLibraries/./app/js/components/editable-names/EditableName.jsx","webpack://CCLibraries/./app/js/components/editable-names/EditableElementName.jsx","webpack://CCLibraries/./app/js/components/elements/utils/PlaceButton.jsx","webpack://CCLibraries/./app/js/components/elements/badges/ContentAuthenticityBadge.jsx","webpack://CCLibraries/./app/js/components/elements/badges/EditBadge.jsx","webpack://CCLibraries/./app/js/components/elements/badges/LinkBadge.jsx","webpack://CCLibraries/./app/js/components/elements/BaseElementView.jsx","webpack://CCLibraries/./app/js/components/elements/BasicThumbnailElementView.jsx","webpack://CCLibraries/./app/js/components/elements/ColorElementView.jsx","webpack://CCLibraries/./app/js/components/elements/ColorThemeElementView.jsx","webpack://CCLibraries/./app/js/components/elements/GradientElementView.jsx","webpack://CCLibraries/./app/js/components/elements/badges/LicenseBadge.jsx","webpack://CCLibraries/./app/js/components/elements/StockElementView.jsx","webpack://CCLibraries/./app/js/components/elements/badges/SyncFontBadge.jsx","webpack://CCLibraries/./app/js/components/elements/TextStyleElementView.jsx","webpack://CCLibraries/./app/js/components/elements/ThumbnailElementView.jsx","webpack://CCLibraries/./app/js/components/elements/badges/Badge.jsx","webpack://CCLibraries/./app/js/components/ccd/FileAsset.js","webpack://CCLibraries/./app/js/components/elements/utils/StockDownloadOverlay.jsx","webpack://CCLibraries/./app/js/components/elements/utils/Thumbnail.jsx","webpack://CCLibraries/./app/js/components/manager/ManagerSideNav/index.scss","webpack://CCLibraries/./app/js/components/manager/ManagerSideNav/index.jsx","webpack://CCLibraries/./app/js/components/manager/ManagerLibrariesList/index.scss","webpack://CCLibraries/./app/js/components/manager/ManagerLibrariesList/index.jsx","webpack://CCLibraries/./app/js/components/manager/ManagerMonetization/index.scss","webpack://CCLibraries/./app/js/components/manager/ManagerMonetization/index.jsx","webpack://CCLibraries/./app/js/components/manager/DocumentLibraryView/index.scss","webpack://CCLibraries/./app/js/components/manager/DocumentLibraryView/index.jsx","webpack://CCLibraries/./app/js/components/manager/ManagerContent/index.scss","webpack://CCLibraries/./app/js/components/manager/ManagerContent/index.jsx","webpack://CCLibraries/./app/js/components/manager/ManagerDialogContainerView.jsx","webpack://CCLibraries/./app/js/components/manager/ManagerToastContainerView.jsx","webpack://CCLibraries/./app/js/components/manager/ManagerView/index.scss","webpack://CCLibraries/./app/js/components/manager/ManagerView/index.jsx","webpack://CCLibraries/./app/js/components/panel-footer/CreateGroupButton.jsx","webpack://CCLibraries/./app/js/components/panel-footer/SyncButton.jsx","webpack://CCLibraries/./app/js/components/panel-header/BaseDropdown.jsx","webpack://CCLibraries/./app/js/components/panel-header/SortDropdown.jsx","webpack://CCLibraries/./app/js/components/path-view/EditableGroupPath.jsx","webpack://CCLibraries/./app/js/utils/LegacyBrowserResizeObserver.js","webpack://CCLibraries/./app/js/components/path-view/GroupPathView.jsx","webpack://CCLibraries/./app/js/components/spectrum/SpectrumCheckbox.jsx","webpack://CCLibraries/./app/js/components/spectrum/SpectrumCircleLoader.jsx","webpack://CCLibraries/./app/js/components/stock/StockSearchResultBadge.jsx","webpack://CCLibraries/./app/js/menus/stockContextMenu.js","webpack://CCLibraries/./app/js/components/stock/StockSearchResult.jsx","webpack://CCLibraries/./app/js/components/web-components/PortalContext.jsx","webpack://CCLibraries/./app/js/environments/uxp/UXPLibraryContentsView.jsx","webpack://CCLibraries/./app/js/environments/uxp/UXPTooltip.jsx","webpack://CCLibraries/./app/js/state/BaseSearchState.jsx","webpack://CCLibraries/./node_modules/@sentry/src/errorboundary.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Provider.tsx","webpack://CCLibraries/./app/js/state/LibrariesContext.jsx","webpack://CCLibraries/./app/js/components/ccd/CCDEmptyLibraryView.js","webpack://CCLibraries/./app/js/utils/expandedGridUtils.js","webpack://CCLibraries/./app/applications/ACCC/js/index.js","webpack://CCLibraries/./app/applications/AEFT/js/elements/ColorElementConfig.js","webpack://CCLibraries/./app/applications/AEFT/js/utils.js","webpack://CCLibraries/./app/applications/AEFT/js/elements/ImageElementConfig.js","webpack://CCLibraries/./app/applications/AEFT/js/elements/LookElementConfig.js","webpack://CCLibraries/./app/applications/AEFT/js/elements/VideoElementConfig.js","webpack://CCLibraries/./app/applications/AEFT/js/elements/MaterialElementConfig.js","webpack://CCLibraries/./app/applications/AEFT/js/elements/ThreeDElementConfig.js","webpack://CCLibraries/./app/applications/AEFT/js/elements/LightElementConfig.js","webpack://CCLibraries/./app/applications/AEFT/js/index.js","webpack://CCLibraries/./app/applications/CCX/js/utils.js","webpack://CCLibraries/./app/applications/CEP/CEPFontElementConfig.js","webpack://CCLibraries/./app/applications/DRWV/js/elements/ColorElementConfig.js","webpack://CCLibraries/./app/applications/DRWV/js/elements/ImageElementConfig.js","webpack://CCLibraries/./app/applications/DRWV/js/index.js","webpack://CCLibraries/./app/applications/FLPR/js/animationUtils.js","webpack://CCLibraries/./app/applications/FLPR/js/pushUtils.js","webpack://CCLibraries/./app/applications/FLPR/js/events.js","webpack://CCLibraries/./app/applications/FLPR/js/elements/AnimationElementConfig.js","webpack://CCLibraries/./app/applications/FLPR/js/elements/ColorElementConfig.js","webpack://CCLibraries/./app/applications/FLPR/js/elements/BrushElementConfig.js","webpack://CCLibraries/./app/applications/FLPR/js/elements/ImageElementConfig.js","webpack://CCLibraries/./app/applications/FLPR/js/index.js","webpack://CCLibraries/./app/applications/IDSN/js/graphicUtils.js","webpack://CCLibraries/./app/applications/IDSN/js/elements/AnimationElementConfig.js","webpack://CCLibraries/./app/applications/IDSN/js/elements/ColorElementConfig.js","webpack://CCLibraries/./app/applications/IDSN/js/elements/ColorThemeElementConfig.js","webpack://CCLibraries/./app/applications/IDSN/js/elements/ImageElementConfig.js","webpack://CCLibraries/./app/applications/IDSN/js/elements/ParagraphStyleElementConfig.js","webpack://CCLibraries/./app/applications/IDSN/js/elements/TemplateElementConfig.js","webpack://CCLibraries/./app/applications/IDSN/js/elements/TextElementConfig.js","webpack://CCLibraries/./app/applications/IDSN/js/elements/TextStyleElementConfig.js","webpack://CCLibraries/./app/applications/IDSN/js/index.js","webpack://CCLibraries/./app/applications/ILST/js/utils.js","webpack://CCLibraries/./app/applications/ILST/js/colorUtils.js","webpack://CCLibraries/./app/applications/ILST/js/textUtils.js","webpack://CCLibraries/./app/applications/ILST/js/pushUtils.js","webpack://CCLibraries/./app/applications/ILST/js/materialUtils.js","webpack://CCLibraries/./app/applications/ILST/js/events.js","webpack://CCLibraries/./app/applications/ILST/js/elements/BrushElementConfig.js","webpack://CCLibraries/./app/applications/ILST/js/elements/ColorElementConfig.js","webpack://CCLibraries/./app/applications/ILST/js/elements/ColorThemeElementConfig.js","webpack://CCLibraries/./app/applications/ILST/js/elements/FontElementConfig.js","webpack://CCLibraries/./app/applications/ILST/js/elements/ImageElementConfig.js","webpack://CCLibraries/./app/applications/ILST/js/elements/ParagraphStyleElementConfig.js","webpack://CCLibraries/./app/applications/ILST/js/elements/PatternElementConfig.js","webpack://CCLibraries/./app/applications/ILST/js/elements/TemplateElementConfig.js","webpack://CCLibraries/./app/applications/ILST/js/elements/TextElementConfig.js","webpack://CCLibraries/./app/applications/ILST/js/elements/TextStyleElementConfig.js","webpack://CCLibraries/./app/applications/ILST/js/index.js","webpack://CCLibraries/./app/applications/ILST_UXP/js/color.js","webpack://CCLibraries/./app/applications/ILST_UXP/js/utils.js","webpack://CCLibraries/./app/applications/ILST_UXP/js/colorUtils.js","webpack://CCLibraries/./app/applications/ILST_UXP/js/pushUtils.js","webpack://CCLibraries/./app/applications/ILST_UXP/js/textUtils.js","webpack://CCLibraries/./app/applications/ILST_UXP/js/events.js","webpack://CCLibraries/./app/applications/ILST_UXP/js/elements/ColorElementConfig.js","webpack://CCLibraries/./app/applications/ILST_UXP/js/elements/ColorThemeElementConfig.js","webpack://CCLibraries/./app/applications/ILST_UXP/js/elements/ImageElementConfig.js","webpack://CCLibraries/./app/applications/ILST_UXP/js/elements/ParagraphStyleElementConfig.js","webpack://CCLibraries/./app/applications/ILST_UXP/js/elements/TextElementConfig.js","webpack://CCLibraries/./app/applications/ILST_UXP/js/elements/TextStyleElementConfig.js","webpack://CCLibraries/./app/applications/ILST_UXP/js/elements/BrushElementConfig.js","webpack://CCLibraries/./app/applications/ILST_UXP/js/elements/PatternElementConfig.js","webpack://CCLibraries/./app/applications/ILST_UXP/js/elements/TemplateElementConfig.js","webpack://CCLibraries/./app/applications/ILST_UXP/js/index.js","webpack://CCLibraries/./app/applications/KBRG/js/index.js","webpack://CCLibraries/./app/applications/PHXS/js/colorUtils.js","webpack://CCLibraries/./app/applications/PHXS/js/gradientUtils.js","webpack://CCLibraries/./app/applications/PHXS/js/push.js","webpack://CCLibraries/./app/applications/PHXS/js/textUtils.js","webpack://CCLibraries/./app/applications/PHXS/js/events.js","webpack://CCLibraries/./app/applications/PHXS/js/elements/BrushElementConfig.js","webpack://CCLibraries/./app/applications/PHXS/js/elements/ColorElementConfig.js","webpack://CCLibraries/./app/applications/PHXS/js/elements/GradientElementConfig.js","webpack://CCLibraries/./app/applications/PHXS/js/imageUtils.js","webpack://CCLibraries/./app/applications/PHXS/js/elements/ImageElementConfig.js","webpack://CCLibraries/./app/applications/PHXS/js/elements/LayerStyleElementConfig.js","webpack://CCLibraries/./app/applications/PHXS/js/elements/LookElementConfig.js","webpack://CCLibraries/./app/applications/PHXS/js/elements/PatternElementConfig.js","webpack://CCLibraries/./app/applications/PHXS/js/elements/TemplateElementConfig.js","webpack://CCLibraries/./app/applications/PHXS/js/elements/TextStyleElementConfig.js","webpack://CCLibraries/./app/applications/PHXS/js/elements/ThreeDElementConfig.js","webpack://CCLibraries/./app/applications/PHXS/js/elements/FontElementConfig.js","webpack://CCLibraries/./app/applications/PHXS/js/index.js","webpack://CCLibraries/./app/applications/PHXS_UXP/js/appUtils.js","webpack://CCLibraries/./app/applications/PHXS_UXP/js/colorUtils.js","webpack://CCLibraries/./app/applications/PHXS_UXP/js/constants.js","webpack://CCLibraries/./app/applications/PHXS_UXP/js/descriptorUtils.js","webpack://CCLibraries/./app/applications/PHXS_UXP/js/documentUtils.js","webpack://CCLibraries/./app/applications/PHXS_UXP/js/genericUtils.js","webpack://CCLibraries/./app/applications/PHXS_UXP/js/imageUtils.js","webpack://CCLibraries/./app/applications/PHXS_UXP/js/brushUtils.js","webpack://CCLibraries/./app/applications/PHXS_UXP/js/gradientUtils.js","webpack://CCLibraries/./app/applications/PHXS_UXP/js/layerStyleUtil.js","webpack://CCLibraries/./app/applications/PHXS_UXP/js/push.js","webpack://CCLibraries/./app/applications/PHXS_UXP/js/events.js","webpack://CCLibraries/./app/applications/PHXS_UXP/js/highbeamUtils.js","webpack://CCLibraries/./app/applications/PHXS_UXP/js/elements/GradientElementConfig.js","webpack://CCLibraries/./app/applications/PHXS_UXP/js/elements/ColorElementConfig.js","webpack://CCLibraries/./app/applications/PHXS_UXP/js/templateUtils.js","webpack://CCLibraries/./app/applications/PHXS_UXP/js/elements/TemplateElementConfig.js","webpack://CCLibraries/./app/applications/PHXS_UXP/js/elements/BrushElementConfig.js","webpack://CCLibraries/./app/applications/PHXS_UXP/js/elements/TextStyleElementConfig.js","webpack://CCLibraries/./app/applications/PHXS_UXP/js/patternUtils.js","webpack://CCLibraries/./app/applications/PHXS_UXP/js/elements/PatternElementConfig.js","webpack://CCLibraries/./app/applications/PHXS_UXP/js/lookUtil.js","webpack://CCLibraries/./app/applications/PHXS_UXP/js/elements/LookElementConfig.js","webpack://CCLibraries/./app/applications/PHXS_UXP/js/elements/ImageElementConfig.js","webpack://CCLibraries/./app/applications/PHXS_UXP/js/elements/ThreeDElementConfig.js","webpack://CCLibraries/./app/applications/PHXS_UXP/js/elements/LayerStyleElementConfig.js","webpack://CCLibraries/./app/applications/PHXS_UXP/js/elements/FontElementConfig.js","webpack://CCLibraries/./app/applications/PHXS_UXP/js/index.js","webpack://CCLibraries/./app/applications/PHXS_UXP/js/textUtils.js","webpack://CCLibraries/./app/applications/PPRO/js/elements/ImageElementConfig.js","webpack://CCLibraries/./app/applications/PPRO/js/elements/LookElementConfig.js","webpack://CCLibraries/./app/applications/PPRO/js/elements/VideoElementConfig.js","webpack://CCLibraries/./app/applications/PPRO/js/elements/AudioElementConfig.js","webpack://CCLibraries/./app/applications/PPRO/js/elements/TextStyleElementConfig.js","webpack://CCLibraries/./app/applications/PPRO/js/index.js","webpack://CCLibraries/./app/applications/SPRK/js/Gradient.js","webpack://CCLibraries/./app/applications/SPRK/js/LinearGradient.js","webpack://CCLibraries/./app/applications/SPRK/js/RadialGradient.js","webpack://CCLibraries/./app/applications/SPRK/js/elements/ImageElementConfig.js","webpack://CCLibraries/./app/applications/SPRK/js/elements/ColorElementConfig.js","webpack://CCLibraries/./app/applications/SPRK/js/components/BaseRenderer.jsx","webpack://CCLibraries/./app/applications/SPRK/js/components/TextStyleRenderer.jsx","webpack://CCLibraries/./app/applications/SPRK/js/elements/TextStyleElementConfig.js","webpack://CCLibraries/./app/applications/SPRK/js/components/RadialGradientRenderer.jsx","webpack://CCLibraries/./app/applications/SPRK/js/elements/GradientElementConfig.js","webpack://CCLibraries/./app/applications/SPRK/js/components/ComponentRenderer.jsx","webpack://CCLibraries/./app/applications/SPRK/js/elements/ComponentElementConfig.js","webpack://CCLibraries/./app/applications/SPRK/js/elements/AudioElementConfig.js","webpack://CCLibraries/./app/applications/SPRK/js/elements/VideoElementConfig.js","webpack://CCLibraries/./app/applications/SPRK/js/components/MissingFontsHeader.jsx","webpack://CCLibraries/./app/applications/SPRK/js/components/MissingFontView.jsx","webpack://CCLibraries/./app/applications/SPRK/js/components/MissingFontsContainer.jsx","webpack://CCLibraries/./app/applications/SPRK/js/components/MissingFonts.jsx","webpack://CCLibraries/./app/applications/SPRK/js/models/documentAssets/DocumentRepresentation.js","webpack://CCLibraries/./app/applications/SPRK/js/index.js","webpack://CCLibraries/./app/applications/SPRK/js/models/MissingFontWrapper.js","webpack://CCLibraries/./app/applications/SPRK/js/models/documentAssets/DocumentAssetsContainer.js","webpack://CCLibraries/./app/applications/SPRK/js/models/documentAssets/DocumentElement.js","webpack://CCLibraries/./app/applications/SPRK/js/models/documentAssets/DocumentGroup.js","webpack://CCLibraries/./app/applications/SPRK/js/scenegraphUtils.js","webpack://CCLibraries/./app/applications/SPRK/js/utils.js","webpack://CCLibraries/./app/applications/STGR/js/addUtils.js","webpack://CCLibraries/./app/applications/STGR/js/events.js","webpack://CCLibraries/./app/applications/STGR/js/elements/ColorElementConfig.js","webpack://CCLibraries/./app/applications/STGR/js/elements/ImageElementConfig.js","webpack://CCLibraries/./app/applications/STGR/js/elements/LightElementConfig.js","webpack://CCLibraries/./app/applications/STGR/js/elements/MaterialElementConfig.js","webpack://CCLibraries/./app/applications/STGR/js/elements/ThreeDElementConfig.js","webpack://CCLibraries/./app/applications/STGR/js/index.js","webpack://CCLibraries/./app/js/managers/productManager.js","webpack://CCLibraries/./app/js/app.js","webpack://CCLibraries/./app/js/state/BaseState.js","webpack://CCLibraries/./app/js/state/RenameState.js","webpack://CCLibraries/./app/js/managers/viewManager.js","webpack://CCLibraries/./app/js/state/ManagerViewState.js","webpack://CCLibraries/./app/js/utils/LibraryActions.js","webpack://CCLibraries/./app/js/models/documentAssets/DocumentAssetsActions.js","webpack://CCLibraries/./app/js/components/TeamLibraryPermissionSelector/index.scss","webpack://CCLibraries/./app/js/components/TeamLibraryPermissionSelector/index.jsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Switch.tsx","webpack://CCLibraries/./app/js/components/TeamLibraryPermissionSwitch/index.scss","webpack://CCLibraries/./app/js/components/TeamLibraryPermissionSwitch/index.jsx","webpack://CCLibraries/./app/js/components/TeamSelector/index.scss","webpack://CCLibraries/./app/js/components/TeamSelector/index.jsx","webpack://CCLibraries/./app/js/components/dialogs/CreateLibraryDialog.jsx","webpack://CCLibraries/./app/js/components/dialogs/RenameLibraryDialog.jsx","webpack://CCLibraries/./app/js/components/dialogs/DeleteLibraryDialog.jsx","webpack://CCLibraries/./app/js/components/dialogs/NoteDialog.jsx","webpack://CCLibraries/./app/js/components/dialogs/ConfirmDialog.jsx","webpack://CCLibraries/./app/js/config/releaseNotes.js","webpack://CCLibraries/./app/js/components/dialogs/WhatsNewDialog.jsx","webpack://CCLibraries/./app/js/components/dialogs/importExport/ImportExportInitialDialog.jsx","webpack://CCLibraries/./app/js/components/dialogs/importExport/ImportExportProgressDialog.jsx","webpack://CCLibraries/./app/js/components/dialogs/importExport/ImportExportCompleteDialog.jsx","webpack://CCLibraries/./app/js/components/dialogs/importExport/ImportExportErrorDialog.jsx","webpack://CCLibraries/./app/js/components/dialogs/importExport/ImportExportCancelDialog.jsx","webpack://CCLibraries/./app/js/components/dialogs/ImportExportDialog.jsx","webpack://CCLibraries/./app/js/components/dialogs/DropFilesDialog.jsx","webpack://CCLibraries/./app/js/components/dialogs/AnalyticsDialog.jsx","webpack://CCLibraries/./app/js/components/dialogs/DebugThemeAndLocaleDialog.jsx","webpack://CCLibraries/./app/js/components/dialogs/RelinkLayerOverlay.jsx","webpack://CCLibraries/./app/js/components/dialogs/StockErrorDialog.jsx","webpack://CCLibraries/./app/js/components/dialogs/StockVideoCompPickerDialog.jsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Tray.tsx","webpack://CCLibraries/./app/js/components/dialogs/ContextMenu.jsx","webpack://CCLibraries/./app/js/components/Triangle.jsx","webpack://CCLibraries/./app/js/components/dialogs/BasePopover.jsx","webpack://CCLibraries/./app/js/components/dialogs/UnlockToolkitDialog.jsx","webpack://CCLibraries/./app/js/components/dialogs/RecentSearchesOverlay.jsx","webpack://CCLibraries/./app/js/components/dialogs/PromoteTeamLibraryDialog.jsx","webpack://CCLibraries/./app/js/components/dialogs/CopyTeamLibraryDialog.jsx","webpack://CCLibraries/./app/js/components/dialogs/DeleteTeamLibraryDialog.jsx","webpack://CCLibraries/./app/js/components/dialogs/PublishLibraryDialog.jsx","webpack://CCLibraries/./app/js/components/dialogs/QuotaWarningPopover.js","webpack://CCLibraries/./app/js/components/dialogs/OverQuotaPopover.jsx","webpack://CCLibraries/./app/js/components/dialogs/SaveCloudDocDialog.jsx","webpack://CCLibraries/./app/js/components/dialogs/EnableSyncPopup.jsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Checkbox.tsx","webpack://CCLibraries/./app/js/components/dialogs/BaseSelectTargetPopover.jsx","webpack://CCLibraries/./app/js/components/dialogs/CopyMovePickerPopover.jsx","webpack://CCLibraries/./app/js/components/dialogs/MigrateLibraryWithSlashesPopover.jsx","webpack://CCLibraries/./app/js/components/dialogs/PublishQuotaErrorDialog.jsx","webpack://CCLibraries/./app/js/components/dialogs/ViewByGroupPopover.jsx","webpack://CCLibraries/./app/js/components/dialogs/LoadLibraryByAssetIdDialog.jsx","webpack://CCLibraries/./app/js/components/dialogs/JsApi2DashboardDialog/index.scss","webpack://CCLibraries/./app/js/components/dialogs/JsApi2DashboardDialog/index.jsx","webpack://CCLibraries/./app/js/components/GenStudio/PublishBrandDialog/index.scss","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Wait.tsx","webpack://CCLibraries/./app/js/components/GenStudio/PublishBrandDialog/index.jsx","webpack://CCLibraries/./app/js/components/onboarding/CaptureOnboardingPopover.jsx","webpack://CCLibraries/./app/js/components/onboarding/onboardingConstants.jsx","webpack://CCLibraries/./app/js/components/onboarding/RootViewOnboardingPopover.jsx","webpack://CCLibraries/./app/js/components/onboarding/PathViewOnboarding.jsx","webpack://CCLibraries/./app/js/components/onboarding/PanelTeamLibraryOneUpOnboarding/index.scss","webpack://CCLibraries/./app/js/components/onboarding/PanelTeamLibraryOneUpOnboarding/index.jsx","webpack://CCLibraries/./app/js/components/onboarding/FirstEnteredLibraryOnboardingPopoverTour.jsx","webpack://CCLibraries/./app/js/components/onboarding/ManagerOnboardingPopoverTour.jsx","webpack://CCLibraries/./app/js/components/dialogs/TeamsLibraryCCDOneUpOnboardingDialog.jsx","webpack://CCLibraries/./app/js/components/dialogs/TeamsLibraryCreateCCDOnboardingDialog/index.scss","webpack://CCLibraries/./app/js/components/dialogs/TeamsLibraryCreateCCDOnboardingDialog/index.jsx","webpack://CCLibraries/./app/js/components/dialogs/RevisionHistory/index.jsx","webpack://CCLibraries/./app/js/managers/utils/librariesDialogs.js","webpack://CCLibraries/./app/js/state/BaseUIState.js","webpack://CCLibraries/./app/js/state/ManagerState.js","webpack://CCLibraries/./app/js/interface/omegaMetrics.js","webpack://CCLibraries/./app/js/utils/BrandActions.js","webpack://CCLibraries/./app/js/utils/GroupActions.js","webpack://CCLibraries/./app/js/state/PanelState.js","webpack://CCLibraries/./app/js/appState.js","webpack://CCLibraries/./app/js/components/LibraryListFilterButton.js","webpack://CCLibraries/./app/js/components/SearchOptionsMessage.js","webpack://CCLibraries/./app/js/components/utils/OverlayState.js","webpack://CCLibraries/./app/js/components/utils/PathViewState.js","webpack://CCLibraries/./app/js/config/configuration.js","webpack://CCLibraries/./app/js/config/elementConfiguration.js","webpack://CCLibraries/./app/js/config/elements/AnimationElementConfig.js","webpack://CCLibraries/./app/js/components/elements/AudioElementView.jsx","webpack://CCLibraries/./app/js/config/elements/AudioElementConfig.js","webpack://CCLibraries/./app/js/components/stock/StockSearchResultChin.jsx","webpack://CCLibraries/./app/js/components/stock/StockImageSearchResult.jsx","webpack://CCLibraries/./app/js/config/elements/BaseElementConfig.js","webpack://CCLibraries/./app/js/components/elements/BrushElementView.jsx","webpack://CCLibraries/./app/js/config/elements/BrushElementConfig.js","webpack://CCLibraries/./app/js/config/elements/ColorElementConfig.js","webpack://CCLibraries/./app/js/components/ColorThemeController.jsx","webpack://CCLibraries/./app/js/config/elements/ColorThemeElementConfig.js","webpack://CCLibraries/./app/js/config/elements/ComponentElementConfig.js","webpack://CCLibraries/./app/js/config/elements/CapsuleElementConfig.js","webpack://CCLibraries/./app/js/config/elements/ChannelElementConfig.js","webpack://CCLibraries/./app/js/config/elements/ImageGuidelineElementConfig.js","webpack://CCLibraries/./app/js/config/elements/UnsupportedElementConfig.js","webpack://CCLibraries/./app/js/config/elements/DefaultConfigs.js","webpack://CCLibraries/./app/js/config/elements/FontElementConfig.js","webpack://CCLibraries/./app/js/components/GradientController.jsx","webpack://CCLibraries/./app/js/config/elements/GradientElementConfig.js","webpack://CCLibraries/./app/js/config/elements/ImageElementConfig.js","webpack://CCLibraries/./app/js/config/elements/LayerStyleElementConfig.js","webpack://CCLibraries/./app/js/config/elements/LightElementConfig.js","webpack://CCLibraries/./app/js/config/elements/LookElementConfig.js","webpack://CCLibraries/./app/js/config/elements/MaterialElementConfig.js","webpack://CCLibraries/./app/js/config/elements/ParagraphStyleElementConfig.js","webpack://CCLibraries/./app/js/config/elements/PatternElementConfig.js","webpack://CCLibraries/./app/js/config/elements/TemplateElementConfig.js","webpack://CCLibraries/./app/js/config/elements/TextElementConfig.js","webpack://CCLibraries/./app/js/config/elements/TextStyleElementConfig.js","webpack://CCLibraries/./app/js/config/elements/ThreeDElementConfig.js","webpack://CCLibraries/./app/js/components/elements/VideoElementView.jsx","webpack://CCLibraries/./app/js/components/stock/StockVideoSearchResult.jsx","webpack://CCLibraries/./app/js/config/elements/VideoElementConfig.js","webpack://CCLibraries/./app/js/config/featureFlags.js","webpack://CCLibraries/./app/js/config/localSettings.js","webpack://CCLibraries/./app/js/environment.js","webpack://CCLibraries/./node_modules/script_module/index.js","webpack://CCLibraries/./app/applications/ILST_UXP/js/appUtils.js","webpack://CCLibraries/./app/applications/ILST_UXP/js/text.js","webpack://CCLibraries/./app/js/environments/AIEnvironment.js","webpack://CCLibraries/./app/js/environments/web/localStorage.js","webpack://CCLibraries/./app/js/environments/BaseEnvironment.js","webpack://CCLibraries/./app/js/components/web-components/util.js","webpack://CCLibraries/./app/js/components/web-components/BaseView.js","webpack://CCLibraries/./app/js/components/web-components/BaseComponentView.js","webpack://CCLibraries/./app/js/components/ccd/NoLibrariesListView.jsx","webpack://CCLibraries/./app/js/components/ccd/LibraryListOnboarding.jsx","webpack://CCLibraries/./app/js/components/ccd/LibraryListEmptyFilteredView.jsx","webpack://CCLibraries/./app/js/components/LibraryListView.jsx","webpack://CCLibraries/./app/js/components/web-components/ACCC/LibraryListView.js","webpack://CCLibraries/./app/js/components/panel-header/SelectViewTypeDropdown.jsx","webpack://CCLibraries/./app/js/components/ccd/SectionNavigationItem.jsx","webpack://CCLibraries/./app/js/components/editable-names/EditableGroupName.jsx","webpack://CCLibraries/./app/js/components/ccd/SectionNavigationGroupItem.jsx","webpack://CCLibraries/./app/js/components/ccd/SectionNavigation.js","webpack://CCLibraries/./app/js/components/ccd/CCDLibraryContentsView.jsx","webpack://CCLibraries/./app/js/components/web-components/ACCC/LibraryContentsView.js","webpack://CCLibraries/./app/js/components/web-components/ACCC/LibraryCustomDialogView.js","webpack://CCLibraries/./app/applications/ACCC/js/utils.js","webpack://CCLibraries/./app/js/components/web-components/ACCC/LibraryInfoPanelView.js","webpack://CCLibraries/./app/js/components/PanelRootExpandedView/ExpandedViewHeader/index.scss","webpack://CCLibraries/./app/js/components/PanelRootExpandedView/ExpandedViewHeader/index.jsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Card.tsx","webpack://CCLibraries/./app/js/components/PanelRootExpandedView/GridView/index.scss","webpack://CCLibraries/./app/js/components/PanelRootExpandedView/GridView/LibraryMosaicGridItem.jsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/StatusLight.tsx","webpack://CCLibraries/./app/js/components/GenStudio/BrandCard/index.scss","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/DropdownButton.tsx","webpack://CCLibraries/./app/js/components/DropdownButton/index.tsx","webpack://CCLibraries/./app/js/components/GenStudio/BrandsGradientItem/index.scss","webpack://CCLibraries/./app/js/components/GenStudio/BrandsGradientItem/index.jsx","webpack://CCLibraries/./app/js/components/GenStudio/BrandCard/index.jsx","webpack://CCLibraries/./app/js/components/PanelRootExpandedView/GridView/index.jsx","webpack://CCLibraries/./app/js/components/PanelRootExpandedView/ListView/index.scss","webpack://CCLibraries/./app/js/components/PanelRootExpandedView/ListView/LibraryMosaicListItem.jsx","webpack://CCLibraries/./app/js/components/PanelRootExpandedView/ListView/index.jsx","webpack://CCLibraries/./app/js/components/PanelRootExpandedView/index.scss","webpack://CCLibraries/./app/js/components/PanelRootExpandedView/index.jsx","webpack://CCLibraries/./app/js/components/LibraryTeamsView/index.jsx","webpack://CCLibraries/./app/js/components/web-components/ACCC/LibraryTeamsView.js","webpack://CCLibraries/./app/js/components/web-components/ACCC/LibraryYoursView.js","webpack://CCLibraries/./app/js/environments/ccd/CCDApi.js","webpack://CCLibraries/./app/js/environments/ccd/CCDAutoSizer.jsx","webpack://CCLibraries/./app/js/components/spectrum/SpectrumTooltip.scss","webpack://CCLibraries/./app/js/components/spectrum/SpectrumTooltip.jsx","webpack://CCLibraries/./app/js/interface/vulcan/CCDVulcanInterface.js","webpack://CCLibraries/./app/js/environments/CCDEnvironment.js","webpack://CCLibraries/./app/js/interface/cep_libs/CSInterface.js","webpack://CCLibraries/./app/js/interface/vulcan/CEPVulcanInterface.js","webpack://CCLibraries/./app/js/environments/CEPEnvironment.js","webpack://CCLibraries/./app/js/interface/vulcan/NodeVulcanInterface.js","webpack://CCLibraries/./app/js/environments/ElectronEnvironment.js","webpack://CCLibraries/./app/js/environments/electron/ElectronUtils.js","webpack://CCLibraries/./app/js/environments/PSEnvironment.js","webpack://CCLibraries/./app/js/environments/uxp/btoa-atob-polyfill.js","webpack://CCLibraries/./app/js/environments/uxp/UXPContextMenu.jsx","webpack://CCLibraries/./app/js/environments/uxp/UXPPanel.jsx","webpack://CCLibraries/./app/js/environments/uxp/UXPAutoSizer.jsx","webpack://CCLibraries/./app/js/environments/uxp/UXPMutationObserver.jsx","webpack://CCLibraries/./app/js/interface/vulcan/UXPVulcanInterface.js","webpack://CCLibraries/./app/js/environments/UXPEnvironment.js","webpack://CCLibraries/./app/js/environments/uxp/UXPUtils.js","webpack://CCLibraries/./app/applications/SPRK/js/components/XDTooltip.jsx","webpack://CCLibraries/./app/applications/SPRK/js/models/MissingFontsModel.js","webpack://CCLibraries/./app/js/components/ApplicationDialogView.jsx","webpack://CCLibraries/./app/js/environments/XDEnvironment.js","webpack://CCLibraries/./app/js/interface/adobeInvitationsRest.js","webpack://CCLibraries/./app/js/interface/adobeStockRest.js","webpack://CCLibraries/./app/js/interface/cep_libs/Vulcan/Vulcan.7.js","webpack://CCLibraries/./app/js/interface/cep_libs/Vulcan/Vulcan.11.js","webpack://CCLibraries/./app/js/interface/cep_libs/Vulcan/index.js","webpack://CCLibraries/./app/js/interface/constants.js","webpack://CCLibraries/./app/js/interface/cep_libs/IMSInterface.js","webpack://CCLibraries/./app/js/interface/cep_libs/NGLInterface.js","webpack://CCLibraries/./app/js/interface/imsInterface.js","webpack://CCLibraries/./app/js/interface/metrics.js","webpack://CCLibraries/./app/js/interface/operationalMetrics.js","webpack://CCLibraries/./app/js/interface/utils/AppRequestManager.js","webpack://CCLibraries/./app/js/interface/productInterface.js","webpack://CCLibraries/./app/js/interface/vulcan/BaseVulcanInterface.js","webpack://CCLibraries/./app/js/managers/dialogManager.js","webpack://CCLibraries/./app/js/managers/documentWatchManager.js","webpack://CCLibraries/./app/js/managers/dragDrop/baseDropTarget.js","webpack://CCLibraries/./app/js/managers/dragDrop/elementDropTarget.js","webpack://CCLibraries/./app/js/managers/utils/StockDragManager.js","webpack://CCLibraries/./app/js/managers/dragManager.js","webpack://CCLibraries/./app/js/interface/floodgateRest.js","webpack://CCLibraries/./app/js/managers/floodgateManager.js","webpack://CCLibraries/./app/js/managers/layerSelectionManager.js","webpack://CCLibraries/./app/js/models/ProgressiveLoaderWrapper.js","webpack://CCLibraries/./app/js/models/CCLibrariesModel.js","webpack://CCLibraries/./app/js/state/syncState.jsx","webpack://CCLibraries/./app/js/models/documentAssets/documentAssetsUtils.js","webpack://CCLibraries/./app/js/state/PublishState.js","webpack://CCLibraries/./app/js/interface/adobeTypekitRest.js","webpack://CCLibraries/./app/js/managers/utils/TypekitFont.js","webpack://CCLibraries/./app/js/managers/FontManager.js","webpack://CCLibraries/./app/js/managers/libraryManager.js","webpack://CCLibraries/./app/js/managers/libraryProcessManager.js","webpack://CCLibraries/./app/js/managers/librarySizeManager.js","webpack://CCLibraries/./app/js/models/documentAssets/links/LibraryLink.js","webpack://CCLibraries/./app/js/managers/linkManager.js","webpack://CCLibraries/./app/js/managers/lockManager.js","webpack://CCLibraries/./app/js/managers/menuManager.js","webpack://CCLibraries/./app/js/managers/tempFileManager.js","webpack://CCLibraries/./app/js/managers/testHookManager.js","webpack://CCLibraries/./app/js/managers/themeManager.js","webpack://CCLibraries/./app/js/cssloader.js","webpack://CCLibraries/./app/js/managers/thumbnailManager.js","webpack://CCLibraries/./app/js/components/toasts/BaseToast.jsx","webpack://CCLibraries/./app/js/components/toasts/BaseUndoToast.jsx","webpack://CCLibraries/./app/js/components/toasts/UndoDeleteElementsToast.jsx","webpack://CCLibraries/./app/js/components/toasts/UndoDeleteGroupToast.jsx","webpack://CCLibraries/./app/js/components/toasts/UndoDeleteDescriptionToast.jsx","webpack://CCLibraries/./app/js/components/toasts/MessageToast.jsx","webpack://CCLibraries/./app/js/components/toasts/ActionMessageToast.jsx","webpack://CCLibraries/./app/js/components/toasts/UndoMergeGroupsToast.jsx","webpack://CCLibraries/./app/js/components/toasts/SyncProgressToast.jsx","webpack://CCLibraries/./app/js/managers/toastManager.js","webpack://CCLibraries/./app/js/managers/translationManager.js","webpack://CCLibraries/./app/js/managers/utils/ApplicationFontManager.js","webpack://CCLibraries/./app/js/managers/versionManager.js","webpack://CCLibraries/./app/js/utils/openInAppUtils.js","webpack://CCLibraries/./app/js/menus/elementContextMenu.js","webpack://CCLibraries/./app/js/utils/debugUtils.js","webpack://CCLibraries/./app/js/utils/GenStudio/onboardingUtils.js","webpack://CCLibraries/./app/js/menus/flyoutMenu.js","webpack://CCLibraries/./app/js/menus/groupContextMenu.js","webpack://CCLibraries/./app/js/models/BaseElementModel.js","webpack://CCLibraries/./app/js/models/BaseGroupModel.js","webpack://CCLibraries/./app/js/models/BaseLibraryModel.js","webpack://CCLibraries/./app/js/models/BaseWrappedElementModel.js","webpack://CCLibraries/./app/js/models/ElementModel.js","webpack://CCLibraries/./app/js/models/GroupModel.js","webpack://CCLibraries/./app/js/models/BaseWrappedLibraryModel.js","webpack://CCLibraries/./app/js/models/LibraryModel.js","webpack://CCLibraries/./app/js/models/documentAssets/DocumentAssetsContainer.js","webpack://CCLibraries/./app/js/models/documentAssets/DocumentRepresentation.js","webpack://CCLibraries/./app/js/models/documentAssets/DocumentElement.js","webpack://CCLibraries/./app/js/models/documentAssets/links/AssetLink.js","webpack://CCLibraries/./app/js/models/RepresentationModel.js","webpack://CCLibraries/./app/js/models/modelCache.js","webpack://CCLibraries/./app/js/sentry.js","webpack://CCLibraries/./app/js/state/StockSearchState.js","webpack://CCLibraries/./app/js/state/elementSelectionState.js","webpack://CCLibraries/./app/js/state/groupSelectionState.js","webpack://CCLibraries/./app/js/state/LibrariesSearchState.js","webpack://CCLibraries/./app/js/state/viewState.js","webpack://CCLibraries/./app/js/utils/DOMUtils.js","webpack://CCLibraries/./app/js/utils/addElementUtils.js","webpack://CCLibraries/./app/js/utils/adobeStockLicenseUtils.js","webpack://CCLibraries/./app/js/components/LicenseStockButton.jsx","webpack://CCLibraries/./app/js/utils/adobeStockUtils.js","webpack://CCLibraries/./app/js/utils/brandUtils.js","webpack://CCLibraries/./app/js/utils/browserUtils.js","webpack://CCLibraries/./app/js/utils/captureUtils.js","webpack://CCLibraries/./app/js/utils/colorUtils.js","webpack://CCLibraries/./app/js/utils/debugLog.js","webpack://CCLibraries/./app/js/utils/dragUtils.js","webpack://CCLibraries/./app/js/utils/editOriginalUtils.js","webpack://CCLibraries/./app/js/utils/elementMetadataUtils.js","webpack://CCLibraries/./app/js/utils/elementReferenceUtils.js","webpack://CCLibraries/./app/js/utils/encodingUtils.js","webpack://CCLibraries/./app/js/utils/errorUtils.js","webpack://CCLibraries/./app/js/utils/fileUtils.js","webpack://CCLibraries/./app/js/utils/restoreGroupsTree.js","webpack://CCLibraries/./app/js/utils/groupsTree.js","webpack://CCLibraries/./app/js/utils/groupUtils.js","webpack://CCLibraries/./app/js/utils/imageUtils.js","webpack://CCLibraries/./app/js/utils/importExport.js","webpack://CCLibraries/./app/js/utils/libraryUtils.js","webpack://CCLibraries/./app/js/utils/linkUtils.js","webpack://CCLibraries/./app/js/utils/listenerUtils.js","webpack://CCLibraries/./app/js/utils/localizedSorter.js","webpack://CCLibraries/./app/js/utils/menuUtils.js","webpack://CCLibraries/./app/js/components/onboarding/CaptureOnboardingWorkflow.jsx","webpack://CCLibraries/./app/js/utils/onboardingUtils.js","webpack://CCLibraries/./app/js/utils/performanceUtils.js","webpack://CCLibraries/./app/js/utils/promiseUtils.js","webpack://CCLibraries/./app/js/utils/searchUtils.js","webpack://CCLibraries/./app/js/utils/stringUtils.js","webpack://CCLibraries/./app/js/utils/textstyleUtils.js","webpack://CCLibraries/./app/js/components/spectrum/SpectrumSwitch.jsx","webpack://CCLibraries/./app/js/components/FontActivationSwitch.js","webpack://CCLibraries/./app/js/utils/typekitUtils.js","webpack://CCLibraries/./app/js/utils/unitUtils.js","webpack://CCLibraries/./app/js/utils/uxpEventTarget.js","webpack://CCLibraries/./node_modules/@adobe/uxp-optimized/lib/Virtualizer/VirtualManager.js","webpack://CCLibraries/./node_modules/@adobe/uxp-optimized/lib/Virtualizer/Virtualizer.js","webpack://CCLibraries/./node_modules/@adobe/uxp-optimized/lib/Virtualizer/VirtualizerApi.js","webpack://CCLibraries/./node_modules/@adobe/uxp-optimized/lib/Virtualizer/getStableArray.js","webpack://CCLibraries/./node_modules/@adobe/uxp-optimized/lib/Virtualizer/index.js","webpack://CCLibraries/./node_modules/@adobe/uxp-optimized/lib/common/Margin.js","webpack://CCLibraries/./node_modules/@adobe/uxp-optimized/lib/common/ResizeObserver.js","webpack://CCLibraries/./node_modules/@adobe/uxp-optimized/lib/common/lerp.js","webpack://CCLibraries/./node_modules/@adobe/uxp-optimized/lib/common/memoize.js","webpack://CCLibraries/./node_modules/@adobe/uxp-optimized/lib/common/scrollToShim.js","webpack://CCLibraries/./node_modules/@adobe/uxp-optimized/lib/common/shims.js","webpack://CCLibraries/./node_modules/@adobe/uxp-optimized/lib/index.js","webpack://CCLibraries/../../../src/utils/MimeTypeUtils.ts","webpack://CCLibraries/../../../src/config/constants.ts","webpack://CCLibraries/../../../../src/models/utils/index.ts","webpack://CCLibraries/../../../src/utils/LinkUtils.ts","webpack://CCLibraries/../../../src/utils/FileUtils.ts","webpack://CCLibraries/../../../src/errors/BaseError.ts","webpack://CCLibraries/../../../src/errors/LibraryError.ts","webpack://CCLibraries/../../../../src/models/utils/RestrictedEventEmitter.ts","webpack://CCLibraries/../../../src/utils/AsyncOperation.ts","webpack://CCLibraries/../../../src/utils/Logger.ts","webpack://CCLibraries/../../../src/errors/RequestError.ts","webpack://CCLibraries/../../../src/drivers/AsyncResponseParser.ts","webpack://CCLibraries/../../../src/drivers/AsyncResponse.ts","webpack://CCLibraries/../../../src/utils/mobXRegistry.ts","webpack://CCLibraries/../../../src/utils/observable.ts","webpack://CCLibraries/./node_modules/microdiff/dist/index.js","webpack://CCLibraries/../../../src/utils/ActionUtils.ts","webpack://CCLibraries/../../../src/models/ApplicationAction.ts","webpack://CCLibraries/../../../src/models/Configuration.ts","webpack://CCLibraries/../../../src/utils/index.ts","webpack://CCLibraries/../../../src/utils/SignalUtils.ts","webpack://CCLibraries/../../../src/drivers/Driver.ts","webpack://CCLibraries/../../../src/utils/PromiseCache.ts","webpack://CCLibraries/../../../src/models/ModelCache.ts","webpack://CCLibraries/../../../src/models/Model.ts","webpack://CCLibraries/../../../../src/models/utils/AccessUtils.ts","webpack://CCLibraries/../../../../src/models/utils/HasLibrary.ts","webpack://CCLibraries/../../../../src/models/utils/elementUtils.ts","webpack://CCLibraries/../../../src/models/PublishedModel.ts","webpack://CCLibraries/../../../../src/models/utils/makeDependentModel.ts","webpack://CCLibraries/../../../../src/models/utils/AttributeUtils.ts","webpack://CCLibraries/../../../src/models/Element.ts","webpack://CCLibraries/../../../src/utils/PathUtils.ts","webpack://CCLibraries/../../../src/utils/StoreUtils.ts","webpack://CCLibraries/../../../../src/models/utils/representationUtils.ts","webpack://CCLibraries/../../../../src/drivers/CloudDriver/utils/index.ts","webpack://CCLibraries/../../../src/utils/RenditionUtils.ts","webpack://CCLibraries/../../../../src/drivers/CloudDriver/utils/rapiModelMappers.ts","webpack://CCLibraries/../../../../src/drivers/CloudDriver/utils/melvilleModelMappers.ts","webpack://CCLibraries/../../../src/models/Representation.ts","webpack://CCLibraries/../../../src/config/CloudDriverConfig.ts","webpack://CCLibraries/../../../src/drivers/Operation.ts","webpack://CCLibraries/../../../src/drivers/SingleOperation.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/context/context.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/context/NoopContextManager.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/platform/browser/globalThis.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/version.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/internal/semver.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/internal/global-utils.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/diag/types.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/diag/ComponentLogger.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/api/diag.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/diag/internal/logLevelLogger.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/api/context.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/context-api.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/diag-api.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/metrics/NoopMeter.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/metrics/NoopMeterProvider.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/api/metrics.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/metrics-api.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/propagation/NoopTextMapPropagator.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/propagation/TextMapPropagator.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/baggage/context-helpers.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/baggage/internal/baggage-impl.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/baggage/utils.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/api/propagation.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/trace/trace_flags.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/propagation-api.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/trace/invalid-span-constants.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/trace/NonRecordingSpan.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/trace/context-utils.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/trace/spancontext-utils.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/trace/NoopTracer.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/trace/ProxyTracer.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/trace/ProxyTracerProvider.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/trace/NoopTracerProvider.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/api/trace.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/index.ts","webpack://CCLibraries/./node_modules/@opentelemetry/api/src/trace-api.ts","webpack://CCLibraries/../../../src/utils/TelemetryUtils.ts","webpack://CCLibraries/../../../../src/drivers/CloudDriver/SingleOperation.ts","webpack://CCLibraries/../../../src/drivers/MoveCopyElementOperation.ts","webpack://CCLibraries/../../../../src/drivers/CloudDriver/MoveCopyElementOperation.ts","webpack://CCLibraries/../../../../src/drivers/utils/operationUtils.ts","webpack://CCLibraries/../../../../src/drivers/CloudDriver/BatchOperation.ts","webpack://CCLibraries/../../../../src/drivers/CloudDriver/ContentOperation.ts","webpack://CCLibraries/../../../src/drivers/ParallelOperation.ts","webpack://CCLibraries/../../../../src/drivers/CloudDriver/ParallelOperation.ts","webpack://CCLibraries/../../../../src/drivers/CloudDriver/utils/rapiResponseUtils.ts","webpack://CCLibraries/../../../../src/drivers/CloudDriver/LegacyPublicLibraryExtension.ts","webpack://CCLibraries/../../../../src/drivers/CloudDriver/AssetNotificationManager.ts","webpack://CCLibraries/../../../src/utils/GeneratorUtils.ts","webpack://CCLibraries/../../../../src/drivers/utils/StorageInterface.ts","webpack://CCLibraries/../../../../src/drivers/CloudDriver/utils/samUtils.ts","webpack://CCLibraries/../../../../src/drivers/CloudDriver/index.ts","webpack://CCLibraries/../../../../src/drivers/CloudDriver/utils/responseUtils.ts","webpack://CCLibraries/../../../src/models/Action.ts","webpack://CCLibraries/../../../src/utils/JSONPath.ts","webpack://CCLibraries/../../../../src/models/utils/reducer.ts","webpack://CCLibraries/../../../src/utils/FIFOStringSet.ts","webpack://CCLibraries/../../../src/models/Store.ts","webpack://CCLibraries/../../../src/models/Group.ts","webpack://CCLibraries/../../../src/models/LibraryVersion.ts","webpack://CCLibraries/../../../src/models/Version.ts","webpack://CCLibraries/../../../src/models/Collaborator.ts","webpack://CCLibraries/../../../src/utils/Lock.ts","webpack://CCLibraries/../../../src/utils/LibraryUtils.ts","webpack://CCLibraries/../../../src/models/Library.ts","webpack://CCLibraries/../../../src/drivers/LibraryAbortController.ts","webpack://CCLibraries/../../../../src/drivers/LocalDriver/utils/restAPIModelMappers.ts","webpack://CCLibraries/../../../../src/drivers/LocalDriver/utils/generalUtils.ts","webpack://CCLibraries/../../../../src/drivers/LocalDriver/BatchOperation.ts","webpack://CCLibraries/../../../../src/drivers/LocalDriver/ContentOperation.ts","webpack://CCLibraries/../../../../src/drivers/LocalDriver/SingleOperation.ts","webpack://CCLibraries/../../../../src/drivers/LocalDriver/ParallelOperation.ts","webpack://CCLibraries/../../../../src/drivers/LocalDriver/MoveCopyElementOperation.ts","webpack://CCLibraries/../../../../src/drivers/LocalDriver/MoveCopyGroupOperation.ts","webpack://CCLibraries/../../../../src/drivers/LocalDriver/NotificationEventSource/SSENotificationEventSource.ts","webpack://CCLibraries/../../../../src/drivers/LocalDriver/NotificationEventSource/WebsocketNotificationEventSource.ts","webpack://CCLibraries/../../../../src/drivers/LocalDriver/NotificationEventSource/NodeWebsocketNotificationEventSource.ts","webpack://CCLibraries/../../../../src/drivers/LocalDriver/NotificationEventSource/index.ts","webpack://CCLibraries/../../../src/connectors/Connector.ts","webpack://CCLibraries/../../../../src/drivers/LocalDriver/index.ts","webpack://CCLibraries/../../../../src/drivers/LocalDriver/utils/responseUtils.ts","webpack://CCLibraries/../../../../src/drivers/HybridDriver/index.ts","webpack://CCLibraries/../../../../src/utils/Vulcan/index.ts","webpack://CCLibraries/../../../../src/utils/Vulcan/IVulcan.ts","webpack://CCLibraries/../../../src/connectors/cepConnector.ts","webpack://CCLibraries/../../../src/connectors/ccdConnector.ts","webpack://CCLibraries/../../../src/connectors/nodeConnector.ts","webpack://CCLibraries/../../../src/connectors/uxpConnector.ts","webpack://CCLibraries/../../../src/utils/ProgressiveLoader.ts","webpack://CCLibraries/../../../src/models/Team.ts","webpack://CCLibraries/../../../src/cache/IndexedDBInterface.ts","webpack://CCLibraries/../../../src/cache/FileSystemDatabaseAdapter.ts","webpack://CCLibraries/../../../src/models/PersistentModelCache.ts","webpack://CCLibraries/../../../../src/models/utils/makePersistentModel.ts","webpack://CCLibraries/../../../../src/models/data/LibraryData.ts","webpack://CCLibraries/../../../src/models/SyncStatus.ts","webpack://CCLibraries/../../../src/utils/ErrorUtils.ts","webpack://CCLibraries/../../../src/models/Orchestrator.ts","webpack://CCLibraries/./node_modules/@formatjs/icu-messageformat-parser/lib/error.js","webpack://CCLibraries/./node_modules/@formatjs/icu-messageformat-parser/lib/types.js","webpack://CCLibraries/./node_modules/@formatjs/icu-messageformat-parser/lib/regex.generated.js","webpack://CCLibraries/./node_modules/@formatjs/icu-skeleton-parser/lib/date-time.js","webpack://CCLibraries/./node_modules/@formatjs/icu-skeleton-parser/lib/regex.generated.js","webpack://CCLibraries/./node_modules/@formatjs/icu-skeleton-parser/lib/number.js","webpack://CCLibraries/./node_modules/@formatjs/icu-messageformat-parser/lib/time-data.generated.js","webpack://CCLibraries/./node_modules/@formatjs/icu-messageformat-parser/lib/parser.js","webpack://CCLibraries/./node_modules/@formatjs/icu-messageformat-parser/lib/date-time-pattern-generator.js","webpack://CCLibraries/./node_modules/@formatjs/icu-messageformat-parser/lib/index.js","webpack://CCLibraries/./node_modules/@formatjs/fast-memoize/lib/index.js","webpack://CCLibraries/./node_modules/intl-messageformat/lib/src/error.js","webpack://CCLibraries/./node_modules/intl-messageformat/lib/src/formatters.js","webpack://CCLibraries/./node_modules/intl-messageformat/lib/src/core.js","webpack://CCLibraries/./node_modules/@formatjs/intl/lib/src/error.js","webpack://CCLibraries/./node_modules/@formatjs/intl/lib/src/utils.js","webpack://CCLibraries/./node_modules/@formatjs/intl/lib/src/number.js","webpack://CCLibraries/./node_modules/@formatjs/intl/lib/src/relativeTime.js","webpack://CCLibraries/./node_modules/@formatjs/intl/lib/src/dateTime.js","webpack://CCLibraries/./node_modules/@formatjs/intl/lib/src/plural.js","webpack://CCLibraries/./node_modules/@formatjs/intl/lib/src/message.js","webpack://CCLibraries/./node_modules/@formatjs/ecma402-abstract/lib/utils.js","webpack://CCLibraries/./node_modules/@formatjs/intl/lib/src/list.js","webpack://CCLibraries/./node_modules/@formatjs/intl/lib/src/displayName.js","webpack://CCLibraries/./node_modules/@formatjs/intl/lib/src/create-intl.js","webpack://CCLibraries/../../src/IntlInterface.ts","webpack://CCLibraries/../../../src/models/FontManager.ts","webpack://CCLibraries/../../../src/utils/ObservableMap.ts","webpack://CCLibraries/../../../src/metrics/library.ts","webpack://CCLibraries/../../../src/metrics/element.ts","webpack://CCLibraries/../../../src/metrics/index.ts","webpack://CCLibraries/../../src/CCLibraries.ts","webpack://CCLibraries/../../src/index.ts","webpack://CCLibraries/./node_modules/@cclibraries/cc-libraries-js/node_modules/query-string/index.js","webpack://CCLibraries/./node_modules/@ccx-public/ingest/src/Ingest.js","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Button.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Rule.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Popover.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/Menu.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/utils/mergeRefs.ts","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/preload.ts","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/utils/SWCLoader.ts","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/utils/ThemeContext.ts","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/utils/createWrapper.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/utils/useForceReactSpectrum.ts","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/utils/index.tsx","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/utils/interopRequireDefault.ts","webpack://CCLibraries/./node_modules/@ccx-public/spectrum-wrapper/src/utils/undefinedModule.tsx","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Button/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Button/js/Button.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Button/js/UxpButton.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/ButtonGroup/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/ButtonGroup/js/ButtonGroup.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Card/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Card/js/Card.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Card/js/CardBody.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Card/js/CardCoverPhoto.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Card/js/CardFooter.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Card/js/CardPreview.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Checkbox/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Checkbox/js/Checkbox.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Checkbox/js/UxpCheckbox.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Dialog/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Dialog/js/Dialog.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Dialog/js/DialogButtons.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Dialog/js/DialogHeader.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Dialog/js/UxpDialog.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Dialog/js/UxpDialogButtons.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Dialog/js/UxpDialogHeader.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Dialog/js/UxpNativeDialog.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Dialog/js/UxpNonNativeDialog.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Dropdown/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Dropdown/js/Dropdown.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Dropdown/js/UxpDropdown.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/DropdownButton/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/DropdownButton/js/DropdownButton.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Heading/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Heading/js/Heading.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Add/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Add/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Add/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/AddCircle/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/AddCircle/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/AddCircle/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Alert/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Alert/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Alert/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Browse/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Browse/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Browse/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Brush/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Brush/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Brush/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Building/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Building/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Building/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/CCLibrary/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/CCLibrary/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/CCLibrary/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Checkmark/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Checkmark/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Checkmark/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/ChevronDown/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/ChevronDown/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/ChevronDown/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/ChevronLeft/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/ChevronLeft/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/ChevronLeft/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/ChevronRight/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/ChevronRight/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/ChevronRight/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/ClassicGridView/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/ClassicGridView/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/ClassicGridView/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Close/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Close/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Close/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Cloud/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Cloud/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Cloud/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/CloudDisconnected/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/CloudDisconnected/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/CloudDisconnected/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/CloudError/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/CloudError/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/CloudError/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/ColorPalette/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/ColorPalette/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/ColorPalette/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Date/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Date/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Date/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Delete/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Delete/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Delete/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Edit/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Edit/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Edit/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Filter/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Filter/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Filter/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/FilterCheck/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/FilterCheck/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/FilterCheck/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Flag/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Flag/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Flag/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Folder/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Folder/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Folder/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/FolderAdd/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/FolderAdd/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/FolderAdd/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/FolderOpen/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/FolderOpen/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/FolderOpen/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Globe/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Globe/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Globe/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/GlobeSearch/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/GlobeSearch/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/GlobeSearch/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/HelpOutline/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/HelpOutline/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/HelpOutline/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Image/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Image/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Image/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Info/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Info/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Info/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/InfoOutline/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/InfoOutline/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/InfoOutline/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Link/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Link/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Link/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/LinkOut/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/LinkOut/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/LinkOut/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/LockClosed/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/LockClosed/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/LockClosed/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Magnify/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Magnify/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Magnify/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/More/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/More/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/More/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/MoreVertical/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/MoreVertical/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/MoreVertical/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/OpenIn/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/OpenIn/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/OpenIn/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Organisations/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Organisations/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Organisations/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Pause/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Pause/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Pause/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Play/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Play/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Play/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/PublishRemove/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/PublishRemove/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/PublishRemove/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/RailRightClose/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/RailRightClose/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/RailRightClose/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Refresh/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Refresh/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Refresh/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Rename/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Rename/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Rename/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Settings/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Settings/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Settings/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Share/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Share/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Share/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/ShoppingCart/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/ShoppingCart/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/ShoppingCart/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/ShowMenu/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/ShowMenu/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/ShowMenu/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/SortOrderDown/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/SortOrderDown/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/SortOrderDown/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/SortOrderUp/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/SortOrderUp/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/SortOrderUp/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Text/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Text/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Text/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/TextParagraph/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/TextParagraph/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/TextParagraph/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/User/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/User/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/User/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/UserGroup/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/UserGroup/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/UserGroup/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/UserLock/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/UserLock/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/UserLock/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/ViewList/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/ViewList/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/ViewList/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Visibility/18.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Visibility/24.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/Visibility/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/core/AlertMedium.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/core/CheckmarkMedium.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/core/CheckmarkSmall.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/core/ChevronRightMedium.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/core/CornerTriangle.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/core/CrossLarge.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/core/CrossMedium.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/core/CrossSmall.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/core/DashSmall.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/core/InfoMedium.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/core/Magnifier.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/core/SuccessMedium.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Icon/js/Icon.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/IllustratedMessage/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/IllustratedMessage/js/IllustratedMessage.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/List/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/List/js/List.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/List/js/ListItem.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/List/js/UxpListItem.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Menu/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Menu/js/Menu.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Menu/js/MenuDivider.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Menu/js/MenuHeading.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Menu/js/MenuItem.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Menu/js/SubMenu.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Menu/js/UxpMenu.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/ModalContainer/js/ModalContainer.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/ModalContainer/js/ModalManager.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/OverlayTrigger/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/OverlayTrigger/js/Overlay.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/OverlayTrigger/js/OverlayTrigger.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/OverlayTrigger/js/Position.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/OverlayTrigger/js/UxpFlyoutOverlay.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/OverlayTrigger/js/UxpOverlay.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/OverlayTrigger/js/UxpOverlayTrigger.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/OverlayTrigger/js/UxpPosition.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/OverlayTrigger/js/calculatePosition.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Popover/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Popover/js/Popover.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Popover/js/UxpPopover.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/PortalContainer/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/PortalContainer/js/PortalContainer.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Provider/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Provider/js/Provider.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Provider/js/UxpProvider.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Rule/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Rule/js/Rule.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Search/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Search/js/Search.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Search/js/UxpSearch.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/SideNav/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/SideNav/js/SideNav.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/SideNav/js/SideNavHeading.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/SideNav/js/SideNavItem.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Switch/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Switch/js/MaybeUxpSwitchBase.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Switch/js/Switch.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Switch/js/SwitchBase.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Switch/js/UxpSwitchBase.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Textfield/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Textfield/js/Textfield.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Textfield/js/UxpTextfield.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Textfield/js/validationStateSvg.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Toast/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Toast/js/MaybeUxpToast.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Toast/js/Toast.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Toast/js/UxpToast.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Toast/js/state.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Tooltip/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Tooltip/js/Tooltip.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Tooltip/js/UxpTooltip.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Wait/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Wait/js/UxpWait.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/Wait/js/Wait.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/focus-ring-polyfill/index.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/node_modules/intl-messageformat/index.js","webpack://CCLibraries/../../../../src/compiler.js","webpack://CCLibraries/../../../../src/core.js","webpack://CCLibraries/../../../../src/en.js","webpack://CCLibraries/../../../../src/es5.js","webpack://CCLibraries/../../../../src/main.js","webpack://CCLibraries/../../../../src/utils.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/utils/FocusManager.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/utils/OpenTransition.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/utils/UxpOptions.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/utils/boundingRectOverlapping.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/utils/configureTypekit.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/utils/convertUnsafeMethod.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/utils/createId.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/utils/dna.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/utils/events.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/utils/filterDOMProps.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/utils/focusRing.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/utils/hostStyleConfig.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/utils/icon.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/utils/intl.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/utils/needsNative.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/utils/scrollToDOMNode.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/utils/setOverlayOnProvider.js","webpack://CCLibraries/./node_modules/@torq-native/react-spectrum/utils/string.js","webpack://CCLibraries/./node_modules/@babel/runtime/helpers/extends.js","webpack://CCLibraries/./node_modules/@babel/runtime/helpers/interopRequireDefault.js","webpack://CCLibraries/./node_modules/array-flat-polyfill/index.mjs","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/SAMError.ts","webpack://CCLibraries/./node_modules/@ccx-public/node_modules/tslib/tslib.es6.js","webpack://CCLibraries/./node_modules/@ccx-public/node_modules/path-browserify/index.js","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/decorators/key.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/decorators/cache.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/decorators/memoize.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/SAMEvent.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/ChangeEvent.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/decorators/observable.ts","webpack://CCLibraries/./node_modules/@ccx-public/node_modules/uri-templates/uri-templates.js","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/LinkUtils.ts","webpack://CCLibraries/./node_modules/@ccx-public/node_modules/http-link-header/lib/link.js","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/AsyncResponse.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/InterfaceBase.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/utils/clamp.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/decorators/retry.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/decorators/synchronized.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/TypedEventEmitter.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/WeakRefPolyfill.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/WeakRef.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/UpdateSession.ts","webpack://CCLibraries/./node_modules/@ccx-public/node_modules/uuid/lib/rng-browser.js","webpack://CCLibraries/./node_modules/@ccx-public/node_modules/uuid/lib/bytesToUuid.js","webpack://CCLibraries/./node_modules/@ccx-public/node_modules/uuid/v1.js","webpack://CCLibraries/./node_modules/@ccx-public/node_modules/uuid/v4.js","webpack://CCLibraries/./node_modules/@ccx-public/node_modules/uuid/index.js","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/ItemLoaderState.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/uuid.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/ItemFilter.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/SAMCoreEvents.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/collaboration/CollaboratorEvents.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/AssetModel.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/ProjectsModel.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/CustomModelModel.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/utils/oneTimeWarning.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/EverythingFilter.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/ItemList.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/ItemPool.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/USSModel.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/USSInterface.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/InvitationInterface.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/ObjectUtils.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/utils/RenditionFetcher.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/AssetUtils.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/AssetInterface.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/Cache.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/RepositoryInterface.ts","webpack://CCLibraries/./node_modules/@ccx-public/node_modules/event-target-shim/dist/event-target-shim.mjs","webpack://CCLibraries/./node_modules/@ccx-public/node_modules/abort-controller/dist/abort-controller.mjs","webpack://CCLibraries/./node_modules/@ccx-public/node_modules/abort-controller/polyfill.mjs","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/ONSSubscription.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/ONSInterface.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/RepositoryModel.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/ItemBase.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/ItemOrder.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/SWYAdobeAssetOrder.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/USSAssetFilterName.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/USSLoaderHelper.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/SWYAdobeAssetLoader.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/USSUtils.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/SBMInterface.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/SWYInterface.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/AdobeAssetSearchInterface.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/AdobeAssetGlobalSearchInterface.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/RecentInterface.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/decorators/LazyLoadManager.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/collaboration/ShareableItem.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/Resource.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/EmbeddedMetadataResource.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/AppMetadataResource.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/ManifestResource.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/ItemUpdater.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/PropertyUpdater.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/ImplicitAdobeAssetFilterBase.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/AdobeAssetSearchFilter.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/AdobeAssetOrder.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/AdobeAssetDirectoryLoader.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/USSv3Model.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/USSAdobeAssetOrder.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/AdobeAssetDirectorySearchLoader.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/utils/waitForListLoad.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/ItemSource.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/AssetVersion.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/AssetVersionLoader.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/FileContentResource.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/AssetVersionFilter.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/ImplicitDirectoryListingFilter.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/projects/addProjectIdToMetadata.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/AdobeAsset.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/AssetTransferInterface.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/AssetReviewServiceInterface.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/InternalProperties.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/SpaceSearchAssetLoader.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/SpaceSearchAssetFilter.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/workspaces/Space.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/RecentAdobeAssetLoader.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/RecentAdobeAssetFilter.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/ConflictRetryHelper.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/MRUAdobeAssetLoader.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/MRUAdobeAssetFilter.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/LibraryInterface.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/PublishedInterface.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/PublishedAdobeAssetLoader.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/PublishedAdobeAssetFilter.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/DiscardedAdobeAssetFilter.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/DiscardedInterface.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/DiscardedAdobeAssetLoader.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/AdobeAssetGlobalSearchFilter.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/MobX.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/Environment.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/USSv3Interface.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/USSv3LoaderHelper.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/GlobalSearchLoader.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/GlobalSearchInterface.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/AdobeAssetGlobalSearchLoader.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/SWYAdobeAssetFilter.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/ProjectsInterface.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/AssignmentModel.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/ClassroomMemberModel.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/utils/classroomUtils.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/AssignmentsInterface.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/StudentAssignmentModel.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assignments/StudentAssignment.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assignments/StudentAssignmentOrder.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assignments/Assignment.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/AdobeAssetFactory.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/CommentInterface.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/comments/Comment.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/comments/CommentLoader.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/comments/CommentOrder.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/comments/CommentsResource.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/AssetContext.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/links/AssetLink.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/links/AssetLinkList.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/links/AssetLinkManager.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/WorkspacesModel.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/WorkspacesInterface.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/workspaces/SpaceOrder.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/workspaces/SpaceLoader.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/collaboration/AvatarSizes.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/collaboration/Collaborator.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/workspaces/Team.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/workspaces/TeamOrder.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/workspaces/TeamLoader.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/workspaces/OrgRepository.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/workspaces/OrgRepositoryLoader.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/workspaces/TeamFilter.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/workspaces/SpaceFilter.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/workspaces/SpaceContext.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/collaboration/CollaboratorLoader.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/collaboration/InvitedCollaborator.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/collaboration/InvitedCollaboratorLoader.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/collaboration/CollaboratorsByAssetID.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/collaboration/CollaboratorsByAssetIDLoader.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/utils/ManagedPromise.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/BatchOperationQueue.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/collaboration/CollaborationContext.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/ExtendClass.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/patches/SAMCpp.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/GradientModel.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/AdobeAssetFilter.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/ImplicitDirectoryListingAssetFilter.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/projects/Project.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/projects/ProjectOrder.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/projects/ProjectsListLoader.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/projects/ProjectFilter.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/projects/Gradient.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/projects/ProjectContext.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/ClassroomModel.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/ClassroomsInterface.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/classroom-member/ClassroomMember.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/classroom-member/ClassroomMemberListLoader.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/classrooms/ClassroomMemberFilter.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/classrooms/Classroom.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/classrooms/ClassroomListLoader.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assignments/AssignmentListLoader.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/StudentAssignmentsInterface.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assignments/AssignmentOrder.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assignments/AssignmentFilter.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assignments/StudentAssignmentFile.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/utils/hasProperty.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/classrooms/ClassroomContext.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/frameio/FrameioAuthorizationChangeEvent.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/frameio/FrameioReviewLinksChangeEvent.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/frameio/FrameioInterface.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/frameio/FrameioBase.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/frameio/FrameioUser.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/frameio/FrameioAsset.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/frameio/FrameioLike.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/frameio/FrameioComment.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/frameio/FrameioFile.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/frameio/FrameioFolder.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/frameio/FrameioTeam.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/frameio/FrameioVersionStack.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/frameio/FrameioReviewLink.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/frameio/FrameioProject.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/frameio/FrameioAccount.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/frameio/FrameioContext.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/libraries/LibraryDataChangedEvent.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/libraries/RestrictEditChangedEvent.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/libraries/Library.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/libraries/ImplicitLibraryFilter.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/LibraryModel.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/libraries/LibraryOrder.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/libraries/LibraryFilter.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/libraries/LibraryListLoader.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/libraries/SubscriptionLocation.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/libraries/LibraryContext.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/custom-models/CustomModel.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/custom-models/CustomModelOrder.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/custom-models/CustomModelLoader.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/interface/CustomModelInterface.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/custom-models/CustomModelSearchLoader.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/custom-models/ImplicitCustomModelFilter.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/custom-models/CustomModelSearchFilter.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/custom-models/CustomModelContext.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/core/SAMCore.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/AssetVersionOrder.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/classrooms/ClassroomOrder.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/classroom-member/ClassroomMemberOrder.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/MRUAdobeAssetOrder.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/assets/PublishedAdobeAssetOrder.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/workspaces/OrgRepositoryOrder.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/collaboration/CollaboratorOrder.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/collaboration/InvitedCollaboratorOrder.ts","webpack://CCLibraries/./node_modules/@ccx-public/shared-asset-model-js/dist/src/collaboration/CollaboratorsByAssetIDOrder.ts","webpack://CCLibraries/./node_modules/tslib/tslib.es6.mjs","webpack://CCLibraries/webpack/bootstrap","webpack://CCLibraries/webpack/runtime/chunk loaded","webpack://CCLibraries/webpack/runtime/create fake namespace object","webpack://CCLibraries/webpack/runtime/load script","webpack://CCLibraries/webpack/runtime/amd options","webpack://CCLibraries/webpack/runtime/compat get default export","webpack://CCLibraries/webpack/runtime/define property getters","webpack://CCLibraries/webpack/runtime/ensure chunk","webpack://CCLibraries/webpack/runtime/get javascript chunk filename","webpack://CCLibraries/webpack/runtime/global","webpack://CCLibraries/webpack/runtime/harmony module decorator","webpack://CCLibraries/webpack/runtime/hasOwnProperty shorthand","webpack://CCLibraries/webpack/runtime/make namespace object","webpack://CCLibraries/webpack/runtime/node module decorator","webpack://CCLibraries/webpack/runtime/publicPath","webpack://CCLibraries/webpack/runtime/jsonp chunk loading","webpack://CCLibraries/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"CCLibraries\"] = factory();\n\telse\n\t\troot[\"CCLibraries\"] = factory();\n})(self, () => {\nreturn ","var map = {\n\t\"./ACCC/css/darker/main.scss\": [\n\t\t60853,\n\t\t3326\n\t],\n\t\"./ACCC/css/light/main.scss\": [\n\t\t10417,\n\t\t5180\n\t],\n\t\"./AEFT/css/dark-v7/main.scss\": [\n\t\t14957,\n\t\t7725\n\t],\n\t\"./AEFT/css/dark/main.scss\": [\n\t\t63853,\n\t\t5599\n\t],\n\t\"./AEFT/css/darker/main.scss\": [\n\t\t39542,\n\t\t4231\n\t],\n\t\"./AEFT/css/generated/10/main.scss\": [\n\t\t55562,\n\t\t2923\n\t],\n\t\"./AEFT/css/generated/13/main.scss\": [\n\t\t86752,\n\t\t7050\n\t],\n\t\"./AEFT/css/generated/15/main.scss\": [\n\t\t28682,\n\t\t59\n\t],\n\t\"./AEFT/css/generated/18/main.scss\": [\n\t\t84447,\n\t\t4356\n\t],\n\t\"./AEFT/css/generated/20/main.scss\": [\n\t\t52234,\n\t\t7334\n\t],\n\t\"./AEFT/css/generated/23/main.scss\": [\n\t\t5426,\n\t\t4882\n\t],\n\t\"./AEFT/css/generated/25/main.scss\": [\n\t\t55166,\n\t\t2625\n\t],\n\t\"./AEFT/css/generated/28/main.scss\": [\n\t\t20605,\n\t\t4738\n\t],\n\t\"./AEFT/css/generated/3/main.scss\": [\n\t\t19521,\n\t\t1813\n\t],\n\t\"./AEFT/css/generated/30/main.scss\": [\n\t\t77768,\n\t\t2497\n\t],\n\t\"./AEFT/css/generated/33/main.scss\": [\n\t\t66726,\n\t\t9988\n\t],\n\t\"./AEFT/css/generated/35/main.scss\": [\n\t\t54003,\n\t\t5874\n\t],\n\t\"./AEFT/css/generated/38/main.scss\": [\n\t\t89138,\n\t\t2581\n\t],\n\t\"./AEFT/css/generated/40/main.scss\": [\n\t\t4175,\n\t\t9369\n\t],\n\t\"./AEFT/css/generated/43/main.scss\": [\n\t\t119,\n\t\t539\n\t],\n\t\"./AEFT/css/generated/45/main.scss\": [\n\t\t89547,\n\t\t2716\n\t],\n\t\"./AEFT/css/generated/48/main.scss\": [\n\t\t19533,\n\t\t2000\n\t],\n\t\"./AEFT/css/generated/5/main.scss\": [\n\t\t58861,\n\t\t622\n\t],\n\t\"./AEFT/css/generated/50/main.scss\": [\n\t\t64636,\n\t\t3368\n\t],\n\t\"./AEFT/css/generated/53/main.scss\": [\n\t\t58777,\n\t\t3239\n\t],\n\t\"./AEFT/css/generated/55/main.scss\": [\n\t\t94320,\n\t\t4549\n\t],\n\t\"./AEFT/css/generated/58/main.scss\": [\n\t\t60616,\n\t\t2399\n\t],\n\t\"./AEFT/css/generated/60/main.scss\": [\n\t\t59641,\n\t\t1766\n\t],\n\t\"./AEFT/css/generated/63/main.scss\": [\n\t\t94289,\n\t\t2124\n\t],\n\t\"./AEFT/css/generated/65/main.scss\": [\n\t\t20572,\n\t\t7057\n\t],\n\t\"./AEFT/css/generated/68/main.scss\": [\n\t\t95789,\n\t\t9107\n\t],\n\t\"./AEFT/css/generated/70/main.scss\": [\n\t\t60584,\n\t\t8211\n\t],\n\t\"./AEFT/css/generated/73/main.scss\": [\n\t\t42286,\n\t\t5408\n\t],\n\t\"./AEFT/css/generated/75/main.scss\": [\n\t\t18031,\n\t\t6900\n\t],\n\t\"./AEFT/css/generated/78/main.scss\": [\n\t\t10967,\n\t\t3482\n\t],\n\t\"./AEFT/css/generated/8/main.scss\": [\n\t\t45338,\n\t\t3681\n\t],\n\t\"./AEFT/css/generated/80/main.scss\": [\n\t\t35890,\n\t\t810\n\t],\n\t\"./AEFT/css/generated/83/main.scss\": [\n\t\t28257,\n\t\t1441\n\t],\n\t\"./AEFT/css/generated/85/main.scss\": [\n\t\t5489,\n\t\t5108\n\t],\n\t\"./AEFT/css/generated/88/main.scss\": [\n\t\t1049,\n\t\t4589\n\t],\n\t\"./AEFT/css/generated/90/main.scss\": [\n\t\t85464,\n\t\t8237\n\t],\n\t\"./AEFT/css/generated/93/main.scss\": [\n\t\t3244,\n\t\t3703\n\t],\n\t\"./AEFT/css/generated/95/main.scss\": [\n\t\t39898,\n\t\t2861\n\t],\n\t\"./AEFT/css/generated/98/main.scss\": [\n\t\t99284,\n\t\t2012\n\t],\n\t\"./AEFT/css/light/main.scss\": [\n\t\t49306,\n\t\t2880\n\t],\n\t\"./AH/css/darker/main.scss\": [\n\t\t58365,\n\t\t9690\n\t],\n\t\"./AH/css/light/main.scss\": [\n\t\t10210,\n\t\t9910\n\t],\n\t\"./CCX/css/lighter/main.scss\": [\n\t\t25251,\n\t\t7167\n\t],\n\t\"./CLIO/css/dark/main.scss\": [\n\t\t60834,\n\t\t9011\n\t],\n\t\"./CLIO/css/darker/main.scss\": [\n\t\t1225,\n\t\t3113\n\t],\n\t\"./CLIO/css/light/main.scss\": [\n\t\t46405,\n\t\t608\n\t],\n\t\"./CLIO/css/lighter/main.scss\": [\n\t\t14559,\n\t\t8797\n\t],\n\t\"./DRWV/css/dark/main.scss\": [\n\t\t64140,\n\t\t4671\n\t],\n\t\"./DRWV/css/darker/main.scss\": [\n\t\t7774,\n\t\t1890\n\t],\n\t\"./DRWV/css/light/main.scss\": [\n\t\t57720,\n\t\t1839\n\t],\n\t\"./DRWV/css/lighter/main.scss\": [\n\t\t7410,\n\t\t3633\n\t],\n\t\"./FLPR/css/dark/main.scss\": [\n\t\t82370,\n\t\t5169\n\t],\n\t\"./FLPR/css/lighter/main.scss\": [\n\t\t9453,\n\t\t8320\n\t],\n\t\"./Figma/css/dark/main.scss\": [\n\t\t31213,\n\t\t5812\n\t],\n\t\"./Figma/css/lighter/main.scss\": [\n\t\t43546,\n\t\t5897\n\t],\n\t\"./GenStudio/css/lighter/main.scss\": [\n\t\t2492,\n\t\t7938\n\t],\n\t\"./GoogleSlides/css/lighter/main.scss\": [\n\t\t12410,\n\t\t5895\n\t],\n\t\"./IDSN/css/dark/main.scss\": [\n\t\t52741,\n\t\t4923\n\t],\n\t\"./IDSN/css/darker/main.scss\": [\n\t\t98913,\n\t\t4668\n\t],\n\t\"./IDSN/css/light/main.scss\": [\n\t\t61800,\n\t\t406\n\t],\n\t\"./IDSN/css/lighter/main.scss\": [\n\t\t4391,\n\t\t1573\n\t],\n\t\"./ILST/css/dark/main.scss\": [\n\t\t11182,\n\t\t7254\n\t],\n\t\"./ILST/css/darker/main.scss\": [\n\t\t38946,\n\t\t7776\n\t],\n\t\"./ILST/css/light/main.scss\": [\n\t\t40124,\n\t\t4029\n\t],\n\t\"./ILST/css/lighter/main.scss\": [\n\t\t11602,\n\t\t5548\n\t],\n\t\"./ILST_UXP/css/dark/main.scss\": [\n\t\t56675,\n\t\t4031\n\t],\n\t\"./ILST_UXP/css/darker/main.scss\": [\n\t\t40986,\n\t\t6030\n\t],\n\t\"./ILST_UXP/css/light/main.scss\": [\n\t\t62122,\n\t\t5019\n\t],\n\t\"./ILST_UXP/css/lighter/main.scss\": [\n\t\t51161,\n\t\t3240\n\t],\n\t\"./KBRG/css/dark/main.scss\": [\n\t\t70617,\n\t\t2777\n\t],\n\t\"./KBRG/css/dark_mondo/main.scss\": [\n\t\t2847,\n\t\t6465\n\t],\n\t\"./KBRG/css/darker/main.scss\": [\n\t\t19927,\n\t\t1672\n\t],\n\t\"./KBRG/css/light_mondo/main.scss\": [\n\t\t31506,\n\t\t6589\n\t],\n\t\"./KBRG/css/lighter/main.scss\": [\n\t\t32830,\n\t\t4192\n\t],\n\t\"./KBRG/css/lighter_mondo/main.scss\": [\n\t\t2882,\n\t\t5341\n\t],\n\t\"./PHXS/css/dark/main.scss\": [\n\t\t73247,\n\t\t5661\n\t],\n\t\"./PHXS/css/darker/main.scss\": [\n\t\t15868,\n\t\t1583\n\t],\n\t\"./PHXS/css/light/main.scss\": [\n\t\t71482,\n\t\t3775\n\t],\n\t\"./PHXS/css/lighter/main.scss\": [\n\t\t77116,\n\t\t7128\n\t],\n\t\"./PHXS_UXP/css/dark/main.scss\": [\n\t\t50184,\n\t\t4959\n\t],\n\t\"./PHXS_UXP/css/darker/main.scss\": [\n\t\t27402,\n\t\t9297\n\t],\n\t\"./PHXS_UXP/css/light/main.scss\": [\n\t\t76466,\n\t\t2663\n\t],\n\t\"./PHXS_UXP/css/lighter/main.scss\": [\n\t\t4024,\n\t\t8362\n\t],\n\t\"./PPRO/css/dark-v7/main.scss\": [\n\t\t21630,\n\t\t8499\n\t],\n\t\"./PPRO/css/dark/main.scss\": [\n\t\t653,\n\t\t2397\n\t],\n\t\"./PPRO/css/darker/main.scss\": [\n\t\t55260,\n\t\t9623\n\t],\n\t\"./PPRO/css/generated/10/main.scss\": [\n\t\t3433,\n\t\t6289\n\t],\n\t\"./PPRO/css/generated/13/main.scss\": [\n\t\t55338,\n\t\t4450\n\t],\n\t\"./PPRO/css/generated/15/main.scss\": [\n\t\t16115,\n\t\t1311\n\t],\n\t\"./PPRO/css/generated/18/main.scss\": [\n\t\t64806,\n\t\t6321\n\t],\n\t\"./PPRO/css/generated/20/main.scss\": [\n\t\t38419,\n\t\t3769\n\t],\n\t\"./PPRO/css/generated/23/main.scss\": [\n\t\t43106,\n\t\t583\n\t],\n\t\"./PPRO/css/generated/25/main.scss\": [\n\t\t45842,\n\t\t2002\n\t],\n\t\"./PPRO/css/generated/28/main.scss\": [\n\t\t82622,\n\t\t6284\n\t],\n\t\"./PPRO/css/generated/3/main.scss\": [\n\t\t74593,\n\t\t2472\n\t],\n\t\"./PPRO/css/generated/30/main.scss\": [\n\t\t20472,\n\t\t9776\n\t],\n\t\"./PPRO/css/generated/33/main.scss\": [\n\t\t96565,\n\t\t2369\n\t],\n\t\"./PPRO/css/generated/35/main.scss\": [\n\t\t2473,\n\t\t1952\n\t],\n\t\"./PPRO/css/generated/38/main.scss\": [\n\t\t87917,\n\t\t3659\n\t],\n\t\"./PPRO/css/generated/40/main.scss\": [\n\t\t62666,\n\t\t3878\n\t],\n\t\"./PPRO/css/generated/43/main.scss\": [\n\t\t74659,\n\t\t7136\n\t],\n\t\"./PPRO/css/generated/45/main.scss\": [\n\t\t10432,\n\t\t1341\n\t],\n\t\"./PPRO/css/generated/48/main.scss\": [\n\t\t55717,\n\t\t3945\n\t],\n\t\"./PPRO/css/generated/5/main.scss\": [\n\t\t82547,\n\t\t6552\n\t],\n\t\"./PPRO/css/generated/50/main.scss\": [\n\t\t64440,\n\t\t532\n\t],\n\t\"./PPRO/css/generated/53/main.scss\": [\n\t\t33548,\n\t\t437\n\t],\n\t\"./PPRO/css/generated/55/main.scss\": [\n\t\t90934,\n\t\t1016\n\t],\n\t\"./PPRO/css/generated/58/main.scss\": [\n\t\t21011,\n\t\t3241\n\t],\n\t\"./PPRO/css/generated/60/main.scss\": [\n\t\t81126,\n\t\t2984\n\t],\n\t\"./PPRO/css/generated/63/main.scss\": [\n\t\t35169,\n\t\t2131\n\t],\n\t\"./PPRO/css/generated/65/main.scss\": [\n\t\t31667,\n\t\t8740\n\t],\n\t\"./PPRO/css/generated/68/main.scss\": [\n\t\t83023,\n\t\t4135\n\t],\n\t\"./PPRO/css/generated/70/main.scss\": [\n\t\t98559,\n\t\t2194\n\t],\n\t\"./PPRO/css/generated/73/main.scss\": [\n\t\t44761,\n\t\t2216\n\t],\n\t\"./PPRO/css/generated/75/main.scss\": [\n\t\t97220,\n\t\t4665\n\t],\n\t\"./PPRO/css/generated/78/main.scss\": [\n\t\t54043,\n\t\t6488\n\t],\n\t\"./PPRO/css/generated/8/main.scss\": [\n\t\t96661,\n\t\t2425\n\t],\n\t\"./PPRO/css/generated/80/main.scss\": [\n\t\t34250,\n\t\t9754\n\t],\n\t\"./PPRO/css/generated/83/main.scss\": [\n\t\t8393,\n\t\t2269\n\t],\n\t\"./PPRO/css/generated/85/main.scss\": [\n\t\t79787,\n\t\t7326\n\t],\n\t\"./PPRO/css/generated/88/main.scss\": [\n\t\t35124,\n\t\t7423\n\t],\n\t\"./PPRO/css/generated/90/main.scss\": [\n\t\t10818,\n\t\t8843\n\t],\n\t\"./PPRO/css/generated/93/main.scss\": [\n\t\t97103,\n\t\t6776\n\t],\n\t\"./PPRO/css/generated/95/main.scss\": [\n\t\t19058,\n\t\t8544\n\t],\n\t\"./PPRO/css/generated/98/main.scss\": [\n\t\t73054,\n\t\t926\n\t],\n\t\"./PPRO/css/light/main.scss\": [\n\t\t19794,\n\t\t3019\n\t],\n\t\"./PowerPoint/css/darker/main.scss\": [\n\t\t85169,\n\t\t3869\n\t],\n\t\"./PowerPoint/css/lighter/main.scss\": [\n\t\t47932,\n\t\t1071\n\t],\n\t\"./SPRK/css/lighter/main.scss\": [\n\t\t82235,\n\t\t7933\n\t],\n\t\"./STGR/css/darker/main.scss\": [\n\t\t41503,\n\t\t1331\n\t],\n\t\"./STGR/css/lighter/main.scss\": [\n\t\t79921,\n\t\t4386\n\t],\n\t\"./StyleGuide/css/lighter/main.scss\": [\n\t\t91497,\n\t\t1465\n\t],\n\t\"./Word/css/darker/main.scss\": [\n\t\t37075,\n\t\t9729\n\t],\n\t\"./Word/css/lighter/main.scss\": [\n\t\t48056,\n\t\t4214\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(() => {\n\t\treturn __webpack_require__.t(id, 3 | 16);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = 13050;\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./cover1.svg\": 34045,\n\t\"./cover10.svg\": 55756,\n\t\"./cover11.svg\": 50999,\n\t\"./cover12.svg\": 95512,\n\t\"./cover13.svg\": 93605,\n\t\"./cover14.svg\": 86304,\n\t\"./cover15.svg\": 89201,\n\t\"./cover16.svg\": 63587,\n\t\"./cover17.svg\": 82659,\n\t\"./cover18.svg\": 89133,\n\t\"./cover19.svg\": 41226,\n\t\"./cover2.svg\": 7627,\n\t\"./cover20.svg\": 48527,\n\t\"./cover3.svg\": 91564,\n\t\"./cover4.svg\": 39937,\n\t\"./cover5.svg\": 68591,\n\t\"./cover6.svg\": 85836,\n\t\"./cover7.svg\": 17456,\n\t\"./cover8.svg\": 87298,\n\t\"./cover9.svg\": 83993\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 42649;","var map = {\n\t\"./aac_filetype_256.svg\": 19824,\n\t\"./aac_filetype_64.svg\": 63045,\n\t\"./aif_filetype_256.svg\": 59466,\n\t\"./aif_filetype_64.svg\": 11612,\n\t\"./aiff_filetype_256.svg\": 23546,\n\t\"./aiff_filetype_64.svg\": 13206,\n\t\"./m4a_filetype_256.svg\": 157,\n\t\"./m4a_filetype_64.svg\": 32224,\n\t\"./mp2_filetype_256.svg\": 27129,\n\t\"./mp2_filetype_64.svg\": 8823,\n\t\"./mp3_filetype_256.svg\": 60501,\n\t\"./mp3_filetype_64.svg\": 88050,\n\t\"./mpga_filetype_64.svg\": 44255,\n\t\"./wav_filetype_256.svg\": 48775,\n\t\"./wav_filetype_64.svg\": 91546\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 90305;","var map = {\n\t\"./dn_filetype_1024.svg\": 10565,\n\t\"./exr_filetype_1024.svg\": 92576,\n\t\"./fbx_filetype_1024.svg\": 76064,\n\t\"./glb_filetype_1024.svg\": 51760,\n\t\"./gltf_filetype_1024.svg\": 61161,\n\t\"./hdr_filetype_1024.svg\": 88762,\n\t\"./ibl_filetype_1024.svg\": 51235,\n\t\"./mdl_filetype_1024.svg\": 49363,\n\t\"./obj_filetype_1024.svg\": 26361,\n\t\"./sbsar_filetype_1024.svg\": 82911,\n\t\"./usdz_filetype_1024.svg\": 95496\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 50238;","var map = {\n\t\"./AH404Error.svg\": 28069,\n\t\"./AHEmptyLibrary.svg\": 79337,\n\t\"./ActivateFonts.svg\": 35213,\n\t\"./ActivateFontsSpinner.svg\": 11867,\n\t\"./Add.svg\": 65403,\n\t\"./Add12.svg\": 49331,\n\t\"./Add14.svg\": 1963,\n\t\"./AddAnimation.svg\": 6791,\n\t\"./AddBrush.svg\": 15406,\n\t\"./AddCCLibrary.svg\": 37461,\n\t\"./AddCharacterStyle.svg\": 69035,\n\t\"./AddCircle.svg\": 92846,\n\t\"./AddCircleOutline.svg\": 28506,\n\t\"./AddComponent.svg\": 70793,\n\t\"./AddCopy.svg\": 18434,\n\t\"./AddDropdown.svg\": 33433,\n\t\"./AddGroup.svg\": 4931,\n\t\"./AddImage.svg\": 9981,\n\t\"./AddLayerStyle.svg\": 752,\n\t\"./AddLink.svg\": 29451,\n\t\"./AddLook.svg\": 64978,\n\t\"./AddModel.svg\": 99743,\n\t\"./AddParagraphStyle.svg\": 52576,\n\t\"./AddStock.svg\": 30571,\n\t\"./AddText.svg\": 1360,\n\t\"./AdobeFonts.svg\": 62344,\n\t\"./Alert.svg\": 20568,\n\t\"./AlertOutline.svg\": 32903,\n\t\"./AllFilterIcon.svg\": 95852,\n\t\"./ArrowDown.svg\": 42964,\n\t\"./ArrowUp.svg\": 78027,\n\t\"./AssetBrokenElement.svg\": 31651,\n\t\"./AssetBrokenLink.svg\": 29179,\n\t\"./AssetLinked.svg\": 54104,\n\t\"./AssetRestricted.svg\": 27481,\n\t\"./AssetUpdate.svg\": 70474,\n\t\"./AssetUploading.svg\": 49864,\n\t\"./Back.svg\": 61659,\n\t\"./BackArrow.svg\": 46787,\n\t\"./Browse.svg\": 48907,\n\t\"./BrowseTeamLibrary.svg\": 58389,\n\t\"./Building.svg\": 67012,\n\t\"./CCLibrary.svg\": 56586,\n\t\"./CCLibrary16.svg\": 19161,\n\t\"./CCLibraryLocked.svg\": 6598,\n\t\"./CCXCreateBrandPlus.svg\": 99910,\n\t\"./CCXCreateColor.svg\": 33666,\n\t\"./CCXCreateFont.svg\": 69177,\n\t\"./CCXCreateImage.svg\": 23130,\n\t\"./CCXCreateLogo.svg\": 13558,\n\t\"./CCXCreateTemplate.svg\": 21425,\n\t\"./CCXDiscoverLibraries.svg\": 57864,\n\t\"./CCXEmptyBrands.svg\": 53211,\n\t\"./CCXEmptyLibrary.svg\": 60458,\n\t\"./CCXGenericLibraries.svg\": 44326,\n\t\"./CCXLibraryLarge.svg\": 60832,\n\t\"./Capture.svg\": 21105,\n\t\"./ChangeCloud.svg\": 46922,\n\t\"./Checkmark.svg\": 48567,\n\t\"./CheckmarkCircle.svg\": 31719,\n\t\"./CheckmarkRounded.svg\": 42625,\n\t\"./ChevronDownMedium.svg\": 49386,\n\t\"./ChevronDownSmall.svg\": 73453,\n\t\"./ChevronLeftMedium.svg\": 78714,\n\t\"./ChevronLeftSmall.svg\": 20776,\n\t\"./ChevronRightMedium.svg\": 506,\n\t\"./ChevronRightSmall.svg\": 75797,\n\t\"./Clock.svg\": 9126,\n\t\"./Close.svg\": 80351,\n\t\"./Cloud.svg\": 7007,\n\t\"./Copy.svg\": 27327,\n\t\"./CreateATeamLibrary.svg\": 40880,\n\t\"./CreateColor.svg\": 26222,\n\t\"./CreateColortheme.svg\": 94275,\n\t\"./CreateFont.svg\": 33949,\n\t\"./CreateImage.svg\": 14484,\n\t\"./CreateLogo.svg\": 62159,\n\t\"./CreateTemplate.svg\": 453,\n\t\"./CreativeCloud.svg\": 58823,\n\t\"./CreativeCloudAlert.svg\": 242,\n\t\"./CreativeCloudError.svg\": 46690,\n\t\"./Date.svg\": 13068,\n\t\"./Delete.svg\": 97991,\n\t\"./DiscoverLibraries.svg\": 86346,\n\t\"./DocumentAssets.svg\": 94878,\n\t\"./DownArrow.svg\": 64172,\n\t\"./Duplicate.svg\": 64851,\n\t\"./Edit.svg\": 51371,\n\t\"./EmptyLibrary.svg\": 23087,\n\t\"./EmptyLibrary1.svg\": 838,\n\t\"./EmptyLibrary2.svg\": 42699,\n\t\"./EmptyLibrary3.svg\": 4471,\n\t\"./Error.svg\": 41791,\n\t\"./Filter.svg\": 22370,\n\t\"./Filter16.svg\": 74989,\n\t\"./FilterApplied.svg\": 85394,\n\t\"./FilterNotification16.svg\": 93038,\n\t\"./FilterWarning.svg\": 22209,\n\t\"./Flag.svg\": 82261,\n\t\"./Folder.svg\": 81764,\n\t\"./FolderOpen.svg\": 48538,\n\t\"./Globe.svg\": 29575,\n\t\"./GlobeSearch.svg\": 8332,\n\t\"./GridView.svg\": 97365,\n\t\"./Group.svg\": 73344,\n\t\"./HelpOutline.svg\": 51546,\n\t\"./IlluAccessAssetsEverywhere.svg\": 28902,\n\t\"./Info.svg\": 16825,\n\t\"./InfoOutline.svg\": 32548,\n\t\"./Invite.svg\": 83383,\n\t\"./Leave.svg\": 86080,\n\t\"./LibraryAccess.svg\": 34533,\n\t\"./Link.svg\": 30998,\n\t\"./LinkedDocumentLibrary_CanEdit.svg\": 4005,\n\t\"./LinkedDocumentLibrary_CanView.svg\": 56016,\n\t\"./LinkedLibrary.svg\": 61439,\n\t\"./ListView.svg\": 46089,\n\t\"./Lock.svg\": 29932,\n\t\"./LockMenu.svg\": 14904,\n\t\"./LockPopup.svg\": 72836,\n\t\"./Logos.svg\": 98618,\n\t\"./Magnify.svg\": 87584,\n\t\"./MissingFontWarning.svg\": 24861,\n\t\"./More.svg\": 17296,\n\t\"./Move.svg\": 4006,\n\t\"./NamingOrder.svg\": 21296,\n\t\"./Next.svg\": 61419,\n\t\"./NoSearchResults.svg\": 68857,\n\t\"./Note.svg\": 29974,\n\t\"./OnboardingCCLibrary.svg\": 99576,\n\t\"./OpenIn.svg\": 36652,\n\t\"./Organisations.svg\": 1704,\n\t\"./PathView.svg\": 9801,\n\t\"./PlaceOnCanvas.svg\": 11537,\n\t\"./Plus.svg\": 41464,\n\t\"./PlusDrag.svg\": 42110,\n\t\"./Projects.svg\": 54721,\n\t\"./PublishRemove.svg\": 53225,\n\t\"./Question.svg\": 17529,\n\t\"./ReadOnly.svg\": 83742,\n\t\"./Rename.svg\": 91355,\n\t\"./ReuseUpdateAssets.svg\": 36346,\n\t\"./SX_Buildings.svg\": 39895,\n\t\"./SX_Delete.svg\": 66529,\n\t\"./SX_Edit.svg\": 93567,\n\t\"./SX_Filter.svg\": 9997,\n\t\"./SX_Flag.svg\": 3367,\n\t\"./SX_GlobeGrid.svg\": 61383,\n\t\"./SX_Invite.svg\": 58530,\n\t\"./SX_Leave.svg\": 78295,\n\t\"./SX_PublishRemove.svg\": 75151,\n\t\"./SX_Rename.svg\": 90618,\n\t\"./SX_Search.svg\": 16314,\n\t\"./SX_SortOrderDown.svg\": 77729,\n\t\"./SX_SortOrderUp.svg\": 60791,\n\t\"./SX_User.svg\": 21549,\n\t\"./SX_UserGroup.svg\": 60569,\n\t\"./S_MoveTo_18_N.svg\": 7280,\n\t\"./Settings.svg\": 4465,\n\t\"./ShareAssets.svg\": 26246,\n\t\"./Shop.svg\": 62458,\n\t\"./ShoppingCart.svg\": 57325,\n\t\"./ShowMenu.svg\": 73557,\n\t\"./Sort.svg\": 2548,\n\t\"./SortDescending.svg\": 93065,\n\t\"./StockLicensedBadge.svg\": 87295,\n\t\"./Subscribed.svg\": 45071,\n\t\"./SyncAlert.svg\": 29184,\n\t\"./SyncDefault.svg\": 32797,\n\t\"./SyncError.svg\": 47403,\n\t\"./Syncing.svg\": 69543,\n\t\"./SyncingSpinner.svg\": 8404,\n\t\"./TraditionalLibrary_CanEdit.svg\": 73671,\n\t\"./TraditionalLibrary_CanView.svg\": 88998,\n\t\"./TreeView.svg\": 57067,\n\t\"./UploadDocAssets.svg\": 23687,\n\t\"./UploadImage.svg\": 88864,\n\t\"./UseAsBrand.svg\": 7317,\n\t\"./UseAsLibrary.svg\": 52449,\n\t\"./User.svg\": 39100,\n\t\"./UserGroup.svg\": 33380,\n\t\"./VerifyContentAuthenticity.svg\": 95861,\n\t\"./Visibility.svg\": 7237,\n\t\"./XDFile.svg\": 71001\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 5515;","var _global = (typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}); _global.SENTRY_RELEASE={id:\"cc-libraries-panel@4.8.170\"};","/* eslint-disable max-lines */\nimport type {\n  Breadcrumb,\n  BreadcrumbHint,\n  Client,\n  ClientOptions,\n  DataCategory,\n  DsnComponents,\n  DynamicSamplingContext,\n  Envelope,\n  ErrorEvent,\n  Event,\n  EventDropReason,\n  EventHint,\n  EventProcessor,\n  Integration,\n  IntegrationClass,\n  Outcome,\n  PropagationContext,\n  SdkMetadata,\n  Session,\n  SessionAggregates,\n  Severity,\n  SeverityLevel,\n  Transaction,\n  TransactionEvent,\n  Transport,\n  TransportMakeRequestResponse,\n} from '@sentry/types';\nimport {\n  addItemToEnvelope,\n  checkOrSetAlreadyCaught,\n  createAttachmentEnvelopeItem,\n  isPlainObject,\n  isPrimitive,\n  isThenable,\n  logger,\n  makeDsn,\n  rejectedSyncPromise,\n  resolvedSyncPromise,\n  SentryError,\n  SyncPromise,\n} from '@sentry/utils';\n\nimport { getEnvelopeEndpointWithUrlEncodedAuth } from './api';\nimport { createEventEnvelope, createSessionEnvelope } from './envelope';\nimport type { IntegrationIndex } from './integration';\nimport { setupIntegration, setupIntegrations } from './integration';\nimport type { Scope } from './scope';\nimport { updateSession } from './session';\nimport { getDynamicSamplingContextFromClient } from './tracing/dynamicSamplingContext';\nimport { prepareEvent } from './utils/prepareEvent';\n\nconst ALREADY_SEEN_ERROR = \"Not capturing exception because it's already been captured.\";\n\n/**\n * Base implementation for all JavaScript SDK clients.\n *\n * Call the constructor with the corresponding options\n * specific to the client subclass. To access these options later, use\n * {@link Client.getOptions}.\n *\n * If a Dsn is specified in the options, it will be parsed and stored. Use\n * {@link Client.getDsn} to retrieve the Dsn at any moment. In case the Dsn is\n * invalid, the constructor will throw a {@link SentryException}. Note that\n * without a valid Dsn, the SDK will not send any events to Sentry.\n *\n * Before sending an event, it is passed through\n * {@link BaseClient._prepareEvent} to add SDK information and scope data\n * (breadcrumbs and context). To add more custom information, override this\n * method and extend the resulting prepared event.\n *\n * To issue automatically created events (e.g. via instrumentation), use\n * {@link Client.captureEvent}. It will prepare the event and pass it through\n * the callback lifecycle. To issue auto-breadcrumbs, use\n * {@link Client.addBreadcrumb}.\n *\n * @example\n * class NodeClient extends BaseClient<NodeOptions> {\n *   public constructor(options: NodeOptions) {\n *     super(options);\n *   }\n *\n *   // ...\n * }\n */\nexport abstract class BaseClient<O extends ClientOptions> implements Client<O> {\n  /** Options passed to the SDK. */\n  protected readonly _options: O;\n\n  /** The client Dsn, if specified in options. Without this Dsn, the SDK will be disabled. */\n  protected readonly _dsn?: DsnComponents;\n\n  protected readonly _transport?: Transport;\n\n  /** Array of set up integrations. */\n  protected _integrations: IntegrationIndex;\n\n  /** Indicates whether this client's integrations have been set up. */\n  protected _integrationsInitialized: boolean;\n\n  /** Number of calls being processed */\n  protected _numProcessing: number;\n\n  /** Holds flushable  */\n  private _outcomes: { [key: string]: number };\n\n  // eslint-disable-next-line @typescript-eslint/ban-types\n  private _hooks: Record<string, Function[]>;\n\n  private _eventProcessors: EventProcessor[];\n\n  /**\n   * Initializes this client instance.\n   *\n   * @param options Options for the client.\n   */\n  protected constructor(options: O) {\n    this._options = options;\n    this._integrations = {};\n    this._integrationsInitialized = false;\n    this._numProcessing = 0;\n    this._outcomes = {};\n    this._hooks = {};\n    this._eventProcessors = [];\n\n    if (options.dsn) {\n      this._dsn = makeDsn(options.dsn);\n    } else {\n      __DEBUG_BUILD__ && logger.warn('No DSN provided, client will not send events.');\n    }\n\n    if (this._dsn) {\n      const url = getEnvelopeEndpointWithUrlEncodedAuth(this._dsn, options);\n      this._transport = options.transport({\n        recordDroppedEvent: this.recordDroppedEvent.bind(this),\n        ...options.transportOptions,\n        url,\n      });\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n  public captureException(exception: any, hint?: EventHint, scope?: Scope): string | undefined {\n    // ensure we haven't captured this very object before\n    if (checkOrSetAlreadyCaught(exception)) {\n      __DEBUG_BUILD__ && logger.log(ALREADY_SEEN_ERROR);\n      return;\n    }\n\n    let eventId: string | undefined = hint && hint.event_id;\n\n    this._process(\n      this.eventFromException(exception, hint)\n        .then(event => this._captureEvent(event, hint, scope))\n        .then(result => {\n          eventId = result;\n        }),\n    );\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureMessage(\n    message: string,\n    // eslint-disable-next-line deprecation/deprecation\n    level?: Severity | SeverityLevel,\n    hint?: EventHint,\n    scope?: Scope,\n  ): string | undefined {\n    let eventId: string | undefined = hint && hint.event_id;\n\n    const promisedEvent = isPrimitive(message)\n      ? this.eventFromMessage(String(message), level, hint)\n      : this.eventFromException(message, hint);\n\n    this._process(\n      promisedEvent\n        .then(event => this._captureEvent(event, hint, scope))\n        .then(result => {\n          eventId = result;\n        }),\n    );\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureEvent(event: Event, hint?: EventHint, scope?: Scope): string | undefined {\n    // ensure we haven't captured this very object before\n    if (hint && hint.originalException && checkOrSetAlreadyCaught(hint.originalException)) {\n      __DEBUG_BUILD__ && logger.log(ALREADY_SEEN_ERROR);\n      return;\n    }\n\n    let eventId: string | undefined = hint && hint.event_id;\n\n    this._process(\n      this._captureEvent(event, hint, scope).then(result => {\n        eventId = result;\n      }),\n    );\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureSession(session: Session): void {\n    if (!(typeof session.release === 'string')) {\n      __DEBUG_BUILD__ && logger.warn('Discarded session because of missing or non-string release');\n    } else {\n      this.sendSession(session);\n      // After sending, we set init false to indicate it's not the first occurrence\n      updateSession(session, { init: false });\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getDsn(): DsnComponents | undefined {\n    return this._dsn;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getOptions(): O {\n    return this._options;\n  }\n\n  /**\n   * @see SdkMetadata in @sentry/types\n   *\n   * @return The metadata of the SDK\n   */\n  public getSdkMetadata(): SdkMetadata | undefined {\n    return this._options._metadata;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getTransport(): Transport | undefined {\n    return this._transport;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public flush(timeout?: number): PromiseLike<boolean> {\n    const transport = this._transport;\n    if (transport) {\n      return this._isClientDoneProcessing(timeout).then(clientFinished => {\n        return transport.flush(timeout).then(transportFlushed => clientFinished && transportFlushed);\n      });\n    } else {\n      return resolvedSyncPromise(true);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public close(timeout?: number): PromiseLike<boolean> {\n    return this.flush(timeout).then(result => {\n      this.getOptions().enabled = false;\n      return result;\n    });\n  }\n\n  /** Get all installed event processors. */\n  public getEventProcessors(): EventProcessor[] {\n    return this._eventProcessors;\n  }\n\n  /** @inheritDoc */\n  public addEventProcessor(eventProcessor: EventProcessor): void {\n    this._eventProcessors.push(eventProcessor);\n  }\n\n  /**\n   * Sets up the integrations\n   */\n  public setupIntegrations(forceInitialize?: boolean): void {\n    if ((forceInitialize && !this._integrationsInitialized) || (this._isEnabled() && !this._integrationsInitialized)) {\n      this._integrations = setupIntegrations(this, this._options.integrations);\n      this._integrationsInitialized = true;\n    }\n  }\n\n  /**\n   * Gets an installed integration by its `id`.\n   *\n   * @returns The installed integration or `undefined` if no integration with that `id` was installed.\n   */\n  public getIntegrationById(integrationId: string): Integration | undefined {\n    return this._integrations[integrationId];\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getIntegration<T extends Integration>(integration: IntegrationClass<T>): T | null {\n    try {\n      return (this._integrations[integration.id] as T) || null;\n    } catch (_oO) {\n      __DEBUG_BUILD__ && logger.warn(`Cannot retrieve integration ${integration.id} from the current Client`);\n      return null;\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public addIntegration(integration: Integration): void {\n    setupIntegration(this, integration, this._integrations);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public sendEvent(event: Event, hint: EventHint = {}): void {\n    this.emit('beforeSendEvent', event, hint);\n\n    let env = createEventEnvelope(event, this._dsn, this._options._metadata, this._options.tunnel);\n\n    for (const attachment of hint.attachments || []) {\n      env = addItemToEnvelope(\n        env,\n        createAttachmentEnvelopeItem(\n          attachment,\n          this._options.transportOptions && this._options.transportOptions.textEncoder,\n        ),\n      );\n    }\n\n    const promise = this._sendEnvelope(env);\n    if (promise) {\n      promise.then(sendResponse => this.emit('afterSendEvent', event, sendResponse), null);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public sendSession(session: Session | SessionAggregates): void {\n    const env = createSessionEnvelope(session, this._dsn, this._options._metadata, this._options.tunnel);\n    void this._sendEnvelope(env);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public recordDroppedEvent(reason: EventDropReason, category: DataCategory, _event?: Event): void {\n    // Note: we use `event` in replay, where we overwrite this hook.\n\n    if (this._options.sendClientReports) {\n      // We want to track each category (error, transaction, session, replay_event) separately\n      // but still keep the distinction between different type of outcomes.\n      // We could use nested maps, but it's much easier to read and type this way.\n      // A correct type for map-based implementation if we want to go that route\n      // would be `Partial<Record<SentryRequestType, Partial<Record<Outcome, number>>>>`\n      // With typescript 4.1 we could even use template literal types\n      const key = `${reason}:${category}`;\n      __DEBUG_BUILD__ && logger.log(`Adding outcome: \"${key}\"`);\n\n      // The following works because undefined + 1 === NaN and NaN is falsy\n      this._outcomes[key] = this._outcomes[key] + 1 || 1;\n    }\n  }\n\n  // Keep on() & emit() signatures in sync with types' client.ts interface\n  /* eslint-disable @typescript-eslint/unified-signatures */\n\n  /** @inheritdoc */\n  public on(hook: 'startTransaction', callback: (transaction: Transaction) => void): void;\n\n  /** @inheritdoc */\n  public on(hook: 'finishTransaction', callback: (transaction: Transaction) => void): void;\n\n  /** @inheritdoc */\n  public on(hook: 'beforeEnvelope', callback: (envelope: Envelope) => void): void;\n\n  /** @inheritdoc */\n  public on(hook: 'beforeSendEvent', callback: (event: Event, hint?: EventHint) => void): void;\n\n  /** @inheritdoc */\n  public on(hook: 'preprocessEvent', callback: (event: Event, hint?: EventHint) => void): void;\n\n  /** @inheritdoc */\n  public on(\n    hook: 'afterSendEvent',\n    callback: (event: Event, sendResponse: TransportMakeRequestResponse | void) => void,\n  ): void;\n\n  /** @inheritdoc */\n  public on(hook: 'beforeAddBreadcrumb', callback: (breadcrumb: Breadcrumb, hint?: BreadcrumbHint) => void): void;\n\n  /** @inheritdoc */\n  public on(hook: 'createDsc', callback: (dsc: DynamicSamplingContext) => void): void;\n\n  /** @inheritdoc */\n  public on(hook: 'otelSpanEnd', callback: (otelSpan: unknown, mutableOptions: { drop: boolean }) => void): void;\n\n  /** @inheritdoc */\n  public on(hook: string, callback: unknown): void {\n    if (!this._hooks[hook]) {\n      this._hooks[hook] = [];\n    }\n\n    // @ts-expect-error We assue the types are correct\n    this._hooks[hook].push(callback);\n  }\n\n  /** @inheritdoc */\n  public emit(hook: 'startTransaction', transaction: Transaction): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'finishTransaction', transaction: Transaction): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'beforeEnvelope', envelope: Envelope): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'beforeSendEvent', event: Event, hint?: EventHint): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'preprocessEvent', event: Event, hint?: EventHint): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'afterSendEvent', event: Event, sendResponse: TransportMakeRequestResponse | void): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'beforeAddBreadcrumb', breadcrumb: Breadcrumb, hint?: BreadcrumbHint): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'createDsc', dsc: DynamicSamplingContext): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'otelSpanEnd', otelSpan: unknown, mutableOptions: { drop: boolean }): void;\n\n  /** @inheritdoc */\n  public emit(hook: string, ...rest: unknown[]): void {\n    if (this._hooks[hook]) {\n      this._hooks[hook].forEach(callback => callback(...rest));\n    }\n  }\n\n  /* eslint-enable @typescript-eslint/unified-signatures */\n\n  /** Updates existing session based on the provided event */\n  protected _updateSessionFromEvent(session: Session, event: Event): void {\n    let crashed = false;\n    let errored = false;\n    const exceptions = event.exception && event.exception.values;\n\n    if (exceptions) {\n      errored = true;\n\n      for (const ex of exceptions) {\n        const mechanism = ex.mechanism;\n        if (mechanism && mechanism.handled === false) {\n          crashed = true;\n          break;\n        }\n      }\n    }\n\n    // A session is updated and that session update is sent in only one of the two following scenarios:\n    // 1. Session with non terminal status and 0 errors + an error occurred -> Will set error count to 1 and send update\n    // 2. Session with non terminal status and 1 error + a crash occurred -> Will set status crashed and send update\n    const sessionNonTerminal = session.status === 'ok';\n    const shouldUpdateAndSend = (sessionNonTerminal && session.errors === 0) || (sessionNonTerminal && crashed);\n\n    if (shouldUpdateAndSend) {\n      updateSession(session, {\n        ...(crashed && { status: 'crashed' }),\n        errors: session.errors || Number(errored || crashed),\n      });\n      this.captureSession(session);\n    }\n  }\n\n  /**\n   * Determine if the client is finished processing. Returns a promise because it will wait `timeout` ms before saying\n   * \"no\" (resolving to `false`) in order to give the client a chance to potentially finish first.\n   *\n   * @param timeout The time, in ms, after which to resolve to `false` if the client is still busy. Passing `0` (or not\n   * passing anything) will make the promise wait as long as it takes for processing to finish before resolving to\n   * `true`.\n   * @returns A promise which will resolve to `true` if processing is already done or finishes before the timeout, and\n   * `false` otherwise\n   */\n  protected _isClientDoneProcessing(timeout?: number): PromiseLike<boolean> {\n    return new SyncPromise(resolve => {\n      let ticked: number = 0;\n      const tick: number = 1;\n\n      const interval = setInterval(() => {\n        if (this._numProcessing == 0) {\n          clearInterval(interval);\n          resolve(true);\n        } else {\n          ticked += tick;\n          if (timeout && ticked >= timeout) {\n            clearInterval(interval);\n            resolve(false);\n          }\n        }\n      }, tick);\n    });\n  }\n\n  /** Determines whether this SDK is enabled and a transport is present. */\n  protected _isEnabled(): boolean {\n    return this.getOptions().enabled !== false && this._transport !== undefined;\n  }\n\n  /**\n   * Adds common information to events.\n   *\n   * The information includes release and environment from `options`,\n   * breadcrumbs and context (extra, tags and user) from the scope.\n   *\n   * Information that is already present in the event is never overwritten. For\n   * nested objects, such as the context, keys are merged.\n   *\n   * @param event The original event.\n   * @param hint May contain additional information about the original exception.\n   * @param scope A scope containing event metadata.\n   * @returns A new event with more information.\n   */\n  protected _prepareEvent(event: Event, hint: EventHint, scope?: Scope): PromiseLike<Event | null> {\n    const options = this.getOptions();\n    const integrations = Object.keys(this._integrations);\n    if (!hint.integrations && integrations.length > 0) {\n      hint.integrations = integrations;\n    }\n\n    this.emit('preprocessEvent', event, hint);\n\n    return prepareEvent(options, event, hint, scope, this).then(evt => {\n      if (evt === null) {\n        return evt;\n      }\n\n      // If a trace context is not set on the event, we use the propagationContext set on the event to\n      // generate a trace context. If the propagationContext does not have a dynamic sampling context, we\n      // also generate one for it.\n      const { propagationContext } = evt.sdkProcessingMetadata || {};\n      const trace = evt.contexts && evt.contexts.trace;\n      if (!trace && propagationContext) {\n        const { traceId: trace_id, spanId, parentSpanId, dsc } = propagationContext as PropagationContext;\n        evt.contexts = {\n          trace: {\n            trace_id,\n            span_id: spanId,\n            parent_span_id: parentSpanId,\n          },\n          ...evt.contexts,\n        };\n\n        const dynamicSamplingContext = dsc ? dsc : getDynamicSamplingContextFromClient(trace_id, this, scope);\n\n        evt.sdkProcessingMetadata = {\n          dynamicSamplingContext,\n          ...evt.sdkProcessingMetadata,\n        };\n      }\n      return evt;\n    });\n  }\n\n  /**\n   * Processes the event and logs an error in case of rejection\n   * @param event\n   * @param hint\n   * @param scope\n   */\n  protected _captureEvent(event: Event, hint: EventHint = {}, scope?: Scope): PromiseLike<string | undefined> {\n    return this._processEvent(event, hint, scope).then(\n      finalEvent => {\n        return finalEvent.event_id;\n      },\n      reason => {\n        if (__DEBUG_BUILD__) {\n          // If something's gone wrong, log the error as a warning. If it's just us having used a `SentryError` for\n          // control flow, log just the message (no stack) as a log-level log.\n          const sentryError = reason as SentryError;\n          if (sentryError.logLevel === 'log') {\n            logger.log(sentryError.message);\n          } else {\n            logger.warn(sentryError);\n          }\n        }\n        return undefined;\n      },\n    );\n  }\n\n  /**\n   * Processes an event (either error or message) and sends it to Sentry.\n   *\n   * This also adds breadcrumbs and context information to the event. However,\n   * platform specific meta data (such as the User's IP address) must be added\n   * by the SDK implementor.\n   *\n   *\n   * @param event The event to send to Sentry.\n   * @param hint May contain additional information about the original exception.\n   * @param scope A scope containing event metadata.\n   * @returns A SyncPromise that resolves with the event or rejects in case event was/will not be send.\n   */\n  protected _processEvent(event: Event, hint: EventHint, scope?: Scope): PromiseLike<Event> {\n    const options = this.getOptions();\n    const { sampleRate } = options;\n\n    const isTransaction = isTransactionEvent(event);\n    const isError = isErrorEvent(event);\n    const eventType = event.type || 'error';\n    const beforeSendLabel = `before send for type \\`${eventType}\\``;\n\n    // 1.0 === 100% events are sent\n    // 0.0 === 0% events are sent\n    // Sampling for transaction happens somewhere else\n    if (isError && typeof sampleRate === 'number' && Math.random() > sampleRate) {\n      this.recordDroppedEvent('sample_rate', 'error', event);\n      return rejectedSyncPromise(\n        new SentryError(\n          `Discarding event because it's not included in the random sample (sampling rate = ${sampleRate})`,\n          'log',\n        ),\n      );\n    }\n\n    const dataCategory: DataCategory = eventType === 'replay_event' ? 'replay' : eventType;\n\n    return this._prepareEvent(event, hint, scope)\n      .then(prepared => {\n        if (prepared === null) {\n          this.recordDroppedEvent('event_processor', dataCategory, event);\n          throw new SentryError('An event processor returned `null`, will not send event.', 'log');\n        }\n\n        const isInternalException = hint.data && (hint.data as { __sentry__: boolean }).__sentry__ === true;\n        if (isInternalException) {\n          return prepared;\n        }\n\n        const result = processBeforeSend(options, prepared, hint);\n        return _validateBeforeSendResult(result, beforeSendLabel);\n      })\n      .then(processedEvent => {\n        if (processedEvent === null) {\n          this.recordDroppedEvent('before_send', dataCategory, event);\n          throw new SentryError(`${beforeSendLabel} returned \\`null\\`, will not send event.`, 'log');\n        }\n\n        const session = scope && scope.getSession();\n        if (!isTransaction && session) {\n          this._updateSessionFromEvent(session, processedEvent);\n        }\n\n        // None of the Sentry built event processor will update transaction name,\n        // so if the transaction name has been changed by an event processor, we know\n        // it has to come from custom event processor added by a user\n        const transactionInfo = processedEvent.transaction_info;\n        if (isTransaction && transactionInfo && processedEvent.transaction !== event.transaction) {\n          const source = 'custom';\n          processedEvent.transaction_info = {\n            ...transactionInfo,\n            source,\n          };\n        }\n\n        this.sendEvent(processedEvent, hint);\n        return processedEvent;\n      })\n      .then(null, reason => {\n        if (reason instanceof SentryError) {\n          throw reason;\n        }\n\n        this.captureException(reason, {\n          data: {\n            __sentry__: true,\n          },\n          originalException: reason,\n        });\n        throw new SentryError(\n          `Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\\nReason: ${reason}`,\n        );\n      });\n  }\n\n  /**\n   * Occupies the client with processing and event\n   */\n  protected _process<T>(promise: PromiseLike<T>): void {\n    this._numProcessing++;\n    void promise.then(\n      value => {\n        this._numProcessing--;\n        return value;\n      },\n      reason => {\n        this._numProcessing--;\n        return reason;\n      },\n    );\n  }\n\n  /**\n   * @inheritdoc\n   */\n  protected _sendEnvelope(envelope: Envelope): PromiseLike<void | TransportMakeRequestResponse> | void {\n    this.emit('beforeEnvelope', envelope);\n\n    if (this._isEnabled() && this._transport) {\n      return this._transport.send(envelope).then(null, reason => {\n        __DEBUG_BUILD__ && logger.error('Error while sending event:', reason);\n      });\n    } else {\n      __DEBUG_BUILD__ && logger.error('Transport disabled');\n    }\n  }\n\n  /**\n   * Clears outcomes on this client and returns them.\n   */\n  protected _clearOutcomes(): Outcome[] {\n    const outcomes = this._outcomes;\n    this._outcomes = {};\n    return Object.keys(outcomes).map(key => {\n      const [reason, category] = key.split(':') as [EventDropReason, DataCategory];\n      return {\n        reason,\n        category,\n        quantity: outcomes[key],\n      };\n    });\n  }\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n  public abstract eventFromException(_exception: any, _hint?: EventHint): PromiseLike<Event>;\n\n  /**\n   * @inheritDoc\n   */\n  public abstract eventFromMessage(\n    _message: string,\n    // eslint-disable-next-line deprecation/deprecation\n    _level?: Severity | SeverityLevel,\n    _hint?: EventHint,\n  ): PromiseLike<Event>;\n}\n\n/**\n * Verifies that return value of configured `beforeSend` or `beforeSendTransaction` is of expected type, and returns the value if so.\n */\nfunction _validateBeforeSendResult(\n  beforeSendResult: PromiseLike<Event | null> | Event | null,\n  beforeSendLabel: string,\n): PromiseLike<Event | null> | Event | null {\n  const invalidValueError = `${beforeSendLabel} must return \\`null\\` or a valid event.`;\n  if (isThenable(beforeSendResult)) {\n    return beforeSendResult.then(\n      event => {\n        if (!isPlainObject(event) && event !== null) {\n          throw new SentryError(invalidValueError);\n        }\n        return event;\n      },\n      e => {\n        throw new SentryError(`${beforeSendLabel} rejected with ${e}`);\n      },\n    );\n  } else if (!isPlainObject(beforeSendResult) && beforeSendResult !== null) {\n    throw new SentryError(invalidValueError);\n  }\n  return beforeSendResult;\n}\n\n/**\n * Process the matching `beforeSendXXX` callback.\n */\nfunction processBeforeSend(\n  options: ClientOptions,\n  event: Event,\n  hint: EventHint,\n): PromiseLike<Event | null> | Event | null {\n  const { beforeSend, beforeSendTransaction } = options;\n\n  if (isErrorEvent(event) && beforeSend) {\n    return beforeSend(event, hint);\n  }\n\n  if (isTransactionEvent(event) && beforeSendTransaction) {\n    return beforeSendTransaction(event, hint);\n  }\n\n  return event;\n}\n\nfunction isErrorEvent(event: Event): event is ErrorEvent {\n  return event.type === undefined;\n}\n\nfunction isTransactionEvent(event: Event): event is TransactionEvent {\n  return event.type === 'transaction';\n}\n","import type { ClientReport, ClientReportEnvelope, ClientReportItem } from '@sentry/types';\n\nimport { createEnvelope } from './envelope';\nimport { dateTimestampInSeconds } from './time';\n\n/**\n * Creates client report envelope\n * @param discarded_events An array of discard events\n * @param dsn A DSN that can be set on the header. Optional.\n */\nexport function createClientReportEnvelope(\n  discarded_events: ClientReport['discarded_events'],\n  dsn?: string,\n  timestamp?: number,\n): ClientReportEnvelope {\n  const clientReportItem: ClientReportItem = [\n    { type: 'client_report' },\n    {\n      timestamp: timestamp || dateTimestampInSeconds(),\n      discarded_events,\n    },\n  ];\n  return createEnvelope<ClientReportEnvelope>(dsn ? { dsn } : {}, [clientReportItem]);\n}\n","import type { Scope } from '@sentry/core';\nimport { BaseClient, SDK_VERSION } from '@sentry/core';\nimport type {\n  BrowserClientProfilingOptions,\n  BrowserClientReplayOptions,\n  ClientOptions,\n  Event,\n  EventHint,\n  Options,\n  Severity,\n  SeverityLevel,\n  UserFeedback,\n} from '@sentry/types';\nimport { createClientReportEnvelope, dsnToString, getSDKSource, logger } from '@sentry/utils';\n\nimport { eventFromException, eventFromMessage } from './eventbuilder';\nimport { WINDOW } from './helpers';\nimport type { BrowserTransportOptions } from './transports/types';\nimport { createUserFeedbackEnvelope } from './userfeedback';\n\n/**\n * Configuration options for the Sentry Browser SDK.\n * @see @sentry/types Options for more information.\n */\nexport type BrowserOptions = Options<BrowserTransportOptions> &\n  BrowserClientReplayOptions &\n  BrowserClientProfilingOptions;\n\n/**\n * Configuration options for the Sentry Browser SDK Client class\n * @see BrowserClient for more information.\n */\nexport type BrowserClientOptions = ClientOptions<BrowserTransportOptions> &\n  BrowserClientReplayOptions &\n  BrowserClientProfilingOptions;\n\n/**\n * The Sentry Browser SDK Client.\n *\n * @see BrowserOptions for documentation on configuration options.\n * @see SentryClient for usage documentation.\n */\nexport class BrowserClient extends BaseClient<BrowserClientOptions> {\n  /**\n   * Creates a new Browser SDK instance.\n   *\n   * @param options Configuration options for this SDK.\n   */\n  public constructor(options: BrowserClientOptions) {\n    const sdkSource = WINDOW.SENTRY_SDK_SOURCE || getSDKSource();\n\n    options._metadata = options._metadata || {};\n    options._metadata.sdk = options._metadata.sdk || {\n      name: 'sentry.javascript.browser',\n      packages: [\n        {\n          name: `${sdkSource}:@sentry/browser`,\n          version: SDK_VERSION,\n        },\n      ],\n      version: SDK_VERSION,\n    };\n\n    super(options);\n\n    if (options.sendClientReports && WINDOW.document) {\n      WINDOW.document.addEventListener('visibilitychange', () => {\n        if (WINDOW.document.visibilityState === 'hidden') {\n          this._flushOutcomes();\n        }\n      });\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public eventFromException(exception: unknown, hint?: EventHint): PromiseLike<Event> {\n    return eventFromException(this._options.stackParser, exception, hint, this._options.attachStacktrace);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public eventFromMessage(\n    message: string,\n    // eslint-disable-next-line deprecation/deprecation\n    level: Severity | SeverityLevel = 'info',\n    hint?: EventHint,\n  ): PromiseLike<Event> {\n    return eventFromMessage(this._options.stackParser, message, level, hint, this._options.attachStacktrace);\n  }\n\n  /**\n   * Sends user feedback to Sentry.\n   */\n  public captureUserFeedback(feedback: UserFeedback): void {\n    if (!this._isEnabled()) {\n      __DEBUG_BUILD__ && logger.warn('SDK not enabled, will not capture user feedback.');\n      return;\n    }\n\n    const envelope = createUserFeedbackEnvelope(feedback, {\n      metadata: this.getSdkMetadata(),\n      dsn: this.getDsn(),\n      tunnel: this.getOptions().tunnel,\n    });\n    void this._sendEnvelope(envelope);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  protected _prepareEvent(event: Event, hint: EventHint, scope?: Scope): PromiseLike<Event | null> {\n    event.platform = event.platform || 'javascript';\n    return super._prepareEvent(event, hint, scope);\n  }\n\n  /**\n   * Sends client reports as an envelope.\n   */\n  private _flushOutcomes(): void {\n    const outcomes = this._clearOutcomes();\n\n    if (outcomes.length === 0) {\n      __DEBUG_BUILD__ && logger.log('No outcomes to send');\n      return;\n    }\n\n    // This is really the only place where we want to check for a DSN and only send outcomes then\n    if (!this._dsn) {\n      __DEBUG_BUILD__ && logger.log('No dsn provided, will not send outcomes');\n      return;\n    }\n\n    __DEBUG_BUILD__ && logger.log('Sending outcomes:', outcomes);\n\n    const envelope = createClientReportEnvelope(outcomes, this._options.tunnel && dsnToString(this._dsn));\n    void this._sendEnvelope(envelope);\n  }\n}\n","import type {\n  DsnComponents,\n  Event,\n  EventEnvelope,\n  EventItem,\n  SdkInfo,\n  SdkMetadata,\n  Session,\n  SessionAggregates,\n  SessionEnvelope,\n  SessionItem,\n} from '@sentry/types';\nimport {\n  createEnvelope,\n  createEventEnvelopeHeaders,\n  dsnToString,\n  getSdkMetadataForEnvelopeHeader,\n} from '@sentry/utils';\n\n/**\n * Apply SdkInfo (name, version, packages, integrations) to the corresponding event key.\n * Merge with existing data if any.\n **/\nfunction enhanceEventWithSdkInfo(event: Event, sdkInfo?: SdkInfo): Event {\n  if (!sdkInfo) {\n    return event;\n  }\n  event.sdk = event.sdk || {};\n  event.sdk.name = event.sdk.name || sdkInfo.name;\n  event.sdk.version = event.sdk.version || sdkInfo.version;\n  event.sdk.integrations = [...(event.sdk.integrations || []), ...(sdkInfo.integrations || [])];\n  event.sdk.packages = [...(event.sdk.packages || []), ...(sdkInfo.packages || [])];\n  return event;\n}\n\n/** Creates an envelope from a Session */\nexport function createSessionEnvelope(\n  session: Session | SessionAggregates,\n  dsn?: DsnComponents,\n  metadata?: SdkMetadata,\n  tunnel?: string,\n): SessionEnvelope {\n  const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n  const envelopeHeaders = {\n    sent_at: new Date().toISOString(),\n    ...(sdkInfo && { sdk: sdkInfo }),\n    ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n  };\n\n  const envelopeItem: SessionItem =\n    'aggregates' in session ? [{ type: 'sessions' }, session] : [{ type: 'session' }, session.toJSON()];\n\n  return createEnvelope<SessionEnvelope>(envelopeHeaders, [envelopeItem]);\n}\n\n/**\n * Create an Envelope from an event.\n */\nexport function createEventEnvelope(\n  event: Event,\n  dsn?: DsnComponents,\n  metadata?: SdkMetadata,\n  tunnel?: string,\n): EventEnvelope {\n  const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n\n  /*\n    Note: Due to TS, event.type may be `replay_event`, theoretically.\n    In practice, we never call `createEventEnvelope` with `replay_event` type,\n    and we'd have to adjut a looot of types to make this work properly.\n    We want to avoid casting this around, as that could lead to bugs (e.g. when we add another type)\n    So the safe choice is to really guard against the replay_event type here.\n  */\n  const eventType = event.type && event.type !== 'replay_event' ? event.type : 'event';\n\n  enhanceEventWithSdkInfo(event, metadata && metadata.sdk);\n\n  const envelopeHeaders = createEventEnvelopeHeaders(event, sdkInfo, tunnel, dsn);\n\n  // Prevent this data (which, if it exists, was used in earlier steps in the processing pipeline) from being sent to\n  // sentry. (Note: Our use of this property comes and goes with whatever we might be debugging, whatever hacks we may\n  // have temporarily added, etc. Even if we don't happen to be using it at some point in the future, let's not get rid\n  // of this `delete`, lest we miss putting it back in the next time the property is in use.)\n  delete event.sdkProcessingMetadata;\n\n  const eventItem: EventItem = [{ type: eventType }, event];\n  return createEnvelope<EventEnvelope>(envelopeHeaders, [eventItem]);\n}\n","import { getCurrentHub } from '@sentry/core';\nimport type { Event, EventHint, Exception, Severity, SeverityLevel, StackFrame, StackParser } from '@sentry/types';\nimport {\n  addExceptionMechanism,\n  addExceptionTypeValue,\n  extractExceptionKeysForMessage,\n  isDOMError,\n  isDOMException,\n  isError,\n  isErrorEvent,\n  isEvent,\n  isPlainObject,\n  normalizeToSize,\n  resolvedSyncPromise,\n} from '@sentry/utils';\n\ntype Prototype = { constructor: (...args: unknown[]) => unknown };\n\n/**\n * This function creates an exception from a JavaScript Error\n */\nexport function exceptionFromError(stackParser: StackParser, ex: Error): Exception {\n  // Get the frames first since Opera can lose the stack if we touch anything else first\n  const frames = parseStackFrames(stackParser, ex);\n\n  const exception: Exception = {\n    type: ex && ex.name,\n    value: extractMessage(ex),\n  };\n\n  if (frames.length) {\n    exception.stacktrace = { frames };\n  }\n\n  if (exception.type === undefined && exception.value === '') {\n    exception.value = 'Unrecoverable error caught';\n  }\n\n  return exception;\n}\n\n/**\n * @hidden\n */\nexport function eventFromPlainObject(\n  stackParser: StackParser,\n  exception: Record<string, unknown>,\n  syntheticException?: Error,\n  isUnhandledRejection?: boolean,\n): Event {\n  const hub = getCurrentHub();\n  const client = hub.getClient();\n  const normalizeDepth = client && client.getOptions().normalizeDepth;\n\n  const event: Event = {\n    exception: {\n      values: [\n        {\n          type: isEvent(exception) ? exception.constructor.name : isUnhandledRejection ? 'UnhandledRejection' : 'Error',\n          value: getNonErrorObjectExceptionValue(exception, { isUnhandledRejection }),\n        },\n      ],\n    },\n    extra: {\n      __serialized__: normalizeToSize(exception, normalizeDepth),\n    },\n  };\n\n  if (syntheticException) {\n    const frames = parseStackFrames(stackParser, syntheticException);\n    if (frames.length) {\n      // event.exception.values[0] has been set above\n      (event.exception as { values: Exception[] }).values[0].stacktrace = { frames };\n    }\n  }\n\n  return event;\n}\n\n/**\n * @hidden\n */\nexport function eventFromError(stackParser: StackParser, ex: Error): Event {\n  return {\n    exception: {\n      values: [exceptionFromError(stackParser, ex)],\n    },\n  };\n}\n\n/** Parses stack frames from an error */\nexport function parseStackFrames(\n  stackParser: StackParser,\n  ex: Error & { framesToPop?: number; stacktrace?: string },\n): StackFrame[] {\n  // Access and store the stacktrace property before doing ANYTHING\n  // else to it because Opera is not very good at providing it\n  // reliably in other circumstances.\n  const stacktrace = ex.stacktrace || ex.stack || '';\n\n  const popSize = getPopSize(ex);\n\n  try {\n    return stackParser(stacktrace, popSize);\n  } catch (e) {\n    // no-empty\n  }\n\n  return [];\n}\n\n// Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108\nconst reactMinifiedRegexp = /Minified React error #\\d+;/i;\n\nfunction getPopSize(ex: Error & { framesToPop?: number }): number {\n  if (ex) {\n    if (typeof ex.framesToPop === 'number') {\n      return ex.framesToPop;\n    }\n\n    if (reactMinifiedRegexp.test(ex.message)) {\n      return 1;\n    }\n  }\n\n  return 0;\n}\n\n/**\n * There are cases where stacktrace.message is an Event object\n * https://github.com/getsentry/sentry-javascript/issues/1949\n * In this specific case we try to extract stacktrace.message.error.message\n */\nfunction extractMessage(ex: Error & { message: { error?: Error } }): string {\n  const message = ex && ex.message;\n  if (!message) {\n    return 'No error message';\n  }\n  if (message.error && typeof message.error.message === 'string') {\n    return message.error.message;\n  }\n  return message;\n}\n\n/**\n * Creates an {@link Event} from all inputs to `captureException` and non-primitive inputs to `captureMessage`.\n * @hidden\n */\nexport function eventFromException(\n  stackParser: StackParser,\n  exception: unknown,\n  hint?: EventHint,\n  attachStacktrace?: boolean,\n): PromiseLike<Event> {\n  const syntheticException = (hint && hint.syntheticException) || undefined;\n  const event = eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace);\n  addExceptionMechanism(event); // defaults to { type: 'generic', handled: true }\n  event.level = 'error';\n  if (hint && hint.event_id) {\n    event.event_id = hint.event_id;\n  }\n  return resolvedSyncPromise(event);\n}\n\n/**\n * Builds and Event from a Message\n * @hidden\n */\nexport function eventFromMessage(\n  stackParser: StackParser,\n  message: string,\n  // eslint-disable-next-line deprecation/deprecation\n  level: Severity | SeverityLevel = 'info',\n  hint?: EventHint,\n  attachStacktrace?: boolean,\n): PromiseLike<Event> {\n  const syntheticException = (hint && hint.syntheticException) || undefined;\n  const event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n  event.level = level;\n  if (hint && hint.event_id) {\n    event.event_id = hint.event_id;\n  }\n  return resolvedSyncPromise(event);\n}\n\n/**\n * @hidden\n */\nexport function eventFromUnknownInput(\n  stackParser: StackParser,\n  exception: unknown,\n  syntheticException?: Error,\n  attachStacktrace?: boolean,\n  isUnhandledRejection?: boolean,\n): Event {\n  let event: Event;\n\n  if (isErrorEvent(exception as ErrorEvent) && (exception as ErrorEvent).error) {\n    // If it is an ErrorEvent with `error` property, extract it to get actual Error\n    const errorEvent = exception as ErrorEvent;\n    return eventFromError(stackParser, errorEvent.error as Error);\n  }\n\n  // If it is a `DOMError` (which is a legacy API, but still supported in some browsers) then we just extract the name\n  // and message, as it doesn't provide anything else. According to the spec, all `DOMExceptions` should also be\n  // `Error`s, but that's not the case in IE11, so in that case we treat it the same as we do a `DOMError`.\n  //\n  // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n  // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n  // https://webidl.spec.whatwg.org/#es-DOMException-specialness\n  if (isDOMError(exception) || isDOMException(exception as DOMException)) {\n    const domException = exception as DOMException;\n\n    if ('stack' in (exception as Error)) {\n      event = eventFromError(stackParser, exception as Error);\n    } else {\n      const name = domException.name || (isDOMError(domException) ? 'DOMError' : 'DOMException');\n      const message = domException.message ? `${name}: ${domException.message}` : name;\n      event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n      addExceptionTypeValue(event, message);\n    }\n    if ('code' in domException) {\n      // eslint-disable-next-line deprecation/deprecation\n      event.tags = { ...event.tags, 'DOMException.code': `${domException.code}` };\n    }\n\n    return event;\n  }\n  if (isError(exception)) {\n    // we have a real Error object, do nothing\n    return eventFromError(stackParser, exception);\n  }\n  if (isPlainObject(exception) || isEvent(exception)) {\n    // If it's a plain object or an instance of `Event` (the built-in JS kind, not this SDK's `Event` type), serialize\n    // it manually. This will allow us to group events based on top-level keys which is much better than creating a new\n    // group on any key/value change.\n    const objectException = exception as Record<string, unknown>;\n    event = eventFromPlainObject(stackParser, objectException, syntheticException, isUnhandledRejection);\n    addExceptionMechanism(event, {\n      synthetic: true,\n    });\n    return event;\n  }\n\n  // If none of previous checks were valid, then it means that it's not:\n  // - an instance of DOMError\n  // - an instance of DOMException\n  // - an instance of Event\n  // - an instance of Error\n  // - a valid ErrorEvent (one with an error property)\n  // - a plain Object\n  //\n  // So bail out and capture it as a simple message:\n  event = eventFromString(stackParser, exception as string, syntheticException, attachStacktrace);\n  addExceptionTypeValue(event, `${exception}`, undefined);\n  addExceptionMechanism(event, {\n    synthetic: true,\n  });\n\n  return event;\n}\n\n/**\n * @hidden\n */\nexport function eventFromString(\n  stackParser: StackParser,\n  input: string,\n  syntheticException?: Error,\n  attachStacktrace?: boolean,\n): Event {\n  const event: Event = {\n    message: input,\n  };\n\n  if (attachStacktrace && syntheticException) {\n    const frames = parseStackFrames(stackParser, syntheticException);\n    if (frames.length) {\n      event.exception = {\n        values: [{ value: input, stacktrace: { frames } }],\n      };\n    }\n  }\n\n  return event;\n}\n\nfunction getNonErrorObjectExceptionValue(\n  exception: Record<string, unknown>,\n  { isUnhandledRejection }: { isUnhandledRejection?: boolean },\n): string {\n  const keys = extractExceptionKeysForMessage(exception);\n  const captureType = isUnhandledRejection ? 'promise rejection' : 'exception';\n\n  // Some ErrorEvent instances do not have an `error` property, which is why they are not handled before\n  // We still want to try to get a decent message for these cases\n  if (isErrorEvent(exception)) {\n    return `Event \\`ErrorEvent\\` captured as ${captureType} with message \\`${exception.message}\\``;\n  }\n\n  if (isEvent(exception)) {\n    const className = getObjectClassName(exception);\n    return `Event \\`${className}\\` (type=${exception.type}) captured as ${captureType}`;\n  }\n\n  return `Object captured as ${captureType} with keys: ${keys}`;\n}\n\nfunction getObjectClassName(obj: unknown): string | undefined | void {\n  try {\n    const prototype: Prototype | null = Object.getPrototypeOf(obj);\n    return prototype ? prototype.constructor.name : undefined;\n  } catch (e) {\n    // ignore errors here\n  }\n}\n","import { captureException, withScope } from '@sentry/core';\nimport type { DsnLike, Event as SentryEvent, Mechanism, Scope, WrappedFunction } from '@sentry/types';\nimport {\n  addExceptionMechanism,\n  addExceptionTypeValue,\n  addNonEnumerableProperty,\n  getOriginalFunction,\n  GLOBAL_OBJ,\n  markFunctionWrapped,\n} from '@sentry/utils';\n\nexport const WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n\nlet ignoreOnError: number = 0;\n\n/**\n * @hidden\n */\nexport function shouldIgnoreOnError(): boolean {\n  return ignoreOnError > 0;\n}\n\n/**\n * @hidden\n */\nexport function ignoreNextOnError(): void {\n  // onerror should trigger before setTimeout\n  ignoreOnError++;\n  setTimeout(() => {\n    ignoreOnError--;\n  });\n}\n\n/**\n * Instruments the given function and sends an event to Sentry every time the\n * function throws an exception.\n *\n * @param fn A function to wrap. It is generally safe to pass an unbound function, because the returned wrapper always\n * has a correct `this` context.\n * @returns The wrapped function.\n * @hidden\n */\nexport function wrap(\n  fn: WrappedFunction,\n  options: {\n    mechanism?: Mechanism;\n  } = {},\n  before?: WrappedFunction,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): any {\n  // for future readers what this does is wrap a function and then create\n  // a bi-directional wrapping between them.\n  //\n  // example: wrapped = wrap(original);\n  //  original.__sentry_wrapped__ -> wrapped\n  //  wrapped.__sentry_original__ -> original\n\n  if (typeof fn !== 'function') {\n    return fn;\n  }\n\n  try {\n    // if we're dealing with a function that was previously wrapped, return\n    // the original wrapper.\n    const wrapper = fn.__sentry_wrapped__;\n    if (wrapper) {\n      return wrapper;\n    }\n\n    // We don't wanna wrap it twice\n    if (getOriginalFunction(fn)) {\n      return fn;\n    }\n  } catch (e) {\n    // Just accessing custom props in some Selenium environments\n    // can cause a \"Permission denied\" exception (see raven-js#495).\n    // Bail on wrapping and return the function as-is (defers to window.onerror).\n    return fn;\n  }\n\n  /* eslint-disable prefer-rest-params */\n  // It is important that `sentryWrapped` is not an arrow function to preserve the context of `this`\n  const sentryWrapped: WrappedFunction = function (this: unknown): void {\n    const args = Array.prototype.slice.call(arguments);\n\n    try {\n      if (before && typeof before === 'function') {\n        before.apply(this, arguments);\n      }\n\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n      const wrappedArguments = args.map((arg: any) => wrap(arg, options));\n\n      // Attempt to invoke user-land function\n      // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n      //       means the sentry.javascript SDK caught an error invoking your application code. This\n      //       is expected behavior and NOT indicative of a bug with sentry.javascript.\n      return fn.apply(this, wrappedArguments);\n    } catch (ex) {\n      ignoreNextOnError();\n\n      withScope((scope: Scope) => {\n        scope.addEventProcessor((event: SentryEvent) => {\n          if (options.mechanism) {\n            addExceptionTypeValue(event, undefined, undefined);\n            addExceptionMechanism(event, options.mechanism);\n          }\n\n          event.extra = {\n            ...event.extra,\n            arguments: args,\n          };\n\n          return event;\n        });\n\n        captureException(ex);\n      });\n\n      throw ex;\n    }\n  };\n  /* eslint-enable prefer-rest-params */\n\n  // Accessing some objects may throw\n  // ref: https://github.com/getsentry/sentry-javascript/issues/1168\n  try {\n    for (const property in fn) {\n      if (Object.prototype.hasOwnProperty.call(fn, property)) {\n        sentryWrapped[property] = fn[property];\n      }\n    }\n  } catch (_oO) {} // eslint-disable-line no-empty\n\n  // Signal that this function has been wrapped/filled already\n  // for both debugging and to prevent it to being wrapped/filled twice\n  markFunctionWrapped(sentryWrapped, fn);\n\n  addNonEnumerableProperty(fn, '__sentry_wrapped__', sentryWrapped);\n\n  // Restore original function name (not all browsers allow that)\n  try {\n    const descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, 'name') as PropertyDescriptor;\n    if (descriptor.configurable) {\n      Object.defineProperty(sentryWrapped, 'name', {\n        get(): string {\n          return fn.name;\n        },\n      });\n    }\n    // eslint-disable-next-line no-empty\n  } catch (_oO) {}\n\n  return sentryWrapped;\n}\n\n/**\n * All properties the report dialog supports\n */\nexport interface ReportDialogOptions {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  [key: string]: any;\n  eventId?: string;\n  dsn?: DsnLike;\n  user?: {\n    email?: string;\n    name?: string;\n  };\n  lang?: string;\n  title?: string;\n  subtitle?: string;\n  subtitle2?: string;\n  labelName?: string;\n  labelEmail?: string;\n  labelComments?: string;\n  labelClose?: string;\n  labelSubmit?: string;\n  errorGeneric?: string;\n  errorFormEntry?: string;\n  successMessage?: string;\n  /** Callback after reportDialog showed up */\n  onLoad?(this: void): void;\n}\n","import type {\n  Event,\n  EventHint,\n  Exception,\n  Hub,\n  Mechanism,\n  Severity,\n  SeverityLevel,\n  StackFrame,\n  StackParser,\n} from '@sentry/types';\n\nimport { isError, isPlainObject } from './is';\nimport { addExceptionMechanism, addExceptionTypeValue } from './misc';\nimport { normalizeToSize } from './normalize';\nimport { extractExceptionKeysForMessage } from './object';\n\n/**\n * Extracts stack frames from the error.stack string\n */\nexport function parseStackFrames(stackParser: StackParser, error: Error): StackFrame[] {\n  return stackParser(error.stack || '', 1);\n}\n\n/**\n * Extracts stack frames from the error and builds a Sentry Exception\n */\nexport function exceptionFromError(stackParser: StackParser, error: Error): Exception {\n  const exception: Exception = {\n    type: error.name || error.constructor.name,\n    value: error.message,\n  };\n\n  const frames = parseStackFrames(stackParser, error);\n  if (frames.length) {\n    exception.stacktrace = { frames };\n  }\n\n  return exception;\n}\n\nfunction getMessageForObject(exception: object): string {\n  if ('name' in exception && typeof exception.name === 'string') {\n    let message = `'${exception.name}' captured as exception`;\n\n    if ('message' in exception && typeof exception.message === 'string') {\n      message += ` with message '${exception.message}'`;\n    }\n\n    return message;\n  } else if ('message' in exception && typeof exception.message === 'string') {\n    return exception.message;\n  } else {\n    // This will allow us to group events based on top-level keys\n    // which is much better than creating new group when any key/value change\n    return `Object captured as exception with keys: ${extractExceptionKeysForMessage(\n      exception as Record<string, unknown>,\n    )}`;\n  }\n}\n\n/**\n * Builds and Event from a Exception\n * @hidden\n */\nexport function eventFromUnknownInput(\n  getCurrentHub: () => Hub,\n  stackParser: StackParser,\n  exception: unknown,\n  hint?: EventHint,\n): Event {\n  let ex: unknown = exception;\n  const providedMechanism: Mechanism | undefined =\n    hint && hint.data && (hint.data as { mechanism: Mechanism }).mechanism;\n  const mechanism: Mechanism = providedMechanism || {\n    handled: true,\n    type: 'generic',\n  };\n\n  if (!isError(exception)) {\n    if (isPlainObject(exception)) {\n      const hub = getCurrentHub();\n      const client = hub.getClient();\n      const normalizeDepth = client && client.getOptions().normalizeDepth;\n      hub.configureScope(scope => {\n        scope.setExtra('__serialized__', normalizeToSize(exception, normalizeDepth));\n      });\n\n      const message = getMessageForObject(exception);\n      ex = (hint && hint.syntheticException) || new Error(message);\n      (ex as Error).message = message;\n    } else {\n      // This handles when someone does: `throw \"something awesome\";`\n      // We use synthesized Error here so we can extract a (rough) stack trace.\n      ex = (hint && hint.syntheticException) || new Error(exception as string);\n      (ex as Error).message = exception as string;\n    }\n    mechanism.synthetic = true;\n  }\n\n  const event = {\n    exception: {\n      values: [exceptionFromError(stackParser, ex as Error)],\n    },\n  };\n\n  addExceptionTypeValue(event, undefined, undefined);\n  addExceptionMechanism(event, mechanism);\n\n  return {\n    ...event,\n    event_id: hint && hint.event_id,\n  };\n}\n\n/**\n * Builds and Event from a Message\n * @hidden\n */\nexport function eventFromMessage(\n  stackParser: StackParser,\n  message: string,\n  // eslint-disable-next-line deprecation/deprecation\n  level: Severity | SeverityLevel = 'info',\n  hint?: EventHint,\n  attachStacktrace?: boolean,\n): Event {\n  const event: Event = {\n    event_id: hint && hint.event_id,\n    level,\n    message,\n  };\n\n  if (attachStacktrace && hint && hint.syntheticException) {\n    const frames = parseStackFrames(stackParser, hint.syntheticException);\n    if (frames.length) {\n      event.exception = {\n        values: [\n          {\n            value: message,\n            stacktrace: { frames },\n          },\n        ],\n      };\n    }\n  }\n\n  return event;\n}\n","import type { Client, Event, EventHint, Integration } from '@sentry/types';\nimport { applyAggregateErrorsToEvent, exceptionFromError } from '@sentry/utils';\n\nconst DEFAULT_KEY = 'cause';\nconst DEFAULT_LIMIT = 5;\n\n/** Adds SDK info to an event. */\nexport class LinkedErrors implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'LinkedErrors';\n\n  /**\n   * @inheritDoc\n   */\n  public readonly name: string;\n\n  /**\n   * @inheritDoc\n   */\n  private readonly _key: string;\n\n  /**\n   * @inheritDoc\n   */\n  private readonly _limit: number;\n\n  /**\n   * @inheritDoc\n   */\n  public constructor(options: { key?: string; limit?: number } = {}) {\n    this._key = options.key || DEFAULT_KEY;\n    this._limit = options.limit || DEFAULT_LIMIT;\n    this.name = LinkedErrors.id;\n  }\n\n  /** @inheritdoc */\n  public setupOnce(): void {\n    // noop\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public preprocessEvent(event: Event, hint: EventHint | undefined, client: Client): void {\n    const options = client.getOptions();\n\n    applyAggregateErrorsToEvent(\n      exceptionFromError,\n      options.stackParser,\n      options.maxValueLength,\n      this._key,\n      this._limit,\n      event,\n      hint,\n    );\n  }\n}\n","import type { Event, StackParser } from '@sentry/types';\nimport { GLOBAL_OBJ } from '@sentry/utils';\n\n/** Keys are source filename/url, values are metadata objects. */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst filenameMetadataMap = new Map<string, any>();\n/** Set of stack strings that have already been parsed. */\nconst parsedStacks = new Set<string>();\n\nfunction ensureMetadataStacksAreParsed(parser: StackParser): void {\n  if (!GLOBAL_OBJ._sentryModuleMetadata) {\n    return;\n  }\n\n  for (const stack of Object.keys(GLOBAL_OBJ._sentryModuleMetadata)) {\n    const metadata = GLOBAL_OBJ._sentryModuleMetadata[stack];\n\n    if (parsedStacks.has(stack)) {\n      continue;\n    }\n\n    // Ensure this stack doesn't get parsed again\n    parsedStacks.add(stack);\n\n    const frames = parser(stack);\n\n    // Go through the frames starting from the top of the stack and find the first one with a filename\n    for (const frame of frames.reverse()) {\n      if (frame.filename) {\n        // Save the metadata for this filename\n        filenameMetadataMap.set(frame.filename, metadata);\n        break;\n      }\n    }\n  }\n}\n\n/**\n * Retrieve metadata for a specific JavaScript file URL.\n *\n * Metadata is injected by the Sentry bundler plugins using the `_experiments.moduleMetadata` config option.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getMetadataForUrl(parser: StackParser, filename: string): any | undefined {\n  ensureMetadataStacksAreParsed(parser);\n  return filenameMetadataMap.get(filename);\n}\n\n/**\n * Adds metadata to stack frames.\n *\n * Metadata is injected by the Sentry bundler plugins using the `_experiments.moduleMetadata` config option.\n */\nexport function addMetadataToStackFrames(parser: StackParser, event: Event): void {\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    event.exception!.values!.forEach(exception => {\n      if (!exception.stacktrace) {\n        return;\n      }\n\n      for (const frame of exception.stacktrace.frames || []) {\n        if (!frame.filename) {\n          continue;\n        }\n\n        const metadata = getMetadataForUrl(parser, frame.filename);\n\n        if (metadata) {\n          frame.module_metadata = metadata;\n        }\n      }\n    });\n  } catch (_) {\n    // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n  }\n}\n\n/**\n * Strips metadata from stack frames.\n */\nexport function stripMetadataFromStackFrames(event: Event): void {\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    event.exception!.values!.forEach(exception => {\n      if (!exception.stacktrace) {\n        return;\n      }\n\n      for (const frame of exception.stacktrace.frames || []) {\n        delete frame.module_metadata;\n      }\n    });\n  } catch (_) {\n    // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n  }\n}\n","import type { EventItem, EventProcessor, Hub, Integration } from '@sentry/types';\nimport { forEachEnvelopeItem } from '@sentry/utils';\n\nimport { addMetadataToStackFrames, stripMetadataFromStackFrames } from '../metadata';\n\n/**\n * Adds module metadata to stack frames.\n *\n * Metadata can be injected by the Sentry bundler plugins using the `_experiments.moduleMetadata` config option.\n *\n * When this integration is added, the metadata passed to the bundler plugin is added to the stack frames of all events\n * under the `module_metadata` property. This can be used to help in tagging or routing of events from different teams\n * our sources\n */\nexport class ModuleMetadata implements Integration {\n  /*\n   * @inheritDoc\n   */\n  public static id: string = 'ModuleMetadata';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  public constructor() {\n    this.name = ModuleMetadata.id;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(addGlobalEventProcessor: (processor: EventProcessor) => void, getCurrentHub: () => Hub): void {\n    const client = getCurrentHub().getClient();\n\n    if (!client || typeof client.on !== 'function') {\n      return;\n    }\n\n    // We need to strip metadata from stack frames before sending them to Sentry since these are client side only.\n    client.on('beforeEnvelope', envelope => {\n      forEachEnvelopeItem(envelope, (item, type) => {\n        if (type === 'event') {\n          const event = Array.isArray(item) ? (item as EventItem)[1] : undefined;\n\n          if (event) {\n            stripMetadataFromStackFrames(event);\n            item[1] = event;\n          }\n        }\n      });\n    });\n\n    const stackParser = client.getOptions().stackParser;\n\n    addGlobalEventProcessor(event => {\n      addMetadataToStackFrames(stackParser, event);\n      return event;\n    });\n  }\n}\n","import type { Transaction } from '@sentry/types';\n\nimport type { Hub } from '../hub';\nimport { getCurrentHub } from '../hub';\n\n/**\n * The `extractTraceparentData` function and `TRACEPARENT_REGEXP` constant used\n * to be declared in this file. It was later moved into `@sentry/utils` as part of a\n * move to remove `@sentry/tracing` dependencies from `@sentry/node` (`extractTraceparentData`\n * is the only tracing function used by `@sentry/node`).\n *\n * These exports are kept here for backwards compatability's sake.\n *\n * TODO(v7): Reorganize these exports\n *\n * See https://github.com/getsentry/sentry-javascript/issues/4642 for more details.\n */\nexport { TRACEPARENT_REGEXP, extractTraceparentData } from '@sentry/utils';\n\n/** Grabs active transaction off scope, if any */\nexport function getActiveTransaction<T extends Transaction>(maybeHub?: Hub): T | undefined {\n  const hub = maybeHub || getCurrentHub();\n  const scope = hub.getScope();\n  return scope.getTransaction() as T | undefined;\n}\n\n// so it can be used in manual instrumentation without necessitating a hard dependency on @sentry/utils\nexport { stripUrlQueryAndFragment } from '@sentry/utils';\n","import { addInstrumentationHandler, logger } from '@sentry/utils';\n\nimport type { SpanStatusType } from './span';\nimport { getActiveTransaction } from './utils';\n\nlet errorsInstrumented = false;\n\n/**\n * Configures global error listeners\n */\nexport function registerErrorInstrumentation(): void {\n  if (errorsInstrumented) {\n    return;\n  }\n\n  errorsInstrumented = true;\n  addInstrumentationHandler('error', errorCallback);\n  addInstrumentationHandler('unhandledrejection', errorCallback);\n}\n\n/**\n * If an error or unhandled promise occurs, we mark the active transaction as failed\n */\nfunction errorCallback(): void {\n  const activeTransaction = getActiveTransaction();\n  if (activeTransaction) {\n    const status: SpanStatusType = 'internal_error';\n    __DEBUG_BUILD__ && logger.log(`[Tracing] Transaction: ${status} -> Global error occured`);\n    activeTransaction.setStatus(status);\n  }\n}\n\n// The function name will be lost when bundling but we need to be able to identify this listener later to maintain the\n// node.js default exit behaviour\nerrorCallback.tag = 'sentry_tracingErrorCallback';\n","import type { DynamicSamplingContext } from '@sentry/types';\n\nimport { isString } from './is';\nimport { logger } from './logger';\n\nexport const BAGGAGE_HEADER_NAME = 'baggage';\n\nexport const SENTRY_BAGGAGE_KEY_PREFIX = 'sentry-';\n\nexport const SENTRY_BAGGAGE_KEY_PREFIX_REGEX = /^sentry-/;\n\n/**\n * Max length of a serialized baggage string\n *\n * https://www.w3.org/TR/baggage/#limits\n */\nexport const MAX_BAGGAGE_STRING_LENGTH = 8192;\n\n/**\n * Takes a baggage header and turns it into Dynamic Sampling Context, by extracting all the \"sentry-\" prefixed values\n * from it.\n *\n * @param baggageHeader A very bread definition of a baggage header as it might appear in various frameworks.\n * @returns The Dynamic Sampling Context that was found on `baggageHeader`, if there was any, `undefined` otherwise.\n */\nexport function baggageHeaderToDynamicSamplingContext(\n  // Very liberal definition of what any incoming header might look like\n  baggageHeader: string | string[] | number | null | undefined | boolean,\n): Partial<DynamicSamplingContext> | undefined {\n  if (!isString(baggageHeader) && !Array.isArray(baggageHeader)) {\n    return undefined;\n  }\n\n  // Intermediary object to store baggage key value pairs of incoming baggage headers on.\n  // It is later used to read Sentry-DSC-values from.\n  let baggageObject: Readonly<Record<string, string>> = {};\n\n  if (Array.isArray(baggageHeader)) {\n    // Combine all baggage headers into one object containing the baggage values so we can later read the Sentry-DSC-values from it\n    baggageObject = baggageHeader.reduce<Record<string, string>>((acc, curr) => {\n      const currBaggageObject = baggageHeaderToObject(curr);\n      return {\n        ...acc,\n        ...currBaggageObject,\n      };\n    }, {});\n  } else {\n    // Return undefined if baggage header is an empty string (technically an empty baggage header is not spec conform but\n    // this is how we choose to handle it)\n    if (!baggageHeader) {\n      return undefined;\n    }\n\n    baggageObject = baggageHeaderToObject(baggageHeader);\n  }\n\n  // Read all \"sentry-\" prefixed values out of the baggage object and put it onto a dynamic sampling context object.\n  const dynamicSamplingContext = Object.entries(baggageObject).reduce<Record<string, string>>((acc, [key, value]) => {\n    if (key.match(SENTRY_BAGGAGE_KEY_PREFIX_REGEX)) {\n      const nonPrefixedKey = key.slice(SENTRY_BAGGAGE_KEY_PREFIX.length);\n      acc[nonPrefixedKey] = value;\n    }\n    return acc;\n  }, {});\n\n  // Only return a dynamic sampling context object if there are keys in it.\n  // A keyless object means there were no sentry values on the header, which means that there is no DSC.\n  if (Object.keys(dynamicSamplingContext).length > 0) {\n    return dynamicSamplingContext as Partial<DynamicSamplingContext>;\n  } else {\n    return undefined;\n  }\n}\n\n/**\n * Turns a Dynamic Sampling Object into a baggage header by prefixing all the keys on the object with \"sentry-\".\n *\n * @param dynamicSamplingContext The Dynamic Sampling Context to turn into a header. For convenience and compatibility\n * with the `getDynamicSamplingContext` method on the Transaction class ,this argument can also be `undefined`. If it is\n * `undefined` the function will return `undefined`.\n * @returns a baggage header, created from `dynamicSamplingContext`, or `undefined` either if `dynamicSamplingContext`\n * was `undefined`, or if `dynamicSamplingContext` didn't contain any values.\n */\nexport function dynamicSamplingContextToSentryBaggageHeader(\n  // this also takes undefined for convenience and bundle size in other places\n  dynamicSamplingContext?: Partial<DynamicSamplingContext>,\n): string | undefined {\n  if (!dynamicSamplingContext) {\n    return undefined;\n  }\n\n  // Prefix all DSC keys with \"sentry-\" and put them into a new object\n  const sentryPrefixedDSC = Object.entries(dynamicSamplingContext).reduce<Record<string, string>>(\n    (acc, [dscKey, dscValue]) => {\n      if (dscValue) {\n        acc[`${SENTRY_BAGGAGE_KEY_PREFIX}${dscKey}`] = dscValue;\n      }\n      return acc;\n    },\n    {},\n  );\n\n  return objectToBaggageHeader(sentryPrefixedDSC);\n}\n\n/**\n * Will parse a baggage header, which is a simple key-value map, into a flat object.\n *\n * @param baggageHeader The baggage header to parse.\n * @returns a flat object containing all the key-value pairs from `baggageHeader`.\n */\nfunction baggageHeaderToObject(baggageHeader: string): Record<string, string> {\n  return baggageHeader\n    .split(',')\n    .map(baggageEntry => baggageEntry.split('=').map(keyOrValue => decodeURIComponent(keyOrValue.trim())))\n    .reduce<Record<string, string>>((acc, [key, value]) => {\n      acc[key] = value;\n      return acc;\n    }, {});\n}\n\n/**\n * Turns a flat object (key-value pairs) into a baggage header, which is also just key-value pairs.\n *\n * @param object The object to turn into a baggage header.\n * @returns a baggage header string, or `undefined` if the object didn't have any values, since an empty baggage header\n * is not spec compliant.\n */\nfunction objectToBaggageHeader(object: Record<string, string>): string | undefined {\n  if (Object.keys(object).length === 0) {\n    // An empty baggage header is not spec compliant: We return undefined.\n    return undefined;\n  }\n\n  return Object.entries(object).reduce((baggageHeader, [objectKey, objectValue], currentIndex) => {\n    const baggageEntry = `${encodeURIComponent(objectKey)}=${encodeURIComponent(objectValue)}`;\n    const newBaggageHeader = currentIndex === 0 ? baggageEntry : `${baggageHeader},${baggageEntry}`;\n    if (newBaggageHeader.length > MAX_BAGGAGE_STRING_LENGTH) {\n      __DEBUG_BUILD__ &&\n        logger.warn(\n          `Not adding key: ${objectKey} with val: ${objectValue} to baggage header due to exceeding baggage size limits.`,\n        );\n      return baggageHeader;\n    } else {\n      return newBaggageHeader;\n    }\n  }, '');\n}\n","import type { DynamicSamplingContext, PropagationContext, TraceparentData } from '@sentry/types';\n\nimport { baggageHeaderToDynamicSamplingContext } from './baggage';\nimport { uuid4 } from './misc';\n\nexport const TRACEPARENT_REGEXP = new RegExp(\n  '^[ \\\\t]*' + // whitespace\n    '([0-9a-f]{32})?' + // trace_id\n    '-?([0-9a-f]{16})?' + // span_id\n    '-?([01])?' + // sampled\n    '[ \\\\t]*$', // whitespace\n);\n\n/**\n * Extract transaction context data from a `sentry-trace` header.\n *\n * @param traceparent Traceparent string\n *\n * @returns Object containing data from the header, or undefined if traceparent string is malformed\n */\nexport function extractTraceparentData(traceparent?: string): TraceparentData | undefined {\n  if (!traceparent) {\n    return undefined;\n  }\n\n  const matches = traceparent.match(TRACEPARENT_REGEXP);\n  if (!matches) {\n    return undefined;\n  }\n\n  let parentSampled: boolean | undefined;\n  if (matches[3] === '1') {\n    parentSampled = true;\n  } else if (matches[3] === '0') {\n    parentSampled = false;\n  }\n\n  return {\n    traceId: matches[1],\n    parentSampled,\n    parentSpanId: matches[2],\n  };\n}\n\n/**\n * Create tracing context from incoming headers.\n */\nexport function tracingContextFromHeaders(\n  sentryTrace: Parameters<typeof extractTraceparentData>[0],\n  baggage: Parameters<typeof baggageHeaderToDynamicSamplingContext>[0],\n): {\n  traceparentData: ReturnType<typeof extractTraceparentData>;\n  dynamicSamplingContext: ReturnType<typeof baggageHeaderToDynamicSamplingContext>;\n  propagationContext: PropagationContext;\n} {\n  const traceparentData = extractTraceparentData(sentryTrace);\n  const dynamicSamplingContext = baggageHeaderToDynamicSamplingContext(baggage);\n\n  const { traceId, parentSpanId, parentSampled } = traceparentData || {};\n\n  const propagationContext: PropagationContext = {\n    traceId: traceId || uuid4(),\n    spanId: uuid4().substring(16),\n    sampled: parentSampled,\n  };\n\n  if (parentSpanId) {\n    propagationContext.parentSpanId = parentSpanId;\n  }\n\n  if (dynamicSamplingContext) {\n    propagationContext.dsc = dynamicSamplingContext as DynamicSamplingContext;\n  }\n\n  return {\n    traceparentData,\n    dynamicSamplingContext,\n    propagationContext,\n  };\n}\n\n/**\n * Create sentry-trace header from span context values.\n */\nexport function generateSentryTraceHeader(\n  traceId: string = uuid4(),\n  spanId: string = uuid4().substring(16),\n  sampled?: boolean,\n): string {\n  let sampledString = '';\n  if (sampled !== undefined) {\n    sampledString = sampled ? '-1' : '-0';\n  }\n  return `${traceId}-${spanId}${sampledString}`;\n}\n","/* eslint-disable max-lines */\nimport type {\n  Instrumenter,\n  Primitive,\n  Span as SpanInterface,\n  SpanContext,\n  SpanOrigin,\n  TraceContext,\n  Transaction,\n} from '@sentry/types';\nimport { dropUndefinedKeys, generateSentryTraceHeader, logger, timestampInSeconds, uuid4 } from '@sentry/utils';\n\n/**\n * Keeps track of finished spans for a given transaction\n * @internal\n * @hideconstructor\n * @hidden\n */\nexport class SpanRecorder {\n  public spans: Span[];\n\n  private readonly _maxlen: number;\n\n  public constructor(maxlen: number = 1000) {\n    this._maxlen = maxlen;\n    this.spans = [];\n  }\n\n  /**\n   * This is just so that we don't run out of memory while recording a lot\n   * of spans. At some point we just stop and flush out the start of the\n   * trace tree (i.e.the first n spans with the smallest\n   * start_timestamp).\n   */\n  public add(span: Span): void {\n    if (this.spans.length > this._maxlen) {\n      span.spanRecorder = undefined;\n    } else {\n      this.spans.push(span);\n    }\n  }\n}\n\n/**\n * Span contains all data about a span\n */\nexport class Span implements SpanInterface {\n  /**\n   * @inheritDoc\n   */\n  public traceId: string;\n\n  /**\n   * @inheritDoc\n   */\n  public spanId: string;\n\n  /**\n   * @inheritDoc\n   */\n  public parentSpanId?: string;\n\n  /**\n   * Internal keeper of the status\n   */\n  public status?: SpanStatusType | string;\n\n  /**\n   * @inheritDoc\n   */\n  public sampled?: boolean;\n\n  /**\n   * Timestamp in seconds when the span was created.\n   */\n  public startTimestamp: number;\n\n  /**\n   * Timestamp in seconds when the span ended.\n   */\n  public endTimestamp?: number;\n\n  /**\n   * @inheritDoc\n   */\n  public op?: string;\n\n  /**\n   * @inheritDoc\n   */\n  public description?: string;\n\n  /**\n   * @inheritDoc\n   */\n  public tags: { [key: string]: Primitive };\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  public data: { [key: string]: any };\n\n  /**\n   * List of spans that were finalized\n   */\n  public spanRecorder?: SpanRecorder;\n\n  /**\n   * @inheritDoc\n   */\n  public transaction?: Transaction;\n\n  /**\n   * The instrumenter that created this span.\n   */\n  public instrumenter: Instrumenter;\n\n  /**\n   * The origin of the span, giving context about what created the span.\n   */\n  public origin?: SpanOrigin;\n\n  /**\n   * You should never call the constructor manually, always use `Sentry.startTransaction()`\n   * or call `startChild()` on an existing span.\n   * @internal\n   * @hideconstructor\n   * @hidden\n   */\n  public constructor(spanContext: SpanContext = {}) {\n    this.traceId = spanContext.traceId || uuid4();\n    this.spanId = spanContext.spanId || uuid4().substring(16);\n    this.startTimestamp = spanContext.startTimestamp || timestampInSeconds();\n    this.tags = spanContext.tags || {};\n    this.data = spanContext.data || {};\n    this.instrumenter = spanContext.instrumenter || 'sentry';\n    this.origin = spanContext.origin || 'manual';\n\n    if (spanContext.parentSpanId) {\n      this.parentSpanId = spanContext.parentSpanId;\n    }\n    // We want to include booleans as well here\n    if ('sampled' in spanContext) {\n      this.sampled = spanContext.sampled;\n    }\n    if (spanContext.op) {\n      this.op = spanContext.op;\n    }\n    if (spanContext.description) {\n      this.description = spanContext.description;\n    }\n    if (spanContext.name) {\n      this.description = spanContext.name;\n    }\n    if (spanContext.status) {\n      this.status = spanContext.status;\n    }\n    if (spanContext.endTimestamp) {\n      this.endTimestamp = spanContext.endTimestamp;\n    }\n  }\n\n  /** An alias for `description` of the Span. */\n  public get name(): string {\n    return this.description || '';\n  }\n  /** Update the name of the span. */\n  public set name(name: string) {\n    this.setName(name);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public startChild(\n    spanContext?: Pick<SpanContext, Exclude<keyof SpanContext, 'sampled' | 'traceId' | 'parentSpanId'>>,\n  ): Span {\n    const childSpan = new Span({\n      ...spanContext,\n      parentSpanId: this.spanId,\n      sampled: this.sampled,\n      traceId: this.traceId,\n    });\n\n    childSpan.spanRecorder = this.spanRecorder;\n    if (childSpan.spanRecorder) {\n      childSpan.spanRecorder.add(childSpan);\n    }\n\n    childSpan.transaction = this.transaction;\n\n    if (__DEBUG_BUILD__ && childSpan.transaction) {\n      const opStr = (spanContext && spanContext.op) || '< unknown op >';\n      const nameStr = childSpan.transaction.name || '< unknown name >';\n      const idStr = childSpan.transaction.spanId;\n\n      const logMessage = `[Tracing] Starting '${opStr}' span on transaction '${nameStr}' (${idStr}).`;\n      childSpan.transaction.metadata.spanMetadata[childSpan.spanId] = { logMessage };\n      logger.log(logMessage);\n    }\n\n    return childSpan;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setTag(key: string, value: Primitive): this {\n    this.tags = { ...this.tags, [key]: value };\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n  public setData(key: string, value: any): this {\n    this.data = { ...this.data, [key]: value };\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setStatus(value: SpanStatusType): this {\n    this.status = value;\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setHttpStatus(httpStatus: number): this {\n    this.setTag('http.status_code', String(httpStatus));\n    this.setData('http.response.status_code', httpStatus);\n    const spanStatus = spanStatusfromHttpCode(httpStatus);\n    if (spanStatus !== 'unknown_error') {\n      this.setStatus(spanStatus);\n    }\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setName(name: string): void {\n    this.description = name;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public isSuccess(): boolean {\n    return this.status === 'ok';\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public finish(endTimestamp?: number): void {\n    if (\n      __DEBUG_BUILD__ &&\n      // Don't call this for transactions\n      this.transaction &&\n      this.transaction.spanId !== this.spanId\n    ) {\n      const { logMessage } = this.transaction.metadata.spanMetadata[this.spanId];\n      if (logMessage) {\n        logger.log((logMessage as string).replace('Starting', 'Finishing'));\n      }\n    }\n\n    this.endTimestamp = typeof endTimestamp === 'number' ? endTimestamp : timestampInSeconds();\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public toTraceparent(): string {\n    return generateSentryTraceHeader(this.traceId, this.spanId, this.sampled);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public toContext(): SpanContext {\n    return dropUndefinedKeys({\n      data: this.data,\n      description: this.description,\n      endTimestamp: this.endTimestamp,\n      op: this.op,\n      parentSpanId: this.parentSpanId,\n      sampled: this.sampled,\n      spanId: this.spanId,\n      startTimestamp: this.startTimestamp,\n      status: this.status,\n      tags: this.tags,\n      traceId: this.traceId,\n    });\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public updateWithContext(spanContext: SpanContext): this {\n    this.data = spanContext.data || {};\n    this.description = spanContext.description;\n    this.endTimestamp = spanContext.endTimestamp;\n    this.op = spanContext.op;\n    this.parentSpanId = spanContext.parentSpanId;\n    this.sampled = spanContext.sampled;\n    this.spanId = spanContext.spanId || this.spanId;\n    this.startTimestamp = spanContext.startTimestamp || this.startTimestamp;\n    this.status = spanContext.status;\n    this.tags = spanContext.tags || {};\n    this.traceId = spanContext.traceId || this.traceId;\n\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getTraceContext(): TraceContext {\n    return dropUndefinedKeys({\n      data: Object.keys(this.data).length > 0 ? this.data : undefined,\n      description: this.description,\n      op: this.op,\n      parent_span_id: this.parentSpanId,\n      span_id: this.spanId,\n      status: this.status,\n      tags: Object.keys(this.tags).length > 0 ? this.tags : undefined,\n      trace_id: this.traceId,\n    });\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public toJSON(): {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    data?: { [key: string]: any };\n    description?: string;\n    op?: string;\n    parent_span_id?: string;\n    span_id: string;\n    start_timestamp: number;\n    status?: string;\n    tags?: { [key: string]: Primitive };\n    timestamp?: number;\n    trace_id: string;\n    origin?: SpanOrigin;\n  } {\n    return dropUndefinedKeys({\n      data: Object.keys(this.data).length > 0 ? this.data : undefined,\n      description: this.description,\n      op: this.op,\n      parent_span_id: this.parentSpanId,\n      span_id: this.spanId,\n      start_timestamp: this.startTimestamp,\n      status: this.status,\n      tags: Object.keys(this.tags).length > 0 ? this.tags : undefined,\n      timestamp: this.endTimestamp,\n      trace_id: this.traceId,\n      origin: this.origin,\n    });\n  }\n}\n\nexport type SpanStatusType =\n  /** The operation completed successfully. */\n  | 'ok'\n  /** Deadline expired before operation could complete. */\n  | 'deadline_exceeded'\n  /** 401 Unauthorized (actually does mean unauthenticated according to RFC 7235) */\n  | 'unauthenticated'\n  /** 403 Forbidden */\n  | 'permission_denied'\n  /** 404 Not Found. Some requested entity (file or directory) was not found. */\n  | 'not_found'\n  /** 429 Too Many Requests */\n  | 'resource_exhausted'\n  /** Client specified an invalid argument. 4xx. */\n  | 'invalid_argument'\n  /** 501 Not Implemented */\n  | 'unimplemented'\n  /** 503 Service Unavailable */\n  | 'unavailable'\n  /** Other/generic 5xx. */\n  | 'internal_error'\n  /** Unknown. Any non-standard HTTP status code. */\n  | 'unknown_error'\n  /** The operation was cancelled (typically by the user). */\n  | 'cancelled'\n  /** Already exists (409) */\n  | 'already_exists'\n  /** Operation was rejected because the system is not in a state required for the operation's */\n  | 'failed_precondition'\n  /** The operation was aborted, typically due to a concurrency issue. */\n  | 'aborted'\n  /** Operation was attempted past the valid range. */\n  | 'out_of_range'\n  /** Unrecoverable data loss or corruption */\n  | 'data_loss';\n\n/**\n * Converts a HTTP status code into a {@link SpanStatusType}.\n *\n * @param httpStatus The HTTP response status code.\n * @returns The span status or unknown_error.\n */\nexport function spanStatusfromHttpCode(httpStatus: number): SpanStatusType {\n  if (httpStatus < 400 && httpStatus >= 100) {\n    return 'ok';\n  }\n\n  if (httpStatus >= 400 && httpStatus < 500) {\n    switch (httpStatus) {\n      case 401:\n        return 'unauthenticated';\n      case 403:\n        return 'permission_denied';\n      case 404:\n        return 'not_found';\n      case 409:\n        return 'already_exists';\n      case 413:\n        return 'failed_precondition';\n      case 429:\n        return 'resource_exhausted';\n      default:\n        return 'invalid_argument';\n    }\n  }\n\n  if (httpStatus >= 500 && httpStatus < 600) {\n    switch (httpStatus) {\n      case 501:\n        return 'unimplemented';\n      case 503:\n        return 'unavailable';\n      case 504:\n        return 'deadline_exceeded';\n      default:\n        return 'internal_error';\n    }\n  }\n\n  return 'unknown_error';\n}\n","import type {\n  Context,\n  Contexts,\n  DynamicSamplingContext,\n  Measurements,\n  MeasurementUnit,\n  Transaction as TransactionInterface,\n  TransactionContext,\n  TransactionEvent,\n  TransactionMetadata,\n} from '@sentry/types';\nimport { dropUndefinedKeys, logger } from '@sentry/utils';\n\nimport type { Hub } from '../hub';\nimport { getCurrentHub } from '../hub';\nimport { getDynamicSamplingContextFromClient } from './dynamicSamplingContext';\nimport { Span as SpanClass, SpanRecorder } from './span';\n\n/** JSDoc */\nexport class Transaction extends SpanClass implements TransactionInterface {\n  public metadata: TransactionMetadata;\n\n  /**\n   * The reference to the current hub.\n   */\n  public _hub: Hub;\n\n  private _name: string;\n\n  private _measurements: Measurements;\n\n  private _contexts: Contexts;\n\n  private _trimEnd?: boolean;\n\n  private _frozenDynamicSamplingContext: Readonly<Partial<DynamicSamplingContext>> | undefined;\n\n  /**\n   * This constructor should never be called manually. Those instrumenting tracing should use\n   * `Sentry.startTransaction()`, and internal methods should use `hub.startTransaction()`.\n   * @internal\n   * @hideconstructor\n   * @hidden\n   */\n  public constructor(transactionContext: TransactionContext, hub?: Hub) {\n    super(transactionContext);\n    // We need to delete description since it's set by the Span class constructor\n    // but not needed for transactions.\n    delete this.description;\n\n    this._measurements = {};\n    this._contexts = {};\n\n    this._hub = hub || getCurrentHub();\n\n    this._name = transactionContext.name || '';\n\n    this.metadata = {\n      source: 'custom',\n      ...transactionContext.metadata,\n      spanMetadata: {},\n    };\n\n    this._trimEnd = transactionContext.trimEnd;\n\n    // this is because transactions are also spans, and spans have a transaction pointer\n    this.transaction = this;\n\n    // If Dynamic Sampling Context is provided during the creation of the transaction, we freeze it as it usually means\n    // there is incoming Dynamic Sampling Context. (Either through an incoming request, a baggage meta-tag, or other means)\n    const incomingDynamicSamplingContext = this.metadata.dynamicSamplingContext;\n    if (incomingDynamicSamplingContext) {\n      // We shallow copy this in case anything writes to the original reference of the passed in `dynamicSamplingContext`\n      this._frozenDynamicSamplingContext = { ...incomingDynamicSamplingContext };\n    }\n  }\n\n  /** Getter for `name` property */\n  public get name(): string {\n    return this._name;\n  }\n\n  /** Setter for `name` property, which also sets `source` as custom */\n  public set name(newName: string) {\n    this.setName(newName);\n  }\n\n  /**\n   * JSDoc\n   */\n  public setName(name: string, source: TransactionMetadata['source'] = 'custom'): void {\n    this._name = name;\n    this.metadata.source = source;\n  }\n\n  /**\n   * Attaches SpanRecorder to the span itself\n   * @param maxlen maximum number of spans that can be recorded\n   */\n  public initSpanRecorder(maxlen: number = 1000): void {\n    if (!this.spanRecorder) {\n      this.spanRecorder = new SpanRecorder(maxlen);\n    }\n    this.spanRecorder.add(this);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setContext(key: string, context: Context | null): void {\n    if (context === null) {\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete this._contexts[key];\n    } else {\n      this._contexts[key] = context;\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setMeasurement(name: string, value: number, unit: MeasurementUnit = ''): void {\n    this._measurements[name] = { value, unit };\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setMetadata(newMetadata: Partial<TransactionMetadata>): void {\n    this.metadata = { ...this.metadata, ...newMetadata };\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public finish(endTimestamp?: number): string | undefined {\n    const transaction = this._finishTransaction(endTimestamp);\n    if (!transaction) {\n      return undefined;\n    }\n    return this._hub.captureEvent(transaction);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public toContext(): TransactionContext {\n    const spanContext = super.toContext();\n\n    return dropUndefinedKeys({\n      ...spanContext,\n      name: this.name,\n      trimEnd: this._trimEnd,\n    });\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public updateWithContext(transactionContext: TransactionContext): this {\n    super.updateWithContext(transactionContext);\n\n    this.name = transactionContext.name || '';\n\n    this._trimEnd = transactionContext.trimEnd;\n\n    return this;\n  }\n\n  /**\n   * @inheritdoc\n   *\n   * @experimental\n   */\n  public getDynamicSamplingContext(): Readonly<Partial<DynamicSamplingContext>> {\n    if (this._frozenDynamicSamplingContext) {\n      return this._frozenDynamicSamplingContext;\n    }\n\n    const hub = this._hub || getCurrentHub();\n    const client = hub.getClient();\n\n    if (!client) return {};\n\n    const scope = hub.getScope();\n    const dsc = getDynamicSamplingContextFromClient(this.traceId, client, scope);\n\n    const maybeSampleRate = this.metadata.sampleRate;\n    if (maybeSampleRate !== undefined) {\n      dsc.sample_rate = `${maybeSampleRate}`;\n    }\n\n    // We don't want to have a transaction name in the DSC if the source is \"url\" because URLs might contain PII\n    const source = this.metadata.source;\n    if (source && source !== 'url') {\n      dsc.transaction = this.name;\n    }\n\n    if (this.sampled !== undefined) {\n      dsc.sampled = String(this.sampled);\n    }\n\n    // Uncomment if we want to make DSC immutable\n    // this._frozenDynamicSamplingContext = dsc;\n\n    return dsc;\n  }\n\n  /**\n   * Override the current hub with a new one.\n   * Used if you want another hub to finish the transaction.\n   *\n   * @internal\n   */\n  public setHub(hub: Hub): void {\n    this._hub = hub;\n  }\n\n  /**\n   * Finish the transaction & prepare the event to send to Sentry.\n   */\n  protected _finishTransaction(endTimestamp?: number): TransactionEvent | undefined {\n    // This transaction is already finished, so we should not flush it again.\n    if (this.endTimestamp !== undefined) {\n      return undefined;\n    }\n\n    if (!this.name) {\n      __DEBUG_BUILD__ && logger.warn('Transaction has no name, falling back to `<unlabeled transaction>`.');\n      this.name = '<unlabeled transaction>';\n    }\n\n    // just sets the end timestamp\n    super.finish(endTimestamp);\n\n    const client = this._hub.getClient();\n    if (client && client.emit) {\n      client.emit('finishTransaction', this);\n    }\n\n    if (this.sampled !== true) {\n      // At this point if `sampled !== true` we want to discard the transaction.\n      __DEBUG_BUILD__ && logger.log('[Tracing] Discarding transaction because its trace was not chosen to be sampled.');\n\n      if (client) {\n        client.recordDroppedEvent('sample_rate', 'transaction');\n      }\n\n      return undefined;\n    }\n\n    const finishedSpans = this.spanRecorder ? this.spanRecorder.spans.filter(s => s !== this && s.endTimestamp) : [];\n\n    if (this._trimEnd && finishedSpans.length > 0) {\n      this.endTimestamp = finishedSpans.reduce((prev: SpanClass, current: SpanClass) => {\n        if (prev.endTimestamp && current.endTimestamp) {\n          return prev.endTimestamp > current.endTimestamp ? prev : current;\n        }\n        return prev;\n      }).endTimestamp;\n    }\n\n    const metadata = this.metadata;\n\n    const transaction: TransactionEvent = {\n      contexts: {\n        ...this._contexts,\n        // We don't want to override trace context\n        trace: this.getTraceContext(),\n      },\n      spans: finishedSpans,\n      start_timestamp: this.startTimestamp,\n      tags: this.tags,\n      timestamp: this.endTimestamp,\n      transaction: this.name,\n      type: 'transaction',\n      sdkProcessingMetadata: {\n        ...metadata,\n        dynamicSamplingContext: this.getDynamicSamplingContext(),\n      },\n      ...(metadata.source && {\n        transaction_info: {\n          source: metadata.source,\n        },\n      }),\n    };\n\n    const hasMeasurements = Object.keys(this._measurements).length > 0;\n\n    if (hasMeasurements) {\n      __DEBUG_BUILD__ &&\n        logger.log(\n          '[Measurements] Adding measurements to transaction',\n          JSON.stringify(this._measurements, undefined, 2),\n        );\n      transaction.measurements = this._measurements;\n    }\n\n    __DEBUG_BUILD__ && logger.log(`[Tracing] Finishing ${this.op} transaction: ${this.name}.`);\n\n    return transaction;\n  }\n}\n","/* eslint-disable max-lines */\nimport type { TransactionContext } from '@sentry/types';\nimport { logger, timestampInSeconds } from '@sentry/utils';\n\nimport type { Hub } from '../hub';\nimport type { Span } from './span';\nimport { SpanRecorder } from './span';\nimport { Transaction } from './transaction';\n\nexport const TRACING_DEFAULTS = {\n  idleTimeout: 1000,\n  finalTimeout: 30000,\n  heartbeatInterval: 5000,\n};\n\nconst FINISH_REASON_TAG = 'finishReason';\n\nconst IDLE_TRANSACTION_FINISH_REASONS = [\n  'heartbeatFailed',\n  'idleTimeout',\n  'documentHidden',\n  'finalTimeout',\n  'externalFinish',\n  'cancelled',\n];\n\n/**\n * @inheritDoc\n */\nexport class IdleTransactionSpanRecorder extends SpanRecorder {\n  public constructor(\n    private readonly _pushActivity: (id: string) => void,\n    private readonly _popActivity: (id: string) => void,\n    public transactionSpanId: string,\n    maxlen?: number,\n  ) {\n    super(maxlen);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public add(span: Span): void {\n    // We should make sure we do not push and pop activities for\n    // the transaction that this span recorder belongs to.\n    if (span.spanId !== this.transactionSpanId) {\n      // We patch span.finish() to pop an activity after setting an endTimestamp.\n      span.finish = (endTimestamp?: number) => {\n        span.endTimestamp = typeof endTimestamp === 'number' ? endTimestamp : timestampInSeconds();\n        this._popActivity(span.spanId);\n      };\n\n      // We should only push new activities if the span does not have an end timestamp.\n      if (span.endTimestamp === undefined) {\n        this._pushActivity(span.spanId);\n      }\n    }\n\n    super.add(span);\n  }\n}\n\nexport type BeforeFinishCallback = (transactionSpan: IdleTransaction, endTimestamp: number) => void;\n\n/**\n * An IdleTransaction is a transaction that automatically finishes. It does this by tracking child spans as activities.\n * You can have multiple IdleTransactions active, but if the `onScope` option is specified, the idle transaction will\n * put itself on the scope on creation.\n */\nexport class IdleTransaction extends Transaction {\n  // Activities store a list of active spans\n  public activities: Record<string, boolean>;\n  // Track state of activities in previous heartbeat\n  private _prevHeartbeatString: string | undefined;\n\n  // Amount of times heartbeat has counted. Will cause transaction to finish after 3 beats.\n  private _heartbeatCounter: number;\n\n  // We should not use heartbeat if we finished a transaction\n  private _finished: boolean;\n\n  // Idle timeout was canceled and we should finish the transaction with the last span end.\n  private _idleTimeoutCanceledPermanently: boolean;\n\n  private readonly _beforeFinishCallbacks: BeforeFinishCallback[];\n\n  /**\n   * Timer that tracks Transaction idleTimeout\n   */\n  private _idleTimeoutID: ReturnType<typeof setTimeout> | undefined;\n\n  private _finishReason: (typeof IDLE_TRANSACTION_FINISH_REASONS)[number];\n\n  public constructor(\n    transactionContext: TransactionContext,\n    private readonly _idleHub: Hub,\n    /**\n     * The time to wait in ms until the idle transaction will be finished. This timer is started each time\n     * there are no active spans on this transaction.\n     */\n    private readonly _idleTimeout: number = TRACING_DEFAULTS.idleTimeout,\n    /**\n     * The final value in ms that a transaction cannot exceed\n     */\n    private readonly _finalTimeout: number = TRACING_DEFAULTS.finalTimeout,\n    private readonly _heartbeatInterval: number = TRACING_DEFAULTS.heartbeatInterval,\n    // Whether or not the transaction should put itself on the scope when it starts and pop itself off when it ends\n    private readonly _onScope: boolean = false,\n  ) {\n    super(transactionContext, _idleHub);\n\n    this.activities = {};\n    this._heartbeatCounter = 0;\n    this._finished = false;\n    this._idleTimeoutCanceledPermanently = false;\n    this._beforeFinishCallbacks = [];\n    this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[4];\n\n    if (_onScope) {\n      // We set the transaction here on the scope so error events pick up the trace\n      // context and attach it to the error.\n      __DEBUG_BUILD__ && logger.log(`Setting idle transaction on scope. Span ID: ${this.spanId}`);\n      _idleHub.configureScope(scope => scope.setSpan(this));\n    }\n\n    this._restartIdleTimeout();\n    setTimeout(() => {\n      if (!this._finished) {\n        this.setStatus('deadline_exceeded');\n        this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[3];\n        this.finish();\n      }\n    }, this._finalTimeout);\n  }\n\n  /** {@inheritDoc} */\n  public finish(endTimestamp: number = timestampInSeconds()): string | undefined {\n    this._finished = true;\n    this.activities = {};\n\n    if (this.op === 'ui.action.click') {\n      this.setTag(FINISH_REASON_TAG, this._finishReason);\n    }\n\n    if (this.spanRecorder) {\n      __DEBUG_BUILD__ &&\n        logger.log('[Tracing] finishing IdleTransaction', new Date(endTimestamp * 1000).toISOString(), this.op);\n\n      for (const callback of this._beforeFinishCallbacks) {\n        callback(this, endTimestamp);\n      }\n\n      this.spanRecorder.spans = this.spanRecorder.spans.filter((span: Span) => {\n        // If we are dealing with the transaction itself, we just return it\n        if (span.spanId === this.spanId) {\n          return true;\n        }\n\n        // We cancel all pending spans with status \"cancelled\" to indicate the idle transaction was finished early\n        if (!span.endTimestamp) {\n          span.endTimestamp = endTimestamp;\n          span.setStatus('cancelled');\n          __DEBUG_BUILD__ &&\n            logger.log('[Tracing] cancelling span since transaction ended early', JSON.stringify(span, undefined, 2));\n        }\n\n        const spanStartedBeforeTransactionFinish = span.startTimestamp < endTimestamp;\n\n        // Add a delta with idle timeout so that we prevent false positives\n        const timeoutWithMarginOfError = (this._finalTimeout + this._idleTimeout) / 1000;\n        const spanEndedBeforeFinalTimeout = span.endTimestamp - this.startTimestamp < timeoutWithMarginOfError;\n\n        if (__DEBUG_BUILD__) {\n          const stringifiedSpan = JSON.stringify(span, undefined, 2);\n          if (!spanStartedBeforeTransactionFinish) {\n            logger.log('[Tracing] discarding Span since it happened after Transaction was finished', stringifiedSpan);\n          } else if (!spanEndedBeforeFinalTimeout) {\n            logger.log('[Tracing] discarding Span since it finished after Transaction final timeout', stringifiedSpan);\n          }\n        }\n\n        return spanStartedBeforeTransactionFinish && spanEndedBeforeFinalTimeout;\n      });\n\n      __DEBUG_BUILD__ && logger.log('[Tracing] flushing IdleTransaction');\n    } else {\n      __DEBUG_BUILD__ && logger.log('[Tracing] No active IdleTransaction');\n    }\n\n    // if `this._onScope` is `true`, the transaction put itself on the scope when it started\n    if (this._onScope) {\n      const scope = this._idleHub.getScope();\n      if (scope.getTransaction() === this) {\n        scope.setSpan(undefined);\n      }\n    }\n\n    return super.finish(endTimestamp);\n  }\n\n  /**\n   * Register a callback function that gets excecuted before the transaction finishes.\n   * Useful for cleanup or if you want to add any additional spans based on current context.\n   *\n   * This is exposed because users have no other way of running something before an idle transaction\n   * finishes.\n   */\n  public registerBeforeFinishCallback(callback: BeforeFinishCallback): void {\n    this._beforeFinishCallbacks.push(callback);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public initSpanRecorder(maxlen?: number): void {\n    if (!this.spanRecorder) {\n      const pushActivity = (id: string): void => {\n        if (this._finished) {\n          return;\n        }\n        this._pushActivity(id);\n      };\n      const popActivity = (id: string): void => {\n        if (this._finished) {\n          return;\n        }\n        this._popActivity(id);\n      };\n\n      this.spanRecorder = new IdleTransactionSpanRecorder(pushActivity, popActivity, this.spanId, maxlen);\n\n      // Start heartbeat so that transactions do not run forever.\n      __DEBUG_BUILD__ && logger.log('Starting heartbeat');\n      this._pingHeartbeat();\n    }\n    this.spanRecorder.add(this);\n  }\n\n  /**\n   * Cancels the existing idle timeout, if there is one.\n   * @param restartOnChildSpanChange Default is `true`.\n   *                                 If set to false the transaction will end\n   *                                 with the last child span.\n   */\n  public cancelIdleTimeout(\n    endTimestamp?: Parameters<IdleTransaction['finish']>[0],\n    {\n      restartOnChildSpanChange,\n    }: {\n      restartOnChildSpanChange?: boolean;\n    } = {\n      restartOnChildSpanChange: true,\n    },\n  ): void {\n    this._idleTimeoutCanceledPermanently = restartOnChildSpanChange === false;\n    if (this._idleTimeoutID) {\n      clearTimeout(this._idleTimeoutID);\n      this._idleTimeoutID = undefined;\n\n      if (Object.keys(this.activities).length === 0 && this._idleTimeoutCanceledPermanently) {\n        this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[5];\n        this.finish(endTimestamp);\n      }\n    }\n  }\n\n  /**\n   * Temporary method used to externally set the transaction's `finishReason`\n   *\n   * ** WARNING**\n   * This is for the purpose of experimentation only and will be removed in the near future, do not use!\n   *\n   * @internal\n   *\n   */\n  public setFinishReason(reason: string): void {\n    this._finishReason = reason;\n  }\n\n  /**\n   * Restarts idle timeout, if there is no running idle timeout it will start one.\n   */\n  private _restartIdleTimeout(endTimestamp?: Parameters<IdleTransaction['finish']>[0]): void {\n    this.cancelIdleTimeout();\n    this._idleTimeoutID = setTimeout(() => {\n      if (!this._finished && Object.keys(this.activities).length === 0) {\n        this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[1];\n        this.finish(endTimestamp);\n      }\n    }, this._idleTimeout);\n  }\n\n  /**\n   * Start tracking a specific activity.\n   * @param spanId The span id that represents the activity\n   */\n  private _pushActivity(spanId: string): void {\n    this.cancelIdleTimeout(undefined, { restartOnChildSpanChange: !this._idleTimeoutCanceledPermanently });\n    __DEBUG_BUILD__ && logger.log(`[Tracing] pushActivity: ${spanId}`);\n    this.activities[spanId] = true;\n    __DEBUG_BUILD__ && logger.log('[Tracing] new activities count', Object.keys(this.activities).length);\n  }\n\n  /**\n   * Remove an activity from usage\n   * @param spanId The span id that represents the activity\n   */\n  private _popActivity(spanId: string): void {\n    if (this.activities[spanId]) {\n      __DEBUG_BUILD__ && logger.log(`[Tracing] popActivity ${spanId}`);\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete this.activities[spanId];\n      __DEBUG_BUILD__ && logger.log('[Tracing] new activities count', Object.keys(this.activities).length);\n    }\n\n    if (Object.keys(this.activities).length === 0) {\n      const endTimestamp = timestampInSeconds();\n      if (this._idleTimeoutCanceledPermanently) {\n        this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[5];\n        this.finish(endTimestamp);\n      } else {\n        // We need to add the timeout here to have the real endtimestamp of the transaction\n        // Remember timestampInSeconds is in seconds, timeout is in ms\n        this._restartIdleTimeout(endTimestamp + this._idleTimeout / 1000);\n      }\n    }\n  }\n\n  /**\n   * Checks when entries of this.activities are not changing for 3 beats.\n   * If this occurs we finish the transaction.\n   */\n  private _beat(): void {\n    // We should not be running heartbeat if the idle transaction is finished.\n    if (this._finished) {\n      return;\n    }\n\n    const heartbeatString = Object.keys(this.activities).join('');\n\n    if (heartbeatString === this._prevHeartbeatString) {\n      this._heartbeatCounter++;\n    } else {\n      this._heartbeatCounter = 1;\n    }\n\n    this._prevHeartbeatString = heartbeatString;\n\n    if (this._heartbeatCounter >= 3) {\n      __DEBUG_BUILD__ && logger.log('[Tracing] Transaction finished because of no change for 3 heart beats');\n      this.setStatus('deadline_exceeded');\n      this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[0];\n      this.finish();\n    } else {\n      this._pingHeartbeat();\n    }\n  }\n\n  /**\n   * Pings the heartbeat\n   */\n  private _pingHeartbeat(): void {\n    __DEBUG_BUILD__ && logger.log(`pinging Heartbeat -> current counter: ${this._heartbeatCounter}`);\n    setTimeout(() => {\n      this._beat();\n    }, this._heartbeatInterval);\n  }\n}\n","import type { Options, SamplingContext } from '@sentry/types';\nimport { isNaN, logger } from '@sentry/utils';\n\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled';\nimport type { Transaction } from './transaction';\n\n/**\n * Makes a sampling decision for the given transaction and stores it on the transaction.\n *\n * Called every time a transaction is created. Only transactions which emerge with a `sampled` value of `true` will be\n * sent to Sentry.\n *\n * This method muttes the given `transaction` and will set the `sampled` value on it.\n * It returns the same transaction, for convenience.\n */\nexport function sampleTransaction<T extends Transaction>(\n  transaction: T,\n  options: Pick<Options, 'tracesSampleRate' | 'tracesSampler' | 'enableTracing'>,\n  samplingContext: SamplingContext,\n): T {\n  // nothing to do if tracing is not enabled\n  if (!hasTracingEnabled(options)) {\n    transaction.sampled = false;\n    return transaction;\n  }\n\n  // if the user has forced a sampling decision by passing a `sampled` value in their transaction context, go with that\n  if (transaction.sampled !== undefined) {\n    transaction.setMetadata({\n      sampleRate: Number(transaction.sampled),\n    });\n    return transaction;\n  }\n\n  // we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` nor `enableTracing` were defined, so one of these should\n  // work; prefer the hook if so\n  let sampleRate;\n  if (typeof options.tracesSampler === 'function') {\n    sampleRate = options.tracesSampler(samplingContext);\n    transaction.setMetadata({\n      sampleRate: Number(sampleRate),\n    });\n  } else if (samplingContext.parentSampled !== undefined) {\n    sampleRate = samplingContext.parentSampled;\n  } else if (typeof options.tracesSampleRate !== 'undefined') {\n    sampleRate = options.tracesSampleRate;\n    transaction.setMetadata({\n      sampleRate: Number(sampleRate),\n    });\n  } else {\n    // When `enableTracing === true`, we use a sample rate of 100%\n    sampleRate = 1;\n    transaction.setMetadata({\n      sampleRate,\n    });\n  }\n\n  // Since this is coming from the user (or from a function provided by the user), who knows what we might get. (The\n  // only valid values are booleans or numbers between 0 and 1.)\n  if (!isValidSampleRate(sampleRate)) {\n    __DEBUG_BUILD__ && logger.warn('[Tracing] Discarding transaction because of invalid sample rate.');\n    transaction.sampled = false;\n    return transaction;\n  }\n\n  // if the function returned 0 (or false), or if `tracesSampleRate` is 0, it's a sign the transaction should be dropped\n  if (!sampleRate) {\n    __DEBUG_BUILD__ &&\n      logger.log(\n        `[Tracing] Discarding transaction because ${\n          typeof options.tracesSampler === 'function'\n            ? 'tracesSampler returned 0 or false'\n            : 'a negative sampling decision was inherited or tracesSampleRate is set to 0'\n        }`,\n      );\n    transaction.sampled = false;\n    return transaction;\n  }\n\n  // Now we roll the dice. Math.random is inclusive of 0, but not of 1, so strict < is safe here. In case sampleRate is\n  // a boolean, the < comparison will cause it to be automatically cast to 1 if it's true and 0 if it's false.\n  transaction.sampled = Math.random() < (sampleRate as number | boolean);\n\n  // if we're not going to keep it, we're done\n  if (!transaction.sampled) {\n    __DEBUG_BUILD__ &&\n      logger.log(\n        `[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = ${Number(\n          sampleRate,\n        )})`,\n      );\n    return transaction;\n  }\n\n  __DEBUG_BUILD__ && logger.log(`[Tracing] starting ${transaction.op} transaction - ${transaction.name}`);\n  return transaction;\n}\n\n/**\n * Checks the given sample rate to make sure it is valid type and value (a boolean, or a number between 0 and 1).\n */\nfunction isValidSampleRate(rate: unknown): boolean {\n  // we need to check NaN explicitly because it's of type 'number' and therefore wouldn't get caught by this typecheck\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  if (isNaN(rate) || !(typeof rate === 'number' || typeof rate === 'boolean')) {\n    __DEBUG_BUILD__ &&\n      logger.warn(\n        `[Tracing] Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify(\n          rate,\n        )} of type ${JSON.stringify(typeof rate)}.`,\n      );\n    return false;\n  }\n\n  // in case sampleRate is a boolean, it will get automatically cast to 1 if it's true and 0 if it's false\n  if (rate < 0 || rate > 1) {\n    __DEBUG_BUILD__ &&\n      logger.warn(`[Tracing] Given sample rate is invalid. Sample rate must be between 0 and 1. Got ${rate}.`);\n    return false;\n  }\n  return true;\n}\n","import type { ClientOptions, CustomSamplingContext, TransactionContext } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport type { Hub } from '../hub';\nimport { getMainCarrier } from '../hub';\nimport { registerErrorInstrumentation } from './errors';\nimport { IdleTransaction } from './idletransaction';\nimport { sampleTransaction } from './sampling';\nimport { Transaction } from './transaction';\n\n/** Returns all trace headers that are currently on the top scope. */\nfunction traceHeaders(this: Hub): { [key: string]: string } {\n  const scope = this.getScope();\n  const span = scope.getSpan();\n\n  return span\n    ? {\n        'sentry-trace': span.toTraceparent(),\n      }\n    : {};\n}\n\n/**\n * Creates a new transaction and adds a sampling decision if it doesn't yet have one.\n *\n * The Hub.startTransaction method delegates to this method to do its work, passing the Hub instance in as `this`, as if\n * it had been called on the hub directly. Exists as a separate function so that it can be injected into the class as an\n * \"extension method.\"\n *\n * @param this: The Hub starting the transaction\n * @param transactionContext: Data used to configure the transaction\n * @param CustomSamplingContext: Optional data to be provided to the `tracesSampler` function (if any)\n *\n * @returns The new transaction\n *\n * @see {@link Hub.startTransaction}\n */\nfunction _startTransaction(\n  this: Hub,\n  transactionContext: TransactionContext,\n  customSamplingContext?: CustomSamplingContext,\n): Transaction {\n  const client = this.getClient();\n  const options: Partial<ClientOptions> = (client && client.getOptions()) || {};\n\n  const configInstrumenter = options.instrumenter || 'sentry';\n  const transactionInstrumenter = transactionContext.instrumenter || 'sentry';\n\n  if (configInstrumenter !== transactionInstrumenter) {\n    __DEBUG_BUILD__ &&\n      logger.error(\n        `A transaction was started with instrumenter=\\`${transactionInstrumenter}\\`, but the SDK is configured with the \\`${configInstrumenter}\\` instrumenter.\nThe transaction will not be sampled. Please use the ${configInstrumenter} instrumentation to start transactions.`,\n      );\n\n    transactionContext.sampled = false;\n  }\n\n  let transaction = new Transaction(transactionContext, this);\n  transaction = sampleTransaction(transaction, options, {\n    parentSampled: transactionContext.parentSampled,\n    transactionContext,\n    ...customSamplingContext,\n  });\n  if (transaction.sampled) {\n    transaction.initSpanRecorder(options._experiments && (options._experiments.maxSpans as number));\n  }\n  if (client && client.emit) {\n    client.emit('startTransaction', transaction);\n  }\n  return transaction;\n}\n\n/**\n * Create new idle transaction.\n */\nexport function startIdleTransaction(\n  hub: Hub,\n  transactionContext: TransactionContext,\n  idleTimeout: number,\n  finalTimeout: number,\n  onScope?: boolean,\n  customSamplingContext?: CustomSamplingContext,\n  heartbeatInterval?: number,\n): IdleTransaction {\n  const client = hub.getClient();\n  const options: Partial<ClientOptions> = (client && client.getOptions()) || {};\n\n  let transaction = new IdleTransaction(transactionContext, hub, idleTimeout, finalTimeout, heartbeatInterval, onScope);\n  transaction = sampleTransaction(transaction, options, {\n    parentSampled: transactionContext.parentSampled,\n    transactionContext,\n    ...customSamplingContext,\n  });\n  if (transaction.sampled) {\n    transaction.initSpanRecorder(options._experiments && (options._experiments.maxSpans as number));\n  }\n  if (client && client.emit) {\n    client.emit('startTransaction', transaction);\n  }\n  return transaction;\n}\n\n/**\n * Adds tracing extensions to the global hub.\n */\nexport function addTracingExtensions(): void {\n  const carrier = getMainCarrier();\n  if (!carrier.__SENTRY__) {\n    return;\n  }\n  carrier.__SENTRY__.extensions = carrier.__SENTRY__.extensions || {};\n  if (!carrier.__SENTRY__.extensions.startTransaction) {\n    carrier.__SENTRY__.extensions.startTransaction = _startTransaction;\n  }\n  if (!carrier.__SENTRY__.extensions.traceHeaders) {\n    carrier.__SENTRY__.extensions.traceHeaders = traceHeaders;\n  }\n\n  registerErrorInstrumentation();\n}\n","import type { TransactionContext } from '@sentry/types';\nimport { dropUndefinedKeys, isThenable, logger, tracingContextFromHeaders } from '@sentry/utils';\n\nimport type { Hub } from '../hub';\nimport { getCurrentHub } from '../hub';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled';\nimport type { Span } from './span';\n\n/**\n * Wraps a function with a transaction/span and finishes the span after the function is done.\n *\n * Note that if you have not enabled tracing extensions via `addTracingExtensions`\n * or you didn't set `tracesSampleRate`, this function will not generate spans\n * and the `span` returned from the callback will be undefined.\n *\n * This function is meant to be used internally and may break at any time. Use at your own risk.\n *\n * @internal\n * @private\n */\nexport function trace<T>(\n  context: TransactionContext,\n  callback: (span?: Span) => T,\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onError: (error: unknown) => void = () => {},\n): T {\n  const ctx = normalizeContext(context);\n\n  const hub = getCurrentHub();\n  const scope = hub.getScope();\n  const parentSpan = scope.getSpan();\n\n  const activeSpan = createChildSpanOrTransaction(hub, parentSpan, ctx);\n\n  scope.setSpan(activeSpan);\n\n  function finishAndSetSpan(): void {\n    activeSpan && activeSpan.finish();\n    hub.getScope().setSpan(parentSpan);\n  }\n\n  let maybePromiseResult: T;\n  try {\n    maybePromiseResult = callback(activeSpan);\n  } catch (e) {\n    activeSpan && activeSpan.setStatus('internal_error');\n    onError(e);\n    finishAndSetSpan();\n    throw e;\n  }\n\n  if (isThenable(maybePromiseResult)) {\n    Promise.resolve(maybePromiseResult).then(\n      () => {\n        finishAndSetSpan();\n      },\n      e => {\n        activeSpan && activeSpan.setStatus('internal_error');\n        onError(e);\n        finishAndSetSpan();\n      },\n    );\n  } else {\n    finishAndSetSpan();\n  }\n\n  return maybePromiseResult;\n}\n\n/**\n * Wraps a function with a transaction/span and finishes the span after the function is done.\n * The created span is the active span and will be used as parent by other spans created inside the function\n * and can be accessed via `Sentry.getSpan()`, as long as the function is executed while the scope is active.\n *\n * If you want to create a span that is not set as active, use {@link startInactiveSpan}.\n *\n * Note that if you have not enabled tracing extensions via `addTracingExtensions`\n * or you didn't set `tracesSampleRate`, this function will not generate spans\n * and the `span` returned from the callback will be undefined.\n */\nexport function startSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {\n  const ctx = normalizeContext(context);\n\n  const hub = getCurrentHub();\n  const scope = hub.getScope();\n  const parentSpan = scope.getSpan();\n\n  const activeSpan = createChildSpanOrTransaction(hub, parentSpan, ctx);\n  scope.setSpan(activeSpan);\n\n  function finishAndSetSpan(): void {\n    activeSpan && activeSpan.finish();\n    hub.getScope().setSpan(parentSpan);\n  }\n\n  let maybePromiseResult: T;\n  try {\n    maybePromiseResult = callback(activeSpan);\n  } catch (e) {\n    activeSpan && activeSpan.setStatus('internal_error');\n    finishAndSetSpan();\n    throw e;\n  }\n\n  if (isThenable(maybePromiseResult)) {\n    Promise.resolve(maybePromiseResult).then(\n      () => {\n        finishAndSetSpan();\n      },\n      () => {\n        activeSpan && activeSpan.setStatus('internal_error');\n        finishAndSetSpan();\n      },\n    );\n  } else {\n    finishAndSetSpan();\n  }\n\n  return maybePromiseResult;\n}\n\n/**\n * @deprecated Use {@link startSpan} instead.\n */\nexport const startActiveSpan = startSpan;\n\n/**\n * Similar to `Sentry.startSpan`. Wraps a function with a transaction/span, but does not finish the span\n * after the function is done automatically.\n *\n * The created span is the active span and will be used as parent by other spans created inside the function\n * and can be accessed via `Sentry.getActiveSpan()`, as long as the function is executed while the scope is active.\n *\n * Note that if you have not enabled tracing extensions via `addTracingExtensions`\n * or you didn't set `tracesSampleRate`, this function will not generate spans\n * and the `span` returned from the callback will be undefined.\n */\nexport function startSpanManual<T>(\n  context: TransactionContext,\n  callback: (span: Span | undefined, finish: () => void) => T,\n): T {\n  const ctx = normalizeContext(context);\n\n  const hub = getCurrentHub();\n  const scope = hub.getScope();\n  const parentSpan = scope.getSpan();\n\n  const activeSpan = createChildSpanOrTransaction(hub, parentSpan, ctx);\n  scope.setSpan(activeSpan);\n\n  function finishAndSetSpan(): void {\n    activeSpan && activeSpan.finish();\n    hub.getScope().setSpan(parentSpan);\n  }\n\n  let maybePromiseResult: T;\n  try {\n    maybePromiseResult = callback(activeSpan, finishAndSetSpan);\n  } catch (e) {\n    activeSpan && activeSpan.setStatus('internal_error');\n    throw e;\n  }\n\n  if (isThenable(maybePromiseResult)) {\n    Promise.resolve(maybePromiseResult).then(undefined, () => {\n      activeSpan && activeSpan.setStatus('internal_error');\n    });\n  }\n\n  return maybePromiseResult;\n}\n\n/**\n * Creates a span. This span is not set as active, so will not get automatic instrumentation spans\n * as children or be able to be accessed via `Sentry.getSpan()`.\n *\n * If you want to create a span that is set as active, use {@link startSpan}.\n *\n * Note that if you have not enabled tracing extensions via `addTracingExtensions`\n * or you didn't set `tracesSampleRate` or `tracesSampler`, this function will not generate spans\n * and the `span` returned from the callback will be undefined.\n */\nexport function startInactiveSpan(context: TransactionContext): Span | undefined {\n  if (!hasTracingEnabled()) {\n    return undefined;\n  }\n\n  const ctx = { ...context };\n  // If a name is set and a description is not, set the description to the name.\n  if (ctx.name !== undefined && ctx.description === undefined) {\n    ctx.description = ctx.name;\n  }\n\n  const hub = getCurrentHub();\n  const parentSpan = getActiveSpan();\n  return parentSpan ? parentSpan.startChild(ctx) : hub.startTransaction(ctx);\n}\n\n/**\n * Returns the currently active span.\n */\nexport function getActiveSpan(): Span | undefined {\n  return getCurrentHub().getScope().getSpan();\n}\n\n/**\n * Continue a trace from `sentry-trace` and `baggage` values.\n * These values can be obtained from incoming request headers,\n * or in the browser from `<meta name=\"sentry-trace\">` and `<meta name=\"baggage\">` HTML tags.\n *\n * It also takes an optional `request` option, which if provided will also be added to the scope & transaction metadata.\n * The callback receives a transactionContext that may be used for `startTransaction` or `startSpan`.\n */\nexport function continueTrace<V>(\n  {\n    sentryTrace,\n    baggage,\n  }: {\n    sentryTrace: Parameters<typeof tracingContextFromHeaders>[0];\n    baggage: Parameters<typeof tracingContextFromHeaders>[1];\n  },\n  callback: (transactionContext: Partial<TransactionContext>) => V,\n): V {\n  const hub = getCurrentHub();\n  const currentScope = hub.getScope();\n\n  const { traceparentData, dynamicSamplingContext, propagationContext } = tracingContextFromHeaders(\n    sentryTrace,\n    baggage,\n  );\n\n  currentScope.setPropagationContext(propagationContext);\n\n  if (__DEBUG_BUILD__ && traceparentData) {\n    logger.log(`[Tracing] Continuing trace ${traceparentData.traceId}.`);\n  }\n\n  const transactionContext: Partial<TransactionContext> = {\n    ...traceparentData,\n    metadata: dropUndefinedKeys({\n      dynamicSamplingContext: traceparentData && !dynamicSamplingContext ? {} : dynamicSamplingContext,\n    }),\n  };\n\n  return callback(transactionContext);\n}\n\nfunction createChildSpanOrTransaction(\n  hub: Hub,\n  parentSpan: Span | undefined,\n  ctx: TransactionContext,\n): Span | undefined {\n  if (!hasTracingEnabled()) {\n    return undefined;\n  }\n  return parentSpan ? parentSpan.startChild(ctx) : hub.startTransaction(ctx);\n}\n\nfunction normalizeContext(context: TransactionContext): TransactionContext {\n  const ctx = { ...context };\n  // If a name is set and a description is not, set the description to the name.\n  if (ctx.name !== undefined && ctx.description === undefined) {\n    ctx.description = ctx.name;\n  }\n\n  return ctx;\n}\n","import type {\n  BaseTransportOptions,\n  Envelope,\n  EnvelopeItemType,\n  Event,\n  EventItem,\n  Transport,\n  TransportMakeRequestResponse,\n} from '@sentry/types';\nimport { dsnFromString, forEachEnvelopeItem } from '@sentry/utils';\n\nimport { getEnvelopeEndpointWithUrlEncodedAuth } from '../api';\n\ninterface MatchParam {\n  /** The envelope to be sent */\n  envelope: Envelope;\n  /**\n   * A function that returns an event from the envelope if one exists. You can optionally pass an array of envelope item\n   * types to filter by - only envelopes matching the given types will be multiplexed.\n   * Allowed values are: 'event', 'transaction', 'profile', 'replay_event'\n   *\n   * @param types Defaults to ['event']\n   */\n  getEvent(types?: EnvelopeItemType[]): Event | undefined;\n}\n\ntype RouteTo = { dsn: string; release: string };\ntype Matcher = (param: MatchParam) => (string | RouteTo)[];\n\n/**\n * Gets an event from an envelope.\n *\n * This is only exported for use in the tests\n */\nexport function eventFromEnvelope(env: Envelope, types: EnvelopeItemType[]): Event | undefined {\n  let event: Event | undefined;\n\n  forEachEnvelopeItem(env, (item, type) => {\n    if (types.includes(type)) {\n      event = Array.isArray(item) ? (item as EventItem)[1] : undefined;\n    }\n    // bail out if we found an event\n    return !!event;\n  });\n\n  return event;\n}\n\n/**\n * Creates a transport that overrides the release on all events.\n */\nfunction makeOverrideReleaseTransport<TO extends BaseTransportOptions>(\n  createTransport: (options: TO) => Transport,\n  release: string,\n): (options: TO) => Transport {\n  return options => {\n    const transport = createTransport(options);\n\n    return {\n      send: async (envelope: Envelope): Promise<void | TransportMakeRequestResponse> => {\n        const event = eventFromEnvelope(envelope, ['event', 'transaction', 'profile', 'replay_event']);\n\n        if (event) {\n          event.release = release;\n        }\n        return transport.send(envelope);\n      },\n      flush: timeout => transport.flush(timeout),\n    };\n  };\n}\n\n/**\n * Creates a transport that can send events to different DSNs depending on the envelope contents.\n */\nexport function makeMultiplexedTransport<TO extends BaseTransportOptions>(\n  createTransport: (options: TO) => Transport,\n  matcher: Matcher,\n): (options: TO) => Transport {\n  return options => {\n    const fallbackTransport = createTransport(options);\n    const otherTransports: Record<string, Transport> = {};\n\n    function getTransport(dsn: string, release: string | undefined): Transport | undefined {\n      // We create a transport for every unique dsn/release combination as there may be code from multiple releases in\n      // use at the same time\n      const key = release ? `${dsn}:${release}` : dsn;\n\n      if (!otherTransports[key]) {\n        const validatedDsn = dsnFromString(dsn);\n        if (!validatedDsn) {\n          return undefined;\n        }\n        const url = getEnvelopeEndpointWithUrlEncodedAuth(validatedDsn);\n\n        otherTransports[key] = release\n          ? makeOverrideReleaseTransport(createTransport, release)({ ...options, url })\n          : createTransport({ ...options, url });\n      }\n\n      return otherTransports[key];\n    }\n\n    async function send(envelope: Envelope): Promise<void | TransportMakeRequestResponse> {\n      function getEvent(types?: EnvelopeItemType[]): Event | undefined {\n        const eventTypes: EnvelopeItemType[] = types && types.length ? types : ['event'];\n        return eventFromEnvelope(envelope, eventTypes);\n      }\n\n      const transports = matcher({ envelope, getEvent })\n        .map(result => {\n          if (typeof result === 'string') {\n            return getTransport(result, undefined);\n          } else {\n            return getTransport(result.dsn, result.release);\n          }\n        })\n        .filter((t): t is Transport => !!t);\n\n      // If we have no transports to send to, use the fallback transport\n      if (transports.length === 0) {\n        transports.push(fallbackTransport);\n      }\n\n      const results = await Promise.all(transports.map(transport => transport.send(envelope)));\n\n      return results[0];\n    }\n\n    async function flush(timeout: number | undefined): Promise<boolean> {\n      const allTransports = [...Object.keys(otherTransports).map(dsn => otherTransports[dsn]), fallbackTransport];\n      const results = await Promise.all(allTransports.map(transport => transport.flush(timeout)));\n      return results.every(r => r);\n    }\n\n    return {\n      send,\n      flush,\n    };\n  };\n}\n","import type { MeasurementUnit } from '@sentry/types';\n\nimport { getActiveTransaction } from './utils';\n\n/**\n * Adds a measurement to the current active transaction.\n */\nexport function setMeasurement(name: string, value: number, unit: MeasurementUnit): void {\n  const transaction = getActiveTransaction();\n  if (transaction) {\n    transaction.setMeasurement(name, value, unit);\n  }\n}\n","import { isNodeEnv } from './node';\nimport { GLOBAL_OBJ } from './worldwide';\n\n/**\n * Returns true if we are in the browser.\n */\nexport function isBrowser(): boolean {\n  // eslint-disable-next-line no-restricted-globals\n  return typeof window !== 'undefined' && (!isNodeEnv() || isElectronNodeRenderer());\n}\n\ntype ElectronProcess = { type?: string };\n\n// Electron renderers with nodeIntegration enabled are detected as Node.js so we specifically test for them\nfunction isElectronNodeRenderer(): boolean {\n  return (\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n    (GLOBAL_OBJ as any).process !== undefined && ((GLOBAL_OBJ as any).process as ElectronProcess).type === 'renderer'\n  );\n}\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Metric, ReportCallback } from '../types';\n\nexport const bindReporter = (\n  callback: ReportCallback,\n  metric: Metric,\n  reportAllChanges?: boolean,\n): ((forceReport?: boolean) => void) => {\n  let prevValue: number;\n  let delta: number;\n  return (forceReport?: boolean) => {\n    if (metric.value >= 0) {\n      if (forceReport || reportAllChanges) {\n        delta = metric.value - (prevValue || 0);\n\n        // Report the metric if there's a non-zero delta or if no previous\n        // value exists (which can happen in the case of the document becoming\n        // hidden when the metric value is 0).\n        // See: https://github.com/GoogleChrome/web-vitals/issues/14\n        if (delta || prevValue === undefined) {\n          prevValue = metric.value;\n          metric.delta = delta;\n          callback(metric);\n        }\n      }\n    }\n  };\n};\n","import { GLOBAL_OBJ } from '@sentry/utils';\n\nexport const WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../types';\nimport type { NavigationTimingPolyfillEntry } from '../types';\n\nconst getNavigationEntryFromPerformanceTiming = (): NavigationTimingPolyfillEntry => {\n  // eslint-disable-next-line deprecation/deprecation\n  const timing = WINDOW.performance.timing;\n  // eslint-disable-next-line deprecation/deprecation\n  const type = WINDOW.performance.navigation.type;\n\n  const navigationEntry: { [key: string]: number | string } = {\n    entryType: 'navigation',\n    startTime: 0,\n    type: type == 2 ? 'back_forward' : type === 1 ? 'reload' : 'navigate',\n  };\n\n  for (const key in timing) {\n    if (key !== 'navigationStart' && key !== 'toJSON') {\n      // eslint-disable-next-line deprecation/deprecation\n      navigationEntry[key] = Math.max((timing[key as keyof PerformanceTiming] as number) - timing.navigationStart, 0);\n    }\n  }\n  return navigationEntry as unknown as NavigationTimingPolyfillEntry;\n};\n\nexport const getNavigationEntry = (): PerformanceNavigationTiming | NavigationTimingPolyfillEntry | undefined => {\n  if (WINDOW.__WEB_VITALS_POLYFILL__) {\n    return (\n      WINDOW.performance &&\n      ((performance.getEntriesByType && performance.getEntriesByType('navigation')[0]) ||\n        getNavigationEntryFromPerformanceTiming())\n    );\n  } else {\n    return WINDOW.performance && performance.getEntriesByType && performance.getEntriesByType('navigation')[0];\n  }\n};\n","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getNavigationEntry } from './getNavigationEntry';\n\nexport const getActivationStart = (): number => {\n  const navEntry = getNavigationEntry();\n  return (navEntry && navEntry.activationStart) || 0;\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../types';\nimport type { Metric } from '../types';\nimport { generateUniqueID } from './generateUniqueID';\nimport { getActivationStart } from './getActivationStart';\nimport { getNavigationEntry } from './getNavigationEntry';\n\nexport const initMetric = (name: Metric['name'], value?: number): Metric => {\n  const navEntry = getNavigationEntry();\n  let navigationType: Metric['navigationType'] = 'navigate';\n\n  if (navEntry) {\n    if (WINDOW.document.prerendering || getActivationStart() > 0) {\n      navigationType = 'prerender';\n    } else {\n      navigationType = navEntry.type.replace(/_/g, '-') as Metric['navigationType'];\n    }\n  }\n\n  return {\n    name,\n    value: typeof value === 'undefined' ? -1 : value,\n    rating: 'good', // Will be updated if the value changes.\n    delta: 0,\n    entries: [],\n    id: generateUniqueID(),\n    navigationType,\n  };\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Performantly generate a unique, 30-char string by combining a version\n * number, the current timestamp with a 13-digit number integer.\n * @return {string}\n */\nexport const generateUniqueID = (): string => {\n  return `v3-${Date.now()}-${Math.floor(Math.random() * (9e12 - 1)) + 1e12}`;\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { FirstInputPolyfillEntry, NavigationTimingPolyfillEntry, PerformancePaintTiming } from '../types';\n\nexport interface PerformanceEntryHandler {\n  (entry: PerformanceEntry): void;\n}\n\ninterface PerformanceEntryMap {\n  event: PerformanceEventTiming[];\n  paint: PerformancePaintTiming[];\n  'layout-shift': LayoutShift[];\n  'largest-contentful-paint': LargestContentfulPaint[];\n  'first-input': PerformanceEventTiming[] | FirstInputPolyfillEntry[];\n  navigation: PerformanceNavigationTiming[] | NavigationTimingPolyfillEntry[];\n  resource: PerformanceResourceTiming[];\n  longtask: PerformanceEntry[];\n}\n\n/**\n * Takes a performance entry type and a callback function, and creates a\n * `PerformanceObserver` instance that will observe the specified entry type\n * with buffering enabled and call the callback _for each entry_.\n *\n * This function also feature-detects entry support and wraps the logic in a\n * try/catch to avoid errors in unsupporting browsers.\n */\nexport const observe = <K extends keyof PerformanceEntryMap>(\n  type: K,\n  callback: (entries: PerformanceEntryMap[K]) => void,\n  opts?: PerformanceObserverInit,\n): PerformanceObserver | undefined => {\n  try {\n    if (PerformanceObserver.supportedEntryTypes.includes(type)) {\n      const po = new PerformanceObserver(list => {\n        callback(list.getEntries() as PerformanceEntryMap[K]);\n      });\n      po.observe(\n        Object.assign(\n          {\n            type,\n            buffered: true,\n          },\n          opts || {},\n        ) as PerformanceObserverInit,\n      );\n      return po;\n    }\n  } catch (e) {\n    // Do nothing.\n  }\n  return;\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../types';\n\nexport interface OnHiddenCallback {\n  (event: Event): void;\n}\n\nexport const onHidden = (cb: OnHiddenCallback, once?: boolean): void => {\n  const onHiddenOrPageHide = (event: Event): void => {\n    if (event.type === 'pagehide' || WINDOW.document.visibilityState === 'hidden') {\n      cb(event);\n      if (once) {\n        removeEventListener('visibilitychange', onHiddenOrPageHide, true);\n        removeEventListener('pagehide', onHiddenOrPageHide, true);\n      }\n    }\n  };\n  addEventListener('visibilitychange', onHiddenOrPageHide, true);\n  // Some browsers have buggy implementations of visibilitychange,\n  // so we use pagehide in addition, just to be safe.\n  addEventListener('pagehide', onHiddenOrPageHide, true);\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../types';\nimport { onHidden } from './onHidden';\n\nlet firstHiddenTime = -1;\n\nconst initHiddenTime = (): number => {\n  // If the document is hidden and not prerendering, assume it was always\n  // hidden and the page was loaded in the background.\n  return WINDOW.document.visibilityState === 'hidden' && !WINDOW.document.prerendering ? 0 : Infinity;\n};\n\nconst trackChanges = (): void => {\n  // Update the time if/when the document becomes hidden.\n  onHidden(({ timeStamp }) => {\n    firstHiddenTime = timeStamp;\n  }, true);\n};\n\nexport const getVisibilityWatcher = (): {\n  readonly firstHiddenTime: number;\n} => {\n  if (firstHiddenTime < 0) {\n    // If the document is hidden when this code runs, assume it was hidden\n    // since navigation start. This isn't a perfect heuristic, but it's the\n    // best we can do until an API is available to support querying past\n    // visibilityState.\n    firstHiddenTime = initHiddenTime();\n    trackChanges();\n  }\n  return {\n    get firstHiddenTime() {\n      return firstHiddenTime;\n    },\n  };\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { bindReporter } from './lib/bindReporter';\nimport { getActivationStart } from './lib/getActivationStart';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport type { LCPMetric, ReportCallback, StopListening } from './types';\n\nconst reportedMetricIDs: Record<string, boolean> = {};\n\n/**\n * Calculates the [LCP](https://web.dev/lcp/) value for the current page and\n * calls the `callback` function once the value is ready (along with the\n * relevant `largest-contentful-paint` performance entry used to determine the\n * value). The reported value is a `DOMHighResTimeStamp`.\n */\nexport const onLCP = (onReport: ReportCallback): StopListening | undefined => {\n  const visibilityWatcher = getVisibilityWatcher();\n  const metric = initMetric('LCP');\n  let report: ReturnType<typeof bindReporter>;\n\n  const handleEntries = (entries: LCPMetric['entries']): void => {\n    const lastEntry = entries[entries.length - 1] as LargestContentfulPaint;\n    if (lastEntry) {\n      // The startTime attribute returns the value of the renderTime if it is\n      // not 0, and the value of the loadTime otherwise. The activationStart\n      // reference is used because LCP should be relative to page activation\n      // rather than navigation start if the page was prerendered.\n      const value = Math.max(lastEntry.startTime - getActivationStart(), 0);\n\n      // Only report if the page wasn't hidden prior to LCP.\n      if (value < visibilityWatcher.firstHiddenTime) {\n        metric.value = value;\n        metric.entries = [lastEntry];\n        report();\n      }\n    }\n  };\n\n  const po = observe('largest-contentful-paint', handleEntries);\n\n  if (po) {\n    report = bindReporter(onReport, metric);\n\n    const stopListening = (): void => {\n      if (!reportedMetricIDs[metric.id]) {\n        handleEntries(po.takeRecords() as LCPMetric['entries']);\n        po.disconnect();\n        reportedMetricIDs[metric.id] = true;\n        report(true);\n      }\n    };\n\n    // Stop listening after input. Note: while scrolling is an input that\n    // stop LCP observation, it's unreliable since it can be programmatically\n    // generated. See: https://github.com/GoogleChrome/web-vitals/issues/75\n    ['keydown', 'click'].forEach(type => {\n      addEventListener(type, stopListening, { once: true, capture: true });\n    });\n\n    onHidden(stopListening, true);\n\n    return stopListening;\n  }\n\n  return;\n};\n","import { getFunctionName, logger } from '@sentry/utils';\n\nimport { onCLS } from './web-vitals/getCLS';\nimport { onFID } from './web-vitals/getFID';\nimport { onLCP } from './web-vitals/getLCP';\nimport { observe } from './web-vitals/lib/observe';\n\ntype InstrumentHandlerTypePerformanceObserver = 'longtask' | 'event' | 'navigation' | 'paint' | 'resource';\n\ntype InstrumentHandlerTypeMetric = 'cls' | 'lcp' | 'fid';\n\n// We provide this here manually instead of relying on a global, as this is not available in non-browser environements\n// And we do not want to expose such types\ninterface PerformanceEntry {\n  readonly duration: number;\n  readonly entryType: string;\n  readonly name: string;\n  readonly startTime: number;\n  toJSON(): Record<string, unknown>;\n}\n\ninterface Metric {\n  /**\n   * The name of the metric (in acronym form).\n   */\n  name: 'CLS' | 'FCP' | 'FID' | 'INP' | 'LCP' | 'TTFB';\n\n  /**\n   * The current value of the metric.\n   */\n  value: number;\n\n  /**\n   * The rating as to whether the metric value is within the \"good\",\n   * \"needs improvement\", or \"poor\" thresholds of the metric.\n   */\n  rating: 'good' | 'needs-improvement' | 'poor';\n\n  /**\n   * The delta between the current value and the last-reported value.\n   * On the first report, `delta` and `value` will always be the same.\n   */\n  delta: number;\n\n  /**\n   * A unique ID representing this particular metric instance. This ID can\n   * be used by an analytics tool to dedupe multiple values sent for the same\n   * metric instance, or to group multiple deltas together and calculate a\n   * total. It can also be used to differentiate multiple different metric\n   * instances sent from the same page, which can happen if the page is\n   * restored from the back/forward cache (in that case new metrics object\n   * get created).\n   */\n  id: string;\n\n  /**\n   * Any performance entries relevant to the metric value calculation.\n   * The array may also be empty if the metric value was not based on any\n   * entries (e.g. a CLS value of 0 given no layout shifts).\n   */\n  entries: PerformanceEntry[];\n\n  /**\n   * The type of navigation\n   *\n   * Navigation Timing API (or `undefined` if the browser doesn't\n   * support that API). For pages that are restored from the bfcache, this\n   * value will be 'back-forward-cache'.\n   */\n  navigationType: 'navigate' | 'reload' | 'back-forward' | 'back-forward-cache' | 'prerender';\n}\n\ntype InstrumentHandlerType = InstrumentHandlerTypeMetric | InstrumentHandlerTypePerformanceObserver;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype InstrumentHandlerCallback = (data: any) => void;\n\ntype CleanupHandlerCallback = () => void;\n\nconst handlers: { [key in InstrumentHandlerType]?: InstrumentHandlerCallback[] } = {};\nconst instrumented: { [key in InstrumentHandlerType]?: boolean } = {};\n\nlet _previousCls: Metric | undefined;\nlet _previousFid: Metric | undefined;\nlet _previousLcp: Metric | undefined;\n\n/**\n * Add a callback that will be triggered when a CLS metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nexport function addClsInstrumentationHandler(callback: (data: { metric: Metric }) => void): CleanupHandlerCallback {\n  return addMetricObserver('cls', callback, instrumentCls, _previousCls);\n}\n\n/**\n * Add a callback that will be triggered when a LCP metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nexport function addLcpInstrumentationHandler(callback: (data: { metric: Metric }) => void): CleanupHandlerCallback {\n  return addMetricObserver('lcp', callback, instrumentLcp, _previousLcp);\n}\n\n/**\n * Add a callback that will be triggered when a FID metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nexport function addFidInstrumentationHandler(callback: (data: { metric: Metric }) => void): CleanupHandlerCallback {\n  return addMetricObserver('fid', callback, instrumentFid, _previousFid);\n}\n\nexport function addPerformanceInstrumentationHandler(\n  type: 'event',\n  callback: (data: { entries: (PerformanceEntry & { target?: unknown | null })[] }) => void,\n): CleanupHandlerCallback;\nexport function addPerformanceInstrumentationHandler(\n  type: InstrumentHandlerTypePerformanceObserver,\n  callback: (data: { entries: PerformanceEntry[] }) => void,\n): CleanupHandlerCallback;\n\n/**\n * Add a callback that will be triggered when a performance observer is triggered,\n * and receives the entries of the observer.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nexport function addPerformanceInstrumentationHandler(\n  type: InstrumentHandlerTypePerformanceObserver,\n  callback: (data: { entries: PerformanceEntry[] }) => void,\n): CleanupHandlerCallback {\n  addHandler(type, callback);\n\n  if (!instrumented[type]) {\n    instrumentPerformanceObserver(type);\n    instrumented[type] = true;\n  }\n\n  return getCleanupCallback(type, callback);\n}\n\n/** Trigger all handlers of a given type. */\nfunction triggerHandlers(type: InstrumentHandlerType, data: unknown): void {\n  const typeHandlers = handlers[type];\n\n  if (!typeHandlers || !typeHandlers.length) {\n    return;\n  }\n\n  for (const handler of typeHandlers) {\n    try {\n      handler(data);\n    } catch (e) {\n      __DEBUG_BUILD__ &&\n        logger.error(\n          `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n          e,\n        );\n    }\n  }\n}\n\nfunction instrumentCls(): void {\n  onCLS(metric => {\n    triggerHandlers('cls', {\n      metric,\n    });\n    _previousCls = metric;\n  });\n}\n\nfunction instrumentFid(): void {\n  onFID(metric => {\n    triggerHandlers('fid', {\n      metric,\n    });\n    _previousFid = metric;\n  });\n}\n\nfunction instrumentLcp(): void {\n  onLCP(metric => {\n    triggerHandlers('lcp', {\n      metric,\n    });\n    _previousLcp = metric;\n  });\n}\n\nfunction addMetricObserver(\n  type: InstrumentHandlerTypeMetric,\n  callback: InstrumentHandlerCallback,\n  instrumentFn: () => void,\n  previousValue: Metric | undefined,\n): CleanupHandlerCallback {\n  addHandler(type, callback);\n\n  if (!instrumented[type]) {\n    instrumentFn();\n    instrumented[type] = true;\n  }\n\n  if (previousValue) {\n    callback({ metric: previousValue });\n  }\n\n  return getCleanupCallback(type, callback);\n}\n\nfunction instrumentPerformanceObserver(type: InstrumentHandlerTypePerformanceObserver): void {\n  const options: PerformanceObserverInit = {};\n\n  // Special per-type options we want to use\n  if (type === 'event') {\n    options.durationThreshold = 0;\n  }\n\n  observe(\n    type,\n    entries => {\n      triggerHandlers(type, { entries });\n    },\n    options,\n  );\n}\n\nfunction addHandler(type: InstrumentHandlerType, handler: InstrumentHandlerCallback): void {\n  handlers[type] = handlers[type] || [];\n  (handlers[type] as InstrumentHandlerCallback[]).push(handler);\n}\n\n// Get a callback which can be called to remove the instrumentation handler\nfunction getCleanupCallback(type: InstrumentHandlerType, callback: InstrumentHandlerCallback): CleanupHandlerCallback {\n  return () => {\n    const typeHandlers = handlers[type];\n\n    if (!typeHandlers) {\n      return;\n    }\n\n    const index = typeHandlers.indexOf(callback);\n    if (index !== -1) {\n      typeHandlers.splice(index, 1);\n    }\n  };\n}\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { bindReporter } from './lib/bindReporter';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport type { CLSMetric, ReportCallback, StopListening } from './types';\n\n/**\n * Calculates the [CLS](https://web.dev/cls/) value for the current page and\n * calls the `callback` function once the value is ready to be reported, along\n * with all `layout-shift` performance entries that were used in the metric\n * value calculation. The reported value is a `double` (corresponding to a\n * [layout shift score](https://web.dev/cls/#layout-shift-score)).\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** CLS should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it's been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nexport const onCLS = (onReport: ReportCallback): StopListening | undefined => {\n  const metric = initMetric('CLS', 0);\n  let report: ReturnType<typeof bindReporter>;\n\n  let sessionValue = 0;\n  let sessionEntries: PerformanceEntry[] = [];\n\n  // const handleEntries = (entries: Metric['entries']) => {\n  const handleEntries = (entries: LayoutShift[]): void => {\n    entries.forEach(entry => {\n      // Only count layout shifts without recent user input.\n      if (!entry.hadRecentInput) {\n        const firstSessionEntry = sessionEntries[0];\n        const lastSessionEntry = sessionEntries[sessionEntries.length - 1];\n\n        // If the entry occurred less than 1 second after the previous entry and\n        // less than 5 seconds after the first entry in the session, include the\n        // entry in the current session. Otherwise, start a new session.\n        if (\n          sessionValue &&\n          sessionEntries.length !== 0 &&\n          entry.startTime - lastSessionEntry.startTime < 1000 &&\n          entry.startTime - firstSessionEntry.startTime < 5000\n        ) {\n          sessionValue += entry.value;\n          sessionEntries.push(entry);\n        } else {\n          sessionValue = entry.value;\n          sessionEntries = [entry];\n        }\n\n        // If the current session value is larger than the current CLS value,\n        // update CLS and the entries contributing to it.\n        if (sessionValue > metric.value) {\n          metric.value = sessionValue;\n          metric.entries = sessionEntries;\n          if (report) {\n            report();\n          }\n        }\n      }\n    });\n  };\n\n  const po = observe('layout-shift', handleEntries);\n  if (po) {\n    report = bindReporter(onReport, metric);\n\n    const stopListening = (): void => {\n      handleEntries(po.takeRecords() as CLSMetric['entries']);\n      report(true);\n    };\n\n    onHidden(stopListening);\n\n    return stopListening;\n  }\n\n  return;\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { bindReporter } from './lib/bindReporter';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport type { FIDMetric, PerformanceEventTiming, ReportCallback } from './types';\n\n/**\n * Calculates the [FID](https://web.dev/fid/) value for the current page and\n * calls the `callback` function once the value is ready, along with the\n * relevant `first-input` performance entry used to determine the value. The\n * reported value is a `DOMHighResTimeStamp`.\n *\n * _**Important:** since FID is only reported after the user interacts with the\n * page, it's possible that it will not be reported for some page loads._\n */\nexport const onFID = (onReport: ReportCallback): void => {\n  const visibilityWatcher = getVisibilityWatcher();\n  const metric = initMetric('FID');\n  // eslint-disable-next-line prefer-const\n  let report: ReturnType<typeof bindReporter>;\n\n  const handleEntry = (entry: PerformanceEventTiming): void => {\n    // Only report if the page wasn't hidden prior to the first input.\n    if (entry.startTime < visibilityWatcher.firstHiddenTime) {\n      metric.value = entry.processingStart - entry.startTime;\n      metric.entries.push(entry);\n      report(true);\n    }\n  };\n\n  const handleEntries = (entries: FIDMetric['entries']): void => {\n    (entries as PerformanceEventTiming[]).forEach(handleEntry);\n  };\n\n  const po = observe('first-input', handleEntries);\n  report = bindReporter(onReport, metric);\n\n  if (po) {\n    onHidden(() => {\n      handleEntries(po.takeRecords() as FIDMetric['entries']);\n      po.disconnect();\n    }, true);\n  }\n};\n","import { GLOBAL_OBJ } from '@sentry/utils';\n\n// exporting a separate copy of `WINDOW` rather than exporting the one from `@sentry/browser`\n// prevents the browser package from being bundled in the CDN bundle, and avoids a\n// circular dependency between the browser and replay packages should `@sentry/browser` import\n// from `@sentry/replay` in the future\nexport const WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n\nexport const REPLAY_SESSION_KEY = 'sentryReplaySession';\nexport const REPLAY_EVENT_NAME = 'replay_event';\nexport const RECORDING_EVENT_NAME = 'replay_recording';\nexport const UNABLE_TO_SEND_REPLAY = 'Unable to send Replay';\n\n// The idle limit for a session after which recording is paused.\nexport const SESSION_IDLE_PAUSE_DURATION = 300_000; // 5 minutes in ms\n\n// The idle limit for a session after which the session expires.\nexport const SESSION_IDLE_EXPIRE_DURATION = 900_000; // 15 minutes in ms\n\n/** Default flush delays */\nexport const DEFAULT_FLUSH_MIN_DELAY = 5_000;\n// XXX: Temp fix for our debounce logic where `maxWait` would never occur if it\n// was the same as `wait`\nexport const DEFAULT_FLUSH_MAX_DELAY = 5_500;\n\n/* How long to wait for error checkouts */\nexport const BUFFER_CHECKOUT_TIME = 60_000;\n\nexport const RETRY_BASE_INTERVAL = 5000;\nexport const RETRY_MAX_COUNT = 3;\n\n/* The max (uncompressed) size in bytes of a network body. Any body larger than this will be truncated. */\nexport const NETWORK_BODY_MAX_SIZE = 150_000;\n\n/* The max size of a single console arg that is captured. Any arg larger than this will be truncated. */\nexport const CONSOLE_ARG_MAX_SIZE = 5_000;\n\n/* Min. time to wait before we consider something a slow click. */\nexport const SLOW_CLICK_THRESHOLD = 3_000;\n/* For scroll actions after a click, we only look for a very short time period to detect programmatic scrolling. */\nexport const SLOW_CLICK_SCROLL_TIMEOUT = 300;\n\n/** When encountering a total segment size exceeding this size, stop the replay (as we cannot properly ingest it). */\nexport const REPLAY_MAX_EVENT_BUFFER_SIZE = 20_000_000; // ~20MB\n\n/** Replays must be min. 5s long before we send them. */\nexport const MIN_REPLAY_DURATION = 4_999;\n/* The max. allowed value that the minReplayDuration can be set to. */\nexport const MIN_REPLAY_DURATION_LIMIT = 15_000;\n\n/** The max. length of a replay. */\nexport const MAX_REPLAY_DURATION = 3_600_000; // 60 minutes in ms;\n\n/** Default attributes to be ignored when `maskAllText` is enabled */\nexport const DEFAULT_IGNORED_ATTRIBUTES = ['title', 'placeholder'];\n","var NodeType;\r\n(function (NodeType) {\r\n    NodeType[NodeType[\"Document\"] = 0] = \"Document\";\r\n    NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\r\n    NodeType[NodeType[\"Element\"] = 2] = \"Element\";\r\n    NodeType[NodeType[\"Text\"] = 3] = \"Text\";\r\n    NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\r\n    NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\r\n})(NodeType || (NodeType = {}));\n\nfunction isElement(n) {\r\n    return n.nodeType === n.ELEMENT_NODE;\r\n}\r\nfunction isShadowRoot(n) {\r\n    const host = n === null || n === void 0 ? void 0 : n.host;\r\n    return Boolean((host === null || host === void 0 ? void 0 : host.shadowRoot) === n);\r\n}\r\nfunction isNativeShadowDom(shadowRoot) {\r\n    return Object.prototype.toString.call(shadowRoot) === '[object ShadowRoot]';\r\n}\r\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\r\n    if (cssText.includes(' background-clip: text;') &&\r\n        !cssText.includes(' -webkit-background-clip: text;')) {\r\n        cssText = cssText.replace(' background-clip: text;', ' -webkit-background-clip: text; background-clip: text;');\r\n    }\r\n    return cssText;\r\n}\r\nfunction escapeImportStatement(rule) {\r\n    const { cssText } = rule;\r\n    if (cssText.split('\"').length < 3)\r\n        return cssText;\r\n    const statement = ['@import', `url(${JSON.stringify(rule.href)})`];\r\n    if (rule.layerName === '') {\r\n        statement.push(`layer`);\r\n    }\r\n    else if (rule.layerName) {\r\n        statement.push(`layer(${rule.layerName})`);\r\n    }\r\n    if (rule.supportsText) {\r\n        statement.push(`supports(${rule.supportsText})`);\r\n    }\r\n    if (rule.media.length) {\r\n        statement.push(rule.media.mediaText);\r\n    }\r\n    return statement.join(' ') + ';';\r\n}\r\nfunction stringifyStylesheet(s) {\r\n    try {\r\n        const rules = s.rules || s.cssRules;\r\n        return rules\r\n            ? fixBrowserCompatibilityIssuesInCSS(Array.from(rules, stringifyRule).join(''))\r\n            : null;\r\n    }\r\n    catch (error) {\r\n        return null;\r\n    }\r\n}\r\nfunction stringifyRule(rule) {\r\n    let importStringified;\r\n    if (isCSSImportRule(rule)) {\r\n        try {\r\n            importStringified =\r\n                stringifyStylesheet(rule.styleSheet) ||\r\n                    escapeImportStatement(rule);\r\n        }\r\n        catch (error) {\r\n        }\r\n    }\r\n    else if (isCSSStyleRule(rule) && rule.selectorText.includes(':')) {\r\n        return fixSafariColons(rule.cssText);\r\n    }\r\n    return importStringified || rule.cssText;\r\n}\r\nfunction fixSafariColons(cssStringified) {\r\n    const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\r\n    return cssStringified.replace(regex, '$1\\\\$2');\r\n}\r\nfunction isCSSImportRule(rule) {\r\n    return 'styleSheet' in rule;\r\n}\r\nfunction isCSSStyleRule(rule) {\r\n    return 'selectorText' in rule;\r\n}\r\nclass Mirror {\r\n    constructor() {\r\n        this.idNodeMap = new Map();\r\n        this.nodeMetaMap = new WeakMap();\r\n    }\r\n    getId(n) {\r\n        var _a;\r\n        if (!n)\r\n            return -1;\r\n        const id = (_a = this.getMeta(n)) === null || _a === void 0 ? void 0 : _a.id;\r\n        return id !== null && id !== void 0 ? id : -1;\r\n    }\r\n    getNode(id) {\r\n        return this.idNodeMap.get(id) || null;\r\n    }\r\n    getIds() {\r\n        return Array.from(this.idNodeMap.keys());\r\n    }\r\n    getMeta(n) {\r\n        return this.nodeMetaMap.get(n) || null;\r\n    }\r\n    removeNodeFromMap(n) {\r\n        const id = this.getId(n);\r\n        this.idNodeMap.delete(id);\r\n        if (n.childNodes) {\r\n            n.childNodes.forEach((childNode) => this.removeNodeFromMap(childNode));\r\n        }\r\n    }\r\n    has(id) {\r\n        return this.idNodeMap.has(id);\r\n    }\r\n    hasNode(node) {\r\n        return this.nodeMetaMap.has(node);\r\n    }\r\n    add(n, meta) {\r\n        const id = meta.id;\r\n        this.idNodeMap.set(id, n);\r\n        this.nodeMetaMap.set(n, meta);\r\n    }\r\n    replace(id, n) {\r\n        const oldNode = this.getNode(id);\r\n        if (oldNode) {\r\n            const meta = this.nodeMetaMap.get(oldNode);\r\n            if (meta)\r\n                this.nodeMetaMap.set(n, meta);\r\n        }\r\n        this.idNodeMap.set(id, n);\r\n    }\r\n    reset() {\r\n        this.idNodeMap = new Map();\r\n        this.nodeMetaMap = new WeakMap();\r\n    }\r\n}\r\nfunction createMirror() {\r\n    return new Mirror();\r\n}\r\nfunction shouldMaskInput({ maskInputOptions, tagName, type, }) {\r\n    if (tagName === 'OPTION') {\r\n        tagName = 'SELECT';\r\n    }\r\n    return Boolean(maskInputOptions[tagName.toLowerCase()] ||\r\n        (type && maskInputOptions[type]) ||\r\n        type === 'password' ||\r\n        (tagName === 'INPUT' && !type && maskInputOptions['text']));\r\n}\r\nfunction maskInputValue({ isMasked, element, value, maskInputFn, }) {\r\n    let text = value || '';\r\n    if (!isMasked) {\r\n        return text;\r\n    }\r\n    if (maskInputFn) {\r\n        text = maskInputFn(text, element);\r\n    }\r\n    return '*'.repeat(text.length);\r\n}\r\nfunction toLowerCase(str) {\r\n    return str.toLowerCase();\r\n}\r\nfunction toUpperCase(str) {\r\n    return str.toUpperCase();\r\n}\r\nconst ORIGINAL_ATTRIBUTE_NAME = '__rrweb_original__';\r\nfunction is2DCanvasBlank(canvas) {\r\n    const ctx = canvas.getContext('2d');\r\n    if (!ctx)\r\n        return true;\r\n    const chunkSize = 50;\r\n    for (let x = 0; x < canvas.width; x += chunkSize) {\r\n        for (let y = 0; y < canvas.height; y += chunkSize) {\r\n            const getImageData = ctx.getImageData;\r\n            const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData\r\n                ? getImageData[ORIGINAL_ATTRIBUTE_NAME]\r\n                : getImageData;\r\n            const pixelBuffer = new Uint32Array(originalGetImageData.call(ctx, x, y, Math.min(chunkSize, canvas.width - x), Math.min(chunkSize, canvas.height - y)).data.buffer);\r\n            if (pixelBuffer.some((pixel) => pixel !== 0))\r\n                return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\nfunction isNodeMetaEqual(a, b) {\r\n    if (!a || !b || a.type !== b.type)\r\n        return false;\r\n    if (a.type === NodeType.Document)\r\n        return a.compatMode === b.compatMode;\r\n    else if (a.type === NodeType.DocumentType)\r\n        return (a.name === b.name &&\r\n            a.publicId === b.publicId &&\r\n            a.systemId === b.systemId);\r\n    else if (a.type === NodeType.Comment ||\r\n        a.type === NodeType.Text ||\r\n        a.type === NodeType.CDATA)\r\n        return a.textContent === b.textContent;\r\n    else if (a.type === NodeType.Element)\r\n        return (a.tagName === b.tagName &&\r\n            JSON.stringify(a.attributes) ===\r\n                JSON.stringify(b.attributes) &&\r\n            a.isSVG === b.isSVG &&\r\n            a.needBlock === b.needBlock);\r\n    return false;\r\n}\r\nfunction getInputType(element) {\r\n    const type = element.type;\r\n    return element.hasAttribute('data-rr-is-password')\r\n        ? 'password'\r\n        : type\r\n            ?\r\n                toLowerCase(type)\r\n            : null;\r\n}\r\nfunction getInputValue(el, tagName, type) {\r\n    if (tagName === 'INPUT' && (type === 'radio' || type === 'checkbox')) {\r\n        return el.getAttribute('value') || '';\r\n    }\r\n    return el.value;\r\n}\n\nlet _id = 1;\r\nconst tagNameRegex = new RegExp('[^a-z0-9-_:]');\r\nconst IGNORED_NODE = -2;\r\nfunction genId() {\r\n    return _id++;\r\n}\r\nfunction getValidTagName(element) {\r\n    if (element instanceof HTMLFormElement) {\r\n        return 'form';\r\n    }\r\n    const processedTagName = toLowerCase(element.tagName);\r\n    if (tagNameRegex.test(processedTagName)) {\r\n        return 'div';\r\n    }\r\n    return processedTagName;\r\n}\r\nfunction extractOrigin(url) {\r\n    let origin = '';\r\n    if (url.indexOf('//') > -1) {\r\n        origin = url.split('/').slice(0, 3).join('/');\r\n    }\r\n    else {\r\n        origin = url.split('/')[0];\r\n    }\r\n    origin = origin.split('?')[0];\r\n    return origin;\r\n}\r\nlet canvasService;\r\nlet canvasCtx;\r\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\r\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\r\nconst URL_WWW_MATCH = /^www\\..*/i;\r\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\r\nfunction absoluteToStylesheet(cssText, href) {\r\n    return (cssText || '').replace(URL_IN_CSS_REF, (origin, quote1, path1, quote2, path2, path3) => {\r\n        const filePath = path1 || path2 || path3;\r\n        const maybeQuote = quote1 || quote2 || '';\r\n        if (!filePath) {\r\n            return origin;\r\n        }\r\n        if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\r\n            return `url(${maybeQuote}${filePath}${maybeQuote})`;\r\n        }\r\n        if (DATA_URI.test(filePath)) {\r\n            return `url(${maybeQuote}${filePath}${maybeQuote})`;\r\n        }\r\n        if (filePath[0] === '/') {\r\n            return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`;\r\n        }\r\n        const stack = href.split('/');\r\n        const parts = filePath.split('/');\r\n        stack.pop();\r\n        for (const part of parts) {\r\n            if (part === '.') {\r\n                continue;\r\n            }\r\n            else if (part === '..') {\r\n                stack.pop();\r\n            }\r\n            else {\r\n                stack.push(part);\r\n            }\r\n        }\r\n        return `url(${maybeQuote}${stack.join('/')}${maybeQuote})`;\r\n    });\r\n}\r\nconst SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\r\nconst SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\r\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\r\n    if (attributeValue.trim() === '') {\r\n        return attributeValue;\r\n    }\r\n    let pos = 0;\r\n    function collectCharacters(regEx) {\r\n        let chars;\r\n        const match = regEx.exec(attributeValue.substring(pos));\r\n        if (match) {\r\n            chars = match[0];\r\n            pos += chars.length;\r\n            return chars;\r\n        }\r\n        return '';\r\n    }\r\n    const output = [];\r\n    while (true) {\r\n        collectCharacters(SRCSET_COMMAS_OR_SPACES);\r\n        if (pos >= attributeValue.length) {\r\n            break;\r\n        }\r\n        let url = collectCharacters(SRCSET_NOT_SPACES);\r\n        if (url.slice(-1) === ',') {\r\n            url = absoluteToDoc(doc, url.substring(0, url.length - 1));\r\n            output.push(url);\r\n        }\r\n        else {\r\n            let descriptorsStr = '';\r\n            url = absoluteToDoc(doc, url);\r\n            let inParens = false;\r\n            while (true) {\r\n                const c = attributeValue.charAt(pos);\r\n                if (c === '') {\r\n                    output.push((url + descriptorsStr).trim());\r\n                    break;\r\n                }\r\n                else if (!inParens) {\r\n                    if (c === ',') {\r\n                        pos += 1;\r\n                        output.push((url + descriptorsStr).trim());\r\n                        break;\r\n                    }\r\n                    else if (c === '(') {\r\n                        inParens = true;\r\n                    }\r\n                }\r\n                else {\r\n                    if (c === ')') {\r\n                        inParens = false;\r\n                    }\r\n                }\r\n                descriptorsStr += c;\r\n                pos += 1;\r\n            }\r\n        }\r\n    }\r\n    return output.join(', ');\r\n}\r\nfunction absoluteToDoc(doc, attributeValue) {\r\n    if (!attributeValue || attributeValue.trim() === '') {\r\n        return attributeValue;\r\n    }\r\n    const a = doc.createElement('a');\r\n    a.href = attributeValue;\r\n    return a.href;\r\n}\r\nfunction isSVGElement(el) {\r\n    return Boolean(el.tagName === 'svg' || el.ownerSVGElement);\r\n}\r\nfunction getHref() {\r\n    const a = document.createElement('a');\r\n    a.href = '';\r\n    return a.href;\r\n}\r\nfunction transformAttribute(doc, tagName, name, value, element, maskAttributeFn) {\r\n    if (!value) {\r\n        return value;\r\n    }\r\n    if (name === 'src' ||\r\n        (name === 'href' && !(tagName === 'use' && value[0] === '#'))) {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    else if (name === 'xlink:href' && value[0] !== '#') {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    else if (name === 'background' &&\r\n        (tagName === 'table' || tagName === 'td' || tagName === 'th')) {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    else if (name === 'srcset') {\r\n        return getAbsoluteSrcsetString(doc, value);\r\n    }\r\n    else if (name === 'style') {\r\n        return absoluteToStylesheet(value, getHref());\r\n    }\r\n    else if (tagName === 'object' && name === 'data') {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    if (typeof maskAttributeFn === 'function') {\r\n        return maskAttributeFn(name, value, element);\r\n    }\r\n    return value;\r\n}\r\nfunction ignoreAttribute(tagName, name, _value) {\r\n    return (tagName === 'video' || tagName === 'audio') && name === 'autoplay';\r\n}\r\nfunction _isBlockedElement(element, blockClass, blockSelector, unblockSelector) {\r\n    try {\r\n        if (unblockSelector && element.matches(unblockSelector)) {\r\n            return false;\r\n        }\r\n        if (typeof blockClass === 'string') {\r\n            if (element.classList.contains(blockClass)) {\r\n                return true;\r\n            }\r\n        }\r\n        else {\r\n            for (let eIndex = element.classList.length; eIndex--;) {\r\n                const className = element.classList[eIndex];\r\n                if (blockClass.test(className)) {\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n        if (blockSelector) {\r\n            return element.matches(blockSelector);\r\n        }\r\n    }\r\n    catch (e) {\r\n    }\r\n    return false;\r\n}\r\nfunction elementClassMatchesRegex(el, regex) {\r\n    for (let eIndex = el.classList.length; eIndex--;) {\r\n        const className = el.classList[eIndex];\r\n        if (regex.test(className)) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\nfunction distanceToMatch(node, matchPredicate, limit = Infinity, distance = 0) {\r\n    if (!node)\r\n        return -1;\r\n    if (node.nodeType !== node.ELEMENT_NODE)\r\n        return -1;\r\n    if (distance > limit)\r\n        return -1;\r\n    if (matchPredicate(node))\r\n        return distance;\r\n    return distanceToMatch(node.parentNode, matchPredicate, limit, distance + 1);\r\n}\r\nfunction createMatchPredicate(className, selector) {\r\n    return (node) => {\r\n        const el = node;\r\n        if (el === null)\r\n            return false;\r\n        if (className) {\r\n            if (typeof className === 'string') {\r\n                if (el.matches(`.${className}`))\r\n                    return true;\r\n            }\r\n            else if (elementClassMatchesRegex(el, className)) {\r\n                return true;\r\n            }\r\n        }\r\n        if (selector && el.matches(selector))\r\n            return true;\r\n        return false;\r\n    };\r\n}\r\nfunction needMaskingText(node, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText) {\r\n    try {\r\n        const el = node.nodeType === node.ELEMENT_NODE\r\n            ? node\r\n            : node.parentElement;\r\n        if (el === null)\r\n            return false;\r\n        let maskDistance = -1;\r\n        let unmaskDistance = -1;\r\n        if (maskAllText) {\r\n            unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector));\r\n            if (unmaskDistance < 0) {\r\n                return true;\r\n            }\r\n            maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector), unmaskDistance >= 0 ? unmaskDistance : Infinity);\r\n        }\r\n        else {\r\n            maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector));\r\n            if (maskDistance < 0) {\r\n                return false;\r\n            }\r\n            unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector), maskDistance >= 0 ? maskDistance : Infinity);\r\n        }\r\n        return maskDistance >= 0\r\n            ? unmaskDistance >= 0\r\n                ? maskDistance <= unmaskDistance\r\n                : true\r\n            : unmaskDistance >= 0\r\n                ? false\r\n                : !!maskAllText;\r\n    }\r\n    catch (e) {\r\n    }\r\n    return !!maskAllText;\r\n}\r\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\r\n    const win = iframeEl.contentWindow;\r\n    if (!win) {\r\n        return;\r\n    }\r\n    let fired = false;\r\n    let readyState;\r\n    try {\r\n        readyState = win.document.readyState;\r\n    }\r\n    catch (error) {\r\n        return;\r\n    }\r\n    if (readyState !== 'complete') {\r\n        const timer = setTimeout(() => {\r\n            if (!fired) {\r\n                listener();\r\n                fired = true;\r\n            }\r\n        }, iframeLoadTimeout);\r\n        iframeEl.addEventListener('load', () => {\r\n            clearTimeout(timer);\r\n            fired = true;\r\n            listener();\r\n        });\r\n        return;\r\n    }\r\n    const blankUrl = 'about:blank';\r\n    if (win.location.href !== blankUrl ||\r\n        iframeEl.src === blankUrl ||\r\n        iframeEl.src === '') {\r\n        setTimeout(listener, 0);\r\n        return iframeEl.addEventListener('load', listener);\r\n    }\r\n    iframeEl.addEventListener('load', listener);\r\n}\r\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\r\n    let fired = false;\r\n    let styleSheetLoaded;\r\n    try {\r\n        styleSheetLoaded = link.sheet;\r\n    }\r\n    catch (error) {\r\n        return;\r\n    }\r\n    if (styleSheetLoaded)\r\n        return;\r\n    const timer = setTimeout(() => {\r\n        if (!fired) {\r\n            listener();\r\n            fired = true;\r\n        }\r\n    }, styleSheetLoadTimeout);\r\n    link.addEventListener('load', () => {\r\n        clearTimeout(timer);\r\n        fired = true;\r\n        listener();\r\n    });\r\n}\r\nfunction serializeNode(n, options) {\r\n    const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskAttributeFn, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, inlineStylesheet, maskInputOptions = {}, maskTextFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, } = options;\r\n    const rootId = getRootId(doc, mirror);\r\n    switch (n.nodeType) {\r\n        case n.DOCUMENT_NODE:\r\n            if (n.compatMode !== 'CSS1Compat') {\r\n                return {\r\n                    type: NodeType.Document,\r\n                    childNodes: [],\r\n                    compatMode: n.compatMode,\r\n                };\r\n            }\r\n            else {\r\n                return {\r\n                    type: NodeType.Document,\r\n                    childNodes: [],\r\n                };\r\n            }\r\n        case n.DOCUMENT_TYPE_NODE:\r\n            return {\r\n                type: NodeType.DocumentType,\r\n                name: n.name,\r\n                publicId: n.publicId,\r\n                systemId: n.systemId,\r\n                rootId,\r\n            };\r\n        case n.ELEMENT_NODE:\r\n            return serializeElementNode(n, {\r\n                doc,\r\n                blockClass,\r\n                blockSelector,\r\n                unblockSelector,\r\n                inlineStylesheet,\r\n                maskAttributeFn,\r\n                maskInputOptions,\r\n                maskInputFn,\r\n                dataURLOptions,\r\n                inlineImages,\r\n                recordCanvas,\r\n                keepIframeSrcFn,\r\n                newlyAddedElement,\r\n                rootId,\r\n                maskAllText,\r\n                maskTextClass,\r\n                unmaskTextClass,\r\n                maskTextSelector,\r\n                unmaskTextSelector,\r\n            });\r\n        case n.TEXT_NODE:\r\n            return serializeTextNode(n, {\r\n                maskAllText,\r\n                maskTextClass,\r\n                unmaskTextClass,\r\n                maskTextSelector,\r\n                unmaskTextSelector,\r\n                maskTextFn,\r\n                maskInputOptions,\r\n                maskInputFn,\r\n                rootId,\r\n            });\r\n        case n.CDATA_SECTION_NODE:\r\n            return {\r\n                type: NodeType.CDATA,\r\n                textContent: '',\r\n                rootId,\r\n            };\r\n        case n.COMMENT_NODE:\r\n            return {\r\n                type: NodeType.Comment,\r\n                textContent: n.textContent || '',\r\n                rootId,\r\n            };\r\n        default:\r\n            return false;\r\n    }\r\n}\r\nfunction getRootId(doc, mirror) {\r\n    if (!mirror.hasNode(doc))\r\n        return undefined;\r\n    const docId = mirror.getId(doc);\r\n    return docId === 1 ? undefined : docId;\r\n}\r\nfunction serializeTextNode(n, options) {\r\n    var _a;\r\n    const { maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, maskTextFn, maskInputOptions, maskInputFn, rootId, } = options;\r\n    const parentTagName = n.parentNode && n.parentNode.tagName;\r\n    let textContent = n.textContent;\r\n    const isStyle = parentTagName === 'STYLE' ? true : undefined;\r\n    const isScript = parentTagName === 'SCRIPT' ? true : undefined;\r\n    const isTextarea = parentTagName === 'TEXTAREA' ? true : undefined;\r\n    if (isStyle && textContent) {\r\n        try {\r\n            if (n.nextSibling || n.previousSibling) {\r\n            }\r\n            else if ((_a = n.parentNode.sheet) === null || _a === void 0 ? void 0 : _a.cssRules) {\r\n                textContent = stringifyStylesheet(n.parentNode.sheet);\r\n            }\r\n        }\r\n        catch (err) {\r\n            console.warn(`Cannot get CSS styles from text's parentNode. Error: ${err}`, n);\r\n        }\r\n        textContent = absoluteToStylesheet(textContent, getHref());\r\n    }\r\n    if (isScript) {\r\n        textContent = 'SCRIPT_PLACEHOLDER';\r\n    }\r\n    const forceMask = needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText);\r\n    if (!isStyle && !isScript && !isTextarea && textContent && forceMask) {\r\n        textContent = maskTextFn\r\n            ? maskTextFn(textContent)\r\n            : textContent.replace(/[\\S]/g, '*');\r\n    }\r\n    if (isTextarea && textContent && (maskInputOptions.textarea || forceMask)) {\r\n        textContent = maskInputFn\r\n            ? maskInputFn(textContent, n.parentNode)\r\n            : textContent.replace(/[\\S]/g, '*');\r\n    }\r\n    if (parentTagName === 'OPTION' && textContent) {\r\n        const isInputMasked = shouldMaskInput({\r\n            type: null,\r\n            tagName: parentTagName,\r\n            maskInputOptions,\r\n        });\r\n        textContent = maskInputValue({\r\n            isMasked: needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked),\r\n            element: n,\r\n            value: textContent,\r\n            maskInputFn,\r\n        });\r\n    }\r\n    return {\r\n        type: NodeType.Text,\r\n        textContent: textContent || '',\r\n        isStyle,\r\n        rootId,\r\n    };\r\n}\r\nfunction serializeElementNode(n, options) {\r\n    const { doc, blockClass, blockSelector, unblockSelector, inlineStylesheet, maskInputOptions = {}, maskAttributeFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, rootId, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, } = options;\r\n    const needBlock = _isBlockedElement(n, blockClass, blockSelector, unblockSelector);\r\n    const tagName = getValidTagName(n);\r\n    let attributes = {};\r\n    const len = n.attributes.length;\r\n    for (let i = 0; i < len; i++) {\r\n        const attr = n.attributes[i];\r\n        if (!ignoreAttribute(tagName, attr.name, attr.value)) {\r\n            attributes[attr.name] = transformAttribute(doc, tagName, toLowerCase(attr.name), attr.value, n, maskAttributeFn);\r\n        }\r\n    }\r\n    if (tagName === 'link' && inlineStylesheet) {\r\n        const stylesheet = Array.from(doc.styleSheets).find((s) => {\r\n            return s.href === n.href;\r\n        });\r\n        let cssText = null;\r\n        if (stylesheet) {\r\n            cssText = stringifyStylesheet(stylesheet);\r\n        }\r\n        if (cssText) {\r\n            delete attributes.rel;\r\n            delete attributes.href;\r\n            attributes._cssText = absoluteToStylesheet(cssText, stylesheet.href);\r\n        }\r\n    }\r\n    if (tagName === 'style' &&\r\n        n.sheet &&\r\n        !(n.innerText || n.textContent || '').trim().length) {\r\n        const cssText = stringifyStylesheet(n.sheet);\r\n        if (cssText) {\r\n            attributes._cssText = absoluteToStylesheet(cssText, getHref());\r\n        }\r\n    }\r\n    if (tagName === 'input' ||\r\n        tagName === 'textarea' ||\r\n        tagName === 'select' ||\r\n        tagName === 'option') {\r\n        const el = n;\r\n        const type = getInputType(el);\r\n        const value = getInputValue(el, toUpperCase(tagName), type);\r\n        const checked = el.checked;\r\n        if (type !== 'submit' && type !== 'button' && value) {\r\n            const forceMask = needMaskingText(el, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, shouldMaskInput({\r\n                type,\r\n                tagName: toUpperCase(tagName),\r\n                maskInputOptions,\r\n            }));\r\n            attributes.value = maskInputValue({\r\n                isMasked: forceMask,\r\n                element: el,\r\n                value,\r\n                maskInputFn,\r\n            });\r\n        }\r\n        if (checked) {\r\n            attributes.checked = checked;\r\n        }\r\n    }\r\n    if (tagName === 'option') {\r\n        if (n.selected && !maskInputOptions['select']) {\r\n            attributes.selected = true;\r\n        }\r\n        else {\r\n            delete attributes.selected;\r\n        }\r\n    }\r\n    if (tagName === 'canvas' && recordCanvas) {\r\n        if (n.__context === '2d') {\r\n            if (!is2DCanvasBlank(n)) {\r\n                attributes.rr_dataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            }\r\n        }\r\n        else if (!('__context' in n)) {\r\n            const canvasDataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            const blankCanvas = document.createElement('canvas');\r\n            blankCanvas.width = n.width;\r\n            blankCanvas.height = n.height;\r\n            const blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            if (canvasDataURL !== blankCanvasDataURL) {\r\n                attributes.rr_dataURL = canvasDataURL;\r\n            }\r\n        }\r\n    }\r\n    if (tagName === 'img' && inlineImages) {\r\n        if (!canvasService) {\r\n            canvasService = doc.createElement('canvas');\r\n            canvasCtx = canvasService.getContext('2d');\r\n        }\r\n        const image = n;\r\n        const oldValue = image.crossOrigin;\r\n        image.crossOrigin = 'anonymous';\r\n        const recordInlineImage = () => {\r\n            image.removeEventListener('load', recordInlineImage);\r\n            try {\r\n                canvasService.width = image.naturalWidth;\r\n                canvasService.height = image.naturalHeight;\r\n                canvasCtx.drawImage(image, 0, 0);\r\n                attributes.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            }\r\n            catch (err) {\r\n                console.warn(`Cannot inline img src=${image.currentSrc}! Error: ${err}`);\r\n            }\r\n            oldValue\r\n                ? (attributes.crossOrigin = oldValue)\r\n                : image.removeAttribute('crossorigin');\r\n        };\r\n        if (image.complete && image.naturalWidth !== 0)\r\n            recordInlineImage();\r\n        else\r\n            image.addEventListener('load', recordInlineImage);\r\n    }\r\n    if (tagName === 'audio' || tagName === 'video') {\r\n        attributes.rr_mediaState = n.paused\r\n            ? 'paused'\r\n            : 'played';\r\n        attributes.rr_mediaCurrentTime = n.currentTime;\r\n    }\r\n    if (!newlyAddedElement) {\r\n        if (n.scrollLeft) {\r\n            attributes.rr_scrollLeft = n.scrollLeft;\r\n        }\r\n        if (n.scrollTop) {\r\n            attributes.rr_scrollTop = n.scrollTop;\r\n        }\r\n    }\r\n    if (needBlock) {\r\n        const { width, height } = n.getBoundingClientRect();\r\n        attributes = {\r\n            class: attributes.class,\r\n            rr_width: `${width}px`,\r\n            rr_height: `${height}px`,\r\n        };\r\n    }\r\n    if (tagName === 'iframe' && !keepIframeSrcFn(attributes.src)) {\r\n        if (!n.contentDocument) {\r\n            attributes.rr_src = attributes.src;\r\n        }\r\n        delete attributes.src;\r\n    }\r\n    let isCustomElement;\r\n    try {\r\n        if (customElements.get(tagName))\r\n            isCustomElement = true;\r\n    }\r\n    catch (e) {\r\n    }\r\n    return {\r\n        type: NodeType.Element,\r\n        tagName,\r\n        attributes,\r\n        childNodes: [],\r\n        isSVG: isSVGElement(n) || undefined,\r\n        needBlock,\r\n        rootId,\r\n        isCustom: isCustomElement,\r\n    };\r\n}\r\nfunction lowerIfExists(maybeAttr) {\r\n    if (maybeAttr === undefined || maybeAttr === null) {\r\n        return '';\r\n    }\r\n    else {\r\n        return maybeAttr.toLowerCase();\r\n    }\r\n}\r\nfunction slimDOMExcluded(sn, slimDOMOptions) {\r\n    if (slimDOMOptions.comment && sn.type === NodeType.Comment) {\r\n        return true;\r\n    }\r\n    else if (sn.type === NodeType.Element) {\r\n        if (slimDOMOptions.script &&\r\n            (sn.tagName === 'script' ||\r\n                (sn.tagName === 'link' &&\r\n                    (sn.attributes.rel === 'preload' ||\r\n                        sn.attributes.rel === 'modulepreload') &&\r\n                    sn.attributes.as === 'script') ||\r\n                (sn.tagName === 'link' &&\r\n                    sn.attributes.rel === 'prefetch' &&\r\n                    typeof sn.attributes.href === 'string' &&\r\n                    sn.attributes.href.endsWith('.js')))) {\r\n            return true;\r\n        }\r\n        else if (slimDOMOptions.headFavicon &&\r\n            ((sn.tagName === 'link' && sn.attributes.rel === 'shortcut icon') ||\r\n                (sn.tagName === 'meta' &&\r\n                    (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) ||\r\n                        lowerIfExists(sn.attributes.name) === 'application-name' ||\r\n                        lowerIfExists(sn.attributes.rel) === 'icon' ||\r\n                        lowerIfExists(sn.attributes.rel) === 'apple-touch-icon' ||\r\n                        lowerIfExists(sn.attributes.rel) === 'shortcut icon')))) {\r\n            return true;\r\n        }\r\n        else if (sn.tagName === 'meta') {\r\n            if (slimDOMOptions.headMetaDescKeywords &&\r\n                lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaSocial &&\r\n                (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) ||\r\n                    lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) ||\r\n                    lowerIfExists(sn.attributes.name) === 'pinterest')) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaRobots &&\r\n                (lowerIfExists(sn.attributes.name) === 'robots' ||\r\n                    lowerIfExists(sn.attributes.name) === 'googlebot' ||\r\n                    lowerIfExists(sn.attributes.name) === 'bingbot')) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaHttpEquiv &&\r\n                sn.attributes['http-equiv'] !== undefined) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaAuthorship &&\r\n                (lowerIfExists(sn.attributes.name) === 'author' ||\r\n                    lowerIfExists(sn.attributes.name) === 'generator' ||\r\n                    lowerIfExists(sn.attributes.name) === 'framework' ||\r\n                    lowerIfExists(sn.attributes.name) === 'publisher' ||\r\n                    lowerIfExists(sn.attributes.name) === 'progid' ||\r\n                    lowerIfExists(sn.attributes.property).match(/^article:/) ||\r\n                    lowerIfExists(sn.attributes.property).match(/^product:/))) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaVerification &&\r\n                (lowerIfExists(sn.attributes.name) === 'google-site-verification' ||\r\n                    lowerIfExists(sn.attributes.name) === 'yandex-verification' ||\r\n                    lowerIfExists(sn.attributes.name) === 'csrf-token' ||\r\n                    lowerIfExists(sn.attributes.name) === 'p:domain_verify' ||\r\n                    lowerIfExists(sn.attributes.name) === 'verify-v1' ||\r\n                    lowerIfExists(sn.attributes.name) === 'verification' ||\r\n                    lowerIfExists(sn.attributes.name) === 'shopify-checkout-api-token')) {\r\n                return true;\r\n            }\r\n        }\r\n    }\r\n    return false;\r\n}\r\nfunction serializeNodeWithId(n, options) {\r\n    const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, skipChild = false, inlineStylesheet = true, maskInputOptions = {}, maskAttributeFn, maskTextFn, maskInputFn, slimDOMOptions, dataURLOptions = {}, inlineImages = false, recordCanvas = false, onSerialize, onIframeLoad, iframeLoadTimeout = 5000, onStylesheetLoad, stylesheetLoadTimeout = 5000, keepIframeSrcFn = () => false, newlyAddedElement = false, } = options;\r\n    let { preserveWhiteSpace = true } = options;\r\n    const _serializedNode = serializeNode(n, {\r\n        doc,\r\n        mirror,\r\n        blockClass,\r\n        blockSelector,\r\n        maskAllText,\r\n        unblockSelector,\r\n        maskTextClass,\r\n        unmaskTextClass,\r\n        maskTextSelector,\r\n        unmaskTextSelector,\r\n        inlineStylesheet,\r\n        maskInputOptions,\r\n        maskAttributeFn,\r\n        maskTextFn,\r\n        maskInputFn,\r\n        dataURLOptions,\r\n        inlineImages,\r\n        recordCanvas,\r\n        keepIframeSrcFn,\r\n        newlyAddedElement,\r\n    });\r\n    if (!_serializedNode) {\r\n        console.warn(n, 'not serialized');\r\n        return null;\r\n    }\r\n    let id;\r\n    if (mirror.hasNode(n)) {\r\n        id = mirror.getId(n);\r\n    }\r\n    else if (slimDOMExcluded(_serializedNode, slimDOMOptions) ||\r\n        (!preserveWhiteSpace &&\r\n            _serializedNode.type === NodeType.Text &&\r\n            !_serializedNode.isStyle &&\r\n            !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, '').length)) {\r\n        id = IGNORED_NODE;\r\n    }\r\n    else {\r\n        id = genId();\r\n    }\r\n    const serializedNode = Object.assign(_serializedNode, { id });\r\n    mirror.add(n, serializedNode);\r\n    if (id === IGNORED_NODE) {\r\n        return null;\r\n    }\r\n    if (onSerialize) {\r\n        onSerialize(n);\r\n    }\r\n    let recordChild = !skipChild;\r\n    if (serializedNode.type === NodeType.Element) {\r\n        recordChild = recordChild && !serializedNode.needBlock;\r\n        delete serializedNode.needBlock;\r\n        const shadowRoot = n.shadowRoot;\r\n        if (shadowRoot && isNativeShadowDom(shadowRoot))\r\n            serializedNode.isShadowHost = true;\r\n    }\r\n    if ((serializedNode.type === NodeType.Document ||\r\n        serializedNode.type === NodeType.Element) &&\r\n        recordChild) {\r\n        if (slimDOMOptions.headWhitespace &&\r\n            serializedNode.type === NodeType.Element &&\r\n            serializedNode.tagName === 'head') {\r\n            preserveWhiteSpace = false;\r\n        }\r\n        const bypassOptions = {\r\n            doc,\r\n            mirror,\r\n            blockClass,\r\n            blockSelector,\r\n            maskAllText,\r\n            unblockSelector,\r\n            maskTextClass,\r\n            unmaskTextClass,\r\n            maskTextSelector,\r\n            unmaskTextSelector,\r\n            skipChild,\r\n            inlineStylesheet,\r\n            maskInputOptions,\r\n            maskAttributeFn,\r\n            maskTextFn,\r\n            maskInputFn,\r\n            slimDOMOptions,\r\n            dataURLOptions,\r\n            inlineImages,\r\n            recordCanvas,\r\n            preserveWhiteSpace,\r\n            onSerialize,\r\n            onIframeLoad,\r\n            iframeLoadTimeout,\r\n            onStylesheetLoad,\r\n            stylesheetLoadTimeout,\r\n            keepIframeSrcFn,\r\n        };\r\n        for (const childN of Array.from(n.childNodes)) {\r\n            const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n            if (serializedChildNode) {\r\n                serializedNode.childNodes.push(serializedChildNode);\r\n            }\r\n        }\r\n        if (isElement(n) && n.shadowRoot) {\r\n            for (const childN of Array.from(n.shadowRoot.childNodes)) {\r\n                const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n                if (serializedChildNode) {\r\n                    isNativeShadowDom(n.shadowRoot) &&\r\n                        (serializedChildNode.isShadow = true);\r\n                    serializedNode.childNodes.push(serializedChildNode);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    if (n.parentNode &&\r\n        isShadowRoot(n.parentNode) &&\r\n        isNativeShadowDom(n.parentNode)) {\r\n        serializedNode.isShadow = true;\r\n    }\r\n    if (serializedNode.type === NodeType.Element &&\r\n        serializedNode.tagName === 'iframe') {\r\n        onceIframeLoaded(n, () => {\r\n            const iframeDoc = n.contentDocument;\r\n            if (iframeDoc && onIframeLoad) {\r\n                const serializedIframeNode = serializeNodeWithId(iframeDoc, {\r\n                    doc: iframeDoc,\r\n                    mirror,\r\n                    blockClass,\r\n                    blockSelector,\r\n                    unblockSelector,\r\n                    maskAllText,\r\n                    maskTextClass,\r\n                    unmaskTextClass,\r\n                    maskTextSelector,\r\n                    unmaskTextSelector,\r\n                    skipChild: false,\r\n                    inlineStylesheet,\r\n                    maskInputOptions,\r\n                    maskAttributeFn,\r\n                    maskTextFn,\r\n                    maskInputFn,\r\n                    slimDOMOptions,\r\n                    dataURLOptions,\r\n                    inlineImages,\r\n                    recordCanvas,\r\n                    preserveWhiteSpace,\r\n                    onSerialize,\r\n                    onIframeLoad,\r\n                    iframeLoadTimeout,\r\n                    onStylesheetLoad,\r\n                    stylesheetLoadTimeout,\r\n                    keepIframeSrcFn,\r\n                });\r\n                if (serializedIframeNode) {\r\n                    onIframeLoad(n, serializedIframeNode);\r\n                }\r\n            }\r\n        }, iframeLoadTimeout);\r\n    }\r\n    if (serializedNode.type === NodeType.Element &&\r\n        serializedNode.tagName === 'link' &&\r\n        serializedNode.attributes.rel === 'stylesheet') {\r\n        onceStylesheetLoaded(n, () => {\r\n            if (onStylesheetLoad) {\r\n                const serializedLinkNode = serializeNodeWithId(n, {\r\n                    doc,\r\n                    mirror,\r\n                    blockClass,\r\n                    blockSelector,\r\n                    unblockSelector,\r\n                    maskAllText,\r\n                    maskTextClass,\r\n                    unmaskTextClass,\r\n                    maskTextSelector,\r\n                    unmaskTextSelector,\r\n                    skipChild: false,\r\n                    inlineStylesheet,\r\n                    maskInputOptions,\r\n                    maskAttributeFn,\r\n                    maskTextFn,\r\n                    maskInputFn,\r\n                    slimDOMOptions,\r\n                    dataURLOptions,\r\n                    inlineImages,\r\n                    recordCanvas,\r\n                    preserveWhiteSpace,\r\n                    onSerialize,\r\n                    onIframeLoad,\r\n                    iframeLoadTimeout,\r\n                    onStylesheetLoad,\r\n                    stylesheetLoadTimeout,\r\n                    keepIframeSrcFn,\r\n                });\r\n                if (serializedLinkNode) {\r\n                    onStylesheetLoad(n, serializedLinkNode);\r\n                }\r\n            }\r\n        }, stylesheetLoadTimeout);\r\n    }\r\n    return serializedNode;\r\n}\r\nfunction snapshot(n, options) {\r\n    const { mirror = new Mirror(), blockClass = 'rr-block', blockSelector = null, unblockSelector = null, maskAllText = false, maskTextClass = 'rr-mask', unmaskTextClass = null, maskTextSelector = null, unmaskTextSelector = null, inlineStylesheet = true, inlineImages = false, recordCanvas = false, maskAllInputs = false, maskAttributeFn, maskTextFn, maskInputFn, slimDOM = false, dataURLOptions, preserveWhiteSpace, onSerialize, onIframeLoad, iframeLoadTimeout, onStylesheetLoad, stylesheetLoadTimeout, keepIframeSrcFn = () => false, } = options || {};\r\n    const maskInputOptions = maskAllInputs === true\r\n        ? {\r\n            color: true,\r\n            date: true,\r\n            'datetime-local': true,\r\n            email: true,\r\n            month: true,\r\n            number: true,\r\n            range: true,\r\n            search: true,\r\n            tel: true,\r\n            text: true,\r\n            time: true,\r\n            url: true,\r\n            week: true,\r\n            textarea: true,\r\n            select: true,\r\n        }\r\n        : maskAllInputs === false\r\n            ? {}\r\n            : maskAllInputs;\r\n    const slimDOMOptions = slimDOM === true || slimDOM === 'all'\r\n        ?\r\n            {\r\n                script: true,\r\n                comment: true,\r\n                headFavicon: true,\r\n                headWhitespace: true,\r\n                headMetaDescKeywords: slimDOM === 'all',\r\n                headMetaSocial: true,\r\n                headMetaRobots: true,\r\n                headMetaHttpEquiv: true,\r\n                headMetaAuthorship: true,\r\n                headMetaVerification: true,\r\n            }\r\n        : slimDOM === false\r\n            ? {}\r\n            : slimDOM;\r\n    return serializeNodeWithId(n, {\r\n        doc: n,\r\n        mirror,\r\n        blockClass,\r\n        blockSelector,\r\n        unblockSelector,\r\n        maskAllText,\r\n        maskTextClass,\r\n        unmaskTextClass,\r\n        maskTextSelector,\r\n        unmaskTextSelector,\r\n        skipChild: false,\r\n        inlineStylesheet,\r\n        maskInputOptions,\r\n        maskAttributeFn,\r\n        maskTextFn,\r\n        maskInputFn,\r\n        slimDOMOptions,\r\n        dataURLOptions,\r\n        inlineImages,\r\n        recordCanvas,\r\n        preserveWhiteSpace,\r\n        onSerialize,\r\n        onIframeLoad,\r\n        iframeLoadTimeout,\r\n        onStylesheetLoad,\r\n        stylesheetLoadTimeout,\r\n        keepIframeSrcFn,\r\n        newlyAddedElement: false,\r\n    });\r\n}\r\n\nconst commentre = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\r\nfunction parse(css, options = {}) {\r\n    let lineno = 1;\r\n    let column = 1;\r\n    function updatePosition(str) {\r\n        const lines = str.match(/\\n/g);\r\n        if (lines) {\r\n            lineno += lines.length;\r\n        }\r\n        const i = str.lastIndexOf('\\n');\r\n        column = i === -1 ? column + str.length : str.length - i;\r\n    }\r\n    function position() {\r\n        const start = { line: lineno, column };\r\n        return (node) => {\r\n            node.position = new Position(start);\r\n            whitespace();\r\n            return node;\r\n        };\r\n    }\r\n    class Position {\r\n        constructor(start) {\r\n            this.start = start;\r\n            this.end = { line: lineno, column };\r\n            this.source = options.source;\r\n        }\r\n    }\r\n    Position.prototype.content = css;\r\n    const errorsList = [];\r\n    function error(msg) {\r\n        const err = new Error(`${options.source || ''}:${lineno}:${column}: ${msg}`);\r\n        err.reason = msg;\r\n        err.filename = options.source;\r\n        err.line = lineno;\r\n        err.column = column;\r\n        err.source = css;\r\n        if (options.silent) {\r\n            errorsList.push(err);\r\n        }\r\n        else {\r\n            throw err;\r\n        }\r\n    }\r\n    function stylesheet() {\r\n        const rulesList = rules();\r\n        return {\r\n            type: 'stylesheet',\r\n            stylesheet: {\r\n                source: options.source,\r\n                rules: rulesList,\r\n                parsingErrors: errorsList,\r\n            },\r\n        };\r\n    }\r\n    function open() {\r\n        return match(/^{\\s*/);\r\n    }\r\n    function close() {\r\n        return match(/^}/);\r\n    }\r\n    function rules() {\r\n        let node;\r\n        const rules = [];\r\n        whitespace();\r\n        comments(rules);\r\n        while (css.length && css.charAt(0) !== '}' && (node = atrule() || rule())) {\r\n            if (node) {\r\n                rules.push(node);\r\n                comments(rules);\r\n            }\r\n        }\r\n        return rules;\r\n    }\r\n    function match(re) {\r\n        const m = re.exec(css);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const str = m[0];\r\n        updatePosition(str);\r\n        css = css.slice(str.length);\r\n        return m;\r\n    }\r\n    function whitespace() {\r\n        match(/^\\s*/);\r\n    }\r\n    function comments(rules = []) {\r\n        let c;\r\n        while ((c = comment())) {\r\n            if (c) {\r\n                rules.push(c);\r\n            }\r\n            c = comment();\r\n        }\r\n        return rules;\r\n    }\r\n    function comment() {\r\n        const pos = position();\r\n        if ('/' !== css.charAt(0) || '*' !== css.charAt(1)) {\r\n            return;\r\n        }\r\n        let i = 2;\r\n        while ('' !== css.charAt(i) &&\r\n            ('*' !== css.charAt(i) || '/' !== css.charAt(i + 1))) {\r\n            ++i;\r\n        }\r\n        i += 2;\r\n        if ('' === css.charAt(i - 1)) {\r\n            return error('End of comment missing');\r\n        }\r\n        const str = css.slice(2, i - 2);\r\n        column += 2;\r\n        updatePosition(str);\r\n        css = css.slice(i);\r\n        column += 2;\r\n        return pos({\r\n            type: 'comment',\r\n            comment: str,\r\n        });\r\n    }\r\n    function selector() {\r\n        const m = match(/^([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        return trim(m[0])\r\n            .replace(/\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*\\/+/g, '')\r\n            .replace(/\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'/g, (m) => {\r\n            return m.replace(/,/g, '\\u200C');\r\n        })\r\n            .split(/\\s*(?![^(]*\\)),\\s*/)\r\n            .map((s) => {\r\n            return s.replace(/\\u200C/g, ',');\r\n        });\r\n    }\r\n    function declaration() {\r\n        const pos = position();\r\n        const propMatch = match(/^(\\*?[-#\\/\\*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/);\r\n        if (!propMatch) {\r\n            return;\r\n        }\r\n        const prop = trim(propMatch[0]);\r\n        if (!match(/^:\\s*/)) {\r\n            return error(`property missing ':'`);\r\n        }\r\n        const val = match(/^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^\\)]*?\\)|[^};])+)/);\r\n        const ret = pos({\r\n            type: 'declaration',\r\n            property: prop.replace(commentre, ''),\r\n            value: val ? trim(val[0]).replace(commentre, '') : '',\r\n        });\r\n        match(/^[;\\s]*/);\r\n        return ret;\r\n    }\r\n    function declarations() {\r\n        const decls = [];\r\n        if (!open()) {\r\n            return error(`missing '{'`);\r\n        }\r\n        comments(decls);\r\n        let decl;\r\n        while ((decl = declaration())) {\r\n            if (decl !== false) {\r\n                decls.push(decl);\r\n                comments(decls);\r\n            }\r\n            decl = declaration();\r\n        }\r\n        if (!close()) {\r\n            return error(`missing '}'`);\r\n        }\r\n        return decls;\r\n    }\r\n    function keyframe() {\r\n        let m;\r\n        const vals = [];\r\n        const pos = position();\r\n        while ((m = match(/^((\\d+\\.\\d+|\\.\\d+|\\d+)%?|[a-z]+)\\s*/))) {\r\n            vals.push(m[1]);\r\n            match(/^,\\s*/);\r\n        }\r\n        if (!vals.length) {\r\n            return;\r\n        }\r\n        return pos({\r\n            type: 'keyframe',\r\n            values: vals,\r\n            declarations: declarations(),\r\n        });\r\n    }\r\n    function atkeyframes() {\r\n        const pos = position();\r\n        let m = match(/^@([-\\w]+)?keyframes\\s*/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const vendor = m[1];\r\n        m = match(/^([-\\w]+)\\s*/);\r\n        if (!m) {\r\n            return error('@keyframes missing name');\r\n        }\r\n        const name = m[1];\r\n        if (!open()) {\r\n            return error(`@keyframes missing '{'`);\r\n        }\r\n        let frame;\r\n        let frames = comments();\r\n        while ((frame = keyframe())) {\r\n            frames.push(frame);\r\n            frames = frames.concat(comments());\r\n        }\r\n        if (!close()) {\r\n            return error(`@keyframes missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'keyframes',\r\n            name,\r\n            vendor,\r\n            keyframes: frames,\r\n        });\r\n    }\r\n    function atsupports() {\r\n        const pos = position();\r\n        const m = match(/^@supports *([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const supports = trim(m[1]);\r\n        if (!open()) {\r\n            return error(`@supports missing '{'`);\r\n        }\r\n        const style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(`@supports missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'supports',\r\n            supports,\r\n            rules: style,\r\n        });\r\n    }\r\n    function athost() {\r\n        const pos = position();\r\n        const m = match(/^@host\\s*/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        if (!open()) {\r\n            return error(`@host missing '{'`);\r\n        }\r\n        const style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(`@host missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'host',\r\n            rules: style,\r\n        });\r\n    }\r\n    function atmedia() {\r\n        const pos = position();\r\n        const m = match(/^@media *([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const media = trim(m[1]);\r\n        if (!open()) {\r\n            return error(`@media missing '{'`);\r\n        }\r\n        const style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(`@media missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'media',\r\n            media,\r\n            rules: style,\r\n        });\r\n    }\r\n    function atcustommedia() {\r\n        const pos = position();\r\n        const m = match(/^@custom-media\\s+(--[^\\s]+)\\s*([^{;]+);/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        return pos({\r\n            type: 'custom-media',\r\n            name: trim(m[1]),\r\n            media: trim(m[2]),\r\n        });\r\n    }\r\n    function atpage() {\r\n        const pos = position();\r\n        const m = match(/^@page */);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const sel = selector() || [];\r\n        if (!open()) {\r\n            return error(`@page missing '{'`);\r\n        }\r\n        let decls = comments();\r\n        let decl;\r\n        while ((decl = declaration())) {\r\n            decls.push(decl);\r\n            decls = decls.concat(comments());\r\n        }\r\n        if (!close()) {\r\n            return error(`@page missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'page',\r\n            selectors: sel,\r\n            declarations: decls,\r\n        });\r\n    }\r\n    function atdocument() {\r\n        const pos = position();\r\n        const m = match(/^@([-\\w]+)?document *([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const vendor = trim(m[1]);\r\n        const doc = trim(m[2]);\r\n        if (!open()) {\r\n            return error(`@document missing '{'`);\r\n        }\r\n        const style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(`@document missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'document',\r\n            document: doc,\r\n            vendor,\r\n            rules: style,\r\n        });\r\n    }\r\n    function atfontface() {\r\n        const pos = position();\r\n        const m = match(/^@font-face\\s*/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        if (!open()) {\r\n            return error(`@font-face missing '{'`);\r\n        }\r\n        let decls = comments();\r\n        let decl;\r\n        while ((decl = declaration())) {\r\n            decls.push(decl);\r\n            decls = decls.concat(comments());\r\n        }\r\n        if (!close()) {\r\n            return error(`@font-face missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'font-face',\r\n            declarations: decls,\r\n        });\r\n    }\r\n    const atimport = _compileAtrule('import');\r\n    const atcharset = _compileAtrule('charset');\r\n    const atnamespace = _compileAtrule('namespace');\r\n    function _compileAtrule(name) {\r\n        const re = new RegExp('^@' + name + '\\\\s*([^;]+);');\r\n        return () => {\r\n            const pos = position();\r\n            const m = match(re);\r\n            if (!m) {\r\n                return;\r\n            }\r\n            const ret = { type: name };\r\n            ret[name] = m[1].trim();\r\n            return pos(ret);\r\n        };\r\n    }\r\n    function atrule() {\r\n        if (css[0] !== '@') {\r\n            return;\r\n        }\r\n        return (atkeyframes() ||\r\n            atmedia() ||\r\n            atcustommedia() ||\r\n            atsupports() ||\r\n            atimport() ||\r\n            atcharset() ||\r\n            atnamespace() ||\r\n            atdocument() ||\r\n            atpage() ||\r\n            athost() ||\r\n            atfontface());\r\n    }\r\n    function rule() {\r\n        const pos = position();\r\n        const sel = selector();\r\n        if (!sel) {\r\n            return error('selector missing');\r\n        }\r\n        comments();\r\n        return pos({\r\n            type: 'rule',\r\n            selectors: sel,\r\n            declarations: declarations(),\r\n        });\r\n    }\r\n    return addParent(stylesheet());\r\n}\r\nfunction trim(str) {\r\n    return str ? str.replace(/^\\s+|\\s+$/g, '') : '';\r\n}\r\nfunction addParent(obj, parent) {\r\n    const isNode = obj && typeof obj.type === 'string';\r\n    const childParent = isNode ? obj : parent;\r\n    for (const k of Object.keys(obj)) {\r\n        const value = obj[k];\r\n        if (Array.isArray(value)) {\r\n            value.forEach((v) => {\r\n                addParent(v, childParent);\r\n            });\r\n        }\r\n        else if (value && typeof value === 'object') {\r\n            addParent(value, childParent);\r\n        }\r\n    }\r\n    if (isNode) {\r\n        Object.defineProperty(obj, 'parent', {\r\n            configurable: true,\r\n            writable: true,\r\n            enumerable: false,\r\n            value: parent || null,\r\n        });\r\n    }\r\n    return obj;\r\n}\n\nconst tagMap = {\r\n    script: 'noscript',\r\n    altglyph: 'altGlyph',\r\n    altglyphdef: 'altGlyphDef',\r\n    altglyphitem: 'altGlyphItem',\r\n    animatecolor: 'animateColor',\r\n    animatemotion: 'animateMotion',\r\n    animatetransform: 'animateTransform',\r\n    clippath: 'clipPath',\r\n    feblend: 'feBlend',\r\n    fecolormatrix: 'feColorMatrix',\r\n    fecomponenttransfer: 'feComponentTransfer',\r\n    fecomposite: 'feComposite',\r\n    feconvolvematrix: 'feConvolveMatrix',\r\n    fediffuselighting: 'feDiffuseLighting',\r\n    fedisplacementmap: 'feDisplacementMap',\r\n    fedistantlight: 'feDistantLight',\r\n    fedropshadow: 'feDropShadow',\r\n    feflood: 'feFlood',\r\n    fefunca: 'feFuncA',\r\n    fefuncb: 'feFuncB',\r\n    fefuncg: 'feFuncG',\r\n    fefuncr: 'feFuncR',\r\n    fegaussianblur: 'feGaussianBlur',\r\n    feimage: 'feImage',\r\n    femerge: 'feMerge',\r\n    femergenode: 'feMergeNode',\r\n    femorphology: 'feMorphology',\r\n    feoffset: 'feOffset',\r\n    fepointlight: 'fePointLight',\r\n    fespecularlighting: 'feSpecularLighting',\r\n    fespotlight: 'feSpotLight',\r\n    fetile: 'feTile',\r\n    feturbulence: 'feTurbulence',\r\n    foreignobject: 'foreignObject',\r\n    glyphref: 'glyphRef',\r\n    lineargradient: 'linearGradient',\r\n    radialgradient: 'radialGradient',\r\n};\r\nfunction getTagName(n) {\r\n    let tagName = tagMap[n.tagName] ? tagMap[n.tagName] : n.tagName;\r\n    if (tagName === 'link' && n.attributes._cssText) {\r\n        tagName = 'style';\r\n    }\r\n    return tagName;\r\n}\r\nfunction escapeRegExp(str) {\r\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n}\r\nconst HOVER_SELECTOR = /([^\\\\]):hover/;\r\nconst HOVER_SELECTOR_GLOBAL = new RegExp(HOVER_SELECTOR.source, 'g');\r\nfunction addHoverClass(cssText, cache) {\r\n    const cachedStyle = cache === null || cache === void 0 ? void 0 : cache.stylesWithHoverClass.get(cssText);\r\n    if (cachedStyle)\r\n        return cachedStyle;\r\n    const ast = parse(cssText, {\r\n        silent: true,\r\n    });\r\n    if (!ast.stylesheet) {\r\n        return cssText;\r\n    }\r\n    const selectors = [];\r\n    ast.stylesheet.rules.forEach((rule) => {\r\n        if ('selectors' in rule) {\r\n            (rule.selectors || []).forEach((selector) => {\r\n                if (HOVER_SELECTOR.test(selector)) {\r\n                    selectors.push(selector);\r\n                }\r\n            });\r\n        }\r\n    });\r\n    if (selectors.length === 0) {\r\n        return cssText;\r\n    }\r\n    const selectorMatcher = new RegExp(selectors\r\n        .filter((selector, index) => selectors.indexOf(selector) === index)\r\n        .sort((a, b) => b.length - a.length)\r\n        .map((selector) => {\r\n        return escapeRegExp(selector);\r\n    })\r\n        .join('|'), 'g');\r\n    const result = cssText.replace(selectorMatcher, (selector) => {\r\n        const newSelector = selector.replace(HOVER_SELECTOR_GLOBAL, '$1.\\\\:hover');\r\n        return `${selector}, ${newSelector}`;\r\n    });\r\n    cache === null || cache === void 0 ? void 0 : cache.stylesWithHoverClass.set(cssText, result);\r\n    return result;\r\n}\r\nfunction createCache() {\r\n    const stylesWithHoverClass = new Map();\r\n    return {\r\n        stylesWithHoverClass,\r\n    };\r\n}\r\nfunction buildNode(n, options) {\r\n    var _a;\r\n    const { doc, hackCss, cache } = options;\r\n    switch (n.type) {\r\n        case NodeType.Document:\r\n            return doc.implementation.createDocument(null, '', null);\r\n        case NodeType.DocumentType:\r\n            return doc.implementation.createDocumentType(n.name || 'html', n.publicId, n.systemId);\r\n        case NodeType.Element: {\r\n            const tagName = getTagName(n);\r\n            let node;\r\n            if (n.isSVG) {\r\n                node = doc.createElementNS('http://www.w3.org/2000/svg', tagName);\r\n            }\r\n            else {\r\n                if (n.isCustom &&\r\n                    ((_a = doc.defaultView) === null || _a === void 0 ? void 0 : _a.customElements) &&\r\n                    !doc.defaultView.customElements.get(n.tagName))\r\n                    doc.defaultView.customElements.define(n.tagName, class extends doc.defaultView.HTMLElement {\r\n                    });\r\n                node = doc.createElement(tagName);\r\n            }\r\n            const specialAttributes = {};\r\n            for (const name in n.attributes) {\r\n                if (!Object.prototype.hasOwnProperty.call(n.attributes, name)) {\r\n                    continue;\r\n                }\r\n                let value = n.attributes[name];\r\n                if (tagName === 'option' &&\r\n                    name === 'selected' &&\r\n                    value === false) {\r\n                    continue;\r\n                }\r\n                if (value === null) {\r\n                    continue;\r\n                }\r\n                if (value === true)\r\n                    value = '';\r\n                if (name.startsWith('rr_')) {\r\n                    specialAttributes[name] = value;\r\n                    continue;\r\n                }\r\n                const isTextarea = tagName === 'textarea' && name === 'value';\r\n                const isRemoteOrDynamicCss = tagName === 'style' && name === '_cssText';\r\n                if (isRemoteOrDynamicCss && hackCss && typeof value === 'string') {\r\n                    value = addHoverClass(value, cache);\r\n                }\r\n                if ((isTextarea || isRemoteOrDynamicCss) && typeof value === 'string') {\r\n                    const child = doc.createTextNode(value);\r\n                    for (const c of Array.from(node.childNodes)) {\r\n                        if (c.nodeType === node.TEXT_NODE) {\r\n                            node.removeChild(c);\r\n                        }\r\n                    }\r\n                    node.appendChild(child);\r\n                    continue;\r\n                }\r\n                try {\r\n                    if (n.isSVG && name === 'xlink:href') {\r\n                        node.setAttributeNS('http://www.w3.org/1999/xlink', name, value.toString());\r\n                    }\r\n                    else if (name === 'onload' ||\r\n                        name === 'onclick' ||\r\n                        name.substring(0, 7) === 'onmouse') {\r\n                        node.setAttribute('_' + name, value.toString());\r\n                    }\r\n                    else if (tagName === 'meta' &&\r\n                        n.attributes['http-equiv'] === 'Content-Security-Policy' &&\r\n                        name === 'content') {\r\n                        node.setAttribute('csp-content', value.toString());\r\n                        continue;\r\n                    }\r\n                    else if (tagName === 'link' &&\r\n                        (n.attributes.rel === 'preload' ||\r\n                            n.attributes.rel === 'modulepreload') &&\r\n                        n.attributes.as === 'script') {\r\n                    }\r\n                    else if (tagName === 'link' &&\r\n                        n.attributes.rel === 'prefetch' &&\r\n                        typeof n.attributes.href === 'string' &&\r\n                        n.attributes.href.endsWith('.js')) {\r\n                    }\r\n                    else if (tagName === 'img' &&\r\n                        n.attributes.srcset &&\r\n                        n.attributes.rr_dataURL) {\r\n                        node.setAttribute('rrweb-original-srcset', n.attributes.srcset);\r\n                    }\r\n                    else {\r\n                        node.setAttribute(name, value.toString());\r\n                    }\r\n                }\r\n                catch (error) {\r\n                }\r\n            }\r\n            for (const name in specialAttributes) {\r\n                const value = specialAttributes[name];\r\n                if (tagName === 'canvas' && name === 'rr_dataURL') {\r\n                    const image = document.createElement('img');\r\n                    image.onload = () => {\r\n                        const ctx = node.getContext('2d');\r\n                        if (ctx) {\r\n                            ctx.drawImage(image, 0, 0, image.width, image.height);\r\n                        }\r\n                    };\r\n                    image.src = value.toString();\r\n                    if (node.RRNodeType)\r\n                        node.rr_dataURL = value.toString();\r\n                }\r\n                else if (tagName === 'img' && name === 'rr_dataURL') {\r\n                    const image = node;\r\n                    if (!image.currentSrc.startsWith('data:')) {\r\n                        image.setAttribute('rrweb-original-src', n.attributes.src);\r\n                        image.src = value.toString();\r\n                    }\r\n                }\r\n                if (name === 'rr_width') {\r\n                    node.style.width = value.toString();\r\n                }\r\n                else if (name === 'rr_height') {\r\n                    node.style.height = value.toString();\r\n                }\r\n                else if (name === 'rr_mediaCurrentTime' &&\r\n                    typeof value === 'number') {\r\n                    node.currentTime = value;\r\n                }\r\n                else if (name === 'rr_mediaState') {\r\n                    switch (value) {\r\n                        case 'played':\r\n                            node\r\n                                .play()\r\n                                .catch((e) => console.warn('media playback error', e));\r\n                            break;\r\n                        case 'paused':\r\n                            node.pause();\r\n                            break;\r\n                    }\r\n                }\r\n            }\r\n            if (n.isShadowHost) {\r\n                if (!node.shadowRoot) {\r\n                    node.attachShadow({ mode: 'open' });\r\n                }\r\n                else {\r\n                    while (node.shadowRoot.firstChild) {\r\n                        node.shadowRoot.removeChild(node.shadowRoot.firstChild);\r\n                    }\r\n                }\r\n            }\r\n            return node;\r\n        }\r\n        case NodeType.Text:\r\n            return doc.createTextNode(n.isStyle && hackCss\r\n                ? addHoverClass(n.textContent, cache)\r\n                : n.textContent);\r\n        case NodeType.CDATA:\r\n            return doc.createCDATASection(n.textContent);\r\n        case NodeType.Comment:\r\n            return doc.createComment(n.textContent);\r\n        default:\r\n            return null;\r\n    }\r\n}\r\nfunction buildNodeWithSN(n, options) {\r\n    const { doc, mirror, skipChild = false, hackCss = true, afterAppend, cache, } = options;\r\n    if (mirror.has(n.id)) {\r\n        const nodeInMirror = mirror.getNode(n.id);\r\n        const meta = mirror.getMeta(nodeInMirror);\r\n        if (isNodeMetaEqual(meta, n))\r\n            return mirror.getNode(n.id);\r\n    }\r\n    let node = buildNode(n, { doc, hackCss, cache });\r\n    if (!node) {\r\n        return null;\r\n    }\r\n    if (n.rootId && mirror.getNode(n.rootId) !== doc) {\r\n        mirror.replace(n.rootId, doc);\r\n    }\r\n    if (n.type === NodeType.Document) {\r\n        doc.close();\r\n        doc.open();\r\n        if (n.compatMode === 'BackCompat' &&\r\n            n.childNodes &&\r\n            n.childNodes[0].type !== NodeType.DocumentType) {\r\n            if (n.childNodes[0].type === NodeType.Element &&\r\n                'xmlns' in n.childNodes[0].attributes &&\r\n                n.childNodes[0].attributes.xmlns === 'http://www.w3.org/1999/xhtml') {\r\n                doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"\">');\r\n            }\r\n            else {\r\n                doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"\">');\r\n            }\r\n        }\r\n        node = doc;\r\n    }\r\n    mirror.add(node, n);\r\n    if ((n.type === NodeType.Document || n.type === NodeType.Element) &&\r\n        !skipChild) {\r\n        for (const childN of n.childNodes) {\r\n            const childNode = buildNodeWithSN(childN, {\r\n                doc,\r\n                mirror,\r\n                skipChild: false,\r\n                hackCss,\r\n                afterAppend,\r\n                cache,\r\n            });\r\n            if (!childNode) {\r\n                console.warn('Failed to rebuild', childN);\r\n                continue;\r\n            }\r\n            if (childN.isShadow && isElement(node) && node.shadowRoot) {\r\n                node.shadowRoot.appendChild(childNode);\r\n            }\r\n            else if (n.type === NodeType.Document &&\r\n                childN.type == NodeType.Element) {\r\n                const htmlElement = childNode;\r\n                let body = null;\r\n                htmlElement.childNodes.forEach((child) => {\r\n                    if (child.nodeName === 'BODY')\r\n                        body = child;\r\n                });\r\n                if (body) {\r\n                    htmlElement.removeChild(body);\r\n                    node.appendChild(childNode);\r\n                    htmlElement.appendChild(body);\r\n                }\r\n                else {\r\n                    node.appendChild(childNode);\r\n                }\r\n            }\r\n            else {\r\n                node.appendChild(childNode);\r\n            }\r\n            if (afterAppend) {\r\n                afterAppend(childNode, childN.id);\r\n            }\r\n        }\r\n    }\r\n    return node;\r\n}\r\nfunction visit(mirror, onVisit) {\r\n    function walk(node) {\r\n        onVisit(node);\r\n    }\r\n    for (const id of mirror.getIds()) {\r\n        if (mirror.has(id)) {\r\n            walk(mirror.getNode(id));\r\n        }\r\n    }\r\n}\r\nfunction handleScroll(node, mirror) {\r\n    const n = mirror.getMeta(node);\r\n    if ((n === null || n === void 0 ? void 0 : n.type) !== NodeType.Element) {\r\n        return;\r\n    }\r\n    const el = node;\r\n    for (const name in n.attributes) {\r\n        if (!(Object.prototype.hasOwnProperty.call(n.attributes, name) &&\r\n            name.startsWith('rr_'))) {\r\n            continue;\r\n        }\r\n        const value = n.attributes[name];\r\n        if (name === 'rr_scrollLeft') {\r\n            el.scrollLeft = value;\r\n        }\r\n        if (name === 'rr_scrollTop') {\r\n            el.scrollTop = value;\r\n        }\r\n    }\r\n}\r\nfunction rebuild(n, options) {\r\n    const { doc, onVisit, hackCss = true, afterAppend, cache, mirror = new Mirror(), } = options;\r\n    const node = buildNodeWithSN(n, {\r\n        doc,\r\n        mirror,\r\n        skipChild: false,\r\n        hackCss,\r\n        afterAppend,\r\n        cache,\r\n    });\r\n    visit(mirror, (visitedNode) => {\r\n        if (onVisit) {\r\n            onVisit(visitedNode);\r\n        }\r\n        handleScroll(visitedNode, mirror);\r\n    });\r\n    return node;\r\n}\n\nexport { IGNORED_NODE, Mirror, NodeType, addHoverClass, buildNodeWithSN, createCache, createMatchPredicate, createMirror, distanceToMatch, escapeImportStatement, fixSafariColons, genId, getInputType, getInputValue, ignoreAttribute, is2DCanvasBlank, isCSSImportRule, isCSSStyleRule, isElement, isNativeShadowDom, isNodeMetaEqual, isShadowRoot, maskInputValue, needMaskingText, rebuild, serializeNodeWithId, shouldMaskInput, snapshot, stringifyRule, stringifyStylesheet, toLowerCase, toUpperCase, transformAttribute };\n","import { distanceToMatch, IGNORED_NODE, isShadowRoot, createMatchPredicate } from '../../rrweb-snapshot/es/rrweb-snapshot.js';\n\nfunction on(type, fn, target = document) {\r\n    const options = { capture: true, passive: true };\r\n    target.addEventListener(type, fn, options);\r\n    return () => target.removeEventListener(type, fn, options);\r\n}\r\nconst DEPARTED_MIRROR_ACCESS_WARNING = 'Please stop import mirror directly. Instead of that,' +\r\n    '\\r\\n' +\r\n    'now you can use replayer.getMirror() to access the mirror instance of a replayer,' +\r\n    '\\r\\n' +\r\n    'or you can use record.mirror to access the mirror instance during recording.';\r\nlet _mirror = {\r\n    map: {},\r\n    getId() {\r\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n        return -1;\r\n    },\r\n    getNode() {\r\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n        return null;\r\n    },\r\n    removeNodeFromMap() {\r\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n    },\r\n    has() {\r\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n        return false;\r\n    },\r\n    reset() {\r\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n    },\r\n};\r\nif (typeof window !== 'undefined' && window.Proxy && window.Reflect) {\r\n    _mirror = new Proxy(_mirror, {\r\n        get(target, prop, receiver) {\r\n            if (prop === 'map') {\r\n                console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n            }\r\n            return Reflect.get(target, prop, receiver);\r\n        },\r\n    });\r\n}\r\nfunction throttle(func, wait, options = {}) {\r\n    let timeout = null;\r\n    let previous = 0;\r\n    return function (...args) {\r\n        const now = Date.now();\r\n        if (!previous && options.leading === false) {\r\n            previous = now;\r\n        }\r\n        const remaining = wait - (now - previous);\r\n        const context = this;\r\n        if (remaining <= 0 || remaining > wait) {\r\n            if (timeout) {\r\n                clearTimeout(timeout);\r\n                timeout = null;\r\n            }\r\n            previous = now;\r\n            func.apply(context, args);\r\n        }\r\n        else if (!timeout && options.trailing !== false) {\r\n            timeout = setTimeout(() => {\r\n                previous = options.leading === false ? 0 : Date.now();\r\n                timeout = null;\r\n                func.apply(context, args);\r\n            }, remaining);\r\n        }\r\n    };\r\n}\r\nfunction hookSetter(target, key, d, isRevoked, win = window) {\r\n    const original = win.Object.getOwnPropertyDescriptor(target, key);\r\n    win.Object.defineProperty(target, key, isRevoked\r\n        ? d\r\n        : {\r\n            set(value) {\r\n                setTimeout(() => {\r\n                    d.set.call(this, value);\r\n                }, 0);\r\n                if (original && original.set) {\r\n                    original.set.call(this, value);\r\n                }\r\n            },\r\n        });\r\n    return () => hookSetter(target, key, original || {}, true);\r\n}\r\nfunction patch(source, name, replacement) {\r\n    try {\r\n        if (!(name in source)) {\r\n            return () => {\r\n            };\r\n        }\r\n        const original = source[name];\r\n        const wrapped = replacement(original);\r\n        if (typeof wrapped === 'function') {\r\n            wrapped.prototype = wrapped.prototype || {};\r\n            Object.defineProperties(wrapped, {\r\n                __rrweb_original__: {\r\n                    enumerable: false,\r\n                    value: original,\r\n                },\r\n            });\r\n        }\r\n        source[name] = wrapped;\r\n        return () => {\r\n            source[name] = original;\r\n        };\r\n    }\r\n    catch (_a) {\r\n        return () => {\r\n        };\r\n    }\r\n}\r\nlet nowTimestamp = Date.now;\r\nif (!(/[1-9][0-9]{12}/.test(Date.now().toString()))) {\r\n    nowTimestamp = () => new Date().getTime();\r\n}\r\nfunction getWindowScroll(win) {\r\n    var _a, _b, _c, _d, _e, _f;\r\n    const doc = win.document;\r\n    return {\r\n        left: doc.scrollingElement\r\n            ? doc.scrollingElement.scrollLeft\r\n            : win.pageXOffset !== undefined\r\n                ? win.pageXOffset\r\n                : (doc === null || doc === void 0 ? void 0 : doc.documentElement.scrollLeft) ||\r\n                    ((_b = (_a = doc === null || doc === void 0 ? void 0 : doc.body) === null || _a === void 0 ? void 0 : _a.parentElement) === null || _b === void 0 ? void 0 : _b.scrollLeft) ||\r\n                    ((_c = doc === null || doc === void 0 ? void 0 : doc.body) === null || _c === void 0 ? void 0 : _c.scrollLeft) ||\r\n                    0,\r\n        top: doc.scrollingElement\r\n            ? doc.scrollingElement.scrollTop\r\n            : win.pageYOffset !== undefined\r\n                ? win.pageYOffset\r\n                : (doc === null || doc === void 0 ? void 0 : doc.documentElement.scrollTop) ||\r\n                    ((_e = (_d = doc === null || doc === void 0 ? void 0 : doc.body) === null || _d === void 0 ? void 0 : _d.parentElement) === null || _e === void 0 ? void 0 : _e.scrollTop) ||\r\n                    ((_f = doc === null || doc === void 0 ? void 0 : doc.body) === null || _f === void 0 ? void 0 : _f.scrollTop) ||\r\n                    0,\r\n    };\r\n}\r\nfunction getWindowHeight() {\r\n    return (window.innerHeight ||\r\n        (document.documentElement && document.documentElement.clientHeight) ||\r\n        (document.body && document.body.clientHeight));\r\n}\r\nfunction getWindowWidth() {\r\n    return (window.innerWidth ||\r\n        (document.documentElement && document.documentElement.clientWidth) ||\r\n        (document.body && document.body.clientWidth));\r\n}\r\nfunction isBlocked(node, blockClass, blockSelector, unblockSelector, checkAncestors) {\r\n    if (!node) {\r\n        return false;\r\n    }\r\n    const el = node.nodeType === node.ELEMENT_NODE\r\n        ? node\r\n        : node.parentElement;\r\n    if (!el)\r\n        return false;\r\n    const blockedPredicate = createMatchPredicate(blockClass, blockSelector);\r\n    if (!checkAncestors) {\r\n        const isUnblocked = unblockSelector && el.matches(unblockSelector);\r\n        return blockedPredicate(el) && !isUnblocked;\r\n    }\r\n    const blockDistance = distanceToMatch(el, blockedPredicate);\r\n    let unblockDistance = -1;\r\n    if (blockDistance < 0) {\r\n        return false;\r\n    }\r\n    if (unblockSelector) {\r\n        unblockDistance = distanceToMatch(el, createMatchPredicate(null, unblockSelector));\r\n    }\r\n    if (blockDistance > -1 && unblockDistance < 0) {\r\n        return true;\r\n    }\r\n    return blockDistance < unblockDistance;\r\n}\r\nfunction isSerialized(n, mirror) {\r\n    return mirror.getId(n) !== -1;\r\n}\r\nfunction isIgnored(n, mirror) {\r\n    return mirror.getId(n) === IGNORED_NODE;\r\n}\r\nfunction isAncestorRemoved(target, mirror) {\r\n    if (isShadowRoot(target)) {\r\n        return false;\r\n    }\r\n    const id = mirror.getId(target);\r\n    if (!mirror.has(id)) {\r\n        return true;\r\n    }\r\n    if (target.parentNode &&\r\n        target.parentNode.nodeType === target.DOCUMENT_NODE) {\r\n        return false;\r\n    }\r\n    if (!target.parentNode) {\r\n        return true;\r\n    }\r\n    return isAncestorRemoved(target.parentNode, mirror);\r\n}\r\nfunction legacy_isTouchEvent(event) {\r\n    return Boolean(event.changedTouches);\r\n}\r\nfunction polyfill(win = window) {\r\n    if ('NodeList' in win && !win.NodeList.prototype.forEach) {\r\n        win.NodeList.prototype.forEach = Array.prototype\r\n            .forEach;\r\n    }\r\n    if ('DOMTokenList' in win && !win.DOMTokenList.prototype.forEach) {\r\n        win.DOMTokenList.prototype.forEach = Array.prototype\r\n            .forEach;\r\n    }\r\n    if (!Node.prototype.contains) {\r\n        Node.prototype.contains = (...args) => {\r\n            let node = args[0];\r\n            if (!(0 in args)) {\r\n                throw new TypeError('1 argument is required');\r\n            }\r\n            do {\r\n                if (this === node) {\r\n                    return true;\r\n                }\r\n            } while ((node = node && node.parentNode));\r\n            return false;\r\n        };\r\n    }\r\n}\r\nfunction queueToResolveTrees(queue) {\r\n    const queueNodeMap = {};\r\n    const putIntoMap = (m, parent) => {\r\n        const nodeInTree = {\r\n            value: m,\r\n            parent,\r\n            children: [],\r\n        };\r\n        queueNodeMap[m.node.id] = nodeInTree;\r\n        return nodeInTree;\r\n    };\r\n    const queueNodeTrees = [];\r\n    for (const mutation of queue) {\r\n        const { nextId, parentId } = mutation;\r\n        if (nextId && nextId in queueNodeMap) {\r\n            const nextInTree = queueNodeMap[nextId];\r\n            if (nextInTree.parent) {\r\n                const idx = nextInTree.parent.children.indexOf(nextInTree);\r\n                nextInTree.parent.children.splice(idx, 0, putIntoMap(mutation, nextInTree.parent));\r\n            }\r\n            else {\r\n                const idx = queueNodeTrees.indexOf(nextInTree);\r\n                queueNodeTrees.splice(idx, 0, putIntoMap(mutation, null));\r\n            }\r\n            continue;\r\n        }\r\n        if (parentId in queueNodeMap) {\r\n            const parentInTree = queueNodeMap[parentId];\r\n            parentInTree.children.push(putIntoMap(mutation, parentInTree));\r\n            continue;\r\n        }\r\n        queueNodeTrees.push(putIntoMap(mutation, null));\r\n    }\r\n    return queueNodeTrees;\r\n}\r\nfunction iterateResolveTree(tree, cb) {\r\n    cb(tree.value);\r\n    for (let i = tree.children.length - 1; i >= 0; i--) {\r\n        iterateResolveTree(tree.children[i], cb);\r\n    }\r\n}\r\nfunction isSerializedIframe(n, mirror) {\r\n    return Boolean(n.nodeName === 'IFRAME' && mirror.getMeta(n));\r\n}\r\nfunction isSerializedStylesheet(n, mirror) {\r\n    return Boolean(n.nodeName === 'LINK' &&\r\n        n.nodeType === n.ELEMENT_NODE &&\r\n        n.getAttribute &&\r\n        n.getAttribute('rel') === 'stylesheet' &&\r\n        mirror.getMeta(n));\r\n}\r\nfunction getBaseDimension(node, rootIframe) {\r\n    var _a, _b;\r\n    const frameElement = (_b = (_a = node.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView) === null || _b === void 0 ? void 0 : _b.frameElement;\r\n    if (!frameElement || frameElement === rootIframe) {\r\n        return {\r\n            x: 0,\r\n            y: 0,\r\n            relativeScale: 1,\r\n            absoluteScale: 1,\r\n        };\r\n    }\r\n    const frameDimension = frameElement.getBoundingClientRect();\r\n    const frameBaseDimension = getBaseDimension(frameElement, rootIframe);\r\n    const relativeScale = frameDimension.height / frameElement.clientHeight;\r\n    return {\r\n        x: frameDimension.x * frameBaseDimension.relativeScale +\r\n            frameBaseDimension.x,\r\n        y: frameDimension.y * frameBaseDimension.relativeScale +\r\n            frameBaseDimension.y,\r\n        relativeScale,\r\n        absoluteScale: frameBaseDimension.absoluteScale * relativeScale,\r\n    };\r\n}\r\nfunction hasShadowRoot(n) {\r\n    return Boolean(n === null || n === void 0 ? void 0 : n.shadowRoot);\r\n}\r\nfunction getNestedRule(rules, position) {\r\n    const rule = rules[position[0]];\r\n    if (position.length === 1) {\r\n        return rule;\r\n    }\r\n    else {\r\n        return getNestedRule(rule.cssRules[position[1]].cssRules, position.slice(2));\r\n    }\r\n}\r\nfunction getPositionsAndIndex(nestedIndex) {\r\n    const positions = [...nestedIndex];\r\n    const index = positions.pop();\r\n    return { positions, index };\r\n}\r\nfunction uniqueTextMutations(mutations) {\r\n    const idSet = new Set();\r\n    const uniqueMutations = [];\r\n    for (let i = mutations.length; i--;) {\r\n        const mutation = mutations[i];\r\n        if (!idSet.has(mutation.id)) {\r\n            uniqueMutations.push(mutation);\r\n            idSet.add(mutation.id);\r\n        }\r\n    }\r\n    return uniqueMutations;\r\n}\r\nclass StyleSheetMirror {\r\n    constructor() {\r\n        this.id = 1;\r\n        this.styleIDMap = new WeakMap();\r\n        this.idStyleMap = new Map();\r\n    }\r\n    getId(stylesheet) {\r\n        var _a;\r\n        return (_a = this.styleIDMap.get(stylesheet)) !== null && _a !== void 0 ? _a : -1;\r\n    }\r\n    has(stylesheet) {\r\n        return this.styleIDMap.has(stylesheet);\r\n    }\r\n    add(stylesheet, id) {\r\n        if (this.has(stylesheet))\r\n            return this.getId(stylesheet);\r\n        let newId;\r\n        if (id === undefined) {\r\n            newId = this.id++;\r\n        }\r\n        else\r\n            newId = id;\r\n        this.styleIDMap.set(stylesheet, newId);\r\n        this.idStyleMap.set(newId, stylesheet);\r\n        return newId;\r\n    }\r\n    getStyle(id) {\r\n        return this.idStyleMap.get(id) || null;\r\n    }\r\n    reset() {\r\n        this.styleIDMap = new WeakMap();\r\n        this.idStyleMap = new Map();\r\n        this.id = 1;\r\n    }\r\n    generateId() {\r\n        return this.id++;\r\n    }\r\n}\r\nfunction getShadowHost(n) {\r\n    var _a, _b;\r\n    let shadowHost = null;\r\n    if (((_b = (_a = n.getRootNode) === null || _a === void 0 ? void 0 : _a.call(n)) === null || _b === void 0 ? void 0 : _b.nodeType) === Node.DOCUMENT_FRAGMENT_NODE &&\r\n        n.getRootNode().host)\r\n        shadowHost = n.getRootNode().host;\r\n    return shadowHost;\r\n}\r\nfunction getRootShadowHost(n) {\r\n    let rootShadowHost = n;\r\n    let shadowHost;\r\n    while ((shadowHost = getShadowHost(rootShadowHost)))\r\n        rootShadowHost = shadowHost;\r\n    return rootShadowHost;\r\n}\r\nfunction shadowHostInDom(n) {\r\n    const doc = n.ownerDocument;\r\n    if (!doc)\r\n        return false;\r\n    const shadowHost = getRootShadowHost(n);\r\n    return doc.contains(shadowHost);\r\n}\r\nfunction inDom(n) {\r\n    const doc = n.ownerDocument;\r\n    if (!doc)\r\n        return false;\r\n    return doc.contains(n) || shadowHostInDom(n);\r\n}\n\nexport { StyleSheetMirror, _mirror, getBaseDimension, getNestedRule, getPositionsAndIndex, getRootShadowHost, getShadowHost, getWindowHeight, getWindowScroll, getWindowWidth, hasShadowRoot, hookSetter, inDom, isAncestorRemoved, isBlocked, isIgnored, isSerialized, isSerializedIframe, isSerializedStylesheet, iterateResolveTree, legacy_isTouchEvent, nowTimestamp, on, patch, polyfill, queueToResolveTrees, shadowHostInDom, throttle, uniqueTextMutations };\n","var EventType = /* @__PURE__ */ ((EventType2) => {\n  EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n  EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n  EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n  EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n  EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n  EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n  EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n  return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n  IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n  IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n  IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n  IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n  IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n  IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n  IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n  IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n  IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n  IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n  IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n  IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n  IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n  IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n  IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n  IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n  IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n  return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n  MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n  MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n  MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n  MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n  MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n  MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n  MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n  MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n  MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n  MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n  MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n  return MouseInteractions2;\n})(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {\n  PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n  PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n  PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n  return PointerTypes2;\n})(PointerTypes || {});\nvar CanvasContext = /* @__PURE__ */ ((CanvasContext2) => {\n  CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n  CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n  CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n  return CanvasContext2;\n})(CanvasContext || {});\nvar ReplayerEvents = /* @__PURE__ */ ((ReplayerEvents2) => {\n  ReplayerEvents2[\"Start\"] = \"start\";\n  ReplayerEvents2[\"Pause\"] = \"pause\";\n  ReplayerEvents2[\"Resume\"] = \"resume\";\n  ReplayerEvents2[\"Resize\"] = \"resize\";\n  ReplayerEvents2[\"Finish\"] = \"finish\";\n  ReplayerEvents2[\"FullsnapshotRebuilded\"] = \"fullsnapshot-rebuilded\";\n  ReplayerEvents2[\"LoadStylesheetStart\"] = \"load-stylesheet-start\";\n  ReplayerEvents2[\"LoadStylesheetEnd\"] = \"load-stylesheet-end\";\n  ReplayerEvents2[\"SkipStart\"] = \"skip-start\";\n  ReplayerEvents2[\"SkipEnd\"] = \"skip-end\";\n  ReplayerEvents2[\"MouseInteraction\"] = \"mouse-interaction\";\n  ReplayerEvents2[\"EventCast\"] = \"event-cast\";\n  ReplayerEvents2[\"CustomEvent\"] = \"custom-event\";\n  ReplayerEvents2[\"Flush\"] = \"flush\";\n  ReplayerEvents2[\"StateChange\"] = \"state-change\";\n  ReplayerEvents2[\"PlayBack\"] = \"play-back\";\n  ReplayerEvents2[\"Destroy\"] = \"destroy\";\n  return ReplayerEvents2;\n})(ReplayerEvents || {});\n\nexport { CanvasContext, EventType, IncrementalSource, MouseInteractions, PointerTypes, ReplayerEvents };\n","import { isShadowRoot, isNativeShadowDom, getInputType, getInputValue, shouldMaskInput, needMaskingText, maskInputValue, ignoreAttribute, transformAttribute, toLowerCase, IGNORED_NODE, serializeNodeWithId } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { isIgnored, isBlocked, isSerialized, isAncestorRemoved, hasShadowRoot, inDom, getShadowHost, isSerializedIframe, isSerializedStylesheet } from '../utils.js';\n\nfunction isNodeInLinkedList(n) {\r\n    return '__ln' in n;\r\n}\r\nclass DoubleLinkedList {\r\n    constructor() {\r\n        this.length = 0;\r\n        this.head = null;\r\n        this.tail = null;\r\n    }\r\n    get(position) {\r\n        if (position >= this.length) {\r\n            throw new Error('Position outside of list range');\r\n        }\r\n        let current = this.head;\r\n        for (let index = 0; index < position; index++) {\r\n            current = (current === null || current === void 0 ? void 0 : current.next) || null;\r\n        }\r\n        return current;\r\n    }\r\n    addNode(n) {\r\n        const node = {\r\n            value: n,\r\n            previous: null,\r\n            next: null,\r\n        };\r\n        n.__ln = node;\r\n        if (n.previousSibling && isNodeInLinkedList(n.previousSibling)) {\r\n            const current = n.previousSibling.__ln.next;\r\n            node.next = current;\r\n            node.previous = n.previousSibling.__ln;\r\n            n.previousSibling.__ln.next = node;\r\n            if (current) {\r\n                current.previous = node;\r\n            }\r\n        }\r\n        else if (n.nextSibling &&\r\n            isNodeInLinkedList(n.nextSibling) &&\r\n            n.nextSibling.__ln.previous) {\r\n            const current = n.nextSibling.__ln.previous;\r\n            node.previous = current;\r\n            node.next = n.nextSibling.__ln;\r\n            n.nextSibling.__ln.previous = node;\r\n            if (current) {\r\n                current.next = node;\r\n            }\r\n        }\r\n        else {\r\n            if (this.head) {\r\n                this.head.previous = node;\r\n            }\r\n            node.next = this.head;\r\n            this.head = node;\r\n        }\r\n        if (node.next === null) {\r\n            this.tail = node;\r\n        }\r\n        this.length++;\r\n    }\r\n    removeNode(n) {\r\n        const current = n.__ln;\r\n        if (!this.head) {\r\n            return;\r\n        }\r\n        if (!current.previous) {\r\n            this.head = current.next;\r\n            if (this.head) {\r\n                this.head.previous = null;\r\n            }\r\n            else {\r\n                this.tail = null;\r\n            }\r\n        }\r\n        else {\r\n            current.previous.next = current.next;\r\n            if (current.next) {\r\n                current.next.previous = current.previous;\r\n            }\r\n            else {\r\n                this.tail = current.previous;\r\n            }\r\n        }\r\n        if (n.__ln) {\r\n            delete n.__ln;\r\n        }\r\n        this.length--;\r\n    }\r\n}\r\nconst moveKey = (id, parentId) => `${id}@${parentId}`;\r\nclass MutationBuffer {\r\n    constructor() {\r\n        this.frozen = false;\r\n        this.locked = false;\r\n        this.texts = [];\r\n        this.attributes = [];\r\n        this.removes = [];\r\n        this.mapRemoves = [];\r\n        this.movedMap = {};\r\n        this.addedSet = new Set();\r\n        this.movedSet = new Set();\r\n        this.droppedSet = new Set();\r\n        this.processMutations = (mutations) => {\r\n            mutations.forEach(this.processMutation);\r\n            this.emit();\r\n        };\r\n        this.emit = () => {\r\n            if (this.frozen || this.locked) {\r\n                return;\r\n            }\r\n            const adds = [];\r\n            const addedIds = new Set();\r\n            const addList = new DoubleLinkedList();\r\n            const getNextId = (n) => {\r\n                let ns = n;\r\n                let nextId = IGNORED_NODE;\r\n                while (nextId === IGNORED_NODE) {\r\n                    ns = ns && ns.nextSibling;\r\n                    nextId = ns && this.mirror.getId(ns);\r\n                }\r\n                return nextId;\r\n            };\r\n            const pushAdd = (n) => {\r\n                if (!n.parentNode || !inDom(n)) {\r\n                    return;\r\n                }\r\n                const parentId = isShadowRoot(n.parentNode)\r\n                    ? this.mirror.getId(getShadowHost(n))\r\n                    : this.mirror.getId(n.parentNode);\r\n                const nextId = getNextId(n);\r\n                if (parentId === -1 || nextId === -1) {\r\n                    return addList.addNode(n);\r\n                }\r\n                const sn = serializeNodeWithId(n, {\r\n                    doc: this.doc,\r\n                    mirror: this.mirror,\r\n                    blockClass: this.blockClass,\r\n                    blockSelector: this.blockSelector,\r\n                    maskAllText: this.maskAllText,\r\n                    unblockSelector: this.unblockSelector,\r\n                    maskTextClass: this.maskTextClass,\r\n                    unmaskTextClass: this.unmaskTextClass,\r\n                    maskTextSelector: this.maskTextSelector,\r\n                    unmaskTextSelector: this.unmaskTextSelector,\r\n                    skipChild: true,\r\n                    newlyAddedElement: true,\r\n                    inlineStylesheet: this.inlineStylesheet,\r\n                    maskInputOptions: this.maskInputOptions,\r\n                    maskAttributeFn: this.maskAttributeFn,\r\n                    maskTextFn: this.maskTextFn,\r\n                    maskInputFn: this.maskInputFn,\r\n                    slimDOMOptions: this.slimDOMOptions,\r\n                    dataURLOptions: this.dataURLOptions,\r\n                    recordCanvas: this.recordCanvas,\r\n                    inlineImages: this.inlineImages,\r\n                    onSerialize: (currentN) => {\r\n                        if (isSerializedIframe(currentN, this.mirror)) {\r\n                            this.iframeManager.addIframe(currentN);\r\n                        }\r\n                        if (isSerializedStylesheet(currentN, this.mirror)) {\r\n                            this.stylesheetManager.trackLinkElement(currentN);\r\n                        }\r\n                        if (hasShadowRoot(n)) {\r\n                            this.shadowDomManager.addShadowRoot(n.shadowRoot, this.doc);\r\n                        }\r\n                    },\r\n                    onIframeLoad: (iframe, childSn) => {\r\n                        this.iframeManager.attachIframe(iframe, childSn);\r\n                        this.shadowDomManager.observeAttachShadow(iframe);\r\n                    },\r\n                    onStylesheetLoad: (link, childSn) => {\r\n                        this.stylesheetManager.attachLinkElement(link, childSn);\r\n                    },\r\n                });\r\n                if (sn) {\r\n                    adds.push({\r\n                        parentId,\r\n                        nextId,\r\n                        node: sn,\r\n                    });\r\n                    addedIds.add(sn.id);\r\n                }\r\n            };\r\n            while (this.mapRemoves.length) {\r\n                this.mirror.removeNodeFromMap(this.mapRemoves.shift());\r\n            }\r\n            for (const n of this.movedSet) {\r\n                if (isParentRemoved(this.removes, n, this.mirror) &&\r\n                    !this.movedSet.has(n.parentNode)) {\r\n                    continue;\r\n                }\r\n                pushAdd(n);\r\n            }\r\n            for (const n of this.addedSet) {\r\n                if (!isAncestorInSet(this.droppedSet, n) &&\r\n                    !isParentRemoved(this.removes, n, this.mirror)) {\r\n                    pushAdd(n);\r\n                }\r\n                else if (isAncestorInSet(this.movedSet, n)) {\r\n                    pushAdd(n);\r\n                }\r\n                else {\r\n                    this.droppedSet.add(n);\r\n                }\r\n            }\r\n            let candidate = null;\r\n            while (addList.length) {\r\n                let node = null;\r\n                if (candidate) {\r\n                    const parentId = this.mirror.getId(candidate.value.parentNode);\r\n                    const nextId = getNextId(candidate.value);\r\n                    if (parentId !== -1 && nextId !== -1) {\r\n                        node = candidate;\r\n                    }\r\n                }\r\n                if (!node) {\r\n                    let tailNode = addList.tail;\r\n                    while (tailNode) {\r\n                        const _node = tailNode;\r\n                        tailNode = tailNode.previous;\r\n                        if (_node) {\r\n                            const parentId = this.mirror.getId(_node.value.parentNode);\r\n                            const nextId = getNextId(_node.value);\r\n                            if (nextId === -1)\r\n                                continue;\r\n                            else if (parentId !== -1) {\r\n                                node = _node;\r\n                                break;\r\n                            }\r\n                            else {\r\n                                const unhandledNode = _node.value;\r\n                                if (unhandledNode.parentNode &&\r\n                                    unhandledNode.parentNode.nodeType ===\r\n                                        Node.DOCUMENT_FRAGMENT_NODE) {\r\n                                    const shadowHost = unhandledNode.parentNode\r\n                                        .host;\r\n                                    const parentId = this.mirror.getId(shadowHost);\r\n                                    if (parentId !== -1) {\r\n                                        node = _node;\r\n                                        break;\r\n                                    }\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                if (!node) {\r\n                    while (addList.head) {\r\n                        addList.removeNode(addList.head.value);\r\n                    }\r\n                    break;\r\n                }\r\n                candidate = node.previous;\r\n                addList.removeNode(node.value);\r\n                pushAdd(node.value);\r\n            }\r\n            const payload = {\r\n                texts: this.texts\r\n                    .map((text) => ({\r\n                    id: this.mirror.getId(text.node),\r\n                    value: text.value,\r\n                }))\r\n                    .filter((text) => !addedIds.has(text.id))\r\n                    .filter((text) => this.mirror.has(text.id)),\r\n                attributes: this.attributes\r\n                    .map((attribute) => {\r\n                    const { attributes } = attribute;\r\n                    if (typeof attributes.style === 'string') {\r\n                        const diffAsStr = JSON.stringify(attribute.styleDiff);\r\n                        const unchangedAsStr = JSON.stringify(attribute._unchangedStyles);\r\n                        if (diffAsStr.length < attributes.style.length) {\r\n                            if ((diffAsStr + unchangedAsStr).split('var(').length ===\r\n                                attributes.style.split('var(').length) {\r\n                                attributes.style = attribute.styleDiff;\r\n                            }\r\n                        }\r\n                    }\r\n                    return {\r\n                        id: this.mirror.getId(attribute.node),\r\n                        attributes: attributes,\r\n                    };\r\n                })\r\n                    .filter((attribute) => !addedIds.has(attribute.id))\r\n                    .filter((attribute) => this.mirror.has(attribute.id)),\r\n                removes: this.removes,\r\n                adds,\r\n            };\r\n            if (!payload.texts.length &&\r\n                !payload.attributes.length &&\r\n                !payload.removes.length &&\r\n                !payload.adds.length) {\r\n                return;\r\n            }\r\n            this.texts = [];\r\n            this.attributes = [];\r\n            this.removes = [];\r\n            this.addedSet = new Set();\r\n            this.movedSet = new Set();\r\n            this.droppedSet = new Set();\r\n            this.movedMap = {};\r\n            this.mutationCb(payload);\r\n        };\r\n        this.processMutation = (m) => {\r\n            if (isIgnored(m.target, this.mirror)) {\r\n                return;\r\n            }\r\n            let unattachedDoc;\r\n            try {\r\n                unattachedDoc = document.implementation.createHTMLDocument();\r\n            }\r\n            catch (e) {\r\n                unattachedDoc = this.doc;\r\n            }\r\n            switch (m.type) {\r\n                case 'characterData': {\r\n                    const value = m.target.textContent;\r\n                    if (!isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) &&\r\n                        value !== m.oldValue) {\r\n                        this.texts.push({\r\n                            value: needMaskingText(m.target, this.maskTextClass, this.maskTextSelector, this.unmaskTextClass, this.unmaskTextSelector, this.maskAllText) && value\r\n                                ? this.maskTextFn\r\n                                    ? this.maskTextFn(value)\r\n                                    : value.replace(/[\\S]/g, '*')\r\n                                : value,\r\n                            node: m.target,\r\n                        });\r\n                    }\r\n                    break;\r\n                }\r\n                case 'attributes': {\r\n                    const target = m.target;\r\n                    let attributeName = m.attributeName;\r\n                    let value = m.target.getAttribute(attributeName);\r\n                    if (attributeName === 'value') {\r\n                        const type = getInputType(target);\r\n                        const tagName = target.tagName;\r\n                        value = getInputValue(target, tagName, type);\r\n                        const isInputMasked = shouldMaskInput({\r\n                            maskInputOptions: this.maskInputOptions,\r\n                            tagName,\r\n                            type,\r\n                        });\r\n                        const forceMask = needMaskingText(m.target, this.maskTextClass, this.maskTextSelector, this.unmaskTextClass, this.unmaskTextSelector, isInputMasked);\r\n                        value = maskInputValue({\r\n                            isMasked: forceMask,\r\n                            element: target,\r\n                            value,\r\n                            maskInputFn: this.maskInputFn,\r\n                        });\r\n                    }\r\n                    if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) ||\r\n                        value === m.oldValue) {\r\n                        return;\r\n                    }\r\n                    let item = this.attributes.find((a) => a.node === m.target);\r\n                    if (target.tagName === 'IFRAME' &&\r\n                        attributeName === 'src' &&\r\n                        !this.keepIframeSrcFn(value)) {\r\n                        if (!target.contentDocument) {\r\n                            attributeName = 'rr_src';\r\n                        }\r\n                        else {\r\n                            return;\r\n                        }\r\n                    }\r\n                    if (!item) {\r\n                        item = {\r\n                            node: m.target,\r\n                            attributes: {},\r\n                            styleDiff: {},\r\n                            _unchangedStyles: {},\r\n                        };\r\n                        this.attributes.push(item);\r\n                    }\r\n                    if (attributeName === 'type' &&\r\n                        target.tagName === 'INPUT' &&\r\n                        (m.oldValue || '').toLowerCase() === 'password') {\r\n                        target.setAttribute('data-rr-is-password', 'true');\r\n                    }\r\n                    if (!ignoreAttribute(target.tagName, attributeName)) {\r\n                        item.attributes[attributeName] = transformAttribute(this.doc, toLowerCase(target.tagName), toLowerCase(attributeName), value, target, this.maskAttributeFn);\r\n                        if (attributeName === 'style') {\r\n                            const old = unattachedDoc.createElement('span');\r\n                            if (m.oldValue) {\r\n                                old.setAttribute('style', m.oldValue);\r\n                            }\r\n                            for (const pname of Array.from(target.style)) {\r\n                                const newValue = target.style.getPropertyValue(pname);\r\n                                const newPriority = target.style.getPropertyPriority(pname);\r\n                                if (newValue !== old.style.getPropertyValue(pname) ||\r\n                                    newPriority !== old.style.getPropertyPriority(pname)) {\r\n                                    if (newPriority === '') {\r\n                                        item.styleDiff[pname] = newValue;\r\n                                    }\r\n                                    else {\r\n                                        item.styleDiff[pname] = [newValue, newPriority];\r\n                                    }\r\n                                }\r\n                                else {\r\n                                    item._unchangedStyles[pname] = [newValue, newPriority];\r\n                                }\r\n                            }\r\n                            for (const pname of Array.from(old.style)) {\r\n                                if (target.style.getPropertyValue(pname) === '') {\r\n                                    item.styleDiff[pname] = false;\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                    break;\r\n                }\r\n                case 'childList': {\r\n                    if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, true)) {\r\n                        return;\r\n                    }\r\n                    m.addedNodes.forEach((n) => this.genAdds(n, m.target));\r\n                    m.removedNodes.forEach((n) => {\r\n                        const nodeId = this.mirror.getId(n);\r\n                        const parentId = isShadowRoot(m.target)\r\n                            ? this.mirror.getId(m.target.host)\r\n                            : this.mirror.getId(m.target);\r\n                        if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) ||\r\n                            isIgnored(n, this.mirror) ||\r\n                            !isSerialized(n, this.mirror)) {\r\n                            return;\r\n                        }\r\n                        if (this.addedSet.has(n)) {\r\n                            deepDelete(this.addedSet, n);\r\n                            this.droppedSet.add(n);\r\n                        }\r\n                        else if (this.addedSet.has(m.target) && nodeId === -1) ;\r\n                        else if (isAncestorRemoved(m.target, this.mirror)) ;\r\n                        else if (this.movedSet.has(n) &&\r\n                            this.movedMap[moveKey(nodeId, parentId)]) {\r\n                            deepDelete(this.movedSet, n);\r\n                        }\r\n                        else {\r\n                            this.removes.push({\r\n                                parentId,\r\n                                id: nodeId,\r\n                                isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target)\r\n                                    ? true\r\n                                    : undefined,\r\n                            });\r\n                        }\r\n                        this.mapRemoves.push(n);\r\n                    });\r\n                    break;\r\n                }\r\n            }\r\n        };\r\n        this.genAdds = (n, target) => {\r\n            if (this.processedNodeManager.inOtherBuffer(n, this))\r\n                return;\r\n            if (this.addedSet.has(n) || this.movedSet.has(n))\r\n                return;\r\n            if (this.mirror.hasNode(n)) {\r\n                if (isIgnored(n, this.mirror)) {\r\n                    return;\r\n                }\r\n                this.movedSet.add(n);\r\n                let targetId = null;\r\n                if (target && this.mirror.hasNode(target)) {\r\n                    targetId = this.mirror.getId(target);\r\n                }\r\n                if (targetId && targetId !== -1) {\r\n                    this.movedMap[moveKey(this.mirror.getId(n), targetId)] = true;\r\n                }\r\n            }\r\n            else {\r\n                this.addedSet.add(n);\r\n                this.droppedSet.delete(n);\r\n            }\r\n            if (!isBlocked(n, this.blockClass, this.blockSelector, this.unblockSelector, false)) {\r\n                n.childNodes.forEach((childN) => this.genAdds(childN));\r\n                if (hasShadowRoot(n)) {\r\n                    n.shadowRoot.childNodes.forEach((childN) => {\r\n                        this.processedNodeManager.add(childN, this);\r\n                        this.genAdds(childN, n);\r\n                    });\r\n                }\r\n            }\r\n        };\r\n    }\r\n    init(options) {\r\n        [\r\n            'mutationCb',\r\n            'blockClass',\r\n            'blockSelector',\r\n            'unblockSelector',\r\n            'maskAllText',\r\n            'maskTextClass',\r\n            'unmaskTextClass',\r\n            'maskTextSelector',\r\n            'unmaskTextSelector',\r\n            'inlineStylesheet',\r\n            'maskInputOptions',\r\n            'maskAttributeFn',\r\n            'maskTextFn',\r\n            'maskInputFn',\r\n            'keepIframeSrcFn',\r\n            'recordCanvas',\r\n            'inlineImages',\r\n            'slimDOMOptions',\r\n            'dataURLOptions',\r\n            'doc',\r\n            'mirror',\r\n            'iframeManager',\r\n            'stylesheetManager',\r\n            'shadowDomManager',\r\n            'canvasManager',\r\n            'processedNodeManager',\r\n        ].forEach((key) => {\r\n            this[key] = options[key];\r\n        });\r\n    }\r\n    freeze() {\r\n        this.frozen = true;\r\n        this.canvasManager.freeze();\r\n    }\r\n    unfreeze() {\r\n        this.frozen = false;\r\n        this.canvasManager.unfreeze();\r\n        this.emit();\r\n    }\r\n    isFrozen() {\r\n        return this.frozen;\r\n    }\r\n    lock() {\r\n        this.locked = true;\r\n        this.canvasManager.lock();\r\n    }\r\n    unlock() {\r\n        this.locked = false;\r\n        this.canvasManager.unlock();\r\n        this.emit();\r\n    }\r\n    reset() {\r\n        this.shadowDomManager.reset();\r\n        this.canvasManager.reset();\r\n    }\r\n}\r\nfunction deepDelete(addsSet, n) {\r\n    addsSet.delete(n);\r\n    n.childNodes.forEach((childN) => deepDelete(addsSet, childN));\r\n}\r\nfunction isParentRemoved(removes, n, mirror) {\r\n    if (removes.length === 0)\r\n        return false;\r\n    return _isParentRemoved(removes, n, mirror);\r\n}\r\nfunction _isParentRemoved(removes, n, mirror) {\r\n    const { parentNode } = n;\r\n    if (!parentNode) {\r\n        return false;\r\n    }\r\n    const parentId = mirror.getId(parentNode);\r\n    if (removes.some((r) => r.id === parentId)) {\r\n        return true;\r\n    }\r\n    return _isParentRemoved(removes, parentNode, mirror);\r\n}\r\nfunction isAncestorInSet(set, n) {\r\n    if (set.size === 0)\r\n        return false;\r\n    return _isAncestorInSet(set, n);\r\n}\r\nfunction _isAncestorInSet(set, n) {\r\n    const { parentNode } = n;\r\n    if (!parentNode) {\r\n        return false;\r\n    }\r\n    if (set.has(parentNode)) {\r\n        return true;\r\n    }\r\n    return _isAncestorInSet(set, parentNode);\r\n}\n\nexport { MutationBuffer as default };\n","let errorHandler;\r\nfunction registerErrorHandler(handler) {\r\n    errorHandler = handler;\r\n}\r\nfunction unregisterErrorHandler() {\r\n    errorHandler = undefined;\r\n}\r\nconst callbackWrapper = (cb) => {\r\n    if (!errorHandler) {\r\n        return cb;\r\n    }\r\n    const rrwebWrapped = ((...rest) => {\r\n        try {\r\n            return cb(...rest);\r\n        }\r\n        catch (error) {\r\n            if (errorHandler && errorHandler(error) === true) {\r\n                return () => {\r\n                };\r\n            }\r\n            throw error;\r\n        }\r\n    });\r\n    return rrwebWrapped;\r\n};\n\nexport { callbackWrapper, registerErrorHandler, unregisterErrorHandler };\n","import { toLowerCase, toUpperCase, getInputType, getInputValue, shouldMaskInput, needMaskingText, maskInputValue } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { on, throttle, isBlocked, getWindowScroll, getWindowHeight, getWindowWidth, hookSetter, patch, legacy_isTouchEvent, nowTimestamp } from '../utils.js';\nimport { MouseInteractions, IncrementalSource, PointerTypes } from '../../../types/dist/rrweb-types.js';\nimport MutationBuffer from './mutation.js';\nimport { callbackWrapper } from './error-handler.js';\n\nconst mutationBuffers = [];\r\nfunction getEventTarget(event) {\r\n    try {\r\n        if ('composedPath' in event) {\r\n            const path = event.composedPath();\r\n            if (path.length) {\r\n                return path[0];\r\n            }\r\n        }\r\n        else if ('path' in event && event.path.length) {\r\n            return event.path[0];\r\n        }\r\n    }\r\n    catch (_a) {\r\n    }\r\n    return event && event.target;\r\n}\r\nfunction initMutationObserver(options, rootEl) {\r\n    var _a, _b;\r\n    const mutationBuffer = new MutationBuffer();\r\n    mutationBuffers.push(mutationBuffer);\r\n    mutationBuffer.init(options);\r\n    let mutationObserverCtor = window.MutationObserver ||\r\n        window.__rrMutationObserver;\r\n    const angularZoneSymbol = (_b = (_a = window === null || window === void 0 ? void 0 : window.Zone) === null || _a === void 0 ? void 0 : _a.__symbol__) === null || _b === void 0 ? void 0 : _b.call(_a, 'MutationObserver');\r\n    if (angularZoneSymbol &&\r\n        window[angularZoneSymbol]) {\r\n        mutationObserverCtor = window[angularZoneSymbol];\r\n    }\r\n    const observer = new mutationObserverCtor(callbackWrapper((mutations) => {\r\n        if (options.onMutation && options.onMutation(mutations) === false) {\r\n            return;\r\n        }\r\n        mutationBuffer.processMutations.bind(mutationBuffer)(mutations);\r\n    }));\r\n    observer.observe(rootEl, {\r\n        attributes: true,\r\n        attributeOldValue: true,\r\n        characterData: true,\r\n        characterDataOldValue: true,\r\n        childList: true,\r\n        subtree: true,\r\n    });\r\n    return observer;\r\n}\r\nfunction initMoveObserver({ mousemoveCb, sampling, doc, mirror, }) {\r\n    if (sampling.mousemove === false) {\r\n        return () => {\r\n        };\r\n    }\r\n    const threshold = typeof sampling.mousemove === 'number' ? sampling.mousemove : 50;\r\n    const callbackThreshold = typeof sampling.mousemoveCallback === 'number'\r\n        ? sampling.mousemoveCallback\r\n        : 500;\r\n    let positions = [];\r\n    let timeBaseline;\r\n    const wrappedCb = throttle(callbackWrapper((source) => {\r\n        const totalOffset = Date.now() - timeBaseline;\r\n        mousemoveCb(positions.map((p) => {\r\n            p.timeOffset -= totalOffset;\r\n            return p;\r\n        }), source);\r\n        positions = [];\r\n        timeBaseline = null;\r\n    }), callbackThreshold);\r\n    const updatePosition = callbackWrapper(throttle(callbackWrapper((evt) => {\r\n        const target = getEventTarget(evt);\r\n        const { clientX, clientY } = legacy_isTouchEvent(evt)\r\n            ? evt.changedTouches[0]\r\n            : evt;\r\n        if (!timeBaseline) {\r\n            timeBaseline = nowTimestamp();\r\n        }\r\n        positions.push({\r\n            x: clientX,\r\n            y: clientY,\r\n            id: mirror.getId(target),\r\n            timeOffset: nowTimestamp() - timeBaseline,\r\n        });\r\n        wrappedCb(typeof DragEvent !== 'undefined' && evt instanceof DragEvent\r\n            ? IncrementalSource.Drag\r\n            : evt instanceof MouseEvent\r\n                ? IncrementalSource.MouseMove\r\n                : IncrementalSource.TouchMove);\r\n    }), threshold, {\r\n        trailing: false,\r\n    }));\r\n    const handlers = [\r\n        on('mousemove', updatePosition, doc),\r\n        on('touchmove', updatePosition, doc),\r\n        on('drag', updatePosition, doc),\r\n    ];\r\n    return callbackWrapper(() => {\r\n        handlers.forEach((h) => h());\r\n    });\r\n}\r\nfunction initMouseInteractionObserver({ mouseInteractionCb, doc, mirror, blockClass, blockSelector, unblockSelector, sampling, }) {\r\n    if (sampling.mouseInteraction === false) {\r\n        return () => {\r\n        };\r\n    }\r\n    const disableMap = sampling.mouseInteraction === true ||\r\n        sampling.mouseInteraction === undefined\r\n        ? {}\r\n        : sampling.mouseInteraction;\r\n    const handlers = [];\r\n    let currentPointerType = null;\r\n    const getHandler = (eventKey) => {\r\n        return (event) => {\r\n            const target = getEventTarget(event);\r\n            if (isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\r\n                return;\r\n            }\r\n            let pointerType = null;\r\n            let thisEventKey = eventKey;\r\n            if ('pointerType' in event) {\r\n                switch (event.pointerType) {\r\n                    case 'mouse':\r\n                        pointerType = PointerTypes.Mouse;\r\n                        break;\r\n                    case 'touch':\r\n                        pointerType = PointerTypes.Touch;\r\n                        break;\r\n                    case 'pen':\r\n                        pointerType = PointerTypes.Pen;\r\n                        break;\r\n                }\r\n                if (pointerType === PointerTypes.Touch) {\r\n                    if (MouseInteractions[eventKey] === MouseInteractions.MouseDown) {\r\n                        thisEventKey = 'TouchStart';\r\n                    }\r\n                    else if (MouseInteractions[eventKey] === MouseInteractions.MouseUp) {\r\n                        thisEventKey = 'TouchEnd';\r\n                    }\r\n                }\r\n                else if (pointerType === PointerTypes.Pen) ;\r\n            }\r\n            else if (legacy_isTouchEvent(event)) {\r\n                pointerType = PointerTypes.Touch;\r\n            }\r\n            if (pointerType !== null) {\r\n                currentPointerType = pointerType;\r\n                if ((thisEventKey.startsWith('Touch') &&\r\n                    pointerType === PointerTypes.Touch) ||\r\n                    (thisEventKey.startsWith('Mouse') &&\r\n                        pointerType === PointerTypes.Mouse)) {\r\n                    pointerType = null;\r\n                }\r\n            }\r\n            else if (MouseInteractions[eventKey] === MouseInteractions.Click) {\r\n                pointerType = currentPointerType;\r\n                currentPointerType = null;\r\n            }\r\n            const e = legacy_isTouchEvent(event) ? event.changedTouches[0] : event;\r\n            if (!e) {\r\n                return;\r\n            }\r\n            const id = mirror.getId(target);\r\n            const { clientX, clientY } = e;\r\n            callbackWrapper(mouseInteractionCb)(Object.assign({ type: MouseInteractions[thisEventKey], id, x: clientX, y: clientY }, (pointerType !== null && { pointerType })));\r\n        };\r\n    };\r\n    Object.keys(MouseInteractions)\r\n        .filter((key) => Number.isNaN(Number(key)) &&\r\n        !key.endsWith('_Departed') &&\r\n        disableMap[key] !== false)\r\n        .forEach((eventKey) => {\r\n        let eventName = toLowerCase(eventKey);\r\n        const handler = getHandler(eventKey);\r\n        if (window.PointerEvent) {\r\n            switch (MouseInteractions[eventKey]) {\r\n                case MouseInteractions.MouseDown:\r\n                case MouseInteractions.MouseUp:\r\n                    eventName = eventName.replace('mouse', 'pointer');\r\n                    break;\r\n                case MouseInteractions.TouchStart:\r\n                case MouseInteractions.TouchEnd:\r\n                    return;\r\n            }\r\n        }\r\n        handlers.push(on(eventName, handler, doc));\r\n    });\r\n    return callbackWrapper(() => {\r\n        handlers.forEach((h) => h());\r\n    });\r\n}\r\nfunction initScrollObserver({ scrollCb, doc, mirror, blockClass, blockSelector, unblockSelector, sampling, }) {\r\n    const updatePosition = callbackWrapper(throttle(callbackWrapper((evt) => {\r\n        const target = getEventTarget(evt);\r\n        if (!target ||\r\n            isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\r\n            return;\r\n        }\r\n        const id = mirror.getId(target);\r\n        if (target === doc && doc.defaultView) {\r\n            const scrollLeftTop = getWindowScroll(doc.defaultView);\r\n            scrollCb({\r\n                id,\r\n                x: scrollLeftTop.left,\r\n                y: scrollLeftTop.top,\r\n            });\r\n        }\r\n        else {\r\n            scrollCb({\r\n                id,\r\n                x: target.scrollLeft,\r\n                y: target.scrollTop,\r\n            });\r\n        }\r\n    }), sampling.scroll || 100));\r\n    return on('scroll', updatePosition, doc);\r\n}\r\nfunction initViewportResizeObserver({ viewportResizeCb }, { win }) {\r\n    let lastH = -1;\r\n    let lastW = -1;\r\n    const updateDimension = callbackWrapper(throttle(callbackWrapper(() => {\r\n        const height = getWindowHeight();\r\n        const width = getWindowWidth();\r\n        if (lastH !== height || lastW !== width) {\r\n            viewportResizeCb({\r\n                width: Number(width),\r\n                height: Number(height),\r\n            });\r\n            lastH = height;\r\n            lastW = width;\r\n        }\r\n    }), 200));\r\n    return on('resize', updateDimension, win);\r\n}\r\nfunction wrapEventWithUserTriggeredFlag(v, enable) {\r\n    const value = Object.assign({}, v);\r\n    if (!enable)\r\n        delete value.userTriggered;\r\n    return value;\r\n}\r\nconst INPUT_TAGS = ['INPUT', 'TEXTAREA', 'SELECT'];\r\nconst lastInputValueMap = new WeakMap();\r\nfunction initInputObserver({ inputCb, doc, mirror, blockClass, blockSelector, unblockSelector, ignoreClass, ignoreSelector, maskInputOptions, maskInputFn, sampling, userTriggeredOnInput, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, }) {\r\n    function eventHandler(event) {\r\n        let target = getEventTarget(event);\r\n        const userTriggered = event.isTrusted;\r\n        const tagName = target && toUpperCase(target.tagName);\r\n        if (tagName === 'OPTION')\r\n            target = target.parentElement;\r\n        if (!target ||\r\n            !tagName ||\r\n            INPUT_TAGS.indexOf(tagName) < 0 ||\r\n            isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\r\n            return;\r\n        }\r\n        const el = target;\r\n        if (el.classList.contains(ignoreClass) ||\r\n            (ignoreSelector && el.matches(ignoreSelector))) {\r\n            return;\r\n        }\r\n        const type = getInputType(target);\r\n        let text = getInputValue(el, tagName, type);\r\n        let isChecked = false;\r\n        const isInputMasked = shouldMaskInput({\r\n            maskInputOptions,\r\n            tagName,\r\n            type,\r\n        });\r\n        const forceMask = needMaskingText(target, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked);\r\n        if (type === 'radio' || type === 'checkbox') {\r\n            isChecked = target.checked;\r\n        }\r\n        text = maskInputValue({\r\n            isMasked: forceMask,\r\n            element: target,\r\n            value: text,\r\n            maskInputFn,\r\n        });\r\n        cbWithDedup(target, callbackWrapper(wrapEventWithUserTriggeredFlag)({ text, isChecked, userTriggered }, userTriggeredOnInput));\r\n        const name = target.name;\r\n        if (type === 'radio' && name && isChecked) {\r\n            doc\r\n                .querySelectorAll(`input[type=\"radio\"][name=\"${name}\"]`)\r\n                .forEach((el) => {\r\n                if (el !== target) {\r\n                    const text = maskInputValue({\r\n                        isMasked: forceMask,\r\n                        element: el,\r\n                        value: getInputValue(el, tagName, type),\r\n                        maskInputFn,\r\n                    });\r\n                    cbWithDedup(el, callbackWrapper(wrapEventWithUserTriggeredFlag)({\r\n                        text,\r\n                        isChecked: !isChecked,\r\n                        userTriggered: false,\r\n                    }, userTriggeredOnInput));\r\n                }\r\n            });\r\n        }\r\n    }\r\n    function cbWithDedup(target, v) {\r\n        const lastInputValue = lastInputValueMap.get(target);\r\n        if (!lastInputValue ||\r\n            lastInputValue.text !== v.text ||\r\n            lastInputValue.isChecked !== v.isChecked) {\r\n            lastInputValueMap.set(target, v);\r\n            const id = mirror.getId(target);\r\n            callbackWrapper(inputCb)(Object.assign(Object.assign({}, v), { id }));\r\n        }\r\n    }\r\n    const events = sampling.input === 'last' ? ['change'] : ['input', 'change'];\r\n    const handlers = events.map((eventName) => on(eventName, callbackWrapper(eventHandler), doc));\r\n    const currentWindow = doc.defaultView;\r\n    if (!currentWindow) {\r\n        return () => {\r\n            handlers.forEach((h) => h());\r\n        };\r\n    }\r\n    const propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(currentWindow.HTMLInputElement.prototype, 'value');\r\n    const hookProperties = [\r\n        [currentWindow.HTMLInputElement.prototype, 'value'],\r\n        [currentWindow.HTMLInputElement.prototype, 'checked'],\r\n        [currentWindow.HTMLSelectElement.prototype, 'value'],\r\n        [currentWindow.HTMLTextAreaElement.prototype, 'value'],\r\n        [currentWindow.HTMLSelectElement.prototype, 'selectedIndex'],\r\n        [currentWindow.HTMLOptionElement.prototype, 'selected'],\r\n    ];\r\n    if (propertyDescriptor && propertyDescriptor.set) {\r\n        handlers.push(...hookProperties.map((p) => hookSetter(p[0], p[1], {\r\n            set() {\r\n                callbackWrapper(eventHandler)({\r\n                    target: this,\r\n                    isTrusted: false,\r\n                });\r\n            },\r\n        }, false, currentWindow)));\r\n    }\r\n    return callbackWrapper(() => {\r\n        handlers.forEach((h) => h());\r\n    });\r\n}\r\nfunction getNestedCSSRulePositions(rule) {\r\n    const positions = [];\r\n    function recurse(childRule, pos) {\r\n        if ((hasNestedCSSRule('CSSGroupingRule') &&\r\n            childRule.parentRule instanceof CSSGroupingRule) ||\r\n            (hasNestedCSSRule('CSSMediaRule') &&\r\n                childRule.parentRule instanceof CSSMediaRule) ||\r\n            (hasNestedCSSRule('CSSSupportsRule') &&\r\n                childRule.parentRule instanceof CSSSupportsRule) ||\r\n            (hasNestedCSSRule('CSSConditionRule') &&\r\n                childRule.parentRule instanceof CSSConditionRule)) {\r\n            const rules = Array.from(childRule.parentRule.cssRules);\r\n            const index = rules.indexOf(childRule);\r\n            pos.unshift(index);\r\n        }\r\n        else if (childRule.parentStyleSheet) {\r\n            const rules = Array.from(childRule.parentStyleSheet.cssRules);\r\n            const index = rules.indexOf(childRule);\r\n            pos.unshift(index);\r\n        }\r\n        return pos;\r\n    }\r\n    return recurse(rule, positions);\r\n}\r\nfunction getIdAndStyleId(sheet, mirror, styleMirror) {\r\n    let id, styleId;\r\n    if (!sheet)\r\n        return {};\r\n    if (sheet.ownerNode)\r\n        id = mirror.getId(sheet.ownerNode);\r\n    else\r\n        styleId = styleMirror.getId(sheet);\r\n    return {\r\n        styleId,\r\n        id,\r\n    };\r\n}\r\nfunction initStyleSheetObserver({ styleSheetRuleCb, mirror, stylesheetManager }, { win }) {\r\n    if (!win.CSSStyleSheet || !win.CSSStyleSheet.prototype) {\r\n        return () => {\r\n        };\r\n    }\r\n    const insertRule = win.CSSStyleSheet.prototype.insertRule;\r\n    win.CSSStyleSheet.prototype.insertRule = new Proxy(insertRule, {\r\n        apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n            const [rule, index] = argumentsList;\r\n            const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n            if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                styleSheetRuleCb({\r\n                    id,\r\n                    styleId,\r\n                    adds: [{ rule, index }],\r\n                });\r\n            }\r\n            return target.apply(thisArg, argumentsList);\r\n        }),\r\n    });\r\n    const deleteRule = win.CSSStyleSheet.prototype.deleteRule;\r\n    win.CSSStyleSheet.prototype.deleteRule = new Proxy(deleteRule, {\r\n        apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n            const [index] = argumentsList;\r\n            const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n            if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                styleSheetRuleCb({\r\n                    id,\r\n                    styleId,\r\n                    removes: [{ index }],\r\n                });\r\n            }\r\n            return target.apply(thisArg, argumentsList);\r\n        }),\r\n    });\r\n    let replace;\r\n    if (win.CSSStyleSheet.prototype.replace) {\r\n        replace = win.CSSStyleSheet.prototype.replace;\r\n        win.CSSStyleSheet.prototype.replace = new Proxy(replace, {\r\n            apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n                const [text] = argumentsList;\r\n                const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n                if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                    styleSheetRuleCb({\r\n                        id,\r\n                        styleId,\r\n                        replace: text,\r\n                    });\r\n                }\r\n                return target.apply(thisArg, argumentsList);\r\n            }),\r\n        });\r\n    }\r\n    let replaceSync;\r\n    if (win.CSSStyleSheet.prototype.replaceSync) {\r\n        replaceSync = win.CSSStyleSheet.prototype.replaceSync;\r\n        win.CSSStyleSheet.prototype.replaceSync = new Proxy(replaceSync, {\r\n            apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n                const [text] = argumentsList;\r\n                const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n                if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                    styleSheetRuleCb({\r\n                        id,\r\n                        styleId,\r\n                        replaceSync: text,\r\n                    });\r\n                }\r\n                return target.apply(thisArg, argumentsList);\r\n            }),\r\n        });\r\n    }\r\n    const supportedNestedCSSRuleTypes = {};\r\n    if (canMonkeyPatchNestedCSSRule('CSSGroupingRule')) {\r\n        supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;\r\n    }\r\n    else {\r\n        if (canMonkeyPatchNestedCSSRule('CSSMediaRule')) {\r\n            supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;\r\n        }\r\n        if (canMonkeyPatchNestedCSSRule('CSSConditionRule')) {\r\n            supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;\r\n        }\r\n        if (canMonkeyPatchNestedCSSRule('CSSSupportsRule')) {\r\n            supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;\r\n        }\r\n    }\r\n    const unmodifiedFunctions = {};\r\n    Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\r\n        unmodifiedFunctions[typeKey] = {\r\n            insertRule: type.prototype.insertRule,\r\n            deleteRule: type.prototype.deleteRule,\r\n        };\r\n        type.prototype.insertRule = new Proxy(unmodifiedFunctions[typeKey].insertRule, {\r\n            apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n                const [rule, index] = argumentsList;\r\n                const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n                if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                    styleSheetRuleCb({\r\n                        id,\r\n                        styleId,\r\n                        adds: [\r\n                            {\r\n                                rule,\r\n                                index: [\r\n                                    ...getNestedCSSRulePositions(thisArg),\r\n                                    index || 0,\r\n                                ],\r\n                            },\r\n                        ],\r\n                    });\r\n                }\r\n                return target.apply(thisArg, argumentsList);\r\n            }),\r\n        });\r\n        type.prototype.deleteRule = new Proxy(unmodifiedFunctions[typeKey].deleteRule, {\r\n            apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n                const [index] = argumentsList;\r\n                const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n                if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                    styleSheetRuleCb({\r\n                        id,\r\n                        styleId,\r\n                        removes: [\r\n                            { index: [...getNestedCSSRulePositions(thisArg), index] },\r\n                        ],\r\n                    });\r\n                }\r\n                return target.apply(thisArg, argumentsList);\r\n            }),\r\n        });\r\n    });\r\n    return callbackWrapper(() => {\r\n        win.CSSStyleSheet.prototype.insertRule = insertRule;\r\n        win.CSSStyleSheet.prototype.deleteRule = deleteRule;\r\n        replace && (win.CSSStyleSheet.prototype.replace = replace);\r\n        replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);\r\n        Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\r\n            type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;\r\n            type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;\r\n        });\r\n    });\r\n}\r\nfunction initAdoptedStyleSheetObserver({ mirror, stylesheetManager, }, host) {\r\n    var _a, _b, _c;\r\n    let hostId = null;\r\n    if (host.nodeName === '#document')\r\n        hostId = mirror.getId(host);\r\n    else\r\n        hostId = mirror.getId(host.host);\r\n    const patchTarget = host.nodeName === '#document'\r\n        ? (_a = host.defaultView) === null || _a === void 0 ? void 0 : _a.Document\r\n        : (_c = (_b = host.ownerDocument) === null || _b === void 0 ? void 0 : _b.defaultView) === null || _c === void 0 ? void 0 : _c.ShadowRoot;\r\n    const originalPropertyDescriptor = (patchTarget === null || patchTarget === void 0 ? void 0 : patchTarget.prototype)\r\n        ? Object.getOwnPropertyDescriptor(patchTarget === null || patchTarget === void 0 ? void 0 : patchTarget.prototype, 'adoptedStyleSheets')\r\n        : undefined;\r\n    if (hostId === null ||\r\n        hostId === -1 ||\r\n        !patchTarget ||\r\n        !originalPropertyDescriptor)\r\n        return () => {\r\n        };\r\n    Object.defineProperty(host, 'adoptedStyleSheets', {\r\n        configurable: originalPropertyDescriptor.configurable,\r\n        enumerable: originalPropertyDescriptor.enumerable,\r\n        get() {\r\n            var _a;\r\n            return (_a = originalPropertyDescriptor.get) === null || _a === void 0 ? void 0 : _a.call(this);\r\n        },\r\n        set(sheets) {\r\n            var _a;\r\n            const result = (_a = originalPropertyDescriptor.set) === null || _a === void 0 ? void 0 : _a.call(this, sheets);\r\n            if (hostId !== null && hostId !== -1) {\r\n                try {\r\n                    stylesheetManager.adoptStyleSheets(sheets, hostId);\r\n                }\r\n                catch (e) {\r\n                }\r\n            }\r\n            return result;\r\n        },\r\n    });\r\n    return callbackWrapper(() => {\r\n        Object.defineProperty(host, 'adoptedStyleSheets', {\r\n            configurable: originalPropertyDescriptor.configurable,\r\n            enumerable: originalPropertyDescriptor.enumerable,\r\n            get: originalPropertyDescriptor.get,\r\n            set: originalPropertyDescriptor.set,\r\n        });\r\n    });\r\n}\r\nfunction initStyleDeclarationObserver({ styleDeclarationCb, mirror, ignoreCSSAttributes, stylesheetManager, }, { win }) {\r\n    const setProperty = win.CSSStyleDeclaration.prototype.setProperty;\r\n    win.CSSStyleDeclaration.prototype.setProperty = new Proxy(setProperty, {\r\n        apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n            var _a;\r\n            const [property, value, priority] = argumentsList;\r\n            if (ignoreCSSAttributes.has(property)) {\r\n                return setProperty.apply(thisArg, [property, value, priority]);\r\n            }\r\n            const { id, styleId } = getIdAndStyleId((_a = thisArg.parentRule) === null || _a === void 0 ? void 0 : _a.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n            if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                styleDeclarationCb({\r\n                    id,\r\n                    styleId,\r\n                    set: {\r\n                        property,\r\n                        value,\r\n                        priority,\r\n                    },\r\n                    index: getNestedCSSRulePositions(thisArg.parentRule),\r\n                });\r\n            }\r\n            return target.apply(thisArg, argumentsList);\r\n        }),\r\n    });\r\n    const removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;\r\n    win.CSSStyleDeclaration.prototype.removeProperty = new Proxy(removeProperty, {\r\n        apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n            var _a;\r\n            const [property] = argumentsList;\r\n            if (ignoreCSSAttributes.has(property)) {\r\n                return removeProperty.apply(thisArg, [property]);\r\n            }\r\n            const { id, styleId } = getIdAndStyleId((_a = thisArg.parentRule) === null || _a === void 0 ? void 0 : _a.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n            if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                styleDeclarationCb({\r\n                    id,\r\n                    styleId,\r\n                    remove: {\r\n                        property,\r\n                    },\r\n                    index: getNestedCSSRulePositions(thisArg.parentRule),\r\n                });\r\n            }\r\n            return target.apply(thisArg, argumentsList);\r\n        }),\r\n    });\r\n    return callbackWrapper(() => {\r\n        win.CSSStyleDeclaration.prototype.setProperty = setProperty;\r\n        win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;\r\n    });\r\n}\r\nfunction initMediaInteractionObserver({ mediaInteractionCb, blockClass, blockSelector, unblockSelector, mirror, sampling, doc, }) {\r\n    const handler = callbackWrapper((type) => throttle(callbackWrapper((event) => {\r\n        const target = getEventTarget(event);\r\n        if (!target ||\r\n            isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\r\n            return;\r\n        }\r\n        const { currentTime, volume, muted, playbackRate } = target;\r\n        mediaInteractionCb({\r\n            type,\r\n            id: mirror.getId(target),\r\n            currentTime,\r\n            volume,\r\n            muted,\r\n            playbackRate,\r\n        });\r\n    }), sampling.media || 500));\r\n    const handlers = [\r\n        on('play', handler(0), doc),\r\n        on('pause', handler(1), doc),\r\n        on('seeked', handler(2), doc),\r\n        on('volumechange', handler(3), doc),\r\n        on('ratechange', handler(4), doc),\r\n    ];\r\n    return callbackWrapper(() => {\r\n        handlers.forEach((h) => h());\r\n    });\r\n}\r\nfunction initFontObserver({ fontCb, doc }) {\r\n    const win = doc.defaultView;\r\n    if (!win) {\r\n        return () => {\r\n        };\r\n    }\r\n    const handlers = [];\r\n    const fontMap = new WeakMap();\r\n    const originalFontFace = win.FontFace;\r\n    win.FontFace = function FontFace(family, source, descriptors) {\r\n        const fontFace = new originalFontFace(family, source, descriptors);\r\n        fontMap.set(fontFace, {\r\n            family,\r\n            buffer: typeof source !== 'string',\r\n            descriptors,\r\n            fontSource: typeof source === 'string'\r\n                ? source\r\n                : JSON.stringify(Array.from(new Uint8Array(source))),\r\n        });\r\n        return fontFace;\r\n    };\r\n    const restoreHandler = patch(doc.fonts, 'add', function (original) {\r\n        return function (fontFace) {\r\n            setTimeout(callbackWrapper(() => {\r\n                const p = fontMap.get(fontFace);\r\n                if (p) {\r\n                    fontCb(p);\r\n                    fontMap.delete(fontFace);\r\n                }\r\n            }), 0);\r\n            return original.apply(this, [fontFace]);\r\n        };\r\n    });\r\n    handlers.push(() => {\r\n        win.FontFace = originalFontFace;\r\n    });\r\n    handlers.push(restoreHandler);\r\n    return callbackWrapper(() => {\r\n        handlers.forEach((h) => h());\r\n    });\r\n}\r\nfunction initSelectionObserver(param) {\r\n    const { doc, mirror, blockClass, blockSelector, unblockSelector, selectionCb, } = param;\r\n    let collapsed = true;\r\n    const updateSelection = callbackWrapper(() => {\r\n        const selection = doc.getSelection();\r\n        if (!selection || (collapsed && (selection === null || selection === void 0 ? void 0 : selection.isCollapsed)))\r\n            return;\r\n        collapsed = selection.isCollapsed || false;\r\n        const ranges = [];\r\n        const count = selection.rangeCount || 0;\r\n        for (let i = 0; i < count; i++) {\r\n            const range = selection.getRangeAt(i);\r\n            const { startContainer, startOffset, endContainer, endOffset } = range;\r\n            const blocked = isBlocked(startContainer, blockClass, blockSelector, unblockSelector, true) ||\r\n                isBlocked(endContainer, blockClass, blockSelector, unblockSelector, true);\r\n            if (blocked)\r\n                continue;\r\n            ranges.push({\r\n                start: mirror.getId(startContainer),\r\n                startOffset,\r\n                end: mirror.getId(endContainer),\r\n                endOffset,\r\n            });\r\n        }\r\n        selectionCb({ ranges });\r\n    });\r\n    updateSelection();\r\n    return on('selectionchange', updateSelection);\r\n}\r\nfunction initCustomElementObserver({ doc, customElementCb, }) {\r\n    const win = doc.defaultView;\r\n    if (!win || !win.customElements) {\r\n        return () => {\r\n        };\r\n    }\r\n    const restoreHandler = patch(win.customElements, 'define', function (original) {\r\n        return function (name, constructor, options) {\r\n            try {\r\n                customElementCb({\r\n                    define: {\r\n                        name,\r\n                    },\r\n                });\r\n            }\r\n            catch (e) {\r\n            }\r\n            return original.apply(this, [name, constructor, options]);\r\n        };\r\n    });\r\n    return restoreHandler;\r\n}\r\nfunction mergeHooks(o, hooks) {\r\n    const { mutationCb, mousemoveCb, mouseInteractionCb, scrollCb, viewportResizeCb, inputCb, mediaInteractionCb, styleSheetRuleCb, styleDeclarationCb, canvasMutationCb, fontCb, selectionCb, customElementCb, } = o;\r\n    o.mutationCb = (...p) => {\r\n        if (hooks.mutation) {\r\n            hooks.mutation(...p);\r\n        }\r\n        mutationCb(...p);\r\n    };\r\n    o.mousemoveCb = (...p) => {\r\n        if (hooks.mousemove) {\r\n            hooks.mousemove(...p);\r\n        }\r\n        mousemoveCb(...p);\r\n    };\r\n    o.mouseInteractionCb = (...p) => {\r\n        if (hooks.mouseInteraction) {\r\n            hooks.mouseInteraction(...p);\r\n        }\r\n        mouseInteractionCb(...p);\r\n    };\r\n    o.scrollCb = (...p) => {\r\n        if (hooks.scroll) {\r\n            hooks.scroll(...p);\r\n        }\r\n        scrollCb(...p);\r\n    };\r\n    o.viewportResizeCb = (...p) => {\r\n        if (hooks.viewportResize) {\r\n            hooks.viewportResize(...p);\r\n        }\r\n        viewportResizeCb(...p);\r\n    };\r\n    o.inputCb = (...p) => {\r\n        if (hooks.input) {\r\n            hooks.input(...p);\r\n        }\r\n        inputCb(...p);\r\n    };\r\n    o.mediaInteractionCb = (...p) => {\r\n        if (hooks.mediaInteaction) {\r\n            hooks.mediaInteaction(...p);\r\n        }\r\n        mediaInteractionCb(...p);\r\n    };\r\n    o.styleSheetRuleCb = (...p) => {\r\n        if (hooks.styleSheetRule) {\r\n            hooks.styleSheetRule(...p);\r\n        }\r\n        styleSheetRuleCb(...p);\r\n    };\r\n    o.styleDeclarationCb = (...p) => {\r\n        if (hooks.styleDeclaration) {\r\n            hooks.styleDeclaration(...p);\r\n        }\r\n        styleDeclarationCb(...p);\r\n    };\r\n    o.canvasMutationCb = (...p) => {\r\n        if (hooks.canvasMutation) {\r\n            hooks.canvasMutation(...p);\r\n        }\r\n        canvasMutationCb(...p);\r\n    };\r\n    o.fontCb = (...p) => {\r\n        if (hooks.font) {\r\n            hooks.font(...p);\r\n        }\r\n        fontCb(...p);\r\n    };\r\n    o.selectionCb = (...p) => {\r\n        if (hooks.selection) {\r\n            hooks.selection(...p);\r\n        }\r\n        selectionCb(...p);\r\n    };\r\n    o.customElementCb = (...c) => {\r\n        if (hooks.customElement) {\r\n            hooks.customElement(...c);\r\n        }\r\n        customElementCb(...c);\r\n    };\r\n}\r\nfunction initObservers(o, hooks = {}) {\r\n    const currentWindow = o.doc.defaultView;\r\n    if (!currentWindow) {\r\n        return () => {\r\n        };\r\n    }\r\n    mergeHooks(o, hooks);\r\n    const mutationObserver = initMutationObserver(o, o.doc);\r\n    const mousemoveHandler = initMoveObserver(o);\r\n    const mouseInteractionHandler = initMouseInteractionObserver(o);\r\n    const scrollHandler = initScrollObserver(o);\r\n    const viewportResizeHandler = initViewportResizeObserver(o, {\r\n        win: currentWindow,\r\n    });\r\n    const inputHandler = initInputObserver(o);\r\n    const mediaInteractionHandler = initMediaInteractionObserver(o);\r\n    const styleSheetObserver = initStyleSheetObserver(o, { win: currentWindow });\r\n    const adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o, o.doc);\r\n    const styleDeclarationObserver = initStyleDeclarationObserver(o, {\r\n        win: currentWindow,\r\n    });\r\n    const fontObserver = o.collectFonts\r\n        ? initFontObserver(o)\r\n        : () => {\r\n        };\r\n    const selectionObserver = initSelectionObserver(o);\r\n    const customElementObserver = initCustomElementObserver(o);\r\n    const pluginHandlers = [];\r\n    for (const plugin of o.plugins) {\r\n        pluginHandlers.push(plugin.observer(plugin.callback, currentWindow, plugin.options));\r\n    }\r\n    return callbackWrapper(() => {\r\n        mutationBuffers.forEach((b) => b.reset());\r\n        mutationObserver.disconnect();\r\n        mousemoveHandler();\r\n        mouseInteractionHandler();\r\n        scrollHandler();\r\n        viewportResizeHandler();\r\n        inputHandler();\r\n        mediaInteractionHandler();\r\n        styleSheetObserver();\r\n        adoptedStyleSheetObserver();\r\n        styleDeclarationObserver();\r\n        fontObserver();\r\n        selectionObserver();\r\n        customElementObserver();\r\n        pluginHandlers.forEach((h) => h());\r\n    });\r\n}\r\nfunction hasNestedCSSRule(prop) {\r\n    return typeof window[prop] !== 'undefined';\r\n}\r\nfunction canMonkeyPatchNestedCSSRule(prop) {\r\n    return Boolean(typeof window[prop] !== 'undefined' &&\r\n        window[prop].prototype &&\r\n        'insertRule' in window[prop].prototype &&\r\n        'deleteRule' in window[prop].prototype);\r\n}\n\nexport { INPUT_TAGS, initAdoptedStyleSheetObserver, initMutationObserver, initObservers, initScrollObserver, mutationBuffers };\n","class CrossOriginIframeMirror {\r\n    constructor(generateIdFn) {\r\n        this.generateIdFn = generateIdFn;\r\n        this.iframeIdToRemoteIdMap = new WeakMap();\r\n        this.iframeRemoteIdToIdMap = new WeakMap();\r\n    }\r\n    getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {\r\n        const idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);\r\n        const remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);\r\n        let id = idToRemoteIdMap.get(remoteId);\r\n        if (!id) {\r\n            id = this.generateIdFn();\r\n            idToRemoteIdMap.set(remoteId, id);\r\n            remoteIdToIdMap.set(id, remoteId);\r\n        }\r\n        return id;\r\n    }\r\n    getIds(iframe, remoteId) {\r\n        const idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);\r\n        const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\r\n        return remoteId.map((id) => this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap));\r\n    }\r\n    getRemoteId(iframe, id, map) {\r\n        const remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);\r\n        if (typeof id !== 'number')\r\n            return id;\r\n        const remoteId = remoteIdToIdMap.get(id);\r\n        if (!remoteId)\r\n            return -1;\r\n        return remoteId;\r\n    }\r\n    getRemoteIds(iframe, ids) {\r\n        const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\r\n        return ids.map((id) => this.getRemoteId(iframe, id, remoteIdToIdMap));\r\n    }\r\n    reset(iframe) {\r\n        if (!iframe) {\r\n            this.iframeIdToRemoteIdMap = new WeakMap();\r\n            this.iframeRemoteIdToIdMap = new WeakMap();\r\n            return;\r\n        }\r\n        this.iframeIdToRemoteIdMap.delete(iframe);\r\n        this.iframeRemoteIdToIdMap.delete(iframe);\r\n    }\r\n    getIdToRemoteIdMap(iframe) {\r\n        let idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);\r\n        if (!idToRemoteIdMap) {\r\n            idToRemoteIdMap = new Map();\r\n            this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);\r\n        }\r\n        return idToRemoteIdMap;\r\n    }\r\n    getRemoteIdToIdMap(iframe) {\r\n        let remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);\r\n        if (!remoteIdToIdMap) {\r\n            remoteIdToIdMap = new Map();\r\n            this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);\r\n        }\r\n        return remoteIdToIdMap;\r\n    }\r\n}\n\nexport { CrossOriginIframeMirror as default };\n","import { genId, NodeType } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport CrossOriginIframeMirror from './cross-origin-iframe-mirror.js';\nimport { EventType, IncrementalSource } from '../../../types/dist/rrweb-types.js';\n\nclass IframeManagerNoop {\r\n    constructor() {\r\n        this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\r\n        this.crossOriginIframeRootIdMap = new WeakMap();\r\n    }\r\n    addIframe() {\r\n    }\r\n    addLoadListener() {\r\n    }\r\n    attachIframe() {\r\n    }\r\n}\r\nclass IframeManager {\r\n    constructor(options) {\r\n        this.iframes = new WeakMap();\r\n        this.crossOriginIframeMap = new WeakMap();\r\n        this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\r\n        this.crossOriginIframeRootIdMap = new WeakMap();\r\n        this.mutationCb = options.mutationCb;\r\n        this.wrappedEmit = options.wrappedEmit;\r\n        this.stylesheetManager = options.stylesheetManager;\r\n        this.recordCrossOriginIframes = options.recordCrossOriginIframes;\r\n        this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(this.stylesheetManager.styleMirror.generateId.bind(this.stylesheetManager.styleMirror));\r\n        this.mirror = options.mirror;\r\n        if (this.recordCrossOriginIframes) {\r\n            window.addEventListener('message', this.handleMessage.bind(this));\r\n        }\r\n    }\r\n    addIframe(iframeEl) {\r\n        this.iframes.set(iframeEl, true);\r\n        if (iframeEl.contentWindow)\r\n            this.crossOriginIframeMap.set(iframeEl.contentWindow, iframeEl);\r\n    }\r\n    addLoadListener(cb) {\r\n        this.loadListener = cb;\r\n    }\r\n    attachIframe(iframeEl, childSn) {\r\n        var _a;\r\n        this.mutationCb({\r\n            adds: [\r\n                {\r\n                    parentId: this.mirror.getId(iframeEl),\r\n                    nextId: null,\r\n                    node: childSn,\r\n                },\r\n            ],\r\n            removes: [],\r\n            texts: [],\r\n            attributes: [],\r\n            isAttachIframe: true,\r\n        });\r\n        (_a = this.loadListener) === null || _a === void 0 ? void 0 : _a.call(this, iframeEl);\r\n        if (iframeEl.contentDocument &&\r\n            iframeEl.contentDocument.adoptedStyleSheets &&\r\n            iframeEl.contentDocument.adoptedStyleSheets.length > 0)\r\n            this.stylesheetManager.adoptStyleSheets(iframeEl.contentDocument.adoptedStyleSheets, this.mirror.getId(iframeEl.contentDocument));\r\n    }\r\n    handleMessage(message) {\r\n        const crossOriginMessageEvent = message;\r\n        if (crossOriginMessageEvent.data.type !== 'rrweb' ||\r\n            crossOriginMessageEvent.origin !== crossOriginMessageEvent.data.origin)\r\n            return;\r\n        const iframeSourceWindow = message.source;\r\n        if (!iframeSourceWindow)\r\n            return;\r\n        const iframeEl = this.crossOriginIframeMap.get(message.source);\r\n        if (!iframeEl)\r\n            return;\r\n        const transformedEvent = this.transformCrossOriginEvent(iframeEl, crossOriginMessageEvent.data.event);\r\n        if (transformedEvent)\r\n            this.wrappedEmit(transformedEvent, crossOriginMessageEvent.data.isCheckout);\r\n    }\r\n    transformCrossOriginEvent(iframeEl, e) {\r\n        var _a;\r\n        switch (e.type) {\r\n            case EventType.FullSnapshot: {\r\n                this.crossOriginIframeMirror.reset(iframeEl);\r\n                this.crossOriginIframeStyleMirror.reset(iframeEl);\r\n                this.replaceIdOnNode(e.data.node, iframeEl);\r\n                const rootId = e.data.node.id;\r\n                this.crossOriginIframeRootIdMap.set(iframeEl, rootId);\r\n                this.patchRootIdOnNode(e.data.node, rootId);\r\n                return {\r\n                    timestamp: e.timestamp,\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: {\r\n                        source: IncrementalSource.Mutation,\r\n                        adds: [\r\n                            {\r\n                                parentId: this.mirror.getId(iframeEl),\r\n                                nextId: null,\r\n                                node: e.data.node,\r\n                            },\r\n                        ],\r\n                        removes: [],\r\n                        texts: [],\r\n                        attributes: [],\r\n                        isAttachIframe: true,\r\n                    },\r\n                };\r\n            }\r\n            case EventType.Meta:\r\n            case EventType.Load:\r\n            case EventType.DomContentLoaded: {\r\n                return false;\r\n            }\r\n            case EventType.Plugin: {\r\n                return e;\r\n            }\r\n            case EventType.Custom: {\r\n                this.replaceIds(e.data.payload, iframeEl, ['id', 'parentId', 'previousId', 'nextId']);\r\n                return e;\r\n            }\r\n            case EventType.IncrementalSnapshot: {\r\n                switch (e.data.source) {\r\n                    case IncrementalSource.Mutation: {\r\n                        e.data.adds.forEach((n) => {\r\n                            this.replaceIds(n, iframeEl, [\r\n                                'parentId',\r\n                                'nextId',\r\n                                'previousId',\r\n                            ]);\r\n                            this.replaceIdOnNode(n.node, iframeEl);\r\n                            const rootId = this.crossOriginIframeRootIdMap.get(iframeEl);\r\n                            rootId && this.patchRootIdOnNode(n.node, rootId);\r\n                        });\r\n                        e.data.removes.forEach((n) => {\r\n                            this.replaceIds(n, iframeEl, ['parentId', 'id']);\r\n                        });\r\n                        e.data.attributes.forEach((n) => {\r\n                            this.replaceIds(n, iframeEl, ['id']);\r\n                        });\r\n                        e.data.texts.forEach((n) => {\r\n                            this.replaceIds(n, iframeEl, ['id']);\r\n                        });\r\n                        return e;\r\n                    }\r\n                    case IncrementalSource.Drag:\r\n                    case IncrementalSource.TouchMove:\r\n                    case IncrementalSource.MouseMove: {\r\n                        e.data.positions.forEach((p) => {\r\n                            this.replaceIds(p, iframeEl, ['id']);\r\n                        });\r\n                        return e;\r\n                    }\r\n                    case IncrementalSource.ViewportResize: {\r\n                        return false;\r\n                    }\r\n                    case IncrementalSource.MediaInteraction:\r\n                    case IncrementalSource.MouseInteraction:\r\n                    case IncrementalSource.Scroll:\r\n                    case IncrementalSource.CanvasMutation:\r\n                    case IncrementalSource.Input: {\r\n                        this.replaceIds(e.data, iframeEl, ['id']);\r\n                        return e;\r\n                    }\r\n                    case IncrementalSource.StyleSheetRule:\r\n                    case IncrementalSource.StyleDeclaration: {\r\n                        this.replaceIds(e.data, iframeEl, ['id']);\r\n                        this.replaceStyleIds(e.data, iframeEl, ['styleId']);\r\n                        return e;\r\n                    }\r\n                    case IncrementalSource.Font: {\r\n                        return e;\r\n                    }\r\n                    case IncrementalSource.Selection: {\r\n                        e.data.ranges.forEach((range) => {\r\n                            this.replaceIds(range, iframeEl, ['start', 'end']);\r\n                        });\r\n                        return e;\r\n                    }\r\n                    case IncrementalSource.AdoptedStyleSheet: {\r\n                        this.replaceIds(e.data, iframeEl, ['id']);\r\n                        this.replaceStyleIds(e.data, iframeEl, ['styleIds']);\r\n                        (_a = e.data.styles) === null || _a === void 0 ? void 0 : _a.forEach((style) => {\r\n                            this.replaceStyleIds(style, iframeEl, ['styleId']);\r\n                        });\r\n                        return e;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    replace(iframeMirror, obj, iframeEl, keys) {\r\n        for (const key of keys) {\r\n            if (!Array.isArray(obj[key]) && typeof obj[key] !== 'number')\r\n                continue;\r\n            if (Array.isArray(obj[key])) {\r\n                obj[key] = iframeMirror.getIds(iframeEl, obj[key]);\r\n            }\r\n            else {\r\n                obj[key] = iframeMirror.getId(iframeEl, obj[key]);\r\n            }\r\n        }\r\n        return obj;\r\n    }\r\n    replaceIds(obj, iframeEl, keys) {\r\n        return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);\r\n    }\r\n    replaceStyleIds(obj, iframeEl, keys) {\r\n        return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);\r\n    }\r\n    replaceIdOnNode(node, iframeEl) {\r\n        this.replaceIds(node, iframeEl, ['id', 'rootId']);\r\n        if ('childNodes' in node) {\r\n            node.childNodes.forEach((child) => {\r\n                this.replaceIdOnNode(child, iframeEl);\r\n            });\r\n        }\r\n    }\r\n    patchRootIdOnNode(node, rootId) {\r\n        if (node.type !== NodeType.Document && !node.rootId)\r\n            node.rootId = rootId;\r\n        if ('childNodes' in node) {\r\n            node.childNodes.forEach((child) => {\r\n                this.patchRootIdOnNode(child, rootId);\r\n            });\r\n        }\r\n    }\r\n}\n\nexport { IframeManager, IframeManagerNoop };\n","import { initMutationObserver, initScrollObserver, initAdoptedStyleSheetObserver } from './observer.js';\nimport { patch, inDom } from '../utils.js';\nimport { isNativeShadowDom } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\n\nclass ShadowDomManagerNoop {\r\n    init() {\r\n    }\r\n    addShadowRoot() {\r\n    }\r\n    observeAttachShadow() {\r\n    }\r\n    reset() {\r\n    }\r\n}\r\nclass ShadowDomManager {\r\n    constructor(options) {\r\n        this.shadowDoms = new WeakSet();\r\n        this.restoreHandlers = [];\r\n        this.mutationCb = options.mutationCb;\r\n        this.scrollCb = options.scrollCb;\r\n        this.bypassOptions = options.bypassOptions;\r\n        this.mirror = options.mirror;\r\n        this.init();\r\n    }\r\n    init() {\r\n        this.reset();\r\n        this.patchAttachShadow(Element, document);\r\n    }\r\n    addShadowRoot(shadowRoot, doc) {\r\n        if (!isNativeShadowDom(shadowRoot))\r\n            return;\r\n        if (this.shadowDoms.has(shadowRoot))\r\n            return;\r\n        this.shadowDoms.add(shadowRoot);\r\n        const observer = initMutationObserver(Object.assign(Object.assign({}, this.bypassOptions), { doc, mutationCb: this.mutationCb, mirror: this.mirror, shadowDomManager: this }), shadowRoot);\r\n        this.restoreHandlers.push(() => observer.disconnect());\r\n        this.restoreHandlers.push(initScrollObserver(Object.assign(Object.assign({}, this.bypassOptions), { scrollCb: this.scrollCb, doc: shadowRoot, mirror: this.mirror })));\r\n        setTimeout(() => {\r\n            if (shadowRoot.adoptedStyleSheets &&\r\n                shadowRoot.adoptedStyleSheets.length > 0)\r\n                this.bypassOptions.stylesheetManager.adoptStyleSheets(shadowRoot.adoptedStyleSheets, this.mirror.getId(shadowRoot.host));\r\n            this.restoreHandlers.push(initAdoptedStyleSheetObserver({\r\n                mirror: this.mirror,\r\n                stylesheetManager: this.bypassOptions.stylesheetManager,\r\n            }, shadowRoot));\r\n        }, 0);\r\n    }\r\n    observeAttachShadow(iframeElement) {\r\n        if (!iframeElement.contentWindow || !iframeElement.contentDocument)\r\n            return;\r\n        this.patchAttachShadow(iframeElement.contentWindow.Element, iframeElement.contentDocument);\r\n    }\r\n    patchAttachShadow(element, doc) {\r\n        const manager = this;\r\n        this.restoreHandlers.push(patch(element.prototype, 'attachShadow', function (original) {\r\n            return function (option) {\r\n                const shadowRoot = original.call(this, option);\r\n                if (this.shadowRoot && inDom(this))\r\n                    manager.addShadowRoot(this.shadowRoot, doc);\r\n                return shadowRoot;\r\n            };\r\n        }));\r\n    }\r\n    reset() {\r\n        this.restoreHandlers.forEach((handler) => {\r\n            try {\r\n                handler();\r\n            }\r\n            catch (e) {\r\n            }\r\n        });\r\n        this.restoreHandlers = [];\r\n        this.shadowDoms = new WeakSet();\r\n    }\r\n}\n\nexport { ShadowDomManager, ShadowDomManagerNoop };\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\n\nexport { __awaiter, __rest };\n","/*\n * base64-arraybuffer 1.0.1 <https://github.com/niklasvh/base64-arraybuffer>\n * Copyright (c) 2021 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n    lookup[chars.charCodeAt(i)] = i;\n}\nvar encode = function (arraybuffer) {\n    var bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';\n    for (i = 0; i < len; i += 3) {\n        base64 += chars[bytes[i] >> 2];\n        base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n        base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n        base64 += chars[bytes[i + 2] & 63];\n    }\n    if (len % 3 === 2) {\n        base64 = base64.substring(0, base64.length - 1) + '=';\n    }\n    else if (len % 3 === 1) {\n        base64 = base64.substring(0, base64.length - 2) + '==';\n    }\n    return base64;\n};\nvar decode = function (base64) {\n    var bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n    if (base64[base64.length - 1] === '=') {\n        bufferLength--;\n        if (base64[base64.length - 2] === '=') {\n            bufferLength--;\n        }\n    }\n    var arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);\n    for (i = 0; i < len; i += 4) {\n        encoded1 = lookup[base64.charCodeAt(i)];\n        encoded2 = lookup[base64.charCodeAt(i + 1)];\n        encoded3 = lookup[base64.charCodeAt(i + 2)];\n        encoded4 = lookup[base64.charCodeAt(i + 3)];\n        bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n        bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n        bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n    }\n    return arraybuffer;\n};\n\nexport { decode, encode };\n","import { encode } from './../../../../../../ext/base64-arraybuffer/dist/base64-arraybuffer.es5.js';\n\nconst canvasVarMap = new Map();\r\nfunction variableListFor(ctx, ctor) {\r\n    let contextMap = canvasVarMap.get(ctx);\r\n    if (!contextMap) {\r\n        contextMap = new Map();\r\n        canvasVarMap.set(ctx, contextMap);\r\n    }\r\n    if (!contextMap.has(ctor)) {\r\n        contextMap.set(ctor, []);\r\n    }\r\n    return contextMap.get(ctor);\r\n}\r\nconst saveWebGLVar = (value, win, ctx) => {\r\n    if (!value ||\r\n        !(isInstanceOfWebGLObject(value, win) || typeof value === 'object'))\r\n        return;\r\n    const name = value.constructor.name;\r\n    const list = variableListFor(ctx, name);\r\n    let index = list.indexOf(value);\r\n    if (index === -1) {\r\n        index = list.length;\r\n        list.push(value);\r\n    }\r\n    return index;\r\n};\r\nfunction serializeArg(value, win, ctx) {\r\n    if (value instanceof Array) {\r\n        return value.map((arg) => serializeArg(arg, win, ctx));\r\n    }\r\n    else if (value === null) {\r\n        return value;\r\n    }\r\n    else if (value instanceof Float32Array ||\r\n        value instanceof Float64Array ||\r\n        value instanceof Int32Array ||\r\n        value instanceof Uint32Array ||\r\n        value instanceof Uint8Array ||\r\n        value instanceof Uint16Array ||\r\n        value instanceof Int16Array ||\r\n        value instanceof Int8Array ||\r\n        value instanceof Uint8ClampedArray) {\r\n        const name = value.constructor.name;\r\n        return {\r\n            rr_type: name,\r\n            args: [Object.values(value)],\r\n        };\r\n    }\r\n    else if (value instanceof ArrayBuffer) {\r\n        const name = value.constructor.name;\r\n        const base64 = encode(value);\r\n        return {\r\n            rr_type: name,\r\n            base64,\r\n        };\r\n    }\r\n    else if (value instanceof DataView) {\r\n        const name = value.constructor.name;\r\n        return {\r\n            rr_type: name,\r\n            args: [\r\n                serializeArg(value.buffer, win, ctx),\r\n                value.byteOffset,\r\n                value.byteLength,\r\n            ],\r\n        };\r\n    }\r\n    else if (value instanceof HTMLImageElement) {\r\n        const name = value.constructor.name;\r\n        const { src } = value;\r\n        return {\r\n            rr_type: name,\r\n            src,\r\n        };\r\n    }\r\n    else if (value instanceof HTMLCanvasElement) {\r\n        const name = 'HTMLImageElement';\r\n        const src = value.toDataURL();\r\n        return {\r\n            rr_type: name,\r\n            src,\r\n        };\r\n    }\r\n    else if (value instanceof ImageData) {\r\n        const name = value.constructor.name;\r\n        return {\r\n            rr_type: name,\r\n            args: [serializeArg(value.data, win, ctx), value.width, value.height],\r\n        };\r\n    }\r\n    else if (isInstanceOfWebGLObject(value, win) || typeof value === 'object') {\r\n        const name = value.constructor.name;\r\n        const index = saveWebGLVar(value, win, ctx);\r\n        return {\r\n            rr_type: name,\r\n            index: index,\r\n        };\r\n    }\r\n    return value;\r\n}\r\nconst serializeArgs = (args, win, ctx) => {\r\n    return [...args].map((arg) => serializeArg(arg, win, ctx));\r\n};\r\nconst isInstanceOfWebGLObject = (value, win) => {\r\n    const webGLConstructorNames = [\r\n        'WebGLActiveInfo',\r\n        'WebGLBuffer',\r\n        'WebGLFramebuffer',\r\n        'WebGLProgram',\r\n        'WebGLRenderbuffer',\r\n        'WebGLShader',\r\n        'WebGLShaderPrecisionFormat',\r\n        'WebGLTexture',\r\n        'WebGLUniformLocation',\r\n        'WebGLVertexArrayObject',\r\n        'WebGLVertexArrayObjectOES',\r\n    ];\r\n    const supportedWebGLConstructorNames = webGLConstructorNames.filter((name) => typeof win[name] === 'function');\r\n    return Boolean(supportedWebGLConstructorNames.find((name) => value instanceof win[name]));\r\n};\n\nexport { isInstanceOfWebGLObject, saveWebGLVar, serializeArg, serializeArgs, variableListFor };\n","import { patch, isBlocked } from '../../../utils.js';\n\nfunction getNormalizedContextName(contextType) {\r\n    return contextType === 'experimental-webgl' ? 'webgl' : contextType;\r\n}\r\nfunction initCanvasContextObserver(win, blockClass, blockSelector, unblockSelector, setPreserveDrawingBufferToTrue) {\r\n    const handlers = [];\r\n    try {\r\n        const restoreHandler = patch(win.HTMLCanvasElement.prototype, 'getContext', function (original) {\r\n            return function (contextType, ...args) {\r\n                if (!isBlocked(this, blockClass, blockSelector, unblockSelector, true)) {\r\n                    const ctxName = getNormalizedContextName(contextType);\r\n                    if (!('__context' in this))\r\n                        this.__context = ctxName;\r\n                    if (setPreserveDrawingBufferToTrue &&\r\n                        ['webgl', 'webgl2'].includes(ctxName)) {\r\n                        if (args[0] && typeof args[0] === 'object') {\r\n                            const contextAttributes = args[0];\r\n                            if (!contextAttributes.preserveDrawingBuffer) {\r\n                                contextAttributes.preserveDrawingBuffer = true;\r\n                            }\r\n                        }\r\n                        else {\r\n                            args.splice(0, 1, {\r\n                                preserveDrawingBuffer: true,\r\n                            });\r\n                        }\r\n                    }\r\n                }\r\n                return original.apply(this, [contextType, ...args]);\r\n            };\r\n        });\r\n        handlers.push(restoreHandler);\r\n    }\r\n    catch (_a) {\r\n        console.error('failed to patch HTMLCanvasElement.prototype.getContext');\r\n    }\r\n    return () => {\r\n        handlers.forEach((h) => h());\r\n    };\r\n}\n\nexport { initCanvasContextObserver as default };\n","import { CanvasContext } from '../../../../../types/dist/rrweb-types.js';\nimport { patch, isBlocked, hookSetter } from '../../../utils.js';\nimport { saveWebGLVar, serializeArgs } from './serialize-args.js';\n\nfunction patchGLPrototype(prototype, type, cb, blockClass, blockSelector, unblockSelector, mirror, win) {\r\n    const handlers = [];\r\n    const props = Object.getOwnPropertyNames(prototype);\r\n    for (const prop of props) {\r\n        if ([\r\n            'isContextLost',\r\n            'canvas',\r\n            'drawingBufferWidth',\r\n            'drawingBufferHeight',\r\n        ].includes(prop)) {\r\n            continue;\r\n        }\r\n        try {\r\n            if (typeof prototype[prop] !== 'function') {\r\n                continue;\r\n            }\r\n            const restoreHandler = patch(prototype, prop, function (original) {\r\n                return function (...args) {\r\n                    const result = original.apply(this, args);\r\n                    saveWebGLVar(result, win, this);\r\n                    if ('tagName' in this.canvas &&\r\n                        !isBlocked(this.canvas, blockClass, blockSelector, unblockSelector, true)) {\r\n                        const recordArgs = serializeArgs([...args], win, this);\r\n                        const mutation = {\r\n                            type,\r\n                            property: prop,\r\n                            args: recordArgs,\r\n                        };\r\n                        cb(this.canvas, mutation);\r\n                    }\r\n                    return result;\r\n                };\r\n            });\r\n            handlers.push(restoreHandler);\r\n        }\r\n        catch (_a) {\r\n            const hookHandler = hookSetter(prototype, prop, {\r\n                set(v) {\r\n                    cb(this.canvas, {\r\n                        type,\r\n                        property: prop,\r\n                        args: [v],\r\n                        setter: true,\r\n                    });\r\n                },\r\n            });\r\n            handlers.push(hookHandler);\r\n        }\r\n    }\r\n    return handlers;\r\n}\r\nfunction initCanvasWebGLMutationObserver(cb, win, blockClass, blockSelector, unblockSelector, mirror) {\r\n    const handlers = [];\r\n    handlers.push(...patchGLPrototype(win.WebGLRenderingContext.prototype, CanvasContext.WebGL, cb, blockClass, blockSelector, unblockSelector, mirror, win));\r\n    if (typeof win.WebGL2RenderingContext !== 'undefined') {\r\n        handlers.push(...patchGLPrototype(win.WebGL2RenderingContext.prototype, CanvasContext.WebGL2, cb, blockClass, blockSelector, unblockSelector, mirror, win));\r\n    }\r\n    return () => {\r\n        handlers.forEach((h) => h());\r\n    };\r\n}\n\nexport { initCanvasWebGLMutationObserver as default };\n","function decodeBase64(base64, enableUnicode) {\n    var binaryString = atob(base64);\n    if (enableUnicode) {\n        var binaryView = new Uint8Array(binaryString.length);\n        for (var i = 0, n = binaryString.length; i < n; ++i) {\n            binaryView[i] = binaryString.charCodeAt(i);\n        }\n        return String.fromCharCode.apply(null, new Uint16Array(binaryView.buffer));\n    }\n    return binaryString;\n}\n\nfunction createURL(base64, sourcemapArg, enableUnicodeArg) {\n    var sourcemap = sourcemapArg === undefined ? null : sourcemapArg;\n    var enableUnicode = enableUnicodeArg === undefined ? false : enableUnicodeArg;\n    var source = decodeBase64(base64, enableUnicode);\n    var start = source.indexOf('\\n', 10) + 1;\n    var body = source.substring(start) + (sourcemap ? '\\/\\/# sourceMappingURL=' + sourcemap : '');\n    var blob = new Blob([body], { type: 'application/javascript' });\n    return URL.createObjectURL(blob);\n}\n\nfunction createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg) {\n    var url;\n    return function WorkerFactory(options) {\n        url = url || createURL(base64, sourcemapArg, enableUnicodeArg);\n        return new Worker(url, options);\n    };\n}\n\nexport { createBase64WorkerFactory };\n","import { createBase64WorkerFactory } from './_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js';\n\nvar WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIC8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLg0KDQogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55DQogICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLg0KDQogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgNCiAgICBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkNCiAgICBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsDQogICAgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NDQogICAgTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1INCiAgICBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SDQogICAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4NCiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KDQogICAgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikgew0KICAgICAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH0NCiAgICAgICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7DQogICAgICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9DQogICAgICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvclsidGhyb3ciXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9DQogICAgICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfQ0KICAgICAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpOw0KICAgICAgICB9KTsNCiAgICB9CgogICAgLyoKICAgICAqIGJhc2U2NC1hcnJheWJ1ZmZlciAxLjAuMSA8aHR0cHM6Ly9naXRodWIuY29tL25pa2xhc3ZoL2Jhc2U2NC1hcnJheWJ1ZmZlcj4KICAgICAqIENvcHlyaWdodCAoYykgMjAyMSBOaWtsYXMgdm9uIEhlcnR6ZW4gPGh0dHBzOi8vaGVydHplbi5jb20+CiAgICAgKiBSZWxlYXNlZCB1bmRlciBNSVQgTGljZW5zZQogICAgICovCiAgICB2YXIgY2hhcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7CiAgICAvLyBVc2UgYSBsb29rdXAgdGFibGUgdG8gZmluZCB0aGUgaW5kZXguCiAgICB2YXIgbG9va3VwID0gdHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gW10gOiBuZXcgVWludDhBcnJheSgyNTYpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGg7IGkrKykgewogICAgICAgIGxvb2t1cFtjaGFycy5jaGFyQ29kZUF0KGkpXSA9IGk7CiAgICB9CiAgICB2YXIgZW5jb2RlID0gZnVuY3Rpb24gKGFycmF5YnVmZmVyKSB7CiAgICAgICAgdmFyIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlidWZmZXIpLCBpLCBsZW4gPSBieXRlcy5sZW5ndGgsIGJhc2U2NCA9ICcnOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gMykgewogICAgICAgICAgICBiYXNlNjQgKz0gY2hhcnNbYnl0ZXNbaV0gPj4gMl07CiAgICAgICAgICAgIGJhc2U2NCArPSBjaGFyc1soKGJ5dGVzW2ldICYgMykgPDwgNCkgfCAoYnl0ZXNbaSArIDFdID4+IDQpXTsKICAgICAgICAgICAgYmFzZTY0ICs9IGNoYXJzWygoYnl0ZXNbaSArIDFdICYgMTUpIDw8IDIpIHwgKGJ5dGVzW2kgKyAyXSA+PiA2KV07CiAgICAgICAgICAgIGJhc2U2NCArPSBjaGFyc1tieXRlc1tpICsgMl0gJiA2M107CiAgICAgICAgfQogICAgICAgIGlmIChsZW4gJSAzID09PSAyKSB7CiAgICAgICAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDEpICsgJz0nOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChsZW4gJSAzID09PSAxKSB7CiAgICAgICAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDIpICsgJz09JzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJhc2U2NDsKICAgIH07CgogICAgY29uc3QgbGFzdEJsb2JNYXAgPSBuZXcgTWFwKCk7DQogICAgY29uc3QgdHJhbnNwYXJlbnRCbG9iTWFwID0gbmV3IE1hcCgpOw0KICAgIGZ1bmN0aW9uIGdldFRyYW5zcGFyZW50QmxvYkZvcih3aWR0aCwgaGVpZ2h0LCBkYXRhVVJMT3B0aW9ucykgew0KICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgew0KICAgICAgICAgICAgY29uc3QgaWQgPSBgJHt3aWR0aH0tJHtoZWlnaHR9YDsNCiAgICAgICAgICAgIGlmICgnT2Zmc2NyZWVuQ2FudmFzJyBpbiBnbG9iYWxUaGlzKSB7DQogICAgICAgICAgICAgICAgaWYgKHRyYW5zcGFyZW50QmxvYk1hcC5oYXMoaWQpKQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNwYXJlbnRCbG9iTWFwLmdldChpZCk7DQogICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2NyZWVuID0gbmV3IE9mZnNjcmVlbkNhbnZhcyh3aWR0aCwgaGVpZ2h0KTsNCiAgICAgICAgICAgICAgICBvZmZzY3JlZW4uZ2V0Q29udGV4dCgnMmQnKTsNCiAgICAgICAgICAgICAgICBjb25zdCBibG9iID0geWllbGQgb2Zmc2NyZWVuLmNvbnZlcnRUb0Jsb2IoZGF0YVVSTE9wdGlvbnMpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0geWllbGQgYmxvYi5hcnJheUJ1ZmZlcigpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U2NCA9IGVuY29kZShhcnJheUJ1ZmZlcik7DQogICAgICAgICAgICAgICAgdHJhbnNwYXJlbnRCbG9iTWFwLnNldChpZCwgYmFzZTY0KTsNCiAgICAgICAgICAgICAgICByZXR1cm4gYmFzZTY0Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgcmV0dXJuICcnOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICB9DQogICAgY29uc3Qgd29ya2VyID0gc2VsZjsNCiAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24gKGUpIHsNCiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHsNCiAgICAgICAgICAgIGlmICgnT2Zmc2NyZWVuQ2FudmFzJyBpbiBnbG9iYWxUaGlzKSB7DQogICAgICAgICAgICAgICAgY29uc3QgeyBpZCwgYml0bWFwLCB3aWR0aCwgaGVpZ2h0LCBkYXRhVVJMT3B0aW9ucyB9ID0gZS5kYXRhOw0KICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zcGFyZW50QmFzZTY0ID0gZ2V0VHJhbnNwYXJlbnRCbG9iRm9yKHdpZHRoLCBoZWlnaHQsIGRhdGFVUkxPcHRpb25zKTsNCiAgICAgICAgICAgICAgICBjb25zdCBvZmZzY3JlZW4gPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHdpZHRoLCBoZWlnaHQpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGN0eCA9IG9mZnNjcmVlbi5nZXRDb250ZXh0KCcyZCcpOw0KICAgICAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoYml0bWFwLCAwLCAwKTsNCiAgICAgICAgICAgICAgICBiaXRtYXAuY2xvc2UoKTsNCiAgICAgICAgICAgICAgICBjb25zdCBibG9iID0geWllbGQgb2Zmc2NyZWVuLmNvbnZlcnRUb0Jsb2IoZGF0YVVSTE9wdGlvbnMpOw0KICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBibG9iLnR5cGU7DQogICAgICAgICAgICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSB5aWVsZCBibG9iLmFycmF5QnVmZmVyKCk7DQogICAgICAgICAgICAgICAgY29uc3QgYmFzZTY0ID0gZW5jb2RlKGFycmF5QnVmZmVyKTsNCiAgICAgICAgICAgICAgICBpZiAoIWxhc3RCbG9iTWFwLmhhcyhpZCkgJiYgKHlpZWxkIHRyYW5zcGFyZW50QmFzZTY0KSA9PT0gYmFzZTY0KSB7DQogICAgICAgICAgICAgICAgICAgIGxhc3RCbG9iTWFwLnNldChpZCwgYmFzZTY0KTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlci5wb3N0TWVzc2FnZSh7IGlkIH0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAobGFzdEJsb2JNYXAuZ2V0KGlkKSA9PT0gYmFzZTY0KQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQgfSk7DQogICAgICAgICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHsNCiAgICAgICAgICAgICAgICAgICAgaWQsDQogICAgICAgICAgICAgICAgICAgIHR5cGUsDQogICAgICAgICAgICAgICAgICAgIGJhc2U2NCwNCiAgICAgICAgICAgICAgICAgICAgd2lkdGgsDQogICAgICAgICAgICAgICAgICAgIGhlaWdodCwNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICBsYXN0QmxvYk1hcC5zZXQoaWQsIGJhc2U2NCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQ6IGUuZGF0YS5pZCB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgfTsKCn0pKCk7Cgo=', null, false);\n/* eslint-enable */\n\nexport { WorkerFactory as default };\n","import { __rest, __awaiter } from './../../../../../../ext/tslib/tslib.es6.js';\nimport { isBlocked } from '../../../utils.js';\nimport { CanvasContext } from '../../../../../types/dist/rrweb-types.js';\nimport initCanvas2DMutationObserver from './2d.js';\nimport initCanvasContextObserver from './canvas.js';\nimport initCanvasWebGLMutationObserver from './webgl.js';\nimport WorkerFactory from '../../../../../../_virtual/image-bitmap-data-url-worker.js';\n\nclass CanvasManagerNoop {\r\n    reset() {\r\n    }\r\n    freeze() {\r\n    }\r\n    unfreeze() {\r\n    }\r\n    lock() {\r\n    }\r\n    unlock() {\r\n    }\r\n}\r\nclass CanvasManager {\r\n    reset() {\r\n        this.pendingCanvasMutations.clear();\r\n        this.resetObservers && this.resetObservers();\r\n    }\r\n    freeze() {\r\n        this.frozen = true;\r\n    }\r\n    unfreeze() {\r\n        this.frozen = false;\r\n    }\r\n    lock() {\r\n        this.locked = true;\r\n    }\r\n    unlock() {\r\n        this.locked = false;\r\n    }\r\n    constructor(options) {\r\n        this.pendingCanvasMutations = new Map();\r\n        this.rafStamps = { latestId: 0, invokeId: null };\r\n        this.frozen = false;\r\n        this.locked = false;\r\n        this.processMutation = (target, mutation) => {\r\n            const newFrame = this.rafStamps.invokeId &&\r\n                this.rafStamps.latestId !== this.rafStamps.invokeId;\r\n            if (newFrame || !this.rafStamps.invokeId)\r\n                this.rafStamps.invokeId = this.rafStamps.latestId;\r\n            if (!this.pendingCanvasMutations.has(target)) {\r\n                this.pendingCanvasMutations.set(target, []);\r\n            }\r\n            this.pendingCanvasMutations.get(target).push(mutation);\r\n        };\r\n        const { sampling = 'all', win, blockClass, blockSelector, unblockSelector, recordCanvas, dataURLOptions, } = options;\r\n        this.mutationCb = options.mutationCb;\r\n        this.mirror = options.mirror;\r\n        if (recordCanvas && sampling === 'all')\r\n            this.initCanvasMutationObserver(win, blockClass, blockSelector, unblockSelector);\r\n        if (recordCanvas && typeof sampling === 'number')\r\n            this.initCanvasFPSObserver(sampling, win, blockClass, blockSelector, unblockSelector, {\r\n                dataURLOptions,\r\n            });\r\n    }\r\n    initCanvasFPSObserver(fps, win, blockClass, blockSelector, unblockSelector, options) {\r\n        const canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector, unblockSelector, true);\r\n        const snapshotInProgressMap = new Map();\r\n        const worker = new WorkerFactory();\r\n        worker.onmessage = (e) => {\r\n            const { id } = e.data;\r\n            snapshotInProgressMap.set(id, false);\r\n            if (!('base64' in e.data))\r\n                return;\r\n            const { base64, type, width, height } = e.data;\r\n            this.mutationCb({\r\n                id,\r\n                type: CanvasContext['2D'],\r\n                commands: [\r\n                    {\r\n                        property: 'clearRect',\r\n                        args: [0, 0, width, height],\r\n                    },\r\n                    {\r\n                        property: 'drawImage',\r\n                        args: [\r\n                            {\r\n                                rr_type: 'ImageBitmap',\r\n                                args: [\r\n                                    {\r\n                                        rr_type: 'Blob',\r\n                                        data: [{ rr_type: 'ArrayBuffer', base64 }],\r\n                                        type,\r\n                                    },\r\n                                ],\r\n                            },\r\n                            0,\r\n                            0,\r\n                        ],\r\n                    },\r\n                ],\r\n            });\r\n        };\r\n        const timeBetweenSnapshots = 1000 / fps;\r\n        let lastSnapshotTime = 0;\r\n        let rafId;\r\n        const getCanvas = () => {\r\n            const matchedCanvas = [];\r\n            win.document.querySelectorAll('canvas').forEach((canvas) => {\r\n                if (!isBlocked(canvas, blockClass, blockSelector, unblockSelector, true)) {\r\n                    matchedCanvas.push(canvas);\r\n                }\r\n            });\r\n            return matchedCanvas;\r\n        };\r\n        const takeCanvasSnapshots = (timestamp) => {\r\n            if (lastSnapshotTime &&\r\n                timestamp - lastSnapshotTime < timeBetweenSnapshots) {\r\n                rafId = requestAnimationFrame(takeCanvasSnapshots);\r\n                return;\r\n            }\r\n            lastSnapshotTime = timestamp;\r\n            getCanvas()\r\n                .forEach((canvas) => __awaiter(this, void 0, void 0, function* () {\r\n                var _a;\r\n                const id = this.mirror.getId(canvas);\r\n                if (snapshotInProgressMap.get(id))\r\n                    return;\r\n                snapshotInProgressMap.set(id, true);\r\n                if (['webgl', 'webgl2'].includes(canvas.__context)) {\r\n                    const context = canvas.getContext(canvas.__context);\r\n                    if (((_a = context === null || context === void 0 ? void 0 : context.getContextAttributes()) === null || _a === void 0 ? void 0 : _a.preserveDrawingBuffer) === false) {\r\n                        context.clear(context.COLOR_BUFFER_BIT);\r\n                    }\r\n                }\r\n                const bitmap = yield createImageBitmap(canvas);\r\n                worker.postMessage({\r\n                    id,\r\n                    bitmap,\r\n                    width: canvas.width,\r\n                    height: canvas.height,\r\n                    dataURLOptions: options.dataURLOptions,\r\n                }, [bitmap]);\r\n            }));\r\n            rafId = requestAnimationFrame(takeCanvasSnapshots);\r\n        };\r\n        rafId = requestAnimationFrame(takeCanvasSnapshots);\r\n        this.resetObservers = () => {\r\n            canvasContextReset();\r\n            cancelAnimationFrame(rafId);\r\n        };\r\n    }\r\n    initCanvasMutationObserver(win, blockClass, blockSelector, unblockSelector) {\r\n        this.startRAFTimestamping();\r\n        this.startPendingCanvasMutationFlusher();\r\n        const canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector, unblockSelector, false);\r\n        const canvas2DReset = initCanvas2DMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector, unblockSelector);\r\n        const canvasWebGL1and2Reset = initCanvasWebGLMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector, unblockSelector, this.mirror);\r\n        this.resetObservers = () => {\r\n            canvasContextReset();\r\n            canvas2DReset();\r\n            canvasWebGL1and2Reset();\r\n        };\r\n    }\r\n    startPendingCanvasMutationFlusher() {\r\n        requestAnimationFrame(() => this.flushPendingCanvasMutations());\r\n    }\r\n    startRAFTimestamping() {\r\n        const setLatestRAFTimestamp = (timestamp) => {\r\n            this.rafStamps.latestId = timestamp;\r\n            requestAnimationFrame(setLatestRAFTimestamp);\r\n        };\r\n        requestAnimationFrame(setLatestRAFTimestamp);\r\n    }\r\n    flushPendingCanvasMutations() {\r\n        this.pendingCanvasMutations.forEach((values, canvas) => {\r\n            const id = this.mirror.getId(canvas);\r\n            this.flushPendingCanvasMutationFor(canvas, id);\r\n        });\r\n        requestAnimationFrame(() => this.flushPendingCanvasMutations());\r\n    }\r\n    flushPendingCanvasMutationFor(canvas, id) {\r\n        if (this.frozen || this.locked) {\r\n            return;\r\n        }\r\n        const valuesWithType = this.pendingCanvasMutations.get(canvas);\r\n        if (!valuesWithType || id === -1)\r\n            return;\r\n        const values = valuesWithType.map((value) => {\r\n            const rest = __rest(value, [\"type\"]);\r\n            return rest;\r\n        });\r\n        const { type } = valuesWithType[0];\r\n        this.mutationCb({ id, type, commands: values });\r\n        this.pendingCanvasMutations.delete(canvas);\r\n    }\r\n}\n\nexport { CanvasManager, CanvasManagerNoop };\n","import { CanvasContext } from '../../../../../types/dist/rrweb-types.js';\nimport { patch, isBlocked, hookSetter } from '../../../utils.js';\nimport { serializeArgs } from './serialize-args.js';\n\nfunction initCanvas2DMutationObserver(cb, win, blockClass, blockSelector, unblockSelector) {\r\n    const handlers = [];\r\n    const props2D = Object.getOwnPropertyNames(win.CanvasRenderingContext2D.prototype);\r\n    for (const prop of props2D) {\r\n        try {\r\n            if (typeof win.CanvasRenderingContext2D.prototype[prop] !== 'function') {\r\n                continue;\r\n            }\r\n            const restoreHandler = patch(win.CanvasRenderingContext2D.prototype, prop, function (original) {\r\n                return function (...args) {\r\n                    if (!isBlocked(this.canvas, blockClass, blockSelector, unblockSelector, true)) {\r\n                        setTimeout(() => {\r\n                            const recordArgs = serializeArgs([...args], win, this);\r\n                            cb(this.canvas, {\r\n                                type: CanvasContext['2D'],\r\n                                property: prop,\r\n                                args: recordArgs,\r\n                            });\r\n                        }, 0);\r\n                    }\r\n                    return original.apply(this, args);\r\n                };\r\n            });\r\n            handlers.push(restoreHandler);\r\n        }\r\n        catch (_a) {\r\n            const hookHandler = hookSetter(win.CanvasRenderingContext2D.prototype, prop, {\r\n                set(v) {\r\n                    cb(this.canvas, {\r\n                        type: CanvasContext['2D'],\r\n                        property: prop,\r\n                        args: [v],\r\n                        setter: true,\r\n                    });\r\n                },\r\n            });\r\n            handlers.push(hookHandler);\r\n        }\r\n    }\r\n    return () => {\r\n        handlers.forEach((h) => h());\r\n    };\r\n}\n\nexport { initCanvas2DMutationObserver as default };\n","import { stringifyRule } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { StyleSheetMirror } from '../utils.js';\n\nclass StylesheetManager {\r\n    constructor(options) {\r\n        this.trackedLinkElements = new WeakSet();\r\n        this.styleMirror = new StyleSheetMirror();\r\n        this.mutationCb = options.mutationCb;\r\n        this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;\r\n    }\r\n    attachLinkElement(linkEl, childSn) {\r\n        if ('_cssText' in childSn.attributes)\r\n            this.mutationCb({\r\n                adds: [],\r\n                removes: [],\r\n                texts: [],\r\n                attributes: [\r\n                    {\r\n                        id: childSn.id,\r\n                        attributes: childSn\r\n                            .attributes,\r\n                    },\r\n                ],\r\n            });\r\n        this.trackLinkElement(linkEl);\r\n    }\r\n    trackLinkElement(linkEl) {\r\n        if (this.trackedLinkElements.has(linkEl))\r\n            return;\r\n        this.trackedLinkElements.add(linkEl);\r\n        this.trackStylesheetInLinkElement(linkEl);\r\n    }\r\n    adoptStyleSheets(sheets, hostId) {\r\n        if (sheets.length === 0)\r\n            return;\r\n        const adoptedStyleSheetData = {\r\n            id: hostId,\r\n            styleIds: [],\r\n        };\r\n        const styles = [];\r\n        for (const sheet of sheets) {\r\n            let styleId;\r\n            if (!this.styleMirror.has(sheet)) {\r\n                styleId = this.styleMirror.add(sheet);\r\n                styles.push({\r\n                    styleId,\r\n                    rules: Array.from(sheet.rules || CSSRule, (r, index) => ({\r\n                        rule: stringifyRule(r),\r\n                        index,\r\n                    })),\r\n                });\r\n            }\r\n            else\r\n                styleId = this.styleMirror.getId(sheet);\r\n            adoptedStyleSheetData.styleIds.push(styleId);\r\n        }\r\n        if (styles.length > 0)\r\n            adoptedStyleSheetData.styles = styles;\r\n        this.adoptedStyleSheetCb(adoptedStyleSheetData);\r\n    }\r\n    reset() {\r\n        this.styleMirror.reset();\r\n        this.trackedLinkElements = new WeakSet();\r\n    }\r\n    trackStylesheetInLinkElement(linkEl) {\r\n    }\r\n}\n\nexport { StylesheetManager };\n","class ProcessedNodeManager {\r\n    constructor() {\r\n        this.nodeMap = new WeakMap();\r\n        this.loop = true;\r\n        this.periodicallyClear();\r\n    }\r\n    periodicallyClear() {\r\n        requestAnimationFrame(() => {\r\n            this.clear();\r\n            if (this.loop)\r\n                this.periodicallyClear();\r\n        });\r\n    }\r\n    inOtherBuffer(node, thisBuffer) {\r\n        const buffers = this.nodeMap.get(node);\r\n        return (buffers && Array.from(buffers).some((buffer) => buffer !== thisBuffer));\r\n    }\r\n    add(node, buffer) {\r\n        this.nodeMap.set(node, (this.nodeMap.get(node) || new Set()).add(buffer));\r\n    }\r\n    clear() {\r\n        this.nodeMap = new WeakMap();\r\n    }\r\n    destroy() {\r\n        this.loop = false;\r\n    }\r\n}\n\nexport { ProcessedNodeManager as default };\n","import { createMirror, snapshot } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { initObservers, mutationBuffers } from './observer.js';\nimport { polyfill, nowTimestamp, on, getWindowWidth, getWindowHeight, getWindowScroll, isSerializedIframe, isSerializedStylesheet, hasShadowRoot } from '../utils.js';\nimport { EventType, IncrementalSource } from '../../../types/dist/rrweb-types.js';\nimport { IframeManagerNoop, IframeManager } from './iframe-manager.js';\nimport { ShadowDomManagerNoop, ShadowDomManager } from './shadow-dom-manager.js';\nimport { CanvasManagerNoop, CanvasManager } from './observers/canvas/canvas-manager.js';\nimport { StylesheetManager } from './stylesheet-manager.js';\nimport ProcessedNodeManager from './processed-node-manager.js';\nimport { callbackWrapper, unregisterErrorHandler, registerErrorHandler } from './error-handler.js';\n\nfunction wrapEvent(e) {\r\n    return Object.assign(Object.assign({}, e), { timestamp: nowTimestamp() });\r\n}\r\nlet wrappedEmit;\r\nlet takeFullSnapshot;\r\nlet canvasManager;\r\nlet recording = false;\r\nconst mirror = createMirror();\r\nfunction record(options = {}) {\r\n    const { emit, checkoutEveryNms, checkoutEveryNth, blockClass = 'rr-block', blockSelector = null, unblockSelector = null, ignoreClass = 'rr-ignore', ignoreSelector = null, maskAllText = false, maskTextClass = 'rr-mask', unmaskTextClass = null, maskTextSelector = null, unmaskTextSelector = null, inlineStylesheet = true, maskAllInputs, maskInputOptions: _maskInputOptions, slimDOMOptions: _slimDOMOptions, maskAttributeFn, maskInputFn, maskTextFn, hooks, packFn, sampling = {}, dataURLOptions = {}, mousemoveWait, recordCanvas = false, recordCrossOriginIframes = false, recordAfter = options.recordAfter === 'DOMContentLoaded'\r\n        ? options.recordAfter\r\n        : 'load', userTriggeredOnInput = false, collectFonts = false, inlineImages = false, plugins, keepIframeSrcFn = () => false, ignoreCSSAttributes = new Set([]), errorHandler, onMutation, } = options;\r\n    registerErrorHandler(errorHandler);\r\n    const inEmittingFrame = recordCrossOriginIframes\r\n        ? window.parent === window\r\n        : true;\r\n    let passEmitsToParent = false;\r\n    if (!inEmittingFrame) {\r\n        try {\r\n            if (window.parent.document) {\r\n                passEmitsToParent = false;\r\n            }\r\n        }\r\n        catch (e) {\r\n            passEmitsToParent = true;\r\n        }\r\n    }\r\n    if (inEmittingFrame && !emit) {\r\n        throw new Error('emit function is required');\r\n    }\r\n    if (mousemoveWait !== undefined && sampling.mousemove === undefined) {\r\n        sampling.mousemove = mousemoveWait;\r\n    }\r\n    mirror.reset();\r\n    const maskInputOptions = maskAllInputs === true\r\n        ? {\r\n            color: true,\r\n            date: true,\r\n            'datetime-local': true,\r\n            email: true,\r\n            month: true,\r\n            number: true,\r\n            range: true,\r\n            search: true,\r\n            tel: true,\r\n            text: true,\r\n            time: true,\r\n            url: true,\r\n            week: true,\r\n            textarea: true,\r\n            select: true,\r\n            radio: true,\r\n            checkbox: true,\r\n        }\r\n        : _maskInputOptions !== undefined\r\n            ? _maskInputOptions\r\n            : {};\r\n    const slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === 'all'\r\n        ? {\r\n            script: true,\r\n            comment: true,\r\n            headFavicon: true,\r\n            headWhitespace: true,\r\n            headMetaSocial: true,\r\n            headMetaRobots: true,\r\n            headMetaHttpEquiv: true,\r\n            headMetaVerification: true,\r\n            headMetaAuthorship: _slimDOMOptions === 'all',\r\n            headMetaDescKeywords: _slimDOMOptions === 'all',\r\n        }\r\n        : _slimDOMOptions\r\n            ? _slimDOMOptions\r\n            : {};\r\n    polyfill();\r\n    let lastFullSnapshotEvent;\r\n    let incrementalSnapshotCount = 0;\r\n    const eventProcessor = (e) => {\r\n        for (const plugin of plugins || []) {\r\n            if (plugin.eventProcessor) {\r\n                e = plugin.eventProcessor(e);\r\n            }\r\n        }\r\n        if (packFn &&\r\n            !passEmitsToParent) {\r\n            e = packFn(e);\r\n        }\r\n        return e;\r\n    };\r\n    wrappedEmit = (e, isCheckout) => {\r\n        var _a;\r\n        if (((_a = mutationBuffers[0]) === null || _a === void 0 ? void 0 : _a.isFrozen()) &&\r\n            e.type !== EventType.FullSnapshot &&\r\n            !(e.type === EventType.IncrementalSnapshot &&\r\n                e.data.source === IncrementalSource.Mutation)) {\r\n            mutationBuffers.forEach((buf) => buf.unfreeze());\r\n        }\r\n        if (inEmittingFrame) {\r\n            emit === null || emit === void 0 ? void 0 : emit(eventProcessor(e), isCheckout);\r\n        }\r\n        else if (passEmitsToParent) {\r\n            const message = {\r\n                type: 'rrweb',\r\n                event: eventProcessor(e),\r\n                origin: window.location.origin,\r\n                isCheckout,\r\n            };\r\n            window.parent.postMessage(message, '*');\r\n        }\r\n        if (e.type === EventType.FullSnapshot) {\r\n            lastFullSnapshotEvent = e;\r\n            incrementalSnapshotCount = 0;\r\n        }\r\n        else if (e.type === EventType.IncrementalSnapshot) {\r\n            if (e.data.source === IncrementalSource.Mutation &&\r\n                e.data.isAttachIframe) {\r\n                return;\r\n            }\r\n            incrementalSnapshotCount++;\r\n            const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\r\n            const exceedTime = checkoutEveryNms &&\r\n                e.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\r\n            if (exceedCount || exceedTime) {\r\n                takeFullSnapshot(true);\r\n            }\r\n        }\r\n    };\r\n    const wrappedMutationEmit = (m) => {\r\n        wrappedEmit(wrapEvent({\r\n            type: EventType.IncrementalSnapshot,\r\n            data: Object.assign({ source: IncrementalSource.Mutation }, m),\r\n        }));\r\n    };\r\n    const wrappedScrollEmit = (p) => wrappedEmit(wrapEvent({\r\n        type: EventType.IncrementalSnapshot,\r\n        data: Object.assign({ source: IncrementalSource.Scroll }, p),\r\n    }));\r\n    const wrappedCanvasMutationEmit = (p) => wrappedEmit(wrapEvent({\r\n        type: EventType.IncrementalSnapshot,\r\n        data: Object.assign({ source: IncrementalSource.CanvasMutation }, p),\r\n    }));\r\n    const wrappedAdoptedStyleSheetEmit = (a) => wrappedEmit(wrapEvent({\r\n        type: EventType.IncrementalSnapshot,\r\n        data: Object.assign({ source: IncrementalSource.AdoptedStyleSheet }, a),\r\n    }));\r\n    const stylesheetManager = new StylesheetManager({\r\n        mutationCb: wrappedMutationEmit,\r\n        adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit,\r\n    });\r\n    const iframeManager = typeof __RRWEB_EXCLUDE_IFRAME__ === 'boolean' && __RRWEB_EXCLUDE_IFRAME__\r\n        ? new IframeManagerNoop()\r\n        : new IframeManager({\r\n            mirror,\r\n            mutationCb: wrappedMutationEmit,\r\n            stylesheetManager: stylesheetManager,\r\n            recordCrossOriginIframes,\r\n            wrappedEmit,\r\n        });\r\n    for (const plugin of plugins || []) {\r\n        if (plugin.getMirror)\r\n            plugin.getMirror({\r\n                nodeMirror: mirror,\r\n                crossOriginIframeMirror: iframeManager.crossOriginIframeMirror,\r\n                crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror,\r\n            });\r\n    }\r\n    const processedNodeManager = new ProcessedNodeManager();\r\n    canvasManager =\r\n        typeof __RRWEB_EXCLUDE_CANVAS__ === 'boolean' && __RRWEB_EXCLUDE_CANVAS__\r\n            ? new CanvasManagerNoop()\r\n            : new CanvasManager({\r\n                recordCanvas,\r\n                mutationCb: wrappedCanvasMutationEmit,\r\n                win: window,\r\n                blockClass,\r\n                blockSelector,\r\n                unblockSelector,\r\n                mirror,\r\n                sampling: sampling.canvas,\r\n                dataURLOptions,\r\n            });\r\n    const shadowDomManager = typeof __RRWEB_EXCLUDE_SHADOW_DOM__ === 'boolean' &&\r\n        __RRWEB_EXCLUDE_SHADOW_DOM__\r\n        ? new ShadowDomManagerNoop()\r\n        : new ShadowDomManager({\r\n            mutationCb: wrappedMutationEmit,\r\n            scrollCb: wrappedScrollEmit,\r\n            bypassOptions: {\r\n                onMutation,\r\n                blockClass,\r\n                blockSelector,\r\n                unblockSelector,\r\n                maskAllText,\r\n                maskTextClass,\r\n                unmaskTextClass,\r\n                maskTextSelector,\r\n                unmaskTextSelector,\r\n                inlineStylesheet,\r\n                maskInputOptions,\r\n                dataURLOptions,\r\n                maskAttributeFn,\r\n                maskTextFn,\r\n                maskInputFn,\r\n                recordCanvas,\r\n                inlineImages,\r\n                sampling,\r\n                slimDOMOptions,\r\n                iframeManager,\r\n                stylesheetManager,\r\n                canvasManager,\r\n                keepIframeSrcFn,\r\n                processedNodeManager,\r\n            },\r\n            mirror,\r\n        });\r\n    takeFullSnapshot = (isCheckout = false) => {\r\n        wrappedEmit(wrapEvent({\r\n            type: EventType.Meta,\r\n            data: {\r\n                href: window.location.href,\r\n                width: getWindowWidth(),\r\n                height: getWindowHeight(),\r\n            },\r\n        }), isCheckout);\r\n        stylesheetManager.reset();\r\n        shadowDomManager.init();\r\n        mutationBuffers.forEach((buf) => buf.lock());\r\n        const node = snapshot(document, {\r\n            mirror,\r\n            blockClass,\r\n            blockSelector,\r\n            unblockSelector,\r\n            maskAllText,\r\n            maskTextClass,\r\n            unmaskTextClass,\r\n            maskTextSelector,\r\n            unmaskTextSelector,\r\n            inlineStylesheet,\r\n            maskAllInputs: maskInputOptions,\r\n            maskAttributeFn,\r\n            maskInputFn,\r\n            maskTextFn,\r\n            slimDOM: slimDOMOptions,\r\n            dataURLOptions,\r\n            recordCanvas,\r\n            inlineImages,\r\n            onSerialize: (n) => {\r\n                if (isSerializedIframe(n, mirror)) {\r\n                    iframeManager.addIframe(n);\r\n                }\r\n                if (isSerializedStylesheet(n, mirror)) {\r\n                    stylesheetManager.trackLinkElement(n);\r\n                }\r\n                if (hasShadowRoot(n)) {\r\n                    shadowDomManager.addShadowRoot(n.shadowRoot, document);\r\n                }\r\n            },\r\n            onIframeLoad: (iframe, childSn) => {\r\n                iframeManager.attachIframe(iframe, childSn);\r\n                shadowDomManager.observeAttachShadow(iframe);\r\n            },\r\n            onStylesheetLoad: (linkEl, childSn) => {\r\n                stylesheetManager.attachLinkElement(linkEl, childSn);\r\n            },\r\n            keepIframeSrcFn,\r\n        });\r\n        if (!node) {\r\n            return console.warn('Failed to snapshot the document');\r\n        }\r\n        wrappedEmit(wrapEvent({\r\n            type: EventType.FullSnapshot,\r\n            data: {\r\n                node,\r\n                initialOffset: getWindowScroll(window),\r\n            },\r\n        }), isCheckout);\r\n        mutationBuffers.forEach((buf) => buf.unlock());\r\n        if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0)\r\n            stylesheetManager.adoptStyleSheets(document.adoptedStyleSheets, mirror.getId(document));\r\n    };\r\n    try {\r\n        const handlers = [];\r\n        const observe = (doc) => {\r\n            var _a;\r\n            return callbackWrapper(initObservers)({\r\n                onMutation,\r\n                mutationCb: wrappedMutationEmit,\r\n                mousemoveCb: (positions, source) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: {\r\n                        source,\r\n                        positions,\r\n                    },\r\n                })),\r\n                mouseInteractionCb: (d) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: Object.assign({ source: IncrementalSource.MouseInteraction }, d),\r\n                })),\r\n                scrollCb: wrappedScrollEmit,\r\n                viewportResizeCb: (d) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: Object.assign({ source: IncrementalSource.ViewportResize }, d),\r\n                })),\r\n                inputCb: (v) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: Object.assign({ source: IncrementalSource.Input }, v),\r\n                })),\r\n                mediaInteractionCb: (p) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: Object.assign({ source: IncrementalSource.MediaInteraction }, p),\r\n                })),\r\n                styleSheetRuleCb: (r) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: Object.assign({ source: IncrementalSource.StyleSheetRule }, r),\r\n                })),\r\n                styleDeclarationCb: (r) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: Object.assign({ source: IncrementalSource.StyleDeclaration }, r),\r\n                })),\r\n                canvasMutationCb: wrappedCanvasMutationEmit,\r\n                fontCb: (p) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: Object.assign({ source: IncrementalSource.Font }, p),\r\n                })),\r\n                selectionCb: (p) => {\r\n                    wrappedEmit(wrapEvent({\r\n                        type: EventType.IncrementalSnapshot,\r\n                        data: Object.assign({ source: IncrementalSource.Selection }, p),\r\n                    }));\r\n                },\r\n                customElementCb: (c) => {\r\n                    wrappedEmit(wrapEvent({\r\n                        type: EventType.IncrementalSnapshot,\r\n                        data: Object.assign({ source: IncrementalSource.CustomElement }, c),\r\n                    }));\r\n                },\r\n                blockClass,\r\n                ignoreClass,\r\n                ignoreSelector,\r\n                maskAllText,\r\n                maskTextClass,\r\n                unmaskTextClass,\r\n                maskTextSelector,\r\n                unmaskTextSelector,\r\n                maskInputOptions,\r\n                inlineStylesheet,\r\n                sampling,\r\n                recordCanvas,\r\n                inlineImages,\r\n                userTriggeredOnInput,\r\n                collectFonts,\r\n                doc,\r\n                maskAttributeFn,\r\n                maskInputFn,\r\n                maskTextFn,\r\n                keepIframeSrcFn,\r\n                blockSelector,\r\n                unblockSelector,\r\n                slimDOMOptions,\r\n                dataURLOptions,\r\n                mirror,\r\n                iframeManager,\r\n                stylesheetManager,\r\n                shadowDomManager,\r\n                processedNodeManager,\r\n                canvasManager,\r\n                ignoreCSSAttributes,\r\n                plugins: ((_a = plugins === null || plugins === void 0 ? void 0 : plugins.filter((p) => p.observer)) === null || _a === void 0 ? void 0 : _a.map((p) => ({\r\n                    observer: p.observer,\r\n                    options: p.options,\r\n                    callback: (payload) => wrappedEmit(wrapEvent({\r\n                        type: EventType.Plugin,\r\n                        data: {\r\n                            plugin: p.name,\r\n                            payload,\r\n                        },\r\n                    })),\r\n                }))) || [],\r\n            }, hooks);\r\n        };\r\n        iframeManager.addLoadListener((iframeEl) => {\r\n            try {\r\n                handlers.push(observe(iframeEl.contentDocument));\r\n            }\r\n            catch (error) {\r\n                console.warn(error);\r\n            }\r\n        });\r\n        const init = () => {\r\n            takeFullSnapshot();\r\n            handlers.push(observe(document));\r\n            recording = true;\r\n        };\r\n        if (document.readyState === 'interactive' ||\r\n            document.readyState === 'complete') {\r\n            init();\r\n        }\r\n        else {\r\n            handlers.push(on('DOMContentLoaded', () => {\r\n                wrappedEmit(wrapEvent({\r\n                    type: EventType.DomContentLoaded,\r\n                    data: {},\r\n                }));\r\n                if (recordAfter === 'DOMContentLoaded')\r\n                    init();\r\n            }));\r\n            handlers.push(on('load', () => {\r\n                wrappedEmit(wrapEvent({\r\n                    type: EventType.Load,\r\n                    data: {},\r\n                }));\r\n                if (recordAfter === 'load')\r\n                    init();\r\n            }, window));\r\n        }\r\n        return () => {\r\n            handlers.forEach((h) => h());\r\n            processedNodeManager.destroy();\r\n            recording = false;\r\n            unregisterErrorHandler();\r\n        };\r\n    }\r\n    catch (error) {\r\n        console.warn(error);\r\n    }\r\n}\r\nrecord.addCustomEvent = (tag, payload) => {\r\n    if (!recording) {\r\n        throw new Error('please add custom event after start recording');\r\n    }\r\n    wrappedEmit(wrapEvent({\r\n        type: EventType.Custom,\r\n        data: {\r\n            tag,\r\n            payload,\r\n        },\r\n    }));\r\n};\r\nrecord.freezePage = () => {\r\n    mutationBuffers.forEach((buf) => buf.freeze());\r\n};\r\nrecord.takeFullSnapshot = (isCheckout) => {\r\n    if (!recording) {\r\n        throw new Error('please take full snapshot after start recording');\r\n    }\r\n    takeFullSnapshot(isCheckout);\r\n};\r\nrecord.mirror = mirror;\n\nexport { record as default };\n","/**\n * Converts a timestamp to ms, if it was in s, or keeps it as ms.\n */\nexport function timestampToMs(timestamp: number): number {\n  const isMs = timestamp > 9999999999;\n  return isMs ? timestamp : timestamp * 1000;\n}\n\n/**\n * Converts a timestamp to s, if it was in ms, or keeps it as s.\n */\nexport function timestampToS(timestamp: number): number {\n  const isMs = timestamp > 9999999999;\n  return isMs ? timestamp / 1000 : timestamp;\n}\n","import { EventType } from '@sentry-internal/rrweb';\nimport type { Breadcrumb } from '@sentry/types';\nimport { normalize } from '@sentry/utils';\n\nimport type { ReplayContainer } from '../../types';\n\n/**\n * Add a breadcrumb event to replay.\n */\nexport function addBreadcrumbEvent(replay: ReplayContainer, breadcrumb: Breadcrumb): void {\n  if (breadcrumb.category === 'sentry.transaction') {\n    return;\n  }\n\n  if (['ui.click', 'ui.input'].includes(breadcrumb.category as string)) {\n    replay.triggerUserActivity();\n  } else {\n    replay.checkAndHandleExpiredSession();\n  }\n\n  replay.addUpdate(() => {\n    void replay.throttledAddEvent({\n      type: EventType.Custom,\n      // TODO: We were converting from ms to seconds for breadcrumbs, spans,\n      // but maybe we should just keep them as milliseconds\n      timestamp: (breadcrumb.timestamp || 0) * 1000,\n      data: {\n        tag: 'breadcrumb',\n        // normalize to max. 10 depth and 1_000 properties per object\n        payload: normalize(breadcrumb, 10, 1_000),\n      },\n    });\n\n    // Do not flush after console log messages\n    return breadcrumb.category === 'console';\n  });\n}\n","import type { INode } from '@sentry-internal/rrweb-snapshot';\n\nexport interface DomHandlerData {\n  name: string;\n  event: Node | { target: EventTarget };\n}\n\nconst INTERACTIVE_SELECTOR = 'button,a';\n\n/**\n * For clicks, we check if the target is inside of a button or link\n * If so, we use this as the target instead\n * This is useful because if you click on the image in <button><img></button>,\n * The target will be the image, not the button, which we don't want here\n */\nexport function getClickTargetNode(event: DomHandlerData['event'] | MouseEvent): Node | INode | null {\n  const target = getTargetNode(event);\n\n  if (!target || !(target instanceof Element)) {\n    return target;\n  }\n\n  const closestInteractive = target.closest(INTERACTIVE_SELECTOR);\n  return closestInteractive || target;\n}\n\n/** Get the event target node. */\nexport function getTargetNode(event: Node | { target: EventTarget | null }): Node | INode | null {\n  if (isEventWithTarget(event)) {\n    return event.target as Node | null;\n  }\n\n  return event;\n}\n\nfunction isEventWithTarget(event: unknown): event is { target: EventTarget | null } {\n  return typeof event === 'object' && !!event && 'target' in event;\n}\n","import { fill } from '@sentry/utils';\n\nimport { WINDOW } from '../../constants';\n\ntype WindowOpenHandler = () => void;\n\nlet handlers: undefined | WindowOpenHandler[];\n\n/**\n * Register a handler to be called when `window.open()` is called.\n * Returns a cleanup function.\n */\nexport function onWindowOpen(cb: WindowOpenHandler): () => void {\n  // Ensure to only register this once\n  if (!handlers) {\n    handlers = [];\n    monkeyPatchWindowOpen();\n  }\n\n  handlers.push(cb);\n\n  return () => {\n    const pos = handlers ? handlers.indexOf(cb) : -1;\n    if (pos > -1) {\n      (handlers as WindowOpenHandler[]).splice(pos, 1);\n    }\n  };\n}\n\nfunction monkeyPatchWindowOpen(): void {\n  fill(WINDOW, 'open', function (originalWindowOpen: () => void): () => void {\n    return function (...args: unknown[]): void {\n      if (handlers) {\n        try {\n          handlers.forEach(handler => handler());\n        } catch (e) {\n          // ignore errors in here\n        }\n      }\n\n      return originalWindowOpen.apply(WINDOW, args);\n    };\n  });\n}\n","import type { Breadcrumb } from '@sentry/types';\n\nimport { WINDOW } from '../constants';\nimport type {\n  ReplayClickDetector,\n  ReplayContainer,\n  ReplayMultiClickFrame,\n  ReplaySlowClickFrame,\n  SlowClickConfig,\n} from '../types';\nimport { timestampToS } from '../util/timestamp';\nimport { addBreadcrumbEvent } from './util/addBreadcrumbEvent';\nimport { getClickTargetNode } from './util/domUtils';\nimport { onWindowOpen } from './util/onWindowOpen';\n\ntype ClickBreadcrumb = Breadcrumb & {\n  timestamp: number;\n};\n\ninterface Click {\n  timestamp: number;\n  mutationAfter?: number;\n  scrollAfter?: number;\n  clickBreadcrumb: ClickBreadcrumb;\n  clickCount: number;\n  node: HTMLElement;\n}\n\n/** Handle a click. */\nexport function handleClick(clickDetector: ReplayClickDetector, clickBreadcrumb: Breadcrumb, node: HTMLElement): void {\n  clickDetector.handleClick(clickBreadcrumb, node);\n}\n\n/** A click detector class that can be used to detect slow or rage clicks on elements. */\nexport class ClickDetector implements ReplayClickDetector {\n  // protected for testing\n  protected _lastMutation: number;\n  protected _lastScroll: number;\n\n  private _clicks: Click[];\n  private _teardown: undefined | (() => void);\n\n  private _threshold: number;\n  private _scollTimeout: number;\n  private _timeout: number;\n  private _ignoreSelector: string;\n\n  private _replay: ReplayContainer;\n  private _checkClickTimeout?: ReturnType<typeof setTimeout>;\n  private _addBreadcrumbEvent: typeof addBreadcrumbEvent;\n\n  public constructor(\n    replay: ReplayContainer,\n    slowClickConfig: SlowClickConfig,\n    // Just for easier testing\n    _addBreadcrumbEvent = addBreadcrumbEvent,\n  ) {\n    this._lastMutation = 0;\n    this._lastScroll = 0;\n    this._clicks = [];\n\n    // We want everything in s, but options are in ms\n    this._timeout = slowClickConfig.timeout / 1000;\n    this._threshold = slowClickConfig.threshold / 1000;\n    this._scollTimeout = slowClickConfig.scrollTimeout / 1000;\n    this._replay = replay;\n    this._ignoreSelector = slowClickConfig.ignoreSelector;\n    this._addBreadcrumbEvent = _addBreadcrumbEvent;\n  }\n\n  /** Register click detection handlers on mutation or scroll. */\n  public addListeners(): void {\n    const mutationHandler = (): void => {\n      this._lastMutation = nowInSeconds();\n    };\n\n    const scrollHandler = (): void => {\n      this._lastScroll = nowInSeconds();\n    };\n\n    const cleanupWindowOpen = onWindowOpen(() => {\n      // Treat window.open as mutation\n      this._lastMutation = nowInSeconds();\n    });\n\n    const clickHandler = (event: MouseEvent): void => {\n      if (!event.target) {\n        return;\n      }\n\n      const node = getClickTargetNode(event);\n      if (node) {\n        this._handleMultiClick(node as HTMLElement);\n      }\n    };\n\n    const obs = new MutationObserver(mutationHandler);\n\n    obs.observe(WINDOW.document.documentElement, {\n      attributes: true,\n      characterData: true,\n      childList: true,\n      subtree: true,\n    });\n\n    WINDOW.addEventListener('scroll', scrollHandler, { passive: true });\n    WINDOW.addEventListener('click', clickHandler, { passive: true });\n\n    this._teardown = () => {\n      WINDOW.removeEventListener('scroll', scrollHandler);\n      WINDOW.removeEventListener('click', clickHandler);\n      cleanupWindowOpen();\n\n      obs.disconnect();\n      this._clicks = [];\n      this._lastMutation = 0;\n      this._lastScroll = 0;\n    };\n  }\n\n  /** Clean up listeners. */\n  public removeListeners(): void {\n    if (this._teardown) {\n      this._teardown();\n    }\n\n    if (this._checkClickTimeout) {\n      clearTimeout(this._checkClickTimeout);\n    }\n  }\n\n  /** Handle a click */\n  public handleClick(breadcrumb: Breadcrumb, node: HTMLElement): void {\n    if (ignoreElement(node, this._ignoreSelector) || !isClickBreadcrumb(breadcrumb)) {\n      return;\n    }\n\n    const newClick: Click = {\n      timestamp: timestampToS(breadcrumb.timestamp),\n      clickBreadcrumb: breadcrumb,\n      // Set this to 0 so we know it originates from the click breadcrumb\n      clickCount: 0,\n      node,\n    };\n\n    // If there was a click in the last 1s on the same element, ignore it - only keep a single reference per second\n    if (\n      this._clicks.some(click => click.node === newClick.node && Math.abs(click.timestamp - newClick.timestamp) < 1)\n    ) {\n      return;\n    }\n\n    this._clicks.push(newClick);\n\n    // If this is the first new click, set a timeout to check for multi clicks\n    if (this._clicks.length === 1) {\n      this._scheduleCheckClicks();\n    }\n  }\n\n  /** Count multiple clicks on elements. */\n  private _handleMultiClick(node: HTMLElement): void {\n    this._getClicks(node).forEach(click => {\n      click.clickCount++;\n    });\n  }\n\n  /** Get all pending clicks for a given node. */\n  private _getClicks(node: HTMLElement): Click[] {\n    return this._clicks.filter(click => click.node === node);\n  }\n\n  /** Check the clicks that happened. */\n  private _checkClicks(): void {\n    const timedOutClicks: Click[] = [];\n\n    const now = nowInSeconds();\n\n    this._clicks.forEach(click => {\n      if (!click.mutationAfter && this._lastMutation) {\n        click.mutationAfter = click.timestamp <= this._lastMutation ? this._lastMutation - click.timestamp : undefined;\n      }\n      if (!click.scrollAfter && this._lastScroll) {\n        click.scrollAfter = click.timestamp <= this._lastScroll ? this._lastScroll - click.timestamp : undefined;\n      }\n\n      // All of these are in seconds!\n      if (click.timestamp + this._timeout <= now) {\n        timedOutClicks.push(click);\n      }\n    });\n\n    // Remove \"old\" clicks\n    for (const click of timedOutClicks) {\n      const pos = this._clicks.indexOf(click);\n\n      if (pos > -1) {\n        this._generateBreadcrumbs(click);\n        this._clicks.splice(pos, 1);\n      }\n    }\n\n    // Trigger new check, unless no clicks left\n    if (this._clicks.length) {\n      this._scheduleCheckClicks();\n    }\n  }\n\n  /** Generate matching breadcrumb(s) for the click. */\n  private _generateBreadcrumbs(click: Click): void {\n    const replay = this._replay;\n    const hadScroll = click.scrollAfter && click.scrollAfter <= this._scollTimeout;\n    const hadMutation = click.mutationAfter && click.mutationAfter <= this._threshold;\n\n    const isSlowClick = !hadScroll && !hadMutation;\n    const { clickCount, clickBreadcrumb } = click;\n\n    // Slow click\n    if (isSlowClick) {\n      // If `mutationAfter` is set, it means a mutation happened after the threshold, but before the timeout\n      // If not, it means we just timed out without scroll & mutation\n      const timeAfterClickMs = Math.min(click.mutationAfter || this._timeout, this._timeout) * 1000;\n      const endReason = timeAfterClickMs < this._timeout * 1000 ? 'mutation' : 'timeout';\n\n      const breadcrumb: ReplaySlowClickFrame = {\n        type: 'default',\n        message: clickBreadcrumb.message,\n        timestamp: clickBreadcrumb.timestamp,\n        category: 'ui.slowClickDetected',\n        data: {\n          ...clickBreadcrumb.data,\n          url: WINDOW.location.href,\n          route: replay.getCurrentRoute(),\n          timeAfterClickMs,\n          endReason,\n          // If clickCount === 0, it means multiClick was not correctly captured here\n          // - we still want to send 1 in this case\n          clickCount: clickCount || 1,\n        },\n      };\n\n      this._addBreadcrumbEvent(replay, breadcrumb);\n      return;\n    }\n\n    // Multi click\n    if (clickCount > 1) {\n      const breadcrumb: ReplayMultiClickFrame = {\n        type: 'default',\n        message: clickBreadcrumb.message,\n        timestamp: clickBreadcrumb.timestamp,\n        category: 'ui.multiClick',\n        data: {\n          ...clickBreadcrumb.data,\n          url: WINDOW.location.href,\n          route: replay.getCurrentRoute(),\n          clickCount,\n          metric: true,\n        },\n      };\n\n      this._addBreadcrumbEvent(replay, breadcrumb);\n    }\n  }\n\n  /** Schedule to check current clicks. */\n  private _scheduleCheckClicks(): void {\n    if (this._checkClickTimeout) {\n      clearTimeout(this._checkClickTimeout);\n    }\n\n    this._checkClickTimeout = setTimeout(() => this._checkClicks(), 1000);\n  }\n}\n\nconst SLOW_CLICK_TAGS = ['A', 'BUTTON', 'INPUT'];\n\n/** exported for tests only */\nexport function ignoreElement(node: HTMLElement, ignoreSelector: string): boolean {\n  if (!SLOW_CLICK_TAGS.includes(node.tagName)) {\n    return true;\n  }\n\n  // If <input> tag, we only want to consider input[type='submit'] & input[type='button']\n  if (node.tagName === 'INPUT' && !['submit', 'button'].includes(node.getAttribute('type') || '')) {\n    return true;\n  }\n\n  // If <a> tag, detect special variants that may not lead to an action\n  // If target !== _self, we may open the link somewhere else, which would lead to no action\n  // Also, when downloading a file, we may not leave the page, but still not trigger an action\n  if (\n    node.tagName === 'A' &&\n    (node.hasAttribute('download') || (node.hasAttribute('target') && node.getAttribute('target') !== '_self'))\n  ) {\n    return true;\n  }\n\n  if (ignoreSelector && node.matches(ignoreSelector)) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction isClickBreadcrumb(breadcrumb: Breadcrumb): breadcrumb is ClickBreadcrumb {\n  return !!(breadcrumb.data && typeof breadcrumb.data.nodeId === 'number' && breadcrumb.timestamp);\n}\n\n// This is good enough for us, and is easier to test/mock than `timestampInSeconds`\nfunction nowInSeconds(): number {\n  return Date.now() / 1000;\n}\n","import type { ReplayBreadcrumbFrame } from '../types/replayFrame';\n\n/**\n * Create a breadcrumb for a replay.\n */\nexport function createBreadcrumb(\n  breadcrumb: Omit<ReplayBreadcrumbFrame, 'timestamp' | 'type'> & Partial<Pick<ReplayBreadcrumbFrame, 'timestamp'>>,\n): ReplayBreadcrumbFrame {\n  return {\n    timestamp: Date.now() / 1000,\n    type: 'default',\n    ...breadcrumb,\n  };\n}\n","var NodeType;\r\n(function (NodeType) {\r\n    NodeType[NodeType[\"Document\"] = 0] = \"Document\";\r\n    NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\r\n    NodeType[NodeType[\"Element\"] = 2] = \"Element\";\r\n    NodeType[NodeType[\"Text\"] = 3] = \"Text\";\r\n    NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\r\n    NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\r\n})(NodeType || (NodeType = {}));\n\nfunction isElement(n) {\r\n    return n.nodeType === n.ELEMENT_NODE;\r\n}\r\nfunction isShadowRoot(n) {\r\n    const host = n === null || n === void 0 ? void 0 : n.host;\r\n    return Boolean((host === null || host === void 0 ? void 0 : host.shadowRoot) === n);\r\n}\r\nfunction isNativeShadowDom(shadowRoot) {\r\n    return Object.prototype.toString.call(shadowRoot) === '[object ShadowRoot]';\r\n}\r\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\r\n    if (cssText.includes(' background-clip: text;') &&\r\n        !cssText.includes(' -webkit-background-clip: text;')) {\r\n        cssText = cssText.replace(' background-clip: text;', ' -webkit-background-clip: text; background-clip: text;');\r\n    }\r\n    return cssText;\r\n}\r\nfunction escapeImportStatement(rule) {\r\n    const { cssText } = rule;\r\n    if (cssText.split('\"').length < 3)\r\n        return cssText;\r\n    const statement = ['@import', `url(${JSON.stringify(rule.href)})`];\r\n    if (rule.layerName === '') {\r\n        statement.push(`layer`);\r\n    }\r\n    else if (rule.layerName) {\r\n        statement.push(`layer(${rule.layerName})`);\r\n    }\r\n    if (rule.supportsText) {\r\n        statement.push(`supports(${rule.supportsText})`);\r\n    }\r\n    if (rule.media.length) {\r\n        statement.push(rule.media.mediaText);\r\n    }\r\n    return statement.join(' ') + ';';\r\n}\r\nfunction stringifyStylesheet(s) {\r\n    try {\r\n        const rules = s.rules || s.cssRules;\r\n        return rules\r\n            ? fixBrowserCompatibilityIssuesInCSS(Array.from(rules, stringifyRule).join(''))\r\n            : null;\r\n    }\r\n    catch (error) {\r\n        return null;\r\n    }\r\n}\r\nfunction stringifyRule(rule) {\r\n    let importStringified;\r\n    if (isCSSImportRule(rule)) {\r\n        try {\r\n            importStringified =\r\n                stringifyStylesheet(rule.styleSheet) ||\r\n                    escapeImportStatement(rule);\r\n        }\r\n        catch (error) {\r\n        }\r\n    }\r\n    else if (isCSSStyleRule(rule) && rule.selectorText.includes(':')) {\r\n        return fixSafariColons(rule.cssText);\r\n    }\r\n    return importStringified || rule.cssText;\r\n}\r\nfunction fixSafariColons(cssStringified) {\r\n    const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\r\n    return cssStringified.replace(regex, '$1\\\\$2');\r\n}\r\nfunction isCSSImportRule(rule) {\r\n    return 'styleSheet' in rule;\r\n}\r\nfunction isCSSStyleRule(rule) {\r\n    return 'selectorText' in rule;\r\n}\r\nclass Mirror {\r\n    constructor() {\r\n        this.idNodeMap = new Map();\r\n        this.nodeMetaMap = new WeakMap();\r\n    }\r\n    getId(n) {\r\n        var _a;\r\n        if (!n)\r\n            return -1;\r\n        const id = (_a = this.getMeta(n)) === null || _a === void 0 ? void 0 : _a.id;\r\n        return id !== null && id !== void 0 ? id : -1;\r\n    }\r\n    getNode(id) {\r\n        return this.idNodeMap.get(id) || null;\r\n    }\r\n    getIds() {\r\n        return Array.from(this.idNodeMap.keys());\r\n    }\r\n    getMeta(n) {\r\n        return this.nodeMetaMap.get(n) || null;\r\n    }\r\n    removeNodeFromMap(n) {\r\n        const id = this.getId(n);\r\n        this.idNodeMap.delete(id);\r\n        if (n.childNodes) {\r\n            n.childNodes.forEach((childNode) => this.removeNodeFromMap(childNode));\r\n        }\r\n    }\r\n    has(id) {\r\n        return this.idNodeMap.has(id);\r\n    }\r\n    hasNode(node) {\r\n        return this.nodeMetaMap.has(node);\r\n    }\r\n    add(n, meta) {\r\n        const id = meta.id;\r\n        this.idNodeMap.set(id, n);\r\n        this.nodeMetaMap.set(n, meta);\r\n    }\r\n    replace(id, n) {\r\n        const oldNode = this.getNode(id);\r\n        if (oldNode) {\r\n            const meta = this.nodeMetaMap.get(oldNode);\r\n            if (meta)\r\n                this.nodeMetaMap.set(n, meta);\r\n        }\r\n        this.idNodeMap.set(id, n);\r\n    }\r\n    reset() {\r\n        this.idNodeMap = new Map();\r\n        this.nodeMetaMap = new WeakMap();\r\n    }\r\n}\r\nfunction createMirror() {\r\n    return new Mirror();\r\n}\r\nfunction shouldMaskInput({ maskInputOptions, tagName, type, }) {\r\n    if (tagName === 'OPTION') {\r\n        tagName = 'SELECT';\r\n    }\r\n    return Boolean(maskInputOptions[tagName.toLowerCase()] ||\r\n        (type && maskInputOptions[type]) ||\r\n        type === 'password' ||\r\n        (tagName === 'INPUT' && !type && maskInputOptions['text']));\r\n}\r\nfunction maskInputValue({ isMasked, element, value, maskInputFn, }) {\r\n    let text = value || '';\r\n    if (!isMasked) {\r\n        return text;\r\n    }\r\n    if (maskInputFn) {\r\n        text = maskInputFn(text, element);\r\n    }\r\n    return '*'.repeat(text.length);\r\n}\r\nfunction toLowerCase(str) {\r\n    return str.toLowerCase();\r\n}\r\nfunction toUpperCase(str) {\r\n    return str.toUpperCase();\r\n}\r\nconst ORIGINAL_ATTRIBUTE_NAME = '__rrweb_original__';\r\nfunction is2DCanvasBlank(canvas) {\r\n    const ctx = canvas.getContext('2d');\r\n    if (!ctx)\r\n        return true;\r\n    const chunkSize = 50;\r\n    for (let x = 0; x < canvas.width; x += chunkSize) {\r\n        for (let y = 0; y < canvas.height; y += chunkSize) {\r\n            const getImageData = ctx.getImageData;\r\n            const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData\r\n                ? getImageData[ORIGINAL_ATTRIBUTE_NAME]\r\n                : getImageData;\r\n            const pixelBuffer = new Uint32Array(originalGetImageData.call(ctx, x, y, Math.min(chunkSize, canvas.width - x), Math.min(chunkSize, canvas.height - y)).data.buffer);\r\n            if (pixelBuffer.some((pixel) => pixel !== 0))\r\n                return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\nfunction isNodeMetaEqual(a, b) {\r\n    if (!a || !b || a.type !== b.type)\r\n        return false;\r\n    if (a.type === NodeType.Document)\r\n        return a.compatMode === b.compatMode;\r\n    else if (a.type === NodeType.DocumentType)\r\n        return (a.name === b.name &&\r\n            a.publicId === b.publicId &&\r\n            a.systemId === b.systemId);\r\n    else if (a.type === NodeType.Comment ||\r\n        a.type === NodeType.Text ||\r\n        a.type === NodeType.CDATA)\r\n        return a.textContent === b.textContent;\r\n    else if (a.type === NodeType.Element)\r\n        return (a.tagName === b.tagName &&\r\n            JSON.stringify(a.attributes) ===\r\n                JSON.stringify(b.attributes) &&\r\n            a.isSVG === b.isSVG &&\r\n            a.needBlock === b.needBlock);\r\n    return false;\r\n}\r\nfunction getInputType(element) {\r\n    const type = element.type;\r\n    return element.hasAttribute('data-rr-is-password')\r\n        ? 'password'\r\n        : type\r\n            ?\r\n                toLowerCase(type)\r\n            : null;\r\n}\r\nfunction getInputValue(el, tagName, type) {\r\n    if (tagName === 'INPUT' && (type === 'radio' || type === 'checkbox')) {\r\n        return el.getAttribute('value') || '';\r\n    }\r\n    return el.value;\r\n}\n\nlet _id = 1;\r\nconst tagNameRegex = new RegExp('[^a-z0-9-_:]');\r\nconst IGNORED_NODE = -2;\r\nfunction genId() {\r\n    return _id++;\r\n}\r\nfunction getValidTagName(element) {\r\n    if (element instanceof HTMLFormElement) {\r\n        return 'form';\r\n    }\r\n    const processedTagName = toLowerCase(element.tagName);\r\n    if (tagNameRegex.test(processedTagName)) {\r\n        return 'div';\r\n    }\r\n    return processedTagName;\r\n}\r\nfunction extractOrigin(url) {\r\n    let origin = '';\r\n    if (url.indexOf('//') > -1) {\r\n        origin = url.split('/').slice(0, 3).join('/');\r\n    }\r\n    else {\r\n        origin = url.split('/')[0];\r\n    }\r\n    origin = origin.split('?')[0];\r\n    return origin;\r\n}\r\nlet canvasService;\r\nlet canvasCtx;\r\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\r\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\r\nconst URL_WWW_MATCH = /^www\\..*/i;\r\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\r\nfunction absoluteToStylesheet(cssText, href) {\r\n    return (cssText || '').replace(URL_IN_CSS_REF, (origin, quote1, path1, quote2, path2, path3) => {\r\n        const filePath = path1 || path2 || path3;\r\n        const maybeQuote = quote1 || quote2 || '';\r\n        if (!filePath) {\r\n            return origin;\r\n        }\r\n        if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\r\n            return `url(${maybeQuote}${filePath}${maybeQuote})`;\r\n        }\r\n        if (DATA_URI.test(filePath)) {\r\n            return `url(${maybeQuote}${filePath}${maybeQuote})`;\r\n        }\r\n        if (filePath[0] === '/') {\r\n            return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`;\r\n        }\r\n        const stack = href.split('/');\r\n        const parts = filePath.split('/');\r\n        stack.pop();\r\n        for (const part of parts) {\r\n            if (part === '.') {\r\n                continue;\r\n            }\r\n            else if (part === '..') {\r\n                stack.pop();\r\n            }\r\n            else {\r\n                stack.push(part);\r\n            }\r\n        }\r\n        return `url(${maybeQuote}${stack.join('/')}${maybeQuote})`;\r\n    });\r\n}\r\nconst SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\r\nconst SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\r\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\r\n    if (attributeValue.trim() === '') {\r\n        return attributeValue;\r\n    }\r\n    let pos = 0;\r\n    function collectCharacters(regEx) {\r\n        let chars;\r\n        const match = regEx.exec(attributeValue.substring(pos));\r\n        if (match) {\r\n            chars = match[0];\r\n            pos += chars.length;\r\n            return chars;\r\n        }\r\n        return '';\r\n    }\r\n    const output = [];\r\n    while (true) {\r\n        collectCharacters(SRCSET_COMMAS_OR_SPACES);\r\n        if (pos >= attributeValue.length) {\r\n            break;\r\n        }\r\n        let url = collectCharacters(SRCSET_NOT_SPACES);\r\n        if (url.slice(-1) === ',') {\r\n            url = absoluteToDoc(doc, url.substring(0, url.length - 1));\r\n            output.push(url);\r\n        }\r\n        else {\r\n            let descriptorsStr = '';\r\n            url = absoluteToDoc(doc, url);\r\n            let inParens = false;\r\n            while (true) {\r\n                const c = attributeValue.charAt(pos);\r\n                if (c === '') {\r\n                    output.push((url + descriptorsStr).trim());\r\n                    break;\r\n                }\r\n                else if (!inParens) {\r\n                    if (c === ',') {\r\n                        pos += 1;\r\n                        output.push((url + descriptorsStr).trim());\r\n                        break;\r\n                    }\r\n                    else if (c === '(') {\r\n                        inParens = true;\r\n                    }\r\n                }\r\n                else {\r\n                    if (c === ')') {\r\n                        inParens = false;\r\n                    }\r\n                }\r\n                descriptorsStr += c;\r\n                pos += 1;\r\n            }\r\n        }\r\n    }\r\n    return output.join(', ');\r\n}\r\nfunction absoluteToDoc(doc, attributeValue) {\r\n    if (!attributeValue || attributeValue.trim() === '') {\r\n        return attributeValue;\r\n    }\r\n    const a = doc.createElement('a');\r\n    a.href = attributeValue;\r\n    return a.href;\r\n}\r\nfunction isSVGElement(el) {\r\n    return Boolean(el.tagName === 'svg' || el.ownerSVGElement);\r\n}\r\nfunction getHref() {\r\n    const a = document.createElement('a');\r\n    a.href = '';\r\n    return a.href;\r\n}\r\nfunction transformAttribute(doc, tagName, name, value, element, maskAttributeFn) {\r\n    if (!value) {\r\n        return value;\r\n    }\r\n    if (name === 'src' ||\r\n        (name === 'href' && !(tagName === 'use' && value[0] === '#'))) {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    else if (name === 'xlink:href' && value[0] !== '#') {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    else if (name === 'background' &&\r\n        (tagName === 'table' || tagName === 'td' || tagName === 'th')) {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    else if (name === 'srcset') {\r\n        return getAbsoluteSrcsetString(doc, value);\r\n    }\r\n    else if (name === 'style') {\r\n        return absoluteToStylesheet(value, getHref());\r\n    }\r\n    else if (tagName === 'object' && name === 'data') {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    if (typeof maskAttributeFn === 'function') {\r\n        return maskAttributeFn(name, value, element);\r\n    }\r\n    return value;\r\n}\r\nfunction ignoreAttribute(tagName, name, _value) {\r\n    return (tagName === 'video' || tagName === 'audio') && name === 'autoplay';\r\n}\r\nfunction _isBlockedElement(element, blockClass, blockSelector, unblockSelector) {\r\n    try {\r\n        if (unblockSelector && element.matches(unblockSelector)) {\r\n            return false;\r\n        }\r\n        if (typeof blockClass === 'string') {\r\n            if (element.classList.contains(blockClass)) {\r\n                return true;\r\n            }\r\n        }\r\n        else {\r\n            for (let eIndex = element.classList.length; eIndex--;) {\r\n                const className = element.classList[eIndex];\r\n                if (blockClass.test(className)) {\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n        if (blockSelector) {\r\n            return element.matches(blockSelector);\r\n        }\r\n    }\r\n    catch (e) {\r\n    }\r\n    return false;\r\n}\r\nfunction elementClassMatchesRegex(el, regex) {\r\n    for (let eIndex = el.classList.length; eIndex--;) {\r\n        const className = el.classList[eIndex];\r\n        if (regex.test(className)) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\nfunction classMatchesRegex(node, regex, checkAncestors) {\r\n    if (!node)\r\n        return false;\r\n    if (checkAncestors) {\r\n        return (distanceToMatch(node, (node) => elementClassMatchesRegex(node, regex)) >= 0);\r\n    }\r\n    else if (node.nodeType === node.ELEMENT_NODE) {\r\n        return elementClassMatchesRegex(node, regex);\r\n    }\r\n    return false;\r\n}\r\nfunction distanceToMatch(node, matchPredicate, limit = Infinity, distance = 0) {\r\n    if (!node)\r\n        return -1;\r\n    if (node.nodeType !== node.ELEMENT_NODE)\r\n        return -1;\r\n    if (distance > limit)\r\n        return -1;\r\n    if (matchPredicate(node))\r\n        return distance;\r\n    return distanceToMatch(node.parentNode, matchPredicate, limit, distance + 1);\r\n}\r\nfunction createMatchPredicate(className, selector) {\r\n    return (node) => {\r\n        const el = node;\r\n        if (el === null)\r\n            return false;\r\n        if (className) {\r\n            if (typeof className === 'string') {\r\n                if (el.matches(`.${className}`))\r\n                    return true;\r\n            }\r\n            else if (elementClassMatchesRegex(el, className)) {\r\n                return true;\r\n            }\r\n        }\r\n        if (selector && el.matches(selector))\r\n            return true;\r\n        return false;\r\n    };\r\n}\r\nfunction needMaskingText(node, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText) {\r\n    try {\r\n        const el = node.nodeType === node.ELEMENT_NODE\r\n            ? node\r\n            : node.parentElement;\r\n        if (el === null)\r\n            return false;\r\n        let maskDistance = -1;\r\n        let unmaskDistance = -1;\r\n        if (maskAllText) {\r\n            unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector));\r\n            if (unmaskDistance < 0) {\r\n                return true;\r\n            }\r\n            maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector), unmaskDistance >= 0 ? unmaskDistance : Infinity);\r\n        }\r\n        else {\r\n            maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector));\r\n            if (maskDistance < 0) {\r\n                return false;\r\n            }\r\n            unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector), maskDistance >= 0 ? maskDistance : Infinity);\r\n        }\r\n        return maskDistance >= 0\r\n            ? unmaskDistance >= 0\r\n                ? maskDistance <= unmaskDistance\r\n                : true\r\n            : unmaskDistance >= 0\r\n                ? false\r\n                : !!maskAllText;\r\n    }\r\n    catch (e) {\r\n    }\r\n    return !!maskAllText;\r\n}\r\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\r\n    const win = iframeEl.contentWindow;\r\n    if (!win) {\r\n        return;\r\n    }\r\n    let fired = false;\r\n    let readyState;\r\n    try {\r\n        readyState = win.document.readyState;\r\n    }\r\n    catch (error) {\r\n        return;\r\n    }\r\n    if (readyState !== 'complete') {\r\n        const timer = setTimeout(() => {\r\n            if (!fired) {\r\n                listener();\r\n                fired = true;\r\n            }\r\n        }, iframeLoadTimeout);\r\n        iframeEl.addEventListener('load', () => {\r\n            clearTimeout(timer);\r\n            fired = true;\r\n            listener();\r\n        });\r\n        return;\r\n    }\r\n    const blankUrl = 'about:blank';\r\n    if (win.location.href !== blankUrl ||\r\n        iframeEl.src === blankUrl ||\r\n        iframeEl.src === '') {\r\n        setTimeout(listener, 0);\r\n        return iframeEl.addEventListener('load', listener);\r\n    }\r\n    iframeEl.addEventListener('load', listener);\r\n}\r\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\r\n    let fired = false;\r\n    let styleSheetLoaded;\r\n    try {\r\n        styleSheetLoaded = link.sheet;\r\n    }\r\n    catch (error) {\r\n        return;\r\n    }\r\n    if (styleSheetLoaded)\r\n        return;\r\n    const timer = setTimeout(() => {\r\n        if (!fired) {\r\n            listener();\r\n            fired = true;\r\n        }\r\n    }, styleSheetLoadTimeout);\r\n    link.addEventListener('load', () => {\r\n        clearTimeout(timer);\r\n        fired = true;\r\n        listener();\r\n    });\r\n}\r\nfunction serializeNode(n, options) {\r\n    const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskAttributeFn, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, inlineStylesheet, maskInputOptions = {}, maskTextFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, } = options;\r\n    const rootId = getRootId(doc, mirror);\r\n    switch (n.nodeType) {\r\n        case n.DOCUMENT_NODE:\r\n            if (n.compatMode !== 'CSS1Compat') {\r\n                return {\r\n                    type: NodeType.Document,\r\n                    childNodes: [],\r\n                    compatMode: n.compatMode,\r\n                };\r\n            }\r\n            else {\r\n                return {\r\n                    type: NodeType.Document,\r\n                    childNodes: [],\r\n                };\r\n            }\r\n        case n.DOCUMENT_TYPE_NODE:\r\n            return {\r\n                type: NodeType.DocumentType,\r\n                name: n.name,\r\n                publicId: n.publicId,\r\n                systemId: n.systemId,\r\n                rootId,\r\n            };\r\n        case n.ELEMENT_NODE:\r\n            return serializeElementNode(n, {\r\n                doc,\r\n                blockClass,\r\n                blockSelector,\r\n                unblockSelector,\r\n                inlineStylesheet,\r\n                maskAttributeFn,\r\n                maskInputOptions,\r\n                maskInputFn,\r\n                dataURLOptions,\r\n                inlineImages,\r\n                recordCanvas,\r\n                keepIframeSrcFn,\r\n                newlyAddedElement,\r\n                rootId,\r\n                maskAllText,\r\n                maskTextClass,\r\n                unmaskTextClass,\r\n                maskTextSelector,\r\n                unmaskTextSelector,\r\n            });\r\n        case n.TEXT_NODE:\r\n            return serializeTextNode(n, {\r\n                maskAllText,\r\n                maskTextClass,\r\n                unmaskTextClass,\r\n                maskTextSelector,\r\n                unmaskTextSelector,\r\n                maskTextFn,\r\n                maskInputOptions,\r\n                maskInputFn,\r\n                rootId,\r\n            });\r\n        case n.CDATA_SECTION_NODE:\r\n            return {\r\n                type: NodeType.CDATA,\r\n                textContent: '',\r\n                rootId,\r\n            };\r\n        case n.COMMENT_NODE:\r\n            return {\r\n                type: NodeType.Comment,\r\n                textContent: n.textContent || '',\r\n                rootId,\r\n            };\r\n        default:\r\n            return false;\r\n    }\r\n}\r\nfunction getRootId(doc, mirror) {\r\n    if (!mirror.hasNode(doc))\r\n        return undefined;\r\n    const docId = mirror.getId(doc);\r\n    return docId === 1 ? undefined : docId;\r\n}\r\nfunction serializeTextNode(n, options) {\r\n    var _a;\r\n    const { maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, maskTextFn, maskInputOptions, maskInputFn, rootId, } = options;\r\n    const parentTagName = n.parentNode && n.parentNode.tagName;\r\n    let textContent = n.textContent;\r\n    const isStyle = parentTagName === 'STYLE' ? true : undefined;\r\n    const isScript = parentTagName === 'SCRIPT' ? true : undefined;\r\n    const isTextarea = parentTagName === 'TEXTAREA' ? true : undefined;\r\n    if (isStyle && textContent) {\r\n        try {\r\n            if (n.nextSibling || n.previousSibling) {\r\n            }\r\n            else if ((_a = n.parentNode.sheet) === null || _a === void 0 ? void 0 : _a.cssRules) {\r\n                textContent = stringifyStylesheet(n.parentNode.sheet);\r\n            }\r\n        }\r\n        catch (err) {\r\n            console.warn(`Cannot get CSS styles from text's parentNode. Error: ${err}`, n);\r\n        }\r\n        textContent = absoluteToStylesheet(textContent, getHref());\r\n    }\r\n    if (isScript) {\r\n        textContent = 'SCRIPT_PLACEHOLDER';\r\n    }\r\n    const forceMask = needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText);\r\n    if (!isStyle && !isScript && !isTextarea && textContent && forceMask) {\r\n        textContent = maskTextFn\r\n            ? maskTextFn(textContent)\r\n            : textContent.replace(/[\\S]/g, '*');\r\n    }\r\n    if (isTextarea && textContent && (maskInputOptions.textarea || forceMask)) {\r\n        textContent = maskInputFn\r\n            ? maskInputFn(textContent, n.parentNode)\r\n            : textContent.replace(/[\\S]/g, '*');\r\n    }\r\n    if (parentTagName === 'OPTION' && textContent) {\r\n        const isInputMasked = shouldMaskInput({\r\n            type: null,\r\n            tagName: parentTagName,\r\n            maskInputOptions,\r\n        });\r\n        textContent = maskInputValue({\r\n            isMasked: needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked),\r\n            element: n,\r\n            value: textContent,\r\n            maskInputFn,\r\n        });\r\n    }\r\n    return {\r\n        type: NodeType.Text,\r\n        textContent: textContent || '',\r\n        isStyle,\r\n        rootId,\r\n    };\r\n}\r\nfunction serializeElementNode(n, options) {\r\n    const { doc, blockClass, blockSelector, unblockSelector, inlineStylesheet, maskInputOptions = {}, maskAttributeFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, rootId, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, } = options;\r\n    const needBlock = _isBlockedElement(n, blockClass, blockSelector, unblockSelector);\r\n    const tagName = getValidTagName(n);\r\n    let attributes = {};\r\n    const len = n.attributes.length;\r\n    for (let i = 0; i < len; i++) {\r\n        const attr = n.attributes[i];\r\n        if (!ignoreAttribute(tagName, attr.name, attr.value)) {\r\n            attributes[attr.name] = transformAttribute(doc, tagName, toLowerCase(attr.name), attr.value, n, maskAttributeFn);\r\n        }\r\n    }\r\n    if (tagName === 'link' && inlineStylesheet) {\r\n        const stylesheet = Array.from(doc.styleSheets).find((s) => {\r\n            return s.href === n.href;\r\n        });\r\n        let cssText = null;\r\n        if (stylesheet) {\r\n            cssText = stringifyStylesheet(stylesheet);\r\n        }\r\n        if (cssText) {\r\n            delete attributes.rel;\r\n            delete attributes.href;\r\n            attributes._cssText = absoluteToStylesheet(cssText, stylesheet.href);\r\n        }\r\n    }\r\n    if (tagName === 'style' &&\r\n        n.sheet &&\r\n        !(n.innerText || n.textContent || '').trim().length) {\r\n        const cssText = stringifyStylesheet(n.sheet);\r\n        if (cssText) {\r\n            attributes._cssText = absoluteToStylesheet(cssText, getHref());\r\n        }\r\n    }\r\n    if (tagName === 'input' ||\r\n        tagName === 'textarea' ||\r\n        tagName === 'select' ||\r\n        tagName === 'option') {\r\n        const el = n;\r\n        const type = getInputType(el);\r\n        const value = getInputValue(el, toUpperCase(tagName), type);\r\n        const checked = el.checked;\r\n        if (type !== 'submit' && type !== 'button' && value) {\r\n            const forceMask = needMaskingText(el, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, shouldMaskInput({\r\n                type,\r\n                tagName: toUpperCase(tagName),\r\n                maskInputOptions,\r\n            }));\r\n            attributes.value = maskInputValue({\r\n                isMasked: forceMask,\r\n                element: el,\r\n                value,\r\n                maskInputFn,\r\n            });\r\n        }\r\n        if (checked) {\r\n            attributes.checked = checked;\r\n        }\r\n    }\r\n    if (tagName === 'option') {\r\n        if (n.selected && !maskInputOptions['select']) {\r\n            attributes.selected = true;\r\n        }\r\n        else {\r\n            delete attributes.selected;\r\n        }\r\n    }\r\n    if (tagName === 'canvas' && recordCanvas) {\r\n        if (n.__context === '2d') {\r\n            if (!is2DCanvasBlank(n)) {\r\n                attributes.rr_dataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            }\r\n        }\r\n        else if (!('__context' in n)) {\r\n            const canvasDataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            const blankCanvas = document.createElement('canvas');\r\n            blankCanvas.width = n.width;\r\n            blankCanvas.height = n.height;\r\n            const blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            if (canvasDataURL !== blankCanvasDataURL) {\r\n                attributes.rr_dataURL = canvasDataURL;\r\n            }\r\n        }\r\n    }\r\n    if (tagName === 'img' && inlineImages) {\r\n        if (!canvasService) {\r\n            canvasService = doc.createElement('canvas');\r\n            canvasCtx = canvasService.getContext('2d');\r\n        }\r\n        const image = n;\r\n        const oldValue = image.crossOrigin;\r\n        image.crossOrigin = 'anonymous';\r\n        const recordInlineImage = () => {\r\n            image.removeEventListener('load', recordInlineImage);\r\n            try {\r\n                canvasService.width = image.naturalWidth;\r\n                canvasService.height = image.naturalHeight;\r\n                canvasCtx.drawImage(image, 0, 0);\r\n                attributes.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            }\r\n            catch (err) {\r\n                console.warn(`Cannot inline img src=${image.currentSrc}! Error: ${err}`);\r\n            }\r\n            oldValue\r\n                ? (attributes.crossOrigin = oldValue)\r\n                : image.removeAttribute('crossorigin');\r\n        };\r\n        if (image.complete && image.naturalWidth !== 0)\r\n            recordInlineImage();\r\n        else\r\n            image.addEventListener('load', recordInlineImage);\r\n    }\r\n    if (tagName === 'audio' || tagName === 'video') {\r\n        attributes.rr_mediaState = n.paused\r\n            ? 'paused'\r\n            : 'played';\r\n        attributes.rr_mediaCurrentTime = n.currentTime;\r\n    }\r\n    if (!newlyAddedElement) {\r\n        if (n.scrollLeft) {\r\n            attributes.rr_scrollLeft = n.scrollLeft;\r\n        }\r\n        if (n.scrollTop) {\r\n            attributes.rr_scrollTop = n.scrollTop;\r\n        }\r\n    }\r\n    if (needBlock) {\r\n        const { width, height } = n.getBoundingClientRect();\r\n        attributes = {\r\n            class: attributes.class,\r\n            rr_width: `${width}px`,\r\n            rr_height: `${height}px`,\r\n        };\r\n    }\r\n    if (tagName === 'iframe' && !keepIframeSrcFn(attributes.src)) {\r\n        if (!n.contentDocument) {\r\n            attributes.rr_src = attributes.src;\r\n        }\r\n        delete attributes.src;\r\n    }\r\n    let isCustomElement;\r\n    try {\r\n        if (customElements.get(tagName))\r\n            isCustomElement = true;\r\n    }\r\n    catch (e) {\r\n    }\r\n    return {\r\n        type: NodeType.Element,\r\n        tagName,\r\n        attributes,\r\n        childNodes: [],\r\n        isSVG: isSVGElement(n) || undefined,\r\n        needBlock,\r\n        rootId,\r\n        isCustom: isCustomElement,\r\n    };\r\n}\r\nfunction lowerIfExists(maybeAttr) {\r\n    if (maybeAttr === undefined || maybeAttr === null) {\r\n        return '';\r\n    }\r\n    else {\r\n        return maybeAttr.toLowerCase();\r\n    }\r\n}\r\nfunction slimDOMExcluded(sn, slimDOMOptions) {\r\n    if (slimDOMOptions.comment && sn.type === NodeType.Comment) {\r\n        return true;\r\n    }\r\n    else if (sn.type === NodeType.Element) {\r\n        if (slimDOMOptions.script &&\r\n            (sn.tagName === 'script' ||\r\n                (sn.tagName === 'link' &&\r\n                    (sn.attributes.rel === 'preload' ||\r\n                        sn.attributes.rel === 'modulepreload') &&\r\n                    sn.attributes.as === 'script') ||\r\n                (sn.tagName === 'link' &&\r\n                    sn.attributes.rel === 'prefetch' &&\r\n                    typeof sn.attributes.href === 'string' &&\r\n                    sn.attributes.href.endsWith('.js')))) {\r\n            return true;\r\n        }\r\n        else if (slimDOMOptions.headFavicon &&\r\n            ((sn.tagName === 'link' && sn.attributes.rel === 'shortcut icon') ||\r\n                (sn.tagName === 'meta' &&\r\n                    (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) ||\r\n                        lowerIfExists(sn.attributes.name) === 'application-name' ||\r\n                        lowerIfExists(sn.attributes.rel) === 'icon' ||\r\n                        lowerIfExists(sn.attributes.rel) === 'apple-touch-icon' ||\r\n                        lowerIfExists(sn.attributes.rel) === 'shortcut icon')))) {\r\n            return true;\r\n        }\r\n        else if (sn.tagName === 'meta') {\r\n            if (slimDOMOptions.headMetaDescKeywords &&\r\n                lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaSocial &&\r\n                (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) ||\r\n                    lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) ||\r\n                    lowerIfExists(sn.attributes.name) === 'pinterest')) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaRobots &&\r\n                (lowerIfExists(sn.attributes.name) === 'robots' ||\r\n                    lowerIfExists(sn.attributes.name) === 'googlebot' ||\r\n                    lowerIfExists(sn.attributes.name) === 'bingbot')) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaHttpEquiv &&\r\n                sn.attributes['http-equiv'] !== undefined) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaAuthorship &&\r\n                (lowerIfExists(sn.attributes.name) === 'author' ||\r\n                    lowerIfExists(sn.attributes.name) === 'generator' ||\r\n                    lowerIfExists(sn.attributes.name) === 'framework' ||\r\n                    lowerIfExists(sn.attributes.name) === 'publisher' ||\r\n                    lowerIfExists(sn.attributes.name) === 'progid' ||\r\n                    lowerIfExists(sn.attributes.property).match(/^article:/) ||\r\n                    lowerIfExists(sn.attributes.property).match(/^product:/))) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaVerification &&\r\n                (lowerIfExists(sn.attributes.name) === 'google-site-verification' ||\r\n                    lowerIfExists(sn.attributes.name) === 'yandex-verification' ||\r\n                    lowerIfExists(sn.attributes.name) === 'csrf-token' ||\r\n                    lowerIfExists(sn.attributes.name) === 'p:domain_verify' ||\r\n                    lowerIfExists(sn.attributes.name) === 'verify-v1' ||\r\n                    lowerIfExists(sn.attributes.name) === 'verification' ||\r\n                    lowerIfExists(sn.attributes.name) === 'shopify-checkout-api-token')) {\r\n                return true;\r\n            }\r\n        }\r\n    }\r\n    return false;\r\n}\r\nfunction serializeNodeWithId(n, options) {\r\n    const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, skipChild = false, inlineStylesheet = true, maskInputOptions = {}, maskAttributeFn, maskTextFn, maskInputFn, slimDOMOptions, dataURLOptions = {}, inlineImages = false, recordCanvas = false, onSerialize, onIframeLoad, iframeLoadTimeout = 5000, onStylesheetLoad, stylesheetLoadTimeout = 5000, keepIframeSrcFn = () => false, newlyAddedElement = false, } = options;\r\n    let { preserveWhiteSpace = true } = options;\r\n    const _serializedNode = serializeNode(n, {\r\n        doc,\r\n        mirror,\r\n        blockClass,\r\n        blockSelector,\r\n        maskAllText,\r\n        unblockSelector,\r\n        maskTextClass,\r\n        unmaskTextClass,\r\n        maskTextSelector,\r\n        unmaskTextSelector,\r\n        inlineStylesheet,\r\n        maskInputOptions,\r\n        maskAttributeFn,\r\n        maskTextFn,\r\n        maskInputFn,\r\n        dataURLOptions,\r\n        inlineImages,\r\n        recordCanvas,\r\n        keepIframeSrcFn,\r\n        newlyAddedElement,\r\n    });\r\n    if (!_serializedNode) {\r\n        console.warn(n, 'not serialized');\r\n        return null;\r\n    }\r\n    let id;\r\n    if (mirror.hasNode(n)) {\r\n        id = mirror.getId(n);\r\n    }\r\n    else if (slimDOMExcluded(_serializedNode, slimDOMOptions) ||\r\n        (!preserveWhiteSpace &&\r\n            _serializedNode.type === NodeType.Text &&\r\n            !_serializedNode.isStyle &&\r\n            !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, '').length)) {\r\n        id = IGNORED_NODE;\r\n    }\r\n    else {\r\n        id = genId();\r\n    }\r\n    const serializedNode = Object.assign(_serializedNode, { id });\r\n    mirror.add(n, serializedNode);\r\n    if (id === IGNORED_NODE) {\r\n        return null;\r\n    }\r\n    if (onSerialize) {\r\n        onSerialize(n);\r\n    }\r\n    let recordChild = !skipChild;\r\n    if (serializedNode.type === NodeType.Element) {\r\n        recordChild = recordChild && !serializedNode.needBlock;\r\n        delete serializedNode.needBlock;\r\n        const shadowRoot = n.shadowRoot;\r\n        if (shadowRoot && isNativeShadowDom(shadowRoot))\r\n            serializedNode.isShadowHost = true;\r\n    }\r\n    if ((serializedNode.type === NodeType.Document ||\r\n        serializedNode.type === NodeType.Element) &&\r\n        recordChild) {\r\n        if (slimDOMOptions.headWhitespace &&\r\n            serializedNode.type === NodeType.Element &&\r\n            serializedNode.tagName === 'head') {\r\n            preserveWhiteSpace = false;\r\n        }\r\n        const bypassOptions = {\r\n            doc,\r\n            mirror,\r\n            blockClass,\r\n            blockSelector,\r\n            maskAllText,\r\n            unblockSelector,\r\n            maskTextClass,\r\n            unmaskTextClass,\r\n            maskTextSelector,\r\n            unmaskTextSelector,\r\n            skipChild,\r\n            inlineStylesheet,\r\n            maskInputOptions,\r\n            maskAttributeFn,\r\n            maskTextFn,\r\n            maskInputFn,\r\n            slimDOMOptions,\r\n            dataURLOptions,\r\n            inlineImages,\r\n            recordCanvas,\r\n            preserveWhiteSpace,\r\n            onSerialize,\r\n            onIframeLoad,\r\n            iframeLoadTimeout,\r\n            onStylesheetLoad,\r\n            stylesheetLoadTimeout,\r\n            keepIframeSrcFn,\r\n        };\r\n        for (const childN of Array.from(n.childNodes)) {\r\n            const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n            if (serializedChildNode) {\r\n                serializedNode.childNodes.push(serializedChildNode);\r\n            }\r\n        }\r\n        if (isElement(n) && n.shadowRoot) {\r\n            for (const childN of Array.from(n.shadowRoot.childNodes)) {\r\n                const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n                if (serializedChildNode) {\r\n                    isNativeShadowDom(n.shadowRoot) &&\r\n                        (serializedChildNode.isShadow = true);\r\n                    serializedNode.childNodes.push(serializedChildNode);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    if (n.parentNode &&\r\n        isShadowRoot(n.parentNode) &&\r\n        isNativeShadowDom(n.parentNode)) {\r\n        serializedNode.isShadow = true;\r\n    }\r\n    if (serializedNode.type === NodeType.Element &&\r\n        serializedNode.tagName === 'iframe') {\r\n        onceIframeLoaded(n, () => {\r\n            const iframeDoc = n.contentDocument;\r\n            if (iframeDoc && onIframeLoad) {\r\n                const serializedIframeNode = serializeNodeWithId(iframeDoc, {\r\n                    doc: iframeDoc,\r\n                    mirror,\r\n                    blockClass,\r\n                    blockSelector,\r\n                    unblockSelector,\r\n                    maskAllText,\r\n                    maskTextClass,\r\n                    unmaskTextClass,\r\n                    maskTextSelector,\r\n                    unmaskTextSelector,\r\n                    skipChild: false,\r\n                    inlineStylesheet,\r\n                    maskInputOptions,\r\n                    maskAttributeFn,\r\n                    maskTextFn,\r\n                    maskInputFn,\r\n                    slimDOMOptions,\r\n                    dataURLOptions,\r\n                    inlineImages,\r\n                    recordCanvas,\r\n                    preserveWhiteSpace,\r\n                    onSerialize,\r\n                    onIframeLoad,\r\n                    iframeLoadTimeout,\r\n                    onStylesheetLoad,\r\n                    stylesheetLoadTimeout,\r\n                    keepIframeSrcFn,\r\n                });\r\n                if (serializedIframeNode) {\r\n                    onIframeLoad(n, serializedIframeNode);\r\n                }\r\n            }\r\n        }, iframeLoadTimeout);\r\n    }\r\n    if (serializedNode.type === NodeType.Element &&\r\n        serializedNode.tagName === 'link' &&\r\n        serializedNode.attributes.rel === 'stylesheet') {\r\n        onceStylesheetLoaded(n, () => {\r\n            if (onStylesheetLoad) {\r\n                const serializedLinkNode = serializeNodeWithId(n, {\r\n                    doc,\r\n                    mirror,\r\n                    blockClass,\r\n                    blockSelector,\r\n                    unblockSelector,\r\n                    maskAllText,\r\n                    maskTextClass,\r\n                    unmaskTextClass,\r\n                    maskTextSelector,\r\n                    unmaskTextSelector,\r\n                    skipChild: false,\r\n                    inlineStylesheet,\r\n                    maskInputOptions,\r\n                    maskAttributeFn,\r\n                    maskTextFn,\r\n                    maskInputFn,\r\n                    slimDOMOptions,\r\n                    dataURLOptions,\r\n                    inlineImages,\r\n                    recordCanvas,\r\n                    preserveWhiteSpace,\r\n                    onSerialize,\r\n                    onIframeLoad,\r\n                    iframeLoadTimeout,\r\n                    onStylesheetLoad,\r\n                    stylesheetLoadTimeout,\r\n                    keepIframeSrcFn,\r\n                });\r\n                if (serializedLinkNode) {\r\n                    onStylesheetLoad(n, serializedLinkNode);\r\n                }\r\n            }\r\n        }, stylesheetLoadTimeout);\r\n    }\r\n    return serializedNode;\r\n}\r\nfunction snapshot(n, options) {\r\n    const { mirror = new Mirror(), blockClass = 'rr-block', blockSelector = null, unblockSelector = null, maskAllText = false, maskTextClass = 'rr-mask', unmaskTextClass = null, maskTextSelector = null, unmaskTextSelector = null, inlineStylesheet = true, inlineImages = false, recordCanvas = false, maskAllInputs = false, maskAttributeFn, maskTextFn, maskInputFn, slimDOM = false, dataURLOptions, preserveWhiteSpace, onSerialize, onIframeLoad, iframeLoadTimeout, onStylesheetLoad, stylesheetLoadTimeout, keepIframeSrcFn = () => false, } = options || {};\r\n    const maskInputOptions = maskAllInputs === true\r\n        ? {\r\n            color: true,\r\n            date: true,\r\n            'datetime-local': true,\r\n            email: true,\r\n            month: true,\r\n            number: true,\r\n            range: true,\r\n            search: true,\r\n            tel: true,\r\n            text: true,\r\n            time: true,\r\n            url: true,\r\n            week: true,\r\n            textarea: true,\r\n            select: true,\r\n        }\r\n        : maskAllInputs === false\r\n            ? {}\r\n            : maskAllInputs;\r\n    const slimDOMOptions = slimDOM === true || slimDOM === 'all'\r\n        ?\r\n            {\r\n                script: true,\r\n                comment: true,\r\n                headFavicon: true,\r\n                headWhitespace: true,\r\n                headMetaDescKeywords: slimDOM === 'all',\r\n                headMetaSocial: true,\r\n                headMetaRobots: true,\r\n                headMetaHttpEquiv: true,\r\n                headMetaAuthorship: true,\r\n                headMetaVerification: true,\r\n            }\r\n        : slimDOM === false\r\n            ? {}\r\n            : slimDOM;\r\n    return serializeNodeWithId(n, {\r\n        doc: n,\r\n        mirror,\r\n        blockClass,\r\n        blockSelector,\r\n        unblockSelector,\r\n        maskAllText,\r\n        maskTextClass,\r\n        unmaskTextClass,\r\n        maskTextSelector,\r\n        unmaskTextSelector,\r\n        skipChild: false,\r\n        inlineStylesheet,\r\n        maskInputOptions,\r\n        maskAttributeFn,\r\n        maskTextFn,\r\n        maskInputFn,\r\n        slimDOMOptions,\r\n        dataURLOptions,\r\n        inlineImages,\r\n        recordCanvas,\r\n        preserveWhiteSpace,\r\n        onSerialize,\r\n        onIframeLoad,\r\n        iframeLoadTimeout,\r\n        onStylesheetLoad,\r\n        stylesheetLoadTimeout,\r\n        keepIframeSrcFn,\r\n        newlyAddedElement: false,\r\n    });\r\n}\r\nfunction visitSnapshot(node, onVisit) {\r\n    function walk(current) {\r\n        onVisit(current);\r\n        if (current.type === NodeType.Document ||\r\n            current.type === NodeType.Element) {\r\n            current.childNodes.forEach(walk);\r\n        }\r\n    }\r\n    walk(node);\r\n}\r\nfunction cleanupSnapshot() {\r\n    _id = 1;\r\n}\n\nconst commentre = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\r\nfunction parse(css, options = {}) {\r\n    let lineno = 1;\r\n    let column = 1;\r\n    function updatePosition(str) {\r\n        const lines = str.match(/\\n/g);\r\n        if (lines) {\r\n            lineno += lines.length;\r\n        }\r\n        const i = str.lastIndexOf('\\n');\r\n        column = i === -1 ? column + str.length : str.length - i;\r\n    }\r\n    function position() {\r\n        const start = { line: lineno, column };\r\n        return (node) => {\r\n            node.position = new Position(start);\r\n            whitespace();\r\n            return node;\r\n        };\r\n    }\r\n    class Position {\r\n        constructor(start) {\r\n            this.start = start;\r\n            this.end = { line: lineno, column };\r\n            this.source = options.source;\r\n        }\r\n    }\r\n    Position.prototype.content = css;\r\n    const errorsList = [];\r\n    function error(msg) {\r\n        const err = new Error(`${options.source || ''}:${lineno}:${column}: ${msg}`);\r\n        err.reason = msg;\r\n        err.filename = options.source;\r\n        err.line = lineno;\r\n        err.column = column;\r\n        err.source = css;\r\n        if (options.silent) {\r\n            errorsList.push(err);\r\n        }\r\n        else {\r\n            throw err;\r\n        }\r\n    }\r\n    function stylesheet() {\r\n        const rulesList = rules();\r\n        return {\r\n            type: 'stylesheet',\r\n            stylesheet: {\r\n                source: options.source,\r\n                rules: rulesList,\r\n                parsingErrors: errorsList,\r\n            },\r\n        };\r\n    }\r\n    function open() {\r\n        return match(/^{\\s*/);\r\n    }\r\n    function close() {\r\n        return match(/^}/);\r\n    }\r\n    function rules() {\r\n        let node;\r\n        const rules = [];\r\n        whitespace();\r\n        comments(rules);\r\n        while (css.length && css.charAt(0) !== '}' && (node = atrule() || rule())) {\r\n            if (node) {\r\n                rules.push(node);\r\n                comments(rules);\r\n            }\r\n        }\r\n        return rules;\r\n    }\r\n    function match(re) {\r\n        const m = re.exec(css);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const str = m[0];\r\n        updatePosition(str);\r\n        css = css.slice(str.length);\r\n        return m;\r\n    }\r\n    function whitespace() {\r\n        match(/^\\s*/);\r\n    }\r\n    function comments(rules = []) {\r\n        let c;\r\n        while ((c = comment())) {\r\n            if (c) {\r\n                rules.push(c);\r\n            }\r\n            c = comment();\r\n        }\r\n        return rules;\r\n    }\r\n    function comment() {\r\n        const pos = position();\r\n        if ('/' !== css.charAt(0) || '*' !== css.charAt(1)) {\r\n            return;\r\n        }\r\n        let i = 2;\r\n        while ('' !== css.charAt(i) &&\r\n            ('*' !== css.charAt(i) || '/' !== css.charAt(i + 1))) {\r\n            ++i;\r\n        }\r\n        i += 2;\r\n        if ('' === css.charAt(i - 1)) {\r\n            return error('End of comment missing');\r\n        }\r\n        const str = css.slice(2, i - 2);\r\n        column += 2;\r\n        updatePosition(str);\r\n        css = css.slice(i);\r\n        column += 2;\r\n        return pos({\r\n            type: 'comment',\r\n            comment: str,\r\n        });\r\n    }\r\n    function selector() {\r\n        const m = match(/^([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        return trim(m[0])\r\n            .replace(/\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*\\/+/g, '')\r\n            .replace(/\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'/g, (m) => {\r\n            return m.replace(/,/g, '\\u200C');\r\n        })\r\n            .split(/\\s*(?![^(]*\\)),\\s*/)\r\n            .map((s) => {\r\n            return s.replace(/\\u200C/g, ',');\r\n        });\r\n    }\r\n    function declaration() {\r\n        const pos = position();\r\n        const propMatch = match(/^(\\*?[-#\\/\\*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/);\r\n        if (!propMatch) {\r\n            return;\r\n        }\r\n        const prop = trim(propMatch[0]);\r\n        if (!match(/^:\\s*/)) {\r\n            return error(`property missing ':'`);\r\n        }\r\n        const val = match(/^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^\\)]*?\\)|[^};])+)/);\r\n        const ret = pos({\r\n            type: 'declaration',\r\n            property: prop.replace(commentre, ''),\r\n            value: val ? trim(val[0]).replace(commentre, '') : '',\r\n        });\r\n        match(/^[;\\s]*/);\r\n        return ret;\r\n    }\r\n    function declarations() {\r\n        const decls = [];\r\n        if (!open()) {\r\n            return error(`missing '{'`);\r\n        }\r\n        comments(decls);\r\n        let decl;\r\n        while ((decl = declaration())) {\r\n            if (decl !== false) {\r\n                decls.push(decl);\r\n                comments(decls);\r\n            }\r\n            decl = declaration();\r\n        }\r\n        if (!close()) {\r\n            return error(`missing '}'`);\r\n        }\r\n        return decls;\r\n    }\r\n    function keyframe() {\r\n        let m;\r\n        const vals = [];\r\n        const pos = position();\r\n        while ((m = match(/^((\\d+\\.\\d+|\\.\\d+|\\d+)%?|[a-z]+)\\s*/))) {\r\n            vals.push(m[1]);\r\n            match(/^,\\s*/);\r\n        }\r\n        if (!vals.length) {\r\n            return;\r\n        }\r\n        return pos({\r\n            type: 'keyframe',\r\n            values: vals,\r\n            declarations: declarations(),\r\n        });\r\n    }\r\n    function atkeyframes() {\r\n        const pos = position();\r\n        let m = match(/^@([-\\w]+)?keyframes\\s*/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const vendor = m[1];\r\n        m = match(/^([-\\w]+)\\s*/);\r\n        if (!m) {\r\n            return error('@keyframes missing name');\r\n        }\r\n        const name = m[1];\r\n        if (!open()) {\r\n            return error(`@keyframes missing '{'`);\r\n        }\r\n        let frame;\r\n        let frames = comments();\r\n        while ((frame = keyframe())) {\r\n            frames.push(frame);\r\n            frames = frames.concat(comments());\r\n        }\r\n        if (!close()) {\r\n            return error(`@keyframes missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'keyframes',\r\n            name,\r\n            vendor,\r\n            keyframes: frames,\r\n        });\r\n    }\r\n    function atsupports() {\r\n        const pos = position();\r\n        const m = match(/^@supports *([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const supports = trim(m[1]);\r\n        if (!open()) {\r\n            return error(`@supports missing '{'`);\r\n        }\r\n        const style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(`@supports missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'supports',\r\n            supports,\r\n            rules: style,\r\n        });\r\n    }\r\n    function athost() {\r\n        const pos = position();\r\n        const m = match(/^@host\\s*/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        if (!open()) {\r\n            return error(`@host missing '{'`);\r\n        }\r\n        const style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(`@host missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'host',\r\n            rules: style,\r\n        });\r\n    }\r\n    function atmedia() {\r\n        const pos = position();\r\n        const m = match(/^@media *([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const media = trim(m[1]);\r\n        if (!open()) {\r\n            return error(`@media missing '{'`);\r\n        }\r\n        const style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(`@media missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'media',\r\n            media,\r\n            rules: style,\r\n        });\r\n    }\r\n    function atcustommedia() {\r\n        const pos = position();\r\n        const m = match(/^@custom-media\\s+(--[^\\s]+)\\s*([^{;]+);/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        return pos({\r\n            type: 'custom-media',\r\n            name: trim(m[1]),\r\n            media: trim(m[2]),\r\n        });\r\n    }\r\n    function atpage() {\r\n        const pos = position();\r\n        const m = match(/^@page */);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const sel = selector() || [];\r\n        if (!open()) {\r\n            return error(`@page missing '{'`);\r\n        }\r\n        let decls = comments();\r\n        let decl;\r\n        while ((decl = declaration())) {\r\n            decls.push(decl);\r\n            decls = decls.concat(comments());\r\n        }\r\n        if (!close()) {\r\n            return error(`@page missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'page',\r\n            selectors: sel,\r\n            declarations: decls,\r\n        });\r\n    }\r\n    function atdocument() {\r\n        const pos = position();\r\n        const m = match(/^@([-\\w]+)?document *([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const vendor = trim(m[1]);\r\n        const doc = trim(m[2]);\r\n        if (!open()) {\r\n            return error(`@document missing '{'`);\r\n        }\r\n        const style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(`@document missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'document',\r\n            document: doc,\r\n            vendor,\r\n            rules: style,\r\n        });\r\n    }\r\n    function atfontface() {\r\n        const pos = position();\r\n        const m = match(/^@font-face\\s*/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        if (!open()) {\r\n            return error(`@font-face missing '{'`);\r\n        }\r\n        let decls = comments();\r\n        let decl;\r\n        while ((decl = declaration())) {\r\n            decls.push(decl);\r\n            decls = decls.concat(comments());\r\n        }\r\n        if (!close()) {\r\n            return error(`@font-face missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'font-face',\r\n            declarations: decls,\r\n        });\r\n    }\r\n    const atimport = _compileAtrule('import');\r\n    const atcharset = _compileAtrule('charset');\r\n    const atnamespace = _compileAtrule('namespace');\r\n    function _compileAtrule(name) {\r\n        const re = new RegExp('^@' + name + '\\\\s*([^;]+);');\r\n        return () => {\r\n            const pos = position();\r\n            const m = match(re);\r\n            if (!m) {\r\n                return;\r\n            }\r\n            const ret = { type: name };\r\n            ret[name] = m[1].trim();\r\n            return pos(ret);\r\n        };\r\n    }\r\n    function atrule() {\r\n        if (css[0] !== '@') {\r\n            return;\r\n        }\r\n        return (atkeyframes() ||\r\n            atmedia() ||\r\n            atcustommedia() ||\r\n            atsupports() ||\r\n            atimport() ||\r\n            atcharset() ||\r\n            atnamespace() ||\r\n            atdocument() ||\r\n            atpage() ||\r\n            athost() ||\r\n            atfontface());\r\n    }\r\n    function rule() {\r\n        const pos = position();\r\n        const sel = selector();\r\n        if (!sel) {\r\n            return error('selector missing');\r\n        }\r\n        comments();\r\n        return pos({\r\n            type: 'rule',\r\n            selectors: sel,\r\n            declarations: declarations(),\r\n        });\r\n    }\r\n    return addParent(stylesheet());\r\n}\r\nfunction trim(str) {\r\n    return str ? str.replace(/^\\s+|\\s+$/g, '') : '';\r\n}\r\nfunction addParent(obj, parent) {\r\n    const isNode = obj && typeof obj.type === 'string';\r\n    const childParent = isNode ? obj : parent;\r\n    for (const k of Object.keys(obj)) {\r\n        const value = obj[k];\r\n        if (Array.isArray(value)) {\r\n            value.forEach((v) => {\r\n                addParent(v, childParent);\r\n            });\r\n        }\r\n        else if (value && typeof value === 'object') {\r\n            addParent(value, childParent);\r\n        }\r\n    }\r\n    if (isNode) {\r\n        Object.defineProperty(obj, 'parent', {\r\n            configurable: true,\r\n            writable: true,\r\n            enumerable: false,\r\n            value: parent || null,\r\n        });\r\n    }\r\n    return obj;\r\n}\n\nconst tagMap = {\r\n    script: 'noscript',\r\n    altglyph: 'altGlyph',\r\n    altglyphdef: 'altGlyphDef',\r\n    altglyphitem: 'altGlyphItem',\r\n    animatecolor: 'animateColor',\r\n    animatemotion: 'animateMotion',\r\n    animatetransform: 'animateTransform',\r\n    clippath: 'clipPath',\r\n    feblend: 'feBlend',\r\n    fecolormatrix: 'feColorMatrix',\r\n    fecomponenttransfer: 'feComponentTransfer',\r\n    fecomposite: 'feComposite',\r\n    feconvolvematrix: 'feConvolveMatrix',\r\n    fediffuselighting: 'feDiffuseLighting',\r\n    fedisplacementmap: 'feDisplacementMap',\r\n    fedistantlight: 'feDistantLight',\r\n    fedropshadow: 'feDropShadow',\r\n    feflood: 'feFlood',\r\n    fefunca: 'feFuncA',\r\n    fefuncb: 'feFuncB',\r\n    fefuncg: 'feFuncG',\r\n    fefuncr: 'feFuncR',\r\n    fegaussianblur: 'feGaussianBlur',\r\n    feimage: 'feImage',\r\n    femerge: 'feMerge',\r\n    femergenode: 'feMergeNode',\r\n    femorphology: 'feMorphology',\r\n    feoffset: 'feOffset',\r\n    fepointlight: 'fePointLight',\r\n    fespecularlighting: 'feSpecularLighting',\r\n    fespotlight: 'feSpotLight',\r\n    fetile: 'feTile',\r\n    feturbulence: 'feTurbulence',\r\n    foreignobject: 'foreignObject',\r\n    glyphref: 'glyphRef',\r\n    lineargradient: 'linearGradient',\r\n    radialgradient: 'radialGradient',\r\n};\r\nfunction getTagName(n) {\r\n    let tagName = tagMap[n.tagName] ? tagMap[n.tagName] : n.tagName;\r\n    if (tagName === 'link' && n.attributes._cssText) {\r\n        tagName = 'style';\r\n    }\r\n    return tagName;\r\n}\r\nfunction escapeRegExp(str) {\r\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n}\r\nconst HOVER_SELECTOR = /([^\\\\]):hover/;\r\nconst HOVER_SELECTOR_GLOBAL = new RegExp(HOVER_SELECTOR.source, 'g');\r\nfunction addHoverClass(cssText, cache) {\r\n    const cachedStyle = cache === null || cache === void 0 ? void 0 : cache.stylesWithHoverClass.get(cssText);\r\n    if (cachedStyle)\r\n        return cachedStyle;\r\n    const ast = parse(cssText, {\r\n        silent: true,\r\n    });\r\n    if (!ast.stylesheet) {\r\n        return cssText;\r\n    }\r\n    const selectors = [];\r\n    ast.stylesheet.rules.forEach((rule) => {\r\n        if ('selectors' in rule) {\r\n            (rule.selectors || []).forEach((selector) => {\r\n                if (HOVER_SELECTOR.test(selector)) {\r\n                    selectors.push(selector);\r\n                }\r\n            });\r\n        }\r\n    });\r\n    if (selectors.length === 0) {\r\n        return cssText;\r\n    }\r\n    const selectorMatcher = new RegExp(selectors\r\n        .filter((selector, index) => selectors.indexOf(selector) === index)\r\n        .sort((a, b) => b.length - a.length)\r\n        .map((selector) => {\r\n        return escapeRegExp(selector);\r\n    })\r\n        .join('|'), 'g');\r\n    const result = cssText.replace(selectorMatcher, (selector) => {\r\n        const newSelector = selector.replace(HOVER_SELECTOR_GLOBAL, '$1.\\\\:hover');\r\n        return `${selector}, ${newSelector}`;\r\n    });\r\n    cache === null || cache === void 0 ? void 0 : cache.stylesWithHoverClass.set(cssText, result);\r\n    return result;\r\n}\r\nfunction createCache() {\r\n    const stylesWithHoverClass = new Map();\r\n    return {\r\n        stylesWithHoverClass,\r\n    };\r\n}\r\nfunction buildNode(n, options) {\r\n    var _a;\r\n    const { doc, hackCss, cache } = options;\r\n    switch (n.type) {\r\n        case NodeType.Document:\r\n            return doc.implementation.createDocument(null, '', null);\r\n        case NodeType.DocumentType:\r\n            return doc.implementation.createDocumentType(n.name || 'html', n.publicId, n.systemId);\r\n        case NodeType.Element: {\r\n            const tagName = getTagName(n);\r\n            let node;\r\n            if (n.isSVG) {\r\n                node = doc.createElementNS('http://www.w3.org/2000/svg', tagName);\r\n            }\r\n            else {\r\n                if (n.isCustom &&\r\n                    ((_a = doc.defaultView) === null || _a === void 0 ? void 0 : _a.customElements) &&\r\n                    !doc.defaultView.customElements.get(n.tagName))\r\n                    doc.defaultView.customElements.define(n.tagName, class extends doc.defaultView.HTMLElement {\r\n                    });\r\n                node = doc.createElement(tagName);\r\n            }\r\n            const specialAttributes = {};\r\n            for (const name in n.attributes) {\r\n                if (!Object.prototype.hasOwnProperty.call(n.attributes, name)) {\r\n                    continue;\r\n                }\r\n                let value = n.attributes[name];\r\n                if (tagName === 'option' &&\r\n                    name === 'selected' &&\r\n                    value === false) {\r\n                    continue;\r\n                }\r\n                if (value === null) {\r\n                    continue;\r\n                }\r\n                if (value === true)\r\n                    value = '';\r\n                if (name.startsWith('rr_')) {\r\n                    specialAttributes[name] = value;\r\n                    continue;\r\n                }\r\n                const isTextarea = tagName === 'textarea' && name === 'value';\r\n                const isRemoteOrDynamicCss = tagName === 'style' && name === '_cssText';\r\n                if (isRemoteOrDynamicCss && hackCss && typeof value === 'string') {\r\n                    value = addHoverClass(value, cache);\r\n                }\r\n                if ((isTextarea || isRemoteOrDynamicCss) && typeof value === 'string') {\r\n                    const child = doc.createTextNode(value);\r\n                    for (const c of Array.from(node.childNodes)) {\r\n                        if (c.nodeType === node.TEXT_NODE) {\r\n                            node.removeChild(c);\r\n                        }\r\n                    }\r\n                    node.appendChild(child);\r\n                    continue;\r\n                }\r\n                try {\r\n                    if (n.isSVG && name === 'xlink:href') {\r\n                        node.setAttributeNS('http://www.w3.org/1999/xlink', name, value.toString());\r\n                    }\r\n                    else if (name === 'onload' ||\r\n                        name === 'onclick' ||\r\n                        name.substring(0, 7) === 'onmouse') {\r\n                        node.setAttribute('_' + name, value.toString());\r\n                    }\r\n                    else if (tagName === 'meta' &&\r\n                        n.attributes['http-equiv'] === 'Content-Security-Policy' &&\r\n                        name === 'content') {\r\n                        node.setAttribute('csp-content', value.toString());\r\n                        continue;\r\n                    }\r\n                    else if (tagName === 'link' &&\r\n                        (n.attributes.rel === 'preload' ||\r\n                            n.attributes.rel === 'modulepreload') &&\r\n                        n.attributes.as === 'script') {\r\n                    }\r\n                    else if (tagName === 'link' &&\r\n                        n.attributes.rel === 'prefetch' &&\r\n                        typeof n.attributes.href === 'string' &&\r\n                        n.attributes.href.endsWith('.js')) {\r\n                    }\r\n                    else if (tagName === 'img' &&\r\n                        n.attributes.srcset &&\r\n                        n.attributes.rr_dataURL) {\r\n                        node.setAttribute('rrweb-original-srcset', n.attributes.srcset);\r\n                    }\r\n                    else {\r\n                        node.setAttribute(name, value.toString());\r\n                    }\r\n                }\r\n                catch (error) {\r\n                }\r\n            }\r\n            for (const name in specialAttributes) {\r\n                const value = specialAttributes[name];\r\n                if (tagName === 'canvas' && name === 'rr_dataURL') {\r\n                    const image = document.createElement('img');\r\n                    image.onload = () => {\r\n                        const ctx = node.getContext('2d');\r\n                        if (ctx) {\r\n                            ctx.drawImage(image, 0, 0, image.width, image.height);\r\n                        }\r\n                    };\r\n                    image.src = value.toString();\r\n                    if (node.RRNodeType)\r\n                        node.rr_dataURL = value.toString();\r\n                }\r\n                else if (tagName === 'img' && name === 'rr_dataURL') {\r\n                    const image = node;\r\n                    if (!image.currentSrc.startsWith('data:')) {\r\n                        image.setAttribute('rrweb-original-src', n.attributes.src);\r\n                        image.src = value.toString();\r\n                    }\r\n                }\r\n                if (name === 'rr_width') {\r\n                    node.style.width = value.toString();\r\n                }\r\n                else if (name === 'rr_height') {\r\n                    node.style.height = value.toString();\r\n                }\r\n                else if (name === 'rr_mediaCurrentTime' &&\r\n                    typeof value === 'number') {\r\n                    node.currentTime = value;\r\n                }\r\n                else if (name === 'rr_mediaState') {\r\n                    switch (value) {\r\n                        case 'played':\r\n                            node\r\n                                .play()\r\n                                .catch((e) => console.warn('media playback error', e));\r\n                            break;\r\n                        case 'paused':\r\n                            node.pause();\r\n                            break;\r\n                    }\r\n                }\r\n            }\r\n            if (n.isShadowHost) {\r\n                if (!node.shadowRoot) {\r\n                    node.attachShadow({ mode: 'open' });\r\n                }\r\n                else {\r\n                    while (node.shadowRoot.firstChild) {\r\n                        node.shadowRoot.removeChild(node.shadowRoot.firstChild);\r\n                    }\r\n                }\r\n            }\r\n            return node;\r\n        }\r\n        case NodeType.Text:\r\n            return doc.createTextNode(n.isStyle && hackCss\r\n                ? addHoverClass(n.textContent, cache)\r\n                : n.textContent);\r\n        case NodeType.CDATA:\r\n            return doc.createCDATASection(n.textContent);\r\n        case NodeType.Comment:\r\n            return doc.createComment(n.textContent);\r\n        default:\r\n            return null;\r\n    }\r\n}\r\nfunction buildNodeWithSN(n, options) {\r\n    const { doc, mirror, skipChild = false, hackCss = true, afterAppend, cache, } = options;\r\n    if (mirror.has(n.id)) {\r\n        const nodeInMirror = mirror.getNode(n.id);\r\n        const meta = mirror.getMeta(nodeInMirror);\r\n        if (isNodeMetaEqual(meta, n))\r\n            return mirror.getNode(n.id);\r\n    }\r\n    let node = buildNode(n, { doc, hackCss, cache });\r\n    if (!node) {\r\n        return null;\r\n    }\r\n    if (n.rootId && mirror.getNode(n.rootId) !== doc) {\r\n        mirror.replace(n.rootId, doc);\r\n    }\r\n    if (n.type === NodeType.Document) {\r\n        doc.close();\r\n        doc.open();\r\n        if (n.compatMode === 'BackCompat' &&\r\n            n.childNodes &&\r\n            n.childNodes[0].type !== NodeType.DocumentType) {\r\n            if (n.childNodes[0].type === NodeType.Element &&\r\n                'xmlns' in n.childNodes[0].attributes &&\r\n                n.childNodes[0].attributes.xmlns === 'http://www.w3.org/1999/xhtml') {\r\n                doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"\">');\r\n            }\r\n            else {\r\n                doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"\">');\r\n            }\r\n        }\r\n        node = doc;\r\n    }\r\n    mirror.add(node, n);\r\n    if ((n.type === NodeType.Document || n.type === NodeType.Element) &&\r\n        !skipChild) {\r\n        for (const childN of n.childNodes) {\r\n            const childNode = buildNodeWithSN(childN, {\r\n                doc,\r\n                mirror,\r\n                skipChild: false,\r\n                hackCss,\r\n                afterAppend,\r\n                cache,\r\n            });\r\n            if (!childNode) {\r\n                console.warn('Failed to rebuild', childN);\r\n                continue;\r\n            }\r\n            if (childN.isShadow && isElement(node) && node.shadowRoot) {\r\n                node.shadowRoot.appendChild(childNode);\r\n            }\r\n            else if (n.type === NodeType.Document &&\r\n                childN.type == NodeType.Element) {\r\n                const htmlElement = childNode;\r\n                let body = null;\r\n                htmlElement.childNodes.forEach((child) => {\r\n                    if (child.nodeName === 'BODY')\r\n                        body = child;\r\n                });\r\n                if (body) {\r\n                    htmlElement.removeChild(body);\r\n                    node.appendChild(childNode);\r\n                    htmlElement.appendChild(body);\r\n                }\r\n                else {\r\n                    node.appendChild(childNode);\r\n                }\r\n            }\r\n            else {\r\n                node.appendChild(childNode);\r\n            }\r\n            if (afterAppend) {\r\n                afterAppend(childNode, childN.id);\r\n            }\r\n        }\r\n    }\r\n    return node;\r\n}\r\nfunction visit(mirror, onVisit) {\r\n    function walk(node) {\r\n        onVisit(node);\r\n    }\r\n    for (const id of mirror.getIds()) {\r\n        if (mirror.has(id)) {\r\n            walk(mirror.getNode(id));\r\n        }\r\n    }\r\n}\r\nfunction handleScroll(node, mirror) {\r\n    const n = mirror.getMeta(node);\r\n    if ((n === null || n === void 0 ? void 0 : n.type) !== NodeType.Element) {\r\n        return;\r\n    }\r\n    const el = node;\r\n    for (const name in n.attributes) {\r\n        if (!(Object.prototype.hasOwnProperty.call(n.attributes, name) &&\r\n            name.startsWith('rr_'))) {\r\n            continue;\r\n        }\r\n        const value = n.attributes[name];\r\n        if (name === 'rr_scrollLeft') {\r\n            el.scrollLeft = value;\r\n        }\r\n        if (name === 'rr_scrollTop') {\r\n            el.scrollTop = value;\r\n        }\r\n    }\r\n}\r\nfunction rebuild(n, options) {\r\n    const { doc, onVisit, hackCss = true, afterAppend, cache, mirror = new Mirror(), } = options;\r\n    const node = buildNodeWithSN(n, {\r\n        doc,\r\n        mirror,\r\n        skipChild: false,\r\n        hackCss,\r\n        afterAppend,\r\n        cache,\r\n    });\r\n    visit(mirror, (visitedNode) => {\r\n        if (onVisit) {\r\n            onVisit(visitedNode);\r\n        }\r\n        handleScroll(visitedNode, mirror);\r\n    });\r\n    return node;\r\n}\n\nexport { IGNORED_NODE, Mirror, NodeType, addHoverClass, buildNodeWithSN, classMatchesRegex, cleanupSnapshot, createCache, createMatchPredicate, createMirror, distanceToMatch, escapeImportStatement, fixSafariColons, genId, getInputType, getInputValue, ignoreAttribute, is2DCanvasBlank, isCSSImportRule, isCSSStyleRule, isElement, isNativeShadowDom, isNodeMetaEqual, isShadowRoot, maskInputValue, needMaskingText, rebuild, serializeNodeWithId, shouldMaskInput, snapshot, stringifyRule, stringifyStylesheet, toLowerCase, toUpperCase, transformAttribute, visitSnapshot };\n","// Note that these are the serialized attributes and not attributes directly on\n// the DOM Node. Attributes we are interested in:\nconst ATTRIBUTES_TO_RECORD = new Set([\n  'id',\n  'class',\n  'aria-label',\n  'role',\n  'name',\n  'alt',\n  'title',\n  'data-test-id',\n  'data-testid',\n  'disabled',\n  'aria-disabled',\n]);\n\n/**\n * Inclusion list of attributes that we want to record from the DOM element\n */\nexport function getAttributesToRecord(attributes: Record<string, unknown>): Record<string, unknown> {\n  const obj: Record<string, unknown> = {};\n  for (const key in attributes) {\n    if (ATTRIBUTES_TO_RECORD.has(key)) {\n      let normalizedKey = key;\n\n      if (key === 'data-testid' || key === 'data-test-id') {\n        normalizedKey = 'testId';\n      }\n\n      obj[normalizedKey] = attributes[key];\n    }\n  }\n\n  return obj;\n}\n","import { record } from '@sentry-internal/rrweb';\nimport type { serializedElementNodeWithId, serializedNodeWithId } from '@sentry-internal/rrweb-snapshot';\nimport { NodeType } from '@sentry-internal/rrweb-snapshot';\nimport type { Breadcrumb } from '@sentry/types';\nimport { htmlTreeAsString } from '@sentry/utils';\n\nimport type { ReplayContainer } from '../types';\nimport { createBreadcrumb } from '../util/createBreadcrumb';\nimport { handleClick } from './handleClick';\nimport { addBreadcrumbEvent } from './util/addBreadcrumbEvent';\nimport type { DomHandlerData } from './util/domUtils';\nimport { getClickTargetNode, getTargetNode } from './util/domUtils';\nimport { getAttributesToRecord } from './util/getAttributesToRecord';\n\nexport const handleDomListener: (replay: ReplayContainer) => (handlerData: DomHandlerData) => void = (\n  replay: ReplayContainer,\n) => {\n  return (handlerData: DomHandlerData): void => {\n    if (!replay.isEnabled()) {\n      return;\n    }\n\n    const result = handleDom(handlerData);\n\n    if (!result) {\n      return;\n    }\n\n    const isClick = handlerData.name === 'click';\n    const event = isClick && (handlerData.event as PointerEvent);\n    // Ignore clicks if ctrl/alt/meta/shift keys are held down as they alter behavior of clicks (e.g. open in new tab)\n    if (\n      isClick &&\n      replay.clickDetector &&\n      event &&\n      !event.altKey &&\n      !event.metaKey &&\n      !event.ctrlKey &&\n      !event.shiftKey\n    ) {\n      handleClick(\n        replay.clickDetector,\n        result as Breadcrumb & { timestamp: number; data: { nodeId: number } },\n        getClickTargetNode(handlerData.event) as HTMLElement,\n      );\n    }\n\n    addBreadcrumbEvent(replay, result);\n  };\n};\n\n/** Get the base DOM breadcrumb. */\nexport function getBaseDomBreadcrumb(target: Node | null, message: string): Breadcrumb {\n  const nodeId = record.mirror.getId(target);\n  const node = nodeId && record.mirror.getNode(nodeId);\n  const meta = node && record.mirror.getMeta(node);\n  const element = meta && isElement(meta) ? meta : null;\n\n  return {\n    message,\n    data: element\n      ? {\n          nodeId,\n          node: {\n            id: nodeId,\n            tagName: element.tagName,\n            textContent: Array.from(element.childNodes)\n              .map((node: serializedNodeWithId) => node.type === NodeType.Text && node.textContent)\n              .filter(Boolean) // filter out empty values\n              .map(text => (text as string).trim())\n              .join(''),\n            attributes: getAttributesToRecord(element.attributes),\n          },\n        }\n      : {},\n  };\n}\n\n/**\n * An event handler to react to DOM events.\n * Exported for tests.\n */\nexport function handleDom(handlerData: DomHandlerData): Breadcrumb | null {\n  const { target, message } = getDomTarget(handlerData);\n\n  return createBreadcrumb({\n    category: `ui.${handlerData.name}`,\n    ...getBaseDomBreadcrumb(target, message),\n  });\n}\n\nfunction getDomTarget(handlerData: DomHandlerData): { target: Node | null; message: string } {\n  const isClick = handlerData.name === 'click';\n\n  let message: string | undefined;\n  let target: Node | null = null;\n\n  // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n  try {\n    target = isClick ? getClickTargetNode(handlerData.event) : getTargetNode(handlerData.event);\n    message = htmlTreeAsString(target, { maxStringLength: 200 }) || '<unknown>';\n  } catch (e) {\n    message = '<unknown>';\n  }\n\n  return { target, message };\n}\n\nfunction isElement(node: serializedNodeWithId): node is serializedElementNodeWithId {\n  return node.type === NodeType.Element;\n}\n","import type { Breadcrumb } from '@sentry/types';\nimport { htmlTreeAsString } from '@sentry/utils';\n\nimport type { ReplayContainer } from '../types';\nimport { createBreadcrumb } from '../util/createBreadcrumb';\nimport { getBaseDomBreadcrumb } from './handleDom';\nimport { addBreadcrumbEvent } from './util/addBreadcrumbEvent';\n\n/** Handle keyboard events & create breadcrumbs. */\nexport function handleKeyboardEvent(replay: ReplayContainer, event: KeyboardEvent): void {\n  if (!replay.isEnabled()) {\n    return;\n  }\n\n  // Update user activity, but do not restart recording as it can create\n  // noisy/low-value replays (e.g. user comes back from idle, hits alt-tab, new\n  // session with a single \"keydown\" breadcrumb is created)\n  replay.updateUserActivity();\n\n  const breadcrumb = getKeyboardBreadcrumb(event);\n\n  if (!breadcrumb) {\n    return;\n  }\n\n  addBreadcrumbEvent(replay, breadcrumb);\n}\n\n/** exported only for tests */\nexport function getKeyboardBreadcrumb(event: KeyboardEvent): Breadcrumb | null {\n  const { metaKey, shiftKey, ctrlKey, altKey, key, target } = event;\n\n  // never capture for input fields\n  if (!target || isInputElement(target as HTMLElement) || !key) {\n    return null;\n  }\n\n  // Note: We do not consider shift here, as that means \"uppercase\"\n  const hasModifierKey = metaKey || ctrlKey || altKey;\n  const isCharacterKey = key.length === 1; // other keys like Escape, Tab, etc have a longer length\n\n  // Do not capture breadcrumb if only a word key is pressed\n  // This could leak e.g. user input\n  if (!hasModifierKey && isCharacterKey) {\n    return null;\n  }\n\n  const message = htmlTreeAsString(target, { maxStringLength: 200 }) || '<unknown>';\n  const baseBreadcrumb = getBaseDomBreadcrumb(target as Node, message);\n\n  return createBreadcrumb({\n    category: 'ui.keyDown',\n    message,\n    data: {\n      ...baseBreadcrumb.data,\n      metaKey,\n      shiftKey,\n      ctrlKey,\n      altKey,\n      key,\n    },\n  });\n}\n\nfunction isInputElement(target: HTMLElement): boolean {\n  return target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable;\n}\n","import { record } from '@sentry-internal/rrweb';\nimport { browserPerformanceTimeOrigin } from '@sentry/utils';\n\nimport { WINDOW } from '../constants';\nimport type {\n  AllPerformanceEntry,\n  AllPerformanceEntryData,\n  ExperimentalPerformanceResourceTiming,\n  LargestContentfulPaintData,\n  NavigationData,\n  PaintData,\n  ReplayPerformanceEntry,\n  ResourceData,\n} from '../types';\n\n// Map entryType -> function to normalize data for event\nconst ENTRY_TYPES: Record<\n  string,\n  (entry: AllPerformanceEntry) => null | ReplayPerformanceEntry<AllPerformanceEntryData>\n> = {\n  // @ts-expect-error TODO: entry type does not fit the create* functions entry type\n  resource: createResourceEntry,\n  paint: createPaintEntry,\n  // @ts-expect-error TODO: entry type does not fit the create* functions entry type\n  navigation: createNavigationEntry,\n};\n\n/**\n * Create replay performance entries from the browser performance entries.\n */\nexport function createPerformanceEntries(\n  entries: AllPerformanceEntry[],\n): ReplayPerformanceEntry<AllPerformanceEntryData>[] {\n  return entries.map(createPerformanceEntry).filter(Boolean) as ReplayPerformanceEntry<AllPerformanceEntryData>[];\n}\n\nfunction createPerformanceEntry(entry: AllPerformanceEntry): ReplayPerformanceEntry<AllPerformanceEntryData> | null {\n  if (!ENTRY_TYPES[entry.entryType]) {\n    return null;\n  }\n\n  return ENTRY_TYPES[entry.entryType](entry);\n}\n\nfunction getAbsoluteTime(time: number): number {\n  // browserPerformanceTimeOrigin can be undefined if `performance` or\n  // `performance.now` doesn't exist, but this is already checked by this integration\n  return ((browserPerformanceTimeOrigin || WINDOW.performance.timeOrigin) + time) / 1000;\n}\n\nfunction createPaintEntry(entry: PerformancePaintTiming): ReplayPerformanceEntry<PaintData> {\n  const { duration, entryType, name, startTime } = entry;\n\n  const start = getAbsoluteTime(startTime);\n  return {\n    type: entryType,\n    name,\n    start,\n    end: start + duration,\n    data: undefined,\n  };\n}\n\nfunction createNavigationEntry(entry: PerformanceNavigationTiming): ReplayPerformanceEntry<NavigationData> | null {\n  const {\n    entryType,\n    name,\n    decodedBodySize,\n    duration,\n    domComplete,\n    encodedBodySize,\n    domContentLoadedEventStart,\n    domContentLoadedEventEnd,\n    domInteractive,\n    loadEventStart,\n    loadEventEnd,\n    redirectCount,\n    startTime,\n    transferSize,\n    type,\n  } = entry;\n\n  // Ignore entries with no duration, they do not seem to be useful and cause dupes\n  if (duration === 0) {\n    return null;\n  }\n\n  return {\n    type: `${entryType}.${type}`,\n    start: getAbsoluteTime(startTime),\n    end: getAbsoluteTime(domComplete),\n    name,\n    data: {\n      size: transferSize,\n      decodedBodySize,\n      encodedBodySize,\n      duration,\n      domInteractive,\n      domContentLoadedEventStart,\n      domContentLoadedEventEnd,\n      loadEventStart,\n      loadEventEnd,\n      domComplete,\n      redirectCount,\n    },\n  };\n}\n\nfunction createResourceEntry(\n  entry: ExperimentalPerformanceResourceTiming,\n): ReplayPerformanceEntry<ResourceData> | null {\n  const {\n    entryType,\n    initiatorType,\n    name,\n    responseEnd,\n    startTime,\n    decodedBodySize,\n    encodedBodySize,\n    responseStatus,\n    transferSize,\n  } = entry;\n\n  // Core SDK handles these\n  if (['fetch', 'xmlhttprequest'].includes(initiatorType)) {\n    return null;\n  }\n\n  return {\n    type: `${entryType}.${initiatorType}`,\n    start: getAbsoluteTime(startTime),\n    end: getAbsoluteTime(responseEnd),\n    name,\n    data: {\n      size: transferSize,\n      statusCode: responseStatus,\n      decodedBodySize,\n      encodedBodySize,\n    },\n  };\n}\n\n/**\n * Add a LCP event to the replay based on an LCP metric.\n */\nexport function getLargestContentfulPaint(metric: {\n  value: number;\n  entries: PerformanceEntry[];\n}): ReplayPerformanceEntry<LargestContentfulPaintData> {\n  const entries = metric.entries;\n  const lastEntry = entries[entries.length - 1] as (PerformanceEntry & { element?: Element }) | undefined;\n  const element = lastEntry ? lastEntry.element : undefined;\n\n  const value = metric.value;\n\n  const end = getAbsoluteTime(value);\n\n  const data: ReplayPerformanceEntry<LargestContentfulPaintData> = {\n    type: 'largest-contentful-paint',\n    name: 'largest-contentful-paint',\n    start: end,\n    end,\n    data: {\n      value,\n      size: value,\n      nodeId: element ? record.mirror.getId(element) : undefined,\n    },\n  };\n\n  return data;\n}\n","import { addLcpInstrumentationHandler, addPerformanceInstrumentationHandler } from '@sentry-internal/tracing';\n\nimport type { ReplayContainer } from '../types';\nimport { getLargestContentfulPaint } from '../util/createPerformanceEntries';\n\n/**\n * Sets up a PerformanceObserver to listen to all performance entry types.\n * Returns a callback to stop observing.\n */\nexport function setupPerformanceObserver(replay: ReplayContainer): () => void {\n  function addPerformanceEntry(entry: PerformanceEntry): void {\n    // It is possible for entries to come up multiple times\n    if (!replay.performanceEntries.includes(entry)) {\n      replay.performanceEntries.push(entry);\n    }\n  }\n\n  function onEntries({ entries }: { entries: PerformanceEntry[] }): void {\n    entries.forEach(addPerformanceEntry);\n  }\n\n  const clearCallbacks: (() => void)[] = [];\n\n  (['navigation', 'paint', 'resource'] as const).forEach(type => {\n    clearCallbacks.push(addPerformanceInstrumentationHandler(type, onEntries));\n  });\n\n  clearCallbacks.push(\n    addLcpInstrumentationHandler(({ metric }) => {\n      replay.replayPerformanceEntries.push(getLargestContentfulPaint(metric));\n    }),\n  );\n\n  // A callback to cleanup all handlers\n  return () => {\n    clearCallbacks.forEach(clearCallback => clearCallback());\n  };\n}\n","import { REPLAY_MAX_EVENT_BUFFER_SIZE } from '../constants';\n\n/** This error indicates that the event buffer size exceeded the limit.. */\nexport class EventBufferSizeExceededError extends Error {\n  public constructor() {\n    super(`Event buffer exceeded maximum size of ${REPLAY_MAX_EVENT_BUFFER_SIZE}.`);\n  }\n}\n","import { REPLAY_MAX_EVENT_BUFFER_SIZE } from '../constants';\nimport type { AddEventResult, EventBuffer, EventBufferType, RecordingEvent } from '../types';\nimport { timestampToMs } from '../util/timestamp';\nimport { EventBufferSizeExceededError } from './error';\n\n/**\n * A basic event buffer that does not do any compression.\n * Used as fallback if the compression worker cannot be loaded or is disabled.\n */\nexport class EventBufferArray implements EventBuffer {\n  /** All the events that are buffered to be sent. */\n  public events: RecordingEvent[];\n\n  /** @inheritdoc */\n  public hasCheckout: boolean;\n\n  private _totalSize: number;\n\n  public constructor() {\n    this.events = [];\n    this._totalSize = 0;\n    this.hasCheckout = false;\n  }\n\n  /** @inheritdoc */\n  public get hasEvents(): boolean {\n    return this.events.length > 0;\n  }\n\n  /** @inheritdoc */\n  public get type(): EventBufferType {\n    return 'sync';\n  }\n\n  /** @inheritdoc */\n  public destroy(): void {\n    this.events = [];\n  }\n\n  /** @inheritdoc */\n  public async addEvent(event: RecordingEvent): Promise<AddEventResult> {\n    const eventSize = JSON.stringify(event).length;\n    this._totalSize += eventSize;\n    if (this._totalSize > REPLAY_MAX_EVENT_BUFFER_SIZE) {\n      throw new EventBufferSizeExceededError();\n    }\n\n    this.events.push(event);\n  }\n\n  /** @inheritdoc */\n  public finish(): Promise<string> {\n    return new Promise<string>(resolve => {\n      // Make a copy of the events array reference and immediately clear the\n      // events member so that we do not lose new events while uploading\n      // attachment.\n      const eventsRet = this.events;\n      this.clear();\n      resolve(JSON.stringify(eventsRet));\n    });\n  }\n\n  /** @inheritdoc */\n  public clear(): void {\n    this.events = [];\n    this._totalSize = 0;\n    this.hasCheckout = false;\n  }\n\n  /** @inheritdoc */\n  public getEarliestTimestamp(): number | null {\n    const timestamp = this.events.map(event => event.timestamp).sort()[0];\n\n    if (!timestamp) {\n      return null;\n    }\n\n    return timestampToMs(timestamp);\n  }\n}\n","import { logger } from '@sentry/utils';\n\nimport type { WorkerRequest, WorkerResponse } from '../types';\nimport { logInfo } from '../util/log';\n\n/**\n * Event buffer that uses a web worker to compress events.\n * Exported only for testing.\n */\nexport class WorkerHandler {\n  private _worker: Worker;\n  private _id: number;\n  private _ensureReadyPromise?: Promise<void>;\n\n  public constructor(worker: Worker) {\n    this._worker = worker;\n    this._id = 0;\n  }\n\n  /**\n   * Ensure the worker is ready (or not).\n   * This will either resolve when the worker is ready, or reject if an error occured.\n   */\n  public ensureReady(): Promise<void> {\n    // Ensure we only check once\n    if (this._ensureReadyPromise) {\n      return this._ensureReadyPromise;\n    }\n\n    this._ensureReadyPromise = new Promise((resolve, reject) => {\n      this._worker.addEventListener(\n        'message',\n        ({ data }: MessageEvent) => {\n          if ((data as WorkerResponse).success) {\n            resolve();\n          } else {\n            reject();\n          }\n        },\n        { once: true },\n      );\n\n      this._worker.addEventListener(\n        'error',\n        error => {\n          reject(error);\n        },\n        { once: true },\n      );\n    });\n\n    return this._ensureReadyPromise;\n  }\n\n  /**\n   * Destroy the worker.\n   */\n  public destroy(): void {\n    logInfo('[Replay] Destroying compression worker');\n    this._worker.terminate();\n  }\n\n  /**\n   * Post message to worker and wait for response before resolving promise.\n   */\n  public postMessage<T>(method: WorkerRequest['method'], arg?: WorkerRequest['arg']): Promise<T> {\n    const id = this._getAndIncrementId();\n\n    return new Promise((resolve, reject) => {\n      const listener = ({ data }: MessageEvent): void => {\n        const response = data as WorkerResponse;\n        if (response.method !== method) {\n          return;\n        }\n\n        // There can be multiple listeners for a single method, the id ensures\n        // that the response matches the caller.\n        if (response.id !== id) {\n          return;\n        }\n\n        // At this point, we'll always want to remove listener regardless of result status\n        this._worker.removeEventListener('message', listener);\n\n        if (!response.success) {\n          // TODO: Do some error handling, not sure what\n          __DEBUG_BUILD__ && logger.error('[Replay]', response.response);\n\n          reject(new Error('Error in compression worker'));\n          return;\n        }\n\n        resolve(response.response as T);\n      };\n\n      // Note: we can't use `once` option because it's possible it needs to\n      // listen to multiple messages\n      this._worker.addEventListener('message', listener);\n      this._worker.postMessage({ id, method, arg });\n    });\n  }\n\n  /** Get the current ID and increment it for the next call. */\n  private _getAndIncrementId(): number {\n    return this._id++;\n  }\n}\n","import type { ReplayRecordingData } from '@sentry/types';\n\nimport { REPLAY_MAX_EVENT_BUFFER_SIZE } from '../constants';\nimport type { AddEventResult, EventBuffer, EventBufferType, RecordingEvent } from '../types';\nimport { timestampToMs } from '../util/timestamp';\nimport { EventBufferSizeExceededError } from './error';\nimport { WorkerHandler } from './WorkerHandler';\n\n/**\n * Event buffer that uses a web worker to compress events.\n * Exported only for testing.\n */\nexport class EventBufferCompressionWorker implements EventBuffer {\n  /** @inheritdoc */\n  public hasCheckout: boolean;\n\n  private _worker: WorkerHandler;\n  private _earliestTimestamp: number | null;\n  private _totalSize;\n\n  public constructor(worker: Worker) {\n    this._worker = new WorkerHandler(worker);\n    this._earliestTimestamp = null;\n    this._totalSize = 0;\n    this.hasCheckout = false;\n  }\n\n  /** @inheritdoc */\n  public get hasEvents(): boolean {\n    return !!this._earliestTimestamp;\n  }\n\n  /** @inheritdoc */\n  public get type(): EventBufferType {\n    return 'worker';\n  }\n\n  /**\n   * Ensure the worker is ready (or not).\n   * This will either resolve when the worker is ready, or reject if an error occured.\n   */\n  public ensureReady(): Promise<void> {\n    return this._worker.ensureReady();\n  }\n\n  /**\n   * Destroy the event buffer.\n   */\n  public destroy(): void {\n    this._worker.destroy();\n  }\n\n  /**\n   * Add an event to the event buffer.\n   *\n   * Returns true if event was successfuly received and processed by worker.\n   */\n  public addEvent(event: RecordingEvent): Promise<AddEventResult> {\n    const timestamp = timestampToMs(event.timestamp);\n    if (!this._earliestTimestamp || timestamp < this._earliestTimestamp) {\n      this._earliestTimestamp = timestamp;\n    }\n\n    const data = JSON.stringify(event);\n    this._totalSize += data.length;\n\n    if (this._totalSize > REPLAY_MAX_EVENT_BUFFER_SIZE) {\n      return Promise.reject(new EventBufferSizeExceededError());\n    }\n\n    return this._sendEventToWorker(data);\n  }\n\n  /**\n   * Finish the event buffer and return the compressed data.\n   */\n  public finish(): Promise<ReplayRecordingData> {\n    return this._finishRequest();\n  }\n\n  /** @inheritdoc */\n  public clear(): void {\n    this._earliestTimestamp = null;\n    this._totalSize = 0;\n    this.hasCheckout = false;\n\n    // We do not wait on this, as we assume the order of messages is consistent for the worker\n    void this._worker.postMessage('clear');\n  }\n\n  /** @inheritdoc */\n  public getEarliestTimestamp(): number | null {\n    return this._earliestTimestamp;\n  }\n\n  /**\n   * Send the event to the worker.\n   */\n  private _sendEventToWorker(data: string): Promise<AddEventResult> {\n    return this._worker.postMessage<void>('addEvent', data);\n  }\n\n  /**\n   * Finish the request and return the compressed data from the worker.\n   */\n  private async _finishRequest(): Promise<Uint8Array> {\n    const response = await this._worker.postMessage<Uint8Array>('finish');\n\n    this._earliestTimestamp = null;\n    this._totalSize = 0;\n\n    return response;\n  }\n}\n","import type { ReplayRecordingData } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport type { AddEventResult, EventBuffer, EventBufferType, RecordingEvent } from '../types';\nimport { logInfo } from '../util/log';\nimport { EventBufferArray } from './EventBufferArray';\nimport { EventBufferCompressionWorker } from './EventBufferCompressionWorker';\n\n/**\n * This proxy will try to use the compression worker, and fall back to use the simple buffer if an error occurs there.\n * This can happen e.g. if the worker cannot be loaded.\n * Exported only for testing.\n */\nexport class EventBufferProxy implements EventBuffer {\n  private _fallback: EventBufferArray;\n  private _compression: EventBufferCompressionWorker;\n  private _used: EventBuffer;\n  private _ensureWorkerIsLoadedPromise: Promise<void>;\n\n  public constructor(worker: Worker) {\n    this._fallback = new EventBufferArray();\n    this._compression = new EventBufferCompressionWorker(worker);\n    this._used = this._fallback;\n\n    this._ensureWorkerIsLoadedPromise = this._ensureWorkerIsLoaded();\n  }\n\n  /** @inheritdoc */\n  public get type(): EventBufferType {\n    return this._used.type;\n  }\n\n  /** @inheritDoc */\n  public get hasEvents(): boolean {\n    return this._used.hasEvents;\n  }\n\n  /** @inheritdoc */\n  public get hasCheckout(): boolean {\n    return this._used.hasCheckout;\n  }\n  /** @inheritdoc */\n  public set hasCheckout(value: boolean) {\n    this._used.hasCheckout = value;\n  }\n\n  /** @inheritDoc */\n  public destroy(): void {\n    this._fallback.destroy();\n    this._compression.destroy();\n  }\n\n  /** @inheritdoc */\n  public clear(): void {\n    return this._used.clear();\n  }\n\n  /** @inheritdoc */\n  public getEarliestTimestamp(): number | null {\n    return this._used.getEarliestTimestamp();\n  }\n\n  /**\n   * Add an event to the event buffer.\n   *\n   * Returns true if event was successfully added.\n   */\n  public addEvent(event: RecordingEvent): Promise<AddEventResult> {\n    return this._used.addEvent(event);\n  }\n\n  /** @inheritDoc */\n  public async finish(): Promise<ReplayRecordingData> {\n    // Ensure the worker is loaded, so the sent event is compressed\n    await this.ensureWorkerIsLoaded();\n\n    return this._used.finish();\n  }\n\n  /** Ensure the worker has loaded. */\n  public ensureWorkerIsLoaded(): Promise<void> {\n    return this._ensureWorkerIsLoadedPromise;\n  }\n\n  /** Actually check if the worker has been loaded. */\n  private async _ensureWorkerIsLoaded(): Promise<void> {\n    try {\n      await this._compression.ensureReady();\n    } catch (error) {\n      // If the worker fails to load, we fall back to the simple buffer.\n      // Nothing more to do from our side here\n      logInfo('[Replay] Failed to load the compression worker, falling back to simple buffer');\n      return;\n    }\n\n    // Now we need to switch over the array buffer to the compression worker\n    await this._switchToCompressionWorker();\n  }\n\n  /** Switch the used buffer to the compression worker. */\n  private async _switchToCompressionWorker(): Promise<void> {\n    const { events, hasCheckout } = this._fallback;\n\n    const addEventPromises: Promise<void>[] = [];\n    for (const event of events) {\n      addEventPromises.push(this._compression.addEvent(event));\n    }\n\n    this._compression.hasCheckout = hasCheckout;\n\n    // We switch over to the new buffer immediately - any further events will be added\n    // after the previously buffered ones\n    this._used = this._compression;\n\n    // Wait for original events to be re-added before resolving\n    try {\n      await Promise.all(addEventPromises);\n    } catch (error) {\n      __DEBUG_BUILD__ && logger.warn('[Replay] Failed to add events when switching buffers.', error);\n    }\n  }\n}\n","import { getWorkerURL } from '@sentry-internal/replay-worker';\n\nimport type { EventBuffer } from '../types';\nimport { logInfo } from '../util/log';\nimport { EventBufferArray } from './EventBufferArray';\nimport { EventBufferProxy } from './EventBufferProxy';\n\ninterface CreateEventBufferParams {\n  useCompression: boolean;\n  workerUrl?: string;\n}\n\n// Treeshakable guard to remove the code of the included compression worker\ndeclare const __SENTRY_EXCLUDE_REPLAY_WORKER__: boolean;\n\n/**\n * Create an event buffer for replays.\n */\nexport function createEventBuffer({\n  useCompression,\n  workerUrl: customWorkerUrl,\n}: CreateEventBufferParams): EventBuffer {\n  if (\n    useCompression &&\n    // eslint-disable-next-line no-restricted-globals\n    window.Worker\n  ) {\n    const worker = _loadWorker(customWorkerUrl);\n\n    if (worker) {\n      return worker;\n    }\n  }\n\n  logInfo('[Replay] Using simple buffer');\n  return new EventBufferArray();\n}\n\nfunction _loadWorker(customWorkerUrl?: string): EventBufferProxy | void {\n  try {\n    const workerUrl = customWorkerUrl || _getWorkerUrl();\n\n    if (!workerUrl) {\n      return;\n    }\n\n    logInfo(`[Replay] Using compression worker${customWorkerUrl ? ` from ${customWorkerUrl}` : ''}`);\n    const worker = new Worker(workerUrl);\n    return new EventBufferProxy(worker);\n  } catch (error) {\n    logInfo('[Replay] Failed to create compression worker');\n    // Fall back to use simple event buffer array\n  }\n}\n\nfunction _getWorkerUrl(): string {\n  if (typeof __SENTRY_EXCLUDE_REPLAY_WORKER__ === 'undefined' || !__SENTRY_EXCLUDE_REPLAY_WORKER__) {\n    return getWorkerURL();\n  }\n\n  return '';\n}\n","import r from\"./worker\";function e(){const e=new Blob([r]);return URL.createObjectURL(e)}export{e as getWorkerURL};\n","export default `var t={},e={};function a(t){let e=t.length;for(;--e>=0;)t[e]=0}const s=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),r=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),n=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),i=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),_=new Array(576);a(_);const l=new Array(60);a(l);const h=new Array(512);a(h);const o=new Array(256);a(o);const d=new Array(29);a(d);const u=new Array(30);function f(t,e,a,s,r){this.static_tree=t,this.extra_bits=e,this.extra_base=a,this.elems=s,this.max_length=r,this.has_stree=t&&t.length}let c,p,g;function w(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}a(u);const m=t=>t<256?h[t]:h[256+(t>>>7)],b=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},y=(t,e,a)=>{t.bi_valid>16-a?(t.bi_buf|=e<<t.bi_valid&65535,b(t,t.bi_buf),t.bi_buf=e>>16-t.bi_valid,t.bi_valid+=a-16):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=a)},v=(t,e,a)=>{y(t,a[2*e],a[2*e+1])},z=(t,e)=>{let a=0;do{a|=1&t,t>>>=1,a<<=1}while(--e>0);return a>>>1},k=(t,e,a)=>{const s=new Array(16);let r,n,i=0;for(r=1;r<=15;r++)i=i+a[r-1]<<1,s[r]=i;for(n=0;n<=e;n++){let e=t[2*n+1];0!==e&&(t[2*n]=z(s[e]++,e))}},x=t=>{let e;for(e=0;e<286;e++)t.dyn_ltree[2*e]=0;for(e=0;e<30;e++)t.dyn_dtree[2*e]=0;for(e=0;e<19;e++)t.bl_tree[2*e]=0;t.dyn_ltree[512]=1,t.opt_len=t.static_len=0,t.sym_next=t.matches=0},A=t=>{t.bi_valid>8?b(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},E=(t,e,a,s)=>{const r=2*e,n=2*a;return t[r]<t[n]||t[r]===t[n]&&s[e]<=s[a]},Z=(t,e,a)=>{const s=t.heap[a];let r=a<<1;for(;r<=t.heap_len&&(r<t.heap_len&&E(e,t.heap[r+1],t.heap[r],t.depth)&&r++,!E(e,s,t.heap[r],t.depth));)t.heap[a]=t.heap[r],a=r,r<<=1;t.heap[a]=s},S=(t,e,a)=>{let n,i,_,l,h=0;if(0!==t.sym_next)do{n=255&t.pending_buf[t.sym_buf+h++],n+=(255&t.pending_buf[t.sym_buf+h++])<<8,i=t.pending_buf[t.sym_buf+h++],0===n?v(t,i,e):(_=o[i],v(t,_+256+1,e),l=s[_],0!==l&&(i-=d[_],y(t,i,l)),n--,_=m(n),v(t,_,a),l=r[_],0!==l&&(n-=u[_],y(t,n,l)))}while(h<t.sym_next);v(t,256,e)},U=(t,e)=>{const a=e.dyn_tree,s=e.stat_desc.static_tree,r=e.stat_desc.has_stree,n=e.stat_desc.elems;let i,_,l,h=-1;for(t.heap_len=0,t.heap_max=573,i=0;i<n;i++)0!==a[2*i]?(t.heap[++t.heap_len]=h=i,t.depth[i]=0):a[2*i+1]=0;for(;t.heap_len<2;)l=t.heap[++t.heap_len]=h<2?++h:0,a[2*l]=1,t.depth[l]=0,t.opt_len--,r&&(t.static_len-=s[2*l+1]);for(e.max_code=h,i=t.heap_len>>1;i>=1;i--)Z(t,a,i);l=n;do{i=t.heap[1],t.heap[1]=t.heap[t.heap_len--],Z(t,a,1),_=t.heap[1],t.heap[--t.heap_max]=i,t.heap[--t.heap_max]=_,a[2*l]=a[2*i]+a[2*_],t.depth[l]=(t.depth[i]>=t.depth[_]?t.depth[i]:t.depth[_])+1,a[2*i+1]=a[2*_+1]=l,t.heap[1]=l++,Z(t,a,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],((t,e)=>{const a=e.dyn_tree,s=e.max_code,r=e.stat_desc.static_tree,n=e.stat_desc.has_stree,i=e.stat_desc.extra_bits,_=e.stat_desc.extra_base,l=e.stat_desc.max_length;let h,o,d,u,f,c,p=0;for(u=0;u<=15;u++)t.bl_count[u]=0;for(a[2*t.heap[t.heap_max]+1]=0,h=t.heap_max+1;h<573;h++)o=t.heap[h],u=a[2*a[2*o+1]+1]+1,u>l&&(u=l,p++),a[2*o+1]=u,o>s||(t.bl_count[u]++,f=0,o>=_&&(f=i[o-_]),c=a[2*o],t.opt_len+=c*(u+f),n&&(t.static_len+=c*(r[2*o+1]+f)));if(0!==p){do{for(u=l-1;0===t.bl_count[u];)u--;t.bl_count[u]--,t.bl_count[u+1]+=2,t.bl_count[l]--,p-=2}while(p>0);for(u=l;0!==u;u--)for(o=t.bl_count[u];0!==o;)d=t.heap[--h],d>s||(a[2*d+1]!==u&&(t.opt_len+=(u-a[2*d+1])*a[2*d],a[2*d+1]=u),o--)}})(t,e),k(a,h,t.bl_count)},R=(t,e,a)=>{let s,r,n=-1,i=e[1],_=0,l=7,h=4;for(0===i&&(l=138,h=3),e[2*(a+1)+1]=65535,s=0;s<=a;s++)r=i,i=e[2*(s+1)+1],++_<l&&r===i||(_<h?t.bl_tree[2*r]+=_:0!==r?(r!==n&&t.bl_tree[2*r]++,t.bl_tree[32]++):_<=10?t.bl_tree[34]++:t.bl_tree[36]++,_=0,n=r,0===i?(l=138,h=3):r===i?(l=6,h=3):(l=7,h=4))},L=(t,e,a)=>{let s,r,n=-1,i=e[1],_=0,l=7,h=4;for(0===i&&(l=138,h=3),s=0;s<=a;s++)if(r=i,i=e[2*(s+1)+1],!(++_<l&&r===i)){if(_<h)do{v(t,r,t.bl_tree)}while(0!=--_);else 0!==r?(r!==n&&(v(t,r,t.bl_tree),_--),v(t,16,t.bl_tree),y(t,_-3,2)):_<=10?(v(t,17,t.bl_tree),y(t,_-3,3)):(v(t,18,t.bl_tree),y(t,_-11,7));_=0,n=r,0===i?(l=138,h=3):r===i?(l=6,h=3):(l=7,h=4)}};let T=!1;const F=(t,e,a,s)=>{y(t,0+(s?1:0),3),A(t),b(t,a),b(t,~a),a&&t.pending_buf.set(t.window.subarray(e,e+a),t.pending),t.pending+=a};e._tr_init=t=>{T||((()=>{let t,e,a,i,w;const m=new Array(16);for(a=0,i=0;i<28;i++)for(d[i]=a,t=0;t<1<<s[i];t++)o[a++]=i;for(o[a-1]=i,w=0,i=0;i<16;i++)for(u[i]=w,t=0;t<1<<r[i];t++)h[w++]=i;for(w>>=7;i<30;i++)for(u[i]=w<<7,t=0;t<1<<r[i]-7;t++)h[256+w++]=i;for(e=0;e<=15;e++)m[e]=0;for(t=0;t<=143;)_[2*t+1]=8,t++,m[8]++;for(;t<=255;)_[2*t+1]=9,t++,m[9]++;for(;t<=279;)_[2*t+1]=7,t++,m[7]++;for(;t<=287;)_[2*t+1]=8,t++,m[8]++;for(k(_,287,m),t=0;t<30;t++)l[2*t+1]=5,l[2*t]=z(t,5);c=new f(_,s,257,286,15),p=new f(l,r,0,30,15),g=new f(new Array(0),n,0,19,7)})(),T=!0),t.l_desc=new w(t.dyn_ltree,c),t.d_desc=new w(t.dyn_dtree,p),t.bl_desc=new w(t.bl_tree,g),t.bi_buf=0,t.bi_valid=0,x(t)},e._tr_stored_block=F,e._tr_flush_block=(t,e,a,s)=>{let r,n,h=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=(t=>{let e,a=4093624447;for(e=0;e<=31;e++,a>>>=1)if(1&a&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e<256;e++)if(0!==t.dyn_ltree[2*e])return 1;return 0})(t)),U(t,t.l_desc),U(t,t.d_desc),h=(t=>{let e;for(R(t,t.dyn_ltree,t.l_desc.max_code),R(t,t.dyn_dtree,t.d_desc.max_code),U(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*i[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e})(t),r=t.opt_len+3+7>>>3,n=t.static_len+3+7>>>3,n<=r&&(r=n)):r=n=a+5,a+4<=r&&-1!==e?F(t,e,a,s):4===t.strategy||n===r?(y(t,2+(s?1:0),3),S(t,_,l)):(y(t,4+(s?1:0),3),((t,e,a,s)=>{let r;for(y(t,e-257,5),y(t,a-1,5),y(t,s-4,4),r=0;r<s;r++)y(t,t.bl_tree[2*i[r]+1],3);L(t,t.dyn_ltree,e-1),L(t,t.dyn_dtree,a-1)})(t,t.l_desc.max_code+1,t.d_desc.max_code+1,h+1),S(t,t.dyn_ltree,t.dyn_dtree)),x(t),s&&A(t)},e._tr_tally=(t,e,a)=>(t.pending_buf[t.sym_buf+t.sym_next++]=e,t.pending_buf[t.sym_buf+t.sym_next++]=e>>8,t.pending_buf[t.sym_buf+t.sym_next++]=a,0===e?t.dyn_ltree[2*a]++:(t.matches++,e--,t.dyn_ltree[2*(o[a]+256+1)]++,t.dyn_dtree[2*m(e)]++),t.sym_next===t.sym_end),e._tr_align=t=>{y(t,2,3),v(t,256,_),(t=>{16===t.bi_valid?(b(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)})(t)};var O=(t,e,a,s)=>{let r=65535&t|0,n=t>>>16&65535|0,i=0;for(;0!==a;){i=a>2e3?2e3:a,a-=i;do{r=r+e[s++]|0,n=n+r|0}while(--i);r%=65521,n%=65521}return r|n<<16|0};const D=new Uint32Array((()=>{let t,e=[];for(var a=0;a<256;a++){t=a;for(var s=0;s<8;s++)t=1&t?3988292384^t>>>1:t>>>1;e[a]=t}return e})());var N=(t,e,a,s)=>{const r=D,n=s+a;t^=-1;for(let a=s;a<n;a++)t=t>>>8^r[255&(t^e[a])];return-1^t},C={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"},I={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:H,_tr_stored_block:B,_tr_flush_block:M,_tr_tally:P,_tr_align:Y}=e,K=O,j=N,G=C,{Z_NO_FLUSH:X,Z_PARTIAL_FLUSH:W,Z_FULL_FLUSH:q,Z_FINISH:J,Z_BLOCK:Q,Z_OK:V,Z_STREAM_END:$,Z_STREAM_ERROR:tt,Z_DATA_ERROR:et,Z_BUF_ERROR:at,Z_DEFAULT_COMPRESSION:st,Z_FILTERED:rt,Z_HUFFMAN_ONLY:nt,Z_RLE:it,Z_FIXED:_t,Z_DEFAULT_STRATEGY:lt,Z_UNKNOWN:ht,Z_DEFLATED:ot}=I,dt=(t,e)=>(t.msg=G[e],e),ut=t=>2*t-(t>4?9:0),ft=t=>{let e=t.length;for(;--e>=0;)t[e]=0},ct=t=>{let e,a,s,r=t.w_size;e=t.hash_size,s=e;do{a=t.head[--s],t.head[s]=a>=r?a-r:0}while(--e);e=r,s=e;do{a=t.prev[--s],t.prev[s]=a>=r?a-r:0}while(--e)};let pt=(t,e,a)=>(e<<t.hash_shift^a)&t.hash_mask;const gt=t=>{const e=t.state;let a=e.pending;a>t.avail_out&&(a=t.avail_out),0!==a&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+a),t.next_out),t.next_out+=a,e.pending_out+=a,t.total_out+=a,t.avail_out-=a,e.pending-=a,0===e.pending&&(e.pending_out=0))},wt=(t,e)=>{M(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,gt(t.strm)},mt=(t,e)=>{t.pending_buf[t.pending++]=e},bt=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},yt=(t,e,a,s)=>{let r=t.avail_in;return r>s&&(r=s),0===r?0:(t.avail_in-=r,e.set(t.input.subarray(t.next_in,t.next_in+r),a),1===t.state.wrap?t.adler=K(t.adler,e,r,a):2===t.state.wrap&&(t.adler=j(t.adler,e,r,a)),t.next_in+=r,t.total_in+=r,r)},vt=(t,e)=>{let a,s,r=t.max_chain_length,n=t.strstart,i=t.prev_length,_=t.nice_match;const l=t.strstart>t.w_size-262?t.strstart-(t.w_size-262):0,h=t.window,o=t.w_mask,d=t.prev,u=t.strstart+258;let f=h[n+i-1],c=h[n+i];t.prev_length>=t.good_match&&(r>>=2),_>t.lookahead&&(_=t.lookahead);do{if(a=e,h[a+i]===c&&h[a+i-1]===f&&h[a]===h[n]&&h[++a]===h[n+1]){n+=2,a++;do{}while(h[++n]===h[++a]&&h[++n]===h[++a]&&h[++n]===h[++a]&&h[++n]===h[++a]&&h[++n]===h[++a]&&h[++n]===h[++a]&&h[++n]===h[++a]&&h[++n]===h[++a]&&n<u);if(s=258-(u-n),n=u-258,s>i){if(t.match_start=e,i=s,s>=_)break;f=h[n+i-1],c=h[n+i]}}}while((e=d[e&o])>l&&0!=--r);return i<=t.lookahead?i:t.lookahead},zt=t=>{const e=t.w_size;let a,s,r;do{if(s=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-262)&&(t.window.set(t.window.subarray(e,e+e-s),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),ct(t),s+=e),0===t.strm.avail_in)break;if(a=yt(t.strm,t.window,t.strstart+t.lookahead,s),t.lookahead+=a,t.lookahead+t.insert>=3)for(r=t.strstart-t.insert,t.ins_h=t.window[r],t.ins_h=pt(t,t.ins_h,t.window[r+1]);t.insert&&(t.ins_h=pt(t,t.ins_h,t.window[r+3-1]),t.prev[r&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=r,r++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead<262&&0!==t.strm.avail_in)},kt=(t,e)=>{let a,s,r,n=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,i=0,_=t.strm.avail_in;do{if(a=65535,r=t.bi_valid+42>>3,t.strm.avail_out<r)break;if(r=t.strm.avail_out-r,s=t.strstart-t.block_start,a>s+t.strm.avail_in&&(a=s+t.strm.avail_in),a>r&&(a=r),a<n&&(0===a&&e!==J||e===X||a!==s+t.strm.avail_in))break;i=e===J&&a===s+t.strm.avail_in?1:0,B(t,0,0,i),t.pending_buf[t.pending-4]=a,t.pending_buf[t.pending-3]=a>>8,t.pending_buf[t.pending-2]=~a,t.pending_buf[t.pending-1]=~a>>8,gt(t.strm),s&&(s>a&&(s=a),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+s),t.strm.next_out),t.strm.next_out+=s,t.strm.avail_out-=s,t.strm.total_out+=s,t.block_start+=s,a-=s),a&&(yt(t.strm,t.strm.output,t.strm.next_out,a),t.strm.next_out+=a,t.strm.avail_out-=a,t.strm.total_out+=a)}while(0===i);return _-=t.strm.avail_in,_&&(_>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=_&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-_,t.strm.next_in),t.strstart),t.strstart+=_,t.insert+=_>t.w_size-t.insert?t.w_size-t.insert:_),t.block_start=t.strstart),t.high_water<t.strstart&&(t.high_water=t.strstart),i?4:e!==X&&e!==J&&0===t.strm.avail_in&&t.strstart===t.block_start?2:(r=t.window_size-t.strstart,t.strm.avail_in>r&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,r+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),r>t.strm.avail_in&&(r=t.strm.avail_in),r&&(yt(t.strm,t.window,t.strstart,r),t.strstart+=r,t.insert+=r>t.w_size-t.insert?t.w_size-t.insert:r),t.high_water<t.strstart&&(t.high_water=t.strstart),r=t.bi_valid+42>>3,r=t.pending_buf_size-r>65535?65535:t.pending_buf_size-r,n=r>t.w_size?t.w_size:r,s=t.strstart-t.block_start,(s>=n||(s||e===J)&&e!==X&&0===t.strm.avail_in&&s<=r)&&(a=s>r?r:s,i=e===J&&0===t.strm.avail_in&&a===s?1:0,B(t,t.block_start,a,i),t.block_start+=a,gt(t.strm)),i?3:1)},xt=(t,e)=>{let a,s;for(;;){if(t.lookahead<262){if(zt(t),t.lookahead<262&&e===X)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=pt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==a&&t.strstart-a<=t.w_size-262&&(t.match_length=vt(t,a)),t.match_length>=3)if(s=P(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){t.match_length--;do{t.strstart++,t.ins_h=pt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!=--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=pt(t,t.ins_h,t.window[t.strstart+1]);else s=P(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(s&&(wt(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===J?(wt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(wt(t,!1),0===t.strm.avail_out)?1:2},At=(t,e)=>{let a,s,r;for(;;){if(t.lookahead<262){if(zt(t),t.lookahead<262&&e===X)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=pt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==a&&t.prev_length<t.max_lazy_match&&t.strstart-a<=t.w_size-262&&(t.match_length=vt(t,a),t.match_length<=5&&(t.strategy===rt||3===t.match_length&&t.strstart-t.match_start>4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){r=t.strstart+t.lookahead-3,s=P(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=r&&(t.ins_h=pt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!=--t.prev_length);if(t.match_available=0,t.match_length=2,t.strstart++,s&&(wt(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if(s=P(t,0,t.window[t.strstart-1]),s&&wt(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(s=P(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===J?(wt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(wt(t,!1),0===t.strm.avail_out)?1:2};function Et(t,e,a,s,r){this.good_length=t,this.max_lazy=e,this.nice_length=a,this.max_chain=s,this.func=r}const Zt=[new Et(0,0,0,0,kt),new Et(4,4,8,4,xt),new Et(4,5,16,8,xt),new Et(4,6,32,32,xt),new Et(4,4,16,16,At),new Et(8,16,32,32,At),new Et(8,16,128,128,At),new Et(8,32,128,256,At),new Et(32,128,258,1024,At),new Et(32,258,258,4096,At)];function St(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=ot,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),ft(this.dyn_ltree),ft(this.dyn_dtree),ft(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),ft(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),ft(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const Ut=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||42!==e.status&&57!==e.status&&69!==e.status&&73!==e.status&&91!==e.status&&103!==e.status&&113!==e.status&&666!==e.status?1:0},Rt=t=>{if(Ut(t))return dt(t,tt);t.total_in=t.total_out=0,t.data_type=ht;const e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=2===e.wrap?57:e.wrap?42:113,t.adler=2===e.wrap?0:1,e.last_flush=-2,H(e),V},Lt=t=>{const e=Rt(t);var a;return e===V&&((a=t.state).window_size=2*a.w_size,ft(a.head),a.max_lazy_match=Zt[a.level].max_lazy,a.good_match=Zt[a.level].good_length,a.nice_match=Zt[a.level].nice_length,a.max_chain_length=Zt[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=2,a.match_available=0,a.ins_h=0),e},Tt=(t,e,a,s,r,n)=>{if(!t)return tt;let i=1;if(e===st&&(e=6),s<0?(i=0,s=-s):s>15&&(i=2,s-=16),r<1||r>9||a!==ot||s<8||s>15||e<0||e>9||n<0||n>_t||8===s&&1!==i)return dt(t,tt);8===s&&(s=9);const _=new St;return t.state=_,_.strm=t,_.status=42,_.wrap=i,_.gzhead=null,_.w_bits=s,_.w_size=1<<_.w_bits,_.w_mask=_.w_size-1,_.hash_bits=r+7,_.hash_size=1<<_.hash_bits,_.hash_mask=_.hash_size-1,_.hash_shift=~~((_.hash_bits+3-1)/3),_.window=new Uint8Array(2*_.w_size),_.head=new Uint16Array(_.hash_size),_.prev=new Uint16Array(_.w_size),_.lit_bufsize=1<<r+6,_.pending_buf_size=4*_.lit_bufsize,_.pending_buf=new Uint8Array(_.pending_buf_size),_.sym_buf=_.lit_bufsize,_.sym_end=3*(_.lit_bufsize-1),_.level=e,_.strategy=n,_.method=a,Lt(t)};t.deflateInit=(t,e)=>Tt(t,e,ot,15,8,lt),t.deflateInit2=Tt,t.deflateReset=Lt,t.deflateResetKeep=Rt,t.deflateSetHeader=(t,e)=>Ut(t)||2!==t.state.wrap?tt:(t.state.gzhead=e,V),t.deflate=(t,e)=>{if(Ut(t)||e>Q||e<0)return t?dt(t,tt):tt;const a=t.state;if(!t.output||0!==t.avail_in&&!t.input||666===a.status&&e!==J)return dt(t,0===t.avail_out?at:tt);const s=a.last_flush;if(a.last_flush=e,0!==a.pending){if(gt(t),0===t.avail_out)return a.last_flush=-1,V}else if(0===t.avail_in&&ut(e)<=ut(s)&&e!==J)return dt(t,at);if(666===a.status&&0!==t.avail_in)return dt(t,at);if(42===a.status&&0===a.wrap&&(a.status=113),42===a.status){let e=ot+(a.w_bits-8<<4)<<8,s=-1;if(s=a.strategy>=nt||a.level<2?0:a.level<6?1:6===a.level?2:3,e|=s<<6,0!==a.strstart&&(e|=32),e+=31-e%31,bt(a,e),0!==a.strstart&&(bt(a,t.adler>>>16),bt(a,65535&t.adler)),t.adler=1,a.status=113,gt(t),0!==a.pending)return a.last_flush=-1,V}if(57===a.status)if(t.adler=0,mt(a,31),mt(a,139),mt(a,8),a.gzhead)mt(a,(a.gzhead.text?1:0)+(a.gzhead.hcrc?2:0)+(a.gzhead.extra?4:0)+(a.gzhead.name?8:0)+(a.gzhead.comment?16:0)),mt(a,255&a.gzhead.time),mt(a,a.gzhead.time>>8&255),mt(a,a.gzhead.time>>16&255),mt(a,a.gzhead.time>>24&255),mt(a,9===a.level?2:a.strategy>=nt||a.level<2?4:0),mt(a,255&a.gzhead.os),a.gzhead.extra&&a.gzhead.extra.length&&(mt(a,255&a.gzhead.extra.length),mt(a,a.gzhead.extra.length>>8&255)),a.gzhead.hcrc&&(t.adler=j(t.adler,a.pending_buf,a.pending,0)),a.gzindex=0,a.status=69;else if(mt(a,0),mt(a,0),mt(a,0),mt(a,0),mt(a,0),mt(a,9===a.level?2:a.strategy>=nt||a.level<2?4:0),mt(a,3),a.status=113,gt(t),0!==a.pending)return a.last_flush=-1,V;if(69===a.status){if(a.gzhead.extra){let e=a.pending,s=(65535&a.gzhead.extra.length)-a.gzindex;for(;a.pending+s>a.pending_buf_size;){let r=a.pending_buf_size-a.pending;if(a.pending_buf.set(a.gzhead.extra.subarray(a.gzindex,a.gzindex+r),a.pending),a.pending=a.pending_buf_size,a.gzhead.hcrc&&a.pending>e&&(t.adler=j(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex+=r,gt(t),0!==a.pending)return a.last_flush=-1,V;e=0,s-=r}let r=new Uint8Array(a.gzhead.extra);a.pending_buf.set(r.subarray(a.gzindex,a.gzindex+s),a.pending),a.pending+=s,a.gzhead.hcrc&&a.pending>e&&(t.adler=j(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex=0}a.status=73}if(73===a.status){if(a.gzhead.name){let e,s=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>s&&(t.adler=j(t.adler,a.pending_buf,a.pending-s,s)),gt(t),0!==a.pending)return a.last_flush=-1,V;s=0}e=a.gzindex<a.gzhead.name.length?255&a.gzhead.name.charCodeAt(a.gzindex++):0,mt(a,e)}while(0!==e);a.gzhead.hcrc&&a.pending>s&&(t.adler=j(t.adler,a.pending_buf,a.pending-s,s)),a.gzindex=0}a.status=91}if(91===a.status){if(a.gzhead.comment){let e,s=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>s&&(t.adler=j(t.adler,a.pending_buf,a.pending-s,s)),gt(t),0!==a.pending)return a.last_flush=-1,V;s=0}e=a.gzindex<a.gzhead.comment.length?255&a.gzhead.comment.charCodeAt(a.gzindex++):0,mt(a,e)}while(0!==e);a.gzhead.hcrc&&a.pending>s&&(t.adler=j(t.adler,a.pending_buf,a.pending-s,s))}a.status=103}if(103===a.status){if(a.gzhead.hcrc){if(a.pending+2>a.pending_buf_size&&(gt(t),0!==a.pending))return a.last_flush=-1,V;mt(a,255&t.adler),mt(a,t.adler>>8&255),t.adler=0}if(a.status=113,gt(t),0!==a.pending)return a.last_flush=-1,V}if(0!==t.avail_in||0!==a.lookahead||e!==X&&666!==a.status){let s=0===a.level?kt(a,e):a.strategy===nt?((t,e)=>{let a;for(;;){if(0===t.lookahead&&(zt(t),0===t.lookahead)){if(e===X)return 1;break}if(t.match_length=0,a=P(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,a&&(wt(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===J?(wt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(wt(t,!1),0===t.strm.avail_out)?1:2})(a,e):a.strategy===it?((t,e)=>{let a,s,r,n;const i=t.window;for(;;){if(t.lookahead<=258){if(zt(t),t.lookahead<=258&&e===X)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(r=t.strstart-1,s=i[r],s===i[++r]&&s===i[++r]&&s===i[++r])){n=t.strstart+258;do{}while(s===i[++r]&&s===i[++r]&&s===i[++r]&&s===i[++r]&&s===i[++r]&&s===i[++r]&&s===i[++r]&&s===i[++r]&&r<n);t.match_length=258-(n-r),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(a=P(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(a=P(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),a&&(wt(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===J?(wt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(wt(t,!1),0===t.strm.avail_out)?1:2})(a,e):Zt[a.level].func(a,e);if(3!==s&&4!==s||(a.status=666),1===s||3===s)return 0===t.avail_out&&(a.last_flush=-1),V;if(2===s&&(e===W?Y(a):e!==Q&&(B(a,0,0,!1),e===q&&(ft(a.head),0===a.lookahead&&(a.strstart=0,a.block_start=0,a.insert=0))),gt(t),0===t.avail_out))return a.last_flush=-1,V}return e!==J?V:a.wrap<=0?$:(2===a.wrap?(mt(a,255&t.adler),mt(a,t.adler>>8&255),mt(a,t.adler>>16&255),mt(a,t.adler>>24&255),mt(a,255&t.total_in),mt(a,t.total_in>>8&255),mt(a,t.total_in>>16&255),mt(a,t.total_in>>24&255)):(bt(a,t.adler>>>16),bt(a,65535&t.adler)),gt(t),a.wrap>0&&(a.wrap=-a.wrap),0!==a.pending?V:$)},t.deflateEnd=t=>{if(Ut(t))return tt;const e=t.state.status;return t.state=null,113===e?dt(t,et):V},t.deflateSetDictionary=(t,e)=>{let a=e.length;if(Ut(t))return tt;const s=t.state,r=s.wrap;if(2===r||1===r&&42!==s.status||s.lookahead)return tt;if(1===r&&(t.adler=K(t.adler,e,a,0)),s.wrap=0,a>=s.w_size){0===r&&(ft(s.head),s.strstart=0,s.block_start=0,s.insert=0);let t=new Uint8Array(s.w_size);t.set(e.subarray(a-s.w_size,a),0),e=t,a=s.w_size}const n=t.avail_in,i=t.next_in,_=t.input;for(t.avail_in=a,t.next_in=0,t.input=e,zt(s);s.lookahead>=3;){let t=s.strstart,e=s.lookahead-2;do{s.ins_h=pt(s,s.ins_h,s.window[t+3-1]),s.prev[t&s.w_mask]=s.head[s.ins_h],s.head[s.ins_h]=t,t++}while(--e);s.strstart=t,s.lookahead=2,zt(s)}return s.strstart+=s.lookahead,s.block_start=s.strstart,s.insert=s.lookahead,s.lookahead=0,s.match_length=s.prev_length=2,s.match_available=0,t.next_in=i,t.input=_,t.avail_in=n,s.wrap=r,V},t.deflateInfo=\"pako deflate (from Nodeca project)\";var Ft={};const Ot=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);Ft.assign=function(t){const e=Array.prototype.slice.call(arguments,1);for(;e.length;){const a=e.shift();if(a){if(\"object\"!=typeof a)throw new TypeError(a+\"must be non-object\");for(const e in a)Ot(a,e)&&(t[e]=a[e])}}return t},Ft.flattenChunks=t=>{let e=0;for(let a=0,s=t.length;a<s;a++)e+=t[a].length;const a=new Uint8Array(e);for(let e=0,s=0,r=t.length;e<r;e++){let r=t[e];a.set(r,s),s+=r.length}return a};var Dt={};let Nt=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){Nt=!1}const Ct=new Uint8Array(256);for(let t=0;t<256;t++)Ct[t]=t>=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;Ct[254]=Ct[254]=1,Dt.string2buf=t=>{if(\"function\"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);let e,a,s,r,n,i=t.length,_=0;for(r=0;r<i;r++)a=t.charCodeAt(r),55296==(64512&a)&&r+1<i&&(s=t.charCodeAt(r+1),56320==(64512&s)&&(a=65536+(a-55296<<10)+(s-56320),r++)),_+=a<128?1:a<2048?2:a<65536?3:4;for(e=new Uint8Array(_),n=0,r=0;n<_;r++)a=t.charCodeAt(r),55296==(64512&a)&&r+1<i&&(s=t.charCodeAt(r+1),56320==(64512&s)&&(a=65536+(a-55296<<10)+(s-56320),r++)),a<128?e[n++]=a:a<2048?(e[n++]=192|a>>>6,e[n++]=128|63&a):a<65536?(e[n++]=224|a>>>12,e[n++]=128|a>>>6&63,e[n++]=128|63&a):(e[n++]=240|a>>>18,e[n++]=128|a>>>12&63,e[n++]=128|a>>>6&63,e[n++]=128|63&a);return e};Dt.buf2string=(t,e)=>{const a=e||t.length;if(\"function\"==typeof TextDecoder&&TextDecoder.prototype.decode)return(new TextDecoder).decode(t.subarray(0,e));let s,r;const n=new Array(2*a);for(r=0,s=0;s<a;){let e=t[s++];if(e<128){n[r++]=e;continue}let i=Ct[e];if(i>4)n[r++]=65533,s+=i-1;else{for(e&=2===i?31:3===i?15:7;i>1&&s<a;)e=e<<6|63&t[s++],i--;i>1?n[r++]=65533:e<65536?n[r++]=e:(e-=65536,n[r++]=55296|e>>10&1023,n[r++]=56320|1023&e)}}return((t,e)=>{if(e<65534&&t.subarray&&Nt)return String.fromCharCode.apply(null,t.length===e?t:t.subarray(0,e));let a=\"\";for(let s=0;s<e;s++)a+=String.fromCharCode(t[s]);return a})(n,r)},Dt.utf8border=(t,e)=>{(e=e||t.length)>t.length&&(e=t.length);let a=e-1;for(;a>=0&&128==(192&t[a]);)a--;return a<0||0===a?e:a+Ct[t[a]]>e?a:e};const It=t,Ht=Ft,Bt=Dt,Mt=C,Pt=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0},Yt=Object.prototype.toString,{Z_NO_FLUSH:Kt,Z_SYNC_FLUSH:jt,Z_FULL_FLUSH:Gt,Z_FINISH:Xt,Z_OK:Wt,Z_STREAM_END:qt,Z_DEFAULT_COMPRESSION:Jt,Z_DEFAULT_STRATEGY:Qt,Z_DEFLATED:Vt}=I;function $t(t){this.options=Ht.assign({level:Jt,method:Vt,chunkSize:16384,windowBits:15,memLevel:8,strategy:Qt},t||{});let e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new Pt,this.strm.avail_out=0;let a=It.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(a!==Wt)throw new Error(Mt[a]);if(e.header&&It.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t=\"string\"==typeof e.dictionary?Bt.string2buf(e.dictionary):\"[object ArrayBuffer]\"===Yt.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,a=It.deflateSetDictionary(this.strm,t),a!==Wt)throw new Error(Mt[a]);this._dict_set=!0}}$t.prototype.push=function(t,e){const a=this.strm,s=this.options.chunkSize;let r,n;if(this.ended)return!1;for(n=e===~~e?e:!0===e?Xt:Kt,\"string\"==typeof t?a.input=Bt.string2buf(t):\"[object ArrayBuffer]\"===Yt.call(t)?a.input=new Uint8Array(t):a.input=t,a.next_in=0,a.avail_in=a.input.length;;)if(0===a.avail_out&&(a.output=new Uint8Array(s),a.next_out=0,a.avail_out=s),(n===jt||n===Gt)&&a.avail_out<=6)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else{if(r=It.deflate(a,n),r===qt)return a.next_out>0&&this.onData(a.output.subarray(0,a.next_out)),r=It.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===Wt;if(0!==a.avail_out){if(n>0&&a.next_out>0)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else if(0===a.avail_in)break}else this.onData(a.output)}return!0},$t.prototype.onData=function(t){this.chunks.push(t)},$t.prototype.onEnd=function(t){t===Wt&&(this.result=Ht.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};const te=$t,ee=function(t,e){const a=new $t(e);if(a.push(t,!0),a.err)throw a.msg||Mt[a.err];return a.result},ae=I;const se=new class{constructor(){this._init()}clear(){this._init()}addEvent(t){if(!t)throw new Error(\"Adding invalid event\");const e=this._hasEvents?\",\":\"\";this.deflate.push(e+t,ae.Z_SYNC_FLUSH),this._hasEvents=!0}finish(){if(this.deflate.push(\"]\",ae.Z_FINISH),this.deflate.err)throw this.deflate.err;const t=this.deflate.result;return this._init(),t}_init(){this._hasEvents=!1,this.deflate=new te,this.deflate.push(\"[\",ae.Z_NO_FLUSH)}},re={clear:()=>{se.clear()},addEvent:t=>se.addEvent(t),finish:()=>se.finish(),compress:t=>function(t){return ee(t)}(t)};addEventListener(\"message\",(function(t){const e=t.data.method,a=t.data.id,s=t.data.arg;if(e in re&&\"function\"==typeof re[e])try{const t=re[e](s);postMessage({id:a,method:e,success:!0,response:t})}catch(t){postMessage({id:a,method:e,success:!1,response:t.message}),console.error(t)}})),postMessage({id:void 0,method:\"init\",success:!0,response:void 0});`;\n","import { WINDOW } from '../constants';\n\n/** If sessionStorage is available. */\nexport function hasSessionStorage(): boolean {\n  try {\n    // This can throw, e.g. when being accessed in a sandboxed iframe\n    return 'sessionStorage' in WINDOW && !!WINDOW.sessionStorage;\n  } catch {\n    return false;\n  }\n}\n","import { REPLAY_SESSION_KEY, WINDOW } from '../../src/constants';\nimport type { ReplayContainer } from '../../src/types';\nimport { hasSessionStorage } from '../util/hasSessionStorage';\n\n/**\n * Removes the session from Session Storage and unsets session in replay instance\n */\nexport function clearSession(replay: ReplayContainer): void {\n  deleteSession();\n  replay.session = undefined;\n}\n\n/**\n * Deletes a session from storage\n */\nfunction deleteSession(): void {\n  if (!hasSessionStorage()) {\n    return;\n  }\n\n  try {\n    WINDOW.sessionStorage.removeItem(REPLAY_SESSION_KEY);\n  } catch {\n    // Ignore potential SecurityError exceptions\n  }\n}\n","/**\n * Given a sample rate, returns true if replay should be sampled.\n *\n * 1.0 = 100% sampling\n * 0.0 = 0% sampling\n */\nexport function isSampled(sampleRate?: number): boolean {\n  if (sampleRate === undefined) {\n    return false;\n  }\n\n  // Math.random() returns a number in range of 0 to 1 (inclusive of 0, but not 1)\n  return Math.random() < sampleRate;\n}\n","import { REPLAY_SESSION_KEY, WINDOW } from '../constants';\nimport type { Session } from '../types';\nimport { hasSessionStorage } from '../util/hasSessionStorage';\n\n/**\n * Save a session to session storage.\n */\nexport function saveSession(session: Session): void {\n  if (!hasSessionStorage()) {\n    return;\n  }\n\n  try {\n    WINDOW.sessionStorage.setItem(REPLAY_SESSION_KEY, JSON.stringify(session));\n  } catch {\n    // Ignore potential SecurityError exceptions\n  }\n}\n","import { uuid4 } from '@sentry/utils';\n\nimport type { Sampled, Session } from '../types';\n\n/**\n * Get a session with defaults & applied sampling.\n */\nexport function makeSession(session: Partial<Session> & { sampled: Sampled }): Session {\n  const now = Date.now();\n  const id = session.id || uuid4();\n  // Note that this means we cannot set a started/lastActivity of `0`, but this should not be relevant outside of tests.\n  const started = session.started || now;\n  const lastActivity = session.lastActivity || now;\n  const segmentId = session.segmentId || 0;\n  const sampled = session.sampled;\n  const previousSessionId = session.previousSessionId;\n\n  return {\n    id,\n    started,\n    lastActivity,\n    segmentId,\n    sampled,\n    previousSessionId,\n  };\n}\n","import type { Sampled, Session, SessionOptions } from '../types';\nimport { isSampled } from '../util/isSampled';\nimport { saveSession } from './saveSession';\nimport { makeSession } from './Session';\n\n/**\n * Get the sampled status for a session based on sample rates & current sampled status.\n */\nexport function getSessionSampleType(sessionSampleRate: number, allowBuffering: boolean): Sampled {\n  return isSampled(sessionSampleRate) ? 'session' : allowBuffering ? 'buffer' : false;\n}\n\n/**\n * Create a new session, which in its current implementation is a Sentry event\n * that all replays will be saved to as attachments. Currently, we only expect\n * one of these Sentry events per \"replay session\".\n */\nexport function createSession(\n  { sessionSampleRate, allowBuffering, stickySession = false }: SessionOptions,\n  { previousSessionId }: { previousSessionId?: string } = {},\n): Session {\n  const sampled = getSessionSampleType(sessionSampleRate, allowBuffering);\n  const session = makeSession({\n    sampled,\n    previousSessionId,\n  });\n\n  if (stickySession) {\n    saveSession(session);\n  }\n\n  return session;\n}\n","/**\n * Given an initial timestamp and an expiry duration, checks to see if current\n * time should be considered as expired.\n */\nexport function isExpired(\n  initialTime: null | number,\n  expiry: undefined | number,\n  targetTime: number = +new Date(),\n): boolean {\n  // Always expired if < 0\n  if (initialTime === null || expiry === undefined || expiry < 0) {\n    return true;\n  }\n\n  // Never expires if == 0\n  if (expiry === 0) {\n    return false;\n  }\n\n  return initialTime + expiry <= targetTime;\n}\n","import type { Session } from '../types';\nimport { isExpired } from './isExpired';\n\n/**\n * Checks to see if session is expired\n */\nexport function isSessionExpired(\n  session: Session,\n  {\n    maxReplayDuration,\n    sessionIdleExpire,\n    targetTime = Date.now(),\n  }: { maxReplayDuration: number; sessionIdleExpire: number; targetTime?: number },\n): boolean {\n  return (\n    // First, check that maximum session length has not been exceeded\n    isExpired(session.started, maxReplayDuration, targetTime) ||\n    // check that the idle timeout has not been exceeded (i.e. user has\n    // performed an action within the last `sessionIdleExpire` ms)\n    isExpired(session.lastActivity, sessionIdleExpire, targetTime)\n  );\n}\n","import type { Session } from '../types';\nimport { isSessionExpired } from '../util/isSessionExpired';\n\n/** If the session should be refreshed or not. */\nexport function shouldRefreshSession(\n  session: Session,\n  { sessionIdleExpire, maxReplayDuration }: { sessionIdleExpire: number; maxReplayDuration: number },\n): boolean {\n  // If not expired, all good, just keep the session\n  if (!isSessionExpired(session, { sessionIdleExpire, maxReplayDuration })) {\n    return false;\n  }\n\n  // If we are buffering & haven't ever flushed yet, always continue\n  if (session.sampled === 'buffer' && session.segmentId === 0) {\n    return false;\n  }\n\n  return true;\n}\n","import type { Session, SessionOptions } from '../types';\nimport { logInfoNextTick } from '../util/log';\nimport { createSession } from './createSession';\nimport { fetchSession } from './fetchSession';\nimport { shouldRefreshSession } from './shouldRefreshSession';\n\n/**\n * Get or create a session, when initializing the replay.\n * Returns a session that may be unsampled.\n */\nexport function loadOrCreateSession(\n  {\n    traceInternals,\n    sessionIdleExpire,\n    maxReplayDuration,\n    previousSessionId,\n  }: {\n    sessionIdleExpire: number;\n    maxReplayDuration: number;\n    traceInternals?: boolean;\n    previousSessionId?: string;\n  },\n  sessionOptions: SessionOptions,\n): Session {\n  const existingSession = sessionOptions.stickySession && fetchSession(traceInternals);\n\n  // No session exists yet, just create a new one\n  if (!existingSession) {\n    logInfoNextTick('[Replay] Creating new session', traceInternals);\n    return createSession(sessionOptions, { previousSessionId });\n  }\n\n  if (!shouldRefreshSession(existingSession, { sessionIdleExpire, maxReplayDuration })) {\n    return existingSession;\n  }\n\n  logInfoNextTick('[Replay] Session in sessionStorage is expired, creating new one...');\n  return createSession(sessionOptions, { previousSessionId: existingSession.id });\n}\n","import { REPLAY_SESSION_KEY, WINDOW } from '../constants';\nimport type { Session } from '../types';\nimport { hasSessionStorage } from '../util/hasSessionStorage';\nimport { logInfoNextTick } from '../util/log';\nimport { makeSession } from './Session';\n\n/**\n * Fetches a session from storage\n */\nexport function fetchSession(traceInternals?: boolean): Session | null {\n  if (!hasSessionStorage()) {\n    return null;\n  }\n\n  try {\n    // This can throw if cookies are disabled\n    const sessionStringFromStorage = WINDOW.sessionStorage.getItem(REPLAY_SESSION_KEY);\n\n    if (!sessionStringFromStorage) {\n      return null;\n    }\n\n    const sessionObj = JSON.parse(sessionStringFromStorage) as Session;\n\n    logInfoNextTick('[Replay] Loading existing session', traceInternals);\n\n    return makeSession(sessionObj);\n  } catch {\n    return null;\n  }\n}\n","import { EventType } from '@sentry-internal/rrweb';\nimport { getCurrentHub } from '@sentry/core';\nimport { logger } from '@sentry/utils';\n\nimport { EventBufferSizeExceededError } from '../eventBuffer/error';\nimport type { AddEventResult, RecordingEvent, ReplayContainer, ReplayFrameEvent, ReplayPluginOptions } from '../types';\nimport { logInfo } from './log';\nimport { timestampToMs } from './timestamp';\n\nfunction isCustomEvent(event: RecordingEvent): event is ReplayFrameEvent {\n  return event.type === EventType.Custom;\n}\n\n/**\n * Add an event to the event buffer.\n * In contrast to `addEvent`, this does not return a promise & does not wait for the adding of the event to succeed/fail.\n * Instead this returns `true` if we tried to add the event, else false.\n * It returns `false` e.g. if we are paused, disabled, or out of the max replay duration.\n *\n * `isCheckout` is true if this is either the very first event, or an event triggered by `checkoutEveryNms`.\n */\nexport function addEventSync(replay: ReplayContainer, event: RecordingEvent, isCheckout?: boolean): boolean {\n  if (!shouldAddEvent(replay, event)) {\n    return false;\n  }\n\n  void _addEvent(replay, event, isCheckout);\n\n  return true;\n}\n\n/**\n * Add an event to the event buffer.\n * Resolves to `null` if no event was added, else to `void`.\n *\n * `isCheckout` is true if this is either the very first event, or an event triggered by `checkoutEveryNms`.\n */\nexport function addEvent(\n  replay: ReplayContainer,\n  event: RecordingEvent,\n  isCheckout?: boolean,\n): Promise<AddEventResult | null> {\n  if (!shouldAddEvent(replay, event)) {\n    return Promise.resolve(null);\n  }\n\n  return _addEvent(replay, event, isCheckout);\n}\n\nasync function _addEvent(\n  replay: ReplayContainer,\n  event: RecordingEvent,\n  isCheckout?: boolean,\n): Promise<AddEventResult | null> {\n  if (!replay.eventBuffer) {\n    return null;\n  }\n\n  try {\n    if (isCheckout && replay.recordingMode === 'buffer') {\n      replay.eventBuffer.clear();\n    }\n\n    if (isCheckout) {\n      replay.eventBuffer.hasCheckout = true;\n    }\n\n    const replayOptions = replay.getOptions();\n\n    const eventAfterPossibleCallback = maybeApplyCallback(event, replayOptions.beforeAddRecordingEvent);\n\n    if (!eventAfterPossibleCallback) {\n      return;\n    }\n\n    return await replay.eventBuffer.addEvent(eventAfterPossibleCallback);\n  } catch (error) {\n    const reason = error && error instanceof EventBufferSizeExceededError ? 'addEventSizeExceeded' : 'addEvent';\n\n    __DEBUG_BUILD__ && logger.error(error);\n    await replay.stop({ reason });\n\n    const client = getCurrentHub().getClient();\n\n    if (client) {\n      client.recordDroppedEvent('internal_sdk_error', 'replay');\n    }\n  }\n}\n\n/** Exported only for tests. */\nexport function shouldAddEvent(replay: ReplayContainer, event: RecordingEvent): boolean {\n  if (!replay.eventBuffer || replay.isPaused() || !replay.isEnabled()) {\n    return false;\n  }\n\n  const timestampInMs = timestampToMs(event.timestamp);\n\n  // Throw out events that happen more than 5 minutes ago. This can happen if\n  // page has been left open and idle for a long period of time and user\n  // comes back to trigger a new session. The performance entries rely on\n  // `performance.timeOrigin`, which is when the page first opened.\n  if (timestampInMs + replay.timeouts.sessionIdlePause < Date.now()) {\n    return false;\n  }\n\n  // Throw out events that are +60min from the initial timestamp\n  if (timestampInMs > replay.getContext().initialTimestamp + replay.getOptions().maxReplayDuration) {\n    logInfo(\n      `[Replay] Skipping event with timestamp ${timestampInMs} because it is after maxReplayDuration`,\n      replay.getOptions()._experiments.traceInternals,\n    );\n    return false;\n  }\n\n  return true;\n}\n\nfunction maybeApplyCallback(\n  event: RecordingEvent,\n  callback: ReplayPluginOptions['beforeAddRecordingEvent'],\n): RecordingEvent | null | undefined {\n  try {\n    if (typeof callback === 'function' && isCustomEvent(event)) {\n      return callback(event);\n    }\n  } catch (error) {\n    __DEBUG_BUILD__ &&\n      logger.error('[Replay] An error occured in the `beforeAddRecordingEvent` callback, skipping the event...', error);\n    return null;\n  }\n\n  return event;\n}\n","import type { ErrorEvent, Event, ReplayEvent, TransactionEvent } from '@sentry/types';\n\n/** If the event is an error event */\nexport function isErrorEvent(event: Event): event is ErrorEvent {\n  return !event.type;\n}\n\n/** If the event is a transaction event */\nexport function isTransactionEvent(event: Event): event is TransactionEvent {\n  return event.type === 'transaction';\n}\n\n/** If the event is an replay event */\nexport function isReplayEvent(event: Event): event is ReplayEvent {\n  return event.type === 'replay_event';\n}\n","import { getCurrentHub } from '@sentry/core';\nimport type { ErrorEvent, Event, TransactionEvent, Transport, TransportMakeRequestResponse } from '@sentry/types';\n\nimport type { ReplayContainer } from '../types';\nimport { isErrorEvent, isTransactionEvent } from '../util/eventUtils';\n\ntype AfterSendEventCallback = (event: Event, sendResponse: TransportMakeRequestResponse | void) => void;\n\n/**\n * Returns a listener to be added to `client.on('afterSendErrorEvent, listener)`.\n */\nexport function handleAfterSendEvent(replay: ReplayContainer): AfterSendEventCallback {\n  // Custom transports may still be returning `Promise<void>`, which means we cannot expect the status code to be available there\n  // TODO (v8): remove this check as it will no longer be necessary\n  const enforceStatusCode = isBaseTransportSend();\n\n  return (event: Event, sendResponse: TransportMakeRequestResponse | void) => {\n    if (!replay.isEnabled() || (!isErrorEvent(event) && !isTransactionEvent(event))) {\n      return;\n    }\n\n    const statusCode = sendResponse && sendResponse.statusCode;\n\n    // We only want to do stuff on successful error sending, otherwise you get error replays without errors attached\n    // If not using the base transport, we allow `undefined` response (as a custom transport may not implement this correctly yet)\n    // If we do use the base transport, we skip if we encountered an non-OK status code\n    if (enforceStatusCode && (!statusCode || statusCode < 200 || statusCode >= 300)) {\n      return;\n    }\n\n    if (isTransactionEvent(event)) {\n      handleTransactionEvent(replay, event);\n      return;\n    }\n\n    handleErrorEvent(replay, event);\n  };\n}\n\nfunction handleTransactionEvent(replay: ReplayContainer, event: TransactionEvent): void {\n  const replayContext = replay.getContext();\n\n  // Collect traceIds in _context regardless of `recordingMode`\n  // In error mode, _context gets cleared on every checkout\n  // We limit to max. 100 transactions linked\n  if (event.contexts && event.contexts.trace && event.contexts.trace.trace_id && replayContext.traceIds.size < 100) {\n    replayContext.traceIds.add(event.contexts.trace.trace_id as string);\n  }\n}\n\nfunction handleErrorEvent(replay: ReplayContainer, event: ErrorEvent): void {\n  const replayContext = replay.getContext();\n\n  // Add error to list of errorIds of replay. This is ok to do even if not\n  // sampled because context will get reset at next checkout.\n  // XXX: There is also a race condition where it's possible to capture an\n  // error to Sentry before Replay SDK has loaded, but response returns after\n  // it was loaded, and this gets called.\n  // We limit to max. 100 errors linked\n  if (event.event_id && replayContext.errorIds.size < 100) {\n    replayContext.errorIds.add(event.event_id);\n  }\n\n  // If error event is tagged with replay id it means it was sampled (when in buffer mode)\n  // Need to be very careful that this does not cause an infinite loop\n  if (replay.recordingMode === 'buffer' && event.tags && event.tags.replayId) {\n    setTimeout(() => {\n      // Capture current event buffer as new replay\n      void replay.sendBufferedReplayOrFlush();\n    });\n  }\n}\n\nfunction isBaseTransportSend(): boolean {\n  const client = getCurrentHub().getClient();\n  if (!client) {\n    return false;\n  }\n\n  const transport = client.getTransport();\n  if (!transport) {\n    return false;\n  }\n\n  return (\n    (transport.send as Transport['send'] & { __sentry__baseTransport__?: true }).__sentry__baseTransport__ || false\n  );\n}\n","import type { Event, EventHint } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport type { ReplayContainer } from '../types';\nimport { isErrorEvent, isReplayEvent, isTransactionEvent } from '../util/eventUtils';\nimport { isRrwebError } from '../util/isRrwebError';\nimport { handleAfterSendEvent } from './handleAfterSendEvent';\nimport { shouldSampleForBufferEvent } from './util/shouldSampleForBufferEvent';\n\n/**\n * Returns a listener to be added to `addGlobalEventProcessor(listener)`.\n */\nexport function handleGlobalEventListener(\n  replay: ReplayContainer,\n  includeAfterSendEventHandling = false,\n): (event: Event, hint: EventHint) => Event | null {\n  const afterSendHandler = includeAfterSendEventHandling ? handleAfterSendEvent(replay) : undefined;\n\n  return Object.assign(\n    (event: Event, hint: EventHint) => {\n      // Do nothing if replay has been disabled\n      if (!replay.isEnabled()) {\n        return event;\n      }\n\n      if (isReplayEvent(event)) {\n        // Replays have separate set of breadcrumbs, do not include breadcrumbs\n        // from core SDK\n        delete event.breadcrumbs;\n        return event;\n      }\n\n      // We only want to handle errors & transactions, nothing else\n      if (!isErrorEvent(event) && !isTransactionEvent(event)) {\n        return event;\n      }\n\n      // Ensure we do not add replay_id if the session is expired\n      const isSessionActive = replay.checkAndHandleExpiredSession();\n      if (!isSessionActive) {\n        return event;\n      }\n\n      // Unless `captureExceptions` is enabled, we want to ignore errors coming from rrweb\n      // As there can be a bunch of stuff going wrong in internals there, that we don't want to bubble up to users\n      if (isRrwebError(event, hint) && !replay.getOptions()._experiments.captureExceptions) {\n        __DEBUG_BUILD__ && logger.log('[Replay] Ignoring error from rrweb internals', event);\n        return null;\n      }\n\n      // When in buffer mode, we decide to sample here.\n      // Later, in `handleAfterSendEvent`, if the replayId is set, we know that we sampled\n      // And convert the buffer session to a full session\n      const isErrorEventSampled = shouldSampleForBufferEvent(replay, event);\n\n      // Tag errors if it has been sampled in buffer mode, or if it is session mode\n      // Only tag transactions if in session mode\n      const shouldTagReplayId = isErrorEventSampled || replay.recordingMode === 'session';\n\n      if (shouldTagReplayId) {\n        event.tags = { ...event.tags, replayId: replay.getSessionId() };\n      }\n\n      // In cases where a custom client is used that does not support the new hooks (yet),\n      // we manually call this hook method here\n      if (afterSendHandler) {\n        // Pretend the error had a 200 response so we always capture it\n        afterSendHandler(event, { statusCode: 200 });\n      }\n\n      return event;\n    },\n    { id: 'Replay' },\n  );\n}\n","import type { Event, EventHint } from '@sentry/types';\n\n/**\n * Returns true if we think the given event is an error originating inside of rrweb.\n */\nexport function isRrwebError(event: Event, hint: EventHint): boolean {\n  if (event.type || !event.exception || !event.exception.values || !event.exception.values.length) {\n    return false;\n  }\n\n  // @ts-expect-error this may be set by rrweb when it finds errors\n  if (hint.originalException && hint.originalException.__rrweb__) {\n    return true;\n  }\n\n  return false;\n}\n","import type { Event } from '@sentry/types';\n\nimport { UNABLE_TO_SEND_REPLAY } from '../../constants';\nimport type { ReplayContainer } from '../../types';\nimport { isSampled } from '../../util/isSampled';\n\n/**\n * Determine if event should be sampled (only applies in buffer mode).\n * When an event is captured by `hanldleGlobalEvent`, when in buffer mode\n * we determine if we want to sample the error or not.\n */\nexport function shouldSampleForBufferEvent(replay: ReplayContainer, event: Event): boolean {\n  if (replay.recordingMode !== 'buffer') {\n    return false;\n  }\n\n  // ignore this error because otherwise we could loop indefinitely with\n  // trying to capture replay and failing\n  if (event.message === UNABLE_TO_SEND_REPLAY) {\n    return false;\n  }\n\n  // Require the event to be an error event & to have an exception\n  if (!event.exception || event.type) {\n    return false;\n  }\n\n  return isSampled(replay.getOptions().errorSampleRate);\n}\n","import { EventType } from '@sentry-internal/rrweb';\n\nimport type { AddEventResult, AllEntryData, ReplayContainer, ReplayPerformanceEntry } from '../types';\n\n/**\n * Create a \"span\" for each performance entry.\n */\nexport function createPerformanceSpans(\n  replay: ReplayContainer,\n  entries: ReplayPerformanceEntry<AllEntryData>[],\n): Promise<AddEventResult | null>[] {\n  return entries.map(({ type, start, end, name, data }) => {\n    const response = replay.throttledAddEvent({\n      type: EventType.Custom,\n      timestamp: start,\n      data: {\n        tag: 'performanceSpan',\n        payload: {\n          op: type,\n          description: name,\n          startTimestamp: start,\n          endTimestamp: end,\n          data,\n        },\n      },\n    });\n\n    // If response is a string, it means its either THROTTLED or SKIPPED\n    return typeof response === 'string' ? Promise.resolve(null) : response;\n  });\n}\n","import type { HistoryData, ReplayContainer, ReplayPerformanceEntry } from '../types';\nimport { createPerformanceSpans } from '../util/createPerformanceSpans';\n\ninterface HistoryHandlerData {\n  from: string;\n  to: string;\n}\n\nfunction handleHistory(handlerData: HistoryHandlerData): ReplayPerformanceEntry<HistoryData> {\n  const { from, to } = handlerData;\n\n  const now = Date.now() / 1000;\n\n  return {\n    type: 'navigation.push',\n    start: now,\n    end: now,\n    name: to,\n    data: {\n      previous: from,\n    },\n  };\n}\n\n/**\n * Returns a listener to be added to `addInstrumentationHandler('history', listener)`.\n */\nexport function handleHistorySpanListener(replay: ReplayContainer): (handlerData: HistoryHandlerData) => void {\n  return (handlerData: HistoryHandlerData) => {\n    if (!replay.isEnabled()) {\n      return;\n    }\n\n    const result = handleHistory(handlerData);\n\n    if (result === null) {\n      return;\n    }\n\n    // Need to collect visited URLs\n    replay.getContext().urls.push(result.name);\n    replay.triggerUserActivity();\n\n    replay.addUpdate(() => {\n      createPerformanceSpans(replay, [result]);\n      // Returning false to flush\n      return false;\n    });\n  };\n}\n","import type { NetworkRequestData, ReplayContainer, ReplayPerformanceEntry } from '../../types';\nimport { createPerformanceSpans } from '../../util/createPerformanceSpans';\nimport { shouldFilterRequest } from '../../util/shouldFilterRequest';\n\n/** Add a performance entry breadcrumb */\nexport function addNetworkBreadcrumb(\n  replay: ReplayContainer,\n  result: ReplayPerformanceEntry<NetworkRequestData> | null,\n): void {\n  if (!replay.isEnabled()) {\n    return;\n  }\n\n  if (result === null) {\n    return;\n  }\n\n  if (shouldFilterRequest(replay, result.name)) {\n    return;\n  }\n\n  replay.addUpdate(() => {\n    createPerformanceSpans(replay, [result]);\n    // Returning true will cause `addUpdate` to not flush\n    // We do not want network requests to cause a flush. This will prevent\n    // recurring/polling requests from keeping the replay session alive.\n    return true;\n  });\n}\n","import { getCurrentHub, isSentryRequestUrl } from '@sentry/core';\n\nimport type { ReplayContainer } from '../types';\n\n/**\n * Check whether a given request URL should be filtered out. This is so we\n * don't log Sentry ingest requests.\n */\nexport function shouldFilterRequest(replay: ReplayContainer, url: string): boolean {\n  // If we enabled the `traceInternals` experiment, we want to trace everything\n  if (__DEBUG_BUILD__ && replay.getOptions()._experiments.traceInternals) {\n    return false;\n  }\n\n  return isSentryRequestUrl(url, getCurrentHub());\n}\n","import type { HandlerDataXhr } from '@sentry/types';\nimport { SENTRY_XHR_DATA_KEY } from '@sentry/utils';\n\nimport type { NetworkRequestData, ReplayContainer, ReplayPerformanceEntry } from '../types';\nimport { addNetworkBreadcrumb } from './util/addNetworkBreadcrumb';\n\n/** only exported for tests */\nexport function handleXhr(handlerData: HandlerDataXhr): ReplayPerformanceEntry<NetworkRequestData> | null {\n  const { startTimestamp, endTimestamp, xhr } = handlerData;\n\n  const sentryXhrData = xhr[SENTRY_XHR_DATA_KEY];\n\n  if (!startTimestamp || !endTimestamp || !sentryXhrData) {\n    return null;\n  }\n\n  // This is only used as a fallback, so we know the body sizes are never set here\n  const { method, url, status_code: statusCode } = sentryXhrData;\n\n  if (url === undefined) {\n    return null;\n  }\n\n  return {\n    type: 'resource.xhr',\n    name: url,\n    start: startTimestamp / 1000,\n    end: endTimestamp / 1000,\n    data: {\n      method,\n      statusCode,\n    },\n  };\n}\n\n/**\n * Returns a listener to be added to `addInstrumentationHandler('xhr', listener)`.\n */\nexport function handleXhrSpanListener(replay: ReplayContainer): (handlerData: HandlerDataXhr) => void {\n  return (handlerData: HandlerDataXhr) => {\n    if (!replay.isEnabled()) {\n      return;\n    }\n\n    const result = handleXhr(handlerData);\n\n    addNetworkBreadcrumb(replay, result);\n  };\n}\n","export const OBJ = 10;\nexport const OBJ_KEY = 11;\nexport const OBJ_KEY_STR = 12;\nexport const OBJ_VAL = 13;\nexport const OBJ_VAL_STR = 14;\nexport const OBJ_VAL_COMPLETED = 15;\n\nexport const ARR = 20;\nexport const ARR_VAL = 21;\nexport const ARR_VAL_STR = 22;\nexport const ARR_VAL_COMPLETED = 23;\n\nexport type JsonToken =\n  | typeof OBJ\n  | typeof OBJ_KEY\n  | typeof OBJ_KEY_STR\n  | typeof OBJ_VAL\n  | typeof OBJ_VAL_STR\n  | typeof OBJ_VAL_COMPLETED\n  | typeof ARR\n  | typeof ARR_VAL\n  | typeof ARR_VAL_STR\n  | typeof ARR_VAL_COMPLETED;\n","import type { JsonToken } from './constants';\nimport {\n  ARR,\n  ARR_VAL,\n  ARR_VAL_COMPLETED,\n  ARR_VAL_STR,\n  OBJ,\n  OBJ_KEY,\n  OBJ_KEY_STR,\n  OBJ_VAL,\n  OBJ_VAL_COMPLETED,\n  OBJ_VAL_STR,\n} from './constants';\n\nconst ALLOWED_PRIMITIVES = ['true', 'false', 'null'];\n\n/**\n * Complete an incomplete JSON string.\n * This will ensure that the last element always has a `\"~~\"` to indicate it was truncated.\n * For example, `[1,2,` will be completed to `[1,2,\"~~\"]`\n * and `{\"aa\":\"b` will be completed to `{\"aa\":\"b~~\"}`\n */\nexport function completeJson(incompleteJson: string, stack: JsonToken[]): string {\n  if (!stack.length) {\n    return incompleteJson;\n  }\n\n  let json = incompleteJson;\n\n  // Most checks are only needed for the last step in the stack\n  const lastPos = stack.length - 1;\n  const lastStep = stack[lastPos];\n\n  json = _fixLastStep(json, lastStep);\n\n  // Complete remaining steps - just add closing brackets\n  for (let i = lastPos; i >= 0; i--) {\n    const step = stack[i];\n\n    switch (step) {\n      case OBJ:\n        json = `${json}}`;\n        break;\n      case ARR:\n        json = `${json}]`;\n        break;\n    }\n  }\n\n  return json;\n}\n\nfunction _fixLastStep(json: string, lastStep: JsonToken): string {\n  switch (lastStep) {\n    // Object cases\n    case OBJ:\n      return `${json}\"~~\":\"~~\"`;\n    case OBJ_KEY:\n      return `${json}:\"~~\"`;\n    case OBJ_KEY_STR:\n      return `${json}~~\":\"~~\"`;\n    case OBJ_VAL:\n      return _maybeFixIncompleteObjValue(json);\n    case OBJ_VAL_STR:\n      return `${json}~~\"`;\n    case OBJ_VAL_COMPLETED:\n      return `${json},\"~~\":\"~~\"`;\n\n    // Array cases\n    case ARR:\n      return `${json}\"~~\"`;\n    case ARR_VAL:\n      return _maybeFixIncompleteArrValue(json);\n    case ARR_VAL_STR:\n      return `${json}~~\"`;\n    case ARR_VAL_COMPLETED:\n      return `${json},\"~~\"`;\n  }\n\n  return json;\n}\n\nfunction _maybeFixIncompleteArrValue(json: string): string {\n  const pos = _findLastArrayDelimiter(json);\n\n  if (pos > -1) {\n    const part = json.slice(pos + 1);\n\n    if (ALLOWED_PRIMITIVES.includes(part.trim())) {\n      return `${json},\"~~\"`;\n    }\n\n    // Everything else is replaced with `\"~~\"`\n    return `${json.slice(0, pos + 1)}\"~~\"`;\n  }\n\n  // fallback, this shouldn't happen, to be save\n  return json;\n}\n\nfunction _findLastArrayDelimiter(json: string): number {\n  for (let i = json.length - 1; i >= 0; i--) {\n    const char = json[i];\n\n    if (char === ',' || char === '[') {\n      return i;\n    }\n  }\n\n  return -1;\n}\n\nfunction _maybeFixIncompleteObjValue(json: string): string {\n  const startPos = json.lastIndexOf(':');\n\n  const part = json.slice(startPos + 1);\n\n  if (ALLOWED_PRIMITIVES.includes(part.trim())) {\n    return `${json},\"~~\":\"~~\"`;\n  }\n\n  // Everything else is replaced with `\"~~\"`\n  // This also means we do not have incomplete numbers, e.g `[1` is replaced with `[\"~~\"]`\n  return `${json.slice(0, startPos + 1)}\"~~\"`;\n}\n","import type { JsonToken } from './constants';\nimport {\n  ARR,\n  ARR_VAL,\n  ARR_VAL_COMPLETED,\n  ARR_VAL_STR,\n  OBJ,\n  OBJ_KEY,\n  OBJ_KEY_STR,\n  OBJ_VAL,\n  OBJ_VAL_COMPLETED,\n  OBJ_VAL_STR,\n} from './constants';\n\n/**\n * Evaluate an (incomplete) JSON string.\n */\nexport function evaluateJson(json: string): JsonToken[] {\n  const stack: JsonToken[] = [];\n\n  for (let pos = 0; pos < json.length; pos++) {\n    _evaluateJsonPos(stack, json, pos);\n  }\n\n  return stack;\n}\n\nfunction _evaluateJsonPos(stack: JsonToken[], json: string, pos: number): void {\n  const curStep = stack[stack.length - 1];\n\n  const char = json[pos];\n\n  const whitespaceRegex = /\\s/;\n\n  if (whitespaceRegex.test(char)) {\n    return;\n  }\n\n  if (char === '\"' && !_isEscaped(json, pos)) {\n    _handleQuote(stack, curStep);\n    return;\n  }\n\n  switch (char) {\n    case '{':\n      _handleObj(stack, curStep);\n      break;\n    case '[':\n      _handleArr(stack, curStep);\n      break;\n    case ':':\n      _handleColon(stack, curStep);\n      break;\n    case ',':\n      _handleComma(stack, curStep);\n      break;\n    case '}':\n      _handleObjClose(stack, curStep);\n      break;\n    case ']':\n      _handleArrClose(stack, curStep);\n      break;\n  }\n}\n\nfunction _handleQuote(stack: JsonToken[], curStep: JsonToken): void {\n  // End of obj value\n  if (curStep === OBJ_VAL_STR) {\n    stack.pop();\n    stack.push(OBJ_VAL_COMPLETED);\n    return;\n  }\n\n  // End of arr value\n  if (curStep === ARR_VAL_STR) {\n    stack.pop();\n    stack.push(ARR_VAL_COMPLETED);\n    return;\n  }\n\n  // Start of obj value\n  if (curStep === OBJ_VAL) {\n    stack.push(OBJ_VAL_STR);\n    return;\n  }\n\n  // Start of arr value\n  if (curStep === ARR_VAL) {\n    stack.push(ARR_VAL_STR);\n    return;\n  }\n\n  // Start of obj key\n  if (curStep === OBJ) {\n    stack.push(OBJ_KEY_STR);\n    return;\n  }\n\n  // End of obj key\n  if (curStep === OBJ_KEY_STR) {\n    stack.pop();\n    stack.push(OBJ_KEY);\n    return;\n  }\n}\n\nfunction _handleObj(stack: JsonToken[], curStep: JsonToken): void {\n  // Initial object\n  if (!curStep) {\n    stack.push(OBJ);\n    return;\n  }\n\n  // New object as obj value\n  if (curStep === OBJ_VAL) {\n    stack.push(OBJ);\n    return;\n  }\n\n  // New object as array element\n  if (curStep === ARR_VAL) {\n    stack.push(OBJ);\n  }\n\n  // New object as first array element\n  if (curStep === ARR) {\n    stack.push(OBJ);\n    return;\n  }\n}\n\nfunction _handleArr(stack: JsonToken[], curStep: JsonToken): void {\n  // Initial array\n  if (!curStep) {\n    stack.push(ARR);\n    stack.push(ARR_VAL);\n    return;\n  }\n\n  // New array as obj value\n  if (curStep === OBJ_VAL) {\n    stack.push(ARR);\n    stack.push(ARR_VAL);\n    return;\n  }\n\n  // New array as array element\n  if (curStep === ARR_VAL) {\n    stack.push(ARR);\n    stack.push(ARR_VAL);\n  }\n\n  // New array as first array element\n  if (curStep === ARR) {\n    stack.push(ARR);\n    stack.push(ARR_VAL);\n    return;\n  }\n}\n\nfunction _handleColon(stack: JsonToken[], curStep: JsonToken): void {\n  if (curStep === OBJ_KEY) {\n    stack.pop();\n    stack.push(OBJ_VAL);\n  }\n}\n\nfunction _handleComma(stack: JsonToken[], curStep: JsonToken): void {\n  // Comma after obj value\n  if (curStep === OBJ_VAL) {\n    stack.pop();\n    return;\n  }\n  if (curStep === OBJ_VAL_COMPLETED) {\n    // Pop OBJ_VAL_COMPLETED & OBJ_VAL\n    stack.pop();\n    stack.pop();\n    return;\n  }\n\n  // Comma after arr value\n  if (curStep === ARR_VAL) {\n    // do nothing - basically we'd pop ARR_VAL but add it right back\n    return;\n  }\n\n  if (curStep === ARR_VAL_COMPLETED) {\n    // Pop ARR_VAL_COMPLETED\n    stack.pop();\n\n    // basically we'd pop ARR_VAL but add it right back\n    return;\n  }\n}\n\nfunction _handleObjClose(stack: JsonToken[], curStep: JsonToken): void {\n  // Empty object {}\n  if (curStep === OBJ) {\n    stack.pop();\n  }\n\n  // Object with element\n  if (curStep === OBJ_VAL) {\n    // Pop OBJ_VAL, OBJ\n    stack.pop();\n    stack.pop();\n  }\n\n  // Obj with element\n  if (curStep === OBJ_VAL_COMPLETED) {\n    // Pop OBJ_VAL_COMPLETED, OBJ_VAL, OBJ\n    stack.pop();\n    stack.pop();\n    stack.pop();\n  }\n\n  // if was obj value, complete it\n  if (stack[stack.length - 1] === OBJ_VAL) {\n    stack.push(OBJ_VAL_COMPLETED);\n  }\n\n  // if was arr value, complete it\n  if (stack[stack.length - 1] === ARR_VAL) {\n    stack.push(ARR_VAL_COMPLETED);\n  }\n}\n\nfunction _handleArrClose(stack: JsonToken[], curStep: JsonToken): void {\n  // Empty array []\n  if (curStep === ARR) {\n    stack.pop();\n  }\n\n  // Array with element\n  if (curStep === ARR_VAL) {\n    // Pop ARR_VAL, ARR\n    stack.pop();\n    stack.pop();\n  }\n\n  // Array with element\n  if (curStep === ARR_VAL_COMPLETED) {\n    // Pop ARR_VAL_COMPLETED, ARR_VAL, ARR\n    stack.pop();\n    stack.pop();\n    stack.pop();\n  }\n\n  // if was obj value, complete it\n  if (stack[stack.length - 1] === OBJ_VAL) {\n    stack.push(OBJ_VAL_COMPLETED);\n  }\n\n  // if was arr value, complete it\n  if (stack[stack.length - 1] === ARR_VAL) {\n    stack.push(ARR_VAL_COMPLETED);\n  }\n}\n\nfunction _isEscaped(str: string, pos: number): boolean {\n  const previousChar = str[pos - 1];\n\n  return previousChar === '\\\\' && !_isEscaped(str, pos - 1);\n}\n","/* eslint-disable max-lines */\n\nimport { completeJson } from './completeJson';\nimport { evaluateJson } from './evaluateJson';\n\n/**\n * Takes an incomplete JSON string, and returns a hopefully valid JSON string.\n * Note that this _can_ fail, so you should check the return value is valid JSON.\n */\nexport function fixJson(incompleteJson: string): string {\n  const stack = evaluateJson(incompleteJson);\n\n  return completeJson(incompleteJson, stack);\n}\n","import type { TextEncoderInternal } from '@sentry/types';\nimport { dropUndefinedKeys, stringMatchesSomePattern } from '@sentry/utils';\n\nimport { NETWORK_BODY_MAX_SIZE, WINDOW } from '../../constants';\nimport type {\n  NetworkBody,\n  NetworkMetaWarning,\n  NetworkRequestData,\n  ReplayNetworkRequestData,\n  ReplayNetworkRequestOrResponse,\n  ReplayPerformanceEntry,\n} from '../../types';\nimport { fixJson } from '../../util/truncateJson/fixJson';\n\n/** Get the size of a body. */\nexport function getBodySize(\n  body: RequestInit['body'],\n  textEncoder: TextEncoder | TextEncoderInternal,\n): number | undefined {\n  if (!body) {\n    return undefined;\n  }\n\n  try {\n    if (typeof body === 'string') {\n      return textEncoder.encode(body).length;\n    }\n\n    if (body instanceof URLSearchParams) {\n      return textEncoder.encode(body.toString()).length;\n    }\n\n    if (body instanceof FormData) {\n      const formDataStr = _serializeFormData(body);\n      return textEncoder.encode(formDataStr).length;\n    }\n\n    if (body instanceof Blob) {\n      return body.size;\n    }\n\n    if (body instanceof ArrayBuffer) {\n      return body.byteLength;\n    }\n\n    // Currently unhandled types: ArrayBufferView, ReadableStream\n  } catch {\n    // just return undefined\n  }\n\n  return undefined;\n}\n\n/** Convert a Content-Length header to number/undefined.  */\nexport function parseContentLengthHeader(header: string | null | undefined): number | undefined {\n  if (!header) {\n    return undefined;\n  }\n\n  const size = parseInt(header, 10);\n  return isNaN(size) ? undefined : size;\n}\n\n/** Get the string representation of a body. */\nexport function getBodyString(body: unknown): string | undefined {\n  if (typeof body === 'string') {\n    return body;\n  }\n\n  if (body instanceof URLSearchParams) {\n    return body.toString();\n  }\n\n  if (body instanceof FormData) {\n    return _serializeFormData(body);\n  }\n\n  return undefined;\n}\n\n/** Convert ReplayNetworkRequestData to a PerformanceEntry. */\nexport function makeNetworkReplayBreadcrumb(\n  type: string,\n  data: ReplayNetworkRequestData | null,\n): ReplayPerformanceEntry<NetworkRequestData> | null {\n  if (!data) {\n    return null;\n  }\n\n  const { startTimestamp, endTimestamp, url, method, statusCode, request, response } = data;\n\n  const result: ReplayPerformanceEntry<NetworkRequestData> = {\n    type,\n    start: startTimestamp / 1000,\n    end: endTimestamp / 1000,\n    name: url,\n    data: dropUndefinedKeys({\n      method,\n      statusCode,\n      request,\n      response,\n    }),\n  };\n\n  return result;\n}\n\n/** Get either a JSON network body, or a text representation. */\nexport function getNetworkBody(bodyText: string | undefined): NetworkBody | undefined {\n  if (!bodyText) {\n    return;\n  }\n\n  try {\n    return JSON.parse(bodyText);\n  } catch {\n    // return text\n  }\n\n  return bodyText;\n}\n\n/** Build the request or response part of a replay network breadcrumb that was skipped. */\nexport function buildSkippedNetworkRequestOrResponse(bodySize: number | undefined): ReplayNetworkRequestOrResponse {\n  return {\n    headers: {},\n    size: bodySize,\n    _meta: {\n      warnings: ['URL_SKIPPED'],\n    },\n  };\n}\n\n/** Build the request or response part of a replay network breadcrumb. */\nexport function buildNetworkRequestOrResponse(\n  headers: Record<string, string>,\n  bodySize: number | undefined,\n  body: string | undefined,\n): ReplayNetworkRequestOrResponse | undefined {\n  if (!bodySize && Object.keys(headers).length === 0) {\n    return undefined;\n  }\n\n  if (!bodySize) {\n    return {\n      headers,\n    };\n  }\n\n  if (!body) {\n    return {\n      headers,\n      size: bodySize,\n    };\n  }\n\n  const info: ReplayNetworkRequestOrResponse = {\n    headers,\n    size: bodySize,\n  };\n\n  const { body: normalizedBody, warnings } = normalizeNetworkBody(body);\n  info.body = normalizedBody;\n  if (warnings.length > 0) {\n    info._meta = {\n      warnings,\n    };\n  }\n\n  return info;\n}\n\n/** Filter a set of headers */\nexport function getAllowedHeaders(headers: Record<string, string>, allowedHeaders: string[]): Record<string, string> {\n  return Object.keys(headers).reduce((filteredHeaders: Record<string, string>, key: string) => {\n    const normalizedKey = key.toLowerCase();\n    // Avoid putting empty strings into the headers\n    if (allowedHeaders.includes(normalizedKey) && headers[key]) {\n      filteredHeaders[normalizedKey] = headers[key];\n    }\n    return filteredHeaders;\n  }, {});\n}\n\nfunction _serializeFormData(formData: FormData): string {\n  // This is a bit simplified, but gives us a decent estimate\n  // This converts e.g. { name: 'Anne Smith', age: 13 } to 'name=Anne+Smith&age=13'\n  // @ts-expect-error passing FormData to URLSearchParams actually works\n  return new URLSearchParams(formData).toString();\n}\n\nfunction normalizeNetworkBody(body: string | undefined): {\n  body: NetworkBody | undefined;\n  warnings: NetworkMetaWarning[];\n} {\n  if (!body || typeof body !== 'string') {\n    return {\n      body,\n      warnings: [],\n    };\n  }\n\n  const exceedsSizeLimit = body.length > NETWORK_BODY_MAX_SIZE;\n\n  if (_strIsProbablyJson(body)) {\n    try {\n      const json = exceedsSizeLimit ? fixJson(body.slice(0, NETWORK_BODY_MAX_SIZE)) : body;\n      const normalizedBody = JSON.parse(json);\n      return {\n        body: normalizedBody,\n        warnings: exceedsSizeLimit ? ['JSON_TRUNCATED'] : [],\n      };\n    } catch {\n      return {\n        body: exceedsSizeLimit ? `${body.slice(0, NETWORK_BODY_MAX_SIZE)}…` : body,\n        warnings: exceedsSizeLimit ? ['INVALID_JSON', 'TEXT_TRUNCATED'] : ['INVALID_JSON'],\n      };\n    }\n  }\n\n  return {\n    body: exceedsSizeLimit ? `${body.slice(0, NETWORK_BODY_MAX_SIZE)}…` : body,\n    warnings: exceedsSizeLimit ? ['TEXT_TRUNCATED'] : [],\n  };\n}\n\nfunction _strIsProbablyJson(str: string): boolean {\n  const first = str[0];\n  const last = str[str.length - 1];\n\n  // Simple check: If this does not start & end with {} or [], it's not JSON\n  return (first === '[' && last === ']') || (first === '{' && last === '}');\n}\n\n/** Match an URL against a list of strings/Regex. */\nexport function urlMatches(url: string, urls: (string | RegExp)[]): boolean {\n  const fullUrl = getFullUrl(url);\n\n  return stringMatchesSomePattern(fullUrl, urls);\n}\n\n/** exported for tests */\nexport function getFullUrl(url: string, baseURI = WINDOW.document.baseURI): string {\n  // Short circuit for common cases:\n  if (url.startsWith('http://') || url.startsWith('https://') || url.startsWith(WINDOW.location.origin)) {\n    return url;\n  }\n  const fixedUrl = new URL(url, baseURI);\n\n  // If these do not match, we are not dealing with a relative URL, so just return it\n  if (fixedUrl.origin !== new URL(baseURI).origin) {\n    return url;\n  }\n\n  const fullUrl = fixedUrl.href;\n\n  // Remove trailing slashes, if they don't match the original URL\n  if (!url.endsWith('/') && fullUrl.endsWith('/')) {\n    return fullUrl.slice(0, -1);\n  }\n\n  return fullUrl;\n}\n","import type { Breadcrumb, FetchBreadcrumbData, TextEncoderInternal } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport type {\n  FetchHint,\n  ReplayContainer,\n  ReplayNetworkOptions,\n  ReplayNetworkRequestData,\n  ReplayNetworkRequestOrResponse,\n} from '../../types';\nimport { addNetworkBreadcrumb } from './addNetworkBreadcrumb';\nimport {\n  buildNetworkRequestOrResponse,\n  buildSkippedNetworkRequestOrResponse,\n  getAllowedHeaders,\n  getBodySize,\n  getBodyString,\n  makeNetworkReplayBreadcrumb,\n  parseContentLengthHeader,\n  urlMatches,\n} from './networkUtils';\n\n/**\n * Capture a fetch breadcrumb to a replay.\n * This adds additional data (where approriate).\n */\nexport async function captureFetchBreadcrumbToReplay(\n  breadcrumb: Breadcrumb & { data: FetchBreadcrumbData },\n  hint: FetchHint,\n  options: ReplayNetworkOptions & {\n    textEncoder: TextEncoderInternal;\n    replay: ReplayContainer;\n  },\n): Promise<void> {\n  try {\n    const data = await _prepareFetchData(breadcrumb, hint, options);\n\n    // Create a replay performance entry from this breadcrumb\n    const result = makeNetworkReplayBreadcrumb('resource.fetch', data);\n    addNetworkBreadcrumb(options.replay, result);\n  } catch (error) {\n    __DEBUG_BUILD__ && logger.error('[Replay] Failed to capture fetch breadcrumb', error);\n  }\n}\n\n/**\n * Enrich a breadcrumb with additional data.\n * This has to be sync & mutate the given breadcrumb,\n * as the breadcrumb is afterwards consumed by other handlers.\n */\nexport function enrichFetchBreadcrumb(\n  breadcrumb: Breadcrumb & { data: FetchBreadcrumbData },\n  hint: FetchHint,\n  options: { textEncoder: TextEncoderInternal },\n): void {\n  const { input, response } = hint;\n\n  const body = _getFetchRequestArgBody(input);\n  const reqSize = getBodySize(body, options.textEncoder);\n\n  const resSize = response ? parseContentLengthHeader(response.headers.get('content-length')) : undefined;\n\n  if (reqSize !== undefined) {\n    breadcrumb.data.request_body_size = reqSize;\n  }\n  if (resSize !== undefined) {\n    breadcrumb.data.response_body_size = resSize;\n  }\n}\n\nasync function _prepareFetchData(\n  breadcrumb: Breadcrumb & { data: FetchBreadcrumbData },\n  hint: FetchHint,\n  options: ReplayNetworkOptions & {\n    textEncoder: TextEncoderInternal;\n  },\n): Promise<ReplayNetworkRequestData> {\n  const { startTimestamp, endTimestamp } = hint;\n\n  const {\n    url,\n    method,\n    status_code: statusCode = 0,\n    request_body_size: requestBodySize,\n    response_body_size: responseBodySize,\n  } = breadcrumb.data;\n\n  const captureDetails =\n    urlMatches(url, options.networkDetailAllowUrls) && !urlMatches(url, options.networkDetailDenyUrls);\n\n  const request = captureDetails\n    ? _getRequestInfo(options, hint.input, requestBodySize)\n    : buildSkippedNetworkRequestOrResponse(requestBodySize);\n  const response = await _getResponseInfo(captureDetails, options, hint.response, responseBodySize);\n\n  return {\n    startTimestamp,\n    endTimestamp,\n    url,\n    method,\n    statusCode,\n    request,\n    response,\n  };\n}\n\nfunction _getRequestInfo(\n  { networkCaptureBodies, networkRequestHeaders }: ReplayNetworkOptions,\n  input: FetchHint['input'],\n  requestBodySize?: number,\n): ReplayNetworkRequestOrResponse | undefined {\n  const headers = getRequestHeaders(input, networkRequestHeaders);\n\n  if (!networkCaptureBodies) {\n    return buildNetworkRequestOrResponse(headers, requestBodySize, undefined);\n  }\n\n  // We only want to transmit string or string-like bodies\n  const requestBody = _getFetchRequestArgBody(input);\n  const bodyStr = getBodyString(requestBody);\n  return buildNetworkRequestOrResponse(headers, requestBodySize, bodyStr);\n}\n\nasync function _getResponseInfo(\n  captureDetails: boolean,\n  {\n    networkCaptureBodies,\n    textEncoder,\n    networkResponseHeaders,\n  }: ReplayNetworkOptions & {\n    textEncoder: TextEncoderInternal;\n  },\n  response: Response,\n  responseBodySize?: number,\n): Promise<ReplayNetworkRequestOrResponse | undefined> {\n  if (!captureDetails && responseBodySize !== undefined) {\n    return buildSkippedNetworkRequestOrResponse(responseBodySize);\n  }\n\n  const headers = getAllHeaders(response.headers, networkResponseHeaders);\n\n  if (!networkCaptureBodies && responseBodySize !== undefined) {\n    return buildNetworkRequestOrResponse(headers, responseBodySize, undefined);\n  }\n\n  // Only clone the response if we need to\n  try {\n    // We have to clone this, as the body can only be read once\n    const res = response.clone();\n    const bodyText = await _parseFetchBody(res);\n\n    const size =\n      bodyText && bodyText.length && responseBodySize === undefined\n        ? getBodySize(bodyText, textEncoder)\n        : responseBodySize;\n\n    if (!captureDetails) {\n      return buildSkippedNetworkRequestOrResponse(size);\n    }\n\n    if (networkCaptureBodies) {\n      return buildNetworkRequestOrResponse(headers, size, bodyText);\n    }\n\n    return buildNetworkRequestOrResponse(headers, size, undefined);\n  } catch {\n    // fallback\n    return buildNetworkRequestOrResponse(headers, responseBodySize, undefined);\n  }\n}\n\nasync function _parseFetchBody(response: Response): Promise<string | undefined> {\n  try {\n    return await response.text();\n  } catch {\n    return undefined;\n  }\n}\n\nfunction _getFetchRequestArgBody(fetchArgs: unknown[] = []): RequestInit['body'] | undefined {\n  // We only support getting the body from the fetch options\n  if (fetchArgs.length !== 2 || typeof fetchArgs[1] !== 'object') {\n    return undefined;\n  }\n\n  return (fetchArgs[1] as RequestInit).body;\n}\n\nfunction getAllHeaders(headers: Headers, allowedHeaders: string[]): Record<string, string> {\n  const allHeaders: Record<string, string> = {};\n\n  allowedHeaders.forEach(header => {\n    if (headers.get(header)) {\n      allHeaders[header] = headers.get(header) as string;\n    }\n  });\n\n  return allHeaders;\n}\n\nfunction getRequestHeaders(fetchArgs: unknown[], allowedHeaders: string[]): Record<string, string> {\n  if (fetchArgs.length === 1 && typeof fetchArgs[0] !== 'string') {\n    return getHeadersFromOptions(fetchArgs[0] as Request | RequestInit, allowedHeaders);\n  }\n\n  if (fetchArgs.length === 2) {\n    return getHeadersFromOptions(fetchArgs[1] as Request | RequestInit, allowedHeaders);\n  }\n\n  return {};\n}\n\nfunction getHeadersFromOptions(\n  input: Request | RequestInit | undefined,\n  allowedHeaders: string[],\n): Record<string, string> {\n  if (!input) {\n    return {};\n  }\n\n  const headers = input.headers;\n\n  if (!headers) {\n    return {};\n  }\n\n  if (headers instanceof Headers) {\n    return getAllHeaders(headers, allowedHeaders);\n  }\n\n  // We do not support this, as it is not really documented (anymore?)\n  if (Array.isArray(headers)) {\n    return {};\n  }\n\n  return getAllowedHeaders(headers, allowedHeaders);\n}\n","import type { Breadcrumb, TextEncoderInternal, XhrBreadcrumbData } from '@sentry/types';\nimport { logger, SENTRY_XHR_DATA_KEY } from '@sentry/utils';\n\nimport type { ReplayContainer, ReplayNetworkOptions, ReplayNetworkRequestData, XhrHint } from '../../types';\nimport { addNetworkBreadcrumb } from './addNetworkBreadcrumb';\nimport {\n  buildNetworkRequestOrResponse,\n  buildSkippedNetworkRequestOrResponse,\n  getAllowedHeaders,\n  getBodySize,\n  getBodyString,\n  makeNetworkReplayBreadcrumb,\n  parseContentLengthHeader,\n  urlMatches,\n} from './networkUtils';\n\n/**\n * Capture an XHR breadcrumb to a replay.\n * This adds additional data (where approriate).\n */\nexport async function captureXhrBreadcrumbToReplay(\n  breadcrumb: Breadcrumb & { data: XhrBreadcrumbData },\n  hint: XhrHint,\n  options: ReplayNetworkOptions & { replay: ReplayContainer },\n): Promise<void> {\n  try {\n    const data = _prepareXhrData(breadcrumb, hint, options);\n\n    // Create a replay performance entry from this breadcrumb\n    const result = makeNetworkReplayBreadcrumb('resource.xhr', data);\n    addNetworkBreadcrumb(options.replay, result);\n  } catch (error) {\n    __DEBUG_BUILD__ && logger.error('[Replay] Failed to capture xhr breadcrumb', error);\n  }\n}\n\n/**\n * Enrich a breadcrumb with additional data.\n * This has to be sync & mutate the given breadcrumb,\n * as the breadcrumb is afterwards consumed by other handlers.\n */\nexport function enrichXhrBreadcrumb(\n  breadcrumb: Breadcrumb & { data: XhrBreadcrumbData },\n  hint: XhrHint,\n  options: { textEncoder: TextEncoderInternal },\n): void {\n  const { xhr, input } = hint;\n\n  const reqSize = getBodySize(input, options.textEncoder);\n  const resSize = xhr.getResponseHeader('content-length')\n    ? parseContentLengthHeader(xhr.getResponseHeader('content-length'))\n    : getBodySize(xhr.response, options.textEncoder);\n\n  if (reqSize !== undefined) {\n    breadcrumb.data.request_body_size = reqSize;\n  }\n  if (resSize !== undefined) {\n    breadcrumb.data.response_body_size = resSize;\n  }\n}\n\nfunction _prepareXhrData(\n  breadcrumb: Breadcrumb & { data: XhrBreadcrumbData },\n  hint: XhrHint,\n  options: ReplayNetworkOptions,\n): ReplayNetworkRequestData | null {\n  const { startTimestamp, endTimestamp, input, xhr } = hint;\n\n  const {\n    url,\n    method,\n    status_code: statusCode = 0,\n    request_body_size: requestBodySize,\n    response_body_size: responseBodySize,\n  } = breadcrumb.data;\n\n  if (!url) {\n    return null;\n  }\n\n  if (!urlMatches(url, options.networkDetailAllowUrls) || urlMatches(url, options.networkDetailDenyUrls)) {\n    const request = buildSkippedNetworkRequestOrResponse(requestBodySize);\n    const response = buildSkippedNetworkRequestOrResponse(responseBodySize);\n    return {\n      startTimestamp,\n      endTimestamp,\n      url,\n      method,\n      statusCode,\n      request,\n      response,\n    };\n  }\n\n  const xhrInfo = xhr[SENTRY_XHR_DATA_KEY];\n  const networkRequestHeaders = xhrInfo\n    ? getAllowedHeaders(xhrInfo.request_headers, options.networkRequestHeaders)\n    : {};\n  const networkResponseHeaders = getAllowedHeaders(getResponseHeaders(xhr), options.networkResponseHeaders);\n\n  const request = buildNetworkRequestOrResponse(\n    networkRequestHeaders,\n    requestBodySize,\n    options.networkCaptureBodies ? getBodyString(input) : undefined,\n  );\n  const response = buildNetworkRequestOrResponse(\n    networkResponseHeaders,\n    responseBodySize,\n    options.networkCaptureBodies ? hint.xhr.responseText : undefined,\n  );\n\n  return {\n    startTimestamp,\n    endTimestamp,\n    url,\n    method,\n    statusCode,\n    request,\n    response,\n  };\n}\n\nfunction getResponseHeaders(xhr: XMLHttpRequest): Record<string, string> {\n  const headers = xhr.getAllResponseHeaders();\n\n  if (!headers) {\n    return {};\n  }\n\n  return headers.split('\\r\\n').reduce((acc: Record<string, string>, line: string) => {\n    const [key, value] = line.split(': ');\n    acc[key.toLowerCase()] = value;\n    return acc;\n  }, {});\n}\n","import { getCurrentHub } from '@sentry/core';\nimport type {\n  Breadcrumb,\n  BreadcrumbHint,\n  FetchBreadcrumbData,\n  TextEncoderInternal,\n  XhrBreadcrumbData,\n} from '@sentry/types';\nimport { addInstrumentationHandler, logger } from '@sentry/utils';\n\nimport type { FetchHint, ReplayContainer, ReplayNetworkOptions, XhrHint } from '../types';\nimport { handleFetchSpanListener } from './handleFetch';\nimport { handleXhrSpanListener } from './handleXhr';\nimport { captureFetchBreadcrumbToReplay, enrichFetchBreadcrumb } from './util/fetchUtils';\nimport { captureXhrBreadcrumbToReplay, enrichXhrBreadcrumb } from './util/xhrUtils';\n\ninterface ExtendedNetworkBreadcrumbsOptions extends ReplayNetworkOptions {\n  replay: ReplayContainer;\n  textEncoder: TextEncoderInternal;\n}\n\n/**\n * This method does two things:\n * - It enriches the regular XHR/fetch breadcrumbs with request/response size data\n * - It captures the XHR/fetch breadcrumbs to the replay\n *   (enriching it with further data that is _not_ added to the regular breadcrumbs)\n */\nexport function handleNetworkBreadcrumbs(replay: ReplayContainer): void {\n  const client = getCurrentHub().getClient();\n\n  try {\n    const textEncoder = new TextEncoder();\n\n    const {\n      networkDetailAllowUrls,\n      networkDetailDenyUrls,\n      networkCaptureBodies,\n      networkRequestHeaders,\n      networkResponseHeaders,\n    } = replay.getOptions();\n\n    const options: ExtendedNetworkBreadcrumbsOptions = {\n      replay,\n      textEncoder,\n      networkDetailAllowUrls,\n      networkDetailDenyUrls,\n      networkCaptureBodies,\n      networkRequestHeaders,\n      networkResponseHeaders,\n    };\n\n    if (client && client.on) {\n      client.on('beforeAddBreadcrumb', (breadcrumb, hint) => beforeAddNetworkBreadcrumb(options, breadcrumb, hint));\n    } else {\n      // Fallback behavior\n      addInstrumentationHandler('fetch', handleFetchSpanListener(replay));\n      addInstrumentationHandler('xhr', handleXhrSpanListener(replay));\n    }\n  } catch {\n    // Do nothing\n  }\n}\n\n/** just exported for tests */\nexport function beforeAddNetworkBreadcrumb(\n  options: ExtendedNetworkBreadcrumbsOptions,\n  breadcrumb: Breadcrumb,\n  hint?: BreadcrumbHint,\n): void {\n  if (!breadcrumb.data) {\n    return;\n  }\n\n  try {\n    if (_isXhrBreadcrumb(breadcrumb) && _isXhrHint(hint)) {\n      // This has to be sync, as we need to ensure the breadcrumb is enriched in the same tick\n      // Because the hook runs synchronously, and the breadcrumb is afterwards passed on\n      // So any async mutations to it will not be reflected in the final breadcrumb\n      enrichXhrBreadcrumb(breadcrumb, hint, options);\n\n      void captureXhrBreadcrumbToReplay(breadcrumb, hint, options);\n    }\n\n    if (_isFetchBreadcrumb(breadcrumb) && _isFetchHint(hint)) {\n      // This has to be sync, as we need to ensure the breadcrumb is enriched in the same tick\n      // Because the hook runs synchronously, and the breadcrumb is afterwards passed on\n      // So any async mutations to it will not be reflected in the final breadcrumb\n      enrichFetchBreadcrumb(breadcrumb, hint, options);\n\n      void captureFetchBreadcrumbToReplay(breadcrumb, hint, options);\n    }\n  } catch (e) {\n    __DEBUG_BUILD__ && logger.warn('Error when enriching network breadcrumb');\n  }\n}\n\nfunction _isXhrBreadcrumb(breadcrumb: Breadcrumb): breadcrumb is Breadcrumb & { data: XhrBreadcrumbData } {\n  return breadcrumb.category === 'xhr';\n}\n\nfunction _isFetchBreadcrumb(breadcrumb: Breadcrumb): breadcrumb is Breadcrumb & { data: FetchBreadcrumbData } {\n  return breadcrumb.category === 'fetch';\n}\n\nfunction _isXhrHint(hint?: BreadcrumbHint): hint is XhrHint {\n  return hint && hint.xhr;\n}\n\nfunction _isFetchHint(hint?: BreadcrumbHint): hint is FetchHint {\n  return hint && hint.response;\n}\n","import type { HandlerDataFetch } from '@sentry/types';\n\nimport type { NetworkRequestData, ReplayContainer, ReplayPerformanceEntry } from '../types';\nimport { addNetworkBreadcrumb } from './util/addNetworkBreadcrumb';\n\n/** only exported for tests */\nexport function handleFetch(handlerData: HandlerDataFetch): null | ReplayPerformanceEntry<NetworkRequestData> {\n  const { startTimestamp, endTimestamp, fetchData, response } = handlerData;\n\n  if (!endTimestamp) {\n    return null;\n  }\n\n  // This is only used as a fallback, so we know the body sizes are never set here\n  const { method, url } = fetchData;\n\n  return {\n    type: 'resource.fetch',\n    start: startTimestamp / 1000,\n    end: endTimestamp / 1000,\n    name: url,\n    data: {\n      method,\n      statusCode: response ? (response as Response).status : undefined,\n    },\n  };\n}\n\n/**\n * Returns a listener to be added to `addInstrumentationHandler('fetch', listener)`.\n */\nexport function handleFetchSpanListener(replay: ReplayContainer): (handlerData: HandlerDataFetch) => void {\n  return (handlerData: HandlerDataFetch) => {\n    if (!replay.isEnabled()) {\n      return;\n    }\n\n    const result = handleFetch(handlerData);\n\n    addNetworkBreadcrumb(replay, result);\n  };\n}\n","import type { Breadcrumb, Scope } from '@sentry/types';\nimport { normalize } from '@sentry/utils';\n\nimport { CONSOLE_ARG_MAX_SIZE } from '../constants';\nimport type { ReplayContainer } from '../types';\nimport type { ReplayFrame } from '../types/replayFrame';\nimport { createBreadcrumb } from '../util/createBreadcrumb';\nimport { fixJson } from '../util/truncateJson/fixJson';\nimport { addBreadcrumbEvent } from './util/addBreadcrumbEvent';\n\nlet _LAST_BREADCRUMB: null | Breadcrumb = null;\n\ntype BreadcrumbWithCategory = Required<Pick<Breadcrumb, 'category'>>;\n\nfunction isBreadcrumbWithCategory(breadcrumb: Breadcrumb): breadcrumb is BreadcrumbWithCategory {\n  return !!breadcrumb.category;\n}\n\nexport const handleScopeListener: (replay: ReplayContainer) => (scope: Scope) => void =\n  (replay: ReplayContainer) =>\n  (scope: Scope): void => {\n    if (!replay.isEnabled()) {\n      return;\n    }\n\n    const result = handleScope(scope);\n\n    if (!result) {\n      return;\n    }\n\n    addBreadcrumbEvent(replay, result);\n  };\n\n/**\n * An event handler to handle scope changes.\n */\nexport function handleScope(scope: Scope): Breadcrumb | null {\n  // TODO (v8): Remove this guard. This was put in place because we introduced\n  // Scope.getLastBreadcrumb mid-v7 which caused incompatibilities with older SDKs.\n  // For now, we'll just return null if the method doesn't exist but we should eventually\n  // get rid of this guard.\n  const newBreadcrumb = scope.getLastBreadcrumb && scope.getLastBreadcrumb();\n\n  // Listener can be called when breadcrumbs have not changed, so we store the\n  // reference to the last crumb and only return a crumb if it has changed\n  if (_LAST_BREADCRUMB === newBreadcrumb || !newBreadcrumb) {\n    return null;\n  }\n\n  _LAST_BREADCRUMB = newBreadcrumb;\n\n  if (\n    !isBreadcrumbWithCategory(newBreadcrumb) ||\n    ['fetch', 'xhr', 'sentry.event', 'sentry.transaction'].includes(newBreadcrumb.category) ||\n    newBreadcrumb.category.startsWith('ui.')\n  ) {\n    return null;\n  }\n\n  if (newBreadcrumb.category === 'console') {\n    return normalizeConsoleBreadcrumb(newBreadcrumb);\n  }\n\n  return createBreadcrumb(newBreadcrumb);\n}\n\n/** exported for tests only */\nexport function normalizeConsoleBreadcrumb(\n  breadcrumb: Omit<Breadcrumb, 'category'> & BreadcrumbWithCategory,\n): ReplayFrame {\n  const args = breadcrumb.data && breadcrumb.data.arguments;\n\n  if (!Array.isArray(args) || args.length === 0) {\n    return createBreadcrumb(breadcrumb);\n  }\n\n  let isTruncated = false;\n\n  // Avoid giant args captures\n  const normalizedArgs = args.map(arg => {\n    if (!arg) {\n      return arg;\n    }\n    if (typeof arg === 'string') {\n      if (arg.length > CONSOLE_ARG_MAX_SIZE) {\n        isTruncated = true;\n        return `${arg.slice(0, CONSOLE_ARG_MAX_SIZE)}…`;\n      }\n\n      return arg;\n    }\n    if (typeof arg === 'object') {\n      try {\n        const normalizedArg = normalize(arg, 7);\n        const stringified = JSON.stringify(normalizedArg);\n        if (stringified.length > CONSOLE_ARG_MAX_SIZE) {\n          const fixedJson = fixJson(stringified.slice(0, CONSOLE_ARG_MAX_SIZE));\n          const json = JSON.parse(fixedJson);\n          // We only set this after JSON.parse() was successfull, so we know we didn't run into `catch`\n          isTruncated = true;\n          return json;\n        }\n        return normalizedArg;\n      } catch {\n        // fall back to default\n      }\n    }\n\n    return arg;\n  });\n\n  return createBreadcrumb({\n    ...breadcrumb,\n    data: {\n      ...breadcrumb.data,\n      arguments: normalizedArgs,\n      ...(isTruncated ? { _meta: { warnings: ['CONSOLE_ARG_TRUNCATED'] } } : {}),\n    },\n  });\n}\n","import type { BaseClient } from '@sentry/core';\nimport { addGlobalEventProcessor, getCurrentHub } from '@sentry/core';\nimport type { Client, DynamicSamplingContext } from '@sentry/types';\nimport { addInstrumentationHandler } from '@sentry/utils';\n\nimport { handleAfterSendEvent } from '../coreHandlers/handleAfterSendEvent';\nimport { handleDomListener } from '../coreHandlers/handleDom';\nimport { handleGlobalEventListener } from '../coreHandlers/handleGlobalEvent';\nimport { handleHistorySpanListener } from '../coreHandlers/handleHistory';\nimport { handleNetworkBreadcrumbs } from '../coreHandlers/handleNetworkBreadcrumbs';\nimport { handleScopeListener } from '../coreHandlers/handleScope';\nimport type { ReplayContainer } from '../types';\n\n/**\n * Add global listeners that cannot be removed.\n */\nexport function addGlobalListeners(replay: ReplayContainer): void {\n  // Listeners from core SDK //\n  const scope = getCurrentHub().getScope();\n  const client = getCurrentHub().getClient();\n\n  scope.addScopeListener(handleScopeListener(replay));\n  addInstrumentationHandler('dom', handleDomListener(replay));\n  addInstrumentationHandler('history', handleHistorySpanListener(replay));\n  handleNetworkBreadcrumbs(replay);\n\n  // Tag all (non replay) events that get sent to Sentry with the current\n  // replay ID so that we can reference them later in the UI\n  const eventProcessor = handleGlobalEventListener(replay, !hasHooks(client));\n  if (client && client.addEventProcessor) {\n    client.addEventProcessor(eventProcessor);\n  } else {\n    addGlobalEventProcessor(eventProcessor);\n  }\n\n  // If a custom client has no hooks yet, we continue to use the \"old\" implementation\n  if (hasHooks(client)) {\n    client.on('afterSendEvent', handleAfterSendEvent(replay));\n    client.on('createDsc', (dsc: DynamicSamplingContext) => {\n      const replayId = replay.getSessionId();\n      // We do not want to set the DSC when in buffer mode, as that means the replay has not been sent (yet)\n      if (replayId && replay.isEnabled() && replay.recordingMode === 'session') {\n        // Ensure to check that the session is still active - it could have expired in the meanwhile\n        const isSessionActive = replay.checkAndHandleExpiredSession();\n        if (isSessionActive) {\n          dsc.replay_id = replayId;\n        }\n      }\n    });\n\n    client.on('startTransaction', transaction => {\n      replay.lastTransaction = transaction;\n    });\n\n    // We may be missing the initial startTransaction due to timing issues,\n    // so we capture it on finish again.\n    client.on('finishTransaction', transaction => {\n      replay.lastTransaction = transaction;\n    });\n  }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction hasHooks(client: Client | undefined): client is BaseClient<any> {\n  return !!(client && client.on);\n}\n","import { WINDOW } from '../constants';\nimport type { AddEventResult, MemoryData, ReplayContainer, ReplayPerformanceEntry } from '../types';\nimport { createPerformanceSpans } from './createPerformanceSpans';\n\ntype ReplayMemoryEntry = ReplayPerformanceEntry<MemoryData> & { data: { memory: MemoryInfo } };\n\ninterface MemoryInfo {\n  jsHeapSizeLimit: number;\n  totalJSHeapSize: number;\n  usedJSHeapSize: number;\n}\n\n/**\n * Create a \"span\" for the total amount of memory being used by JS objects\n * (including v8 internal objects).\n */\nexport async function addMemoryEntry(replay: ReplayContainer): Promise<Array<AddEventResult | null>> {\n  // window.performance.memory is a non-standard API and doesn't work on all browsers, so we try-catch this\n  try {\n    return Promise.all(\n      createPerformanceSpans(replay, [\n        // @ts-expect-error memory doesn't exist on type Performance as the API is non-standard (we check that it exists above)\n        createMemoryEntry(WINDOW.performance.memory),\n      ]),\n    );\n  } catch (error) {\n    // Do nothing\n    return [];\n  }\n}\n\nfunction createMemoryEntry(memoryEntry: MemoryInfo): ReplayMemoryEntry {\n  const { jsHeapSizeLimit, totalJSHeapSize, usedJSHeapSize } = memoryEntry;\n  // we don't want to use `getAbsoluteTime` because it adds the event time to the\n  // time origin, so we get the current timestamp instead\n  const time = Date.now() / 1000;\n  return {\n    type: 'memory',\n    name: 'memory',\n    start: time,\n    end: time,\n    data: {\n      memory: {\n        jsHeapSizeLimit,\n        totalJSHeapSize,\n        usedJSHeapSize,\n      },\n    },\n  };\n}\n","import { EventType } from '@sentry-internal/rrweb';\nimport { logger } from '@sentry/utils';\n\nimport { saveSession } from '../session/saveSession';\nimport type { RecordingEvent, ReplayContainer, ReplayOptionFrameEvent } from '../types';\nimport { addEventSync } from './addEvent';\nimport { logInfo } from './log';\n\ntype RecordingEmitCallback = (event: RecordingEvent, isCheckout?: boolean) => void;\n\n/**\n * Handler for recording events.\n *\n * Adds to event buffer, and has varying flushing behaviors if the event was a checkout.\n */\nexport function getHandleRecordingEmit(replay: ReplayContainer): RecordingEmitCallback {\n  let hadFirstEvent = false;\n\n  return (event: RecordingEvent, _isCheckout?: boolean) => {\n    // If this is false, it means session is expired, create and a new session and wait for checkout\n    if (!replay.checkAndHandleExpiredSession()) {\n      __DEBUG_BUILD__ && logger.warn('[Replay] Received replay event after session expired.');\n\n      return;\n    }\n\n    // `_isCheckout` is only set when the checkout is due to `checkoutEveryNms`\n    // We also want to treat the first event as a checkout, so we handle this specifically here\n    const isCheckout = _isCheckout || !hadFirstEvent;\n    hadFirstEvent = true;\n\n    // The handler returns `true` if we do not want to trigger debounced flush, `false` if we want to debounce flush.\n    replay.addUpdate(() => {\n      // The session is always started immediately on pageload/init, but for\n      // error-only replays, it should reflect the most recent checkout\n      // when an error occurs. Clear any state that happens before this current\n      // checkout. This needs to happen before `addEvent()` which updates state\n      // dependent on this reset.\n      if (replay.recordingMode === 'buffer' && isCheckout) {\n        replay.setInitialState();\n      }\n\n      // If the event is not added (e.g. due to being paused, disabled, or out of the max replay duration),\n      // Skip all further steps\n      if (!addEventSync(replay, event, isCheckout)) {\n        // Return true to skip scheduling a debounced flush\n        return true;\n      }\n\n      // Different behavior for full snapshots (type=2), ignore other event types\n      // See https://github.com/rrweb-io/rrweb/blob/d8f9290ca496712aa1e7d472549480c4e7876594/packages/rrweb/src/types.ts#L16\n      if (!isCheckout) {\n        return false;\n      }\n\n      // Additionally, create a meta event that will capture certain SDK settings.\n      // In order to handle buffer mode, this needs to either be done when we\n      // receive checkout events or at flush time.\n      //\n      // `isCheckout` is always true, but want to be explicit that it should\n      // only be added for checkouts\n      addSettingsEvent(replay, isCheckout);\n\n      // If there is a previousSessionId after a full snapshot occurs, then\n      // the replay session was started due to session expiration. The new session\n      // is started before triggering a new checkout and contains the id\n      // of the previous session. Do not immediately flush in this case\n      // to avoid capturing only the checkout and instead the replay will\n      // be captured if they perform any follow-up actions.\n      if (replay.session && replay.session.previousSessionId) {\n        return true;\n      }\n\n      // When in buffer mode, make sure we adjust the session started date to the current earliest event of the buffer\n      // this should usually be the timestamp of the checkout event, but to be safe...\n      if (replay.recordingMode === 'buffer' && replay.session && replay.eventBuffer) {\n        const earliestEvent = replay.eventBuffer.getEarliestTimestamp();\n        if (earliestEvent) {\n          logInfo(\n            `[Replay] Updating session start time to earliest event in buffer to ${new Date(earliestEvent)}`,\n            replay.getOptions()._experiments.traceInternals,\n          );\n\n          replay.session.started = earliestEvent;\n\n          if (replay.getOptions().stickySession) {\n            saveSession(replay.session);\n          }\n        }\n      }\n\n      if (replay.recordingMode === 'session') {\n        // If the full snapshot is due to an initial load, we will not have\n        // a previous session ID. In this case, we want to buffer events\n        // for a set amount of time before flushing. This can help avoid\n        // capturing replays of users that immediately close the window.\n        void replay.flush();\n      }\n\n      return true;\n    });\n  };\n}\n\n/**\n * Exported for tests\n */\nexport function createOptionsEvent(replay: ReplayContainer): ReplayOptionFrameEvent {\n  const options = replay.getOptions();\n  return {\n    type: EventType.Custom,\n    timestamp: Date.now(),\n    data: {\n      tag: 'options',\n      payload: {\n        sessionSampleRate: options.sessionSampleRate,\n        errorSampleRate: options.errorSampleRate,\n        useCompressionOption: options.useCompression,\n        blockAllMedia: options.blockAllMedia,\n        maskAllText: options.maskAllText,\n        maskAllInputs: options.maskAllInputs,\n        useCompression: replay.eventBuffer ? replay.eventBuffer.type === 'worker' : false,\n        networkDetailHasUrls: options.networkDetailAllowUrls.length > 0,\n        networkCaptureBodies: options.networkCaptureBodies,\n        networkRequestHasHeaders: options.networkRequestHeaders.length > 0,\n        networkResponseHasHeaders: options.networkResponseHeaders.length > 0,\n      },\n    },\n  };\n}\n\n/**\n * Add a \"meta\" event that contains a simplified view on current configuration\n * options. This should only be included on the first segment of a recording.\n */\nfunction addSettingsEvent(replay: ReplayContainer, isCheckout?: boolean): void {\n  // Only need to add this event when sending the first segment\n  if (!isCheckout || !replay.session || replay.session.segmentId !== 0) {\n    return;\n  }\n\n  addEventSync(replay, createOptionsEvent(replay), false);\n}\n","import type { DsnComponents, ReplayEnvelope, ReplayEvent, ReplayRecordingData } from '@sentry/types';\nimport { createEnvelope, createEventEnvelopeHeaders, getSdkMetadataForEnvelopeHeader } from '@sentry/utils';\n\n/**\n * Create a replay envelope ready to be sent.\n * This includes both the replay event, as well as the recording data.\n */\nexport function createReplayEnvelope(\n  replayEvent: ReplayEvent,\n  recordingData: ReplayRecordingData,\n  dsn: DsnComponents,\n  tunnel?: string,\n): ReplayEnvelope {\n  return createEnvelope<ReplayEnvelope>(\n    createEventEnvelopeHeaders(replayEvent, getSdkMetadataForEnvelopeHeader(replayEvent), tunnel, dsn),\n    [\n      [{ type: 'replay_event' }, replayEvent],\n      [\n        {\n          type: 'replay_recording',\n          // If string then we need to encode to UTF8, otherwise will have\n          // wrong size. TextEncoder has similar browser support to\n          // MutationObserver, although it does not accept IE11.\n          length:\n            typeof recordingData === 'string' ? new TextEncoder().encode(recordingData).length : recordingData.length,\n        },\n        recordingData,\n      ],\n    ],\n  );\n}\n","import type { ReplayRecordingData } from '@sentry/types';\n\n/**\n * Prepare the recording data ready to be sent.\n */\nexport function prepareRecordingData({\n  recordingData,\n  headers,\n}: {\n  recordingData: ReplayRecordingData;\n  headers: Record<string, unknown>;\n}): ReplayRecordingData {\n  let payloadWithSequence;\n\n  // XXX: newline is needed to separate sequence id from events\n  const replayHeaders = `${JSON.stringify(headers)}\n`;\n\n  if (typeof recordingData === 'string') {\n    payloadWithSequence = `${replayHeaders}${recordingData}`;\n  } else {\n    const enc = new TextEncoder();\n    // XXX: newline is needed to separate sequence id from events\n    const sequence = enc.encode(replayHeaders);\n    // Merge the two Uint8Arrays\n    payloadWithSequence = new Uint8Array(sequence.length + recordingData.length);\n    payloadWithSequence.set(sequence);\n    payloadWithSequence.set(recordingData, sequence.length);\n  }\n\n  return payloadWithSequence;\n}\n","import type { Scope } from '@sentry/core';\nimport { prepareEvent } from '@sentry/core';\nimport type { IntegrationIndex } from '@sentry/core/build/types/integration';\nimport type { Client, EventHint, ReplayEvent } from '@sentry/types';\n\n/**\n * Prepare a replay event & enrich it with the SDK metadata.\n */\nexport async function prepareReplayEvent({\n  client,\n  scope,\n  replayId: event_id,\n  event,\n}: {\n  client: Client & { _integrations?: IntegrationIndex };\n  scope: Scope;\n  replayId: string;\n  event: ReplayEvent;\n}): Promise<ReplayEvent | null> {\n  const integrations =\n    typeof client._integrations === 'object' && client._integrations !== null && !Array.isArray(client._integrations)\n      ? Object.keys(client._integrations)\n      : undefined;\n\n  const eventHint: EventHint = { event_id, integrations };\n\n  if (client.emit) {\n    client.emit('preprocessEvent', event, eventHint);\n  }\n\n  const preparedEvent = (await prepareEvent(\n    client.getOptions(),\n    event,\n    eventHint,\n    scope,\n    client,\n  )) as ReplayEvent | null;\n\n  // If e.g. a global event processor returned null\n  if (!preparedEvent) {\n    return null;\n  }\n\n  // This normally happens in browser client \"_prepareEvent\"\n  // but since we do not use this private method from the client, but rather the plain import\n  // we need to do this manually.\n  preparedEvent.platform = preparedEvent.platform || 'javascript';\n\n  // extract the SDK name because `client._prepareEvent` doesn't add it to the event\n  const metadata = client.getSdkMetadata && client.getSdkMetadata();\n  const { name, version } = (metadata && metadata.sdk) || {};\n\n  preparedEvent.sdk = {\n    ...preparedEvent.sdk,\n    name: name || 'sentry.javascript.unknown',\n    version: version || '0.0.0',\n  };\n\n  return preparedEvent;\n}\n","import { getCurrentHub } from '@sentry/core';\nimport type { ReplayEvent, TransportMakeRequestResponse } from '@sentry/types';\n\nimport { REPLAY_EVENT_NAME, UNABLE_TO_SEND_REPLAY } from '../constants';\nimport type { SendReplayData } from '../types';\nimport { createReplayEnvelope } from './createReplayEnvelope';\nimport { logInfo } from './log';\nimport { prepareRecordingData } from './prepareRecordingData';\nimport { prepareReplayEvent } from './prepareReplayEvent';\n\n/**\n * Send replay attachment using `fetch()`\n */\nexport async function sendReplayRequest({\n  recordingData,\n  replayId,\n  segmentId: segment_id,\n  eventContext,\n  timestamp,\n  session,\n}: SendReplayData): Promise<void | TransportMakeRequestResponse> {\n  const preparedRecordingData = prepareRecordingData({\n    recordingData,\n    headers: {\n      segment_id,\n    },\n  });\n\n  const { urls, errorIds, traceIds, initialTimestamp } = eventContext;\n\n  const hub = getCurrentHub();\n  const client = hub.getClient();\n  const scope = hub.getScope();\n  const transport = client && client.getTransport();\n  const dsn = client && client.getDsn();\n\n  if (!client || !transport || !dsn || !session.sampled) {\n    return;\n  }\n\n  const baseEvent: ReplayEvent = {\n    type: REPLAY_EVENT_NAME,\n    replay_start_timestamp: initialTimestamp / 1000,\n    timestamp: timestamp / 1000,\n    error_ids: errorIds,\n    trace_ids: traceIds,\n    urls,\n    replay_id: replayId,\n    segment_id,\n    replay_type: session.sampled,\n  };\n\n  const replayEvent = await prepareReplayEvent({ scope, client, replayId, event: baseEvent });\n\n  if (!replayEvent) {\n    // Taken from baseclient's `_processEvent` method, where this is handled for errors/transactions\n    client.recordDroppedEvent('event_processor', 'replay', baseEvent);\n    logInfo('An event processor returned `null`, will not send event.');\n    return;\n  }\n\n  /*\n  For reference, the fully built event looks something like this:\n  {\n      \"type\": \"replay_event\",\n      \"timestamp\": 1670837008.634,\n      \"error_ids\": [\n          \"errorId\"\n      ],\n      \"trace_ids\": [\n          \"traceId\"\n      ],\n      \"urls\": [\n          \"https://example.com\"\n      ],\n      \"replay_id\": \"eventId\",\n      \"segment_id\": 3,\n      \"replay_type\": \"error\",\n      \"platform\": \"javascript\",\n      \"event_id\": \"eventId\",\n      \"environment\": \"production\",\n      \"sdk\": {\n          \"integrations\": [\n              \"BrowserTracing\",\n              \"Replay\"\n          ],\n          \"name\": \"sentry.javascript.browser\",\n          \"version\": \"7.25.0\"\n      },\n      \"sdkProcessingMetadata\": {},\n      \"contexts\": {\n      },\n  }\n  */\n\n  // Prevent this data (which, if it exists, was used in earlier steps in the processing pipeline) from being sent to\n  // sentry. (Note: Our use of this property comes and goes with whatever we might be debugging, whatever hacks we may\n  // have temporarily added, etc. Even if we don't happen to be using it at some point in the future, let's not get rid\n  // of this `delete`, lest we miss putting it back in the next time the property is in use.)\n  delete replayEvent.sdkProcessingMetadata;\n\n  const envelope = createReplayEnvelope(replayEvent, preparedRecordingData, dsn, client.getOptions().tunnel);\n\n  let response: void | TransportMakeRequestResponse;\n\n  try {\n    response = await transport.send(envelope);\n  } catch (err) {\n    const error = new Error(UNABLE_TO_SEND_REPLAY);\n\n    try {\n      // In case browsers don't allow this property to be writable\n      // @ts-expect-error This needs lib es2022 and newer\n      error.cause = err;\n    } catch {\n      // nothing to do\n    }\n    throw error;\n  }\n\n  // TODO (v8): we can remove this guard once transport.send's type signature doesn't include void anymore\n  if (!response) {\n    return response;\n  }\n\n  // If the status code is invalid, we want to immediately stop & not retry\n  if (typeof response.statusCode === 'number' && (response.statusCode < 200 || response.statusCode >= 300)) {\n    throw new TransportStatusCodeError(response.statusCode);\n  }\n\n  return response;\n}\n\n/**\n * This error indicates that the transport returned an invalid status code.\n */\nexport class TransportStatusCodeError extends Error {\n  public constructor(statusCode: number) {\n    super(`Transport returned status code ${statusCode}`);\n  }\n}\n","import { captureException, setContext } from '@sentry/core';\n\nimport { RETRY_BASE_INTERVAL, RETRY_MAX_COUNT, UNABLE_TO_SEND_REPLAY } from '../constants';\nimport type { SendReplayData } from '../types';\nimport { sendReplayRequest, TransportStatusCodeError } from './sendReplayRequest';\n\n/**\n * Finalize and send the current replay event to Sentry\n */\nexport async function sendReplay(\n  replayData: SendReplayData,\n  retryConfig = {\n    count: 0,\n    interval: RETRY_BASE_INTERVAL,\n  },\n): Promise<unknown> {\n  const { recordingData, options } = replayData;\n\n  // short circuit if there's no events to upload (this shouldn't happen as _runFlush makes this check)\n  if (!recordingData.length) {\n    return;\n  }\n\n  try {\n    await sendReplayRequest(replayData);\n    return true;\n  } catch (err) {\n    if (err instanceof TransportStatusCodeError) {\n      throw err;\n    }\n\n    // Capture error for every failed replay\n    setContext('Replays', {\n      _retryCount: retryConfig.count,\n    });\n\n    if (__DEBUG_BUILD__ && options._experiments && options._experiments.captureExceptions) {\n      captureException(err);\n    }\n\n    // If an error happened here, it's likely that uploading the attachment\n    // failed, we'll can retry with the same events payload\n    if (retryConfig.count >= RETRY_MAX_COUNT) {\n      const error = new Error(`${UNABLE_TO_SEND_REPLAY} - max retries exceeded`);\n\n      try {\n        // In case browsers don't allow this property to be writable\n        // @ts-expect-error This needs lib es2022 and newer\n        error.cause = err;\n      } catch {\n        // nothing to do\n      }\n\n      throw error;\n    }\n\n    // will retry in intervals of 5, 10, 30\n    retryConfig.interval *= ++retryConfig.count;\n\n    return new Promise((resolve, reject) => {\n      setTimeout(async () => {\n        try {\n          await sendReplay(replayData, retryConfig);\n          resolve(true);\n        } catch (err) {\n          reject(err);\n        }\n      }, retryConfig.interval);\n    });\n  }\n}\n","export const THROTTLED = '__THROTTLED';\nexport const SKIPPED = '__SKIPPED';\n\n/**\n * Create a throttled function off a given function.\n * When calling the throttled function, it will call the original function only\n * if it hasn't been called more than `maxCount` times in the last `durationSeconds`.\n *\n * Returns `THROTTLED` if throttled for the first time, after that `SKIPPED`,\n * or else the return value of the original function.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function throttle<T extends (...rest: any[]) => any>(\n  fn: T,\n  maxCount: number,\n  durationSeconds: number,\n): (...rest: Parameters<T>) => ReturnType<T> | typeof THROTTLED | typeof SKIPPED {\n  const counter = new Map<number, number>();\n\n  const _cleanup = (now: number): void => {\n    const threshold = now - durationSeconds;\n    counter.forEach((_value, key) => {\n      if (key < threshold) {\n        counter.delete(key);\n      }\n    });\n  };\n\n  const _getTotalCount = (): number => {\n    return [...counter.values()].reduce((a, b) => a + b, 0);\n  };\n\n  let isThrottled = false;\n\n  return (...rest: Parameters<T>): ReturnType<T> | typeof THROTTLED | typeof SKIPPED => {\n    // Date in second-precision, which we use as basis for the throttling\n    const now = Math.floor(Date.now() / 1000);\n\n    // First, make sure to delete any old entries\n    _cleanup(now);\n\n    // If already over limit, do nothing\n    if (_getTotalCount() >= maxCount) {\n      const wasThrottled = isThrottled;\n      isThrottled = true;\n      return wasThrottled ? SKIPPED : THROTTLED;\n    }\n\n    isThrottled = false;\n    const count = counter.get(now) || 0;\n    counter.set(now, count + 1);\n\n    return fn(...rest);\n  };\n}\n","/* eslint-disable max-lines */ // TODO: We might want to split this file up\nimport { EventType, record } from '@sentry-internal/rrweb';\nimport { captureException, getCurrentHub } from '@sentry/core';\nimport type { ReplayRecordingMode, Transaction } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport {\n  BUFFER_CHECKOUT_TIME,\n  SESSION_IDLE_EXPIRE_DURATION,\n  SESSION_IDLE_PAUSE_DURATION,\n  SLOW_CLICK_SCROLL_TIMEOUT,\n  SLOW_CLICK_THRESHOLD,\n  WINDOW,\n} from './constants';\nimport { ClickDetector } from './coreHandlers/handleClick';\nimport { handleKeyboardEvent } from './coreHandlers/handleKeyboardEvent';\nimport { setupPerformanceObserver } from './coreHandlers/performanceObserver';\nimport { createEventBuffer } from './eventBuffer';\nimport { clearSession } from './session/clearSession';\nimport { loadOrCreateSession } from './session/loadOrCreateSession';\nimport { saveSession } from './session/saveSession';\nimport { shouldRefreshSession } from './session/shouldRefreshSession';\nimport type {\n  AddEventResult,\n  AddUpdateCallback,\n  AllPerformanceEntry,\n  AllPerformanceEntryData,\n  EventBuffer,\n  InternalEventContext,\n  PopEventContext,\n  RecordingEvent,\n  RecordingOptions,\n  ReplayBreadcrumbFrame,\n  ReplayContainer as ReplayContainerInterface,\n  ReplayPerformanceEntry,\n  ReplayPluginOptions,\n  SendBufferedReplayOptions,\n  Session,\n  SlowClickConfig,\n  Timeouts,\n} from './types';\nimport { ReplayEventTypeCustom } from './types';\nimport { addEvent, addEventSync } from './util/addEvent';\nimport { addGlobalListeners } from './util/addGlobalListeners';\nimport { addMemoryEntry } from './util/addMemoryEntry';\nimport { createBreadcrumb } from './util/createBreadcrumb';\nimport { createPerformanceEntries } from './util/createPerformanceEntries';\nimport { createPerformanceSpans } from './util/createPerformanceSpans';\nimport { debounce } from './util/debounce';\nimport { getHandleRecordingEmit } from './util/handleRecordingEmit';\nimport { isExpired } from './util/isExpired';\nimport { isSessionExpired } from './util/isSessionExpired';\nimport { logInfo, logInfoNextTick } from './util/log';\nimport { sendReplay } from './util/sendReplay';\nimport type { SKIPPED } from './util/throttle';\nimport { throttle, THROTTLED } from './util/throttle';\n\n/**\n * The main replay container class, which holds all the state and methods for recording and sending replays.\n */\nexport class ReplayContainer implements ReplayContainerInterface {\n  public eventBuffer: EventBuffer | null;\n\n  public performanceEntries: AllPerformanceEntry[];\n\n  public replayPerformanceEntries: ReplayPerformanceEntry<AllPerformanceEntryData>[];\n\n  public session: Session | undefined;\n\n  public clickDetector: ClickDetector | undefined;\n\n  /**\n   * Recording can happen in one of three modes:\n   *   - session: Record the whole session, sending it continuously\n   *   - buffer: Always keep the last 60s of recording, requires:\n   *     - having replaysOnErrorSampleRate > 0 to capture replay when an error occurs\n   *     - or calling `flush()` to send the replay\n   */\n  public recordingMode: ReplayRecordingMode;\n\n  /**\n   * The current or last active transcation.\n   * This is only available when performance is enabled.\n   */\n  public lastTransaction?: Transaction;\n\n  /**\n   * These are here so we can overwrite them in tests etc.\n   * @hidden\n   */\n  public readonly timeouts: Timeouts;\n\n  private _throttledAddEvent: (\n    event: RecordingEvent,\n    isCheckout?: boolean,\n  ) => typeof THROTTLED | typeof SKIPPED | Promise<AddEventResult | null>;\n\n  /**\n   * Options to pass to `rrweb.record()`\n   */\n  private readonly _recordingOptions: RecordingOptions;\n\n  private readonly _options: ReplayPluginOptions;\n\n  private _performanceCleanupCallback?: () => void;\n\n  private _debouncedFlush: ReturnType<typeof debounce>;\n  private _flushLock: Promise<unknown> | undefined;\n\n  /**\n   * Timestamp of the last user activity. This lives across sessions.\n   */\n  private _lastActivity: number;\n\n  /**\n   * Is the integration currently active?\n   */\n  private _isEnabled: boolean;\n\n  /**\n   * Paused is a state where:\n   * - DOM Recording is not listening at all\n   * - Nothing will be added to event buffer (e.g. core SDK events)\n   */\n  private _isPaused: boolean;\n\n  /**\n   * Have we attached listeners to the core SDK?\n   * Note we have to track this as there is no way to remove instrumentation handlers.\n   */\n  private _hasInitializedCoreListeners: boolean;\n\n  /**\n   * Function to stop recording\n   */\n  private _stopRecording: ReturnType<typeof record> | undefined;\n\n  private _context: InternalEventContext;\n\n  public constructor({\n    options,\n    recordingOptions,\n  }: {\n    options: ReplayPluginOptions;\n    recordingOptions: RecordingOptions;\n  }) {\n    this.eventBuffer = null;\n    this.performanceEntries = [];\n    this.replayPerformanceEntries = [];\n    this.recordingMode = 'session';\n    this.timeouts = {\n      sessionIdlePause: SESSION_IDLE_PAUSE_DURATION,\n      sessionIdleExpire: SESSION_IDLE_EXPIRE_DURATION,\n    } as const;\n    this._lastActivity = Date.now();\n    this._isEnabled = false;\n    this._isPaused = false;\n    this._hasInitializedCoreListeners = false;\n    this._context = {\n      errorIds: new Set(),\n      traceIds: new Set(),\n      urls: [],\n      initialTimestamp: Date.now(),\n      initialUrl: '',\n    };\n\n    this._recordingOptions = recordingOptions;\n    this._options = options;\n\n    this._debouncedFlush = debounce(() => this._flush(), this._options.flushMinDelay, {\n      maxWait: this._options.flushMaxDelay,\n    });\n\n    this._throttledAddEvent = throttle(\n      (event: RecordingEvent, isCheckout?: boolean) => addEvent(this, event, isCheckout),\n      // Max 300 events...\n      300,\n      // ... per 5s\n      5,\n    );\n\n    const { slowClickTimeout, slowClickIgnoreSelectors } = this.getOptions();\n\n    const slowClickConfig: SlowClickConfig | undefined = slowClickTimeout\n      ? {\n          threshold: Math.min(SLOW_CLICK_THRESHOLD, slowClickTimeout),\n          timeout: slowClickTimeout,\n          scrollTimeout: SLOW_CLICK_SCROLL_TIMEOUT,\n          ignoreSelector: slowClickIgnoreSelectors ? slowClickIgnoreSelectors.join(',') : '',\n        }\n      : undefined;\n\n    if (slowClickConfig) {\n      this.clickDetector = new ClickDetector(this, slowClickConfig);\n    }\n  }\n\n  /** Get the event context. */\n  public getContext(): InternalEventContext {\n    return this._context;\n  }\n\n  /** If recording is currently enabled. */\n  public isEnabled(): boolean {\n    return this._isEnabled;\n  }\n\n  /** If recording is currently paused. */\n  public isPaused(): boolean {\n    return this._isPaused;\n  }\n\n  /** Get the replay integration options. */\n  public getOptions(): ReplayPluginOptions {\n    return this._options;\n  }\n\n  /**\n   * Initializes the plugin based on sampling configuration. Should not be\n   * called outside of constructor.\n   */\n  public initializeSampling(previousSessionId?: string): void {\n    const { errorSampleRate, sessionSampleRate } = this._options;\n\n    // If neither sample rate is > 0, then do nothing - user will need to call one of\n    // `start()` or `startBuffering` themselves.\n    if (errorSampleRate <= 0 && sessionSampleRate <= 0) {\n      return;\n    }\n\n    // Otherwise if there is _any_ sample rate set, try to load an existing\n    // session, or create a new one.\n    this._initializeSessionForSampling(previousSessionId);\n\n    if (!this.session) {\n      // This should not happen, something wrong has occurred\n      this._handleException(new Error('Unable to initialize and create session'));\n      return;\n    }\n\n    if (this.session.sampled === false) {\n      // This should only occur if `errorSampleRate` is 0 and was unsampled for\n      // session-based replay. In this case there is nothing to do.\n      return;\n    }\n\n    // If segmentId > 0, it means we've previously already captured this session\n    // In this case, we still want to continue in `session` recording mode\n    this.recordingMode = this.session.sampled === 'buffer' && this.session.segmentId === 0 ? 'buffer' : 'session';\n\n    logInfoNextTick(\n      `[Replay] Starting replay in ${this.recordingMode} mode`,\n      this._options._experiments.traceInternals,\n    );\n\n    this._initializeRecording();\n  }\n\n  /**\n   * Start a replay regardless of sampling rate. Calling this will always\n   * create a new session. Will throw an error if replay is already in progress.\n   *\n   * Creates or loads a session, attaches listeners to varying events (DOM,\n   * _performanceObserver, Recording, Sentry SDK, etc)\n   */\n  public start(): void {\n    if (this._isEnabled && this.recordingMode === 'session') {\n      throw new Error('Replay recording is already in progress');\n    }\n\n    if (this._isEnabled && this.recordingMode === 'buffer') {\n      throw new Error('Replay buffering is in progress, call `flush()` to save the replay');\n    }\n\n    logInfoNextTick('[Replay] Starting replay in session mode', this._options._experiments.traceInternals);\n\n    const session = loadOrCreateSession(\n      {\n        maxReplayDuration: this._options.maxReplayDuration,\n        sessionIdleExpire: this.timeouts.sessionIdleExpire,\n        traceInternals: this._options._experiments.traceInternals,\n      },\n      {\n        stickySession: this._options.stickySession,\n        // This is intentional: create a new session-based replay when calling `start()`\n        sessionSampleRate: 1,\n        allowBuffering: false,\n      },\n    );\n\n    this.session = session;\n\n    this._initializeRecording();\n  }\n\n  /**\n   * Start replay buffering. Buffers until `flush()` is called or, if\n   * `replaysOnErrorSampleRate` > 0, an error occurs.\n   */\n  public startBuffering(): void {\n    if (this._isEnabled) {\n      throw new Error('Replay recording is already in progress');\n    }\n\n    logInfoNextTick('[Replay] Starting replay in buffer mode', this._options._experiments.traceInternals);\n\n    const session = loadOrCreateSession(\n      {\n        sessionIdleExpire: this.timeouts.sessionIdleExpire,\n        maxReplayDuration: this._options.maxReplayDuration,\n        traceInternals: this._options._experiments.traceInternals,\n      },\n      {\n        stickySession: this._options.stickySession,\n        sessionSampleRate: 0,\n        allowBuffering: true,\n      },\n    );\n\n    this.session = session;\n\n    this.recordingMode = 'buffer';\n    this._initializeRecording();\n  }\n\n  /**\n   * Start recording.\n   *\n   * Note that this will cause a new DOM checkout\n   */\n  public startRecording(): void {\n    try {\n      this._stopRecording = record({\n        ...this._recordingOptions,\n        // When running in error sampling mode, we need to overwrite `checkoutEveryNms`\n        // Without this, it would record forever, until an error happens, which we don't want\n        // instead, we'll always keep the last 60 seconds of replay before an error happened\n        ...(this.recordingMode === 'buffer' && { checkoutEveryNms: BUFFER_CHECKOUT_TIME }),\n        emit: getHandleRecordingEmit(this),\n        onMutation: this._onMutationHandler,\n      });\n    } catch (err) {\n      this._handleException(err);\n    }\n  }\n\n  /**\n   * Stops the recording, if it was running.\n   *\n   * Returns true if it was previously stopped, or is now stopped,\n   * otherwise false.\n   */\n  public stopRecording(): boolean {\n    try {\n      if (this._stopRecording) {\n        this._stopRecording();\n        this._stopRecording = undefined;\n      }\n\n      return true;\n    } catch (err) {\n      this._handleException(err);\n      return false;\n    }\n  }\n\n  /**\n   * Currently, this needs to be manually called (e.g. for tests). Sentry SDK\n   * does not support a teardown\n   */\n  public async stop({ forceFlush = false, reason }: { forceFlush?: boolean; reason?: string } = {}): Promise<void> {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    // We can't move `_isEnabled` after awaiting a flush, otherwise we can\n    // enter into an infinite loop when `stop()` is called while flushing.\n    this._isEnabled = false;\n\n    try {\n      logInfo(\n        `[Replay] Stopping Replay${reason ? ` triggered by ${reason}` : ''}`,\n        this._options._experiments.traceInternals,\n      );\n\n      this._removeListeners();\n      this.stopRecording();\n\n      this._debouncedFlush.cancel();\n      // See comment above re: `_isEnabled`, we \"force\" a flush, ignoring the\n      // `_isEnabled` state of the plugin since it was disabled above.\n      if (forceFlush) {\n        await this._flush({ force: true });\n      }\n\n      // After flush, destroy event buffer\n      this.eventBuffer && this.eventBuffer.destroy();\n      this.eventBuffer = null;\n\n      // Clear session from session storage, note this means if a new session\n      // is started after, it will not have `previousSessionId`\n      clearSession(this);\n    } catch (err) {\n      this._handleException(err);\n    }\n  }\n\n  /**\n   * Pause some replay functionality. See comments for `_isPaused`.\n   * This differs from stop as this only stops DOM recording, it is\n   * not as thorough of a shutdown as `stop()`.\n   */\n  public pause(): void {\n    if (this._isPaused) {\n      return;\n    }\n\n    this._isPaused = true;\n    this.stopRecording();\n\n    logInfo('[Replay] Pausing replay', this._options._experiments.traceInternals);\n  }\n\n  /**\n   * Resumes recording, see notes for `pause().\n   *\n   * Note that calling `startRecording()` here will cause a\n   * new DOM checkout.`\n   */\n  public resume(): void {\n    if (!this._isPaused || !this._checkSession()) {\n      return;\n    }\n\n    this._isPaused = false;\n    this.startRecording();\n\n    logInfo('[Replay] Resuming replay', this._options._experiments.traceInternals);\n  }\n\n  /**\n   * If not in \"session\" recording mode, flush event buffer which will create a new replay.\n   * Unless `continueRecording` is false, the replay will continue to record and\n   * behave as a \"session\"-based replay.\n   *\n   * Otherwise, queue up a flush.\n   */\n  public async sendBufferedReplayOrFlush({ continueRecording = true }: SendBufferedReplayOptions = {}): Promise<void> {\n    if (this.recordingMode === 'session') {\n      return this.flushImmediate();\n    }\n\n    const activityTime = Date.now();\n\n    logInfo('[Replay] Converting buffer to session', this._options._experiments.traceInternals);\n\n    // Allow flush to complete before resuming as a session recording, otherwise\n    // the checkout from `startRecording` may be included in the payload.\n    // Prefer to keep the error replay as a separate (and smaller) segment\n    // than the session replay.\n    await this.flushImmediate();\n\n    const hasStoppedRecording = this.stopRecording();\n\n    if (!continueRecording || !hasStoppedRecording) {\n      return;\n    }\n\n    // To avoid race conditions where this is called multiple times, we check here again that we are still buffering\n    if ((this.recordingMode as ReplayRecordingMode) === 'session') {\n      return;\n    }\n\n    // Re-start recording in session-mode\n    this.recordingMode = 'session';\n\n    // Once this session ends, we do not want to refresh it\n    if (this.session) {\n      this._updateUserActivity(activityTime);\n      this._updateSessionActivity(activityTime);\n      this._maybeSaveSession();\n    }\n\n    this.startRecording();\n  }\n\n  /**\n   * We want to batch uploads of replay events. Save events only if\n   * `<flushMinDelay>` milliseconds have elapsed since the last event\n   * *OR* if `<flushMaxDelay>` milliseconds have elapsed.\n   *\n   * Accepts a callback to perform side-effects and returns true to stop batch\n   * processing and hand back control to caller.\n   */\n  public addUpdate(cb: AddUpdateCallback): void {\n    // We need to always run `cb` (e.g. in the case of `this.recordingMode == 'buffer'`)\n    const cbResult = cb();\n\n    // If this option is turned on then we will only want to call `flush`\n    // explicitly\n    if (this.recordingMode === 'buffer') {\n      return;\n    }\n\n    // If callback is true, we do not want to continue with flushing -- the\n    // caller will need to handle it.\n    if (cbResult === true) {\n      return;\n    }\n\n    // addUpdate is called quite frequently - use _debouncedFlush so that it\n    // respects the flush delays and does not flush immediately\n    this._debouncedFlush();\n  }\n\n  /**\n   * Updates the user activity timestamp and resumes recording. This should be\n   * called in an event handler for a user action that we consider as the user\n   * being \"active\" (e.g. a mouse click).\n   */\n  public triggerUserActivity(): void {\n    this._updateUserActivity();\n\n    // This case means that recording was once stopped due to inactivity.\n    // Ensure that recording is resumed.\n    if (!this._stopRecording) {\n      // Create a new session, otherwise when the user action is flushed, it\n      // will get rejected due to an expired session.\n      if (!this._checkSession()) {\n        return;\n      }\n\n      // Note: This will cause a new DOM checkout\n      this.resume();\n      return;\n    }\n\n    // Otherwise... recording was never suspended, continue as normalish\n    this.checkAndHandleExpiredSession();\n\n    this._updateSessionActivity();\n  }\n\n  /**\n   * Updates the user activity timestamp *without* resuming\n   * recording. Some user events (e.g. keydown) can be create\n   * low-value replays that only contain the keypress as a\n   * breadcrumb. Instead this would require other events to\n   * create a new replay after a session has expired.\n   */\n  public updateUserActivity(): void {\n    this._updateUserActivity();\n    this._updateSessionActivity();\n  }\n\n  /**\n   * Only flush if `this.recordingMode === 'session'`\n   */\n  public conditionalFlush(): Promise<void> {\n    if (this.recordingMode === 'buffer') {\n      return Promise.resolve();\n    }\n\n    return this.flushImmediate();\n  }\n\n  /**\n   * Flush using debounce flush\n   */\n  public flush(): Promise<void> {\n    return this._debouncedFlush() as Promise<void>;\n  }\n\n  /**\n   * Always flush via `_debouncedFlush` so that we do not have flushes triggered\n   * from calling both `flush` and `_debouncedFlush`. Otherwise, there could be\n   * cases of mulitple flushes happening closely together.\n   */\n  public flushImmediate(): Promise<void> {\n    this._debouncedFlush();\n    // `.flush` is provided by the debounced function, analogously to lodash.debounce\n    return this._debouncedFlush.flush() as Promise<void>;\n  }\n\n  /**\n   * Cancels queued up flushes.\n   */\n  public cancelFlush(): void {\n    this._debouncedFlush.cancel();\n  }\n\n  /** Get the current sesion (=replay) ID */\n  public getSessionId(): string | undefined {\n    return this.session && this.session.id;\n  }\n\n  /**\n   * Checks if recording should be stopped due to user inactivity. Otherwise\n   * check if session is expired and create a new session if so. Triggers a new\n   * full snapshot on new session.\n   *\n   * Returns true if session is not expired, false otherwise.\n   * @hidden\n   */\n  public checkAndHandleExpiredSession(): boolean | void {\n    // Prevent starting a new session if the last user activity is older than\n    // SESSION_IDLE_PAUSE_DURATION. Otherwise non-user activity can trigger a new\n    // session+recording. This creates noisy replays that do not have much\n    // content in them.\n    if (\n      this._lastActivity &&\n      isExpired(this._lastActivity, this.timeouts.sessionIdlePause) &&\n      this.session &&\n      this.session.sampled === 'session'\n    ) {\n      // Pause recording only for session-based replays. Otherwise, resuming\n      // will create a new replay and will conflict with users who only choose\n      // to record error-based replays only. (e.g. the resumed replay will not\n      // contain a reference to an error)\n      this.pause();\n      return;\n    }\n\n    // --- There is recent user activity --- //\n    // This will create a new session if expired, based on expiry length\n    if (!this._checkSession()) {\n      // Check session handles the refreshing itself\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Capture some initial state that can change throughout the lifespan of the\n   * replay. This is required because otherwise they would be captured at the\n   * first flush.\n   */\n  public setInitialState(): void {\n    const urlPath = `${WINDOW.location.pathname}${WINDOW.location.hash}${WINDOW.location.search}`;\n    const url = `${WINDOW.location.origin}${urlPath}`;\n\n    this.performanceEntries = [];\n    this.replayPerformanceEntries = [];\n\n    // Reset _context as well\n    this._clearContext();\n\n    this._context.initialUrl = url;\n    this._context.initialTimestamp = Date.now();\n    this._context.urls.push(url);\n  }\n\n  /**\n   * Add a breadcrumb event, that may be throttled.\n   * If it was throttled, we add a custom breadcrumb to indicate that.\n   */\n  public throttledAddEvent(\n    event: RecordingEvent,\n    isCheckout?: boolean,\n  ): typeof THROTTLED | typeof SKIPPED | Promise<AddEventResult | null> {\n    const res = this._throttledAddEvent(event, isCheckout);\n\n    // If this is THROTTLED, it means we have throttled the event for the first time\n    // In this case, we want to add a breadcrumb indicating that something was skipped\n    if (res === THROTTLED) {\n      const breadcrumb = createBreadcrumb({\n        category: 'replay.throttled',\n      });\n\n      this.addUpdate(() => {\n        // Return `false` if the event _was_ added, as that means we schedule a flush\n        return !addEventSync(this, {\n          type: ReplayEventTypeCustom,\n          timestamp: breadcrumb.timestamp || 0,\n          data: {\n            tag: 'breadcrumb',\n            payload: breadcrumb,\n            metric: true,\n          },\n        });\n      });\n    }\n\n    return res;\n  }\n\n  /**\n   * This will get the parametrized route name of the current page.\n   * This is only available if performance is enabled, and if an instrumented router is used.\n   */\n  public getCurrentRoute(): string | undefined {\n    const lastTransaction = this.lastTransaction || getCurrentHub().getScope().getTransaction();\n    if (!lastTransaction || !['route', 'custom'].includes(lastTransaction.metadata.source)) {\n      return undefined;\n    }\n\n    return lastTransaction.name;\n  }\n\n  /**\n   * Initialize and start all listeners to varying events (DOM,\n   * Performance Observer, Recording, Sentry SDK, etc)\n   */\n  private _initializeRecording(): void {\n    this.setInitialState();\n\n    // this method is generally called on page load or manually - in both cases\n    // we should treat it as an activity\n    this._updateSessionActivity();\n\n    this.eventBuffer = createEventBuffer({\n      useCompression: this._options.useCompression,\n      workerUrl: this._options.workerUrl,\n    });\n\n    this._removeListeners();\n    this._addListeners();\n\n    // Need to set as enabled before we start recording, as `record()` can trigger a flush with a new checkout\n    this._isEnabled = true;\n    this._isPaused = false;\n\n    this.startRecording();\n  }\n\n  /** A wrapper to conditionally capture exceptions. */\n  private _handleException(error: unknown): void {\n    __DEBUG_BUILD__ && logger.error('[Replay]', error);\n\n    if (__DEBUG_BUILD__ && this._options._experiments && this._options._experiments.captureExceptions) {\n      captureException(error);\n    }\n  }\n\n  /**\n   * Loads (or refreshes) the current session.\n   */\n  private _initializeSessionForSampling(previousSessionId?: string): void {\n    // Whenever there is _any_ error sample rate, we always allow buffering\n    // Because we decide on sampling when an error occurs, we need to buffer at all times if sampling for errors\n    const allowBuffering = this._options.errorSampleRate > 0;\n\n    const session = loadOrCreateSession(\n      {\n        sessionIdleExpire: this.timeouts.sessionIdleExpire,\n        maxReplayDuration: this._options.maxReplayDuration,\n        traceInternals: this._options._experiments.traceInternals,\n        previousSessionId,\n      },\n      {\n        stickySession: this._options.stickySession,\n        sessionSampleRate: this._options.sessionSampleRate,\n        allowBuffering,\n      },\n    );\n\n    this.session = session;\n  }\n\n  /**\n   * Checks and potentially refreshes the current session.\n   * Returns false if session is not recorded.\n   */\n  private _checkSession(): boolean {\n    // If there is no session yet, we do not want to refresh anything\n    // This should generally not happen, but to be safe....\n    if (!this.session) {\n      return false;\n    }\n\n    const currentSession = this.session;\n\n    if (\n      shouldRefreshSession(currentSession, {\n        sessionIdleExpire: this.timeouts.sessionIdleExpire,\n        maxReplayDuration: this._options.maxReplayDuration,\n      })\n    ) {\n      void this._refreshSession(currentSession);\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Refresh a session with a new one.\n   * This stops the current session (without forcing a flush, as that would never work since we are expired),\n   * and then does a new sampling based on the refreshed session.\n   */\n  private async _refreshSession(session: Session): Promise<void> {\n    if (!this._isEnabled) {\n      return;\n    }\n    await this.stop({ reason: 'refresh session' });\n    this.initializeSampling(session.id);\n  }\n\n  /**\n   * Adds listeners to record events for the replay\n   */\n  private _addListeners(): void {\n    try {\n      WINDOW.document.addEventListener('visibilitychange', this._handleVisibilityChange);\n      WINDOW.addEventListener('blur', this._handleWindowBlur);\n      WINDOW.addEventListener('focus', this._handleWindowFocus);\n      WINDOW.addEventListener('keydown', this._handleKeyboardEvent);\n\n      if (this.clickDetector) {\n        this.clickDetector.addListeners();\n      }\n\n      // There is no way to remove these listeners, so ensure they are only added once\n      if (!this._hasInitializedCoreListeners) {\n        addGlobalListeners(this);\n\n        this._hasInitializedCoreListeners = true;\n      }\n    } catch (err) {\n      this._handleException(err);\n    }\n\n    this._performanceCleanupCallback = setupPerformanceObserver(this);\n  }\n\n  /**\n   * Cleans up listeners that were created in `_addListeners`\n   */\n  private _removeListeners(): void {\n    try {\n      WINDOW.document.removeEventListener('visibilitychange', this._handleVisibilityChange);\n\n      WINDOW.removeEventListener('blur', this._handleWindowBlur);\n      WINDOW.removeEventListener('focus', this._handleWindowFocus);\n      WINDOW.removeEventListener('keydown', this._handleKeyboardEvent);\n\n      if (this.clickDetector) {\n        this.clickDetector.removeListeners();\n      }\n\n      if (this._performanceCleanupCallback) {\n        this._performanceCleanupCallback();\n      }\n    } catch (err) {\n      this._handleException(err);\n    }\n  }\n\n  /**\n   * Handle when visibility of the page content changes. Opening a new tab will\n   * cause the state to change to hidden because of content of current page will\n   * be hidden. Likewise, moving a different window to cover the contents of the\n   * page will also trigger a change to a hidden state.\n   */\n  private _handleVisibilityChange: () => void = () => {\n    if (WINDOW.document.visibilityState === 'visible') {\n      this._doChangeToForegroundTasks();\n    } else {\n      this._doChangeToBackgroundTasks();\n    }\n  };\n\n  /**\n   * Handle when page is blurred\n   */\n  private _handleWindowBlur: () => void = () => {\n    const breadcrumb = createBreadcrumb({\n      category: 'ui.blur',\n    });\n\n    // Do not count blur as a user action -- it's part of the process of them\n    // leaving the page\n    this._doChangeToBackgroundTasks(breadcrumb);\n  };\n\n  /**\n   * Handle when page is focused\n   */\n  private _handleWindowFocus: () => void = () => {\n    const breadcrumb = createBreadcrumb({\n      category: 'ui.focus',\n    });\n\n    // Do not count focus as a user action -- instead wait until they focus and\n    // interactive with page\n    this._doChangeToForegroundTasks(breadcrumb);\n  };\n\n  /** Ensure page remains active when a key is pressed. */\n  private _handleKeyboardEvent: (event: KeyboardEvent) => void = (event: KeyboardEvent) => {\n    handleKeyboardEvent(this, event);\n  };\n\n  /**\n   * Tasks to run when we consider a page to be hidden (via blurring and/or visibility)\n   */\n  private _doChangeToBackgroundTasks(breadcrumb?: ReplayBreadcrumbFrame): void {\n    if (!this.session) {\n      return;\n    }\n\n    const expired = isSessionExpired(this.session, {\n      maxReplayDuration: this._options.maxReplayDuration,\n      sessionIdleExpire: this.timeouts.sessionIdleExpire,\n    });\n\n    if (expired) {\n      return;\n    }\n\n    if (breadcrumb) {\n      this._createCustomBreadcrumb(breadcrumb);\n    }\n\n    // Send replay when the page/tab becomes hidden. There is no reason to send\n    // replay if it becomes visible, since no actions we care about were done\n    // while it was hidden\n    void this.conditionalFlush();\n  }\n\n  /**\n   * Tasks to run when we consider a page to be visible (via focus and/or visibility)\n   */\n  private _doChangeToForegroundTasks(breadcrumb?: ReplayBreadcrumbFrame): void {\n    if (!this.session) {\n      return;\n    }\n\n    const isSessionActive = this.checkAndHandleExpiredSession();\n\n    if (!isSessionActive) {\n      // If the user has come back to the page within SESSION_IDLE_PAUSE_DURATION\n      // ms, we will re-use the existing session, otherwise create a new\n      // session\n      logInfo('[Replay] Document has become active, but session has expired');\n      return;\n    }\n\n    if (breadcrumb) {\n      this._createCustomBreadcrumb(breadcrumb);\n    }\n  }\n\n  /**\n   * Update user activity (across session lifespans)\n   */\n  private _updateUserActivity(_lastActivity: number = Date.now()): void {\n    this._lastActivity = _lastActivity;\n  }\n\n  /**\n   * Updates the session's last activity timestamp\n   */\n  private _updateSessionActivity(_lastActivity: number = Date.now()): void {\n    if (this.session) {\n      this.session.lastActivity = _lastActivity;\n      this._maybeSaveSession();\n    }\n  }\n\n  /**\n   * Helper to create (and buffer) a replay breadcrumb from a core SDK breadcrumb\n   */\n  private _createCustomBreadcrumb(breadcrumb: ReplayBreadcrumbFrame): void {\n    this.addUpdate(() => {\n      void this.throttledAddEvent({\n        type: EventType.Custom,\n        timestamp: breadcrumb.timestamp || 0,\n        data: {\n          tag: 'breadcrumb',\n          payload: breadcrumb,\n        },\n      });\n    });\n  }\n\n  /**\n   * Observed performance events are added to `this.performanceEntries`. These\n   * are included in the replay event before it is finished and sent to Sentry.\n   */\n  private _addPerformanceEntries(): Promise<Array<AddEventResult | null>> {\n    const performanceEntries = createPerformanceEntries(this.performanceEntries).concat(this.replayPerformanceEntries);\n\n    this.performanceEntries = [];\n    this.replayPerformanceEntries = [];\n\n    return Promise.all(createPerformanceSpans(this, performanceEntries));\n  }\n\n  /**\n   * Clear _context\n   */\n  private _clearContext(): void {\n    // XXX: `initialTimestamp` and `initialUrl` do not get cleared\n    this._context.errorIds.clear();\n    this._context.traceIds.clear();\n    this._context.urls = [];\n  }\n\n  /** Update the initial timestamp based on the buffer content. */\n  private _updateInitialTimestampFromEventBuffer(): void {\n    const { session, eventBuffer } = this;\n    if (!session || !eventBuffer) {\n      return;\n    }\n\n    // we only ever update this on the initial segment\n    if (session.segmentId) {\n      return;\n    }\n\n    const earliestEvent = eventBuffer.getEarliestTimestamp();\n    if (earliestEvent && earliestEvent < this._context.initialTimestamp) {\n      this._context.initialTimestamp = earliestEvent;\n    }\n  }\n\n  /**\n   * Return and clear _context\n   */\n  private _popEventContext(): PopEventContext {\n    const _context = {\n      initialTimestamp: this._context.initialTimestamp,\n      initialUrl: this._context.initialUrl,\n      errorIds: Array.from(this._context.errorIds),\n      traceIds: Array.from(this._context.traceIds),\n      urls: this._context.urls,\n    };\n\n    this._clearContext();\n\n    return _context;\n  }\n\n  /**\n   * Flushes replay event buffer to Sentry.\n   *\n   * Performance events are only added right before flushing - this is\n   * due to the buffered performance observer events.\n   *\n   * Should never be called directly, only by `flush`\n   */\n  private async _runFlush(): Promise<void> {\n    const replayId = this.getSessionId();\n\n    if (!this.session || !this.eventBuffer || !replayId) {\n      __DEBUG_BUILD__ && logger.error('[Replay] No session or eventBuffer found to flush.');\n      return;\n    }\n\n    await this._addPerformanceEntries();\n\n    // Check eventBuffer again, as it could have been stopped in the meanwhile\n    if (!this.eventBuffer || !this.eventBuffer.hasEvents) {\n      return;\n    }\n\n    // Only attach memory event if eventBuffer is not empty\n    await addMemoryEntry(this);\n\n    // Check eventBuffer again, as it could have been stopped in the meanwhile\n    if (!this.eventBuffer) {\n      return;\n    }\n\n    // if this changed in the meanwhile, e.g. because the session was refreshed or similar, we abort here\n    if (replayId !== this.getSessionId()) {\n      return;\n    }\n\n    try {\n      // This uses the data from the eventBuffer, so we need to call this before `finish()\n      this._updateInitialTimestampFromEventBuffer();\n\n      const timestamp = Date.now();\n\n      // Check total duration again, to avoid sending outdated stuff\n      // We leave 30s wiggle room to accomodate late flushing etc.\n      // This _could_ happen when the browser is suspended during flushing, in which case we just want to stop\n      if (timestamp - this._context.initialTimestamp > this._options.maxReplayDuration + 30_000) {\n        throw new Error('Session is too long, not sending replay');\n      }\n\n      const eventContext = this._popEventContext();\n      // Always increment segmentId regardless of outcome of sending replay\n      const segmentId = this.session.segmentId++;\n      this._maybeSaveSession();\n\n      // Note this empties the event buffer regardless of outcome of sending replay\n      const recordingData = await this.eventBuffer.finish();\n\n      await sendReplay({\n        replayId,\n        recordingData,\n        segmentId,\n        eventContext,\n        session: this.session,\n        options: this.getOptions(),\n        timestamp,\n      });\n    } catch (err) {\n      this._handleException(err);\n\n      // This means we retried 3 times and all of them failed,\n      // or we ran into a problem we don't want to retry, like rate limiting.\n      // In this case, we want to completely stop the replay - otherwise, we may get inconsistent segments\n      void this.stop({ reason: 'sendReplay' });\n\n      const client = getCurrentHub().getClient();\n\n      if (client) {\n        client.recordDroppedEvent('send_error', 'replay');\n      }\n    }\n  }\n\n  /**\n   * Flush recording data to Sentry. Creates a lock so that only a single flush\n   * can be active at a time. Do not call this directly.\n   */\n  private _flush = async ({\n    force = false,\n  }: {\n    /**\n     * If true, flush while ignoring the `_isEnabled` state of\n     * Replay integration. (By default, flush is noop if integration\n     * is stopped).\n     */\n    force?: boolean;\n  } = {}): Promise<void> => {\n    if (!this._isEnabled && !force) {\n      // This can happen if e.g. the replay was stopped because of exceeding the retry limit\n      return;\n    }\n\n    if (!this.checkAndHandleExpiredSession()) {\n      __DEBUG_BUILD__ && logger.error('[Replay] Attempting to finish replay event after session expired.');\n      return;\n    }\n\n    if (!this.session) {\n      // should never happen, as we would have bailed out before\n      return;\n    }\n\n    const start = this.session.started;\n    const now = Date.now();\n    const duration = now - start;\n\n    // A flush is about to happen, cancel any queued flushes\n    this._debouncedFlush.cancel();\n\n    // If session is too short, or too long (allow some wiggle room over maxReplayDuration), do not send it\n    // This _should_ not happen, but it may happen if flush is triggered due to a page activity change or similar\n    const tooShort = duration < this._options.minReplayDuration;\n    const tooLong = duration > this._options.maxReplayDuration + 5_000;\n    if (tooShort || tooLong) {\n      logInfo(\n        `[Replay] Session duration (${Math.floor(duration / 1000)}s) is too ${\n          tooShort ? 'short' : 'long'\n        }, not sending replay.`,\n        this._options._experiments.traceInternals,\n      );\n\n      if (tooShort) {\n        this._debouncedFlush();\n      }\n      return;\n    }\n\n    const eventBuffer = this.eventBuffer;\n    if (eventBuffer && this.session.segmentId === 0 && !eventBuffer.hasCheckout) {\n      logInfo('[Replay] Flushing initial segment without checkout.', this._options._experiments.traceInternals);\n      // TODO FN: Evaluate if we want to stop here, or remove this again?\n    }\n\n    // this._flushLock acts as a lock so that future calls to `_flush()`\n    // will be blocked until this promise resolves\n    if (!this._flushLock) {\n      this._flushLock = this._runFlush();\n      await this._flushLock;\n      this._flushLock = undefined;\n      return;\n    }\n\n    // Wait for previous flush to finish, then call the debounced `_flush()`.\n    // It's possible there are other flush requests queued and waiting for it\n    // to resolve. We want to reduce all outstanding requests (as well as any\n    // new flush requests that occur within a second of the locked flush\n    // completing) into a single flush.\n\n    try {\n      await this._flushLock;\n    } catch (err) {\n      __DEBUG_BUILD__ && logger.error(err);\n    } finally {\n      this._debouncedFlush();\n    }\n  };\n\n  /** Save the session, if it is sticky */\n  private _maybeSaveSession(): void {\n    if (this.session && this._options.stickySession) {\n      saveSession(this.session);\n    }\n  }\n\n  /** Handler for rrweb.record.onMutation */\n  private _onMutationHandler = (mutations: unknown[]): boolean => {\n    const count = mutations.length;\n\n    const mutationLimit = this._options.mutationLimit;\n    const mutationBreadcrumbLimit = this._options.mutationBreadcrumbLimit;\n    const overMutationLimit = mutationLimit && count > mutationLimit;\n\n    // Create a breadcrumb if a lot of mutations happen at the same time\n    // We can show this in the UI as an information with potential performance improvements\n    if (count > mutationBreadcrumbLimit || overMutationLimit) {\n      const breadcrumb = createBreadcrumb({\n        category: 'replay.mutations',\n        data: {\n          count,\n          limit: overMutationLimit,\n        },\n      });\n      this._createCustomBreadcrumb(breadcrumb);\n    }\n\n    // Stop replay if over the mutation limit\n    if (overMutationLimit) {\n      void this.stop({ reason: 'mutationLimit', forceFlush: this.recordingMode === 'session' });\n      return false;\n    }\n\n    // `true` means we use the regular mutation handling by rrweb\n    return true;\n  };\n}\n","type DebouncedCallback = {\n  (): void | unknown;\n  flush: () => void | unknown;\n  cancel: () => void;\n};\ntype CallbackFunction = () => unknown;\ntype DebounceOptions = { maxWait?: number };\n\n/**\n * Heavily simplified debounce function based on lodash.debounce.\n *\n * This function takes a callback function (@param fun) and delays its invocation\n * by @param wait milliseconds. Optionally, a maxWait can be specified in @param options,\n * which ensures that the callback is invoked at least once after the specified max. wait time.\n *\n * @param func the function whose invocation is to be debounced\n * @param wait the minimum time until the function is invoked after it was called once\n * @param options the options object, which can contain the `maxWait` property\n *\n * @returns the debounced version of the function, which needs to be called at least once to start the\n *          debouncing process. Subsequent calls will reset the debouncing timer and, in case @paramfunc\n *          was already invoked in the meantime, return @param func's return value.\n *          The debounced function has two additional properties:\n *          - `flush`: Invokes the debounced function immediately and returns its return value\n *          - `cancel`: Cancels the debouncing process and resets the debouncing timer\n */\nexport function debounce(func: CallbackFunction, wait: number, options?: DebounceOptions): DebouncedCallback {\n  let callbackReturnValue: unknown;\n\n  let timerId: ReturnType<typeof setTimeout> | undefined;\n  let maxTimerId: ReturnType<typeof setTimeout> | undefined;\n\n  const maxWait = options && options.maxWait ? Math.max(options.maxWait, wait) : 0;\n\n  function invokeFunc(): unknown {\n    cancelTimers();\n    callbackReturnValue = func();\n    return callbackReturnValue;\n  }\n\n  function cancelTimers(): void {\n    timerId !== undefined && clearTimeout(timerId);\n    maxTimerId !== undefined && clearTimeout(maxTimerId);\n    timerId = maxTimerId = undefined;\n  }\n\n  function flush(): unknown {\n    if (timerId !== undefined || maxTimerId !== undefined) {\n      return invokeFunc();\n    }\n    return callbackReturnValue;\n  }\n\n  function debounced(): unknown {\n    if (timerId) {\n      clearTimeout(timerId);\n    }\n    timerId = setTimeout(invokeFunc, wait);\n\n    if (maxWait && maxTimerId === undefined) {\n      maxTimerId = setTimeout(invokeFunc, maxWait);\n    }\n\n    return callbackReturnValue;\n  }\n\n  debounced.cancel = cancelTimers;\n  debounced.flush = flush;\n  return debounced;\n}\n","type ClassOption = string | RegExp;\n\n/** Duplicate this from @sentry-internal/rrweb so we can export this as well. */\nexport const ReplayEventTypeDomContentLoaded = 0;\nexport const ReplayEventTypeLoad = 1;\nexport const ReplayEventTypeFullSnapshot = 2;\nexport const ReplayEventTypeIncrementalSnapshot = 3;\nexport const ReplayEventTypeMeta = 4;\nexport const ReplayEventTypeCustom = 5;\nexport const ReplayEventTypePlugin = 6;\n\nexport type ReplayEventType =\n  | typeof ReplayEventTypeDomContentLoaded\n  | typeof ReplayEventTypeLoad\n  | typeof ReplayEventTypeFullSnapshot\n  | typeof ReplayEventTypeIncrementalSnapshot\n  | typeof ReplayEventTypeMeta\n  | typeof ReplayEventTypeCustom\n  | typeof ReplayEventTypePlugin;\n\n/**\n * This is a partial copy of rrweb's eventWithTime type which only contains the properties\n * we specifcally need in the SDK.\n */\nexport type ReplayEventWithTime = {\n  type: ReplayEventType;\n  data: unknown;\n  timestamp: number;\n  delay?: number;\n};\n\n/**\n * This is a partial copy of rrweb's recording options which only contains the properties\n * we specifically us in the SDK. Users can specify additional properties, hence we add the\n * Record<string, unknown> union type.\n */\nexport type RrwebRecordOptions = {\n  maskAllText?: boolean;\n  maskAllInputs?: boolean;\n  blockClass?: ClassOption;\n  ignoreClass?: string;\n  maskTextClass?: ClassOption;\n  maskTextSelector?: string;\n  blockSelector?: string;\n  maskInputOptions?: Record<string, boolean>;\n} & Record<string, unknown>;\n","import type { DeprecatedPrivacyOptions, ReplayIntegrationPrivacyOptions } from '../types';\n\ntype GetPrivacyOptions = Required<Omit<ReplayIntegrationPrivacyOptions, 'maskFn'>> &\n  Omit<DeprecatedPrivacyOptions, 'maskInputOptions'>;\ninterface GetPrivacyReturn {\n  maskTextSelector: string;\n  unmaskTextSelector: string;\n  blockSelector: string;\n  unblockSelector: string;\n  ignoreSelector: string;\n\n  blockClass?: RegExp;\n  maskTextClass?: RegExp;\n}\n\nfunction getOption(\n  selectors: string[],\n  defaultSelectors: string[],\n  deprecatedClassOption?: string | RegExp,\n  deprecatedSelectorOption?: string,\n): string {\n  const deprecatedSelectors = typeof deprecatedSelectorOption === 'string' ? deprecatedSelectorOption.split(',') : [];\n\n  const allSelectors = [\n    ...selectors,\n    // @deprecated\n    ...deprecatedSelectors,\n\n    // sentry defaults\n    ...defaultSelectors,\n  ];\n\n  // @deprecated\n  if (typeof deprecatedClassOption !== 'undefined') {\n    // NOTE: No support for RegExp\n    if (typeof deprecatedClassOption === 'string') {\n      allSelectors.push(`.${deprecatedClassOption}`);\n    }\n\n    // eslint-disable-next-line no-console\n    console.warn(\n      '[Replay] You are using a deprecated configuration item for privacy. Read the documentation on how to use the new privacy configuration.',\n    );\n  }\n\n  return allSelectors.join(',');\n}\n\n/**\n * Returns privacy related configuration for use in rrweb\n */\nexport function getPrivacyOptions({\n  mask,\n  unmask,\n  block,\n  unblock,\n  ignore,\n\n  // eslint-disable-next-line deprecation/deprecation\n  blockClass,\n  // eslint-disable-next-line deprecation/deprecation\n  blockSelector,\n  // eslint-disable-next-line deprecation/deprecation\n  maskTextClass,\n  // eslint-disable-next-line deprecation/deprecation\n  maskTextSelector,\n  // eslint-disable-next-line deprecation/deprecation\n  ignoreClass,\n}: GetPrivacyOptions): GetPrivacyReturn {\n  const defaultBlockedElements = ['base[href=\"/\"]'];\n\n  const maskSelector = getOption(mask, ['.sentry-mask', '[data-sentry-mask]'], maskTextClass, maskTextSelector);\n  const unmaskSelector = getOption(unmask, ['.sentry-unmask', '[data-sentry-unmask]']);\n\n  const options: GetPrivacyReturn = {\n    // We are making the decision to make text and input selectors the same\n    maskTextSelector: maskSelector,\n    unmaskTextSelector: unmaskSelector,\n\n    blockSelector: getOption(\n      block,\n      ['.sentry-block', '[data-sentry-block]', ...defaultBlockedElements],\n      blockClass,\n      blockSelector,\n    ),\n    unblockSelector: getOption(unblock, ['.sentry-unblock', '[data-sentry-unblock]']),\n    ignoreSelector: getOption(ignore, ['.sentry-ignore', '[data-sentry-ignore]', 'input[type=\"file\"]'], ignoreClass),\n  };\n\n  if (blockClass instanceof RegExp) {\n    options.blockClass = blockClass;\n  }\n\n  if (maskTextClass instanceof RegExp) {\n    options.maskTextClass = maskTextClass;\n  }\n\n  return options;\n}\n","import { getCurrentHub } from '@sentry/core';\nimport type { BrowserClientReplayOptions, Integration } from '@sentry/types';\nimport { dropUndefinedKeys, isBrowser } from '@sentry/utils';\n\nimport {\n  DEFAULT_FLUSH_MAX_DELAY,\n  DEFAULT_FLUSH_MIN_DELAY,\n  MAX_REPLAY_DURATION,\n  MIN_REPLAY_DURATION,\n  MIN_REPLAY_DURATION_LIMIT,\n} from './constants';\nimport { ReplayContainer } from './replay';\nimport type { RecordingOptions, ReplayConfiguration, ReplayPluginOptions, SendBufferedReplayOptions } from './types';\nimport { getPrivacyOptions } from './util/getPrivacyOptions';\nimport { maskAttribute } from './util/maskAttribute';\n\nconst MEDIA_SELECTORS =\n  'img,image,svg,video,object,picture,embed,map,audio,link[rel=\"icon\"],link[rel=\"apple-touch-icon\"]';\n\nconst DEFAULT_NETWORK_HEADERS = ['content-length', 'content-type', 'accept'];\n\nlet _initialized = false;\n\ntype InitialReplayPluginOptions = Omit<ReplayPluginOptions, 'sessionSampleRate' | 'errorSampleRate'> &\n  Partial<Pick<ReplayPluginOptions, 'sessionSampleRate' | 'errorSampleRate'>>;\n\n/**\n * The main replay integration class, to be passed to `init({  integrations: [] })`.\n */\nexport class Replay implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'Replay';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  /**\n   * Options to pass to `rrweb.record()`\n   */\n  private readonly _recordingOptions: RecordingOptions;\n\n  /**\n   * Initial options passed to the replay integration, merged with default values.\n   * Note: `sessionSampleRate` and `errorSampleRate` are not required here, as they\n   * can only be finally set when setupOnce() is called.\n   *\n   * @private\n   */\n  private readonly _initialOptions: InitialReplayPluginOptions;\n\n  private _replay?: ReplayContainer;\n\n  public constructor({\n    flushMinDelay = DEFAULT_FLUSH_MIN_DELAY,\n    flushMaxDelay = DEFAULT_FLUSH_MAX_DELAY,\n    minReplayDuration = MIN_REPLAY_DURATION,\n    maxReplayDuration = MAX_REPLAY_DURATION,\n    stickySession = true,\n    useCompression = true,\n    workerUrl,\n    _experiments = {},\n    sessionSampleRate,\n    errorSampleRate,\n    maskAllText = true,\n    maskAllInputs = true,\n    blockAllMedia = true,\n\n    mutationBreadcrumbLimit = 750,\n    mutationLimit = 10_000,\n\n    slowClickTimeout = 7_000,\n    slowClickIgnoreSelectors = [],\n\n    networkDetailAllowUrls = [],\n    networkDetailDenyUrls = [],\n    networkCaptureBodies = true,\n    networkRequestHeaders = [],\n    networkResponseHeaders = [],\n\n    mask = [],\n    maskAttributes = ['title', 'placeholder'],\n    unmask = [],\n    block = [],\n    unblock = [],\n    ignore = [],\n    maskFn,\n\n    beforeAddRecordingEvent,\n\n    // eslint-disable-next-line deprecation/deprecation\n    blockClass,\n    // eslint-disable-next-line deprecation/deprecation\n    blockSelector,\n    // eslint-disable-next-line deprecation/deprecation\n    maskInputOptions,\n    // eslint-disable-next-line deprecation/deprecation\n    maskTextClass,\n    // eslint-disable-next-line deprecation/deprecation\n    maskTextSelector,\n    // eslint-disable-next-line deprecation/deprecation\n    ignoreClass,\n  }: ReplayConfiguration = {}) {\n    this.name = Replay.id;\n\n    const privacyOptions = getPrivacyOptions({\n      mask,\n      unmask,\n      block,\n      unblock,\n      ignore,\n      blockClass,\n      blockSelector,\n      maskTextClass,\n      maskTextSelector,\n      ignoreClass,\n    });\n\n    this._recordingOptions = {\n      maskAllInputs,\n      maskAllText,\n      maskInputOptions: { ...(maskInputOptions || {}), password: true },\n      maskTextFn: maskFn,\n      maskInputFn: maskFn,\n      maskAttributeFn: (key: string, value: string, el: HTMLElement): string =>\n        maskAttribute({\n          maskAttributes,\n          maskAllText,\n          privacyOptions,\n          key,\n          value,\n          el,\n        }),\n\n      ...privacyOptions,\n\n      // Our defaults\n      slimDOMOptions: 'all',\n      inlineStylesheet: true,\n      // Disable inline images as it will increase segment/replay size\n      inlineImages: false,\n      // collect fonts, but be aware that `sentry.io` needs to be an allowed\n      // origin for playback\n      collectFonts: true,\n      errorHandler: (err: Error & { __rrweb__?: boolean }) => {\n        try {\n          err.__rrweb__ = true;\n        } catch (error) {\n          // ignore errors here\n          // this can happen if the error is frozen or does not allow mutation for other reasons\n        }\n      },\n    };\n\n    this._initialOptions = {\n      flushMinDelay,\n      flushMaxDelay,\n      minReplayDuration: Math.min(minReplayDuration, MIN_REPLAY_DURATION_LIMIT),\n      maxReplayDuration: Math.min(maxReplayDuration, MAX_REPLAY_DURATION),\n      stickySession,\n      sessionSampleRate,\n      errorSampleRate,\n      useCompression,\n      workerUrl,\n      blockAllMedia,\n      maskAllInputs,\n      maskAllText,\n      mutationBreadcrumbLimit,\n      mutationLimit,\n      slowClickTimeout,\n      slowClickIgnoreSelectors,\n      networkDetailAllowUrls,\n      networkDetailDenyUrls,\n      networkCaptureBodies,\n      networkRequestHeaders: _getMergedNetworkHeaders(networkRequestHeaders),\n      networkResponseHeaders: _getMergedNetworkHeaders(networkResponseHeaders),\n      beforeAddRecordingEvent,\n\n      _experiments,\n    };\n\n    if (typeof sessionSampleRate === 'number') {\n      // eslint-disable-next-line\n      console.warn(\n        `[Replay] You are passing \\`sessionSampleRate\\` to the Replay integration.\nThis option is deprecated and will be removed soon.\nInstead, configure \\`replaysSessionSampleRate\\` directly in the SDK init options, e.g.:\nSentry.init({ replaysSessionSampleRate: ${sessionSampleRate} })`,\n      );\n\n      this._initialOptions.sessionSampleRate = sessionSampleRate;\n    }\n\n    if (typeof errorSampleRate === 'number') {\n      // eslint-disable-next-line\n      console.warn(\n        `[Replay] You are passing \\`errorSampleRate\\` to the Replay integration.\nThis option is deprecated and will be removed soon.\nInstead, configure \\`replaysOnErrorSampleRate\\` directly in the SDK init options, e.g.:\nSentry.init({ replaysOnErrorSampleRate: ${errorSampleRate} })`,\n      );\n\n      this._initialOptions.errorSampleRate = errorSampleRate;\n    }\n\n    if (this._initialOptions.blockAllMedia) {\n      // `blockAllMedia` is a more user friendly option to configure blocking\n      // embedded media elements\n      this._recordingOptions.blockSelector = !this._recordingOptions.blockSelector\n        ? MEDIA_SELECTORS\n        : `${this._recordingOptions.blockSelector},${MEDIA_SELECTORS}`;\n    }\n\n    if (this._isInitialized && isBrowser()) {\n      throw new Error('Multiple Sentry Session Replay instances are not supported');\n    }\n\n    this._isInitialized = true;\n  }\n\n  /** If replay has already been initialized */\n  protected get _isInitialized(): boolean {\n    return _initialized;\n  }\n\n  /** Update _isInitialized */\n  protected set _isInitialized(value: boolean) {\n    _initialized = value;\n  }\n\n  /**\n   * Setup and initialize replay container\n   */\n  public setupOnce(): void {\n    if (!isBrowser()) {\n      return;\n    }\n\n    this._setup();\n\n    // Once upon a time, we tried to create a transaction in `setupOnce` and it would\n    // potentially create a transaction before some native SDK integrations have run\n    // and applied their own global event processor. An example is:\n    // https://github.com/getsentry/sentry-javascript/blob/b47ceafbdac7f8b99093ce6023726ad4687edc48/packages/browser/src/integrations/useragent.ts\n    //\n    // So we call `this._initialize()` in next event loop as a workaround to wait for other\n    // global event processors to finish. This is no longer needed, but keeping it\n    // here to avoid any future issues.\n    setTimeout(() => this._initialize());\n  }\n\n  /**\n   * Start a replay regardless of sampling rate. Calling this will always\n   * create a new session. Will throw an error if replay is already in progress.\n   *\n   * Creates or loads a session, attaches listeners to varying events (DOM,\n   * PerformanceObserver, Recording, Sentry SDK, etc)\n   */\n  public start(): void {\n    if (!this._replay) {\n      return;\n    }\n\n    this._replay.start();\n  }\n\n  /**\n   * Start replay buffering. Buffers until `flush()` is called or, if\n   * `replaysOnErrorSampleRate` > 0, until an error occurs.\n   */\n  public startBuffering(): void {\n    if (!this._replay) {\n      return;\n    }\n\n    this._replay.startBuffering();\n  }\n\n  /**\n   * Currently, this needs to be manually called (e.g. for tests). Sentry SDK\n   * does not support a teardown\n   */\n  public stop(): Promise<void> {\n    if (!this._replay) {\n      return Promise.resolve();\n    }\n\n    return this._replay.stop({ forceFlush: this._replay.recordingMode === 'session' });\n  }\n\n  /**\n   * If not in \"session\" recording mode, flush event buffer which will create a new replay.\n   * Unless `continueRecording` is false, the replay will continue to record and\n   * behave as a \"session\"-based replay.\n   *\n   * Otherwise, queue up a flush.\n   */\n  public flush(options?: SendBufferedReplayOptions): Promise<void> {\n    if (!this._replay || !this._replay.isEnabled()) {\n      return Promise.resolve();\n    }\n\n    return this._replay.sendBufferedReplayOrFlush(options);\n  }\n\n  /**\n   * Get the current session ID.\n   */\n  public getReplayId(): string | undefined {\n    if (!this._replay || !this._replay.isEnabled()) {\n      return;\n    }\n\n    return this._replay.getSessionId();\n  }\n  /**\n   * Initializes replay.\n   */\n  protected _initialize(): void {\n    if (!this._replay) {\n      return;\n    }\n\n    this._replay.initializeSampling();\n  }\n\n  /** Setup the integration. */\n  private _setup(): void {\n    // Client is not available in constructor, so we need to wait until setupOnce\n    const finalOptions = loadReplayOptionsFromClient(this._initialOptions);\n\n    this._replay = new ReplayContainer({\n      options: finalOptions,\n      recordingOptions: this._recordingOptions,\n    });\n  }\n}\n\n/** Parse Replay-related options from SDK options */\nfunction loadReplayOptionsFromClient(initialOptions: InitialReplayPluginOptions): ReplayPluginOptions {\n  const client = getCurrentHub().getClient();\n  const opt = client && (client.getOptions() as BrowserClientReplayOptions);\n\n  const finalOptions = { sessionSampleRate: 0, errorSampleRate: 0, ...dropUndefinedKeys(initialOptions) };\n\n  if (!opt) {\n    // eslint-disable-next-line no-console\n    console.warn('SDK client is not available.');\n    return finalOptions;\n  }\n\n  if (\n    initialOptions.sessionSampleRate == null && // TODO remove once deprecated rates are removed\n    initialOptions.errorSampleRate == null && // TODO remove once deprecated rates are removed\n    opt.replaysSessionSampleRate == null &&\n    opt.replaysOnErrorSampleRate == null\n  ) {\n    // eslint-disable-next-line no-console\n    console.warn(\n      'Replay is disabled because neither `replaysSessionSampleRate` nor `replaysOnErrorSampleRate` are set.',\n    );\n  }\n\n  if (typeof opt.replaysSessionSampleRate === 'number') {\n    finalOptions.sessionSampleRate = opt.replaysSessionSampleRate;\n  }\n\n  if (typeof opt.replaysOnErrorSampleRate === 'number') {\n    finalOptions.errorSampleRate = opt.replaysOnErrorSampleRate;\n  }\n\n  return finalOptions;\n}\n\nfunction _getMergedNetworkHeaders(headers: string[]): string[] {\n  return [...DEFAULT_NETWORK_HEADERS, ...headers.map(header => header.toLowerCase())];\n}\n","import type { getPrivacyOptions } from './getPrivacyOptions';\n\ninterface MaskAttributeParams {\n  maskAttributes: string[];\n  maskAllText: boolean;\n  privacyOptions: ReturnType<typeof getPrivacyOptions>;\n  key: string;\n  value: string;\n  el: HTMLElement;\n}\n\n/**\n * Masks an attribute if necessary, otherwise return attribute value as-is.\n */\nexport function maskAttribute({\n  el,\n  key,\n  maskAttributes,\n  maskAllText,\n  privacyOptions,\n  value,\n}: MaskAttributeParams): string {\n  // We only mask attributes if `maskAllText` is true\n  if (!maskAllText) {\n    return value;\n  }\n\n  // unmaskTextSelector takes precendence\n  if (privacyOptions.unmaskTextSelector && el.matches(privacyOptions.unmaskTextSelector)) {\n    return value;\n  }\n\n  if (\n    maskAttributes.includes(key) ||\n    // Need to mask `value` attribute for `<input>` if it's a button-like\n    // type\n    (key === 'value' && el.tagName === 'INPUT' && ['submit', 'button'].includes(el.getAttribute('type') || ''))\n  ) {\n    return value.replace(/[\\S]/g, '*');\n  }\n\n  return value;\n}\n","import type { Transaction } from '@sentry/core';\nimport type { Span, SpanContext } from '@sentry/types';\n\n/**\n * Checks if a given value is a valid measurement value.\n */\nexport function isMeasurementValue(value: unknown): value is number {\n  return typeof value === 'number' && isFinite(value);\n}\n\n/**\n * Helper function to start child on transactions. This function will make sure that the transaction will\n * use the start timestamp of the created child span if it is earlier than the transactions actual\n * start timestamp.\n */\nexport function _startChild(transaction: Transaction, { startTimestamp, ...ctx }: SpanContext): Span {\n  if (startTimestamp && transaction.startTimestamp > startTimestamp) {\n    transaction.startTimestamp = startTimestamp;\n  }\n\n  return transaction.startChild({\n    startTimestamp,\n    ...ctx,\n  });\n}\n","/* eslint-disable max-lines */\nimport type { IdleTransaction, Transaction } from '@sentry/core';\nimport { getActiveTransaction } from '@sentry/core';\nimport type { Measurements } from '@sentry/types';\nimport { browserPerformanceTimeOrigin, htmlTreeAsString, logger } from '@sentry/utils';\n\nimport {\n  addClsInstrumentationHandler,\n  addFidInstrumentationHandler,\n  addLcpInstrumentationHandler,\n  addPerformanceInstrumentationHandler,\n} from '../instrument';\nimport { WINDOW } from '../types';\nimport { getVisibilityWatcher } from '../web-vitals/lib/getVisibilityWatcher';\nimport type { NavigatorDeviceMemory, NavigatorNetworkInformation } from '../web-vitals/types';\nimport { _startChild, isMeasurementValue } from './utils';\n\n/**\n * Converts from milliseconds to seconds\n * @param time time in ms\n */\nfunction msToSec(time: number): number {\n  return time / 1000;\n}\n\nfunction getBrowserPerformanceAPI(): Performance | undefined {\n  // @ts-expect-error we want to make sure all of these are available, even if TS is sure they are\n  return WINDOW && WINDOW.addEventListener && WINDOW.performance;\n}\n\nlet _performanceCursor: number = 0;\n\nlet _measurements: Measurements = {};\nlet _lcpEntry: LargestContentfulPaint | undefined;\nlet _clsEntry: LayoutShift | undefined;\n\n/**\n * Start tracking web vitals\n *\n * @returns A function that forces web vitals collection\n */\nexport function startTrackingWebVitals(): () => void {\n  const performance = getBrowserPerformanceAPI();\n  if (performance && browserPerformanceTimeOrigin) {\n    // @ts-expect-error we want to make sure all of these are available, even if TS is sure they are\n    if (performance.mark) {\n      WINDOW.performance.mark('sentry-tracing-init');\n    }\n    const fidCallback = _trackFID();\n    const clsCallback = _trackCLS();\n    const lcpCallback = _trackLCP();\n\n    return (): void => {\n      fidCallback();\n      clsCallback();\n      lcpCallback();\n    };\n  }\n\n  return () => undefined;\n}\n\n/**\n * Start tracking long tasks.\n */\nexport function startTrackingLongTasks(): void {\n  addPerformanceInstrumentationHandler('longtask', ({ entries }) => {\n    for (const entry of entries) {\n      const transaction = getActiveTransaction() as IdleTransaction | undefined;\n      if (!transaction) {\n        return;\n      }\n      const startTime = msToSec((browserPerformanceTimeOrigin as number) + entry.startTime);\n      const duration = msToSec(entry.duration);\n\n      transaction.startChild({\n        description: 'Main UI thread blocked',\n        op: 'ui.long-task',\n        origin: 'auto.ui.browser.metrics',\n        startTimestamp: startTime,\n        endTimestamp: startTime + duration,\n      });\n    }\n  });\n}\n\n/**\n * Start tracking interaction events.\n */\nexport function startTrackingInteractions(): void {\n  addPerformanceInstrumentationHandler('event', ({ entries }) => {\n    for (const entry of entries) {\n      const transaction = getActiveTransaction() as IdleTransaction | undefined;\n      if (!transaction) {\n        return;\n      }\n\n      if (entry.name === 'click') {\n        const startTime = msToSec((browserPerformanceTimeOrigin as number) + entry.startTime);\n        const duration = msToSec(entry.duration);\n\n        transaction.startChild({\n          description: htmlTreeAsString(entry.target),\n          op: `ui.interaction.${entry.name}`,\n          origin: 'auto.ui.browser.metrics',\n          startTimestamp: startTime,\n          endTimestamp: startTime + duration,\n        });\n      }\n    }\n  });\n}\n\n/** Starts tracking the Cumulative Layout Shift on the current page. */\nfunction _trackCLS(): () => void {\n  return addClsInstrumentationHandler(({ metric }) => {\n    const entry = metric.entries.pop();\n    if (!entry) {\n      return;\n    }\n\n    __DEBUG_BUILD__ && logger.log('[Measurements] Adding CLS');\n    _measurements['cls'] = { value: metric.value, unit: '' };\n    _clsEntry = entry as LayoutShift;\n  });\n}\n\n/** Starts tracking the Largest Contentful Paint on the current page. */\nfunction _trackLCP(): () => void {\n  return addLcpInstrumentationHandler(({ metric }) => {\n    const entry = metric.entries.pop();\n    if (!entry) {\n      return;\n    }\n\n    __DEBUG_BUILD__ && logger.log('[Measurements] Adding LCP');\n    _measurements['lcp'] = { value: metric.value, unit: 'millisecond' };\n    _lcpEntry = entry as LargestContentfulPaint;\n  });\n}\n\n/** Starts tracking the First Input Delay on the current page. */\nfunction _trackFID(): () => void {\n  return addFidInstrumentationHandler(({ metric }) => {\n    const entry = metric.entries.pop();\n    if (!entry) {\n      return;\n    }\n\n    const timeOrigin = msToSec(browserPerformanceTimeOrigin as number);\n    const startTime = msToSec(entry.startTime);\n    __DEBUG_BUILD__ && logger.log('[Measurements] Adding FID');\n    _measurements['fid'] = { value: metric.value, unit: 'millisecond' };\n    _measurements['mark.fid'] = { value: timeOrigin + startTime, unit: 'second' };\n  });\n}\n\n/** Add performance related spans to a transaction */\nexport function addPerformanceEntries(transaction: Transaction): void {\n  const performance = getBrowserPerformanceAPI();\n  if (!performance || !WINDOW.performance.getEntries || !browserPerformanceTimeOrigin) {\n    // Gatekeeper if performance API not available\n    return;\n  }\n\n  __DEBUG_BUILD__ && logger.log('[Tracing] Adding & adjusting spans using Performance API');\n  const timeOrigin = msToSec(browserPerformanceTimeOrigin);\n\n  const performanceEntries = performance.getEntries();\n\n  let responseStartTimestamp: number | undefined;\n  let requestStartTimestamp: number | undefined;\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  performanceEntries.slice(_performanceCursor).forEach((entry: Record<string, any>) => {\n    const startTime = msToSec(entry.startTime);\n    const duration = msToSec(entry.duration);\n\n    if (transaction.op === 'navigation' && timeOrigin + startTime < transaction.startTimestamp) {\n      return;\n    }\n\n    switch (entry.entryType) {\n      case 'navigation': {\n        _addNavigationSpans(transaction, entry, timeOrigin);\n        responseStartTimestamp = timeOrigin + msToSec(entry.responseStart);\n        requestStartTimestamp = timeOrigin + msToSec(entry.requestStart);\n        break;\n      }\n      case 'mark':\n      case 'paint':\n      case 'measure': {\n        _addMeasureSpans(transaction, entry, startTime, duration, timeOrigin);\n\n        // capture web vitals\n        const firstHidden = getVisibilityWatcher();\n        // Only report if the page wasn't hidden prior to the web vital.\n        const shouldRecord = entry.startTime < firstHidden.firstHiddenTime;\n\n        if (entry.name === 'first-paint' && shouldRecord) {\n          __DEBUG_BUILD__ && logger.log('[Measurements] Adding FP');\n          _measurements['fp'] = { value: entry.startTime, unit: 'millisecond' };\n        }\n        if (entry.name === 'first-contentful-paint' && shouldRecord) {\n          __DEBUG_BUILD__ && logger.log('[Measurements] Adding FCP');\n          _measurements['fcp'] = { value: entry.startTime, unit: 'millisecond' };\n        }\n        break;\n      }\n      case 'resource': {\n        const resourceName = (entry.name as string).replace(WINDOW.location.origin, '');\n        _addResourceSpans(transaction, entry, resourceName, startTime, duration, timeOrigin);\n        break;\n      }\n      default:\n      // Ignore other entry types.\n    }\n  });\n\n  _performanceCursor = Math.max(performanceEntries.length - 1, 0);\n\n  _trackNavigator(transaction);\n\n  // Measurements are only available for pageload transactions\n  if (transaction.op === 'pageload') {\n    // Generate TTFB (Time to First Byte), which measured as the time between the beginning of the transaction and the\n    // start of the response in milliseconds\n    if (typeof responseStartTimestamp === 'number') {\n      __DEBUG_BUILD__ && logger.log('[Measurements] Adding TTFB');\n      _measurements['ttfb'] = {\n        value: (responseStartTimestamp - transaction.startTimestamp) * 1000,\n        unit: 'millisecond',\n      };\n\n      if (typeof requestStartTimestamp === 'number' && requestStartTimestamp <= responseStartTimestamp) {\n        // Capture the time spent making the request and receiving the first byte of the response.\n        // This is the time between the start of the request and the start of the response in milliseconds.\n        _measurements['ttfb.requestTime'] = {\n          value: (responseStartTimestamp - requestStartTimestamp) * 1000,\n          unit: 'millisecond',\n        };\n      }\n    }\n\n    ['fcp', 'fp', 'lcp'].forEach(name => {\n      if (!_measurements[name] || timeOrigin >= transaction.startTimestamp) {\n        return;\n      }\n      // The web vitals, fcp, fp, lcp, and ttfb, all measure relative to timeOrigin.\n      // Unfortunately, timeOrigin is not captured within the transaction span data, so these web vitals will need\n      // to be adjusted to be relative to transaction.startTimestamp.\n      const oldValue = _measurements[name].value;\n      const measurementTimestamp = timeOrigin + msToSec(oldValue);\n\n      // normalizedValue should be in milliseconds\n      const normalizedValue = Math.abs((measurementTimestamp - transaction.startTimestamp) * 1000);\n      const delta = normalizedValue - oldValue;\n\n      __DEBUG_BUILD__ &&\n        logger.log(`[Measurements] Normalized ${name} from ${oldValue} to ${normalizedValue} (${delta})`);\n      _measurements[name].value = normalizedValue;\n    });\n\n    const fidMark = _measurements['mark.fid'];\n    if (fidMark && _measurements['fid']) {\n      // create span for FID\n      _startChild(transaction, {\n        description: 'first input delay',\n        endTimestamp: fidMark.value + msToSec(_measurements['fid'].value),\n        op: 'ui.action',\n        origin: 'auto.ui.browser.metrics',\n        startTimestamp: fidMark.value,\n      });\n\n      // Delete mark.fid as we don't want it to be part of final payload\n      delete _measurements['mark.fid'];\n    }\n\n    // If FCP is not recorded we should not record the cls value\n    // according to the new definition of CLS.\n    if (!('fcp' in _measurements)) {\n      delete _measurements.cls;\n    }\n\n    Object.keys(_measurements).forEach(measurementName => {\n      transaction.setMeasurement(\n        measurementName,\n        _measurements[measurementName].value,\n        _measurements[measurementName].unit,\n      );\n    });\n\n    _tagMetricInfo(transaction);\n  }\n\n  _lcpEntry = undefined;\n  _clsEntry = undefined;\n  _measurements = {};\n}\n\n/** Create measure related spans */\nexport function _addMeasureSpans(\n  transaction: Transaction,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  entry: Record<string, any>,\n  startTime: number,\n  duration: number,\n  timeOrigin: number,\n): number {\n  const measureStartTimestamp = timeOrigin + startTime;\n  const measureEndTimestamp = measureStartTimestamp + duration;\n\n  _startChild(transaction, {\n    description: entry.name as string,\n    endTimestamp: measureEndTimestamp,\n    op: entry.entryType as string,\n    origin: 'auto.resource.browser.metrics',\n    startTimestamp: measureStartTimestamp,\n  });\n\n  return measureStartTimestamp;\n}\n\n/** Instrument navigation entries */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _addNavigationSpans(transaction: Transaction, entry: Record<string, any>, timeOrigin: number): void {\n  ['unloadEvent', 'redirect', 'domContentLoadedEvent', 'loadEvent', 'connect'].forEach(event => {\n    _addPerformanceNavigationTiming(transaction, entry, event, timeOrigin);\n  });\n  _addPerformanceNavigationTiming(transaction, entry, 'secureConnection', timeOrigin, 'TLS/SSL', 'connectEnd');\n  _addPerformanceNavigationTiming(transaction, entry, 'fetch', timeOrigin, 'cache', 'domainLookupStart');\n  _addPerformanceNavigationTiming(transaction, entry, 'domainLookup', timeOrigin, 'DNS');\n  _addRequest(transaction, entry, timeOrigin);\n}\n\n/** Create performance navigation related spans */\nfunction _addPerformanceNavigationTiming(\n  transaction: Transaction,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  entry: Record<string, any>,\n  event: string,\n  timeOrigin: number,\n  description?: string,\n  eventEnd?: string,\n): void {\n  const end = eventEnd ? (entry[eventEnd] as number | undefined) : (entry[`${event}End`] as number | undefined);\n  const start = entry[`${event}Start`] as number | undefined;\n  if (!start || !end) {\n    return;\n  }\n  _startChild(transaction, {\n    op: 'browser',\n    origin: 'auto.browser.browser.metrics',\n    description: description || event,\n    startTimestamp: timeOrigin + msToSec(start),\n    endTimestamp: timeOrigin + msToSec(end),\n  });\n}\n\n/** Create request and response related spans */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _addRequest(transaction: Transaction, entry: Record<string, any>, timeOrigin: number): void {\n  _startChild(transaction, {\n    op: 'browser',\n    origin: 'auto.browser.browser.metrics',\n    description: 'request',\n    startTimestamp: timeOrigin + msToSec(entry.requestStart as number),\n    endTimestamp: timeOrigin + msToSec(entry.responseEnd as number),\n  });\n\n  _startChild(transaction, {\n    op: 'browser',\n    origin: 'auto.browser.browser.metrics',\n    description: 'response',\n    startTimestamp: timeOrigin + msToSec(entry.responseStart as number),\n    endTimestamp: timeOrigin + msToSec(entry.responseEnd as number),\n  });\n}\n\nexport interface ResourceEntry extends Record<string, unknown> {\n  initiatorType?: string;\n  transferSize?: number;\n  encodedBodySize?: number;\n  decodedBodySize?: number;\n  renderBlockingStatus?: string;\n}\n\n/** Create resource-related spans */\nexport function _addResourceSpans(\n  transaction: Transaction,\n  entry: ResourceEntry,\n  resourceName: string,\n  startTime: number,\n  duration: number,\n  timeOrigin: number,\n): void {\n  // we already instrument based on fetch and xhr, so we don't need to\n  // duplicate spans here.\n  if (entry.initiatorType === 'xmlhttprequest' || entry.initiatorType === 'fetch') {\n    return;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const data: Record<string, any> = {};\n  if ('transferSize' in entry) {\n    data['http.response_transfer_size'] = entry.transferSize;\n  }\n  if ('encodedBodySize' in entry) {\n    data['http.response_content_length'] = entry.encodedBodySize;\n  }\n  if ('decodedBodySize' in entry) {\n    data['http.decoded_response_content_length'] = entry.decodedBodySize;\n  }\n  if ('renderBlockingStatus' in entry) {\n    data['resource.render_blocking_status'] = entry.renderBlockingStatus;\n  }\n\n  const startTimestamp = timeOrigin + startTime;\n  const endTimestamp = startTimestamp + duration;\n\n  _startChild(transaction, {\n    description: resourceName,\n    endTimestamp,\n    op: entry.initiatorType ? `resource.${entry.initiatorType}` : 'resource.other',\n    origin: 'auto.resource.browser.metrics',\n    startTimestamp,\n    data,\n  });\n}\n\n/**\n * Capture the information of the user agent.\n */\nfunction _trackNavigator(transaction: Transaction): void {\n  const navigator = WINDOW.navigator as null | (Navigator & NavigatorNetworkInformation & NavigatorDeviceMemory);\n  if (!navigator) {\n    return;\n  }\n\n  // track network connectivity\n  const connection = navigator.connection;\n  if (connection) {\n    if (connection.effectiveType) {\n      transaction.setTag('effectiveConnectionType', connection.effectiveType);\n    }\n\n    if (connection.type) {\n      transaction.setTag('connectionType', connection.type);\n    }\n\n    if (isMeasurementValue(connection.rtt)) {\n      _measurements['connection.rtt'] = { value: connection.rtt, unit: 'millisecond' };\n    }\n  }\n\n  if (isMeasurementValue(navigator.deviceMemory)) {\n    transaction.setTag('deviceMemory', `${navigator.deviceMemory} GB`);\n  }\n\n  if (isMeasurementValue(navigator.hardwareConcurrency)) {\n    transaction.setTag('hardwareConcurrency', String(navigator.hardwareConcurrency));\n  }\n}\n\n/** Add LCP / CLS data to transaction to allow debugging */\nfunction _tagMetricInfo(transaction: Transaction): void {\n  if (_lcpEntry) {\n    __DEBUG_BUILD__ && logger.log('[Measurements] Adding LCP Data');\n\n    // Capture Properties of the LCP element that contributes to the LCP.\n\n    if (_lcpEntry.element) {\n      transaction.setTag('lcp.element', htmlTreeAsString(_lcpEntry.element));\n    }\n\n    if (_lcpEntry.id) {\n      transaction.setTag('lcp.id', _lcpEntry.id);\n    }\n\n    if (_lcpEntry.url) {\n      // Trim URL to the first 200 characters.\n      transaction.setTag('lcp.url', _lcpEntry.url.trim().slice(0, 200));\n    }\n\n    transaction.setTag('lcp.size', _lcpEntry.size);\n  }\n\n  // See: https://developer.mozilla.org/en-US/docs/Web/API/LayoutShift\n  if (_clsEntry && _clsEntry.sources) {\n    __DEBUG_BUILD__ && logger.log('[Measurements] Adding CLS Data');\n    _clsEntry.sources.forEach((source, index) =>\n      transaction.setTag(`cls.source.${index + 1}`, htmlTreeAsString(source.node)),\n    );\n  }\n}\n","/* eslint-disable max-lines */\nimport { getCurrentHub, getDynamicSamplingContextFromClient, hasTracingEnabled } from '@sentry/core';\nimport type { Client, Scope, Span } from '@sentry/types';\nimport {\n  addInstrumentationHandler,\n  BAGGAGE_HEADER_NAME,\n  browserPerformanceTimeOrigin,\n  dynamicSamplingContextToSentryBaggageHeader,\n  generateSentryTraceHeader,\n  isInstanceOf,\n  SENTRY_XHR_DATA_KEY,\n  stringMatchesSomePattern,\n} from '@sentry/utils';\n\nimport { addPerformanceInstrumentationHandler } from './instrument';\n\nexport const DEFAULT_TRACE_PROPAGATION_TARGETS = ['localhost', /^\\/(?!\\/)/];\n\n/** Options for Request Instrumentation */\nexport interface RequestInstrumentationOptions {\n  /**\n   * @deprecated Will be removed in v8.\n   * Use `shouldCreateSpanForRequest` to control span creation and `tracePropagationTargets` to control\n   * trace header attachment.\n   */\n  tracingOrigins: Array<string | RegExp>;\n\n  /**\n   * List of strings and/or regexes used to determine which outgoing requests will have `sentry-trace` and `baggage`\n   * headers attached.\n   *\n   * @deprecated Use the top-level `tracePropagationTargets` option in `Sentry.init` instead.\n   * This option will be removed in v8.\n   *\n   * Default: ['localhost', /^\\//] @see {DEFAULT_TRACE_PROPAGATION_TARGETS}\n   */\n  tracePropagationTargets: Array<string | RegExp>;\n\n  /**\n   * Flag to disable patching all together for fetch requests.\n   *\n   * Default: true\n   */\n  traceFetch: boolean;\n\n  /**\n   * Flag to disable patching all together for xhr requests.\n   *\n   * Default: true\n   */\n  traceXHR: boolean;\n\n  /**\n   * If true, Sentry will capture http timings and add them to the corresponding http spans.\n   *\n   * Default: true\n   */\n  enableHTTPTimings: boolean;\n\n  /**\n   * This function will be called before creating a span for a request with the given url.\n   * Return false if you don't want a span for the given url.\n   *\n   * Default: (url: string) => true\n   */\n  shouldCreateSpanForRequest?(this: void, url: string): boolean;\n}\n\n/** Data returned from fetch callback */\nexport interface FetchData {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  args: any[]; // the arguments passed to the fetch call itself\n  fetchData?: {\n    method: string;\n    url: string;\n    // span_id\n    __span?: string;\n  };\n\n  // TODO Should this be unknown instead? If we vendor types, make it a Response\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  response?: any;\n  error?: unknown;\n\n  startTimestamp: number;\n  endTimestamp?: number;\n}\n\n/** Data returned from XHR request */\nexport interface XHRData {\n  xhr?: {\n    [SENTRY_XHR_DATA_KEY]?: {\n      method: string;\n      url: string;\n      status_code: number;\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      data: Record<string, any>;\n    };\n    __sentry_xhr_span_id__?: string;\n    setRequestHeader?: (key: string, val: string) => void;\n    getRequestHeader?: (key: string) => string;\n    __sentry_own_request__?: boolean;\n  };\n  startTimestamp: number;\n  endTimestamp?: number;\n}\n\ntype PolymorphicRequestHeaders =\n  | Record<string, string | undefined>\n  | Array<[string, string]>\n  // the below is not preicsely the Header type used in Request, but it'll pass duck-typing\n  | {\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      [key: string]: any;\n      append: (key: string, value: string) => void;\n      get: (key: string) => string | null | undefined;\n    };\n\nexport const defaultRequestInstrumentationOptions: RequestInstrumentationOptions = {\n  traceFetch: true,\n  traceXHR: true,\n  enableHTTPTimings: true,\n  // TODO (v8): Remove this property\n  tracingOrigins: DEFAULT_TRACE_PROPAGATION_TARGETS,\n  tracePropagationTargets: DEFAULT_TRACE_PROPAGATION_TARGETS,\n};\n\n/** Registers span creators for xhr and fetch requests  */\nexport function instrumentOutgoingRequests(_options?: Partial<RequestInstrumentationOptions>): void {\n  const {\n    traceFetch,\n    traceXHR,\n    // eslint-disable-next-line deprecation/deprecation\n    tracePropagationTargets,\n    // eslint-disable-next-line deprecation/deprecation\n    tracingOrigins,\n    shouldCreateSpanForRequest,\n    enableHTTPTimings,\n  } = {\n    traceFetch: defaultRequestInstrumentationOptions.traceFetch,\n    traceXHR: defaultRequestInstrumentationOptions.traceXHR,\n    ..._options,\n  };\n\n  const shouldCreateSpan =\n    typeof shouldCreateSpanForRequest === 'function' ? shouldCreateSpanForRequest : (_: string) => true;\n\n  // TODO(v8) Remove tracingOrigins here\n  // The only reason we're passing it in here is because this instrumentOutgoingRequests function is publicly exported\n  // and we don't want to break the API. We can remove it in v8.\n  const shouldAttachHeadersWithTargets = (url: string): boolean =>\n    shouldAttachHeaders(url, tracePropagationTargets || tracingOrigins);\n\n  const spans: Record<string, Span> = {};\n\n  if (traceFetch) {\n    addInstrumentationHandler('fetch', (handlerData: FetchData) => {\n      const createdSpan = fetchCallback(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n      if (enableHTTPTimings && createdSpan) {\n        addHTTPTimings(createdSpan);\n      }\n    });\n  }\n\n  if (traceXHR) {\n    addInstrumentationHandler('xhr', (handlerData: XHRData) => {\n      const createdSpan = xhrCallback(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n      if (enableHTTPTimings && createdSpan) {\n        addHTTPTimings(createdSpan);\n      }\n    });\n  }\n}\n\nfunction isPerformanceResourceTiming(entry: PerformanceEntry): entry is PerformanceResourceTiming {\n  return (\n    entry.entryType === 'resource' &&\n    'initiatorType' in entry &&\n    typeof (entry as PerformanceResourceTiming).nextHopProtocol === 'string' &&\n    (entry.initiatorType === 'fetch' || entry.initiatorType === 'xmlhttprequest')\n  );\n}\n\n/**\n * Creates a temporary observer to listen to the next fetch/xhr resourcing timings,\n * so that when timings hit their per-browser limit they don't need to be removed.\n *\n * @param span A span that has yet to be finished, must contain `url` on data.\n */\nfunction addHTTPTimings(span: Span): void {\n  const url = span.data.url;\n\n  if (!url) {\n    return;\n  }\n\n  const cleanup = addPerformanceInstrumentationHandler('resource', ({ entries }) => {\n    entries.forEach(entry => {\n      if (isPerformanceResourceTiming(entry) && entry.name.endsWith(url)) {\n        const spanData = resourceTimingEntryToSpanData(entry);\n        spanData.forEach(data => span.setData(...data));\n        // In the next tick, clean this handler up\n        // We have to wait here because otherwise this cleans itself up before it is fully done\n        setTimeout(cleanup);\n      }\n    });\n  });\n}\n\n/**\n * Converts ALPN protocol ids to name and version.\n *\n * (https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids)\n * @param nextHopProtocol PerformanceResourceTiming.nextHopProtocol\n */\nexport function extractNetworkProtocol(nextHopProtocol: string): { name: string; version: string } {\n  let name = 'unknown';\n  let version = 'unknown';\n  let _name = '';\n  for (const char of nextHopProtocol) {\n    // http/1.1 etc.\n    if (char === '/') {\n      [name, version] = nextHopProtocol.split('/');\n      break;\n    }\n    // h2, h3 etc.\n    if (!isNaN(Number(char))) {\n      name = _name === 'h' ? 'http' : _name;\n      version = nextHopProtocol.split(_name)[1];\n      break;\n    }\n    _name += char;\n  }\n  if (_name === nextHopProtocol) {\n    // webrtc, ftp, etc.\n    name = _name;\n  }\n  return { name, version };\n}\n\nfunction getAbsoluteTime(time: number = 0): number {\n  return ((browserPerformanceTimeOrigin || performance.timeOrigin) + time) / 1000;\n}\n\nfunction resourceTimingEntryToSpanData(resourceTiming: PerformanceResourceTiming): [string, string | number][] {\n  const { name, version } = extractNetworkProtocol(resourceTiming.nextHopProtocol);\n\n  const timingSpanData: [string, string | number][] = [];\n\n  timingSpanData.push(['network.protocol.version', version], ['network.protocol.name', name]);\n\n  if (!browserPerformanceTimeOrigin) {\n    return timingSpanData;\n  }\n  return [\n    ...timingSpanData,\n    ['http.request.redirect_start', getAbsoluteTime(resourceTiming.redirectStart)],\n    ['http.request.fetch_start', getAbsoluteTime(resourceTiming.fetchStart)],\n    ['http.request.domain_lookup_start', getAbsoluteTime(resourceTiming.domainLookupStart)],\n    ['http.request.domain_lookup_end', getAbsoluteTime(resourceTiming.domainLookupEnd)],\n    ['http.request.connect_start', getAbsoluteTime(resourceTiming.connectStart)],\n    ['http.request.secure_connection_start', getAbsoluteTime(resourceTiming.secureConnectionStart)],\n    ['http.request.connection_end', getAbsoluteTime(resourceTiming.connectEnd)],\n    ['http.request.request_start', getAbsoluteTime(resourceTiming.requestStart)],\n    ['http.request.response_start', getAbsoluteTime(resourceTiming.responseStart)],\n    ['http.request.response_end', getAbsoluteTime(resourceTiming.responseEnd)],\n  ];\n}\n\n/**\n * A function that determines whether to attach tracing headers to a request.\n * This was extracted from `instrumentOutgoingRequests` to make it easier to test shouldAttachHeaders.\n * We only export this fuction for testing purposes.\n */\nexport function shouldAttachHeaders(url: string, tracePropagationTargets: (string | RegExp)[] | undefined): boolean {\n  return stringMatchesSomePattern(url, tracePropagationTargets || DEFAULT_TRACE_PROPAGATION_TARGETS);\n}\n\n/**\n * Create and track fetch request spans\n *\n * @returns Span if a span was created, otherwise void.\n */\nexport function fetchCallback(\n  handlerData: FetchData,\n  shouldCreateSpan: (url: string) => boolean,\n  shouldAttachHeaders: (url: string) => boolean,\n  spans: Record<string, Span>,\n): Span | undefined {\n  if (!hasTracingEnabled() || !handlerData.fetchData) {\n    return undefined;\n  }\n\n  const shouldCreateSpanResult = shouldCreateSpan(handlerData.fetchData.url);\n\n  if (handlerData.endTimestamp && shouldCreateSpanResult) {\n    const spanId = handlerData.fetchData.__span;\n    if (!spanId) return;\n\n    const span = spans[spanId];\n    if (span) {\n      if (handlerData.response) {\n        // TODO (kmclb) remove this once types PR goes through\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        span.setHttpStatus(handlerData.response.status);\n\n        const contentLength: string =\n          // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n          handlerData.response && handlerData.response.headers && handlerData.response.headers.get('content-length');\n\n        const contentLengthNum = parseInt(contentLength);\n        if (contentLengthNum > 0) {\n          span.setData('http.response_content_length', contentLengthNum);\n        }\n      } else if (handlerData.error) {\n        span.setStatus('internal_error');\n      }\n      span.finish();\n\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete spans[spanId];\n    }\n    return undefined;\n  }\n\n  const hub = getCurrentHub();\n  const scope = hub.getScope();\n  const client = hub.getClient();\n  const parentSpan = scope.getSpan();\n\n  const { method, url } = handlerData.fetchData;\n\n  const span =\n    shouldCreateSpanResult && parentSpan\n      ? parentSpan.startChild({\n          data: {\n            url,\n            type: 'fetch',\n            'http.method': method,\n          },\n          description: `${method} ${url}`,\n          op: 'http.client',\n          origin: 'auto.http.browser',\n        })\n      : undefined;\n\n  if (span) {\n    handlerData.fetchData.__span = span.spanId;\n    spans[span.spanId] = span;\n  }\n\n  if (shouldAttachHeaders(handlerData.fetchData.url) && client) {\n    const request: string | Request = handlerData.args[0];\n\n    // In case the user hasn't set the second argument of a fetch call we default it to `{}`.\n    handlerData.args[1] = handlerData.args[1] || {};\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const options: { [key: string]: any } = handlerData.args[1];\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n    options.headers = addTracingHeadersToFetchRequest(request, client, scope, options, span);\n  }\n\n  return span;\n}\n\n/**\n * Adds sentry-trace and baggage headers to the various forms of fetch headers\n */\nexport function addTracingHeadersToFetchRequest(\n  request: string | unknown, // unknown is actually type Request but we can't export DOM types from this package,\n  client: Client,\n  scope: Scope,\n  options: {\n    headers?:\n      | {\n          [key: string]: string[] | string | undefined;\n        }\n      | PolymorphicRequestHeaders;\n  },\n  requestSpan?: Span,\n): PolymorphicRequestHeaders | undefined {\n  const span = requestSpan || scope.getSpan();\n\n  const transaction = span && span.transaction;\n\n  const { traceId, sampled, dsc } = scope.getPropagationContext();\n\n  const sentryTraceHeader = span ? span.toTraceparent() : generateSentryTraceHeader(traceId, undefined, sampled);\n  const dynamicSamplingContext = transaction\n    ? transaction.getDynamicSamplingContext()\n    : dsc\n    ? dsc\n    : getDynamicSamplingContextFromClient(traceId, client, scope);\n\n  const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext);\n\n  const headers =\n    typeof Request !== 'undefined' && isInstanceOf(request, Request) ? (request as Request).headers : options.headers;\n\n  if (!headers) {\n    return { 'sentry-trace': sentryTraceHeader, baggage: sentryBaggageHeader };\n  } else if (typeof Headers !== 'undefined' && isInstanceOf(headers, Headers)) {\n    const newHeaders = new Headers(headers as Headers);\n\n    newHeaders.append('sentry-trace', sentryTraceHeader);\n\n    if (sentryBaggageHeader) {\n      // If the same header is appended multiple times the browser will merge the values into a single request header.\n      // Its therefore safe to simply push a \"baggage\" entry, even though there might already be another baggage header.\n      newHeaders.append(BAGGAGE_HEADER_NAME, sentryBaggageHeader);\n    }\n\n    return newHeaders as PolymorphicRequestHeaders;\n  } else if (Array.isArray(headers)) {\n    const newHeaders = [...headers, ['sentry-trace', sentryTraceHeader]];\n\n    if (sentryBaggageHeader) {\n      // If there are multiple entries with the same key, the browser will merge the values into a single request header.\n      // Its therefore safe to simply push a \"baggage\" entry, even though there might already be another baggage header.\n      newHeaders.push([BAGGAGE_HEADER_NAME, sentryBaggageHeader]);\n    }\n\n    return newHeaders as PolymorphicRequestHeaders;\n  } else {\n    const existingBaggageHeader = 'baggage' in headers ? headers.baggage : undefined;\n    const newBaggageHeaders: string[] = [];\n\n    if (Array.isArray(existingBaggageHeader)) {\n      newBaggageHeaders.push(...existingBaggageHeader);\n    } else if (existingBaggageHeader) {\n      newBaggageHeaders.push(existingBaggageHeader);\n    }\n\n    if (sentryBaggageHeader) {\n      newBaggageHeaders.push(sentryBaggageHeader);\n    }\n\n    return {\n      ...(headers as Exclude<typeof headers, Headers>),\n      'sentry-trace': sentryTraceHeader,\n      baggage: newBaggageHeaders.length > 0 ? newBaggageHeaders.join(',') : undefined,\n    };\n  }\n}\n\n/**\n * Create and track xhr request spans\n *\n * @returns Span if a span was created, otherwise void.\n */\n// eslint-disable-next-line complexity\nexport function xhrCallback(\n  handlerData: XHRData,\n  shouldCreateSpan: (url: string) => boolean,\n  shouldAttachHeaders: (url: string) => boolean,\n  spans: Record<string, Span>,\n): Span | undefined {\n  const xhr = handlerData.xhr;\n  const sentryXhrData = xhr && xhr[SENTRY_XHR_DATA_KEY];\n\n  if (!hasTracingEnabled() || (xhr && xhr.__sentry_own_request__) || !xhr || !sentryXhrData) {\n    return undefined;\n  }\n\n  const shouldCreateSpanResult = shouldCreateSpan(sentryXhrData.url);\n\n  // check first if the request has finished and is tracked by an existing span which should now end\n  if (handlerData.endTimestamp && shouldCreateSpanResult) {\n    const spanId = xhr.__sentry_xhr_span_id__;\n    if (!spanId) return;\n\n    const span = spans[spanId];\n    if (span) {\n      span.setHttpStatus(sentryXhrData.status_code);\n      span.finish();\n\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete spans[spanId];\n    }\n    return undefined;\n  }\n\n  const hub = getCurrentHub();\n  const scope = hub.getScope();\n  const parentSpan = scope.getSpan();\n\n  const span =\n    shouldCreateSpanResult && parentSpan\n      ? parentSpan.startChild({\n          data: {\n            ...sentryXhrData.data,\n            type: 'xhr',\n            'http.method': sentryXhrData.method,\n            url: sentryXhrData.url,\n          },\n          description: `${sentryXhrData.method} ${sentryXhrData.url}`,\n          op: 'http.client',\n          origin: 'auto.http.browser',\n        })\n      : undefined;\n\n  if (span) {\n    xhr.__sentry_xhr_span_id__ = span.spanId;\n    spans[xhr.__sentry_xhr_span_id__] = span;\n  }\n\n  if (xhr.setRequestHeader && shouldAttachHeaders(sentryXhrData.url)) {\n    if (span) {\n      const transaction = span && span.transaction;\n      const dynamicSamplingContext = transaction && transaction.getDynamicSamplingContext();\n      const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext);\n      setHeaderOnXhr(xhr, span.toTraceparent(), sentryBaggageHeader);\n    } else {\n      const client = hub.getClient();\n      const { traceId, sampled, dsc } = scope.getPropagationContext();\n      const sentryTraceHeader = generateSentryTraceHeader(traceId, undefined, sampled);\n      const dynamicSamplingContext =\n        dsc || (client ? getDynamicSamplingContextFromClient(traceId, client, scope) : undefined);\n      const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext);\n      setHeaderOnXhr(xhr, sentryTraceHeader, sentryBaggageHeader);\n    }\n  }\n\n  return span;\n}\n\nfunction setHeaderOnXhr(\n  xhr: NonNullable<XHRData['xhr']>,\n  sentryTraceHeader: string,\n  sentryBaggageHeader: string | undefined,\n): void {\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    xhr.setRequestHeader!('sentry-trace', sentryTraceHeader);\n    if (sentryBaggageHeader) {\n      // From MDN: \"If this method is called several times with the same header, the values are merged into one single request header.\"\n      // We can therefore simply set a baggage header without checking what was there before\n      // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/setRequestHeader\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      xhr.setRequestHeader!(BAGGAGE_HEADER_NAME, sentryBaggageHeader);\n    }\n  } catch (_) {\n    // Error: InvalidStateError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED.\n  }\n}\n","/* eslint-disable max-lines */\nimport type { Hub, IdleTransaction } from '@sentry/core';\nimport { addTracingExtensions, getActiveTransaction, startIdleTransaction, TRACING_DEFAULTS } from '@sentry/core';\nimport type { EventProcessor, Integration, Transaction, TransactionContext, TransactionSource } from '@sentry/types';\nimport { getDomElement, logger, tracingContextFromHeaders } from '@sentry/utils';\n\nimport { registerBackgroundTabDetection } from './backgroundtab';\nimport {\n  addPerformanceEntries,\n  startTrackingInteractions,\n  startTrackingLongTasks,\n  startTrackingWebVitals,\n} from './metrics';\nimport type { RequestInstrumentationOptions } from './request';\nimport { defaultRequestInstrumentationOptions, instrumentOutgoingRequests } from './request';\nimport { instrumentRoutingWithDefaults } from './router';\nimport { WINDOW } from './types';\n\nexport const BROWSER_TRACING_INTEGRATION_ID = 'BrowserTracing';\n\n/** Options for Browser Tracing integration */\nexport interface BrowserTracingOptions extends RequestInstrumentationOptions {\n  /**\n   * The time to wait in ms until the transaction will be finished during an idle state. An idle state is defined\n   * by a moment where there are no in-progress spans.\n   *\n   * The transaction will use the end timestamp of the last finished span as the endtime for the transaction.\n   * If there are still active spans when this the `idleTimeout` is set, the `idleTimeout` will get reset.\n   * Time is in ms.\n   *\n   * Default: 1000\n   */\n  idleTimeout: number;\n\n  /**\n   * The max duration for a transaction. If a transaction duration hits the `finalTimeout` value, it\n   * will be finished.\n   * Time is in ms.\n   *\n   * Default: 30000\n   */\n  finalTimeout: number;\n\n  /**\n   * The heartbeat interval. If no new spans are started or open spans are finished within 3 heartbeats,\n   * the transaction will be finished.\n   * Time is in ms.\n   *\n   * Default: 5000\n   */\n  heartbeatInterval: number;\n\n  /**\n   * Flag to enable/disable creation of `navigation` transaction on history changes.\n   *\n   * Default: true\n   */\n  startTransactionOnLocationChange: boolean;\n\n  /**\n   * Flag to enable/disable creation of `pageload` transaction on first pageload.\n   *\n   * Default: true\n   */\n  startTransactionOnPageLoad: boolean;\n\n  /**\n   * Flag Transactions where tabs moved to background with \"cancelled\". Browser background tab timing is\n   * not suited towards doing precise measurements of operations. By default, we recommend that this option\n   * be enabled as background transactions can mess up your statistics in nondeterministic ways.\n   *\n   * Default: true\n   */\n  markBackgroundTransactions: boolean;\n\n  /**\n   * If true, Sentry will capture long tasks and add them to the corresponding transaction.\n   *\n   * Default: true\n   */\n  enableLongTask: boolean;\n\n  /**\n   * _metricOptions allows the user to send options to change how metrics are collected.\n   *\n   * _metricOptions is currently experimental.\n   *\n   * Default: undefined\n   */\n  _metricOptions?: Partial<{\n    /**\n     * @deprecated This property no longer has any effect and will be removed in v8.\n     */\n    _reportAllChanges: boolean;\n  }>;\n\n  /**\n   * _experiments allows the user to send options to define how this integration works.\n   * Note that the `enableLongTask` options is deprecated in favor of the option at the top level, and will be removed in v8.\n   *\n   * TODO (v8): Remove enableLongTask\n   *\n   * Default: undefined\n   */\n  _experiments: Partial<{\n    enableLongTask: boolean;\n    enableInteractions: boolean;\n    onStartRouteTransaction: (t: Transaction | undefined, ctx: TransactionContext, getCurrentHub: () => Hub) => void;\n  }>;\n\n  /**\n   * beforeNavigate is called before a pageload/navigation transaction is created and allows users to modify transaction\n   * context data, or drop the transaction entirely (by setting `sampled = false` in the context).\n   *\n   * Note: For legacy reasons, transactions can also be dropped by returning `undefined`.\n   *\n   * @param context: The context data which will be passed to `startTransaction` by default\n   *\n   * @returns A (potentially) modified context object, with `sampled = false` if the transaction should be dropped.\n   */\n  beforeNavigate?(this: void, context: TransactionContext): TransactionContext | undefined;\n\n  /**\n   * Instrumentation that creates routing change transactions. By default creates\n   * pageload and navigation transactions.\n   */\n  routingInstrumentation<T extends Transaction>(\n    this: void,\n    customStartTransaction: (context: TransactionContext) => T | undefined,\n    startTransactionOnPageLoad?: boolean,\n    startTransactionOnLocationChange?: boolean,\n  ): void;\n}\n\nconst DEFAULT_BROWSER_TRACING_OPTIONS: BrowserTracingOptions = {\n  ...TRACING_DEFAULTS,\n  markBackgroundTransactions: true,\n  routingInstrumentation: instrumentRoutingWithDefaults,\n  startTransactionOnLocationChange: true,\n  startTransactionOnPageLoad: true,\n  enableLongTask: true,\n  _experiments: {},\n  ...defaultRequestInstrumentationOptions,\n};\n\n/**\n * The Browser Tracing integration automatically instruments browser pageload/navigation\n * actions as transactions, and captures requests, metrics and errors as spans.\n *\n * The integration can be configured with a variety of options, and can be extended to use\n * any routing library. This integration uses {@see IdleTransaction} to create transactions.\n */\nexport class BrowserTracing implements Integration {\n  // This class currently doesn't have a static `id` field like the other integration classes, because it prevented\n  // @sentry/tracing from being treeshaken. Tree shakers do not like static fields, because they behave like side effects.\n  // TODO: Come up with a better plan, than using static fields on integration classes, and use that plan on all\n  // integrations.\n\n  /** Browser Tracing integration options */\n  public options: BrowserTracingOptions;\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  private _getCurrentHub?: () => Hub;\n\n  private _latestRouteName?: string;\n  private _latestRouteSource?: TransactionSource;\n\n  private _collectWebVitals: () => void;\n\n  private _hasSetTracePropagationTargets: boolean;\n\n  public constructor(_options?: Partial<BrowserTracingOptions>) {\n    this.name = BROWSER_TRACING_INTEGRATION_ID;\n    this._hasSetTracePropagationTargets = false;\n\n    addTracingExtensions();\n\n    if (__DEBUG_BUILD__) {\n      this._hasSetTracePropagationTargets = !!(\n        _options &&\n        // eslint-disable-next-line deprecation/deprecation\n        (_options.tracePropagationTargets || _options.tracingOrigins)\n      );\n    }\n\n    this.options = {\n      ...DEFAULT_BROWSER_TRACING_OPTIONS,\n      ..._options,\n    };\n\n    // Special case: enableLongTask can be set in _experiments\n    // TODO (v8): Remove this in v8\n    if (this.options._experiments.enableLongTask !== undefined) {\n      this.options.enableLongTask = this.options._experiments.enableLongTask;\n    }\n\n    // TODO (v8): remove this block after tracingOrigins is removed\n    // Set tracePropagationTargets to tracingOrigins if specified by the user\n    // In case both are specified, tracePropagationTargets takes precedence\n    // eslint-disable-next-line deprecation/deprecation\n    if (_options && !_options.tracePropagationTargets && _options.tracingOrigins) {\n      // eslint-disable-next-line deprecation/deprecation\n      this.options.tracePropagationTargets = _options.tracingOrigins;\n    }\n\n    this._collectWebVitals = startTrackingWebVitals();\n    if (this.options.enableLongTask) {\n      startTrackingLongTasks();\n    }\n    if (this.options._experiments.enableInteractions) {\n      startTrackingInteractions();\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(_: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {\n    this._getCurrentHub = getCurrentHub;\n    const hub = getCurrentHub();\n    const client = hub.getClient();\n    const clientOptions = client && client.getOptions();\n\n    const {\n      routingInstrumentation: instrumentRouting,\n      startTransactionOnLocationChange,\n      startTransactionOnPageLoad,\n      markBackgroundTransactions,\n      traceFetch,\n      traceXHR,\n      shouldCreateSpanForRequest,\n      enableHTTPTimings,\n      _experiments,\n    } = this.options;\n\n    const clientOptionsTracePropagationTargets = clientOptions && clientOptions.tracePropagationTargets;\n    // There are three ways to configure tracePropagationTargets:\n    // 1. via top level client option `tracePropagationTargets`\n    // 2. via BrowserTracing option `tracePropagationTargets`\n    // 3. via BrowserTracing option `tracingOrigins` (deprecated)\n    //\n    // To avoid confusion, favour top level client option `tracePropagationTargets`, and fallback to\n    // BrowserTracing option `tracePropagationTargets` and then `tracingOrigins` (deprecated).\n    // This is done as it minimizes bundle size (we don't have to have undefined checks).\n    //\n    // If both 1 and either one of 2 or 3 are set (from above), we log out a warning.\n    // eslint-disable-next-line deprecation/deprecation\n    const tracePropagationTargets = clientOptionsTracePropagationTargets || this.options.tracePropagationTargets;\n    if (__DEBUG_BUILD__ && this._hasSetTracePropagationTargets && clientOptionsTracePropagationTargets) {\n      logger.warn(\n        '[Tracing] The `tracePropagationTargets` option was set in the BrowserTracing integration and top level `Sentry.init`. The top level `Sentry.init` value is being used.',\n      );\n    }\n\n    instrumentRouting(\n      (context: TransactionContext) => {\n        const transaction = this._createRouteTransaction(context);\n\n        this.options._experiments.onStartRouteTransaction &&\n          this.options._experiments.onStartRouteTransaction(transaction, context, getCurrentHub);\n\n        return transaction;\n      },\n      startTransactionOnPageLoad,\n      startTransactionOnLocationChange,\n    );\n\n    if (markBackgroundTransactions) {\n      registerBackgroundTabDetection();\n    }\n\n    if (_experiments.enableInteractions) {\n      this._registerInteractionListener();\n    }\n\n    instrumentOutgoingRequests({\n      traceFetch,\n      traceXHR,\n      tracePropagationTargets,\n      shouldCreateSpanForRequest,\n      enableHTTPTimings,\n    });\n  }\n\n  /** Create routing idle transaction. */\n  private _createRouteTransaction(context: TransactionContext): Transaction | undefined {\n    if (!this._getCurrentHub) {\n      __DEBUG_BUILD__ &&\n        logger.warn(`[Tracing] Did not create ${context.op} transaction because _getCurrentHub is invalid.`);\n      return undefined;\n    }\n\n    const hub = this._getCurrentHub();\n\n    const { beforeNavigate, idleTimeout, finalTimeout, heartbeatInterval } = this.options;\n\n    const isPageloadTransaction = context.op === 'pageload';\n\n    const sentryTrace = isPageloadTransaction ? getMetaContent('sentry-trace') : '';\n    const baggage = isPageloadTransaction ? getMetaContent('baggage') : '';\n    const { traceparentData, dynamicSamplingContext, propagationContext } = tracingContextFromHeaders(\n      sentryTrace,\n      baggage,\n    );\n\n    const expandedContext: TransactionContext = {\n      ...context,\n      ...traceparentData,\n      metadata: {\n        ...context.metadata,\n        dynamicSamplingContext: traceparentData && !dynamicSamplingContext ? {} : dynamicSamplingContext,\n      },\n      trimEnd: true,\n    };\n\n    const modifiedContext = typeof beforeNavigate === 'function' ? beforeNavigate(expandedContext) : expandedContext;\n\n    // For backwards compatibility reasons, beforeNavigate can return undefined to \"drop\" the transaction (prevent it\n    // from being sent to Sentry).\n    const finalContext = modifiedContext === undefined ? { ...expandedContext, sampled: false } : modifiedContext;\n\n    // If `beforeNavigate` set a custom name, record that fact\n    finalContext.metadata =\n      finalContext.name !== expandedContext.name\n        ? { ...finalContext.metadata, source: 'custom' }\n        : finalContext.metadata;\n\n    this._latestRouteName = finalContext.name;\n    this._latestRouteSource = finalContext.metadata && finalContext.metadata.source;\n\n    if (finalContext.sampled === false) {\n      __DEBUG_BUILD__ &&\n        logger.log(`[Tracing] Will not send ${finalContext.op} transaction because of beforeNavigate.`);\n    }\n\n    __DEBUG_BUILD__ && logger.log(`[Tracing] Starting ${finalContext.op} transaction on scope`);\n\n    const { location } = WINDOW;\n\n    const idleTransaction = startIdleTransaction(\n      hub,\n      finalContext,\n      idleTimeout,\n      finalTimeout,\n      true,\n      { location }, // for use in the tracesSampler\n      heartbeatInterval,\n    );\n\n    const scope = hub.getScope();\n\n    // If it's a pageload and there is a meta tag set\n    // use the traceparentData as the propagation context\n    if (isPageloadTransaction && traceparentData) {\n      scope.setPropagationContext(propagationContext);\n    } else {\n      // Navigation transactions should set a new propagation context based on the\n      // created idle transaction.\n      scope.setPropagationContext({\n        traceId: idleTransaction.traceId,\n        spanId: idleTransaction.spanId,\n        parentSpanId: idleTransaction.parentSpanId,\n        sampled: idleTransaction.sampled,\n      });\n    }\n\n    idleTransaction.registerBeforeFinishCallback(transaction => {\n      this._collectWebVitals();\n      addPerformanceEntries(transaction);\n    });\n\n    return idleTransaction as Transaction;\n  }\n\n  /** Start listener for interaction transactions */\n  private _registerInteractionListener(): void {\n    let inflightInteractionTransaction: IdleTransaction | undefined;\n    const registerInteractionTransaction = (): void => {\n      const { idleTimeout, finalTimeout, heartbeatInterval } = this.options;\n      const op = 'ui.action.click';\n\n      const currentTransaction = getActiveTransaction();\n      if (currentTransaction && currentTransaction.op && ['navigation', 'pageload'].includes(currentTransaction.op)) {\n        __DEBUG_BUILD__ &&\n          logger.warn(\n            `[Tracing] Did not create ${op} transaction because a pageload or navigation transaction is in progress.`,\n          );\n        return undefined;\n      }\n\n      if (inflightInteractionTransaction) {\n        inflightInteractionTransaction.setFinishReason('interactionInterrupted');\n        inflightInteractionTransaction.finish();\n        inflightInteractionTransaction = undefined;\n      }\n\n      if (!this._getCurrentHub) {\n        __DEBUG_BUILD__ && logger.warn(`[Tracing] Did not create ${op} transaction because _getCurrentHub is invalid.`);\n        return undefined;\n      }\n\n      if (!this._latestRouteName) {\n        __DEBUG_BUILD__ &&\n          logger.warn(`[Tracing] Did not create ${op} transaction because _latestRouteName is missing.`);\n        return undefined;\n      }\n\n      const hub = this._getCurrentHub();\n      const { location } = WINDOW;\n\n      const context: TransactionContext = {\n        name: this._latestRouteName,\n        op,\n        trimEnd: true,\n        metadata: {\n          source: this._latestRouteSource || 'url',\n        },\n      };\n\n      inflightInteractionTransaction = startIdleTransaction(\n        hub,\n        context,\n        idleTimeout,\n        finalTimeout,\n        true,\n        { location }, // for use in the tracesSampler\n        heartbeatInterval,\n      );\n    };\n\n    ['click'].forEach(type => {\n      addEventListener(type, registerInteractionTransaction, { once: false, capture: true });\n    });\n  }\n}\n\n/** Returns the value of a meta tag */\nexport function getMetaContent(metaName: string): string | undefined {\n  // Can't specify generic to `getDomElement` because tracing can be used\n  // in a variety of environments, have to disable `no-unsafe-member-access`\n  // as a result.\n  const metaTag = getDomElement(`meta[name=${metaName}]`);\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  return metaTag ? metaTag.getAttribute('content') : undefined;\n}\n","import type { Transaction, TransactionContext } from '@sentry/types';\nimport { addInstrumentationHandler, browserPerformanceTimeOrigin, logger } from '@sentry/utils';\n\nimport { WINDOW } from './types';\n\n/**\n * Default function implementing pageload and navigation transactions\n */\nexport function instrumentRoutingWithDefaults<T extends Transaction>(\n  customStartTransaction: (context: TransactionContext) => T | undefined,\n  startTransactionOnPageLoad: boolean = true,\n  startTransactionOnLocationChange: boolean = true,\n): void {\n  if (!WINDOW || !WINDOW.location) {\n    __DEBUG_BUILD__ && logger.warn('Could not initialize routing instrumentation due to invalid location');\n    return;\n  }\n\n  let startingUrl: string | undefined = WINDOW.location.href;\n\n  let activeTransaction: T | undefined;\n  if (startTransactionOnPageLoad) {\n    activeTransaction = customStartTransaction({\n      name: WINDOW.location.pathname,\n      // pageload should always start at timeOrigin (and needs to be in s, not ms)\n      startTimestamp: browserPerformanceTimeOrigin ? browserPerformanceTimeOrigin / 1000 : undefined,\n      op: 'pageload',\n      origin: 'auto.pageload.browser',\n      metadata: { source: 'url' },\n    });\n  }\n\n  if (startTransactionOnLocationChange) {\n    addInstrumentationHandler('history', ({ to, from }: { to: string; from?: string }) => {\n      /**\n       * This early return is there to account for some cases where a navigation transaction starts right after\n       * long-running pageload. We make sure that if `from` is undefined and a valid `startingURL` exists, we don't\n       * create an uneccessary navigation transaction.\n       *\n       * This was hard to duplicate, but this behavior stopped as soon as this fix was applied. This issue might also\n       * only be caused in certain development environments where the usage of a hot module reloader is causing\n       * errors.\n       */\n      if (from === undefined && startingUrl && startingUrl.indexOf(to) !== -1) {\n        startingUrl = undefined;\n        return;\n      }\n\n      if (from !== to) {\n        startingUrl = undefined;\n        if (activeTransaction) {\n          __DEBUG_BUILD__ && logger.log(`[Tracing] Finishing current transaction with op: ${activeTransaction.op}`);\n          // If there's an open transaction on the scope, we need to finish it before creating an new one.\n          activeTransaction.finish();\n        }\n        activeTransaction = customStartTransaction({\n          name: WINDOW.location.pathname,\n          op: 'navigation',\n          origin: 'auto.navigation.browser',\n          metadata: { source: 'url' },\n        });\n      }\n    });\n  }\n}\n","import type { IdleTransaction, SpanStatusType } from '@sentry/core';\nimport { getActiveTransaction } from '@sentry/core';\nimport { logger } from '@sentry/utils';\n\nimport { WINDOW } from './types';\n\n/**\n * Add a listener that cancels and finishes a transaction when the global\n * document is hidden.\n */\nexport function registerBackgroundTabDetection(): void {\n  if (WINDOW && WINDOW.document) {\n    WINDOW.document.addEventListener('visibilitychange', () => {\n      const activeTransaction = getActiveTransaction() as IdleTransaction;\n      if (WINDOW.document.hidden && activeTransaction) {\n        const statusType: SpanStatusType = 'cancelled';\n\n        __DEBUG_BUILD__ &&\n          logger.log(\n            `[Tracing] Transaction: ${statusType} -> since tab moved to the background, op: ${activeTransaction.op}`,\n          );\n        // We should not set status if it is already set, this prevent important statuses like\n        // error or data loss from being overwritten on transaction.\n        if (!activeTransaction.status) {\n          activeTransaction.setStatus(statusType);\n        }\n        activeTransaction.setTag('visibilitychange', 'document.hidden');\n        activeTransaction.finish();\n      }\n    });\n  } else {\n    __DEBUG_BUILD__ &&\n      logger.warn('[Tracing] Could not set up background tab detection due to lack of global document');\n  }\n}\n","import type { Envelope, InternalBaseTransportOptions, Transport, TransportMakeRequestResponse } from '@sentry/types';\nimport { envelopeContainsItemType, logger, parseRetryAfterHeader } from '@sentry/utils';\n\nexport const MIN_DELAY = 100; // 100 ms\nexport const START_DELAY = 5_000; // 5 seconds\nconst MAX_DELAY = 3.6e6; // 1 hour\n\nfunction log(msg: string, error?: Error): void {\n  __DEBUG_BUILD__ && logger.info(`[Offline]: ${msg}`, error);\n}\n\nexport interface OfflineStore {\n  insert(env: Envelope): Promise<void>;\n  pop(): Promise<Envelope | undefined>;\n}\n\nexport type CreateOfflineStore = (options: OfflineTransportOptions) => OfflineStore;\n\nexport interface OfflineTransportOptions extends InternalBaseTransportOptions {\n  /**\n   * A function that creates the offline store instance.\n   */\n  createStore?: CreateOfflineStore;\n\n  /**\n   * Flush the offline store shortly after startup.\n   *\n   * Defaults: false\n   */\n  flushAtStartup?: boolean;\n\n  /**\n   * Called before an event is stored.\n   *\n   * Return false to drop the envelope rather than store it.\n   *\n   * @param envelope The envelope that failed to send.\n   * @param error The error that occurred.\n   * @param retryDelay The current retry delay in milliseconds.\n   */\n  shouldStore?: (envelope: Envelope, error: Error, retryDelay: number) => boolean | Promise<boolean>;\n}\n\ntype Timer = number | { unref?: () => void };\n\n/**\n * Wraps a transport and stores and retries events when they fail to send.\n *\n * @param createTransport The transport to wrap.\n */\nexport function makeOfflineTransport<TO>(\n  createTransport: (options: TO) => Transport,\n): (options: TO & OfflineTransportOptions) => Transport {\n  return options => {\n    const transport = createTransport(options);\n    const store = options.createStore ? options.createStore(options) : undefined;\n\n    let retryDelay = START_DELAY;\n    let flushTimer: Timer | undefined;\n\n    function shouldQueue(env: Envelope, error: Error, retryDelay: number): boolean | Promise<boolean> {\n      // We don't queue Session Replay envelopes because they are:\n      // - Ordered and Replay relies on the response status to know when they're successfully sent.\n      // - Likely to fill the queue quickly and block other events from being sent.\n      // We also want to drop client reports because they can be generated when we retry sending events while offline.\n      if (envelopeContainsItemType(env, ['replay_event', 'replay_recording', 'client_report'])) {\n        return false;\n      }\n\n      if (options.shouldStore) {\n        return options.shouldStore(env, error, retryDelay);\n      }\n\n      return true;\n    }\n\n    function flushIn(delay: number): void {\n      if (!store) {\n        return;\n      }\n\n      if (flushTimer) {\n        clearTimeout(flushTimer as ReturnType<typeof setTimeout>);\n      }\n\n      flushTimer = setTimeout(async () => {\n        flushTimer = undefined;\n\n        const found = await store.pop();\n        if (found) {\n          log('Attempting to send previously queued event');\n          void send(found).catch(e => {\n            log('Failed to retry sending', e);\n          });\n        }\n      }, delay) as Timer;\n\n      // We need to unref the timer in node.js, otherwise the node process never exit.\n      if (typeof flushTimer !== 'number' && flushTimer.unref) {\n        flushTimer.unref();\n      }\n    }\n\n    function flushWithBackOff(): void {\n      if (flushTimer) {\n        return;\n      }\n\n      flushIn(retryDelay);\n\n      retryDelay = Math.min(retryDelay * 2, MAX_DELAY);\n    }\n\n    async function send(envelope: Envelope): Promise<void | TransportMakeRequestResponse> {\n      try {\n        const result = await transport.send(envelope);\n\n        let delay = MIN_DELAY;\n\n        if (result) {\n          // If there's a retry-after header, use that as the next delay.\n          if (result.headers && result.headers['retry-after']) {\n            delay = parseRetryAfterHeader(result.headers['retry-after']);\n          } // If we have a server error, return now so we don't flush the queue.\n          else if ((result.statusCode || 0) >= 400) {\n            return result;\n          }\n        }\n\n        flushIn(delay);\n        retryDelay = START_DELAY;\n        return result;\n      } catch (e) {\n        if (store && (await shouldQueue(envelope, e as Error, retryDelay))) {\n          await store.insert(envelope);\n          flushWithBackOff();\n          log('Error sending. Event queued', e as Error);\n          return {};\n        } else {\n          throw e;\n        }\n      }\n    }\n\n    if (options.flushAtStartup) {\n      flushWithBackOff();\n    }\n\n    return {\n      send,\n      flush: t => transport.flush(t),\n    };\n  };\n}\n","import type { OfflineStore, OfflineTransportOptions } from '@sentry/core';\nimport { makeOfflineTransport } from '@sentry/core';\nimport type { Envelope, InternalBaseTransportOptions, Transport } from '@sentry/types';\nimport type { TextDecoderInternal } from '@sentry/utils';\nimport { parseEnvelope, serializeEnvelope } from '@sentry/utils';\n\n// 'Store', 'promisifyRequest' and 'createStore' were originally copied from the 'idb-keyval' package before being\n// modified and simplified: https://github.com/jakearchibald/idb-keyval\n//\n// At commit: 0420a704fd6cbb4225429c536b1f61112d012fca\n// Original licence:\n\n// Copyright 2016, Jake Archibald\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//   http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\ntype Store = <T>(callback: (store: IDBObjectStore) => T | PromiseLike<T>) => Promise<T>;\n\nfunction promisifyRequest<T = undefined>(request: IDBRequest<T> | IDBTransaction): Promise<T> {\n  return new Promise<T>((resolve, reject) => {\n    // @ts-expect-error - file size hacks\n    request.oncomplete = request.onsuccess = () => resolve(request.result);\n    // @ts-expect-error - file size hacks\n    request.onabort = request.onerror = () => reject(request.error);\n  });\n}\n\n/** Create or open an IndexedDb store */\nexport function createStore(dbName: string, storeName: string): Store {\n  const request = indexedDB.open(dbName);\n  request.onupgradeneeded = () => request.result.createObjectStore(storeName);\n  const dbp = promisifyRequest(request);\n\n  return callback => dbp.then(db => callback(db.transaction(storeName, 'readwrite').objectStore(storeName)));\n}\n\nfunction keys(store: IDBObjectStore): Promise<number[]> {\n  return promisifyRequest(store.getAllKeys() as IDBRequest<number[]>);\n}\n\n/** Insert into the store */\nexport function insert(store: Store, value: Uint8Array | string, maxQueueSize: number): Promise<void> {\n  return store(store => {\n    return keys(store).then(keys => {\n      if (keys.length >= maxQueueSize) {\n        return;\n      }\n\n      // We insert with an incremented key so that the entries are popped in order\n      store.put(value, Math.max(...keys, 0) + 1);\n      return promisifyRequest(store.transaction);\n    });\n  });\n}\n\n/** Pop the oldest value from the store */\nexport function pop(store: Store): Promise<Uint8Array | string | undefined> {\n  return store(store => {\n    return keys(store).then(keys => {\n      if (keys.length === 0) {\n        return undefined;\n      }\n\n      return promisifyRequest(store.get(keys[0])).then(value => {\n        store.delete(keys[0]);\n        return promisifyRequest(store.transaction).then(() => value);\n      });\n    });\n  });\n}\n\nexport interface BrowserOfflineTransportOptions extends OfflineTransportOptions {\n  /**\n   * Name of indexedDb database to store envelopes in\n   * Default: 'sentry-offline'\n   */\n  dbName?: string;\n  /**\n   * Name of indexedDb object store to store envelopes in\n   * Default: 'queue'\n   */\n  storeName?: string;\n  /**\n   * Maximum number of envelopes to store\n   * Default: 30\n   */\n  maxQueueSize?: number;\n  /**\n   * Only required for testing on node.js\n   * @ignore\n   */\n  textDecoder?: TextDecoderInternal;\n}\n\nfunction createIndexedDbStore(options: BrowserOfflineTransportOptions): OfflineStore {\n  let store: Store | undefined;\n\n  // Lazily create the store only when it's needed\n  function getStore(): Store {\n    if (store == undefined) {\n      store = createStore(options.dbName || 'sentry-offline', options.storeName || 'queue');\n    }\n\n    return store;\n  }\n\n  return {\n    insert: async (env: Envelope) => {\n      try {\n        const serialized = await serializeEnvelope(env, options.textEncoder);\n        await insert(getStore(), serialized, options.maxQueueSize || 30);\n      } catch (_) {\n        //\n      }\n    },\n    pop: async () => {\n      try {\n        const deserialized = await pop(getStore());\n        if (deserialized) {\n          return parseEnvelope(\n            deserialized,\n            options.textEncoder || new TextEncoder(),\n            options.textDecoder || new TextDecoder(),\n          );\n        }\n      } catch (_) {\n        //\n      }\n\n      return undefined;\n    },\n  };\n}\n\nfunction makeIndexedDbOfflineTransport<T>(\n  createTransport: (options: T) => Transport,\n): (options: T & BrowserOfflineTransportOptions) => Transport {\n  return options => createTransport({ ...options, createStore: createIndexedDbStore });\n}\n\n/**\n * Creates a transport that uses IndexedDb to store events when offline.\n */\nexport function makeBrowserOfflineTransport<T extends InternalBaseTransportOptions>(\n  createTransport: (options: T) => Transport,\n): (options: T & BrowserOfflineTransportOptions) => Transport {\n  return makeIndexedDbOfflineTransport<T>(makeOfflineTransport(createTransport));\n}\n","/* eslint-disable max-lines */\n\nimport { DEFAULT_ENVIRONMENT, getCurrentHub } from '@sentry/core';\nimport type { DebugImage, Envelope, Event, StackFrame, StackParser, Transaction } from '@sentry/types';\nimport type { Profile, ThreadCpuProfile } from '@sentry/types/src/profiling';\nimport { browserPerformanceTimeOrigin, forEachEnvelopeItem, GLOBAL_OBJ, logger, uuid4 } from '@sentry/utils';\n\nimport { WINDOW } from '../helpers';\nimport type { JSSelfProfile, JSSelfProfiler, JSSelfProfilerConstructor, JSSelfProfileStack } from './jsSelfProfiling';\n\nconst MS_TO_NS = 1e6;\n// Use 0 as main thread id which is identical to threadId in node:worker_threads\n// where main logs 0 and workers seem to log in increments of 1\nconst THREAD_ID_STRING = String(0);\nconst THREAD_NAME = 'main';\n\n// Machine properties (eval only once)\nlet OS_PLATFORM = '';\nlet OS_PLATFORM_VERSION = '';\nlet OS_ARCH = '';\nlet OS_BROWSER = (WINDOW.navigator && WINDOW.navigator.userAgent) || '';\nlet OS_MODEL = '';\nconst OS_LOCALE =\n  (WINDOW.navigator && WINDOW.navigator.language) ||\n  (WINDOW.navigator && WINDOW.navigator.languages && WINDOW.navigator.languages[0]) ||\n  '';\n\ntype UAData = {\n  platform?: string;\n  architecture?: string;\n  model?: string;\n  platformVersion?: string;\n  fullVersionList?: {\n    brand: string;\n    version: string;\n  }[];\n};\n\ninterface UserAgentData {\n  getHighEntropyValues: (keys: string[]) => Promise<UAData>;\n}\n\nfunction isUserAgentData(data: unknown): data is UserAgentData {\n  return typeof data === 'object' && data !== null && 'getHighEntropyValues' in data;\n}\n\n// @ts-expect-error userAgentData is not part of the navigator interface yet\nconst userAgentData = WINDOW.navigator && WINDOW.navigator.userAgentData;\n\nif (isUserAgentData(userAgentData)) {\n  userAgentData\n    .getHighEntropyValues(['architecture', 'model', 'platform', 'platformVersion', 'fullVersionList'])\n    .then((ua: UAData) => {\n      OS_PLATFORM = ua.platform || '';\n      OS_ARCH = ua.architecture || '';\n      OS_MODEL = ua.model || '';\n      OS_PLATFORM_VERSION = ua.platformVersion || '';\n\n      if (ua.fullVersionList && ua.fullVersionList.length > 0) {\n        const firstUa = ua.fullVersionList[ua.fullVersionList.length - 1];\n        OS_BROWSER = `${firstUa.brand} ${firstUa.version}`;\n      }\n    })\n    .catch(e => void e);\n}\n\nfunction isProcessedJSSelfProfile(profile: ThreadCpuProfile | JSSelfProfile): profile is JSSelfProfile {\n  return !('thread_metadata' in profile);\n}\n\n// Enriches the profile with threadId of the current thread.\n// This is done in node as we seem to not be able to get the info from C native code.\n/**\n *\n */\nexport function enrichWithThreadInformation(profile: ThreadCpuProfile | JSSelfProfile): ThreadCpuProfile {\n  if (!isProcessedJSSelfProfile(profile)) {\n    return profile;\n  }\n\n  return convertJSSelfProfileToSampledFormat(profile);\n}\n\n// Profile is marked as optional because it is deleted from the metadata\n// by the integration before the event is processed by other integrations.\nexport interface ProfiledEvent extends Event {\n  sdkProcessingMetadata: {\n    profile?: JSSelfProfile;\n  };\n}\n\nfunction getTraceId(event: Event): string {\n  const traceId: unknown = event && event.contexts && event.contexts['trace'] && event.contexts['trace']['trace_id'];\n  // Log a warning if the profile has an invalid traceId (should be uuidv4).\n  // All profiles and transactions are rejected if this is the case and we want to\n  // warn users that this is happening if they enable debug flag\n  if (typeof traceId === 'string' && traceId.length !== 32) {\n    if (__DEBUG_BUILD__) {\n      logger.log(`[Profiling] Invalid traceId: ${traceId} on profiled event`);\n    }\n  }\n  if (typeof traceId !== 'string') {\n    return '';\n  }\n\n  return traceId;\n}\n/**\n * Creates a profiling event envelope from a Sentry event. If profile does not pass\n * validation, returns null.\n * @param event\n * @param dsn\n * @param metadata\n * @param tunnel\n * @returns {EventEnvelope | null}\n */\n\n/**\n * Creates a profiling event envelope from a Sentry event.\n */\nexport function createProfilePayload(\n  profile_id: string,\n  start_timestamp: number | undefined,\n  processed_profile: JSSelfProfile,\n  event: ProfiledEvent,\n): Profile {\n  if (event.type !== 'transaction') {\n    // createProfilingEventEnvelope should only be called for transactions,\n    // we type guard this behavior with isProfiledTransactionEvent.\n    throw new TypeError('Profiling events may only be attached to transactions, this should never occur.');\n  }\n\n  if (processed_profile === undefined || processed_profile === null) {\n    throw new TypeError(\n      `Cannot construct profiling event envelope without a valid profile. Got ${processed_profile} instead.`,\n    );\n  }\n\n  const traceId = getTraceId(event);\n  const enrichedThreadProfile = enrichWithThreadInformation(processed_profile);\n  const transactionStartMs = start_timestamp\n    ? start_timestamp\n    : typeof event.start_timestamp === 'number'\n    ? event.start_timestamp * 1000\n    : Date.now();\n  const transactionEndMs = typeof event.timestamp === 'number' ? event.timestamp * 1000 : Date.now();\n\n  const profile: Profile = {\n    event_id: profile_id,\n    timestamp: new Date(transactionStartMs).toISOString(),\n    platform: 'javascript',\n    version: '1',\n    release: event.release || '',\n    environment: event.environment || DEFAULT_ENVIRONMENT,\n    runtime: {\n      name: 'javascript',\n      version: WINDOW.navigator.userAgent,\n    },\n    os: {\n      name: OS_PLATFORM,\n      version: OS_PLATFORM_VERSION,\n      build_number: OS_BROWSER,\n    },\n    device: {\n      locale: OS_LOCALE,\n      model: OS_MODEL,\n      manufacturer: OS_BROWSER,\n      architecture: OS_ARCH,\n      is_emulator: false,\n    },\n    debug_meta: {\n      images: applyDebugMetadata(processed_profile.resources),\n    },\n    profile: enrichedThreadProfile,\n    transactions: [\n      {\n        name: event.transaction || '',\n        id: event.event_id || uuid4(),\n        trace_id: traceId,\n        active_thread_id: THREAD_ID_STRING,\n        relative_start_ns: '0',\n        relative_end_ns: ((transactionEndMs - transactionStartMs) * 1e6).toFixed(0),\n      },\n    ],\n  };\n\n  return profile;\n}\n\n/**\n *\n */\nexport function isProfiledTransactionEvent(event: Event): event is ProfiledEvent {\n  return !!(event.sdkProcessingMetadata && event.sdkProcessingMetadata['profile']);\n}\n\n/*\n  See packages/tracing-internal/src/browser/router.ts\n*/\n/**\n *\n */\nexport function isAutomatedPageLoadTransaction(transaction: Transaction): boolean {\n  return transaction.op === 'pageload';\n}\n\n/**\n * Converts a JSSelfProfile to a our sampled format.\n * Does not currently perform stack indexing.\n */\nexport function convertJSSelfProfileToSampledFormat(input: JSSelfProfile): Profile['profile'] {\n  let EMPTY_STACK_ID: undefined | number = undefined;\n  let STACK_ID = 0;\n\n  // Initialize the profile that we will fill with data\n  const profile: Profile['profile'] = {\n    samples: [],\n    stacks: [],\n    frames: [],\n    thread_metadata: {\n      [THREAD_ID_STRING]: { name: THREAD_NAME },\n    },\n  };\n\n  if (!input.samples.length) {\n    return profile;\n  }\n\n  // We assert samples.length > 0 above and timestamp should always be present\n  const start = input.samples[0].timestamp;\n  // The JS SDK might change it's time origin based on some heuristic (see See packages/utils/src/time.ts)\n  // when that happens, we need to ensure we are correcting the profile timings so the two timelines stay in sync.\n  // Since JS self profiling time origin is always initialized to performance.timeOrigin, we need to adjust for\n  // the drift between the SDK selected value and our profile time origin.\n  const origin =\n    typeof performance.timeOrigin === 'number' ? performance.timeOrigin : browserPerformanceTimeOrigin || 0;\n  const adjustForOriginChange = origin - (browserPerformanceTimeOrigin || origin);\n\n  for (let i = 0; i < input.samples.length; i++) {\n    const jsSample = input.samples[i];\n\n    // If sample has no stack, add an empty sample\n    if (jsSample.stackId === undefined) {\n      if (EMPTY_STACK_ID === undefined) {\n        EMPTY_STACK_ID = STACK_ID;\n        profile.stacks[EMPTY_STACK_ID] = [];\n        STACK_ID++;\n      }\n\n      profile['samples'][i] = {\n        // convert ms timestamp to ns\n        elapsed_since_start_ns: ((jsSample.timestamp + adjustForOriginChange - start) * MS_TO_NS).toFixed(0),\n        stack_id: EMPTY_STACK_ID,\n        thread_id: THREAD_ID_STRING,\n      };\n      continue;\n    }\n\n    let stackTop: JSSelfProfileStack | undefined = input.stacks[jsSample.stackId];\n\n    // Functions in top->down order (root is last)\n    // We follow the stackTop.parentId trail and collect each visited frameId\n    const stack: number[] = [];\n\n    while (stackTop) {\n      stack.push(stackTop.frameId);\n\n      const frame = input.frames[stackTop.frameId];\n\n      // If our frame has not been indexed yet, index it\n      if (profile.frames[stackTop.frameId] === undefined) {\n        profile.frames[stackTop.frameId] = {\n          function: frame.name,\n          abs_path: typeof frame.resourceId === 'number' ? input.resources[frame.resourceId] : undefined,\n          lineno: frame.line,\n          colno: frame.column,\n        };\n      }\n\n      stackTop = stackTop.parentId === undefined ? undefined : input.stacks[stackTop.parentId];\n    }\n\n    const sample: Profile['profile']['samples'][0] = {\n      // convert ms timestamp to ns\n      elapsed_since_start_ns: ((jsSample.timestamp + adjustForOriginChange - start) * MS_TO_NS).toFixed(0),\n      stack_id: STACK_ID,\n      thread_id: THREAD_ID_STRING,\n    };\n\n    profile['stacks'][STACK_ID] = stack;\n    profile['samples'][i] = sample;\n    STACK_ID++;\n  }\n\n  return profile;\n}\n\n/**\n * Adds items to envelope if they are not already present - mutates the envelope.\n * @param envelope\n */\nexport function addProfilesToEnvelope(envelope: Envelope, profiles: Profile[]): Envelope {\n  if (!profiles.length) {\n    return envelope;\n  }\n\n  for (const profile of profiles) {\n    // @ts-expect-error untyped envelope\n    envelope[1].push([{ type: 'profile' }, profile]);\n  }\n  return envelope;\n}\n\n/**\n * Finds transactions with profile_id context in the envelope\n * @param envelope\n * @returns\n */\nexport function findProfiledTransactionsFromEnvelope(envelope: Envelope): Event[] {\n  const events: Event[] = [];\n\n  forEachEnvelopeItem(envelope, (item, type) => {\n    if (type !== 'transaction') {\n      return;\n    }\n\n    for (let j = 1; j < item.length; j++) {\n      const event = item[j] as Event;\n\n      if (event && event.contexts && event.contexts['profile'] && event.contexts['profile']['profile_id']) {\n        events.push(item[j] as Event);\n      }\n    }\n  });\n\n  return events;\n}\n\nconst debugIdStackParserCache = new WeakMap<StackParser, Map<string, StackFrame[]>>();\n/**\n * Applies debug meta data to an event from a list of paths to resources (sourcemaps)\n */\nexport function applyDebugMetadata(resource_paths: ReadonlyArray<string>): DebugImage[] {\n  const debugIdMap = GLOBAL_OBJ._sentryDebugIds;\n\n  if (!debugIdMap) {\n    return [];\n  }\n\n  const hub = getCurrentHub();\n  if (!hub) {\n    return [];\n  }\n  const client = hub.getClient();\n  if (!client) {\n    return [];\n  }\n  const options = client.getOptions();\n  if (!options) {\n    return [];\n  }\n  const stackParser = options.stackParser;\n  if (!stackParser) {\n    return [];\n  }\n\n  let debugIdStackFramesCache: Map<string, StackFrame[]>;\n  const cachedDebugIdStackFrameCache = debugIdStackParserCache.get(stackParser);\n  if (cachedDebugIdStackFrameCache) {\n    debugIdStackFramesCache = cachedDebugIdStackFrameCache;\n  } else {\n    debugIdStackFramesCache = new Map<string, StackFrame[]>();\n    debugIdStackParserCache.set(stackParser, debugIdStackFramesCache);\n  }\n\n  // Build a map of filename -> debug_id\n  const filenameDebugIdMap = Object.keys(debugIdMap).reduce<Record<string, string>>((acc, debugIdStackTrace) => {\n    let parsedStack: StackFrame[];\n\n    const cachedParsedStack = debugIdStackFramesCache.get(debugIdStackTrace);\n    if (cachedParsedStack) {\n      parsedStack = cachedParsedStack;\n    } else {\n      parsedStack = stackParser(debugIdStackTrace);\n      debugIdStackFramesCache.set(debugIdStackTrace, parsedStack);\n    }\n\n    for (let i = parsedStack.length - 1; i >= 0; i--) {\n      const stackFrame = parsedStack[i];\n      const file = stackFrame && stackFrame.filename;\n\n      if (stackFrame && file) {\n        acc[file] = debugIdMap[debugIdStackTrace] as string;\n        break;\n      }\n    }\n    return acc;\n  }, {});\n\n  const images: DebugImage[] = [];\n  for (const path of resource_paths) {\n    if (path && filenameDebugIdMap[path]) {\n      images.push({\n        type: 'sourcemap',\n        code_file: path,\n        debug_id: filenameDebugIdMap[path] as string,\n      });\n    }\n  }\n\n  return images;\n}\n\n/**\n * Checks the given sample rate to make sure it is valid type and value (a boolean, or a number between 0 and 1).\n */\nexport function isValidSampleRate(rate: unknown): boolean {\n  // we need to check NaN explicitly because it's of type 'number' and therefore wouldn't get caught by this typecheck\n  if ((typeof rate !== 'number' && typeof rate !== 'boolean') || (typeof rate === 'number' && isNaN(rate))) {\n    __DEBUG_BUILD__ &&\n      logger.warn(\n        `[Profiling] Invalid sample rate. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify(\n          rate,\n        )} of type ${JSON.stringify(typeof rate)}.`,\n      );\n    return false;\n  }\n\n  // Boolean sample rates are always valid\n  if (rate === true || rate === false) {\n    return true;\n  }\n\n  // in case sampleRate is a boolean, it will get automatically cast to 1 if it's true and 0 if it's false\n  if (rate < 0 || rate > 1) {\n    __DEBUG_BUILD__ &&\n      logger.warn(`[Profiling] Invalid sample rate. Sample rate must be between 0 and 1. Got ${rate}.`);\n    return false;\n  }\n  return true;\n}\n\nfunction isValidProfile(profile: JSSelfProfile): profile is JSSelfProfile & { profile_id: string } {\n  if (profile.samples.length < 2) {\n    if (__DEBUG_BUILD__) {\n      // Log a warning if the profile has less than 2 samples so users can know why\n      // they are not seeing any profiling data and we cant avoid the back and forth\n      // of asking them to provide us with a dump of the profile data.\n      logger.log('[Profiling] Discarding profile because it contains less than 2 samples');\n    }\n    return false;\n  }\n\n  if (!profile.frames.length) {\n    if (__DEBUG_BUILD__) {\n      logger.log('[Profiling] Discarding profile because it contains no frames');\n    }\n    return false;\n  }\n\n  return true;\n}\n\n// Keep a flag value to avoid re-initializing the profiler constructor. If it fails\n// once, it will always fail and this allows us to early return.\nlet PROFILING_CONSTRUCTOR_FAILED: boolean = false;\nexport const MAX_PROFILE_DURATION_MS = 30_000;\n\n/**\n * Check if profiler constructor is available.\n * @param maybeProfiler\n */\nfunction isJSProfilerSupported(maybeProfiler: unknown): maybeProfiler is typeof JSSelfProfilerConstructor {\n  return typeof maybeProfiler === 'function';\n}\n\n/**\n * Starts the profiler and returns the profiler instance.\n */\nexport function startJSSelfProfile(): JSSelfProfiler | undefined {\n  // Feature support check first\n  const JSProfilerConstructor = WINDOW.Profiler;\n\n  if (!isJSProfilerSupported(JSProfilerConstructor)) {\n    if (__DEBUG_BUILD__) {\n      logger.log(\n        '[Profiling] Profiling is not supported by this browser, Profiler interface missing on window object.',\n      );\n    }\n    return;\n  }\n\n  // From initial testing, it seems that the minimum value for sampleInterval is 10ms.\n  const samplingIntervalMS = 10;\n  // Start the profiler\n  const maxSamples = Math.floor(MAX_PROFILE_DURATION_MS / samplingIntervalMS);\n\n  // Attempt to initialize the profiler constructor, if it fails, we disable profiling for the current user session.\n  // This is likely due to a missing 'Document-Policy': 'js-profiling' header. We do not want to throw an error if this happens\n  // as we risk breaking the user's application, so just disable profiling and log an error.\n  try {\n    return new JSProfilerConstructor({ sampleInterval: samplingIntervalMS, maxBufferSize: maxSamples });\n  } catch (e) {\n    if (__DEBUG_BUILD__) {\n      logger.log(\n        \"[Profiling] Failed to initialize the Profiling constructor, this is likely due to a missing 'Document-Policy': 'js-profiling' header.\",\n      );\n      logger.log('[Profiling] Disabling profiling for current user session.');\n    }\n    PROFILING_CONSTRUCTOR_FAILED = true;\n  }\n\n  return;\n}\n\n/**\n * Determine if a profile should be profiled.\n */\nexport function shouldProfileTransaction(transaction: Transaction): boolean {\n  // If constructor failed once, it will always fail, so we can early return.\n  if (PROFILING_CONSTRUCTOR_FAILED) {\n    if (__DEBUG_BUILD__) {\n      logger.log('[Profiling] Profiling has been disabled for the duration of the current user session.');\n    }\n    return false;\n  }\n\n  if (!transaction.sampled) {\n    if (__DEBUG_BUILD__) {\n      logger.log('[Profiling] Discarding profile because transaction was not sampled.');\n    }\n    return false;\n  }\n\n  const client = getCurrentHub().getClient();\n  const options = client && client.getOptions();\n  if (!options) {\n    __DEBUG_BUILD__ && logger.log('[Profiling] Profiling disabled, no options found.');\n    return false;\n  }\n\n  // @ts-expect-error profilesSampleRate is not part of the browser options yet\n  const profilesSampleRate: number | boolean | undefined = options.profilesSampleRate;\n\n  // Since this is coming from the user (or from a function provided by the user), who knows what we might get. (The\n  // only valid values are booleans or numbers between 0 and 1.)\n  if (!isValidSampleRate(profilesSampleRate)) {\n    __DEBUG_BUILD__ && logger.warn('[Profiling] Discarding profile because of invalid sample rate.');\n    return false;\n  }\n\n  // if the function returned 0 (or false), or if `profileSampleRate` is 0, it's a sign the profile should be dropped\n  if (!profilesSampleRate) {\n    __DEBUG_BUILD__ &&\n      logger.log(\n        '[Profiling] Discarding profile because a negative sampling decision was inherited or profileSampleRate is set to 0',\n      );\n    return false;\n  }\n\n  // Now we roll the dice. Math.random is inclusive of 0, but not of 1, so strict < is safe here. In case sampleRate is\n  // a boolean, the < comparison will cause it to be automatically cast to 1 if it's true and 0 if it's false.\n  const sampled = profilesSampleRate === true ? true : Math.random() < profilesSampleRate;\n  // Check if we should sample this profile\n  if (!sampled) {\n    __DEBUG_BUILD__ &&\n      logger.log(\n        `[Profiling] Discarding profile because it's not included in the random sample (sampling rate = ${Number(\n          profilesSampleRate,\n        )})`,\n      );\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Creates a profiling envelope item, if the profile does not pass validation, returns null.\n * @param event\n * @returns {Profile | null}\n */\nexport function createProfilingEvent(\n  profile_id: string,\n  start_timestamp: number | undefined,\n  profile: JSSelfProfile,\n  event: ProfiledEvent,\n): Profile | null {\n  if (!isValidProfile(profile)) {\n    return null;\n  }\n\n  return createProfilePayload(profile_id, start_timestamp, profile, event);\n}\n\nconst PROFILE_MAP: Map<string, JSSelfProfile> = new Map();\n/**\n *\n */\nexport function getActiveProfilesCount(): number {\n  return PROFILE_MAP.size;\n}\n\n/**\n * Retrieves profile from global cache and removes it.\n */\nexport function takeProfileFromGlobalCache(profile_id: string): JSSelfProfile | undefined {\n  const profile = PROFILE_MAP.get(profile_id);\n  if (profile) {\n    PROFILE_MAP.delete(profile_id);\n  }\n  return profile;\n}\n/**\n * Adds profile to global cache and evicts the oldest profile if the cache is full.\n */\nexport function addProfileToGlobalCache(profile_id: string, profile: JSSelfProfile): void {\n  PROFILE_MAP.set(profile_id, profile);\n\n  if (PROFILE_MAP.size > 30) {\n    const last: string = PROFILE_MAP.keys().next().value;\n    PROFILE_MAP.delete(last);\n  }\n}\n","/* eslint-disable complexity */\nimport type { Transaction } from '@sentry/types';\nimport { logger, timestampInSeconds, uuid4 } from '@sentry/utils';\n\nimport { WINDOW } from '../helpers';\nimport type { JSSelfProfile } from './jsSelfProfiling';\nimport {\n  addProfileToGlobalCache,\n  isAutomatedPageLoadTransaction,\n  MAX_PROFILE_DURATION_MS,\n  shouldProfileTransaction,\n  startJSSelfProfile,\n} from './utils';\n\n/**\n * Safety wrapper for startTransaction for the unlikely case that transaction starts before tracing is imported -\n * if that happens we want to avoid throwing an error from profiling code.\n * see https://github.com/getsentry/sentry-javascript/issues/4731.\n *\n * @experimental\n */\nexport function onProfilingStartRouteTransaction(transaction: Transaction | undefined): Transaction | undefined {\n  if (!transaction) {\n    if (__DEBUG_BUILD__) {\n      logger.log('[Profiling] Transaction is undefined, skipping profiling');\n    }\n    return transaction;\n  }\n\n  if (shouldProfileTransaction(transaction)) {\n    return startProfileForTransaction(transaction);\n  }\n\n  return transaction;\n}\n\n/**\n * Wraps startTransaction and stopTransaction with profiling related logic.\n * startProfileForTransaction is called after the call to startTransaction in order to avoid our own code from\n * being profiled. Because of that same reason, stopProfiling is called before the call to stopTransaction.\n */\nexport function startProfileForTransaction(transaction: Transaction): Transaction {\n  // Start the profiler and get the profiler instance.\n  let startTimestamp: number | undefined;\n  if (isAutomatedPageLoadTransaction(transaction)) {\n    startTimestamp = timestampInSeconds() * 1000;\n  }\n\n  const profiler = startJSSelfProfile();\n\n  // We failed to construct the profiler, fallback to original transaction.\n  // No need to log anything as this has already been logged in startProfile.\n  if (!profiler) {\n    return transaction;\n  }\n\n  if (__DEBUG_BUILD__) {\n    logger.log(`[Profiling] started profiling transaction: ${transaction.name || transaction.description}`);\n  }\n\n  // We create \"unique\" transaction names to avoid concurrent transactions with same names\n  // from being ignored by the profiler. From here on, only this transaction name should be used when\n  // calling the profiler methods. Note: we log the original name to the user to avoid confusion.\n  const profileId = uuid4();\n\n  // A couple of important things to note here:\n  // `CpuProfilerBindings.stopProfiling` will be scheduled to run in 30seconds in order to exceed max profile duration.\n  // Whichever of the two (transaction.finish/timeout) is first to run, the profiling will be stopped and the gathered profile\n  // will be processed when the original transaction is finished. Since onProfileHandler can be invoked multiple times in the\n  // event of an error or user mistake (calling transaction.finish multiple times), it is important that the behavior of onProfileHandler\n  // is idempotent as we do not want any timings or profiles to be overriden by the last call to onProfileHandler.\n  // After the original finish method is called, the event will be reported through the integration and delegated to transport.\n  const processedProfile: JSSelfProfile | null = null;\n\n  /**\n   * Idempotent handler for profile stop\n   */\n  async function onProfileHandler(): Promise<null> {\n    // Check if the profile exists and return it the behavior has to be idempotent as users may call transaction.finish multiple times.\n    if (!transaction) {\n      return null;\n    }\n    // Satisfy the type checker, but profiler will always be defined here.\n    if (!profiler) {\n      return null;\n    }\n    if (processedProfile) {\n      if (__DEBUG_BUILD__) {\n        logger.log(\n          '[Profiling] profile for:',\n          transaction.name || transaction.description,\n          'already exists, returning early',\n        );\n      }\n      return null;\n    }\n\n    return profiler\n      .stop()\n      .then((profile: JSSelfProfile): null => {\n        if (maxDurationTimeoutID) {\n          WINDOW.clearTimeout(maxDurationTimeoutID);\n          maxDurationTimeoutID = undefined;\n        }\n\n        if (__DEBUG_BUILD__) {\n          logger.log(`[Profiling] stopped profiling of transaction: ${transaction.name || transaction.description}`);\n        }\n\n        // In case of an overlapping transaction, stopProfiling may return null and silently ignore the overlapping profile.\n        if (!profile) {\n          if (__DEBUG_BUILD__) {\n            logger.log(\n              `[Profiling] profiler returned null profile for: ${transaction.name || transaction.description}`,\n              'this may indicate an overlapping transaction or a call to stopProfiling with a profile title that was never started',\n            );\n          }\n          return null;\n        }\n\n        addProfileToGlobalCache(profileId, profile);\n        return null;\n      })\n      .catch(error => {\n        if (__DEBUG_BUILD__) {\n          logger.log('[Profiling] error while stopping profiler:', error);\n        }\n        return null;\n      });\n  }\n\n  // Enqueue a timeout to prevent profiles from running over max duration.\n  let maxDurationTimeoutID: number | undefined = WINDOW.setTimeout(() => {\n    if (__DEBUG_BUILD__) {\n      logger.log(\n        '[Profiling] max profile duration elapsed, stopping profiling for:',\n        transaction.name || transaction.description,\n      );\n    }\n    // If the timeout exceeds, we want to stop profiling, but not finish the transaction\n    void onProfileHandler();\n  }, MAX_PROFILE_DURATION_MS);\n\n  // We need to reference the original finish call to avoid creating an infinite loop\n  const originalFinish = transaction.finish.bind(transaction);\n\n  /**\n   * Wraps startTransaction and stopTransaction with profiling related logic.\n   * startProfiling is called after the call to startTransaction in order to avoid our own code from\n   * being profiled. Because of that same reason, stopProfiling is called before the call to stopTransaction.\n   */\n  function profilingWrappedTransactionFinish(): Transaction {\n    if (!transaction) {\n      return originalFinish();\n    }\n    // onProfileHandler should always return the same profile even if this is called multiple times.\n    // Always call onProfileHandler to ensure stopProfiling is called and the timeout is cleared.\n    void onProfileHandler().then(\n      () => {\n        transaction.setContext('profile', { profile_id: profileId, start_timestamp: startTimestamp });\n        originalFinish();\n      },\n      () => {\n        // If onProfileHandler fails, we still want to call the original finish method.\n        originalFinish();\n      },\n    );\n\n    return transaction;\n  }\n\n  transaction.finish = profilingWrappedTransactionFinish;\n  return transaction;\n}\n","import type { EventProcessor, Hub, Integration, Transaction } from '@sentry/types';\nimport type { Profile } from '@sentry/types/src/profiling';\nimport { logger } from '@sentry/utils';\n\nimport { startProfileForTransaction } from './hubextensions';\nimport type { ProfiledEvent } from './utils';\nimport {\n  addProfilesToEnvelope,\n  createProfilingEvent,\n  findProfiledTransactionsFromEnvelope,\n  getActiveProfilesCount,\n  isAutomatedPageLoadTransaction,\n  shouldProfileTransaction,\n  takeProfileFromGlobalCache,\n} from './utils';\n\n/**\n * Browser profiling integration. Stores any event that has contexts[\"profile\"][\"profile_id\"]\n * This exists because we do not want to await async profiler.stop calls as transaction.finish is called\n * in a synchronous context. Instead, we handle sending the profile async from the promise callback and\n * rely on being able to pull the event from the cache when we need to construct the envelope. This makes the\n * integration less reliable as we might be dropping profiles when the cache is full.\n *\n * @experimental\n */\nexport class BrowserProfilingIntegration implements Integration {\n  public static id: string = 'BrowserProfilingIntegration';\n\n  public readonly name: string;\n\n  public getCurrentHub?: () => Hub;\n\n  public constructor() {\n    this.name = BrowserProfilingIntegration.id;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(_addGlobalEventProcessor: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {\n    this.getCurrentHub = getCurrentHub;\n\n    const hub = this.getCurrentHub();\n    const client = hub.getClient();\n    const scope = hub.getScope();\n\n    const transaction = scope.getTransaction();\n\n    if (transaction && isAutomatedPageLoadTransaction(transaction)) {\n      if (shouldProfileTransaction(transaction)) {\n        startProfileForTransaction(transaction);\n      }\n    }\n\n    if (client && typeof client.on === 'function') {\n      client.on('startTransaction', (transaction: Transaction) => {\n        if (shouldProfileTransaction(transaction)) {\n          startProfileForTransaction(transaction);\n        }\n      });\n\n      client.on('beforeEnvelope', (envelope): void => {\n        // if not profiles are in queue, there is nothing to add to the envelope.\n        if (!getActiveProfilesCount()) {\n          return;\n        }\n\n        const profiledTransactionEvents = findProfiledTransactionsFromEnvelope(envelope);\n        if (!profiledTransactionEvents.length) {\n          return;\n        }\n\n        const profilesToAddToEnvelope: Profile[] = [];\n\n        for (const profiledTransaction of profiledTransactionEvents) {\n          const context = profiledTransaction && profiledTransaction.contexts;\n          const profile_id = context && context['profile'] && context['profile']['profile_id'];\n          const start_timestamp = context && context['profile'] && context['profile']['start_timestamp'];\n\n          if (typeof profile_id !== 'string') {\n            __DEBUG_BUILD__ &&\n              logger.log('[Profiling] cannot find profile for a transaction without a profile context');\n            continue;\n          }\n\n          if (!profile_id) {\n            __DEBUG_BUILD__ &&\n              logger.log('[Profiling] cannot find profile for a transaction without a profile context');\n            continue;\n          }\n\n          // Remove the profile from the transaction context before sending, relay will take care of the rest.\n          if (context && context['profile']) {\n            delete context.profile;\n          }\n\n          const profile = takeProfileFromGlobalCache(profile_id);\n          if (!profile) {\n            __DEBUG_BUILD__ && logger.log(`[Profiling] Could not retrieve profile for transaction: ${profile_id}`);\n            continue;\n          }\n\n          const profileEvent = createProfilingEvent(\n            profile_id,\n            start_timestamp as number | undefined,\n            profile,\n            profiledTransaction as ProfiledEvent,\n          );\n          if (profileEvent) {\n            profilesToAddToEnvelope.push(profileEvent);\n          }\n        }\n\n        addProfilesToEnvelope(envelope, profilesToAddToEnvelope);\n      });\n    } else {\n      logger.warn('[Profiling] Client does not support hooks, profiling will be disabled');\n    }\n  }\n}\n","export * from './exports';\n\nimport { Integrations as CoreIntegrations } from '@sentry/core';\n\nimport { WINDOW } from './helpers';\nimport * as BrowserIntegrations from './integrations';\n\nlet windowIntegrations = {};\n\n// This block is needed to add compatibility with the integrations packages when used with a CDN\nif (WINDOW.Sentry && WINDOW.Sentry.Integrations) {\n  windowIntegrations = WINDOW.Sentry.Integrations;\n}\n\nconst INTEGRATIONS = {\n  ...windowIntegrations,\n  ...CoreIntegrations,\n  ...BrowserIntegrations,\n};\n\nexport { INTEGRATIONS as Integrations };\n\nexport { Replay } from '@sentry/replay';\nexport type {\n  ReplayEventType,\n  ReplayEventWithTime,\n  ReplayBreadcrumbFrame,\n  ReplayBreadcrumbFrameEvent,\n  ReplayOptionFrameEvent,\n  ReplayFrame,\n  ReplayFrameEvent,\n  ReplaySpanFrame,\n  ReplaySpanFrameEvent,\n} from '@sentry/replay';\n\nexport {\n  BrowserTracing,\n  defaultRequestInstrumentationOptions,\n  instrumentOutgoingRequests,\n} from '@sentry-internal/tracing';\nexport type { RequestInstrumentationOptions } from '@sentry-internal/tracing';\nexport {\n  addTracingExtensions,\n  setMeasurement,\n  extractTraceparentData,\n  getActiveTransaction,\n  spanStatusfromHttpCode,\n  trace,\n  makeMultiplexedTransport,\n  ModuleMetadata,\n} from '@sentry/core';\nexport type { SpanStatusType } from '@sentry/core';\nexport type { Span } from '@sentry/types';\nexport { makeBrowserOfflineTransport } from './transports/offline';\nexport { onProfilingStartRouteTransaction } from './profiling/hubextensions';\nexport { BrowserProfilingIntegration } from './profiling/integration';\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable max-lines */\nimport { getCurrentHub } from '@sentry/core';\nimport type { Event as SentryEvent, HandlerDataFetch, HandlerDataXhr, Integration } from '@sentry/types';\nimport type {\n  FetchBreadcrumbData,\n  FetchBreadcrumbHint,\n  XhrBreadcrumbData,\n  XhrBreadcrumbHint,\n} from '@sentry/types/build/types/breadcrumb';\nimport {\n  addInstrumentationHandler,\n  getEventDescription,\n  htmlTreeAsString,\n  logger,\n  parseUrl,\n  safeJoin,\n  SENTRY_XHR_DATA_KEY,\n  severityLevelFromString,\n} from '@sentry/utils';\n\nimport { WINDOW } from '../helpers';\n\ntype HandlerData = Record<string, unknown>;\n\n/** JSDoc */\ninterface BreadcrumbsOptions {\n  console: boolean;\n  dom:\n    | boolean\n    | {\n        serializeAttribute?: string | string[];\n        maxStringLength?: number;\n      };\n  fetch: boolean;\n  history: boolean;\n  sentry: boolean;\n  xhr: boolean;\n}\n\n/** maxStringLength gets capped to prevent 100 breadcrumbs exceeding 1MB event payload size */\nconst MAX_ALLOWED_STRING_LENGTH = 1024;\n\n/**\n * Default Breadcrumbs instrumentations\n * TODO: Deprecated - with v6, this will be renamed to `Instrument`\n */\nexport class Breadcrumbs implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'Breadcrumbs';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  /**\n   * Options of the breadcrumbs integration.\n   */\n  // This field is public, because we use it in the browser client to check if the `sentry` option is enabled.\n  public readonly options: Readonly<BreadcrumbsOptions>;\n\n  /**\n   * @inheritDoc\n   */\n  public constructor(options?: Partial<BreadcrumbsOptions>) {\n    this.name = Breadcrumbs.id;\n    this.options = {\n      console: true,\n      dom: true,\n      fetch: true,\n      history: true,\n      sentry: true,\n      xhr: true,\n      ...options,\n    };\n  }\n\n  /**\n   * Instrument browser built-ins w/ breadcrumb capturing\n   *  - Console API\n   *  - DOM API (click/typing)\n   *  - XMLHttpRequest API\n   *  - Fetch API\n   *  - History API\n   */\n  public setupOnce(): void {\n    if (this.options.console) {\n      addInstrumentationHandler('console', _consoleBreadcrumb);\n    }\n    if (this.options.dom) {\n      addInstrumentationHandler('dom', _domBreadcrumb(this.options.dom));\n    }\n    if (this.options.xhr) {\n      addInstrumentationHandler('xhr', _xhrBreadcrumb);\n    }\n    if (this.options.fetch) {\n      addInstrumentationHandler('fetch', _fetchBreadcrumb);\n    }\n    if (this.options.history) {\n      addInstrumentationHandler('history', _historyBreadcrumb);\n    }\n    if (this.options.sentry) {\n      const client = getCurrentHub().getClient();\n      client && client.on && client.on('beforeSendEvent', addSentryBreadcrumb);\n    }\n  }\n}\n\n/**\n * Adds a breadcrumb for Sentry events or transactions if this option is enabled.\n */\nfunction addSentryBreadcrumb(event: SentryEvent): void {\n  getCurrentHub().addBreadcrumb(\n    {\n      category: `sentry.${event.type === 'transaction' ? 'transaction' : 'event'}`,\n      event_id: event.event_id,\n      level: event.level,\n      message: getEventDescription(event),\n    },\n    {\n      event,\n    },\n  );\n}\n\n/**\n * A HOC that creaes a function that creates breadcrumbs from DOM API calls.\n * This is a HOC so that we get access to dom options in the closure.\n */\nfunction _domBreadcrumb(dom: BreadcrumbsOptions['dom']): (handlerData: HandlerData) => void {\n  function _innerDomBreadcrumb(handlerData: HandlerData): void {\n    let target;\n    let keyAttrs = typeof dom === 'object' ? dom.serializeAttribute : undefined;\n\n    let maxStringLength =\n      typeof dom === 'object' && typeof dom.maxStringLength === 'number' ? dom.maxStringLength : undefined;\n    if (maxStringLength && maxStringLength > MAX_ALLOWED_STRING_LENGTH) {\n      __DEBUG_BUILD__ &&\n        logger.warn(\n          `\\`dom.maxStringLength\\` cannot exceed ${MAX_ALLOWED_STRING_LENGTH}, but a value of ${maxStringLength} was configured. Sentry will use ${MAX_ALLOWED_STRING_LENGTH} instead.`,\n        );\n      maxStringLength = MAX_ALLOWED_STRING_LENGTH;\n    }\n\n    if (typeof keyAttrs === 'string') {\n      keyAttrs = [keyAttrs];\n    }\n\n    // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n    try {\n      const event = handlerData.event as Event | Node;\n      target = _isEvent(event)\n        ? htmlTreeAsString(event.target, { keyAttrs, maxStringLength })\n        : htmlTreeAsString(event, { keyAttrs, maxStringLength });\n    } catch (e) {\n      target = '<unknown>';\n    }\n\n    if (target.length === 0) {\n      return;\n    }\n\n    getCurrentHub().addBreadcrumb(\n      {\n        category: `ui.${handlerData.name}`,\n        message: target,\n      },\n      {\n        event: handlerData.event,\n        name: handlerData.name,\n        global: handlerData.global,\n      },\n    );\n  }\n\n  return _innerDomBreadcrumb;\n}\n\n/**\n * Creates breadcrumbs from console API calls\n */\nfunction _consoleBreadcrumb(handlerData: HandlerData & { args: unknown[]; level: string }): void {\n  const breadcrumb = {\n    category: 'console',\n    data: {\n      arguments: handlerData.args,\n      logger: 'console',\n    },\n    level: severityLevelFromString(handlerData.level),\n    message: safeJoin(handlerData.args, ' '),\n  };\n\n  if (handlerData.level === 'assert') {\n    if (handlerData.args[0] === false) {\n      breadcrumb.message = `Assertion failed: ${safeJoin(handlerData.args.slice(1), ' ') || 'console.assert'}`;\n      breadcrumb.data.arguments = handlerData.args.slice(1);\n    } else {\n      // Don't capture a breadcrumb for passed assertions\n      return;\n    }\n  }\n\n  getCurrentHub().addBreadcrumb(breadcrumb, {\n    input: handlerData.args,\n    level: handlerData.level,\n  });\n}\n\n/**\n * Creates breadcrumbs from XHR API calls\n */\nfunction _xhrBreadcrumb(handlerData: HandlerData & HandlerDataXhr): void {\n  const { startTimestamp, endTimestamp } = handlerData;\n\n  const sentryXhrData = handlerData.xhr[SENTRY_XHR_DATA_KEY];\n\n  // We only capture complete, non-sentry requests\n  if (!startTimestamp || !endTimestamp || !sentryXhrData) {\n    return;\n  }\n\n  const { method, url, status_code, body } = sentryXhrData;\n\n  const data: XhrBreadcrumbData = {\n    method,\n    url,\n    status_code,\n  };\n\n  const hint: XhrBreadcrumbHint = {\n    xhr: handlerData.xhr,\n    input: body,\n    startTimestamp,\n    endTimestamp,\n  };\n\n  getCurrentHub().addBreadcrumb(\n    {\n      category: 'xhr',\n      data,\n      type: 'http',\n    },\n    hint,\n  );\n}\n\n/**\n * Creates breadcrumbs from fetch API calls\n */\nfunction _fetchBreadcrumb(handlerData: HandlerData & HandlerDataFetch & { response?: Response }): void {\n  const { startTimestamp, endTimestamp } = handlerData;\n\n  // We only capture complete fetch requests\n  if (!endTimestamp) {\n    return;\n  }\n\n  if (handlerData.fetchData.url.match(/sentry_key/) && handlerData.fetchData.method === 'POST') {\n    // We will not create breadcrumbs for fetch requests that contain `sentry_key` (internal sentry requests)\n    return;\n  }\n\n  if (handlerData.error) {\n    const data: FetchBreadcrumbData = handlerData.fetchData;\n    const hint: FetchBreadcrumbHint = {\n      data: handlerData.error,\n      input: handlerData.args,\n      startTimestamp,\n      endTimestamp,\n    };\n\n    getCurrentHub().addBreadcrumb(\n      {\n        category: 'fetch',\n        data,\n        level: 'error',\n        type: 'http',\n      },\n      hint,\n    );\n  } else {\n    const data: FetchBreadcrumbData = {\n      ...handlerData.fetchData,\n      status_code: handlerData.response && handlerData.response.status,\n    };\n    const hint: FetchBreadcrumbHint = {\n      input: handlerData.args,\n      response: handlerData.response,\n      startTimestamp,\n      endTimestamp,\n    };\n    getCurrentHub().addBreadcrumb(\n      {\n        category: 'fetch',\n        data,\n        type: 'http',\n      },\n      hint,\n    );\n  }\n}\n\n/**\n * Creates breadcrumbs from history API calls\n */\nfunction _historyBreadcrumb(handlerData: HandlerData & { from: string; to: string }): void {\n  let from: string | undefined = handlerData.from;\n  let to: string | undefined = handlerData.to;\n  const parsedLoc = parseUrl(WINDOW.location.href);\n  let parsedFrom = parseUrl(from);\n  const parsedTo = parseUrl(to);\n\n  // Initial pushState doesn't provide `from` information\n  if (!parsedFrom.path) {\n    parsedFrom = parsedLoc;\n  }\n\n  // Use only the path component of the URL if the URL matches the current\n  // document (almost all the time when using pushState)\n  if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) {\n    to = parsedTo.relative;\n  }\n  if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {\n    from = parsedFrom.relative;\n  }\n\n  getCurrentHub().addBreadcrumb({\n    category: 'navigation',\n    data: {\n      from,\n      to,\n    },\n  });\n}\n\nfunction _isEvent(event: unknown): event is Event {\n  return !!event && !!(event as Record<string, unknown>).target;\n}\n","import type { Event, Exception, Integration, StackFrame } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\n/** Deduplication filter */\nexport class Dedupe implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'Dedupe';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  /**\n   * @inheritDoc\n   */\n  private _previousEvent?: Event;\n\n  public constructor() {\n    this.name = Dedupe.id;\n  }\n\n  /** @inheritDoc */\n  public setupOnce(_addGlobaleventProcessor: unknown, _getCurrentHub: unknown): void {\n    // noop\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public processEvent(currentEvent: Event): Event | null {\n    // We want to ignore any non-error type events, e.g. transactions or replays\n    // These should never be deduped, and also not be compared against as _previousEvent.\n    if (currentEvent.type) {\n      return currentEvent;\n    }\n\n    // Juuust in case something goes wrong\n    try {\n      if (_shouldDropEvent(currentEvent, this._previousEvent)) {\n        __DEBUG_BUILD__ && logger.warn('Event dropped due to being a duplicate of previously captured event.');\n        return null;\n      }\n    } catch (_oO) {} // eslint-disable-line no-empty\n\n    return (this._previousEvent = currentEvent);\n  }\n}\n\n/** JSDoc */\nfunction _shouldDropEvent(currentEvent: Event, previousEvent?: Event): boolean {\n  if (!previousEvent) {\n    return false;\n  }\n\n  if (_isSameMessageEvent(currentEvent, previousEvent)) {\n    return true;\n  }\n\n  if (_isSameExceptionEvent(currentEvent, previousEvent)) {\n    return true;\n  }\n\n  return false;\n}\n\n/** JSDoc */\nfunction _isSameMessageEvent(currentEvent: Event, previousEvent: Event): boolean {\n  const currentMessage = currentEvent.message;\n  const previousMessage = previousEvent.message;\n\n  // If neither event has a message property, they were both exceptions, so bail out\n  if (!currentMessage && !previousMessage) {\n    return false;\n  }\n\n  // If only one event has a stacktrace, but not the other one, they are not the same\n  if ((currentMessage && !previousMessage) || (!currentMessage && previousMessage)) {\n    return false;\n  }\n\n  if (currentMessage !== previousMessage) {\n    return false;\n  }\n\n  if (!_isSameFingerprint(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  if (!_isSameStacktrace(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  return true;\n}\n\n/** JSDoc */\nfunction _isSameExceptionEvent(currentEvent: Event, previousEvent: Event): boolean {\n  const previousException = _getExceptionFromEvent(previousEvent);\n  const currentException = _getExceptionFromEvent(currentEvent);\n\n  if (!previousException || !currentException) {\n    return false;\n  }\n\n  if (previousException.type !== currentException.type || previousException.value !== currentException.value) {\n    return false;\n  }\n\n  if (!_isSameFingerprint(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  if (!_isSameStacktrace(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  return true;\n}\n\n/** JSDoc */\nfunction _isSameStacktrace(currentEvent: Event, previousEvent: Event): boolean {\n  let currentFrames = _getFramesFromEvent(currentEvent);\n  let previousFrames = _getFramesFromEvent(previousEvent);\n\n  // If neither event has a stacktrace, they are assumed to be the same\n  if (!currentFrames && !previousFrames) {\n    return true;\n  }\n\n  // If only one event has a stacktrace, but not the other one, they are not the same\n  if ((currentFrames && !previousFrames) || (!currentFrames && previousFrames)) {\n    return false;\n  }\n\n  currentFrames = currentFrames as StackFrame[];\n  previousFrames = previousFrames as StackFrame[];\n\n  // If number of frames differ, they are not the same\n  if (previousFrames.length !== currentFrames.length) {\n    return false;\n  }\n\n  // Otherwise, compare the two\n  for (let i = 0; i < previousFrames.length; i++) {\n    const frameA = previousFrames[i];\n    const frameB = currentFrames[i];\n\n    if (\n      frameA.filename !== frameB.filename ||\n      frameA.lineno !== frameB.lineno ||\n      frameA.colno !== frameB.colno ||\n      frameA.function !== frameB.function\n    ) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/** JSDoc */\nfunction _isSameFingerprint(currentEvent: Event, previousEvent: Event): boolean {\n  let currentFingerprint = currentEvent.fingerprint;\n  let previousFingerprint = previousEvent.fingerprint;\n\n  // If neither event has a fingerprint, they are assumed to be the same\n  if (!currentFingerprint && !previousFingerprint) {\n    return true;\n  }\n\n  // If only one event has a fingerprint, but not the other one, they are not the same\n  if ((currentFingerprint && !previousFingerprint) || (!currentFingerprint && previousFingerprint)) {\n    return false;\n  }\n\n  currentFingerprint = currentFingerprint as string[];\n  previousFingerprint = previousFingerprint as string[];\n\n  // Otherwise, compare the two\n  try {\n    return !!(currentFingerprint.join('') === previousFingerprint.join(''));\n  } catch (_oO) {\n    return false;\n  }\n}\n\n/** JSDoc */\nfunction _getExceptionFromEvent(event: Event): Exception | undefined {\n  return event.exception && event.exception.values && event.exception.values[0];\n}\n\n/** JSDoc */\nfunction _getFramesFromEvent(event: Event): StackFrame[] | undefined {\n  const exception = event.exception;\n\n  if (exception) {\n    try {\n      // @ts-expect-error Object could be undefined\n      return exception.values[0].stacktrace.frames;\n    } catch (_oO) {\n      return undefined;\n    }\n  }\n  return undefined;\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\nimport { getCurrentHub } from '@sentry/core';\nimport type { Event, EventHint, Hub, Integration, Primitive, StackParser } from '@sentry/types';\nimport {\n  addExceptionMechanism,\n  addInstrumentationHandler,\n  getLocationHref,\n  isErrorEvent,\n  isPrimitive,\n  isString,\n  logger,\n} from '@sentry/utils';\n\nimport type { BrowserClient } from '../client';\nimport { eventFromUnknownInput } from '../eventbuilder';\nimport { shouldIgnoreOnError } from '../helpers';\n\ntype GlobalHandlersIntegrationsOptionKeys = 'onerror' | 'onunhandledrejection';\n\n/** JSDoc */\ntype GlobalHandlersIntegrations = Record<GlobalHandlersIntegrationsOptionKeys, boolean>;\n\n/** Global handlers */\nexport class GlobalHandlers implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'GlobalHandlers';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  /** JSDoc */\n  private readonly _options: GlobalHandlersIntegrations;\n\n  /**\n   * Stores references functions to installing handlers. Will set to undefined\n   * after they have been run so that they are not used twice.\n   */\n  private _installFunc: Record<GlobalHandlersIntegrationsOptionKeys, (() => void) | undefined>;\n\n  /** JSDoc */\n  public constructor(options?: GlobalHandlersIntegrations) {\n    this.name = GlobalHandlers.id;\n    this._options = {\n      onerror: true,\n      onunhandledrejection: true,\n      ...options,\n    };\n\n    this._installFunc = {\n      onerror: _installGlobalOnErrorHandler,\n      onunhandledrejection: _installGlobalOnUnhandledRejectionHandler,\n    };\n  }\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(): void {\n    Error.stackTraceLimit = 50;\n    const options = this._options;\n\n    // We can disable guard-for-in as we construct the options object above + do checks against\n    // `this._installFunc` for the property.\n    // eslint-disable-next-line guard-for-in\n    for (const key in options) {\n      const installFunc = this._installFunc[key as GlobalHandlersIntegrationsOptionKeys];\n      if (installFunc && options[key as GlobalHandlersIntegrationsOptionKeys]) {\n        globalHandlerLog(key);\n        installFunc();\n        this._installFunc[key as GlobalHandlersIntegrationsOptionKeys] = undefined;\n      }\n    }\n  }\n}\n\n/** JSDoc */\nfunction _installGlobalOnErrorHandler(): void {\n  addInstrumentationHandler(\n    'error',\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    (data: { msg: any; url: any; line: any; column: any; error: any }) => {\n      const [hub, stackParser, attachStacktrace] = getHubAndOptions();\n      if (!hub.getIntegration(GlobalHandlers)) {\n        return;\n      }\n      const { msg, url, line, column, error } = data;\n      if (shouldIgnoreOnError() || (error && error.__sentry_own_request__)) {\n        return;\n      }\n\n      const event =\n        error === undefined && isString(msg)\n          ? _eventFromIncompleteOnError(msg, url, line, column)\n          : _enhanceEventWithInitialFrame(\n              eventFromUnknownInput(stackParser, error || msg, undefined, attachStacktrace, false),\n              url,\n              line,\n              column,\n            );\n\n      event.level = 'error';\n\n      addMechanismAndCapture(hub, error, event, 'onerror');\n    },\n  );\n}\n\n/** JSDoc */\nfunction _installGlobalOnUnhandledRejectionHandler(): void {\n  addInstrumentationHandler(\n    'unhandledrejection',\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    (e: any) => {\n      const [hub, stackParser, attachStacktrace] = getHubAndOptions();\n      if (!hub.getIntegration(GlobalHandlers)) {\n        return;\n      }\n      let error = e;\n\n      // dig the object of the rejection out of known event types\n      try {\n        // PromiseRejectionEvents store the object of the rejection under 'reason'\n        // see https://developer.mozilla.org/en-US/docs/Web/API/PromiseRejectionEvent\n        if ('reason' in e) {\n          error = e.reason;\n        }\n        // something, somewhere, (likely a browser extension) effectively casts PromiseRejectionEvents\n        // to CustomEvents, moving the `promise` and `reason` attributes of the PRE into\n        // the CustomEvent's `detail` attribute, since they're not part of CustomEvent's spec\n        // see https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent and\n        // https://github.com/getsentry/sentry-javascript/issues/2380\n        else if ('detail' in e && 'reason' in e.detail) {\n          error = e.detail.reason;\n        }\n      } catch (_oO) {\n        // no-empty\n      }\n\n      if (shouldIgnoreOnError() || (error && error.__sentry_own_request__)) {\n        return true;\n      }\n\n      const event = isPrimitive(error)\n        ? _eventFromRejectionWithPrimitive(error)\n        : eventFromUnknownInput(stackParser, error, undefined, attachStacktrace, true);\n\n      event.level = 'error';\n\n      addMechanismAndCapture(hub, error, event, 'onunhandledrejection');\n      return;\n    },\n  );\n}\n\n/**\n * Create an event from a promise rejection where the `reason` is a primitive.\n *\n * @param reason: The `reason` property of the promise rejection\n * @returns An Event object with an appropriate `exception` value\n */\nfunction _eventFromRejectionWithPrimitive(reason: Primitive): Event {\n  return {\n    exception: {\n      values: [\n        {\n          type: 'UnhandledRejection',\n          // String() is needed because the Primitive type includes symbols (which can't be automatically stringified)\n          value: `Non-Error promise rejection captured with value: ${String(reason)}`,\n        },\n      ],\n    },\n  };\n}\n\n/**\n * This function creates a stack from an old, error-less onerror handler.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _eventFromIncompleteOnError(msg: any, url: any, line: any, column: any): Event {\n  const ERROR_TYPES_RE =\n    /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;\n\n  // If 'message' is ErrorEvent, get real message from inside\n  let message = isErrorEvent(msg) ? msg.message : msg;\n  let name = 'Error';\n\n  const groups = message.match(ERROR_TYPES_RE);\n  if (groups) {\n    name = groups[1];\n    message = groups[2];\n  }\n\n  const event = {\n    exception: {\n      values: [\n        {\n          type: name,\n          value: message,\n        },\n      ],\n    },\n  };\n\n  return _enhanceEventWithInitialFrame(event, url, line, column);\n}\n\n/** JSDoc */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _enhanceEventWithInitialFrame(event: Event, url: any, line: any, column: any): Event {\n  // event.exception\n  const e = (event.exception = event.exception || {});\n  // event.exception.values\n  const ev = (e.values = e.values || []);\n  // event.exception.values[0]\n  const ev0 = (ev[0] = ev[0] || {});\n  // event.exception.values[0].stacktrace\n  const ev0s = (ev0.stacktrace = ev0.stacktrace || {});\n  // event.exception.values[0].stacktrace.frames\n  const ev0sf = (ev0s.frames = ev0s.frames || []);\n\n  const colno = isNaN(parseInt(column, 10)) ? undefined : column;\n  const lineno = isNaN(parseInt(line, 10)) ? undefined : line;\n  const filename = isString(url) && url.length > 0 ? url : getLocationHref();\n\n  // event.exception.values[0].stacktrace.frames\n  if (ev0sf.length === 0) {\n    ev0sf.push({\n      colno,\n      filename,\n      function: '?',\n      in_app: true,\n      lineno,\n    });\n  }\n\n  return event;\n}\n\nfunction globalHandlerLog(type: string): void {\n  __DEBUG_BUILD__ && logger.log(`Global Handler attached: ${type}`);\n}\n\nfunction addMechanismAndCapture(hub: Hub, error: EventHint['originalException'], event: Event, type: string): void {\n  addExceptionMechanism(event, {\n    handled: false,\n    type,\n  });\n  hub.captureEvent(event, {\n    originalException: error,\n  });\n}\n\nfunction getHubAndOptions(): [Hub, StackParser, boolean | undefined] {\n  const hub = getCurrentHub();\n  const client = hub.getClient<BrowserClient>();\n  const options = (client && client.getOptions()) || {\n    stackParser: () => [],\n    attachStacktrace: false,\n  };\n  return [hub, options.stackParser, options.attachStacktrace];\n}\n","import type { Event, Integration } from '@sentry/types';\n\nimport { WINDOW } from '../helpers';\n\n/** HttpContext integration collects information about HTTP request headers */\nexport class HttpContext implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'HttpContext';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  public constructor() {\n    this.name = HttpContext.id;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(): void {\n    // noop\n  }\n\n  /** @inheritDoc */\n  public preprocessEvent(event: Event): void {\n    // if none of the information we want exists, don't bother\n    if (!WINDOW.navigator && !WINDOW.location && !WINDOW.document) {\n      return;\n    }\n\n    // grab as much info as exists and add it to the event\n    const url = (event.request && event.request.url) || (WINDOW.location && WINDOW.location.href);\n    const { referrer } = WINDOW.document || {};\n    const { userAgent } = WINDOW.navigator || {};\n\n    const headers = {\n      ...(event.request && event.request.headers),\n      ...(referrer && { Referer: referrer }),\n      ...(userAgent && { 'User-Agent': userAgent }),\n    };\n    const request = { ...event.request, ...(url && { url }), headers };\n\n    event.request = request;\n  }\n}\n","import type { Client, Event, EventHint, Integration } from '@sentry/types';\nimport { applyAggregateErrorsToEvent } from '@sentry/utils';\n\nimport { exceptionFromError } from '../eventbuilder';\n\nconst DEFAULT_KEY = 'cause';\nconst DEFAULT_LIMIT = 5;\n\ninterface LinkedErrorsOptions {\n  key: string;\n  limit: number;\n}\n\n/** Adds SDK info to an event. */\nexport class LinkedErrors implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'LinkedErrors';\n\n  /**\n   * @inheritDoc\n   */\n  public readonly name: string;\n\n  /**\n   * @inheritDoc\n   */\n  private readonly _key: LinkedErrorsOptions['key'];\n\n  /**\n   * @inheritDoc\n   */\n  private readonly _limit: LinkedErrorsOptions['limit'];\n\n  /**\n   * @inheritDoc\n   */\n  public constructor(options: Partial<LinkedErrorsOptions> = {}) {\n    this.name = LinkedErrors.id;\n    this._key = options.key || DEFAULT_KEY;\n    this._limit = options.limit || DEFAULT_LIMIT;\n  }\n\n  /** @inheritdoc */\n  public setupOnce(): void {\n    // noop\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public preprocessEvent(event: Event, hint: EventHint | undefined, client: Client): void {\n    const options = client.getOptions();\n\n    applyAggregateErrorsToEvent(\n      exceptionFromError,\n      options.stackParser,\n      options.maxValueLength,\n      this._key,\n      this._limit,\n      event,\n      hint,\n    );\n  }\n}\n","import type { Integration, WrappedFunction } from '@sentry/types';\nimport { fill, getFunctionName, getOriginalFunction } from '@sentry/utils';\n\nimport { WINDOW, wrap } from '../helpers';\n\nconst DEFAULT_EVENT_TARGET = [\n  'EventTarget',\n  'Window',\n  'Node',\n  'ApplicationCache',\n  'AudioTrackList',\n  'BroadcastChannel',\n  'ChannelMergerNode',\n  'CryptoOperation',\n  'EventSource',\n  'FileReader',\n  'HTMLUnknownElement',\n  'IDBDatabase',\n  'IDBRequest',\n  'IDBTransaction',\n  'KeyOperation',\n  'MediaController',\n  'MessagePort',\n  'ModalWindow',\n  'Notification',\n  'SVGElementInstance',\n  'Screen',\n  'SharedWorker',\n  'TextTrack',\n  'TextTrackCue',\n  'TextTrackList',\n  'WebSocket',\n  'WebSocketWorker',\n  'Worker',\n  'XMLHttpRequest',\n  'XMLHttpRequestEventTarget',\n  'XMLHttpRequestUpload',\n];\n\ntype XMLHttpRequestProp = 'onload' | 'onerror' | 'onprogress' | 'onreadystatechange';\n\n/** JSDoc */\ninterface TryCatchOptions {\n  setTimeout: boolean;\n  setInterval: boolean;\n  requestAnimationFrame: boolean;\n  XMLHttpRequest: boolean;\n  eventTarget: boolean | string[];\n}\n\n/** Wrap timer functions and event targets to catch errors and provide better meta data */\nexport class TryCatch implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'TryCatch';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  /** JSDoc */\n  private readonly _options: TryCatchOptions;\n\n  /**\n   * @inheritDoc\n   */\n  public constructor(options?: Partial<TryCatchOptions>) {\n    this.name = TryCatch.id;\n    this._options = {\n      XMLHttpRequest: true,\n      eventTarget: true,\n      requestAnimationFrame: true,\n      setInterval: true,\n      setTimeout: true,\n      ...options,\n    };\n  }\n\n  /**\n   * Wrap timer functions and event targets to catch errors\n   * and provide better metadata.\n   */\n  public setupOnce(): void {\n    if (this._options.setTimeout) {\n      fill(WINDOW, 'setTimeout', _wrapTimeFunction);\n    }\n\n    if (this._options.setInterval) {\n      fill(WINDOW, 'setInterval', _wrapTimeFunction);\n    }\n\n    if (this._options.requestAnimationFrame) {\n      fill(WINDOW, 'requestAnimationFrame', _wrapRAF);\n    }\n\n    if (this._options.XMLHttpRequest && 'XMLHttpRequest' in WINDOW) {\n      fill(XMLHttpRequest.prototype, 'send', _wrapXHR);\n    }\n\n    const eventTargetOption = this._options.eventTarget;\n    if (eventTargetOption) {\n      const eventTarget = Array.isArray(eventTargetOption) ? eventTargetOption : DEFAULT_EVENT_TARGET;\n      eventTarget.forEach(_wrapEventTarget);\n    }\n  }\n}\n\n/** JSDoc */\nfunction _wrapTimeFunction(original: () => void): () => number {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  return function (this: any, ...args: any[]): number {\n    const originalCallback = args[0];\n    args[0] = wrap(originalCallback, {\n      mechanism: {\n        data: { function: getFunctionName(original) },\n        handled: false,\n        type: 'instrument',\n      },\n    });\n    return original.apply(this, args);\n  };\n}\n\n/** JSDoc */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _wrapRAF(original: any): (callback: () => void) => any {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  return function (this: any, callback: () => void): () => void {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    return original.apply(this, [\n      wrap(callback, {\n        mechanism: {\n          data: {\n            function: 'requestAnimationFrame',\n            handler: getFunctionName(original),\n          },\n          handled: false,\n          type: 'instrument',\n        },\n      }),\n    ]);\n  };\n}\n\n/** JSDoc */\nfunction _wrapXHR(originalSend: () => void): () => void {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  return function (this: XMLHttpRequest, ...args: any[]): void {\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    const xhr = this;\n    const xmlHttpRequestProps: XMLHttpRequestProp[] = ['onload', 'onerror', 'onprogress', 'onreadystatechange'];\n\n    xmlHttpRequestProps.forEach(prop => {\n      if (prop in xhr && typeof xhr[prop] === 'function') {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        fill(xhr, prop, function (original: WrappedFunction): () => any {\n          const wrapOptions = {\n            mechanism: {\n              data: {\n                function: prop,\n                handler: getFunctionName(original),\n              },\n              handled: false,\n              type: 'instrument',\n            },\n          };\n\n          // If Instrument integration has been called before TryCatch, get the name of original function\n          const originalFunction = getOriginalFunction(original);\n          if (originalFunction) {\n            wrapOptions.mechanism.data.handler = getFunctionName(originalFunction);\n          }\n\n          // Otherwise wrap directly\n          return wrap(original, wrapOptions);\n        });\n      }\n    });\n\n    return originalSend.apply(this, args);\n  };\n}\n\n/** JSDoc */\nfunction _wrapEventTarget(target: string): void {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const globalObject = WINDOW as { [key: string]: any };\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  const proto = globalObject[target] && globalObject[target].prototype;\n\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins\n  if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n    return;\n  }\n\n  fill(proto, 'addEventListener', function (original: () => void): (\n    eventName: string,\n    fn: EventListenerObject,\n    options?: boolean | AddEventListenerOptions,\n  ) => void {\n    return function (\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      this: any,\n      eventName: string,\n      fn: EventListenerObject,\n      options?: boolean | AddEventListenerOptions,\n    ): (eventName: string, fn: EventListenerObject, capture?: boolean, secure?: boolean) => void {\n      try {\n        if (typeof fn.handleEvent === 'function') {\n          // ESlint disable explanation:\n          //  First, it is generally safe to call `wrap` with an unbound function. Furthermore, using `.bind()` would\n          //  introduce a bug here, because bind returns a new function that doesn't have our\n          //  flags(like __sentry_original__) attached. `wrap` checks for those flags to avoid unnecessary wrapping.\n          //  Without those flags, every call to addEventListener wraps the function again, causing a memory leak.\n          // eslint-disable-next-line @typescript-eslint/unbound-method\n          fn.handleEvent = wrap(fn.handleEvent, {\n            mechanism: {\n              data: {\n                function: 'handleEvent',\n                handler: getFunctionName(fn),\n                target,\n              },\n              handled: false,\n              type: 'instrument',\n            },\n          });\n        }\n      } catch (err) {\n        // can sometimes get 'Permission denied to access property \"handle Event'\n      }\n\n      return original.apply(this, [\n        eventName,\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        wrap(fn as any as WrappedFunction, {\n          mechanism: {\n            data: {\n              function: 'addEventListener',\n              handler: getFunctionName(fn),\n              target,\n            },\n            handled: false,\n            type: 'instrument',\n          },\n        }),\n        options,\n      ]);\n    };\n  });\n\n  fill(\n    proto,\n    'removeEventListener',\n    function (\n      originalRemoveEventListener: () => void,\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    ): (this: any, eventName: string, fn: EventListenerObject, options?: boolean | EventListenerOptions) => () => void {\n      return function (\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        this: any,\n        eventName: string,\n        fn: EventListenerObject,\n        options?: boolean | EventListenerOptions,\n      ): () => void {\n        /**\n         * There are 2 possible scenarios here:\n         *\n         * 1. Someone passes a callback, which was attached prior to Sentry initialization, or by using unmodified\n         * method, eg. `document.addEventListener.call(el, name, handler). In this case, we treat this function\n         * as a pass-through, and call original `removeEventListener` with it.\n         *\n         * 2. Someone passes a callback, which was attached after Sentry was initialized, which means that it was using\n         * our wrapped version of `addEventListener`, which internally calls `wrap` helper.\n         * This helper \"wraps\" whole callback inside a try/catch statement, and attached appropriate metadata to it,\n         * in order for us to make a distinction between wrapped/non-wrapped functions possible.\n         * If a function was wrapped, it has additional property of `__sentry_wrapped__`, holding the handler.\n         *\n         * When someone adds a handler prior to initialization, and then do it again, but after,\n         * then we have to detach both of them. Otherwise, if we'd detach only wrapped one, it'd be impossible\n         * to get rid of the initial handler and it'd stick there forever.\n         */\n        const wrappedEventHandler = fn as unknown as WrappedFunction;\n        try {\n          const originalEventHandler = wrappedEventHandler && wrappedEventHandler.__sentry_wrapped__;\n          if (originalEventHandler) {\n            originalRemoveEventListener.call(this, eventName, originalEventHandler, options);\n          }\n        } catch (e) {\n          // ignore, accessing __sentry_wrapped__ will throw in some Selenium environments\n        }\n        return originalRemoveEventListener.call(this, eventName, wrappedEventHandler, options);\n      };\n    },\n  );\n}\n","import type { Hub } from '@sentry/core';\nimport {\n  getCurrentHub,\n  getIntegrationsToSetup,\n  getReportDialogEndpoint,\n  initAndBind,\n  Integrations as CoreIntegrations,\n} from '@sentry/core';\nimport type { UserFeedback } from '@sentry/types';\nimport { addInstrumentationHandler, logger, stackParserFromStackParserOptions, supportsFetch } from '@sentry/utils';\n\nimport type { BrowserClientOptions, BrowserOptions } from './client';\nimport { BrowserClient } from './client';\nimport type { ReportDialogOptions } from './helpers';\nimport { WINDOW, wrap as internalWrap } from './helpers';\nimport { Breadcrumbs, Dedupe, GlobalHandlers, HttpContext, LinkedErrors, TryCatch } from './integrations';\nimport { defaultStackParser } from './stack-parsers';\nimport { makeFetchTransport, makeXHRTransport } from './transports';\n\nexport const defaultIntegrations = [\n  new CoreIntegrations.InboundFilters(),\n  new CoreIntegrations.FunctionToString(),\n  new TryCatch(),\n  new Breadcrumbs(),\n  new GlobalHandlers(),\n  new LinkedErrors(),\n  new Dedupe(),\n  new HttpContext(),\n];\n\n/**\n * A magic string that build tooling can leverage in order to inject a release value into the SDK.\n */\ndeclare const __SENTRY_RELEASE__: string | undefined;\n\n/**\n * The Sentry Browser SDK Client.\n *\n * To use this SDK, call the {@link init} function as early as possible when\n * loading the web page. To set context information or send manual events, use\n * the provided methods.\n *\n * @example\n *\n * ```\n *\n * import { init } from '@sentry/browser';\n *\n * init({\n *   dsn: '__DSN__',\n *   // ...\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { configureScope } from '@sentry/browser';\n * configureScope((scope: Scope) => {\n *   scope.setExtra({ battery: 0.7 });\n *   scope.setTag({ user_mode: 'admin' });\n *   scope.setUser({ id: '4711' });\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { addBreadcrumb } from '@sentry/browser';\n * addBreadcrumb({\n *   message: 'My Breadcrumb',\n *   // ...\n * });\n * ```\n *\n * @example\n *\n * ```\n *\n * import * as Sentry from '@sentry/browser';\n * Sentry.captureMessage('Hello, world!');\n * Sentry.captureException(new Error('Good bye'));\n * Sentry.captureEvent({\n *   message: 'Manual',\n *   stacktrace: [\n *     // ...\n *   ],\n * });\n * ```\n *\n * @see {@link BrowserOptions} for documentation on configuration options.\n */\nexport function init(options: BrowserOptions = {}): void {\n  if (options.defaultIntegrations === undefined) {\n    options.defaultIntegrations = defaultIntegrations;\n  }\n  if (options.release === undefined) {\n    // This allows build tooling to find-and-replace __SENTRY_RELEASE__ to inject a release value\n    if (typeof __SENTRY_RELEASE__ === 'string') {\n      options.release = __SENTRY_RELEASE__;\n    }\n\n    // This supports the variable that sentry-webpack-plugin injects\n    if (WINDOW.SENTRY_RELEASE && WINDOW.SENTRY_RELEASE.id) {\n      options.release = WINDOW.SENTRY_RELEASE.id;\n    }\n  }\n  if (options.autoSessionTracking === undefined) {\n    options.autoSessionTracking = true;\n  }\n  if (options.sendClientReports === undefined) {\n    options.sendClientReports = true;\n  }\n\n  const clientOptions: BrowserClientOptions = {\n    ...options,\n    stackParser: stackParserFromStackParserOptions(options.stackParser || defaultStackParser),\n    integrations: getIntegrationsToSetup(options),\n    transport: options.transport || (supportsFetch() ? makeFetchTransport : makeXHRTransport),\n  };\n\n  initAndBind(BrowserClient, clientOptions);\n\n  if (options.autoSessionTracking) {\n    startSessionTracking();\n  }\n}\n\n/**\n * Present the user with a report dialog.\n *\n * @param options Everything is optional, we try to fetch all info need from the global scope.\n */\nexport function showReportDialog(options: ReportDialogOptions = {}, hub: Hub = getCurrentHub()): void {\n  // doesn't work without a document (React Native)\n  if (!WINDOW.document) {\n    __DEBUG_BUILD__ && logger.error('Global document not defined in showReportDialog call');\n    return;\n  }\n\n  const { client, scope } = hub.getStackTop();\n  const dsn = options.dsn || (client && client.getDsn());\n  if (!dsn) {\n    __DEBUG_BUILD__ && logger.error('DSN not configured for showReportDialog call');\n    return;\n  }\n\n  if (scope) {\n    options.user = {\n      ...scope.getUser(),\n      ...options.user,\n    };\n  }\n\n  if (!options.eventId) {\n    options.eventId = hub.lastEventId();\n  }\n\n  const script = WINDOW.document.createElement('script');\n  script.async = true;\n  script.crossOrigin = 'anonymous';\n  script.src = getReportDialogEndpoint(dsn, options);\n\n  if (options.onLoad) {\n    script.onload = options.onLoad;\n  }\n\n  const injectionPoint = WINDOW.document.head || WINDOW.document.body;\n  if (injectionPoint) {\n    injectionPoint.appendChild(script);\n  } else {\n    __DEBUG_BUILD__ && logger.error('Not injecting report dialog. No injection point found in HTML');\n  }\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nexport function forceLoad(): void {\n  // Noop\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nexport function onLoad(callback: () => void): void {\n  callback();\n}\n\n/**\n * Wrap code within a try/catch block so the SDK is able to capture errors.\n *\n * @deprecated This function will be removed in v8.\n * It is not part of Sentry's official API and it's easily replaceable by using a try/catch block\n * and calling Sentry.captureException.\n *\n * @param fn A function to wrap.\n *\n * @returns The result of wrapped function call.\n */\n// TODO(v8): Remove this function\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function wrap(fn: (...args: any) => any): any {\n  return internalWrap(fn)();\n}\n\nfunction startSessionOnHub(hub: Hub): void {\n  hub.startSession({ ignoreDuration: true });\n  hub.captureSession();\n}\n\n/**\n * Enable automatic Session Tracking for the initial page load.\n */\nfunction startSessionTracking(): void {\n  if (typeof WINDOW.document === 'undefined') {\n    __DEBUG_BUILD__ &&\n      logger.warn('Session tracking in non-browser environment with @sentry/browser is not supported.');\n    return;\n  }\n\n  const hub = getCurrentHub();\n\n  // The only way for this to be false is for there to be a version mismatch between @sentry/browser (>= 6.0.0) and\n  // @sentry/hub (< 5.27.0). In the simple case, there won't ever be such a mismatch, because the two packages are\n  // pinned at the same version in package.json, but there are edge cases where it's possible. See\n  // https://github.com/getsentry/sentry-javascript/issues/3207 and\n  // https://github.com/getsentry/sentry-javascript/issues/3234 and\n  // https://github.com/getsentry/sentry-javascript/issues/3278.\n  if (!hub.captureSession) {\n    return;\n  }\n\n  // The session duration for browser sessions does not track a meaningful\n  // concept that can be used as a metric.\n  // Automatically captured sessions are akin to page views, and thus we\n  // discard their duration.\n  startSessionOnHub(hub);\n\n  // We want to create a session for every navigation as well\n  addInstrumentationHandler('history', ({ from, to }) => {\n    // Don't create an additional session for the initial route or if the location did not change\n    if (!(from === undefined || from === to)) {\n      startSessionOnHub(getCurrentHub());\n    }\n  });\n}\n\n/**\n * Captures user feedback and sends it to Sentry.\n */\nexport function captureUserFeedback(feedback: UserFeedback): void {\n  const client = getCurrentHub().getClient<BrowserClient>();\n  if (client) {\n    client.captureUserFeedback(feedback);\n  }\n}\n","import type { Client, ClientOptions } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport { getCurrentHub } from './hub';\n\n/** A class object that can instantiate Client objects. */\nexport type ClientClass<F extends Client, O extends ClientOptions> = new (options: O) => F;\n\n/**\n * Internal function to create a new SDK client instance. The client is\n * installed and then bound to the current scope.\n *\n * @param clientClass The client class to instantiate.\n * @param options Options to pass to the client.\n */\nexport function initAndBind<F extends Client, O extends ClientOptions>(\n  clientClass: ClientClass<F, O>,\n  options: O,\n): void {\n  if (options.debug === true) {\n    if (__DEBUG_BUILD__) {\n      logger.enable();\n    } else {\n      // use `console.warn` rather than `logger.warn` since by non-debug bundles have all `logger.x` statements stripped\n      // eslint-disable-next-line no-console\n      console.warn('[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.');\n    }\n  }\n  const hub = getCurrentHub();\n  const scope = hub.getScope();\n  scope.update(options.initialScope);\n\n  const client = new clientClass(options);\n  hub.bindClient(client);\n}\n","// This was originally forked from https://github.com/csnover/TraceKit, and was largely\n// re - written as part of raven - js.\n//\n// This code was later copied to the JavaScript mono - repo and further modified and\n// refactored over the years.\n\n// Copyright (c) 2013 Onur Can Cakmak onur.cakmak@gmail.com and all TraceKit contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this\n// software and associated documentation files(the 'Software'), to deal in the Software\n// without restriction, including without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and / or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to the following\n// conditions:\n//\n// The above copyright notice and this permission notice shall be included in all copies\n// or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE\n// OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nimport type { StackFrame, StackLineParser, StackLineParserFn } from '@sentry/types';\nimport { createStackParser } from '@sentry/utils';\n\n// global reference to slice\nconst UNKNOWN_FUNCTION = '?';\n\nconst OPERA10_PRIORITY = 10;\nconst OPERA11_PRIORITY = 20;\nconst CHROME_PRIORITY = 30;\nconst WINJS_PRIORITY = 40;\nconst GECKO_PRIORITY = 50;\n\nfunction createFrame(filename: string, func: string, lineno?: number, colno?: number): StackFrame {\n  const frame: StackFrame = {\n    filename,\n    function: func,\n    in_app: true, // All browser frames are considered in_app\n  };\n\n  if (lineno !== undefined) {\n    frame.lineno = lineno;\n  }\n\n  if (colno !== undefined) {\n    frame.colno = colno;\n  }\n\n  return frame;\n}\n\n// Chromium based browsers: Chrome, Brave, new Opera, new Edge\nconst chromeRegex =\n  /^\\s*at (?:(.+?\\)(?: \\[.+\\])?|.*?) ?\\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\nconst chromeEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\nconst chrome: StackLineParserFn = line => {\n  const parts = chromeRegex.exec(line);\n\n  if (parts) {\n    const isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n\n    if (isEval) {\n      const subMatch = chromeEvalRegex.exec(parts[2]);\n\n      if (subMatch) {\n        // throw out eval line/column and use top-most line/column number\n        parts[2] = subMatch[1]; // url\n        parts[3] = subMatch[2]; // line\n        parts[4] = subMatch[3]; // column\n      }\n    }\n\n    // Kamil: One more hack won't hurt us right? Understanding and adding more rules on top of these regexps right now\n    // would be way too time consuming. (TODO: Rewrite whole RegExp to be more readable)\n    const [func, filename] = extractSafariExtensionDetails(parts[1] || UNKNOWN_FUNCTION, parts[2]);\n\n    return createFrame(filename, func, parts[3] ? +parts[3] : undefined, parts[4] ? +parts[4] : undefined);\n  }\n\n  return;\n};\n\nexport const chromeStackLineParser: StackLineParser = [CHROME_PRIORITY, chrome];\n\n// gecko regex: `(?:bundle|\\d+\\.js)`: `bundle` is for react native, `\\d+\\.js` also but specifically for ram bundles because it\n// generates filenames without a prefix like `file://` the filenames in the stacktrace are just 42.js\n// We need this specific case for now because we want no other regex to match.\nconst geckoREgex =\n  /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:[-a-z]+)?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nconst geckoEvalRegex = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n\nconst gecko: StackLineParserFn = line => {\n  const parts = geckoREgex.exec(line);\n\n  if (parts) {\n    const isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n    if (isEval) {\n      const subMatch = geckoEvalRegex.exec(parts[3]);\n\n      if (subMatch) {\n        // throw out eval line/column and use top-most line number\n        parts[1] = parts[1] || 'eval';\n        parts[3] = subMatch[1];\n        parts[4] = subMatch[2];\n        parts[5] = ''; // no column when eval\n      }\n    }\n\n    let filename = parts[3];\n    let func = parts[1] || UNKNOWN_FUNCTION;\n    [func, filename] = extractSafariExtensionDetails(func, filename);\n\n    return createFrame(filename, func, parts[4] ? +parts[4] : undefined, parts[5] ? +parts[5] : undefined);\n  }\n\n  return;\n};\n\nexport const geckoStackLineParser: StackLineParser = [GECKO_PRIORITY, gecko];\n\nconst winjsRegex = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:[-a-z]+):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nconst winjs: StackLineParserFn = line => {\n  const parts = winjsRegex.exec(line);\n\n  return parts\n    ? createFrame(parts[2], parts[1] || UNKNOWN_FUNCTION, +parts[3], parts[4] ? +parts[4] : undefined)\n    : undefined;\n};\n\nexport const winjsStackLineParser: StackLineParser = [WINJS_PRIORITY, winjs];\n\nconst opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i;\n\nconst opera10: StackLineParserFn = line => {\n  const parts = opera10Regex.exec(line);\n  return parts ? createFrame(parts[2], parts[3] || UNKNOWN_FUNCTION, +parts[1]) : undefined;\n};\n\nexport const opera10StackLineParser: StackLineParser = [OPERA10_PRIORITY, opera10];\n\nconst opera11Regex =\n  / line (\\d+), column (\\d+)\\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\\(.*\\))? in (.*):\\s*$/i;\n\nconst opera11: StackLineParserFn = line => {\n  const parts = opera11Regex.exec(line);\n  return parts ? createFrame(parts[5], parts[3] || parts[4] || UNKNOWN_FUNCTION, +parts[1], +parts[2]) : undefined;\n};\n\nexport const opera11StackLineParser: StackLineParser = [OPERA11_PRIORITY, opera11];\n\nexport const defaultStackLineParsers = [chromeStackLineParser, geckoStackLineParser, winjsStackLineParser];\n\nexport const defaultStackParser = createStackParser(...defaultStackLineParsers);\n\n/**\n * Safari web extensions, starting version unknown, can produce \"frames-only\" stacktraces.\n * What it means, is that instead of format like:\n *\n * Error: wat\n *   at function@url:row:col\n *   at function@url:row:col\n *   at function@url:row:col\n *\n * it produces something like:\n *\n *   function@url:row:col\n *   function@url:row:col\n *   function@url:row:col\n *\n * Because of that, it won't be captured by `chrome` RegExp and will fall into `Gecko` branch.\n * This function is extracted so that we can use it in both places without duplicating the logic.\n * Unfortunately \"just\" changing RegExp is too complicated now and making it pass all tests\n * and fix this case seems like an impossible, or at least way too time-consuming task.\n */\nconst extractSafariExtensionDetails = (func: string, filename: string): [string, string] => {\n  const isSafariExtension = func.indexOf('safari-extension') !== -1;\n  const isSafariWebExtension = func.indexOf('safari-web-extension') !== -1;\n\n  return isSafariExtension || isSafariWebExtension\n    ? [\n        func.indexOf('@') !== -1 ? func.split('@')[0] : UNKNOWN_FUNCTION,\n        isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}`,\n      ]\n    : [func, filename];\n};\n","import { isNativeFetch, logger } from '@sentry/utils';\n\nimport { WINDOW } from '../helpers';\n\nlet cachedFetchImpl: FetchImpl | undefined = undefined;\n\nexport type FetchImpl = typeof fetch;\n\n/**\n * A special usecase for incorrectly wrapped Fetch APIs in conjunction with ad-blockers.\n * Whenever someone wraps the Fetch API and returns the wrong promise chain,\n * this chain becomes orphaned and there is no possible way to capture it's rejections\n * other than allowing it bubble up to this very handler. eg.\n *\n * const f = window.fetch;\n * window.fetch = function () {\n *   const p = f.apply(this, arguments);\n *\n *   p.then(function() {\n *     console.log('hi.');\n *   });\n *\n *   return p;\n * }\n *\n * `p.then(function () { ... })` is producing a completely separate promise chain,\n * however, what's returned is `p` - the result of original `fetch` call.\n *\n * This mean, that whenever we use the Fetch API to send our own requests, _and_\n * some ad-blocker blocks it, this orphaned chain will _always_ reject,\n * effectively causing another event to be captured.\n * This makes a whole process become an infinite loop, which we need to somehow\n * deal with, and break it in one way or another.\n *\n * To deal with this issue, we are making sure that we _always_ use the real\n * browser Fetch API, instead of relying on what `window.fetch` exposes.\n * The only downside to this would be missing our own requests as breadcrumbs,\n * but because we are already not doing this, it should be just fine.\n *\n * Possible failed fetch error messages per-browser:\n *\n * Chrome:  Failed to fetch\n * Edge:    Failed to Fetch\n * Firefox: NetworkError when attempting to fetch resource\n * Safari:  resource blocked by content blocker\n */\nexport function getNativeFetchImplementation(): FetchImpl {\n  if (cachedFetchImpl) {\n    return cachedFetchImpl;\n  }\n\n  /* eslint-disable @typescript-eslint/unbound-method */\n\n  // Fast path to avoid DOM I/O\n  if (isNativeFetch(WINDOW.fetch)) {\n    return (cachedFetchImpl = WINDOW.fetch.bind(WINDOW));\n  }\n\n  const document = WINDOW.document;\n  let fetchImpl = WINDOW.fetch;\n  // eslint-disable-next-line deprecation/deprecation\n  if (document && typeof document.createElement === 'function') {\n    try {\n      const sandbox = document.createElement('iframe');\n      sandbox.hidden = true;\n      document.head.appendChild(sandbox);\n      const contentWindow = sandbox.contentWindow;\n      if (contentWindow && contentWindow.fetch) {\n        fetchImpl = contentWindow.fetch;\n      }\n      document.head.removeChild(sandbox);\n    } catch (e) {\n      __DEBUG_BUILD__ &&\n        logger.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', e);\n    }\n  }\n\n  return (cachedFetchImpl = fetchImpl.bind(WINDOW));\n  /* eslint-enable @typescript-eslint/unbound-method */\n}\n\n/** Clears cached fetch impl */\nexport function clearCachedFetchImplementation(): void {\n  cachedFetchImpl = undefined;\n}\n","import { createTransport } from '@sentry/core';\nimport type { Transport, TransportMakeRequestResponse, TransportRequest } from '@sentry/types';\nimport { rejectedSyncPromise } from '@sentry/utils';\n\nimport type { BrowserTransportOptions } from './types';\nimport type { FetchImpl } from './utils';\nimport { clearCachedFetchImplementation, getNativeFetchImplementation } from './utils';\n\n/**\n * Creates a Transport that uses the Fetch API to send events to Sentry.\n */\nexport function makeFetchTransport(\n  options: BrowserTransportOptions,\n  nativeFetch: FetchImpl = getNativeFetchImplementation(),\n): Transport {\n  let pendingBodySize = 0;\n  let pendingCount = 0;\n\n  function makeRequest(request: TransportRequest): PromiseLike<TransportMakeRequestResponse> {\n    const requestSize = request.body.length;\n    pendingBodySize += requestSize;\n    pendingCount++;\n\n    const requestOptions: RequestInit = {\n      body: request.body,\n      method: 'POST',\n      referrerPolicy: 'origin',\n      headers: options.headers,\n      // Outgoing requests are usually cancelled when navigating to a different page, causing a \"TypeError: Failed to\n      // fetch\" error and sending a \"network_error\" client-outcome - in Chrome, the request status shows \"(cancelled)\".\n      // The `keepalive` flag keeps outgoing requests alive, even when switching pages. We want this since we're\n      // frequently sending events right before the user is switching pages (eg. whenfinishing navigation transactions).\n      // Gotchas:\n      // - `keepalive` isn't supported by Firefox\n      // - As per spec (https://fetch.spec.whatwg.org/#http-network-or-cache-fetch):\n      //   If the sum of contentLength and inflightKeepaliveBytes is greater than 64 kibibytes, then return a network error.\n      //   We will therefore only activate the flag when we're below that limit.\n      // There is also a limit of requests that can be open at the same time, so we also limit this to 15\n      // See https://github.com/getsentry/sentry-javascript/pull/7553 for details\n      keepalive: pendingBodySize <= 60_000 && pendingCount < 15,\n      ...options.fetchOptions,\n    };\n\n    try {\n      return nativeFetch(options.url, requestOptions).then(response => {\n        pendingBodySize -= requestSize;\n        pendingCount--;\n        return {\n          statusCode: response.status,\n          headers: {\n            'x-sentry-rate-limits': response.headers.get('X-Sentry-Rate-Limits'),\n            'retry-after': response.headers.get('Retry-After'),\n          },\n        };\n      });\n    } catch (e) {\n      clearCachedFetchImplementation();\n      pendingBodySize -= requestSize;\n      pendingCount--;\n      return rejectedSyncPromise(e);\n    }\n  }\n\n  return createTransport(options, makeRequest);\n}\n","import { createTransport } from '@sentry/core';\nimport type { Transport, TransportMakeRequestResponse, TransportRequest } from '@sentry/types';\nimport { SyncPromise } from '@sentry/utils';\n\nimport type { BrowserTransportOptions } from './types';\n\n/**\n * The DONE ready state for XmlHttpRequest\n *\n * Defining it here as a constant b/c XMLHttpRequest.DONE is not always defined\n * (e.g. during testing, it is `undefined`)\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState}\n */\nconst XHR_READYSTATE_DONE = 4;\n\n/**\n * Creates a Transport that uses the XMLHttpRequest API to send events to Sentry.\n */\nexport function makeXHRTransport(options: BrowserTransportOptions): Transport {\n  function makeRequest(request: TransportRequest): PromiseLike<TransportMakeRequestResponse> {\n    return new SyncPromise((resolve, reject) => {\n      const xhr = new XMLHttpRequest();\n\n      xhr.onerror = reject;\n\n      xhr.onreadystatechange = (): void => {\n        if (xhr.readyState === XHR_READYSTATE_DONE) {\n          resolve({\n            statusCode: xhr.status,\n            headers: {\n              'x-sentry-rate-limits': xhr.getResponseHeader('X-Sentry-Rate-Limits'),\n              'retry-after': xhr.getResponseHeader('Retry-After'),\n            },\n          });\n        }\n      };\n\n      xhr.open('POST', options.url);\n\n      for (const header in options.headers) {\n        if (Object.prototype.hasOwnProperty.call(options.headers, header)) {\n          xhr.setRequestHeader(header, options.headers[header]);\n        }\n      }\n\n      xhr.send(request.body);\n    });\n  }\n\n  return createTransport(options, makeRequest);\n}\n","import type { DsnComponents, EventEnvelope, SdkMetadata, UserFeedback, UserFeedbackItem } from '@sentry/types';\nimport { createEnvelope, dsnToString } from '@sentry/utils';\n\n/**\n * Creates an envelope from a user feedback.\n */\nexport function createUserFeedbackEnvelope(\n  feedback: UserFeedback,\n  {\n    metadata,\n    tunnel,\n    dsn,\n  }: {\n    metadata: SdkMetadata | undefined;\n    tunnel: string | undefined;\n    dsn: DsnComponents | undefined;\n  },\n): EventEnvelope {\n  const headers: EventEnvelope[0] = {\n    event_id: feedback.event_id,\n    sent_at: new Date().toISOString(),\n    ...(metadata &&\n      metadata.sdk && {\n        sdk: {\n          name: metadata.sdk.name,\n          version: metadata.sdk.version,\n        },\n      }),\n    ...(!!tunnel && !!dsn && { dsn: dsnToString(dsn) }),\n  };\n  const item = createUserFeedbackEnvelopeItem(feedback);\n\n  return createEnvelope(headers, [item]);\n}\n\nfunction createUserFeedbackEnvelopeItem(feedback: UserFeedback): UserFeedbackItem {\n  const feedbackHeaders: UserFeedbackItem[0] = {\n    type: 'user_report',\n  };\n  return [feedbackHeaders, feedback];\n}\n","import type { ClientOptions, DsnComponents, DsnLike, SdkInfo } from '@sentry/types';\nimport { dsnToString, makeDsn, urlEncode } from '@sentry/utils';\n\nconst SENTRY_API_VERSION = '7';\n\n/** Returns the prefix to construct Sentry ingestion API endpoints. */\nfunction getBaseApiEndpoint(dsn: DsnComponents): string {\n  const protocol = dsn.protocol ? `${dsn.protocol}:` : '';\n  const port = dsn.port ? `:${dsn.port}` : '';\n  return `${protocol}//${dsn.host}${port}${dsn.path ? `/${dsn.path}` : ''}/api/`;\n}\n\n/** Returns the ingest API endpoint for target. */\nfunction _getIngestEndpoint(dsn: DsnComponents): string {\n  return `${getBaseApiEndpoint(dsn)}${dsn.projectId}/envelope/`;\n}\n\n/** Returns a URL-encoded string with auth config suitable for a query string. */\nfunction _encodedAuth(dsn: DsnComponents, sdkInfo: SdkInfo | undefined): string {\n  return urlEncode({\n    // We send only the minimum set of required information. See\n    // https://github.com/getsentry/sentry-javascript/issues/2572.\n    sentry_key: dsn.publicKey,\n    sentry_version: SENTRY_API_VERSION,\n    ...(sdkInfo && { sentry_client: `${sdkInfo.name}/${sdkInfo.version}` }),\n  });\n}\n\n/**\n * Returns the envelope endpoint URL with auth in the query string.\n *\n * Sending auth as part of the query string and not as custom HTTP headers avoids CORS preflight requests.\n */\nexport function getEnvelopeEndpointWithUrlEncodedAuth(\n  dsn: DsnComponents,\n  // TODO (v8): Remove `tunnelOrOptions` in favor of `options`, and use the substitute code below\n  // options: ClientOptions = {} as ClientOptions,\n  tunnelOrOptions: string | ClientOptions = {} as ClientOptions,\n): string {\n  // TODO (v8): Use this code instead\n  // const { tunnel, _metadata = {} } = options;\n  // return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, _metadata.sdk)}`;\n\n  const tunnel = typeof tunnelOrOptions === 'string' ? tunnelOrOptions : tunnelOrOptions.tunnel;\n  const sdkInfo =\n    typeof tunnelOrOptions === 'string' || !tunnelOrOptions._metadata ? undefined : tunnelOrOptions._metadata.sdk;\n\n  return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, sdkInfo)}`;\n}\n\n/** Returns the url to the report dialog endpoint. */\nexport function getReportDialogEndpoint(\n  dsnLike: DsnLike,\n  dialogOptions: {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    [key: string]: any;\n    user?: { name?: string; email?: string };\n  },\n): string {\n  const dsn = makeDsn(dsnLike);\n  if (!dsn) {\n    return '';\n  }\n\n  const endpoint = `${getBaseApiEndpoint(dsn)}embed/error-page/`;\n\n  let encodedOptions = `dsn=${dsnToString(dsn)}`;\n  for (const key in dialogOptions) {\n    if (key === 'dsn') {\n      continue;\n    }\n\n    if (key === 'user') {\n      const user = dialogOptions.user;\n      if (!user) {\n        continue;\n      }\n      if (user.name) {\n        encodedOptions += `&name=${encodeURIComponent(user.name)}`;\n      }\n      if (user.email) {\n        encodedOptions += `&email=${encodeURIComponent(user.email)}`;\n      }\n    } else {\n      encodedOptions += `&${encodeURIComponent(key)}=${encodeURIComponent(dialogOptions[key] as string)}`;\n    }\n  }\n\n  return `${endpoint}?${encodedOptions}`;\n}\n","export const DEFAULT_ENVIRONMENT = 'production';\n","import type { Event, EventHint, EventProcessor } from '@sentry/types';\nimport { getGlobalSingleton, isThenable, logger, SyncPromise } from '@sentry/utils';\n\n/**\n * Returns the global event processors.\n */\nexport function getGlobalEventProcessors(): EventProcessor[] {\n  return getGlobalSingleton<EventProcessor[]>('globalEventProcessors', () => []);\n}\n\n/**\n * Add a EventProcessor to be kept globally.\n * @param callback EventProcessor to add\n */\nexport function addGlobalEventProcessor(callback: EventProcessor): void {\n  getGlobalEventProcessors().push(callback);\n}\n\n/**\n * Process an array of event processors, returning the processed event (or `null` if the event was dropped).\n */\nexport function notifyEventProcessors(\n  processors: EventProcessor[],\n  event: Event | null,\n  hint: EventHint,\n  index: number = 0,\n): PromiseLike<Event | null> {\n  return new SyncPromise<Event | null>((resolve, reject) => {\n    const processor = processors[index];\n    if (event === null || typeof processor !== 'function') {\n      resolve(event);\n    } else {\n      const result = processor({ ...event }, hint) as Event | null;\n\n      __DEBUG_BUILD__ &&\n        processor.id &&\n        result === null &&\n        logger.log(`Event processor \"${processor.id}\" dropped event`);\n\n      if (isThenable(result)) {\n        void result\n          .then(final => notifyEventProcessors(processors, final, hint, index + 1).then(resolve))\n          .then(null, reject);\n      } else {\n        void notifyEventProcessors(processors, result, hint, index + 1)\n          .then(resolve)\n          .then(null, reject);\n      }\n    }\n  });\n}\n","import type {\n  Breadcrumb,\n  CaptureContext,\n  CheckIn,\n  CustomSamplingContext,\n  Event,\n  EventHint,\n  Extra,\n  Extras,\n  FinishedCheckIn,\n  MonitorConfig,\n  Primitive,\n  Severity,\n  SeverityLevel,\n  TransactionContext,\n  User,\n} from '@sentry/types';\nimport { isThenable, logger, timestampInSeconds, uuid4 } from '@sentry/utils';\n\nimport type { Hub } from './hub';\nimport { getCurrentHub } from './hub';\nimport type { Scope } from './scope';\n\n// Note: All functions in this file are typed with a return value of `ReturnType<Hub[HUB_FUNCTION]>`,\n// where HUB_FUNCTION is some method on the Hub class.\n//\n// This is done to make sure the top level SDK methods stay in sync with the hub methods.\n// Although every method here has an explicit return type, some of them (that map to void returns) do not\n// contain `return` keywords. This is done to save on bundle size, as `return` is not minifiable.\n\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception An exception-like object.\n * @param captureContext Additional scope data to apply to exception event.\n * @returns The generated eventId.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\nexport function captureException(exception: any, captureContext?: CaptureContext): ReturnType<Hub['captureException']> {\n  return getCurrentHub().captureException(exception, { captureContext });\n}\n\n/**\n * Captures a message event and sends it to Sentry.\n *\n * @param message The message to send to Sentry.\n * @param Severity Define the level of the message.\n * @returns The generated eventId.\n */\nexport function captureMessage(\n  message: string,\n  // eslint-disable-next-line deprecation/deprecation\n  captureContext?: CaptureContext | Severity | SeverityLevel,\n): ReturnType<Hub['captureMessage']> {\n  // This is necessary to provide explicit scopes upgrade, without changing the original\n  // arity of the `captureMessage(message, level)` method.\n  const level = typeof captureContext === 'string' ? captureContext : undefined;\n  const context = typeof captureContext !== 'string' ? { captureContext } : undefined;\n  return getCurrentHub().captureMessage(message, level, context);\n}\n\n/**\n * Captures a manually created event and sends it to Sentry.\n *\n * @param event The event to send to Sentry.\n * @returns The generated eventId.\n */\nexport function captureEvent(event: Event, hint?: EventHint): ReturnType<Hub['captureEvent']> {\n  return getCurrentHub().captureEvent(event, hint);\n}\n\n/**\n * Callback to set context information onto the scope.\n * @param callback Callback function that receives Scope.\n */\nexport function configureScope(callback: (scope: Scope) => void): ReturnType<Hub['configureScope']> {\n  getCurrentHub().configureScope(callback);\n}\n\n/**\n * Records a new breadcrumb which will be attached to future events.\n *\n * Breadcrumbs will be added to subsequent events to provide more context on\n * user's actions prior to an error or crash.\n *\n * @param breadcrumb The breadcrumb to record.\n */\nexport function addBreadcrumb(breadcrumb: Breadcrumb): ReturnType<Hub['addBreadcrumb']> {\n  getCurrentHub().addBreadcrumb(breadcrumb);\n}\n\n/**\n * Sets context data with the given name.\n * @param name of the context\n * @param context Any kind of data. This data will be normalized.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function setContext(name: string, context: { [key: string]: any } | null): ReturnType<Hub['setContext']> {\n  getCurrentHub().setContext(name, context);\n}\n\n/**\n * Set an object that will be merged sent as extra data with the event.\n * @param extras Extras object to merge into current context.\n */\nexport function setExtras(extras: Extras): ReturnType<Hub['setExtras']> {\n  getCurrentHub().setExtras(extras);\n}\n\n/**\n * Set key:value that will be sent as extra data with the event.\n * @param key String of extra\n * @param extra Any kind of data. This data will be normalized.\n */\nexport function setExtra(key: string, extra: Extra): ReturnType<Hub['setExtra']> {\n  getCurrentHub().setExtra(key, extra);\n}\n\n/**\n * Set an object that will be merged sent as tags data with the event.\n * @param tags Tags context object to merge into current context.\n */\nexport function setTags(tags: { [key: string]: Primitive }): ReturnType<Hub['setTags']> {\n  getCurrentHub().setTags(tags);\n}\n\n/**\n * Set key:value that will be sent as tags data with the event.\n *\n * Can also be used to unset a tag, by passing `undefined`.\n *\n * @param key String key of tag\n * @param value Value of tag\n */\nexport function setTag(key: string, value: Primitive): ReturnType<Hub['setTag']> {\n  getCurrentHub().setTag(key, value);\n}\n\n/**\n * Updates user context information for future events.\n *\n * @param user User context object to be set in the current context. Pass `null` to unset the user.\n */\nexport function setUser(user: User | null): ReturnType<Hub['setUser']> {\n  getCurrentHub().setUser(user);\n}\n\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n *\n * This is essentially a convenience function for:\n *\n *     pushScope();\n *     callback();\n *     popScope();\n *\n * @param callback that will be enclosed into push/popScope.\n */\nexport function withScope(callback: (scope: Scope) => void): ReturnType<Hub['withScope']> {\n  getCurrentHub().withScope(callback);\n}\n\n/**\n * Starts a new `Transaction` and returns it. This is the entry point to manual tracing instrumentation.\n *\n * A tree structure can be built by adding child spans to the transaction, and child spans to other spans. To start a\n * new child span within the transaction or any span, call the respective `.startChild()` method.\n *\n * Every child span must be finished before the transaction is finished, otherwise the unfinished spans are discarded.\n *\n * The transaction must be finished with a call to its `.finish()` method, at which point the transaction with all its\n * finished child spans will be sent to Sentry.\n *\n * NOTE: This function should only be used for *manual* instrumentation. Auto-instrumentation should call\n * `startTransaction` directly on the hub.\n *\n * @param context Properties of the new `Transaction`.\n * @param customSamplingContext Information given to the transaction sampling function (along with context-dependent\n * default values). See {@link Options.tracesSampler}.\n *\n * @returns The transaction which was just started\n */\nexport function startTransaction(\n  context: TransactionContext,\n  customSamplingContext?: CustomSamplingContext,\n): ReturnType<Hub['startTransaction']> {\n  return getCurrentHub().startTransaction({ ...context }, customSamplingContext);\n}\n\n/**\n * Create a cron monitor check in and send it to Sentry.\n *\n * @param checkIn An object that describes a check in.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nexport function captureCheckIn(checkIn: CheckIn, upsertMonitorConfig?: MonitorConfig): string {\n  const hub = getCurrentHub();\n  const scope = hub.getScope();\n  const client = hub.getClient();\n  if (!client) {\n    __DEBUG_BUILD__ && logger.warn('Cannot capture check-in. No client defined.');\n  } else if (!client.captureCheckIn) {\n    __DEBUG_BUILD__ && logger.warn('Cannot capture check-in. Client does not support sending check-ins.');\n  } else {\n    return client.captureCheckIn(checkIn, upsertMonitorConfig, scope);\n  }\n\n  return uuid4();\n}\n\n/**\n * Wraps a callback with a cron monitor check in. The check in will be sent to Sentry when the callback finishes.\n *\n * @param monitorSlug The distinct slug of the monitor.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nexport function withMonitor<T>(\n  monitorSlug: CheckIn['monitorSlug'],\n  callback: () => T,\n  upsertMonitorConfig?: MonitorConfig,\n): T {\n  const checkInId = captureCheckIn({ monitorSlug, status: 'in_progress' }, upsertMonitorConfig);\n  const now = timestampInSeconds();\n\n  function finishCheckIn(status: FinishedCheckIn['status']): void {\n    captureCheckIn({ monitorSlug, status, checkInId, duration: timestampInSeconds() - now });\n  }\n\n  let maybePromiseResult: T;\n  try {\n    maybePromiseResult = callback();\n  } catch (e) {\n    finishCheckIn('error');\n    throw e;\n  }\n\n  if (isThenable(maybePromiseResult)) {\n    Promise.resolve(maybePromiseResult).then(\n      () => {\n        finishCheckIn('ok');\n      },\n      () => {\n        finishCheckIn('error');\n      },\n    );\n  } else {\n    finishCheckIn('ok');\n  }\n\n  return maybePromiseResult;\n}\n\n/**\n * Call `flush()` on the current client, if there is one. See {@link Client.flush}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue. Omitting this parameter will cause\n * the client to wait until all events are sent before resolving the promise.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport async function flush(timeout?: number): Promise<boolean> {\n  const client = getCurrentHub().getClient();\n  if (client) {\n    return client.flush(timeout);\n  }\n  __DEBUG_BUILD__ && logger.warn('Cannot flush events. No client defined.');\n  return Promise.resolve(false);\n}\n\n/**\n * Call `close()` on the current client, if there is one. See {@link Client.close}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue before shutting down. Omitting this\n * parameter will cause the client to wait until all events are sent before disabling itself.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport async function close(timeout?: number): Promise<boolean> {\n  const client = getCurrentHub().getClient();\n  if (client) {\n    return client.close(timeout);\n  }\n  __DEBUG_BUILD__ && logger.warn('Cannot flush events and disable SDK. No client defined.');\n  return Promise.resolve(false);\n}\n\n/**\n * This is the getter for lastEventId.\n *\n * @returns The last event id of a captured event.\n */\nexport function lastEventId(): string | undefined {\n  return getCurrentHub().lastEventId();\n}\n","/* eslint-disable max-lines */\nimport type {\n  Breadcrumb,\n  BreadcrumbHint,\n  Client,\n  CustomSamplingContext,\n  Event,\n  EventHint,\n  Extra,\n  Extras,\n  Hub as HubInterface,\n  Integration,\n  IntegrationClass,\n  Primitive,\n  Session,\n  SessionContext,\n  Severity,\n  SeverityLevel,\n  Transaction,\n  TransactionContext,\n  User,\n} from '@sentry/types';\nimport { consoleSandbox, dateTimestampInSeconds, getGlobalSingleton, GLOBAL_OBJ, logger, uuid4 } from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from './constants';\nimport { Scope } from './scope';\nimport { closeSession, makeSession, updateSession } from './session';\n\n/**\n * API compatibility version of this hub.\n *\n * WARNING: This number should only be increased when the global interface\n * changes and new methods are introduced.\n *\n * @hidden\n */\nexport const API_VERSION = 4;\n\n/**\n * Default maximum number of breadcrumbs added to an event. Can be overwritten\n * with {@link Options.maxBreadcrumbs}.\n */\nconst DEFAULT_BREADCRUMBS = 100;\n\nexport interface RunWithAsyncContextOptions {\n  /** Whether to reuse an existing async context if one exists. Defaults to false. */\n  reuseExisting?: boolean;\n}\n\n/**\n * @private Private API with no semver guarantees!\n *\n * Strategy used to track async context.\n */\nexport interface AsyncContextStrategy {\n  /**\n   * Gets the current async context. Returns undefined if there is no current async context.\n   */\n  getCurrentHub: () => Hub | undefined;\n  /**\n   * Runs the supplied callback in its own async context.\n   */\n  runWithAsyncContext<T>(callback: () => T, options: RunWithAsyncContextOptions): T;\n}\n\n/**\n * A layer in the process stack.\n * @hidden\n */\nexport interface Layer {\n  client?: Client;\n  scope: Scope;\n}\n\n/**\n * An object that contains a hub and maintains a scope stack.\n * @hidden\n */\nexport interface Carrier {\n  __SENTRY__?: {\n    hub?: Hub;\n    acs?: AsyncContextStrategy;\n    /**\n     * Extra Hub properties injected by various SDKs\n     */\n    integrations?: Integration[];\n    extensions?: {\n      /** Extension methods for the hub, which are bound to the current Hub instance */\n      // eslint-disable-next-line @typescript-eslint/ban-types\n      [key: string]: Function;\n    };\n  };\n}\n\n/**\n * @inheritDoc\n */\nexport class Hub implements HubInterface {\n  /** Is a {@link Layer}[] containing the client and scope */\n  private readonly _stack: Layer[];\n\n  /** Contains the last event id of a captured event.  */\n  private _lastEventId?: string;\n\n  /**\n   * Creates a new instance of the hub, will push one {@link Layer} into the\n   * internal stack on creation.\n   *\n   * @param client bound to the hub.\n   * @param scope bound to the hub.\n   * @param version number, higher number means higher priority.\n   */\n  public constructor(client?: Client, scope: Scope = new Scope(), private readonly _version: number = API_VERSION) {\n    this._stack = [{ scope }];\n    if (client) {\n      this.bindClient(client);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public isOlderThan(version: number): boolean {\n    return this._version < version;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public bindClient(client?: Client): void {\n    const top = this.getStackTop();\n    top.client = client;\n    if (client && client.setupIntegrations) {\n      client.setupIntegrations();\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public pushScope(): Scope {\n    // We want to clone the content of prev scope\n    const scope = Scope.clone(this.getScope());\n    this.getStack().push({\n      client: this.getClient(),\n      scope,\n    });\n    return scope;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public popScope(): boolean {\n    if (this.getStack().length <= 1) return false;\n    return !!this.getStack().pop();\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public withScope(callback: (scope: Scope) => void): void {\n    const scope = this.pushScope();\n    try {\n      callback(scope);\n    } finally {\n      this.popScope();\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getClient<C extends Client>(): C | undefined {\n    return this.getStackTop().client as C;\n  }\n\n  /** Returns the scope of the top stack. */\n  public getScope(): Scope {\n    return this.getStackTop().scope;\n  }\n\n  /** Returns the scope stack for domains or the process. */\n  public getStack(): Layer[] {\n    return this._stack;\n  }\n\n  /** Returns the topmost scope layer in the order domain > local > process. */\n  public getStackTop(): Layer {\n    return this._stack[this._stack.length - 1];\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureException(exception: unknown, hint?: EventHint): string {\n    const eventId = (this._lastEventId = hint && hint.event_id ? hint.event_id : uuid4());\n    const syntheticException = new Error('Sentry syntheticException');\n    this._withClient((client, scope) => {\n      client.captureException(\n        exception,\n        {\n          originalException: exception,\n          syntheticException,\n          ...hint,\n          event_id: eventId,\n        },\n        scope,\n      );\n    });\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureMessage(\n    message: string,\n    // eslint-disable-next-line deprecation/deprecation\n    level?: Severity | SeverityLevel,\n    hint?: EventHint,\n  ): string {\n    const eventId = (this._lastEventId = hint && hint.event_id ? hint.event_id : uuid4());\n    const syntheticException = new Error(message);\n    this._withClient((client, scope) => {\n      client.captureMessage(\n        message,\n        level,\n        {\n          originalException: message,\n          syntheticException,\n          ...hint,\n          event_id: eventId,\n        },\n        scope,\n      );\n    });\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureEvent(event: Event, hint?: EventHint): string {\n    const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n    if (!event.type) {\n      this._lastEventId = eventId;\n    }\n\n    this._withClient((client, scope) => {\n      client.captureEvent(event, { ...hint, event_id: eventId }, scope);\n    });\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public lastEventId(): string | undefined {\n    return this._lastEventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public addBreadcrumb(breadcrumb: Breadcrumb, hint?: BreadcrumbHint): void {\n    const { scope, client } = this.getStackTop();\n\n    if (!client) return;\n\n    const { beforeBreadcrumb = null, maxBreadcrumbs = DEFAULT_BREADCRUMBS } =\n      (client.getOptions && client.getOptions()) || {};\n\n    if (maxBreadcrumbs <= 0) return;\n\n    const timestamp = dateTimestampInSeconds();\n    const mergedBreadcrumb = { timestamp, ...breadcrumb };\n    const finalBreadcrumb = beforeBreadcrumb\n      ? (consoleSandbox(() => beforeBreadcrumb(mergedBreadcrumb, hint)) as Breadcrumb | null)\n      : mergedBreadcrumb;\n\n    if (finalBreadcrumb === null) return;\n\n    if (client.emit) {\n      client.emit('beforeAddBreadcrumb', finalBreadcrumb, hint);\n    }\n\n    scope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setUser(user: User | null): void {\n    this.getScope().setUser(user);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setTags(tags: { [key: string]: Primitive }): void {\n    this.getScope().setTags(tags);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setExtras(extras: Extras): void {\n    this.getScope().setExtras(extras);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setTag(key: string, value: Primitive): void {\n    this.getScope().setTag(key, value);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setExtra(key: string, extra: Extra): void {\n    this.getScope().setExtra(key, extra);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  public setContext(name: string, context: { [key: string]: any } | null): void {\n    this.getScope().setContext(name, context);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public configureScope(callback: (scope: Scope) => void): void {\n    const { scope, client } = this.getStackTop();\n    if (client) {\n      callback(scope);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public run(callback: (hub: Hub) => void): void {\n    const oldHub = makeMain(this);\n    try {\n      callback(this);\n    } finally {\n      makeMain(oldHub);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getIntegration<T extends Integration>(integration: IntegrationClass<T>): T | null {\n    const client = this.getClient();\n    if (!client) return null;\n    try {\n      return client.getIntegration(integration);\n    } catch (_oO) {\n      __DEBUG_BUILD__ && logger.warn(`Cannot retrieve integration ${integration.id} from the current Hub`);\n      return null;\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public startTransaction(context: TransactionContext, customSamplingContext?: CustomSamplingContext): Transaction {\n    const result = this._callExtensionMethod<Transaction>('startTransaction', context, customSamplingContext);\n\n    if (__DEBUG_BUILD__ && !result) {\n      const client = this.getClient();\n      if (!client) {\n        // eslint-disable-next-line no-console\n        console.warn(\n          \"Tracing extension 'startTransaction' is missing. You should 'init' the SDK before calling 'startTransaction'\",\n        );\n      } else {\n        // eslint-disable-next-line no-console\n        console.warn(`Tracing extension 'startTransaction' has not been added. Call 'addTracingExtensions' before calling 'init':\nSentry.addTracingExtensions();\nSentry.init({...});\n`);\n      }\n    }\n\n    return result;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public traceHeaders(): { [key: string]: string } {\n    return this._callExtensionMethod<{ [key: string]: string }>('traceHeaders');\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureSession(endSession: boolean = false): void {\n    // both send the update and pull the session from the scope\n    if (endSession) {\n      return this.endSession();\n    }\n\n    // only send the update\n    this._sendSessionUpdate();\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public endSession(): void {\n    const layer = this.getStackTop();\n    const scope = layer.scope;\n    const session = scope.getSession();\n    if (session) {\n      closeSession(session);\n    }\n    this._sendSessionUpdate();\n\n    // the session is over; take it off of the scope\n    scope.setSession();\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public startSession(context?: SessionContext): Session {\n    const { scope, client } = this.getStackTop();\n    const { release, environment = DEFAULT_ENVIRONMENT } = (client && client.getOptions()) || {};\n\n    // Will fetch userAgent if called from browser sdk\n    const { userAgent } = GLOBAL_OBJ.navigator || {};\n\n    const session = makeSession({\n      release,\n      environment,\n      user: scope.getUser(),\n      ...(userAgent && { userAgent }),\n      ...context,\n    });\n\n    // End existing session if there's one\n    const currentSession = scope.getSession && scope.getSession();\n    if (currentSession && currentSession.status === 'ok') {\n      updateSession(currentSession, { status: 'exited' });\n    }\n    this.endSession();\n\n    // Afterwards we set the new session on the scope\n    scope.setSession(session);\n\n    return session;\n  }\n\n  /**\n   * Returns if default PII should be sent to Sentry and propagated in ourgoing requests\n   * when Tracing is used.\n   */\n  public shouldSendDefaultPii(): boolean {\n    const client = this.getClient();\n    const options = client && client.getOptions();\n    return Boolean(options && options.sendDefaultPii);\n  }\n\n  /**\n   * Sends the current Session on the scope\n   */\n  private _sendSessionUpdate(): void {\n    const { scope, client } = this.getStackTop();\n\n    const session = scope.getSession();\n    if (session && client && client.captureSession) {\n      client.captureSession(session);\n    }\n  }\n\n  /**\n   * Internal helper function to call a method on the top client if it exists.\n   *\n   * @param method The method to call on the client.\n   * @param args Arguments to pass to the client function.\n   */\n  private _withClient(callback: (client: Client, scope: Scope) => void): void {\n    const { scope, client } = this.getStackTop();\n    if (client) {\n      callback(client, scope);\n    }\n  }\n\n  /**\n   * Calls global extension method and binding current instance to the function call\n   */\n  // @ts-expect-error Function lacks ending return statement and return type does not include 'undefined'. ts(2366)\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  private _callExtensionMethod<T>(method: string, ...args: any[]): T {\n    const carrier = getMainCarrier();\n    const sentry = carrier.__SENTRY__;\n    if (sentry && sentry.extensions && typeof sentry.extensions[method] === 'function') {\n      return sentry.extensions[method].apply(this, args);\n    }\n    __DEBUG_BUILD__ && logger.warn(`Extension method ${method} couldn't be found, doing nothing.`);\n  }\n}\n\n/**\n * Returns the global shim registry.\n *\n * FIXME: This function is problematic, because despite always returning a valid Carrier,\n * it has an optional `__SENTRY__` property, which then in turn requires us to always perform an unnecessary check\n * at the call-site. We always access the carrier through this function, so we can guarantee that `__SENTRY__` is there.\n **/\nexport function getMainCarrier(): Carrier {\n  GLOBAL_OBJ.__SENTRY__ = GLOBAL_OBJ.__SENTRY__ || {\n    extensions: {},\n    hub: undefined,\n  };\n  return GLOBAL_OBJ;\n}\n\n/**\n * Replaces the current main hub with the passed one on the global object\n *\n * @returns The old replaced hub\n */\nexport function makeMain(hub: Hub): Hub {\n  const registry = getMainCarrier();\n  const oldHub = getHubFromCarrier(registry);\n  setHubOnCarrier(registry, hub);\n  return oldHub;\n}\n\n/**\n * Returns the default hub instance.\n *\n * If a hub is already registered in the global carrier but this module\n * contains a more recent version, it replaces the registered version.\n * Otherwise, the currently registered hub will be returned.\n */\nexport function getCurrentHub(): Hub {\n  // Get main carrier (global for every environment)\n  const registry = getMainCarrier();\n\n  if (registry.__SENTRY__ && registry.__SENTRY__.acs) {\n    const hub = registry.__SENTRY__.acs.getCurrentHub();\n\n    if (hub) {\n      return hub;\n    }\n  }\n\n  // Return hub that lives on a global object\n  return getGlobalHub(registry);\n}\n\nfunction getGlobalHub(registry: Carrier = getMainCarrier()): Hub {\n  // If there's no hub, or its an old API, assign a new one\n  if (!hasHubOnCarrier(registry) || getHubFromCarrier(registry).isOlderThan(API_VERSION)) {\n    setHubOnCarrier(registry, new Hub());\n  }\n\n  // Return hub that lives on a global object\n  return getHubFromCarrier(registry);\n}\n\n/**\n * @private Private API with no semver guarantees!\n *\n * If the carrier does not contain a hub, a new hub is created with the global hub client and scope.\n */\nexport function ensureHubOnCarrier(carrier: Carrier, parent: Hub = getGlobalHub()): void {\n  // If there's no hub on current domain, or it's an old API, assign a new one\n  if (!hasHubOnCarrier(carrier) || getHubFromCarrier(carrier).isOlderThan(API_VERSION)) {\n    const globalHubTopStack = parent.getStackTop();\n    setHubOnCarrier(carrier, new Hub(globalHubTopStack.client, Scope.clone(globalHubTopStack.scope)));\n  }\n}\n\n/**\n * @private Private API with no semver guarantees!\n *\n * Sets the global async context strategy\n */\nexport function setAsyncContextStrategy(strategy: AsyncContextStrategy | undefined): void {\n  // Get main carrier (global for every environment)\n  const registry = getMainCarrier();\n  registry.__SENTRY__ = registry.__SENTRY__ || {};\n  registry.__SENTRY__.acs = strategy;\n}\n\n/**\n * Runs the supplied callback in its own async context. Async Context strategies are defined per SDK.\n *\n * @param callback The callback to run in its own async context\n * @param options Options to pass to the async context strategy\n * @returns The result of the callback\n */\nexport function runWithAsyncContext<T>(callback: () => T, options: RunWithAsyncContextOptions = {}): T {\n  const registry = getMainCarrier();\n\n  if (registry.__SENTRY__ && registry.__SENTRY__.acs) {\n    return registry.__SENTRY__.acs.runWithAsyncContext(callback, options);\n  }\n\n  // if there was no strategy, fallback to just calling the callback\n  return callback();\n}\n\n/**\n * This will tell whether a carrier has a hub on it or not\n * @param carrier object\n */\nfunction hasHubOnCarrier(carrier: Carrier): boolean {\n  return !!(carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub);\n}\n\n/**\n * This will create a new {@link Hub} and add to the passed object on\n * __SENTRY__.hub.\n * @param carrier object\n * @hidden\n */\nexport function getHubFromCarrier(carrier: Carrier): Hub {\n  return getGlobalSingleton<Hub>('hub', () => new Hub(), carrier);\n}\n\n/**\n * This will set passed {@link Hub} on the passed object's __SENTRY__.hub attribute\n * @param carrier object\n * @param hub Hub\n * @returns A boolean indicating success or failure\n */\nexport function setHubOnCarrier(carrier: Carrier, hub: Hub): boolean {\n  if (!carrier) return false;\n  const __SENTRY__ = (carrier.__SENTRY__ = carrier.__SENTRY__ || {});\n  __SENTRY__.hub = hub;\n  return true;\n}\n","import type { Client, Event, EventHint, Integration, Options } from '@sentry/types';\nimport { arrayify, logger } from '@sentry/utils';\n\nimport { addGlobalEventProcessor } from './eventProcessors';\nimport { getCurrentHub } from './hub';\n\ndeclare module '@sentry/types' {\n  interface Integration {\n    isDefaultInstance?: boolean;\n  }\n}\n\nexport const installedIntegrations: string[] = [];\n\n/** Map of integrations assigned to a client */\nexport type IntegrationIndex = {\n  [key: string]: Integration;\n};\n\n/**\n * Remove duplicates from the given array, preferring the last instance of any duplicate. Not guaranteed to\n * preseve the order of integrations in the array.\n *\n * @private\n */\nfunction filterDuplicates(integrations: Integration[]): Integration[] {\n  const integrationsByName: { [key: string]: Integration } = {};\n\n  integrations.forEach(currentInstance => {\n    const { name } = currentInstance;\n\n    const existingInstance = integrationsByName[name];\n\n    // We want integrations later in the array to overwrite earlier ones of the same type, except that we never want a\n    // default instance to overwrite an existing user instance\n    if (existingInstance && !existingInstance.isDefaultInstance && currentInstance.isDefaultInstance) {\n      return;\n    }\n\n    integrationsByName[name] = currentInstance;\n  });\n\n  return Object.keys(integrationsByName).map(k => integrationsByName[k]);\n}\n\n/** Gets integrations to install */\nexport function getIntegrationsToSetup(options: Options): Integration[] {\n  const defaultIntegrations = options.defaultIntegrations || [];\n  const userIntegrations = options.integrations;\n\n  // We flag default instances, so that later we can tell them apart from any user-created instances of the same class\n  defaultIntegrations.forEach(integration => {\n    integration.isDefaultInstance = true;\n  });\n\n  let integrations: Integration[];\n\n  if (Array.isArray(userIntegrations)) {\n    integrations = [...defaultIntegrations, ...userIntegrations];\n  } else if (typeof userIntegrations === 'function') {\n    integrations = arrayify(userIntegrations(defaultIntegrations));\n  } else {\n    integrations = defaultIntegrations;\n  }\n\n  const finalIntegrations = filterDuplicates(integrations);\n\n  // The `Debug` integration prints copies of the `event` and `hint` which will be passed to `beforeSend` or\n  // `beforeSendTransaction`. It therefore has to run after all other integrations, so that the changes of all event\n  // processors will be reflected in the printed values. For lack of a more elegant way to guarantee that, we therefore\n  // locate it and, assuming it exists, pop it out of its current spot and shove it onto the end of the array.\n  const debugIndex = findIndex(finalIntegrations, integration => integration.name === 'Debug');\n  if (debugIndex !== -1) {\n    const [debugInstance] = finalIntegrations.splice(debugIndex, 1);\n    finalIntegrations.push(debugInstance);\n  }\n\n  return finalIntegrations;\n}\n\n/**\n * Given a list of integration instances this installs them all. When `withDefaults` is set to `true` then all default\n * integrations are added unless they were already provided before.\n * @param integrations array of integration instances\n * @param withDefault should enable default integrations\n */\nexport function setupIntegrations(client: Client, integrations: Integration[]): IntegrationIndex {\n  const integrationIndex: IntegrationIndex = {};\n\n  integrations.forEach(integration => {\n    // guard against empty provided integrations\n    if (integration) {\n      setupIntegration(client, integration, integrationIndex);\n    }\n  });\n\n  return integrationIndex;\n}\n\n/** Setup a single integration.  */\nexport function setupIntegration(client: Client, integration: Integration, integrationIndex: IntegrationIndex): void {\n  integrationIndex[integration.name] = integration;\n\n  if (installedIntegrations.indexOf(integration.name) === -1) {\n    integration.setupOnce(addGlobalEventProcessor, getCurrentHub);\n    installedIntegrations.push(integration.name);\n  }\n\n  if (client.on && typeof integration.preprocessEvent === 'function') {\n    const callback = integration.preprocessEvent.bind(integration) as typeof integration.preprocessEvent;\n    client.on('preprocessEvent', (event, hint) => callback(event, hint, client));\n  }\n\n  if (client.addEventProcessor && typeof integration.processEvent === 'function') {\n    const callback = integration.processEvent.bind(integration) as typeof integration.processEvent;\n\n    const processor = Object.assign((event: Event, hint: EventHint) => callback(event, hint, client), {\n      id: integration.name,\n    });\n\n    client.addEventProcessor(processor);\n  }\n\n  __DEBUG_BUILD__ && logger.log(`Integration installed: ${integration.name}`);\n}\n\n/** Add an integration to the current hub's client. */\nexport function addIntegration(integration: Integration): void {\n  const client = getCurrentHub().getClient();\n\n  if (!client || !client.addIntegration) {\n    __DEBUG_BUILD__ && logger.warn(`Cannot add integration \"${integration.name}\" because no SDK Client is available.`);\n    return;\n  }\n\n  client.addIntegration(integration);\n}\n\n// Polyfill for Array.findIndex(), which is not supported in ES5\nfunction findIndex<T>(arr: T[], callback: (item: T) => boolean): number {\n  for (let i = 0; i < arr.length; i++) {\n    if (callback(arr[i]) === true) {\n      return i;\n    }\n  }\n\n  return -1;\n}\n","import type { Integration, WrappedFunction } from '@sentry/types';\nimport { getOriginalFunction } from '@sentry/utils';\n\nlet originalFunctionToString: () => void;\n\n/** Patch toString calls to return proper name for wrapped functions */\nexport class FunctionToString implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'FunctionToString';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  public constructor() {\n    this.name = FunctionToString.id;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(): void {\n    // eslint-disable-next-line @typescript-eslint/unbound-method\n    originalFunctionToString = Function.prototype.toString;\n\n    // intrinsics (like Function.prototype) might be immutable in some environments\n    // e.g. Node with --frozen-intrinsics, XS (an embedded JavaScript engine) or SES (a JavaScript proposal)\n    try {\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      Function.prototype.toString = function (this: WrappedFunction, ...args: any[]): string {\n        const context = getOriginalFunction(this) || this;\n        return originalFunctionToString.apply(context, args);\n      };\n    } catch {\n      // ignore errors here, just don't patch this\n    }\n  }\n}\n","import type { Client, Event, EventHint, Integration, StackFrame } from '@sentry/types';\nimport { getEventDescription, logger, stringMatchesSomePattern } from '@sentry/utils';\n\n// \"Script error.\" is hard coded into browsers for errors that it can't read.\n// this is the result of a script being pulled in from an external domain and CORS.\nconst DEFAULT_IGNORE_ERRORS = [/^Script error\\.?$/, /^Javascript error: Script error\\.? on line 0$/];\n\nconst DEFAULT_IGNORE_TRANSACTIONS = [\n  /^.*\\/healthcheck$/,\n  /^.*\\/healthy$/,\n  /^.*\\/live$/,\n  /^.*\\/ready$/,\n  /^.*\\/heartbeat$/,\n  /^.*\\/health$/,\n  /^.*\\/healthz$/,\n];\n\n/** Options for the InboundFilters integration */\nexport interface InboundFiltersOptions {\n  allowUrls: Array<string | RegExp>;\n  denyUrls: Array<string | RegExp>;\n  ignoreErrors: Array<string | RegExp>;\n  ignoreTransactions: Array<string | RegExp>;\n  ignoreInternal: boolean;\n  disableErrorDefaults: boolean;\n  disableTransactionDefaults: boolean;\n}\n\n/** Inbound filters configurable by the user */\nexport class InboundFilters implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'InboundFilters';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  private readonly _options: Partial<InboundFiltersOptions>;\n\n  public constructor(options: Partial<InboundFiltersOptions> = {}) {\n    this.name = InboundFilters.id;\n    this._options = options;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(_addGlobaleventProcessor: unknown, _getCurrentHub: unknown): void {\n    // noop\n  }\n\n  /** @inheritDoc */\n  public processEvent(event: Event, _eventHint: EventHint, client: Client): Event | null {\n    const clientOptions = client.getOptions();\n    const options = _mergeOptions(this._options, clientOptions);\n    return _shouldDropEvent(event, options) ? null : event;\n  }\n}\n\n/** JSDoc */\nexport function _mergeOptions(\n  internalOptions: Partial<InboundFiltersOptions> = {},\n  clientOptions: Partial<InboundFiltersOptions> = {},\n): Partial<InboundFiltersOptions> {\n  return {\n    allowUrls: [...(internalOptions.allowUrls || []), ...(clientOptions.allowUrls || [])],\n    denyUrls: [...(internalOptions.denyUrls || []), ...(clientOptions.denyUrls || [])],\n    ignoreErrors: [\n      ...(internalOptions.ignoreErrors || []),\n      ...(clientOptions.ignoreErrors || []),\n      ...(internalOptions.disableErrorDefaults ? [] : DEFAULT_IGNORE_ERRORS),\n    ],\n    ignoreTransactions: [\n      ...(internalOptions.ignoreTransactions || []),\n      ...(clientOptions.ignoreTransactions || []),\n      ...(internalOptions.disableTransactionDefaults ? [] : DEFAULT_IGNORE_TRANSACTIONS),\n    ],\n    ignoreInternal: internalOptions.ignoreInternal !== undefined ? internalOptions.ignoreInternal : true,\n  };\n}\n\n/** JSDoc */\nexport function _shouldDropEvent(event: Event, options: Partial<InboundFiltersOptions>): boolean {\n  if (options.ignoreInternal && _isSentryError(event)) {\n    __DEBUG_BUILD__ &&\n      logger.warn(`Event dropped due to being internal Sentry Error.\\nEvent: ${getEventDescription(event)}`);\n    return true;\n  }\n  if (_isIgnoredError(event, options.ignoreErrors)) {\n    __DEBUG_BUILD__ &&\n      logger.warn(\n        `Event dropped due to being matched by \\`ignoreErrors\\` option.\\nEvent: ${getEventDescription(event)}`,\n      );\n    return true;\n  }\n  if (_isIgnoredTransaction(event, options.ignoreTransactions)) {\n    __DEBUG_BUILD__ &&\n      logger.warn(\n        `Event dropped due to being matched by \\`ignoreTransactions\\` option.\\nEvent: ${getEventDescription(event)}`,\n      );\n    return true;\n  }\n  if (_isDeniedUrl(event, options.denyUrls)) {\n    __DEBUG_BUILD__ &&\n      logger.warn(\n        `Event dropped due to being matched by \\`denyUrls\\` option.\\nEvent: ${getEventDescription(\n          event,\n        )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n      );\n    return true;\n  }\n  if (!_isAllowedUrl(event, options.allowUrls)) {\n    __DEBUG_BUILD__ &&\n      logger.warn(\n        `Event dropped due to not being matched by \\`allowUrls\\` option.\\nEvent: ${getEventDescription(\n          event,\n        )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n      );\n    return true;\n  }\n  return false;\n}\n\nfunction _isIgnoredError(event: Event, ignoreErrors?: Array<string | RegExp>): boolean {\n  // If event.type, this is not an error\n  if (event.type || !ignoreErrors || !ignoreErrors.length) {\n    return false;\n  }\n\n  return _getPossibleEventMessages(event).some(message => stringMatchesSomePattern(message, ignoreErrors));\n}\n\nfunction _isIgnoredTransaction(event: Event, ignoreTransactions?: Array<string | RegExp>): boolean {\n  if (event.type !== 'transaction' || !ignoreTransactions || !ignoreTransactions.length) {\n    return false;\n  }\n\n  const name = event.transaction;\n  return name ? stringMatchesSomePattern(name, ignoreTransactions) : false;\n}\n\nfunction _isDeniedUrl(event: Event, denyUrls?: Array<string | RegExp>): boolean {\n  // TODO: Use Glob instead?\n  if (!denyUrls || !denyUrls.length) {\n    return false;\n  }\n  const url = _getEventFilterUrl(event);\n  return !url ? false : stringMatchesSomePattern(url, denyUrls);\n}\n\nfunction _isAllowedUrl(event: Event, allowUrls?: Array<string | RegExp>): boolean {\n  // TODO: Use Glob instead?\n  if (!allowUrls || !allowUrls.length) {\n    return true;\n  }\n  const url = _getEventFilterUrl(event);\n  return !url ? true : stringMatchesSomePattern(url, allowUrls);\n}\n\nfunction _getPossibleEventMessages(event: Event): string[] {\n  const possibleMessages: string[] = [];\n\n  if (event.message) {\n    possibleMessages.push(event.message);\n  }\n\n  let lastException;\n  try {\n    // @ts-expect-error Try catching to save bundle size\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    lastException = event.exception.values[event.exception.values.length - 1];\n  } catch (e) {\n    // try catching to save bundle size checking existence of variables\n  }\n\n  if (lastException) {\n    if (lastException.value) {\n      possibleMessages.push(lastException.value);\n      if (lastException.type) {\n        possibleMessages.push(`${lastException.type}: ${lastException.value}`);\n      }\n    }\n  }\n\n  if (__DEBUG_BUILD__ && possibleMessages.length === 0) {\n    logger.error(`Could not extract message for event ${getEventDescription(event)}`);\n  }\n\n  return possibleMessages;\n}\n\nfunction _isSentryError(event: Event): boolean {\n  try {\n    // @ts-expect-error can't be a sentry error if undefined\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    return event.exception.values[0].type === 'SentryError';\n  } catch (e) {\n    // ignore\n  }\n  return false;\n}\n\nfunction _getLastValidUrl(frames: StackFrame[] = []): string | null {\n  for (let i = frames.length - 1; i >= 0; i--) {\n    const frame = frames[i];\n\n    if (frame && frame.filename !== '<anonymous>' && frame.filename !== '[native code]') {\n      return frame.filename || null;\n    }\n  }\n\n  return null;\n}\n\nfunction _getEventFilterUrl(event: Event): string | null {\n  try {\n    let frames;\n    try {\n      // @ts-expect-error we only care about frames if the whole thing here is defined\n      frames = event.exception.values[0].stacktrace.frames;\n    } catch (e) {\n      // ignore\n    }\n    return frames ? _getLastValidUrl(frames) : null;\n  } catch (oO) {\n    __DEBUG_BUILD__ && logger.error(`Cannot extract url for event ${getEventDescription(event)}`);\n    return null;\n  }\n}\n","/* eslint-disable max-lines */\nimport type {\n  Attachment,\n  Breadcrumb,\n  CaptureContext,\n  Context,\n  Contexts,\n  Event,\n  EventHint,\n  EventProcessor,\n  Extra,\n  Extras,\n  Primitive,\n  PropagationContext,\n  RequestSession,\n  Scope as ScopeInterface,\n  ScopeContext,\n  Session,\n  Severity,\n  SeverityLevel,\n  Span,\n  Transaction,\n  User,\n} from '@sentry/types';\nimport { arrayify, dateTimestampInSeconds, isPlainObject, uuid4 } from '@sentry/utils';\n\nimport { getGlobalEventProcessors, notifyEventProcessors } from './eventProcessors';\nimport { updateSession } from './session';\n\n/**\n * Default value for maximum number of breadcrumbs added to an event.\n */\nconst DEFAULT_MAX_BREADCRUMBS = 100;\n\n/**\n * Holds additional event information. {@link Scope.applyToEvent} will be\n * called by the client before an event will be sent.\n */\nexport class Scope implements ScopeInterface {\n  /** Flag if notifying is happening. */\n  protected _notifyingListeners: boolean;\n\n  /** Callback for client to receive scope changes. */\n  protected _scopeListeners: Array<(scope: Scope) => void>;\n\n  /** Callback list that will be called after {@link applyToEvent}. */\n  protected _eventProcessors: EventProcessor[];\n\n  /** Array of breadcrumbs. */\n  protected _breadcrumbs: Breadcrumb[];\n\n  /** User */\n  protected _user: User;\n\n  /** Tags */\n  protected _tags: { [key: string]: Primitive };\n\n  /** Extra */\n  protected _extra: Extras;\n\n  /** Contexts */\n  protected _contexts: Contexts;\n\n  /** Attachments */\n  protected _attachments: Attachment[];\n\n  /** Propagation Context for distributed tracing */\n  protected _propagationContext: PropagationContext;\n\n  /**\n   * A place to stash data which is needed at some point in the SDK's event processing pipeline but which shouldn't get\n   * sent to Sentry\n   */\n  protected _sdkProcessingMetadata: { [key: string]: unknown };\n\n  /** Fingerprint */\n  protected _fingerprint?: string[];\n\n  /** Severity */\n  // eslint-disable-next-line deprecation/deprecation\n  protected _level?: Severity | SeverityLevel;\n\n  /** Transaction Name */\n  protected _transactionName?: string;\n\n  /** Span */\n  protected _span?: Span;\n\n  /** Session */\n  protected _session?: Session;\n\n  /** Request Mode Session Status */\n  protected _requestSession?: RequestSession;\n\n  // NOTE: Any field which gets added here should get added not only to the constructor but also to the `clone` method.\n\n  public constructor() {\n    this._notifyingListeners = false;\n    this._scopeListeners = [];\n    this._eventProcessors = [];\n    this._breadcrumbs = [];\n    this._attachments = [];\n    this._user = {};\n    this._tags = {};\n    this._extra = {};\n    this._contexts = {};\n    this._sdkProcessingMetadata = {};\n    this._propagationContext = generatePropagationContext();\n  }\n\n  /**\n   * Inherit values from the parent scope.\n   * @param scope to clone.\n   */\n  public static clone(scope?: Scope): Scope {\n    const newScope = new Scope();\n    if (scope) {\n      newScope._breadcrumbs = [...scope._breadcrumbs];\n      newScope._tags = { ...scope._tags };\n      newScope._extra = { ...scope._extra };\n      newScope._contexts = { ...scope._contexts };\n      newScope._user = scope._user;\n      newScope._level = scope._level;\n      newScope._span = scope._span;\n      newScope._session = scope._session;\n      newScope._transactionName = scope._transactionName;\n      newScope._fingerprint = scope._fingerprint;\n      newScope._eventProcessors = [...scope._eventProcessors];\n      newScope._requestSession = scope._requestSession;\n      newScope._attachments = [...scope._attachments];\n      newScope._sdkProcessingMetadata = { ...scope._sdkProcessingMetadata };\n      newScope._propagationContext = { ...scope._propagationContext };\n    }\n    return newScope;\n  }\n\n  /**\n   * Add internal on change listener. Used for sub SDKs that need to store the scope.\n   * @hidden\n   */\n  public addScopeListener(callback: (scope: Scope) => void): void {\n    this._scopeListeners.push(callback);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public addEventProcessor(callback: EventProcessor): this {\n    this._eventProcessors.push(callback);\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setUser(user: User | null): this {\n    this._user = user || {};\n    if (this._session) {\n      updateSession(this._session, { user });\n    }\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getUser(): User | undefined {\n    return this._user;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getRequestSession(): RequestSession | undefined {\n    return this._requestSession;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setRequestSession(requestSession?: RequestSession): this {\n    this._requestSession = requestSession;\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setTags(tags: { [key: string]: Primitive }): this {\n    this._tags = {\n      ...this._tags,\n      ...tags,\n    };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setTag(key: string, value: Primitive): this {\n    this._tags = { ...this._tags, [key]: value };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setExtras(extras: Extras): this {\n    this._extra = {\n      ...this._extra,\n      ...extras,\n    };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setExtra(key: string, extra: Extra): this {\n    this._extra = { ...this._extra, [key]: extra };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setFingerprint(fingerprint: string[]): this {\n    this._fingerprint = fingerprint;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setLevel(\n    // eslint-disable-next-line deprecation/deprecation\n    level: Severity | SeverityLevel,\n  ): this {\n    this._level = level;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setTransactionName(name?: string): this {\n    this._transactionName = name;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setContext(key: string, context: Context | null): this {\n    if (context === null) {\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete this._contexts[key];\n    } else {\n      this._contexts[key] = context;\n    }\n\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setSpan(span?: Span): this {\n    this._span = span;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getSpan(): Span | undefined {\n    return this._span;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getTransaction(): Transaction | undefined {\n    // Often, this span (if it exists at all) will be a transaction, but it's not guaranteed to be. Regardless, it will\n    // have a pointer to the currently-active transaction.\n    const span = this.getSpan();\n    return span && span.transaction;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setSession(session?: Session): this {\n    if (!session) {\n      delete this._session;\n    } else {\n      this._session = session;\n    }\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getSession(): Session | undefined {\n    return this._session;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public update(captureContext?: CaptureContext): this {\n    if (!captureContext) {\n      return this;\n    }\n\n    if (typeof captureContext === 'function') {\n      const updatedScope = (captureContext as <T>(scope: T) => T)(this);\n      return updatedScope instanceof Scope ? updatedScope : this;\n    }\n\n    if (captureContext instanceof Scope) {\n      this._tags = { ...this._tags, ...captureContext._tags };\n      this._extra = { ...this._extra, ...captureContext._extra };\n      this._contexts = { ...this._contexts, ...captureContext._contexts };\n      if (captureContext._user && Object.keys(captureContext._user).length) {\n        this._user = captureContext._user;\n      }\n      if (captureContext._level) {\n        this._level = captureContext._level;\n      }\n      if (captureContext._fingerprint) {\n        this._fingerprint = captureContext._fingerprint;\n      }\n      if (captureContext._requestSession) {\n        this._requestSession = captureContext._requestSession;\n      }\n      if (captureContext._propagationContext) {\n        this._propagationContext = captureContext._propagationContext;\n      }\n    } else if (isPlainObject(captureContext)) {\n      // eslint-disable-next-line no-param-reassign\n      captureContext = captureContext as ScopeContext;\n      this._tags = { ...this._tags, ...captureContext.tags };\n      this._extra = { ...this._extra, ...captureContext.extra };\n      this._contexts = { ...this._contexts, ...captureContext.contexts };\n      if (captureContext.user) {\n        this._user = captureContext.user;\n      }\n      if (captureContext.level) {\n        this._level = captureContext.level;\n      }\n      if (captureContext.fingerprint) {\n        this._fingerprint = captureContext.fingerprint;\n      }\n      if (captureContext.requestSession) {\n        this._requestSession = captureContext.requestSession;\n      }\n      if (captureContext.propagationContext) {\n        this._propagationContext = captureContext.propagationContext;\n      }\n    }\n\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public clear(): this {\n    this._breadcrumbs = [];\n    this._tags = {};\n    this._extra = {};\n    this._user = {};\n    this._contexts = {};\n    this._level = undefined;\n    this._transactionName = undefined;\n    this._fingerprint = undefined;\n    this._requestSession = undefined;\n    this._span = undefined;\n    this._session = undefined;\n    this._notifyScopeListeners();\n    this._attachments = [];\n    this._propagationContext = generatePropagationContext();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public addBreadcrumb(breadcrumb: Breadcrumb, maxBreadcrumbs?: number): this {\n    const maxCrumbs = typeof maxBreadcrumbs === 'number' ? maxBreadcrumbs : DEFAULT_MAX_BREADCRUMBS;\n\n    // No data has been changed, so don't notify scope listeners\n    if (maxCrumbs <= 0) {\n      return this;\n    }\n\n    const mergedBreadcrumb = {\n      timestamp: dateTimestampInSeconds(),\n      ...breadcrumb,\n    };\n\n    const breadcrumbs = this._breadcrumbs;\n    breadcrumbs.push(mergedBreadcrumb);\n    this._breadcrumbs = breadcrumbs.length > maxCrumbs ? breadcrumbs.slice(-maxCrumbs) : breadcrumbs;\n\n    this._notifyScopeListeners();\n\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getLastBreadcrumb(): Breadcrumb | undefined {\n    return this._breadcrumbs[this._breadcrumbs.length - 1];\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public clearBreadcrumbs(): this {\n    this._breadcrumbs = [];\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public addAttachment(attachment: Attachment): this {\n    this._attachments.push(attachment);\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getAttachments(): Attachment[] {\n    return this._attachments;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public clearAttachments(): this {\n    this._attachments = [];\n    return this;\n  }\n\n  /**\n   * Applies data from the scope to the event and runs all event processors on it.\n   *\n   * @param event Event\n   * @param hint Object containing additional information about the original exception, for use by the event processors.\n   * @hidden\n   */\n  public applyToEvent(\n    event: Event,\n    hint: EventHint = {},\n    additionalEventProcessors?: EventProcessor[],\n  ): PromiseLike<Event | null> {\n    if (this._extra && Object.keys(this._extra).length) {\n      event.extra = { ...this._extra, ...event.extra };\n    }\n    if (this._tags && Object.keys(this._tags).length) {\n      event.tags = { ...this._tags, ...event.tags };\n    }\n    if (this._user && Object.keys(this._user).length) {\n      event.user = { ...this._user, ...event.user };\n    }\n    if (this._contexts && Object.keys(this._contexts).length) {\n      event.contexts = { ...this._contexts, ...event.contexts };\n    }\n    if (this._level) {\n      event.level = this._level;\n    }\n    if (this._transactionName) {\n      event.transaction = this._transactionName;\n    }\n\n    // We want to set the trace context for normal events only if there isn't already\n    // a trace context on the event. There is a product feature in place where we link\n    // errors with transaction and it relies on that.\n    if (this._span) {\n      event.contexts = { trace: this._span.getTraceContext(), ...event.contexts };\n      const transaction = this._span.transaction;\n      if (transaction) {\n        event.sdkProcessingMetadata = {\n          dynamicSamplingContext: transaction.getDynamicSamplingContext(),\n          ...event.sdkProcessingMetadata,\n        };\n        const transactionName = transaction.name;\n        if (transactionName) {\n          event.tags = { transaction: transactionName, ...event.tags };\n        }\n      }\n    }\n\n    this._applyFingerprint(event);\n\n    const scopeBreadcrumbs = this._getBreadcrumbs();\n    const breadcrumbs = [...(event.breadcrumbs || []), ...scopeBreadcrumbs];\n    event.breadcrumbs = breadcrumbs.length > 0 ? breadcrumbs : undefined;\n\n    event.sdkProcessingMetadata = {\n      ...event.sdkProcessingMetadata,\n      ...this._sdkProcessingMetadata,\n      propagationContext: this._propagationContext,\n    };\n\n    // TODO (v8): Update this order to be: Global > Client > Scope\n    return notifyEventProcessors(\n      [...(additionalEventProcessors || []), ...getGlobalEventProcessors(), ...this._eventProcessors],\n      event,\n      hint,\n    );\n  }\n\n  /**\n   * Add data which will be accessible during event processing but won't get sent to Sentry\n   */\n  public setSDKProcessingMetadata(newData: { [key: string]: unknown }): this {\n    this._sdkProcessingMetadata = { ...this._sdkProcessingMetadata, ...newData };\n\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setPropagationContext(context: PropagationContext): this {\n    this._propagationContext = context;\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getPropagationContext(): PropagationContext {\n    return this._propagationContext;\n  }\n\n  /**\n   * Get the breadcrumbs for this scope.\n   */\n  protected _getBreadcrumbs(): Breadcrumb[] {\n    return this._breadcrumbs;\n  }\n\n  /**\n   * This will be called on every set call.\n   */\n  protected _notifyScopeListeners(): void {\n    // We need this check for this._notifyingListeners to be able to work on scope during updates\n    // If this check is not here we'll produce endless recursion when something is done with the scope\n    // during the callback.\n    if (!this._notifyingListeners) {\n      this._notifyingListeners = true;\n      this._scopeListeners.forEach(callback => {\n        callback(this);\n      });\n      this._notifyingListeners = false;\n    }\n  }\n\n  /**\n   * Applies fingerprint from the scope to the event if there's one,\n   * uses message if there's one instead or get rid of empty fingerprint\n   */\n  private _applyFingerprint(event: Event): void {\n    // Make sure it's an array first and we actually have something in place\n    event.fingerprint = event.fingerprint ? arrayify(event.fingerprint) : [];\n\n    // If we have something on the scope, then merge it with event\n    if (this._fingerprint) {\n      event.fingerprint = event.fingerprint.concat(this._fingerprint);\n    }\n\n    // If we have no data at all, remove empty array default\n    if (event.fingerprint && !event.fingerprint.length) {\n      delete event.fingerprint;\n    }\n  }\n}\n\nfunction generatePropagationContext(): PropagationContext {\n  return {\n    traceId: uuid4(),\n    spanId: uuid4().substring(16),\n  };\n}\n","import type { SerializedSession, Session, SessionContext, SessionStatus } from '@sentry/types';\nimport { dropUndefinedKeys, timestampInSeconds, uuid4 } from '@sentry/utils';\n\n/**\n * Creates a new `Session` object by setting certain default parameters. If optional @param context\n * is passed, the passed properties are applied to the session object.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns a new `Session` object\n */\nexport function makeSession(context?: Omit<SessionContext, 'started' | 'status'>): Session {\n  // Both timestamp and started are in seconds since the UNIX epoch.\n  const startingTime = timestampInSeconds();\n\n  const session: Session = {\n    sid: uuid4(),\n    init: true,\n    timestamp: startingTime,\n    started: startingTime,\n    duration: 0,\n    status: 'ok',\n    errors: 0,\n    ignoreDuration: false,\n    toJSON: () => sessionToJSON(session),\n  };\n\n  if (context) {\n    updateSession(session, context);\n  }\n\n  return session;\n}\n\n/**\n * Updates a session object with the properties passed in the context.\n *\n * Note that this function mutates the passed object and returns void.\n * (Had to do this instead of returning a new and updated session because closing and sending a session\n * makes an update to the session after it was passed to the sending logic.\n * @see BaseClient.captureSession )\n *\n * @param session the `Session` to update\n * @param context the `SessionContext` holding the properties that should be updated in @param session\n */\n// eslint-disable-next-line complexity\nexport function updateSession(session: Session, context: SessionContext = {}): void {\n  if (context.user) {\n    if (!session.ipAddress && context.user.ip_address) {\n      session.ipAddress = context.user.ip_address;\n    }\n\n    if (!session.did && !context.did) {\n      session.did = context.user.id || context.user.email || context.user.username;\n    }\n  }\n\n  session.timestamp = context.timestamp || timestampInSeconds();\n\n  if (context.abnormal_mechanism) {\n    session.abnormal_mechanism = context.abnormal_mechanism;\n  }\n\n  if (context.ignoreDuration) {\n    session.ignoreDuration = context.ignoreDuration;\n  }\n  if (context.sid) {\n    // Good enough uuid validation. — Kamil\n    session.sid = context.sid.length === 32 ? context.sid : uuid4();\n  }\n  if (context.init !== undefined) {\n    session.init = context.init;\n  }\n  if (!session.did && context.did) {\n    session.did = `${context.did}`;\n  }\n  if (typeof context.started === 'number') {\n    session.started = context.started;\n  }\n  if (session.ignoreDuration) {\n    session.duration = undefined;\n  } else if (typeof context.duration === 'number') {\n    session.duration = context.duration;\n  } else {\n    const duration = session.timestamp - session.started;\n    session.duration = duration >= 0 ? duration : 0;\n  }\n  if (context.release) {\n    session.release = context.release;\n  }\n  if (context.environment) {\n    session.environment = context.environment;\n  }\n  if (!session.ipAddress && context.ipAddress) {\n    session.ipAddress = context.ipAddress;\n  }\n  if (!session.userAgent && context.userAgent) {\n    session.userAgent = context.userAgent;\n  }\n  if (typeof context.errors === 'number') {\n    session.errors = context.errors;\n  }\n  if (context.status) {\n    session.status = context.status;\n  }\n}\n\n/**\n * Closes a session by setting its status and updating the session object with it.\n * Internally calls `updateSession` to update the passed session object.\n *\n * Note that this function mutates the passed session (@see updateSession for explanation).\n *\n * @param session the `Session` object to be closed\n * @param status the `SessionStatus` with which the session was closed. If you don't pass a status,\n *               this function will keep the previously set status, unless it was `'ok'` in which case\n *               it is changed to `'exited'`.\n */\nexport function closeSession(session: Session, status?: Exclude<SessionStatus, 'ok'>): void {\n  let context = {};\n  if (status) {\n    context = { status };\n  } else if (session.status === 'ok') {\n    context = { status: 'exited' };\n  }\n\n  updateSession(session, context);\n}\n\n/**\n * Serializes a passed session object to a JSON object with a slightly different structure.\n * This is necessary because the Sentry backend requires a slightly different schema of a session\n * than the one the JS SDKs use internally.\n *\n * @param session the session to be converted\n *\n * @returns a JSON object of the passed session\n */\nfunction sessionToJSON(session: Session): SerializedSession {\n  return dropUndefinedKeys({\n    sid: `${session.sid}`,\n    init: session.init,\n    // Make sure that sec is converted to ms for date constructor\n    started: new Date(session.started * 1000).toISOString(),\n    timestamp: new Date(session.timestamp * 1000).toISOString(),\n    status: session.status,\n    errors: session.errors,\n    did: typeof session.did === 'number' || typeof session.did === 'string' ? `${session.did}` : undefined,\n    duration: session.duration,\n    abnormal_mechanism: session.abnormal_mechanism,\n    attrs: {\n      release: session.release,\n      environment: session.environment,\n      ip_address: session.ipAddress,\n      user_agent: session.userAgent,\n    },\n  });\n}\n","import type { Client, DynamicSamplingContext, Scope } from '@sentry/types';\nimport { dropUndefinedKeys } from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from '../constants';\n\n/**\n * Creates a dynamic sampling context from a client.\n *\n * Dispatchs the `createDsc` lifecycle hook as a side effect.\n */\nexport function getDynamicSamplingContextFromClient(\n  trace_id: string,\n  client: Client,\n  scope?: Scope,\n): DynamicSamplingContext {\n  const options = client.getOptions();\n\n  const { publicKey: public_key } = client.getDsn() || {};\n  const { segment: user_segment } = (scope && scope.getUser()) || {};\n\n  const dsc = dropUndefinedKeys({\n    environment: options.environment || DEFAULT_ENVIRONMENT,\n    release: options.release,\n    user_segment,\n    public_key,\n    trace_id,\n  }) as DynamicSamplingContext;\n\n  client.emit && client.emit('createDsc', dsc);\n\n  return dsc;\n}\n","import { SentryError } from './error';\nimport { rejectedSyncPromise, resolvedSyncPromise, SyncPromise } from './syncpromise';\n\nexport interface PromiseBuffer<T> {\n  // exposes the internal array so tests can assert on the state of it.\n  // XXX: this really should not be public api.\n  $: Array<PromiseLike<T>>;\n  add(taskProducer: () => PromiseLike<T>): PromiseLike<T>;\n  drain(timeout?: number): PromiseLike<boolean>;\n}\n\n/**\n * Creates an new PromiseBuffer object with the specified limit\n * @param limit max number of promises that can be stored in the buffer\n */\nexport function makePromiseBuffer<T>(limit?: number): PromiseBuffer<T> {\n  const buffer: Array<PromiseLike<T>> = [];\n\n  function isReady(): boolean {\n    return limit === undefined || buffer.length < limit;\n  }\n\n  /**\n   * Remove a promise from the queue.\n   *\n   * @param task Can be any PromiseLike<T>\n   * @returns Removed promise.\n   */\n  function remove(task: PromiseLike<T>): PromiseLike<T> {\n    return buffer.splice(buffer.indexOf(task), 1)[0];\n  }\n\n  /**\n   * Add a promise (representing an in-flight action) to the queue, and set it to remove itself on fulfillment.\n   *\n   * @param taskProducer A function producing any PromiseLike<T>; In previous versions this used to be `task:\n   *        PromiseLike<T>`, but under that model, Promises were instantly created on the call-site and their executor\n   *        functions therefore ran immediately. Thus, even if the buffer was full, the action still happened. By\n   *        requiring the promise to be wrapped in a function, we can defer promise creation until after the buffer\n   *        limit check.\n   * @returns The original promise.\n   */\n  function add(taskProducer: () => PromiseLike<T>): PromiseLike<T> {\n    if (!isReady()) {\n      return rejectedSyncPromise(new SentryError('Not adding Promise because buffer limit was reached.'));\n    }\n\n    // start the task and add its promise to the queue\n    const task = taskProducer();\n    if (buffer.indexOf(task) === -1) {\n      buffer.push(task);\n    }\n    void task\n      .then(() => remove(task))\n      // Use `then(null, rejectionHandler)` rather than `catch(rejectionHandler)` so that we can use `PromiseLike`\n      // rather than `Promise`. `PromiseLike` doesn't have a `.catch` method, making its polyfill smaller. (ES5 didn't\n      // have promises, so TS has to polyfill when down-compiling.)\n      .then(null, () =>\n        remove(task).then(null, () => {\n          // We have to add another catch here because `remove()` starts a new promise chain.\n        }),\n      );\n    return task;\n  }\n\n  /**\n   * Wait for all promises in the queue to resolve or for timeout to expire, whichever comes first.\n   *\n   * @param timeout The time, in ms, after which to resolve to `false` if the queue is still non-empty. Passing `0` (or\n   * not passing anything) will make the promise wait as long as it takes for the queue to drain before resolving to\n   * `true`.\n   * @returns A promise which will resolve to `true` if the queue is already empty or drains before the timeout, and\n   * `false` otherwise\n   */\n  function drain(timeout?: number): PromiseLike<boolean> {\n    return new SyncPromise<boolean>((resolve, reject) => {\n      let counter = buffer.length;\n\n      if (!counter) {\n        return resolve(true);\n      }\n\n      // wait for `timeout` ms and then resolve to `false` (if not cancelled first)\n      const capturedSetTimeout = setTimeout(() => {\n        if (timeout && timeout > 0) {\n          resolve(false);\n        }\n      }, timeout);\n\n      // if all promises resolve in time, cancel the timer and resolve to `true`\n      buffer.forEach(item => {\n        void resolvedSyncPromise(item).then(() => {\n          if (!--counter) {\n            clearTimeout(capturedSetTimeout);\n            resolve(true);\n          }\n        }, reject);\n      });\n    });\n  }\n\n  return {\n    $: buffer,\n    add,\n    drain,\n  };\n}\n","import type {\n  Envelope,\n  EnvelopeItem,\n  EnvelopeItemType,\n  Event,\n  EventDropReason,\n  EventItem,\n  InternalBaseTransportOptions,\n  Transport,\n  TransportMakeRequestResponse,\n  TransportRequestExecutor,\n} from '@sentry/types';\nimport type { PromiseBuffer, RateLimits } from '@sentry/utils';\nimport {\n  createEnvelope,\n  envelopeItemTypeToDataCategory,\n  forEachEnvelopeItem,\n  isRateLimited,\n  logger,\n  makePromiseBuffer,\n  resolvedSyncPromise,\n  SentryError,\n  serializeEnvelope,\n  updateRateLimits,\n} from '@sentry/utils';\n\nexport const DEFAULT_TRANSPORT_BUFFER_SIZE = 30;\n\n/**\n * Creates an instance of a Sentry `Transport`\n *\n * @param options\n * @param makeRequest\n */\nexport function createTransport(\n  options: InternalBaseTransportOptions,\n  makeRequest: TransportRequestExecutor,\n  buffer: PromiseBuffer<void | TransportMakeRequestResponse> = makePromiseBuffer(\n    options.bufferSize || DEFAULT_TRANSPORT_BUFFER_SIZE,\n  ),\n): Transport {\n  let rateLimits: RateLimits = {};\n  const flush = (timeout?: number): PromiseLike<boolean> => buffer.drain(timeout);\n\n  function send(envelope: Envelope): PromiseLike<void | TransportMakeRequestResponse> {\n    const filteredEnvelopeItems: EnvelopeItem[] = [];\n\n    // Drop rate limited items from envelope\n    forEachEnvelopeItem(envelope, (item, type) => {\n      const envelopeItemDataCategory = envelopeItemTypeToDataCategory(type);\n      if (isRateLimited(rateLimits, envelopeItemDataCategory)) {\n        const event: Event | undefined = getEventForEnvelopeItem(item, type);\n        options.recordDroppedEvent('ratelimit_backoff', envelopeItemDataCategory, event);\n      } else {\n        filteredEnvelopeItems.push(item);\n      }\n    });\n\n    // Skip sending if envelope is empty after filtering out rate limited events\n    if (filteredEnvelopeItems.length === 0) {\n      return resolvedSyncPromise();\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const filteredEnvelope: Envelope = createEnvelope(envelope[0], filteredEnvelopeItems as any);\n\n    // Creates client report for each item in an envelope\n    const recordEnvelopeLoss = (reason: EventDropReason): void => {\n      forEachEnvelopeItem(filteredEnvelope, (item, type) => {\n        const event: Event | undefined = getEventForEnvelopeItem(item, type);\n        options.recordDroppedEvent(reason, envelopeItemTypeToDataCategory(type), event);\n      });\n    };\n\n    const requestTask = (): PromiseLike<void | TransportMakeRequestResponse> =>\n      makeRequest({ body: serializeEnvelope(filteredEnvelope, options.textEncoder) }).then(\n        response => {\n          // We don't want to throw on NOK responses, but we want to at least log them\n          if (response.statusCode !== undefined && (response.statusCode < 200 || response.statusCode >= 300)) {\n            __DEBUG_BUILD__ && logger.warn(`Sentry responded with status code ${response.statusCode} to sent event.`);\n          }\n\n          rateLimits = updateRateLimits(rateLimits, response);\n          return response;\n        },\n        error => {\n          recordEnvelopeLoss('network_error');\n          throw error;\n        },\n      );\n\n    return buffer.add(requestTask).then(\n      result => result,\n      error => {\n        if (error instanceof SentryError) {\n          __DEBUG_BUILD__ && logger.error('Skipped sending event because buffer is full.');\n          recordEnvelopeLoss('queue_overflow');\n          return resolvedSyncPromise();\n        } else {\n          throw error;\n        }\n      },\n    );\n  }\n\n  // We use this to identifify if the transport is the base transport\n  // TODO (v8): Remove this again as we'll no longer need it\n  send.__sentry__baseTransport__ = true;\n\n  return {\n    send,\n    flush,\n  };\n}\n\nfunction getEventForEnvelopeItem(item: Envelope[1][number], type: EnvelopeItemType): Event | undefined {\n  if (type !== 'event' && type !== 'transaction') {\n    return undefined;\n  }\n\n  return Array.isArray(item) ? (item as EventItem)[1] : undefined;\n}\n","import type { DsnComponents, Hub } from '@sentry/types';\n\n/**\n * Checks whether given url points to Sentry server\n * @param url url to verify\n */\nexport function isSentryRequestUrl(url: string, hub: Hub): boolean {\n  const client = hub.getClient();\n  const dsn = client && client.getDsn();\n  const tunnel = client && client.getOptions().tunnel;\n\n  return checkDsn(url, dsn) || checkTunnel(url, tunnel);\n}\n\nfunction checkTunnel(url: string, tunnel: string | undefined): boolean {\n  if (!tunnel) {\n    return false;\n  }\n\n  return removeTrailingSlash(url) === removeTrailingSlash(tunnel);\n}\n\nfunction checkDsn(url: string, dsn: DsnComponents | undefined): boolean {\n  return dsn ? url.includes(dsn.host) : false;\n}\n\nfunction removeTrailingSlash(str: string): string {\n  return str[str.length - 1] === '/' ? str.slice(0, -1) : str;\n}\n","import type { Client, ClientOptions, Event, EventHint, StackFrame, StackParser } from '@sentry/types';\nimport { dateTimestampInSeconds, GLOBAL_OBJ, normalize, resolvedSyncPromise, truncate, uuid4 } from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from '../constants';\nimport { getGlobalEventProcessors, notifyEventProcessors } from '../eventProcessors';\nimport { Scope } from '../scope';\n\n/**\n * Adds common information to events.\n *\n * The information includes release and environment from `options`,\n * breadcrumbs and context (extra, tags and user) from the scope.\n *\n * Information that is already present in the event is never overwritten. For\n * nested objects, such as the context, keys are merged.\n *\n * Note: This also triggers callbacks for `addGlobalEventProcessor`, but not `beforeSend`.\n *\n * @param event The original event.\n * @param hint May contain additional information about the original exception.\n * @param scope A scope containing event metadata.\n * @returns A new event with more information.\n * @hidden\n */\nexport function prepareEvent(\n  options: ClientOptions,\n  event: Event,\n  hint: EventHint,\n  scope?: Scope,\n  client?: Client,\n): PromiseLike<Event | null> {\n  const { normalizeDepth = 3, normalizeMaxBreadth = 1_000 } = options;\n  const prepared: Event = {\n    ...event,\n    event_id: event.event_id || hint.event_id || uuid4(),\n    timestamp: event.timestamp || dateTimestampInSeconds(),\n  };\n  const integrations = hint.integrations || options.integrations.map(i => i.name);\n\n  applyClientOptions(prepared, options);\n  applyIntegrationsMetadata(prepared, integrations);\n\n  // Only put debug IDs onto frames for error events.\n  if (event.type === undefined) {\n    applyDebugIds(prepared, options.stackParser);\n  }\n\n  // If we have scope given to us, use it as the base for further modifications.\n  // This allows us to prevent unnecessary copying of data if `captureContext` is not provided.\n  let finalScope = scope;\n  if (hint.captureContext) {\n    finalScope = Scope.clone(finalScope).update(hint.captureContext);\n  }\n\n  // We prepare the result here with a resolved Event.\n  let result = resolvedSyncPromise<Event | null>(prepared);\n\n  const clientEventProcessors = client && client.getEventProcessors ? client.getEventProcessors() : [];\n\n  // This should be the last thing called, since we want that\n  // {@link Hub.addEventProcessor} gets the finished prepared event.\n  //\n  // We need to check for the existence of `finalScope.getAttachments`\n  // because `getAttachments` can be undefined if users are using an older version\n  // of `@sentry/core` that does not have the `getAttachments` method.\n  // See: https://github.com/getsentry/sentry-javascript/issues/5229\n  if (finalScope) {\n    // Collect attachments from the hint and scope\n    if (finalScope.getAttachments) {\n      const attachments = [...(hint.attachments || []), ...finalScope.getAttachments()];\n\n      if (attachments.length) {\n        hint.attachments = attachments;\n      }\n    }\n\n    // In case we have a hub we reassign it.\n    result = finalScope.applyToEvent(prepared, hint, clientEventProcessors);\n  } else {\n    // Apply client & global event processors even if there is no scope\n    // TODO (v8): Update the order to be Global > Client\n    result = notifyEventProcessors([...clientEventProcessors, ...getGlobalEventProcessors()], prepared, hint);\n  }\n\n  return result.then(evt => {\n    if (evt) {\n      // We apply the debug_meta field only after all event processors have ran, so that if any event processors modified\n      // file names (e.g.the RewriteFrames integration) the filename -> debug ID relationship isn't destroyed.\n      // This should not cause any PII issues, since we're only moving data that is already on the event and not adding\n      // any new data\n      applyDebugMeta(evt);\n    }\n\n    if (typeof normalizeDepth === 'number' && normalizeDepth > 0) {\n      return normalizeEvent(evt, normalizeDepth, normalizeMaxBreadth);\n    }\n    return evt;\n  });\n}\n\n/**\n *  Enhances event using the client configuration.\n *  It takes care of all \"static\" values like environment, release and `dist`,\n *  as well as truncating overly long values.\n * @param event event instance to be enhanced\n */\nfunction applyClientOptions(event: Event, options: ClientOptions): void {\n  const { environment, release, dist, maxValueLength = 250 } = options;\n\n  if (!('environment' in event)) {\n    event.environment = 'environment' in options ? environment : DEFAULT_ENVIRONMENT;\n  }\n\n  if (event.release === undefined && release !== undefined) {\n    event.release = release;\n  }\n\n  if (event.dist === undefined && dist !== undefined) {\n    event.dist = dist;\n  }\n\n  if (event.message) {\n    event.message = truncate(event.message, maxValueLength);\n  }\n\n  const exception = event.exception && event.exception.values && event.exception.values[0];\n  if (exception && exception.value) {\n    exception.value = truncate(exception.value, maxValueLength);\n  }\n\n  const request = event.request;\n  if (request && request.url) {\n    request.url = truncate(request.url, maxValueLength);\n  }\n}\n\nconst debugIdStackParserCache = new WeakMap<StackParser, Map<string, StackFrame[]>>();\n\n/**\n * Puts debug IDs into the stack frames of an error event.\n */\nexport function applyDebugIds(event: Event, stackParser: StackParser): void {\n  const debugIdMap = GLOBAL_OBJ._sentryDebugIds;\n\n  if (!debugIdMap) {\n    return;\n  }\n\n  let debugIdStackFramesCache: Map<string, StackFrame[]>;\n  const cachedDebugIdStackFrameCache = debugIdStackParserCache.get(stackParser);\n  if (cachedDebugIdStackFrameCache) {\n    debugIdStackFramesCache = cachedDebugIdStackFrameCache;\n  } else {\n    debugIdStackFramesCache = new Map<string, StackFrame[]>();\n    debugIdStackParserCache.set(stackParser, debugIdStackFramesCache);\n  }\n\n  // Build a map of filename -> debug_id\n  const filenameDebugIdMap = Object.keys(debugIdMap).reduce<Record<string, string>>((acc, debugIdStackTrace) => {\n    let parsedStack: StackFrame[];\n    const cachedParsedStack = debugIdStackFramesCache.get(debugIdStackTrace);\n    if (cachedParsedStack) {\n      parsedStack = cachedParsedStack;\n    } else {\n      parsedStack = stackParser(debugIdStackTrace);\n      debugIdStackFramesCache.set(debugIdStackTrace, parsedStack);\n    }\n\n    for (let i = parsedStack.length - 1; i >= 0; i--) {\n      const stackFrame = parsedStack[i];\n      if (stackFrame.filename) {\n        acc[stackFrame.filename] = debugIdMap[debugIdStackTrace];\n        break;\n      }\n    }\n    return acc;\n  }, {});\n\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    event!.exception!.values!.forEach(exception => {\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      exception.stacktrace!.frames!.forEach(frame => {\n        if (frame.filename) {\n          frame.debug_id = filenameDebugIdMap[frame.filename];\n        }\n      });\n    });\n  } catch (e) {\n    // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n  }\n}\n\n/**\n * Moves debug IDs from the stack frames of an error event into the debug_meta field.\n */\nexport function applyDebugMeta(event: Event): void {\n  // Extract debug IDs and filenames from the stack frames on the event.\n  const filenameDebugIdMap: Record<string, string> = {};\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    event.exception!.values!.forEach(exception => {\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      exception.stacktrace!.frames!.forEach(frame => {\n        if (frame.debug_id) {\n          if (frame.abs_path) {\n            filenameDebugIdMap[frame.abs_path] = frame.debug_id;\n          } else if (frame.filename) {\n            filenameDebugIdMap[frame.filename] = frame.debug_id;\n          }\n          delete frame.debug_id;\n        }\n      });\n    });\n  } catch (e) {\n    // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n  }\n\n  if (Object.keys(filenameDebugIdMap).length === 0) {\n    return;\n  }\n\n  // Fill debug_meta information\n  event.debug_meta = event.debug_meta || {};\n  event.debug_meta.images = event.debug_meta.images || [];\n  const images = event.debug_meta.images;\n  Object.keys(filenameDebugIdMap).forEach(filename => {\n    images.push({\n      type: 'sourcemap',\n      code_file: filename,\n      debug_id: filenameDebugIdMap[filename],\n    });\n  });\n}\n\n/**\n * This function adds all used integrations to the SDK info in the event.\n * @param event The event that will be filled with all integrations.\n */\nfunction applyIntegrationsMetadata(event: Event, integrationNames: string[]): void {\n  if (integrationNames.length > 0) {\n    event.sdk = event.sdk || {};\n    event.sdk.integrations = [...(event.sdk.integrations || []), ...integrationNames];\n  }\n}\n\n/**\n * Applies `normalize` function on necessary `Event` attributes to make them safe for serialization.\n * Normalized keys:\n * - `breadcrumbs.data`\n * - `user`\n * - `contexts`\n * - `extra`\n * @param event Event\n * @returns Normalized event\n */\nfunction normalizeEvent(event: Event | null, depth: number, maxBreadth: number): Event | null {\n  if (!event) {\n    return null;\n  }\n\n  const normalized: Event = {\n    ...event,\n    ...(event.breadcrumbs && {\n      breadcrumbs: event.breadcrumbs.map(b => ({\n        ...b,\n        ...(b.data && {\n          data: normalize(b.data, depth, maxBreadth),\n        }),\n      })),\n    }),\n    ...(event.user && {\n      user: normalize(event.user, depth, maxBreadth),\n    }),\n    ...(event.contexts && {\n      contexts: normalize(event.contexts, depth, maxBreadth),\n    }),\n    ...(event.extra && {\n      extra: normalize(event.extra, depth, maxBreadth),\n    }),\n  };\n\n  // event.contexts.trace stores information about a Transaction. Similarly,\n  // event.spans[] stores information about child Spans. Given that a\n  // Transaction is conceptually a Span, normalization should apply to both\n  // Transactions and Spans consistently.\n  // For now the decision is to skip normalization of Transactions and Spans,\n  // so this block overwrites the normalized event to add back the original\n  // Transaction information prior to normalization.\n  if (event.contexts && event.contexts.trace && normalized.contexts) {\n    normalized.contexts.trace = event.contexts.trace;\n\n    // event.contexts.trace.data may contain circular/dangerous data so we need to normalize it\n    if (event.contexts.trace.data) {\n      normalized.contexts.trace.data = normalize(event.contexts.trace.data, depth, maxBreadth);\n    }\n  }\n\n  // event.spans[].data may contain circular/dangerous data so we need to normalize it\n  if (event.spans) {\n    normalized.spans = event.spans.map(span => {\n      // We cannot use the spread operator here because `toJSON` on `span` is non-enumerable\n      if (span.data) {\n        span.data = normalize(span.data, depth, maxBreadth);\n      }\n      return span;\n    });\n  }\n\n  return normalized;\n}\n","export const SDK_VERSION = '7.77.0';\n","import type { EventProcessor, Hub, Integration } from '@sentry/types';\nimport {\n  addExceptionMechanism,\n  addInstrumentationHandler,\n  CONSOLE_LEVELS,\n  GLOBAL_OBJ,\n  safeJoin,\n  severityLevelFromString,\n} from '@sentry/utils';\n\n/** Send Console API calls as Sentry Events */\nexport class CaptureConsole implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'CaptureConsole';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  /**\n   * @inheritDoc\n   */\n  private readonly _levels: readonly string[];\n\n  /**\n   * @inheritDoc\n   */\n  public constructor(options: { levels?: string[] } = {}) {\n    this.name = CaptureConsole.id;\n    this._levels = options.levels || CONSOLE_LEVELS;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(_: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {\n    if (!('console' in GLOBAL_OBJ)) {\n      return;\n    }\n\n    const levels = this._levels;\n\n    addInstrumentationHandler('console', ({ args, level }: { args: unknown[]; level: string }) => {\n      if (!levels.includes(level)) {\n        return;\n      }\n\n      const hub = getCurrentHub();\n\n      if (!hub.getIntegration(CaptureConsole)) {\n        return;\n      }\n\n      consoleHandler(hub, args, level);\n    });\n  }\n}\n\nfunction consoleHandler(hub: Hub, args: unknown[], level: string): void {\n  hub.withScope(scope => {\n    scope.setLevel(severityLevelFromString(level));\n    scope.setExtra('arguments', args);\n    scope.addEventProcessor(event => {\n      event.logger = 'console';\n\n      addExceptionMechanism(event, {\n        handled: false,\n        type: 'console',\n      });\n\n      return event;\n    });\n\n    let message = safeJoin(args, ' ');\n    const error = args.find(arg => arg instanceof Error);\n    if (level === 'assert') {\n      if (args[0] === false) {\n        message = `Assertion failed: ${safeJoin(args.slice(1), ' ') || 'console.assert'}`;\n        scope.setExtra('arguments', args.slice(1));\n        hub.captureMessage(message);\n      }\n    } else if (level === 'error' && error) {\n      hub.captureException(error);\n    } else {\n      hub.captureMessage(message);\n    }\n  });\n}\n","import type { Event, EventHint, EventProcessor, Hub, Integration } from '@sentry/types';\nimport { consoleSandbox } from '@sentry/utils';\n\ninterface DebugOptions {\n  /** Controls whether console output created by this integration should be stringified. Default: `false` */\n  stringify?: boolean;\n  /** Controls whether a debugger should be launched before an event is sent. Default: `false` */\n  debugger?: boolean;\n}\n\n/**\n * Integration to debug sent Sentry events.\n * This integration should not be used in production\n */\nexport class Debug implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'Debug';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  private readonly _options: DebugOptions;\n\n  public constructor(options?: DebugOptions) {\n    this.name = Debug.id;\n\n    this._options = {\n      debugger: false,\n      stringify: false,\n      ...options,\n    };\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(_addGlobalEventProcessor: (eventProcessor: EventProcessor) => void, getCurrentHub: () => Hub): void {\n    const client = getCurrentHub().getClient();\n\n    if (client && client.on) {\n      client.on('beforeSendEvent', (event: Event, hint?: EventHint) => {\n        if (this._options.debugger) {\n          // eslint-disable-next-line no-debugger\n          debugger;\n        }\n\n        /* eslint-disable no-console */\n        consoleSandbox(() => {\n          if (this._options.stringify) {\n            console.log(JSON.stringify(event, null, 2));\n            if (hint && Object.keys(hint).length) {\n              console.log(JSON.stringify(hint, null, 2));\n            }\n          } else {\n            console.log(event);\n            if (hint && Object.keys(hint).length) {\n              console.log(hint);\n            }\n          }\n        });\n        /* eslint-enable no-console */\n      });\n    }\n  }\n}\n","import type { Event, Exception, Integration, StackFrame } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\n/** Deduplication filter */\nexport class Dedupe implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'Dedupe';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  /**\n   * @inheritDoc\n   */\n  private _previousEvent?: Event;\n\n  public constructor() {\n    this.name = Dedupe.id;\n  }\n\n  /** @inheritDoc */\n  public setupOnce(_addGlobaleventProcessor: unknown, _getCurrentHub: unknown): void {\n    // noop\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public processEvent(currentEvent: Event): Event | null {\n    // We want to ignore any non-error type events, e.g. transactions or replays\n    // These should never be deduped, and also not be compared against as _previousEvent.\n    if (currentEvent.type) {\n      return currentEvent;\n    }\n\n    // Juuust in case something goes wrong\n    try {\n      if (_shouldDropEvent(currentEvent, this._previousEvent)) {\n        __DEBUG_BUILD__ && logger.warn('Event dropped due to being a duplicate of previously captured event.');\n        return null;\n      }\n    } catch (_oO) {\n      return (this._previousEvent = currentEvent);\n    }\n\n    return (this._previousEvent = currentEvent);\n  }\n}\n\n/** JSDoc */\nexport function _shouldDropEvent(currentEvent: Event, previousEvent?: Event): boolean {\n  if (!previousEvent) {\n    return false;\n  }\n\n  if (_isSameMessageEvent(currentEvent, previousEvent)) {\n    return true;\n  }\n\n  if (_isSameExceptionEvent(currentEvent, previousEvent)) {\n    return true;\n  }\n\n  return false;\n}\n\n/** JSDoc */\nfunction _isSameMessageEvent(currentEvent: Event, previousEvent: Event): boolean {\n  const currentMessage = currentEvent.message;\n  const previousMessage = previousEvent.message;\n\n  // If neither event has a message property, they were both exceptions, so bail out\n  if (!currentMessage && !previousMessage) {\n    return false;\n  }\n\n  // If only one event has a stacktrace, but not the other one, they are not the same\n  if ((currentMessage && !previousMessage) || (!currentMessage && previousMessage)) {\n    return false;\n  }\n\n  if (currentMessage !== previousMessage) {\n    return false;\n  }\n\n  if (!_isSameFingerprint(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  if (!_isSameStacktrace(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  return true;\n}\n\n/** JSDoc */\nfunction _isSameExceptionEvent(currentEvent: Event, previousEvent: Event): boolean {\n  const previousException = _getExceptionFromEvent(previousEvent);\n  const currentException = _getExceptionFromEvent(currentEvent);\n\n  if (!previousException || !currentException) {\n    return false;\n  }\n\n  if (previousException.type !== currentException.type || previousException.value !== currentException.value) {\n    return false;\n  }\n\n  if (!_isSameFingerprint(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  if (!_isSameStacktrace(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  return true;\n}\n\n/** JSDoc */\nfunction _isSameStacktrace(currentEvent: Event, previousEvent: Event): boolean {\n  let currentFrames = _getFramesFromEvent(currentEvent);\n  let previousFrames = _getFramesFromEvent(previousEvent);\n\n  // If neither event has a stacktrace, they are assumed to be the same\n  if (!currentFrames && !previousFrames) {\n    return true;\n  }\n\n  // If only one event has a stacktrace, but not the other one, they are not the same\n  if ((currentFrames && !previousFrames) || (!currentFrames && previousFrames)) {\n    return false;\n  }\n\n  currentFrames = currentFrames as StackFrame[];\n  previousFrames = previousFrames as StackFrame[];\n\n  // If number of frames differ, they are not the same\n  if (previousFrames.length !== currentFrames.length) {\n    return false;\n  }\n\n  // Otherwise, compare the two\n  for (let i = 0; i < previousFrames.length; i++) {\n    const frameA = previousFrames[i];\n    const frameB = currentFrames[i];\n\n    if (\n      frameA.filename !== frameB.filename ||\n      frameA.lineno !== frameB.lineno ||\n      frameA.colno !== frameB.colno ||\n      frameA.function !== frameB.function\n    ) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/** JSDoc */\nfunction _isSameFingerprint(currentEvent: Event, previousEvent: Event): boolean {\n  let currentFingerprint = currentEvent.fingerprint;\n  let previousFingerprint = previousEvent.fingerprint;\n\n  // If neither event has a fingerprint, they are assumed to be the same\n  if (!currentFingerprint && !previousFingerprint) {\n    return true;\n  }\n\n  // If only one event has a fingerprint, but not the other one, they are not the same\n  if ((currentFingerprint && !previousFingerprint) || (!currentFingerprint && previousFingerprint)) {\n    return false;\n  }\n\n  currentFingerprint = currentFingerprint as string[];\n  previousFingerprint = previousFingerprint as string[];\n\n  // Otherwise, compare the two\n  try {\n    return !!(currentFingerprint.join('') === previousFingerprint.join(''));\n  } catch (_oO) {\n    return false;\n  }\n}\n\n/** JSDoc */\nfunction _getExceptionFromEvent(event: Event): Exception | undefined {\n  return event.exception && event.exception.values && event.exception.values[0];\n}\n\n/** JSDoc */\nfunction _getFramesFromEvent(event: Event): StackFrame[] | undefined {\n  const exception = event.exception;\n\n  if (exception) {\n    try {\n      // @ts-expect-error Object could be undefined\n      return exception.values[0].stacktrace.frames;\n    } catch (_oO) {\n      return undefined;\n    }\n  }\n  return undefined;\n}\n","import type { Contexts, Event, EventHint, ExtendedError, Integration } from '@sentry/types';\nimport { addNonEnumerableProperty, isError, isPlainObject, logger, normalize } from '@sentry/utils';\n\n/** JSDoc */\ninterface ExtraErrorDataOptions {\n  depth: number;\n}\n\n/** Patch toString calls to return proper name for wrapped functions */\nexport class ExtraErrorData implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'ExtraErrorData';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  /** JSDoc */\n  private readonly _options: ExtraErrorDataOptions;\n\n  /**\n   * @inheritDoc\n   */\n  public constructor(options?: Partial<ExtraErrorDataOptions>) {\n    this.name = ExtraErrorData.id;\n\n    this._options = {\n      depth: 3,\n      ...options,\n    };\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(_addGlobaleventProcessor: unknown, _getCurrentHub: unknown): void {\n    // noop\n  }\n\n  /** @inheritDoc */\n  public processEvent(event: Event, hint: EventHint): Event {\n    return this.enhanceEventWithErrorData(event, hint);\n  }\n\n  /**\n   * Attaches extracted information from the Error object to extra field in the Event.\n   *\n   * TODO (v8): Drop this public function.\n   */\n  public enhanceEventWithErrorData(event: Event, hint: EventHint = {}): Event {\n    return _enhanceEventWithErrorData(event, hint, this._options.depth);\n  }\n}\n\nfunction _enhanceEventWithErrorData(event: Event, hint: EventHint = {}, depth: number): Event {\n  if (!hint.originalException || !isError(hint.originalException)) {\n    return event;\n  }\n  const exceptionName = (hint.originalException as ExtendedError).name || hint.originalException.constructor.name;\n\n  const errorData = _extractErrorData(hint.originalException as ExtendedError);\n\n  if (errorData) {\n    const contexts: Contexts = {\n      ...event.contexts,\n    };\n\n    const normalizedErrorData = normalize(errorData, depth);\n\n    if (isPlainObject(normalizedErrorData)) {\n      // We mark the error data as \"already normalized\" here, because we don't want other normalization procedures to\n      // potentially truncate the data we just already normalized, with a certain depth setting.\n      addNonEnumerableProperty(normalizedErrorData, '__sentry_skip_normalization__', true);\n      contexts[exceptionName] = normalizedErrorData;\n    }\n\n    return {\n      ...event,\n      contexts,\n    };\n  }\n\n  return event;\n}\n\n/**\n * Extract extra information from the Error object\n */\nfunction _extractErrorData(error: ExtendedError): Record<string, unknown> | null {\n  // We are trying to enhance already existing event, so no harm done if it won't succeed\n  try {\n    const nativeKeys = [\n      'name',\n      'message',\n      'stack',\n      'line',\n      'column',\n      'fileName',\n      'lineNumber',\n      'columnNumber',\n      'toJSON',\n    ];\n\n    const extraErrorInfo: Record<string, unknown> = {};\n\n    // We want only enumerable properties, thus `getOwnPropertyNames` is redundant here, as we filter keys anyway.\n    for (const key of Object.keys(error)) {\n      if (nativeKeys.indexOf(key) !== -1) {\n        continue;\n      }\n      const value = error[key];\n      extraErrorInfo[key] = isError(value) ? value.toString() : value;\n    }\n\n    // Check if someone attached `toJSON` method to grab even more properties (eg. axios is doing that)\n    if (typeof error.toJSON === 'function') {\n      const serializedError = error.toJSON() as Record<string, unknown>;\n\n      for (const key of Object.keys(serializedError)) {\n        const value = serializedError[key];\n        extraErrorInfo[key] = isError(value) ? value.toString() : value;\n      }\n    }\n\n    return extraErrorInfo;\n  } catch (oO) {\n    __DEBUG_BUILD__ && logger.error('Unable to extract extra data from the Error object:', oO);\n  }\n\n  return null;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable deprecation/deprecation */\nimport type { Event, EventProcessor, Hub, Integration } from '@sentry/types';\nimport { GLOBAL_OBJ, logger, normalize, uuid4 } from '@sentry/utils';\nimport localForage from 'localforage';\n\nconst WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n\ntype LocalForage = {\n  setItem<T>(key: string, value: T, callback?: (err: any, value: T) => void): Promise<T>;\n  iterate<T, U>(\n    iteratee: (value: T, key: string, iterationNumber: number) => U,\n    callback?: (err: any, result: U) => void,\n  ): Promise<U>;\n  removeItem(key: string, callback?: (err: any) => void): Promise<void>;\n  length(): Promise<number>;\n};\n\nexport type Item = { key: string; value: Event };\n\n/**\n * cache offline errors and send when connected\n * @deprecated The offline integration has been deprecated in favor of the offline transport wrapper.\n *\n * http://docs.sentry.io/platforms/javascript/configuration/transports/#offline-caching\n */\nexport class Offline implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'Offline';\n\n  /**\n   * @inheritDoc\n   */\n  public readonly name: string;\n\n  /**\n   * the current hub instance\n   */\n  public hub?: Hub;\n\n  /**\n   * maximum number of events to store while offline\n   */\n  public maxStoredEvents: number;\n\n  /**\n   * event cache\n   */\n  public offlineEventStore: LocalForage;\n\n  /**\n   * @inheritDoc\n   */\n  public constructor(options: { maxStoredEvents?: number } = {}) {\n    this.name = Offline.id;\n\n    this.maxStoredEvents = options.maxStoredEvents || 30; // set a reasonable default\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    this.offlineEventStore = localForage.createInstance({\n      name: 'sentry/offlineEventStore',\n    });\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {\n    this.hub = getCurrentHub();\n\n    if ('addEventListener' in WINDOW) {\n      WINDOW.addEventListener('online', () => {\n        void this._sendEvents().catch(() => {\n          __DEBUG_BUILD__ && logger.warn('could not send cached events');\n        });\n      });\n    }\n\n    const eventProcessor: EventProcessor = event => {\n      if (this.hub && this.hub.getIntegration(Offline)) {\n        // cache if we are positively offline\n        if ('navigator' in WINDOW && 'onLine' in WINDOW.navigator && !WINDOW.navigator.onLine) {\n          __DEBUG_BUILD__ && logger.log('Event dropped due to being a offline - caching instead');\n\n          void this._cacheEvent(event)\n            .then((_event: Event): Promise<void> => this._enforceMaxEvents())\n            .catch((_error): void => {\n              __DEBUG_BUILD__ && logger.warn('could not cache event while offline');\n            });\n\n          // return null on success or failure, because being offline will still result in an error\n          return null;\n        }\n      }\n\n      return event;\n    };\n\n    eventProcessor.id = this.name;\n    addGlobalEventProcessor(eventProcessor);\n\n    // if online now, send any events stored in a previous offline session\n    if ('navigator' in WINDOW && 'onLine' in WINDOW.navigator && WINDOW.navigator.onLine) {\n      void this._sendEvents().catch(() => {\n        __DEBUG_BUILD__ && logger.warn('could not send cached events');\n      });\n    }\n  }\n\n  /**\n   * cache an event to send later\n   * @param event an event\n   */\n  private async _cacheEvent(event: Event): Promise<Event> {\n    return this.offlineEventStore.setItem<Event>(uuid4(), normalize(event));\n  }\n\n  /**\n   * purge excess events if necessary\n   */\n  private async _enforceMaxEvents(): Promise<void> {\n    const events: Array<{ event: Event; cacheKey: string }> = [];\n\n    return this.offlineEventStore\n      .iterate<Event, void>((event: Event, cacheKey: string, _index: number): void => {\n        // aggregate events\n        events.push({ cacheKey, event });\n      })\n      .then(\n        (): Promise<void> =>\n          // this promise resolves when the iteration is finished\n          this._purgeEvents(\n            // purge all events past maxStoredEvents in reverse chronological order\n            events\n              .sort((a, b) => (b.event.timestamp || 0) - (a.event.timestamp || 0))\n              .slice(this.maxStoredEvents < events.length ? this.maxStoredEvents : events.length)\n              .map(event => event.cacheKey),\n          ),\n      )\n      .catch((_error): void => {\n        __DEBUG_BUILD__ && logger.warn('could not enforce max events');\n      });\n  }\n\n  /**\n   * purge event from cache\n   */\n  private async _purgeEvent(cacheKey: string): Promise<void> {\n    return this.offlineEventStore.removeItem(cacheKey);\n  }\n\n  /**\n   * purge events from cache\n   */\n  private async _purgeEvents(cacheKeys: string[]): Promise<void> {\n    // trail with .then to ensure the return type as void and not void|void[]\n    return Promise.all(cacheKeys.map(cacheKey => this._purgeEvent(cacheKey))).then();\n  }\n\n  /**\n   * send all events\n   */\n  private async _sendEvents(): Promise<void> {\n    return this.offlineEventStore.iterate<Event, void>((event: Event, cacheKey: string, _index: number): void => {\n      if (this.hub) {\n        this.hub.captureEvent(event);\n\n        void this._purgeEvent(cacheKey).catch((_error): void => {\n          __DEBUG_BUILD__ && logger.warn('could not purge event from cache');\n        });\n      } else {\n        __DEBUG_BUILD__ && logger.warn('no hub found - could not send cached event');\n      }\n    });\n  }\n}\n","import type { EventProcessor, Hub, Integration } from '@sentry/types';\nimport { GLOBAL_OBJ, supportsReportingObserver } from '@sentry/utils';\n\nconst WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n\ninterface Report {\n  [key: string]: unknown;\n  type: ReportTypes;\n  url: string;\n  body?: ReportBody;\n}\n\ntype ReportTypes = 'crash' | 'deprecation' | 'intervention';\n\ntype ReportBody = CrashReportBody | DeprecationReportBody | InterventionReportBody;\n\ninterface CrashReportBody {\n  [key: string]: unknown;\n  crashId: string;\n  reason?: string;\n}\n\ninterface DeprecationReportBody {\n  [key: string]: unknown;\n  id: string;\n  anticipatedRemoval?: Date;\n  message: string;\n  sourceFile?: string;\n  lineNumber?: number;\n  columnNumber?: number;\n}\n\ninterface InterventionReportBody {\n  [key: string]: unknown;\n  id: string;\n  message: string;\n  sourceFile?: string;\n  lineNumber?: number;\n  columnNumber?: number;\n}\n\n/** Reporting API integration - https://w3c.github.io/reporting/ */\nexport class ReportingObserver implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'ReportingObserver';\n\n  /**\n   * @inheritDoc\n   */\n  public readonly name: string;\n\n  /**\n   * Returns current hub.\n   */\n  private _getCurrentHub?: () => Hub;\n\n  private readonly _types: ReportTypes[];\n\n  /**\n   * @inheritDoc\n   */\n  public constructor(\n    options: {\n      types?: ReportTypes[];\n    } = {},\n  ) {\n    this.name = ReportingObserver.id;\n\n    this._types = options.types || ['crash', 'deprecation', 'intervention'];\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(_: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {\n    if (!supportsReportingObserver()) {\n      return;\n    }\n\n    this._getCurrentHub = getCurrentHub;\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n    const observer = new (WINDOW as any).ReportingObserver(this.handler.bind(this), {\n      buffered: true,\n      types: this._types,\n    });\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    observer.observe();\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public handler(reports: Report[]): void {\n    const hub = this._getCurrentHub && this._getCurrentHub();\n    if (!hub || !hub.getIntegration(ReportingObserver)) {\n      return;\n    }\n    for (const report of reports) {\n      hub.withScope(scope => {\n        scope.setExtra('url', report.url);\n\n        const label = `ReportingObserver [${report.type}]`;\n        let details = 'No details available';\n\n        if (report.body) {\n          // Object.keys doesn't work on ReportBody, as all properties are inheirted\n          const plainBody: {\n            [key: string]: unknown;\n          } = {};\n\n          // eslint-disable-next-line guard-for-in\n          for (const prop in report.body) {\n            plainBody[prop] = report.body[prop];\n          }\n\n          scope.setExtra('body', plainBody);\n\n          if (report.type === 'crash') {\n            const body = report.body as CrashReportBody;\n            // A fancy way to create a message out of crashId OR reason OR both OR fallback\n            details = [body.crashId || '', body.reason || ''].join(' ').trim() || details;\n          } else {\n            const body = report.body as DeprecationReportBody | InterventionReportBody;\n            details = body.message || details;\n          }\n        }\n\n        hub.captureMessage(`${label}: ${details}`);\n      });\n    }\n  }\n}\n","// Slightly modified (no IE8 support, ES6) and transcribed to TypeScript\n// https://github.com/calvinmetcalf/rollup-plugin-node-builtins/blob/63ab8aacd013767445ca299e468d9a60a95328d7/src/es6/path.js\n//\n// Copyright Joyent, Inc.and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n/** JSDoc */\nfunction normalizeArray(parts: string[], allowAboveRoot?: boolean): string[] {\n  // if the path tries to go above the root, `up` ends up > 0\n  let up = 0;\n  for (let i = parts.length - 1; i >= 0; i--) {\n    const last = parts[i];\n    if (last === '.') {\n      parts.splice(i, 1);\n    } else if (last === '..') {\n      parts.splice(i, 1);\n      up++;\n    } else if (up) {\n      parts.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (allowAboveRoot) {\n    for (; up--; up) {\n      parts.unshift('..');\n    }\n  }\n\n  return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nconst splitPathRe = /^(\\S+:\\\\|\\/?)([\\s\\S]*?)((?:\\.{1,2}|[^/\\\\]+?|)(\\.[^./\\\\]*|))(?:[/\\\\]*)$/;\n/** JSDoc */\nfunction splitPath(filename: string): string[] {\n  // Truncate files names greater than 1024 characters to avoid regex dos\n  // https://github.com/getsentry/sentry-javascript/pull/8737#discussion_r1285719172\n  const truncated = filename.length > 1024 ? `<truncated>${filename.slice(-1024)}` : filename;\n  const parts = splitPathRe.exec(truncated);\n  return parts ? parts.slice(1) : [];\n}\n\n// path.resolve([from ...], to)\n// posix version\n/** JSDoc */\nexport function resolve(...args: string[]): string {\n  let resolvedPath = '';\n  let resolvedAbsolute = false;\n\n  for (let i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n    const path = i >= 0 ? args[i] : '/';\n\n    // Skip empty entries\n    if (!path) {\n      continue;\n    }\n\n    resolvedPath = `${path}/${resolvedPath}`;\n    resolvedAbsolute = path.charAt(0) === '/';\n  }\n\n  // At this point the path should be resolved to a full absolute path, but\n  // handle relative paths to be safe (might happen when process.cwd() fails)\n\n  // Normalize the path\n  resolvedPath = normalizeArray(\n    resolvedPath.split('/').filter(p => !!p),\n    !resolvedAbsolute,\n  ).join('/');\n\n  return (resolvedAbsolute ? '/' : '') + resolvedPath || '.';\n}\n\n/** JSDoc */\nfunction trim(arr: string[]): string[] {\n  let start = 0;\n  for (; start < arr.length; start++) {\n    if (arr[start] !== '') {\n      break;\n    }\n  }\n\n  let end = arr.length - 1;\n  for (; end >= 0; end--) {\n    if (arr[end] !== '') {\n      break;\n    }\n  }\n\n  if (start > end) {\n    return [];\n  }\n  return arr.slice(start, end - start + 1);\n}\n\n// path.relative(from, to)\n// posix version\n/** JSDoc */\nexport function relative(from: string, to: string): string {\n  /* eslint-disable no-param-reassign */\n  from = resolve(from).slice(1);\n  to = resolve(to).slice(1);\n  /* eslint-enable no-param-reassign */\n\n  const fromParts = trim(from.split('/'));\n  const toParts = trim(to.split('/'));\n\n  const length = Math.min(fromParts.length, toParts.length);\n  let samePartsLength = length;\n  for (let i = 0; i < length; i++) {\n    if (fromParts[i] !== toParts[i]) {\n      samePartsLength = i;\n      break;\n    }\n  }\n\n  let outputParts = [];\n  for (let i = samePartsLength; i < fromParts.length; i++) {\n    outputParts.push('..');\n  }\n\n  outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n  return outputParts.join('/');\n}\n\n// path.normalize(path)\n// posix version\n/** JSDoc */\nexport function normalizePath(path: string): string {\n  const isPathAbsolute = isAbsolute(path);\n  const trailingSlash = path.slice(-1) === '/';\n\n  // Normalize the path\n  let normalizedPath = normalizeArray(\n    path.split('/').filter(p => !!p),\n    !isPathAbsolute,\n  ).join('/');\n\n  if (!normalizedPath && !isPathAbsolute) {\n    normalizedPath = '.';\n  }\n  if (normalizedPath && trailingSlash) {\n    normalizedPath += '/';\n  }\n\n  return (isPathAbsolute ? '/' : '') + normalizedPath;\n}\n\n// posix version\n/** JSDoc */\nexport function isAbsolute(path: string): boolean {\n  return path.charAt(0) === '/';\n}\n\n// posix version\n/** JSDoc */\nexport function join(...args: string[]): string {\n  return normalizePath(args.join('/'));\n}\n\n/** JSDoc */\nexport function dirname(path: string): string {\n  const result = splitPath(path);\n  const root = result[0];\n  let dir = result[1];\n\n  if (!root && !dir) {\n    // No dirname whatsoever\n    return '.';\n  }\n\n  if (dir) {\n    // It has a dirname, strip trailing slash\n    dir = dir.slice(0, dir.length - 1);\n  }\n\n  return root + dir;\n}\n\n/** JSDoc */\nexport function basename(path: string, ext?: string): string {\n  let f = splitPath(path)[2];\n  if (ext && f.slice(ext.length * -1) === ext) {\n    f = f.slice(0, f.length - ext.length);\n  }\n  return f;\n}\n","import type { Event, Integration, StackFrame, Stacktrace } from '@sentry/types';\nimport { basename, relative } from '@sentry/utils';\n\ntype StackFrameIteratee = (frame: StackFrame) => StackFrame;\n\n/** Rewrite event frames paths */\nexport class RewriteFrames implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'RewriteFrames';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  /**\n   * @inheritDoc\n   */\n  private readonly _root?: string;\n\n  /**\n   * @inheritDoc\n   */\n  private readonly _prefix: string;\n\n  /**\n   * @inheritDoc\n   */\n  public constructor(options: { root?: string; prefix?: string; iteratee?: StackFrameIteratee } = {}) {\n    this.name = RewriteFrames.id;\n\n    if (options.root) {\n      this._root = options.root;\n    }\n    this._prefix = options.prefix || 'app:///';\n    if (options.iteratee) {\n      this._iteratee = options.iteratee;\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(_addGlobaleventProcessor: unknown, _getCurrentHub: unknown): void {\n    // noop\n  }\n\n  /** @inheritDoc */\n  public processEvent(event: Event): Event {\n    return this.process(event);\n  }\n\n  /**\n   * TODO (v8): Make this private/internal\n   */\n  public process(originalEvent: Event): Event {\n    let processedEvent = originalEvent;\n\n    if (originalEvent.exception && Array.isArray(originalEvent.exception.values)) {\n      processedEvent = this._processExceptionsEvent(processedEvent);\n    }\n\n    return processedEvent;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  private readonly _iteratee: StackFrameIteratee = (frame: StackFrame) => {\n    if (!frame.filename) {\n      return frame;\n    }\n    // Determine if this is a Windows frame by checking for a Windows-style prefix such as `C:\\`\n    const isWindowsFrame =\n      /^[a-zA-Z]:\\\\/.test(frame.filename) ||\n      // or the presence of a backslash without a forward slash (which are not allowed on Windows)\n      (frame.filename.includes('\\\\') && !frame.filename.includes('/'));\n    // Check if the frame filename begins with `/`\n    const startsWithSlash = /^\\//.test(frame.filename);\n    if (isWindowsFrame || startsWithSlash) {\n      const filename = isWindowsFrame\n        ? frame.filename\n            .replace(/^[a-zA-Z]:/, '') // remove Windows-style prefix\n            .replace(/\\\\/g, '/') // replace all `\\\\` instances with `/`\n        : frame.filename;\n      const base = this._root ? relative(this._root, filename) : basename(filename);\n      frame.filename = `${this._prefix}${base}`;\n    }\n    return frame;\n  };\n\n  /** JSDoc */\n  private _processExceptionsEvent(event: Event): Event {\n    try {\n      return {\n        ...event,\n        exception: {\n          ...event.exception,\n          // The check for this is performed inside `process` call itself, safe to skip here\n          // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n          values: event.exception!.values!.map(value => ({\n            ...value,\n            ...(value.stacktrace && { stacktrace: this._processStacktrace(value.stacktrace) }),\n          })),\n        },\n      };\n    } catch (_oO) {\n      return event;\n    }\n  }\n\n  /** JSDoc */\n  private _processStacktrace(stacktrace?: Stacktrace): Stacktrace {\n    return {\n      ...stacktrace,\n      frames: stacktrace && stacktrace.frames && stacktrace.frames.map(f => this._iteratee(f)),\n    };\n  }\n}\n","import type { Event, Integration } from '@sentry/types';\n\n/** This function adds duration since Sentry was initialized till the time event was sent */\nexport class SessionTiming implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'SessionTiming';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  /** Exact time Client was initialized expressed in milliseconds since Unix Epoch. */\n  protected readonly _startTime: number;\n\n  public constructor() {\n    this.name = SessionTiming.id;\n    this._startTime = Date.now();\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(_addGlobaleventProcessor: unknown, _getCurrentHub: unknown): void {\n    // noop\n  }\n\n  /** @inheritDoc */\n  public processEvent(event: Event): Event {\n    return this.process(event);\n  }\n\n  /**\n   * TODO (v8): make this private/internal\n   */\n  public process(event: Event): Event {\n    const now = Date.now();\n\n    return {\n      ...event,\n      extra: {\n        ...event.extra,\n        ['session:start']: this._startTime,\n        ['session:duration']: now - this._startTime,\n        ['session:end']: now,\n      },\n    };\n  }\n}\n","import type { Event, Integration, StackFrame } from '@sentry/types';\n\n/** Add node transaction to the event */\nexport class Transaction implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'Transaction';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  public constructor() {\n    this.name = Transaction.id;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(_addGlobaleventProcessor: unknown, _getCurrentHub: unknown): void {\n    // noop\n  }\n\n  /** @inheritDoc */\n  public processEvent(event: Event): Event {\n    return this.process(event);\n  }\n\n  /**\n   * TODO (v8): Make this private/internal\n   */\n  public process(event: Event): Event {\n    const frames = _getFramesFromEvent(event);\n\n    // use for loop so we don't have to reverse whole frames array\n    for (let i = frames.length - 1; i >= 0; i--) {\n      const frame = frames[i];\n\n      if (frame.in_app === true) {\n        event.transaction = _getTransaction(frame);\n        break;\n      }\n    }\n\n    return event;\n  }\n}\n\nfunction _getFramesFromEvent(event: Event): StackFrame[] {\n  const exception = event.exception && event.exception.values && event.exception.values[0];\n  return (exception && exception.stacktrace && exception.stacktrace.frames) || [];\n}\n\nfunction _getTransaction(frame: StackFrame): string {\n  return frame.module || frame.function ? `${frame.module || '?'}/${frame.function || '?'}` : '<unknown>';\n}\n","import { getCurrentHub, isSentryRequestUrl } from '@sentry/core';\nimport type {\n  Event as SentryEvent,\n  EventProcessor,\n  HandlerDataFetch,\n  HandlerDataXhr,\n  Hub,\n  Integration,\n  SentryWrappedXMLHttpRequest,\n} from '@sentry/types';\nimport {\n  addExceptionMechanism,\n  addInstrumentationHandler,\n  GLOBAL_OBJ,\n  logger,\n  SENTRY_XHR_DATA_KEY,\n  supportsNativeFetch,\n} from '@sentry/utils';\n\nexport type HttpStatusCodeRange = [number, number] | number;\nexport type HttpRequestTarget = string | RegExp;\ninterface HttpClientOptions {\n  /**\n   * HTTP status codes that should be considered failed.\n   * This array can contain tuples of `[begin, end]` (both inclusive),\n   * single status codes, or a combinations of both\n   *\n   * Example: [[500, 505], 507]\n   * Default: [[500, 599]]\n   */\n  failedRequestStatusCodes?: HttpStatusCodeRange[];\n\n  /**\n   * Targets to track for failed requests.\n   * This array can contain strings or regular expressions.\n   *\n   * Example: ['http://localhost', /api\\/.*\\/]\n   * Default: [/.*\\/]\n   */\n  failedRequestTargets?: HttpRequestTarget[];\n}\n\n/** HTTPClient integration creates events for failed client side HTTP requests. */\nexport class HttpClient implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'HttpClient';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  private readonly _options: HttpClientOptions;\n\n  /**\n   * Returns current hub.\n   */\n  private _getCurrentHub?: () => Hub;\n\n  /**\n   * @inheritDoc\n   *\n   * @param options\n   */\n  public constructor(options?: Partial<HttpClientOptions>) {\n    this.name = HttpClient.id;\n    this._options = {\n      failedRequestStatusCodes: [[500, 599]],\n      failedRequestTargets: [/.*/],\n      ...options,\n    };\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @param options\n   */\n  public setupOnce(_: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {\n    this._getCurrentHub = getCurrentHub;\n    this._wrapFetch();\n    this._wrapXHR();\n  }\n\n  /**\n   * Interceptor function for fetch requests\n   *\n   * @param requestInfo The Fetch API request info\n   * @param response The Fetch API response\n   * @param requestInit The request init object\n   */\n  private _fetchResponseHandler(requestInfo: RequestInfo, response: Response, requestInit?: RequestInit): void {\n    if (this._getCurrentHub && this._shouldCaptureResponse(response.status, response.url)) {\n      const request = _getRequest(requestInfo, requestInit);\n      const hub = this._getCurrentHub();\n\n      let requestHeaders, responseHeaders, requestCookies, responseCookies;\n\n      if (hub.shouldSendDefaultPii()) {\n        [{ headers: requestHeaders, cookies: requestCookies }, { headers: responseHeaders, cookies: responseCookies }] =\n          [\n            { cookieHeader: 'Cookie', obj: request },\n            { cookieHeader: 'Set-Cookie', obj: response },\n          ].map(({ cookieHeader, obj }) => {\n            const headers = this._extractFetchHeaders(obj.headers);\n            let cookies;\n\n            try {\n              const cookieString = headers[cookieHeader] || headers[cookieHeader.toLowerCase()] || undefined;\n\n              if (cookieString) {\n                cookies = this._parseCookieString(cookieString);\n              }\n            } catch (e) {\n              __DEBUG_BUILD__ && logger.log(`Could not extract cookies from header ${cookieHeader}`);\n            }\n\n            return {\n              headers,\n              cookies,\n            };\n          });\n      }\n\n      const event = this._createEvent({\n        url: request.url,\n        method: request.method,\n        status: response.status,\n        requestHeaders,\n        responseHeaders,\n        requestCookies,\n        responseCookies,\n      });\n\n      hub.captureEvent(event);\n    }\n  }\n\n  /**\n   * Interceptor function for XHR requests\n   *\n   * @param xhr The XHR request\n   * @param method The HTTP method\n   * @param headers The HTTP headers\n   */\n  private _xhrResponseHandler(xhr: XMLHttpRequest, method: string, headers: Record<string, string>): void {\n    if (this._getCurrentHub && this._shouldCaptureResponse(xhr.status, xhr.responseURL)) {\n      let requestHeaders, responseCookies, responseHeaders;\n      const hub = this._getCurrentHub();\n\n      if (hub.shouldSendDefaultPii()) {\n        try {\n          const cookieString = xhr.getResponseHeader('Set-Cookie') || xhr.getResponseHeader('set-cookie') || undefined;\n\n          if (cookieString) {\n            responseCookies = this._parseCookieString(cookieString);\n          }\n        } catch (e) {\n          __DEBUG_BUILD__ && logger.log('Could not extract cookies from response headers');\n        }\n\n        try {\n          responseHeaders = this._getXHRResponseHeaders(xhr);\n        } catch (e) {\n          __DEBUG_BUILD__ && logger.log('Could not extract headers from response');\n        }\n\n        requestHeaders = headers;\n      }\n\n      const event = this._createEvent({\n        url: xhr.responseURL,\n        method: method,\n        status: xhr.status,\n        requestHeaders,\n        // Can't access request cookies from XHR\n        responseHeaders,\n        responseCookies,\n      });\n\n      hub.captureEvent(event);\n    }\n  }\n\n  /**\n   * Extracts response size from `Content-Length` header when possible\n   *\n   * @param headers\n   * @returns The response size in bytes or undefined\n   */\n  private _getResponseSizeFromHeaders(headers?: Record<string, string>): number | undefined {\n    if (headers) {\n      const contentLength = headers['Content-Length'] || headers['content-length'];\n\n      if (contentLength) {\n        return parseInt(contentLength, 10);\n      }\n    }\n\n    return undefined;\n  }\n\n  /**\n   * Creates an object containing cookies from the given cookie string\n   *\n   * @param cookieString The cookie string to parse\n   * @returns The parsed cookies\n   */\n  private _parseCookieString(cookieString: string): Record<string, string> {\n    return cookieString.split('; ').reduce((acc: Record<string, string>, cookie: string) => {\n      const [key, value] = cookie.split('=');\n      acc[key] = value;\n      return acc;\n    }, {});\n  }\n\n  /**\n   * Extracts the headers as an object from the given Fetch API request or response object\n   *\n   * @param headers The headers to extract\n   * @returns The extracted headers as an object\n   */\n  private _extractFetchHeaders(headers: Headers): Record<string, string> {\n    const result: Record<string, string> = {};\n\n    headers.forEach((value, key) => {\n      result[key] = value;\n    });\n\n    return result;\n  }\n\n  /**\n   * Extracts the response headers as an object from the given XHR object\n   *\n   * @param xhr The XHR object to extract the response headers from\n   * @returns The response headers as an object\n   */\n  private _getXHRResponseHeaders(xhr: XMLHttpRequest): Record<string, string> {\n    const headers = xhr.getAllResponseHeaders();\n\n    if (!headers) {\n      return {};\n    }\n\n    return headers.split('\\r\\n').reduce((acc: Record<string, string>, line: string) => {\n      const [key, value] = line.split(': ');\n      acc[key] = value;\n      return acc;\n    }, {});\n  }\n\n  /**\n   * Checks if the given target url is in the given list of targets\n   *\n   * @param target The target url to check\n   * @returns true if the target url is in the given list of targets, false otherwise\n   */\n  private _isInGivenRequestTargets(target: string): boolean {\n    if (!this._options.failedRequestTargets) {\n      return false;\n    }\n\n    return this._options.failedRequestTargets.some((givenRequestTarget: HttpRequestTarget) => {\n      if (typeof givenRequestTarget === 'string') {\n        return target.includes(givenRequestTarget);\n      }\n\n      return givenRequestTarget.test(target);\n    });\n  }\n\n  /**\n   * Checks if the given status code is in the given range\n   *\n   * @param status The status code to check\n   * @returns true if the status code is in the given range, false otherwise\n   */\n  private _isInGivenStatusRanges(status: number): boolean {\n    if (!this._options.failedRequestStatusCodes) {\n      return false;\n    }\n\n    return this._options.failedRequestStatusCodes.some((range: HttpStatusCodeRange) => {\n      if (typeof range === 'number') {\n        return range === status;\n      }\n\n      return status >= range[0] && status <= range[1];\n    });\n  }\n\n  /**\n   * Wraps `fetch` function to capture request and response data\n   */\n  private _wrapFetch(): void {\n    if (!supportsNativeFetch()) {\n      return;\n    }\n\n    addInstrumentationHandler('fetch', (handlerData: HandlerDataFetch & { response?: Response }) => {\n      const { response, args } = handlerData;\n      const [requestInfo, requestInit] = args as [RequestInfo, RequestInit | undefined];\n\n      if (!response) {\n        return;\n      }\n\n      this._fetchResponseHandler(requestInfo, response, requestInit);\n    });\n  }\n\n  /**\n   * Wraps XMLHttpRequest to capture request and response data\n   */\n  private _wrapXHR(): void {\n    if (!('XMLHttpRequest' in GLOBAL_OBJ)) {\n      return;\n    }\n\n    addInstrumentationHandler(\n      'xhr',\n      (handlerData: HandlerDataXhr & { xhr: SentryWrappedXMLHttpRequest & XMLHttpRequest }) => {\n        const { xhr } = handlerData;\n\n        const sentryXhrData = xhr[SENTRY_XHR_DATA_KEY];\n\n        if (!sentryXhrData) {\n          return;\n        }\n\n        const { method, request_headers: headers } = sentryXhrData;\n\n        if (!method) {\n          return;\n        }\n\n        try {\n          this._xhrResponseHandler(xhr, method, headers);\n        } catch (e) {\n          __DEBUG_BUILD__ && logger.warn('Error while extracting response event form XHR response', e);\n        }\n      },\n    );\n  }\n\n  /**\n   * Checks whether to capture given response as an event\n   *\n   * @param status response status code\n   * @param url response url\n   */\n  private _shouldCaptureResponse(status: number, url: string): boolean {\n    return (\n      this._isInGivenStatusRanges(status) &&\n      this._isInGivenRequestTargets(url) &&\n      !isSentryRequestUrl(url, getCurrentHub())\n    );\n  }\n\n  /**\n   * Creates a synthetic Sentry event from given response data\n   *\n   * @param data response data\n   * @returns event\n   */\n  private _createEvent(data: {\n    url: string;\n    method: string;\n    status: number;\n    responseHeaders?: Record<string, string>;\n    responseCookies?: Record<string, string>;\n    requestHeaders?: Record<string, string>;\n    requestCookies?: Record<string, string>;\n  }): SentryEvent {\n    const message = `HTTP Client Error with status code: ${data.status}`;\n\n    const event: SentryEvent = {\n      message,\n      exception: {\n        values: [\n          {\n            type: 'Error',\n            value: message,\n          },\n        ],\n      },\n      request: {\n        url: data.url,\n        method: data.method,\n        headers: data.requestHeaders,\n        cookies: data.requestCookies,\n      },\n      contexts: {\n        response: {\n          status_code: data.status,\n          headers: data.responseHeaders,\n          cookies: data.responseCookies,\n          body_size: this._getResponseSizeFromHeaders(data.responseHeaders),\n        },\n      },\n    };\n\n    addExceptionMechanism(event, {\n      type: 'http.client',\n      handled: false,\n    });\n\n    return event;\n  }\n}\n\nfunction _getRequest(requestInfo: RequestInfo, requestInit?: RequestInit): Request {\n  if (!requestInit && requestInfo instanceof Request) {\n    return requestInfo;\n  }\n\n  // If both are set, we try to construct a new Request with the given arguments\n  // However, if e.g. the original request has a `body`, this will throw an error because it was already accessed\n  // In this case, as a fallback, we just use the original request - using both is rather an edge case\n  if (requestInfo instanceof Request && requestInfo.bodyUsed) {\n    return requestInfo;\n  }\n\n  return new Request(requestInfo, requestInit);\n}\n","import type { Event, Integration, StackFrame } from '@sentry/types';\nimport { addContextToFrame, GLOBAL_OBJ, stripUrlQueryAndFragment } from '@sentry/utils';\n\nconst WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n\nconst DEFAULT_LINES_OF_CONTEXT = 7;\n\ninterface ContextLinesOptions {\n  /**\n   * Sets the number of context lines for each frame when loading a file.\n   * Defaults to 7.\n   *\n   * Set to 0 to disable loading and inclusion of source files.\n   **/\n  frameContextLines?: number;\n}\n\n/**\n * Collects source context lines around the lines of stackframes pointing to JS embedded in\n * the current page's HTML.\n *\n * This integration DOES NOT work for stack frames pointing to JS files that are loaded by the browser.\n * For frames pointing to files, context lines are added during ingestion and symbolication\n * by attempting to download the JS files to the Sentry backend.\n *\n * Use this integration if you have inline JS code in HTML pages that can't be accessed\n * by our backend (e.g. due to a login-protected page).\n */\nexport class ContextLines implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'ContextLines';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  public constructor(private readonly _options: ContextLinesOptions = {}) {\n    this.name = ContextLines.id;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(_addGlobaleventProcessor: unknown, _getCurrentHub: unknown): void {\n    // noop\n  }\n\n  /** @inheritDoc */\n  public processEvent(event: Event): Event {\n    return this.addSourceContext(event);\n  }\n\n  /**\n   * Processes an event and adds context lines.\n   *\n   * TODO (v8): Make this internal/private\n   */\n  public addSourceContext(event: Event): Event {\n    const doc = WINDOW.document;\n    const htmlFilename = WINDOW.location && stripUrlQueryAndFragment(WINDOW.location.href);\n    if (!doc || !htmlFilename) {\n      return event;\n    }\n\n    const exceptions = event.exception && event.exception.values;\n    if (!exceptions || !exceptions.length) {\n      return event;\n    }\n\n    const html = doc.documentElement.innerHTML;\n    if (!html) {\n      return event;\n    }\n\n    const htmlLines = ['<!DOCTYPE html>', '<html>', ...html.split('\\n'), '</html>'];\n\n    exceptions.forEach(exception => {\n      const stacktrace = exception.stacktrace;\n      if (stacktrace && stacktrace.frames) {\n        stacktrace.frames = stacktrace.frames.map(frame =>\n          applySourceContextToFrame(\n            frame,\n            htmlLines,\n            htmlFilename,\n            this._options.frameContextLines != null ? this._options.frameContextLines : DEFAULT_LINES_OF_CONTEXT,\n          ),\n        );\n      }\n    });\n\n    return event;\n  }\n}\n\n/**\n * Only exported for testing\n */\nexport function applySourceContextToFrame(\n  frame: StackFrame,\n  htmlLines: string[],\n  htmlFilename: string,\n  linesOfContext: number,\n): StackFrame {\n  if (frame.filename !== htmlFilename || !frame.lineno || !htmlLines.length) {\n    return frame;\n  }\n\n  addContextToFrame(htmlLines, frame, linesOfContext);\n\n  return frame;\n}\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n  childContextTypes: true,\n  contextType: true,\n  contextTypes: true,\n  defaultProps: true,\n  displayName: true,\n  getDefaultProps: true,\n  getDerivedStateFromError: true,\n  getDerivedStateFromProps: true,\n  mixins: true,\n  propTypes: true,\n  type: true\n};\nvar KNOWN_STATICS = {\n  name: true,\n  length: true,\n  prototype: true,\n  caller: true,\n  callee: true,\n  arguments: true,\n  arity: true\n};\nvar FORWARD_REF_STATICS = {\n  '$$typeof': true,\n  render: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true\n};\nvar MEMO_STATICS = {\n  '$$typeof': true,\n  compare: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true,\n  type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n  // React v16.11 and below\n  if (reactIs.isMemo(component)) {\n    return MEMO_STATICS;\n  } // React v16.12 and above\n\n\n  return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n  if (typeof sourceComponent !== 'string') {\n    // don't hoist over string (html) components\n    if (objectPrototype) {\n      var inheritedComponent = getPrototypeOf(sourceComponent);\n\n      if (inheritedComponent && inheritedComponent !== objectPrototype) {\n        hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n      }\n    }\n\n    var keys = getOwnPropertyNames(sourceComponent);\n\n    if (getOwnPropertySymbols) {\n      keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n    }\n\n    var targetStatics = getStatics(targetComponent);\n    var sourceStatics = getStatics(sourceComponent);\n\n    for (var i = 0; i < keys.length; ++i) {\n      var key = keys[i];\n\n      if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n        var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n        try {\n          // Avoid failures from read-only properties\n          defineProperty(targetComponent, key, descriptor);\n        } catch (e) {}\n      }\n    }\n  }\n\n  return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","import type { Event, EventHint, Exception, ExtendedError, StackParser } from '@sentry/types';\n\nimport { isInstanceOf } from './is';\nimport { truncate } from './string';\n\n/**\n * Creates exceptions inside `event.exception.values` for errors that are nested on properties based on the `key` parameter.\n */\nexport function applyAggregateErrorsToEvent(\n  exceptionFromErrorImplementation: (stackParser: StackParser, ex: Error) => Exception,\n  parser: StackParser,\n  maxValueLimit: number = 250,\n  key: string,\n  limit: number,\n  event: Event,\n  hint?: EventHint,\n): void {\n  if (!event.exception || !event.exception.values || !hint || !isInstanceOf(hint.originalException, Error)) {\n    return;\n  }\n\n  // Generally speaking the last item in `event.exception.values` is the exception originating from the original Error\n  const originalException: Exception | undefined =\n    event.exception.values.length > 0 ? event.exception.values[event.exception.values.length - 1] : undefined;\n\n  // We only create exception grouping if there is an exception in the event.\n  if (originalException) {\n    event.exception.values = truncateAggregateExceptions(\n      aggregateExceptionsFromError(\n        exceptionFromErrorImplementation,\n        parser,\n        limit,\n        hint.originalException as ExtendedError,\n        key,\n        event.exception.values,\n        originalException,\n        0,\n      ),\n      maxValueLimit,\n    );\n  }\n}\n\nfunction aggregateExceptionsFromError(\n  exceptionFromErrorImplementation: (stackParser: StackParser, ex: Error) => Exception,\n  parser: StackParser,\n  limit: number,\n  error: ExtendedError,\n  key: string,\n  prevExceptions: Exception[],\n  exception: Exception,\n  exceptionId: number,\n): Exception[] {\n  if (prevExceptions.length >= limit + 1) {\n    return prevExceptions;\n  }\n\n  let newExceptions = [...prevExceptions];\n\n  if (isInstanceOf(error[key], Error)) {\n    applyExceptionGroupFieldsForParentException(exception, exceptionId);\n    const newException = exceptionFromErrorImplementation(parser, error[key]);\n    const newExceptionId = newExceptions.length;\n    applyExceptionGroupFieldsForChildException(newException, key, newExceptionId, exceptionId);\n    newExceptions = aggregateExceptionsFromError(\n      exceptionFromErrorImplementation,\n      parser,\n      limit,\n      error[key],\n      key,\n      [newException, ...newExceptions],\n      newException,\n      newExceptionId,\n    );\n  }\n\n  // This will create exception grouping for AggregateErrors\n  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AggregateError\n  if (Array.isArray(error.errors)) {\n    error.errors.forEach((childError, i) => {\n      if (isInstanceOf(childError, Error)) {\n        applyExceptionGroupFieldsForParentException(exception, exceptionId);\n        const newException = exceptionFromErrorImplementation(parser, childError);\n        const newExceptionId = newExceptions.length;\n        applyExceptionGroupFieldsForChildException(newException, `errors[${i}]`, newExceptionId, exceptionId);\n        newExceptions = aggregateExceptionsFromError(\n          exceptionFromErrorImplementation,\n          parser,\n          limit,\n          childError,\n          key,\n          [newException, ...newExceptions],\n          newException,\n          newExceptionId,\n        );\n      }\n    });\n  }\n\n  return newExceptions;\n}\n\nfunction applyExceptionGroupFieldsForParentException(exception: Exception, exceptionId: number): void {\n  // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default.\n  exception.mechanism = exception.mechanism || { type: 'generic', handled: true };\n\n  exception.mechanism = {\n    ...exception.mechanism,\n    is_exception_group: true,\n    exception_id: exceptionId,\n  };\n}\n\nfunction applyExceptionGroupFieldsForChildException(\n  exception: Exception,\n  source: string,\n  exceptionId: number,\n  parentId: number | undefined,\n): void {\n  // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default.\n  exception.mechanism = exception.mechanism || { type: 'generic', handled: true };\n\n  exception.mechanism = {\n    ...exception.mechanism,\n    type: 'chained',\n    source,\n    exception_id: exceptionId,\n    parent_id: parentId,\n  };\n}\n\n/**\n * Truncate the message (exception.value) of all exceptions in the event.\n * Because this event processor is ran after `applyClientOptions`,\n * we need to truncate the message of the added exceptions here.\n */\nfunction truncateAggregateExceptions(exceptions: Exception[], maxValueLength: number): Exception[] {\n  return exceptions.map(exception => {\n    if (exception.value) {\n      exception.value = truncate(exception.value, maxValueLength);\n    }\n    return exception;\n  });\n}\n","import { isString } from './is';\nimport { getGlobalObject } from './worldwide';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject<Window>();\n\nconst DEFAULT_MAX_STRING_LENGTH = 80;\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nexport function htmlTreeAsString(\n  elem: unknown,\n  options: string[] | { keyAttrs?: string[]; maxStringLength?: number } = {},\n): string {\n  type SimpleNode = {\n    parentNode: SimpleNode;\n  } | null;\n\n  if (!elem) {\n    return '<unknown>';\n  }\n\n  // try/catch both:\n  // - accessing event.target (see getsentry/raven-js#838, #768)\n  // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n  // - can throw an exception in some circumstances.\n  try {\n    let currentElem = elem as SimpleNode;\n    const MAX_TRAVERSE_HEIGHT = 5;\n    const out = [];\n    let height = 0;\n    let len = 0;\n    const separator = ' > ';\n    const sepLength = separator.length;\n    let nextStr;\n    const keyAttrs = Array.isArray(options) ? options : options.keyAttrs;\n    const maxStringLength = (!Array.isArray(options) && options.maxStringLength) || DEFAULT_MAX_STRING_LENGTH;\n\n    while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) {\n      nextStr = _htmlElementAsString(currentElem, keyAttrs);\n      // bail out if\n      // - nextStr is the 'html' element\n      // - the length of the string that would be created exceeds maxStringLength\n      //   (ignore this limit if we are on the first iteration)\n      if (nextStr === 'html' || (height > 1 && len + out.length * sepLength + nextStr.length >= maxStringLength)) {\n        break;\n      }\n\n      out.push(nextStr);\n\n      len += nextStr.length;\n      currentElem = currentElem.parentNode;\n    }\n\n    return out.reverse().join(separator);\n  } catch (_oO) {\n    return '<unknown>';\n  }\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction _htmlElementAsString(el: unknown, keyAttrs?: string[]): string {\n  const elem = el as {\n    tagName?: string;\n    id?: string;\n    className?: string;\n    getAttribute(key: string): string;\n  };\n\n  const out = [];\n  let className;\n  let classes;\n  let key;\n  let attr;\n  let i;\n\n  if (!elem || !elem.tagName) {\n    return '';\n  }\n\n  out.push(elem.tagName.toLowerCase());\n\n  // Pairs of attribute keys defined in `serializeAttribute` and their values on element.\n  const keyAttrPairs =\n    keyAttrs && keyAttrs.length\n      ? keyAttrs.filter(keyAttr => elem.getAttribute(keyAttr)).map(keyAttr => [keyAttr, elem.getAttribute(keyAttr)])\n      : null;\n\n  if (keyAttrPairs && keyAttrPairs.length) {\n    keyAttrPairs.forEach(keyAttrPair => {\n      out.push(`[${keyAttrPair[0]}=\"${keyAttrPair[1]}\"]`);\n    });\n  } else {\n    if (elem.id) {\n      out.push(`#${elem.id}`);\n    }\n\n    // eslint-disable-next-line prefer-const\n    className = elem.className;\n    if (className && isString(className)) {\n      classes = className.split(/\\s+/);\n      for (i = 0; i < classes.length; i++) {\n        out.push(`.${classes[i]}`);\n      }\n    }\n  }\n  const allowedAttrs = ['aria-label', 'type', 'name', 'title', 'alt'];\n  for (i = 0; i < allowedAttrs.length; i++) {\n    key = allowedAttrs[i];\n    attr = elem.getAttribute(key);\n    if (attr) {\n      out.push(`[${key}=\"${attr}\"]`);\n    }\n  }\n  return out.join('');\n}\n\n/**\n * A safe form of location.href\n */\nexport function getLocationHref(): string {\n  try {\n    return WINDOW.document.location.href;\n  } catch (oO) {\n    return '';\n  }\n}\n\n/**\n * Gets a DOM element by using document.querySelector.\n *\n * This wrapper will first check for the existance of the function before\n * actually calling it so that we don't have to take care of this check,\n * every time we want to access the DOM.\n *\n * Reason: DOM/querySelector is not available in all environments.\n *\n * We have to cast to any because utils can be consumed by a variety of environments,\n * and we don't want to break TS users. If you know what element will be selected by\n * `document.querySelector`, specify it as part of the generic call. For example,\n * `const element = getDomElement<Element>('selector');`\n *\n * @param selector the selector string passed on to document.querySelector\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getDomElement<E = any>(selector: string): E | null {\n  if (WINDOW.document && WINDOW.document.querySelector) {\n    return WINDOW.document.querySelector(selector) as unknown as E;\n  }\n  return null;\n}\n","import type { DsnComponents, DsnLike, DsnProtocol } from '@sentry/types';\n\nimport { logger } from './logger';\n\n/** Regular expression used to parse a Dsn. */\nconst DSN_REGEX = /^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+)?)?@)([\\w.-]+)(?::(\\d+))?\\/(.+)/;\n\nfunction isValidProtocol(protocol?: string): protocol is DsnProtocol {\n  return protocol === 'http' || protocol === 'https';\n}\n\n/**\n * Renders the string representation of this Dsn.\n *\n * By default, this will render the public representation without the password\n * component. To get the deprecated private representation, set `withPassword`\n * to true.\n *\n * @param withPassword When set to true, the password will be included.\n */\nexport function dsnToString(dsn: DsnComponents, withPassword: boolean = false): string {\n  const { host, path, pass, port, projectId, protocol, publicKey } = dsn;\n  return (\n    `${protocol}://${publicKey}${withPassword && pass ? `:${pass}` : ''}` +\n    `@${host}${port ? `:${port}` : ''}/${path ? `${path}/` : path}${projectId}`\n  );\n}\n\n/**\n * Parses a Dsn from a given string.\n *\n * @param str A Dsn as string\n * @returns Dsn as DsnComponents or undefined if @param str is not a valid DSN string\n */\nexport function dsnFromString(str: string): DsnComponents | undefined {\n  const match = DSN_REGEX.exec(str);\n\n  if (!match) {\n    // This should be logged to the console\n    // eslint-disable-next-line no-console\n    console.error(`Invalid Sentry Dsn: ${str}`);\n    return undefined;\n  }\n\n  const [protocol, publicKey, pass = '', host, port = '', lastPath] = match.slice(1);\n  let path = '';\n  let projectId = lastPath;\n\n  const split = projectId.split('/');\n  if (split.length > 1) {\n    path = split.slice(0, -1).join('/');\n    projectId = split.pop() as string;\n  }\n\n  if (projectId) {\n    const projectMatch = projectId.match(/^\\d+/);\n    if (projectMatch) {\n      projectId = projectMatch[0];\n    }\n  }\n\n  return dsnFromComponents({ host, pass, path, projectId, port, protocol: protocol as DsnProtocol, publicKey });\n}\n\nfunction dsnFromComponents(components: DsnComponents): DsnComponents {\n  return {\n    protocol: components.protocol,\n    publicKey: components.publicKey || '',\n    pass: components.pass || '',\n    host: components.host,\n    port: components.port || '',\n    path: components.path || '',\n    projectId: components.projectId,\n  };\n}\n\nfunction validateDsn(dsn: DsnComponents): boolean {\n  if (!__DEBUG_BUILD__) {\n    return true;\n  }\n\n  const { port, projectId, protocol } = dsn;\n\n  const requiredComponents: ReadonlyArray<keyof DsnComponents> = ['protocol', 'publicKey', 'host', 'projectId'];\n  const hasMissingRequiredComponent = requiredComponents.find(component => {\n    if (!dsn[component]) {\n      logger.error(`Invalid Sentry Dsn: ${component} missing`);\n      return true;\n    }\n    return false;\n  });\n\n  if (hasMissingRequiredComponent) {\n    return false;\n  }\n\n  if (!projectId.match(/^\\d+$/)) {\n    logger.error(`Invalid Sentry Dsn: Invalid projectId ${projectId}`);\n    return false;\n  }\n\n  if (!isValidProtocol(protocol)) {\n    logger.error(`Invalid Sentry Dsn: Invalid protocol ${protocol}`);\n    return false;\n  }\n\n  if (port && isNaN(parseInt(port, 10))) {\n    logger.error(`Invalid Sentry Dsn: Invalid port ${port}`);\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Creates a valid Sentry Dsn object, identifying a Sentry instance and project.\n * @returns a valid DsnComponents object or `undefined` if @param from is an invalid DSN source\n */\nexport function makeDsn(from: DsnLike): DsnComponents | undefined {\n  const components = typeof from === 'string' ? dsnFromString(from) : dsnFromComponents(from);\n  if (!components || !validateDsn(components)) {\n    return undefined;\n  }\n  return components;\n}\n","/*\n * This module exists for optimizations in the build process through rollup and terser.  We define some global\n * constants, which can be overridden during build. By guarding certain pieces of code with functions that return these\n * constants, we can control whether or not they appear in the final bundle. (Any code guarded by a false condition will\n * never run, and will hence be dropped during treeshaking.) The two primary uses for this are stripping out calls to\n * `logger` and preventing node-related code from appearing in browser bundles.\n *\n * Attention:\n * This file should not be used to define constants/flags that are intended to be used for tree-shaking conducted by\n * users. These flags should live in their respective packages, as we identified user tooling (specifically webpack)\n * having issues tree-shaking these constants across package boundaries.\n * An example for this is the __SENTRY_DEBUG__ constant. It is declared in each package individually because we want\n * users to be able to shake away expressions that it guards.\n */\n\ndeclare const __SENTRY_BROWSER_BUNDLE__: boolean | undefined;\n\nexport type SdkSource = 'npm' | 'cdn' | 'loader';\n\n/**\n * Figures out if we're building a browser bundle.\n *\n * @returns true if this is a browser bundle build.\n */\nexport function isBrowserBundle(): boolean {\n  return typeof __SENTRY_BROWSER_BUNDLE__ !== 'undefined' && !!__SENTRY_BROWSER_BUNDLE__;\n}\n\n/**\n * Get source of SDK.\n */\nexport function getSDKSource(): SdkSource {\n  // @ts-expect-error __SENTRY_SDK_SOURCE__ is injected by rollup during build process\n  return __SENTRY_SDK_SOURCE__;\n}\n","import type { ConsoleLevel } from './logger';\n\n/** An error emitted by Sentry SDKs and related utilities. */\nexport class SentryError extends Error {\n  /** Display name of this error instance. */\n  public name: string;\n\n  public logLevel: ConsoleLevel;\n\n  public constructor(public message: string, logLevel: ConsoleLevel = 'warn') {\n    super(message);\n\n    this.name = new.target.prototype.constructor.name;\n    // This sets the prototype to be `Error`, not `SentryError`. It's unclear why we do this, but commenting this line\n    // out causes various (seemingly totally unrelated) playwright tests consistently time out. FYI, this makes\n    // instances of `SentryError` fail `obj instanceof SentryError` checks.\n    Object.setPrototypeOf(this, new.target.prototype);\n    this.logLevel = logLevel;\n  }\n}\n","// Based on https://github.com/angular/angular.js/pull/13945/files\n// The MIT License\n\n// Copyright (c) 2010-2016 Google, Inc. http://angularjs.org\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport { getGlobalObject } from '../worldwide';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject<Window>();\n\n/**\n * Tells whether current environment supports History API\n * {@link supportsHistory}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsHistory(): boolean {\n  // NOTE: in Chrome App environment, touching history.pushState, *even inside\n  //       a try/catch block*, will cause Chrome to output an error to console.error\n  // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n  /* eslint-disable @typescript-eslint/no-unsafe-member-access */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const chrome = (WINDOW as any).chrome;\n  const isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n  /* eslint-enable @typescript-eslint/no-unsafe-member-access */\n  const hasHistoryApi = 'history' in WINDOW && !!WINDOW.history.pushState && !!WINDOW.history.replaceState;\n\n  return !isChromePackagedApp && hasHistoryApi;\n}\n","/* eslint-disable max-lines */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport type {\n  HandlerDataFetch,\n  HandlerDataXhr,\n  SentryWrappedXMLHttpRequest,\n  SentryXhrData,\n  WrappedFunction,\n} from '@sentry/types';\n\nimport { isString } from './is';\nimport type { ConsoleLevel } from './logger';\nimport { CONSOLE_LEVELS, logger, originalConsoleMethods } from './logger';\nimport { uuid4 } from './misc';\nimport { addNonEnumerableProperty, fill } from './object';\nimport { getFunctionName } from './stacktrace';\nimport { supportsHistory, supportsNativeFetch } from './supports';\nimport { getGlobalObject, GLOBAL_OBJ } from './worldwide';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject<Window>();\n\nexport const SENTRY_XHR_DATA_KEY = '__sentry_xhr_v2__';\n\nexport type InstrumentHandlerType =\n  | 'console'\n  | 'dom'\n  | 'fetch'\n  | 'history'\n  | 'sentry'\n  | 'xhr'\n  | 'error'\n  | 'unhandledrejection';\nexport type InstrumentHandlerCallback = (data: any) => void;\n\n/**\n * Instrument native APIs to call handlers that can be used to create breadcrumbs, APM spans etc.\n *  - Console API\n *  - Fetch API\n *  - XHR API\n *  - History API\n *  - DOM API (click/typing)\n *  - Error API\n *  - UnhandledRejection API\n */\n\nconst handlers: { [key in InstrumentHandlerType]?: InstrumentHandlerCallback[] } = {};\nconst instrumented: { [key in InstrumentHandlerType]?: boolean } = {};\n\n/** Instruments given API */\nfunction instrument(type: InstrumentHandlerType): void {\n  if (instrumented[type]) {\n    return;\n  }\n\n  instrumented[type] = true;\n\n  switch (type) {\n    case 'console':\n      instrumentConsole();\n      break;\n    case 'dom':\n      instrumentDOM();\n      break;\n    case 'xhr':\n      instrumentXHR();\n      break;\n    case 'fetch':\n      instrumentFetch();\n      break;\n    case 'history':\n      instrumentHistory();\n      break;\n    case 'error':\n      instrumentError();\n      break;\n    case 'unhandledrejection':\n      instrumentUnhandledRejection();\n      break;\n    default:\n      __DEBUG_BUILD__ && logger.warn('unknown instrumentation type:', type);\n      return;\n  }\n}\n\n/**\n * Add handler that will be called when given type of instrumentation triggers.\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addInstrumentationHandler(type: InstrumentHandlerType, callback: InstrumentHandlerCallback): void {\n  handlers[type] = handlers[type] || [];\n  (handlers[type] as InstrumentHandlerCallback[]).push(callback);\n  instrument(type);\n}\n\n/**\n * Reset all instrumentation handlers.\n * This can be used by tests to ensure we have a clean slate of instrumentation handlers.\n */\nexport function resetInstrumentationHandlers(): void {\n  Object.keys(handlers).forEach(key => {\n    handlers[key as InstrumentHandlerType] = undefined;\n  });\n}\n\n/** JSDoc */\nfunction triggerHandlers(type: InstrumentHandlerType, data: any): void {\n  if (!type || !handlers[type]) {\n    return;\n  }\n\n  for (const handler of handlers[type] || []) {\n    try {\n      handler(data);\n    } catch (e) {\n      __DEBUG_BUILD__ &&\n        logger.error(\n          `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n          e,\n        );\n    }\n  }\n}\n\n/** JSDoc */\nfunction instrumentConsole(): void {\n  if (!('console' in GLOBAL_OBJ)) {\n    return;\n  }\n\n  CONSOLE_LEVELS.forEach(function (level: ConsoleLevel): void {\n    if (!(level in GLOBAL_OBJ.console)) {\n      return;\n    }\n\n    fill(GLOBAL_OBJ.console, level, function (originalConsoleMethod: () => any): Function {\n      originalConsoleMethods[level] = originalConsoleMethod;\n\n      return function (...args: any[]): void {\n        triggerHandlers('console', { args, level });\n\n        const log = originalConsoleMethods[level];\n        log && log.apply(GLOBAL_OBJ.console, args);\n      };\n    });\n  });\n}\n\n/** JSDoc */\nfunction instrumentFetch(): void {\n  if (!supportsNativeFetch()) {\n    return;\n  }\n\n  fill(GLOBAL_OBJ, 'fetch', function (originalFetch: () => void): () => void {\n    return function (...args: any[]): void {\n      const { method, url } = parseFetchArgs(args);\n\n      const handlerData: HandlerDataFetch = {\n        args,\n        fetchData: {\n          method,\n          url,\n        },\n        startTimestamp: Date.now(),\n      };\n\n      triggerHandlers('fetch', {\n        ...handlerData,\n      });\n\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      return originalFetch.apply(GLOBAL_OBJ, args).then(\n        (response: Response) => {\n          triggerHandlers('fetch', {\n            ...handlerData,\n            endTimestamp: Date.now(),\n            response,\n          });\n          return response;\n        },\n        (error: Error) => {\n          triggerHandlers('fetch', {\n            ...handlerData,\n            endTimestamp: Date.now(),\n            error,\n          });\n          // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n          //       it means the sentry.javascript SDK caught an error invoking your application code.\n          //       This is expected behavior and NOT indicative of a bug with sentry.javascript.\n          throw error;\n        },\n      );\n    };\n  });\n}\n\nfunction hasProp<T extends string>(obj: unknown, prop: T): obj is Record<string, string> {\n  return !!obj && typeof obj === 'object' && !!(obj as Record<string, string>)[prop];\n}\n\ntype FetchResource = string | { toString(): string } | { url: string };\n\nfunction getUrlFromResource(resource: FetchResource): string {\n  if (typeof resource === 'string') {\n    return resource;\n  }\n\n  if (!resource) {\n    return '';\n  }\n\n  if (hasProp(resource, 'url')) {\n    return resource.url;\n  }\n\n  if (resource.toString) {\n    return resource.toString();\n  }\n\n  return '';\n}\n\n/**\n * Parses the fetch arguments to find the used Http method and the url of the request\n */\nexport function parseFetchArgs(fetchArgs: unknown[]): { method: string; url: string } {\n  if (fetchArgs.length === 0) {\n    return { method: 'GET', url: '' };\n  }\n\n  if (fetchArgs.length === 2) {\n    const [url, options] = fetchArgs as [FetchResource, object];\n\n    return {\n      url: getUrlFromResource(url),\n      method: hasProp(options, 'method') ? String(options.method).toUpperCase() : 'GET',\n    };\n  }\n\n  const arg = fetchArgs[0];\n  return {\n    url: getUrlFromResource(arg as FetchResource),\n    method: hasProp(arg, 'method') ? String(arg.method).toUpperCase() : 'GET',\n  };\n}\n\n/** JSDoc */\nexport function instrumentXHR(): void {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  if (!(WINDOW as any).XMLHttpRequest) {\n    return;\n  }\n\n  const xhrproto = XMLHttpRequest.prototype;\n\n  fill(xhrproto, 'open', function (originalOpen: () => void): () => void {\n    return function (this: XMLHttpRequest & SentryWrappedXMLHttpRequest, ...args: any[]): void {\n      const startTimestamp = Date.now();\n\n      const url = args[1];\n      const xhrInfo: SentryXhrData = (this[SENTRY_XHR_DATA_KEY] = {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        method: isString(args[0]) ? args[0].toUpperCase() : args[0],\n        url: args[1],\n        request_headers: {},\n      });\n\n      // if Sentry key appears in URL, don't capture it as a request\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      if (isString(url) && xhrInfo.method === 'POST' && url.match(/sentry_key/)) {\n        this.__sentry_own_request__ = true;\n      }\n\n      const onreadystatechangeHandler: () => void = () => {\n        // For whatever reason, this is not the same instance here as from the outer method\n        const xhrInfo = this[SENTRY_XHR_DATA_KEY];\n\n        if (!xhrInfo) {\n          return;\n        }\n\n        if (this.readyState === 4) {\n          try {\n            // touching statusCode in some platforms throws\n            // an exception\n            xhrInfo.status_code = this.status;\n          } catch (e) {\n            /* do nothing */\n          }\n\n          triggerHandlers('xhr', {\n            args: args as [string, string],\n            endTimestamp: Date.now(),\n            startTimestamp,\n            xhr: this,\n          } as HandlerDataXhr);\n        }\n      };\n\n      if ('onreadystatechange' in this && typeof this.onreadystatechange === 'function') {\n        fill(this, 'onreadystatechange', function (original: WrappedFunction): Function {\n          return function (this: SentryWrappedXMLHttpRequest, ...readyStateArgs: any[]): void {\n            onreadystatechangeHandler();\n            return original.apply(this, readyStateArgs);\n          };\n        });\n      } else {\n        this.addEventListener('readystatechange', onreadystatechangeHandler);\n      }\n\n      // Intercepting `setRequestHeader` to access the request headers of XHR instance.\n      // This will only work for user/library defined headers, not for the default/browser-assigned headers.\n      // Request cookies are also unavailable for XHR, as `Cookie` header can't be defined by `setRequestHeader`.\n      fill(this, 'setRequestHeader', function (original: WrappedFunction): Function {\n        return function (this: SentryWrappedXMLHttpRequest, ...setRequestHeaderArgs: unknown[]): void {\n          const [header, value] = setRequestHeaderArgs as [string, string];\n\n          const xhrInfo = this[SENTRY_XHR_DATA_KEY];\n\n          if (xhrInfo) {\n            xhrInfo.request_headers[header.toLowerCase()] = value;\n          }\n\n          return original.apply(this, setRequestHeaderArgs);\n        };\n      });\n\n      return originalOpen.apply(this, args);\n    };\n  });\n\n  fill(xhrproto, 'send', function (originalSend: () => void): () => void {\n    return function (this: XMLHttpRequest & SentryWrappedXMLHttpRequest, ...args: any[]): void {\n      const sentryXhrData = this[SENTRY_XHR_DATA_KEY];\n      if (sentryXhrData && args[0] !== undefined) {\n        sentryXhrData.body = args[0];\n      }\n\n      triggerHandlers('xhr', {\n        args,\n        startTimestamp: Date.now(),\n        xhr: this,\n      });\n\n      return originalSend.apply(this, args);\n    };\n  });\n}\n\nlet lastHref: string;\n\n/** JSDoc */\nfunction instrumentHistory(): void {\n  if (!supportsHistory()) {\n    return;\n  }\n\n  const oldOnPopState = WINDOW.onpopstate;\n  WINDOW.onpopstate = function (this: WindowEventHandlers, ...args: any[]): any {\n    const to = WINDOW.location.href;\n    // keep track of the current URL state, as we always receive only the updated state\n    const from = lastHref;\n    lastHref = to;\n    triggerHandlers('history', {\n      from,\n      to,\n    });\n    if (oldOnPopState) {\n      // Apparently this can throw in Firefox when incorrectly implemented plugin is installed.\n      // https://github.com/getsentry/sentry-javascript/issues/3344\n      // https://github.com/bugsnag/bugsnag-js/issues/469\n      try {\n        return oldOnPopState.apply(this, args);\n      } catch (_oO) {\n        // no-empty\n      }\n    }\n  };\n\n  /** @hidden */\n  function historyReplacementFunction(originalHistoryFunction: () => void): () => void {\n    return function (this: History, ...args: any[]): void {\n      const url = args.length > 2 ? args[2] : undefined;\n      if (url) {\n        // coerce to string (this is what pushState does)\n        const from = lastHref;\n        const to = String(url);\n        // keep track of the current URL state, as we always receive only the updated state\n        lastHref = to;\n        triggerHandlers('history', {\n          from,\n          to,\n        });\n      }\n      return originalHistoryFunction.apply(this, args);\n    };\n  }\n\n  fill(WINDOW.history, 'pushState', historyReplacementFunction);\n  fill(WINDOW.history, 'replaceState', historyReplacementFunction);\n}\n\nconst DEBOUNCE_DURATION = 1000;\nlet debounceTimerID: number | undefined;\nlet lastCapturedEventType: string | undefined;\nlet lastCapturedEventTargetId: string | undefined;\n\ntype SentryWrappedTarget = HTMLElement & { _sentryId?: string };\n\n/**\n * Check whether the event is similar to the last captured one. For example, two click events on the same button.\n */\nfunction isSimilarToLastCapturedEvent(event: Event): boolean {\n  // If both events have different type, then user definitely performed two separate actions. e.g. click + keypress.\n  if (event.type !== lastCapturedEventType) {\n    return false;\n  }\n\n  try {\n    // If both events have the same type, it's still possible that actions were performed on different targets.\n    // e.g. 2 clicks on different buttons.\n    if (!event.target || (event.target as SentryWrappedTarget)._sentryId !== lastCapturedEventTargetId) {\n      return false;\n    }\n  } catch (e) {\n    // just accessing `target` property can throw an exception in some rare circumstances\n    // see: https://github.com/getsentry/sentry-javascript/issues/838\n  }\n\n  // If both events have the same type _and_ same `target` (an element which triggered an event, _not necessarily_\n  // to which an event listener was attached), we treat them as the same action, as we want to capture\n  // only one breadcrumb. e.g. multiple clicks on the same button, or typing inside a user input box.\n  return true;\n}\n\n/**\n * Decide whether an event should be captured.\n * @param event event to be captured\n */\nfunction shouldSkipDOMEvent(eventType: string, target: SentryWrappedTarget | null): boolean {\n  // We are only interested in filtering `keypress` events for now.\n  if (eventType !== 'keypress') {\n    return false;\n  }\n\n  if (!target || !target.tagName) {\n    return true;\n  }\n\n  // Only consider keypress events on actual input elements. This will disregard keypresses targeting body\n  // e.g.tabbing through elements, hotkeys, etc.\n  if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n    return false;\n  }\n\n  return true;\n}\n\nfunction getEventTarget(event: Event): SentryWrappedTarget | null {\n  try {\n    return event.target as SentryWrappedTarget | null;\n  } catch (e) {\n    // just accessing `target` property can throw an exception in some rare circumstances\n    // see: https://github.com/getsentry/sentry-javascript/issues/838\n    return null;\n  }\n}\n\n/**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param handler function that will be triggered\n * @param globalListener indicates whether event was captured by the global event listener\n * @returns wrapped breadcrumb events handler\n * @hidden\n */\nfunction makeDOMEventHandler(handler: Function, globalListener: boolean = false): (event: Event) => void {\n  return (event: Event & { _sentryCaptured?: true }): void => {\n    // It's possible this handler might trigger multiple times for the same\n    // event (e.g. event propagation through node ancestors).\n    // Ignore if we've already captured that event.\n    if (!event || event['_sentryCaptured']) {\n      return;\n    }\n\n    const target = getEventTarget(event);\n\n    // We always want to skip _some_ events.\n    if (shouldSkipDOMEvent(event.type, target)) {\n      return;\n    }\n\n    // Mark event as \"seen\"\n    addNonEnumerableProperty(event, '_sentryCaptured', true);\n\n    if (target && !target._sentryId) {\n      // Add UUID to event target so we can identify if\n      addNonEnumerableProperty(target, '_sentryId', uuid4());\n    }\n\n    const name = event.type === 'keypress' ? 'input' : event.type;\n\n    // If there is no last captured event, it means that we can safely capture the new event and store it for future comparisons.\n    // If there is a last captured event, see if the new event is different enough to treat it as a unique one.\n    // If that's the case, emit the previous event and store locally the newly-captured DOM event.\n    if (!isSimilarToLastCapturedEvent(event)) {\n      handler({\n        event: event,\n        name,\n        global: globalListener,\n      });\n      lastCapturedEventType = event.type;\n      lastCapturedEventTargetId = target ? target._sentryId : undefined;\n    }\n\n    // Start a new debounce timer that will prevent us from capturing multiple events that should be grouped together.\n    clearTimeout(debounceTimerID);\n    debounceTimerID = WINDOW.setTimeout(() => {\n      lastCapturedEventTargetId = undefined;\n      lastCapturedEventType = undefined;\n    }, DEBOUNCE_DURATION);\n  };\n}\n\ntype AddEventListener = (\n  type: string,\n  listener: EventListenerOrEventListenerObject,\n  options?: boolean | AddEventListenerOptions,\n) => void;\ntype RemoveEventListener = (\n  type: string,\n  listener: EventListenerOrEventListenerObject,\n  options?: boolean | EventListenerOptions,\n) => void;\n\ntype InstrumentedElement = Element & {\n  __sentry_instrumentation_handlers__?: {\n    [key in 'click' | 'keypress']?: {\n      handler?: Function;\n      /** The number of custom listeners attached to this element */\n      refCount: number;\n    };\n  };\n};\n\n/** JSDoc */\nexport function instrumentDOM(): void {\n  if (!WINDOW.document) {\n    return;\n  }\n\n  // Make it so that any click or keypress that is unhandled / bubbled up all the way to the document triggers our dom\n  // handlers. (Normally we have only one, which captures a breadcrumb for each click or keypress.) Do this before\n  // we instrument `addEventListener` so that we don't end up attaching this handler twice.\n  const triggerDOMHandler = triggerHandlers.bind(null, 'dom');\n  const globalDOMEventHandler = makeDOMEventHandler(triggerDOMHandler, true);\n  WINDOW.document.addEventListener('click', globalDOMEventHandler, false);\n  WINDOW.document.addEventListener('keypress', globalDOMEventHandler, false);\n\n  // After hooking into click and keypress events bubbled up to `document`, we also hook into user-handled\n  // clicks & keypresses, by adding an event listener of our own to any element to which they add a listener. That\n  // way, whenever one of their handlers is triggered, ours will be, too. (This is needed because their handler\n  // could potentially prevent the event from bubbling up to our global listeners. This way, our handler are still\n  // guaranteed to fire at least once.)\n  ['EventTarget', 'Node'].forEach((target: string) => {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    const proto = (WINDOW as any)[target] && (WINDOW as any)[target].prototype;\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins\n    if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n      return;\n    }\n\n    fill(proto, 'addEventListener', function (originalAddEventListener: AddEventListener): AddEventListener {\n      return function (\n        this: Element,\n        type: string,\n        listener: EventListenerOrEventListenerObject,\n        options?: boolean | AddEventListenerOptions,\n      ): AddEventListener {\n        if (type === 'click' || type == 'keypress') {\n          try {\n            const el = this as InstrumentedElement;\n            const handlers = (el.__sentry_instrumentation_handlers__ = el.__sentry_instrumentation_handlers__ || {});\n            const handlerForType = (handlers[type] = handlers[type] || { refCount: 0 });\n\n            if (!handlerForType.handler) {\n              const handler = makeDOMEventHandler(triggerDOMHandler);\n              handlerForType.handler = handler;\n              originalAddEventListener.call(this, type, handler, options);\n            }\n\n            handlerForType.refCount++;\n          } catch (e) {\n            // Accessing dom properties is always fragile.\n            // Also allows us to skip `addEventListenrs` calls with no proper `this` context.\n          }\n        }\n\n        return originalAddEventListener.call(this, type, listener, options);\n      };\n    });\n\n    fill(\n      proto,\n      'removeEventListener',\n      function (originalRemoveEventListener: RemoveEventListener): RemoveEventListener {\n        return function (\n          this: Element,\n          type: string,\n          listener: EventListenerOrEventListenerObject,\n          options?: boolean | EventListenerOptions,\n        ): () => void {\n          if (type === 'click' || type == 'keypress') {\n            try {\n              const el = this as InstrumentedElement;\n              const handlers = el.__sentry_instrumentation_handlers__ || {};\n              const handlerForType = handlers[type];\n\n              if (handlerForType) {\n                handlerForType.refCount--;\n                // If there are no longer any custom handlers of the current type on this element, we can remove ours, too.\n                if (handlerForType.refCount <= 0) {\n                  originalRemoveEventListener.call(this, type, handlerForType.handler, options);\n                  handlerForType.handler = undefined;\n                  delete handlers[type]; // eslint-disable-line @typescript-eslint/no-dynamic-delete\n                }\n\n                // If there are no longer any custom handlers of any type on this element, cleanup everything.\n                if (Object.keys(handlers).length === 0) {\n                  delete el.__sentry_instrumentation_handlers__;\n                }\n              }\n            } catch (e) {\n              // Accessing dom properties is always fragile.\n              // Also allows us to skip `addEventListenrs` calls with no proper `this` context.\n            }\n          }\n\n          return originalRemoveEventListener.call(this, type, listener, options);\n        };\n      },\n    );\n  });\n}\n\nlet _oldOnErrorHandler: (typeof WINDOW)['onerror'] | null = null;\n/** JSDoc */\nfunction instrumentError(): void {\n  _oldOnErrorHandler = WINDOW.onerror;\n\n  WINDOW.onerror = function (msg: unknown, url: unknown, line: unknown, column: unknown, error: unknown): boolean {\n    triggerHandlers('error', {\n      column,\n      error,\n      line,\n      msg,\n      url,\n    });\n\n    if (_oldOnErrorHandler && !_oldOnErrorHandler.__SENTRY_LOADER__) {\n      // eslint-disable-next-line prefer-rest-params\n      return _oldOnErrorHandler.apply(this, arguments);\n    }\n\n    return false;\n  };\n\n  WINDOW.onerror.__SENTRY_INSTRUMENTED__ = true;\n}\n\nlet _oldOnUnhandledRejectionHandler: (typeof WINDOW)['onunhandledrejection'] | null = null;\n/** JSDoc */\nfunction instrumentUnhandledRejection(): void {\n  _oldOnUnhandledRejectionHandler = WINDOW.onunhandledrejection;\n\n  WINDOW.onunhandledrejection = function (e: any): boolean {\n    triggerHandlers('unhandledrejection', e);\n\n    if (_oldOnUnhandledRejectionHandler && !_oldOnUnhandledRejectionHandler.__SENTRY_LOADER__) {\n      // eslint-disable-next-line prefer-rest-params\n      return _oldOnUnhandledRejectionHandler.apply(this, arguments);\n    }\n\n    return true;\n  };\n\n  WINDOW.onunhandledrejection.__SENTRY_INSTRUMENTED__ = true;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n\nimport type { PolymorphicEvent, Primitive } from '@sentry/types';\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst objectToString = Object.prototype.toString;\n\n/**\n * Checks whether given value's type is one of a few Error or Error-like\n * {@link isError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isError(wat: unknown): wat is Error {\n  switch (objectToString.call(wat)) {\n    case '[object Error]':\n    case '[object Exception]':\n    case '[object DOMException]':\n      return true;\n    default:\n      return isInstanceOf(wat, Error);\n  }\n}\n/**\n * Checks whether given value is an instance of the given built-in class.\n *\n * @param wat The value to be checked\n * @param className\n * @returns A boolean representing the result.\n */\nfunction isBuiltin(wat: unknown, className: string): boolean {\n  return objectToString.call(wat) === `[object ${className}]`;\n}\n\n/**\n * Checks whether given value's type is ErrorEvent\n * {@link isErrorEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isErrorEvent(wat: unknown): boolean {\n  return isBuiltin(wat, 'ErrorEvent');\n}\n\n/**\n * Checks whether given value's type is DOMError\n * {@link isDOMError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isDOMError(wat: unknown): boolean {\n  return isBuiltin(wat, 'DOMError');\n}\n\n/**\n * Checks whether given value's type is DOMException\n * {@link isDOMException}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isDOMException(wat: unknown): boolean {\n  return isBuiltin(wat, 'DOMException');\n}\n\n/**\n * Checks whether given value's type is a string\n * {@link isString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isString(wat: unknown): wat is string {\n  return isBuiltin(wat, 'String');\n}\n\n/**\n * Checks whether given value is a primitive (undefined, null, number, boolean, string, bigint, symbol)\n * {@link isPrimitive}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isPrimitive(wat: unknown): wat is Primitive {\n  return wat === null || (typeof wat !== 'object' && typeof wat !== 'function');\n}\n\n/**\n * Checks whether given value's type is an object literal\n * {@link isPlainObject}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isPlainObject(wat: unknown): wat is Record<string, unknown> {\n  return isBuiltin(wat, 'Object');\n}\n\n/**\n * Checks whether given value's type is an Event instance\n * {@link isEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isEvent(wat: unknown): wat is PolymorphicEvent {\n  return typeof Event !== 'undefined' && isInstanceOf(wat, Event);\n}\n\n/**\n * Checks whether given value's type is an Element instance\n * {@link isElement}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isElement(wat: unknown): boolean {\n  return typeof Element !== 'undefined' && isInstanceOf(wat, Element);\n}\n\n/**\n * Checks whether given value's type is an regexp\n * {@link isRegExp}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isRegExp(wat: unknown): wat is RegExp {\n  return isBuiltin(wat, 'RegExp');\n}\n\n/**\n * Checks whether given value has a then function.\n * @param wat A value to be checked.\n */\nexport function isThenable(wat: any): wat is PromiseLike<any> {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  return Boolean(wat && wat.then && typeof wat.then === 'function');\n}\n\n/**\n * Checks whether given value's type is a SyntheticEvent\n * {@link isSyntheticEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isSyntheticEvent(wat: unknown): boolean {\n  return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat;\n}\n\n/**\n * Checks whether given value is NaN\n * {@link isNaN}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isNaN(wat: unknown): boolean {\n  return typeof wat === 'number' && wat !== wat;\n}\n\n/**\n * Checks whether given value's type is an instance of provided constructor.\n * {@link isInstanceOf}.\n *\n * @param wat A value to be checked.\n * @param base A constructor to be used in a check.\n * @returns A boolean representing the result.\n */\nexport function isInstanceOf(wat: any, base: any): boolean {\n  try {\n    return wat instanceof base;\n  } catch (_e) {\n    return false;\n  }\n}\n\ninterface VueViewModel {\n  // Vue3\n  __isVue?: boolean;\n  // Vue2\n  _isVue?: boolean;\n}\n/**\n * Checks whether given value's type is a Vue ViewModel.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isVueViewModel(wat: unknown): boolean {\n  // Not using Object.prototype.toString because in Vue 3 it would read the instance's Symbol(Symbol.toStringTag) property.\n  return !!(typeof wat === 'object' && wat !== null && ((wat as VueViewModel).__isVue || (wat as VueViewModel)._isVue));\n}\n","import { GLOBAL_OBJ } from './worldwide';\n\n/** Prefix for logging strings */\nconst PREFIX = 'Sentry Logger ';\n\nexport const CONSOLE_LEVELS = ['debug', 'info', 'warn', 'error', 'log', 'assert', 'trace'] as const;\nexport type ConsoleLevel = (typeof CONSOLE_LEVELS)[number];\n\ntype LoggerMethod = (...args: unknown[]) => void;\ntype LoggerConsoleMethods = Record<ConsoleLevel, LoggerMethod>;\n\n/** This may be mutated by the console instrumentation. */\nexport const originalConsoleMethods: {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  [key in ConsoleLevel]?: (...args: any[]) => void;\n} = {};\n\n/** JSDoc */\ninterface Logger extends LoggerConsoleMethods {\n  disable(): void;\n  enable(): void;\n  isEnabled(): boolean;\n}\n\n/**\n * Temporarily disable sentry console instrumentations.\n *\n * @param callback The function to run against the original `console` messages\n * @returns The results of the callback\n */\nexport function consoleSandbox<T>(callback: () => T): T {\n  if (!('console' in GLOBAL_OBJ)) {\n    return callback();\n  }\n\n  const console = GLOBAL_OBJ.console as Console;\n  const wrappedFuncs: Partial<LoggerConsoleMethods> = {};\n\n  const wrappedLevels = Object.keys(originalConsoleMethods) as ConsoleLevel[];\n\n  // Restore all wrapped console methods\n  wrappedLevels.forEach(level => {\n    const originalConsoleMethod = originalConsoleMethods[level] as LoggerMethod;\n    wrappedFuncs[level] = console[level] as LoggerMethod | undefined;\n    console[level] = originalConsoleMethod;\n  });\n\n  try {\n    return callback();\n  } finally {\n    // Revert restoration to wrapped state\n    wrappedLevels.forEach(level => {\n      console[level] = wrappedFuncs[level] as LoggerMethod;\n    });\n  }\n}\n\nfunction makeLogger(): Logger {\n  let enabled = false;\n  const logger: Partial<Logger> = {\n    enable: () => {\n      enabled = true;\n    },\n    disable: () => {\n      enabled = false;\n    },\n    isEnabled: () => enabled,\n  };\n\n  if (__DEBUG_BUILD__) {\n    CONSOLE_LEVELS.forEach(name => {\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      logger[name] = (...args: any[]) => {\n        if (enabled) {\n          consoleSandbox(() => {\n            GLOBAL_OBJ.console[name](`${PREFIX}[${name}]:`, ...args);\n          });\n        }\n      };\n    });\n  } else {\n    CONSOLE_LEVELS.forEach(name => {\n      logger[name] = () => undefined;\n    });\n  }\n\n  return logger as Logger;\n}\n\nexport const logger = makeLogger();\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Event, Exception, Mechanism, StackFrame } from '@sentry/types';\n\nimport { addNonEnumerableProperty } from './object';\nimport { snipLine } from './string';\nimport { GLOBAL_OBJ } from './worldwide';\n\ninterface CryptoInternal {\n  getRandomValues(array: Uint8Array): Uint8Array;\n  randomUUID?(): string;\n}\n\n/** An interface for common properties on global */\ninterface CryptoGlobal {\n  msCrypto?: CryptoInternal;\n  crypto?: CryptoInternal;\n}\n\n/**\n * UUID4 generator\n *\n * @returns string Generated UUID4.\n */\nexport function uuid4(): string {\n  const gbl = GLOBAL_OBJ as typeof GLOBAL_OBJ & CryptoGlobal;\n  const crypto = gbl.crypto || gbl.msCrypto;\n\n  let getRandomByte = (): number => Math.random() * 16;\n  try {\n    if (crypto && crypto.randomUUID) {\n      return crypto.randomUUID().replace(/-/g, '');\n    }\n    if (crypto && crypto.getRandomValues) {\n      getRandomByte = () => crypto.getRandomValues(new Uint8Array(1))[0];\n    }\n  } catch (_) {\n    // some runtimes can crash invoking crypto\n    // https://github.com/getsentry/sentry-javascript/issues/8935\n  }\n\n  // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n  // Concatenating the following numbers as strings results in '10000000100040008000100000000000'\n  return (([1e7] as unknown as string) + 1e3 + 4e3 + 8e3 + 1e11).replace(/[018]/g, c =>\n    // eslint-disable-next-line no-bitwise\n    ((c as unknown as number) ^ ((getRandomByte() & 15) >> ((c as unknown as number) / 4))).toString(16),\n  );\n}\n\nfunction getFirstException(event: Event): Exception | undefined {\n  return event.exception && event.exception.values ? event.exception.values[0] : undefined;\n}\n\n/**\n * Extracts either message or type+value from an event that can be used for user-facing logs\n * @returns event's description\n */\nexport function getEventDescription(event: Event): string {\n  const { message, event_id: eventId } = event;\n  if (message) {\n    return message;\n  }\n\n  const firstException = getFirstException(event);\n  if (firstException) {\n    if (firstException.type && firstException.value) {\n      return `${firstException.type}: ${firstException.value}`;\n    }\n    return firstException.type || firstException.value || eventId || '<unknown>';\n  }\n  return eventId || '<unknown>';\n}\n\n/**\n * Adds exception values, type and value to an synthetic Exception.\n * @param event The event to modify.\n * @param value Value of the exception.\n * @param type Type of the exception.\n * @hidden\n */\nexport function addExceptionTypeValue(event: Event, value?: string, type?: string): void {\n  const exception = (event.exception = event.exception || {});\n  const values = (exception.values = exception.values || []);\n  const firstException = (values[0] = values[0] || {});\n  if (!firstException.value) {\n    firstException.value = value || '';\n  }\n  if (!firstException.type) {\n    firstException.type = type || 'Error';\n  }\n}\n\n/**\n * Adds exception mechanism data to a given event. Uses defaults if the second parameter is not passed.\n *\n * @param event The event to modify.\n * @param newMechanism Mechanism data to add to the event.\n * @hidden\n */\nexport function addExceptionMechanism(event: Event, newMechanism?: Partial<Mechanism>): void {\n  const firstException = getFirstException(event);\n  if (!firstException) {\n    return;\n  }\n\n  const defaultMechanism = { type: 'generic', handled: true };\n  const currentMechanism = firstException.mechanism;\n  firstException.mechanism = { ...defaultMechanism, ...currentMechanism, ...newMechanism };\n\n  if (newMechanism && 'data' in newMechanism) {\n    const mergedData = { ...(currentMechanism && currentMechanism.data), ...newMechanism.data };\n    firstException.mechanism.data = mergedData;\n  }\n}\n\n// https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string\nconst SEMVER_REGEXP =\n  /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n\n/**\n * Represents Semantic Versioning object\n */\ninterface SemVer {\n  major?: number;\n  minor?: number;\n  patch?: number;\n  prerelease?: string;\n  buildmetadata?: string;\n}\n\n/**\n * Parses input into a SemVer interface\n * @param input string representation of a semver version\n */\nexport function parseSemver(input: string): SemVer {\n  const match = input.match(SEMVER_REGEXP) || [];\n  const major = parseInt(match[1], 10);\n  const minor = parseInt(match[2], 10);\n  const patch = parseInt(match[3], 10);\n  return {\n    buildmetadata: match[5],\n    major: isNaN(major) ? undefined : major,\n    minor: isNaN(minor) ? undefined : minor,\n    patch: isNaN(patch) ? undefined : patch,\n    prerelease: match[4],\n  };\n}\n\n/**\n * This function adds context (pre/post/line) lines to the provided frame\n *\n * @param lines string[] containing all lines\n * @param frame StackFrame that will be mutated\n * @param linesOfContext number of context lines we want to add pre/post\n */\nexport function addContextToFrame(lines: string[], frame: StackFrame, linesOfContext: number = 5): void {\n  // When there is no line number in the frame, attaching context is nonsensical and will even break grouping\n  if (frame.lineno === undefined) {\n    return;\n  }\n\n  const maxLines = lines.length;\n  const sourceLine = Math.max(Math.min(maxLines - 1, frame.lineno - 1), 0);\n\n  frame.pre_context = lines\n    .slice(Math.max(0, sourceLine - linesOfContext), sourceLine)\n    .map((line: string) => snipLine(line, 0));\n\n  frame.context_line = snipLine(lines[Math.min(maxLines - 1, sourceLine)], frame.colno || 0);\n\n  frame.post_context = lines\n    .slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext)\n    .map((line: string) => snipLine(line, 0));\n}\n\n/**\n * Checks whether or not we've already captured the given exception (note: not an identical exception - the very object\n * in question), and marks it captured if not.\n *\n * This is useful because it's possible for an error to get captured by more than one mechanism. After we intercept and\n * record an error, we rethrow it (assuming we've intercepted it before it's reached the top-level global handlers), so\n * that we don't interfere with whatever effects the error might have had were the SDK not there. At that point, because\n * the error has been rethrown, it's possible for it to bubble up to some other code we've instrumented. If it's not\n * caught after that, it will bubble all the way up to the global handlers (which of course we also instrument). This\n * function helps us ensure that even if we encounter the same error more than once, we only record it the first time we\n * see it.\n *\n * Note: It will ignore primitives (always return `false` and not mark them as seen), as properties can't be set on\n * them. {@link: Object.objectify} can be used on exceptions to convert any that are primitives into their equivalent\n * object wrapper forms so that this check will always work. However, because we need to flag the exact object which\n * will get rethrown, and because that rethrowing happens outside of the event processing pipeline, the objectification\n * must be done before the exception captured.\n *\n * @param A thrown exception to check or flag as having been seen\n * @returns `true` if the exception has already been captured, `false` if not (with the side effect of marking it seen)\n */\nexport function checkOrSetAlreadyCaught(exception: unknown): boolean {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  if (exception && (exception as any).__sentry_captured__) {\n    return true;\n  }\n\n  try {\n    // set it this way rather than by assignment so that it's not ennumerable and therefore isn't recorded by the\n    // `ExtraErrorData` integration\n    addNonEnumerableProperty(exception as { [key: string]: unknown }, '__sentry_captured__', true);\n  } catch (err) {\n    // `exception` is a primitive, so we can't mark it seen\n  }\n\n  return false;\n}\n\n/**\n * Checks whether the given input is already an array, and if it isn't, wraps it in one.\n *\n * @param maybeArray Input to turn into an array, if necessary\n * @returns The input, if already an array, or an array with the input as the only element, if not\n */\nexport function arrayify<T = unknown>(maybeArray: T | T[]): T[] {\n  return Array.isArray(maybeArray) ? maybeArray : [maybeArray];\n}\n","/**\n * NOTE: In order to avoid circular dependencies, if you add a function to this module and it needs to print something,\n * you must either a) use `console.log` rather than the logger, or b) put your function elsewhere.\n */\n\nimport { isBrowserBundle } from './env';\n\n/**\n * Checks whether we're in the Node.js or Browser environment\n *\n * @returns Answer to given question\n */\nexport function isNodeEnv(): boolean {\n  // explicitly check for browser bundles as those can be optimized statically\n  // by terser/rollup.\n  return (\n    !isBrowserBundle() &&\n    Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]'\n  );\n}\n\n/**\n * Requires a module which is protected against bundler minification.\n *\n * @param request The module path to resolve\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any\nexport function dynamicRequire(mod: any, request: string): any {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  return mod.require(request);\n}\n\n/**\n * Helper for dynamically loading module that should work with linked dependencies.\n * The problem is that we _should_ be using `require(require.resolve(moduleName, { paths: [cwd()] }))`\n * However it's _not possible_ to do that with Webpack, as it has to know all the dependencies during\n * build time. `require.resolve` is also not available in any other way, so we cannot create,\n * a fake helper like we do with `dynamicRequire`.\n *\n * We always prefer to use local package, thus the value is not returned early from each `try/catch` block.\n * That is to mimic the behavior of `require.resolve` exactly.\n *\n * @param moduleName module name to require\n * @returns possibly required module\n */\nexport function loadModule<T>(moduleName: string): T | undefined {\n  let mod: T | undefined;\n\n  try {\n    mod = dynamicRequire(module, moduleName);\n  } catch (e) {\n    // no-empty\n  }\n\n  try {\n    const { cwd } = dynamicRequire(module, 'process');\n    mod = dynamicRequire(module, `${cwd()}/node_modules/${moduleName}`) as T;\n  } catch (e) {\n    // no-empty\n  }\n\n  return mod;\n}\n","import type { Primitive } from '@sentry/types';\n\nimport { isNaN, isSyntheticEvent, isVueViewModel } from './is';\nimport type { MemoFunc } from './memo';\nimport { memoBuilder } from './memo';\nimport { convertToPlainObject } from './object';\nimport { getFunctionName } from './stacktrace';\n\ntype Prototype = { constructor: (...args: unknown[]) => unknown };\n// This is a hack to placate TS, relying on the fact that technically, arrays are objects with integer keys. Normally we\n// think of those keys as actual numbers, but `arr['0']` turns out to work just as well as `arr[0]`, and doing it this\n// way lets us use a single type in the places where behave as if we are only dealing with objects, even if some of them\n// might be arrays.\ntype ObjOrArray<T> = { [key: string]: T };\n\n/**\n * Recursively normalizes the given object.\n *\n * - Creates a copy to prevent original input mutation\n * - Skips non-enumerable properties\n * - When stringifying, calls `toJSON` if implemented\n * - Removes circular references\n * - Translates non-serializable values (`undefined`/`NaN`/functions) to serializable format\n * - Translates known global objects/classes to a string representations\n * - Takes care of `Error` object serialization\n * - Optionally limits depth of final output\n * - Optionally limits number of properties/elements included in any single object/array\n *\n * @param input The object to be normalized.\n * @param depth The max depth to which to normalize the object. (Anything deeper stringified whole.)\n * @param maxProperties The max number of elements or properties to be included in any single array or\n * object in the normallized output.\n * @returns A normalized version of the object, or `\"**non-serializable**\"` if any errors are thrown during normalization.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function normalize(input: unknown, depth: number = 100, maxProperties: number = +Infinity): any {\n  try {\n    // since we're at the outermost level, we don't provide a key\n    return visit('', input, depth, maxProperties);\n  } catch (err) {\n    return { ERROR: `**non-serializable** (${err})` };\n  }\n}\n\n/** JSDoc */\nexport function normalizeToSize<T>(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  object: { [key: string]: any },\n  // Default Node.js REPL depth\n  depth: number = 3,\n  // 100kB, as 200kB is max payload size, so half sounds reasonable\n  maxSize: number = 100 * 1024,\n): T {\n  const normalized = normalize(object, depth);\n\n  if (jsonSize(normalized) > maxSize) {\n    return normalizeToSize(object, depth - 1, maxSize);\n  }\n\n  return normalized as T;\n}\n\n/**\n * Visits a node to perform normalization on it\n *\n * @param key The key corresponding to the given node\n * @param value The node to be visited\n * @param depth Optional number indicating the maximum recursion depth\n * @param maxProperties Optional maximum number of properties/elements included in any single object/array\n * @param memo Optional Memo class handling decycling\n */\nfunction visit(\n  key: string,\n  value: unknown,\n  depth: number = +Infinity,\n  maxProperties: number = +Infinity,\n  memo: MemoFunc = memoBuilder(),\n): Primitive | ObjOrArray<unknown> {\n  const [memoize, unmemoize] = memo;\n\n  // Get the simple cases out of the way first\n  if (\n    value == null || // this matches null and undefined -> eqeq not eqeqeq\n    (['number', 'boolean', 'string'].includes(typeof value) && !isNaN(value))\n  ) {\n    return value as Primitive;\n  }\n\n  const stringified = stringifyValue(key, value);\n\n  // Anything we could potentially dig into more (objects or arrays) will have come back as `\"[object XXXX]\"`.\n  // Everything else will have already been serialized, so if we don't see that pattern, we're done.\n  if (!stringified.startsWith('[object ')) {\n    return stringified;\n  }\n\n  // From here on, we can assert that `value` is either an object or an array.\n\n  // Do not normalize objects that we know have already been normalized. As a general rule, the\n  // \"__sentry_skip_normalization__\" property should only be used sparingly and only should only be set on objects that\n  // have already been normalized.\n  if ((value as ObjOrArray<unknown>)['__sentry_skip_normalization__']) {\n    return value as ObjOrArray<unknown>;\n  }\n\n  // We can set `__sentry_override_normalization_depth__` on an object to ensure that from there\n  // We keep a certain amount of depth.\n  // This should be used sparingly, e.g. we use it for the redux integration to ensure we get a certain amount of state.\n  const remainingDepth =\n    typeof (value as ObjOrArray<unknown>)['__sentry_override_normalization_depth__'] === 'number'\n      ? ((value as ObjOrArray<unknown>)['__sentry_override_normalization_depth__'] as number)\n      : depth;\n\n  // We're also done if we've reached the max depth\n  if (remainingDepth === 0) {\n    // At this point we know `serialized` is a string of the form `\"[object XXXX]\"`. Clean it up so it's just `\"[XXXX]\"`.\n    return stringified.replace('object ', '');\n  }\n\n  // If we've already visited this branch, bail out, as it's circular reference. If not, note that we're seeing it now.\n  if (memoize(value)) {\n    return '[Circular ~]';\n  }\n\n  // If the value has a `toJSON` method, we call it to extract more information\n  const valueWithToJSON = value as unknown & { toJSON?: () => unknown };\n  if (valueWithToJSON && typeof valueWithToJSON.toJSON === 'function') {\n    try {\n      const jsonValue = valueWithToJSON.toJSON();\n      // We need to normalize the return value of `.toJSON()` in case it has circular references\n      return visit('', jsonValue, remainingDepth - 1, maxProperties, memo);\n    } catch (err) {\n      // pass (The built-in `toJSON` failed, but we can still try to do it ourselves)\n    }\n  }\n\n  // At this point we know we either have an object or an array, we haven't seen it before, and we're going to recurse\n  // because we haven't yet reached the max depth. Create an accumulator to hold the results of visiting each\n  // property/entry, and keep track of the number of items we add to it.\n  const normalized = (Array.isArray(value) ? [] : {}) as ObjOrArray<unknown>;\n  let numAdded = 0;\n\n  // Before we begin, convert`Error` and`Event` instances into plain objects, since some of each of their relevant\n  // properties are non-enumerable and otherwise would get missed.\n  const visitable = convertToPlainObject(value as ObjOrArray<unknown>);\n\n  for (const visitKey in visitable) {\n    // Avoid iterating over fields in the prototype if they've somehow been exposed to enumeration.\n    if (!Object.prototype.hasOwnProperty.call(visitable, visitKey)) {\n      continue;\n    }\n\n    if (numAdded >= maxProperties) {\n      normalized[visitKey] = '[MaxProperties ~]';\n      break;\n    }\n\n    // Recursively visit all the child nodes\n    const visitValue = visitable[visitKey];\n    normalized[visitKey] = visit(visitKey, visitValue, remainingDepth - 1, maxProperties, memo);\n\n    numAdded++;\n  }\n\n  // Once we've visited all the branches, remove the parent from memo storage\n  unmemoize(value);\n\n  // Return accumulated values\n  return normalized;\n}\n\n/**\n * @deprecated This export will be removed in v8.\n */\nexport { visit as walk };\n\n/* eslint-disable complexity */\n/**\n * Stringify the given value. Handles various known special values and types.\n *\n * Not meant to be used on simple primitives which already have a string representation, as it will, for example, turn\n * the number 1231 into \"[Object Number]\", nor on `null`, as it will throw.\n *\n * @param value The value to stringify\n * @returns A stringified representation of the given value\n */\nfunction stringifyValue(\n  key: unknown,\n  // this type is a tiny bit of a cheat, since this function does handle NaN (which is technically a number), but for\n  // our internal use, it'll do\n  value: Exclude<unknown, string | number | boolean | null>,\n): string {\n  try {\n    if (key === 'domain' && value && typeof value === 'object' && (value as { _events: unknown })._events) {\n      return '[Domain]';\n    }\n\n    if (key === 'domainEmitter') {\n      return '[DomainEmitter]';\n    }\n\n    // It's safe to use `global`, `window`, and `document` here in this manner, as we are asserting using `typeof` first\n    // which won't throw if they are not present.\n\n    if (typeof global !== 'undefined' && value === global) {\n      return '[Global]';\n    }\n\n    // eslint-disable-next-line no-restricted-globals\n    if (typeof window !== 'undefined' && value === window) {\n      return '[Window]';\n    }\n\n    // eslint-disable-next-line no-restricted-globals\n    if (typeof document !== 'undefined' && value === document) {\n      return '[Document]';\n    }\n\n    if (isVueViewModel(value)) {\n      return '[VueViewModel]';\n    }\n\n    // React's SyntheticEvent thingy\n    if (isSyntheticEvent(value)) {\n      return '[SyntheticEvent]';\n    }\n\n    if (typeof value === 'number' && value !== value) {\n      return '[NaN]';\n    }\n\n    if (typeof value === 'function') {\n      return `[Function: ${getFunctionName(value)}]`;\n    }\n\n    if (typeof value === 'symbol') {\n      return `[${String(value)}]`;\n    }\n\n    // stringified BigInts are indistinguishable from regular numbers, so we need to label them to avoid confusion\n    if (typeof value === 'bigint') {\n      return `[BigInt: ${String(value)}]`;\n    }\n\n    // Now that we've knocked out all the special cases and the primitives, all we have left are objects. Simply casting\n    // them to strings means that instances of classes which haven't defined their `toStringTag` will just come out as\n    // `\"[object Object]\"`. If we instead look at the constructor's name (which is the same as the name of the class),\n    // we can make sure that only plain objects come out that way.\n    const objName = getConstructorName(value);\n\n    // Handle HTML Elements\n    if (/^HTML(\\w*)Element$/.test(objName)) {\n      return `[HTMLElement: ${objName}]`;\n    }\n\n    return `[object ${objName}]`;\n  } catch (err) {\n    return `**non-serializable** (${err})`;\n  }\n}\n/* eslint-enable complexity */\n\nfunction getConstructorName(value: unknown): string {\n  const prototype: Prototype | null = Object.getPrototypeOf(value);\n\n  return prototype ? prototype.constructor.name : 'null prototype';\n}\n\n/** Calculates bytes size of input string */\nfunction utf8Length(value: string): number {\n  // eslint-disable-next-line no-bitwise\n  return ~-encodeURI(value).split(/%..|./).length;\n}\n\n/** Calculates bytes size of input object */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction jsonSize(value: any): number {\n  return utf8Length(JSON.stringify(value));\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport type MemoFunc = [\n  // memoize\n  (obj: any) => boolean,\n  // unmemoize\n  (obj: any) => void,\n];\n\n/**\n * Helper to decycle json objects\n */\nexport function memoBuilder(): MemoFunc {\n  const hasWeakSet = typeof WeakSet === 'function';\n  const inner: any = hasWeakSet ? new WeakSet() : [];\n  function memoize(obj: any): boolean {\n    if (hasWeakSet) {\n      if (inner.has(obj)) {\n        return true;\n      }\n      inner.add(obj);\n      return false;\n    }\n    // eslint-disable-next-line @typescript-eslint/prefer-for-of\n    for (let i = 0; i < inner.length; i++) {\n      const value = inner[i];\n      if (value === obj) {\n        return true;\n      }\n    }\n    inner.push(obj);\n    return false;\n  }\n\n  function unmemoize(obj: any): void {\n    if (hasWeakSet) {\n      inner.delete(obj);\n    } else {\n      for (let i = 0; i < inner.length; i++) {\n        if (inner[i] === obj) {\n          inner.splice(i, 1);\n          break;\n        }\n      }\n    }\n  }\n  return [memoize, unmemoize];\n}\n","/* eslint-disable max-lines */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { WrappedFunction } from '@sentry/types';\n\nimport { htmlTreeAsString } from './browser';\nimport { isElement, isError, isEvent, isInstanceOf, isPlainObject, isPrimitive } from './is';\nimport { logger } from './logger';\nimport { truncate } from './string';\n\n/**\n * Replace a method in an object with a wrapped version of itself.\n *\n * @param source An object that contains a method to be wrapped.\n * @param name The name of the method to be wrapped.\n * @param replacementFactory A higher-order function that takes the original version of the given method and returns a\n * wrapped version. Note: The function returned by `replacementFactory` needs to be a non-arrow function, in order to\n * preserve the correct value of `this`, and the original method must be called using `origMethod.call(this, <other\n * args>)` or `origMethod.apply(this, [<other args>])` (rather than being called directly), again to preserve `this`.\n * @returns void\n */\nexport function fill(source: { [key: string]: any }, name: string, replacementFactory: (...args: any[]) => any): void {\n  if (!(name in source)) {\n    return;\n  }\n\n  const original = source[name] as () => any;\n  const wrapped = replacementFactory(original) as WrappedFunction;\n\n  // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n  // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n  if (typeof wrapped === 'function') {\n    markFunctionWrapped(wrapped, original);\n  }\n\n  source[name] = wrapped;\n}\n\n/**\n * Defines a non-enumerable property on the given object.\n *\n * @param obj The object on which to set the property\n * @param name The name of the property to be set\n * @param value The value to which to set the property\n */\nexport function addNonEnumerableProperty(obj: object, name: string, value: unknown): void {\n  try {\n    Object.defineProperty(obj, name, {\n      // enumerable: false, // the default, so we can save on bundle size by not explicitly setting it\n      value: value,\n      writable: true,\n      configurable: true,\n    });\n  } catch (o_O) {\n    __DEBUG_BUILD__ && logger.log(`Failed to add non-enumerable property \"${name}\" to object`, obj);\n  }\n}\n\n/**\n * Remembers the original function on the wrapped function and\n * patches up the prototype.\n *\n * @param wrapped the wrapper function\n * @param original the original function that gets wrapped\n */\nexport function markFunctionWrapped(wrapped: WrappedFunction, original: WrappedFunction): void {\n  try {\n    const proto = original.prototype || {};\n    wrapped.prototype = original.prototype = proto;\n    addNonEnumerableProperty(wrapped, '__sentry_original__', original);\n  } catch (o_O) {} // eslint-disable-line no-empty\n}\n\n/**\n * This extracts the original function if available.  See\n * `markFunctionWrapped` for more information.\n *\n * @param func the function to unwrap\n * @returns the unwrapped version of the function if available.\n */\nexport function getOriginalFunction(func: WrappedFunction): WrappedFunction | undefined {\n  return func.__sentry_original__;\n}\n\n/**\n * Encodes given object into url-friendly format\n *\n * @param object An object that contains serializable values\n * @returns string Encoded\n */\nexport function urlEncode(object: { [key: string]: any }): string {\n  return Object.keys(object)\n    .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(object[key])}`)\n    .join('&');\n}\n\n/**\n * Transforms any `Error` or `Event` into a plain object with all of their enumerable properties, and some of their\n * non-enumerable properties attached.\n *\n * @param value Initial source that we have to transform in order for it to be usable by the serializer\n * @returns An Event or Error turned into an object - or the value argurment itself, when value is neither an Event nor\n *  an Error.\n */\nexport function convertToPlainObject<V>(value: V):\n  | {\n      [ownProps: string]: unknown;\n      type: string;\n      target: string;\n      currentTarget: string;\n      detail?: unknown;\n    }\n  | {\n      [ownProps: string]: unknown;\n      message: string;\n      name: string;\n      stack?: string;\n    }\n  | V {\n  if (isError(value)) {\n    return {\n      message: value.message,\n      name: value.name,\n      stack: value.stack,\n      ...getOwnProperties(value),\n    };\n  } else if (isEvent(value)) {\n    const newObj: {\n      [ownProps: string]: unknown;\n      type: string;\n      target: string;\n      currentTarget: string;\n      detail?: unknown;\n    } = {\n      type: value.type,\n      target: serializeEventTarget(value.target),\n      currentTarget: serializeEventTarget(value.currentTarget),\n      ...getOwnProperties(value),\n    };\n\n    if (typeof CustomEvent !== 'undefined' && isInstanceOf(value, CustomEvent)) {\n      newObj.detail = value.detail;\n    }\n\n    return newObj;\n  } else {\n    return value;\n  }\n}\n\n/** Creates a string representation of the target of an `Event` object */\nfunction serializeEventTarget(target: unknown): string {\n  try {\n    return isElement(target) ? htmlTreeAsString(target) : Object.prototype.toString.call(target);\n  } catch (_oO) {\n    return '<unknown>';\n  }\n}\n\n/** Filters out all but an object's own properties */\nfunction getOwnProperties(obj: unknown): { [key: string]: unknown } {\n  if (typeof obj === 'object' && obj !== null) {\n    const extractedProps: { [key: string]: unknown } = {};\n    for (const property in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, property)) {\n        extractedProps[property] = (obj as Record<string, unknown>)[property];\n      }\n    }\n    return extractedProps;\n  } else {\n    return {};\n  }\n}\n\n/**\n * Given any captured exception, extract its keys and create a sorted\n * and truncated list that will be used inside the event message.\n * eg. `Non-error exception captured with keys: foo, bar, baz`\n */\nexport function extractExceptionKeysForMessage(exception: Record<string, unknown>, maxLength: number = 40): string {\n  const keys = Object.keys(convertToPlainObject(exception));\n  keys.sort();\n\n  if (!keys.length) {\n    return '[object has no keys]';\n  }\n\n  if (keys[0].length >= maxLength) {\n    return truncate(keys[0], maxLength);\n  }\n\n  for (let includedKeys = keys.length; includedKeys > 0; includedKeys--) {\n    const serialized = keys.slice(0, includedKeys).join(', ');\n    if (serialized.length > maxLength) {\n      continue;\n    }\n    if (includedKeys === keys.length) {\n      return serialized;\n    }\n    return truncate(serialized, maxLength);\n  }\n\n  return '';\n}\n\n/**\n * Given any object, return a new object having removed all fields whose value was `undefined`.\n * Works recursively on objects and arrays.\n *\n * Attention: This function keeps circular references in the returned object.\n */\nexport function dropUndefinedKeys<T>(inputValue: T): T {\n  // This map keeps track of what already visited nodes map to.\n  // Our Set - based memoBuilder doesn't work here because we want to the output object to have the same circular\n  // references as the input object.\n  const memoizationMap = new Map<unknown, unknown>();\n\n  // This function just proxies `_dropUndefinedKeys` to keep the `memoBuilder` out of this function's API\n  return _dropUndefinedKeys(inputValue, memoizationMap);\n}\n\nfunction _dropUndefinedKeys<T>(inputValue: T, memoizationMap: Map<unknown, unknown>): T {\n  if (isPlainObject(inputValue)) {\n    // If this node has already been visited due to a circular reference, return the object it was mapped to in the new object\n    const memoVal = memoizationMap.get(inputValue);\n    if (memoVal !== undefined) {\n      return memoVal as T;\n    }\n\n    const returnValue: { [key: string]: any } = {};\n    // Store the mapping of this value in case we visit it again, in case of circular data\n    memoizationMap.set(inputValue, returnValue);\n\n    for (const key of Object.keys(inputValue)) {\n      if (typeof inputValue[key] !== 'undefined') {\n        returnValue[key] = _dropUndefinedKeys(inputValue[key], memoizationMap);\n      }\n    }\n\n    return returnValue as T;\n  }\n\n  if (Array.isArray(inputValue)) {\n    // If this node has already been visited due to a circular reference, return the array it was mapped to in the new object\n    const memoVal = memoizationMap.get(inputValue);\n    if (memoVal !== undefined) {\n      return memoVal as T;\n    }\n\n    const returnValue: unknown[] = [];\n    // Store the mapping of this value in case we visit it again, in case of circular data\n    memoizationMap.set(inputValue, returnValue);\n\n    inputValue.forEach((item: unknown) => {\n      returnValue.push(_dropUndefinedKeys(item, memoizationMap));\n    });\n\n    return returnValue as unknown as T;\n  }\n\n  return inputValue;\n}\n\n/**\n * Ensure that something is an object.\n *\n * Turns `undefined` and `null` into `String`s and all other primitives into instances of their respective wrapper\n * classes (String, Boolean, Number, etc.). Acts as the identity function on non-primitives.\n *\n * @param wat The subject of the objectification\n * @returns A version of `wat` which can safely be used with `Object` class methods\n */\nexport function objectify(wat: unknown): typeof Object {\n  let objectified;\n  switch (true) {\n    case wat === undefined || wat === null:\n      objectified = new String(wat);\n      break;\n\n    // Though symbols and bigints do have wrapper classes (`Symbol` and `BigInt`, respectively), for whatever reason\n    // those classes don't have constructors which can be used with the `new` keyword. We therefore need to cast each as\n    // an object in order to wrap it.\n    case typeof wat === 'symbol' || typeof wat === 'bigint':\n      objectified = Object(wat);\n      break;\n\n    // this will catch the remaining primitives: `String`, `Number`, and `Boolean`\n    case isPrimitive(wat):\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      objectified = new (wat as any).constructor(wat);\n      break;\n\n    // by process of elimination, at this point we know that `wat` must already be an object\n    default:\n      objectified = wat;\n      break;\n  }\n  return objectified;\n}\n","import type { TransportMakeRequestResponse } from '@sentry/types';\n\n// Intentionally keeping the key broad, as we don't know for sure what rate limit headers get returned from backend\nexport type RateLimits = Record<string, number>;\n\nexport const DEFAULT_RETRY_AFTER = 60 * 1000; // 60 seconds\n\n/**\n * Extracts Retry-After value from the request header or returns default value\n * @param header string representation of 'Retry-After' header\n * @param now current unix timestamp\n *\n */\nexport function parseRetryAfterHeader(header: string, now: number = Date.now()): number {\n  const headerDelay = parseInt(`${header}`, 10);\n  if (!isNaN(headerDelay)) {\n    return headerDelay * 1000;\n  }\n\n  const headerDate = Date.parse(`${header}`);\n  if (!isNaN(headerDate)) {\n    return headerDate - now;\n  }\n\n  return DEFAULT_RETRY_AFTER;\n}\n\n/**\n * Gets the time that the given category is disabled until for rate limiting.\n * In case no category-specific limit is set but a general rate limit across all categories is active,\n * that time is returned.\n *\n * @return the time in ms that the category is disabled until or 0 if there's no active rate limit.\n */\nexport function disabledUntil(limits: RateLimits, category: string): number {\n  return limits[category] || limits.all || 0;\n}\n\n/**\n * Checks if a category is rate limited\n */\nexport function isRateLimited(limits: RateLimits, category: string, now: number = Date.now()): boolean {\n  return disabledUntil(limits, category) > now;\n}\n\n/**\n * Update ratelimits from incoming headers.\n *\n * @return the updated RateLimits object.\n */\nexport function updateRateLimits(\n  limits: RateLimits,\n  { statusCode, headers }: TransportMakeRequestResponse,\n  now: number = Date.now(),\n): RateLimits {\n  const updatedRateLimits: RateLimits = {\n    ...limits,\n  };\n\n  // \"The name is case-insensitive.\"\n  // https://developer.mozilla.org/en-US/docs/Web/API/Headers/get\n  const rateLimitHeader = headers && headers['x-sentry-rate-limits'];\n  const retryAfterHeader = headers && headers['retry-after'];\n\n  if (rateLimitHeader) {\n    /**\n     * rate limit headers are of the form\n     *     <header>,<header>,..\n     * where each <header> is of the form\n     *     <retry_after>: <categories>: <scope>: <reason_code>\n     * where\n     *     <retry_after> is a delay in seconds\n     *     <categories> is the event type(s) (error, transaction, etc) being rate limited and is of the form\n     *         <category>;<category>;...\n     *     <scope> is what's being limited (org, project, or key) - ignored by SDK\n     *     <reason_code> is an arbitrary string like \"org_quota\" - ignored by SDK\n     */\n    for (const limit of rateLimitHeader.trim().split(',')) {\n      const [retryAfter, categories] = limit.split(':', 2);\n      const headerDelay = parseInt(retryAfter, 10);\n      const delay = (!isNaN(headerDelay) ? headerDelay : 60) * 1000; // 60sec default\n      if (!categories) {\n        updatedRateLimits.all = now + delay;\n      } else {\n        for (const category of categories.split(';')) {\n          updatedRateLimits[category] = now + delay;\n        }\n      }\n    }\n  } else if (retryAfterHeader) {\n    updatedRateLimits.all = now + parseRetryAfterHeader(retryAfterHeader, now);\n  } else if (statusCode === 429) {\n    updatedRateLimits.all = now + 60 * 1000;\n  }\n\n  return updatedRateLimits;\n}\n","/* eslint-disable deprecation/deprecation */\nimport type { Severity, SeverityLevel } from '@sentry/types';\n\n// Note: Ideally the `SeverityLevel` type would be derived from `validSeverityLevels`, but that would mean either\n//\n// a) moving `validSeverityLevels` to `@sentry/types`,\n// b) moving the`SeverityLevel` type here, or\n// c) importing `validSeverityLevels` from here into `@sentry/types`.\n//\n// Option A would make `@sentry/types` a runtime dependency of `@sentry/utils` (not good), and options B and C would\n// create a circular dependency between `@sentry/types` and `@sentry/utils` (also not good). So a TODO accompanying the\n// type, reminding anyone who changes it to change this list also, will have to do.\n\nexport const validSeverityLevels = ['fatal', 'error', 'warning', 'log', 'info', 'debug'];\n\n/**\n * Converts a string-based level into a member of the deprecated {@link Severity} enum.\n *\n * @deprecated `severityFromString` is deprecated. Please use `severityLevelFromString` instead.\n *\n * @param level String representation of Severity\n * @returns Severity\n */\nexport function severityFromString(level: Severity | SeverityLevel | string): Severity {\n  return severityLevelFromString(level) as Severity;\n}\n\n/**\n * Converts a string-based level into a `SeverityLevel`, normalizing it along the way.\n *\n * @param level String representation of desired `SeverityLevel`.\n * @returns The `SeverityLevel` corresponding to the given string, or 'log' if the string isn't a valid level.\n */\nexport function severityLevelFromString(level: SeverityLevel | string): SeverityLevel {\n  return (level === 'warn' ? 'warning' : validSeverityLevels.includes(level) ? level : 'log') as SeverityLevel;\n}\n","import type { StackFrame, StackLineParser, StackParser } from '@sentry/types';\n\nimport type { GetModuleFn } from './node-stack-trace';\nimport { filenameIsInApp, node } from './node-stack-trace';\n\nexport { filenameIsInApp };\n\nconst STACKTRACE_FRAME_LIMIT = 50;\n// Used to sanitize webpack (error: *) wrapped stack errors\nconst WEBPACK_ERROR_REGEXP = /\\(error: (.*)\\)/;\nconst STRIP_FRAME_REGEXP = /captureMessage|captureException/;\n\n/**\n * Creates a stack parser with the supplied line parsers\n *\n * StackFrames are returned in the correct order for Sentry Exception\n * frames and with Sentry SDK internal frames removed from the top and bottom\n *\n */\nexport function createStackParser(...parsers: StackLineParser[]): StackParser {\n  const sortedParsers = parsers.sort((a, b) => a[0] - b[0]).map(p => p[1]);\n\n  return (stack: string, skipFirst: number = 0): StackFrame[] => {\n    const frames: StackFrame[] = [];\n    const lines = stack.split('\\n');\n\n    for (let i = skipFirst; i < lines.length; i++) {\n      const line = lines[i];\n      // Ignore lines over 1kb as they are unlikely to be stack frames.\n      // Many of the regular expressions use backtracking which results in run time that increases exponentially with\n      // input size. Huge strings can result in hangs/Denial of Service:\n      // https://github.com/getsentry/sentry-javascript/issues/2286\n      if (line.length > 1024) {\n        continue;\n      }\n\n      // https://github.com/getsentry/sentry-javascript/issues/5459\n      // Remove webpack (error: *) wrappers\n      const cleanedLine = WEBPACK_ERROR_REGEXP.test(line) ? line.replace(WEBPACK_ERROR_REGEXP, '$1') : line;\n\n      // https://github.com/getsentry/sentry-javascript/issues/7813\n      // Skip Error: lines\n      if (cleanedLine.match(/\\S*Error: /)) {\n        continue;\n      }\n\n      for (const parser of sortedParsers) {\n        const frame = parser(cleanedLine);\n\n        if (frame) {\n          frames.push(frame);\n          break;\n        }\n      }\n\n      if (frames.length >= STACKTRACE_FRAME_LIMIT) {\n        break;\n      }\n    }\n\n    return stripSentryFramesAndReverse(frames);\n  };\n}\n\n/**\n * Gets a stack parser implementation from Options.stackParser\n * @see Options\n *\n * If options contains an array of line parsers, it is converted into a parser\n */\nexport function stackParserFromStackParserOptions(stackParser: StackParser | StackLineParser[]): StackParser {\n  if (Array.isArray(stackParser)) {\n    return createStackParser(...stackParser);\n  }\n  return stackParser;\n}\n\n/**\n * Removes Sentry frames from the top and bottom of the stack if present and enforces a limit of max number of frames.\n * Assumes stack input is ordered from top to bottom and returns the reverse representation so call site of the\n * function that caused the crash is the last frame in the array.\n * @hidden\n */\nexport function stripSentryFramesAndReverse(stack: ReadonlyArray<StackFrame>): StackFrame[] {\n  if (!stack.length) {\n    return [];\n  }\n\n  const localStack = Array.from(stack);\n\n  // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)\n  if (/sentryWrapped/.test(localStack[localStack.length - 1].function || '')) {\n    localStack.pop();\n  }\n\n  // Reversing in the middle of the procedure allows us to just pop the values off the stack\n  localStack.reverse();\n\n  // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call)\n  if (STRIP_FRAME_REGEXP.test(localStack[localStack.length - 1].function || '')) {\n    localStack.pop();\n\n    // When using synthetic events, we will have a 2 levels deep stack, as `new Error('Sentry syntheticException')`\n    // is produced within the hub itself, making it:\n    //\n    //   Sentry.captureException()\n    //   getCurrentHub().captureException()\n    //\n    // instead of just the top `Sentry` call itself.\n    // This forces us to possibly strip an additional frame in the exact same was as above.\n    if (STRIP_FRAME_REGEXP.test(localStack[localStack.length - 1].function || '')) {\n      localStack.pop();\n    }\n  }\n\n  return localStack.slice(0, STACKTRACE_FRAME_LIMIT).map(frame => ({\n    ...frame,\n    filename: frame.filename || localStack[localStack.length - 1].filename,\n    function: frame.function || '?',\n  }));\n}\n\nconst defaultFunctionName = '<anonymous>';\n\n/**\n * Safely extract function name from itself\n */\nexport function getFunctionName(fn: unknown): string {\n  try {\n    if (!fn || typeof fn !== 'function') {\n      return defaultFunctionName;\n    }\n    return fn.name || defaultFunctionName;\n  } catch (e) {\n    // Just accessing custom props in some Selenium environments\n    // can cause a \"Permission denied\" exception (see raven-js#495).\n    return defaultFunctionName;\n  }\n}\n\n/**\n * Node.js stack line parser\n *\n * This is in @sentry/utils so it can be used from the Electron SDK in the browser for when `nodeIntegration == true`.\n * This allows it to be used without referencing or importing any node specific code which causes bundlers to complain\n */\nexport function nodeStackLineParser(getModule?: GetModuleFn): StackLineParser {\n  return [90, node(getModule)];\n}\n","import { isRegExp, isString, isVueViewModel } from './is';\n\nexport { escapeStringForRegex } from './vendor/escapeStringForRegex';\n\n/**\n * Truncates given string to the maximum characters count\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string (0 = unlimited)\n * @returns string Encoded\n */\nexport function truncate(str: string, max: number = 0): string {\n  if (typeof str !== 'string' || max === 0) {\n    return str;\n  }\n  return str.length <= max ? str : `${str.slice(0, max)}...`;\n}\n\n/**\n * This is basically just `trim_line` from\n * https://github.com/getsentry/sentry/blob/master/src/sentry/lang/javascript/processor.py#L67\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\nexport function snipLine(line: string, colno: number): string {\n  let newLine = line;\n  const lineLength = newLine.length;\n  if (lineLength <= 150) {\n    return newLine;\n  }\n  if (colno > lineLength) {\n    // eslint-disable-next-line no-param-reassign\n    colno = lineLength;\n  }\n\n  let start = Math.max(colno - 60, 0);\n  if (start < 5) {\n    start = 0;\n  }\n\n  let end = Math.min(start + 140, lineLength);\n  if (end > lineLength - 5) {\n    end = lineLength;\n  }\n  if (end === lineLength) {\n    start = Math.max(end - 140, 0);\n  }\n\n  newLine = newLine.slice(start, end);\n  if (start > 0) {\n    newLine = `'{snip} ${newLine}`;\n  }\n  if (end < lineLength) {\n    newLine += ' {snip}';\n  }\n\n  return newLine;\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns Joined values\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function safeJoin(input: any[], delimiter?: string): string {\n  if (!Array.isArray(input)) {\n    return '';\n  }\n\n  const output = [];\n  // eslint-disable-next-line @typescript-eslint/prefer-for-of\n  for (let i = 0; i < input.length; i++) {\n    const value = input[i];\n    try {\n      // This is a hack to fix a Vue3-specific bug that causes an infinite loop of\n      // console warnings. This happens when a Vue template is rendered with\n      // an undeclared variable, which we try to stringify, ultimately causing\n      // Vue to issue another warning which repeats indefinitely.\n      // see: https://github.com/getsentry/sentry-javascript/pull/8981\n      if (isVueViewModel(value)) {\n        output.push('[VueViewModel]');\n      } else {\n        output.push(String(value));\n      }\n    } catch (e) {\n      output.push('[value cannot be serialized]');\n    }\n  }\n\n  return output.join(delimiter);\n}\n\n/**\n * Checks if the given value matches a regex or string\n *\n * @param value The string to test\n * @param pattern Either a regex or a string against which `value` will be matched\n * @param requireExactStringMatch If true, `value` must match `pattern` exactly. If false, `value` will match\n * `pattern` if it contains `pattern`. Only applies to string-type patterns.\n */\nexport function isMatchingPattern(\n  value: string,\n  pattern: RegExp | string,\n  requireExactStringMatch: boolean = false,\n): boolean {\n  if (!isString(value)) {\n    return false;\n  }\n\n  if (isRegExp(pattern)) {\n    return pattern.test(value);\n  }\n  if (isString(pattern)) {\n    return requireExactStringMatch ? value === pattern : value.includes(pattern);\n  }\n\n  return false;\n}\n\n/**\n * Test the given string against an array of strings and regexes. By default, string matching is done on a\n * substring-inclusion basis rather than a strict equality basis\n *\n * @param testString The string to test\n * @param patterns The patterns against which to test the string\n * @param requireExactStringMatch If true, `testString` must match one of the given string patterns exactly in order to\n * count. If false, `testString` will match a string pattern if it contains that pattern.\n * @returns\n */\nexport function stringMatchesSomePattern(\n  testString: string,\n  patterns: Array<string | RegExp> = [],\n  requireExactStringMatch: boolean = false,\n): boolean {\n  return patterns.some(pattern => isMatchingPattern(testString, pattern, requireExactStringMatch));\n}\n","import { logger } from './logger';\nimport { getGlobalObject } from './worldwide';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject<Window>();\n\nexport { supportsHistory } from './vendor/supportsHistory';\n\n/**\n * Tells whether current environment supports ErrorEvent objects\n * {@link supportsErrorEvent}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsErrorEvent(): boolean {\n  try {\n    new ErrorEvent('');\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * Tells whether current environment supports DOMError objects\n * {@link supportsDOMError}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsDOMError(): boolean {\n  try {\n    // Chrome: VM89:1 Uncaught TypeError: Failed to construct 'DOMError':\n    // 1 argument required, but only 0 present.\n    // @ts-expect-error It really needs 1 argument, not 0.\n    new DOMError('');\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * Tells whether current environment supports DOMException objects\n * {@link supportsDOMException}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsDOMException(): boolean {\n  try {\n    new DOMException('');\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * Tells whether current environment supports Fetch API\n * {@link supportsFetch}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsFetch(): boolean {\n  if (!('fetch' in WINDOW)) {\n    return false;\n  }\n\n  try {\n    new Headers();\n    new Request('http://www.example.com');\n    new Response();\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n/**\n * isNativeFetch checks if the given function is a native implementation of fetch()\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isNativeFetch(func: Function): boolean {\n  return func && /^function fetch\\(\\)\\s+\\{\\s+\\[native code\\]\\s+\\}$/.test(func.toString());\n}\n\n/**\n * Tells whether current environment supports Fetch API natively\n * {@link supportsNativeFetch}.\n *\n * @returns true if `window.fetch` is natively implemented, false otherwise\n */\nexport function supportsNativeFetch(): boolean {\n  if (!supportsFetch()) {\n    return false;\n  }\n\n  // Fast path to avoid DOM I/O\n  // eslint-disable-next-line @typescript-eslint/unbound-method\n  if (isNativeFetch(WINDOW.fetch)) {\n    return true;\n  }\n\n  // window.fetch is implemented, but is polyfilled or already wrapped (e.g: by a chrome extension)\n  // so create a \"pure\" iframe to see if that has native fetch\n  let result = false;\n  const doc = WINDOW.document;\n  // eslint-disable-next-line deprecation/deprecation\n  if (doc && typeof (doc.createElement as unknown) === 'function') {\n    try {\n      const sandbox = doc.createElement('iframe');\n      sandbox.hidden = true;\n      doc.head.appendChild(sandbox);\n      if (sandbox.contentWindow && sandbox.contentWindow.fetch) {\n        // eslint-disable-next-line @typescript-eslint/unbound-method\n        result = isNativeFetch(sandbox.contentWindow.fetch);\n      }\n      doc.head.removeChild(sandbox);\n    } catch (err) {\n      __DEBUG_BUILD__ &&\n        logger.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', err);\n    }\n  }\n\n  return result;\n}\n\n/**\n * Tells whether current environment supports ReportingObserver API\n * {@link supportsReportingObserver}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsReportingObserver(): boolean {\n  return 'ReportingObserver' in WINDOW;\n}\n\n/**\n * Tells whether current environment supports Referrer Policy API\n * {@link supportsReferrerPolicy}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsReferrerPolicy(): boolean {\n  // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default'\n  // (see https://caniuse.com/#feat=referrer-policy),\n  // it doesn't. And it throws an exception instead of ignoring this parameter...\n  // REF: https://github.com/getsentry/raven-js/issues/1233\n\n  if (!supportsFetch()) {\n    return false;\n  }\n\n  try {\n    new Request('_', {\n      referrerPolicy: 'origin' as ReferrerPolicy,\n    });\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n","/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/typedef */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isThenable } from './is';\n\n/** SyncPromise internal states */\nconst enum States {\n  /** Pending */\n  PENDING = 0,\n  /** Resolved / OK */\n  RESOLVED = 1,\n  /** Rejected / Error */\n  REJECTED = 2,\n}\n\n// Overloads so we can call resolvedSyncPromise without arguments and generic argument\nexport function resolvedSyncPromise(): PromiseLike<void>;\nexport function resolvedSyncPromise<T>(value: T | PromiseLike<T>): PromiseLike<T>;\n\n/**\n * Creates a resolved sync promise.\n *\n * @param value the value to resolve the promise with\n * @returns the resolved sync promise\n */\nexport function resolvedSyncPromise<T>(value?: T | PromiseLike<T>): PromiseLike<T> {\n  return new SyncPromise(resolve => {\n    resolve(value);\n  });\n}\n\n/**\n * Creates a rejected sync promise.\n *\n * @param value the value to reject the promise with\n * @returns the rejected sync promise\n */\nexport function rejectedSyncPromise<T = never>(reason?: any): PromiseLike<T> {\n  return new SyncPromise((_, reject) => {\n    reject(reason);\n  });\n}\n\n/**\n * Thenable class that behaves like a Promise and follows it's interface\n * but is not async internally\n */\nclass SyncPromise<T> implements PromiseLike<T> {\n  private _state: States;\n  private _handlers: Array<[boolean, (value: T) => void, (reason: any) => any]>;\n  private _value: any;\n\n  public constructor(\n    executor: (resolve: (value?: T | PromiseLike<T> | null) => void, reject: (reason?: any) => void) => void,\n  ) {\n    this._state = States.PENDING;\n    this._handlers = [];\n\n    try {\n      executor(this._resolve, this._reject);\n    } catch (e) {\n      this._reject(e);\n    }\n  }\n\n  /** JSDoc */\n  public then<TResult1 = T, TResult2 = never>(\n    onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n    onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null,\n  ): PromiseLike<TResult1 | TResult2> {\n    return new SyncPromise((resolve, reject) => {\n      this._handlers.push([\n        false,\n        result => {\n          if (!onfulfilled) {\n            // TODO: ¯\\_(ツ)_/¯\n            // TODO: FIXME\n            resolve(result as any);\n          } else {\n            try {\n              resolve(onfulfilled(result));\n            } catch (e) {\n              reject(e);\n            }\n          }\n        },\n        reason => {\n          if (!onrejected) {\n            reject(reason);\n          } else {\n            try {\n              resolve(onrejected(reason));\n            } catch (e) {\n              reject(e);\n            }\n          }\n        },\n      ]);\n      this._executeHandlers();\n    });\n  }\n\n  /** JSDoc */\n  public catch<TResult = never>(\n    onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null,\n  ): PromiseLike<T | TResult> {\n    return this.then(val => val, onrejected);\n  }\n\n  /** JSDoc */\n  public finally<TResult>(onfinally?: (() => void) | null): PromiseLike<TResult> {\n    return new SyncPromise<TResult>((resolve, reject) => {\n      let val: TResult | any;\n      let isRejected: boolean;\n\n      return this.then(\n        value => {\n          isRejected = false;\n          val = value;\n          if (onfinally) {\n            onfinally();\n          }\n        },\n        reason => {\n          isRejected = true;\n          val = reason;\n          if (onfinally) {\n            onfinally();\n          }\n        },\n      ).then(() => {\n        if (isRejected) {\n          reject(val);\n          return;\n        }\n\n        resolve(val as unknown as any);\n      });\n    });\n  }\n\n  /** JSDoc */\n  private readonly _resolve = (value?: T | PromiseLike<T> | null) => {\n    this._setResult(States.RESOLVED, value);\n  };\n\n  /** JSDoc */\n  private readonly _reject = (reason?: any) => {\n    this._setResult(States.REJECTED, reason);\n  };\n\n  /** JSDoc */\n  private readonly _setResult = (state: States, value?: T | PromiseLike<T> | any) => {\n    if (this._state !== States.PENDING) {\n      return;\n    }\n\n    if (isThenable(value)) {\n      void (value as PromiseLike<T>).then(this._resolve, this._reject);\n      return;\n    }\n\n    this._state = state;\n    this._value = value;\n\n    this._executeHandlers();\n  };\n\n  /** JSDoc */\n  private readonly _executeHandlers = () => {\n    if (this._state === States.PENDING) {\n      return;\n    }\n\n    const cachedHandlers = this._handlers.slice();\n    this._handlers = [];\n\n    cachedHandlers.forEach(handler => {\n      if (handler[0]) {\n        return;\n      }\n\n      if (this._state === States.RESOLVED) {\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        handler[1](this._value as unknown as any);\n      }\n\n      if (this._state === States.REJECTED) {\n        handler[2](this._value);\n      }\n\n      handler[0] = true;\n    });\n  };\n}\n\nexport { SyncPromise };\n","import { dynamicRequire, isNodeEnv } from './node';\nimport { getGlobalObject } from './worldwide';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject<Window>();\n\n/**\n * An object that can return the current timestamp in seconds since the UNIX epoch.\n */\ninterface TimestampSource {\n  nowSeconds(): number;\n}\n\n/**\n * A TimestampSource implementation for environments that do not support the Performance Web API natively.\n *\n * Note that this TimestampSource does not use a monotonic clock. A call to `nowSeconds` may return a timestamp earlier\n * than a previously returned value. We do not try to emulate a monotonic behavior in order to facilitate debugging. It\n * is more obvious to explain \"why does my span have negative duration\" than \"why my spans have zero duration\".\n */\nconst dateTimestampSource: TimestampSource = {\n  nowSeconds: () => Date.now() / 1000,\n};\n\n/**\n * A partial definition of the [Performance Web API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Performance}\n * for accessing a high-resolution monotonic clock.\n */\ninterface Performance {\n  /**\n   * The millisecond timestamp at which measurement began, measured in Unix time.\n   */\n  timeOrigin: number;\n  /**\n   * Returns the current millisecond timestamp, where 0 represents the start of measurement.\n   */\n  now(): number;\n}\n\n/**\n * Returns a wrapper around the native Performance API browser implementation, or undefined for browsers that do not\n * support the API.\n *\n * Wrapping the native API works around differences in behavior from different browsers.\n */\nfunction getBrowserPerformance(): Performance | undefined {\n  const { performance } = WINDOW;\n  if (!performance || !performance.now) {\n    return undefined;\n  }\n\n  // Replace performance.timeOrigin with our own timeOrigin based on Date.now().\n  //\n  // This is a partial workaround for browsers reporting performance.timeOrigin such that performance.timeOrigin +\n  // performance.now() gives a date arbitrarily in the past.\n  //\n  // Additionally, computing timeOrigin in this way fills the gap for browsers where performance.timeOrigin is\n  // undefined.\n  //\n  // The assumption that performance.timeOrigin + performance.now() ~= Date.now() is flawed, but we depend on it to\n  // interact with data coming out of performance entries.\n  //\n  // Note that despite recommendations against it in the spec, browsers implement the Performance API with a clock that\n  // might stop when the computer is asleep (and perhaps under other circumstances). Such behavior causes\n  // performance.timeOrigin + performance.now() to have an arbitrary skew over Date.now(). In laptop computers, we have\n  // observed skews that can be as long as days, weeks or months.\n  //\n  // See https://github.com/getsentry/sentry-javascript/issues/2590.\n  //\n  // BUG: despite our best intentions, this workaround has its limitations. It mostly addresses timings of pageload\n  // transactions, but ignores the skew built up over time that can aversely affect timestamps of navigation\n  // transactions of long-lived web pages.\n  const timeOrigin = Date.now() - performance.now();\n\n  return {\n    now: () => performance.now(),\n    timeOrigin,\n  };\n}\n\n/**\n * Returns the native Performance API implementation from Node.js. Returns undefined in old Node.js versions that don't\n * implement the API.\n */\nfunction getNodePerformance(): Performance | undefined {\n  try {\n    const perfHooks = dynamicRequire(module, 'perf_hooks') as { performance: Performance };\n    return perfHooks.performance;\n  } catch (_) {\n    return undefined;\n  }\n}\n\n/**\n * The Performance API implementation for the current platform, if available.\n */\nconst platformPerformance: Performance | undefined = isNodeEnv() ? getNodePerformance() : getBrowserPerformance();\n\nconst timestampSource: TimestampSource =\n  platformPerformance === undefined\n    ? dateTimestampSource\n    : {\n        nowSeconds: () => (platformPerformance.timeOrigin + platformPerformance.now()) / 1000,\n      };\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using the Date API.\n */\nexport const dateTimestampInSeconds: () => number = dateTimestampSource.nowSeconds.bind(dateTimestampSource);\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using either the Performance or Date APIs, depending on the\n * availability of the Performance API.\n *\n * See `usingPerformanceAPI` to test whether the Performance API is used.\n *\n * BUG: Note that because of how browsers implement the Performance API, the clock might stop when the computer is\n * asleep. This creates a skew between `dateTimestampInSeconds` and `timestampInSeconds`. The\n * skew can grow to arbitrary amounts like days, weeks or months.\n * See https://github.com/getsentry/sentry-javascript/issues/2590.\n */\nexport const timestampInSeconds: () => number = timestampSource.nowSeconds.bind(timestampSource);\n\n/**\n * Re-exported with an old name for backwards-compatibility.\n * TODO (v8): Remove this\n *\n * @deprecated Use `timestampInSeconds` instead.\n */\nexport const timestampWithMs = timestampInSeconds;\n\n/**\n * A boolean that is true when timestampInSeconds uses the Performance API to produce monotonic timestamps.\n */\nexport const usingPerformanceAPI = platformPerformance !== undefined;\n\n/**\n * Internal helper to store what is the source of browserPerformanceTimeOrigin below. For debugging only.\n */\nexport let _browserPerformanceTimeOriginMode: string;\n\n/**\n * The number of milliseconds since the UNIX epoch. This value is only usable in a browser, and only when the\n * performance API is available.\n */\nexport const browserPerformanceTimeOrigin = ((): number | undefined => {\n  // Unfortunately browsers may report an inaccurate time origin data, through either performance.timeOrigin or\n  // performance.timing.navigationStart, which results in poor results in performance data. We only treat time origin\n  // data as reliable if they are within a reasonable threshold of the current time.\n\n  const { performance } = WINDOW;\n  if (!performance || !performance.now) {\n    _browserPerformanceTimeOriginMode = 'none';\n    return undefined;\n  }\n\n  const threshold = 3600 * 1000;\n  const performanceNow = performance.now();\n  const dateNow = Date.now();\n\n  // if timeOrigin isn't available set delta to threshold so it isn't used\n  const timeOriginDelta = performance.timeOrigin\n    ? Math.abs(performance.timeOrigin + performanceNow - dateNow)\n    : threshold;\n  const timeOriginIsReliable = timeOriginDelta < threshold;\n\n  // While performance.timing.navigationStart is deprecated in favor of performance.timeOrigin, performance.timeOrigin\n  // is not as widely supported. Namely, performance.timeOrigin is undefined in Safari as of writing.\n  // Also as of writing, performance.timing is not available in Web Workers in mainstream browsers, so it is not always\n  // a valid fallback. In the absence of an initial time provided by the browser, fallback to the current time from the\n  // Date API.\n  // eslint-disable-next-line deprecation/deprecation\n  const navigationStart = performance.timing && performance.timing.navigationStart;\n  const hasNavigationStart = typeof navigationStart === 'number';\n  // if navigationStart isn't available set delta to threshold so it isn't used\n  const navigationStartDelta = hasNavigationStart ? Math.abs(navigationStart + performanceNow - dateNow) : threshold;\n  const navigationStartIsReliable = navigationStartDelta < threshold;\n\n  if (timeOriginIsReliable || navigationStartIsReliable) {\n    // Use the more reliable time origin\n    if (timeOriginDelta <= navigationStartDelta) {\n      _browserPerformanceTimeOriginMode = 'timeOrigin';\n      return performance.timeOrigin;\n    } else {\n      _browserPerformanceTimeOriginMode = 'navigationStart';\n      return navigationStart;\n    }\n  }\n\n  // Either both timeOrigin and navigationStart are skewed or neither is available, fallback to Date.\n  _browserPerformanceTimeOriginMode = 'dateNow';\n  return dateNow;\n})();\n","type PartialURL = {\n  host?: string;\n  path?: string;\n  protocol?: string;\n  relative?: string;\n  search?: string;\n  hash?: string;\n};\n\n/**\n * Parses string form of URL into an object\n * // borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n * // intentionally using regex and not <a/> href parsing trick because React Native and other\n * // environments where DOM might not be available\n * @returns parsed URL object\n */\nexport function parseUrl(url: string): PartialURL {\n  if (!url) {\n    return {};\n  }\n\n  const match = url.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n  if (!match) {\n    return {};\n  }\n\n  // coerce to undefined values to empty string so we don't get 'undefined'\n  const query = match[6] || '';\n  const fragment = match[8] || '';\n  return {\n    host: match[4],\n    path: match[5],\n    protocol: match[2],\n    search: query,\n    hash: fragment,\n    relative: match[5] + query + fragment, // everything minus origin\n  };\n}\n\n/**\n * Strip the query string and fragment off of a given URL or path (if present)\n *\n * @param urlPath Full URL or path, including possible query string and/or fragment\n * @returns URL or path without query string or fragment\n */\nexport function stripUrlQueryAndFragment(urlPath: string): string {\n  // eslint-disable-next-line no-useless-escape\n  return urlPath.split(/[\\?#]/, 1)[0];\n}\n\n/**\n * Returns number of URL segments of a passed string URL.\n */\nexport function getNumberOfUrlSegments(url: string): number {\n  // split at '/' or at '\\/' to split regex urls correctly\n  return url.split(/\\\\?\\//).filter(s => s.length > 0 && s !== ',').length;\n}\n\n/**\n * Takes a URL object and returns a sanitized string which is safe to use as span description\n * see: https://develop.sentry.dev/sdk/data-handling/#structuring-data\n */\nexport function getSanitizedUrlString(url: PartialURL): string {\n  const { protocol, host, path } = url;\n\n  const filteredHost =\n    (host &&\n      host\n        // Always filter out authority\n        .replace(/^.*@/, '[filtered]:[filtered]@')\n        // Don't show standard :80 (http) and :443 (https) ports to reduce the noise\n        .replace(':80', '')\n        .replace(':443', '')) ||\n    '';\n\n  return `${protocol ? `${protocol}://` : ''}${filteredHost}${path}`;\n}\n","/**\n * NOTE: In order to avoid circular dependencies, if you add a function to this module and it needs to print something,\n * you must either a) use `console.log` rather than the logger, or b) put your function elsewhere.\n *\n * Note: This file was originally called `global.ts`, but was changed to unblock users which might be doing\n * string replaces with bundlers like Vite for `global` (would break imports that rely on importing from utils/src/global).\n *\n * Why worldwide?\n *\n * Why not?\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { Integration } from '@sentry/types';\n\nimport type { SdkSource } from './env';\n\n/** Internal global with common properties and Sentry extensions  */\nexport interface InternalGlobal {\n  navigator?: { userAgent?: string };\n  console: Console;\n  Sentry?: {\n    Integrations?: Integration[];\n  };\n  onerror?: {\n    (msg: unknown, url: unknown, line: unknown, column: unknown, error: unknown): boolean;\n    __SENTRY_INSTRUMENTED__?: true;\n    __SENTRY_LOADER__?: true;\n  };\n  onunhandledrejection?: {\n    (event: unknown): boolean;\n    __SENTRY_INSTRUMENTED__?: true;\n    __SENTRY_LOADER__?: true;\n  };\n  SENTRY_ENVIRONMENT?: string;\n  SENTRY_DSN?: string;\n  SENTRY_RELEASE?: {\n    id?: string;\n  };\n  SENTRY_SDK_SOURCE?: SdkSource;\n  /**\n   * Debug IDs are indirectly injected by Sentry CLI or bundler plugins to directly reference a particular source map\n   * for resolving of a source file. The injected code will place an entry into the record for each loaded bundle/JS\n   * file.\n   */\n  _sentryDebugIds?: Record<string, string>;\n  __SENTRY__: {\n    globalEventProcessors: any;\n    hub: any;\n    logger: any;\n    extensions?: {\n      /** Extension methods for the hub, which are bound to the current Hub instance */\n      // eslint-disable-next-line @typescript-eslint/ban-types\n      [key: string]: Function;\n    };\n  };\n  /**\n   * Raw module metadata that is injected by bundler plugins.\n   *\n   * Keys are `error.stack` strings, values are the metadata.\n   */\n  _sentryModuleMetadata?: Record<string, any>;\n}\n\n// The code below for 'isGlobalObj' and 'GLOBAL_OBJ' was copied from core-js before modification\n// https://github.com/zloirock/core-js/blob/1b944df55282cdc99c90db5f49eb0b6eda2cc0a3/packages/core-js/internals/global.js\n// core-js has the following licence:\n//\n// Copyright (c) 2014-2022 Denis Pushkarev\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n/** Returns 'obj' if it's the global object, otherwise returns undefined */\nfunction isGlobalObj(obj: { Math?: Math }): any | undefined {\n  return obj && obj.Math == Math ? obj : undefined;\n}\n\n/** Get's the global object for the current JavaScript runtime */\nexport const GLOBAL_OBJ: InternalGlobal =\n  (typeof globalThis == 'object' && isGlobalObj(globalThis)) ||\n  // eslint-disable-next-line no-restricted-globals\n  (typeof window == 'object' && isGlobalObj(window)) ||\n  (typeof self == 'object' && isGlobalObj(self)) ||\n  (typeof global == 'object' && isGlobalObj(global)) ||\n  (function (this: any) {\n    return this;\n  })() ||\n  {};\n\n/**\n * @deprecated Use GLOBAL_OBJ instead or WINDOW from @sentry/browser. This will be removed in v8\n */\nexport function getGlobalObject<T>(): T & InternalGlobal {\n  return GLOBAL_OBJ as T & InternalGlobal;\n}\n\n/**\n * Returns a global singleton contained in the global `__SENTRY__` object.\n *\n * If the singleton doesn't already exist in `__SENTRY__`, it will be created using the given factory\n * function and added to the `__SENTRY__` object.\n *\n * @param name name of the global singleton on __SENTRY__\n * @param creator creator Factory function to create the singleton if it doesn't already exist on `__SENTRY__`\n * @param obj (Optional) The global object on which to look for `__SENTRY__`, if not `GLOBAL_OBJ`'s return value\n * @returns the singleton\n */\nexport function getGlobalSingleton<T>(name: keyof InternalGlobal['__SENTRY__'], creator: () => T, obj?: unknown): T {\n  const gbl = (obj || GLOBAL_OBJ) as InternalGlobal;\n  const __SENTRY__ = (gbl.__SENTRY__ = gbl.__SENTRY__ || {});\n  const singleton = __SENTRY__[name] || (__SENTRY__[name] = creator());\n  return singleton;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\nfunction inferEnvironment({\n    version,\n    hostname,\n    environment = process.env.NODE_ENV, // Sentry's default in node projects\n}) {\n    if (\n        version &&\n        (version.includes('.pr') ||\n            version.includes('main') ||\n            version.includes('dev'))\n    ) {\n        return 'preview'; // All builds that include \".pr\" or \"main\" or \"dev\" in version map to the preview envionment e.g. 4.2.15-6931-42.pr, 28.1.0-main-1 and 2.30.0-dev-3\n    }\n\n    if (\n        (hostname && hostname.includes('aw-ube')) ||\n        (hostname && hostname.includes('prenv'))\n    ) {\n        return 'preview'; // Hostname includes \"aw-ube\" or \"prenv\", assume preview environment e.g. https://aw-ube.ccpd.adobe.com, *.prenv.projectx.corp.adobe.com\n    }\n\n    if (hostname && hostname.includes('stage')) {\n        return 'staging'; // Hostname includes \"stage\", assume staging environment e.g. *.stage.adobe.com, stage.*.corp.adobe.com\n    }\n\n    if (\n        (hostname && hostname.includes('localhost')) ||\n        (hostname && hostname.includes('dev.adobe.com'))\n    ) {\n        return 'development'; // Hostname includes \"localhost\" or \"dev.aodbe.com\", assume localhost environment e.g. localhost, localhost.adobe.com, cclibrariespanel-cdn.dev.adobe.com\n    }\n\n    return environment;\n}\n\nmodule.exports = { inferEnvironment };\n","/* eslint-env browser */\n/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nconst reactEvents = [\n    'onAbort',\n    'onAnimationCancel',\n    'onAnimationEnd',\n    'onAnimationIteration',\n    'onAuxClick',\n    'onBlur',\n    'onChange',\n    'onClick',\n    'onClose',\n    'onContextMenu',\n    'onDoubleClick',\n    'onError',\n    'onFocus',\n    'onGotPointerCapture',\n    'onInput',\n    'onKeyDown',\n    'onKeyPress',\n    'onKeyUp',\n    'onLoad',\n    'onLoadEnd',\n    'onLoadStart',\n    'onLostPointerCapture',\n    'onMouseDown',\n    'onMouseMove',\n    'onMouseOut',\n    'onMouseOver',\n    'onMouseUp',\n    'onPointerCancel',\n    'onPointerDown',\n    'onPointerEnter',\n    'onPointerLeave',\n    'onPointerMove',\n    'onPointerOut',\n    'onPointerOver',\n    'onPointerUp',\n    'onReset',\n    'onResize',\n    'onScroll',\n    'onSelect',\n    'onSelectionChange',\n    'onSelectStart',\n    'onSubmit',\n    'onTouchCancel',\n    'onTouchMove',\n    'onTouchStart',\n    'onTransitionCancel',\n    'onTransitionEnd',\n    'onDrag',\n    'onDragEnd',\n    'onDragEnter',\n    'onDragExit',\n    'onDragLeave',\n    'onDragOver',\n    'onDragStart',\n    'onDrop',\n    'onFocusOut',\n];\n\nconst divergentNativeEvents = {\n    onDoubleClick: 'dblclick',\n};\n\nconst mimickedReactEvents = {\n    onInput: 'onChange',\n    onFocusOut: 'onBlur',\n    onSelectionChange: 'onSelect',\n};\n\nconst captureEvents = ['onScroll'];\n\nfunction retargetEvents(shadowRoot) {\n    reactEvents.forEach(function (reactEventName) {\n        const nativeEventName = getNativeEventName(reactEventName);\n\n        shadowRoot.addEventListener(\n            nativeEventName,\n            function (event) {\n                const path = getComposedPath(event);\n\n                for (let i = 0; i < path.length; i++) {\n                    const el = path[i];\n                    const reactComponent = findReactComponent(el);\n                    const props = findReactProps(reactComponent);\n\n                    if (reactComponent && props) {\n                        dispatchEvent(event, reactEventName, props);\n                    }\n\n                    if (\n                        reactComponent &&\n                        props &&\n                        mimickedReactEvents[reactEventName]\n                    ) {\n                        dispatchEvent(\n                            event,\n                            mimickedReactEvents[reactEventName],\n                            props\n                        );\n                    }\n\n                    if (event.cancelBubble) {\n                        break;\n                    }\n\n                    if (el === shadowRoot) {\n                        break;\n                    }\n                }\n            },\n            captureEvents.indexOf(reactEventName) !== -1\n        );\n    });\n}\n\nfunction findReactComponent(item) {\n    for (const key in item) {\n        if (\n            Object.prototype.hasOwnProperty.call(item, key) &&\n            key.indexOf('_reactInternal') !== -1\n        ) {\n            return item[key];\n        }\n    }\n}\n\nfunction findReactProps(component) {\n    if (!component) {\n        return undefined;\n    }\n    if (component.memoizedProps) {\n        return component.memoizedProps;\n    } // React 16 Fiber\n}\n\nfunction dispatchEvent(event, eventType, componentProps) {\n    if (componentProps[eventType]) {\n        // Synthetic events get stripped by this layer, so synthetic properties don't work.\n        // TODO: Better solution\n\n        // This isn't actually necessarily false, but let's just pretend.\n        event.isPropagationStopped = () => false;\n\n        componentProps[eventType](event);\n    }\n}\n\nfunction getNativeEventName(reactEventName) {\n    if (divergentNativeEvents[reactEventName]) {\n        return divergentNativeEvents[reactEventName];\n    }\n    return reactEventName.replace(/^on/, '').toLowerCase();\n}\n\nfunction getComposedPath(event) {\n    if (retargetEvents.ignoreEventPaths) {\n        return;\n    }\n\n    // React events don't include the composedPath reliably, so look at the native event if present\n    event = event.nativeEvent || event;\n\n    if (event.path || event.composedPath) {\n        return event.path || (event.composedPath && event.composedPath());\n    }\n\n    // Fallback if don't have a path on the event:\n    const path = [];\n    let el = event.target;\n    while (el) {\n        path.push(el);\n        if (el.tagName === 'HTML') {\n            path.push(document);\n            path.push(window);\n            return path;\n        }\n        el = el.parentElement;\n    }\n}\n\nmodule.exports = retargetEvents;\n","/* eslint-env node */\n/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\nconst VERSION = require('./version');\n\nconst fallbackTagNameSuffix =\n    '-' + VERSION.replace(/[\\^~]/g, '').replace(/\\./g, '-');\n\nfunction fallbackTagName(tagName) {\n    return `${tagName}${fallbackTagNameSuffix}`;\n}\n\nmodule.exports = { fallbackTagName, fallbackTagNameSuffix };\n","// Generated by genversion.\nmodule.exports = '1.0.111';\n","/*************************************************************************\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n **************************************************************************/\nexport const BUILD_VERSION = '@exc/metrics:1.7.4+sha.8829fb0';\n","/*************************************************************************\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n **************************************************************************/\n\n/**\n * Log levels, for RecordType == Log.\n */\nexport enum Level {\n  ERROR = 'ERROR',\n  WARN = 'WARN',\n  INFO = 'INFO',\n  DEBUG = 'DEBUG',\n  TRACE = 'TRACE',\n}\n","/*************************************************************************\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n **************************************************************************/\nimport type AdobeMetrics from './AdobeMetrics';\nimport type {EventData, PageData, UserData} from './DigitalData';\nimport {Level} from './Level';\nimport type MetricsApi from './MetricsApi';\nimport type Record from './Record';\nimport {RecordType} from './RecordType';\nimport {BUILD_VERSION as sdkVersion} from './BuildVersion';\nimport type Timer from './Timer';\n\n/**\n * Metrics class is used for sending instrumentation data of all types to remote\n * storage. Use of this Metrics class must be preceeded by proper construction\n * and initialization of a metrics runtime class in order to transmit metrics to\n * remote storage.\n *\n * @property {string} name The name for this Metrics instance. It is recommended\n * to use a logger-style name in the form of path.to.my.package.MyClassName to\n * aid searching and filtering of stored metrics, and to be consistent with\n * future features for filtering emitted metrics based on package, class and\n * log level.\n * @see MetricsBrowserRuntime\n * @see MetricsNodeJsRuntime\n */\nexport default class Metrics implements MetricsApi {\n  public static version = sdkVersion;\n  public context: any;\n  public name: string;\n\n  /**\n   * Queue a record for transmission to remote storage.\n   *\n   * @param {Record} record - The object to be stored.\n   */\n  public readonly store: (record: Record) => void;\n\n  private readonly _log: (\n    recordType: RecordType,\n    level: Level,\n    name: string,\n    message: string | undefined,\n    event: string | string[] | undefined,\n    args: any[],\n  ) => Promise<number>;\n\n  /**\n   * Construct a Metrics object. The name of the Metrics object should give\n   * context of what is being measured, typically the name of the class that\n   * owns the Metrics object. It may be appropriate in some circumstances to\n   * scope name more narrowly, for instance to the function name. The remote\n   * storage is multitenant, so it is never appropriate to use a generic name\n   * such as \"MyApp\".\n   *\n   * Optional arguments may be supplied. These properties are considered state\n   * which will be attached to the emitted metrics. A common use case is for\n   * labels, categories or tags.\n   *\n   * @param {string} name The name gives context of what is being measured.\n   * @param {AdobeMetrics} adobeMetrics Adobe Metrics Object.\n   * @param {any} args Optional arguments that will be written into the\n   * metricsState context bag on the recorded metrics.\n   */\n  public constructor(name: string, adobeMetrics: AdobeMetrics, ...args: any);\n  public constructor(name: string, ...args: any);\n  public constructor(name: string, ...args: any) {\n    this.name = name;\n    let adobeMetrics: AdobeMetrics;\n    if (args.length && typeof args[0] === 'object' && typeof args[0].now === 'function') {\n      adobeMetrics = args[0];\n      args.shift();\n    } else {\n      adobeMetrics = (global as any).adobeMetrics;\n    }\n\n    this._log = (\n      recordType: RecordType,\n      level: Level,\n      name: string,\n      message: string | undefined,\n      event: string | string[] | undefined,\n      args: any[],\n    ): Promise<number> =>\n      adobeMetrics.write({\n        data: args.length > 0 ? [...args] : undefined,\n        event,\n        level,\n        message,\n        metricsState: {sdkVersion},\n        name,\n        recordType,\n      } as Record);\n\n    this.store = (record: Record): void => {\n      record.metricsState = {sdkVersion};\n      record.name = this.name;\n      adobeMetrics.write(record);\n    };\n\n    switch (args.length) {\n      case 0:\n        break;\n      case 1:\n        this.context = args[0];\n        break;\n      default:\n        this.context = args;\n        break;\n    }\n  }\n\n  /**\n   * Log an ERROR message to remote storage, with an optional\n   * data payload; emulates console.error().\n   *\n   * @function\n   * @param {string} message - The log message.\n   * @param {any} args Optional arguments to be applied to the recorded metrics.\n   * @returns {Promise} A promise that resolves to the number of metrics that\n   * were queued for eventual flushing.\n   */\n  public error(message: string, ...args: any): Promise<number> {\n    return this._log(RecordType.LOG, Level.ERROR, this.name, message, undefined, args);\n  }\n\n  /**\n   * Log a WARN message to remote storage, with an optional data payload;\n   * emulates console.warn().\n   *\n   * @function\n   * @param {string} message - The log message.\n   * @param {any} args Optional arguments to be applied to the recorded metrics.\n   * @returns {Promise} A promise that resolves to the number of metrics that\n   * were queued for eventual flushing.\n   */\n  public warn(message: string, ...args: any): Promise<number> {\n    return this._log(RecordType.LOG, Level.WARN, this.name, message, undefined, args);\n  }\n\n  /**\n   * Log an INFO message to remote storage, with an optional data payload;\n   * emulates console.log().\n   *\n   * @function\n   * @param {string} message - The log message.\n   * @param {any} args Optional arguments to be applied to the recorded metrics.\n   * @returns {Promise} A promise that resolves to the number of metrics that\n   * were queued for eventual flushing.\n   */\n  public log(message: string, ...args: any): Promise<number> {\n    return this._log(RecordType.LOG, Level.INFO, this.name, message, undefined, args);\n  }\n\n  /**\n   * Log an INFO message to remote storage, with an optional data payload;\n   * emulates console.info().\n   *\n   * @function\n   * @param {string} message - The log message.\n   * @param {any} args Optional arguments to be applied to the recorded metrics.\n   * @returns {Promise} A promise that resolves to the number of metrics that\n   * were queued for eventual flushing.\n   */\n  public info(message: string, ...args: any): Promise<number> {\n    return this._log(RecordType.LOG, Level.INFO, this.name, message, undefined, args);\n  }\n\n  /**\n   * Log a DEBUG message to remote storage, with an optional data payload;\n   * emulates console.debug().\n   *\n   * @function\n   * @param {string} message - The log message.\n   * @param {any} args Optional arguments to be applied to the recorded metrics.\n   * @returns {Promise} A promise that resolves to the number of metrics that\n   * were queued for eventual flushing.\n   */\n  public debug(message: string, ...args: any): Promise<number> {\n    return this._log(RecordType.LOG, Level.DEBUG, this.name, message, undefined, args);\n  }\n\n  /**\n   * Log a TRACE message to remote storage, with an optional data payload;\n   * emulates console.trace().\n   *\n   * @param {string} message - The log message.\n   * @param {any} args Optional arguments to be applied to the recorded metrics.\n   * @returns {Promise} A promise that resolves to the number of metrics that\n   * were queued for eventual flushing.\n   */\n  public trace(message: string, ...args: any): Promise<number> {\n    return this._log(RecordType.LOG, Level.TRACE, this.name, message, undefined, args);\n  }\n\n  /**\n   * Construct and return a Timer with properties as set from this Metrics\n   * object plus any supplied property bags.\n   *\n   * Timer level will default to INFO. To specify a different\n   * level, add an level object to the args parameters in the form\n   * {level: Level.DEBUG}.\n   *\n   * @param {string} prefix The event prefix for the timer.\n   * @param {any} args Optional arguments to be applied to the\n   * recorded metrics.\n   * @returns {Timer} The constructed Timer.\n   */\n  public start(prefix: string, ...args: any): Timer {\n    return ((global as any).adobeMetrics as AdobeMetrics).create(\n      RecordType.TIMER,\n      this.name,\n      this.context,\n      prefix,\n      ...args,\n    ) as Timer;\n  }\n\n  /**\n   * Construct a named event and emit it to storage, along with an optional\n   * data payload. Event level will default to INFO. To specify a different\n   * level, add an level object to the args parameters in the form\n   * {level: Level.DEBUG}.\n   *\n   * @function\n   * @param {string} event The event.\n   * @param {any} args Optional arguments to be applied to the recorded metrics.\n   * @returns {Promise} A promise that resolves to the number of metrics that\n   * were queued for eventual flushing.\n   */\n  public event(event: string | string[], ...args: any): Promise<number> {\n    return this._log(RecordType.EVENT, Level.INFO, this.name, undefined, event, args);\n  }\n\n  /**\n   * Construct a named \"Recent\" event and emit it to storage. The payload is expected\n   * to contain PII so downstream handling must a) keep the data bag intact, and\n   * b) send the Recent record (with PII) only to Unified Recents. PII must be\n   * removed before sending to ADX.\n   *\n   * @function\n   * @param {string} revent The event.\n   * @param {any} args Optional arguments to be applied to the recorded metrics.\n   * @returns {Promise} A promise that resolves to the number of metrics that\n   * were queued for eventual flushing.\n   */\n  public recent(revent: string | string[], ...args: any): Promise<number> {\n    return this._log(RecordType.RECENT, Level.INFO, this.name, undefined, revent, args);\n  }\n\n  /**\n   * Construct a named \"SEA\" (Solution Engagement Analytics) event and emit it to storage.\n   * The payload is expected to contain User interactions from Adobe Analytics/ Customer Journey\n   * Analytics.\n   *\n   * @param {string | string[]} seaEvent - The event or events to be logged.\n   * @param {...any} args - Additional arguments to be logged with the event.\n   * @returns {Promise<number>} - Returns a promise that resolves to the number of metrics\n   * that were queued for eventual flushing.\n   */\n  public sea(seaEvent: string | string[], ...args: any): Promise<number> {\n    return this._log(RecordType.SEA, Level.INFO, this.name, undefined, seaEvent, args);\n  }\n  /**\n   * The history object emulates window history APIs for recording history\n   * metrics. When using push or replace you can specify the path and state\n   * as separate arguments, or specify path as a string and state as an\n   * object, or put everything into one location-like argument. In all cases,\n   * the resulting history record will be a location-like argument of the\n   * form {path, search, hash, state}.\n   *\n   * If path is supplied as a string it will be disassembled into a\n   * location-like object and the state parameter will be added to that\n   * object if the supplied state parameter was an object.\n   *\n   * The resulting location-like object will be stored in the data property of\n   * the metric if the prop props argument is empty. If props is not empty,\n   * then the constructed location-like object will be the first object in an\n   * array on the metric data property, and the remainder of the array will\n   * come from processing the props parameter through makeDataBag().\n   */\n  public history = {\n    back: (...args: any): Promise<number> => {\n      return this._log(RecordType.HISTORY, Level.INFO, this.name, undefined, 'back', args);\n    },\n    forward: (...args: any): Promise<number> => {\n      return this._log(RecordType.HISTORY, Level.INFO, this.name, undefined, 'forward', args);\n    },\n    go: (n: number, ...args: any): Promise<number> => {\n      args.unshift({n});\n      return this._log(RecordType.HISTORY, Level.INFO, this.name, undefined, 'go', args);\n    },\n    push: (path: any, state?: any, ...args: any): Promise<number> => {\n      args.unshift({path, state});\n      return this._log(RecordType.HISTORY, Level.INFO, this.name, undefined, 'push', args);\n    },\n    replace: (path: any, state?: any, ...args: any): Promise<number> => {\n      args.unshift({path, state});\n      return this._log(RecordType.HISTORY, Level.INFO, this.name, undefined, 'replace', args);\n    },\n  };\n\n  /**\n   * Adobe Analytics for Adobe - aka OMEGA. These APIs emulate\n   * window._satellite.track() methods.\n   *\n   * Applications which self-manage the analytics javascript and handle\n   * updating the window.digitalData object should call metrics.analytics.track()\n   * immediately adjacent to calling window._satellite.track(), either before or\n   * after.\n   *\n   * Applications which provide the analytics javascript url to Metrics Runtime\n   * configuration can can call trackEvent(), trackPage() or trackUser() and\n   * supply the corresponding data object as an argument. In this case, Metrics\n   * will update the window digitalData object and take care of invoking\n   * window._satellite.track as well as Metrics' track().\n   */\n  public analytics = {\n    track: (type: 'event' | 'page' | 'user', ...args: any): Promise<number> => {\n      return this._log(RecordType.ANALYTICS, Level.INFO, this.name, undefined, type, args);\n    },\n    trackEvent: (eventData: EventData, ...args: any): Promise<number> => {\n      args.unshift(eventData);\n      return this._log(RecordType.ANALYTICS, Level.INFO, this.name, undefined, 'Event', args);\n    },\n    trackPage: (pageData: PageData, ...args: any): Promise<number> => {\n      args.unshift(pageData);\n      return this._log(RecordType.ANALYTICS, Level.INFO, this.name, undefined, 'Page', args);\n    },\n    trackUser: (userData: UserData, ...args: any): Promise<number> => {\n      args.unshift(userData);\n      return this._log(RecordType.ANALYTICS, Level.INFO, this.name, undefined, 'User', args);\n    },\n  };\n\n  /**\n   * Location methods emit Location recordTypes and also triggers tracking of\n   * a new page load. A new historyId will be generated, page state will\n   * transition to active. Location methods should be await'ed just prior to the\n   * corresponding window.location method to allow flush of any remaining\n   * metrics from the current window to remote storage before the window\n   * contents change.\n   */\n  public location = {\n    /**\n     * Record a location assign event.\n     *\n     * @param {string} url A string for the window location path being assigned.\n     * @param {any} props Any other properties will be assigned to the metric\n     * according to makeDataBag();.\n     * @returns {Promise} A promise that resolves to the number of metrics that\n     * were flushed to remote storage.\n     */\n    assign: (url: string, ...props: any): Promise<number> => {\n      props.unshift({url});\n      return this._log(RecordType.LOCATION, Level.INFO, this.name, undefined, 'assign', props);\n    },\n\n    /**\n     * Record a location reload event.\n     *\n     * @param {boolean} force A boolean to indicate that the page was or will be\n     * reloaded from the server.\n     * @param {any} props Any other properties will be assigned to the metric\n     * according to makeDataBag();.\n     * @returns {Promise} A promise that resolves to the number of metrics that\n     * were flushed to remote storage.\n     */\n    reload: (force: boolean, ...props: any): Promise<number> => {\n      props.unshift({force});\n      return this._log(RecordType.LOCATION, Level.INFO, this.name, undefined, 'reload', props);\n    },\n\n    /**\n     * Record a location replace event.\n     *\n     * @param {string} url A string for the window location path being assigned.\n     * @param {any} props Any other properties will be assigned to the metric\n     * according to makeDataBag();.\n     * @returns {Promise} A promise that resolves to the number of metrics that\n     * were flushed to remote storage.\n     */\n    replace: (url: string, ...props: any): Promise<number> => {\n      props.unshift({url});\n      return this._log(RecordType.LOCATION, Level.INFO, this.name, undefined, 'replace', props);\n    },\n  };\n}\n\n(function (): void {\n  const adobeMetrics = ((global as any).adobeMetrics = (global as any).adobeMetrics || {});\n  adobeMetrics.queue = adobeMetrics.queue || [];\n})();\n","/*************************************************************************\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n **************************************************************************/\n\n/**\n * Metrics event used for Metrics.event() to trigger pageState change.\n */\nexport enum MetricsEvents {\n  PAGE_LOAD_DONE = 'exc.metrics.pageState.load.done',\n  PAGE_LOAD_START = 'exc.metrics.pageState.load.start',\n  SPINNER_DONE = 'exc.metrics.pageState.spinner.done',\n  SPINNER_START = 'exc.metrics.pageState.spinner.start',\n}\n","/*************************************************************************\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n **************************************************************************/\n\n/**\n * RecordType is an enumeration of known telemetry records. These\n * record types have specified symantics and use specific columns\n * for each type. That said, any record type may specify any of the\n * known fields for the custom purpose of the application.\n *\n * All RecordTypes except User are implementations of the Metric\n * interface. The User RecordType is for User context changes and should\n * not be created direclty by clients.\n *\n * Clients may specify custom record types, however there will be no\n * attempt to validate any fields. Storage of custom record types may\n * silently fail.\n */\nexport enum RecordType {\n  /**\n   * Analytics record type reports an Omega analtycis record. The dynamicData\n   * object is copied from global.dynamicData.\n   */\n  ANALYTICS = 'Analytics',\n\n  /**\n   * Event reports an event to the system. Events are typically application-\n   * specific enumerations. Event strings should be very stable since they\n   * will be used for dashboards and alert queries. The recommended pattern is\n   * to use featureArea.subject.verb, for example: shell.solutionPicker.click.\n   *\n   * All events starting with 'exc.metrics' are reserved for metrics system use.\n   *\n   * Event record types are very similar to Log record types with the main\n   * difference being that the Event is expected to have a value for the event\n   * property, and the message property is considered optional, whereas Log\n   * records are expected to have a human-readable string in the message\n   * property, and the event property is considered optional.\n   */\n  EVENT = 'Event',\n\n  /**\n   * Recent is an Event destined for collection by the Unified Recents team.\n   * The data bag is expected to be prescribed yet customized for this record\n   * type and may contain PII. As such, the payload is ingested as a Log metric\n   * with User data. The Gateway sends the RECENT event to Unified Recents then\n   * sends the sanitized record to ADX.\n   */\n  RECENT = 'Recent',\n\n  /**\n   * History reports a history change in the current window. The\n   * window.location object will be stored in metricsState.\n   */\n  HISTORY = 'History',\n\n  /**\n   * Location reports a location change in the current window. Location\n   * records should be emitted just prior to calling window location\n   * methods to allow for flushing in case of reload. A\n   * new historyId will be generated, and the page will be considered\n   * 'loading'.\n   */\n  LOCATION = 'Location',\n\n  /**\n   * Log RecordType reports a string message at a specified log level.\n   * A logger name is optional but highly recommended for searching\n   * and filtering since the log message can be any string.\n   */\n  LOG = 'Log',\n\n  /**\n   * NetworkRequest reports the start of a network invocation, including\n   * the url and request parameters. The metric's data property will\n   * contain the network Request object supplied by the javascript VM.\n   */\n  NETWORK_REQUEST = 'NetworkRequest',\n\n  /**\n   * NetworkResponse reports the conclusion of a network invocation, which\n   * may be an HTTP status or an outright error. The metric's data\n   * property will contain either the Response object from the\n   * javascritp VM, or the Error returned by the network call.\n   */\n  NETWORK_RESPONSE = 'NetworkResponse',\n\n  /**\n   * ResourceTiming reports the timing results of network resource requests\n   * as reported by the Performance interface. The metric's data property\n   * will contain the ResourceTiming object suppolied by the javascript VM.\n   */\n  RESOURCE_TIMING = 'ResourceTiming',\n\n  /**\n   * PaintTiming reports the paint timing results as supplied by\n   * the Performance interface from the javascript VM. The PaintTiming\n   * object is stored in the metric's data property.\n   */\n  PAINT_TIMING = 'PaintTiming',\n\n  /**\n   * NavigationTiming reports the timing results of navigation events\n   * emitted from the javascript VM. The NavigationTiming object is stored\n   * in the metric's data property.\n   */\n  NAVIGATION_TIMING = 'NavigationTiming',\n\n  /**\n   * Timer reports the elapsed time between events. The duration property\n   * records the elapsed time since construction - the timer \"starts\" at\n   * construction. Timers are typically constructed using the start()\n   * method on an instance of Metrics. It is also possible to construct\n   * a new Timer object direclty, in which case a logger-style name for\n   * the timer is highly recommended to aid searching and filtering.\n   */\n  TIMER = 'Timer',\n\n  /**\n   * Tracer is a reserved RecordType for monitoring system health. It should\n   * not be used by clients.\n   */\n  TRACER = 'Tracer',\n\n  /**\n   * The User RecordType reports changes in the current user's login\n   * status and current effective group. This record type should not\n   * be used direclty. Instead, use the setUser() and clearUser()\n   * methods.\n   */\n  USER = 'User',\n\n  /**\n   * The UserEvent RecordType reports user-specific events/interactions\n   * within an application.\n   *\n   * All user events starting with 'exc.metrics' are reserved for metrics system use.\n   * The event should end with a string signifying the action/interaction e.g. 'exc.metrics.click'.\n   *\n   * UserEvents are similar to events except are geared towards user interactions with\n   * an app rather than internal application events.\n   */\n  USER_EVENT = 'UserEvent',\n\n  /**\n   * SEA (Solution Engagement Analytics) RecordType reports User interface interactions\n   * from Adobe Analytics (AA) /Customer Journey Analytics (CJA) to the Metrics system.\n   */\n  SEA = 'SEA',\n}\n","/*************************************************************************\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n **************************************************************************/\nimport type Record from './Record';\n\nexport default interface User extends Record {\n  accountType?: string; // Analytics Data Layer: The account level of the user for your given product.\n  attributes?: any; // Analytics Data Layer: additional values stored in key:value pairs with the value ALWAYS being strings.\n  authId?: string; // user's authentication id used for type2e (IMS) identification\n  authOrigin?: string; // Analytics Data Layer: The origin of where the user logged in or \"anonymous\" if the user is not logged in.\n  authSystem?: string; // Analytics Data Layer: The system used to provide the user.id and user.corpId.\n  displayName?: string; // firstname lastname - for convenience in viewing/searching\n  groupId?: string; // user's group identifier, e.g. currently selected IMS org, or a solution user group\n  groupName?: string; // current effective group for the user, e.g. current IMS org, for viewing/searching\n  ipAddress?: string; // as viewed by the metrics gateway - an indicator of the user's location\n  language?: string; // Analytics Data Layer: The language/locale setting the user has currently selected within the UI.\n  privileges?: string[]; // Analytics Data Layer: Privileges that the user currently has access to as relating to the product as a whole.\n  sessionId?: string; // user's session identifier, e.g. IMS session or browser session header/cookie\n  userAgent?: string; // a client identifier, e.g. the User-Agent request header\n  userId?: string; // user's login string, e.g. AdobeId or username, as submitted to the auth system\n}\n\nexport const UserOptOutAllowList = [\n  'attributes',\n  'authSystem',\n  'dateNow',\n  'event',\n  'metricsState',\n  'recordType',\n  'timestamp',\n  'userHash',\n];\n","/*************************************************************************\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n **************************************************************************/\n\nimport Metrics from './Metrics';\n\nexport default Metrics;\nexport {Level} from './Level';\nexport {MetricsEvents} from './MetricsEvents';\nexport {RecordType} from './RecordType';\nexport {UserOptOutAllowList} from './User';\n\nexport type {default as MetricsApi} from './MetricsApi';\nexport type {default as AdobeMetrics} from './AdobeMetrics';\nexport type {DigitalData, EventData, PageData, UserData} from './DigitalData';\nexport type {default as Metric} from './Metric';\nexport type {default as Record, Application, MetricsState, StateOverrides} from './Record';\nexport type {default as Timer} from './Timer';\nexport type {default as History} from './History';\nexport type {default as Analytics} from './Analytics';\nexport type {default as Location} from './Location';\nexport type {default as User} from './User';\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isUnicodeLanguageSubtag = exports.isUnicodeScriptSubtag = exports.isUnicodeRegionSubtag = exports.isStructurallyValidLanguageTag = exports.parseUnicodeLanguageId = exports.parseUnicodeLocaleId = exports.getCanonicalLocales = void 0;\nvar tslib_1 = require(\"tslib\");\nvar parser_1 = require(\"./src/parser\");\nvar emitter_1 = require(\"./src/emitter\");\nvar canonicalizer_1 = require(\"./src/canonicalizer\");\n/**\n * https://tc39.es/ecma402/#sec-canonicalizelocalelist\n * @param locales\n */\nfunction CanonicalizeLocaleList(locales) {\n    if (locales === undefined) {\n        return [];\n    }\n    var seen = [];\n    if (typeof locales === 'string') {\n        locales = [locales];\n    }\n    for (var _i = 0, locales_1 = locales; _i < locales_1.length; _i++) {\n        var locale = locales_1[_i];\n        var canonicalizedTag = (0, emitter_1.emitUnicodeLocaleId)((0, canonicalizer_1.canonicalizeUnicodeLocaleId)((0, parser_1.parseUnicodeLocaleId)(locale)));\n        if (seen.indexOf(canonicalizedTag) < 0) {\n            seen.push(canonicalizedTag);\n        }\n    }\n    return seen;\n}\nfunction getCanonicalLocales(locales) {\n    return CanonicalizeLocaleList(locales);\n}\nexports.getCanonicalLocales = getCanonicalLocales;\nvar parser_2 = require(\"./src/parser\");\nObject.defineProperty(exports, \"parseUnicodeLocaleId\", { enumerable: true, get: function () { return parser_2.parseUnicodeLocaleId; } });\nObject.defineProperty(exports, \"parseUnicodeLanguageId\", { enumerable: true, get: function () { return parser_2.parseUnicodeLanguageId; } });\nObject.defineProperty(exports, \"isStructurallyValidLanguageTag\", { enumerable: true, get: function () { return parser_2.isStructurallyValidLanguageTag; } });\nObject.defineProperty(exports, \"isUnicodeRegionSubtag\", { enumerable: true, get: function () { return parser_2.isUnicodeRegionSubtag; } });\nObject.defineProperty(exports, \"isUnicodeScriptSubtag\", { enumerable: true, get: function () { return parser_2.isUnicodeScriptSubtag; } });\nObject.defineProperty(exports, \"isUnicodeLanguageSubtag\", { enumerable: true, get: function () { return parser_2.isUnicodeLanguageSubtag; } });\n(0, tslib_1.__exportStar)(require(\"./src/types\"), exports);\n(0, tslib_1.__exportStar)(require(\"./src/emitter\"), exports);\n(0, tslib_1.__exportStar)(require(\"./src/likelySubtags.generated\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar _1 = require(\"./\");\nvar should_polyfill_1 = require(\"./should-polyfill\");\nif (typeof Intl === 'undefined') {\n    if (typeof window !== 'undefined') {\n        Object.defineProperty(window, 'Intl', {\n            value: {},\n        });\n    }\n    else if (typeof global !== 'undefined') {\n        Object.defineProperty(global, 'Intl', {\n            value: {},\n        });\n    }\n}\nif ((0, should_polyfill_1.shouldPolyfill)()) {\n    Object.defineProperty(Intl, 'getCanonicalLocales', {\n        value: _1.getCanonicalLocales,\n        writable: true,\n        enumerable: false,\n        configurable: true,\n    });\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.shouldPolyfill = void 0;\nfunction shouldPolyfill() {\n    return (typeof Intl === 'undefined' ||\n        !('getCanonicalLocales' in Intl) ||\n        // Native Intl.getCanonicalLocales is just buggy\n        // https://bugs.chromium.org/p/v8/issues/detail?id=10682\n        Intl.getCanonicalLocales('und-x-private')[0] ===\n            'x-private');\n}\nexports.shouldPolyfill = shouldPolyfill;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.variantAlias = exports.scriptAlias = exports.territoryAlias = exports.languageAlias = void 0;\n/* @generated */\n// prettier-ignore  \nexports.languageAlias = {\n    \"aa-saaho\": \"ssy\",\n    \"aam\": \"aas\",\n    \"aar\": \"aa\",\n    \"abk\": \"ab\",\n    \"adp\": \"dz\",\n    \"afr\": \"af\",\n    \"agp\": \"apf\",\n    \"ais\": \"ami\",\n    \"aju\": \"jrb\",\n    \"aka\": \"ak\",\n    \"alb\": \"sq\",\n    \"als\": \"sq\",\n    \"amh\": \"am\",\n    \"ara\": \"ar\",\n    \"arb\": \"ar\",\n    \"arg\": \"an\",\n    \"arm\": \"hy\",\n    \"art-lojban\": \"jbo\",\n    \"asd\": \"snz\",\n    \"asm\": \"as\",\n    \"aue\": \"ktz\",\n    \"ava\": \"av\",\n    \"ave\": \"ae\",\n    \"aym\": \"ay\",\n    \"ayr\": \"ay\",\n    \"ayx\": \"nun\",\n    \"aze\": \"az\",\n    \"azj\": \"az\",\n    \"bak\": \"ba\",\n    \"bam\": \"bm\",\n    \"baq\": \"eu\",\n    \"baz\": \"nvo\",\n    \"bcc\": \"bal\",\n    \"bcl\": \"bik\",\n    \"bel\": \"be\",\n    \"ben\": \"bn\",\n    \"bgm\": \"bcg\",\n    \"bh\": \"bho\",\n    \"bhk\": \"fbl\",\n    \"bih\": \"bho\",\n    \"bis\": \"bi\",\n    \"bjd\": \"drl\",\n    \"bjq\": \"bzc\",\n    \"bkb\": \"ebk\",\n    \"bod\": \"bo\",\n    \"bos\": \"bs\",\n    \"bre\": \"br\",\n    \"btb\": \"beb\",\n    \"bul\": \"bg\",\n    \"bur\": \"my\",\n    \"bxk\": \"luy\",\n    \"bxr\": \"bua\",\n    \"cat\": \"ca\",\n    \"ccq\": \"rki\",\n    \"cel-gaulish\": \"xtg\",\n    \"ces\": \"cs\",\n    \"cha\": \"ch\",\n    \"che\": \"ce\",\n    \"chi\": \"zh\",\n    \"chu\": \"cu\",\n    \"chv\": \"cv\",\n    \"cjr\": \"mom\",\n    \"cka\": \"cmr\",\n    \"cld\": \"syr\",\n    \"cmk\": \"xch\",\n    \"cmn\": \"zh\",\n    \"cnr\": \"sr-ME\",\n    \"cor\": \"kw\",\n    \"cos\": \"co\",\n    \"coy\": \"pij\",\n    \"cqu\": \"quh\",\n    \"cre\": \"cr\",\n    \"cwd\": \"cr\",\n    \"cym\": \"cy\",\n    \"cze\": \"cs\",\n    \"daf\": \"dnj\",\n    \"dan\": \"da\",\n    \"dap\": \"njz\",\n    \"deu\": \"de\",\n    \"dgo\": \"doi\",\n    \"dhd\": \"mwr\",\n    \"dik\": \"din\",\n    \"diq\": \"zza\",\n    \"dit\": \"dif\",\n    \"div\": \"dv\",\n    \"djl\": \"dze\",\n    \"dkl\": \"aqd\",\n    \"drh\": \"mn\",\n    \"drr\": \"kzk\",\n    \"drw\": \"fa-AF\",\n    \"dud\": \"uth\",\n    \"duj\": \"dwu\",\n    \"dut\": \"nl\",\n    \"dwl\": \"dbt\",\n    \"dzo\": \"dz\",\n    \"ekk\": \"et\",\n    \"ell\": \"el\",\n    \"elp\": \"amq\",\n    \"emk\": \"man\",\n    \"en-GB-oed\": \"en-GB-oxendict\",\n    \"eng\": \"en\",\n    \"epo\": \"eo\",\n    \"esk\": \"ik\",\n    \"est\": \"et\",\n    \"eus\": \"eu\",\n    \"ewe\": \"ee\",\n    \"fao\": \"fo\",\n    \"fas\": \"fa\",\n    \"fat\": \"ak\",\n    \"fij\": \"fj\",\n    \"fin\": \"fi\",\n    \"fra\": \"fr\",\n    \"fre\": \"fr\",\n    \"fry\": \"fy\",\n    \"fuc\": \"ff\",\n    \"ful\": \"ff\",\n    \"gav\": \"dev\",\n    \"gaz\": \"om\",\n    \"gbc\": \"wny\",\n    \"gbo\": \"grb\",\n    \"geo\": \"ka\",\n    \"ger\": \"de\",\n    \"gfx\": \"vaj\",\n    \"ggn\": \"gvr\",\n    \"ggo\": \"esg\",\n    \"ggr\": \"gtu\",\n    \"gio\": \"aou\",\n    \"gla\": \"gd\",\n    \"gle\": \"ga\",\n    \"glg\": \"gl\",\n    \"gli\": \"kzk\",\n    \"glv\": \"gv\",\n    \"gno\": \"gon\",\n    \"gre\": \"el\",\n    \"grn\": \"gn\",\n    \"gti\": \"nyc\",\n    \"gug\": \"gn\",\n    \"guj\": \"gu\",\n    \"guv\": \"duz\",\n    \"gya\": \"gba\",\n    \"hat\": \"ht\",\n    \"hau\": \"ha\",\n    \"hbs\": \"sr-Latn\",\n    \"hdn\": \"hai\",\n    \"hea\": \"hmn\",\n    \"heb\": \"he\",\n    \"her\": \"hz\",\n    \"him\": \"srx\",\n    \"hin\": \"hi\",\n    \"hmo\": \"ho\",\n    \"hrr\": \"jal\",\n    \"hrv\": \"hr\",\n    \"hun\": \"hu\",\n    \"hy-arevmda\": \"hyw\",\n    \"hye\": \"hy\",\n    \"i-ami\": \"ami\",\n    \"i-bnn\": \"bnn\",\n    \"i-default\": \"en-x-i-default\",\n    \"i-enochian\": \"und-x-i-enochian\",\n    \"i-hak\": \"hak\",\n    \"i-klingon\": \"tlh\",\n    \"i-lux\": \"lb\",\n    \"i-mingo\": \"see-x-i-mingo\",\n    \"i-navajo\": \"nv\",\n    \"i-pwn\": \"pwn\",\n    \"i-tao\": \"tao\",\n    \"i-tay\": \"tay\",\n    \"i-tsu\": \"tsu\",\n    \"ibi\": \"opa\",\n    \"ibo\": \"ig\",\n    \"ice\": \"is\",\n    \"ido\": \"io\",\n    \"iii\": \"ii\",\n    \"ike\": \"iu\",\n    \"iku\": \"iu\",\n    \"ile\": \"ie\",\n    \"ill\": \"ilm\",\n    \"ilw\": \"gal\",\n    \"in\": \"id\",\n    \"ina\": \"ia\",\n    \"ind\": \"id\",\n    \"ipk\": \"ik\",\n    \"isl\": \"is\",\n    \"ita\": \"it\",\n    \"iw\": \"he\",\n    \"izi\": \"eza\",\n    \"jar\": \"jgk\",\n    \"jav\": \"jv\",\n    \"jeg\": \"oyb\",\n    \"ji\": \"yi\",\n    \"jpn\": \"ja\",\n    \"jw\": \"jv\",\n    \"kal\": \"kl\",\n    \"kan\": \"kn\",\n    \"kas\": \"ks\",\n    \"kat\": \"ka\",\n    \"kau\": \"kr\",\n    \"kaz\": \"kk\",\n    \"kdv\": \"zkd\",\n    \"kgc\": \"tdf\",\n    \"kgd\": \"ncq\",\n    \"kgh\": \"kml\",\n    \"khk\": \"mn\",\n    \"khm\": \"km\",\n    \"kik\": \"ki\",\n    \"kin\": \"rw\",\n    \"kir\": \"ky\",\n    \"kmr\": \"ku\",\n    \"knc\": \"kr\",\n    \"kng\": \"kg\",\n    \"knn\": \"kok\",\n    \"koj\": \"kwv\",\n    \"kom\": \"kv\",\n    \"kon\": \"kg\",\n    \"kor\": \"ko\",\n    \"kpp\": \"jkm\",\n    \"kpv\": \"kv\",\n    \"krm\": \"bmf\",\n    \"ktr\": \"dtp\",\n    \"kua\": \"kj\",\n    \"kur\": \"ku\",\n    \"kvs\": \"gdj\",\n    \"kwq\": \"yam\",\n    \"kxe\": \"tvd\",\n    \"kxl\": \"kru\",\n    \"kzh\": \"dgl\",\n    \"kzj\": \"dtp\",\n    \"kzt\": \"dtp\",\n    \"lao\": \"lo\",\n    \"lat\": \"la\",\n    \"lav\": \"lv\",\n    \"lbk\": \"bnc\",\n    \"leg\": \"enl\",\n    \"lii\": \"raq\",\n    \"lim\": \"li\",\n    \"lin\": \"ln\",\n    \"lit\": \"lt\",\n    \"llo\": \"ngt\",\n    \"lmm\": \"rmx\",\n    \"ltz\": \"lb\",\n    \"lub\": \"lu\",\n    \"lug\": \"lg\",\n    \"lvs\": \"lv\",\n    \"mac\": \"mk\",\n    \"mah\": \"mh\",\n    \"mal\": \"ml\",\n    \"mao\": \"mi\",\n    \"mar\": \"mr\",\n    \"may\": \"ms\",\n    \"meg\": \"cir\",\n    \"mgx\": \"jbk\",\n    \"mhr\": \"chm\",\n    \"mkd\": \"mk\",\n    \"mlg\": \"mg\",\n    \"mlt\": \"mt\",\n    \"mnk\": \"man\",\n    \"mnt\": \"wnn\",\n    \"mo\": \"ro\",\n    \"mof\": \"xnt\",\n    \"mol\": \"ro\",\n    \"mon\": \"mn\",\n    \"mri\": \"mi\",\n    \"msa\": \"ms\",\n    \"mst\": \"mry\",\n    \"mup\": \"raj\",\n    \"mwd\": \"dmw\",\n    \"mwj\": \"vaj\",\n    \"mya\": \"my\",\n    \"myd\": \"aog\",\n    \"myt\": \"mry\",\n    \"nad\": \"xny\",\n    \"nau\": \"na\",\n    \"nav\": \"nv\",\n    \"nbf\": \"nru\",\n    \"nbl\": \"nr\",\n    \"nbx\": \"ekc\",\n    \"ncp\": \"kdz\",\n    \"nde\": \"nd\",\n    \"ndo\": \"ng\",\n    \"nep\": \"ne\",\n    \"nld\": \"nl\",\n    \"nln\": \"azd\",\n    \"nlr\": \"nrk\",\n    \"nno\": \"nn\",\n    \"nns\": \"nbr\",\n    \"nnx\": \"ngv\",\n    \"no-bok\": \"nb\",\n    \"no-bokmal\": \"nb\",\n    \"no-nyn\": \"nn\",\n    \"no-nynorsk\": \"nn\",\n    \"nob\": \"nb\",\n    \"noo\": \"dtd\",\n    \"nor\": \"no\",\n    \"npi\": \"ne\",\n    \"nts\": \"pij\",\n    \"nxu\": \"bpp\",\n    \"nya\": \"ny\",\n    \"oci\": \"oc\",\n    \"ojg\": \"oj\",\n    \"oji\": \"oj\",\n    \"ori\": \"or\",\n    \"orm\": \"om\",\n    \"ory\": \"or\",\n    \"oss\": \"os\",\n    \"oun\": \"vaj\",\n    \"pan\": \"pa\",\n    \"pbu\": \"ps\",\n    \"pcr\": \"adx\",\n    \"per\": \"fa\",\n    \"pes\": \"fa\",\n    \"pli\": \"pi\",\n    \"plt\": \"mg\",\n    \"pmc\": \"huw\",\n    \"pmu\": \"phr\",\n    \"pnb\": \"lah\",\n    \"pol\": \"pl\",\n    \"por\": \"pt\",\n    \"ppa\": \"bfy\",\n    \"ppr\": \"lcq\",\n    \"prs\": \"fa-AF\",\n    \"pry\": \"prt\",\n    \"pus\": \"ps\",\n    \"puz\": \"pub\",\n    \"que\": \"qu\",\n    \"quz\": \"qu\",\n    \"rmr\": \"emx\",\n    \"rmy\": \"rom\",\n    \"roh\": \"rm\",\n    \"ron\": \"ro\",\n    \"rum\": \"ro\",\n    \"run\": \"rn\",\n    \"rus\": \"ru\",\n    \"sag\": \"sg\",\n    \"san\": \"sa\",\n    \"sap\": \"aqt\",\n    \"sca\": \"hle\",\n    \"scc\": \"sr\",\n    \"scr\": \"hr\",\n    \"sgl\": \"isk\",\n    \"sgn-BE-FR\": \"sfb\",\n    \"sgn-BE-NL\": \"vgt\",\n    \"sgn-BR\": \"bzs\",\n    \"sgn-CH-DE\": \"sgg\",\n    \"sgn-CO\": \"csn\",\n    \"sgn-DE\": \"gsg\",\n    \"sgn-DK\": \"dsl\",\n    \"sgn-ES\": \"ssp\",\n    \"sgn-FR\": \"fsl\",\n    \"sgn-GB\": \"bfi\",\n    \"sgn-GR\": \"gss\",\n    \"sgn-IE\": \"isg\",\n    \"sgn-IT\": \"ise\",\n    \"sgn-JP\": \"jsl\",\n    \"sgn-MX\": \"mfs\",\n    \"sgn-NI\": \"ncs\",\n    \"sgn-NL\": \"dse\",\n    \"sgn-NO\": \"nsi\",\n    \"sgn-PT\": \"psr\",\n    \"sgn-SE\": \"swl\",\n    \"sgn-US\": \"ase\",\n    \"sgn-ZA\": \"sfs\",\n    \"sh\": \"sr-Latn\",\n    \"sin\": \"si\",\n    \"skk\": \"oyb\",\n    \"slk\": \"sk\",\n    \"slo\": \"sk\",\n    \"slv\": \"sl\",\n    \"sme\": \"se\",\n    \"smo\": \"sm\",\n    \"sna\": \"sn\",\n    \"snd\": \"sd\",\n    \"som\": \"so\",\n    \"sot\": \"st\",\n    \"spa\": \"es\",\n    \"spy\": \"kln\",\n    \"sqi\": \"sq\",\n    \"src\": \"sc\",\n    \"srd\": \"sc\",\n    \"srp\": \"sr\",\n    \"ssw\": \"ss\",\n    \"sul\": \"sgd\",\n    \"sum\": \"ulw\",\n    \"sun\": \"su\",\n    \"swa\": \"sw\",\n    \"swc\": \"sw-CD\",\n    \"swe\": \"sv\",\n    \"swh\": \"sw\",\n    \"tah\": \"ty\",\n    \"tam\": \"ta\",\n    \"tat\": \"tt\",\n    \"tdu\": \"dtp\",\n    \"tel\": \"te\",\n    \"tgg\": \"bjp\",\n    \"tgk\": \"tg\",\n    \"tgl\": \"fil\",\n    \"tha\": \"th\",\n    \"thc\": \"tpo\",\n    \"thw\": \"ola\",\n    \"thx\": \"oyb\",\n    \"tib\": \"bo\",\n    \"tid\": \"itd\",\n    \"tie\": \"ras\",\n    \"tir\": \"ti\",\n    \"tkk\": \"twm\",\n    \"tl\": \"fil\",\n    \"tlw\": \"weo\",\n    \"tmp\": \"tyj\",\n    \"tne\": \"kak\",\n    \"tnf\": \"fa-AF\",\n    \"ton\": \"to\",\n    \"tsf\": \"taj\",\n    \"tsn\": \"tn\",\n    \"tso\": \"ts\",\n    \"ttq\": \"tmh\",\n    \"tuk\": \"tk\",\n    \"tur\": \"tr\",\n    \"tw\": \"ak\",\n    \"twi\": \"ak\",\n    \"uig\": \"ug\",\n    \"ukr\": \"uk\",\n    \"umu\": \"del\",\n    \"und-aaland\": \"und-AX\",\n    \"und-arevela\": \"und\",\n    \"und-arevmda\": \"und\",\n    \"und-bokmal\": \"und\",\n    \"und-hakka\": \"und\",\n    \"und-hepburn-heploc\": \"und-alalc97\",\n    \"und-lojban\": \"und\",\n    \"und-nynorsk\": \"und\",\n    \"und-saaho\": \"und\",\n    \"und-xiang\": \"und\",\n    \"unp\": \"wro\",\n    \"uok\": \"ema\",\n    \"urd\": \"ur\",\n    \"uzb\": \"uz\",\n    \"uzn\": \"uz\",\n    \"ven\": \"ve\",\n    \"vie\": \"vi\",\n    \"vol\": \"vo\",\n    \"wel\": \"cy\",\n    \"wgw\": \"wgb\",\n    \"wit\": \"nol\",\n    \"wiw\": \"nwo\",\n    \"wln\": \"wa\",\n    \"wol\": \"wo\",\n    \"xba\": \"cax\",\n    \"xho\": \"xh\",\n    \"xia\": \"acn\",\n    \"xkh\": \"waw\",\n    \"xpe\": \"kpe\",\n    \"xrq\": \"dmw\",\n    \"xsj\": \"suj\",\n    \"xsl\": \"den\",\n    \"ybd\": \"rki\",\n    \"ydd\": \"yi\",\n    \"yen\": \"ynq\",\n    \"yid\": \"yi\",\n    \"yiy\": \"yrm\",\n    \"yma\": \"lrr\",\n    \"ymt\": \"mtm\",\n    \"yor\": \"yo\",\n    \"yos\": \"zom\",\n    \"yuu\": \"yug\",\n    \"zai\": \"zap\",\n    \"zh-cmn\": \"zh\",\n    \"zh-cmn-Hans\": \"zh-Hans\",\n    \"zh-cmn-Hant\": \"zh-Hant\",\n    \"zh-gan\": \"gan\",\n    \"zh-guoyu\": \"zh\",\n    \"zh-hakka\": \"hak\",\n    \"zh-min\": \"nan-x-zh-min\",\n    \"zh-min-nan\": \"nan\",\n    \"zh-wuu\": \"wuu\",\n    \"zh-xiang\": \"hsn\",\n    \"zh-yue\": \"yue\",\n    \"zha\": \"za\",\n    \"zho\": \"zh\",\n    \"zir\": \"scv\",\n    \"zsm\": \"ms\",\n    \"zul\": \"zu\",\n    \"zyb\": \"za\"\n};\nexports.territoryAlias = {\n    \"100\": \"BG\",\n    \"104\": \"MM\",\n    \"108\": \"BI\",\n    \"112\": \"BY\",\n    \"116\": \"KH\",\n    \"120\": \"CM\",\n    \"124\": \"CA\",\n    \"132\": \"CV\",\n    \"136\": \"KY\",\n    \"140\": \"CF\",\n    \"144\": \"LK\",\n    \"148\": \"TD\",\n    \"152\": \"CL\",\n    \"156\": \"CN\",\n    \"158\": \"TW\",\n    \"162\": \"CX\",\n    \"166\": \"CC\",\n    \"170\": \"CO\",\n    \"172\": \"RU AM AZ BY GE KG KZ MD TJ TM UA UZ\",\n    \"174\": \"KM\",\n    \"175\": \"YT\",\n    \"178\": \"CG\",\n    \"180\": \"CD\",\n    \"184\": \"CK\",\n    \"188\": \"CR\",\n    \"191\": \"HR\",\n    \"192\": \"CU\",\n    \"196\": \"CY\",\n    \"200\": \"CZ SK\",\n    \"203\": \"CZ\",\n    \"204\": \"BJ\",\n    \"208\": \"DK\",\n    \"212\": \"DM\",\n    \"214\": \"DO\",\n    \"218\": \"EC\",\n    \"222\": \"SV\",\n    \"226\": \"GQ\",\n    \"230\": \"ET\",\n    \"231\": \"ET\",\n    \"232\": \"ER\",\n    \"233\": \"EE\",\n    \"234\": \"FO\",\n    \"238\": \"FK\",\n    \"239\": \"GS\",\n    \"242\": \"FJ\",\n    \"246\": \"FI\",\n    \"248\": \"AX\",\n    \"249\": \"FR\",\n    \"250\": \"FR\",\n    \"254\": \"GF\",\n    \"258\": \"PF\",\n    \"260\": \"TF\",\n    \"262\": \"DJ\",\n    \"266\": \"GA\",\n    \"268\": \"GE\",\n    \"270\": \"GM\",\n    \"275\": \"PS\",\n    \"276\": \"DE\",\n    \"278\": \"DE\",\n    \"280\": \"DE\",\n    \"288\": \"GH\",\n    \"292\": \"GI\",\n    \"296\": \"KI\",\n    \"300\": \"GR\",\n    \"304\": \"GL\",\n    \"308\": \"GD\",\n    \"312\": \"GP\",\n    \"316\": \"GU\",\n    \"320\": \"GT\",\n    \"324\": \"GN\",\n    \"328\": \"GY\",\n    \"332\": \"HT\",\n    \"334\": \"HM\",\n    \"336\": \"VA\",\n    \"340\": \"HN\",\n    \"344\": \"HK\",\n    \"348\": \"HU\",\n    \"352\": \"IS\",\n    \"356\": \"IN\",\n    \"360\": \"ID\",\n    \"364\": \"IR\",\n    \"368\": \"IQ\",\n    \"372\": \"IE\",\n    \"376\": \"IL\",\n    \"380\": \"IT\",\n    \"384\": \"CI\",\n    \"388\": \"JM\",\n    \"392\": \"JP\",\n    \"398\": \"KZ\",\n    \"400\": \"JO\",\n    \"404\": \"KE\",\n    \"408\": \"KP\",\n    \"410\": \"KR\",\n    \"414\": \"KW\",\n    \"417\": \"KG\",\n    \"418\": \"LA\",\n    \"422\": \"LB\",\n    \"426\": \"LS\",\n    \"428\": \"LV\",\n    \"430\": \"LR\",\n    \"434\": \"LY\",\n    \"438\": \"LI\",\n    \"440\": \"LT\",\n    \"442\": \"LU\",\n    \"446\": \"MO\",\n    \"450\": \"MG\",\n    \"454\": \"MW\",\n    \"458\": \"MY\",\n    \"462\": \"MV\",\n    \"466\": \"ML\",\n    \"470\": \"MT\",\n    \"474\": \"MQ\",\n    \"478\": \"MR\",\n    \"480\": \"MU\",\n    \"484\": \"MX\",\n    \"492\": \"MC\",\n    \"496\": \"MN\",\n    \"498\": \"MD\",\n    \"499\": \"ME\",\n    \"500\": \"MS\",\n    \"504\": \"MA\",\n    \"508\": \"MZ\",\n    \"512\": \"OM\",\n    \"516\": \"NA\",\n    \"520\": \"NR\",\n    \"524\": \"NP\",\n    \"528\": \"NL\",\n    \"530\": \"CW SX BQ\",\n    \"531\": \"CW\",\n    \"532\": \"CW SX BQ\",\n    \"533\": \"AW\",\n    \"534\": \"SX\",\n    \"535\": \"BQ\",\n    \"536\": \"SA IQ\",\n    \"540\": \"NC\",\n    \"548\": \"VU\",\n    \"554\": \"NZ\",\n    \"558\": \"NI\",\n    \"562\": \"NE\",\n    \"566\": \"NG\",\n    \"570\": \"NU\",\n    \"574\": \"NF\",\n    \"578\": \"NO\",\n    \"580\": \"MP\",\n    \"581\": \"UM\",\n    \"582\": \"FM MH MP PW\",\n    \"583\": \"FM\",\n    \"584\": \"MH\",\n    \"585\": \"PW\",\n    \"586\": \"PK\",\n    \"591\": \"PA\",\n    \"598\": \"PG\",\n    \"600\": \"PY\",\n    \"604\": \"PE\",\n    \"608\": \"PH\",\n    \"612\": \"PN\",\n    \"616\": \"PL\",\n    \"620\": \"PT\",\n    \"624\": \"GW\",\n    \"626\": \"TL\",\n    \"630\": \"PR\",\n    \"634\": \"QA\",\n    \"638\": \"RE\",\n    \"642\": \"RO\",\n    \"643\": \"RU\",\n    \"646\": \"RW\",\n    \"652\": \"BL\",\n    \"654\": \"SH\",\n    \"659\": \"KN\",\n    \"660\": \"AI\",\n    \"662\": \"LC\",\n    \"663\": \"MF\",\n    \"666\": \"PM\",\n    \"670\": \"VC\",\n    \"674\": \"SM\",\n    \"678\": \"ST\",\n    \"682\": \"SA\",\n    \"686\": \"SN\",\n    \"688\": \"RS\",\n    \"690\": \"SC\",\n    \"694\": \"SL\",\n    \"702\": \"SG\",\n    \"703\": \"SK\",\n    \"704\": \"VN\",\n    \"705\": \"SI\",\n    \"706\": \"SO\",\n    \"710\": \"ZA\",\n    \"716\": \"ZW\",\n    \"720\": \"YE\",\n    \"724\": \"ES\",\n    \"728\": \"SS\",\n    \"729\": \"SD\",\n    \"732\": \"EH\",\n    \"736\": \"SD\",\n    \"740\": \"SR\",\n    \"744\": \"SJ\",\n    \"748\": \"SZ\",\n    \"752\": \"SE\",\n    \"756\": \"CH\",\n    \"760\": \"SY\",\n    \"762\": \"TJ\",\n    \"764\": \"TH\",\n    \"768\": \"TG\",\n    \"772\": \"TK\",\n    \"776\": \"TO\",\n    \"780\": \"TT\",\n    \"784\": \"AE\",\n    \"788\": \"TN\",\n    \"792\": \"TR\",\n    \"795\": \"TM\",\n    \"796\": \"TC\",\n    \"798\": \"TV\",\n    \"800\": \"UG\",\n    \"804\": \"UA\",\n    \"807\": \"MK\",\n    \"810\": \"RU AM AZ BY EE GE KZ KG LV LT MD TJ TM UA UZ\",\n    \"818\": \"EG\",\n    \"826\": \"GB\",\n    \"830\": \"JE GG\",\n    \"831\": \"GG\",\n    \"832\": \"JE\",\n    \"833\": \"IM\",\n    \"834\": \"TZ\",\n    \"840\": \"US\",\n    \"850\": \"VI\",\n    \"854\": \"BF\",\n    \"858\": \"UY\",\n    \"860\": \"UZ\",\n    \"862\": \"VE\",\n    \"876\": \"WF\",\n    \"882\": \"WS\",\n    \"886\": \"YE\",\n    \"887\": \"YE\",\n    \"890\": \"RS ME SI HR MK BA\",\n    \"891\": \"RS ME\",\n    \"894\": \"ZM\",\n    \"958\": \"AA\",\n    \"959\": \"QM\",\n    \"960\": \"QN\",\n    \"962\": \"QP\",\n    \"963\": \"QQ\",\n    \"964\": \"QR\",\n    \"965\": \"QS\",\n    \"966\": \"QT\",\n    \"967\": \"EU\",\n    \"968\": \"QV\",\n    \"969\": \"QW\",\n    \"970\": \"QX\",\n    \"971\": \"QY\",\n    \"972\": \"QZ\",\n    \"973\": \"XA\",\n    \"974\": \"XB\",\n    \"975\": \"XC\",\n    \"976\": \"XD\",\n    \"977\": \"XE\",\n    \"978\": \"XF\",\n    \"979\": \"XG\",\n    \"980\": \"XH\",\n    \"981\": \"XI\",\n    \"982\": \"XJ\",\n    \"983\": \"XK\",\n    \"984\": \"XL\",\n    \"985\": \"XM\",\n    \"986\": \"XN\",\n    \"987\": \"XO\",\n    \"988\": \"XP\",\n    \"989\": \"XQ\",\n    \"990\": \"XR\",\n    \"991\": \"XS\",\n    \"992\": \"XT\",\n    \"993\": \"XU\",\n    \"994\": \"XV\",\n    \"995\": \"XW\",\n    \"996\": \"XX\",\n    \"997\": \"XY\",\n    \"998\": \"XZ\",\n    \"999\": \"ZZ\",\n    \"004\": \"AF\",\n    \"008\": \"AL\",\n    \"010\": \"AQ\",\n    \"012\": \"DZ\",\n    \"016\": \"AS\",\n    \"020\": \"AD\",\n    \"024\": \"AO\",\n    \"028\": \"AG\",\n    \"031\": \"AZ\",\n    \"032\": \"AR\",\n    \"036\": \"AU\",\n    \"040\": \"AT\",\n    \"044\": \"BS\",\n    \"048\": \"BH\",\n    \"050\": \"BD\",\n    \"051\": \"AM\",\n    \"052\": \"BB\",\n    \"056\": \"BE\",\n    \"060\": \"BM\",\n    \"062\": \"034 143\",\n    \"064\": \"BT\",\n    \"068\": \"BO\",\n    \"070\": \"BA\",\n    \"072\": \"BW\",\n    \"074\": \"BV\",\n    \"076\": \"BR\",\n    \"084\": \"BZ\",\n    \"086\": \"IO\",\n    \"090\": \"SB\",\n    \"092\": \"VG\",\n    \"096\": \"BN\",\n    \"AAA\": \"AA\",\n    \"ABW\": \"AW\",\n    \"AFG\": \"AF\",\n    \"AGO\": \"AO\",\n    \"AIA\": \"AI\",\n    \"ALA\": \"AX\",\n    \"ALB\": \"AL\",\n    \"AN\": \"CW SX BQ\",\n    \"AND\": \"AD\",\n    \"ANT\": \"CW SX BQ\",\n    \"ARE\": \"AE\",\n    \"ARG\": \"AR\",\n    \"ARM\": \"AM\",\n    \"ASC\": \"AC\",\n    \"ASM\": \"AS\",\n    \"ATA\": \"AQ\",\n    \"ATF\": \"TF\",\n    \"ATG\": \"AG\",\n    \"AUS\": \"AU\",\n    \"AUT\": \"AT\",\n    \"AZE\": \"AZ\",\n    \"BDI\": \"BI\",\n    \"BEL\": \"BE\",\n    \"BEN\": \"BJ\",\n    \"BES\": \"BQ\",\n    \"BFA\": \"BF\",\n    \"BGD\": \"BD\",\n    \"BGR\": \"BG\",\n    \"BHR\": \"BH\",\n    \"BHS\": \"BS\",\n    \"BIH\": \"BA\",\n    \"BLM\": \"BL\",\n    \"BLR\": \"BY\",\n    \"BLZ\": \"BZ\",\n    \"BMU\": \"BM\",\n    \"BOL\": \"BO\",\n    \"BRA\": \"BR\",\n    \"BRB\": \"BB\",\n    \"BRN\": \"BN\",\n    \"BTN\": \"BT\",\n    \"BU\": \"MM\",\n    \"BUR\": \"MM\",\n    \"BVT\": \"BV\",\n    \"BWA\": \"BW\",\n    \"CAF\": \"CF\",\n    \"CAN\": \"CA\",\n    \"CCK\": \"CC\",\n    \"CHE\": \"CH\",\n    \"CHL\": \"CL\",\n    \"CHN\": \"CN\",\n    \"CIV\": \"CI\",\n    \"CMR\": \"CM\",\n    \"COD\": \"CD\",\n    \"COG\": \"CG\",\n    \"COK\": \"CK\",\n    \"COL\": \"CO\",\n    \"COM\": \"KM\",\n    \"CPT\": \"CP\",\n    \"CPV\": \"CV\",\n    \"CRI\": \"CR\",\n    \"CS\": \"RS ME\",\n    \"CT\": \"KI\",\n    \"CUB\": \"CU\",\n    \"CUW\": \"CW\",\n    \"CXR\": \"CX\",\n    \"CYM\": \"KY\",\n    \"CYP\": \"CY\",\n    \"CZE\": \"CZ\",\n    \"DD\": \"DE\",\n    \"DDR\": \"DE\",\n    \"DEU\": \"DE\",\n    \"DGA\": \"DG\",\n    \"DJI\": \"DJ\",\n    \"DMA\": \"DM\",\n    \"DNK\": \"DK\",\n    \"DOM\": \"DO\",\n    \"DY\": \"BJ\",\n    \"DZA\": \"DZ\",\n    \"ECU\": \"EC\",\n    \"EGY\": \"EG\",\n    \"ERI\": \"ER\",\n    \"ESH\": \"EH\",\n    \"ESP\": \"ES\",\n    \"EST\": \"EE\",\n    \"ETH\": \"ET\",\n    \"FIN\": \"FI\",\n    \"FJI\": \"FJ\",\n    \"FLK\": \"FK\",\n    \"FQ\": \"AQ TF\",\n    \"FRA\": \"FR\",\n    \"FRO\": \"FO\",\n    \"FSM\": \"FM\",\n    \"FX\": \"FR\",\n    \"FXX\": \"FR\",\n    \"GAB\": \"GA\",\n    \"GBR\": \"GB\",\n    \"GEO\": \"GE\",\n    \"GGY\": \"GG\",\n    \"GHA\": \"GH\",\n    \"GIB\": \"GI\",\n    \"GIN\": \"GN\",\n    \"GLP\": \"GP\",\n    \"GMB\": \"GM\",\n    \"GNB\": \"GW\",\n    \"GNQ\": \"GQ\",\n    \"GRC\": \"GR\",\n    \"GRD\": \"GD\",\n    \"GRL\": \"GL\",\n    \"GTM\": \"GT\",\n    \"GUF\": \"GF\",\n    \"GUM\": \"GU\",\n    \"GUY\": \"GY\",\n    \"HKG\": \"HK\",\n    \"HMD\": \"HM\",\n    \"HND\": \"HN\",\n    \"HRV\": \"HR\",\n    \"HTI\": \"HT\",\n    \"HUN\": \"HU\",\n    \"HV\": \"BF\",\n    \"IDN\": \"ID\",\n    \"IMN\": \"IM\",\n    \"IND\": \"IN\",\n    \"IOT\": \"IO\",\n    \"IRL\": \"IE\",\n    \"IRN\": \"IR\",\n    \"IRQ\": \"IQ\",\n    \"ISL\": \"IS\",\n    \"ISR\": \"IL\",\n    \"ITA\": \"IT\",\n    \"JAM\": \"JM\",\n    \"JEY\": \"JE\",\n    \"JOR\": \"JO\",\n    \"JPN\": \"JP\",\n    \"JT\": \"UM\",\n    \"KAZ\": \"KZ\",\n    \"KEN\": \"KE\",\n    \"KGZ\": \"KG\",\n    \"KHM\": \"KH\",\n    \"KIR\": \"KI\",\n    \"KNA\": \"KN\",\n    \"KOR\": \"KR\",\n    \"KWT\": \"KW\",\n    \"LAO\": \"LA\",\n    \"LBN\": \"LB\",\n    \"LBR\": \"LR\",\n    \"LBY\": \"LY\",\n    \"LCA\": \"LC\",\n    \"LIE\": \"LI\",\n    \"LKA\": \"LK\",\n    \"LSO\": \"LS\",\n    \"LTU\": \"LT\",\n    \"LUX\": \"LU\",\n    \"LVA\": \"LV\",\n    \"MAC\": \"MO\",\n    \"MAF\": \"MF\",\n    \"MAR\": \"MA\",\n    \"MCO\": \"MC\",\n    \"MDA\": \"MD\",\n    \"MDG\": \"MG\",\n    \"MDV\": \"MV\",\n    \"MEX\": \"MX\",\n    \"MHL\": \"MH\",\n    \"MI\": \"UM\",\n    \"MKD\": \"MK\",\n    \"MLI\": \"ML\",\n    \"MLT\": \"MT\",\n    \"MMR\": \"MM\",\n    \"MNE\": \"ME\",\n    \"MNG\": \"MN\",\n    \"MNP\": \"MP\",\n    \"MOZ\": \"MZ\",\n    \"MRT\": \"MR\",\n    \"MSR\": \"MS\",\n    \"MTQ\": \"MQ\",\n    \"MUS\": \"MU\",\n    \"MWI\": \"MW\",\n    \"MYS\": \"MY\",\n    \"MYT\": \"YT\",\n    \"NAM\": \"NA\",\n    \"NCL\": \"NC\",\n    \"NER\": \"NE\",\n    \"NFK\": \"NF\",\n    \"NGA\": \"NG\",\n    \"NH\": \"VU\",\n    \"NIC\": \"NI\",\n    \"NIU\": \"NU\",\n    \"NLD\": \"NL\",\n    \"NOR\": \"NO\",\n    \"NPL\": \"NP\",\n    \"NQ\": \"AQ\",\n    \"NRU\": \"NR\",\n    \"NT\": \"SA IQ\",\n    \"NTZ\": \"SA IQ\",\n    \"NZL\": \"NZ\",\n    \"OMN\": \"OM\",\n    \"PAK\": \"PK\",\n    \"PAN\": \"PA\",\n    \"PC\": \"FM MH MP PW\",\n    \"PCN\": \"PN\",\n    \"PER\": \"PE\",\n    \"PHL\": \"PH\",\n    \"PLW\": \"PW\",\n    \"PNG\": \"PG\",\n    \"POL\": \"PL\",\n    \"PRI\": \"PR\",\n    \"PRK\": \"KP\",\n    \"PRT\": \"PT\",\n    \"PRY\": \"PY\",\n    \"PSE\": \"PS\",\n    \"PU\": \"UM\",\n    \"PYF\": \"PF\",\n    \"PZ\": \"PA\",\n    \"QAT\": \"QA\",\n    \"QMM\": \"QM\",\n    \"QNN\": \"QN\",\n    \"QPP\": \"QP\",\n    \"QQQ\": \"QQ\",\n    \"QRR\": \"QR\",\n    \"QSS\": \"QS\",\n    \"QTT\": \"QT\",\n    \"QU\": \"EU\",\n    \"QUU\": \"EU\",\n    \"QVV\": \"QV\",\n    \"QWW\": \"QW\",\n    \"QXX\": \"QX\",\n    \"QYY\": \"QY\",\n    \"QZZ\": \"QZ\",\n    \"REU\": \"RE\",\n    \"RH\": \"ZW\",\n    \"ROU\": \"RO\",\n    \"RUS\": \"RU\",\n    \"RWA\": \"RW\",\n    \"SAU\": \"SA\",\n    \"SCG\": \"RS ME\",\n    \"SDN\": \"SD\",\n    \"SEN\": \"SN\",\n    \"SGP\": \"SG\",\n    \"SGS\": \"GS\",\n    \"SHN\": \"SH\",\n    \"SJM\": \"SJ\",\n    \"SLB\": \"SB\",\n    \"SLE\": \"SL\",\n    \"SLV\": \"SV\",\n    \"SMR\": \"SM\",\n    \"SOM\": \"SO\",\n    \"SPM\": \"PM\",\n    \"SRB\": \"RS\",\n    \"SSD\": \"SS\",\n    \"STP\": \"ST\",\n    \"SU\": \"RU AM AZ BY EE GE KZ KG LV LT MD TJ TM UA UZ\",\n    \"SUN\": \"RU AM AZ BY EE GE KZ KG LV LT MD TJ TM UA UZ\",\n    \"SUR\": \"SR\",\n    \"SVK\": \"SK\",\n    \"SVN\": \"SI\",\n    \"SWE\": \"SE\",\n    \"SWZ\": \"SZ\",\n    \"SXM\": \"SX\",\n    \"SYC\": \"SC\",\n    \"SYR\": \"SY\",\n    \"TAA\": \"TA\",\n    \"TCA\": \"TC\",\n    \"TCD\": \"TD\",\n    \"TGO\": \"TG\",\n    \"THA\": \"TH\",\n    \"TJK\": \"TJ\",\n    \"TKL\": \"TK\",\n    \"TKM\": \"TM\",\n    \"TLS\": \"TL\",\n    \"TMP\": \"TL\",\n    \"TON\": \"TO\",\n    \"TP\": \"TL\",\n    \"TTO\": \"TT\",\n    \"TUN\": \"TN\",\n    \"TUR\": \"TR\",\n    \"TUV\": \"TV\",\n    \"TWN\": \"TW\",\n    \"TZA\": \"TZ\",\n    \"UGA\": \"UG\",\n    \"UK\": \"GB\",\n    \"UKR\": \"UA\",\n    \"UMI\": \"UM\",\n    \"URY\": \"UY\",\n    \"USA\": \"US\",\n    \"UZB\": \"UZ\",\n    \"VAT\": \"VA\",\n    \"VCT\": \"VC\",\n    \"VD\": \"VN\",\n    \"VEN\": \"VE\",\n    \"VGB\": \"VG\",\n    \"VIR\": \"VI\",\n    \"VNM\": \"VN\",\n    \"VUT\": \"VU\",\n    \"WK\": \"UM\",\n    \"WLF\": \"WF\",\n    \"WSM\": \"WS\",\n    \"XAA\": \"XA\",\n    \"XBB\": \"XB\",\n    \"XCC\": \"XC\",\n    \"XDD\": \"XD\",\n    \"XEE\": \"XE\",\n    \"XFF\": \"XF\",\n    \"XGG\": \"XG\",\n    \"XHH\": \"XH\",\n    \"XII\": \"XI\",\n    \"XJJ\": \"XJ\",\n    \"XKK\": \"XK\",\n    \"XLL\": \"XL\",\n    \"XMM\": \"XM\",\n    \"XNN\": \"XN\",\n    \"XOO\": \"XO\",\n    \"XPP\": \"XP\",\n    \"XQQ\": \"XQ\",\n    \"XRR\": \"XR\",\n    \"XSS\": \"XS\",\n    \"XTT\": \"XT\",\n    \"XUU\": \"XU\",\n    \"XVV\": \"XV\",\n    \"XWW\": \"XW\",\n    \"XXX\": \"XX\",\n    \"XYY\": \"XY\",\n    \"XZZ\": \"XZ\",\n    \"YD\": \"YE\",\n    \"YEM\": \"YE\",\n    \"YMD\": \"YE\",\n    \"YU\": \"RS ME\",\n    \"YUG\": \"RS ME\",\n    \"ZAF\": \"ZA\",\n    \"ZAR\": \"CD\",\n    \"ZMB\": \"ZM\",\n    \"ZR\": \"CD\",\n    \"ZWE\": \"ZW\",\n    \"ZZZ\": \"ZZ\"\n};\nexports.scriptAlias = {\n    \"Qaai\": \"Zinh\"\n};\nexports.variantAlias = {\n    \"heploc\": \"alalc97\",\n    \"polytoni\": \"polyton\"\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.canonicalizeUnicodeLocaleId = exports.canonicalizeUnicodeLanguageId = void 0;\nvar tslib_1 = require(\"tslib\");\nvar aliases_generated_1 = require(\"./aliases.generated\");\nvar parser_1 = require(\"./parser\");\nvar likelySubtags_generated_1 = require(\"./likelySubtags.generated\");\nvar emitter_1 = require(\"./emitter\");\nfunction canonicalizeAttrs(strs) {\n    return Object.keys(strs.reduce(function (all, str) {\n        all[str.toLowerCase()] = 1;\n        return all;\n    }, {})).sort();\n}\nfunction canonicalizeKVs(arr) {\n    var all = {};\n    var result = [];\n    for (var _i = 0, arr_1 = arr; _i < arr_1.length; _i++) {\n        var kv = arr_1[_i];\n        if (kv[0] in all) {\n            continue;\n        }\n        all[kv[0]] = 1;\n        if (!kv[1] || kv[1] === 'true') {\n            result.push([kv[0].toLowerCase()]);\n        }\n        else {\n            result.push([kv[0].toLowerCase(), kv[1].toLowerCase()]);\n        }\n    }\n    return result.sort(compareKV);\n}\nfunction compareKV(t1, t2) {\n    return t1[0] < t2[0] ? -1 : t1[0] > t2[0] ? 1 : 0;\n}\nfunction compareExtension(e1, e2) {\n    return e1.type < e2.type ? -1 : e1.type > e2.type ? 1 : 0;\n}\nfunction mergeVariants(v1, v2) {\n    var result = (0, tslib_1.__spreadArray)([], v1, true);\n    for (var _i = 0, v2_1 = v2; _i < v2_1.length; _i++) {\n        var v = v2_1[_i];\n        if (v1.indexOf(v) < 0) {\n            result.push(v);\n        }\n    }\n    return result;\n}\n/**\n * CAVEAT: We don't do this section in the spec bc they have no JSON data\n * Use the bcp47 data to replace keys, types, tfields, and tvalues by their canonical forms. See Section 3.6.4 U Extension Data Files) and Section 3.7.1 T Extension Data Files. The aliases are in the alias attribute value, while the canonical is in the name attribute value. For example,\nBecause of the following bcp47 data:\n<key name=\"ms\"…>…<type name=\"uksystem\" … alias=\"imperial\" … />…</key>\nWe get the following transformation:\nen-u-ms-imperial ⇒ en-u-ms-uksystem\n * @param lang\n */\nfunction canonicalizeUnicodeLanguageId(unicodeLanguageId) {\n    /**\n     * If the language subtag matches the type attribute of a languageAlias element in Supplemental Data, replace the language subtag with the replacement value.\n     *  1. If there are additional subtags in the replacement value, add them to the result, but only if there is no corresponding subtag already in the tag.\n     *  2. Five special deprecated grandfathered codes (such as i-default) are in type attributes, and are also replaced.\n     */\n    // From https://github.com/unicode-org/icu/blob/master/icu4j/main/classes/core/src/com/ibm/icu/util/ULocale.java#L1246\n    // Try language _ variant\n    var finalLangAst = unicodeLanguageId;\n    if (unicodeLanguageId.variants.length) {\n        var replacedLang_1 = '';\n        for (var _i = 0, _a = unicodeLanguageId.variants; _i < _a.length; _i++) {\n            var variant = _a[_i];\n            if ((replacedLang_1 =\n                aliases_generated_1.languageAlias[(0, emitter_1.emitUnicodeLanguageId)({\n                    lang: unicodeLanguageId.lang,\n                    variants: [variant],\n                })])) {\n                var replacedLangAst = (0, parser_1.parseUnicodeLanguageId)(replacedLang_1.split(parser_1.SEPARATOR));\n                finalLangAst = {\n                    lang: replacedLangAst.lang,\n                    script: finalLangAst.script || replacedLangAst.script,\n                    region: finalLangAst.region || replacedLangAst.region,\n                    variants: mergeVariants(finalLangAst.variants, replacedLangAst.variants),\n                };\n                break;\n            }\n        }\n    }\n    // language _ script _ country\n    // ug-Arab-CN -> ug-CN\n    if (finalLangAst.script && finalLangAst.region) {\n        var replacedLang_2 = aliases_generated_1.languageAlias[(0, emitter_1.emitUnicodeLanguageId)({\n            lang: finalLangAst.lang,\n            script: finalLangAst.script,\n            region: finalLangAst.region,\n            variants: [],\n        })];\n        if (replacedLang_2) {\n            var replacedLangAst = (0, parser_1.parseUnicodeLanguageId)(replacedLang_2.split(parser_1.SEPARATOR));\n            finalLangAst = {\n                lang: replacedLangAst.lang,\n                script: replacedLangAst.script,\n                region: replacedLangAst.region,\n                variants: finalLangAst.variants,\n            };\n        }\n    }\n    // language _ country\n    // eg. az_AZ -> az_Latn_A\n    if (finalLangAst.region) {\n        var replacedLang_3 = aliases_generated_1.languageAlias[(0, emitter_1.emitUnicodeLanguageId)({\n            lang: finalLangAst.lang,\n            region: finalLangAst.region,\n            variants: [],\n        })];\n        if (replacedLang_3) {\n            var replacedLangAst = (0, parser_1.parseUnicodeLanguageId)(replacedLang_3.split(parser_1.SEPARATOR));\n            finalLangAst = {\n                lang: replacedLangAst.lang,\n                script: finalLangAst.script || replacedLangAst.script,\n                region: replacedLangAst.region,\n                variants: finalLangAst.variants,\n            };\n        }\n    }\n    // only language\n    // e.g. twi -> ak\n    var replacedLang = aliases_generated_1.languageAlias[(0, emitter_1.emitUnicodeLanguageId)({\n        lang: finalLangAst.lang,\n        variants: [],\n    })];\n    if (replacedLang) {\n        var replacedLangAst = (0, parser_1.parseUnicodeLanguageId)(replacedLang.split(parser_1.SEPARATOR));\n        finalLangAst = {\n            lang: replacedLangAst.lang,\n            script: finalLangAst.script || replacedLangAst.script,\n            region: finalLangAst.region || replacedLangAst.region,\n            variants: finalLangAst.variants,\n        };\n    }\n    if (finalLangAst.region) {\n        var region = finalLangAst.region.toUpperCase();\n        var regionAlias = aliases_generated_1.territoryAlias[region];\n        var replacedRegion = void 0;\n        if (regionAlias) {\n            var regions = regionAlias.split(' ');\n            replacedRegion = regions[0];\n            var likelySubtag = likelySubtags_generated_1.likelySubtags[(0, emitter_1.emitUnicodeLanguageId)({\n                lang: finalLangAst.lang,\n                script: finalLangAst.script,\n                variants: [],\n            })];\n            if (likelySubtag) {\n                var likelyRegion = (0, parser_1.parseUnicodeLanguageId)(likelySubtag.split(parser_1.SEPARATOR)).region;\n                if (likelyRegion && regions.indexOf(likelyRegion) > -1) {\n                    replacedRegion = likelyRegion;\n                }\n            }\n        }\n        if (replacedRegion) {\n            finalLangAst.region = replacedRegion;\n        }\n        finalLangAst.region = finalLangAst.region.toUpperCase();\n    }\n    if (finalLangAst.script) {\n        finalLangAst.script =\n            finalLangAst.script[0].toUpperCase() +\n                finalLangAst.script.slice(1).toLowerCase();\n        if (aliases_generated_1.scriptAlias[finalLangAst.script]) {\n            finalLangAst.script = aliases_generated_1.scriptAlias[finalLangAst.script];\n        }\n    }\n    if (finalLangAst.variants.length) {\n        for (var i = 0; i < finalLangAst.variants.length; i++) {\n            var variant = finalLangAst.variants[i].toLowerCase();\n            if (aliases_generated_1.variantAlias[variant]) {\n                var alias = aliases_generated_1.variantAlias[variant];\n                if ((0, parser_1.isUnicodeVariantSubtag)(alias)) {\n                    finalLangAst.variants[i] = alias;\n                }\n                else if ((0, parser_1.isUnicodeLanguageSubtag)(alias)) {\n                    // Yes this can happen per the spec\n                    finalLangAst.lang = alias;\n                }\n            }\n        }\n        finalLangAst.variants.sort();\n    }\n    return finalLangAst;\n}\nexports.canonicalizeUnicodeLanguageId = canonicalizeUnicodeLanguageId;\n/**\n * Canonicalize based on\n * https://www.unicode.org/reports/tr35/tr35.html#Canonical_Unicode_Locale_Identifiers\n * https://tc39.es/ecma402/#sec-canonicalizeunicodelocaleid\n * IMPORTANT: This modifies the object inline\n * @param locale\n */\nfunction canonicalizeUnicodeLocaleId(locale) {\n    locale.lang = canonicalizeUnicodeLanguageId(locale.lang);\n    if (locale.extensions) {\n        for (var _i = 0, _a = locale.extensions; _i < _a.length; _i++) {\n            var extension = _a[_i];\n            switch (extension.type) {\n                case 'u':\n                    extension.keywords = canonicalizeKVs(extension.keywords);\n                    if (extension.attributes) {\n                        extension.attributes = canonicalizeAttrs(extension.attributes);\n                    }\n                    break;\n                case 't':\n                    if (extension.lang) {\n                        extension.lang = canonicalizeUnicodeLanguageId(extension.lang);\n                    }\n                    extension.fields = canonicalizeKVs(extension.fields);\n                    break;\n                default:\n                    extension.value = extension.value.toLowerCase();\n                    break;\n            }\n        }\n        locale.extensions.sort(compareExtension);\n    }\n    return locale;\n}\nexports.canonicalizeUnicodeLocaleId = canonicalizeUnicodeLocaleId;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.emitUnicodeLocaleId = exports.emitUnicodeLanguageId = void 0;\nvar tslib_1 = require(\"tslib\");\nfunction emitUnicodeLanguageId(lang) {\n    if (!lang) {\n        return '';\n    }\n    return (0, tslib_1.__spreadArray)([lang.lang, lang.script, lang.region], (lang.variants || []), true).filter(Boolean)\n        .join('-');\n}\nexports.emitUnicodeLanguageId = emitUnicodeLanguageId;\nfunction emitUnicodeLocaleId(_a) {\n    var lang = _a.lang, extensions = _a.extensions;\n    var chunks = [emitUnicodeLanguageId(lang)];\n    for (var _i = 0, extensions_1 = extensions; _i < extensions_1.length; _i++) {\n        var ext = extensions_1[_i];\n        chunks.push(ext.type);\n        switch (ext.type) {\n            case 'u':\n                chunks.push.apply(chunks, (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], ext.attributes, false), ext.keywords.reduce(function (all, kv) { return all.concat(kv); }, []), false));\n                break;\n            case 't':\n                chunks.push.apply(chunks, (0, tslib_1.__spreadArray)([emitUnicodeLanguageId(ext.lang)], ext.fields.reduce(function (all, kv) { return all.concat(kv); }, []), false));\n                break;\n            default:\n                chunks.push(ext.value);\n                break;\n        }\n    }\n    return chunks.filter(Boolean).join('-');\n}\nexports.emitUnicodeLocaleId = emitUnicodeLocaleId;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.likelySubtags = void 0;\n/* @generated */\n// prettier-ignore  \nexports.likelySubtags = {\n    \"aa\": \"aa-Latn-ET\",\n    \"aai\": \"aai-Latn-ZZ\",\n    \"aak\": \"aak-Latn-ZZ\",\n    \"aau\": \"aau-Latn-ZZ\",\n    \"ab\": \"ab-Cyrl-GE\",\n    \"abi\": \"abi-Latn-ZZ\",\n    \"abq\": \"abq-Cyrl-ZZ\",\n    \"abr\": \"abr-Latn-GH\",\n    \"abt\": \"abt-Latn-ZZ\",\n    \"aby\": \"aby-Latn-ZZ\",\n    \"acd\": \"acd-Latn-ZZ\",\n    \"ace\": \"ace-Latn-ID\",\n    \"ach\": \"ach-Latn-UG\",\n    \"ada\": \"ada-Latn-GH\",\n    \"ade\": \"ade-Latn-ZZ\",\n    \"adj\": \"adj-Latn-ZZ\",\n    \"adp\": \"adp-Tibt-BT\",\n    \"ady\": \"ady-Cyrl-RU\",\n    \"adz\": \"adz-Latn-ZZ\",\n    \"ae\": \"ae-Avst-IR\",\n    \"aeb\": \"aeb-Arab-TN\",\n    \"aey\": \"aey-Latn-ZZ\",\n    \"af\": \"af-Latn-ZA\",\n    \"agc\": \"agc-Latn-ZZ\",\n    \"agd\": \"agd-Latn-ZZ\",\n    \"agg\": \"agg-Latn-ZZ\",\n    \"agm\": \"agm-Latn-ZZ\",\n    \"ago\": \"ago-Latn-ZZ\",\n    \"agq\": \"agq-Latn-CM\",\n    \"aha\": \"aha-Latn-ZZ\",\n    \"ahl\": \"ahl-Latn-ZZ\",\n    \"aho\": \"aho-Ahom-IN\",\n    \"ajg\": \"ajg-Latn-ZZ\",\n    \"ak\": \"ak-Latn-GH\",\n    \"akk\": \"akk-Xsux-IQ\",\n    \"ala\": \"ala-Latn-ZZ\",\n    \"ali\": \"ali-Latn-ZZ\",\n    \"aln\": \"aln-Latn-XK\",\n    \"alt\": \"alt-Cyrl-RU\",\n    \"am\": \"am-Ethi-ET\",\n    \"amm\": \"amm-Latn-ZZ\",\n    \"amn\": \"amn-Latn-ZZ\",\n    \"amo\": \"amo-Latn-NG\",\n    \"amp\": \"amp-Latn-ZZ\",\n    \"an\": \"an-Latn-ES\",\n    \"anc\": \"anc-Latn-ZZ\",\n    \"ank\": \"ank-Latn-ZZ\",\n    \"ann\": \"ann-Latn-ZZ\",\n    \"any\": \"any-Latn-ZZ\",\n    \"aoj\": \"aoj-Latn-ZZ\",\n    \"aom\": \"aom-Latn-ZZ\",\n    \"aoz\": \"aoz-Latn-ID\",\n    \"apc\": \"apc-Arab-ZZ\",\n    \"apd\": \"apd-Arab-TG\",\n    \"ape\": \"ape-Latn-ZZ\",\n    \"apr\": \"apr-Latn-ZZ\",\n    \"aps\": \"aps-Latn-ZZ\",\n    \"apz\": \"apz-Latn-ZZ\",\n    \"ar\": \"ar-Arab-EG\",\n    \"arc\": \"arc-Armi-IR\",\n    \"arc-Nbat\": \"arc-Nbat-JO\",\n    \"arc-Palm\": \"arc-Palm-SY\",\n    \"arh\": \"arh-Latn-ZZ\",\n    \"arn\": \"arn-Latn-CL\",\n    \"aro\": \"aro-Latn-BO\",\n    \"arq\": \"arq-Arab-DZ\",\n    \"ars\": \"ars-Arab-SA\",\n    \"ary\": \"ary-Arab-MA\",\n    \"arz\": \"arz-Arab-EG\",\n    \"as\": \"as-Beng-IN\",\n    \"asa\": \"asa-Latn-TZ\",\n    \"ase\": \"ase-Sgnw-US\",\n    \"asg\": \"asg-Latn-ZZ\",\n    \"aso\": \"aso-Latn-ZZ\",\n    \"ast\": \"ast-Latn-ES\",\n    \"ata\": \"ata-Latn-ZZ\",\n    \"atg\": \"atg-Latn-ZZ\",\n    \"atj\": \"atj-Latn-CA\",\n    \"auy\": \"auy-Latn-ZZ\",\n    \"av\": \"av-Cyrl-RU\",\n    \"avl\": \"avl-Arab-ZZ\",\n    \"avn\": \"avn-Latn-ZZ\",\n    \"avt\": \"avt-Latn-ZZ\",\n    \"avu\": \"avu-Latn-ZZ\",\n    \"awa\": \"awa-Deva-IN\",\n    \"awb\": \"awb-Latn-ZZ\",\n    \"awo\": \"awo-Latn-ZZ\",\n    \"awx\": \"awx-Latn-ZZ\",\n    \"ay\": \"ay-Latn-BO\",\n    \"ayb\": \"ayb-Latn-ZZ\",\n    \"az\": \"az-Latn-AZ\",\n    \"az-Arab\": \"az-Arab-IR\",\n    \"az-IQ\": \"az-Arab-IQ\",\n    \"az-IR\": \"az-Arab-IR\",\n    \"az-RU\": \"az-Cyrl-RU\",\n    \"ba\": \"ba-Cyrl-RU\",\n    \"bal\": \"bal-Arab-PK\",\n    \"ban\": \"ban-Latn-ID\",\n    \"bap\": \"bap-Deva-NP\",\n    \"bar\": \"bar-Latn-AT\",\n    \"bas\": \"bas-Latn-CM\",\n    \"bav\": \"bav-Latn-ZZ\",\n    \"bax\": \"bax-Bamu-CM\",\n    \"bba\": \"bba-Latn-ZZ\",\n    \"bbb\": \"bbb-Latn-ZZ\",\n    \"bbc\": \"bbc-Latn-ID\",\n    \"bbd\": \"bbd-Latn-ZZ\",\n    \"bbj\": \"bbj-Latn-CM\",\n    \"bbp\": \"bbp-Latn-ZZ\",\n    \"bbr\": \"bbr-Latn-ZZ\",\n    \"bcf\": \"bcf-Latn-ZZ\",\n    \"bch\": \"bch-Latn-ZZ\",\n    \"bci\": \"bci-Latn-CI\",\n    \"bcm\": \"bcm-Latn-ZZ\",\n    \"bcn\": \"bcn-Latn-ZZ\",\n    \"bco\": \"bco-Latn-ZZ\",\n    \"bcq\": \"bcq-Ethi-ZZ\",\n    \"bcu\": \"bcu-Latn-ZZ\",\n    \"bdd\": \"bdd-Latn-ZZ\",\n    \"be\": \"be-Cyrl-BY\",\n    \"bef\": \"bef-Latn-ZZ\",\n    \"beh\": \"beh-Latn-ZZ\",\n    \"bej\": \"bej-Arab-SD\",\n    \"bem\": \"bem-Latn-ZM\",\n    \"bet\": \"bet-Latn-ZZ\",\n    \"bew\": \"bew-Latn-ID\",\n    \"bex\": \"bex-Latn-ZZ\",\n    \"bez\": \"bez-Latn-TZ\",\n    \"bfd\": \"bfd-Latn-CM\",\n    \"bfq\": \"bfq-Taml-IN\",\n    \"bft\": \"bft-Arab-PK\",\n    \"bfy\": \"bfy-Deva-IN\",\n    \"bg\": \"bg-Cyrl-BG\",\n    \"bgc\": \"bgc-Deva-IN\",\n    \"bgn\": \"bgn-Arab-PK\",\n    \"bgx\": \"bgx-Grek-TR\",\n    \"bhb\": \"bhb-Deva-IN\",\n    \"bhg\": \"bhg-Latn-ZZ\",\n    \"bhi\": \"bhi-Deva-IN\",\n    \"bhl\": \"bhl-Latn-ZZ\",\n    \"bho\": \"bho-Deva-IN\",\n    \"bhy\": \"bhy-Latn-ZZ\",\n    \"bi\": \"bi-Latn-VU\",\n    \"bib\": \"bib-Latn-ZZ\",\n    \"big\": \"big-Latn-ZZ\",\n    \"bik\": \"bik-Latn-PH\",\n    \"bim\": \"bim-Latn-ZZ\",\n    \"bin\": \"bin-Latn-NG\",\n    \"bio\": \"bio-Latn-ZZ\",\n    \"biq\": \"biq-Latn-ZZ\",\n    \"bjh\": \"bjh-Latn-ZZ\",\n    \"bji\": \"bji-Ethi-ZZ\",\n    \"bjj\": \"bjj-Deva-IN\",\n    \"bjn\": \"bjn-Latn-ID\",\n    \"bjo\": \"bjo-Latn-ZZ\",\n    \"bjr\": \"bjr-Latn-ZZ\",\n    \"bjt\": \"bjt-Latn-SN\",\n    \"bjz\": \"bjz-Latn-ZZ\",\n    \"bkc\": \"bkc-Latn-ZZ\",\n    \"bkm\": \"bkm-Latn-CM\",\n    \"bkq\": \"bkq-Latn-ZZ\",\n    \"bku\": \"bku-Latn-PH\",\n    \"bkv\": \"bkv-Latn-ZZ\",\n    \"blt\": \"blt-Tavt-VN\",\n    \"bm\": \"bm-Latn-ML\",\n    \"bmh\": \"bmh-Latn-ZZ\",\n    \"bmk\": \"bmk-Latn-ZZ\",\n    \"bmq\": \"bmq-Latn-ML\",\n    \"bmu\": \"bmu-Latn-ZZ\",\n    \"bn\": \"bn-Beng-BD\",\n    \"bng\": \"bng-Latn-ZZ\",\n    \"bnm\": \"bnm-Latn-ZZ\",\n    \"bnp\": \"bnp-Latn-ZZ\",\n    \"bo\": \"bo-Tibt-CN\",\n    \"boj\": \"boj-Latn-ZZ\",\n    \"bom\": \"bom-Latn-ZZ\",\n    \"bon\": \"bon-Latn-ZZ\",\n    \"bpy\": \"bpy-Beng-IN\",\n    \"bqc\": \"bqc-Latn-ZZ\",\n    \"bqi\": \"bqi-Arab-IR\",\n    \"bqp\": \"bqp-Latn-ZZ\",\n    \"bqv\": \"bqv-Latn-CI\",\n    \"br\": \"br-Latn-FR\",\n    \"bra\": \"bra-Deva-IN\",\n    \"brh\": \"brh-Arab-PK\",\n    \"brx\": \"brx-Deva-IN\",\n    \"brz\": \"brz-Latn-ZZ\",\n    \"bs\": \"bs-Latn-BA\",\n    \"bsj\": \"bsj-Latn-ZZ\",\n    \"bsq\": \"bsq-Bass-LR\",\n    \"bss\": \"bss-Latn-CM\",\n    \"bst\": \"bst-Ethi-ZZ\",\n    \"bto\": \"bto-Latn-PH\",\n    \"btt\": \"btt-Latn-ZZ\",\n    \"btv\": \"btv-Deva-PK\",\n    \"bua\": \"bua-Cyrl-RU\",\n    \"buc\": \"buc-Latn-YT\",\n    \"bud\": \"bud-Latn-ZZ\",\n    \"bug\": \"bug-Latn-ID\",\n    \"buk\": \"buk-Latn-ZZ\",\n    \"bum\": \"bum-Latn-CM\",\n    \"buo\": \"buo-Latn-ZZ\",\n    \"bus\": \"bus-Latn-ZZ\",\n    \"buu\": \"buu-Latn-ZZ\",\n    \"bvb\": \"bvb-Latn-GQ\",\n    \"bwd\": \"bwd-Latn-ZZ\",\n    \"bwr\": \"bwr-Latn-ZZ\",\n    \"bxh\": \"bxh-Latn-ZZ\",\n    \"bye\": \"bye-Latn-ZZ\",\n    \"byn\": \"byn-Ethi-ER\",\n    \"byr\": \"byr-Latn-ZZ\",\n    \"bys\": \"bys-Latn-ZZ\",\n    \"byv\": \"byv-Latn-CM\",\n    \"byx\": \"byx-Latn-ZZ\",\n    \"bza\": \"bza-Latn-ZZ\",\n    \"bze\": \"bze-Latn-ML\",\n    \"bzf\": \"bzf-Latn-ZZ\",\n    \"bzh\": \"bzh-Latn-ZZ\",\n    \"bzw\": \"bzw-Latn-ZZ\",\n    \"ca\": \"ca-Latn-ES\",\n    \"cad\": \"cad-Latn-US\",\n    \"can\": \"can-Latn-ZZ\",\n    \"cbj\": \"cbj-Latn-ZZ\",\n    \"cch\": \"cch-Latn-NG\",\n    \"ccp\": \"ccp-Cakm-BD\",\n    \"ce\": \"ce-Cyrl-RU\",\n    \"ceb\": \"ceb-Latn-PH\",\n    \"cfa\": \"cfa-Latn-ZZ\",\n    \"cgg\": \"cgg-Latn-UG\",\n    \"ch\": \"ch-Latn-GU\",\n    \"chk\": \"chk-Latn-FM\",\n    \"chm\": \"chm-Cyrl-RU\",\n    \"cho\": \"cho-Latn-US\",\n    \"chp\": \"chp-Latn-CA\",\n    \"chr\": \"chr-Cher-US\",\n    \"cic\": \"cic-Latn-US\",\n    \"cja\": \"cja-Arab-KH\",\n    \"cjm\": \"cjm-Cham-VN\",\n    \"cjv\": \"cjv-Latn-ZZ\",\n    \"ckb\": \"ckb-Arab-IQ\",\n    \"ckl\": \"ckl-Latn-ZZ\",\n    \"cko\": \"cko-Latn-ZZ\",\n    \"cky\": \"cky-Latn-ZZ\",\n    \"cla\": \"cla-Latn-ZZ\",\n    \"cme\": \"cme-Latn-ZZ\",\n    \"cmg\": \"cmg-Soyo-MN\",\n    \"co\": \"co-Latn-FR\",\n    \"cop\": \"cop-Copt-EG\",\n    \"cps\": \"cps-Latn-PH\",\n    \"cr\": \"cr-Cans-CA\",\n    \"crh\": \"crh-Cyrl-UA\",\n    \"crj\": \"crj-Cans-CA\",\n    \"crk\": \"crk-Cans-CA\",\n    \"crl\": \"crl-Cans-CA\",\n    \"crm\": \"crm-Cans-CA\",\n    \"crs\": \"crs-Latn-SC\",\n    \"cs\": \"cs-Latn-CZ\",\n    \"csb\": \"csb-Latn-PL\",\n    \"csw\": \"csw-Cans-CA\",\n    \"ctd\": \"ctd-Pauc-MM\",\n    \"cu\": \"cu-Cyrl-RU\",\n    \"cu-Glag\": \"cu-Glag-BG\",\n    \"cv\": \"cv-Cyrl-RU\",\n    \"cy\": \"cy-Latn-GB\",\n    \"da\": \"da-Latn-DK\",\n    \"dad\": \"dad-Latn-ZZ\",\n    \"daf\": \"daf-Latn-CI\",\n    \"dag\": \"dag-Latn-ZZ\",\n    \"dah\": \"dah-Latn-ZZ\",\n    \"dak\": \"dak-Latn-US\",\n    \"dar\": \"dar-Cyrl-RU\",\n    \"dav\": \"dav-Latn-KE\",\n    \"dbd\": \"dbd-Latn-ZZ\",\n    \"dbq\": \"dbq-Latn-ZZ\",\n    \"dcc\": \"dcc-Arab-IN\",\n    \"ddn\": \"ddn-Latn-ZZ\",\n    \"de\": \"de-Latn-DE\",\n    \"ded\": \"ded-Latn-ZZ\",\n    \"den\": \"den-Latn-CA\",\n    \"dga\": \"dga-Latn-ZZ\",\n    \"dgh\": \"dgh-Latn-ZZ\",\n    \"dgi\": \"dgi-Latn-ZZ\",\n    \"dgl\": \"dgl-Arab-ZZ\",\n    \"dgr\": \"dgr-Latn-CA\",\n    \"dgz\": \"dgz-Latn-ZZ\",\n    \"dia\": \"dia-Latn-ZZ\",\n    \"dje\": \"dje-Latn-NE\",\n    \"dmf\": \"dmf-Medf-NG\",\n    \"dnj\": \"dnj-Latn-CI\",\n    \"dob\": \"dob-Latn-ZZ\",\n    \"doi\": \"doi-Deva-IN\",\n    \"dop\": \"dop-Latn-ZZ\",\n    \"dow\": \"dow-Latn-ZZ\",\n    \"drh\": \"drh-Mong-CN\",\n    \"dri\": \"dri-Latn-ZZ\",\n    \"drs\": \"drs-Ethi-ZZ\",\n    \"dsb\": \"dsb-Latn-DE\",\n    \"dtm\": \"dtm-Latn-ML\",\n    \"dtp\": \"dtp-Latn-MY\",\n    \"dts\": \"dts-Latn-ZZ\",\n    \"dty\": \"dty-Deva-NP\",\n    \"dua\": \"dua-Latn-CM\",\n    \"duc\": \"duc-Latn-ZZ\",\n    \"dud\": \"dud-Latn-ZZ\",\n    \"dug\": \"dug-Latn-ZZ\",\n    \"dv\": \"dv-Thaa-MV\",\n    \"dva\": \"dva-Latn-ZZ\",\n    \"dww\": \"dww-Latn-ZZ\",\n    \"dyo\": \"dyo-Latn-SN\",\n    \"dyu\": \"dyu-Latn-BF\",\n    \"dz\": \"dz-Tibt-BT\",\n    \"dzg\": \"dzg-Latn-ZZ\",\n    \"ebu\": \"ebu-Latn-KE\",\n    \"ee\": \"ee-Latn-GH\",\n    \"efi\": \"efi-Latn-NG\",\n    \"egl\": \"egl-Latn-IT\",\n    \"egy\": \"egy-Egyp-EG\",\n    \"eka\": \"eka-Latn-ZZ\",\n    \"eky\": \"eky-Kali-MM\",\n    \"el\": \"el-Grek-GR\",\n    \"ema\": \"ema-Latn-ZZ\",\n    \"emi\": \"emi-Latn-ZZ\",\n    \"en\": \"en-Latn-US\",\n    \"en-Shaw\": \"en-Shaw-GB\",\n    \"enn\": \"enn-Latn-ZZ\",\n    \"enq\": \"enq-Latn-ZZ\",\n    \"eo\": \"eo-Latn-001\",\n    \"eri\": \"eri-Latn-ZZ\",\n    \"es\": \"es-Latn-ES\",\n    \"esg\": \"esg-Gonm-IN\",\n    \"esu\": \"esu-Latn-US\",\n    \"et\": \"et-Latn-EE\",\n    \"etr\": \"etr-Latn-ZZ\",\n    \"ett\": \"ett-Ital-IT\",\n    \"etu\": \"etu-Latn-ZZ\",\n    \"etx\": \"etx-Latn-ZZ\",\n    \"eu\": \"eu-Latn-ES\",\n    \"ewo\": \"ewo-Latn-CM\",\n    \"ext\": \"ext-Latn-ES\",\n    \"eza\": \"eza-Latn-ZZ\",\n    \"fa\": \"fa-Arab-IR\",\n    \"faa\": \"faa-Latn-ZZ\",\n    \"fab\": \"fab-Latn-ZZ\",\n    \"fag\": \"fag-Latn-ZZ\",\n    \"fai\": \"fai-Latn-ZZ\",\n    \"fan\": \"fan-Latn-GQ\",\n    \"ff\": \"ff-Latn-SN\",\n    \"ff-Adlm\": \"ff-Adlm-GN\",\n    \"ffi\": \"ffi-Latn-ZZ\",\n    \"ffm\": \"ffm-Latn-ML\",\n    \"fi\": \"fi-Latn-FI\",\n    \"fia\": \"fia-Arab-SD\",\n    \"fil\": \"fil-Latn-PH\",\n    \"fit\": \"fit-Latn-SE\",\n    \"fj\": \"fj-Latn-FJ\",\n    \"flr\": \"flr-Latn-ZZ\",\n    \"fmp\": \"fmp-Latn-ZZ\",\n    \"fo\": \"fo-Latn-FO\",\n    \"fod\": \"fod-Latn-ZZ\",\n    \"fon\": \"fon-Latn-BJ\",\n    \"for\": \"for-Latn-ZZ\",\n    \"fpe\": \"fpe-Latn-ZZ\",\n    \"fqs\": \"fqs-Latn-ZZ\",\n    \"fr\": \"fr-Latn-FR\",\n    \"frc\": \"frc-Latn-US\",\n    \"frp\": \"frp-Latn-FR\",\n    \"frr\": \"frr-Latn-DE\",\n    \"frs\": \"frs-Latn-DE\",\n    \"fub\": \"fub-Arab-CM\",\n    \"fud\": \"fud-Latn-WF\",\n    \"fue\": \"fue-Latn-ZZ\",\n    \"fuf\": \"fuf-Latn-GN\",\n    \"fuh\": \"fuh-Latn-ZZ\",\n    \"fuq\": \"fuq-Latn-NE\",\n    \"fur\": \"fur-Latn-IT\",\n    \"fuv\": \"fuv-Latn-NG\",\n    \"fuy\": \"fuy-Latn-ZZ\",\n    \"fvr\": \"fvr-Latn-SD\",\n    \"fy\": \"fy-Latn-NL\",\n    \"ga\": \"ga-Latn-IE\",\n    \"gaa\": \"gaa-Latn-GH\",\n    \"gaf\": \"gaf-Latn-ZZ\",\n    \"gag\": \"gag-Latn-MD\",\n    \"gah\": \"gah-Latn-ZZ\",\n    \"gaj\": \"gaj-Latn-ZZ\",\n    \"gam\": \"gam-Latn-ZZ\",\n    \"gan\": \"gan-Hans-CN\",\n    \"gaw\": \"gaw-Latn-ZZ\",\n    \"gay\": \"gay-Latn-ID\",\n    \"gba\": \"gba-Latn-ZZ\",\n    \"gbf\": \"gbf-Latn-ZZ\",\n    \"gbm\": \"gbm-Deva-IN\",\n    \"gby\": \"gby-Latn-ZZ\",\n    \"gbz\": \"gbz-Arab-IR\",\n    \"gcr\": \"gcr-Latn-GF\",\n    \"gd\": \"gd-Latn-GB\",\n    \"gde\": \"gde-Latn-ZZ\",\n    \"gdn\": \"gdn-Latn-ZZ\",\n    \"gdr\": \"gdr-Latn-ZZ\",\n    \"geb\": \"geb-Latn-ZZ\",\n    \"gej\": \"gej-Latn-ZZ\",\n    \"gel\": \"gel-Latn-ZZ\",\n    \"gez\": \"gez-Ethi-ET\",\n    \"gfk\": \"gfk-Latn-ZZ\",\n    \"ggn\": \"ggn-Deva-NP\",\n    \"ghs\": \"ghs-Latn-ZZ\",\n    \"gil\": \"gil-Latn-KI\",\n    \"gim\": \"gim-Latn-ZZ\",\n    \"gjk\": \"gjk-Arab-PK\",\n    \"gjn\": \"gjn-Latn-ZZ\",\n    \"gju\": \"gju-Arab-PK\",\n    \"gkn\": \"gkn-Latn-ZZ\",\n    \"gkp\": \"gkp-Latn-ZZ\",\n    \"gl\": \"gl-Latn-ES\",\n    \"glk\": \"glk-Arab-IR\",\n    \"gmm\": \"gmm-Latn-ZZ\",\n    \"gmv\": \"gmv-Ethi-ZZ\",\n    \"gn\": \"gn-Latn-PY\",\n    \"gnd\": \"gnd-Latn-ZZ\",\n    \"gng\": \"gng-Latn-ZZ\",\n    \"god\": \"god-Latn-ZZ\",\n    \"gof\": \"gof-Ethi-ZZ\",\n    \"goi\": \"goi-Latn-ZZ\",\n    \"gom\": \"gom-Deva-IN\",\n    \"gon\": \"gon-Telu-IN\",\n    \"gor\": \"gor-Latn-ID\",\n    \"gos\": \"gos-Latn-NL\",\n    \"got\": \"got-Goth-UA\",\n    \"grb\": \"grb-Latn-ZZ\",\n    \"grc\": \"grc-Cprt-CY\",\n    \"grc-Linb\": \"grc-Linb-GR\",\n    \"grt\": \"grt-Beng-IN\",\n    \"grw\": \"grw-Latn-ZZ\",\n    \"gsw\": \"gsw-Latn-CH\",\n    \"gu\": \"gu-Gujr-IN\",\n    \"gub\": \"gub-Latn-BR\",\n    \"guc\": \"guc-Latn-CO\",\n    \"gud\": \"gud-Latn-ZZ\",\n    \"gur\": \"gur-Latn-GH\",\n    \"guw\": \"guw-Latn-ZZ\",\n    \"gux\": \"gux-Latn-ZZ\",\n    \"guz\": \"guz-Latn-KE\",\n    \"gv\": \"gv-Latn-IM\",\n    \"gvf\": \"gvf-Latn-ZZ\",\n    \"gvr\": \"gvr-Deva-NP\",\n    \"gvs\": \"gvs-Latn-ZZ\",\n    \"gwc\": \"gwc-Arab-ZZ\",\n    \"gwi\": \"gwi-Latn-CA\",\n    \"gwt\": \"gwt-Arab-ZZ\",\n    \"gyi\": \"gyi-Latn-ZZ\",\n    \"ha\": \"ha-Latn-NG\",\n    \"ha-CM\": \"ha-Arab-CM\",\n    \"ha-SD\": \"ha-Arab-SD\",\n    \"hag\": \"hag-Latn-ZZ\",\n    \"hak\": \"hak-Hans-CN\",\n    \"ham\": \"ham-Latn-ZZ\",\n    \"haw\": \"haw-Latn-US\",\n    \"haz\": \"haz-Arab-AF\",\n    \"hbb\": \"hbb-Latn-ZZ\",\n    \"hdy\": \"hdy-Ethi-ZZ\",\n    \"he\": \"he-Hebr-IL\",\n    \"hhy\": \"hhy-Latn-ZZ\",\n    \"hi\": \"hi-Deva-IN\",\n    \"hia\": \"hia-Latn-ZZ\",\n    \"hif\": \"hif-Latn-FJ\",\n    \"hig\": \"hig-Latn-ZZ\",\n    \"hih\": \"hih-Latn-ZZ\",\n    \"hil\": \"hil-Latn-PH\",\n    \"hla\": \"hla-Latn-ZZ\",\n    \"hlu\": \"hlu-Hluw-TR\",\n    \"hmd\": \"hmd-Plrd-CN\",\n    \"hmt\": \"hmt-Latn-ZZ\",\n    \"hnd\": \"hnd-Arab-PK\",\n    \"hne\": \"hne-Deva-IN\",\n    \"hnj\": \"hnj-Hmng-LA\",\n    \"hnn\": \"hnn-Latn-PH\",\n    \"hno\": \"hno-Arab-PK\",\n    \"ho\": \"ho-Latn-PG\",\n    \"hoc\": \"hoc-Deva-IN\",\n    \"hoj\": \"hoj-Deva-IN\",\n    \"hot\": \"hot-Latn-ZZ\",\n    \"hr\": \"hr-Latn-HR\",\n    \"hsb\": \"hsb-Latn-DE\",\n    \"hsn\": \"hsn-Hans-CN\",\n    \"ht\": \"ht-Latn-HT\",\n    \"hu\": \"hu-Latn-HU\",\n    \"hui\": \"hui-Latn-ZZ\",\n    \"hy\": \"hy-Armn-AM\",\n    \"hz\": \"hz-Latn-NA\",\n    \"ia\": \"ia-Latn-001\",\n    \"ian\": \"ian-Latn-ZZ\",\n    \"iar\": \"iar-Latn-ZZ\",\n    \"iba\": \"iba-Latn-MY\",\n    \"ibb\": \"ibb-Latn-NG\",\n    \"iby\": \"iby-Latn-ZZ\",\n    \"ica\": \"ica-Latn-ZZ\",\n    \"ich\": \"ich-Latn-ZZ\",\n    \"id\": \"id-Latn-ID\",\n    \"idd\": \"idd-Latn-ZZ\",\n    \"idi\": \"idi-Latn-ZZ\",\n    \"idu\": \"idu-Latn-ZZ\",\n    \"ife\": \"ife-Latn-TG\",\n    \"ig\": \"ig-Latn-NG\",\n    \"igb\": \"igb-Latn-ZZ\",\n    \"ige\": \"ige-Latn-ZZ\",\n    \"ii\": \"ii-Yiii-CN\",\n    \"ijj\": \"ijj-Latn-ZZ\",\n    \"ik\": \"ik-Latn-US\",\n    \"ikk\": \"ikk-Latn-ZZ\",\n    \"ikt\": \"ikt-Latn-CA\",\n    \"ikw\": \"ikw-Latn-ZZ\",\n    \"ikx\": \"ikx-Latn-ZZ\",\n    \"ilo\": \"ilo-Latn-PH\",\n    \"imo\": \"imo-Latn-ZZ\",\n    \"in\": \"in-Latn-ID\",\n    \"inh\": \"inh-Cyrl-RU\",\n    \"io\": \"io-Latn-001\",\n    \"iou\": \"iou-Latn-ZZ\",\n    \"iri\": \"iri-Latn-ZZ\",\n    \"is\": \"is-Latn-IS\",\n    \"it\": \"it-Latn-IT\",\n    \"iu\": \"iu-Cans-CA\",\n    \"iw\": \"iw-Hebr-IL\",\n    \"iwm\": \"iwm-Latn-ZZ\",\n    \"iws\": \"iws-Latn-ZZ\",\n    \"izh\": \"izh-Latn-RU\",\n    \"izi\": \"izi-Latn-ZZ\",\n    \"ja\": \"ja-Jpan-JP\",\n    \"jab\": \"jab-Latn-ZZ\",\n    \"jam\": \"jam-Latn-JM\",\n    \"jar\": \"jar-Latn-ZZ\",\n    \"jbo\": \"jbo-Latn-001\",\n    \"jbu\": \"jbu-Latn-ZZ\",\n    \"jen\": \"jen-Latn-ZZ\",\n    \"jgk\": \"jgk-Latn-ZZ\",\n    \"jgo\": \"jgo-Latn-CM\",\n    \"ji\": \"ji-Hebr-UA\",\n    \"jib\": \"jib-Latn-ZZ\",\n    \"jmc\": \"jmc-Latn-TZ\",\n    \"jml\": \"jml-Deva-NP\",\n    \"jra\": \"jra-Latn-ZZ\",\n    \"jut\": \"jut-Latn-DK\",\n    \"jv\": \"jv-Latn-ID\",\n    \"jw\": \"jw-Latn-ID\",\n    \"ka\": \"ka-Geor-GE\",\n    \"kaa\": \"kaa-Cyrl-UZ\",\n    \"kab\": \"kab-Latn-DZ\",\n    \"kac\": \"kac-Latn-MM\",\n    \"kad\": \"kad-Latn-ZZ\",\n    \"kai\": \"kai-Latn-ZZ\",\n    \"kaj\": \"kaj-Latn-NG\",\n    \"kam\": \"kam-Latn-KE\",\n    \"kao\": \"kao-Latn-ML\",\n    \"kbd\": \"kbd-Cyrl-RU\",\n    \"kbm\": \"kbm-Latn-ZZ\",\n    \"kbp\": \"kbp-Latn-ZZ\",\n    \"kbq\": \"kbq-Latn-ZZ\",\n    \"kbx\": \"kbx-Latn-ZZ\",\n    \"kby\": \"kby-Arab-NE\",\n    \"kcg\": \"kcg-Latn-NG\",\n    \"kck\": \"kck-Latn-ZW\",\n    \"kcl\": \"kcl-Latn-ZZ\",\n    \"kct\": \"kct-Latn-ZZ\",\n    \"kde\": \"kde-Latn-TZ\",\n    \"kdh\": \"kdh-Arab-TG\",\n    \"kdl\": \"kdl-Latn-ZZ\",\n    \"kdt\": \"kdt-Thai-TH\",\n    \"kea\": \"kea-Latn-CV\",\n    \"ken\": \"ken-Latn-CM\",\n    \"kez\": \"kez-Latn-ZZ\",\n    \"kfo\": \"kfo-Latn-CI\",\n    \"kfr\": \"kfr-Deva-IN\",\n    \"kfy\": \"kfy-Deva-IN\",\n    \"kg\": \"kg-Latn-CD\",\n    \"kge\": \"kge-Latn-ID\",\n    \"kgf\": \"kgf-Latn-ZZ\",\n    \"kgp\": \"kgp-Latn-BR\",\n    \"kha\": \"kha-Latn-IN\",\n    \"khb\": \"khb-Talu-CN\",\n    \"khn\": \"khn-Deva-IN\",\n    \"khq\": \"khq-Latn-ML\",\n    \"khs\": \"khs-Latn-ZZ\",\n    \"kht\": \"kht-Mymr-IN\",\n    \"khw\": \"khw-Arab-PK\",\n    \"khz\": \"khz-Latn-ZZ\",\n    \"ki\": \"ki-Latn-KE\",\n    \"kij\": \"kij-Latn-ZZ\",\n    \"kiu\": \"kiu-Latn-TR\",\n    \"kiw\": \"kiw-Latn-ZZ\",\n    \"kj\": \"kj-Latn-NA\",\n    \"kjd\": \"kjd-Latn-ZZ\",\n    \"kjg\": \"kjg-Laoo-LA\",\n    \"kjs\": \"kjs-Latn-ZZ\",\n    \"kjy\": \"kjy-Latn-ZZ\",\n    \"kk\": \"kk-Cyrl-KZ\",\n    \"kk-AF\": \"kk-Arab-AF\",\n    \"kk-Arab\": \"kk-Arab-CN\",\n    \"kk-CN\": \"kk-Arab-CN\",\n    \"kk-IR\": \"kk-Arab-IR\",\n    \"kk-MN\": \"kk-Arab-MN\",\n    \"kkc\": \"kkc-Latn-ZZ\",\n    \"kkj\": \"kkj-Latn-CM\",\n    \"kl\": \"kl-Latn-GL\",\n    \"kln\": \"kln-Latn-KE\",\n    \"klq\": \"klq-Latn-ZZ\",\n    \"klt\": \"klt-Latn-ZZ\",\n    \"klx\": \"klx-Latn-ZZ\",\n    \"km\": \"km-Khmr-KH\",\n    \"kmb\": \"kmb-Latn-AO\",\n    \"kmh\": \"kmh-Latn-ZZ\",\n    \"kmo\": \"kmo-Latn-ZZ\",\n    \"kms\": \"kms-Latn-ZZ\",\n    \"kmu\": \"kmu-Latn-ZZ\",\n    \"kmw\": \"kmw-Latn-ZZ\",\n    \"kn\": \"kn-Knda-IN\",\n    \"knf\": \"knf-Latn-GW\",\n    \"knp\": \"knp-Latn-ZZ\",\n    \"ko\": \"ko-Kore-KR\",\n    \"koi\": \"koi-Cyrl-RU\",\n    \"kok\": \"kok-Deva-IN\",\n    \"kol\": \"kol-Latn-ZZ\",\n    \"kos\": \"kos-Latn-FM\",\n    \"koz\": \"koz-Latn-ZZ\",\n    \"kpe\": \"kpe-Latn-LR\",\n    \"kpf\": \"kpf-Latn-ZZ\",\n    \"kpo\": \"kpo-Latn-ZZ\",\n    \"kpr\": \"kpr-Latn-ZZ\",\n    \"kpx\": \"kpx-Latn-ZZ\",\n    \"kqb\": \"kqb-Latn-ZZ\",\n    \"kqf\": \"kqf-Latn-ZZ\",\n    \"kqs\": \"kqs-Latn-ZZ\",\n    \"kqy\": \"kqy-Ethi-ZZ\",\n    \"kr\": \"kr-Latn-ZZ\",\n    \"krc\": \"krc-Cyrl-RU\",\n    \"kri\": \"kri-Latn-SL\",\n    \"krj\": \"krj-Latn-PH\",\n    \"krl\": \"krl-Latn-RU\",\n    \"krs\": \"krs-Latn-ZZ\",\n    \"kru\": \"kru-Deva-IN\",\n    \"ks\": \"ks-Arab-IN\",\n    \"ksb\": \"ksb-Latn-TZ\",\n    \"ksd\": \"ksd-Latn-ZZ\",\n    \"ksf\": \"ksf-Latn-CM\",\n    \"ksh\": \"ksh-Latn-DE\",\n    \"ksj\": \"ksj-Latn-ZZ\",\n    \"ksr\": \"ksr-Latn-ZZ\",\n    \"ktb\": \"ktb-Ethi-ZZ\",\n    \"ktm\": \"ktm-Latn-ZZ\",\n    \"kto\": \"kto-Latn-ZZ\",\n    \"ktr\": \"ktr-Latn-MY\",\n    \"ku\": \"ku-Latn-TR\",\n    \"ku-Arab\": \"ku-Arab-IQ\",\n    \"ku-LB\": \"ku-Arab-LB\",\n    \"ku-Yezi\": \"ku-Yezi-GE\",\n    \"kub\": \"kub-Latn-ZZ\",\n    \"kud\": \"kud-Latn-ZZ\",\n    \"kue\": \"kue-Latn-ZZ\",\n    \"kuj\": \"kuj-Latn-ZZ\",\n    \"kum\": \"kum-Cyrl-RU\",\n    \"kun\": \"kun-Latn-ZZ\",\n    \"kup\": \"kup-Latn-ZZ\",\n    \"kus\": \"kus-Latn-ZZ\",\n    \"kv\": \"kv-Cyrl-RU\",\n    \"kvg\": \"kvg-Latn-ZZ\",\n    \"kvr\": \"kvr-Latn-ID\",\n    \"kvx\": \"kvx-Arab-PK\",\n    \"kw\": \"kw-Latn-GB\",\n    \"kwj\": \"kwj-Latn-ZZ\",\n    \"kwo\": \"kwo-Latn-ZZ\",\n    \"kwq\": \"kwq-Latn-ZZ\",\n    \"kxa\": \"kxa-Latn-ZZ\",\n    \"kxc\": \"kxc-Ethi-ZZ\",\n    \"kxe\": \"kxe-Latn-ZZ\",\n    \"kxl\": \"kxl-Deva-IN\",\n    \"kxm\": \"kxm-Thai-TH\",\n    \"kxp\": \"kxp-Arab-PK\",\n    \"kxw\": \"kxw-Latn-ZZ\",\n    \"kxz\": \"kxz-Latn-ZZ\",\n    \"ky\": \"ky-Cyrl-KG\",\n    \"ky-Arab\": \"ky-Arab-CN\",\n    \"ky-CN\": \"ky-Arab-CN\",\n    \"ky-Latn\": \"ky-Latn-TR\",\n    \"ky-TR\": \"ky-Latn-TR\",\n    \"kye\": \"kye-Latn-ZZ\",\n    \"kyx\": \"kyx-Latn-ZZ\",\n    \"kzh\": \"kzh-Arab-ZZ\",\n    \"kzj\": \"kzj-Latn-MY\",\n    \"kzr\": \"kzr-Latn-ZZ\",\n    \"kzt\": \"kzt-Latn-MY\",\n    \"la\": \"la-Latn-VA\",\n    \"lab\": \"lab-Lina-GR\",\n    \"lad\": \"lad-Hebr-IL\",\n    \"lag\": \"lag-Latn-TZ\",\n    \"lah\": \"lah-Arab-PK\",\n    \"laj\": \"laj-Latn-UG\",\n    \"las\": \"las-Latn-ZZ\",\n    \"lb\": \"lb-Latn-LU\",\n    \"lbe\": \"lbe-Cyrl-RU\",\n    \"lbu\": \"lbu-Latn-ZZ\",\n    \"lbw\": \"lbw-Latn-ID\",\n    \"lcm\": \"lcm-Latn-ZZ\",\n    \"lcp\": \"lcp-Thai-CN\",\n    \"ldb\": \"ldb-Latn-ZZ\",\n    \"led\": \"led-Latn-ZZ\",\n    \"lee\": \"lee-Latn-ZZ\",\n    \"lem\": \"lem-Latn-ZZ\",\n    \"lep\": \"lep-Lepc-IN\",\n    \"leq\": \"leq-Latn-ZZ\",\n    \"leu\": \"leu-Latn-ZZ\",\n    \"lez\": \"lez-Cyrl-RU\",\n    \"lg\": \"lg-Latn-UG\",\n    \"lgg\": \"lgg-Latn-ZZ\",\n    \"li\": \"li-Latn-NL\",\n    \"lia\": \"lia-Latn-ZZ\",\n    \"lid\": \"lid-Latn-ZZ\",\n    \"lif\": \"lif-Deva-NP\",\n    \"lif-Limb\": \"lif-Limb-IN\",\n    \"lig\": \"lig-Latn-ZZ\",\n    \"lih\": \"lih-Latn-ZZ\",\n    \"lij\": \"lij-Latn-IT\",\n    \"lis\": \"lis-Lisu-CN\",\n    \"ljp\": \"ljp-Latn-ID\",\n    \"lki\": \"lki-Arab-IR\",\n    \"lkt\": \"lkt-Latn-US\",\n    \"lle\": \"lle-Latn-ZZ\",\n    \"lln\": \"lln-Latn-ZZ\",\n    \"lmn\": \"lmn-Telu-IN\",\n    \"lmo\": \"lmo-Latn-IT\",\n    \"lmp\": \"lmp-Latn-ZZ\",\n    \"ln\": \"ln-Latn-CD\",\n    \"lns\": \"lns-Latn-ZZ\",\n    \"lnu\": \"lnu-Latn-ZZ\",\n    \"lo\": \"lo-Laoo-LA\",\n    \"loj\": \"loj-Latn-ZZ\",\n    \"lok\": \"lok-Latn-ZZ\",\n    \"lol\": \"lol-Latn-CD\",\n    \"lor\": \"lor-Latn-ZZ\",\n    \"los\": \"los-Latn-ZZ\",\n    \"loz\": \"loz-Latn-ZM\",\n    \"lrc\": \"lrc-Arab-IR\",\n    \"lt\": \"lt-Latn-LT\",\n    \"ltg\": \"ltg-Latn-LV\",\n    \"lu\": \"lu-Latn-CD\",\n    \"lua\": \"lua-Latn-CD\",\n    \"luo\": \"luo-Latn-KE\",\n    \"luy\": \"luy-Latn-KE\",\n    \"luz\": \"luz-Arab-IR\",\n    \"lv\": \"lv-Latn-LV\",\n    \"lwl\": \"lwl-Thai-TH\",\n    \"lzh\": \"lzh-Hans-CN\",\n    \"lzz\": \"lzz-Latn-TR\",\n    \"mad\": \"mad-Latn-ID\",\n    \"maf\": \"maf-Latn-CM\",\n    \"mag\": \"mag-Deva-IN\",\n    \"mai\": \"mai-Deva-IN\",\n    \"mak\": \"mak-Latn-ID\",\n    \"man\": \"man-Latn-GM\",\n    \"man-GN\": \"man-Nkoo-GN\",\n    \"man-Nkoo\": \"man-Nkoo-GN\",\n    \"mas\": \"mas-Latn-KE\",\n    \"maw\": \"maw-Latn-ZZ\",\n    \"maz\": \"maz-Latn-MX\",\n    \"mbh\": \"mbh-Latn-ZZ\",\n    \"mbo\": \"mbo-Latn-ZZ\",\n    \"mbq\": \"mbq-Latn-ZZ\",\n    \"mbu\": \"mbu-Latn-ZZ\",\n    \"mbw\": \"mbw-Latn-ZZ\",\n    \"mci\": \"mci-Latn-ZZ\",\n    \"mcp\": \"mcp-Latn-ZZ\",\n    \"mcq\": \"mcq-Latn-ZZ\",\n    \"mcr\": \"mcr-Latn-ZZ\",\n    \"mcu\": \"mcu-Latn-ZZ\",\n    \"mda\": \"mda-Latn-ZZ\",\n    \"mde\": \"mde-Arab-ZZ\",\n    \"mdf\": \"mdf-Cyrl-RU\",\n    \"mdh\": \"mdh-Latn-PH\",\n    \"mdj\": \"mdj-Latn-ZZ\",\n    \"mdr\": \"mdr-Latn-ID\",\n    \"mdx\": \"mdx-Ethi-ZZ\",\n    \"med\": \"med-Latn-ZZ\",\n    \"mee\": \"mee-Latn-ZZ\",\n    \"mek\": \"mek-Latn-ZZ\",\n    \"men\": \"men-Latn-SL\",\n    \"mer\": \"mer-Latn-KE\",\n    \"met\": \"met-Latn-ZZ\",\n    \"meu\": \"meu-Latn-ZZ\",\n    \"mfa\": \"mfa-Arab-TH\",\n    \"mfe\": \"mfe-Latn-MU\",\n    \"mfn\": \"mfn-Latn-ZZ\",\n    \"mfo\": \"mfo-Latn-ZZ\",\n    \"mfq\": \"mfq-Latn-ZZ\",\n    \"mg\": \"mg-Latn-MG\",\n    \"mgh\": \"mgh-Latn-MZ\",\n    \"mgl\": \"mgl-Latn-ZZ\",\n    \"mgo\": \"mgo-Latn-CM\",\n    \"mgp\": \"mgp-Deva-NP\",\n    \"mgy\": \"mgy-Latn-TZ\",\n    \"mh\": \"mh-Latn-MH\",\n    \"mhi\": \"mhi-Latn-ZZ\",\n    \"mhl\": \"mhl-Latn-ZZ\",\n    \"mi\": \"mi-Latn-NZ\",\n    \"mif\": \"mif-Latn-ZZ\",\n    \"min\": \"min-Latn-ID\",\n    \"miw\": \"miw-Latn-ZZ\",\n    \"mk\": \"mk-Cyrl-MK\",\n    \"mki\": \"mki-Arab-ZZ\",\n    \"mkl\": \"mkl-Latn-ZZ\",\n    \"mkp\": \"mkp-Latn-ZZ\",\n    \"mkw\": \"mkw-Latn-ZZ\",\n    \"ml\": \"ml-Mlym-IN\",\n    \"mle\": \"mle-Latn-ZZ\",\n    \"mlp\": \"mlp-Latn-ZZ\",\n    \"mls\": \"mls-Latn-SD\",\n    \"mmo\": \"mmo-Latn-ZZ\",\n    \"mmu\": \"mmu-Latn-ZZ\",\n    \"mmx\": \"mmx-Latn-ZZ\",\n    \"mn\": \"mn-Cyrl-MN\",\n    \"mn-CN\": \"mn-Mong-CN\",\n    \"mn-Mong\": \"mn-Mong-CN\",\n    \"mna\": \"mna-Latn-ZZ\",\n    \"mnf\": \"mnf-Latn-ZZ\",\n    \"mni\": \"mni-Beng-IN\",\n    \"mnw\": \"mnw-Mymr-MM\",\n    \"mo\": \"mo-Latn-RO\",\n    \"moa\": \"moa-Latn-ZZ\",\n    \"moe\": \"moe-Latn-CA\",\n    \"moh\": \"moh-Latn-CA\",\n    \"mos\": \"mos-Latn-BF\",\n    \"mox\": \"mox-Latn-ZZ\",\n    \"mpp\": \"mpp-Latn-ZZ\",\n    \"mps\": \"mps-Latn-ZZ\",\n    \"mpt\": \"mpt-Latn-ZZ\",\n    \"mpx\": \"mpx-Latn-ZZ\",\n    \"mql\": \"mql-Latn-ZZ\",\n    \"mr\": \"mr-Deva-IN\",\n    \"mrd\": \"mrd-Deva-NP\",\n    \"mrj\": \"mrj-Cyrl-RU\",\n    \"mro\": \"mro-Mroo-BD\",\n    \"ms\": \"ms-Latn-MY\",\n    \"ms-CC\": \"ms-Arab-CC\",\n    \"mt\": \"mt-Latn-MT\",\n    \"mtc\": \"mtc-Latn-ZZ\",\n    \"mtf\": \"mtf-Latn-ZZ\",\n    \"mti\": \"mti-Latn-ZZ\",\n    \"mtr\": \"mtr-Deva-IN\",\n    \"mua\": \"mua-Latn-CM\",\n    \"mur\": \"mur-Latn-ZZ\",\n    \"mus\": \"mus-Latn-US\",\n    \"mva\": \"mva-Latn-ZZ\",\n    \"mvn\": \"mvn-Latn-ZZ\",\n    \"mvy\": \"mvy-Arab-PK\",\n    \"mwk\": \"mwk-Latn-ML\",\n    \"mwr\": \"mwr-Deva-IN\",\n    \"mwv\": \"mwv-Latn-ID\",\n    \"mww\": \"mww-Hmnp-US\",\n    \"mxc\": \"mxc-Latn-ZW\",\n    \"mxm\": \"mxm-Latn-ZZ\",\n    \"my\": \"my-Mymr-MM\",\n    \"myk\": \"myk-Latn-ZZ\",\n    \"mym\": \"mym-Ethi-ZZ\",\n    \"myv\": \"myv-Cyrl-RU\",\n    \"myw\": \"myw-Latn-ZZ\",\n    \"myx\": \"myx-Latn-UG\",\n    \"myz\": \"myz-Mand-IR\",\n    \"mzk\": \"mzk-Latn-ZZ\",\n    \"mzm\": \"mzm-Latn-ZZ\",\n    \"mzn\": \"mzn-Arab-IR\",\n    \"mzp\": \"mzp-Latn-ZZ\",\n    \"mzw\": \"mzw-Latn-ZZ\",\n    \"mzz\": \"mzz-Latn-ZZ\",\n    \"na\": \"na-Latn-NR\",\n    \"nac\": \"nac-Latn-ZZ\",\n    \"naf\": \"naf-Latn-ZZ\",\n    \"nak\": \"nak-Latn-ZZ\",\n    \"nan\": \"nan-Hans-CN\",\n    \"nap\": \"nap-Latn-IT\",\n    \"naq\": \"naq-Latn-NA\",\n    \"nas\": \"nas-Latn-ZZ\",\n    \"nb\": \"nb-Latn-NO\",\n    \"nca\": \"nca-Latn-ZZ\",\n    \"nce\": \"nce-Latn-ZZ\",\n    \"ncf\": \"ncf-Latn-ZZ\",\n    \"nch\": \"nch-Latn-MX\",\n    \"nco\": \"nco-Latn-ZZ\",\n    \"ncu\": \"ncu-Latn-ZZ\",\n    \"nd\": \"nd-Latn-ZW\",\n    \"ndc\": \"ndc-Latn-MZ\",\n    \"nds\": \"nds-Latn-DE\",\n    \"ne\": \"ne-Deva-NP\",\n    \"neb\": \"neb-Latn-ZZ\",\n    \"new\": \"new-Deva-NP\",\n    \"nex\": \"nex-Latn-ZZ\",\n    \"nfr\": \"nfr-Latn-ZZ\",\n    \"ng\": \"ng-Latn-NA\",\n    \"nga\": \"nga-Latn-ZZ\",\n    \"ngb\": \"ngb-Latn-ZZ\",\n    \"ngl\": \"ngl-Latn-MZ\",\n    \"nhb\": \"nhb-Latn-ZZ\",\n    \"nhe\": \"nhe-Latn-MX\",\n    \"nhw\": \"nhw-Latn-MX\",\n    \"nif\": \"nif-Latn-ZZ\",\n    \"nii\": \"nii-Latn-ZZ\",\n    \"nij\": \"nij-Latn-ID\",\n    \"nin\": \"nin-Latn-ZZ\",\n    \"niu\": \"niu-Latn-NU\",\n    \"niy\": \"niy-Latn-ZZ\",\n    \"niz\": \"niz-Latn-ZZ\",\n    \"njo\": \"njo-Latn-IN\",\n    \"nkg\": \"nkg-Latn-ZZ\",\n    \"nko\": \"nko-Latn-ZZ\",\n    \"nl\": \"nl-Latn-NL\",\n    \"nmg\": \"nmg-Latn-CM\",\n    \"nmz\": \"nmz-Latn-ZZ\",\n    \"nn\": \"nn-Latn-NO\",\n    \"nnf\": \"nnf-Latn-ZZ\",\n    \"nnh\": \"nnh-Latn-CM\",\n    \"nnk\": \"nnk-Latn-ZZ\",\n    \"nnm\": \"nnm-Latn-ZZ\",\n    \"nnp\": \"nnp-Wcho-IN\",\n    \"no\": \"no-Latn-NO\",\n    \"nod\": \"nod-Lana-TH\",\n    \"noe\": \"noe-Deva-IN\",\n    \"non\": \"non-Runr-SE\",\n    \"nop\": \"nop-Latn-ZZ\",\n    \"nou\": \"nou-Latn-ZZ\",\n    \"nqo\": \"nqo-Nkoo-GN\",\n    \"nr\": \"nr-Latn-ZA\",\n    \"nrb\": \"nrb-Latn-ZZ\",\n    \"nsk\": \"nsk-Cans-CA\",\n    \"nsn\": \"nsn-Latn-ZZ\",\n    \"nso\": \"nso-Latn-ZA\",\n    \"nss\": \"nss-Latn-ZZ\",\n    \"ntm\": \"ntm-Latn-ZZ\",\n    \"ntr\": \"ntr-Latn-ZZ\",\n    \"nui\": \"nui-Latn-ZZ\",\n    \"nup\": \"nup-Latn-ZZ\",\n    \"nus\": \"nus-Latn-SS\",\n    \"nuv\": \"nuv-Latn-ZZ\",\n    \"nux\": \"nux-Latn-ZZ\",\n    \"nv\": \"nv-Latn-US\",\n    \"nwb\": \"nwb-Latn-ZZ\",\n    \"nxq\": \"nxq-Latn-CN\",\n    \"nxr\": \"nxr-Latn-ZZ\",\n    \"ny\": \"ny-Latn-MW\",\n    \"nym\": \"nym-Latn-TZ\",\n    \"nyn\": \"nyn-Latn-UG\",\n    \"nzi\": \"nzi-Latn-GH\",\n    \"oc\": \"oc-Latn-FR\",\n    \"ogc\": \"ogc-Latn-ZZ\",\n    \"okr\": \"okr-Latn-ZZ\",\n    \"okv\": \"okv-Latn-ZZ\",\n    \"om\": \"om-Latn-ET\",\n    \"ong\": \"ong-Latn-ZZ\",\n    \"onn\": \"onn-Latn-ZZ\",\n    \"ons\": \"ons-Latn-ZZ\",\n    \"opm\": \"opm-Latn-ZZ\",\n    \"or\": \"or-Orya-IN\",\n    \"oro\": \"oro-Latn-ZZ\",\n    \"oru\": \"oru-Arab-ZZ\",\n    \"os\": \"os-Cyrl-GE\",\n    \"osa\": \"osa-Osge-US\",\n    \"ota\": \"ota-Arab-ZZ\",\n    \"otk\": \"otk-Orkh-MN\",\n    \"ozm\": \"ozm-Latn-ZZ\",\n    \"pa\": \"pa-Guru-IN\",\n    \"pa-Arab\": \"pa-Arab-PK\",\n    \"pa-PK\": \"pa-Arab-PK\",\n    \"pag\": \"pag-Latn-PH\",\n    \"pal\": \"pal-Phli-IR\",\n    \"pal-Phlp\": \"pal-Phlp-CN\",\n    \"pam\": \"pam-Latn-PH\",\n    \"pap\": \"pap-Latn-AW\",\n    \"pau\": \"pau-Latn-PW\",\n    \"pbi\": \"pbi-Latn-ZZ\",\n    \"pcd\": \"pcd-Latn-FR\",\n    \"pcm\": \"pcm-Latn-NG\",\n    \"pdc\": \"pdc-Latn-US\",\n    \"pdt\": \"pdt-Latn-CA\",\n    \"ped\": \"ped-Latn-ZZ\",\n    \"peo\": \"peo-Xpeo-IR\",\n    \"pex\": \"pex-Latn-ZZ\",\n    \"pfl\": \"pfl-Latn-DE\",\n    \"phl\": \"phl-Arab-ZZ\",\n    \"phn\": \"phn-Phnx-LB\",\n    \"pil\": \"pil-Latn-ZZ\",\n    \"pip\": \"pip-Latn-ZZ\",\n    \"pka\": \"pka-Brah-IN\",\n    \"pko\": \"pko-Latn-KE\",\n    \"pl\": \"pl-Latn-PL\",\n    \"pla\": \"pla-Latn-ZZ\",\n    \"pms\": \"pms-Latn-IT\",\n    \"png\": \"png-Latn-ZZ\",\n    \"pnn\": \"pnn-Latn-ZZ\",\n    \"pnt\": \"pnt-Grek-GR\",\n    \"pon\": \"pon-Latn-FM\",\n    \"ppa\": \"ppa-Deva-IN\",\n    \"ppo\": \"ppo-Latn-ZZ\",\n    \"pra\": \"pra-Khar-PK\",\n    \"prd\": \"prd-Arab-IR\",\n    \"prg\": \"prg-Latn-001\",\n    \"ps\": \"ps-Arab-AF\",\n    \"pss\": \"pss-Latn-ZZ\",\n    \"pt\": \"pt-Latn-BR\",\n    \"ptp\": \"ptp-Latn-ZZ\",\n    \"puu\": \"puu-Latn-GA\",\n    \"pwa\": \"pwa-Latn-ZZ\",\n    \"qu\": \"qu-Latn-PE\",\n    \"quc\": \"quc-Latn-GT\",\n    \"qug\": \"qug-Latn-EC\",\n    \"rai\": \"rai-Latn-ZZ\",\n    \"raj\": \"raj-Deva-IN\",\n    \"rao\": \"rao-Latn-ZZ\",\n    \"rcf\": \"rcf-Latn-RE\",\n    \"rej\": \"rej-Latn-ID\",\n    \"rel\": \"rel-Latn-ZZ\",\n    \"res\": \"res-Latn-ZZ\",\n    \"rgn\": \"rgn-Latn-IT\",\n    \"rhg\": \"rhg-Arab-MM\",\n    \"ria\": \"ria-Latn-IN\",\n    \"rif\": \"rif-Tfng-MA\",\n    \"rif-NL\": \"rif-Latn-NL\",\n    \"rjs\": \"rjs-Deva-NP\",\n    \"rkt\": \"rkt-Beng-BD\",\n    \"rm\": \"rm-Latn-CH\",\n    \"rmf\": \"rmf-Latn-FI\",\n    \"rmo\": \"rmo-Latn-CH\",\n    \"rmt\": \"rmt-Arab-IR\",\n    \"rmu\": \"rmu-Latn-SE\",\n    \"rn\": \"rn-Latn-BI\",\n    \"rna\": \"rna-Latn-ZZ\",\n    \"rng\": \"rng-Latn-MZ\",\n    \"ro\": \"ro-Latn-RO\",\n    \"rob\": \"rob-Latn-ID\",\n    \"rof\": \"rof-Latn-TZ\",\n    \"roo\": \"roo-Latn-ZZ\",\n    \"rro\": \"rro-Latn-ZZ\",\n    \"rtm\": \"rtm-Latn-FJ\",\n    \"ru\": \"ru-Cyrl-RU\",\n    \"rue\": \"rue-Cyrl-UA\",\n    \"rug\": \"rug-Latn-SB\",\n    \"rw\": \"rw-Latn-RW\",\n    \"rwk\": \"rwk-Latn-TZ\",\n    \"rwo\": \"rwo-Latn-ZZ\",\n    \"ryu\": \"ryu-Kana-JP\",\n    \"sa\": \"sa-Deva-IN\",\n    \"saf\": \"saf-Latn-GH\",\n    \"sah\": \"sah-Cyrl-RU\",\n    \"saq\": \"saq-Latn-KE\",\n    \"sas\": \"sas-Latn-ID\",\n    \"sat\": \"sat-Olck-IN\",\n    \"sav\": \"sav-Latn-SN\",\n    \"saz\": \"saz-Saur-IN\",\n    \"sba\": \"sba-Latn-ZZ\",\n    \"sbe\": \"sbe-Latn-ZZ\",\n    \"sbp\": \"sbp-Latn-TZ\",\n    \"sc\": \"sc-Latn-IT\",\n    \"sck\": \"sck-Deva-IN\",\n    \"scl\": \"scl-Arab-ZZ\",\n    \"scn\": \"scn-Latn-IT\",\n    \"sco\": \"sco-Latn-GB\",\n    \"scs\": \"scs-Latn-CA\",\n    \"sd\": \"sd-Arab-PK\",\n    \"sd-Deva\": \"sd-Deva-IN\",\n    \"sd-Khoj\": \"sd-Khoj-IN\",\n    \"sd-Sind\": \"sd-Sind-IN\",\n    \"sdc\": \"sdc-Latn-IT\",\n    \"sdh\": \"sdh-Arab-IR\",\n    \"se\": \"se-Latn-NO\",\n    \"sef\": \"sef-Latn-CI\",\n    \"seh\": \"seh-Latn-MZ\",\n    \"sei\": \"sei-Latn-MX\",\n    \"ses\": \"ses-Latn-ML\",\n    \"sg\": \"sg-Latn-CF\",\n    \"sga\": \"sga-Ogam-IE\",\n    \"sgs\": \"sgs-Latn-LT\",\n    \"sgw\": \"sgw-Ethi-ZZ\",\n    \"sgz\": \"sgz-Latn-ZZ\",\n    \"shi\": \"shi-Tfng-MA\",\n    \"shk\": \"shk-Latn-ZZ\",\n    \"shn\": \"shn-Mymr-MM\",\n    \"shu\": \"shu-Arab-ZZ\",\n    \"si\": \"si-Sinh-LK\",\n    \"sid\": \"sid-Latn-ET\",\n    \"sig\": \"sig-Latn-ZZ\",\n    \"sil\": \"sil-Latn-ZZ\",\n    \"sim\": \"sim-Latn-ZZ\",\n    \"sjr\": \"sjr-Latn-ZZ\",\n    \"sk\": \"sk-Latn-SK\",\n    \"skc\": \"skc-Latn-ZZ\",\n    \"skr\": \"skr-Arab-PK\",\n    \"sks\": \"sks-Latn-ZZ\",\n    \"sl\": \"sl-Latn-SI\",\n    \"sld\": \"sld-Latn-ZZ\",\n    \"sli\": \"sli-Latn-PL\",\n    \"sll\": \"sll-Latn-ZZ\",\n    \"sly\": \"sly-Latn-ID\",\n    \"sm\": \"sm-Latn-WS\",\n    \"sma\": \"sma-Latn-SE\",\n    \"smj\": \"smj-Latn-SE\",\n    \"smn\": \"smn-Latn-FI\",\n    \"smp\": \"smp-Samr-IL\",\n    \"smq\": \"smq-Latn-ZZ\",\n    \"sms\": \"sms-Latn-FI\",\n    \"sn\": \"sn-Latn-ZW\",\n    \"snc\": \"snc-Latn-ZZ\",\n    \"snk\": \"snk-Latn-ML\",\n    \"snp\": \"snp-Latn-ZZ\",\n    \"snx\": \"snx-Latn-ZZ\",\n    \"sny\": \"sny-Latn-ZZ\",\n    \"so\": \"so-Latn-SO\",\n    \"sog\": \"sog-Sogd-UZ\",\n    \"sok\": \"sok-Latn-ZZ\",\n    \"soq\": \"soq-Latn-ZZ\",\n    \"sou\": \"sou-Thai-TH\",\n    \"soy\": \"soy-Latn-ZZ\",\n    \"spd\": \"spd-Latn-ZZ\",\n    \"spl\": \"spl-Latn-ZZ\",\n    \"sps\": \"sps-Latn-ZZ\",\n    \"sq\": \"sq-Latn-AL\",\n    \"sr\": \"sr-Cyrl-RS\",\n    \"sr-ME\": \"sr-Latn-ME\",\n    \"sr-RO\": \"sr-Latn-RO\",\n    \"sr-RU\": \"sr-Latn-RU\",\n    \"sr-TR\": \"sr-Latn-TR\",\n    \"srb\": \"srb-Sora-IN\",\n    \"srn\": \"srn-Latn-SR\",\n    \"srr\": \"srr-Latn-SN\",\n    \"srx\": \"srx-Deva-IN\",\n    \"ss\": \"ss-Latn-ZA\",\n    \"ssd\": \"ssd-Latn-ZZ\",\n    \"ssg\": \"ssg-Latn-ZZ\",\n    \"ssy\": \"ssy-Latn-ER\",\n    \"st\": \"st-Latn-ZA\",\n    \"stk\": \"stk-Latn-ZZ\",\n    \"stq\": \"stq-Latn-DE\",\n    \"su\": \"su-Latn-ID\",\n    \"sua\": \"sua-Latn-ZZ\",\n    \"sue\": \"sue-Latn-ZZ\",\n    \"suk\": \"suk-Latn-TZ\",\n    \"sur\": \"sur-Latn-ZZ\",\n    \"sus\": \"sus-Latn-GN\",\n    \"sv\": \"sv-Latn-SE\",\n    \"sw\": \"sw-Latn-TZ\",\n    \"swb\": \"swb-Arab-YT\",\n    \"swc\": \"swc-Latn-CD\",\n    \"swg\": \"swg-Latn-DE\",\n    \"swp\": \"swp-Latn-ZZ\",\n    \"swv\": \"swv-Deva-IN\",\n    \"sxn\": \"sxn-Latn-ID\",\n    \"sxw\": \"sxw-Latn-ZZ\",\n    \"syl\": \"syl-Beng-BD\",\n    \"syr\": \"syr-Syrc-IQ\",\n    \"szl\": \"szl-Latn-PL\",\n    \"ta\": \"ta-Taml-IN\",\n    \"taj\": \"taj-Deva-NP\",\n    \"tal\": \"tal-Latn-ZZ\",\n    \"tan\": \"tan-Latn-ZZ\",\n    \"taq\": \"taq-Latn-ZZ\",\n    \"tbc\": \"tbc-Latn-ZZ\",\n    \"tbd\": \"tbd-Latn-ZZ\",\n    \"tbf\": \"tbf-Latn-ZZ\",\n    \"tbg\": \"tbg-Latn-ZZ\",\n    \"tbo\": \"tbo-Latn-ZZ\",\n    \"tbw\": \"tbw-Latn-PH\",\n    \"tbz\": \"tbz-Latn-ZZ\",\n    \"tci\": \"tci-Latn-ZZ\",\n    \"tcy\": \"tcy-Knda-IN\",\n    \"tdd\": \"tdd-Tale-CN\",\n    \"tdg\": \"tdg-Deva-NP\",\n    \"tdh\": \"tdh-Deva-NP\",\n    \"tdu\": \"tdu-Latn-MY\",\n    \"te\": \"te-Telu-IN\",\n    \"ted\": \"ted-Latn-ZZ\",\n    \"tem\": \"tem-Latn-SL\",\n    \"teo\": \"teo-Latn-UG\",\n    \"tet\": \"tet-Latn-TL\",\n    \"tfi\": \"tfi-Latn-ZZ\",\n    \"tg\": \"tg-Cyrl-TJ\",\n    \"tg-Arab\": \"tg-Arab-PK\",\n    \"tg-PK\": \"tg-Arab-PK\",\n    \"tgc\": \"tgc-Latn-ZZ\",\n    \"tgo\": \"tgo-Latn-ZZ\",\n    \"tgu\": \"tgu-Latn-ZZ\",\n    \"th\": \"th-Thai-TH\",\n    \"thl\": \"thl-Deva-NP\",\n    \"thq\": \"thq-Deva-NP\",\n    \"thr\": \"thr-Deva-NP\",\n    \"ti\": \"ti-Ethi-ET\",\n    \"tif\": \"tif-Latn-ZZ\",\n    \"tig\": \"tig-Ethi-ER\",\n    \"tik\": \"tik-Latn-ZZ\",\n    \"tim\": \"tim-Latn-ZZ\",\n    \"tio\": \"tio-Latn-ZZ\",\n    \"tiv\": \"tiv-Latn-NG\",\n    \"tk\": \"tk-Latn-TM\",\n    \"tkl\": \"tkl-Latn-TK\",\n    \"tkr\": \"tkr-Latn-AZ\",\n    \"tkt\": \"tkt-Deva-NP\",\n    \"tl\": \"tl-Latn-PH\",\n    \"tlf\": \"tlf-Latn-ZZ\",\n    \"tlx\": \"tlx-Latn-ZZ\",\n    \"tly\": \"tly-Latn-AZ\",\n    \"tmh\": \"tmh-Latn-NE\",\n    \"tmy\": \"tmy-Latn-ZZ\",\n    \"tn\": \"tn-Latn-ZA\",\n    \"tnh\": \"tnh-Latn-ZZ\",\n    \"to\": \"to-Latn-TO\",\n    \"tof\": \"tof-Latn-ZZ\",\n    \"tog\": \"tog-Latn-MW\",\n    \"toq\": \"toq-Latn-ZZ\",\n    \"tpi\": \"tpi-Latn-PG\",\n    \"tpm\": \"tpm-Latn-ZZ\",\n    \"tpz\": \"tpz-Latn-ZZ\",\n    \"tqo\": \"tqo-Latn-ZZ\",\n    \"tr\": \"tr-Latn-TR\",\n    \"tru\": \"tru-Latn-TR\",\n    \"trv\": \"trv-Latn-TW\",\n    \"trw\": \"trw-Arab-PK\",\n    \"ts\": \"ts-Latn-ZA\",\n    \"tsd\": \"tsd-Grek-GR\",\n    \"tsf\": \"tsf-Deva-NP\",\n    \"tsg\": \"tsg-Latn-PH\",\n    \"tsj\": \"tsj-Tibt-BT\",\n    \"tsw\": \"tsw-Latn-ZZ\",\n    \"tt\": \"tt-Cyrl-RU\",\n    \"ttd\": \"ttd-Latn-ZZ\",\n    \"tte\": \"tte-Latn-ZZ\",\n    \"ttj\": \"ttj-Latn-UG\",\n    \"ttr\": \"ttr-Latn-ZZ\",\n    \"tts\": \"tts-Thai-TH\",\n    \"ttt\": \"ttt-Latn-AZ\",\n    \"tuh\": \"tuh-Latn-ZZ\",\n    \"tul\": \"tul-Latn-ZZ\",\n    \"tum\": \"tum-Latn-MW\",\n    \"tuq\": \"tuq-Latn-ZZ\",\n    \"tvd\": \"tvd-Latn-ZZ\",\n    \"tvl\": \"tvl-Latn-TV\",\n    \"tvu\": \"tvu-Latn-ZZ\",\n    \"twh\": \"twh-Latn-ZZ\",\n    \"twq\": \"twq-Latn-NE\",\n    \"txg\": \"txg-Tang-CN\",\n    \"ty\": \"ty-Latn-PF\",\n    \"tya\": \"tya-Latn-ZZ\",\n    \"tyv\": \"tyv-Cyrl-RU\",\n    \"tzm\": \"tzm-Latn-MA\",\n    \"ubu\": \"ubu-Latn-ZZ\",\n    \"udi\": \"udi-Aghb-RU\",\n    \"udm\": \"udm-Cyrl-RU\",\n    \"ug\": \"ug-Arab-CN\",\n    \"ug-Cyrl\": \"ug-Cyrl-KZ\",\n    \"ug-KZ\": \"ug-Cyrl-KZ\",\n    \"ug-MN\": \"ug-Cyrl-MN\",\n    \"uga\": \"uga-Ugar-SY\",\n    \"uk\": \"uk-Cyrl-UA\",\n    \"uli\": \"uli-Latn-FM\",\n    \"umb\": \"umb-Latn-AO\",\n    \"und\": \"en-Latn-US\",\n    \"und-002\": \"en-Latn-NG\",\n    \"und-003\": \"en-Latn-US\",\n    \"und-005\": \"pt-Latn-BR\",\n    \"und-009\": \"en-Latn-AU\",\n    \"und-011\": \"en-Latn-NG\",\n    \"und-013\": \"es-Latn-MX\",\n    \"und-014\": \"sw-Latn-TZ\",\n    \"und-015\": \"ar-Arab-EG\",\n    \"und-017\": \"sw-Latn-CD\",\n    \"und-018\": \"en-Latn-ZA\",\n    \"und-019\": \"en-Latn-US\",\n    \"und-021\": \"en-Latn-US\",\n    \"und-029\": \"es-Latn-CU\",\n    \"und-030\": \"zh-Hans-CN\",\n    \"und-034\": \"hi-Deva-IN\",\n    \"und-035\": \"id-Latn-ID\",\n    \"und-039\": \"it-Latn-IT\",\n    \"und-053\": \"en-Latn-AU\",\n    \"und-054\": \"en-Latn-PG\",\n    \"und-057\": \"en-Latn-GU\",\n    \"und-061\": \"sm-Latn-WS\",\n    \"und-142\": \"zh-Hans-CN\",\n    \"und-143\": \"uz-Latn-UZ\",\n    \"und-145\": \"ar-Arab-SA\",\n    \"und-150\": \"ru-Cyrl-RU\",\n    \"und-151\": \"ru-Cyrl-RU\",\n    \"und-154\": \"en-Latn-GB\",\n    \"und-155\": \"de-Latn-DE\",\n    \"und-202\": \"en-Latn-NG\",\n    \"und-419\": \"es-Latn-419\",\n    \"und-AD\": \"ca-Latn-AD\",\n    \"und-Adlm\": \"ff-Adlm-GN\",\n    \"und-AE\": \"ar-Arab-AE\",\n    \"und-AF\": \"fa-Arab-AF\",\n    \"und-Aghb\": \"udi-Aghb-RU\",\n    \"und-Ahom\": \"aho-Ahom-IN\",\n    \"und-AL\": \"sq-Latn-AL\",\n    \"und-AM\": \"hy-Armn-AM\",\n    \"und-AO\": \"pt-Latn-AO\",\n    \"und-AQ\": \"und-Latn-AQ\",\n    \"und-AR\": \"es-Latn-AR\",\n    \"und-Arab\": \"ar-Arab-EG\",\n    \"und-Arab-CC\": \"ms-Arab-CC\",\n    \"und-Arab-CN\": \"ug-Arab-CN\",\n    \"und-Arab-GB\": \"ks-Arab-GB\",\n    \"und-Arab-ID\": \"ms-Arab-ID\",\n    \"und-Arab-IN\": \"ur-Arab-IN\",\n    \"und-Arab-KH\": \"cja-Arab-KH\",\n    \"und-Arab-MM\": \"rhg-Arab-MM\",\n    \"und-Arab-MN\": \"kk-Arab-MN\",\n    \"und-Arab-MU\": \"ur-Arab-MU\",\n    \"und-Arab-NG\": \"ha-Arab-NG\",\n    \"und-Arab-PK\": \"ur-Arab-PK\",\n    \"und-Arab-TG\": \"apd-Arab-TG\",\n    \"und-Arab-TH\": \"mfa-Arab-TH\",\n    \"und-Arab-TJ\": \"fa-Arab-TJ\",\n    \"und-Arab-TR\": \"az-Arab-TR\",\n    \"und-Arab-YT\": \"swb-Arab-YT\",\n    \"und-Armi\": \"arc-Armi-IR\",\n    \"und-Armn\": \"hy-Armn-AM\",\n    \"und-AS\": \"sm-Latn-AS\",\n    \"und-AT\": \"de-Latn-AT\",\n    \"und-Avst\": \"ae-Avst-IR\",\n    \"und-AW\": \"nl-Latn-AW\",\n    \"und-AX\": \"sv-Latn-AX\",\n    \"und-AZ\": \"az-Latn-AZ\",\n    \"und-BA\": \"bs-Latn-BA\",\n    \"und-Bali\": \"ban-Bali-ID\",\n    \"und-Bamu\": \"bax-Bamu-CM\",\n    \"und-Bass\": \"bsq-Bass-LR\",\n    \"und-Batk\": \"bbc-Batk-ID\",\n    \"und-BD\": \"bn-Beng-BD\",\n    \"und-BE\": \"nl-Latn-BE\",\n    \"und-Beng\": \"bn-Beng-BD\",\n    \"und-BF\": \"fr-Latn-BF\",\n    \"und-BG\": \"bg-Cyrl-BG\",\n    \"und-BH\": \"ar-Arab-BH\",\n    \"und-Bhks\": \"sa-Bhks-IN\",\n    \"und-BI\": \"rn-Latn-BI\",\n    \"und-BJ\": \"fr-Latn-BJ\",\n    \"und-BL\": \"fr-Latn-BL\",\n    \"und-BN\": \"ms-Latn-BN\",\n    \"und-BO\": \"es-Latn-BO\",\n    \"und-Bopo\": \"zh-Bopo-TW\",\n    \"und-BQ\": \"pap-Latn-BQ\",\n    \"und-BR\": \"pt-Latn-BR\",\n    \"und-Brah\": \"pka-Brah-IN\",\n    \"und-Brai\": \"fr-Brai-FR\",\n    \"und-BT\": \"dz-Tibt-BT\",\n    \"und-Bugi\": \"bug-Bugi-ID\",\n    \"und-Buhd\": \"bku-Buhd-PH\",\n    \"und-BV\": \"und-Latn-BV\",\n    \"und-BY\": \"be-Cyrl-BY\",\n    \"und-Cakm\": \"ccp-Cakm-BD\",\n    \"und-Cans\": \"cr-Cans-CA\",\n    \"und-Cari\": \"xcr-Cari-TR\",\n    \"und-CD\": \"sw-Latn-CD\",\n    \"und-CF\": \"fr-Latn-CF\",\n    \"und-CG\": \"fr-Latn-CG\",\n    \"und-CH\": \"de-Latn-CH\",\n    \"und-Cham\": \"cjm-Cham-VN\",\n    \"und-Cher\": \"chr-Cher-US\",\n    \"und-Chrs\": \"xco-Chrs-UZ\",\n    \"und-CI\": \"fr-Latn-CI\",\n    \"und-CL\": \"es-Latn-CL\",\n    \"und-CM\": \"fr-Latn-CM\",\n    \"und-CN\": \"zh-Hans-CN\",\n    \"und-CO\": \"es-Latn-CO\",\n    \"und-Copt\": \"cop-Copt-EG\",\n    \"und-CP\": \"und-Latn-CP\",\n    \"und-Cprt\": \"grc-Cprt-CY\",\n    \"und-CR\": \"es-Latn-CR\",\n    \"und-CU\": \"es-Latn-CU\",\n    \"und-CV\": \"pt-Latn-CV\",\n    \"und-CW\": \"pap-Latn-CW\",\n    \"und-CY\": \"el-Grek-CY\",\n    \"und-Cyrl\": \"ru-Cyrl-RU\",\n    \"und-Cyrl-AL\": \"mk-Cyrl-AL\",\n    \"und-Cyrl-BA\": \"sr-Cyrl-BA\",\n    \"und-Cyrl-GE\": \"os-Cyrl-GE\",\n    \"und-Cyrl-GR\": \"mk-Cyrl-GR\",\n    \"und-Cyrl-MD\": \"uk-Cyrl-MD\",\n    \"und-Cyrl-RO\": \"bg-Cyrl-RO\",\n    \"und-Cyrl-SK\": \"uk-Cyrl-SK\",\n    \"und-Cyrl-TR\": \"kbd-Cyrl-TR\",\n    \"und-Cyrl-XK\": \"sr-Cyrl-XK\",\n    \"und-CZ\": \"cs-Latn-CZ\",\n    \"und-DE\": \"de-Latn-DE\",\n    \"und-Deva\": \"hi-Deva-IN\",\n    \"und-Deva-BT\": \"ne-Deva-BT\",\n    \"und-Deva-FJ\": \"hif-Deva-FJ\",\n    \"und-Deva-MU\": \"bho-Deva-MU\",\n    \"und-Deva-PK\": \"btv-Deva-PK\",\n    \"und-Diak\": \"dv-Diak-MV\",\n    \"und-DJ\": \"aa-Latn-DJ\",\n    \"und-DK\": \"da-Latn-DK\",\n    \"und-DO\": \"es-Latn-DO\",\n    \"und-Dogr\": \"doi-Dogr-IN\",\n    \"und-Dupl\": \"fr-Dupl-FR\",\n    \"und-DZ\": \"ar-Arab-DZ\",\n    \"und-EA\": \"es-Latn-EA\",\n    \"und-EC\": \"es-Latn-EC\",\n    \"und-EE\": \"et-Latn-EE\",\n    \"und-EG\": \"ar-Arab-EG\",\n    \"und-Egyp\": \"egy-Egyp-EG\",\n    \"und-EH\": \"ar-Arab-EH\",\n    \"und-Elba\": \"sq-Elba-AL\",\n    \"und-Elym\": \"arc-Elym-IR\",\n    \"und-ER\": \"ti-Ethi-ER\",\n    \"und-ES\": \"es-Latn-ES\",\n    \"und-ET\": \"am-Ethi-ET\",\n    \"und-Ethi\": \"am-Ethi-ET\",\n    \"und-EU\": \"en-Latn-IE\",\n    \"und-EZ\": \"de-Latn-EZ\",\n    \"und-FI\": \"fi-Latn-FI\",\n    \"und-FO\": \"fo-Latn-FO\",\n    \"und-FR\": \"fr-Latn-FR\",\n    \"und-GA\": \"fr-Latn-GA\",\n    \"und-GE\": \"ka-Geor-GE\",\n    \"und-Geor\": \"ka-Geor-GE\",\n    \"und-GF\": \"fr-Latn-GF\",\n    \"und-GH\": \"ak-Latn-GH\",\n    \"und-GL\": \"kl-Latn-GL\",\n    \"und-Glag\": \"cu-Glag-BG\",\n    \"und-GN\": \"fr-Latn-GN\",\n    \"und-Gong\": \"wsg-Gong-IN\",\n    \"und-Gonm\": \"esg-Gonm-IN\",\n    \"und-Goth\": \"got-Goth-UA\",\n    \"und-GP\": \"fr-Latn-GP\",\n    \"und-GQ\": \"es-Latn-GQ\",\n    \"und-GR\": \"el-Grek-GR\",\n    \"und-Gran\": \"sa-Gran-IN\",\n    \"und-Grek\": \"el-Grek-GR\",\n    \"und-Grek-TR\": \"bgx-Grek-TR\",\n    \"und-GS\": \"und-Latn-GS\",\n    \"und-GT\": \"es-Latn-GT\",\n    \"und-Gujr\": \"gu-Gujr-IN\",\n    \"und-Guru\": \"pa-Guru-IN\",\n    \"und-GW\": \"pt-Latn-GW\",\n    \"und-Hanb\": \"zh-Hanb-TW\",\n    \"und-Hang\": \"ko-Hang-KR\",\n    \"und-Hani\": \"zh-Hani-CN\",\n    \"und-Hano\": \"hnn-Hano-PH\",\n    \"und-Hans\": \"zh-Hans-CN\",\n    \"und-Hant\": \"zh-Hant-TW\",\n    \"und-Hebr\": \"he-Hebr-IL\",\n    \"und-Hebr-CA\": \"yi-Hebr-CA\",\n    \"und-Hebr-GB\": \"yi-Hebr-GB\",\n    \"und-Hebr-SE\": \"yi-Hebr-SE\",\n    \"und-Hebr-UA\": \"yi-Hebr-UA\",\n    \"und-Hebr-US\": \"yi-Hebr-US\",\n    \"und-Hira\": \"ja-Hira-JP\",\n    \"und-HK\": \"zh-Hant-HK\",\n    \"und-Hluw\": \"hlu-Hluw-TR\",\n    \"und-HM\": \"und-Latn-HM\",\n    \"und-Hmng\": \"hnj-Hmng-LA\",\n    \"und-Hmnp\": \"mww-Hmnp-US\",\n    \"und-HN\": \"es-Latn-HN\",\n    \"und-HR\": \"hr-Latn-HR\",\n    \"und-HT\": \"ht-Latn-HT\",\n    \"und-HU\": \"hu-Latn-HU\",\n    \"und-Hung\": \"hu-Hung-HU\",\n    \"und-IC\": \"es-Latn-IC\",\n    \"und-ID\": \"id-Latn-ID\",\n    \"und-IL\": \"he-Hebr-IL\",\n    \"und-IN\": \"hi-Deva-IN\",\n    \"und-IQ\": \"ar-Arab-IQ\",\n    \"und-IR\": \"fa-Arab-IR\",\n    \"und-IS\": \"is-Latn-IS\",\n    \"und-IT\": \"it-Latn-IT\",\n    \"und-Ital\": \"ett-Ital-IT\",\n    \"und-Jamo\": \"ko-Jamo-KR\",\n    \"und-Java\": \"jv-Java-ID\",\n    \"und-JO\": \"ar-Arab-JO\",\n    \"und-JP\": \"ja-Jpan-JP\",\n    \"und-Jpan\": \"ja-Jpan-JP\",\n    \"und-Kali\": \"eky-Kali-MM\",\n    \"und-Kana\": \"ja-Kana-JP\",\n    \"und-KE\": \"sw-Latn-KE\",\n    \"und-KG\": \"ky-Cyrl-KG\",\n    \"und-KH\": \"km-Khmr-KH\",\n    \"und-Khar\": \"pra-Khar-PK\",\n    \"und-Khmr\": \"km-Khmr-KH\",\n    \"und-Khoj\": \"sd-Khoj-IN\",\n    \"und-Kits\": \"zkt-Kits-CN\",\n    \"und-KM\": \"ar-Arab-KM\",\n    \"und-Knda\": \"kn-Knda-IN\",\n    \"und-Kore\": \"ko-Kore-KR\",\n    \"und-KP\": \"ko-Kore-KP\",\n    \"und-KR\": \"ko-Kore-KR\",\n    \"und-Kthi\": \"bho-Kthi-IN\",\n    \"und-KW\": \"ar-Arab-KW\",\n    \"und-KZ\": \"ru-Cyrl-KZ\",\n    \"und-LA\": \"lo-Laoo-LA\",\n    \"und-Lana\": \"nod-Lana-TH\",\n    \"und-Laoo\": \"lo-Laoo-LA\",\n    \"und-Latn-AF\": \"tk-Latn-AF\",\n    \"und-Latn-AM\": \"ku-Latn-AM\",\n    \"und-Latn-CN\": \"za-Latn-CN\",\n    \"und-Latn-CY\": \"tr-Latn-CY\",\n    \"und-Latn-DZ\": \"fr-Latn-DZ\",\n    \"und-Latn-ET\": \"en-Latn-ET\",\n    \"und-Latn-GE\": \"ku-Latn-GE\",\n    \"und-Latn-IR\": \"tk-Latn-IR\",\n    \"und-Latn-KM\": \"fr-Latn-KM\",\n    \"und-Latn-MA\": \"fr-Latn-MA\",\n    \"und-Latn-MK\": \"sq-Latn-MK\",\n    \"und-Latn-MM\": \"kac-Latn-MM\",\n    \"und-Latn-MO\": \"pt-Latn-MO\",\n    \"und-Latn-MR\": \"fr-Latn-MR\",\n    \"und-Latn-RU\": \"krl-Latn-RU\",\n    \"und-Latn-SY\": \"fr-Latn-SY\",\n    \"und-Latn-TN\": \"fr-Latn-TN\",\n    \"und-Latn-TW\": \"trv-Latn-TW\",\n    \"und-Latn-UA\": \"pl-Latn-UA\",\n    \"und-LB\": \"ar-Arab-LB\",\n    \"und-Lepc\": \"lep-Lepc-IN\",\n    \"und-LI\": \"de-Latn-LI\",\n    \"und-Limb\": \"lif-Limb-IN\",\n    \"und-Lina\": \"lab-Lina-GR\",\n    \"und-Linb\": \"grc-Linb-GR\",\n    \"und-Lisu\": \"lis-Lisu-CN\",\n    \"und-LK\": \"si-Sinh-LK\",\n    \"und-LS\": \"st-Latn-LS\",\n    \"und-LT\": \"lt-Latn-LT\",\n    \"und-LU\": \"fr-Latn-LU\",\n    \"und-LV\": \"lv-Latn-LV\",\n    \"und-LY\": \"ar-Arab-LY\",\n    \"und-Lyci\": \"xlc-Lyci-TR\",\n    \"und-Lydi\": \"xld-Lydi-TR\",\n    \"und-MA\": \"ar-Arab-MA\",\n    \"und-Mahj\": \"hi-Mahj-IN\",\n    \"und-Maka\": \"mak-Maka-ID\",\n    \"und-Mand\": \"myz-Mand-IR\",\n    \"und-Mani\": \"xmn-Mani-CN\",\n    \"und-Marc\": \"bo-Marc-CN\",\n    \"und-MC\": \"fr-Latn-MC\",\n    \"und-MD\": \"ro-Latn-MD\",\n    \"und-ME\": \"sr-Latn-ME\",\n    \"und-Medf\": \"dmf-Medf-NG\",\n    \"und-Mend\": \"men-Mend-SL\",\n    \"und-Merc\": \"xmr-Merc-SD\",\n    \"und-Mero\": \"xmr-Mero-SD\",\n    \"und-MF\": \"fr-Latn-MF\",\n    \"und-MG\": \"mg-Latn-MG\",\n    \"und-MK\": \"mk-Cyrl-MK\",\n    \"und-ML\": \"bm-Latn-ML\",\n    \"und-Mlym\": \"ml-Mlym-IN\",\n    \"und-MM\": \"my-Mymr-MM\",\n    \"und-MN\": \"mn-Cyrl-MN\",\n    \"und-MO\": \"zh-Hant-MO\",\n    \"und-Modi\": \"mr-Modi-IN\",\n    \"und-Mong\": \"mn-Mong-CN\",\n    \"und-MQ\": \"fr-Latn-MQ\",\n    \"und-MR\": \"ar-Arab-MR\",\n    \"und-Mroo\": \"mro-Mroo-BD\",\n    \"und-MT\": \"mt-Latn-MT\",\n    \"und-Mtei\": \"mni-Mtei-IN\",\n    \"und-MU\": \"mfe-Latn-MU\",\n    \"und-Mult\": \"skr-Mult-PK\",\n    \"und-MV\": \"dv-Thaa-MV\",\n    \"und-MX\": \"es-Latn-MX\",\n    \"und-MY\": \"ms-Latn-MY\",\n    \"und-Mymr\": \"my-Mymr-MM\",\n    \"und-Mymr-IN\": \"kht-Mymr-IN\",\n    \"und-Mymr-TH\": \"mnw-Mymr-TH\",\n    \"und-MZ\": \"pt-Latn-MZ\",\n    \"und-NA\": \"af-Latn-NA\",\n    \"und-Nand\": \"sa-Nand-IN\",\n    \"und-Narb\": \"xna-Narb-SA\",\n    \"und-Nbat\": \"arc-Nbat-JO\",\n    \"und-NC\": \"fr-Latn-NC\",\n    \"und-NE\": \"ha-Latn-NE\",\n    \"und-Newa\": \"new-Newa-NP\",\n    \"und-NI\": \"es-Latn-NI\",\n    \"und-Nkoo\": \"man-Nkoo-GN\",\n    \"und-NL\": \"nl-Latn-NL\",\n    \"und-NO\": \"nb-Latn-NO\",\n    \"und-NP\": \"ne-Deva-NP\",\n    \"und-Nshu\": \"zhx-Nshu-CN\",\n    \"und-Ogam\": \"sga-Ogam-IE\",\n    \"und-Olck\": \"sat-Olck-IN\",\n    \"und-OM\": \"ar-Arab-OM\",\n    \"und-Orkh\": \"otk-Orkh-MN\",\n    \"und-Orya\": \"or-Orya-IN\",\n    \"und-Osge\": \"osa-Osge-US\",\n    \"und-Osma\": \"so-Osma-SO\",\n    \"und-PA\": \"es-Latn-PA\",\n    \"und-Palm\": \"arc-Palm-SY\",\n    \"und-Pauc\": \"ctd-Pauc-MM\",\n    \"und-PE\": \"es-Latn-PE\",\n    \"und-Perm\": \"kv-Perm-RU\",\n    \"und-PF\": \"fr-Latn-PF\",\n    \"und-PG\": \"tpi-Latn-PG\",\n    \"und-PH\": \"fil-Latn-PH\",\n    \"und-Phag\": \"lzh-Phag-CN\",\n    \"und-Phli\": \"pal-Phli-IR\",\n    \"und-Phlp\": \"pal-Phlp-CN\",\n    \"und-Phnx\": \"phn-Phnx-LB\",\n    \"und-PK\": \"ur-Arab-PK\",\n    \"und-PL\": \"pl-Latn-PL\",\n    \"und-Plrd\": \"hmd-Plrd-CN\",\n    \"und-PM\": \"fr-Latn-PM\",\n    \"und-PR\": \"es-Latn-PR\",\n    \"und-Prti\": \"xpr-Prti-IR\",\n    \"und-PS\": \"ar-Arab-PS\",\n    \"und-PT\": \"pt-Latn-PT\",\n    \"und-PW\": \"pau-Latn-PW\",\n    \"und-PY\": \"gn-Latn-PY\",\n    \"und-QA\": \"ar-Arab-QA\",\n    \"und-QO\": \"en-Latn-DG\",\n    \"und-RE\": \"fr-Latn-RE\",\n    \"und-Rjng\": \"rej-Rjng-ID\",\n    \"und-RO\": \"ro-Latn-RO\",\n    \"und-Rohg\": \"rhg-Rohg-MM\",\n    \"und-RS\": \"sr-Cyrl-RS\",\n    \"und-RU\": \"ru-Cyrl-RU\",\n    \"und-Runr\": \"non-Runr-SE\",\n    \"und-RW\": \"rw-Latn-RW\",\n    \"und-SA\": \"ar-Arab-SA\",\n    \"und-Samr\": \"smp-Samr-IL\",\n    \"und-Sarb\": \"xsa-Sarb-YE\",\n    \"und-Saur\": \"saz-Saur-IN\",\n    \"und-SC\": \"fr-Latn-SC\",\n    \"und-SD\": \"ar-Arab-SD\",\n    \"und-SE\": \"sv-Latn-SE\",\n    \"und-Sgnw\": \"ase-Sgnw-US\",\n    \"und-Shaw\": \"en-Shaw-GB\",\n    \"und-Shrd\": \"sa-Shrd-IN\",\n    \"und-SI\": \"sl-Latn-SI\",\n    \"und-Sidd\": \"sa-Sidd-IN\",\n    \"und-Sind\": \"sd-Sind-IN\",\n    \"und-Sinh\": \"si-Sinh-LK\",\n    \"und-SJ\": \"nb-Latn-SJ\",\n    \"und-SK\": \"sk-Latn-SK\",\n    \"und-SM\": \"it-Latn-SM\",\n    \"und-SN\": \"fr-Latn-SN\",\n    \"und-SO\": \"so-Latn-SO\",\n    \"und-Sogd\": \"sog-Sogd-UZ\",\n    \"und-Sogo\": \"sog-Sogo-UZ\",\n    \"und-Sora\": \"srb-Sora-IN\",\n    \"und-Soyo\": \"cmg-Soyo-MN\",\n    \"und-SR\": \"nl-Latn-SR\",\n    \"und-ST\": \"pt-Latn-ST\",\n    \"und-Sund\": \"su-Sund-ID\",\n    \"und-SV\": \"es-Latn-SV\",\n    \"und-SY\": \"ar-Arab-SY\",\n    \"und-Sylo\": \"syl-Sylo-BD\",\n    \"und-Syrc\": \"syr-Syrc-IQ\",\n    \"und-Tagb\": \"tbw-Tagb-PH\",\n    \"und-Takr\": \"doi-Takr-IN\",\n    \"und-Tale\": \"tdd-Tale-CN\",\n    \"und-Talu\": \"khb-Talu-CN\",\n    \"und-Taml\": \"ta-Taml-IN\",\n    \"und-Tang\": \"txg-Tang-CN\",\n    \"und-Tavt\": \"blt-Tavt-VN\",\n    \"und-TD\": \"fr-Latn-TD\",\n    \"und-Telu\": \"te-Telu-IN\",\n    \"und-TF\": \"fr-Latn-TF\",\n    \"und-Tfng\": \"zgh-Tfng-MA\",\n    \"und-TG\": \"fr-Latn-TG\",\n    \"und-Tglg\": \"fil-Tglg-PH\",\n    \"und-TH\": \"th-Thai-TH\",\n    \"und-Thaa\": \"dv-Thaa-MV\",\n    \"und-Thai\": \"th-Thai-TH\",\n    \"und-Thai-CN\": \"lcp-Thai-CN\",\n    \"und-Thai-KH\": \"kdt-Thai-KH\",\n    \"und-Thai-LA\": \"kdt-Thai-LA\",\n    \"und-Tibt\": \"bo-Tibt-CN\",\n    \"und-Tirh\": \"mai-Tirh-IN\",\n    \"und-TJ\": \"tg-Cyrl-TJ\",\n    \"und-TK\": \"tkl-Latn-TK\",\n    \"und-TL\": \"pt-Latn-TL\",\n    \"und-TM\": \"tk-Latn-TM\",\n    \"und-TN\": \"ar-Arab-TN\",\n    \"und-TO\": \"to-Latn-TO\",\n    \"und-TR\": \"tr-Latn-TR\",\n    \"und-TV\": \"tvl-Latn-TV\",\n    \"und-TW\": \"zh-Hant-TW\",\n    \"und-TZ\": \"sw-Latn-TZ\",\n    \"und-UA\": \"uk-Cyrl-UA\",\n    \"und-UG\": \"sw-Latn-UG\",\n    \"und-Ugar\": \"uga-Ugar-SY\",\n    \"und-UY\": \"es-Latn-UY\",\n    \"und-UZ\": \"uz-Latn-UZ\",\n    \"und-VA\": \"it-Latn-VA\",\n    \"und-Vaii\": \"vai-Vaii-LR\",\n    \"und-VE\": \"es-Latn-VE\",\n    \"und-VN\": \"vi-Latn-VN\",\n    \"und-VU\": \"bi-Latn-VU\",\n    \"und-Wara\": \"hoc-Wara-IN\",\n    \"und-Wcho\": \"nnp-Wcho-IN\",\n    \"und-WF\": \"fr-Latn-WF\",\n    \"und-WS\": \"sm-Latn-WS\",\n    \"und-XK\": \"sq-Latn-XK\",\n    \"und-Xpeo\": \"peo-Xpeo-IR\",\n    \"und-Xsux\": \"akk-Xsux-IQ\",\n    \"und-YE\": \"ar-Arab-YE\",\n    \"und-Yezi\": \"ku-Yezi-GE\",\n    \"und-Yiii\": \"ii-Yiii-CN\",\n    \"und-YT\": \"fr-Latn-YT\",\n    \"und-Zanb\": \"cmg-Zanb-MN\",\n    \"und-ZW\": \"sn-Latn-ZW\",\n    \"unr\": \"unr-Beng-IN\",\n    \"unr-Deva\": \"unr-Deva-NP\",\n    \"unr-NP\": \"unr-Deva-NP\",\n    \"unx\": \"unx-Beng-IN\",\n    \"uok\": \"uok-Latn-ZZ\",\n    \"ur\": \"ur-Arab-PK\",\n    \"uri\": \"uri-Latn-ZZ\",\n    \"urt\": \"urt-Latn-ZZ\",\n    \"urw\": \"urw-Latn-ZZ\",\n    \"usa\": \"usa-Latn-ZZ\",\n    \"uth\": \"uth-Latn-ZZ\",\n    \"utr\": \"utr-Latn-ZZ\",\n    \"uvh\": \"uvh-Latn-ZZ\",\n    \"uvl\": \"uvl-Latn-ZZ\",\n    \"uz\": \"uz-Latn-UZ\",\n    \"uz-AF\": \"uz-Arab-AF\",\n    \"uz-Arab\": \"uz-Arab-AF\",\n    \"uz-CN\": \"uz-Cyrl-CN\",\n    \"vag\": \"vag-Latn-ZZ\",\n    \"vai\": \"vai-Vaii-LR\",\n    \"van\": \"van-Latn-ZZ\",\n    \"ve\": \"ve-Latn-ZA\",\n    \"vec\": \"vec-Latn-IT\",\n    \"vep\": \"vep-Latn-RU\",\n    \"vi\": \"vi-Latn-VN\",\n    \"vic\": \"vic-Latn-SX\",\n    \"viv\": \"viv-Latn-ZZ\",\n    \"vls\": \"vls-Latn-BE\",\n    \"vmf\": \"vmf-Latn-DE\",\n    \"vmw\": \"vmw-Latn-MZ\",\n    \"vo\": \"vo-Latn-001\",\n    \"vot\": \"vot-Latn-RU\",\n    \"vro\": \"vro-Latn-EE\",\n    \"vun\": \"vun-Latn-TZ\",\n    \"vut\": \"vut-Latn-ZZ\",\n    \"wa\": \"wa-Latn-BE\",\n    \"wae\": \"wae-Latn-CH\",\n    \"waj\": \"waj-Latn-ZZ\",\n    \"wal\": \"wal-Ethi-ET\",\n    \"wan\": \"wan-Latn-ZZ\",\n    \"war\": \"war-Latn-PH\",\n    \"wbp\": \"wbp-Latn-AU\",\n    \"wbq\": \"wbq-Telu-IN\",\n    \"wbr\": \"wbr-Deva-IN\",\n    \"wci\": \"wci-Latn-ZZ\",\n    \"wer\": \"wer-Latn-ZZ\",\n    \"wgi\": \"wgi-Latn-ZZ\",\n    \"whg\": \"whg-Latn-ZZ\",\n    \"wib\": \"wib-Latn-ZZ\",\n    \"wiu\": \"wiu-Latn-ZZ\",\n    \"wiv\": \"wiv-Latn-ZZ\",\n    \"wja\": \"wja-Latn-ZZ\",\n    \"wji\": \"wji-Latn-ZZ\",\n    \"wls\": \"wls-Latn-WF\",\n    \"wmo\": \"wmo-Latn-ZZ\",\n    \"wnc\": \"wnc-Latn-ZZ\",\n    \"wni\": \"wni-Arab-KM\",\n    \"wnu\": \"wnu-Latn-ZZ\",\n    \"wo\": \"wo-Latn-SN\",\n    \"wob\": \"wob-Latn-ZZ\",\n    \"wos\": \"wos-Latn-ZZ\",\n    \"wrs\": \"wrs-Latn-ZZ\",\n    \"wsg\": \"wsg-Gong-IN\",\n    \"wsk\": \"wsk-Latn-ZZ\",\n    \"wtm\": \"wtm-Deva-IN\",\n    \"wuu\": \"wuu-Hans-CN\",\n    \"wuv\": \"wuv-Latn-ZZ\",\n    \"wwa\": \"wwa-Latn-ZZ\",\n    \"xav\": \"xav-Latn-BR\",\n    \"xbi\": \"xbi-Latn-ZZ\",\n    \"xco\": \"xco-Chrs-UZ\",\n    \"xcr\": \"xcr-Cari-TR\",\n    \"xes\": \"xes-Latn-ZZ\",\n    \"xh\": \"xh-Latn-ZA\",\n    \"xla\": \"xla-Latn-ZZ\",\n    \"xlc\": \"xlc-Lyci-TR\",\n    \"xld\": \"xld-Lydi-TR\",\n    \"xmf\": \"xmf-Geor-GE\",\n    \"xmn\": \"xmn-Mani-CN\",\n    \"xmr\": \"xmr-Merc-SD\",\n    \"xna\": \"xna-Narb-SA\",\n    \"xnr\": \"xnr-Deva-IN\",\n    \"xog\": \"xog-Latn-UG\",\n    \"xon\": \"xon-Latn-ZZ\",\n    \"xpr\": \"xpr-Prti-IR\",\n    \"xrb\": \"xrb-Latn-ZZ\",\n    \"xsa\": \"xsa-Sarb-YE\",\n    \"xsi\": \"xsi-Latn-ZZ\",\n    \"xsm\": \"xsm-Latn-ZZ\",\n    \"xsr\": \"xsr-Deva-NP\",\n    \"xwe\": \"xwe-Latn-ZZ\",\n    \"yam\": \"yam-Latn-ZZ\",\n    \"yao\": \"yao-Latn-MZ\",\n    \"yap\": \"yap-Latn-FM\",\n    \"yas\": \"yas-Latn-ZZ\",\n    \"yat\": \"yat-Latn-ZZ\",\n    \"yav\": \"yav-Latn-CM\",\n    \"yay\": \"yay-Latn-ZZ\",\n    \"yaz\": \"yaz-Latn-ZZ\",\n    \"yba\": \"yba-Latn-ZZ\",\n    \"ybb\": \"ybb-Latn-CM\",\n    \"yby\": \"yby-Latn-ZZ\",\n    \"yer\": \"yer-Latn-ZZ\",\n    \"ygr\": \"ygr-Latn-ZZ\",\n    \"ygw\": \"ygw-Latn-ZZ\",\n    \"yi\": \"yi-Hebr-001\",\n    \"yko\": \"yko-Latn-ZZ\",\n    \"yle\": \"yle-Latn-ZZ\",\n    \"ylg\": \"ylg-Latn-ZZ\",\n    \"yll\": \"yll-Latn-ZZ\",\n    \"yml\": \"yml-Latn-ZZ\",\n    \"yo\": \"yo-Latn-NG\",\n    \"yon\": \"yon-Latn-ZZ\",\n    \"yrb\": \"yrb-Latn-ZZ\",\n    \"yre\": \"yre-Latn-ZZ\",\n    \"yrl\": \"yrl-Latn-BR\",\n    \"yss\": \"yss-Latn-ZZ\",\n    \"yua\": \"yua-Latn-MX\",\n    \"yue\": \"yue-Hant-HK\",\n    \"yue-CN\": \"yue-Hans-CN\",\n    \"yue-Hans\": \"yue-Hans-CN\",\n    \"yuj\": \"yuj-Latn-ZZ\",\n    \"yut\": \"yut-Latn-ZZ\",\n    \"yuw\": \"yuw-Latn-ZZ\",\n    \"za\": \"za-Latn-CN\",\n    \"zag\": \"zag-Latn-SD\",\n    \"zdj\": \"zdj-Arab-KM\",\n    \"zea\": \"zea-Latn-NL\",\n    \"zgh\": \"zgh-Tfng-MA\",\n    \"zh\": \"zh-Hans-CN\",\n    \"zh-AU\": \"zh-Hant-AU\",\n    \"zh-BN\": \"zh-Hant-BN\",\n    \"zh-Bopo\": \"zh-Bopo-TW\",\n    \"zh-GB\": \"zh-Hant-GB\",\n    \"zh-GF\": \"zh-Hant-GF\",\n    \"zh-Hanb\": \"zh-Hanb-TW\",\n    \"zh-Hant\": \"zh-Hant-TW\",\n    \"zh-HK\": \"zh-Hant-HK\",\n    \"zh-ID\": \"zh-Hant-ID\",\n    \"zh-MO\": \"zh-Hant-MO\",\n    \"zh-PA\": \"zh-Hant-PA\",\n    \"zh-PF\": \"zh-Hant-PF\",\n    \"zh-PH\": \"zh-Hant-PH\",\n    \"zh-SR\": \"zh-Hant-SR\",\n    \"zh-TH\": \"zh-Hant-TH\",\n    \"zh-TW\": \"zh-Hant-TW\",\n    \"zh-US\": \"zh-Hant-US\",\n    \"zh-VN\": \"zh-Hant-VN\",\n    \"zhx\": \"zhx-Nshu-CN\",\n    \"zia\": \"zia-Latn-ZZ\",\n    \"zkt\": \"zkt-Kits-CN\",\n    \"zlm\": \"zlm-Latn-TG\",\n    \"zmi\": \"zmi-Latn-MY\",\n    \"zne\": \"zne-Latn-ZZ\",\n    \"zu\": \"zu-Latn-ZA\",\n    \"zza\": \"zza-Latn-TR\"\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseUnicodeLocaleId = exports.parseUnicodeLanguageId = exports.isUnicodeVariantSubtag = exports.isUnicodeScriptSubtag = exports.isUnicodeRegionSubtag = exports.isStructurallyValidLanguageTag = exports.isUnicodeLanguageSubtag = exports.SEPARATOR = void 0;\nvar tslib_1 = require(\"tslib\");\nvar ALPHANUM_1_8 = /^[a-z0-9]{1,8}$/i;\nvar ALPHANUM_2_8 = /^[a-z0-9]{2,8}$/i;\nvar ALPHANUM_3_8 = /^[a-z0-9]{3,8}$/i;\nvar KEY_REGEX = /^[a-z0-9][a-z]$/i;\nvar TYPE_REGEX = /^[a-z0-9]{3,8}$/i;\nvar ALPHA_4 = /^[a-z]{4}$/i;\n// alphanum-[tTuUxX]\nvar OTHER_EXTENSION_TYPE = /^[0-9a-svwyz]$/i;\nvar UNICODE_REGION_SUBTAG_REGEX = /^([a-z]{2}|[0-9]{3})$/i;\nvar UNICODE_VARIANT_SUBTAG_REGEX = /^([a-z0-9]{5,8}|[0-9][a-z0-9]{3})$/i;\nvar UNICODE_LANGUAGE_SUBTAG_REGEX = /^([a-z]{2,3}|[a-z]{5,8})$/i;\nvar TKEY_REGEX = /^[a-z][0-9]$/i;\nexports.SEPARATOR = '-';\nfunction isUnicodeLanguageSubtag(lang) {\n    return UNICODE_LANGUAGE_SUBTAG_REGEX.test(lang);\n}\nexports.isUnicodeLanguageSubtag = isUnicodeLanguageSubtag;\nfunction isStructurallyValidLanguageTag(tag) {\n    try {\n        parseUnicodeLanguageId(tag.split(exports.SEPARATOR));\n    }\n    catch (e) {\n        return false;\n    }\n    return true;\n}\nexports.isStructurallyValidLanguageTag = isStructurallyValidLanguageTag;\nfunction isUnicodeRegionSubtag(region) {\n    return UNICODE_REGION_SUBTAG_REGEX.test(region);\n}\nexports.isUnicodeRegionSubtag = isUnicodeRegionSubtag;\nfunction isUnicodeScriptSubtag(script) {\n    return ALPHA_4.test(script);\n}\nexports.isUnicodeScriptSubtag = isUnicodeScriptSubtag;\nfunction isUnicodeVariantSubtag(variant) {\n    return UNICODE_VARIANT_SUBTAG_REGEX.test(variant);\n}\nexports.isUnicodeVariantSubtag = isUnicodeVariantSubtag;\nfunction parseUnicodeLanguageId(chunks) {\n    if (typeof chunks === 'string') {\n        chunks = chunks.split(exports.SEPARATOR);\n    }\n    var lang = chunks.shift();\n    if (!lang) {\n        throw new RangeError('Missing unicode_language_subtag');\n    }\n    if (lang === 'root') {\n        return { lang: 'root', variants: [] };\n    }\n    // unicode_language_subtag\n    if (!isUnicodeLanguageSubtag(lang)) {\n        throw new RangeError('Malformed unicode_language_subtag');\n    }\n    var script;\n    // unicode_script_subtag\n    if (chunks.length && isUnicodeScriptSubtag(chunks[0])) {\n        script = chunks.shift();\n    }\n    var region;\n    // unicode_region_subtag\n    if (chunks.length && isUnicodeRegionSubtag(chunks[0])) {\n        region = chunks.shift();\n    }\n    var variants = {};\n    while (chunks.length && isUnicodeVariantSubtag(chunks[0])) {\n        var variant = chunks.shift();\n        if (variant in variants) {\n            throw new RangeError(\"Duplicate variant \\\"\" + variant + \"\\\"\");\n        }\n        variants[variant] = 1;\n    }\n    return {\n        lang: lang,\n        script: script,\n        region: region,\n        variants: Object.keys(variants),\n    };\n}\nexports.parseUnicodeLanguageId = parseUnicodeLanguageId;\nfunction parseUnicodeExtension(chunks) {\n    var keywords = [];\n    var keyword;\n    while (chunks.length && (keyword = parseKeyword(chunks))) {\n        keywords.push(keyword);\n    }\n    if (keywords.length) {\n        return {\n            type: 'u',\n            keywords: keywords,\n            attributes: [],\n        };\n    }\n    // Mix of attributes & keywords\n    // Check for attributes first\n    var attributes = [];\n    while (chunks.length && ALPHANUM_3_8.test(chunks[0])) {\n        attributes.push(chunks.shift());\n    }\n    while (chunks.length && (keyword = parseKeyword(chunks))) {\n        keywords.push(keyword);\n    }\n    if (keywords.length || attributes.length) {\n        return {\n            type: 'u',\n            attributes: attributes,\n            keywords: keywords,\n        };\n    }\n    throw new RangeError('Malformed unicode_extension');\n}\nfunction parseKeyword(chunks) {\n    var key;\n    if (!KEY_REGEX.test(chunks[0])) {\n        return;\n    }\n    key = chunks.shift();\n    var type = [];\n    while (chunks.length && TYPE_REGEX.test(chunks[0])) {\n        type.push(chunks.shift());\n    }\n    var value = '';\n    if (type.length) {\n        value = type.join(exports.SEPARATOR);\n    }\n    return [key, value];\n}\nfunction parseTransformedExtension(chunks) {\n    var lang;\n    try {\n        lang = parseUnicodeLanguageId(chunks);\n    }\n    catch (e) {\n        // Try just parsing tfield\n    }\n    var fields = [];\n    while (chunks.length && TKEY_REGEX.test(chunks[0])) {\n        var key = chunks.shift();\n        var value = [];\n        while (chunks.length && ALPHANUM_3_8.test(chunks[0])) {\n            value.push(chunks.shift());\n        }\n        if (!value.length) {\n            throw new RangeError(\"Missing tvalue for tkey \\\"\" + key + \"\\\"\");\n        }\n        fields.push([key, value.join(exports.SEPARATOR)]);\n    }\n    if (fields.length) {\n        return {\n            type: 't',\n            fields: fields,\n            lang: lang,\n        };\n    }\n    throw new RangeError('Malformed transformed_extension');\n}\nfunction parsePuExtension(chunks) {\n    var exts = [];\n    while (chunks.length && ALPHANUM_1_8.test(chunks[0])) {\n        exts.push(chunks.shift());\n    }\n    if (exts.length) {\n        return {\n            type: 'x',\n            value: exts.join(exports.SEPARATOR),\n        };\n    }\n    throw new RangeError('Malformed private_use_extension');\n}\nfunction parseOtherExtensionValue(chunks) {\n    var exts = [];\n    while (chunks.length && ALPHANUM_2_8.test(chunks[0])) {\n        exts.push(chunks.shift());\n    }\n    if (exts.length) {\n        return exts.join(exports.SEPARATOR);\n    }\n    return '';\n}\nfunction parseExtensions(chunks) {\n    if (!chunks.length) {\n        return { extensions: [] };\n    }\n    var extensions = [];\n    var unicodeExtension;\n    var transformedExtension;\n    var puExtension;\n    var otherExtensionMap = {};\n    do {\n        var type = chunks.shift();\n        switch (type) {\n            case 'u':\n            case 'U':\n                if (unicodeExtension) {\n                    throw new RangeError('There can only be 1 -u- extension');\n                }\n                unicodeExtension = parseUnicodeExtension(chunks);\n                extensions.push(unicodeExtension);\n                break;\n            case 't':\n            case 'T':\n                if (transformedExtension) {\n                    throw new RangeError('There can only be 1 -t- extension');\n                }\n                transformedExtension = parseTransformedExtension(chunks);\n                extensions.push(transformedExtension);\n                break;\n            case 'x':\n            case 'X':\n                if (puExtension) {\n                    throw new RangeError('There can only be 1 -x- extension');\n                }\n                puExtension = parsePuExtension(chunks);\n                extensions.push(puExtension);\n                break;\n            default:\n                if (!OTHER_EXTENSION_TYPE.test(type)) {\n                    throw new RangeError('Malformed extension type');\n                }\n                if (type in otherExtensionMap) {\n                    throw new RangeError(\"There can only be 1 -\" + type + \"- extension\");\n                }\n                var extension = {\n                    type: type,\n                    value: parseOtherExtensionValue(chunks),\n                };\n                otherExtensionMap[extension.type] = extension;\n                extensions.push(extension);\n                break;\n        }\n    } while (chunks.length);\n    return { extensions: extensions };\n}\nfunction parseUnicodeLocaleId(locale) {\n    var chunks = locale.split(exports.SEPARATOR);\n    var lang = parseUnicodeLanguageId(chunks);\n    return (0, tslib_1.__assign)({ lang: lang }, parseExtensions(chunks));\n}\nexports.parseUnicodeLocaleId = parseUnicodeLocaleId;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","/*************************************************************************\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n **************************************************************************/\n\nexport {\n  Actions,\n  ElementTypes,\n  trackingEvent,\n  errorEvent\n} from './metrics/metricsEvent';\n","/*************************************************************************\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n **************************************************************************/\n\nimport Metrics from '@exc/metrics';\nimport type {\n  EventAttributes,\n  SearchDetail,\n  EventDetails,\n  EventAttributeArray\n} from './types/EventData';\n\nconst metrics: Record<string, Metrics> = {};\n\n/**\n * Helper class for defining valid actions that can generate usage\n * tracking events.\n */\nconst Actions = {\n  /**\n   * Indicates that the user clicked on something to initiate a feature.\n   */\n  click: 'click',\n\n  /**\n   * Indicates that the user provided input via the keyboard.\n   */\n  keyboard: 'keyboard',\n\n  /**\n   * Indicates that the application displayed a feature.\n   * @returns The name of the action.\n   */\n  display: 'display'\n};\n\n/**\n * Defines valid types for elements that can generate usage tracking events.\n */\nconst ElementTypes = {\n  /**\n   * An button element that users can push.\n   */\n  button: 'button',\n\n  /**\n   * An button element where users can type text.\n   */\n  textbox: 'textbox',\n\n  /**\n   * An checkbox element that users can toggle.\n   */\n  checkbox: 'checkbox',\n\n  /**\n   * Highest level option when there isn't necessarily a specific element. Should\n   * be used as a last resort.\n   */\n  page: 'page'\n};\n\n/**\n * Gets a Metrics SDK object. Creates a new object or returns an existing instance (memoization).\n *\n * @returns Metrics SDK object.\n */\nfunction getMetrics(applicationName: string): Metrics {\n  if (!metrics[applicationName]) {\n    metrics[applicationName] = new Metrics(applicationName);\n  }\n  return metrics[applicationName];\n}\n\nfunction flattenArray(arrayKey: string, toFlatten: EventAttributeArray): Record<string, string | number | boolean> {\n  const flattened = {};\n  toFlatten.forEach((item, index) => {\n    Object.keys(item).forEach(key => {\n      flattened[`${arrayKey}_${key}${index}`] = item[key];\n    });\n  });\n  return flattened;\n}\n\nfunction flattenAttributes(attributes: EventAttributes): Record<string, string | number | boolean> {\n  let flattenedAttributes: Record<string, string | number | boolean> = {};\n  for (const key in attributes) {\n    const value = attributes[key];\n    if (Array.isArray(value)) {\n      flattenedAttributes = {\n        ...flattenedAttributes,\n        ...flattenArray(key, value)\n      };\n    } else if (typeof value === 'boolean') {\n      flattenedAttributes[key] = attributes[key] as boolean;\n    } else if (typeof value === 'string') {\n      flattenedAttributes[key] = attributes[key] as string;\n    } else if (typeof value === 'number') {\n      flattenedAttributes[key] = attributes[key] as number;\n    }\n  }\n\n  return flattenedAttributes;\n}\n\n/**\n * Converts search details from the instrumentation library into a format that can be sent to Analytics.\n * @param search Information about the search.\n * @returns Structure expected by the Analytics SDK.\n */\nfunction createSearchData(search: SearchDetail): any {\n  const searchData: any = {\n    term: search.term,\n    resultCount: search.resultCount\n  };\n  if (search.facets) {\n    searchData.facets = search.facets?.map(facet => {\n      if (Array.isArray(facet)) {\n        return facet.map(f => `${f.name}:${f.value}`);\n      }\n      return `${facet.name}:${facet.value}`;\n    });\n  }\n  return searchData;\n}\n\n/**\n * Sends a usage tracking event using the Metrics SDK's analytics functionality.\n * @param details General details about the event.\n */\nfunction trackingEvent(details: EventDetails) {\n  const {\n    applicationName,\n    eventData\n  } = details;\n  const eventPayload = {\n    ...eventData\n  };\n  if (details.attributes) {\n    eventPayload.attributes = flattenAttributes(details.attributes);\n  }\n  if (details.search) {\n    eventPayload.search = createSearchData(details.search);\n  }\n  const metrics = getMetrics(applicationName);\n  metrics.analytics.trackEvent(eventPayload);\n}\n\n/**\n * Captures the detail of an error encountered by the application.\n * @param applicationName Identifier for the application that encountered the error.\n * @param message Human readable message to include with the error.\n * @param error Details of the error.\n */\nfunction errorEvent(applicationName: string, message: string, error: Error) {\n  const metrics = getMetrics(applicationName);\n  metrics.error(message, error);\n}\n\nexport {\n  Actions,\n  ElementTypes,\n  trackingEvent,\n  errorEvent\n};\n","import {\n    // Event,\n    EventTarget,\n    // Type,\n    defineEventAttribute,\n} from \"event-target-shim\"\n\n// Known Limitation\n//   Use `any` because the type of `AbortSignal` in `lib.dom.d.ts` is wrong and\n//   to make assignable our `AbortSignal` into that.\n//   https://github.com/Microsoft/TSJS-lib-generator/pull/623\ntype Events = {\n    abort: any // Event & Type<\"abort\">\n}\ntype EventAttributes = {\n    onabort: any // Event & Type<\"abort\">\n}\n\n/**\n * The signal class.\n * @see https://dom.spec.whatwg.org/#abortsignal\n */\nexport default class AbortSignal extends EventTarget<Events, EventAttributes> {\n    /**\n     * AbortSignal cannot be constructed directly.\n     */\n    public constructor() {\n        super()\n        throw new TypeError(\"AbortSignal cannot be constructed directly\")\n    }\n\n    /**\n     * Returns `true` if this `AbortSignal`'s `AbortController` has signaled to abort, and `false` otherwise.\n     */\n    public get aborted(): boolean {\n        const aborted = abortedFlags.get(this)\n        if (typeof aborted !== \"boolean\") {\n            throw new TypeError(\n                `Expected 'this' to be an 'AbortSignal' object, but got ${\n                    this === null ? \"null\" : typeof this\n                }`,\n            )\n        }\n        return aborted\n    }\n}\ndefineEventAttribute(AbortSignal.prototype, \"abort\")\n\n/**\n * Create an AbortSignal object.\n */\nexport function createAbortSignal(): AbortSignal {\n    const signal = Object.create(AbortSignal.prototype)\n    EventTarget.call(signal)\n    abortedFlags.set(signal, false)\n    return signal\n}\n\n/**\n * Abort a given signal.\n */\nexport function abortSignal(signal: AbortSignal): void {\n    if (abortedFlags.get(signal) !== false) {\n        return\n    }\n\n    abortedFlags.set(signal, true)\n    signal.dispatchEvent<\"abort\">({ type: \"abort\" })\n}\n\n/**\n * Aborted flag for each instances.\n */\nconst abortedFlags = new WeakMap<AbortSignal, boolean>()\n\n// Properties should be enumerable.\nObject.defineProperties(AbortSignal.prototype, {\n    aborted: { enumerable: true },\n})\n\n// `toString()` should return `\"[object AbortSignal]\"`\nif (typeof Symbol === \"function\" && typeof Symbol.toStringTag === \"symbol\") {\n    Object.defineProperty(AbortSignal.prototype, Symbol.toStringTag, {\n        configurable: true,\n        value: \"AbortSignal\",\n    })\n}\n","import AbortSignal, { abortSignal, createAbortSignal } from \"./abort-signal\"\n\n/**\n * The AbortController.\n * @see https://dom.spec.whatwg.org/#abortcontroller\n */\nexport default class AbortController {\n    /**\n     * Initialize this controller.\n     */\n    public constructor() {\n        signals.set(this, createAbortSignal())\n    }\n\n    /**\n     * Returns the `AbortSignal` object associated with this object.\n     */\n    public get signal(): AbortSignal {\n        return getSignal(this)\n    }\n\n    /**\n     * Abort and signal to any observers that the associated activity is to be aborted.\n     */\n    public abort(): void {\n        abortSignal(getSignal(this))\n    }\n}\n\n/**\n * Associated signals.\n */\nconst signals = new WeakMap<AbortController, AbortSignal>()\n\n/**\n * Get the associated signal of a given controller.\n */\nfunction getSignal(controller: AbortController): AbortSignal {\n    const signal = signals.get(controller)\n    if (signal == null) {\n        throw new TypeError(\n            `Expected 'this' to be an 'AbortController' object, but got ${\n                controller === null ? \"null\" : typeof controller\n            }`,\n        )\n    }\n    return signal\n}\n\n// Properties should be enumerable.\nObject.defineProperties(AbortController.prototype, {\n    signal: { enumerable: true },\n    abort: { enumerable: true },\n})\n\nif (typeof Symbol === \"function\" && typeof Symbol.toStringTag === \"symbol\") {\n    Object.defineProperty(AbortController.prototype, Symbol.toStringTag, {\n        configurable: true,\n        value: \"AbortController\",\n    })\n}\n\nexport { AbortController, AbortSignal }\n","/*globals require, self, window */\n\"use strict\"\n\nconst ac = require(\"./dist/abort-controller\")\n\n/*eslint-disable @mysticatea/prettier */\nconst g =\n    typeof self !== \"undefined\" ? self :\n    typeof window !== \"undefined\" ? window :\n    typeof global !== \"undefined\" ? global :\n    /* otherwise */ undefined\n/*eslint-enable @mysticatea/prettier */\n\nif (g) {\n    if (typeof g.AbortController === \"undefined\") {\n        g.AbortController = ac.AbortController\n    }\n    if (typeof g.AbortSignal === \"undefined\") {\n        g.AbortSignal = ac.AbortSignal\n    }\n}\n","/**\n * @copyright 2015, Andrey Popp <8mayday@gmail.com>\n *\n * The decorator may be used on classes or methods\n * ```\n * @autobind\n * class FullBound {}\n *\n * class PartBound {\n *   @autobind\n *   method () {}\n * }\n * ```\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\nexports['default'] = autobind;\n\nfunction autobind() {\n  for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  if (args.length === 1) {\n    return boundClass.apply(undefined, args);\n  } else {\n    return boundMethod.apply(undefined, args);\n  }\n}\n\n/**\n * Use boundMethod to bind all methods on the target.prototype\n */\nfunction boundClass(target) {\n  // (Using reflect to get all keys including symbols)\n  var keys = undefined;\n  // Use Reflect if exists\n  if (typeof Reflect !== 'undefined' && typeof Reflect.ownKeys === 'function') {\n    keys = Reflect.ownKeys(target.prototype);\n  } else {\n    keys = Object.getOwnPropertyNames(target.prototype);\n    // use symbols if support is provided\n    if (typeof Object.getOwnPropertySymbols === 'function') {\n      keys = keys.concat(Object.getOwnPropertySymbols(target.prototype));\n    }\n  }\n\n  keys.forEach(function (key) {\n    // Ignore special case target method\n    if (key === 'constructor') {\n      return;\n    }\n\n    var descriptor = Object.getOwnPropertyDescriptor(target.prototype, key);\n\n    // Only methods need binding\n    if (typeof descriptor.value === 'function') {\n      Object.defineProperty(target.prototype, key, boundMethod(target, key, descriptor));\n    }\n  });\n  return target;\n}\n\n/**\n * Return a descriptor removing the value and returning a getter\n * The getter will return a .bind version of the function\n * and memoize the result against a symbol on the instance\n */\nfunction boundMethod(target, key, descriptor) {\n  var fn = descriptor.value;\n\n  if (typeof fn !== 'function') {\n    throw new Error('@autobind decorator can only be applied to methods not: ' + typeof fn);\n  }\n\n  // In IE11 calling Object.defineProperty has a side-effect of evaluating the\n  // getter for the property which is being replaced. This causes infinite\n  // recursion and an \"Out of stack space\" error.\n  var definingProperty = false;\n\n  return {\n    configurable: true,\n    get: function get() {\n      if (definingProperty || this === target.prototype || this.hasOwnProperty(key)) {\n        return fn;\n      }\n\n      var boundFn = fn.bind(this);\n      definingProperty = true;\n      Object.defineProperty(this, key, {\n        value: boundFn,\n        configurable: true,\n        writable: true\n      });\n      definingProperty = false;\n      return boundFn;\n    }\n  };\n}\nmodule.exports = exports['default'];\n","module.exports = { \"default\": require(\"core-js/library/fn/object/assign\"), __esModule: true };","module.exports = { \"default\": require(\"core-js/library/fn/object/create\"), __esModule: true };","module.exports = { \"default\": require(\"core-js/library/fn/object/define-property\"), __esModule: true };","module.exports = { \"default\": require(\"core-js/library/fn/object/get-prototype-of\"), __esModule: true };","module.exports = { \"default\": require(\"core-js/library/fn/object/keys\"), __esModule: true };","module.exports = { \"default\": require(\"core-js/library/fn/object/set-prototype-of\"), __esModule: true };","module.exports = { \"default\": require(\"core-js/library/fn/symbol\"), __esModule: true };","module.exports = { \"default\": require(\"core-js/library/fn/symbol/iterator\"), __esModule: true };","\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};","\"use strict\";\n\nexports.__esModule = true;\n\nvar _defineProperty = require(\"../core-js/object/define-property\");\n\nvar _defineProperty2 = _interopRequireDefault(_defineProperty);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      (0, _defineProperty2.default)(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();","\"use strict\";\n\nexports.__esModule = true;\n\nvar _assign = require(\"../core-js/object/assign\");\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _assign2.default || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};","\"use strict\";\n\nexports.__esModule = true;\n\nvar _setPrototypeOf = require(\"../core-js/object/set-prototype-of\");\n\nvar _setPrototypeOf2 = _interopRequireDefault(_setPrototypeOf);\n\nvar _create = require(\"../core-js/object/create\");\n\nvar _create2 = _interopRequireDefault(_create);\n\nvar _typeof2 = require(\"../helpers/typeof\");\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(superClass)));\n  }\n\n  subClass.prototype = (0, _create2.default)(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) _setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass;\n};","\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (obj, keys) {\n  var target = {};\n\n  for (var i in obj) {\n    if (keys.indexOf(i) >= 0) continue;\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n    target[i] = obj[i];\n  }\n\n  return target;\n};","\"use strict\";\n\nexports.__esModule = true;\n\nvar _typeof2 = require(\"../helpers/typeof\");\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && ((typeof call === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(call)) === \"object\" || typeof call === \"function\") ? call : self;\n};","\"use strict\";\n\nexports.__esModule = true;\n\nvar _iterator = require(\"../core-js/symbol/iterator\");\n\nvar _iterator2 = _interopRequireDefault(_iterator);\n\nvar _symbol = require(\"../core-js/symbol\");\n\nvar _symbol2 = _interopRequireDefault(_symbol);\n\nvar _typeof = typeof _symbol2.default === \"function\" && typeof _iterator2.default === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = typeof _symbol2.default === \"function\" && _typeof(_iterator2.default) === \"symbol\" ? function (obj) {\n  return typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n} : function (obj) {\n  return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n};","require('../../modules/es6.object.assign');\nmodule.exports = require('../../modules/_core').Object.assign;\n","require('../../modules/es6.object.create');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function create(P, D) {\n  return $Object.create(P, D);\n};\n","require('../../modules/es6.object.define-property');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function defineProperty(it, key, desc) {\n  return $Object.defineProperty(it, key, desc);\n};\n","require('../../modules/es6.object.get-prototype-of');\nmodule.exports = require('../../modules/_core').Object.getPrototypeOf;\n","require('../../modules/es6.object.keys');\nmodule.exports = require('../../modules/_core').Object.keys;\n","require('../../modules/es6.object.set-prototype-of');\nmodule.exports = require('../../modules/_core').Object.setPrototypeOf;\n","require('../../modules/es6.symbol');\nrequire('../../modules/es6.object.to-string');\nrequire('../../modules/es7.symbol.async-iterator');\nrequire('../../modules/es7.symbol.observable');\nmodule.exports = require('../../modules/_core').Symbol;\n","require('../../modules/es6.string.iterator');\nrequire('../../modules/web.dom.iterable');\nmodule.exports = require('../../modules/_wks-ext').f('iterator');\n","module.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n","module.exports = function () { /* empty */ };\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n","// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n","var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n  var result = getKeys(it);\n  var getSymbols = gOPS.f;\n  if (getSymbols) {\n    var symbols = getSymbols(it);\n    var isEnum = pIE.f;\n    var i = 0;\n    var key;\n    while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n  } return result;\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var IS_WRAP = type & $export.W;\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE];\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n  var key, own, out;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    if (own && has(exports, key)) continue;\n    // export native or passed\n    out = own ? target[key] : source[key];\n    // prevent global pollution for namespaces\n    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n    // bind timers to global for call from export context\n    : IS_BIND && own ? ctx(out, global)\n    // wrap global constructors for prevent change them in library\n    : IS_WRAP && target[key] == out ? (function (C) {\n      var F = function (a, b, c) {\n        if (this instanceof C) {\n          switch (arguments.length) {\n            case 0: return new C();\n            case 1: return new C(a);\n            case 2: return new C(a, b);\n          } return new C(a, b, c);\n        } return C.apply(this, arguments);\n      };\n      F[PROTOTYPE] = C[PROTOTYPE];\n      return F;\n    // make static versions for prototype methods\n    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n    if (IS_PROTO) {\n      (exports.virtual || (exports.virtual = {}))[key] = out;\n      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n      if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n    }\n  }\n};\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n  return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n  return cof(arg) == 'Array';\n};\n","module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n","module.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n","module.exports = {};\n","module.exports = true;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n  return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n  return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n  setDesc(it, META, { value: {\n    i: 'O' + ++id, // object ID\n    w: {}          // weak collections IDs\n  } });\n};\nvar fastKey = function (it, create) {\n  // return primitive with prefix\n  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return 'F';\n    // not necessary to add metadata\n    if (!create) return 'E';\n    // add missing metadata\n    setMeta(it);\n  // return object ID\n  } return it[META].i;\n};\nvar getWeak = function (it, create) {\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return true;\n    // not necessary to add metadata\n    if (!create) return false;\n    // add missing metadata\n    setMeta(it);\n  // return hash weak collections IDs\n  } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n  if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n  return it;\n};\nvar meta = module.exports = {\n  KEY: META,\n  NEED: false,\n  fastKey: fastKey,\n  getWeak: getWeak,\n  onFreeze: onFreeze\n};\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) { B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = gOPS.f;\n  var isEnum = pIE.f;\n  while (aLen > index) {\n    var S = IObject(arguments[index++]);\n    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) {\n      key = keys[j++];\n      if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n    }\n  } return T;\n} : $assign;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = require('./_dom-create')('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  require('./_html').appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return dP(O, P, Attributes);\n  } catch (e) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n  O = toIObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return gOPD(O, P);\n  } catch (e) { /* empty */ }\n  if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n  try {\n    return gOPN(it);\n  } catch (e) {\n    return windowNames.slice();\n  }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return $keys(O, hiddenKeys);\n};\n","exports.f = Object.getOwnPropertySymbols;\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n","exports.f = {}.propertyIsEnumerable;\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n  var fn = (core.Object || {})[KEY] || Object[KEY];\n  var exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n","module.exports = require('./_hide');\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n  anObject(O);\n  if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n    function (test, buggy, set) {\n      try {\n        set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n        set(test, []);\n        buggy = !(test instanceof Array);\n      } catch (e) { buggy = true; }\n      return function setPrototypeOf(O, proto) {\n        check(O, proto);\n        if (buggy) O.__proto__ = proto;\n        else set(O, proto);\n        return O;\n      };\n    }({}, false) : undefined),\n  check: check\n};\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: core.version,\n  mode: require('./_library') ? 'pure' : 'global',\n  copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n  if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","exports.f = require('./_wks');\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n  return function getPrototypeOf(it) {\n    return $getPrototypeOf(toObject(it));\n  };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n  return function keys(it) {\n    return $keys(toObject(it));\n  };\n});\n","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var index = this._i;\n  var point;\n  if (index >= O.length) return { value: undefined, done: true };\n  point = $at(O, index);\n  this._i += point.length;\n  return { value: point, done: false };\n});\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n  return _create(dP({}, 'a', {\n    get: function () { return dP(this, 'a', { value: 7 }).a; }\n  })).a != 7;\n}) ? function (it, key, D) {\n  var protoDesc = gOPD(ObjectProto, key);\n  if (protoDesc) delete ObjectProto[key];\n  dP(it, key, D);\n  if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n  sym._k = tag;\n  return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n  if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n  anObject(it);\n  key = toPrimitive(key, true);\n  anObject(D);\n  if (has(AllSymbols, key)) {\n    if (!D.enumerable) {\n      if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n      it[HIDDEN][key] = true;\n    } else {\n      if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n      D = _create(D, { enumerable: createDesc(0, false) });\n    } return setSymbolDesc(it, key, D);\n  } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n  anObject(it);\n  var keys = enumKeys(P = toIObject(P));\n  var i = 0;\n  var l = keys.length;\n  var key;\n  while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n  return it;\n};\nvar $create = function create(it, P) {\n  return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n  var E = isEnum.call(this, key = toPrimitive(key, true));\n  if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n  it = toIObject(it);\n  key = toPrimitive(key, true);\n  if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n  var D = gOPD(it, key);\n  if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n  return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n  var names = gOPN(toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n  } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n  var IS_OP = it === ObjectProto;\n  var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n  } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n  $Symbol = function Symbol() {\n    if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n    var $set = function (value) {\n      if (this === ObjectProto) $set.call(OPSymbols, value);\n      if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n      setSymbolDesc(this, tag, createDesc(1, value));\n    };\n    if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n    return wrap(tag);\n  };\n  redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n    return this._k;\n  });\n\n  $GOPD.f = $getOwnPropertyDescriptor;\n  $DP.f = $defineProperty;\n  require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n  require('./_object-pie').f = $propertyIsEnumerable;\n  $GOPS.f = $getOwnPropertySymbols;\n\n  if (DESCRIPTORS && !require('./_library')) {\n    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n  }\n\n  wksExt.f = function (name) {\n    return wrap(wks(name));\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n  // 19.4.2.1 Symbol.for(key)\n  'for': function (key) {\n    return has(SymbolRegistry, key += '')\n      ? SymbolRegistry[key]\n      : SymbolRegistry[key] = $Symbol(key);\n  },\n  // 19.4.2.5 Symbol.keyFor(sym)\n  keyFor: function keyFor(sym) {\n    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n    for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n  },\n  useSetter: function () { setter = true; },\n  useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n  // 19.1.2.2 Object.create(O [, Properties])\n  create: $create,\n  // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n  defineProperty: $defineProperty,\n  // 19.1.2.3 Object.defineProperties(O, Properties)\n  defineProperties: $defineProperties,\n  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n  // 19.1.2.7 Object.getOwnPropertyNames(O)\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // 19.1.2.8 Object.getOwnPropertySymbols(O)\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n  getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n    return $GOPS.f(toObject(it));\n  }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n  var S = $Symbol();\n  // MS Edge converts symbol values to JSON as {}\n  // WebKit converts symbol values to JSON as null\n  // V8 throws on boxed symbols\n  return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n  stringify: function stringify(it) {\n    var args = [it];\n    var i = 1;\n    var replacer, $replacer;\n    while (arguments.length > i) args.push(arguments[i++]);\n    $replacer = replacer = args[1];\n    if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n    if (!isArray(replacer)) replacer = function (key, value) {\n      if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n      if (!isSymbol(value)) return value;\n    };\n    args[1] = replacer;\n    return _stringify.apply($JSON, args);\n  }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","require('./_wks-define')('asyncIterator');\n","require('./_wks-define')('observable');\n","require('./es6.array.iterator');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar TO_STRING_TAG = require('./_wks')('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n  'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n  'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n  'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n  'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n  var NAME = DOMIterables[i];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n  Iterators[NAME] = Iterators.Array;\n}\n","var charenc = {\n  // UTF-8 encoding\n  utf8: {\n    // Convert a string to a byte array\n    stringToBytes: function(str) {\n      return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));\n    },\n\n    // Convert a byte array to a string\n    bytesToString: function(bytes) {\n      return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));\n    }\n  },\n\n  // Binary encoding\n  bin: {\n    // Convert a string to a byte array\n    stringToBytes: function(str) {\n      for (var bytes = [], i = 0; i < str.length; i++)\n        bytes.push(str.charCodeAt(i) & 0xFF);\n      return bytes;\n    },\n\n    // Convert a byte array to a string\n    bytesToString: function(bytes) {\n      for (var str = [], i = 0; i < bytes.length; i++)\n        str.push(String.fromCharCode(bytes[i]));\n      return str.join('');\n    }\n  }\n};\n\nmodule.exports = charenc;\n","/*!\n  Copyright (c) 2017 Jed Watson.\n  Licensed under the MIT License (MIT), see\n  http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg) && arg.length) {\n\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\tif (inner) {\n\t\t\t\t\tclasses.push(inner);\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","\"use strict\";\n\nvar deselectCurrent = require(\"toggle-selection\");\n\nvar clipboardToIE11Formatting = {\n  \"text/plain\": \"Text\",\n  \"text/html\": \"Url\",\n  \"default\": \"Text\"\n}\n\nvar defaultMessage = \"Copy to clipboard: #{key}, Enter\";\n\nfunction format(message) {\n  var copyKey = (/mac os x/i.test(navigator.userAgent) ? \"⌘\" : \"Ctrl\") + \"+C\";\n  return message.replace(/#{\\s*key\\s*}/g, copyKey);\n}\n\nfunction copy(text, options) {\n  var debug,\n    message,\n    reselectPrevious,\n    range,\n    selection,\n    mark,\n    success = false;\n  if (!options) {\n    options = {};\n  }\n  debug = options.debug || false;\n  try {\n    reselectPrevious = deselectCurrent();\n\n    range = document.createRange();\n    selection = document.getSelection();\n\n    mark = document.createElement(\"span\");\n    mark.textContent = text;\n    // reset user styles for span element\n    mark.style.all = \"unset\";\n    // prevents scrolling to the end of the page\n    mark.style.position = \"fixed\";\n    mark.style.top = 0;\n    mark.style.clip = \"rect(0, 0, 0, 0)\";\n    // used to preserve spaces and line breaks\n    mark.style.whiteSpace = \"pre\";\n    // do not inherit user-select (it may be `none`)\n    mark.style.webkitUserSelect = \"text\";\n    mark.style.MozUserSelect = \"text\";\n    mark.style.msUserSelect = \"text\";\n    mark.style.userSelect = \"text\";\n    mark.addEventListener(\"copy\", function(e) {\n      e.stopPropagation();\n      if (options.format) {\n        e.preventDefault();\n        if (typeof e.clipboardData === \"undefined\") { // IE 11\n          debug && console.warn(\"unable to use e.clipboardData\");\n          debug && console.warn(\"trying IE specific stuff\");\n          window.clipboardData.clearData();\n          var format = clipboardToIE11Formatting[options.format] || clipboardToIE11Formatting[\"default\"]\n          window.clipboardData.setData(format, text);\n        } else { // all other browsers\n          e.clipboardData.clearData();\n          e.clipboardData.setData(options.format, text);\n        }\n      }\n      if (options.onCopy) {\n        e.preventDefault();\n        options.onCopy(e.clipboardData);\n      }\n    });\n\n    document.body.appendChild(mark);\n\n    range.selectNodeContents(mark);\n    selection.addRange(range);\n\n    var successful = document.execCommand(\"copy\");\n    if (!successful) {\n      throw new Error(\"copy command was unsuccessful\");\n    }\n    success = true;\n  } catch (err) {\n    debug && console.error(\"unable to copy using execCommand: \", err);\n    debug && console.warn(\"trying IE specific stuff\");\n    try {\n      window.clipboardData.setData(options.format || \"text\", text);\n      options.onCopy && options.onCopy(window.clipboardData);\n      success = true;\n    } catch (err) {\n      debug && console.error(\"unable to copy using clipboardData: \", err);\n      debug && console.error(\"falling back to prompt\");\n      message = format(\"message\" in options ? options.message : defaultMessage);\n      window.prompt(message, text);\n    }\n  } finally {\n    if (selection) {\n      if (typeof selection.removeRange == \"function\") {\n        selection.removeRange(range);\n      } else {\n        selection.removeAllRanges();\n      }\n    }\n\n    if (mark) {\n      document.body.removeChild(mark);\n    }\n    reselectPrevious();\n  }\n\n  return success;\n}\n\nmodule.exports = copy;\n","require('../../modules/es.object.values');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.values;\n","require('../../modules/es.string.pad-start');\nvar entryUnbind = require('../../internals/entry-unbind');\n\nmodule.exports = entryUnbind('String', 'padStart');\n","require('../../modules/es.string.trim-start');\nvar entryUnbind = require('../../internals/entry-unbind');\n\nmodule.exports = entryUnbind('String', 'trimLeft');\n","require('../../modules/es.symbol.async-iterator');\nvar WrappedWellKnownSymbolModule = require('../../internals/well-known-symbol-wrapped');\n\nmodule.exports = WrappedWellKnownSymbolModule.f('asyncIterator');\n","var parent = require('../../stable/object/values');\n\nmodule.exports = parent;\n","var parent = require('../../stable/string/pad-start');\n\nmodule.exports = parent;\n","var parent = require('../../stable/string/trim-start');\n\nmodule.exports = parent;\n","var parent = require('../../stable/symbol/async-iterator');\n\nmodule.exports = parent;\n","var isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n  if (isCallable(argument)) return argument;\n  throw TypeError(tryToString(argument) + ' is not a function');\n};\n","var isObject = require('../internals/is-object');\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n  if (isObject(argument)) return argument;\n  throw TypeError(String(argument) + ' is not an object');\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIndexedObject($this);\n    var length = lengthOfArrayLike(O);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare -- NaN check\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare -- NaN check\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) {\n      if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.includes` method\n  // https://tc39.es/ecma262/#sec-array.prototype.includes\n  includes: createMethod(true),\n  // `Array.prototype.indexOf` method\n  // https://tc39.es/ecma262/#sec-array.prototype.indexof\n  indexOf: createMethod(false)\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n  var O, tag, result;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n    // builtinTag case\n    : CORRECT_ARGUMENTS ? classofRaw(O)\n    // ES3 arguments fallback\n    : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","var hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source) {\n  var keys = ownKeys(source);\n  var defineProperty = definePropertyModule.f;\n  var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    if (!hasOwn(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n  }\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n  return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n","module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n","var path = require('../internals/path');\nvar hasOwn = require('../internals/has-own-property');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n  var Symbol = path.Symbol || (path.Symbol = {});\n  if (!hasOwn(Symbol, NAME)) defineProperty(Symbol, NAME, {\n    value: wrappedWellKnownSymbolModule.f(NAME)\n  });\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n  return EXISTS ? document.createElement(it) : {};\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n  match = v8.split('.');\n  version = match[0] < 4 ? 1 : match[0] + match[1];\n} else if (userAgent) {\n  match = userAgent.match(/Edge\\/(\\d+)/);\n  if (!match || match[1] >= 74) {\n    match = userAgent.match(/Chrome\\/(\\d+)/);\n    if (match) version = match[1];\n  }\n}\n\nmodule.exports = version && +version;\n","var global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\n\nvar call = Function.call;\n\nmodule.exports = function (CONSTRUCTOR, METHOD, length) {\n  return bind(call, global[CONSTRUCTOR].prototype[METHOD], length);\n};\n","// IE8- don't enum bug keys\nmodule.exports = [\n  'constructor',\n  'hasOwnProperty',\n  'isPrototypeOf',\n  'propertyIsEnumerable',\n  'toLocaleString',\n  'toString',\n  'valueOf'\n];\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n  options.target      - name of the target object\n  options.global      - target is the global object\n  options.stat        - export as static methods of target\n  options.proto       - export as prototype methods of target\n  options.real        - real prototype method for the `pure` version\n  options.forced      - export even if the native feature is available\n  options.bind        - bind methods to the target, required for the `pure` version\n  options.wrap        - wrap constructors to preventing global pollution, required for the `pure` version\n  options.unsafe      - use the simple assignment of property instead of delete + defineProperty\n  options.sham        - add a flag to not completely full polyfills\n  options.enumerable  - export as enumerable property\n  options.noTargetGet - prevent calling a getter on target\n  options.name        - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n  var TARGET = options.target;\n  var GLOBAL = options.global;\n  var STATIC = options.stat;\n  var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n  if (GLOBAL) {\n    target = global;\n  } else if (STATIC) {\n    target = global[TARGET] || setGlobal(TARGET, {});\n  } else {\n    target = (global[TARGET] || {}).prototype;\n  }\n  if (target) for (key in source) {\n    sourceProperty = source[key];\n    if (options.noTargetGet) {\n      descriptor = getOwnPropertyDescriptor(target, key);\n      targetProperty = descriptor && descriptor.value;\n    } else targetProperty = target[key];\n    FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n    // contained in target\n    if (!FORCED && targetProperty !== undefined) {\n      if (typeof sourceProperty === typeof targetProperty) continue;\n      copyConstructorProperties(sourceProperty, targetProperty);\n    }\n    // add a flag to not completely full polyfills\n    if (options.sham || (targetProperty && targetProperty.sham)) {\n      createNonEnumerableProperty(sourceProperty, 'sham', true);\n    }\n    // extend global\n    redefine(target, key, sourceProperty, options);\n  }\n};\n","module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (error) {\n    return true;\n  }\n};\n","var aCallable = require('../internals/a-callable');\n\n// optional / simple context binding\nmodule.exports = function (fn, that, length) {\n  aCallable(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 0: return function () {\n      return fn.call(that);\n    };\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n  EXISTS: EXISTS,\n  PROPER: PROPER,\n  CONFIGURABLE: CONFIGURABLE\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n  return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n  return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n","var aCallable = require('../internals/a-callable');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n  var func = V[P];\n  return func == null ? undefined : aCallable(func);\n};\n","var check = function (it) {\n  return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n  // eslint-disable-next-line es/no-global-this -- safe\n  check(typeof globalThis == 'object' && globalThis) ||\n  check(typeof window == 'object' && window) ||\n  // eslint-disable-next-line no-restricted-globals -- safe\n  check(typeof self == 'object' && self) ||\n  check(typeof global == 'object' && global) ||\n  // eslint-disable-next-line no-new-func -- fallback\n  (function () { return this; })() || Function('return this')();\n","var toObject = require('../internals/to-object');\n\nvar hasOwnProperty = {}.hasOwnProperty;\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n  return hasOwnProperty.call(toObject(it), key);\n};\n","module.exports = {};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- requied for testing\n  return Object.defineProperty(createElement('div'), 'a', {\n    get: function () { return 7; }\n  }).a != 7;\n});\n","var fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar split = ''.split;\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n  // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n  // eslint-disable-next-line no-prototype-builtins -- safe\n  return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n  return classof(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object;\n","var isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = Function.toString;\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n  store.inspectSource = function (it) {\n    return functionToString.call(it);\n  };\n}\n\nmodule.exports = store.inspectSource;\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n  return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n  return function (it) {\n    var state;\n    if (!isObject(it) || (state = get(it)).type !== TYPE) {\n      throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n    } return state;\n  };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n  var store = shared.state || (shared.state = new WeakMap());\n  var wmget = store.get;\n  var wmhas = store.has;\n  var wmset = store.set;\n  set = function (it, metadata) {\n    if (wmhas.call(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n    metadata.facade = it;\n    wmset.call(store, it, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return wmget.call(store, it) || {};\n  };\n  has = function (it) {\n    return wmhas.call(store, it);\n  };\n} else {\n  var STATE = sharedKey('state');\n  hiddenKeys[STATE] = true;\n  set = function (it, metadata) {\n    if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n    metadata.facade = it;\n    createNonEnumerableProperty(it, STATE, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return hasOwn(it, STATE) ? it[STATE] : {};\n  };\n  has = function (it) {\n    return hasOwn(it, STATE);\n  };\n}\n\nmodule.exports = {\n  set: set,\n  get: get,\n  has: has,\n  enforce: enforce,\n  getterFor: getterFor\n};\n","// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = function (argument) {\n  return typeof argument === 'function';\n};\n","var fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n  var value = data[normalize(feature)];\n  return value == POLYFILL ? true\n    : value == NATIVE ? false\n    : isCallable(detection) ? fails(detection)\n    : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n  return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","var isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n  return typeof it === 'object' ? it !== null : isCallable(it);\n};\n","module.exports = false;\n","var isCallable = require('../internals/is-callable');\nvar getBuiltIn = require('../internals/get-built-in');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  var $Symbol = getBuiltIn('Symbol');\n  return isCallable($Symbol) && Object(it) instanceof $Symbol;\n};\n","var toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n  return toLength(obj.length);\n};\n","/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n  var symbol = Symbol();\n  // Chrome 38 Symbol has incorrect toString conversion\n  // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n  return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n    // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n    !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap));\n","var DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? $defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPropertyKey(P);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return $defineProperty(O, P, Attributes);\n  } catch (error) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n  O = toIndexedObject(O);\n  P = toPropertyKey(P);\n  if (IE8_DOM_DEFINE) try {\n    return $getOwnPropertyDescriptor(O, P);\n  } catch (error) { /* empty */ }\n  if (hasOwn(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return internalObjectKeys(O, hiddenKeys);\n};\n","// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","var hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nmodule.exports = function (object, names) {\n  var O = toIndexedObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (hasOwn(O, key = names[i++])) {\n    ~indexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n  return internalObjectKeys(O, enumBugKeys);\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n  var descriptor = getOwnPropertyDescriptor(this, V);\n  return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","var DESCRIPTORS = require('../internals/descriptors');\nvar objectKeys = require('../internals/object-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n  return function (it) {\n    var O = toIndexedObject(it);\n    var keys = objectKeys(O);\n    var length = keys.length;\n    var i = 0;\n    var result = [];\n    var key;\n    while (length > i) {\n      key = keys[i++];\n      if (!DESCRIPTORS || propertyIsEnumerable.call(O, key)) {\n        result.push(TO_ENTRIES ? [key, O[key]] : O[key]);\n      }\n    }\n    return result;\n  };\n};\n\nmodule.exports = {\n  // `Object.entries` method\n  // https://tc39.es/ecma262/#sec-object.entries\n  entries: createMethod(true),\n  // `Object.values` method\n  // https://tc39.es/ecma262/#sec-object.values\n  values: createMethod(false)\n};\n","var isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n  var fn, val;\n  if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = fn.call(input))) return val;\n  if (isCallable(fn = input.valueOf) && !isObject(val = fn.call(input))) return val;\n  if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = fn.call(input))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n","var getBuiltIn = require('../internals/get-built-in');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n  var keys = getOwnPropertyNamesModule.f(anObject(it));\n  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n  return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;\n};\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n  var unsafe = options ? !!options.unsafe : false;\n  var simple = options ? !!options.enumerable : false;\n  var noTargetGet = options ? !!options.noTargetGet : false;\n  var name = options && options.name !== undefined ? options.name : key;\n  var state;\n  if (isCallable(value)) {\n    if (String(name).slice(0, 7) === 'Symbol(') {\n      name = '[' + String(name).replace(/^Symbol\\(([^)]*)\\)/, '$1') + ']';\n    }\n    if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n      createNonEnumerableProperty(value, 'name', name);\n    }\n    state = enforceInternalState(value);\n    if (!state.source) {\n      state.source = TEMPLATE.join(typeof name == 'string' ? name : '');\n    }\n  }\n  if (O === global) {\n    if (simple) O[key] = value;\n    else setGlobal(key, value);\n    return;\n  } else if (!unsafe) {\n    delete O[key];\n  } else if (!noTargetGet && O[key]) {\n    simple = true;\n  }\n  if (simple) O[key] = value;\n  else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n  return isCallable(this) && getInternalState(this).source || inspectSource(this);\n});\n","// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n  return it;\n};\n","var global = require('../internals/global');\n\nmodule.exports = function (key, value) {\n  try {\n    // eslint-disable-next-line es/no-object-defineproperty -- safe\n    Object.defineProperty(global, key, { value: value, configurable: true, writable: true });\n  } catch (error) {\n    global[key] = value;\n  } return value;\n};\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n  return keys[key] || (keys[key] = uid(key));\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: '3.18.3',\n  mode: IS_PURE ? 'pure' : 'global',\n  copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n","// https://github.com/zloirock/core-js/issues/280\nvar userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /Version\\/10(?:\\.\\d+){1,2}(?: [\\w./]+)?(?: Mobile\\/\\w+)? Safari\\//.test(userAgent);\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar repeat = require('../internals/string-repeat');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar ceil = Math.ceil;\n\n// `String.prototype.{ padStart, padEnd }` methods implementation\nvar createMethod = function (IS_END) {\n  return function ($this, maxLength, fillString) {\n    var S = toString(requireObjectCoercible($this));\n    var intMaxLength = toLength(maxLength);\n    var stringLength = S.length;\n    var fillStr = fillString === undefined ? ' ' : toString(fillString);\n    var fillLen, stringFiller;\n    if (intMaxLength <= stringLength || fillStr == '') return S;\n    fillLen = intMaxLength - stringLength;\n    stringFiller = repeat.call(fillStr, ceil(fillLen / fillStr.length));\n    if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n    return IS_END ? S + stringFiller : stringFiller + S;\n  };\n};\n\nmodule.exports = {\n  // `String.prototype.padStart` method\n  // https://tc39.es/ecma262/#sec-string.prototype.padstart\n  start: createMethod(false),\n  // `String.prototype.padEnd` method\n  // https://tc39.es/ecma262/#sec-string.prototype.padend\n  end: createMethod(true)\n};\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.repeat` method implementation\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\nmodule.exports = function repeat(count) {\n  var str = toString(requireObjectCoercible(this));\n  var result = '';\n  var n = toIntegerOrInfinity(count);\n  if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');\n  for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n  return result;\n};\n","var PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n  return fails(function () {\n    return !!whitespaces[METHOD_NAME]()\n      || non[METHOD_NAME]() !== non\n      || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);\n  });\n};\n","var requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar whitespaces = require('../internals/whitespaces');\n\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n  return function ($this) {\n    var string = toString(requireObjectCoercible($this));\n    if (TYPE & 1) string = string.replace(ltrim, '');\n    if (TYPE & 2) string = string.replace(rtrim, '');\n    return string;\n  };\n};\n\nmodule.exports = {\n  // `String.prototype.{ trimLeft, trimStart }` methods\n  // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n  start: createMethod(1),\n  // `String.prototype.{ trimRight, trimEnd }` methods\n  // https://tc39.es/ecma262/#sec-string.prototype.trimend\n  end: createMethod(2),\n  // `String.prototype.trim` method\n  // https://tc39.es/ecma262/#sec-string.prototype.trim\n  trim: createMethod(3)\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n  var integer = toIntegerOrInfinity(index);\n  return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n  return IndexedObject(requireObjectCoercible(it));\n};\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n  var number = +argument;\n  // eslint-disable-next-line no-self-compare -- safe\n  return number !== number || number === 0 ? 0 : (number > 0 ? floor : ceil)(number);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n  return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n  return Object(requireObjectCoercible(argument));\n};\n","var isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n  if (!isObject(input) || isSymbol(input)) return input;\n  var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n  var result;\n  if (exoticToPrim) {\n    if (pref === undefined) pref = 'default';\n    result = exoticToPrim.call(input, pref);\n    if (!isObject(result) || isSymbol(result)) return result;\n    throw TypeError(\"Can't convert object to primitive value\");\n  }\n  if (pref === undefined) pref = 'number';\n  return ordinaryToPrimitive(input, pref);\n};\n","var toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n  var key = toPrimitive(argument, 'string');\n  return isSymbol(key) ? key : String(key);\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var classof = require('../internals/classof');\n\nmodule.exports = function (argument) {\n  if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');\n  return String(argument);\n};\n","module.exports = function (argument) {\n  try {\n    return String(argument);\n  } catch (error) {\n    return 'Object';\n  }\n};\n","var id = 0;\nvar postfix = Math.random();\n\nmodule.exports = function (key) {\n  return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\n};\n","/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n  && !Symbol.sham\n  && typeof Symbol.iterator == 'symbol';\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n  if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n    if (NATIVE_SYMBOL && hasOwn(Symbol, name)) {\n      WellKnownSymbolsStore[name] = Symbol[name];\n    } else {\n      WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);\n    }\n  } return WellKnownSymbolsStore[name];\n};\n","// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n  '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var $ = require('../internals/export');\nvar $values = require('../internals/object-to-array').values;\n\n// `Object.values` method\n// https://tc39.es/ecma262/#sec-object.values\n$({ target: 'Object', stat: true }, {\n  values: function values(O) {\n    return $values(O);\n  }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $padStart = require('../internals/string-pad').start;\nvar WEBKIT_BUG = require('../internals/string-pad-webkit-bug');\n\n// `String.prototype.padStart` method\n// https://tc39.es/ecma262/#sec-string.prototype.padstart\n$({ target: 'String', proto: true, forced: WEBKIT_BUG }, {\n  padStart: function padStart(maxLength /* , fillString = ' ' */) {\n    return $padStart(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $trimStart = require('../internals/string-trim').start;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\nvar FORCED = forcedStringTrimMethod('trimStart');\n\nvar trimStart = FORCED ? function trimStart() {\n  return $trimStart(this);\n// eslint-disable-next-line es/no-string-prototype-trimstart-trimend -- safe\n} : ''.trimStart;\n\n// `String.prototype.{ trimStart, trimLeft }` methods\n// https://tc39.es/ecma262/#sec-string.prototype.trimstart\n// https://tc39.es/ecma262/#String.prototype.trimleft\n$({ target: 'String', proto: true, name: 'trimStart', forced: FORCED }, {\n  trimStart: trimStart,\n  trimLeft: trimStart\n});\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.asyncIterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.asynciterator\ndefineWellKnownSymbol('asyncIterator');\n","var parent = require('../../es/object/values');\n\nmodule.exports = parent;\n","var parent = require('../../es/string/pad-start');\n\nmodule.exports = parent;\n","var parent = require('../../es/string/trim-start');\n\nmodule.exports = parent;\n","var parent = require('../../es/symbol/async-iterator');\n\nmodule.exports = parent;\n","(function() {\n  var base64map\n      = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n\n  crypt = {\n    // Bit-wise rotation left\n    rotl: function(n, b) {\n      return (n << b) | (n >>> (32 - b));\n    },\n\n    // Bit-wise rotation right\n    rotr: function(n, b) {\n      return (n << (32 - b)) | (n >>> b);\n    },\n\n    // Swap big-endian to little-endian and vice versa\n    endian: function(n) {\n      // If number given, swap endian\n      if (n.constructor == Number) {\n        return crypt.rotl(n, 8) & 0x00FF00FF | crypt.rotl(n, 24) & 0xFF00FF00;\n      }\n\n      // Else, assume array and swap all items\n      for (var i = 0; i < n.length; i++)\n        n[i] = crypt.endian(n[i]);\n      return n;\n    },\n\n    // Generate an array of any length of random bytes\n    randomBytes: function(n) {\n      for (var bytes = []; n > 0; n--)\n        bytes.push(Math.floor(Math.random() * 256));\n      return bytes;\n    },\n\n    // Convert a byte array to big-endian 32-bit words\n    bytesToWords: function(bytes) {\n      for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8)\n        words[b >>> 5] |= bytes[i] << (24 - b % 32);\n      return words;\n    },\n\n    // Convert big-endian 32-bit words to a byte array\n    wordsToBytes: function(words) {\n      for (var bytes = [], b = 0; b < words.length * 32; b += 8)\n        bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF);\n      return bytes;\n    },\n\n    // Convert a byte array to a hex string\n    bytesToHex: function(bytes) {\n      for (var hex = [], i = 0; i < bytes.length; i++) {\n        hex.push((bytes[i] >>> 4).toString(16));\n        hex.push((bytes[i] & 0xF).toString(16));\n      }\n      return hex.join('');\n    },\n\n    // Convert a hex string to a byte array\n    hexToBytes: function(hex) {\n      for (var bytes = [], c = 0; c < hex.length; c += 2)\n        bytes.push(parseInt(hex.substr(c, 2), 16));\n      return bytes;\n    },\n\n    // Convert a byte array to a base-64 string\n    bytesToBase64: function(bytes) {\n      for (var base64 = [], i = 0; i < bytes.length; i += 3) {\n        var triplet = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];\n        for (var j = 0; j < 4; j++)\n          if (i * 8 + j * 6 <= bytes.length * 8)\n            base64.push(base64map.charAt((triplet >>> 6 * (3 - j)) & 0x3F));\n          else\n            base64.push('=');\n      }\n      return base64.join('');\n    },\n\n    // Convert a base-64 string to a byte array\n    base64ToBytes: function(base64) {\n      // Remove non-base-64 characters\n      base64 = base64.replace(/[^A-Z0-9+\\/]/ig, '');\n\n      for (var bytes = [], i = 0, imod4 = 0; i < base64.length;\n          imod4 = ++i % 4) {\n        if (imod4 == 0) continue;\n        bytes.push(((base64map.indexOf(base64.charAt(i - 1))\n            & (Math.pow(2, -2 * imod4 + 8) - 1)) << (imod4 * 2))\n            | (base64map.indexOf(base64.charAt(i)) >>> (6 - imod4 * 2)));\n      }\n      return bytes;\n    }\n  };\n\n  module.exports = crypt;\n})();\n","'use strict';\nvar token = '%[a-f0-9]{2}';\nvar singleMatcher = new RegExp('(' + token + ')|([^%]+?)', 'gi');\nvar multiMatcher = new RegExp('(' + token + ')+', 'gi');\n\nfunction decodeComponents(components, split) {\n\ttry {\n\t\t// Try to decode the entire string first\n\t\treturn [decodeURIComponent(components.join(''))];\n\t} catch (err) {\n\t\t// Do nothing\n\t}\n\n\tif (components.length === 1) {\n\t\treturn components;\n\t}\n\n\tsplit = split || 1;\n\n\t// Split the array in 2 parts\n\tvar left = components.slice(0, split);\n\tvar right = components.slice(split);\n\n\treturn Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));\n}\n\nfunction decode(input) {\n\ttry {\n\t\treturn decodeURIComponent(input);\n\t} catch (err) {\n\t\tvar tokens = input.match(singleMatcher) || [];\n\n\t\tfor (var i = 1; i < tokens.length; i++) {\n\t\t\tinput = decodeComponents(tokens, i).join('');\n\n\t\t\ttokens = input.match(singleMatcher) || [];\n\t\t}\n\n\t\treturn input;\n\t}\n}\n\nfunction customDecodeURIComponent(input) {\n\t// Keep track of all the replacements and prefill the map with the `BOM`\n\tvar replaceMap = {\n\t\t'%FE%FF': '\\uFFFD\\uFFFD',\n\t\t'%FF%FE': '\\uFFFD\\uFFFD'\n\t};\n\n\tvar match = multiMatcher.exec(input);\n\twhile (match) {\n\t\ttry {\n\t\t\t// Decode as big chunks as possible\n\t\t\treplaceMap[match[0]] = decodeURIComponent(match[0]);\n\t\t} catch (err) {\n\t\t\tvar result = decode(match[0]);\n\n\t\t\tif (result !== match[0]) {\n\t\t\t\treplaceMap[match[0]] = result;\n\t\t\t}\n\t\t}\n\n\t\tmatch = multiMatcher.exec(input);\n\t}\n\n\t// Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else\n\treplaceMap['%C2'] = '\\uFFFD';\n\n\tvar entries = Object.keys(replaceMap);\n\n\tfor (var i = 0; i < entries.length; i++) {\n\t\t// Replace all decoded components\n\t\tvar key = entries[i];\n\t\tinput = input.replace(new RegExp(key, 'g'), replaceMap[key]);\n\t}\n\n\treturn input;\n}\n\nmodule.exports = function (encodedURI) {\n\tif (typeof encodedURI !== 'string') {\n\t\tthrow new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`');\n\t}\n\n\ttry {\n\t\tencodedURI = encodedURI.replace(/\\+/g, ' ');\n\n\t\t// Try the built in decoder first\n\t\treturn decodeURIComponent(encodedURI);\n\t} catch (err) {\n\t\t// Fallback to a more advanced decoder\n\t\treturn customDecodeURIComponent(encodedURI);\n\t}\n};\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = activeElement;\n\nvar _ownerDocument = _interopRequireDefault(require(\"./ownerDocument\"));\n\nfunction activeElement(doc) {\n  if (doc === void 0) {\n    doc = (0, _ownerDocument.default)();\n  }\n\n  try {\n    return doc.activeElement;\n  } catch (e) {\n    /* ie throws if no active element */\n  }\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = addClass;\n\nvar _hasClass = _interopRequireDefault(require(\"./hasClass\"));\n\nfunction addClass(element, className) {\n  if (element.classList) element.classList.add(className);else if (!(0, _hasClass.default)(element, className)) if (typeof element.className === 'string') element.className = element.className + \" \" + className;else element.setAttribute('class', (element.className && element.className.baseVal || '') + \" \" + className);\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = hasClass;\n\nfunction hasClass(element, className) {\n  if (element.classList) return !!className && element.classList.contains(className);\n  return (\" \" + (element.className.baseVal || element.className) + \" \").indexOf(\" \" + className + \" \") !== -1;\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _addClass = _interopRequireDefault(require(\"./addClass\"));\n\nexports.addClass = _addClass.default;\n\nvar _removeClass = _interopRequireDefault(require(\"./removeClass\"));\n\nexports.removeClass = _removeClass.default;\n\nvar _hasClass = _interopRequireDefault(require(\"./hasClass\"));\n\nexports.hasClass = _hasClass.default;\nvar _default = {\n  addClass: _addClass.default,\n  removeClass: _removeClass.default,\n  hasClass: _hasClass.default\n};\nexports.default = _default;","\"use strict\";\n\nfunction replaceClassName(origClass, classToRemove) {\n  return origClass.replace(new RegExp(\"(^|\\\\s)\" + classToRemove + \"(?:\\\\s|$)\", 'g'), '$1').replace(/\\s+/g, ' ').replace(/^\\s*|\\s*$/g, '');\n}\n\nmodule.exports = function removeClass(element, className) {\n  if (element.classList) element.classList.remove(className);else if (typeof element.className === 'string') element.className = replaceClassName(element.className, className);else element.setAttribute('class', replaceClassName(element.className && element.className.baseVal || '', className));\n};","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _inDOM = _interopRequireDefault(require(\"../util/inDOM\"));\n\nvar off = function off() {};\n\nif (_inDOM.default) {\n  off = function () {\n    if (document.addEventListener) return function (node, eventName, handler, capture) {\n      return node.removeEventListener(eventName, handler, capture || false);\n    };\n    if (document.attachEvent) return function (node, eventName, handler) {\n      return node.detachEvent(\"on\" + eventName, handler);\n    };\n  }();\n}\n\nvar _default = off;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _inDOM = _interopRequireDefault(require(\"../util/inDOM\"));\n\nvar on = function on() {};\n\nif (_inDOM.default) {\n  on = function () {\n    if (document.addEventListener) return function (node, eventName, handler, capture) {\n      return node.addEventListener(eventName, handler, capture || false);\n    };\n    if (document.attachEvent) return function (node, eventName, handler) {\n      return node.attachEvent(\"on\" + eventName, function (e) {\n        e = e || window.event;\n        e.target = e.target || e.srcElement;\n        e.currentTarget = node;\n        handler.call(node, e);\n      });\n    };\n  }();\n}\n\nvar _default = on;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = ownerDocument;\n\nfunction ownerDocument(node) {\n  if (node && node.getRootNode) {\n    return node.getRootNode();\n  }\n\n  return node && node.ownerDocument || document;\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = closest;\n\nvar _matches = _interopRequireDefault(require(\"./matches\"));\n\nvar isDoc = function isDoc(obj) {\n  return obj != null && obj.nodeType === obj.DOCUMENT_NODE;\n};\n\nfunction closest(node, selector, context) {\n  while (node && (isDoc(node) || !(0, _matches.default)(node, selector))) {\n    node = node !== context && !isDoc(node) ? node.parentNode : undefined;\n  }\n\n  return node;\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _inDOM = _interopRequireDefault(require(\"../util/inDOM\"));\n\nvar _default = function () {\n  // HTML DOM and SVG DOM may have different support levels,\n  // so we need to check on context instead of a document root element.\n  return _inDOM.default ? function (context, node) {\n    if (context.contains) {\n      return context.contains(node);\n    }\n\n    if (context.compareDocumentPosition) {\n      return context === node || !!(context.compareDocumentPosition(node) & 16);\n    }\n\n    return fallback(context, node);\n  } : fallback;\n}();\n\nexports.default = _default;\n\nfunction fallback(context, node) {\n  if (node) do {\n    if (node === context) return true;\n  } while (node = node.parentNode);\n  return false;\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = getWindow;\n\nfunction getWindow(node) {\n  return node === node.window ? node : node.nodeType === 9 ? node.defaultView || node.parentWindow : false;\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = matches;\n\nvar _inDOM = _interopRequireDefault(require(\"../util/inDOM\"));\n\nvar _querySelectorAll = _interopRequireDefault(require(\"./querySelectorAll\"));\n\nvar matchesCache;\n\nfunction matches(node, selector) {\n  if (!matchesCache && _inDOM.default) {\n    var body = document.body;\n    var nativeMatch = body.matches || body.matchesSelector || body.webkitMatchesSelector || body.mozMatchesSelector || body.msMatchesSelector;\n    matchesCache = nativeMatch ? function (node, selector) {\n      return nativeMatch.call(node, selector);\n    } : ie8MatchesSelector;\n  }\n\n  return matchesCache ? matchesCache(node, selector) : null;\n}\n\nfunction ie8MatchesSelector(node, selector) {\n  var matches = (0, _querySelectorAll.default)(node.document || node.ownerDocument, selector),\n      i = 0;\n\n  while (matches[i] && matches[i] !== node) {\n    i++;\n  }\n\n  return !!matches[i];\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = offset;\n\nvar _contains = _interopRequireDefault(require(\"./contains\"));\n\nvar _isWindow = _interopRequireDefault(require(\"./isWindow\"));\n\nvar _ownerDocument = _interopRequireDefault(require(\"../ownerDocument\"));\n\nfunction offset(node) {\n  var doc = (0, _ownerDocument.default)(node),\n      win = (0, _isWindow.default)(doc),\n      docElem = doc && doc.documentElement,\n      box = {\n    top: 0,\n    left: 0,\n    height: 0,\n    width: 0\n  };\n  if (!doc) return; // Make sure it's not a disconnected DOM node\n\n  if (!(0, _contains.default)(docElem, node)) return box;\n  if (node.getBoundingClientRect !== undefined) box = node.getBoundingClientRect(); // IE8 getBoundingClientRect doesn't support width & height\n\n  box = {\n    top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0),\n    left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0),\n    width: (box.width == null ? node.offsetWidth : box.width) || 0,\n    height: (box.height == null ? node.offsetHeight : box.height) || 0\n  };\n  return box;\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = offsetParent;\n\nvar _ownerDocument = _interopRequireDefault(require(\"../ownerDocument\"));\n\nvar _style = _interopRequireDefault(require(\"../style\"));\n\nfunction nodeName(node) {\n  return node.nodeName && node.nodeName.toLowerCase();\n}\n\nfunction offsetParent(node) {\n  var doc = (0, _ownerDocument.default)(node),\n      offsetParent = node && node.offsetParent;\n\n  while (offsetParent && nodeName(node) !== 'html' && (0, _style.default)(offsetParent, 'position') === 'static') {\n    offsetParent = offsetParent.offsetParent;\n  }\n\n  return offsetParent || doc.documentElement;\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = position;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _offset = _interopRequireDefault(require(\"./offset\"));\n\nvar _offsetParent = _interopRequireDefault(require(\"./offsetParent\"));\n\nvar _scrollTop = _interopRequireDefault(require(\"./scrollTop\"));\n\nvar _scrollLeft = _interopRequireDefault(require(\"./scrollLeft\"));\n\nvar _style = _interopRequireDefault(require(\"../style\"));\n\nfunction nodeName(node) {\n  return node.nodeName && node.nodeName.toLowerCase();\n}\n\nfunction position(node, offsetParent) {\n  var parentOffset = {\n    top: 0,\n    left: 0\n  },\n      offset; // Fixed elements are offset from window (parentOffset = {top:0, left: 0},\n  // because it is its only offset parent\n\n  if ((0, _style.default)(node, 'position') === 'fixed') {\n    offset = node.getBoundingClientRect();\n  } else {\n    offsetParent = offsetParent || (0, _offsetParent.default)(node);\n    offset = (0, _offset.default)(node);\n    if (nodeName(offsetParent) !== 'html') parentOffset = (0, _offset.default)(offsetParent);\n    parentOffset.top += parseInt((0, _style.default)(offsetParent, 'borderTopWidth'), 10) - (0, _scrollTop.default)(offsetParent) || 0;\n    parentOffset.left += parseInt((0, _style.default)(offsetParent, 'borderLeftWidth'), 10) - (0, _scrollLeft.default)(offsetParent) || 0;\n  } // Subtract parent offsets and node margins\n\n\n  return (0, _extends2.default)({}, offset, {\n    top: offset.top - parentOffset.top - (parseInt((0, _style.default)(node, 'marginTop'), 10) || 0),\n    left: offset.left - parentOffset.left - (parseInt((0, _style.default)(node, 'marginLeft'), 10) || 0)\n  });\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = qsa;\n// Zepto.js\n// (c) 2010-2015 Thomas Fuchs\n// Zepto.js may be freely distributed under the MIT license.\nvar simpleSelectorRE = /^[\\w-]*$/;\nvar toArray = Function.prototype.bind.call(Function.prototype.call, [].slice);\n\nfunction qsa(element, selector) {\n  var maybeID = selector[0] === '#',\n      maybeClass = selector[0] === '.',\n      nameOnly = maybeID || maybeClass ? selector.slice(1) : selector,\n      isSimple = simpleSelectorRE.test(nameOnly),\n      found;\n\n  if (isSimple) {\n    if (maybeID) {\n      element = element.getElementById ? element : document;\n      return (found = element.getElementById(nameOnly)) ? [found] : [];\n    }\n\n    if (element.getElementsByClassName && maybeClass) return toArray(element.getElementsByClassName(nameOnly));\n    return toArray(element.getElementsByTagName(selector));\n  }\n\n  return toArray(element.querySelectorAll(selector));\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = scrollTop;\n\nvar _isWindow = _interopRequireDefault(require(\"./isWindow\"));\n\nfunction scrollTop(node, val) {\n  var win = (0, _isWindow.default)(node);\n  if (val === undefined) return win ? 'pageXOffset' in win ? win.pageXOffset : win.document.documentElement.scrollLeft : node.scrollLeft;\n  if (win) win.scrollTo(val, 'pageYOffset' in win ? win.pageYOffset : win.document.documentElement.scrollTop);else node.scrollLeft = val;\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = scrollTop;\n\nvar _isWindow = _interopRequireDefault(require(\"./isWindow\"));\n\nfunction scrollTop(node, val) {\n  var win = (0, _isWindow.default)(node);\n  if (val === undefined) return win ? 'pageYOffset' in win ? win.pageYOffset : win.document.documentElement.scrollTop : node.scrollTop;\n  if (win) win.scrollTo('pageXOffset' in win ? win.pageXOffset : win.document.documentElement.scrollLeft, val);else node.scrollTop = val;\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = _getComputedStyle;\n\nvar _camelizeStyle = _interopRequireDefault(require(\"../util/camelizeStyle\"));\n\nvar rposition = /^(top|right|bottom|left)$/;\nvar rnumnonpx = /^([+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|))(?!px)[a-z%]+$/i;\n\nfunction _getComputedStyle(node) {\n  if (!node) throw new TypeError('No Element passed to `getComputedStyle()`');\n  var doc = node.ownerDocument;\n  return 'defaultView' in doc ? doc.defaultView.opener ? node.ownerDocument.defaultView.getComputedStyle(node, null) : window.getComputedStyle(node, null) : {\n    // ie 8 \"magic\" from: https://github.com/jquery/jquery/blob/1.11-stable/src/css/curCSS.js#L72\n    getPropertyValue: function getPropertyValue(prop) {\n      var style = node.style;\n      prop = (0, _camelizeStyle.default)(prop);\n      if (prop == 'float') prop = 'styleFloat';\n      var current = node.currentStyle[prop] || null;\n      if (current == null && style && style[prop]) current = style[prop];\n\n      if (rnumnonpx.test(current) && !rposition.test(prop)) {\n        // Remember the original values\n        var left = style.left;\n        var runStyle = node.runtimeStyle;\n        var rsLeft = runStyle && runStyle.left; // Put in the new values to get a computed value out\n\n        if (rsLeft) runStyle.left = node.currentStyle.left;\n        style.left = prop === 'fontSize' ? '1em' : current;\n        current = style.pixelLeft + \"px\"; // Revert the changed values\n\n        style.left = left;\n        if (rsLeft) runStyle.left = rsLeft;\n      }\n\n      return current;\n    }\n  };\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = style;\n\nvar _camelizeStyle = _interopRequireDefault(require(\"../util/camelizeStyle\"));\n\nvar _hyphenateStyle = _interopRequireDefault(require(\"../util/hyphenateStyle\"));\n\nvar _getComputedStyle2 = _interopRequireDefault(require(\"./getComputedStyle\"));\n\nvar _removeStyle = _interopRequireDefault(require(\"./removeStyle\"));\n\nvar _properties = require(\"../transition/properties\");\n\nvar _isTransform = _interopRequireDefault(require(\"../transition/isTransform\"));\n\nfunction style(node, property, value) {\n  var css = '';\n  var transforms = '';\n  var props = property;\n\n  if (typeof property === 'string') {\n    if (value === undefined) {\n      return node.style[(0, _camelizeStyle.default)(property)] || (0, _getComputedStyle2.default)(node).getPropertyValue((0, _hyphenateStyle.default)(property));\n    }\n\n    (props = {})[property] = value;\n  }\n\n  Object.keys(props).forEach(function (key) {\n    var value = props[key];\n\n    if (!value && value !== 0) {\n      (0, _removeStyle.default)(node, (0, _hyphenateStyle.default)(key));\n    } else if ((0, _isTransform.default)(key)) {\n      transforms += key + \"(\" + value + \") \";\n    } else {\n      css += (0, _hyphenateStyle.default)(key) + \": \" + value + \";\";\n    }\n  });\n\n  if (transforms) {\n    css += _properties.transform + \": \" + transforms + \";\";\n  }\n\n  node.style.cssText += \";\" + css;\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = removeStyle;\n\nfunction removeStyle(node, key) {\n  return 'removeProperty' in node.style ? node.style.removeProperty(key) : node.style.removeAttribute(key);\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = isTransform;\nvar supportedTransforms = /^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i;\n\nfunction isTransform(property) {\n  return !!(property && supportedTransforms.test(property));\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = exports.animationEnd = exports.animationDelay = exports.animationTiming = exports.animationDuration = exports.animationName = exports.transitionEnd = exports.transitionDuration = exports.transitionDelay = exports.transitionTiming = exports.transitionProperty = exports.transform = void 0;\n\nvar _inDOM = _interopRequireDefault(require(\"../util/inDOM\"));\n\nvar transform = 'transform';\nexports.transform = transform;\nvar prefix, transitionEnd, animationEnd;\nexports.animationEnd = animationEnd;\nexports.transitionEnd = transitionEnd;\nvar transitionProperty, transitionDuration, transitionTiming, transitionDelay;\nexports.transitionDelay = transitionDelay;\nexports.transitionTiming = transitionTiming;\nexports.transitionDuration = transitionDuration;\nexports.transitionProperty = transitionProperty;\nvar animationName, animationDuration, animationTiming, animationDelay;\nexports.animationDelay = animationDelay;\nexports.animationTiming = animationTiming;\nexports.animationDuration = animationDuration;\nexports.animationName = animationName;\n\nif (_inDOM.default) {\n  var _getTransitionPropert = getTransitionProperties();\n\n  prefix = _getTransitionPropert.prefix;\n  exports.transitionEnd = transitionEnd = _getTransitionPropert.transitionEnd;\n  exports.animationEnd = animationEnd = _getTransitionPropert.animationEnd;\n  exports.transform = transform = prefix + \"-\" + transform;\n  exports.transitionProperty = transitionProperty = prefix + \"-transition-property\";\n  exports.transitionDuration = transitionDuration = prefix + \"-transition-duration\";\n  exports.transitionDelay = transitionDelay = prefix + \"-transition-delay\";\n  exports.transitionTiming = transitionTiming = prefix + \"-transition-timing-function\";\n  exports.animationName = animationName = prefix + \"-animation-name\";\n  exports.animationDuration = animationDuration = prefix + \"-animation-duration\";\n  exports.animationTiming = animationTiming = prefix + \"-animation-delay\";\n  exports.animationDelay = animationDelay = prefix + \"-animation-timing-function\";\n}\n\nvar _default = {\n  transform: transform,\n  end: transitionEnd,\n  property: transitionProperty,\n  timing: transitionTiming,\n  delay: transitionDelay,\n  duration: transitionDuration\n};\nexports.default = _default;\n\nfunction getTransitionProperties() {\n  var style = document.createElement('div').style;\n  var vendorMap = {\n    O: function O(e) {\n      return \"o\" + e.toLowerCase();\n    },\n    Moz: function Moz(e) {\n      return e.toLowerCase();\n    },\n    Webkit: function Webkit(e) {\n      return \"webkit\" + e;\n    },\n    ms: function ms(e) {\n      return \"MS\" + e;\n    }\n  };\n  var vendors = Object.keys(vendorMap);\n  var transitionEnd, animationEnd;\n  var prefix = '';\n\n  for (var i = 0; i < vendors.length; i++) {\n    var vendor = vendors[i];\n\n    if (vendor + \"TransitionProperty\" in style) {\n      prefix = \"-\" + vendor.toLowerCase();\n      transitionEnd = vendorMap[vendor]('TransitionEnd');\n      animationEnd = vendorMap[vendor]('AnimationEnd');\n      break;\n    }\n  }\n\n  if (!transitionEnd && 'transitionProperty' in style) transitionEnd = 'transitionend';\n  if (!animationEnd && 'animationName' in style) animationEnd = 'animationend';\n  style = null;\n  return {\n    animationEnd: animationEnd,\n    transitionEnd: transitionEnd,\n    prefix: prefix\n  };\n}","\"use strict\";\n\nexports.__esModule = true;\nexports.default = camelize;\nvar rHyphen = /-(.)/g;\n\nfunction camelize(string) {\n  return string.replace(rHyphen, function (_, chr) {\n    return chr.toUpperCase();\n  });\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = camelizeStyleName;\n\nvar _camelize = _interopRequireDefault(require(\"./camelize\"));\n\n/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n * https://github.com/facebook/react/blob/2aeb8a2a6beb00617a4217f7f8284924fa2ad819/src/vendor/core/camelizeStyleName.js\n */\nvar msPattern = /^-ms-/;\n\nfunction camelizeStyleName(string) {\n  return (0, _camelize.default)(string.replace(msPattern, 'ms-'));\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = hyphenate;\nvar rUpper = /([A-Z])/g;\n\nfunction hyphenate(string) {\n  return string.replace(rUpper, '-$1').toLowerCase();\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = hyphenateStyleName;\n\nvar _hyphenate = _interopRequireDefault(require(\"./hyphenate\"));\n\n/**\n * Copyright 2013-2014, Facebook, Inc.\n * All rights reserved.\n * https://github.com/facebook/react/blob/2aeb8a2a6beb00617a4217f7f8284924fa2ad819/src/vendor/core/hyphenateStyleName.js\n */\nvar msPattern = /^ms-/;\n\nfunction hyphenateStyleName(string) {\n  return (0, _hyphenate.default)(string).replace(msPattern, '-ms-');\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _default = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = scrollbarSize;\n\nvar _inDOM = _interopRequireDefault(require(\"./inDOM\"));\n\nvar size;\n\nfunction scrollbarSize(recalc) {\n  if (!size && size !== 0 || recalc) {\n    if (_inDOM.default) {\n      var scrollDiv = document.createElement('div');\n      scrollDiv.style.position = 'absolute';\n      scrollDiv.style.top = '-9999px';\n      scrollDiv.style.width = '50px';\n      scrollDiv.style.height = '50px';\n      scrollDiv.style.overflow = 'scroll';\n      document.body.appendChild(scrollDiv);\n      size = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n      document.body.removeChild(scrollDiv);\n    }\n  }\n\n  return size;\n}\n\nmodule.exports = exports[\"default\"];","/**\n * @typedef {object} PrivateData\n * @property {EventTarget} eventTarget The event target.\n * @property {{type:string}} event The original event object.\n * @property {number} eventPhase The current event phase.\n * @property {EventTarget|null} currentTarget The current event target.\n * @property {boolean} canceled The flag to prevent default.\n * @property {boolean} stopped The flag to stop propagation.\n * @property {boolean} immediateStopped The flag to stop propagation immediately.\n * @property {Function|null} passiveListener The listener if the current listener is passive. Otherwise this is null.\n * @property {number} timeStamp The unix time.\n * @private\n */\n\n/**\n * Private data for event wrappers.\n * @type {WeakMap<Event, PrivateData>}\n * @private\n */\nconst privateData = new WeakMap()\n\n/**\n * Cache for wrapper classes.\n * @type {WeakMap<Object, Function>}\n * @private\n */\nconst wrappers = new WeakMap()\n\n/**\n * Get private data.\n * @param {Event} event The event object to get private data.\n * @returns {PrivateData} The private data of the event.\n * @private\n */\nfunction pd(event) {\n    const retv = privateData.get(event)\n    console.assert(\n        retv != null,\n        \"'this' is expected an Event object, but got\",\n        event\n    )\n    return retv\n}\n\n/**\n * https://dom.spec.whatwg.org/#set-the-canceled-flag\n * @param data {PrivateData} private data.\n */\nfunction setCancelFlag(data) {\n    if (data.passiveListener != null) {\n        if (\n            typeof console !== \"undefined\" &&\n            typeof console.error === \"function\"\n        ) {\n            console.error(\n                \"Unable to preventDefault inside passive event listener invocation.\",\n                data.passiveListener\n            )\n        }\n        return\n    }\n    if (!data.event.cancelable) {\n        return\n    }\n\n    data.canceled = true\n    if (typeof data.event.preventDefault === \"function\") {\n        data.event.preventDefault()\n    }\n}\n\n/**\n * @see https://dom.spec.whatwg.org/#interface-event\n * @private\n */\n/**\n * The event wrapper.\n * @constructor\n * @param {EventTarget} eventTarget The event target of this dispatching.\n * @param {Event|{type:string}} event The original event to wrap.\n */\nfunction Event(eventTarget, event) {\n    privateData.set(this, {\n        eventTarget,\n        event,\n        eventPhase: 2,\n        currentTarget: eventTarget,\n        canceled: false,\n        stopped: false,\n        immediateStopped: false,\n        passiveListener: null,\n        timeStamp: event.timeStamp || Date.now(),\n    })\n\n    // https://heycam.github.io/webidl/#Unforgeable\n    Object.defineProperty(this, \"isTrusted\", { value: false, enumerable: true })\n\n    // Define accessors\n    const keys = Object.keys(event)\n    for (let i = 0; i < keys.length; ++i) {\n        const key = keys[i]\n        if (!(key in this)) {\n            Object.defineProperty(this, key, defineRedirectDescriptor(key))\n        }\n    }\n}\n\n// Should be enumerable, but class methods are not enumerable.\nEvent.prototype = {\n    /**\n     * The type of this event.\n     * @type {string}\n     */\n    get type() {\n        return pd(this).event.type\n    },\n\n    /**\n     * The target of this event.\n     * @type {EventTarget}\n     */\n    get target() {\n        return pd(this).eventTarget\n    },\n\n    /**\n     * The target of this event.\n     * @type {EventTarget}\n     */\n    get currentTarget() {\n        return pd(this).currentTarget\n    },\n\n    /**\n     * @returns {EventTarget[]} The composed path of this event.\n     */\n    composedPath() {\n        const currentTarget = pd(this).currentTarget\n        if (currentTarget == null) {\n            return []\n        }\n        return [currentTarget]\n    },\n\n    /**\n     * Constant of NONE.\n     * @type {number}\n     */\n    get NONE() {\n        return 0\n    },\n\n    /**\n     * Constant of CAPTURING_PHASE.\n     * @type {number}\n     */\n    get CAPTURING_PHASE() {\n        return 1\n    },\n\n    /**\n     * Constant of AT_TARGET.\n     * @type {number}\n     */\n    get AT_TARGET() {\n        return 2\n    },\n\n    /**\n     * Constant of BUBBLING_PHASE.\n     * @type {number}\n     */\n    get BUBBLING_PHASE() {\n        return 3\n    },\n\n    /**\n     * The target of this event.\n     * @type {number}\n     */\n    get eventPhase() {\n        return pd(this).eventPhase\n    },\n\n    /**\n     * Stop event bubbling.\n     * @returns {void}\n     */\n    stopPropagation() {\n        const data = pd(this)\n\n        data.stopped = true\n        if (typeof data.event.stopPropagation === \"function\") {\n            data.event.stopPropagation()\n        }\n    },\n\n    /**\n     * Stop event bubbling.\n     * @returns {void}\n     */\n    stopImmediatePropagation() {\n        const data = pd(this)\n\n        data.stopped = true\n        data.immediateStopped = true\n        if (typeof data.event.stopImmediatePropagation === \"function\") {\n            data.event.stopImmediatePropagation()\n        }\n    },\n\n    /**\n     * The flag to be bubbling.\n     * @type {boolean}\n     */\n    get bubbles() {\n        return Boolean(pd(this).event.bubbles)\n    },\n\n    /**\n     * The flag to be cancelable.\n     * @type {boolean}\n     */\n    get cancelable() {\n        return Boolean(pd(this).event.cancelable)\n    },\n\n    /**\n     * Cancel this event.\n     * @returns {void}\n     */\n    preventDefault() {\n        setCancelFlag(pd(this))\n    },\n\n    /**\n     * The flag to indicate cancellation state.\n     * @type {boolean}\n     */\n    get defaultPrevented() {\n        return pd(this).canceled\n    },\n\n    /**\n     * The flag to be composed.\n     * @type {boolean}\n     */\n    get composed() {\n        return Boolean(pd(this).event.composed)\n    },\n\n    /**\n     * The unix time of this event.\n     * @type {number}\n     */\n    get timeStamp() {\n        return pd(this).timeStamp\n    },\n\n    /**\n     * The target of this event.\n     * @type {EventTarget}\n     * @deprecated\n     */\n    get srcElement() {\n        return pd(this).eventTarget\n    },\n\n    /**\n     * The flag to stop event bubbling.\n     * @type {boolean}\n     * @deprecated\n     */\n    get cancelBubble() {\n        return pd(this).stopped\n    },\n    set cancelBubble(value) {\n        if (!value) {\n            return\n        }\n        const data = pd(this)\n\n        data.stopped = true\n        if (typeof data.event.cancelBubble === \"boolean\") {\n            data.event.cancelBubble = true\n        }\n    },\n\n    /**\n     * The flag to indicate cancellation state.\n     * @type {boolean}\n     * @deprecated\n     */\n    get returnValue() {\n        return !pd(this).canceled\n    },\n    set returnValue(value) {\n        if (!value) {\n            setCancelFlag(pd(this))\n        }\n    },\n\n    /**\n     * Initialize this event object. But do nothing under event dispatching.\n     * @param {string} type The event type.\n     * @param {boolean} [bubbles=false] The flag to be possible to bubble up.\n     * @param {boolean} [cancelable=false] The flag to be possible to cancel.\n     * @deprecated\n     */\n    initEvent() {\n        // Do nothing.\n    },\n}\n\n// `constructor` is not enumerable.\nObject.defineProperty(Event.prototype, \"constructor\", {\n    value: Event,\n    configurable: true,\n    writable: true,\n})\n\n// Ensure `event instanceof window.Event` is `true`.\nif (typeof window !== \"undefined\" && typeof window.Event !== \"undefined\") {\n    Object.setPrototypeOf(Event.prototype, window.Event.prototype)\n\n    // Make association for wrappers.\n    wrappers.set(window.Event.prototype, Event)\n}\n\n/**\n * Get the property descriptor to redirect a given property.\n * @param {string} key Property name to define property descriptor.\n * @returns {PropertyDescriptor} The property descriptor to redirect the property.\n * @private\n */\nfunction defineRedirectDescriptor(key) {\n    return {\n        get() {\n            return pd(this).event[key]\n        },\n        set(value) {\n            pd(this).event[key] = value\n        },\n        configurable: true,\n        enumerable: true,\n    }\n}\n\n/**\n * Get the property descriptor to call a given method property.\n * @param {string} key Property name to define property descriptor.\n * @returns {PropertyDescriptor} The property descriptor to call the method property.\n * @private\n */\nfunction defineCallDescriptor(key) {\n    return {\n        value() {\n            const event = pd(this).event\n            return event[key].apply(event, arguments)\n        },\n        configurable: true,\n        enumerable: true,\n    }\n}\n\n/**\n * Define new wrapper class.\n * @param {Function} BaseEvent The base wrapper class.\n * @param {Object} proto The prototype of the original event.\n * @returns {Function} The defined wrapper class.\n * @private\n */\nfunction defineWrapper(BaseEvent, proto) {\n    const keys = Object.keys(proto)\n    if (keys.length === 0) {\n        return BaseEvent\n    }\n\n    /** CustomEvent */\n    function CustomEvent(eventTarget, event) {\n        BaseEvent.call(this, eventTarget, event)\n    }\n\n    CustomEvent.prototype = Object.create(BaseEvent.prototype, {\n        constructor: { value: CustomEvent, configurable: true, writable: true },\n    })\n\n    // Define accessors.\n    for (let i = 0; i < keys.length; ++i) {\n        const key = keys[i]\n        if (!(key in BaseEvent.prototype)) {\n            const descriptor = Object.getOwnPropertyDescriptor(proto, key)\n            const isFunc = typeof descriptor.value === \"function\"\n            Object.defineProperty(\n                CustomEvent.prototype,\n                key,\n                isFunc\n                    ? defineCallDescriptor(key)\n                    : defineRedirectDescriptor(key)\n            )\n        }\n    }\n\n    return CustomEvent\n}\n\n/**\n * Get the wrapper class of a given prototype.\n * @param {Object} proto The prototype of the original event to get its wrapper.\n * @returns {Function} The wrapper class.\n * @private\n */\nfunction getWrapper(proto) {\n    if (proto == null || proto === Object.prototype) {\n        return Event\n    }\n\n    let wrapper = wrappers.get(proto)\n    if (wrapper == null) {\n        wrapper = defineWrapper(getWrapper(Object.getPrototypeOf(proto)), proto)\n        wrappers.set(proto, wrapper)\n    }\n    return wrapper\n}\n\n/**\n * Wrap a given event to management a dispatching.\n * @param {EventTarget} eventTarget The event target of this dispatching.\n * @param {Object} event The event to wrap.\n * @returns {Event} The wrapper instance.\n * @private\n */\nexport function wrapEvent(eventTarget, event) {\n    const Wrapper = getWrapper(Object.getPrototypeOf(event))\n    return new Wrapper(eventTarget, event)\n}\n\n/**\n * Get the immediateStopped flag of a given event.\n * @param {Event} event The event to get.\n * @returns {boolean} The flag to stop propagation immediately.\n * @private\n */\nexport function isStopped(event) {\n    return pd(event).immediateStopped\n}\n\n/**\n * Set the current event phase of a given event.\n * @param {Event} event The event to set current target.\n * @param {number} eventPhase New event phase.\n * @returns {void}\n * @private\n */\nexport function setEventPhase(event, eventPhase) {\n    pd(event).eventPhase = eventPhase\n}\n\n/**\n * Set the current target of a given event.\n * @param {Event} event The event to set current target.\n * @param {EventTarget|null} currentTarget New current target.\n * @returns {void}\n * @private\n */\nexport function setCurrentTarget(event, currentTarget) {\n    pd(event).currentTarget = currentTarget\n}\n\n/**\n * Set a passive listener of a given event.\n * @param {Event} event The event to set current target.\n * @param {Function|null} passiveListener New passive listener.\n * @returns {void}\n * @private\n */\nexport function setPassiveListener(event, passiveListener) {\n    pd(event).passiveListener = passiveListener\n}\n","import {\n    isStopped,\n    setCurrentTarget,\n    setEventPhase,\n    setPassiveListener,\n    wrapEvent,\n} from \"./event.mjs\"\n\n/**\n * @typedef {object} ListenerNode\n * @property {Function} listener\n * @property {1|2|3} listenerType\n * @property {boolean} passive\n * @property {boolean} once\n * @property {ListenerNode|null} next\n * @private\n */\n\n/**\n * @type {WeakMap<object, Map<string, ListenerNode>>}\n * @private\n */\nconst listenersMap = new WeakMap()\n\n// Listener types\nconst CAPTURE = 1\nconst BUBBLE = 2\nconst ATTRIBUTE = 3\n\n/**\n * Check whether a given value is an object or not.\n * @param {any} x The value to check.\n * @returns {boolean} `true` if the value is an object.\n */\nfunction isObject(x) {\n    return x !== null && typeof x === \"object\" //eslint-disable-line no-restricted-syntax\n}\n\n/**\n * Get listeners.\n * @param {EventTarget} eventTarget The event target to get.\n * @returns {Map<string, ListenerNode>} The listeners.\n * @private\n */\nfunction getListeners(eventTarget) {\n    const listeners = listenersMap.get(eventTarget)\n    if (listeners == null) {\n        throw new TypeError(\n            \"'this' is expected an EventTarget object, but got another value.\"\n        )\n    }\n    return listeners\n}\n\n/**\n * Get the property descriptor for the event attribute of a given event.\n * @param {string} eventName The event name to get property descriptor.\n * @returns {PropertyDescriptor} The property descriptor.\n * @private\n */\nfunction defineEventAttributeDescriptor(eventName) {\n    return {\n        get() {\n            const listeners = getListeners(this)\n            let node = listeners.get(eventName)\n            while (node != null) {\n                if (node.listenerType === ATTRIBUTE) {\n                    return node.listener\n                }\n                node = node.next\n            }\n            return null\n        },\n\n        set(listener) {\n            if (typeof listener !== \"function\" && !isObject(listener)) {\n                listener = null // eslint-disable-line no-param-reassign\n            }\n            const listeners = getListeners(this)\n\n            // Traverse to the tail while removing old value.\n            let prev = null\n            let node = listeners.get(eventName)\n            while (node != null) {\n                if (node.listenerType === ATTRIBUTE) {\n                    // Remove old value.\n                    if (prev !== null) {\n                        prev.next = node.next\n                    } else if (node.next !== null) {\n                        listeners.set(eventName, node.next)\n                    } else {\n                        listeners.delete(eventName)\n                    }\n                } else {\n                    prev = node\n                }\n\n                node = node.next\n            }\n\n            // Add new value.\n            if (listener !== null) {\n                const newNode = {\n                    listener,\n                    listenerType: ATTRIBUTE,\n                    passive: false,\n                    once: false,\n                    next: null,\n                }\n                if (prev === null) {\n                    listeners.set(eventName, newNode)\n                } else {\n                    prev.next = newNode\n                }\n            }\n        },\n        configurable: true,\n        enumerable: true,\n    }\n}\n\n/**\n * Define an event attribute (e.g. `eventTarget.onclick`).\n * @param {Object} eventTargetPrototype The event target prototype to define an event attrbite.\n * @param {string} eventName The event name to define.\n * @returns {void}\n */\nfunction defineEventAttribute(eventTargetPrototype, eventName) {\n    Object.defineProperty(\n        eventTargetPrototype,\n        `on${eventName}`,\n        defineEventAttributeDescriptor(eventName)\n    )\n}\n\n/**\n * Define a custom EventTarget with event attributes.\n * @param {string[]} eventNames Event names for event attributes.\n * @returns {EventTarget} The custom EventTarget.\n * @private\n */\nfunction defineCustomEventTarget(eventNames) {\n    /** CustomEventTarget */\n    function CustomEventTarget() {\n        EventTarget.call(this)\n    }\n\n    CustomEventTarget.prototype = Object.create(EventTarget.prototype, {\n        constructor: {\n            value: CustomEventTarget,\n            configurable: true,\n            writable: true,\n        },\n    })\n\n    for (let i = 0; i < eventNames.length; ++i) {\n        defineEventAttribute(CustomEventTarget.prototype, eventNames[i])\n    }\n\n    return CustomEventTarget\n}\n\n/**\n * EventTarget.\n *\n * - This is constructor if no arguments.\n * - This is a function which returns a CustomEventTarget constructor if there are arguments.\n *\n * For example:\n *\n *     class A extends EventTarget {}\n *     class B extends EventTarget(\"message\") {}\n *     class C extends EventTarget(\"message\", \"error\") {}\n *     class D extends EventTarget([\"message\", \"error\"]) {}\n */\nfunction EventTarget() {\n    /*eslint-disable consistent-return */\n    if (this instanceof EventTarget) {\n        listenersMap.set(this, new Map())\n        return\n    }\n    if (arguments.length === 1 && Array.isArray(arguments[0])) {\n        return defineCustomEventTarget(arguments[0])\n    }\n    if (arguments.length > 0) {\n        const types = new Array(arguments.length)\n        for (let i = 0; i < arguments.length; ++i) {\n            types[i] = arguments[i]\n        }\n        return defineCustomEventTarget(types)\n    }\n    throw new TypeError(\"Cannot call a class as a function\")\n    /*eslint-enable consistent-return */\n}\n\n// Should be enumerable, but class methods are not enumerable.\nEventTarget.prototype = {\n    /**\n     * Add a given listener to this event target.\n     * @param {string} eventName The event name to add.\n     * @param {Function} listener The listener to add.\n     * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\n     * @returns {void}\n     */\n    addEventListener(eventName, listener, options) {\n        if (listener == null) {\n            return\n        }\n        if (typeof listener !== \"function\" && !isObject(listener)) {\n            throw new TypeError(\"'listener' should be a function or an object.\")\n        }\n\n        const listeners = getListeners(this)\n        const optionsIsObj = isObject(options)\n        const capture = optionsIsObj\n            ? Boolean(options.capture)\n            : Boolean(options)\n        const listenerType = capture ? CAPTURE : BUBBLE\n        const newNode = {\n            listener,\n            listenerType,\n            passive: optionsIsObj && Boolean(options.passive),\n            once: optionsIsObj && Boolean(options.once),\n            next: null,\n        }\n\n        // Set it as the first node if the first node is null.\n        let node = listeners.get(eventName)\n        if (node === undefined) {\n            listeners.set(eventName, newNode)\n            return\n        }\n\n        // Traverse to the tail while checking duplication..\n        let prev = null\n        while (node != null) {\n            if (\n                node.listener === listener &&\n                node.listenerType === listenerType\n            ) {\n                // Should ignore duplication.\n                return\n            }\n            prev = node\n            node = node.next\n        }\n\n        // Add it.\n        prev.next = newNode\n    },\n\n    /**\n     * Remove a given listener from this event target.\n     * @param {string} eventName The event name to remove.\n     * @param {Function} listener The listener to remove.\n     * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\n     * @returns {void}\n     */\n    removeEventListener(eventName, listener, options) {\n        if (listener == null) {\n            return\n        }\n\n        const listeners = getListeners(this)\n        const capture = isObject(options)\n            ? Boolean(options.capture)\n            : Boolean(options)\n        const listenerType = capture ? CAPTURE : BUBBLE\n\n        let prev = null\n        let node = listeners.get(eventName)\n        while (node != null) {\n            if (\n                node.listener === listener &&\n                node.listenerType === listenerType\n            ) {\n                if (prev !== null) {\n                    prev.next = node.next\n                } else if (node.next !== null) {\n                    listeners.set(eventName, node.next)\n                } else {\n                    listeners.delete(eventName)\n                }\n                return\n            }\n\n            prev = node\n            node = node.next\n        }\n    },\n\n    /**\n     * Dispatch a given event.\n     * @param {Event|{type:string}} event The event to dispatch.\n     * @returns {boolean} `false` if canceled.\n     */\n    dispatchEvent(event) {\n        if (event == null || typeof event.type !== \"string\") {\n            throw new TypeError('\"event.type\" should be a string.')\n        }\n\n        // If listeners aren't registered, terminate.\n        const listeners = getListeners(this)\n        const eventName = event.type\n        let node = listeners.get(eventName)\n        if (node == null) {\n            return true\n        }\n\n        // Since we cannot rewrite several properties, so wrap object.\n        const wrappedEvent = wrapEvent(this, event)\n\n        // This doesn't process capturing phase and bubbling phase.\n        // This isn't participating in a tree.\n        let prev = null\n        while (node != null) {\n            // Remove this listener if it's once\n            if (node.once) {\n                if (prev !== null) {\n                    prev.next = node.next\n                } else if (node.next !== null) {\n                    listeners.set(eventName, node.next)\n                } else {\n                    listeners.delete(eventName)\n                }\n            } else {\n                prev = node\n            }\n\n            // Call this listener\n            setPassiveListener(\n                wrappedEvent,\n                node.passive ? node.listener : null\n            )\n            if (typeof node.listener === \"function\") {\n                try {\n                    node.listener.call(this, wrappedEvent)\n                } catch (err) {\n                    if (\n                        typeof console !== \"undefined\" &&\n                        typeof console.error === \"function\"\n                    ) {\n                        console.error(err)\n                    }\n                }\n            } else if (\n                node.listenerType !== ATTRIBUTE &&\n                typeof node.listener.handleEvent === \"function\"\n            ) {\n                node.listener.handleEvent(wrappedEvent)\n            }\n\n            // Break if `event.stopImmediatePropagation` was called.\n            if (isStopped(wrappedEvent)) {\n                break\n            }\n\n            node = node.next\n        }\n        setPassiveListener(wrappedEvent, null)\n        setEventPhase(wrappedEvent, 0)\n        setCurrentTarget(wrappedEvent, null)\n\n        return !wrappedEvent.defaultPrevented\n    },\n}\n\n// `constructor` is not enumerable.\nObject.defineProperty(EventTarget.prototype, \"constructor\", {\n    value: EventTarget,\n    configurable: true,\n    writable: true,\n})\n\n// Ensure `eventTarget instanceof window.EventTarget` is `true`.\nif (\n    typeof window !== \"undefined\" &&\n    typeof window.EventTarget !== \"undefined\"\n) {\n    Object.setPrototypeOf(EventTarget.prototype, window.EventTarget.prototype)\n}\n\nexport { defineEventAttribute, EventTarget }\nexport default EventTarget\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n  ? R.apply\n  : function ReflectApply(target, receiver, args) {\n    return Function.prototype.apply.call(target, receiver, args);\n  }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n  ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target)\n      .concat(Object.getOwnPropertySymbols(target));\n  };\n} else {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target);\n  };\n}\n\nfunction ProcessEmitWarning(warning) {\n  if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n  return value !== value;\n}\n\nfunction EventEmitter() {\n  EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n  if (typeof listener !== 'function') {\n    throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n  }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n  enumerable: true,\n  get: function() {\n    return defaultMaxListeners;\n  },\n  set: function(arg) {\n    if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n      throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n    }\n    defaultMaxListeners = arg;\n  }\n});\n\nEventEmitter.init = function() {\n\n  if (this._events === undefined ||\n      this._events === Object.getPrototypeOf(this)._events) {\n    this._events = Object.create(null);\n    this._eventsCount = 0;\n  }\n\n  this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n  if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n    throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n  }\n  this._maxListeners = n;\n  return this;\n};\n\nfunction _getMaxListeners(that) {\n  if (that._maxListeners === undefined)\n    return EventEmitter.defaultMaxListeners;\n  return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n  return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n  var args = [];\n  for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n  var doError = (type === 'error');\n\n  var events = this._events;\n  if (events !== undefined)\n    doError = (doError && events.error === undefined);\n  else if (!doError)\n    return false;\n\n  // If there is no 'error' event listener then throw.\n  if (doError) {\n    var er;\n    if (args.length > 0)\n      er = args[0];\n    if (er instanceof Error) {\n      // Note: The comments on the `throw` lines are intentional, they show\n      // up in Node's output if this results in an unhandled exception.\n      throw er; // Unhandled 'error' event\n    }\n    // At least give some kind of context to the user\n    var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n    err.context = er;\n    throw err; // Unhandled 'error' event\n  }\n\n  var handler = events[type];\n\n  if (handler === undefined)\n    return false;\n\n  if (typeof handler === 'function') {\n    ReflectApply(handler, this, args);\n  } else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      ReflectApply(listeners[i], this, args);\n  }\n\n  return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n  var m;\n  var events;\n  var existing;\n\n  checkListener(listener);\n\n  events = target._events;\n  if (events === undefined) {\n    events = target._events = Object.create(null);\n    target._eventsCount = 0;\n  } else {\n    // To avoid recursion in the case that type === \"newListener\"! Before\n    // adding it to the listeners, first emit \"newListener\".\n    if (events.newListener !== undefined) {\n      target.emit('newListener', type,\n                  listener.listener ? listener.listener : listener);\n\n      // Re-assign `events` because a newListener handler could have caused the\n      // this._events to be assigned to a new object\n      events = target._events;\n    }\n    existing = events[type];\n  }\n\n  if (existing === undefined) {\n    // Optimize the case of one listener. Don't need the extra array object.\n    existing = events[type] = listener;\n    ++target._eventsCount;\n  } else {\n    if (typeof existing === 'function') {\n      // Adding the second element, need to change to array.\n      existing = events[type] =\n        prepend ? [listener, existing] : [existing, listener];\n      // If we've already got an array, just append.\n    } else if (prepend) {\n      existing.unshift(listener);\n    } else {\n      existing.push(listener);\n    }\n\n    // Check for listener leak\n    m = _getMaxListeners(target);\n    if (m > 0 && existing.length > m && !existing.warned) {\n      existing.warned = true;\n      // No error code for this since it is a Warning\n      // eslint-disable-next-line no-restricted-syntax\n      var w = new Error('Possible EventEmitter memory leak detected. ' +\n                          existing.length + ' ' + String(type) + ' listeners ' +\n                          'added. Use emitter.setMaxListeners() to ' +\n                          'increase limit');\n      w.name = 'MaxListenersExceededWarning';\n      w.emitter = target;\n      w.type = type;\n      w.count = existing.length;\n      ProcessEmitWarning(w);\n    }\n  }\n\n  return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n  return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n    function prependListener(type, listener) {\n      return _addListener(this, type, listener, true);\n    };\n\nfunction onceWrapper() {\n  if (!this.fired) {\n    this.target.removeListener(this.type, this.wrapFn);\n    this.fired = true;\n    if (arguments.length === 0)\n      return this.listener.call(this.target);\n    return this.listener.apply(this.target, arguments);\n  }\n}\n\nfunction _onceWrap(target, type, listener) {\n  var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n  var wrapped = onceWrapper.bind(state);\n  wrapped.listener = listener;\n  state.wrapFn = wrapped;\n  return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n  checkListener(listener);\n  this.on(type, _onceWrap(this, type, listener));\n  return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n    function prependOnceListener(type, listener) {\n      checkListener(listener);\n      this.prependListener(type, _onceWrap(this, type, listener));\n      return this;\n    };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n    function removeListener(type, listener) {\n      var list, events, position, i, originalListener;\n\n      checkListener(listener);\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      list = events[type];\n      if (list === undefined)\n        return this;\n\n      if (list === listener || list.listener === listener) {\n        if (--this._eventsCount === 0)\n          this._events = Object.create(null);\n        else {\n          delete events[type];\n          if (events.removeListener)\n            this.emit('removeListener', type, list.listener || listener);\n        }\n      } else if (typeof list !== 'function') {\n        position = -1;\n\n        for (i = list.length - 1; i >= 0; i--) {\n          if (list[i] === listener || list[i].listener === listener) {\n            originalListener = list[i].listener;\n            position = i;\n            break;\n          }\n        }\n\n        if (position < 0)\n          return this;\n\n        if (position === 0)\n          list.shift();\n        else {\n          spliceOne(list, position);\n        }\n\n        if (list.length === 1)\n          events[type] = list[0];\n\n        if (events.removeListener !== undefined)\n          this.emit('removeListener', type, originalListener || listener);\n      }\n\n      return this;\n    };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n    function removeAllListeners(type) {\n      var listeners, events, i;\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      // not listening for removeListener, no need to emit\n      if (events.removeListener === undefined) {\n        if (arguments.length === 0) {\n          this._events = Object.create(null);\n          this._eventsCount = 0;\n        } else if (events[type] !== undefined) {\n          if (--this._eventsCount === 0)\n            this._events = Object.create(null);\n          else\n            delete events[type];\n        }\n        return this;\n      }\n\n      // emit removeListener for all listeners on all events\n      if (arguments.length === 0) {\n        var keys = Object.keys(events);\n        var key;\n        for (i = 0; i < keys.length; ++i) {\n          key = keys[i];\n          if (key === 'removeListener') continue;\n          this.removeAllListeners(key);\n        }\n        this.removeAllListeners('removeListener');\n        this._events = Object.create(null);\n        this._eventsCount = 0;\n        return this;\n      }\n\n      listeners = events[type];\n\n      if (typeof listeners === 'function') {\n        this.removeListener(type, listeners);\n      } else if (listeners !== undefined) {\n        // LIFO order\n        for (i = listeners.length - 1; i >= 0; i--) {\n          this.removeListener(type, listeners[i]);\n        }\n      }\n\n      return this;\n    };\n\nfunction _listeners(target, type, unwrap) {\n  var events = target._events;\n\n  if (events === undefined)\n    return [];\n\n  var evlistener = events[type];\n  if (evlistener === undefined)\n    return [];\n\n  if (typeof evlistener === 'function')\n    return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n  return unwrap ?\n    unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n  return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n  return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  if (typeof emitter.listenerCount === 'function') {\n    return emitter.listenerCount(type);\n  } else {\n    return listenerCount.call(emitter, type);\n  }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n  var events = this._events;\n\n  if (events !== undefined) {\n    var evlistener = events[type];\n\n    if (typeof evlistener === 'function') {\n      return 1;\n    } else if (evlistener !== undefined) {\n      return evlistener.length;\n    }\n  }\n\n  return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n  return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n  var copy = new Array(n);\n  for (var i = 0; i < n; ++i)\n    copy[i] = arr[i];\n  return copy;\n}\n\nfunction spliceOne(list, index) {\n  for (; index + 1 < list.length; index++)\n    list[index] = list[index + 1];\n  list.pop();\n}\n\nfunction unwrapListeners(arr) {\n  var ret = new Array(arr.length);\n  for (var i = 0; i < ret.length; ++i) {\n    ret[i] = arr[i].listener || arr[i];\n  }\n  return ret;\n}\n\nfunction once(emitter, name) {\n  return new Promise(function (resolve, reject) {\n    function errorListener(err) {\n      emitter.removeListener(name, resolver);\n      reject(err);\n    }\n\n    function resolver() {\n      if (typeof emitter.removeListener === 'function') {\n        emitter.removeListener('error', errorListener);\n      }\n      resolve([].slice.call(arguments));\n    };\n\n    eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n    if (name !== 'error') {\n      addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n    }\n  });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n  if (typeof emitter.on === 'function') {\n    eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n  }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n  if (typeof emitter.on === 'function') {\n    if (flags.once) {\n      emitter.once(name, listener);\n    } else {\n      emitter.on(name, listener);\n    }\n  } else if (typeof emitter.addEventListener === 'function') {\n    // EventTarget does not have `error` event semantics like Node\n    // EventEmitters, we do not listen for `error` events here.\n    emitter.addEventListener(name, function wrapListener(arg) {\n      // IE does not have builtin `{ once: true }` support so we\n      // have to do it manually.\n      if (flags.once) {\n        emitter.removeEventListener(name, wrapListener);\n      }\n      listener(arg);\n    });\n  } else {\n    throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n  }\n}\n","'use strict';\nmodule.exports = function (obj, predicate) {\n\tvar ret = {};\n\tvar keys = Object.keys(obj);\n\tvar isArr = Array.isArray(predicate);\n\n\tfor (var i = 0; i < keys.length; i++) {\n\t\tvar key = keys[i];\n\t\tvar val = obj[key];\n\n\t\tif (isArr ? predicate.indexOf(key) !== -1 : predicate(key, val, obj)) {\n\t\t\tret[key] = val;\n\t\t}\n\t}\n\n\treturn ret;\n};\n","'use strict';\n\nexports = module.exports = require('./lib/parser')['default'];\nexports['default'] = exports;\n","export default (function() {\n  \"use strict\";\n\n  /*\n   * Generated by PEG.js 0.9.0.\n   *\n   * http://pegjs.org/\n   */\n\n  function peg$subclass(child, parent) {\n    function ctor() { this.constructor = child; }\n    ctor.prototype = parent.prototype;\n    child.prototype = new ctor();\n  }\n\n  function peg$SyntaxError(message, expected, found, location) {\n    this.message  = message;\n    this.expected = expected;\n    this.found    = found;\n    this.location = location;\n    this.name     = \"SyntaxError\";\n\n    if (typeof Error.captureStackTrace === \"function\") {\n      Error.captureStackTrace(this, peg$SyntaxError);\n    }\n  }\n\n  peg$subclass(peg$SyntaxError, Error);\n\n  function peg$parse(input) {\n    var options = arguments.length > 1 ? arguments[1] : {},\n        parser  = this,\n\n        peg$FAILED = {},\n\n        peg$startRuleFunctions = { start: peg$parsestart },\n        peg$startRuleFunction  = peg$parsestart,\n\n        peg$c0 = function(elements) {\n                return {\n                    type    : 'messageFormatPattern',\n                    elements: elements,\n                    location: location()\n                };\n            },\n        peg$c1 = function(text) {\n                var string = '',\n                    i, j, outerLen, inner, innerLen;\n\n                for (i = 0, outerLen = text.length; i < outerLen; i += 1) {\n                    inner = text[i];\n\n                    for (j = 0, innerLen = inner.length; j < innerLen; j += 1) {\n                        string += inner[j];\n                    }\n                }\n\n                return string;\n            },\n        peg$c2 = function(messageText) {\n                return {\n                    type : 'messageTextElement',\n                    value: messageText,\n                    location: location()\n                };\n            },\n        peg$c3 = /^[^ \\t\\n\\r,.+={}#]/,\n        peg$c4 = { type: \"class\", value: \"[^ \\\\t\\\\n\\\\r,.+={}#]\", description: \"[^ \\\\t\\\\n\\\\r,.+={}#]\" },\n        peg$c5 = \"{\",\n        peg$c6 = { type: \"literal\", value: \"{\", description: \"\\\"{\\\"\" },\n        peg$c7 = \",\",\n        peg$c8 = { type: \"literal\", value: \",\", description: \"\\\",\\\"\" },\n        peg$c9 = \"}\",\n        peg$c10 = { type: \"literal\", value: \"}\", description: \"\\\"}\\\"\" },\n        peg$c11 = function(id, format) {\n                return {\n                    type  : 'argumentElement',\n                    id    : id,\n                    format: format && format[2],\n                    location: location()\n                };\n            },\n        peg$c12 = \"number\",\n        peg$c13 = { type: \"literal\", value: \"number\", description: \"\\\"number\\\"\" },\n        peg$c14 = \"date\",\n        peg$c15 = { type: \"literal\", value: \"date\", description: \"\\\"date\\\"\" },\n        peg$c16 = \"time\",\n        peg$c17 = { type: \"literal\", value: \"time\", description: \"\\\"time\\\"\" },\n        peg$c18 = function(type, style) {\n                return {\n                    type : type + 'Format',\n                    style: style && style[2],\n                    location: location()\n                };\n            },\n        peg$c19 = \"plural\",\n        peg$c20 = { type: \"literal\", value: \"plural\", description: \"\\\"plural\\\"\" },\n        peg$c21 = function(pluralStyle) {\n                return {\n                    type   : pluralStyle.type,\n                    ordinal: false,\n                    offset : pluralStyle.offset || 0,\n                    options: pluralStyle.options,\n                    location: location()\n                };\n            },\n        peg$c22 = \"selectordinal\",\n        peg$c23 = { type: \"literal\", value: \"selectordinal\", description: \"\\\"selectordinal\\\"\" },\n        peg$c24 = function(pluralStyle) {\n                return {\n                    type   : pluralStyle.type,\n                    ordinal: true,\n                    offset : pluralStyle.offset || 0,\n                    options: pluralStyle.options,\n                    location: location()\n                }\n            },\n        peg$c25 = \"select\",\n        peg$c26 = { type: \"literal\", value: \"select\", description: \"\\\"select\\\"\" },\n        peg$c27 = function(options) {\n                return {\n                    type   : 'selectFormat',\n                    options: options,\n                    location: location()\n                };\n            },\n        peg$c28 = \"=\",\n        peg$c29 = { type: \"literal\", value: \"=\", description: \"\\\"=\\\"\" },\n        peg$c30 = function(selector, pattern) {\n                return {\n                    type    : 'optionalFormatPattern',\n                    selector: selector,\n                    value   : pattern,\n                    location: location()\n                };\n            },\n        peg$c31 = \"offset:\",\n        peg$c32 = { type: \"literal\", value: \"offset:\", description: \"\\\"offset:\\\"\" },\n        peg$c33 = function(number) {\n                return number;\n            },\n        peg$c34 = function(offset, options) {\n                return {\n                    type   : 'pluralFormat',\n                    offset : offset,\n                    options: options,\n                    location: location()\n                };\n            },\n        peg$c35 = { type: \"other\", description: \"whitespace\" },\n        peg$c36 = /^[ \\t\\n\\r]/,\n        peg$c37 = { type: \"class\", value: \"[ \\\\t\\\\n\\\\r]\", description: \"[ \\\\t\\\\n\\\\r]\" },\n        peg$c38 = { type: \"other\", description: \"optionalWhitespace\" },\n        peg$c39 = /^[0-9]/,\n        peg$c40 = { type: \"class\", value: \"[0-9]\", description: \"[0-9]\" },\n        peg$c41 = /^[0-9a-f]/i,\n        peg$c42 = { type: \"class\", value: \"[0-9a-f]i\", description: \"[0-9a-f]i\" },\n        peg$c43 = \"0\",\n        peg$c44 = { type: \"literal\", value: \"0\", description: \"\\\"0\\\"\" },\n        peg$c45 = /^[1-9]/,\n        peg$c46 = { type: \"class\", value: \"[1-9]\", description: \"[1-9]\" },\n        peg$c47 = function(digits) {\n            return parseInt(digits, 10);\n        },\n        peg$c48 = /^[^{}\\\\\\0-\\x1F \\t\\n\\r]/,\n        peg$c49 = { type: \"class\", value: \"[^{}\\\\\\\\\\\\0-\\\\x1F\\\\x7f \\\\t\\\\n\\\\r]\", description: \"[^{}\\\\\\\\\\\\0-\\\\x1F\\\\x7f \\\\t\\\\n\\\\r]\" },\n        peg$c50 = \"\\\\\\\\\",\n        peg$c51 = { type: \"literal\", value: \"\\\\\\\\\", description: \"\\\"\\\\\\\\\\\\\\\\\\\"\" },\n        peg$c52 = function() { return '\\\\'; },\n        peg$c53 = \"\\\\#\",\n        peg$c54 = { type: \"literal\", value: \"\\\\#\", description: \"\\\"\\\\\\\\#\\\"\" },\n        peg$c55 = function() { return '\\\\#'; },\n        peg$c56 = \"\\\\{\",\n        peg$c57 = { type: \"literal\", value: \"\\\\{\", description: \"\\\"\\\\\\\\{\\\"\" },\n        peg$c58 = function() { return '\\u007B'; },\n        peg$c59 = \"\\\\}\",\n        peg$c60 = { type: \"literal\", value: \"\\\\}\", description: \"\\\"\\\\\\\\}\\\"\" },\n        peg$c61 = function() { return '\\u007D'; },\n        peg$c62 = \"\\\\u\",\n        peg$c63 = { type: \"literal\", value: \"\\\\u\", description: \"\\\"\\\\\\\\u\\\"\" },\n        peg$c64 = function(digits) {\n                return String.fromCharCode(parseInt(digits, 16));\n            },\n        peg$c65 = function(chars) { return chars.join(''); },\n\n        peg$currPos          = 0,\n        peg$savedPos         = 0,\n        peg$posDetailsCache  = [{ line: 1, column: 1, seenCR: false }],\n        peg$maxFailPos       = 0,\n        peg$maxFailExpected  = [],\n        peg$silentFails      = 0,\n\n        peg$result;\n\n    if (\"startRule\" in options) {\n      if (!(options.startRule in peg$startRuleFunctions)) {\n        throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n      }\n\n      peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n    }\n\n    function text() {\n      return input.substring(peg$savedPos, peg$currPos);\n    }\n\n    function location() {\n      return peg$computeLocation(peg$savedPos, peg$currPos);\n    }\n\n    function expected(description) {\n      throw peg$buildException(\n        null,\n        [{ type: \"other\", description: description }],\n        input.substring(peg$savedPos, peg$currPos),\n        peg$computeLocation(peg$savedPos, peg$currPos)\n      );\n    }\n\n    function error(message) {\n      throw peg$buildException(\n        message,\n        null,\n        input.substring(peg$savedPos, peg$currPos),\n        peg$computeLocation(peg$savedPos, peg$currPos)\n      );\n    }\n\n    function peg$computePosDetails(pos) {\n      var details = peg$posDetailsCache[pos],\n          p, ch;\n\n      if (details) {\n        return details;\n      } else {\n        p = pos - 1;\n        while (!peg$posDetailsCache[p]) {\n          p--;\n        }\n\n        details = peg$posDetailsCache[p];\n        details = {\n          line:   details.line,\n          column: details.column,\n          seenCR: details.seenCR\n        };\n\n        while (p < pos) {\n          ch = input.charAt(p);\n          if (ch === \"\\n\") {\n            if (!details.seenCR) { details.line++; }\n            details.column = 1;\n            details.seenCR = false;\n          } else if (ch === \"\\r\" || ch === \"\\u2028\" || ch === \"\\u2029\") {\n            details.line++;\n            details.column = 1;\n            details.seenCR = true;\n          } else {\n            details.column++;\n            details.seenCR = false;\n          }\n\n          p++;\n        }\n\n        peg$posDetailsCache[pos] = details;\n        return details;\n      }\n    }\n\n    function peg$computeLocation(startPos, endPos) {\n      var startPosDetails = peg$computePosDetails(startPos),\n          endPosDetails   = peg$computePosDetails(endPos);\n\n      return {\n        start: {\n          offset: startPos,\n          line:   startPosDetails.line,\n          column: startPosDetails.column\n        },\n        end: {\n          offset: endPos,\n          line:   endPosDetails.line,\n          column: endPosDetails.column\n        }\n      };\n    }\n\n    function peg$fail(expected) {\n      if (peg$currPos < peg$maxFailPos) { return; }\n\n      if (peg$currPos > peg$maxFailPos) {\n        peg$maxFailPos = peg$currPos;\n        peg$maxFailExpected = [];\n      }\n\n      peg$maxFailExpected.push(expected);\n    }\n\n    function peg$buildException(message, expected, found, location) {\n      function cleanupExpected(expected) {\n        var i = 1;\n\n        expected.sort(function(a, b) {\n          if (a.description < b.description) {\n            return -1;\n          } else if (a.description > b.description) {\n            return 1;\n          } else {\n            return 0;\n          }\n        });\n\n        while (i < expected.length) {\n          if (expected[i - 1] === expected[i]) {\n            expected.splice(i, 1);\n          } else {\n            i++;\n          }\n        }\n      }\n\n      function buildMessage(expected, found) {\n        function stringEscape(s) {\n          function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); }\n\n          return s\n            .replace(/\\\\/g,   '\\\\\\\\')\n            .replace(/\"/g,    '\\\\\"')\n            .replace(/\\x08/g, '\\\\b')\n            .replace(/\\t/g,   '\\\\t')\n            .replace(/\\n/g,   '\\\\n')\n            .replace(/\\f/g,   '\\\\f')\n            .replace(/\\r/g,   '\\\\r')\n            .replace(/[\\x00-\\x07\\x0B\\x0E\\x0F]/g, function(ch) { return '\\\\x0' + hex(ch); })\n            .replace(/[\\x10-\\x1F\\x80-\\xFF]/g,    function(ch) { return '\\\\x'  + hex(ch); })\n            .replace(/[\\u0100-\\u0FFF]/g,         function(ch) { return '\\\\u0' + hex(ch); })\n            .replace(/[\\u1000-\\uFFFF]/g,         function(ch) { return '\\\\u'  + hex(ch); });\n        }\n\n        var expectedDescs = new Array(expected.length),\n            expectedDesc, foundDesc, i;\n\n        for (i = 0; i < expected.length; i++) {\n          expectedDescs[i] = expected[i].description;\n        }\n\n        expectedDesc = expected.length > 1\n          ? expectedDescs.slice(0, -1).join(\", \")\n              + \" or \"\n              + expectedDescs[expected.length - 1]\n          : expectedDescs[0];\n\n        foundDesc = found ? \"\\\"\" + stringEscape(found) + \"\\\"\" : \"end of input\";\n\n        return \"Expected \" + expectedDesc + \" but \" + foundDesc + \" found.\";\n      }\n\n      if (expected !== null) {\n        cleanupExpected(expected);\n      }\n\n      return new peg$SyntaxError(\n        message !== null ? message : buildMessage(expected, found),\n        expected,\n        found,\n        location\n      );\n    }\n\n    function peg$parsestart() {\n      var s0;\n\n      s0 = peg$parsemessageFormatPattern();\n\n      return s0;\n    }\n\n    function peg$parsemessageFormatPattern() {\n      var s0, s1, s2;\n\n      s0 = peg$currPos;\n      s1 = [];\n      s2 = peg$parsemessageFormatElement();\n      while (s2 !== peg$FAILED) {\n        s1.push(s2);\n        s2 = peg$parsemessageFormatElement();\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c0(s1);\n      }\n      s0 = s1;\n\n      return s0;\n    }\n\n    function peg$parsemessageFormatElement() {\n      var s0;\n\n      s0 = peg$parsemessageTextElement();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseargumentElement();\n      }\n\n      return s0;\n    }\n\n    function peg$parsemessageText() {\n      var s0, s1, s2, s3, s4, s5;\n\n      s0 = peg$currPos;\n      s1 = [];\n      s2 = peg$currPos;\n      s3 = peg$parse_();\n      if (s3 !== peg$FAILED) {\n        s4 = peg$parsechars();\n        if (s4 !== peg$FAILED) {\n          s5 = peg$parse_();\n          if (s5 !== peg$FAILED) {\n            s3 = [s3, s4, s5];\n            s2 = s3;\n          } else {\n            peg$currPos = s2;\n            s2 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s2;\n          s2 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s2;\n        s2 = peg$FAILED;\n      }\n      if (s2 !== peg$FAILED) {\n        while (s2 !== peg$FAILED) {\n          s1.push(s2);\n          s2 = peg$currPos;\n          s3 = peg$parse_();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parsechars();\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parse_();\n              if (s5 !== peg$FAILED) {\n                s3 = [s3, s4, s5];\n                s2 = s3;\n              } else {\n                peg$currPos = s2;\n                s2 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s2;\n              s2 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s2;\n            s2 = peg$FAILED;\n          }\n        }\n      } else {\n        s1 = peg$FAILED;\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c1(s1);\n      }\n      s0 = s1;\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        s1 = peg$parsews();\n        if (s1 !== peg$FAILED) {\n          s0 = input.substring(s0, peg$currPos);\n        } else {\n          s0 = s1;\n        }\n      }\n\n      return s0;\n    }\n\n    function peg$parsemessageTextElement() {\n      var s0, s1;\n\n      s0 = peg$currPos;\n      s1 = peg$parsemessageText();\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c2(s1);\n      }\n      s0 = s1;\n\n      return s0;\n    }\n\n    function peg$parseargument() {\n      var s0, s1, s2;\n\n      s0 = peg$parsenumber();\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        s1 = [];\n        if (peg$c3.test(input.charAt(peg$currPos))) {\n          s2 = input.charAt(peg$currPos);\n          peg$currPos++;\n        } else {\n          s2 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c4); }\n        }\n        if (s2 !== peg$FAILED) {\n          while (s2 !== peg$FAILED) {\n            s1.push(s2);\n            if (peg$c3.test(input.charAt(peg$currPos))) {\n              s2 = input.charAt(peg$currPos);\n              peg$currPos++;\n            } else {\n              s2 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c4); }\n            }\n          }\n        } else {\n          s1 = peg$FAILED;\n        }\n        if (s1 !== peg$FAILED) {\n          s0 = input.substring(s0, peg$currPos);\n        } else {\n          s0 = s1;\n        }\n      }\n\n      return s0;\n    }\n\n    function peg$parseargumentElement() {\n      var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 123) {\n        s1 = peg$c5;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c6); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseargument();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n              s5 = peg$currPos;\n              if (input.charCodeAt(peg$currPos) === 44) {\n                s6 = peg$c7;\n                peg$currPos++;\n              } else {\n                s6 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c8); }\n              }\n              if (s6 !== peg$FAILED) {\n                s7 = peg$parse_();\n                if (s7 !== peg$FAILED) {\n                  s8 = peg$parseelementFormat();\n                  if (s8 !== peg$FAILED) {\n                    s6 = [s6, s7, s8];\n                    s5 = s6;\n                  } else {\n                    peg$currPos = s5;\n                    s5 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s5;\n                  s5 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s5;\n                s5 = peg$FAILED;\n              }\n              if (s5 === peg$FAILED) {\n                s5 = null;\n              }\n              if (s5 !== peg$FAILED) {\n                s6 = peg$parse_();\n                if (s6 !== peg$FAILED) {\n                  if (input.charCodeAt(peg$currPos) === 125) {\n                    s7 = peg$c9;\n                    peg$currPos++;\n                  } else {\n                    s7 = peg$FAILED;\n                    if (peg$silentFails === 0) { peg$fail(peg$c10); }\n                  }\n                  if (s7 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c11(s3, s5);\n                    s0 = s1;\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseelementFormat() {\n      var s0;\n\n      s0 = peg$parsesimpleFormat();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parsepluralFormat();\n        if (s0 === peg$FAILED) {\n          s0 = peg$parseselectOrdinalFormat();\n          if (s0 === peg$FAILED) {\n            s0 = peg$parseselectFormat();\n          }\n        }\n      }\n\n      return s0;\n    }\n\n    function peg$parsesimpleFormat() {\n      var s0, s1, s2, s3, s4, s5, s6;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 6) === peg$c12) {\n        s1 = peg$c12;\n        peg$currPos += 6;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c13); }\n      }\n      if (s1 === peg$FAILED) {\n        if (input.substr(peg$currPos, 4) === peg$c14) {\n          s1 = peg$c14;\n          peg$currPos += 4;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c15); }\n        }\n        if (s1 === peg$FAILED) {\n          if (input.substr(peg$currPos, 4) === peg$c16) {\n            s1 = peg$c16;\n            peg$currPos += 4;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c17); }\n          }\n        }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$currPos;\n          if (input.charCodeAt(peg$currPos) === 44) {\n            s4 = peg$c7;\n            peg$currPos++;\n          } else {\n            s4 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c8); }\n          }\n          if (s4 !== peg$FAILED) {\n            s5 = peg$parse_();\n            if (s5 !== peg$FAILED) {\n              s6 = peg$parsechars();\n              if (s6 !== peg$FAILED) {\n                s4 = [s4, s5, s6];\n                s3 = s4;\n              } else {\n                peg$currPos = s3;\n                s3 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n          if (s3 === peg$FAILED) {\n            s3 = null;\n          }\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c18(s1, s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parsepluralFormat() {\n      var s0, s1, s2, s3, s4, s5;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 6) === peg$c19) {\n        s1 = peg$c19;\n        peg$currPos += 6;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c20); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 44) {\n            s3 = peg$c7;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c8); }\n          }\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parsepluralStyle();\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c21(s5);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseselectOrdinalFormat() {\n      var s0, s1, s2, s3, s4, s5;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 13) === peg$c22) {\n        s1 = peg$c22;\n        peg$currPos += 13;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c23); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 44) {\n            s3 = peg$c7;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c8); }\n          }\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parsepluralStyle();\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c24(s5);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseselectFormat() {\n      var s0, s1, s2, s3, s4, s5, s6;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 6) === peg$c25) {\n        s1 = peg$c25;\n        peg$currPos += 6;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c26); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 44) {\n            s3 = peg$c7;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c8); }\n          }\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n              s5 = [];\n              s6 = peg$parseoptionalFormatPattern();\n              if (s6 !== peg$FAILED) {\n                while (s6 !== peg$FAILED) {\n                  s5.push(s6);\n                  s6 = peg$parseoptionalFormatPattern();\n                }\n              } else {\n                s5 = peg$FAILED;\n              }\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c27(s5);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseselector() {\n      var s0, s1, s2, s3;\n\n      s0 = peg$currPos;\n      s1 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 61) {\n        s2 = peg$c28;\n        peg$currPos++;\n      } else {\n        s2 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c29); }\n      }\n      if (s2 !== peg$FAILED) {\n        s3 = peg$parsenumber();\n        if (s3 !== peg$FAILED) {\n          s2 = [s2, s3];\n          s1 = s2;\n        } else {\n          peg$currPos = s1;\n          s1 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s1;\n        s1 = peg$FAILED;\n      }\n      if (s1 !== peg$FAILED) {\n        s0 = input.substring(s0, peg$currPos);\n      } else {\n        s0 = s1;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$parsechars();\n      }\n\n      return s0;\n    }\n\n    function peg$parseoptionalFormatPattern() {\n      var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n      s0 = peg$currPos;\n      s1 = peg$parse_();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseselector();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parse_();\n          if (s3 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 123) {\n              s4 = peg$c5;\n              peg$currPos++;\n            } else {\n              s4 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c6); }\n            }\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parse_();\n              if (s5 !== peg$FAILED) {\n                s6 = peg$parsemessageFormatPattern();\n                if (s6 !== peg$FAILED) {\n                  s7 = peg$parse_();\n                  if (s7 !== peg$FAILED) {\n                    if (input.charCodeAt(peg$currPos) === 125) {\n                      s8 = peg$c9;\n                      peg$currPos++;\n                    } else {\n                      s8 = peg$FAILED;\n                      if (peg$silentFails === 0) { peg$fail(peg$c10); }\n                    }\n                    if (s8 !== peg$FAILED) {\n                      peg$savedPos = s0;\n                      s1 = peg$c30(s2, s6);\n                      s0 = s1;\n                    } else {\n                      peg$currPos = s0;\n                      s0 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseoffset() {\n      var s0, s1, s2, s3;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 7) === peg$c31) {\n        s1 = peg$c31;\n        peg$currPos += 7;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c32); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parsenumber();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c33(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parsepluralStyle() {\n      var s0, s1, s2, s3, s4;\n\n      s0 = peg$currPos;\n      s1 = peg$parseoffset();\n      if (s1 === peg$FAILED) {\n        s1 = null;\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          s3 = [];\n          s4 = peg$parseoptionalFormatPattern();\n          if (s4 !== peg$FAILED) {\n            while (s4 !== peg$FAILED) {\n              s3.push(s4);\n              s4 = peg$parseoptionalFormatPattern();\n            }\n          } else {\n            s3 = peg$FAILED;\n          }\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c34(s1, s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parsews() {\n      var s0, s1;\n\n      peg$silentFails++;\n      s0 = [];\n      if (peg$c36.test(input.charAt(peg$currPos))) {\n        s1 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c37); }\n      }\n      if (s1 !== peg$FAILED) {\n        while (s1 !== peg$FAILED) {\n          s0.push(s1);\n          if (peg$c36.test(input.charAt(peg$currPos))) {\n            s1 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c37); }\n          }\n        }\n      } else {\n        s0 = peg$FAILED;\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c35); }\n      }\n\n      return s0;\n    }\n\n    function peg$parse_() {\n      var s0, s1, s2;\n\n      peg$silentFails++;\n      s0 = peg$currPos;\n      s1 = [];\n      s2 = peg$parsews();\n      while (s2 !== peg$FAILED) {\n        s1.push(s2);\n        s2 = peg$parsews();\n      }\n      if (s1 !== peg$FAILED) {\n        s0 = input.substring(s0, peg$currPos);\n      } else {\n        s0 = s1;\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c38); }\n      }\n\n      return s0;\n    }\n\n    function peg$parsedigit() {\n      var s0;\n\n      if (peg$c39.test(input.charAt(peg$currPos))) {\n        s0 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c40); }\n      }\n\n      return s0;\n    }\n\n    function peg$parsehexDigit() {\n      var s0;\n\n      if (peg$c41.test(input.charAt(peg$currPos))) {\n        s0 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c42); }\n      }\n\n      return s0;\n    }\n\n    function peg$parsenumber() {\n      var s0, s1, s2, s3, s4, s5;\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 48) {\n        s1 = peg$c43;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c44); }\n      }\n      if (s1 === peg$FAILED) {\n        s1 = peg$currPos;\n        s2 = peg$currPos;\n        if (peg$c45.test(input.charAt(peg$currPos))) {\n          s3 = input.charAt(peg$currPos);\n          peg$currPos++;\n        } else {\n          s3 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c46); }\n        }\n        if (s3 !== peg$FAILED) {\n          s4 = [];\n          s5 = peg$parsedigit();\n          while (s5 !== peg$FAILED) {\n            s4.push(s5);\n            s5 = peg$parsedigit();\n          }\n          if (s4 !== peg$FAILED) {\n            s3 = [s3, s4];\n            s2 = s3;\n          } else {\n            peg$currPos = s2;\n            s2 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s2;\n          s2 = peg$FAILED;\n        }\n        if (s2 !== peg$FAILED) {\n          s1 = input.substring(s1, peg$currPos);\n        } else {\n          s1 = s2;\n        }\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c47(s1);\n      }\n      s0 = s1;\n\n      return s0;\n    }\n\n    function peg$parsechar() {\n      var s0, s1, s2, s3, s4, s5, s6, s7;\n\n      if (peg$c48.test(input.charAt(peg$currPos))) {\n        s0 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c49); }\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 2) === peg$c50) {\n          s1 = peg$c50;\n          peg$currPos += 2;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c51); }\n        }\n        if (s1 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c52();\n        }\n        s0 = s1;\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          if (input.substr(peg$currPos, 2) === peg$c53) {\n            s1 = peg$c53;\n            peg$currPos += 2;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c54); }\n          }\n          if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c55();\n          }\n          s0 = s1;\n          if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            if (input.substr(peg$currPos, 2) === peg$c56) {\n              s1 = peg$c56;\n              peg$currPos += 2;\n            } else {\n              s1 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c57); }\n            }\n            if (s1 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c58();\n            }\n            s0 = s1;\n            if (s0 === peg$FAILED) {\n              s0 = peg$currPos;\n              if (input.substr(peg$currPos, 2) === peg$c59) {\n                s1 = peg$c59;\n                peg$currPos += 2;\n              } else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c60); }\n              }\n              if (s1 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c61();\n              }\n              s0 = s1;\n              if (s0 === peg$FAILED) {\n                s0 = peg$currPos;\n                if (input.substr(peg$currPos, 2) === peg$c62) {\n                  s1 = peg$c62;\n                  peg$currPos += 2;\n                } else {\n                  s1 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c63); }\n                }\n                if (s1 !== peg$FAILED) {\n                  s2 = peg$currPos;\n                  s3 = peg$currPos;\n                  s4 = peg$parsehexDigit();\n                  if (s4 !== peg$FAILED) {\n                    s5 = peg$parsehexDigit();\n                    if (s5 !== peg$FAILED) {\n                      s6 = peg$parsehexDigit();\n                      if (s6 !== peg$FAILED) {\n                        s7 = peg$parsehexDigit();\n                        if (s7 !== peg$FAILED) {\n                          s4 = [s4, s5, s6, s7];\n                          s3 = s4;\n                        } else {\n                          peg$currPos = s3;\n                          s3 = peg$FAILED;\n                        }\n                      } else {\n                        peg$currPos = s3;\n                        s3 = peg$FAILED;\n                      }\n                    } else {\n                      peg$currPos = s3;\n                      s3 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s3;\n                    s3 = peg$FAILED;\n                  }\n                  if (s3 !== peg$FAILED) {\n                    s2 = input.substring(s2, peg$currPos);\n                  } else {\n                    s2 = s3;\n                  }\n                  if (s2 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c64(s2);\n                    s0 = s1;\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              }\n            }\n          }\n        }\n      }\n\n      return s0;\n    }\n\n    function peg$parsechars() {\n      var s0, s1, s2;\n\n      s0 = peg$currPos;\n      s1 = [];\n      s2 = peg$parsechar();\n      if (s2 !== peg$FAILED) {\n        while (s2 !== peg$FAILED) {\n          s1.push(s2);\n          s2 = peg$parsechar();\n        }\n      } else {\n        s1 = peg$FAILED;\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c65(s1);\n      }\n      s0 = s1;\n\n      return s0;\n    }\n\n    peg$result = peg$startRuleFunction();\n\n    if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n      return peg$result;\n    } else {\n      if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n        peg$fail({ type: \"end\", description: \"end of input\" });\n      }\n\n      throw peg$buildException(\n        null,\n        peg$maxFailExpected,\n        peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n        peg$maxFailPos < input.length\n          ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n          : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n      );\n    }\n  }\n\n  return {\n    SyntaxError: peg$SyntaxError,\n    parse:       peg$parse\n  };\n})();","/*!\n * Determine if an object is a Buffer\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nmodule.exports = function (obj) {\n  return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n}\n\nfunction isBuffer (obj) {\n  return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n  return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n}\n","/*!\n    localForage -- Offline Storage, Improved\n    Version 1.10.0\n    https://localforage.github.io/localForage\n    (c) 2013-2017 Mozilla, Apache License 2.0\n*/\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.localforage = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw (f.code=\"MODULE_NOT_FOUND\", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\n\nvar scheduleDrain;\n\n{\n  if (Mutation) {\n    var called = 0;\n    var observer = new Mutation(nextTick);\n    var element = global.document.createTextNode('');\n    observer.observe(element, {\n      characterData: true\n    });\n    scheduleDrain = function () {\n      element.data = (called = ++called % 2);\n    };\n  } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n    var channel = new global.MessageChannel();\n    channel.port1.onmessage = nextTick;\n    scheduleDrain = function () {\n      channel.port2.postMessage(0);\n    };\n  } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n    scheduleDrain = function () {\n\n      // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n      // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n      var scriptEl = global.document.createElement('script');\n      scriptEl.onreadystatechange = function () {\n        nextTick();\n\n        scriptEl.onreadystatechange = null;\n        scriptEl.parentNode.removeChild(scriptEl);\n        scriptEl = null;\n      };\n      global.document.documentElement.appendChild(scriptEl);\n    };\n  } else {\n    scheduleDrain = function () {\n      setTimeout(nextTick, 0);\n    };\n  }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n  draining = true;\n  var i, oldQueue;\n  var len = queue.length;\n  while (len) {\n    oldQueue = queue;\n    queue = [];\n    i = -1;\n    while (++i < len) {\n      oldQueue[i]();\n    }\n    len = queue.length;\n  }\n  draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n  if (queue.push(task) === 1 && !draining) {\n    scheduleDrain();\n  }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(1);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n  if (typeof resolver !== 'function') {\n    throw new TypeError('resolver must be a function');\n  }\n  this.state = PENDING;\n  this.queue = [];\n  this.outcome = void 0;\n  if (resolver !== INTERNAL) {\n    safelyResolveThenable(this, resolver);\n  }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n  return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n  if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n    typeof onRejected !== 'function' && this.state === REJECTED) {\n    return this;\n  }\n  var promise = new this.constructor(INTERNAL);\n  if (this.state !== PENDING) {\n    var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n    unwrap(promise, resolver, this.outcome);\n  } else {\n    this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n  }\n\n  return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n  this.promise = promise;\n  if (typeof onFulfilled === 'function') {\n    this.onFulfilled = onFulfilled;\n    this.callFulfilled = this.otherCallFulfilled;\n  }\n  if (typeof onRejected === 'function') {\n    this.onRejected = onRejected;\n    this.callRejected = this.otherCallRejected;\n  }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n  handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n  unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n  handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n  unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n  immediate(function () {\n    var returnValue;\n    try {\n      returnValue = func(value);\n    } catch (e) {\n      return handlers.reject(promise, e);\n    }\n    if (returnValue === promise) {\n      handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n    } else {\n      handlers.resolve(promise, returnValue);\n    }\n  });\n}\n\nhandlers.resolve = function (self, value) {\n  var result = tryCatch(getThen, value);\n  if (result.status === 'error') {\n    return handlers.reject(self, result.value);\n  }\n  var thenable = result.value;\n\n  if (thenable) {\n    safelyResolveThenable(self, thenable);\n  } else {\n    self.state = FULFILLED;\n    self.outcome = value;\n    var i = -1;\n    var len = self.queue.length;\n    while (++i < len) {\n      self.queue[i].callFulfilled(value);\n    }\n  }\n  return self;\n};\nhandlers.reject = function (self, error) {\n  self.state = REJECTED;\n  self.outcome = error;\n  var i = -1;\n  var len = self.queue.length;\n  while (++i < len) {\n    self.queue[i].callRejected(error);\n  }\n  return self;\n};\n\nfunction getThen(obj) {\n  // Make sure we only access the accessor once as required by the spec\n  var then = obj && obj.then;\n  if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n    return function appyThen() {\n      then.apply(obj, arguments);\n    };\n  }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n  // Either fulfill, reject or reject with error\n  var called = false;\n  function onError(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.reject(self, value);\n  }\n\n  function onSuccess(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.resolve(self, value);\n  }\n\n  function tryToUnwrap() {\n    thenable(onSuccess, onError);\n  }\n\n  var result = tryCatch(tryToUnwrap);\n  if (result.status === 'error') {\n    onError(result.value);\n  }\n}\n\nfunction tryCatch(func, value) {\n  var out = {};\n  try {\n    out.value = func(value);\n    out.status = 'success';\n  } catch (e) {\n    out.status = 'error';\n    out.value = e;\n  }\n  return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n  if (value instanceof this) {\n    return value;\n  }\n  return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n  var promise = new this(INTERNAL);\n  return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n  var self = this;\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var values = new Array(len);\n  var resolved = 0;\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    allResolver(iterable[i], i);\n  }\n  return promise;\n  function allResolver(value, i) {\n    self.resolve(value).then(resolveFromAll, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n    function resolveFromAll(outValue) {\n      values[i] = outValue;\n      if (++resolved === len && !called) {\n        called = true;\n        handlers.resolve(promise, values);\n      }\n    }\n  }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n  var self = this;\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    resolver(iterable[i]);\n  }\n  return promise;\n  function resolver(value) {\n    self.resolve(value).then(function (response) {\n      if (!called) {\n        called = true;\n        handlers.resolve(promise, response);\n      }\n    }, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n  }\n}\n\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nif (typeof global.Promise !== 'function') {\n  global.Promise = _dereq_(2);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"2\":2}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getIDB() {\n    /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n    try {\n        if (typeof indexedDB !== 'undefined') {\n            return indexedDB;\n        }\n        if (typeof webkitIndexedDB !== 'undefined') {\n            return webkitIndexedDB;\n        }\n        if (typeof mozIndexedDB !== 'undefined') {\n            return mozIndexedDB;\n        }\n        if (typeof OIndexedDB !== 'undefined') {\n            return OIndexedDB;\n        }\n        if (typeof msIndexedDB !== 'undefined') {\n            return msIndexedDB;\n        }\n    } catch (e) {\n        return;\n    }\n}\n\nvar idb = getIDB();\n\nfunction isIndexedDBValid() {\n    try {\n        // Initialize IndexedDB; fall back to vendor-prefixed versions\n        // if needed.\n        if (!idb || !idb.open) {\n            return false;\n        }\n        // We mimic PouchDB here;\n        //\n        // We test for openDatabase because IE Mobile identifies itself\n        // as Safari. Oh the lulz...\n        var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n\n        var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1;\n\n        // Safari <10.1 does not meet our requirements for IDB support\n        // (see: https://github.com/pouchdb/pouchdb/issues/5572).\n        // Safari 10.1 shipped with fetch, we can use that to detect it.\n        // Note: this creates issues with `window.fetch` polyfills and\n        // overrides; see:\n        // https://github.com/localForage/localForage/issues/856\n        return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n        // some outdated implementations of IDB that appear on Samsung\n        // and HTC Android devices <4.4 are missing IDBKeyRange\n        // See: https://github.com/mozilla/localForage/issues/128\n        // See: https://github.com/mozilla/localForage/issues/272\n        typeof IDBKeyRange !== 'undefined';\n    } catch (e) {\n        return false;\n    }\n}\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n    /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n    parts = parts || [];\n    properties = properties || {};\n    try {\n        return new Blob(parts, properties);\n    } catch (e) {\n        if (e.name !== 'TypeError') {\n            throw e;\n        }\n        var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n        var builder = new Builder();\n        for (var i = 0; i < parts.length; i += 1) {\n            builder.append(parts[i]);\n        }\n        return builder.getBlob(properties.type);\n    }\n}\n\n// This is CommonJS because lie is an external dependency, so Rollup\n// can just ignore it.\nif (typeof Promise === 'undefined') {\n    // In the \"nopromises\" build this will just throw if you don't have\n    // a global promise object, but it would throw anyway later.\n    _dereq_(3);\n}\nvar Promise$1 = Promise;\n\nfunction executeCallback(promise, callback) {\n    if (callback) {\n        promise.then(function (result) {\n            callback(null, result);\n        }, function (error) {\n            callback(error);\n        });\n    }\n}\n\nfunction executeTwoCallbacks(promise, callback, errorCallback) {\n    if (typeof callback === 'function') {\n        promise.then(callback);\n    }\n\n    if (typeof errorCallback === 'function') {\n        promise[\"catch\"](errorCallback);\n    }\n}\n\nfunction normalizeKey(key) {\n    // Cast the key to a string, as that's all we can set as a key.\n    if (typeof key !== 'string') {\n        console.warn(key + ' used as a key, but it is not a string.');\n        key = String(key);\n    }\n\n    return key;\n}\n\nfunction getCallback() {\n    if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n        return arguments[arguments.length - 1];\n    }\n}\n\n// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n\nvar DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\nvar supportsBlobs = void 0;\nvar dbContexts = {};\nvar toString = Object.prototype.toString;\n\n// Transaction Modes\nvar READ_ONLY = 'readonly';\nvar READ_WRITE = 'readwrite';\n\n// Transform a binary string to an array buffer, because otherwise\n// weird stuff happens when you try to work with the binary string directly.\n// It is known.\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction _binStringToArrayBuffer(bin) {\n    var length = bin.length;\n    var buf = new ArrayBuffer(length);\n    var arr = new Uint8Array(buf);\n    for (var i = 0; i < length; i++) {\n        arr[i] = bin.charCodeAt(i);\n    }\n    return buf;\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\n// Code borrowed from PouchDB. See:\n// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n//\nfunction _checkBlobSupportWithoutCaching(idb) {\n    return new Promise$1(function (resolve) {\n        var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE);\n        var blob = createBlob(['']);\n        txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n        txn.onabort = function (e) {\n            // If the transaction aborts now its due to not being able to\n            // write to the database, likely due to the disk being full\n            e.preventDefault();\n            e.stopPropagation();\n            resolve(false);\n        };\n\n        txn.oncomplete = function () {\n            var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n            var matchedEdge = navigator.userAgent.match(/Edge\\//);\n            // MS Edge pretends to be Chrome 42:\n            // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n            resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n        };\n    })[\"catch\"](function () {\n        return false; // error, so assume unsupported\n    });\n}\n\nfunction _checkBlobSupport(idb) {\n    if (typeof supportsBlobs === 'boolean') {\n        return Promise$1.resolve(supportsBlobs);\n    }\n    return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n        supportsBlobs = value;\n        return supportsBlobs;\n    });\n}\n\nfunction _deferReadiness(dbInfo) {\n    var dbContext = dbContexts[dbInfo.name];\n\n    // Create a deferred object representing the current database operation.\n    var deferredOperation = {};\n\n    deferredOperation.promise = new Promise$1(function (resolve, reject) {\n        deferredOperation.resolve = resolve;\n        deferredOperation.reject = reject;\n    });\n\n    // Enqueue the deferred operation.\n    dbContext.deferredOperations.push(deferredOperation);\n\n    // Chain its promise to the database readiness.\n    if (!dbContext.dbReady) {\n        dbContext.dbReady = deferredOperation.promise;\n    } else {\n        dbContext.dbReady = dbContext.dbReady.then(function () {\n            return deferredOperation.promise;\n        });\n    }\n}\n\nfunction _advanceReadiness(dbInfo) {\n    var dbContext = dbContexts[dbInfo.name];\n\n    // Dequeue a deferred operation.\n    var deferredOperation = dbContext.deferredOperations.pop();\n\n    // Resolve its promise (which is part of the database readiness\n    // chain of promises).\n    if (deferredOperation) {\n        deferredOperation.resolve();\n        return deferredOperation.promise;\n    }\n}\n\nfunction _rejectReadiness(dbInfo, err) {\n    var dbContext = dbContexts[dbInfo.name];\n\n    // Dequeue a deferred operation.\n    var deferredOperation = dbContext.deferredOperations.pop();\n\n    // Reject its promise (which is part of the database readiness\n    // chain of promises).\n    if (deferredOperation) {\n        deferredOperation.reject(err);\n        return deferredOperation.promise;\n    }\n}\n\nfunction _getConnection(dbInfo, upgradeNeeded) {\n    return new Promise$1(function (resolve, reject) {\n        dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext();\n\n        if (dbInfo.db) {\n            if (upgradeNeeded) {\n                _deferReadiness(dbInfo);\n                dbInfo.db.close();\n            } else {\n                return resolve(dbInfo.db);\n            }\n        }\n\n        var dbArgs = [dbInfo.name];\n\n        if (upgradeNeeded) {\n            dbArgs.push(dbInfo.version);\n        }\n\n        var openreq = idb.open.apply(idb, dbArgs);\n\n        if (upgradeNeeded) {\n            openreq.onupgradeneeded = function (e) {\n                var db = openreq.result;\n                try {\n                    db.createObjectStore(dbInfo.storeName);\n                    if (e.oldVersion <= 1) {\n                        // Added when support for blob shims was added\n                        db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n                    }\n                } catch (ex) {\n                    if (ex.name === 'ConstraintError') {\n                        console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n                    } else {\n                        throw ex;\n                    }\n                }\n            };\n        }\n\n        openreq.onerror = function (e) {\n            e.preventDefault();\n            reject(openreq.error);\n        };\n\n        openreq.onsuccess = function () {\n            var db = openreq.result;\n            db.onversionchange = function (e) {\n                // Triggered when the database is modified (e.g. adding an objectStore) or\n                // deleted (even when initiated by other sessions in different tabs).\n                // Closing the connection here prevents those operations from being blocked.\n                // If the database is accessed again later by this instance, the connection\n                // will be reopened or the database recreated as needed.\n                e.target.close();\n            };\n            resolve(db);\n            _advanceReadiness(dbInfo);\n        };\n    });\n}\n\nfunction _getOriginalConnection(dbInfo) {\n    return _getConnection(dbInfo, false);\n}\n\nfunction _getUpgradedConnection(dbInfo) {\n    return _getConnection(dbInfo, true);\n}\n\nfunction _isUpgradeNeeded(dbInfo, defaultVersion) {\n    if (!dbInfo.db) {\n        return true;\n    }\n\n    var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n    var isDowngrade = dbInfo.version < dbInfo.db.version;\n    var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n    if (isDowngrade) {\n        // If the version is not the default one\n        // then warn for impossible downgrade.\n        if (dbInfo.version !== defaultVersion) {\n            console.warn('The database \"' + dbInfo.name + '\"' + \" can't be downgraded from version \" + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n        }\n        // Align the versions to prevent errors.\n        dbInfo.version = dbInfo.db.version;\n    }\n\n    if (isUpgrade || isNewStore) {\n        // If the store is new then increment the version (if needed).\n        // This will trigger an \"upgradeneeded\" event which is required\n        // for creating a store.\n        if (isNewStore) {\n            var incVersion = dbInfo.db.version + 1;\n            if (incVersion > dbInfo.version) {\n                dbInfo.version = incVersion;\n            }\n        }\n\n        return true;\n    }\n\n    return false;\n}\n\n// encode a blob for indexeddb engines that don't support blobs\nfunction _encodeBlob(blob) {\n    return new Promise$1(function (resolve, reject) {\n        var reader = new FileReader();\n        reader.onerror = reject;\n        reader.onloadend = function (e) {\n            var base64 = btoa(e.target.result || '');\n            resolve({\n                __local_forage_encoded_blob: true,\n                data: base64,\n                type: blob.type\n            });\n        };\n        reader.readAsBinaryString(blob);\n    });\n}\n\n// decode an encoded blob\nfunction _decodeBlob(encodedBlob) {\n    var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n    return createBlob([arrayBuff], { type: encodedBlob.type });\n}\n\n// is this one of our fancy encoded blobs?\nfunction _isEncodedBlob(value) {\n    return value && value.__local_forage_encoded_blob;\n}\n\n// Specialize the default `ready()` function by making it dependent\n// on the current database operations. Thus, the driver will be actually\n// ready when it's been initialized (default) *and* there are no pending\n// operations on the database (initiated by some other instances).\nfunction _fullyReady(callback) {\n    var self = this;\n\n    var promise = self._initReady().then(function () {\n        var dbContext = dbContexts[self._dbInfo.name];\n\n        if (dbContext && dbContext.dbReady) {\n            return dbContext.dbReady;\n        }\n    });\n\n    executeTwoCallbacks(promise, callback, callback);\n    return promise;\n}\n\n// Try to establish a new db connection to replace the\n// current one which is broken (i.e. experiencing\n// InvalidStateError while creating a transaction).\nfunction _tryReconnect(dbInfo) {\n    _deferReadiness(dbInfo);\n\n    var dbContext = dbContexts[dbInfo.name];\n    var forages = dbContext.forages;\n\n    for (var i = 0; i < forages.length; i++) {\n        var forage = forages[i];\n        if (forage._dbInfo.db) {\n            forage._dbInfo.db.close();\n            forage._dbInfo.db = null;\n        }\n    }\n    dbInfo.db = null;\n\n    return _getOriginalConnection(dbInfo).then(function (db) {\n        dbInfo.db = db;\n        if (_isUpgradeNeeded(dbInfo)) {\n            // Reopen the database for upgrading.\n            return _getUpgradedConnection(dbInfo);\n        }\n        return db;\n    }).then(function (db) {\n        // store the latest db reference\n        // in case the db was upgraded\n        dbInfo.db = dbContext.db = db;\n        for (var i = 0; i < forages.length; i++) {\n            forages[i]._dbInfo.db = db;\n        }\n    })[\"catch\"](function (err) {\n        _rejectReadiness(dbInfo, err);\n        throw err;\n    });\n}\n\n// FF doesn't like Promises (micro-tasks) and IDDB store operations,\n// so we have to do it with callbacks\nfunction createTransaction(dbInfo, mode, callback, retries) {\n    if (retries === undefined) {\n        retries = 1;\n    }\n\n    try {\n        var tx = dbInfo.db.transaction(dbInfo.storeName, mode);\n        callback(null, tx);\n    } catch (err) {\n        if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) {\n            return Promise$1.resolve().then(function () {\n                if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) {\n                    // increase the db version, to create the new ObjectStore\n                    if (dbInfo.db) {\n                        dbInfo.version = dbInfo.db.version + 1;\n                    }\n                    // Reopen the database for upgrading.\n                    return _getUpgradedConnection(dbInfo);\n                }\n            }).then(function () {\n                return _tryReconnect(dbInfo).then(function () {\n                    createTransaction(dbInfo, mode, callback, retries - 1);\n                });\n            })[\"catch\"](callback);\n        }\n\n        callback(err);\n    }\n}\n\nfunction createDbContext() {\n    return {\n        // Running localForages sharing a database.\n        forages: [],\n        // Shared database.\n        db: null,\n        // Database readiness (promise).\n        dbReady: null,\n        // Deferred operations on the database.\n        deferredOperations: []\n    };\n}\n\n// Open the IndexedDB database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage(options) {\n    var self = this;\n    var dbInfo = {\n        db: null\n    };\n\n    if (options) {\n        for (var i in options) {\n            dbInfo[i] = options[i];\n        }\n    }\n\n    // Get the current context of the database;\n    var dbContext = dbContexts[dbInfo.name];\n\n    // ...or create a new context.\n    if (!dbContext) {\n        dbContext = createDbContext();\n        // Register the new context in the global container.\n        dbContexts[dbInfo.name] = dbContext;\n    }\n\n    // Register itself as a running localForage in the current context.\n    dbContext.forages.push(self);\n\n    // Replace the default `ready()` function with the specialized one.\n    if (!self._initReady) {\n        self._initReady = self.ready;\n        self.ready = _fullyReady;\n    }\n\n    // Create an array of initialization states of the related localForages.\n    var initPromises = [];\n\n    function ignoreErrors() {\n        // Don't handle errors here,\n        // just makes sure related localForages aren't pending.\n        return Promise$1.resolve();\n    }\n\n    for (var j = 0; j < dbContext.forages.length; j++) {\n        var forage = dbContext.forages[j];\n        if (forage !== self) {\n            // Don't wait for itself...\n            initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n        }\n    }\n\n    // Take a snapshot of the related localForages.\n    var forages = dbContext.forages.slice(0);\n\n    // Initialize the connection process only when\n    // all the related localForages aren't pending.\n    return Promise$1.all(initPromises).then(function () {\n        dbInfo.db = dbContext.db;\n        // Get the connection or open a new one without upgrade.\n        return _getOriginalConnection(dbInfo);\n    }).then(function (db) {\n        dbInfo.db = db;\n        if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n            // Reopen the database for upgrading.\n            return _getUpgradedConnection(dbInfo);\n        }\n        return db;\n    }).then(function (db) {\n        dbInfo.db = dbContext.db = db;\n        self._dbInfo = dbInfo;\n        // Share the final connection amongst related localForages.\n        for (var k = 0; k < forages.length; k++) {\n            var forage = forages[k];\n            if (forage !== self) {\n                // Self is already up-to-date.\n                forage._dbInfo.db = dbInfo.db;\n                forage._dbInfo.version = dbInfo.version;\n            }\n        }\n    });\n}\n\nfunction getItem(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var req = store.get(key);\n\n                    req.onsuccess = function () {\n                        var value = req.result;\n                        if (value === undefined) {\n                            value = null;\n                        }\n                        if (_isEncodedBlob(value)) {\n                            value = _decodeBlob(value);\n                        }\n                        resolve(value);\n                    };\n\n                    req.onerror = function () {\n                        reject(req.error);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Iterate over all items stored in database.\nfunction iterate(iterator, callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var req = store.openCursor();\n                    var iterationNumber = 1;\n\n                    req.onsuccess = function () {\n                        var cursor = req.result;\n\n                        if (cursor) {\n                            var value = cursor.value;\n                            if (_isEncodedBlob(value)) {\n                                value = _decodeBlob(value);\n                            }\n                            var result = iterator(value, cursor.key, iterationNumber++);\n\n                            // when the iterator callback returns any\n                            // (non-`undefined`) value, then we stop\n                            // the iteration immediately\n                            if (result !== void 0) {\n                                resolve(result);\n                            } else {\n                                cursor[\"continue\"]();\n                            }\n                        } else {\n                            resolve();\n                        }\n                    };\n\n                    req.onerror = function () {\n                        reject(req.error);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n\n    return promise;\n}\n\nfunction setItem(key, value, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        var dbInfo;\n        self.ready().then(function () {\n            dbInfo = self._dbInfo;\n            if (toString.call(value) === '[object Blob]') {\n                return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n                    if (blobSupport) {\n                        return value;\n                    }\n                    return _encodeBlob(value);\n                });\n            }\n            return value;\n        }).then(function (value) {\n            createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n\n                    // The reason we don't _save_ null is because IE 10 does\n                    // not support saving the `null` type in IndexedDB. How\n                    // ironic, given the bug below!\n                    // See: https://github.com/mozilla/localForage/issues/161\n                    if (value === null) {\n                        value = undefined;\n                    }\n\n                    var req = store.put(value, key);\n\n                    transaction.oncomplete = function () {\n                        // Cast to undefined so the value passed to\n                        // callback/promise is the same as what one would get out\n                        // of `getItem()` later. This leads to some weirdness\n                        // (setItem('foo', undefined) will return `null`), but\n                        // it's not my fault localStorage is our baseline and that\n                        // it's weird.\n                        if (value === undefined) {\n                            value = null;\n                        }\n\n                        resolve(value);\n                    };\n                    transaction.onabort = transaction.onerror = function () {\n                        var err = req.error ? req.error : req.transaction.error;\n                        reject(err);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction removeItem(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    // We use a Grunt task to make this safe for IE and some\n                    // versions of Android (including those used by Cordova).\n                    // Normally IE won't like `.delete()` and will insist on\n                    // using `['delete']()`, but we have a build step that\n                    // fixes this for us now.\n                    var req = store[\"delete\"](key);\n                    transaction.oncomplete = function () {\n                        resolve();\n                    };\n\n                    transaction.onerror = function () {\n                        reject(req.error);\n                    };\n\n                    // The request will be also be aborted if we've exceeded our storage\n                    // space.\n                    transaction.onabort = function () {\n                        var err = req.error ? req.error : req.transaction.error;\n                        reject(err);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction clear(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var req = store.clear();\n\n                    transaction.oncomplete = function () {\n                        resolve();\n                    };\n\n                    transaction.onabort = transaction.onerror = function () {\n                        var err = req.error ? req.error : req.transaction.error;\n                        reject(err);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction length(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var req = store.count();\n\n                    req.onsuccess = function () {\n                        resolve(req.result);\n                    };\n\n                    req.onerror = function () {\n                        reject(req.error);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction key(n, callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        if (n < 0) {\n            resolve(null);\n\n            return;\n        }\n\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var advanced = false;\n                    var req = store.openKeyCursor();\n\n                    req.onsuccess = function () {\n                        var cursor = req.result;\n                        if (!cursor) {\n                            // this means there weren't enough keys\n                            resolve(null);\n\n                            return;\n                        }\n\n                        if (n === 0) {\n                            // We have the first key, return it if that's what they\n                            // wanted.\n                            resolve(cursor.key);\n                        } else {\n                            if (!advanced) {\n                                // Otherwise, ask the cursor to skip ahead n\n                                // records.\n                                advanced = true;\n                                cursor.advance(n);\n                            } else {\n                                // When we get here, we've got the nth key.\n                                resolve(cursor.key);\n                            }\n                        }\n                    };\n\n                    req.onerror = function () {\n                        reject(req.error);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction keys(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var req = store.openKeyCursor();\n                    var keys = [];\n\n                    req.onsuccess = function () {\n                        var cursor = req.result;\n\n                        if (!cursor) {\n                            resolve(keys);\n                            return;\n                        }\n\n                        keys.push(cursor.key);\n                        cursor[\"continue\"]();\n                    };\n\n                    req.onerror = function () {\n                        reject(req.error);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction dropInstance(options, callback) {\n    callback = getCallback.apply(this, arguments);\n\n    var currentConfig = this.config();\n    options = typeof options !== 'function' && options || {};\n    if (!options.name) {\n        options.name = options.name || currentConfig.name;\n        options.storeName = options.storeName || currentConfig.storeName;\n    }\n\n    var self = this;\n    var promise;\n    if (!options.name) {\n        promise = Promise$1.reject('Invalid arguments');\n    } else {\n        var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db;\n\n        var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) {\n            var dbContext = dbContexts[options.name];\n            var forages = dbContext.forages;\n            dbContext.db = db;\n            for (var i = 0; i < forages.length; i++) {\n                forages[i]._dbInfo.db = db;\n            }\n            return db;\n        });\n\n        if (!options.storeName) {\n            promise = dbPromise.then(function (db) {\n                _deferReadiness(options);\n\n                var dbContext = dbContexts[options.name];\n                var forages = dbContext.forages;\n\n                db.close();\n                for (var i = 0; i < forages.length; i++) {\n                    var forage = forages[i];\n                    forage._dbInfo.db = null;\n                }\n\n                var dropDBPromise = new Promise$1(function (resolve, reject) {\n                    var req = idb.deleteDatabase(options.name);\n\n                    req.onerror = function () {\n                        var db = req.result;\n                        if (db) {\n                            db.close();\n                        }\n                        reject(req.error);\n                    };\n\n                    req.onblocked = function () {\n                        // Closing all open connections in onversionchange handler should prevent this situation, but if\n                        // we do get here, it just means the request remains pending - eventually it will succeed or error\n                        console.warn('dropInstance blocked for database \"' + options.name + '\" until all open connections are closed');\n                    };\n\n                    req.onsuccess = function () {\n                        var db = req.result;\n                        if (db) {\n                            db.close();\n                        }\n                        resolve(db);\n                    };\n                });\n\n                return dropDBPromise.then(function (db) {\n                    dbContext.db = db;\n                    for (var i = 0; i < forages.length; i++) {\n                        var _forage = forages[i];\n                        _advanceReadiness(_forage._dbInfo);\n                    }\n                })[\"catch\"](function (err) {\n                    (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n                    throw err;\n                });\n            });\n        } else {\n            promise = dbPromise.then(function (db) {\n                if (!db.objectStoreNames.contains(options.storeName)) {\n                    return;\n                }\n\n                var newVersion = db.version + 1;\n\n                _deferReadiness(options);\n\n                var dbContext = dbContexts[options.name];\n                var forages = dbContext.forages;\n\n                db.close();\n                for (var i = 0; i < forages.length; i++) {\n                    var forage = forages[i];\n                    forage._dbInfo.db = null;\n                    forage._dbInfo.version = newVersion;\n                }\n\n                var dropObjectPromise = new Promise$1(function (resolve, reject) {\n                    var req = idb.open(options.name, newVersion);\n\n                    req.onerror = function (err) {\n                        var db = req.result;\n                        db.close();\n                        reject(err);\n                    };\n\n                    req.onupgradeneeded = function () {\n                        var db = req.result;\n                        db.deleteObjectStore(options.storeName);\n                    };\n\n                    req.onsuccess = function () {\n                        var db = req.result;\n                        db.close();\n                        resolve(db);\n                    };\n                });\n\n                return dropObjectPromise.then(function (db) {\n                    dbContext.db = db;\n                    for (var j = 0; j < forages.length; j++) {\n                        var _forage2 = forages[j];\n                        _forage2._dbInfo.db = db;\n                        _advanceReadiness(_forage2._dbInfo);\n                    }\n                })[\"catch\"](function (err) {\n                    (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n                    throw err;\n                });\n            });\n        }\n    }\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nvar asyncStorage = {\n    _driver: 'asyncStorage',\n    _initStorage: _initStorage,\n    _support: isIndexedDBValid(),\n    iterate: iterate,\n    getItem: getItem,\n    setItem: setItem,\n    removeItem: removeItem,\n    clear: clear,\n    length: length,\n    key: key,\n    keys: keys,\n    dropInstance: dropInstance\n};\n\nfunction isWebSQLValid() {\n    return typeof openDatabase === 'function';\n}\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\nvar BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nvar BLOB_TYPE_PREFIX = '~~local_forage_type~';\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\nvar SERIALIZED_MARKER = '__lfsc__:';\nvar SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n// OMG the serializations!\nvar TYPE_ARRAYBUFFER = 'arbf';\nvar TYPE_BLOB = 'blob';\nvar TYPE_INT8ARRAY = 'si08';\nvar TYPE_UINT8ARRAY = 'ui08';\nvar TYPE_UINT8CLAMPEDARRAY = 'uic8';\nvar TYPE_INT16ARRAY = 'si16';\nvar TYPE_INT32ARRAY = 'si32';\nvar TYPE_UINT16ARRAY = 'ur16';\nvar TYPE_UINT32ARRAY = 'ui32';\nvar TYPE_FLOAT32ARRAY = 'fl32';\nvar TYPE_FLOAT64ARRAY = 'fl64';\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n\nvar toString$1 = Object.prototype.toString;\n\nfunction stringToBuffer(serializedString) {\n    // Fill the string into a ArrayBuffer.\n    var bufferLength = serializedString.length * 0.75;\n    var len = serializedString.length;\n    var i;\n    var p = 0;\n    var encoded1, encoded2, encoded3, encoded4;\n\n    if (serializedString[serializedString.length - 1] === '=') {\n        bufferLength--;\n        if (serializedString[serializedString.length - 2] === '=') {\n            bufferLength--;\n        }\n    }\n\n    var buffer = new ArrayBuffer(bufferLength);\n    var bytes = new Uint8Array(buffer);\n\n    for (i = 0; i < len; i += 4) {\n        encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n        encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n        encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n        encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n\n        /*jslint bitwise: true */\n        bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n        bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n        bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n    }\n    return buffer;\n}\n\n// Converts a buffer to a string to store, serialized, in the backend\n// storage library.\nfunction bufferToString(buffer) {\n    // base64-arraybuffer\n    var bytes = new Uint8Array(buffer);\n    var base64String = '';\n    var i;\n\n    for (i = 0; i < bytes.length; i += 3) {\n        /*jslint bitwise: true */\n        base64String += BASE_CHARS[bytes[i] >> 2];\n        base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n        base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n        base64String += BASE_CHARS[bytes[i + 2] & 63];\n    }\n\n    if (bytes.length % 3 === 2) {\n        base64String = base64String.substring(0, base64String.length - 1) + '=';\n    } else if (bytes.length % 3 === 1) {\n        base64String = base64String.substring(0, base64String.length - 2) + '==';\n    }\n\n    return base64String;\n}\n\n// Serialize a value, afterwards executing a callback (which usually\n// instructs the `setItem()` callback/promise to be executed). This is how\n// we store binary data with localStorage.\nfunction serialize(value, callback) {\n    var valueType = '';\n    if (value) {\n        valueType = toString$1.call(value);\n    }\n\n    // Cannot use `value instanceof ArrayBuffer` or such here, as these\n    // checks fail when running the tests using casper.js...\n    //\n    // TODO: See why those tests fail and use a better solution.\n    if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n        // Convert binary arrays to a string and prefix the string with\n        // a special marker.\n        var buffer;\n        var marker = SERIALIZED_MARKER;\n\n        if (value instanceof ArrayBuffer) {\n            buffer = value;\n            marker += TYPE_ARRAYBUFFER;\n        } else {\n            buffer = value.buffer;\n\n            if (valueType === '[object Int8Array]') {\n                marker += TYPE_INT8ARRAY;\n            } else if (valueType === '[object Uint8Array]') {\n                marker += TYPE_UINT8ARRAY;\n            } else if (valueType === '[object Uint8ClampedArray]') {\n                marker += TYPE_UINT8CLAMPEDARRAY;\n            } else if (valueType === '[object Int16Array]') {\n                marker += TYPE_INT16ARRAY;\n            } else if (valueType === '[object Uint16Array]') {\n                marker += TYPE_UINT16ARRAY;\n            } else if (valueType === '[object Int32Array]') {\n                marker += TYPE_INT32ARRAY;\n            } else if (valueType === '[object Uint32Array]') {\n                marker += TYPE_UINT32ARRAY;\n            } else if (valueType === '[object Float32Array]') {\n                marker += TYPE_FLOAT32ARRAY;\n            } else if (valueType === '[object Float64Array]') {\n                marker += TYPE_FLOAT64ARRAY;\n            } else {\n                callback(new Error('Failed to get type for BinaryArray'));\n            }\n        }\n\n        callback(marker + bufferToString(buffer));\n    } else if (valueType === '[object Blob]') {\n        // Conver the blob to a binaryArray and then to a string.\n        var fileReader = new FileReader();\n\n        fileReader.onload = function () {\n            // Backwards-compatible prefix for the blob type.\n            var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n\n            callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n        };\n\n        fileReader.readAsArrayBuffer(value);\n    } else {\n        try {\n            callback(JSON.stringify(value));\n        } catch (e) {\n            console.error(\"Couldn't convert value into a JSON string: \", value);\n\n            callback(null, e);\n        }\n    }\n}\n\n// Deserialize data we've inserted into a value column/field. We place\n// special markers into our strings to mark them as encoded; this isn't\n// as nice as a meta field, but it's the only sane thing we can do whilst\n// keeping localStorage support intact.\n//\n// Oftentimes this will just deserialize JSON content, but if we have a\n// special marker (SERIALIZED_MARKER, defined above), we will extract\n// some kind of arraybuffer/binary data/typed array out of the string.\nfunction deserialize(value) {\n    // If we haven't marked this string as being specially serialized (i.e.\n    // something other than serialized JSON), we can just return it and be\n    // done with it.\n    if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n        return JSON.parse(value);\n    }\n\n    // The following code deals with deserializing some kind of Blob or\n    // TypedArray. First we separate out the type of data we're dealing\n    // with from the data itself.\n    var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n    var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n    var blobType;\n    // Backwards-compatible blob type serialization strategy.\n    // DBs created with older versions of localForage will simply not have the blob type.\n    if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n        var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n        blobType = matcher[1];\n        serializedString = serializedString.substring(matcher[0].length);\n    }\n    var buffer = stringToBuffer(serializedString);\n\n    // Return the right type based on the code/type set during\n    // serialization.\n    switch (type) {\n        case TYPE_ARRAYBUFFER:\n            return buffer;\n        case TYPE_BLOB:\n            return createBlob([buffer], { type: blobType });\n        case TYPE_INT8ARRAY:\n            return new Int8Array(buffer);\n        case TYPE_UINT8ARRAY:\n            return new Uint8Array(buffer);\n        case TYPE_UINT8CLAMPEDARRAY:\n            return new Uint8ClampedArray(buffer);\n        case TYPE_INT16ARRAY:\n            return new Int16Array(buffer);\n        case TYPE_UINT16ARRAY:\n            return new Uint16Array(buffer);\n        case TYPE_INT32ARRAY:\n            return new Int32Array(buffer);\n        case TYPE_UINT32ARRAY:\n            return new Uint32Array(buffer);\n        case TYPE_FLOAT32ARRAY:\n            return new Float32Array(buffer);\n        case TYPE_FLOAT64ARRAY:\n            return new Float64Array(buffer);\n        default:\n            throw new Error('Unkown type: ' + type);\n    }\n}\n\nvar localforageSerializer = {\n    serialize: serialize,\n    deserialize: deserialize,\n    stringToBuffer: stringToBuffer,\n    bufferToString: bufferToString\n};\n\n/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n\nfunction createDbTable(t, dbInfo, callback, errorCallback) {\n    t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback);\n}\n\n// Open the WebSQL database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage$1(options) {\n    var self = this;\n    var dbInfo = {\n        db: null\n    };\n\n    if (options) {\n        for (var i in options) {\n            dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n        }\n    }\n\n    var dbInfoPromise = new Promise$1(function (resolve, reject) {\n        // Open the database; the openDatabase API will automatically\n        // create it for us if it doesn't exist.\n        try {\n            dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n        } catch (e) {\n            return reject(e);\n        }\n\n        // Create our key/value table if it doesn't exist.\n        dbInfo.db.transaction(function (t) {\n            createDbTable(t, dbInfo, function () {\n                self._dbInfo = dbInfo;\n                resolve();\n            }, function (t, error) {\n                reject(error);\n            });\n        }, reject);\n    });\n\n    dbInfo.serializer = localforageSerializer;\n    return dbInfoPromise;\n}\n\nfunction tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) {\n    t.executeSql(sqlStatement, args, callback, function (t, error) {\n        if (error.code === error.SYNTAX_ERR) {\n            t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name = ?\", [dbInfo.storeName], function (t, results) {\n                if (!results.rows.length) {\n                    // if the table is missing (was deleted)\n                    // re-create it table and retry\n                    createDbTable(t, dbInfo, function () {\n                        t.executeSql(sqlStatement, args, callback, errorCallback);\n                    }, errorCallback);\n                } else {\n                    errorCallback(t, error);\n                }\n            }, errorCallback);\n        } else {\n            errorCallback(t, error);\n        }\n    }, errorCallback);\n}\n\nfunction getItem$1(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n                    var result = results.rows.length ? results.rows.item(0).value : null;\n\n                    // Check to see if this is serialized content we need to\n                    // unpack.\n                    if (result) {\n                        result = dbInfo.serializer.deserialize(result);\n                    }\n\n                    resolve(result);\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction iterate$1(iterator, callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n                    var rows = results.rows;\n                    var length = rows.length;\n\n                    for (var i = 0; i < length; i++) {\n                        var item = rows.item(i);\n                        var result = item.value;\n\n                        // Check to see if this is serialized content\n                        // we need to unpack.\n                        if (result) {\n                            result = dbInfo.serializer.deserialize(result);\n                        }\n\n                        result = iterator(result, item.key, i + 1);\n\n                        // void(0) prevents problems with redefinition\n                        // of `undefined`.\n                        if (result !== void 0) {\n                            resolve(result);\n                            return;\n                        }\n                    }\n\n                    resolve();\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction _setItem(key, value, callback, retriesLeft) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            // The localStorage API doesn't return undefined values in an\n            // \"expected\" way, so undefined is always cast to null in all\n            // drivers. See: https://github.com/mozilla/localForage/pull/42\n            if (value === undefined) {\n                value = null;\n            }\n\n            // Save the original value to pass to the callback.\n            var originalValue = value;\n\n            var dbInfo = self._dbInfo;\n            dbInfo.serializer.serialize(value, function (value, error) {\n                if (error) {\n                    reject(error);\n                } else {\n                    dbInfo.db.transaction(function (t) {\n                        tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () {\n                            resolve(originalValue);\n                        }, function (t, error) {\n                            reject(error);\n                        });\n                    }, function (sqlError) {\n                        // The transaction failed; check\n                        // to see if it's a quota error.\n                        if (sqlError.code === sqlError.QUOTA_ERR) {\n                            // We reject the callback outright for now, but\n                            // it's worth trying to re-run the transaction.\n                            // Even if the user accepts the prompt to use\n                            // more storage on Safari, this error will\n                            // be called.\n                            //\n                            // Try to re-run the transaction.\n                            if (retriesLeft > 0) {\n                                resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n                                return;\n                            }\n                            reject(sqlError);\n                        }\n                    });\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction setItem$1(key, value, callback) {\n    return _setItem.apply(this, [key, value, callback, 1]);\n}\n\nfunction removeItem$1(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n                    resolve();\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Deletes every item in the table.\n// TODO: Find out if this resets the AUTO_INCREMENT number.\nfunction clear$1(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () {\n                    resolve();\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Does a simple `COUNT(key)` to get the number of items stored in\n// localForage.\nfunction length$1(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                // Ahhh, SQL makes this one soooooo easy.\n                tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n                    var result = results.rows.item(0).c;\n                    resolve(result);\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Return the key located at key index X; essentially gets the key from a\n// `WHERE id = ?`. This is the most efficient way I can think to implement\n// this rarely-used (in my experience) part of the API, but it can seem\n// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n// the ID of each key will change every time it's updated. Perhaps a stored\n// procedure for the `setItem()` SQL would solve this problem?\n// TODO: Don't change ID on `setItem()`.\nfunction key$1(n, callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n                    var result = results.rows.length ? results.rows.item(0).key : null;\n                    resolve(result);\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction keys$1(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n                    var keys = [];\n\n                    for (var i = 0; i < results.rows.length; i++) {\n                        keys.push(results.rows.item(i).key);\n                    }\n\n                    resolve(keys);\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// https://www.w3.org/TR/webdatabase/#databases\n// > There is no way to enumerate or delete the databases available for an origin from this API.\nfunction getAllStoreNames(db) {\n    return new Promise$1(function (resolve, reject) {\n        db.transaction(function (t) {\n            t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'\", [], function (t, results) {\n                var storeNames = [];\n\n                for (var i = 0; i < results.rows.length; i++) {\n                    storeNames.push(results.rows.item(i).name);\n                }\n\n                resolve({\n                    db: db,\n                    storeNames: storeNames\n                });\n            }, function (t, error) {\n                reject(error);\n            });\n        }, function (sqlError) {\n            reject(sqlError);\n        });\n    });\n}\n\nfunction dropInstance$1(options, callback) {\n    callback = getCallback.apply(this, arguments);\n\n    var currentConfig = this.config();\n    options = typeof options !== 'function' && options || {};\n    if (!options.name) {\n        options.name = options.name || currentConfig.name;\n        options.storeName = options.storeName || currentConfig.storeName;\n    }\n\n    var self = this;\n    var promise;\n    if (!options.name) {\n        promise = Promise$1.reject('Invalid arguments');\n    } else {\n        promise = new Promise$1(function (resolve) {\n            var db;\n            if (options.name === currentConfig.name) {\n                // use the db reference of the current instance\n                db = self._dbInfo.db;\n            } else {\n                db = openDatabase(options.name, '', '', 0);\n            }\n\n            if (!options.storeName) {\n                // drop all database tables\n                resolve(getAllStoreNames(db));\n            } else {\n                resolve({\n                    db: db,\n                    storeNames: [options.storeName]\n                });\n            }\n        }).then(function (operationInfo) {\n            return new Promise$1(function (resolve, reject) {\n                operationInfo.db.transaction(function (t) {\n                    function dropTable(storeName) {\n                        return new Promise$1(function (resolve, reject) {\n                            t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () {\n                                resolve();\n                            }, function (t, error) {\n                                reject(error);\n                            });\n                        });\n                    }\n\n                    var operations = [];\n                    for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) {\n                        operations.push(dropTable(operationInfo.storeNames[i]));\n                    }\n\n                    Promise$1.all(operations).then(function () {\n                        resolve();\n                    })[\"catch\"](function (e) {\n                        reject(e);\n                    });\n                }, function (sqlError) {\n                    reject(sqlError);\n                });\n            });\n        });\n    }\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nvar webSQLStorage = {\n    _driver: 'webSQLStorage',\n    _initStorage: _initStorage$1,\n    _support: isWebSQLValid(),\n    iterate: iterate$1,\n    getItem: getItem$1,\n    setItem: setItem$1,\n    removeItem: removeItem$1,\n    clear: clear$1,\n    length: length$1,\n    key: key$1,\n    keys: keys$1,\n    dropInstance: dropInstance$1\n};\n\nfunction isLocalStorageValid() {\n    try {\n        return typeof localStorage !== 'undefined' && 'setItem' in localStorage &&\n        // in IE8 typeof localStorage.setItem === 'object'\n        !!localStorage.setItem;\n    } catch (e) {\n        return false;\n    }\n}\n\nfunction _getKeyPrefix(options, defaultConfig) {\n    var keyPrefix = options.name + '/';\n\n    if (options.storeName !== defaultConfig.storeName) {\n        keyPrefix += options.storeName + '/';\n    }\n    return keyPrefix;\n}\n\n// Check if localStorage throws when saving an item\nfunction checkIfLocalStorageThrows() {\n    var localStorageTestKey = '_localforage_support_test';\n\n    try {\n        localStorage.setItem(localStorageTestKey, true);\n        localStorage.removeItem(localStorageTestKey);\n\n        return false;\n    } catch (e) {\n        return true;\n    }\n}\n\n// Check if localStorage is usable and allows to save an item\n// This method checks if localStorage is usable in Safari Private Browsing\n// mode, or in any other case where the available quota for localStorage\n// is 0 and there wasn't any saved items yet.\nfunction _isLocalStorageUsable() {\n    return !checkIfLocalStorageThrows() || localStorage.length > 0;\n}\n\n// Config the localStorage backend, using options set in the config.\nfunction _initStorage$2(options) {\n    var self = this;\n    var dbInfo = {};\n    if (options) {\n        for (var i in options) {\n            dbInfo[i] = options[i];\n        }\n    }\n\n    dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig);\n\n    if (!_isLocalStorageUsable()) {\n        return Promise$1.reject();\n    }\n\n    self._dbInfo = dbInfo;\n    dbInfo.serializer = localforageSerializer;\n\n    return Promise$1.resolve();\n}\n\n// Remove all keys from the datastore, effectively destroying all data in\n// the app's key/value store!\nfunction clear$2(callback) {\n    var self = this;\n    var promise = self.ready().then(function () {\n        var keyPrefix = self._dbInfo.keyPrefix;\n\n        for (var i = localStorage.length - 1; i >= 0; i--) {\n            var key = localStorage.key(i);\n\n            if (key.indexOf(keyPrefix) === 0) {\n                localStorage.removeItem(key);\n            }\n        }\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Retrieve an item from the store. Unlike the original async_storage\n// library in Gaia, we don't modify return values at all. If a key's value\n// is `undefined`, we pass that value to the callback function.\nfunction getItem$2(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = self.ready().then(function () {\n        var dbInfo = self._dbInfo;\n        var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n        // If a result was found, parse it from the serialized\n        // string into a JS object. If result isn't truthy, the key\n        // is likely undefined and we'll pass it straight to the\n        // callback.\n        if (result) {\n            result = dbInfo.serializer.deserialize(result);\n        }\n\n        return result;\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Iterate over all items in the store.\nfunction iterate$2(iterator, callback) {\n    var self = this;\n\n    var promise = self.ready().then(function () {\n        var dbInfo = self._dbInfo;\n        var keyPrefix = dbInfo.keyPrefix;\n        var keyPrefixLength = keyPrefix.length;\n        var length = localStorage.length;\n\n        // We use a dedicated iterator instead of the `i` variable below\n        // so other keys we fetch in localStorage aren't counted in\n        // the `iterationNumber` argument passed to the `iterate()`\n        // callback.\n        //\n        // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n        var iterationNumber = 1;\n\n        for (var i = 0; i < length; i++) {\n            var key = localStorage.key(i);\n            if (key.indexOf(keyPrefix) !== 0) {\n                continue;\n            }\n            var value = localStorage.getItem(key);\n\n            // If a result was found, parse it from the serialized\n            // string into a JS object. If result isn't truthy, the\n            // key is likely undefined and we'll pass it straight\n            // to the iterator.\n            if (value) {\n                value = dbInfo.serializer.deserialize(value);\n            }\n\n            value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n            if (value !== void 0) {\n                return value;\n            }\n        }\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Same as localStorage's key() method, except takes a callback.\nfunction key$2(n, callback) {\n    var self = this;\n    var promise = self.ready().then(function () {\n        var dbInfo = self._dbInfo;\n        var result;\n        try {\n            result = localStorage.key(n);\n        } catch (error) {\n            result = null;\n        }\n\n        // Remove the prefix from the key, if a key is found.\n        if (result) {\n            result = result.substring(dbInfo.keyPrefix.length);\n        }\n\n        return result;\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction keys$2(callback) {\n    var self = this;\n    var promise = self.ready().then(function () {\n        var dbInfo = self._dbInfo;\n        var length = localStorage.length;\n        var keys = [];\n\n        for (var i = 0; i < length; i++) {\n            var itemKey = localStorage.key(i);\n            if (itemKey.indexOf(dbInfo.keyPrefix) === 0) {\n                keys.push(itemKey.substring(dbInfo.keyPrefix.length));\n            }\n        }\n\n        return keys;\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Supply the number of keys in the datastore to the callback function.\nfunction length$2(callback) {\n    var self = this;\n    var promise = self.keys().then(function (keys) {\n        return keys.length;\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Remove an item from the store, nice and simple.\nfunction removeItem$2(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = self.ready().then(function () {\n        var dbInfo = self._dbInfo;\n        localStorage.removeItem(dbInfo.keyPrefix + key);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Set a key's value and run an optional callback once the value is set.\n// Unlike Gaia's implementation, the callback function is passed the value,\n// in case you want to operate on that value only after you're sure it\n// saved, or something like that.\nfunction setItem$2(key, value, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = self.ready().then(function () {\n        // Convert undefined values to null.\n        // https://github.com/mozilla/localForage/pull/42\n        if (value === undefined) {\n            value = null;\n        }\n\n        // Save the original value to pass to the callback.\n        var originalValue = value;\n\n        return new Promise$1(function (resolve, reject) {\n            var dbInfo = self._dbInfo;\n            dbInfo.serializer.serialize(value, function (value, error) {\n                if (error) {\n                    reject(error);\n                } else {\n                    try {\n                        localStorage.setItem(dbInfo.keyPrefix + key, value);\n                        resolve(originalValue);\n                    } catch (e) {\n                        // localStorage capacity exceeded.\n                        // TODO: Make this a specific error/event.\n                        if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n                            reject(e);\n                        }\n                        reject(e);\n                    }\n                }\n            });\n        });\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction dropInstance$2(options, callback) {\n    callback = getCallback.apply(this, arguments);\n\n    options = typeof options !== 'function' && options || {};\n    if (!options.name) {\n        var currentConfig = this.config();\n        options.name = options.name || currentConfig.name;\n        options.storeName = options.storeName || currentConfig.storeName;\n    }\n\n    var self = this;\n    var promise;\n    if (!options.name) {\n        promise = Promise$1.reject('Invalid arguments');\n    } else {\n        promise = new Promise$1(function (resolve) {\n            if (!options.storeName) {\n                resolve(options.name + '/');\n            } else {\n                resolve(_getKeyPrefix(options, self._defaultConfig));\n            }\n        }).then(function (keyPrefix) {\n            for (var i = localStorage.length - 1; i >= 0; i--) {\n                var key = localStorage.key(i);\n\n                if (key.indexOf(keyPrefix) === 0) {\n                    localStorage.removeItem(key);\n                }\n            }\n        });\n    }\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nvar localStorageWrapper = {\n    _driver: 'localStorageWrapper',\n    _initStorage: _initStorage$2,\n    _support: isLocalStorageValid(),\n    iterate: iterate$2,\n    getItem: getItem$2,\n    setItem: setItem$2,\n    removeItem: removeItem$2,\n    clear: clear$2,\n    length: length$2,\n    key: key$2,\n    keys: keys$2,\n    dropInstance: dropInstance$2\n};\n\nvar sameValue = function sameValue(x, y) {\n    return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n};\n\nvar includes = function includes(array, searchElement) {\n    var len = array.length;\n    var i = 0;\n    while (i < len) {\n        if (sameValue(array[i], searchElement)) {\n            return true;\n        }\n        i++;\n    }\n\n    return false;\n};\n\nvar isArray = Array.isArray || function (arg) {\n    return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\n// Drivers are stored here when `defineDriver()` is called.\n// They are shared across all instances of localForage.\nvar DefinedDrivers = {};\n\nvar DriverSupport = {};\n\nvar DefaultDrivers = {\n    INDEXEDDB: asyncStorage,\n    WEBSQL: webSQLStorage,\n    LOCALSTORAGE: localStorageWrapper\n};\n\nvar DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver];\n\nvar OptionalDriverMethods = ['dropInstance'];\n\nvar LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods);\n\nvar DefaultConfig = {\n    description: '',\n    driver: DefaultDriverOrder.slice(),\n    name: 'localforage',\n    // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n    // we can use without a prompt.\n    size: 4980736,\n    storeName: 'keyvaluepairs',\n    version: 1.0\n};\n\nfunction callWhenReady(localForageInstance, libraryMethod) {\n    localForageInstance[libraryMethod] = function () {\n        var _args = arguments;\n        return localForageInstance.ready().then(function () {\n            return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n        });\n    };\n}\n\nfunction extend() {\n    for (var i = 1; i < arguments.length; i++) {\n        var arg = arguments[i];\n\n        if (arg) {\n            for (var _key in arg) {\n                if (arg.hasOwnProperty(_key)) {\n                    if (isArray(arg[_key])) {\n                        arguments[0][_key] = arg[_key].slice();\n                    } else {\n                        arguments[0][_key] = arg[_key];\n                    }\n                }\n            }\n        }\n    }\n\n    return arguments[0];\n}\n\nvar LocalForage = function () {\n    function LocalForage(options) {\n        _classCallCheck(this, LocalForage);\n\n        for (var driverTypeKey in DefaultDrivers) {\n            if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {\n                var driver = DefaultDrivers[driverTypeKey];\n                var driverName = driver._driver;\n                this[driverTypeKey] = driverName;\n\n                if (!DefinedDrivers[driverName]) {\n                    // we don't need to wait for the promise,\n                    // since the default drivers can be defined\n                    // in a blocking manner\n                    this.defineDriver(driver);\n                }\n            }\n        }\n\n        this._defaultConfig = extend({}, DefaultConfig);\n        this._config = extend({}, this._defaultConfig, options);\n        this._driverSet = null;\n        this._initDriver = null;\n        this._ready = false;\n        this._dbInfo = null;\n\n        this._wrapLibraryMethodsWithReady();\n        this.setDriver(this._config.driver)[\"catch\"](function () {});\n    }\n\n    // Set any config values for localForage; can be called anytime before\n    // the first API call (e.g. `getItem`, `setItem`).\n    // We loop through options so we don't overwrite existing config\n    // values.\n\n\n    LocalForage.prototype.config = function config(options) {\n        // If the options argument is an object, we use it to set values.\n        // Otherwise, we return either a specified config value or all\n        // config values.\n        if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n            // If localforage is ready and fully initialized, we can't set\n            // any new configuration values. Instead, we return an error.\n            if (this._ready) {\n                return new Error(\"Can't call config() after localforage \" + 'has been used.');\n            }\n\n            for (var i in options) {\n                if (i === 'storeName') {\n                    options[i] = options[i].replace(/\\W/g, '_');\n                }\n\n                if (i === 'version' && typeof options[i] !== 'number') {\n                    return new Error('Database version must be a number.');\n                }\n\n                this._config[i] = options[i];\n            }\n\n            // after all config options are set and\n            // the driver option is used, try setting it\n            if ('driver' in options && options.driver) {\n                return this.setDriver(this._config.driver);\n            }\n\n            return true;\n        } else if (typeof options === 'string') {\n            return this._config[options];\n        } else {\n            return this._config;\n        }\n    };\n\n    // Used to define a custom driver, shared across all instances of\n    // localForage.\n\n\n    LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n        var promise = new Promise$1(function (resolve, reject) {\n            try {\n                var driverName = driverObject._driver;\n                var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver');\n\n                // A driver name should be defined and not overlap with the\n                // library-defined, default drivers.\n                if (!driverObject._driver) {\n                    reject(complianceError);\n                    return;\n                }\n\n                var driverMethods = LibraryMethods.concat('_initStorage');\n                for (var i = 0, len = driverMethods.length; i < len; i++) {\n                    var driverMethodName = driverMethods[i];\n\n                    // when the property is there,\n                    // it should be a method even when optional\n                    var isRequired = !includes(OptionalDriverMethods, driverMethodName);\n                    if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') {\n                        reject(complianceError);\n                        return;\n                    }\n                }\n\n                var configureMissingMethods = function configureMissingMethods() {\n                    var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) {\n                        return function () {\n                            var error = new Error('Method ' + methodName + ' is not implemented by the current driver');\n                            var promise = Promise$1.reject(error);\n                            executeCallback(promise, arguments[arguments.length - 1]);\n                            return promise;\n                        };\n                    };\n\n                    for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {\n                        var optionalDriverMethod = OptionalDriverMethods[_i];\n                        if (!driverObject[optionalDriverMethod]) {\n                            driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod);\n                        }\n                    }\n                };\n\n                configureMissingMethods();\n\n                var setDriverSupport = function setDriverSupport(support) {\n                    if (DefinedDrivers[driverName]) {\n                        console.info('Redefining LocalForage driver: ' + driverName);\n                    }\n                    DefinedDrivers[driverName] = driverObject;\n                    DriverSupport[driverName] = support;\n                    // don't use a then, so that we can define\n                    // drivers that have simple _support methods\n                    // in a blocking manner\n                    resolve();\n                };\n\n                if ('_support' in driverObject) {\n                    if (driverObject._support && typeof driverObject._support === 'function') {\n                        driverObject._support().then(setDriverSupport, reject);\n                    } else {\n                        setDriverSupport(!!driverObject._support);\n                    }\n                } else {\n                    setDriverSupport(true);\n                }\n            } catch (e) {\n                reject(e);\n            }\n        });\n\n        executeTwoCallbacks(promise, callback, errorCallback);\n        return promise;\n    };\n\n    LocalForage.prototype.driver = function driver() {\n        return this._driver || null;\n    };\n\n    LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n        var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.'));\n\n        executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n        return getDriverPromise;\n    };\n\n    LocalForage.prototype.getSerializer = function getSerializer(callback) {\n        var serializerPromise = Promise$1.resolve(localforageSerializer);\n        executeTwoCallbacks(serializerPromise, callback);\n        return serializerPromise;\n    };\n\n    LocalForage.prototype.ready = function ready(callback) {\n        var self = this;\n\n        var promise = self._driverSet.then(function () {\n            if (self._ready === null) {\n                self._ready = self._initDriver();\n            }\n\n            return self._ready;\n        });\n\n        executeTwoCallbacks(promise, callback, callback);\n        return promise;\n    };\n\n    LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n        var self = this;\n\n        if (!isArray(drivers)) {\n            drivers = [drivers];\n        }\n\n        var supportedDrivers = this._getSupportedDrivers(drivers);\n\n        function setDriverToConfig() {\n            self._config.driver = self.driver();\n        }\n\n        function extendSelfWithDriver(driver) {\n            self._extend(driver);\n            setDriverToConfig();\n\n            self._ready = self._initStorage(self._config);\n            return self._ready;\n        }\n\n        function initDriver(supportedDrivers) {\n            return function () {\n                var currentDriverIndex = 0;\n\n                function driverPromiseLoop() {\n                    while (currentDriverIndex < supportedDrivers.length) {\n                        var driverName = supportedDrivers[currentDriverIndex];\n                        currentDriverIndex++;\n\n                        self._dbInfo = null;\n                        self._ready = null;\n\n                        return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n                    }\n\n                    setDriverToConfig();\n                    var error = new Error('No available storage method found.');\n                    self._driverSet = Promise$1.reject(error);\n                    return self._driverSet;\n                }\n\n                return driverPromiseLoop();\n            };\n        }\n\n        // There might be a driver initialization in progress\n        // so wait for it to finish in order to avoid a possible\n        // race condition to set _dbInfo\n        var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n            return Promise$1.resolve();\n        }) : Promise$1.resolve();\n\n        this._driverSet = oldDriverSetDone.then(function () {\n            var driverName = supportedDrivers[0];\n            self._dbInfo = null;\n            self._ready = null;\n\n            return self.getDriver(driverName).then(function (driver) {\n                self._driver = driver._driver;\n                setDriverToConfig();\n                self._wrapLibraryMethodsWithReady();\n                self._initDriver = initDriver(supportedDrivers);\n            });\n        })[\"catch\"](function () {\n            setDriverToConfig();\n            var error = new Error('No available storage method found.');\n            self._driverSet = Promise$1.reject(error);\n            return self._driverSet;\n        });\n\n        executeTwoCallbacks(this._driverSet, callback, errorCallback);\n        return this._driverSet;\n    };\n\n    LocalForage.prototype.supports = function supports(driverName) {\n        return !!DriverSupport[driverName];\n    };\n\n    LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n        extend(this, libraryMethodsAndProperties);\n    };\n\n    LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n        var supportedDrivers = [];\n        for (var i = 0, len = drivers.length; i < len; i++) {\n            var driverName = drivers[i];\n            if (this.supports(driverName)) {\n                supportedDrivers.push(driverName);\n            }\n        }\n        return supportedDrivers;\n    };\n\n    LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n        // Add a stub for each driver API method that delays the call to the\n        // corresponding driver method until localForage is ready. These stubs\n        // will be replaced by the driver methods as soon as the driver is\n        // loaded, so there is no performance impact.\n        for (var i = 0, len = LibraryMethods.length; i < len; i++) {\n            callWhenReady(this, LibraryMethods[i]);\n        }\n    };\n\n    LocalForage.prototype.createInstance = function createInstance(options) {\n        return new LocalForage(options);\n    };\n\n    return LocalForage;\n}();\n\n// The actual localForage object that we expose as a module or via a\n// global. It's extended by pulling in one of our other libraries.\n\n\nvar localforage_js = new LocalForage();\n\nmodule.exports = localforage_js;\n\n},{\"3\":3}]},{},[4])(4)\n});\n","(typeof navigator !== \"undefined\") && (function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.lottie = factory());\n})(this, (function () { 'use strict';\n\n  var svgNS = 'http://www.w3.org/2000/svg';\n  var locationHref = '';\n  var _useWebWorker = false;\n  var initialDefaultFrame = -999999;\n\n  var setWebWorker = function setWebWorker(flag) {\n    _useWebWorker = !!flag;\n  };\n\n  var getWebWorker = function getWebWorker() {\n    return _useWebWorker;\n  };\n\n  var setLocationHref = function setLocationHref(value) {\n    locationHref = value;\n  };\n\n  var getLocationHref = function getLocationHref() {\n    return locationHref;\n  };\n\n  function createTag(type) {\n    // return {appendChild:function(){},setAttribute:function(){},style:{}}\n    return document.createElement(type);\n  }\n\n  function extendPrototype(sources, destination) {\n    var i;\n    var len = sources.length;\n    var sourcePrototype;\n\n    for (i = 0; i < len; i += 1) {\n      sourcePrototype = sources[i].prototype;\n\n      for (var attr in sourcePrototype) {\n        if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr];\n      }\n    }\n  }\n\n  function getDescriptor(object, prop) {\n    return Object.getOwnPropertyDescriptor(object, prop);\n  }\n\n  function createProxyFunction(prototype) {\n    function ProxyFunction() {}\n\n    ProxyFunction.prototype = prototype;\n    return ProxyFunction;\n  }\n\n  // import Howl from '../../3rd_party/howler';\n  var audioControllerFactory = function () {\n    function AudioController(audioFactory) {\n      this.audios = [];\n      this.audioFactory = audioFactory;\n      this._volume = 1;\n      this._isMuted = false;\n    }\n\n    AudioController.prototype = {\n      addAudio: function addAudio(audio) {\n        this.audios.push(audio);\n      },\n      pause: function pause() {\n        var i;\n        var len = this.audios.length;\n\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].pause();\n        }\n      },\n      resume: function resume() {\n        var i;\n        var len = this.audios.length;\n\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].resume();\n        }\n      },\n      setRate: function setRate(rateValue) {\n        var i;\n        var len = this.audios.length;\n\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].setRate(rateValue);\n        }\n      },\n      createAudio: function createAudio(assetPath) {\n        if (this.audioFactory) {\n          return this.audioFactory(assetPath);\n        }\n\n        if (window.Howl) {\n          return new window.Howl({\n            src: [assetPath]\n          });\n        }\n\n        return {\n          isPlaying: false,\n          play: function play() {\n            this.isPlaying = true;\n          },\n          seek: function seek() {\n            this.isPlaying = false;\n          },\n          playing: function playing() {},\n          rate: function rate() {},\n          setVolume: function setVolume() {}\n        };\n      },\n      setAudioFactory: function setAudioFactory(audioFactory) {\n        this.audioFactory = audioFactory;\n      },\n      setVolume: function setVolume(value) {\n        this._volume = value;\n\n        this._updateVolume();\n      },\n      mute: function mute() {\n        this._isMuted = true;\n\n        this._updateVolume();\n      },\n      unmute: function unmute() {\n        this._isMuted = false;\n\n        this._updateVolume();\n      },\n      getVolume: function getVolume() {\n        return this._volume;\n      },\n      _updateVolume: function _updateVolume() {\n        var i;\n        var len = this.audios.length;\n\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1));\n        }\n      }\n    };\n    return function () {\n      return new AudioController();\n    };\n  }();\n\n  var createTypedArray = function () {\n    function createRegularArray(type, len) {\n      var i = 0;\n      var arr = [];\n      var value;\n\n      switch (type) {\n        case 'int16':\n        case 'uint8c':\n          value = 1;\n          break;\n\n        default:\n          value = 1.1;\n          break;\n      }\n\n      for (i = 0; i < len; i += 1) {\n        arr.push(value);\n      }\n\n      return arr;\n    }\n\n    function createTypedArrayFactory(type, len) {\n      if (type === 'float32') {\n        return new Float32Array(len);\n      }\n\n      if (type === 'int16') {\n        return new Int16Array(len);\n      }\n\n      if (type === 'uint8c') {\n        return new Uint8ClampedArray(len);\n      }\n\n      return createRegularArray(type, len);\n    }\n\n    if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {\n      return createTypedArrayFactory;\n    }\n\n    return createRegularArray;\n  }();\n\n  function createSizedArray(len) {\n    return Array.apply(null, {\n      length: len\n    });\n  }\n\n  function _typeof$6(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$6 = function _typeof(obj) { return typeof obj; }; } else { _typeof$6 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$6(obj); }\n  var subframeEnabled = true;\n  var expressionsPlugin = null;\n  var expressionsInterfaces = null;\n  var idPrefix$1 = '';\n  var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n  var _shouldRoundValues = false;\n  var bmPow = Math.pow;\n  var bmSqrt = Math.sqrt;\n  var bmFloor = Math.floor;\n  var bmMax = Math.max;\n  var bmMin = Math.min;\n  var BMMath = {};\n\n  (function () {\n    var propertyNames = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'atan2', 'ceil', 'cbrt', 'expm1', 'clz32', 'cos', 'cosh', 'exp', 'floor', 'fround', 'hypot', 'imul', 'log', 'log1p', 'log2', 'log10', 'max', 'min', 'pow', 'random', 'round', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc', 'E', 'LN10', 'LN2', 'LOG10E', 'LOG2E', 'PI', 'SQRT1_2', 'SQRT2'];\n    var i;\n    var len = propertyNames.length;\n\n    for (i = 0; i < len; i += 1) {\n      BMMath[propertyNames[i]] = Math[propertyNames[i]];\n    }\n  })();\n\n  function ProjectInterface$1() {\n    return {};\n  }\n\n  BMMath.random = Math.random;\n\n  BMMath.abs = function (val) {\n    var tOfVal = _typeof$6(val);\n\n    if (tOfVal === 'object' && val.length) {\n      var absArr = createSizedArray(val.length);\n      var i;\n      var len = val.length;\n\n      for (i = 0; i < len; i += 1) {\n        absArr[i] = Math.abs(val[i]);\n      }\n\n      return absArr;\n    }\n\n    return Math.abs(val);\n  };\n\n  var defaultCurveSegments = 150;\n  var degToRads = Math.PI / 180;\n  var roundCorner = 0.5519;\n\n  function roundValues(flag) {\n    _shouldRoundValues = !!flag;\n  }\n\n  function bmRnd(value) {\n    if (_shouldRoundValues) {\n      return Math.round(value);\n    }\n\n    return value;\n  }\n\n  function styleDiv(element) {\n    element.style.position = 'absolute';\n    element.style.top = 0;\n    element.style.left = 0;\n    element.style.display = 'block';\n    element.style.transformOrigin = '0 0';\n    element.style.webkitTransformOrigin = '0 0';\n    element.style.backfaceVisibility = 'visible';\n    element.style.webkitBackfaceVisibility = 'visible';\n    element.style.transformStyle = 'preserve-3d';\n    element.style.webkitTransformStyle = 'preserve-3d';\n    element.style.mozTransformStyle = 'preserve-3d';\n  }\n\n  function BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) {\n    this.type = type;\n    this.currentTime = currentTime;\n    this.totalTime = totalTime;\n    this.direction = frameMultiplier < 0 ? -1 : 1;\n  }\n\n  function BMCompleteEvent(type, frameMultiplier) {\n    this.type = type;\n    this.direction = frameMultiplier < 0 ? -1 : 1;\n  }\n\n  function BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) {\n    this.type = type;\n    this.currentLoop = currentLoop;\n    this.totalLoops = totalLoops;\n    this.direction = frameMultiplier < 0 ? -1 : 1;\n  }\n\n  function BMSegmentStartEvent(type, firstFrame, totalFrames) {\n    this.type = type;\n    this.firstFrame = firstFrame;\n    this.totalFrames = totalFrames;\n  }\n\n  function BMDestroyEvent(type, target) {\n    this.type = type;\n    this.target = target;\n  }\n\n  function BMRenderFrameErrorEvent(nativeError, currentTime) {\n    this.type = 'renderFrameError';\n    this.nativeError = nativeError;\n    this.currentTime = currentTime;\n  }\n\n  function BMConfigErrorEvent(nativeError) {\n    this.type = 'configError';\n    this.nativeError = nativeError;\n  }\n\n  function BMAnimationConfigErrorEvent(type, nativeError) {\n    this.type = type;\n    this.nativeError = nativeError;\n  }\n\n  var createElementID = function () {\n    var _count = 0;\n    return function createID() {\n      _count += 1;\n      return idPrefix$1 + '__lottie_element_' + _count;\n    };\n  }();\n\n  function HSVtoRGB(h, s, v) {\n    var r;\n    var g;\n    var b;\n    var i;\n    var f;\n    var p;\n    var q;\n    var t;\n    i = Math.floor(h * 6);\n    f = h * 6 - i;\n    p = v * (1 - s);\n    q = v * (1 - f * s);\n    t = v * (1 - (1 - f) * s);\n\n    switch (i % 6) {\n      case 0:\n        r = v;\n        g = t;\n        b = p;\n        break;\n\n      case 1:\n        r = q;\n        g = v;\n        b = p;\n        break;\n\n      case 2:\n        r = p;\n        g = v;\n        b = t;\n        break;\n\n      case 3:\n        r = p;\n        g = q;\n        b = v;\n        break;\n\n      case 4:\n        r = t;\n        g = p;\n        b = v;\n        break;\n\n      case 5:\n        r = v;\n        g = p;\n        b = q;\n        break;\n\n      default:\n        break;\n    }\n\n    return [r, g, b];\n  }\n\n  function RGBtoHSV(r, g, b) {\n    var max = Math.max(r, g, b);\n    var min = Math.min(r, g, b);\n    var d = max - min;\n    var h;\n    var s = max === 0 ? 0 : d / max;\n    var v = max / 255;\n\n    switch (max) {\n      case min:\n        h = 0;\n        break;\n\n      case r:\n        h = g - b + d * (g < b ? 6 : 0);\n        h /= 6 * d;\n        break;\n\n      case g:\n        h = b - r + d * 2;\n        h /= 6 * d;\n        break;\n\n      case b:\n        h = r - g + d * 4;\n        h /= 6 * d;\n        break;\n\n      default:\n        break;\n    }\n\n    return [h, s, v];\n  }\n\n  function addSaturationToRGB(color, offset) {\n    var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n    hsv[1] += offset;\n\n    if (hsv[1] > 1) {\n      hsv[1] = 1;\n    } else if (hsv[1] <= 0) {\n      hsv[1] = 0;\n    }\n\n    return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n  }\n\n  function addBrightnessToRGB(color, offset) {\n    var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n    hsv[2] += offset;\n\n    if (hsv[2] > 1) {\n      hsv[2] = 1;\n    } else if (hsv[2] < 0) {\n      hsv[2] = 0;\n    }\n\n    return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n  }\n\n  function addHueToRGB(color, offset) {\n    var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n    hsv[0] += offset / 360;\n\n    if (hsv[0] > 1) {\n      hsv[0] -= 1;\n    } else if (hsv[0] < 0) {\n      hsv[0] += 1;\n    }\n\n    return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n  }\n\n  var rgbToHex = function () {\n    var colorMap = [];\n    var i;\n    var hex;\n\n    for (i = 0; i < 256; i += 1) {\n      hex = i.toString(16);\n      colorMap[i] = hex.length === 1 ? '0' + hex : hex;\n    }\n\n    return function (r, g, b) {\n      if (r < 0) {\n        r = 0;\n      }\n\n      if (g < 0) {\n        g = 0;\n      }\n\n      if (b < 0) {\n        b = 0;\n      }\n\n      return '#' + colorMap[r] + colorMap[g] + colorMap[b];\n    };\n  }();\n\n  var setSubframeEnabled = function setSubframeEnabled(flag) {\n    subframeEnabled = !!flag;\n  };\n\n  var getSubframeEnabled = function getSubframeEnabled() {\n    return subframeEnabled;\n  };\n\n  var setExpressionsPlugin = function setExpressionsPlugin(value) {\n    expressionsPlugin = value;\n  };\n\n  var getExpressionsPlugin = function getExpressionsPlugin() {\n    return expressionsPlugin;\n  };\n\n  var setExpressionInterfaces = function setExpressionInterfaces(value) {\n    expressionsInterfaces = value;\n  };\n\n  var getExpressionInterfaces = function getExpressionInterfaces() {\n    return expressionsInterfaces;\n  };\n\n  var setDefaultCurveSegments = function setDefaultCurveSegments(value) {\n    defaultCurveSegments = value;\n  };\n\n  var getDefaultCurveSegments = function getDefaultCurveSegments() {\n    return defaultCurveSegments;\n  };\n\n  var setIdPrefix = function setIdPrefix(value) {\n    idPrefix$1 = value;\n  };\n\n  var getIdPrefix = function getIdPrefix() {\n    return idPrefix$1;\n  };\n\n  function createNS(type) {\n    // return {appendChild:function(){},setAttribute:function(){},style:{}}\n    return document.createElementNS(svgNS, type);\n  }\n\n  function _typeof$5(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$5 = function _typeof(obj) { return typeof obj; }; } else { _typeof$5 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$5(obj); }\n\n  var dataManager = function () {\n    var _counterId = 1;\n    var processes = [];\n    var workerFn;\n    var workerInstance;\n    var workerProxy = {\n      onmessage: function onmessage() {},\n      postMessage: function postMessage(path) {\n        workerFn({\n          data: path\n        });\n      }\n    };\n    var _workerSelf = {\n      postMessage: function postMessage(data) {\n        workerProxy.onmessage({\n          data: data\n        });\n      }\n    };\n\n    function createWorker(fn) {\n      if (window.Worker && window.Blob && getWebWorker()) {\n        var blob = new Blob(['var _workerSelf = self; self.onmessage = ', fn.toString()], {\n          type: 'text/javascript'\n        }); // var blob = new Blob(['self.onmessage = ', fn.toString()], { type: 'text/javascript' });\n\n        var url = URL.createObjectURL(blob);\n        return new Worker(url);\n      }\n\n      workerFn = fn;\n      return workerProxy;\n    }\n\n    function setupWorker() {\n      if (!workerInstance) {\n        workerInstance = createWorker(function workerStart(e) {\n          function dataFunctionManager() {\n            function completeLayers(layers, comps) {\n              var layerData;\n              var i;\n              var len = layers.length;\n              var j;\n              var jLen;\n              var k;\n              var kLen;\n\n              for (i = 0; i < len; i += 1) {\n                layerData = layers[i];\n\n                if ('ks' in layerData && !layerData.completed) {\n                  layerData.completed = true;\n\n                  if (layerData.hasMask) {\n                    var maskProps = layerData.masksProperties;\n                    jLen = maskProps.length;\n\n                    for (j = 0; j < jLen; j += 1) {\n                      if (maskProps[j].pt.k.i) {\n                        convertPathsToAbsoluteValues(maskProps[j].pt.k);\n                      } else {\n                        kLen = maskProps[j].pt.k.length;\n\n                        for (k = 0; k < kLen; k += 1) {\n                          if (maskProps[j].pt.k[k].s) {\n                            convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]);\n                          }\n\n                          if (maskProps[j].pt.k[k].e) {\n                            convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);\n                          }\n                        }\n                      }\n                    }\n                  }\n\n                  if (layerData.ty === 0) {\n                    layerData.layers = findCompLayers(layerData.refId, comps);\n                    completeLayers(layerData.layers, comps);\n                  } else if (layerData.ty === 4) {\n                    completeShapes(layerData.shapes);\n                  } else if (layerData.ty === 5) {\n                    completeText(layerData);\n                  }\n                }\n              }\n            }\n\n            function completeChars(chars, assets) {\n              if (chars) {\n                var i = 0;\n                var len = chars.length;\n\n                for (i = 0; i < len; i += 1) {\n                  if (chars[i].t === 1) {\n                    // var compData = findComp(chars[i].data.refId, assets);\n                    chars[i].data.layers = findCompLayers(chars[i].data.refId, assets); // chars[i].data.ip = 0;\n                    // chars[i].data.op = 99999;\n                    // chars[i].data.st = 0;\n                    // chars[i].data.sr = 1;\n                    // chars[i].w = compData.w;\n                    // chars[i].data.ks = {\n                    //   a: { k: [0, 0, 0], a: 0 },\n                    //   p: { k: [0, -compData.h, 0], a: 0 },\n                    //   r: { k: 0, a: 0 },\n                    //   s: { k: [100, 100], a: 0 },\n                    //   o: { k: 100, a: 0 },\n                    // };\n\n                    completeLayers(chars[i].data.layers, assets);\n                  }\n                }\n              }\n            }\n\n            function findComp(id, comps) {\n              var i = 0;\n              var len = comps.length;\n\n              while (i < len) {\n                if (comps[i].id === id) {\n                  return comps[i];\n                }\n\n                i += 1;\n              }\n\n              return null;\n            }\n\n            function findCompLayers(id, comps) {\n              var comp = findComp(id, comps);\n\n              if (comp) {\n                if (!comp.layers.__used) {\n                  comp.layers.__used = true;\n                  return comp.layers;\n                }\n\n                return JSON.parse(JSON.stringify(comp.layers));\n              }\n\n              return null;\n            }\n\n            function completeShapes(arr) {\n              var i;\n              var len = arr.length;\n              var j;\n              var jLen;\n\n              for (i = len - 1; i >= 0; i -= 1) {\n                if (arr[i].ty === 'sh') {\n                  if (arr[i].ks.k.i) {\n                    convertPathsToAbsoluteValues(arr[i].ks.k);\n                  } else {\n                    jLen = arr[i].ks.k.length;\n\n                    for (j = 0; j < jLen; j += 1) {\n                      if (arr[i].ks.k[j].s) {\n                        convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]);\n                      }\n\n                      if (arr[i].ks.k[j].e) {\n                        convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]);\n                      }\n                    }\n                  }\n                } else if (arr[i].ty === 'gr') {\n                  completeShapes(arr[i].it);\n                }\n              }\n            }\n\n            function convertPathsToAbsoluteValues(path) {\n              var i;\n              var len = path.i.length;\n\n              for (i = 0; i < len; i += 1) {\n                path.i[i][0] += path.v[i][0];\n                path.i[i][1] += path.v[i][1];\n                path.o[i][0] += path.v[i][0];\n                path.o[i][1] += path.v[i][1];\n              }\n            }\n\n            function checkVersion(minimum, animVersionString) {\n              var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100];\n\n              if (minimum[0] > animVersion[0]) {\n                return true;\n              }\n\n              if (animVersion[0] > minimum[0]) {\n                return false;\n              }\n\n              if (minimum[1] > animVersion[1]) {\n                return true;\n              }\n\n              if (animVersion[1] > minimum[1]) {\n                return false;\n              }\n\n              if (minimum[2] > animVersion[2]) {\n                return true;\n              }\n\n              if (animVersion[2] > minimum[2]) {\n                return false;\n              }\n\n              return null;\n            }\n\n            var checkText = function () {\n              var minimumVersion = [4, 4, 14];\n\n              function updateTextLayer(textLayer) {\n                var documentData = textLayer.t.d;\n                textLayer.t.d = {\n                  k: [{\n                    s: documentData,\n                    t: 0\n                  }]\n                };\n              }\n\n              function iterateLayers(layers) {\n                var i;\n                var len = layers.length;\n\n                for (i = 0; i < len; i += 1) {\n                  if (layers[i].ty === 5) {\n                    updateTextLayer(layers[i]);\n                  }\n                }\n              }\n\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            var checkChars = function () {\n              var minimumVersion = [4, 7, 99];\n              return function (animationData) {\n                if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) {\n                  var i;\n                  var len = animationData.chars.length;\n\n                  for (i = 0; i < len; i += 1) {\n                    var charData = animationData.chars[i];\n\n                    if (charData.data && charData.data.shapes) {\n                      completeShapes(charData.data.shapes);\n                      charData.data.ip = 0;\n                      charData.data.op = 99999;\n                      charData.data.st = 0;\n                      charData.data.sr = 1;\n                      charData.data.ks = {\n                        p: {\n                          k: [0, 0],\n                          a: 0\n                        },\n                        s: {\n                          k: [100, 100],\n                          a: 0\n                        },\n                        a: {\n                          k: [0, 0],\n                          a: 0\n                        },\n                        r: {\n                          k: 0,\n                          a: 0\n                        },\n                        o: {\n                          k: 100,\n                          a: 0\n                        }\n                      };\n\n                      if (!animationData.chars[i].t) {\n                        charData.data.shapes.push({\n                          ty: 'no'\n                        });\n                        charData.data.shapes[0].it.push({\n                          p: {\n                            k: [0, 0],\n                            a: 0\n                          },\n                          s: {\n                            k: [100, 100],\n                            a: 0\n                          },\n                          a: {\n                            k: [0, 0],\n                            a: 0\n                          },\n                          r: {\n                            k: 0,\n                            a: 0\n                          },\n                          o: {\n                            k: 100,\n                            a: 0\n                          },\n                          sk: {\n                            k: 0,\n                            a: 0\n                          },\n                          sa: {\n                            k: 0,\n                            a: 0\n                          },\n                          ty: 'tr'\n                        });\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            var checkPathProperties = function () {\n              var minimumVersion = [5, 7, 15];\n\n              function updateTextLayer(textLayer) {\n                var pathData = textLayer.t.p;\n\n                if (typeof pathData.a === 'number') {\n                  pathData.a = {\n                    a: 0,\n                    k: pathData.a\n                  };\n                }\n\n                if (typeof pathData.p === 'number') {\n                  pathData.p = {\n                    a: 0,\n                    k: pathData.p\n                  };\n                }\n\n                if (typeof pathData.r === 'number') {\n                  pathData.r = {\n                    a: 0,\n                    k: pathData.r\n                  };\n                }\n              }\n\n              function iterateLayers(layers) {\n                var i;\n                var len = layers.length;\n\n                for (i = 0; i < len; i += 1) {\n                  if (layers[i].ty === 5) {\n                    updateTextLayer(layers[i]);\n                  }\n                }\n              }\n\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            var checkColors = function () {\n              var minimumVersion = [4, 1, 9];\n\n              function iterateShapes(shapes) {\n                var i;\n                var len = shapes.length;\n                var j;\n                var jLen;\n\n                for (i = 0; i < len; i += 1) {\n                  if (shapes[i].ty === 'gr') {\n                    iterateShapes(shapes[i].it);\n                  } else if (shapes[i].ty === 'fl' || shapes[i].ty === 'st') {\n                    if (shapes[i].c.k && shapes[i].c.k[0].i) {\n                      jLen = shapes[i].c.k.length;\n\n                      for (j = 0; j < jLen; j += 1) {\n                        if (shapes[i].c.k[j].s) {\n                          shapes[i].c.k[j].s[0] /= 255;\n                          shapes[i].c.k[j].s[1] /= 255;\n                          shapes[i].c.k[j].s[2] /= 255;\n                          shapes[i].c.k[j].s[3] /= 255;\n                        }\n\n                        if (shapes[i].c.k[j].e) {\n                          shapes[i].c.k[j].e[0] /= 255;\n                          shapes[i].c.k[j].e[1] /= 255;\n                          shapes[i].c.k[j].e[2] /= 255;\n                          shapes[i].c.k[j].e[3] /= 255;\n                        }\n                      }\n                    } else {\n                      shapes[i].c.k[0] /= 255;\n                      shapes[i].c.k[1] /= 255;\n                      shapes[i].c.k[2] /= 255;\n                      shapes[i].c.k[3] /= 255;\n                    }\n                  }\n                }\n              }\n\n              function iterateLayers(layers) {\n                var i;\n                var len = layers.length;\n\n                for (i = 0; i < len; i += 1) {\n                  if (layers[i].ty === 4) {\n                    iterateShapes(layers[i].shapes);\n                  }\n                }\n              }\n\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            var checkShapes = function () {\n              var minimumVersion = [4, 4, 18];\n\n              function completeClosingShapes(arr) {\n                var i;\n                var len = arr.length;\n                var j;\n                var jLen;\n\n                for (i = len - 1; i >= 0; i -= 1) {\n                  if (arr[i].ty === 'sh') {\n                    if (arr[i].ks.k.i) {\n                      arr[i].ks.k.c = arr[i].closed;\n                    } else {\n                      jLen = arr[i].ks.k.length;\n\n                      for (j = 0; j < jLen; j += 1) {\n                        if (arr[i].ks.k[j].s) {\n                          arr[i].ks.k[j].s[0].c = arr[i].closed;\n                        }\n\n                        if (arr[i].ks.k[j].e) {\n                          arr[i].ks.k[j].e[0].c = arr[i].closed;\n                        }\n                      }\n                    }\n                  } else if (arr[i].ty === 'gr') {\n                    completeClosingShapes(arr[i].it);\n                  }\n                }\n              }\n\n              function iterateLayers(layers) {\n                var layerData;\n                var i;\n                var len = layers.length;\n                var j;\n                var jLen;\n                var k;\n                var kLen;\n\n                for (i = 0; i < len; i += 1) {\n                  layerData = layers[i];\n\n                  if (layerData.hasMask) {\n                    var maskProps = layerData.masksProperties;\n                    jLen = maskProps.length;\n\n                    for (j = 0; j < jLen; j += 1) {\n                      if (maskProps[j].pt.k.i) {\n                        maskProps[j].pt.k.c = maskProps[j].cl;\n                      } else {\n                        kLen = maskProps[j].pt.k.length;\n\n                        for (k = 0; k < kLen; k += 1) {\n                          if (maskProps[j].pt.k[k].s) {\n                            maskProps[j].pt.k[k].s[0].c = maskProps[j].cl;\n                          }\n\n                          if (maskProps[j].pt.k[k].e) {\n                            maskProps[j].pt.k[k].e[0].c = maskProps[j].cl;\n                          }\n                        }\n                      }\n                    }\n                  }\n\n                  if (layerData.ty === 4) {\n                    completeClosingShapes(layerData.shapes);\n                  }\n                }\n              }\n\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            function completeData(animationData) {\n              if (animationData.__complete) {\n                return;\n              }\n\n              checkColors(animationData);\n              checkText(animationData);\n              checkChars(animationData);\n              checkPathProperties(animationData);\n              checkShapes(animationData);\n              completeLayers(animationData.layers, animationData.assets);\n              completeChars(animationData.chars, animationData.assets);\n              animationData.__complete = true;\n            }\n\n            function completeText(data) {\n              if (data.t.a.length === 0 && !('m' in data.t.p)) {// data.singleShape = true;\n              }\n            }\n\n            var moduleOb = {};\n            moduleOb.completeData = completeData;\n            moduleOb.checkColors = checkColors;\n            moduleOb.checkChars = checkChars;\n            moduleOb.checkPathProperties = checkPathProperties;\n            moduleOb.checkShapes = checkShapes;\n            moduleOb.completeLayers = completeLayers;\n            return moduleOb;\n          }\n\n          if (!_workerSelf.dataManager) {\n            _workerSelf.dataManager = dataFunctionManager();\n          }\n\n          if (!_workerSelf.assetLoader) {\n            _workerSelf.assetLoader = function () {\n              function formatResponse(xhr) {\n                // using typeof doubles the time of execution of this method,\n                // so if available, it's better to use the header to validate the type\n                var contentTypeHeader = xhr.getResponseHeader('content-type');\n\n                if (contentTypeHeader && xhr.responseType === 'json' && contentTypeHeader.indexOf('json') !== -1) {\n                  return xhr.response;\n                }\n\n                if (xhr.response && _typeof$5(xhr.response) === 'object') {\n                  return xhr.response;\n                }\n\n                if (xhr.response && typeof xhr.response === 'string') {\n                  return JSON.parse(xhr.response);\n                }\n\n                if (xhr.responseText) {\n                  return JSON.parse(xhr.responseText);\n                }\n\n                return null;\n              }\n\n              function loadAsset(path, fullPath, callback, errorCallback) {\n                var response;\n                var xhr = new XMLHttpRequest(); // set responseType after calling open or IE will break.\n\n                try {\n                  // This crashes on Android WebView prior to KitKat\n                  xhr.responseType = 'json';\n                } catch (err) {} // eslint-disable-line no-empty\n\n\n                xhr.onreadystatechange = function () {\n                  if (xhr.readyState === 4) {\n                    if (xhr.status === 200) {\n                      response = formatResponse(xhr);\n                      callback(response);\n                    } else {\n                      try {\n                        response = formatResponse(xhr);\n                        callback(response);\n                      } catch (err) {\n                        if (errorCallback) {\n                          errorCallback(err);\n                        }\n                      }\n                    }\n                  }\n                };\n\n                try {\n                  // Hack to workaround banner validation\n                  xhr.open(['G', 'E', 'T'].join(''), path, true);\n                } catch (error) {\n                  // Hack to workaround banner validation\n                  xhr.open(['G', 'E', 'T'].join(''), fullPath + '/' + path, true);\n                }\n\n                xhr.send();\n              }\n\n              return {\n                load: loadAsset\n              };\n            }();\n          }\n\n          if (e.data.type === 'loadAnimation') {\n            _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n              _workerSelf.dataManager.completeData(data);\n\n              _workerSelf.postMessage({\n                id: e.data.id,\n                payload: data,\n                status: 'success'\n              });\n            }, function () {\n              _workerSelf.postMessage({\n                id: e.data.id,\n                status: 'error'\n              });\n            });\n          } else if (e.data.type === 'complete') {\n            var animation = e.data.animation;\n\n            _workerSelf.dataManager.completeData(animation);\n\n            _workerSelf.postMessage({\n              id: e.data.id,\n              payload: animation,\n              status: 'success'\n            });\n          } else if (e.data.type === 'loadData') {\n            _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n              _workerSelf.postMessage({\n                id: e.data.id,\n                payload: data,\n                status: 'success'\n              });\n            }, function () {\n              _workerSelf.postMessage({\n                id: e.data.id,\n                status: 'error'\n              });\n            });\n          }\n        });\n\n        workerInstance.onmessage = function (event) {\n          var data = event.data;\n          var id = data.id;\n          var process = processes[id];\n          processes[id] = null;\n\n          if (data.status === 'success') {\n            process.onComplete(data.payload);\n          } else if (process.onError) {\n            process.onError();\n          }\n        };\n      }\n    }\n\n    function createProcess(onComplete, onError) {\n      _counterId += 1;\n      var id = 'processId_' + _counterId;\n      processes[id] = {\n        onComplete: onComplete,\n        onError: onError\n      };\n      return id;\n    }\n\n    function loadAnimation(path, onComplete, onError) {\n      setupWorker();\n      var processId = createProcess(onComplete, onError);\n      workerInstance.postMessage({\n        type: 'loadAnimation',\n        path: path,\n        fullPath: window.location.origin + window.location.pathname,\n        id: processId\n      });\n    }\n\n    function loadData(path, onComplete, onError) {\n      setupWorker();\n      var processId = createProcess(onComplete, onError);\n      workerInstance.postMessage({\n        type: 'loadData',\n        path: path,\n        fullPath: window.location.origin + window.location.pathname,\n        id: processId\n      });\n    }\n\n    function completeAnimation(anim, onComplete, onError) {\n      setupWorker();\n      var processId = createProcess(onComplete, onError);\n      workerInstance.postMessage({\n        type: 'complete',\n        animation: anim,\n        id: processId\n      });\n    }\n\n    return {\n      loadAnimation: loadAnimation,\n      loadData: loadData,\n      completeAnimation: completeAnimation\n    };\n  }();\n\n  var ImagePreloader = function () {\n    var proxyImage = function () {\n      var canvas = createTag('canvas');\n      canvas.width = 1;\n      canvas.height = 1;\n      var ctx = canvas.getContext('2d');\n      ctx.fillStyle = 'rgba(0,0,0,0)';\n      ctx.fillRect(0, 0, 1, 1);\n      return canvas;\n    }();\n\n    function imageLoaded() {\n      this.loadedAssets += 1;\n\n      if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n        if (this.imagesLoadedCb) {\n          this.imagesLoadedCb(null);\n        }\n      }\n    }\n\n    function footageLoaded() {\n      this.loadedFootagesCount += 1;\n\n      if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n        if (this.imagesLoadedCb) {\n          this.imagesLoadedCb(null);\n        }\n      }\n    }\n\n    function getAssetsPath(assetData, assetsPath, originalPath) {\n      var path = '';\n\n      if (assetData.e) {\n        path = assetData.p;\n      } else if (assetsPath) {\n        var imagePath = assetData.p;\n\n        if (imagePath.indexOf('images/') !== -1) {\n          imagePath = imagePath.split('/')[1];\n        }\n\n        path = assetsPath + imagePath;\n      } else {\n        path = originalPath;\n        path += assetData.u ? assetData.u : '';\n        path += assetData.p;\n      }\n\n      return path;\n    }\n\n    function testImageLoaded(img) {\n      var _count = 0;\n      var intervalId = setInterval(function () {\n        var box = img.getBBox();\n\n        if (box.width || _count > 500) {\n          this._imageLoaded();\n\n          clearInterval(intervalId);\n        }\n\n        _count += 1;\n      }.bind(this), 50);\n    }\n\n    function createImageData(assetData) {\n      var path = getAssetsPath(assetData, this.assetsPath, this.path);\n      var img = createNS('image');\n\n      if (isSafari) {\n        this.testImageLoaded(img);\n      } else {\n        img.addEventListener('load', this._imageLoaded, false);\n      }\n\n      img.addEventListener('error', function () {\n        ob.img = proxyImage;\n\n        this._imageLoaded();\n      }.bind(this), false);\n      img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n\n      if (this._elementHelper.append) {\n        this._elementHelper.append(img);\n      } else {\n        this._elementHelper.appendChild(img);\n      }\n\n      var ob = {\n        img: img,\n        assetData: assetData\n      };\n      return ob;\n    }\n\n    function createImgData(assetData) {\n      var path = getAssetsPath(assetData, this.assetsPath, this.path);\n      var img = createTag('img');\n      img.crossOrigin = 'anonymous';\n      img.addEventListener('load', this._imageLoaded, false);\n      img.addEventListener('error', function () {\n        ob.img = proxyImage;\n\n        this._imageLoaded();\n      }.bind(this), false);\n      img.src = path;\n      var ob = {\n        img: img,\n        assetData: assetData\n      };\n      return ob;\n    }\n\n    function createFootageData(data) {\n      var ob = {\n        assetData: data\n      };\n      var path = getAssetsPath(data, this.assetsPath, this.path);\n      dataManager.loadData(path, function (footageData) {\n        ob.img = footageData;\n\n        this._footageLoaded();\n      }.bind(this), function () {\n        ob.img = {};\n\n        this._footageLoaded();\n      }.bind(this));\n      return ob;\n    }\n\n    function loadAssets(assets, cb) {\n      this.imagesLoadedCb = cb;\n      var i;\n      var len = assets.length;\n\n      for (i = 0; i < len; i += 1) {\n        if (!assets[i].layers) {\n          if (!assets[i].t || assets[i].t === 'seq') {\n            this.totalImages += 1;\n            this.images.push(this._createImageData(assets[i]));\n          } else if (assets[i].t === 3) {\n            this.totalFootages += 1;\n            this.images.push(this.createFootageData(assets[i]));\n          }\n        }\n      }\n    }\n\n    function setPath(path) {\n      this.path = path || '';\n    }\n\n    function setAssetsPath(path) {\n      this.assetsPath = path || '';\n    }\n\n    function getAsset(assetData) {\n      var i = 0;\n      var len = this.images.length;\n\n      while (i < len) {\n        if (this.images[i].assetData === assetData) {\n          return this.images[i].img;\n        }\n\n        i += 1;\n      }\n\n      return null;\n    }\n\n    function destroy() {\n      this.imagesLoadedCb = null;\n      this.images.length = 0;\n    }\n\n    function loadedImages() {\n      return this.totalImages === this.loadedAssets;\n    }\n\n    function loadedFootages() {\n      return this.totalFootages === this.loadedFootagesCount;\n    }\n\n    function setCacheType(type, elementHelper) {\n      if (type === 'svg') {\n        this._elementHelper = elementHelper;\n        this._createImageData = this.createImageData.bind(this);\n      } else {\n        this._createImageData = this.createImgData.bind(this);\n      }\n    }\n\n    function ImagePreloaderFactory() {\n      this._imageLoaded = imageLoaded.bind(this);\n      this._footageLoaded = footageLoaded.bind(this);\n      this.testImageLoaded = testImageLoaded.bind(this);\n      this.createFootageData = createFootageData.bind(this);\n      this.assetsPath = '';\n      this.path = '';\n      this.totalImages = 0;\n      this.totalFootages = 0;\n      this.loadedAssets = 0;\n      this.loadedFootagesCount = 0;\n      this.imagesLoadedCb = null;\n      this.images = [];\n    }\n\n    ImagePreloaderFactory.prototype = {\n      loadAssets: loadAssets,\n      setAssetsPath: setAssetsPath,\n      setPath: setPath,\n      loadedImages: loadedImages,\n      loadedFootages: loadedFootages,\n      destroy: destroy,\n      getAsset: getAsset,\n      createImgData: createImgData,\n      createImageData: createImageData,\n      imageLoaded: imageLoaded,\n      footageLoaded: footageLoaded,\n      setCacheType: setCacheType\n    };\n    return ImagePreloaderFactory;\n  }();\n\n  function BaseEvent() {}\n\n  BaseEvent.prototype = {\n    triggerEvent: function triggerEvent(eventName, args) {\n      if (this._cbs[eventName]) {\n        var callbacks = this._cbs[eventName];\n\n        for (var i = 0; i < callbacks.length; i += 1) {\n          callbacks[i](args);\n        }\n      }\n    },\n    addEventListener: function addEventListener(eventName, callback) {\n      if (!this._cbs[eventName]) {\n        this._cbs[eventName] = [];\n      }\n\n      this._cbs[eventName].push(callback);\n\n      return function () {\n        this.removeEventListener(eventName, callback);\n      }.bind(this);\n    },\n    removeEventListener: function removeEventListener(eventName, callback) {\n      if (!callback) {\n        this._cbs[eventName] = null;\n      } else if (this._cbs[eventName]) {\n        var i = 0;\n        var len = this._cbs[eventName].length;\n\n        while (i < len) {\n          if (this._cbs[eventName][i] === callback) {\n            this._cbs[eventName].splice(i, 1);\n\n            i -= 1;\n            len -= 1;\n          }\n\n          i += 1;\n        }\n\n        if (!this._cbs[eventName].length) {\n          this._cbs[eventName] = null;\n        }\n      }\n    }\n  };\n\n  var markerParser = function () {\n    function parsePayloadLines(payload) {\n      var lines = payload.split('\\r\\n');\n      var keys = {};\n      var line;\n      var keysCount = 0;\n\n      for (var i = 0; i < lines.length; i += 1) {\n        line = lines[i].split(':');\n\n        if (line.length === 2) {\n          keys[line[0]] = line[1].trim();\n          keysCount += 1;\n        }\n      }\n\n      if (keysCount === 0) {\n        throw new Error();\n      }\n\n      return keys;\n    }\n\n    return function (_markers) {\n      var markers = [];\n\n      for (var i = 0; i < _markers.length; i += 1) {\n        var _marker = _markers[i];\n        var markerData = {\n          time: _marker.tm,\n          duration: _marker.dr\n        };\n\n        try {\n          markerData.payload = JSON.parse(_markers[i].cm);\n        } catch (_) {\n          try {\n            markerData.payload = parsePayloadLines(_markers[i].cm);\n          } catch (__) {\n            markerData.payload = {\n              name: _markers[i].cm\n            };\n          }\n        }\n\n        markers.push(markerData);\n      }\n\n      return markers;\n    };\n  }();\n\n  var ProjectInterface = function () {\n    function registerComposition(comp) {\n      this.compositions.push(comp);\n    }\n\n    return function () {\n      function _thisProjectFunction(name) {\n        var i = 0;\n        var len = this.compositions.length;\n\n        while (i < len) {\n          if (this.compositions[i].data && this.compositions[i].data.nm === name) {\n            if (this.compositions[i].prepareFrame && this.compositions[i].data.xt) {\n              this.compositions[i].prepareFrame(this.currentFrame);\n            }\n\n            return this.compositions[i].compInterface;\n          }\n\n          i += 1;\n        }\n\n        return null;\n      }\n\n      _thisProjectFunction.compositions = [];\n      _thisProjectFunction.currentFrame = 0;\n      _thisProjectFunction.registerComposition = registerComposition;\n      return _thisProjectFunction;\n    };\n  }();\n\n  var renderers = {};\n\n  var registerRenderer = function registerRenderer(key, value) {\n    renderers[key] = value;\n  };\n\n  function getRenderer(key) {\n    return renderers[key];\n  }\n\n  function getRegisteredRenderer() {\n    // Returns canvas by default for compatibility\n    if (renderers.canvas) {\n      return 'canvas';\n    } // Returns any renderer that is registered\n\n\n    for (var key in renderers) {\n      if (renderers[key]) {\n        return key;\n      }\n    }\n\n    return '';\n  }\n\n  function _typeof$4(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$4 = function _typeof(obj) { return typeof obj; }; } else { _typeof$4 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$4(obj); }\n\n  var AnimationItem = function AnimationItem() {\n    this._cbs = [];\n    this.name = '';\n    this.path = '';\n    this.isLoaded = false;\n    this.currentFrame = 0;\n    this.currentRawFrame = 0;\n    this.firstFrame = 0;\n    this.totalFrames = 0;\n    this.frameRate = 0;\n    this.frameMult = 0;\n    this.playSpeed = 1;\n    this.playDirection = 1;\n    this.playCount = 0;\n    this.animationData = {};\n    this.assets = [];\n    this.isPaused = true;\n    this.autoplay = false;\n    this.loop = true;\n    this.renderer = null;\n    this.animationID = createElementID();\n    this.assetsPath = '';\n    this.timeCompleted = 0;\n    this.segmentPos = 0;\n    this.isSubframeEnabled = getSubframeEnabled();\n    this.segments = [];\n    this._idle = true;\n    this._completedLoop = false;\n    this.projectInterface = ProjectInterface();\n    this.imagePreloader = new ImagePreloader();\n    this.audioController = audioControllerFactory();\n    this.markers = [];\n    this.configAnimation = this.configAnimation.bind(this);\n    this.onSetupError = this.onSetupError.bind(this);\n    this.onSegmentComplete = this.onSegmentComplete.bind(this);\n    this.drawnFrameEvent = new BMEnterFrameEvent('drawnFrame', 0, 0, 0);\n    this.expressionsPlugin = getExpressionsPlugin();\n  };\n\n  extendPrototype([BaseEvent], AnimationItem);\n\n  AnimationItem.prototype.setParams = function (params) {\n    if (params.wrapper || params.container) {\n      this.wrapper = params.wrapper || params.container;\n    }\n\n    var animType = 'svg';\n\n    if (params.animType) {\n      animType = params.animType;\n    } else if (params.renderer) {\n      animType = params.renderer;\n    }\n\n    var RendererClass = getRenderer(animType);\n    this.renderer = new RendererClass(this, params.rendererSettings);\n    this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs);\n    this.renderer.setProjectInterface(this.projectInterface);\n    this.animType = animType;\n\n    if (params.loop === '' || params.loop === null || params.loop === undefined || params.loop === true) {\n      this.loop = true;\n    } else if (params.loop === false) {\n      this.loop = false;\n    } else {\n      this.loop = parseInt(params.loop, 10);\n    }\n\n    this.autoplay = 'autoplay' in params ? params.autoplay : true;\n    this.name = params.name ? params.name : '';\n    this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, 'autoloadSegments') ? params.autoloadSegments : true;\n    this.assetsPath = params.assetsPath;\n    this.initialSegment = params.initialSegment;\n\n    if (params.audioFactory) {\n      this.audioController.setAudioFactory(params.audioFactory);\n    }\n\n    if (params.animationData) {\n      this.setupAnimation(params.animationData);\n    } else if (params.path) {\n      if (params.path.lastIndexOf('\\\\') !== -1) {\n        this.path = params.path.substr(0, params.path.lastIndexOf('\\\\') + 1);\n      } else {\n        this.path = params.path.substr(0, params.path.lastIndexOf('/') + 1);\n      }\n\n      this.fileName = params.path.substr(params.path.lastIndexOf('/') + 1);\n      this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf('.json'));\n      dataManager.loadAnimation(params.path, this.configAnimation, this.onSetupError);\n    }\n  };\n\n  AnimationItem.prototype.onSetupError = function () {\n    this.trigger('data_failed');\n  };\n\n  AnimationItem.prototype.setupAnimation = function (data) {\n    dataManager.completeAnimation(data, this.configAnimation);\n  };\n\n  AnimationItem.prototype.setData = function (wrapper, animationData) {\n    if (animationData) {\n      if (_typeof$4(animationData) !== 'object') {\n        animationData = JSON.parse(animationData);\n      }\n    }\n\n    var params = {\n      wrapper: wrapper,\n      animationData: animationData\n    };\n    var wrapperAttributes = wrapper.attributes;\n    params.path = wrapperAttributes.getNamedItem('data-animation-path') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-animation-path').value : wrapperAttributes.getNamedItem('data-bm-path') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-path').value : wrapperAttributes.getNamedItem('bm-path') ? wrapperAttributes.getNamedItem('bm-path').value : '';\n    params.animType = wrapperAttributes.getNamedItem('data-anim-type') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-anim-type').value : wrapperAttributes.getNamedItem('data-bm-type') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-type').value : wrapperAttributes.getNamedItem('bm-type') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('bm-type').value : wrapperAttributes.getNamedItem('data-bm-renderer') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-renderer').value : wrapperAttributes.getNamedItem('bm-renderer') ? wrapperAttributes.getNamedItem('bm-renderer').value : getRegisteredRenderer() || 'canvas';\n    var loop = wrapperAttributes.getNamedItem('data-anim-loop') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-anim-loop').value : wrapperAttributes.getNamedItem('data-bm-loop') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-loop').value : wrapperAttributes.getNamedItem('bm-loop') ? wrapperAttributes.getNamedItem('bm-loop').value : '';\n\n    if (loop === 'false') {\n      params.loop = false;\n    } else if (loop === 'true') {\n      params.loop = true;\n    } else if (loop !== '') {\n      params.loop = parseInt(loop, 10);\n    }\n\n    var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-anim-autoplay').value : wrapperAttributes.getNamedItem('data-bm-autoplay') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-autoplay').value : wrapperAttributes.getNamedItem('bm-autoplay') ? wrapperAttributes.getNamedItem('bm-autoplay').value : true;\n    params.autoplay = autoplay !== 'false';\n    params.name = wrapperAttributes.getNamedItem('data-name') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-name').value : wrapperAttributes.getNamedItem('data-bm-name') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-name').value : wrapperAttributes.getNamedItem('bm-name') ? wrapperAttributes.getNamedItem('bm-name').value : '';\n    var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-anim-prerender').value : wrapperAttributes.getNamedItem('data-bm-prerender') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-prerender').value : wrapperAttributes.getNamedItem('bm-prerender') ? wrapperAttributes.getNamedItem('bm-prerender').value : '';\n\n    if (prerender === 'false') {\n      params.prerender = false;\n    }\n\n    if (!params.path) {\n      this.trigger('destroy');\n    } else {\n      this.setParams(params);\n    }\n  };\n\n  AnimationItem.prototype.includeLayers = function (data) {\n    if (data.op > this.animationData.op) {\n      this.animationData.op = data.op;\n      this.totalFrames = Math.floor(data.op - this.animationData.ip);\n    }\n\n    var layers = this.animationData.layers;\n    var i;\n    var len = layers.length;\n    var newLayers = data.layers;\n    var j;\n    var jLen = newLayers.length;\n\n    for (j = 0; j < jLen; j += 1) {\n      i = 0;\n\n      while (i < len) {\n        if (layers[i].id === newLayers[j].id) {\n          layers[i] = newLayers[j];\n          break;\n        }\n\n        i += 1;\n      }\n    }\n\n    if (data.chars || data.fonts) {\n      this.renderer.globalData.fontManager.addChars(data.chars);\n      this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs);\n    }\n\n    if (data.assets) {\n      len = data.assets.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.animationData.assets.push(data.assets[i]);\n      }\n    }\n\n    this.animationData.__complete = false;\n    dataManager.completeAnimation(this.animationData, this.onSegmentComplete);\n  };\n\n  AnimationItem.prototype.onSegmentComplete = function (data) {\n    this.animationData = data;\n    var expressionsPlugin = getExpressionsPlugin();\n\n    if (expressionsPlugin) {\n      expressionsPlugin.initExpressions(this);\n    }\n\n    this.loadNextSegment();\n  };\n\n  AnimationItem.prototype.loadNextSegment = function () {\n    var segments = this.animationData.segments;\n\n    if (!segments || segments.length === 0 || !this.autoloadSegments) {\n      this.trigger('data_ready');\n      this.timeCompleted = this.totalFrames;\n      return;\n    }\n\n    var segment = segments.shift();\n    this.timeCompleted = segment.time * this.frameRate;\n    var segmentPath = this.path + this.fileName + '_' + this.segmentPos + '.json';\n    this.segmentPos += 1;\n    dataManager.loadData(segmentPath, this.includeLayers.bind(this), function () {\n      this.trigger('data_failed');\n    }.bind(this));\n  };\n\n  AnimationItem.prototype.loadSegments = function () {\n    var segments = this.animationData.segments;\n\n    if (!segments) {\n      this.timeCompleted = this.totalFrames;\n    }\n\n    this.loadNextSegment();\n  };\n\n  AnimationItem.prototype.imagesLoaded = function () {\n    this.trigger('loaded_images');\n    this.checkLoaded();\n  };\n\n  AnimationItem.prototype.preloadImages = function () {\n    this.imagePreloader.setAssetsPath(this.assetsPath);\n    this.imagePreloader.setPath(this.path);\n    this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this));\n  };\n\n  AnimationItem.prototype.configAnimation = function (animData) {\n    if (!this.renderer) {\n      return;\n    }\n\n    try {\n      this.animationData = animData;\n\n      if (this.initialSegment) {\n        this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]);\n        this.firstFrame = Math.round(this.initialSegment[0]);\n      } else {\n        this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip);\n        this.firstFrame = Math.round(this.animationData.ip);\n      }\n\n      this.renderer.configAnimation(animData);\n\n      if (!animData.assets) {\n        animData.assets = [];\n      }\n\n      this.assets = this.animationData.assets;\n      this.frameRate = this.animationData.fr;\n      this.frameMult = this.animationData.fr / 1000;\n      this.renderer.searchExtraCompositions(animData.assets);\n      this.markers = markerParser(animData.markers || []);\n      this.trigger('config_ready');\n      this.preloadImages();\n      this.loadSegments();\n      this.updaFrameModifier();\n      this.waitForFontsLoaded();\n\n      if (this.isPaused) {\n        this.audioController.pause();\n      }\n    } catch (error) {\n      this.triggerConfigError(error);\n    }\n  };\n\n  AnimationItem.prototype.waitForFontsLoaded = function () {\n    if (!this.renderer) {\n      return;\n    }\n\n    if (this.renderer.globalData.fontManager.isLoaded) {\n      this.checkLoaded();\n    } else {\n      setTimeout(this.waitForFontsLoaded.bind(this), 20);\n    }\n  };\n\n  AnimationItem.prototype.checkLoaded = function () {\n    if (!this.isLoaded && this.renderer.globalData.fontManager.isLoaded && (this.imagePreloader.loadedImages() || this.renderer.rendererType !== 'canvas') && this.imagePreloader.loadedFootages()) {\n      this.isLoaded = true;\n      var expressionsPlugin = getExpressionsPlugin();\n\n      if (expressionsPlugin) {\n        expressionsPlugin.initExpressions(this);\n      }\n\n      this.renderer.initItems();\n      setTimeout(function () {\n        this.trigger('DOMLoaded');\n      }.bind(this), 0);\n      this.gotoFrame();\n\n      if (this.autoplay) {\n        this.play();\n      }\n    }\n  };\n\n  AnimationItem.prototype.resize = function (width, height) {\n    // Adding this validation for backwards compatibility in case an event object was being passed down\n    var _width = typeof width === 'number' ? width : undefined;\n\n    var _height = typeof height === 'number' ? height : undefined;\n\n    this.renderer.updateContainerSize(_width, _height);\n  };\n\n  AnimationItem.prototype.setSubframe = function (flag) {\n    this.isSubframeEnabled = !!flag;\n  };\n\n  AnimationItem.prototype.gotoFrame = function () {\n    this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame; // eslint-disable-line no-bitwise\n\n    if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) {\n      this.currentFrame = this.timeCompleted;\n    }\n\n    this.trigger('enterFrame');\n    this.renderFrame();\n    this.trigger('drawnFrame');\n  };\n\n  AnimationItem.prototype.renderFrame = function () {\n    if (this.isLoaded === false || !this.renderer) {\n      return;\n    }\n\n    try {\n      if (this.expressionsPlugin) {\n        this.expressionsPlugin.resetFrame();\n      }\n\n      this.renderer.renderFrame(this.currentFrame + this.firstFrame);\n    } catch (error) {\n      this.triggerRenderFrameError(error);\n    }\n  };\n\n  AnimationItem.prototype.play = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    if (this.isPaused === true) {\n      this.isPaused = false;\n      this.trigger('_play');\n      this.audioController.resume();\n\n      if (this._idle) {\n        this._idle = false;\n        this.trigger('_active');\n      }\n    }\n  };\n\n  AnimationItem.prototype.pause = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    if (this.isPaused === false) {\n      this.isPaused = true;\n      this.trigger('_pause');\n      this._idle = true;\n      this.trigger('_idle');\n      this.audioController.pause();\n    }\n  };\n\n  AnimationItem.prototype.togglePause = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    if (this.isPaused === true) {\n      this.play();\n    } else {\n      this.pause();\n    }\n  };\n\n  AnimationItem.prototype.stop = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    this.pause();\n    this.playCount = 0;\n    this._completedLoop = false;\n    this.setCurrentRawFrameValue(0);\n  };\n\n  AnimationItem.prototype.getMarkerData = function (markerName) {\n    var marker;\n\n    for (var i = 0; i < this.markers.length; i += 1) {\n      marker = this.markers[i];\n\n      if (marker.payload && marker.payload.name === markerName) {\n        return marker;\n      }\n    }\n\n    return null;\n  };\n\n  AnimationItem.prototype.goToAndStop = function (value, isFrame, name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    var numValue = Number(value);\n\n    if (isNaN(numValue)) {\n      var marker = this.getMarkerData(value);\n\n      if (marker) {\n        this.goToAndStop(marker.time, true);\n      }\n    } else if (isFrame) {\n      this.setCurrentRawFrameValue(value);\n    } else {\n      this.setCurrentRawFrameValue(value * this.frameModifier);\n    }\n\n    this.pause();\n  };\n\n  AnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    var numValue = Number(value);\n\n    if (isNaN(numValue)) {\n      var marker = this.getMarkerData(value);\n\n      if (marker) {\n        if (!marker.duration) {\n          this.goToAndStop(marker.time, true);\n        } else {\n          this.playSegments([marker.time, marker.time + marker.duration], true);\n        }\n      }\n    } else {\n      this.goToAndStop(numValue, isFrame, name);\n    }\n\n    this.play();\n  };\n\n  AnimationItem.prototype.advanceTime = function (value) {\n    if (this.isPaused === true || this.isLoaded === false) {\n      return;\n    }\n\n    var nextValue = this.currentRawFrame + value * this.frameModifier;\n    var _isComplete = false; // Checking if nextValue > totalFrames - 1 for addressing non looping and looping animations.\n    // If animation won't loop, it should stop at totalFrames - 1. If it will loop it should complete the last frame and then loop.\n\n    if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) {\n      if (!this.loop || this.playCount === this.loop) {\n        if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) {\n          _isComplete = true;\n          nextValue = this.totalFrames - 1;\n        }\n      } else if (nextValue >= this.totalFrames) {\n        this.playCount += 1;\n\n        if (!this.checkSegments(nextValue % this.totalFrames)) {\n          this.setCurrentRawFrameValue(nextValue % this.totalFrames);\n          this._completedLoop = true;\n          this.trigger('loopComplete');\n        }\n      } else {\n        this.setCurrentRawFrameValue(nextValue);\n      }\n    } else if (nextValue < 0) {\n      if (!this.checkSegments(nextValue % this.totalFrames)) {\n        if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) {\n          // eslint-disable-line no-plusplus\n          this.setCurrentRawFrameValue(this.totalFrames + nextValue % this.totalFrames);\n\n          if (!this._completedLoop) {\n            this._completedLoop = true;\n          } else {\n            this.trigger('loopComplete');\n          }\n        } else {\n          _isComplete = true;\n          nextValue = 0;\n        }\n      }\n    } else {\n      this.setCurrentRawFrameValue(nextValue);\n    }\n\n    if (_isComplete) {\n      this.setCurrentRawFrameValue(nextValue);\n      this.pause();\n      this.trigger('complete');\n    }\n  };\n\n  AnimationItem.prototype.adjustSegment = function (arr, offset) {\n    this.playCount = 0;\n\n    if (arr[1] < arr[0]) {\n      if (this.frameModifier > 0) {\n        if (this.playSpeed < 0) {\n          this.setSpeed(-this.playSpeed);\n        } else {\n          this.setDirection(-1);\n        }\n      }\n\n      this.totalFrames = arr[0] - arr[1];\n      this.timeCompleted = this.totalFrames;\n      this.firstFrame = arr[1];\n      this.setCurrentRawFrameValue(this.totalFrames - 0.001 - offset);\n    } else if (arr[1] > arr[0]) {\n      if (this.frameModifier < 0) {\n        if (this.playSpeed < 0) {\n          this.setSpeed(-this.playSpeed);\n        } else {\n          this.setDirection(1);\n        }\n      }\n\n      this.totalFrames = arr[1] - arr[0];\n      this.timeCompleted = this.totalFrames;\n      this.firstFrame = arr[0];\n      this.setCurrentRawFrameValue(0.001 + offset);\n    }\n\n    this.trigger('segmentStart');\n  };\n\n  AnimationItem.prototype.setSegment = function (init, end) {\n    var pendingFrame = -1;\n\n    if (this.isPaused) {\n      if (this.currentRawFrame + this.firstFrame < init) {\n        pendingFrame = init;\n      } else if (this.currentRawFrame + this.firstFrame > end) {\n        pendingFrame = end - init;\n      }\n    }\n\n    this.firstFrame = init;\n    this.totalFrames = end - init;\n    this.timeCompleted = this.totalFrames;\n\n    if (pendingFrame !== -1) {\n      this.goToAndStop(pendingFrame, true);\n    }\n  };\n\n  AnimationItem.prototype.playSegments = function (arr, forceFlag) {\n    if (forceFlag) {\n      this.segments.length = 0;\n    }\n\n    if (_typeof$4(arr[0]) === 'object') {\n      var i;\n      var len = arr.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.segments.push(arr[i]);\n      }\n    } else {\n      this.segments.push(arr);\n    }\n\n    if (this.segments.length && forceFlag) {\n      this.adjustSegment(this.segments.shift(), 0);\n    }\n\n    if (this.isPaused) {\n      this.play();\n    }\n  };\n\n  AnimationItem.prototype.resetSegments = function (forceFlag) {\n    this.segments.length = 0;\n    this.segments.push([this.animationData.ip, this.animationData.op]);\n\n    if (forceFlag) {\n      this.checkSegments(0);\n    }\n  };\n\n  AnimationItem.prototype.checkSegments = function (offset) {\n    if (this.segments.length) {\n      this.adjustSegment(this.segments.shift(), offset);\n      return true;\n    }\n\n    return false;\n  };\n\n  AnimationItem.prototype.destroy = function (name) {\n    if (name && this.name !== name || !this.renderer) {\n      return;\n    }\n\n    this.renderer.destroy();\n    this.imagePreloader.destroy();\n    this.trigger('destroy');\n    this._cbs = null;\n    this.onEnterFrame = null;\n    this.onLoopComplete = null;\n    this.onComplete = null;\n    this.onSegmentStart = null;\n    this.onDestroy = null;\n    this.renderer = null;\n    this.expressionsPlugin = null;\n    this.imagePreloader = null;\n    this.projectInterface = null;\n  };\n\n  AnimationItem.prototype.setCurrentRawFrameValue = function (value) {\n    this.currentRawFrame = value;\n    this.gotoFrame();\n  };\n\n  AnimationItem.prototype.setSpeed = function (val) {\n    this.playSpeed = val;\n    this.updaFrameModifier();\n  };\n\n  AnimationItem.prototype.setDirection = function (val) {\n    this.playDirection = val < 0 ? -1 : 1;\n    this.updaFrameModifier();\n  };\n\n  AnimationItem.prototype.setLoop = function (isLooping) {\n    this.loop = isLooping;\n  };\n\n  AnimationItem.prototype.setVolume = function (val, name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    this.audioController.setVolume(val);\n  };\n\n  AnimationItem.prototype.getVolume = function () {\n    return this.audioController.getVolume();\n  };\n\n  AnimationItem.prototype.mute = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    this.audioController.mute();\n  };\n\n  AnimationItem.prototype.unmute = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    this.audioController.unmute();\n  };\n\n  AnimationItem.prototype.updaFrameModifier = function () {\n    this.frameModifier = this.frameMult * this.playSpeed * this.playDirection;\n    this.audioController.setRate(this.playSpeed * this.playDirection);\n  };\n\n  AnimationItem.prototype.getPath = function () {\n    return this.path;\n  };\n\n  AnimationItem.prototype.getAssetsPath = function (assetData) {\n    var path = '';\n\n    if (assetData.e) {\n      path = assetData.p;\n    } else if (this.assetsPath) {\n      var imagePath = assetData.p;\n\n      if (imagePath.indexOf('images/') !== -1) {\n        imagePath = imagePath.split('/')[1];\n      }\n\n      path = this.assetsPath + imagePath;\n    } else {\n      path = this.path;\n      path += assetData.u ? assetData.u : '';\n      path += assetData.p;\n    }\n\n    return path;\n  };\n\n  AnimationItem.prototype.getAssetData = function (id) {\n    var i = 0;\n    var len = this.assets.length;\n\n    while (i < len) {\n      if (id === this.assets[i].id) {\n        return this.assets[i];\n      }\n\n      i += 1;\n    }\n\n    return null;\n  };\n\n  AnimationItem.prototype.hide = function () {\n    this.renderer.hide();\n  };\n\n  AnimationItem.prototype.show = function () {\n    this.renderer.show();\n  };\n\n  AnimationItem.prototype.getDuration = function (isFrame) {\n    return isFrame ? this.totalFrames : this.totalFrames / this.frameRate;\n  };\n\n  AnimationItem.prototype.updateDocumentData = function (path, documentData, index) {\n    try {\n      var element = this.renderer.getElementByPath(path);\n      element.updateDocumentData(documentData, index);\n    } catch (error) {// TODO: decide how to handle catch case\n    }\n  };\n\n  AnimationItem.prototype.trigger = function (name) {\n    if (this._cbs && this._cbs[name]) {\n      switch (name) {\n        case 'enterFrame':\n          this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameModifier));\n          break;\n\n        case 'drawnFrame':\n          this.drawnFrameEvent.currentTime = this.currentFrame;\n          this.drawnFrameEvent.totalTime = this.totalFrames;\n          this.drawnFrameEvent.direction = this.frameModifier;\n          this.triggerEvent(name, this.drawnFrameEvent);\n          break;\n\n        case 'loopComplete':\n          this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n          break;\n\n        case 'complete':\n          this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult));\n          break;\n\n        case 'segmentStart':\n          this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n          break;\n\n        case 'destroy':\n          this.triggerEvent(name, new BMDestroyEvent(name, this));\n          break;\n\n        default:\n          this.triggerEvent(name);\n      }\n    }\n\n    if (name === 'enterFrame' && this.onEnterFrame) {\n      this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));\n    }\n\n    if (name === 'loopComplete' && this.onLoopComplete) {\n      this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n    }\n\n    if (name === 'complete' && this.onComplete) {\n      this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult));\n    }\n\n    if (name === 'segmentStart' && this.onSegmentStart) {\n      this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n    }\n\n    if (name === 'destroy' && this.onDestroy) {\n      this.onDestroy.call(this, new BMDestroyEvent(name, this));\n    }\n  };\n\n  AnimationItem.prototype.triggerRenderFrameError = function (nativeError) {\n    var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame);\n    this.triggerEvent('error', error);\n\n    if (this.onError) {\n      this.onError.call(this, error);\n    }\n  };\n\n  AnimationItem.prototype.triggerConfigError = function (nativeError) {\n    var error = new BMConfigErrorEvent(nativeError, this.currentFrame);\n    this.triggerEvent('error', error);\n\n    if (this.onError) {\n      this.onError.call(this, error);\n    }\n  };\n\n  var animationManager = function () {\n    var moduleOb = {};\n    var registeredAnimations = [];\n    var initTime = 0;\n    var len = 0;\n    var playingAnimationsNum = 0;\n    var _stopped = true;\n    var _isFrozen = false;\n\n    function removeElement(ev) {\n      var i = 0;\n      var animItem = ev.target;\n\n      while (i < len) {\n        if (registeredAnimations[i].animation === animItem) {\n          registeredAnimations.splice(i, 1);\n          i -= 1;\n          len -= 1;\n\n          if (!animItem.isPaused) {\n            subtractPlayingCount();\n          }\n        }\n\n        i += 1;\n      }\n    }\n\n    function registerAnimation(element, animationData) {\n      if (!element) {\n        return null;\n      }\n\n      var i = 0;\n\n      while (i < len) {\n        if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) {\n          return registeredAnimations[i].animation;\n        }\n\n        i += 1;\n      }\n\n      var animItem = new AnimationItem();\n      setupAnimation(animItem, element);\n      animItem.setData(element, animationData);\n      return animItem;\n    }\n\n    function getRegisteredAnimations() {\n      var i;\n      var lenAnims = registeredAnimations.length;\n      var animations = [];\n\n      for (i = 0; i < lenAnims; i += 1) {\n        animations.push(registeredAnimations[i].animation);\n      }\n\n      return animations;\n    }\n\n    function addPlayingCount() {\n      playingAnimationsNum += 1;\n      activate();\n    }\n\n    function subtractPlayingCount() {\n      playingAnimationsNum -= 1;\n    }\n\n    function setupAnimation(animItem, element) {\n      animItem.addEventListener('destroy', removeElement);\n      animItem.addEventListener('_active', addPlayingCount);\n      animItem.addEventListener('_idle', subtractPlayingCount);\n      registeredAnimations.push({\n        elem: element,\n        animation: animItem\n      });\n      len += 1;\n    }\n\n    function loadAnimation(params) {\n      var animItem = new AnimationItem();\n      setupAnimation(animItem, null);\n      animItem.setParams(params);\n      return animItem;\n    }\n\n    function setSpeed(val, animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.setSpeed(val, animation);\n      }\n    }\n\n    function setDirection(val, animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.setDirection(val, animation);\n      }\n    }\n\n    function play(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.play(animation);\n      }\n    }\n\n    function resume(nowTime) {\n      var elapsedTime = nowTime - initTime;\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.advanceTime(elapsedTime);\n      }\n\n      initTime = nowTime;\n\n      if (playingAnimationsNum && !_isFrozen) {\n        window.requestAnimationFrame(resume);\n      } else {\n        _stopped = true;\n      }\n    }\n\n    function first(nowTime) {\n      initTime = nowTime;\n      window.requestAnimationFrame(resume);\n    }\n\n    function pause(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.pause(animation);\n      }\n    }\n\n    function goToAndStop(value, isFrame, animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.goToAndStop(value, isFrame, animation);\n      }\n    }\n\n    function stop(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.stop(animation);\n      }\n    }\n\n    function togglePause(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.togglePause(animation);\n      }\n    }\n\n    function destroy(animation) {\n      var i;\n\n      for (i = len - 1; i >= 0; i -= 1) {\n        registeredAnimations[i].animation.destroy(animation);\n      }\n    }\n\n    function searchAnimations(animationData, standalone, renderer) {\n      var animElements = [].concat([].slice.call(document.getElementsByClassName('lottie')), [].slice.call(document.getElementsByClassName('bodymovin')));\n      var i;\n      var lenAnims = animElements.length;\n\n      for (i = 0; i < lenAnims; i += 1) {\n        if (renderer) {\n          animElements[i].setAttribute('data-bm-type', renderer);\n        }\n\n        registerAnimation(animElements[i], animationData);\n      }\n\n      if (standalone && lenAnims === 0) {\n        if (!renderer) {\n          renderer = 'svg';\n        }\n\n        var body = document.getElementsByTagName('body')[0];\n        body.innerText = '';\n        var div = createTag('div');\n        div.style.width = '100%';\n        div.style.height = '100%';\n        div.setAttribute('data-bm-type', renderer);\n        body.appendChild(div);\n        registerAnimation(div, animationData);\n      }\n    }\n\n    function resize() {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.resize();\n      }\n    }\n\n    function activate() {\n      if (!_isFrozen && playingAnimationsNum) {\n        if (_stopped) {\n          window.requestAnimationFrame(first);\n          _stopped = false;\n        }\n      }\n    }\n\n    function freeze() {\n      _isFrozen = true;\n    }\n\n    function unfreeze() {\n      _isFrozen = false;\n      activate();\n    }\n\n    function setVolume(val, animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.setVolume(val, animation);\n      }\n    }\n\n    function mute(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.mute(animation);\n      }\n    }\n\n    function unmute(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.unmute(animation);\n      }\n    }\n\n    moduleOb.registerAnimation = registerAnimation;\n    moduleOb.loadAnimation = loadAnimation;\n    moduleOb.setSpeed = setSpeed;\n    moduleOb.setDirection = setDirection;\n    moduleOb.play = play;\n    moduleOb.pause = pause;\n    moduleOb.stop = stop;\n    moduleOb.togglePause = togglePause;\n    moduleOb.searchAnimations = searchAnimations;\n    moduleOb.resize = resize; // moduleOb.start = start;\n\n    moduleOb.goToAndStop = goToAndStop;\n    moduleOb.destroy = destroy;\n    moduleOb.freeze = freeze;\n    moduleOb.unfreeze = unfreeze;\n    moduleOb.setVolume = setVolume;\n    moduleOb.mute = mute;\n    moduleOb.unmute = unmute;\n    moduleOb.getRegisteredAnimations = getRegisteredAnimations;\n    return moduleOb;\n  }();\n\n  /* eslint-disable */\n  var BezierFactory = function () {\n    /**\r\n       * BezierEasing - use bezier curve for transition easing function\r\n       * by Gaëtan Renaudeau 2014 - 2015 – MIT License\r\n       *\r\n       * Credits: is based on Firefox's nsSMILKeySpline.cpp\r\n       * Usage:\r\n       * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])\r\n       * spline.get(x) => returns the easing value | x must be in [0, 1] range\r\n       *\r\n       */\n    var ob = {};\n    ob.getBezierEasing = getBezierEasing;\n    var beziers = {};\n\n    function getBezierEasing(a, b, c, d, nm) {\n      var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\\./g, 'p');\n\n      if (beziers[str]) {\n        return beziers[str];\n      }\n\n      var bezEasing = new BezierEasing([a, b, c, d]);\n      beziers[str] = bezEasing;\n      return bezEasing;\n    } // These values are established by empiricism with tests (tradeoff: performance VS precision)\n\n\n    var NEWTON_ITERATIONS = 4;\n    var NEWTON_MIN_SLOPE = 0.001;\n    var SUBDIVISION_PRECISION = 0.0000001;\n    var SUBDIVISION_MAX_ITERATIONS = 10;\n    var kSplineTableSize = 11;\n    var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n    var float32ArraySupported = typeof Float32Array === 'function';\n\n    function A(aA1, aA2) {\n      return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n    }\n\n    function B(aA1, aA2) {\n      return 3.0 * aA2 - 6.0 * aA1;\n    }\n\n    function C(aA1) {\n      return 3.0 * aA1;\n    } // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\n\n\n    function calcBezier(aT, aA1, aA2) {\n      return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n    } // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\n\n\n    function getSlope(aT, aA1, aA2) {\n      return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n    }\n\n    function binarySubdivide(aX, aA, aB, mX1, mX2) {\n      var currentX,\n          currentT,\n          i = 0;\n\n      do {\n        currentT = aA + (aB - aA) / 2.0;\n        currentX = calcBezier(currentT, mX1, mX2) - aX;\n\n        if (currentX > 0.0) {\n          aB = currentT;\n        } else {\n          aA = currentT;\n        }\n      } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n\n      return currentT;\n    }\n\n    function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n      for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n        var currentSlope = getSlope(aGuessT, mX1, mX2);\n        if (currentSlope === 0.0) return aGuessT;\n        var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n        aGuessT -= currentX / currentSlope;\n      }\n\n      return aGuessT;\n    }\n    /**\r\n       * points is an array of [ mX1, mY1, mX2, mY2 ]\r\n       */\n\n\n    function BezierEasing(points) {\n      this._p = points;\n      this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n      this._precomputed = false;\n      this.get = this.get.bind(this);\n    }\n\n    BezierEasing.prototype = {\n      get: function get(x) {\n        var mX1 = this._p[0],\n            mY1 = this._p[1],\n            mX2 = this._p[2],\n            mY2 = this._p[3];\n        if (!this._precomputed) this._precompute();\n        if (mX1 === mY1 && mX2 === mY2) return x; // linear\n        // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n\n        if (x === 0) return 0;\n        if (x === 1) return 1;\n        return calcBezier(this._getTForX(x), mY1, mY2);\n      },\n      // Private part\n      _precompute: function _precompute() {\n        var mX1 = this._p[0],\n            mY1 = this._p[1],\n            mX2 = this._p[2],\n            mY2 = this._p[3];\n        this._precomputed = true;\n\n        if (mX1 !== mY1 || mX2 !== mY2) {\n          this._calcSampleValues();\n        }\n      },\n      _calcSampleValues: function _calcSampleValues() {\n        var mX1 = this._p[0],\n            mX2 = this._p[2];\n\n        for (var i = 0; i < kSplineTableSize; ++i) {\n          this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n        }\n      },\n\n      /**\r\n           * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.\r\n           */\n      _getTForX: function _getTForX(aX) {\n        var mX1 = this._p[0],\n            mX2 = this._p[2],\n            mSampleValues = this._mSampleValues;\n        var intervalStart = 0.0;\n        var currentSample = 1;\n        var lastSample = kSplineTableSize - 1;\n\n        for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n          intervalStart += kSampleStepSize;\n        }\n\n        --currentSample; // Interpolate to provide an initial guess for t\n\n        var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]);\n        var guessForT = intervalStart + dist * kSampleStepSize;\n        var initialSlope = getSlope(guessForT, mX1, mX2);\n\n        if (initialSlope >= NEWTON_MIN_SLOPE) {\n          return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n        }\n\n        if (initialSlope === 0.0) {\n          return guessForT;\n        }\n\n        return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n      }\n    };\n    return ob;\n  }();\n\n  var pooling = function () {\n    function _double(arr) {\n      return arr.concat(createSizedArray(arr.length));\n    }\n\n    return {\n      \"double\": _double\n    };\n  }();\n\n  var poolFactory = function () {\n    return function (initialLength, _create, _release) {\n      var _length = 0;\n      var _maxLength = initialLength;\n      var pool = createSizedArray(_maxLength);\n      var ob = {\n        newElement: newElement,\n        release: release\n      };\n\n      function newElement() {\n        var element;\n\n        if (_length) {\n          _length -= 1;\n          element = pool[_length];\n        } else {\n          element = _create();\n        }\n\n        return element;\n      }\n\n      function release(element) {\n        if (_length === _maxLength) {\n          pool = pooling[\"double\"](pool);\n          _maxLength *= 2;\n        }\n\n        if (_release) {\n          _release(element);\n        }\n\n        pool[_length] = element;\n        _length += 1;\n      }\n\n      return ob;\n    };\n  }();\n\n  var bezierLengthPool = function () {\n    function create() {\n      return {\n        addedLength: 0,\n        percents: createTypedArray('float32', getDefaultCurveSegments()),\n        lengths: createTypedArray('float32', getDefaultCurveSegments())\n      };\n    }\n\n    return poolFactory(8, create);\n  }();\n\n  var segmentsLengthPool = function () {\n    function create() {\n      return {\n        lengths: [],\n        totalLength: 0\n      };\n    }\n\n    function release(element) {\n      var i;\n      var len = element.lengths.length;\n\n      for (i = 0; i < len; i += 1) {\n        bezierLengthPool.release(element.lengths[i]);\n      }\n\n      element.lengths.length = 0;\n    }\n\n    return poolFactory(8, create, release);\n  }();\n\n  function bezFunction() {\n    var math = Math;\n\n    function pointOnLine2D(x1, y1, x2, y2, x3, y3) {\n      var det1 = x1 * y2 + y1 * x3 + x2 * y3 - x3 * y2 - y3 * x1 - x2 * y1;\n      return det1 > -0.001 && det1 < 0.001;\n    }\n\n    function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) {\n      if (z1 === 0 && z2 === 0 && z3 === 0) {\n        return pointOnLine2D(x1, y1, x2, y2, x3, y3);\n      }\n\n      var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2));\n      var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2));\n      var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2));\n      var diffDist;\n\n      if (dist1 > dist2) {\n        if (dist1 > dist3) {\n          diffDist = dist1 - dist2 - dist3;\n        } else {\n          diffDist = dist3 - dist2 - dist1;\n        }\n      } else if (dist3 > dist2) {\n        diffDist = dist3 - dist2 - dist1;\n      } else {\n        diffDist = dist2 - dist1 - dist3;\n      }\n\n      return diffDist > -0.0001 && diffDist < 0.0001;\n    }\n\n    var getBezierLength = function () {\n      return function (pt1, pt2, pt3, pt4) {\n        var curveSegments = getDefaultCurveSegments();\n        var k;\n        var i;\n        var len;\n        var ptCoord;\n        var perc;\n        var addedLength = 0;\n        var ptDistance;\n        var point = [];\n        var lastPoint = [];\n        var lengthData = bezierLengthPool.newElement();\n        len = pt3.length;\n\n        for (k = 0; k < curveSegments; k += 1) {\n          perc = k / (curveSegments - 1);\n          ptDistance = 0;\n\n          for (i = 0; i < len; i += 1) {\n            ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * pt3[i] + 3 * (1 - perc) * bmPow(perc, 2) * pt4[i] + bmPow(perc, 3) * pt2[i];\n            point[i] = ptCoord;\n\n            if (lastPoint[i] !== null) {\n              ptDistance += bmPow(point[i] - lastPoint[i], 2);\n            }\n\n            lastPoint[i] = point[i];\n          }\n\n          if (ptDistance) {\n            ptDistance = bmSqrt(ptDistance);\n            addedLength += ptDistance;\n          }\n\n          lengthData.percents[k] = perc;\n          lengthData.lengths[k] = addedLength;\n        }\n\n        lengthData.addedLength = addedLength;\n        return lengthData;\n      };\n    }();\n\n    function getSegmentsLength(shapeData) {\n      var segmentsLength = segmentsLengthPool.newElement();\n      var closed = shapeData.c;\n      var pathV = shapeData.v;\n      var pathO = shapeData.o;\n      var pathI = shapeData.i;\n      var i;\n      var len = shapeData._length;\n      var lengths = segmentsLength.lengths;\n      var totalLength = 0;\n\n      for (i = 0; i < len - 1; i += 1) {\n        lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]);\n        totalLength += lengths[i].addedLength;\n      }\n\n      if (closed && len) {\n        lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);\n        totalLength += lengths[i].addedLength;\n      }\n\n      segmentsLength.totalLength = totalLength;\n      return segmentsLength;\n    }\n\n    function BezierData(length) {\n      this.segmentLength = 0;\n      this.points = new Array(length);\n    }\n\n    function PointData(partial, point) {\n      this.partialLength = partial;\n      this.point = point;\n    }\n\n    var buildBezierData = function () {\n      var storedData = {};\n      return function (pt1, pt2, pt3, pt4) {\n        var bezierName = (pt1[0] + '_' + pt1[1] + '_' + pt2[0] + '_' + pt2[1] + '_' + pt3[0] + '_' + pt3[1] + '_' + pt4[0] + '_' + pt4[1]).replace(/\\./g, 'p');\n\n        if (!storedData[bezierName]) {\n          var curveSegments = getDefaultCurveSegments();\n          var k;\n          var i;\n          var len;\n          var ptCoord;\n          var perc;\n          var addedLength = 0;\n          var ptDistance;\n          var point;\n          var lastPoint = null;\n\n          if (pt1.length === 2 && (pt1[0] !== pt2[0] || pt1[1] !== pt2[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt1[0] + pt3[0], pt1[1] + pt3[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt2[0] + pt4[0], pt2[1] + pt4[1])) {\n            curveSegments = 2;\n          }\n\n          var bezierData = new BezierData(curveSegments);\n          len = pt3.length;\n\n          for (k = 0; k < curveSegments; k += 1) {\n            point = createSizedArray(len);\n            perc = k / (curveSegments - 1);\n            ptDistance = 0;\n\n            for (i = 0; i < len; i += 1) {\n              ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) + 3 * (1 - perc) * bmPow(perc, 2) * (pt2[i] + pt4[i]) + bmPow(perc, 3) * pt2[i];\n              point[i] = ptCoord;\n\n              if (lastPoint !== null) {\n                ptDistance += bmPow(point[i] - lastPoint[i], 2);\n              }\n            }\n\n            ptDistance = bmSqrt(ptDistance);\n            addedLength += ptDistance;\n            bezierData.points[k] = new PointData(ptDistance, point);\n            lastPoint = point;\n          }\n\n          bezierData.segmentLength = addedLength;\n          storedData[bezierName] = bezierData;\n        }\n\n        return storedData[bezierName];\n      };\n    }();\n\n    function getDistancePerc(perc, bezierData) {\n      var percents = bezierData.percents;\n      var lengths = bezierData.lengths;\n      var len = percents.length;\n      var initPos = bmFloor((len - 1) * perc);\n      var lengthPos = perc * bezierData.addedLength;\n      var lPerc = 0;\n\n      if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {\n        return percents[initPos];\n      }\n\n      var dir = lengths[initPos] > lengthPos ? -1 : 1;\n      var flag = true;\n\n      while (flag) {\n        if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) {\n          lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]);\n          flag = false;\n        } else {\n          initPos += dir;\n        }\n\n        if (initPos < 0 || initPos >= len - 1) {\n          // FIX for TypedArrays that don't store floating point values with enough accuracy\n          if (initPos === len - 1) {\n            return percents[initPos];\n          }\n\n          flag = false;\n        }\n      }\n\n      return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc;\n    }\n\n    function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) {\n      var t1 = getDistancePerc(percent, bezierData);\n      var u1 = 1 - t1;\n      var ptX = math.round((u1 * u1 * u1 * pt1[0] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[0] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[0] + t1 * t1 * t1 * pt2[0]) * 1000) / 1000;\n      var ptY = math.round((u1 * u1 * u1 * pt1[1] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[1] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[1] + t1 * t1 * t1 * pt2[1]) * 1000) / 1000;\n      return [ptX, ptY];\n    }\n\n    var bezierSegmentPoints = createTypedArray('float32', 8);\n\n    function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) {\n      if (startPerc < 0) {\n        startPerc = 0;\n      } else if (startPerc > 1) {\n        startPerc = 1;\n      }\n\n      var t0 = getDistancePerc(startPerc, bezierData);\n      endPerc = endPerc > 1 ? 1 : endPerc;\n      var t1 = getDistancePerc(endPerc, bezierData);\n      var i;\n      var len = pt1.length;\n      var u0 = 1 - t0;\n      var u1 = 1 - t1;\n      var u0u0u0 = u0 * u0 * u0;\n      var t0u0u0_3 = t0 * u0 * u0 * 3; // eslint-disable-line camelcase\n\n      var t0t0u0_3 = t0 * t0 * u0 * 3; // eslint-disable-line camelcase\n\n      var t0t0t0 = t0 * t0 * t0; //\n\n      var u0u0u1 = u0 * u0 * u1;\n      var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1; // eslint-disable-line camelcase\n\n      var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; // eslint-disable-line camelcase\n\n      var t0t0t1 = t0 * t0 * t1; //\n\n      var u0u1u1 = u0 * u1 * u1;\n      var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1; // eslint-disable-line camelcase\n\n      var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; // eslint-disable-line camelcase\n\n      var t0t1t1 = t0 * t1 * t1; //\n\n      var u1u1u1 = u1 * u1 * u1;\n      var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1; // eslint-disable-line camelcase\n\n      var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; // eslint-disable-line camelcase\n\n      var t1t1t1 = t1 * t1 * t1;\n\n      for (i = 0; i < len; i += 1) {\n        bezierSegmentPoints[i * 4] = math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n        bezierSegmentPoints[i * 4 + 1] = math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n        bezierSegmentPoints[i * 4 + 2] = math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n        bezierSegmentPoints[i * 4 + 3] = math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n      }\n\n      return bezierSegmentPoints;\n    }\n\n    return {\n      getSegmentsLength: getSegmentsLength,\n      getNewSegment: getNewSegment,\n      getPointInSegment: getPointInSegment,\n      buildBezierData: buildBezierData,\n      pointOnLine2D: pointOnLine2D,\n      pointOnLine3D: pointOnLine3D\n    };\n  }\n\n  var bez = bezFunction();\n\n  var initFrame = initialDefaultFrame;\n  var mathAbs = Math.abs;\n\n  function interpolateValue(frameNum, caching) {\n    var offsetTime = this.offsetTime;\n    var newValue;\n\n    if (this.propType === 'multidimensional') {\n      newValue = createTypedArray('float32', this.pv.length);\n    }\n\n    var iterationIndex = caching.lastIndex;\n    var i = iterationIndex;\n    var len = this.keyframes.length - 1;\n    var flag = true;\n    var keyData;\n    var nextKeyData;\n    var keyframeMetadata;\n\n    while (flag) {\n      keyData = this.keyframes[i];\n      nextKeyData = this.keyframes[i + 1];\n\n      if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) {\n        if (keyData.h) {\n          keyData = nextKeyData;\n        }\n\n        iterationIndex = 0;\n        break;\n      }\n\n      if (nextKeyData.t - offsetTime > frameNum) {\n        iterationIndex = i;\n        break;\n      }\n\n      if (i < len - 1) {\n        i += 1;\n      } else {\n        iterationIndex = 0;\n        flag = false;\n      }\n    }\n\n    keyframeMetadata = this.keyframesMetadata[i] || {};\n    var k;\n    var kLen;\n    var perc;\n    var jLen;\n    var j;\n    var fnc;\n    var nextKeyTime = nextKeyData.t - offsetTime;\n    var keyTime = keyData.t - offsetTime;\n    var endValue;\n\n    if (keyData.to) {\n      if (!keyframeMetadata.bezierData) {\n        keyframeMetadata.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);\n      }\n\n      var bezierData = keyframeMetadata.bezierData;\n\n      if (frameNum >= nextKeyTime || frameNum < keyTime) {\n        var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0;\n        kLen = bezierData.points[ind].point.length;\n\n        for (k = 0; k < kLen; k += 1) {\n          newValue[k] = bezierData.points[ind].point[k];\n        } // caching._lastKeyframeIndex = -1;\n\n      } else {\n        if (keyframeMetadata.__fnct) {\n          fnc = keyframeMetadata.__fnct;\n        } else {\n          fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get;\n          keyframeMetadata.__fnct = fnc;\n        }\n\n        perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n        var distanceInLine = bezierData.segmentLength * perc;\n        var segmentPerc;\n        var addedLength = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastAddedLength : 0;\n        j = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastPoint : 0;\n        flag = true;\n        jLen = bezierData.points.length;\n\n        while (flag) {\n          addedLength += bezierData.points[j].partialLength;\n\n          if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) {\n            kLen = bezierData.points[j].point.length;\n\n            for (k = 0; k < kLen; k += 1) {\n              newValue[k] = bezierData.points[j].point[k];\n            }\n\n            break;\n          } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) {\n            segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength;\n            kLen = bezierData.points[j].point.length;\n\n            for (k = 0; k < kLen; k += 1) {\n              newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc;\n            }\n\n            break;\n          }\n\n          if (j < jLen - 1) {\n            j += 1;\n          } else {\n            flag = false;\n          }\n        }\n\n        caching._lastPoint = j;\n        caching._lastAddedLength = addedLength - bezierData.points[j].partialLength;\n        caching._lastKeyframeIndex = i;\n      }\n    } else {\n      var outX;\n      var outY;\n      var inX;\n      var inY;\n      var keyValue;\n      len = keyData.s.length;\n      endValue = nextKeyData.s || keyData.e;\n\n      if (this.sh && keyData.h !== 1) {\n        if (frameNum >= nextKeyTime) {\n          newValue[0] = endValue[0];\n          newValue[1] = endValue[1];\n          newValue[2] = endValue[2];\n        } else if (frameNum <= keyTime) {\n          newValue[0] = keyData.s[0];\n          newValue[1] = keyData.s[1];\n          newValue[2] = keyData.s[2];\n        } else {\n          var quatStart = createQuaternion(keyData.s);\n          var quatEnd = createQuaternion(endValue);\n          var time = (frameNum - keyTime) / (nextKeyTime - keyTime);\n          quaternionToEuler(newValue, slerp(quatStart, quatEnd, time));\n        }\n      } else {\n        for (i = 0; i < len; i += 1) {\n          if (keyData.h !== 1) {\n            if (frameNum >= nextKeyTime) {\n              perc = 1;\n            } else if (frameNum < keyTime) {\n              perc = 0;\n            } else {\n              if (keyData.o.x.constructor === Array) {\n                if (!keyframeMetadata.__fnct) {\n                  keyframeMetadata.__fnct = [];\n                }\n\n                if (!keyframeMetadata.__fnct[i]) {\n                  outX = keyData.o.x[i] === undefined ? keyData.o.x[0] : keyData.o.x[i];\n                  outY = keyData.o.y[i] === undefined ? keyData.o.y[0] : keyData.o.y[i];\n                  inX = keyData.i.x[i] === undefined ? keyData.i.x[0] : keyData.i.x[i];\n                  inY = keyData.i.y[i] === undefined ? keyData.i.y[0] : keyData.i.y[i];\n                  fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n                  keyframeMetadata.__fnct[i] = fnc;\n                } else {\n                  fnc = keyframeMetadata.__fnct[i];\n                }\n              } else if (!keyframeMetadata.__fnct) {\n                outX = keyData.o.x;\n                outY = keyData.o.y;\n                inX = keyData.i.x;\n                inY = keyData.i.y;\n                fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n                keyData.keyframeMetadata = fnc;\n              } else {\n                fnc = keyframeMetadata.__fnct;\n              }\n\n              perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n            }\n          }\n\n          endValue = nextKeyData.s || keyData.e;\n          keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc;\n\n          if (this.propType === 'multidimensional') {\n            newValue[i] = keyValue;\n          } else {\n            newValue = keyValue;\n          }\n        }\n      }\n    }\n\n    caching.lastIndex = iterationIndex;\n    return newValue;\n  } // based on @Toji's https://github.com/toji/gl-matrix/\n\n\n  function slerp(a, b, t) {\n    var out = [];\n    var ax = a[0];\n    var ay = a[1];\n    var az = a[2];\n    var aw = a[3];\n    var bx = b[0];\n    var by = b[1];\n    var bz = b[2];\n    var bw = b[3];\n    var omega;\n    var cosom;\n    var sinom;\n    var scale0;\n    var scale1;\n    cosom = ax * bx + ay * by + az * bz + aw * bw;\n\n    if (cosom < 0.0) {\n      cosom = -cosom;\n      bx = -bx;\n      by = -by;\n      bz = -bz;\n      bw = -bw;\n    }\n\n    if (1.0 - cosom > 0.000001) {\n      omega = Math.acos(cosom);\n      sinom = Math.sin(omega);\n      scale0 = Math.sin((1.0 - t) * omega) / sinom;\n      scale1 = Math.sin(t * omega) / sinom;\n    } else {\n      scale0 = 1.0 - t;\n      scale1 = t;\n    }\n\n    out[0] = scale0 * ax + scale1 * bx;\n    out[1] = scale0 * ay + scale1 * by;\n    out[2] = scale0 * az + scale1 * bz;\n    out[3] = scale0 * aw + scale1 * bw;\n    return out;\n  }\n\n  function quaternionToEuler(out, quat) {\n    var qx = quat[0];\n    var qy = quat[1];\n    var qz = quat[2];\n    var qw = quat[3];\n    var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz);\n    var attitude = Math.asin(2 * qx * qy + 2 * qz * qw);\n    var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz);\n    out[0] = heading / degToRads;\n    out[1] = attitude / degToRads;\n    out[2] = bank / degToRads;\n  }\n\n  function createQuaternion(values) {\n    var heading = values[0] * degToRads;\n    var attitude = values[1] * degToRads;\n    var bank = values[2] * degToRads;\n    var c1 = Math.cos(heading / 2);\n    var c2 = Math.cos(attitude / 2);\n    var c3 = Math.cos(bank / 2);\n    var s1 = Math.sin(heading / 2);\n    var s2 = Math.sin(attitude / 2);\n    var s3 = Math.sin(bank / 2);\n    var w = c1 * c2 * c3 - s1 * s2 * s3;\n    var x = s1 * s2 * c3 + c1 * c2 * s3;\n    var y = s1 * c2 * c3 + c1 * s2 * s3;\n    var z = c1 * s2 * c3 - s1 * c2 * s3;\n    return [x, y, z, w];\n  }\n\n  function getValueAtCurrentTime() {\n    var frameNum = this.comp.renderedFrame - this.offsetTime;\n    var initTime = this.keyframes[0].t - this.offsetTime;\n    var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n\n    if (!(frameNum === this._caching.lastFrame || this._caching.lastFrame !== initFrame && (this._caching.lastFrame >= endTime && frameNum >= endTime || this._caching.lastFrame < initTime && frameNum < initTime))) {\n      if (this._caching.lastFrame >= frameNum) {\n        this._caching._lastKeyframeIndex = -1;\n        this._caching.lastIndex = 0;\n      }\n\n      var renderResult = this.interpolateValue(frameNum, this._caching);\n      this.pv = renderResult;\n    }\n\n    this._caching.lastFrame = frameNum;\n    return this.pv;\n  }\n\n  function setVValue(val) {\n    var multipliedValue;\n\n    if (this.propType === 'unidimensional') {\n      multipliedValue = val * this.mult;\n\n      if (mathAbs(this.v - multipliedValue) > 0.00001) {\n        this.v = multipliedValue;\n        this._mdf = true;\n      }\n    } else {\n      var i = 0;\n      var len = this.v.length;\n\n      while (i < len) {\n        multipliedValue = val[i] * this.mult;\n\n        if (mathAbs(this.v[i] - multipliedValue) > 0.00001) {\n          this.v[i] = multipliedValue;\n          this._mdf = true;\n        }\n\n        i += 1;\n      }\n    }\n  }\n\n  function processEffectsSequence() {\n    if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) {\n      return;\n    }\n\n    if (this.lock) {\n      this.setVValue(this.pv);\n      return;\n    }\n\n    this.lock = true;\n    this._mdf = this._isFirstFrame;\n    var i;\n    var len = this.effectsSequence.length;\n    var finalValue = this.kf ? this.pv : this.data.k;\n\n    for (i = 0; i < len; i += 1) {\n      finalValue = this.effectsSequence[i](finalValue);\n    }\n\n    this.setVValue(finalValue);\n    this._isFirstFrame = false;\n    this.lock = false;\n    this.frameId = this.elem.globalData.frameId;\n  }\n\n  function addEffect(effectFunction) {\n    this.effectsSequence.push(effectFunction);\n    this.container.addDynamicProperty(this);\n  }\n\n  function ValueProperty(elem, data, mult, container) {\n    this.propType = 'unidimensional';\n    this.mult = mult || 1;\n    this.data = data;\n    this.v = mult ? data.k * mult : data.k;\n    this.pv = data.k;\n    this._mdf = false;\n    this.elem = elem;\n    this.container = container;\n    this.comp = elem.comp;\n    this.k = false;\n    this.kf = false;\n    this.vel = 0;\n    this.effectsSequence = [];\n    this._isFirstFrame = true;\n    this.getValue = processEffectsSequence;\n    this.setVValue = setVValue;\n    this.addEffect = addEffect;\n  }\n\n  function MultiDimensionalProperty(elem, data, mult, container) {\n    this.propType = 'multidimensional';\n    this.mult = mult || 1;\n    this.data = data;\n    this._mdf = false;\n    this.elem = elem;\n    this.container = container;\n    this.comp = elem.comp;\n    this.k = false;\n    this.kf = false;\n    this.frameId = -1;\n    var i;\n    var len = data.k.length;\n    this.v = createTypedArray('float32', len);\n    this.pv = createTypedArray('float32', len);\n    this.vel = createTypedArray('float32', len);\n\n    for (i = 0; i < len; i += 1) {\n      this.v[i] = data.k[i] * this.mult;\n      this.pv[i] = data.k[i];\n    }\n\n    this._isFirstFrame = true;\n    this.effectsSequence = [];\n    this.getValue = processEffectsSequence;\n    this.setVValue = setVValue;\n    this.addEffect = addEffect;\n  }\n\n  function KeyframedValueProperty(elem, data, mult, container) {\n    this.propType = 'unidimensional';\n    this.keyframes = data.k;\n    this.keyframesMetadata = [];\n    this.offsetTime = elem.data.st;\n    this.frameId = -1;\n    this._caching = {\n      lastFrame: initFrame,\n      lastIndex: 0,\n      value: 0,\n      _lastKeyframeIndex: -1\n    };\n    this.k = true;\n    this.kf = true;\n    this.data = data;\n    this.mult = mult || 1;\n    this.elem = elem;\n    this.container = container;\n    this.comp = elem.comp;\n    this.v = initFrame;\n    this.pv = initFrame;\n    this._isFirstFrame = true;\n    this.getValue = processEffectsSequence;\n    this.setVValue = setVValue;\n    this.interpolateValue = interpolateValue;\n    this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n    this.addEffect = addEffect;\n  }\n\n  function KeyframedMultidimensionalProperty(elem, data, mult, container) {\n    this.propType = 'multidimensional';\n    var i;\n    var len = data.k.length;\n    var s;\n    var e;\n    var to;\n    var ti;\n\n    for (i = 0; i < len - 1; i += 1) {\n      if (data.k[i].to && data.k[i].s && data.k[i + 1] && data.k[i + 1].s) {\n        s = data.k[i].s;\n        e = data.k[i + 1].s;\n        to = data.k[i].to;\n        ti = data.k[i].ti;\n\n        if (s.length === 2 && !(s[0] === e[0] && s[1] === e[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], s[0] + to[0], s[1] + to[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], e[0] + ti[0], e[1] + ti[1]) || s.length === 3 && !(s[0] === e[0] && s[1] === e[1] && s[2] === e[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], s[0] + to[0], s[1] + to[1], s[2] + to[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], e[0] + ti[0], e[1] + ti[1], e[2] + ti[2])) {\n          data.k[i].to = null;\n          data.k[i].ti = null;\n        }\n\n        if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) {\n          if (s.length === 2 || s[2] === e[2] && to[2] === 0 && ti[2] === 0) {\n            data.k[i].to = null;\n            data.k[i].ti = null;\n          }\n        }\n      }\n    }\n\n    this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n    this.data = data;\n    this.keyframes = data.k;\n    this.keyframesMetadata = [];\n    this.offsetTime = elem.data.st;\n    this.k = true;\n    this.kf = true;\n    this._isFirstFrame = true;\n    this.mult = mult || 1;\n    this.elem = elem;\n    this.container = container;\n    this.comp = elem.comp;\n    this.getValue = processEffectsSequence;\n    this.setVValue = setVValue;\n    this.interpolateValue = interpolateValue;\n    this.frameId = -1;\n    var arrLen = data.k[0].s.length;\n    this.v = createTypedArray('float32', arrLen);\n    this.pv = createTypedArray('float32', arrLen);\n\n    for (i = 0; i < arrLen; i += 1) {\n      this.v[i] = initFrame;\n      this.pv[i] = initFrame;\n    }\n\n    this._caching = {\n      lastFrame: initFrame,\n      lastIndex: 0,\n      value: createTypedArray('float32', arrLen)\n    };\n    this.addEffect = addEffect;\n  }\n\n  var PropertyFactory = function () {\n    function getProp(elem, data, type, mult, container) {\n      if (data.sid) {\n        data = elem.globalData.slotManager.getProp(data);\n      }\n\n      var p;\n\n      if (!data.k.length) {\n        p = new ValueProperty(elem, data, mult, container);\n      } else if (typeof data.k[0] === 'number') {\n        p = new MultiDimensionalProperty(elem, data, mult, container);\n      } else {\n        switch (type) {\n          case 0:\n            p = new KeyframedValueProperty(elem, data, mult, container);\n            break;\n\n          case 1:\n            p = new KeyframedMultidimensionalProperty(elem, data, mult, container);\n            break;\n\n          default:\n            break;\n        }\n      }\n\n      if (p.effectsSequence.length) {\n        container.addDynamicProperty(p);\n      }\n\n      return p;\n    }\n\n    var ob = {\n      getProp: getProp\n    };\n    return ob;\n  }();\n\n  function DynamicPropertyContainer() {}\n\n  DynamicPropertyContainer.prototype = {\n    addDynamicProperty: function addDynamicProperty(prop) {\n      if (this.dynamicProperties.indexOf(prop) === -1) {\n        this.dynamicProperties.push(prop);\n        this.container.addDynamicProperty(this);\n        this._isAnimated = true;\n      }\n    },\n    iterateDynamicProperties: function iterateDynamicProperties() {\n      this._mdf = false;\n      var i;\n      var len = this.dynamicProperties.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.dynamicProperties[i].getValue();\n\n        if (this.dynamicProperties[i]._mdf) {\n          this._mdf = true;\n        }\n      }\n    },\n    initDynamicPropertyContainer: function initDynamicPropertyContainer(container) {\n      this.container = container;\n      this.dynamicProperties = [];\n      this._mdf = false;\n      this._isAnimated = false;\n    }\n  };\n\n  var pointPool = function () {\n    function create() {\n      return createTypedArray('float32', 2);\n    }\n\n    return poolFactory(8, create);\n  }();\n\n  function ShapePath() {\n    this.c = false;\n    this._length = 0;\n    this._maxLength = 8;\n    this.v = createSizedArray(this._maxLength);\n    this.o = createSizedArray(this._maxLength);\n    this.i = createSizedArray(this._maxLength);\n  }\n\n  ShapePath.prototype.setPathData = function (closed, len) {\n    this.c = closed;\n    this.setLength(len);\n    var i = 0;\n\n    while (i < len) {\n      this.v[i] = pointPool.newElement();\n      this.o[i] = pointPool.newElement();\n      this.i[i] = pointPool.newElement();\n      i += 1;\n    }\n  };\n\n  ShapePath.prototype.setLength = function (len) {\n    while (this._maxLength < len) {\n      this.doubleArrayLength();\n    }\n\n    this._length = len;\n  };\n\n  ShapePath.prototype.doubleArrayLength = function () {\n    this.v = this.v.concat(createSizedArray(this._maxLength));\n    this.i = this.i.concat(createSizedArray(this._maxLength));\n    this.o = this.o.concat(createSizedArray(this._maxLength));\n    this._maxLength *= 2;\n  };\n\n  ShapePath.prototype.setXYAt = function (x, y, type, pos, replace) {\n    var arr;\n    this._length = Math.max(this._length, pos + 1);\n\n    if (this._length >= this._maxLength) {\n      this.doubleArrayLength();\n    }\n\n    switch (type) {\n      case 'v':\n        arr = this.v;\n        break;\n\n      case 'i':\n        arr = this.i;\n        break;\n\n      case 'o':\n        arr = this.o;\n        break;\n\n      default:\n        arr = [];\n        break;\n    }\n\n    if (!arr[pos] || arr[pos] && !replace) {\n      arr[pos] = pointPool.newElement();\n    }\n\n    arr[pos][0] = x;\n    arr[pos][1] = y;\n  };\n\n  ShapePath.prototype.setTripleAt = function (vX, vY, oX, oY, iX, iY, pos, replace) {\n    this.setXYAt(vX, vY, 'v', pos, replace);\n    this.setXYAt(oX, oY, 'o', pos, replace);\n    this.setXYAt(iX, iY, 'i', pos, replace);\n  };\n\n  ShapePath.prototype.reverse = function () {\n    var newPath = new ShapePath();\n    newPath.setPathData(this.c, this._length);\n    var vertices = this.v;\n    var outPoints = this.o;\n    var inPoints = this.i;\n    var init = 0;\n\n    if (this.c) {\n      newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false);\n      init = 1;\n    }\n\n    var cnt = this._length - 1;\n    var len = this._length;\n    var i;\n\n    for (i = init; i < len; i += 1) {\n      newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false);\n      cnt -= 1;\n    }\n\n    return newPath;\n  };\n\n  ShapePath.prototype.length = function () {\n    return this._length;\n  };\n\n  var shapePool = function () {\n    function create() {\n      return new ShapePath();\n    }\n\n    function release(shapePath) {\n      var len = shapePath._length;\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        pointPool.release(shapePath.v[i]);\n        pointPool.release(shapePath.i[i]);\n        pointPool.release(shapePath.o[i]);\n        shapePath.v[i] = null;\n        shapePath.i[i] = null;\n        shapePath.o[i] = null;\n      }\n\n      shapePath._length = 0;\n      shapePath.c = false;\n    }\n\n    function clone(shape) {\n      var cloned = factory.newElement();\n      var i;\n      var len = shape._length === undefined ? shape.v.length : shape._length;\n      cloned.setLength(len);\n      cloned.c = shape.c;\n\n      for (i = 0; i < len; i += 1) {\n        cloned.setTripleAt(shape.v[i][0], shape.v[i][1], shape.o[i][0], shape.o[i][1], shape.i[i][0], shape.i[i][1], i);\n      }\n\n      return cloned;\n    }\n\n    var factory = poolFactory(4, create, release);\n    factory.clone = clone;\n    return factory;\n  }();\n\n  function ShapeCollection() {\n    this._length = 0;\n    this._maxLength = 4;\n    this.shapes = createSizedArray(this._maxLength);\n  }\n\n  ShapeCollection.prototype.addShape = function (shapeData) {\n    if (this._length === this._maxLength) {\n      this.shapes = this.shapes.concat(createSizedArray(this._maxLength));\n      this._maxLength *= 2;\n    }\n\n    this.shapes[this._length] = shapeData;\n    this._length += 1;\n  };\n\n  ShapeCollection.prototype.releaseShapes = function () {\n    var i;\n\n    for (i = 0; i < this._length; i += 1) {\n      shapePool.release(this.shapes[i]);\n    }\n\n    this._length = 0;\n  };\n\n  var shapeCollectionPool = function () {\n    var ob = {\n      newShapeCollection: newShapeCollection,\n      release: release\n    };\n    var _length = 0;\n    var _maxLength = 4;\n    var pool = createSizedArray(_maxLength);\n\n    function newShapeCollection() {\n      var shapeCollection;\n\n      if (_length) {\n        _length -= 1;\n        shapeCollection = pool[_length];\n      } else {\n        shapeCollection = new ShapeCollection();\n      }\n\n      return shapeCollection;\n    }\n\n    function release(shapeCollection) {\n      var i;\n      var len = shapeCollection._length;\n\n      for (i = 0; i < len; i += 1) {\n        shapePool.release(shapeCollection.shapes[i]);\n      }\n\n      shapeCollection._length = 0;\n\n      if (_length === _maxLength) {\n        pool = pooling[\"double\"](pool);\n        _maxLength *= 2;\n      }\n\n      pool[_length] = shapeCollection;\n      _length += 1;\n    }\n\n    return ob;\n  }();\n\n  var ShapePropertyFactory = function () {\n    var initFrame = -999999;\n\n    function interpolateShape(frameNum, previousValue, caching) {\n      var iterationIndex = caching.lastIndex;\n      var keyPropS;\n      var keyPropE;\n      var isHold;\n      var j;\n      var k;\n      var jLen;\n      var kLen;\n      var perc;\n      var vertexValue;\n      var kf = this.keyframes;\n\n      if (frameNum < kf[0].t - this.offsetTime) {\n        keyPropS = kf[0].s[0];\n        isHold = true;\n        iterationIndex = 0;\n      } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) {\n        keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0];\n        /* if(kf[kf.length - 1].s){\r\n                  keyPropS = kf[kf.length - 1].s[0];\r\n              }else{\r\n                  keyPropS = kf[kf.length - 2].e[0];\r\n              } */\n\n        isHold = true;\n      } else {\n        var i = iterationIndex;\n        var len = kf.length - 1;\n        var flag = true;\n        var keyData;\n        var nextKeyData;\n        var keyframeMetadata;\n\n        while (flag) {\n          keyData = kf[i];\n          nextKeyData = kf[i + 1];\n\n          if (nextKeyData.t - this.offsetTime > frameNum) {\n            break;\n          }\n\n          if (i < len - 1) {\n            i += 1;\n          } else {\n            flag = false;\n          }\n        }\n\n        keyframeMetadata = this.keyframesMetadata[i] || {};\n        isHold = keyData.h === 1;\n        iterationIndex = i;\n\n        if (!isHold) {\n          if (frameNum >= nextKeyData.t - this.offsetTime) {\n            perc = 1;\n          } else if (frameNum < keyData.t - this.offsetTime) {\n            perc = 0;\n          } else {\n            var fnc;\n\n            if (keyframeMetadata.__fnct) {\n              fnc = keyframeMetadata.__fnct;\n            } else {\n              fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get;\n              keyframeMetadata.__fnct = fnc;\n            }\n\n            perc = fnc((frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime)));\n          }\n\n          keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0];\n        }\n\n        keyPropS = keyData.s[0];\n      }\n\n      jLen = previousValue._length;\n      kLen = keyPropS.i[0].length;\n      caching.lastIndex = iterationIndex;\n\n      for (j = 0; j < jLen; j += 1) {\n        for (k = 0; k < kLen; k += 1) {\n          vertexValue = isHold ? keyPropS.i[j][k] : keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc;\n          previousValue.i[j][k] = vertexValue;\n          vertexValue = isHold ? keyPropS.o[j][k] : keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc;\n          previousValue.o[j][k] = vertexValue;\n          vertexValue = isHold ? keyPropS.v[j][k] : keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc;\n          previousValue.v[j][k] = vertexValue;\n        }\n      }\n    }\n\n    function interpolateShapeCurrentTime() {\n      var frameNum = this.comp.renderedFrame - this.offsetTime;\n      var initTime = this.keyframes[0].t - this.offsetTime;\n      var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n      var lastFrame = this._caching.lastFrame;\n\n      if (!(lastFrame !== initFrame && (lastFrame < initTime && frameNum < initTime || lastFrame > endTime && frameNum > endTime))) {\n        /// /\n        this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0;\n        this.interpolateShape(frameNum, this.pv, this._caching); /// /\n      }\n\n      this._caching.lastFrame = frameNum;\n      return this.pv;\n    }\n\n    function resetShape() {\n      this.paths = this.localShapeCollection;\n    }\n\n    function shapesEqual(shape1, shape2) {\n      if (shape1._length !== shape2._length || shape1.c !== shape2.c) {\n        return false;\n      }\n\n      var i;\n      var len = shape1._length;\n\n      for (i = 0; i < len; i += 1) {\n        if (shape1.v[i][0] !== shape2.v[i][0] || shape1.v[i][1] !== shape2.v[i][1] || shape1.o[i][0] !== shape2.o[i][0] || shape1.o[i][1] !== shape2.o[i][1] || shape1.i[i][0] !== shape2.i[i][0] || shape1.i[i][1] !== shape2.i[i][1]) {\n          return false;\n        }\n      }\n\n      return true;\n    }\n\n    function setVValue(newPath) {\n      if (!shapesEqual(this.v, newPath)) {\n        this.v = shapePool.clone(newPath);\n        this.localShapeCollection.releaseShapes();\n        this.localShapeCollection.addShape(this.v);\n        this._mdf = true;\n        this.paths = this.localShapeCollection;\n      }\n    }\n\n    function processEffectsSequence() {\n      if (this.elem.globalData.frameId === this.frameId) {\n        return;\n      }\n\n      if (!this.effectsSequence.length) {\n        this._mdf = false;\n        return;\n      }\n\n      if (this.lock) {\n        this.setVValue(this.pv);\n        return;\n      }\n\n      this.lock = true;\n      this._mdf = false;\n      var finalValue;\n\n      if (this.kf) {\n        finalValue = this.pv;\n      } else if (this.data.ks) {\n        finalValue = this.data.ks.k;\n      } else {\n        finalValue = this.data.pt.k;\n      }\n\n      var i;\n      var len = this.effectsSequence.length;\n\n      for (i = 0; i < len; i += 1) {\n        finalValue = this.effectsSequence[i](finalValue);\n      }\n\n      this.setVValue(finalValue);\n      this.lock = false;\n      this.frameId = this.elem.globalData.frameId;\n    }\n\n    function ShapeProperty(elem, data, type) {\n      this.propType = 'shape';\n      this.comp = elem.comp;\n      this.container = elem;\n      this.elem = elem;\n      this.data = data;\n      this.k = false;\n      this.kf = false;\n      this._mdf = false;\n      var pathData = type === 3 ? data.pt.k : data.ks.k;\n      this.v = shapePool.clone(pathData);\n      this.pv = shapePool.clone(this.v);\n      this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n      this.paths = this.localShapeCollection;\n      this.paths.addShape(this.v);\n      this.reset = resetShape;\n      this.effectsSequence = [];\n    }\n\n    function addEffect(effectFunction) {\n      this.effectsSequence.push(effectFunction);\n      this.container.addDynamicProperty(this);\n    }\n\n    ShapeProperty.prototype.interpolateShape = interpolateShape;\n    ShapeProperty.prototype.getValue = processEffectsSequence;\n    ShapeProperty.prototype.setVValue = setVValue;\n    ShapeProperty.prototype.addEffect = addEffect;\n\n    function KeyframedShapeProperty(elem, data, type) {\n      this.propType = 'shape';\n      this.comp = elem.comp;\n      this.elem = elem;\n      this.container = elem;\n      this.offsetTime = elem.data.st;\n      this.keyframes = type === 3 ? data.pt.k : data.ks.k;\n      this.keyframesMetadata = [];\n      this.k = true;\n      this.kf = true;\n      var len = this.keyframes[0].s[0].i.length;\n      this.v = shapePool.newElement();\n      this.v.setPathData(this.keyframes[0].s[0].c, len);\n      this.pv = shapePool.clone(this.v);\n      this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n      this.paths = this.localShapeCollection;\n      this.paths.addShape(this.v);\n      this.lastFrame = initFrame;\n      this.reset = resetShape;\n      this._caching = {\n        lastFrame: initFrame,\n        lastIndex: 0\n      };\n      this.effectsSequence = [interpolateShapeCurrentTime.bind(this)];\n    }\n\n    KeyframedShapeProperty.prototype.getValue = processEffectsSequence;\n    KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;\n    KeyframedShapeProperty.prototype.setVValue = setVValue;\n    KeyframedShapeProperty.prototype.addEffect = addEffect;\n\n    var EllShapeProperty = function () {\n      var cPoint = roundCorner;\n\n      function EllShapePropertyFactory(elem, data) {\n        this.v = shapePool.newElement();\n        this.v.setPathData(true, 4);\n        this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n        this.paths = this.localShapeCollection;\n        this.localShapeCollection.addShape(this.v);\n        this.d = data.d;\n        this.elem = elem;\n        this.comp = elem.comp;\n        this.frameId = -1;\n        this.initDynamicPropertyContainer(elem);\n        this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n        this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n\n        if (this.dynamicProperties.length) {\n          this.k = true;\n        } else {\n          this.k = false;\n          this.convertEllToPath();\n        }\n      }\n\n      EllShapePropertyFactory.prototype = {\n        reset: resetShape,\n        getValue: function getValue() {\n          if (this.elem.globalData.frameId === this.frameId) {\n            return;\n          }\n\n          this.frameId = this.elem.globalData.frameId;\n          this.iterateDynamicProperties();\n\n          if (this._mdf) {\n            this.convertEllToPath();\n          }\n        },\n        convertEllToPath: function convertEllToPath() {\n          var p0 = this.p.v[0];\n          var p1 = this.p.v[1];\n          var s0 = this.s.v[0] / 2;\n          var s1 = this.s.v[1] / 2;\n\n          var _cw = this.d !== 3;\n\n          var _v = this.v;\n          _v.v[0][0] = p0;\n          _v.v[0][1] = p1 - s1;\n          _v.v[1][0] = _cw ? p0 + s0 : p0 - s0;\n          _v.v[1][1] = p1;\n          _v.v[2][0] = p0;\n          _v.v[2][1] = p1 + s1;\n          _v.v[3][0] = _cw ? p0 - s0 : p0 + s0;\n          _v.v[3][1] = p1;\n          _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n          _v.i[0][1] = p1 - s1;\n          _v.i[1][0] = _cw ? p0 + s0 : p0 - s0;\n          _v.i[1][1] = p1 - s1 * cPoint;\n          _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n          _v.i[2][1] = p1 + s1;\n          _v.i[3][0] = _cw ? p0 - s0 : p0 + s0;\n          _v.i[3][1] = p1 + s1 * cPoint;\n          _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n          _v.o[0][1] = p1 - s1;\n          _v.o[1][0] = _cw ? p0 + s0 : p0 - s0;\n          _v.o[1][1] = p1 + s1 * cPoint;\n          _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n          _v.o[2][1] = p1 + s1;\n          _v.o[3][0] = _cw ? p0 - s0 : p0 + s0;\n          _v.o[3][1] = p1 - s1 * cPoint;\n        }\n      };\n      extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory);\n      return EllShapePropertyFactory;\n    }();\n\n    var StarShapeProperty = function () {\n      function StarShapePropertyFactory(elem, data) {\n        this.v = shapePool.newElement();\n        this.v.setPathData(true, 0);\n        this.elem = elem;\n        this.comp = elem.comp;\n        this.data = data;\n        this.frameId = -1;\n        this.d = data.d;\n        this.initDynamicPropertyContainer(elem);\n\n        if (data.sy === 1) {\n          this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this);\n          this.is = PropertyFactory.getProp(elem, data.is, 0, 0.01, this);\n          this.convertToPath = this.convertStarToPath;\n        } else {\n          this.convertToPath = this.convertPolygonToPath;\n        }\n\n        this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this);\n        this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n        this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this);\n        this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this);\n        this.os = PropertyFactory.getProp(elem, data.os, 0, 0.01, this);\n        this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n        this.localShapeCollection.addShape(this.v);\n        this.paths = this.localShapeCollection;\n\n        if (this.dynamicProperties.length) {\n          this.k = true;\n        } else {\n          this.k = false;\n          this.convertToPath();\n        }\n      }\n\n      StarShapePropertyFactory.prototype = {\n        reset: resetShape,\n        getValue: function getValue() {\n          if (this.elem.globalData.frameId === this.frameId) {\n            return;\n          }\n\n          this.frameId = this.elem.globalData.frameId;\n          this.iterateDynamicProperties();\n\n          if (this._mdf) {\n            this.convertToPath();\n          }\n        },\n        convertStarToPath: function convertStarToPath() {\n          var numPts = Math.floor(this.pt.v) * 2;\n          var angle = Math.PI * 2 / numPts;\n          /* this.v.v.length = numPts;\r\n                  this.v.i.length = numPts;\r\n                  this.v.o.length = numPts; */\n\n          var longFlag = true;\n          var longRad = this.or.v;\n          var shortRad = this.ir.v;\n          var longRound = this.os.v;\n          var shortRound = this.is.v;\n          var longPerimSegment = 2 * Math.PI * longRad / (numPts * 2);\n          var shortPerimSegment = 2 * Math.PI * shortRad / (numPts * 2);\n          var i;\n          var rad;\n          var roundness;\n          var perimSegment;\n          var currentAng = -Math.PI / 2;\n          currentAng += this.r.v;\n          var dir = this.data.d === 3 ? -1 : 1;\n          this.v._length = 0;\n\n          for (i = 0; i < numPts; i += 1) {\n            rad = longFlag ? longRad : shortRad;\n            roundness = longFlag ? longRound : shortRound;\n            perimSegment = longFlag ? longPerimSegment : shortPerimSegment;\n            var x = rad * Math.cos(currentAng);\n            var y = rad * Math.sin(currentAng);\n            var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n            var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n            x += +this.p.v[0];\n            y += +this.p.v[1];\n            this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n            /* this.v.v[i] = [x,y];\r\n                      this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];\r\n                      this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];\r\n                      this.v._length = numPts; */\n\n            longFlag = !longFlag;\n            currentAng += angle * dir;\n          }\n        },\n        convertPolygonToPath: function convertPolygonToPath() {\n          var numPts = Math.floor(this.pt.v);\n          var angle = Math.PI * 2 / numPts;\n          var rad = this.or.v;\n          var roundness = this.os.v;\n          var perimSegment = 2 * Math.PI * rad / (numPts * 4);\n          var i;\n          var currentAng = -Math.PI * 0.5;\n          var dir = this.data.d === 3 ? -1 : 1;\n          currentAng += this.r.v;\n          this.v._length = 0;\n\n          for (i = 0; i < numPts; i += 1) {\n            var x = rad * Math.cos(currentAng);\n            var y = rad * Math.sin(currentAng);\n            var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n            var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n            x += +this.p.v[0];\n            y += +this.p.v[1];\n            this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n            currentAng += angle * dir;\n          }\n\n          this.paths.length = 0;\n          this.paths[0] = this.v;\n        }\n      };\n      extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory);\n      return StarShapePropertyFactory;\n    }();\n\n    var RectShapeProperty = function () {\n      function RectShapePropertyFactory(elem, data) {\n        this.v = shapePool.newElement();\n        this.v.c = true;\n        this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n        this.localShapeCollection.addShape(this.v);\n        this.paths = this.localShapeCollection;\n        this.elem = elem;\n        this.comp = elem.comp;\n        this.frameId = -1;\n        this.d = data.d;\n        this.initDynamicPropertyContainer(elem);\n        this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n        this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n        this.r = PropertyFactory.getProp(elem, data.r, 0, 0, this);\n\n        if (this.dynamicProperties.length) {\n          this.k = true;\n        } else {\n          this.k = false;\n          this.convertRectToPath();\n        }\n      }\n\n      RectShapePropertyFactory.prototype = {\n        convertRectToPath: function convertRectToPath() {\n          var p0 = this.p.v[0];\n          var p1 = this.p.v[1];\n          var v0 = this.s.v[0] / 2;\n          var v1 = this.s.v[1] / 2;\n          var round = bmMin(v0, v1, this.r.v);\n          var cPoint = round * (1 - roundCorner);\n          this.v._length = 0;\n\n          if (this.d === 2 || this.d === 1) {\n            this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true);\n            this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true);\n\n            if (round !== 0) {\n              this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true);\n              this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true);\n              this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true);\n              this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true);\n            } else {\n              this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2);\n              this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3);\n            }\n          } else {\n            this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true);\n\n            if (round !== 0) {\n              this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true);\n              this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true);\n              this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true);\n              this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true);\n              this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true);\n            } else {\n              this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true);\n              this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true);\n              this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true);\n            }\n          }\n        },\n        getValue: function getValue() {\n          if (this.elem.globalData.frameId === this.frameId) {\n            return;\n          }\n\n          this.frameId = this.elem.globalData.frameId;\n          this.iterateDynamicProperties();\n\n          if (this._mdf) {\n            this.convertRectToPath();\n          }\n        },\n        reset: resetShape\n      };\n      extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory);\n      return RectShapePropertyFactory;\n    }();\n\n    function getShapeProp(elem, data, type) {\n      var prop;\n\n      if (type === 3 || type === 4) {\n        var dataProp = type === 3 ? data.pt : data.ks;\n        var keys = dataProp.k;\n\n        if (keys.length) {\n          prop = new KeyframedShapeProperty(elem, data, type);\n        } else {\n          prop = new ShapeProperty(elem, data, type);\n        }\n      } else if (type === 5) {\n        prop = new RectShapeProperty(elem, data);\n      } else if (type === 6) {\n        prop = new EllShapeProperty(elem, data);\n      } else if (type === 7) {\n        prop = new StarShapeProperty(elem, data);\n      }\n\n      if (prop.k) {\n        elem.addDynamicProperty(prop);\n      }\n\n      return prop;\n    }\n\n    function getConstructorFunction() {\n      return ShapeProperty;\n    }\n\n    function getKeyframedConstructorFunction() {\n      return KeyframedShapeProperty;\n    }\n\n    var ob = {};\n    ob.getShapeProp = getShapeProp;\n    ob.getConstructorFunction = getConstructorFunction;\n    ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;\n    return ob;\n  }();\n\n  /*!\r\n   Transformation Matrix v2.0\r\n   (c) Epistemex 2014-2015\r\n   www.epistemex.com\r\n   By Ken Fyrstenberg\r\n   Contributions by leeoniya.\r\n   License: MIT, header required.\r\n   */\n\n  /**\r\n   * 2D transformation matrix object initialized with identity matrix.\r\n   *\r\n   * The matrix can synchronize a canvas context by supplying the context\r\n   * as an argument, or later apply current absolute transform to an\r\n   * existing context.\r\n   *\r\n   * All values are handled as floating point values.\r\n   *\r\n   * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix\r\n   * @prop {number} a - scale x\r\n   * @prop {number} b - shear y\r\n   * @prop {number} c - shear x\r\n   * @prop {number} d - scale y\r\n   * @prop {number} e - translate x\r\n   * @prop {number} f - translate y\r\n   * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context\r\n   * @constructor\r\n   */\n\n  var Matrix = function () {\n    var _cos = Math.cos;\n    var _sin = Math.sin;\n    var _tan = Math.tan;\n    var _rnd = Math.round;\n\n    function reset() {\n      this.props[0] = 1;\n      this.props[1] = 0;\n      this.props[2] = 0;\n      this.props[3] = 0;\n      this.props[4] = 0;\n      this.props[5] = 1;\n      this.props[6] = 0;\n      this.props[7] = 0;\n      this.props[8] = 0;\n      this.props[9] = 0;\n      this.props[10] = 1;\n      this.props[11] = 0;\n      this.props[12] = 0;\n      this.props[13] = 0;\n      this.props[14] = 0;\n      this.props[15] = 1;\n      return this;\n    }\n\n    function rotate(angle) {\n      if (angle === 0) {\n        return this;\n      }\n\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n    }\n\n    function rotateX(angle) {\n      if (angle === 0) {\n        return this;\n      }\n\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);\n    }\n\n    function rotateY(angle) {\n      if (angle === 0) {\n        return this;\n      }\n\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);\n    }\n\n    function rotateZ(angle) {\n      if (angle === 0) {\n        return this;\n      }\n\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n    }\n\n    function shear(sx, sy) {\n      return this._t(1, sy, sx, 1, 0, 0);\n    }\n\n    function skew(ax, ay) {\n      return this.shear(_tan(ax), _tan(ay));\n    }\n\n    function skewFromAxis(ax, angle) {\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(1, 0, 0, 0, _tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); // return this._t(mCos, mSin, -mSin, mCos, 0, 0)._t(1, 0, _tan(ax), 1, 0, 0)._t(mCos, -mSin, mSin, mCos, 0, 0);\n    }\n\n    function scale(sx, sy, sz) {\n      if (!sz && sz !== 0) {\n        sz = 1;\n      }\n\n      if (sx === 1 && sy === 1 && sz === 1) {\n        return this;\n      }\n\n      return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);\n    }\n\n    function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {\n      this.props[0] = a;\n      this.props[1] = b;\n      this.props[2] = c;\n      this.props[3] = d;\n      this.props[4] = e;\n      this.props[5] = f;\n      this.props[6] = g;\n      this.props[7] = h;\n      this.props[8] = i;\n      this.props[9] = j;\n      this.props[10] = k;\n      this.props[11] = l;\n      this.props[12] = m;\n      this.props[13] = n;\n      this.props[14] = o;\n      this.props[15] = p;\n      return this;\n    }\n\n    function translate(tx, ty, tz) {\n      tz = tz || 0;\n\n      if (tx !== 0 || ty !== 0 || tz !== 0) {\n        return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1);\n      }\n\n      return this;\n    }\n\n    function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) {\n      var _p = this.props;\n\n      if (a2 === 1 && b2 === 0 && c2 === 0 && d2 === 0 && e2 === 0 && f2 === 1 && g2 === 0 && h2 === 0 && i2 === 0 && j2 === 0 && k2 === 1 && l2 === 0) {\n        // NOTE: commenting this condition because TurboFan deoptimizes code when present\n        // if(m2 !== 0 || n2 !== 0 || o2 !== 0){\n        _p[12] = _p[12] * a2 + _p[15] * m2;\n        _p[13] = _p[13] * f2 + _p[15] * n2;\n        _p[14] = _p[14] * k2 + _p[15] * o2;\n        _p[15] *= p2; // }\n\n        this._identityCalculated = false;\n        return this;\n      }\n\n      var a1 = _p[0];\n      var b1 = _p[1];\n      var c1 = _p[2];\n      var d1 = _p[3];\n      var e1 = _p[4];\n      var f1 = _p[5];\n      var g1 = _p[6];\n      var h1 = _p[7];\n      var i1 = _p[8];\n      var j1 = _p[9];\n      var k1 = _p[10];\n      var l1 = _p[11];\n      var m1 = _p[12];\n      var n1 = _p[13];\n      var o1 = _p[14];\n      var p1 = _p[15];\n      /* matrix order (canvas compatible):\r\n           * ace\r\n           * bdf\r\n           * 001\r\n           */\n\n      _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2;\n      _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2;\n      _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2;\n      _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2;\n      _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2;\n      _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2;\n      _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2;\n      _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2;\n      _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2;\n      _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2;\n      _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2;\n      _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2;\n      _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2;\n      _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2;\n      _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2;\n      _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2;\n      this._identityCalculated = false;\n      return this;\n    }\n\n    function multiply(matrix) {\n      var matrixProps = matrix.props;\n      return this.transform(matrixProps[0], matrixProps[1], matrixProps[2], matrixProps[3], matrixProps[4], matrixProps[5], matrixProps[6], matrixProps[7], matrixProps[8], matrixProps[9], matrixProps[10], matrixProps[11], matrixProps[12], matrixProps[13], matrixProps[14], matrixProps[15]);\n    }\n\n    function isIdentity() {\n      if (!this._identityCalculated) {\n        this._identity = !(this.props[0] !== 1 || this.props[1] !== 0 || this.props[2] !== 0 || this.props[3] !== 0 || this.props[4] !== 0 || this.props[5] !== 1 || this.props[6] !== 0 || this.props[7] !== 0 || this.props[8] !== 0 || this.props[9] !== 0 || this.props[10] !== 1 || this.props[11] !== 0 || this.props[12] !== 0 || this.props[13] !== 0 || this.props[14] !== 0 || this.props[15] !== 1);\n        this._identityCalculated = true;\n      }\n\n      return this._identity;\n    }\n\n    function equals(matr) {\n      var i = 0;\n\n      while (i < 16) {\n        if (matr.props[i] !== this.props[i]) {\n          return false;\n        }\n\n        i += 1;\n      }\n\n      return true;\n    }\n\n    function clone(matr) {\n      var i;\n\n      for (i = 0; i < 16; i += 1) {\n        matr.props[i] = this.props[i];\n      }\n\n      return matr;\n    }\n\n    function cloneFromProps(props) {\n      var i;\n\n      for (i = 0; i < 16; i += 1) {\n        this.props[i] = props[i];\n      }\n    }\n\n    function applyToPoint(x, y, z) {\n      return {\n        x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\n        y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\n        z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]\n      };\n      /* return {\r\n           x: x * me.a + y * me.c + me.e,\r\n           y: x * me.b + y * me.d + me.f\r\n           }; */\n    }\n\n    function applyToX(x, y, z) {\n      return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12];\n    }\n\n    function applyToY(x, y, z) {\n      return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\n    }\n\n    function applyToZ(x, y, z) {\n      return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14];\n    }\n\n    function getInverseMatrix() {\n      var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4];\n      var a = this.props[5] / determinant;\n      var b = -this.props[1] / determinant;\n      var c = -this.props[4] / determinant;\n      var d = this.props[0] / determinant;\n      var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant;\n      var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant;\n      var inverseMatrix = new Matrix();\n      inverseMatrix.props[0] = a;\n      inverseMatrix.props[1] = b;\n      inverseMatrix.props[4] = c;\n      inverseMatrix.props[5] = d;\n      inverseMatrix.props[12] = e;\n      inverseMatrix.props[13] = f;\n      return inverseMatrix;\n    }\n\n    function inversePoint(pt) {\n      var inverseMatrix = this.getInverseMatrix();\n      return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0);\n    }\n\n    function inversePoints(pts) {\n      var i;\n      var len = pts.length;\n      var retPts = [];\n\n      for (i = 0; i < len; i += 1) {\n        retPts[i] = inversePoint(pts[i]);\n      }\n\n      return retPts;\n    }\n\n    function applyToTriplePoints(pt1, pt2, pt3) {\n      var arr = createTypedArray('float32', 6);\n\n      if (this.isIdentity()) {\n        arr[0] = pt1[0];\n        arr[1] = pt1[1];\n        arr[2] = pt2[0];\n        arr[3] = pt2[1];\n        arr[4] = pt3[0];\n        arr[5] = pt3[1];\n      } else {\n        var p0 = this.props[0];\n        var p1 = this.props[1];\n        var p4 = this.props[4];\n        var p5 = this.props[5];\n        var p12 = this.props[12];\n        var p13 = this.props[13];\n        arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12;\n        arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13;\n        arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12;\n        arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13;\n        arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12;\n        arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13;\n      }\n\n      return arr;\n    }\n\n    function applyToPointArray(x, y, z) {\n      var arr;\n\n      if (this.isIdentity()) {\n        arr = [x, y, z];\n      } else {\n        arr = [x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12], x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13], x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]];\n      }\n\n      return arr;\n    }\n\n    function applyToPointStringified(x, y) {\n      if (this.isIdentity()) {\n        return x + ',' + y;\n      }\n\n      var _p = this.props;\n      return Math.round((x * _p[0] + y * _p[4] + _p[12]) * 100) / 100 + ',' + Math.round((x * _p[1] + y * _p[5] + _p[13]) * 100) / 100;\n    }\n\n    function toCSS() {\n      // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n\n      /* if(this.isIdentity()) {\r\n              return '';\r\n          } */\n      var i = 0;\n      var props = this.props;\n      var cssValue = 'matrix3d(';\n      var v = 10000;\n\n      while (i < 16) {\n        cssValue += _rnd(props[i] * v) / v;\n        cssValue += i === 15 ? ')' : ',';\n        i += 1;\n      }\n\n      return cssValue;\n    }\n\n    function roundMatrixProperty(val) {\n      var v = 10000;\n\n      if (val < 0.000001 && val > 0 || val > -0.000001 && val < 0) {\n        return _rnd(val * v) / v;\n      }\n\n      return val;\n    }\n\n    function to2dCSS() {\n      // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n\n      /* if(this.isIdentity()) {\r\n              return '';\r\n          } */\n      var props = this.props;\n\n      var _a = roundMatrixProperty(props[0]);\n\n      var _b = roundMatrixProperty(props[1]);\n\n      var _c = roundMatrixProperty(props[4]);\n\n      var _d = roundMatrixProperty(props[5]);\n\n      var _e = roundMatrixProperty(props[12]);\n\n      var _f = roundMatrixProperty(props[13]);\n\n      return 'matrix(' + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + ')';\n    }\n\n    return function () {\n      this.reset = reset;\n      this.rotate = rotate;\n      this.rotateX = rotateX;\n      this.rotateY = rotateY;\n      this.rotateZ = rotateZ;\n      this.skew = skew;\n      this.skewFromAxis = skewFromAxis;\n      this.shear = shear;\n      this.scale = scale;\n      this.setTransform = setTransform;\n      this.translate = translate;\n      this.transform = transform;\n      this.multiply = multiply;\n      this.applyToPoint = applyToPoint;\n      this.applyToX = applyToX;\n      this.applyToY = applyToY;\n      this.applyToZ = applyToZ;\n      this.applyToPointArray = applyToPointArray;\n      this.applyToTriplePoints = applyToTriplePoints;\n      this.applyToPointStringified = applyToPointStringified;\n      this.toCSS = toCSS;\n      this.to2dCSS = to2dCSS;\n      this.clone = clone;\n      this.cloneFromProps = cloneFromProps;\n      this.equals = equals;\n      this.inversePoints = inversePoints;\n      this.inversePoint = inversePoint;\n      this.getInverseMatrix = getInverseMatrix;\n      this._t = this.transform;\n      this.isIdentity = isIdentity;\n      this._identity = true;\n      this._identityCalculated = false;\n      this.props = createTypedArray('float32', 16);\n      this.reset();\n    };\n  }();\n\n  function _typeof$3(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$3 = function _typeof(obj) { return typeof obj; }; } else { _typeof$3 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$3(obj); }\n  var lottie = {};\n  var standalone = '__[STANDALONE]__';\n  var animationData = '__[ANIMATIONDATA]__';\n  var renderer = '';\n\n  function setLocation(href) {\n    setLocationHref(href);\n  }\n\n  function searchAnimations() {\n    if (standalone === true) {\n      animationManager.searchAnimations(animationData, standalone, renderer);\n    } else {\n      animationManager.searchAnimations();\n    }\n  }\n\n  function setSubframeRendering(flag) {\n    setSubframeEnabled(flag);\n  }\n\n  function setPrefix(prefix) {\n    setIdPrefix(prefix);\n  }\n\n  function loadAnimation(params) {\n    if (standalone === true) {\n      params.animationData = JSON.parse(animationData);\n    }\n\n    return animationManager.loadAnimation(params);\n  }\n\n  function setQuality(value) {\n    if (typeof value === 'string') {\n      switch (value) {\n        case 'high':\n          setDefaultCurveSegments(200);\n          break;\n\n        default:\n        case 'medium':\n          setDefaultCurveSegments(50);\n          break;\n\n        case 'low':\n          setDefaultCurveSegments(10);\n          break;\n      }\n    } else if (!isNaN(value) && value > 1) {\n      setDefaultCurveSegments(value);\n    }\n\n    if (getDefaultCurveSegments() >= 50) {\n      roundValues(false);\n    } else {\n      roundValues(true);\n    }\n  }\n\n  function inBrowser() {\n    return typeof navigator !== 'undefined';\n  }\n\n  function installPlugin(type, plugin) {\n    if (type === 'expressions') {\n      setExpressionsPlugin(plugin);\n    }\n  }\n\n  function getFactory(name) {\n    switch (name) {\n      case 'propertyFactory':\n        return PropertyFactory;\n\n      case 'shapePropertyFactory':\n        return ShapePropertyFactory;\n\n      case 'matrix':\n        return Matrix;\n\n      default:\n        return null;\n    }\n  }\n\n  lottie.play = animationManager.play;\n  lottie.pause = animationManager.pause;\n  lottie.setLocationHref = setLocation;\n  lottie.togglePause = animationManager.togglePause;\n  lottie.setSpeed = animationManager.setSpeed;\n  lottie.setDirection = animationManager.setDirection;\n  lottie.stop = animationManager.stop;\n  lottie.searchAnimations = searchAnimations;\n  lottie.registerAnimation = animationManager.registerAnimation;\n  lottie.loadAnimation = loadAnimation;\n  lottie.setSubframeRendering = setSubframeRendering;\n  lottie.resize = animationManager.resize; // lottie.start = start;\n\n  lottie.goToAndStop = animationManager.goToAndStop;\n  lottie.destroy = animationManager.destroy;\n  lottie.setQuality = setQuality;\n  lottie.inBrowser = inBrowser;\n  lottie.installPlugin = installPlugin;\n  lottie.freeze = animationManager.freeze;\n  lottie.unfreeze = animationManager.unfreeze;\n  lottie.setVolume = animationManager.setVolume;\n  lottie.mute = animationManager.mute;\n  lottie.unmute = animationManager.unmute;\n  lottie.getRegisteredAnimations = animationManager.getRegisteredAnimations;\n  lottie.useWebWorker = setWebWorker;\n  lottie.setIDPrefix = setPrefix;\n  lottie.__getFactory = getFactory;\n  lottie.version = '5.12.2';\n\n  function checkReady() {\n    if (document.readyState === 'complete') {\n      clearInterval(readyStateCheckInterval);\n      searchAnimations();\n    }\n  }\n\n  function getQueryVariable(variable) {\n    var vars = queryString.split('&');\n\n    for (var i = 0; i < vars.length; i += 1) {\n      var pair = vars[i].split('=');\n\n      if (decodeURIComponent(pair[0]) == variable) {\n        // eslint-disable-line eqeqeq\n        return decodeURIComponent(pair[1]);\n      }\n    }\n\n    return null;\n  }\n\n  var queryString = '';\n\n  if (standalone) {\n    var scripts = document.getElementsByTagName('script');\n    var index = scripts.length - 1;\n    var myScript = scripts[index] || {\n      src: ''\n    };\n    queryString = myScript.src ? myScript.src.replace(/^[^\\?]+\\??/, '') : ''; // eslint-disable-line no-useless-escape\n\n    renderer = getQueryVariable('renderer');\n  }\n\n  var readyStateCheckInterval = setInterval(checkReady, 100); // this adds bodymovin to the window object for backwards compatibility\n\n  try {\n    if (!((typeof exports === \"undefined\" ? \"undefined\" : _typeof$3(exports)) === 'object' && typeof module !== 'undefined') && !(typeof define === 'function' && define.amd) // eslint-disable-line no-undef\n    ) {\n      window.bodymovin = lottie;\n    }\n  } catch (err) {//\n  }\n\n  var ShapeModifiers = function () {\n    var ob = {};\n    var modifiers = {};\n    ob.registerModifier = registerModifier;\n    ob.getModifier = getModifier;\n\n    function registerModifier(nm, factory) {\n      if (!modifiers[nm]) {\n        modifiers[nm] = factory;\n      }\n    }\n\n    function getModifier(nm, elem, data) {\n      return new modifiers[nm](elem, data);\n    }\n\n    return ob;\n  }();\n\n  function ShapeModifier() {}\n\n  ShapeModifier.prototype.initModifierProperties = function () {};\n\n  ShapeModifier.prototype.addShapeToModifier = function () {};\n\n  ShapeModifier.prototype.addShape = function (data) {\n    if (!this.closed) {\n      // Adding shape to dynamic properties. It covers the case where a shape has no effects applied, to reset it's _mdf state on every tick.\n      data.sh.container.addDynamicProperty(data.sh);\n      var shapeData = {\n        shape: data.sh,\n        data: data,\n        localShapeCollection: shapeCollectionPool.newShapeCollection()\n      };\n      this.shapes.push(shapeData);\n      this.addShapeToModifier(shapeData);\n\n      if (this._isAnimated) {\n        data.setAsAnimated();\n      }\n    }\n  };\n\n  ShapeModifier.prototype.init = function (elem, data) {\n    this.shapes = [];\n    this.elem = elem;\n    this.initDynamicPropertyContainer(elem);\n    this.initModifierProperties(elem, data);\n    this.frameId = initialDefaultFrame;\n    this.closed = false;\n    this.k = false;\n\n    if (this.dynamicProperties.length) {\n      this.k = true;\n    } else {\n      this.getValue(true);\n    }\n  };\n\n  ShapeModifier.prototype.processKeys = function () {\n    if (this.elem.globalData.frameId === this.frameId) {\n      return;\n    }\n\n    this.frameId = this.elem.globalData.frameId;\n    this.iterateDynamicProperties();\n  };\n\n  extendPrototype([DynamicPropertyContainer], ShapeModifier);\n\n  function TrimModifier() {}\n\n  extendPrototype([ShapeModifier], TrimModifier);\n\n  TrimModifier.prototype.initModifierProperties = function (elem, data) {\n    this.s = PropertyFactory.getProp(elem, data.s, 0, 0.01, this);\n    this.e = PropertyFactory.getProp(elem, data.e, 0, 0.01, this);\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this);\n    this.sValue = 0;\n    this.eValue = 0;\n    this.getValue = this.processKeys;\n    this.m = data.m;\n    this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length;\n  };\n\n  TrimModifier.prototype.addShapeToModifier = function (shapeData) {\n    shapeData.pathsData = [];\n  };\n\n  TrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) {\n    var segments = [];\n\n    if (e <= 1) {\n      segments.push({\n        s: s,\n        e: e\n      });\n    } else if (s >= 1) {\n      segments.push({\n        s: s - 1,\n        e: e - 1\n      });\n    } else {\n      segments.push({\n        s: s,\n        e: 1\n      });\n      segments.push({\n        s: 0,\n        e: e - 1\n      });\n    }\n\n    var shapeSegments = [];\n    var i;\n    var len = segments.length;\n    var segmentOb;\n\n    for (i = 0; i < len; i += 1) {\n      segmentOb = segments[i];\n\n      if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) {\n        var shapeS;\n        var shapeE;\n\n        if (segmentOb.s * totalModifierLength <= addedLength) {\n          shapeS = 0;\n        } else {\n          shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;\n        }\n\n        if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {\n          shapeE = 1;\n        } else {\n          shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength;\n        }\n\n        shapeSegments.push([shapeS, shapeE]);\n      }\n    }\n\n    if (!shapeSegments.length) {\n      shapeSegments.push([0, 0]);\n    }\n\n    return shapeSegments;\n  };\n\n  TrimModifier.prototype.releasePathsData = function (pathsData) {\n    var i;\n    var len = pathsData.length;\n\n    for (i = 0; i < len; i += 1) {\n      segmentsLengthPool.release(pathsData[i]);\n    }\n\n    pathsData.length = 0;\n    return pathsData;\n  };\n\n  TrimModifier.prototype.processShapes = function (_isFirstFrame) {\n    var s;\n    var e;\n\n    if (this._mdf || _isFirstFrame) {\n      var o = this.o.v % 360 / 360;\n\n      if (o < 0) {\n        o += 1;\n      }\n\n      if (this.s.v > 1) {\n        s = 1 + o;\n      } else if (this.s.v < 0) {\n        s = 0 + o;\n      } else {\n        s = this.s.v + o;\n      }\n\n      if (this.e.v > 1) {\n        e = 1 + o;\n      } else if (this.e.v < 0) {\n        e = 0 + o;\n      } else {\n        e = this.e.v + o;\n      }\n\n      if (s > e) {\n        var _s = s;\n        s = e;\n        e = _s;\n      }\n\n      s = Math.round(s * 10000) * 0.0001;\n      e = Math.round(e * 10000) * 0.0001;\n      this.sValue = s;\n      this.eValue = e;\n    } else {\n      s = this.sValue;\n      e = this.eValue;\n    }\n\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var pathsData;\n    var pathData;\n    var totalShapeLength;\n    var totalModifierLength = 0;\n\n    if (e === s) {\n      for (i = 0; i < len; i += 1) {\n        this.shapes[i].localShapeCollection.releaseShapes();\n        this.shapes[i].shape._mdf = true;\n        this.shapes[i].shape.paths = this.shapes[i].localShapeCollection;\n\n        if (this._mdf) {\n          this.shapes[i].pathsData.length = 0;\n        }\n      }\n    } else if (!(e === 1 && s === 0 || e === 0 && s === 1)) {\n      var segments = [];\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i]; // if shape hasn't changed and trim properties haven't changed, cached previous path can be used\n\n        if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) {\n          shapeData.shape.paths = shapeData.localShapeCollection;\n        } else {\n          shapePaths = shapeData.shape.paths;\n          jLen = shapePaths._length;\n          totalShapeLength = 0;\n\n          if (!shapeData.shape._mdf && shapeData.pathsData.length) {\n            totalShapeLength = shapeData.totalShapeLength;\n          } else {\n            pathsData = this.releasePathsData(shapeData.pathsData);\n\n            for (j = 0; j < jLen; j += 1) {\n              pathData = bez.getSegmentsLength(shapePaths.shapes[j]);\n              pathsData.push(pathData);\n              totalShapeLength += pathData.totalLength;\n            }\n\n            shapeData.totalShapeLength = totalShapeLength;\n            shapeData.pathsData = pathsData;\n          }\n\n          totalModifierLength += totalShapeLength;\n          shapeData.shape._mdf = true;\n        }\n      }\n\n      var shapeS = s;\n      var shapeE = e;\n      var addedLength = 0;\n      var edges;\n\n      for (i = len - 1; i >= 0; i -= 1) {\n        shapeData = this.shapes[i];\n\n        if (shapeData.shape._mdf) {\n          localShapeCollection = shapeData.localShapeCollection;\n          localShapeCollection.releaseShapes(); // if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group\n\n          if (this.m === 2 && len > 1) {\n            edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength);\n            addedLength += shapeData.totalShapeLength;\n          } else {\n            edges = [[shapeS, shapeE]];\n          }\n\n          jLen = edges.length;\n\n          for (j = 0; j < jLen; j += 1) {\n            shapeS = edges[j][0];\n            shapeE = edges[j][1];\n            segments.length = 0;\n\n            if (shapeE <= 1) {\n              segments.push({\n                s: shapeData.totalShapeLength * shapeS,\n                e: shapeData.totalShapeLength * shapeE\n              });\n            } else if (shapeS >= 1) {\n              segments.push({\n                s: shapeData.totalShapeLength * (shapeS - 1),\n                e: shapeData.totalShapeLength * (shapeE - 1)\n              });\n            } else {\n              segments.push({\n                s: shapeData.totalShapeLength * shapeS,\n                e: shapeData.totalShapeLength\n              });\n              segments.push({\n                s: 0,\n                e: shapeData.totalShapeLength * (shapeE - 1)\n              });\n            }\n\n            var newShapesData = this.addShapes(shapeData, segments[0]);\n\n            if (segments[0].s !== segments[0].e) {\n              if (segments.length > 1) {\n                var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1];\n\n                if (lastShapeInCollection.c) {\n                  var lastShape = newShapesData.pop();\n                  this.addPaths(newShapesData, localShapeCollection);\n                  newShapesData = this.addShapes(shapeData, segments[1], lastShape);\n                } else {\n                  this.addPaths(newShapesData, localShapeCollection);\n                  newShapesData = this.addShapes(shapeData, segments[1]);\n                }\n              }\n\n              this.addPaths(newShapesData, localShapeCollection);\n            }\n          }\n\n          shapeData.shape.paths = localShapeCollection;\n        }\n      }\n    } else if (this._mdf) {\n      for (i = 0; i < len; i += 1) {\n        // Releasign Trim Cached paths data when no trim applied in case shapes are modified inbetween.\n        // Don't remove this even if it's losing cached info.\n        this.shapes[i].pathsData.length = 0;\n        this.shapes[i].shape._mdf = true;\n      }\n    }\n  };\n\n  TrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) {\n    var i;\n    var len = newPaths.length;\n\n    for (i = 0; i < len; i += 1) {\n      localShapeCollection.addShape(newPaths[i]);\n    }\n  };\n\n  TrimModifier.prototype.addSegment = function (pt1, pt2, pt3, pt4, shapePath, pos, newShape) {\n    shapePath.setXYAt(pt2[0], pt2[1], 'o', pos);\n    shapePath.setXYAt(pt3[0], pt3[1], 'i', pos + 1);\n\n    if (newShape) {\n      shapePath.setXYAt(pt1[0], pt1[1], 'v', pos);\n    }\n\n    shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1);\n  };\n\n  TrimModifier.prototype.addSegmentFromArray = function (points, shapePath, pos, newShape) {\n    shapePath.setXYAt(points[1], points[5], 'o', pos);\n    shapePath.setXYAt(points[2], points[6], 'i', pos + 1);\n\n    if (newShape) {\n      shapePath.setXYAt(points[0], points[4], 'v', pos);\n    }\n\n    shapePath.setXYAt(points[3], points[7], 'v', pos + 1);\n  };\n\n  TrimModifier.prototype.addShapes = function (shapeData, shapeSegment, shapePath) {\n    var pathsData = shapeData.pathsData;\n    var shapePaths = shapeData.shape.paths.shapes;\n    var i;\n    var len = shapeData.shape.paths._length;\n    var j;\n    var jLen;\n    var addedLength = 0;\n    var currentLengthData;\n    var segmentCount;\n    var lengths;\n    var segment;\n    var shapes = [];\n    var initPos;\n    var newShape = true;\n\n    if (!shapePath) {\n      shapePath = shapePool.newElement();\n      segmentCount = 0;\n      initPos = 0;\n    } else {\n      segmentCount = shapePath._length;\n      initPos = shapePath._length;\n    }\n\n    shapes.push(shapePath);\n\n    for (i = 0; i < len; i += 1) {\n      lengths = pathsData[i].lengths;\n      shapePath.c = shapePaths[i].c;\n      jLen = shapePaths[i].c ? lengths.length : lengths.length + 1;\n\n      for (j = 1; j < jLen; j += 1) {\n        currentLengthData = lengths[j - 1];\n\n        if (addedLength + currentLengthData.addedLength < shapeSegment.s) {\n          addedLength += currentLengthData.addedLength;\n          shapePath.c = false;\n        } else if (addedLength > shapeSegment.e) {\n          shapePath.c = false;\n          break;\n        } else {\n          if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) {\n            this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape);\n            newShape = false;\n          } else {\n            segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[j], shapePaths[i].o[j - 1], shapePaths[i].i[j], (shapeSegment.s - addedLength) / currentLengthData.addedLength, (shapeSegment.e - addedLength) / currentLengthData.addedLength, lengths[j - 1]);\n            this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n            newShape = false;\n            shapePath.c = false;\n          }\n\n          addedLength += currentLengthData.addedLength;\n          segmentCount += 1;\n        }\n      }\n\n      if (shapePaths[i].c && lengths.length) {\n        currentLengthData = lengths[j - 1];\n\n        if (addedLength <= shapeSegment.e) {\n          var segmentLength = lengths[j - 1].addedLength;\n\n          if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) {\n            this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape);\n            newShape = false;\n          } else {\n            segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[0], shapePaths[i].o[j - 1], shapePaths[i].i[0], (shapeSegment.s - addedLength) / segmentLength, (shapeSegment.e - addedLength) / segmentLength, lengths[j - 1]);\n            this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n            newShape = false;\n            shapePath.c = false;\n          }\n        } else {\n          shapePath.c = false;\n        }\n\n        addedLength += currentLengthData.addedLength;\n        segmentCount += 1;\n      }\n\n      if (shapePath._length) {\n        shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], 'i', initPos);\n        shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], 'o', shapePath._length - 1);\n      }\n\n      if (addedLength > shapeSegment.e) {\n        break;\n      }\n\n      if (i < len - 1) {\n        shapePath = shapePool.newElement();\n        newShape = true;\n        shapes.push(shapePath);\n        segmentCount = 0;\n      }\n    }\n\n    return shapes;\n  };\n\n  function PuckerAndBloatModifier() {}\n\n  extendPrototype([ShapeModifier], PuckerAndBloatModifier);\n\n  PuckerAndBloatModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n    this._isAnimated = !!this.amount.effectsSequence.length;\n  };\n\n  PuckerAndBloatModifier.prototype.processPath = function (path, amount) {\n    var percent = amount / 100;\n    var centerPoint = [0, 0];\n    var pathLength = path._length;\n    var i = 0;\n\n    for (i = 0; i < pathLength; i += 1) {\n      centerPoint[0] += path.v[i][0];\n      centerPoint[1] += path.v[i][1];\n    }\n\n    centerPoint[0] /= pathLength;\n    centerPoint[1] /= pathLength;\n    var clonedPath = shapePool.newElement();\n    clonedPath.c = path.c;\n    var vX;\n    var vY;\n    var oX;\n    var oY;\n    var iX;\n    var iY;\n\n    for (i = 0; i < pathLength; i += 1) {\n      vX = path.v[i][0] + (centerPoint[0] - path.v[i][0]) * percent;\n      vY = path.v[i][1] + (centerPoint[1] - path.v[i][1]) * percent;\n      oX = path.o[i][0] + (centerPoint[0] - path.o[i][0]) * -percent;\n      oY = path.o[i][1] + (centerPoint[1] - path.o[i][1]) * -percent;\n      iX = path.i[i][0] + (centerPoint[0] - path.i[i][0]) * -percent;\n      iY = path.i[i][1] + (centerPoint[1] - path.i[i][1]) * -percent;\n      clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, i);\n    }\n\n    return clonedPath;\n  };\n\n  PuckerAndBloatModifier.prototype.processShapes = function (_isFirstFrame) {\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var amount = this.amount.v;\n\n    if (amount !== 0) {\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i];\n        localShapeCollection = shapeData.localShapeCollection;\n\n        if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n          localShapeCollection.releaseShapes();\n          shapeData.shape._mdf = true;\n          shapePaths = shapeData.shape.paths.shapes;\n          jLen = shapeData.shape.paths._length;\n\n          for (j = 0; j < jLen; j += 1) {\n            localShapeCollection.addShape(this.processPath(shapePaths[j], amount));\n          }\n        }\n\n        shapeData.shape.paths = shapeData.localShapeCollection;\n      }\n    }\n\n    if (!this.dynamicProperties.length) {\n      this._mdf = false;\n    }\n  };\n\n  var TransformPropertyFactory = function () {\n    var defaultVector = [0, 0];\n\n    function applyToMatrix(mat) {\n      var _mdf = this._mdf;\n      this.iterateDynamicProperties();\n      this._mdf = this._mdf || _mdf;\n\n      if (this.a) {\n        mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n      }\n\n      if (this.s) {\n        mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n      }\n\n      if (this.sk) {\n        mat.skewFromAxis(-this.sk.v, this.sa.v);\n      }\n\n      if (this.r) {\n        mat.rotate(-this.r.v);\n      } else {\n        mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n      }\n\n      if (this.data.p.s) {\n        if (this.data.p.z) {\n          mat.translate(this.px.v, this.py.v, -this.pz.v);\n        } else {\n          mat.translate(this.px.v, this.py.v, 0);\n        }\n      } else {\n        mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n      }\n    }\n\n    function processKeys(forceRender) {\n      if (this.elem.globalData.frameId === this.frameId) {\n        return;\n      }\n\n      if (this._isDirty) {\n        this.precalculateMatrix();\n        this._isDirty = false;\n      }\n\n      this.iterateDynamicProperties();\n\n      if (this._mdf || forceRender) {\n        var frameRate;\n        this.v.cloneFromProps(this.pre.props);\n\n        if (this.appliedTransformations < 1) {\n          this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n        }\n\n        if (this.appliedTransformations < 2) {\n          this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n        }\n\n        if (this.sk && this.appliedTransformations < 3) {\n          this.v.skewFromAxis(-this.sk.v, this.sa.v);\n        }\n\n        if (this.r && this.appliedTransformations < 4) {\n          this.v.rotate(-this.r.v);\n        } else if (!this.r && this.appliedTransformations < 4) {\n          this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n        }\n\n        if (this.autoOriented) {\n          var v1;\n          var v2;\n          frameRate = this.elem.globalData.frameRate;\n\n          if (this.p && this.p.keyframes && this.p.getValueAtTime) {\n            if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) {\n              v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate, 0);\n              v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0);\n            } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) {\n              v1 = this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length - 1].t / frameRate, 0);\n              v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate, 0);\n            } else {\n              v1 = this.p.pv;\n              v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate, this.p.offsetTime);\n            }\n          } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) {\n            v1 = [];\n            v2 = [];\n            var px = this.px;\n            var py = this.py;\n\n            if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) {\n              v1[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate, 0);\n              v1[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate, 0);\n              v2[0] = px.getValueAtTime(px.keyframes[0].t / frameRate, 0);\n              v2[1] = py.getValueAtTime(py.keyframes[0].t / frameRate, 0);\n            } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) {\n              v1[0] = px.getValueAtTime(px.keyframes[px.keyframes.length - 1].t / frameRate, 0);\n              v1[1] = py.getValueAtTime(py.keyframes[py.keyframes.length - 1].t / frameRate, 0);\n              v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate, 0);\n              v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate, 0);\n            } else {\n              v1 = [px.pv, py.pv];\n              v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - 0.01) / frameRate, px.offsetTime);\n              v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - 0.01) / frameRate, py.offsetTime);\n            }\n          } else {\n            v2 = defaultVector;\n            v1 = v2;\n          }\n\n          this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));\n        }\n\n        if (this.data.p && this.data.p.s) {\n          if (this.data.p.z) {\n            this.v.translate(this.px.v, this.py.v, -this.pz.v);\n          } else {\n            this.v.translate(this.px.v, this.py.v, 0);\n          }\n        } else {\n          this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n        }\n      }\n\n      this.frameId = this.elem.globalData.frameId;\n    }\n\n    function precalculateMatrix() {\n      this.appliedTransformations = 0;\n      this.pre.reset();\n\n      if (!this.a.effectsSequence.length) {\n        this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n        this.appliedTransformations = 1;\n      } else {\n        return;\n      }\n\n      if (!this.s.effectsSequence.length) {\n        this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n        this.appliedTransformations = 2;\n      } else {\n        return;\n      }\n\n      if (this.sk) {\n        if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) {\n          this.pre.skewFromAxis(-this.sk.v, this.sa.v);\n          this.appliedTransformations = 3;\n        } else {\n          return;\n        }\n      }\n\n      if (this.r) {\n        if (!this.r.effectsSequence.length) {\n          this.pre.rotate(-this.r.v);\n          this.appliedTransformations = 4;\n        }\n      } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) {\n        this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n        this.appliedTransformations = 4;\n      }\n    }\n\n    function autoOrient() {//\n      // var prevP = this.getValueAtTime();\n    }\n\n    function addDynamicProperty(prop) {\n      this._addDynamicProperty(prop);\n\n      this.elem.addDynamicProperty(prop);\n      this._isDirty = true;\n    }\n\n    function TransformProperty(elem, data, container) {\n      this.elem = elem;\n      this.frameId = -1;\n      this.propType = 'transform';\n      this.data = data;\n      this.v = new Matrix(); // Precalculated matrix with non animated properties\n\n      this.pre = new Matrix();\n      this.appliedTransformations = 0;\n      this.initDynamicPropertyContainer(container || elem);\n\n      if (data.p && data.p.s) {\n        this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this);\n        this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this);\n\n        if (data.p.z) {\n          this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this);\n        }\n      } else {\n        this.p = PropertyFactory.getProp(elem, data.p || {\n          k: [0, 0, 0]\n        }, 1, 0, this);\n      }\n\n      if (data.rx) {\n        this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this);\n        this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this);\n        this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this);\n\n        if (data.or.k[0].ti) {\n          var i;\n          var len = data.or.k.length;\n\n          for (i = 0; i < len; i += 1) {\n            data.or.k[i].to = null;\n            data.or.k[i].ti = null;\n          }\n        }\n\n        this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this); // sh Indicates it needs to be capped between -180 and 180\n\n        this.or.sh = true;\n      } else {\n        this.r = PropertyFactory.getProp(elem, data.r || {\n          k: 0\n        }, 0, degToRads, this);\n      }\n\n      if (data.sk) {\n        this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this);\n        this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this);\n      }\n\n      this.a = PropertyFactory.getProp(elem, data.a || {\n        k: [0, 0, 0]\n      }, 1, 0, this);\n      this.s = PropertyFactory.getProp(elem, data.s || {\n        k: [100, 100, 100]\n      }, 1, 0.01, this); // Opacity is not part of the transform properties, that's why it won't use this.dynamicProperties. That way transforms won't get updated if opacity changes.\n\n      if (data.o) {\n        this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, elem);\n      } else {\n        this.o = {\n          _mdf: false,\n          v: 1\n        };\n      }\n\n      this._isDirty = true;\n\n      if (!this.dynamicProperties.length) {\n        this.getValue(true);\n      }\n    }\n\n    TransformProperty.prototype = {\n      applyToMatrix: applyToMatrix,\n      getValue: processKeys,\n      precalculateMatrix: precalculateMatrix,\n      autoOrient: autoOrient\n    };\n    extendPrototype([DynamicPropertyContainer], TransformProperty);\n    TransformProperty.prototype.addDynamicProperty = addDynamicProperty;\n    TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty;\n\n    function getTransformProperty(elem, data, container) {\n      return new TransformProperty(elem, data, container);\n    }\n\n    return {\n      getTransformProperty: getTransformProperty\n    };\n  }();\n\n  function RepeaterModifier() {}\n\n  extendPrototype([ShapeModifier], RepeaterModifier);\n\n  RepeaterModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.c = PropertyFactory.getProp(elem, data.c, 0, null, this);\n    this.o = PropertyFactory.getProp(elem, data.o, 0, null, this);\n    this.tr = TransformPropertyFactory.getTransformProperty(elem, data.tr, this);\n    this.so = PropertyFactory.getProp(elem, data.tr.so, 0, 0.01, this);\n    this.eo = PropertyFactory.getProp(elem, data.tr.eo, 0, 0.01, this);\n    this.data = data;\n\n    if (!this.dynamicProperties.length) {\n      this.getValue(true);\n    }\n\n    this._isAnimated = !!this.dynamicProperties.length;\n    this.pMatrix = new Matrix();\n    this.rMatrix = new Matrix();\n    this.sMatrix = new Matrix();\n    this.tMatrix = new Matrix();\n    this.matrix = new Matrix();\n  };\n\n  RepeaterModifier.prototype.applyTransforms = function (pMatrix, rMatrix, sMatrix, transform, perc, inv) {\n    var dir = inv ? -1 : 1;\n    var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc);\n    var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc);\n    pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]);\n    rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n    rMatrix.rotate(-transform.r.v * dir * perc);\n    rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n    sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n    sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY);\n    sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n  };\n\n  RepeaterModifier.prototype.init = function (elem, arr, pos, elemsData) {\n    this.elem = elem;\n    this.arr = arr;\n    this.pos = pos;\n    this.elemsData = elemsData;\n    this._currentCopies = 0;\n    this._elements = [];\n    this._groups = [];\n    this.frameId = -1;\n    this.initDynamicPropertyContainer(elem);\n    this.initModifierProperties(elem, arr[pos]);\n\n    while (pos > 0) {\n      pos -= 1; // this._elements.unshift(arr.splice(pos,1)[0]);\n\n      this._elements.unshift(arr[pos]);\n    }\n\n    if (this.dynamicProperties.length) {\n      this.k = true;\n    } else {\n      this.getValue(true);\n    }\n  };\n\n  RepeaterModifier.prototype.resetElements = function (elements) {\n    var i;\n    var len = elements.length;\n\n    for (i = 0; i < len; i += 1) {\n      elements[i]._processed = false;\n\n      if (elements[i].ty === 'gr') {\n        this.resetElements(elements[i].it);\n      }\n    }\n  };\n\n  RepeaterModifier.prototype.cloneElements = function (elements) {\n    var newElements = JSON.parse(JSON.stringify(elements));\n    this.resetElements(newElements);\n    return newElements;\n  };\n\n  RepeaterModifier.prototype.changeGroupRender = function (elements, renderFlag) {\n    var i;\n    var len = elements.length;\n\n    for (i = 0; i < len; i += 1) {\n      elements[i]._render = renderFlag;\n\n      if (elements[i].ty === 'gr') {\n        this.changeGroupRender(elements[i].it, renderFlag);\n      }\n    }\n  };\n\n  RepeaterModifier.prototype.processShapes = function (_isFirstFrame) {\n    var items;\n    var itemsTransform;\n    var i;\n    var dir;\n    var cont;\n    var hasReloaded = false;\n\n    if (this._mdf || _isFirstFrame) {\n      var copies = Math.ceil(this.c.v);\n\n      if (this._groups.length < copies) {\n        while (this._groups.length < copies) {\n          var group = {\n            it: this.cloneElements(this._elements),\n            ty: 'gr'\n          };\n          group.it.push({\n            a: {\n              a: 0,\n              ix: 1,\n              k: [0, 0]\n            },\n            nm: 'Transform',\n            o: {\n              a: 0,\n              ix: 7,\n              k: 100\n            },\n            p: {\n              a: 0,\n              ix: 2,\n              k: [0, 0]\n            },\n            r: {\n              a: 1,\n              ix: 6,\n              k: [{\n                s: 0,\n                e: 0,\n                t: 0\n              }, {\n                s: 0,\n                e: 0,\n                t: 1\n              }]\n            },\n            s: {\n              a: 0,\n              ix: 3,\n              k: [100, 100]\n            },\n            sa: {\n              a: 0,\n              ix: 5,\n              k: 0\n            },\n            sk: {\n              a: 0,\n              ix: 4,\n              k: 0\n            },\n            ty: 'tr'\n          });\n          this.arr.splice(0, 0, group);\n\n          this._groups.splice(0, 0, group);\n\n          this._currentCopies += 1;\n        }\n\n        this.elem.reloadShapes();\n        hasReloaded = true;\n      }\n\n      cont = 0;\n      var renderFlag;\n\n      for (i = 0; i <= this._groups.length - 1; i += 1) {\n        renderFlag = cont < copies;\n        this._groups[i]._render = renderFlag;\n        this.changeGroupRender(this._groups[i].it, renderFlag);\n\n        if (!renderFlag) {\n          var elems = this.elemsData[i].it;\n          var transformData = elems[elems.length - 1];\n\n          if (transformData.transform.op.v !== 0) {\n            transformData.transform.op._mdf = true;\n            transformData.transform.op.v = 0;\n          } else {\n            transformData.transform.op._mdf = false;\n          }\n        }\n\n        cont += 1;\n      }\n\n      this._currentCopies = copies; /// /\n\n      var offset = this.o.v;\n      var offsetModulo = offset % 1;\n      var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset);\n      var pProps = this.pMatrix.props;\n      var rProps = this.rMatrix.props;\n      var sProps = this.sMatrix.props;\n      this.pMatrix.reset();\n      this.rMatrix.reset();\n      this.sMatrix.reset();\n      this.tMatrix.reset();\n      this.matrix.reset();\n      var iteration = 0;\n\n      if (offset > 0) {\n        while (iteration < roundOffset) {\n          this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n          iteration += 1;\n        }\n\n        if (offsetModulo) {\n          this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false);\n          iteration += offsetModulo;\n        }\n      } else if (offset < 0) {\n        while (iteration > roundOffset) {\n          this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true);\n          iteration -= 1;\n        }\n\n        if (offsetModulo) {\n          this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true);\n          iteration -= offsetModulo;\n        }\n      }\n\n      i = this.data.m === 1 ? 0 : this._currentCopies - 1;\n      dir = this.data.m === 1 ? 1 : -1;\n      cont = this._currentCopies;\n      var j;\n      var jLen;\n\n      while (cont) {\n        items = this.elemsData[i].it;\n        itemsTransform = items[items.length - 1].transform.mProps.v.props;\n        jLen = itemsTransform.length;\n        items[items.length - 1].transform.mProps._mdf = true;\n        items[items.length - 1].transform.op._mdf = true;\n        items[items.length - 1].transform.op.v = this._currentCopies === 1 ? this.so.v : this.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1));\n\n        if (iteration !== 0) {\n          if (i !== 0 && dir === 1 || i !== this._currentCopies - 1 && dir === -1) {\n            this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n          }\n\n          this.matrix.transform(rProps[0], rProps[1], rProps[2], rProps[3], rProps[4], rProps[5], rProps[6], rProps[7], rProps[8], rProps[9], rProps[10], rProps[11], rProps[12], rProps[13], rProps[14], rProps[15]);\n          this.matrix.transform(sProps[0], sProps[1], sProps[2], sProps[3], sProps[4], sProps[5], sProps[6], sProps[7], sProps[8], sProps[9], sProps[10], sProps[11], sProps[12], sProps[13], sProps[14], sProps[15]);\n          this.matrix.transform(pProps[0], pProps[1], pProps[2], pProps[3], pProps[4], pProps[5], pProps[6], pProps[7], pProps[8], pProps[9], pProps[10], pProps[11], pProps[12], pProps[13], pProps[14], pProps[15]);\n\n          for (j = 0; j < jLen; j += 1) {\n            itemsTransform[j] = this.matrix.props[j];\n          }\n\n          this.matrix.reset();\n        } else {\n          this.matrix.reset();\n\n          for (j = 0; j < jLen; j += 1) {\n            itemsTransform[j] = this.matrix.props[j];\n          }\n        }\n\n        iteration += 1;\n        cont -= 1;\n        i += dir;\n      }\n    } else {\n      cont = this._currentCopies;\n      i = 0;\n      dir = 1;\n\n      while (cont) {\n        items = this.elemsData[i].it;\n        itemsTransform = items[items.length - 1].transform.mProps.v.props;\n        items[items.length - 1].transform.mProps._mdf = false;\n        items[items.length - 1].transform.op._mdf = false;\n        cont -= 1;\n        i += dir;\n      }\n    }\n\n    return hasReloaded;\n  };\n\n  RepeaterModifier.prototype.addShape = function () {};\n\n  function RoundCornersModifier() {}\n\n  extendPrototype([ShapeModifier], RoundCornersModifier);\n\n  RoundCornersModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.rd = PropertyFactory.getProp(elem, data.r, 0, null, this);\n    this._isAnimated = !!this.rd.effectsSequence.length;\n  };\n\n  RoundCornersModifier.prototype.processPath = function (path, round) {\n    var clonedPath = shapePool.newElement();\n    clonedPath.c = path.c;\n    var i;\n    var len = path._length;\n    var currentV;\n    var currentI;\n    var currentO;\n    var closerV;\n    var distance;\n    var newPosPerc;\n    var index = 0;\n    var vX;\n    var vY;\n    var oX;\n    var oY;\n    var iX;\n    var iY;\n\n    for (i = 0; i < len; i += 1) {\n      currentV = path.v[i];\n      currentO = path.o[i];\n      currentI = path.i[i];\n\n      if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) {\n        if ((i === 0 || i === len - 1) && !path.c) {\n          clonedPath.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index);\n          /* clonedPath.v[index] = currentV;\r\n                  clonedPath.o[index] = currentO;\r\n                  clonedPath.i[index] = currentI; */\n\n          index += 1;\n        } else {\n          if (i === 0) {\n            closerV = path.v[len - 1];\n          } else {\n            closerV = path.v[i - 1];\n          }\n\n          distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n          newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n          iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n          vX = iX;\n          iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc;\n          vY = iY;\n          oX = vX - (vX - currentV[0]) * roundCorner;\n          oY = vY - (vY - currentV[1]) * roundCorner;\n          clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n          index += 1;\n\n          if (i === len - 1) {\n            closerV = path.v[0];\n          } else {\n            closerV = path.v[i + 1];\n          }\n\n          distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n          newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n          oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n          vX = oX;\n          oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc;\n          vY = oY;\n          iX = vX - (vX - currentV[0]) * roundCorner;\n          iY = vY - (vY - currentV[1]) * roundCorner;\n          clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n          index += 1;\n        }\n      } else {\n        clonedPath.setTripleAt(path.v[i][0], path.v[i][1], path.o[i][0], path.o[i][1], path.i[i][0], path.i[i][1], index);\n        index += 1;\n      }\n    }\n\n    return clonedPath;\n  };\n\n  RoundCornersModifier.prototype.processShapes = function (_isFirstFrame) {\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var rd = this.rd.v;\n\n    if (rd !== 0) {\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i];\n        localShapeCollection = shapeData.localShapeCollection;\n\n        if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n          localShapeCollection.releaseShapes();\n          shapeData.shape._mdf = true;\n          shapePaths = shapeData.shape.paths.shapes;\n          jLen = shapeData.shape.paths._length;\n\n          for (j = 0; j < jLen; j += 1) {\n            localShapeCollection.addShape(this.processPath(shapePaths[j], rd));\n          }\n        }\n\n        shapeData.shape.paths = shapeData.localShapeCollection;\n      }\n    }\n\n    if (!this.dynamicProperties.length) {\n      this._mdf = false;\n    }\n  };\n\n  function floatEqual(a, b) {\n    return Math.abs(a - b) * 100000 <= Math.min(Math.abs(a), Math.abs(b));\n  }\n\n  function floatZero(f) {\n    return Math.abs(f) <= 0.00001;\n  }\n\n  function lerp(p0, p1, amount) {\n    return p0 * (1 - amount) + p1 * amount;\n  }\n\n  function lerpPoint(p0, p1, amount) {\n    return [lerp(p0[0], p1[0], amount), lerp(p0[1], p1[1], amount)];\n  }\n\n  function quadRoots(a, b, c) {\n    // no root\n    if (a === 0) return [];\n    var s = b * b - 4 * a * c; // Complex roots\n\n    if (s < 0) return [];\n    var singleRoot = -b / (2 * a); // 1 root\n\n    if (s === 0) return [singleRoot];\n    var delta = Math.sqrt(s) / (2 * a); // 2 roots\n\n    return [singleRoot - delta, singleRoot + delta];\n  }\n\n  function polynomialCoefficients(p0, p1, p2, p3) {\n    return [-p0 + 3 * p1 - 3 * p2 + p3, 3 * p0 - 6 * p1 + 3 * p2, -3 * p0 + 3 * p1, p0];\n  }\n\n  function singlePoint(p) {\n    return new PolynomialBezier(p, p, p, p, false);\n  }\n\n  function PolynomialBezier(p0, p1, p2, p3, linearize) {\n    if (linearize && pointEqual(p0, p1)) {\n      p1 = lerpPoint(p0, p3, 1 / 3);\n    }\n\n    if (linearize && pointEqual(p2, p3)) {\n      p2 = lerpPoint(p0, p3, 2 / 3);\n    }\n\n    var coeffx = polynomialCoefficients(p0[0], p1[0], p2[0], p3[0]);\n    var coeffy = polynomialCoefficients(p0[1], p1[1], p2[1], p3[1]);\n    this.a = [coeffx[0], coeffy[0]];\n    this.b = [coeffx[1], coeffy[1]];\n    this.c = [coeffx[2], coeffy[2]];\n    this.d = [coeffx[3], coeffy[3]];\n    this.points = [p0, p1, p2, p3];\n  }\n\n  PolynomialBezier.prototype.point = function (t) {\n    return [((this.a[0] * t + this.b[0]) * t + this.c[0]) * t + this.d[0], ((this.a[1] * t + this.b[1]) * t + this.c[1]) * t + this.d[1]];\n  };\n\n  PolynomialBezier.prototype.derivative = function (t) {\n    return [(3 * t * this.a[0] + 2 * this.b[0]) * t + this.c[0], (3 * t * this.a[1] + 2 * this.b[1]) * t + this.c[1]];\n  };\n\n  PolynomialBezier.prototype.tangentAngle = function (t) {\n    var p = this.derivative(t);\n    return Math.atan2(p[1], p[0]);\n  };\n\n  PolynomialBezier.prototype.normalAngle = function (t) {\n    var p = this.derivative(t);\n    return Math.atan2(p[0], p[1]);\n  };\n\n  PolynomialBezier.prototype.inflectionPoints = function () {\n    var denom = this.a[1] * this.b[0] - this.a[0] * this.b[1];\n    if (floatZero(denom)) return [];\n    var tcusp = -0.5 * (this.a[1] * this.c[0] - this.a[0] * this.c[1]) / denom;\n    var square = tcusp * tcusp - 1 / 3 * (this.b[1] * this.c[0] - this.b[0] * this.c[1]) / denom;\n    if (square < 0) return [];\n    var root = Math.sqrt(square);\n\n    if (floatZero(root)) {\n      if (root > 0 && root < 1) return [tcusp];\n      return [];\n    }\n\n    return [tcusp - root, tcusp + root].filter(function (r) {\n      return r > 0 && r < 1;\n    });\n  };\n\n  PolynomialBezier.prototype.split = function (t) {\n    if (t <= 0) return [singlePoint(this.points[0]), this];\n    if (t >= 1) return [this, singlePoint(this.points[this.points.length - 1])];\n    var p10 = lerpPoint(this.points[0], this.points[1], t);\n    var p11 = lerpPoint(this.points[1], this.points[2], t);\n    var p12 = lerpPoint(this.points[2], this.points[3], t);\n    var p20 = lerpPoint(p10, p11, t);\n    var p21 = lerpPoint(p11, p12, t);\n    var p3 = lerpPoint(p20, p21, t);\n    return [new PolynomialBezier(this.points[0], p10, p20, p3, true), new PolynomialBezier(p3, p21, p12, this.points[3], true)];\n  };\n\n  function extrema(bez, comp) {\n    var min = bez.points[0][comp];\n    var max = bez.points[bez.points.length - 1][comp];\n\n    if (min > max) {\n      var e = max;\n      max = min;\n      min = e;\n    } // Derivative roots to find min/max\n\n\n    var f = quadRoots(3 * bez.a[comp], 2 * bez.b[comp], bez.c[comp]);\n\n    for (var i = 0; i < f.length; i += 1) {\n      if (f[i] > 0 && f[i] < 1) {\n        var val = bez.point(f[i])[comp];\n        if (val < min) min = val;else if (val > max) max = val;\n      }\n    }\n\n    return {\n      min: min,\n      max: max\n    };\n  }\n\n  PolynomialBezier.prototype.bounds = function () {\n    return {\n      x: extrema(this, 0),\n      y: extrema(this, 1)\n    };\n  };\n\n  PolynomialBezier.prototype.boundingBox = function () {\n    var bounds = this.bounds();\n    return {\n      left: bounds.x.min,\n      right: bounds.x.max,\n      top: bounds.y.min,\n      bottom: bounds.y.max,\n      width: bounds.x.max - bounds.x.min,\n      height: bounds.y.max - bounds.y.min,\n      cx: (bounds.x.max + bounds.x.min) / 2,\n      cy: (bounds.y.max + bounds.y.min) / 2\n    };\n  };\n\n  function intersectData(bez, t1, t2) {\n    var box = bez.boundingBox();\n    return {\n      cx: box.cx,\n      cy: box.cy,\n      width: box.width,\n      height: box.height,\n      bez: bez,\n      t: (t1 + t2) / 2,\n      t1: t1,\n      t2: t2\n    };\n  }\n\n  function splitData(data) {\n    var split = data.bez.split(0.5);\n    return [intersectData(split[0], data.t1, data.t), intersectData(split[1], data.t, data.t2)];\n  }\n\n  function boxIntersect(b1, b2) {\n    return Math.abs(b1.cx - b2.cx) * 2 < b1.width + b2.width && Math.abs(b1.cy - b2.cy) * 2 < b1.height + b2.height;\n  }\n\n  function intersectsImpl(d1, d2, depth, tolerance, intersections, maxRecursion) {\n    if (!boxIntersect(d1, d2)) return;\n\n    if (depth >= maxRecursion || d1.width <= tolerance && d1.height <= tolerance && d2.width <= tolerance && d2.height <= tolerance) {\n      intersections.push([d1.t, d2.t]);\n      return;\n    }\n\n    var d1s = splitData(d1);\n    var d2s = splitData(d2);\n    intersectsImpl(d1s[0], d2s[0], depth + 1, tolerance, intersections, maxRecursion);\n    intersectsImpl(d1s[0], d2s[1], depth + 1, tolerance, intersections, maxRecursion);\n    intersectsImpl(d1s[1], d2s[0], depth + 1, tolerance, intersections, maxRecursion);\n    intersectsImpl(d1s[1], d2s[1], depth + 1, tolerance, intersections, maxRecursion);\n  }\n\n  PolynomialBezier.prototype.intersections = function (other, tolerance, maxRecursion) {\n    if (tolerance === undefined) tolerance = 2;\n    if (maxRecursion === undefined) maxRecursion = 7;\n    var intersections = [];\n    intersectsImpl(intersectData(this, 0, 1), intersectData(other, 0, 1), 0, tolerance, intersections, maxRecursion);\n    return intersections;\n  };\n\n  PolynomialBezier.shapeSegment = function (shapePath, index) {\n    var nextIndex = (index + 1) % shapePath.length();\n    return new PolynomialBezier(shapePath.v[index], shapePath.o[index], shapePath.i[nextIndex], shapePath.v[nextIndex], true);\n  };\n\n  PolynomialBezier.shapeSegmentInverted = function (shapePath, index) {\n    var nextIndex = (index + 1) % shapePath.length();\n    return new PolynomialBezier(shapePath.v[nextIndex], shapePath.i[nextIndex], shapePath.o[index], shapePath.v[index], true);\n  };\n\n  function crossProduct(a, b) {\n    return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n  }\n\n  function lineIntersection(start1, end1, start2, end2) {\n    var v1 = [start1[0], start1[1], 1];\n    var v2 = [end1[0], end1[1], 1];\n    var v3 = [start2[0], start2[1], 1];\n    var v4 = [end2[0], end2[1], 1];\n    var r = crossProduct(crossProduct(v1, v2), crossProduct(v3, v4));\n    if (floatZero(r[2])) return null;\n    return [r[0] / r[2], r[1] / r[2]];\n  }\n\n  function polarOffset(p, angle, length) {\n    return [p[0] + Math.cos(angle) * length, p[1] - Math.sin(angle) * length];\n  }\n\n  function pointDistance(p1, p2) {\n    return Math.hypot(p1[0] - p2[0], p1[1] - p2[1]);\n  }\n\n  function pointEqual(p1, p2) {\n    return floatEqual(p1[0], p2[0]) && floatEqual(p1[1], p2[1]);\n  }\n\n  function ZigZagModifier() {}\n\n  extendPrototype([ShapeModifier], ZigZagModifier);\n\n  ZigZagModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.amplitude = PropertyFactory.getProp(elem, data.s, 0, null, this);\n    this.frequency = PropertyFactory.getProp(elem, data.r, 0, null, this);\n    this.pointsType = PropertyFactory.getProp(elem, data.pt, 0, null, this);\n    this._isAnimated = this.amplitude.effectsSequence.length !== 0 || this.frequency.effectsSequence.length !== 0 || this.pointsType.effectsSequence.length !== 0;\n  };\n\n  function setPoint(outputBezier, point, angle, direction, amplitude, outAmplitude, inAmplitude) {\n    var angO = angle - Math.PI / 2;\n    var angI = angle + Math.PI / 2;\n    var px = point[0] + Math.cos(angle) * direction * amplitude;\n    var py = point[1] - Math.sin(angle) * direction * amplitude;\n    outputBezier.setTripleAt(px, py, px + Math.cos(angO) * outAmplitude, py - Math.sin(angO) * outAmplitude, px + Math.cos(angI) * inAmplitude, py - Math.sin(angI) * inAmplitude, outputBezier.length());\n  }\n\n  function getPerpendicularVector(pt1, pt2) {\n    var vector = [pt2[0] - pt1[0], pt2[1] - pt1[1]];\n    var rot = -Math.PI * 0.5;\n    var rotatedVector = [Math.cos(rot) * vector[0] - Math.sin(rot) * vector[1], Math.sin(rot) * vector[0] + Math.cos(rot) * vector[1]];\n    return rotatedVector;\n  }\n\n  function getProjectingAngle(path, cur) {\n    var prevIndex = cur === 0 ? path.length() - 1 : cur - 1;\n    var nextIndex = (cur + 1) % path.length();\n    var prevPoint = path.v[prevIndex];\n    var nextPoint = path.v[nextIndex];\n    var pVector = getPerpendicularVector(prevPoint, nextPoint);\n    return Math.atan2(0, 1) - Math.atan2(pVector[1], pVector[0]);\n  }\n\n  function zigZagCorner(outputBezier, path, cur, amplitude, frequency, pointType, direction) {\n    var angle = getProjectingAngle(path, cur);\n    var point = path.v[cur % path._length];\n    var prevPoint = path.v[cur === 0 ? path._length - 1 : cur - 1];\n    var nextPoint = path.v[(cur + 1) % path._length];\n    var prevDist = pointType === 2 ? Math.sqrt(Math.pow(point[0] - prevPoint[0], 2) + Math.pow(point[1] - prevPoint[1], 2)) : 0;\n    var nextDist = pointType === 2 ? Math.sqrt(Math.pow(point[0] - nextPoint[0], 2) + Math.pow(point[1] - nextPoint[1], 2)) : 0;\n    setPoint(outputBezier, path.v[cur % path._length], angle, direction, amplitude, nextDist / ((frequency + 1) * 2), prevDist / ((frequency + 1) * 2), pointType);\n  }\n\n  function zigZagSegment(outputBezier, segment, amplitude, frequency, pointType, direction) {\n    for (var i = 0; i < frequency; i += 1) {\n      var t = (i + 1) / (frequency + 1);\n      var dist = pointType === 2 ? Math.sqrt(Math.pow(segment.points[3][0] - segment.points[0][0], 2) + Math.pow(segment.points[3][1] - segment.points[0][1], 2)) : 0;\n      var angle = segment.normalAngle(t);\n      var point = segment.point(t);\n      setPoint(outputBezier, point, angle, direction, amplitude, dist / ((frequency + 1) * 2), dist / ((frequency + 1) * 2), pointType);\n      direction = -direction;\n    }\n\n    return direction;\n  }\n\n  ZigZagModifier.prototype.processPath = function (path, amplitude, frequency, pointType) {\n    var count = path._length;\n    var clonedPath = shapePool.newElement();\n    clonedPath.c = path.c;\n\n    if (!path.c) {\n      count -= 1;\n    }\n\n    if (count === 0) return clonedPath;\n    var direction = -1;\n    var segment = PolynomialBezier.shapeSegment(path, 0);\n    zigZagCorner(clonedPath, path, 0, amplitude, frequency, pointType, direction);\n\n    for (var i = 0; i < count; i += 1) {\n      direction = zigZagSegment(clonedPath, segment, amplitude, frequency, pointType, -direction);\n\n      if (i === count - 1 && !path.c) {\n        segment = null;\n      } else {\n        segment = PolynomialBezier.shapeSegment(path, (i + 1) % count);\n      }\n\n      zigZagCorner(clonedPath, path, i + 1, amplitude, frequency, pointType, direction);\n    }\n\n    return clonedPath;\n  };\n\n  ZigZagModifier.prototype.processShapes = function (_isFirstFrame) {\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var amplitude = this.amplitude.v;\n    var frequency = Math.max(0, Math.round(this.frequency.v));\n    var pointType = this.pointsType.v;\n\n    if (amplitude !== 0) {\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i];\n        localShapeCollection = shapeData.localShapeCollection;\n\n        if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n          localShapeCollection.releaseShapes();\n          shapeData.shape._mdf = true;\n          shapePaths = shapeData.shape.paths.shapes;\n          jLen = shapeData.shape.paths._length;\n\n          for (j = 0; j < jLen; j += 1) {\n            localShapeCollection.addShape(this.processPath(shapePaths[j], amplitude, frequency, pointType));\n          }\n        }\n\n        shapeData.shape.paths = shapeData.localShapeCollection;\n      }\n    }\n\n    if (!this.dynamicProperties.length) {\n      this._mdf = false;\n    }\n  };\n\n  function linearOffset(p1, p2, amount) {\n    var angle = Math.atan2(p2[0] - p1[0], p2[1] - p1[1]);\n    return [polarOffset(p1, angle, amount), polarOffset(p2, angle, amount)];\n  }\n\n  function offsetSegment(segment, amount) {\n    var p0;\n    var p1a;\n    var p1b;\n    var p2b;\n    var p2a;\n    var p3;\n    var e;\n    e = linearOffset(segment.points[0], segment.points[1], amount);\n    p0 = e[0];\n    p1a = e[1];\n    e = linearOffset(segment.points[1], segment.points[2], amount);\n    p1b = e[0];\n    p2b = e[1];\n    e = linearOffset(segment.points[2], segment.points[3], amount);\n    p2a = e[0];\n    p3 = e[1];\n    var p1 = lineIntersection(p0, p1a, p1b, p2b);\n    if (p1 === null) p1 = p1a;\n    var p2 = lineIntersection(p2a, p3, p1b, p2b);\n    if (p2 === null) p2 = p2a;\n    return new PolynomialBezier(p0, p1, p2, p3);\n  }\n\n  function joinLines(outputBezier, seg1, seg2, lineJoin, miterLimit) {\n    var p0 = seg1.points[3];\n    var p1 = seg2.points[0]; // Bevel\n\n    if (lineJoin === 3) return p0; // Connected, they don't need a joint\n\n    if (pointEqual(p0, p1)) return p0; // Round\n\n    if (lineJoin === 2) {\n      var angleOut = -seg1.tangentAngle(1);\n      var angleIn = -seg2.tangentAngle(0) + Math.PI;\n      var center = lineIntersection(p0, polarOffset(p0, angleOut + Math.PI / 2, 100), p1, polarOffset(p1, angleOut + Math.PI / 2, 100));\n      var radius = center ? pointDistance(center, p0) : pointDistance(p0, p1) / 2;\n      var tan = polarOffset(p0, angleOut, 2 * radius * roundCorner);\n      outputBezier.setXYAt(tan[0], tan[1], 'o', outputBezier.length() - 1);\n      tan = polarOffset(p1, angleIn, 2 * radius * roundCorner);\n      outputBezier.setTripleAt(p1[0], p1[1], p1[0], p1[1], tan[0], tan[1], outputBezier.length());\n      return p1;\n    } // Miter\n\n\n    var t0 = pointEqual(p0, seg1.points[2]) ? seg1.points[0] : seg1.points[2];\n    var t1 = pointEqual(p1, seg2.points[1]) ? seg2.points[3] : seg2.points[1];\n    var intersection = lineIntersection(t0, p0, p1, t1);\n\n    if (intersection && pointDistance(intersection, p0) < miterLimit) {\n      outputBezier.setTripleAt(intersection[0], intersection[1], intersection[0], intersection[1], intersection[0], intersection[1], outputBezier.length());\n      return intersection;\n    }\n\n    return p0;\n  }\n\n  function getIntersection(a, b) {\n    var intersect = a.intersections(b);\n    if (intersect.length && floatEqual(intersect[0][0], 1)) intersect.shift();\n    if (intersect.length) return intersect[0];\n    return null;\n  }\n\n  function pruneSegmentIntersection(a, b) {\n    var outa = a.slice();\n    var outb = b.slice();\n    var intersect = getIntersection(a[a.length - 1], b[0]);\n\n    if (intersect) {\n      outa[a.length - 1] = a[a.length - 1].split(intersect[0])[0];\n      outb[0] = b[0].split(intersect[1])[1];\n    }\n\n    if (a.length > 1 && b.length > 1) {\n      intersect = getIntersection(a[0], b[b.length - 1]);\n\n      if (intersect) {\n        return [[a[0].split(intersect[0])[0]], [b[b.length - 1].split(intersect[1])[1]]];\n      }\n    }\n\n    return [outa, outb];\n  }\n\n  function pruneIntersections(segments) {\n    var e;\n\n    for (var i = 1; i < segments.length; i += 1) {\n      e = pruneSegmentIntersection(segments[i - 1], segments[i]);\n      segments[i - 1] = e[0];\n      segments[i] = e[1];\n    }\n\n    if (segments.length > 1) {\n      e = pruneSegmentIntersection(segments[segments.length - 1], segments[0]);\n      segments[segments.length - 1] = e[0];\n      segments[0] = e[1];\n    }\n\n    return segments;\n  }\n\n  function offsetSegmentSplit(segment, amount) {\n    /*\r\n      We split each bezier segment into smaller pieces based\r\n      on inflection points, this ensures the control point\r\n      polygon is convex.\r\n        (A cubic bezier can have none, one, or two inflection points)\r\n    */\n    var flex = segment.inflectionPoints();\n    var left;\n    var right;\n    var split;\n    var mid;\n\n    if (flex.length === 0) {\n      return [offsetSegment(segment, amount)];\n    }\n\n    if (flex.length === 1 || floatEqual(flex[1], 1)) {\n      split = segment.split(flex[0]);\n      left = split[0];\n      right = split[1];\n      return [offsetSegment(left, amount), offsetSegment(right, amount)];\n    }\n\n    split = segment.split(flex[0]);\n    left = split[0];\n    var t = (flex[1] - flex[0]) / (1 - flex[0]);\n    split = split[1].split(t);\n    mid = split[0];\n    right = split[1];\n    return [offsetSegment(left, amount), offsetSegment(mid, amount), offsetSegment(right, amount)];\n  }\n\n  function OffsetPathModifier() {}\n\n  extendPrototype([ShapeModifier], OffsetPathModifier);\n\n  OffsetPathModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n    this.miterLimit = PropertyFactory.getProp(elem, data.ml, 0, null, this);\n    this.lineJoin = data.lj;\n    this._isAnimated = this.amount.effectsSequence.length !== 0;\n  };\n\n  OffsetPathModifier.prototype.processPath = function (inputBezier, amount, lineJoin, miterLimit) {\n    var outputBezier = shapePool.newElement();\n    outputBezier.c = inputBezier.c;\n    var count = inputBezier.length();\n\n    if (!inputBezier.c) {\n      count -= 1;\n    }\n\n    var i;\n    var j;\n    var segment;\n    var multiSegments = [];\n\n    for (i = 0; i < count; i += 1) {\n      segment = PolynomialBezier.shapeSegment(inputBezier, i);\n      multiSegments.push(offsetSegmentSplit(segment, amount));\n    }\n\n    if (!inputBezier.c) {\n      for (i = count - 1; i >= 0; i -= 1) {\n        segment = PolynomialBezier.shapeSegmentInverted(inputBezier, i);\n        multiSegments.push(offsetSegmentSplit(segment, amount));\n      }\n    }\n\n    multiSegments = pruneIntersections(multiSegments); // Add bezier segments to the output and apply line joints\n\n    var lastPoint = null;\n    var lastSeg = null;\n\n    for (i = 0; i < multiSegments.length; i += 1) {\n      var multiSegment = multiSegments[i];\n      if (lastSeg) lastPoint = joinLines(outputBezier, lastSeg, multiSegment[0], lineJoin, miterLimit);\n      lastSeg = multiSegment[multiSegment.length - 1];\n\n      for (j = 0; j < multiSegment.length; j += 1) {\n        segment = multiSegment[j];\n\n        if (lastPoint && pointEqual(segment.points[0], lastPoint)) {\n          outputBezier.setXYAt(segment.points[1][0], segment.points[1][1], 'o', outputBezier.length() - 1);\n        } else {\n          outputBezier.setTripleAt(segment.points[0][0], segment.points[0][1], segment.points[1][0], segment.points[1][1], segment.points[0][0], segment.points[0][1], outputBezier.length());\n        }\n\n        outputBezier.setTripleAt(segment.points[3][0], segment.points[3][1], segment.points[3][0], segment.points[3][1], segment.points[2][0], segment.points[2][1], outputBezier.length());\n        lastPoint = segment.points[3];\n      }\n    }\n\n    if (multiSegments.length) joinLines(outputBezier, lastSeg, multiSegments[0][0], lineJoin, miterLimit);\n    return outputBezier;\n  };\n\n  OffsetPathModifier.prototype.processShapes = function (_isFirstFrame) {\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var amount = this.amount.v;\n    var miterLimit = this.miterLimit.v;\n    var lineJoin = this.lineJoin;\n\n    if (amount !== 0) {\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i];\n        localShapeCollection = shapeData.localShapeCollection;\n\n        if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n          localShapeCollection.releaseShapes();\n          shapeData.shape._mdf = true;\n          shapePaths = shapeData.shape.paths.shapes;\n          jLen = shapeData.shape.paths._length;\n\n          for (j = 0; j < jLen; j += 1) {\n            localShapeCollection.addShape(this.processPath(shapePaths[j], amount, lineJoin, miterLimit));\n          }\n        }\n\n        shapeData.shape.paths = shapeData.localShapeCollection;\n      }\n    }\n\n    if (!this.dynamicProperties.length) {\n      this._mdf = false;\n    }\n  };\n\n  function getFontProperties(fontData) {\n    var styles = fontData.fStyle ? fontData.fStyle.split(' ') : [];\n    var fWeight = 'normal';\n    var fStyle = 'normal';\n    var len = styles.length;\n    var styleName;\n\n    for (var i = 0; i < len; i += 1) {\n      styleName = styles[i].toLowerCase();\n\n      switch (styleName) {\n        case 'italic':\n          fStyle = 'italic';\n          break;\n\n        case 'bold':\n          fWeight = '700';\n          break;\n\n        case 'black':\n          fWeight = '900';\n          break;\n\n        case 'medium':\n          fWeight = '500';\n          break;\n\n        case 'regular':\n        case 'normal':\n          fWeight = '400';\n          break;\n\n        case 'light':\n        case 'thin':\n          fWeight = '200';\n          break;\n\n        default:\n          break;\n      }\n    }\n\n    return {\n      style: fStyle,\n      weight: fontData.fWeight || fWeight\n    };\n  }\n\n  var FontManager = function () {\n    var maxWaitingTime = 5000;\n    var emptyChar = {\n      w: 0,\n      size: 0,\n      shapes: [],\n      data: {\n        shapes: []\n      }\n    };\n    var combinedCharacters = []; // Hindi characters\n\n    combinedCharacters = combinedCharacters.concat([2304, 2305, 2306, 2307, 2362, 2363, 2364, 2364, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2387, 2388, 2389, 2390, 2391, 2402, 2403]);\n    var BLACK_FLAG_CODE_POINT = 127988;\n    var CANCEL_TAG_CODE_POINT = 917631;\n    var A_TAG_CODE_POINT = 917601;\n    var Z_TAG_CODE_POINT = 917626;\n    var VARIATION_SELECTOR_16_CODE_POINT = 65039;\n    var ZERO_WIDTH_JOINER_CODE_POINT = 8205;\n    var REGIONAL_CHARACTER_A_CODE_POINT = 127462;\n    var REGIONAL_CHARACTER_Z_CODE_POINT = 127487;\n    var surrogateModifiers = ['d83cdffb', 'd83cdffc', 'd83cdffd', 'd83cdffe', 'd83cdfff'];\n\n    function trimFontOptions(font) {\n      var familyArray = font.split(',');\n      var i;\n      var len = familyArray.length;\n      var enabledFamilies = [];\n\n      for (i = 0; i < len; i += 1) {\n        if (familyArray[i] !== 'sans-serif' && familyArray[i] !== 'monospace') {\n          enabledFamilies.push(familyArray[i]);\n        }\n      }\n\n      return enabledFamilies.join(',');\n    }\n\n    function setUpNode(font, family) {\n      var parentNode = createTag('span'); // Node is invisible to screen readers.\n\n      parentNode.setAttribute('aria-hidden', true);\n      parentNode.style.fontFamily = family;\n      var node = createTag('span'); // Characters that vary significantly among different fonts\n\n      node.innerText = 'giItT1WQy@!-/#'; // Visible - so we can measure it - but not on the screen\n\n      parentNode.style.position = 'absolute';\n      parentNode.style.left = '-10000px';\n      parentNode.style.top = '-10000px'; // Large font size makes even subtle changes obvious\n\n      parentNode.style.fontSize = '300px'; // Reset any font properties\n\n      parentNode.style.fontVariant = 'normal';\n      parentNode.style.fontStyle = 'normal';\n      parentNode.style.fontWeight = 'normal';\n      parentNode.style.letterSpacing = '0';\n      parentNode.appendChild(node);\n      document.body.appendChild(parentNode); // Remember width with no applied web font\n\n      var width = node.offsetWidth;\n      node.style.fontFamily = trimFontOptions(font) + ', ' + family;\n      return {\n        node: node,\n        w: width,\n        parent: parentNode\n      };\n    }\n\n    function checkLoadedFonts() {\n      var i;\n      var len = this.fonts.length;\n      var node;\n      var w;\n      var loadedCount = len;\n\n      for (i = 0; i < len; i += 1) {\n        if (this.fonts[i].loaded) {\n          loadedCount -= 1;\n        } else if (this.fonts[i].fOrigin === 'n' || this.fonts[i].origin === 0) {\n          this.fonts[i].loaded = true;\n        } else {\n          node = this.fonts[i].monoCase.node;\n          w = this.fonts[i].monoCase.w;\n\n          if (node.offsetWidth !== w) {\n            loadedCount -= 1;\n            this.fonts[i].loaded = true;\n          } else {\n            node = this.fonts[i].sansCase.node;\n            w = this.fonts[i].sansCase.w;\n\n            if (node.offsetWidth !== w) {\n              loadedCount -= 1;\n              this.fonts[i].loaded = true;\n            }\n          }\n\n          if (this.fonts[i].loaded) {\n            this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent);\n            this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent);\n          }\n        }\n      }\n\n      if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) {\n        setTimeout(this.checkLoadedFontsBinded, 20);\n      } else {\n        setTimeout(this.setIsLoadedBinded, 10);\n      }\n    }\n\n    function createHelper(fontData, def) {\n      var engine = document.body && def ? 'svg' : 'canvas';\n      var helper;\n      var fontProps = getFontProperties(fontData);\n\n      if (engine === 'svg') {\n        var tHelper = createNS('text');\n        tHelper.style.fontSize = '100px'; // tHelper.style.fontFamily = fontData.fFamily;\n\n        tHelper.setAttribute('font-family', fontData.fFamily);\n        tHelper.setAttribute('font-style', fontProps.style);\n        tHelper.setAttribute('font-weight', fontProps.weight);\n        tHelper.textContent = '1';\n\n        if (fontData.fClass) {\n          tHelper.style.fontFamily = 'inherit';\n          tHelper.setAttribute('class', fontData.fClass);\n        } else {\n          tHelper.style.fontFamily = fontData.fFamily;\n        }\n\n        def.appendChild(tHelper);\n        helper = tHelper;\n      } else {\n        var tCanvasHelper = new OffscreenCanvas(500, 500).getContext('2d');\n        tCanvasHelper.font = fontProps.style + ' ' + fontProps.weight + ' 100px ' + fontData.fFamily;\n        helper = tCanvasHelper;\n      }\n\n      function measure(text) {\n        if (engine === 'svg') {\n          helper.textContent = text;\n          return helper.getComputedTextLength();\n        }\n\n        return helper.measureText(text).width;\n      }\n\n      return {\n        measureText: measure\n      };\n    }\n\n    function addFonts(fontData, defs) {\n      if (!fontData) {\n        this.isLoaded = true;\n        return;\n      }\n\n      if (this.chars) {\n        this.isLoaded = true;\n        this.fonts = fontData.list;\n        return;\n      }\n\n      if (!document.body) {\n        this.isLoaded = true;\n        fontData.list.forEach(function (data) {\n          data.helper = createHelper(data);\n          data.cache = {};\n        });\n        this.fonts = fontData.list;\n        return;\n      }\n\n      var fontArr = fontData.list;\n      var i;\n      var len = fontArr.length;\n      var _pendingFonts = len;\n\n      for (i = 0; i < len; i += 1) {\n        var shouldLoadFont = true;\n        var loadedSelector;\n        var j;\n        fontArr[i].loaded = false;\n        fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, 'monospace');\n        fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, 'sans-serif');\n\n        if (!fontArr[i].fPath) {\n          fontArr[i].loaded = true;\n          _pendingFonts -= 1;\n        } else if (fontArr[i].fOrigin === 'p' || fontArr[i].origin === 3) {\n          loadedSelector = document.querySelectorAll('style[f-forigin=\"p\"][f-family=\"' + fontArr[i].fFamily + '\"], style[f-origin=\"3\"][f-family=\"' + fontArr[i].fFamily + '\"]');\n\n          if (loadedSelector.length > 0) {\n            shouldLoadFont = false;\n          }\n\n          if (shouldLoadFont) {\n            var s = createTag('style');\n            s.setAttribute('f-forigin', fontArr[i].fOrigin);\n            s.setAttribute('f-origin', fontArr[i].origin);\n            s.setAttribute('f-family', fontArr[i].fFamily);\n            s.type = 'text/css';\n            s.innerText = '@font-face {font-family: ' + fontArr[i].fFamily + \"; font-style: normal; src: url('\" + fontArr[i].fPath + \"');}\";\n            defs.appendChild(s);\n          }\n        } else if (fontArr[i].fOrigin === 'g' || fontArr[i].origin === 1) {\n          loadedSelector = document.querySelectorAll('link[f-forigin=\"g\"], link[f-origin=\"1\"]');\n\n          for (j = 0; j < loadedSelector.length; j += 1) {\n            if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) {\n              // Font is already loaded\n              shouldLoadFont = false;\n            }\n          }\n\n          if (shouldLoadFont) {\n            var l = createTag('link');\n            l.setAttribute('f-forigin', fontArr[i].fOrigin);\n            l.setAttribute('f-origin', fontArr[i].origin);\n            l.type = 'text/css';\n            l.rel = 'stylesheet';\n            l.href = fontArr[i].fPath;\n            document.body.appendChild(l);\n          }\n        } else if (fontArr[i].fOrigin === 't' || fontArr[i].origin === 2) {\n          loadedSelector = document.querySelectorAll('script[f-forigin=\"t\"], script[f-origin=\"2\"]');\n\n          for (j = 0; j < loadedSelector.length; j += 1) {\n            if (fontArr[i].fPath === loadedSelector[j].src) {\n              // Font is already loaded\n              shouldLoadFont = false;\n            }\n          }\n\n          if (shouldLoadFont) {\n            var sc = createTag('link');\n            sc.setAttribute('f-forigin', fontArr[i].fOrigin);\n            sc.setAttribute('f-origin', fontArr[i].origin);\n            sc.setAttribute('rel', 'stylesheet');\n            sc.setAttribute('href', fontArr[i].fPath);\n            defs.appendChild(sc);\n          }\n        }\n\n        fontArr[i].helper = createHelper(fontArr[i], defs);\n        fontArr[i].cache = {};\n        this.fonts.push(fontArr[i]);\n      }\n\n      if (_pendingFonts === 0) {\n        this.isLoaded = true;\n      } else {\n        // On some cases even if the font is loaded, it won't load correctly when measuring text on canvas.\n        // Adding this timeout seems to fix it\n        setTimeout(this.checkLoadedFonts.bind(this), 100);\n      }\n    }\n\n    function addChars(chars) {\n      if (!chars) {\n        return;\n      }\n\n      if (!this.chars) {\n        this.chars = [];\n      }\n\n      var i;\n      var len = chars.length;\n      var j;\n      var jLen = this.chars.length;\n      var found;\n\n      for (i = 0; i < len; i += 1) {\n        j = 0;\n        found = false;\n\n        while (j < jLen) {\n          if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) {\n            found = true;\n          }\n\n          j += 1;\n        }\n\n        if (!found) {\n          this.chars.push(chars[i]);\n          jLen += 1;\n        }\n      }\n    }\n\n    function getCharData(_char, style, font) {\n      var i = 0;\n      var len = this.chars.length;\n\n      while (i < len) {\n        if (this.chars[i].ch === _char && this.chars[i].style === style && this.chars[i].fFamily === font) {\n          return this.chars[i];\n        }\n\n        i += 1;\n      }\n\n      if ((typeof _char === 'string' && _char.charCodeAt(0) !== 13 || !_char) && console && console.warn // eslint-disable-line no-console\n      && !this._warned) {\n        this._warned = true;\n        console.warn('Missing character from exported characters list: ', _char, style, font); // eslint-disable-line no-console\n      }\n\n      return emptyChar;\n    }\n\n    function measureText(_char2, fontName, size) {\n      var fontData = this.getFontByName(fontName); // Using the char instead of char.charCodeAt(0)\n      // to avoid collisions between equal chars\n\n      var index = _char2;\n\n      if (!fontData.cache[index]) {\n        var tHelper = fontData.helper;\n\n        if (_char2 === ' ') {\n          var doubleSize = tHelper.measureText('|' + _char2 + '|');\n          var singleSize = tHelper.measureText('||');\n          fontData.cache[index] = (doubleSize - singleSize) / 100;\n        } else {\n          fontData.cache[index] = tHelper.measureText(_char2) / 100;\n        }\n      }\n\n      return fontData.cache[index] * size;\n    }\n\n    function getFontByName(name) {\n      var i = 0;\n      var len = this.fonts.length;\n\n      while (i < len) {\n        if (this.fonts[i].fName === name) {\n          return this.fonts[i];\n        }\n\n        i += 1;\n      }\n\n      return this.fonts[0];\n    }\n\n    function getCodePoint(string) {\n      var codePoint = 0;\n      var first = string.charCodeAt(0);\n\n      if (first >= 0xD800 && first <= 0xDBFF) {\n        var second = string.charCodeAt(1);\n\n        if (second >= 0xDC00 && second <= 0xDFFF) {\n          codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n        }\n      }\n\n      return codePoint;\n    } // Skin tone modifiers\n\n\n    function isModifier(firstCharCode, secondCharCode) {\n      var sum = firstCharCode.toString(16) + secondCharCode.toString(16);\n      return surrogateModifiers.indexOf(sum) !== -1;\n    }\n\n    function isZeroWidthJoiner(charCode) {\n      return charCode === ZERO_WIDTH_JOINER_CODE_POINT;\n    } // This codepoint may change the appearance of the preceding character.\n    // If that is a symbol, dingbat or emoji, U+FE0F forces it to be rendered\n    // as a colorful image as compared to a monochrome text variant.\n\n\n    function isVariationSelector(charCode) {\n      return charCode === VARIATION_SELECTOR_16_CODE_POINT;\n    } // The regional indicator symbols are a set of 26 alphabetic Unicode\n    /// characters (A–Z) intended to be used to encode ISO 3166-1 alpha-2\n    // two-letter country codes in a way that allows optional special treatment.\n\n\n    function isRegionalCode(string) {\n      var codePoint = getCodePoint(string);\n\n      if (codePoint >= REGIONAL_CHARACTER_A_CODE_POINT && codePoint <= REGIONAL_CHARACTER_Z_CODE_POINT) {\n        return true;\n      }\n\n      return false;\n    } // Some Emoji implementations represent combinations of\n    // two “regional indicator” letters as a single flag symbol.\n\n\n    function isFlagEmoji(string) {\n      return isRegionalCode(string.substr(0, 2)) && isRegionalCode(string.substr(2, 2));\n    }\n\n    function isCombinedCharacter(_char3) {\n      return combinedCharacters.indexOf(_char3) !== -1;\n    } // Regional flags start with a BLACK_FLAG_CODE_POINT\n    // folowed by 5 chars in the TAG range\n    // and end with a CANCEL_TAG_CODE_POINT\n\n\n    function isRegionalFlag(text, index) {\n      var codePoint = getCodePoint(text.substr(index, 2));\n\n      if (codePoint !== BLACK_FLAG_CODE_POINT) {\n        return false;\n      }\n\n      var count = 0;\n      index += 2;\n\n      while (count < 5) {\n        codePoint = getCodePoint(text.substr(index, 2));\n\n        if (codePoint < A_TAG_CODE_POINT || codePoint > Z_TAG_CODE_POINT) {\n          return false;\n        }\n\n        count += 1;\n        index += 2;\n      }\n\n      return getCodePoint(text.substr(index, 2)) === CANCEL_TAG_CODE_POINT;\n    }\n\n    function setIsLoaded() {\n      this.isLoaded = true;\n    }\n\n    var Font = function Font() {\n      this.fonts = [];\n      this.chars = null;\n      this.typekitLoaded = 0;\n      this.isLoaded = false;\n      this._warned = false;\n      this.initTime = Date.now();\n      this.setIsLoadedBinded = this.setIsLoaded.bind(this);\n      this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this);\n    };\n\n    Font.isModifier = isModifier;\n    Font.isZeroWidthJoiner = isZeroWidthJoiner;\n    Font.isFlagEmoji = isFlagEmoji;\n    Font.isRegionalCode = isRegionalCode;\n    Font.isCombinedCharacter = isCombinedCharacter;\n    Font.isRegionalFlag = isRegionalFlag;\n    Font.isVariationSelector = isVariationSelector;\n    Font.BLACK_FLAG_CODE_POINT = BLACK_FLAG_CODE_POINT;\n    var fontPrototype = {\n      addChars: addChars,\n      addFonts: addFonts,\n      getCharData: getCharData,\n      getFontByName: getFontByName,\n      measureText: measureText,\n      checkLoadedFonts: checkLoadedFonts,\n      setIsLoaded: setIsLoaded\n    };\n    Font.prototype = fontPrototype;\n    return Font;\n  }();\n\n  function SlotManager(animationData) {\n    this.animationData = animationData;\n  }\n\n  SlotManager.prototype.getProp = function (data) {\n    if (this.animationData.slots && this.animationData.slots[data.sid]) {\n      return Object.assign(data, this.animationData.slots[data.sid].p);\n    }\n\n    return data;\n  };\n\n  function slotFactory(animationData) {\n    return new SlotManager(animationData);\n  }\n\n  function RenderableElement() {}\n\n  RenderableElement.prototype = {\n    initRenderable: function initRenderable() {\n      // layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange\n      this.isInRange = false; // layer's display state\n\n      this.hidden = false; // If layer's transparency equals 0, it can be hidden\n\n      this.isTransparent = false; // list of animated components\n\n      this.renderableComponents = [];\n    },\n    addRenderableComponent: function addRenderableComponent(component) {\n      if (this.renderableComponents.indexOf(component) === -1) {\n        this.renderableComponents.push(component);\n      }\n    },\n    removeRenderableComponent: function removeRenderableComponent(component) {\n      if (this.renderableComponents.indexOf(component) !== -1) {\n        this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1);\n      }\n    },\n    prepareRenderableFrame: function prepareRenderableFrame(num) {\n      this.checkLayerLimits(num);\n    },\n    checkTransparency: function checkTransparency() {\n      if (this.finalTransform.mProp.o.v <= 0) {\n        if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) {\n          this.isTransparent = true;\n          this.hide();\n        }\n      } else if (this.isTransparent) {\n        this.isTransparent = false;\n        this.show();\n      }\n    },\n\n    /**\r\n       * @function\r\n       * Initializes frame related properties.\r\n       *\r\n       * @param {number} num\r\n       * current frame number in Layer's time\r\n       *\r\n       */\n    checkLayerLimits: function checkLayerLimits(num) {\n      if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) {\n        if (this.isInRange !== true) {\n          this.globalData._mdf = true;\n          this._mdf = true;\n          this.isInRange = true;\n          this.show();\n        }\n      } else if (this.isInRange !== false) {\n        this.globalData._mdf = true;\n        this.isInRange = false;\n        this.hide();\n      }\n    },\n    renderRenderable: function renderRenderable() {\n      var i;\n      var len = this.renderableComponents.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.renderableComponents[i].renderFrame(this._isFirstFrame);\n      }\n      /* this.maskManager.renderFrame(this.finalTransform.mat);\r\n          this.renderableEffectsManager.renderFrame(this._isFirstFrame); */\n\n    },\n    sourceRectAtTime: function sourceRectAtTime() {\n      return {\n        top: 0,\n        left: 0,\n        width: 100,\n        height: 100\n      };\n    },\n    getLayerSize: function getLayerSize() {\n      if (this.data.ty === 5) {\n        return {\n          w: this.data.textData.width,\n          h: this.data.textData.height\n        };\n      }\n\n      return {\n        w: this.data.width,\n        h: this.data.height\n      };\n    }\n  };\n\n  var getBlendMode = function () {\n    var blendModeEnums = {\n      0: 'source-over',\n      1: 'multiply',\n      2: 'screen',\n      3: 'overlay',\n      4: 'darken',\n      5: 'lighten',\n      6: 'color-dodge',\n      7: 'color-burn',\n      8: 'hard-light',\n      9: 'soft-light',\n      10: 'difference',\n      11: 'exclusion',\n      12: 'hue',\n      13: 'saturation',\n      14: 'color',\n      15: 'luminosity'\n    };\n    return function (mode) {\n      return blendModeEnums[mode] || '';\n    };\n  }();\n\n  function SliderEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function AngleEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function ColorEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n  }\n\n  function PointEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n  }\n\n  function LayerIndexEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function MaskIndexEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function CheckboxEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function NoValueEffect() {\n    this.p = {};\n  }\n\n  function EffectsManager(data, element) {\n    var effects = data.ef || [];\n    this.effectElements = [];\n    var i;\n    var len = effects.length;\n    var effectItem;\n\n    for (i = 0; i < len; i += 1) {\n      effectItem = new GroupEffect(effects[i], element);\n      this.effectElements.push(effectItem);\n    }\n  }\n\n  function GroupEffect(data, element) {\n    this.init(data, element);\n  }\n\n  extendPrototype([DynamicPropertyContainer], GroupEffect);\n  GroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties;\n\n  GroupEffect.prototype.init = function (data, element) {\n    this.data = data;\n    this.effectElements = [];\n    this.initDynamicPropertyContainer(element);\n    var i;\n    var len = this.data.ef.length;\n    var eff;\n    var effects = this.data.ef;\n\n    for (i = 0; i < len; i += 1) {\n      eff = null;\n\n      switch (effects[i].ty) {\n        case 0:\n          eff = new SliderEffect(effects[i], element, this);\n          break;\n\n        case 1:\n          eff = new AngleEffect(effects[i], element, this);\n          break;\n\n        case 2:\n          eff = new ColorEffect(effects[i], element, this);\n          break;\n\n        case 3:\n          eff = new PointEffect(effects[i], element, this);\n          break;\n\n        case 4:\n        case 7:\n          eff = new CheckboxEffect(effects[i], element, this);\n          break;\n\n        case 10:\n          eff = new LayerIndexEffect(effects[i], element, this);\n          break;\n\n        case 11:\n          eff = new MaskIndexEffect(effects[i], element, this);\n          break;\n\n        case 5:\n          eff = new EffectsManager(effects[i], element, this);\n          break;\n        // case 6:\n\n        default:\n          eff = new NoValueEffect(effects[i], element, this);\n          break;\n      }\n\n      if (eff) {\n        this.effectElements.push(eff);\n      }\n    }\n  };\n\n  function BaseElement() {}\n\n  BaseElement.prototype = {\n    checkMasks: function checkMasks() {\n      if (!this.data.hasMask) {\n        return false;\n      }\n\n      var i = 0;\n      var len = this.data.masksProperties.length;\n\n      while (i < len) {\n        if (this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false) {\n          return true;\n        }\n\n        i += 1;\n      }\n\n      return false;\n    },\n    initExpressions: function initExpressions() {\n      var expressionsInterfaces = getExpressionInterfaces();\n\n      if (!expressionsInterfaces) {\n        return;\n      }\n\n      var LayerExpressionInterface = expressionsInterfaces('layer');\n      var EffectsExpressionInterface = expressionsInterfaces('effects');\n      var ShapeExpressionInterface = expressionsInterfaces('shape');\n      var TextExpressionInterface = expressionsInterfaces('text');\n      var CompExpressionInterface = expressionsInterfaces('comp');\n      this.layerInterface = LayerExpressionInterface(this);\n\n      if (this.data.hasMask && this.maskManager) {\n        this.layerInterface.registerMaskInterface(this.maskManager);\n      }\n\n      var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface);\n      this.layerInterface.registerEffectsInterface(effectsInterface);\n\n      if (this.data.ty === 0 || this.data.xt) {\n        this.compInterface = CompExpressionInterface(this);\n      } else if (this.data.ty === 4) {\n        this.layerInterface.shapeInterface = ShapeExpressionInterface(this.shapesData, this.itemsData, this.layerInterface);\n        this.layerInterface.content = this.layerInterface.shapeInterface;\n      } else if (this.data.ty === 5) {\n        this.layerInterface.textInterface = TextExpressionInterface(this);\n        this.layerInterface.text = this.layerInterface.textInterface;\n      }\n    },\n    setBlendMode: function setBlendMode() {\n      var blendModeValue = getBlendMode(this.data.bm);\n      var elem = this.baseElement || this.layerElement;\n      elem.style['mix-blend-mode'] = blendModeValue;\n    },\n    initBaseData: function initBaseData(data, globalData, comp) {\n      this.globalData = globalData;\n      this.comp = comp;\n      this.data = data;\n      this.layerId = createElementID(); // Stretch factor for old animations missing this property.\n\n      if (!this.data.sr) {\n        this.data.sr = 1;\n      } // effects manager\n\n\n      this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties);\n    },\n    getType: function getType() {\n      return this.type;\n    },\n    sourceRectAtTime: function sourceRectAtTime() {}\n  };\n\n  /**\r\n   * @file\r\n   * Handles element's layer frame update.\r\n   * Checks layer in point and out point\r\n   *\r\n   */\n  function FrameElement() {}\n\n  FrameElement.prototype = {\n    /**\r\n       * @function\r\n       * Initializes frame related properties.\r\n       *\r\n       */\n    initFrame: function initFrame() {\n      // set to true when inpoint is rendered\n      this._isFirstFrame = false; // list of animated properties\n\n      this.dynamicProperties = []; // If layer has been modified in current tick this will be true\n\n      this._mdf = false;\n    },\n\n    /**\r\n       * @function\r\n       * Calculates all dynamic values\r\n       *\r\n       * @param {number} num\r\n       * current frame number in Layer's time\r\n       * @param {boolean} isVisible\r\n       * if layers is currently in range\r\n       *\r\n       */\n    prepareProperties: function prepareProperties(num, isVisible) {\n      var i;\n      var len = this.dynamicProperties.length;\n\n      for (i = 0; i < len; i += 1) {\n        if (isVisible || this._isParent && this.dynamicProperties[i].propType === 'transform') {\n          this.dynamicProperties[i].getValue();\n\n          if (this.dynamicProperties[i]._mdf) {\n            this.globalData._mdf = true;\n            this._mdf = true;\n          }\n        }\n      }\n    },\n    addDynamicProperty: function addDynamicProperty(prop) {\n      if (this.dynamicProperties.indexOf(prop) === -1) {\n        this.dynamicProperties.push(prop);\n      }\n    }\n  };\n\n  function FootageElement(data, globalData, comp) {\n    this.initFrame();\n    this.initRenderable();\n    this.assetData = globalData.getAssetData(data.refId);\n    this.footageData = globalData.imageLoader.getAsset(this.assetData);\n    this.initBaseData(data, globalData, comp);\n  }\n\n  FootageElement.prototype.prepareFrame = function () {};\n\n  extendPrototype([RenderableElement, BaseElement, FrameElement], FootageElement);\n\n  FootageElement.prototype.getBaseElement = function () {\n    return null;\n  };\n\n  FootageElement.prototype.renderFrame = function () {};\n\n  FootageElement.prototype.destroy = function () {};\n\n  FootageElement.prototype.initExpressions = function () {\n    var expressionsInterfaces = getExpressionInterfaces();\n\n    if (!expressionsInterfaces) {\n      return;\n    }\n\n    var FootageInterface = expressionsInterfaces('footage');\n    this.layerInterface = FootageInterface(this);\n  };\n\n  FootageElement.prototype.getFootageData = function () {\n    return this.footageData;\n  };\n\n  function AudioElement(data, globalData, comp) {\n    this.initFrame();\n    this.initRenderable();\n    this.assetData = globalData.getAssetData(data.refId);\n    this.initBaseData(data, globalData, comp);\n    this._isPlaying = false;\n    this._canPlay = false;\n    var assetPath = this.globalData.getAssetsPath(this.assetData);\n    this.audio = this.globalData.audioController.createAudio(assetPath);\n    this._currentTime = 0;\n    this.globalData.audioController.addAudio(this);\n    this._volumeMultiplier = 1;\n    this._volume = 1;\n    this._previousVolume = null;\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n      _placeholder: true\n    };\n    this.lv = PropertyFactory.getProp(this, data.au && data.au.lv ? data.au.lv : {\n      k: [100]\n    }, 1, 0.01, this);\n  }\n\n  AudioElement.prototype.prepareFrame = function (num) {\n    this.prepareRenderableFrame(num, true);\n    this.prepareProperties(num, true);\n\n    if (!this.tm._placeholder) {\n      var timeRemapped = this.tm.v;\n      this._currentTime = timeRemapped;\n    } else {\n      this._currentTime = num / this.data.sr;\n    }\n\n    this._volume = this.lv.v[0];\n    var totalVolume = this._volume * this._volumeMultiplier;\n\n    if (this._previousVolume !== totalVolume) {\n      this._previousVolume = totalVolume;\n      this.audio.volume(totalVolume);\n    }\n  };\n\n  extendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement);\n\n  AudioElement.prototype.renderFrame = function () {\n    if (this.isInRange && this._canPlay) {\n      if (!this._isPlaying) {\n        this.audio.play();\n        this.audio.seek(this._currentTime / this.globalData.frameRate);\n        this._isPlaying = true;\n      } else if (!this.audio.playing() || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > 0.1) {\n        this.audio.seek(this._currentTime / this.globalData.frameRate);\n      }\n    }\n  };\n\n  AudioElement.prototype.show = function () {// this.audio.play()\n  };\n\n  AudioElement.prototype.hide = function () {\n    this.audio.pause();\n    this._isPlaying = false;\n  };\n\n  AudioElement.prototype.pause = function () {\n    this.audio.pause();\n    this._isPlaying = false;\n    this._canPlay = false;\n  };\n\n  AudioElement.prototype.resume = function () {\n    this._canPlay = true;\n  };\n\n  AudioElement.prototype.setRate = function (rateValue) {\n    this.audio.rate(rateValue);\n  };\n\n  AudioElement.prototype.volume = function (volumeValue) {\n    this._volumeMultiplier = volumeValue;\n    this._previousVolume = volumeValue * this._volume;\n    this.audio.volume(this._previousVolume);\n  };\n\n  AudioElement.prototype.getBaseElement = function () {\n    return null;\n  };\n\n  AudioElement.prototype.destroy = function () {};\n\n  AudioElement.prototype.sourceRectAtTime = function () {};\n\n  AudioElement.prototype.initExpressions = function () {};\n\n  function BaseRenderer() {}\n\n  BaseRenderer.prototype.checkLayers = function (num) {\n    var i;\n    var len = this.layers.length;\n    var data;\n    this.completeLayers = true;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (!this.elements[i]) {\n        data = this.layers[i];\n\n        if (data.ip - data.st <= num - this.layers[i].st && data.op - data.st > num - this.layers[i].st) {\n          this.buildItem(i);\n        }\n      }\n\n      this.completeLayers = this.elements[i] ? this.completeLayers : false;\n    }\n\n    this.checkPendingElements();\n  };\n\n  BaseRenderer.prototype.createItem = function (layer) {\n    switch (layer.ty) {\n      case 2:\n        return this.createImage(layer);\n\n      case 0:\n        return this.createComp(layer);\n\n      case 1:\n        return this.createSolid(layer);\n\n      case 3:\n        return this.createNull(layer);\n\n      case 4:\n        return this.createShape(layer);\n\n      case 5:\n        return this.createText(layer);\n\n      case 6:\n        return this.createAudio(layer);\n\n      case 13:\n        return this.createCamera(layer);\n\n      case 15:\n        return this.createFootage(layer);\n\n      default:\n        return this.createNull(layer);\n    }\n  };\n\n  BaseRenderer.prototype.createCamera = function () {\n    throw new Error('You\\'re using a 3d camera. Try the html renderer.');\n  };\n\n  BaseRenderer.prototype.createAudio = function (data) {\n    return new AudioElement(data, this.globalData, this);\n  };\n\n  BaseRenderer.prototype.createFootage = function (data) {\n    return new FootageElement(data, this.globalData, this);\n  };\n\n  BaseRenderer.prototype.buildAllItems = function () {\n    var i;\n    var len = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.buildItem(i);\n    }\n\n    this.checkPendingElements();\n  };\n\n  BaseRenderer.prototype.includeLayers = function (newLayers) {\n    this.completeLayers = false;\n    var i;\n    var len = newLayers.length;\n    var j;\n    var jLen = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      j = 0;\n\n      while (j < jLen) {\n        if (this.layers[j].id === newLayers[i].id) {\n          this.layers[j] = newLayers[i];\n          break;\n        }\n\n        j += 1;\n      }\n    }\n  };\n\n  BaseRenderer.prototype.setProjectInterface = function (pInterface) {\n    this.globalData.projectInterface = pInterface;\n  };\n\n  BaseRenderer.prototype.initItems = function () {\n    if (!this.globalData.progressiveLoad) {\n      this.buildAllItems();\n    }\n  };\n\n  BaseRenderer.prototype.buildElementParenting = function (element, parentName, hierarchy) {\n    var elements = this.elements;\n    var layers = this.layers;\n    var i = 0;\n    var len = layers.length;\n\n    while (i < len) {\n      if (layers[i].ind == parentName) {\n        // eslint-disable-line eqeqeq\n        if (!elements[i] || elements[i] === true) {\n          this.buildItem(i);\n          this.addPendingElement(element);\n        } else {\n          hierarchy.push(elements[i]);\n          elements[i].setAsParent();\n\n          if (layers[i].parent !== undefined) {\n            this.buildElementParenting(element, layers[i].parent, hierarchy);\n          } else {\n            element.setHierarchy(hierarchy);\n          }\n        }\n      }\n\n      i += 1;\n    }\n  };\n\n  BaseRenderer.prototype.addPendingElement = function (element) {\n    this.pendingElements.push(element);\n  };\n\n  BaseRenderer.prototype.searchExtraCompositions = function (assets) {\n    var i;\n    var len = assets.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (assets[i].xt) {\n        var comp = this.createComp(assets[i]);\n        comp.initExpressions();\n        this.globalData.projectInterface.registerComposition(comp);\n      }\n    }\n  };\n\n  BaseRenderer.prototype.getElementById = function (ind) {\n    var i;\n    var len = this.elements.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.elements[i].data.ind === ind) {\n        return this.elements[i];\n      }\n    }\n\n    return null;\n  };\n\n  BaseRenderer.prototype.getElementByPath = function (path) {\n    var pathValue = path.shift();\n    var element;\n\n    if (typeof pathValue === 'number') {\n      element = this.elements[pathValue];\n    } else {\n      var i;\n      var len = this.elements.length;\n\n      for (i = 0; i < len; i += 1) {\n        if (this.elements[i].data.nm === pathValue) {\n          element = this.elements[i];\n          break;\n        }\n      }\n    }\n\n    if (path.length === 0) {\n      return element;\n    }\n\n    return element.getElementByPath(path);\n  };\n\n  BaseRenderer.prototype.setupGlobalData = function (animData, fontsContainer) {\n    this.globalData.fontManager = new FontManager();\n    this.globalData.slotManager = slotFactory(animData);\n    this.globalData.fontManager.addChars(animData.chars);\n    this.globalData.fontManager.addFonts(animData.fonts, fontsContainer);\n    this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);\n    this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);\n    this.globalData.imageLoader = this.animationItem.imagePreloader;\n    this.globalData.audioController = this.animationItem.audioController;\n    this.globalData.frameId = 0;\n    this.globalData.frameRate = animData.fr;\n    this.globalData.nm = animData.nm;\n    this.globalData.compSize = {\n      w: animData.w,\n      h: animData.h\n    };\n  };\n\n  var effectTypes = {\n    TRANSFORM_EFFECT: 'transformEFfect'\n  };\n\n  function TransformElement() {}\n\n  TransformElement.prototype = {\n    initTransform: function initTransform() {\n      var mat = new Matrix();\n      this.finalTransform = {\n        mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : {\n          o: 0\n        },\n        _matMdf: false,\n        _localMatMdf: false,\n        _opMdf: false,\n        mat: mat,\n        localMat: mat,\n        localOpacity: 1\n      };\n\n      if (this.data.ao) {\n        this.finalTransform.mProp.autoOriented = true;\n      } // TODO: check TYPE 11: Guided elements\n\n\n      if (this.data.ty !== 11) {// this.createElements();\n      }\n    },\n    renderTransform: function renderTransform() {\n      this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame;\n      this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame;\n\n      if (this.hierarchy) {\n        var mat;\n        var finalMat = this.finalTransform.mat;\n        var i = 0;\n        var len = this.hierarchy.length; // Checking if any of the transformation matrices in the hierarchy chain has changed.\n\n        if (!this.finalTransform._matMdf) {\n          while (i < len) {\n            if (this.hierarchy[i].finalTransform.mProp._mdf) {\n              this.finalTransform._matMdf = true;\n              break;\n            }\n\n            i += 1;\n          }\n        }\n\n        if (this.finalTransform._matMdf) {\n          mat = this.finalTransform.mProp.v.props;\n          finalMat.cloneFromProps(mat);\n\n          for (i = 0; i < len; i += 1) {\n            finalMat.multiply(this.hierarchy[i].finalTransform.mProp.v);\n          }\n        }\n      }\n\n      if (this.finalTransform._matMdf) {\n        this.finalTransform._localMatMdf = this.finalTransform._matMdf;\n      }\n\n      if (this.finalTransform._opMdf) {\n        this.finalTransform.localOpacity = this.finalTransform.mProp.o.v;\n      }\n    },\n    renderLocalTransform: function renderLocalTransform() {\n      if (this.localTransforms) {\n        var i = 0;\n        var len = this.localTransforms.length;\n        this.finalTransform._localMatMdf = this.finalTransform._matMdf;\n\n        if (!this.finalTransform._localMatMdf || !this.finalTransform._opMdf) {\n          while (i < len) {\n            if (this.localTransforms[i]._mdf) {\n              this.finalTransform._localMatMdf = true;\n            }\n\n            if (this.localTransforms[i]._opMdf && !this.finalTransform._opMdf) {\n              this.finalTransform.localOpacity = this.finalTransform.mProp.o.v;\n              this.finalTransform._opMdf = true;\n            }\n\n            i += 1;\n          }\n        }\n\n        if (this.finalTransform._localMatMdf) {\n          var localMat = this.finalTransform.localMat;\n          this.localTransforms[0].matrix.clone(localMat);\n\n          for (i = 1; i < len; i += 1) {\n            var lmat = this.localTransforms[i].matrix;\n            localMat.multiply(lmat);\n          }\n\n          localMat.multiply(this.finalTransform.mat);\n        }\n\n        if (this.finalTransform._opMdf) {\n          var localOp = this.finalTransform.localOpacity;\n\n          for (i = 0; i < len; i += 1) {\n            localOp *= this.localTransforms[i].opacity * 0.01;\n          }\n\n          this.finalTransform.localOpacity = localOp;\n        }\n      }\n    },\n    searchEffectTransforms: function searchEffectTransforms() {\n      if (this.renderableEffectsManager) {\n        var transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT);\n\n        if (transformEffects.length) {\n          this.localTransforms = [];\n          this.finalTransform.localMat = new Matrix();\n          var i = 0;\n          var len = transformEffects.length;\n\n          for (i = 0; i < len; i += 1) {\n            this.localTransforms.push(transformEffects[i]);\n          }\n        }\n      }\n    },\n    globalToLocal: function globalToLocal(pt) {\n      var transforms = [];\n      transforms.push(this.finalTransform);\n      var flag = true;\n      var comp = this.comp;\n\n      while (flag) {\n        if (comp.finalTransform) {\n          if (comp.data.hasMask) {\n            transforms.splice(0, 0, comp.finalTransform);\n          }\n\n          comp = comp.comp;\n        } else {\n          flag = false;\n        }\n      }\n\n      var i;\n      var len = transforms.length;\n      var ptNew;\n\n      for (i = 0; i < len; i += 1) {\n        ptNew = transforms[i].mat.applyToPointArray(0, 0, 0); // ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);\n\n        pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0];\n      }\n\n      return pt;\n    },\n    mHelper: new Matrix()\n  };\n\n  function MaskElement(data, element, globalData) {\n    this.data = data;\n    this.element = element;\n    this.globalData = globalData;\n    this.storedData = [];\n    this.masksProperties = this.data.masksProperties || [];\n    this.maskElement = null;\n    var defs = this.globalData.defs;\n    var i;\n    var len = this.masksProperties ? this.masksProperties.length : 0;\n    this.viewData = createSizedArray(len);\n    this.solidPath = '';\n    var path;\n    var properties = this.masksProperties;\n    var count = 0;\n    var currentMasks = [];\n    var j;\n    var jLen;\n    var layerId = createElementID();\n    var rect;\n    var expansor;\n    var feMorph;\n    var x;\n    var maskType = 'clipPath';\n    var maskRef = 'clip-path';\n\n    for (i = 0; i < len; i += 1) {\n      if (properties[i].mode !== 'a' && properties[i].mode !== 'n' || properties[i].inv || properties[i].o.k !== 100 || properties[i].o.x) {\n        maskType = 'mask';\n        maskRef = 'mask';\n      }\n\n      if ((properties[i].mode === 's' || properties[i].mode === 'i') && count === 0) {\n        rect = createNS('rect');\n        rect.setAttribute('fill', '#ffffff');\n        rect.setAttribute('width', this.element.comp.data.w || 0);\n        rect.setAttribute('height', this.element.comp.data.h || 0);\n        currentMasks.push(rect);\n      } else {\n        rect = null;\n      }\n\n      path = createNS('path');\n\n      if (properties[i].mode === 'n') {\n        // TODO move this to a factory or to a constructor\n        this.viewData[i] = {\n          op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n          prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n          elem: path,\n          lastPath: ''\n        };\n        defs.appendChild(path);\n      } else {\n        count += 1;\n        path.setAttribute('fill', properties[i].mode === 's' ? '#000000' : '#ffffff');\n        path.setAttribute('clip-rule', 'nonzero');\n        var filterID;\n\n        if (properties[i].x.k !== 0) {\n          maskType = 'mask';\n          maskRef = 'mask';\n          x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element);\n          filterID = createElementID();\n          expansor = createNS('filter');\n          expansor.setAttribute('id', filterID);\n          feMorph = createNS('feMorphology');\n          feMorph.setAttribute('operator', 'erode');\n          feMorph.setAttribute('in', 'SourceGraphic');\n          feMorph.setAttribute('radius', '0');\n          expansor.appendChild(feMorph);\n          defs.appendChild(expansor);\n          path.setAttribute('stroke', properties[i].mode === 's' ? '#000000' : '#ffffff');\n        } else {\n          feMorph = null;\n          x = null;\n        } // TODO move this to a factory or to a constructor\n\n\n        this.storedData[i] = {\n          elem: path,\n          x: x,\n          expan: feMorph,\n          lastPath: '',\n          lastOperator: '',\n          filterId: filterID,\n          lastRadius: 0\n        };\n\n        if (properties[i].mode === 'i') {\n          jLen = currentMasks.length;\n          var g = createNS('g');\n\n          for (j = 0; j < jLen; j += 1) {\n            g.appendChild(currentMasks[j]);\n          }\n\n          var mask = createNS('mask');\n          mask.setAttribute('mask-type', 'alpha');\n          mask.setAttribute('id', layerId + '_' + count);\n          mask.appendChild(path);\n          defs.appendChild(mask);\n          g.setAttribute('mask', 'url(' + getLocationHref() + '#' + layerId + '_' + count + ')');\n          currentMasks.length = 0;\n          currentMasks.push(g);\n        } else {\n          currentMasks.push(path);\n        }\n\n        if (properties[i].inv && !this.solidPath) {\n          this.solidPath = this.createLayerSolidPath();\n        } // TODO move this to a factory or to a constructor\n\n\n        this.viewData[i] = {\n          elem: path,\n          lastPath: '',\n          op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n          prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n          invRect: rect\n        };\n\n        if (!this.viewData[i].prop.k) {\n          this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]);\n        }\n      }\n    }\n\n    this.maskElement = createNS(maskType);\n    len = currentMasks.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.maskElement.appendChild(currentMasks[i]);\n    }\n\n    if (count > 0) {\n      this.maskElement.setAttribute('id', layerId);\n      this.element.maskedElement.setAttribute(maskRef, 'url(' + getLocationHref() + '#' + layerId + ')');\n      defs.appendChild(this.maskElement);\n    }\n\n    if (this.viewData.length) {\n      this.element.addRenderableComponent(this);\n    }\n  }\n\n  MaskElement.prototype.getMaskProperty = function (pos) {\n    return this.viewData[pos].prop;\n  };\n\n  MaskElement.prototype.renderFrame = function (isFirstFrame) {\n    var finalMat = this.element.finalTransform.mat;\n    var i;\n    var len = this.masksProperties.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.viewData[i].prop._mdf || isFirstFrame) {\n        this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]);\n      }\n\n      if (this.viewData[i].op._mdf || isFirstFrame) {\n        this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v);\n      }\n\n      if (this.masksProperties[i].mode !== 'n') {\n        if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) {\n          this.viewData[i].invRect.setAttribute('transform', finalMat.getInverseMatrix().to2dCSS());\n        }\n\n        if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) {\n          var feMorph = this.storedData[i].expan;\n\n          if (this.storedData[i].x.v < 0) {\n            if (this.storedData[i].lastOperator !== 'erode') {\n              this.storedData[i].lastOperator = 'erode';\n              this.storedData[i].elem.setAttribute('filter', 'url(' + getLocationHref() + '#' + this.storedData[i].filterId + ')');\n            }\n\n            feMorph.setAttribute('radius', -this.storedData[i].x.v);\n          } else {\n            if (this.storedData[i].lastOperator !== 'dilate') {\n              this.storedData[i].lastOperator = 'dilate';\n              this.storedData[i].elem.setAttribute('filter', null);\n            }\n\n            this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2);\n          }\n        }\n      }\n    }\n  };\n\n  MaskElement.prototype.getMaskelement = function () {\n    return this.maskElement;\n  };\n\n  MaskElement.prototype.createLayerSolidPath = function () {\n    var path = 'M0,0 ';\n    path += ' h' + this.globalData.compSize.w;\n    path += ' v' + this.globalData.compSize.h;\n    path += ' h-' + this.globalData.compSize.w;\n    path += ' v-' + this.globalData.compSize.h + ' ';\n    return path;\n  };\n\n  MaskElement.prototype.drawPath = function (pathData, pathNodes, viewData) {\n    var pathString = ' M' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n    var i;\n    var len;\n    len = pathNodes._length;\n\n    for (i = 1; i < len; i += 1) {\n      // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[i][0]+','+pathNodes.i[i][1] + \" \"+pathNodes.v[i][0]+','+pathNodes.v[i][1];\n      pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[i][0] + ',' + pathNodes.i[i][1] + ' ' + pathNodes.v[i][0] + ',' + pathNodes.v[i][1];\n    } // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[0][0]+','+pathNodes.i[0][1] + \" \"+pathNodes.v[0][0]+','+pathNodes.v[0][1];\n\n\n    if (pathNodes.c && len > 1) {\n      pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[0][0] + ',' + pathNodes.i[0][1] + ' ' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n    } // pathNodes.__renderedString = pathString;\n\n\n    if (viewData.lastPath !== pathString) {\n      var pathShapeValue = '';\n\n      if (viewData.elem) {\n        if (pathNodes.c) {\n          pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString;\n        }\n\n        viewData.elem.setAttribute('d', pathShapeValue);\n      }\n\n      viewData.lastPath = pathString;\n    }\n  };\n\n  MaskElement.prototype.destroy = function () {\n    this.element = null;\n    this.globalData = null;\n    this.maskElement = null;\n    this.data = null;\n    this.masksProperties = null;\n  };\n\n  var filtersFactory = function () {\n    var ob = {};\n    ob.createFilter = createFilter;\n    ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;\n\n    function createFilter(filId, skipCoordinates) {\n      var fil = createNS('filter');\n      fil.setAttribute('id', filId);\n\n      if (skipCoordinates !== true) {\n        fil.setAttribute('filterUnits', 'objectBoundingBox');\n        fil.setAttribute('x', '0%');\n        fil.setAttribute('y', '0%');\n        fil.setAttribute('width', '100%');\n        fil.setAttribute('height', '100%');\n      }\n\n      return fil;\n    }\n\n    function createAlphaToLuminanceFilter() {\n      var feColorMatrix = createNS('feColorMatrix');\n      feColorMatrix.setAttribute('type', 'matrix');\n      feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n      feColorMatrix.setAttribute('values', '0 0 0 1 0  0 0 0 1 0  0 0 0 1 0  0 0 0 1 1');\n      return feColorMatrix;\n    }\n\n    return ob;\n  }();\n\n  var featureSupport = function () {\n    var ob = {\n      maskType: true,\n      svgLumaHidden: true,\n      offscreenCanvas: typeof OffscreenCanvas !== 'undefined'\n    };\n\n    if (/MSIE 10/i.test(navigator.userAgent) || /MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent) || /Edge\\/\\d./i.test(navigator.userAgent)) {\n      ob.maskType = false;\n    }\n\n    if (/firefox/i.test(navigator.userAgent)) {\n      ob.svgLumaHidden = false;\n    }\n\n    return ob;\n  }();\n\n  var registeredEffects$1 = {};\n  var idPrefix = 'filter_result_';\n\n  function SVGEffects(elem) {\n    var i;\n    var source = 'SourceGraphic';\n    var len = elem.data.ef ? elem.data.ef.length : 0;\n    var filId = createElementID();\n    var fil = filtersFactory.createFilter(filId, true);\n    var count = 0;\n    this.filters = [];\n    var filterManager;\n\n    for (i = 0; i < len; i += 1) {\n      filterManager = null;\n      var type = elem.data.ef[i].ty;\n\n      if (registeredEffects$1[type]) {\n        var Effect = registeredEffects$1[type].effect;\n        filterManager = new Effect(fil, elem.effectsManager.effectElements[i], elem, idPrefix + count, source);\n        source = idPrefix + count;\n\n        if (registeredEffects$1[type].countsAsEffect) {\n          count += 1;\n        }\n      }\n\n      if (filterManager) {\n        this.filters.push(filterManager);\n      }\n    }\n\n    if (count) {\n      elem.globalData.defs.appendChild(fil);\n      elem.layerElement.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n    }\n\n    if (this.filters.length) {\n      elem.addRenderableComponent(this);\n    }\n  }\n\n  SVGEffects.prototype.renderFrame = function (_isFirstFrame) {\n    var i;\n    var len = this.filters.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.filters[i].renderFrame(_isFirstFrame);\n    }\n  };\n\n  SVGEffects.prototype.getEffects = function (type) {\n    var i;\n    var len = this.filters.length;\n    var effects = [];\n\n    for (i = 0; i < len; i += 1) {\n      if (this.filters[i].type === type) {\n        effects.push(this.filters[i]);\n      }\n    }\n\n    return effects;\n  };\n\n  function registerEffect$1(id, effect, countsAsEffect) {\n    registeredEffects$1[id] = {\n      effect: effect,\n      countsAsEffect: countsAsEffect\n    };\n  }\n\n  function SVGBaseElement() {}\n\n  SVGBaseElement.prototype = {\n    initRendererElement: function initRendererElement() {\n      this.layerElement = createNS('g');\n    },\n    createContainerElements: function createContainerElements() {\n      this.matteElement = createNS('g');\n      this.transformedElement = this.layerElement;\n      this.maskedElement = this.layerElement;\n      this._sizeChanged = false;\n      var layerElementParent = null; // If this layer acts as a mask for the following layer\n\n      if (this.data.td) {\n        this.matteMasks = {};\n        var gg = createNS('g');\n        gg.setAttribute('id', this.layerId);\n        gg.appendChild(this.layerElement);\n        layerElementParent = gg;\n        this.globalData.defs.appendChild(gg);\n      } else if (this.data.tt) {\n        this.matteElement.appendChild(this.layerElement);\n        layerElementParent = this.matteElement;\n        this.baseElement = this.matteElement;\n      } else {\n        this.baseElement = this.layerElement;\n      }\n\n      if (this.data.ln) {\n        this.layerElement.setAttribute('id', this.data.ln);\n      }\n\n      if (this.data.cl) {\n        this.layerElement.setAttribute('class', this.data.cl);\n      } // Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped\n\n\n      if (this.data.ty === 0 && !this.data.hd) {\n        var cp = createNS('clipPath');\n        var pt = createNS('path');\n        pt.setAttribute('d', 'M0,0 L' + this.data.w + ',0 L' + this.data.w + ',' + this.data.h + ' L0,' + this.data.h + 'z');\n        var clipId = createElementID();\n        cp.setAttribute('id', clipId);\n        cp.appendChild(pt);\n        this.globalData.defs.appendChild(cp);\n\n        if (this.checkMasks()) {\n          var cpGroup = createNS('g');\n          cpGroup.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n          cpGroup.appendChild(this.layerElement);\n          this.transformedElement = cpGroup;\n\n          if (layerElementParent) {\n            layerElementParent.appendChild(this.transformedElement);\n          } else {\n            this.baseElement = this.transformedElement;\n          }\n        } else {\n          this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n        }\n      }\n\n      if (this.data.bm !== 0) {\n        this.setBlendMode();\n      }\n    },\n    renderElement: function renderElement() {\n      if (this.finalTransform._localMatMdf) {\n        this.transformedElement.setAttribute('transform', this.finalTransform.localMat.to2dCSS());\n      }\n\n      if (this.finalTransform._opMdf) {\n        this.transformedElement.setAttribute('opacity', this.finalTransform.localOpacity);\n      }\n    },\n    destroyBaseElement: function destroyBaseElement() {\n      this.layerElement = null;\n      this.matteElement = null;\n      this.maskManager.destroy();\n    },\n    getBaseElement: function getBaseElement() {\n      if (this.data.hd) {\n        return null;\n      }\n\n      return this.baseElement;\n    },\n    createRenderableComponents: function createRenderableComponents() {\n      this.maskManager = new MaskElement(this.data, this, this.globalData);\n      this.renderableEffectsManager = new SVGEffects(this);\n      this.searchEffectTransforms();\n    },\n    getMatte: function getMatte(matteType) {\n      // This should not be a common case. But for backward compatibility, we'll create the matte object.\n      // It solves animations that have two consecutive layers marked as matte masks.\n      // Which is an undefined behavior in AE.\n      if (!this.matteMasks) {\n        this.matteMasks = {};\n      }\n\n      if (!this.matteMasks[matteType]) {\n        var id = this.layerId + '_' + matteType;\n        var filId;\n        var fil;\n        var useElement;\n        var gg;\n\n        if (matteType === 1 || matteType === 3) {\n          var masker = createNS('mask');\n          masker.setAttribute('id', id);\n          masker.setAttribute('mask-type', matteType === 3 ? 'luminance' : 'alpha');\n          useElement = createNS('use');\n          useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + this.layerId);\n          masker.appendChild(useElement);\n          this.globalData.defs.appendChild(masker);\n\n          if (!featureSupport.maskType && matteType === 1) {\n            masker.setAttribute('mask-type', 'luminance');\n            filId = createElementID();\n            fil = filtersFactory.createFilter(filId);\n            this.globalData.defs.appendChild(fil);\n            fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n            gg = createNS('g');\n            gg.appendChild(useElement);\n            masker.appendChild(gg);\n            gg.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n          }\n        } else if (matteType === 2) {\n          var maskGroup = createNS('mask');\n          maskGroup.setAttribute('id', id);\n          maskGroup.setAttribute('mask-type', 'alpha');\n          var maskGrouper = createNS('g');\n          maskGroup.appendChild(maskGrouper);\n          filId = createElementID();\n          fil = filtersFactory.createFilter(filId); /// /\n\n          var feCTr = createNS('feComponentTransfer');\n          feCTr.setAttribute('in', 'SourceGraphic');\n          fil.appendChild(feCTr);\n          var feFunc = createNS('feFuncA');\n          feFunc.setAttribute('type', 'table');\n          feFunc.setAttribute('tableValues', '1.0 0.0');\n          feCTr.appendChild(feFunc); /// /\n\n          this.globalData.defs.appendChild(fil);\n          var alphaRect = createNS('rect');\n          alphaRect.setAttribute('width', this.comp.data.w);\n          alphaRect.setAttribute('height', this.comp.data.h);\n          alphaRect.setAttribute('x', '0');\n          alphaRect.setAttribute('y', '0');\n          alphaRect.setAttribute('fill', '#ffffff');\n          alphaRect.setAttribute('opacity', '0');\n          maskGrouper.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n          maskGrouper.appendChild(alphaRect);\n          useElement = createNS('use');\n          useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + this.layerId);\n          maskGrouper.appendChild(useElement);\n\n          if (!featureSupport.maskType) {\n            maskGroup.setAttribute('mask-type', 'luminance');\n            fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n            gg = createNS('g');\n            maskGrouper.appendChild(alphaRect);\n            gg.appendChild(this.layerElement);\n            maskGrouper.appendChild(gg);\n          }\n\n          this.globalData.defs.appendChild(maskGroup);\n        }\n\n        this.matteMasks[matteType] = id;\n      }\n\n      return this.matteMasks[matteType];\n    },\n    setMatte: function setMatte(id) {\n      if (!this.matteElement) {\n        return;\n      }\n\n      this.matteElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n    }\n  };\n\n  /**\r\n   * @file\r\n   * Handles AE's layer parenting property.\r\n   *\r\n   */\n  function HierarchyElement() {}\n\n  HierarchyElement.prototype = {\n    /**\r\n       * @function\r\n       * Initializes hierarchy properties\r\n       *\r\n       */\n    initHierarchy: function initHierarchy() {\n      // element's parent list\n      this.hierarchy = []; // if element is parent of another layer _isParent will be true\n\n      this._isParent = false;\n      this.checkParenting();\n    },\n\n    /**\r\n       * @function\r\n       * Sets layer's hierarchy.\r\n       * @param {array} hierarch\r\n       * layer's parent list\r\n       *\r\n       */\n    setHierarchy: function setHierarchy(hierarchy) {\n      this.hierarchy = hierarchy;\n    },\n\n    /**\r\n       * @function\r\n       * Sets layer as parent.\r\n       *\r\n       */\n    setAsParent: function setAsParent() {\n      this._isParent = true;\n    },\n\n    /**\r\n       * @function\r\n       * Searches layer's parenting chain\r\n       *\r\n       */\n    checkParenting: function checkParenting() {\n      if (this.data.parent !== undefined) {\n        this.comp.buildElementParenting(this, this.data.parent, []);\n      }\n    }\n  };\n\n  function RenderableDOMElement() {}\n\n  (function () {\n    var _prototype = {\n      initElement: function initElement(data, globalData, comp) {\n        this.initFrame();\n        this.initBaseData(data, globalData, comp);\n        this.initTransform(data, globalData, comp);\n        this.initHierarchy();\n        this.initRenderable();\n        this.initRendererElement();\n        this.createContainerElements();\n        this.createRenderableComponents();\n        this.createContent();\n        this.hide();\n      },\n      hide: function hide() {\n        // console.log('HIDE', this);\n        if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n          var elem = this.baseElement || this.layerElement;\n          elem.style.display = 'none';\n          this.hidden = true;\n        }\n      },\n      show: function show() {\n        // console.log('SHOW', this);\n        if (this.isInRange && !this.isTransparent) {\n          if (!this.data.hd) {\n            var elem = this.baseElement || this.layerElement;\n            elem.style.display = 'block';\n          }\n\n          this.hidden = false;\n          this._isFirstFrame = true;\n        }\n      },\n      renderFrame: function renderFrame() {\n        // If it is exported as hidden (data.hd === true) no need to render\n        // If it is not visible no need to render\n        if (this.data.hd || this.hidden) {\n          return;\n        }\n\n        this.renderTransform();\n        this.renderRenderable();\n        this.renderLocalTransform();\n        this.renderElement();\n        this.renderInnerContent();\n\n        if (this._isFirstFrame) {\n          this._isFirstFrame = false;\n        }\n      },\n      renderInnerContent: function renderInnerContent() {},\n      prepareFrame: function prepareFrame(num) {\n        this._mdf = false;\n        this.prepareRenderableFrame(num);\n        this.prepareProperties(num, this.isInRange);\n        this.checkTransparency();\n      },\n      destroy: function destroy() {\n        this.innerElem = null;\n        this.destroyBaseElement();\n      }\n    };\n    extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement);\n  })();\n\n  function IImageElement(data, globalData, comp) {\n    this.assetData = globalData.getAssetData(data.refId);\n\n    if (this.assetData && this.assetData.sid) {\n      this.assetData = globalData.slotManager.getProp(this.assetData);\n    }\n\n    this.initElement(data, globalData, comp);\n    this.sourceRect = {\n      top: 0,\n      left: 0,\n      width: this.assetData.w,\n      height: this.assetData.h\n    };\n  }\n\n  extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement);\n\n  IImageElement.prototype.createContent = function () {\n    var assetPath = this.globalData.getAssetsPath(this.assetData);\n    this.innerElem = createNS('image');\n    this.innerElem.setAttribute('width', this.assetData.w + 'px');\n    this.innerElem.setAttribute('height', this.assetData.h + 'px');\n    this.innerElem.setAttribute('preserveAspectRatio', this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio);\n    this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n    this.layerElement.appendChild(this.innerElem);\n  };\n\n  IImageElement.prototype.sourceRectAtTime = function () {\n    return this.sourceRect;\n  };\n\n  function ProcessedElement(element, position) {\n    this.elem = element;\n    this.pos = position;\n  }\n\n  function IShapeElement() {}\n\n  IShapeElement.prototype = {\n    addShapeToModifiers: function addShapeToModifiers(data) {\n      var i;\n      var len = this.shapeModifiers.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.shapeModifiers[i].addShape(data);\n      }\n    },\n    isShapeInAnimatedModifiers: function isShapeInAnimatedModifiers(data) {\n      var i = 0;\n      var len = this.shapeModifiers.length;\n\n      while (i < len) {\n        if (this.shapeModifiers[i].isAnimatedWithShape(data)) {\n          return true;\n        }\n      }\n\n      return false;\n    },\n    renderModifiers: function renderModifiers() {\n      if (!this.shapeModifiers.length) {\n        return;\n      }\n\n      var i;\n      var len = this.shapes.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.shapes[i].sh.reset();\n      }\n\n      len = this.shapeModifiers.length;\n      var shouldBreakProcess;\n\n      for (i = len - 1; i >= 0; i -= 1) {\n        shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame); // workaround to fix cases where a repeater resets the shape so the following processes get called twice\n        // TODO: find a better solution for this\n\n        if (shouldBreakProcess) {\n          break;\n        }\n      }\n    },\n    searchProcessedElement: function searchProcessedElement(elem) {\n      var elements = this.processedElements;\n      var i = 0;\n      var len = elements.length;\n\n      while (i < len) {\n        if (elements[i].elem === elem) {\n          return elements[i].pos;\n        }\n\n        i += 1;\n      }\n\n      return 0;\n    },\n    addProcessedElement: function addProcessedElement(elem, pos) {\n      var elements = this.processedElements;\n      var i = elements.length;\n\n      while (i) {\n        i -= 1;\n\n        if (elements[i].elem === elem) {\n          elements[i].pos = pos;\n          return;\n        }\n      }\n\n      elements.push(new ProcessedElement(elem, pos));\n    },\n    prepareFrame: function prepareFrame(num) {\n      this.prepareRenderableFrame(num);\n      this.prepareProperties(num, this.isInRange);\n    }\n  };\n\n  var lineCapEnum = {\n    1: 'butt',\n    2: 'round',\n    3: 'square'\n  };\n  var lineJoinEnum = {\n    1: 'miter',\n    2: 'round',\n    3: 'bevel'\n  };\n\n  function SVGShapeData(transformers, level, shape) {\n    this.caches = [];\n    this.styles = [];\n    this.transformers = transformers;\n    this.lStr = '';\n    this.sh = shape;\n    this.lvl = level; // TODO find if there are some cases where _isAnimated can be false.\n    // For now, since shapes add up with other shapes. They have to be calculated every time.\n    // One way of finding out is checking if all styles associated to this shape depend only of this shape\n\n    this._isAnimated = !!shape.k; // TODO: commenting this for now since all shapes are animated\n\n    var i = 0;\n    var len = transformers.length;\n\n    while (i < len) {\n      if (transformers[i].mProps.dynamicProperties.length) {\n        this._isAnimated = true;\n        break;\n      }\n\n      i += 1;\n    }\n  }\n\n  SVGShapeData.prototype.setAsAnimated = function () {\n    this._isAnimated = true;\n  };\n\n  function SVGStyleData(data, level) {\n    this.data = data;\n    this.type = data.ty;\n    this.d = '';\n    this.lvl = level;\n    this._mdf = false;\n    this.closed = data.hd === true;\n    this.pElem = createNS('path');\n    this.msElem = null;\n  }\n\n  SVGStyleData.prototype.reset = function () {\n    this.d = '';\n    this._mdf = false;\n  };\n\n  function DashProperty(elem, data, renderer, container) {\n    this.elem = elem;\n    this.frameId = -1;\n    this.dataProps = createSizedArray(data.length);\n    this.renderer = renderer;\n    this.k = false;\n    this.dashStr = '';\n    this.dashArray = createTypedArray('float32', data.length ? data.length - 1 : 0);\n    this.dashoffset = createTypedArray('float32', 1);\n    this.initDynamicPropertyContainer(container);\n    var i;\n    var len = data.length || 0;\n    var prop;\n\n    for (i = 0; i < len; i += 1) {\n      prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, this);\n      this.k = prop.k || this.k;\n      this.dataProps[i] = {\n        n: data[i].n,\n        p: prop\n      };\n    }\n\n    if (!this.k) {\n      this.getValue(true);\n    }\n\n    this._isAnimated = this.k;\n  }\n\n  DashProperty.prototype.getValue = function (forceRender) {\n    if (this.elem.globalData.frameId === this.frameId && !forceRender) {\n      return;\n    }\n\n    this.frameId = this.elem.globalData.frameId;\n    this.iterateDynamicProperties();\n    this._mdf = this._mdf || forceRender;\n\n    if (this._mdf) {\n      var i = 0;\n      var len = this.dataProps.length;\n\n      if (this.renderer === 'svg') {\n        this.dashStr = '';\n      }\n\n      for (i = 0; i < len; i += 1) {\n        if (this.dataProps[i].n !== 'o') {\n          if (this.renderer === 'svg') {\n            this.dashStr += ' ' + this.dataProps[i].p.v;\n          } else {\n            this.dashArray[i] = this.dataProps[i].p.v;\n          }\n        } else {\n          this.dashoffset[0] = this.dataProps[i].p.v;\n        }\n      }\n    }\n  };\n\n  extendPrototype([DynamicPropertyContainer], DashProperty);\n\n  function SVGStrokeStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n    this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n    this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n    this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n    this.style = styleOb;\n    this._isAnimated = !!this._isAnimated;\n  }\n\n  extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData);\n\n  function SVGFillStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n    this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n    this.style = styleOb;\n  }\n\n  extendPrototype([DynamicPropertyContainer], SVGFillStyleData);\n\n  function SVGNoStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.style = styleOb;\n  }\n\n  extendPrototype([DynamicPropertyContainer], SVGNoStyleData);\n\n  function GradientProperty(elem, data, container) {\n    this.data = data;\n    this.c = createTypedArray('uint8c', data.p * 4);\n    var cLength = data.k.k[0].s ? data.k.k[0].s.length - data.p * 4 : data.k.k.length - data.p * 4;\n    this.o = createTypedArray('float32', cLength);\n    this._cmdf = false;\n    this._omdf = false;\n    this._collapsable = this.checkCollapsable();\n    this._hasOpacity = cLength;\n    this.initDynamicPropertyContainer(container);\n    this.prop = PropertyFactory.getProp(elem, data.k, 1, null, this);\n    this.k = this.prop.k;\n    this.getValue(true);\n  }\n\n  GradientProperty.prototype.comparePoints = function (values, points) {\n    var i = 0;\n    var len = this.o.length / 2;\n    var diff;\n\n    while (i < len) {\n      diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]);\n\n      if (diff > 0.01) {\n        return false;\n      }\n\n      i += 1;\n    }\n\n    return true;\n  };\n\n  GradientProperty.prototype.checkCollapsable = function () {\n    if (this.o.length / 2 !== this.c.length / 4) {\n      return false;\n    }\n\n    if (this.data.k.k[0].s) {\n      var i = 0;\n      var len = this.data.k.k.length;\n\n      while (i < len) {\n        if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {\n          return false;\n        }\n\n        i += 1;\n      }\n    } else if (!this.comparePoints(this.data.k.k, this.data.p)) {\n      return false;\n    }\n\n    return true;\n  };\n\n  GradientProperty.prototype.getValue = function (forceRender) {\n    this.prop.getValue();\n    this._mdf = false;\n    this._cmdf = false;\n    this._omdf = false;\n\n    if (this.prop._mdf || forceRender) {\n      var i;\n      var len = this.data.p * 4;\n      var mult;\n      var val;\n\n      for (i = 0; i < len; i += 1) {\n        mult = i % 4 === 0 ? 100 : 255;\n        val = Math.round(this.prop.v[i] * mult);\n\n        if (this.c[i] !== val) {\n          this.c[i] = val;\n          this._cmdf = !forceRender;\n        }\n      }\n\n      if (this.o.length) {\n        len = this.prop.v.length;\n\n        for (i = this.data.p * 4; i < len; i += 1) {\n          mult = i % 2 === 0 ? 100 : 1;\n          val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i];\n\n          if (this.o[i - this.data.p * 4] !== val) {\n            this.o[i - this.data.p * 4] = val;\n            this._omdf = !forceRender;\n          }\n        }\n      }\n\n      this._mdf = !forceRender;\n    }\n  };\n\n  extendPrototype([DynamicPropertyContainer], GradientProperty);\n\n  function SVGGradientFillStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.initGradientData(elem, data, styleOb);\n  }\n\n  SVGGradientFillStyleData.prototype.initGradientData = function (elem, data, styleOb) {\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n    this.s = PropertyFactory.getProp(elem, data.s, 1, null, this);\n    this.e = PropertyFactory.getProp(elem, data.e, 1, null, this);\n    this.h = PropertyFactory.getProp(elem, data.h || {\n      k: 0\n    }, 0, 0.01, this);\n    this.a = PropertyFactory.getProp(elem, data.a || {\n      k: 0\n    }, 0, degToRads, this);\n    this.g = new GradientProperty(elem, data.g, this);\n    this.style = styleOb;\n    this.stops = [];\n    this.setGradientData(styleOb.pElem, data);\n    this.setGradientOpacity(data, styleOb);\n    this._isAnimated = !!this._isAnimated;\n  };\n\n  SVGGradientFillStyleData.prototype.setGradientData = function (pathElement, data) {\n    var gradientId = createElementID();\n    var gfill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n    gfill.setAttribute('id', gradientId);\n    gfill.setAttribute('spreadMethod', 'pad');\n    gfill.setAttribute('gradientUnits', 'userSpaceOnUse');\n    var stops = [];\n    var stop;\n    var j;\n    var jLen;\n    jLen = data.g.p * 4;\n\n    for (j = 0; j < jLen; j += 4) {\n      stop = createNS('stop');\n      gfill.appendChild(stop);\n      stops.push(stop);\n    }\n\n    pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + gradientId + ')');\n    this.gf = gfill;\n    this.cst = stops;\n  };\n\n  SVGGradientFillStyleData.prototype.setGradientOpacity = function (data, styleOb) {\n    if (this.g._hasOpacity && !this.g._collapsable) {\n      var stop;\n      var j;\n      var jLen;\n      var mask = createNS('mask');\n      var maskElement = createNS('path');\n      mask.appendChild(maskElement);\n      var opacityId = createElementID();\n      var maskId = createElementID();\n      mask.setAttribute('id', maskId);\n      var opFill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n      opFill.setAttribute('id', opacityId);\n      opFill.setAttribute('spreadMethod', 'pad');\n      opFill.setAttribute('gradientUnits', 'userSpaceOnUse');\n      jLen = data.g.k.k[0].s ? data.g.k.k[0].s.length : data.g.k.k.length;\n      var stops = this.stops;\n\n      for (j = data.g.p * 4; j < jLen; j += 2) {\n        stop = createNS('stop');\n        stop.setAttribute('stop-color', 'rgb(255,255,255)');\n        opFill.appendChild(stop);\n        stops.push(stop);\n      }\n\n      maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + opacityId + ')');\n\n      if (data.ty === 'gs') {\n        maskElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n        maskElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n\n        if (data.lj === 1) {\n          maskElement.setAttribute('stroke-miterlimit', data.ml);\n        }\n      }\n\n      this.of = opFill;\n      this.ms = mask;\n      this.ost = stops;\n      this.maskId = maskId;\n      styleOb.msElem = maskElement;\n    }\n  };\n\n  extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData);\n\n  function SVGGradientStrokeStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n    this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n    this.initGradientData(elem, data, styleOb);\n    this._isAnimated = !!this._isAnimated;\n  }\n\n  extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData);\n\n  function ShapeGroupData() {\n    this.it = [];\n    this.prevViewData = [];\n    this.gr = createNS('g');\n  }\n\n  function SVGTransformData(mProps, op, container) {\n    this.transform = {\n      mProps: mProps,\n      op: op,\n      container: container\n    };\n    this.elements = [];\n    this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length;\n  }\n\n  var buildShapeString = function buildShapeString(pathNodes, length, closed, mat) {\n    if (length === 0) {\n      return '';\n    }\n\n    var _o = pathNodes.o;\n    var _i = pathNodes.i;\n    var _v = pathNodes.v;\n    var i;\n    var shapeString = ' M' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n\n    for (i = 1; i < length; i += 1) {\n      shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[i][0], _i[i][1]) + ' ' + mat.applyToPointStringified(_v[i][0], _v[i][1]);\n    }\n\n    if (closed && length) {\n      shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[0][0], _i[0][1]) + ' ' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n      shapeString += 'z';\n    }\n\n    return shapeString;\n  };\n\n  var SVGElementsRenderer = function () {\n    var _identityMatrix = new Matrix();\n\n    var _matrixHelper = new Matrix();\n\n    var ob = {\n      createRenderFunction: createRenderFunction\n    };\n\n    function createRenderFunction(data) {\n      switch (data.ty) {\n        case 'fl':\n          return renderFill;\n\n        case 'gf':\n          return renderGradient;\n\n        case 'gs':\n          return renderGradientStroke;\n\n        case 'st':\n          return renderStroke;\n\n        case 'sh':\n        case 'el':\n        case 'rc':\n        case 'sr':\n          return renderPath;\n\n        case 'tr':\n          return renderContentTransform;\n\n        case 'no':\n          return renderNoop;\n\n        default:\n          return null;\n      }\n    }\n\n    function renderContentTransform(styleData, itemData, isFirstFrame) {\n      if (isFirstFrame || itemData.transform.op._mdf) {\n        itemData.transform.container.setAttribute('opacity', itemData.transform.op.v);\n      }\n\n      if (isFirstFrame || itemData.transform.mProps._mdf) {\n        itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS());\n      }\n    }\n\n    function renderNoop() {}\n\n    function renderPath(styleData, itemData, isFirstFrame) {\n      var j;\n      var jLen;\n      var pathStringTransformed;\n      var redraw;\n      var pathNodes;\n      var l;\n      var lLen = itemData.styles.length;\n      var lvl = itemData.lvl;\n      var paths;\n      var mat;\n      var iterations;\n      var k;\n\n      for (l = 0; l < lLen; l += 1) {\n        redraw = itemData.sh._mdf || isFirstFrame;\n\n        if (itemData.styles[l].lvl < lvl) {\n          mat = _matrixHelper.reset();\n          iterations = lvl - itemData.styles[l].lvl;\n          k = itemData.transformers.length - 1;\n\n          while (!redraw && iterations > 0) {\n            redraw = itemData.transformers[k].mProps._mdf || redraw;\n            iterations -= 1;\n            k -= 1;\n          }\n\n          if (redraw) {\n            iterations = lvl - itemData.styles[l].lvl;\n            k = itemData.transformers.length - 1;\n\n            while (iterations > 0) {\n              mat.multiply(itemData.transformers[k].mProps.v);\n              iterations -= 1;\n              k -= 1;\n            }\n          }\n        } else {\n          mat = _identityMatrix;\n        }\n\n        paths = itemData.sh.paths;\n        jLen = paths._length;\n\n        if (redraw) {\n          pathStringTransformed = '';\n\n          for (j = 0; j < jLen; j += 1) {\n            pathNodes = paths.shapes[j];\n\n            if (pathNodes && pathNodes._length) {\n              pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);\n            }\n          }\n\n          itemData.caches[l] = pathStringTransformed;\n        } else {\n          pathStringTransformed = itemData.caches[l];\n        }\n\n        itemData.styles[l].d += styleData.hd === true ? '' : pathStringTransformed;\n        itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf;\n      }\n    }\n\n    function renderFill(styleData, itemData, isFirstFrame) {\n      var styleElem = itemData.style;\n\n      if (itemData.c._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('fill', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n      }\n\n      if (itemData.o._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('fill-opacity', itemData.o.v);\n      }\n    }\n\n    function renderGradientStroke(styleData, itemData, isFirstFrame) {\n      renderGradient(styleData, itemData, isFirstFrame);\n      renderStroke(styleData, itemData, isFirstFrame);\n    }\n\n    function renderGradient(styleData, itemData, isFirstFrame) {\n      var gfill = itemData.gf;\n      var hasOpacity = itemData.g._hasOpacity;\n      var pt1 = itemData.s.v;\n      var pt2 = itemData.e.v;\n\n      if (itemData.o._mdf || isFirstFrame) {\n        var attr = styleData.ty === 'gf' ? 'fill-opacity' : 'stroke-opacity';\n        itemData.style.pElem.setAttribute(attr, itemData.o.v);\n      }\n\n      if (itemData.s._mdf || isFirstFrame) {\n        var attr1 = styleData.t === 1 ? 'x1' : 'cx';\n        var attr2 = attr1 === 'x1' ? 'y1' : 'cy';\n        gfill.setAttribute(attr1, pt1[0]);\n        gfill.setAttribute(attr2, pt1[1]);\n\n        if (hasOpacity && !itemData.g._collapsable) {\n          itemData.of.setAttribute(attr1, pt1[0]);\n          itemData.of.setAttribute(attr2, pt1[1]);\n        }\n      }\n\n      var stops;\n      var i;\n      var len;\n      var stop;\n\n      if (itemData.g._cmdf || isFirstFrame) {\n        stops = itemData.cst;\n        var cValues = itemData.g.c;\n        len = stops.length;\n\n        for (i = 0; i < len; i += 1) {\n          stop = stops[i];\n          stop.setAttribute('offset', cValues[i * 4] + '%');\n          stop.setAttribute('stop-color', 'rgb(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ')');\n        }\n      }\n\n      if (hasOpacity && (itemData.g._omdf || isFirstFrame)) {\n        var oValues = itemData.g.o;\n\n        if (itemData.g._collapsable) {\n          stops = itemData.cst;\n        } else {\n          stops = itemData.ost;\n        }\n\n        len = stops.length;\n\n        for (i = 0; i < len; i += 1) {\n          stop = stops[i];\n\n          if (!itemData.g._collapsable) {\n            stop.setAttribute('offset', oValues[i * 2] + '%');\n          }\n\n          stop.setAttribute('stop-opacity', oValues[i * 2 + 1]);\n        }\n      }\n\n      if (styleData.t === 1) {\n        if (itemData.e._mdf || isFirstFrame) {\n          gfill.setAttribute('x2', pt2[0]);\n          gfill.setAttribute('y2', pt2[1]);\n\n          if (hasOpacity && !itemData.g._collapsable) {\n            itemData.of.setAttribute('x2', pt2[0]);\n            itemData.of.setAttribute('y2', pt2[1]);\n          }\n        }\n      } else {\n        var rad;\n\n        if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) {\n          rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n          gfill.setAttribute('r', rad);\n\n          if (hasOpacity && !itemData.g._collapsable) {\n            itemData.of.setAttribute('r', rad);\n          }\n        }\n\n        if (itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) {\n          if (!rad) {\n            rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n          }\n\n          var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n          var percent = itemData.h.v;\n\n          if (percent >= 1) {\n            percent = 0.99;\n          } else if (percent <= -1) {\n            percent = -0.99;\n          }\n\n          var dist = rad * percent;\n          var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n          var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n          gfill.setAttribute('fx', x);\n          gfill.setAttribute('fy', y);\n\n          if (hasOpacity && !itemData.g._collapsable) {\n            itemData.of.setAttribute('fx', x);\n            itemData.of.setAttribute('fy', y);\n          }\n        } // gfill.setAttribute('fy','200');\n\n      }\n    }\n\n    function renderStroke(styleData, itemData, isFirstFrame) {\n      var styleElem = itemData.style;\n      var d = itemData.d;\n\n      if (d && (d._mdf || isFirstFrame) && d.dashStr) {\n        styleElem.pElem.setAttribute('stroke-dasharray', d.dashStr);\n        styleElem.pElem.setAttribute('stroke-dashoffset', d.dashoffset[0]);\n      }\n\n      if (itemData.c && (itemData.c._mdf || isFirstFrame)) {\n        styleElem.pElem.setAttribute('stroke', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n      }\n\n      if (itemData.o._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v);\n      }\n\n      if (itemData.w._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('stroke-width', itemData.w.v);\n\n        if (styleElem.msElem) {\n          styleElem.msElem.setAttribute('stroke-width', itemData.w.v);\n        }\n      }\n    }\n\n    return ob;\n  }();\n\n  function SVGShapeElement(data, globalData, comp) {\n    // List of drawable elements\n    this.shapes = []; // Full shape data\n\n    this.shapesData = data.shapes; // List of styles that will be applied to shapes\n\n    this.stylesList = []; // List of modifiers that will be applied to shapes\n\n    this.shapeModifiers = []; // List of items in shape tree\n\n    this.itemsData = []; // List of items in previous shape tree\n\n    this.processedElements = []; // List of animated components\n\n    this.animatedContents = [];\n    this.initElement(data, globalData, comp); // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n    // List of elements that have been created\n\n    this.prevViewData = []; // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n  }\n\n  extendPrototype([BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableDOMElement], SVGShapeElement);\n\n  SVGShapeElement.prototype.initSecondaryElement = function () {};\n\n  SVGShapeElement.prototype.identityMatrix = new Matrix();\n\n  SVGShapeElement.prototype.buildExpressionInterface = function () {};\n\n  SVGShapeElement.prototype.createContent = function () {\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n    this.filterUniqueShapes();\n  };\n  /*\r\n  This method searches for multiple shapes that affect a single element and one of them is animated\r\n  */\n\n\n  SVGShapeElement.prototype.filterUniqueShapes = function () {\n    var i;\n    var len = this.shapes.length;\n    var shape;\n    var j;\n    var jLen = this.stylesList.length;\n    var style;\n    var tempShapes = [];\n    var areAnimated = false;\n\n    for (j = 0; j < jLen; j += 1) {\n      style = this.stylesList[j];\n      areAnimated = false;\n      tempShapes.length = 0;\n\n      for (i = 0; i < len; i += 1) {\n        shape = this.shapes[i];\n\n        if (shape.styles.indexOf(style) !== -1) {\n          tempShapes.push(shape);\n          areAnimated = shape._isAnimated || areAnimated;\n        }\n      }\n\n      if (tempShapes.length > 1 && areAnimated) {\n        this.setShapesAsAnimated(tempShapes);\n      }\n    }\n  };\n\n  SVGShapeElement.prototype.setShapesAsAnimated = function (shapes) {\n    var i;\n    var len = shapes.length;\n\n    for (i = 0; i < len; i += 1) {\n      shapes[i].setAsAnimated();\n    }\n  };\n\n  SVGShapeElement.prototype.createStyleElement = function (data, level) {\n    // TODO: prevent drawing of hidden styles\n    var elementData;\n    var styleOb = new SVGStyleData(data, level);\n    var pathElement = styleOb.pElem;\n\n    if (data.ty === 'st') {\n      elementData = new SVGStrokeStyleData(this, data, styleOb);\n    } else if (data.ty === 'fl') {\n      elementData = new SVGFillStyleData(this, data, styleOb);\n    } else if (data.ty === 'gf' || data.ty === 'gs') {\n      var GradientConstructor = data.ty === 'gf' ? SVGGradientFillStyleData : SVGGradientStrokeStyleData;\n      elementData = new GradientConstructor(this, data, styleOb);\n      this.globalData.defs.appendChild(elementData.gf);\n\n      if (elementData.maskId) {\n        this.globalData.defs.appendChild(elementData.ms);\n        this.globalData.defs.appendChild(elementData.of);\n        pathElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + elementData.maskId + ')');\n      }\n    } else if (data.ty === 'no') {\n      elementData = new SVGNoStyleData(this, data, styleOb);\n    }\n\n    if (data.ty === 'st' || data.ty === 'gs') {\n      pathElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n      pathElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n      pathElement.setAttribute('fill-opacity', '0');\n\n      if (data.lj === 1) {\n        pathElement.setAttribute('stroke-miterlimit', data.ml);\n      }\n    }\n\n    if (data.r === 2) {\n      pathElement.setAttribute('fill-rule', 'evenodd');\n    }\n\n    if (data.ln) {\n      pathElement.setAttribute('id', data.ln);\n    }\n\n    if (data.cl) {\n      pathElement.setAttribute('class', data.cl);\n    }\n\n    if (data.bm) {\n      pathElement.style['mix-blend-mode'] = getBlendMode(data.bm);\n    }\n\n    this.stylesList.push(styleOb);\n    this.addToAnimatedContents(data, elementData);\n    return elementData;\n  };\n\n  SVGShapeElement.prototype.createGroupElement = function (data) {\n    var elementData = new ShapeGroupData();\n\n    if (data.ln) {\n      elementData.gr.setAttribute('id', data.ln);\n    }\n\n    if (data.cl) {\n      elementData.gr.setAttribute('class', data.cl);\n    }\n\n    if (data.bm) {\n      elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm);\n    }\n\n    return elementData;\n  };\n\n  SVGShapeElement.prototype.createTransformElement = function (data, container) {\n    var transformProperty = TransformPropertyFactory.getTransformProperty(this, data, this);\n    var elementData = new SVGTransformData(transformProperty, transformProperty.o, container);\n    this.addToAnimatedContents(data, elementData);\n    return elementData;\n  };\n\n  SVGShapeElement.prototype.createShapeElement = function (data, ownTransformers, level) {\n    var ty = 4;\n\n    if (data.ty === 'rc') {\n      ty = 5;\n    } else if (data.ty === 'el') {\n      ty = 6;\n    } else if (data.ty === 'sr') {\n      ty = 7;\n    }\n\n    var shapeProperty = ShapePropertyFactory.getShapeProp(this, data, ty, this);\n    var elementData = new SVGShapeData(ownTransformers, level, shapeProperty);\n    this.shapes.push(elementData);\n    this.addShapeToModifiers(elementData);\n    this.addToAnimatedContents(data, elementData);\n    return elementData;\n  };\n\n  SVGShapeElement.prototype.addToAnimatedContents = function (data, element) {\n    var i = 0;\n    var len = this.animatedContents.length;\n\n    while (i < len) {\n      if (this.animatedContents[i].element === element) {\n        return;\n      }\n\n      i += 1;\n    }\n\n    this.animatedContents.push({\n      fn: SVGElementsRenderer.createRenderFunction(data),\n      element: element,\n      data: data\n    });\n  };\n\n  SVGShapeElement.prototype.setElementStyles = function (elementData) {\n    var arr = elementData.styles;\n    var j;\n    var jLen = this.stylesList.length;\n\n    for (j = 0; j < jLen; j += 1) {\n      if (!this.stylesList[j].closed) {\n        arr.push(this.stylesList[j]);\n      }\n    }\n  };\n\n  SVGShapeElement.prototype.reloadShapes = function () {\n    this._isFirstFrame = true;\n    var i;\n    var len = this.itemsData.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.prevViewData[i] = this.itemsData[i];\n    }\n\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n    this.filterUniqueShapes();\n    len = this.dynamicProperties.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.dynamicProperties[i].getValue();\n    }\n\n    this.renderModifiers();\n  };\n\n  SVGShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, container, level, transformers, render) {\n    var ownTransformers = [].concat(transformers);\n    var i;\n    var len = arr.length - 1;\n    var j;\n    var jLen;\n    var ownStyles = [];\n    var ownModifiers = [];\n    var currentTransform;\n    var modifier;\n    var processedPos;\n\n    for (i = len; i >= 0; i -= 1) {\n      processedPos = this.searchProcessedElement(arr[i]);\n\n      if (!processedPos) {\n        arr[i]._render = render;\n      } else {\n        itemsData[i] = prevViewData[processedPos - 1];\n      }\n\n      if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs' || arr[i].ty === 'no') {\n        if (!processedPos) {\n          itemsData[i] = this.createStyleElement(arr[i], level);\n        } else {\n          itemsData[i].style.closed = false;\n        }\n\n        if (arr[i]._render) {\n          if (itemsData[i].style.pElem.parentNode !== container) {\n            container.appendChild(itemsData[i].style.pElem);\n          }\n        }\n\n        ownStyles.push(itemsData[i].style);\n      } else if (arr[i].ty === 'gr') {\n        if (!processedPos) {\n          itemsData[i] = this.createGroupElement(arr[i]);\n        } else {\n          jLen = itemsData[i].it.length;\n\n          for (j = 0; j < jLen; j += 1) {\n            itemsData[i].prevViewData[j] = itemsData[i].it[j];\n          }\n        }\n\n        this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render);\n\n        if (arr[i]._render) {\n          if (itemsData[i].gr.parentNode !== container) {\n            container.appendChild(itemsData[i].gr);\n          }\n        }\n      } else if (arr[i].ty === 'tr') {\n        if (!processedPos) {\n          itemsData[i] = this.createTransformElement(arr[i], container);\n        }\n\n        currentTransform = itemsData[i].transform;\n        ownTransformers.push(currentTransform);\n      } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n        if (!processedPos) {\n          itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level);\n        }\n\n        this.setElementStyles(itemsData[i]);\n      } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'ms' || arr[i].ty === 'pb' || arr[i].ty === 'zz' || arr[i].ty === 'op') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty);\n          modifier.init(this, arr[i]);\n          itemsData[i] = modifier;\n          this.shapeModifiers.push(modifier);\n        } else {\n          modifier = itemsData[i];\n          modifier.closed = false;\n        }\n\n        ownModifiers.push(modifier);\n      } else if (arr[i].ty === 'rp') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty);\n          itemsData[i] = modifier;\n          modifier.init(this, arr, i, itemsData);\n          this.shapeModifiers.push(modifier);\n          render = false;\n        } else {\n          modifier = itemsData[i];\n          modifier.closed = true;\n        }\n\n        ownModifiers.push(modifier);\n      }\n\n      this.addProcessedElement(arr[i], i + 1);\n    }\n\n    len = ownStyles.length;\n\n    for (i = 0; i < len; i += 1) {\n      ownStyles[i].closed = true;\n    }\n\n    len = ownModifiers.length;\n\n    for (i = 0; i < len; i += 1) {\n      ownModifiers[i].closed = true;\n    }\n  };\n\n  SVGShapeElement.prototype.renderInnerContent = function () {\n    this.renderModifiers();\n    var i;\n    var len = this.stylesList.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.stylesList[i].reset();\n    }\n\n    this.renderShape();\n\n    for (i = 0; i < len; i += 1) {\n      if (this.stylesList[i]._mdf || this._isFirstFrame) {\n        if (this.stylesList[i].msElem) {\n          this.stylesList[i].msElem.setAttribute('d', this.stylesList[i].d); // Adding M0 0 fixes same mask bug on all browsers\n\n          this.stylesList[i].d = 'M0 0' + this.stylesList[i].d;\n        }\n\n        this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d || 'M0 0');\n      }\n    }\n  };\n\n  SVGShapeElement.prototype.renderShape = function () {\n    var i;\n    var len = this.animatedContents.length;\n    var animatedContent;\n\n    for (i = 0; i < len; i += 1) {\n      animatedContent = this.animatedContents[i];\n\n      if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) {\n        animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);\n      }\n    }\n  };\n\n  SVGShapeElement.prototype.destroy = function () {\n    this.destroyBaseElement();\n    this.shapesData = null;\n    this.itemsData = null;\n  };\n\n  function LetterProps(o, sw, sc, fc, m, p) {\n    this.o = o;\n    this.sw = sw;\n    this.sc = sc;\n    this.fc = fc;\n    this.m = m;\n    this.p = p;\n    this._mdf = {\n      o: true,\n      sw: !!sw,\n      sc: !!sc,\n      fc: !!fc,\n      m: true,\n      p: true\n    };\n  }\n\n  LetterProps.prototype.update = function (o, sw, sc, fc, m, p) {\n    this._mdf.o = false;\n    this._mdf.sw = false;\n    this._mdf.sc = false;\n    this._mdf.fc = false;\n    this._mdf.m = false;\n    this._mdf.p = false;\n    var updated = false;\n\n    if (this.o !== o) {\n      this.o = o;\n      this._mdf.o = true;\n      updated = true;\n    }\n\n    if (this.sw !== sw) {\n      this.sw = sw;\n      this._mdf.sw = true;\n      updated = true;\n    }\n\n    if (this.sc !== sc) {\n      this.sc = sc;\n      this._mdf.sc = true;\n      updated = true;\n    }\n\n    if (this.fc !== fc) {\n      this.fc = fc;\n      this._mdf.fc = true;\n      updated = true;\n    }\n\n    if (this.m !== m) {\n      this.m = m;\n      this._mdf.m = true;\n      updated = true;\n    }\n\n    if (p.length && (this.p[0] !== p[0] || this.p[1] !== p[1] || this.p[4] !== p[4] || this.p[5] !== p[5] || this.p[12] !== p[12] || this.p[13] !== p[13])) {\n      this.p = p;\n      this._mdf.p = true;\n      updated = true;\n    }\n\n    return updated;\n  };\n\n  function TextProperty(elem, data) {\n    this._frameId = initialDefaultFrame;\n    this.pv = '';\n    this.v = '';\n    this.kf = false;\n    this._isFirstFrame = true;\n    this._mdf = false;\n\n    if (data.d && data.d.sid) {\n      data.d = elem.globalData.slotManager.getProp(data.d);\n    }\n\n    this.data = data;\n    this.elem = elem;\n    this.comp = this.elem.comp;\n    this.keysIndex = 0;\n    this.canResize = false;\n    this.minimumFontSize = 1;\n    this.effectsSequence = [];\n    this.currentData = {\n      ascent: 0,\n      boxWidth: this.defaultBoxWidth,\n      f: '',\n      fStyle: '',\n      fWeight: '',\n      fc: '',\n      j: '',\n      justifyOffset: '',\n      l: [],\n      lh: 0,\n      lineWidths: [],\n      ls: '',\n      of: '',\n      s: '',\n      sc: '',\n      sw: 0,\n      t: 0,\n      tr: 0,\n      sz: 0,\n      ps: null,\n      fillColorAnim: false,\n      strokeColorAnim: false,\n      strokeWidthAnim: false,\n      yOffset: 0,\n      finalSize: 0,\n      finalText: [],\n      finalLineHeight: 0,\n      __complete: false\n    };\n    this.copyData(this.currentData, this.data.d.k[0].s);\n\n    if (!this.searchProperty()) {\n      this.completeTextData(this.currentData);\n    }\n  }\n\n  TextProperty.prototype.defaultBoxWidth = [0, 0];\n\n  TextProperty.prototype.copyData = function (obj, data) {\n    for (var s in data) {\n      if (Object.prototype.hasOwnProperty.call(data, s)) {\n        obj[s] = data[s];\n      }\n    }\n\n    return obj;\n  };\n\n  TextProperty.prototype.setCurrentData = function (data) {\n    if (!data.__complete) {\n      this.completeTextData(data);\n    }\n\n    this.currentData = data;\n    this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth;\n    this._mdf = true;\n  };\n\n  TextProperty.prototype.searchProperty = function () {\n    return this.searchKeyframes();\n  };\n\n  TextProperty.prototype.searchKeyframes = function () {\n    this.kf = this.data.d.k.length > 1;\n\n    if (this.kf) {\n      this.addEffect(this.getKeyframeValue.bind(this));\n    }\n\n    return this.kf;\n  };\n\n  TextProperty.prototype.addEffect = function (effectFunction) {\n    this.effectsSequence.push(effectFunction);\n    this.elem.addDynamicProperty(this);\n  };\n\n  TextProperty.prototype.getValue = function (_finalValue) {\n    if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) {\n      return;\n    }\n\n    this.currentData.t = this.data.d.k[this.keysIndex].s.t;\n    var currentValue = this.currentData;\n    var currentIndex = this.keysIndex;\n\n    if (this.lock) {\n      this.setCurrentData(this.currentData);\n      return;\n    }\n\n    this.lock = true;\n    this._mdf = false;\n    var i;\n    var len = this.effectsSequence.length;\n    var finalValue = _finalValue || this.data.d.k[this.keysIndex].s;\n\n    for (i = 0; i < len; i += 1) {\n      // Checking if index changed to prevent creating a new object every time the expression updates.\n      if (currentIndex !== this.keysIndex) {\n        finalValue = this.effectsSequence[i](finalValue, finalValue.t);\n      } else {\n        finalValue = this.effectsSequence[i](this.currentData, finalValue.t);\n      }\n    }\n\n    if (currentValue !== finalValue) {\n      this.setCurrentData(finalValue);\n    }\n\n    this.v = this.currentData;\n    this.pv = this.v;\n    this.lock = false;\n    this.frameId = this.elem.globalData.frameId;\n  };\n\n  TextProperty.prototype.getKeyframeValue = function () {\n    var textKeys = this.data.d.k;\n    var frameNum = this.elem.comp.renderedFrame;\n    var i = 0;\n    var len = textKeys.length;\n\n    while (i <= len - 1) {\n      if (i === len - 1 || textKeys[i + 1].t > frameNum) {\n        break;\n      }\n\n      i += 1;\n    }\n\n    if (this.keysIndex !== i) {\n      this.keysIndex = i;\n    }\n\n    return this.data.d.k[this.keysIndex].s;\n  };\n\n  TextProperty.prototype.buildFinalText = function (text) {\n    var charactersArray = [];\n    var i = 0;\n    var len = text.length;\n    var charCode;\n    var secondCharCode;\n    var shouldCombine = false;\n    var shouldCombineNext = false;\n    var currentChars = '';\n\n    while (i < len) {\n      shouldCombine = shouldCombineNext;\n      shouldCombineNext = false;\n      charCode = text.charCodeAt(i);\n      currentChars = text.charAt(i);\n\n      if (FontManager.isCombinedCharacter(charCode)) {\n        shouldCombine = true; // It's a potential surrogate pair (this is the High surrogate)\n      } else if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n        if (FontManager.isRegionalFlag(text, i)) {\n          currentChars = text.substr(i, 14);\n        } else {\n          secondCharCode = text.charCodeAt(i + 1); // It's a surrogate pair (this is the Low surrogate)\n\n          if (secondCharCode >= 0xDC00 && secondCharCode <= 0xDFFF) {\n            if (FontManager.isModifier(charCode, secondCharCode)) {\n              currentChars = text.substr(i, 2);\n              shouldCombine = true;\n            } else if (FontManager.isFlagEmoji(text.substr(i, 4))) {\n              currentChars = text.substr(i, 4);\n            } else {\n              currentChars = text.substr(i, 2);\n            }\n          }\n        }\n      } else if (charCode > 0xDBFF) {\n        secondCharCode = text.charCodeAt(i + 1);\n\n        if (FontManager.isVariationSelector(charCode)) {\n          shouldCombine = true;\n        }\n      } else if (FontManager.isZeroWidthJoiner(charCode)) {\n        shouldCombine = true;\n        shouldCombineNext = true;\n      }\n\n      if (shouldCombine) {\n        charactersArray[charactersArray.length - 1] += currentChars;\n        shouldCombine = false;\n      } else {\n        charactersArray.push(currentChars);\n      }\n\n      i += currentChars.length;\n    }\n\n    return charactersArray;\n  };\n\n  TextProperty.prototype.completeTextData = function (documentData) {\n    documentData.__complete = true;\n    var fontManager = this.elem.globalData.fontManager;\n    var data = this.data;\n    var letters = [];\n    var i;\n    var len;\n    var newLineFlag;\n    var index = 0;\n    var val;\n    var anchorGrouping = data.m.g;\n    var currentSize = 0;\n    var currentPos = 0;\n    var currentLine = 0;\n    var lineWidths = [];\n    var lineWidth = 0;\n    var maxLineWidth = 0;\n    var j;\n    var jLen;\n    var fontData = fontManager.getFontByName(documentData.f);\n    var charData;\n    var cLength = 0;\n    var fontProps = getFontProperties(fontData);\n    documentData.fWeight = fontProps.weight;\n    documentData.fStyle = fontProps.style;\n    documentData.finalSize = documentData.s;\n    documentData.finalText = this.buildFinalText(documentData.t);\n    len = documentData.finalText.length;\n    documentData.finalLineHeight = documentData.lh;\n    var trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n    var charCode;\n\n    if (documentData.sz) {\n      var flag = true;\n      var boxWidth = documentData.sz[0];\n      var boxHeight = documentData.sz[1];\n      var currentHeight;\n      var finalText;\n\n      while (flag) {\n        finalText = this.buildFinalText(documentData.t);\n        currentHeight = 0;\n        lineWidth = 0;\n        len = finalText.length;\n        trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n        var lastSpaceIndex = -1;\n\n        for (i = 0; i < len; i += 1) {\n          charCode = finalText[i].charCodeAt(0);\n          newLineFlag = false;\n\n          if (finalText[i] === ' ') {\n            lastSpaceIndex = i;\n          } else if (charCode === 13 || charCode === 3) {\n            lineWidth = 0;\n            newLineFlag = true;\n            currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n          }\n\n          if (fontManager.chars) {\n            charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily);\n            cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n          } else {\n            // tCanvasHelper.font = documentData.s + 'px '+ fontData.fFamily;\n            cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize);\n          }\n\n          if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') {\n            if (lastSpaceIndex === -1) {\n              len += 1;\n            } else {\n              i = lastSpaceIndex;\n            }\n\n            currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n            finalText.splice(i, lastSpaceIndex === i ? 1 : 0, '\\r'); // finalText = finalText.substr(0,i) + \"\\r\" + finalText.substr(i === lastSpaceIndex ? i + 1 : i);\n\n            lastSpaceIndex = -1;\n            lineWidth = 0;\n          } else {\n            lineWidth += cLength;\n            lineWidth += trackingOffset;\n          }\n        }\n\n        currentHeight += fontData.ascent * documentData.finalSize / 100;\n\n        if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) {\n          documentData.finalSize -= 1;\n          documentData.finalLineHeight = documentData.finalSize * documentData.lh / documentData.s;\n        } else {\n          documentData.finalText = finalText;\n          len = documentData.finalText.length;\n          flag = false;\n        }\n      }\n    }\n\n    lineWidth = -trackingOffset;\n    cLength = 0;\n    var uncollapsedSpaces = 0;\n    var currentChar;\n\n    for (i = 0; i < len; i += 1) {\n      newLineFlag = false;\n      currentChar = documentData.finalText[i];\n      charCode = currentChar.charCodeAt(0);\n\n      if (charCode === 13 || charCode === 3) {\n        uncollapsedSpaces = 0;\n        lineWidths.push(lineWidth);\n        maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n        lineWidth = -2 * trackingOffset;\n        val = '';\n        newLineFlag = true;\n        currentLine += 1;\n      } else {\n        val = currentChar;\n      }\n\n      if (fontManager.chars) {\n        charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily);\n        cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n      } else {\n        // var charWidth = fontManager.measureText(val, documentData.f, documentData.finalSize);\n        // tCanvasHelper.font = documentData.finalSize + 'px '+ fontManager.getFontByName(documentData.f).fFamily;\n        cLength = fontManager.measureText(val, documentData.f, documentData.finalSize);\n      } //\n\n\n      if (currentChar === ' ') {\n        uncollapsedSpaces += cLength + trackingOffset;\n      } else {\n        lineWidth += cLength + trackingOffset + uncollapsedSpaces;\n        uncollapsedSpaces = 0;\n      }\n\n      letters.push({\n        l: cLength,\n        an: cLength,\n        add: currentSize,\n        n: newLineFlag,\n        anIndexes: [],\n        val: val,\n        line: currentLine,\n        animatorJustifyOffset: 0\n      });\n\n      if (anchorGrouping == 2) {\n        // eslint-disable-line eqeqeq\n        currentSize += cLength;\n\n        if (val === '' || val === ' ' || i === len - 1) {\n          if (val === '' || val === ' ') {\n            currentSize -= cLength;\n          }\n\n          while (currentPos <= i) {\n            letters[currentPos].an = currentSize;\n            letters[currentPos].ind = index;\n            letters[currentPos].extra = cLength;\n            currentPos += 1;\n          }\n\n          index += 1;\n          currentSize = 0;\n        }\n      } else if (anchorGrouping == 3) {\n        // eslint-disable-line eqeqeq\n        currentSize += cLength;\n\n        if (val === '' || i === len - 1) {\n          if (val === '') {\n            currentSize -= cLength;\n          }\n\n          while (currentPos <= i) {\n            letters[currentPos].an = currentSize;\n            letters[currentPos].ind = index;\n            letters[currentPos].extra = cLength;\n            currentPos += 1;\n          }\n\n          currentSize = 0;\n          index += 1;\n        }\n      } else {\n        letters[index].ind = index;\n        letters[index].extra = 0;\n        index += 1;\n      }\n    }\n\n    documentData.l = letters;\n    maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n    lineWidths.push(lineWidth);\n\n    if (documentData.sz) {\n      documentData.boxWidth = documentData.sz[0];\n      documentData.justifyOffset = 0;\n    } else {\n      documentData.boxWidth = maxLineWidth;\n\n      switch (documentData.j) {\n        case 1:\n          documentData.justifyOffset = -documentData.boxWidth;\n          break;\n\n        case 2:\n          documentData.justifyOffset = -documentData.boxWidth / 2;\n          break;\n\n        default:\n          documentData.justifyOffset = 0;\n      }\n    }\n\n    documentData.lineWidths = lineWidths;\n    var animators = data.a;\n    var animatorData;\n    var letterData;\n    jLen = animators.length;\n    var based;\n    var ind;\n    var indexes = [];\n\n    for (j = 0; j < jLen; j += 1) {\n      animatorData = animators[j];\n\n      if (animatorData.a.sc) {\n        documentData.strokeColorAnim = true;\n      }\n\n      if (animatorData.a.sw) {\n        documentData.strokeWidthAnim = true;\n      }\n\n      if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {\n        documentData.fillColorAnim = true;\n      }\n\n      ind = 0;\n      based = animatorData.s.b;\n\n      for (i = 0; i < len; i += 1) {\n        letterData = letters[i];\n        letterData.anIndexes[j] = ind;\n\n        if (based == 1 && letterData.val !== '' || based == 2 && letterData.val !== '' && letterData.val !== ' ' || based == 3 && (letterData.n || letterData.val == ' ' || i == len - 1) || based == 4 && (letterData.n || i == len - 1)) {\n          // eslint-disable-line eqeqeq\n          if (animatorData.s.rn === 1) {\n            indexes.push(ind);\n          }\n\n          ind += 1;\n        }\n      }\n\n      data.a[j].s.totalChars = ind;\n      var currentInd = -1;\n      var newInd;\n\n      if (animatorData.s.rn === 1) {\n        for (i = 0; i < len; i += 1) {\n          letterData = letters[i];\n\n          if (currentInd != letterData.anIndexes[j]) {\n            // eslint-disable-line eqeqeq\n            currentInd = letterData.anIndexes[j];\n            newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0];\n          }\n\n          letterData.anIndexes[j] = newInd;\n        }\n      }\n    }\n\n    documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2;\n    documentData.ls = documentData.ls || 0;\n    documentData.ascent = fontData.ascent * documentData.finalSize / 100;\n  };\n\n  TextProperty.prototype.updateDocumentData = function (newData, index) {\n    index = index === undefined ? this.keysIndex : index;\n    var dData = this.copyData({}, this.data.d.k[index].s);\n    dData = this.copyData(dData, newData);\n    this.data.d.k[index].s = dData;\n    this.recalculate(index);\n    this.setCurrentData(dData);\n    this.elem.addDynamicProperty(this);\n  };\n\n  TextProperty.prototype.recalculate = function (index) {\n    var dData = this.data.d.k[index].s;\n    dData.__complete = false;\n    this.keysIndex = 0;\n    this._isFirstFrame = true;\n    this.getValue(dData);\n  };\n\n  TextProperty.prototype.canResizeFont = function (_canResize) {\n    this.canResize = _canResize;\n    this.recalculate(this.keysIndex);\n    this.elem.addDynamicProperty(this);\n  };\n\n  TextProperty.prototype.setMinimumFontSize = function (_fontValue) {\n    this.minimumFontSize = Math.floor(_fontValue) || 1;\n    this.recalculate(this.keysIndex);\n    this.elem.addDynamicProperty(this);\n  };\n\n  var TextSelectorProp = function () {\n    var max = Math.max;\n    var min = Math.min;\n    var floor = Math.floor;\n\n    function TextSelectorPropFactory(elem, data) {\n      this._currentTextLength = -1;\n      this.k = false;\n      this.data = data;\n      this.elem = elem;\n      this.comp = elem.comp;\n      this.finalS = 0;\n      this.finalE = 0;\n      this.initDynamicPropertyContainer(elem);\n      this.s = PropertyFactory.getProp(elem, data.s || {\n        k: 0\n      }, 0, 0, this);\n\n      if ('e' in data) {\n        this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this);\n      } else {\n        this.e = {\n          v: 100\n        };\n      }\n\n      this.o = PropertyFactory.getProp(elem, data.o || {\n        k: 0\n      }, 0, 0, this);\n      this.xe = PropertyFactory.getProp(elem, data.xe || {\n        k: 0\n      }, 0, 0, this);\n      this.ne = PropertyFactory.getProp(elem, data.ne || {\n        k: 0\n      }, 0, 0, this);\n      this.sm = PropertyFactory.getProp(elem, data.sm || {\n        k: 100\n      }, 0, 0, this);\n      this.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this);\n\n      if (!this.dynamicProperties.length) {\n        this.getValue();\n      }\n    }\n\n    TextSelectorPropFactory.prototype = {\n      getMult: function getMult(ind) {\n        if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {\n          this.getValue();\n        }\n\n        var x1 = 0;\n        var y1 = 0;\n        var x2 = 1;\n        var y2 = 1;\n\n        if (this.ne.v > 0) {\n          x1 = this.ne.v / 100.0;\n        } else {\n          y1 = -this.ne.v / 100.0;\n        }\n\n        if (this.xe.v > 0) {\n          x2 = 1.0 - this.xe.v / 100.0;\n        } else {\n          y2 = 1.0 + this.xe.v / 100.0;\n        }\n\n        var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get;\n        var mult = 0;\n        var s = this.finalS;\n        var e = this.finalE;\n        var type = this.data.sh;\n\n        if (type === 2) {\n          if (e === s) {\n            mult = ind >= e ? 1 : 0;\n          } else {\n            mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n          }\n\n          mult = easer(mult);\n        } else if (type === 3) {\n          if (e === s) {\n            mult = ind >= e ? 0 : 1;\n          } else {\n            mult = 1 - max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n          }\n\n          mult = easer(mult);\n        } else if (type === 4) {\n          if (e === s) {\n            mult = 0;\n          } else {\n            mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n\n            if (mult < 0.5) {\n              mult *= 2;\n            } else {\n              mult = 1 - 2 * (mult - 0.5);\n            }\n          }\n\n          mult = easer(mult);\n        } else if (type === 5) {\n          if (e === s) {\n            mult = 0;\n          } else {\n            var tot = e - s;\n            /* ind += 0.5;\r\n                      mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind; */\n\n            ind = min(max(0, ind + 0.5 - s), e - s);\n            var x = -tot / 2 + ind;\n            var a = tot / 2;\n            mult = Math.sqrt(1 - x * x / (a * a));\n          }\n\n          mult = easer(mult);\n        } else if (type === 6) {\n          if (e === s) {\n            mult = 0;\n          } else {\n            ind = min(max(0, ind + 0.5 - s), e - s);\n            mult = (1 + Math.cos(Math.PI + Math.PI * 2 * ind / (e - s))) / 2; // eslint-disable-line\n          }\n\n          mult = easer(mult);\n        } else {\n          if (ind >= floor(s)) {\n            if (ind - s < 0) {\n              mult = max(0, min(min(e, 1) - (s - ind), 1));\n            } else {\n              mult = max(0, min(e - ind, 1));\n            }\n          }\n\n          mult = easer(mult);\n        } // Smoothness implementation.\n        // The smoothness represents a reduced range of the original [0; 1] range.\n        // if smoothness is 25%, the new range will be [0.375; 0.625]\n        // Steps are:\n        // - find the lower value of the new range (threshold)\n        // - if multiplier is smaller than that value, floor it to 0\n        // - if it is larger,\n        //     - subtract the threshold\n        //     - divide it by the smoothness (this will return the range to [0; 1])\n        // Note: If it doesn't work on some scenarios, consider applying it before the easer.\n\n\n        if (this.sm.v !== 100) {\n          var smoothness = this.sm.v * 0.01;\n\n          if (smoothness === 0) {\n            smoothness = 0.00000001;\n          }\n\n          var threshold = 0.5 - smoothness * 0.5;\n\n          if (mult < threshold) {\n            mult = 0;\n          } else {\n            mult = (mult - threshold) / smoothness;\n\n            if (mult > 1) {\n              mult = 1;\n            }\n          }\n        }\n\n        return mult * this.a.v;\n      },\n      getValue: function getValue(newCharsFlag) {\n        this.iterateDynamicProperties();\n        this._mdf = newCharsFlag || this._mdf;\n        this._currentTextLength = this.elem.textProperty.currentData.l.length || 0;\n\n        if (newCharsFlag && this.data.r === 2) {\n          this.e.v = this._currentTextLength;\n        }\n\n        var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars;\n        var o = this.o.v / divisor;\n        var s = this.s.v / divisor + o;\n        var e = this.e.v / divisor + o;\n\n        if (s > e) {\n          var _s = s;\n          s = e;\n          e = _s;\n        }\n\n        this.finalS = s;\n        this.finalE = e;\n      }\n    };\n    extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory);\n\n    function getTextSelectorProp(elem, data, arr) {\n      return new TextSelectorPropFactory(elem, data, arr);\n    }\n\n    return {\n      getTextSelectorProp: getTextSelectorProp\n    };\n  }();\n\n  function TextAnimatorDataProperty(elem, animatorProps, container) {\n    var defaultData = {\n      propType: false\n    };\n    var getProp = PropertyFactory.getProp;\n    var textAnimatorAnimatables = animatorProps.a;\n    this.a = {\n      r: textAnimatorAnimatables.r ? getProp(elem, textAnimatorAnimatables.r, 0, degToRads, container) : defaultData,\n      rx: textAnimatorAnimatables.rx ? getProp(elem, textAnimatorAnimatables.rx, 0, degToRads, container) : defaultData,\n      ry: textAnimatorAnimatables.ry ? getProp(elem, textAnimatorAnimatables.ry, 0, degToRads, container) : defaultData,\n      sk: textAnimatorAnimatables.sk ? getProp(elem, textAnimatorAnimatables.sk, 0, degToRads, container) : defaultData,\n      sa: textAnimatorAnimatables.sa ? getProp(elem, textAnimatorAnimatables.sa, 0, degToRads, container) : defaultData,\n      s: textAnimatorAnimatables.s ? getProp(elem, textAnimatorAnimatables.s, 1, 0.01, container) : defaultData,\n      a: textAnimatorAnimatables.a ? getProp(elem, textAnimatorAnimatables.a, 1, 0, container) : defaultData,\n      o: textAnimatorAnimatables.o ? getProp(elem, textAnimatorAnimatables.o, 0, 0.01, container) : defaultData,\n      p: textAnimatorAnimatables.p ? getProp(elem, textAnimatorAnimatables.p, 1, 0, container) : defaultData,\n      sw: textAnimatorAnimatables.sw ? getProp(elem, textAnimatorAnimatables.sw, 0, 0, container) : defaultData,\n      sc: textAnimatorAnimatables.sc ? getProp(elem, textAnimatorAnimatables.sc, 1, 0, container) : defaultData,\n      fc: textAnimatorAnimatables.fc ? getProp(elem, textAnimatorAnimatables.fc, 1, 0, container) : defaultData,\n      fh: textAnimatorAnimatables.fh ? getProp(elem, textAnimatorAnimatables.fh, 0, 0, container) : defaultData,\n      fs: textAnimatorAnimatables.fs ? getProp(elem, textAnimatorAnimatables.fs, 0, 0.01, container) : defaultData,\n      fb: textAnimatorAnimatables.fb ? getProp(elem, textAnimatorAnimatables.fb, 0, 0.01, container) : defaultData,\n      t: textAnimatorAnimatables.t ? getProp(elem, textAnimatorAnimatables.t, 0, 0, container) : defaultData\n    };\n    this.s = TextSelectorProp.getTextSelectorProp(elem, animatorProps.s, container);\n    this.s.t = animatorProps.s.t;\n  }\n\n  function TextAnimatorProperty(textData, renderType, elem) {\n    this._isFirstFrame = true;\n    this._hasMaskedPath = false;\n    this._frameId = -1;\n    this._textData = textData;\n    this._renderType = renderType;\n    this._elem = elem;\n    this._animatorsData = createSizedArray(this._textData.a.length);\n    this._pathData = {};\n    this._moreOptions = {\n      alignment: {}\n    };\n    this.renderedLetters = [];\n    this.lettersChangedFlag = false;\n    this.initDynamicPropertyContainer(elem);\n  }\n\n  TextAnimatorProperty.prototype.searchProperties = function () {\n    var i;\n    var len = this._textData.a.length;\n    var animatorProps;\n    var getProp = PropertyFactory.getProp;\n\n    for (i = 0; i < len; i += 1) {\n      animatorProps = this._textData.a[i];\n      this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this);\n    }\n\n    if (this._textData.p && 'm' in this._textData.p) {\n      this._pathData = {\n        a: getProp(this._elem, this._textData.p.a, 0, 0, this),\n        f: getProp(this._elem, this._textData.p.f, 0, 0, this),\n        l: getProp(this._elem, this._textData.p.l, 0, 0, this),\n        r: getProp(this._elem, this._textData.p.r, 0, 0, this),\n        p: getProp(this._elem, this._textData.p.p, 0, 0, this),\n        m: this._elem.maskManager.getMaskProperty(this._textData.p.m)\n      };\n      this._hasMaskedPath = true;\n    } else {\n      this._hasMaskedPath = false;\n    }\n\n    this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this);\n  };\n\n  TextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) {\n    this.lettersChangedFlag = lettersChangedFlag;\n\n    if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) {\n      return;\n    }\n\n    this._isFirstFrame = false;\n    var alignment = this._moreOptions.alignment.v;\n    var animators = this._animatorsData;\n    var textData = this._textData;\n    var matrixHelper = this.mHelper;\n    var renderType = this._renderType;\n    var renderedLettersCount = this.renderedLetters.length;\n    var xPos;\n    var yPos;\n    var i;\n    var len;\n    var letters = documentData.l;\n    var pathInfo;\n    var currentLength;\n    var currentPoint;\n    var segmentLength;\n    var flag;\n    var pointInd;\n    var segmentInd;\n    var prevPoint;\n    var points;\n    var segments;\n    var partialLength;\n    var totalLength;\n    var perc;\n    var tanAngle;\n    var mask;\n\n    if (this._hasMaskedPath) {\n      mask = this._pathData.m;\n\n      if (!this._pathData.n || this._pathData._mdf) {\n        var paths = mask.v;\n\n        if (this._pathData.r.v) {\n          paths = paths.reverse();\n        } // TODO: release bezier data cached from previous pathInfo: this._pathData.pi\n\n\n        pathInfo = {\n          tLength: 0,\n          segments: []\n        };\n        len = paths._length - 1;\n        var bezierData;\n        totalLength = 0;\n\n        for (i = 0; i < len; i += 1) {\n          bezierData = bez.buildBezierData(paths.v[i], paths.v[i + 1], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]);\n          pathInfo.tLength += bezierData.segmentLength;\n          pathInfo.segments.push(bezierData);\n          totalLength += bezierData.segmentLength;\n        }\n\n        i = len;\n\n        if (mask.v.c) {\n          bezierData = bez.buildBezierData(paths.v[i], paths.v[0], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]);\n          pathInfo.tLength += bezierData.segmentLength;\n          pathInfo.segments.push(bezierData);\n          totalLength += bezierData.segmentLength;\n        }\n\n        this._pathData.pi = pathInfo;\n      }\n\n      pathInfo = this._pathData.pi;\n      currentLength = this._pathData.f.v;\n      segmentInd = 0;\n      pointInd = 1;\n      segmentLength = 0;\n      flag = true;\n      segments = pathInfo.segments;\n\n      if (currentLength < 0 && mask.v.c) {\n        if (pathInfo.tLength < Math.abs(currentLength)) {\n          currentLength = -Math.abs(currentLength) % pathInfo.tLength;\n        }\n\n        segmentInd = segments.length - 1;\n        points = segments[segmentInd].points;\n        pointInd = points.length - 1;\n\n        while (currentLength < 0) {\n          currentLength += points[pointInd].partialLength;\n          pointInd -= 1;\n\n          if (pointInd < 0) {\n            segmentInd -= 1;\n            points = segments[segmentInd].points;\n            pointInd = points.length - 1;\n          }\n        }\n      }\n\n      points = segments[segmentInd].points;\n      prevPoint = points[pointInd - 1];\n      currentPoint = points[pointInd];\n      partialLength = currentPoint.partialLength;\n    }\n\n    len = letters.length;\n    xPos = 0;\n    yPos = 0;\n    var yOff = documentData.finalSize * 1.2 * 0.714;\n    var firstLine = true;\n    var animatorProps;\n    var animatorSelector;\n    var j;\n    var jLen;\n    var letterValue;\n    jLen = animators.length;\n    var mult;\n    var ind = -1;\n    var offf;\n    var xPathPos;\n    var yPathPos;\n    var initPathPos = currentLength;\n    var initSegmentInd = segmentInd;\n    var initPointInd = pointInd;\n    var currentLine = -1;\n    var elemOpacity;\n    var sc;\n    var sw;\n    var fc;\n    var k;\n    var letterSw;\n    var letterSc;\n    var letterFc;\n    var letterM = '';\n    var letterP = this.defaultPropsArray;\n    var letterO; //\n\n    if (documentData.j === 2 || documentData.j === 1) {\n      var animatorJustifyOffset = 0;\n      var animatorFirstCharOffset = 0;\n      var justifyOffsetMult = documentData.j === 2 ? -0.5 : -1;\n      var lastIndex = 0;\n      var isNewLine = true;\n\n      for (i = 0; i < len; i += 1) {\n        if (letters[i].n) {\n          if (animatorJustifyOffset) {\n            animatorJustifyOffset += animatorFirstCharOffset;\n          }\n\n          while (lastIndex < i) {\n            letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n            lastIndex += 1;\n          }\n\n          animatorJustifyOffset = 0;\n          isNewLine = true;\n        } else {\n          for (j = 0; j < jLen; j += 1) {\n            animatorProps = animators[j].a;\n\n            if (animatorProps.t.propType) {\n              if (isNewLine && documentData.j === 2) {\n                animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult;\n              }\n\n              animatorSelector = animators[j].s;\n              mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n              if (mult.length) {\n                animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult;\n              } else {\n                animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult;\n              }\n            }\n          }\n\n          isNewLine = false;\n        }\n      }\n\n      if (animatorJustifyOffset) {\n        animatorJustifyOffset += animatorFirstCharOffset;\n      }\n\n      while (lastIndex < i) {\n        letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n        lastIndex += 1;\n      }\n    } //\n\n\n    for (i = 0; i < len; i += 1) {\n      matrixHelper.reset();\n      elemOpacity = 1;\n\n      if (letters[i].n) {\n        xPos = 0;\n        yPos += documentData.yOffset;\n        yPos += firstLine ? 1 : 0;\n        currentLength = initPathPos;\n        firstLine = false;\n\n        if (this._hasMaskedPath) {\n          segmentInd = initSegmentInd;\n          pointInd = initPointInd;\n          points = segments[segmentInd].points;\n          prevPoint = points[pointInd - 1];\n          currentPoint = points[pointInd];\n          partialLength = currentPoint.partialLength;\n          segmentLength = 0;\n        }\n\n        letterM = '';\n        letterFc = '';\n        letterSw = '';\n        letterO = '';\n        letterP = this.defaultPropsArray;\n      } else {\n        if (this._hasMaskedPath) {\n          if (currentLine !== letters[i].line) {\n            switch (documentData.j) {\n              case 1:\n                currentLength += totalLength - documentData.lineWidths[letters[i].line];\n                break;\n\n              case 2:\n                currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2;\n                break;\n\n              default:\n                break;\n            }\n\n            currentLine = letters[i].line;\n          }\n\n          if (ind !== letters[i].ind) {\n            if (letters[ind]) {\n              currentLength += letters[ind].extra;\n            }\n\n            currentLength += letters[i].an / 2;\n            ind = letters[i].ind;\n          }\n\n          currentLength += alignment[0] * letters[i].an * 0.005;\n          var animatorOffset = 0;\n\n          for (j = 0; j < jLen; j += 1) {\n            animatorProps = animators[j].a;\n\n            if (animatorProps.p.propType) {\n              animatorSelector = animators[j].s;\n              mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n              if (mult.length) {\n                animatorOffset += animatorProps.p.v[0] * mult[0];\n              } else {\n                animatorOffset += animatorProps.p.v[0] * mult;\n              }\n            }\n\n            if (animatorProps.a.propType) {\n              animatorSelector = animators[j].s;\n              mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n              if (mult.length) {\n                animatorOffset += animatorProps.a.v[0] * mult[0];\n              } else {\n                animatorOffset += animatorProps.a.v[0] * mult;\n              }\n            }\n          }\n\n          flag = true; // Force alignment only works with a single line for now\n\n          if (this._pathData.a.v) {\n            currentLength = letters[0].an * 0.5 + (totalLength - this._pathData.f.v - letters[0].an * 0.5 - letters[letters.length - 1].an * 0.5) * ind / (len - 1);\n            currentLength += this._pathData.f.v;\n          }\n\n          while (flag) {\n            if (segmentLength + partialLength >= currentLength + animatorOffset || !points) {\n              perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength;\n              xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc;\n              yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc;\n              matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -(alignment[1] * yOff) * 0.01);\n              flag = false;\n            } else if (points) {\n              segmentLength += currentPoint.partialLength;\n              pointInd += 1;\n\n              if (pointInd >= points.length) {\n                pointInd = 0;\n                segmentInd += 1;\n\n                if (!segments[segmentInd]) {\n                  if (mask.v.c) {\n                    pointInd = 0;\n                    segmentInd = 0;\n                    points = segments[segmentInd].points;\n                  } else {\n                    segmentLength -= currentPoint.partialLength;\n                    points = null;\n                  }\n                } else {\n                  points = segments[segmentInd].points;\n                }\n              }\n\n              if (points) {\n                prevPoint = currentPoint;\n                currentPoint = points[pointInd];\n                partialLength = currentPoint.partialLength;\n              }\n            }\n          }\n\n          offf = letters[i].an / 2 - letters[i].add;\n          matrixHelper.translate(-offf, 0, 0);\n        } else {\n          offf = letters[i].an / 2 - letters[i].add;\n          matrixHelper.translate(-offf, 0, 0); // Grouping alignment\n\n          matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -alignment[1] * yOff * 0.01, 0);\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n\n          if (animatorProps.t.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); // This condition is to prevent applying tracking to first character in each line. Might be better to use a boolean \"isNewLine\"\n\n            if (xPos !== 0 || documentData.j !== 0) {\n              if (this._hasMaskedPath) {\n                if (mult.length) {\n                  currentLength += animatorProps.t.v * mult[0];\n                } else {\n                  currentLength += animatorProps.t.v * mult;\n                }\n              } else if (mult.length) {\n                xPos += animatorProps.t.v * mult[0];\n              } else {\n                xPos += animatorProps.t.v * mult;\n              }\n            }\n          }\n        }\n\n        if (documentData.strokeWidthAnim) {\n          sw = documentData.sw || 0;\n        }\n\n        if (documentData.strokeColorAnim) {\n          if (documentData.sc) {\n            sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]];\n          } else {\n            sc = [0, 0, 0];\n          }\n        }\n\n        if (documentData.fillColorAnim && documentData.fc) {\n          fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n\n          if (animatorProps.a.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n            if (mult.length) {\n              matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]);\n            } else {\n              matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult);\n            }\n          }\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n\n          if (animatorProps.s.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n            if (mult.length) {\n              matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult[0], 1 + (animatorProps.s.v[1] - 1) * mult[1], 1);\n            } else {\n              matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult, 1 + (animatorProps.s.v[1] - 1) * mult, 1);\n            }\n          }\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n          animatorSelector = animators[j].s;\n          mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n          if (animatorProps.sk.propType) {\n            if (mult.length) {\n              matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]);\n            } else {\n              matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult);\n            }\n          }\n\n          if (animatorProps.r.propType) {\n            if (mult.length) {\n              matrixHelper.rotateZ(-animatorProps.r.v * mult[2]);\n            } else {\n              matrixHelper.rotateZ(-animatorProps.r.v * mult);\n            }\n          }\n\n          if (animatorProps.ry.propType) {\n            if (mult.length) {\n              matrixHelper.rotateY(animatorProps.ry.v * mult[1]);\n            } else {\n              matrixHelper.rotateY(animatorProps.ry.v * mult);\n            }\n          }\n\n          if (animatorProps.rx.propType) {\n            if (mult.length) {\n              matrixHelper.rotateX(animatorProps.rx.v * mult[0]);\n            } else {\n              matrixHelper.rotateX(animatorProps.rx.v * mult);\n            }\n          }\n\n          if (animatorProps.o.propType) {\n            if (mult.length) {\n              elemOpacity += (animatorProps.o.v * mult[0] - elemOpacity) * mult[0];\n            } else {\n              elemOpacity += (animatorProps.o.v * mult - elemOpacity) * mult;\n            }\n          }\n\n          if (documentData.strokeWidthAnim && animatorProps.sw.propType) {\n            if (mult.length) {\n              sw += animatorProps.sw.v * mult[0];\n            } else {\n              sw += animatorProps.sw.v * mult;\n            }\n          }\n\n          if (documentData.strokeColorAnim && animatorProps.sc.propType) {\n            for (k = 0; k < 3; k += 1) {\n              if (mult.length) {\n                sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult[0];\n              } else {\n                sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult;\n              }\n            }\n          }\n\n          if (documentData.fillColorAnim && documentData.fc) {\n            if (animatorProps.fc.propType) {\n              for (k = 0; k < 3; k += 1) {\n                if (mult.length) {\n                  fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult[0];\n                } else {\n                  fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult;\n                }\n              }\n            }\n\n            if (animatorProps.fh.propType) {\n              if (mult.length) {\n                fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]);\n              } else {\n                fc = addHueToRGB(fc, animatorProps.fh.v * mult);\n              }\n            }\n\n            if (animatorProps.fs.propType) {\n              if (mult.length) {\n                fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]);\n              } else {\n                fc = addSaturationToRGB(fc, animatorProps.fs.v * mult);\n              }\n            }\n\n            if (animatorProps.fb.propType) {\n              if (mult.length) {\n                fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]);\n              } else {\n                fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult);\n              }\n            }\n          }\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n\n          if (animatorProps.p.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n            if (this._hasMaskedPath) {\n              if (mult.length) {\n                matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]);\n              } else {\n                matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n              }\n            } else if (mult.length) {\n              matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]);\n            } else {\n              matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n            }\n          }\n        }\n\n        if (documentData.strokeWidthAnim) {\n          letterSw = sw < 0 ? 0 : sw;\n        }\n\n        if (documentData.strokeColorAnim) {\n          letterSc = 'rgb(' + Math.round(sc[0] * 255) + ',' + Math.round(sc[1] * 255) + ',' + Math.round(sc[2] * 255) + ')';\n        }\n\n        if (documentData.fillColorAnim && documentData.fc) {\n          letterFc = 'rgb(' + Math.round(fc[0] * 255) + ',' + Math.round(fc[1] * 255) + ',' + Math.round(fc[2] * 255) + ')';\n        }\n\n        if (this._hasMaskedPath) {\n          matrixHelper.translate(0, -documentData.ls);\n          matrixHelper.translate(0, alignment[1] * yOff * 0.01 + yPos, 0);\n\n          if (this._pathData.p.v) {\n            tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]);\n            var rot = Math.atan(tanAngle) * 180 / Math.PI;\n\n            if (currentPoint.point[0] < prevPoint.point[0]) {\n              rot += 180;\n            }\n\n            matrixHelper.rotate(-rot * Math.PI / 180);\n          }\n\n          matrixHelper.translate(xPathPos, yPathPos, 0);\n          currentLength -= alignment[0] * letters[i].an * 0.005;\n\n          if (letters[i + 1] && ind !== letters[i + 1].ind) {\n            currentLength += letters[i].an / 2;\n            currentLength += documentData.tr * 0.001 * documentData.finalSize;\n          }\n        } else {\n          matrixHelper.translate(xPos, yPos, 0);\n\n          if (documentData.ps) {\n            // matrixHelper.translate(documentData.ps[0],documentData.ps[1],0);\n            matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n          }\n\n          switch (documentData.j) {\n            case 1:\n              matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0);\n              break;\n\n            case 2:\n              matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0);\n              break;\n\n            default:\n              break;\n          }\n\n          matrixHelper.translate(0, -documentData.ls);\n          matrixHelper.translate(offf, 0, 0);\n          matrixHelper.translate(alignment[0] * letters[i].an * 0.005, alignment[1] * yOff * 0.01, 0);\n          xPos += letters[i].l + documentData.tr * 0.001 * documentData.finalSize;\n        }\n\n        if (renderType === 'html') {\n          letterM = matrixHelper.toCSS();\n        } else if (renderType === 'svg') {\n          letterM = matrixHelper.to2dCSS();\n        } else {\n          letterP = [matrixHelper.props[0], matrixHelper.props[1], matrixHelper.props[2], matrixHelper.props[3], matrixHelper.props[4], matrixHelper.props[5], matrixHelper.props[6], matrixHelper.props[7], matrixHelper.props[8], matrixHelper.props[9], matrixHelper.props[10], matrixHelper.props[11], matrixHelper.props[12], matrixHelper.props[13], matrixHelper.props[14], matrixHelper.props[15]];\n        }\n\n        letterO = elemOpacity;\n      }\n\n      if (renderedLettersCount <= i) {\n        letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP);\n        this.renderedLetters.push(letterValue);\n        renderedLettersCount += 1;\n        this.lettersChangedFlag = true;\n      } else {\n        letterValue = this.renderedLetters[i];\n        this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag;\n      }\n    }\n  };\n\n  TextAnimatorProperty.prototype.getValue = function () {\n    if (this._elem.globalData.frameId === this._frameId) {\n      return;\n    }\n\n    this._frameId = this._elem.globalData.frameId;\n    this.iterateDynamicProperties();\n  };\n\n  TextAnimatorProperty.prototype.mHelper = new Matrix();\n  TextAnimatorProperty.prototype.defaultPropsArray = [];\n  extendPrototype([DynamicPropertyContainer], TextAnimatorProperty);\n\n  function ITextElement() {}\n\n  ITextElement.prototype.initElement = function (data, globalData, comp) {\n    this.lettersChangedFlag = true;\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.textProperty = new TextProperty(this, data.t, this.dynamicProperties);\n    this.textAnimator = new TextAnimatorProperty(data.t, this.renderType, this);\n    this.initTransform(data, globalData, comp);\n    this.initHierarchy();\n    this.initRenderable();\n    this.initRendererElement();\n    this.createContainerElements();\n    this.createRenderableComponents();\n    this.createContent();\n    this.hide();\n    this.textAnimator.searchProperties(this.dynamicProperties);\n  };\n\n  ITextElement.prototype.prepareFrame = function (num) {\n    this._mdf = false;\n    this.prepareRenderableFrame(num);\n    this.prepareProperties(num, this.isInRange);\n  };\n\n  ITextElement.prototype.createPathShape = function (matrixHelper, shapes) {\n    var j;\n    var jLen = shapes.length;\n    var pathNodes;\n    var shapeStr = '';\n\n    for (j = 0; j < jLen; j += 1) {\n      if (shapes[j].ty === 'sh') {\n        pathNodes = shapes[j].ks.k;\n        shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);\n      }\n    }\n\n    return shapeStr;\n  };\n\n  ITextElement.prototype.updateDocumentData = function (newData, index) {\n    this.textProperty.updateDocumentData(newData, index);\n  };\n\n  ITextElement.prototype.canResizeFont = function (_canResize) {\n    this.textProperty.canResizeFont(_canResize);\n  };\n\n  ITextElement.prototype.setMinimumFontSize = function (_fontSize) {\n    this.textProperty.setMinimumFontSize(_fontSize);\n  };\n\n  ITextElement.prototype.applyTextPropertiesToMatrix = function (documentData, matrixHelper, lineNumber, xPos, yPos) {\n    if (documentData.ps) {\n      matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n    }\n\n    matrixHelper.translate(0, -documentData.ls, 0);\n\n    switch (documentData.j) {\n      case 1:\n        matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0);\n        break;\n\n      case 2:\n        matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0);\n        break;\n\n      default:\n        break;\n    }\n\n    matrixHelper.translate(xPos, yPos, 0);\n  };\n\n  ITextElement.prototype.buildColor = function (colorData) {\n    return 'rgb(' + Math.round(colorData[0] * 255) + ',' + Math.round(colorData[1] * 255) + ',' + Math.round(colorData[2] * 255) + ')';\n  };\n\n  ITextElement.prototype.emptyProp = new LetterProps();\n\n  ITextElement.prototype.destroy = function () {};\n\n  ITextElement.prototype.validateText = function () {\n    if (this.textProperty._mdf || this.textProperty._isFirstFrame) {\n      this.buildNewText();\n      this.textProperty._isFirstFrame = false;\n      this.textProperty._mdf = false;\n    }\n  };\n\n  var emptyShapeData = {\n    shapes: []\n  };\n\n  function SVGTextLottieElement(data, globalData, comp) {\n    this.textSpans = [];\n    this.renderType = 'svg';\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextLottieElement);\n\n  SVGTextLottieElement.prototype.createContent = function () {\n    if (this.data.singleShape && !this.globalData.fontManager.chars) {\n      this.textContainer = createNS('text');\n    }\n  };\n\n  SVGTextLottieElement.prototype.buildTextContents = function (textArray) {\n    var i = 0;\n    var len = textArray.length;\n    var textContents = [];\n    var currentTextContent = '';\n\n    while (i < len) {\n      if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) {\n        textContents.push(currentTextContent);\n        currentTextContent = '';\n      } else {\n        currentTextContent += textArray[i];\n      }\n\n      i += 1;\n    }\n\n    textContents.push(currentTextContent);\n    return textContents;\n  };\n\n  SVGTextLottieElement.prototype.buildShapeData = function (data, scale) {\n    // data should probably be cloned to apply scale separately to each instance of a text on different layers\n    // but since text internal content gets only rendered once and then it's never rerendered,\n    // it's probably safe not to clone data and reuse always the same instance even if the object is mutated.\n    // Avoiding cloning is preferred since cloning each character shape data is expensive\n    if (data.shapes && data.shapes.length) {\n      var shape = data.shapes[0];\n\n      if (shape.it) {\n        var shapeItem = shape.it[shape.it.length - 1];\n\n        if (shapeItem.s) {\n          shapeItem.s.k[0] = scale;\n          shapeItem.s.k[1] = scale;\n        }\n      }\n    }\n\n    return data;\n  };\n\n  SVGTextLottieElement.prototype.buildNewText = function () {\n    this.addDynamicProperty(this);\n    var i;\n    var len;\n    var documentData = this.textProperty.currentData;\n    this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0);\n\n    if (documentData.fc) {\n      this.layerElement.setAttribute('fill', this.buildColor(documentData.fc));\n    } else {\n      this.layerElement.setAttribute('fill', 'rgba(0,0,0,0)');\n    }\n\n    if (documentData.sc) {\n      this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc));\n      this.layerElement.setAttribute('stroke-width', documentData.sw);\n    }\n\n    this.layerElement.setAttribute('font-size', documentData.finalSize);\n    var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n    if (fontData.fClass) {\n      this.layerElement.setAttribute('class', fontData.fClass);\n    } else {\n      this.layerElement.setAttribute('font-family', fontData.fFamily);\n      var fWeight = documentData.fWeight;\n      var fStyle = documentData.fStyle;\n      this.layerElement.setAttribute('font-style', fStyle);\n      this.layerElement.setAttribute('font-weight', fWeight);\n    }\n\n    this.layerElement.setAttribute('aria-label', documentData.t);\n    var letters = documentData.l || [];\n    var usesGlyphs = !!this.globalData.fontManager.chars;\n    len = letters.length;\n    var tSpan;\n    var matrixHelper = this.mHelper;\n    var shapeStr = '';\n    var singleShape = this.data.singleShape;\n    var xPos = 0;\n    var yPos = 0;\n    var firstLine = true;\n    var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n\n    if (singleShape && !usesGlyphs && !documentData.sz) {\n      var tElement = this.textContainer;\n      var justify = 'start';\n\n      switch (documentData.j) {\n        case 1:\n          justify = 'end';\n          break;\n\n        case 2:\n          justify = 'middle';\n          break;\n\n        default:\n          justify = 'start';\n          break;\n      }\n\n      tElement.setAttribute('text-anchor', justify);\n      tElement.setAttribute('letter-spacing', trackingOffset);\n      var textContent = this.buildTextContents(documentData.finalText);\n      len = textContent.length;\n      yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0;\n\n      for (i = 0; i < len; i += 1) {\n        tSpan = this.textSpans[i].span || createNS('tspan');\n        tSpan.textContent = textContent[i];\n        tSpan.setAttribute('x', 0);\n        tSpan.setAttribute('y', yPos);\n        tSpan.style.display = 'inherit';\n        tElement.appendChild(tSpan);\n\n        if (!this.textSpans[i]) {\n          this.textSpans[i] = {\n            span: null,\n            glyph: null\n          };\n        }\n\n        this.textSpans[i].span = tSpan;\n        yPos += documentData.finalLineHeight;\n      }\n\n      this.layerElement.appendChild(tElement);\n    } else {\n      var cachedSpansLength = this.textSpans.length;\n      var charData;\n\n      for (i = 0; i < len; i += 1) {\n        if (!this.textSpans[i]) {\n          this.textSpans[i] = {\n            span: null,\n            childSpan: null,\n            glyph: null\n          };\n        }\n\n        if (!usesGlyphs || !singleShape || i === 0) {\n          tSpan = cachedSpansLength > i ? this.textSpans[i].span : createNS(usesGlyphs ? 'g' : 'text');\n\n          if (cachedSpansLength <= i) {\n            tSpan.setAttribute('stroke-linecap', 'butt');\n            tSpan.setAttribute('stroke-linejoin', 'round');\n            tSpan.setAttribute('stroke-miterlimit', '4');\n            this.textSpans[i].span = tSpan;\n\n            if (usesGlyphs) {\n              var childSpan = createNS('g');\n              tSpan.appendChild(childSpan);\n              this.textSpans[i].childSpan = childSpan;\n            }\n\n            this.textSpans[i].span = tSpan;\n            this.layerElement.appendChild(tSpan);\n          }\n\n          tSpan.style.display = 'inherit';\n        }\n\n        matrixHelper.reset();\n\n        if (singleShape) {\n          if (letters[i].n) {\n            xPos = -trackingOffset;\n            yPos += documentData.yOffset;\n            yPos += firstLine ? 1 : 0;\n            firstLine = false;\n          }\n\n          this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n          xPos += letters[i].l || 0; // xPos += letters[i].val === ' ' ? 0 : trackingOffset;\n\n          xPos += trackingOffset;\n        }\n\n        if (usesGlyphs) {\n          charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n          var glyphElement; // t === 1 means the character has been replaced with an animated shaped\n\n          if (charData.t === 1) {\n            glyphElement = new SVGCompElement(charData.data, this.globalData, this);\n          } else {\n            var data = emptyShapeData;\n\n            if (charData.data && charData.data.shapes) {\n              data = this.buildShapeData(charData.data, documentData.finalSize);\n            }\n\n            glyphElement = new SVGShapeElement(data, this.globalData, this);\n          }\n\n          if (this.textSpans[i].glyph) {\n            var glyph = this.textSpans[i].glyph;\n            this.textSpans[i].childSpan.removeChild(glyph.layerElement);\n            glyph.destroy();\n          }\n\n          this.textSpans[i].glyph = glyphElement;\n          glyphElement._debug = true;\n          glyphElement.prepareFrame(0);\n          glyphElement.renderFrame();\n          this.textSpans[i].childSpan.appendChild(glyphElement.layerElement); // when using animated shapes, the layer will be scaled instead of replacing the internal scale\n          // this might have issues with strokes and might need a different solution\n\n          if (charData.t === 1) {\n            this.textSpans[i].childSpan.setAttribute('transform', 'scale(' + documentData.finalSize / 100 + ',' + documentData.finalSize / 100 + ')');\n          }\n        } else {\n          if (singleShape) {\n            tSpan.setAttribute('transform', 'translate(' + matrixHelper.props[12] + ',' + matrixHelper.props[13] + ')');\n          }\n\n          tSpan.textContent = letters[i].val;\n          tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n        } //\n\n      }\n\n      if (singleShape && tSpan) {\n        tSpan.setAttribute('d', shapeStr);\n      }\n    }\n\n    while (i < this.textSpans.length) {\n      this.textSpans[i].span.style.display = 'none';\n      i += 1;\n    }\n\n    this._sizeChanged = true;\n  };\n\n  SVGTextLottieElement.prototype.sourceRectAtTime = function () {\n    this.prepareFrame(this.comp.renderedFrame - this.data.st);\n    this.renderInnerContent();\n\n    if (this._sizeChanged) {\n      this._sizeChanged = false;\n      var textBox = this.layerElement.getBBox();\n      this.bbox = {\n        top: textBox.y,\n        left: textBox.x,\n        width: textBox.width,\n        height: textBox.height\n      };\n    }\n\n    return this.bbox;\n  };\n\n  SVGTextLottieElement.prototype.getValue = function () {\n    var i;\n    var len = this.textSpans.length;\n    var glyphElement;\n    this.renderedFrame = this.comp.renderedFrame;\n\n    for (i = 0; i < len; i += 1) {\n      glyphElement = this.textSpans[i].glyph;\n\n      if (glyphElement) {\n        glyphElement.prepareFrame(this.comp.renderedFrame - this.data.st);\n\n        if (glyphElement._mdf) {\n          this._mdf = true;\n        }\n      }\n    }\n  };\n\n  SVGTextLottieElement.prototype.renderInnerContent = function () {\n    this.validateText();\n\n    if (!this.data.singleShape || this._mdf) {\n      this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n      if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) {\n        this._sizeChanged = true;\n        var i;\n        var len;\n        var renderedLetters = this.textAnimator.renderedLetters;\n        var letters = this.textProperty.currentData.l;\n        len = letters.length;\n        var renderedLetter;\n        var textSpan;\n        var glyphElement;\n\n        for (i = 0; i < len; i += 1) {\n          if (!letters[i].n) {\n            renderedLetter = renderedLetters[i];\n            textSpan = this.textSpans[i].span;\n            glyphElement = this.textSpans[i].glyph;\n\n            if (glyphElement) {\n              glyphElement.renderFrame();\n            }\n\n            if (renderedLetter._mdf.m) {\n              textSpan.setAttribute('transform', renderedLetter.m);\n            }\n\n            if (renderedLetter._mdf.o) {\n              textSpan.setAttribute('opacity', renderedLetter.o);\n            }\n\n            if (renderedLetter._mdf.sw) {\n              textSpan.setAttribute('stroke-width', renderedLetter.sw);\n            }\n\n            if (renderedLetter._mdf.sc) {\n              textSpan.setAttribute('stroke', renderedLetter.sc);\n            }\n\n            if (renderedLetter._mdf.fc) {\n              textSpan.setAttribute('fill', renderedLetter.fc);\n            }\n          }\n        }\n      }\n    }\n  };\n\n  function ISolidElement(data, globalData, comp) {\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([IImageElement], ISolidElement);\n\n  ISolidElement.prototype.createContent = function () {\n    var rect = createNS('rect'); /// /rect.style.width = this.data.sw;\n    /// /rect.style.height = this.data.sh;\n    /// /rect.style.fill = this.data.sc;\n\n    rect.setAttribute('width', this.data.sw);\n    rect.setAttribute('height', this.data.sh);\n    rect.setAttribute('fill', this.data.sc);\n    this.layerElement.appendChild(rect);\n  };\n\n  function NullElement(data, globalData, comp) {\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.initFrame();\n    this.initTransform(data, globalData, comp);\n    this.initHierarchy();\n  }\n\n  NullElement.prototype.prepareFrame = function (num) {\n    this.prepareProperties(num, true);\n  };\n\n  NullElement.prototype.renderFrame = function () {};\n\n  NullElement.prototype.getBaseElement = function () {\n    return null;\n  };\n\n  NullElement.prototype.destroy = function () {};\n\n  NullElement.prototype.sourceRectAtTime = function () {};\n\n  NullElement.prototype.hide = function () {};\n\n  extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement);\n\n  function SVGRendererBase() {}\n\n  extendPrototype([BaseRenderer], SVGRendererBase);\n\n  SVGRendererBase.prototype.createNull = function (data) {\n    return new NullElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.createShape = function (data) {\n    return new SVGShapeElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.createText = function (data) {\n    return new SVGTextLottieElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.createImage = function (data) {\n    return new IImageElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.createSolid = function (data) {\n    return new ISolidElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.configAnimation = function (animData) {\n    this.svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n    this.svgElement.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\n\n    if (this.renderConfig.viewBoxSize) {\n      this.svgElement.setAttribute('viewBox', this.renderConfig.viewBoxSize);\n    } else {\n      this.svgElement.setAttribute('viewBox', '0 0 ' + animData.w + ' ' + animData.h);\n    }\n\n    if (!this.renderConfig.viewBoxOnly) {\n      this.svgElement.setAttribute('width', animData.w);\n      this.svgElement.setAttribute('height', animData.h);\n      this.svgElement.style.width = '100%';\n      this.svgElement.style.height = '100%';\n      this.svgElement.style.transform = 'translate3d(0,0,0)';\n      this.svgElement.style.contentVisibility = this.renderConfig.contentVisibility;\n    }\n\n    if (this.renderConfig.width) {\n      this.svgElement.setAttribute('width', this.renderConfig.width);\n    }\n\n    if (this.renderConfig.height) {\n      this.svgElement.setAttribute('height', this.renderConfig.height);\n    }\n\n    if (this.renderConfig.className) {\n      this.svgElement.setAttribute('class', this.renderConfig.className);\n    }\n\n    if (this.renderConfig.id) {\n      this.svgElement.setAttribute('id', this.renderConfig.id);\n    }\n\n    if (this.renderConfig.focusable !== undefined) {\n      this.svgElement.setAttribute('focusable', this.renderConfig.focusable);\n    }\n\n    this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio); // this.layerElement.style.transform = 'translate3d(0,0,0)';\n    // this.layerElement.style.transformOrigin = this.layerElement.style.mozTransformOrigin = this.layerElement.style.webkitTransformOrigin = this.layerElement.style['-webkit-transform'] = \"0px 0px 0px\";\n\n    this.animationItem.wrapper.appendChild(this.svgElement); // Mask animation\n\n    var defs = this.globalData.defs;\n    this.setupGlobalData(animData, defs);\n    this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n    this.data = animData;\n    var maskElement = createNS('clipPath');\n    var rect = createNS('rect');\n    rect.setAttribute('width', animData.w);\n    rect.setAttribute('height', animData.h);\n    rect.setAttribute('x', 0);\n    rect.setAttribute('y', 0);\n    var maskId = createElementID();\n    maskElement.setAttribute('id', maskId);\n    maskElement.appendChild(rect);\n    this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + maskId + ')');\n    defs.appendChild(maskElement);\n    this.layers = animData.layers;\n    this.elements = createSizedArray(animData.layers.length);\n  };\n\n  SVGRendererBase.prototype.destroy = function () {\n    if (this.animationItem.wrapper) {\n      this.animationItem.wrapper.innerText = '';\n    }\n\n    this.layerElement = null;\n    this.globalData.defs = null;\n    var i;\n    var len = this.layers ? this.layers.length : 0;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.elements[i] && this.elements[i].destroy) {\n        this.elements[i].destroy();\n      }\n    }\n\n    this.elements.length = 0;\n    this.destroyed = true;\n    this.animationItem = null;\n  };\n\n  SVGRendererBase.prototype.updateContainerSize = function () {};\n\n  SVGRendererBase.prototype.findIndexByInd = function (ind) {\n    var i = 0;\n    var len = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.layers[i].ind === ind) {\n        return i;\n      }\n    }\n\n    return -1;\n  };\n\n  SVGRendererBase.prototype.buildItem = function (pos) {\n    var elements = this.elements;\n\n    if (elements[pos] || this.layers[pos].ty === 99) {\n      return;\n    }\n\n    elements[pos] = true;\n    var element = this.createItem(this.layers[pos]);\n    elements[pos] = element;\n\n    if (getExpressionsPlugin()) {\n      if (this.layers[pos].ty === 0) {\n        this.globalData.projectInterface.registerComposition(element);\n      }\n\n      element.initExpressions();\n    }\n\n    this.appendElementInPos(element, pos);\n\n    if (this.layers[pos].tt) {\n      var elementIndex = 'tp' in this.layers[pos] ? this.findIndexByInd(this.layers[pos].tp) : pos - 1;\n\n      if (elementIndex === -1) {\n        return;\n      }\n\n      if (!this.elements[elementIndex] || this.elements[elementIndex] === true) {\n        this.buildItem(elementIndex);\n        this.addPendingElement(element);\n      } else {\n        var matteElement = elements[elementIndex];\n        var matteMask = matteElement.getMatte(this.layers[pos].tt);\n        element.setMatte(matteMask);\n      }\n    }\n  };\n\n  SVGRendererBase.prototype.checkPendingElements = function () {\n    while (this.pendingElements.length) {\n      var element = this.pendingElements.pop();\n      element.checkParenting();\n\n      if (element.data.tt) {\n        var i = 0;\n        var len = this.elements.length;\n\n        while (i < len) {\n          if (this.elements[i] === element) {\n            var elementIndex = 'tp' in element.data ? this.findIndexByInd(element.data.tp) : i - 1;\n            var matteElement = this.elements[elementIndex];\n            var matteMask = matteElement.getMatte(this.layers[i].tt);\n            element.setMatte(matteMask);\n            break;\n          }\n\n          i += 1;\n        }\n      }\n    }\n  };\n\n  SVGRendererBase.prototype.renderFrame = function (num) {\n    if (this.renderedFrame === num || this.destroyed) {\n      return;\n    }\n\n    if (num === null) {\n      num = this.renderedFrame;\n    } else {\n      this.renderedFrame = num;\n    } // console.log('-------');\n    // console.log('FRAME ',num);\n\n\n    this.globalData.frameNum = num;\n    this.globalData.frameId += 1;\n    this.globalData.projectInterface.currentFrame = num;\n    this.globalData._mdf = false;\n    var i;\n    var len = this.layers.length;\n\n    if (!this.completeLayers) {\n      this.checkLayers(num);\n    }\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].prepareFrame(num - this.layers[i].st);\n      }\n    }\n\n    if (this.globalData._mdf) {\n      for (i = 0; i < len; i += 1) {\n        if (this.completeLayers || this.elements[i]) {\n          this.elements[i].renderFrame();\n        }\n      }\n    }\n  };\n\n  SVGRendererBase.prototype.appendElementInPos = function (element, pos) {\n    var newElement = element.getBaseElement();\n\n    if (!newElement) {\n      return;\n    }\n\n    var i = 0;\n    var nextElement;\n\n    while (i < pos) {\n      if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) {\n        nextElement = this.elements[i].getBaseElement();\n      }\n\n      i += 1;\n    }\n\n    if (nextElement) {\n      this.layerElement.insertBefore(newElement, nextElement);\n    } else {\n      this.layerElement.appendChild(newElement);\n    }\n  };\n\n  SVGRendererBase.prototype.hide = function () {\n    this.layerElement.style.display = 'none';\n  };\n\n  SVGRendererBase.prototype.show = function () {\n    this.layerElement.style.display = 'block';\n  };\n\n  function ICompElement() {}\n\n  extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement);\n\n  ICompElement.prototype.initElement = function (data, globalData, comp) {\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.initTransform(data, globalData, comp);\n    this.initRenderable();\n    this.initHierarchy();\n    this.initRendererElement();\n    this.createContainerElements();\n    this.createRenderableComponents();\n\n    if (this.data.xt || !globalData.progressiveLoad) {\n      this.buildAllItems();\n    }\n\n    this.hide();\n  };\n  /* ICompElement.prototype.hide = function(){\r\n      if(!this.hidden){\r\n          this.hideElement();\r\n          var i,len = this.elements.length;\r\n          for( i = 0; i < len; i+=1 ){\r\n              if(this.elements[i]){\r\n                  this.elements[i].hide();\r\n              }\r\n          }\r\n      }\r\n  }; */\n\n\n  ICompElement.prototype.prepareFrame = function (num) {\n    this._mdf = false;\n    this.prepareRenderableFrame(num);\n    this.prepareProperties(num, this.isInRange);\n\n    if (!this.isInRange && !this.data.xt) {\n      return;\n    }\n\n    if (!this.tm._placeholder) {\n      var timeRemapped = this.tm.v;\n\n      if (timeRemapped === this.data.op) {\n        timeRemapped = this.data.op - 1;\n      }\n\n      this.renderedFrame = timeRemapped;\n    } else {\n      this.renderedFrame = num / this.data.sr;\n    }\n\n    var i;\n    var len = this.elements.length;\n\n    if (!this.completeLayers) {\n      this.checkLayers(this.renderedFrame);\n    } // This iteration needs to be backwards because of how expressions connect between each other\n\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st);\n\n        if (this.elements[i]._mdf) {\n          this._mdf = true;\n        }\n      }\n    }\n  };\n\n  ICompElement.prototype.renderInnerContent = function () {\n    var i;\n    var len = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].renderFrame();\n      }\n    }\n  };\n\n  ICompElement.prototype.setElements = function (elems) {\n    this.elements = elems;\n  };\n\n  ICompElement.prototype.getElements = function () {\n    return this.elements;\n  };\n\n  ICompElement.prototype.destroyElements = function () {\n    var i;\n    var len = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.elements[i]) {\n        this.elements[i].destroy();\n      }\n    }\n  };\n\n  ICompElement.prototype.destroy = function () {\n    this.destroyElements();\n    this.destroyBaseElement();\n  };\n\n  function SVGCompElement(data, globalData, comp) {\n    this.layers = data.layers;\n    this.supports3d = true;\n    this.completeLayers = false;\n    this.pendingElements = [];\n    this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n    this.initElement(data, globalData, comp);\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n      _placeholder: true\n    };\n  }\n\n  extendPrototype([SVGRendererBase, ICompElement, SVGBaseElement], SVGCompElement);\n\n  SVGCompElement.prototype.createComp = function (data) {\n    return new SVGCompElement(data, this.globalData, this);\n  };\n\n  function SVGRenderer(animationItem, config) {\n    this.animationItem = animationItem;\n    this.layers = null;\n    this.renderedFrame = -1;\n    this.svgElement = createNS('svg');\n    var ariaLabel = '';\n\n    if (config && config.title) {\n      var titleElement = createNS('title');\n      var titleId = createElementID();\n      titleElement.setAttribute('id', titleId);\n      titleElement.textContent = config.title;\n      this.svgElement.appendChild(titleElement);\n      ariaLabel += titleId;\n    }\n\n    if (config && config.description) {\n      var descElement = createNS('desc');\n      var descId = createElementID();\n      descElement.setAttribute('id', descId);\n      descElement.textContent = config.description;\n      this.svgElement.appendChild(descElement);\n      ariaLabel += ' ' + descId;\n    }\n\n    if (ariaLabel) {\n      this.svgElement.setAttribute('aria-labelledby', ariaLabel);\n    }\n\n    var defs = createNS('defs');\n    this.svgElement.appendChild(defs);\n    var maskElement = createNS('g');\n    this.svgElement.appendChild(maskElement);\n    this.layerElement = maskElement;\n    this.renderConfig = {\n      preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      contentVisibility: config && config.contentVisibility || 'visible',\n      progressiveLoad: config && config.progressiveLoad || false,\n      hideOnTransparent: !(config && config.hideOnTransparent === false),\n      viewBoxOnly: config && config.viewBoxOnly || false,\n      viewBoxSize: config && config.viewBoxSize || false,\n      className: config && config.className || '',\n      id: config && config.id || '',\n      focusable: config && config.focusable,\n      filterSize: {\n        width: config && config.filterSize && config.filterSize.width || '100%',\n        height: config && config.filterSize && config.filterSize.height || '100%',\n        x: config && config.filterSize && config.filterSize.x || '0%',\n        y: config && config.filterSize && config.filterSize.y || '0%'\n      },\n      width: config && config.width,\n      height: config && config.height,\n      runExpressions: !config || config.runExpressions === undefined || config.runExpressions\n    };\n    this.globalData = {\n      _mdf: false,\n      frameNum: -1,\n      defs: defs,\n      renderConfig: this.renderConfig\n    };\n    this.elements = [];\n    this.pendingElements = [];\n    this.destroyed = false;\n    this.rendererType = 'svg';\n  }\n\n  extendPrototype([SVGRendererBase], SVGRenderer);\n\n  SVGRenderer.prototype.createComp = function (data) {\n    return new SVGCompElement(data, this.globalData, this);\n  };\n\n  function ShapeTransformManager() {\n    this.sequences = {};\n    this.sequenceList = [];\n    this.transform_key_count = 0;\n  }\n\n  ShapeTransformManager.prototype = {\n    addTransformSequence: function addTransformSequence(transforms) {\n      var i;\n      var len = transforms.length;\n      var key = '_';\n\n      for (i = 0; i < len; i += 1) {\n        key += transforms[i].transform.key + '_';\n      }\n\n      var sequence = this.sequences[key];\n\n      if (!sequence) {\n        sequence = {\n          transforms: [].concat(transforms),\n          finalTransform: new Matrix(),\n          _mdf: false\n        };\n        this.sequences[key] = sequence;\n        this.sequenceList.push(sequence);\n      }\n\n      return sequence;\n    },\n    processSequence: function processSequence(sequence, isFirstFrame) {\n      var i = 0;\n      var len = sequence.transforms.length;\n      var _mdf = isFirstFrame;\n\n      while (i < len && !isFirstFrame) {\n        if (sequence.transforms[i].transform.mProps._mdf) {\n          _mdf = true;\n          break;\n        }\n\n        i += 1;\n      }\n\n      if (_mdf) {\n        sequence.finalTransform.reset();\n\n        for (i = len - 1; i >= 0; i -= 1) {\n          sequence.finalTransform.multiply(sequence.transforms[i].transform.mProps.v);\n        }\n      }\n\n      sequence._mdf = _mdf;\n    },\n    processSequences: function processSequences(isFirstFrame) {\n      var i;\n      var len = this.sequenceList.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.processSequence(this.sequenceList[i], isFirstFrame);\n      }\n    },\n    getNewKey: function getNewKey() {\n      this.transform_key_count += 1;\n      return '_' + this.transform_key_count;\n    }\n  };\n\n  var lumaLoader = function lumaLoader() {\n    var id = '__lottie_element_luma_buffer';\n    var lumaBuffer = null;\n    var lumaBufferCtx = null;\n    var svg = null; // This alternate solution has a slight delay before the filter is applied, resulting in a flicker on the first frame.\n    // Keeping this here for reference, and in the future, if offscreen canvas supports url filters, this can be used.\n    // For now, neither of them work for offscreen canvas, so canvas workers can't support the luma track matte mask.\n    // Naming it solution 2 to mark the extra comment lines.\n\n    /*\r\n    var svgString = [\r\n      '<svg xmlns=\"http://www.w3.org/2000/svg\">',\r\n      '<filter id=\"' + id + '\">',\r\n      '<feColorMatrix type=\"matrix\" color-interpolation-filters=\"sRGB\" values=\"',\r\n      '0.3, 0.3, 0.3, 0, 0, ',\r\n      '0.3, 0.3, 0.3, 0, 0, ',\r\n      '0.3, 0.3, 0.3, 0, 0, ',\r\n      '0.3, 0.3, 0.3, 0, 0',\r\n      '\"/>',\r\n      '</filter>',\r\n      '</svg>',\r\n    ].join('');\r\n    var blob = new Blob([svgString], { type: 'image/svg+xml' });\r\n    var url = URL.createObjectURL(blob);\r\n    */\n\n    function createLumaSvgFilter() {\n      var _svg = createNS('svg');\n\n      var fil = createNS('filter');\n      var matrix = createNS('feColorMatrix');\n      fil.setAttribute('id', id);\n      matrix.setAttribute('type', 'matrix');\n      matrix.setAttribute('color-interpolation-filters', 'sRGB');\n      matrix.setAttribute('values', '0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0');\n      fil.appendChild(matrix);\n\n      _svg.appendChild(fil);\n\n      _svg.setAttribute('id', id + '_svg');\n\n      if (featureSupport.svgLumaHidden) {\n        _svg.style.display = 'none';\n      }\n\n      return _svg;\n    }\n\n    function loadLuma() {\n      if (!lumaBuffer) {\n        svg = createLumaSvgFilter();\n        document.body.appendChild(svg);\n        lumaBuffer = createTag('canvas');\n        lumaBufferCtx = lumaBuffer.getContext('2d'); // lumaBufferCtx.filter = `url('${url}#__lottie_element_luma_buffer')`; // part of solution 2\n\n        lumaBufferCtx.filter = 'url(#' + id + ')';\n        lumaBufferCtx.fillStyle = 'rgba(0,0,0,0)';\n        lumaBufferCtx.fillRect(0, 0, 1, 1);\n      }\n    }\n\n    function getLuma(canvas) {\n      if (!lumaBuffer) {\n        loadLuma();\n      }\n\n      lumaBuffer.width = canvas.width;\n      lumaBuffer.height = canvas.height; // lumaBufferCtx.filter = `url('${url}#__lottie_element_luma_buffer')`; // part of solution 2\n\n      lumaBufferCtx.filter = 'url(#' + id + ')';\n      return lumaBuffer;\n    }\n\n    return {\n      load: loadLuma,\n      get: getLuma\n    };\n  };\n\n  function createCanvas(width, height) {\n    if (featureSupport.offscreenCanvas) {\n      return new OffscreenCanvas(width, height);\n    }\n\n    var canvas = createTag('canvas');\n    canvas.width = width;\n    canvas.height = height;\n    return canvas;\n  }\n\n  var assetLoader = function () {\n    return {\n      loadLumaCanvas: lumaLoader.load,\n      getLumaCanvas: lumaLoader.get,\n      createCanvas: createCanvas\n    };\n  }();\n\n  var registeredEffects = {};\n\n  function CVEffects(elem) {\n    var i;\n    var len = elem.data.ef ? elem.data.ef.length : 0;\n    this.filters = [];\n    var filterManager;\n\n    for (i = 0; i < len; i += 1) {\n      filterManager = null;\n      var type = elem.data.ef[i].ty;\n\n      if (registeredEffects[type]) {\n        var Effect = registeredEffects[type].effect;\n        filterManager = new Effect(elem.effectsManager.effectElements[i], elem);\n      }\n\n      if (filterManager) {\n        this.filters.push(filterManager);\n      }\n    }\n\n    if (this.filters.length) {\n      elem.addRenderableComponent(this);\n    }\n  }\n\n  CVEffects.prototype.renderFrame = function (_isFirstFrame) {\n    var i;\n    var len = this.filters.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.filters[i].renderFrame(_isFirstFrame);\n    }\n  };\n\n  CVEffects.prototype.getEffects = function (type) {\n    var i;\n    var len = this.filters.length;\n    var effects = [];\n\n    for (i = 0; i < len; i += 1) {\n      if (this.filters[i].type === type) {\n        effects.push(this.filters[i]);\n      }\n    }\n\n    return effects;\n  };\n\n  function registerEffect(id, effect) {\n    registeredEffects[id] = {\n      effect: effect\n    };\n  }\n\n  function CVMaskElement(data, element) {\n    this.data = data;\n    this.element = element;\n    this.masksProperties = this.data.masksProperties || [];\n    this.viewData = createSizedArray(this.masksProperties.length);\n    var i;\n    var len = this.masksProperties.length;\n    var hasMasks = false;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.masksProperties[i].mode !== 'n') {\n        hasMasks = true;\n      }\n\n      this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3);\n    }\n\n    this.hasMasks = hasMasks;\n\n    if (hasMasks) {\n      this.element.addRenderableComponent(this);\n    }\n  }\n\n  CVMaskElement.prototype.renderFrame = function () {\n    if (!this.hasMasks) {\n      return;\n    }\n\n    var transform = this.element.finalTransform.mat;\n    var ctx = this.element.canvasContext;\n    var i;\n    var len = this.masksProperties.length;\n    var pt;\n    var pts;\n    var data;\n    ctx.beginPath();\n\n    for (i = 0; i < len; i += 1) {\n      if (this.masksProperties[i].mode !== 'n') {\n        if (this.masksProperties[i].inv) {\n          ctx.moveTo(0, 0);\n          ctx.lineTo(this.element.globalData.compSize.w, 0);\n          ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h);\n          ctx.lineTo(0, this.element.globalData.compSize.h);\n          ctx.lineTo(0, 0);\n        }\n\n        data = this.viewData[i].v;\n        pt = transform.applyToPointArray(data.v[0][0], data.v[0][1], 0);\n        ctx.moveTo(pt[0], pt[1]);\n        var j;\n        var jLen = data._length;\n\n        for (j = 1; j < jLen; j += 1) {\n          pts = transform.applyToTriplePoints(data.o[j - 1], data.i[j], data.v[j]);\n          ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n        }\n\n        pts = transform.applyToTriplePoints(data.o[j - 1], data.i[0], data.v[0]);\n        ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n      }\n    }\n\n    this.element.globalData.renderer.save(true);\n    ctx.clip();\n  };\n\n  CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty;\n\n  CVMaskElement.prototype.destroy = function () {\n    this.element = null;\n  };\n\n  function CVBaseElement() {}\n\n  var operationsMap = {\n    1: 'source-in',\n    2: 'source-out',\n    3: 'source-in',\n    4: 'source-out'\n  };\n  CVBaseElement.prototype = {\n    createElements: function createElements() {},\n    initRendererElement: function initRendererElement() {},\n    createContainerElements: function createContainerElements() {\n      // If the layer is masked we will use two buffers to store each different states of the drawing\n      // This solution is not ideal for several reason. But unfortunately, because of the recursive\n      // nature of the render tree, it's the only simple way to make sure one inner mask doesn't override an outer mask.\n      // TODO: try to reduce the size of these buffers to the size of the composition contaning the layer\n      // It might be challenging because the layer most likely is transformed in some way\n      if (this.data.tt >= 1) {\n        this.buffers = [];\n        var canvasContext = this.globalData.canvasContext;\n        var bufferCanvas = assetLoader.createCanvas(canvasContext.canvas.width, canvasContext.canvas.height);\n        this.buffers.push(bufferCanvas);\n        var bufferCanvas2 = assetLoader.createCanvas(canvasContext.canvas.width, canvasContext.canvas.height);\n        this.buffers.push(bufferCanvas2);\n\n        if (this.data.tt >= 3 && !document._isProxy) {\n          assetLoader.loadLumaCanvas();\n        }\n      }\n\n      this.canvasContext = this.globalData.canvasContext;\n      this.transformCanvas = this.globalData.transformCanvas;\n      this.renderableEffectsManager = new CVEffects(this);\n      this.searchEffectTransforms();\n    },\n    createContent: function createContent() {},\n    setBlendMode: function setBlendMode() {\n      var globalData = this.globalData;\n\n      if (globalData.blendMode !== this.data.bm) {\n        globalData.blendMode = this.data.bm;\n        var blendModeValue = getBlendMode(this.data.bm);\n        globalData.canvasContext.globalCompositeOperation = blendModeValue;\n      }\n    },\n    createRenderableComponents: function createRenderableComponents() {\n      this.maskManager = new CVMaskElement(this.data, this);\n      this.transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT);\n    },\n    hideElement: function hideElement() {\n      if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n        this.hidden = true;\n      }\n    },\n    showElement: function showElement() {\n      if (this.isInRange && !this.isTransparent) {\n        this.hidden = false;\n        this._isFirstFrame = true;\n        this.maskManager._isFirstFrame = true;\n      }\n    },\n    clearCanvas: function clearCanvas(canvasContext) {\n      canvasContext.clearRect(this.transformCanvas.tx, this.transformCanvas.ty, this.transformCanvas.w * this.transformCanvas.sx, this.transformCanvas.h * this.transformCanvas.sy);\n    },\n    prepareLayer: function prepareLayer() {\n      if (this.data.tt >= 1) {\n        var buffer = this.buffers[0];\n        var bufferCtx = buffer.getContext('2d');\n        this.clearCanvas(bufferCtx); // on the first buffer we store the current state of the global drawing\n\n        bufferCtx.drawImage(this.canvasContext.canvas, 0, 0); // The next four lines are to clear the canvas\n        // TODO: Check if there is a way to clear the canvas without resetting the transform\n\n        this.currentTransform = this.canvasContext.getTransform();\n        this.canvasContext.setTransform(1, 0, 0, 1, 0, 0);\n        this.clearCanvas(this.canvasContext);\n        this.canvasContext.setTransform(this.currentTransform);\n      }\n    },\n    exitLayer: function exitLayer() {\n      if (this.data.tt >= 1) {\n        var buffer = this.buffers[1]; // On the second buffer we store the current state of the global drawing\n        // that only contains the content of this layer\n        // (if it is a composition, it also includes the nested layers)\n\n        var bufferCtx = buffer.getContext('2d');\n        this.clearCanvas(bufferCtx);\n        bufferCtx.drawImage(this.canvasContext.canvas, 0, 0); // We clear the canvas again\n\n        this.canvasContext.setTransform(1, 0, 0, 1, 0, 0);\n        this.clearCanvas(this.canvasContext);\n        this.canvasContext.setTransform(this.currentTransform); // We draw the mask\n\n        var mask = this.comp.getElementById('tp' in this.data ? this.data.tp : this.data.ind - 1);\n        mask.renderFrame(true); // We draw the second buffer (that contains the content of this layer)\n\n        this.canvasContext.setTransform(1, 0, 0, 1, 0, 0); // If the mask is a Luma matte, we need to do two extra painting operations\n        // the _isProxy check is to avoid drawing a fake canvas in workers that will throw an error\n\n        if (this.data.tt >= 3 && !document._isProxy) {\n          // We copy the painted mask to a buffer that has a color matrix filter applied to it\n          // that applies the rgb values to the alpha channel\n          var lumaBuffer = assetLoader.getLumaCanvas(this.canvasContext.canvas);\n          var lumaBufferCtx = lumaBuffer.getContext('2d');\n          lumaBufferCtx.drawImage(this.canvasContext.canvas, 0, 0);\n          this.clearCanvas(this.canvasContext); // we repaint the context with the mask applied to it\n\n          this.canvasContext.drawImage(lumaBuffer, 0, 0);\n        }\n\n        this.canvasContext.globalCompositeOperation = operationsMap[this.data.tt];\n        this.canvasContext.drawImage(buffer, 0, 0); // We finally draw the first buffer (that contains the content of the global drawing)\n        // We use destination-over to draw the global drawing below the current layer\n\n        this.canvasContext.globalCompositeOperation = 'destination-over';\n        this.canvasContext.drawImage(this.buffers[0], 0, 0);\n        this.canvasContext.setTransform(this.currentTransform); // We reset the globalCompositeOperation to source-over, the standard type of operation\n\n        this.canvasContext.globalCompositeOperation = 'source-over';\n      }\n    },\n    renderFrame: function renderFrame(forceRender) {\n      if (this.hidden || this.data.hd) {\n        return;\n      }\n\n      if (this.data.td === 1 && !forceRender) {\n        return;\n      }\n\n      this.renderTransform();\n      this.renderRenderable();\n      this.renderLocalTransform();\n      this.setBlendMode();\n      var forceRealStack = this.data.ty === 0;\n      this.prepareLayer();\n      this.globalData.renderer.save(forceRealStack);\n      this.globalData.renderer.ctxTransform(this.finalTransform.localMat.props);\n      this.globalData.renderer.ctxOpacity(this.finalTransform.localOpacity);\n      this.renderInnerContent();\n      this.globalData.renderer.restore(forceRealStack);\n      this.exitLayer();\n\n      if (this.maskManager.hasMasks) {\n        this.globalData.renderer.restore(true);\n      }\n\n      if (this._isFirstFrame) {\n        this._isFirstFrame = false;\n      }\n    },\n    destroy: function destroy() {\n      this.canvasContext = null;\n      this.data = null;\n      this.globalData = null;\n      this.maskManager.destroy();\n    },\n    mHelper: new Matrix()\n  };\n  CVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement;\n  CVBaseElement.prototype.show = CVBaseElement.prototype.showElement;\n\n  function CVShapeData(element, data, styles, transformsManager) {\n    this.styledShapes = [];\n    this.tr = [0, 0, 0, 0, 0, 0];\n    var ty = 4;\n\n    if (data.ty === 'rc') {\n      ty = 5;\n    } else if (data.ty === 'el') {\n      ty = 6;\n    } else if (data.ty === 'sr') {\n      ty = 7;\n    }\n\n    this.sh = ShapePropertyFactory.getShapeProp(element, data, ty, element);\n    var i;\n    var len = styles.length;\n    var styledShape;\n\n    for (i = 0; i < len; i += 1) {\n      if (!styles[i].closed) {\n        styledShape = {\n          transforms: transformsManager.addTransformSequence(styles[i].transforms),\n          trNodes: []\n        };\n        this.styledShapes.push(styledShape);\n        styles[i].elements.push(styledShape);\n      }\n    }\n  }\n\n  CVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated;\n\n  function CVShapeElement(data, globalData, comp) {\n    this.shapes = [];\n    this.shapesData = data.shapes;\n    this.stylesList = [];\n    this.itemsData = [];\n    this.prevViewData = [];\n    this.shapeModifiers = [];\n    this.processedElements = [];\n    this.transformsManager = new ShapeTransformManager();\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, CVBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableElement], CVShapeElement);\n  CVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement;\n  CVShapeElement.prototype.transformHelper = {\n    opacity: 1,\n    _opMdf: false\n  };\n  CVShapeElement.prototype.dashResetter = [];\n\n  CVShapeElement.prototype.createContent = function () {\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n  };\n\n  CVShapeElement.prototype.createStyleElement = function (data, transforms) {\n    var styleElem = {\n      data: data,\n      type: data.ty,\n      preTransforms: this.transformsManager.addTransformSequence(transforms),\n      transforms: [],\n      elements: [],\n      closed: data.hd === true\n    };\n    var elementData = {};\n\n    if (data.ty === 'fl' || data.ty === 'st') {\n      elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this);\n\n      if (!elementData.c.k) {\n        styleElem.co = 'rgb(' + bmFloor(elementData.c.v[0]) + ',' + bmFloor(elementData.c.v[1]) + ',' + bmFloor(elementData.c.v[2]) + ')';\n      }\n    } else if (data.ty === 'gf' || data.ty === 'gs') {\n      elementData.s = PropertyFactory.getProp(this, data.s, 1, null, this);\n      elementData.e = PropertyFactory.getProp(this, data.e, 1, null, this);\n      elementData.h = PropertyFactory.getProp(this, data.h || {\n        k: 0\n      }, 0, 0.01, this);\n      elementData.a = PropertyFactory.getProp(this, data.a || {\n        k: 0\n      }, 0, degToRads, this);\n      elementData.g = new GradientProperty(this, data.g, this);\n    }\n\n    elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, this);\n\n    if (data.ty === 'st' || data.ty === 'gs') {\n      styleElem.lc = lineCapEnum[data.lc || 2];\n      styleElem.lj = lineJoinEnum[data.lj || 2];\n\n      if (data.lj == 1) {\n        // eslint-disable-line eqeqeq\n        styleElem.ml = data.ml;\n      }\n\n      elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this);\n\n      if (!elementData.w.k) {\n        styleElem.wi = elementData.w.v;\n      }\n\n      if (data.d) {\n        var d = new DashProperty(this, data.d, 'canvas', this);\n        elementData.d = d;\n\n        if (!elementData.d.k) {\n          styleElem.da = elementData.d.dashArray;\n          styleElem[\"do\"] = elementData.d.dashoffset[0];\n        }\n      }\n    } else {\n      styleElem.r = data.r === 2 ? 'evenodd' : 'nonzero';\n    }\n\n    this.stylesList.push(styleElem);\n    elementData.style = styleElem;\n    return elementData;\n  };\n\n  CVShapeElement.prototype.createGroupElement = function () {\n    var elementData = {\n      it: [],\n      prevViewData: []\n    };\n    return elementData;\n  };\n\n  CVShapeElement.prototype.createTransformElement = function (data) {\n    var elementData = {\n      transform: {\n        opacity: 1,\n        _opMdf: false,\n        key: this.transformsManager.getNewKey(),\n        op: PropertyFactory.getProp(this, data.o, 0, 0.01, this),\n        mProps: TransformPropertyFactory.getTransformProperty(this, data, this)\n      }\n    };\n    return elementData;\n  };\n\n  CVShapeElement.prototype.createShapeElement = function (data) {\n    var elementData = new CVShapeData(this, data, this.stylesList, this.transformsManager);\n    this.shapes.push(elementData);\n    this.addShapeToModifiers(elementData);\n    return elementData;\n  };\n\n  CVShapeElement.prototype.reloadShapes = function () {\n    this._isFirstFrame = true;\n    var i;\n    var len = this.itemsData.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.prevViewData[i] = this.itemsData[i];\n    }\n\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n    len = this.dynamicProperties.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.dynamicProperties[i].getValue();\n    }\n\n    this.renderModifiers();\n    this.transformsManager.processSequences(this._isFirstFrame);\n  };\n\n  CVShapeElement.prototype.addTransformToStyleList = function (transform) {\n    var i;\n    var len = this.stylesList.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (!this.stylesList[i].closed) {\n        this.stylesList[i].transforms.push(transform);\n      }\n    }\n  };\n\n  CVShapeElement.prototype.removeTransformFromStyleList = function () {\n    var i;\n    var len = this.stylesList.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (!this.stylesList[i].closed) {\n        this.stylesList[i].transforms.pop();\n      }\n    }\n  };\n\n  CVShapeElement.prototype.closeStyles = function (styles) {\n    var i;\n    var len = styles.length;\n\n    for (i = 0; i < len; i += 1) {\n      styles[i].closed = true;\n    }\n  };\n\n  CVShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, shouldRender, transforms) {\n    var i;\n    var len = arr.length - 1;\n    var j;\n    var jLen;\n    var ownStyles = [];\n    var ownModifiers = [];\n    var processedPos;\n    var modifier;\n    var currentTransform;\n    var ownTransforms = [].concat(transforms);\n\n    for (i = len; i >= 0; i -= 1) {\n      processedPos = this.searchProcessedElement(arr[i]);\n\n      if (!processedPos) {\n        arr[i]._shouldRender = shouldRender;\n      } else {\n        itemsData[i] = prevViewData[processedPos - 1];\n      }\n\n      if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs') {\n        if (!processedPos) {\n          itemsData[i] = this.createStyleElement(arr[i], ownTransforms);\n        } else {\n          itemsData[i].style.closed = false;\n        }\n\n        ownStyles.push(itemsData[i].style);\n      } else if (arr[i].ty === 'gr') {\n        if (!processedPos) {\n          itemsData[i] = this.createGroupElement(arr[i]);\n        } else {\n          jLen = itemsData[i].it.length;\n\n          for (j = 0; j < jLen; j += 1) {\n            itemsData[i].prevViewData[j] = itemsData[i].it[j];\n          }\n        }\n\n        this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms);\n      } else if (arr[i].ty === 'tr') {\n        if (!processedPos) {\n          currentTransform = this.createTransformElement(arr[i]);\n          itemsData[i] = currentTransform;\n        }\n\n        ownTransforms.push(itemsData[i]);\n        this.addTransformToStyleList(itemsData[i]);\n      } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n        if (!processedPos) {\n          itemsData[i] = this.createShapeElement(arr[i]);\n        }\n      } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'pb' || arr[i].ty === 'zz' || arr[i].ty === 'op') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty);\n          modifier.init(this, arr[i]);\n          itemsData[i] = modifier;\n          this.shapeModifiers.push(modifier);\n        } else {\n          modifier = itemsData[i];\n          modifier.closed = false;\n        }\n\n        ownModifiers.push(modifier);\n      } else if (arr[i].ty === 'rp') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty);\n          itemsData[i] = modifier;\n          modifier.init(this, arr, i, itemsData);\n          this.shapeModifiers.push(modifier);\n          shouldRender = false;\n        } else {\n          modifier = itemsData[i];\n          modifier.closed = true;\n        }\n\n        ownModifiers.push(modifier);\n      }\n\n      this.addProcessedElement(arr[i], i + 1);\n    }\n\n    this.removeTransformFromStyleList();\n    this.closeStyles(ownStyles);\n    len = ownModifiers.length;\n\n    for (i = 0; i < len; i += 1) {\n      ownModifiers[i].closed = true;\n    }\n  };\n\n  CVShapeElement.prototype.renderInnerContent = function () {\n    this.transformHelper.opacity = 1;\n    this.transformHelper._opMdf = false;\n    this.renderModifiers();\n    this.transformsManager.processSequences(this._isFirstFrame);\n    this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true);\n  };\n\n  CVShapeElement.prototype.renderShapeTransform = function (parentTransform, groupTransform) {\n    if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) {\n      groupTransform.opacity = parentTransform.opacity;\n      groupTransform.opacity *= groupTransform.op.v;\n      groupTransform._opMdf = true;\n    }\n  };\n\n  CVShapeElement.prototype.drawLayer = function () {\n    var i;\n    var len = this.stylesList.length;\n    var j;\n    var jLen;\n    var k;\n    var kLen;\n    var elems;\n    var nodes;\n    var renderer = this.globalData.renderer;\n    var ctx = this.globalData.canvasContext;\n    var type;\n    var currentStyle;\n\n    for (i = 0; i < len; i += 1) {\n      currentStyle = this.stylesList[i];\n      type = currentStyle.type; // Skipping style when\n      // Stroke width equals 0\n      // style should not be rendered (extra unused repeaters)\n      // current opacity equals 0\n      // global opacity equals 0\n\n      if (!((type === 'st' || type === 'gs') && currentStyle.wi === 0 || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0)) {\n        renderer.save();\n        elems = currentStyle.elements;\n\n        if (type === 'st' || type === 'gs') {\n          renderer.ctxStrokeStyle(type === 'st' ? currentStyle.co : currentStyle.grd); // ctx.strokeStyle = type === 'st' ? currentStyle.co : currentStyle.grd;\n\n          renderer.ctxLineWidth(currentStyle.wi); // ctx.lineWidth = currentStyle.wi;\n\n          renderer.ctxLineCap(currentStyle.lc); // ctx.lineCap = currentStyle.lc;\n\n          renderer.ctxLineJoin(currentStyle.lj); // ctx.lineJoin = currentStyle.lj;\n\n          renderer.ctxMiterLimit(currentStyle.ml || 0); // ctx.miterLimit = currentStyle.ml || 0;\n        } else {\n          renderer.ctxFillStyle(type === 'fl' ? currentStyle.co : currentStyle.grd); // ctx.fillStyle = type === 'fl' ? currentStyle.co : currentStyle.grd;\n        }\n\n        renderer.ctxOpacity(currentStyle.coOp);\n\n        if (type !== 'st' && type !== 'gs') {\n          ctx.beginPath();\n        }\n\n        renderer.ctxTransform(currentStyle.preTransforms.finalTransform.props);\n        jLen = elems.length;\n\n        for (j = 0; j < jLen; j += 1) {\n          if (type === 'st' || type === 'gs') {\n            ctx.beginPath();\n\n            if (currentStyle.da) {\n              ctx.setLineDash(currentStyle.da);\n              ctx.lineDashOffset = currentStyle[\"do\"];\n            }\n          }\n\n          nodes = elems[j].trNodes;\n          kLen = nodes.length;\n\n          for (k = 0; k < kLen; k += 1) {\n            if (nodes[k].t === 'm') {\n              ctx.moveTo(nodes[k].p[0], nodes[k].p[1]);\n            } else if (nodes[k].t === 'c') {\n              ctx.bezierCurveTo(nodes[k].pts[0], nodes[k].pts[1], nodes[k].pts[2], nodes[k].pts[3], nodes[k].pts[4], nodes[k].pts[5]);\n            } else {\n              ctx.closePath();\n            }\n          }\n\n          if (type === 'st' || type === 'gs') {\n            // ctx.stroke();\n            renderer.ctxStroke();\n\n            if (currentStyle.da) {\n              ctx.setLineDash(this.dashResetter);\n            }\n          }\n        }\n\n        if (type !== 'st' && type !== 'gs') {\n          // ctx.fill(currentStyle.r);\n          this.globalData.renderer.ctxFill(currentStyle.r);\n        }\n\n        renderer.restore();\n      }\n    }\n  };\n\n  CVShapeElement.prototype.renderShape = function (parentTransform, items, data, isMain) {\n    var i;\n    var len = items.length - 1;\n    var groupTransform;\n    groupTransform = parentTransform;\n\n    for (i = len; i >= 0; i -= 1) {\n      if (items[i].ty === 'tr') {\n        groupTransform = data[i].transform;\n        this.renderShapeTransform(parentTransform, groupTransform);\n      } else if (items[i].ty === 'sh' || items[i].ty === 'el' || items[i].ty === 'rc' || items[i].ty === 'sr') {\n        this.renderPath(items[i], data[i]);\n      } else if (items[i].ty === 'fl') {\n        this.renderFill(items[i], data[i], groupTransform);\n      } else if (items[i].ty === 'st') {\n        this.renderStroke(items[i], data[i], groupTransform);\n      } else if (items[i].ty === 'gf' || items[i].ty === 'gs') {\n        this.renderGradientFill(items[i], data[i], groupTransform);\n      } else if (items[i].ty === 'gr') {\n        this.renderShape(groupTransform, items[i].it, data[i].it);\n      } else if (items[i].ty === 'tm') {//\n      }\n    }\n\n    if (isMain) {\n      this.drawLayer();\n    }\n  };\n\n  CVShapeElement.prototype.renderStyledShape = function (styledShape, shape) {\n    if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) {\n      var shapeNodes = styledShape.trNodes;\n      var paths = shape.paths;\n      var i;\n      var len;\n      var j;\n      var jLen = paths._length;\n      shapeNodes.length = 0;\n      var groupTransformMat = styledShape.transforms.finalTransform;\n\n      for (j = 0; j < jLen; j += 1) {\n        var pathNodes = paths.shapes[j];\n\n        if (pathNodes && pathNodes.v) {\n          len = pathNodes._length;\n\n          for (i = 1; i < len; i += 1) {\n            if (i === 1) {\n              shapeNodes.push({\n                t: 'm',\n                p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n              });\n            }\n\n            shapeNodes.push({\n              t: 'c',\n              pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i])\n            });\n          }\n\n          if (len === 1) {\n            shapeNodes.push({\n              t: 'm',\n              p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n            });\n          }\n\n          if (pathNodes.c && len) {\n            shapeNodes.push({\n              t: 'c',\n              pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0])\n            });\n            shapeNodes.push({\n              t: 'z'\n            });\n          }\n        }\n      }\n\n      styledShape.trNodes = shapeNodes;\n    }\n  };\n\n  CVShapeElement.prototype.renderPath = function (pathData, itemData) {\n    if (pathData.hd !== true && pathData._shouldRender) {\n      var i;\n      var len = itemData.styledShapes.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.renderStyledShape(itemData.styledShapes[i], itemData.sh);\n      }\n    }\n  };\n\n  CVShapeElement.prototype.renderFill = function (styleData, itemData, groupTransform) {\n    var styleElem = itemData.style;\n\n    if (itemData.c._mdf || this._isFirstFrame) {\n      styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n    }\n\n    if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n      styleElem.coOp = itemData.o.v * groupTransform.opacity;\n    }\n  };\n\n  CVShapeElement.prototype.renderGradientFill = function (styleData, itemData, groupTransform) {\n    var styleElem = itemData.style;\n    var grd;\n\n    if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf)) {\n      var ctx = this.globalData.canvasContext;\n      var pt1 = itemData.s.v;\n      var pt2 = itemData.e.v;\n\n      if (styleData.t === 1) {\n        grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]);\n      } else {\n        var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n        var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n        var percent = itemData.h.v;\n\n        if (percent >= 1) {\n          percent = 0.99;\n        } else if (percent <= -1) {\n          percent = -0.99;\n        }\n\n        var dist = rad * percent;\n        var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n        var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n        grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad);\n      }\n\n      var i;\n      var len = styleData.g.p;\n      var cValues = itemData.g.c;\n      var opacity = 1;\n\n      for (i = 0; i < len; i += 1) {\n        if (itemData.g._hasOpacity && itemData.g._collapsable) {\n          opacity = itemData.g.o[i * 2 + 1];\n        }\n\n        grd.addColorStop(cValues[i * 4] / 100, 'rgba(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ',' + opacity + ')');\n      }\n\n      styleElem.grd = grd;\n    }\n\n    styleElem.coOp = itemData.o.v * groupTransform.opacity;\n  };\n\n  CVShapeElement.prototype.renderStroke = function (styleData, itemData, groupTransform) {\n    var styleElem = itemData.style;\n    var d = itemData.d;\n\n    if (d && (d._mdf || this._isFirstFrame)) {\n      styleElem.da = d.dashArray;\n      styleElem[\"do\"] = d.dashoffset[0];\n    }\n\n    if (itemData.c._mdf || this._isFirstFrame) {\n      styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n    }\n\n    if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n      styleElem.coOp = itemData.o.v * groupTransform.opacity;\n    }\n\n    if (itemData.w._mdf || this._isFirstFrame) {\n      styleElem.wi = itemData.w.v;\n    }\n  };\n\n  CVShapeElement.prototype.destroy = function () {\n    this.shapesData = null;\n    this.globalData = null;\n    this.canvasContext = null;\n    this.stylesList.length = 0;\n    this.itemsData.length = 0;\n  };\n\n  function CVTextElement(data, globalData, comp) {\n    this.textSpans = [];\n    this.yOffset = 0;\n    this.fillColorAnim = false;\n    this.strokeColorAnim = false;\n    this.strokeWidthAnim = false;\n    this.stroke = false;\n    this.fill = false;\n    this.justifyOffset = 0;\n    this.currentRender = null;\n    this.renderType = 'canvas';\n    this.values = {\n      fill: 'rgba(0,0,0,0)',\n      stroke: 'rgba(0,0,0,0)',\n      sWidth: 0,\n      fValue: ''\n    };\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement, ITextElement], CVTextElement);\n  CVTextElement.prototype.tHelper = createTag('canvas').getContext('2d');\n\n  CVTextElement.prototype.buildNewText = function () {\n    var documentData = this.textProperty.currentData;\n    this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n    var hasFill = false;\n\n    if (documentData.fc) {\n      hasFill = true;\n      this.values.fill = this.buildColor(documentData.fc);\n    } else {\n      this.values.fill = 'rgba(0,0,0,0)';\n    }\n\n    this.fill = hasFill;\n    var hasStroke = false;\n\n    if (documentData.sc) {\n      hasStroke = true;\n      this.values.stroke = this.buildColor(documentData.sc);\n      this.values.sWidth = documentData.sw;\n    }\n\n    var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n    var i;\n    var len;\n    var letters = documentData.l;\n    var matrixHelper = this.mHelper;\n    this.stroke = hasStroke;\n    this.values.fValue = documentData.finalSize + 'px ' + this.globalData.fontManager.getFontByName(documentData.f).fFamily;\n    len = documentData.finalText.length; // this.tHelper.font = this.values.fValue;\n\n    var charData;\n    var shapeData;\n    var k;\n    var kLen;\n    var shapes;\n    var j;\n    var jLen;\n    var pathNodes;\n    var commands;\n    var pathArr;\n    var singleShape = this.data.singleShape;\n    var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n    var xPos = 0;\n    var yPos = 0;\n    var firstLine = true;\n    var cnt = 0;\n\n    for (i = 0; i < len; i += 1) {\n      charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n      shapeData = charData && charData.data || {};\n      matrixHelper.reset();\n\n      if (singleShape && letters[i].n) {\n        xPos = -trackingOffset;\n        yPos += documentData.yOffset;\n        yPos += firstLine ? 1 : 0;\n        firstLine = false;\n      }\n\n      shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\n      jLen = shapes.length;\n      matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n\n      if (singleShape) {\n        this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n      }\n\n      commands = createSizedArray(jLen - 1);\n      var commandsCounter = 0;\n\n      for (j = 0; j < jLen; j += 1) {\n        if (shapes[j].ty === 'sh') {\n          kLen = shapes[j].ks.k.i.length;\n          pathNodes = shapes[j].ks.k;\n          pathArr = [];\n\n          for (k = 1; k < kLen; k += 1) {\n            if (k === 1) {\n              pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n            }\n\n            pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToY(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToX(pathNodes.v[k][0], pathNodes.v[k][1], 0), matrixHelper.applyToY(pathNodes.v[k][0], pathNodes.v[k][1], 0));\n          }\n\n          pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToY(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n          commands[commandsCounter] = pathArr;\n          commandsCounter += 1;\n        }\n      }\n\n      if (singleShape) {\n        xPos += letters[i].l;\n        xPos += trackingOffset;\n      }\n\n      if (this.textSpans[cnt]) {\n        this.textSpans[cnt].elem = commands;\n      } else {\n        this.textSpans[cnt] = {\n          elem: commands\n        };\n      }\n\n      cnt += 1;\n    }\n  };\n\n  CVTextElement.prototype.renderInnerContent = function () {\n    this.validateText();\n    var ctx = this.canvasContext;\n    ctx.font = this.values.fValue;\n    this.globalData.renderer.ctxLineCap('butt'); // ctx.lineCap = 'butt';\n\n    this.globalData.renderer.ctxLineJoin('miter'); // ctx.lineJoin = 'miter';\n\n    this.globalData.renderer.ctxMiterLimit(4); // ctx.miterLimit = 4;\n\n    if (!this.data.singleShape) {\n      this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n    }\n\n    var i;\n    var len;\n    var j;\n    var jLen;\n    var k;\n    var kLen;\n    var renderedLetters = this.textAnimator.renderedLetters;\n    var letters = this.textProperty.currentData.l;\n    len = letters.length;\n    var renderedLetter;\n    var lastFill = null;\n    var lastStroke = null;\n    var lastStrokeW = null;\n    var commands;\n    var pathArr;\n    var renderer = this.globalData.renderer;\n\n    for (i = 0; i < len; i += 1) {\n      if (!letters[i].n) {\n        renderedLetter = renderedLetters[i];\n\n        if (renderedLetter) {\n          renderer.save();\n          renderer.ctxTransform(renderedLetter.p);\n          renderer.ctxOpacity(renderedLetter.o);\n        }\n\n        if (this.fill) {\n          if (renderedLetter && renderedLetter.fc) {\n            if (lastFill !== renderedLetter.fc) {\n              renderer.ctxFillStyle(renderedLetter.fc);\n              lastFill = renderedLetter.fc; // ctx.fillStyle = renderedLetter.fc;\n            }\n          } else if (lastFill !== this.values.fill) {\n            lastFill = this.values.fill;\n            renderer.ctxFillStyle(this.values.fill); // ctx.fillStyle = this.values.fill;\n          }\n\n          commands = this.textSpans[i].elem;\n          jLen = commands.length;\n          this.globalData.canvasContext.beginPath();\n\n          for (j = 0; j < jLen; j += 1) {\n            pathArr = commands[j];\n            kLen = pathArr.length;\n            this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n\n            for (k = 2; k < kLen; k += 6) {\n              this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n            }\n          }\n\n          this.globalData.canvasContext.closePath();\n          renderer.ctxFill(); // this.globalData.canvasContext.fill();\n          /// ctx.fillText(this.textSpans[i].val,0,0);\n        }\n\n        if (this.stroke) {\n          if (renderedLetter && renderedLetter.sw) {\n            if (lastStrokeW !== renderedLetter.sw) {\n              lastStrokeW = renderedLetter.sw;\n              renderer.ctxLineWidth(renderedLetter.sw); // ctx.lineWidth = renderedLetter.sw;\n            }\n          } else if (lastStrokeW !== this.values.sWidth) {\n            lastStrokeW = this.values.sWidth;\n            renderer.ctxLineWidth(this.values.sWidth); // ctx.lineWidth = this.values.sWidth;\n          }\n\n          if (renderedLetter && renderedLetter.sc) {\n            if (lastStroke !== renderedLetter.sc) {\n              lastStroke = renderedLetter.sc;\n              renderer.ctxStrokeStyle(renderedLetter.sc); // ctx.strokeStyle = renderedLetter.sc;\n            }\n          } else if (lastStroke !== this.values.stroke) {\n            lastStroke = this.values.stroke;\n            renderer.ctxStrokeStyle(this.values.stroke); // ctx.strokeStyle = this.values.stroke;\n          }\n\n          commands = this.textSpans[i].elem;\n          jLen = commands.length;\n          this.globalData.canvasContext.beginPath();\n\n          for (j = 0; j < jLen; j += 1) {\n            pathArr = commands[j];\n            kLen = pathArr.length;\n            this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n\n            for (k = 2; k < kLen; k += 6) {\n              this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n            }\n          }\n\n          this.globalData.canvasContext.closePath();\n          renderer.ctxStroke(); // this.globalData.canvasContext.stroke();\n          /// ctx.strokeText(letters[i].val,0,0);\n        }\n\n        if (renderedLetter) {\n          this.globalData.renderer.restore();\n        }\n      }\n    }\n  };\n\n  function CVImageElement(data, globalData, comp) {\n    this.assetData = globalData.getAssetData(data.refId);\n    this.img = globalData.imageLoader.getAsset(this.assetData);\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVImageElement);\n  CVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n  CVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\n  CVImageElement.prototype.createContent = function () {\n    if (this.img.width && (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height)) {\n      var canvas = createTag('canvas');\n      canvas.width = this.assetData.w;\n      canvas.height = this.assetData.h;\n      var ctx = canvas.getContext('2d');\n      var imgW = this.img.width;\n      var imgH = this.img.height;\n      var imgRel = imgW / imgH;\n      var canvasRel = this.assetData.w / this.assetData.h;\n      var widthCrop;\n      var heightCrop;\n      var par = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio;\n\n      if (imgRel > canvasRel && par === 'xMidYMid slice' || imgRel < canvasRel && par !== 'xMidYMid slice') {\n        heightCrop = imgH;\n        widthCrop = heightCrop * canvasRel;\n      } else {\n        widthCrop = imgW;\n        heightCrop = widthCrop / canvasRel;\n      }\n\n      ctx.drawImage(this.img, (imgW - widthCrop) / 2, (imgH - heightCrop) / 2, widthCrop, heightCrop, 0, 0, this.assetData.w, this.assetData.h);\n      this.img = canvas;\n    }\n  };\n\n  CVImageElement.prototype.renderInnerContent = function () {\n    this.canvasContext.drawImage(this.img, 0, 0);\n  };\n\n  CVImageElement.prototype.destroy = function () {\n    this.img = null;\n  };\n\n  function CVSolidElement(data, globalData, comp) {\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVSolidElement);\n  CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n  CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\n  CVSolidElement.prototype.renderInnerContent = function () {\n    // var ctx = this.canvasContext;\n    this.globalData.renderer.ctxFillStyle(this.data.sc); // ctx.fillStyle = this.data.sc;\n\n    this.globalData.renderer.ctxFillRect(0, 0, this.data.sw, this.data.sh); // ctx.fillRect(0, 0, this.data.sw, this.data.sh);\n    //\n  };\n\n  function CanvasRendererBase() {}\n\n  extendPrototype([BaseRenderer], CanvasRendererBase);\n\n  CanvasRendererBase.prototype.createShape = function (data) {\n    return new CVShapeElement(data, this.globalData, this);\n  };\n\n  CanvasRendererBase.prototype.createText = function (data) {\n    return new CVTextElement(data, this.globalData, this);\n  };\n\n  CanvasRendererBase.prototype.createImage = function (data) {\n    return new CVImageElement(data, this.globalData, this);\n  };\n\n  CanvasRendererBase.prototype.createSolid = function (data) {\n    return new CVSolidElement(data, this.globalData, this);\n  };\n\n  CanvasRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n\n  CanvasRendererBase.prototype.ctxTransform = function (props) {\n    if (props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0) {\n      return;\n    }\n\n    this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]);\n  };\n\n  CanvasRendererBase.prototype.ctxOpacity = function (op) {\n    this.canvasContext.globalAlpha *= op < 0 ? 0 : op;\n  };\n\n  CanvasRendererBase.prototype.ctxFillStyle = function (value) {\n    this.canvasContext.fillStyle = value;\n  };\n\n  CanvasRendererBase.prototype.ctxStrokeStyle = function (value) {\n    this.canvasContext.strokeStyle = value;\n  };\n\n  CanvasRendererBase.prototype.ctxLineWidth = function (value) {\n    this.canvasContext.lineWidth = value;\n  };\n\n  CanvasRendererBase.prototype.ctxLineCap = function (value) {\n    this.canvasContext.lineCap = value;\n  };\n\n  CanvasRendererBase.prototype.ctxLineJoin = function (value) {\n    this.canvasContext.lineJoin = value;\n  };\n\n  CanvasRendererBase.prototype.ctxMiterLimit = function (value) {\n    this.canvasContext.miterLimit = value;\n  };\n\n  CanvasRendererBase.prototype.ctxFill = function (rule) {\n    this.canvasContext.fill(rule);\n  };\n\n  CanvasRendererBase.prototype.ctxFillRect = function (x, y, w, h) {\n    this.canvasContext.fillRect(x, y, w, h);\n  };\n\n  CanvasRendererBase.prototype.ctxStroke = function () {\n    this.canvasContext.stroke();\n  };\n\n  CanvasRendererBase.prototype.reset = function () {\n    if (!this.renderConfig.clearCanvas) {\n      this.canvasContext.restore();\n      return;\n    }\n\n    this.contextData.reset();\n  };\n\n  CanvasRendererBase.prototype.save = function () {\n    this.canvasContext.save();\n  };\n\n  CanvasRendererBase.prototype.restore = function (actionFlag) {\n    if (!this.renderConfig.clearCanvas) {\n      this.canvasContext.restore();\n      return;\n    }\n\n    if (actionFlag) {\n      this.globalData.blendMode = 'source-over';\n    }\n\n    this.contextData.restore(actionFlag);\n  };\n\n  CanvasRendererBase.prototype.configAnimation = function (animData) {\n    if (this.animationItem.wrapper) {\n      this.animationItem.container = createTag('canvas');\n      var containerStyle = this.animationItem.container.style;\n      containerStyle.width = '100%';\n      containerStyle.height = '100%';\n      var origin = '0px 0px 0px';\n      containerStyle.transformOrigin = origin;\n      containerStyle.mozTransformOrigin = origin;\n      containerStyle.webkitTransformOrigin = origin;\n      containerStyle['-webkit-transform'] = origin;\n      containerStyle.contentVisibility = this.renderConfig.contentVisibility;\n      this.animationItem.wrapper.appendChild(this.animationItem.container);\n      this.canvasContext = this.animationItem.container.getContext('2d');\n\n      if (this.renderConfig.className) {\n        this.animationItem.container.setAttribute('class', this.renderConfig.className);\n      }\n\n      if (this.renderConfig.id) {\n        this.animationItem.container.setAttribute('id', this.renderConfig.id);\n      }\n    } else {\n      this.canvasContext = this.renderConfig.context;\n    }\n\n    this.contextData.setContext(this.canvasContext);\n    this.data = animData;\n    this.layers = animData.layers;\n    this.transformCanvas = {\n      w: animData.w,\n      h: animData.h,\n      sx: 0,\n      sy: 0,\n      tx: 0,\n      ty: 0\n    };\n    this.setupGlobalData(animData, document.body);\n    this.globalData.canvasContext = this.canvasContext;\n    this.globalData.renderer = this;\n    this.globalData.isDashed = false;\n    this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n    this.globalData.transformCanvas = this.transformCanvas;\n    this.elements = createSizedArray(animData.layers.length);\n    this.updateContainerSize();\n  };\n\n  CanvasRendererBase.prototype.updateContainerSize = function (width, height) {\n    this.reset();\n    var elementWidth;\n    var elementHeight;\n\n    if (width) {\n      elementWidth = width;\n      elementHeight = height;\n      this.canvasContext.canvas.width = elementWidth;\n      this.canvasContext.canvas.height = elementHeight;\n    } else {\n      if (this.animationItem.wrapper && this.animationItem.container) {\n        elementWidth = this.animationItem.wrapper.offsetWidth;\n        elementHeight = this.animationItem.wrapper.offsetHeight;\n      } else {\n        elementWidth = this.canvasContext.canvas.width;\n        elementHeight = this.canvasContext.canvas.height;\n      }\n\n      this.canvasContext.canvas.width = elementWidth * this.renderConfig.dpr;\n      this.canvasContext.canvas.height = elementHeight * this.renderConfig.dpr;\n    }\n\n    var elementRel;\n    var animationRel;\n\n    if (this.renderConfig.preserveAspectRatio.indexOf('meet') !== -1 || this.renderConfig.preserveAspectRatio.indexOf('slice') !== -1) {\n      var par = this.renderConfig.preserveAspectRatio.split(' ');\n      var fillType = par[1] || 'meet';\n      var pos = par[0] || 'xMidYMid';\n      var xPos = pos.substr(0, 4);\n      var yPos = pos.substr(4);\n      elementRel = elementWidth / elementHeight;\n      animationRel = this.transformCanvas.w / this.transformCanvas.h;\n\n      if (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice') {\n        this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n        this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n      } else {\n        this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n        this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n      }\n\n      if (xPos === 'xMid' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n        this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2 * this.renderConfig.dpr;\n      } else if (xPos === 'xMax' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n        this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr;\n      } else {\n        this.transformCanvas.tx = 0;\n      }\n\n      if (yPos === 'YMid' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n        this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2 * this.renderConfig.dpr;\n      } else if (yPos === 'YMax' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n        this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) * this.renderConfig.dpr;\n      } else {\n        this.transformCanvas.ty = 0;\n      }\n    } else if (this.renderConfig.preserveAspectRatio === 'none') {\n      this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n      this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n      this.transformCanvas.tx = 0;\n      this.transformCanvas.ty = 0;\n    } else {\n      this.transformCanvas.sx = this.renderConfig.dpr;\n      this.transformCanvas.sy = this.renderConfig.dpr;\n      this.transformCanvas.tx = 0;\n      this.transformCanvas.ty = 0;\n    }\n\n    this.transformCanvas.props = [this.transformCanvas.sx, 0, 0, 0, 0, this.transformCanvas.sy, 0, 0, 0, 0, 1, 0, this.transformCanvas.tx, this.transformCanvas.ty, 0, 1];\n    /* var i, len = this.elements.length;\r\n      for(i=0;i<len;i+=1){\r\n          if(this.elements[i] && this.elements[i].data.ty === 0){\r\n              this.elements[i].resize(this.globalData.transformCanvas);\r\n          }\r\n      } */\n\n    this.ctxTransform(this.transformCanvas.props);\n    this.canvasContext.beginPath();\n    this.canvasContext.rect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n    this.canvasContext.closePath();\n    this.canvasContext.clip();\n    this.renderFrame(this.renderedFrame, true);\n  };\n\n  CanvasRendererBase.prototype.destroy = function () {\n    if (this.renderConfig.clearCanvas && this.animationItem.wrapper) {\n      this.animationItem.wrapper.innerText = '';\n    }\n\n    var i;\n    var len = this.layers ? this.layers.length : 0;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.elements[i] && this.elements[i].destroy) {\n        this.elements[i].destroy();\n      }\n    }\n\n    this.elements.length = 0;\n    this.globalData.canvasContext = null;\n    this.animationItem.container = null;\n    this.destroyed = true;\n  };\n\n  CanvasRendererBase.prototype.renderFrame = function (num, forceRender) {\n    if (this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender || this.destroyed || num === -1) {\n      return;\n    }\n\n    this.renderedFrame = num;\n    this.globalData.frameNum = num - this.animationItem._isFirstFrame;\n    this.globalData.frameId += 1;\n    this.globalData._mdf = !this.renderConfig.clearCanvas || forceRender;\n    this.globalData.projectInterface.currentFrame = num; // console.log('--------');\n    // console.log('NEW: ',num);\n\n    var i;\n    var len = this.layers.length;\n\n    if (!this.completeLayers) {\n      this.checkLayers(num);\n    }\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].prepareFrame(num - this.layers[i].st);\n      }\n    }\n\n    if (this.globalData._mdf) {\n      if (this.renderConfig.clearCanvas === true) {\n        this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n      } else {\n        this.save();\n      }\n\n      for (i = len - 1; i >= 0; i -= 1) {\n        if (this.completeLayers || this.elements[i]) {\n          this.elements[i].renderFrame();\n        }\n      }\n\n      if (this.renderConfig.clearCanvas !== true) {\n        this.restore();\n      }\n    }\n  };\n\n  CanvasRendererBase.prototype.buildItem = function (pos) {\n    var elements = this.elements;\n\n    if (elements[pos] || this.layers[pos].ty === 99) {\n      return;\n    }\n\n    var element = this.createItem(this.layers[pos], this, this.globalData);\n    elements[pos] = element;\n    element.initExpressions();\n    /* if(this.layers[pos].ty === 0){\r\n          element.resize(this.globalData.transformCanvas);\r\n      } */\n  };\n\n  CanvasRendererBase.prototype.checkPendingElements = function () {\n    while (this.pendingElements.length) {\n      var element = this.pendingElements.pop();\n      element.checkParenting();\n    }\n  };\n\n  CanvasRendererBase.prototype.hide = function () {\n    this.animationItem.container.style.display = 'none';\n  };\n\n  CanvasRendererBase.prototype.show = function () {\n    this.animationItem.container.style.display = 'block';\n  };\n\n  function CanvasContext() {\n    this.opacity = -1;\n    this.transform = createTypedArray('float32', 16);\n    this.fillStyle = '';\n    this.strokeStyle = '';\n    this.lineWidth = '';\n    this.lineCap = '';\n    this.lineJoin = '';\n    this.miterLimit = '';\n    this.id = Math.random();\n  }\n\n  function CVContextData() {\n    this.stack = [];\n    this.cArrPos = 0;\n    this.cTr = new Matrix();\n    var i;\n    var len = 15;\n\n    for (i = 0; i < len; i += 1) {\n      var canvasContext = new CanvasContext();\n      this.stack[i] = canvasContext;\n    }\n\n    this._length = len;\n    this.nativeContext = null;\n    this.transformMat = new Matrix();\n    this.currentOpacity = 1; //\n\n    this.currentFillStyle = '';\n    this.appliedFillStyle = ''; //\n\n    this.currentStrokeStyle = '';\n    this.appliedStrokeStyle = ''; //\n\n    this.currentLineWidth = '';\n    this.appliedLineWidth = ''; //\n\n    this.currentLineCap = '';\n    this.appliedLineCap = ''; //\n\n    this.currentLineJoin = '';\n    this.appliedLineJoin = ''; //\n\n    this.appliedMiterLimit = '';\n    this.currentMiterLimit = '';\n  }\n\n  CVContextData.prototype.duplicate = function () {\n    var newLength = this._length * 2;\n    var i = 0;\n\n    for (i = this._length; i < newLength; i += 1) {\n      this.stack[i] = new CanvasContext();\n    }\n\n    this._length = newLength;\n  };\n\n  CVContextData.prototype.reset = function () {\n    this.cArrPos = 0;\n    this.cTr.reset();\n    this.stack[this.cArrPos].opacity = 1;\n  };\n\n  CVContextData.prototype.restore = function (forceRestore) {\n    this.cArrPos -= 1;\n    var currentContext = this.stack[this.cArrPos];\n    var transform = currentContext.transform;\n    var i;\n    var arr = this.cTr.props;\n\n    for (i = 0; i < 16; i += 1) {\n      arr[i] = transform[i];\n    }\n\n    if (forceRestore) {\n      this.nativeContext.restore();\n      var prevStack = this.stack[this.cArrPos + 1];\n      this.appliedFillStyle = prevStack.fillStyle;\n      this.appliedStrokeStyle = prevStack.strokeStyle;\n      this.appliedLineWidth = prevStack.lineWidth;\n      this.appliedLineCap = prevStack.lineCap;\n      this.appliedLineJoin = prevStack.lineJoin;\n      this.appliedMiterLimit = prevStack.miterLimit;\n    }\n\n    this.nativeContext.setTransform(transform[0], transform[1], transform[4], transform[5], transform[12], transform[13]);\n\n    if (forceRestore || currentContext.opacity !== -1 && this.currentOpacity !== currentContext.opacity) {\n      this.nativeContext.globalAlpha = currentContext.opacity;\n      this.currentOpacity = currentContext.opacity;\n    }\n\n    this.currentFillStyle = currentContext.fillStyle;\n    this.currentStrokeStyle = currentContext.strokeStyle;\n    this.currentLineWidth = currentContext.lineWidth;\n    this.currentLineCap = currentContext.lineCap;\n    this.currentLineJoin = currentContext.lineJoin;\n    this.currentMiterLimit = currentContext.miterLimit;\n  };\n\n  CVContextData.prototype.save = function (saveOnNativeFlag) {\n    if (saveOnNativeFlag) {\n      this.nativeContext.save();\n    }\n\n    var props = this.cTr.props;\n\n    if (this._length <= this.cArrPos) {\n      this.duplicate();\n    }\n\n    var currentStack = this.stack[this.cArrPos];\n    var i;\n\n    for (i = 0; i < 16; i += 1) {\n      currentStack.transform[i] = props[i];\n    }\n\n    this.cArrPos += 1;\n    var newStack = this.stack[this.cArrPos];\n    newStack.opacity = currentStack.opacity;\n    newStack.fillStyle = currentStack.fillStyle;\n    newStack.strokeStyle = currentStack.strokeStyle;\n    newStack.lineWidth = currentStack.lineWidth;\n    newStack.lineCap = currentStack.lineCap;\n    newStack.lineJoin = currentStack.lineJoin;\n    newStack.miterLimit = currentStack.miterLimit;\n  };\n\n  CVContextData.prototype.setOpacity = function (value) {\n    this.stack[this.cArrPos].opacity = value;\n  };\n\n  CVContextData.prototype.setContext = function (value) {\n    this.nativeContext = value;\n  };\n\n  CVContextData.prototype.fillStyle = function (value) {\n    if (this.stack[this.cArrPos].fillStyle !== value) {\n      this.currentFillStyle = value;\n      this.stack[this.cArrPos].fillStyle = value;\n    }\n  };\n\n  CVContextData.prototype.strokeStyle = function (value) {\n    if (this.stack[this.cArrPos].strokeStyle !== value) {\n      this.currentStrokeStyle = value;\n      this.stack[this.cArrPos].strokeStyle = value;\n    }\n  };\n\n  CVContextData.prototype.lineWidth = function (value) {\n    if (this.stack[this.cArrPos].lineWidth !== value) {\n      this.currentLineWidth = value;\n      this.stack[this.cArrPos].lineWidth = value;\n    }\n  };\n\n  CVContextData.prototype.lineCap = function (value) {\n    if (this.stack[this.cArrPos].lineCap !== value) {\n      this.currentLineCap = value;\n      this.stack[this.cArrPos].lineCap = value;\n    }\n  };\n\n  CVContextData.prototype.lineJoin = function (value) {\n    if (this.stack[this.cArrPos].lineJoin !== value) {\n      this.currentLineJoin = value;\n      this.stack[this.cArrPos].lineJoin = value;\n    }\n  };\n\n  CVContextData.prototype.miterLimit = function (value) {\n    if (this.stack[this.cArrPos].miterLimit !== value) {\n      this.currentMiterLimit = value;\n      this.stack[this.cArrPos].miterLimit = value;\n    }\n  };\n\n  CVContextData.prototype.transform = function (props) {\n    this.transformMat.cloneFromProps(props); // Taking the last transform value from the stored stack of transforms\n\n    var currentTransform = this.cTr; // Applying the last transform value after the new transform to respect the order of transformations\n\n    this.transformMat.multiply(currentTransform); // Storing the new transformed value in the stored transform\n\n    currentTransform.cloneFromProps(this.transformMat.props);\n    var trProps = currentTransform.props; // Applying the new transform to the canvas\n\n    this.nativeContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]);\n  };\n\n  CVContextData.prototype.opacity = function (op) {\n    var currentOpacity = this.stack[this.cArrPos].opacity;\n    currentOpacity *= op < 0 ? 0 : op;\n\n    if (this.stack[this.cArrPos].opacity !== currentOpacity) {\n      if (this.currentOpacity !== op) {\n        this.nativeContext.globalAlpha = op;\n        this.currentOpacity = op;\n      }\n\n      this.stack[this.cArrPos].opacity = currentOpacity;\n    }\n  };\n\n  CVContextData.prototype.fill = function (rule) {\n    if (this.appliedFillStyle !== this.currentFillStyle) {\n      this.appliedFillStyle = this.currentFillStyle;\n      this.nativeContext.fillStyle = this.appliedFillStyle;\n    }\n\n    this.nativeContext.fill(rule);\n  };\n\n  CVContextData.prototype.fillRect = function (x, y, w, h) {\n    if (this.appliedFillStyle !== this.currentFillStyle) {\n      this.appliedFillStyle = this.currentFillStyle;\n      this.nativeContext.fillStyle = this.appliedFillStyle;\n    }\n\n    this.nativeContext.fillRect(x, y, w, h);\n  };\n\n  CVContextData.prototype.stroke = function () {\n    if (this.appliedStrokeStyle !== this.currentStrokeStyle) {\n      this.appliedStrokeStyle = this.currentStrokeStyle;\n      this.nativeContext.strokeStyle = this.appliedStrokeStyle;\n    }\n\n    if (this.appliedLineWidth !== this.currentLineWidth) {\n      this.appliedLineWidth = this.currentLineWidth;\n      this.nativeContext.lineWidth = this.appliedLineWidth;\n    }\n\n    if (this.appliedLineCap !== this.currentLineCap) {\n      this.appliedLineCap = this.currentLineCap;\n      this.nativeContext.lineCap = this.appliedLineCap;\n    }\n\n    if (this.appliedLineJoin !== this.currentLineJoin) {\n      this.appliedLineJoin = this.currentLineJoin;\n      this.nativeContext.lineJoin = this.appliedLineJoin;\n    }\n\n    if (this.appliedMiterLimit !== this.currentMiterLimit) {\n      this.appliedMiterLimit = this.currentMiterLimit;\n      this.nativeContext.miterLimit = this.appliedMiterLimit;\n    }\n\n    this.nativeContext.stroke();\n  };\n\n  function CVCompElement(data, globalData, comp) {\n    this.completeLayers = false;\n    this.layers = data.layers;\n    this.pendingElements = [];\n    this.elements = createSizedArray(this.layers.length);\n    this.initElement(data, globalData, comp);\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n      _placeholder: true\n    };\n  }\n\n  extendPrototype([CanvasRendererBase, ICompElement, CVBaseElement], CVCompElement);\n\n  CVCompElement.prototype.renderInnerContent = function () {\n    var ctx = this.canvasContext;\n    ctx.beginPath();\n    ctx.moveTo(0, 0);\n    ctx.lineTo(this.data.w, 0);\n    ctx.lineTo(this.data.w, this.data.h);\n    ctx.lineTo(0, this.data.h);\n    ctx.lineTo(0, 0);\n    ctx.clip();\n    var i;\n    var len = this.layers.length;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].renderFrame();\n      }\n    }\n  };\n\n  CVCompElement.prototype.destroy = function () {\n    var i;\n    var len = this.layers.length;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.elements[i]) {\n        this.elements[i].destroy();\n      }\n    }\n\n    this.layers = null;\n    this.elements = null;\n  };\n\n  CVCompElement.prototype.createComp = function (data) {\n    return new CVCompElement(data, this.globalData, this);\n  };\n\n  function CanvasRenderer(animationItem, config) {\n    this.animationItem = animationItem;\n    this.renderConfig = {\n      clearCanvas: config && config.clearCanvas !== undefined ? config.clearCanvas : true,\n      context: config && config.context || null,\n      progressiveLoad: config && config.progressiveLoad || false,\n      preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      contentVisibility: config && config.contentVisibility || 'visible',\n      className: config && config.className || '',\n      id: config && config.id || '',\n      runExpressions: !config || config.runExpressions === undefined || config.runExpressions\n    };\n    this.renderConfig.dpr = config && config.dpr || 1;\n\n    if (this.animationItem.wrapper) {\n      this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1;\n    }\n\n    this.renderedFrame = -1;\n    this.globalData = {\n      frameNum: -1,\n      _mdf: false,\n      renderConfig: this.renderConfig,\n      currentGlobalAlpha: -1\n    };\n    this.contextData = new CVContextData();\n    this.elements = [];\n    this.pendingElements = [];\n    this.transformMat = new Matrix();\n    this.completeLayers = false;\n    this.rendererType = 'canvas';\n\n    if (this.renderConfig.clearCanvas) {\n      this.ctxTransform = this.contextData.transform.bind(this.contextData);\n      this.ctxOpacity = this.contextData.opacity.bind(this.contextData);\n      this.ctxFillStyle = this.contextData.fillStyle.bind(this.contextData);\n      this.ctxStrokeStyle = this.contextData.strokeStyle.bind(this.contextData);\n      this.ctxLineWidth = this.contextData.lineWidth.bind(this.contextData);\n      this.ctxLineCap = this.contextData.lineCap.bind(this.contextData);\n      this.ctxLineJoin = this.contextData.lineJoin.bind(this.contextData);\n      this.ctxMiterLimit = this.contextData.miterLimit.bind(this.contextData);\n      this.ctxFill = this.contextData.fill.bind(this.contextData);\n      this.ctxFillRect = this.contextData.fillRect.bind(this.contextData);\n      this.ctxStroke = this.contextData.stroke.bind(this.contextData);\n      this.save = this.contextData.save.bind(this.contextData);\n    }\n  }\n\n  extendPrototype([CanvasRendererBase], CanvasRenderer);\n\n  CanvasRenderer.prototype.createComp = function (data) {\n    return new CVCompElement(data, this.globalData, this);\n  };\n\n  function HBaseElement() {}\n\n  HBaseElement.prototype = {\n    checkBlendMode: function checkBlendMode() {},\n    initRendererElement: function initRendererElement() {\n      this.baseElement = createTag(this.data.tg || 'div');\n\n      if (this.data.hasMask) {\n        this.svgElement = createNS('svg');\n        this.layerElement = createNS('g');\n        this.maskedElement = this.layerElement;\n        this.svgElement.appendChild(this.layerElement);\n        this.baseElement.appendChild(this.svgElement);\n      } else {\n        this.layerElement = this.baseElement;\n      }\n\n      styleDiv(this.baseElement);\n    },\n    createContainerElements: function createContainerElements() {\n      this.renderableEffectsManager = new CVEffects(this);\n      this.transformedElement = this.baseElement;\n      this.maskedElement = this.layerElement;\n\n      if (this.data.ln) {\n        this.layerElement.setAttribute('id', this.data.ln);\n      }\n\n      if (this.data.cl) {\n        this.layerElement.setAttribute('class', this.data.cl);\n      }\n\n      if (this.data.bm !== 0) {\n        this.setBlendMode();\n      }\n    },\n    renderElement: function renderElement() {\n      var transformedElementStyle = this.transformedElement ? this.transformedElement.style : {};\n\n      if (this.finalTransform._matMdf) {\n        var matrixValue = this.finalTransform.mat.toCSS();\n        transformedElementStyle.transform = matrixValue;\n        transformedElementStyle.webkitTransform = matrixValue;\n      }\n\n      if (this.finalTransform._opMdf) {\n        transformedElementStyle.opacity = this.finalTransform.mProp.o.v;\n      }\n    },\n    renderFrame: function renderFrame() {\n      // If it is exported as hidden (data.hd === true) no need to render\n      // If it is not visible no need to render\n      if (this.data.hd || this.hidden) {\n        return;\n      }\n\n      this.renderTransform();\n      this.renderRenderable();\n      this.renderElement();\n      this.renderInnerContent();\n\n      if (this._isFirstFrame) {\n        this._isFirstFrame = false;\n      }\n    },\n    destroy: function destroy() {\n      this.layerElement = null;\n      this.transformedElement = null;\n\n      if (this.matteElement) {\n        this.matteElement = null;\n      }\n\n      if (this.maskManager) {\n        this.maskManager.destroy();\n        this.maskManager = null;\n      }\n    },\n    createRenderableComponents: function createRenderableComponents() {\n      this.maskManager = new MaskElement(this.data, this, this.globalData);\n    },\n    addEffects: function addEffects() {},\n    setMatte: function setMatte() {}\n  };\n  HBaseElement.prototype.getBaseElement = SVGBaseElement.prototype.getBaseElement;\n  HBaseElement.prototype.destroyBaseElement = HBaseElement.prototype.destroy;\n  HBaseElement.prototype.buildElementParenting = BaseRenderer.prototype.buildElementParenting;\n\n  function HSolidElement(data, globalData, comp) {\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], HSolidElement);\n\n  HSolidElement.prototype.createContent = function () {\n    var rect;\n\n    if (this.data.hasMask) {\n      rect = createNS('rect');\n      rect.setAttribute('width', this.data.sw);\n      rect.setAttribute('height', this.data.sh);\n      rect.setAttribute('fill', this.data.sc);\n      this.svgElement.setAttribute('width', this.data.sw);\n      this.svgElement.setAttribute('height', this.data.sh);\n    } else {\n      rect = createTag('div');\n      rect.style.width = this.data.sw + 'px';\n      rect.style.height = this.data.sh + 'px';\n      rect.style.backgroundColor = this.data.sc;\n    }\n\n    this.layerElement.appendChild(rect);\n  };\n\n  function HShapeElement(data, globalData, comp) {\n    // List of drawable elements\n    this.shapes = []; // Full shape data\n\n    this.shapesData = data.shapes; // List of styles that will be applied to shapes\n\n    this.stylesList = []; // List of modifiers that will be applied to shapes\n\n    this.shapeModifiers = []; // List of items in shape tree\n\n    this.itemsData = []; // List of items in previous shape tree\n\n    this.processedElements = []; // List of animated components\n\n    this.animatedContents = [];\n    this.shapesContainer = createNS('g');\n    this.initElement(data, globalData, comp); // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n    // List of elements that have been created\n\n    this.prevViewData = [];\n    this.currentBBox = {\n      x: 999999,\n      y: -999999,\n      h: 0,\n      w: 0\n    };\n  }\n\n  extendPrototype([BaseElement, TransformElement, HSolidElement, SVGShapeElement, HBaseElement, HierarchyElement, FrameElement, RenderableElement], HShapeElement);\n  HShapeElement.prototype._renderShapeFrame = HShapeElement.prototype.renderInnerContent;\n\n  HShapeElement.prototype.createContent = function () {\n    var cont;\n    this.baseElement.style.fontSize = 0;\n\n    if (this.data.hasMask) {\n      this.layerElement.appendChild(this.shapesContainer);\n      cont = this.svgElement;\n    } else {\n      cont = createNS('svg');\n      var size = this.comp.data ? this.comp.data : this.globalData.compSize;\n      cont.setAttribute('width', size.w);\n      cont.setAttribute('height', size.h);\n      cont.appendChild(this.shapesContainer);\n      this.layerElement.appendChild(cont);\n    }\n\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.shapesContainer, 0, [], true);\n    this.filterUniqueShapes();\n    this.shapeCont = cont;\n  };\n\n  HShapeElement.prototype.getTransformedPoint = function (transformers, point) {\n    var i;\n    var len = transformers.length;\n\n    for (i = 0; i < len; i += 1) {\n      point = transformers[i].mProps.v.applyToPointArray(point[0], point[1], 0);\n    }\n\n    return point;\n  };\n\n  HShapeElement.prototype.calculateShapeBoundingBox = function (item, boundingBox) {\n    var shape = item.sh.v;\n    var transformers = item.transformers;\n    var i;\n    var len = shape._length;\n    var vPoint;\n    var oPoint;\n    var nextIPoint;\n    var nextVPoint;\n\n    if (len <= 1) {\n      return;\n    }\n\n    for (i = 0; i < len - 1; i += 1) {\n      vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n      oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n      nextIPoint = this.getTransformedPoint(transformers, shape.i[i + 1]);\n      nextVPoint = this.getTransformedPoint(transformers, shape.v[i + 1]);\n      this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n    }\n\n    if (shape.c) {\n      vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n      oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n      nextIPoint = this.getTransformedPoint(transformers, shape.i[0]);\n      nextVPoint = this.getTransformedPoint(transformers, shape.v[0]);\n      this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n    }\n  };\n\n  HShapeElement.prototype.checkBounds = function (vPoint, oPoint, nextIPoint, nextVPoint, boundingBox) {\n    this.getBoundsOfCurve(vPoint, oPoint, nextIPoint, nextVPoint);\n    var bounds = this.shapeBoundingBox;\n    boundingBox.x = bmMin(bounds.left, boundingBox.x);\n    boundingBox.xMax = bmMax(bounds.right, boundingBox.xMax);\n    boundingBox.y = bmMin(bounds.top, boundingBox.y);\n    boundingBox.yMax = bmMax(bounds.bottom, boundingBox.yMax);\n  };\n\n  HShapeElement.prototype.shapeBoundingBox = {\n    left: 0,\n    right: 0,\n    top: 0,\n    bottom: 0\n  };\n  HShapeElement.prototype.tempBoundingBox = {\n    x: 0,\n    xMax: 0,\n    y: 0,\n    yMax: 0,\n    width: 0,\n    height: 0\n  };\n\n  HShapeElement.prototype.getBoundsOfCurve = function (p0, p1, p2, p3) {\n    var bounds = [[p0[0], p3[0]], [p0[1], p3[1]]];\n\n    for (var a, b, c, t, b2ac, t1, t2, i = 0; i < 2; ++i) {\n      // eslint-disable-line no-plusplus\n      b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n      a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n      c = 3 * p1[i] - 3 * p0[i];\n      b |= 0; // eslint-disable-line no-bitwise\n\n      a |= 0; // eslint-disable-line no-bitwise\n\n      c |= 0; // eslint-disable-line no-bitwise\n\n      if (a === 0 && b === 0) {//\n      } else if (a === 0) {\n        t = -c / b;\n\n        if (t > 0 && t < 1) {\n          bounds[i].push(this.calculateF(t, p0, p1, p2, p3, i));\n        }\n      } else {\n        b2ac = b * b - 4 * c * a;\n\n        if (b2ac >= 0) {\n          t1 = (-b + bmSqrt(b2ac)) / (2 * a);\n          if (t1 > 0 && t1 < 1) bounds[i].push(this.calculateF(t1, p0, p1, p2, p3, i));\n          t2 = (-b - bmSqrt(b2ac)) / (2 * a);\n          if (t2 > 0 && t2 < 1) bounds[i].push(this.calculateF(t2, p0, p1, p2, p3, i));\n        }\n      }\n    }\n\n    this.shapeBoundingBox.left = bmMin.apply(null, bounds[0]);\n    this.shapeBoundingBox.top = bmMin.apply(null, bounds[1]);\n    this.shapeBoundingBox.right = bmMax.apply(null, bounds[0]);\n    this.shapeBoundingBox.bottom = bmMax.apply(null, bounds[1]);\n  };\n\n  HShapeElement.prototype.calculateF = function (t, p0, p1, p2, p3, i) {\n    return bmPow(1 - t, 3) * p0[i] + 3 * bmPow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * bmPow(t, 2) * p2[i] + bmPow(t, 3) * p3[i];\n  };\n\n  HShapeElement.prototype.calculateBoundingBox = function (itemsData, boundingBox) {\n    var i;\n    var len = itemsData.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (itemsData[i] && itemsData[i].sh) {\n        this.calculateShapeBoundingBox(itemsData[i], boundingBox);\n      } else if (itemsData[i] && itemsData[i].it) {\n        this.calculateBoundingBox(itemsData[i].it, boundingBox);\n      } else if (itemsData[i] && itemsData[i].style && itemsData[i].w) {\n        this.expandStrokeBoundingBox(itemsData[i].w, boundingBox);\n      }\n    }\n  };\n\n  HShapeElement.prototype.expandStrokeBoundingBox = function (widthProperty, boundingBox) {\n    var width = 0;\n\n    if (widthProperty.keyframes) {\n      for (var i = 0; i < widthProperty.keyframes.length; i += 1) {\n        var kfw = widthProperty.keyframes[i].s;\n\n        if (kfw > width) {\n          width = kfw;\n        }\n      }\n\n      width *= widthProperty.mult;\n    } else {\n      width = widthProperty.v * widthProperty.mult;\n    }\n\n    boundingBox.x -= width;\n    boundingBox.xMax += width;\n    boundingBox.y -= width;\n    boundingBox.yMax += width;\n  };\n\n  HShapeElement.prototype.currentBoxContains = function (box) {\n    return this.currentBBox.x <= box.x && this.currentBBox.y <= box.y && this.currentBBox.width + this.currentBBox.x >= box.x + box.width && this.currentBBox.height + this.currentBBox.y >= box.y + box.height;\n  };\n\n  HShapeElement.prototype.renderInnerContent = function () {\n    this._renderShapeFrame();\n\n    if (!this.hidden && (this._isFirstFrame || this._mdf)) {\n      var tempBoundingBox = this.tempBoundingBox;\n      var max = 999999;\n      tempBoundingBox.x = max;\n      tempBoundingBox.xMax = -max;\n      tempBoundingBox.y = max;\n      tempBoundingBox.yMax = -max;\n      this.calculateBoundingBox(this.itemsData, tempBoundingBox);\n      tempBoundingBox.width = tempBoundingBox.xMax < tempBoundingBox.x ? 0 : tempBoundingBox.xMax - tempBoundingBox.x;\n      tempBoundingBox.height = tempBoundingBox.yMax < tempBoundingBox.y ? 0 : tempBoundingBox.yMax - tempBoundingBox.y; // var tempBoundingBox = this.shapeCont.getBBox();\n\n      if (this.currentBoxContains(tempBoundingBox)) {\n        return;\n      }\n\n      var changed = false;\n\n      if (this.currentBBox.w !== tempBoundingBox.width) {\n        this.currentBBox.w = tempBoundingBox.width;\n        this.shapeCont.setAttribute('width', tempBoundingBox.width);\n        changed = true;\n      }\n\n      if (this.currentBBox.h !== tempBoundingBox.height) {\n        this.currentBBox.h = tempBoundingBox.height;\n        this.shapeCont.setAttribute('height', tempBoundingBox.height);\n        changed = true;\n      }\n\n      if (changed || this.currentBBox.x !== tempBoundingBox.x || this.currentBBox.y !== tempBoundingBox.y) {\n        this.currentBBox.w = tempBoundingBox.width;\n        this.currentBBox.h = tempBoundingBox.height;\n        this.currentBBox.x = tempBoundingBox.x;\n        this.currentBBox.y = tempBoundingBox.y;\n        this.shapeCont.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n        var shapeStyle = this.shapeCont.style;\n        var shapeTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n        shapeStyle.transform = shapeTransform;\n        shapeStyle.webkitTransform = shapeTransform;\n      }\n    }\n  };\n\n  function HTextElement(data, globalData, comp) {\n    this.textSpans = [];\n    this.textPaths = [];\n    this.currentBBox = {\n      x: 999999,\n      y: -999999,\n      h: 0,\n      w: 0\n    };\n    this.renderType = 'svg';\n    this.isMasked = false;\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], HTextElement);\n\n  HTextElement.prototype.createContent = function () {\n    this.isMasked = this.checkMasks();\n\n    if (this.isMasked) {\n      this.renderType = 'svg';\n      this.compW = this.comp.data.w;\n      this.compH = this.comp.data.h;\n      this.svgElement.setAttribute('width', this.compW);\n      this.svgElement.setAttribute('height', this.compH);\n      var g = createNS('g');\n      this.maskedElement.appendChild(g);\n      this.innerElem = g;\n    } else {\n      this.renderType = 'html';\n      this.innerElem = this.layerElement;\n    }\n\n    this.checkParenting();\n  };\n\n  HTextElement.prototype.buildNewText = function () {\n    var documentData = this.textProperty.currentData;\n    this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n    var innerElemStyle = this.innerElem.style;\n    var textColor = documentData.fc ? this.buildColor(documentData.fc) : 'rgba(0,0,0,0)';\n    innerElemStyle.fill = textColor;\n    innerElemStyle.color = textColor;\n\n    if (documentData.sc) {\n      innerElemStyle.stroke = this.buildColor(documentData.sc);\n      innerElemStyle.strokeWidth = documentData.sw + 'px';\n    }\n\n    var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n    if (!this.globalData.fontManager.chars) {\n      innerElemStyle.fontSize = documentData.finalSize + 'px';\n      innerElemStyle.lineHeight = documentData.finalSize + 'px';\n\n      if (fontData.fClass) {\n        this.innerElem.className = fontData.fClass;\n      } else {\n        innerElemStyle.fontFamily = fontData.fFamily;\n        var fWeight = documentData.fWeight;\n        var fStyle = documentData.fStyle;\n        innerElemStyle.fontStyle = fStyle;\n        innerElemStyle.fontWeight = fWeight;\n      }\n    }\n\n    var i;\n    var len;\n    var letters = documentData.l;\n    len = letters.length;\n    var tSpan;\n    var tParent;\n    var tCont;\n    var matrixHelper = this.mHelper;\n    var shapes;\n    var shapeStr = '';\n    var cnt = 0;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.globalData.fontManager.chars) {\n        if (!this.textPaths[cnt]) {\n          tSpan = createNS('path');\n          tSpan.setAttribute('stroke-linecap', lineCapEnum[1]);\n          tSpan.setAttribute('stroke-linejoin', lineJoinEnum[2]);\n          tSpan.setAttribute('stroke-miterlimit', '4');\n        } else {\n          tSpan = this.textPaths[cnt];\n        }\n\n        if (!this.isMasked) {\n          if (this.textSpans[cnt]) {\n            tParent = this.textSpans[cnt];\n            tCont = tParent.children[0];\n          } else {\n            tParent = createTag('div');\n            tParent.style.lineHeight = 0;\n            tCont = createNS('svg');\n            tCont.appendChild(tSpan);\n            styleDiv(tParent);\n          }\n        }\n      } else if (!this.isMasked) {\n        if (this.textSpans[cnt]) {\n          tParent = this.textSpans[cnt];\n          tSpan = this.textPaths[cnt];\n        } else {\n          tParent = createTag('span');\n          styleDiv(tParent);\n          tSpan = createTag('span');\n          styleDiv(tSpan);\n          tParent.appendChild(tSpan);\n        }\n      } else {\n        tSpan = this.textPaths[cnt] ? this.textPaths[cnt] : createNS('text');\n      } // tSpan.setAttribute('visibility', 'hidden');\n\n\n      if (this.globalData.fontManager.chars) {\n        var charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n        var shapeData;\n\n        if (charData) {\n          shapeData = charData.data;\n        } else {\n          shapeData = null;\n        }\n\n        matrixHelper.reset();\n\n        if (shapeData && shapeData.shapes && shapeData.shapes.length) {\n          shapes = shapeData.shapes[0].it;\n          matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n          shapeStr = this.createPathShape(matrixHelper, shapes);\n          tSpan.setAttribute('d', shapeStr);\n        }\n\n        if (!this.isMasked) {\n          this.innerElem.appendChild(tParent);\n\n          if (shapeData && shapeData.shapes) {\n            // document.body.appendChild is needed to get exact measure of shape\n            document.body.appendChild(tCont);\n            var boundingBox = tCont.getBBox();\n            tCont.setAttribute('width', boundingBox.width + 2);\n            tCont.setAttribute('height', boundingBox.height + 2);\n            tCont.setAttribute('viewBox', boundingBox.x - 1 + ' ' + (boundingBox.y - 1) + ' ' + (boundingBox.width + 2) + ' ' + (boundingBox.height + 2));\n            var tContStyle = tCont.style;\n            var tContTranslation = 'translate(' + (boundingBox.x - 1) + 'px,' + (boundingBox.y - 1) + 'px)';\n            tContStyle.transform = tContTranslation;\n            tContStyle.webkitTransform = tContTranslation;\n            letters[i].yOffset = boundingBox.y - 1;\n          } else {\n            tCont.setAttribute('width', 1);\n            tCont.setAttribute('height', 1);\n          }\n\n          tParent.appendChild(tCont);\n        } else {\n          this.innerElem.appendChild(tSpan);\n        }\n      } else {\n        tSpan.textContent = letters[i].val;\n        tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n\n        if (!this.isMasked) {\n          this.innerElem.appendChild(tParent); //\n\n          var tStyle = tSpan.style;\n          var tSpanTranslation = 'translate3d(0,' + -documentData.finalSize / 1.2 + 'px,0)';\n          tStyle.transform = tSpanTranslation;\n          tStyle.webkitTransform = tSpanTranslation;\n        } else {\n          this.innerElem.appendChild(tSpan);\n        }\n      } //\n\n\n      if (!this.isMasked) {\n        this.textSpans[cnt] = tParent;\n      } else {\n        this.textSpans[cnt] = tSpan;\n      }\n\n      this.textSpans[cnt].style.display = 'block';\n      this.textPaths[cnt] = tSpan;\n      cnt += 1;\n    }\n\n    while (cnt < this.textSpans.length) {\n      this.textSpans[cnt].style.display = 'none';\n      cnt += 1;\n    }\n  };\n\n  HTextElement.prototype.renderInnerContent = function () {\n    this.validateText();\n    var svgStyle;\n\n    if (this.data.singleShape) {\n      if (!this._isFirstFrame && !this.lettersChangedFlag) {\n        return;\n      }\n\n      if (this.isMasked && this.finalTransform._matMdf) {\n        // Todo Benchmark if using this is better than getBBox\n        this.svgElement.setAttribute('viewBox', -this.finalTransform.mProp.p.v[0] + ' ' + -this.finalTransform.mProp.p.v[1] + ' ' + this.compW + ' ' + this.compH);\n        svgStyle = this.svgElement.style;\n        var translation = 'translate(' + -this.finalTransform.mProp.p.v[0] + 'px,' + -this.finalTransform.mProp.p.v[1] + 'px)';\n        svgStyle.transform = translation;\n        svgStyle.webkitTransform = translation;\n      }\n    }\n\n    this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n    if (!this.lettersChangedFlag && !this.textAnimator.lettersChangedFlag) {\n      return;\n    }\n\n    var i;\n    var len;\n    var count = 0;\n    var renderedLetters = this.textAnimator.renderedLetters;\n    var letters = this.textProperty.currentData.l;\n    len = letters.length;\n    var renderedLetter;\n    var textSpan;\n    var textPath;\n\n    for (i = 0; i < len; i += 1) {\n      if (letters[i].n) {\n        count += 1;\n      } else {\n        textSpan = this.textSpans[i];\n        textPath = this.textPaths[i];\n        renderedLetter = renderedLetters[count];\n        count += 1;\n\n        if (renderedLetter._mdf.m) {\n          if (!this.isMasked) {\n            textSpan.style.webkitTransform = renderedLetter.m;\n            textSpan.style.transform = renderedLetter.m;\n          } else {\n            textSpan.setAttribute('transform', renderedLetter.m);\n          }\n        } /// /textSpan.setAttribute('opacity',renderedLetter.o);\n\n\n        textSpan.style.opacity = renderedLetter.o;\n\n        if (renderedLetter.sw && renderedLetter._mdf.sw) {\n          textPath.setAttribute('stroke-width', renderedLetter.sw);\n        }\n\n        if (renderedLetter.sc && renderedLetter._mdf.sc) {\n          textPath.setAttribute('stroke', renderedLetter.sc);\n        }\n\n        if (renderedLetter.fc && renderedLetter._mdf.fc) {\n          textPath.setAttribute('fill', renderedLetter.fc);\n          textPath.style.color = renderedLetter.fc;\n        }\n      }\n    }\n\n    if (this.innerElem.getBBox && !this.hidden && (this._isFirstFrame || this._mdf)) {\n      var boundingBox = this.innerElem.getBBox();\n\n      if (this.currentBBox.w !== boundingBox.width) {\n        this.currentBBox.w = boundingBox.width;\n        this.svgElement.setAttribute('width', boundingBox.width);\n      }\n\n      if (this.currentBBox.h !== boundingBox.height) {\n        this.currentBBox.h = boundingBox.height;\n        this.svgElement.setAttribute('height', boundingBox.height);\n      }\n\n      var margin = 1;\n\n      if (this.currentBBox.w !== boundingBox.width + margin * 2 || this.currentBBox.h !== boundingBox.height + margin * 2 || this.currentBBox.x !== boundingBox.x - margin || this.currentBBox.y !== boundingBox.y - margin) {\n        this.currentBBox.w = boundingBox.width + margin * 2;\n        this.currentBBox.h = boundingBox.height + margin * 2;\n        this.currentBBox.x = boundingBox.x - margin;\n        this.currentBBox.y = boundingBox.y - margin;\n        this.svgElement.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n        svgStyle = this.svgElement.style;\n        var svgTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n        svgStyle.transform = svgTransform;\n        svgStyle.webkitTransform = svgTransform;\n      }\n    }\n  };\n\n  function HCameraElement(data, globalData, comp) {\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.initHierarchy();\n    var getProp = PropertyFactory.getProp;\n    this.pe = getProp(this, data.pe, 0, 0, this);\n\n    if (data.ks.p.s) {\n      this.px = getProp(this, data.ks.p.x, 1, 0, this);\n      this.py = getProp(this, data.ks.p.y, 1, 0, this);\n      this.pz = getProp(this, data.ks.p.z, 1, 0, this);\n    } else {\n      this.p = getProp(this, data.ks.p, 1, 0, this);\n    }\n\n    if (data.ks.a) {\n      this.a = getProp(this, data.ks.a, 1, 0, this);\n    }\n\n    if (data.ks.or.k.length && data.ks.or.k[0].to) {\n      var i;\n      var len = data.ks.or.k.length;\n\n      for (i = 0; i < len; i += 1) {\n        data.ks.or.k[i].to = null;\n        data.ks.or.k[i].ti = null;\n      }\n    }\n\n    this.or = getProp(this, data.ks.or, 1, degToRads, this);\n    this.or.sh = true;\n    this.rx = getProp(this, data.ks.rx, 0, degToRads, this);\n    this.ry = getProp(this, data.ks.ry, 0, degToRads, this);\n    this.rz = getProp(this, data.ks.rz, 0, degToRads, this);\n    this.mat = new Matrix();\n    this._prevMat = new Matrix();\n    this._isFirstFrame = true; // TODO: find a better way to make the HCamera element to be compatible with the LayerInterface and TransformInterface.\n\n    this.finalTransform = {\n      mProp: this\n    };\n  }\n\n  extendPrototype([BaseElement, FrameElement, HierarchyElement], HCameraElement);\n\n  HCameraElement.prototype.setup = function () {\n    var i;\n    var len = this.comp.threeDElements.length;\n    var comp;\n    var perspectiveStyle;\n    var containerStyle;\n\n    for (i = 0; i < len; i += 1) {\n      // [perspectiveElem,container]\n      comp = this.comp.threeDElements[i];\n\n      if (comp.type === '3d') {\n        perspectiveStyle = comp.perspectiveElem.style;\n        containerStyle = comp.container.style;\n        var perspective = this.pe.v + 'px';\n        var origin = '0px 0px 0px';\n        var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n        perspectiveStyle.perspective = perspective;\n        perspectiveStyle.webkitPerspective = perspective;\n        containerStyle.transformOrigin = origin;\n        containerStyle.mozTransformOrigin = origin;\n        containerStyle.webkitTransformOrigin = origin;\n        perspectiveStyle.transform = matrix;\n        perspectiveStyle.webkitTransform = matrix;\n      }\n    }\n  };\n\n  HCameraElement.prototype.createElements = function () {};\n\n  HCameraElement.prototype.hide = function () {};\n\n  HCameraElement.prototype.renderFrame = function () {\n    var _mdf = this._isFirstFrame;\n    var i;\n    var len;\n\n    if (this.hierarchy) {\n      len = this.hierarchy.length;\n\n      for (i = 0; i < len; i += 1) {\n        _mdf = this.hierarchy[i].finalTransform.mProp._mdf || _mdf;\n      }\n    }\n\n    if (_mdf || this.pe._mdf || this.p && this.p._mdf || this.px && (this.px._mdf || this.py._mdf || this.pz._mdf) || this.rx._mdf || this.ry._mdf || this.rz._mdf || this.or._mdf || this.a && this.a._mdf) {\n      this.mat.reset();\n\n      if (this.hierarchy) {\n        len = this.hierarchy.length - 1;\n\n        for (i = len; i >= 0; i -= 1) {\n          var mTransf = this.hierarchy[i].finalTransform.mProp;\n          this.mat.translate(-mTransf.p.v[0], -mTransf.p.v[1], mTransf.p.v[2]);\n          this.mat.rotateX(-mTransf.or.v[0]).rotateY(-mTransf.or.v[1]).rotateZ(mTransf.or.v[2]);\n          this.mat.rotateX(-mTransf.rx.v).rotateY(-mTransf.ry.v).rotateZ(mTransf.rz.v);\n          this.mat.scale(1 / mTransf.s.v[0], 1 / mTransf.s.v[1], 1 / mTransf.s.v[2]);\n          this.mat.translate(mTransf.a.v[0], mTransf.a.v[1], mTransf.a.v[2]);\n        }\n      }\n\n      if (this.p) {\n        this.mat.translate(-this.p.v[0], -this.p.v[1], this.p.v[2]);\n      } else {\n        this.mat.translate(-this.px.v, -this.py.v, this.pz.v);\n      }\n\n      if (this.a) {\n        var diffVector;\n\n        if (this.p) {\n          diffVector = [this.p.v[0] - this.a.v[0], this.p.v[1] - this.a.v[1], this.p.v[2] - this.a.v[2]];\n        } else {\n          diffVector = [this.px.v - this.a.v[0], this.py.v - this.a.v[1], this.pz.v - this.a.v[2]];\n        }\n\n        var mag = Math.sqrt(Math.pow(diffVector[0], 2) + Math.pow(diffVector[1], 2) + Math.pow(diffVector[2], 2)); // var lookDir = getNormalizedPoint(getDiffVector(this.a.v,this.p.v));\n\n        var lookDir = [diffVector[0] / mag, diffVector[1] / mag, diffVector[2] / mag];\n        var lookLengthOnXZ = Math.sqrt(lookDir[2] * lookDir[2] + lookDir[0] * lookDir[0]);\n        var mRotationX = Math.atan2(lookDir[1], lookLengthOnXZ);\n        var mRotationY = Math.atan2(lookDir[0], -lookDir[2]);\n        this.mat.rotateY(mRotationY).rotateX(-mRotationX);\n      }\n\n      this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v);\n      this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]);\n      this.mat.translate(this.globalData.compSize.w / 2, this.globalData.compSize.h / 2, 0);\n      this.mat.translate(0, 0, this.pe.v);\n      var hasMatrixChanged = !this._prevMat.equals(this.mat);\n\n      if ((hasMatrixChanged || this.pe._mdf) && this.comp.threeDElements) {\n        len = this.comp.threeDElements.length;\n        var comp;\n        var perspectiveStyle;\n        var containerStyle;\n\n        for (i = 0; i < len; i += 1) {\n          comp = this.comp.threeDElements[i];\n\n          if (comp.type === '3d') {\n            if (hasMatrixChanged) {\n              var matValue = this.mat.toCSS();\n              containerStyle = comp.container.style;\n              containerStyle.transform = matValue;\n              containerStyle.webkitTransform = matValue;\n            }\n\n            if (this.pe._mdf) {\n              perspectiveStyle = comp.perspectiveElem.style;\n              perspectiveStyle.perspective = this.pe.v + 'px';\n              perspectiveStyle.webkitPerspective = this.pe.v + 'px';\n            }\n          }\n        }\n\n        this.mat.clone(this._prevMat);\n      }\n    }\n\n    this._isFirstFrame = false;\n  };\n\n  HCameraElement.prototype.prepareFrame = function (num) {\n    this.prepareProperties(num, true);\n  };\n\n  HCameraElement.prototype.destroy = function () {};\n\n  HCameraElement.prototype.getBaseElement = function () {\n    return null;\n  };\n\n  function HImageElement(data, globalData, comp) {\n    this.assetData = globalData.getAssetData(data.refId);\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, HBaseElement, HSolidElement, HierarchyElement, FrameElement, RenderableElement], HImageElement);\n\n  HImageElement.prototype.createContent = function () {\n    var assetPath = this.globalData.getAssetsPath(this.assetData);\n    var img = new Image();\n\n    if (this.data.hasMask) {\n      this.imageElem = createNS('image');\n      this.imageElem.setAttribute('width', this.assetData.w + 'px');\n      this.imageElem.setAttribute('height', this.assetData.h + 'px');\n      this.imageElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n      this.layerElement.appendChild(this.imageElem);\n      this.baseElement.setAttribute('width', this.assetData.w);\n      this.baseElement.setAttribute('height', this.assetData.h);\n    } else {\n      this.layerElement.appendChild(img);\n    }\n\n    img.crossOrigin = 'anonymous';\n    img.src = assetPath;\n\n    if (this.data.ln) {\n      this.baseElement.setAttribute('id', this.data.ln);\n    }\n  };\n\n  function HybridRendererBase(animationItem, config) {\n    this.animationItem = animationItem;\n    this.layers = null;\n    this.renderedFrame = -1;\n    this.renderConfig = {\n      className: config && config.className || '',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      hideOnTransparent: !(config && config.hideOnTransparent === false),\n      filterSize: {\n        width: config && config.filterSize && config.filterSize.width || '400%',\n        height: config && config.filterSize && config.filterSize.height || '400%',\n        x: config && config.filterSize && config.filterSize.x || '-100%',\n        y: config && config.filterSize && config.filterSize.y || '-100%'\n      }\n    };\n    this.globalData = {\n      _mdf: false,\n      frameNum: -1,\n      renderConfig: this.renderConfig\n    };\n    this.pendingElements = [];\n    this.elements = [];\n    this.threeDElements = [];\n    this.destroyed = false;\n    this.camera = null;\n    this.supports3d = true;\n    this.rendererType = 'html';\n  }\n\n  extendPrototype([BaseRenderer], HybridRendererBase);\n  HybridRendererBase.prototype.buildItem = SVGRenderer.prototype.buildItem;\n\n  HybridRendererBase.prototype.checkPendingElements = function () {\n    while (this.pendingElements.length) {\n      var element = this.pendingElements.pop();\n      element.checkParenting();\n    }\n  };\n\n  HybridRendererBase.prototype.appendElementInPos = function (element, pos) {\n    var newDOMElement = element.getBaseElement();\n\n    if (!newDOMElement) {\n      return;\n    }\n\n    var layer = this.layers[pos];\n\n    if (!layer.ddd || !this.supports3d) {\n      if (this.threeDElements) {\n        this.addTo3dContainer(newDOMElement, pos);\n      } else {\n        var i = 0;\n        var nextDOMElement;\n        var nextLayer;\n        var tmpDOMElement;\n\n        while (i < pos) {\n          if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement) {\n            nextLayer = this.elements[i];\n            tmpDOMElement = this.layers[i].ddd ? this.getThreeDContainerByPos(i) : nextLayer.getBaseElement();\n            nextDOMElement = tmpDOMElement || nextDOMElement;\n          }\n\n          i += 1;\n        }\n\n        if (nextDOMElement) {\n          if (!layer.ddd || !this.supports3d) {\n            this.layerElement.insertBefore(newDOMElement, nextDOMElement);\n          }\n        } else if (!layer.ddd || !this.supports3d) {\n          this.layerElement.appendChild(newDOMElement);\n        }\n      }\n    } else {\n      this.addTo3dContainer(newDOMElement, pos);\n    }\n  };\n\n  HybridRendererBase.prototype.createShape = function (data) {\n    if (!this.supports3d) {\n      return new SVGShapeElement(data, this.globalData, this);\n    }\n\n    return new HShapeElement(data, this.globalData, this);\n  };\n\n  HybridRendererBase.prototype.createText = function (data) {\n    if (!this.supports3d) {\n      return new SVGTextLottieElement(data, this.globalData, this);\n    }\n\n    return new HTextElement(data, this.globalData, this);\n  };\n\n  HybridRendererBase.prototype.createCamera = function (data) {\n    this.camera = new HCameraElement(data, this.globalData, this);\n    return this.camera;\n  };\n\n  HybridRendererBase.prototype.createImage = function (data) {\n    if (!this.supports3d) {\n      return new IImageElement(data, this.globalData, this);\n    }\n\n    return new HImageElement(data, this.globalData, this);\n  };\n\n  HybridRendererBase.prototype.createSolid = function (data) {\n    if (!this.supports3d) {\n      return new ISolidElement(data, this.globalData, this);\n    }\n\n    return new HSolidElement(data, this.globalData, this);\n  };\n\n  HybridRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n\n  HybridRendererBase.prototype.getThreeDContainerByPos = function (pos) {\n    var i = 0;\n    var len = this.threeDElements.length;\n\n    while (i < len) {\n      if (this.threeDElements[i].startPos <= pos && this.threeDElements[i].endPos >= pos) {\n        return this.threeDElements[i].perspectiveElem;\n      }\n\n      i += 1;\n    }\n\n    return null;\n  };\n\n  HybridRendererBase.prototype.createThreeDContainer = function (pos, type) {\n    var perspectiveElem = createTag('div');\n    var style;\n    var containerStyle;\n    styleDiv(perspectiveElem);\n    var container = createTag('div');\n    styleDiv(container);\n\n    if (type === '3d') {\n      style = perspectiveElem.style;\n      style.width = this.globalData.compSize.w + 'px';\n      style.height = this.globalData.compSize.h + 'px';\n      var center = '50% 50%';\n      style.webkitTransformOrigin = center;\n      style.mozTransformOrigin = center;\n      style.transformOrigin = center;\n      containerStyle = container.style;\n      var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n      containerStyle.transform = matrix;\n      containerStyle.webkitTransform = matrix;\n    }\n\n    perspectiveElem.appendChild(container); // this.resizerElem.appendChild(perspectiveElem);\n\n    var threeDContainerData = {\n      container: container,\n      perspectiveElem: perspectiveElem,\n      startPos: pos,\n      endPos: pos,\n      type: type\n    };\n    this.threeDElements.push(threeDContainerData);\n    return threeDContainerData;\n  };\n\n  HybridRendererBase.prototype.build3dContainers = function () {\n    var i;\n    var len = this.layers.length;\n    var lastThreeDContainerData;\n    var currentContainer = '';\n\n    for (i = 0; i < len; i += 1) {\n      if (this.layers[i].ddd && this.layers[i].ty !== 3) {\n        if (currentContainer !== '3d') {\n          currentContainer = '3d';\n          lastThreeDContainerData = this.createThreeDContainer(i, '3d');\n        }\n\n        lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n      } else {\n        if (currentContainer !== '2d') {\n          currentContainer = '2d';\n          lastThreeDContainerData = this.createThreeDContainer(i, '2d');\n        }\n\n        lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n      }\n    }\n\n    len = this.threeDElements.length;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      this.resizerElem.appendChild(this.threeDElements[i].perspectiveElem);\n    }\n  };\n\n  HybridRendererBase.prototype.addTo3dContainer = function (elem, pos) {\n    var i = 0;\n    var len = this.threeDElements.length;\n\n    while (i < len) {\n      if (pos <= this.threeDElements[i].endPos) {\n        var j = this.threeDElements[i].startPos;\n        var nextElement;\n\n        while (j < pos) {\n          if (this.elements[j] && this.elements[j].getBaseElement) {\n            nextElement = this.elements[j].getBaseElement();\n          }\n\n          j += 1;\n        }\n\n        if (nextElement) {\n          this.threeDElements[i].container.insertBefore(elem, nextElement);\n        } else {\n          this.threeDElements[i].container.appendChild(elem);\n        }\n\n        break;\n      }\n\n      i += 1;\n    }\n  };\n\n  HybridRendererBase.prototype.configAnimation = function (animData) {\n    var resizerElem = createTag('div');\n    var wrapper = this.animationItem.wrapper;\n    var style = resizerElem.style;\n    style.width = animData.w + 'px';\n    style.height = animData.h + 'px';\n    this.resizerElem = resizerElem;\n    styleDiv(resizerElem);\n    style.transformStyle = 'flat';\n    style.mozTransformStyle = 'flat';\n    style.webkitTransformStyle = 'flat';\n\n    if (this.renderConfig.className) {\n      resizerElem.setAttribute('class', this.renderConfig.className);\n    }\n\n    wrapper.appendChild(resizerElem);\n    style.overflow = 'hidden';\n    var svg = createNS('svg');\n    svg.setAttribute('width', '1');\n    svg.setAttribute('height', '1');\n    styleDiv(svg);\n    this.resizerElem.appendChild(svg);\n    var defs = createNS('defs');\n    svg.appendChild(defs);\n    this.data = animData; // Mask animation\n\n    this.setupGlobalData(animData, svg);\n    this.globalData.defs = defs;\n    this.layers = animData.layers;\n    this.layerElement = this.resizerElem;\n    this.build3dContainers();\n    this.updateContainerSize();\n  };\n\n  HybridRendererBase.prototype.destroy = function () {\n    if (this.animationItem.wrapper) {\n      this.animationItem.wrapper.innerText = '';\n    }\n\n    this.animationItem.container = null;\n    this.globalData.defs = null;\n    var i;\n    var len = this.layers ? this.layers.length : 0;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.elements[i] && this.elements[i].destroy) {\n        this.elements[i].destroy();\n      }\n    }\n\n    this.elements.length = 0;\n    this.destroyed = true;\n    this.animationItem = null;\n  };\n\n  HybridRendererBase.prototype.updateContainerSize = function () {\n    var elementWidth = this.animationItem.wrapper.offsetWidth;\n    var elementHeight = this.animationItem.wrapper.offsetHeight;\n    var elementRel = elementWidth / elementHeight;\n    var animationRel = this.globalData.compSize.w / this.globalData.compSize.h;\n    var sx;\n    var sy;\n    var tx;\n    var ty;\n\n    if (animationRel > elementRel) {\n      sx = elementWidth / this.globalData.compSize.w;\n      sy = elementWidth / this.globalData.compSize.w;\n      tx = 0;\n      ty = (elementHeight - this.globalData.compSize.h * (elementWidth / this.globalData.compSize.w)) / 2;\n    } else {\n      sx = elementHeight / this.globalData.compSize.h;\n      sy = elementHeight / this.globalData.compSize.h;\n      tx = (elementWidth - this.globalData.compSize.w * (elementHeight / this.globalData.compSize.h)) / 2;\n      ty = 0;\n    }\n\n    var style = this.resizerElem.style;\n    style.webkitTransform = 'matrix3d(' + sx + ',0,0,0,0,' + sy + ',0,0,0,0,1,0,' + tx + ',' + ty + ',0,1)';\n    style.transform = style.webkitTransform;\n  };\n\n  HybridRendererBase.prototype.renderFrame = SVGRenderer.prototype.renderFrame;\n\n  HybridRendererBase.prototype.hide = function () {\n    this.resizerElem.style.display = 'none';\n  };\n\n  HybridRendererBase.prototype.show = function () {\n    this.resizerElem.style.display = 'block';\n  };\n\n  HybridRendererBase.prototype.initItems = function () {\n    this.buildAllItems();\n\n    if (this.camera) {\n      this.camera.setup();\n    } else {\n      var cWidth = this.globalData.compSize.w;\n      var cHeight = this.globalData.compSize.h;\n      var i;\n      var len = this.threeDElements.length;\n\n      for (i = 0; i < len; i += 1) {\n        var style = this.threeDElements[i].perspectiveElem.style;\n        style.webkitPerspective = Math.sqrt(Math.pow(cWidth, 2) + Math.pow(cHeight, 2)) + 'px';\n        style.perspective = style.webkitPerspective;\n      }\n    }\n  };\n\n  HybridRendererBase.prototype.searchExtraCompositions = function (assets) {\n    var i;\n    var len = assets.length;\n    var floatingContainer = createTag('div');\n\n    for (i = 0; i < len; i += 1) {\n      if (assets[i].xt) {\n        var comp = this.createComp(assets[i], floatingContainer, this.globalData.comp, null);\n        comp.initExpressions();\n        this.globalData.projectInterface.registerComposition(comp);\n      }\n    }\n  };\n\n  function HCompElement(data, globalData, comp) {\n    this.layers = data.layers;\n    this.supports3d = !data.hasMask;\n    this.completeLayers = false;\n    this.pendingElements = [];\n    this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n    this.initElement(data, globalData, comp);\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n      _placeholder: true\n    };\n  }\n\n  extendPrototype([HybridRendererBase, ICompElement, HBaseElement], HCompElement);\n  HCompElement.prototype._createBaseContainerElements = HCompElement.prototype.createContainerElements;\n\n  HCompElement.prototype.createContainerElements = function () {\n    this._createBaseContainerElements(); // divElement.style.clip = 'rect(0px, '+this.data.w+'px, '+this.data.h+'px, 0px)';\n\n\n    if (this.data.hasMask) {\n      this.svgElement.setAttribute('width', this.data.w);\n      this.svgElement.setAttribute('height', this.data.h);\n      this.transformedElement = this.baseElement;\n    } else {\n      this.transformedElement = this.layerElement;\n    }\n  };\n\n  HCompElement.prototype.addTo3dContainer = function (elem, pos) {\n    var j = 0;\n    var nextElement;\n\n    while (j < pos) {\n      if (this.elements[j] && this.elements[j].getBaseElement) {\n        nextElement = this.elements[j].getBaseElement();\n      }\n\n      j += 1;\n    }\n\n    if (nextElement) {\n      this.layerElement.insertBefore(elem, nextElement);\n    } else {\n      this.layerElement.appendChild(elem);\n    }\n  };\n\n  HCompElement.prototype.createComp = function (data) {\n    if (!this.supports3d) {\n      return new SVGCompElement(data, this.globalData, this);\n    }\n\n    return new HCompElement(data, this.globalData, this);\n  };\n\n  function HybridRenderer(animationItem, config) {\n    this.animationItem = animationItem;\n    this.layers = null;\n    this.renderedFrame = -1;\n    this.renderConfig = {\n      className: config && config.className || '',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      hideOnTransparent: !(config && config.hideOnTransparent === false),\n      filterSize: {\n        width: config && config.filterSize && config.filterSize.width || '400%',\n        height: config && config.filterSize && config.filterSize.height || '400%',\n        x: config && config.filterSize && config.filterSize.x || '-100%',\n        y: config && config.filterSize && config.filterSize.y || '-100%'\n      },\n      runExpressions: !config || config.runExpressions === undefined || config.runExpressions\n    };\n    this.globalData = {\n      _mdf: false,\n      frameNum: -1,\n      renderConfig: this.renderConfig\n    };\n    this.pendingElements = [];\n    this.elements = [];\n    this.threeDElements = [];\n    this.destroyed = false;\n    this.camera = null;\n    this.supports3d = true;\n    this.rendererType = 'html';\n  }\n\n  extendPrototype([HybridRendererBase], HybridRenderer);\n\n  HybridRenderer.prototype.createComp = function (data) {\n    if (!this.supports3d) {\n      return new SVGCompElement(data, this.globalData, this);\n    }\n\n    return new HCompElement(data, this.globalData, this);\n  };\n\n  var CompExpressionInterface = function () {\n    return function (comp) {\n      function _thisLayerFunction(name) {\n        var i = 0;\n        var len = comp.layers.length;\n\n        while (i < len) {\n          if (comp.layers[i].nm === name || comp.layers[i].ind === name) {\n            return comp.elements[i].layerInterface;\n          }\n\n          i += 1;\n        }\n\n        return null; // return {active:false};\n      }\n\n      Object.defineProperty(_thisLayerFunction, '_name', {\n        value: comp.data.nm\n      });\n      _thisLayerFunction.layer = _thisLayerFunction;\n      _thisLayerFunction.pixelAspect = 1;\n      _thisLayerFunction.height = comp.data.h || comp.globalData.compSize.h;\n      _thisLayerFunction.width = comp.data.w || comp.globalData.compSize.w;\n      _thisLayerFunction.pixelAspect = 1;\n      _thisLayerFunction.frameDuration = 1 / comp.globalData.frameRate;\n      _thisLayerFunction.displayStartTime = 0;\n      _thisLayerFunction.numLayers = comp.layers.length;\n      return _thisLayerFunction;\n    };\n  }();\n\n  function _typeof$2(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$2 = function _typeof(obj) { return typeof obj; }; } else { _typeof$2 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$2(obj); }\n\n  /* eslint-disable */\n\n  /*\r\n   Copyright 2014 David Bau.\r\n\r\n   Permission is hereby granted, free of charge, to any person obtaining\r\n   a copy of this software and associated documentation files (the\r\n   \"Software\"), to deal in the Software without restriction, including\r\n   without limitation the rights to use, copy, modify, merge, publish,\r\n   distribute, sublicense, and/or sell copies of the Software, and to\r\n   permit persons to whom the Software is furnished to do so, subject to\r\n   the following conditions:\r\n\r\n   The above copyright notice and this permission notice shall be\r\n   included in all copies or substantial portions of the Software.\r\n\r\n   THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\n   IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\n   CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\n   TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r\n   SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n   */\n  function seedRandom(pool, math) {\n    //\n    // The following constants are related to IEEE 754 limits.\n    //\n    var global = this,\n        width = 256,\n        // each RC4 output is 0 <= x < 256\n    chunks = 6,\n        // at least six RC4 outputs for each double\n    digits = 52,\n        // there are 52 significant digits in a double\n    rngname = 'random',\n        // rngname: name for Math.random and Math.seedrandom\n    startdenom = math.pow(width, chunks),\n        significance = math.pow(2, digits),\n        overflow = significance * 2,\n        mask = width - 1,\n        nodecrypto; // node.js crypto module, initialized at the bottom.\n    //\n    // seedrandom()\n    // This is the seedrandom function described above.\n    //\n\n    function seedrandom(seed, options, callback) {\n      var key = [];\n      options = options === true ? {\n        entropy: true\n      } : options || {}; // Flatten the seed string or build one from local entropy if needed.\n\n      var shortseed = mixkey(flatten(options.entropy ? [seed, tostring(pool)] : seed === null ? autoseed() : seed, 3), key); // Use the seed to initialize an ARC4 generator.\n\n      var arc4 = new ARC4(key); // This function returns a random double in [0, 1) that contains\n      // randomness in every bit of the mantissa of the IEEE 754 value.\n\n      var prng = function prng() {\n        var n = arc4.g(chunks),\n            // Start with a numerator n < 2 ^ 48\n        d = startdenom,\n            //   and denominator d = 2 ^ 48.\n        x = 0; //   and no 'extra last byte'.\n\n        while (n < significance) {\n          // Fill up all significant digits by\n          n = (n + x) * width; //   shifting numerator and\n\n          d *= width; //   denominator and generating a\n\n          x = arc4.g(1); //   new least-significant-byte.\n        }\n\n        while (n >= overflow) {\n          // To avoid rounding up, before adding\n          n /= 2; //   last byte, shift everything\n\n          d /= 2; //   right using integer math until\n\n          x >>>= 1; //   we have exactly the desired bits.\n        }\n\n        return (n + x) / d; // Form the number within [0, 1).\n      };\n\n      prng.int32 = function () {\n        return arc4.g(4) | 0;\n      };\n\n      prng.quick = function () {\n        return arc4.g(4) / 0x100000000;\n      };\n\n      prng[\"double\"] = prng; // Mix the randomness into accumulated entropy.\n\n      mixkey(tostring(arc4.S), pool); // Calling convention: what to return as a function of prng, seed, is_math.\n\n      return (options.pass || callback || function (prng, seed, is_math_call, state) {\n        if (state) {\n          // Load the arc4 state from the given state if it has an S array.\n          if (state.S) {\n            copy(state, arc4);\n          } // Only provide the .state method if requested via options.state.\n\n\n          prng.state = function () {\n            return copy(arc4, {});\n          };\n        } // If called as a method of Math (Math.seedrandom()), mutate\n        // Math.random because that is how seedrandom.js has worked since v1.0.\n\n\n        if (is_math_call) {\n          math[rngname] = prng;\n          return seed;\n        } // Otherwise, it is a newer calling convention, so return the\n        // prng directly.\n        else return prng;\n      })(prng, shortseed, 'global' in options ? options.global : this == math, options.state);\n    }\n\n    math['seed' + rngname] = seedrandom; //\n    // ARC4\n    //\n    // An ARC4 implementation.  The constructor takes a key in the form of\n    // an array of at most (width) integers that should be 0 <= x < (width).\n    //\n    // The g(count) method returns a pseudorandom integer that concatenates\n    // the next (count) outputs from ARC4.  Its return value is a number x\n    // that is in the range 0 <= x < (width ^ count).\n    //\n\n    function ARC4(key) {\n      var t,\n          keylen = key.length,\n          me = this,\n          i = 0,\n          j = me.i = me.j = 0,\n          s = me.S = []; // The empty key [] is treated as [0].\n\n      if (!keylen) {\n        key = [keylen++];\n      } // Set up S using the standard key scheduling algorithm.\n\n\n      while (i < width) {\n        s[i] = i++;\n      }\n\n      for (i = 0; i < width; i++) {\n        s[i] = s[j = mask & j + key[i % keylen] + (t = s[i])];\n        s[j] = t;\n      } // The \"g\" method returns the next (count) outputs as one number.\n\n\n      me.g = function (count) {\n        // Using instance members instead of closure state nearly doubles speed.\n        var t,\n            r = 0,\n            i = me.i,\n            j = me.j,\n            s = me.S;\n\n        while (count--) {\n          t = s[i = mask & i + 1];\n          r = r * width + s[mask & (s[i] = s[j = mask & j + t]) + (s[j] = t)];\n        }\n\n        me.i = i;\n        me.j = j;\n        return r; // For robust unpredictability, the function call below automatically\n        // discards an initial batch of values.  This is called RC4-drop[256].\n        // See http://google.com/search?q=rsa+fluhrer+response&btnI\n      };\n    } //\n    // copy()\n    // Copies internal state of ARC4 to or from a plain object.\n    //\n\n\n    function copy(f, t) {\n      t.i = f.i;\n      t.j = f.j;\n      t.S = f.S.slice();\n      return t;\n    } //\n    // flatten()\n    // Converts an object tree to nested arrays of strings.\n    //\n\n\n    function flatten(obj, depth) {\n      var result = [],\n          typ = _typeof$2(obj),\n          prop;\n\n      if (depth && typ == 'object') {\n        for (prop in obj) {\n          try {\n            result.push(flatten(obj[prop], depth - 1));\n          } catch (e) {}\n        }\n      }\n\n      return result.length ? result : typ == 'string' ? obj : obj + '\\0';\n    } //\n    // mixkey()\n    // Mixes a string seed into a key that is an array of integers, and\n    // returns a shortened string seed that is equivalent to the result key.\n    //\n\n\n    function mixkey(seed, key) {\n      var stringseed = seed + '',\n          smear,\n          j = 0;\n\n      while (j < stringseed.length) {\n        key[mask & j] = mask & (smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++);\n      }\n\n      return tostring(key);\n    } //\n    // autoseed()\n    // Returns an object for autoseeding, using window.crypto and Node crypto\n    // module if available.\n    //\n\n\n    function autoseed() {\n      try {\n        if (nodecrypto) {\n          return tostring(nodecrypto.randomBytes(width));\n        }\n\n        var out = new Uint8Array(width);\n        (global.crypto || global.msCrypto).getRandomValues(out);\n        return tostring(out);\n      } catch (e) {\n        var browser = global.navigator,\n            plugins = browser && browser.plugins;\n        return [+new Date(), global, plugins, global.screen, tostring(pool)];\n      }\n    } //\n    // tostring()\n    // Converts an array of charcodes to a string\n    //\n\n\n    function tostring(a) {\n      return String.fromCharCode.apply(0, a);\n    } //\n    // When seedrandom.js is loaded, we immediately mix a few bits\n    // from the built-in RNG into the entropy pool.  Because we do\n    // not want to interfere with deterministic PRNG state later,\n    // seedrandom will not call math.random on its own again after\n    // initialization.\n    //\n\n\n    mixkey(math.random(), pool); //\n    // Nodejs and AMD support: export the implementation as a module using\n    // either convention.\n    //\n    // End anonymous scope, and pass initial values.\n  }\n\n  ;\n\n  function initialize$2(BMMath) {\n    seedRandom([], BMMath);\n  }\n\n  var propTypes = {\n    SHAPE: 'shape'\n  };\n\n  function _typeof$1(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$1 = function _typeof(obj) { return typeof obj; }; } else { _typeof$1 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$1(obj); }\n\n  var ExpressionManager = function () {\n    'use strict';\n\n    var ob = {};\n    var Math = BMMath;\n    var window = null;\n    var document = null;\n    var XMLHttpRequest = null;\n    var fetch = null;\n    var frames = null;\n    var _lottieGlobal = {};\n    initialize$2(BMMath);\n\n    function resetFrame() {\n      _lottieGlobal = {};\n    }\n\n    function $bm_isInstanceOfArray(arr) {\n      return arr.constructor === Array || arr.constructor === Float32Array;\n    }\n\n    function isNumerable(tOfV, v) {\n      return tOfV === 'number' || v instanceof Number || tOfV === 'boolean' || tOfV === 'string';\n    }\n\n    function $bm_neg(a) {\n      var tOfA = _typeof$1(a);\n\n      if (tOfA === 'number' || a instanceof Number || tOfA === 'boolean') {\n        return -a;\n      }\n\n      if ($bm_isInstanceOfArray(a)) {\n        var i;\n        var lenA = a.length;\n        var retArr = [];\n\n        for (i = 0; i < lenA; i += 1) {\n          retArr[i] = -a[i];\n        }\n\n        return retArr;\n      }\n\n      if (a.propType) {\n        return a.v;\n      }\n\n      return -a;\n    }\n\n    var easeInBez = BezierFactory.getBezierEasing(0.333, 0, 0.833, 0.833, 'easeIn').get;\n    var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, 0.667, 1, 'easeOut').get;\n    var easeInOutBez = BezierFactory.getBezierEasing(0.33, 0, 0.667, 1, 'easeInOut').get;\n\n    function sum(a, b) {\n      var tOfA = _typeof$1(a);\n\n      var tOfB = _typeof$1(b);\n\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b) || tOfA === 'string' || tOfB === 'string') {\n        return a + b;\n      }\n\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        a = a.slice(0);\n        a[0] += b;\n        return a;\n      }\n\n      if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n        b = b.slice(0);\n        b[0] = a + b[0];\n        return b;\n      }\n\n      if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n        var i = 0;\n        var lenA = a.length;\n        var lenB = b.length;\n        var retArr = [];\n\n        while (i < lenA || i < lenB) {\n          if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n            retArr[i] = a[i] + b[i];\n          } else {\n            retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n          }\n\n          i += 1;\n        }\n\n        return retArr;\n      }\n\n      return 0;\n    }\n\n    var add = sum;\n\n    function sub(a, b) {\n      var tOfA = _typeof$1(a);\n\n      var tOfB = _typeof$1(b);\n\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n        if (tOfA === 'string') {\n          a = parseInt(a, 10);\n        }\n\n        if (tOfB === 'string') {\n          b = parseInt(b, 10);\n        }\n\n        return a - b;\n      }\n\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        a = a.slice(0);\n        a[0] -= b;\n        return a;\n      }\n\n      if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n        b = b.slice(0);\n        b[0] = a - b[0];\n        return b;\n      }\n\n      if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n        var i = 0;\n        var lenA = a.length;\n        var lenB = b.length;\n        var retArr = [];\n\n        while (i < lenA || i < lenB) {\n          if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n            retArr[i] = a[i] - b[i];\n          } else {\n            retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n          }\n\n          i += 1;\n        }\n\n        return retArr;\n      }\n\n      return 0;\n    }\n\n    function mul(a, b) {\n      var tOfA = _typeof$1(a);\n\n      var tOfB = _typeof$1(b);\n\n      var arr;\n\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n        return a * b;\n      }\n\n      var i;\n      var len;\n\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        len = a.length;\n        arr = createTypedArray('float32', len);\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a[i] * b;\n        }\n\n        return arr;\n      }\n\n      if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n        len = b.length;\n        arr = createTypedArray('float32', len);\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a * b[i];\n        }\n\n        return arr;\n      }\n\n      return 0;\n    }\n\n    function div(a, b) {\n      var tOfA = _typeof$1(a);\n\n      var tOfB = _typeof$1(b);\n\n      var arr;\n\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n        return a / b;\n      }\n\n      var i;\n      var len;\n\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        len = a.length;\n        arr = createTypedArray('float32', len);\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a[i] / b;\n        }\n\n        return arr;\n      }\n\n      if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n        len = b.length;\n        arr = createTypedArray('float32', len);\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a / b[i];\n        }\n\n        return arr;\n      }\n\n      return 0;\n    }\n\n    function mod(a, b) {\n      if (typeof a === 'string') {\n        a = parseInt(a, 10);\n      }\n\n      if (typeof b === 'string') {\n        b = parseInt(b, 10);\n      }\n\n      return a % b;\n    }\n\n    var $bm_sum = sum;\n    var $bm_sub = sub;\n    var $bm_mul = mul;\n    var $bm_div = div;\n    var $bm_mod = mod;\n\n    function clamp(num, min, max) {\n      if (min > max) {\n        var mm = max;\n        max = min;\n        min = mm;\n      }\n\n      return Math.min(Math.max(num, min), max);\n    }\n\n    function radiansToDegrees(val) {\n      return val / degToRads;\n    }\n\n    var radians_to_degrees = radiansToDegrees;\n\n    function degreesToRadians(val) {\n      return val * degToRads;\n    }\n\n    var degrees_to_radians = radiansToDegrees;\n    var helperLengthArray = [0, 0, 0, 0, 0, 0];\n\n    function length(arr1, arr2) {\n      if (typeof arr1 === 'number' || arr1 instanceof Number) {\n        arr2 = arr2 || 0;\n        return Math.abs(arr1 - arr2);\n      }\n\n      if (!arr2) {\n        arr2 = helperLengthArray;\n      }\n\n      var i;\n      var len = Math.min(arr1.length, arr2.length);\n      var addedLength = 0;\n\n      for (i = 0; i < len; i += 1) {\n        addedLength += Math.pow(arr2[i] - arr1[i], 2);\n      }\n\n      return Math.sqrt(addedLength);\n    }\n\n    function normalize(vec) {\n      return div(vec, length(vec));\n    }\n\n    function rgbToHsl(val) {\n      var r = val[0];\n      var g = val[1];\n      var b = val[2];\n      var max = Math.max(r, g, b);\n      var min = Math.min(r, g, b);\n      var h;\n      var s;\n      var l = (max + min) / 2;\n\n      if (max === min) {\n        h = 0; // achromatic\n\n        s = 0; // achromatic\n      } else {\n        var d = max - min;\n        s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n        switch (max) {\n          case r:\n            h = (g - b) / d + (g < b ? 6 : 0);\n            break;\n\n          case g:\n            h = (b - r) / d + 2;\n            break;\n\n          case b:\n            h = (r - g) / d + 4;\n            break;\n\n          default:\n            break;\n        }\n\n        h /= 6;\n      }\n\n      return [h, s, l, val[3]];\n    }\n\n    function hue2rgb(p, q, t) {\n      if (t < 0) t += 1;\n      if (t > 1) t -= 1;\n      if (t < 1 / 6) return p + (q - p) * 6 * t;\n      if (t < 1 / 2) return q;\n      if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n      return p;\n    }\n\n    function hslToRgb(val) {\n      var h = val[0];\n      var s = val[1];\n      var l = val[2];\n      var r;\n      var g;\n      var b;\n\n      if (s === 0) {\n        r = l; // achromatic\n\n        b = l; // achromatic\n\n        g = l; // achromatic\n      } else {\n        var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n        var p = 2 * l - q;\n        r = hue2rgb(p, q, h + 1 / 3);\n        g = hue2rgb(p, q, h);\n        b = hue2rgb(p, q, h - 1 / 3);\n      }\n\n      return [r, g, b, val[3]];\n    }\n\n    function linear(t, tMin, tMax, value1, value2) {\n      if (value1 === undefined || value2 === undefined) {\n        value1 = tMin;\n        value2 = tMax;\n        tMin = 0;\n        tMax = 1;\n      }\n\n      if (tMax < tMin) {\n        var _tMin = tMax;\n        tMax = tMin;\n        tMin = _tMin;\n      }\n\n      if (t <= tMin) {\n        return value1;\n      }\n\n      if (t >= tMax) {\n        return value2;\n      }\n\n      var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin);\n\n      if (!value1.length) {\n        return value1 + (value2 - value1) * perc;\n      }\n\n      var i;\n      var len = value1.length;\n      var arr = createTypedArray('float32', len);\n\n      for (i = 0; i < len; i += 1) {\n        arr[i] = value1[i] + (value2[i] - value1[i]) * perc;\n      }\n\n      return arr;\n    }\n\n    function random(min, max) {\n      if (max === undefined) {\n        if (min === undefined) {\n          min = 0;\n          max = 1;\n        } else {\n          max = min;\n          min = undefined;\n        }\n      }\n\n      if (max.length) {\n        var i;\n        var len = max.length;\n\n        if (!min) {\n          min = createTypedArray('float32', len);\n        }\n\n        var arr = createTypedArray('float32', len);\n        var rnd = BMMath.random();\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = min[i] + rnd * (max[i] - min[i]);\n        }\n\n        return arr;\n      }\n\n      if (min === undefined) {\n        min = 0;\n      }\n\n      var rndm = BMMath.random();\n      return min + rndm * (max - min);\n    }\n\n    function createPath(points, inTangents, outTangents, closed) {\n      var i;\n      var len = points.length;\n      var path = shapePool.newElement();\n      path.setPathData(!!closed, len);\n      var arrPlaceholder = [0, 0];\n      var inVertexPoint;\n      var outVertexPoint;\n\n      for (i = 0; i < len; i += 1) {\n        inVertexPoint = inTangents && inTangents[i] ? inTangents[i] : arrPlaceholder;\n        outVertexPoint = outTangents && outTangents[i] ? outTangents[i] : arrPlaceholder;\n        path.setTripleAt(points[i][0], points[i][1], outVertexPoint[0] + points[i][0], outVertexPoint[1] + points[i][1], inVertexPoint[0] + points[i][0], inVertexPoint[1] + points[i][1], i, true);\n      }\n\n      return path;\n    }\n\n    function initiateExpression(elem, data, property) {\n      // Bail out if we don't want expressions\n      function noOp(_value) {\n        return _value;\n      }\n\n      if (!elem.globalData.renderConfig.runExpressions) {\n        return noOp;\n      }\n\n      var val = data.x;\n      var needsVelocity = /velocity(?![\\w\\d])/.test(val);\n\n      var _needsRandom = val.indexOf('random') !== -1;\n\n      var elemType = elem.data.ty;\n      var transform;\n      var $bm_transform;\n      var content;\n      var effect;\n      var thisProperty = property;\n      thisProperty.valueAtTime = thisProperty.getValueAtTime;\n      Object.defineProperty(thisProperty, 'value', {\n        get: function get() {\n          return thisProperty.v;\n        }\n      });\n      elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate;\n      elem.comp.displayStartTime = 0;\n      var inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n      var outPoint = elem.data.op / elem.comp.globalData.frameRate;\n      var width = elem.data.sw ? elem.data.sw : 0;\n      var height = elem.data.sh ? elem.data.sh : 0;\n      var name = elem.data.nm;\n      var loopIn;\n      var loop_in;\n      var loopOut;\n      var loop_out;\n      var smooth;\n      var toWorld;\n      var fromWorld;\n      var fromComp;\n      var toComp;\n      var fromCompToSurface;\n      var position;\n      var rotation;\n      var anchorPoint;\n      var scale;\n      var thisLayer;\n      var thisComp;\n      var mask;\n      var valueAtTime;\n      var velocityAtTime;\n      var scoped_bm_rt; // val = val.replace(/(\\\\?\"|')((http)(s)?(:\\/))?\\/.*?(\\\\?\"|')/g, \"\\\"\\\"\"); // deter potential network calls\n\n      var expression_function = eval('[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}]')[0]; // eslint-disable-line no-eval\n\n      var numKeys = property.kf ? data.k.length : 0;\n      var active = !this.data || this.data.hd !== true;\n\n      var wiggle = function wiggle(freq, amp) {\n        var iWiggle;\n        var j;\n        var lenWiggle = this.pv.length ? this.pv.length : 1;\n        var addedAmps = createTypedArray('float32', lenWiggle);\n        freq = 5;\n        var iterations = Math.floor(time * freq);\n        iWiggle = 0;\n        j = 0;\n\n        while (iWiggle < iterations) {\n          // var rnd = BMMath.random();\n          for (j = 0; j < lenWiggle; j += 1) {\n            addedAmps[j] += -amp + amp * 2 * BMMath.random(); // addedAmps[j] += -amp + amp*2*rnd;\n          }\n\n          iWiggle += 1;\n        } // var rnd2 = BMMath.random();\n\n\n        var periods = time * freq;\n        var perc = periods - Math.floor(periods);\n        var arr = createTypedArray('float32', lenWiggle);\n\n        if (lenWiggle > 1) {\n          for (j = 0; j < lenWiggle; j += 1) {\n            arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp * 2 * BMMath.random()) * perc; // arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp*2*rnd)*perc;\n            // arr[i] = this.pv[i] + addedAmp + amp1*perc + amp2*(1-perc);\n          }\n\n          return arr;\n        }\n\n        return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc;\n      }.bind(this);\n\n      if (thisProperty.loopIn) {\n        loopIn = thisProperty.loopIn.bind(thisProperty);\n        loop_in = loopIn;\n      }\n\n      if (thisProperty.loopOut) {\n        loopOut = thisProperty.loopOut.bind(thisProperty);\n        loop_out = loopOut;\n      }\n\n      if (thisProperty.smooth) {\n        smooth = thisProperty.smooth.bind(thisProperty);\n      }\n\n      function loopInDuration(type, duration) {\n        return loopIn(type, duration, true);\n      }\n\n      function loopOutDuration(type, duration) {\n        return loopOut(type, duration, true);\n      }\n\n      if (this.getValueAtTime) {\n        valueAtTime = this.getValueAtTime.bind(this);\n      }\n\n      if (this.getVelocityAtTime) {\n        velocityAtTime = this.getVelocityAtTime.bind(this);\n      }\n\n      var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface);\n\n      function lookAt(elem1, elem2) {\n        var fVec = [elem2[0] - elem1[0], elem2[1] - elem1[1], elem2[2] - elem1[2]];\n        var pitch = Math.atan2(fVec[0], Math.sqrt(fVec[1] * fVec[1] + fVec[2] * fVec[2])) / degToRads;\n        var yaw = -Math.atan2(fVec[1], fVec[2]) / degToRads;\n        return [yaw, pitch, 0];\n      }\n\n      function easeOut(t, tMin, tMax, val1, val2) {\n        return applyEase(easeOutBez, t, tMin, tMax, val1, val2);\n      }\n\n      function easeIn(t, tMin, tMax, val1, val2) {\n        return applyEase(easeInBez, t, tMin, tMax, val1, val2);\n      }\n\n      function ease(t, tMin, tMax, val1, val2) {\n        return applyEase(easeInOutBez, t, tMin, tMax, val1, val2);\n      }\n\n      function applyEase(fn, t, tMin, tMax, val1, val2) {\n        if (val1 === undefined) {\n          val1 = tMin;\n          val2 = tMax;\n        } else {\n          t = (t - tMin) / (tMax - tMin);\n        }\n\n        if (t > 1) {\n          t = 1;\n        } else if (t < 0) {\n          t = 0;\n        }\n\n        var mult = fn(t);\n\n        if ($bm_isInstanceOfArray(val1)) {\n          var iKey;\n          var lenKey = val1.length;\n          var arr = createTypedArray('float32', lenKey);\n\n          for (iKey = 0; iKey < lenKey; iKey += 1) {\n            arr[iKey] = (val2[iKey] - val1[iKey]) * mult + val1[iKey];\n          }\n\n          return arr;\n        }\n\n        return (val2 - val1) * mult + val1;\n      }\n\n      function nearestKey(time) {\n        var iKey;\n        var lenKey = data.k.length;\n        var index;\n        var keyTime;\n\n        if (!data.k.length || typeof data.k[0] === 'number') {\n          index = 0;\n          keyTime = 0;\n        } else {\n          index = -1;\n          time *= elem.comp.globalData.frameRate;\n\n          if (time < data.k[0].t) {\n            index = 1;\n            keyTime = data.k[0].t;\n          } else {\n            for (iKey = 0; iKey < lenKey - 1; iKey += 1) {\n              if (time === data.k[iKey].t) {\n                index = iKey + 1;\n                keyTime = data.k[iKey].t;\n                break;\n              } else if (time > data.k[iKey].t && time < data.k[iKey + 1].t) {\n                if (time - data.k[iKey].t > data.k[iKey + 1].t - time) {\n                  index = iKey + 2;\n                  keyTime = data.k[iKey + 1].t;\n                } else {\n                  index = iKey + 1;\n                  keyTime = data.k[iKey].t;\n                }\n\n                break;\n              }\n            }\n\n            if (index === -1) {\n              index = iKey + 1;\n              keyTime = data.k[iKey].t;\n            }\n          }\n        }\n\n        var obKey = {};\n        obKey.index = index;\n        obKey.time = keyTime / elem.comp.globalData.frameRate;\n        return obKey;\n      }\n\n      function key(ind) {\n        var obKey;\n        var iKey;\n        var lenKey;\n\n        if (!data.k.length || typeof data.k[0] === 'number') {\n          throw new Error('The property has no keyframe at index ' + ind);\n        }\n\n        ind -= 1;\n        obKey = {\n          time: data.k[ind].t / elem.comp.globalData.frameRate,\n          value: []\n        };\n        var arr = Object.prototype.hasOwnProperty.call(data.k[ind], 's') ? data.k[ind].s : data.k[ind - 1].e;\n        lenKey = arr.length;\n\n        for (iKey = 0; iKey < lenKey; iKey += 1) {\n          obKey[iKey] = arr[iKey];\n          obKey.value[iKey] = arr[iKey];\n        }\n\n        return obKey;\n      }\n\n      function framesToTime(fr, fps) {\n        if (!fps) {\n          fps = elem.comp.globalData.frameRate;\n        }\n\n        return fr / fps;\n      }\n\n      function timeToFrames(t, fps) {\n        if (!t && t !== 0) {\n          t = time;\n        }\n\n        if (!fps) {\n          fps = elem.comp.globalData.frameRate;\n        }\n\n        return t * fps;\n      }\n\n      function seedRandom(seed) {\n        BMMath.seedrandom(randSeed + seed);\n      }\n\n      function sourceRectAtTime() {\n        return elem.sourceRectAtTime();\n      }\n\n      function substring(init, end) {\n        if (typeof value === 'string') {\n          if (end === undefined) {\n            return value.substring(init);\n          }\n\n          return value.substring(init, end);\n        }\n\n        return '';\n      }\n\n      function substr(init, end) {\n        if (typeof value === 'string') {\n          if (end === undefined) {\n            return value.substr(init);\n          }\n\n          return value.substr(init, end);\n        }\n\n        return '';\n      }\n\n      function posterizeTime(framesPerSecond) {\n        time = framesPerSecond === 0 ? 0 : Math.floor(time * framesPerSecond) / framesPerSecond;\n        value = valueAtTime(time);\n      }\n\n      var time;\n      var velocity;\n      var value;\n      var text;\n      var textIndex;\n      var textTotal;\n      var selectorValue;\n      var index = elem.data.ind;\n      var hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n      var parent;\n      var randSeed = Math.floor(Math.random() * 1000000);\n      var globalData = elem.globalData;\n\n      function executeExpression(_value) {\n        // globalData.pushExpression();\n        value = _value;\n\n        if (this.frameExpressionId === elem.globalData.frameId && this.propType !== 'textSelector') {\n          return value;\n        }\n\n        if (this.propType === 'textSelector') {\n          textIndex = this.textIndex;\n          textTotal = this.textTotal;\n          selectorValue = this.selectorValue;\n        }\n\n        if (!thisLayer) {\n          text = elem.layerInterface.text;\n          thisLayer = elem.layerInterface;\n          thisComp = elem.comp.compInterface;\n          toWorld = thisLayer.toWorld.bind(thisLayer);\n          fromWorld = thisLayer.fromWorld.bind(thisLayer);\n          fromComp = thisLayer.fromComp.bind(thisLayer);\n          toComp = thisLayer.toComp.bind(thisLayer);\n          mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null;\n          fromCompToSurface = fromComp;\n        }\n\n        if (!transform) {\n          transform = elem.layerInterface('ADBE Transform Group');\n          $bm_transform = transform;\n\n          if (transform) {\n            anchorPoint = transform.anchorPoint;\n            /* position = transform.position;\r\n                      rotation = transform.rotation;\r\n                      scale = transform.scale; */\n          }\n        }\n\n        if (elemType === 4 && !content) {\n          content = thisLayer('ADBE Root Vectors Group');\n        }\n\n        if (!effect) {\n          effect = thisLayer(4);\n        }\n\n        hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n\n        if (hasParent && !parent) {\n          parent = elem.hierarchy[0].layerInterface;\n        }\n\n        time = this.comp.renderedFrame / this.comp.globalData.frameRate;\n\n        if (_needsRandom) {\n          seedRandom(randSeed + time);\n        }\n\n        if (needsVelocity) {\n          velocity = velocityAtTime(time);\n        }\n\n        expression_function();\n        this.frameExpressionId = elem.globalData.frameId; // TODO: Check if it's possible to return on ShapeInterface the .v value\n        // Changed this to a ternary operation because Rollup failed compiling it correctly\n\n        scoped_bm_rt = scoped_bm_rt.propType === propTypes.SHAPE ? scoped_bm_rt.v : scoped_bm_rt;\n        return scoped_bm_rt;\n      } // Bundlers will see these as dead code and unless we reference them\n\n\n      executeExpression.__preventDeadCodeRemoval = [$bm_transform, anchorPoint, time, velocity, inPoint, outPoint, width, height, name, loop_in, loop_out, smooth, toComp, fromCompToSurface, toWorld, fromWorld, mask, position, rotation, scale, thisComp, numKeys, active, wiggle, loopInDuration, loopOutDuration, comp, lookAt, easeOut, easeIn, ease, nearestKey, key, text, textIndex, textTotal, selectorValue, framesToTime, timeToFrames, sourceRectAtTime, substring, substr, posterizeTime, index, globalData];\n      return executeExpression;\n    }\n\n    ob.initiateExpression = initiateExpression;\n    ob.__preventDeadCodeRemoval = [window, document, XMLHttpRequest, fetch, frames, $bm_neg, add, $bm_sum, $bm_sub, $bm_mul, $bm_div, $bm_mod, clamp, radians_to_degrees, degreesToRadians, degrees_to_radians, normalize, rgbToHsl, hslToRgb, linear, random, createPath, _lottieGlobal];\n    ob.resetFrame = resetFrame;\n    return ob;\n  }();\n\n  var Expressions = function () {\n    var ob = {};\n    ob.initExpressions = initExpressions;\n    ob.resetFrame = ExpressionManager.resetFrame;\n\n    function initExpressions(animation) {\n      var stackCount = 0;\n      var registers = [];\n\n      function pushExpression() {\n        stackCount += 1;\n      }\n\n      function popExpression() {\n        stackCount -= 1;\n\n        if (stackCount === 0) {\n          releaseInstances();\n        }\n      }\n\n      function registerExpressionProperty(expression) {\n        if (registers.indexOf(expression) === -1) {\n          registers.push(expression);\n        }\n      }\n\n      function releaseInstances() {\n        var i;\n        var len = registers.length;\n\n        for (i = 0; i < len; i += 1) {\n          registers[i].release();\n        }\n\n        registers.length = 0;\n      }\n\n      animation.renderer.compInterface = CompExpressionInterface(animation.renderer);\n      animation.renderer.globalData.projectInterface.registerComposition(animation.renderer);\n      animation.renderer.globalData.pushExpression = pushExpression;\n      animation.renderer.globalData.popExpression = popExpression;\n      animation.renderer.globalData.registerExpressionProperty = registerExpressionProperty;\n    }\n\n    return ob;\n  }();\n\n  var MaskManagerInterface = function () {\n    function MaskInterface(mask, data) {\n      this._mask = mask;\n      this._data = data;\n    }\n\n    Object.defineProperty(MaskInterface.prototype, 'maskPath', {\n      get: function get() {\n        if (this._mask.prop.k) {\n          this._mask.prop.getValue();\n        }\n\n        return this._mask.prop;\n      }\n    });\n    Object.defineProperty(MaskInterface.prototype, 'maskOpacity', {\n      get: function get() {\n        if (this._mask.op.k) {\n          this._mask.op.getValue();\n        }\n\n        return this._mask.op.v * 100;\n      }\n    });\n\n    var MaskManager = function MaskManager(maskManager) {\n      var _masksInterfaces = createSizedArray(maskManager.viewData.length);\n\n      var i;\n      var len = maskManager.viewData.length;\n\n      for (i = 0; i < len; i += 1) {\n        _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]);\n      }\n\n      var maskFunction = function maskFunction(name) {\n        i = 0;\n\n        while (i < len) {\n          if (maskManager.masksProperties[i].nm === name) {\n            return _masksInterfaces[i];\n          }\n\n          i += 1;\n        }\n\n        return null;\n      };\n\n      return maskFunction;\n    };\n\n    return MaskManager;\n  }();\n\n  var ExpressionPropertyInterface = function () {\n    var defaultUnidimensionalValue = {\n      pv: 0,\n      v: 0,\n      mult: 1\n    };\n    var defaultMultidimensionalValue = {\n      pv: [0, 0, 0],\n      v: [0, 0, 0],\n      mult: 1\n    };\n\n    function completeProperty(expressionValue, property, type) {\n      Object.defineProperty(expressionValue, 'velocity', {\n        get: function get() {\n          return property.getVelocityAtTime(property.comp.currentFrame);\n        }\n      });\n      expressionValue.numKeys = property.keyframes ? property.keyframes.length : 0;\n\n      expressionValue.key = function (pos) {\n        if (!expressionValue.numKeys) {\n          return 0;\n        }\n\n        var value = '';\n\n        if ('s' in property.keyframes[pos - 1]) {\n          value = property.keyframes[pos - 1].s;\n        } else if ('e' in property.keyframes[pos - 2]) {\n          value = property.keyframes[pos - 2].e;\n        } else {\n          value = property.keyframes[pos - 2].s;\n        }\n\n        var valueProp = type === 'unidimensional' ? new Number(value) : Object.assign({}, value); // eslint-disable-line no-new-wrappers\n\n        valueProp.time = property.keyframes[pos - 1].t / property.elem.comp.globalData.frameRate;\n        valueProp.value = type === 'unidimensional' ? value[0] : value;\n        return valueProp;\n      };\n\n      expressionValue.valueAtTime = property.getValueAtTime;\n      expressionValue.speedAtTime = property.getSpeedAtTime;\n      expressionValue.velocityAtTime = property.getVelocityAtTime;\n      expressionValue.propertyGroup = property.propertyGroup;\n    }\n\n    function UnidimensionalPropertyInterface(property) {\n      if (!property || !('pv' in property)) {\n        property = defaultUnidimensionalValue;\n      }\n\n      var mult = 1 / property.mult;\n      var val = property.pv * mult;\n      var expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n\n      expressionValue.value = val;\n      completeProperty(expressionValue, property, 'unidimensional');\n      return function () {\n        if (property.k) {\n          property.getValue();\n        }\n\n        val = property.v * mult;\n\n        if (expressionValue.value !== val) {\n          expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n\n          expressionValue.value = val;\n          completeProperty(expressionValue, property, 'unidimensional');\n        }\n\n        return expressionValue;\n      };\n    }\n\n    function MultidimensionalPropertyInterface(property) {\n      if (!property || !('pv' in property)) {\n        property = defaultMultidimensionalValue;\n      }\n\n      var mult = 1 / property.mult;\n      var len = property.data && property.data.l || property.pv.length;\n      var expressionValue = createTypedArray('float32', len);\n      var arrValue = createTypedArray('float32', len);\n      expressionValue.value = arrValue;\n      completeProperty(expressionValue, property, 'multidimensional');\n      return function () {\n        if (property.k) {\n          property.getValue();\n        }\n\n        for (var i = 0; i < len; i += 1) {\n          arrValue[i] = property.v[i] * mult;\n          expressionValue[i] = arrValue[i];\n        }\n\n        return expressionValue;\n      };\n    } // TODO: try to avoid using this getter\n\n\n    function defaultGetter() {\n      return defaultUnidimensionalValue;\n    }\n\n    return function (property) {\n      if (!property) {\n        return defaultGetter;\n      }\n\n      if (property.propType === 'unidimensional') {\n        return UnidimensionalPropertyInterface(property);\n      }\n\n      return MultidimensionalPropertyInterface(property);\n    };\n  }();\n\n  var TransformExpressionInterface = function () {\n    return function (transform) {\n      function _thisFunction(name) {\n        switch (name) {\n          case 'scale':\n          case 'Scale':\n          case 'ADBE Scale':\n          case 6:\n            return _thisFunction.scale;\n\n          case 'rotation':\n          case 'Rotation':\n          case 'ADBE Rotation':\n          case 'ADBE Rotate Z':\n          case 10:\n            return _thisFunction.rotation;\n\n          case 'ADBE Rotate X':\n            return _thisFunction.xRotation;\n\n          case 'ADBE Rotate Y':\n            return _thisFunction.yRotation;\n\n          case 'position':\n          case 'Position':\n          case 'ADBE Position':\n          case 2:\n            return _thisFunction.position;\n\n          case 'ADBE Position_0':\n            return _thisFunction.xPosition;\n\n          case 'ADBE Position_1':\n            return _thisFunction.yPosition;\n\n          case 'ADBE Position_2':\n            return _thisFunction.zPosition;\n\n          case 'anchorPoint':\n          case 'AnchorPoint':\n          case 'Anchor Point':\n          case 'ADBE AnchorPoint':\n          case 1:\n            return _thisFunction.anchorPoint;\n\n          case 'opacity':\n          case 'Opacity':\n          case 11:\n            return _thisFunction.opacity;\n\n          default:\n            return null;\n        }\n      }\n\n      Object.defineProperty(_thisFunction, 'rotation', {\n        get: ExpressionPropertyInterface(transform.r || transform.rz)\n      });\n      Object.defineProperty(_thisFunction, 'zRotation', {\n        get: ExpressionPropertyInterface(transform.rz || transform.r)\n      });\n      Object.defineProperty(_thisFunction, 'xRotation', {\n        get: ExpressionPropertyInterface(transform.rx)\n      });\n      Object.defineProperty(_thisFunction, 'yRotation', {\n        get: ExpressionPropertyInterface(transform.ry)\n      });\n      Object.defineProperty(_thisFunction, 'scale', {\n        get: ExpressionPropertyInterface(transform.s)\n      });\n\n      var _px;\n\n      var _py;\n\n      var _pz;\n\n      var _transformFactory;\n\n      if (transform.p) {\n        _transformFactory = ExpressionPropertyInterface(transform.p);\n      } else {\n        _px = ExpressionPropertyInterface(transform.px);\n        _py = ExpressionPropertyInterface(transform.py);\n\n        if (transform.pz) {\n          _pz = ExpressionPropertyInterface(transform.pz);\n        }\n      }\n\n      Object.defineProperty(_thisFunction, 'position', {\n        get: function get() {\n          if (transform.p) {\n            return _transformFactory();\n          }\n\n          return [_px(), _py(), _pz ? _pz() : 0];\n        }\n      });\n      Object.defineProperty(_thisFunction, 'xPosition', {\n        get: ExpressionPropertyInterface(transform.px)\n      });\n      Object.defineProperty(_thisFunction, 'yPosition', {\n        get: ExpressionPropertyInterface(transform.py)\n      });\n      Object.defineProperty(_thisFunction, 'zPosition', {\n        get: ExpressionPropertyInterface(transform.pz)\n      });\n      Object.defineProperty(_thisFunction, 'anchorPoint', {\n        get: ExpressionPropertyInterface(transform.a)\n      });\n      Object.defineProperty(_thisFunction, 'opacity', {\n        get: ExpressionPropertyInterface(transform.o)\n      });\n      Object.defineProperty(_thisFunction, 'skew', {\n        get: ExpressionPropertyInterface(transform.sk)\n      });\n      Object.defineProperty(_thisFunction, 'skewAxis', {\n        get: ExpressionPropertyInterface(transform.sa)\n      });\n      Object.defineProperty(_thisFunction, 'orientation', {\n        get: ExpressionPropertyInterface(transform.or)\n      });\n      return _thisFunction;\n    };\n  }();\n\n  var LayerExpressionInterface = function () {\n    function getMatrix(time) {\n      var toWorldMat = new Matrix();\n\n      if (time !== undefined) {\n        var propMatrix = this._elem.finalTransform.mProp.getValueAtTime(time);\n\n        propMatrix.clone(toWorldMat);\n      } else {\n        var transformMat = this._elem.finalTransform.mProp;\n        transformMat.applyToMatrix(toWorldMat);\n      }\n\n      return toWorldMat;\n    }\n\n    function toWorldVec(arr, time) {\n      var toWorldMat = this.getMatrix(time);\n      toWorldMat.props[12] = 0;\n      toWorldMat.props[13] = 0;\n      toWorldMat.props[14] = 0;\n      return this.applyPoint(toWorldMat, arr);\n    }\n\n    function toWorld(arr, time) {\n      var toWorldMat = this.getMatrix(time);\n      return this.applyPoint(toWorldMat, arr);\n    }\n\n    function fromWorldVec(arr, time) {\n      var toWorldMat = this.getMatrix(time);\n      toWorldMat.props[12] = 0;\n      toWorldMat.props[13] = 0;\n      toWorldMat.props[14] = 0;\n      return this.invertPoint(toWorldMat, arr);\n    }\n\n    function fromWorld(arr, time) {\n      var toWorldMat = this.getMatrix(time);\n      return this.invertPoint(toWorldMat, arr);\n    }\n\n    function applyPoint(matrix, arr) {\n      if (this._elem.hierarchy && this._elem.hierarchy.length) {\n        var i;\n        var len = this._elem.hierarchy.length;\n\n        for (i = 0; i < len; i += 1) {\n          this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n        }\n      }\n\n      return matrix.applyToPointArray(arr[0], arr[1], arr[2] || 0);\n    }\n\n    function invertPoint(matrix, arr) {\n      if (this._elem.hierarchy && this._elem.hierarchy.length) {\n        var i;\n        var len = this._elem.hierarchy.length;\n\n        for (i = 0; i < len; i += 1) {\n          this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n        }\n      }\n\n      return matrix.inversePoint(arr);\n    }\n\n    function fromComp(arr) {\n      var toWorldMat = new Matrix();\n      toWorldMat.reset();\n\n      this._elem.finalTransform.mProp.applyToMatrix(toWorldMat);\n\n      if (this._elem.hierarchy && this._elem.hierarchy.length) {\n        var i;\n        var len = this._elem.hierarchy.length;\n\n        for (i = 0; i < len; i += 1) {\n          this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\n        }\n\n        return toWorldMat.inversePoint(arr);\n      }\n\n      return toWorldMat.inversePoint(arr);\n    }\n\n    function sampleImage() {\n      return [1, 1, 1, 1];\n    }\n\n    return function (elem) {\n      var transformInterface;\n\n      function _registerMaskInterface(maskManager) {\n        _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem);\n      }\n\n      function _registerEffectsInterface(effects) {\n        _thisLayerFunction.effect = effects;\n      }\n\n      function _thisLayerFunction(name) {\n        switch (name) {\n          case 'ADBE Root Vectors Group':\n          case 'Contents':\n          case 2:\n            return _thisLayerFunction.shapeInterface;\n\n          case 1:\n          case 6:\n          case 'Transform':\n          case 'transform':\n          case 'ADBE Transform Group':\n            return transformInterface;\n\n          case 4:\n          case 'ADBE Effect Parade':\n          case 'effects':\n          case 'Effects':\n            return _thisLayerFunction.effect;\n\n          case 'ADBE Text Properties':\n            return _thisLayerFunction.textInterface;\n\n          default:\n            return null;\n        }\n      }\n\n      _thisLayerFunction.getMatrix = getMatrix;\n      _thisLayerFunction.invertPoint = invertPoint;\n      _thisLayerFunction.applyPoint = applyPoint;\n      _thisLayerFunction.toWorld = toWorld;\n      _thisLayerFunction.toWorldVec = toWorldVec;\n      _thisLayerFunction.fromWorld = fromWorld;\n      _thisLayerFunction.fromWorldVec = fromWorldVec;\n      _thisLayerFunction.toComp = toWorld;\n      _thisLayerFunction.fromComp = fromComp;\n      _thisLayerFunction.sampleImage = sampleImage;\n      _thisLayerFunction.sourceRectAtTime = elem.sourceRectAtTime.bind(elem);\n      _thisLayerFunction._elem = elem;\n      transformInterface = TransformExpressionInterface(elem.finalTransform.mProp);\n      var anchorPointDescriptor = getDescriptor(transformInterface, 'anchorPoint');\n      Object.defineProperties(_thisLayerFunction, {\n        hasParent: {\n          get: function get() {\n            return elem.hierarchy.length;\n          }\n        },\n        parent: {\n          get: function get() {\n            return elem.hierarchy[0].layerInterface;\n          }\n        },\n        rotation: getDescriptor(transformInterface, 'rotation'),\n        scale: getDescriptor(transformInterface, 'scale'),\n        position: getDescriptor(transformInterface, 'position'),\n        opacity: getDescriptor(transformInterface, 'opacity'),\n        anchorPoint: anchorPointDescriptor,\n        anchor_point: anchorPointDescriptor,\n        transform: {\n          get: function get() {\n            return transformInterface;\n          }\n        },\n        active: {\n          get: function get() {\n            return elem.isInRange;\n          }\n        }\n      });\n      _thisLayerFunction.startTime = elem.data.st;\n      _thisLayerFunction.index = elem.data.ind;\n      _thisLayerFunction.source = elem.data.refId;\n      _thisLayerFunction.height = elem.data.ty === 0 ? elem.data.h : 100;\n      _thisLayerFunction.width = elem.data.ty === 0 ? elem.data.w : 100;\n      _thisLayerFunction.inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n      _thisLayerFunction.outPoint = elem.data.op / elem.comp.globalData.frameRate;\n      _thisLayerFunction._name = elem.data.nm;\n      _thisLayerFunction.registerMaskInterface = _registerMaskInterface;\n      _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface;\n      return _thisLayerFunction;\n    };\n  }();\n\n  var propertyGroupFactory = function () {\n    return function (interfaceFunction, parentPropertyGroup) {\n      return function (val) {\n        val = val === undefined ? 1 : val;\n\n        if (val <= 0) {\n          return interfaceFunction;\n        }\n\n        return parentPropertyGroup(val - 1);\n      };\n    };\n  }();\n\n  var PropertyInterface = function () {\n    return function (propertyName, propertyGroup) {\n      var interfaceFunction = {\n        _name: propertyName\n      };\n\n      function _propertyGroup(val) {\n        val = val === undefined ? 1 : val;\n\n        if (val <= 0) {\n          return interfaceFunction;\n        }\n\n        return propertyGroup(val - 1);\n      }\n\n      return _propertyGroup;\n    };\n  }();\n\n  var EffectsExpressionInterface = function () {\n    var ob = {\n      createEffectsInterface: createEffectsInterface\n    };\n\n    function createEffectsInterface(elem, propertyGroup) {\n      if (elem.effectsManager) {\n        var effectElements = [];\n        var effectsData = elem.data.ef;\n        var i;\n        var len = elem.effectsManager.effectElements.length;\n\n        for (i = 0; i < len; i += 1) {\n          effectElements.push(createGroupInterface(effectsData[i], elem.effectsManager.effectElements[i], propertyGroup, elem));\n        }\n\n        var effects = elem.data.ef || [];\n\n        var groupInterface = function groupInterface(name) {\n          i = 0;\n          len = effects.length;\n\n          while (i < len) {\n            if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n              return effectElements[i];\n            }\n\n            i += 1;\n          }\n\n          return null;\n        };\n\n        Object.defineProperty(groupInterface, 'numProperties', {\n          get: function get() {\n            return effects.length;\n          }\n        });\n        return groupInterface;\n      }\n\n      return null;\n    }\n\n    function createGroupInterface(data, elements, propertyGroup, elem) {\n      function groupInterface(name) {\n        var effects = data.ef;\n        var i = 0;\n        var len = effects.length;\n\n        while (i < len) {\n          if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n            if (effects[i].ty === 5) {\n              return effectElements[i];\n            }\n\n            return effectElements[i]();\n          }\n\n          i += 1;\n        }\n\n        throw new Error();\n      }\n\n      var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup);\n\n      var effectElements = [];\n      var i;\n      var len = data.ef.length;\n\n      for (i = 0; i < len; i += 1) {\n        if (data.ef[i].ty === 5) {\n          effectElements.push(createGroupInterface(data.ef[i], elements.effectElements[i], elements.effectElements[i].propertyGroup, elem));\n        } else {\n          effectElements.push(createValueInterface(elements.effectElements[i], data.ef[i].ty, elem, _propertyGroup));\n        }\n      }\n\n      if (data.mn === 'ADBE Color Control') {\n        Object.defineProperty(groupInterface, 'color', {\n          get: function get() {\n            return effectElements[0]();\n          }\n        });\n      }\n\n      Object.defineProperties(groupInterface, {\n        numProperties: {\n          get: function get() {\n            return data.np;\n          }\n        },\n        _name: {\n          value: data.nm\n        },\n        propertyGroup: {\n          value: _propertyGroup\n        }\n      });\n      groupInterface.enabled = data.en !== 0;\n      groupInterface.active = groupInterface.enabled;\n      return groupInterface;\n    }\n\n    function createValueInterface(element, type, elem, propertyGroup) {\n      var expressionProperty = ExpressionPropertyInterface(element.p);\n\n      function interfaceFunction() {\n        if (type === 10) {\n          return elem.comp.compInterface(element.p.v);\n        }\n\n        return expressionProperty();\n      }\n\n      if (element.p.setGroupProperty) {\n        element.p.setGroupProperty(PropertyInterface('', propertyGroup));\n      }\n\n      return interfaceFunction;\n    }\n\n    return ob;\n  }();\n\n  var ShapePathInterface = function () {\n    return function pathInterfaceFactory(shape, view, propertyGroup) {\n      var prop = view.sh;\n\n      function interfaceFunction(val) {\n        if (val === 'Shape' || val === 'shape' || val === 'Path' || val === 'path' || val === 'ADBE Vector Shape' || val === 2) {\n          return interfaceFunction.path;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      prop.setGroupProperty(PropertyInterface('Path', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        path: {\n          get: function get() {\n            if (prop.k) {\n              prop.getValue();\n            }\n\n            return prop;\n          }\n        },\n        shape: {\n          get: function get() {\n            if (prop.k) {\n              prop.getValue();\n            }\n\n            return prop;\n          }\n        },\n        _name: {\n          value: shape.nm\n        },\n        ix: {\n          value: shape.ix\n        },\n        propertyIndex: {\n          value: shape.ix\n        },\n        mn: {\n          value: shape.mn\n        },\n        propertyGroup: {\n          value: propertyGroup\n        }\n      });\n      return interfaceFunction;\n    };\n  }();\n\n  var ShapeExpressionInterface = function () {\n    function iterateElements(shapes, view, propertyGroup) {\n      var arr = [];\n      var i;\n      var len = shapes ? shapes.length : 0;\n\n      for (i = 0; i < len; i += 1) {\n        if (shapes[i].ty === 'gr') {\n          arr.push(groupInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'fl') {\n          arr.push(fillInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'st') {\n          arr.push(strokeInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'tm') {\n          arr.push(trimInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'tr') {// arr.push(transformInterfaceFactory(shapes[i],view[i],propertyGroup));\n        } else if (shapes[i].ty === 'el') {\n          arr.push(ellipseInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'sr') {\n          arr.push(starInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'sh') {\n          arr.push(ShapePathInterface(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'rc') {\n          arr.push(rectInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'rd') {\n          arr.push(roundedInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'rp') {\n          arr.push(repeaterInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'gf') {\n          arr.push(gradientFillInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else {\n          arr.push(defaultInterfaceFactory(shapes[i], view[i], propertyGroup));\n        }\n      }\n\n      return arr;\n    }\n\n    function contentsInterfaceFactory(shape, view, propertyGroup) {\n      var interfaces;\n\n      var interfaceFunction = function _interfaceFunction(value) {\n        var i = 0;\n        var len = interfaces.length;\n\n        while (i < len) {\n          if (interfaces[i]._name === value || interfaces[i].mn === value || interfaces[i].propertyIndex === value || interfaces[i].ix === value || interfaces[i].ind === value) {\n            return interfaces[i];\n          }\n\n          i += 1;\n        }\n\n        if (typeof value === 'number') {\n          return interfaces[value - 1];\n        }\n\n        return null;\n      };\n\n      interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n      interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup);\n      interfaceFunction.numProperties = interfaces.length;\n      var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n      interfaceFunction.transform = transformInterface;\n      interfaceFunction.propertyIndex = shape.cix;\n      interfaceFunction._name = shape.nm;\n      return interfaceFunction;\n    }\n\n    function groupInterfaceFactory(shape, view, propertyGroup) {\n      var interfaceFunction = function _interfaceFunction(value) {\n        switch (value) {\n          case 'ADBE Vectors Group':\n          case 'Contents':\n          case 2:\n            return interfaceFunction.content;\n          // Not necessary for now. Keeping them here in case a new case appears\n          // case 'ADBE Vector Transform Group':\n          // case 3:\n\n          default:\n            return interfaceFunction.transform;\n        }\n      };\n\n      interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n      var content = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup);\n      var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n      interfaceFunction.content = content;\n      interfaceFunction.transform = transformInterface;\n      Object.defineProperty(interfaceFunction, '_name', {\n        get: function get() {\n          return shape.nm;\n        }\n      }); // interfaceFunction.content = interfaceFunction;\n\n      interfaceFunction.numProperties = shape.np;\n      interfaceFunction.propertyIndex = shape.ix;\n      interfaceFunction.nm = shape.nm;\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function fillInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(val) {\n        if (val === 'Color' || val === 'color') {\n          return interfaceFunction.color;\n        }\n\n        if (val === 'Opacity' || val === 'opacity') {\n          return interfaceFunction.opacity;\n        }\n\n        return null;\n      }\n\n      Object.defineProperties(interfaceFunction, {\n        color: {\n          get: ExpressionPropertyInterface(view.c)\n        },\n        opacity: {\n          get: ExpressionPropertyInterface(view.o)\n        },\n        _name: {\n          value: shape.nm\n        },\n        mn: {\n          value: shape.mn\n        }\n      });\n      view.c.setGroupProperty(PropertyInterface('Color', propertyGroup));\n      view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n      return interfaceFunction;\n    }\n\n    function gradientFillInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(val) {\n        if (val === 'Start Point' || val === 'start point') {\n          return interfaceFunction.startPoint;\n        }\n\n        if (val === 'End Point' || val === 'end point') {\n          return interfaceFunction.endPoint;\n        }\n\n        if (val === 'Opacity' || val === 'opacity') {\n          return interfaceFunction.opacity;\n        }\n\n        return null;\n      }\n\n      Object.defineProperties(interfaceFunction, {\n        startPoint: {\n          get: ExpressionPropertyInterface(view.s)\n        },\n        endPoint: {\n          get: ExpressionPropertyInterface(view.e)\n        },\n        opacity: {\n          get: ExpressionPropertyInterface(view.o)\n        },\n        type: {\n          get: function get() {\n            return 'a';\n          }\n        },\n        _name: {\n          value: shape.nm\n        },\n        mn: {\n          value: shape.mn\n        }\n      });\n      view.s.setGroupProperty(PropertyInterface('Start Point', propertyGroup));\n      view.e.setGroupProperty(PropertyInterface('End Point', propertyGroup));\n      view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n      return interfaceFunction;\n    }\n\n    function defaultInterfaceFactory() {\n      function interfaceFunction() {\n        return null;\n      }\n\n      return interfaceFunction;\n    }\n\n    function strokeInterfaceFactory(shape, view, propertyGroup) {\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup);\n\n      function addPropertyToDashOb(i) {\n        Object.defineProperty(dashOb, shape.d[i].nm, {\n          get: ExpressionPropertyInterface(view.d.dataProps[i].p)\n        });\n      }\n\n      var i;\n      var len = shape.d ? shape.d.length : 0;\n      var dashOb = {};\n\n      for (i = 0; i < len; i += 1) {\n        addPropertyToDashOb(i);\n        view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup);\n      }\n\n      function interfaceFunction(val) {\n        if (val === 'Color' || val === 'color') {\n          return interfaceFunction.color;\n        }\n\n        if (val === 'Opacity' || val === 'opacity') {\n          return interfaceFunction.opacity;\n        }\n\n        if (val === 'Stroke Width' || val === 'stroke width') {\n          return interfaceFunction.strokeWidth;\n        }\n\n        return null;\n      }\n\n      Object.defineProperties(interfaceFunction, {\n        color: {\n          get: ExpressionPropertyInterface(view.c)\n        },\n        opacity: {\n          get: ExpressionPropertyInterface(view.o)\n        },\n        strokeWidth: {\n          get: ExpressionPropertyInterface(view.w)\n        },\n        dash: {\n          get: function get() {\n            return dashOb;\n          }\n        },\n        _name: {\n          value: shape.nm\n        },\n        mn: {\n          value: shape.mn\n        }\n      });\n      view.c.setGroupProperty(PropertyInterface('Color', _propertyGroup));\n      view.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n      view.w.setGroupProperty(PropertyInterface('Stroke Width', _propertyGroup));\n      return interfaceFunction;\n    }\n\n    function trimInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(val) {\n        if (val === shape.e.ix || val === 'End' || val === 'end') {\n          return interfaceFunction.end;\n        }\n\n        if (val === shape.s.ix) {\n          return interfaceFunction.start;\n        }\n\n        if (val === shape.o.ix) {\n          return interfaceFunction.offset;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      interfaceFunction.propertyIndex = shape.ix;\n      view.s.setGroupProperty(PropertyInterface('Start', _propertyGroup));\n      view.e.setGroupProperty(PropertyInterface('End', _propertyGroup));\n      view.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n      interfaceFunction.propertyIndex = shape.ix;\n      interfaceFunction.propertyGroup = propertyGroup;\n      Object.defineProperties(interfaceFunction, {\n        start: {\n          get: ExpressionPropertyInterface(view.s)\n        },\n        end: {\n          get: ExpressionPropertyInterface(view.e)\n        },\n        offset: {\n          get: ExpressionPropertyInterface(view.o)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function transformInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.a.ix === value || value === 'Anchor Point') {\n          return interfaceFunction.anchorPoint;\n        }\n\n        if (shape.o.ix === value || value === 'Opacity') {\n          return interfaceFunction.opacity;\n        }\n\n        if (shape.p.ix === value || value === 'Position') {\n          return interfaceFunction.position;\n        }\n\n        if (shape.r.ix === value || value === 'Rotation' || value === 'ADBE Vector Rotation') {\n          return interfaceFunction.rotation;\n        }\n\n        if (shape.s.ix === value || value === 'Scale') {\n          return interfaceFunction.scale;\n        }\n\n        if (shape.sk && shape.sk.ix === value || value === 'Skew') {\n          return interfaceFunction.skew;\n        }\n\n        if (shape.sa && shape.sa.ix === value || value === 'Skew Axis') {\n          return interfaceFunction.skewAxis;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      view.transform.mProps.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n      view.transform.mProps.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n      view.transform.mProps.a.setGroupProperty(PropertyInterface('Anchor Point', _propertyGroup));\n      view.transform.mProps.s.setGroupProperty(PropertyInterface('Scale', _propertyGroup));\n      view.transform.mProps.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n      if (view.transform.mProps.sk) {\n        view.transform.mProps.sk.setGroupProperty(PropertyInterface('Skew', _propertyGroup));\n        view.transform.mProps.sa.setGroupProperty(PropertyInterface('Skew Angle', _propertyGroup));\n      }\n\n      view.transform.op.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        opacity: {\n          get: ExpressionPropertyInterface(view.transform.mProps.o)\n        },\n        position: {\n          get: ExpressionPropertyInterface(view.transform.mProps.p)\n        },\n        anchorPoint: {\n          get: ExpressionPropertyInterface(view.transform.mProps.a)\n        },\n        scale: {\n          get: ExpressionPropertyInterface(view.transform.mProps.s)\n        },\n        rotation: {\n          get: ExpressionPropertyInterface(view.transform.mProps.r)\n        },\n        skew: {\n          get: ExpressionPropertyInterface(view.transform.mProps.sk)\n        },\n        skewAxis: {\n          get: ExpressionPropertyInterface(view.transform.mProps.sa)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.ty = 'tr';\n      interfaceFunction.mn = shape.mn;\n      interfaceFunction.propertyGroup = propertyGroup;\n      return interfaceFunction;\n    }\n\n    function ellipseInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.p.ix === value) {\n          return interfaceFunction.position;\n        }\n\n        if (shape.s.ix === value) {\n          return interfaceFunction.size;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      interfaceFunction.propertyIndex = shape.ix;\n      var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n      prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n      prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        size: {\n          get: ExpressionPropertyInterface(prop.s)\n        },\n        position: {\n          get: ExpressionPropertyInterface(prop.p)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function starInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.p.ix === value) {\n          return interfaceFunction.position;\n        }\n\n        if (shape.r.ix === value) {\n          return interfaceFunction.rotation;\n        }\n\n        if (shape.pt.ix === value) {\n          return interfaceFunction.points;\n        }\n\n        if (shape.or.ix === value || value === 'ADBE Vector Star Outer Radius') {\n          return interfaceFunction.outerRadius;\n        }\n\n        if (shape.os.ix === value) {\n          return interfaceFunction.outerRoundness;\n        }\n\n        if (shape.ir && (shape.ir.ix === value || value === 'ADBE Vector Star Inner Radius')) {\n          return interfaceFunction.innerRadius;\n        }\n\n        if (shape.is && shape.is.ix === value) {\n          return interfaceFunction.innerRoundness;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n      interfaceFunction.propertyIndex = shape.ix;\n      prop.or.setGroupProperty(PropertyInterface('Outer Radius', _propertyGroup));\n      prop.os.setGroupProperty(PropertyInterface('Outer Roundness', _propertyGroup));\n      prop.pt.setGroupProperty(PropertyInterface('Points', _propertyGroup));\n      prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n      prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n      if (shape.ir) {\n        prop.ir.setGroupProperty(PropertyInterface('Inner Radius', _propertyGroup));\n        prop.is.setGroupProperty(PropertyInterface('Inner Roundness', _propertyGroup));\n      }\n\n      Object.defineProperties(interfaceFunction, {\n        position: {\n          get: ExpressionPropertyInterface(prop.p)\n        },\n        rotation: {\n          get: ExpressionPropertyInterface(prop.r)\n        },\n        points: {\n          get: ExpressionPropertyInterface(prop.pt)\n        },\n        outerRadius: {\n          get: ExpressionPropertyInterface(prop.or)\n        },\n        outerRoundness: {\n          get: ExpressionPropertyInterface(prop.os)\n        },\n        innerRadius: {\n          get: ExpressionPropertyInterface(prop.ir)\n        },\n        innerRoundness: {\n          get: ExpressionPropertyInterface(prop.is)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function rectInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.p.ix === value) {\n          return interfaceFunction.position;\n        }\n\n        if (shape.r.ix === value) {\n          return interfaceFunction.roundness;\n        }\n\n        if (shape.s.ix === value || value === 'Size' || value === 'ADBE Vector Rect Size') {\n          return interfaceFunction.size;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n      interfaceFunction.propertyIndex = shape.ix;\n      prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n      prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n      prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        position: {\n          get: ExpressionPropertyInterface(prop.p)\n        },\n        roundness: {\n          get: ExpressionPropertyInterface(prop.r)\n        },\n        size: {\n          get: ExpressionPropertyInterface(prop.s)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function roundedInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.r.ix === value || value === 'Round Corners 1') {\n          return interfaceFunction.radius;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var prop = view;\n      interfaceFunction.propertyIndex = shape.ix;\n      prop.rd.setGroupProperty(PropertyInterface('Radius', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        radius: {\n          get: ExpressionPropertyInterface(prop.rd)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function repeaterInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.c.ix === value || value === 'Copies') {\n          return interfaceFunction.copies;\n        }\n\n        if (shape.o.ix === value || value === 'Offset') {\n          return interfaceFunction.offset;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var prop = view;\n      interfaceFunction.propertyIndex = shape.ix;\n      prop.c.setGroupProperty(PropertyInterface('Copies', _propertyGroup));\n      prop.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        copies: {\n          get: ExpressionPropertyInterface(prop.c)\n        },\n        offset: {\n          get: ExpressionPropertyInterface(prop.o)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    return function (shapes, view, propertyGroup) {\n      var interfaces;\n\n      function _interfaceFunction(value) {\n        if (typeof value === 'number') {\n          value = value === undefined ? 1 : value;\n\n          if (value === 0) {\n            return propertyGroup;\n          }\n\n          return interfaces[value - 1];\n        }\n\n        var i = 0;\n        var len = interfaces.length;\n\n        while (i < len) {\n          if (interfaces[i]._name === value) {\n            return interfaces[i];\n          }\n\n          i += 1;\n        }\n\n        return null;\n      }\n\n      function parentGroupWrapper() {\n        return propertyGroup;\n      }\n\n      _interfaceFunction.propertyGroup = propertyGroupFactory(_interfaceFunction, parentGroupWrapper);\n      interfaces = iterateElements(shapes, view, _interfaceFunction.propertyGroup);\n      _interfaceFunction.numProperties = interfaces.length;\n      _interfaceFunction._name = 'Contents';\n      return _interfaceFunction;\n    };\n  }();\n\n  var TextExpressionInterface = function () {\n    return function (elem) {\n      var _sourceText;\n\n      function _thisLayerFunction(name) {\n        switch (name) {\n          case 'ADBE Text Document':\n            return _thisLayerFunction.sourceText;\n\n          default:\n            return null;\n        }\n      }\n\n      Object.defineProperty(_thisLayerFunction, 'sourceText', {\n        get: function get() {\n          elem.textProperty.getValue();\n          var stringValue = elem.textProperty.currentData.t;\n\n          if (!_sourceText || stringValue !== _sourceText.value) {\n            _sourceText = new String(stringValue); // eslint-disable-line no-new-wrappers\n            // If stringValue is an empty string, eval returns undefined, so it has to be returned as a String primitive\n\n            _sourceText.value = stringValue || new String(stringValue); // eslint-disable-line no-new-wrappers\n\n            Object.defineProperty(_sourceText, 'style', {\n              get: function get() {\n                return {\n                  fillColor: elem.textProperty.currentData.fc\n                };\n              }\n            });\n          }\n\n          return _sourceText;\n        }\n      });\n      return _thisLayerFunction;\n    };\n  }();\n\n  function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n  var FootageInterface = function () {\n    var outlineInterfaceFactory = function outlineInterfaceFactory(elem) {\n      var currentPropertyName = '';\n      var currentProperty = elem.getFootageData();\n\n      function init() {\n        currentPropertyName = '';\n        currentProperty = elem.getFootageData();\n        return searchProperty;\n      }\n\n      function searchProperty(value) {\n        if (currentProperty[value]) {\n          currentPropertyName = value;\n          currentProperty = currentProperty[value];\n\n          if (_typeof(currentProperty) === 'object') {\n            return searchProperty;\n          }\n\n          return currentProperty;\n        }\n\n        var propertyNameIndex = value.indexOf(currentPropertyName);\n\n        if (propertyNameIndex !== -1) {\n          var index = parseInt(value.substr(propertyNameIndex + currentPropertyName.length), 10);\n          currentProperty = currentProperty[index];\n\n          if (_typeof(currentProperty) === 'object') {\n            return searchProperty;\n          }\n\n          return currentProperty;\n        }\n\n        return '';\n      }\n\n      return init;\n    };\n\n    var dataInterfaceFactory = function dataInterfaceFactory(elem) {\n      function interfaceFunction(value) {\n        if (value === 'Outline') {\n          return interfaceFunction.outlineInterface();\n        }\n\n        return null;\n      }\n\n      interfaceFunction._name = 'Outline';\n      interfaceFunction.outlineInterface = outlineInterfaceFactory(elem);\n      return interfaceFunction;\n    };\n\n    return function (elem) {\n      function _interfaceFunction(value) {\n        if (value === 'Data') {\n          return _interfaceFunction.dataInterface;\n        }\n\n        return null;\n      }\n\n      _interfaceFunction._name = 'Data';\n      _interfaceFunction.dataInterface = dataInterfaceFactory(elem);\n      return _interfaceFunction;\n    };\n  }();\n\n  var interfaces = {\n    layer: LayerExpressionInterface,\n    effects: EffectsExpressionInterface,\n    comp: CompExpressionInterface,\n    shape: ShapeExpressionInterface,\n    text: TextExpressionInterface,\n    footage: FootageInterface\n  };\n\n  function getInterface(type) {\n    return interfaces[type] || null;\n  }\n\n  var expressionHelpers = function () {\n    function searchExpressions(elem, data, prop) {\n      if (data.x) {\n        prop.k = true;\n        prop.x = true;\n        prop.initiateExpression = ExpressionManager.initiateExpression;\n        prop.effectsSequence.push(prop.initiateExpression(elem, data, prop).bind(prop));\n      }\n    }\n\n    function getValueAtTime(frameNum) {\n      frameNum *= this.elem.globalData.frameRate;\n      frameNum -= this.offsetTime;\n\n      if (frameNum !== this._cachingAtTime.lastFrame) {\n        this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0;\n        this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime);\n        this._cachingAtTime.lastFrame = frameNum;\n      }\n\n      return this._cachingAtTime.value;\n    }\n\n    function getSpeedAtTime(frameNum) {\n      var delta = -0.01;\n      var v1 = this.getValueAtTime(frameNum);\n      var v2 = this.getValueAtTime(frameNum + delta);\n      var speed = 0;\n\n      if (v1.length) {\n        var i;\n\n        for (i = 0; i < v1.length; i += 1) {\n          speed += Math.pow(v2[i] - v1[i], 2);\n        }\n\n        speed = Math.sqrt(speed) * 100;\n      } else {\n        speed = 0;\n      }\n\n      return speed;\n    }\n\n    function getVelocityAtTime(frameNum) {\n      if (this.vel !== undefined) {\n        return this.vel;\n      }\n\n      var delta = -0.001; // frameNum += this.elem.data.st;\n\n      var v1 = this.getValueAtTime(frameNum);\n      var v2 = this.getValueAtTime(frameNum + delta);\n      var velocity;\n\n      if (v1.length) {\n        velocity = createTypedArray('float32', v1.length);\n        var i;\n\n        for (i = 0; i < v1.length; i += 1) {\n          // removing frameRate\n          // if needed, don't add it here\n          // velocity[i] = this.elem.globalData.frameRate*((v2[i] - v1[i])/delta);\n          velocity[i] = (v2[i] - v1[i]) / delta;\n        }\n      } else {\n        velocity = (v2 - v1) / delta;\n      }\n\n      return velocity;\n    }\n\n    function getStaticValueAtTime() {\n      return this.pv;\n    }\n\n    function setGroupProperty(propertyGroup) {\n      this.propertyGroup = propertyGroup;\n    }\n\n    return {\n      searchExpressions: searchExpressions,\n      getSpeedAtTime: getSpeedAtTime,\n      getVelocityAtTime: getVelocityAtTime,\n      getValueAtTime: getValueAtTime,\n      getStaticValueAtTime: getStaticValueAtTime,\n      setGroupProperty: setGroupProperty\n    };\n  }();\n\n  function addPropertyDecorator() {\n    function loopOut(type, duration, durationFlag) {\n      if (!this.k || !this.keyframes) {\n        return this.pv;\n      }\n\n      type = type ? type.toLowerCase() : '';\n      var currentFrame = this.comp.renderedFrame;\n      var keyframes = this.keyframes;\n      var lastKeyFrame = keyframes[keyframes.length - 1].t;\n\n      if (currentFrame <= lastKeyFrame) {\n        return this.pv;\n      }\n\n      var cycleDuration;\n      var firstKeyFrame;\n\n      if (!durationFlag) {\n        if (!duration || duration > keyframes.length - 1) {\n          duration = keyframes.length - 1;\n        }\n\n        firstKeyFrame = keyframes[keyframes.length - 1 - duration].t;\n        cycleDuration = lastKeyFrame - firstKeyFrame;\n      } else {\n        if (!duration) {\n          cycleDuration = Math.max(0, lastKeyFrame - this.elem.data.ip);\n        } else {\n          cycleDuration = Math.abs(lastKeyFrame - this.elem.comp.globalData.frameRate * duration);\n        }\n\n        firstKeyFrame = lastKeyFrame - cycleDuration;\n      }\n\n      var i;\n      var len;\n      var ret;\n\n      if (type === 'pingpong') {\n        var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n        if (iterations % 2 !== 0) {\n          return this.getValueAtTime((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n        }\n      } else if (type === 'offset') {\n        var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n        var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n        var current = this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n\n        var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n        if (this.pv.length) {\n          ret = new Array(initV.length);\n          len = ret.length;\n\n          for (i = 0; i < len; i += 1) {\n            ret[i] = (endV[i] - initV[i]) * repeats + current[i];\n          }\n\n          return ret;\n        }\n\n        return (endV - initV) * repeats + current;\n      } else if (type === 'continue') {\n        var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n        var nextLastValue = this.getValueAtTime((lastKeyFrame - 0.001) / this.comp.globalData.frameRate, 0);\n\n        if (this.pv.length) {\n          ret = new Array(lastValue.length);\n          len = ret.length;\n\n          for (i = 0; i < len; i += 1) {\n            ret[i] = lastValue[i] + (lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate) / 0.0005; // eslint-disable-line\n          }\n\n          return ret;\n        }\n\n        return lastValue + (lastValue - nextLastValue) * ((currentFrame - lastKeyFrame) / 0.001);\n      }\n\n      return this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n    }\n\n    function loopIn(type, duration, durationFlag) {\n      if (!this.k) {\n        return this.pv;\n      }\n\n      type = type ? type.toLowerCase() : '';\n      var currentFrame = this.comp.renderedFrame;\n      var keyframes = this.keyframes;\n      var firstKeyFrame = keyframes[0].t;\n\n      if (currentFrame >= firstKeyFrame) {\n        return this.pv;\n      }\n\n      var cycleDuration;\n      var lastKeyFrame;\n\n      if (!durationFlag) {\n        if (!duration || duration > keyframes.length - 1) {\n          duration = keyframes.length - 1;\n        }\n\n        lastKeyFrame = keyframes[duration].t;\n        cycleDuration = lastKeyFrame - firstKeyFrame;\n      } else {\n        if (!duration) {\n          cycleDuration = Math.max(0, this.elem.data.op - firstKeyFrame);\n        } else {\n          cycleDuration = Math.abs(this.elem.comp.globalData.frameRate * duration);\n        }\n\n        lastKeyFrame = firstKeyFrame + cycleDuration;\n      }\n\n      var i;\n      var len;\n      var ret;\n\n      if (type === 'pingpong') {\n        var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration);\n\n        if (iterations % 2 === 0) {\n          return this.getValueAtTime(((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n        }\n      } else if (type === 'offset') {\n        var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n        var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n        var current = this.getValueAtTime((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);\n        var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1;\n\n        if (this.pv.length) {\n          ret = new Array(initV.length);\n          len = ret.length;\n\n          for (i = 0; i < len; i += 1) {\n            ret[i] = current[i] - (endV[i] - initV[i]) * repeats;\n          }\n\n          return ret;\n        }\n\n        return current - (endV - initV) * repeats;\n      } else if (type === 'continue') {\n        var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n        var nextFirstValue = this.getValueAtTime((firstKeyFrame + 0.001) / this.comp.globalData.frameRate, 0);\n\n        if (this.pv.length) {\n          ret = new Array(firstValue.length);\n          len = ret.length;\n\n          for (i = 0; i < len; i += 1) {\n            ret[i] = firstValue[i] + (firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame) / 0.001;\n          }\n\n          return ret;\n        }\n\n        return firstValue + (firstValue - nextFirstValue) * (firstKeyFrame - currentFrame) / 0.001;\n      }\n\n      return this.getValueAtTime((cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n    }\n\n    function smooth(width, samples) {\n      if (!this.k) {\n        return this.pv;\n      }\n\n      width = (width || 0.4) * 0.5;\n      samples = Math.floor(samples || 5);\n\n      if (samples <= 1) {\n        return this.pv;\n      }\n\n      var currentTime = this.comp.renderedFrame / this.comp.globalData.frameRate;\n      var initFrame = currentTime - width;\n      var endFrame = currentTime + width;\n      var sampleFrequency = samples > 1 ? (endFrame - initFrame) / (samples - 1) : 1;\n      var i = 0;\n      var j = 0;\n      var value;\n\n      if (this.pv.length) {\n        value = createTypedArray('float32', this.pv.length);\n      } else {\n        value = 0;\n      }\n\n      var sampleValue;\n\n      while (i < samples) {\n        sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency);\n\n        if (this.pv.length) {\n          for (j = 0; j < this.pv.length; j += 1) {\n            value[j] += sampleValue[j];\n          }\n        } else {\n          value += sampleValue;\n        }\n\n        i += 1;\n      }\n\n      if (this.pv.length) {\n        for (j = 0; j < this.pv.length; j += 1) {\n          value[j] /= samples;\n        }\n      } else {\n        value /= samples;\n      }\n\n      return value;\n    }\n\n    function getTransformValueAtTime(time) {\n      if (!this._transformCachingAtTime) {\n        this._transformCachingAtTime = {\n          v: new Matrix()\n        };\n      } /// /\n\n\n      var matrix = this._transformCachingAtTime.v;\n      matrix.cloneFromProps(this.pre.props);\n\n      if (this.appliedTransformations < 1) {\n        var anchor = this.a.getValueAtTime(time);\n        matrix.translate(-anchor[0] * this.a.mult, -anchor[1] * this.a.mult, anchor[2] * this.a.mult);\n      }\n\n      if (this.appliedTransformations < 2) {\n        var scale = this.s.getValueAtTime(time);\n        matrix.scale(scale[0] * this.s.mult, scale[1] * this.s.mult, scale[2] * this.s.mult);\n      }\n\n      if (this.sk && this.appliedTransformations < 3) {\n        var skew = this.sk.getValueAtTime(time);\n        var skewAxis = this.sa.getValueAtTime(time);\n        matrix.skewFromAxis(-skew * this.sk.mult, skewAxis * this.sa.mult);\n      }\n\n      if (this.r && this.appliedTransformations < 4) {\n        var rotation = this.r.getValueAtTime(time);\n        matrix.rotate(-rotation * this.r.mult);\n      } else if (!this.r && this.appliedTransformations < 4) {\n        var rotationZ = this.rz.getValueAtTime(time);\n        var rotationY = this.ry.getValueAtTime(time);\n        var rotationX = this.rx.getValueAtTime(time);\n        var orientation = this.or.getValueAtTime(time);\n        matrix.rotateZ(-rotationZ * this.rz.mult).rotateY(rotationY * this.ry.mult).rotateX(rotationX * this.rx.mult).rotateZ(-orientation[2] * this.or.mult).rotateY(orientation[1] * this.or.mult).rotateX(orientation[0] * this.or.mult);\n      }\n\n      if (this.data.p && this.data.p.s) {\n        var positionX = this.px.getValueAtTime(time);\n        var positionY = this.py.getValueAtTime(time);\n\n        if (this.data.p.z) {\n          var positionZ = this.pz.getValueAtTime(time);\n          matrix.translate(positionX * this.px.mult, positionY * this.py.mult, -positionZ * this.pz.mult);\n        } else {\n          matrix.translate(positionX * this.px.mult, positionY * this.py.mult, 0);\n        }\n      } else {\n        var position = this.p.getValueAtTime(time);\n        matrix.translate(position[0] * this.p.mult, position[1] * this.p.mult, -position[2] * this.p.mult);\n      }\n\n      return matrix; /// /\n    }\n\n    function getTransformStaticValueAtTime() {\n      return this.v.clone(new Matrix());\n    }\n\n    var getTransformProperty = TransformPropertyFactory.getTransformProperty;\n\n    TransformPropertyFactory.getTransformProperty = function (elem, data, container) {\n      var prop = getTransformProperty(elem, data, container);\n\n      if (prop.dynamicProperties.length) {\n        prop.getValueAtTime = getTransformValueAtTime.bind(prop);\n      } else {\n        prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop);\n      }\n\n      prop.setGroupProperty = expressionHelpers.setGroupProperty;\n      return prop;\n    };\n\n    var propertyGetProp = PropertyFactory.getProp;\n\n    PropertyFactory.getProp = function (elem, data, type, mult, container) {\n      var prop = propertyGetProp(elem, data, type, mult, container); // prop.getVelocityAtTime = getVelocityAtTime;\n      // prop.loopOut = loopOut;\n      // prop.loopIn = loopIn;\n\n      if (prop.kf) {\n        prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop);\n      } else {\n        prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop);\n      }\n\n      prop.setGroupProperty = expressionHelpers.setGroupProperty;\n      prop.loopOut = loopOut;\n      prop.loopIn = loopIn;\n      prop.smooth = smooth;\n      prop.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(prop);\n      prop.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(prop);\n      prop.numKeys = data.a === 1 ? data.k.length : 0;\n      prop.propertyIndex = data.ix;\n      var value = 0;\n\n      if (type !== 0) {\n        value = createTypedArray('float32', data.a === 1 ? data.k[0].s.length : data.k.length);\n      }\n\n      prop._cachingAtTime = {\n        lastFrame: initialDefaultFrame,\n        lastIndex: 0,\n        value: value\n      };\n      expressionHelpers.searchExpressions(elem, data, prop);\n\n      if (prop.k) {\n        container.addDynamicProperty(prop);\n      }\n\n      return prop;\n    };\n\n    function getShapeValueAtTime(frameNum) {\n      // For now this caching object is created only when needed instead of creating it when the shape is initialized.\n      if (!this._cachingAtTime) {\n        this._cachingAtTime = {\n          shapeValue: shapePool.clone(this.pv),\n          lastIndex: 0,\n          lastTime: initialDefaultFrame\n        };\n      }\n\n      frameNum *= this.elem.globalData.frameRate;\n      frameNum -= this.offsetTime;\n\n      if (frameNum !== this._cachingAtTime.lastTime) {\n        this._cachingAtTime.lastIndex = this._cachingAtTime.lastTime < frameNum ? this._caching.lastIndex : 0;\n        this._cachingAtTime.lastTime = frameNum;\n        this.interpolateShape(frameNum, this._cachingAtTime.shapeValue, this._cachingAtTime);\n      }\n\n      return this._cachingAtTime.shapeValue;\n    }\n\n    var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction();\n    var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction();\n\n    function ShapeExpressions() {}\n\n    ShapeExpressions.prototype = {\n      vertices: function vertices(prop, time) {\n        if (this.k) {\n          this.getValue();\n        }\n\n        var shapePath = this.v;\n\n        if (time !== undefined) {\n          shapePath = this.getValueAtTime(time, 0);\n        }\n\n        var i;\n        var len = shapePath._length;\n        var vertices = shapePath[prop];\n        var points = shapePath.v;\n        var arr = createSizedArray(len);\n\n        for (i = 0; i < len; i += 1) {\n          if (prop === 'i' || prop === 'o') {\n            arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]];\n          } else {\n            arr[i] = [vertices[i][0], vertices[i][1]];\n          }\n        }\n\n        return arr;\n      },\n      points: function points(time) {\n        return this.vertices('v', time);\n      },\n      inTangents: function inTangents(time) {\n        return this.vertices('i', time);\n      },\n      outTangents: function outTangents(time) {\n        return this.vertices('o', time);\n      },\n      isClosed: function isClosed() {\n        return this.v.c;\n      },\n      pointOnPath: function pointOnPath(perc, time) {\n        var shapePath = this.v;\n\n        if (time !== undefined) {\n          shapePath = this.getValueAtTime(time, 0);\n        }\n\n        if (!this._segmentsLength) {\n          this._segmentsLength = bez.getSegmentsLength(shapePath);\n        }\n\n        var segmentsLength = this._segmentsLength;\n        var lengths = segmentsLength.lengths;\n        var lengthPos = segmentsLength.totalLength * perc;\n        var i = 0;\n        var len = lengths.length;\n        var accumulatedLength = 0;\n        var pt;\n\n        while (i < len) {\n          if (accumulatedLength + lengths[i].addedLength > lengthPos) {\n            var initIndex = i;\n            var endIndex = shapePath.c && i === len - 1 ? 0 : i + 1;\n            var segmentPerc = (lengthPos - accumulatedLength) / lengths[i].addedLength;\n            pt = bez.getPointInSegment(shapePath.v[initIndex], shapePath.v[endIndex], shapePath.o[initIndex], shapePath.i[endIndex], segmentPerc, lengths[i]);\n            break;\n          } else {\n            accumulatedLength += lengths[i].addedLength;\n          }\n\n          i += 1;\n        }\n\n        if (!pt) {\n          pt = shapePath.c ? [shapePath.v[0][0], shapePath.v[0][1]] : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]];\n        }\n\n        return pt;\n      },\n      vectorOnPath: function vectorOnPath(perc, time, vectorType) {\n        // perc doesn't use triple equality because it can be a Number object as well as a primitive.\n        if (perc == 1) {\n          // eslint-disable-line eqeqeq\n          perc = this.v.c;\n        } else if (perc == 0) {\n          // eslint-disable-line eqeqeq\n          perc = 0.999;\n        }\n\n        var pt1 = this.pointOnPath(perc, time);\n        var pt2 = this.pointOnPath(perc + 0.001, time);\n        var xLength = pt2[0] - pt1[0];\n        var yLength = pt2[1] - pt1[1];\n        var magnitude = Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2));\n\n        if (magnitude === 0) {\n          return [0, 0];\n        }\n\n        var unitVector = vectorType === 'tangent' ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude];\n        return unitVector;\n      },\n      tangentOnPath: function tangentOnPath(perc, time) {\n        return this.vectorOnPath(perc, time, 'tangent');\n      },\n      normalOnPath: function normalOnPath(perc, time) {\n        return this.vectorOnPath(perc, time, 'normal');\n      },\n      setGroupProperty: expressionHelpers.setGroupProperty,\n      getValueAtTime: expressionHelpers.getStaticValueAtTime\n    };\n    extendPrototype([ShapeExpressions], ShapePropertyConstructorFunction);\n    extendPrototype([ShapeExpressions], KeyframedShapePropertyConstructorFunction);\n    KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime;\n    KeyframedShapePropertyConstructorFunction.prototype.initiateExpression = ExpressionManager.initiateExpression;\n    var propertyGetShapeProp = ShapePropertyFactory.getShapeProp;\n\n    ShapePropertyFactory.getShapeProp = function (elem, data, type, arr, trims) {\n      var prop = propertyGetShapeProp(elem, data, type, arr, trims);\n      prop.propertyIndex = data.ix;\n      prop.lock = false;\n\n      if (type === 3) {\n        expressionHelpers.searchExpressions(elem, data.pt, prop);\n      } else if (type === 4) {\n        expressionHelpers.searchExpressions(elem, data.ks, prop);\n      }\n\n      if (prop.k) {\n        elem.addDynamicProperty(prop);\n      }\n\n      return prop;\n    };\n  }\n\n  function initialize$1() {\n    addPropertyDecorator();\n  }\n\n  function addDecorator() {\n    function searchExpressions() {\n      if (this.data.d.x) {\n        this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this);\n        this.addEffect(this.getExpressionValue.bind(this));\n        return true;\n      }\n\n      return null;\n    }\n\n    TextProperty.prototype.getExpressionValue = function (currentValue, text) {\n      var newValue = this.calculateExpression(text);\n\n      if (currentValue.t !== newValue) {\n        var newData = {};\n        this.copyData(newData, currentValue);\n        newData.t = newValue.toString();\n        newData.__complete = false;\n        return newData;\n      }\n\n      return currentValue;\n    };\n\n    TextProperty.prototype.searchProperty = function () {\n      var isKeyframed = this.searchKeyframes();\n      var hasExpressions = this.searchExpressions();\n      this.kf = isKeyframed || hasExpressions;\n      return this.kf;\n    };\n\n    TextProperty.prototype.searchExpressions = searchExpressions;\n  }\n\n  function initialize() {\n    addDecorator();\n  }\n\n  function SVGComposableEffect() {}\n\n  SVGComposableEffect.prototype = {\n    createMergeNode: function createMergeNode(resultId, ins) {\n      var feMerge = createNS('feMerge');\n      feMerge.setAttribute('result', resultId);\n      var feMergeNode;\n      var i;\n\n      for (i = 0; i < ins.length; i += 1) {\n        feMergeNode = createNS('feMergeNode');\n        feMergeNode.setAttribute('in', ins[i]);\n        feMerge.appendChild(feMergeNode);\n        feMerge.appendChild(feMergeNode);\n      }\n\n      return feMerge;\n    }\n  };\n\n  var linearFilterValue = '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0';\n\n  function SVGTintFilter(filter, filterManager, elem, id, source) {\n    this.filterManager = filterManager;\n    var feColorMatrix = createNS('feColorMatrix');\n    feColorMatrix.setAttribute('type', 'matrix');\n    feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n    feColorMatrix.setAttribute('values', linearFilterValue + ' 1 0');\n    this.linearFilter = feColorMatrix;\n    feColorMatrix.setAttribute('result', id + '_tint_1');\n    filter.appendChild(feColorMatrix);\n    feColorMatrix = createNS('feColorMatrix');\n    feColorMatrix.setAttribute('type', 'matrix');\n    feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n    feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n    feColorMatrix.setAttribute('result', id + '_tint_2');\n    filter.appendChild(feColorMatrix);\n    this.matrixFilter = feColorMatrix;\n    var feMerge = this.createMergeNode(id, [source, id + '_tint_1', id + '_tint_2']);\n    filter.appendChild(feMerge);\n  }\n\n  extendPrototype([SVGComposableEffect], SVGTintFilter);\n\n  SVGTintFilter.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      var colorBlack = this.filterManager.effectElements[0].p.v;\n      var colorWhite = this.filterManager.effectElements[1].p.v;\n      var opacity = this.filterManager.effectElements[2].p.v / 100;\n      this.linearFilter.setAttribute('values', linearFilterValue + ' ' + opacity + ' 0');\n      this.matrixFilter.setAttribute('values', colorWhite[0] - colorBlack[0] + ' 0 0 0 ' + colorBlack[0] + ' ' + (colorWhite[1] - colorBlack[1]) + ' 0 0 0 ' + colorBlack[1] + ' ' + (colorWhite[2] - colorBlack[2]) + ' 0 0 0 ' + colorBlack[2] + ' 0 0 0 1 0');\n    }\n  };\n\n  function SVGFillFilter(filter, filterManager, elem, id) {\n    this.filterManager = filterManager;\n    var feColorMatrix = createNS('feColorMatrix');\n    feColorMatrix.setAttribute('type', 'matrix');\n    feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n    feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n    feColorMatrix.setAttribute('result', id);\n    filter.appendChild(feColorMatrix);\n    this.matrixFilter = feColorMatrix;\n  }\n\n  SVGFillFilter.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      var color = this.filterManager.effectElements[2].p.v;\n      var opacity = this.filterManager.effectElements[6].p.v;\n      this.matrixFilter.setAttribute('values', '0 0 0 0 ' + color[0] + ' 0 0 0 0 ' + color[1] + ' 0 0 0 0 ' + color[2] + ' 0 0 0 ' + opacity + ' 0');\n    }\n  };\n\n  function SVGStrokeEffect(fil, filterManager, elem) {\n    this.initialized = false;\n    this.filterManager = filterManager;\n    this.elem = elem;\n    this.paths = [];\n  }\n\n  SVGStrokeEffect.prototype.initialize = function () {\n    var elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n    var path;\n    var groupPath;\n    var i;\n    var len;\n\n    if (this.filterManager.effectElements[1].p.v === 1) {\n      len = this.elem.maskManager.masksProperties.length;\n      i = 0;\n    } else {\n      i = this.filterManager.effectElements[0].p.v - 1;\n      len = i + 1;\n    }\n\n    groupPath = createNS('g');\n    groupPath.setAttribute('fill', 'none');\n    groupPath.setAttribute('stroke-linecap', 'round');\n    groupPath.setAttribute('stroke-dashoffset', 1);\n\n    for (i; i < len; i += 1) {\n      path = createNS('path');\n      groupPath.appendChild(path);\n      this.paths.push({\n        p: path,\n        m: i\n      });\n    }\n\n    if (this.filterManager.effectElements[10].p.v === 3) {\n      var mask = createNS('mask');\n      var id = createElementID();\n      mask.setAttribute('id', id);\n      mask.setAttribute('mask-type', 'alpha');\n      mask.appendChild(groupPath);\n      this.elem.globalData.defs.appendChild(mask);\n      var g = createNS('g');\n      g.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n\n      while (elemChildren[0]) {\n        g.appendChild(elemChildren[0]);\n      }\n\n      this.elem.layerElement.appendChild(g);\n      this.masker = mask;\n      groupPath.setAttribute('stroke', '#fff');\n    } else if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n      if (this.filterManager.effectElements[10].p.v === 2) {\n        elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n\n        while (elemChildren.length) {\n          this.elem.layerElement.removeChild(elemChildren[0]);\n        }\n      }\n\n      this.elem.layerElement.appendChild(groupPath);\n      this.elem.layerElement.removeAttribute('mask');\n      groupPath.setAttribute('stroke', '#fff');\n    }\n\n    this.initialized = true;\n    this.pathMasker = groupPath;\n  };\n\n  SVGStrokeEffect.prototype.renderFrame = function (forceRender) {\n    if (!this.initialized) {\n      this.initialize();\n    }\n\n    var i;\n    var len = this.paths.length;\n    var mask;\n    var path;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.paths[i].m !== -1) {\n        mask = this.elem.maskManager.viewData[this.paths[i].m];\n        path = this.paths[i].p;\n\n        if (forceRender || this.filterManager._mdf || mask.prop._mdf) {\n          path.setAttribute('d', mask.lastPath);\n        }\n\n        if (forceRender || this.filterManager.effectElements[9].p._mdf || this.filterManager.effectElements[4].p._mdf || this.filterManager.effectElements[7].p._mdf || this.filterManager.effectElements[8].p._mdf || mask.prop._mdf) {\n          var dasharrayValue;\n\n          if (this.filterManager.effectElements[7].p.v !== 0 || this.filterManager.effectElements[8].p.v !== 100) {\n            var s = Math.min(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n            var e = Math.max(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n            var l = path.getTotalLength();\n            dasharrayValue = '0 0 0 ' + l * s + ' ';\n            var lineLength = l * (e - s);\n            var segment = 1 + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n            var units = Math.floor(lineLength / segment);\n            var j;\n\n            for (j = 0; j < units; j += 1) {\n              dasharrayValue += '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01 + ' ';\n            }\n\n            dasharrayValue += '0 ' + l * 10 + ' 0 0';\n          } else {\n            dasharrayValue = '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n          }\n\n          path.setAttribute('stroke-dasharray', dasharrayValue);\n        }\n      }\n    }\n\n    if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n      this.pathMasker.setAttribute('stroke-width', this.filterManager.effectElements[4].p.v * 2);\n    }\n\n    if (forceRender || this.filterManager.effectElements[6].p._mdf) {\n      this.pathMasker.setAttribute('opacity', this.filterManager.effectElements[6].p.v);\n    }\n\n    if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n      if (forceRender || this.filterManager.effectElements[3].p._mdf) {\n        var color = this.filterManager.effectElements[3].p.v;\n        this.pathMasker.setAttribute('stroke', 'rgb(' + bmFloor(color[0] * 255) + ',' + bmFloor(color[1] * 255) + ',' + bmFloor(color[2] * 255) + ')');\n      }\n    }\n  };\n\n  function SVGTritoneFilter(filter, filterManager, elem, id) {\n    this.filterManager = filterManager;\n    var feColorMatrix = createNS('feColorMatrix');\n    feColorMatrix.setAttribute('type', 'matrix');\n    feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n    feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');\n    filter.appendChild(feColorMatrix);\n    var feComponentTransfer = createNS('feComponentTransfer');\n    feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n    feComponentTransfer.setAttribute('result', id);\n    this.matrixFilter = feComponentTransfer;\n    var feFuncR = createNS('feFuncR');\n    feFuncR.setAttribute('type', 'table');\n    feComponentTransfer.appendChild(feFuncR);\n    this.feFuncR = feFuncR;\n    var feFuncG = createNS('feFuncG');\n    feFuncG.setAttribute('type', 'table');\n    feComponentTransfer.appendChild(feFuncG);\n    this.feFuncG = feFuncG;\n    var feFuncB = createNS('feFuncB');\n    feFuncB.setAttribute('type', 'table');\n    feComponentTransfer.appendChild(feFuncB);\n    this.feFuncB = feFuncB;\n    filter.appendChild(feComponentTransfer);\n  }\n\n  SVGTritoneFilter.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      var color1 = this.filterManager.effectElements[0].p.v;\n      var color2 = this.filterManager.effectElements[1].p.v;\n      var color3 = this.filterManager.effectElements[2].p.v;\n      var tableR = color3[0] + ' ' + color2[0] + ' ' + color1[0];\n      var tableG = color3[1] + ' ' + color2[1] + ' ' + color1[1];\n      var tableB = color3[2] + ' ' + color2[2] + ' ' + color1[2];\n      this.feFuncR.setAttribute('tableValues', tableR);\n      this.feFuncG.setAttribute('tableValues', tableG);\n      this.feFuncB.setAttribute('tableValues', tableB);\n    }\n  };\n\n  function SVGProLevelsFilter(filter, filterManager, elem, id) {\n    this.filterManager = filterManager;\n    var effectElements = this.filterManager.effectElements;\n    var feComponentTransfer = createNS('feComponentTransfer'); // Red\n\n    if (effectElements[10].p.k || effectElements[10].p.v !== 0 || effectElements[11].p.k || effectElements[11].p.v !== 1 || effectElements[12].p.k || effectElements[12].p.v !== 1 || effectElements[13].p.k || effectElements[13].p.v !== 0 || effectElements[14].p.k || effectElements[14].p.v !== 1) {\n      this.feFuncR = this.createFeFunc('feFuncR', feComponentTransfer);\n    } // Green\n\n\n    if (effectElements[17].p.k || effectElements[17].p.v !== 0 || effectElements[18].p.k || effectElements[18].p.v !== 1 || effectElements[19].p.k || effectElements[19].p.v !== 1 || effectElements[20].p.k || effectElements[20].p.v !== 0 || effectElements[21].p.k || effectElements[21].p.v !== 1) {\n      this.feFuncG = this.createFeFunc('feFuncG', feComponentTransfer);\n    } // Blue\n\n\n    if (effectElements[24].p.k || effectElements[24].p.v !== 0 || effectElements[25].p.k || effectElements[25].p.v !== 1 || effectElements[26].p.k || effectElements[26].p.v !== 1 || effectElements[27].p.k || effectElements[27].p.v !== 0 || effectElements[28].p.k || effectElements[28].p.v !== 1) {\n      this.feFuncB = this.createFeFunc('feFuncB', feComponentTransfer);\n    } // Alpha\n\n\n    if (effectElements[31].p.k || effectElements[31].p.v !== 0 || effectElements[32].p.k || effectElements[32].p.v !== 1 || effectElements[33].p.k || effectElements[33].p.v !== 1 || effectElements[34].p.k || effectElements[34].p.v !== 0 || effectElements[35].p.k || effectElements[35].p.v !== 1) {\n      this.feFuncA = this.createFeFunc('feFuncA', feComponentTransfer);\n    } // RGB\n\n\n    if (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) {\n      feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n      filter.appendChild(feComponentTransfer);\n    }\n\n    if (effectElements[3].p.k || effectElements[3].p.v !== 0 || effectElements[4].p.k || effectElements[4].p.v !== 1 || effectElements[5].p.k || effectElements[5].p.v !== 1 || effectElements[6].p.k || effectElements[6].p.v !== 0 || effectElements[7].p.k || effectElements[7].p.v !== 1) {\n      feComponentTransfer = createNS('feComponentTransfer');\n      feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n      feComponentTransfer.setAttribute('result', id);\n      filter.appendChild(feComponentTransfer);\n      this.feFuncRComposed = this.createFeFunc('feFuncR', feComponentTransfer);\n      this.feFuncGComposed = this.createFeFunc('feFuncG', feComponentTransfer);\n      this.feFuncBComposed = this.createFeFunc('feFuncB', feComponentTransfer);\n    }\n  }\n\n  SVGProLevelsFilter.prototype.createFeFunc = function (type, feComponentTransfer) {\n    var feFunc = createNS(type);\n    feFunc.setAttribute('type', 'table');\n    feComponentTransfer.appendChild(feFunc);\n    return feFunc;\n  };\n\n  SVGProLevelsFilter.prototype.getTableValue = function (inputBlack, inputWhite, gamma, outputBlack, outputWhite) {\n    var cnt = 0;\n    var segments = 256;\n    var perc;\n    var min = Math.min(inputBlack, inputWhite);\n    var max = Math.max(inputBlack, inputWhite);\n    var table = Array.call(null, {\n      length: segments\n    });\n    var colorValue;\n    var pos = 0;\n    var outputDelta = outputWhite - outputBlack;\n    var inputDelta = inputWhite - inputBlack;\n\n    while (cnt <= 256) {\n      perc = cnt / 256;\n\n      if (perc <= min) {\n        colorValue = inputDelta < 0 ? outputWhite : outputBlack;\n      } else if (perc >= max) {\n        colorValue = inputDelta < 0 ? outputBlack : outputWhite;\n      } else {\n        colorValue = outputBlack + outputDelta * Math.pow((perc - inputBlack) / inputDelta, 1 / gamma);\n      }\n\n      table[pos] = colorValue;\n      pos += 1;\n      cnt += 256 / (segments - 1);\n    }\n\n    return table.join(' ');\n  };\n\n  SVGProLevelsFilter.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      var val;\n      var effectElements = this.filterManager.effectElements;\n\n      if (this.feFuncRComposed && (forceRender || effectElements[3].p._mdf || effectElements[4].p._mdf || effectElements[5].p._mdf || effectElements[6].p._mdf || effectElements[7].p._mdf)) {\n        val = this.getTableValue(effectElements[3].p.v, effectElements[4].p.v, effectElements[5].p.v, effectElements[6].p.v, effectElements[7].p.v);\n        this.feFuncRComposed.setAttribute('tableValues', val);\n        this.feFuncGComposed.setAttribute('tableValues', val);\n        this.feFuncBComposed.setAttribute('tableValues', val);\n      }\n\n      if (this.feFuncR && (forceRender || effectElements[10].p._mdf || effectElements[11].p._mdf || effectElements[12].p._mdf || effectElements[13].p._mdf || effectElements[14].p._mdf)) {\n        val = this.getTableValue(effectElements[10].p.v, effectElements[11].p.v, effectElements[12].p.v, effectElements[13].p.v, effectElements[14].p.v);\n        this.feFuncR.setAttribute('tableValues', val);\n      }\n\n      if (this.feFuncG && (forceRender || effectElements[17].p._mdf || effectElements[18].p._mdf || effectElements[19].p._mdf || effectElements[20].p._mdf || effectElements[21].p._mdf)) {\n        val = this.getTableValue(effectElements[17].p.v, effectElements[18].p.v, effectElements[19].p.v, effectElements[20].p.v, effectElements[21].p.v);\n        this.feFuncG.setAttribute('tableValues', val);\n      }\n\n      if (this.feFuncB && (forceRender || effectElements[24].p._mdf || effectElements[25].p._mdf || effectElements[26].p._mdf || effectElements[27].p._mdf || effectElements[28].p._mdf)) {\n        val = this.getTableValue(effectElements[24].p.v, effectElements[25].p.v, effectElements[26].p.v, effectElements[27].p.v, effectElements[28].p.v);\n        this.feFuncB.setAttribute('tableValues', val);\n      }\n\n      if (this.feFuncA && (forceRender || effectElements[31].p._mdf || effectElements[32].p._mdf || effectElements[33].p._mdf || effectElements[34].p._mdf || effectElements[35].p._mdf)) {\n        val = this.getTableValue(effectElements[31].p.v, effectElements[32].p.v, effectElements[33].p.v, effectElements[34].p.v, effectElements[35].p.v);\n        this.feFuncA.setAttribute('tableValues', val);\n      }\n    }\n  };\n\n  function SVGDropShadowEffect(filter, filterManager, elem, id, source) {\n    var globalFilterSize = filterManager.container.globalData.renderConfig.filterSize;\n    var filterSize = filterManager.data.fs || globalFilterSize;\n    filter.setAttribute('x', filterSize.x || globalFilterSize.x);\n    filter.setAttribute('y', filterSize.y || globalFilterSize.y);\n    filter.setAttribute('width', filterSize.width || globalFilterSize.width);\n    filter.setAttribute('height', filterSize.height || globalFilterSize.height);\n    this.filterManager = filterManager;\n    var feGaussianBlur = createNS('feGaussianBlur');\n    feGaussianBlur.setAttribute('in', 'SourceAlpha');\n    feGaussianBlur.setAttribute('result', id + '_drop_shadow_1');\n    feGaussianBlur.setAttribute('stdDeviation', '0');\n    this.feGaussianBlur = feGaussianBlur;\n    filter.appendChild(feGaussianBlur);\n    var feOffset = createNS('feOffset');\n    feOffset.setAttribute('dx', '25');\n    feOffset.setAttribute('dy', '0');\n    feOffset.setAttribute('in', id + '_drop_shadow_1');\n    feOffset.setAttribute('result', id + '_drop_shadow_2');\n    this.feOffset = feOffset;\n    filter.appendChild(feOffset);\n    var feFlood = createNS('feFlood');\n    feFlood.setAttribute('flood-color', '#00ff00');\n    feFlood.setAttribute('flood-opacity', '1');\n    feFlood.setAttribute('result', id + '_drop_shadow_3');\n    this.feFlood = feFlood;\n    filter.appendChild(feFlood);\n    var feComposite = createNS('feComposite');\n    feComposite.setAttribute('in', id + '_drop_shadow_3');\n    feComposite.setAttribute('in2', id + '_drop_shadow_2');\n    feComposite.setAttribute('operator', 'in');\n    feComposite.setAttribute('result', id + '_drop_shadow_4');\n    filter.appendChild(feComposite);\n    var feMerge = this.createMergeNode(id, [id + '_drop_shadow_4', source]);\n    filter.appendChild(feMerge); //\n  }\n\n  extendPrototype([SVGComposableEffect], SVGDropShadowEffect);\n\n  SVGDropShadowEffect.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n        this.feGaussianBlur.setAttribute('stdDeviation', this.filterManager.effectElements[4].p.v / 4);\n      }\n\n      if (forceRender || this.filterManager.effectElements[0].p._mdf) {\n        var col = this.filterManager.effectElements[0].p.v;\n        this.feFlood.setAttribute('flood-color', rgbToHex(Math.round(col[0] * 255), Math.round(col[1] * 255), Math.round(col[2] * 255)));\n      }\n\n      if (forceRender || this.filterManager.effectElements[1].p._mdf) {\n        this.feFlood.setAttribute('flood-opacity', this.filterManager.effectElements[1].p.v / 255);\n      }\n\n      if (forceRender || this.filterManager.effectElements[2].p._mdf || this.filterManager.effectElements[3].p._mdf) {\n        var distance = this.filterManager.effectElements[3].p.v;\n        var angle = (this.filterManager.effectElements[2].p.v - 90) * degToRads;\n        var x = distance * Math.cos(angle);\n        var y = distance * Math.sin(angle);\n        this.feOffset.setAttribute('dx', x);\n        this.feOffset.setAttribute('dy', y);\n      }\n    }\n  };\n\n  var _svgMatteSymbols = [];\n\n  function SVGMatte3Effect(filterElem, filterManager, elem) {\n    this.initialized = false;\n    this.filterManager = filterManager;\n    this.filterElem = filterElem;\n    this.elem = elem;\n    elem.matteElement = createNS('g');\n    elem.matteElement.appendChild(elem.layerElement);\n    elem.matteElement.appendChild(elem.transformedElement);\n    elem.baseElement = elem.matteElement;\n  }\n\n  SVGMatte3Effect.prototype.findSymbol = function (mask) {\n    var i = 0;\n    var len = _svgMatteSymbols.length;\n\n    while (i < len) {\n      if (_svgMatteSymbols[i] === mask) {\n        return _svgMatteSymbols[i];\n      }\n\n      i += 1;\n    }\n\n    return null;\n  };\n\n  SVGMatte3Effect.prototype.replaceInParent = function (mask, symbolId) {\n    var parentNode = mask.layerElement.parentNode;\n\n    if (!parentNode) {\n      return;\n    }\n\n    var children = parentNode.children;\n    var i = 0;\n    var len = children.length;\n\n    while (i < len) {\n      if (children[i] === mask.layerElement) {\n        break;\n      }\n\n      i += 1;\n    }\n\n    var nextChild;\n\n    if (i <= len - 2) {\n      nextChild = children[i + 1];\n    }\n\n    var useElem = createNS('use');\n    useElem.setAttribute('href', '#' + symbolId);\n\n    if (nextChild) {\n      parentNode.insertBefore(useElem, nextChild);\n    } else {\n      parentNode.appendChild(useElem);\n    }\n  };\n\n  SVGMatte3Effect.prototype.setElementAsMask = function (elem, mask) {\n    if (!this.findSymbol(mask)) {\n      var symbolId = createElementID();\n      var masker = createNS('mask');\n      masker.setAttribute('id', mask.layerId);\n      masker.setAttribute('mask-type', 'alpha');\n\n      _svgMatteSymbols.push(mask);\n\n      var defs = elem.globalData.defs;\n      defs.appendChild(masker);\n      var symbol = createNS('symbol');\n      symbol.setAttribute('id', symbolId);\n      this.replaceInParent(mask, symbolId);\n      symbol.appendChild(mask.layerElement);\n      defs.appendChild(symbol);\n      var useElem = createNS('use');\n      useElem.setAttribute('href', '#' + symbolId);\n      masker.appendChild(useElem);\n      mask.data.hd = false;\n      mask.show();\n    }\n\n    elem.setMatte(mask.layerId);\n  };\n\n  SVGMatte3Effect.prototype.initialize = function () {\n    var ind = this.filterManager.effectElements[0].p.v;\n    var elements = this.elem.comp.elements;\n    var i = 0;\n    var len = elements.length;\n\n    while (i < len) {\n      if (elements[i] && elements[i].data.ind === ind) {\n        this.setElementAsMask(this.elem, elements[i]);\n      }\n\n      i += 1;\n    }\n\n    this.initialized = true;\n  };\n\n  SVGMatte3Effect.prototype.renderFrame = function () {\n    if (!this.initialized) {\n      this.initialize();\n    }\n  };\n\n  function SVGGaussianBlurEffect(filter, filterManager, elem, id) {\n    // Outset the filter region by 100% on all sides to accommodate blur expansion.\n    filter.setAttribute('x', '-100%');\n    filter.setAttribute('y', '-100%');\n    filter.setAttribute('width', '300%');\n    filter.setAttribute('height', '300%');\n    this.filterManager = filterManager;\n    var feGaussianBlur = createNS('feGaussianBlur');\n    feGaussianBlur.setAttribute('result', id);\n    filter.appendChild(feGaussianBlur);\n    this.feGaussianBlur = feGaussianBlur;\n  }\n\n  SVGGaussianBlurEffect.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      // Empirical value, matching AE's blur appearance.\n      var kBlurrinessToSigma = 0.3;\n      var sigma = this.filterManager.effectElements[0].p.v * kBlurrinessToSigma; // Dimensions mapping:\n      //\n      //   1 -> horizontal & vertical\n      //   2 -> horizontal only\n      //   3 -> vertical only\n      //\n\n      var dimensions = this.filterManager.effectElements[1].p.v;\n      var sigmaX = dimensions == 3 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n      var sigmaY = dimensions == 2 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n      this.feGaussianBlur.setAttribute('stdDeviation', sigmaX + ' ' + sigmaY); // Repeat edges mapping:\n      //\n      //   0 -> off -> duplicate\n      //   1 -> on  -> wrap\n\n      var edgeMode = this.filterManager.effectElements[2].p.v == 1 ? 'wrap' : 'duplicate'; // eslint-disable-line eqeqeq\n\n      this.feGaussianBlur.setAttribute('edgeMode', edgeMode);\n    }\n  };\n\n  function TransformEffect() {}\n\n  TransformEffect.prototype.init = function (effectsManager) {\n    this.effectsManager = effectsManager;\n    this.type = effectTypes.TRANSFORM_EFFECT;\n    this.matrix = new Matrix();\n    this.opacity = -1;\n    this._mdf = false;\n    this._opMdf = false;\n  };\n\n  TransformEffect.prototype.renderFrame = function (forceFrame) {\n    this._opMdf = false;\n    this._mdf = false;\n\n    if (forceFrame || this.effectsManager._mdf) {\n      var effectElements = this.effectsManager.effectElements;\n      var anchor = effectElements[0].p.v;\n      var position = effectElements[1].p.v;\n      var isUniformScale = effectElements[2].p.v === 1;\n      var scaleHeight = effectElements[3].p.v;\n      var scaleWidth = isUniformScale ? scaleHeight : effectElements[4].p.v;\n      var skew = effectElements[5].p.v;\n      var skewAxis = effectElements[6].p.v;\n      var rotation = effectElements[7].p.v;\n      this.matrix.reset();\n      this.matrix.translate(-anchor[0], -anchor[1], anchor[2]);\n      this.matrix.scale(scaleWidth * 0.01, scaleHeight * 0.01, 1);\n      this.matrix.rotate(-rotation * degToRads);\n      this.matrix.skewFromAxis(-skew * degToRads, (skewAxis + 90) * degToRads);\n      this.matrix.translate(position[0], position[1], 0);\n      this._mdf = true;\n\n      if (this.opacity !== effectElements[8].p.v) {\n        this.opacity = effectElements[8].p.v;\n        this._opMdf = true;\n      }\n    }\n  };\n\n  function SVGTransformEffect(_, filterManager) {\n    this.init(filterManager);\n  }\n\n  extendPrototype([TransformEffect], SVGTransformEffect);\n\n  function CVTransformEffect(effectsManager) {\n    this.init(effectsManager);\n  }\n\n  extendPrototype([TransformEffect], CVTransformEffect);\n\n  registerRenderer('canvas', CanvasRenderer);\n  registerRenderer('html', HybridRenderer);\n  registerRenderer('svg', SVGRenderer); // Registering shape modifiers\n\n  ShapeModifiers.registerModifier('tm', TrimModifier);\n  ShapeModifiers.registerModifier('pb', PuckerAndBloatModifier);\n  ShapeModifiers.registerModifier('rp', RepeaterModifier);\n  ShapeModifiers.registerModifier('rd', RoundCornersModifier);\n  ShapeModifiers.registerModifier('zz', ZigZagModifier);\n  ShapeModifiers.registerModifier('op', OffsetPathModifier); // Registering expression plugin\n\n  setExpressionsPlugin(Expressions);\n  setExpressionInterfaces(getInterface);\n  initialize$1();\n  initialize(); // Registering svg effects\n\n  registerEffect$1(20, SVGTintFilter, true);\n  registerEffect$1(21, SVGFillFilter, true);\n  registerEffect$1(22, SVGStrokeEffect, false);\n  registerEffect$1(23, SVGTritoneFilter, true);\n  registerEffect$1(24, SVGProLevelsFilter, true);\n  registerEffect$1(25, SVGDropShadowEffect, true);\n  registerEffect$1(28, SVGMatte3Effect, false);\n  registerEffect$1(29, SVGGaussianBlurEffect, true);\n  registerEffect$1(35, SVGTransformEffect, false);\n  registerEffect(35, CVTransformEffect);\n\n  return lottie;\n\n}));\n","(function(){\r\n  var crypt = require('crypt'),\r\n      utf8 = require('charenc').utf8,\r\n      isBuffer = require('is-buffer'),\r\n      bin = require('charenc').bin,\r\n\r\n  // The core\r\n  md5 = function (message, options) {\r\n    // Convert to byte array\r\n    if (message.constructor == String)\r\n      if (options && options.encoding === 'binary')\r\n        message = bin.stringToBytes(message);\r\n      else\r\n        message = utf8.stringToBytes(message);\r\n    else if (isBuffer(message))\r\n      message = Array.prototype.slice.call(message, 0);\r\n    else if (!Array.isArray(message) && message.constructor !== Uint8Array)\r\n      message = message.toString();\r\n    // else, assume byte array already\r\n\r\n    var m = crypt.bytesToWords(message),\r\n        l = message.length * 8,\r\n        a =  1732584193,\r\n        b = -271733879,\r\n        c = -1732584194,\r\n        d =  271733878;\r\n\r\n    // Swap endian\r\n    for (var i = 0; i < m.length; i++) {\r\n      m[i] = ((m[i] <<  8) | (m[i] >>> 24)) & 0x00FF00FF |\r\n             ((m[i] << 24) | (m[i] >>>  8)) & 0xFF00FF00;\r\n    }\r\n\r\n    // Padding\r\n    m[l >>> 5] |= 0x80 << (l % 32);\r\n    m[(((l + 64) >>> 9) << 4) + 14] = l;\r\n\r\n    // Method shortcuts\r\n    var FF = md5._ff,\r\n        GG = md5._gg,\r\n        HH = md5._hh,\r\n        II = md5._ii;\r\n\r\n    for (var i = 0; i < m.length; i += 16) {\r\n\r\n      var aa = a,\r\n          bb = b,\r\n          cc = c,\r\n          dd = d;\r\n\r\n      a = FF(a, b, c, d, m[i+ 0],  7, -680876936);\r\n      d = FF(d, a, b, c, m[i+ 1], 12, -389564586);\r\n      c = FF(c, d, a, b, m[i+ 2], 17,  606105819);\r\n      b = FF(b, c, d, a, m[i+ 3], 22, -1044525330);\r\n      a = FF(a, b, c, d, m[i+ 4],  7, -176418897);\r\n      d = FF(d, a, b, c, m[i+ 5], 12,  1200080426);\r\n      c = FF(c, d, a, b, m[i+ 6], 17, -1473231341);\r\n      b = FF(b, c, d, a, m[i+ 7], 22, -45705983);\r\n      a = FF(a, b, c, d, m[i+ 8],  7,  1770035416);\r\n      d = FF(d, a, b, c, m[i+ 9], 12, -1958414417);\r\n      c = FF(c, d, a, b, m[i+10], 17, -42063);\r\n      b = FF(b, c, d, a, m[i+11], 22, -1990404162);\r\n      a = FF(a, b, c, d, m[i+12],  7,  1804603682);\r\n      d = FF(d, a, b, c, m[i+13], 12, -40341101);\r\n      c = FF(c, d, a, b, m[i+14], 17, -1502002290);\r\n      b = FF(b, c, d, a, m[i+15], 22,  1236535329);\r\n\r\n      a = GG(a, b, c, d, m[i+ 1],  5, -165796510);\r\n      d = GG(d, a, b, c, m[i+ 6],  9, -1069501632);\r\n      c = GG(c, d, a, b, m[i+11], 14,  643717713);\r\n      b = GG(b, c, d, a, m[i+ 0], 20, -373897302);\r\n      a = GG(a, b, c, d, m[i+ 5],  5, -701558691);\r\n      d = GG(d, a, b, c, m[i+10],  9,  38016083);\r\n      c = GG(c, d, a, b, m[i+15], 14, -660478335);\r\n      b = GG(b, c, d, a, m[i+ 4], 20, -405537848);\r\n      a = GG(a, b, c, d, m[i+ 9],  5,  568446438);\r\n      d = GG(d, a, b, c, m[i+14],  9, -1019803690);\r\n      c = GG(c, d, a, b, m[i+ 3], 14, -187363961);\r\n      b = GG(b, c, d, a, m[i+ 8], 20,  1163531501);\r\n      a = GG(a, b, c, d, m[i+13],  5, -1444681467);\r\n      d = GG(d, a, b, c, m[i+ 2],  9, -51403784);\r\n      c = GG(c, d, a, b, m[i+ 7], 14,  1735328473);\r\n      b = GG(b, c, d, a, m[i+12], 20, -1926607734);\r\n\r\n      a = HH(a, b, c, d, m[i+ 5],  4, -378558);\r\n      d = HH(d, a, b, c, m[i+ 8], 11, -2022574463);\r\n      c = HH(c, d, a, b, m[i+11], 16,  1839030562);\r\n      b = HH(b, c, d, a, m[i+14], 23, -35309556);\r\n      a = HH(a, b, c, d, m[i+ 1],  4, -1530992060);\r\n      d = HH(d, a, b, c, m[i+ 4], 11,  1272893353);\r\n      c = HH(c, d, a, b, m[i+ 7], 16, -155497632);\r\n      b = HH(b, c, d, a, m[i+10], 23, -1094730640);\r\n      a = HH(a, b, c, d, m[i+13],  4,  681279174);\r\n      d = HH(d, a, b, c, m[i+ 0], 11, -358537222);\r\n      c = HH(c, d, a, b, m[i+ 3], 16, -722521979);\r\n      b = HH(b, c, d, a, m[i+ 6], 23,  76029189);\r\n      a = HH(a, b, c, d, m[i+ 9],  4, -640364487);\r\n      d = HH(d, a, b, c, m[i+12], 11, -421815835);\r\n      c = HH(c, d, a, b, m[i+15], 16,  530742520);\r\n      b = HH(b, c, d, a, m[i+ 2], 23, -995338651);\r\n\r\n      a = II(a, b, c, d, m[i+ 0],  6, -198630844);\r\n      d = II(d, a, b, c, m[i+ 7], 10,  1126891415);\r\n      c = II(c, d, a, b, m[i+14], 15, -1416354905);\r\n      b = II(b, c, d, a, m[i+ 5], 21, -57434055);\r\n      a = II(a, b, c, d, m[i+12],  6,  1700485571);\r\n      d = II(d, a, b, c, m[i+ 3], 10, -1894986606);\r\n      c = II(c, d, a, b, m[i+10], 15, -1051523);\r\n      b = II(b, c, d, a, m[i+ 1], 21, -2054922799);\r\n      a = II(a, b, c, d, m[i+ 8],  6,  1873313359);\r\n      d = II(d, a, b, c, m[i+15], 10, -30611744);\r\n      c = II(c, d, a, b, m[i+ 6], 15, -1560198380);\r\n      b = II(b, c, d, a, m[i+13], 21,  1309151649);\r\n      a = II(a, b, c, d, m[i+ 4],  6, -145523070);\r\n      d = II(d, a, b, c, m[i+11], 10, -1120210379);\r\n      c = II(c, d, a, b, m[i+ 2], 15,  718787259);\r\n      b = II(b, c, d, a, m[i+ 9], 21, -343485551);\r\n\r\n      a = (a + aa) >>> 0;\r\n      b = (b + bb) >>> 0;\r\n      c = (c + cc) >>> 0;\r\n      d = (d + dd) >>> 0;\r\n    }\r\n\r\n    return crypt.endian([a, b, c, d]);\r\n  };\r\n\r\n  // Auxiliary functions\r\n  md5._ff  = function (a, b, c, d, x, s, t) {\r\n    var n = a + (b & c | ~b & d) + (x >>> 0) + t;\r\n    return ((n << s) | (n >>> (32 - s))) + b;\r\n  };\r\n  md5._gg  = function (a, b, c, d, x, s, t) {\r\n    var n = a + (b & d | c & ~d) + (x >>> 0) + t;\r\n    return ((n << s) | (n >>> (32 - s))) + b;\r\n  };\r\n  md5._hh  = function (a, b, c, d, x, s, t) {\r\n    var n = a + (b ^ c ^ d) + (x >>> 0) + t;\r\n    return ((n << s) | (n >>> (32 - s))) + b;\r\n  };\r\n  md5._ii  = function (a, b, c, d, x, s, t) {\r\n    var n = a + (c ^ (b | ~d)) + (x >>> 0) + t;\r\n    return ((n << s) | (n >>> (32 - s))) + b;\r\n  };\r\n\r\n  // Package private blocksize\r\n  md5._blocksize = 16;\r\n  md5._digestsize = 16;\r\n\r\n  module.exports = function (message, options) {\r\n    if (message === undefined || message === null)\r\n      throw new Error('Illegal argument ' + message);\r\n\r\n    var digestbytes = crypt.wordsToBytes(md5(message, options));\r\n    return options && options.asBytes ? digestbytes :\r\n        options && options.asString ? bin.bytesToString(digestbytes) :\r\n        crypt.bytesToHex(digestbytes);\r\n  };\r\n\r\n})();\r\n","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('mobx'), require('react'), require('react-dom')) :\n\ttypeof define === 'function' && define.amd ? define(['exports', 'mobx', 'react', 'react-dom'], factory) :\n\t(factory((global.mobxReact = {}),global.mobx,global.React,global.ReactDOM));\n}(this, (function (exports,mobx,React,reactDom) { 'use strict';\n\nvar React__default = 'default' in React ? React['default'] : React;\n\n// These functions can be stubbed out in specific environments\nvar unstable_batchedUpdates$1 = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n  return typeof obj;\n} : function (obj) {\n  return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\n\n\n\n\nvar asyncGenerator = function () {\n  function AwaitValue(value) {\n    this.value = value;\n  }\n\n  function AsyncGenerator(gen) {\n    var front, back;\n\n    function send(key, arg) {\n      return new Promise(function (resolve, reject) {\n        var request = {\n          key: key,\n          arg: arg,\n          resolve: resolve,\n          reject: reject,\n          next: null\n        };\n\n        if (back) {\n          back = back.next = request;\n        } else {\n          front = back = request;\n          resume(key, arg);\n        }\n      });\n    }\n\n    function resume(key, arg) {\n      try {\n        var result = gen[key](arg);\n        var value = result.value;\n\n        if (value instanceof AwaitValue) {\n          Promise.resolve(value.value).then(function (arg) {\n            resume(\"next\", arg);\n          }, function (arg) {\n            resume(\"throw\", arg);\n          });\n        } else {\n          settle(result.done ? \"return\" : \"normal\", result.value);\n        }\n      } catch (err) {\n        settle(\"throw\", err);\n      }\n    }\n\n    function settle(type, value) {\n      switch (type) {\n        case \"return\":\n          front.resolve({\n            value: value,\n            done: true\n          });\n          break;\n\n        case \"throw\":\n          front.reject(value);\n          break;\n\n        default:\n          front.resolve({\n            value: value,\n            done: false\n          });\n          break;\n      }\n\n      front = front.next;\n\n      if (front) {\n        resume(front.key, front.arg);\n      } else {\n        back = null;\n      }\n    }\n\n    this._invoke = send;\n\n    if (typeof gen.return !== \"function\") {\n      this.return = undefined;\n    }\n  }\n\n  if (typeof Symbol === \"function\" && Symbol.asyncIterator) {\n    AsyncGenerator.prototype[Symbol.asyncIterator] = function () {\n      return this;\n    };\n  }\n\n  AsyncGenerator.prototype.next = function (arg) {\n    return this._invoke(\"next\", arg);\n  };\n\n  AsyncGenerator.prototype.throw = function (arg) {\n    return this._invoke(\"throw\", arg);\n  };\n\n  AsyncGenerator.prototype.return = function (arg) {\n    return this._invoke(\"return\", arg);\n  };\n\n  return {\n    wrap: function (fn) {\n      return function () {\n        return new AsyncGenerator(fn.apply(this, arguments));\n      };\n    },\n    await: function (value) {\n      return new AwaitValue(value);\n    }\n  };\n}();\n\n\n\n\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n\n\n\n\n\n\n\n\nvar inherits = function (subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar possibleConstructorReturn = function (self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar EventEmitter = function () {\n    function EventEmitter() {\n        classCallCheck(this, EventEmitter);\n        this.listeners = [];\n    }\n\n    createClass(EventEmitter, [{\n        key: \"on\",\n        value: function on(cb) {\n            var _this = this;\n\n            this.listeners.push(cb);\n            return function () {\n                var index = _this.listeners.indexOf(cb);\n                if (index !== -1) _this.listeners.splice(index, 1);\n            };\n        }\n    }, {\n        key: \"emit\",\n        value: function emit(data) {\n            this.listeners.forEach(function (fn) {\n                return fn(data);\n            });\n        }\n    }]);\n    return EventEmitter;\n}();\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n'use strict';\n\nvar REACT_STATICS = {\n    childContextTypes: true,\n    contextTypes: true,\n    defaultProps: true,\n    displayName: true,\n    getDefaultProps: true,\n    mixins: true,\n    propTypes: true,\n    type: true\n};\n\nvar KNOWN_STATICS = {\n  name: true,\n  length: true,\n  prototype: true,\n  caller: true,\n  callee: true,\n  arguments: true,\n  arity: true\n};\n\nvar defineProperty$1 = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = getPrototypeOf && getPrototypeOf(Object);\n\nvar hoistNonReactStatics = function hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n    if (typeof sourceComponent !== 'string') { // don't hoist over string (html) components\n\n        if (objectPrototype) {\n            var inheritedComponent = getPrototypeOf(sourceComponent);\n            if (inheritedComponent && inheritedComponent !== objectPrototype) {\n                hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n            }\n        }\n\n        var keys = getOwnPropertyNames(sourceComponent);\n\n        if (getOwnPropertySymbols) {\n            keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n        }\n\n        for (var i = 0; i < keys.length; ++i) {\n            var key = keys[i];\n            if (!REACT_STATICS[key] && !KNOWN_STATICS[key] && (!blacklist || !blacklist[key])) {\n                var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n                try { // Avoid failures from read-only properties\n                    defineProperty$1(targetComponent, key, descriptor);\n                } catch (e) {}\n            }\n        }\n\n        return targetComponent;\n    }\n\n    return targetComponent;\n};\n\n// Copied from React.PropTypes\nfunction createChainableTypeChecker(validate) {\n    function checkType(isRequired, props, propName, componentName, location, propFullName) {\n        for (var _len = arguments.length, rest = Array(_len > 6 ? _len - 6 : 0), _key = 6; _key < _len; _key++) {\n            rest[_key - 6] = arguments[_key];\n        }\n\n        return mobx.untracked(function () {\n            componentName = componentName || \"<<anonymous>>\";\n            propFullName = propFullName || propName;\n            if (props[propName] == null) {\n                if (isRequired) {\n                    var actual = props[propName] === null ? \"null\" : \"undefined\";\n                    return new Error(\"The \" + location + \" `\" + propFullName + \"` is marked as required \" + \"in `\" + componentName + \"`, but its value is `\" + actual + \"`.\");\n                }\n                return null;\n            } else {\n                return validate.apply(undefined, [props, propName, componentName, location, propFullName].concat(rest));\n            }\n        });\n    }\n\n    var chainedCheckType = checkType.bind(null, false);\n    chainedCheckType.isRequired = checkType.bind(null, true);\n    return chainedCheckType;\n}\n\n// Copied from React.PropTypes\nfunction isSymbol(propType, propValue) {\n    // Native Symbol.\n    if (propType === \"symbol\") {\n        return true;\n    }\n\n    // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n    if (propValue[\"@@toStringTag\"] === \"Symbol\") {\n        return true;\n    }\n\n    // Fallback for non-spec compliant Symbols which are polyfilled.\n    if (typeof Symbol === \"function\" && propValue instanceof Symbol) {\n        return true;\n    }\n\n    return false;\n}\n\n// Copied from React.PropTypes\nfunction getPropType(propValue) {\n    var propType = typeof propValue === \"undefined\" ? \"undefined\" : _typeof(propValue);\n    if (Array.isArray(propValue)) {\n        return \"array\";\n    }\n    if (propValue instanceof RegExp) {\n        // Old webkits (at least until Android 4.0) return 'function' rather than\n        // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n        // passes PropTypes.object.\n        return \"object\";\n    }\n    if (isSymbol(propType, propValue)) {\n        return \"symbol\";\n    }\n    return propType;\n}\n\n// This handles more types than `getPropType`. Only used for error messages.\n// Copied from React.PropTypes\nfunction getPreciseType(propValue) {\n    var propType = getPropType(propValue);\n    if (propType === \"object\") {\n        if (propValue instanceof Date) {\n            return \"date\";\n        } else if (propValue instanceof RegExp) {\n            return \"regexp\";\n        }\n    }\n    return propType;\n}\n\nfunction createObservableTypeCheckerCreator(allowNativeType, mobxType) {\n    return createChainableTypeChecker(function (props, propName, componentName, location, propFullName) {\n        return mobx.untracked(function () {\n            if (allowNativeType) {\n                if (getPropType(props[propName]) === mobxType.toLowerCase()) return null;\n            }\n            var mobxChecker = void 0;\n            switch (mobxType) {\n                case \"Array\":\n                    mobxChecker = mobx.isObservableArray;\n                    break;\n                case \"Object\":\n                    mobxChecker = mobx.isObservableObject;\n                    break;\n                case \"Map\":\n                    mobxChecker = mobx.isObservableMap;\n                    break;\n                default:\n                    throw new Error(\"Unexpected mobxType: \" + mobxType);\n            }\n            var propValue = props[propName];\n            if (!mobxChecker(propValue)) {\n                var preciseType = getPreciseType(propValue);\n                var nativeTypeExpectationMessage = allowNativeType ? \" or javascript `\" + mobxType.toLowerCase() + \"`\" : \"\";\n                return new Error(\"Invalid prop `\" + propFullName + \"` of type `\" + preciseType + \"` supplied to\" + \" `\" + componentName + \"`, expected `mobx.Observable\" + mobxType + \"`\" + nativeTypeExpectationMessage + \".\");\n            }\n            return null;\n        });\n    });\n}\n\nfunction createObservableArrayOfTypeChecker(allowNativeType, typeChecker) {\n    return createChainableTypeChecker(function (props, propName, componentName, location, propFullName) {\n        for (var _len2 = arguments.length, rest = Array(_len2 > 5 ? _len2 - 5 : 0), _key2 = 5; _key2 < _len2; _key2++) {\n            rest[_key2 - 5] = arguments[_key2];\n        }\n\n        return mobx.untracked(function () {\n            if (typeof typeChecker !== \"function\") {\n                return new Error(\"Property `\" + propFullName + \"` of component `\" + componentName + \"` has \" + \"invalid PropType notation.\");\n            }\n            var error = createObservableTypeCheckerCreator(allowNativeType, \"Array\")(props, propName, componentName);\n            if (error instanceof Error) return error;\n            var propValue = props[propName];\n            for (var i = 0; i < propValue.length; i++) {\n                error = typeChecker.apply(undefined, [propValue, i, componentName, location, propFullName + \"[\" + i + \"]\"].concat(rest));\n                if (error instanceof Error) return error;\n            }\n            return null;\n        });\n    });\n}\n\nvar observableArray = createObservableTypeCheckerCreator(false, \"Array\");\nvar observableArrayOf = createObservableArrayOfTypeChecker.bind(null, false);\nvar observableMap = createObservableTypeCheckerCreator(false, \"Map\");\nvar observableObject = createObservableTypeCheckerCreator(false, \"Object\");\nvar arrayOrObservableArray = createObservableTypeCheckerCreator(true, \"Array\");\nvar arrayOrObservableArrayOf = createObservableArrayOfTypeChecker.bind(null, true);\nvar objectOrObservableObject = createObservableTypeCheckerCreator(true, \"Object\");\n\n\n\nvar propTypes = Object.freeze({\n\tobservableArray: observableArray,\n\tobservableArrayOf: observableArrayOf,\n\tobservableMap: observableMap,\n\tobservableObject: observableObject,\n\tarrayOrObservableArray: arrayOrObservableArray,\n\tarrayOrObservableArrayOf: arrayOrObservableArrayOf,\n\tobjectOrObservableObject: objectOrObservableObject\n});\n\nfunction isStateless(component) {\n    // `function() {}` has prototype, but `() => {}` doesn't\n    // `() => {}` via Babel has prototype too.\n    return !(component.prototype && component.prototype.render);\n}\n\nvar injectorContextTypes = {\n    mobxStores: objectOrObservableObject\n};\nObject.seal(injectorContextTypes);\n\nvar proxiedInjectorProps = {\n    contextTypes: {\n        get: function get$$1() {\n            return injectorContextTypes;\n        },\n        set: function set$$1(_) {\n            console.warn(\"Mobx Injector: you are trying to attach `contextTypes` on an component decorated with `inject` (or `observer`) HOC. Please specify the contextTypes on the wrapped component instead. It is accessible through the `wrappedComponent`\");\n        },\n        configurable: true,\n        enumerable: false\n    },\n    isMobxInjector: {\n        value: true,\n        writable: true,\n        configurable: true,\n        enumerable: true\n    }\n\n    /**\n     * Store Injection\n     */\n};function createStoreInjector(grabStoresFn, component, injectNames) {\n    var _class, _temp2;\n\n    var displayName = \"inject-\" + (component.displayName || component.name || component.constructor && component.constructor.name || \"Unknown\");\n    if (injectNames) displayName += \"-with-\" + injectNames;\n\n    var Injector = (_temp2 = _class = function (_Component) {\n        inherits(Injector, _Component);\n\n        function Injector() {\n            var _ref;\n\n            var _temp, _this, _ret;\n\n            classCallCheck(this, Injector);\n\n            for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n                args[_key] = arguments[_key];\n            }\n\n            return _ret = (_temp = (_this = possibleConstructorReturn(this, (_ref = Injector.__proto__ || Object.getPrototypeOf(Injector)).call.apply(_ref, [this].concat(args))), _this), _this.storeRef = function (instance) {\n                _this.wrappedInstance = instance;\n            }, _temp), possibleConstructorReturn(_this, _ret);\n        }\n\n        createClass(Injector, [{\n            key: \"render\",\n            value: function render() {\n                // Optimization: it might be more efficient to apply the mapper function *outside* the render method\n                // (if the mapper is a function), that could avoid expensive(?) re-rendering of the injector component\n                // See this test: 'using a custom injector is not too reactive' in inject.js\n                var newProps = {};\n                for (var key in this.props) {\n                    if (this.props.hasOwnProperty(key)) {\n                        newProps[key] = this.props[key];\n                    }\n                }var additionalProps = grabStoresFn(this.context.mobxStores || {}, newProps, this.context) || {};\n                for (var _key2 in additionalProps) {\n                    newProps[_key2] = additionalProps[_key2];\n                }\n\n                if (!isStateless(component)) {\n                    newProps.ref = this.storeRef;\n                }\n\n                return React.createElement(component, newProps);\n            }\n        }]);\n        return Injector;\n    }(React.Component), _class.displayName = displayName, _temp2);\n\n    // Static fields from component should be visible on the generated Injector\n\n    hoistNonReactStatics(Injector, component);\n\n    Injector.wrappedComponent = component;\n    Object.defineProperties(Injector, proxiedInjectorProps);\n\n    return Injector;\n}\n\nfunction grabStoresByName(storeNames) {\n    return function (baseStores, nextProps) {\n        storeNames.forEach(function (storeName) {\n            if (storeName in nextProps // prefer props over stores\n            ) return;\n            if (!(storeName in baseStores)) throw new Error(\"MobX injector: Store '\" + storeName + \"' is not available! Make sure it is provided by some Provider\");\n            nextProps[storeName] = baseStores[storeName];\n        });\n        return nextProps;\n    };\n}\n\n/**\n * higher order component that injects stores to a child.\n * takes either a varargs list of strings, which are stores read from the context,\n * or a function that manually maps the available stores from the context to props:\n * storesToProps(mobxStores, props, context) => newProps\n */\nfunction inject() /* fn(stores, nextProps) or ...storeNames */{\n    var grabStoresFn = void 0;\n    if (typeof arguments[0] === \"function\") {\n        grabStoresFn = arguments[0];\n        return function (componentClass) {\n            var injected = createStoreInjector(grabStoresFn, componentClass);\n            injected.isMobxInjector = false; // supress warning\n            // mark the Injector as observer, to make it react to expressions in `grabStoresFn`,\n            // see #111\n            injected = observer(injected);\n            injected.isMobxInjector = true; // restore warning\n            return injected;\n        };\n    } else {\n        var storeNames = [];\n        for (var i = 0; i < arguments.length; i++) {\n            storeNames[i] = arguments[i];\n        }grabStoresFn = grabStoresByName(storeNames);\n        return function (componentClass) {\n            return createStoreInjector(grabStoresFn, componentClass, storeNames.join(\"-\"));\n        };\n    }\n}\n\n/**\n * dev tool support\n */\nvar isDevtoolsEnabled = false;\n\nvar isUsingStaticRendering = false;\n\nvar warnedAboutObserverInjectDeprecation = false;\n\n// WeakMap<Node, Object>;\nvar componentByNodeRegistery = typeof WeakMap !== \"undefined\" ? new WeakMap() : undefined;\nvar renderReporter = new EventEmitter();\n\nfunction findDOMNode$2(component) {\n    if (reactDom.findDOMNode) {\n        try {\n            return reactDom.findDOMNode(component);\n        } catch (e) {\n            // findDOMNode will throw in react-test-renderer, see:\n            // See https://github.com/mobxjs/mobx-react/issues/216\n            // Is there a better heuristic?\n            return null;\n        }\n    }\n    return null;\n}\n\nfunction reportRendering(component) {\n    var node = findDOMNode$2(component);\n    if (node && componentByNodeRegistery) componentByNodeRegistery.set(node, component);\n\n    renderReporter.emit({\n        event: \"render\",\n        renderTime: component.__$mobRenderEnd - component.__$mobRenderStart,\n        totalTime: Date.now() - component.__$mobRenderStart,\n        component: component,\n        node: node\n    });\n}\n\nfunction trackComponents() {\n    if (typeof WeakMap === \"undefined\") throw new Error(\"[mobx-react] tracking components is not supported in this browser.\");\n    if (!isDevtoolsEnabled) isDevtoolsEnabled = true;\n}\n\nfunction useStaticRendering(useStaticRendering) {\n    isUsingStaticRendering = useStaticRendering;\n}\n\n/**\n * Errors reporter\n */\n\nvar errorsReporter = new EventEmitter();\n\n/**\n * Utilities\n */\n\nfunction patch(target, funcName) {\n    var runMixinFirst = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n    var base = target[funcName];\n    var mixinFunc = reactiveMixin[funcName];\n    var f = !base ? mixinFunc : runMixinFirst === true ? function () {\n        mixinFunc.apply(this, arguments);\n        base.apply(this, arguments);\n    } : function () {\n        base.apply(this, arguments);\n        mixinFunc.apply(this, arguments);\n    };\n\n    // MWE: ideally we freeze here to protect against accidental overwrites in component instances, see #195\n    // ...but that breaks react-hot-loader, see #231...\n    target[funcName] = f;\n}\n\nfunction shallowEqual(objA, objB) {\n    //From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n    if (is(objA, objB)) return true;\n    if ((typeof objA === \"undefined\" ? \"undefined\" : _typeof(objA)) !== \"object\" || objA === null || (typeof objB === \"undefined\" ? \"undefined\" : _typeof(objB)) !== \"object\" || objB === null) {\n        return false;\n    }\n    var keysA = Object.keys(objA);\n    var keysB = Object.keys(objB);\n    if (keysA.length !== keysB.length) return false;\n    for (var i = 0; i < keysA.length; i++) {\n        if (!hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n            return false;\n        }\n    }\n    return true;\n}\n\nfunction is(x, y) {\n    // From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n    if (x === y) {\n        return x !== 0 || 1 / x === 1 / y;\n    } else {\n        return x !== x && y !== y;\n    }\n}\n\n/**\n * ReactiveMixin\n */\nvar reactiveMixin = {\n    componentWillMount: function componentWillMount() {\n        var _this = this;\n\n        if (isUsingStaticRendering === true) return;\n        // Generate friendly name for debugging\n        var initialName = this.displayName || this.name || this.constructor && (this.constructor.displayName || this.constructor.name) || \"<component>\";\n        var rootNodeID = this._reactInternalInstance && this._reactInternalInstance._rootNodeID || this._reactInternalFiber && this._reactInternalFiber._debugID;\n\n        /**\n         * If props are shallowly modified, react will render anyway,\n         * so atom.reportChanged() should not result in yet another re-render\n         */\n        var skipRender = false;\n        /**\n         * forceUpdate will re-assign this.props. We don't want that to cause a loop,\n         * so detect these changes\n         */\n        var isForcingUpdate = false;\n\n        function makePropertyObservableReference(propName) {\n            var valueHolder = this[propName];\n            var atom = new mobx.Atom(\"reactive \" + propName);\n            Object.defineProperty(this, propName, {\n                configurable: true,\n                enumerable: true,\n                get: function get$$1() {\n                    atom.reportObserved();\n                    return valueHolder;\n                },\n                set: function set$$1(v) {\n                    if (!isForcingUpdate && !shallowEqual(valueHolder, v)) {\n                        valueHolder = v;\n                        skipRender = true;\n                        atom.reportChanged();\n                        skipRender = false;\n                    } else {\n                        valueHolder = v;\n                    }\n                }\n            });\n        }\n\n        // make this.props an observable reference, see #124\n        makePropertyObservableReference.call(this, \"props\");\n        // make state an observable reference\n        makePropertyObservableReference.call(this, \"state\");\n\n        // wire up reactive render\n        var baseRender = this.render.bind(this);\n        var reaction = null;\n        var isRenderingPending = false;\n\n        var initialRender = function initialRender() {\n            reaction = new mobx.Reaction(initialName + \"#\" + rootNodeID + \".render()\", function () {\n                if (!isRenderingPending) {\n                    // N.B. Getting here *before mounting* means that a component constructor has side effects (see the relevant test in misc.js)\n                    // This unidiomatic React usage but React will correctly warn about this so we continue as usual\n                    // See #85 / Pull #44\n                    isRenderingPending = true;\n                    if (typeof _this.componentWillReact === \"function\") _this.componentWillReact(); // TODO: wrap in action?\n                    if (_this.__$mobxIsUnmounted !== true) {\n                        // If we are unmounted at this point, componentWillReact() had a side effect causing the component to unmounted\n                        // TODO: remove this check? Then react will properly warn about the fact that this should not happen? See #73\n                        // However, people also claim this migth happen during unit tests..\n                        var hasError = true;\n                        try {\n                            isForcingUpdate = true;\n                            if (!skipRender) React.Component.prototype.forceUpdate.call(_this);\n                            hasError = false;\n                        } finally {\n                            isForcingUpdate = false;\n                            if (hasError) reaction.dispose();\n                        }\n                    }\n                }\n            });\n            reaction.reactComponent = _this;\n            reactiveRender.$mobx = reaction;\n            _this.render = reactiveRender;\n            return reactiveRender();\n        };\n\n        var reactiveRender = function reactiveRender() {\n            isRenderingPending = false;\n            var exception = undefined;\n            var rendering = undefined;\n            reaction.track(function () {\n                if (isDevtoolsEnabled) {\n                    _this.__$mobRenderStart = Date.now();\n                }\n                try {\n                    rendering = mobx.extras.allowStateChanges(false, baseRender);\n                } catch (e) {\n                    exception = e;\n                }\n                if (isDevtoolsEnabled) {\n                    _this.__$mobRenderEnd = Date.now();\n                }\n            });\n            if (exception) {\n                errorsReporter.emit(exception);\n                throw exception;\n            }\n            return rendering;\n        };\n\n        this.render = initialRender;\n    },\n\n    componentWillUnmount: function componentWillUnmount() {\n        if (isUsingStaticRendering === true) return;\n        this.render.$mobx && this.render.$mobx.dispose();\n        this.__$mobxIsUnmounted = true;\n        if (isDevtoolsEnabled) {\n            var node = findDOMNode$2(this);\n            if (node && componentByNodeRegistery) {\n                componentByNodeRegistery.delete(node);\n            }\n            renderReporter.emit({\n                event: \"destroy\",\n                component: this,\n                node: node\n            });\n        }\n    },\n\n    componentDidMount: function componentDidMount() {\n        if (isDevtoolsEnabled) {\n            reportRendering(this);\n        }\n    },\n\n    componentDidUpdate: function componentDidUpdate() {\n        if (isDevtoolsEnabled) {\n            reportRendering(this);\n        }\n    },\n\n    shouldComponentUpdate: function shouldComponentUpdate(nextProps, nextState) {\n        if (isUsingStaticRendering) {\n            console.warn(\"[mobx-react] It seems that a re-rendering of a React component is triggered while in static (server-side) mode. Please make sure components are rendered only once server-side.\");\n        }\n        // update on any state changes (as is the default)\n        if (this.state !== nextState) {\n            return true;\n        }\n        // update if props are shallowly not equal, inspired by PureRenderMixin\n        // we could return just 'false' here, and avoid the `skipRender` checks etc\n        // however, it is nicer if lifecycle events are triggered like usually,\n        // so we return true here if props are shallowly modified.\n        return !shallowEqual(this.props, nextProps);\n    }\n\n    /**\n     * Observer function / decorator\n     */\n};function observer(arg1, arg2) {\n    if (typeof arg1 === \"string\") {\n        throw new Error(\"Store names should be provided as array\");\n    }\n    if (Array.isArray(arg1)) {\n        // component needs stores\n        if (!warnedAboutObserverInjectDeprecation) {\n            warnedAboutObserverInjectDeprecation = true;\n            console.warn('Mobx observer: Using observer to inject stores is deprecated since 4.0. Use `@inject(\"store1\", \"store2\") @observer ComponentClass` or `inject(\"store1\", \"store2\")(observer(componentClass))` instead of `@observer([\"store1\", \"store2\"]) ComponentClass`');\n        }\n        if (!arg2) {\n            // invoked as decorator\n            return function (componentClass) {\n                return observer(arg1, componentClass);\n            };\n        } else {\n            return inject.apply(null, arg1)(observer(arg2));\n        }\n    }\n    var componentClass = arg1;\n\n    if (componentClass.isMobxInjector === true) {\n        console.warn(\"Mobx observer: You are trying to use 'observer' on a component that already has 'inject'. Please apply 'observer' before applying 'inject'\");\n    }\n\n    // Stateless function component:\n    // If it is function but doesn't seem to be a react class constructor,\n    // wrap it to a react class automatically\n    if (typeof componentClass === \"function\" && (!componentClass.prototype || !componentClass.prototype.render) && !componentClass.isReactClass && !React.Component.isPrototypeOf(componentClass)) {\n        var _class, _temp;\n\n        return observer((_temp = _class = function (_Component) {\n            inherits(_class, _Component);\n\n            function _class() {\n                classCallCheck(this, _class);\n                return possibleConstructorReturn(this, (_class.__proto__ || Object.getPrototypeOf(_class)).apply(this, arguments));\n            }\n\n            createClass(_class, [{\n                key: \"render\",\n                value: function render() {\n                    return componentClass.call(this, this.props, this.context);\n                }\n            }]);\n            return _class;\n        }(React.Component), _class.displayName = componentClass.displayName || componentClass.name, _class.contextTypes = componentClass.contextTypes, _class.propTypes = componentClass.propTypes, _class.defaultProps = componentClass.defaultProps, _temp));\n    }\n\n    if (!componentClass) {\n        throw new Error(\"Please pass a valid component to 'observer'\");\n    }\n\n    var target = componentClass.prototype || componentClass;\n    mixinLifecycleEvents(target);\n    componentClass.isMobXReactObserver = true;\n    return componentClass;\n}\n\nfunction mixinLifecycleEvents(target) {\n    patch(target, \"componentWillMount\", true);[\"componentDidMount\", \"componentWillUnmount\", \"componentDidUpdate\"].forEach(function (funcName) {\n        patch(target, funcName);\n    });\n    if (!target.shouldComponentUpdate) {\n        target.shouldComponentUpdate = reactiveMixin.shouldComponentUpdate;\n    }\n}\n\n// TODO: support injection somehow as well?\nvar Observer = observer(function (_ref) {\n    var children = _ref.children,\n        observerInject = _ref.inject,\n        render = _ref.render;\n\n    var component = children || render;\n    if (typeof component === \"undefined\") {\n        return null;\n    }\n    if (!observerInject) {\n        return component();\n    }\n    var InjectComponent = inject(observerInject)(component);\n    return React__default.createElement(InjectComponent, null);\n});\n\nObserver.displayName = \"Observer\";\n\nvar ObserverPropsCheck = function ObserverPropsCheck(props, key, componentName, location, propFullName) {\n    var extraKey = key === \"children\" ? \"render\" : \"children\";\n    if (typeof props[key] === \"function\" && typeof props[extraKey] === \"function\") {\n        return new Error(\"Invalid prop,do not use children and render in the same time in`\" + componentName);\n    }\n\n    if (typeof props[key] === \"function\" || typeof props[extraKey] === \"function\") {\n        return;\n    }\n    return new Error(\"Invalid prop `\" + propFullName + \"` of type `\" + _typeof(props[key]) + \"` supplied to\" + \" `\" + componentName + \"`, expected `function`.\");\n};\n\nObserver.propTypes = {\n    render: ObserverPropsCheck,\n    children: ObserverPropsCheck\n};\n\nvar _class;\nvar _temp;\n\nvar specialReactKeys = { children: true, key: true, ref: true };\n\nvar Provider = (_temp = _class = function (_Component) {\n    inherits(Provider, _Component);\n\n    function Provider() {\n        classCallCheck(this, Provider);\n        return possibleConstructorReturn(this, (Provider.__proto__ || Object.getPrototypeOf(Provider)).apply(this, arguments));\n    }\n\n    createClass(Provider, [{\n        key: \"render\",\n        value: function render() {\n            return React.Children.only(this.props.children);\n        }\n    }, {\n        key: \"getChildContext\",\n        value: function getChildContext() {\n            var stores = {};\n            // inherit stores\n            var baseStores = this.context.mobxStores;\n            if (baseStores) for (var key in baseStores) {\n                stores[key] = baseStores[key];\n            }\n            // add own stores\n            for (var _key in this.props) {\n                if (!specialReactKeys[_key] && _key !== \"suppressChangedStoreWarning\") stores[_key] = this.props[_key];\n            }return {\n                mobxStores: stores\n            };\n        }\n    }, {\n        key: \"componentWillReceiveProps\",\n        value: function componentWillReceiveProps(nextProps) {\n            // Maybe this warning is too aggressive?\n            if (Object.keys(nextProps).length !== Object.keys(this.props).length) console.warn(\"MobX Provider: The set of provided stores has changed. Please avoid changing stores as the change might not propagate to all children\");\n            if (!nextProps.suppressChangedStoreWarning) for (var key in nextProps) {\n                if (!specialReactKeys[key] && this.props[key] !== nextProps[key]) console.warn(\"MobX Provider: Provided store '\" + key + \"' has changed. Please avoid replacing stores as the change might not propagate to all children\");\n            }\n        }\n    }]);\n    return Provider;\n}(React.Component), _class.contextTypes = {\n    mobxStores: objectOrObservableObject\n}, _class.childContextTypes = {\n    mobxStores: objectOrObservableObject.isRequired\n}, _temp);\n\nif (!React.Component) throw new Error(\"mobx-react requires React to be available\");\nif (!mobx.extras) throw new Error(\"mobx-react requires mobx to be available\");\n\nif (typeof reactDom.unstable_batchedUpdates === \"function\") mobx.extras.setReactionScheduler(reactDom.unstable_batchedUpdates);else if (typeof unstable_batchedUpdates$1 === \"function\") mobx.extras.setReactionScheduler(unstable_batchedUpdates$1);\n\nvar onError = function onError(fn) {\n    return errorsReporter.on(fn);\n};\n\n/* DevTool support */\n// See: https://github.com/andykog/mobx-devtools/blob/d8976c24b8cb727ed59f9a0bc905a009df79e221/src/backend/installGlobalHook.js\n\nif ((typeof __MOBX_DEVTOOLS_GLOBAL_HOOK__ === \"undefined\" ? \"undefined\" : _typeof(__MOBX_DEVTOOLS_GLOBAL_HOOK__)) === \"object\") {\n    var mobx$1 = { spy: mobx.spy, extras: mobx.extras };\n    var mobxReact = { renderReporter: renderReporter, componentByNodeRegistery: componentByNodeRegistery, trackComponents: trackComponents };\n    __MOBX_DEVTOOLS_GLOBAL_HOOK__.injectMobxReact(mobxReact, mobx$1);\n}\n\nexports.propTypes = propTypes;\nexports.PropTypes = propTypes;\nexports.onError = onError;\nexports.observer = observer;\nexports.Observer = Observer;\nexports.renderReporter = renderReporter;\nexports.componentByNodeRegistery = componentByNodeRegistery;\nexports.trackComponents = trackComponents;\nexports.useStaticRendering = useStaticRendering;\nexports.Provider = Provider;\nexports.inject = inject;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","import { Atom, Reaction, extras, isObservableArray, isObservableMap, isObservableObject, spy, untracked } from 'mobx';\nimport React, { Children, Component, createElement } from 'react';\nimport { findDOMNode, unstable_batchedUpdates } from 'react-dom';\n\n// These functions can be stubbed out in specific environments\nvar unstable_batchedUpdates$1 = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n  return typeof obj;\n} : function (obj) {\n  return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\n\n\n\n\nvar asyncGenerator = function () {\n  function AwaitValue(value) {\n    this.value = value;\n  }\n\n  function AsyncGenerator(gen) {\n    var front, back;\n\n    function send(key, arg) {\n      return new Promise(function (resolve, reject) {\n        var request = {\n          key: key,\n          arg: arg,\n          resolve: resolve,\n          reject: reject,\n          next: null\n        };\n\n        if (back) {\n          back = back.next = request;\n        } else {\n          front = back = request;\n          resume(key, arg);\n        }\n      });\n    }\n\n    function resume(key, arg) {\n      try {\n        var result = gen[key](arg);\n        var value = result.value;\n\n        if (value instanceof AwaitValue) {\n          Promise.resolve(value.value).then(function (arg) {\n            resume(\"next\", arg);\n          }, function (arg) {\n            resume(\"throw\", arg);\n          });\n        } else {\n          settle(result.done ? \"return\" : \"normal\", result.value);\n        }\n      } catch (err) {\n        settle(\"throw\", err);\n      }\n    }\n\n    function settle(type, value) {\n      switch (type) {\n        case \"return\":\n          front.resolve({\n            value: value,\n            done: true\n          });\n          break;\n\n        case \"throw\":\n          front.reject(value);\n          break;\n\n        default:\n          front.resolve({\n            value: value,\n            done: false\n          });\n          break;\n      }\n\n      front = front.next;\n\n      if (front) {\n        resume(front.key, front.arg);\n      } else {\n        back = null;\n      }\n    }\n\n    this._invoke = send;\n\n    if (typeof gen.return !== \"function\") {\n      this.return = undefined;\n    }\n  }\n\n  if (typeof Symbol === \"function\" && Symbol.asyncIterator) {\n    AsyncGenerator.prototype[Symbol.asyncIterator] = function () {\n      return this;\n    };\n  }\n\n  AsyncGenerator.prototype.next = function (arg) {\n    return this._invoke(\"next\", arg);\n  };\n\n  AsyncGenerator.prototype.throw = function (arg) {\n    return this._invoke(\"throw\", arg);\n  };\n\n  AsyncGenerator.prototype.return = function (arg) {\n    return this._invoke(\"return\", arg);\n  };\n\n  return {\n    wrap: function (fn) {\n      return function () {\n        return new AsyncGenerator(fn.apply(this, arguments));\n      };\n    },\n    await: function (value) {\n      return new AwaitValue(value);\n    }\n  };\n}();\n\n\n\n\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n\n\n\n\n\n\n\n\nvar inherits = function (subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar possibleConstructorReturn = function (self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar EventEmitter = function () {\n    function EventEmitter() {\n        classCallCheck(this, EventEmitter);\n        this.listeners = [];\n    }\n\n    createClass(EventEmitter, [{\n        key: \"on\",\n        value: function on(cb) {\n            var _this = this;\n\n            this.listeners.push(cb);\n            return function () {\n                var index = _this.listeners.indexOf(cb);\n                if (index !== -1) _this.listeners.splice(index, 1);\n            };\n        }\n    }, {\n        key: \"emit\",\n        value: function emit(data) {\n            this.listeners.forEach(function (fn) {\n                return fn(data);\n            });\n        }\n    }]);\n    return EventEmitter;\n}();\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n'use strict';\n\nvar REACT_STATICS = {\n    childContextTypes: true,\n    contextTypes: true,\n    defaultProps: true,\n    displayName: true,\n    getDefaultProps: true,\n    mixins: true,\n    propTypes: true,\n    type: true\n};\n\nvar KNOWN_STATICS = {\n  name: true,\n  length: true,\n  prototype: true,\n  caller: true,\n  callee: true,\n  arguments: true,\n  arity: true\n};\n\nvar defineProperty$1 = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = getPrototypeOf && getPrototypeOf(Object);\n\nvar hoistNonReactStatics = function hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n    if (typeof sourceComponent !== 'string') { // don't hoist over string (html) components\n\n        if (objectPrototype) {\n            var inheritedComponent = getPrototypeOf(sourceComponent);\n            if (inheritedComponent && inheritedComponent !== objectPrototype) {\n                hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n            }\n        }\n\n        var keys = getOwnPropertyNames(sourceComponent);\n\n        if (getOwnPropertySymbols) {\n            keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n        }\n\n        for (var i = 0; i < keys.length; ++i) {\n            var key = keys[i];\n            if (!REACT_STATICS[key] && !KNOWN_STATICS[key] && (!blacklist || !blacklist[key])) {\n                var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n                try { // Avoid failures from read-only properties\n                    defineProperty$1(targetComponent, key, descriptor);\n                } catch (e) {}\n            }\n        }\n\n        return targetComponent;\n    }\n\n    return targetComponent;\n};\n\n// Copied from React.PropTypes\nfunction createChainableTypeChecker(validate) {\n    function checkType(isRequired, props, propName, componentName, location, propFullName) {\n        for (var _len = arguments.length, rest = Array(_len > 6 ? _len - 6 : 0), _key = 6; _key < _len; _key++) {\n            rest[_key - 6] = arguments[_key];\n        }\n\n        return untracked(function () {\n            componentName = componentName || \"<<anonymous>>\";\n            propFullName = propFullName || propName;\n            if (props[propName] == null) {\n                if (isRequired) {\n                    var actual = props[propName] === null ? \"null\" : \"undefined\";\n                    return new Error(\"The \" + location + \" `\" + propFullName + \"` is marked as required \" + \"in `\" + componentName + \"`, but its value is `\" + actual + \"`.\");\n                }\n                return null;\n            } else {\n                return validate.apply(undefined, [props, propName, componentName, location, propFullName].concat(rest));\n            }\n        });\n    }\n\n    var chainedCheckType = checkType.bind(null, false);\n    chainedCheckType.isRequired = checkType.bind(null, true);\n    return chainedCheckType;\n}\n\n// Copied from React.PropTypes\nfunction isSymbol(propType, propValue) {\n    // Native Symbol.\n    if (propType === \"symbol\") {\n        return true;\n    }\n\n    // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n    if (propValue[\"@@toStringTag\"] === \"Symbol\") {\n        return true;\n    }\n\n    // Fallback for non-spec compliant Symbols which are polyfilled.\n    if (typeof Symbol === \"function\" && propValue instanceof Symbol) {\n        return true;\n    }\n\n    return false;\n}\n\n// Copied from React.PropTypes\nfunction getPropType(propValue) {\n    var propType = typeof propValue === \"undefined\" ? \"undefined\" : _typeof(propValue);\n    if (Array.isArray(propValue)) {\n        return \"array\";\n    }\n    if (propValue instanceof RegExp) {\n        // Old webkits (at least until Android 4.0) return 'function' rather than\n        // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n        // passes PropTypes.object.\n        return \"object\";\n    }\n    if (isSymbol(propType, propValue)) {\n        return \"symbol\";\n    }\n    return propType;\n}\n\n// This handles more types than `getPropType`. Only used for error messages.\n// Copied from React.PropTypes\nfunction getPreciseType(propValue) {\n    var propType = getPropType(propValue);\n    if (propType === \"object\") {\n        if (propValue instanceof Date) {\n            return \"date\";\n        } else if (propValue instanceof RegExp) {\n            return \"regexp\";\n        }\n    }\n    return propType;\n}\n\nfunction createObservableTypeCheckerCreator(allowNativeType, mobxType) {\n    return createChainableTypeChecker(function (props, propName, componentName, location, propFullName) {\n        return untracked(function () {\n            if (allowNativeType) {\n                if (getPropType(props[propName]) === mobxType.toLowerCase()) return null;\n            }\n            var mobxChecker = void 0;\n            switch (mobxType) {\n                case \"Array\":\n                    mobxChecker = isObservableArray;\n                    break;\n                case \"Object\":\n                    mobxChecker = isObservableObject;\n                    break;\n                case \"Map\":\n                    mobxChecker = isObservableMap;\n                    break;\n                default:\n                    throw new Error(\"Unexpected mobxType: \" + mobxType);\n            }\n            var propValue = props[propName];\n            if (!mobxChecker(propValue)) {\n                var preciseType = getPreciseType(propValue);\n                var nativeTypeExpectationMessage = allowNativeType ? \" or javascript `\" + mobxType.toLowerCase() + \"`\" : \"\";\n                return new Error(\"Invalid prop `\" + propFullName + \"` of type `\" + preciseType + \"` supplied to\" + \" `\" + componentName + \"`, expected `mobx.Observable\" + mobxType + \"`\" + nativeTypeExpectationMessage + \".\");\n            }\n            return null;\n        });\n    });\n}\n\nfunction createObservableArrayOfTypeChecker(allowNativeType, typeChecker) {\n    return createChainableTypeChecker(function (props, propName, componentName, location, propFullName) {\n        for (var _len2 = arguments.length, rest = Array(_len2 > 5 ? _len2 - 5 : 0), _key2 = 5; _key2 < _len2; _key2++) {\n            rest[_key2 - 5] = arguments[_key2];\n        }\n\n        return untracked(function () {\n            if (typeof typeChecker !== \"function\") {\n                return new Error(\"Property `\" + propFullName + \"` of component `\" + componentName + \"` has \" + \"invalid PropType notation.\");\n            }\n            var error = createObservableTypeCheckerCreator(allowNativeType, \"Array\")(props, propName, componentName);\n            if (error instanceof Error) return error;\n            var propValue = props[propName];\n            for (var i = 0; i < propValue.length; i++) {\n                error = typeChecker.apply(undefined, [propValue, i, componentName, location, propFullName + \"[\" + i + \"]\"].concat(rest));\n                if (error instanceof Error) return error;\n            }\n            return null;\n        });\n    });\n}\n\nvar observableArray = createObservableTypeCheckerCreator(false, \"Array\");\nvar observableArrayOf = createObservableArrayOfTypeChecker.bind(null, false);\nvar observableMap = createObservableTypeCheckerCreator(false, \"Map\");\nvar observableObject = createObservableTypeCheckerCreator(false, \"Object\");\nvar arrayOrObservableArray = createObservableTypeCheckerCreator(true, \"Array\");\nvar arrayOrObservableArrayOf = createObservableArrayOfTypeChecker.bind(null, true);\nvar objectOrObservableObject = createObservableTypeCheckerCreator(true, \"Object\");\n\n\n\nvar propTypes = Object.freeze({\n\tobservableArray: observableArray,\n\tobservableArrayOf: observableArrayOf,\n\tobservableMap: observableMap,\n\tobservableObject: observableObject,\n\tarrayOrObservableArray: arrayOrObservableArray,\n\tarrayOrObservableArrayOf: arrayOrObservableArrayOf,\n\tobjectOrObservableObject: objectOrObservableObject\n});\n\nfunction isStateless(component) {\n    // `function() {}` has prototype, but `() => {}` doesn't\n    // `() => {}` via Babel has prototype too.\n    return !(component.prototype && component.prototype.render);\n}\n\nvar injectorContextTypes = {\n    mobxStores: objectOrObservableObject\n};\nObject.seal(injectorContextTypes);\n\nvar proxiedInjectorProps = {\n    contextTypes: {\n        get: function get$$1() {\n            return injectorContextTypes;\n        },\n        set: function set$$1(_) {\n            console.warn(\"Mobx Injector: you are trying to attach `contextTypes` on an component decorated with `inject` (or `observer`) HOC. Please specify the contextTypes on the wrapped component instead. It is accessible through the `wrappedComponent`\");\n        },\n        configurable: true,\n        enumerable: false\n    },\n    isMobxInjector: {\n        value: true,\n        writable: true,\n        configurable: true,\n        enumerable: true\n    }\n\n    /**\n     * Store Injection\n     */\n};function createStoreInjector(grabStoresFn, component, injectNames) {\n    var _class, _temp2;\n\n    var displayName = \"inject-\" + (component.displayName || component.name || component.constructor && component.constructor.name || \"Unknown\");\n    if (injectNames) displayName += \"-with-\" + injectNames;\n\n    var Injector = (_temp2 = _class = function (_Component) {\n        inherits(Injector, _Component);\n\n        function Injector() {\n            var _ref;\n\n            var _temp, _this, _ret;\n\n            classCallCheck(this, Injector);\n\n            for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n                args[_key] = arguments[_key];\n            }\n\n            return _ret = (_temp = (_this = possibleConstructorReturn(this, (_ref = Injector.__proto__ || Object.getPrototypeOf(Injector)).call.apply(_ref, [this].concat(args))), _this), _this.storeRef = function (instance) {\n                _this.wrappedInstance = instance;\n            }, _temp), possibleConstructorReturn(_this, _ret);\n        }\n\n        createClass(Injector, [{\n            key: \"render\",\n            value: function render() {\n                // Optimization: it might be more efficient to apply the mapper function *outside* the render method\n                // (if the mapper is a function), that could avoid expensive(?) re-rendering of the injector component\n                // See this test: 'using a custom injector is not too reactive' in inject.js\n                var newProps = {};\n                for (var key in this.props) {\n                    if (this.props.hasOwnProperty(key)) {\n                        newProps[key] = this.props[key];\n                    }\n                }var additionalProps = grabStoresFn(this.context.mobxStores || {}, newProps, this.context) || {};\n                for (var _key2 in additionalProps) {\n                    newProps[_key2] = additionalProps[_key2];\n                }\n\n                if (!isStateless(component)) {\n                    newProps.ref = this.storeRef;\n                }\n\n                return createElement(component, newProps);\n            }\n        }]);\n        return Injector;\n    }(Component), _class.displayName = displayName, _temp2);\n\n    // Static fields from component should be visible on the generated Injector\n\n    hoistNonReactStatics(Injector, component);\n\n    Injector.wrappedComponent = component;\n    Object.defineProperties(Injector, proxiedInjectorProps);\n\n    return Injector;\n}\n\nfunction grabStoresByName(storeNames) {\n    return function (baseStores, nextProps) {\n        storeNames.forEach(function (storeName) {\n            if (storeName in nextProps // prefer props over stores\n            ) return;\n            if (!(storeName in baseStores)) throw new Error(\"MobX injector: Store '\" + storeName + \"' is not available! Make sure it is provided by some Provider\");\n            nextProps[storeName] = baseStores[storeName];\n        });\n        return nextProps;\n    };\n}\n\n/**\n * higher order component that injects stores to a child.\n * takes either a varargs list of strings, which are stores read from the context,\n * or a function that manually maps the available stores from the context to props:\n * storesToProps(mobxStores, props, context) => newProps\n */\nfunction inject() /* fn(stores, nextProps) or ...storeNames */{\n    var grabStoresFn = void 0;\n    if (typeof arguments[0] === \"function\") {\n        grabStoresFn = arguments[0];\n        return function (componentClass) {\n            var injected = createStoreInjector(grabStoresFn, componentClass);\n            injected.isMobxInjector = false; // supress warning\n            // mark the Injector as observer, to make it react to expressions in `grabStoresFn`,\n            // see #111\n            injected = observer(injected);\n            injected.isMobxInjector = true; // restore warning\n            return injected;\n        };\n    } else {\n        var storeNames = [];\n        for (var i = 0; i < arguments.length; i++) {\n            storeNames[i] = arguments[i];\n        }grabStoresFn = grabStoresByName(storeNames);\n        return function (componentClass) {\n            return createStoreInjector(grabStoresFn, componentClass, storeNames.join(\"-\"));\n        };\n    }\n}\n\n/**\n * dev tool support\n */\nvar isDevtoolsEnabled = false;\n\nvar isUsingStaticRendering = false;\n\nvar warnedAboutObserverInjectDeprecation = false;\n\n// WeakMap<Node, Object>;\nvar componentByNodeRegistery = typeof WeakMap !== \"undefined\" ? new WeakMap() : undefined;\nvar renderReporter = new EventEmitter();\n\nfunction findDOMNode$2(component) {\n    if (findDOMNode) {\n        try {\n            return findDOMNode(component);\n        } catch (e) {\n            // findDOMNode will throw in react-test-renderer, see:\n            // See https://github.com/mobxjs/mobx-react/issues/216\n            // Is there a better heuristic?\n            return null;\n        }\n    }\n    return null;\n}\n\nfunction reportRendering(component) {\n    var node = findDOMNode$2(component);\n    if (node && componentByNodeRegistery) componentByNodeRegistery.set(node, component);\n\n    renderReporter.emit({\n        event: \"render\",\n        renderTime: component.__$mobRenderEnd - component.__$mobRenderStart,\n        totalTime: Date.now() - component.__$mobRenderStart,\n        component: component,\n        node: node\n    });\n}\n\nfunction trackComponents() {\n    if (typeof WeakMap === \"undefined\") throw new Error(\"[mobx-react] tracking components is not supported in this browser.\");\n    if (!isDevtoolsEnabled) isDevtoolsEnabled = true;\n}\n\nfunction useStaticRendering(useStaticRendering) {\n    isUsingStaticRendering = useStaticRendering;\n}\n\n/**\n * Errors reporter\n */\n\nvar errorsReporter = new EventEmitter();\n\n/**\n * Utilities\n */\n\nfunction patch(target, funcName) {\n    var runMixinFirst = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n    var base = target[funcName];\n    var mixinFunc = reactiveMixin[funcName];\n    var f = !base ? mixinFunc : runMixinFirst === true ? function () {\n        mixinFunc.apply(this, arguments);\n        base.apply(this, arguments);\n    } : function () {\n        base.apply(this, arguments);\n        mixinFunc.apply(this, arguments);\n    };\n\n    // MWE: ideally we freeze here to protect against accidental overwrites in component instances, see #195\n    // ...but that breaks react-hot-loader, see #231...\n    target[funcName] = f;\n}\n\nfunction shallowEqual(objA, objB) {\n    //From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n    if (is(objA, objB)) return true;\n    if ((typeof objA === \"undefined\" ? \"undefined\" : _typeof(objA)) !== \"object\" || objA === null || (typeof objB === \"undefined\" ? \"undefined\" : _typeof(objB)) !== \"object\" || objB === null) {\n        return false;\n    }\n    var keysA = Object.keys(objA);\n    var keysB = Object.keys(objB);\n    if (keysA.length !== keysB.length) return false;\n    for (var i = 0; i < keysA.length; i++) {\n        if (!hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n            return false;\n        }\n    }\n    return true;\n}\n\nfunction is(x, y) {\n    // From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n    if (x === y) {\n        return x !== 0 || 1 / x === 1 / y;\n    } else {\n        return x !== x && y !== y;\n    }\n}\n\n/**\n * ReactiveMixin\n */\nvar reactiveMixin = {\n    componentWillMount: function componentWillMount() {\n        var _this = this;\n\n        if (isUsingStaticRendering === true) return;\n        // Generate friendly name for debugging\n        var initialName = this.displayName || this.name || this.constructor && (this.constructor.displayName || this.constructor.name) || \"<component>\";\n        var rootNodeID = this._reactInternalInstance && this._reactInternalInstance._rootNodeID || this._reactInternalFiber && this._reactInternalFiber._debugID;\n\n        /**\n         * If props are shallowly modified, react will render anyway,\n         * so atom.reportChanged() should not result in yet another re-render\n         */\n        var skipRender = false;\n        /**\n         * forceUpdate will re-assign this.props. We don't want that to cause a loop,\n         * so detect these changes\n         */\n        var isForcingUpdate = false;\n\n        function makePropertyObservableReference(propName) {\n            var valueHolder = this[propName];\n            var atom = new Atom(\"reactive \" + propName);\n            Object.defineProperty(this, propName, {\n                configurable: true,\n                enumerable: true,\n                get: function get$$1() {\n                    atom.reportObserved();\n                    return valueHolder;\n                },\n                set: function set$$1(v) {\n                    if (!isForcingUpdate && !shallowEqual(valueHolder, v)) {\n                        valueHolder = v;\n                        skipRender = true;\n                        atom.reportChanged();\n                        skipRender = false;\n                    } else {\n                        valueHolder = v;\n                    }\n                }\n            });\n        }\n\n        // make this.props an observable reference, see #124\n        makePropertyObservableReference.call(this, \"props\");\n        // make state an observable reference\n        makePropertyObservableReference.call(this, \"state\");\n\n        // wire up reactive render\n        var baseRender = this.render.bind(this);\n        var reaction = null;\n        var isRenderingPending = false;\n\n        var initialRender = function initialRender() {\n            reaction = new Reaction(initialName + \"#\" + rootNodeID + \".render()\", function () {\n                if (!isRenderingPending) {\n                    // N.B. Getting here *before mounting* means that a component constructor has side effects (see the relevant test in misc.js)\n                    // This unidiomatic React usage but React will correctly warn about this so we continue as usual\n                    // See #85 / Pull #44\n                    isRenderingPending = true;\n                    if (typeof _this.componentWillReact === \"function\") _this.componentWillReact(); // TODO: wrap in action?\n                    if (_this.__$mobxIsUnmounted !== true) {\n                        // If we are unmounted at this point, componentWillReact() had a side effect causing the component to unmounted\n                        // TODO: remove this check? Then react will properly warn about the fact that this should not happen? See #73\n                        // However, people also claim this migth happen during unit tests..\n                        var hasError = true;\n                        try {\n                            isForcingUpdate = true;\n                            if (!skipRender) Component.prototype.forceUpdate.call(_this);\n                            hasError = false;\n                        } finally {\n                            isForcingUpdate = false;\n                            if (hasError) reaction.dispose();\n                        }\n                    }\n                }\n            });\n            reaction.reactComponent = _this;\n            reactiveRender.$mobx = reaction;\n            _this.render = reactiveRender;\n            return reactiveRender();\n        };\n\n        var reactiveRender = function reactiveRender() {\n            isRenderingPending = false;\n            var exception = undefined;\n            var rendering = undefined;\n            reaction.track(function () {\n                if (isDevtoolsEnabled) {\n                    _this.__$mobRenderStart = Date.now();\n                }\n                try {\n                    rendering = extras.allowStateChanges(false, baseRender);\n                } catch (e) {\n                    exception = e;\n                }\n                if (isDevtoolsEnabled) {\n                    _this.__$mobRenderEnd = Date.now();\n                }\n            });\n            if (exception) {\n                errorsReporter.emit(exception);\n                throw exception;\n            }\n            return rendering;\n        };\n\n        this.render = initialRender;\n    },\n\n    componentWillUnmount: function componentWillUnmount() {\n        if (isUsingStaticRendering === true) return;\n        this.render.$mobx && this.render.$mobx.dispose();\n        this.__$mobxIsUnmounted = true;\n        if (isDevtoolsEnabled) {\n            var node = findDOMNode$2(this);\n            if (node && componentByNodeRegistery) {\n                componentByNodeRegistery.delete(node);\n            }\n            renderReporter.emit({\n                event: \"destroy\",\n                component: this,\n                node: node\n            });\n        }\n    },\n\n    componentDidMount: function componentDidMount() {\n        if (isDevtoolsEnabled) {\n            reportRendering(this);\n        }\n    },\n\n    componentDidUpdate: function componentDidUpdate() {\n        if (isDevtoolsEnabled) {\n            reportRendering(this);\n        }\n    },\n\n    shouldComponentUpdate: function shouldComponentUpdate(nextProps, nextState) {\n        if (isUsingStaticRendering) {\n            console.warn(\"[mobx-react] It seems that a re-rendering of a React component is triggered while in static (server-side) mode. Please make sure components are rendered only once server-side.\");\n        }\n        // update on any state changes (as is the default)\n        if (this.state !== nextState) {\n            return true;\n        }\n        // update if props are shallowly not equal, inspired by PureRenderMixin\n        // we could return just 'false' here, and avoid the `skipRender` checks etc\n        // however, it is nicer if lifecycle events are triggered like usually,\n        // so we return true here if props are shallowly modified.\n        return !shallowEqual(this.props, nextProps);\n    }\n\n    /**\n     * Observer function / decorator\n     */\n};function observer(arg1, arg2) {\n    if (typeof arg1 === \"string\") {\n        throw new Error(\"Store names should be provided as array\");\n    }\n    if (Array.isArray(arg1)) {\n        // component needs stores\n        if (!warnedAboutObserverInjectDeprecation) {\n            warnedAboutObserverInjectDeprecation = true;\n            console.warn('Mobx observer: Using observer to inject stores is deprecated since 4.0. Use `@inject(\"store1\", \"store2\") @observer ComponentClass` or `inject(\"store1\", \"store2\")(observer(componentClass))` instead of `@observer([\"store1\", \"store2\"]) ComponentClass`');\n        }\n        if (!arg2) {\n            // invoked as decorator\n            return function (componentClass) {\n                return observer(arg1, componentClass);\n            };\n        } else {\n            return inject.apply(null, arg1)(observer(arg2));\n        }\n    }\n    var componentClass = arg1;\n\n    if (componentClass.isMobxInjector === true) {\n        console.warn(\"Mobx observer: You are trying to use 'observer' on a component that already has 'inject'. Please apply 'observer' before applying 'inject'\");\n    }\n\n    // Stateless function component:\n    // If it is function but doesn't seem to be a react class constructor,\n    // wrap it to a react class automatically\n    if (typeof componentClass === \"function\" && (!componentClass.prototype || !componentClass.prototype.render) && !componentClass.isReactClass && !Component.isPrototypeOf(componentClass)) {\n        var _class, _temp;\n\n        return observer((_temp = _class = function (_Component) {\n            inherits(_class, _Component);\n\n            function _class() {\n                classCallCheck(this, _class);\n                return possibleConstructorReturn(this, (_class.__proto__ || Object.getPrototypeOf(_class)).apply(this, arguments));\n            }\n\n            createClass(_class, [{\n                key: \"render\",\n                value: function render() {\n                    return componentClass.call(this, this.props, this.context);\n                }\n            }]);\n            return _class;\n        }(Component), _class.displayName = componentClass.displayName || componentClass.name, _class.contextTypes = componentClass.contextTypes, _class.propTypes = componentClass.propTypes, _class.defaultProps = componentClass.defaultProps, _temp));\n    }\n\n    if (!componentClass) {\n        throw new Error(\"Please pass a valid component to 'observer'\");\n    }\n\n    var target = componentClass.prototype || componentClass;\n    mixinLifecycleEvents(target);\n    componentClass.isMobXReactObserver = true;\n    return componentClass;\n}\n\nfunction mixinLifecycleEvents(target) {\n    patch(target, \"componentWillMount\", true);[\"componentDidMount\", \"componentWillUnmount\", \"componentDidUpdate\"].forEach(function (funcName) {\n        patch(target, funcName);\n    });\n    if (!target.shouldComponentUpdate) {\n        target.shouldComponentUpdate = reactiveMixin.shouldComponentUpdate;\n    }\n}\n\n// TODO: support injection somehow as well?\nvar Observer = observer(function (_ref) {\n    var children = _ref.children,\n        observerInject = _ref.inject,\n        render = _ref.render;\n\n    var component = children || render;\n    if (typeof component === \"undefined\") {\n        return null;\n    }\n    if (!observerInject) {\n        return component();\n    }\n    var InjectComponent = inject(observerInject)(component);\n    return React.createElement(InjectComponent, null);\n});\n\nObserver.displayName = \"Observer\";\n\nvar ObserverPropsCheck = function ObserverPropsCheck(props, key, componentName, location, propFullName) {\n    var extraKey = key === \"children\" ? \"render\" : \"children\";\n    if (typeof props[key] === \"function\" && typeof props[extraKey] === \"function\") {\n        return new Error(\"Invalid prop,do not use children and render in the same time in`\" + componentName);\n    }\n\n    if (typeof props[key] === \"function\" || typeof props[extraKey] === \"function\") {\n        return;\n    }\n    return new Error(\"Invalid prop `\" + propFullName + \"` of type `\" + _typeof(props[key]) + \"` supplied to\" + \" `\" + componentName + \"`, expected `function`.\");\n};\n\nObserver.propTypes = {\n    render: ObserverPropsCheck,\n    children: ObserverPropsCheck\n};\n\nvar _class;\nvar _temp;\n\nvar specialReactKeys = { children: true, key: true, ref: true };\n\nvar Provider = (_temp = _class = function (_Component) {\n    inherits(Provider, _Component);\n\n    function Provider() {\n        classCallCheck(this, Provider);\n        return possibleConstructorReturn(this, (Provider.__proto__ || Object.getPrototypeOf(Provider)).apply(this, arguments));\n    }\n\n    createClass(Provider, [{\n        key: \"render\",\n        value: function render() {\n            return Children.only(this.props.children);\n        }\n    }, {\n        key: \"getChildContext\",\n        value: function getChildContext() {\n            var stores = {};\n            // inherit stores\n            var baseStores = this.context.mobxStores;\n            if (baseStores) for (var key in baseStores) {\n                stores[key] = baseStores[key];\n            }\n            // add own stores\n            for (var _key in this.props) {\n                if (!specialReactKeys[_key] && _key !== \"suppressChangedStoreWarning\") stores[_key] = this.props[_key];\n            }return {\n                mobxStores: stores\n            };\n        }\n    }, {\n        key: \"componentWillReceiveProps\",\n        value: function componentWillReceiveProps(nextProps) {\n            // Maybe this warning is too aggressive?\n            if (Object.keys(nextProps).length !== Object.keys(this.props).length) console.warn(\"MobX Provider: The set of provided stores has changed. Please avoid changing stores as the change might not propagate to all children\");\n            if (!nextProps.suppressChangedStoreWarning) for (var key in nextProps) {\n                if (!specialReactKeys[key] && this.props[key] !== nextProps[key]) console.warn(\"MobX Provider: Provided store '\" + key + \"' has changed. Please avoid replacing stores as the change might not propagate to all children\");\n            }\n        }\n    }]);\n    return Provider;\n}(Component), _class.contextTypes = {\n    mobxStores: objectOrObservableObject\n}, _class.childContextTypes = {\n    mobxStores: objectOrObservableObject.isRequired\n}, _temp);\n\nif (!Component) throw new Error(\"mobx-react requires React to be available\");\nif (!extras) throw new Error(\"mobx-react requires mobx to be available\");\n\nif (typeof unstable_batchedUpdates === \"function\") extras.setReactionScheduler(unstable_batchedUpdates);else if (typeof unstable_batchedUpdates$1 === \"function\") extras.setReactionScheduler(unstable_batchedUpdates$1);\n\nvar onError = function onError(fn) {\n    return errorsReporter.on(fn);\n};\n\n/* DevTool support */\n// See: https://github.com/andykog/mobx-devtools/blob/d8976c24b8cb727ed59f9a0bc905a009df79e221/src/backend/installGlobalHook.js\n\nif ((typeof __MOBX_DEVTOOLS_GLOBAL_HOOK__ === \"undefined\" ? \"undefined\" : _typeof(__MOBX_DEVTOOLS_GLOBAL_HOOK__)) === \"object\") {\n    var mobx$1 = { spy: spy, extras: extras };\n    var mobxReact = { renderReporter: renderReporter, componentByNodeRegistery: componentByNodeRegistery, trackComponents: trackComponents };\n    __MOBX_DEVTOOLS_GLOBAL_HOOK__.injectMobxReact(mobxReact, mobx$1);\n}\n\nexport { propTypes, propTypes as PropTypes, onError, observer, Observer, renderReporter, componentByNodeRegistery, trackComponents, useStaticRendering, Provider, inject };\n","/** MobX - (c) Michel Weststrate 2015, 2016 - MIT Licensed */\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = Object.setPrototypeOf ||\r\n    ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n    function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n\r\nfunction __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\n\n/**\n * Anything that can be used to _store_ state is an Atom in mobx. Atoms have two important jobs\n *\n * 1) detect when they are being _used_ and report this (using reportObserved). This allows mobx to make the connection between running functions and the data they used\n * 2) they should notify mobx whenever they have _changed_. This way mobx can re-run any functions (derivations) that are using this atom.\n */\nvar BaseAtom = (function () {\n    /**\n     * Create a new atom. For debugging purposes it is recommended to give it a name.\n     * The onBecomeObserved and onBecomeUnobserved callbacks can be used for resource management.\n     */\n    function BaseAtom(name) {\n        if (name === void 0) { name = \"Atom@\" + getNextId(); }\n        this.name = name;\n        this.isPendingUnobservation = true; // for effective unobserving. BaseAtom has true, for extra optimization, so its onBecomeUnobserved never gets called, because it's not needed\n        this.observers = [];\n        this.observersIndexes = {};\n        this.diffValue = 0;\n        this.lastAccessedBy = 0;\n        this.lowestObserverState = IDerivationState.NOT_TRACKING;\n    }\n    BaseAtom.prototype.onBecomeUnobserved = function () {\n        // noop\n    };\n    /**\n     * Invoke this method to notify mobx that your atom has been used somehow.\n     */\n    BaseAtom.prototype.reportObserved = function () {\n        reportObserved(this);\n    };\n    /**\n     * Invoke this method _after_ this method has changed to signal mobx that all its observers should invalidate.\n     */\n    BaseAtom.prototype.reportChanged = function () {\n        startBatch();\n        propagateChanged(this);\n        endBatch();\n    };\n    BaseAtom.prototype.toString = function () {\n        return this.name;\n    };\n    return BaseAtom;\n}());\nvar Atom = (function (_super) {\n    __extends(Atom, _super);\n    /**\n     * Create a new atom. For debugging purposes it is recommended to give it a name.\n     * The onBecomeObserved and onBecomeUnobserved callbacks can be used for resource management.\n     */\n    function Atom(name, onBecomeObservedHandler, onBecomeUnobservedHandler) {\n        if (name === void 0) { name = \"Atom@\" + getNextId(); }\n        if (onBecomeObservedHandler === void 0) { onBecomeObservedHandler = noop; }\n        if (onBecomeUnobservedHandler === void 0) { onBecomeUnobservedHandler = noop; }\n        var _this = _super.call(this, name) || this;\n        _this.name = name;\n        _this.onBecomeObservedHandler = onBecomeObservedHandler;\n        _this.onBecomeUnobservedHandler = onBecomeUnobservedHandler;\n        _this.isPendingUnobservation = false; // for effective unobserving.\n        _this.isBeingTracked = false;\n        return _this;\n    }\n    Atom.prototype.reportObserved = function () {\n        startBatch();\n        _super.prototype.reportObserved.call(this);\n        if (!this.isBeingTracked) {\n            this.isBeingTracked = true;\n            this.onBecomeObservedHandler();\n        }\n        endBatch();\n        return !!globalState.trackingDerivation;\n        // return doesn't really give useful info, because it can be as well calling computed which calls atom (no reactions)\n        // also it could not trigger when calculating reaction dependent on Atom because Atom's value was cached by computed called by given reaction.\n    };\n    Atom.prototype.onBecomeUnobserved = function () {\n        this.isBeingTracked = false;\n        this.onBecomeUnobservedHandler();\n    };\n    return Atom;\n}(BaseAtom));\nvar isAtom = createInstanceofPredicate(\"Atom\", BaseAtom);\n\nfunction hasInterceptors(interceptable) {\n    return interceptable.interceptors && interceptable.interceptors.length > 0;\n}\nfunction registerInterceptor(interceptable, handler) {\n    var interceptors = interceptable.interceptors || (interceptable.interceptors = []);\n    interceptors.push(handler);\n    return once(function () {\n        var idx = interceptors.indexOf(handler);\n        if (idx !== -1)\n            interceptors.splice(idx, 1);\n    });\n}\nfunction interceptChange(interceptable, change) {\n    var prevU = untrackedStart();\n    try {\n        var interceptors = interceptable.interceptors;\n        if (interceptors)\n            for (var i = 0, l = interceptors.length; i < l; i++) {\n                change = interceptors[i](change);\n                invariant(!change || change.type, \"Intercept handlers should return nothing or a change object\");\n                if (!change)\n                    break;\n            }\n        return change;\n    }\n    finally {\n        untrackedEnd(prevU);\n    }\n}\n\nfunction hasListeners(listenable) {\n    return listenable.changeListeners && listenable.changeListeners.length > 0;\n}\nfunction registerListener(listenable, handler) {\n    var listeners = listenable.changeListeners || (listenable.changeListeners = []);\n    listeners.push(handler);\n    return once(function () {\n        var idx = listeners.indexOf(handler);\n        if (idx !== -1)\n            listeners.splice(idx, 1);\n    });\n}\nfunction notifyListeners(listenable, change) {\n    var prevU = untrackedStart();\n    var listeners = listenable.changeListeners;\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i = 0, l = listeners.length; i < l; i++) {\n        listeners[i](change);\n    }\n    untrackedEnd(prevU);\n}\n\nfunction isSpyEnabled() {\n    return !!globalState.spyListeners.length;\n}\nfunction spyReport(event) {\n    if (!globalState.spyListeners.length)\n        return;\n    var listeners = globalState.spyListeners;\n    for (var i = 0, l = listeners.length; i < l; i++)\n        listeners[i](event);\n}\nfunction spyReportStart(event) {\n    var change = objectAssign({}, event, { spyReportStart: true });\n    spyReport(change);\n}\nvar END_EVENT = { spyReportEnd: true };\nfunction spyReportEnd(change) {\n    if (change)\n        spyReport(objectAssign({}, change, END_EVENT));\n    else\n        spyReport(END_EVENT);\n}\nfunction spy(listener) {\n    globalState.spyListeners.push(listener);\n    return once(function () {\n        var idx = globalState.spyListeners.indexOf(listener);\n        if (idx !== -1)\n            globalState.spyListeners.splice(idx, 1);\n    });\n}\n\nfunction iteratorSymbol() {\n    return (typeof Symbol === \"function\" && Symbol.iterator) || \"@@iterator\";\n}\nvar IS_ITERATING_MARKER = \"__$$iterating\";\nfunction arrayAsIterator(array) {\n    // returning an array for entries(), values() etc for maps was a mis-interpretation of the specs..,\n    // yet it is quite convenient to be able to use the response both as array directly and as iterator\n    // it is suboptimal, but alas...\n    invariant(array[IS_ITERATING_MARKER] !== true, \"Illegal state: cannot recycle array as iterator\");\n    addHiddenFinalProp(array, IS_ITERATING_MARKER, true);\n    var idx = -1;\n    addHiddenFinalProp(array, \"next\", function next() {\n        idx++;\n        return {\n            done: idx >= this.length,\n            value: idx < this.length ? this[idx] : undefined\n        };\n    });\n    return array;\n}\nfunction declareIterator(prototType, iteratorFactory) {\n    addHiddenFinalProp(prototType, iteratorSymbol(), iteratorFactory);\n}\n\nvar MAX_SPLICE_SIZE = 10000; // See e.g. https://github.com/mobxjs/mobx/issues/859\n// Detects bug in safari 9.1.1 (or iOS 9 safari mobile). See #364\nvar safariPrototypeSetterInheritanceBug = (function () {\n    var v = false;\n    var p = {};\n    Object.defineProperty(p, \"0\", {\n        set: function () {\n            v = true;\n        }\n    });\n    Object.create(p)[\"0\"] = 1;\n    return v === false;\n})();\n/**\n * This array buffer contains two lists of properties, so that all arrays\n * can recycle their property definitions, which significantly improves performance of creating\n * properties on the fly.\n */\nvar OBSERVABLE_ARRAY_BUFFER_SIZE = 0;\n// Typescript workaround to make sure ObservableArray extends Array\nvar StubArray = (function () {\n    function StubArray() {\n    }\n    return StubArray;\n}());\nfunction inherit(ctor, proto) {\n    if (typeof Object[\"setPrototypeOf\"] !== \"undefined\") {\n        Object[\"setPrototypeOf\"](ctor.prototype, proto);\n    }\n    else if (typeof ctor.prototype.__proto__ !== \"undefined\") {\n        ctor.prototype.__proto__ = proto;\n    }\n    else {\n        ctor[\"prototype\"] = proto;\n    }\n}\ninherit(StubArray, Array.prototype);\n// Weex freeze Array.prototype\n// Make them writeable and configurable in prototype chain\n// https://github.com/alibaba/weex/pull/1529\nif (Object.isFrozen(Array)) {\n    \n    [\n        \"constructor\",\n        \"push\",\n        \"shift\",\n        \"concat\",\n        \"pop\",\n        \"unshift\",\n        \"replace\",\n        \"find\",\n        \"findIndex\",\n        \"splice\",\n        \"reverse\",\n        \"sort\"\n    ].forEach(function (key) {\n        Object.defineProperty(StubArray.prototype, key, {\n            configurable: true,\n            writable: true,\n            value: Array.prototype[key]\n        });\n    });\n}\nvar ObservableArrayAdministration = (function () {\n    function ObservableArrayAdministration(name, enhancer, array, owned) {\n        this.array = array;\n        this.owned = owned;\n        this.values = [];\n        this.lastKnownLength = 0;\n        this.interceptors = null;\n        this.changeListeners = null;\n        this.atom = new BaseAtom(name || \"ObservableArray@\" + getNextId());\n        this.enhancer = function (newV, oldV) { return enhancer(newV, oldV, name + \"[..]\"); };\n    }\n    ObservableArrayAdministration.prototype.dehanceValue = function (value) {\n        if (this.dehancer !== undefined)\n            return this.dehancer(value);\n        return value;\n    };\n    ObservableArrayAdministration.prototype.dehanceValues = function (values) {\n        if (this.dehancer !== undefined)\n            return values.map(this.dehancer);\n        return values;\n    };\n    ObservableArrayAdministration.prototype.intercept = function (handler) {\n        return registerInterceptor(this, handler);\n    };\n    ObservableArrayAdministration.prototype.observe = function (listener, fireImmediately) {\n        if (fireImmediately === void 0) { fireImmediately = false; }\n        if (fireImmediately) {\n            listener({\n                object: this.array,\n                type: \"splice\",\n                index: 0,\n                added: this.values.slice(),\n                addedCount: this.values.length,\n                removed: [],\n                removedCount: 0\n            });\n        }\n        return registerListener(this, listener);\n    };\n    ObservableArrayAdministration.prototype.getArrayLength = function () {\n        this.atom.reportObserved();\n        return this.values.length;\n    };\n    ObservableArrayAdministration.prototype.setArrayLength = function (newLength) {\n        if (typeof newLength !== \"number\" || newLength < 0)\n            throw new Error(\"[mobx.array] Out of range: \" + newLength);\n        var currentLength = this.values.length;\n        if (newLength === currentLength)\n            return;\n        else if (newLength > currentLength) {\n            var newItems = new Array(newLength - currentLength);\n            for (var i = 0; i < newLength - currentLength; i++)\n                newItems[i] = undefined; // No Array.fill everywhere...\n            this.spliceWithArray(currentLength, 0, newItems);\n        }\n        else\n            this.spliceWithArray(newLength, currentLength - newLength);\n    };\n    // adds / removes the necessary numeric properties to this object\n    ObservableArrayAdministration.prototype.updateArrayLength = function (oldLength, delta) {\n        if (oldLength !== this.lastKnownLength)\n            throw new Error(\"[mobx] Modification exception: the internal structure of an observable array was changed. Did you use peek() to change it?\");\n        this.lastKnownLength += delta;\n        if (delta > 0 && oldLength + delta + 1 > OBSERVABLE_ARRAY_BUFFER_SIZE)\n            reserveArrayBuffer(oldLength + delta + 1);\n    };\n    ObservableArrayAdministration.prototype.spliceWithArray = function (index, deleteCount, newItems) {\n        var _this = this;\n        checkIfStateModificationsAreAllowed(this.atom);\n        var length = this.values.length;\n        if (index === undefined)\n            index = 0;\n        else if (index > length)\n            index = length;\n        else if (index < 0)\n            index = Math.max(0, length + index);\n        if (arguments.length === 1)\n            deleteCount = length - index;\n        else if (deleteCount === undefined || deleteCount === null)\n            deleteCount = 0;\n        else\n            deleteCount = Math.max(0, Math.min(deleteCount, length - index));\n        if (newItems === undefined)\n            newItems = [];\n        if (hasInterceptors(this)) {\n            var change = interceptChange(this, {\n                object: this.array,\n                type: \"splice\",\n                index: index,\n                removedCount: deleteCount,\n                added: newItems\n            });\n            if (!change)\n                return EMPTY_ARRAY;\n            deleteCount = change.removedCount;\n            newItems = change.added;\n        }\n        newItems = newItems.map(function (v) { return _this.enhancer(v, undefined); });\n        var lengthDelta = newItems.length - deleteCount;\n        this.updateArrayLength(length, lengthDelta); // create or remove new entries\n        var res = this.spliceItemsIntoValues(index, deleteCount, newItems);\n        if (deleteCount !== 0 || newItems.length !== 0)\n            this.notifyArraySplice(index, newItems, res);\n        return this.dehanceValues(res);\n    };\n    ObservableArrayAdministration.prototype.spliceItemsIntoValues = function (index, deleteCount, newItems) {\n        if (newItems.length < MAX_SPLICE_SIZE) {\n            return (_a = this.values).splice.apply(_a, [index, deleteCount].concat(newItems));\n        }\n        else {\n            var res = this.values.slice(index, index + deleteCount);\n            this.values = this.values\n                .slice(0, index)\n                .concat(newItems, this.values.slice(index + deleteCount));\n            return res;\n        }\n        var _a;\n    };\n    ObservableArrayAdministration.prototype.notifyArrayChildUpdate = function (index, newValue, oldValue) {\n        var notifySpy = !this.owned && isSpyEnabled();\n        var notify = hasListeners(this);\n        var change = notify || notifySpy\n            ? {\n                object: this.array,\n                type: \"update\",\n                index: index,\n                newValue: newValue,\n                oldValue: oldValue\n            }\n            : null;\n        if (notifySpy)\n            spyReportStart(change);\n        this.atom.reportChanged();\n        if (notify)\n            notifyListeners(this, change);\n        if (notifySpy)\n            spyReportEnd();\n    };\n    ObservableArrayAdministration.prototype.notifyArraySplice = function (index, added, removed) {\n        var notifySpy = !this.owned && isSpyEnabled();\n        var notify = hasListeners(this);\n        var change = notify || notifySpy\n            ? {\n                object: this.array,\n                type: \"splice\",\n                index: index,\n                removed: removed,\n                added: added,\n                removedCount: removed.length,\n                addedCount: added.length\n            }\n            : null;\n        if (notifySpy)\n            spyReportStart(change);\n        this.atom.reportChanged();\n        // conform: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/observe\n        if (notify)\n            notifyListeners(this, change);\n        if (notifySpy)\n            spyReportEnd();\n    };\n    return ObservableArrayAdministration;\n}());\nvar ObservableArray = (function (_super) {\n    __extends(ObservableArray, _super);\n    function ObservableArray(initialValues, enhancer, name, owned) {\n        if (name === void 0) { name = \"ObservableArray@\" + getNextId(); }\n        if (owned === void 0) { owned = false; }\n        var _this = _super.call(this) || this;\n        var adm = new ObservableArrayAdministration(name, enhancer, _this, owned);\n        addHiddenFinalProp(_this, \"$mobx\", adm);\n        if (initialValues && initialValues.length) {\n            _this.spliceWithArray(0, 0, initialValues);\n        }\n        if (safariPrototypeSetterInheritanceBug) {\n            // Seems that Safari won't use numeric prototype setter untill any * numeric property is\n            // defined on the instance. After that it works fine, even if this property is deleted.\n            Object.defineProperty(adm.array, \"0\", ENTRY_0);\n        }\n        return _this;\n    }\n    ObservableArray.prototype.intercept = function (handler) {\n        return this.$mobx.intercept(handler);\n    };\n    ObservableArray.prototype.observe = function (listener, fireImmediately) {\n        if (fireImmediately === void 0) { fireImmediately = false; }\n        return this.$mobx.observe(listener, fireImmediately);\n    };\n    ObservableArray.prototype.clear = function () {\n        return this.splice(0);\n    };\n    ObservableArray.prototype.concat = function () {\n        var arrays = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            arrays[_i] = arguments[_i];\n        }\n        this.$mobx.atom.reportObserved();\n        return Array.prototype.concat.apply(this.peek(), arrays.map(function (a) { return (isObservableArray(a) ? a.peek() : a); }));\n    };\n    ObservableArray.prototype.replace = function (newItems) {\n        return this.$mobx.spliceWithArray(0, this.$mobx.values.length, newItems);\n    };\n    /**\n     * Converts this array back to a (shallow) javascript structure.\n     * For a deep clone use mobx.toJS\n     */\n    ObservableArray.prototype.toJS = function () {\n        return this.slice();\n    };\n    ObservableArray.prototype.toJSON = function () {\n        // Used by JSON.stringify\n        return this.toJS();\n    };\n    ObservableArray.prototype.peek = function () {\n        this.$mobx.atom.reportObserved();\n        return this.$mobx.dehanceValues(this.$mobx.values);\n    };\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find\n    ObservableArray.prototype.find = function (predicate, thisArg, fromIndex) {\n        if (fromIndex === void 0) { fromIndex = 0; }\n        var idx = this.findIndex.apply(this, arguments);\n        return idx === -1 ? undefined : this.get(idx);\n    };\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex\n    ObservableArray.prototype.findIndex = function (predicate, thisArg, fromIndex) {\n        if (fromIndex === void 0) { fromIndex = 0; }\n        var items = this.peek(), l = items.length;\n        for (var i = fromIndex; i < l; i++)\n            if (predicate.call(thisArg, items[i], i, this))\n                return i;\n        return -1;\n    };\n    /*\n     * functions that do alter the internal structure of the array, (based on lib.es6.d.ts)\n     * since these functions alter the inner structure of the array, the have side effects.\n     * Because the have side effects, they should not be used in computed function,\n     * and for that reason the do not call dependencyState.notifyObserved\n     */\n    ObservableArray.prototype.splice = function (index, deleteCount) {\n        var newItems = [];\n        for (var _i = 2; _i < arguments.length; _i++) {\n            newItems[_i - 2] = arguments[_i];\n        }\n        switch (arguments.length) {\n            case 0:\n                return [];\n            case 1:\n                return this.$mobx.spliceWithArray(index);\n            case 2:\n                return this.$mobx.spliceWithArray(index, deleteCount);\n        }\n        return this.$mobx.spliceWithArray(index, deleteCount, newItems);\n    };\n    ObservableArray.prototype.spliceWithArray = function (index, deleteCount, newItems) {\n        return this.$mobx.spliceWithArray(index, deleteCount, newItems);\n    };\n    ObservableArray.prototype.push = function () {\n        var items = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            items[_i] = arguments[_i];\n        }\n        var adm = this.$mobx;\n        adm.spliceWithArray(adm.values.length, 0, items);\n        return adm.values.length;\n    };\n    ObservableArray.prototype.pop = function () {\n        return this.splice(Math.max(this.$mobx.values.length - 1, 0), 1)[0];\n    };\n    ObservableArray.prototype.shift = function () {\n        return this.splice(0, 1)[0];\n    };\n    ObservableArray.prototype.unshift = function () {\n        var items = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            items[_i] = arguments[_i];\n        }\n        var adm = this.$mobx;\n        adm.spliceWithArray(0, 0, items);\n        return adm.values.length;\n    };\n    ObservableArray.prototype.reverse = function () {\n        // reverse by default mutates in place before returning the result\n        // which makes it both a 'derivation' and a 'mutation'.\n        // so we deviate from the default and just make it an dervitation\n        var clone = this.slice();\n        return clone.reverse.apply(clone, arguments);\n    };\n    ObservableArray.prototype.sort = function (compareFn) {\n        // sort by default mutates in place before returning the result\n        // which goes against all good practices. Let's not change the array in place!\n        var clone = this.slice();\n        return clone.sort.apply(clone, arguments);\n    };\n    ObservableArray.prototype.remove = function (value) {\n        var idx = this.$mobx.dehanceValues(this.$mobx.values).indexOf(value);\n        if (idx > -1) {\n            this.splice(idx, 1);\n            return true;\n        }\n        return false;\n    };\n    ObservableArray.prototype.move = function (fromIndex, toIndex) {\n        function checkIndex(index) {\n            if (index < 0) {\n                throw new Error(\"[mobx.array] Index out of bounds: \" + index + \" is negative\");\n            }\n            var length = this.$mobx.values.length;\n            if (index >= length) {\n                throw new Error(\"[mobx.array] Index out of bounds: \" + index + \" is not smaller than \" + length);\n            }\n        }\n        checkIndex.call(this, fromIndex);\n        checkIndex.call(this, toIndex);\n        if (fromIndex === toIndex) {\n            return;\n        }\n        var oldItems = this.$mobx.values;\n        var newItems;\n        if (fromIndex < toIndex) {\n            newItems = oldItems.slice(0, fromIndex).concat(oldItems.slice(fromIndex + 1, toIndex + 1), [\n                oldItems[fromIndex]\n            ], oldItems.slice(toIndex + 1));\n        }\n        else {\n            // toIndex < fromIndex\n            newItems = oldItems.slice(0, toIndex).concat([\n                oldItems[fromIndex]\n            ], oldItems.slice(toIndex, fromIndex), oldItems.slice(fromIndex + 1));\n        }\n        this.replace(newItems);\n    };\n    // See #734, in case property accessors are unreliable...\n    ObservableArray.prototype.get = function (index) {\n        var impl = this.$mobx;\n        if (impl) {\n            if (index < impl.values.length) {\n                impl.atom.reportObserved();\n                return impl.dehanceValue(impl.values[index]);\n            }\n            console.warn(\"[mobx.array] Attempt to read an array index (\" + index + \") that is out of bounds (\" + impl\n                .values\n                .length + \"). Please check length first. Out of bound indices will not be tracked by MobX\");\n        }\n        return undefined;\n    };\n    // See #734, in case property accessors are unreliable...\n    ObservableArray.prototype.set = function (index, newValue) {\n        var adm = this.$mobx;\n        var values = adm.values;\n        if (index < values.length) {\n            // update at index in range\n            checkIfStateModificationsAreAllowed(adm.atom);\n            var oldValue = values[index];\n            if (hasInterceptors(adm)) {\n                var change = interceptChange(adm, {\n                    type: \"update\",\n                    object: this,\n                    index: index,\n                    newValue: newValue\n                });\n                if (!change)\n                    return;\n                newValue = change.newValue;\n            }\n            newValue = adm.enhancer(newValue, oldValue);\n            var changed = newValue !== oldValue;\n            if (changed) {\n                values[index] = newValue;\n                adm.notifyArrayChildUpdate(index, newValue, oldValue);\n            }\n        }\n        else if (index === values.length) {\n            // add a new item\n            adm.spliceWithArray(index, 0, [newValue]);\n        }\n        else {\n            // out of bounds\n            throw new Error(\"[mobx.array] Index out of bounds, \" + index + \" is larger than \" + values.length);\n        }\n    };\n    return ObservableArray;\n}(StubArray));\ndeclareIterator(ObservableArray.prototype, function () {\n    return arrayAsIterator(this.slice());\n});\nObject.defineProperty(ObservableArray.prototype, \"length\", {\n    enumerable: false,\n    configurable: true,\n    get: function () {\n        return this.$mobx.getArrayLength();\n    },\n    set: function (newLength) {\n        this.$mobx.setArrayLength(newLength);\n    }\n});\n[\n    \"every\",\n    \"filter\",\n    \"forEach\",\n    \"indexOf\",\n    \"join\",\n    \"lastIndexOf\",\n    \"map\",\n    \"reduce\",\n    \"reduceRight\",\n    \"slice\",\n    \"some\",\n    \"toString\",\n    \"toLocaleString\"\n].forEach(function (funcName) {\n    var baseFunc = Array.prototype[funcName];\n    invariant(typeof baseFunc === \"function\", \"Base function not defined on Array prototype: '\" + funcName + \"'\");\n    addHiddenProp(ObservableArray.prototype, funcName, function () {\n        return baseFunc.apply(this.peek(), arguments);\n    });\n});\n/**\n * We don't want those to show up in `for (const key in ar)` ...\n */\nmakeNonEnumerable(ObservableArray.prototype, [\n    \"constructor\",\n    \"intercept\",\n    \"observe\",\n    \"clear\",\n    \"concat\",\n    \"get\",\n    \"replace\",\n    \"toJS\",\n    \"toJSON\",\n    \"peek\",\n    \"find\",\n    \"findIndex\",\n    \"splice\",\n    \"spliceWithArray\",\n    \"push\",\n    \"pop\",\n    \"set\",\n    \"shift\",\n    \"unshift\",\n    \"reverse\",\n    \"sort\",\n    \"remove\",\n    \"move\",\n    \"toString\",\n    \"toLocaleString\"\n]);\n// See #364\nvar ENTRY_0 = createArrayEntryDescriptor(0);\nfunction createArrayEntryDescriptor(index) {\n    return {\n        enumerable: false,\n        configurable: false,\n        get: function () {\n            // TODO: Check `this`?, see #752?\n            return this.get(index);\n        },\n        set: function (value) {\n            this.set(index, value);\n        }\n    };\n}\nfunction createArrayBufferItem(index) {\n    Object.defineProperty(ObservableArray.prototype, \"\" + index, createArrayEntryDescriptor(index));\n}\nfunction reserveArrayBuffer(max) {\n    for (var index = OBSERVABLE_ARRAY_BUFFER_SIZE; index < max; index++)\n        createArrayBufferItem(index);\n    OBSERVABLE_ARRAY_BUFFER_SIZE = max;\n}\nreserveArrayBuffer(1000);\nvar isObservableArrayAdministration = createInstanceofPredicate(\"ObservableArrayAdministration\", ObservableArrayAdministration);\nfunction isObservableArray(thing) {\n    return isObject(thing) && isObservableArrayAdministration(thing.$mobx);\n}\n\nvar UNCHANGED = {};\nvar ObservableValue = (function (_super) {\n    __extends(ObservableValue, _super);\n    function ObservableValue(value, enhancer, name, notifySpy) {\n        if (name === void 0) { name = \"ObservableValue@\" + getNextId(); }\n        if (notifySpy === void 0) { notifySpy = true; }\n        var _this = _super.call(this, name) || this;\n        _this.enhancer = enhancer;\n        _this.hasUnreportedChange = false;\n        _this.dehancer = undefined;\n        _this.value = enhancer(value, undefined, name);\n        if (notifySpy && isSpyEnabled()) {\n            // only notify spy if this is a stand-alone observable\n            spyReport({ type: \"create\", object: _this, newValue: _this.value });\n        }\n        return _this;\n    }\n    ObservableValue.prototype.dehanceValue = function (value) {\n        if (this.dehancer !== undefined)\n            return this.dehancer(value);\n        return value;\n    };\n    ObservableValue.prototype.set = function (newValue) {\n        var oldValue = this.value;\n        newValue = this.prepareNewValue(newValue);\n        if (newValue !== UNCHANGED) {\n            var notifySpy = isSpyEnabled();\n            if (notifySpy) {\n                spyReportStart({\n                    type: \"update\",\n                    object: this,\n                    newValue: newValue,\n                    oldValue: oldValue\n                });\n            }\n            this.setNewValue(newValue);\n            if (notifySpy)\n                spyReportEnd();\n        }\n    };\n    ObservableValue.prototype.prepareNewValue = function (newValue) {\n        checkIfStateModificationsAreAllowed(this);\n        if (hasInterceptors(this)) {\n            var change = interceptChange(this, {\n                object: this,\n                type: \"update\",\n                newValue: newValue\n            });\n            if (!change)\n                return UNCHANGED;\n            newValue = change.newValue;\n        }\n        // apply modifier\n        newValue = this.enhancer(newValue, this.value, this.name);\n        return this.value !== newValue ? newValue : UNCHANGED;\n    };\n    ObservableValue.prototype.setNewValue = function (newValue) {\n        var oldValue = this.value;\n        this.value = newValue;\n        this.reportChanged();\n        if (hasListeners(this)) {\n            notifyListeners(this, {\n                type: \"update\",\n                object: this,\n                newValue: newValue,\n                oldValue: oldValue\n            });\n        }\n    };\n    ObservableValue.prototype.get = function () {\n        this.reportObserved();\n        return this.dehanceValue(this.value);\n    };\n    ObservableValue.prototype.intercept = function (handler) {\n        return registerInterceptor(this, handler);\n    };\n    ObservableValue.prototype.observe = function (listener, fireImmediately) {\n        if (fireImmediately)\n            listener({\n                object: this,\n                type: \"update\",\n                newValue: this.value,\n                oldValue: undefined\n            });\n        return registerListener(this, listener);\n    };\n    ObservableValue.prototype.toJSON = function () {\n        return this.get();\n    };\n    ObservableValue.prototype.toString = function () {\n        return this.name + \"[\" + this.value + \"]\";\n    };\n    ObservableValue.prototype.valueOf = function () {\n        return toPrimitive(this.get());\n    };\n    return ObservableValue;\n}(BaseAtom));\nObservableValue.prototype[primitiveSymbol()] = ObservableValue.prototype.valueOf;\nvar isObservableValue = createInstanceofPredicate(\"ObservableValue\", ObservableValue);\n\nvar messages = {\n    m001: \"It is not allowed to assign new values to @action fields\",\n    m002: \"`runInAction` expects a function\",\n    m003: \"`runInAction` expects a function without arguments\",\n    m004: \"autorun expects a function\",\n    m005: \"Warning: attempted to pass an action to autorun. Actions are untracked and will not trigger on state changes. Use `reaction` or wrap only your state modification code in an action.\",\n    m006: \"Warning: attempted to pass an action to autorunAsync. Actions are untracked and will not trigger on state changes. Use `reaction` or wrap only your state modification code in an action.\",\n    m007: \"reaction only accepts 2 or 3 arguments. If migrating from MobX 2, please provide an options object\",\n    m008: \"wrapping reaction expression in `asReference` is no longer supported, use options object instead\",\n    m009: \"@computed can only be used on getter functions, like: '@computed get myProps() { return ...; }'. It looks like it was used on a property.\",\n    m010: \"@computed can only be used on getter functions, like: '@computed get myProps() { return ...; }'\",\n    m011: \"First argument to `computed` should be an expression. If using computed as decorator, don't pass it arguments\",\n    m012: \"computed takes one or two arguments if used as function\",\n    m013: \"[mobx.expr] 'expr' should only be used inside other reactive functions.\",\n    m014: \"extendObservable expected 2 or more arguments\",\n    m015: \"extendObservable expects an object as first argument\",\n    m016: \"extendObservable should not be used on maps, use map.merge instead\",\n    m017: \"all arguments of extendObservable should be objects\",\n    m018: \"extending an object with another observable (object) is not supported. Please construct an explicit propertymap, using `toJS` if need. See issue #540\",\n    m019: \"[mobx.isObservable] isObservable(object, propertyName) is not supported for arrays and maps. Use map.has or array.length instead.\",\n    m020: \"modifiers can only be used for individual object properties\",\n    m021: \"observable expects zero or one arguments\",\n    m022: \"@observable can not be used on getters, use @computed instead\",\n    m024: \"whyRun() can only be used if a derivation is active, or by passing an computed value / reaction explicitly. If you invoked whyRun from inside a computation; the computation is currently suspended but re-evaluating because somebody requested its value.\",\n    m025: \"whyRun can only be used on reactions and computed values\",\n    m026: \"`action` can only be invoked on functions\",\n    m028: \"It is not allowed to set `useStrict` when a derivation is running\",\n    m029: \"INTERNAL ERROR only onBecomeUnobserved shouldn't be called twice in a row\",\n    m030a: \"Since strict-mode is enabled, changing observed observable values outside actions is not allowed. Please wrap the code in an `action` if this change is intended. Tried to modify: \",\n    m030b: \"Side effects like changing state are not allowed at this point. Are you trying to modify state from, for example, the render function of a React component? Tried to modify: \",\n    m031: \"Computed values are not allowed to cause side effects by changing observables that are already being observed. Tried to modify: \",\n    m032: \"* This computation is suspended (not in use by any reaction) and won't run automatically.\\n\tDidn't expect this computation to be suspended at this point?\\n\t  1. Make sure this computation is used by a reaction (reaction, autorun, observer).\\n\t  2. Check whether you are using this computation synchronously (in the same stack as they reaction that needs it).\",\n    m033: \"`observe` doesn't support the fire immediately property for observable maps.\",\n    m034: \"`mobx.map` is deprecated, use `new ObservableMap` or `mobx.observable.map` instead\",\n    m035: \"Cannot make the designated object observable; it is not extensible\",\n    m036: \"It is not possible to get index atoms from arrays\",\n    m037: \"Hi there! I'm sorry you have just run into an exception.\\nIf your debugger ends up here, know that some reaction (like the render() of an observer component, autorun or reaction)\\nthrew an exception and that mobx caught it, to avoid that it brings the rest of your application down.\\nThe original cause of the exception (the code that caused this reaction to run (again)), is still in the stack.\\n\\nHowever, more interesting is the actual stack trace of the error itself.\\nHopefully the error is an instanceof Error, because in that case you can inspect the original stack of the error from where it was thrown.\\nSee `error.stack` property, or press the very subtle \\\"(...)\\\" link you see near the console.error message that probably brought you here.\\nThat stack is more interesting than the stack of this console.error itself.\\n\\nIf the exception you see is an exception you created yourself, make sure to use `throw new Error(\\\"Oops\\\")` instead of `throw \\\"Oops\\\"`,\\nbecause the javascript environment will only preserve the original stack trace in the first form.\\n\\nYou can also make sure the debugger pauses the next time this very same exception is thrown by enabling \\\"Pause on caught exception\\\".\\n(Note that it might pause on many other, unrelated exception as well).\\n\\nIf that all doesn't help you out, feel free to open an issue https://github.com/mobxjs/mobx/issues!\\n\",\n    m038: \"Missing items in this list?\\n    1. Check whether all used values are properly marked as observable (use isObservable to verify)\\n    2. Make sure you didn't dereference values too early. MobX observes props, not primitives. E.g: use 'person.name' instead of 'name' in your computation.\\n\"\n};\nfunction getMessage(id) {\n    return messages[id];\n}\n\nfunction createAction(actionName, fn) {\n    invariant(typeof fn === \"function\", getMessage(\"m026\"));\n    invariant(typeof actionName === \"string\" && actionName.length > 0, \"actions should have valid names, got: '\" + actionName + \"'\");\n    var res = function () {\n        return executeAction(actionName, fn, this, arguments);\n    };\n    res.originalFn = fn;\n    res.isMobxAction = true;\n    return res;\n}\nfunction executeAction(actionName, fn, scope, args) {\n    var runInfo = startAction(actionName, fn, scope, args);\n    try {\n        return fn.apply(scope, args);\n    }\n    finally {\n        endAction(runInfo);\n    }\n}\nfunction startAction(actionName, fn, scope, args) {\n    var notifySpy = isSpyEnabled() && !!actionName;\n    var startTime = 0;\n    if (notifySpy) {\n        startTime = Date.now();\n        var l = (args && args.length) || 0;\n        var flattendArgs = new Array(l);\n        if (l > 0)\n            for (var i = 0; i < l; i++)\n                flattendArgs[i] = args[i];\n        spyReportStart({\n            type: \"action\",\n            name: actionName,\n            fn: fn,\n            object: scope,\n            arguments: flattendArgs\n        });\n    }\n    var prevDerivation = untrackedStart();\n    startBatch();\n    var prevAllowStateChanges = allowStateChangesStart(true);\n    return {\n        prevDerivation: prevDerivation,\n        prevAllowStateChanges: prevAllowStateChanges,\n        notifySpy: notifySpy,\n        startTime: startTime\n    };\n}\nfunction endAction(runInfo) {\n    allowStateChangesEnd(runInfo.prevAllowStateChanges);\n    endBatch();\n    untrackedEnd(runInfo.prevDerivation);\n    if (runInfo.notifySpy)\n        spyReportEnd({ time: Date.now() - runInfo.startTime });\n}\nfunction useStrict(strict) {\n    invariant(globalState.trackingDerivation === null, getMessage(\"m028\"));\n    globalState.strictMode = strict;\n    globalState.allowStateChanges = !strict;\n}\nfunction isStrictModeEnabled() {\n    return globalState.strictMode;\n}\nfunction allowStateChanges(allowStateChanges, func) {\n    // TODO: deprecate / refactor this function in next major\n    // Currently only used by `@observer`\n    // Proposed change: remove first param, rename to `forbidStateChanges`,\n    // require error callback instead of the hardcoded error message now used\n    // Use `inAction` instead of allowStateChanges in derivation.ts to check strictMode\n    var prev = allowStateChangesStart(allowStateChanges);\n    var res;\n    try {\n        res = func();\n    }\n    finally {\n        allowStateChangesEnd(prev);\n    }\n    return res;\n}\nfunction allowStateChangesStart(allowStateChanges) {\n    var prev = globalState.allowStateChanges;\n    globalState.allowStateChanges = allowStateChanges;\n    return prev;\n}\nfunction allowStateChangesEnd(prev) {\n    globalState.allowStateChanges = prev;\n}\n\n/**\n * Constructs a decorator, that normalizes the differences between\n * TypeScript and Babel. Mainly caused by the fact that legacy-decorator cannot assign\n * values during instance creation to properties that have a getter setter.\n *\n * - Sigh -\n *\n * Also takes care of the difference between @decorator field and @decorator(args) field, and different forms of values.\n * For performance (cpu and mem) reasons the properties are always defined on the prototype (at least initially).\n * This means that these properties despite being enumerable might not show up in Object.keys() (but they will show up in for...in loops).\n */\nfunction createClassPropertyDecorator(\n    /**\n     * This function is invoked once, when the property is added to a new instance.\n     * When this happens is not strictly determined due to differences in TS and Babel:\n     * Typescript: Usually when constructing the new instance\n     * Babel, sometimes Typescript: during the first get / set\n     * Both: when calling `runLazyInitializers(instance)`\n     */\n    onInitialize, get, set, enumerable, \n    /**\n     * Can this decorator invoked with arguments? e.g. @decorator(args)\n     */\n    allowCustomArguments) {\n    function classPropertyDecorator(target, key, descriptor, customArgs, argLen) {\n        if (argLen === void 0) { argLen = 0; }\n        invariant(allowCustomArguments || quacksLikeADecorator(arguments), \"This function is a decorator, but it wasn't invoked like a decorator\");\n        if (!descriptor) {\n            // typescript (except for getter / setters)\n            var newDescriptor = {\n                enumerable: enumerable,\n                configurable: true,\n                get: function () {\n                    if (!this.__mobxInitializedProps || this.__mobxInitializedProps[key] !== true)\n                        typescriptInitializeProperty(this, key, undefined, onInitialize, customArgs, descriptor);\n                    return get.call(this, key);\n                },\n                set: function (v) {\n                    if (!this.__mobxInitializedProps || this.__mobxInitializedProps[key] !== true) {\n                        typescriptInitializeProperty(this, key, v, onInitialize, customArgs, descriptor);\n                    }\n                    else {\n                        set.call(this, key, v);\n                    }\n                }\n            };\n            if (arguments.length < 3 || (arguments.length === 5 && argLen < 3)) {\n                // Typescript target is ES3, so it won't define property for us\n                // or using Reflect.decorate polyfill, which will return no descriptor\n                // (see https://github.com/mobxjs/mobx/issues/333)\n                Object.defineProperty(target, key, newDescriptor);\n            }\n            return newDescriptor;\n        }\n        else {\n            // babel and typescript getter / setter props\n            if (!hasOwnProperty(target, \"__mobxLazyInitializers\")) {\n                addHiddenProp(target, \"__mobxLazyInitializers\", (target.__mobxLazyInitializers && target.__mobxLazyInitializers.slice()) || [] // support inheritance\n                );\n            }\n            var value_1 = descriptor.value, initializer_1 = descriptor.initializer;\n            target.__mobxLazyInitializers.push(function (instance) {\n                onInitialize(instance, key, initializer_1 ? initializer_1.call(instance) : value_1, customArgs, descriptor);\n            });\n            return {\n                enumerable: enumerable,\n                configurable: true,\n                get: function () {\n                    if (this.__mobxDidRunLazyInitializers !== true)\n                        runLazyInitializers(this);\n                    return get.call(this, key);\n                },\n                set: function (v) {\n                    if (this.__mobxDidRunLazyInitializers !== true)\n                        runLazyInitializers(this);\n                    set.call(this, key, v);\n                }\n            };\n        }\n    }\n    if (allowCustomArguments) {\n        /** If custom arguments are allowed, we should return a function that returns a decorator */\n        return function () {\n            /** Direct invocation: @decorator bla */\n            if (quacksLikeADecorator(arguments))\n                return classPropertyDecorator.apply(null, arguments);\n            /** Indirect invocation: @decorator(args) bla */\n            var outerArgs = arguments;\n            var argLen = arguments.length;\n            return function (target, key, descriptor) {\n                return classPropertyDecorator(target, key, descriptor, outerArgs, argLen);\n            };\n        };\n    }\n    return classPropertyDecorator;\n}\nfunction typescriptInitializeProperty(instance, key, v, onInitialize, customArgs, baseDescriptor) {\n    if (!hasOwnProperty(instance, \"__mobxInitializedProps\"))\n        addHiddenProp(instance, \"__mobxInitializedProps\", {});\n    instance.__mobxInitializedProps[key] = true;\n    onInitialize(instance, key, v, customArgs, baseDescriptor);\n}\nfunction runLazyInitializers(instance) {\n    if (instance.__mobxDidRunLazyInitializers === true)\n        return;\n    if (instance.__mobxLazyInitializers) {\n        addHiddenProp(instance, \"__mobxDidRunLazyInitializers\", true);\n        instance.__mobxDidRunLazyInitializers &&\n            instance.__mobxLazyInitializers.forEach(function (initializer) { return initializer(instance); });\n    }\n}\nfunction quacksLikeADecorator(args) {\n    return (args.length === 2 || args.length === 3) && typeof args[1] === \"string\";\n}\n\nvar actionFieldDecorator = createClassPropertyDecorator(function (target, key, value, args, originalDescriptor) {\n    var actionName = args && args.length === 1 ? args[0] : value.name || key || \"<unnamed action>\";\n    var wrappedAction = action(actionName, value);\n    addHiddenProp(target, key, wrappedAction);\n}, function (key) {\n    return this[key];\n}, function () {\n    invariant(false, getMessage(\"m001\"));\n}, false, true);\nvar boundActionDecorator = createClassPropertyDecorator(function (target, key, value) {\n    defineBoundAction(target, key, value);\n}, function (key) {\n    return this[key];\n}, function () {\n    invariant(false, getMessage(\"m001\"));\n}, false, false);\nvar action = function action(arg1, arg2, arg3, arg4) {\n    if (arguments.length === 1 && typeof arg1 === \"function\")\n        return createAction(arg1.name || \"<unnamed action>\", arg1);\n    if (arguments.length === 2 && typeof arg2 === \"function\")\n        return createAction(arg1, arg2);\n    if (arguments.length === 1 && typeof arg1 === \"string\")\n        return namedActionDecorator(arg1);\n    return namedActionDecorator(arg2).apply(null, arguments);\n};\naction.bound = function boundAction(arg1, arg2, arg3) {\n    if (typeof arg1 === \"function\") {\n        var action_1 = createAction(\"<not yet bound action>\", arg1);\n        action_1.autoBind = true;\n        return action_1;\n    }\n    return boundActionDecorator.apply(null, arguments);\n};\nfunction namedActionDecorator(name) {\n    return function (target, prop, descriptor) {\n        if (descriptor && typeof descriptor.value === \"function\") {\n            // TypeScript @action method() { }. Defined on proto before being decorated\n            // Don't use the field decorator if we are just decorating a method\n            descriptor.value = createAction(name, descriptor.value);\n            descriptor.enumerable = false;\n            descriptor.configurable = true;\n            return descriptor;\n        }\n        if (descriptor !== undefined && descriptor.get !== undefined) {\n            throw new Error(\"[mobx] action is not expected to be used with getters\");\n        }\n        // bound instance methods\n        return actionFieldDecorator(name).apply(this, arguments);\n    };\n}\nfunction runInAction(arg1, arg2, arg3) {\n    var actionName = typeof arg1 === \"string\" ? arg1 : arg1.name || \"<unnamed action>\";\n    var fn = typeof arg1 === \"function\" ? arg1 : arg2;\n    var scope = typeof arg1 === \"function\" ? arg2 : arg3;\n    invariant(typeof fn === \"function\", getMessage(\"m002\"));\n    invariant(fn.length === 0, getMessage(\"m003\"));\n    invariant(typeof actionName === \"string\" && actionName.length > 0, \"actions should have valid names, got: '\" + actionName + \"'\");\n    return executeAction(actionName, fn, scope, undefined);\n}\nfunction isAction(thing) {\n    return typeof thing === \"function\" && thing.isMobxAction === true;\n}\nfunction defineBoundAction(target, propertyName, fn) {\n    var res = function () {\n        return executeAction(propertyName, fn, target, arguments);\n    };\n    res.isMobxAction = true;\n    addHiddenProp(target, propertyName, res);\n}\n\n// Copied from https://github.com/jashkenas/underscore/blob/5c237a7c682fb68fd5378203f0bf22dce1624854/underscore.js#L1186-L1289\nfunction deepEqual(a, b) {\n    return eq(a, b);\n}\n// Internal recursive comparison function for `isEqual`.\nfunction eq(a, b, aStack, bStack) {\n    // Identical objects are equal. `0 === -0`, but they aren't identical.\n    // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n    if (a === b)\n        return a !== 0 || 1 / a === 1 / b;\n    // `null` or `undefined` only equal to itself (strict comparison).\n    if (a == null || b == null)\n        return false;\n    // `NaN`s are equivalent, but non-reflexive.\n    if (a !== a)\n        return b !== b;\n    // Exhaust primitive checks\n    var type = typeof a;\n    if (type !== \"function\" && type !== \"object\" && typeof b != \"object\")\n        return false;\n    return deepEq(a, b, aStack, bStack);\n}\nvar toString = Object.prototype.toString;\n// Internal recursive comparison function for `isEqual`.\nfunction deepEq(a, b, aStack, bStack) {\n    // Unwrap any wrapped objects.\n    a = unwrap(a);\n    b = unwrap(b);\n    // Compare `[[Class]]` names.\n    var className = toString.call(a);\n    if (className !== toString.call(b))\n        return false;\n    switch (className) {\n        // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n        case \"[object RegExp]\":\n        // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n        case \"[object String]\":\n            // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n            // equivalent to `new String(\"5\")`.\n            return \"\" + a === \"\" + b;\n        case \"[object Number]\":\n            // `NaN`s are equivalent, but non-reflexive.\n            // Object(NaN) is equivalent to NaN.\n            if (+a !== +a)\n                return +b !== +b;\n            // An `egal` comparison is performed for other numeric values.\n            return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n        case \"[object Date]\":\n        case \"[object Boolean]\":\n            // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n            // millisecond representations. Note that invalid dates with millisecond representations\n            // of `NaN` are not equivalent.\n            return +a === +b;\n        case \"[object Symbol]\":\n            return (typeof Symbol !== \"undefined\" && Symbol.valueOf.call(a) === Symbol.valueOf.call(b));\n    }\n    var areArrays = className === \"[object Array]\";\n    if (!areArrays) {\n        if (typeof a != \"object\" || typeof b != \"object\")\n            return false;\n        // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n        // from different frames are.\n        var aCtor = a.constructor, bCtor = b.constructor;\n        if (aCtor !== bCtor &&\n            !(typeof aCtor === \"function\" &&\n                aCtor instanceof aCtor &&\n                typeof bCtor === \"function\" &&\n                bCtor instanceof bCtor) &&\n            (\"constructor\" in a && \"constructor\" in b)) {\n            return false;\n        }\n    }\n    // Assume equality for cyclic structures. The algorithm for detecting cyclic\n    // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n    // Initializing stack of traversed objects.\n    // It's done here since we only need them for objects and arrays comparison.\n    aStack = aStack || [];\n    bStack = bStack || [];\n    var length = aStack.length;\n    while (length--) {\n        // Linear search. Performance is inversely proportional to the number of\n        // unique nested structures.\n        if (aStack[length] === a)\n            return bStack[length] === b;\n    }\n    // Add the first object to the stack of traversed objects.\n    aStack.push(a);\n    bStack.push(b);\n    // Recursively compare objects and arrays.\n    if (areArrays) {\n        // Compare array lengths to determine if a deep comparison is necessary.\n        length = a.length;\n        if (length !== b.length)\n            return false;\n        // Deep compare the contents, ignoring non-numeric properties.\n        while (length--) {\n            if (!eq(a[length], b[length], aStack, bStack))\n                return false;\n        }\n    }\n    else {\n        // Deep compare objects.\n        var keys = Object.keys(a), key;\n        length = keys.length;\n        // Ensure that both objects contain the same number of properties before comparing deep equality.\n        if (Object.keys(b).length !== length)\n            return false;\n        while (length--) {\n            // Deep compare each member\n            key = keys[length];\n            if (!(has(b, key) && eq(a[key], b[key], aStack, bStack)))\n                return false;\n        }\n    }\n    // Remove the first object from the stack of traversed objects.\n    aStack.pop();\n    bStack.pop();\n    return true;\n}\nfunction unwrap(a) {\n    if (isObservableArray(a))\n        return a.peek();\n    if (isObservableMap(a))\n        return a.entries();\n    if (isES6Map(a))\n        return iteratorToArray(a.entries());\n    return a;\n}\nfunction has(a, key) {\n    return Object.prototype.hasOwnProperty.call(a, key);\n}\n\nfunction identityComparer(a, b) {\n    return a === b;\n}\nfunction structuralComparer(a, b) {\n    return deepEqual(a, b);\n}\nfunction defaultComparer(a, b) {\n    return areBothNaN(a, b) || identityComparer(a, b);\n}\nvar comparer = {\n    identity: identityComparer,\n    structural: structuralComparer,\n    default: defaultComparer\n};\n\nfunction autorun(arg1, arg2, arg3) {\n    var name, view, scope;\n    if (typeof arg1 === \"string\") {\n        name = arg1;\n        view = arg2;\n        scope = arg3;\n    }\n    else {\n        name = arg1.name || \"Autorun@\" + getNextId();\n        view = arg1;\n        scope = arg2;\n    }\n    invariant(typeof view === \"function\", getMessage(\"m004\"));\n    invariant(isAction(view) === false, getMessage(\"m005\"));\n    if (scope)\n        view = view.bind(scope);\n    var reaction = new Reaction(name, function () {\n        this.track(reactionRunner);\n    });\n    function reactionRunner() {\n        view(reaction);\n    }\n    reaction.schedule();\n    return reaction.getDisposer();\n}\nfunction when(arg1, arg2, arg3, arg4) {\n    var name, predicate, effect, scope;\n    if (typeof arg1 === \"string\") {\n        name = arg1;\n        predicate = arg2;\n        effect = arg3;\n        scope = arg4;\n    }\n    else {\n        name = \"When@\" + getNextId();\n        predicate = arg1;\n        effect = arg2;\n        scope = arg3;\n    }\n    var disposer = autorun(name, function (r) {\n        if (predicate.call(scope)) {\n            r.dispose();\n            var prevUntracked = untrackedStart();\n            effect.call(scope);\n            untrackedEnd(prevUntracked);\n        }\n    });\n    return disposer;\n}\nfunction autorunAsync(arg1, arg2, arg3, arg4) {\n    var name, func, delay, scope;\n    if (typeof arg1 === \"string\") {\n        name = arg1;\n        func = arg2;\n        delay = arg3;\n        scope = arg4;\n    }\n    else {\n        name = arg1.name || \"AutorunAsync@\" + getNextId();\n        func = arg1;\n        delay = arg2;\n        scope = arg3;\n    }\n    invariant(isAction(func) === false, getMessage(\"m006\"));\n    if (delay === void 0)\n        delay = 1;\n    if (scope)\n        func = func.bind(scope);\n    var isScheduled = false;\n    var r = new Reaction(name, function () {\n        if (!isScheduled) {\n            isScheduled = true;\n            setTimeout(function () {\n                isScheduled = false;\n                if (!r.isDisposed)\n                    r.track(reactionRunner);\n            }, delay);\n        }\n    });\n    function reactionRunner() {\n        func(r);\n    }\n    r.schedule();\n    return r.getDisposer();\n}\nfunction reaction(expression, effect, arg3) {\n    if (arguments.length > 3) {\n        fail(getMessage(\"m007\"));\n    }\n    if (isModifierDescriptor(expression)) {\n        fail(getMessage(\"m008\"));\n    }\n    var opts;\n    if (typeof arg3 === \"object\") {\n        opts = arg3;\n    }\n    else {\n        opts = {};\n    }\n    opts.name =\n        opts.name || expression.name || effect.name || \"Reaction@\" + getNextId();\n    opts.fireImmediately = arg3 === true || opts.fireImmediately === true;\n    opts.delay = opts.delay || 0;\n    opts.compareStructural = opts.compareStructural || opts.struct || false;\n    // TODO: creates ugly spy events, use `effect = (r) => runInAction(opts.name, () => effect(r))` instead\n    effect = action(opts.name, opts.context ? effect.bind(opts.context) : effect);\n    if (opts.context) {\n        expression = expression.bind(opts.context);\n    }\n    var firstTime = true;\n    var isScheduled = false;\n    var value;\n    var equals = opts.equals\n        ? opts.equals\n        : opts.compareStructural || opts.struct ? comparer.structural : comparer.default;\n    var r = new Reaction(opts.name, function () {\n        if (firstTime || opts.delay < 1) {\n            reactionRunner();\n        }\n        else if (!isScheduled) {\n            isScheduled = true;\n            setTimeout(function () {\n                isScheduled = false;\n                reactionRunner();\n            }, opts.delay);\n        }\n    });\n    function reactionRunner() {\n        if (r.isDisposed)\n            return;\n        var changed = false;\n        r.track(function () {\n            var nextValue = expression(r);\n            changed = firstTime || !equals(value, nextValue);\n            value = nextValue;\n        });\n        if (firstTime && opts.fireImmediately)\n            effect(value, r);\n        if (!firstTime && changed === true)\n            effect(value, r);\n        if (firstTime)\n            firstTime = false;\n    }\n    r.schedule();\n    return r.getDisposer();\n}\n\n/**\n * A node in the state dependency root that observes other nodes, and can be observed itself.\n *\n * ComputedValue will remember the result of the computation for the duration of the batch, or\n * while being observed.\n *\n * During this time it will recompute only when one of its direct dependencies changed,\n * but only when it is being accessed with `ComputedValue.get()`.\n *\n * Implementation description:\n * 1. First time it's being accessed it will compute and remember result\n *    give back remembered result until 2. happens\n * 2. First time any deep dependency change, propagate POSSIBLY_STALE to all observers, wait for 3.\n * 3. When it's being accessed, recompute if any shallow dependency changed.\n *    if result changed: propagate STALE to all observers, that were POSSIBLY_STALE from the last step.\n *    go to step 2. either way\n *\n * If at any point it's outside batch and it isn't observed: reset everything and go to 1.\n */\nvar ComputedValue = (function () {\n    /**\n     * Create a new computed value based on a function expression.\n     *\n     * The `name` property is for debug purposes only.\n     *\n     * The `equals` property specifies the comparer function to use to determine if a newly produced\n     * value differs from the previous value. Two comparers are provided in the library; `defaultComparer`\n     * compares based on identity comparison (===), and `structualComparer` deeply compares the structure.\n     * Structural comparison can be convenient if you always produce an new aggregated object and\n     * don't want to notify observers if it is structurally the same.\n     * This is useful for working with vectors, mouse coordinates etc.\n     */\n    function ComputedValue(derivation, scope, equals, name, setter) {\n        this.derivation = derivation;\n        this.scope = scope;\n        this.equals = equals;\n        this.dependenciesState = IDerivationState.NOT_TRACKING;\n        this.observing = []; // nodes we are looking at. Our value depends on these nodes\n        this.newObserving = null; // during tracking it's an array with new observed observers\n        this.isPendingUnobservation = false;\n        this.observers = [];\n        this.observersIndexes = {};\n        this.diffValue = 0;\n        this.runId = 0;\n        this.lastAccessedBy = 0;\n        this.lowestObserverState = IDerivationState.UP_TO_DATE;\n        this.unboundDepsCount = 0;\n        this.__mapid = \"#\" + getNextId();\n        this.value = new CaughtException(null);\n        this.isComputing = false; // to check for cycles\n        this.isRunningSetter = false;\n        this.isTracing = TraceMode.NONE;\n        this.name = name || \"ComputedValue@\" + getNextId();\n        if (setter)\n            this.setter = createAction(name + \"-setter\", setter);\n    }\n    ComputedValue.prototype.onBecomeStale = function () {\n        propagateMaybeChanged(this);\n    };\n    ComputedValue.prototype.onBecomeUnobserved = function () {\n        clearObserving(this);\n        this.value = undefined;\n    };\n    /**\n     * Returns the current value of this computed value.\n     * Will evaluate its computation first if needed.\n     */\n    ComputedValue.prototype.get = function () {\n        invariant(!this.isComputing, \"Cycle detected in computation \" + this.name, this.derivation);\n        if (globalState.inBatch === 0) {\n            // This is an minor optimization which could be omitted to simplify the code\n            // The computedValue is accessed outside of any mobx stuff. Batch observing should be enough and don't need\n            // tracking as it will never be called again inside this batch.\n            startBatch();\n            if (shouldCompute(this)) {\n                if (this.isTracing !== TraceMode.NONE) {\n                    console.log(\"[mobx.trace] '\" + this\n                        .name + \"' is being read outside a reactive context and doing a full recompute\");\n                }\n                this.value = this.computeValue(false);\n            }\n            endBatch();\n        }\n        else {\n            reportObserved(this);\n            if (shouldCompute(this))\n                if (this.trackAndCompute())\n                    propagateChangeConfirmed(this);\n        }\n        var result = this.value;\n        if (isCaughtException(result))\n            throw result.cause;\n        return result;\n    };\n    ComputedValue.prototype.peek = function () {\n        var res = this.computeValue(false);\n        if (isCaughtException(res))\n            throw res.cause;\n        return res;\n    };\n    ComputedValue.prototype.set = function (value) {\n        if (this.setter) {\n            invariant(!this.isRunningSetter, \"The setter of computed value '\" + this\n                .name + \"' is trying to update itself. Did you intend to update an _observable_ value, instead of the computed property?\");\n            this.isRunningSetter = true;\n            try {\n                this.setter.call(this.scope, value);\n            }\n            finally {\n                this.isRunningSetter = false;\n            }\n        }\n        else\n            invariant(false, \"[ComputedValue '\" + this\n                .name + \"'] It is not possible to assign a new value to a computed value.\");\n    };\n    ComputedValue.prototype.trackAndCompute = function () {\n        if (isSpyEnabled()) {\n            spyReport({\n                object: this.scope,\n                type: \"compute\",\n                fn: this.derivation\n            });\n        }\n        var oldValue = this.value;\n        var wasSuspended = \n        /* see #1208 */ this.dependenciesState === IDerivationState.NOT_TRACKING;\n        var newValue = (this.value = this.computeValue(true));\n        return (wasSuspended ||\n            isCaughtException(oldValue) ||\n            isCaughtException(newValue) ||\n            !this.equals(oldValue, newValue));\n    };\n    ComputedValue.prototype.computeValue = function (track) {\n        this.isComputing = true;\n        globalState.computationDepth++;\n        var res;\n        if (track) {\n            res = trackDerivedFunction(this, this.derivation, this.scope);\n        }\n        else {\n            try {\n                res = this.derivation.call(this.scope);\n            }\n            catch (e) {\n                res = new CaughtException(e);\n            }\n        }\n        globalState.computationDepth--;\n        this.isComputing = false;\n        return res;\n    };\n    ComputedValue.prototype.observe = function (listener, fireImmediately) {\n        var _this = this;\n        var firstTime = true;\n        var prevValue = undefined;\n        return autorun(function () {\n            var newValue = _this.get();\n            if (!firstTime || fireImmediately) {\n                var prevU = untrackedStart();\n                listener({\n                    type: \"update\",\n                    object: _this,\n                    newValue: newValue,\n                    oldValue: prevValue\n                });\n                untrackedEnd(prevU);\n            }\n            firstTime = false;\n            prevValue = newValue;\n        });\n    };\n    ComputedValue.prototype.toJSON = function () {\n        return this.get();\n    };\n    ComputedValue.prototype.toString = function () {\n        return this.name + \"[\" + this.derivation.toString() + \"]\";\n    };\n    ComputedValue.prototype.valueOf = function () {\n        return toPrimitive(this.get());\n    };\n    ComputedValue.prototype.whyRun = function () {\n        var isTracking = Boolean(globalState.trackingDerivation);\n        var observing = unique(this.isComputing ? this.newObserving : this.observing).map(function (dep) { return dep.name; });\n        var observers = unique(getObservers(this).map(function (dep) { return dep.name; }));\n        return (\"\\nWhyRun? computation '\" + this.name + \"':\\n * Running because: \" + (isTracking\n            ? \"[active] the value of this computation is needed by a reaction\"\n            : this.isComputing\n                ? \"[get] The value of this computed was requested outside a reaction\"\n                : \"[idle] not running at the moment\") + \"\\n\" +\n            (this.dependenciesState === IDerivationState.NOT_TRACKING\n                ? getMessage(\"m032\")\n                : \" * This computation will re-run if any of the following observables changes:\\n    \" + joinStrings(observing) + \"\\n    \" + (this.isComputing && isTracking\n                    ? \" (... or any observable accessed during the remainder of the current run)\"\n                    : \"\") + \"\\n    \" + getMessage(\"m038\") + \"\\n\\n  * If the outcome of this computation changes, the following observers will be re-run:\\n    \" + joinStrings(observers) + \"\\n\"));\n    };\n    return ComputedValue;\n}());\nComputedValue.prototype[primitiveSymbol()] = ComputedValue.prototype.valueOf;\nvar isComputedValue = createInstanceofPredicate(\"ComputedValue\", ComputedValue);\n\nvar ObservableObjectAdministration = (function () {\n    function ObservableObjectAdministration(target, name) {\n        this.target = target;\n        this.name = name;\n        this.values = {};\n        this.changeListeners = null;\n        this.interceptors = null;\n    }\n    /**\n     * Observes this object. Triggers for the events 'add', 'update' and 'delete'.\n     * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/observe\n     * for callback details\n     */\n    ObservableObjectAdministration.prototype.observe = function (callback, fireImmediately) {\n        invariant(fireImmediately !== true, \"`observe` doesn't support the fire immediately property for observable objects.\");\n        return registerListener(this, callback);\n    };\n    ObservableObjectAdministration.prototype.intercept = function (handler) {\n        return registerInterceptor(this, handler);\n    };\n    return ObservableObjectAdministration;\n}());\nfunction asObservableObject(target, name) {\n    if (isObservableObject(target) && target.hasOwnProperty(\"$mobx\"))\n        return target.$mobx;\n    invariant(Object.isExtensible(target), getMessage(\"m035\"));\n    if (!isPlainObject(target))\n        name = (target.constructor.name || \"ObservableObject\") + \"@\" + getNextId();\n    if (!name)\n        name = \"ObservableObject@\" + getNextId();\n    var adm = new ObservableObjectAdministration(target, name);\n    addHiddenFinalProp(target, \"$mobx\", adm);\n    return adm;\n}\nfunction defineObservablePropertyFromDescriptor(adm, propName, descriptor, defaultEnhancer) {\n    if (adm.values[propName] && !isComputedValue(adm.values[propName])) {\n        // already observable property\n        invariant(\"value\" in descriptor, \"The property \" + propName + \" in \" + adm.name + \" is already observable, cannot redefine it as computed property\");\n        adm.target[propName] = descriptor.value; // the property setter will make 'value' reactive if needed.\n        return;\n    }\n    // not yet observable property\n    if (\"value\" in descriptor) {\n        // not a computed value\n        if (isModifierDescriptor(descriptor.value)) {\n            // x : ref(someValue)\n            var modifierDescriptor = descriptor.value;\n            defineObservableProperty(adm, propName, modifierDescriptor.initialValue, modifierDescriptor.enhancer);\n        }\n        else if (isAction(descriptor.value) && descriptor.value.autoBind === true) {\n            defineBoundAction(adm.target, propName, descriptor.value.originalFn);\n        }\n        else if (isComputedValue(descriptor.value)) {\n            // x: computed(someExpr)\n            defineComputedPropertyFromComputedValue(adm, propName, descriptor.value);\n        }\n        else {\n            // x: someValue\n            defineObservableProperty(adm, propName, descriptor.value, defaultEnhancer);\n        }\n    }\n    else {\n        // get x() { return 3 } set x(v) { }\n        defineComputedProperty(adm, propName, descriptor.get, descriptor.set, comparer.default, true);\n    }\n}\nfunction defineObservableProperty(adm, propName, newValue, enhancer) {\n    assertPropertyConfigurable(adm.target, propName);\n    if (hasInterceptors(adm)) {\n        var change = interceptChange(adm, {\n            object: adm.target,\n            name: propName,\n            type: \"add\",\n            newValue: newValue\n        });\n        if (!change)\n            return;\n        newValue = change.newValue;\n    }\n    var observable = (adm.values[propName] = new ObservableValue(newValue, enhancer, adm.name + \".\" + propName, false));\n    newValue = observable.value; // observableValue might have changed it\n    Object.defineProperty(adm.target, propName, generateObservablePropConfig(propName));\n    notifyPropertyAddition(adm, adm.target, propName, newValue);\n}\nfunction defineComputedProperty(adm, propName, getter, setter, equals, asInstanceProperty) {\n    if (asInstanceProperty)\n        assertPropertyConfigurable(adm.target, propName);\n    adm.values[propName] = new ComputedValue(getter, adm.target, equals, adm.name + \".\" + propName, setter);\n    if (asInstanceProperty) {\n        Object.defineProperty(adm.target, propName, generateComputedPropConfig(propName));\n    }\n}\nfunction defineComputedPropertyFromComputedValue(adm, propName, computedValue) {\n    var name = adm.name + \".\" + propName;\n    computedValue.name = name;\n    if (!computedValue.scope)\n        computedValue.scope = adm.target;\n    adm.values[propName] = computedValue;\n    Object.defineProperty(adm.target, propName, generateComputedPropConfig(propName));\n}\nvar observablePropertyConfigs = {};\nvar computedPropertyConfigs = {};\nfunction generateObservablePropConfig(propName) {\n    return (observablePropertyConfigs[propName] ||\n        (observablePropertyConfigs[propName] = {\n            configurable: true,\n            enumerable: true,\n            get: function () {\n                return this.$mobx.values[propName].get();\n            },\n            set: function (v) {\n                setPropertyValue(this, propName, v);\n            }\n        }));\n}\nfunction generateComputedPropConfig(propName) {\n    return (computedPropertyConfigs[propName] ||\n        (computedPropertyConfigs[propName] = {\n            configurable: true,\n            enumerable: false,\n            get: function () {\n                return this.$mobx.values[propName].get();\n            },\n            set: function (v) {\n                return this.$mobx.values[propName].set(v);\n            }\n        }));\n}\nfunction setPropertyValue(instance, name, newValue) {\n    var adm = instance.$mobx;\n    var observable = adm.values[name];\n    // intercept\n    if (hasInterceptors(adm)) {\n        var change = interceptChange(adm, {\n            type: \"update\",\n            object: instance,\n            name: name,\n            newValue: newValue\n        });\n        if (!change)\n            return;\n        newValue = change.newValue;\n    }\n    newValue = observable.prepareNewValue(newValue);\n    // notify spy & observers\n    if (newValue !== UNCHANGED) {\n        var notify = hasListeners(adm);\n        var notifySpy = isSpyEnabled();\n        var change = notify || notifySpy\n            ? {\n                type: \"update\",\n                object: instance,\n                oldValue: observable.value,\n                name: name,\n                newValue: newValue\n            }\n            : null;\n        if (notifySpy)\n            spyReportStart(change);\n        observable.setNewValue(newValue);\n        if (notify)\n            notifyListeners(adm, change);\n        if (notifySpy)\n            spyReportEnd();\n    }\n}\nfunction notifyPropertyAddition(adm, object, name, newValue) {\n    var notify = hasListeners(adm);\n    var notifySpy = isSpyEnabled();\n    var change = notify || notifySpy\n        ? {\n            type: \"add\",\n            object: object,\n            name: name,\n            newValue: newValue\n        }\n        : null;\n    if (notifySpy)\n        spyReportStart(change);\n    if (notify)\n        notifyListeners(adm, change);\n    if (notifySpy)\n        spyReportEnd();\n}\nvar isObservableObjectAdministration = createInstanceofPredicate(\"ObservableObjectAdministration\", ObservableObjectAdministration);\nfunction isObservableObject(thing) {\n    if (isObject(thing)) {\n        // Initializers run lazily when transpiling to babel, so make sure they are run...\n        runLazyInitializers(thing);\n        return isObservableObjectAdministration(thing.$mobx);\n    }\n    return false;\n}\n\n/**\n * Returns true if the provided value is reactive.\n * @param value object, function or array\n * @param property if property is specified, checks whether value.property is reactive.\n */\nfunction isObservable(value, property) {\n    if (value === null || value === undefined)\n        return false;\n    if (property !== undefined) {\n        if (isObservableArray(value) || isObservableMap(value))\n            throw new Error(getMessage(\"m019\"));\n        else if (isObservableObject(value)) {\n            var o = value.$mobx;\n            return o.values && !!o.values[property];\n        }\n        return false;\n    }\n    // For first check, see #701\n    return (isObservableObject(value) ||\n        !!value.$mobx ||\n        isAtom(value) ||\n        isReaction(value) ||\n        isComputedValue(value));\n}\n\nfunction createDecoratorForEnhancer(enhancer) {\n    invariant(!!enhancer, \":(\");\n    return createClassPropertyDecorator(function (target, name, baseValue, _, baseDescriptor) {\n        assertPropertyConfigurable(target, name);\n        invariant(!baseDescriptor || !baseDescriptor.get, getMessage(\"m022\"));\n        var adm = asObservableObject(target, undefined);\n        defineObservableProperty(adm, name, baseValue, enhancer);\n    }, function (name) {\n        var observable = this.$mobx.values[name];\n        if (observable === undefined // See #505\n        )\n            return undefined;\n        return observable.get();\n    }, function (name, value) {\n        setPropertyValue(this, name, value);\n    }, true, false);\n}\n\nfunction extendObservable(target) {\n    var properties = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        properties[_i - 1] = arguments[_i];\n    }\n    return extendObservableHelper(target, deepEnhancer, properties);\n}\nfunction extendShallowObservable(target) {\n    var properties = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        properties[_i - 1] = arguments[_i];\n    }\n    return extendObservableHelper(target, referenceEnhancer, properties);\n}\nfunction extendObservableHelper(target, defaultEnhancer, properties) {\n    invariant(arguments.length >= 2, getMessage(\"m014\"));\n    invariant(typeof target === \"object\", getMessage(\"m015\"));\n    invariant(!isObservableMap(target), getMessage(\"m016\"));\n    properties.forEach(function (propSet) {\n        invariant(typeof propSet === \"object\", getMessage(\"m017\"));\n        invariant(!isObservable(propSet), getMessage(\"m018\"));\n    });\n    var adm = asObservableObject(target);\n    var definedProps = {};\n    // Note could be optimised if properties.length === 1\n    for (var i = properties.length - 1; i >= 0; i--) {\n        var propSet = properties[i];\n        for (var key in propSet)\n            if (definedProps[key] !== true && hasOwnProperty(propSet, key)) {\n                definedProps[key] = true;\n                if (target === propSet && !isPropertyConfigurable(target, key))\n                    continue; // see #111, skip non-configurable or non-writable props for `observable(object)`.\n                var descriptor = Object.getOwnPropertyDescriptor(propSet, key);\n                defineObservablePropertyFromDescriptor(adm, key, descriptor, defaultEnhancer);\n            }\n    }\n    return target;\n}\n\nvar deepDecorator = createDecoratorForEnhancer(deepEnhancer);\nvar shallowDecorator = createDecoratorForEnhancer(shallowEnhancer);\nvar refDecorator = createDecoratorForEnhancer(referenceEnhancer);\nvar deepStructDecorator = createDecoratorForEnhancer(deepStructEnhancer);\nvar refStructDecorator = createDecoratorForEnhancer(refStructEnhancer);\n/**\n * Turns an object, array or function into a reactive structure.\n * @param v the value which should become observable.\n */\nfunction createObservable(v) {\n    if (v === void 0) { v = undefined; }\n    // @observable someProp;\n    if (typeof arguments[1] === \"string\")\n        return deepDecorator.apply(null, arguments);\n    invariant(arguments.length <= 1, getMessage(\"m021\"));\n    invariant(!isModifierDescriptor(v), getMessage(\"m020\"));\n    // it is an observable already, done\n    if (isObservable(v))\n        return v;\n    // something that can be converted and mutated?\n    var res = deepEnhancer(v, undefined, undefined);\n    // this value could be converted to a new observable data structure, return it\n    if (res !== v)\n        return res;\n    // otherwise, just box it\n    return observable.box(v);\n}\nvar observableFactories = {\n    box: function (value, name) {\n        if (arguments.length > 2)\n            incorrectlyUsedAsDecorator(\"box\");\n        return new ObservableValue(value, deepEnhancer, name);\n    },\n    shallowBox: function (value, name) {\n        if (arguments.length > 2)\n            incorrectlyUsedAsDecorator(\"shallowBox\");\n        return new ObservableValue(value, referenceEnhancer, name);\n    },\n    array: function (initialValues, name) {\n        if (arguments.length > 2)\n            incorrectlyUsedAsDecorator(\"array\");\n        return new ObservableArray(initialValues, deepEnhancer, name);\n    },\n    shallowArray: function (initialValues, name) {\n        if (arguments.length > 2)\n            incorrectlyUsedAsDecorator(\"shallowArray\");\n        return new ObservableArray(initialValues, referenceEnhancer, name);\n    },\n    map: function (initialValues, name) {\n        if (arguments.length > 2)\n            incorrectlyUsedAsDecorator(\"map\");\n        return new ObservableMap(initialValues, deepEnhancer, name);\n    },\n    shallowMap: function (initialValues, name) {\n        if (arguments.length > 2)\n            incorrectlyUsedAsDecorator(\"shallowMap\");\n        return new ObservableMap(initialValues, referenceEnhancer, name);\n    },\n    object: function (props, name) {\n        if (arguments.length > 2)\n            incorrectlyUsedAsDecorator(\"object\");\n        var res = {};\n        // convert to observable object\n        asObservableObject(res, name);\n        // add properties\n        extendObservable(res, props);\n        return res;\n    },\n    shallowObject: function (props, name) {\n        if (arguments.length > 2)\n            incorrectlyUsedAsDecorator(\"shallowObject\");\n        var res = {};\n        asObservableObject(res, name);\n        extendShallowObservable(res, props);\n        return res;\n    },\n    ref: function () {\n        if (arguments.length < 2) {\n            // although ref creates actually a modifier descriptor, the type of the resultig properties\n            // of the object is `T` in the end, when the descriptors are interpreted\n            return createModifierDescriptor(referenceEnhancer, arguments[0]);\n        }\n        else {\n            return refDecorator.apply(null, arguments);\n        }\n    },\n    shallow: function () {\n        if (arguments.length < 2) {\n            // although ref creates actually a modifier descriptor, the type of the resultig properties\n            // of the object is `T` in the end, when the descriptors are interpreted\n            return createModifierDescriptor(shallowEnhancer, arguments[0]);\n        }\n        else {\n            return shallowDecorator.apply(null, arguments);\n        }\n    },\n    deep: function () {\n        if (arguments.length < 2) {\n            // although ref creates actually a modifier descriptor, the type of the resultig properties\n            // of the object is `T` in the end, when the descriptors are interpreted\n            return createModifierDescriptor(deepEnhancer, arguments[0]);\n        }\n        else {\n            return deepDecorator.apply(null, arguments);\n        }\n    },\n    struct: function () {\n        if (arguments.length < 2) {\n            // although ref creates actually a modifier descriptor, the type of the resultig properties\n            // of the object is `T` in the end, when the descriptors are interpreted\n            return createModifierDescriptor(deepStructEnhancer, arguments[0]);\n        }\n        else {\n            return deepStructDecorator.apply(null, arguments);\n        }\n    }\n};\nvar observable = createObservable;\n// weird trick to keep our typings nicely with our funcs, and still extend the observable function\nObject.keys(observableFactories).forEach(function (name) { return (observable[name] = observableFactories[name]); });\nobservable.deep.struct = observable.struct;\nobservable.ref.struct = function () {\n    if (arguments.length < 2) {\n        return createModifierDescriptor(refStructEnhancer, arguments[0]);\n    }\n    else {\n        return refStructDecorator.apply(null, arguments);\n    }\n};\nfunction incorrectlyUsedAsDecorator(methodName) {\n    fail(\"Expected one or two arguments to observable.\" + methodName + \". Did you accidentally try to use observable.\" + methodName + \" as decorator?\");\n}\n\nfunction isModifierDescriptor(thing) {\n    return typeof thing === \"object\" && thing !== null && thing.isMobxModifierDescriptor === true;\n}\nfunction createModifierDescriptor(enhancer, initialValue) {\n    invariant(!isModifierDescriptor(initialValue), \"Modifiers cannot be nested\");\n    return {\n        isMobxModifierDescriptor: true,\n        initialValue: initialValue,\n        enhancer: enhancer\n    };\n}\nfunction deepEnhancer(v, _, name) {\n    if (isModifierDescriptor(v))\n        fail(\"You tried to assign a modifier wrapped value to a collection, please define modifiers when creating the collection, not when modifying it\");\n    // it is an observable already, done\n    if (isObservable(v))\n        return v;\n    // something that can be converted and mutated?\n    if (Array.isArray(v))\n        return observable.array(v, name);\n    if (isPlainObject(v))\n        return observable.object(v, name);\n    if (isES6Map(v))\n        return observable.map(v, name);\n    return v;\n}\nfunction shallowEnhancer(v, _, name) {\n    if (isModifierDescriptor(v))\n        fail(\"You tried to assign a modifier wrapped value to a collection, please define modifiers when creating the collection, not when modifying it\");\n    if (v === undefined || v === null)\n        return v;\n    if (isObservableObject(v) || isObservableArray(v) || isObservableMap(v))\n        return v;\n    if (Array.isArray(v))\n        return observable.shallowArray(v, name);\n    if (isPlainObject(v))\n        return observable.shallowObject(v, name);\n    if (isES6Map(v))\n        return observable.shallowMap(v, name);\n    return fail(\"The shallow modifier / decorator can only used in combination with arrays, objects and maps\");\n}\nfunction referenceEnhancer(newValue) {\n    // never turn into an observable\n    return newValue;\n}\nfunction deepStructEnhancer(v, oldValue, name) {\n    // don't confuse structurally compare enhancer with ref enhancer! The latter is probably\n    // more suited for immutable objects\n    if (deepEqual(v, oldValue))\n        return oldValue;\n    // it is an observable already, done\n    if (isObservable(v))\n        return v;\n    // something that can be converted and mutated?\n    if (Array.isArray(v))\n        return new ObservableArray(v, deepStructEnhancer, name);\n    if (isES6Map(v))\n        return new ObservableMap(v, deepStructEnhancer, name);\n    if (isPlainObject(v)) {\n        var res = {};\n        asObservableObject(res, name);\n        extendObservableHelper(res, deepStructEnhancer, [v]);\n        return res;\n    }\n    return v;\n}\nfunction refStructEnhancer(v, oldValue, name) {\n    if (deepEqual(v, oldValue))\n        return oldValue;\n    return v;\n}\n\n/**\n * During a transaction no views are updated until the end of the transaction.\n * The transaction will be run synchronously nonetheless.\n *\n * @param action a function that updates some reactive state\n * @returns any value that was returned by the 'action' parameter.\n */\nfunction transaction(action, thisArg) {\n    if (thisArg === void 0) { thisArg = undefined; }\n    startBatch();\n    try {\n        return action.apply(thisArg);\n    }\n    finally {\n        endBatch();\n    }\n}\n\nvar ObservableMapMarker = {};\nvar ObservableMap = (function () {\n    function ObservableMap(initialData, enhancer, name) {\n        if (enhancer === void 0) { enhancer = deepEnhancer; }\n        if (name === void 0) { name = \"ObservableMap@\" + getNextId(); }\n        this.enhancer = enhancer;\n        this.name = name;\n        this.$mobx = ObservableMapMarker;\n        this._data = Object.create(null);\n        this._hasMap = Object.create(null); // hasMap, not hashMap >-).\n        this._keys = new ObservableArray(undefined, referenceEnhancer, this.name + \".keys()\", true);\n        this.interceptors = null;\n        this.changeListeners = null;\n        this.dehancer = undefined;\n        this.merge(initialData);\n    }\n    ObservableMap.prototype._has = function (key) {\n        return typeof this._data[key] !== \"undefined\";\n    };\n    ObservableMap.prototype.has = function (key) {\n        if (!this.isValidKey(key))\n            return false;\n        key = \"\" + key;\n        if (this._hasMap[key])\n            return this._hasMap[key].get();\n        return this._updateHasMapEntry(key, false).get();\n    };\n    ObservableMap.prototype.set = function (key, value) {\n        this.assertValidKey(key);\n        key = \"\" + key;\n        var hasKey = this._has(key);\n        if (hasInterceptors(this)) {\n            var change = interceptChange(this, {\n                type: hasKey ? \"update\" : \"add\",\n                object: this,\n                newValue: value,\n                name: key\n            });\n            if (!change)\n                return this;\n            value = change.newValue;\n        }\n        if (hasKey) {\n            this._updateValue(key, value);\n        }\n        else {\n            this._addValue(key, value);\n        }\n        return this;\n    };\n    ObservableMap.prototype.delete = function (key) {\n        var _this = this;\n        this.assertValidKey(key);\n        key = \"\" + key;\n        if (hasInterceptors(this)) {\n            var change = interceptChange(this, {\n                type: \"delete\",\n                object: this,\n                name: key\n            });\n            if (!change)\n                return false;\n        }\n        if (this._has(key)) {\n            var notifySpy = isSpyEnabled();\n            var notify = hasListeners(this);\n            var change = notify || notifySpy\n                ? {\n                    type: \"delete\",\n                    object: this,\n                    oldValue: this._data[key].value,\n                    name: key\n                }\n                : null;\n            if (notifySpy)\n                spyReportStart(change);\n            transaction(function () {\n                _this._keys.remove(key);\n                _this._updateHasMapEntry(key, false);\n                var observable$$1 = _this._data[key];\n                observable$$1.setNewValue(undefined);\n                _this._data[key] = undefined;\n            });\n            if (notify)\n                notifyListeners(this, change);\n            if (notifySpy)\n                spyReportEnd();\n            return true;\n        }\n        return false;\n    };\n    ObservableMap.prototype._updateHasMapEntry = function (key, value) {\n        // optimization; don't fill the hasMap if we are not observing, or remove entry if there are no observers anymore\n        var entry = this._hasMap[key];\n        if (entry) {\n            entry.setNewValue(value);\n        }\n        else {\n            entry = this._hasMap[key] = new ObservableValue(value, referenceEnhancer, this.name + \".\" + key + \"?\", false);\n        }\n        return entry;\n    };\n    ObservableMap.prototype._updateValue = function (name, newValue) {\n        var observable$$1 = this._data[name];\n        newValue = observable$$1.prepareNewValue(newValue);\n        if (newValue !== UNCHANGED) {\n            var notifySpy = isSpyEnabled();\n            var notify = hasListeners(this);\n            var change = notify || notifySpy\n                ? {\n                    type: \"update\",\n                    object: this,\n                    oldValue: observable$$1.value,\n                    name: name,\n                    newValue: newValue\n                }\n                : null;\n            if (notifySpy)\n                spyReportStart(change);\n            observable$$1.setNewValue(newValue);\n            if (notify)\n                notifyListeners(this, change);\n            if (notifySpy)\n                spyReportEnd();\n        }\n    };\n    ObservableMap.prototype._addValue = function (name, newValue) {\n        var _this = this;\n        transaction(function () {\n            var observable$$1 = (_this._data[name] = new ObservableValue(newValue, _this.enhancer, _this.name + \".\" + name, false));\n            newValue = observable$$1.value; // value might have been changed\n            _this._updateHasMapEntry(name, true);\n            _this._keys.push(name);\n        });\n        var notifySpy = isSpyEnabled();\n        var notify = hasListeners(this);\n        var change = notify || notifySpy\n            ? {\n                type: \"add\",\n                object: this,\n                name: name,\n                newValue: newValue\n            }\n            : null;\n        if (notifySpy)\n            spyReportStart(change);\n        if (notify)\n            notifyListeners(this, change);\n        if (notifySpy)\n            spyReportEnd();\n    };\n    ObservableMap.prototype.get = function (key) {\n        key = \"\" + key;\n        if (this.has(key))\n            return this.dehanceValue(this._data[key].get());\n        return this.dehanceValue(undefined);\n    };\n    ObservableMap.prototype.dehanceValue = function (value) {\n        if (this.dehancer !== undefined) {\n            return this.dehancer(value);\n        }\n        return value;\n    };\n    ObservableMap.prototype.keys = function () {\n        return arrayAsIterator(this._keys.slice());\n    };\n    ObservableMap.prototype.values = function () {\n        return arrayAsIterator(this._keys.map(this.get, this));\n    };\n    ObservableMap.prototype.entries = function () {\n        var _this = this;\n        return arrayAsIterator(this._keys.map(function (key) { return [key, _this.get(key)]; }));\n    };\n    ObservableMap.prototype.forEach = function (callback, thisArg) {\n        var _this = this;\n        this.keys().forEach(function (key) { return callback.call(thisArg, _this.get(key), key, _this); });\n    };\n    /** Merge another object into this object, returns this. */\n    ObservableMap.prototype.merge = function (other) {\n        var _this = this;\n        if (isObservableMap(other)) {\n            other = other.toJS();\n        }\n        transaction(function () {\n            if (isPlainObject(other))\n                Object.keys(other).forEach(function (key) { return _this.set(key, other[key]); });\n            else if (Array.isArray(other))\n                other.forEach(function (_a) {\n                    var key = _a[0], value = _a[1];\n                    return _this.set(key, value);\n                });\n            else if (isES6Map(other))\n                other.forEach(function (value, key) { return _this.set(key, value); });\n            else if (other !== null && other !== undefined)\n                fail(\"Cannot initialize map from \" + other);\n        });\n        return this;\n    };\n    ObservableMap.prototype.clear = function () {\n        var _this = this;\n        transaction(function () {\n            untracked(function () {\n                _this.keys().forEach(_this.delete, _this);\n            });\n        });\n    };\n    ObservableMap.prototype.replace = function (values) {\n        var _this = this;\n        transaction(function () {\n            // grab all the keys that are present in the new map but not present in the current map\n            // and delete them from the map, then merge the new map\n            // this will cause reactions only on changed values\n            var newKeys = getMapLikeKeys(values);\n            var oldKeys = _this.keys();\n            var missingKeys = oldKeys.filter(function (k) { return newKeys.indexOf(k) === -1; });\n            missingKeys.forEach(function (k) { return _this.delete(k); });\n            _this.merge(values);\n        });\n        return this;\n    };\n    Object.defineProperty(ObservableMap.prototype, \"size\", {\n        get: function () {\n            return this._keys.length;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Returns a shallow non observable object clone of this map.\n     * Note that the values might still be observable. For a deep clone use mobx.toJS.\n     */\n    ObservableMap.prototype.toJS = function () {\n        var _this = this;\n        var res = {};\n        this.keys().forEach(function (key) { return (res[key] = _this.get(key)); });\n        return res;\n    };\n    ObservableMap.prototype.toJSON = function () {\n        // Used by JSON.stringify\n        return this.toJS();\n    };\n    ObservableMap.prototype.isValidKey = function (key) {\n        if (key === null || key === undefined)\n            return false;\n        if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"boolean\")\n            return true;\n        return false;\n    };\n    ObservableMap.prototype.assertValidKey = function (key) {\n        if (!this.isValidKey(key))\n            throw new Error(\"[mobx.map] Invalid key: '\" + key + \"', only strings, numbers and booleans are accepted as key in observable maps.\");\n    };\n    ObservableMap.prototype.toString = function () {\n        var _this = this;\n        return (this.name +\n            \"[{ \" +\n            this.keys().map(function (key) { return key + \": \" + (\"\" + _this.get(key)); }).join(\", \") +\n            \" }]\");\n    };\n    /**\n     * Observes this object. Triggers for the events 'add', 'update' and 'delete'.\n     * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/observe\n     * for callback details\n     */\n    ObservableMap.prototype.observe = function (listener, fireImmediately) {\n        invariant(fireImmediately !== true, getMessage(\"m033\"));\n        return registerListener(this, listener);\n    };\n    ObservableMap.prototype.intercept = function (handler) {\n        return registerInterceptor(this, handler);\n    };\n    return ObservableMap;\n}());\ndeclareIterator(ObservableMap.prototype, function () {\n    return this.entries();\n});\nfunction map(initialValues) {\n    deprecated(\"`mobx.map` is deprecated, use `new ObservableMap` or `mobx.observable.map` instead\");\n    return observable.map(initialValues);\n}\n/* 'var' fixes small-build issue */\nvar isObservableMap = createInstanceofPredicate(\"ObservableMap\", ObservableMap);\n\nvar EMPTY_ARRAY = [];\nObject.freeze(EMPTY_ARRAY);\nfunction getGlobal() {\n    return typeof window !== \"undefined\" ? window : global;\n}\nfunction getNextId() {\n    return ++globalState.mobxGuid;\n}\nfunction fail(message, thing) {\n    invariant(false, message, thing);\n    throw \"X\"; // unreachable\n}\nfunction invariant(check, message, thing) {\n    if (!check)\n        throw new Error(\"[mobx] Invariant failed: \" + message + (thing ? \" in '\" + thing + \"'\" : \"\"));\n}\n/**\n * Prints a deprecation message, but only one time.\n * Returns false if the deprecated message was already printed before\n */\nvar deprecatedMessages = [];\nfunction deprecated(msg) {\n    if (deprecatedMessages.indexOf(msg) !== -1)\n        return false;\n    deprecatedMessages.push(msg);\n    console.error(\"[mobx] Deprecated: \" + msg);\n    return true;\n}\n/**\n * Makes sure that the provided function is invoked at most once.\n */\nfunction once(func) {\n    var invoked = false;\n    return function () {\n        if (invoked)\n            return;\n        invoked = true;\n        return func.apply(this, arguments);\n    };\n}\nvar noop = function () { };\nfunction unique(list) {\n    var res = [];\n    list.forEach(function (item) {\n        if (res.indexOf(item) === -1)\n            res.push(item);\n    });\n    return res;\n}\nfunction joinStrings(things, limit, separator) {\n    if (limit === void 0) { limit = 100; }\n    if (separator === void 0) { separator = \" - \"; }\n    if (!things)\n        return \"\";\n    var sliced = things.slice(0, limit);\n    return \"\" + sliced.join(separator) + (things.length > limit\n        ? \" (... and \" + (things.length - limit) + \"more)\"\n        : \"\");\n}\nfunction isObject(value) {\n    return value !== null && typeof value === \"object\";\n}\nfunction isPlainObject(value) {\n    if (value === null || typeof value !== \"object\")\n        return false;\n    var proto = Object.getPrototypeOf(value);\n    return proto === Object.prototype || proto === null;\n}\nfunction objectAssign() {\n    var res = arguments[0];\n    for (var i = 1, l = arguments.length; i < l; i++) {\n        var source = arguments[i];\n        for (var key in source)\n            if (hasOwnProperty(source, key)) {\n                res[key] = source[key];\n            }\n    }\n    return res;\n}\nvar prototypeHasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwnProperty(object, propName) {\n    return prototypeHasOwnProperty.call(object, propName);\n}\nfunction makeNonEnumerable(object, propNames) {\n    for (var i = 0; i < propNames.length; i++) {\n        addHiddenProp(object, propNames[i], object[propNames[i]]);\n    }\n}\nfunction addHiddenProp(object, propName, value) {\n    Object.defineProperty(object, propName, {\n        enumerable: false,\n        writable: true,\n        configurable: true,\n        value: value\n    });\n}\nfunction addHiddenFinalProp(object, propName, value) {\n    Object.defineProperty(object, propName, {\n        enumerable: false,\n        writable: false,\n        configurable: true,\n        value: value\n    });\n}\nfunction isPropertyConfigurable(object, prop) {\n    var descriptor = Object.getOwnPropertyDescriptor(object, prop);\n    return !descriptor || (descriptor.configurable !== false && descriptor.writable !== false);\n}\nfunction assertPropertyConfigurable(object, prop) {\n    invariant(isPropertyConfigurable(object, prop), \"Cannot make property '\" + prop + \"' observable, it is not configurable and writable in the target object\");\n}\nfunction createInstanceofPredicate(name, clazz) {\n    var propName = \"isMobX\" + name;\n    clazz.prototype[propName] = true;\n    return function (x) {\n        return isObject(x) && x[propName] === true;\n    };\n}\nfunction areBothNaN(a, b) {\n    return typeof a === \"number\" && typeof b === \"number\" && isNaN(a) && isNaN(b);\n}\n/**\n * Returns whether the argument is an array, disregarding observability.\n */\nfunction isArrayLike(x) {\n    return Array.isArray(x) || isObservableArray(x);\n}\nfunction isES6Map(thing) {\n    if (getGlobal().Map !== undefined && thing instanceof getGlobal().Map)\n        return true;\n    return false;\n}\nfunction getMapLikeKeys(map$$1) {\n    if (isPlainObject(map$$1))\n        return Object.keys(map$$1);\n    if (Array.isArray(map$$1))\n        return map$$1.map(function (_a) {\n            var key = _a[0];\n            return key;\n        });\n    if (isES6Map(map$$1))\n        return Array.from(map$$1.keys());\n    if (isObservableMap(map$$1))\n        return map$$1.keys();\n    return fail(\"Cannot get keys from \" + map$$1);\n}\nfunction iteratorToArray(it) {\n    var res = [];\n    while (true) {\n        var r = it.next();\n        if (r.done)\n            break;\n        res.push(r.value);\n    }\n    return res;\n}\nfunction primitiveSymbol() {\n    return (typeof Symbol === \"function\" && Symbol.toPrimitive) || \"@@toPrimitive\";\n}\nfunction toPrimitive(value) {\n    return value === null ? null : typeof value === \"object\" ? \"\" + value : value;\n}\n\n/**\n * These values will persist if global state is reset\n */\nvar persistentKeys = [\"mobxGuid\", \"resetId\", \"spyListeners\", \"strictMode\", \"runId\"];\nvar MobXGlobals = (function () {\n    function MobXGlobals() {\n        /**\n         * MobXGlobals version.\n         * MobX compatiblity with other versions loaded in memory as long as this version matches.\n         * It indicates that the global state still stores similar information\n         */\n        this.version = 5;\n        /**\n         * Currently running derivation\n         */\n        this.trackingDerivation = null;\n        /**\n         * Are we running a computation currently? (not a reaction)\n         */\n        this.computationDepth = 0;\n        /**\n         * Each time a derivation is tracked, it is assigned a unique run-id\n         */\n        this.runId = 0;\n        /**\n         * 'guid' for general purpose. Will be persisted amongst resets.\n         */\n        this.mobxGuid = 0;\n        /**\n         * Are we in a batch block? (and how many of them)\n         */\n        this.inBatch = 0;\n        /**\n         * Observables that don't have observers anymore, and are about to be\n         * suspended, unless somebody else accesses it in the same batch\n         *\n         * @type {IObservable[]}\n         */\n        this.pendingUnobservations = [];\n        /**\n         * List of scheduled, not yet executed, reactions.\n         */\n        this.pendingReactions = [];\n        /**\n         * Are we currently processing reactions?\n         */\n        this.isRunningReactions = false;\n        /**\n         * Is it allowed to change observables at this point?\n         * In general, MobX doesn't allow that when running computations and React.render.\n         * To ensure that those functions stay pure.\n         */\n        this.allowStateChanges = true;\n        /**\n         * If strict mode is enabled, state changes are by default not allowed\n         */\n        this.strictMode = false;\n        /**\n         * Used by createTransformer to detect that the global state has been reset.\n         */\n        this.resetId = 0;\n        /**\n         * Spy callbacks\n         */\n        this.spyListeners = [];\n        /**\n         * Globally attached error handlers that react specifically to errors in reactions\n         */\n        this.globalReactionErrorHandlers = [];\n    }\n    return MobXGlobals;\n}());\nvar globalState = new MobXGlobals();\nvar shareGlobalStateCalled = false;\nvar runInIsolationCalled = false;\nvar warnedAboutMultipleInstances = false;\n{\n    var global_1 = getGlobal();\n    if (!global_1.__mobxInstanceCount) {\n        global_1.__mobxInstanceCount = 1;\n    }\n    else {\n        global_1.__mobxInstanceCount++;\n        setTimeout(function () {\n            if (!shareGlobalStateCalled && !runInIsolationCalled && !warnedAboutMultipleInstances) {\n                warnedAboutMultipleInstances = true;\n                console.warn(\"[mobx] Warning: there are multiple mobx instances active. This might lead to unexpected results. See https://github.com/mobxjs/mobx/issues/1082 for details.\");\n            }\n        });\n    }\n}\nfunction isolateGlobalState() {\n    runInIsolationCalled = true;\n    getGlobal().__mobxInstanceCount--;\n}\nfunction shareGlobalState() {\n    // TODO: remove in 4.0; just use peer dependencies instead.\n    deprecated(\"Using `shareGlobalState` is not recommended, use peer dependencies instead. See https://github.com/mobxjs/mobx/issues/1082 for details.\");\n    shareGlobalStateCalled = true;\n    var global = getGlobal();\n    var ownState = globalState;\n    /**\n     * Backward compatibility check\n     */\n    if (global.__mobservableTrackingStack || global.__mobservableViewStack)\n        throw new Error(\"[mobx] An incompatible version of mobservable is already loaded.\");\n    if (global.__mobxGlobal && global.__mobxGlobal.version !== ownState.version)\n        throw new Error(\"[mobx] An incompatible version of mobx is already loaded.\");\n    if (global.__mobxGlobal)\n        globalState = global.__mobxGlobal;\n    else\n        global.__mobxGlobal = ownState;\n}\nfunction getGlobalState() {\n    return globalState;\n}\n\n/**\n * For testing purposes only; this will break the internal state of existing observables,\n * but can be used to get back at a stable state after throwing errors\n */\nfunction resetGlobalState() {\n    globalState.resetId++;\n    var defaultGlobals = new MobXGlobals();\n    for (var key in defaultGlobals)\n        if (persistentKeys.indexOf(key) === -1)\n            globalState[key] = defaultGlobals[key];\n    globalState.allowStateChanges = !globalState.strictMode;\n}\n\nfunction getAtom(thing, property) {\n    if (typeof thing === \"object\" && thing !== null) {\n        if (isObservableArray(thing)) {\n            invariant(property === undefined, getMessage(\"m036\"));\n            return thing.$mobx.atom;\n        }\n        if (isObservableMap(thing)) {\n            var anyThing = thing;\n            if (property === undefined)\n                return getAtom(anyThing._keys);\n            var observable = anyThing._data[property] || anyThing._hasMap[property];\n            invariant(!!observable, \"the entry '\" + property + \"' does not exist in the observable map '\" + getDebugName(thing) + \"'\");\n            return observable;\n        }\n        // Initializers run lazily when transpiling to babel, so make sure they are run...\n        runLazyInitializers(thing);\n        if (property && !thing.$mobx)\n            thing[property]; // See #1072 // TODO: remove in 4.0\n        if (isObservableObject(thing)) {\n            if (!property)\n                return fail(\"please specify a property\");\n            var observable = thing.$mobx.values[property];\n            invariant(!!observable, \"no observable property '\" + property + \"' found on the observable object '\" + getDebugName(thing) + \"'\");\n            return observable;\n        }\n        if (isAtom(thing) || isComputedValue(thing) || isReaction(thing)) {\n            return thing;\n        }\n    }\n    else if (typeof thing === \"function\") {\n        if (isReaction(thing.$mobx)) {\n            // disposer function\n            return thing.$mobx;\n        }\n    }\n    return fail(\"Cannot obtain atom from \" + thing);\n}\nfunction getAdministration(thing, property) {\n    invariant(thing, \"Expecting some object\");\n    if (property !== undefined)\n        return getAdministration(getAtom(thing, property));\n    if (isAtom(thing) || isComputedValue(thing) || isReaction(thing))\n        return thing;\n    if (isObservableMap(thing))\n        return thing;\n    // Initializers run lazily when transpiling to babel, so make sure they are run...\n    runLazyInitializers(thing);\n    if (thing.$mobx)\n        return thing.$mobx;\n    invariant(false, \"Cannot obtain administration from \" + thing);\n}\nfunction getDebugName(thing, property) {\n    var named;\n    if (property !== undefined)\n        named = getAtom(thing, property);\n    else if (isObservableObject(thing) || isObservableMap(thing))\n        named = getAdministration(thing);\n    else\n        named = getAtom(thing); // valid for arrays as well\n    return named.name;\n}\n\nfunction getDependencyTree(thing, property) {\n    return nodeToDependencyTree(getAtom(thing, property));\n}\nfunction nodeToDependencyTree(node) {\n    var result = {\n        name: node.name\n    };\n    if (node.observing && node.observing.length > 0)\n        result.dependencies = unique(node.observing).map(nodeToDependencyTree);\n    return result;\n}\nfunction getObserverTree(thing, property) {\n    return nodeToObserverTree(getAtom(thing, property));\n}\nfunction nodeToObserverTree(node) {\n    var result = {\n        name: node.name\n    };\n    if (hasObservers(node))\n        result.observers = getObservers(node).map(nodeToObserverTree);\n    return result;\n}\n\nfunction hasObservers(observable) {\n    return observable.observers && observable.observers.length > 0;\n}\nfunction getObservers(observable) {\n    return observable.observers;\n}\nfunction addObserver(observable, node) {\n    // invariant(node.dependenciesState !== -1, \"INTERNAL ERROR, can add only dependenciesState !== -1\");\n    // invariant(observable._observers.indexOf(node) === -1, \"INTERNAL ERROR add already added node\");\n    // invariantObservers(observable);\n    var l = observable.observers.length;\n    if (l) {\n        // because object assignment is relatively expensive, let's not store data about index 0.\n        observable.observersIndexes[node.__mapid] = l;\n    }\n    observable.observers[l] = node;\n    if (observable.lowestObserverState > node.dependenciesState)\n        observable.lowestObserverState = node.dependenciesState;\n    // invariantObservers(observable);\n    // invariant(observable._observers.indexOf(node) !== -1, \"INTERNAL ERROR didn't add node\");\n}\nfunction removeObserver(observable, node) {\n    // invariant(globalState.inBatch > 0, \"INTERNAL ERROR, remove should be called only inside batch\");\n    // invariant(observable._observers.indexOf(node) !== -1, \"INTERNAL ERROR remove already removed node\");\n    // invariantObservers(observable);\n    if (observable.observers.length === 1) {\n        // deleting last observer\n        observable.observers.length = 0;\n        queueForUnobservation(observable);\n    }\n    else {\n        // deleting from _observersIndexes is straight forward, to delete from _observers, let's swap `node` with last element\n        var list = observable.observers;\n        var map = observable.observersIndexes;\n        var filler = list.pop(); // get last element, which should fill the place of `node`, so the array doesn't have holes\n        if (filler !== node) {\n            // otherwise node was the last element, which already got removed from array\n            var index = map[node.__mapid] || 0; // getting index of `node`. this is the only place we actually use map.\n            if (index) {\n                // map store all indexes but 0, see comment in `addObserver`\n                map[filler.__mapid] = index;\n            }\n            else {\n                delete map[filler.__mapid];\n            }\n            list[index] = filler;\n        }\n        delete map[node.__mapid];\n    }\n    // invariantObservers(observable);\n    // invariant(observable._observers.indexOf(node) === -1, \"INTERNAL ERROR remove already removed node2\");\n}\nfunction queueForUnobservation(observable) {\n    if (!observable.isPendingUnobservation) {\n        // invariant(globalState.inBatch > 0, \"INTERNAL ERROR, remove should be called only inside batch\");\n        // invariant(observable._observers.length === 0, \"INTERNAL ERROR, should only queue for unobservation unobserved observables\");\n        observable.isPendingUnobservation = true;\n        globalState.pendingUnobservations.push(observable);\n    }\n}\n/**\n * Batch starts a transaction, at least for purposes of memoizing ComputedValues when nothing else does.\n * During a batch `onBecomeUnobserved` will be called at most once per observable.\n * Avoids unnecessary recalculations.\n */\nfunction startBatch() {\n    globalState.inBatch++;\n}\nfunction endBatch() {\n    if (--globalState.inBatch === 0) {\n        runReactions();\n        // the batch is actually about to finish, all unobserving should happen here.\n        var list = globalState.pendingUnobservations;\n        for (var i = 0; i < list.length; i++) {\n            var observable = list[i];\n            observable.isPendingUnobservation = false;\n            if (observable.observers.length === 0) {\n                observable.onBecomeUnobserved();\n                // NOTE: onBecomeUnobserved might push to `pendingUnobservations`\n            }\n        }\n        globalState.pendingUnobservations = [];\n    }\n}\nfunction reportObserved(observable) {\n    var derivation = globalState.trackingDerivation;\n    if (derivation !== null) {\n        /**\n         * Simple optimization, give each derivation run an unique id (runId)\n         * Check if last time this observable was accessed the same runId is used\n         * if this is the case, the relation is already known\n         */\n        if (derivation.runId !== observable.lastAccessedBy) {\n            observable.lastAccessedBy = derivation.runId;\n            derivation.newObserving[derivation.unboundDepsCount++] = observable;\n        }\n    }\n    else if (observable.observers.length === 0) {\n        queueForUnobservation(observable);\n    }\n}\n/**\n * NOTE: current propagation mechanism will in case of self reruning autoruns behave unexpectedly\n * It will propagate changes to observers from previous run\n * It's hard or maybe impossible (with reasonable perf) to get it right with current approach\n * Hopefully self reruning autoruns aren't a feature people should depend on\n * Also most basic use cases should be ok\n */\n// Called by Atom when its value changes\nfunction propagateChanged(observable) {\n    // invariantLOS(observable, \"changed start\");\n    if (observable.lowestObserverState === IDerivationState.STALE)\n        return;\n    observable.lowestObserverState = IDerivationState.STALE;\n    var observers = observable.observers;\n    var i = observers.length;\n    while (i--) {\n        var d = observers[i];\n        if (d.dependenciesState === IDerivationState.UP_TO_DATE) {\n            if (d.isTracing !== TraceMode.NONE) {\n                logTraceInfo(d, observable);\n            }\n            d.onBecomeStale();\n        }\n        d.dependenciesState = IDerivationState.STALE;\n    }\n    // invariantLOS(observable, \"changed end\");\n}\n// Called by ComputedValue when it recalculate and its value changed\nfunction propagateChangeConfirmed(observable) {\n    // invariantLOS(observable, \"confirmed start\");\n    if (observable.lowestObserverState === IDerivationState.STALE)\n        return;\n    observable.lowestObserverState = IDerivationState.STALE;\n    var observers = observable.observers;\n    var i = observers.length;\n    while (i--) {\n        var d = observers[i];\n        if (d.dependenciesState === IDerivationState.POSSIBLY_STALE)\n            d.dependenciesState = IDerivationState.STALE;\n        else if (d.dependenciesState === IDerivationState.UP_TO_DATE // this happens during computing of `d`, just keep lowestObserverState up to date.\n        )\n            observable.lowestObserverState = IDerivationState.UP_TO_DATE;\n    }\n    // invariantLOS(observable, \"confirmed end\");\n}\n// Used by computed when its dependency changed, but we don't wan't to immediately recompute.\nfunction propagateMaybeChanged(observable) {\n    // invariantLOS(observable, \"maybe start\");\n    if (observable.lowestObserverState !== IDerivationState.UP_TO_DATE)\n        return;\n    observable.lowestObserverState = IDerivationState.POSSIBLY_STALE;\n    var observers = observable.observers;\n    var i = observers.length;\n    while (i--) {\n        var d = observers[i];\n        if (d.dependenciesState === IDerivationState.UP_TO_DATE) {\n            d.dependenciesState = IDerivationState.POSSIBLY_STALE;\n            if (d.isTracing !== TraceMode.NONE) {\n                logTraceInfo(d, observable);\n            }\n            d.onBecomeStale();\n        }\n    }\n    // invariantLOS(observable, \"maybe end\");\n}\nfunction logTraceInfo(derivation, observable) {\n    console.log(\"[mobx.trace] '\" + derivation.name + \"' is invalidated due to a change in: '\" + observable.name + \"'\");\n    if (derivation.isTracing === TraceMode.BREAK) {\n        var lines = [];\n        printDepTree(getDependencyTree(derivation), lines, 1);\n        // prettier-ignore\n        new Function(\"debugger;\\n/*\\nTracing '\" + derivation.name + \"'\\n\\nYou are entering this break point because derivation '\" + derivation.name + \"' is being traced and '\" + observable.name + \"' is now forcing it to update.\\nJust follow the stacktrace you should now see in the devtools to see precisely what piece of your code is causing this update\\nThe stackframe you are looking for is at least ~6-8 stack-frames up.\\n\\n\" + (derivation instanceof ComputedValue ? derivation.derivation.toString() : \"\") + \"\\n\\nThe dependencies for this derivation are:\\n\\n\" + lines.join(\"\\n\") + \"\\n*/\\n    \")();\n    }\n}\nfunction printDepTree(tree, lines, depth) {\n    if (lines.length >= 1000) {\n        lines.push(\"(and many more)\");\n        return;\n    }\n    lines.push(\"\" + new Array(depth).join(\"\\t\") + tree.name); // MWE: not the fastest, but the easiest way :)\n    if (tree.dependencies)\n        tree.dependencies.forEach(function (child) { return printDepTree(child, lines, depth + 1); });\n}\n\nvar IDerivationState;\n(function (IDerivationState) {\n    // before being run or (outside batch and not being observed)\n    // at this point derivation is not holding any data about dependency tree\n    IDerivationState[IDerivationState[\"NOT_TRACKING\"] = -1] = \"NOT_TRACKING\";\n    // no shallow dependency changed since last computation\n    // won't recalculate derivation\n    // this is what makes mobx fast\n    IDerivationState[IDerivationState[\"UP_TO_DATE\"] = 0] = \"UP_TO_DATE\";\n    // some deep dependency changed, but don't know if shallow dependency changed\n    // will require to check first if UP_TO_DATE or POSSIBLY_STALE\n    // currently only ComputedValue will propagate POSSIBLY_STALE\n    //\n    // having this state is second big optimization:\n    // don't have to recompute on every dependency change, but only when it's needed\n    IDerivationState[IDerivationState[\"POSSIBLY_STALE\"] = 1] = \"POSSIBLY_STALE\";\n    // A shallow dependency has changed since last computation and the derivation\n    // will need to recompute when it's needed next.\n    IDerivationState[IDerivationState[\"STALE\"] = 2] = \"STALE\";\n})(IDerivationState || (IDerivationState = {}));\nvar TraceMode;\n(function (TraceMode) {\n    TraceMode[TraceMode[\"NONE\"] = 0] = \"NONE\";\n    TraceMode[TraceMode[\"LOG\"] = 1] = \"LOG\";\n    TraceMode[TraceMode[\"BREAK\"] = 2] = \"BREAK\";\n})(TraceMode || (TraceMode = {}));\nvar CaughtException = (function () {\n    function CaughtException(cause) {\n        this.cause = cause;\n        // Empty\n    }\n    return CaughtException;\n}());\nfunction isCaughtException(e) {\n    return e instanceof CaughtException;\n}\n/**\n * Finds out whether any dependency of the derivation has actually changed.\n * If dependenciesState is 1 then it will recalculate dependencies,\n * if any dependency changed it will propagate it by changing dependenciesState to 2.\n *\n * By iterating over the dependencies in the same order that they were reported and\n * stopping on the first change, all the recalculations are only called for ComputedValues\n * that will be tracked by derivation. That is because we assume that if the first x\n * dependencies of the derivation doesn't change then the derivation should run the same way\n * up until accessing x-th dependency.\n */\nfunction shouldCompute(derivation) {\n    switch (derivation.dependenciesState) {\n        case IDerivationState.UP_TO_DATE:\n            return false;\n        case IDerivationState.NOT_TRACKING:\n        case IDerivationState.STALE:\n            return true;\n        case IDerivationState.POSSIBLY_STALE: {\n            var prevUntracked = untrackedStart(); // no need for those computeds to be reported, they will be picked up in trackDerivedFunction.\n            var obs = derivation.observing, l = obs.length;\n            for (var i = 0; i < l; i++) {\n                var obj = obs[i];\n                if (isComputedValue(obj)) {\n                    try {\n                        obj.get();\n                    }\n                    catch (e) {\n                        // we are not interested in the value *or* exception at this moment, but if there is one, notify all\n                        untrackedEnd(prevUntracked);\n                        return true;\n                    }\n                    // if ComputedValue `obj` actually changed it will be computed and propagated to its observers.\n                    // and `derivation` is an observer of `obj`\n                    if (derivation.dependenciesState === IDerivationState.STALE) {\n                        untrackedEnd(prevUntracked);\n                        return true;\n                    }\n                }\n            }\n            changeDependenciesStateTo0(derivation);\n            untrackedEnd(prevUntracked);\n            return false;\n        }\n    }\n}\nfunction isComputingDerivation() {\n    return globalState.trackingDerivation !== null; // filter out actions inside computations\n}\nfunction checkIfStateModificationsAreAllowed(atom) {\n    var hasObservers$$1 = atom.observers.length > 0;\n    // Should never be possible to change an observed observable from inside computed, see #798\n    if (globalState.computationDepth > 0 && hasObservers$$1)\n        fail(getMessage(\"m031\") + atom.name);\n    // Should not be possible to change observed state outside strict mode, except during initialization, see #563\n    if (!globalState.allowStateChanges && hasObservers$$1)\n        fail(getMessage(globalState.strictMode ? \"m030a\" : \"m030b\") + atom.name);\n}\n/**\n * Executes the provided function `f` and tracks which observables are being accessed.\n * The tracking information is stored on the `derivation` object and the derivation is registered\n * as observer of any of the accessed observables.\n */\nfunction trackDerivedFunction(derivation, f, context) {\n    // pre allocate array allocation + room for variation in deps\n    // array will be trimmed by bindDependencies\n    changeDependenciesStateTo0(derivation);\n    derivation.newObserving = new Array(derivation.observing.length + 100);\n    derivation.unboundDepsCount = 0;\n    derivation.runId = ++globalState.runId;\n    var prevTracking = globalState.trackingDerivation;\n    globalState.trackingDerivation = derivation;\n    var result;\n    try {\n        result = f.call(context);\n    }\n    catch (e) {\n        result = new CaughtException(e);\n    }\n    globalState.trackingDerivation = prevTracking;\n    bindDependencies(derivation);\n    return result;\n}\n/**\n * diffs newObserving with observing.\n * update observing to be newObserving with unique observables\n * notify observers that become observed/unobserved\n */\nfunction bindDependencies(derivation) {\n    // invariant(derivation.dependenciesState !== IDerivationState.NOT_TRACKING, \"INTERNAL ERROR bindDependencies expects derivation.dependenciesState !== -1\");\n    var prevObserving = derivation.observing;\n    var observing = (derivation.observing = derivation.newObserving);\n    var lowestNewObservingDerivationState = IDerivationState.UP_TO_DATE;\n    // Go through all new observables and check diffValue: (this list can contain duplicates):\n    //   0: first occurrence, change to 1 and keep it\n    //   1: extra occurrence, drop it\n    var i0 = 0, l = derivation.unboundDepsCount;\n    for (var i = 0; i < l; i++) {\n        var dep = observing[i];\n        if (dep.diffValue === 0) {\n            dep.diffValue = 1;\n            if (i0 !== i)\n                observing[i0] = dep;\n            i0++;\n        }\n        // Upcast is 'safe' here, because if dep is IObservable, `dependenciesState` will be undefined,\n        // not hitting the condition\n        if (dep.dependenciesState > lowestNewObservingDerivationState) {\n            lowestNewObservingDerivationState = dep.dependenciesState;\n        }\n    }\n    observing.length = i0;\n    derivation.newObserving = null; // newObserving shouldn't be needed outside tracking (statement moved down to work around FF bug, see #614)\n    // Go through all old observables and check diffValue: (it is unique after last bindDependencies)\n    //   0: it's not in new observables, unobserve it\n    //   1: it keeps being observed, don't want to notify it. change to 0\n    l = prevObserving.length;\n    while (l--) {\n        var dep = prevObserving[l];\n        if (dep.diffValue === 0) {\n            removeObserver(dep, derivation);\n        }\n        dep.diffValue = 0;\n    }\n    // Go through all new observables and check diffValue: (now it should be unique)\n    //   0: it was set to 0 in last loop. don't need to do anything.\n    //   1: it wasn't observed, let's observe it. set back to 0\n    while (i0--) {\n        var dep = observing[i0];\n        if (dep.diffValue === 1) {\n            dep.diffValue = 0;\n            addObserver(dep, derivation);\n        }\n    }\n    // Some new observed derivations may become stale during this derivation computation\n    // so they have had no chance to propagate staleness (#916)\n    if (lowestNewObservingDerivationState !== IDerivationState.UP_TO_DATE) {\n        derivation.dependenciesState = lowestNewObservingDerivationState;\n        derivation.onBecomeStale();\n    }\n}\nfunction clearObserving(derivation) {\n    // invariant(globalState.inBatch > 0, \"INTERNAL ERROR clearObserving should be called only inside batch\");\n    var obs = derivation.observing;\n    derivation.observing = [];\n    var i = obs.length;\n    while (i--)\n        removeObserver(obs[i], derivation);\n    derivation.dependenciesState = IDerivationState.NOT_TRACKING;\n}\nfunction untracked(action) {\n    var prev = untrackedStart();\n    var res = action();\n    untrackedEnd(prev);\n    return res;\n}\nfunction untrackedStart() {\n    var prev = globalState.trackingDerivation;\n    globalState.trackingDerivation = null;\n    return prev;\n}\nfunction untrackedEnd(prev) {\n    globalState.trackingDerivation = prev;\n}\n/**\n * needed to keep `lowestObserverState` correct. when changing from (2 or 1) to 0\n *\n */\nfunction changeDependenciesStateTo0(derivation) {\n    if (derivation.dependenciesState === IDerivationState.UP_TO_DATE)\n        return;\n    derivation.dependenciesState = IDerivationState.UP_TO_DATE;\n    var obs = derivation.observing;\n    var i = obs.length;\n    while (i--)\n        obs[i].lowestObserverState = IDerivationState.UP_TO_DATE;\n}\n\nfunction log(msg) {\n    console.log(msg);\n    return msg;\n}\nfunction whyRun(thing, prop) {\n    deprecated(\"`whyRun` is deprecated in favor of `trace`\");\n    thing = getAtomFromArgs(arguments);\n    if (!thing)\n        return log(getMessage(\"m024\"));\n    if (isComputedValue(thing) || isReaction(thing))\n        return log(thing.whyRun());\n    return fail(getMessage(\"m025\"));\n}\nfunction trace() {\n    var args = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        args[_i] = arguments[_i];\n    }\n    var enterBreakPoint = false;\n    if (typeof args[args.length - 1] === \"boolean\")\n        enterBreakPoint = args.pop();\n    var derivation = getAtomFromArgs(args);\n    if (!derivation) {\n        return fail(\"'trace(break?)' can only be used inside a tracked computed value or a Reaction. Consider passing in the computed value or reaction explicitly\");\n    }\n    if (derivation.isTracing === TraceMode.NONE) {\n        console.log(\"[mobx.trace] '\" + derivation.name + \"' tracing enabled\");\n    }\n    derivation.isTracing = enterBreakPoint ? TraceMode.BREAK : TraceMode.LOG;\n}\nfunction getAtomFromArgs(args) {\n    switch (args.length) {\n        case 0:\n            return globalState.trackingDerivation;\n        case 1:\n            return getAtom(args[0]);\n        case 2:\n            return getAtom(args[0], args[1]);\n    }\n}\n\nvar Reaction = (function () {\n    function Reaction(name, onInvalidate) {\n        if (name === void 0) { name = \"Reaction@\" + getNextId(); }\n        this.name = name;\n        this.onInvalidate = onInvalidate;\n        this.observing = []; // nodes we are looking at. Our value depends on these nodes\n        this.newObserving = [];\n        this.dependenciesState = IDerivationState.NOT_TRACKING;\n        this.diffValue = 0;\n        this.runId = 0;\n        this.unboundDepsCount = 0;\n        this.__mapid = \"#\" + getNextId();\n        this.isDisposed = false;\n        this._isScheduled = false;\n        this._isTrackPending = false;\n        this._isRunning = false;\n        this.isTracing = TraceMode.NONE;\n    }\n    Reaction.prototype.onBecomeStale = function () {\n        this.schedule();\n    };\n    Reaction.prototype.schedule = function () {\n        if (!this._isScheduled) {\n            this._isScheduled = true;\n            globalState.pendingReactions.push(this);\n            runReactions();\n        }\n    };\n    Reaction.prototype.isScheduled = function () {\n        return this._isScheduled;\n    };\n    /**\n     * internal, use schedule() if you intend to kick off a reaction\n     */\n    Reaction.prototype.runReaction = function () {\n        if (!this.isDisposed) {\n            startBatch();\n            this._isScheduled = false;\n            if (shouldCompute(this)) {\n                this._isTrackPending = true;\n                this.onInvalidate();\n                if (this._isTrackPending && isSpyEnabled()) {\n                    // onInvalidate didn't trigger track right away..\n                    spyReport({\n                        object: this,\n                        type: \"scheduled-reaction\"\n                    });\n                }\n            }\n            endBatch();\n        }\n    };\n    Reaction.prototype.track = function (fn) {\n        startBatch();\n        var notify = isSpyEnabled();\n        var startTime;\n        if (notify) {\n            startTime = Date.now();\n            spyReportStart({\n                object: this,\n                type: \"reaction\",\n                fn: fn\n            });\n        }\n        this._isRunning = true;\n        var result = trackDerivedFunction(this, fn, undefined);\n        this._isRunning = false;\n        this._isTrackPending = false;\n        if (this.isDisposed) {\n            // disposed during last run. Clean up everything that was bound after the dispose call.\n            clearObserving(this);\n        }\n        if (isCaughtException(result))\n            this.reportExceptionInDerivation(result.cause);\n        if (notify) {\n            spyReportEnd({\n                time: Date.now() - startTime\n            });\n        }\n        endBatch();\n    };\n    Reaction.prototype.reportExceptionInDerivation = function (error) {\n        var _this = this;\n        if (this.errorHandler) {\n            this.errorHandler(error, this);\n            return;\n        }\n        var message = \"[mobx] Encountered an uncaught exception that was thrown by a reaction or observer component, in: '\" + this;\n        var messageToUser = getMessage(\"m037\");\n        console.error(message || messageToUser /* latter will not be true, make sure uglify doesn't remove */, error);\n        /** If debugging brought you here, please, read the above message :-). Tnx! */\n        if (isSpyEnabled()) {\n            spyReport({\n                type: \"error\",\n                message: message,\n                error: error,\n                object: this\n            });\n        }\n        globalState.globalReactionErrorHandlers.forEach(function (f) { return f(error, _this); });\n    };\n    Reaction.prototype.dispose = function () {\n        if (!this.isDisposed) {\n            this.isDisposed = true;\n            if (!this._isRunning) {\n                // if disposed while running, clean up later. Maybe not optimal, but rare case\n                startBatch();\n                clearObserving(this);\n                endBatch();\n            }\n        }\n    };\n    Reaction.prototype.getDisposer = function () {\n        var r = this.dispose.bind(this);\n        r.$mobx = this;\n        r.onError = registerErrorHandler;\n        return r;\n    };\n    Reaction.prototype.toString = function () {\n        return \"Reaction[\" + this.name + \"]\";\n    };\n    Reaction.prototype.whyRun = function () {\n        var observing = unique(this._isRunning ? this.newObserving : this.observing).map(function (dep) { return dep.name; });\n        return \"\\nWhyRun? reaction '\" + this.name + \"':\\n * Status: [\" + (this.isDisposed\n            ? \"stopped\"\n            : this._isRunning ? \"running\" : this.isScheduled() ? \"scheduled\" : \"idle\") + \"]\\n * This reaction will re-run if any of the following observables changes:\\n    \" + joinStrings(observing) + \"\\n    \" + (this._isRunning\n            ? \" (... or any observable accessed during the remainder of the current run)\"\n            : \"\") + \"\\n\\t\" + getMessage(\"m038\") + \"\\n\";\n    };\n    Reaction.prototype.trace = function (enterBreakPoint) {\n        if (enterBreakPoint === void 0) { enterBreakPoint = false; }\n        trace(this, enterBreakPoint);\n    };\n    return Reaction;\n}());\nfunction registerErrorHandler(handler) {\n    invariant(this && this.$mobx && isReaction(this.$mobx), \"Invalid `this`\");\n    invariant(!this.$mobx.errorHandler, \"Only one onErrorHandler can be registered\");\n    this.$mobx.errorHandler = handler;\n}\nfunction onReactionError(handler) {\n    globalState.globalReactionErrorHandlers.push(handler);\n    return function () {\n        var idx = globalState.globalReactionErrorHandlers.indexOf(handler);\n        if (idx >= 0)\n            globalState.globalReactionErrorHandlers.splice(idx, 1);\n    };\n}\n/**\n * Magic number alert!\n * Defines within how many times a reaction is allowed to re-trigger itself\n * until it is assumed that this is gonna be a never ending loop...\n */\nvar MAX_REACTION_ITERATIONS = 100;\nvar reactionScheduler = function (f) { return f(); };\nfunction runReactions() {\n    // Trampolining, if runReactions are already running, new reactions will be picked up\n    if (globalState.inBatch > 0 || globalState.isRunningReactions)\n        return;\n    reactionScheduler(runReactionsHelper);\n}\nfunction runReactionsHelper() {\n    globalState.isRunningReactions = true;\n    var allReactions = globalState.pendingReactions;\n    var iterations = 0;\n    // While running reactions, new reactions might be triggered.\n    // Hence we work with two variables and check whether\n    // we converge to no remaining reactions after a while.\n    while (allReactions.length > 0) {\n        if (++iterations === MAX_REACTION_ITERATIONS) {\n            console.error(\"Reaction doesn't converge to a stable state after \" + MAX_REACTION_ITERATIONS + \" iterations.\" +\n                (\" Probably there is a cycle in the reactive function: \" + allReactions[0]));\n            allReactions.splice(0); // clear reactions\n        }\n        var remainingReactions = allReactions.splice(0);\n        for (var i = 0, l = remainingReactions.length; i < l; i++)\n            remainingReactions[i].runReaction();\n    }\n    globalState.isRunningReactions = false;\n}\nvar isReaction = createInstanceofPredicate(\"Reaction\", Reaction);\nfunction setReactionScheduler(fn) {\n    var baseScheduler = reactionScheduler;\n    reactionScheduler = function (f) { return fn(function () { return baseScheduler(f); }); };\n}\n\nfunction asReference(value) {\n    deprecated(\"asReference is deprecated, use observable.ref instead\");\n    return observable.ref(value);\n}\nfunction asStructure(value) {\n    deprecated(\"asStructure is deprecated. Use observable.struct, computed.struct or reaction options instead.\");\n    return observable.struct(value);\n}\nfunction asFlat(value) {\n    deprecated(\"asFlat is deprecated, use observable.shallow instead\");\n    return observable.shallow(value);\n}\nfunction asMap(data) {\n    deprecated(\"asMap is deprecated, use observable.map or observable.shallowMap instead\");\n    return observable.map(data || {});\n}\n\nfunction createComputedDecorator(equals) {\n    return createClassPropertyDecorator(function (target, name, _, __, originalDescriptor) {\n        invariant(typeof originalDescriptor !== \"undefined\", getMessage(\"m009\"));\n        invariant(typeof originalDescriptor.get === \"function\", getMessage(\"m010\"));\n        var adm = asObservableObject(target, \"\");\n        defineComputedProperty(adm, name, originalDescriptor.get, originalDescriptor.set, equals, false);\n    }, function (name) {\n        var observable = this.$mobx.values[name];\n        if (observable === undefined // See #505\n        )\n            return undefined;\n        return observable.get();\n    }, function (name, value) {\n        this.$mobx.values[name].set(value);\n    }, false, false);\n}\nvar computedDecorator = createComputedDecorator(comparer.default);\nvar computedStructDecorator = createComputedDecorator(comparer.structural);\n/**\n * Decorator for class properties: @computed get value() { return expr; }.\n * For legacy purposes also invokable as ES5 observable created: `computed(() => expr)`;\n */\nvar computed = function computed(arg1, arg2, arg3) {\n    if (typeof arg2 === \"string\") {\n        return computedDecorator.apply(null, arguments);\n    }\n    invariant(typeof arg1 === \"function\", getMessage(\"m011\"));\n    invariant(arguments.length < 3, getMessage(\"m012\"));\n    var opts = typeof arg2 === \"object\" ? arg2 : {};\n    opts.setter = typeof arg2 === \"function\" ? arg2 : opts.setter;\n    var equals = opts.equals\n        ? opts.equals\n        : opts.compareStructural || opts.struct ? comparer.structural : comparer.default;\n    return new ComputedValue(arg1, opts.context, equals, opts.name || arg1.name || \"\", opts.setter);\n};\ncomputed.struct = computedStructDecorator;\ncomputed.equals = createComputedDecorator;\n\nfunction isComputed(value, property) {\n    if (value === null || value === undefined)\n        return false;\n    if (property !== undefined) {\n        if (isObservableObject(value) === false)\n            return false;\n        if (!value.$mobx.values[property])\n            return false;\n        var atom = getAtom(value, property);\n        return isComputedValue(atom);\n    }\n    return isComputedValue(value);\n}\n\nfunction observe(thing, propOrCb, cbOrFire, fireImmediately) {\n    if (typeof cbOrFire === \"function\")\n        return observeObservableProperty(thing, propOrCb, cbOrFire, fireImmediately);\n    else\n        return observeObservable(thing, propOrCb, cbOrFire);\n}\nfunction observeObservable(thing, listener, fireImmediately) {\n    return getAdministration(thing).observe(listener, fireImmediately);\n}\nfunction observeObservableProperty(thing, property, listener, fireImmediately) {\n    return getAdministration(thing, property).observe(listener, fireImmediately);\n}\n\nfunction intercept(thing, propOrHandler, handler) {\n    if (typeof handler === \"function\")\n        return interceptProperty(thing, propOrHandler, handler);\n    else\n        return interceptInterceptable(thing, propOrHandler);\n}\nfunction interceptInterceptable(thing, handler) {\n    return getAdministration(thing).intercept(handler);\n}\nfunction interceptProperty(thing, property, handler) {\n    return getAdministration(thing, property).intercept(handler);\n}\n\n/**\n * expr can be used to create temporarily views inside views.\n * This can be improved to improve performance if a value changes often, but usually doesn't affect the outcome of an expression.\n *\n * In the following example the expression prevents that a component is rerender _each time_ the selection changes;\n * instead it will only rerenders when the current todo is (de)selected.\n *\n * reactiveComponent((props) => {\n *     const todo = props.todo;\n *     const isSelected = mobx.expr(() => props.viewState.selection === todo);\n *     return <div className={isSelected ? \"todo todo-selected\" : \"todo\"}>{todo.title}</div>\n * });\n *\n */\nfunction expr(expr, scope) {\n    if (!isComputingDerivation())\n        console.warn(getMessage(\"m013\"));\n    // optimization: would be more efficient if the expr itself wouldn't be evaluated first on the next change, but just a 'changed' signal would be fired\n    return computed(expr, { context: scope }).get();\n}\n\nfunction toJS(source, detectCycles, __alreadySeen) {\n    if (detectCycles === void 0) { detectCycles = true; }\n    if (__alreadySeen === void 0) { __alreadySeen = []; }\n    // optimization: using ES6 map would be more efficient!\n    // optimization: lift this function outside toJS, this makes recursion expensive\n    function cache(value) {\n        if (detectCycles)\n            __alreadySeen.push([source, value]);\n        return value;\n    }\n    if (isObservable(source)) {\n        if (detectCycles && __alreadySeen === null)\n            __alreadySeen = [];\n        if (detectCycles && source !== null && typeof source === \"object\") {\n            for (var i = 0, l = __alreadySeen.length; i < l; i++)\n                if (__alreadySeen[i][0] === source)\n                    return __alreadySeen[i][1];\n        }\n        if (isObservableArray(source)) {\n            var res = cache([]);\n            var toAdd = source.map(function (value) { return toJS(value, detectCycles, __alreadySeen); });\n            res.length = toAdd.length;\n            for (var i = 0, l = toAdd.length; i < l; i++)\n                res[i] = toAdd[i];\n            return res;\n        }\n        if (isObservableObject(source)) {\n            var res = cache({});\n            for (var key in source)\n                res[key] = toJS(source[key], detectCycles, __alreadySeen);\n            return res;\n        }\n        if (isObservableMap(source)) {\n            var res_1 = cache({});\n            source.forEach(function (value, key) { return (res_1[key] = toJS(value, detectCycles, __alreadySeen)); });\n            return res_1;\n        }\n        if (isObservableValue(source))\n            return toJS(source.get(), detectCycles, __alreadySeen);\n    }\n    return source;\n}\n\nfunction createTransformer(transformer, onCleanup) {\n    invariant(typeof transformer === \"function\" && transformer.length < 2, \"createTransformer expects a function that accepts one argument\");\n    // Memoizes: object id -> reactive view that applies transformer to the object\n    var objectCache = {};\n    // If the resetId changes, we will clear the object cache, see #163\n    // This construction is used to avoid leaking refs to the objectCache directly\n    var resetId = globalState.resetId;\n    // Local transformer class specifically for this transformer\n    var Transformer = (function (_super) {\n        __extends(Transformer, _super);\n        function Transformer(sourceIdentifier, sourceObject) {\n            var _this = _super.call(this, function () { return transformer(sourceObject); }, undefined, comparer.default, \"Transformer-\" + transformer.name + \"-\" + sourceIdentifier, undefined) || this;\n            _this.sourceIdentifier = sourceIdentifier;\n            _this.sourceObject = sourceObject;\n            return _this;\n        }\n        Transformer.prototype.onBecomeUnobserved = function () {\n            var lastValue = this.value;\n            _super.prototype.onBecomeUnobserved.call(this);\n            delete objectCache[this.sourceIdentifier];\n            if (onCleanup)\n                onCleanup(lastValue, this.sourceObject);\n        };\n        return Transformer;\n    }(ComputedValue));\n    return function (object) {\n        if (resetId !== globalState.resetId) {\n            objectCache = {};\n            resetId = globalState.resetId;\n        }\n        var identifier = getMemoizationId(object);\n        var reactiveTransformer = objectCache[identifier];\n        if (reactiveTransformer)\n            return reactiveTransformer.get();\n        // Not in cache; create a reactive view\n        reactiveTransformer = objectCache[identifier] = new Transformer(identifier, object);\n        return reactiveTransformer.get();\n    };\n}\nfunction getMemoizationId(object) {\n    if (typeof object === \"string\" || typeof object === \"number\")\n        return object;\n    if (object === null || typeof object !== \"object\")\n        throw new Error(\"[mobx] transform expected some kind of object or primitive value, got: \" + object);\n    var tid = object.$transformId;\n    if (tid === undefined) {\n        tid = getNextId();\n        addHiddenProp(object, \"$transformId\", tid);\n    }\n    return tid;\n}\n\nfunction interceptReads(thing, propOrHandler, handler) {\n    var target;\n    if (isObservableMap(thing) || isObservableArray(thing) || isObservableValue(thing)) {\n        target = getAdministration(thing);\n    }\n    else if (isObservableObject(thing)) {\n        if (typeof propOrHandler !== \"string\")\n            return fail(\"InterceptReads can only be used with a specific property, not with an object in general\");\n        target = getAdministration(thing, propOrHandler);\n    }\n    else {\n        return fail(\"Expected observable map, object or array as first array\");\n    }\n    if (target.dehancer !== undefined)\n        return fail(\"An intercept reader was already established\");\n    target.dehancer = typeof propOrHandler === \"function\" ? propOrHandler : handler;\n    return function () {\n        target.dehancer = undefined;\n    };\n}\n\n/**\n * (c) Michel Weststrate 2015 - 2016\n * MIT Licensed\n *\n * Welcome to the mobx sources! To get an global overview of how MobX internally works,\n * this is a good place to start:\n * https://medium.com/@mweststrate/becoming-fully-reactive-an-in-depth-explanation-of-mobservable-55995262a254#.xvbh6qd74\n *\n * Source folders:\n * ===============\n *\n * - api/     Most of the public static methods exposed by the module can be found here.\n * - core/    Implementation of the MobX algorithm; atoms, derivations, reactions, dependency trees, optimizations. Cool stuff can be found here.\n * - types/   All the magic that is need to have observable objects, arrays and values is in this folder. Including the modifiers like `asFlat`.\n * - utils/   Utility stuff.\n *\n */\nvar extras = {\n    allowStateChanges: allowStateChanges,\n    deepEqual: deepEqual,\n    getAtom: getAtom,\n    getDebugName: getDebugName,\n    getDependencyTree: getDependencyTree,\n    getAdministration: getAdministration,\n    getGlobalState: getGlobalState,\n    getObserverTree: getObserverTree,\n    interceptReads: interceptReads,\n    isComputingDerivation: isComputingDerivation,\n    isSpyEnabled: isSpyEnabled,\n    onReactionError: onReactionError,\n    reserveArrayBuffer: reserveArrayBuffer,\n    resetGlobalState: resetGlobalState,\n    isolateGlobalState: isolateGlobalState,\n    shareGlobalState: shareGlobalState,\n    spyReport: spyReport,\n    spyReportEnd: spyReportEnd,\n    spyReportStart: spyReportStart,\n    setReactionScheduler: setReactionScheduler\n};\nvar everything = {\n    Reaction: Reaction,\n    untracked: untracked,\n    Atom: Atom,\n    BaseAtom: BaseAtom,\n    useStrict: useStrict,\n    isStrictModeEnabled: isStrictModeEnabled,\n    spy: spy,\n    comparer: comparer,\n    asReference: asReference,\n    asFlat: asFlat,\n    asStructure: asStructure,\n    asMap: asMap,\n    isModifierDescriptor: isModifierDescriptor,\n    isObservableObject: isObservableObject,\n    isBoxedObservable: isObservableValue,\n    isObservableArray: isObservableArray,\n    ObservableMap: ObservableMap,\n    isObservableMap: isObservableMap,\n    map: map,\n    transaction: transaction,\n    observable: observable,\n    computed: computed,\n    isObservable: isObservable,\n    isComputed: isComputed,\n    extendObservable: extendObservable,\n    extendShallowObservable: extendShallowObservable,\n    observe: observe,\n    intercept: intercept,\n    autorun: autorun,\n    autorunAsync: autorunAsync,\n    when: when,\n    reaction: reaction,\n    action: action,\n    isAction: isAction,\n    runInAction: runInAction,\n    expr: expr,\n    toJS: toJS,\n    createTransformer: createTransformer,\n    whyRun: whyRun,\n    isArrayLike: isArrayLike,\n    extras: extras\n};\nvar warnedAboutDefaultExport = false;\nvar _loop_1 = function (p) {\n    var val = everything[p];\n    Object.defineProperty(everything, p, {\n        get: function () {\n            if (!warnedAboutDefaultExport) {\n                warnedAboutDefaultExport = true;\n                console.warn(\"Using default export (`import mobx from 'mobx'`) is deprecated \" +\n                    \"and won’t work in mobx@4.0.0\\n\" +\n                    \"Use `import * as mobx from 'mobx'` instead\");\n            }\n            return val;\n        }\n    });\n};\nfor (var p in everything) {\n    _loop_1(p);\n}\nif (typeof __MOBX_DEVTOOLS_GLOBAL_HOOK__ === \"object\") {\n    __MOBX_DEVTOOLS_GLOBAL_HOOK__.injectMobx({ spy: spy, extras: extras });\n}\n\nexport { extras, Reaction, untracked, IDerivationState, Atom, BaseAtom, useStrict, isStrictModeEnabled, spy, comparer, asReference, asFlat, asStructure, asMap, isModifierDescriptor, isObservableObject, isObservableValue as isBoxedObservable, isObservableArray, ObservableMap, isObservableMap, map, transaction, observable, computed, isObservable, isComputed, extendObservable, extendShallowObservable, observe, intercept, autorun, autorunAsync, when, reaction, action, isAction, runInAction, expr, toJS, createTransformer, whyRun, trace, isArrayLike };export default everything;\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc');  // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","// 'path' module extracted from Node.js v8.11.1 (only the posix part)\n// transplited with Babel\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nfunction assertPath(path) {\n  if (typeof path !== 'string') {\n    throw new TypeError('Path must be a string. Received ' + JSON.stringify(path));\n  }\n}\n\n// Resolves . and .. elements in a path with directory names\nfunction normalizeStringPosix(path, allowAboveRoot) {\n  var res = '';\n  var lastSegmentLength = 0;\n  var lastSlash = -1;\n  var dots = 0;\n  var code;\n  for (var i = 0; i <= path.length; ++i) {\n    if (i < path.length)\n      code = path.charCodeAt(i);\n    else if (code === 47 /*/*/)\n      break;\n    else\n      code = 47 /*/*/;\n    if (code === 47 /*/*/) {\n      if (lastSlash === i - 1 || dots === 1) {\n        // NOOP\n      } else if (lastSlash !== i - 1 && dots === 2) {\n        if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /*.*/ || res.charCodeAt(res.length - 2) !== 46 /*.*/) {\n          if (res.length > 2) {\n            var lastSlashIndex = res.lastIndexOf('/');\n            if (lastSlashIndex !== res.length - 1) {\n              if (lastSlashIndex === -1) {\n                res = '';\n                lastSegmentLength = 0;\n              } else {\n                res = res.slice(0, lastSlashIndex);\n                lastSegmentLength = res.length - 1 - res.lastIndexOf('/');\n              }\n              lastSlash = i;\n              dots = 0;\n              continue;\n            }\n          } else if (res.length === 2 || res.length === 1) {\n            res = '';\n            lastSegmentLength = 0;\n            lastSlash = i;\n            dots = 0;\n            continue;\n          }\n        }\n        if (allowAboveRoot) {\n          if (res.length > 0)\n            res += '/..';\n          else\n            res = '..';\n          lastSegmentLength = 2;\n        }\n      } else {\n        if (res.length > 0)\n          res += '/' + path.slice(lastSlash + 1, i);\n        else\n          res = path.slice(lastSlash + 1, i);\n        lastSegmentLength = i - lastSlash - 1;\n      }\n      lastSlash = i;\n      dots = 0;\n    } else if (code === 46 /*.*/ && dots !== -1) {\n      ++dots;\n    } else {\n      dots = -1;\n    }\n  }\n  return res;\n}\n\nfunction _format(sep, pathObject) {\n  var dir = pathObject.dir || pathObject.root;\n  var base = pathObject.base || (pathObject.name || '') + (pathObject.ext || '');\n  if (!dir) {\n    return base;\n  }\n  if (dir === pathObject.root) {\n    return dir + base;\n  }\n  return dir + sep + base;\n}\n\nvar posix = {\n  // path.resolve([from ...], to)\n  resolve: function resolve() {\n    var resolvedPath = '';\n    var resolvedAbsolute = false;\n    var cwd;\n\n    for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n      var path;\n      if (i >= 0)\n        path = arguments[i];\n      else {\n        if (cwd === undefined)\n          cwd = process.cwd();\n        path = cwd;\n      }\n\n      assertPath(path);\n\n      // Skip empty entries\n      if (path.length === 0) {\n        continue;\n      }\n\n      resolvedPath = path + '/' + resolvedPath;\n      resolvedAbsolute = path.charCodeAt(0) === 47 /*/*/;\n    }\n\n    // At this point the path should be resolved to a full absolute path, but\n    // handle relative paths to be safe (might happen when process.cwd() fails)\n\n    // Normalize the path\n    resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n\n    if (resolvedAbsolute) {\n      if (resolvedPath.length > 0)\n        return '/' + resolvedPath;\n      else\n        return '/';\n    } else if (resolvedPath.length > 0) {\n      return resolvedPath;\n    } else {\n      return '.';\n    }\n  },\n\n  normalize: function normalize(path) {\n    assertPath(path);\n\n    if (path.length === 0) return '.';\n\n    var isAbsolute = path.charCodeAt(0) === 47 /*/*/;\n    var trailingSeparator = path.charCodeAt(path.length - 1) === 47 /*/*/;\n\n    // Normalize the path\n    path = normalizeStringPosix(path, !isAbsolute);\n\n    if (path.length === 0 && !isAbsolute) path = '.';\n    if (path.length > 0 && trailingSeparator) path += '/';\n\n    if (isAbsolute) return '/' + path;\n    return path;\n  },\n\n  isAbsolute: function isAbsolute(path) {\n    assertPath(path);\n    return path.length > 0 && path.charCodeAt(0) === 47 /*/*/;\n  },\n\n  join: function join() {\n    if (arguments.length === 0)\n      return '.';\n    var joined;\n    for (var i = 0; i < arguments.length; ++i) {\n      var arg = arguments[i];\n      assertPath(arg);\n      if (arg.length > 0) {\n        if (joined === undefined)\n          joined = arg;\n        else\n          joined += '/' + arg;\n      }\n    }\n    if (joined === undefined)\n      return '.';\n    return posix.normalize(joined);\n  },\n\n  relative: function relative(from, to) {\n    assertPath(from);\n    assertPath(to);\n\n    if (from === to) return '';\n\n    from = posix.resolve(from);\n    to = posix.resolve(to);\n\n    if (from === to) return '';\n\n    // Trim any leading backslashes\n    var fromStart = 1;\n    for (; fromStart < from.length; ++fromStart) {\n      if (from.charCodeAt(fromStart) !== 47 /*/*/)\n        break;\n    }\n    var fromEnd = from.length;\n    var fromLen = fromEnd - fromStart;\n\n    // Trim any leading backslashes\n    var toStart = 1;\n    for (; toStart < to.length; ++toStart) {\n      if (to.charCodeAt(toStart) !== 47 /*/*/)\n        break;\n    }\n    var toEnd = to.length;\n    var toLen = toEnd - toStart;\n\n    // Compare paths to find the longest common path from root\n    var length = fromLen < toLen ? fromLen : toLen;\n    var lastCommonSep = -1;\n    var i = 0;\n    for (; i <= length; ++i) {\n      if (i === length) {\n        if (toLen > length) {\n          if (to.charCodeAt(toStart + i) === 47 /*/*/) {\n            // We get here if `from` is the exact base path for `to`.\n            // For example: from='/foo/bar'; to='/foo/bar/baz'\n            return to.slice(toStart + i + 1);\n          } else if (i === 0) {\n            // We get here if `from` is the root\n            // For example: from='/'; to='/foo'\n            return to.slice(toStart + i);\n          }\n        } else if (fromLen > length) {\n          if (from.charCodeAt(fromStart + i) === 47 /*/*/) {\n            // We get here if `to` is the exact base path for `from`.\n            // For example: from='/foo/bar/baz'; to='/foo/bar'\n            lastCommonSep = i;\n          } else if (i === 0) {\n            // We get here if `to` is the root.\n            // For example: from='/foo'; to='/'\n            lastCommonSep = 0;\n          }\n        }\n        break;\n      }\n      var fromCode = from.charCodeAt(fromStart + i);\n      var toCode = to.charCodeAt(toStart + i);\n      if (fromCode !== toCode)\n        break;\n      else if (fromCode === 47 /*/*/)\n        lastCommonSep = i;\n    }\n\n    var out = '';\n    // Generate the relative path based on the path difference between `to`\n    // and `from`\n    for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n      if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) {\n        if (out.length === 0)\n          out += '..';\n        else\n          out += '/..';\n      }\n    }\n\n    // Lastly, append the rest of the destination (`to`) path that comes after\n    // the common path parts\n    if (out.length > 0)\n      return out + to.slice(toStart + lastCommonSep);\n    else {\n      toStart += lastCommonSep;\n      if (to.charCodeAt(toStart) === 47 /*/*/)\n        ++toStart;\n      return to.slice(toStart);\n    }\n  },\n\n  _makeLong: function _makeLong(path) {\n    return path;\n  },\n\n  dirname: function dirname(path) {\n    assertPath(path);\n    if (path.length === 0) return '.';\n    var code = path.charCodeAt(0);\n    var hasRoot = code === 47 /*/*/;\n    var end = -1;\n    var matchedSlash = true;\n    for (var i = path.length - 1; i >= 1; --i) {\n      code = path.charCodeAt(i);\n      if (code === 47 /*/*/) {\n          if (!matchedSlash) {\n            end = i;\n            break;\n          }\n        } else {\n        // We saw the first non-path separator\n        matchedSlash = false;\n      }\n    }\n\n    if (end === -1) return hasRoot ? '/' : '.';\n    if (hasRoot && end === 1) return '//';\n    return path.slice(0, end);\n  },\n\n  basename: function basename(path, ext) {\n    if (ext !== undefined && typeof ext !== 'string') throw new TypeError('\"ext\" argument must be a string');\n    assertPath(path);\n\n    var start = 0;\n    var end = -1;\n    var matchedSlash = true;\n    var i;\n\n    if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n      if (ext.length === path.length && ext === path) return '';\n      var extIdx = ext.length - 1;\n      var firstNonSlashEnd = -1;\n      for (i = path.length - 1; i >= 0; --i) {\n        var code = path.charCodeAt(i);\n        if (code === 47 /*/*/) {\n            // If we reached a path separator that was not part of a set of path\n            // separators at the end of the string, stop now\n            if (!matchedSlash) {\n              start = i + 1;\n              break;\n            }\n          } else {\n          if (firstNonSlashEnd === -1) {\n            // We saw the first non-path separator, remember this index in case\n            // we need it if the extension ends up not matching\n            matchedSlash = false;\n            firstNonSlashEnd = i + 1;\n          }\n          if (extIdx >= 0) {\n            // Try to match the explicit extension\n            if (code === ext.charCodeAt(extIdx)) {\n              if (--extIdx === -1) {\n                // We matched the extension, so mark this as the end of our path\n                // component\n                end = i;\n              }\n            } else {\n              // Extension does not match, so our result is the entire path\n              // component\n              extIdx = -1;\n              end = firstNonSlashEnd;\n            }\n          }\n        }\n      }\n\n      if (start === end) end = firstNonSlashEnd;else if (end === -1) end = path.length;\n      return path.slice(start, end);\n    } else {\n      for (i = path.length - 1; i >= 0; --i) {\n        if (path.charCodeAt(i) === 47 /*/*/) {\n            // If we reached a path separator that was not part of a set of path\n            // separators at the end of the string, stop now\n            if (!matchedSlash) {\n              start = i + 1;\n              break;\n            }\n          } else if (end === -1) {\n          // We saw the first non-path separator, mark this as the end of our\n          // path component\n          matchedSlash = false;\n          end = i + 1;\n        }\n      }\n\n      if (end === -1) return '';\n      return path.slice(start, end);\n    }\n  },\n\n  extname: function extname(path) {\n    assertPath(path);\n    var startDot = -1;\n    var startPart = 0;\n    var end = -1;\n    var matchedSlash = true;\n    // Track the state of characters (if any) we see before our first dot and\n    // after any path separator we find\n    var preDotState = 0;\n    for (var i = path.length - 1; i >= 0; --i) {\n      var code = path.charCodeAt(i);\n      if (code === 47 /*/*/) {\n          // If we reached a path separator that was not part of a set of path\n          // separators at the end of the string, stop now\n          if (!matchedSlash) {\n            startPart = i + 1;\n            break;\n          }\n          continue;\n        }\n      if (end === -1) {\n        // We saw the first non-path separator, mark this as the end of our\n        // extension\n        matchedSlash = false;\n        end = i + 1;\n      }\n      if (code === 46 /*.*/) {\n          // If this is our first dot, mark it as the start of our extension\n          if (startDot === -1)\n            startDot = i;\n          else if (preDotState !== 1)\n            preDotState = 1;\n      } else if (startDot !== -1) {\n        // We saw a non-dot and non-path separator before our dot, so we should\n        // have a good chance at having a non-empty extension\n        preDotState = -1;\n      }\n    }\n\n    if (startDot === -1 || end === -1 ||\n        // We saw a non-dot character immediately before the dot\n        preDotState === 0 ||\n        // The (right-most) trimmed path component is exactly '..'\n        preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n      return '';\n    }\n    return path.slice(startDot, end);\n  },\n\n  format: function format(pathObject) {\n    if (pathObject === null || typeof pathObject !== 'object') {\n      throw new TypeError('The \"pathObject\" argument must be of type Object. Received type ' + typeof pathObject);\n    }\n    return _format('/', pathObject);\n  },\n\n  parse: function parse(path) {\n    assertPath(path);\n\n    var ret = { root: '', dir: '', base: '', ext: '', name: '' };\n    if (path.length === 0) return ret;\n    var code = path.charCodeAt(0);\n    var isAbsolute = code === 47 /*/*/;\n    var start;\n    if (isAbsolute) {\n      ret.root = '/';\n      start = 1;\n    } else {\n      start = 0;\n    }\n    var startDot = -1;\n    var startPart = 0;\n    var end = -1;\n    var matchedSlash = true;\n    var i = path.length - 1;\n\n    // Track the state of characters (if any) we see before our first dot and\n    // after any path separator we find\n    var preDotState = 0;\n\n    // Get non-dir info\n    for (; i >= start; --i) {\n      code = path.charCodeAt(i);\n      if (code === 47 /*/*/) {\n          // If we reached a path separator that was not part of a set of path\n          // separators at the end of the string, stop now\n          if (!matchedSlash) {\n            startPart = i + 1;\n            break;\n          }\n          continue;\n        }\n      if (end === -1) {\n        // We saw the first non-path separator, mark this as the end of our\n        // extension\n        matchedSlash = false;\n        end = i + 1;\n      }\n      if (code === 46 /*.*/) {\n          // If this is our first dot, mark it as the start of our extension\n          if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n        } else if (startDot !== -1) {\n        // We saw a non-dot and non-path separator before our dot, so we should\n        // have a good chance at having a non-empty extension\n        preDotState = -1;\n      }\n    }\n\n    if (startDot === -1 || end === -1 ||\n    // We saw a non-dot character immediately before the dot\n    preDotState === 0 ||\n    // The (right-most) trimmed path component is exactly '..'\n    preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n      if (end !== -1) {\n        if (startPart === 0 && isAbsolute) ret.base = ret.name = path.slice(1, end);else ret.base = ret.name = path.slice(startPart, end);\n      }\n    } else {\n      if (startPart === 0 && isAbsolute) {\n        ret.name = path.slice(1, startDot);\n        ret.base = path.slice(1, end);\n      } else {\n        ret.name = path.slice(startPart, startDot);\n        ret.base = path.slice(startPart, end);\n      }\n      ret.ext = path.slice(startDot, end);\n    }\n\n    if (startPart > 0) ret.dir = path.slice(0, startPart - 1);else if (isAbsolute) ret.dir = '/';\n\n    return ret;\n  },\n\n  sep: '/',\n  delimiter: ':',\n  win32: null,\n  posix: null\n};\n\nposix.posix = posix;\n\nmodule.exports = posix;\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _createChainableTypeChecker = require('./utils/createChainableTypeChecker');\n\nvar _createChainableTypeChecker2 = _interopRequireDefault(_createChainableTypeChecker);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction validate(props, propName, componentName, location, propFullName) {\n  var propValue = props[propName];\n  var propType = typeof propValue === 'undefined' ? 'undefined' : _typeof(propValue);\n\n  if (_react2.default.isValidElement(propValue)) {\n    return new Error('Invalid ' + location + ' `' + propFullName + '` of type ReactElement ' + ('supplied to `' + componentName + '`, expected a ReactComponent or a ') + 'DOMElement. You can usually obtain a ReactComponent or DOMElement ' + 'from a ReactElement by attaching a ref to it.');\n  }\n\n  if ((propType !== 'object' || typeof propValue.render !== 'function') && propValue.nodeType !== 1) {\n    return new Error('Invalid ' + location + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected a ReactComponent or a ') + 'DOMElement.');\n  }\n\n  return null;\n}\n\nexports.default = (0, _createChainableTypeChecker2.default)(validate);\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = deprecated;\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar warned = {};\n\nfunction deprecated(validator, reason) {\n  return function validate(props, propName, componentName, location, propFullName) {\n    var componentNameSafe = componentName || '<<anonymous>>';\n    var propFullNameSafe = propFullName || propName;\n\n    if (props[propName] != null) {\n      var messageKey = componentName + '.' + propName;\n\n      (0, _warning2.default)(warned[messageKey], 'The ' + location + ' `' + propFullNameSafe + '` of ' + ('`' + componentNameSafe + '` is deprecated. ' + reason + '.'));\n\n      warned[messageKey] = true;\n    }\n\n    for (var _len = arguments.length, args = Array(_len > 5 ? _len - 5 : 0), _key = 5; _key < _len; _key++) {\n      args[_key - 5] = arguments[_key];\n    }\n\n    return validator.apply(undefined, [props, propName, componentName, location, propFullName].concat(args));\n  };\n}\n\n/* eslint-disable no-underscore-dangle */\nfunction _resetWarned() {\n  warned = {};\n}\n\ndeprecated._resetWarned = _resetWarned;\n/* eslint-enable no-underscore-dangle */\n\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactIs = require('react-is');\n\nvar _createChainableTypeChecker = require('./utils/createChainableTypeChecker');\n\nvar _createChainableTypeChecker2 = _interopRequireDefault(_createChainableTypeChecker);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction elementType(props, propName, componentName, location, propFullName) {\n  var propValue = props[propName];\n\n  if (_react2.default.isValidElement(propValue)) {\n    return new Error('Invalid ' + location + ' `' + propFullName + '` of type ReactElement ' + ('supplied to `' + componentName + '`,expected an element type (a string ') + ', component class, or function component).');\n  }\n\n  if (!(0, _reactIs.isValidElementType)(propValue)) {\n    return new Error('Invalid ' + location + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected an element type (a string ') + ', component class, or function component).');\n  }\n\n  return null;\n}\n\nexports.default = (0, _createChainableTypeChecker2.default)(elementType);\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = createChainableTypeChecker;\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n// Mostly taken from ReactPropTypes.\n\nfunction createChainableTypeChecker(validate) {\n  function checkType(isRequired, props, propName, componentName, location, propFullName) {\n    var componentNameSafe = componentName || '<<anonymous>>';\n    var propFullNameSafe = propFullName || propName;\n\n    if (props[propName] == null) {\n      if (isRequired) {\n        return new Error('Required ' + location + ' `' + propFullNameSafe + '` was not specified ' + ('in `' + componentNameSafe + '`.'));\n      }\n\n      return null;\n    }\n\n    for (var _len = arguments.length, args = Array(_len > 6 ? _len - 6 : 0), _key = 6; _key < _len; _key++) {\n      args[_key - 6] = arguments[_key];\n    }\n\n    return validate.apply(undefined, [props, propName, componentNameSafe, location, propFullNameSafe].concat(args));\n  }\n\n  var chainedCheckType = checkType.bind(null, false);\n  chainedCheckType.isRequired = checkType.bind(null, true);\n\n  return chainedCheckType;\n}\nmodule.exports = exports['default'];","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar __DEV__ = process.env.NODE_ENV !== 'production';\n\nvar warning = function() {};\n\nif (__DEV__) {\n  var printWarning = function printWarning(format, args) {\n    var len = arguments.length;\n    args = new Array(len > 1 ? len - 1 : 0);\n    for (var key = 1; key < len; key++) {\n      args[key - 1] = arguments[key];\n    }\n    var argIndex = 0;\n    var message = 'Warning: ' +\n      format.replace(/%s/g, function() {\n        return args[argIndex++];\n      });\n    if (typeof console !== 'undefined') {\n      console.error(message);\n    }\n    try {\n      // --- Welcome to debugging React ---\n      // This error was thrown as a convenience so that you can use this stack\n      // to find the callsite that caused this warning to fire.\n      throw new Error(message);\n    } catch (x) {}\n  }\n\n  warning = function(condition, format, args) {\n    var len = arguments.length;\n    args = new Array(len > 2 ? len - 2 : 0);\n    for (var key = 2; key < len; key++) {\n      args[key - 2] = arguments[key];\n    }\n    if (format === undefined) {\n      throw new Error(\n          '`warning(condition, format, ...args)` requires a warning ' +\n          'message argument'\n      );\n    }\n    if (!condition) {\n      printWarning.apply(null, [format].concat(args));\n    }\n  };\n}\n\nmodule.exports = warning;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n  function shim(props, propName, componentName, location, propFullName, secret) {\n    if (secret === ReactPropTypesSecret) {\n      // It is still safe when called from React.\n      return;\n    }\n    var err = new Error(\n      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n      'Use PropTypes.checkPropTypes() to call them. ' +\n      'Read more at http://fb.me/use-check-prop-types'\n    );\n    err.name = 'Invariant Violation';\n    throw err;\n  };\n  shim.isRequired = shim;\n  function getShim() {\n    return shim;\n  };\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n  var ReactPropTypes = {\n    array: shim,\n    bigint: shim,\n    bool: shim,\n    func: shim,\n    number: shim,\n    object: shim,\n    string: shim,\n    symbol: shim,\n\n    any: shim,\n    arrayOf: getShim,\n    element: shim,\n    elementType: shim,\n    instanceOf: getShim,\n    node: shim,\n    objectOf: getShim,\n    oneOf: getShim,\n    oneOfType: getShim,\n    shape: getShim,\n    exact: getShim,\n\n    checkPropTypes: emptyFunctionWithReset,\n    resetWarningCache: emptyFunction\n  };\n\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n  var ReactIs = require('react-is');\n\n  // By explicitly using `prop-types` you are opting into new development behavior.\n  // http://fb.me/prop-types-in-prod\n  var throwOnDirectAccess = true;\n  module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n  // By explicitly using `prop-types` you are opting into new production behavior.\n  // http://fb.me/prop-types-in-prod\n  module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/*! https://mths.be/punycode v1.4.1 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t    counter = 0,\n\t\t    length = string.length,\n\t\t    value,\n\t\t    extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t//  0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t    inputLength = input.length,\n\t\t    out,\n\t\t    i = 0,\n\t\t    n = initialN,\n\t\t    bias = initialBias,\n\t\t    basic,\n\t\t    j,\n\t\t    index,\n\t\t    oldi,\n\t\t    w,\n\t\t    k,\n\t\t    digit,\n\t\t    t,\n\t\t    /** Cached calculation results */\n\t\t    baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t    delta,\n\t\t    handledCPCount,\n\t\t    basicLength,\n\t\t    bias,\n\t\t    j,\n\t\t    m,\n\t\t    q,\n\t\t    k,\n\t\t    t,\n\t\t    currentValue,\n\t\t    output = [],\n\t\t    /** `inputLength` will hold the number of code points in `input`. */\n\t\t    inputLength,\n\t\t    /** Cached calculation results */\n\t\t    handledCPCountPlusOne,\n\t\t    baseMinusT,\n\t\t    qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.4.1',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","/** @license React v16.14.0\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),n=require(\"object-assign\"),r=require(\"scheduler\");function u(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}if(!aa)throw Error(u(227));\nfunction ba(a,b,c,d,e,f,g,h,k){var l=Array.prototype.slice.call(arguments,3);try{b.apply(c,l)}catch(m){this.onError(m)}}var da=!1,ea=null,fa=!1,ha=null,ia={onError:function(a){da=!0;ea=a}};function ja(a,b,c,d,e,f,g,h,k){da=!1;ea=null;ba.apply(ia,arguments)}function ka(a,b,c,d,e,f,g,h,k){ja.apply(this,arguments);if(da){if(da){var l=ea;da=!1;ea=null}else throw Error(u(198));fa||(fa=!0,ha=l)}}var la=null,ma=null,na=null;\nfunction oa(a,b,c){var d=a.type||\"unknown-event\";a.currentTarget=na(c);ka(d,b,void 0,a);a.currentTarget=null}var pa=null,qa={};\nfunction ra(){if(pa)for(var a in qa){var b=qa[a],c=pa.indexOf(a);if(!(-1<c))throw Error(u(96,a));if(!sa[c]){if(!b.extractEvents)throw Error(u(97,a));sa[c]=b;c=b.eventTypes;for(var d in c){var e=void 0;var f=c[d],g=b,h=d;if(ta.hasOwnProperty(h))throw Error(u(99,h));ta[h]=f;var k=f.phasedRegistrationNames;if(k){for(e in k)k.hasOwnProperty(e)&&ua(k[e],g,h);e=!0}else f.registrationName?(ua(f.registrationName,g,h),e=!0):e=!1;if(!e)throw Error(u(98,d,a));}}}}\nfunction ua(a,b,c){if(va[a])throw Error(u(100,a));va[a]=b;wa[a]=b.eventTypes[c].dependencies}var sa=[],ta={},va={},wa={};function xa(a){var b=!1,c;for(c in a)if(a.hasOwnProperty(c)){var d=a[c];if(!qa.hasOwnProperty(c)||qa[c]!==d){if(qa[c])throw Error(u(102,c));qa[c]=d;b=!0}}b&&ra()}var ya=!(\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement),za=null,Aa=null,Ba=null;\nfunction Ca(a){if(a=ma(a)){if(\"function\"!==typeof za)throw Error(u(280));var b=a.stateNode;b&&(b=la(b),za(a.stateNode,a.type,b))}}function Da(a){Aa?Ba?Ba.push(a):Ba=[a]:Aa=a}function Ea(){if(Aa){var a=Aa,b=Ba;Ba=Aa=null;Ca(a);if(b)for(a=0;a<b.length;a++)Ca(b[a])}}function Fa(a,b){return a(b)}function Ga(a,b,c,d,e){return a(b,c,d,e)}function Ha(){}var Ia=Fa,Ja=!1,Ka=!1;function La(){if(null!==Aa||null!==Ba)Ha(),Ea()}\nfunction Ma(a,b,c){if(Ka)return a(b,c);Ka=!0;try{return Ia(a,b,c)}finally{Ka=!1,La()}}var Na=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,Oa=Object.prototype.hasOwnProperty,Pa={},Qa={};\nfunction Ra(a){if(Oa.call(Qa,a))return!0;if(Oa.call(Pa,a))return!1;if(Na.test(a))return Qa[a]=!0;Pa[a]=!0;return!1}function Sa(a,b,c,d){if(null!==c&&0===c.type)return!1;switch(typeof b){case \"function\":case \"symbol\":return!0;case \"boolean\":if(d)return!1;if(null!==c)return!c.acceptsBooleans;a=a.toLowerCase().slice(0,5);return\"data-\"!==a&&\"aria-\"!==a;default:return!1}}\nfunction Ta(a,b,c,d){if(null===b||\"undefined\"===typeof b||Sa(a,b,c,d))return!0;if(d)return!1;if(null!==c)switch(c.type){case 3:return!b;case 4:return!1===b;case 5:return isNaN(b);case 6:return isNaN(b)||1>b}return!1}function v(a,b,c,d,e,f){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f}var C={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){C[a]=new v(a,0,!1,a,null,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];C[b]=new v(b,1,!1,a[1],null,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){C[a]=new v(a,2,!1,a.toLowerCase(),null,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){C[a]=new v(a,2,!1,a,null,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){C[a]=new v(a,3,!1,a.toLowerCase(),null,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){C[a]=new v(a,3,!0,a,null,!1)});[\"capture\",\"download\"].forEach(function(a){C[a]=new v(a,4,!1,a,null,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){C[a]=new v(a,6,!1,a,null,!1)});[\"rowSpan\",\"start\"].forEach(function(a){C[a]=new v(a,5,!1,a.toLowerCase(),null,!1)});var Ua=/[\\-:]([a-z])/g;function Va(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(Ua,\nVa);C[b]=new v(b,1,!1,a,null,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(Ua,Va);C[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(Ua,Va);C[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){C[a]=new v(a,1,!1,a.toLowerCase(),null,!1)});\nC.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){C[a]=new v(a,1,!1,a.toLowerCase(),null,!0)});var Wa=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;Wa.hasOwnProperty(\"ReactCurrentDispatcher\")||(Wa.ReactCurrentDispatcher={current:null});Wa.hasOwnProperty(\"ReactCurrentBatchConfig\")||(Wa.ReactCurrentBatchConfig={suspense:null});\nfunction Xa(a,b,c,d){var e=C.hasOwnProperty(b)?C[b]:null;var f=null!==e?0===e.type:d?!1:!(2<b.length)||\"o\"!==b[0]&&\"O\"!==b[0]||\"n\"!==b[1]&&\"N\"!==b[1]?!1:!0;f||(Ta(b,c,e,d)&&(c=null),d||null===e?Ra(b)&&(null===c?a.removeAttribute(b):a.setAttribute(b,\"\"+c)):e.mustUseProperty?a[e.propertyName]=null===c?3===e.type?!1:\"\":c:(b=e.attributeName,d=e.attributeNamespace,null===c?a.removeAttribute(b):(e=e.type,c=3===e||4===e&&!0===c?\"\":\"\"+c,d?a.setAttributeNS(d,b,c):a.setAttribute(b,c))))}\nvar Ya=/^(.*)[\\\\\\/]/,E=\"function\"===typeof Symbol&&Symbol.for,Za=E?Symbol.for(\"react.element\"):60103,$a=E?Symbol.for(\"react.portal\"):60106,ab=E?Symbol.for(\"react.fragment\"):60107,bb=E?Symbol.for(\"react.strict_mode\"):60108,cb=E?Symbol.for(\"react.profiler\"):60114,db=E?Symbol.for(\"react.provider\"):60109,eb=E?Symbol.for(\"react.context\"):60110,fb=E?Symbol.for(\"react.concurrent_mode\"):60111,gb=E?Symbol.for(\"react.forward_ref\"):60112,hb=E?Symbol.for(\"react.suspense\"):60113,ib=E?Symbol.for(\"react.suspense_list\"):\n60120,jb=E?Symbol.for(\"react.memo\"):60115,kb=E?Symbol.for(\"react.lazy\"):60116,lb=E?Symbol.for(\"react.block\"):60121,mb=\"function\"===typeof Symbol&&Symbol.iterator;function nb(a){if(null===a||\"object\"!==typeof a)return null;a=mb&&a[mb]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}function ob(a){if(-1===a._status){a._status=0;var b=a._ctor;b=b();a._result=b;b.then(function(b){0===a._status&&(b=b.default,a._status=1,a._result=b)},function(b){0===a._status&&(a._status=2,a._result=b)})}}\nfunction pb(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ab:return\"Fragment\";case $a:return\"Portal\";case cb:return\"Profiler\";case bb:return\"StrictMode\";case hb:return\"Suspense\";case ib:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case eb:return\"Context.Consumer\";case db:return\"Context.Provider\";case gb:var b=a.render;b=b.displayName||b.name||\"\";return a.displayName||(\"\"!==b?\"ForwardRef(\"+b+\")\":\n\"ForwardRef\");case jb:return pb(a.type);case lb:return pb(a.render);case kb:if(a=1===a._status?a._result:null)return pb(a)}return null}function qb(a){var b=\"\";do{a:switch(a.tag){case 3:case 4:case 6:case 7:case 10:case 9:var c=\"\";break a;default:var d=a._debugOwner,e=a._debugSource,f=pb(a.type);c=null;d&&(c=pb(d.type));d=f;f=\"\";e?f=\" (at \"+e.fileName.replace(Ya,\"\")+\":\"+e.lineNumber+\")\":c&&(f=\" (created by \"+c+\")\");c=\"\\n    in \"+(d||\"Unknown\")+f}b+=c;a=a.return}while(a);return b}\nfunction rb(a){switch(typeof a){case \"boolean\":case \"number\":case \"object\":case \"string\":case \"undefined\":return a;default:return\"\"}}function sb(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction tb(a){var b=sb(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function xb(a){a._valueTracker||(a._valueTracker=tb(a))}function yb(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=sb(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function zb(a,b){var c=b.checked;return n({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}\nfunction Ab(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=rb(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function Bb(a,b){b=b.checked;null!=b&&Xa(a,\"checked\",b,!1)}\nfunction Cb(a,b){Bb(a,b);var c=rb(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?Db(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&Db(a,b.type,rb(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction Eb(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction Db(a,b,c){if(\"number\"!==b||a.ownerDocument.activeElement!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}function Fb(a){var b=\"\";aa.Children.forEach(a,function(a){null!=a&&(b+=a)});return b}function Gb(a,b){a=n({children:void 0},b);if(b=Fb(b.children))a.children=b;return a}\nfunction Hb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e<c.length;e++)b[\"$\"+c[e]]=!0;for(c=0;c<a.length;c++)e=b.hasOwnProperty(\"$\"+a[c].value),a[c].selected!==e&&(a[c].selected=e),e&&d&&(a[c].defaultSelected=!0)}else{c=\"\"+rb(c);b=null;for(e=0;e<a.length;e++){if(a[e].value===c){a[e].selected=!0;d&&(a[e].defaultSelected=!0);return}null!==b||a[e].disabled||(b=a[e])}null!==b&&(b.selected=!0)}}\nfunction Ib(a,b){if(null!=b.dangerouslySetInnerHTML)throw Error(u(91));return n({},b,{value:void 0,defaultValue:void 0,children:\"\"+a._wrapperState.initialValue})}function Jb(a,b){var c=b.value;if(null==c){c=b.children;b=b.defaultValue;if(null!=c){if(null!=b)throw Error(u(92));if(Array.isArray(c)){if(!(1>=c.length))throw Error(u(93));c=c[0]}b=c}null==b&&(b=\"\");c=b}a._wrapperState={initialValue:rb(c)}}\nfunction Kb(a,b){var c=rb(b.value),d=rb(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function Lb(a){var b=a.textContent;b===a._wrapperState.initialValue&&\"\"!==b&&null!==b&&(a.value=b)}var Mb={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction Nb(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function Ob(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?Nb(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar Pb,Qb=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==Mb.svg||\"innerHTML\"in a)a.innerHTML=b;else{Pb=Pb||document.createElement(\"div\");Pb.innerHTML=\"<svg>\"+b.valueOf().toString()+\"</svg>\";for(b=Pb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction Rb(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}function Sb(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;return c}var Tb={animationend:Sb(\"Animation\",\"AnimationEnd\"),animationiteration:Sb(\"Animation\",\"AnimationIteration\"),animationstart:Sb(\"Animation\",\"AnimationStart\"),transitionend:Sb(\"Transition\",\"TransitionEnd\")},Ub={},Vb={};\nya&&(Vb=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete Tb.animationend.animation,delete Tb.animationiteration.animation,delete Tb.animationstart.animation),\"TransitionEvent\"in window||delete Tb.transitionend.transition);function Wb(a){if(Ub[a])return Ub[a];if(!Tb[a])return a;var b=Tb[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Vb)return Ub[a]=b[c];return a}\nvar Xb=Wb(\"animationend\"),Yb=Wb(\"animationiteration\"),Zb=Wb(\"animationstart\"),$b=Wb(\"transitionend\"),ac=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),bc=new (\"function\"===typeof WeakMap?WeakMap:Map);function cc(a){var b=bc.get(a);void 0===b&&(b=new Map,bc.set(a,b));return b}\nfunction dc(a){var b=a,c=a;if(a.alternate)for(;b.return;)b=b.return;else{a=b;do b=a,0!==(b.effectTag&1026)&&(c=b.return),a=b.return;while(a)}return 3===b.tag?c:null}function ec(a){if(13===a.tag){var b=a.memoizedState;null===b&&(a=a.alternate,null!==a&&(b=a.memoizedState));if(null!==b)return b.dehydrated}return null}function fc(a){if(dc(a)!==a)throw Error(u(188));}\nfunction gc(a){var b=a.alternate;if(!b){b=dc(a);if(null===b)throw Error(u(188));return b!==a?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return fc(e),a;if(f===d)return fc(e),b;f=f.sibling}throw Error(u(188));}if(c.return!==d.return)c=e,d=f;else{for(var g=!1,h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===\nc){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}if(!g)throw Error(u(189));}}if(c.alternate!==d)throw Error(u(190));}if(3!==c.tag)throw Error(u(188));return c.stateNode.current===c?a:b}function hc(a){a=gc(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6===b.tag)return b;if(b.child)b.child.return=b,b=b.child;else{if(b===a)break;for(;!b.sibling;){if(!b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}}return null}\nfunction ic(a,b){if(null==b)throw Error(u(30));if(null==a)return b;if(Array.isArray(a)){if(Array.isArray(b))return a.push.apply(a,b),a;a.push(b);return a}return Array.isArray(b)?[a].concat(b):[a,b]}function jc(a,b,c){Array.isArray(a)?a.forEach(b,c):a&&b.call(c,a)}var kc=null;\nfunction lc(a){if(a){var b=a._dispatchListeners,c=a._dispatchInstances;if(Array.isArray(b))for(var d=0;d<b.length&&!a.isPropagationStopped();d++)oa(a,b[d],c[d]);else b&&oa(a,b,c);a._dispatchListeners=null;a._dispatchInstances=null;a.isPersistent()||a.constructor.release(a)}}function mc(a){null!==a&&(kc=ic(kc,a));a=kc;kc=null;if(a){jc(a,lc);if(kc)throw Error(u(95));if(fa)throw a=ha,fa=!1,ha=null,a;}}\nfunction nc(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}function oc(a){if(!ya)return!1;a=\"on\"+a;var b=a in document;b||(b=document.createElement(\"div\"),b.setAttribute(a,\"return;\"),b=\"function\"===typeof b[a]);return b}var pc=[];function qc(a){a.topLevelType=null;a.nativeEvent=null;a.targetInst=null;a.ancestors.length=0;10>pc.length&&pc.push(a)}\nfunction rc(a,b,c,d){if(pc.length){var e=pc.pop();e.topLevelType=a;e.eventSystemFlags=d;e.nativeEvent=b;e.targetInst=c;return e}return{topLevelType:a,eventSystemFlags:d,nativeEvent:b,targetInst:c,ancestors:[]}}\nfunction sc(a){var b=a.targetInst,c=b;do{if(!c){a.ancestors.push(c);break}var d=c;if(3===d.tag)d=d.stateNode.containerInfo;else{for(;d.return;)d=d.return;d=3!==d.tag?null:d.stateNode.containerInfo}if(!d)break;b=c.tag;5!==b&&6!==b||a.ancestors.push(c);c=tc(d)}while(c);for(c=0;c<a.ancestors.length;c++){b=a.ancestors[c];var e=nc(a.nativeEvent);d=a.topLevelType;var f=a.nativeEvent,g=a.eventSystemFlags;0===c&&(g|=64);for(var h=null,k=0;k<sa.length;k++){var l=sa[k];l&&(l=l.extractEvents(d,b,f,e,g))&&(h=\nic(h,l))}mc(h)}}function uc(a,b,c){if(!c.has(a)){switch(a){case \"scroll\":vc(b,\"scroll\",!0);break;case \"focus\":case \"blur\":vc(b,\"focus\",!0);vc(b,\"blur\",!0);c.set(\"blur\",null);c.set(\"focus\",null);break;case \"cancel\":case \"close\":oc(a)&&vc(b,a,!0);break;case \"invalid\":case \"submit\":case \"reset\":break;default:-1===ac.indexOf(a)&&F(a,b)}c.set(a,null)}}\nvar wc,xc,yc,zc=!1,Ac=[],Bc=null,Cc=null,Dc=null,Ec=new Map,Fc=new Map,Gc=[],Hc=\"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput close cancel copy cut paste click change contextmenu reset submit\".split(\" \"),Ic=\"focus blur dragenter dragleave mouseover mouseout pointerover pointerout gotpointercapture lostpointercapture\".split(\" \");\nfunction Jc(a,b){var c=cc(b);Hc.forEach(function(a){uc(a,b,c)});Ic.forEach(function(a){uc(a,b,c)})}function Kc(a,b,c,d,e){return{blockedOn:a,topLevelType:b,eventSystemFlags:c|32,nativeEvent:e,container:d}}\nfunction Lc(a,b){switch(a){case \"focus\":case \"blur\":Bc=null;break;case \"dragenter\":case \"dragleave\":Cc=null;break;case \"mouseover\":case \"mouseout\":Dc=null;break;case \"pointerover\":case \"pointerout\":Ec.delete(b.pointerId);break;case \"gotpointercapture\":case \"lostpointercapture\":Fc.delete(b.pointerId)}}function Mc(a,b,c,d,e,f){if(null===a||a.nativeEvent!==f)return a=Kc(b,c,d,e,f),null!==b&&(b=Nc(b),null!==b&&xc(b)),a;a.eventSystemFlags|=d;return a}\nfunction Oc(a,b,c,d,e){switch(b){case \"focus\":return Bc=Mc(Bc,a,b,c,d,e),!0;case \"dragenter\":return Cc=Mc(Cc,a,b,c,d,e),!0;case \"mouseover\":return Dc=Mc(Dc,a,b,c,d,e),!0;case \"pointerover\":var f=e.pointerId;Ec.set(f,Mc(Ec.get(f)||null,a,b,c,d,e));return!0;case \"gotpointercapture\":return f=e.pointerId,Fc.set(f,Mc(Fc.get(f)||null,a,b,c,d,e)),!0}return!1}\nfunction Pc(a){var b=tc(a.target);if(null!==b){var c=dc(b);if(null!==c)if(b=c.tag,13===b){if(b=ec(c),null!==b){a.blockedOn=b;r.unstable_runWithPriority(a.priority,function(){yc(c)});return}}else if(3===b&&c.stateNode.hydrate){a.blockedOn=3===c.tag?c.stateNode.containerInfo:null;return}}a.blockedOn=null}function Qc(a){if(null!==a.blockedOn)return!1;var b=Rc(a.topLevelType,a.eventSystemFlags,a.container,a.nativeEvent);if(null!==b){var c=Nc(b);null!==c&&xc(c);a.blockedOn=b;return!1}return!0}\nfunction Sc(a,b,c){Qc(a)&&c.delete(b)}function Tc(){for(zc=!1;0<Ac.length;){var a=Ac[0];if(null!==a.blockedOn){a=Nc(a.blockedOn);null!==a&&wc(a);break}var b=Rc(a.topLevelType,a.eventSystemFlags,a.container,a.nativeEvent);null!==b?a.blockedOn=b:Ac.shift()}null!==Bc&&Qc(Bc)&&(Bc=null);null!==Cc&&Qc(Cc)&&(Cc=null);null!==Dc&&Qc(Dc)&&(Dc=null);Ec.forEach(Sc);Fc.forEach(Sc)}function Uc(a,b){a.blockedOn===b&&(a.blockedOn=null,zc||(zc=!0,r.unstable_scheduleCallback(r.unstable_NormalPriority,Tc)))}\nfunction Vc(a){function b(b){return Uc(b,a)}if(0<Ac.length){Uc(Ac[0],a);for(var c=1;c<Ac.length;c++){var d=Ac[c];d.blockedOn===a&&(d.blockedOn=null)}}null!==Bc&&Uc(Bc,a);null!==Cc&&Uc(Cc,a);null!==Dc&&Uc(Dc,a);Ec.forEach(b);Fc.forEach(b);for(c=0;c<Gc.length;c++)d=Gc[c],d.blockedOn===a&&(d.blockedOn=null);for(;0<Gc.length&&(c=Gc[0],null===c.blockedOn);)Pc(c),null===c.blockedOn&&Gc.shift()}\nvar Wc={},Yc=new Map,Zc=new Map,$c=[\"abort\",\"abort\",Xb,\"animationEnd\",Yb,\"animationIteration\",Zb,\"animationStart\",\"canplay\",\"canPlay\",\"canplaythrough\",\"canPlayThrough\",\"durationchange\",\"durationChange\",\"emptied\",\"emptied\",\"encrypted\",\"encrypted\",\"ended\",\"ended\",\"error\",\"error\",\"gotpointercapture\",\"gotPointerCapture\",\"load\",\"load\",\"loadeddata\",\"loadedData\",\"loadedmetadata\",\"loadedMetadata\",\"loadstart\",\"loadStart\",\"lostpointercapture\",\"lostPointerCapture\",\"playing\",\"playing\",\"progress\",\"progress\",\"seeking\",\n\"seeking\",\"stalled\",\"stalled\",\"suspend\",\"suspend\",\"timeupdate\",\"timeUpdate\",$b,\"transitionEnd\",\"waiting\",\"waiting\"];function ad(a,b){for(var c=0;c<a.length;c+=2){var d=a[c],e=a[c+1],f=\"on\"+(e[0].toUpperCase()+e.slice(1));f={phasedRegistrationNames:{bubbled:f,captured:f+\"Capture\"},dependencies:[d],eventPriority:b};Zc.set(d,b);Yc.set(d,f);Wc[e]=f}}\nad(\"blur blur cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focus focus input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange\".split(\" \"),0);\nad(\"drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel\".split(\" \"),1);ad($c,2);for(var bd=\"change selectionchange textInput compositionstart compositionend compositionupdate\".split(\" \"),cd=0;cd<bd.length;cd++)Zc.set(bd[cd],0);\nvar dd=r.unstable_UserBlockingPriority,ed=r.unstable_runWithPriority,fd=!0;function F(a,b){vc(b,a,!1)}function vc(a,b,c){var d=Zc.get(b);switch(void 0===d?2:d){case 0:d=gd.bind(null,b,1,a);break;case 1:d=hd.bind(null,b,1,a);break;default:d=id.bind(null,b,1,a)}c?a.addEventListener(b,d,!0):a.addEventListener(b,d,!1)}function gd(a,b,c,d){Ja||Ha();var e=id,f=Ja;Ja=!0;try{Ga(e,a,b,c,d)}finally{(Ja=f)||La()}}function hd(a,b,c,d){ed(dd,id.bind(null,a,b,c,d))}\nfunction id(a,b,c,d){if(fd)if(0<Ac.length&&-1<Hc.indexOf(a))a=Kc(null,a,b,c,d),Ac.push(a);else{var e=Rc(a,b,c,d);if(null===e)Lc(a,d);else if(-1<Hc.indexOf(a))a=Kc(e,a,b,c,d),Ac.push(a);else if(!Oc(e,a,b,c,d)){Lc(a,d);a=rc(a,d,null,b);try{Ma(sc,a)}finally{qc(a)}}}}\nfunction Rc(a,b,c,d){c=nc(d);c=tc(c);if(null!==c){var e=dc(c);if(null===e)c=null;else{var f=e.tag;if(13===f){c=ec(e);if(null!==c)return c;c=null}else if(3===f){if(e.stateNode.hydrate)return 3===e.tag?e.stateNode.containerInfo:null;c=null}else e!==c&&(c=null)}}a=rc(a,d,c,b);try{Ma(sc,a)}finally{qc(a)}return null}\nvar jd={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,\nfloodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},kd=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(jd).forEach(function(a){kd.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);jd[b]=jd[a]})});function ld(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||jd.hasOwnProperty(a)&&jd[a]?(\"\"+b).trim():b+\"px\"}\nfunction md(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=ld(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var nd=n({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction od(a,b){if(b){if(nd[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(u(137,a,\"\"));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(u(60));if(!(\"object\"===typeof b.dangerouslySetInnerHTML&&\"__html\"in b.dangerouslySetInnerHTML))throw Error(u(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(u(62,\"\"));}}\nfunction pd(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var qd=Mb.html;function rd(a,b){a=9===a.nodeType||11===a.nodeType?a:a.ownerDocument;var c=cc(a);b=wa[b];for(var d=0;d<b.length;d++)uc(b[d],a,c)}function sd(){}\nfunction td(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}function ud(a){for(;a&&a.firstChild;)a=a.firstChild;return a}function vd(a,b){var c=ud(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=ud(c)}}\nfunction wd(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?wd(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}function xd(){for(var a=window,b=td();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=td(a.document)}return b}\nfunction yd(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}var zd=\"$\",Ad=\"/$\",Bd=\"$?\",Cd=\"$!\",Dd=null,Ed=null;function Fd(a,b){switch(a){case \"button\":case \"input\":case \"select\":case \"textarea\":return!!b.autoFocus}return!1}\nfunction Gd(a,b){return\"textarea\"===a||\"option\"===a||\"noscript\"===a||\"string\"===typeof b.children||\"number\"===typeof b.children||\"object\"===typeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&null!=b.dangerouslySetInnerHTML.__html}var Hd=\"function\"===typeof setTimeout?setTimeout:void 0,Id=\"function\"===typeof clearTimeout?clearTimeout:void 0;function Jd(a){for(;null!=a;a=a.nextSibling){var b=a.nodeType;if(1===b||3===b)break}return a}\nfunction Kd(a){a=a.previousSibling;for(var b=0;a;){if(8===a.nodeType){var c=a.data;if(c===zd||c===Cd||c===Bd){if(0===b)return a;b--}else c===Ad&&b++}a=a.previousSibling}return null}var Ld=Math.random().toString(36).slice(2),Md=\"__reactInternalInstance$\"+Ld,Nd=\"__reactEventHandlers$\"+Ld,Od=\"__reactContainere$\"+Ld;\nfunction tc(a){var b=a[Md];if(b)return b;for(var c=a.parentNode;c;){if(b=c[Od]||c[Md]){c=b.alternate;if(null!==b.child||null!==c&&null!==c.child)for(a=Kd(a);null!==a;){if(c=a[Md])return c;a=Kd(a)}return b}a=c;c=a.parentNode}return null}function Nc(a){a=a[Md]||a[Od];return!a||5!==a.tag&&6!==a.tag&&13!==a.tag&&3!==a.tag?null:a}function Pd(a){if(5===a.tag||6===a.tag)return a.stateNode;throw Error(u(33));}function Qd(a){return a[Nd]||null}\nfunction Rd(a){do a=a.return;while(a&&5!==a.tag);return a?a:null}\nfunction Sd(a,b){var c=a.stateNode;if(!c)return null;var d=la(c);if(!d)return null;c=d[b];a:switch(b){case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":case \"onMouseEnter\":(d=!d.disabled)||(a=a.type,d=!(\"button\"===a||\"input\"===a||\"select\"===a||\"textarea\"===a));a=!d;break a;default:a=!1}if(a)return null;if(c&&\"function\"!==typeof c)throw Error(u(231,\nb,typeof c));return c}function Td(a,b,c){if(b=Sd(a,c.dispatchConfig.phasedRegistrationNames[b]))c._dispatchListeners=ic(c._dispatchListeners,b),c._dispatchInstances=ic(c._dispatchInstances,a)}function Ud(a){if(a&&a.dispatchConfig.phasedRegistrationNames){for(var b=a._targetInst,c=[];b;)c.push(b),b=Rd(b);for(b=c.length;0<b--;)Td(c[b],\"captured\",a);for(b=0;b<c.length;b++)Td(c[b],\"bubbled\",a)}}\nfunction Vd(a,b,c){a&&c&&c.dispatchConfig.registrationName&&(b=Sd(a,c.dispatchConfig.registrationName))&&(c._dispatchListeners=ic(c._dispatchListeners,b),c._dispatchInstances=ic(c._dispatchInstances,a))}function Wd(a){a&&a.dispatchConfig.registrationName&&Vd(a._targetInst,null,a)}function Xd(a){jc(a,Ud)}var Yd=null,Zd=null,$d=null;\nfunction ae(){if($d)return $d;var a,b=Zd,c=b.length,d,e=\"value\"in Yd?Yd.value:Yd.textContent,f=e.length;for(a=0;a<c&&b[a]===e[a];a++);var g=c-a;for(d=1;d<=g&&b[c-d]===e[f-d];d++);return $d=e.slice(a,1<d?1-d:void 0)}function be(){return!0}function ce(){return!1}\nfunction G(a,b,c,d){this.dispatchConfig=a;this._targetInst=b;this.nativeEvent=c;a=this.constructor.Interface;for(var e in a)a.hasOwnProperty(e)&&((b=a[e])?this[e]=b(c):\"target\"===e?this.target=d:this[e]=c[e]);this.isDefaultPrevented=(null!=c.defaultPrevented?c.defaultPrevented:!1===c.returnValue)?be:ce;this.isPropagationStopped=ce;return this}\nn(G.prototype,{preventDefault:function(){this.defaultPrevented=!0;var a=this.nativeEvent;a&&(a.preventDefault?a.preventDefault():\"unknown\"!==typeof a.returnValue&&(a.returnValue=!1),this.isDefaultPrevented=be)},stopPropagation:function(){var a=this.nativeEvent;a&&(a.stopPropagation?a.stopPropagation():\"unknown\"!==typeof a.cancelBubble&&(a.cancelBubble=!0),this.isPropagationStopped=be)},persist:function(){this.isPersistent=be},isPersistent:ce,destructor:function(){var a=this.constructor.Interface,\nb;for(b in a)this[b]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=null;this.isPropagationStopped=this.isDefaultPrevented=ce;this._dispatchInstances=this._dispatchListeners=null}});G.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(a){return a.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null};\nG.extend=function(a){function b(){}function c(){return d.apply(this,arguments)}var d=this;b.prototype=d.prototype;var e=new b;n(e,c.prototype);c.prototype=e;c.prototype.constructor=c;c.Interface=n({},d.Interface,a);c.extend=d.extend;de(c);return c};de(G);function ee(a,b,c,d){if(this.eventPool.length){var e=this.eventPool.pop();this.call(e,a,b,c,d);return e}return new this(a,b,c,d)}\nfunction fe(a){if(!(a instanceof this))throw Error(u(279));a.destructor();10>this.eventPool.length&&this.eventPool.push(a)}function de(a){a.eventPool=[];a.getPooled=ee;a.release=fe}var ge=G.extend({data:null}),he=G.extend({data:null}),ie=[9,13,27,32],je=ya&&\"CompositionEvent\"in window,ke=null;ya&&\"documentMode\"in document&&(ke=document.documentMode);\nvar le=ya&&\"TextEvent\"in window&&!ke,me=ya&&(!je||ke&&8<ke&&11>=ke),ne=String.fromCharCode(32),oe={beforeInput:{phasedRegistrationNames:{bubbled:\"onBeforeInput\",captured:\"onBeforeInputCapture\"},dependencies:[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]},compositionEnd:{phasedRegistrationNames:{bubbled:\"onCompositionEnd\",captured:\"onCompositionEndCapture\"},dependencies:\"blur compositionend keydown keypress keyup mousedown\".split(\" \")},compositionStart:{phasedRegistrationNames:{bubbled:\"onCompositionStart\",\ncaptured:\"onCompositionStartCapture\"},dependencies:\"blur compositionstart keydown keypress keyup mousedown\".split(\" \")},compositionUpdate:{phasedRegistrationNames:{bubbled:\"onCompositionUpdate\",captured:\"onCompositionUpdateCapture\"},dependencies:\"blur compositionupdate keydown keypress keyup mousedown\".split(\" \")}},pe=!1;\nfunction qe(a,b){switch(a){case \"keyup\":return-1!==ie.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"blur\":return!0;default:return!1}}function re(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var se=!1;function te(a,b){switch(a){case \"compositionend\":return re(b);case \"keypress\":if(32!==b.which)return null;pe=!0;return ne;case \"textInput\":return a=b.data,a===ne&&pe?null:a;default:return null}}\nfunction ue(a,b){if(se)return\"compositionend\"===a||!je&&qe(a,b)?(a=ae(),$d=Zd=Yd=null,se=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1<b.char.length)return b.char;if(b.which)return String.fromCharCode(b.which)}return null;case \"compositionend\":return me&&\"ko\"!==b.locale?null:b.data;default:return null}}\nvar ve={eventTypes:oe,extractEvents:function(a,b,c,d){var e;if(je)b:{switch(a){case \"compositionstart\":var f=oe.compositionStart;break b;case \"compositionend\":f=oe.compositionEnd;break b;case \"compositionupdate\":f=oe.compositionUpdate;break b}f=void 0}else se?qe(a,c)&&(f=oe.compositionEnd):\"keydown\"===a&&229===c.keyCode&&(f=oe.compositionStart);f?(me&&\"ko\"!==c.locale&&(se||f!==oe.compositionStart?f===oe.compositionEnd&&se&&(e=ae()):(Yd=d,Zd=\"value\"in Yd?Yd.value:Yd.textContent,se=!0)),f=ge.getPooled(f,\nb,c,d),e?f.data=e:(e=re(c),null!==e&&(f.data=e)),Xd(f),e=f):e=null;(a=le?te(a,c):ue(a,c))?(b=he.getPooled(oe.beforeInput,b,c,d),b.data=a,Xd(b)):b=null;return null===e?b:null===b?e:[e,b]}},we={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function xe(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return\"input\"===b?!!we[a.type]:\"textarea\"===b?!0:!1}\nvar ye={change:{phasedRegistrationNames:{bubbled:\"onChange\",captured:\"onChangeCapture\"},dependencies:\"blur change click focus input keydown keyup selectionchange\".split(\" \")}};function ze(a,b,c){a=G.getPooled(ye.change,a,b,c);a.type=\"change\";Da(c);Xd(a);return a}var Ae=null,Be=null;function Ce(a){mc(a)}function De(a){var b=Pd(a);if(yb(b))return a}function Ee(a,b){if(\"change\"===a)return b}var Fe=!1;ya&&(Fe=oc(\"input\")&&(!document.documentMode||9<document.documentMode));\nfunction Ge(){Ae&&(Ae.detachEvent(\"onpropertychange\",He),Be=Ae=null)}function He(a){if(\"value\"===a.propertyName&&De(Be))if(a=ze(Be,a,nc(a)),Ja)mc(a);else{Ja=!0;try{Fa(Ce,a)}finally{Ja=!1,La()}}}function Ie(a,b,c){\"focus\"===a?(Ge(),Ae=b,Be=c,Ae.attachEvent(\"onpropertychange\",He)):\"blur\"===a&&Ge()}function Je(a){if(\"selectionchange\"===a||\"keyup\"===a||\"keydown\"===a)return De(Be)}function Ke(a,b){if(\"click\"===a)return De(b)}function Le(a,b){if(\"input\"===a||\"change\"===a)return De(b)}\nvar Me={eventTypes:ye,_isInputEventSupported:Fe,extractEvents:function(a,b,c,d){var e=b?Pd(b):window,f=e.nodeName&&e.nodeName.toLowerCase();if(\"select\"===f||\"input\"===f&&\"file\"===e.type)var g=Ee;else if(xe(e))if(Fe)g=Le;else{g=Je;var h=Ie}else(f=e.nodeName)&&\"input\"===f.toLowerCase()&&(\"checkbox\"===e.type||\"radio\"===e.type)&&(g=Ke);if(g&&(g=g(a,b)))return ze(g,c,d);h&&h(a,e,b);\"blur\"===a&&(a=e._wrapperState)&&a.controlled&&\"number\"===e.type&&Db(e,\"number\",e.value)}},Ne=G.extend({view:null,detail:null}),\nOe={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function Pe(a){var b=this.nativeEvent;return b.getModifierState?b.getModifierState(a):(a=Oe[a])?!!b[a]:!1}function Qe(){return Pe}\nvar Re=0,Se=0,Te=!1,Ue=!1,Ve=Ne.extend({screenX:null,screenY:null,clientX:null,clientY:null,pageX:null,pageY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:Qe,button:null,buttons:null,relatedTarget:function(a){return a.relatedTarget||(a.fromElement===a.srcElement?a.toElement:a.fromElement)},movementX:function(a){if(\"movementX\"in a)return a.movementX;var b=Re;Re=a.screenX;return Te?\"mousemove\"===a.type?a.screenX-b:0:(Te=!0,0)},movementY:function(a){if(\"movementY\"in a)return a.movementY;\nvar b=Se;Se=a.screenY;return Ue?\"mousemove\"===a.type?a.screenY-b:0:(Ue=!0,0)}}),We=Ve.extend({pointerId:null,width:null,height:null,pressure:null,tangentialPressure:null,tiltX:null,tiltY:null,twist:null,pointerType:null,isPrimary:null}),Xe={mouseEnter:{registrationName:\"onMouseEnter\",dependencies:[\"mouseout\",\"mouseover\"]},mouseLeave:{registrationName:\"onMouseLeave\",dependencies:[\"mouseout\",\"mouseover\"]},pointerEnter:{registrationName:\"onPointerEnter\",dependencies:[\"pointerout\",\"pointerover\"]},pointerLeave:{registrationName:\"onPointerLeave\",\ndependencies:[\"pointerout\",\"pointerover\"]}},Ye={eventTypes:Xe,extractEvents:function(a,b,c,d,e){var f=\"mouseover\"===a||\"pointerover\"===a,g=\"mouseout\"===a||\"pointerout\"===a;if(f&&0===(e&32)&&(c.relatedTarget||c.fromElement)||!g&&!f)return null;f=d.window===d?d:(f=d.ownerDocument)?f.defaultView||f.parentWindow:window;if(g){if(g=b,b=(b=c.relatedTarget||c.toElement)?tc(b):null,null!==b){var h=dc(b);if(b!==h||5!==b.tag&&6!==b.tag)b=null}}else g=null;if(g===b)return null;if(\"mouseout\"===a||\"mouseover\"===\na){var k=Ve;var l=Xe.mouseLeave;var m=Xe.mouseEnter;var p=\"mouse\"}else if(\"pointerout\"===a||\"pointerover\"===a)k=We,l=Xe.pointerLeave,m=Xe.pointerEnter,p=\"pointer\";a=null==g?f:Pd(g);f=null==b?f:Pd(b);l=k.getPooled(l,g,c,d);l.type=p+\"leave\";l.target=a;l.relatedTarget=f;c=k.getPooled(m,b,c,d);c.type=p+\"enter\";c.target=f;c.relatedTarget=a;d=g;p=b;if(d&&p)a:{k=d;m=p;g=0;for(a=k;a;a=Rd(a))g++;a=0;for(b=m;b;b=Rd(b))a++;for(;0<g-a;)k=Rd(k),g--;for(;0<a-g;)m=Rd(m),a--;for(;g--;){if(k===m||k===m.alternate)break a;\nk=Rd(k);m=Rd(m)}k=null}else k=null;m=k;for(k=[];d&&d!==m;){g=d.alternate;if(null!==g&&g===m)break;k.push(d);d=Rd(d)}for(d=[];p&&p!==m;){g=p.alternate;if(null!==g&&g===m)break;d.push(p);p=Rd(p)}for(p=0;p<k.length;p++)Vd(k[p],\"bubbled\",l);for(p=d.length;0<p--;)Vd(d[p],\"captured\",c);return 0===(e&64)?[l]:[l,c]}};function Ze(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var $e=\"function\"===typeof Object.is?Object.is:Ze,af=Object.prototype.hasOwnProperty;\nfunction bf(a,b){if($e(a,b))return!0;if(\"object\"!==typeof a||null===a||\"object\"!==typeof b||null===b)return!1;var c=Object.keys(a),d=Object.keys(b);if(c.length!==d.length)return!1;for(d=0;d<c.length;d++)if(!af.call(b,c[d])||!$e(a[c[d]],b[c[d]]))return!1;return!0}\nvar cf=ya&&\"documentMode\"in document&&11>=document.documentMode,df={select:{phasedRegistrationNames:{bubbled:\"onSelect\",captured:\"onSelectCapture\"},dependencies:\"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange\".split(\" \")}},ef=null,ff=null,gf=null,hf=!1;\nfunction jf(a,b){var c=b.window===b?b.document:9===b.nodeType?b:b.ownerDocument;if(hf||null==ef||ef!==td(c))return null;c=ef;\"selectionStart\"in c&&yd(c)?c={start:c.selectionStart,end:c.selectionEnd}:(c=(c.ownerDocument&&c.ownerDocument.defaultView||window).getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset});return gf&&bf(gf,c)?null:(gf=c,a=G.getPooled(df.select,ff,a,b),a.type=\"select\",a.target=ef,Xd(a),a)}\nvar kf={eventTypes:df,extractEvents:function(a,b,c,d,e,f){e=f||(d.window===d?d.document:9===d.nodeType?d:d.ownerDocument);if(!(f=!e)){a:{e=cc(e);f=wa.onSelect;for(var g=0;g<f.length;g++)if(!e.has(f[g])){e=!1;break a}e=!0}f=!e}if(f)return null;e=b?Pd(b):window;switch(a){case \"focus\":if(xe(e)||\"true\"===e.contentEditable)ef=e,ff=b,gf=null;break;case \"blur\":gf=ff=ef=null;break;case \"mousedown\":hf=!0;break;case \"contextmenu\":case \"mouseup\":case \"dragend\":return hf=!1,jf(c,d);case \"selectionchange\":if(cf)break;\ncase \"keydown\":case \"keyup\":return jf(c,d)}return null}},lf=G.extend({animationName:null,elapsedTime:null,pseudoElement:null}),mf=G.extend({clipboardData:function(a){return\"clipboardData\"in a?a.clipboardData:window.clipboardData}}),nf=Ne.extend({relatedTarget:null});function of(a){var b=a.keyCode;\"charCode\"in a?(a=a.charCode,0===a&&13===b&&(a=13)):a=b;10===a&&(a=13);return 32<=a||13===a?a:0}\nvar pf={Esc:\"Escape\",Spacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},qf={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",\n116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"},rf=Ne.extend({key:function(a){if(a.key){var b=pf[a.key]||a.key;if(\"Unidentified\"!==b)return b}return\"keypress\"===a.type?(a=of(a),13===a?\"Enter\":String.fromCharCode(a)):\"keydown\"===a.type||\"keyup\"===a.type?qf[a.keyCode]||\"Unidentified\":\"\"},location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:Qe,charCode:function(a){return\"keypress\"===\na.type?of(a):0},keyCode:function(a){return\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0},which:function(a){return\"keypress\"===a.type?of(a):\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0}}),sf=Ve.extend({dataTransfer:null}),tf=Ne.extend({touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:Qe}),uf=G.extend({propertyName:null,elapsedTime:null,pseudoElement:null}),vf=Ve.extend({deltaX:function(a){return\"deltaX\"in a?a.deltaX:\"wheelDeltaX\"in\na?-a.wheelDeltaX:0},deltaY:function(a){return\"deltaY\"in a?a.deltaY:\"wheelDeltaY\"in a?-a.wheelDeltaY:\"wheelDelta\"in a?-a.wheelDelta:0},deltaZ:null,deltaMode:null}),wf={eventTypes:Wc,extractEvents:function(a,b,c,d){var e=Yc.get(a);if(!e)return null;switch(a){case \"keypress\":if(0===of(c))return null;case \"keydown\":case \"keyup\":a=rf;break;case \"blur\":case \"focus\":a=nf;break;case \"click\":if(2===c.button)return null;case \"auxclick\":case \"dblclick\":case \"mousedown\":case \"mousemove\":case \"mouseup\":case \"mouseout\":case \"mouseover\":case \"contextmenu\":a=\nVe;break;case \"drag\":case \"dragend\":case \"dragenter\":case \"dragexit\":case \"dragleave\":case \"dragover\":case \"dragstart\":case \"drop\":a=sf;break;case \"touchcancel\":case \"touchend\":case \"touchmove\":case \"touchstart\":a=tf;break;case Xb:case Yb:case Zb:a=lf;break;case $b:a=uf;break;case \"scroll\":a=Ne;break;case \"wheel\":a=vf;break;case \"copy\":case \"cut\":case \"paste\":a=mf;break;case \"gotpointercapture\":case \"lostpointercapture\":case \"pointercancel\":case \"pointerdown\":case \"pointermove\":case \"pointerout\":case \"pointerover\":case \"pointerup\":a=\nWe;break;default:a=G}b=a.getPooled(e,b,c,d);Xd(b);return b}};if(pa)throw Error(u(101));pa=Array.prototype.slice.call(\"ResponderEventPlugin SimpleEventPlugin EnterLeaveEventPlugin ChangeEventPlugin SelectEventPlugin BeforeInputEventPlugin\".split(\" \"));ra();var xf=Nc;la=Qd;ma=xf;na=Pd;xa({SimpleEventPlugin:wf,EnterLeaveEventPlugin:Ye,ChangeEventPlugin:Me,SelectEventPlugin:kf,BeforeInputEventPlugin:ve});var yf=[],zf=-1;function H(a){0>zf||(a.current=yf[zf],yf[zf]=null,zf--)}\nfunction I(a,b){zf++;yf[zf]=a.current;a.current=b}var Af={},J={current:Af},K={current:!1},Bf=Af;function Cf(a,b){var c=a.type.contextTypes;if(!c)return Af;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function L(a){a=a.childContextTypes;return null!==a&&void 0!==a}\nfunction Df(){H(K);H(J)}function Ef(a,b,c){if(J.current!==Af)throw Error(u(168));I(J,b);I(K,c)}function Ff(a,b,c){var d=a.stateNode;a=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in a))throw Error(u(108,pb(b)||\"Unknown\",e));return n({},c,{},d)}function Gf(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Af;Bf=J.current;I(J,a);I(K,K.current);return!0}\nfunction Hf(a,b,c){var d=a.stateNode;if(!d)throw Error(u(169));c?(a=Ff(a,b,Bf),d.__reactInternalMemoizedMergedChildContext=a,H(K),H(J),I(J,a)):H(K);I(K,c)}\nvar If=r.unstable_runWithPriority,Jf=r.unstable_scheduleCallback,Kf=r.unstable_cancelCallback,Lf=r.unstable_requestPaint,Mf=r.unstable_now,Nf=r.unstable_getCurrentPriorityLevel,Of=r.unstable_ImmediatePriority,Pf=r.unstable_UserBlockingPriority,Qf=r.unstable_NormalPriority,Rf=r.unstable_LowPriority,Sf=r.unstable_IdlePriority,Tf={},Uf=r.unstable_shouldYield,Vf=void 0!==Lf?Lf:function(){},Wf=null,Xf=null,Yf=!1,Zf=Mf(),$f=1E4>Zf?Mf:function(){return Mf()-Zf};\nfunction ag(){switch(Nf()){case Of:return 99;case Pf:return 98;case Qf:return 97;case Rf:return 96;case Sf:return 95;default:throw Error(u(332));}}function bg(a){switch(a){case 99:return Of;case 98:return Pf;case 97:return Qf;case 96:return Rf;case 95:return Sf;default:throw Error(u(332));}}function cg(a,b){a=bg(a);return If(a,b)}function dg(a,b,c){a=bg(a);return Jf(a,b,c)}function eg(a){null===Wf?(Wf=[a],Xf=Jf(Of,fg)):Wf.push(a);return Tf}function gg(){if(null!==Xf){var a=Xf;Xf=null;Kf(a)}fg()}\nfunction fg(){if(!Yf&&null!==Wf){Yf=!0;var a=0;try{var b=Wf;cg(99,function(){for(;a<b.length;a++){var c=b[a];do c=c(!0);while(null!==c)}});Wf=null}catch(c){throw null!==Wf&&(Wf=Wf.slice(a+1)),Jf(Of,gg),c;}finally{Yf=!1}}}function hg(a,b,c){c/=10;return 1073741821-(((1073741821-a+b/10)/c|0)+1)*c}function ig(a,b){if(a&&a.defaultProps){b=n({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c])}return b}var jg={current:null},kg=null,lg=null,mg=null;function ng(){mg=lg=kg=null}\nfunction og(a){var b=jg.current;H(jg);a.type._context._currentValue=b}function pg(a,b){for(;null!==a;){var c=a.alternate;if(a.childExpirationTime<b)a.childExpirationTime=b,null!==c&&c.childExpirationTime<b&&(c.childExpirationTime=b);else if(null!==c&&c.childExpirationTime<b)c.childExpirationTime=b;else break;a=a.return}}function qg(a,b){kg=a;mg=lg=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(a.expirationTime>=b&&(rg=!0),a.firstContext=null)}\nfunction sg(a,b){if(mg!==a&&!1!==b&&0!==b){if(\"number\"!==typeof b||1073741823===b)mg=a,b=1073741823;b={context:a,observedBits:b,next:null};if(null===lg){if(null===kg)throw Error(u(308));lg=b;kg.dependencies={expirationTime:0,firstContext:b,responders:null}}else lg=lg.next=b}return a._currentValue}var tg=!1;function ug(a){a.updateQueue={baseState:a.memoizedState,baseQueue:null,shared:{pending:null},effects:null}}\nfunction vg(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,baseQueue:a.baseQueue,shared:a.shared,effects:a.effects})}function wg(a,b){a={expirationTime:a,suspenseConfig:b,tag:0,payload:null,callback:null,next:null};return a.next=a}function xg(a,b){a=a.updateQueue;if(null!==a){a=a.shared;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}}\nfunction yg(a,b){var c=a.alternate;null!==c&&vg(c,a);a=a.updateQueue;c=a.baseQueue;null===c?(a.baseQueue=b.next=b,b.next=b):(b.next=c.next,c.next=b)}\nfunction zg(a,b,c,d){var e=a.updateQueue;tg=!1;var f=e.baseQueue,g=e.shared.pending;if(null!==g){if(null!==f){var h=f.next;f.next=g.next;g.next=h}f=g;e.shared.pending=null;h=a.alternate;null!==h&&(h=h.updateQueue,null!==h&&(h.baseQueue=g))}if(null!==f){h=f.next;var k=e.baseState,l=0,m=null,p=null,x=null;if(null!==h){var z=h;do{g=z.expirationTime;if(g<d){var ca={expirationTime:z.expirationTime,suspenseConfig:z.suspenseConfig,tag:z.tag,payload:z.payload,callback:z.callback,next:null};null===x?(p=x=\nca,m=k):x=x.next=ca;g>l&&(l=g)}else{null!==x&&(x=x.next={expirationTime:1073741823,suspenseConfig:z.suspenseConfig,tag:z.tag,payload:z.payload,callback:z.callback,next:null});Ag(g,z.suspenseConfig);a:{var D=a,t=z;g=b;ca=c;switch(t.tag){case 1:D=t.payload;if(\"function\"===typeof D){k=D.call(ca,k,g);break a}k=D;break a;case 3:D.effectTag=D.effectTag&-4097|64;case 0:D=t.payload;g=\"function\"===typeof D?D.call(ca,k,g):D;if(null===g||void 0===g)break a;k=n({},k,g);break a;case 2:tg=!0}}null!==z.callback&&\n(a.effectTag|=32,g=e.effects,null===g?e.effects=[z]:g.push(z))}z=z.next;if(null===z||z===h)if(g=e.shared.pending,null===g)break;else z=f.next=g.next,g.next=h,e.baseQueue=f=g,e.shared.pending=null}while(1)}null===x?m=k:x.next=p;e.baseState=m;e.baseQueue=x;Bg(l);a.expirationTime=l;a.memoizedState=k}}\nfunction Cg(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;b<a.length;b++){var d=a[b],e=d.callback;if(null!==e){d.callback=null;d=e;e=c;if(\"function\"!==typeof d)throw Error(u(191,d));d.call(e)}}}var Dg=Wa.ReactCurrentBatchConfig,Eg=(new aa.Component).refs;function Fg(a,b,c,d){b=a.memoizedState;c=c(d,b);c=null===c||void 0===c?b:n({},b,c);a.memoizedState=c;0===a.expirationTime&&(a.updateQueue.baseState=c)}\nvar Jg={isMounted:function(a){return(a=a._reactInternalFiber)?dc(a)===a:!1},enqueueSetState:function(a,b,c){a=a._reactInternalFiber;var d=Gg(),e=Dg.suspense;d=Hg(d,a,e);e=wg(d,e);e.payload=b;void 0!==c&&null!==c&&(e.callback=c);xg(a,e);Ig(a,d)},enqueueReplaceState:function(a,b,c){a=a._reactInternalFiber;var d=Gg(),e=Dg.suspense;d=Hg(d,a,e);e=wg(d,e);e.tag=1;e.payload=b;void 0!==c&&null!==c&&(e.callback=c);xg(a,e);Ig(a,d)},enqueueForceUpdate:function(a,b){a=a._reactInternalFiber;var c=Gg(),d=Dg.suspense;\nc=Hg(c,a,d);d=wg(c,d);d.tag=2;void 0!==b&&null!==b&&(d.callback=b);xg(a,d);Ig(a,c)}};function Kg(a,b,c,d,e,f,g){a=a.stateNode;return\"function\"===typeof a.shouldComponentUpdate?a.shouldComponentUpdate(d,f,g):b.prototype&&b.prototype.isPureReactComponent?!bf(c,d)||!bf(e,f):!0}\nfunction Lg(a,b,c){var d=!1,e=Af;var f=b.contextType;\"object\"===typeof f&&null!==f?f=sg(f):(e=L(b)?Bf:J.current,d=b.contextTypes,f=(d=null!==d&&void 0!==d)?Cf(a,e):Af);b=new b(c,f);a.memoizedState=null!==b.state&&void 0!==b.state?b.state:null;b.updater=Jg;a.stateNode=b;b._reactInternalFiber=a;d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=e,a.__reactInternalMemoizedMaskedChildContext=f);return b}\nfunction Mg(a,b,c,d){a=b.state;\"function\"===typeof b.componentWillReceiveProps&&b.componentWillReceiveProps(c,d);\"function\"===typeof b.UNSAFE_componentWillReceiveProps&&b.UNSAFE_componentWillReceiveProps(c,d);b.state!==a&&Jg.enqueueReplaceState(b,b.state,null)}\nfunction Ng(a,b,c,d){var e=a.stateNode;e.props=c;e.state=a.memoizedState;e.refs=Eg;ug(a);var f=b.contextType;\"object\"===typeof f&&null!==f?e.context=sg(f):(f=L(b)?Bf:J.current,e.context=Cf(a,f));zg(a,c,e,d);e.state=a.memoizedState;f=b.getDerivedStateFromProps;\"function\"===typeof f&&(Fg(a,b,f,c),e.state=a.memoizedState);\"function\"===typeof b.getDerivedStateFromProps||\"function\"===typeof e.getSnapshotBeforeUpdate||\"function\"!==typeof e.UNSAFE_componentWillMount&&\"function\"!==typeof e.componentWillMount||\n(b=e.state,\"function\"===typeof e.componentWillMount&&e.componentWillMount(),\"function\"===typeof e.UNSAFE_componentWillMount&&e.UNSAFE_componentWillMount(),b!==e.state&&Jg.enqueueReplaceState(e,e.state,null),zg(a,c,e,d),e.state=a.memoizedState);\"function\"===typeof e.componentDidMount&&(a.effectTag|=4)}var Og=Array.isArray;\nfunction Pg(a,b,c){a=c.ref;if(null!==a&&\"function\"!==typeof a&&\"object\"!==typeof a){if(c._owner){c=c._owner;if(c){if(1!==c.tag)throw Error(u(309));var d=c.stateNode}if(!d)throw Error(u(147,a));var e=\"\"+a;if(null!==b&&null!==b.ref&&\"function\"===typeof b.ref&&b.ref._stringRef===e)return b.ref;b=function(a){var b=d.refs;b===Eg&&(b=d.refs={});null===a?delete b[e]:b[e]=a};b._stringRef=e;return b}if(\"string\"!==typeof a)throw Error(u(284));if(!c._owner)throw Error(u(290,a));}return a}\nfunction Qg(a,b){if(\"textarea\"!==a.type)throw Error(u(31,\"[object Object]\"===Object.prototype.toString.call(b)?\"object with keys {\"+Object.keys(b).join(\", \")+\"}\":b,\"\"));}\nfunction Rg(a){function b(b,c){if(a){var d=b.lastEffect;null!==d?(d.nextEffect=c,b.lastEffect=c):b.firstEffect=b.lastEffect=c;c.nextEffect=null;c.effectTag=8}}function c(c,d){if(!a)return null;for(;null!==d;)b(c,d),d=d.sibling;return null}function d(a,b){for(a=new Map;null!==b;)null!==b.key?a.set(b.key,b):a.set(b.index,b),b=b.sibling;return a}function e(a,b){a=Sg(a,b);a.index=0;a.sibling=null;return a}function f(b,c,d){b.index=d;if(!a)return c;d=b.alternate;if(null!==d)return d=d.index,d<c?(b.effectTag=\n2,c):d;b.effectTag=2;return c}function g(b){a&&null===b.alternate&&(b.effectTag=2);return b}function h(a,b,c,d){if(null===b||6!==b.tag)return b=Tg(c,a.mode,d),b.return=a,b;b=e(b,c);b.return=a;return b}function k(a,b,c,d){if(null!==b&&b.elementType===c.type)return d=e(b,c.props),d.ref=Pg(a,b,c),d.return=a,d;d=Ug(c.type,c.key,c.props,null,a.mode,d);d.ref=Pg(a,b,c);d.return=a;return d}function l(a,b,c,d){if(null===b||4!==b.tag||b.stateNode.containerInfo!==c.containerInfo||b.stateNode.implementation!==\nc.implementation)return b=Vg(c,a.mode,d),b.return=a,b;b=e(b,c.children||[]);b.return=a;return b}function m(a,b,c,d,f){if(null===b||7!==b.tag)return b=Wg(c,a.mode,d,f),b.return=a,b;b=e(b,c);b.return=a;return b}function p(a,b,c){if(\"string\"===typeof b||\"number\"===typeof b)return b=Tg(\"\"+b,a.mode,c),b.return=a,b;if(\"object\"===typeof b&&null!==b){switch(b.$$typeof){case Za:return c=Ug(b.type,b.key,b.props,null,a.mode,c),c.ref=Pg(a,null,b),c.return=a,c;case $a:return b=Vg(b,a.mode,c),b.return=a,b}if(Og(b)||\nnb(b))return b=Wg(b,a.mode,c,null),b.return=a,b;Qg(a,b)}return null}function x(a,b,c,d){var e=null!==b?b.key:null;if(\"string\"===typeof c||\"number\"===typeof c)return null!==e?null:h(a,b,\"\"+c,d);if(\"object\"===typeof c&&null!==c){switch(c.$$typeof){case Za:return c.key===e?c.type===ab?m(a,b,c.props.children,d,e):k(a,b,c,d):null;case $a:return c.key===e?l(a,b,c,d):null}if(Og(c)||nb(c))return null!==e?null:m(a,b,c,d,null);Qg(a,c)}return null}function z(a,b,c,d,e){if(\"string\"===typeof d||\"number\"===typeof d)return a=\na.get(c)||null,h(b,a,\"\"+d,e);if(\"object\"===typeof d&&null!==d){switch(d.$$typeof){case Za:return a=a.get(null===d.key?c:d.key)||null,d.type===ab?m(b,a,d.props.children,e,d.key):k(b,a,d,e);case $a:return a=a.get(null===d.key?c:d.key)||null,l(b,a,d,e)}if(Og(d)||nb(d))return a=a.get(c)||null,m(b,a,d,e,null);Qg(b,d)}return null}function ca(e,g,h,k){for(var l=null,t=null,m=g,y=g=0,A=null;null!==m&&y<h.length;y++){m.index>y?(A=m,m=null):A=m.sibling;var q=x(e,m,h[y],k);if(null===q){null===m&&(m=A);break}a&&\nm&&null===q.alternate&&b(e,m);g=f(q,g,y);null===t?l=q:t.sibling=q;t=q;m=A}if(y===h.length)return c(e,m),l;if(null===m){for(;y<h.length;y++)m=p(e,h[y],k),null!==m&&(g=f(m,g,y),null===t?l=m:t.sibling=m,t=m);return l}for(m=d(e,m);y<h.length;y++)A=z(m,e,y,h[y],k),null!==A&&(a&&null!==A.alternate&&m.delete(null===A.key?y:A.key),g=f(A,g,y),null===t?l=A:t.sibling=A,t=A);a&&m.forEach(function(a){return b(e,a)});return l}function D(e,g,h,l){var k=nb(h);if(\"function\"!==typeof k)throw Error(u(150));h=k.call(h);\nif(null==h)throw Error(u(151));for(var m=k=null,t=g,y=g=0,A=null,q=h.next();null!==t&&!q.done;y++,q=h.next()){t.index>y?(A=t,t=null):A=t.sibling;var D=x(e,t,q.value,l);if(null===D){null===t&&(t=A);break}a&&t&&null===D.alternate&&b(e,t);g=f(D,g,y);null===m?k=D:m.sibling=D;m=D;t=A}if(q.done)return c(e,t),k;if(null===t){for(;!q.done;y++,q=h.next())q=p(e,q.value,l),null!==q&&(g=f(q,g,y),null===m?k=q:m.sibling=q,m=q);return k}for(t=d(e,t);!q.done;y++,q=h.next())q=z(t,e,y,q.value,l),null!==q&&(a&&null!==\nq.alternate&&t.delete(null===q.key?y:q.key),g=f(q,g,y),null===m?k=q:m.sibling=q,m=q);a&&t.forEach(function(a){return b(e,a)});return k}return function(a,d,f,h){var k=\"object\"===typeof f&&null!==f&&f.type===ab&&null===f.key;k&&(f=f.props.children);var l=\"object\"===typeof f&&null!==f;if(l)switch(f.$$typeof){case Za:a:{l=f.key;for(k=d;null!==k;){if(k.key===l){switch(k.tag){case 7:if(f.type===ab){c(a,k.sibling);d=e(k,f.props.children);d.return=a;a=d;break a}break;default:if(k.elementType===f.type){c(a,\nk.sibling);d=e(k,f.props);d.ref=Pg(a,k,f);d.return=a;a=d;break a}}c(a,k);break}else b(a,k);k=k.sibling}f.type===ab?(d=Wg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Ug(f.type,f.key,f.props,null,a.mode,h),h.ref=Pg(a,d,f),h.return=a,a=h)}return g(a);case $a:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=\nd.sibling}d=Vg(f,a.mode,h);d.return=a;a=d}return g(a)}if(\"string\"===typeof f||\"number\"===typeof f)return f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):(c(a,d),d=Tg(f,a.mode,h),d.return=a,a=d),g(a);if(Og(f))return ca(a,d,f,h);if(nb(f))return D(a,d,f,h);l&&Qg(a,f);if(\"undefined\"===typeof f&&!k)switch(a.tag){case 1:case 0:throw a=a.type,Error(u(152,a.displayName||a.name||\"Component\"));}return c(a,d)}}var Xg=Rg(!0),Yg=Rg(!1),Zg={},$g={current:Zg},ah={current:Zg},bh={current:Zg};\nfunction ch(a){if(a===Zg)throw Error(u(174));return a}function dh(a,b){I(bh,b);I(ah,a);I($g,Zg);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:Ob(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=Ob(b,a)}H($g);I($g,b)}function eh(){H($g);H(ah);H(bh)}function fh(a){ch(bh.current);var b=ch($g.current);var c=Ob(b,a.type);b!==c&&(I(ah,a),I($g,c))}function gh(a){ah.current===a&&(H($g),H(ah))}var M={current:0};\nfunction hh(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||c.data===Bd||c.data===Cd))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.effectTag&64))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}function ih(a,b){return{responder:a,props:b}}\nvar jh=Wa.ReactCurrentDispatcher,kh=Wa.ReactCurrentBatchConfig,lh=0,N=null,O=null,P=null,mh=!1;function Q(){throw Error(u(321));}function nh(a,b){if(null===b)return!1;for(var c=0;c<b.length&&c<a.length;c++)if(!$e(a[c],b[c]))return!1;return!0}\nfunction oh(a,b,c,d,e,f){lh=f;N=b;b.memoizedState=null;b.updateQueue=null;b.expirationTime=0;jh.current=null===a||null===a.memoizedState?ph:qh;a=c(d,e);if(b.expirationTime===lh){f=0;do{b.expirationTime=0;if(!(25>f))throw Error(u(301));f+=1;P=O=null;b.updateQueue=null;jh.current=rh;a=c(d,e)}while(b.expirationTime===lh)}jh.current=sh;b=null!==O&&null!==O.next;lh=0;P=O=N=null;mh=!1;if(b)throw Error(u(300));return a}\nfunction th(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===P?N.memoizedState=P=a:P=P.next=a;return P}function uh(){if(null===O){var a=N.alternate;a=null!==a?a.memoizedState:null}else a=O.next;var b=null===P?N.memoizedState:P.next;if(null!==b)P=b,O=a;else{if(null===a)throw Error(u(310));O=a;a={memoizedState:O.memoizedState,baseState:O.baseState,baseQueue:O.baseQueue,queue:O.queue,next:null};null===P?N.memoizedState=P=a:P=P.next=a}return P}\nfunction vh(a,b){return\"function\"===typeof b?b(a):b}\nfunction wh(a){var b=uh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;var d=O,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){e=e.next;d=d.baseState;var h=g=f=null,k=e;do{var l=k.expirationTime;if(l<lh){var m={expirationTime:k.expirationTime,suspenseConfig:k.suspenseConfig,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null};null===h?(g=h=m,f=d):h=h.next=m;l>N.expirationTime&&\n(N.expirationTime=l,Bg(l))}else null!==h&&(h=h.next={expirationTime:1073741823,suspenseConfig:k.suspenseConfig,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null}),Ag(l,k.suspenseConfig),d=k.eagerReducer===a?k.eagerState:a(d,k.action);k=k.next}while(null!==k&&k!==e);null===h?f=d:h.next=g;$e(d,b.memoizedState)||(rg=!0);b.memoizedState=d;b.baseState=f;b.baseQueue=h;c.lastRenderedState=d}return[b.memoizedState,c.dispatch]}\nfunction xh(a){var b=uh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);$e(f,b.memoizedState)||(rg=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}\nfunction yh(a){var b=th();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a=b.queue={pending:null,dispatch:null,lastRenderedReducer:vh,lastRenderedState:a};a=a.dispatch=zh.bind(null,N,a);return[b.memoizedState,a]}function Ah(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};b=N.updateQueue;null===b?(b={lastEffect:null},N.updateQueue=b,b.lastEffect=a.next=a):(c=b.lastEffect,null===c?b.lastEffect=a.next=a:(d=c.next,c.next=a,a.next=d,b.lastEffect=a));return a}\nfunction Bh(){return uh().memoizedState}function Ch(a,b,c,d){var e=th();N.effectTag|=a;e.memoizedState=Ah(1|b,c,void 0,void 0===d?null:d)}function Dh(a,b,c,d){var e=uh();d=void 0===d?null:d;var f=void 0;if(null!==O){var g=O.memoizedState;f=g.destroy;if(null!==d&&nh(d,g.deps)){Ah(b,c,f,d);return}}N.effectTag|=a;e.memoizedState=Ah(1|b,c,f,d)}function Eh(a,b){return Ch(516,4,a,b)}function Fh(a,b){return Dh(516,4,a,b)}function Gh(a,b){return Dh(4,2,a,b)}\nfunction Hh(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function Ih(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Dh(4,2,Hh.bind(null,b,a),c)}function Jh(){}function Kh(a,b){th().memoizedState=[a,void 0===b?null:b];return a}function Lh(a,b){var c=uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&nh(b,d[1]))return d[0];c.memoizedState=[a,b];return a}\nfunction Mh(a,b){var c=uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&nh(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a}function Nh(a,b,c){var d=ag();cg(98>d?98:d,function(){a(!0)});cg(97<d?97:d,function(){var d=kh.suspense;kh.suspense=void 0===b?null:b;try{a(!1),c()}finally{kh.suspense=d}})}\nfunction zh(a,b,c){var d=Gg(),e=Dg.suspense;d=Hg(d,a,e);e={expirationTime:d,suspenseConfig:e,action:c,eagerReducer:null,eagerState:null,next:null};var f=b.pending;null===f?e.next=e:(e.next=f.next,f.next=e);b.pending=e;f=a.alternate;if(a===N||null!==f&&f===N)mh=!0,e.expirationTime=lh,N.expirationTime=lh;else{if(0===a.expirationTime&&(null===f||0===f.expirationTime)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.eagerReducer=f;e.eagerState=h;if($e(h,g))return}catch(k){}finally{}Ig(a,\nd)}}\nvar sh={readContext:sg,useCallback:Q,useContext:Q,useEffect:Q,useImperativeHandle:Q,useLayoutEffect:Q,useMemo:Q,useReducer:Q,useRef:Q,useState:Q,useDebugValue:Q,useResponder:Q,useDeferredValue:Q,useTransition:Q},ph={readContext:sg,useCallback:Kh,useContext:sg,useEffect:Eh,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Ch(4,2,Hh.bind(null,b,a),c)},useLayoutEffect:function(a,b){return Ch(4,2,a,b)},useMemo:function(a,b){var c=th();b=void 0===b?null:b;a=a();c.memoizedState=[a,\nb];return a},useReducer:function(a,b,c){var d=th();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a=d.queue={pending:null,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};a=a.dispatch=zh.bind(null,N,a);return[d.memoizedState,a]},useRef:function(a){var b=th();a={current:a};return b.memoizedState=a},useState:yh,useDebugValue:Jh,useResponder:ih,useDeferredValue:function(a,b){var c=yh(a),d=c[0],e=c[1];Eh(function(){var c=kh.suspense;kh.suspense=void 0===b?null:b;try{e(a)}finally{kh.suspense=\nc}},[a,b]);return d},useTransition:function(a){var b=yh(!1),c=b[0];b=b[1];return[Kh(Nh.bind(null,b,a),[b,a]),c]}},qh={readContext:sg,useCallback:Lh,useContext:sg,useEffect:Fh,useImperativeHandle:Ih,useLayoutEffect:Gh,useMemo:Mh,useReducer:wh,useRef:Bh,useState:function(){return wh(vh)},useDebugValue:Jh,useResponder:ih,useDeferredValue:function(a,b){var c=wh(vh),d=c[0],e=c[1];Fh(function(){var c=kh.suspense;kh.suspense=void 0===b?null:b;try{e(a)}finally{kh.suspense=c}},[a,b]);return d},useTransition:function(a){var b=\nwh(vh),c=b[0];b=b[1];return[Lh(Nh.bind(null,b,a),[b,a]),c]}},rh={readContext:sg,useCallback:Lh,useContext:sg,useEffect:Fh,useImperativeHandle:Ih,useLayoutEffect:Gh,useMemo:Mh,useReducer:xh,useRef:Bh,useState:function(){return xh(vh)},useDebugValue:Jh,useResponder:ih,useDeferredValue:function(a,b){var c=xh(vh),d=c[0],e=c[1];Fh(function(){var c=kh.suspense;kh.suspense=void 0===b?null:b;try{e(a)}finally{kh.suspense=c}},[a,b]);return d},useTransition:function(a){var b=xh(vh),c=b[0];b=b[1];return[Lh(Nh.bind(null,\nb,a),[b,a]),c]}},Oh=null,Ph=null,Qh=!1;function Rh(a,b){var c=Sh(5,null,null,0);c.elementType=\"DELETED\";c.type=\"DELETED\";c.stateNode=b;c.return=a;c.effectTag=8;null!==a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=a.lastEffect=c}\nfunction Th(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,!0):!1;case 6:return b=\"\"===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,!0):!1;case 13:return!1;default:return!1}}\nfunction Uh(a){if(Qh){var b=Ph;if(b){var c=b;if(!Th(a,b)){b=Jd(c.nextSibling);if(!b||!Th(a,b)){a.effectTag=a.effectTag&-1025|2;Qh=!1;Oh=a;return}Rh(Oh,c)}Oh=a;Ph=Jd(b.firstChild)}else a.effectTag=a.effectTag&-1025|2,Qh=!1,Oh=a}}function Vh(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&13!==a.tag;)a=a.return;Oh=a}\nfunction Wh(a){if(a!==Oh)return!1;if(!Qh)return Vh(a),Qh=!0,!1;var b=a.type;if(5!==a.tag||\"head\"!==b&&\"body\"!==b&&!Gd(b,a.memoizedProps))for(b=Ph;b;)Rh(a,b),b=Jd(b.nextSibling);Vh(a);if(13===a.tag){a=a.memoizedState;a=null!==a?a.dehydrated:null;if(!a)throw Error(u(317));a:{a=a.nextSibling;for(b=0;a;){if(8===a.nodeType){var c=a.data;if(c===Ad){if(0===b){Ph=Jd(a.nextSibling);break a}b--}else c!==zd&&c!==Cd&&c!==Bd||b++}a=a.nextSibling}Ph=null}}else Ph=Oh?Jd(a.stateNode.nextSibling):null;return!0}\nfunction Xh(){Ph=Oh=null;Qh=!1}var Yh=Wa.ReactCurrentOwner,rg=!1;function R(a,b,c,d){b.child=null===a?Yg(b,null,c,d):Xg(b,a.child,c,d)}function Zh(a,b,c,d,e){c=c.render;var f=b.ref;qg(b,e);d=oh(a,b,c,d,f,e);if(null!==a&&!rg)return b.updateQueue=a.updateQueue,b.effectTag&=-517,a.expirationTime<=e&&(a.expirationTime=0),$h(a,b,e);b.effectTag|=1;R(a,b,d,e);return b.child}\nfunction ai(a,b,c,d,e,f){if(null===a){var g=c.type;if(\"function\"===typeof g&&!bi(g)&&void 0===g.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=g,ci(a,b,g,d,e,f);a=Ug(c.type,null,d,null,b.mode,f);a.ref=b.ref;a.return=b;return b.child=a}g=a.child;if(e<f&&(e=g.memoizedProps,c=c.compare,c=null!==c?c:bf,c(e,d)&&a.ref===b.ref))return $h(a,b,f);b.effectTag|=1;a=Sg(g,d);a.ref=b.ref;a.return=b;return b.child=a}\nfunction ci(a,b,c,d,e,f){return null!==a&&bf(a.memoizedProps,d)&&a.ref===b.ref&&(rg=!1,e<f)?(b.expirationTime=a.expirationTime,$h(a,b,f)):di(a,b,c,d,f)}function ei(a,b){var c=b.ref;if(null===a&&null!==c||null!==a&&a.ref!==c)b.effectTag|=128}function di(a,b,c,d,e){var f=L(c)?Bf:J.current;f=Cf(b,f);qg(b,e);c=oh(a,b,c,d,f,e);if(null!==a&&!rg)return b.updateQueue=a.updateQueue,b.effectTag&=-517,a.expirationTime<=e&&(a.expirationTime=0),$h(a,b,e);b.effectTag|=1;R(a,b,c,e);return b.child}\nfunction fi(a,b,c,d,e){if(L(c)){var f=!0;Gf(b)}else f=!1;qg(b,e);if(null===b.stateNode)null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2),Lg(b,c,d),Ng(b,c,d,e),d=!0;else if(null===a){var g=b.stateNode,h=b.memoizedProps;g.props=h;var k=g.context,l=c.contextType;\"object\"===typeof l&&null!==l?l=sg(l):(l=L(c)?Bf:J.current,l=Cf(b,l));var m=c.getDerivedStateFromProps,p=\"function\"===typeof m||\"function\"===typeof g.getSnapshotBeforeUpdate;p||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\n\"function\"!==typeof g.componentWillReceiveProps||(h!==d||k!==l)&&Mg(b,g,d,l);tg=!1;var x=b.memoizedState;g.state=x;zg(b,d,g,e);k=b.memoizedState;h!==d||x!==k||K.current||tg?(\"function\"===typeof m&&(Fg(b,c,m,d),k=b.memoizedState),(h=tg||Kg(b,c,h,d,x,k,l))?(p||\"function\"!==typeof g.UNSAFE_componentWillMount&&\"function\"!==typeof g.componentWillMount||(\"function\"===typeof g.componentWillMount&&g.componentWillMount(),\"function\"===typeof g.UNSAFE_componentWillMount&&g.UNSAFE_componentWillMount()),\"function\"===\ntypeof g.componentDidMount&&(b.effectTag|=4)):(\"function\"===typeof g.componentDidMount&&(b.effectTag|=4),b.memoizedProps=d,b.memoizedState=k),g.props=d,g.state=k,g.context=l,d=h):(\"function\"===typeof g.componentDidMount&&(b.effectTag|=4),d=!1)}else g=b.stateNode,vg(a,b),h=b.memoizedProps,g.props=b.type===b.elementType?h:ig(b.type,h),k=g.context,l=c.contextType,\"object\"===typeof l&&null!==l?l=sg(l):(l=L(c)?Bf:J.current,l=Cf(b,l)),m=c.getDerivedStateFromProps,(p=\"function\"===typeof m||\"function\"===\ntypeof g.getSnapshotBeforeUpdate)||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof g.componentWillReceiveProps||(h!==d||k!==l)&&Mg(b,g,d,l),tg=!1,k=b.memoizedState,g.state=k,zg(b,d,g,e),x=b.memoizedState,h!==d||k!==x||K.current||tg?(\"function\"===typeof m&&(Fg(b,c,m,d),x=b.memoizedState),(m=tg||Kg(b,c,h,d,k,x,l))?(p||\"function\"!==typeof g.UNSAFE_componentWillUpdate&&\"function\"!==typeof g.componentWillUpdate||(\"function\"===typeof g.componentWillUpdate&&g.componentWillUpdate(d,\nx,l),\"function\"===typeof g.UNSAFE_componentWillUpdate&&g.UNSAFE_componentWillUpdate(d,x,l)),\"function\"===typeof g.componentDidUpdate&&(b.effectTag|=4),\"function\"===typeof g.getSnapshotBeforeUpdate&&(b.effectTag|=256)):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=256),b.memoizedProps=d,b.memoizedState=x),g.props=d,g.state=x,g.context=l,d=m):\n(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=256),d=!1);return gi(a,b,c,d,f,e)}\nfunction gi(a,b,c,d,e,f){ei(a,b);var g=0!==(b.effectTag&64);if(!d&&!g)return e&&Hf(b,c,!1),$h(a,b,f);d=b.stateNode;Yh.current=b;var h=g&&\"function\"!==typeof c.getDerivedStateFromError?null:d.render();b.effectTag|=1;null!==a&&g?(b.child=Xg(b,a.child,null,f),b.child=Xg(b,null,h,f)):R(a,b,h,f);b.memoizedState=d.state;e&&Hf(b,c,!0);return b.child}function hi(a){var b=a.stateNode;b.pendingContext?Ef(a,b.pendingContext,b.pendingContext!==b.context):b.context&&Ef(a,b.context,!1);dh(a,b.containerInfo)}\nvar ii={dehydrated:null,retryTime:0};\nfunction ji(a,b,c){var d=b.mode,e=b.pendingProps,f=M.current,g=!1,h;(h=0!==(b.effectTag&64))||(h=0!==(f&2)&&(null===a||null!==a.memoizedState));h?(g=!0,b.effectTag&=-65):null!==a&&null===a.memoizedState||void 0===e.fallback||!0===e.unstable_avoidThisFallback||(f|=1);I(M,f&1);if(null===a){void 0!==e.fallback&&Uh(b);if(g){g=e.fallback;e=Wg(null,d,0,null);e.return=b;if(0===(b.mode&2))for(a=null!==b.memoizedState?b.child.child:b.child,e.child=a;null!==a;)a.return=e,a=a.sibling;c=Wg(g,d,c,null);c.return=\nb;e.sibling=c;b.memoizedState=ii;b.child=e;return c}d=e.children;b.memoizedState=null;return b.child=Yg(b,null,d,c)}if(null!==a.memoizedState){a=a.child;d=a.sibling;if(g){e=e.fallback;c=Sg(a,a.pendingProps);c.return=b;if(0===(b.mode&2)&&(g=null!==b.memoizedState?b.child.child:b.child,g!==a.child))for(c.child=g;null!==g;)g.return=c,g=g.sibling;d=Sg(d,e);d.return=b;c.sibling=d;c.childExpirationTime=0;b.memoizedState=ii;b.child=c;return d}c=Xg(b,a.child,e.children,c);b.memoizedState=null;return b.child=\nc}a=a.child;if(g){g=e.fallback;e=Wg(null,d,0,null);e.return=b;e.child=a;null!==a&&(a.return=e);if(0===(b.mode&2))for(a=null!==b.memoizedState?b.child.child:b.child,e.child=a;null!==a;)a.return=e,a=a.sibling;c=Wg(g,d,c,null);c.return=b;e.sibling=c;c.effectTag|=2;e.childExpirationTime=0;b.memoizedState=ii;b.child=e;return c}b.memoizedState=null;return b.child=Xg(b,a,e.children,c)}\nfunction ki(a,b){a.expirationTime<b&&(a.expirationTime=b);var c=a.alternate;null!==c&&c.expirationTime<b&&(c.expirationTime=b);pg(a.return,b)}function li(a,b,c,d,e,f){var g=a.memoizedState;null===g?a.memoizedState={isBackwards:b,rendering:null,renderingStartTime:0,last:d,tail:c,tailExpiration:0,tailMode:e,lastEffect:f}:(g.isBackwards=b,g.rendering=null,g.renderingStartTime=0,g.last=d,g.tail=c,g.tailExpiration=0,g.tailMode=e,g.lastEffect=f)}\nfunction mi(a,b,c){var d=b.pendingProps,e=d.revealOrder,f=d.tail;R(a,b,d.children,c);d=M.current;if(0!==(d&2))d=d&1|2,b.effectTag|=64;else{if(null!==a&&0!==(a.effectTag&64))a:for(a=b.child;null!==a;){if(13===a.tag)null!==a.memoizedState&&ki(a,c);else if(19===a.tag)ki(a,c);else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===b)break a;for(;null===a.sibling;){if(null===a.return||a.return===b)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}d&=1}I(M,d);if(0===(b.mode&2))b.memoizedState=\nnull;else switch(e){case \"forwards\":c=b.child;for(e=null;null!==c;)a=c.alternate,null!==a&&null===hh(a)&&(e=c),c=c.sibling;c=e;null===c?(e=b.child,b.child=null):(e=c.sibling,c.sibling=null);li(b,!1,e,c,f,b.lastEffect);break;case \"backwards\":c=null;e=b.child;for(b.child=null;null!==e;){a=e.alternate;if(null!==a&&null===hh(a)){b.child=e;break}a=e.sibling;e.sibling=c;c=e;e=a}li(b,!0,c,null,f,b.lastEffect);break;case \"together\":li(b,!1,null,null,void 0,b.lastEffect);break;default:b.memoizedState=null}return b.child}\nfunction $h(a,b,c){null!==a&&(b.dependencies=a.dependencies);var d=b.expirationTime;0!==d&&Bg(d);if(b.childExpirationTime<c)return null;if(null!==a&&b.child!==a.child)throw Error(u(153));if(null!==b.child){a=b.child;c=Sg(a,a.pendingProps);b.child=c;for(c.return=b;null!==a.sibling;)a=a.sibling,c=c.sibling=Sg(a,a.pendingProps),c.return=b;c.sibling=null}return b.child}var ni,oi,pi,qi;\nni=function(a,b){for(var c=b.child;null!==c;){if(5===c.tag||6===c.tag)a.appendChild(c.stateNode);else if(4!==c.tag&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return}c.sibling.return=c.return;c=c.sibling}};oi=function(){};\npi=function(a,b,c,d,e){var f=a.memoizedProps;if(f!==d){var g=b.stateNode;ch($g.current);a=null;switch(c){case \"input\":f=zb(g,f);d=zb(g,d);a=[];break;case \"option\":f=Gb(g,f);d=Gb(g,d);a=[];break;case \"select\":f=n({},f,{value:void 0});d=n({},d,{value:void 0});a=[];break;case \"textarea\":f=Ib(g,f);d=Ib(g,d);a=[];break;default:\"function\"!==typeof f.onClick&&\"function\"===typeof d.onClick&&(g.onclick=sd)}od(c,d);var h,k;c=null;for(h in f)if(!d.hasOwnProperty(h)&&f.hasOwnProperty(h)&&null!=f[h])if(\"style\"===\nh)for(k in g=f[h],g)g.hasOwnProperty(k)&&(c||(c={}),c[k]=\"\");else\"dangerouslySetInnerHTML\"!==h&&\"children\"!==h&&\"suppressContentEditableWarning\"!==h&&\"suppressHydrationWarning\"!==h&&\"autoFocus\"!==h&&(va.hasOwnProperty(h)?a||(a=[]):(a=a||[]).push(h,null));for(h in d){var l=d[h];g=null!=f?f[h]:void 0;if(d.hasOwnProperty(h)&&l!==g&&(null!=l||null!=g))if(\"style\"===h)if(g){for(k in g)!g.hasOwnProperty(k)||l&&l.hasOwnProperty(k)||(c||(c={}),c[k]=\"\");for(k in l)l.hasOwnProperty(k)&&g[k]!==l[k]&&(c||(c={}),\nc[k]=l[k])}else c||(a||(a=[]),a.push(h,c)),c=l;else\"dangerouslySetInnerHTML\"===h?(l=l?l.__html:void 0,g=g?g.__html:void 0,null!=l&&g!==l&&(a=a||[]).push(h,l)):\"children\"===h?g===l||\"string\"!==typeof l&&\"number\"!==typeof l||(a=a||[]).push(h,\"\"+l):\"suppressContentEditableWarning\"!==h&&\"suppressHydrationWarning\"!==h&&(va.hasOwnProperty(h)?(null!=l&&rd(e,h),a||g===l||(a=[])):(a=a||[]).push(h,l))}c&&(a=a||[]).push(\"style\",c);e=a;if(b.updateQueue=e)b.effectTag|=4}};\nqi=function(a,b,c,d){c!==d&&(b.effectTag|=4)};function ri(a,b){switch(a.tailMode){case \"hidden\":b=a.tail;for(var c=null;null!==b;)null!==b.alternate&&(c=b),b=b.sibling;null===c?a.tail=null:c.sibling=null;break;case \"collapsed\":c=a.tail;for(var d=null;null!==c;)null!==c.alternate&&(d=c),c=c.sibling;null===d?b||null===a.tail?a.tail=null:a.tail.sibling=null:d.sibling=null}}\nfunction si(a,b,c){var d=b.pendingProps;switch(b.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:return L(b.type)&&Df(),null;case 3:return eh(),H(K),H(J),c=b.stateNode,c.pendingContext&&(c.context=c.pendingContext,c.pendingContext=null),null!==a&&null!==a.child||!Wh(b)||(b.effectTag|=4),oi(b),null;case 5:gh(b);c=ch(bh.current);var e=b.type;if(null!==a&&null!=b.stateNode)pi(a,b,e,d,c),a.ref!==b.ref&&(b.effectTag|=128);else{if(!d){if(null===b.stateNode)throw Error(u(166));\nreturn null}a=ch($g.current);if(Wh(b)){d=b.stateNode;e=b.type;var f=b.memoizedProps;d[Md]=b;d[Nd]=f;switch(e){case \"iframe\":case \"object\":case \"embed\":F(\"load\",d);break;case \"video\":case \"audio\":for(a=0;a<ac.length;a++)F(ac[a],d);break;case \"source\":F(\"error\",d);break;case \"img\":case \"image\":case \"link\":F(\"error\",d);F(\"load\",d);break;case \"form\":F(\"reset\",d);F(\"submit\",d);break;case \"details\":F(\"toggle\",d);break;case \"input\":Ab(d,f);F(\"invalid\",d);rd(c,\"onChange\");break;case \"select\":d._wrapperState=\n{wasMultiple:!!f.multiple};F(\"invalid\",d);rd(c,\"onChange\");break;case \"textarea\":Jb(d,f),F(\"invalid\",d),rd(c,\"onChange\")}od(e,f);a=null;for(var g in f)if(f.hasOwnProperty(g)){var h=f[g];\"children\"===g?\"string\"===typeof h?d.textContent!==h&&(a=[\"children\",h]):\"number\"===typeof h&&d.textContent!==\"\"+h&&(a=[\"children\",\"\"+h]):va.hasOwnProperty(g)&&null!=h&&rd(c,g)}switch(e){case \"input\":xb(d);Eb(d,f,!0);break;case \"textarea\":xb(d);Lb(d);break;case \"select\":case \"option\":break;default:\"function\"===typeof f.onClick&&\n(d.onclick=sd)}c=a;b.updateQueue=c;null!==c&&(b.effectTag|=4)}else{g=9===c.nodeType?c:c.ownerDocument;a===qd&&(a=Nb(e));a===qd?\"script\"===e?(a=g.createElement(\"div\"),a.innerHTML=\"<script>\\x3c/script>\",a=a.removeChild(a.firstChild)):\"string\"===typeof d.is?a=g.createElement(e,{is:d.is}):(a=g.createElement(e),\"select\"===e&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,e);a[Md]=b;a[Nd]=d;ni(a,b,!1,!1);b.stateNode=a;g=pd(e,d);switch(e){case \"iframe\":case \"object\":case \"embed\":F(\"load\",\na);h=d;break;case \"video\":case \"audio\":for(h=0;h<ac.length;h++)F(ac[h],a);h=d;break;case \"source\":F(\"error\",a);h=d;break;case \"img\":case \"image\":case \"link\":F(\"error\",a);F(\"load\",a);h=d;break;case \"form\":F(\"reset\",a);F(\"submit\",a);h=d;break;case \"details\":F(\"toggle\",a);h=d;break;case \"input\":Ab(a,d);h=zb(a,d);F(\"invalid\",a);rd(c,\"onChange\");break;case \"option\":h=Gb(a,d);break;case \"select\":a._wrapperState={wasMultiple:!!d.multiple};h=n({},d,{value:void 0});F(\"invalid\",a);rd(c,\"onChange\");break;case \"textarea\":Jb(a,\nd);h=Ib(a,d);F(\"invalid\",a);rd(c,\"onChange\");break;default:h=d}od(e,h);var k=h;for(f in k)if(k.hasOwnProperty(f)){var l=k[f];\"style\"===f?md(a,l):\"dangerouslySetInnerHTML\"===f?(l=l?l.__html:void 0,null!=l&&Qb(a,l)):\"children\"===f?\"string\"===typeof l?(\"textarea\"!==e||\"\"!==l)&&Rb(a,l):\"number\"===typeof l&&Rb(a,\"\"+l):\"suppressContentEditableWarning\"!==f&&\"suppressHydrationWarning\"!==f&&\"autoFocus\"!==f&&(va.hasOwnProperty(f)?null!=l&&rd(c,f):null!=l&&Xa(a,f,l,g))}switch(e){case \"input\":xb(a);Eb(a,d,!1);\nbreak;case \"textarea\":xb(a);Lb(a);break;case \"option\":null!=d.value&&a.setAttribute(\"value\",\"\"+rb(d.value));break;case \"select\":a.multiple=!!d.multiple;c=d.value;null!=c?Hb(a,!!d.multiple,c,!1):null!=d.defaultValue&&Hb(a,!!d.multiple,d.defaultValue,!0);break;default:\"function\"===typeof h.onClick&&(a.onclick=sd)}Fd(e,d)&&(b.effectTag|=4)}null!==b.ref&&(b.effectTag|=128)}return null;case 6:if(a&&null!=b.stateNode)qi(a,b,a.memoizedProps,d);else{if(\"string\"!==typeof d&&null===b.stateNode)throw Error(u(166));\nc=ch(bh.current);ch($g.current);Wh(b)?(c=b.stateNode,d=b.memoizedProps,c[Md]=b,c.nodeValue!==d&&(b.effectTag|=4)):(c=(9===c.nodeType?c:c.ownerDocument).createTextNode(d),c[Md]=b,b.stateNode=c)}return null;case 13:H(M);d=b.memoizedState;if(0!==(b.effectTag&64))return b.expirationTime=c,b;c=null!==d;d=!1;null===a?void 0!==b.memoizedProps.fallback&&Wh(b):(e=a.memoizedState,d=null!==e,c||null===e||(e=a.child.sibling,null!==e&&(f=b.firstEffect,null!==f?(b.firstEffect=e,e.nextEffect=f):(b.firstEffect=b.lastEffect=\ne,e.nextEffect=null),e.effectTag=8)));if(c&&!d&&0!==(b.mode&2))if(null===a&&!0!==b.memoizedProps.unstable_avoidThisFallback||0!==(M.current&1))S===ti&&(S=ui);else{if(S===ti||S===ui)S=vi;0!==wi&&null!==T&&(xi(T,U),yi(T,wi))}if(c||d)b.effectTag|=4;return null;case 4:return eh(),oi(b),null;case 10:return og(b),null;case 17:return L(b.type)&&Df(),null;case 19:H(M);d=b.memoizedState;if(null===d)return null;e=0!==(b.effectTag&64);f=d.rendering;if(null===f)if(e)ri(d,!1);else{if(S!==ti||null!==a&&0!==(a.effectTag&\n64))for(f=b.child;null!==f;){a=hh(f);if(null!==a){b.effectTag|=64;ri(d,!1);e=a.updateQueue;null!==e&&(b.updateQueue=e,b.effectTag|=4);null===d.lastEffect&&(b.firstEffect=null);b.lastEffect=d.lastEffect;for(d=b.child;null!==d;)e=d,f=c,e.effectTag&=2,e.nextEffect=null,e.firstEffect=null,e.lastEffect=null,a=e.alternate,null===a?(e.childExpirationTime=0,e.expirationTime=f,e.child=null,e.memoizedProps=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null):(e.childExpirationTime=a.childExpirationTime,\ne.expirationTime=a.expirationTime,e.child=a.child,e.memoizedProps=a.memoizedProps,e.memoizedState=a.memoizedState,e.updateQueue=a.updateQueue,f=a.dependencies,e.dependencies=null===f?null:{expirationTime:f.expirationTime,firstContext:f.firstContext,responders:f.responders}),d=d.sibling;I(M,M.current&1|2);return b.child}f=f.sibling}}else{if(!e)if(a=hh(f),null!==a){if(b.effectTag|=64,e=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.effectTag|=4),ri(d,!0),null===d.tail&&\"hidden\"===d.tailMode&&!f.alternate)return b=\nb.lastEffect=d.lastEffect,null!==b&&(b.nextEffect=null),null}else 2*$f()-d.renderingStartTime>d.tailExpiration&&1<c&&(b.effectTag|=64,e=!0,ri(d,!1),b.expirationTime=b.childExpirationTime=c-1);d.isBackwards?(f.sibling=b.child,b.child=f):(c=d.last,null!==c?c.sibling=f:b.child=f,d.last=f)}return null!==d.tail?(0===d.tailExpiration&&(d.tailExpiration=$f()+500),c=d.tail,d.rendering=c,d.tail=c.sibling,d.lastEffect=b.lastEffect,d.renderingStartTime=$f(),c.sibling=null,b=M.current,I(M,e?b&1|2:b&1),c):null}throw Error(u(156,\nb.tag));}function zi(a){switch(a.tag){case 1:L(a.type)&&Df();var b=a.effectTag;return b&4096?(a.effectTag=b&-4097|64,a):null;case 3:eh();H(K);H(J);b=a.effectTag;if(0!==(b&64))throw Error(u(285));a.effectTag=b&-4097|64;return a;case 5:return gh(a),null;case 13:return H(M),b=a.effectTag,b&4096?(a.effectTag=b&-4097|64,a):null;case 19:return H(M),null;case 4:return eh(),null;case 10:return og(a),null;default:return null}}function Ai(a,b){return{value:a,source:b,stack:qb(b)}}\nvar Bi=\"function\"===typeof WeakSet?WeakSet:Set;function Ci(a,b){var c=b.source,d=b.stack;null===d&&null!==c&&(d=qb(c));null!==c&&pb(c.type);b=b.value;null!==a&&1===a.tag&&pb(a.type);try{console.error(b)}catch(e){setTimeout(function(){throw e;})}}function Di(a,b){try{b.props=a.memoizedProps,b.state=a.memoizedState,b.componentWillUnmount()}catch(c){Ei(a,c)}}function Fi(a){var b=a.ref;if(null!==b)if(\"function\"===typeof b)try{b(null)}catch(c){Ei(a,c)}else b.current=null}\nfunction Gi(a,b){switch(b.tag){case 0:case 11:case 15:case 22:return;case 1:if(b.effectTag&256&&null!==a){var c=a.memoizedProps,d=a.memoizedState;a=b.stateNode;b=a.getSnapshotBeforeUpdate(b.elementType===b.type?c:ig(b.type,c),d);a.__reactInternalSnapshotBeforeUpdate=b}return;case 3:case 5:case 6:case 4:case 17:return}throw Error(u(163));}\nfunction Hi(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.destroy;c.destroy=void 0;void 0!==d&&d()}c=c.next}while(c!==b)}}function Ii(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}\nfunction Ji(a,b,c){switch(c.tag){case 0:case 11:case 15:case 22:Ii(3,c);return;case 1:a=c.stateNode;if(c.effectTag&4)if(null===b)a.componentDidMount();else{var d=c.elementType===c.type?b.memoizedProps:ig(c.type,b.memoizedProps);a.componentDidUpdate(d,b.memoizedState,a.__reactInternalSnapshotBeforeUpdate)}b=c.updateQueue;null!==b&&Cg(c,b,a);return;case 3:b=c.updateQueue;if(null!==b){a=null;if(null!==c.child)switch(c.child.tag){case 5:a=c.child.stateNode;break;case 1:a=c.child.stateNode}Cg(c,b,a)}return;\ncase 5:a=c.stateNode;null===b&&c.effectTag&4&&Fd(c.type,c.memoizedProps)&&a.focus();return;case 6:return;case 4:return;case 12:return;case 13:null===c.memoizedState&&(c=c.alternate,null!==c&&(c=c.memoizedState,null!==c&&(c=c.dehydrated,null!==c&&Vc(c))));return;case 19:case 17:case 20:case 21:return}throw Error(u(163));}\nfunction Ki(a,b,c){\"function\"===typeof Li&&Li(b);switch(b.tag){case 0:case 11:case 14:case 15:case 22:a=b.updateQueue;if(null!==a&&(a=a.lastEffect,null!==a)){var d=a.next;cg(97<c?97:c,function(){var a=d;do{var c=a.destroy;if(void 0!==c){var g=b;try{c()}catch(h){Ei(g,h)}}a=a.next}while(a!==d)})}break;case 1:Fi(b);c=b.stateNode;\"function\"===typeof c.componentWillUnmount&&Di(b,c);break;case 5:Fi(b);break;case 4:Mi(a,b,c)}}\nfunction Ni(a){var b=a.alternate;a.return=null;a.child=null;a.memoizedState=null;a.updateQueue=null;a.dependencies=null;a.alternate=null;a.firstEffect=null;a.lastEffect=null;a.pendingProps=null;a.memoizedProps=null;a.stateNode=null;null!==b&&Ni(b)}function Oi(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Pi(a){a:{for(var b=a.return;null!==b;){if(Oi(b)){var c=b;break a}b=b.return}throw Error(u(160));}b=c.stateNode;switch(c.tag){case 5:var d=!1;break;case 3:b=b.containerInfo;d=!0;break;case 4:b=b.containerInfo;d=!0;break;default:throw Error(u(161));}c.effectTag&16&&(Rb(b,\"\"),c.effectTag&=-17);a:b:for(c=a;;){for(;null===c.sibling;){if(null===c.return||Oi(c.return)){c=null;break a}c=c.return}c.sibling.return=c.return;for(c=c.sibling;5!==c.tag&&6!==c.tag&&18!==c.tag;){if(c.effectTag&2)continue b;\nif(null===c.child||4===c.tag)continue b;else c.child.return=c,c=c.child}if(!(c.effectTag&2)){c=c.stateNode;break a}}d?Qi(a,c,b):Ri(a,c,b)}\nfunction Qi(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=sd));else if(4!==d&&(a=a.child,null!==a))for(Qi(a,b,c),a=a.sibling;null!==a;)Qi(a,b,c),a=a.sibling}\nfunction Ri(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Ri(a,b,c),a=a.sibling;null!==a;)Ri(a,b,c),a=a.sibling}\nfunction Mi(a,b,c){for(var d=b,e=!1,f,g;;){if(!e){e=d.return;a:for(;;){if(null===e)throw Error(u(160));f=e.stateNode;switch(e.tag){case 5:g=!1;break a;case 3:f=f.containerInfo;g=!0;break a;case 4:f=f.containerInfo;g=!0;break a}e=e.return}e=!0}if(5===d.tag||6===d.tag){a:for(var h=a,k=d,l=c,m=k;;)if(Ki(h,m,l),null!==m.child&&4!==m.tag)m.child.return=m,m=m.child;else{if(m===k)break a;for(;null===m.sibling;){if(null===m.return||m.return===k)break a;m=m.return}m.sibling.return=m.return;m=m.sibling}g?(h=\nf,k=d.stateNode,8===h.nodeType?h.parentNode.removeChild(k):h.removeChild(k)):f.removeChild(d.stateNode)}else if(4===d.tag){if(null!==d.child){f=d.stateNode.containerInfo;g=!0;d.child.return=d;d=d.child;continue}}else if(Ki(a,d,c),null!==d.child){d.child.return=d;d=d.child;continue}if(d===b)break;for(;null===d.sibling;){if(null===d.return||d.return===b)return;d=d.return;4===d.tag&&(e=!1)}d.sibling.return=d.return;d=d.sibling}}\nfunction Si(a,b){switch(b.tag){case 0:case 11:case 14:case 15:case 22:Hi(3,b);return;case 1:return;case 5:var c=b.stateNode;if(null!=c){var d=b.memoizedProps,e=null!==a?a.memoizedProps:d;a=b.type;var f=b.updateQueue;b.updateQueue=null;if(null!==f){c[Nd]=d;\"input\"===a&&\"radio\"===d.type&&null!=d.name&&Bb(c,d);pd(a,e);b=pd(a,d);for(e=0;e<f.length;e+=2){var g=f[e],h=f[e+1];\"style\"===g?md(c,h):\"dangerouslySetInnerHTML\"===g?Qb(c,h):\"children\"===g?Rb(c,h):Xa(c,g,h,b)}switch(a){case \"input\":Cb(c,d);break;\ncase \"textarea\":Kb(c,d);break;case \"select\":b=c._wrapperState.wasMultiple,c._wrapperState.wasMultiple=!!d.multiple,a=d.value,null!=a?Hb(c,!!d.multiple,a,!1):b!==!!d.multiple&&(null!=d.defaultValue?Hb(c,!!d.multiple,d.defaultValue,!0):Hb(c,!!d.multiple,d.multiple?[]:\"\",!1))}}}return;case 6:if(null===b.stateNode)throw Error(u(162));b.stateNode.nodeValue=b.memoizedProps;return;case 3:b=b.stateNode;b.hydrate&&(b.hydrate=!1,Vc(b.containerInfo));return;case 12:return;case 13:c=b;null===b.memoizedState?\nd=!1:(d=!0,c=b.child,Ti=$f());if(null!==c)a:for(a=c;;){if(5===a.tag)f=a.stateNode,d?(f=f.style,\"function\"===typeof f.setProperty?f.setProperty(\"display\",\"none\",\"important\"):f.display=\"none\"):(f=a.stateNode,e=a.memoizedProps.style,e=void 0!==e&&null!==e&&e.hasOwnProperty(\"display\")?e.display:null,f.style.display=ld(\"display\",e));else if(6===a.tag)a.stateNode.nodeValue=d?\"\":a.memoizedProps;else if(13===a.tag&&null!==a.memoizedState&&null===a.memoizedState.dehydrated){f=a.child.sibling;f.return=a;a=\nf;continue}else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===c)break;for(;null===a.sibling;){if(null===a.return||a.return===c)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}Ui(b);return;case 19:Ui(b);return;case 17:return}throw Error(u(163));}function Ui(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Bi);b.forEach(function(b){var d=Vi.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nvar Wi=\"function\"===typeof WeakMap?WeakMap:Map;function Xi(a,b,c){c=wg(c,null);c.tag=3;c.payload={element:null};var d=b.value;c.callback=function(){Yi||(Yi=!0,Zi=d);Ci(a,b)};return c}\nfunction $i(a,b,c){c=wg(c,null);c.tag=3;var d=a.type.getDerivedStateFromError;if(\"function\"===typeof d){var e=b.value;c.payload=function(){Ci(a,b);return d(e)}}var f=a.stateNode;null!==f&&\"function\"===typeof f.componentDidCatch&&(c.callback=function(){\"function\"!==typeof d&&(null===aj?aj=new Set([this]):aj.add(this),Ci(a,b));var c=b.stack;this.componentDidCatch(b.value,{componentStack:null!==c?c:\"\"})});return c}\nvar bj=Math.ceil,cj=Wa.ReactCurrentDispatcher,dj=Wa.ReactCurrentOwner,V=0,ej=8,fj=16,gj=32,ti=0,hj=1,ij=2,ui=3,vi=4,jj=5,W=V,T=null,X=null,U=0,S=ti,kj=null,lj=1073741823,mj=1073741823,nj=null,wi=0,oj=!1,Ti=0,pj=500,Y=null,Yi=!1,Zi=null,aj=null,qj=!1,rj=null,sj=90,tj=null,uj=0,vj=null,wj=0;function Gg(){return(W&(fj|gj))!==V?1073741821-($f()/10|0):0!==wj?wj:wj=1073741821-($f()/10|0)}\nfunction Hg(a,b,c){b=b.mode;if(0===(b&2))return 1073741823;var d=ag();if(0===(b&4))return 99===d?1073741823:1073741822;if((W&fj)!==V)return U;if(null!==c)a=hg(a,c.timeoutMs|0||5E3,250);else switch(d){case 99:a=1073741823;break;case 98:a=hg(a,150,100);break;case 97:case 96:a=hg(a,5E3,250);break;case 95:a=2;break;default:throw Error(u(326));}null!==T&&a===U&&--a;return a}\nfunction Ig(a,b){if(50<uj)throw uj=0,vj=null,Error(u(185));a=xj(a,b);if(null!==a){var c=ag();1073741823===b?(W&ej)!==V&&(W&(fj|gj))===V?yj(a):(Z(a),W===V&&gg()):Z(a);(W&4)===V||98!==c&&99!==c||(null===tj?tj=new Map([[a,b]]):(c=tj.get(a),(void 0===c||c>b)&&tj.set(a,b)))}}\nfunction xj(a,b){a.expirationTime<b&&(a.expirationTime=b);var c=a.alternate;null!==c&&c.expirationTime<b&&(c.expirationTime=b);var d=a.return,e=null;if(null===d&&3===a.tag)e=a.stateNode;else for(;null!==d;){c=d.alternate;d.childExpirationTime<b&&(d.childExpirationTime=b);null!==c&&c.childExpirationTime<b&&(c.childExpirationTime=b);if(null===d.return&&3===d.tag){e=d.stateNode;break}d=d.return}null!==e&&(T===e&&(Bg(b),S===vi&&xi(e,U)),yi(e,b));return e}\nfunction zj(a){var b=a.lastExpiredTime;if(0!==b)return b;b=a.firstPendingTime;if(!Aj(a,b))return b;var c=a.lastPingedTime;a=a.nextKnownPendingLevel;a=c>a?c:a;return 2>=a&&b!==a?0:a}\nfunction Z(a){if(0!==a.lastExpiredTime)a.callbackExpirationTime=1073741823,a.callbackPriority=99,a.callbackNode=eg(yj.bind(null,a));else{var b=zj(a),c=a.callbackNode;if(0===b)null!==c&&(a.callbackNode=null,a.callbackExpirationTime=0,a.callbackPriority=90);else{var d=Gg();1073741823===b?d=99:1===b||2===b?d=95:(d=10*(1073741821-b)-10*(1073741821-d),d=0>=d?99:250>=d?98:5250>=d?97:95);if(null!==c){var e=a.callbackPriority;if(a.callbackExpirationTime===b&&e>=d)return;c!==Tf&&Kf(c)}a.callbackExpirationTime=\nb;a.callbackPriority=d;b=1073741823===b?eg(yj.bind(null,a)):dg(d,Bj.bind(null,a),{timeout:10*(1073741821-b)-$f()});a.callbackNode=b}}}\nfunction Bj(a,b){wj=0;if(b)return b=Gg(),Cj(a,b),Z(a),null;var c=zj(a);if(0!==c){b=a.callbackNode;if((W&(fj|gj))!==V)throw Error(u(327));Dj();a===T&&c===U||Ej(a,c);if(null!==X){var d=W;W|=fj;var e=Fj();do try{Gj();break}catch(h){Hj(a,h)}while(1);ng();W=d;cj.current=e;if(S===hj)throw b=kj,Ej(a,c),xi(a,c),Z(a),b;if(null===X)switch(e=a.finishedWork=a.current.alternate,a.finishedExpirationTime=c,d=S,T=null,d){case ti:case hj:throw Error(u(345));case ij:Cj(a,2<c?2:c);break;case ui:xi(a,c);d=a.lastSuspendedTime;\nc===d&&(a.nextKnownPendingLevel=Ij(e));if(1073741823===lj&&(e=Ti+pj-$f(),10<e)){if(oj){var f=a.lastPingedTime;if(0===f||f>=c){a.lastPingedTime=c;Ej(a,c);break}}f=zj(a);if(0!==f&&f!==c)break;if(0!==d&&d!==c){a.lastPingedTime=d;break}a.timeoutHandle=Hd(Jj.bind(null,a),e);break}Jj(a);break;case vi:xi(a,c);d=a.lastSuspendedTime;c===d&&(a.nextKnownPendingLevel=Ij(e));if(oj&&(e=a.lastPingedTime,0===e||e>=c)){a.lastPingedTime=c;Ej(a,c);break}e=zj(a);if(0!==e&&e!==c)break;if(0!==d&&d!==c){a.lastPingedTime=\nd;break}1073741823!==mj?d=10*(1073741821-mj)-$f():1073741823===lj?d=0:(d=10*(1073741821-lj)-5E3,e=$f(),c=10*(1073741821-c)-e,d=e-d,0>d&&(d=0),d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*bj(d/1960))-d,c<d&&(d=c));if(10<d){a.timeoutHandle=Hd(Jj.bind(null,a),d);break}Jj(a);break;case jj:if(1073741823!==lj&&null!==nj){f=lj;var g=nj;d=g.busyMinDurationMs|0;0>=d?d=0:(e=g.busyDelayMs|0,f=$f()-(10*(1073741821-f)-(g.timeoutMs|0||5E3)),d=f<=e?0:e+d-f);if(10<d){xi(a,c);a.timeoutHandle=\nHd(Jj.bind(null,a),d);break}}Jj(a);break;default:throw Error(u(329));}Z(a);if(a.callbackNode===b)return Bj.bind(null,a)}}return null}\nfunction yj(a){var b=a.lastExpiredTime;b=0!==b?b:1073741823;if((W&(fj|gj))!==V)throw Error(u(327));Dj();a===T&&b===U||Ej(a,b);if(null!==X){var c=W;W|=fj;var d=Fj();do try{Kj();break}catch(e){Hj(a,e)}while(1);ng();W=c;cj.current=d;if(S===hj)throw c=kj,Ej(a,b),xi(a,b),Z(a),c;if(null!==X)throw Error(u(261));a.finishedWork=a.current.alternate;a.finishedExpirationTime=b;T=null;Jj(a);Z(a)}return null}function Lj(){if(null!==tj){var a=tj;tj=null;a.forEach(function(a,c){Cj(c,a);Z(c)});gg()}}\nfunction Mj(a,b){var c=W;W|=1;try{return a(b)}finally{W=c,W===V&&gg()}}function Nj(a,b){var c=W;W&=-2;W|=ej;try{return a(b)}finally{W=c,W===V&&gg()}}\nfunction Ej(a,b){a.finishedWork=null;a.finishedExpirationTime=0;var c=a.timeoutHandle;-1!==c&&(a.timeoutHandle=-1,Id(c));if(null!==X)for(c=X.return;null!==c;){var d=c;switch(d.tag){case 1:d=d.type.childContextTypes;null!==d&&void 0!==d&&Df();break;case 3:eh();H(K);H(J);break;case 5:gh(d);break;case 4:eh();break;case 13:H(M);break;case 19:H(M);break;case 10:og(d)}c=c.return}T=a;X=Sg(a.current,null);U=b;S=ti;kj=null;mj=lj=1073741823;nj=null;wi=0;oj=!1}\nfunction Hj(a,b){do{try{ng();jh.current=sh;if(mh)for(var c=N.memoizedState;null!==c;){var d=c.queue;null!==d&&(d.pending=null);c=c.next}lh=0;P=O=N=null;mh=!1;if(null===X||null===X.return)return S=hj,kj=b,X=null;a:{var e=a,f=X.return,g=X,h=b;b=U;g.effectTag|=2048;g.firstEffect=g.lastEffect=null;if(null!==h&&\"object\"===typeof h&&\"function\"===typeof h.then){var k=h;if(0===(g.mode&2)){var l=g.alternate;l?(g.updateQueue=l.updateQueue,g.memoizedState=l.memoizedState,g.expirationTime=l.expirationTime):(g.updateQueue=\nnull,g.memoizedState=null)}var m=0!==(M.current&1),p=f;do{var x;if(x=13===p.tag){var z=p.memoizedState;if(null!==z)x=null!==z.dehydrated?!0:!1;else{var ca=p.memoizedProps;x=void 0===ca.fallback?!1:!0!==ca.unstable_avoidThisFallback?!0:m?!1:!0}}if(x){var D=p.updateQueue;if(null===D){var t=new Set;t.add(k);p.updateQueue=t}else D.add(k);if(0===(p.mode&2)){p.effectTag|=64;g.effectTag&=-2981;if(1===g.tag)if(null===g.alternate)g.tag=17;else{var y=wg(1073741823,null);y.tag=2;xg(g,y)}g.expirationTime=1073741823;\nbreak a}h=void 0;g=b;var A=e.pingCache;null===A?(A=e.pingCache=new Wi,h=new Set,A.set(k,h)):(h=A.get(k),void 0===h&&(h=new Set,A.set(k,h)));if(!h.has(g)){h.add(g);var q=Oj.bind(null,e,k,g);k.then(q,q)}p.effectTag|=4096;p.expirationTime=b;break a}p=p.return}while(null!==p);h=Error((pb(g.type)||\"A React component\")+\" suspended while rendering, but no fallback UI was specified.\\n\\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.\"+qb(g))}S!==\njj&&(S=ij);h=Ai(h,g);p=f;do{switch(p.tag){case 3:k=h;p.effectTag|=4096;p.expirationTime=b;var B=Xi(p,k,b);yg(p,B);break a;case 1:k=h;var w=p.type,ub=p.stateNode;if(0===(p.effectTag&64)&&(\"function\"===typeof w.getDerivedStateFromError||null!==ub&&\"function\"===typeof ub.componentDidCatch&&(null===aj||!aj.has(ub)))){p.effectTag|=4096;p.expirationTime=b;var vb=$i(p,k,b);yg(p,vb);break a}}p=p.return}while(null!==p)}X=Pj(X)}catch(Xc){b=Xc;continue}break}while(1)}\nfunction Fj(){var a=cj.current;cj.current=sh;return null===a?sh:a}function Ag(a,b){a<lj&&2<a&&(lj=a);null!==b&&a<mj&&2<a&&(mj=a,nj=b)}function Bg(a){a>wi&&(wi=a)}function Kj(){for(;null!==X;)X=Qj(X)}function Gj(){for(;null!==X&&!Uf();)X=Qj(X)}function Qj(a){var b=Rj(a.alternate,a,U);a.memoizedProps=a.pendingProps;null===b&&(b=Pj(a));dj.current=null;return b}\nfunction Pj(a){X=a;do{var b=X.alternate;a=X.return;if(0===(X.effectTag&2048)){b=si(b,X,U);if(1===U||1!==X.childExpirationTime){for(var c=0,d=X.child;null!==d;){var e=d.expirationTime,f=d.childExpirationTime;e>c&&(c=e);f>c&&(c=f);d=d.sibling}X.childExpirationTime=c}if(null!==b)return b;null!==a&&0===(a.effectTag&2048)&&(null===a.firstEffect&&(a.firstEffect=X.firstEffect),null!==X.lastEffect&&(null!==a.lastEffect&&(a.lastEffect.nextEffect=X.firstEffect),a.lastEffect=X.lastEffect),1<X.effectTag&&(null!==\na.lastEffect?a.lastEffect.nextEffect=X:a.firstEffect=X,a.lastEffect=X))}else{b=zi(X);if(null!==b)return b.effectTag&=2047,b;null!==a&&(a.firstEffect=a.lastEffect=null,a.effectTag|=2048)}b=X.sibling;if(null!==b)return b;X=a}while(null!==X);S===ti&&(S=jj);return null}function Ij(a){var b=a.expirationTime;a=a.childExpirationTime;return b>a?b:a}function Jj(a){var b=ag();cg(99,Sj.bind(null,a,b));return null}\nfunction Sj(a,b){do Dj();while(null!==rj);if((W&(fj|gj))!==V)throw Error(u(327));var c=a.finishedWork,d=a.finishedExpirationTime;if(null===c)return null;a.finishedWork=null;a.finishedExpirationTime=0;if(c===a.current)throw Error(u(177));a.callbackNode=null;a.callbackExpirationTime=0;a.callbackPriority=90;a.nextKnownPendingLevel=0;var e=Ij(c);a.firstPendingTime=e;d<=a.lastSuspendedTime?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:d<=a.firstSuspendedTime&&(a.firstSuspendedTime=\nd-1);d<=a.lastPingedTime&&(a.lastPingedTime=0);d<=a.lastExpiredTime&&(a.lastExpiredTime=0);a===T&&(X=T=null,U=0);1<c.effectTag?null!==c.lastEffect?(c.lastEffect.nextEffect=c,e=c.firstEffect):e=c:e=c.firstEffect;if(null!==e){var f=W;W|=gj;dj.current=null;Dd=fd;var g=xd();if(yd(g)){if(\"selectionStart\"in g)var h={start:g.selectionStart,end:g.selectionEnd};else a:{h=(h=g.ownerDocument)&&h.defaultView||window;var k=h.getSelection&&h.getSelection();if(k&&0!==k.rangeCount){h=k.anchorNode;var l=k.anchorOffset,\nm=k.focusNode;k=k.focusOffset;try{h.nodeType,m.nodeType}catch(wb){h=null;break a}var p=0,x=-1,z=-1,ca=0,D=0,t=g,y=null;b:for(;;){for(var A;;){t!==h||0!==l&&3!==t.nodeType||(x=p+l);t!==m||0!==k&&3!==t.nodeType||(z=p+k);3===t.nodeType&&(p+=t.nodeValue.length);if(null===(A=t.firstChild))break;y=t;t=A}for(;;){if(t===g)break b;y===h&&++ca===l&&(x=p);y===m&&++D===k&&(z=p);if(null!==(A=t.nextSibling))break;t=y;y=t.parentNode}t=A}h=-1===x||-1===z?null:{start:x,end:z}}else h=null}h=h||{start:0,end:0}}else h=\nnull;Ed={activeElementDetached:null,focusedElem:g,selectionRange:h};fd=!1;Y=e;do try{Tj()}catch(wb){if(null===Y)throw Error(u(330));Ei(Y,wb);Y=Y.nextEffect}while(null!==Y);Y=e;do try{for(g=a,h=b;null!==Y;){var q=Y.effectTag;q&16&&Rb(Y.stateNode,\"\");if(q&128){var B=Y.alternate;if(null!==B){var w=B.ref;null!==w&&(\"function\"===typeof w?w(null):w.current=null)}}switch(q&1038){case 2:Pi(Y);Y.effectTag&=-3;break;case 6:Pi(Y);Y.effectTag&=-3;Si(Y.alternate,Y);break;case 1024:Y.effectTag&=-1025;break;case 1028:Y.effectTag&=\n-1025;Si(Y.alternate,Y);break;case 4:Si(Y.alternate,Y);break;case 8:l=Y,Mi(g,l,h),Ni(l)}Y=Y.nextEffect}}catch(wb){if(null===Y)throw Error(u(330));Ei(Y,wb);Y=Y.nextEffect}while(null!==Y);w=Ed;B=xd();q=w.focusedElem;h=w.selectionRange;if(B!==q&&q&&q.ownerDocument&&wd(q.ownerDocument.documentElement,q)){null!==h&&yd(q)&&(B=h.start,w=h.end,void 0===w&&(w=B),\"selectionStart\"in q?(q.selectionStart=B,q.selectionEnd=Math.min(w,q.value.length)):(w=(B=q.ownerDocument||document)&&B.defaultView||window,w.getSelection&&\n(w=w.getSelection(),l=q.textContent.length,g=Math.min(h.start,l),h=void 0===h.end?g:Math.min(h.end,l),!w.extend&&g>h&&(l=h,h=g,g=l),l=vd(q,g),m=vd(q,h),l&&m&&(1!==w.rangeCount||w.anchorNode!==l.node||w.anchorOffset!==l.offset||w.focusNode!==m.node||w.focusOffset!==m.offset)&&(B=B.createRange(),B.setStart(l.node,l.offset),w.removeAllRanges(),g>h?(w.addRange(B),w.extend(m.node,m.offset)):(B.setEnd(m.node,m.offset),w.addRange(B))))));B=[];for(w=q;w=w.parentNode;)1===w.nodeType&&B.push({element:w,left:w.scrollLeft,\ntop:w.scrollTop});\"function\"===typeof q.focus&&q.focus();for(q=0;q<B.length;q++)w=B[q],w.element.scrollLeft=w.left,w.element.scrollTop=w.top}fd=!!Dd;Ed=Dd=null;a.current=c;Y=e;do try{for(q=a;null!==Y;){var ub=Y.effectTag;ub&36&&Ji(q,Y.alternate,Y);if(ub&128){B=void 0;var vb=Y.ref;if(null!==vb){var Xc=Y.stateNode;switch(Y.tag){case 5:B=Xc;break;default:B=Xc}\"function\"===typeof vb?vb(B):vb.current=B}}Y=Y.nextEffect}}catch(wb){if(null===Y)throw Error(u(330));Ei(Y,wb);Y=Y.nextEffect}while(null!==Y);Y=\nnull;Vf();W=f}else a.current=c;if(qj)qj=!1,rj=a,sj=b;else for(Y=e;null!==Y;)b=Y.nextEffect,Y.nextEffect=null,Y=b;b=a.firstPendingTime;0===b&&(aj=null);1073741823===b?a===vj?uj++:(uj=0,vj=a):uj=0;\"function\"===typeof Uj&&Uj(c.stateNode,d);Z(a);if(Yi)throw Yi=!1,a=Zi,Zi=null,a;if((W&ej)!==V)return null;gg();return null}function Tj(){for(;null!==Y;){var a=Y.effectTag;0!==(a&256)&&Gi(Y.alternate,Y);0===(a&512)||qj||(qj=!0,dg(97,function(){Dj();return null}));Y=Y.nextEffect}}\nfunction Dj(){if(90!==sj){var a=97<sj?97:sj;sj=90;return cg(a,Vj)}}function Vj(){if(null===rj)return!1;var a=rj;rj=null;if((W&(fj|gj))!==V)throw Error(u(331));var b=W;W|=gj;for(a=a.current.firstEffect;null!==a;){try{var c=a;if(0!==(c.effectTag&512))switch(c.tag){case 0:case 11:case 15:case 22:Hi(5,c),Ii(5,c)}}catch(d){if(null===a)throw Error(u(330));Ei(a,d)}c=a.nextEffect;a.nextEffect=null;a=c}W=b;gg();return!0}\nfunction Wj(a,b,c){b=Ai(c,b);b=Xi(a,b,1073741823);xg(a,b);a=xj(a,1073741823);null!==a&&Z(a)}function Ei(a,b){if(3===a.tag)Wj(a,a,b);else for(var c=a.return;null!==c;){if(3===c.tag){Wj(c,a,b);break}else if(1===c.tag){var d=c.stateNode;if(\"function\"===typeof c.type.getDerivedStateFromError||\"function\"===typeof d.componentDidCatch&&(null===aj||!aj.has(d))){a=Ai(b,a);a=$i(c,a,1073741823);xg(c,a);c=xj(c,1073741823);null!==c&&Z(c);break}}c=c.return}}\nfunction Oj(a,b,c){var d=a.pingCache;null!==d&&d.delete(b);T===a&&U===c?S===vi||S===ui&&1073741823===lj&&$f()-Ti<pj?Ej(a,U):oj=!0:Aj(a,c)&&(b=a.lastPingedTime,0!==b&&b<c||(a.lastPingedTime=c,Z(a)))}function Vi(a,b){var c=a.stateNode;null!==c&&c.delete(b);b=0;0===b&&(b=Gg(),b=Hg(b,a,null));a=xj(a,b);null!==a&&Z(a)}var Rj;\nRj=function(a,b,c){var d=b.expirationTime;if(null!==a){var e=b.pendingProps;if(a.memoizedProps!==e||K.current)rg=!0;else{if(d<c){rg=!1;switch(b.tag){case 3:hi(b);Xh();break;case 5:fh(b);if(b.mode&4&&1!==c&&e.hidden)return b.expirationTime=b.childExpirationTime=1,null;break;case 1:L(b.type)&&Gf(b);break;case 4:dh(b,b.stateNode.containerInfo);break;case 10:d=b.memoizedProps.value;e=b.type._context;I(jg,e._currentValue);e._currentValue=d;break;case 13:if(null!==b.memoizedState){d=b.child.childExpirationTime;\nif(0!==d&&d>=c)return ji(a,b,c);I(M,M.current&1);b=$h(a,b,c);return null!==b?b.sibling:null}I(M,M.current&1);break;case 19:d=b.childExpirationTime>=c;if(0!==(a.effectTag&64)){if(d)return mi(a,b,c);b.effectTag|=64}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null);I(M,M.current);if(!d)return null}return $h(a,b,c)}rg=!1}}else rg=!1;b.expirationTime=0;switch(b.tag){case 2:d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2);a=b.pendingProps;e=Cf(b,J.current);qg(b,c);e=oh(null,\nb,d,a,e,c);b.effectTag|=1;if(\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof){b.tag=1;b.memoizedState=null;b.updateQueue=null;if(L(d)){var f=!0;Gf(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;ug(b);var g=d.getDerivedStateFromProps;\"function\"===typeof g&&Fg(b,d,g,a);e.updater=Jg;b.stateNode=e;e._reactInternalFiber=b;Ng(b,d,a,c);b=gi(null,b,d,!0,f,c)}else b.tag=0,R(null,b,e,c),b=b.child;return b;case 16:a:{e=b.elementType;null!==a&&(a.alternate=\nnull,b.alternate=null,b.effectTag|=2);a=b.pendingProps;ob(e);if(1!==e._status)throw e._result;e=e._result;b.type=e;f=b.tag=Xj(e);a=ig(e,a);switch(f){case 0:b=di(null,b,e,a,c);break a;case 1:b=fi(null,b,e,a,c);break a;case 11:b=Zh(null,b,e,a,c);break a;case 14:b=ai(null,b,e,ig(e.type,a),d,c);break a}throw Error(u(306,e,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),di(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),fi(a,b,d,e,c);\ncase 3:hi(b);d=b.updateQueue;if(null===a||null===d)throw Error(u(282));d=b.pendingProps;e=b.memoizedState;e=null!==e?e.element:null;vg(a,b);zg(b,d,null,c);d=b.memoizedState.element;if(d===e)Xh(),b=$h(a,b,c);else{if(e=b.stateNode.hydrate)Ph=Jd(b.stateNode.containerInfo.firstChild),Oh=b,e=Qh=!0;if(e)for(c=Yg(b,null,d,c),b.child=c;c;)c.effectTag=c.effectTag&-3|1024,c=c.sibling;else R(a,b,d,c),Xh();b=b.child}return b;case 5:return fh(b),null===a&&Uh(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:\nnull,g=e.children,Gd(d,e)?g=null:null!==f&&Gd(d,f)&&(b.effectTag|=16),ei(a,b),b.mode&4&&1!==c&&e.hidden?(b.expirationTime=b.childExpirationTime=1,b=null):(R(a,b,g,c),b=b.child),b;case 6:return null===a&&Uh(b),null;case 13:return ji(a,b,c);case 4:return dh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Xg(b,null,d,c):R(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),Zh(a,b,d,e,c);case 7:return R(a,b,b.pendingProps,c),b.child;case 8:return R(a,\nb,b.pendingProps.children,c),b.child;case 12:return R(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;g=b.memoizedProps;f=e.value;var h=b.type._context;I(jg,h._currentValue);h._currentValue=f;if(null!==g)if(h=g.value,f=$e(h,f)?0:(\"function\"===typeof d._calculateChangedBits?d._calculateChangedBits(h,f):1073741823)|0,0===f){if(g.children===e.children&&!K.current){b=$h(a,b,c);break a}}else for(h=b.child,null!==h&&(h.return=b);null!==h;){var k=h.dependencies;if(null!==\nk){g=h.child;for(var l=k.firstContext;null!==l;){if(l.context===d&&0!==(l.observedBits&f)){1===h.tag&&(l=wg(c,null),l.tag=2,xg(h,l));h.expirationTime<c&&(h.expirationTime=c);l=h.alternate;null!==l&&l.expirationTime<c&&(l.expirationTime=c);pg(h.return,c);k.expirationTime<c&&(k.expirationTime=c);break}l=l.next}}else g=10===h.tag?h.type===b.type?null:h.child:h.child;if(null!==g)g.return=h;else for(g=h;null!==g;){if(g===b){g=null;break}h=g.sibling;if(null!==h){h.return=g.return;g=h;break}g=g.return}h=\ng}R(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,f=b.pendingProps,d=f.children,qg(b,c),e=sg(e,f.unstable_observedBits),d=d(e),b.effectTag|=1,R(a,b,d,c),b.child;case 14:return e=b.type,f=ig(e,b.pendingProps),f=ig(e.type,f),ai(a,b,e,f,d,c);case 15:return ci(a,b,b.type,b.pendingProps,d,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2),b.tag=1,L(d)?(a=!0,Gf(b)):a=!1,qg(b,c),Lg(b,d,e),Ng(b,d,e,c),gi(null,\nb,d,!0,a,c);case 19:return mi(a,b,c)}throw Error(u(156,b.tag));};var Uj=null,Li=null;function Yj(a){if(\"undefined\"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var b=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(b.isDisabled||!b.supportsFiber)return!0;try{var c=b.inject(a);Uj=function(a){try{b.onCommitFiberRoot(c,a,void 0,64===(a.current.effectTag&64))}catch(e){}};Li=function(a){try{b.onCommitFiberUnmount(c,a)}catch(e){}}}catch(d){}return!0}\nfunction Zj(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.effectTag=0;this.lastEffect=this.firstEffect=this.nextEffect=null;this.childExpirationTime=this.expirationTime=0;this.alternate=null}function Sh(a,b,c,d){return new Zj(a,b,c,d)}\nfunction bi(a){a=a.prototype;return!(!a||!a.isReactComponent)}function Xj(a){if(\"function\"===typeof a)return bi(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===gb)return 11;if(a===jb)return 14}return 2}\nfunction Sg(a,b){var c=a.alternate;null===c?(c=Sh(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.effectTag=0,c.nextEffect=null,c.firstEffect=null,c.lastEffect=null);c.childExpirationTime=a.childExpirationTime;c.expirationTime=a.expirationTime;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{expirationTime:b.expirationTime,\nfirstContext:b.firstContext,responders:b.responders};c.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction Ug(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)bi(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ab:return Wg(c.children,e,f,b);case fb:g=8;e|=7;break;case bb:g=8;e|=1;break;case cb:return a=Sh(12,c,b,e|8),a.elementType=cb,a.type=cb,a.expirationTime=f,a;case hb:return a=Sh(13,c,b,e),a.type=hb,a.elementType=hb,a.expirationTime=f,a;case ib:return a=Sh(19,c,b,e),a.elementType=ib,a.expirationTime=f,a;default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case db:g=\n10;break a;case eb:g=9;break a;case gb:g=11;break a;case jb:g=14;break a;case kb:g=16;d=null;break a;case lb:g=22;break a}throw Error(u(130,null==a?a:typeof a,\"\"));}b=Sh(g,c,b,e);b.elementType=a;b.type=d;b.expirationTime=f;return b}function Wg(a,b,c,d){a=Sh(7,a,d,b);a.expirationTime=c;return a}function Tg(a,b,c){a=Sh(6,a,null,b);a.expirationTime=c;return a}\nfunction Vg(a,b,c){b=Sh(4,null!==a.children?a.children:[],a.key,b);b.expirationTime=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction ak(a,b,c){this.tag=b;this.current=null;this.containerInfo=a;this.pingCache=this.pendingChildren=null;this.finishedExpirationTime=0;this.finishedWork=null;this.timeoutHandle=-1;this.pendingContext=this.context=null;this.hydrate=c;this.callbackNode=null;this.callbackPriority=90;this.lastExpiredTime=this.lastPingedTime=this.nextKnownPendingLevel=this.lastSuspendedTime=this.firstSuspendedTime=this.firstPendingTime=0}\nfunction Aj(a,b){var c=a.firstSuspendedTime;a=a.lastSuspendedTime;return 0!==c&&c>=b&&a<=b}function xi(a,b){var c=a.firstSuspendedTime,d=a.lastSuspendedTime;c<b&&(a.firstSuspendedTime=b);if(d>b||0===c)a.lastSuspendedTime=b;b<=a.lastPingedTime&&(a.lastPingedTime=0);b<=a.lastExpiredTime&&(a.lastExpiredTime=0)}\nfunction yi(a,b){b>a.firstPendingTime&&(a.firstPendingTime=b);var c=a.firstSuspendedTime;0!==c&&(b>=c?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:b>=a.lastSuspendedTime&&(a.lastSuspendedTime=b+1),b>a.nextKnownPendingLevel&&(a.nextKnownPendingLevel=b))}function Cj(a,b){var c=a.lastExpiredTime;if(0===c||c>b)a.lastExpiredTime=b}\nfunction bk(a,b,c,d){var e=b.current,f=Gg(),g=Dg.suspense;f=Hg(f,e,g);a:if(c){c=c._reactInternalFiber;b:{if(dc(c)!==c||1!==c.tag)throw Error(u(170));var h=c;do{switch(h.tag){case 3:h=h.stateNode.context;break b;case 1:if(L(h.type)){h=h.stateNode.__reactInternalMemoizedMergedChildContext;break b}}h=h.return}while(null!==h);throw Error(u(171));}if(1===c.tag){var k=c.type;if(L(k)){c=Ff(c,k,h);break a}}c=h}else c=Af;null===b.context?b.context=c:b.pendingContext=c;b=wg(f,g);b.payload={element:a};d=void 0===\nd?null:d;null!==d&&(b.callback=d);xg(e,b);Ig(e,f);return f}function ck(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function dk(a,b){a=a.memoizedState;null!==a&&null!==a.dehydrated&&a.retryTime<b&&(a.retryTime=b)}function ek(a,b){dk(a,b);(a=a.alternate)&&dk(a,b)}\nfunction fk(a,b,c){c=null!=c&&!0===c.hydrate;var d=new ak(a,b,c),e=Sh(3,null,null,2===b?7:1===b?3:0);d.current=e;e.stateNode=d;ug(e);a[Od]=d.current;c&&0!==b&&Jc(a,9===a.nodeType?a:a.ownerDocument);this._internalRoot=d}fk.prototype.render=function(a){bk(a,this._internalRoot,null,null)};fk.prototype.unmount=function(){var a=this._internalRoot,b=a.containerInfo;bk(null,a,null,function(){b[Od]=null})};\nfunction gk(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType&&(8!==a.nodeType||\" react-mount-point-unstable \"!==a.nodeValue))}function hk(a,b){b||(b=a?9===a.nodeType?a.documentElement:a.firstChild:null,b=!(!b||1!==b.nodeType||!b.hasAttribute(\"data-reactroot\")));if(!b)for(var c;c=a.lastChild;)a.removeChild(c);return new fk(a,0,b?{hydrate:!0}:void 0)}\nfunction ik(a,b,c,d,e){var f=c._reactRootContainer;if(f){var g=f._internalRoot;if(\"function\"===typeof e){var h=e;e=function(){var a=ck(g);h.call(a)}}bk(b,g,a,e)}else{f=c._reactRootContainer=hk(c,d);g=f._internalRoot;if(\"function\"===typeof e){var k=e;e=function(){var a=ck(g);k.call(a)}}Nj(function(){bk(b,g,a,e)})}return ck(g)}function jk(a,b,c){var d=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:$a,key:null==d?null:\"\"+d,children:a,containerInfo:b,implementation:c}}\nwc=function(a){if(13===a.tag){var b=hg(Gg(),150,100);Ig(a,b);ek(a,b)}};xc=function(a){13===a.tag&&(Ig(a,3),ek(a,3))};yc=function(a){if(13===a.tag){var b=Gg();b=Hg(b,a,null);Ig(a,b);ek(a,b)}};\nza=function(a,b,c){switch(b){case \"input\":Cb(a,c);b=c.name;if(\"radio\"===c.type&&null!=b){for(c=a;c.parentNode;)c=c.parentNode;c=c.querySelectorAll(\"input[name=\"+JSON.stringify(\"\"+b)+'][type=\"radio\"]');for(b=0;b<c.length;b++){var d=c[b];if(d!==a&&d.form===a.form){var e=Qd(d);if(!e)throw Error(u(90));yb(d);Cb(d,e)}}}break;case \"textarea\":Kb(a,c);break;case \"select\":b=c.value,null!=b&&Hb(a,!!c.multiple,b,!1)}};Fa=Mj;\nGa=function(a,b,c,d,e){var f=W;W|=4;try{return cg(98,a.bind(null,b,c,d,e))}finally{W=f,W===V&&gg()}};Ha=function(){(W&(1|fj|gj))===V&&(Lj(),Dj())};Ia=function(a,b){var c=W;W|=2;try{return a(b)}finally{W=c,W===V&&gg()}};function kk(a,b){var c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!gk(b))throw Error(u(200));return jk(a,b,null,c)}var lk={Events:[Nc,Pd,Qd,xa,ta,Xd,function(a){jc(a,Wd)},Da,Ea,id,mc,Dj,{current:!1}]};\n(function(a){var b=a.findFiberByHostInstance;return Yj(n({},a,{overrideHookState:null,overrideProps:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:Wa.ReactCurrentDispatcher,findHostInstanceByFiber:function(a){a=hc(a);return null===a?null:a.stateNode},findFiberByHostInstance:function(a){return b?b(a):null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null}))})({findFiberByHostInstance:tc,bundleType:0,version:\"16.14.0\",\nrendererPackageName:\"react-dom\"});exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=lk;exports.createPortal=kk;exports.findDOMNode=function(a){if(null==a)return null;if(1===a.nodeType)return a;var b=a._reactInternalFiber;if(void 0===b){if(\"function\"===typeof a.render)throw Error(u(188));throw Error(u(268,Object.keys(a)));}a=hc(b);a=null===a?null:a.stateNode;return a};\nexports.flushSync=function(a,b){if((W&(fj|gj))!==V)throw Error(u(187));var c=W;W|=1;try{return cg(99,a.bind(null,b))}finally{W=c,gg()}};exports.hydrate=function(a,b,c){if(!gk(b))throw Error(u(200));return ik(null,a,b,!0,c)};exports.render=function(a,b,c){if(!gk(b))throw Error(u(200));return ik(null,a,b,!1,c)};\nexports.unmountComponentAtNode=function(a){if(!gk(a))throw Error(u(40));return a._reactRootContainer?(Nj(function(){ik(null,null,a,!1,function(){a._reactRootContainer=null;a[Od]=null})}),!0):!1};exports.unstable_batchedUpdates=Mj;exports.unstable_createPortal=function(a,b){return kk(a,b,2<arguments.length&&void 0!==arguments[2]?arguments[2]:null)};\nexports.unstable_renderSubtreeIntoContainer=function(a,b,c,d){if(!gk(c))throw Error(u(200));if(null==a||void 0===a._reactInternalFiber)throw Error(u(38));return ik(a,b,c,!1,d)};exports.version=\"16.14.0\";\n","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom.production.min.js');\n} else {\n  module.exports = require('./cjs/react-dom.development.js');\n}\n","/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */\n\nvar hasElementType = typeof Element !== 'undefined';\nvar hasMap = typeof Map === 'function';\nvar hasSet = typeof Set === 'function';\nvar hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView;\n\n// Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js\n\nfunction equal(a, b) {\n  // START: fast-deep-equal es6/index.js 3.1.1\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    if (a.constructor !== b.constructor) return false;\n\n    var length, i, keys;\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n    // START: Modifications:\n    // 1. Extra `has<Type> &&` helpers in initial condition allow es6 code\n    //    to co-exist with es5.\n    // 2. Replace `for of` with es5 compliant iteration using `for`.\n    //    Basically, take:\n    //\n    //    ```js\n    //    for (i of a.entries())\n    //      if (!b.has(i[0])) return false;\n    //    ```\n    //\n    //    ... and convert to:\n    //\n    //    ```js\n    //    it = a.entries();\n    //    while (!(i = it.next()).done)\n    //      if (!b.has(i.value[0])) return false;\n    //    ```\n    //\n    //    **Note**: `i` access switches to `i.value`.\n    var it;\n    if (hasMap && (a instanceof Map) && (b instanceof Map)) {\n      if (a.size !== b.size) return false;\n      it = a.entries();\n      while (!(i = it.next()).done)\n        if (!b.has(i.value[0])) return false;\n      it = a.entries();\n      while (!(i = it.next()).done)\n        if (!equal(i.value[1], b.get(i.value[0]))) return false;\n      return true;\n    }\n\n    if (hasSet && (a instanceof Set) && (b instanceof Set)) {\n      if (a.size !== b.size) return false;\n      it = a.entries();\n      while (!(i = it.next()).done)\n        if (!b.has(i.value[0])) return false;\n      return true;\n    }\n    // END: Modifications\n\n    if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (a[i] !== b[i]) return false;\n      return true;\n    }\n\n    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) return false;\n\n    for (i = length; i-- !== 0;)\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n    // END: fast-deep-equal\n\n    // START: react-fast-compare\n    // custom handling for DOM elements\n    if (hasElementType && a instanceof Element) return false;\n\n    // custom handling for React/Preact\n    for (i = length; i-- !== 0;) {\n      if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {\n        // React-specific: avoid traversing React elements' _owner\n        // Preact-specific: avoid traversing Preact elements' __v and __o\n        //    __v = $_original / $_vnode\n        //    __o = $_owner\n        // These properties contain circular references and are not needed when\n        // comparing the actual elements (and not their owners)\n        // .$$typeof and ._store on just reasonable markers of elements\n\n        continue;\n      }\n\n      // all other properties should be traversed as usual\n      if (!equal(a[keys[i]], b[keys[i]])) return false;\n    }\n    // END: react-fast-compare\n\n    // START: fast-deep-equal\n    return true;\n  }\n\n  return a !== a && b !== b;\n}\n// end fast-deep-equal\n\nmodule.exports = function isEqual(a, b) {\n  try {\n    return equal(a, b);\n  } catch (error) {\n    if (((error.message || '').match(/stack|recursion/i))) {\n      // warn on circular references, don't crash\n      // browsers give this different errors name and messages:\n      // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n      // firefox: \"InternalError\", too much recursion\"\n      // edge: \"Error\", \"Out of stack space\"\n      console.warn('react-fast-compare cannot handle circular refs');\n      return false;\n    }\n    // some other error. we should definitely know about these\n    throw error;\n  }\n};\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.min.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nfunction componentWillMount() {\n  // Call this.constructor.gDSFP to support sub-classes.\n  var state = this.constructor.getDerivedStateFromProps(this.props, this.state);\n  if (state !== null && state !== undefined) {\n    this.setState(state);\n  }\n}\n\nfunction componentWillReceiveProps(nextProps) {\n  // Call this.constructor.gDSFP to support sub-classes.\n  // Use the setState() updater to ensure state isn't stale in certain edge cases.\n  function updater(prevState) {\n    var state = this.constructor.getDerivedStateFromProps(nextProps, prevState);\n    return state !== null && state !== undefined ? state : null;\n  }\n  // Binding \"this\" is important for shallow renderer support.\n  this.setState(updater.bind(this));\n}\n\nfunction componentWillUpdate(nextProps, nextState) {\n  try {\n    var prevProps = this.props;\n    var prevState = this.state;\n    this.props = nextProps;\n    this.state = nextState;\n    this.__reactInternalSnapshotFlag = true;\n    this.__reactInternalSnapshot = this.getSnapshotBeforeUpdate(\n      prevProps,\n      prevState\n    );\n  } finally {\n    this.props = prevProps;\n    this.state = prevState;\n  }\n}\n\n// React may warn about cWM/cWRP/cWU methods being deprecated.\n// Add a flag to suppress these warnings for this special case.\ncomponentWillMount.__suppressDeprecationWarning = true;\ncomponentWillReceiveProps.__suppressDeprecationWarning = true;\ncomponentWillUpdate.__suppressDeprecationWarning = true;\n\nfunction polyfill(Component) {\n  var prototype = Component.prototype;\n\n  if (!prototype || !prototype.isReactComponent) {\n    throw new Error('Can only polyfill class components');\n  }\n\n  if (\n    typeof Component.getDerivedStateFromProps !== 'function' &&\n    typeof prototype.getSnapshotBeforeUpdate !== 'function'\n  ) {\n    return Component;\n  }\n\n  // If new component APIs are defined, \"unsafe\" lifecycles won't be called.\n  // Error if any of these lifecycles are present,\n  // Because they would work differently between older and newer (16.3+) versions of React.\n  var foundWillMountName = null;\n  var foundWillReceivePropsName = null;\n  var foundWillUpdateName = null;\n  if (typeof prototype.componentWillMount === 'function') {\n    foundWillMountName = 'componentWillMount';\n  } else if (typeof prototype.UNSAFE_componentWillMount === 'function') {\n    foundWillMountName = 'UNSAFE_componentWillMount';\n  }\n  if (typeof prototype.componentWillReceiveProps === 'function') {\n    foundWillReceivePropsName = 'componentWillReceiveProps';\n  } else if (typeof prototype.UNSAFE_componentWillReceiveProps === 'function') {\n    foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';\n  }\n  if (typeof prototype.componentWillUpdate === 'function') {\n    foundWillUpdateName = 'componentWillUpdate';\n  } else if (typeof prototype.UNSAFE_componentWillUpdate === 'function') {\n    foundWillUpdateName = 'UNSAFE_componentWillUpdate';\n  }\n  if (\n    foundWillMountName !== null ||\n    foundWillReceivePropsName !== null ||\n    foundWillUpdateName !== null\n  ) {\n    var componentName = Component.displayName || Component.name;\n    var newApiName =\n      typeof Component.getDerivedStateFromProps === 'function'\n        ? 'getDerivedStateFromProps()'\n        : 'getSnapshotBeforeUpdate()';\n\n    throw Error(\n      'Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n' +\n        componentName +\n        ' uses ' +\n        newApiName +\n        ' but also contains the following legacy lifecycles:' +\n        (foundWillMountName !== null ? '\\n  ' + foundWillMountName : '') +\n        (foundWillReceivePropsName !== null\n          ? '\\n  ' + foundWillReceivePropsName\n          : '') +\n        (foundWillUpdateName !== null ? '\\n  ' + foundWillUpdateName : '') +\n        '\\n\\nThe above lifecycles should be removed. Learn more about this warning here:\\n' +\n        'https://fb.me/react-async-component-lifecycle-hooks'\n    );\n  }\n\n  // React <= 16.2 does not support static getDerivedStateFromProps.\n  // As a workaround, use cWM and cWRP to invoke the new static lifecycle.\n  // Newer versions of React will ignore these lifecycles if gDSFP exists.\n  if (typeof Component.getDerivedStateFromProps === 'function') {\n    prototype.componentWillMount = componentWillMount;\n    prototype.componentWillReceiveProps = componentWillReceiveProps;\n  }\n\n  // React <= 16.2 does not support getSnapshotBeforeUpdate.\n  // As a workaround, use cWU to invoke the new lifecycle.\n  // Newer versions of React will ignore that lifecycle if gSBU exists.\n  if (typeof prototype.getSnapshotBeforeUpdate === 'function') {\n    if (typeof prototype.componentDidUpdate !== 'function') {\n      throw new Error(\n        'Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype'\n      );\n    }\n\n    prototype.componentWillUpdate = componentWillUpdate;\n\n    var componentDidUpdate = prototype.componentDidUpdate;\n\n    prototype.componentDidUpdate = function componentDidUpdatePolyfill(\n      prevProps,\n      prevState,\n      maybeSnapshot\n    ) {\n      // 16.3+ will not execute our will-update method;\n      // It will pass a snapshot value to did-update though.\n      // Older versions will require our polyfilled will-update value.\n      // We need to handle both cases, but can't just check for the presence of \"maybeSnapshot\",\n      // Because for <= 15.x versions this might be a \"prevContext\" object.\n      // We also can't just check \"__reactInternalSnapshot\",\n      // Because get-snapshot might return a falsy value.\n      // So check for the explicit __reactInternalSnapshotFlag flag to determine behavior.\n      var snapshot = this.__reactInternalSnapshotFlag\n        ? this.__reactInternalSnapshot\n        : maybeSnapshot;\n\n      componentDidUpdate.call(this, prevProps, prevState, snapshot);\n    };\n  }\n\n  return Component;\n}\n\nexport { polyfill };\n","'use strict';\n\nexports.__esModule = true;\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _componentOrElement = require('prop-types-extra/lib/componentOrElement');\n\nvar _componentOrElement2 = _interopRequireDefault(_componentOrElement);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _getContainer = require('./utils/getContainer');\n\nvar _getContainer2 = _interopRequireDefault(_getContainer);\n\nvar _ownerDocument = require('./utils/ownerDocument');\n\nvar _ownerDocument2 = _interopRequireDefault(_ownerDocument);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * The `<Portal/>` component renders its children into a new \"subtree\" outside of current component hierarchy.\n * You can think of it as a declarative `appendChild()`, or jQuery's `$.fn.appendTo()`.\n * The children of `<Portal/>` component will be appended to the `container` specified.\n */\nvar Portal = function (_React$Component) {\n  _inherits(Portal, _React$Component);\n\n  function Portal() {\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, Portal);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this._mountOverlayTarget = function () {\n      if (!_this._overlayTarget) {\n        _this._overlayTarget = document.createElement('div');\n        _this._portalContainerNode = (0, _getContainer2.default)(_this.props.container, (0, _ownerDocument2.default)(_this).body);\n        _this._portalContainerNode.appendChild(_this._overlayTarget);\n      }\n    }, _this._unmountOverlayTarget = function () {\n      if (_this._overlayTarget) {\n        _this._portalContainerNode.removeChild(_this._overlayTarget);\n        _this._overlayTarget = null;\n      }\n      _this._portalContainerNode = null;\n    }, _this._renderOverlay = function () {\n      var overlay = !_this.props.children ? null : _react2.default.Children.only(_this.props.children);\n\n      // Save reference for future access.\n      if (overlay !== null) {\n        _this._mountOverlayTarget();\n\n        var initialRender = !_this._overlayInstance;\n\n        _this._overlayInstance = _reactDom2.default.unstable_renderSubtreeIntoContainer(_this, overlay, _this._overlayTarget, function () {\n          if (initialRender && _this.props.onRendered) {\n            _this.props.onRendered();\n          }\n        });\n      } else {\n        // Unrender if the component is null for transitions to null\n        _this._unrenderOverlay();\n        _this._unmountOverlayTarget();\n      }\n    }, _this._unrenderOverlay = function () {\n      if (_this._overlayTarget) {\n        _reactDom2.default.unmountComponentAtNode(_this._overlayTarget);\n        _this._overlayInstance = null;\n      }\n    }, _this.getMountNode = function () {\n      return _this._overlayTarget;\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  Portal.prototype.componentDidMount = function componentDidMount() {\n    this._isMounted = true;\n    this._renderOverlay();\n  };\n\n  Portal.prototype.componentDidUpdate = function componentDidUpdate() {\n    this._renderOverlay();\n  };\n\n  Portal.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n    if (this._overlayTarget && nextProps.container !== this.props.container) {\n      this._portalContainerNode.removeChild(this._overlayTarget);\n      this._portalContainerNode = (0, _getContainer2.default)(nextProps.container, (0, _ownerDocument2.default)(this).body);\n      this._portalContainerNode.appendChild(this._overlayTarget);\n    }\n  };\n\n  Portal.prototype.componentWillUnmount = function componentWillUnmount() {\n    this._isMounted = false;\n    this._unrenderOverlay();\n    this._unmountOverlayTarget();\n  };\n\n  Portal.prototype.render = function render() {\n    return null;\n  };\n\n  return Portal;\n}(_react2.default.Component);\n\nPortal.displayName = 'Portal';\nPortal.propTypes = {\n  /**\n   * A Node, Component instance, or function that returns either. The `container` will have the Portal children\n   * appended to it.\n   */\n  container: _propTypes2.default.oneOfType([_componentOrElement2.default, _propTypes2.default.func]),\n\n  onRendered: _propTypes2.default.func\n};\nexports.default = Portal;\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _activeElement = require('dom-helpers/activeElement');\n\nvar _activeElement2 = _interopRequireDefault(_activeElement);\n\nvar _contains = require('dom-helpers/query/contains');\n\nvar _contains2 = _interopRequireDefault(_contains);\n\nvar _inDOM = require('dom-helpers/util/inDOM');\n\nvar _inDOM2 = _interopRequireDefault(_inDOM);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _componentOrElement = require('prop-types-extra/lib/componentOrElement');\n\nvar _componentOrElement2 = _interopRequireDefault(_componentOrElement);\n\nvar _deprecated = require('prop-types-extra/lib/deprecated');\n\nvar _deprecated2 = _interopRequireDefault(_deprecated);\n\nvar _elementType = require('prop-types-extra/lib/elementType');\n\nvar _elementType2 = _interopRequireDefault(_elementType);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _ModalManager = require('./ModalManager');\n\nvar _ModalManager2 = _interopRequireDefault(_ModalManager);\n\nvar _Portal = require('./Portal');\n\nvar _Portal2 = _interopRequireDefault(_Portal);\n\nvar _RefHolder = require('./RefHolder');\n\nvar _RefHolder2 = _interopRequireDefault(_RefHolder);\n\nvar _addEventListener = require('./utils/addEventListener');\n\nvar _addEventListener2 = _interopRequireDefault(_addEventListener);\n\nvar _addFocusListener = require('./utils/addFocusListener');\n\nvar _addFocusListener2 = _interopRequireDefault(_addFocusListener);\n\nvar _getContainer = require('./utils/getContainer');\n\nvar _getContainer2 = _interopRequireDefault(_getContainer);\n\nvar _ownerDocument = require('./utils/ownerDocument');\n\nvar _ownerDocument2 = _interopRequireDefault(_ownerDocument);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint-disable react/prop-types */\n\nvar modalManager = new _ModalManager2.default();\n\n/**\n * Love them or hate them, `<Modal/>` provides a solid foundation for creating dialogs, lightboxes, or whatever else.\n * The Modal component renders its `children` node in front of a backdrop component.\n *\n * The Modal offers a few helpful features over using just a `<Portal/>` component and some styles:\n *\n * - Manages dialog stacking when one-at-a-time just isn't enough.\n * - Creates a backdrop, for disabling interaction below the modal.\n * - It properly manages focus; moving to the modal content, and keeping it there until the modal is closed.\n * - It disables scrolling of the page content while open.\n * - Adds the appropriate ARIA roles are automatically.\n * - Easily pluggable animations via a `<Transition/>` component.\n *\n * Note that, in the same way the backdrop element prevents users from clicking or interacting\n * with the page content underneath the Modal, Screen readers also need to be signaled to not to\n * interact with page content while the Modal is open. To do this, we use a common technique of applying\n * the `aria-hidden='true'` attribute to the non-Modal elements in the Modal `container`. This means that for\n * a Modal to be truly modal, it should have a `container` that is _outside_ your app's\n * React hierarchy (such as the default: document.body).\n */\n\nvar Modal = function (_React$Component) {\n  _inherits(Modal, _React$Component);\n\n  function Modal() {\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, Modal);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _initialiseProps.call(_this), _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  Modal.prototype.omitProps = function omitProps(props, propTypes) {\n\n    var keys = Object.keys(props);\n    var newProps = {};\n    keys.map(function (prop) {\n      if (!Object.prototype.hasOwnProperty.call(propTypes, prop)) {\n        newProps[prop] = props[prop];\n      }\n    });\n\n    return newProps;\n  };\n\n  Modal.prototype.render = function render() {\n    var _props = this.props,\n        show = _props.show,\n        container = _props.container,\n        children = _props.children,\n        Transition = _props.transition,\n        backdrop = _props.backdrop,\n        className = _props.className,\n        style = _props.style,\n        onExit = _props.onExit,\n        onExiting = _props.onExiting,\n        onEnter = _props.onEnter,\n        onEntering = _props.onEntering,\n        onEntered = _props.onEntered;\n\n\n    var dialog = _react2.default.Children.only(children);\n    var filteredProps = this.omitProps(this.props, Modal.propTypes);\n\n    var mountModal = show || Transition && !this.state.exited;\n    if (!mountModal) {\n      return null;\n    }\n\n    var _dialog$props = dialog.props,\n        role = _dialog$props.role,\n        tabIndex = _dialog$props.tabIndex;\n\n\n    if (role === undefined || tabIndex === undefined) {\n      dialog = (0, _react.cloneElement)(dialog, {\n        role: role === undefined ? 'document' : role,\n        tabIndex: tabIndex == null ? '-1' : tabIndex\n      });\n    }\n\n    if (Transition) {\n      dialog = _react2.default.createElement(\n        Transition,\n        {\n          appear: true,\n          unmountOnExit: true,\n          'in': show,\n          onExit: onExit,\n          onExiting: onExiting,\n          onExited: this.handleHidden,\n          onEnter: onEnter,\n          onEntering: onEntering,\n          onEntered: onEntered\n        },\n        dialog\n      );\n    }\n\n    return _react2.default.createElement(\n      _Portal2.default,\n      {\n        ref: this.setMountNode,\n        container: container,\n        onRendered: this.onPortalRendered\n      },\n      _react2.default.createElement(\n        'div',\n        _extends({\n          ref: this.setModalNodeRef,\n          role: role || 'dialog'\n        }, filteredProps, {\n          style: style,\n          className: className\n        }),\n        backdrop && this.renderBackdrop(),\n        _react2.default.createElement(\n          _RefHolder2.default,\n          { ref: this.setDialogRef },\n          dialog\n        )\n      )\n    );\n  };\n\n  Modal.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n    if (nextProps.show) {\n      this.setState({ exited: false });\n    } else if (!nextProps.transition) {\n      // Otherwise let handleHidden take care of marking exited.\n      this.setState({ exited: true });\n    }\n  };\n\n  Modal.prototype.componentWillUpdate = function componentWillUpdate(nextProps) {\n    if (!this.props.show && nextProps.show) {\n      this.checkForFocus();\n    }\n  };\n\n  Modal.prototype.componentDidMount = function componentDidMount() {\n    this._isMounted = true;\n    if (this.props.show) {\n      this.onShow();\n    }\n  };\n\n  Modal.prototype.componentDidUpdate = function componentDidUpdate(prevProps) {\n    var transition = this.props.transition;\n\n\n    if (prevProps.show && !this.props.show && !transition) {\n      // Otherwise handleHidden will call this.\n      this.onHide();\n    } else if (!prevProps.show && this.props.show) {\n      this.onShow();\n    }\n  };\n\n  Modal.prototype.componentWillUnmount = function componentWillUnmount() {\n    var _props2 = this.props,\n        show = _props2.show,\n        transition = _props2.transition;\n\n\n    this._isMounted = false;\n\n    if (show || transition && !this.state.exited) {\n      this.onHide();\n    }\n  };\n\n  Modal.prototype.autoFocus = function autoFocus() {\n    if (!this.props.autoFocus) {\n      return;\n    }\n\n    var dialogElement = this.getDialogElement();\n    var currentActiveElement = (0, _activeElement2.default)((0, _ownerDocument2.default)(this));\n\n    if (dialogElement && !(0, _contains2.default)(dialogElement, currentActiveElement)) {\n      this.lastFocus = currentActiveElement;\n\n      if (!dialogElement.hasAttribute('tabIndex')) {\n        (0, _warning2.default)(false, 'The modal content node does not accept focus. For the benefit of ' + 'assistive technologies, the tabIndex of the node is being set ' + 'to \"-1\".');\n\n        dialogElement.setAttribute('tabIndex', -1);\n      }\n\n      dialogElement.focus();\n    }\n  };\n\n  Modal.prototype.restoreLastFocus = function restoreLastFocus() {\n    // Support: <=IE11 doesn't support `focus()` on svg elements (RB: #917)\n    if (this.lastFocus && this.lastFocus.focus) {\n      this.lastFocus.focus();\n      this.lastFocus = null;\n    }\n  };\n\n  Modal.prototype.getDialogElement = function getDialogElement() {\n    return _reactDom2.default.findDOMNode(this.dialog);\n  };\n\n  Modal.prototype.isTopModal = function isTopModal() {\n    return this.props.manager.isTopModal(this);\n  };\n\n  return Modal;\n}(_react2.default.Component);\n\nModal.propTypes = _extends({}, _Portal2.default.propTypes, {\n\n  /**\n   * Set the visibility of the Modal\n   */\n  show: _propTypes2.default.bool,\n\n  /**\n   * A Node, Component instance, or function that returns either. The Modal is appended to it's container element.\n   *\n   * For the sake of assistive technologies, the container should usually be the document body, so that the rest of the\n   * page content can be placed behind a virtual backdrop as well as a visual one.\n   */\n  container: _propTypes2.default.oneOfType([_componentOrElement2.default, _propTypes2.default.func]),\n\n  /**\n   * A callback fired when the Modal is opening.\n   */\n  onShow: _propTypes2.default.func,\n\n  /**\n   * A callback fired when either the backdrop is clicked, or the escape key is pressed.\n   *\n   * The `onHide` callback only signals intent from the Modal,\n   * you must actually set the `show` prop to `false` for the Modal to close.\n   */\n  onHide: _propTypes2.default.func,\n\n  /**\n   * Include a backdrop component.\n   */\n  backdrop: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.oneOf(['static'])]),\n\n  /**\n   * A function that returns a backdrop component. Useful for custom\n   * backdrop rendering.\n   *\n   * ```js\n   *  renderBackdrop={props => <MyBackdrop {...props} />}\n   * ```\n   */\n  renderBackdrop: _propTypes2.default.func,\n\n  /**\n   * A callback fired when the escape key, if specified in `keyboard`, is pressed.\n   */\n  onEscapeKeyDown: _propTypes2.default.func,\n\n  /**\n   * Support for this function will be deprecated. Please use `onEscapeKeyDown` instead\n   * A callback fired when the escape key, if specified in `keyboard`, is pressed.\n   * @deprecated\n   */\n  onEscapeKeyUp: (0, _deprecated2.default)(_propTypes2.default.func, 'Please use onEscapeKeyDown instead for consistency'),\n\n  /**\n   * A callback fired when the backdrop, if specified, is clicked.\n   */\n  onBackdropClick: _propTypes2.default.func,\n\n  /**\n   * A style object for the backdrop component.\n   */\n  backdropStyle: _propTypes2.default.object,\n\n  /**\n   * A css class or classes for the backdrop component.\n   */\n  backdropClassName: _propTypes2.default.string,\n\n  /**\n   * A css class or set of classes applied to the modal container when the modal is open,\n   * and removed when it is closed.\n   */\n  containerClassName: _propTypes2.default.string,\n\n  /**\n   * Close the modal when escape key is pressed\n   */\n  keyboard: _propTypes2.default.bool,\n\n  /**\n   * A `react-transition-group@2.0.0` `<Transition/>` component used\n   * to control animations for the dialog component.\n   */\n  transition: _elementType2.default,\n\n  /**\n   * A `react-transition-group@2.0.0` `<Transition/>` component used\n   * to control animations for the backdrop components.\n   */\n  backdropTransition: _elementType2.default,\n\n  /**\n   * When `true` The modal will automatically shift focus to itself when it opens, and\n   * replace it to the last focused element when it closes. This also\n   * works correctly with any Modal children that have the `autoFocus` prop.\n   *\n   * Generally this should never be set to `false` as it makes the Modal less\n   * accessible to assistive technologies, like screen readers.\n   */\n  autoFocus: _propTypes2.default.bool,\n\n  /**\n   * When `true` The modal will prevent focus from leaving the Modal while open.\n   *\n   * Generally this should never be set to `false` as it makes the Modal less\n   * accessible to assistive technologies, like screen readers.\n   */\n  enforceFocus: _propTypes2.default.bool,\n\n  /**\n   * When `true` The modal will restore focus to previously focused element once\n   * modal is hidden\n   */\n  restoreFocus: _propTypes2.default.bool,\n\n  /**\n   * Callback fired before the Modal transitions in\n   */\n  onEnter: _propTypes2.default.func,\n\n  /**\n   * Callback fired as the Modal begins to transition in\n   */\n  onEntering: _propTypes2.default.func,\n\n  /**\n   * Callback fired after the Modal finishes transitioning in\n   */\n  onEntered: _propTypes2.default.func,\n\n  /**\n   * Callback fired right before the Modal transitions out\n   */\n  onExit: _propTypes2.default.func,\n\n  /**\n   * Callback fired as the Modal begins to transition out\n   */\n  onExiting: _propTypes2.default.func,\n\n  /**\n   * Callback fired after the Modal finishes transitioning out\n   */\n  onExited: _propTypes2.default.func,\n\n  /**\n   * A ModalManager instance used to track and manage the state of open\n   * Modals. Useful when customizing how modals interact within a container\n   */\n  manager: _propTypes2.default.object.isRequired\n});\nModal.defaultProps = {\n  show: false,\n  backdrop: true,\n  keyboard: true,\n  autoFocus: true,\n  enforceFocus: true,\n  restoreFocus: true,\n  onHide: function onHide() {},\n  manager: modalManager,\n  renderBackdrop: function renderBackdrop(props) {\n    return _react2.default.createElement('div', props);\n  }\n};\n\nvar _initialiseProps = function _initialiseProps() {\n  var _this2 = this;\n\n  this.state = { exited: !this.props.show };\n\n  this.renderBackdrop = function () {\n    var _props3 = _this2.props,\n        backdropStyle = _props3.backdropStyle,\n        backdropClassName = _props3.backdropClassName,\n        renderBackdrop = _props3.renderBackdrop,\n        Transition = _props3.backdropTransition;\n\n\n    var backdropRef = function backdropRef(ref) {\n      return _this2.backdrop = ref;\n    };\n\n    var backdrop = renderBackdrop({\n      ref: backdropRef,\n      style: backdropStyle,\n      className: backdropClassName,\n      onClick: _this2.handleBackdropClick\n    });\n\n    if (Transition) {\n      backdrop = _react2.default.createElement(\n        Transition,\n        {\n          appear: true,\n          'in': _this2.props.show\n        },\n        backdrop\n      );\n    }\n\n    return backdrop;\n  };\n\n  this.onPortalRendered = function () {\n    _this2.autoFocus();\n\n    if (_this2.props.onShow) {\n      _this2.props.onShow();\n    }\n  };\n\n  this.onShow = function () {\n    var doc = (0, _ownerDocument2.default)(_this2);\n    var container = (0, _getContainer2.default)(_this2.props.container, doc.body);\n\n    _this2.props.manager.add(_this2, container, _this2.props.containerClassName);\n\n    _this2._onDocumentKeydownListener = (0, _addEventListener2.default)(doc, 'keydown', _this2.handleDocumentKeyDown);\n\n    _this2._onDocumentKeyupListener = (0, _addEventListener2.default)(doc, 'keyup', _this2.handleDocumentKeyUp);\n\n    _this2._onFocusinListener = (0, _addFocusListener2.default)(_this2.enforceFocus);\n  };\n\n  this.onHide = function () {\n    _this2.props.manager.remove(_this2);\n\n    _this2._onDocumentKeydownListener.remove();\n\n    _this2._onDocumentKeyupListener.remove();\n\n    _this2._onFocusinListener.remove();\n\n    if (_this2.props.restoreFocus) {\n      _this2.restoreLastFocus();\n    }\n  };\n\n  this.setMountNode = function (ref) {\n    _this2.mountNode = ref ? ref.getMountNode() : ref;\n  };\n\n  this.setModalNodeRef = function (ref) {\n    _this2.modalNode = ref;\n  };\n\n  this.setDialogRef = function (ref) {\n    _this2.dialog = ref;\n  };\n\n  this.handleHidden = function () {\n    _this2.setState({ exited: true });\n    _this2.onHide();\n\n    if (_this2.props.onExited) {\n      var _props4;\n\n      (_props4 = _this2.props).onExited.apply(_props4, arguments);\n    }\n  };\n\n  this.handleBackdropClick = function (e) {\n    if (e.target !== e.currentTarget) {\n      return;\n    }\n\n    if (_this2.props.onBackdropClick) {\n      _this2.props.onBackdropClick(e);\n    }\n\n    if (_this2.props.backdrop === true) {\n      _this2.props.onHide();\n    }\n  };\n\n  this.handleDocumentKeyDown = function (e) {\n    if (_this2.props.keyboard && e.keyCode === 27 && _this2.isTopModal()) {\n      if (_this2.props.onEscapeKeyDown) {\n        _this2.props.onEscapeKeyDown(e);\n      }\n\n      _this2.props.onHide();\n    }\n  };\n\n  this.handleDocumentKeyUp = function (e) {\n    if (_this2.props.keyboard && e.keyCode === 27 && _this2.isTopModal()) {\n      if (_this2.props.onEscapeKeyUp) {\n        _this2.props.onEscapeKeyUp(e);\n      }\n    }\n  };\n\n  this.checkForFocus = function () {\n    if (_inDOM2.default) {\n      _this2.lastFocus = (0, _activeElement2.default)();\n    }\n  };\n\n  this.enforceFocus = function () {\n    if (!_this2.props.enforceFocus || !_this2._isMounted || !_this2.isTopModal()) {\n      return;\n    }\n\n    var dialogElement = _this2.getDialogElement();\n    var currentActiveElement = (0, _activeElement2.default)((0, _ownerDocument2.default)(_this2));\n\n    if (dialogElement && !(0, _contains2.default)(dialogElement, currentActiveElement)) {\n      dialogElement.focus();\n    }\n  };\n};\n\nModal.Manager = _ModalManager2.default;\n\nexports.default = Modal;\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\n\nvar _class = require('dom-helpers/class');\n\nvar _class2 = _interopRequireDefault(_class);\n\nvar _style = require('dom-helpers/style');\n\nvar _style2 = _interopRequireDefault(_style);\n\nvar _scrollbarSize = require('dom-helpers/util/scrollbarSize');\n\nvar _scrollbarSize2 = _interopRequireDefault(_scrollbarSize);\n\nvar _isOverflowing = require('./utils/isOverflowing');\n\nvar _isOverflowing2 = _interopRequireDefault(_isOverflowing);\n\nvar _manageAriaHidden = require('./utils/manageAriaHidden');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction findIndexOf(arr, cb) {\n  var idx = -1;\n  arr.some(function (d, i) {\n    if (cb(d, i)) {\n      idx = i;\n      return true;\n    }\n  });\n  return idx;\n}\n\nfunction findContainer(data, modal) {\n  return findIndexOf(data, function (d) {\n    return d.modals.indexOf(modal) !== -1;\n  });\n}\n\nfunction setContainerStyle(state, container) {\n  var style = { overflow: 'hidden' };\n\n  // we are only interested in the actual `style` here\n  // becasue we will override it\n  state.style = {\n    overflow: container.style.overflow,\n    paddingRight: container.style.paddingRight\n  };\n\n  if (state.overflowing) {\n    // use computed style, here to get the real padding\n    // to add our scrollbar width\n    style.paddingRight = parseInt((0, _style2.default)(container, 'paddingRight') || 0, 10) + (0, _scrollbarSize2.default)() + 'px';\n  }\n\n  (0, _style2.default)(container, style);\n}\n\nfunction removeContainerStyle(_ref, container) {\n  var style = _ref.style;\n\n\n  Object.keys(style).forEach(function (key) {\n    return container.style[key] = style[key];\n  });\n}\n/**\n * Proper state managment for containers and the modals in those containers.\n *\n * @internal Used by the Modal to ensure proper styling of containers.\n */\n\nvar ModalManager = function ModalManager() {\n  var _this = this;\n\n  var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n      _ref2$hideSiblingNode = _ref2.hideSiblingNodes,\n      hideSiblingNodes = _ref2$hideSiblingNode === undefined ? true : _ref2$hideSiblingNode,\n      _ref2$handleContainer = _ref2.handleContainerOverflow,\n      handleContainerOverflow = _ref2$handleContainer === undefined ? true : _ref2$handleContainer;\n\n  _classCallCheck(this, ModalManager);\n\n  this.add = function (modal, container, className) {\n    var modalIdx = _this.modals.indexOf(modal);\n    var containerIdx = _this.containers.indexOf(container);\n\n    if (modalIdx !== -1) {\n      return modalIdx;\n    }\n\n    modalIdx = _this.modals.length;\n    _this.modals.push(modal);\n\n    if (_this.hideSiblingNodes) {\n      (0, _manageAriaHidden.hideSiblings)(container, modal.mountNode);\n    }\n\n    if (containerIdx !== -1) {\n      _this.data[containerIdx].modals.push(modal);\n      return modalIdx;\n    }\n\n    var data = {\n      modals: [modal],\n      //right now only the first modal of a container will have its classes applied\n      classes: className ? className.split(/\\s+/) : [],\n\n      overflowing: (0, _isOverflowing2.default)(container)\n    };\n\n    if (_this.handleContainerOverflow) {\n      setContainerStyle(data, container);\n    }\n\n    data.classes.forEach(_class2.default.addClass.bind(null, container));\n\n    _this.containers.push(container);\n    _this.data.push(data);\n\n    return modalIdx;\n  };\n\n  this.remove = function (modal) {\n    var modalIdx = _this.modals.indexOf(modal);\n\n    if (modalIdx === -1) {\n      return;\n    }\n\n    var containerIdx = findContainer(_this.data, modal);\n    var data = _this.data[containerIdx];\n    var container = _this.containers[containerIdx];\n\n    data.modals.splice(data.modals.indexOf(modal), 1);\n\n    _this.modals.splice(modalIdx, 1);\n\n    // if that was the last modal in a container,\n    // clean up the container\n    if (data.modals.length === 0) {\n      data.classes.forEach(_class2.default.removeClass.bind(null, container));\n\n      if (_this.handleContainerOverflow) {\n        removeContainerStyle(data, container);\n      }\n\n      if (_this.hideSiblingNodes) {\n        (0, _manageAriaHidden.showSiblings)(container, modal.mountNode);\n      }\n      _this.containers.splice(containerIdx, 1);\n      _this.data.splice(containerIdx, 1);\n    } else if (_this.hideSiblingNodes) {\n      //otherwise make sure the next top modal is visible to a SR\n      (0, _manageAriaHidden.ariaHidden)(false, data.modals[data.modals.length - 1].mountNode);\n    }\n  };\n\n  this.isTopModal = function (modal) {\n    return !!_this.modals.length && _this.modals[_this.modals.length - 1] === modal;\n  };\n\n  this.hideSiblingNodes = hideSiblingNodes;\n  this.handleContainerOverflow = handleContainerOverflow;\n  this.modals = [];\n  this.containers = [];\n  this.data = [];\n};\n\nexports.default = ModalManager;\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _componentOrElement = require('prop-types-extra/lib/componentOrElement');\n\nvar _componentOrElement2 = _interopRequireDefault(_componentOrElement);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _getContainer = require('./utils/getContainer');\n\nvar _getContainer2 = _interopRequireDefault(_getContainer);\n\nvar _ownerDocument = require('./utils/ownerDocument');\n\nvar _ownerDocument2 = _interopRequireDefault(_ownerDocument);\n\nvar _LegacyPortal = require('./LegacyPortal');\n\nvar _LegacyPortal2 = _interopRequireDefault(_LegacyPortal);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * The `<Portal/>` component renders its children into a new \"subtree\" outside of current component hierarchy.\n * You can think of it as a declarative `appendChild()`, or jQuery's `$.fn.appendTo()`.\n * The children of `<Portal/>` component will be appended to the `container` specified.\n */\nvar Portal = function (_React$Component) {\n  _inherits(Portal, _React$Component);\n\n  function Portal() {\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, Portal);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.setContainer = function () {\n      var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _this.props;\n\n      _this._portalContainerNode = (0, _getContainer2.default)(props.container, (0, _ownerDocument2.default)(_this).body);\n    }, _this.getMountNode = function () {\n      return _this._portalContainerNode;\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  Portal.prototype.componentDidMount = function componentDidMount() {\n    this.setContainer();\n    this.forceUpdate(this.props.onRendered);\n  };\n\n  Portal.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n    if (nextProps.container !== this.props.container) {\n      this.setContainer(nextProps);\n    }\n  };\n\n  Portal.prototype.componentWillUnmount = function componentWillUnmount() {\n    this._portalContainerNode = null;\n  };\n\n  Portal.prototype.render = function render() {\n    return this.props.children && this._portalContainerNode ? _reactDom2.default.createPortal(this.props.children, this._portalContainerNode) : null;\n  };\n\n  return Portal;\n}(_react2.default.Component);\n\nPortal.displayName = 'Portal';\nPortal.propTypes = {\n  /**\n   * A Node, Component instance, or function that returns either. The `container` will have the Portal children\n   * appended to it.\n   */\n  container: _propTypes2.default.oneOfType([_componentOrElement2.default, _propTypes2.default.func]),\n\n  onRendered: _propTypes2.default.func\n};\nexports.default = _reactDom2.default.createPortal ? Portal : _LegacyPortal2.default;\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar propTypes = {\n  children: _propTypes2.default.node\n};\n\n/**\n * Internal helper component to allow attaching a non-conflicting ref to a\n * child element that may not accept refs.\n */\n\nvar RefHolder = function (_React$Component) {\n  _inherits(RefHolder, _React$Component);\n\n  function RefHolder() {\n    _classCallCheck(this, RefHolder);\n\n    return _possibleConstructorReturn(this, _React$Component.apply(this, arguments));\n  }\n\n  RefHolder.prototype.render = function render() {\n    return this.props.children;\n  };\n\n  return RefHolder;\n}(_react2.default.Component);\n\nRefHolder.propTypes = propTypes;\n\nexports.default = RefHolder;\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\n\nvar _contains = require('dom-helpers/query/contains');\n\nvar _contains2 = _interopRequireDefault(_contains);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _addEventListener = require('./utils/addEventListener');\n\nvar _addEventListener2 = _interopRequireDefault(_addEventListener);\n\nvar _ownerDocument = require('./utils/ownerDocument');\n\nvar _ownerDocument2 = _interopRequireDefault(_ownerDocument);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar escapeKeyCode = 27;\n\nfunction isLeftClickEvent(event) {\n  return event.button === 0;\n}\n\nfunction isModifiedEvent(event) {\n  return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\n\n/**\n * The `<RootCloseWrapper/>` component registers your callback on the document\n * when rendered. Powers the `<Overlay/>` component. This is used achieve modal\n * style behavior where your callback is triggered when the user tries to\n * interact with the rest of the document or hits the `esc` key.\n */\n\nvar RootCloseWrapper = function (_React$Component) {\n  _inherits(RootCloseWrapper, _React$Component);\n\n  function RootCloseWrapper(props, context) {\n    _classCallCheck(this, RootCloseWrapper);\n\n    var _this = _possibleConstructorReturn(this, _React$Component.call(this, props, context));\n\n    _this.addEventListeners = function () {\n      var event = _this.props.event;\n\n      var doc = (0, _ownerDocument2.default)(_this);\n\n      // Use capture for this listener so it fires before React's listener, to\n      // avoid false positives in the contains() check below if the target DOM\n      // element is removed in the React mouse callback.\n      _this.documentMouseCaptureListener = (0, _addEventListener2.default)(doc, event, _this.handleMouseCapture, true);\n\n      _this.documentMouseListener = (0, _addEventListener2.default)(doc, event, _this.handleMouse);\n\n      _this.documentKeyupListener = (0, _addEventListener2.default)(doc, 'keyup', _this.handleKeyUp);\n    };\n\n    _this.removeEventListeners = function () {\n      if (_this.documentMouseCaptureListener) {\n        _this.documentMouseCaptureListener.remove();\n      }\n\n      if (_this.documentMouseListener) {\n        _this.documentMouseListener.remove();\n      }\n\n      if (_this.documentKeyupListener) {\n        _this.documentKeyupListener.remove();\n      }\n    };\n\n    _this.handleMouseCapture = function (e) {\n      _this.preventMouseRootClose = isModifiedEvent(e) || !isLeftClickEvent(e) || (0, _contains2.default)(_reactDom2.default.findDOMNode(_this), e.target);\n    };\n\n    _this.handleMouse = function (e) {\n      if (!_this.preventMouseRootClose && _this.props.onRootClose) {\n        _this.props.onRootClose(e);\n      }\n    };\n\n    _this.handleKeyUp = function (e) {\n      if (e.keyCode === escapeKeyCode && _this.props.onRootClose) {\n        _this.props.onRootClose(e);\n      }\n    };\n\n    _this.preventMouseRootClose = false;\n    return _this;\n  }\n\n  RootCloseWrapper.prototype.componentDidMount = function componentDidMount() {\n    if (!this.props.disabled) {\n      this.addEventListeners();\n    }\n  };\n\n  RootCloseWrapper.prototype.componentDidUpdate = function componentDidUpdate(prevProps) {\n    if (!this.props.disabled && prevProps.disabled) {\n      this.addEventListeners();\n    } else if (this.props.disabled && !prevProps.disabled) {\n      this.removeEventListeners();\n    }\n  };\n\n  RootCloseWrapper.prototype.componentWillUnmount = function componentWillUnmount() {\n    if (!this.props.disabled) {\n      this.removeEventListeners();\n    }\n  };\n\n  RootCloseWrapper.prototype.render = function render() {\n    return this.props.children;\n  };\n\n  return RootCloseWrapper;\n}(_react2.default.Component);\n\nRootCloseWrapper.displayName = 'RootCloseWrapper';\n\nRootCloseWrapper.propTypes = {\n  /**\n   * Callback fired after click or mousedown. Also triggers when user hits `esc`.\n   */\n  onRootClose: _propTypes2.default.func,\n  /**\n   * Children to render.\n   */\n  children: _propTypes2.default.element,\n  /**\n   * Disable the the RootCloseWrapper, preventing it from triggering `onRootClose`.\n   */\n  disabled: _propTypes2.default.bool,\n  /**\n   * Choose which document mouse event to bind to.\n   */\n  event: _propTypes2.default.oneOf(['click', 'mousedown'])\n};\n\nRootCloseWrapper.defaultProps = {\n  event: 'click'\n};\n\nexports.default = RootCloseWrapper;\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\n\nexports.default = function (node, event, handler, capture) {\n  (0, _on2.default)(node, event, handler, capture);\n\n  return {\n    remove: function remove() {\n      (0, _off2.default)(node, event, handler, capture);\n    }\n  };\n};\n\nvar _on = require('dom-helpers/events/on');\n\nvar _on2 = _interopRequireDefault(_on);\n\nvar _off = require('dom-helpers/events/off');\n\nvar _off2 = _interopRequireDefault(_off);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\nexports.default = addFocusListener;\n/**\n * Firefox doesn't have a focusin event so using capture is easiest way to get bubbling\n * IE8 can't do addEventListener, but does have onfocusin, so we use that in ie8\n *\n * We only allow one Listener at a time to avoid stack overflows\n */\nfunction addFocusListener(handler) {\n  var useFocusin = !document.addEventListener;\n  var remove = void 0;\n\n  if (useFocusin) {\n    document.attachEvent('onfocusin', handler);\n    remove = function remove() {\n      return document.detachEvent('onfocusin', handler);\n    };\n  } else {\n    document.addEventListener('focus', handler, true);\n    remove = function remove() {\n      return document.removeEventListener('focus', handler, true);\n    };\n  }\n\n  return { remove: remove };\n}\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\nexports.default = getContainer;\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction getContainer(container, defaultContainer) {\n  container = typeof container === 'function' ? container() : container;\n  return _reactDom2.default.findDOMNode(container) || defaultContainer;\n}\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\nexports.default = isOverflowing;\n\nvar _isWindow = require('dom-helpers/query/isWindow');\n\nvar _isWindow2 = _interopRequireDefault(_isWindow);\n\nvar _ownerDocument = require('dom-helpers/ownerDocument');\n\nvar _ownerDocument2 = _interopRequireDefault(_ownerDocument);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction isBody(node) {\n  return node && node.tagName.toLowerCase() === 'body';\n}\n\nfunction bodyIsOverflowing(node) {\n  var doc = (0, _ownerDocument2.default)(node);\n  var win = (0, _isWindow2.default)(doc);\n  var fullWidth = win.innerWidth;\n\n  // Support: ie8, no innerWidth\n  if (!fullWidth) {\n    var documentElementRect = doc.documentElement.getBoundingClientRect();\n    fullWidth = documentElementRect.right - Math.abs(documentElementRect.left);\n  }\n\n  return doc.body.clientWidth < fullWidth;\n}\n\nfunction isOverflowing(container) {\n  var win = (0, _isWindow2.default)(container);\n\n  return win || isBody(container) ? bodyIsOverflowing(container) : container.scrollHeight > container.clientHeight;\n}\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\nexports.ariaHidden = ariaHidden;\nexports.hideSiblings = hideSiblings;\nexports.showSiblings = showSiblings;\n\nvar BLACKLIST = ['template', 'script', 'style'];\n\nvar isHidable = function isHidable(_ref) {\n  var nodeType = _ref.nodeType,\n      tagName = _ref.tagName;\n  return nodeType === 1 && BLACKLIST.indexOf(tagName.toLowerCase()) === -1;\n};\n\nvar siblings = function siblings(container, mount, cb) {\n  mount = [].concat(mount);\n\n  [].forEach.call(container.children, function (node) {\n    if (mount.indexOf(node) === -1 && isHidable(node)) {\n      cb(node);\n    }\n  });\n};\n\nfunction ariaHidden(show, node) {\n  if (!node) {\n    return;\n  }\n  if (show) {\n    node.setAttribute('aria-hidden', 'true');\n  } else {\n    node.removeAttribute('aria-hidden');\n  }\n}\n\nfunction hideSiblings(container, mountNode) {\n  siblings(container, mountNode, function (node) {\n    return ariaHidden(true, node);\n  });\n}\n\nfunction showSiblings(container, mountNode) {\n  siblings(container, mountNode, function (node) {\n    return ariaHidden(false, node);\n  });\n}","'use strict';\n\nexports.__esModule = true;\n\nexports.default = function (componentOrElement) {\n  return (0, _ownerDocument2.default)(_reactDom2.default.findDOMNode(componentOrElement));\n};\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _ownerDocument = require('dom-helpers/ownerDocument');\n\nvar _ownerDocument2 = _interopRequireDefault(_ownerDocument);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = exports['default'];","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar __DEV__ = process.env.NODE_ENV !== 'production';\n\nvar warning = function() {};\n\nif (__DEV__) {\n  var printWarning = function printWarning(format, args) {\n    var len = arguments.length;\n    args = new Array(len > 1 ? len - 1 : 0);\n    for (var key = 1; key < len; key++) {\n      args[key - 1] = arguments[key];\n    }\n    var argIndex = 0;\n    var message = 'Warning: ' +\n      format.replace(/%s/g, function() {\n        return args[argIndex++];\n      });\n    if (typeof console !== 'undefined') {\n      console.error(message);\n    }\n    try {\n      // --- Welcome to debugging React ---\n      // This error was thrown as a convenience so that you can use this stack\n      // to find the callsite that caused this warning to fire.\n      throw new Error(message);\n    } catch (x) {}\n  }\n\n  warning = function(condition, format, args) {\n    var len = arguments.length;\n    args = new Array(len > 2 ? len - 2 : 0);\n    for (var key = 2; key < len; key++) {\n      args[key - 2] = arguments[key];\n    }\n    if (format === undefined) {\n      throw new Error(\n          '`warning(condition, format, ...args)` requires a warning ' +\n          'message argument'\n      );\n    }\n    if (!condition) {\n      printWarning.apply(null, [format].concat(args));\n    }\n  };\n}\n\nmodule.exports = warning;\n","\"use strict\";\n\nexports.__esModule = true;\nexports.default = exports.EXITING = exports.ENTERED = exports.ENTERING = exports.EXITED = exports.UNMOUNTED = void 0;\n\nvar PropTypes = _interopRequireWildcard(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nvar _reactLifecyclesCompat = require(\"react-lifecycles-compat\");\n\nvar _PropTypes = require(\"./utils/PropTypes\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar UNMOUNTED = 'unmounted';\nexports.UNMOUNTED = UNMOUNTED;\nvar EXITED = 'exited';\nexports.EXITED = EXITED;\nvar ENTERING = 'entering';\nexports.ENTERING = ENTERING;\nvar ENTERED = 'entered';\nexports.ENTERED = ENTERED;\nvar EXITING = 'exiting';\n/**\n * The Transition component lets you describe a transition from one component\n * state to another _over time_ with a simple declarative API. Most commonly\n * it's used to animate the mounting and unmounting of a component, but can also\n * be used to describe in-place transition states as well.\n *\n * ---\n *\n * **Note**: `Transition` is a platform-agnostic base component. If you're using\n * transitions in CSS, you'll probably want to use\n * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition)\n * instead. It inherits all the features of `Transition`, but contains\n * additional features necessary to play nice with CSS transitions (hence the\n * name of the component).\n *\n * ---\n *\n * By default the `Transition` component does not alter the behavior of the\n * component it renders, it only tracks \"enter\" and \"exit\" states for the\n * components. It's up to you to give meaning and effect to those states. For\n * example we can add styles to a component when it enters or exits:\n *\n * ```jsx\n * import { Transition } from 'react-transition-group';\n *\n * const duration = 300;\n *\n * const defaultStyle = {\n *   transition: `opacity ${duration}ms ease-in-out`,\n *   opacity: 0,\n * }\n *\n * const transitionStyles = {\n *   entering: { opacity: 0 },\n *   entered:  { opacity: 1 },\n * };\n *\n * const Fade = ({ in: inProp }) => (\n *   <Transition in={inProp} timeout={duration}>\n *     {state => (\n *       <div style={{\n *         ...defaultStyle,\n *         ...transitionStyles[state]\n *       }}>\n *         I'm a fade Transition!\n *       </div>\n *     )}\n *   </Transition>\n * );\n * ```\n *\n * There are 4 main states a Transition can be in:\n *  - `'entering'`\n *  - `'entered'`\n *  - `'exiting'`\n *  - `'exited'`\n *\n * Transition state is toggled via the `in` prop. When `true` the component\n * begins the \"Enter\" stage. During this stage, the component will shift from\n * its current transition state, to `'entering'` for the duration of the\n * transition and then to the `'entered'` stage once it's complete. Let's take\n * the following example (we'll use the\n * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook):\n *\n * ```jsx\n * function App() {\n *   const [inProp, setInProp] = useState(false);\n *   return (\n *     <div>\n *       <Transition in={inProp} timeout={500}>\n *         {state => (\n *           // ...\n *         )}\n *       </Transition>\n *       <button onClick={() => setInProp(true)}>\n *         Click to Enter\n *       </button>\n *     </div>\n *   );\n * }\n * ```\n *\n * When the button is clicked the component will shift to the `'entering'` state\n * and stay there for 500ms (the value of `timeout`) before it finally switches\n * to `'entered'`.\n *\n * When `in` is `false` the same thing happens except the state moves from\n * `'exiting'` to `'exited'`.\n */\n\nexports.EXITING = EXITING;\n\nvar Transition =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(Transition, _React$Component);\n\n  function Transition(props, context) {\n    var _this;\n\n    _this = _React$Component.call(this, props, context) || this;\n    var parentGroup = context.transitionGroup; // In the context of a TransitionGroup all enters are really appears\n\n    var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;\n    var initialStatus;\n    _this.appearStatus = null;\n\n    if (props.in) {\n      if (appear) {\n        initialStatus = EXITED;\n        _this.appearStatus = ENTERING;\n      } else {\n        initialStatus = ENTERED;\n      }\n    } else {\n      if (props.unmountOnExit || props.mountOnEnter) {\n        initialStatus = UNMOUNTED;\n      } else {\n        initialStatus = EXITED;\n      }\n    }\n\n    _this.state = {\n      status: initialStatus\n    };\n    _this.nextCallback = null;\n    return _this;\n  }\n\n  var _proto = Transition.prototype;\n\n  _proto.getChildContext = function getChildContext() {\n    return {\n      transitionGroup: null // allows for nested Transitions\n\n    };\n  };\n\n  Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {\n    var nextIn = _ref.in;\n\n    if (nextIn && prevState.status === UNMOUNTED) {\n      return {\n        status: EXITED\n      };\n    }\n\n    return null;\n  }; // getSnapshotBeforeUpdate(prevProps) {\n  //   let nextStatus = null\n  //   if (prevProps !== this.props) {\n  //     const { status } = this.state\n  //     if (this.props.in) {\n  //       if (status !== ENTERING && status !== ENTERED) {\n  //         nextStatus = ENTERING\n  //       }\n  //     } else {\n  //       if (status === ENTERING || status === ENTERED) {\n  //         nextStatus = EXITING\n  //       }\n  //     }\n  //   }\n  //   return { nextStatus }\n  // }\n\n\n  _proto.componentDidMount = function componentDidMount() {\n    this.updateStatus(true, this.appearStatus);\n  };\n\n  _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n    var nextStatus = null;\n\n    if (prevProps !== this.props) {\n      var status = this.state.status;\n\n      if (this.props.in) {\n        if (status !== ENTERING && status !== ENTERED) {\n          nextStatus = ENTERING;\n        }\n      } else {\n        if (status === ENTERING || status === ENTERED) {\n          nextStatus = EXITING;\n        }\n      }\n    }\n\n    this.updateStatus(false, nextStatus);\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    this.cancelNextCallback();\n  };\n\n  _proto.getTimeouts = function getTimeouts() {\n    var timeout = this.props.timeout;\n    var exit, enter, appear;\n    exit = enter = appear = timeout;\n\n    if (timeout != null && typeof timeout !== 'number') {\n      exit = timeout.exit;\n      enter = timeout.enter; // TODO: remove fallback for next major\n\n      appear = timeout.appear !== undefined ? timeout.appear : enter;\n    }\n\n    return {\n      exit: exit,\n      enter: enter,\n      appear: appear\n    };\n  };\n\n  _proto.updateStatus = function updateStatus(mounting, nextStatus) {\n    if (mounting === void 0) {\n      mounting = false;\n    }\n\n    if (nextStatus !== null) {\n      // nextStatus will always be ENTERING or EXITING.\n      this.cancelNextCallback();\n\n      var node = _reactDom.default.findDOMNode(this);\n\n      if (nextStatus === ENTERING) {\n        this.performEnter(node, mounting);\n      } else {\n        this.performExit(node);\n      }\n    } else if (this.props.unmountOnExit && this.state.status === EXITED) {\n      this.setState({\n        status: UNMOUNTED\n      });\n    }\n  };\n\n  _proto.performEnter = function performEnter(node, mounting) {\n    var _this2 = this;\n\n    var enter = this.props.enter;\n    var appearing = this.context.transitionGroup ? this.context.transitionGroup.isMounting : mounting;\n    var timeouts = this.getTimeouts();\n    var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED\n    // if we are mounting and running this it means appear _must_ be set\n\n    if (!mounting && !enter) {\n      this.safeSetState({\n        status: ENTERED\n      }, function () {\n        _this2.props.onEntered(node);\n      });\n      return;\n    }\n\n    this.props.onEnter(node, appearing);\n    this.safeSetState({\n      status: ENTERING\n    }, function () {\n      _this2.props.onEntering(node, appearing);\n\n      _this2.onTransitionEnd(node, enterTimeout, function () {\n        _this2.safeSetState({\n          status: ENTERED\n        }, function () {\n          _this2.props.onEntered(node, appearing);\n        });\n      });\n    });\n  };\n\n  _proto.performExit = function performExit(node) {\n    var _this3 = this;\n\n    var exit = this.props.exit;\n    var timeouts = this.getTimeouts(); // no exit animation skip right to EXITED\n\n    if (!exit) {\n      this.safeSetState({\n        status: EXITED\n      }, function () {\n        _this3.props.onExited(node);\n      });\n      return;\n    }\n\n    this.props.onExit(node);\n    this.safeSetState({\n      status: EXITING\n    }, function () {\n      _this3.props.onExiting(node);\n\n      _this3.onTransitionEnd(node, timeouts.exit, function () {\n        _this3.safeSetState({\n          status: EXITED\n        }, function () {\n          _this3.props.onExited(node);\n        });\n      });\n    });\n  };\n\n  _proto.cancelNextCallback = function cancelNextCallback() {\n    if (this.nextCallback !== null) {\n      this.nextCallback.cancel();\n      this.nextCallback = null;\n    }\n  };\n\n  _proto.safeSetState = function safeSetState(nextState, callback) {\n    // This shouldn't be necessary, but there are weird race conditions with\n    // setState callbacks and unmounting in testing, so always make sure that\n    // we can cancel any pending setState callbacks after we unmount.\n    callback = this.setNextCallback(callback);\n    this.setState(nextState, callback);\n  };\n\n  _proto.setNextCallback = function setNextCallback(callback) {\n    var _this4 = this;\n\n    var active = true;\n\n    this.nextCallback = function (event) {\n      if (active) {\n        active = false;\n        _this4.nextCallback = null;\n        callback(event);\n      }\n    };\n\n    this.nextCallback.cancel = function () {\n      active = false;\n    };\n\n    return this.nextCallback;\n  };\n\n  _proto.onTransitionEnd = function onTransitionEnd(node, timeout, handler) {\n    this.setNextCallback(handler);\n    var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;\n\n    if (!node || doesNotHaveTimeoutOrListener) {\n      setTimeout(this.nextCallback, 0);\n      return;\n    }\n\n    if (this.props.addEndListener) {\n      this.props.addEndListener(node, this.nextCallback);\n    }\n\n    if (timeout != null) {\n      setTimeout(this.nextCallback, timeout);\n    }\n  };\n\n  _proto.render = function render() {\n    var status = this.state.status;\n\n    if (status === UNMOUNTED) {\n      return null;\n    }\n\n    var _this$props = this.props,\n        children = _this$props.children,\n        childProps = _objectWithoutPropertiesLoose(_this$props, [\"children\"]); // filter props for Transtition\n\n\n    delete childProps.in;\n    delete childProps.mountOnEnter;\n    delete childProps.unmountOnExit;\n    delete childProps.appear;\n    delete childProps.enter;\n    delete childProps.exit;\n    delete childProps.timeout;\n    delete childProps.addEndListener;\n    delete childProps.onEnter;\n    delete childProps.onEntering;\n    delete childProps.onEntered;\n    delete childProps.onExit;\n    delete childProps.onExiting;\n    delete childProps.onExited;\n\n    if (typeof children === 'function') {\n      return children(status, childProps);\n    }\n\n    var child = _react.default.Children.only(children);\n\n    return _react.default.cloneElement(child, childProps);\n  };\n\n  return Transition;\n}(_react.default.Component);\n\nTransition.contextTypes = {\n  transitionGroup: PropTypes.object\n};\nTransition.childContextTypes = {\n  transitionGroup: function transitionGroup() {}\n};\nTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  /**\n   * A `function` child can be used instead of a React element. This function is\n   * called with the current transition status (`'entering'`, `'entered'`,\n   * `'exiting'`, `'exited'`, `'unmounted'`), which can be used to apply context\n   * specific props to a component.\n   *\n   * ```jsx\n   * <Transition in={this.state.in} timeout={150}>\n   *   {state => (\n   *     <MyComponent className={`fade fade-${state}`} />\n   *   )}\n   * </Transition>\n   * ```\n   */\n  children: PropTypes.oneOfType([PropTypes.func.isRequired, PropTypes.element.isRequired]).isRequired,\n\n  /**\n   * Show the component; triggers the enter or exit states\n   */\n  in: PropTypes.bool,\n\n  /**\n   * By default the child component is mounted immediately along with\n   * the parent `Transition` component. If you want to \"lazy mount\" the component on the\n   * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay\n   * mounted, even on \"exited\", unless you also specify `unmountOnExit`.\n   */\n  mountOnEnter: PropTypes.bool,\n\n  /**\n   * By default the child component stays mounted after it reaches the `'exited'` state.\n   * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting.\n   */\n  unmountOnExit: PropTypes.bool,\n\n  /**\n   * Normally a component is not transitioned if it is shown when the `<Transition>` component mounts.\n   * If you want to transition on the first mount set `appear` to `true`, and the\n   * component will transition in as soon as the `<Transition>` mounts.\n   *\n   * > Note: there are no specific \"appear\" states. `appear` only adds an additional `enter` transition.\n   */\n  appear: PropTypes.bool,\n\n  /**\n   * Enable or disable enter transitions.\n   */\n  enter: PropTypes.bool,\n\n  /**\n   * Enable or disable exit transitions.\n   */\n  exit: PropTypes.bool,\n\n  /**\n   * The duration of the transition, in milliseconds.\n   * Required unless `addEndListener` is provided.\n   *\n   * You may specify a single timeout for all transitions:\n   *\n   * ```jsx\n   * timeout={500}\n   * ```\n   *\n   * or individually:\n   *\n   * ```jsx\n   * timeout={{\n   *  appear: 500,\n   *  enter: 300,\n   *  exit: 500,\n   * }}\n   * ```\n   *\n   * - `appear` defaults to the value of `enter`\n   * - `enter` defaults to `0`\n   * - `exit` defaults to `0`\n   *\n   * @type {number | { enter?: number, exit?: number, appear?: number }}\n   */\n  timeout: function timeout(props) {\n    var pt = _PropTypes.timeoutsShape;\n    if (!props.addEndListener) pt = pt.isRequired;\n\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    return pt.apply(void 0, [props].concat(args));\n  },\n\n  /**\n   * Add a custom transition end trigger. Called with the transitioning\n   * DOM node and a `done` callback. Allows for more fine grained transition end\n   * logic. **Note:** Timeouts are still used as a fallback if provided.\n   *\n   * ```jsx\n   * addEndListener={(node, done) => {\n   *   // use the css transitionend event to mark the finish of a transition\n   *   node.addEventListener('transitionend', done, false);\n   * }}\n   * ```\n   */\n  addEndListener: PropTypes.func,\n\n  /**\n   * Callback fired before the \"entering\" status is applied. An extra parameter\n   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool) -> void\n   */\n  onEnter: PropTypes.func,\n\n  /**\n   * Callback fired after the \"entering\" status is applied. An extra parameter\n   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool)\n   */\n  onEntering: PropTypes.func,\n\n  /**\n   * Callback fired after the \"entered\" status is applied. An extra parameter\n   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool) -> void\n   */\n  onEntered: PropTypes.func,\n\n  /**\n   * Callback fired before the \"exiting\" status is applied.\n   *\n   * @type Function(node: HtmlElement) -> void\n   */\n  onExit: PropTypes.func,\n\n  /**\n   * Callback fired after the \"exiting\" status is applied.\n   *\n   * @type Function(node: HtmlElement) -> void\n   */\n  onExiting: PropTypes.func,\n\n  /**\n   * Callback fired after the \"exited\" status is applied.\n   *\n   * @type Function(node: HtmlElement) -> void\n   */\n  onExited: PropTypes.func // Name the function so it is clearer in the documentation\n\n} : {};\n\nfunction noop() {}\n\nTransition.defaultProps = {\n  in: false,\n  mountOnEnter: false,\n  unmountOnExit: false,\n  appear: false,\n  enter: true,\n  exit: true,\n  onEnter: noop,\n  onEntering: noop,\n  onEntered: noop,\n  onExit: noop,\n  onExiting: noop,\n  onExited: noop\n};\nTransition.UNMOUNTED = 0;\nTransition.EXITED = 1;\nTransition.ENTERING = 2;\nTransition.ENTERED = 3;\nTransition.EXITING = 4;\n\nvar _default = (0, _reactLifecyclesCompat.polyfill)(Transition);\n\nexports.default = _default;","\"use strict\";\n\nexports.__esModule = true;\nexports.classNamesShape = exports.timeoutsShape = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar timeoutsShape = process.env.NODE_ENV !== 'production' ? _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.shape({\n  enter: _propTypes.default.number,\n  exit: _propTypes.default.number,\n  appear: _propTypes.default.number\n}).isRequired]) : null;\nexports.timeoutsShape = timeoutsShape;\nvar classNamesShape = process.env.NODE_ENV !== 'production' ? _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.shape({\n  enter: _propTypes.default.string,\n  exit: _propTypes.default.string,\n  active: _propTypes.default.string\n}), _propTypes.default.shape({\n  enter: _propTypes.default.string,\n  enterDone: _propTypes.default.string,\n  enterActive: _propTypes.default.string,\n  exit: _propTypes.default.string,\n  exitDone: _propTypes.default.string,\n  exitActive: _propTypes.default.string\n})]) : null;\nexports.classNamesShape = classNamesShape;","/**\n * Detect Element Resize.\n * https://github.com/sdecima/javascript-detect-element-resize\n * Sebastian Decima\n *\n * Forked from version 0.5.3; includes the following modifications:\n * 1) Guard against unsafe 'window' and 'document' references (to support SSR).\n * 2) Defer initialization code via a top-level function wrapper (to support SSR).\n * 3) Avoid unnecessary reflows by not measuring size for scroll events bubbling from children.\n * 4) Add nonce for style element.\n **/\n\nexport default function createDetectElementResize(nonce) {\n  // Check `document` and `window` in case of server-side rendering\n  var _window;\n  if (typeof window !== 'undefined') {\n    _window = window;\n  } else if (typeof self !== 'undefined') {\n    _window = self;\n  } else {\n    _window = global;\n  }\n\n  var attachEvent = typeof document !== 'undefined' && document.attachEvent;\n\n  if (!attachEvent) {\n    var requestFrame = function () {\n      var raf = _window.requestAnimationFrame || _window.mozRequestAnimationFrame || _window.webkitRequestAnimationFrame || function (fn) {\n        return _window.setTimeout(fn, 20);\n      };\n      return function (fn) {\n        return raf(fn);\n      };\n    }();\n\n    var cancelFrame = function () {\n      var cancel = _window.cancelAnimationFrame || _window.mozCancelAnimationFrame || _window.webkitCancelAnimationFrame || _window.clearTimeout;\n      return function (id) {\n        return cancel(id);\n      };\n    }();\n\n    var resetTriggers = function resetTriggers(element) {\n      var triggers = element.__resizeTriggers__,\n          expand = triggers.firstElementChild,\n          contract = triggers.lastElementChild,\n          expandChild = expand.firstElementChild;\n      contract.scrollLeft = contract.scrollWidth;\n      contract.scrollTop = contract.scrollHeight;\n      expandChild.style.width = expand.offsetWidth + 1 + 'px';\n      expandChild.style.height = expand.offsetHeight + 1 + 'px';\n      expand.scrollLeft = expand.scrollWidth;\n      expand.scrollTop = expand.scrollHeight;\n    };\n\n    var checkTriggers = function checkTriggers(element) {\n      return element.offsetWidth != element.__resizeLast__.width || element.offsetHeight != element.__resizeLast__.height;\n    };\n\n    var scrollListener = function scrollListener(e) {\n      // Don't measure (which forces) reflow for scrolls that happen inside of children!\n      if (e.target.className.indexOf('contract-trigger') < 0 && e.target.className.indexOf('expand-trigger') < 0) {\n        return;\n      }\n\n      var element = this;\n      resetTriggers(this);\n      if (this.__resizeRAF__) {\n        cancelFrame(this.__resizeRAF__);\n      }\n      this.__resizeRAF__ = requestFrame(function () {\n        if (checkTriggers(element)) {\n          element.__resizeLast__.width = element.offsetWidth;\n          element.__resizeLast__.height = element.offsetHeight;\n          element.__resizeListeners__.forEach(function (fn) {\n            fn.call(element, e);\n          });\n        }\n      });\n    };\n\n    /* Detect CSS Animations support to detect element display/re-attach */\n    var animation = false,\n        keyframeprefix = '',\n        animationstartevent = 'animationstart',\n        domPrefixes = 'Webkit Moz O ms'.split(' '),\n        startEvents = 'webkitAnimationStart animationstart oAnimationStart MSAnimationStart'.split(' '),\n        pfx = '';\n    {\n      var elm = document.createElement('fakeelement');\n      if (elm.style.animationName !== undefined) {\n        animation = true;\n      }\n\n      if (animation === false) {\n        for (var i = 0; i < domPrefixes.length; i++) {\n          if (elm.style[domPrefixes[i] + 'AnimationName'] !== undefined) {\n            pfx = domPrefixes[i];\n            keyframeprefix = '-' + pfx.toLowerCase() + '-';\n            animationstartevent = startEvents[i];\n            animation = true;\n            break;\n          }\n        }\n      }\n    }\n\n    var animationName = 'resizeanim';\n    var animationKeyframes = '@' + keyframeprefix + 'keyframes ' + animationName + ' { from { opacity: 0; } to { opacity: 0; } } ';\n    var animationStyle = keyframeprefix + 'animation: 1ms ' + animationName + '; ';\n  }\n\n  var createStyles = function createStyles(doc) {\n    if (!doc.getElementById('detectElementResize')) {\n      //opacity:0 works around a chrome bug https://code.google.com/p/chromium/issues/detail?id=286360\n      var css = (animationKeyframes ? animationKeyframes : '') + '.resize-triggers { ' + (animationStyle ? animationStyle : '') + 'visibility: hidden; opacity: 0; } ' + '.resize-triggers, .resize-triggers > div, .contract-trigger:before { content: \" \"; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; z-index: -1; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',\n          head = doc.head || doc.getElementsByTagName('head')[0],\n          style = doc.createElement('style');\n\n      style.id = 'detectElementResize';\n      style.type = 'text/css';\n\n      if (nonce != null) {\n        style.setAttribute('nonce', nonce);\n      }\n\n      if (style.styleSheet) {\n        style.styleSheet.cssText = css;\n      } else {\n        style.appendChild(doc.createTextNode(css));\n      }\n\n      head.appendChild(style);\n    }\n  };\n\n  var addResizeListener = function addResizeListener(element, fn) {\n    if (attachEvent) {\n      element.attachEvent('onresize', fn);\n    } else {\n      if (!element.__resizeTriggers__) {\n        var doc = element.ownerDocument;\n        var elementStyle = _window.getComputedStyle(element);\n        if (elementStyle && elementStyle.position == 'static') {\n          element.style.position = 'relative';\n        }\n        createStyles(doc);\n        element.__resizeLast__ = {};\n        element.__resizeListeners__ = [];\n        (element.__resizeTriggers__ = doc.createElement('div')).className = 'resize-triggers';\n        element.__resizeTriggers__.innerHTML = '<div class=\"expand-trigger\"><div></div></div>' + '<div class=\"contract-trigger\"></div>';\n        element.appendChild(element.__resizeTriggers__);\n        resetTriggers(element);\n        element.addEventListener('scroll', scrollListener, true);\n\n        /* Listen for a css animation to detect element display/re-attach */\n        if (animationstartevent) {\n          element.__resizeTriggers__.__animationListener__ = function animationListener(e) {\n            if (e.animationName == animationName) {\n              resetTriggers(element);\n            }\n          };\n          element.__resizeTriggers__.addEventListener(animationstartevent, element.__resizeTriggers__.__animationListener__);\n        }\n      }\n      element.__resizeListeners__.push(fn);\n    }\n  };\n\n  var removeResizeListener = function removeResizeListener(element, fn) {\n    if (attachEvent) {\n      element.detachEvent('onresize', fn);\n    } else {\n      element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1);\n      if (!element.__resizeListeners__.length) {\n        element.removeEventListener('scroll', scrollListener, true);\n        if (element.__resizeTriggers__.__animationListener__) {\n          element.__resizeTriggers__.removeEventListener(animationstartevent, element.__resizeTriggers__.__animationListener__);\n          element.__resizeTriggers__.__animationListener__ = null;\n        }\n        try {\n          element.__resizeTriggers__ = !element.removeChild(element.__resizeTriggers__);\n        } catch (e) {\n          // Preact compat; see developit/preact-compat/issues/228\n        }\n      }\n    }\n  };\n\n  return {\n    addResizeListener: addResizeListener,\n    removeResizeListener: removeResizeListener\n  };\n}","import _extends from 'babel-runtime/helpers/extends';\nimport _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport * as React from 'react';\nimport createDetectElementResize from '../vendor/detectElementResize';\n\nvar AutoSizer = function (_React$PureComponent) {\n  _inherits(AutoSizer, _React$PureComponent);\n\n  function AutoSizer() {\n    var _ref;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, AutoSizer);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = AutoSizer.__proto__ || _Object$getPrototypeOf(AutoSizer)).call.apply(_ref, [this].concat(args))), _this), _this.state = {\n      height: _this.props.defaultHeight || 0,\n      width: _this.props.defaultWidth || 0\n    }, _this._onResize = function () {\n      var _this$props = _this.props,\n          disableHeight = _this$props.disableHeight,\n          disableWidth = _this$props.disableWidth,\n          onResize = _this$props.onResize;\n\n\n      if (_this._parentNode) {\n        // Guard against AutoSizer component being removed from the DOM immediately after being added.\n        // This can result in invalid style values which can result in NaN values if we don't handle them.\n        // See issue #150 for more context.\n\n        var _height = _this._parentNode.offsetHeight || 0;\n        var _width = _this._parentNode.offsetWidth || 0;\n\n        var _style = window.getComputedStyle(_this._parentNode) || {};\n        var paddingLeft = parseInt(_style.paddingLeft, 10) || 0;\n        var paddingRight = parseInt(_style.paddingRight, 10) || 0;\n        var paddingTop = parseInt(_style.paddingTop, 10) || 0;\n        var paddingBottom = parseInt(_style.paddingBottom, 10) || 0;\n\n        var newHeight = _height - paddingTop - paddingBottom;\n        var newWidth = _width - paddingLeft - paddingRight;\n\n        if (!disableHeight && _this.state.height !== newHeight || !disableWidth && _this.state.width !== newWidth) {\n          _this.setState({\n            height: _height - paddingTop - paddingBottom,\n            width: _width - paddingLeft - paddingRight\n          });\n\n          onResize({ height: _height, width: _width });\n        }\n      }\n    }, _this._setRef = function (autoSizer) {\n      _this._autoSizer = autoSizer;\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(AutoSizer, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var nonce = this.props.nonce;\n\n      if (this._autoSizer && this._autoSizer.parentNode && this._autoSizer.parentNode.ownerDocument && this._autoSizer.parentNode.ownerDocument.defaultView && this._autoSizer.parentNode instanceof this._autoSizer.parentNode.ownerDocument.defaultView.HTMLElement) {\n        // Delay access of parentNode until mount.\n        // This handles edge-cases where the component has already been unmounted before its ref has been set,\n        // As well as libraries like react-lite which have a slightly different lifecycle.\n        this._parentNode = this._autoSizer.parentNode;\n\n        // Defer requiring resize handler in order to support server-side rendering.\n        // See issue #41\n        this._detectElementResize = createDetectElementResize(nonce);\n        this._detectElementResize.addResizeListener(this._parentNode, this._onResize);\n\n        this._onResize();\n      }\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      if (this._detectElementResize && this._parentNode) {\n        this._detectElementResize.removeResizeListener(this._parentNode, this._onResize);\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _props = this.props,\n          children = _props.children,\n          className = _props.className,\n          disableHeight = _props.disableHeight,\n          disableWidth = _props.disableWidth,\n          style = _props.style;\n      var _state = this.state,\n          height = _state.height,\n          width = _state.width;\n\n      // Outer div should not force width/height since that may prevent containers from shrinking.\n      // Inner component should overflow and use calculated width/height.\n      // See issue #68 for more information.\n\n      var outerStyle = { overflow: 'visible' };\n      var childParams = {};\n\n      if (!disableHeight) {\n        outerStyle.height = 0;\n        childParams.height = height;\n      }\n\n      if (!disableWidth) {\n        outerStyle.width = 0;\n        childParams.width = width;\n      }\n\n      /**\n       * TODO: Avoid rendering children before the initial measurements have been collected.\n       * At best this would just be wasting cycles.\n       * Add this check into version 10 though as it could break too many ref callbacks in version 9.\n       * Note that if default width/height props were provided this would still work with SSR.\n      if (\n        height !== 0 &&\n        width !== 0\n      ) {\n        child = children({ height, width })\n      }\n      */\n\n      return React.createElement(\n        'div',\n        {\n          className: className,\n          ref: this._setRef,\n          style: _extends({}, outerStyle, style) },\n        children(childParams)\n      );\n    }\n  }]);\n\n  return AutoSizer;\n}(React.PureComponent);\n\nAutoSizer.defaultProps = {\n  onResize: function onResize() {},\n  disableHeight: false,\n  disableWidth: false,\n  style: {}\n};\nAutoSizer.propTypes = process.env.NODE_ENV === 'production' ? null : {\n  /** Function responsible for rendering children.*/\n  children: PropTypes.func.isRequired,\n\n\n  /** Optional custom CSS class name to attach to root AutoSizer element.  */\n  className: PropTypes.string,\n\n\n  /** Default height to use for initial render; useful for SSR */\n  defaultHeight: PropTypes.number,\n\n\n  /** Default width to use for initial render; useful for SSR */\n  defaultWidth: PropTypes.number,\n\n\n  /** Disable dynamic :height property */\n  disableHeight: PropTypes.bool.isRequired,\n\n\n  /** Disable dynamic :width property */\n  disableWidth: PropTypes.bool.isRequired,\n\n\n  /** Nonce of the inlined stylesheet for Content Security Policy */\n  nonce: PropTypes.string,\n\n\n  /** Callback to be invoked on-resize */\n  onResize: PropTypes.func.isRequired,\n\n\n  /** Optional inline style */\n  style: PropTypes.object\n};\nexport default AutoSizer;\nimport PropTypes from 'prop-types';","import _Object$keys from 'babel-runtime/core-js/object/keys';\n/**\n * Helper utility that updates the specified callback whenever any of the specified indices have changed.\n */\nexport default function createCallbackMemoizer() {\n  var requireAllKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n  var cachedIndices = {};\n\n  return function (_ref) {\n    var callback = _ref.callback,\n        indices = _ref.indices;\n\n    var keys = _Object$keys(indices);\n    var allInitialized = !requireAllKeys || keys.every(function (key) {\n      var value = indices[key];\n      return Array.isArray(value) ? value.length > 0 : value >= 0;\n    });\n    var indexChanged = keys.length !== _Object$keys(cachedIndices).length || keys.some(function (key) {\n      var cachedValue = cachedIndices[key];\n      var value = indices[key];\n\n      return Array.isArray(value) ? cachedValue.join(',') !== value.join(',') : cachedValue !== value;\n    });\n\n    cachedIndices = indices;\n\n    if (allInitialized && indexChanged) {\n      callback(indices);\n    }\n  };\n}","import _extends from 'babel-runtime/helpers/extends';\nimport _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport cn from 'classnames';\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\nimport { polyfill } from 'react-lifecycles-compat';\nimport createCallbackMemoizer from '../utils/createCallbackMemoizer';\nimport getScrollbarSize from 'dom-helpers/util/scrollbarSize';\n\n// @TODO Merge Collection and CollectionView\n\n/**\n * Specifies the number of milliseconds during which to disable pointer events while a scroll is in progress.\n * This improves performance and makes scrolling smoother.\n */\nvar IS_SCROLLING_TIMEOUT = 150;\n\n/**\n * Controls whether the Grid updates the DOM element's scrollLeft/scrollTop based on the current state or just observes it.\n * This prevents Grid from interrupting mouse-wheel animations (see issue #2).\n */\nvar SCROLL_POSITION_CHANGE_REASONS = {\n  OBSERVED: 'observed',\n  REQUESTED: 'requested'\n};\n\n/**\n * Monitors changes in properties (eg. cellCount) and state (eg. scroll offsets) to determine when rendering needs to occur.\n * This component does not render any visible content itself; it defers to the specified :cellLayoutManager.\n */\n\nvar CollectionView = function (_React$PureComponent) {\n  _inherits(CollectionView, _React$PureComponent);\n\n  // Invokes callbacks only when their values have changed.\n  function CollectionView() {\n    var _ref;\n\n    _classCallCheck(this, CollectionView);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    // If this component is being rendered server-side, getScrollbarSize() will return undefined.\n    // We handle this case in componentDidMount()\n    var _this = _possibleConstructorReturn(this, (_ref = CollectionView.__proto__ || _Object$getPrototypeOf(CollectionView)).call.apply(_ref, [this].concat(args)));\n\n    _this.state = {\n      isScrolling: false,\n      scrollLeft: 0,\n      scrollTop: 0\n    };\n    _this._calculateSizeAndPositionDataOnNextUpdate = false;\n    _this._onSectionRenderedMemoizer = createCallbackMemoizer();\n    _this._onScrollMemoizer = createCallbackMemoizer(false);\n\n    _this._invokeOnSectionRenderedHelper = function () {\n      var _this$props = _this.props,\n          cellLayoutManager = _this$props.cellLayoutManager,\n          onSectionRendered = _this$props.onSectionRendered;\n\n\n      _this._onSectionRenderedMemoizer({\n        callback: onSectionRendered,\n        indices: {\n          indices: cellLayoutManager.getLastRenderedIndices()\n        }\n      });\n    };\n\n    _this._setScrollingContainerRef = function (ref) {\n      _this._scrollingContainer = ref;\n    };\n\n    _this._updateScrollPositionForScrollToCell = function () {\n      var _this$props2 = _this.props,\n          cellLayoutManager = _this$props2.cellLayoutManager,\n          height = _this$props2.height,\n          scrollToAlignment = _this$props2.scrollToAlignment,\n          scrollToCell = _this$props2.scrollToCell,\n          width = _this$props2.width;\n      var _this$state = _this.state,\n          scrollLeft = _this$state.scrollLeft,\n          scrollTop = _this$state.scrollTop;\n\n\n      if (scrollToCell >= 0) {\n        var scrollPosition = cellLayoutManager.getScrollPositionForCell({\n          align: scrollToAlignment,\n          cellIndex: scrollToCell,\n          height: height,\n          scrollLeft: scrollLeft,\n          scrollTop: scrollTop,\n          width: width\n        });\n\n        if (scrollPosition.scrollLeft !== scrollLeft || scrollPosition.scrollTop !== scrollTop) {\n          _this._setScrollPosition(scrollPosition);\n        }\n      }\n    };\n\n    _this._onScroll = function (event) {\n      // In certain edge-cases React dispatches an onScroll event with an invalid target.scrollLeft / target.scrollTop.\n      // This invalid event can be detected by comparing event.target to this component's scrollable DOM element.\n      // See issue #404 for more information.\n      if (event.target !== _this._scrollingContainer) {\n        return;\n      }\n\n      // Prevent pointer events from interrupting a smooth scroll\n      _this._enablePointerEventsAfterDelay();\n\n      // When this component is shrunk drastically, React dispatches a series of back-to-back scroll events,\n      // Gradually converging on a scrollTop that is within the bounds of the new, smaller height.\n      // This causes a series of rapid renders that is slow for long lists.\n      // We can avoid that by doing some simple bounds checking to ensure that scrollTop never exceeds the total height.\n      var _this$props3 = _this.props,\n          cellLayoutManager = _this$props3.cellLayoutManager,\n          height = _this$props3.height,\n          isScrollingChange = _this$props3.isScrollingChange,\n          width = _this$props3.width;\n\n      var scrollbarSize = _this._scrollbarSize;\n\n      var _cellLayoutManager$ge = cellLayoutManager.getTotalSize(),\n          totalHeight = _cellLayoutManager$ge.height,\n          totalWidth = _cellLayoutManager$ge.width;\n\n      var scrollLeft = Math.max(0, Math.min(totalWidth - width + scrollbarSize, event.target.scrollLeft));\n      var scrollTop = Math.max(0, Math.min(totalHeight - height + scrollbarSize, event.target.scrollTop));\n\n      // Certain devices (like Apple touchpad) rapid-fire duplicate events.\n      // Don't force a re-render if this is the case.\n      // The mouse may move faster then the animation frame does.\n      // Use requestAnimationFrame to avoid over-updating.\n      if (_this.state.scrollLeft !== scrollLeft || _this.state.scrollTop !== scrollTop) {\n        // Browsers with cancelable scroll events (eg. Firefox) interrupt scrolling animations if scrollTop/scrollLeft is set.\n        // Other browsers (eg. Safari) don't scroll as well without the help under certain conditions (DOM or style changes during scrolling).\n        // All things considered, this seems to be the best current work around that I'm aware of.\n        // For more information see https://github.com/bvaughn/react-virtualized/pull/124\n        var scrollPositionChangeReason = event.cancelable ? SCROLL_POSITION_CHANGE_REASONS.OBSERVED : SCROLL_POSITION_CHANGE_REASONS.REQUESTED;\n\n        // Synchronously set :isScrolling the first time (since _setNextState will reschedule its animation frame each time it's called)\n        if (!_this.state.isScrolling) {\n          isScrollingChange(true);\n        }\n\n        _this.setState({\n          isScrolling: true,\n          scrollLeft: scrollLeft,\n          scrollPositionChangeReason: scrollPositionChangeReason,\n          scrollTop: scrollTop\n        });\n      }\n\n      _this._invokeOnScrollMemoizer({\n        scrollLeft: scrollLeft,\n        scrollTop: scrollTop,\n        totalWidth: totalWidth,\n        totalHeight: totalHeight\n      });\n    };\n\n    _this._scrollbarSize = getScrollbarSize();\n    if (_this._scrollbarSize === undefined) {\n      _this._scrollbarSizeMeasured = false;\n      _this._scrollbarSize = 0;\n    } else {\n      _this._scrollbarSizeMeasured = true;\n    }\n    return _this;\n  }\n\n  /**\n   * Forced recompute of cell sizes and positions.\n   * This function should be called if cell sizes have changed but nothing else has.\n   * Since cell positions are calculated by callbacks, the collection view has no way of detecting when the underlying data has changed.\n   */\n\n\n  _createClass(CollectionView, [{\n    key: 'recomputeCellSizesAndPositions',\n    value: function recomputeCellSizesAndPositions() {\n      this._calculateSizeAndPositionDataOnNextUpdate = true;\n      this.forceUpdate();\n    }\n\n    /* ---------------------------- Component lifecycle methods ---------------------------- */\n\n    /**\n     * @private\n     * This method updates scrollLeft/scrollTop in state for the following conditions:\n     * 1) Empty content (0 rows or columns)\n     * 2) New scroll props overriding the current state\n     * 3) Cells-count or cells-size has changed, making previous scroll offsets invalid\n     */\n\n  }, {\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _props = this.props,\n          cellLayoutManager = _props.cellLayoutManager,\n          scrollLeft = _props.scrollLeft,\n          scrollToCell = _props.scrollToCell,\n          scrollTop = _props.scrollTop;\n\n      // If this component was first rendered server-side, scrollbar size will be undefined.\n      // In that event we need to remeasure.\n\n      if (!this._scrollbarSizeMeasured) {\n        this._scrollbarSize = getScrollbarSize();\n        this._scrollbarSizeMeasured = true;\n        this.setState({});\n      }\n\n      if (scrollToCell >= 0) {\n        this._updateScrollPositionForScrollToCell();\n      } else if (scrollLeft >= 0 || scrollTop >= 0) {\n        this._setScrollPosition({ scrollLeft: scrollLeft, scrollTop: scrollTop });\n      }\n\n      // Update onSectionRendered callback.\n      this._invokeOnSectionRenderedHelper();\n\n      var _cellLayoutManager$ge2 = cellLayoutManager.getTotalSize(),\n          totalHeight = _cellLayoutManager$ge2.height,\n          totalWidth = _cellLayoutManager$ge2.width;\n\n      // Initialize onScroll callback.\n\n\n      this._invokeOnScrollMemoizer({\n        scrollLeft: scrollLeft || 0,\n        scrollTop: scrollTop || 0,\n        totalHeight: totalHeight,\n        totalWidth: totalWidth\n      });\n    }\n  }, {\n    key: 'componentDidUpdate',\n    value: function componentDidUpdate(prevProps, prevState) {\n      var _props2 = this.props,\n          height = _props2.height,\n          scrollToAlignment = _props2.scrollToAlignment,\n          scrollToCell = _props2.scrollToCell,\n          width = _props2.width;\n      var _state = this.state,\n          scrollLeft = _state.scrollLeft,\n          scrollPositionChangeReason = _state.scrollPositionChangeReason,\n          scrollTop = _state.scrollTop;\n\n      // Make sure requested changes to :scrollLeft or :scrollTop get applied.\n      // Assigning to scrollLeft/scrollTop tells the browser to interrupt any running scroll animations,\n      // And to discard any pending async changes to the scroll position that may have happened in the meantime (e.g. on a separate scrolling thread).\n      // So we only set these when we require an adjustment of the scroll position.\n      // See issue #2 for more information.\n\n      if (scrollPositionChangeReason === SCROLL_POSITION_CHANGE_REASONS.REQUESTED) {\n        if (scrollLeft >= 0 && scrollLeft !== prevState.scrollLeft && scrollLeft !== this._scrollingContainer.scrollLeft) {\n          this._scrollingContainer.scrollLeft = scrollLeft;\n        }\n        if (scrollTop >= 0 && scrollTop !== prevState.scrollTop && scrollTop !== this._scrollingContainer.scrollTop) {\n          this._scrollingContainer.scrollTop = scrollTop;\n        }\n      }\n\n      // Update scroll offsets if the current :scrollToCell values requires it\n      if (height !== prevProps.height || scrollToAlignment !== prevProps.scrollToAlignment || scrollToCell !== prevProps.scrollToCell || width !== prevProps.width) {\n        this._updateScrollPositionForScrollToCell();\n      }\n\n      // Update onRowsRendered callback if start/stop indices have changed\n      this._invokeOnSectionRenderedHelper();\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      if (this._disablePointerEventsTimeoutId) {\n        clearTimeout(this._disablePointerEventsTimeoutId);\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _props3 = this.props,\n          autoHeight = _props3.autoHeight,\n          cellCount = _props3.cellCount,\n          cellLayoutManager = _props3.cellLayoutManager,\n          className = _props3.className,\n          height = _props3.height,\n          horizontalOverscanSize = _props3.horizontalOverscanSize,\n          id = _props3.id,\n          noContentRenderer = _props3.noContentRenderer,\n          style = _props3.style,\n          verticalOverscanSize = _props3.verticalOverscanSize,\n          width = _props3.width;\n      var _state2 = this.state,\n          isScrolling = _state2.isScrolling,\n          scrollLeft = _state2.scrollLeft,\n          scrollTop = _state2.scrollTop;\n\n      // Memoization reset\n\n      if (this._lastRenderedCellCount !== cellCount || this._lastRenderedCellLayoutManager !== cellLayoutManager || this._calculateSizeAndPositionDataOnNextUpdate) {\n        this._lastRenderedCellCount = cellCount;\n        this._lastRenderedCellLayoutManager = cellLayoutManager;\n        this._calculateSizeAndPositionDataOnNextUpdate = false;\n\n        cellLayoutManager.calculateSizeAndPositionData();\n      }\n\n      var _cellLayoutManager$ge3 = cellLayoutManager.getTotalSize(),\n          totalHeight = _cellLayoutManager$ge3.height,\n          totalWidth = _cellLayoutManager$ge3.width;\n\n      // Safely expand the rendered area by the specified overscan amount\n\n\n      var left = Math.max(0, scrollLeft - horizontalOverscanSize);\n      var top = Math.max(0, scrollTop - verticalOverscanSize);\n      var right = Math.min(totalWidth, scrollLeft + width + horizontalOverscanSize);\n      var bottom = Math.min(totalHeight, scrollTop + height + verticalOverscanSize);\n\n      var childrenToDisplay = height > 0 && width > 0 ? cellLayoutManager.cellRenderers({\n        height: bottom - top,\n        isScrolling: isScrolling,\n        width: right - left,\n        x: left,\n        y: top\n      }) : [];\n\n      var collectionStyle = {\n        boxSizing: 'border-box',\n        direction: 'ltr',\n        height: autoHeight ? 'auto' : height,\n        position: 'relative',\n        WebkitOverflowScrolling: 'touch',\n        width: width,\n        willChange: 'transform'\n      };\n\n      // Force browser to hide scrollbars when we know they aren't necessary.\n      // Otherwise once scrollbars appear they may not disappear again.\n      // For more info see issue #116\n      var verticalScrollBarSize = totalHeight > height ? this._scrollbarSize : 0;\n      var horizontalScrollBarSize = totalWidth > width ? this._scrollbarSize : 0;\n\n      // Also explicitly init styles to 'auto' if scrollbars are required.\n      // This works around an obscure edge case where external CSS styles have not yet been loaded,\n      // But an initial scroll index of offset is set as an external prop.\n      // Without this style, Grid would render the correct range of cells but would NOT update its internal offset.\n      // This was originally reported via clauderic/react-infinite-calendar/issues/23\n      collectionStyle.overflowX = totalWidth + verticalScrollBarSize <= width ? 'hidden' : 'auto';\n      collectionStyle.overflowY = totalHeight + horizontalScrollBarSize <= height ? 'hidden' : 'auto';\n\n      return React.createElement(\n        'div',\n        {\n          ref: this._setScrollingContainerRef,\n          'aria-label': this.props['aria-label'],\n          className: cn('ReactVirtualized__Collection', className),\n          id: id,\n          onScroll: this._onScroll,\n          role: 'grid',\n          style: _extends({}, collectionStyle, style),\n          tabIndex: 0 },\n        cellCount > 0 && React.createElement(\n          'div',\n          {\n            className: 'ReactVirtualized__Collection__innerScrollContainer',\n            style: {\n              height: totalHeight,\n              maxHeight: totalHeight,\n              maxWidth: totalWidth,\n              overflow: 'hidden',\n              pointerEvents: isScrolling ? 'none' : '',\n              width: totalWidth\n            } },\n          childrenToDisplay\n        ),\n        cellCount === 0 && noContentRenderer()\n      );\n    }\n\n    /* ---------------------------- Helper methods ---------------------------- */\n\n    /**\n     * Sets an :isScrolling flag for a small window of time.\n     * This flag is used to disable pointer events on the scrollable portion of the Collection.\n     * This prevents jerky/stuttery mouse-wheel scrolling.\n     */\n\n  }, {\n    key: '_enablePointerEventsAfterDelay',\n    value: function _enablePointerEventsAfterDelay() {\n      var _this2 = this;\n\n      if (this._disablePointerEventsTimeoutId) {\n        clearTimeout(this._disablePointerEventsTimeoutId);\n      }\n\n      this._disablePointerEventsTimeoutId = setTimeout(function () {\n        var isScrollingChange = _this2.props.isScrollingChange;\n\n\n        isScrollingChange(false);\n\n        _this2._disablePointerEventsTimeoutId = null;\n        _this2.setState({\n          isScrolling: false\n        });\n      }, IS_SCROLLING_TIMEOUT);\n    }\n  }, {\n    key: '_invokeOnScrollMemoizer',\n    value: function _invokeOnScrollMemoizer(_ref2) {\n      var _this3 = this;\n\n      var scrollLeft = _ref2.scrollLeft,\n          scrollTop = _ref2.scrollTop,\n          totalHeight = _ref2.totalHeight,\n          totalWidth = _ref2.totalWidth;\n\n      this._onScrollMemoizer({\n        callback: function callback(_ref3) {\n          var scrollLeft = _ref3.scrollLeft,\n              scrollTop = _ref3.scrollTop;\n          var _props4 = _this3.props,\n              height = _props4.height,\n              onScroll = _props4.onScroll,\n              width = _props4.width;\n\n\n          onScroll({\n            clientHeight: height,\n            clientWidth: width,\n            scrollHeight: totalHeight,\n            scrollLeft: scrollLeft,\n            scrollTop: scrollTop,\n            scrollWidth: totalWidth\n          });\n        },\n        indices: {\n          scrollLeft: scrollLeft,\n          scrollTop: scrollTop\n        }\n      });\n    }\n  }, {\n    key: '_setScrollPosition',\n    value: function _setScrollPosition(_ref4) {\n      var scrollLeft = _ref4.scrollLeft,\n          scrollTop = _ref4.scrollTop;\n\n      var newState = {\n        scrollPositionChangeReason: SCROLL_POSITION_CHANGE_REASONS.REQUESTED\n      };\n\n      if (scrollLeft >= 0) {\n        newState.scrollLeft = scrollLeft;\n      }\n\n      if (scrollTop >= 0) {\n        newState.scrollTop = scrollTop;\n      }\n\n      if (scrollLeft >= 0 && scrollLeft !== this.state.scrollLeft || scrollTop >= 0 && scrollTop !== this.state.scrollTop) {\n        this.setState(newState);\n      }\n    }\n  }], [{\n    key: 'getDerivedStateFromProps',\n    value: function getDerivedStateFromProps(nextProps, prevState) {\n      if (nextProps.cellCount === 0 && (prevState.scrollLeft !== 0 || prevState.scrollTop !== 0)) {\n        return {\n          scrollLeft: 0,\n          scrollTop: 0\n        };\n      } else if (nextProps.scrollLeft !== prevState.scrollLeft || nextProps.scrollTop !== prevState.scrollTop) {\n        return {\n          scrollLeft: nextProps.scrollLeft != null ? nextProps.scrollLeft : prevState.scrollLeft,\n          scrollTop: nextProps.scrollTop != null ? nextProps.scrollTop : prevState.scrollTop\n        };\n      }\n\n      return null;\n    }\n  }]);\n\n  return CollectionView;\n}(React.PureComponent);\n\nCollectionView.defaultProps = {\n  'aria-label': 'grid',\n  horizontalOverscanSize: 0,\n  noContentRenderer: function noContentRenderer() {\n    return null;\n  },\n  onScroll: function onScroll() {\n    return null;\n  },\n  onSectionRendered: function onSectionRendered() {\n    return null;\n  },\n  scrollToAlignment: 'auto',\n  scrollToCell: -1,\n  style: {},\n  verticalOverscanSize: 0\n};\nCollectionView.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  'aria-label': PropTypes.string,\n\n  /**\n   * Removes fixed height from the scrollingContainer so that the total height\n   * of rows can stretch the window. Intended for use with WindowScroller\n   */\n  autoHeight: PropTypes.bool,\n\n  /**\n   * Number of cells in collection.\n   */\n  cellCount: PropTypes.number.isRequired,\n\n  /**\n   * Calculates cell sizes and positions and manages rendering the appropriate cells given a specified window.\n   */\n  cellLayoutManager: PropTypes.object.isRequired,\n\n  /**\n   * Optional custom CSS class name to attach to root Collection element.\n   */\n  className: PropTypes.string,\n\n  /**\n   * Height of Collection; this property determines the number of visible (vs virtualized) rows.\n   */\n  height: PropTypes.number.isRequired,\n\n  /**\n   * Optional custom id to attach to root Collection element.\n   */\n  id: PropTypes.string,\n\n  /**\n   * Enables the `Collection` to horiontally \"overscan\" its content similar to how `Grid` does.\n   * This can reduce flicker around the edges when a user scrolls quickly.\n   */\n  horizontalOverscanSize: PropTypes.number.isRequired,\n\n  isScrollingChange: PropTypes.func,\n\n  /**\n   * Optional renderer to be used in place of rows when either :rowCount or :cellCount is 0.\n   */\n  noContentRenderer: PropTypes.func.isRequired,\n\n  /**\n   * Callback invoked whenever the scroll offset changes within the inner scrollable region.\n   * This callback can be used to sync scrolling between lists, tables, or grids.\n   * ({ clientHeight, clientWidth, scrollHeight, scrollLeft, scrollTop, scrollWidth }): void\n   */\n  onScroll: PropTypes.func.isRequired,\n\n  /**\n   * Callback invoked with information about the section of the Collection that was just rendered.\n   * This callback is passed a named :indices parameter which is an Array of the most recently rendered section indices.\n   */\n  onSectionRendered: PropTypes.func.isRequired,\n\n  /**\n   * Horizontal offset.\n   */\n  scrollLeft: PropTypes.number,\n\n  /**\n   * Controls scroll-to-cell behavior of the Grid.\n   * The default (\"auto\") scrolls the least amount possible to ensure that the specified cell is fully visible.\n   * Use \"start\" to align cells to the top/left of the Grid and \"end\" to align bottom/right.\n   */\n  scrollToAlignment: PropTypes.oneOf(['auto', 'end', 'start', 'center']).isRequired,\n\n  /**\n   * Cell index to ensure visible (by forcefully scrolling if necessary).\n   */\n  scrollToCell: PropTypes.number.isRequired,\n\n  /**\n   * Vertical offset.\n   */\n  scrollTop: PropTypes.number,\n\n  /**\n   * Optional custom inline style to attach to root Collection element.\n   */\n  style: PropTypes.object,\n\n  /**\n   * Enables the `Collection` to vertically \"overscan\" its content similar to how `Grid` does.\n   * This can reduce flicker around the edges when a user scrolls quickly.\n   */\n  verticalOverscanSize: PropTypes.number.isRequired,\n\n  /**\n   * Width of Collection; this property determines the number of visible (vs virtualized) columns.\n   */\n  width: PropTypes.number.isRequired\n} : {};\n\n\npolyfill(CollectionView);\n\nexport default CollectionView;","import _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\n\n/**\n * A section of the Window.\n * Window Sections are used to group nearby cells.\n * This enables us to more quickly determine which cells to display in a given region of the Window.\n * Sections have a fixed size and contain 0 to many cells (tracked by their indices).\n */\nvar Section = function () {\n  function Section(_ref) {\n    var height = _ref.height,\n        width = _ref.width,\n        x = _ref.x,\n        y = _ref.y;\n\n    _classCallCheck(this, Section);\n\n    this.height = height;\n    this.width = width;\n    this.x = x;\n    this.y = y;\n\n    this._indexMap = {};\n    this._indices = [];\n  }\n\n  /** Add a cell to this section. */\n\n\n  _createClass(Section, [{\n    key: 'addCellIndex',\n    value: function addCellIndex(_ref2) {\n      var index = _ref2.index;\n\n      if (!this._indexMap[index]) {\n        this._indexMap[index] = true;\n        this._indices.push(index);\n      }\n    }\n\n    /** Get all cell indices that have been added to this section. */\n\n  }, {\n    key: 'getCellIndices',\n    value: function getCellIndices() {\n      return this._indices;\n    }\n\n    /** Intended for debugger/test purposes only */\n\n  }, {\n    key: 'toString',\n    value: function toString() {\n      return this.x + ',' + this.y + ' ' + this.width + 'x' + this.height;\n    }\n  }]);\n\n  return Section;\n}();\n\nexport default Section;\nimport { bpfrpt_proptype_Index } from './types';\nimport { bpfrpt_proptype_SizeAndPositionInfo } from './types';","import _Object$keys from 'babel-runtime/core-js/object/keys';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\n/**\n * Window Sections are used to group nearby cells.\n * This enables us to more quickly determine which cells to display in a given region of the Window.\n * \n */\nimport Section from './Section';\n\n\nvar SECTION_SIZE = 100;\n\n/**\n * Contains 0 to many Sections.\n * Grows (and adds Sections) dynamically as cells are registered.\n * Automatically adds cells to the appropriate Section(s).\n */\nvar SectionManager = function () {\n  function SectionManager() {\n    var sectionSize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : SECTION_SIZE;\n\n    _classCallCheck(this, SectionManager);\n\n    this._sectionSize = sectionSize;\n\n    this._cellMetadata = [];\n    this._sections = {};\n  }\n\n  /**\n   * Gets all cell indices contained in the specified region.\n   * A region may encompass 1 or more Sections.\n   */\n\n\n  _createClass(SectionManager, [{\n    key: 'getCellIndices',\n    value: function getCellIndices(_ref) {\n      var height = _ref.height,\n          width = _ref.width,\n          x = _ref.x,\n          y = _ref.y;\n\n      var indices = {};\n\n      this.getSections({ height: height, width: width, x: x, y: y }).forEach(function (section) {\n        return section.getCellIndices().forEach(function (index) {\n          indices[index] = index;\n        });\n      });\n\n      // Object keys are strings; this function returns numbers\n      return _Object$keys(indices).map(function (index) {\n        return indices[index];\n      });\n    }\n\n    /** Get size and position information for the cell specified. */\n\n  }, {\n    key: 'getCellMetadata',\n    value: function getCellMetadata(_ref2) {\n      var index = _ref2.index;\n\n      return this._cellMetadata[index];\n    }\n\n    /** Get all Sections overlapping the specified region. */\n\n  }, {\n    key: 'getSections',\n    value: function getSections(_ref3) {\n      var height = _ref3.height,\n          width = _ref3.width,\n          x = _ref3.x,\n          y = _ref3.y;\n\n      var sectionXStart = Math.floor(x / this._sectionSize);\n      var sectionXStop = Math.floor((x + width - 1) / this._sectionSize);\n      var sectionYStart = Math.floor(y / this._sectionSize);\n      var sectionYStop = Math.floor((y + height - 1) / this._sectionSize);\n\n      var sections = [];\n\n      for (var sectionX = sectionXStart; sectionX <= sectionXStop; sectionX++) {\n        for (var sectionY = sectionYStart; sectionY <= sectionYStop; sectionY++) {\n          var key = sectionX + '.' + sectionY;\n\n          if (!this._sections[key]) {\n            this._sections[key] = new Section({\n              height: this._sectionSize,\n              width: this._sectionSize,\n              x: sectionX * this._sectionSize,\n              y: sectionY * this._sectionSize\n            });\n          }\n\n          sections.push(this._sections[key]);\n        }\n      }\n\n      return sections;\n    }\n\n    /** Total number of Sections based on the currently registered cells. */\n\n  }, {\n    key: 'getTotalSectionCount',\n    value: function getTotalSectionCount() {\n      return _Object$keys(this._sections).length;\n    }\n\n    /** Intended for debugger/test purposes only */\n\n  }, {\n    key: 'toString',\n    value: function toString() {\n      var _this = this;\n\n      return _Object$keys(this._sections).map(function (index) {\n        return _this._sections[index].toString();\n      });\n    }\n\n    /** Adds a cell to the appropriate Sections and registers it metadata for later retrievable. */\n\n  }, {\n    key: 'registerCell',\n    value: function registerCell(_ref4) {\n      var cellMetadatum = _ref4.cellMetadatum,\n          index = _ref4.index;\n\n      this._cellMetadata[index] = cellMetadatum;\n\n      this.getSections(cellMetadatum).forEach(function (section) {\n        return section.addCellIndex({ index: index });\n      });\n    }\n  }]);\n\n  return SectionManager;\n}();\n\nexport default SectionManager;\nimport { bpfrpt_proptype_Index } from './types';\nimport { bpfrpt_proptype_SizeAndPositionInfo } from './types';","/**\n * Determines a new offset that ensures a certain cell is visible, given the current offset.\n * If the cell is already visible then the current offset will be returned.\n * If the current offset is too great or small, it will be adjusted just enough to ensure the specified index is visible.\n *\n * @param align Desired alignment within container; one of \"auto\" (default), \"start\", or \"end\"\n * @param cellOffset Offset (x or y) position for cell\n * @param cellSize Size (width or height) of cell\n * @param containerSize Total size (width or height) of the container\n * @param currentOffset Container's current (x or y) offset\n * @return Offset to use to ensure the specified cell is visible\n */\nexport default function getUpdatedOffsetForIndex(_ref) {\n  var _ref$align = _ref.align,\n      align = _ref$align === undefined ? 'auto' : _ref$align,\n      cellOffset = _ref.cellOffset,\n      cellSize = _ref.cellSize,\n      containerSize = _ref.containerSize,\n      currentOffset = _ref.currentOffset;\n\n  var maxOffset = cellOffset;\n  var minOffset = maxOffset - containerSize + cellSize;\n\n  switch (align) {\n    case 'start':\n      return maxOffset;\n    case 'end':\n      return minOffset;\n    case 'center':\n      return maxOffset - (containerSize - cellSize) / 2;\n    default:\n      return Math.max(minOffset, Math.min(maxOffset, currentOffset));\n  }\n}","import _extends from 'babel-runtime/helpers/extends';\nimport _objectWithoutProperties from 'babel-runtime/helpers/objectWithoutProperties';\nimport _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\nimport CollectionView from './CollectionView';\nimport _calculateSizeAndPositionData from './utils/calculateSizeAndPositionData';\nimport getUpdatedOffsetForIndex from '../utils/getUpdatedOffsetForIndex';\n\n/**\n * Renders scattered or non-linear data.\n * Unlike Grid, which renders checkerboard data, Collection can render arbitrarily positioned- even overlapping- data.\n */\nvar Collection = function (_React$PureComponent) {\n  _inherits(Collection, _React$PureComponent);\n\n  function Collection(props, context) {\n    _classCallCheck(this, Collection);\n\n    var _this = _possibleConstructorReturn(this, (Collection.__proto__ || _Object$getPrototypeOf(Collection)).call(this, props, context));\n\n    _this._cellMetadata = [];\n    _this._lastRenderedCellIndices = [];\n\n    // Cell cache during scroll (for perforamnce)\n    _this._cellCache = [];\n\n    _this._isScrollingChange = _this._isScrollingChange.bind(_this);\n    _this._setCollectionViewRef = _this._setCollectionViewRef.bind(_this);\n    return _this;\n  }\n\n  _createClass(Collection, [{\n    key: 'forceUpdate',\n    value: function forceUpdate() {\n      if (this._collectionView !== undefined) {\n        this._collectionView.forceUpdate();\n      }\n    }\n\n    /** See Collection#recomputeCellSizesAndPositions */\n\n  }, {\n    key: 'recomputeCellSizesAndPositions',\n    value: function recomputeCellSizesAndPositions() {\n      this._cellCache = [];\n      this._collectionView.recomputeCellSizesAndPositions();\n    }\n\n    /** React lifecycle methods */\n\n  }, {\n    key: 'render',\n    value: function render() {\n      var props = _objectWithoutProperties(this.props, []);\n\n      return React.createElement(CollectionView, _extends({\n        cellLayoutManager: this,\n        isScrollingChange: this._isScrollingChange,\n        ref: this._setCollectionViewRef\n      }, props));\n    }\n\n    /** CellLayoutManager interface */\n\n  }, {\n    key: 'calculateSizeAndPositionData',\n    value: function calculateSizeAndPositionData() {\n      var _props = this.props,\n          cellCount = _props.cellCount,\n          cellSizeAndPositionGetter = _props.cellSizeAndPositionGetter,\n          sectionSize = _props.sectionSize;\n\n\n      var data = _calculateSizeAndPositionData({\n        cellCount: cellCount,\n        cellSizeAndPositionGetter: cellSizeAndPositionGetter,\n        sectionSize: sectionSize\n      });\n\n      this._cellMetadata = data.cellMetadata;\n      this._sectionManager = data.sectionManager;\n      this._height = data.height;\n      this._width = data.width;\n    }\n\n    /**\n     * Returns the most recently rendered set of cell indices.\n     */\n\n  }, {\n    key: 'getLastRenderedIndices',\n    value: function getLastRenderedIndices() {\n      return this._lastRenderedCellIndices;\n    }\n\n    /**\n     * Calculates the minimum amount of change from the current scroll position to ensure the specified cell is (fully) visible.\n     */\n\n  }, {\n    key: 'getScrollPositionForCell',\n    value: function getScrollPositionForCell(_ref) {\n      var align = _ref.align,\n          cellIndex = _ref.cellIndex,\n          height = _ref.height,\n          scrollLeft = _ref.scrollLeft,\n          scrollTop = _ref.scrollTop,\n          width = _ref.width;\n      var cellCount = this.props.cellCount;\n\n\n      if (cellIndex >= 0 && cellIndex < cellCount) {\n        var cellMetadata = this._cellMetadata[cellIndex];\n\n        scrollLeft = getUpdatedOffsetForIndex({\n          align: align,\n          cellOffset: cellMetadata.x,\n          cellSize: cellMetadata.width,\n          containerSize: width,\n          currentOffset: scrollLeft,\n          targetIndex: cellIndex\n        });\n\n        scrollTop = getUpdatedOffsetForIndex({\n          align: align,\n          cellOffset: cellMetadata.y,\n          cellSize: cellMetadata.height,\n          containerSize: height,\n          currentOffset: scrollTop,\n          targetIndex: cellIndex\n        });\n      }\n\n      return {\n        scrollLeft: scrollLeft,\n        scrollTop: scrollTop\n      };\n    }\n  }, {\n    key: 'getTotalSize',\n    value: function getTotalSize() {\n      return {\n        height: this._height,\n        width: this._width\n      };\n    }\n  }, {\n    key: 'cellRenderers',\n    value: function cellRenderers(_ref2) {\n      var _this2 = this;\n\n      var height = _ref2.height,\n          isScrolling = _ref2.isScrolling,\n          width = _ref2.width,\n          x = _ref2.x,\n          y = _ref2.y;\n      var _props2 = this.props,\n          cellGroupRenderer = _props2.cellGroupRenderer,\n          cellRenderer = _props2.cellRenderer;\n\n      // Store for later calls to getLastRenderedIndices()\n\n      this._lastRenderedCellIndices = this._sectionManager.getCellIndices({\n        height: height,\n        width: width,\n        x: x,\n        y: y\n      });\n\n      return cellGroupRenderer({\n        cellCache: this._cellCache,\n        cellRenderer: cellRenderer,\n        cellSizeAndPositionGetter: function cellSizeAndPositionGetter(_ref3) {\n          var index = _ref3.index;\n          return _this2._sectionManager.getCellMetadata({ index: index });\n        },\n        indices: this._lastRenderedCellIndices,\n        isScrolling: isScrolling\n      });\n    }\n  }, {\n    key: '_isScrollingChange',\n    value: function _isScrollingChange(isScrolling) {\n      if (!isScrolling) {\n        this._cellCache = [];\n      }\n    }\n  }, {\n    key: '_setCollectionViewRef',\n    value: function _setCollectionViewRef(ref) {\n      this._collectionView = ref;\n    }\n  }]);\n\n  return Collection;\n}(React.PureComponent);\n\nCollection.defaultProps = {\n  'aria-label': 'grid',\n  cellGroupRenderer: defaultCellGroupRenderer\n};\nexport default Collection;\nCollection.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  'aria-label': PropTypes.string,\n\n  /**\n   * Number of cells in Collection.\n   */\n  cellCount: PropTypes.number.isRequired,\n\n  /**\n   * Responsible for rendering a group of cells given their indices.\n   * Should implement the following interface: ({\n   *   cellSizeAndPositionGetter:Function,\n   *   indices: Array<number>,\n   *   cellRenderer: Function\n   * }): Array<PropTypes.node>\n   */\n  cellGroupRenderer: PropTypes.func.isRequired,\n\n  /**\n   * Responsible for rendering a cell given an row and column index.\n   * Should implement the following interface: ({ index: number, key: string, style: object }): PropTypes.element\n   */\n  cellRenderer: PropTypes.func.isRequired,\n\n  /**\n   * Callback responsible for returning size and offset/position information for a given cell (index).\n   * ({ index: number }): { height: number, width: number, x: number, y: number }\n   */\n  cellSizeAndPositionGetter: PropTypes.func.isRequired,\n\n  /**\n   * Optionally override the size of the sections a Collection's cells are split into.\n   */\n  sectionSize: PropTypes.number\n} : {};\n\n\nfunction defaultCellGroupRenderer(_ref4) {\n  var cellCache = _ref4.cellCache,\n      cellRenderer = _ref4.cellRenderer,\n      cellSizeAndPositionGetter = _ref4.cellSizeAndPositionGetter,\n      indices = _ref4.indices,\n      isScrolling = _ref4.isScrolling;\n\n  return indices.map(function (index) {\n    var cellMetadata = cellSizeAndPositionGetter({ index: index });\n\n    var cellRendererProps = {\n      index: index,\n      isScrolling: isScrolling,\n      key: index,\n      style: {\n        height: cellMetadata.height,\n        left: cellMetadata.x,\n        position: 'absolute',\n        top: cellMetadata.y,\n        width: cellMetadata.width\n      }\n    };\n\n    // Avoid re-creating cells while scrolling.\n    // This can lead to the same cell being created many times and can cause performance issues for \"heavy\" cells.\n    // If a scroll is in progress- cache and reuse cells.\n    // This cache will be thrown away once scrolling complets.\n    if (isScrolling) {\n      if (!(index in cellCache)) {\n        cellCache[index] = cellRenderer(cellRendererProps);\n      }\n\n      return cellCache[index];\n    } else {\n      return cellRenderer(cellRendererProps);\n    }\n  }).filter(function (renderedCell) {\n    return !!renderedCell;\n  });\n}\nimport { bpfrpt_proptype_ScrollPosition } from './types';\nimport { bpfrpt_proptype_SizeInfo } from './types';","import SectionManager from '../SectionManager';\n\nexport default function calculateSizeAndPositionData(_ref) {\n  var cellCount = _ref.cellCount,\n      cellSizeAndPositionGetter = _ref.cellSizeAndPositionGetter,\n      sectionSize = _ref.sectionSize;\n\n  var cellMetadata = [];\n  var sectionManager = new SectionManager(sectionSize);\n  var height = 0;\n  var width = 0;\n\n  for (var index = 0; index < cellCount; index++) {\n    var cellMetadatum = cellSizeAndPositionGetter({ index: index });\n\n    if (cellMetadatum.height == null || isNaN(cellMetadatum.height) || cellMetadatum.width == null || isNaN(cellMetadatum.width) || cellMetadatum.x == null || isNaN(cellMetadatum.x) || cellMetadatum.y == null || isNaN(cellMetadatum.y)) {\n      throw Error('Invalid metadata returned for cell ' + index + ':\\n        x:' + cellMetadatum.x + ', y:' + cellMetadatum.y + ', width:' + cellMetadatum.width + ', height:' + cellMetadatum.height);\n    }\n\n    height = Math.max(height, cellMetadatum.y + cellMetadatum.height);\n    width = Math.max(width, cellMetadatum.x + cellMetadatum.width);\n\n    cellMetadata[index] = cellMetadatum;\n    sectionManager.registerCell({\n      cellMetadatum: cellMetadatum,\n      index: index\n    });\n  }\n\n  return {\n    cellMetadata: cellMetadata,\n    height: height,\n    sectionManager: sectionManager,\n    width: width\n  };\n}","/** @license React v16.14.0\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var l=require(\"object-assign\"),n=\"function\"===typeof Symbol&&Symbol.for,p=n?Symbol.for(\"react.element\"):60103,q=n?Symbol.for(\"react.portal\"):60106,r=n?Symbol.for(\"react.fragment\"):60107,t=n?Symbol.for(\"react.strict_mode\"):60108,u=n?Symbol.for(\"react.profiler\"):60114,v=n?Symbol.for(\"react.provider\"):60109,w=n?Symbol.for(\"react.context\"):60110,x=n?Symbol.for(\"react.forward_ref\"):60112,y=n?Symbol.for(\"react.suspense\"):60113,z=n?Symbol.for(\"react.memo\"):60115,A=n?Symbol.for(\"react.lazy\"):\n60116,B=\"function\"===typeof Symbol&&Symbol.iterator;function C(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}\nvar D={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},E={};function F(a,b,c){this.props=a;this.context=b;this.refs=E;this.updater=c||D}F.prototype.isReactComponent={};F.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(C(85));this.updater.enqueueSetState(this,a,b,\"setState\")};F.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};\nfunction G(){}G.prototype=F.prototype;function H(a,b,c){this.props=a;this.context=b;this.refs=E;this.updater=c||D}var I=H.prototype=new G;I.constructor=H;l(I,F.prototype);I.isPureReactComponent=!0;var J={current:null},K=Object.prototype.hasOwnProperty,L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,c){var e,d={},g=null,k=null;if(null!=b)for(e in void 0!==b.ref&&(k=b.ref),void 0!==b.key&&(g=\"\"+b.key),b)K.call(b,e)&&!L.hasOwnProperty(e)&&(d[e]=b[e]);var f=arguments.length-2;if(1===f)d.children=c;else if(1<f){for(var h=Array(f),m=0;m<f;m++)h[m]=arguments[m+2];d.children=h}if(a&&a.defaultProps)for(e in f=a.defaultProps,f)void 0===d[e]&&(d[e]=f[e]);return{$$typeof:p,type:a,key:g,ref:k,props:d,_owner:J.current}}\nfunction N(a,b){return{$$typeof:p,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function O(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===p}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+(\"\"+a).replace(/[=:]/g,function(a){return b[a]})}var P=/\\/+/g,Q=[];function R(a,b,c,e){if(Q.length){var d=Q.pop();d.result=a;d.keyPrefix=b;d.func=c;d.context=e;d.count=0;return d}return{result:a,keyPrefix:b,func:c,context:e,count:0}}\nfunction S(a){a.result=null;a.keyPrefix=null;a.func=null;a.context=null;a.count=0;10>Q.length&&Q.push(a)}\nfunction T(a,b,c,e){var d=typeof a;if(\"undefined\"===d||\"boolean\"===d)a=null;var g=!1;if(null===a)g=!0;else switch(d){case \"string\":case \"number\":g=!0;break;case \"object\":switch(a.$$typeof){case p:case q:g=!0}}if(g)return c(e,a,\"\"===b?\".\"+U(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var k=0;k<a.length;k++){d=a[k];var f=b+U(d,k);g+=T(d,f,c,e)}else if(null===a||\"object\"!==typeof a?f=null:(f=B&&a[B]||a[\"@@iterator\"],f=\"function\"===typeof f?f:null),\"function\"===typeof f)for(a=f.call(a),k=\n0;!(d=a.next()).done;)d=d.value,f=b+U(d,k++),g+=T(d,f,c,e);else if(\"object\"===d)throw c=\"\"+a,Error(C(31,\"[object Object]\"===c?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":c,\"\"));return g}function V(a,b,c){return null==a?0:T(a,\"\",b,c)}function U(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(a.key):b.toString(36)}function W(a,b){a.func.call(a.context,b,a.count++)}\nfunction aa(a,b,c){var e=a.result,d=a.keyPrefix;a=a.func.call(a.context,b,a.count++);Array.isArray(a)?X(a,e,c,function(a){return a}):null!=a&&(O(a)&&(a=N(a,d+(!a.key||b&&b.key===a.key?\"\":(\"\"+a.key).replace(P,\"$&/\")+\"/\")+c)),e.push(a))}function X(a,b,c,e,d){var g=\"\";null!=c&&(g=(\"\"+c).replace(P,\"$&/\")+\"/\");b=R(b,g,e,d);V(a,aa,b);S(b)}var Y={current:null};function Z(){var a=Y.current;if(null===a)throw Error(C(321));return a}\nvar ba={ReactCurrentDispatcher:Y,ReactCurrentBatchConfig:{suspense:null},ReactCurrentOwner:J,IsSomeRendererActing:{current:!1},assign:l};exports.Children={map:function(a,b,c){if(null==a)return a;var e=[];X(a,e,null,b,c);return e},forEach:function(a,b,c){if(null==a)return a;b=R(null,null,b,c);V(a,W,b);S(b)},count:function(a){return V(a,function(){return null},null)},toArray:function(a){var b=[];X(a,b,null,function(a){return a});return b},only:function(a){if(!O(a))throw Error(C(143));return a}};\nexports.Component=F;exports.Fragment=r;exports.Profiler=u;exports.PureComponent=H;exports.StrictMode=t;exports.Suspense=y;exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=ba;\nexports.cloneElement=function(a,b,c){if(null===a||void 0===a)throw Error(C(267,a));var e=l({},a.props),d=a.key,g=a.ref,k=a._owner;if(null!=b){void 0!==b.ref&&(g=b.ref,k=J.current);void 0!==b.key&&(d=\"\"+b.key);if(a.type&&a.type.defaultProps)var f=a.type.defaultProps;for(h in b)K.call(b,h)&&!L.hasOwnProperty(h)&&(e[h]=void 0===b[h]&&void 0!==f?f[h]:b[h])}var h=arguments.length-2;if(1===h)e.children=c;else if(1<h){f=Array(h);for(var m=0;m<h;m++)f[m]=arguments[m+2];e.children=f}return{$$typeof:p,type:a.type,\nkey:d,ref:g,props:e,_owner:k}};exports.createContext=function(a,b){void 0===b&&(b=null);a={$$typeof:w,_calculateChangedBits:b,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null};a.Provider={$$typeof:v,_context:a};return a.Consumer=a};exports.createElement=M;exports.createFactory=function(a){var b=M.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};exports.forwardRef=function(a){return{$$typeof:x,render:a}};exports.isValidElement=O;\nexports.lazy=function(a){return{$$typeof:A,_ctor:a,_status:-1,_result:null}};exports.memo=function(a,b){return{$$typeof:z,type:a,compare:void 0===b?null:b}};exports.useCallback=function(a,b){return Z().useCallback(a,b)};exports.useContext=function(a,b){return Z().useContext(a,b)};exports.useDebugValue=function(){};exports.useEffect=function(a,b){return Z().useEffect(a,b)};exports.useImperativeHandle=function(a,b,c){return Z().useImperativeHandle(a,b,c)};\nexports.useLayoutEffect=function(a,b){return Z().useLayoutEffect(a,b)};exports.useMemo=function(a,b){return Z().useMemo(a,b)};exports.useReducer=function(a,b,c){return Z().useReducer(a,b,c)};exports.useRef=function(a){return Z().useRef(a)};exports.useState=function(a){return Z().useState(a)};exports.version=\"16.14.0\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react.production.min.js');\n} else {\n  module.exports = require('./cjs/react.development.js');\n}\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n  \"use strict\";\n\n  var Op = Object.prototype;\n  var hasOwn = Op.hasOwnProperty;\n  var undefined; // More compressible than void 0.\n  var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n  var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n  var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n  var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n  function define(obj, key, value) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n    return obj[key];\n  }\n  try {\n    // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n    define({}, \"\");\n  } catch (err) {\n    define = function(obj, key, value) {\n      return obj[key] = value;\n    };\n  }\n\n  function wrap(innerFn, outerFn, self, tryLocsList) {\n    // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n    var generator = Object.create(protoGenerator.prototype);\n    var context = new Context(tryLocsList || []);\n\n    // The ._invoke method unifies the implementations of the .next,\n    // .throw, and .return methods.\n    generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n    return generator;\n  }\n  exports.wrap = wrap;\n\n  // Try/catch helper to minimize deoptimizations. Returns a completion\n  // record like context.tryEntries[i].completion. This interface could\n  // have been (and was previously) designed to take a closure to be\n  // invoked without arguments, but in all the cases we care about we\n  // already have an existing method we want to call, so there's no need\n  // to create a new function object. We can even get away with assuming\n  // the method takes exactly one argument, since that happens to be true\n  // in every case, so we don't have to touch the arguments object. The\n  // only additional allocation required is the completion record, which\n  // has a stable shape and so hopefully should be cheap to allocate.\n  function tryCatch(fn, obj, arg) {\n    try {\n      return { type: \"normal\", arg: fn.call(obj, arg) };\n    } catch (err) {\n      return { type: \"throw\", arg: err };\n    }\n  }\n\n  var GenStateSuspendedStart = \"suspendedStart\";\n  var GenStateSuspendedYield = \"suspendedYield\";\n  var GenStateExecuting = \"executing\";\n  var GenStateCompleted = \"completed\";\n\n  // Returning this object from the innerFn has the same effect as\n  // breaking out of the dispatch switch statement.\n  var ContinueSentinel = {};\n\n  // Dummy constructor functions that we use as the .constructor and\n  // .constructor.prototype properties for functions that return Generator\n  // objects. For full spec compliance, you may wish to configure your\n  // minifier not to mangle the names of these two functions.\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n\n  // This is a polyfill for %IteratorPrototype% for environments that\n  // don't natively support it.\n  var IteratorPrototype = {};\n  define(IteratorPrototype, iteratorSymbol, function () {\n    return this;\n  });\n\n  var getProto = Object.getPrototypeOf;\n  var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n  if (NativeIteratorPrototype &&\n      NativeIteratorPrototype !== Op &&\n      hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n    // This environment has a native %IteratorPrototype%; use it instead\n    // of the polyfill.\n    IteratorPrototype = NativeIteratorPrototype;\n  }\n\n  var Gp = GeneratorFunctionPrototype.prototype =\n    Generator.prototype = Object.create(IteratorPrototype);\n  GeneratorFunction.prototype = GeneratorFunctionPrototype;\n  define(Gp, \"constructor\", GeneratorFunctionPrototype);\n  define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n  GeneratorFunction.displayName = define(\n    GeneratorFunctionPrototype,\n    toStringTagSymbol,\n    \"GeneratorFunction\"\n  );\n\n  // Helper for defining the .next, .throw, and .return methods of the\n  // Iterator interface in terms of a single ._invoke method.\n  function defineIteratorMethods(prototype) {\n    [\"next\", \"throw\", \"return\"].forEach(function(method) {\n      define(prototype, method, function(arg) {\n        return this._invoke(method, arg);\n      });\n    });\n  }\n\n  exports.isGeneratorFunction = function(genFun) {\n    var ctor = typeof genFun === \"function\" && genFun.constructor;\n    return ctor\n      ? ctor === GeneratorFunction ||\n        // For the native GeneratorFunction constructor, the best we can\n        // do is to check its .name property.\n        (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n      : false;\n  };\n\n  exports.mark = function(genFun) {\n    if (Object.setPrototypeOf) {\n      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n    } else {\n      genFun.__proto__ = GeneratorFunctionPrototype;\n      define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n    }\n    genFun.prototype = Object.create(Gp);\n    return genFun;\n  };\n\n  // Within the body of any async function, `await x` is transformed to\n  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n  // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n  // meant to be awaited.\n  exports.awrap = function(arg) {\n    return { __await: arg };\n  };\n\n  function AsyncIterator(generator, PromiseImpl) {\n    function invoke(method, arg, resolve, reject) {\n      var record = tryCatch(generator[method], generator, arg);\n      if (record.type === \"throw\") {\n        reject(record.arg);\n      } else {\n        var result = record.arg;\n        var value = result.value;\n        if (value &&\n            typeof value === \"object\" &&\n            hasOwn.call(value, \"__await\")) {\n          return PromiseImpl.resolve(value.__await).then(function(value) {\n            invoke(\"next\", value, resolve, reject);\n          }, function(err) {\n            invoke(\"throw\", err, resolve, reject);\n          });\n        }\n\n        return PromiseImpl.resolve(value).then(function(unwrapped) {\n          // When a yielded Promise is resolved, its final value becomes\n          // the .value of the Promise<{value,done}> result for the\n          // current iteration.\n          result.value = unwrapped;\n          resolve(result);\n        }, function(error) {\n          // If a rejected Promise was yielded, throw the rejection back\n          // into the async generator function so it can be handled there.\n          return invoke(\"throw\", error, resolve, reject);\n        });\n      }\n    }\n\n    var previousPromise;\n\n    function enqueue(method, arg) {\n      function callInvokeWithMethodAndArg() {\n        return new PromiseImpl(function(resolve, reject) {\n          invoke(method, arg, resolve, reject);\n        });\n      }\n\n      return previousPromise =\n        // If enqueue has been called before, then we want to wait until\n        // all previous Promises have been resolved before calling invoke,\n        // so that results are always delivered in the correct order. If\n        // enqueue has not been called before, then it is important to\n        // call invoke immediately, without waiting on a callback to fire,\n        // so that the async generator function has the opportunity to do\n        // any necessary setup in a predictable way. This predictability\n        // is why the Promise constructor synchronously invokes its\n        // executor callback, and why async functions synchronously\n        // execute code before the first await. Since we implement simple\n        // async functions in terms of async generators, it is especially\n        // important to get this right, even though it requires care.\n        previousPromise ? previousPromise.then(\n          callInvokeWithMethodAndArg,\n          // Avoid propagating failures to Promises returned by later\n          // invocations of the iterator.\n          callInvokeWithMethodAndArg\n        ) : callInvokeWithMethodAndArg();\n    }\n\n    // Define the unified helper method that is used to implement .next,\n    // .throw, and .return (see defineIteratorMethods).\n    this._invoke = enqueue;\n  }\n\n  defineIteratorMethods(AsyncIterator.prototype);\n  define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n    return this;\n  });\n  exports.AsyncIterator = AsyncIterator;\n\n  // Note that simple async functions are implemented on top of\n  // AsyncIterator objects; they just return a Promise for the value of\n  // the final result produced by the iterator.\n  exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n    if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n    var iter = new AsyncIterator(\n      wrap(innerFn, outerFn, self, tryLocsList),\n      PromiseImpl\n    );\n\n    return exports.isGeneratorFunction(outerFn)\n      ? iter // If outerFn is a generator, return the full iterator.\n      : iter.next().then(function(result) {\n          return result.done ? result.value : iter.next();\n        });\n  };\n\n  function makeInvokeMethod(innerFn, self, context) {\n    var state = GenStateSuspendedStart;\n\n    return function invoke(method, arg) {\n      if (state === GenStateExecuting) {\n        throw new Error(\"Generator is already running\");\n      }\n\n      if (state === GenStateCompleted) {\n        if (method === \"throw\") {\n          throw arg;\n        }\n\n        // Be forgiving, per 25.3.3.3.3 of the spec:\n        // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n        return doneResult();\n      }\n\n      context.method = method;\n      context.arg = arg;\n\n      while (true) {\n        var delegate = context.delegate;\n        if (delegate) {\n          var delegateResult = maybeInvokeDelegate(delegate, context);\n          if (delegateResult) {\n            if (delegateResult === ContinueSentinel) continue;\n            return delegateResult;\n          }\n        }\n\n        if (context.method === \"next\") {\n          // Setting context._sent for legacy support of Babel's\n          // function.sent implementation.\n          context.sent = context._sent = context.arg;\n\n        } else if (context.method === \"throw\") {\n          if (state === GenStateSuspendedStart) {\n            state = GenStateCompleted;\n            throw context.arg;\n          }\n\n          context.dispatchException(context.arg);\n\n        } else if (context.method === \"return\") {\n          context.abrupt(\"return\", context.arg);\n        }\n\n        state = GenStateExecuting;\n\n        var record = tryCatch(innerFn, self, context);\n        if (record.type === \"normal\") {\n          // If an exception is thrown from innerFn, we leave state ===\n          // GenStateExecuting and loop back for another invocation.\n          state = context.done\n            ? GenStateCompleted\n            : GenStateSuspendedYield;\n\n          if (record.arg === ContinueSentinel) {\n            continue;\n          }\n\n          return {\n            value: record.arg,\n            done: context.done\n          };\n\n        } else if (record.type === \"throw\") {\n          state = GenStateCompleted;\n          // Dispatch the exception by looping back around to the\n          // context.dispatchException(context.arg) call above.\n          context.method = \"throw\";\n          context.arg = record.arg;\n        }\n      }\n    };\n  }\n\n  // Call delegate.iterator[context.method](context.arg) and handle the\n  // result, either by returning a { value, done } result from the\n  // delegate iterator, or by modifying context.method and context.arg,\n  // setting context.delegate to null, and returning the ContinueSentinel.\n  function maybeInvokeDelegate(delegate, context) {\n    var method = delegate.iterator[context.method];\n    if (method === undefined) {\n      // A .throw or .return when the delegate iterator has no .throw\n      // method always terminates the yield* loop.\n      context.delegate = null;\n\n      if (context.method === \"throw\") {\n        // Note: [\"return\"] must be used for ES3 parsing compatibility.\n        if (delegate.iterator[\"return\"]) {\n          // If the delegate iterator has a return method, give it a\n          // chance to clean up.\n          context.method = \"return\";\n          context.arg = undefined;\n          maybeInvokeDelegate(delegate, context);\n\n          if (context.method === \"throw\") {\n            // If maybeInvokeDelegate(context) changed context.method from\n            // \"return\" to \"throw\", let that override the TypeError below.\n            return ContinueSentinel;\n          }\n        }\n\n        context.method = \"throw\";\n        context.arg = new TypeError(\n          \"The iterator does not provide a 'throw' method\");\n      }\n\n      return ContinueSentinel;\n    }\n\n    var record = tryCatch(method, delegate.iterator, context.arg);\n\n    if (record.type === \"throw\") {\n      context.method = \"throw\";\n      context.arg = record.arg;\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    var info = record.arg;\n\n    if (! info) {\n      context.method = \"throw\";\n      context.arg = new TypeError(\"iterator result is not an object\");\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    if (info.done) {\n      // Assign the result of the finished delegate to the temporary\n      // variable specified by delegate.resultName (see delegateYield).\n      context[delegate.resultName] = info.value;\n\n      // Resume execution at the desired location (see delegateYield).\n      context.next = delegate.nextLoc;\n\n      // If context.method was \"throw\" but the delegate handled the\n      // exception, let the outer generator proceed normally. If\n      // context.method was \"next\", forget context.arg since it has been\n      // \"consumed\" by the delegate iterator. If context.method was\n      // \"return\", allow the original .return call to continue in the\n      // outer generator.\n      if (context.method !== \"return\") {\n        context.method = \"next\";\n        context.arg = undefined;\n      }\n\n    } else {\n      // Re-yield the result returned by the delegate method.\n      return info;\n    }\n\n    // The delegate iterator is finished, so forget it and continue with\n    // the outer generator.\n    context.delegate = null;\n    return ContinueSentinel;\n  }\n\n  // Define Generator.prototype.{next,throw,return} in terms of the\n  // unified ._invoke helper method.\n  defineIteratorMethods(Gp);\n\n  define(Gp, toStringTagSymbol, \"Generator\");\n\n  // A Generator should always return itself as the iterator object when the\n  // @@iterator function is called on it. Some browsers' implementations of the\n  // iterator prototype chain incorrectly implement this, causing the Generator\n  // object to not be returned from this call. This ensures that doesn't happen.\n  // See https://github.com/facebook/regenerator/issues/274 for more details.\n  define(Gp, iteratorSymbol, function() {\n    return this;\n  });\n\n  define(Gp, \"toString\", function() {\n    return \"[object Generator]\";\n  });\n\n  function pushTryEntry(locs) {\n    var entry = { tryLoc: locs[0] };\n\n    if (1 in locs) {\n      entry.catchLoc = locs[1];\n    }\n\n    if (2 in locs) {\n      entry.finallyLoc = locs[2];\n      entry.afterLoc = locs[3];\n    }\n\n    this.tryEntries.push(entry);\n  }\n\n  function resetTryEntry(entry) {\n    var record = entry.completion || {};\n    record.type = \"normal\";\n    delete record.arg;\n    entry.completion = record;\n  }\n\n  function Context(tryLocsList) {\n    // The root entry object (effectively a try statement without a catch\n    // or a finally block) gives us a place to store values thrown from\n    // locations where there is no enclosing try statement.\n    this.tryEntries = [{ tryLoc: \"root\" }];\n    tryLocsList.forEach(pushTryEntry, this);\n    this.reset(true);\n  }\n\n  exports.keys = function(object) {\n    var keys = [];\n    for (var key in object) {\n      keys.push(key);\n    }\n    keys.reverse();\n\n    // Rather than returning an object with a next method, we keep\n    // things simple and return the next function itself.\n    return function next() {\n      while (keys.length) {\n        var key = keys.pop();\n        if (key in object) {\n          next.value = key;\n          next.done = false;\n          return next;\n        }\n      }\n\n      // To avoid creating an additional object, we just hang the .value\n      // and .done properties off the next function object itself. This\n      // also ensures that the minifier will not anonymize the function.\n      next.done = true;\n      return next;\n    };\n  };\n\n  function values(iterable) {\n    if (iterable) {\n      var iteratorMethod = iterable[iteratorSymbol];\n      if (iteratorMethod) {\n        return iteratorMethod.call(iterable);\n      }\n\n      if (typeof iterable.next === \"function\") {\n        return iterable;\n      }\n\n      if (!isNaN(iterable.length)) {\n        var i = -1, next = function next() {\n          while (++i < iterable.length) {\n            if (hasOwn.call(iterable, i)) {\n              next.value = iterable[i];\n              next.done = false;\n              return next;\n            }\n          }\n\n          next.value = undefined;\n          next.done = true;\n\n          return next;\n        };\n\n        return next.next = next;\n      }\n    }\n\n    // Return an iterator with no values.\n    return { next: doneResult };\n  }\n  exports.values = values;\n\n  function doneResult() {\n    return { value: undefined, done: true };\n  }\n\n  Context.prototype = {\n    constructor: Context,\n\n    reset: function(skipTempReset) {\n      this.prev = 0;\n      this.next = 0;\n      // Resetting context._sent for legacy support of Babel's\n      // function.sent implementation.\n      this.sent = this._sent = undefined;\n      this.done = false;\n      this.delegate = null;\n\n      this.method = \"next\";\n      this.arg = undefined;\n\n      this.tryEntries.forEach(resetTryEntry);\n\n      if (!skipTempReset) {\n        for (var name in this) {\n          // Not sure about the optimal order of these conditions:\n          if (name.charAt(0) === \"t\" &&\n              hasOwn.call(this, name) &&\n              !isNaN(+name.slice(1))) {\n            this[name] = undefined;\n          }\n        }\n      }\n    },\n\n    stop: function() {\n      this.done = true;\n\n      var rootEntry = this.tryEntries[0];\n      var rootRecord = rootEntry.completion;\n      if (rootRecord.type === \"throw\") {\n        throw rootRecord.arg;\n      }\n\n      return this.rval;\n    },\n\n    dispatchException: function(exception) {\n      if (this.done) {\n        throw exception;\n      }\n\n      var context = this;\n      function handle(loc, caught) {\n        record.type = \"throw\";\n        record.arg = exception;\n        context.next = loc;\n\n        if (caught) {\n          // If the dispatched exception was caught by a catch block,\n          // then let that catch block handle the exception normally.\n          context.method = \"next\";\n          context.arg = undefined;\n        }\n\n        return !! caught;\n      }\n\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        var record = entry.completion;\n\n        if (entry.tryLoc === \"root\") {\n          // Exception thrown outside of any try block that could handle\n          // it, so set the completion value of the entire function to\n          // throw the exception.\n          return handle(\"end\");\n        }\n\n        if (entry.tryLoc <= this.prev) {\n          var hasCatch = hasOwn.call(entry, \"catchLoc\");\n          var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n          if (hasCatch && hasFinally) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            } else if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else if (hasCatch) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            }\n\n          } else if (hasFinally) {\n            if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else {\n            throw new Error(\"try statement without catch or finally\");\n          }\n        }\n      }\n    },\n\n    abrupt: function(type, arg) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc <= this.prev &&\n            hasOwn.call(entry, \"finallyLoc\") &&\n            this.prev < entry.finallyLoc) {\n          var finallyEntry = entry;\n          break;\n        }\n      }\n\n      if (finallyEntry &&\n          (type === \"break\" ||\n           type === \"continue\") &&\n          finallyEntry.tryLoc <= arg &&\n          arg <= finallyEntry.finallyLoc) {\n        // Ignore the finally entry if control is not jumping to a\n        // location outside the try/catch block.\n        finallyEntry = null;\n      }\n\n      var record = finallyEntry ? finallyEntry.completion : {};\n      record.type = type;\n      record.arg = arg;\n\n      if (finallyEntry) {\n        this.method = \"next\";\n        this.next = finallyEntry.finallyLoc;\n        return ContinueSentinel;\n      }\n\n      return this.complete(record);\n    },\n\n    complete: function(record, afterLoc) {\n      if (record.type === \"throw\") {\n        throw record.arg;\n      }\n\n      if (record.type === \"break\" ||\n          record.type === \"continue\") {\n        this.next = record.arg;\n      } else if (record.type === \"return\") {\n        this.rval = this.arg = record.arg;\n        this.method = \"return\";\n        this.next = \"end\";\n      } else if (record.type === \"normal\" && afterLoc) {\n        this.next = afterLoc;\n      }\n\n      return ContinueSentinel;\n    },\n\n    finish: function(finallyLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.finallyLoc === finallyLoc) {\n          this.complete(entry.completion, entry.afterLoc);\n          resetTryEntry(entry);\n          return ContinueSentinel;\n        }\n      }\n    },\n\n    \"catch\": function(tryLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc === tryLoc) {\n          var record = entry.completion;\n          if (record.type === \"throw\") {\n            var thrown = record.arg;\n            resetTryEntry(entry);\n          }\n          return thrown;\n        }\n      }\n\n      // The context.catch method must only be called with a location\n      // argument that corresponds to a known catch block.\n      throw new Error(\"illegal catch attempt\");\n    },\n\n    delegateYield: function(iterable, resultName, nextLoc) {\n      this.delegate = {\n        iterator: values(iterable),\n        resultName: resultName,\n        nextLoc: nextLoc\n      };\n\n      if (this.method === \"next\") {\n        // Deliberately forget the last sent value so that we don't\n        // accidentally pass it on to the delegate.\n        this.arg = undefined;\n      }\n\n      return ContinueSentinel;\n    }\n  };\n\n  // Regardless of whether this script is executing as a CommonJS module\n  // or not, return the runtime object so that we can declare the variable\n  // regeneratorRuntime in the outer scope, which allows this module to be\n  // injected easily by `bin/regenerator --include-runtime script.js`.\n  return exports;\n\n}(\n  // If this script is executing as a CommonJS module, use module.exports\n  // as the regeneratorRuntime namespace. Otherwise create a new empty\n  // object. Either way, the resulting object will be used to initialize\n  // the regeneratorRuntime variable at the top of this file.\n  typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n  regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n  // This module should not be running in strict mode, so the above\n  // assignment should always work unless something is misconfigured. Just\n  // in case runtime.js accidentally runs in strict mode, in modern engines\n  // we can explicitly access globalThis. In older engines we can escape\n  // strict mode using a global Function call. This could conceivably fail\n  // if a Content Security Policy forbids using Function, but in that case\n  // the proper solution is to fix the accidental strict mode problem. If\n  // you've misconfigured your bundler to force strict mode and applied a\n  // CSP to forbid Function, and you're not willing to fix either of those\n  // problems, please detail your unique predicament in a GitHub issue.\n  if (typeof globalThis === \"object\") {\n    globalThis.regeneratorRuntime = runtime;\n  } else {\n    Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n  }\n}\n","/*jshint node:true*/\n'use strict';\n\n/**\n * Replaces characters in strings that are illegal/unsafe for filenames.\n * Unsafe characters are either removed or replaced by a substitute set\n * in the optional `options` object.\n *\n * Illegal Characters on Various Operating Systems\n * / ? < > \\ : * | \"\n * https://kb.acronis.com/content/39790\n *\n * Unicode Control codes\n * C0 0x00-0x1f & C1 (0x80-0x9f)\n * http://en.wikipedia.org/wiki/C0_and_C1_control_codes\n *\n * Reserved filenames on Unix-based systems (\".\", \"..\")\n * Reserved filenames in Windows (\"CON\", \"PRN\", \"AUX\", \"NUL\", \"COM1\",\n * \"COM2\", \"COM3\", \"COM4\", \"COM5\", \"COM6\", \"COM7\", \"COM8\", \"COM9\",\n * \"LPT1\", \"LPT2\", \"LPT3\", \"LPT4\", \"LPT5\", \"LPT6\", \"LPT7\", \"LPT8\", and\n * \"LPT9\") case-insesitively and with or without filename extensions.\n *\n * Capped at 255 characters in length.\n * http://unix.stackexchange.com/questions/32795/what-is-the-maximum-allowed-filename-and-folder-size-with-ecryptfs\n *\n * @param  {String} input   Original filename\n * @param  {Object} options {replacement: String | Function }\n * @return {String}         Sanitized filename\n */\n\nvar truncate = require(\"truncate-utf8-bytes\");\n\nvar illegalRe = /[\\/\\?<>\\\\:\\*\\|\"]/g;\nvar controlRe = /[\\x00-\\x1f\\x80-\\x9f]/g;\nvar reservedRe = /^\\.+$/;\nvar windowsReservedRe = /^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\\..*)?$/i;\nvar windowsTrailingRe = /[\\. ]+$/;\n\nfunction sanitize(input, replacement) {\n  if (typeof input !== 'string') {\n    throw new Error('Input must be string');\n  }\n  var sanitized = input\n    .replace(illegalRe, replacement)\n    .replace(controlRe, replacement)\n    .replace(reservedRe, replacement)\n    .replace(windowsReservedRe, replacement)\n    .replace(windowsTrailingRe, replacement);\n  return truncate(sanitized, 255);\n}\n\nmodule.exports = function (input, options) {\n  var replacement = (options && options.replacement) || '';\n  var output = sanitize(input, replacement);\n  if (replacement === '') {\n    return output;\n  }\n  return sanitize(output, '');\n};\n","/** @license React v0.19.1\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var f,g,h,k,l;\nif(\"undefined\"===typeof window||\"function\"!==typeof MessageChannel){var p=null,q=null,t=function(){if(null!==p)try{var a=exports.unstable_now();p(!0,a);p=null}catch(b){throw setTimeout(t,0),b;}},u=Date.now();exports.unstable_now=function(){return Date.now()-u};f=function(a){null!==p?setTimeout(f,0,a):(p=a,setTimeout(t,0))};g=function(a,b){q=setTimeout(a,b)};h=function(){clearTimeout(q)};k=function(){return!1};l=exports.unstable_forceFrameRate=function(){}}else{var w=window.performance,x=window.Date,\ny=window.setTimeout,z=window.clearTimeout;if(\"undefined\"!==typeof console){var A=window.cancelAnimationFrame;\"function\"!==typeof window.requestAnimationFrame&&console.error(\"This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\");\"function\"!==typeof A&&console.error(\"This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\")}if(\"object\"===\ntypeof w&&\"function\"===typeof w.now)exports.unstable_now=function(){return w.now()};else{var B=x.now();exports.unstable_now=function(){return x.now()-B}}var C=!1,D=null,E=-1,F=5,G=0;k=function(){return exports.unstable_now()>=G};l=function(){};exports.unstable_forceFrameRate=function(a){0>a||125<a?console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing framerates higher than 125 fps is not unsupported\"):F=0<a?Math.floor(1E3/a):5};var H=new MessageChannel,I=H.port2;H.port1.onmessage=\nfunction(){if(null!==D){var a=exports.unstable_now();G=a+F;try{D(!0,a)?I.postMessage(null):(C=!1,D=null)}catch(b){throw I.postMessage(null),b;}}else C=!1};f=function(a){D=a;C||(C=!0,I.postMessage(null))};g=function(a,b){E=y(function(){a(exports.unstable_now())},b)};h=function(){z(E);E=-1}}function J(a,b){var c=a.length;a.push(b);a:for(;;){var d=c-1>>>1,e=a[d];if(void 0!==e&&0<K(e,b))a[d]=b,a[c]=e,c=d;else break a}}function L(a){a=a[0];return void 0===a?null:a}\nfunction M(a){var b=a[0];if(void 0!==b){var c=a.pop();if(c!==b){a[0]=c;a:for(var d=0,e=a.length;d<e;){var m=2*(d+1)-1,n=a[m],v=m+1,r=a[v];if(void 0!==n&&0>K(n,c))void 0!==r&&0>K(r,n)?(a[d]=r,a[v]=c,d=v):(a[d]=n,a[m]=c,d=m);else if(void 0!==r&&0>K(r,c))a[d]=r,a[v]=c,d=v;else break a}}return b}return null}function K(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}var N=[],O=[],P=1,Q=null,R=3,S=!1,T=!1,U=!1;\nfunction V(a){for(var b=L(O);null!==b;){if(null===b.callback)M(O);else if(b.startTime<=a)M(O),b.sortIndex=b.expirationTime,J(N,b);else break;b=L(O)}}function W(a){U=!1;V(a);if(!T)if(null!==L(N))T=!0,f(X);else{var b=L(O);null!==b&&g(W,b.startTime-a)}}\nfunction X(a,b){T=!1;U&&(U=!1,h());S=!0;var c=R;try{V(b);for(Q=L(N);null!==Q&&(!(Q.expirationTime>b)||a&&!k());){var d=Q.callback;if(null!==d){Q.callback=null;R=Q.priorityLevel;var e=d(Q.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?Q.callback=e:Q===L(N)&&M(N);V(b)}else M(N);Q=L(N)}if(null!==Q)var m=!0;else{var n=L(O);null!==n&&g(W,n.startTime-b);m=!1}return m}finally{Q=null,R=c,S=!1}}\nfunction Y(a){switch(a){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1E4;default:return 5E3}}var Z=l;exports.unstable_IdlePriority=5;exports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){T||S||(T=!0,f(X))};\nexports.unstable_getCurrentPriorityLevel=function(){return R};exports.unstable_getFirstCallbackNode=function(){return L(N)};exports.unstable_next=function(a){switch(R){case 1:case 2:case 3:var b=3;break;default:b=R}var c=R;R=b;try{return a()}finally{R=c}};exports.unstable_pauseExecution=function(){};exports.unstable_requestPaint=Z;exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=R;R=a;try{return b()}finally{R=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();if(\"object\"===typeof c&&null!==c){var e=c.delay;e=\"number\"===typeof e&&0<e?d+e:d;c=\"number\"===typeof c.timeout?c.timeout:Y(a)}else c=Y(a),e=d;c=e+c;a={id:P++,callback:b,priorityLevel:a,startTime:e,expirationTime:c,sortIndex:-1};e>d?(a.sortIndex=e,J(O,a),null===L(N)&&a===L(O)&&(U?h():U=!0,g(W,e-d))):(a.sortIndex=c,J(N,a),T||S||(T=!0,f(X)));return a};\nexports.unstable_shouldYield=function(){var a=exports.unstable_now();V(a);var b=L(N);return b!==Q&&null!==Q&&null!==b&&null!==b.callback&&b.startTime<=a&&b.expirationTime<Q.expirationTime||k()};exports.unstable_wrapCallback=function(a){var b=R;return function(){var c=R;R=b;try{return a.apply(this,arguments)}finally{R=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n  module.exports = require('./cjs/scheduler.development.js');\n}\n","module.exports = function cmp (a, b) {\n    var pa = a.split('.');\n    var pb = b.split('.');\n    for (var i = 0; i < 3; i++) {\n        var na = Number(pa[i]);\n        var nb = Number(pb[i]);\n        if (na > nb) return 1;\n        if (nb > na) return -1;\n        if (!isNaN(na) && isNaN(nb)) return 1;\n        if (isNaN(na) && !isNaN(nb)) return -1;\n    }\n    return 0;\n};\n","const ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n  static get ANY () {\n    return ANY\n  }\n\n  constructor (comp, options) {\n    options = parseOptions(options)\n\n    if (comp instanceof Comparator) {\n      if (comp.loose === !!options.loose) {\n        return comp\n      } else {\n        comp = comp.value\n      }\n    }\n\n    debug('comparator', comp, options)\n    this.options = options\n    this.loose = !!options.loose\n    this.parse(comp)\n\n    if (this.semver === ANY) {\n      this.value = ''\n    } else {\n      this.value = this.operator + this.semver.version\n    }\n\n    debug('comp', this)\n  }\n\n  parse (comp) {\n    const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n    const m = comp.match(r)\n\n    if (!m) {\n      throw new TypeError(`Invalid comparator: ${comp}`)\n    }\n\n    this.operator = m[1] !== undefined ? m[1] : ''\n    if (this.operator === '=') {\n      this.operator = ''\n    }\n\n    // if it literally is just '>' or '' then allow anything.\n    if (!m[2]) {\n      this.semver = ANY\n    } else {\n      this.semver = new SemVer(m[2], this.options.loose)\n    }\n  }\n\n  toString () {\n    return this.value\n  }\n\n  test (version) {\n    debug('Comparator.test', version, this.options.loose)\n\n    if (this.semver === ANY || version === ANY) {\n      return true\n    }\n\n    if (typeof version === 'string') {\n      try {\n        version = new SemVer(version, this.options)\n      } catch (er) {\n        return false\n      }\n    }\n\n    return cmp(version, this.operator, this.semver, this.options)\n  }\n\n  intersects (comp, options) {\n    if (!(comp instanceof Comparator)) {\n      throw new TypeError('a Comparator is required')\n    }\n\n    if (this.operator === '') {\n      if (this.value === '') {\n        return true\n      }\n      return new Range(comp.value, options).test(this.value)\n    } else if (comp.operator === '') {\n      if (comp.value === '') {\n        return true\n      }\n      return new Range(this.value, options).test(comp.semver)\n    }\n\n    options = parseOptions(options)\n\n    // Special cases where nothing can possibly be lower\n    if (options.includePrerelease &&\n      (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n      return false\n    }\n    if (!options.includePrerelease &&\n      (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n      return false\n    }\n\n    // Same direction increasing (> or >=)\n    if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n      return true\n    }\n    // Same direction decreasing (< or <=)\n    if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n      return true\n    }\n    // same SemVer and both sides are inclusive (<= or >=)\n    if (\n      (this.semver.version === comp.semver.version) &&\n      this.operator.includes('=') && comp.operator.includes('=')) {\n      return true\n    }\n    // opposite directions less than\n    if (cmp(this.semver, '<', comp.semver, options) &&\n      this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n      return true\n    }\n    // opposite directions greater than\n    if (cmp(this.semver, '>', comp.semver, options) &&\n      this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n      return true\n    }\n    return false\n  }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n","// hoisted class for cyclic dependency\nclass Range {\n  constructor (range, options) {\n    options = parseOptions(options)\n\n    if (range instanceof Range) {\n      if (\n        range.loose === !!options.loose &&\n        range.includePrerelease === !!options.includePrerelease\n      ) {\n        return range\n      } else {\n        return new Range(range.raw, options)\n      }\n    }\n\n    if (range instanceof Comparator) {\n      // just put it in the set and return\n      this.raw = range.value\n      this.set = [[range]]\n      this.format()\n      return this\n    }\n\n    this.options = options\n    this.loose = !!options.loose\n    this.includePrerelease = !!options.includePrerelease\n\n    // First, split based on boolean or ||\n    this.raw = range\n    this.set = range\n      .split('||')\n      // map the range to a 2d array of comparators\n      .map(r => this.parseRange(r.trim()))\n      // throw out any comparator lists that are empty\n      // this generally means that it was not a valid range, which is allowed\n      // in loose mode, but will still throw if the WHOLE range is invalid.\n      .filter(c => c.length)\n\n    if (!this.set.length) {\n      throw new TypeError(`Invalid SemVer Range: ${range}`)\n    }\n\n    // if we have any that are not the null set, throw out null sets.\n    if (this.set.length > 1) {\n      // keep the first one, in case they're all null sets\n      const first = this.set[0]\n      this.set = this.set.filter(c => !isNullSet(c[0]))\n      if (this.set.length === 0) {\n        this.set = [first]\n      } else if (this.set.length > 1) {\n        // if we have any that are *, then the range is just *\n        for (const c of this.set) {\n          if (c.length === 1 && isAny(c[0])) {\n            this.set = [c]\n            break\n          }\n        }\n      }\n    }\n\n    this.format()\n  }\n\n  format () {\n    this.range = this.set\n      .map((comps) => {\n        return comps.join(' ').trim()\n      })\n      .join('||')\n      .trim()\n    return this.range\n  }\n\n  toString () {\n    return this.range\n  }\n\n  parseRange (range) {\n    range = range.trim()\n\n    // memoize range parsing for performance.\n    // this is a very hot path, and fully deterministic.\n    const memoOpts =\n      (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n      (this.options.loose && FLAG_LOOSE)\n    const memoKey = memoOpts + ':' + range\n    const cached = cache.get(memoKey)\n    if (cached) {\n      return cached\n    }\n\n    const loose = this.options.loose\n    // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n    const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n    range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n    debug('hyphen replace', range)\n    // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n    range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n    debug('comparator trim', range)\n\n    // `~ 1.2.3` => `~1.2.3`\n    range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n\n    // `^ 1.2.3` => `^1.2.3`\n    range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n\n    // normalize spaces\n    range = range.split(/\\s+/).join(' ')\n\n    // At this point, the range is completely trimmed and\n    // ready to be split into comparators.\n\n    let rangeList = range\n      .split(' ')\n      .map(comp => parseComparator(comp, this.options))\n      .join(' ')\n      .split(/\\s+/)\n      // >=0.0.0 is equivalent to *\n      .map(comp => replaceGTE0(comp, this.options))\n\n    if (loose) {\n      // in loose mode, throw out any that are not valid comparators\n      rangeList = rangeList.filter(comp => {\n        debug('loose invalid filter', comp, this.options)\n        return !!comp.match(re[t.COMPARATORLOOSE])\n      })\n    }\n    debug('range list', rangeList)\n\n    // if any comparators are the null set, then replace with JUST null set\n    // if more than one comparator, remove any * comparators\n    // also, don't include the same comparator more than once\n    const rangeMap = new Map()\n    const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n    for (const comp of comparators) {\n      if (isNullSet(comp)) {\n        return [comp]\n      }\n      rangeMap.set(comp.value, comp)\n    }\n    if (rangeMap.size > 1 && rangeMap.has('')) {\n      rangeMap.delete('')\n    }\n\n    const result = [...rangeMap.values()]\n    cache.set(memoKey, result)\n    return result\n  }\n\n  intersects (range, options) {\n    if (!(range instanceof Range)) {\n      throw new TypeError('a Range is required')\n    }\n\n    return this.set.some((thisComparators) => {\n      return (\n        isSatisfiable(thisComparators, options) &&\n        range.set.some((rangeComparators) => {\n          return (\n            isSatisfiable(rangeComparators, options) &&\n            thisComparators.every((thisComparator) => {\n              return rangeComparators.every((rangeComparator) => {\n                return thisComparator.intersects(rangeComparator, options)\n              })\n            })\n          )\n        })\n      )\n    })\n  }\n\n  // if ANY of the sets match ALL of its comparators, then pass\n  test (version) {\n    if (!version) {\n      return false\n    }\n\n    if (typeof version === 'string') {\n      try {\n        version = new SemVer(version, this.options)\n      } catch (er) {\n        return false\n      }\n    }\n\n    for (let i = 0; i < this.set.length; i++) {\n      if (testSet(this.set[i], version, this.options)) {\n        return true\n      }\n    }\n    return false\n  }\n}\n\nmodule.exports = Range\n\nconst LRU = require('lru-cache')\nconst cache = new LRU({ max: 1000 })\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n  re,\n  t,\n  comparatorTrimReplace,\n  tildeTrimReplace,\n  caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n  let result = true\n  const remainingComparators = comparators.slice()\n  let testComparator = remainingComparators.pop()\n\n  while (result && remainingComparators.length) {\n    result = remainingComparators.every((otherComparator) => {\n      return testComparator.intersects(otherComparator, options)\n    })\n\n    testComparator = remainingComparators.pop()\n  }\n\n  return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n  debug('comp', comp, options)\n  comp = replaceCarets(comp, options)\n  debug('caret', comp)\n  comp = replaceTildes(comp, options)\n  debug('tildes', comp)\n  comp = replaceXRanges(comp, options)\n  debug('xrange', comp)\n  comp = replaceStars(comp, options)\n  debug('stars', comp)\n  return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) =>\n  comp.trim().split(/\\s+/).map((c) => {\n    return replaceTilde(c, options)\n  }).join(' ')\n\nconst replaceTilde = (comp, options) => {\n  const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n  return comp.replace(r, (_, M, m, p, pr) => {\n    debug('tilde', comp, _, M, m, p, pr)\n    let ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n    } else if (isX(p)) {\n      // ~1.2 == >=1.2.0 <1.3.0-0\n      ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n    } else if (pr) {\n      debug('replaceTilde pr', pr)\n      ret = `>=${M}.${m}.${p}-${pr\n      } <${M}.${+m + 1}.0-0`\n    } else {\n      // ~1.2.3 == >=1.2.3 <1.3.0-0\n      ret = `>=${M}.${m}.${p\n      } <${M}.${+m + 1}.0-0`\n    }\n\n    debug('tilde return', ret)\n    return ret\n  })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) =>\n  comp.trim().split(/\\s+/).map((c) => {\n    return replaceCaret(c, options)\n  }).join(' ')\n\nconst replaceCaret = (comp, options) => {\n  debug('caret', comp, options)\n  const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n  const z = options.includePrerelease ? '-0' : ''\n  return comp.replace(r, (_, M, m, p, pr) => {\n    debug('caret', comp, _, M, m, p, pr)\n    let ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n    } else if (isX(p)) {\n      if (M === '0') {\n        ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n      } else {\n        ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n      }\n    } else if (pr) {\n      debug('replaceCaret pr', pr)\n      if (M === '0') {\n        if (m === '0') {\n          ret = `>=${M}.${m}.${p}-${pr\n          } <${M}.${m}.${+p + 1}-0`\n        } else {\n          ret = `>=${M}.${m}.${p}-${pr\n          } <${M}.${+m + 1}.0-0`\n        }\n      } else {\n        ret = `>=${M}.${m}.${p}-${pr\n        } <${+M + 1}.0.0-0`\n      }\n    } else {\n      debug('no pr')\n      if (M === '0') {\n        if (m === '0') {\n          ret = `>=${M}.${m}.${p\n          }${z} <${M}.${m}.${+p + 1}-0`\n        } else {\n          ret = `>=${M}.${m}.${p\n          }${z} <${M}.${+m + 1}.0-0`\n        }\n      } else {\n        ret = `>=${M}.${m}.${p\n        } <${+M + 1}.0.0-0`\n      }\n    }\n\n    debug('caret return', ret)\n    return ret\n  })\n}\n\nconst replaceXRanges = (comp, options) => {\n  debug('replaceXRanges', comp, options)\n  return comp.split(/\\s+/).map((c) => {\n    return replaceXRange(c, options)\n  }).join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n  comp = comp.trim()\n  const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n  return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n    debug('xRange', comp, ret, gtlt, M, m, p, pr)\n    const xM = isX(M)\n    const xm = xM || isX(m)\n    const xp = xm || isX(p)\n    const anyX = xp\n\n    if (gtlt === '=' && anyX) {\n      gtlt = ''\n    }\n\n    // if we're including prereleases in the match, then we need\n    // to fix this to -0, the lowest possible prerelease value\n    pr = options.includePrerelease ? '-0' : ''\n\n    if (xM) {\n      if (gtlt === '>' || gtlt === '<') {\n        // nothing is allowed\n        ret = '<0.0.0-0'\n      } else {\n        // nothing is forbidden\n        ret = '*'\n      }\n    } else if (gtlt && anyX) {\n      // we know patch is an x, because we have any x at all.\n      // replace X with 0\n      if (xm) {\n        m = 0\n      }\n      p = 0\n\n      if (gtlt === '>') {\n        // >1 => >=2.0.0\n        // >1.2 => >=1.3.0\n        gtlt = '>='\n        if (xm) {\n          M = +M + 1\n          m = 0\n          p = 0\n        } else {\n          m = +m + 1\n          p = 0\n        }\n      } else if (gtlt === '<=') {\n        // <=0.7.x is actually <0.8.0, since any 0.7.x should\n        // pass.  Similarly, <=7.x is actually <8.0.0, etc.\n        gtlt = '<'\n        if (xm) {\n          M = +M + 1\n        } else {\n          m = +m + 1\n        }\n      }\n\n      if (gtlt === '<') {\n        pr = '-0'\n      }\n\n      ret = `${gtlt + M}.${m}.${p}${pr}`\n    } else if (xm) {\n      ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n    } else if (xp) {\n      ret = `>=${M}.${m}.0${pr\n      } <${M}.${+m + 1}.0-0`\n    }\n\n    debug('xRange return', ret)\n\n    return ret\n  })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n  debug('replaceStars', comp, options)\n  // Looseness is ignored here.  star is always as loose as it gets!\n  return comp.trim().replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n  debug('replaceGTE0', comp, options)\n  return comp.trim()\n    .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\nconst hyphenReplace = incPr => ($0,\n  from, fM, fm, fp, fpr, fb,\n  to, tM, tm, tp, tpr, tb) => {\n  if (isX(fM)) {\n    from = ''\n  } else if (isX(fm)) {\n    from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n  } else if (isX(fp)) {\n    from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n  } else if (fpr) {\n    from = `>=${from}`\n  } else {\n    from = `>=${from}${incPr ? '-0' : ''}`\n  }\n\n  if (isX(tM)) {\n    to = ''\n  } else if (isX(tm)) {\n    to = `<${+tM + 1}.0.0-0`\n  } else if (isX(tp)) {\n    to = `<${tM}.${+tm + 1}.0-0`\n  } else if (tpr) {\n    to = `<=${tM}.${tm}.${tp}-${tpr}`\n  } else if (incPr) {\n    to = `<${tM}.${tm}.${+tp + 1}-0`\n  } else {\n    to = `<=${to}`\n  }\n\n  return (`${from} ${to}`).trim()\n}\n\nconst testSet = (set, version, options) => {\n  for (let i = 0; i < set.length; i++) {\n    if (!set[i].test(version)) {\n      return false\n    }\n  }\n\n  if (version.prerelease.length && !options.includePrerelease) {\n    // Find the set of versions that are allowed to have prereleases\n    // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n    // That should allow `1.2.3-pr.2` to pass.\n    // However, `1.2.4-alpha.notready` should NOT be allowed,\n    // even though it's within the range set by the comparators.\n    for (let i = 0; i < set.length; i++) {\n      debug(set[i].semver)\n      if (set[i].semver === Comparator.ANY) {\n        continue\n      }\n\n      if (set[i].semver.prerelease.length > 0) {\n        const allowed = set[i].semver\n        if (allowed.major === version.major &&\n            allowed.minor === version.minor &&\n            allowed.patch === version.patch) {\n          return true\n        }\n      }\n    }\n\n    // Version has a -pre, but it's not one of the ones we like.\n    return false\n  }\n\n  return true\n}\n","const debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n  constructor (version, options) {\n    options = parseOptions(options)\n\n    if (version instanceof SemVer) {\n      if (version.loose === !!options.loose &&\n          version.includePrerelease === !!options.includePrerelease) {\n        return version\n      } else {\n        version = version.version\n      }\n    } else if (typeof version !== 'string') {\n      throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n    }\n\n    if (version.length > MAX_LENGTH) {\n      throw new TypeError(\n        `version is longer than ${MAX_LENGTH} characters`\n      )\n    }\n\n    debug('SemVer', version, options)\n    this.options = options\n    this.loose = !!options.loose\n    // this isn't actually relevant for versions, but keep it so that we\n    // don't run into trouble passing this.options around.\n    this.includePrerelease = !!options.includePrerelease\n\n    const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n    if (!m) {\n      throw new TypeError(`Invalid Version: ${version}`)\n    }\n\n    this.raw = version\n\n    // these are actually numbers\n    this.major = +m[1]\n    this.minor = +m[2]\n    this.patch = +m[3]\n\n    if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n      throw new TypeError('Invalid major version')\n    }\n\n    if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n      throw new TypeError('Invalid minor version')\n    }\n\n    if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n      throw new TypeError('Invalid patch version')\n    }\n\n    // numberify any prerelease numeric ids\n    if (!m[4]) {\n      this.prerelease = []\n    } else {\n      this.prerelease = m[4].split('.').map((id) => {\n        if (/^[0-9]+$/.test(id)) {\n          const num = +id\n          if (num >= 0 && num < MAX_SAFE_INTEGER) {\n            return num\n          }\n        }\n        return id\n      })\n    }\n\n    this.build = m[5] ? m[5].split('.') : []\n    this.format()\n  }\n\n  format () {\n    this.version = `${this.major}.${this.minor}.${this.patch}`\n    if (this.prerelease.length) {\n      this.version += `-${this.prerelease.join('.')}`\n    }\n    return this.version\n  }\n\n  toString () {\n    return this.version\n  }\n\n  compare (other) {\n    debug('SemVer.compare', this.version, this.options, other)\n    if (!(other instanceof SemVer)) {\n      if (typeof other === 'string' && other === this.version) {\n        return 0\n      }\n      other = new SemVer(other, this.options)\n    }\n\n    if (other.version === this.version) {\n      return 0\n    }\n\n    return this.compareMain(other) || this.comparePre(other)\n  }\n\n  compareMain (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    return (\n      compareIdentifiers(this.major, other.major) ||\n      compareIdentifiers(this.minor, other.minor) ||\n      compareIdentifiers(this.patch, other.patch)\n    )\n  }\n\n  comparePre (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    // NOT having a prerelease is > having one\n    if (this.prerelease.length && !other.prerelease.length) {\n      return -1\n    } else if (!this.prerelease.length && other.prerelease.length) {\n      return 1\n    } else if (!this.prerelease.length && !other.prerelease.length) {\n      return 0\n    }\n\n    let i = 0\n    do {\n      const a = this.prerelease[i]\n      const b = other.prerelease[i]\n      debug('prerelease compare', i, a, b)\n      if (a === undefined && b === undefined) {\n        return 0\n      } else if (b === undefined) {\n        return 1\n      } else if (a === undefined) {\n        return -1\n      } else if (a === b) {\n        continue\n      } else {\n        return compareIdentifiers(a, b)\n      }\n    } while (++i)\n  }\n\n  compareBuild (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    let i = 0\n    do {\n      const a = this.build[i]\n      const b = other.build[i]\n      debug('prerelease compare', i, a, b)\n      if (a === undefined && b === undefined) {\n        return 0\n      } else if (b === undefined) {\n        return 1\n      } else if (a === undefined) {\n        return -1\n      } else if (a === b) {\n        continue\n      } else {\n        return compareIdentifiers(a, b)\n      }\n    } while (++i)\n  }\n\n  // preminor will bump the version up to the next minor release, and immediately\n  // down to pre-release. premajor and prepatch work the same way.\n  inc (release, identifier, identifierBase) {\n    switch (release) {\n      case 'premajor':\n        this.prerelease.length = 0\n        this.patch = 0\n        this.minor = 0\n        this.major++\n        this.inc('pre', identifier, identifierBase)\n        break\n      case 'preminor':\n        this.prerelease.length = 0\n        this.patch = 0\n        this.minor++\n        this.inc('pre', identifier, identifierBase)\n        break\n      case 'prepatch':\n        // If this is already a prerelease, it will bump to the next version\n        // drop any prereleases that might already exist, since they are not\n        // relevant at this point.\n        this.prerelease.length = 0\n        this.inc('patch', identifier, identifierBase)\n        this.inc('pre', identifier, identifierBase)\n        break\n      // If the input is a non-prerelease version, this acts the same as\n      // prepatch.\n      case 'prerelease':\n        if (this.prerelease.length === 0) {\n          this.inc('patch', identifier, identifierBase)\n        }\n        this.inc('pre', identifier, identifierBase)\n        break\n\n      case 'major':\n        // If this is a pre-major version, bump up to the same major version.\n        // Otherwise increment major.\n        // 1.0.0-5 bumps to 1.0.0\n        // 1.1.0 bumps to 2.0.0\n        if (\n          this.minor !== 0 ||\n          this.patch !== 0 ||\n          this.prerelease.length === 0\n        ) {\n          this.major++\n        }\n        this.minor = 0\n        this.patch = 0\n        this.prerelease = []\n        break\n      case 'minor':\n        // If this is a pre-minor version, bump up to the same minor version.\n        // Otherwise increment minor.\n        // 1.2.0-5 bumps to 1.2.0\n        // 1.2.1 bumps to 1.3.0\n        if (this.patch !== 0 || this.prerelease.length === 0) {\n          this.minor++\n        }\n        this.patch = 0\n        this.prerelease = []\n        break\n      case 'patch':\n        // If this is not a pre-release version, it will increment the patch.\n        // If it is a pre-release it will bump up to the same patch version.\n        // 1.2.0-5 patches to 1.2.0\n        // 1.2.0 patches to 1.2.1\n        if (this.prerelease.length === 0) {\n          this.patch++\n        }\n        this.prerelease = []\n        break\n      // This probably shouldn't be used publicly.\n      // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n      case 'pre': {\n        const base = Number(identifierBase) ? 1 : 0\n\n        if (!identifier && identifierBase === false) {\n          throw new Error('invalid increment argument: identifier is empty')\n        }\n\n        if (this.prerelease.length === 0) {\n          this.prerelease = [base]\n        } else {\n          let i = this.prerelease.length\n          while (--i >= 0) {\n            if (typeof this.prerelease[i] === 'number') {\n              this.prerelease[i]++\n              i = -2\n            }\n          }\n          if (i === -1) {\n            // didn't increment anything\n            if (identifier === this.prerelease.join('.') && identifierBase === false) {\n              throw new Error('invalid increment argument: identifier already exists')\n            }\n            this.prerelease.push(base)\n          }\n        }\n        if (identifier) {\n          // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n          // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n          let prerelease = [identifier, base]\n          if (identifierBase === false) {\n            prerelease = [identifier]\n          }\n          if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n            if (isNaN(this.prerelease[1])) {\n              this.prerelease = prerelease\n            }\n          } else {\n            this.prerelease = prerelease\n          }\n        }\n        break\n      }\n      default:\n        throw new Error(`invalid increment argument: ${release}`)\n    }\n    this.format()\n    this.raw = this.version\n    return this\n  }\n}\n\nmodule.exports = SemVer\n","const eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n  switch (op) {\n    case '===':\n      if (typeof a === 'object') {\n        a = a.version\n      }\n      if (typeof b === 'object') {\n        b = b.version\n      }\n      return a === b\n\n    case '!==':\n      if (typeof a === 'object') {\n        a = a.version\n      }\n      if (typeof b === 'object') {\n        b = b.version\n      }\n      return a !== b\n\n    case '':\n    case '=':\n    case '==':\n      return eq(a, b, loose)\n\n    case '!=':\n      return neq(a, b, loose)\n\n    case '>':\n      return gt(a, b, loose)\n\n    case '>=':\n      return gte(a, b, loose)\n\n    case '<':\n      return lt(a, b, loose)\n\n    case '<=':\n      return lte(a, b, loose)\n\n    default:\n      throw new TypeError(`Invalid operator: ${op}`)\n  }\n}\nmodule.exports = cmp\n","const SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n  new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n","const compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n","const compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n","const compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n","const compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n","const compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n","const compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n","const Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n  try {\n    range = new Range(range, options)\n  } catch (er) {\n    return false\n  }\n  return range.test(version)\n}\nmodule.exports = satisfies\n","// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\nconst RELEASE_TYPES = [\n  'major',\n  'premajor',\n  'minor',\n  'preminor',\n  'patch',\n  'prepatch',\n  'prerelease',\n]\n\nmodule.exports = {\n  MAX_LENGTH,\n  MAX_SAFE_COMPONENT_LENGTH,\n  MAX_SAFE_INTEGER,\n  RELEASE_TYPES,\n  SEMVER_SPEC_VERSION,\n  FLAG_INCLUDE_PRERELEASE: 0b001,\n  FLAG_LOOSE: 0b010,\n}\n","const debug = (\n  typeof process === 'object' &&\n  process.env &&\n  process.env.NODE_DEBUG &&\n  /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n  : () => {}\n\nmodule.exports = debug\n","const numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n  const anum = numeric.test(a)\n  const bnum = numeric.test(b)\n\n  if (anum && bnum) {\n    a = +a\n    b = +b\n  }\n\n  return a === b ? 0\n    : (anum && !bnum) ? -1\n    : (bnum && !anum) ? 1\n    : a < b ? -1\n    : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n  compareIdentifiers,\n  rcompareIdentifiers,\n}\n","// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n  if (!options) {\n    return emptyOpts\n  }\n\n  if (typeof options !== 'object') {\n    return looseOption\n  }\n\n  return options\n}\nmodule.exports = parseOptions\n","const { MAX_SAFE_COMPONENT_LENGTH } = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst src = exports.src = []\nconst t = exports.t = {}\nlet R = 0\n\nconst createToken = (name, value, isGlobal) => {\n  const index = R++\n  debug(name, index, value)\n  t[name] = index\n  src[index] = value\n  re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '[0-9]+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', '\\\\d*[a-zA-Z-][a-zA-Z0-9-]*')\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n                   `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n                   `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n                        `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n                        `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+')\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups.  The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n  src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n  src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:${src[t.PRERELEASE]})?${\n                     src[t.BUILD]}?` +\n                   `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:${src[t.PRERELEASELOOSE]})?${\n                          src[t.BUILD]}?` +\n                        `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCE', `${'(^|[^\\\\d])' +\n              '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n              `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n              `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n              `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n                   `\\\\s+-\\\\s+` +\n                   `(${src[t.XRANGEPLAIN]})` +\n                   `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n                        `\\\\s+-\\\\s+` +\n                        `(${src[t.XRANGEPLAINLOOSE]})` +\n                        `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n","'use strict'\n\n// A linked list to keep track of recently-used-ness\nconst Yallist = require('yallist')\n\nconst MAX = Symbol('max')\nconst LENGTH = Symbol('length')\nconst LENGTH_CALCULATOR = Symbol('lengthCalculator')\nconst ALLOW_STALE = Symbol('allowStale')\nconst MAX_AGE = Symbol('maxAge')\nconst DISPOSE = Symbol('dispose')\nconst NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet')\nconst LRU_LIST = Symbol('lruList')\nconst CACHE = Symbol('cache')\nconst UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet')\n\nconst naiveLength = () => 1\n\n// lruList is a yallist where the head is the youngest\n// item, and the tail is the oldest.  the list contains the Hit\n// objects as the entries.\n// Each Hit object has a reference to its Yallist.Node.  This\n// never changes.\n//\n// cache is a Map (or PseudoMap) that matches the keys to\n// the Yallist.Node object.\nclass LRUCache {\n  constructor (options) {\n    if (typeof options === 'number')\n      options = { max: options }\n\n    if (!options)\n      options = {}\n\n    if (options.max && (typeof options.max !== 'number' || options.max < 0))\n      throw new TypeError('max must be a non-negative number')\n    // Kind of weird to have a default max of Infinity, but oh well.\n    const max = this[MAX] = options.max || Infinity\n\n    const lc = options.length || naiveLength\n    this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc\n    this[ALLOW_STALE] = options.stale || false\n    if (options.maxAge && typeof options.maxAge !== 'number')\n      throw new TypeError('maxAge must be a number')\n    this[MAX_AGE] = options.maxAge || 0\n    this[DISPOSE] = options.dispose\n    this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false\n    this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false\n    this.reset()\n  }\n\n  // resize the cache when the max changes.\n  set max (mL) {\n    if (typeof mL !== 'number' || mL < 0)\n      throw new TypeError('max must be a non-negative number')\n\n    this[MAX] = mL || Infinity\n    trim(this)\n  }\n  get max () {\n    return this[MAX]\n  }\n\n  set allowStale (allowStale) {\n    this[ALLOW_STALE] = !!allowStale\n  }\n  get allowStale () {\n    return this[ALLOW_STALE]\n  }\n\n  set maxAge (mA) {\n    if (typeof mA !== 'number')\n      throw new TypeError('maxAge must be a non-negative number')\n\n    this[MAX_AGE] = mA\n    trim(this)\n  }\n  get maxAge () {\n    return this[MAX_AGE]\n  }\n\n  // resize the cache when the lengthCalculator changes.\n  set lengthCalculator (lC) {\n    if (typeof lC !== 'function')\n      lC = naiveLength\n\n    if (lC !== this[LENGTH_CALCULATOR]) {\n      this[LENGTH_CALCULATOR] = lC\n      this[LENGTH] = 0\n      this[LRU_LIST].forEach(hit => {\n        hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key)\n        this[LENGTH] += hit.length\n      })\n    }\n    trim(this)\n  }\n  get lengthCalculator () { return this[LENGTH_CALCULATOR] }\n\n  get length () { return this[LENGTH] }\n  get itemCount () { return this[LRU_LIST].length }\n\n  rforEach (fn, thisp) {\n    thisp = thisp || this\n    for (let walker = this[LRU_LIST].tail; walker !== null;) {\n      const prev = walker.prev\n      forEachStep(this, fn, walker, thisp)\n      walker = prev\n    }\n  }\n\n  forEach (fn, thisp) {\n    thisp = thisp || this\n    for (let walker = this[LRU_LIST].head; walker !== null;) {\n      const next = walker.next\n      forEachStep(this, fn, walker, thisp)\n      walker = next\n    }\n  }\n\n  keys () {\n    return this[LRU_LIST].toArray().map(k => k.key)\n  }\n\n  values () {\n    return this[LRU_LIST].toArray().map(k => k.value)\n  }\n\n  reset () {\n    if (this[DISPOSE] &&\n        this[LRU_LIST] &&\n        this[LRU_LIST].length) {\n      this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value))\n    }\n\n    this[CACHE] = new Map() // hash of items by key\n    this[LRU_LIST] = new Yallist() // list of items in order of use recency\n    this[LENGTH] = 0 // length of items in the list\n  }\n\n  dump () {\n    return this[LRU_LIST].map(hit =>\n      isStale(this, hit) ? false : {\n        k: hit.key,\n        v: hit.value,\n        e: hit.now + (hit.maxAge || 0)\n      }).toArray().filter(h => h)\n  }\n\n  dumpLru () {\n    return this[LRU_LIST]\n  }\n\n  set (key, value, maxAge) {\n    maxAge = maxAge || this[MAX_AGE]\n\n    if (maxAge && typeof maxAge !== 'number')\n      throw new TypeError('maxAge must be a number')\n\n    const now = maxAge ? Date.now() : 0\n    const len = this[LENGTH_CALCULATOR](value, key)\n\n    if (this[CACHE].has(key)) {\n      if (len > this[MAX]) {\n        del(this, this[CACHE].get(key))\n        return false\n      }\n\n      const node = this[CACHE].get(key)\n      const item = node.value\n\n      // dispose of the old one before overwriting\n      // split out into 2 ifs for better coverage tracking\n      if (this[DISPOSE]) {\n        if (!this[NO_DISPOSE_ON_SET])\n          this[DISPOSE](key, item.value)\n      }\n\n      item.now = now\n      item.maxAge = maxAge\n      item.value = value\n      this[LENGTH] += len - item.length\n      item.length = len\n      this.get(key)\n      trim(this)\n      return true\n    }\n\n    const hit = new Entry(key, value, len, now, maxAge)\n\n    // oversized objects fall out of cache automatically.\n    if (hit.length > this[MAX]) {\n      if (this[DISPOSE])\n        this[DISPOSE](key, value)\n\n      return false\n    }\n\n    this[LENGTH] += hit.length\n    this[LRU_LIST].unshift(hit)\n    this[CACHE].set(key, this[LRU_LIST].head)\n    trim(this)\n    return true\n  }\n\n  has (key) {\n    if (!this[CACHE].has(key)) return false\n    const hit = this[CACHE].get(key).value\n    return !isStale(this, hit)\n  }\n\n  get (key) {\n    return get(this, key, true)\n  }\n\n  peek (key) {\n    return get(this, key, false)\n  }\n\n  pop () {\n    const node = this[LRU_LIST].tail\n    if (!node)\n      return null\n\n    del(this, node)\n    return node.value\n  }\n\n  del (key) {\n    del(this, this[CACHE].get(key))\n  }\n\n  load (arr) {\n    // reset the cache\n    this.reset()\n\n    const now = Date.now()\n    // A previous serialized cache has the most recent items first\n    for (let l = arr.length - 1; l >= 0; l--) {\n      const hit = arr[l]\n      const expiresAt = hit.e || 0\n      if (expiresAt === 0)\n        // the item was created without expiration in a non aged cache\n        this.set(hit.k, hit.v)\n      else {\n        const maxAge = expiresAt - now\n        // dont add already expired items\n        if (maxAge > 0) {\n          this.set(hit.k, hit.v, maxAge)\n        }\n      }\n    }\n  }\n\n  prune () {\n    this[CACHE].forEach((value, key) => get(this, key, false))\n  }\n}\n\nconst get = (self, key, doUse) => {\n  const node = self[CACHE].get(key)\n  if (node) {\n    const hit = node.value\n    if (isStale(self, hit)) {\n      del(self, node)\n      if (!self[ALLOW_STALE])\n        return undefined\n    } else {\n      if (doUse) {\n        if (self[UPDATE_AGE_ON_GET])\n          node.value.now = Date.now()\n        self[LRU_LIST].unshiftNode(node)\n      }\n    }\n    return hit.value\n  }\n}\n\nconst isStale = (self, hit) => {\n  if (!hit || (!hit.maxAge && !self[MAX_AGE]))\n    return false\n\n  const diff = Date.now() - hit.now\n  return hit.maxAge ? diff > hit.maxAge\n    : self[MAX_AGE] && (diff > self[MAX_AGE])\n}\n\nconst trim = self => {\n  if (self[LENGTH] > self[MAX]) {\n    for (let walker = self[LRU_LIST].tail;\n      self[LENGTH] > self[MAX] && walker !== null;) {\n      // We know that we're about to delete this one, and also\n      // what the next least recently used key will be, so just\n      // go ahead and set it now.\n      const prev = walker.prev\n      del(self, walker)\n      walker = prev\n    }\n  }\n}\n\nconst del = (self, node) => {\n  if (node) {\n    const hit = node.value\n    if (self[DISPOSE])\n      self[DISPOSE](hit.key, hit.value)\n\n    self[LENGTH] -= hit.length\n    self[CACHE].delete(hit.key)\n    self[LRU_LIST].removeNode(node)\n  }\n}\n\nclass Entry {\n  constructor (key, value, length, now, maxAge) {\n    this.key = key\n    this.value = value\n    this.length = length\n    this.now = now\n    this.maxAge = maxAge || 0\n  }\n}\n\nconst forEachStep = (self, fn, node, thisp) => {\n  let hit = node.value\n  if (isStale(self, hit)) {\n    del(self, node)\n    if (!self[ALLOW_STALE])\n      hit = undefined\n  }\n  if (hit)\n    fn.call(thisp, hit.value, hit.key, self)\n}\n\nmodule.exports = LRUCache\n","'use strict'\nmodule.exports = function (Yallist) {\n  Yallist.prototype[Symbol.iterator] = function* () {\n    for (let walker = this.head; walker; walker = walker.next) {\n      yield walker.value\n    }\n  }\n}\n","'use strict'\nmodule.exports = Yallist\n\nYallist.Node = Node\nYallist.create = Yallist\n\nfunction Yallist (list) {\n  var self = this\n  if (!(self instanceof Yallist)) {\n    self = new Yallist()\n  }\n\n  self.tail = null\n  self.head = null\n  self.length = 0\n\n  if (list && typeof list.forEach === 'function') {\n    list.forEach(function (item) {\n      self.push(item)\n    })\n  } else if (arguments.length > 0) {\n    for (var i = 0, l = arguments.length; i < l; i++) {\n      self.push(arguments[i])\n    }\n  }\n\n  return self\n}\n\nYallist.prototype.removeNode = function (node) {\n  if (node.list !== this) {\n    throw new Error('removing node which does not belong to this list')\n  }\n\n  var next = node.next\n  var prev = node.prev\n\n  if (next) {\n    next.prev = prev\n  }\n\n  if (prev) {\n    prev.next = next\n  }\n\n  if (node === this.head) {\n    this.head = next\n  }\n  if (node === this.tail) {\n    this.tail = prev\n  }\n\n  node.list.length--\n  node.next = null\n  node.prev = null\n  node.list = null\n\n  return next\n}\n\nYallist.prototype.unshiftNode = function (node) {\n  if (node === this.head) {\n    return\n  }\n\n  if (node.list) {\n    node.list.removeNode(node)\n  }\n\n  var head = this.head\n  node.list = this\n  node.next = head\n  if (head) {\n    head.prev = node\n  }\n\n  this.head = node\n  if (!this.tail) {\n    this.tail = node\n  }\n  this.length++\n}\n\nYallist.prototype.pushNode = function (node) {\n  if (node === this.tail) {\n    return\n  }\n\n  if (node.list) {\n    node.list.removeNode(node)\n  }\n\n  var tail = this.tail\n  node.list = this\n  node.prev = tail\n  if (tail) {\n    tail.next = node\n  }\n\n  this.tail = node\n  if (!this.head) {\n    this.head = node\n  }\n  this.length++\n}\n\nYallist.prototype.push = function () {\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    push(this, arguments[i])\n  }\n  return this.length\n}\n\nYallist.prototype.unshift = function () {\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    unshift(this, arguments[i])\n  }\n  return this.length\n}\n\nYallist.prototype.pop = function () {\n  if (!this.tail) {\n    return undefined\n  }\n\n  var res = this.tail.value\n  this.tail = this.tail.prev\n  if (this.tail) {\n    this.tail.next = null\n  } else {\n    this.head = null\n  }\n  this.length--\n  return res\n}\n\nYallist.prototype.shift = function () {\n  if (!this.head) {\n    return undefined\n  }\n\n  var res = this.head.value\n  this.head = this.head.next\n  if (this.head) {\n    this.head.prev = null\n  } else {\n    this.tail = null\n  }\n  this.length--\n  return res\n}\n\nYallist.prototype.forEach = function (fn, thisp) {\n  thisp = thisp || this\n  for (var walker = this.head, i = 0; walker !== null; i++) {\n    fn.call(thisp, walker.value, i, this)\n    walker = walker.next\n  }\n}\n\nYallist.prototype.forEachReverse = function (fn, thisp) {\n  thisp = thisp || this\n  for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {\n    fn.call(thisp, walker.value, i, this)\n    walker = walker.prev\n  }\n}\n\nYallist.prototype.get = function (n) {\n  for (var i = 0, walker = this.head; walker !== null && i < n; i++) {\n    // abort out of the list early if we hit a cycle\n    walker = walker.next\n  }\n  if (i === n && walker !== null) {\n    return walker.value\n  }\n}\n\nYallist.prototype.getReverse = function (n) {\n  for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {\n    // abort out of the list early if we hit a cycle\n    walker = walker.prev\n  }\n  if (i === n && walker !== null) {\n    return walker.value\n  }\n}\n\nYallist.prototype.map = function (fn, thisp) {\n  thisp = thisp || this\n  var res = new Yallist()\n  for (var walker = this.head; walker !== null;) {\n    res.push(fn.call(thisp, walker.value, this))\n    walker = walker.next\n  }\n  return res\n}\n\nYallist.prototype.mapReverse = function (fn, thisp) {\n  thisp = thisp || this\n  var res = new Yallist()\n  for (var walker = this.tail; walker !== null;) {\n    res.push(fn.call(thisp, walker.value, this))\n    walker = walker.prev\n  }\n  return res\n}\n\nYallist.prototype.reduce = function (fn, initial) {\n  var acc\n  var walker = this.head\n  if (arguments.length > 1) {\n    acc = initial\n  } else if (this.head) {\n    walker = this.head.next\n    acc = this.head.value\n  } else {\n    throw new TypeError('Reduce of empty list with no initial value')\n  }\n\n  for (var i = 0; walker !== null; i++) {\n    acc = fn(acc, walker.value, i)\n    walker = walker.next\n  }\n\n  return acc\n}\n\nYallist.prototype.reduceReverse = function (fn, initial) {\n  var acc\n  var walker = this.tail\n  if (arguments.length > 1) {\n    acc = initial\n  } else if (this.tail) {\n    walker = this.tail.prev\n    acc = this.tail.value\n  } else {\n    throw new TypeError('Reduce of empty list with no initial value')\n  }\n\n  for (var i = this.length - 1; walker !== null; i--) {\n    acc = fn(acc, walker.value, i)\n    walker = walker.prev\n  }\n\n  return acc\n}\n\nYallist.prototype.toArray = function () {\n  var arr = new Array(this.length)\n  for (var i = 0, walker = this.head; walker !== null; i++) {\n    arr[i] = walker.value\n    walker = walker.next\n  }\n  return arr\n}\n\nYallist.prototype.toArrayReverse = function () {\n  var arr = new Array(this.length)\n  for (var i = 0, walker = this.tail; walker !== null; i++) {\n    arr[i] = walker.value\n    walker = walker.prev\n  }\n  return arr\n}\n\nYallist.prototype.slice = function (from, to) {\n  to = to || this.length\n  if (to < 0) {\n    to += this.length\n  }\n  from = from || 0\n  if (from < 0) {\n    from += this.length\n  }\n  var ret = new Yallist()\n  if (to < from || to < 0) {\n    return ret\n  }\n  if (from < 0) {\n    from = 0\n  }\n  if (to > this.length) {\n    to = this.length\n  }\n  for (var i = 0, walker = this.head; walker !== null && i < from; i++) {\n    walker = walker.next\n  }\n  for (; walker !== null && i < to; i++, walker = walker.next) {\n    ret.push(walker.value)\n  }\n  return ret\n}\n\nYallist.prototype.sliceReverse = function (from, to) {\n  to = to || this.length\n  if (to < 0) {\n    to += this.length\n  }\n  from = from || 0\n  if (from < 0) {\n    from += this.length\n  }\n  var ret = new Yallist()\n  if (to < from || to < 0) {\n    return ret\n  }\n  if (from < 0) {\n    from = 0\n  }\n  if (to > this.length) {\n    to = this.length\n  }\n  for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {\n    walker = walker.prev\n  }\n  for (; walker !== null && i > from; i--, walker = walker.prev) {\n    ret.push(walker.value)\n  }\n  return ret\n}\n\nYallist.prototype.splice = function (start, deleteCount, ...nodes) {\n  if (start > this.length) {\n    start = this.length - 1\n  }\n  if (start < 0) {\n    start = this.length + start;\n  }\n\n  for (var i = 0, walker = this.head; walker !== null && i < start; i++) {\n    walker = walker.next\n  }\n\n  var ret = []\n  for (var i = 0; walker && i < deleteCount; i++) {\n    ret.push(walker.value)\n    walker = this.removeNode(walker)\n  }\n  if (walker === null) {\n    walker = this.tail\n  }\n\n  if (walker !== this.head && walker !== this.tail) {\n    walker = walker.prev\n  }\n\n  for (var i = 0; i < nodes.length; i++) {\n    walker = insert(this, walker, nodes[i])\n  }\n  return ret;\n}\n\nYallist.prototype.reverse = function () {\n  var head = this.head\n  var tail = this.tail\n  for (var walker = head; walker !== null; walker = walker.prev) {\n    var p = walker.prev\n    walker.prev = walker.next\n    walker.next = p\n  }\n  this.head = tail\n  this.tail = head\n  return this\n}\n\nfunction insert (self, node, value) {\n  var inserted = node === self.head ?\n    new Node(value, null, node, self) :\n    new Node(value, node, node.next, self)\n\n  if (inserted.next === null) {\n    self.tail = inserted\n  }\n  if (inserted.prev === null) {\n    self.head = inserted\n  }\n\n  self.length++\n\n  return inserted\n}\n\nfunction push (self, item) {\n  self.tail = new Node(item, self.tail, null, self)\n  if (!self.head) {\n    self.head = self.tail\n  }\n  self.length++\n}\n\nfunction unshift (self, item) {\n  self.head = new Node(item, null, self.head, self)\n  if (!self.tail) {\n    self.tail = self.head\n  }\n  self.length++\n}\n\nfunction Node (value, prev, next, list) {\n  if (!(this instanceof Node)) {\n    return new Node(value, prev, next, list)\n  }\n\n  this.list = list\n  this.value = value\n\n  if (prev) {\n    prev.next = this\n    this.prev = prev\n  } else {\n    this.prev = null\n  }\n\n  if (next) {\n    next.prev = this\n    this.next = next\n  } else {\n    this.next = null\n  }\n}\n\ntry {\n  // add if support for Symbol.iterator is present\n  require('./iterator.js')(Yallist)\n} catch (er) {}\n","'use strict';\n\nmodule.exports = (string, separator) => {\n\tif (!(typeof string === 'string' && typeof separator === 'string')) {\n\t\tthrow new TypeError('Expected the arguments to be of type `string`');\n\t}\n\n\tif (separator === '') {\n\t\treturn [string];\n\t}\n\n\tconst separatorIndex = string.indexOf(separator);\n\n\tif (separatorIndex === -1) {\n\t\treturn [string];\n\t}\n\n\treturn [\n\t\tstring.slice(0, separatorIndex),\n\t\tstring.slice(separatorIndex + separator.length)\n\t];\n};\n","'use strict';\nmodule.exports = str => encodeURIComponent(str).replace(/[!'()*]/g, x => `%${x.charCodeAt(0).toString(16).toUpperCase()}`);\n","\nmodule.exports = function () {\n  var selection = document.getSelection();\n  if (!selection.rangeCount) {\n    return function () {};\n  }\n  var active = document.activeElement;\n\n  var ranges = [];\n  for (var i = 0; i < selection.rangeCount; i++) {\n    ranges.push(selection.getRangeAt(i));\n  }\n\n  switch (active.tagName.toUpperCase()) { // .toUpperCase handles XHTML\n    case 'INPUT':\n    case 'TEXTAREA':\n      active.blur();\n      break;\n\n    default:\n      active = null;\n      break;\n  }\n\n  selection.removeAllRanges();\n  return function () {\n    selection.type === 'Caret' &&\n    selection.removeAllRanges();\n\n    if (!selection.rangeCount) {\n      ranges.forEach(function(range) {\n        selection.addRange(range);\n      });\n    }\n\n    active &&\n    active.focus();\n  };\n};\n","'use strict';\n\nvar truncate = require(\"./lib/truncate\");\nvar getLength = require(\"utf8-byte-length/browser\");\nmodule.exports = truncate.bind(null, getLength);\n","'use strict';\n\nfunction isHighSurrogate(codePoint) {\n  return codePoint >= 0xd800 && codePoint <= 0xdbff;\n}\n\nfunction isLowSurrogate(codePoint) {\n  return codePoint >= 0xdc00 && codePoint <= 0xdfff;\n}\n\n// Truncate string by size in bytes\nmodule.exports = function truncate(getLength, string, byteLength) {\n  if (typeof string !== \"string\") {\n    throw new Error(\"Input must be string\");\n  }\n\n  var charLength = string.length;\n  var curByteLength = 0;\n  var codePoint;\n  var segment;\n\n  for (var i = 0; i < charLength; i += 1) {\n    codePoint = string.charCodeAt(i);\n    segment = string[i];\n\n    if (isHighSurrogate(codePoint) && isLowSurrogate(string.charCodeAt(i + 1))) {\n      i += 1;\n      segment += string[i];\n    }\n\n    curByteLength += getLength(segment);\n\n    if (curByteLength === byteLength) {\n      return string.slice(0, i + 1);\n    }\n    else if (curByteLength > byteLength) {\n      return string.slice(0, i - segment.length + 1);\n    }\n  }\n\n  return string;\n};\n\n","(function (global, factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine('uri-templates', [], factory);\n\t} else if (typeof module !== 'undefined' && module.exports){\n\t\tmodule.exports = factory();\n\t} else {\n\t\tglobal.UriTemplate = factory();\n\t}\n})(this, function () {\n\tvar uriTemplateGlobalModifiers = {\n\t\t\"+\": true,\n\t\t\"#\": true,\n\t\t\".\": true,\n\t\t\"/\": true,\n\t\t\";\": true,\n\t\t\"?\": true,\n\t\t\"&\": true\n\t};\n\tvar uriTemplateSuffices = {\n\t\t\"*\": true\n\t};\n\tvar urlEscapedChars = /[:/&?#]/;\n\n\tfunction notReallyPercentEncode(string) {\n\t\treturn encodeURI(string).replace(/%25[0-9][0-9]/g, function (doubleEncoded) {\n\t\t\treturn \"%\" + doubleEncoded.substring(3);\n\t\t});\n\t}\n\n\tfunction isPercentEncoded(string) {\n\t\tstring = string.replace(/%../g, '');\n\t\treturn encodeURIComponent(string) === string;\n\t}\n\n\tfunction uriTemplateSubstitution(spec) {\n\t\tvar modifier = \"\";\n\t\tif (uriTemplateGlobalModifiers[spec.charAt(0)]) {\n\t\t\tmodifier = spec.charAt(0);\n\t\t\tspec = spec.substring(1);\n\t\t}\n\t\tvar separator = \"\";\n\t\tvar prefix = \"\";\n\t\tvar shouldEscape = true;\n\t\tvar showVariables = false;\n\t\tvar trimEmptyString = false;\n\t\tif (modifier == '+') {\n\t\t\tshouldEscape = false;\n\t\t} else if (modifier == \".\") {\n\t\t\tprefix = \".\";\n\t\t\tseparator = \".\";\n\t\t} else if (modifier == \"/\") {\n\t\t\tprefix = \"/\";\n\t\t\tseparator = \"/\";\n\t\t} else if (modifier == '#') {\n\t\t\tprefix = \"#\";\n\t\t\tshouldEscape = false;\n\t\t} else if (modifier == ';') {\n\t\t\tprefix = \";\";\n\t\t\tseparator = \";\",\n\t\t\tshowVariables = true;\n\t\t\ttrimEmptyString = true;\n\t\t} else if (modifier == '?') {\n\t\t\tprefix = \"?\";\n\t\t\tseparator = \"&\",\n\t\t\tshowVariables = true;\n\t\t} else if (modifier == '&') {\n\t\t\tprefix = \"&\";\n\t\t\tseparator = \"&\",\n\t\t\tshowVariables = true;\n\t\t}\n\n\t\tvar varNames = [];\n\t\tvar varList = spec.split(\",\");\n\t\tvar varSpecs = [];\n\t\tvar varSpecMap = {};\n\t\tfor (var i = 0; i < varList.length; i++) {\n\t\t\tvar varName = varList[i];\n\t\t\tvar truncate = null;\n\t\t\tif (varName.indexOf(\":\") != -1) {\n\t\t\t\tvar parts = varName.split(\":\");\n\t\t\t\tvarName = parts[0];\n\t\t\t\ttruncate = parseInt(parts[1]);\n\t\t\t}\n\t\t\tvar suffices = {};\n\t\t\twhile (uriTemplateSuffices[varName.charAt(varName.length - 1)]) {\n\t\t\t\tsuffices[varName.charAt(varName.length - 1)] = true;\n\t\t\t\tvarName = varName.substring(0, varName.length - 1);\n\t\t\t}\n\t\t\tvar varSpec = {\n\t\t\t\ttruncate: truncate,\n\t\t\t\tname: varName,\n\t\t\t\tsuffices: suffices\n\t\t\t};\n\t\t\tvarSpecs.push(varSpec);\n\t\t\tvarSpecMap[varName] = varSpec;\n\t\t\tvarNames.push(varName);\n\t\t}\n\t\tvar subFunction = function (valueFunction) {\n\t\t\tvar result = \"\";\n\t\t\tvar startIndex = 0;\n\t\t\tfor (var i = 0; i < varSpecs.length; i++) {\n\t\t\t\tvar varSpec = varSpecs[i];\n\t\t\t\tvar value = valueFunction(varSpec.name);\n\t\t\t\tif (value == null || (Array.isArray(value) && value.length == 0) || (typeof value == 'object' && Object.keys(value).length == 0)) {\n\t\t\t\t\tstartIndex++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (i == startIndex) {\n\t\t\t\t\tresult += prefix;\n\t\t\t\t} else {\n\t\t\t\t\tresult += (separator || \",\");\n\t\t\t\t}\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\tif (showVariables) {\n\t\t\t\t\t\tresult += varSpec.name + \"=\";\n\t\t\t\t\t}\n\t\t\t\t\tfor (var j = 0; j < value.length; j++) {\n\t\t\t\t\t\tif (j > 0) {\n\t\t\t\t\t\t\tresult += varSpec.suffices['*'] ? (separator || \",\") : \",\";\n\t\t\t\t\t\t\tif (varSpec.suffices['*'] && showVariables) {\n\t\t\t\t\t\t\t\tresult += varSpec.name + \"=\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresult += shouldEscape ? encodeURIComponent(value[j]).replace(/!/g, \"%21\") : notReallyPercentEncode(value[j]);\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof value == \"object\") {\n\t\t\t\t\tif (showVariables && !varSpec.suffices['*']) {\n\t\t\t\t\t\tresult += varSpec.name + \"=\";\n\t\t\t\t\t}\n\t\t\t\t\tvar first = true;\n\t\t\t\t\tfor (var key in value) {\n\t\t\t\t\t\tif (!first) {\n\t\t\t\t\t\t\tresult += varSpec.suffices['*'] ? (separator || \",\") : \",\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfirst = false;\n\t\t\t\t\t\tresult += shouldEscape ? encodeURIComponent(key).replace(/!/g, \"%21\") : notReallyPercentEncode(key);\n\t\t\t\t\t\tresult += varSpec.suffices['*'] ? '=' : \",\";\n\t\t\t\t\t\tresult += shouldEscape ? encodeURIComponent(value[key]).replace(/!/g, \"%21\") : notReallyPercentEncode(value[key]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (showVariables) {\n\t\t\t\t\t\tresult += varSpec.name;\n\t\t\t\t\t\tif (!trimEmptyString || value != \"\") {\n\t\t\t\t\t\t\tresult += \"=\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (varSpec.truncate != null) {\n\t\t\t\t\t\tvalue = value.substring(0, varSpec.truncate);\n\t\t\t\t\t}\n\t\t\t\t\tresult += shouldEscape ? encodeURIComponent(value).replace(/!/g, \"%21\"): notReallyPercentEncode(value);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\t\tvar guessFunction = function (stringValue, resultObj, strict) {\n\t\t\tif (prefix) {\n\t\t\t\tstringValue = stringValue.substring(prefix.length);\n\t\t\t}\n\t\t\tif (varSpecs.length == 1 && varSpecs[0].suffices['*']) {\n\t\t\t\tvar varSpec = varSpecs[0];\n\t\t\t\tvar varName = varSpec.name;\n\t\t\t\tvar arrayValue = varSpec.suffices['*'] ? stringValue.split(separator || \",\") : [stringValue];\n\t\t\t\tvar hasEquals = (shouldEscape && stringValue.indexOf('=') != -1);\t// There's otherwise no way to distinguish between \"{value*}\" for arrays and objects\n\t\t\t\tfor (var i = 1; i < arrayValue.length; i++) {\n\t\t\t\t\tvar stringValue = arrayValue[i];\n\t\t\t\t\tif (hasEquals && stringValue.indexOf('=') == -1) {\n\t\t\t\t\t\t// Bit of a hack - if we're expecting \"=\" for key/value pairs, and values can't contain \"=\", then assume a value has been accidentally split\n\t\t\t\t\t\tarrayValue[i - 1] += (separator || \",\") + stringValue;\n\t\t\t\t\t\tarrayValue.splice(i, 1);\n\t\t\t\t\t\ti--;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (var i = 0; i < arrayValue.length; i++) {\n\t\t\t\t\tvar stringValue = arrayValue[i];\n\t\t\t\t\tif (shouldEscape && stringValue.indexOf('=') != -1) {\n\t\t\t\t\t\thasEquals = true;\n\t\t\t\t\t}\n\t\t\t\t\tvar innerArrayValue = stringValue.split(\",\");\n\t\t\t\t\tif (innerArrayValue.length == 1) {\n\t\t\t\t\t\tarrayValue[i] = innerArrayValue[0];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tarrayValue[i] = innerArrayValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (showVariables || hasEquals) {\n\t\t\t\t\tvar objectValue = resultObj[varName] || {};\n\t\t\t\t\tfor (var j = 0; j < arrayValue.length; j++) {\n\t\t\t\t\t\tvar innerValue = stringValue;\n\t\t\t\t\t\tif (showVariables && !innerValue) {\n\t\t\t\t\t\t\t// The empty string isn't a valid variable, so if our value is zero-length we have nothing\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (typeof arrayValue[j] == \"string\") {\n\t\t\t\t\t\t\tvar stringValue = arrayValue[j];\n\t\t\t\t\t\t\tvar innerVarName = stringValue.split(\"=\", 1)[0];\n\t\t\t\t\t\t\tvar stringValue = stringValue.substring(innerVarName.length + 1);\n\t\t\t\t\t\t\tif (shouldEscape) {\n\t\t\t\t\t\t\t\tif (strict && !isPercentEncoded(stringValue)) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tstringValue = decodeURIComponent(stringValue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tinnerValue = stringValue;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar stringValue = arrayValue[j][0];\n\t\t\t\t\t\t\tvar innerVarName = stringValue.split(\"=\", 1)[0];\n\t\t\t\t\t\t\tvar stringValue = stringValue.substring(innerVarName.length + 1);\n\t\t\t\t\t\t\tif (shouldEscape) {\n\t\t\t\t\t\t\t\tif (strict && !isPercentEncoded(stringValue)) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tstringValue = decodeURIComponent(stringValue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tarrayValue[j][0] = stringValue;\n\t\t\t\t\t\t\tinnerValue = arrayValue[j];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (shouldEscape) {\n\t\t\t\t\t\t\tif (strict && !isPercentEncoded(innerVarName)) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tinnerVarName = decodeURIComponent(innerVarName);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (objectValue[innerVarName] !== undefined) {\n\t\t\t\t\t\t\tif (Array.isArray(objectValue[innerVarName])) {\n\t\t\t\t\t\t\t\tobjectValue[innerVarName].push(innerValue);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tobjectValue[innerVarName] = [objectValue[innerVarName], innerValue];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tobjectValue[innerVarName] = innerValue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (Object.keys(objectValue).length == 1 && objectValue[varName] !== undefined) {\n\t\t\t\t\t\tresultObj[varName] = objectValue[varName];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresultObj[varName] = objectValue;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (shouldEscape) {\n\t\t\t\t\t\tfor (var j = 0; j < arrayValue.length; j++) {\n\t\t\t\t\t\t\tvar innerArrayValue = arrayValue[j];\n\t\t\t\t\t\t\tif (Array.isArray(innerArrayValue)) {\n\t\t\t\t\t\t\t\tfor (var k = 0; k < innerArrayValue.length; k++) {\n\t\t\t\t\t\t\t\t\tif (strict && !isPercentEncoded(innerArrayValue[k])) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tinnerArrayValue[k] = decodeURIComponent(innerArrayValue[k]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (strict && !isPercentEncoded(innerArrayValue)) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tarrayValue[j] = decodeURIComponent(innerArrayValue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (resultObj[varName] !== undefined) {\n\t\t\t\t\t\tif (Array.isArray(resultObj[varName])) {\n\t\t\t\t\t\t\tresultObj[varName] = resultObj[varName].concat(arrayValue);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresultObj[varName] = [resultObj[varName]].concat(arrayValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (arrayValue.length == 1 && !varSpec.suffices['*']) {\n\t\t\t\t\t\t\tresultObj[varName] = arrayValue[0];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresultObj[varName] = arrayValue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar arrayValue = (varSpecs.length == 1) ? [stringValue] : stringValue.split(separator || \",\");\n\t\t\t\tvar specIndexMap = {};\n\t\t\t\tfor (var i = 0; i < arrayValue.length; i++) {\n\t\t\t\t\t// Try from beginning\n\t\t\t\t\tvar firstStarred = 0;\n\t\t\t\t\tfor (; firstStarred < varSpecs.length - 1 && firstStarred < i; firstStarred++) {\n\t\t\t\t\t\tif (varSpecs[firstStarred].suffices['*']) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (firstStarred == i) {\n\t\t\t\t\t\t// The first [i] of them have no \"*\" suffix\n\t\t\t\t\t\tspecIndexMap[i] = i;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Try from the end\n\t\t\t\t\t\tfor (var lastStarred = varSpecs.length - 1; lastStarred > 0 && (varSpecs.length - lastStarred) < (arrayValue.length - i); lastStarred--) {\n\t\t\t\t\t\t\tif (varSpecs[lastStarred].suffices['*']) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ((varSpecs.length - lastStarred) == (arrayValue.length - i)) {\n\t\t\t\t\t\t\t// The last [length - i] of them have no \"*\" suffix\n\t\t\t\t\t\t\tspecIndexMap[i] = lastStarred;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// Just give up and use the first one\n\t\t\t\t\tspecIndexMap[i] = firstStarred;\n\t\t\t\t}\n\t\t\t\tfor (var i = 0; i < arrayValue.length; i++) {\n\t\t\t\t\tvar stringValue = arrayValue[i];\n\t\t\t\t\tif (!stringValue && showVariables) {\n\t\t\t\t\t\t// The empty string isn't a valid variable, so if our value is zero-length we have nothing\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tvar innerArrayValue = stringValue.split(\",\");\n\t\t\t\t\tvar hasEquals = false;\n\n\t\t\t\t\tif (showVariables) {\n\t\t\t\t\t\tvar stringValue = innerArrayValue[0]; // using innerArrayValue\n\t\t\t\t\t\tvar varName = stringValue.split(\"=\", 1)[0];\n\t\t\t\t\t\tvar stringValue = stringValue.substring(varName.length + 1);\n\t\t\t\t\t\tinnerArrayValue[0] = stringValue;\n\t\t\t\t\t\tvar varSpec = varSpecMap[varName] || varSpecs[0];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar varSpec = varSpecs[specIndexMap[i]];\n\t\t\t\t\t\tvar varName = varSpec.name;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (var j = 0; j < innerArrayValue.length; j++) {\n\t\t\t\t\t\tif (shouldEscape) {\n\t\t\t\t\t\t\tif (strict && !isPercentEncoded(innerArrayValue[j])) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tinnerArrayValue[j] = decodeURIComponent(innerArrayValue[j]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif ((showVariables || varSpec.suffices['*'])&& resultObj[varName] !== undefined) {\n\t\t\t\t\t\tif (Array.isArray(resultObj[varName])) {\n\t\t\t\t\t\t\tresultObj[varName] = resultObj[varName].concat(innerArrayValue);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresultObj[varName] = [resultObj[varName]].concat(innerArrayValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (innerArrayValue.length == 1 && !varSpec.suffices['*']) {\n\t\t\t\t\t\t\tresultObj[varName] = innerArrayValue[0];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresultObj[varName] = innerArrayValue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn 1;\n\t\t};\n\t\treturn {\n\t\t\tvarNames: varNames,\n\t\t\tprefix: prefix,\n\t\t\tsubstitution: subFunction,\n\t\t\tunSubstitution: guessFunction\n\t\t};\n\t}\n\n\tfunction UriTemplate(template) {\n\t\tif (!(this instanceof UriTemplate)) {\n\t\t\treturn new UriTemplate(template);\n\t\t}\n\t\tvar parts = template.split(\"{\");\n\t\tvar textParts = [parts.shift()];\n\t\tvar prefixes = [];\n\t\tvar substitutions = [];\n\t\tvar unSubstitutions = [];\n\t\tvar varNames = [];\n\t\twhile (parts.length > 0) {\n\t\t\tvar part = parts.shift();\n\t\t\tvar spec = part.split(\"}\")[0];\n\t\t\tvar remainder = part.substring(spec.length + 1);\n\t\t\tvar funcs = uriTemplateSubstitution(spec);\n\t\t\tsubstitutions.push(funcs.substitution);\n\t\t\tunSubstitutions.push(funcs.unSubstitution);\n\t\t\tprefixes.push(funcs.prefix);\n\t\t\ttextParts.push(remainder);\n\t\t\tvarNames = varNames.concat(funcs.varNames);\n\t\t}\n\t\tthis.fill = function (valueFunction) {\n\t\t\tif (valueFunction && typeof valueFunction !== 'function') {\n\t\t\t\tvar value = valueFunction;\n\t\t\t\tvalueFunction = function (varName) {\n\t\t\t\t\treturn value[varName];\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tvar result = textParts[0];\n\t\t\tfor (var i = 0; i < substitutions.length; i++) {\n\t\t\t\tvar substitution = substitutions[i];\n\t\t\t\tresult += substitution(valueFunction);\n\t\t\t\tresult += textParts[i + 1];\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\t\tthis.fromUri = function (substituted, options) {\n\t\t\toptions = options || {};\n\t\t\tvar result = {};\n\t\t\tfor (var i = 0; i < textParts.length; i++) {\n\t\t\t\tvar part = textParts[i];\n\t\t\t\tif (substituted.substring(0, part.length) !== part) {\n\t\t\t\t\treturn /*undefined*/;\n\t\t\t\t}\n\t\t\t\tsubstituted = substituted.substring(part.length);\n\t\t\t\tif (i >= textParts.length - 1) {\n\t\t\t\t\t// We've run out of input - is there any template left?\n\t\t\t\t\tif (substituted == \"\") {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn /*undefined*/;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar prefix = prefixes[i];\n\t\t\t\tif (prefix && substituted.substring(0, prefix.length) !== prefix) {\n\t\t\t\t\t// All values are optional - if we have a prefix and it doesn't match, move along\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Find the next part to un-substitute\n\t\t\t\tvar nextPart = textParts[i + 1];\n\t\t\t\tvar offset = i;\n\t\t\t\twhile (true) {\n\t\t\t\t\tif (offset == textParts.length - 2) {\n\t\t\t\t\t\tvar endPart = substituted.substring(substituted.length - nextPart.length);\n\t\t\t\t\t\tif (endPart !== nextPart) {\n\t\t\t\t\t\t\treturn /*undefined*/;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar stringValue = substituted.substring(0, substituted.length - nextPart.length);\n\t\t\t\t\t\tsubstituted = endPart;\n\t\t\t\t\t} else if (nextPart) {\n\t\t\t\t\t\tvar nextPartPos = substituted.indexOf(nextPart);\n\t\t\t\t\t\tvar stringValue = substituted.substring(0, nextPartPos);\n\t\t\t\t\t\tsubstituted = substituted.substring(nextPartPos);\n\t\t\t\t\t} else if (prefixes[offset + 1]) {\n\t\t\t\t\t\tvar nextPartPos = substituted.indexOf(prefixes[offset + 1]);\n\t\t\t\t\t\tif (nextPartPos === -1) nextPartPos = substituted.length;\n\t\t\t\t\t\tvar stringValue = substituted.substring(0, nextPartPos);\n\t\t\t\t\t\tsubstituted = substituted.substring(nextPartPos);\n\t\t\t\t\t} else if (textParts.length > offset + 2) {\n\t\t\t\t\t\t// If the separator between this variable and the next is blank (with no prefix), continue onwards\n\t\t\t\t\t\toffset++;\n\t\t\t\t\t\tnextPart = textParts[offset + 1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar stringValue = substituted;\n\t\t\t\t\t\tsubstituted = \"\";\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!unSubstitutions[i](stringValue, result, options.strict)) {\n\t\t\t\t\treturn /*undefined*/;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\tthis.varNames = varNames;\n\t\tthis.template = template;\n\t}\n\tUriTemplate.prototype = {\n\t\ttoString: function () {\n\t\t\treturn this.template;\n\t\t},\n\t\tfillFromObject: function (obj) {\n\t\t\treturn this.fill(obj);\n\t\t},\n\t\ttest: function (uri, options) {\n\t\t\treturn !!this.fromUri(uri, options)\n\t\t}\n\t};\n\n\treturn UriTemplate;\n});\n","'use strict';\n\nfunction isHighSurrogate(codePoint) {\n  return codePoint >= 0xd800 && codePoint <= 0xdbff;\n}\n\nfunction isLowSurrogate(codePoint) {\n  return codePoint >= 0xdc00 && codePoint <= 0xdfff;\n}\n\n// Truncate string by size in bytes\nmodule.exports = function getByteLength(string) {\n  if (typeof string !== \"string\") {\n    throw new Error(\"Input must be string\");\n  }\n\n  var charLength = string.length;\n  var byteLength = 0;\n  var codePoint = null;\n  var prevCodePoint = null;\n  for (var i = 0; i < charLength; i++) {\n    codePoint = string.charCodeAt(i);\n    // handle 4-byte non-BMP chars\n    // low surrogate\n    if (isLowSurrogate(codePoint)) {\n      // when parsing previous hi-surrogate, 3 is added to byteLength\n      if (prevCodePoint != null && isHighSurrogate(prevCodePoint)) {\n        byteLength += 1;\n      }\n      else {\n        byteLength += 3;\n      }\n    }\n    else if (codePoint <= 0x7f ) {\n      byteLength += 1;\n    }\n    else if (codePoint >= 0x80 && codePoint <= 0x7ff) {\n      byteLength += 2;\n    }\n    else if (codePoint >= 0x800 && codePoint <= 0xffff) {\n      byteLength += 3;\n    }\n    prevCodePoint = codePoint;\n  }\n\n  return byteLength;\n};\n","var v1 = require('./v1');\nvar v4 = require('./v4');\n\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\n\nmodule.exports = uuid;\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n  byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n  var i = offset || 0;\n  var bth = byteToHex;\n  // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n  return ([bth[buf[i++]], bth[buf[i++]], \n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]],\n\tbth[buf[i++]], bth[buf[i++]],\n\tbth[buf[i++]], bth[buf[i++]]]).join('');\n}\n\nmodule.exports = bytesToUuid;\n","// Unique ID creation requires a high quality random # generator.  In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API.  We do the best we can via\n// feature-detection\n\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto\n// implementation. Also, find the complete implementation of crypto on IE11.\nvar getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) ||\n                      (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto));\n\nif (getRandomValues) {\n  // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n  var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n  module.exports = function whatwgRNG() {\n    getRandomValues(rnds8);\n    return rnds8;\n  };\n} else {\n  // Math.random()-based (RNG)\n  //\n  // If all else fails, use Math.random().  It's fast, but is of unspecified\n  // quality.\n  var rnds = new Array(16);\n\n  module.exports = function mathRNG() {\n    for (var i = 0, r; i < 16; i++) {\n      if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n      rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n    }\n\n    return rnds;\n  };\n}\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\nvar _clockseq;\n\n// Previous uuid creation time\nvar _lastMSecs = 0;\nvar _lastNSecs = 0;\n\n// See https://github.com/broofa/node-uuid for API details\nfunction v1(options, buf, offset) {\n  var i = buf && offset || 0;\n  var b = buf || [];\n\n  options = options || {};\n  var node = options.node || _nodeId;\n  var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n  // node and clockseq need to be initialized to random values if they're not\n  // specified.  We do this lazily to minimize issues related to insufficient\n  // system entropy.  See #189\n  if (node == null || clockseq == null) {\n    var seedBytes = rng();\n    if (node == null) {\n      // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n      node = _nodeId = [\n        seedBytes[0] | 0x01,\n        seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]\n      ];\n    }\n    if (clockseq == null) {\n      // Per 4.2.2, randomize (14 bit) clockseq\n      clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n    }\n  }\n\n  // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so\n  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n  var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n  // Per 4.2.1.2, use count of uuid's generated during the current clock\n  // cycle to simulate higher resolution clock\n  var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n  // Time since last uuid creation (in msecs)\n  var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n  // Per 4.2.1.2, Bump clockseq on clock regression\n  if (dt < 0 && options.clockseq === undefined) {\n    clockseq = clockseq + 1 & 0x3fff;\n  }\n\n  // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n  // time interval\n  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n    nsecs = 0;\n  }\n\n  // Per 4.2.1.2 Throw error if too many uuids are requested\n  if (nsecs >= 10000) {\n    throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n  }\n\n  _lastMSecs = msecs;\n  _lastNSecs = nsecs;\n  _clockseq = clockseq;\n\n  // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n  msecs += 12219292800000;\n\n  // `time_low`\n  var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n  b[i++] = tl >>> 24 & 0xff;\n  b[i++] = tl >>> 16 & 0xff;\n  b[i++] = tl >>> 8 & 0xff;\n  b[i++] = tl & 0xff;\n\n  // `time_mid`\n  var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n  b[i++] = tmh >>> 8 & 0xff;\n  b[i++] = tmh & 0xff;\n\n  // `time_high_and_version`\n  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n  b[i++] = tmh >>> 16 & 0xff;\n\n  // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n  b[i++] = clockseq >>> 8 | 0x80;\n\n  // `clock_seq_low`\n  b[i++] = clockseq & 0xff;\n\n  // `node`\n  for (var n = 0; n < 6; ++n) {\n    b[i + n] = node[n];\n  }\n\n  return buf ? buf : bytesToUuid(b);\n}\n\nmodule.exports = v1;\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n  var i = buf && offset || 0;\n\n  if (typeof(options) == 'string') {\n    buf = options === 'binary' ? new Array(16) : null;\n    options = null;\n  }\n  options = options || {};\n\n  var rnds = options.random || (options.rng || rng)();\n\n  // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n  rnds[6] = (rnds[6] & 0x0f) | 0x40;\n  rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n  // Copy bytes to buffer, if provided\n  if (buf) {\n    for (var ii = 0; ii < 16; ++ii) {\n      buf[i + ii] = rnds[ii];\n    }\n  }\n\n  return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n  warning = function(condition, format, args) {\n    var len = arguments.length;\n    args = new Array(len > 2 ? len - 2 : 0);\n    for (var key = 2; key < len; key++) {\n      args[key - 2] = arguments[key];\n    }\n    if (format === undefined) {\n      throw new Error(\n        '`warning(condition, format, ...args)` requires a warning ' +\n        'message argument'\n      );\n    }\n\n    if (format.length < 10 || (/^[s\\W]*$/).test(format)) {\n      throw new Error(\n        'The warning format should be able to uniquely identify this ' +\n        'warning. Please, use a more descriptive format than: ' + format\n      );\n    }\n\n    if (!condition) {\n      var argIndex = 0;\n      var message = 'Warning: ' +\n        format.replace(/%s/g, function() {\n          return args[argIndex++];\n        });\n      if (typeof console !== 'undefined') {\n        console.error(message);\n      }\n      try {\n        // This error was thrown as a convenience so that you can use this stack\n        // to find the callsite that caused this warning to fire.\n        throw new Error(message);\n      } catch(x) {}\n    }\n  };\n}\n\nmodule.exports = warning;\n","'use strict';\n\nmodule.exports = function () {\n  throw new Error(\n    'ws does not work in the browser. Browser clients must use the native ' +\n      'WebSocket object'\n  );\n};\n","function DOMParser(options){\r\n\tthis.options = options ||{locator:{}};\r\n\t\r\n}\r\nDOMParser.prototype.parseFromString = function(source,mimeType){\r\n\tvar options = this.options;\r\n\tvar sax =  new XMLReader();\r\n\tvar domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler\r\n\tvar errorHandler = options.errorHandler;\r\n\tvar locator = options.locator;\r\n\tvar defaultNSMap = options.xmlns||{};\r\n\tvar entityMap = {'lt':'<','gt':'>','amp':'&','quot':'\"','apos':\"'\"}\r\n\tif(locator){\r\n\t\tdomBuilder.setDocumentLocator(locator)\r\n\t}\r\n\t\r\n\tsax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);\r\n\tsax.domBuilder = options.domBuilder || domBuilder;\r\n\tif(/\\/x?html?$/.test(mimeType)){\r\n\t\tentityMap.nbsp = '\\xa0';\r\n\t\tentityMap.copy = '\\xa9';\r\n\t\tdefaultNSMap['']= 'http://www.w3.org/1999/xhtml';\r\n\t}\r\n\tdefaultNSMap.xml = defaultNSMap.xml || 'http://www.w3.org/XML/1998/namespace';\r\n\tif(source){\r\n\t\tsax.parse(source,defaultNSMap,entityMap);\r\n\t}else{\r\n\t\tsax.errorHandler.error(\"invalid doc source\");\r\n\t}\r\n\treturn domBuilder.doc;\r\n}\r\nfunction buildErrorHandler(errorImpl,domBuilder,locator){\r\n\tif(!errorImpl){\r\n\t\tif(domBuilder instanceof DOMHandler){\r\n\t\t\treturn domBuilder;\r\n\t\t}\r\n\t\terrorImpl = domBuilder ;\r\n\t}\r\n\tvar errorHandler = {}\r\n\tvar isCallback = errorImpl instanceof Function;\r\n\tlocator = locator||{}\r\n\tfunction build(key){\r\n\t\tvar fn = errorImpl[key];\r\n\t\tif(!fn && isCallback){\r\n\t\t\tfn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl;\r\n\t\t}\r\n\t\terrorHandler[key] = fn && function(msg){\r\n\t\t\tfn('[xmldom '+key+']\\t'+msg+_locator(locator));\r\n\t\t}||function(){};\r\n\t}\r\n\tbuild('warning');\r\n\tbuild('error');\r\n\tbuild('fatalError');\r\n\treturn errorHandler;\r\n}\r\n\r\n//console.log('#\\n\\n\\n\\n\\n\\n\\n####')\r\n/**\r\n * +ContentHandler+ErrorHandler\r\n * +LexicalHandler+EntityResolver2\r\n * -DeclHandler-DTDHandler \r\n * \r\n * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler\r\n * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2\r\n * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html\r\n */\r\nfunction DOMHandler() {\r\n    this.cdata = false;\r\n}\r\nfunction position(locator,node){\r\n\tnode.lineNumber = locator.lineNumber;\r\n\tnode.columnNumber = locator.columnNumber;\r\n}\r\n/**\r\n * @see org.xml.sax.ContentHandler#startDocument\r\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html\r\n */ \r\nDOMHandler.prototype = {\r\n\tstartDocument : function() {\r\n    \tthis.doc = new DOMImplementation().createDocument(null, null, null);\r\n    \tif (this.locator) {\r\n        \tthis.doc.documentURI = this.locator.systemId;\r\n    \t}\r\n\t},\r\n\tstartElement:function(namespaceURI, localName, qName, attrs) {\r\n\t\tvar doc = this.doc;\r\n\t    var el = doc.createElementNS(namespaceURI, qName||localName);\r\n\t    var len = attrs.length;\r\n\t    appendElement(this, el);\r\n\t    this.currentElement = el;\r\n\t    \r\n\t\tthis.locator && position(this.locator,el)\r\n\t    for (var i = 0 ; i < len; i++) {\r\n\t        var namespaceURI = attrs.getURI(i);\r\n\t        var value = attrs.getValue(i);\r\n\t        var qName = attrs.getQName(i);\r\n\t\t\tvar attr = doc.createAttributeNS(namespaceURI, qName);\r\n\t\t\tthis.locator &&position(attrs.getLocator(i),attr);\r\n\t\t\tattr.value = attr.nodeValue = value;\r\n\t\t\tel.setAttributeNode(attr)\r\n\t    }\r\n\t},\r\n\tendElement:function(namespaceURI, localName, qName) {\r\n\t\tvar current = this.currentElement\r\n\t\tvar tagName = current.tagName;\r\n\t\tthis.currentElement = current.parentNode;\r\n\t},\r\n\tstartPrefixMapping:function(prefix, uri) {\r\n\t},\r\n\tendPrefixMapping:function(prefix) {\r\n\t},\r\n\tprocessingInstruction:function(target, data) {\r\n\t    var ins = this.doc.createProcessingInstruction(target, data);\r\n\t    this.locator && position(this.locator,ins)\r\n\t    appendElement(this, ins);\r\n\t},\r\n\tignorableWhitespace:function(ch, start, length) {\r\n\t},\r\n\tcharacters:function(chars, start, length) {\r\n\t\tchars = _toString.apply(this,arguments)\r\n\t\t//console.log(chars)\r\n\t\tif(chars){\r\n\t\t\tif (this.cdata) {\r\n\t\t\t\tvar charNode = this.doc.createCDATASection(chars);\r\n\t\t\t} else {\r\n\t\t\t\tvar charNode = this.doc.createTextNode(chars);\r\n\t\t\t}\r\n\t\t\tif(this.currentElement){\r\n\t\t\t\tthis.currentElement.appendChild(charNode);\r\n\t\t\t}else if(/^\\s*$/.test(chars)){\r\n\t\t\t\tthis.doc.appendChild(charNode);\r\n\t\t\t\t//process xml\r\n\t\t\t}\r\n\t\t\tthis.locator && position(this.locator,charNode)\r\n\t\t}\r\n\t},\r\n\tskippedEntity:function(name) {\r\n\t},\r\n\tendDocument:function() {\r\n\t\tthis.doc.normalize();\r\n\t},\r\n\tsetDocumentLocator:function (locator) {\r\n\t    if(this.locator = locator){// && !('lineNumber' in locator)){\r\n\t    \tlocator.lineNumber = 0;\r\n\t    }\r\n\t},\r\n\t//LexicalHandler\r\n\tcomment:function(chars, start, length) {\r\n\t\tchars = _toString.apply(this,arguments)\r\n\t    var comm = this.doc.createComment(chars);\r\n\t    this.locator && position(this.locator,comm)\r\n\t    appendElement(this, comm);\r\n\t},\r\n\t\r\n\tstartCDATA:function() {\r\n\t    //used in characters() methods\r\n\t    this.cdata = true;\r\n\t},\r\n\tendCDATA:function() {\r\n\t    this.cdata = false;\r\n\t},\r\n\t\r\n\tstartDTD:function(name, publicId, systemId) {\r\n\t\tvar impl = this.doc.implementation;\r\n\t    if (impl && impl.createDocumentType) {\r\n\t        var dt = impl.createDocumentType(name, publicId, systemId);\r\n\t        this.locator && position(this.locator,dt)\r\n\t        appendElement(this, dt);\r\n\t    }\r\n\t},\r\n\t/**\r\n\t * @see org.xml.sax.ErrorHandler\r\n\t * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html\r\n\t */\r\n\twarning:function(error) {\r\n\t\tconsole.warn('[xmldom warning]\\t'+error,_locator(this.locator));\r\n\t},\r\n\terror:function(error) {\r\n\t\tconsole.error('[xmldom error]\\t'+error,_locator(this.locator));\r\n\t},\r\n\tfatalError:function(error) {\r\n\t\tconsole.error('[xmldom fatalError]\\t'+error,_locator(this.locator));\r\n\t    throw error;\r\n\t}\r\n}\r\nfunction _locator(l){\r\n\tif(l){\r\n\t\treturn '\\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']'\r\n\t}\r\n}\r\nfunction _toString(chars,start,length){\r\n\tif(typeof chars == 'string'){\r\n\t\treturn chars.substr(start,length)\r\n\t}else{//java sax connect width xmldom on rhino(what about: \"? && !(chars instanceof String)\")\r\n\t\tif(chars.length >= start+length || start){\r\n\t\t\treturn new java.lang.String(chars,start,length)+'';\r\n\t\t}\r\n\t\treturn chars;\r\n\t}\r\n}\r\n\r\n/*\r\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html\r\n * used method of org.xml.sax.ext.LexicalHandler:\r\n *  #comment(chars, start, length)\r\n *  #startCDATA()\r\n *  #endCDATA()\r\n *  #startDTD(name, publicId, systemId)\r\n *\r\n *\r\n * IGNORED method of org.xml.sax.ext.LexicalHandler:\r\n *  #endDTD()\r\n *  #startEntity(name)\r\n *  #endEntity(name)\r\n *\r\n *\r\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html\r\n * IGNORED method of org.xml.sax.ext.DeclHandler\r\n * \t#attributeDecl(eName, aName, type, mode, value)\r\n *  #elementDecl(name, model)\r\n *  #externalEntityDecl(name, publicId, systemId)\r\n *  #internalEntityDecl(name, value)\r\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html\r\n * IGNORED method of org.xml.sax.EntityResolver2\r\n *  #resolveEntity(String name,String publicId,String baseURI,String systemId)\r\n *  #resolveEntity(publicId, systemId)\r\n *  #getExternalSubset(name, baseURI)\r\n * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html\r\n * IGNORED method of org.xml.sax.DTDHandler\r\n *  #notationDecl(name, publicId, systemId) {};\r\n *  #unparsedEntityDecl(name, publicId, systemId, notationName) {};\r\n */\r\n\"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl\".replace(/\\w+/g,function(key){\r\n\tDOMHandler.prototype[key] = function(){return null}\r\n})\r\n\r\n/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */\r\nfunction appendElement (hander,node) {\r\n    if (!hander.currentElement) {\r\n        hander.doc.appendChild(node);\r\n    } else {\r\n        hander.currentElement.appendChild(node);\r\n    }\r\n}//appendChild and setAttributeNS are preformance key\r\n\r\n//if(typeof require == 'function'){\r\n\tvar XMLReader = require('./sax').XMLReader;\r\n\tvar DOMImplementation = exports.DOMImplementation = require('./dom').DOMImplementation;\r\n\texports.XMLSerializer = require('./dom').XMLSerializer ;\r\n\texports.DOMParser = DOMParser;\r\n//}\r\n","/*\n * DOM Level 2\n * Object DOMException\n * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html\n */\n\nfunction copy(src,dest){\n\tfor(var p in src){\n\t\tdest[p] = src[p];\n\t}\n}\n/**\n^\\w+\\.prototype\\.([_\\w]+)\\s*=\\s*((?:.*\\{\\s*?[\\r\\n][\\s\\S]*?^})|\\S.*?(?=[;\\r\\n]));?\n^\\w+\\.prototype\\.([_\\w]+)\\s*=\\s*(\\S.*?(?=[;\\r\\n]));?\n */\nfunction _extends(Class,Super){\n\tvar pt = Class.prototype;\n\tif(Object.create){\n\t\tvar ppt = Object.create(Super.prototype)\n\t\tpt.__proto__ = ppt;\n\t}\n\tif(!(pt instanceof Super)){\n\t\tfunction t(){};\n\t\tt.prototype = Super.prototype;\n\t\tt = new t();\n\t\tcopy(pt,t);\n\t\tClass.prototype = pt = t;\n\t}\n\tif(pt.constructor != Class){\n\t\tif(typeof Class != 'function'){\n\t\t\tconsole.error(\"unknow Class:\"+Class)\n\t\t}\n\t\tpt.constructor = Class\n\t}\n}\nvar htmlns = 'http://www.w3.org/1999/xhtml' ;\n// Node Types\nvar NodeType = {}\nvar ELEMENT_NODE                = NodeType.ELEMENT_NODE                = 1;\nvar ATTRIBUTE_NODE              = NodeType.ATTRIBUTE_NODE              = 2;\nvar TEXT_NODE                   = NodeType.TEXT_NODE                   = 3;\nvar CDATA_SECTION_NODE          = NodeType.CDATA_SECTION_NODE          = 4;\nvar ENTITY_REFERENCE_NODE       = NodeType.ENTITY_REFERENCE_NODE       = 5;\nvar ENTITY_NODE                 = NodeType.ENTITY_NODE                 = 6;\nvar PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7;\nvar COMMENT_NODE                = NodeType.COMMENT_NODE                = 8;\nvar DOCUMENT_NODE               = NodeType.DOCUMENT_NODE               = 9;\nvar DOCUMENT_TYPE_NODE          = NodeType.DOCUMENT_TYPE_NODE          = 10;\nvar DOCUMENT_FRAGMENT_NODE      = NodeType.DOCUMENT_FRAGMENT_NODE      = 11;\nvar NOTATION_NODE               = NodeType.NOTATION_NODE               = 12;\n\n// ExceptionCode\nvar ExceptionCode = {}\nvar ExceptionMessage = {};\nvar INDEX_SIZE_ERR              = ExceptionCode.INDEX_SIZE_ERR              = ((ExceptionMessage[1]=\"Index size error\"),1);\nvar DOMSTRING_SIZE_ERR          = ExceptionCode.DOMSTRING_SIZE_ERR          = ((ExceptionMessage[2]=\"DOMString size error\"),2);\nvar HIERARCHY_REQUEST_ERR       = ExceptionCode.HIERARCHY_REQUEST_ERR       = ((ExceptionMessage[3]=\"Hierarchy request error\"),3);\nvar WRONG_DOCUMENT_ERR          = ExceptionCode.WRONG_DOCUMENT_ERR          = ((ExceptionMessage[4]=\"Wrong document\"),4);\nvar INVALID_CHARACTER_ERR       = ExceptionCode.INVALID_CHARACTER_ERR       = ((ExceptionMessage[5]=\"Invalid character\"),5);\nvar NO_DATA_ALLOWED_ERR         = ExceptionCode.NO_DATA_ALLOWED_ERR         = ((ExceptionMessage[6]=\"No data allowed\"),6);\nvar NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]=\"No modification allowed\"),7);\nvar NOT_FOUND_ERR               = ExceptionCode.NOT_FOUND_ERR               = ((ExceptionMessage[8]=\"Not found\"),8);\nvar NOT_SUPPORTED_ERR           = ExceptionCode.NOT_SUPPORTED_ERR           = ((ExceptionMessage[9]=\"Not supported\"),9);\nvar INUSE_ATTRIBUTE_ERR         = ExceptionCode.INUSE_ATTRIBUTE_ERR         = ((ExceptionMessage[10]=\"Attribute in use\"),10);\n//level2\nvar INVALID_STATE_ERR        \t= ExceptionCode.INVALID_STATE_ERR        \t= ((ExceptionMessage[11]=\"Invalid state\"),11);\nvar SYNTAX_ERR               \t= ExceptionCode.SYNTAX_ERR               \t= ((ExceptionMessage[12]=\"Syntax error\"),12);\nvar INVALID_MODIFICATION_ERR \t= ExceptionCode.INVALID_MODIFICATION_ERR \t= ((ExceptionMessage[13]=\"Invalid modification\"),13);\nvar NAMESPACE_ERR            \t= ExceptionCode.NAMESPACE_ERR           \t= ((ExceptionMessage[14]=\"Invalid namespace\"),14);\nvar INVALID_ACCESS_ERR       \t= ExceptionCode.INVALID_ACCESS_ERR      \t= ((ExceptionMessage[15]=\"Invalid access\"),15);\n\n\nfunction DOMException(code, message) {\n\tif(message instanceof Error){\n\t\tvar error = message;\n\t}else{\n\t\terror = this;\n\t\tError.call(this, ExceptionMessage[code]);\n\t\tthis.message = ExceptionMessage[code];\n\t\tif(Error.captureStackTrace) Error.captureStackTrace(this, DOMException);\n\t}\n\terror.code = code;\n\tif(message) this.message = this.message + \": \" + message;\n\treturn error;\n};\nDOMException.prototype = Error.prototype;\ncopy(ExceptionCode,DOMException)\n/**\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177\n * The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live.\n * The items in the NodeList are accessible via an integral index, starting from 0.\n */\nfunction NodeList() {\n};\nNodeList.prototype = {\n\t/**\n\t * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive.\n\t * @standard level1\n\t */\n\tlength:0, \n\t/**\n\t * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null.\n\t * @standard level1\n\t * @param index  unsigned long \n\t *   Index into the collection.\n\t * @return Node\n\t * \tThe node at the indexth position in the NodeList, or null if that is not a valid index. \n\t */\n\titem: function(index) {\n\t\treturn this[index] || null;\n\t},\n\ttoString:function(isHTML,nodeFilter){\n\t\tfor(var buf = [], i = 0;i<this.length;i++){\n\t\t\tserializeToString(this[i],buf,isHTML,nodeFilter);\n\t\t}\n\t\treturn buf.join('');\n\t}\n};\nfunction LiveNodeList(node,refresh){\n\tthis._node = node;\n\tthis._refresh = refresh\n\t_updateLiveList(this);\n}\nfunction _updateLiveList(list){\n\tvar inc = list._node._inc || list._node.ownerDocument._inc;\n\tif(list._inc != inc){\n\t\tvar ls = list._refresh(list._node);\n\t\t//console.log(ls.length)\n\t\t__set__(list,'length',ls.length);\n\t\tcopy(ls,list);\n\t\tlist._inc = inc;\n\t}\n}\nLiveNodeList.prototype.item = function(i){\n\t_updateLiveList(this);\n\treturn this[i];\n}\n\n_extends(LiveNodeList,NodeList);\n/**\n * \n * Objects implementing the NamedNodeMap interface are used to represent collections of nodes that can be accessed by name. Note that NamedNodeMap does not inherit from NodeList; NamedNodeMaps are not maintained in any particular order. Objects contained in an object implementing NamedNodeMap may also be accessed by an ordinal index, but this is simply to allow convenient enumeration of the contents of a NamedNodeMap, and does not imply that the DOM specifies an order to these Nodes.\n * NamedNodeMap objects in the DOM are live.\n * used for attributes or DocumentType entities \n */\nfunction NamedNodeMap() {\n};\n\nfunction _findNodeIndex(list,node){\n\tvar i = list.length;\n\twhile(i--){\n\t\tif(list[i] === node){return i}\n\t}\n}\n\nfunction _addNamedNode(el,list,newAttr,oldAttr){\n\tif(oldAttr){\n\t\tlist[_findNodeIndex(list,oldAttr)] = newAttr;\n\t}else{\n\t\tlist[list.length++] = newAttr;\n\t}\n\tif(el){\n\t\tnewAttr.ownerElement = el;\n\t\tvar doc = el.ownerDocument;\n\t\tif(doc){\n\t\t\toldAttr && _onRemoveAttribute(doc,el,oldAttr);\n\t\t\t_onAddAttribute(doc,el,newAttr);\n\t\t}\n\t}\n}\nfunction _removeNamedNode(el,list,attr){\n\t//console.log('remove attr:'+attr)\n\tvar i = _findNodeIndex(list,attr);\n\tif(i>=0){\n\t\tvar lastIndex = list.length-1\n\t\twhile(i<lastIndex){\n\t\t\tlist[i] = list[++i]\n\t\t}\n\t\tlist.length = lastIndex;\n\t\tif(el){\n\t\t\tvar doc = el.ownerDocument;\n\t\t\tif(doc){\n\t\t\t\t_onRemoveAttribute(doc,el,attr);\n\t\t\t\tattr.ownerElement = null;\n\t\t\t}\n\t\t}\n\t}else{\n\t\tthrow DOMException(NOT_FOUND_ERR,new Error(el.tagName+'@'+attr))\n\t}\n}\nNamedNodeMap.prototype = {\n\tlength:0,\n\titem:NodeList.prototype.item,\n\tgetNamedItem: function(key) {\n//\t\tif(key.indexOf(':')>0 || key == 'xmlns'){\n//\t\t\treturn null;\n//\t\t}\n\t\t//console.log()\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar attr = this[i];\n\t\t\t//console.log(attr.nodeName,key)\n\t\t\tif(attr.nodeName == key){\n\t\t\t\treturn attr;\n\t\t\t}\n\t\t}\n\t},\n\tsetNamedItem: function(attr) {\n\t\tvar el = attr.ownerElement;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\tvar oldAttr = this.getNamedItem(attr.nodeName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\t/* returns Node */\n\tsetNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR\n\t\tvar el = attr.ownerElement, oldAttr;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\toldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\n\t/* returns Node */\n\tremoveNamedItem: function(key) {\n\t\tvar attr = this.getNamedItem(key);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\t\t\n\t\t\n\t},// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR\n\t\n\t//for level2\n\tremoveNamedItemNS:function(namespaceURI,localName){\n\t\tvar attr = this.getNamedItemNS(namespaceURI,localName);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\t},\n\tgetNamedItemNS: function(namespaceURI, localName) {\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar node = this[i];\n\t\t\tif(node.localName == localName && node.namespaceURI == namespaceURI){\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n};\n/**\n * @see http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490\n */\nfunction DOMImplementation(/* Object */ features) {\n\tthis._features = {};\n\tif (features) {\n\t\tfor (var feature in features) {\n\t\t\t this._features = features[feature];\n\t\t}\n\t}\n};\n\nDOMImplementation.prototype = {\n\thasFeature: function(/* string */ feature, /* string */ version) {\n\t\tvar versions = this._features[feature.toLowerCase()];\n\t\tif (versions && (!version || version in versions)) {\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateDocument:function(namespaceURI,  qualifiedName, doctype){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR,WRONG_DOCUMENT_ERR\n\t\tvar doc = new Document();\n\t\tdoc.implementation = this;\n\t\tdoc.childNodes = new NodeList();\n\t\tdoc.doctype = doctype;\n\t\tif(doctype){\n\t\t\tdoc.appendChild(doctype);\n\t\t}\n\t\tif(qualifiedName){\n\t\t\tvar root = doc.createElementNS(namespaceURI,qualifiedName);\n\t\t\tdoc.appendChild(root);\n\t\t}\n\t\treturn doc;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateDocumentType:function(qualifiedName, publicId, systemId){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR\n\t\tvar node = new DocumentType();\n\t\tnode.name = qualifiedName;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.publicId = publicId;\n\t\tnode.systemId = systemId;\n\t\t// Introduced in DOM Level 2:\n\t\t//readonly attribute DOMString        internalSubset;\n\t\t\n\t\t//TODO:..\n\t\t//  readonly attribute NamedNodeMap     entities;\n\t\t//  readonly attribute NamedNodeMap     notations;\n\t\treturn node;\n\t}\n};\n\n\n/**\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247\n */\n\nfunction Node() {\n};\n\nNode.prototype = {\n\tfirstChild : null,\n\tlastChild : null,\n\tpreviousSibling : null,\n\tnextSibling : null,\n\tattributes : null,\n\tparentNode : null,\n\tchildNodes : null,\n\townerDocument : null,\n\tnodeValue : null,\n\tnamespaceURI : null,\n\tprefix : null,\n\tlocalName : null,\n\t// Modified in DOM Level 2:\n\tinsertBefore:function(newChild, refChild){//raises \n\t\treturn _insertBefore(this,newChild,refChild);\n\t},\n\treplaceChild:function(newChild, oldChild){//raises \n\t\tthis.insertBefore(newChild,oldChild);\n\t\tif(oldChild){\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t},\n\tremoveChild:function(oldChild){\n\t\treturn _removeChild(this,oldChild);\n\t},\n\tappendChild:function(newChild){\n\t\treturn this.insertBefore(newChild,null);\n\t},\n\thasChildNodes:function(){\n\t\treturn this.firstChild != null;\n\t},\n\tcloneNode:function(deep){\n\t\treturn cloneNode(this.ownerDocument||this,this,deep);\n\t},\n\t// Modified in DOM Level 2:\n\tnormalize:function(){\n\t\tvar child = this.firstChild;\n\t\twhile(child){\n\t\t\tvar next = child.nextSibling;\n\t\t\tif(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){\n\t\t\t\tthis.removeChild(next);\n\t\t\t\tchild.appendData(next.data);\n\t\t\t}else{\n\t\t\t\tchild.normalize();\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t}\n\t},\n  \t// Introduced in DOM Level 2:\n\tisSupported:function(feature, version){\n\t\treturn this.ownerDocument.implementation.hasFeature(feature,version);\n\t},\n    // Introduced in DOM Level 2:\n    hasAttributes:function(){\n    \treturn this.attributes.length>0;\n    },\n    lookupPrefix:function(namespaceURI){\n    \tvar el = this;\n    \twhile(el){\n    \t\tvar map = el._nsMap;\n    \t\t//console.dir(map)\n    \t\tif(map){\n    \t\t\tfor(var n in map){\n    \t\t\t\tif(map[n] == namespaceURI){\n    \t\t\t\t\treturn n;\n    \t\t\t\t}\n    \t\t\t}\n    \t\t}\n    \t\tel = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;\n    \t}\n    \treturn null;\n    },\n    // Introduced in DOM Level 3:\n    lookupNamespaceURI:function(prefix){\n    \tvar el = this;\n    \twhile(el){\n    \t\tvar map = el._nsMap;\n    \t\t//console.dir(map)\n    \t\tif(map){\n    \t\t\tif(prefix in map){\n    \t\t\t\treturn map[prefix] ;\n    \t\t\t}\n    \t\t}\n    \t\tel = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;\n    \t}\n    \treturn null;\n    },\n    // Introduced in DOM Level 3:\n    isDefaultNamespace:function(namespaceURI){\n    \tvar prefix = this.lookupPrefix(namespaceURI);\n    \treturn prefix == null;\n    }\n};\n\n\nfunction _xmlEncoder(c){\n\treturn c == '<' && '&lt;' ||\n         c == '>' && '&gt;' ||\n         c == '&' && '&amp;' ||\n         c == '\"' && '&quot;' ||\n         '&#'+c.charCodeAt()+';'\n}\n\n\ncopy(NodeType,Node);\ncopy(NodeType,Node.prototype);\n\n/**\n * @param callback return true for continue,false for break\n * @return boolean true: break visit;\n */\nfunction _visitNode(node,callback){\n\tif(callback(node)){\n\t\treturn true;\n\t}\n\tif(node = node.firstChild){\n\t\tdo{\n\t\t\tif(_visitNode(node,callback)){return true}\n        }while(node=node.nextSibling)\n    }\n}\n\n\n\nfunction Document(){\n}\nfunction _onAddAttribute(doc,el,newAttr){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns == 'http://www.w3.org/2000/xmlns/'){\n\t\t//update namespace\n\t\tel._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value\n\t}\n}\nfunction _onRemoveAttribute(doc,el,newAttr,remove){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns == 'http://www.w3.org/2000/xmlns/'){\n\t\t//update namespace\n\t\tdelete el._nsMap[newAttr.prefix?newAttr.localName:'']\n\t}\n}\nfunction _onUpdateChild(doc,el,newChild){\n\tif(doc && doc._inc){\n\t\tdoc._inc++;\n\t\t//update childNodes\n\t\tvar cs = el.childNodes;\n\t\tif(newChild){\n\t\t\tcs[cs.length++] = newChild;\n\t\t}else{\n\t\t\t//console.log(1)\n\t\t\tvar child = el.firstChild;\n\t\t\tvar i = 0;\n\t\t\twhile(child){\n\t\t\t\tcs[i++] = child;\n\t\t\t\tchild =child.nextSibling;\n\t\t\t}\n\t\t\tcs.length = i;\n\t\t}\n\t}\n}\n\n/**\n * attributes;\n * children;\n * \n * writeable properties:\n * nodeValue,Attr:value,CharacterData:data\n * prefix\n */\nfunction _removeChild(parentNode,child){\n\tvar previous = child.previousSibling;\n\tvar next = child.nextSibling;\n\tif(previous){\n\t\tprevious.nextSibling = next;\n\t}else{\n\t\tparentNode.firstChild = next\n\t}\n\tif(next){\n\t\tnext.previousSibling = previous;\n\t}else{\n\t\tparentNode.lastChild = previous;\n\t}\n\t_onUpdateChild(parentNode.ownerDocument,parentNode);\n\treturn child;\n}\n/**\n * preformance key(refChild == null)\n */\nfunction _insertBefore(parentNode,newChild,nextChild){\n\tvar cp = newChild.parentNode;\n\tif(cp){\n\t\tcp.removeChild(newChild);//remove and update\n\t}\n\tif(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\tvar newFirst = newChild.firstChild;\n\t\tif (newFirst == null) {\n\t\t\treturn newChild;\n\t\t}\n\t\tvar newLast = newChild.lastChild;\n\t}else{\n\t\tnewFirst = newLast = newChild;\n\t}\n\tvar pre = nextChild ? nextChild.previousSibling : parentNode.lastChild;\n\n\tnewFirst.previousSibling = pre;\n\tnewLast.nextSibling = nextChild;\n\t\n\t\n\tif(pre){\n\t\tpre.nextSibling = newFirst;\n\t}else{\n\t\tparentNode.firstChild = newFirst;\n\t}\n\tif(nextChild == null){\n\t\tparentNode.lastChild = newLast;\n\t}else{\n\t\tnextChild.previousSibling = newLast;\n\t}\n\tdo{\n\t\tnewFirst.parentNode = parentNode;\n\t}while(newFirst !== newLast && (newFirst= newFirst.nextSibling))\n\t_onUpdateChild(parentNode.ownerDocument||parentNode,parentNode);\n\t//console.log(parentNode.lastChild.nextSibling == null)\n\tif (newChild.nodeType == DOCUMENT_FRAGMENT_NODE) {\n\t\tnewChild.firstChild = newChild.lastChild = null;\n\t}\n\treturn newChild;\n}\nfunction _appendSingleChild(parentNode,newChild){\n\tvar cp = newChild.parentNode;\n\tif(cp){\n\t\tvar pre = parentNode.lastChild;\n\t\tcp.removeChild(newChild);//remove and update\n\t\tvar pre = parentNode.lastChild;\n\t}\n\tvar pre = parentNode.lastChild;\n\tnewChild.parentNode = parentNode;\n\tnewChild.previousSibling = pre;\n\tnewChild.nextSibling = null;\n\tif(pre){\n\t\tpre.nextSibling = newChild;\n\t}else{\n\t\tparentNode.firstChild = newChild;\n\t}\n\tparentNode.lastChild = newChild;\n\t_onUpdateChild(parentNode.ownerDocument,parentNode,newChild);\n\treturn newChild;\n\t//console.log(\"__aa\",parentNode.lastChild.nextSibling == null)\n}\nDocument.prototype = {\n\t//implementation : null,\n\tnodeName :  '#document',\n\tnodeType :  DOCUMENT_NODE,\n\tdoctype :  null,\n\tdocumentElement :  null,\n\t_inc : 1,\n\t\n\tinsertBefore :  function(newChild, refChild){//raises \n\t\tif(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){\n\t\t\tvar child = newChild.firstChild;\n\t\t\twhile(child){\n\t\t\t\tvar next = child.nextSibling;\n\t\t\t\tthis.insertBefore(child,refChild);\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t\treturn newChild;\n\t\t}\n\t\tif(this.documentElement == null && newChild.nodeType == ELEMENT_NODE){\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\t\t\n\t\treturn _insertBefore(this,newChild,refChild),(newChild.ownerDocument = this),newChild;\n\t},\n\tremoveChild :  function(oldChild){\n\t\tif(this.documentElement == oldChild){\n\t\t\tthis.documentElement = null;\n\t\t}\n\t\treturn _removeChild(this,oldChild);\n\t},\n\t// Introduced in DOM Level 2:\n\timportNode : function(importedNode,deep){\n\t\treturn importNode(this,importedNode,deep);\n\t},\n\t// Introduced in DOM Level 2:\n\tgetElementById :\tfunction(id){\n\t\tvar rtv = null;\n\t\t_visitNode(this.documentElement,function(node){\n\t\t\tif(node.nodeType == ELEMENT_NODE){\n\t\t\t\tif(node.getAttribute('id') == id){\n\t\t\t\t\trtv = node;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\treturn rtv;\n\t},\n\t\n\t//document factory method:\n\tcreateElement :\tfunction(tagName){\n\t\tvar node = new Element();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = tagName;\n\t\tnode.tagName = tagName;\n\t\tnode.childNodes = new NodeList();\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\tcreateDocumentFragment :\tfunction(){\n\t\tvar node = new DocumentFragment();\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\treturn node;\n\t},\n\tcreateTextNode :\tfunction(data){\n\t\tvar node = new Text();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateComment :\tfunction(data){\n\t\tvar node = new Comment();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateCDATASection :\tfunction(data){\n\t\tvar node = new CDATASection();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateProcessingInstruction :\tfunction(target,data){\n\t\tvar node = new ProcessingInstruction();\n\t\tnode.ownerDocument = this;\n\t\tnode.tagName = node.target = target;\n\t\tnode.nodeValue= node.data = data;\n\t\treturn node;\n\t},\n\tcreateAttribute :\tfunction(name){\n\t\tvar node = new Attr();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.name = name;\n\t\tnode.nodeName\t= name;\n\t\tnode.localName = name;\n\t\tnode.specified = true;\n\t\treturn node;\n\t},\n\tcreateEntityReference :\tfunction(name){\n\t\tvar node = new EntityReference();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.nodeName\t= name;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateElementNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Element();\n\t\tvar pl = qualifiedName.split(':');\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tnode.childNodes = new NodeList();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.tagName = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\t//el.prefix = null;\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateAttributeNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Attr();\n\t\tvar pl = qualifiedName.split(':');\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.name = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tnode.specified = true;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\t//el.prefix = null;\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\treturn node;\n\t}\n};\n_extends(Document,Node);\n\n\nfunction Element() {\n\tthis._nsMap = {};\n};\nElement.prototype = {\n\tnodeType : ELEMENT_NODE,\n\thasAttribute : function(name){\n\t\treturn this.getAttributeNode(name)!=null;\n\t},\n\tgetAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name);\n\t\treturn attr && attr.value || '';\n\t},\n\tgetAttributeNode : function(name){\n\t\treturn this.attributes.getNamedItem(name);\n\t},\n\tsetAttribute : function(name, value){\n\t\tvar attr = this.ownerDocument.createAttribute(name);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr)\n\t},\n\tremoveAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name)\n\t\tattr && this.removeAttributeNode(attr);\n\t},\n\t\n\t//four real opeartion method\n\tappendChild:function(newChild){\n\t\tif(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\t\treturn this.insertBefore(newChild,null);\n\t\t}else{\n\t\t\treturn _appendSingleChild(this,newChild);\n\t\t}\n\t},\n\tsetAttributeNode : function(newAttr){\n\t\treturn this.attributes.setNamedItem(newAttr);\n\t},\n\tsetAttributeNodeNS : function(newAttr){\n\t\treturn this.attributes.setNamedItemNS(newAttr);\n\t},\n\tremoveAttributeNode : function(oldAttr){\n\t\t//console.log(this == oldAttr.ownerElement)\n\t\treturn this.attributes.removeNamedItem(oldAttr.nodeName);\n\t},\n\t//get real attribute name,and remove it by removeAttributeNode\n\tremoveAttributeNS : function(namespaceURI, localName){\n\t\tvar old = this.getAttributeNodeNS(namespaceURI, localName);\n\t\told && this.removeAttributeNode(old);\n\t},\n\t\n\thasAttributeNS : function(namespaceURI, localName){\n\t\treturn this.getAttributeNodeNS(namespaceURI, localName)!=null;\n\t},\n\tgetAttributeNS : function(namespaceURI, localName){\n\t\tvar attr = this.getAttributeNodeNS(namespaceURI, localName);\n\t\treturn attr && attr.value || '';\n\t},\n\tsetAttributeNS : function(namespaceURI, qualifiedName, value){\n\t\tvar attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr)\n\t},\n\tgetAttributeNodeNS : function(namespaceURI, localName){\n\t\treturn this.attributes.getNamedItemNS(namespaceURI, localName);\n\t},\n\t\n\tgetElementsByTagName : function(tagName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t},\n\tgetElementsByTagNameNS : function(namespaceURI, localName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t\t\n\t\t});\n\t}\n};\nDocument.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;\nDocument.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;\n\n\n_extends(Element,Node);\nfunction Attr() {\n};\nAttr.prototype.nodeType = ATTRIBUTE_NODE;\n_extends(Attr,Node);\n\n\nfunction CharacterData() {\n};\nCharacterData.prototype = {\n\tdata : '',\n\tsubstringData : function(offset, count) {\n\t\treturn this.data.substring(offset, offset+count);\n\t},\n\tappendData: function(text) {\n\t\ttext = this.data+text;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t},\n\tinsertData: function(offset,text) {\n\t\tthis.replaceData(offset,0,text);\n\t\n\t},\n\tappendChild:function(newChild){\n\t\tthrow new Error(ExceptionMessage[HIERARCHY_REQUEST_ERR])\n\t},\n\tdeleteData: function(offset, count) {\n\t\tthis.replaceData(offset,count,\"\");\n\t},\n\treplaceData: function(offset, count, text) {\n\t\tvar start = this.data.substring(0,offset);\n\t\tvar end = this.data.substring(offset+count);\n\t\ttext = start + text + end;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t}\n}\n_extends(CharacterData,Node);\nfunction Text() {\n};\nText.prototype = {\n\tnodeName : \"#text\",\n\tnodeType : TEXT_NODE,\n\tsplitText : function(offset) {\n\t\tvar text = this.data;\n\t\tvar newText = text.substring(offset);\n\t\ttext = text.substring(0, offset);\n\t\tthis.data = this.nodeValue = text;\n\t\tthis.length = text.length;\n\t\tvar newNode = this.ownerDocument.createTextNode(newText);\n\t\tif(this.parentNode){\n\t\t\tthis.parentNode.insertBefore(newNode, this.nextSibling);\n\t\t}\n\t\treturn newNode;\n\t}\n}\n_extends(Text,CharacterData);\nfunction Comment() {\n};\nComment.prototype = {\n\tnodeName : \"#comment\",\n\tnodeType : COMMENT_NODE\n}\n_extends(Comment,CharacterData);\n\nfunction CDATASection() {\n};\nCDATASection.prototype = {\n\tnodeName : \"#cdata-section\",\n\tnodeType : CDATA_SECTION_NODE\n}\n_extends(CDATASection,CharacterData);\n\n\nfunction DocumentType() {\n};\nDocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;\n_extends(DocumentType,Node);\n\nfunction Notation() {\n};\nNotation.prototype.nodeType = NOTATION_NODE;\n_extends(Notation,Node);\n\nfunction Entity() {\n};\nEntity.prototype.nodeType = ENTITY_NODE;\n_extends(Entity,Node);\n\nfunction EntityReference() {\n};\nEntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;\n_extends(EntityReference,Node);\n\nfunction DocumentFragment() {\n};\nDocumentFragment.prototype.nodeName =\t\"#document-fragment\";\nDocumentFragment.prototype.nodeType =\tDOCUMENT_FRAGMENT_NODE;\n_extends(DocumentFragment,Node);\n\n\nfunction ProcessingInstruction() {\n}\nProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;\n_extends(ProcessingInstruction,Node);\nfunction XMLSerializer(){}\nXMLSerializer.prototype.serializeToString = function(node,isHtml,nodeFilter){\n\treturn nodeSerializeToString.call(node,isHtml,nodeFilter);\n}\nNode.prototype.toString = nodeSerializeToString;\nfunction nodeSerializeToString(isHtml,nodeFilter){\n\tvar buf = [];\n\tvar refNode = this.nodeType == 9?this.documentElement:this;\n\tvar prefix = refNode.prefix;\n\tvar uri = refNode.namespaceURI;\n\t\n\tif(uri && prefix == null){\n\t\t//console.log(prefix)\n\t\tvar prefix = refNode.lookupPrefix(uri);\n\t\tif(prefix == null){\n\t\t\t//isHTML = true;\n\t\t\tvar visibleNamespaces=[\n\t\t\t{namespace:uri,prefix:null}\n\t\t\t//{namespace:uri,prefix:''}\n\t\t\t]\n\t\t}\n\t}\n\tserializeToString(this,buf,isHtml,nodeFilter,visibleNamespaces);\n\t//console.log('###',this.nodeType,uri,prefix,buf.join(''))\n\treturn buf.join('');\n}\nfunction needNamespaceDefine(node,isHTML, visibleNamespaces) {\n\tvar prefix = node.prefix||'';\n\tvar uri = node.namespaceURI;\n\tif (!prefix && !uri){\n\t\treturn false;\n\t}\n\tif (prefix === \"xml\" && uri === \"http://www.w3.org/XML/1998/namespace\" \n\t\t|| uri == 'http://www.w3.org/2000/xmlns/'){\n\t\treturn false;\n\t}\n\t\n\tvar i = visibleNamespaces.length \n\t//console.log('@@@@',node.tagName,prefix,uri,visibleNamespaces)\n\twhile (i--) {\n\t\tvar ns = visibleNamespaces[i];\n\t\t// get namespace prefix\n\t\t//console.log(node.nodeType,node.tagName,ns.prefix,prefix)\n\t\tif (ns.prefix == prefix){\n\t\t\treturn ns.namespace != uri;\n\t\t}\n\t}\n\t//console.log(isHTML,uri,prefix=='')\n\t//if(isHTML && prefix ==null && uri == 'http://www.w3.org/1999/xhtml'){\n\t//\treturn false;\n\t//}\n\t//node.flag = '11111'\n\t//console.error(3,true,node.flag,node.prefix,node.namespaceURI)\n\treturn true;\n}\nfunction serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){\n\tif(nodeFilter){\n\t\tnode = nodeFilter(node);\n\t\tif(node){\n\t\t\tif(typeof node == 'string'){\n\t\t\t\tbuf.push(node);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}else{\n\t\t\treturn;\n\t\t}\n\t\t//buf.sort.apply(attrs, attributeSorter);\n\t}\n\tswitch(node.nodeType){\n\tcase ELEMENT_NODE:\n\t\tif (!visibleNamespaces) visibleNamespaces = [];\n\t\tvar startVisibleNamespaces = visibleNamespaces.length;\n\t\tvar attrs = node.attributes;\n\t\tvar len = attrs.length;\n\t\tvar child = node.firstChild;\n\t\tvar nodeName = node.tagName;\n\t\t\n\t\tisHTML =  (htmlns === node.namespaceURI) ||isHTML \n\t\tbuf.push('<',nodeName);\n\t\t\n\t\t\n\t\t\n\t\tfor(var i=0;i<len;i++){\n\t\t\t// add namespaces for attributes\n\t\t\tvar attr = attrs.item(i);\n\t\t\tif (attr.prefix == 'xmlns') {\n\t\t\t\tvisibleNamespaces.push({ prefix: attr.localName, namespace: attr.value });\n\t\t\t}else if(attr.nodeName == 'xmlns'){\n\t\t\t\tvisibleNamespaces.push({ prefix: '', namespace: attr.value });\n\t\t\t}\n\t\t}\n\t\tfor(var i=0;i<len;i++){\n\t\t\tvar attr = attrs.item(i);\n\t\t\tif (needNamespaceDefine(attr,isHTML, visibleNamespaces)) {\n\t\t\t\tvar prefix = attr.prefix||'';\n\t\t\t\tvar uri = attr.namespaceURI;\n\t\t\t\tvar ns = prefix ? ' xmlns:' + prefix : \" xmlns\";\n\t\t\t\tbuf.push(ns, '=\"' , uri , '\"');\n\t\t\t\tvisibleNamespaces.push({ prefix: prefix, namespace:uri });\n\t\t\t}\n\t\t\tserializeToString(attr,buf,isHTML,nodeFilter,visibleNamespaces);\n\t\t}\n\t\t// add namespace for current node\t\t\n\t\tif (needNamespaceDefine(node,isHTML, visibleNamespaces)) {\n\t\t\tvar prefix = node.prefix||'';\n\t\t\tvar uri = node.namespaceURI;\n\t\t\tvar ns = prefix ? ' xmlns:' + prefix : \" xmlns\";\n\t\t\tbuf.push(ns, '=\"' , uri , '\"');\n\t\t\tvisibleNamespaces.push({ prefix: prefix, namespace:uri });\n\t\t}\n\t\t\n\t\tif(child || isHTML && !/^(?:meta|link|img|br|hr|input)$/i.test(nodeName)){\n\t\t\tbuf.push('>');\n\t\t\t//if is cdata child node\n\t\t\tif(isHTML && /^script$/i.test(nodeName)){\n\t\t\t\twhile(child){\n\t\t\t\t\tif(child.data){\n\t\t\t\t\t\tbuf.push(child.data);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tserializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);\n\t\t\t\t\t}\n\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t}\n\t\t\t}else\n\t\t\t{\n\t\t\t\twhile(child){\n\t\t\t\t\tserializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);\n\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbuf.push('</',nodeName,'>');\n\t\t}else{\n\t\t\tbuf.push('/>');\n\t\t}\n\t\t// remove added visible namespaces\n\t\t//visibleNamespaces.length = startVisibleNamespaces;\n\t\treturn;\n\tcase DOCUMENT_NODE:\n\tcase DOCUMENT_FRAGMENT_NODE:\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tserializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t\treturn;\n\tcase ATTRIBUTE_NODE:\n\t\treturn buf.push(' ',node.name,'=\"',node.value.replace(/[<&\"]/g,_xmlEncoder),'\"');\n\tcase TEXT_NODE:\n\t\treturn buf.push(node.data.replace(/[<&]/g,_xmlEncoder));\n\tcase CDATA_SECTION_NODE:\n\t\treturn buf.push( '<![CDATA[',node.data,']]>');\n\tcase COMMENT_NODE:\n\t\treturn buf.push( \"<!--\",node.data,\"-->\");\n\tcase DOCUMENT_TYPE_NODE:\n\t\tvar pubid = node.publicId;\n\t\tvar sysid = node.systemId;\n\t\tbuf.push('<!DOCTYPE ',node.name);\n\t\tif(pubid){\n\t\t\tbuf.push(' PUBLIC \"',pubid);\n\t\t\tif (sysid && sysid!='.') {\n\t\t\t\tbuf.push( '\" \"',sysid);\n\t\t\t}\n\t\t\tbuf.push('\">');\n\t\t}else if(sysid && sysid!='.'){\n\t\t\tbuf.push(' SYSTEM \"',sysid,'\">');\n\t\t}else{\n\t\t\tvar sub = node.internalSubset;\n\t\t\tif(sub){\n\t\t\t\tbuf.push(\" [\",sub,\"]\");\n\t\t\t}\n\t\t\tbuf.push(\">\");\n\t\t}\n\t\treturn;\n\tcase PROCESSING_INSTRUCTION_NODE:\n\t\treturn buf.push( \"<?\",node.target,\" \",node.data,\"?>\");\n\tcase ENTITY_REFERENCE_NODE:\n\t\treturn buf.push( '&',node.nodeName,';');\n\t//case ENTITY_NODE:\n\t//case NOTATION_NODE:\n\tdefault:\n\t\tbuf.push('??',node.nodeName);\n\t}\n}\nfunction importNode(doc,node,deep){\n\tvar node2;\n\tswitch (node.nodeType) {\n\tcase ELEMENT_NODE:\n\t\tnode2 = node.cloneNode(false);\n\t\tnode2.ownerDocument = doc;\n\t\t//var attrs = node2.attributes;\n\t\t//var len = attrs.length;\n\t\t//for(var i=0;i<len;i++){\n\t\t\t//node2.setAttributeNodeNS(importNode(doc,attrs.item(i),deep));\n\t\t//}\n\tcase DOCUMENT_FRAGMENT_NODE:\n\t\tbreak;\n\tcase ATTRIBUTE_NODE:\n\t\tdeep = true;\n\t\tbreak;\n\t//case ENTITY_REFERENCE_NODE:\n\t//case PROCESSING_INSTRUCTION_NODE:\n\t////case TEXT_NODE:\n\t//case CDATA_SECTION_NODE:\n\t//case COMMENT_NODE:\n\t//\tdeep = false;\n\t//\tbreak;\n\t//case DOCUMENT_NODE:\n\t//case DOCUMENT_TYPE_NODE:\n\t//cannot be imported.\n\t//case ENTITY_NODE:\n\t//case NOTATION_NODE:\n\t//can not hit in level3\n\t//default:throw e;\n\t}\n\tif(!node2){\n\t\tnode2 = node.cloneNode(false);//false\n\t}\n\tnode2.ownerDocument = doc;\n\tnode2.parentNode = null;\n\tif(deep){\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tnode2.appendChild(importNode(doc,child,deep));\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t}\n\treturn node2;\n}\n//\n//var _relationMap = {firstChild:1,lastChild:1,previousSibling:1,nextSibling:1,\n//\t\t\t\t\tattributes:1,childNodes:1,parentNode:1,documentElement:1,doctype,};\nfunction cloneNode(doc,node,deep){\n\tvar node2 = new node.constructor();\n\tfor(var n in node){\n\t\tvar v = node[n];\n\t\tif(typeof v != 'object' ){\n\t\t\tif(v != node2[n]){\n\t\t\t\tnode2[n] = v;\n\t\t\t}\n\t\t}\n\t}\n\tif(node.childNodes){\n\t\tnode2.childNodes = new NodeList();\n\t}\n\tnode2.ownerDocument = doc;\n\tswitch (node2.nodeType) {\n\tcase ELEMENT_NODE:\n\t\tvar attrs\t= node.attributes;\n\t\tvar attrs2\t= node2.attributes = new NamedNodeMap();\n\t\tvar len = attrs.length\n\t\tattrs2._ownerElement = node2;\n\t\tfor(var i=0;i<len;i++){\n\t\t\tnode2.setAttributeNode(cloneNode(doc,attrs.item(i),true));\n\t\t}\n\t\tbreak;;\n\tcase ATTRIBUTE_NODE:\n\t\tdeep = true;\n\t}\n\tif(deep){\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tnode2.appendChild(cloneNode(doc,child,deep));\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t}\n\treturn node2;\n}\n\nfunction __set__(object,key,value){\n\tobject[key] = value\n}\n//do dynamic\ntry{\n\tif(Object.defineProperty){\n\t\tObject.defineProperty(LiveNodeList.prototype,'length',{\n\t\t\tget:function(){\n\t\t\t\t_updateLiveList(this);\n\t\t\t\treturn this.$$length;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(Node.prototype,'textContent',{\n\t\t\tget:function(){\n\t\t\t\treturn getTextContent(this);\n\t\t\t},\n\t\t\tset:function(data){\n\t\t\t\tswitch(this.nodeType){\n\t\t\t\tcase ELEMENT_NODE:\n\t\t\t\tcase DOCUMENT_FRAGMENT_NODE:\n\t\t\t\t\twhile(this.firstChild){\n\t\t\t\t\t\tthis.removeChild(this.firstChild);\n\t\t\t\t\t}\n\t\t\t\t\tif(data || String(data)){\n\t\t\t\t\t\tthis.appendChild(this.ownerDocument.createTextNode(data));\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t//TODO:\n\t\t\t\t\tthis.data = data;\n\t\t\t\t\tthis.value = data;\n\t\t\t\t\tthis.nodeValue = data;\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\t\n\t\tfunction getTextContent(node){\n\t\t\tswitch(node.nodeType){\n\t\t\tcase ELEMENT_NODE:\n\t\t\tcase DOCUMENT_FRAGMENT_NODE:\n\t\t\t\tvar buf = [];\n\t\t\t\tnode = node.firstChild;\n\t\t\t\twhile(node){\n\t\t\t\t\tif(node.nodeType!==7 && node.nodeType !==8){\n\t\t\t\t\t\tbuf.push(getTextContent(node));\n\t\t\t\t\t}\n\t\t\t\t\tnode = node.nextSibling;\n\t\t\t\t}\n\t\t\t\treturn buf.join('');\n\t\t\tdefault:\n\t\t\t\treturn node.nodeValue;\n\t\t\t}\n\t\t}\n\t\t__set__ = function(object,key,value){\n\t\t\t//console.log(value)\n\t\t\tobject['$$'+key] = value\n\t\t}\n\t}\n}catch(e){//ie8\n}\n\n//if(typeof require == 'function'){\n\texports.DOMImplementation = DOMImplementation;\n\texports.XMLSerializer = XMLSerializer;\n//}\n","//[4]   \tNameStartChar\t   ::=   \t\":\" | [A-Z] | \"_\" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\r\n//[4a]   \tNameChar\t   ::=   \tNameStartChar | \"-\" | \".\" | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]\r\n//[5]   \tName\t   ::=   \tNameStartChar (NameChar)*\r\nvar nameStartChar = /[A-Z_a-z\\xC0-\\xD6\\xD8-\\xF6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]///\\u10000-\\uEFFFF\r\nvar nameChar = new RegExp(\"[\\\\-\\\\.0-9\"+nameStartChar.source.slice(1,-1)+\"\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]\");\r\nvar tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\\:'+nameStartChar.source+nameChar.source+'*)?$');\r\n//var tagNamePattern = /^[a-zA-Z_][\\w\\-\\.]*(?:\\:[a-zA-Z_][\\w\\-\\.]*)?$/\r\n//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')\r\n\r\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\r\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\r\nvar S_TAG = 0;//tag name offerring\r\nvar S_ATTR = 1;//attr name offerring \r\nvar S_ATTR_SPACE=2;//attr name end and space offer\r\nvar S_EQ = 3;//=space?\r\nvar S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only)\r\nvar S_ATTR_END = 5;//attr value end and no space(quot end)\r\nvar S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer)\r\nvar S_TAG_CLOSE = 7;//closed el<el />\r\n\r\nfunction XMLReader(){\r\n\t\r\n}\r\n\r\nXMLReader.prototype = {\r\n\tparse:function(source,defaultNSMap,entityMap){\r\n\t\tvar domBuilder = this.domBuilder;\r\n\t\tdomBuilder.startDocument();\r\n\t\t_copy(defaultNSMap ,defaultNSMap = {})\r\n\t\tparse(source,defaultNSMap,entityMap,\r\n\t\t\t\tdomBuilder,this.errorHandler);\r\n\t\tdomBuilder.endDocument();\r\n\t}\r\n}\r\nfunction parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){\r\n\tfunction fixedFromCharCode(code) {\r\n\t\t// String.prototype.fromCharCode does not supports\r\n\t\t// > 2 bytes unicode chars directly\r\n\t\tif (code > 0xffff) {\r\n\t\t\tcode -= 0x10000;\r\n\t\t\tvar surrogate1 = 0xd800 + (code >> 10)\r\n\t\t\t\t, surrogate2 = 0xdc00 + (code & 0x3ff);\r\n\r\n\t\t\treturn String.fromCharCode(surrogate1, surrogate2);\r\n\t\t} else {\r\n\t\t\treturn String.fromCharCode(code);\r\n\t\t}\r\n\t}\r\n\tfunction entityReplacer(a){\r\n\t\tvar k = a.slice(1,-1);\r\n\t\tif(k in entityMap){\r\n\t\t\treturn entityMap[k]; \r\n\t\t}else if(k.charAt(0) === '#'){\r\n\t\t\treturn fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))\r\n\t\t}else{\r\n\t\t\terrorHandler.error('entity not found:'+a);\r\n\t\t\treturn a;\r\n\t\t}\r\n\t}\r\n\tfunction appendText(end){//has some bugs\r\n\t\tif(end>start){\r\n\t\t\tvar xt = source.substring(start,end).replace(/&#?\\w+;/g,entityReplacer);\r\n\t\t\tlocator&&position(start);\r\n\t\t\tdomBuilder.characters(xt,0,end-start);\r\n\t\t\tstart = end\r\n\t\t}\r\n\t}\r\n\tfunction position(p,m){\r\n\t\twhile(p>=lineEnd && (m = linePattern.exec(source))){\r\n\t\t\tlineStart = m.index;\r\n\t\t\tlineEnd = lineStart + m[0].length;\r\n\t\t\tlocator.lineNumber++;\r\n\t\t\t//console.log('line++:',locator,startPos,endPos)\r\n\t\t}\r\n\t\tlocator.columnNumber = p-lineStart+1;\r\n\t}\r\n\tvar lineStart = 0;\r\n\tvar lineEnd = 0;\r\n\tvar linePattern = /.*(?:\\r\\n?|\\n)|.*$/g\r\n\tvar locator = domBuilder.locator;\r\n\t\r\n\tvar parseStack = [{currentNSMap:defaultNSMapCopy}]\r\n\tvar closeMap = {};\r\n\tvar start = 0;\r\n\twhile(true){\r\n\t\ttry{\r\n\t\t\tvar tagStart = source.indexOf('<',start);\r\n\t\t\tif(tagStart<0){\r\n\t\t\t\tif(!source.substr(start).match(/^\\s*$/)){\r\n\t\t\t\t\tvar doc = domBuilder.doc;\r\n\t    \t\t\tvar text = doc.createTextNode(source.substr(start));\r\n\t    \t\t\tdoc.appendChild(text);\r\n\t    \t\t\tdomBuilder.currentElement = text;\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif(tagStart>start){\r\n\t\t\t\tappendText(tagStart);\r\n\t\t\t}\r\n\t\t\tswitch(source.charAt(tagStart+1)){\r\n\t\t\tcase '/':\r\n\t\t\t\tvar end = source.indexOf('>',tagStart+3);\r\n\t\t\t\tvar tagName = source.substring(tagStart+2,end);\r\n\t\t\t\tvar config = parseStack.pop();\r\n\t\t\t\tif(end<0){\r\n\t\t\t\t\t\r\n\t        \t\ttagName = source.substring(tagStart+2).replace(/[\\s<].*/,'');\r\n\t        \t\t//console.error('#@@@@@@'+tagName)\r\n\t        \t\terrorHandler.error(\"end tag name: \"+tagName+' is not complete:'+config.tagName);\r\n\t        \t\tend = tagStart+1+tagName.length;\r\n\t        \t}else if(tagName.match(/\\s</)){\r\n\t        \t\ttagName = tagName.replace(/[\\s<].*/,'');\r\n\t        \t\terrorHandler.error(\"end tag name: \"+tagName+' maybe not complete');\r\n\t        \t\tend = tagStart+1+tagName.length;\r\n\t\t\t\t}\r\n\t\t\t\t//console.error(parseStack.length,parseStack)\r\n\t\t\t\t//console.error(config);\r\n\t\t\t\tvar localNSMap = config.localNSMap;\r\n\t\t\t\tvar endMatch = config.tagName == tagName;\r\n\t\t\t\tvar endIgnoreCaseMach = endMatch || config.tagName&&config.tagName.toLowerCase() == tagName.toLowerCase()\r\n\t\t        if(endIgnoreCaseMach){\r\n\t\t        \tdomBuilder.endElement(config.uri,config.localName,tagName);\r\n\t\t\t\t\tif(localNSMap){\r\n\t\t\t\t\t\tfor(var prefix in localNSMap){\r\n\t\t\t\t\t\t\tdomBuilder.endPrefixMapping(prefix) ;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(!endMatch){\r\n\t\t            \terrorHandler.fatalError(\"end tag name: \"+tagName+' is not match the current start tagName:'+config.tagName );\r\n\t\t\t\t\t}\r\n\t\t        }else{\r\n\t\t        \tparseStack.push(config)\r\n\t\t        }\r\n\t\t\t\t\r\n\t\t\t\tend++;\r\n\t\t\t\tbreak;\r\n\t\t\t\t// end elment\r\n\t\t\tcase '?':// <?...?>\r\n\t\t\t\tlocator&&position(tagStart);\r\n\t\t\t\tend = parseInstruction(source,tagStart,domBuilder);\r\n\t\t\t\tbreak;\r\n\t\t\tcase '!':// <!doctype,<![CDATA,<!--\r\n\t\t\t\tlocator&&position(tagStart);\r\n\t\t\t\tend = parseDCC(source,tagStart,domBuilder,errorHandler);\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tlocator&&position(tagStart);\r\n\t\t\t\tvar el = new ElementAttributes();\r\n\t\t\t\tvar currentNSMap = parseStack[parseStack.length-1].currentNSMap;\r\n\t\t\t\t//elStartEnd\r\n\t\t\t\tvar end = parseElementStartPart(source,tagStart,el,currentNSMap,entityReplacer,errorHandler);\r\n\t\t\t\tvar len = el.length;\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\tif(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){\r\n\t\t\t\t\tel.closed = true;\r\n\t\t\t\t\tif(!entityMap.nbsp){\r\n\t\t\t\t\t\terrorHandler.warning('unclosed xml attribute');\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif(locator && len){\r\n\t\t\t\t\tvar locator2 = copyLocator(locator,{});\r\n\t\t\t\t\t//try{//attribute position fixed\r\n\t\t\t\t\tfor(var i = 0;i<len;i++){\r\n\t\t\t\t\t\tvar a = el[i];\r\n\t\t\t\t\t\tposition(a.offset);\r\n\t\t\t\t\t\ta.locator = copyLocator(locator,{});\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//}catch(e){console.error('@@@@@'+e)}\r\n\t\t\t\t\tdomBuilder.locator = locator2\r\n\t\t\t\t\tif(appendElement(el,domBuilder,currentNSMap)){\r\n\t\t\t\t\t\tparseStack.push(el)\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdomBuilder.locator = locator;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(appendElement(el,domBuilder,currentNSMap)){\r\n\t\t\t\t\t\tparseStack.push(el)\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\tif(el.uri === 'http://www.w3.org/1999/xhtml' && !el.closed){\r\n\t\t\t\t\tend = parseHtmlSpecialContent(source,end,el.tagName,entityReplacer,domBuilder)\r\n\t\t\t\t}else{\r\n\t\t\t\t\tend++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}catch(e){\r\n\t\t\terrorHandler.error('element parse error: '+e)\r\n\t\t\t//errorHandler.error('element parse error: '+e);\r\n\t\t\tend = -1;\r\n\t\t\t//throw e;\r\n\t\t}\r\n\t\tif(end>start){\r\n\t\t\tstart = end;\r\n\t\t}else{\r\n\t\t\t//TODO: 这里有可能sax回退,有位置错误风险\r\n\t\t\tappendText(Math.max(tagStart,start)+1);\r\n\t\t}\r\n\t}\r\n}\r\nfunction copyLocator(f,t){\r\n\tt.lineNumber = f.lineNumber;\r\n\tt.columnNumber = f.columnNumber;\r\n\treturn t;\r\n}\r\n\r\n/**\r\n * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack);\r\n * @return end of the elementStartPart(end of elementEndPart for selfClosed el)\r\n */\r\nfunction parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){\r\n\tvar attrName;\r\n\tvar value;\r\n\tvar p = ++start;\r\n\tvar s = S_TAG;//status\r\n\twhile(true){\r\n\t\tvar c = source.charAt(p);\r\n\t\tswitch(c){\r\n\t\tcase '=':\r\n\t\t\tif(s === S_ATTR){//attrName\r\n\t\t\t\tattrName = source.slice(start,p);\r\n\t\t\t\ts = S_EQ;\r\n\t\t\t}else if(s === S_ATTR_SPACE){\r\n\t\t\t\ts = S_EQ;\r\n\t\t\t}else{\r\n\t\t\t\t//fatalError: equal must after attrName or space after attrName\r\n\t\t\t\tthrow new Error('attribute equal must after attrName');\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase '\\'':\r\n\t\tcase '\"':\r\n\t\t\tif(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE\r\n\t\t\t\t){//equal\r\n\t\t\t\tif(s === S_ATTR){\r\n\t\t\t\t\terrorHandler.warning('attribute value must after \"=\"')\r\n\t\t\t\t\tattrName = source.slice(start,p)\r\n\t\t\t\t}\r\n\t\t\t\tstart = p+1;\r\n\t\t\t\tp = source.indexOf(c,start)\r\n\t\t\t\tif(p>0){\r\n\t\t\t\t\tvalue = source.slice(start,p).replace(/&#?\\w+;/g,entityReplacer);\r\n\t\t\t\t\tel.add(attrName,value,start-1);\r\n\t\t\t\t\ts = S_ATTR_END;\r\n\t\t\t\t}else{\r\n\t\t\t\t\t//fatalError: no end quot match\r\n\t\t\t\t\tthrow new Error('attribute value no end \\''+c+'\\' match');\r\n\t\t\t\t}\r\n\t\t\t}else if(s == S_ATTR_NOQUOT_VALUE){\r\n\t\t\t\tvalue = source.slice(start,p).replace(/&#?\\w+;/g,entityReplacer);\r\n\t\t\t\t//console.log(attrName,value,start,p)\r\n\t\t\t\tel.add(attrName,value,start);\r\n\t\t\t\t//console.dir(el)\r\n\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed start quot('+c+')!!');\r\n\t\t\t\tstart = p+1;\r\n\t\t\t\ts = S_ATTR_END\r\n\t\t\t}else{\r\n\t\t\t\t//fatalError: no equal before\r\n\t\t\t\tthrow new Error('attribute value must after \"=\"');\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase '/':\r\n\t\t\tswitch(s){\r\n\t\t\tcase S_TAG:\r\n\t\t\t\tel.setTagName(source.slice(start,p));\r\n\t\t\tcase S_ATTR_END:\r\n\t\t\tcase S_TAG_SPACE:\r\n\t\t\tcase S_TAG_CLOSE:\r\n\t\t\t\ts =S_TAG_CLOSE;\r\n\t\t\t\tel.closed = true;\r\n\t\t\tcase S_ATTR_NOQUOT_VALUE:\r\n\t\t\tcase S_ATTR:\r\n\t\t\tcase S_ATTR_SPACE:\r\n\t\t\t\tbreak;\r\n\t\t\t//case S_EQ:\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(\"attribute invalid close char('/')\")\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase ''://end document\r\n\t\t\t//throw new Error('unexpected end of input')\r\n\t\t\terrorHandler.error('unexpected end of input');\r\n\t\t\tif(s == S_TAG){\r\n\t\t\t\tel.setTagName(source.slice(start,p));\r\n\t\t\t}\r\n\t\t\treturn p;\r\n\t\tcase '>':\r\n\t\t\tswitch(s){\r\n\t\t\tcase S_TAG:\r\n\t\t\t\tel.setTagName(source.slice(start,p));\r\n\t\t\tcase S_ATTR_END:\r\n\t\t\tcase S_TAG_SPACE:\r\n\t\t\tcase S_TAG_CLOSE:\r\n\t\t\t\tbreak;//normal\r\n\t\t\tcase S_ATTR_NOQUOT_VALUE://Compatible state\r\n\t\t\tcase S_ATTR:\r\n\t\t\t\tvalue = source.slice(start,p);\r\n\t\t\t\tif(value.slice(-1) === '/'){\r\n\t\t\t\t\tel.closed  = true;\r\n\t\t\t\t\tvalue = value.slice(0,-1)\r\n\t\t\t\t}\r\n\t\t\tcase S_ATTR_SPACE:\r\n\t\t\t\tif(s === S_ATTR_SPACE){\r\n\t\t\t\t\tvalue = attrName;\r\n\t\t\t\t}\r\n\t\t\t\tif(s == S_ATTR_NOQUOT_VALUE){\r\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!!');\r\n\t\t\t\t\tel.add(attrName,value.replace(/&#?\\w+;/g,entityReplacer),start)\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(currentNSMap[''] !== 'http://www.w3.org/1999/xhtml' || !value.match(/^(?:disabled|checked|selected)$/i)){\r\n\t\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed value!! \"'+value+'\" instead!!')\r\n\t\t\t\t\t}\r\n\t\t\t\t\tel.add(value,value,start)\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase S_EQ:\r\n\t\t\t\tthrow new Error('attribute value missed!!');\r\n\t\t\t}\r\n//\t\t\tconsole.log(tagName,tagNamePattern,tagNamePattern.test(tagName))\r\n\t\t\treturn p;\r\n\t\t/*xml space '\\x20' | #x9 | #xD | #xA; */\r\n\t\tcase '\\u0080':\r\n\t\t\tc = ' ';\r\n\t\tdefault:\r\n\t\t\tif(c<= ' '){//space\r\n\t\t\t\tswitch(s){\r\n\t\t\t\tcase S_TAG:\r\n\t\t\t\t\tel.setTagName(source.slice(start,p));//tagName\r\n\t\t\t\t\ts = S_TAG_SPACE;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase S_ATTR:\r\n\t\t\t\t\tattrName = source.slice(start,p)\r\n\t\t\t\t\ts = S_ATTR_SPACE;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase S_ATTR_NOQUOT_VALUE:\r\n\t\t\t\t\tvar value = source.slice(start,p).replace(/&#?\\w+;/g,entityReplacer);\r\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!!');\r\n\t\t\t\t\tel.add(attrName,value,start)\r\n\t\t\t\tcase S_ATTR_END:\r\n\t\t\t\t\ts = S_TAG_SPACE;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t//case S_TAG_SPACE:\r\n\t\t\t\t//case S_EQ:\r\n\t\t\t\t//case S_ATTR_SPACE:\r\n\t\t\t\t//\tvoid();break;\r\n\t\t\t\t//case S_TAG_CLOSE:\r\n\t\t\t\t\t//ignore warning\r\n\t\t\t\t}\r\n\t\t\t}else{//not space\r\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\r\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\r\n\t\t\t\tswitch(s){\r\n\t\t\t\t//case S_TAG:void();break;\r\n\t\t\t\t//case S_ATTR:void();break;\r\n\t\t\t\t//case S_ATTR_NOQUOT_VALUE:void();break;\r\n\t\t\t\tcase S_ATTR_SPACE:\r\n\t\t\t\t\tvar tagName =  el.tagName;\r\n\t\t\t\t\tif(currentNSMap[''] !== 'http://www.w3.org/1999/xhtml' || !attrName.match(/^(?:disabled|checked|selected)$/i)){\r\n\t\t\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed value!! \"'+attrName+'\" instead2!!')\r\n\t\t\t\t\t}\r\n\t\t\t\t\tel.add(attrName,attrName,start);\r\n\t\t\t\t\tstart = p;\r\n\t\t\t\t\ts = S_ATTR;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase S_ATTR_END:\r\n\t\t\t\t\terrorHandler.warning('attribute space is required\"'+attrName+'\"!!')\r\n\t\t\t\tcase S_TAG_SPACE:\r\n\t\t\t\t\ts = S_ATTR;\r\n\t\t\t\t\tstart = p;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase S_EQ:\r\n\t\t\t\t\ts = S_ATTR_NOQUOT_VALUE;\r\n\t\t\t\t\tstart = p;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase S_TAG_CLOSE:\r\n\t\t\t\t\tthrow new Error(\"elements closed character '/' and '>' must be connected to\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}//end outer switch\r\n\t\t//console.log('p++',p)\r\n\t\tp++;\r\n\t}\r\n}\r\n/**\r\n * @return true if has new namespace define\r\n */\r\nfunction appendElement(el,domBuilder,currentNSMap){\r\n\tvar tagName = el.tagName;\r\n\tvar localNSMap = null;\r\n\t//var currentNSMap = parseStack[parseStack.length-1].currentNSMap;\r\n\tvar i = el.length;\r\n\twhile(i--){\r\n\t\tvar a = el[i];\r\n\t\tvar qName = a.qName;\r\n\t\tvar value = a.value;\r\n\t\tvar nsp = qName.indexOf(':');\r\n\t\tif(nsp>0){\r\n\t\t\tvar prefix = a.prefix = qName.slice(0,nsp);\r\n\t\t\tvar localName = qName.slice(nsp+1);\r\n\t\t\tvar nsPrefix = prefix === 'xmlns' && localName\r\n\t\t}else{\r\n\t\t\tlocalName = qName;\r\n\t\t\tprefix = null\r\n\t\t\tnsPrefix = qName === 'xmlns' && ''\r\n\t\t}\r\n\t\t//can not set prefix,because prefix !== ''\r\n\t\ta.localName = localName ;\r\n\t\t//prefix == null for no ns prefix attribute \r\n\t\tif(nsPrefix !== false){//hack!!\r\n\t\t\tif(localNSMap == null){\r\n\t\t\t\tlocalNSMap = {}\r\n\t\t\t\t//console.log(currentNSMap,0)\r\n\t\t\t\t_copy(currentNSMap,currentNSMap={})\r\n\t\t\t\t//console.log(currentNSMap,1)\r\n\t\t\t}\r\n\t\t\tcurrentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;\r\n\t\t\ta.uri = 'http://www.w3.org/2000/xmlns/'\r\n\t\t\tdomBuilder.startPrefixMapping(nsPrefix, value) \r\n\t\t}\r\n\t}\r\n\tvar i = el.length;\r\n\twhile(i--){\r\n\t\ta = el[i];\r\n\t\tvar prefix = a.prefix;\r\n\t\tif(prefix){//no prefix attribute has no namespace\r\n\t\t\tif(prefix === 'xml'){\r\n\t\t\t\ta.uri = 'http://www.w3.org/XML/1998/namespace';\r\n\t\t\t}if(prefix !== 'xmlns'){\r\n\t\t\t\ta.uri = currentNSMap[prefix || '']\r\n\t\t\t\t\r\n\t\t\t\t//{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tvar nsp = tagName.indexOf(':');\r\n\tif(nsp>0){\r\n\t\tprefix = el.prefix = tagName.slice(0,nsp);\r\n\t\tlocalName = el.localName = tagName.slice(nsp+1);\r\n\t}else{\r\n\t\tprefix = null;//important!!\r\n\t\tlocalName = el.localName = tagName;\r\n\t}\r\n\t//no prefix element has default namespace\r\n\tvar ns = el.uri = currentNSMap[prefix || ''];\r\n\tdomBuilder.startElement(ns,localName,tagName,el);\r\n\t//endPrefixMapping and startPrefixMapping have not any help for dom builder\r\n\t//localNSMap = null\r\n\tif(el.closed){\r\n\t\tdomBuilder.endElement(ns,localName,tagName);\r\n\t\tif(localNSMap){\r\n\t\t\tfor(prefix in localNSMap){\r\n\t\t\t\tdomBuilder.endPrefixMapping(prefix) \r\n\t\t\t}\r\n\t\t}\r\n\t}else{\r\n\t\tel.currentNSMap = currentNSMap;\r\n\t\tel.localNSMap = localNSMap;\r\n\t\t//parseStack.push(el);\r\n\t\treturn true;\r\n\t}\r\n}\r\nfunction parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){\r\n\tif(/^(?:script|textarea)$/i.test(tagName)){\r\n\t\tvar elEndStart =  source.indexOf('</'+tagName+'>',elStartEnd);\r\n\t\tvar text = source.substring(elStartEnd+1,elEndStart);\r\n\t\tif(/[&<]/.test(text)){\r\n\t\t\tif(/^script$/i.test(tagName)){\r\n\t\t\t\t//if(!/\\]\\]>/.test(text)){\r\n\t\t\t\t\t//lexHandler.startCDATA();\r\n\t\t\t\t\tdomBuilder.characters(text,0,text.length);\r\n\t\t\t\t\t//lexHandler.endCDATA();\r\n\t\t\t\t\treturn elEndStart;\r\n\t\t\t\t//}\r\n\t\t\t}//}else{//text area\r\n\t\t\t\ttext = text.replace(/&#?\\w+;/g,entityReplacer);\r\n\t\t\t\tdomBuilder.characters(text,0,text.length);\r\n\t\t\t\treturn elEndStart;\r\n\t\t\t//}\r\n\t\t\t\r\n\t\t}\r\n\t}\r\n\treturn elStartEnd+1;\r\n}\r\nfunction fixSelfClosed(source,elStartEnd,tagName,closeMap){\r\n\t//if(tagName in closeMap){\r\n\tvar pos = closeMap[tagName];\r\n\tif(pos == null){\r\n\t\t//console.log(tagName)\r\n\t\tpos =  source.lastIndexOf('</'+tagName+'>')\r\n\t\tif(pos<elStartEnd){//忘记闭合\r\n\t\t\tpos = source.lastIndexOf('</'+tagName)\r\n\t\t}\r\n\t\tcloseMap[tagName] =pos\r\n\t}\r\n\treturn pos<elStartEnd;\r\n\t//} \r\n}\r\nfunction _copy(source,target){\r\n\tfor(var n in source){target[n] = source[n]}\r\n}\r\nfunction parseDCC(source,start,domBuilder,errorHandler){//sure start with '<!'\r\n\tvar next= source.charAt(start+2)\r\n\tswitch(next){\r\n\tcase '-':\r\n\t\tif(source.charAt(start + 3) === '-'){\r\n\t\t\tvar end = source.indexOf('-->',start+4);\r\n\t\t\t//append comment source.substring(4,end)//<!--\r\n\t\t\tif(end>start){\r\n\t\t\t\tdomBuilder.comment(source,start+4,end-start-4);\r\n\t\t\t\treturn end+3;\r\n\t\t\t}else{\r\n\t\t\t\terrorHandler.error(\"Unclosed comment\");\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\t//error\r\n\t\t\treturn -1;\r\n\t\t}\r\n\tdefault:\r\n\t\tif(source.substr(start+3,6) == 'CDATA['){\r\n\t\t\tvar end = source.indexOf(']]>',start+9);\r\n\t\t\tdomBuilder.startCDATA();\r\n\t\t\tdomBuilder.characters(source,start+9,end-start-9);\r\n\t\t\tdomBuilder.endCDATA() \r\n\t\t\treturn end+3;\r\n\t\t}\r\n\t\t//<!DOCTYPE\r\n\t\t//startDTD(java.lang.String name, java.lang.String publicId, java.lang.String systemId) \r\n\t\tvar matchs = split(source,start);\r\n\t\tvar len = matchs.length;\r\n\t\tif(len>1 && /!doctype/i.test(matchs[0][0])){\r\n\t\t\tvar name = matchs[1][0];\r\n\t\t\tvar pubid = len>3 && /^public$/i.test(matchs[2][0]) && matchs[3][0]\r\n\t\t\tvar sysid = len>4 && matchs[4][0];\r\n\t\t\tvar lastMatch = matchs[len-1]\r\n\t\t\tdomBuilder.startDTD(name,pubid && pubid.replace(/^(['\"])(.*?)\\1$/,'$2'),\r\n\t\t\t\t\tsysid && sysid.replace(/^(['\"])(.*?)\\1$/,'$2'));\r\n\t\t\tdomBuilder.endDTD();\r\n\t\t\t\r\n\t\t\treturn lastMatch.index+lastMatch[0].length\r\n\t\t}\r\n\t}\r\n\treturn -1;\r\n}\r\n\r\n\r\n\r\nfunction parseInstruction(source,start,domBuilder){\r\n\tvar end = source.indexOf('?>',start);\r\n\tif(end){\r\n\t\tvar match = source.substring(start,end).match(/^<\\?(\\S*)\\s*([\\s\\S]*?)\\s*$/);\r\n\t\tif(match){\r\n\t\t\tvar len = match[0].length;\r\n\t\t\tdomBuilder.processingInstruction(match[1], match[2]) ;\r\n\t\t\treturn end+2;\r\n\t\t}else{//error\r\n\t\t\treturn -1;\r\n\t\t}\r\n\t}\r\n\treturn -1;\r\n}\r\n\r\n/**\r\n * @param source\r\n */\r\nfunction ElementAttributes(source){\r\n\t\r\n}\r\nElementAttributes.prototype = {\r\n\tsetTagName:function(tagName){\r\n\t\tif(!tagNamePattern.test(tagName)){\r\n\t\t\tthrow new Error('invalid tagName:'+tagName)\r\n\t\t}\r\n\t\tthis.tagName = tagName\r\n\t},\r\n\tadd:function(qName,value,offset){\r\n\t\tif(!tagNamePattern.test(qName)){\r\n\t\t\tthrow new Error('invalid attribute:'+qName)\r\n\t\t}\r\n\t\tthis[this.length++] = {qName:qName,value:value,offset:offset}\r\n\t},\r\n\tlength:0,\r\n\tgetLocalName:function(i){return this[i].localName},\r\n\tgetLocator:function(i){return this[i].locator},\r\n\tgetQName:function(i){return this[i].qName},\r\n\tgetURI:function(i){return this[i].uri},\r\n\tgetValue:function(i){return this[i].value}\r\n//\t,getIndex:function(uri, localName)){\r\n//\t\tif(localName){\r\n//\t\t\t\r\n//\t\t}else{\r\n//\t\t\tvar qName = uri\r\n//\t\t}\r\n//\t},\r\n//\tgetValue:function(){return this.getValue(this.getIndex.apply(this,arguments))},\r\n//\tgetType:function(uri,localName){}\r\n//\tgetType:function(i){},\r\n}\r\n\r\n\r\n\r\n\r\nfunction _set_proto_(thiz,parent){\r\n\tthiz.__proto__ = parent;\r\n\treturn thiz;\r\n}\r\nif(!(_set_proto_({},_set_proto_.prototype) instanceof _set_proto_)){\r\n\t_set_proto_ = function(thiz,parent){\r\n\t\tfunction p(){};\r\n\t\tp.prototype = parent;\r\n\t\tp = new p();\r\n\t\tfor(parent in thiz){\r\n\t\t\tp[parent] = thiz[parent];\r\n\t\t}\r\n\t\treturn p;\r\n\t}\r\n}\r\n\r\nfunction split(source,start){\r\n\tvar match;\r\n\tvar buf = [];\r\n\tvar reg = /'[^']+'|\"[^\"]+\"|[^\\s<>\\/=]+=?|(\\/?\\s*>|<)/g;\r\n\treg.lastIndex = start;\r\n\treg.exec(source);//skip <\r\n\twhile(match = reg.exec(source)){\r\n\t\tbuf.push(match);\r\n\t\tif(match[1])return buf;\r\n\t}\r\n}\r\n\r\nexports.XMLReader = XMLReader;\r\n\r\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2024 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n/* global __non_webpack_require__ */\n\n// If it's a built version of the panel (don't do this for dev builds, since we might be npm linking)\nif (process.env.INCLUDE_DESKTOP && !process.env.INCLUDE_DEV) {\n    // By default, node in CEP will search for a module starting at the current node_modules folder - if not found,\n    // it'll work backwards up the directory tree, looking for any parent node_modules folder, all the way\n    // to the root of the file system. Some libraries have optional dependencies, so they have a try-catch\n    // around require - but this means that if somebody places a JS file further up the filesystem (e.g.\n    // under /node_modules/xxx) then the process can be tricked into calling and executing this code.\n    // We can fix this by overriding the node module paths to exclude any that are above the top-level directory.\n    try {\n        const requireFn = window.nodeRequire || __non_webpack_require__;\n        const Module = requireFn('module').Module;\n        const resolveLookupPaths = Module._resolveLookupPaths.bind(Module);\n        Module._resolveLookupPaths = (request, parent) => {\n            const actualParentPaths = parent.paths;\n            parent.paths = [];\n            if (actualParentPaths?.length > 0) {\n                parent.paths.push(actualParentPaths[0]);\n            }\n            const paths = resolveLookupPaths(request, parent);\n            parent.paths = actualParentPaths;\n            return paths;\n        };\n    } catch (e) {\n        // eslint-disable-next-line no-console\n        console.log('Error applying module path restriction:', e);\n    }\n\n}\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2020 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\nif (window.ccLibrariesPublicPath && process.env.NODE_ENV === 'production') {\n    // eslint-disable-next-line\n    __webpack_public_path__ = window.ccLibrariesPublicPath;\n}\n","export default {\n      id: \"AH404Error-usage\",\n      viewBox: \"18.37 17 134.63 87\",\n      url: __webpack_public_path__ + \"resources/icons.svg#AH404Error\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"AHEmptyLibrary-usage\",\n      viewBox: \"0 0 310 215\",\n      url: __webpack_public_path__ + \"resources/icons.svg#AHEmptyLibrary\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"ActivateFonts-usage\",\n      viewBox: \"0 0 26 26\",\n      url: __webpack_public_path__ + \"resources/icons.svg#ActivateFonts\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"ActivateFontsSpinner-usage\",\n      viewBox: \"0 0 26 26\",\n      url: __webpack_public_path__ + \"resources/icons.svg#ActivateFontsSpinner\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Add-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Add\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Add12-usage\",\n      viewBox: \"0 0 12 12\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Add12\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Add14-usage\",\n      viewBox: \"0 0 14 14\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Add14\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"AddAnimation-usage\",\n      viewBox: \"0 0 32 32\",\n      url: __webpack_public_path__ + \"resources/icons.svg#AddAnimation\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"AddBrush-usage\",\n      viewBox: \"-0.5 0.5 42 42\",\n      url: __webpack_public_path__ + \"resources/icons.svg#AddBrush\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"AddCCLibrary-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#AddCCLibrary\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"AddCharacterStyle-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#AddCharacterStyle\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"AddCircle-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#AddCircle\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"AddCircleOutline-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#AddCircleOutline\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"AddComponent-usage\",\n      viewBox: \"0 0 20 20\",\n      url: __webpack_public_path__ + \"resources/icons.svg#AddComponent\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"AddCopy-usage\",\n      viewBox: \"0 0 37 37\",\n      url: __webpack_public_path__ + \"resources/icons.svg#AddCopy\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"AddDropdown-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#AddDropdown\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"AddGroup-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#AddGroup\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"AddImage-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#AddImage\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"AddLayerStyle-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#AddLayerStyle\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"AddLink-usage\",\n      viewBox: \"0 0 96 37\",\n      url: __webpack_public_path__ + \"resources/icons.svg#AddLink\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"AddLook-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#AddLook\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"AddModel-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#AddModel\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"AddParagraphStyle-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#AddParagraphStyle\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"AddStock-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#AddStock\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"AddText-usage\",\n      viewBox: \"0 0 42 42\",\n      url: __webpack_public_path__ + \"resources/icons.svg#AddText\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"AdobeFonts-usage\",\n      viewBox: \"0 0 36 36\",\n      url: __webpack_public_path__ + \"resources/icons.svg#AdobeFonts\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Alert-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Alert\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"AlertOutline-usage\",\n      viewBox: \"0 0 20 20\",\n      url: __webpack_public_path__ + \"resources/icons.svg#AlertOutline\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"AllFilterIcon-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#AllFilterIcon\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"ArrowDown-usage\",\n      viewBox: \"0 0 8 10\",\n      url: __webpack_public_path__ + \"resources/icons.svg#ArrowDown\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"ArrowUp-usage\",\n      viewBox: \"0 0 8 10\",\n      url: __webpack_public_path__ + \"resources/icons.svg#ArrowUp\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"AssetBrokenElement-usage\",\n      viewBox: \"0 0 14 14\",\n      url: __webpack_public_path__ + \"resources/icons.svg#AssetBrokenElement\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"AssetBrokenLink-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#AssetBrokenLink\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"AssetLinked-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#AssetLinked\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"AssetRestricted-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#AssetRestricted\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"AssetUpdate-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#AssetUpdate\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"AssetUploading-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#AssetUploading\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Back-usage\",\n      viewBox: \"0 0 42 42\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Back\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"BackArrow-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#BackArrow\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Browse-usage\",\n      viewBox: \"0 0 14 14\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Browse\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"BrowseTeamLibrary-usage\",\n      viewBox: \"0 0 72 72\",\n      url: __webpack_public_path__ + \"resources/icons.svg#BrowseTeamLibrary\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Building-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Building\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"CCLibrary-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#CCLibrary\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"CCLibrary16-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#CCLibrary16\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"CCLibraryLocked-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#CCLibraryLocked\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"CCXCreateBrandPlus-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#CCXCreateBrandPlus\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"CCXCreateColor-usage\",\n      viewBox: \"0 0 32 32\",\n      url: __webpack_public_path__ + \"resources/icons.svg#CCXCreateColor\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"CCXCreateFont-usage\",\n      viewBox: \"0 0 32 32\",\n      url: __webpack_public_path__ + \"resources/icons.svg#CCXCreateFont\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"CCXCreateImage-usage\",\n      viewBox: \"0 0 32 32\",\n      url: __webpack_public_path__ + \"resources/icons.svg#CCXCreateImage\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"CCXCreateLogo-usage\",\n      viewBox: \"0 0 32 32\",\n      url: __webpack_public_path__ + \"resources/icons.svg#CCXCreateLogo\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"CCXCreateTemplate-usage\",\n      viewBox: \"0 0 32 32\",\n      url: __webpack_public_path__ + \"resources/icons.svg#CCXCreateTemplate\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"CCXDiscoverLibraries-usage\",\n      viewBox: \"0 0 350 199.792\",\n      url: __webpack_public_path__ + \"resources/icons.svg#CCXDiscoverLibraries\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"CCXEmptyBrands-usage\",\n      viewBox: \"0 0 350 199.792\",\n      url: __webpack_public_path__ + \"resources/icons.svg#CCXEmptyBrands\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"CCXEmptyLibrary-usage\",\n      viewBox: \"0 0 95.721 130.756\",\n      url: __webpack_public_path__ + \"resources/icons.svg#CCXEmptyLibrary\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"CCXGenericLibraries-usage\",\n      viewBox: \"0 0 95 82\",\n      url: __webpack_public_path__ + \"resources/icons.svg#CCXGenericLibraries\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"CCXLibraryLarge-usage\",\n      viewBox: \"0 0 32 32\",\n      url: __webpack_public_path__ + \"resources/icons.svg#CCXLibraryLarge\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Capture-usage\",\n      viewBox: \"0 0 240 234\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Capture\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"ChangeCloud-usage\",\n      viewBox: \"0 0 20 13\",\n      url: __webpack_public_path__ + \"resources/icons.svg#ChangeCloud\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Checkmark-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Checkmark\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"CheckmarkCircle-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#CheckmarkCircle\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"CheckmarkRounded-usage\",\n      viewBox: \"0 0 12 12\",\n      url: __webpack_public_path__ + \"resources/icons.svg#CheckmarkRounded\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"ChevronDownMedium-usage\",\n      viewBox: \"0 0 10 6\",\n      url: __webpack_public_path__ + \"resources/icons.svg#ChevronDownMedium\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"ChevronDownSmall-usage\",\n      viewBox: \"0 0 8 6\",\n      url: __webpack_public_path__ + \"resources/icons.svg#ChevronDownSmall\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"ChevronLeftMedium-usage\",\n      viewBox: \"0 0 6 10\",\n      url: __webpack_public_path__ + \"resources/icons.svg#ChevronLeftMedium\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"ChevronLeftSmall-usage\",\n      viewBox: \"0 0 6 8\",\n      url: __webpack_public_path__ + \"resources/icons.svg#ChevronLeftSmall\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"ChevronRightMedium-usage\",\n      viewBox: \"0 0 6 10\",\n      url: __webpack_public_path__ + \"resources/icons.svg#ChevronRightMedium\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"ChevronRightSmall-usage\",\n      viewBox: \"0 0 6 8\",\n      url: __webpack_public_path__ + \"resources/icons.svg#ChevronRightSmall\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Clock-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Clock\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Close-usage\",\n      viewBox: \"0 0 20 20\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Close\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Cloud-usage\",\n      viewBox: \"0 0 42 42\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Cloud\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Copy-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Copy\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"CreateATeamLibrary-usage\",\n      viewBox: \"0 0 72 72\",\n      url: __webpack_public_path__ + \"resources/icons.svg#CreateATeamLibrary\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"CreateColor-usage\",\n      viewBox: \"0 0 18 18.002\",\n      url: __webpack_public_path__ + \"resources/icons.svg#CreateColor\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"CreateColortheme-usage\",\n      viewBox: \"0 0 18 18.002\",\n      url: __webpack_public_path__ + \"resources/icons.svg#CreateColortheme\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"CreateFont-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#CreateFont\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"CreateImage-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#CreateImage\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"CreateLogo-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#CreateLogo\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"CreateTemplate-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#CreateTemplate\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"CreativeCloud-usage\",\n      viewBox: \"0 0 96 96\",\n      url: __webpack_public_path__ + \"resources/icons.svg#CreativeCloud\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"CreativeCloudAlert-usage\",\n      viewBox: \"0 0 70 70\",\n      url: __webpack_public_path__ + \"resources/icons.svg#CreativeCloudAlert\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"CreativeCloudError-usage\",\n      viewBox: \"0 0 70 70\",\n      url: __webpack_public_path__ + \"resources/icons.svg#CreativeCloudError\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Date-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Date\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Delete-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Delete\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"DiscoverLibraries-usage\",\n      viewBox: \"0 0 100 100\",\n      url: __webpack_public_path__ + \"resources/icons.svg#DiscoverLibraries\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"DocumentAssets-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#DocumentAssets\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"DownArrow-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#DownArrow\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Duplicate-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Duplicate\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Edit-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Edit\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"EmptyLibrary-usage\",\n      viewBox: \"0 0 250 250\",\n      url: __webpack_public_path__ + \"resources/icons.svg#EmptyLibrary\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"EmptyLibrary1-usage\",\n      viewBox: \"0 0 136 136\",\n      url: __webpack_public_path__ + \"resources/icons.svg#EmptyLibrary1\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"EmptyLibrary2-usage\",\n      viewBox: \"0 0 136 136\",\n      url: __webpack_public_path__ + \"resources/icons.svg#EmptyLibrary2\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"EmptyLibrary3-usage\",\n      viewBox: \"0 0 136 136\",\n      url: __webpack_public_path__ + \"resources/icons.svg#EmptyLibrary3\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Error-usage\",\n      viewBox: \"0 0 32 32\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Error\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Filter-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Filter\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Filter16-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Filter16\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"FilterApplied-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#FilterApplied\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"FilterNotification16-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#FilterNotification16\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"FilterWarning-usage\",\n      viewBox: \"0 0 48.7 50.6\",\n      url: __webpack_public_path__ + \"resources/icons.svg#FilterWarning\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Flag-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Flag\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Folder-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Folder\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"FolderOpen-usage\",\n      viewBox: \"0 0 36 36\",\n      url: __webpack_public_path__ + \"resources/icons.svg#FolderOpen\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Globe-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Globe\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"GlobeSearch-usage\",\n      viewBox: \"0 0 14 14\",\n      url: __webpack_public_path__ + \"resources/icons.svg#GlobeSearch\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"GridView-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#GridView\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Group-usage\",\n      viewBox: \"0 0 42 42\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Group\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"HelpOutline-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#HelpOutline\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"IlluAccessAssetsEverywhere-usage\",\n      viewBox: \"0 0 280 250\",\n      url: __webpack_public_path__ + \"resources/icons.svg#IlluAccessAssetsEverywhere\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Info-usage\",\n      viewBox: \"0 0 32 32\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Info\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"InfoOutline-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#InfoOutline\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Invite-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Invite\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Leave-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Leave\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"LibraryAccess-usage\",\n      viewBox: \"0 0 28 32\",\n      url: __webpack_public_path__ + \"resources/icons.svg#LibraryAccess\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Link-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Link\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"LinkedDocumentLibrary_CanEdit-usage\",\n      viewBox: \"0 0 150 150\",\n      url: __webpack_public_path__ + \"resources/icons.svg#LinkedDocumentLibrary_CanEdit\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"LinkedDocumentLibrary_CanView-usage\",\n      viewBox: \"0 0 150 150\",\n      url: __webpack_public_path__ + \"resources/icons.svg#LinkedDocumentLibrary_CanView\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"LinkedLibrary-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#LinkedLibrary\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"ListView-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#ListView\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Lock-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Lock\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"LockMenu-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#LockMenu\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"LockPopup-usage\",\n      viewBox: \"0 0 36 36\",\n      url: __webpack_public_path__ + \"resources/icons.svg#LockPopup\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Logos-usage\",\n      viewBox: \"0 0 49 49\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Logos\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Magnify-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Magnify\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"MissingFontWarning-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#MissingFontWarning\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"More-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#More\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Move-usage\",\n      viewBox: \"0 0 19 19\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Move\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"NamingOrder-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#NamingOrder\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Next-usage\",\n      viewBox: \"0 0 42 42\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Next\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"NoSearchResults-usage\",\n      viewBox: \"0 0 100 100\",\n      url: __webpack_public_path__ + \"resources/icons.svg#NoSearchResults\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Note-usage\",\n      viewBox: \"0 0 32 32\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Note\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"OnboardingCCLibrary-usage\",\n      viewBox: \"0 0 184 184\",\n      url: __webpack_public_path__ + \"resources/icons.svg#OnboardingCCLibrary\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"OpenIn-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#OpenIn\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Organisations-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Organisations\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"PathView-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#PathView\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"PlaceOnCanvas-usage\",\n      viewBox: \"0 0 26 26\",\n      url: __webpack_public_path__ + \"resources/icons.svg#PlaceOnCanvas\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Plus-usage\",\n      viewBox: \"0 0 42 42\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Plus\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"PlusDrag-usage\",\n      viewBox: \"0 0 32 32\",\n      url: __webpack_public_path__ + \"resources/icons.svg#PlusDrag\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Projects-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Projects\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"PublishRemove-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#PublishRemove\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Question-usage\",\n      viewBox: \"0 0 42 42\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Question\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"ReadOnly-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#ReadOnly\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Rename-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Rename\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"ReuseUpdateAssets-usage\",\n      viewBox: \"0 0 100 100\",\n      url: __webpack_public_path__ + \"resources/icons.svg#ReuseUpdateAssets\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"SX_Buildings-usage\",\n      viewBox: \"0 0 20 20\",\n      url: __webpack_public_path__ + \"resources/icons.svg#SX_Buildings\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"SX_Delete-usage\",\n      viewBox: \"0 0 20 20\",\n      url: __webpack_public_path__ + \"resources/icons.svg#SX_Delete\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"SX_Edit-usage\",\n      viewBox: \"0 0 20 20\",\n      url: __webpack_public_path__ + \"resources/icons.svg#SX_Edit\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"SX_Filter-usage\",\n      viewBox: \"0 0 20 20\",\n      url: __webpack_public_path__ + \"resources/icons.svg#SX_Filter\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"SX_Flag-usage\",\n      viewBox: \"0 0 20 20\",\n      url: __webpack_public_path__ + \"resources/icons.svg#SX_Flag\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"SX_GlobeGrid-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#SX_GlobeGrid\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"SX_Invite-usage\",\n      viewBox: \"0 0 20 20\",\n      url: __webpack_public_path__ + \"resources/icons.svg#SX_Invite\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"SX_Leave-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#SX_Leave\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"SX_PublishRemove-usage\",\n      viewBox: \"0 0 20 20\",\n      url: __webpack_public_path__ + \"resources/icons.svg#SX_PublishRemove\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"SX_Rename-usage\",\n      viewBox: \"0 0 20 20\",\n      url: __webpack_public_path__ + \"resources/icons.svg#SX_Rename\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"SX_Search-usage\",\n      viewBox: \"0 0 20 20\",\n      url: __webpack_public_path__ + \"resources/icons.svg#SX_Search\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"SX_SortOrderDown-usage\",\n      viewBox: \"0 0 20 20\",\n      url: __webpack_public_path__ + \"resources/icons.svg#SX_SortOrderDown\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"SX_SortOrderUp-usage\",\n      viewBox: \"0 0 20 20\",\n      url: __webpack_public_path__ + \"resources/icons.svg#SX_SortOrderUp\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"SX_User-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#SX_User\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"SX_UserGroup-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#SX_UserGroup\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"S_MoveTo_18_N-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#S_MoveTo_18_N\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Settings-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Settings\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"ShareAssets-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#ShareAssets\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Shop-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Shop\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"ShoppingCart-usage\",\n      viewBox: \"0 0 36 36\",\n      url: __webpack_public_path__ + \"resources/icons.svg#ShoppingCart\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"ShowMenu-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#ShowMenu\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Sort-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Sort\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"SortDescending-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#SortDescending\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"StockLicensedBadge-usage\",\n      viewBox: \"0 0 46 40\",\n      url: __webpack_public_path__ + \"resources/icons.svg#StockLicensedBadge\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Subscribed-usage\",\n      viewBox: \"0 0 32 32\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Subscribed\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"SyncAlert-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#SyncAlert\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"SyncDefault-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#SyncDefault\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"SyncError-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#SyncError\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Syncing-usage\",\n      viewBox: \"0 0 16 16\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Syncing\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"SyncingSpinner-usage\",\n      viewBox: \"0 0 26 26\",\n      url: __webpack_public_path__ + \"resources/icons.svg#SyncingSpinner\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"TraditionalLibrary_CanEdit-usage\",\n      viewBox: \"0 0 150 150\",\n      url: __webpack_public_path__ + \"resources/icons.svg#TraditionalLibrary_CanEdit\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"TraditionalLibrary_CanView-usage\",\n      viewBox: \"0 0 150 150\",\n      url: __webpack_public_path__ + \"resources/icons.svg#TraditionalLibrary_CanView\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"TreeView-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#TreeView\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"UploadDocAssets-usage\",\n      viewBox: \"0 0 14 14\",\n      url: __webpack_public_path__ + \"resources/icons.svg#UploadDocAssets\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"UploadImage-usage\",\n      viewBox: \"0 0 32 32\",\n      url: __webpack_public_path__ + \"resources/icons.svg#UploadImage\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"UseAsBrand-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#UseAsBrand\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"UseAsLibrary-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#UseAsLibrary\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"User-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#User\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"UserGroup-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#UserGroup\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"VerifyContentAuthenticity-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#VerifyContentAuthenticity\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"Visibility-usage\",\n      viewBox: \"0 0 18 18\",\n      url: __webpack_public_path__ + \"resources/icons.svg#Visibility\",\n      toString: function () {\n        return this.url;\n      }\n    }","export default {\n      id: \"XDFile-usage\",\n      viewBox: \"0 0 32 32\",\n      url: __webpack_public_path__ + \"resources/icons.svg#XDFile\",\n      toString: function () {\n        return this.url;\n      }\n    }","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { observable } from 'mobx';\nimport Icon from 'app/js/components/Icon';\nimport { translate } from 'app/js/managers/translationManager';\nimport Button from 'app/js/components/Button';\n\n@observer\nexport default class SpectrumPagination extends React.Component {\n\n    static defaultProps = {\n        allowInput: false\n    };\n\n    static propTypes = {\n        totalPages: PropTypes.number.isRequired,\n        onPageChange: PropTypes.func.isRequired,\n        currentPage: PropTypes.number.isRequired,\n        allowInput: PropTypes.bool\n    };\n\n    componentDidUpdate(oldProps) {\n        if (oldProps.currentPage !== this.props.currentPage) {\n            this.changePage(this.props.currentPage);\n        }\n    }\n\n    @observable pageInput = 1;\n\n    onKeyDown = (event) => {\n        const pageInput = parseInt(this.pageInput, 10);\n        switch (event.key) {\n        case 'ArrowUp':\n        case 'Up':\n            this.changePage(pageInput + 1);\n            break;\n        case 'ArrowDown':\n        case 'Down':\n            this.changePage(pageInput - 1);\n            break;\n        case ' ':\n            this.changePage(pageInput);\n            break;\n        }\n    }\n\n    changePage = (newPage) => {\n        if (this.isInvalidPage(newPage)) {\n            return;\n        }\n        this.pageInput = newPage;\n        this.props.onPageChange(newPage);\n    }\n\n    onPageInputBlur = () => {\n        if (this.props.currentPage !== this.pageInput) {\n            this.pageInput = this.props.currentPage;\n        }\n    }\n\n    isInvalidPage(page) {\n        const { totalPages } = this.props;\n        if (isNaN(page)) {\n            return true;\n        }\n        page = parseInt(page, 10);\n        return page < 1 || totalPages && page > totalPages;\n    }\n\n    onNext = () => {\n        this.changePage(this.props.currentPage + 1);\n    }\n\n    onPrevious = () => {\n        this.changePage(this.props.currentPage - 1);\n    }\n\n    onInputChangeEvent = e => {\n        const value = e.target.value;\n        if (value === '' || !this.isInvalidPage(value)) {\n            this.pageInput = value;\n            if (value) {\n                this.changePage(value);\n            }\n        } else {\n            e.target.value = this.pageInput !== '' ? this.props.currentPage : '';\n        }\n    };\n\n    get pageDisplay() {\n        return <div className=\"pagination-controls-number-display\">\n            { this.props.allowInput ? this.inputDisplay : this.noInputDisplay }\n        </div>;\n    }\n\n    get inputDisplay() {\n        return <React.Fragment>\n            <input type=\"text\"\n                data-test-id=\"spectrum-pagination-input\"\n                value={ this.pageInput }\n                onBlur={ this.onPageInputBlur }\n                onKeyDown={ this.onKeyDown }\n                onChange={ this.onInputChangeEvent } />\n            <span data-test-id=\"spectrum-pagination-total\" className=\"spectrum-Body--secondary spectrum-Pagination-counter\">{ translate('DL_INFO_INPUT_PAGINATION_COUNT', { totalPages: this.props.totalPages }) }</span>\n        </React.Fragment>;\n    }\n\n    get noInputDisplay() {\n        return <span data-test-id=\"spectrum-pagination-total\">{ translate('DL_INFO_PAGINATION_COUNT', { currentPage: this.props.currentPage, totalPages: this.props.totalPages }) }</span>;\n    }\n\n    onButtonKeyPress = (event, callback) => {\n        if (event.key === 'Enter') {\n            callback();\n        }\n    }\n\n    render() {\n        return (\n            <div className=\"spectrum-Pagination spectrum-Pagination--explicit pagination-wrapper\" data-test-id=\"spectrum-pagination\">\n                <Button className=\"pagination-controls-arrow\" data-test-id=\"spectrum-pagination-previous\" onClick={ this.onPrevious }>\n                    <Icon id=\"ChevronLeftMedium\" height={ 10 }/>\n                </Button>\n                { this.pageDisplay }\n                <Button className=\"pagination-controls-arrow\" data-test-id=\"spectrum-pagination-next\" onClick={ this.onNext }>\n                    <Icon id=\"ChevronRightMedium\" height={ 10 }/>\n                </Button>\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport SpectrumPagination from 'app/js/components/spectrum/SpectrumPagination';\nimport { translate } from 'app/js/managers/translationManager';\n\nexport default class BaseInfoPanelController extends React.Component {\n\n    static defaultProps = {\n        stopLabel: 'DL_INFO_GRADIENT_STOP',\n    };\n\n    static propTypes = {\n        displayBar: PropTypes.node.isRequired,\n        controllerData: PropTypes.arrayOf(PropTypes.object).isRequired,\n        onChange: PropTypes.func.isRequired,\n        currentStopIndex: PropTypes.number.isRequired,\n        stopLabel: PropTypes.string,\n    };\n\n    get navigationControls() {\n        return <div className=\"info-panel-controller-nav-controls\">\n            <SpectrumPagination currentPage={ this.props.currentStopIndex + 1 } totalPages={ this.props.controllerData.length } onPageChange={ this.props.onChange } />\n        </div>;\n    }\n\n    get navigationRow() {\n        return (\n            <div className=\"details-row details-navigation-row\">\n                <div className=\"details-label details-label-stop-navigation\">{ translate(this.props.stopLabel) }</div>\n                <div className=\"details-value\">{ this.navigationControls }</div>\n            </div>\n        );\n    }\n\n    get details() {\n        const stopDetails = this.props.controllerData[this.props.currentStopIndex].data.map(detail => {\n            const testId = `info-panel-controller-detail-${detail.label.toLowerCase().replace(/[^0-9a-z]/ig, '-')}`;\n            return <div className=\"details-row\" key={ testId } data-test-id={ testId }>\n                <div className=\"details-label\">{ detail.label }</div>\n                <div className=\"details-value\">{ detail.value }</div>\n            </div>;\n        });\n        return <div className=\"info-panel-controller-details\">\n            <div className=\"details-row details-navigation-row-container\">{ this.navigationRow }</div>\n            { stopDetails }\n        </div>;\n    }\n\n    render() {\n        // In rare instances, a corrupt element could have no controller data\n        if (!this.props.controllerData.length) {\n            return null;\n        }\n        return <div className=\"info-panel-controller-wrapper\" data-test-id=\"info-panel-controller\">\n            { this.props.displayBar }\n            { this.details }\n        </div>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observable } from 'mobx';\nimport { observer } from 'mobx-react';\n// Filters-out any non-DOM props.\n// Useful when making lower-level components that should be allowed to receive and forward generic DOM props without risking passing invalid ones.\nimport filterDOMProps from '@torq-native/react-spectrum/utils/filterDOMProps';\nimport Tooltip from './Tooltip';\nimport classNames from 'classnames';\nimport environment from 'app/js/environment';\nimport { default as SpectrumButton } from '@ccx-public/spectrum-wrapper/Button';\n\n@observer\nexport default class Button extends React.Component {\n    static defaultProps = {\n        selected: false,\n        disabled: false,\n        onMouseDown: () => {},\n        onDrop: () => {},\n    };\n\n    static propTypes = {\n        onClick: PropTypes.func,\n        onDrop: PropTypes.func,\n        onMouseDown: PropTypes.func,\n        className: PropTypes.string,\n        children: PropTypes.node,\n        tooltip: PropTypes.string,\n        selected: PropTypes.bool,\n        disabled: PropTypes.bool,\n        variant: PropTypes.oneOf([ 'cta', 'primary', 'secondary', 'warning', 'action', 'accent' ]),\n        'data-test-id': PropTypes.string,\n        featureId: PropTypes.string,\n        quiet: PropTypes.bool\n    };\n\n    @observable active = false;\n\n    onClick = (e) => {\n        if (this.props.onClick && !this.props.disabled) {\n            this.props.onClick(e);\n        }\n    }\n\n    onDrop = () => {\n        !this.props.disabled && this.props.onDrop();\n    }\n\n    onMouseDown = (e) => {\n        !this.props.disabled && this.props.onMouseDown(e);\n    }\n\n    onActive = () => this.active = true;\n    onInactive = () => this.active = false;\n\n    get classes() {\n        // We won't give default styles to UXP styled buttons because they don't need them.\n        // But we should respect extra classes passed by <Button> clients.\n        if (environment.hasNativeControlStyles && this.props.variant) { return this.props.className; }\n\n        return classNames(this.props.className, 'base-button', {\n            'div-image-button': !environment.supportsImagesInButtons,\n            disabled: this.props.disabled,\n            selected: this.props.selected,\n            active: this.active\n        });\n    }\n\n    get buttonView() {\n        const { variant, children, disabled, selected, quiet, ...otherProps } = this.props;\n        if (!environment.supportsImagesInButtons && !variant) { // check if UXP environment and using an image button\n            return this.divView;\n        }\n        const fallback = <button {...filterDOMProps(otherProps)} tabIndex=\"0\" data-test-id={ this.props['data-test-id'] || 'button' } className={ this.classes } onClick={ this.onClick } onDrop={ this.onDrop } onMouseDown={ this.onMouseDown } disabled={ disabled }>\n            { children }\n        </button>;\n\n        const buttonProps = { ...filterDOMProps(otherProps), quiet, variant, tabIndex:'0', 'data-test-id': this.props['data-test-id'] || 'button',\n            onClick: this.onClick, onDrop: this.onDrop, onMouseDown: this.onMouseDown, selected: selected || null, disabled: disabled || null, className: this.classes };\n\n        if (variant && variant !== 'action') {\n            return <SpectrumButton fallback={fallback} {...buttonProps}>{children}</SpectrumButton>;\n        } else {\n            delete buttonProps.variant;\n            return <SpectrumButton variant=\"action\" fallback={fallback} {...buttonProps} >{children}</SpectrumButton>;\n        }\n    }\n\n    // UXP doesn't support images inside buttons, so we need an option to simulate\n    // buttons with a div. In this case we also need to simulate the active state.\n    get divView() {\n        const { children, ...otherProps } = this.props;\n\n        // Note: Ok to use onMouseLeave here since this is only used inside UXP (not inside a web component).\n        return (\n            <div {...filterDOMProps(otherProps)} data-test-id={ this.props['data-test-id'] || 'button' } tabIndex=\"0\" className={ classNames('uxp-imgButton', this.classes) }\n                onClick={ this.onClick } onDrop={ this.onDrop }\n                onMouseDown={ (e) => {this.onActive(); this.onMouseDown(e);} } onMouseUp={ this.onInactive } onMouseLeave={ this.onInactive }>\n                { children }\n            </div>\n        );\n    }\n\n    render() {\n        if (this.props.tooltip) {\n            return <Tooltip placement=\"top-start\" content={this.props.tooltip} featureId={this.props.featureId}>{ this.buttonView }</Tooltip>;\n        }\n        return this.buttonView;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\nimport React from 'react';\nimport type { ButtonGroup as ButtonGroupType } from '@ccx-public/spectrum-web-component-fallbacks/dist/button-group';\nimport type { ReactProps } from './utils';\nimport { filterBooleanProps, isUXP, useComponent } from './utils';\nimport createWrapper from './utils/createWrapper';\nimport { SWCLoader } from './utils/SWCLoader';\nimport interopRequireDefault from './utils/interopRequireDefault';\nimport { forwardRef, useEffect, useRef } from 'react';\nimport type {\n    ActionGroup,\n    ActionGroup as ActionGroupType,\n} from '@ccx-public/spectrum-web-component-fallbacks/dist/action-group';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2ButtonGroup: React.ComponentType<\n    ReactProps<ButtonGroupType, ButtonGroupRS2CompatProps>\n> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/ButtonGroup')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet buttonGroupLoader;\nlet actionGroupLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n    buttonGroupLoader = new SWCLoader(['sp-button-group'], async () => {\n        const { ButtonGroup } = await import(\n            /* webpackChunkName: \"SpButtonGroup\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/button-group'\n        );\n        return [ButtonGroup];\n    });\n\n    actionGroupLoader = new SWCLoader(['sp-action-group'], async () => {\n        const { ActionGroup } = await import(\n            /* webpackChunkName: \"SpActionGroup\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/action-group'\n        );\n        return [ActionGroup];\n    });\n}\n\ntype ButtonGroupRS2CompatProps = {\n    /**\n     * Renders the button group as a row or a column\n     */\n    orientation: 'horizontal' | 'vertical' | 'both';\n    multiple?: boolean;\n    /**\n     * Callback function to be called on change\n     */\n    onChange?: (event: string[]) => void;\n    /**\n     * Selected Value\n     */\n    value?: string | string[];\n};\n\n// https://git.corp.adobe.com/torq/react-spectrum/blob/develop/src/ButtonGroup/js/ButtonGroup.js\n// https://opensource.adobe.com/spectrum-web-components/components/button-group/\nconst NormalButtonGroup = createWrapper<\n    ButtonGroupType,\n    ButtonGroupRS2CompatProps\n>({\n    displayName: 'ButtonGroup',\n    fallback: RS2ButtonGroup,\n    swcLoader: buttonGroupLoader,\n    swcProps: (props) => {\n        // Important Differences:\n        // ReactSpectrum2        | SpectrumWebComponent     | UXPWebComponent\n        // -----------------------------------------------------------------\n        // orientation:          | vertical: boolean        | variant:\n        //     'vertical' |      |                          |   'vertical'\n        //     'horizontal       |                          |   'horizontal\n        const { className, orientation, ...rest } = props;\n        const vertical = orientation === 'vertical' || undefined;\n        const compatabilityProps = isUXP\n            ? // https://developers.corp.adobe.com/uxp/docs/apis/spectrum_uxp/spectrum_uxp_user_interface.md#sp-action-button\n              // UXP has a special 'align' property, we will just set the default\n              // to be 'center', which is standard in RS2 and SWC\n              { variant: orientation, align: 'center' }\n            : { vertical };\n        return { ...rest, ...compatabilityProps, class: className };\n    },\n    tagName: 'sp-button-group',\n});\n\nconst ActionButtonGroup = createWrapper<\n    ActionGroupType,\n    ButtonGroupRS2CompatProps\n>({\n    displayName: 'ActionGroup',\n    fallback: RS2ButtonGroup,\n    swcLoader: actionGroupLoader,\n    SWCWrapper: function SpActionGroup(props) {\n        const actionGroupContainer = useRef<ActionGroupType>(null);\n        const { className, value, multiple, orientation, onChange, ...rest } =\n            props;\n\n        const vertical = orientation === 'vertical' || undefined;\n        const selects = multiple ? 'multiple' : 'single';\n        const selectedValues = selects === 'multiple' ? value : [value].flat();\n\n        const compatabilityProps = isUXP\n            ? // https://developers.corp.adobe.com/uxp/docs/apis/spectrum_uxp/spectrum_uxp_user_interface.md#sp-action-button\n              // UXP has a special 'align' property, we will just set the default\n              // to be 'center', which is standard in RS2 and SWC\n              { variant: orientation, align: 'center' }\n            : {\n                  vertical,\n                  selected: JSON.stringify(selectedValues),\n                  ...(selects && { selects }),\n              };\n\n        useEffect(() => {\n            const current = actionGroupContainer.current;\n\n            const handleOnChange = (event: Event) => {\n                const target = event.target as ActionGroup;\n                onChange?.(target.selected);\n            };\n\n            if (current && onChange) {\n                current.addEventListener('change', handleOnChange);\n            }\n\n            return () => {\n                if (current && onChange) {\n                    current.removeEventListener('change', handleOnChange);\n                }\n            };\n        }, [onChange, value]);\n\n        const ActionGroup = useComponent('sp-action-group');\n\n        return (\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            <ActionGroup\n                ref={actionGroupContainer}\n                {...rest}\n                {...compatabilityProps}\n                {...filterBooleanProps({\n                    vertical,\n                })}\n                class={className}\n            />\n        );\n    },\n    tagName: 'sp-action-group',\n});\n\nexport default forwardRef(function ButtonGroup(\n    props: ReactProps<ButtonGroupType, ButtonGroupRS2CompatProps>,\n    ref\n) {\n    if (props.onChange) {\n        return <ActionButtonGroup {...props} ref={ref} />;\n    }\n    return <NormalButtonGroup {...props} ref={ref} />;\n});\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2022 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport SpectrumButtonGroup from '@ccx-public/spectrum-wrapper/ButtonGroup';\n\nexport default class ButtonGroup extends React.Component {\n\n    static defaultProps = {\n        orientation: 'horizontal',\n    }\n\n    static propTypes = {\n        orientation: PropTypes.oneOf([ 'horizontal', 'vertical' ]),\n        preferSpectrumFallback: PropTypes.bool,\n        className: PropTypes.string,\n        children: PropTypes.node,\n    }\n\n    render() {\n        const fallback = !this.props.preferSpectrumFallback ? <React.Fragment>{this.props.children}</React.Fragment> : undefined;\n        return <SpectrumButtonGroup data-test-id=\"button-group\" className={this.props.className} fallback={fallback} orientation={this.props.orientation}>{this.props.children}</SpectrumButtonGroup>;\n    }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"contextMenuButton\":\"w2B\",\"icon\":\"AK4\"};","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport Icon from 'app/js/components/Icon';\nimport Button from 'app/js/components/Button';\n\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport styles from './index.scss';\nimport { observer } from 'mobx-react';\nimport OverlayState from 'app/js/components/utils/OverlayState';\n\n@observer\nexport default class ContextMenuButton extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static defaultProps = {\n        quiet: false,\n        icon: 'More'\n    };\n\n    static propTypes = {\n        onContextMenuClick: PropTypes.func.isRequired,\n        quiet: PropTypes.bool,\n        icon: PropTypes.string,\n        dataTestId: PropTypes.string\n    };\n\n    overlayState = new OverlayState({\n        ignoreScrollEvents: true,\n        ignoreFocus: true\n    });\n\n    handleClick = (event) => {\n        event.stopPropagation();\n        this.overlayState.toggleOverlay();\n        const buttonPos = this.customLabelRef.getBoundingClientRect();\n\n        this.context.viewState.setContextMenuPositionState({\n            x: buttonPos.left,\n            y: buttonPos.bottom\n        });\n        this.props.onContextMenuClick(event);\n    }\n\n    setCustomLabelRef = (ref) => { this.customLabelRef = ref; };\n    render() {\n        return (\n            <div ref={ this.setCustomLabelRef }>\n                <Button variant=\"action\"\n                    className={styles.contextMenuButton}\n                    quiet={this.props.quiet}\n                    selected={this.overlayState.isOpen}\n                    data-test-id=\"context-menu-button\"\n                    onClick={this.handleClick}\n                    onKeyDown={(event) => (event.key === 'Enter') ? this.handleClick(event) : null}\n                >\n                    <Icon id={ this.props.icon } className={styles.icon} height={18} />\n                </Button>\n            </div>\n        );\n    }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"createItemCardContainer\":\"PwA\",\"createItemCard\":\"I5d\",\"fullWidthContainer\":\"bJL\",\"fullWidthContent\":\"xKd\",\"title\":\"jVH\",\"subtitle\":\"bik\",\"smallIcon\":\"cpZ\",\"createItemCardGraphic\":\"u4n\",\"createItemCardIcon\":\"Ijd\",\"addIconContainer\":\"Frh\",\"createItemCardSparkles\":\"ba6\",\"createItemCardDisabled\":\"xFe\",\"simpleAddIcon\":\"Y4X\",\"addIcon\":\"OS4\",\"mobileButtonText\":\"d8y\"};","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport Icon from 'app/js/components/Icon';\nimport Button from 'app/js/components/Button';\nimport classNames from 'classnames';\nimport styles from './index.scss';\nimport Tooltip from 'app/js/components/Tooltip';\nimport { translate } from 'app/js/managers/translationManager';\nimport HTMLText from 'app/js/components/HTMLText';\nimport environment from 'app/js/environment';\n\nexport default class CreateItemCard extends React.Component {\n\n    static defaultProps = {\n        disabled: false,\n        fullWidth: false\n    };\n\n    static propTypes = {\n        disabled: PropTypes.bool,\n        icon: PropTypes.string.isRequired,\n        onClick: PropTypes.func,\n        shortType: PropTypes.string.isRequired, // e.g. 'library', 'logo' or element short types like 'image'\n        buttonText: PropTypes.string,\n        fullWidth: PropTypes.bool\n    };\n\n    get graphicsViewContents() {\n        return (\n            <div className=\"create-card-contents\">\n                <div className={ styles.createItemCardGraphic }>\n                    <div className={ styles.createItemCardSparkles }/>\n                    <Icon id={ this.props.icon } height={ 32 } className={ styles.createItemCardIcon }/>\n                    <div className={ styles.addIconContainer }>\n                        <Icon id=\"Add\" height={ 18 } className={ styles.addIcon }/>\n                    </div>\n                </div>\n                { this.createCardButton }\n            </div>\n        );\n    }\n\n    get createCardButton() {\n        if (environment.isMobileView) {\n            // This isn't a button on mobile at all, so we should just use text here instead of overriding the styling on their button\n            return (\n                <span className={styles.mobileButtonText} data-test-id={`create-card-text-${ this.props.shortType }`}>\n                    { this.props.buttonText }\n                </span>\n            );\n        }\n        return (\n            <Button\n                quiet\n                variant=\"accent\"\n                disabled={ this.props.disabled }\n                data-test-id={`create-card-button-${ this.props.shortType }`}\n            >\n                { this.props.buttonText }\n            </Button>\n        );\n\n    }\n\n    onClick = (event) => {\n        event.stopPropagation();\n        if (this.props.disabled) { return; }\n        this.props.onClick(event);\n    }\n\n    get smallIcon() {\n        return <div className={styles.smallIcon}>\n            <Icon id={`Create${this.props.shortType.charAt(0).toUpperCase() + this.props.shortType.slice(1)}`} height={ 18 } className={ styles.addIcon }/>\n        </div>;\n    }\n\n    get fullWidthContents() {\n        const shortTypeCaps = this.props.shortType.toUpperCase();\n        return <div className={styles.fullWidthContent}>\n            { this.smallIcon }\n            <div className={styles.title} data-test-id={`create-card-title-${ this.props.shortType }`}>\n                <HTMLText html={translate(`DL_ADD_TITLE_${ shortTypeCaps }`)}/>\n            </div>\n            <div className={styles.subtitle} data-test-id={`create-card-subtitle-${ this.props.shortType }`}>\n                {translate(`DL_ADD_SUBTITLE_${ shortTypeCaps }`)}\n            </div>\n        </div>;\n    }\n\n    render() {\n        const classes = classNames(styles.createItemCard, `create-card-${ this.props.shortType }`, { [styles.createItemCardDisabled]: this.props.disabled, [styles.fullWidthContainer]: this.props.fullWidth });\n        const tooltipContent = this.props.disabled ? translate('DL_INSERT_TOOLTIP_LIMIT') : '';\n        return (\n            <Tooltip content={ tooltipContent } placement=\"top\" className={ styles.createItemCardContainer }>\n                <div\n                    className={ classes }\n                    onClick={ this.onClick }\n                    data-test-id={`create-card-${ this.props.shortType }`}\n                >\n                    {this.props.fullWidth ? this.fullWidthContents : this.graphicsViewContents}\n                </div>\n            </Tooltip>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\nimport environment from 'app/js/environment';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\n\n/**\n * Container for panel dialogs\n */\n@observer\nexport default class DialogContainerView extends React.Component {\n    static contextType = LibrariesContext;\n\n    render() {\n        // If there is an environment-specific hook, use that instead of showing the dialog.\n        if (this.context.dialogManager.dialog && environment.openCustomDialog && !this.context.dialogManager.isDialogAlwaysInline) {\n            environment.openCustomDialog();\n            return null;\n        }\n\n        return this.context.dialogManager.dialog || null;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport { translate } from 'app/js/managers/translationManager';\nimport Icon from 'app/js/components/Icon';\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport metrics from 'app/js/interface/metrics';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport Button from '@ccx-public/spectrum-wrapper/Button';\n\n// Discovery message at the bottom of the panel's contents in either root view or empty document assets view\n// TODO: Could combine the SearchOptionsMessage with this.\n@observer\nexport default class DiscoverLibrariesMessage extends React.Component {\n    static contextType = LibrariesContext;\n\n    get libraries() {\n        return this.context.libraryManager.libraries; // excludes Document Library\n    }\n\n    _revealRootView = () => {\n        // Same metrics as the back arrow to root view, but with additional content.category context\n        metrics.reportEvent('Navigation', 'Library Panel', 'click', 'root-view', { content: { category: 'Empty Document Assets' } });\n        this.context.viewState.showRootView();\n    }\n\n    _browseSharedLibrariesinCCD = () => {\n        metrics.reportEvent('Navigation', 'Root View', 'click', 'view-shared-libraries');\n        this.context.libraryManager.openBrowseAll();\n    }\n\n    _browsePublicLibrariesInCCD = () => {\n        metrics.reportEvent('Navigation', 'Root View', 'click', 'view-public-libraries');\n        this.context.libraryManager.openMarketplace();\n    }\n\n    _openLM = () => {\n        metrics.reportEvent('Navigation', 'Root View', 'click', 'manage-libraries');\n        environment.openLibraryManagerWindow();\n    }\n\n    _discoverLibraries = () => {\n        if (configuration.currentProduct.config.handleDiscoverLibraries) {\n            return configuration.currentProduct.config.handleDiscoverLibraries();\n        }\n        this._browsePublicLibrariesInCCD();\n    }\n\n    get message() {\n        // Empty Doc Assets View\n        // (We currently assume it is empty as that is the only time this component is used in Doc Assets view.)\n        if (this.context.libraryManager.currentLibrary && this.context.libraryManager.currentLibrary.isDocumentAssets) {\n            return {\n                bodyText: 'EMPTY_DOC_ASSETS_MESSAGE', // Add your styles and components, or use elements from existing libraries.\n                callToActionText: 'EMPTY_DOC_ASSETS_CTA', // View libraries\n                callToActionType: 'link',\n                showImage: true,\n                onClickHandler: this._revealRootView\n            };\n        }\n\n        // Show empty state if there are up to 3 user-created libraries (Including one possible default library.)\n        if (this.libraries.length <= configuration.MAX_LIBRARIES_ONBOARDING) {\n            // Empty Root View\n            // Note: XD has a translation and handler overrides\n            return {\n                bodyText: 'EMPTY_ROOT_VIEW_MESSAGE', // Inspire and speed up your work with ready-made libraries.\n                callToActionText: 'EMPTY_ROOT_VIEW_CTA', // Explore libraries\n                callToActionType: 'button',\n                showImage: true,\n                onClickHandler: this._discoverLibraries\n            };\n        }\n\n        // Root View w/ LM\n        if (this.hasLibraryManager) {\n            return {\n                bodyText: 'ROOT_VIEW_MESSAGE_LM', // Libraries help you design quickly and stay connected to your team.\n                callToActionText: 'ROOT_VIEW_CTA_LM', // Manage libraries\n                callToActionType: 'link',\n                showImage: false,\n                onClickHandler: this._openLM\n            };\n        }\n\n        // Root View w/ no LM (temporary)\n        return {\n            component: this.noLMRootViewMessage\n        };\n    }\n\n    // TODO: Get rid of this once LM is available in CEP in all apps\n    get noLMRootViewMessage() {\n        // \"Browse shared libraries\" link, followed by \"Find public libraries\" link.\n        return <>\n            { this.getCallToAction('link', 'DL_MORE_LIBRARY_BROWSE', this._browseSharedLibrariesinCCD, 'root-view-browse-shared-link') }\n            { this.getCallToAction('link', 'DL_MORE_LIBRARY_BROWSE_PUBLIC', this._browsePublicLibrariesInCCD, 'root-view-browse-public-link') }\n        </>;\n    }\n\n    get hasLibraryManager() {\n        return configuration.currentProduct.config.hasLibraryManager;\n    }\n\n    get icon() {\n        return (\n            <div className=\"discover-libraries-graphic\" data-test-id=\"discover-libraries-graphic\">\n                <Icon id=\"DiscoverLibraries\" height={ 100 } />\n            </div>\n        );\n    }\n\n    getCallToAction(callToActionType, callToActionText, onClickHandler, dataTestId) {\n        if (callToActionType === 'button') {\n            return (\n                <Button\n                    data-test-id=\"discover-libraries-browse-button\"\n                    variant=\"cta\"\n                    onClick={ onClickHandler } >\n                    { translate(callToActionText) }\n                </Button>\n            );\n        } // or 'link'\n\n        return <div className=\"panel-contents-bottom-message-link\" onClick={ onClickHandler } data-test-id={ dataTestId || 'discover-libraries-link' }>{ translate(callToActionText) }</div>;\n    }\n\n    @computed\n    get discoverLibrariesContent() {\n        const { bodyText, callToActionText, callToActionType, onClickHandler, component, showImage } = this.message;\n\n        return (<div className=\"discover-libraries\" data-test-id=\"discover-libraries-message\">\n            { showImage && this.icon }\n            { bodyText && <div className=\"discover-libraries-text\" data-test-id=\"discover-libraries-text\">{ translate(bodyText) }</div> }\n            { component ? component : this.getCallToAction(callToActionType, callToActionText, onClickHandler) }\n        </div>);\n    }\n\n    render() {\n        return configuration.currentProduct.getCustomDiscoverLibrariesView?.() || this.discoverLibrariesContent;\n    }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"emptyViewContainer\":\"G8l\",\"emptyViewInnerContainer\":\"JJs\",\"mosaicGridEmptyViewClearFilter\":\"ccq\",\"emptyViewClearFilterIcon\":\"uqj\",\"emptyViewClearFilterButton\":\"_00\",\"emptyViewHeader\":\"eV2\",\"emptyViewSubtitle\":\"ypv\"};","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport Icon from 'app/js/components/Icon';\nimport styles from './index.scss';\nimport Button from '@ccx-public/spectrum-wrapper/Button';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport { translate } from 'app/js/managers/translationManager';\nimport PropTypes from 'prop-types';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport NoLibrariesView from 'app/js/components/NoLibrariesView';\nimport Wait from '@torq-native/react-spectrum/Wait';\nimport featureFlags from 'app/js/config/featureFlags';\nimport configuration from 'app/js/config/configuration';\nimport HTMLText from 'app/js/components/HTMLText';\n\n@observer\nexport default class EmptyFilterLibraryView extends React.Component {\n    static contextType = LibrariesContext;\n    static propTypes = {\n        view: PropTypes.oneOf([ 'team', 'personal' ]),\n        header: PropTypes.string,\n        subtitle: PropTypes.string,\n        graphic: PropTypes.string\n    };\n\n    @computed get syncStatus() {\n        return this.context.libraryManager.syncStatus;\n    }\n\n    get librariesIcon() {\n        return <div className={styles.emptyViewClearFilterIcon}>\n            <Icon id={this.props.graphic ?? 'FilterWarning'} height={configuration.currentProduct.config.filterIconHeight || 82} width={configuration.currentProduct.config.filterIconWidth || 80} />\n        </div>;\n    }\n\n    get header() {\n        const header = featureFlags.get('brandFeatureEnabled') ? 'DL_LIBRARY_AND_BRAND_EMPTY_VIEW_HEADER' : 'DL_TEAM_LIBRARY_EMPTY_VIEW_HEADER';\n        return <div className={styles.emptyViewHeader} data-test-id=\"empty-library-grid-header\">\n            { this.props.header ?? translate(header)}\n        </div>;\n    }\n\n    get subtitle() {\n        let subtitle = featureFlags.get('brandFeatureEnabled') ? 'DL_LIBRARY_AND_BRAND_EMPTY_VIEW_SUBTITLE' : 'DL_TEAM_LIBRARY_EMPTY_VIEW_SUBTITLE';\n        if (configuration.currentProduct.config?.hasGlobalSearch?.()) {\n            subtitle = 'DL_EMPTY_LIB_PANEL_GLOBAL_SEARCH';\n        }\n        return <div className={styles.emptyViewSubtitle} data-test-id=\"empty-library-grid-subtitle\">\n            <HTMLText html={ this.props.subtitle ?? translate(subtitle) }/>\n        </div>;\n    }\n\n    get clearFilterButton() {\n        const isLibraryNameSearch = this.context.viewState.isLibraryNameSearchType();\n        const clearSearch = () => {\n            this.context.viewState.resetCurrentLibrariesFilter();\n            if (isLibraryNameSearch) {\n                this.context.viewState.setSearchText('');\n            }\n        };\n\n        return <div className={styles.emptyViewClearFilterButton}>\n            <Button data-test-id=\"empty-library-grid-clear-button\" variant=\"secondary\"\n                onClick={ clearSearch } >\n                { translate(`DL_TEAM_LIBRARY_EMPTY_VIEW_CLEAR_${isLibraryNameSearch ? 'SEARCH' : 'FILTER' }`)}\n            </Button>\n        </div>;\n    }\n\n    get content() {\n        if (this.syncStatus.state === 'loading') {\n            return <Wait data-test-id=\"empty-library-grid-loading\" size=\"L\" />;\n        } else if (this.syncStatus.state === 'error') {\n            return <NoLibrariesView/>;\n        }\n        const showClearButton = !configuration.currentProduct.config?.hasGlobalSearch?.() && this.props.view !== 'team';\n        return <div className={styles.emptyViewInnerContainer} data-test-id=\"empty-library-grid-content\">\n            {this.librariesIcon}\n            {this.header}\n            {this.subtitle}\n            {showClearButton && this.clearFilterButton}\n        </div>;\n    }\n\n    render() {\n        if (configuration.currentProduct.config?.emptyFilterLibraryViewOverride) {\n            return configuration.currentProduct.config.emptyFilterLibraryViewOverride?.();\n        }\n        return <div className={styles.emptyViewContainer} data-test-id=\"empty-library-grid\">\n            {this.content}\n        </div>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport environment from 'app/js/environment';\n\n@observer\nexport default class HTMLText extends React.Component {\n\n    static propTypes = {\n        html: PropTypes.string.isRequired,\n        linkClickMethods: PropTypes.object // Link click method will map the index of the link itself to a method passed into HTMLText\n    };\n\n    static defaultProps = {\n        linkClickMethods: {}\n    }\n\n    static elementNodeToJSX = {\n        DIV:  (node, index) => <div key={ index }>{ HTMLText.nodeListToJSX(node.childNodes) }</div>,\n        SPAN: (node, index) => <span key={ index }>{ HTMLText.nodeListToJSX(node.childNodes) }</span>,\n        BR:   (node, index) => <br key={ index }/>,\n        UL:   (node, index) => <ul key={ index }>{ HTMLText.nodeListToJSX(node.childNodes) }</ul>,\n        OL:   (node, index) => <ol key={ index }>{ HTMLText.nodeListToJSX(node.childNodes) }</ol>,\n        LI:   (node, index) => <li key={ index }>{ HTMLText.nodeListToJSX(node.childNodes) }</li>,\n        B:    (node, index) => <b key={ index }>{ HTMLText.nodeListToJSX(node.childNodes) }</b>,\n        I:    (node, index) => <i key={ index }>{ HTMLText.nodeListToJSX(node.childNodes) }</i>,\n        A:    (node, index, linkClickMethods) => {\n\n            let onClick = () => {};\n            const hrefAttribute = node.getAttribute('href');\n            if (hrefAttribute && hrefAttribute.charAt(0) === '#') {\n                // If the href starts with #, try to call the link click method associated with it\n                onClick = linkClickMethods[hrefAttribute.substr(1)];\n            } else if (hrefAttribute) {\n                // If the link is of the form <a href=\"\"> and the href doesn't start with #, set the click handler to launch it in the browser.\n                onClick = () => environment.launchInBrowser(hrefAttribute);\n            }\n            return <a key={ index } onClick={ onClick } className=\"panel-html-text-link\">{ HTMLText.nodeListToJSX(node.childNodes) }</a>;\n        }\n    };\n\n    static nodeToJSX = (node, index, linkClickMethods) => {\n        // Note: toUpperCase() is only necessary while the UXP polyfill for DOMParser returns lowercase tag names.\n        const tagName = node && node.tagName && node.tagName.toUpperCase();\n        if (node.nodeType === 3) {\n            // text node\n            return node.textContent;\n        }\n        if (node.nodeType === 1 && HTMLText.elementNodeToJSX[tagName]) {\n            // supported element node\n            return HTMLText.elementNodeToJSX[tagName](node, index, linkClickMethods);\n        }\n        return '';\n    };\n\n    static nodeListToJSX = (nodeList, linkClickMethods) => Array.from(nodeList).map((node, index) => HTMLText.nodeToJSX(node, index, linkClickMethods));\n\n    render() {\n        // We want to propagate child props (like className) to the div, but _not_ the html prop!\n        const childProps = Object.assign({}, this.props);\n        delete childProps.html;\n        delete childProps.linkClickMethods;\n\n        const parser = new DOMParser();\n        const document = parser.parseFromString(`<div id=\"text\">${this.props.html}</div>`, 'text/html');\n        const childNodes = document.getElementById('text').childNodes;\n        return <div { ...childProps }>{ HTMLText.nodeListToJSX(childNodes, this.props.linkClickMethods) }</div>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\nimport type { Icon } from '@ccx-public/spectrum-web-component-fallbacks/dist/icon';\nimport type { ReactProps, SpectrumElementProps } from '../utils';\n\ntype RS2Size = 'XS' | 'S' | 'M' | 'L' | 'XL' | 'XXL';\ntype SWCSize = Icon['size'];\n\nfunction getSWCSize(size?: RS2Size): SWCSize {\n    // The sizing differences between RS2 and SWC are pretty wild. Since we're\n    // supporting the RS2 interface, we give the closest approximation to each\n    // size in SWC.\n    switch (size) {\n        case 'XS': // 12px\n            return 's'; // 16px\n        case 'S': // 18px\n            return 'm'; // 18px\n        case 'M': // 24px\n            return 'xl'; // 22px\n        case 'L': // 36px\n        case 'XL': // 48px\n        case 'XXL': // 72px\n            return 'xxl'; // 32px\n        // RS2 default is 'M'\n        default:\n            return 'xl'; // SWC equivalent is xl.\n    }\n}\n\nexport type RS2IconProps = {\n    alt?: string;\n    'aria-label'?: string;\n    size?: RS2Size;\n};\n\nexport function getSWCProps(\n    props: ReactProps<Icon, RS2IconProps>\n): SpectrumElementProps<Icon> {\n    const { alt, className, 'aria-label': ariaLabel, size, ...rest } = props;\n    return {\n        ...rest,\n        class: className,\n        label: alt || ariaLabel,\n        size: getSWCSize(size),\n    };\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconAdd } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconAdd.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Add: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/Add')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-add'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconAdd\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconAdd.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconAdd];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconAdd\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconAdd.js'\n                    )\n                ).IconAdd,\n            ];\n        }\n    );\n\n}\n\nconst Add = createWrapper<IconAdd, RS2IconProps>({\n    displayName: 'Add',\n    fallback: RS2Add,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-add',\n});\n\nexport default Add;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconAddCircle } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconAddCircle.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2AddCircle: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/AddCircle')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-add-circle'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconAddCircle\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconAddCircle.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconAddCircle];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconAddCircle\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconAddCircle.js'\n                    )\n                ).IconAddCircle,\n            ];\n        }\n    );\n\n}\n\nconst AddCircle = createWrapper<IconAddCircle, RS2IconProps>({\n    displayName: 'AddCircle',\n    fallback: RS2AddCircle,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-add-circle',\n});\n\nexport default AddCircle;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconAlert } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconAlert.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Alert: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/Alert')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-alert'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconAlert\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconAlert.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconAlert];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconAlert\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconAlert.js'\n                    )\n                ).IconAlert,\n            ];\n        }\n    );\n\n}\n\nconst Alert = createWrapper<IconAlert, RS2IconProps>({\n    displayName: 'Alert',\n    fallback: RS2Alert,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-alert',\n});\n\nexport default Alert;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconBuilding } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconBuilding.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Building: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/Building')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-building'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconBuilding\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconBuilding.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconBuilding];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconBuilding\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconBuilding.js'\n                    )\n                ).IconBuilding,\n            ];\n        }\n    );\n\n}\n\nconst Building = createWrapper<IconBuilding, RS2IconProps>({\n    displayName: 'Building',\n    fallback: RS2Building,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-building',\n});\n\nexport default Building;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconBrowse } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconBrowse.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\n\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Browse: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/Browse')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(['sp-icon-browse'], async () => {\n        const { IconBrowse } = await import(\n            /* webpackChunkName: \"SpIconBrowse\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconBrowse'\n        );\n        return [IconBrowse];\n    });\n\n}\n\nconst Browse = createWrapper<IconBrowse, RS2IconProps>({\n    displayName: 'Browse',\n    fallback: RS2Browse,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-browse',\n});\n\nexport default Browse;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconBrush } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconBrush.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Brush: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/Brush')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-brush'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconBrush\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconBrush.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconBrush];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconBrush\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconBrush.js'\n                    )\n                ).IconBrush,\n            ];\n        }\n    );\n\n}\n\nconst Brush = createWrapper<IconBrush, RS2IconProps>({\n    displayName: 'Brush',\n    fallback: RS2Brush,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-brush',\n});\n\nexport default Brush;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconCCLibrary } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconCCLibrary.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2CCLibrary: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/CCLibrary')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-cclibrary'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconCCLibrary\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconCCLibrary.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconCCLibrary];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconCCLibrary\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconCCLibrary.js'\n                    )\n                ).IconCCLibrary,\n            ];\n        }\n    );\n\n}\n\nconst CCLibrary = createWrapper<IconCCLibrary, RS2IconProps>({\n    displayName: 'CCLibrary',\n    fallback: RS2CCLibrary,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-cclibrary',\n});\n\nexport default CCLibrary;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconCheckmark } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconCheckmark.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Checkmark: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/Checkmark')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-checkmark'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconCheckmark\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconCheckmark.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconCheckmark];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconCheckmark\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconCheckmark.js'\n                    )\n                ).IconCheckmark,\n            ];\n        }\n    );\n\n}\n\nconst Checkmark = createWrapper<IconCheckmark, RS2IconProps>({\n    displayName: 'Checkmark',\n    fallback: RS2Checkmark,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-checkmark',\n});\n\nexport default Checkmark;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconChevronDown } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconChevronDown.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2ChevronDown: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/ChevronDown')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-chevron-down'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconChevronDown\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconChevronDown.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconChevronDown];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconChevronDown\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconChevronDown.js'\n                    )\n                ).IconChevronDown,\n            ];\n        }\n    );\n\n}\n\nconst ChevronDown = createWrapper<IconChevronDown, RS2IconProps>({\n    displayName: 'ChevronDown',\n    fallback: RS2ChevronDown,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-chevron-down',\n});\n\nexport default ChevronDown;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconChevronLeft } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconChevronLeft.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2ChevronLeft: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/ChevronLeft')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-chevron-left'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconChevronLeft\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconChevronLeft.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconChevronLeft];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconChevronLeft\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconChevronLeft.js'\n                    )\n                ).IconChevronLeft,\n            ];\n        }\n    );\n\n}\n\nconst ChevronLeft = createWrapper<IconChevronLeft, RS2IconProps>({\n    displayName: 'ChevronLeft',\n    fallback: RS2ChevronLeft,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-chevron-left',\n});\n\nexport default ChevronLeft;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconChevronRight } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconChevronRight.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2ChevronRight: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/ChevronRight')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-chevron-right'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconChevronRight\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconChevronRight.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconChevronRight];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconChevronRight\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconChevronRight.js'\n                    )\n                ).IconChevronRight,\n            ];\n        }\n    );\n\n}\n\nconst ChevronRight = createWrapper<IconChevronRight, RS2IconProps>({\n    displayName: 'ChevronRight',\n    fallback: RS2ChevronRight,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-chevron-right',\n});\n\nexport default ChevronRight;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconClassicGridView } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconClassicGridView.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2ClassicGridView: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/ClassicGridView')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-classic-grid-view'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconClassicGridView\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconGridView.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconGridView];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconClassicGridView\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconClassicGridView.js'\n                    )\n                ).IconClassicGridView,\n            ];\n        }\n    );\n\n}\n\nconst ClassicGridView = createWrapper<IconClassicGridView, RS2IconProps>({\n    displayName: 'ClassicGridView',\n    fallback: RS2ClassicGridView,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-classic-grid-view',\n});\n\nexport default ClassicGridView;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconClose } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconClose.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Close: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/Close')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-close'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconClose\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconClose.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconClose];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconClose\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconClose.js'\n                    )\n                ).IconClose,\n            ];\n        }\n    );\n\n}\n\nconst Close = createWrapper<IconClose, RS2IconProps>({\n    displayName: 'Close',\n    fallback: RS2Close,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-close',\n});\n\nexport default Close;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconCloud } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconCloud.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Cloud: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/Cloud')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-cloud'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconCloud\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconCloud.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconCloud];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconCloud\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconCloud.js'\n                    )\n                ).IconCloud,\n            ];\n        }\n    );\n\n}\n\nconst Cloud = createWrapper<IconCloud, RS2IconProps>({\n    displayName: 'Cloud',\n    fallback: RS2Cloud,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-cloud',\n});\n\nexport default Cloud;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconCloudDisconnected } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconCloudDisconnected.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2CloudDisconnected: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/CloudDisconnected')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-cloud-disconnected'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconCloudDisconnected\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconCloudStateDisconnected.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconCloudStateDisconnected];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconCloudDisconnected\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconCloudDisconnected.js'\n                    )\n                ).IconCloudDisconnected,\n            ];\n        }\n    );\n\n}\n\nconst CloudDisconnected = createWrapper<IconCloudDisconnected, RS2IconProps>({\n    displayName: 'CloudDisconnected',\n    fallback: RS2CloudDisconnected,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-cloud-disconnected',\n});\n\nexport default CloudDisconnected;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconCloudError } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconCloudError.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2CloudError: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/CloudError')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-cloud-error'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconCloudError\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconCloudStateError.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconCloudStateError];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconCloudError\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconCloudError.js'\n                    )\n                ).IconCloudError,\n            ];\n        }\n    );\n\n}\n\nconst CloudError = createWrapper<IconCloudError, RS2IconProps>({\n    displayName: 'CloudError',\n    fallback: RS2CloudError,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-cloud-error',\n});\n\nexport default CloudError;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconColorPalette } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconColorPalette.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2ColorPalette: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/ColorPalette')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-color-palette'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconColorPalette\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconColorPalette.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconColorPalette];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconColorPalette\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconColorPalette.js'\n                    )\n                ).IconColorPalette,\n            ];\n        }\n    );\n\n}\n\nconst ColorPalette = createWrapper<IconColorPalette, RS2IconProps>({\n    displayName: 'ColorPalette',\n    fallback: RS2ColorPalette,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-color-palette',\n});\n\nexport default ColorPalette;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconDate } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconDate.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\n\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Date: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/Date')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(['sp-icon-date'], async () => {\n        const { IconDate } = await import(\n            /* webpackChunkName: \"SpIconDate\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconDate'\n        );\n        return [IconDate];\n    });\n\n}\n\nconst Date = createWrapper<IconDate, RS2IconProps>({\n    displayName: 'Date',\n    fallback: RS2Date,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-date',\n});\n\nexport default Date;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconDelete } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconDelete.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Delete: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/Delete')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-delete'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconDelete\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconDelete.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconDelete];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconDelete\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconDelete.js'\n                    )\n                ).IconDelete,\n            ];\n        }\n    );\n\n}\n\nconst Delete = createWrapper<IconDelete, RS2IconProps>({\n    displayName: 'Delete',\n    fallback: RS2Delete,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-delete',\n});\n\nexport default Delete;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconDownloadFromCloudOutline } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconDownloadFromCloudOutline.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\n\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2DownloadFromCloudOutline: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('../utils/undefinedModule')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(['sp-icon-download-from-cloud-outline'], async () => {\n        const { IconDownloadFromCloudOutline } = await import(\n            /* webpackChunkName: \"SpIconDownloadFromCloudOutline\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconDownloadFromCloudOutline'\n        );\n        return [IconDownloadFromCloudOutline];\n    });\n\n}\n\nconst DownloadFromCloudOutline = createWrapper<IconDownloadFromCloudOutline, RS2IconProps>({\n    displayName: 'DownloadFromCloudOutline',\n    fallback: RS2DownloadFromCloudOutline,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-download-from-cloud-outline',\n});\n\nexport default DownloadFromCloudOutline;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconEdit } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconEdit.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Edit: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/Edit')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-edit'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconEdit\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconEdit.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconEdit];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconEdit\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconEdit.js'\n                    )\n                ).IconEdit,\n            ];\n        }\n    );\n\n}\n\nconst Edit = createWrapper<IconEdit, RS2IconProps>({\n    displayName: 'Edit',\n    fallback: RS2Edit,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-edit',\n});\n\nexport default Edit;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconFilter } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconFilter.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Filter: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/Filter')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-filter'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconFilter\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconFilter.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconFilter];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconFilter\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconFilter.js'\n                    )\n                ).IconFilter,\n            ];\n        }\n    );\n\n}\n\nconst Filter = createWrapper<IconFilter, RS2IconProps>({\n    displayName: 'Filter',\n    fallback: RS2Filter,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-filter',\n});\n\nexport default Filter;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconFilterCheck } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconFilterCheck.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\n\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2FilterCheck: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/FilterCheck')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(['sp-icon-filter-check'], async () => {\n        const { IconFilterCheck } = await import(\n            /* webpackChunkName: \"SpIconFilterCheck\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconFilterCheck'\n        );\n        return [IconFilterCheck];\n    });\n\n}\n\nconst FilterCheck = createWrapper<IconFilterCheck, RS2IconProps>({\n    displayName: 'FilterCheck',\n    fallback: RS2FilterCheck,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-filter-check',\n});\n\nexport default FilterCheck;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconFlag } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconFlag.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Flag: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/Flag')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-flag'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconFlag\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconFlag.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconFlag];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconFlag\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconFlag.js'\n                    )\n                ).IconFlag,\n            ];\n        }\n    );\n\n}\n\nconst Flag = createWrapper<IconFlag, RS2IconProps>({\n    displayName: 'Flag',\n    fallback: RS2Flag,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-flag',\n});\n\nexport default Flag;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconFolder } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconFolder.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Folder: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/Folder')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-folder'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconFolder\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconFolder.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconFolder];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconFolder\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconFolder.js'\n                    )\n                ).IconFolder,\n            ];\n        }\n    );\n\n}\n\nconst Folder = createWrapper<IconFolder, RS2IconProps>({\n    displayName: 'Folder',\n    fallback: RS2Folder,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-folder',\n});\n\nexport default Folder;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconFolderAdd } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconFolderAdd.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2FolderAdd: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/FolderAdd')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-folder-add'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconFolderAdd\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconFolderAdd.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconFolderAdd];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconFolderAdd\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconFolderAdd.js'\n                    )\n                ).IconFolderAdd,\n            ];\n        }\n    );\n\n}\n\nconst FolderAdd = createWrapper<IconFolderAdd, RS2IconProps>({\n    displayName: 'FolderAdd',\n    fallback: RS2FolderAdd,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-folder-add',\n});\n\nexport default FolderAdd;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconFolderOpen } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconFolderOpen.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\n\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2FolderOpen: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/FolderOpen')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(['sp-icon-folder-open'], async () => {\n        const { IconFolderOpen } = await import(\n            /* webpackChunkName: \"SpIconFolderOpen\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconFolderOpen'\n        );\n        return [IconFolderOpen];\n    });\n\n}\n\nconst FolderOpen = createWrapper<IconFolderOpen, RS2IconProps>({\n    displayName: 'FolderOpen',\n    fallback: RS2FolderOpen,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-folder-open',\n});\n\nexport default FolderOpen;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconGlobe } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconGlobe.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\n\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Globe: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/Globe')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(['sp-icon-globe'], async () => {\n        const { IconGlobe } = await import(\n            /* webpackChunkName: \"SpIconGlobe\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconGlobe'\n        );\n        return [IconGlobe];\n    });\n\n}\n\nconst Globe = createWrapper<IconGlobe, RS2IconProps>({\n    displayName: 'Globe',\n    fallback: RS2Globe,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-globe',\n});\n\nexport default Globe;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconGlobeSearch } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconGlobeSearch.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\n\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2GlobeSearch: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/GlobeSearch')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(['sp-icon-globe-search'], async () => {\n        const { IconGlobeSearch } = await import(\n            /* webpackChunkName: \"SpIconGlobeSearch\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconGlobeSearch'\n        );\n        return [IconGlobeSearch];\n    });\n\n}\n\nconst GlobeSearch = createWrapper<IconGlobeSearch, RS2IconProps>({\n    displayName: 'GlobeSearch',\n    fallback: RS2GlobeSearch,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-globe-search',\n});\n\nexport default GlobeSearch;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconHelpOutline } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconHelpOutline.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\n\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2HelpOutline: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/HelpOutline')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(['sp-icon-help-outline'], async () => {\n        const { IconHelpOutline } = await import(\n            /* webpackChunkName: \"SpIconHelpOutline\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconHelpOutline'\n        );\n        return [IconHelpOutline];\n    });\n\n}\n\nconst HelpOutline = createWrapper<IconHelpOutline, RS2IconProps>({\n    displayName: 'HelpOutline',\n    fallback: RS2HelpOutline,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-help-outline',\n});\n\nexport default HelpOutline;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconImage } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconImage.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Image: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/Image')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-image'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconImage\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconImage.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconImage];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconImage\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconImage.js'\n                    )\n                ).IconImage,\n            ];\n        }\n    );\n\n}\n\nconst Image = createWrapper<IconImage, RS2IconProps>({\n    displayName: 'Image',\n    fallback: RS2Image,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-image',\n});\n\nexport default Image;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconInvite } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconInvite.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Invite: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('../utils/undefinedModule')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-invite'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconInvite\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconInvite.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconInvite];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconInvite\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconInvite.js'\n                    )\n                ).IconInvite,\n            ];\n        }\n    );\n\n}\n\nconst Invite = createWrapper<IconInvite, RS2IconProps>({\n    displayName: 'Invite',\n    fallback: RS2Invite,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-invite',\n});\n\nexport default Invite;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconInfo } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconInfo.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Info: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/Info')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-info'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconInfo\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconInfo.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconInfo];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconInfo\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconInfo.js'\n                    )\n                ).IconInfo,\n            ];\n        }\n    );\n\n}\n\nconst Info = createWrapper<IconInfo, RS2IconProps>({\n    displayName: 'Info',\n    fallback: RS2Info,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-info',\n});\n\nexport default Info;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconInfoOutline } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconInfoOutline.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\n\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2InfoOutline: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/InfoOutline')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(['sp-icon-info-outline'], async () => {\n        const { IconInfoOutline } = await import(\n            /* webpackChunkName: \"SpIconInfoOutline\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconInfoOutline'\n        );\n        return [IconInfoOutline];\n    });\n\n}\n\nconst InfoOutline = createWrapper<IconInfoOutline, RS2IconProps>({\n    displayName: 'InfoOutline',\n    fallback: RS2InfoOutline,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-info-outline',\n});\n\nexport default InfoOutline;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconLink } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconLink.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Link: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/Link')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-link'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconLink\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconLink.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconLink];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconLink\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconLink.js'\n                    )\n                ).IconLink,\n            ];\n        }\n    );\n\n}\n\nconst Link = createWrapper<IconLink, RS2IconProps>({\n    displayName: 'Link',\n    fallback: RS2Link,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-link',\n});\n\nexport default Link;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconLinkOut } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconLinkOut.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\n\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2LinkOut: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/LinkOut')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(['sp-icon-link-out'], async () => {\n        const { IconLinkOut } = await import(\n            /* webpackChunkName: \"SpIconLinkOut\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconLinkOut'\n        );\n        return [IconLinkOut];\n    });\n\n}\n\nconst LinkOut = createWrapper<IconLinkOut, RS2IconProps>({\n    displayName: 'LinkOut',\n    fallback: RS2LinkOut,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-link-out',\n});\n\nexport default LinkOut;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconLockClosed } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconLockClosed.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2LockClosed: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/LockClosed')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-lock-closed'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconLockClosed\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconLockClosed.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconLockClosed];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconLockClosed\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconLockClosed.js'\n                    )\n                ).IconLockClosed,\n            ];\n        }\n    );\n\n}\n\nconst LockClosed = createWrapper<IconLockClosed, RS2IconProps>({\n    displayName: 'LockClosed',\n    fallback: RS2LockClosed,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-lock-closed',\n});\n\nexport default LockClosed;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconMagnify } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconMagnify.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\n\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Magnify: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/Magnify')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(['sp-icon-magnify'], async () => {\n        const { IconMagnify } = await import(\n            /* webpackChunkName: \"SpIconMagnify\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconMagnify'\n        );\n        return [IconMagnify];\n    });\n\n}\n\nconst Magnify = createWrapper<IconMagnify, RS2IconProps>({\n    displayName: 'Magnify',\n    fallback: RS2Magnify,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-magnify',\n});\n\nexport default Magnify;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconMore } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconMore.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2More: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/More')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-more'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconMore\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconMore.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconMore];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconMore\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconMore.js'\n                    )\n                ).IconMore,\n            ];\n        }\n    );\n\n}\n\nconst More = createWrapper<IconMore, RS2IconProps>({\n    displayName: 'More',\n    fallback: RS2More,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-more',\n});\n\nexport default More;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconOpenIn } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconOpenIn.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\n\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2OpenIn: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/OpenIn')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(['sp-icon-open-in'], async () => {\n        const { IconOpenIn } = await import(\n            /* webpackChunkName: \"SpIconOpenIn\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconOpenIn'\n        );\n        return [IconOpenIn];\n    });\n\n}\n\nconst OpenIn = createWrapper<IconOpenIn, RS2IconProps>({\n    displayName: 'OpenIn',\n    fallback: RS2OpenIn,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-open-in',\n});\n\nexport default OpenIn;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconOrganisations } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconOrganisations.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\n\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Organisations: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/Organisations')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(['sp-icon-organisations'], async () => {\n        const { IconOrganisations } = await import(\n            /* webpackChunkName: \"SpIconOrganisations\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconOrganisations'\n        );\n        return [IconOrganisations];\n    });\n\n}\n\nconst Organisations = createWrapper<IconOrganisations, RS2IconProps>({\n    displayName: 'Organisations',\n    fallback: RS2Organisations,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-organisations',\n});\n\nexport default Organisations;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconPublishRemove } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconPublishRemove.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\n\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2PublishRemove: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/PublishRemove')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(['sp-icon-publish-remove'], async () => {\n        const { IconPublishRemove } = await import(\n            /* webpackChunkName: \"SpIconPublishRemove\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconPublishRemove'\n        );\n        return [IconPublishRemove];\n    });\n\n}\n\nconst PublishRemove = createWrapper<IconPublishRemove, RS2IconProps>({\n    displayName: 'PublishRemove',\n    fallback: RS2PublishRemove,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-publish-remove',\n});\n\nexport default PublishRemove;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconRailRightClose } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconRailRightClose.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\n\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2RailRightClose: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/RailRightClose')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(['sp-icon-rail-right-close'], async () => {\n        const { IconRailRightClose } = await import(\n            /* webpackChunkName: \"SpIconRailRightClose\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconRailRightClose'\n        );\n        return [IconRailRightClose];\n    });\n\n}\n\nconst RailRightClose = createWrapper<IconRailRightClose, RS2IconProps>({\n    displayName: 'RailRightClose',\n    fallback: RS2RailRightClose,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-rail-right-close',\n});\n\nexport default RailRightClose;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconRefresh } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconRefresh.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Refresh: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/Refresh')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-refresh'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconRefresh\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconRefresh.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconRefresh];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconRefresh\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconRefresh.js'\n                    )\n                ).IconRefresh,\n            ];\n        }\n    );\n\n}\n\nconst Refresh = createWrapper<IconRefresh, RS2IconProps>({\n    displayName: 'Refresh',\n    fallback: RS2Refresh,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-refresh',\n});\n\nexport default Refresh;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconRename } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconRename.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Rename: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/Rename')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-rename'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconRename\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconRename.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconRename];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconRename\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconRename.js'\n                    )\n                ).IconRename,\n            ];\n        }\n    );\n\n}\n\nconst Rename = createWrapper<IconRename, RS2IconProps>({\n    displayName: 'Rename',\n    fallback: RS2Rename,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-rename',\n});\n\nexport default Rename;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconSettings } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconSettings.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Settings: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/Settings')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-settings'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconSettings\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconSettings.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconSettings];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconSettings\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconSettings.js'\n                    )\n                ).IconSettings,\n            ];\n        }\n    );\n\n}\n\nconst Settings = createWrapper<IconSettings, RS2IconProps>({\n    displayName: 'Settings',\n    fallback: RS2Settings,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-settings',\n});\n\nexport default Settings;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconShoppingCart } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconShoppingCart.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2ShoppingCart: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/ShoppingCart')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-shopping-cart'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconShoppingCart\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconShoppingCart.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconShoppingCart];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconShoppingCart\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconShoppingCart.js'\n                    )\n                ).IconShoppingCart,\n            ];\n        }\n    );\n\n}\n\nconst ShoppingCart = createWrapper<IconShoppingCart, RS2IconProps>({\n    displayName: 'ShoppingCart',\n    fallback: RS2ShoppingCart,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-shopping-cart',\n});\n\nexport default ShoppingCart;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconShare } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconShare.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Share: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/Share')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-share'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconShare\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconShare.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconShare];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconShare\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconShare.js'\n                    )\n                ).IconShare,\n            ];\n        }\n    );\n\n}\n\nconst Share = createWrapper<IconShare, RS2IconProps>({\n    displayName: 'Share',\n    fallback: RS2Share,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-share',\n});\n\nexport default Share;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconShop } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconShop.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Shop: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('../utils/undefinedModule')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-shop'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconShop\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconSmallBusiness.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconSmallBusiness];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconShop\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconShop.js'\n                    )\n                ).IconShop,\n            ];\n        }\n    );\n\n}\n\nconst Shop = createWrapper<IconShop, RS2IconProps>({\n    displayName: 'Shop',\n    fallback: RS2Shop,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-shop',\n});\n\nexport default Shop;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconShowMenu } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconShowMenu.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2ShowMenu: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/ShowMenu')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-show-menu'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconShowMenu\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconShowMenu.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconShowMenu];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconShowMenu\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconShowMenu.js'\n                    )\n                ).IconShowMenu,\n            ];\n        }\n    );\n\n}\n\nconst ShowMenu = createWrapper<IconShowMenu, RS2IconProps>({\n    displayName: 'ShowMenu',\n    fallback: RS2ShowMenu,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-show-menu',\n});\n\nexport default ShowMenu;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconSortOrderDown } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconSortOrderDown.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2SortOrderDown: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/SortOrderDown')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-sort-order-down'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconSortOrderDown\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconSortOrderDown.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconSortOrderDown];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconSortOrderDown\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconSortOrderDown.js'\n                    )\n                ).IconSortOrderDown,\n            ];\n        }\n    );\n\n}\n\nconst SortOrderDown = createWrapper<IconSortOrderDown, RS2IconProps>({\n    displayName: 'SortOrderDown',\n    fallback: RS2SortOrderDown,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-sort-order-down',\n});\n\nexport default SortOrderDown;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconSortOrderUp } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconSortOrderUp.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2SortOrderUp: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/SortOrderUp')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-sort-order-up'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconSortOrderUp\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconSortOrderUp.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconSortOrderUp];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconSortOrderUp\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconSortOrderUp.js'\n                    )\n                ).IconSortOrderUp,\n            ];\n        }\n    );\n\n}\n\nconst SortOrderUp = createWrapper<IconSortOrderUp, RS2IconProps>({\n    displayName: 'SortOrderUp',\n    fallback: RS2SortOrderUp,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-sort-order-up',\n});\n\nexport default SortOrderUp;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconText } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconText.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Text: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/Text')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-text'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconText\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconText.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconText];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconText\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconText.js'\n                    )\n                ).IconText,\n            ];\n        }\n    );\n\n}\n\nconst Text = createWrapper<IconText, RS2IconProps>({\n    displayName: 'Text',\n    fallback: RS2Text,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-text',\n});\n\nexport default Text;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconTextParagraph } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconTextParagraph.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\n\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2TextParagraph: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/TextParagraph')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(['sp-icon-text-paragraph'], async () => {\n        const { IconTextParagraph } = await import(\n            /* webpackChunkName: \"SpIconTextParagraph\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconTextParagraph'\n        );\n        return [IconTextParagraph];\n    });\n\n}\n\nconst TextParagraph = createWrapper<IconTextParagraph, RS2IconProps>({\n    displayName: 'TextParagraph',\n    fallback: RS2TextParagraph,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-text-paragraph',\n});\n\nexport default TextParagraph;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconUser } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconUser.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2User: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/User')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-user'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconUser\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconUser.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconUser];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconUser\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconUser.js'\n                    )\n                ).IconUser,\n            ];\n        }\n    );\n\n}\n\nconst User = createWrapper<IconUser, RS2IconProps>({\n    displayName: 'User',\n    fallback: RS2User,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-user',\n});\n\nexport default User;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconUserGroup } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconUserGroup.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2UserGroup: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/UserGroup')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-user-group'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconUserGroup\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconUserGroup.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconUserGroup];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconUserGroup\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconUserGroup.js'\n                    )\n                ).IconUserGroup,\n            ];\n        }\n    );\n\n}\n\nconst UserGroup = createWrapper<IconUserGroup, RS2IconProps>({\n    displayName: 'UserGroup',\n    fallback: RS2UserGroup,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-user-group',\n});\n\nexport default UserGroup;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconUserLock } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconUserLock.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\n\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2UserLock: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/UserLock')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(['sp-icon-user-lock'], async () => {\n        const { IconUserLock } = await import(\n            /* webpackChunkName: \"SpIconUserLock\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconUserLock'\n        );\n        return [IconUserLock];\n    });\n\n}\n\nconst UserLock = createWrapper<IconUserLock, RS2IconProps>({\n    displayName: 'UserLock',\n    fallback: RS2UserLock,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-user-lock',\n});\n\nexport default UserLock;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconViewList } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconViewList.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2ViewList: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/ViewList')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-view-list'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconViewList\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconListView.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconListView];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconViewList\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconViewList.js'\n                    )\n                ).IconViewList,\n            ];\n        }\n    );\n\n}\n\nconst ViewList = createWrapper<IconViewList, RS2IconProps>({\n    displayName: 'ViewList',\n    fallback: RS2ViewList,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-view-list',\n});\n\nexport default ViewList;\n/* eslint-enable prettier/prettier */\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/* eslint-disable prettier/prettier */\n\nimport type { IconVisibility } from '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconVisibility.js';\nimport { SWCLoader } from '../utils/SWCLoader';\nimport createWrapper from '../utils/createWrapper';\nimport { getSWCProps } from './utils';\nimport type { RS2IconProps } from './utils';\nimport interopRequireDefault from '../utils/interopRequireDefault';\nimport type { ProviderConfig } from '../utils/ThemeContext';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Visibility: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Icon/Visibility')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n\n    swcLoader = new SWCLoader(\n        ['sp-icon-visibility'],\n        async (config: ProviderConfig) => {\n            if (config.spectrumTheme === 'express') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const xIcon = await import(\n                    /* webpackChunkName: \"XIconVisibility\" */\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    '@hz/x-icons/src/components/IconVisibility.js'\n                );\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                return [xIcon.IconVisibility];\n            }\n\n            return [\n                (\n                    await import(\n                        /* webpackChunkName: \"SpIconVisibility\" */\n                        '@ccx-public/spectrum-web-component-fallbacks/dist/icons-workflow/src/elements/IconVisibility.js'\n                    )\n                ).IconVisibility,\n            ];\n        }\n    );\n\n}\n\nconst Visibility = createWrapper<IconVisibility, RS2IconProps>({\n    displayName: 'Visibility',\n    fallback: RS2Visibility,\n    swcLoader,\n    swcProps: getSWCProps,\n    tagName: 'sp-icon-visibility',\n});\n\nexport default Visibility;\n/* eslint-enable prettier/prettier */\n","import Add from '@ccx-public/spectrum-wrapper/Icon/Add';\nimport AddCircle from '@ccx-public/spectrum-wrapper/Icon/AddCircle';\nimport Alert from '@ccx-public/spectrum-wrapper/Icon/Alert';\nimport Building from '@ccx-public/spectrum-wrapper/Icon/Building';\nimport Browse from '@ccx-public/spectrum-wrapper/Icon/Browse';\nimport Brush from '@ccx-public/spectrum-wrapper/Icon/Brush';\nimport CCLibrary from '@ccx-public/spectrum-wrapper/Icon/CCLibrary';\nimport Checkmark from '@ccx-public/spectrum-wrapper/Icon/Checkmark';\nimport ChevronDown from '@ccx-public/spectrum-wrapper/Icon/ChevronDown';\nimport ChevronLeft from '@ccx-public/spectrum-wrapper/Icon/ChevronLeft';\nimport ChevronRight from '@ccx-public/spectrum-wrapper/Icon/ChevronRight';\nimport ClassicGridView from '@ccx-public/spectrum-wrapper/Icon/ClassicGridView';\nimport Close from '@ccx-public/spectrum-wrapper/Icon/Close';\nimport Cloud from '@ccx-public/spectrum-wrapper/Icon/Cloud';\nimport CloudDisconnected from '@ccx-public/spectrum-wrapper/Icon/CloudDisconnected';\nimport CloudError from '@ccx-public/spectrum-wrapper/Icon/CloudError';\nimport ColorPalette from '@ccx-public/spectrum-wrapper/Icon/ColorPalette';\nimport Date from '@ccx-public/spectrum-wrapper/Icon/Date';\nimport Delete from '@ccx-public/spectrum-wrapper/Icon/Delete';\nimport DownloadFromCloudOutline from '@ccx-public/spectrum-wrapper/Icon/DownloadFromCloudOutline';\nimport Edit from '@ccx-public/spectrum-wrapper/Icon/Edit';\nimport Filter from '@ccx-public/spectrum-wrapper/Icon/Filter';\nimport FilterCheck from '@ccx-public/spectrum-wrapper/Icon/FilterCheck';\nimport Flag from '@ccx-public/spectrum-wrapper/Icon/Flag';\nimport Folder from '@ccx-public/spectrum-wrapper/Icon/Folder';\nimport FolderAdd from '@ccx-public/spectrum-wrapper/Icon/FolderAdd';\nimport FolderOpen from '@ccx-public/spectrum-wrapper/Icon/FolderOpen';\nimport Globe from '@ccx-public/spectrum-wrapper/Icon/Globe';\nimport GlobeSearch from '@ccx-public/spectrum-wrapper/Icon/GlobeSearch';\nimport HelpOutline from '@ccx-public/spectrum-wrapper/Icon/HelpOutline';\nimport Image from '@ccx-public/spectrum-wrapper/Icon/Image';\nimport Invite from '@ccx-public/spectrum-wrapper/Icon/Invite';\nimport Info from '@ccx-public/spectrum-wrapper/Icon/Info';\nimport InfoOutline from '@ccx-public/spectrum-wrapper/Icon/InfoOutline';\nimport Link from '@ccx-public/spectrum-wrapper/Icon/Link';\nimport LinkOut from '@ccx-public/spectrum-wrapper/Icon/LinkOut';\nimport LockClosed from '@ccx-public/spectrum-wrapper/Icon/LockClosed';\nimport Magnify from '@ccx-public/spectrum-wrapper/Icon/Magnify';\nimport More from '@ccx-public/spectrum-wrapper/Icon/More';\nimport OpenIn from '@ccx-public/spectrum-wrapper/Icon/OpenIn';\nimport Organisations from '@ccx-public/spectrum-wrapper/Icon/Organisations';\nimport PublishRemove from '@ccx-public/spectrum-wrapper/Icon/PublishRemove';\nimport RailRightClose from '@ccx-public/spectrum-wrapper/Icon/RailRightClose';\nimport Refresh from '@ccx-public/spectrum-wrapper/Icon/Refresh';\nimport Rename from '@ccx-public/spectrum-wrapper/Icon/Rename';\nimport Settings from '@ccx-public/spectrum-wrapper/Icon/Settings';\nimport ShoppingCart from '@ccx-public/spectrum-wrapper/Icon/ShoppingCart';\nimport Share from '@ccx-public/spectrum-wrapper/Icon/Share';\nimport Shop from '@ccx-public/spectrum-wrapper/Icon/Shop';\nimport ShowMenu from '@ccx-public/spectrum-wrapper/Icon/ShowMenu';\nimport SortOrderDown from '@ccx-public/spectrum-wrapper/Icon/SortOrderDown';\nimport SortOrderUp from '@ccx-public/spectrum-wrapper/Icon/SortOrderUp';\nimport Text from '@ccx-public/spectrum-wrapper/Icon/Text';\nimport TextParagraph from '@ccx-public/spectrum-wrapper/Icon/TextParagraph';\nimport User from '@ccx-public/spectrum-wrapper/Icon/User';\nimport UserGroup from '@ccx-public/spectrum-wrapper/Icon/UserGroup';\nimport UserLock from '@ccx-public/spectrum-wrapper/Icon/UserLock';\nimport ViewList from '@ccx-public/spectrum-wrapper/Icon/ViewList';\nimport Visibility from '@ccx-public/spectrum-wrapper/Icon/Visibility';\n\n// TODO: Match fallback icon names to spectrum icon names\nexport default {\n    ActivateFonts: DownloadFromCloudOutline,\n    ActivateFontsSpinner: Refresh,\n    Add,\n    Add12: Add,\n    Add14: Add,\n    AddBrush: Brush,\n    AddCircle,\n    AddGroup: FolderAdd,\n    AddParagraphStyle: TextParagraph,\n    AddText: Text,\n    Alert,\n    Back: ChevronLeft,\n    Browse,\n    Building,\n    CCLibrary,\n    CCLibrary16: CCLibrary,\n    CCXCreateColor: ColorPalette,\n    CCXCreateFont: Text,\n    CCXCreateImage: Image,\n    Checkmark,\n    ChevronDownMedium: ChevronDown,\n    ChevronDownSmall: ChevronDown,\n    ChevronLeftMedium: ChevronLeft,\n    ChevronLeftSmall: ChevronLeft,\n    ChevronRightMedium: ChevronRight,\n    ChevronRightSmall: ChevronRight,\n    Close,\n    Cloud,\n    Date,\n    Delete,\n    DownArrow: ChevronDown,\n    Edit,\n    Error: Alert,\n    Filter,\n    Filter16: Filter,\n    FilterApplied: FilterCheck,\n    Flag,\n    Folder,\n    FolderOpen,\n    Globe,\n    GlobeSearch,\n    GridView: ClassicGridView,\n    Group: UserGroup,\n    HelpOutline,\n    Info,\n    InfoOutline,\n    Invite,\n    Leave: RailRightClose,\n    Link: LinkOut,\n    LinkedLibrary: Link,\n    ListView: ViewList,\n    Lock: LockClosed,\n    Magnify,\n    More,\n    Next: ChevronRight,\n    OpenIn,\n    Organisations,\n    Plus: Add,\n    PublishRemove,\n    Question: HelpOutline,\n    ReadOnly: UserLock,\n    Rename,\n    Settings,\n    ShareAssets: Share,\n    Shop,\n    ShoppingCart,\n    ShowMenu,\n    Sort: SortOrderDown,\n    SortDescending: SortOrderUp,\n    SyncAlert: CloudError,\n    SyncError: CloudDisconnected,\n    SyncDefault: Cloud,\n    SyncingSpinner: Refresh,\n    User,\n    UserGroup,\n    Visibility\n};\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { reaction, observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport classNames from 'classnames';\nimport environment from 'app/js/environment';\nimport configuration from 'app/js/config/configuration';\nimport { default as SpectrumIconRegistry } from './spectrumIconRegistry';\n\nconst icons = require.context('../../../images/icons', false, /.svg$/);\nconst loadedSpritesheetCache = {};\n\n@observer\nexport default class Icon extends React.Component {\n    static defaultProps = {\n        onClick: () => {}\n    };\n\n    static propTypes = {\n        width: PropTypes.number,\n        height: PropTypes.number.isRequired,\n        id: PropTypes.string.isRequired,\n        onClick: PropTypes.func,\n        className: PropTypes.string,\n        slot: PropTypes.string\n    };\n\n    componentDidMount() {\n        if (environment.useSVGPolyfill) {\n            this._updateIconReaction = reaction(\n                () => this._svg && this.icon.url,\n                () => this._loadSVG(),\n                { fireImmediately: true }\n            );\n        }\n    }\n\n    componentWillUnmount() {\n        if (this._updateIconReaction) {\n            this._updateIconReaction();\n            delete this._updateIconReaction;\n        }\n    }\n\n    get dataTestId() {\n        return `panel-icon-${this.iconId}`;\n    }\n\n    get icon() {\n        return icons(`./${this.iconId}.svg`).default;\n    }\n\n    get _width() {\n        return this.props.width || this.props.height;\n    }\n\n    get iconId() {\n        return configuration.currentProduct.config.iconOverrides?.[this.props.id] ?? this.props.id;\n    }\n\n    _loadSVG() {\n        const [ url, id ] = this.icon.url.split('#');\n\n        if (!loadedSpritesheetCache[url]) {\n            loadedSpritesheetCache[url] = fetch(url)\n                .then(response => response.text())\n                .then(responseText => {\n                    const cachedDocument = document.implementation.createHTMLDocument('');\n                    cachedDocument.body.innerHTML = responseText;\n                    return cachedDocument;\n                });\n        }\n\n        loadedSpritesheetCache[url].then(cachedDocument => {\n            // Component may have been unloaded during the fetch\n            if (!this._svg) {\n                return;\n            }\n\n            // Get the SVG from the spritesheet\n            const iconSVG = cachedDocument.getElementById(id);\n            if (!iconSVG) { return; }\n\n            // Remove existing children of SVG element\n            while (this._svg.firstChild) {\n                this._svg.removeChild(this._svg.lastChild);\n            }\n\n            // Make a new fragment and copy the target icon into it:\n            const fragment = document.createDocumentFragment();\n            for (let clone = iconSVG.cloneNode(!0); clone.childNodes.length;) {\n                const ownNode = document.adoptNode(clone.firstChild, true);\n                fragment.appendChild(ownNode);\n            }\n\n            // Add to SVG element\n            this._svg.appendChild(fragment);\n        });\n    }\n\n    @observable.ref _svg;\n    _setSVGRef = element => this._svg = element;\n\n    render() {\n        /* Note: Ensure SVGs use `style=\"fill: #2294e3\"` attribute instead of `fill=\"#2294e3\"`\n        attribute, to ensure the fallback `{ fill: 'currentColor' }` style doesn't override it. */\n        const fallback = <svg data-test-id=\"icon-svg\" width={ this._width } height={ this.props.height } viewBox={ this.icon.viewBox } style={ { fill: 'currentColor' } } ref={ this._setSVGRef } >\n            { !environment.useSVGPolyfill && !environment.useSVGLegacyHref && <use data-test-id=\"icon-link\" href={ this.icon.url }></use> }\n            { environment.useSVGLegacyHref && <use data-test-id=\"icon-link\" xlinkHref={ this.icon.url }></use>}\n        </svg>;\n\n        const iconProps = { ...this.props, icon: configuration.SPECTRUM_ICONS_MAP[this.iconId] || this.iconId, width: this._width, style: { width: this._width, height: this.props.height }, className: null };\n        const SpectrumIcon = SpectrumIconRegistry[this.iconId];\n\n        return (\n            <div data-test-id={ this.dataTestId } key={ this.iconId } className={ classNames(this.props.className, 'panel-icon') } onClick={ this.props.onClick } style={{ width: this._width, height: this.props.height }} slot={ this.props.slot }>\n                {SpectrumIcon ? <SpectrumIcon dir=\"ltr\" fallback={fallback} { ...iconProps } /> : fallback}\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { computed, reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport { translate } from 'app/js/managers/translationManager';\nimport environment from 'app/js/environment';\nimport { getLibrarySharingString } from 'app/js/utils/libraryUtils';\nimport { canEditInSource, editInSource, getDocumentName } from 'app/js/utils/editOriginalUtils';\nimport librarySizeManager from 'app/js/managers/librarySizeManager';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport PropTypes from 'prop-types';\nimport ElementModel from 'app/js/models/ElementModel';\nimport { getLocalizedDate } from 'app/js/managers/translationManager';\nimport EditableDescription from 'app/js/components/editable-names/EditableDescription';\n\nconst formatProperties = (properties) => {\n    return properties.map(prop => {\n        const testId = `info-panel-detail-row-${prop.label.toLowerCase().replace(/[^0-9a-z]/ig, '-')}`;\n        const value = prop.onClick\n            ? <div className=\"details-value clickable\" data-test-id=\"source-doc-link\" onClick={ prop.onClick }>{ prop.value }</div>\n            : <div className=\"details-value\" data-test-id={`details-value-${testId}`}>{ prop.value }</div>;\n\n        return <div className=\"details-row\" key={ prop.label } data-test-id={ testId }>\n            <div className=\"details-label\" data-test-id={`details-label-${testId}`}>{ prop.label }</div>\n            { value }\n        </div>;\n    });\n};\n\n@observer\nexport default class InfoPanelView extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    componentDidMount() {\n        this.disposeStockReaction = reaction(() => this.element, () => this.updateStockData());\n        this.updateStockData();\n        // Since collaboration data is library specific, not element specific,\n        // we only need to update the collaboration data when the current library changes\n        this.context.libraryManager.fetchLibraryCollaborations(this.currentLibrary);\n    }\n\n    componentWillUnmount() {\n        this.disposeStockReaction();\n    }\n\n    static propTypes = {\n        element: PropTypes.instanceOf(ElementModel)\n    }\n\n    updateStockData = () => {\n        if (this.element && AdobeStockUtils.isStockAsset(this.element)) {\n            AdobeStockUtils.updateStockMetadata(this.element);\n        }\n    }\n\n    get element() {\n\n        if (this.props && this.props.element) {\n            return this.props.element;\n        }\n\n        if (this.currentLibrary && elementSelectionState.selection.length >= 1) {\n            return elementSelectionState.selection[elementSelectionState.selection.length - 1];\n        }\n    }\n\n    get currentLibrary() {\n        if (this.props && this.props.element) {\n            return this.props.element.library;\n        }\n\n        return this.context.libraryManager.currentLibrary;\n    }\n\n    get header() {\n        let title;\n        let subtitle;\n        let description;\n\n        if (this.element) {\n            title = this.element.name;\n            const elementType = (elementConfiguration.getExtension(this.element) || translate(elementConfiguration.getTypeName(this.element.type, true)));\n            subtitle = elementType.toLocaleUpperCase(environment.getLocale());\n            description = <EditableDescription element={ this.element } placeholder={ translate('DL_DESCRIPTION_PLACEHOLDER') } className=\"info-panel-editable-description\" iconHeight={ 16 } />;\n        } else {\n            title = this.currentLibrary.name;\n            subtitle = translate('DL_INFO_LIBRARY').toLocaleUpperCase(environment.getLocale());\n        }\n\n        return <>\n            <div className=\"info-panel-header\">\n                <div className=\"info-panel-header-title\" data-test-id=\"info-panel-header-title\">{ title }</div>\n                <div className=\"info-panel-header-subtitle\" data-test-id=\"info-panel-header-subtitle\">{ subtitle }</div>\n                { description && <div className=\"info-panel-header-description\" data-test-id=\"info-panel-header-description\">{ description }</div> }\n            </div>\n            <div className=\"info-panel-divider\" />\n        </>;\n    }\n\n    get customControls() {\n        const Controller = elementConfiguration.getInfoControlComponent(this.element);\n        if (Controller) {\n            return <>\n                <div className=\"info-panel-controller\" data-test-id=\"info-panel-controller-wrapper\">\n                    <Controller element={ this.element } />\n                </div>\n                <div className=\"info-panel-divider\" />\n            </>;\n        }\n    }\n\n    get serviceProperties() {\n        const serviceProperties = elementConfiguration.getCustomServiceProperties(this.element);\n        if (serviceProperties.length) {\n            return <div data-test-id=\"info-panel-service-properties\" className=\"info-panel-service-properties\">{ formatProperties(serviceProperties) }</div>;\n        }\n    }\n\n    get primaryProperties() {\n        let primaryProperties;\n        if (!this.element) {\n            const numElements = this.currentLibrary.elements.length;\n            primaryProperties = [\n                {\n                    label: translate('DL_INFO_SHARING'),\n                    value: getLibrarySharingString(this.currentLibrary)\n                },\n                {\n                    label: translate('DL_INFO_SIZE'),\n                    value: (<div>\n                        <div>{ librarySizeManager.getSizeAsString(this.currentLibrary) }</div>\n                        <div>{ translate(numElements === 1 ? 'DL_INFO_ELEMENT_COUNT_SINGULAR' : 'DL_INFO_ELEMENT_COUNT_PLURAL', { numElements }) }</div>\n                    </div>)\n                }\n            ];\n        } else {\n            primaryProperties = elementConfiguration.getCustomPanelInfoPrimaryProperties(this.element);\n        }\n\n        if (primaryProperties.length) {\n            return <div data-test-id=\"info-panel-primary-properties\" className=\"info-panel-primary-properties\">{ formatProperties(primaryProperties) }</div>;\n        }\n    }\n\n    get subProperties() {\n        const subProperties = elementConfiguration.getCustomPanelInfoSubProperties(this.element);\n        if (subProperties.length) {\n            return <div data-test-id=\"info-panel-sub-properties\" className=\"info-panel-sub-properties\">{ formatProperties(subProperties) }</div>;\n        }\n    }\n\n    get createdModifiedProperties() {\n        const item = this.element || this.currentLibrary;\n        let createdValue = getLocalizedDate(new Date(item.created));\n        let modifiedValue = getLocalizedDate(new Date(item.modified));\n        const collaborators = this.currentLibrary.collaborators;\n\n        if (collaborators) {\n            const creator = collaborators.find(collab => collab.id === item.createdBy);\n            if (creator) {\n                createdValue = <div>\n                    <div>{createdValue}</div>\n                    <div>{ translate('DL_INFO_CHANGE_BY', { name: creator.name || creator.email }) }</div>\n                </div>;\n            }\n\n            const modifier = collaborators.find(collab => collab.id === item.modifiedBy);\n\n            if (modifier) {\n                modifiedValue = <div>\n                    <div>{modifiedValue}</div>\n                    <div>{ translate('DL_INFO_CHANGE_BY', { name: modifier.name || modifier.email }) }</div>\n                </div>;\n            }\n        }\n        const createdModifiedProps = [\n            {\n                label: translate('DL_INFO_CREATED'),\n                value: createdValue\n            },\n            {\n                label: translate('DL_INFO_MODIFIED'),\n                value: modifiedValue\n            },\n        ];\n\n        if (item.library) {\n            createdModifiedProps.push(\n                {\n                    label: translate('DL_INFO_LIBRARY'),\n                    value: item.library.name\n                }\n            );\n        }\n\n        // Designs show Source listed without a divider - not sure if it makes more sense to have a section divider though\n        if (canEditInSource(this.currentLibrary)) {\n            createdModifiedProps.push(\n                {\n                    label: translate('DL_INFO_SOURCE'),\n                    value: getDocumentName(this.currentLibrary),\n                    onClick: () => editInSource(this.currentLibrary)\n                }\n            );\n        }\n\n        return <div data-test-id=\"info-panel-created-modified-properties\" className=\"info-panel-created-modified-properties\">{ formatProperties(createdModifiedProps) }</div>;\n    }\n\n    get propertiesList() {\n        return <>\n            <div className=\"info-panel-properties-list\" data-test-id=\"info-panel-properties-list\">\n                { this.element && this.serviceProperties }\n                { this.primaryProperties }\n                { this.element && this.subProperties }\n            </div>\n            <div className=\"info-panel-divider\" />\n            <div className=\"info-panel-created-modified-list\">\n                { this.createdModifiedProperties }\n            </div>\n        </>;\n    }\n\n    @computed get locale() {\n        return environment.getLocale();\n    }\n\n    render() {\n        if (!this.element && !this.currentLibrary) {\n            return null;\n        }\n\n        return <div className=\"info-panel\" data-test-id=\"info-panel-view\" lang={ this.locale }>\n            { !this.context.viewState.isOneUpMode() && this.header }\n            { this.element && this.customControls }\n            { this.propertiesList }\n        </div>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport { translate } from 'app/js/managers/translationManager';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport metrics from 'app/js/interface/metrics';\nimport configuration from 'app/js/config/configuration';\nimport Icon from 'app/js/components/Icon';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport classNames from 'classnames';\nimport Tooltip from 'app/js/components/Tooltip';\n\n/**\n * Element section header for viewBy state: type or role.\n * Also used for group name in Document Assets search in XD.\n */\n\n@observer\nexport default class ElementTypeHeader extends React.Component {\n\n    static defaultProps = {\n        isRole: false,\n        showAdd: false,\n        onClickAdd: () => {}\n    };\n    static contextType = LibrariesContext;\n    static propTypes = {\n        type: PropTypes.string.isRequired, // type, role usage (e.g. logo), or the localization string for a group name in Document Assets in XD\n        isRole: PropTypes.bool, // whether the type is a role\n        showAdd: PropTypes.bool, // whether to show an add button in the header\n        disableAdd: PropTypes.bool, // whether to disabled the add button in the header\n        onClickAdd: PropTypes.func // callback for when add button is clicked\n    };\n\n    @computed get collapsed() {\n        return this.context.viewState.isTypeCollapsed(this.props.type);\n    }\n\n    @computed get isDocumentAssetsType() {\n        return this.context.viewState.isDocumentSearchType() || this.context.viewState.isDocumentSearchMode();\n    }\n\n    get isCollapseDisabled() {\n        const collapsedSections = configuration.currentProduct.config.disabledCollapseSectionIds;\n        return collapsedSections && collapsedSections.length;\n    }\n\n    toggleCollapsed = () => {\n        if (this.isCollapseDisabled) {\n            return;\n        }\n        const eventSubType = this.collapsed ? 'expand-category' : 'collapse-category';\n        metrics.reportEvent('Navigation', 'Library Panel', 'click', eventSubType);\n        this.context.viewState.setTypeCollapsed(this.props.type, !this.collapsed);\n    }\n\n    get isGroupLocalizationString() {\n        return this.isDocumentAssetsType && configuration.currentProduct.config.defaultViewByState === 'group';\n    }\n\n    // Display name for the element type\n    get displayName() {\n        if (this.props.isRole) { return translate(`DL_ROLE_${ this.props.type.toUpperCase() }`); }\n        return translate(this.isGroupLocalizationString ? this.props.type : elementConfiguration.getTypeName(this.props.type));\n    }\n\n    get testId() {\n        return `category-header-${(this.isDocumentAssetsType || this.props.isRole) ? this.props.type : elementConfiguration.getShortType(this.props.type) }`;\n    }\n\n    get collapseArrow() {\n        if (this.isCollapseDisabled) {\n            return;\n        }\n\n        return <div className=\"panel-chevron-container-icon\">\n            <Icon id={ this.collapsed ? 'ChevronRightSmall' : 'ChevronDownSmall' } height={ configuration.currentProduct.config.collapseGroupChevronHeight?.() || 8 }/>\n        </div>;\n    }\n\n    onClickAdd = (event) => {\n        event.stopPropagation();\n        if (this.props.disableAdd) { return; }\n        this.props.onClickAdd(event);\n    }\n\n    get addButton() {\n        if (!this.props.showAdd) { return; }\n        const tooltipContent = this.props.disableAdd ? translate('DL_INSERT_TOOLTIP_LIMIT') : '';\n        const classes = classNames('type-header-add-button', { disabled: this.props.disableAdd });\n        return <Tooltip content={ tooltipContent } placement=\"top\">\n            <div className={ classes } onClick={this.onClickAdd} data-test-id={ `type-header-add-button-${this.displayName.toLowerCase()}` }>\n                <Icon id=\"AddCircleOutline\" height={ 18 }/>\n            </div>\n        </Tooltip>;\n    }\n\n    render() {\n        return <div data-test-id={ this.testId } className=\"panel-type-header\">\n            <div data-test-id={ `${this.testId}-toggle` } onClick={ this.toggleCollapsed } className=\"panel-type-header-toggle-zone\">\n                { this.collapseArrow }\n                <div data-test-id={ `${this.testId}-title` } className=\"panel-type-header-text\">{ this.displayName }</div>\n            </div>\n            { this.addButton }\n        </div>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\n\n@observer\nexport default class TimestampHeader extends React.Component {\n\n    static propTypes = {\n        time: PropTypes.number.isRequired\n    };\n\n    get title() {\n        // Since this is only used by the debug \"show removed elements in panel\" mode,\n        // we just use the built-in date formatting. If we were to release something, we'd\n        // want to take more care over the formatting.\n        // (this removes the trailing :00 because all the dates we pass in are rounded to the\n        // nearest minute).\n        return new Date(this.props.time).toLocaleString().replace(':00 ', ' ');\n    }\n\n    get testId() {\n        return `timestamp-header-${ this.props.time }`;\n    }\n\n    render() {\n        return <div data-test-id={ this.testId } className=\"panel-timestamp-header\">\n            <div data-test-id={ `${this.testId}-title` }>{ this.title }</div>\n        </div>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport EditableGroupPath from 'app/js/components/path-view/EditableGroupPath';\nimport { Group } from '@cclibraries/cc-libraries-js';\nimport DocumentGroup from 'app/applications/SPRK/js/models/documentAssets/DocumentGroup';\n\n@observer\nexport default class GroupTreeView extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        group: PropTypes.oneOfType([ PropTypes.instanceOf(Group), PropTypes.instanceOf(DocumentGroup) ]).isRequired,\n        disableEditing: PropTypes.bool\n    };\n\n    static defaultProps = {\n        disableEditing: false\n    }\n\n    get pathState() {\n        return this.context.viewManager.pathState;\n    }\n\n    get isEditing() {\n        return this.context.viewManager.editPathGroup === this.props.group;\n    }\n\n    handleDoubleClick = () => {\n        if (this.props.disableEditing) {\n            return;\n        }\n        this.context.viewManager.startEditPath(this.props.group);\n    }\n\n    @computed get treeView() {\n        return (\n            <div\n                data-test-id=\"panel-group-tree-view\"\n                className=\"panel-group-container-text\"\n                onDoubleClick={this.handleDoubleClick}\n            >\n                <span className=\"panel-group-path-view-head\">{ this.props.group.name }</span>\n            </div>\n        );\n    }\n\n    render() {\n        if (!this.isEditing) { return this.treeView; }\n        return <EditableGroupPath pathState={this.pathState} autocomplete={false} />;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport { translate } from 'app/js/managers/translationManager';\nimport { isGroupEmpty } from 'app/js/utils/groupUtils';\nimport configuration from 'app/js/config/configuration';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport GroupPathView from 'app/js/components/path-view/GroupPathView';\nimport GroupTreeView from 'app/js/components/path-view/GroupTreeView';\nimport { Group } from '@cclibraries/cc-libraries-js';\nimport DocumentGroup from 'app/applications/SPRK/js/models/documentAssets/DocumentGroup';\n\n@observer\nexport default class GroupHeaderView extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        // group will be a Group or { id: '*' } for the Ungrouped section.\n        group: PropTypes.oneOfType([ PropTypes.object, Group, DocumentGroup ]).isRequired,\n        viewMode: PropTypes.oneOf([ 'list', 'grid' ]),\n        viewByGroupMode: PropTypes.oneOf([ 'path', 'tree' ])\n    };\n\n    static defaultProps = {\n        viewMode: 'grid',\n        viewByGroupMode: 'tree',\n    };\n\n    get isUngrouped() {\n        return this.props.group.id === '*';\n    }\n\n    get usePathView() {\n        if (this.props.viewByGroupMode !== 'path') { return false; }\n        return !this.props.group.disableEditing;\n    }\n\n    @computed get pathViewHeader() {\n        // We don't need to route the 'ungrouped' group to path view since it's a simple header\n        if (this.props.group === configuration.UNGROUPED_GROUP) {\n            return <div className=\"panel-group-header root last-of-type\">{translate('DL_GROUP_UNGROUPED')}</div>;\n        }\n        // We never want groups to get a recycled path node.\n        return <GroupPathView group={this.props.group} disableEditing={configuration.currentProduct.config.disableEditPathOperation} />;\n    }\n\n    @computed get treeViewHeader() {\n        return <GroupTreeView group={ this.props.group } disableEditing={configuration.currentProduct.config.disableGroupViewRename || this.props.group.disableEditing} />;\n    }\n\n    @computed get ungroupedHeader() {\n        const ungroupedEmptyMessage = isGroupEmpty(this.props.group) && configuration.currentProduct.config.emptyUngroupedCustomMessage;\n        return (\n            <div data-test-id=\"ungrouped-name\" className=\"panel-group-container-text panel-group-header root last-of-type\">\n                { translate('DL_GROUP_UNGROUPED') }\n                { ungroupedEmptyMessage && <span className=\"panel-group-text-empty-ungrouped\">{ translate(ungroupedEmptyMessage) }</span> }\n            </div>\n        );\n    }\n\n    get header() {\n        if (this.isUngrouped) {\n            return this.ungroupedHeader;\n        }\n        if (this.usePathView) {\n            return this.pathViewHeader;\n        }\n        return this.treeViewHeader;\n    }\n\n    render() {\n        return (\n            <div\n                data-test-id={`group-title-container-${this.props.viewByGroupMode}`}\n                className={classNames(`group-title-container-${this.props.viewMode}`, `group-title-container-${this.props.viewByGroupMode}`, { ungrouped: this.isUngrouped })}\n            >\n                { this.header }\n            </div>\n        );\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport { translate } from 'app/js/managers/translationManager';\nimport dragManager from 'app/js/managers/dragManager';\nimport { getContextMenu } from 'app/js/menus/groupContextMenu';\nimport metrics from 'app/js/interface/metrics';\nimport configuration from 'app/js/config/configuration';\nimport Icon from 'app/js/components/Icon';\nimport HTMLText from './HTMLText';\nimport * as DragUtils from 'app/js/utils/dragUtils';\nimport Button from 'app/js/components/Button';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport elementSelectionState from '../state/elementSelectionState';\nimport groupSelectionState from '../state/groupSelectionState';\nimport environment from '../environment';\nimport * as GroupUtils from 'app/js/utils/groupUtils';\nimport menuManager from '../managers/menuManager';\nimport GroupHeaderView from 'app/js/components/GroupHeaderView';\nimport { Group } from '@cclibraries/cc-libraries-js';\nimport DocumentGroup from 'app/applications/SPRK/js/models/documentAssets/DocumentGroup';\n\n@observer\nexport default class GroupView extends React.Component {\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        // group will be a Group or { id: '*' } for the Ungrouped section.\n        group: PropTypes.oneOfType([ PropTypes.object, PropTypes.instanceOf(Group), PropTypes.instanceOf(DocumentGroup) ]).isRequired,\n        height: PropTypes.number,\n        viewMode: PropTypes.oneOf([ 'grid', 'list' ]),\n        style: PropTypes.object,\n        hideHeader: PropTypes.bool\n    };\n\n    @computed get isCollapsed() {\n        return this.context.viewState.isGroupCollapsed(this.props.group.id);\n    }\n\n    @computed get isSelected() {\n        return groupSelectionState.isSelected(this.props.group);\n    }\n\n    @computed get isHighestSelected() {\n        // if this group is selected, and either it is a root or it has no parents that are also selected, then true\n        return this.isSelected && (!this.props.group.parent || !GroupUtils.getAllAncestors(this.props.group).find(group => groupSelectionState.isSelected(group)));\n    }\n\n    get isUngrouped() {\n        return !this.props.group || this.props.group.id === '*';\n    }\n\n    get testId() {\n        return `panel-group-container-${ this.isUngrouped ? 'ungrouped' : this.props.group.id }`;\n    }\n\n    get icon() {\n        const collapsedSections = configuration.currentProduct.config.disabledCollapseSectionIds;\n        if (this.isUngrouped || (collapsedSections && collapsedSections.length)) {\n            return;\n        }\n\n        const classes = classNames('panel-chevron-container-icon', 'group');\n        return <div data-test-id=\"group-expander-icon\" className={ classes } onClick={ this.onToggleCollapse }>\n            <Icon id={ this.isCollapsed ? 'ChevronRightSmall' : 'ChevronDownSmall' } height={ configuration.currentProduct.config.collapseGroupChevronHeight?.() || 8 }/>\n        </div>;\n    }\n\n    onToggleCollapse = (mouseEvent) => {\n        mouseEvent.stopPropagation();\n        menuManager.closeContextMenu();\n        const isWindowsOS = environment.isWindowsOS();\n        const eventSubType = this.isCollapsed ? 'expand-group' : 'collapse-group';\n        metrics.reportGroupEvent('Navigation', 'Library Panel', 'click', eventSubType, this.props.group);\n        const initiallyCollapsed = this.isCollapsed;\n\n        const customCollapseGroupWithModifierKey = configuration.currentProduct.config.customCollapseGroupWithModifierKey;\n        if (customCollapseGroupWithModifierKey && customCollapseGroupWithModifierKey(mouseEvent, this.props.group)) {\n            /* The event is handled inside the custom product specific handler. Hence return. */\n            return;\n        }\n\n        const optionKey = (mouseEvent.altKey || (isWindowsOS && environment.hasUXPWindowsCTRLClickBug && mouseEvent.metaKey));\n        // in path view, a normal click should expand all non-meaningful children until we get to a meaningful group\n        const expandNonMeaningfulChildren = !optionKey && initiallyCollapsed && this.context.viewState.viewByGroupMode === configuration.VIEW_BY_GROUP_MODES.PATH;\n        this.context.viewState.setGroupCollapsed(this.props.group.id, !initiallyCollapsed);\n        if (optionKey || expandNonMeaningfulChildren) {\n            GroupUtils.toggleCollapseChildrenState(this.props.group, {\n                shouldCollapse: !initiallyCollapsed,\n                expandNonMeaningfulChildren,\n            });\n        }\n    }\n\n    onAddClick = (mouseEvent) => {\n        metrics.reportEvent('Add Assets', 'Element', 'click', 'add', { event: { value: 'single', count: 1 } }, this.context.libraryManager.currentLibrary);\n        this.props.group.addButtonAction();\n        mouseEvent.stopPropagation();\n        // TODO: Wrap returned assets (not implemented), and set selection to them.\n    }\n\n    get addAssetsButton() {\n        const group = this.props.group;\n        return <Button\n            disabled={ !group.isAddButtonActive }\n            data-test-id=\"panel-group-add-assets-button\"\n            onClick={ this.onAddClick }\n            tooltip={ group.addButtonTooltip }\n            style={{ padding: '2px', marginRight: '16px' } }\n        >\n            <Icon id=\"Add12\" height={12} />\n        </Button>;\n    }\n\n    handleGroupHeaderClick = (mouseEvent) => {\n        // click on ungrouped area should not do anything, we just let mouse event to propagate so it clears any pre-existing group selection\n        if (this.isUngrouped || configuration.currentProduct.config.disableGroupViewHeaderClick) {\n            return;\n        }\n\n        mouseEvent.stopPropagation();\n        const enableMultiSelect = this.context.viewState.getState().enableMultiSelect;\n        const isWindowsOS = environment.isWindowsOS();\n        const isOutsideSelection = !groupSelectionState.isSelected(this.props.group);\n\n        if (((!isWindowsOS && mouseEvent.metaKey) || (isWindowsOS && mouseEvent.ctrlKey) || (isWindowsOS && environment.hasUXPWindowsCTRLClickBug && mouseEvent.metaKey))\n            && isOutsideSelection) {\n            // Toggle selection on this group (and children)\n            // metaKey on Mac, ctrlKey on Windows\n            groupSelectionState.toggleSelection(this.props.group);\n\n            // Get all elements that are contained within current group selection\n            const descenders = GroupUtils.getAllDescendantGroups(this.props.group, true);\n            const elems = this.props.group.library.elements.filter(element => descenders.includes(element.getGroups()[0]));\n            elems.forEach(elem => elementSelectionState.toggleSelection(elem));\n        } else if (enableMultiSelect && mouseEvent.shiftKey && groupSelectionState.groupSelection.length > 0\n            && isOutsideSelection) {\n            // Hold down shift to expand range of selection to include this group, this group's descendants and elements within\n            const groupsInViewOrder = this.context.viewState.groupsInViewOrder;\n            const firstGroupSelected = groupSelectionState.groupSelection.map(group => groupsInViewOrder.indexOf(group)).reduce((x, y) => Math.min(x, y),\n                this.props.group.library.getGroups().length - 1);\n            groupSelectionState.setSelectionRange(this.props.group);\n\n            const currentGroupIndex = groupsInViewOrder.indexOf(this.props.group);\n            const getFirst = () => GroupUtils.findFirstElement(this.props.group);\n            const getLast = () => GroupUtils.findLastElement(this.props.group);\n            // if the group you're selecting is above the current group, then you want to use first element in target group\n            // if the group you're selecting is below the current select, then we want the last element in target group\n            const elemToSelect = currentGroupIndex < firstGroupSelected ? getFirst() : getLast();\n            elemToSelect && !elementSelectionState.selection.includes(elemToSelect) && elementSelectionState.setSelectionRange(elemToSelect, false, true, false);\n        } else {\n            groupSelectionState.clearSelection();\n            // Select this group, all descendant groups, and all elements within the groups we just selected\n            groupSelectionState.setSelection(this.props.group, true);\n            const elems = this.props.group.library.elements.filter(element => groupSelectionState.isSelected(element.getGroups()[0]));\n            elementSelectionState.setSelection(elems, undefined, false);\n        }\n    }\n\n    handleContextMenu = (mouseEvent) => {\n        if (this.isUngrouped || configuration.currentProduct.config.disableGroupContextMenuInView) {\n            return;\n        }\n\n        this.context.viewState.setContextMenuPositionState({\n            x: mouseEvent.clientX,\n            y: mouseEvent.clientY\n        });\n\n        if (environment.setContextMenu) {\n            this.context.viewManager.stopRename();\n            mouseEvent.stopPropagation();\n            const actions = getContextMenu(this.props.group);\n            menuManager.openContextMenu(actions, mouseEvent);\n        }\n    }\n\n    handleDragStart = (dragEvent) => {\n        // For some reason, on windows even when draggable is set to false, onDragStart still goes ahead.\n        // This ugly hack should prevent that behavior and return immediately\n        if (!this.isDraggable) {\n            dragEvent.preventDefault();\n            return;\n        }\n\n        // Create callback for ghost creation\n        const populateDragImageNode = (ghostContainer) => {\n            // Create the clone\n            const dragClone = dragEvent.target.parentNode.cloneNode(true);\n            dragClone.style.opacity = 0.8;\n            dragClone.classList.add('drag-clone');\n            // Collapse the group\n            // TODO: might just use classes here once the collapse/expand of groups is done\n            dragClone.style.height = '28px';\n            // Remove empty message\n            const emptyMessage = dragClone.getElementsByClassName('panel-group-container-empty-message')[0];\n            if (emptyMessage) {\n                emptyMessage.remove();\n            }\n\n            dragClone.style.left = (dragEvent.target.clientX - dragEvent.target.clientWidth / 2) + 'px';\n            dragClone.style.top = (dragEvent.target.clientY - dragEvent.target.clientHeight / 2) + 'px';\n\n            // Append the clone\n            ghostContainer.appendChild(dragClone);\n            ghostContainer.style.width = dragEvent.target.clientWidth + 'px';\n            // Append the ghost to body\n            document.body.appendChild(ghostContainer);\n        };\n\n        try {\n            // UXP Won't allow dragging unless we set some drag data, so set something to appease this\n            dragEvent.dataTransfer.setData('text/plain', '');\n        } catch (e) {\n            // If it's IE11, this won't work, so just ignore it\n        }\n\n        // Set the allowed drag actions\n        dragEvent.dataTransfer.effectAllowed = 'move';\n        // Add blank image since windows CEP creates ghost image, but Mac does not (we do this manually)\n        const useCustomGhostImage = DragUtils.useCustomGhostImage();\n        if (useCustomGhostImage) {\n            dragEvent.dataTransfer.setDragImage(new Image(), 0, 0);\n        }\n        dragManager.handleDragStart('group', this.props.group, useCustomGhostImage ? populateDragImageNode : null);\n    }\n\n    handleDragEnd = (e) => {\n        if (configuration.currentProduct.config.missingDropEventsBug) {\n            dragManager.handleDrop(e);\n            return;\n        }\n        dragManager.handleDragEnd();\n    }\n\n    @computed get groupHeader() {\n        const library = this.context.libraryManager.currentLibrary;\n        const hasGroups = library && library.getGroups().length >= 1;\n        // Hide the header if the library has no groups, OR if all elements are in groups\n        const areSomeElementsUngrouped = library && library.elements.find((element) => element.getGroups().length === 0);\n        if (this.isUngrouped && (!hasGroups || !areSomeElementsUngrouped)) { return; }\n        return (\n            <GroupHeaderView\n                group={this.props.group}\n                viewMode={this.props.viewMode}\n                viewByGroupMode={this.context.viewState.viewByGroupMode}\n            />\n        );\n    }\n\n    createSubgroupFromEmpty = () => {\n        metrics.setExtraEventMetrics('createGroup', { content: { category: 'Empty Group' } });\n        this.context.groupActions.createSubgroup(this.props.group);\n    }\n\n    @computed get emptyGroupMessage() {\n        if (!this.isUngrouped && GroupUtils.isGroupEmpty(this.props.group) && !this.isCollapsed && !this.props.group.hideDefaultTextInEmptyGroup) {\n            let message;\n            if (this.props.group.library && !this.context.viewState.isLibraryWritable(this.props.group.library) || configuration.currentProduct.config.disableGroupEditing) {\n                message = translate('DL_EMPTY_GROUP_INSTRUCTIONS_READ_ONLY');\n            } else {\n                message = translate('DL_EMPTY_GROUP_INSTRUCTIONS_NESTED');\n            }\n            const classes = classNames('panel-group-container-empty-message', { isHighlighted: this.isHighlighted });\n            return <div className=\"panel-group-container-empty-wrapper\" data-test-id=\"panel-group-container-empty-wrapper\">\n                <div data-test-id=\"empty-group-message\" className={ classes } >\n                    { message && <HTMLText className=\"panel-group-container-empty-message-text\" linkClickMethods={ { action: this.createSubgroupFromEmpty } } html={ message } data-test-id=\"empty-group-message-text\" /> }\n                </div>\n            </div>;\n        }\n    }\n\n    get isDraggable() {\n        if (configuration.currentProduct.config.disableGroupViewDragging || this.props.group.disableEditing) {\n            return false;\n        }\n        // The user is currently editing this group so it can't be dragged.\n        const isEditing = [ this.context.viewManager.renamingItem, this.context.viewManager.editPathGroup ].includes(this.props.group);\n        return !isEditing;\n    }\n\n    get isHighlighted() {\n        const { activeDropTarget } = dragManager;\n        // Highlight this group if it's being dragged over and it would be a valid drop target.\n        if (!activeDropTarget || !activeDropTarget.group) { return false; }\n        const draggingOverGroup = activeDropTarget.group.id === this.props.group.id;\n        if (!activeDropTarget.isValidDropTarget) { return draggingOverGroup; }\n        const isValidDropTarget = activeDropTarget.isValidDropTarget(dragManager.dragData);\n        return draggingOverGroup && isValidDropTarget;\n    }\n\n    render() {\n        // want to show separator below the above if the active drop target is before the group\n        const showSeparatorAbove = dragManager.activeDropTarget && dragManager.activeDropTarget.beforeGroup === this.props.group;\n        // want to show separator below the group if the active drop target is after the group AND if it is the last group before ungrouped.\n        const showSeparatorBelow = dragManager.activeDropTarget && dragManager.activeDropTarget.afterGroup === this.props.group && dragManager.activeDropTarget.beforeGroup && dragManager.activeDropTarget.beforeGroup.id === '*';\n\n        const containerClasses = classNames('panel-group-container', {\n            'panel-group-container-ungrouped': this.isUngrouped,\n            'panel-group-container-separator-above': showSeparatorAbove,\n            'panel-group-container-separator-below': showSeparatorBelow,\n            'panel-group-container-highlight': this.isHighlighted,\n            'selected': this.isSelected,\n            'read-only': !this.context.viewState.isLibraryWritable(this.context.libraryManager.currentLibrary)\n        });\n        const headerClasses = classNames('panel-group-header-container', {\n            'selected': this.isSelected,\n            'isHighestSelected': this.isHighestSelected,\n            'isHoverable': !this.isUngrouped,\n            'root': !this.props.group.parent\n        });\n        return <div data-test-id={ this.testId } className={ containerClasses } style={ { height: this.props.height } } { ...environment.contextMenuEventListeners(this.handleContextMenu) } >\n            {\n                !this.props.hideHeader && (\n                    <div\n                        data-test-id={ `${this.testId}-header` }\n                        className={ headerClasses }\n                        onClick={ this.handleGroupHeaderClick }\n                        draggable={ !this.isUngrouped && this.isDraggable }\n                        onDragStart={ this.handleDragStart }\n                        onDragEnd={ this.handleDragEnd }\n                        style={ this.props.style }\n                    >\n                        { this.icon }\n                        { this.groupHeader }\n                        { this.props.group.displayAddButton && this.addAssetsButton }\n                    </div>\n                )\n            }\n            <div data-test-id={ `${this.testId}-content-wrapper` } className=\"panel-group-content-wrapper\" style={this.props.style}>\n                { this.emptyGroupMessage }\n            </div>\n            { environment.hasUXPScrollZIndexBug && (\n                <div data-test-id=\"uxp-scrollbar-drag-padding\" className=\"uxp-scrollbar-drag-padding\"/>\n            ) }\n        </div>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\n\nimport dragManager from 'app/js/managers/dragManager';\nimport BaseDropTarget from 'app/js/managers/dragDrop/baseDropTarget';\n\n/**\n * Debug only - indicator of the drop zone targets while dragging (green rectangles)\n */\n@observer\nexport default class DropZoneView extends React.Component {\n\n    static propTypes = {\n        target: PropTypes.instanceOf(BaseDropTarget)\n    };\n\n    render() {\n        const isActive = this.props.target.type === dragManager.dragType;\n        return isActive ? <div data-test-id=\"drop-zone-indicator\" className=\"panel-drop-zone-indicator\"/> : null;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nconst matches = (target, x, y) => {\n    return x >= target.x && x <= target.x + target.width && y >= target.y && y <= target.y + target.height;\n};\n\n// We divide the targets into a sections of 200px height, to make the lookup constant time - we only\n// need to search through the targets that overlap with the given section.\nconst SECTION_HEIGHT = 200;\n\n/**\n * Map for managing drop targets - this allows efficient searching for the drop target that contains\n * the given (x, y) coordinates. It works by dividing the targets into sections based on their\n * y coordinates.\n */\nexport default class TargetMap {\n\n    _targets = [];\n\n    push(target) {\n        const minSection = Math.floor(target.y / SECTION_HEIGHT);\n        const maxSection = Math.floor((target.y + target.height) / SECTION_HEIGHT);\n        for (let i = minSection; i <= maxSection; i++) {\n            this._targets[i] = this._targets[i] || [];\n            this._targets[i].push(target);\n        }\n    }\n\n    find(x, y, dragData) {\n        const section = Math.floor(y / SECTION_HEIGHT);\n        const targets = this._targets[section];\n        if (targets) {\n            for (let i = 0; i < targets.length; i++) {\n                const target = targets[i];\n                if (matches(target, x, y)) {\n                    // This is a valid drop target if it's valid itself or if its \"main\" target is valid.\n                    // (see `baseDropTarget.mainDropTarget` for context on a target's \"main\").\n                    // If we don't consider \"dependent\" targets as valid based on their \"main\" here, then hovering over them would\n                    // result in no target being found, causing `dragManager.activeDropTarget` to be set to null, ending the drag operation.\n                    // (think of the case when you drag a group over another in path view - the ancestors get unwrapped; what if one of the\n                    // spawned ancestors is not a valid drop target? We don't want to end the drag operation if the user drags over it!)\n                    // Note that we're not changing the `.isValidDropTarget()` implementation, so the rest of the app\n                    // would still know if this target-data pair is actually NOT a valid drop.\n                    // i.e `dragManager.handleDrop()` and `GroupView.isHighlighted` return early and don't highlight the group, respectively\n                    // if `target.isValidDropTarget(dragData)` is `false`.\n                    const isValidDropTarget = target.isValidDropTarget(dragData) || target.mainDropTarget?.isValidDropTarget(dragData);\n                    if (isValidDropTarget) {\n                        return target;\n                    }\n                }\n            }\n        }\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observable, computed, reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport BaseDropdown from 'app/js/components/panel-header/BaseDropdown';\nimport OverlayState from 'app/js/components/utils/OverlayState';\nimport { truncatePath } from 'app/js/utils/stringUtils';\nimport { getAllAncestors } from 'app/js/utils/groupUtils';\n\nconst KEYS = {\n    ARROW_UP: 'ArrowUp',\n    ARROW_DOWN: 'ArrowDown'\n};\n\n@observer\nexport default class GroupPathViewAutocomplete extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        inputEl: PropTypes.object,\n        x: PropTypes.number,\n        width: PropTypes.number\n    };\n\n    overlayState = new OverlayState({\n        ignoreScrollEvents: true,\n        onClose: () => this.handleBlur()\n    });\n\n    @observable _selection = 0;\n    @observable _lockedPath;\n\n    componentDidMount() {\n        this.disposeResetSelection = reaction(() => this.autocompleteResults, () => {\n            // Start at the top for a new set of results, unless the path is locked.\n            if (!this._lockedPath) {\n                this.setSelection(0);\n            }\n        });\n        this.registerInputEl();\n    }\n\n    componentWillUnmount() {\n        this.disposeResetSelection();\n        this.overlayState.hideOverlay();\n    }\n\n    componentDidUpdate(oldProps) {\n        // To address some UXP virtualizer z-index issues, the autocomplete overlay\n        // is displayed as a virtualized item. This makes the component lifecycle a little\n        // different from what we normally would expect from a dropdown that just mounts/unmounts as it's needed in the view.\n        // Instead, the DOM node for this dropdown will get reused for multiple edit path operations,\n        // so we need to make sure the dropdown is always tuned to the correct input box for the current edit operation.\n        if (oldProps.inputEl !== this.props.inputEl) {\n            this.registerInputEl();\n        }\n    }\n\n    registerInputEl = () => {\n        if (this.props.inputEl) {\n            // The overlay state handles closing the edit state when the user clicks away from the path.\n            this.props.inputEl.addEventListener('keydown', this.handleKeyDown);\n            this.props.inputEl.addEventListener('input', this.handleInputChange);\n            // Update the overlay manager to track clicks on the new input box.\n            this.registerOverlay();\n            this.overlayState.toggleOverlay();\n        }\n    }\n\n    unregisterInputEl = () => {\n        if (this.props.inputEl) {\n            this.props.inputEl.removeEventListener('keydown', this.handleKeyDown);\n            this.props.inputEl.removeEventListener('input', this.handleInputChange);\n        }\n    }\n\n    registerOverlay = () => {\n        if (this.dropdownEl && this.props.inputEl) {\n            this.overlayState.setParentElement([ ...this.dropdownParentEl, this.props.inputEl ]);\n        }\n    }\n\n    get dropdownParentEl() {\n        if (this.dropdownEl) {\n            return this.dropdownEl.overlayState.getParentElement();\n        }\n    }\n\n    get selectedIndex() {\n        return this._selection;\n    }\n\n    get pathState() {\n        return this.context.viewManager.pathState;\n    }\n\n    get query() {\n        if (!this.pathState.isEditing || this.hidePathHead) { return ''; }\n        // The string typed so far.\n        return this.path[this.path.length - 1]?.name;\n    }\n\n    get hidePathHead() {\n        // The user has edited the input.\n        if (!this.pathState.head.isGroup) { return false; }\n        // Hide the head for new groups.\n        return this.pathState.isNewGroup;\n    }\n\n    @computed get autocompletePath() {\n        if (this._lockedPath) { return this._lockedPath; }\n        if (this.hidePathHead) {\n            return [ ...this.pathState.matchedPath.slice(0, -1), this.pathState.getNewGroupEntry() ];\n        }\n        return this.pathState.matchedPath;\n    }\n\n    @computed get autocompleteResults() {\n        if (!this.pathState.isEditing) { return []; }\n        const autocompleteResults = this.pathState.getAutocompleteResultsForPath(this.autocompletePath);\n        // Never show new groups as autocomplete results.\n        return this.pathState.isNewGroup ? autocompleteResults.filter(g => g !== this.pathState.group) : autocompleteResults;\n    }\n\n    get path() {\n        if (!this.pathState.isEditing) { return []; }\n        if (this._lockedPath) {\n            // The locked path includes all ancestors.\n            return this._lockedPath.slice(this.pathState.maxDepth);\n        }\n        return this.pathState.livePath;\n    }\n\n    setSelection(index) {\n        this._selection = index;\n    }\n\n    acceptAutocomplete(name) {\n        const headIndex = this.pathState.livePath.length - 1;\n        // Accept the new entry and move on to the next.\n        this.pathState.updateEntry(headIndex, name);\n        this.pathState.addEntry();\n        this._lockedPath = null;\n        // Return focus to the input.\n        this.handleReturnFocus();\n    }\n\n    resetInputCursor() {\n        // Set cursor to the end of the input\n        const value = this.props.inputEl.value;\n        this.props.inputEl.setSelectionRange(value.length, value.length);\n    }\n\n    handleEnter = event => {\n        // User will use enter to finish editing\n        event.preventDefault();\n        return this.pathState.commitEdit();\n    }\n\n    getNewSelectedIndex = keyboardEventKey => {\n        const isFirstItem = this.selectedIndex === 0;\n        const isLastItem = this.selectedIndex === this.menuItems.length - 1;\n\n        if (keyboardEventKey === KEYS.ARROW_UP) {\n            return isFirstItem ? this.menuItems.length - 1 : this.selectedIndex - 1;\n        }\n        if (keyboardEventKey === KEYS.ARROW_DOWN) {\n            return isLastItem ? 0 : this.selectedIndex + 1;\n        }\n    }\n\n    handleArrowTravel = event => {\n        // User will use up and down to select autocomplete results.\n        event.preventDefault();\n        event.stopPropagation();\n        if ([ KEYS.ARROW_UP, KEYS.ARROW_DOWN ].includes(event.key)) {\n            const selectedIndex = this.getNewSelectedIndex(event.key);\n            this.setSelection(selectedIndex);\n            // The user is using the arrow keys to travel through the autocomplete results.\n            // We want to update the head to match the user's current selection,\n            // but we also want to lock the current autocomplete results\n            // so that they don't change as the user keys through them.\n            if (!this._lockedPath) {\n                // If hide autocomplete is enabled, use the parent path rather than the matched path\n                this._lockedPath = this.autocompletePath;\n            }\n            const item = this.menuItems[selectedIndex];\n            this.pathState.updateEntry(this.pathState.headIndex, item.name);\n            this.resetInputCursor();\n        }\n    }\n\n    handleInputChange = () => {\n        // The user is moving on, unlock the path.\n        this._lockedPath = null;\n    }\n\n    handleKeyDown = event => {\n        // User might use the arrow keys to travel between the path entries or to select autocomplete results.\n        if ([ KEYS.ARROW_UP, KEYS.ARROW_DOWN ].includes(event.key)) {\n            return this.handleArrowTravel(event);\n        }\n    }\n\n    handleBlur = () => {\n        if (this.pathState.isEditing) {\n            this.pathState.commitEdit();\n        }\n        this._lockedPath = null;\n    }\n\n    handleClickOnResult = group => {\n        this.acceptAutocomplete(group.name);\n    }\n\n    handleReturnFocus = () => {\n        if (this.props.inputEl) {\n            setTimeout(() => {\n                this.props.inputEl.focus();\n                this.resetInputCursor();\n            });\n        }\n    }\n\n    getPathLabel(names) {\n        // format label to show entire path, truncating according to available space in popover\n        const maxWidth = this.props.width - this.props.x;\n        const truncatedPath = truncatePath(names, { maxWidth });\n        return <div>{truncatedPath}</div>;\n    }\n\n    @computed get menuItems() {\n        // Groups that match the string typed so far.\n        const results = this.autocompleteResults ? this.autocompleteResults.map(group => {\n            const groupPath = getAllAncestors(group, true).map(group => group.name).slice(this.pathState.maxDepth);\n            return ({\n                key: group.id,\n                label: this.getPathLabel(groupPath),\n                name: group.name,\n                onClick: () => this.handleClickOnResult(group),\n            });\n        }) : [];\n\n        // The option to create a group with the string typed so far as its name.\n        const createPathNames = this.path.map(group => group.name);\n        const query = this.query.trim();\n        // If the current live path matches the name of another group from the results, that counts as a duplicate\n        const duplicate = !!(this.autocompleteResults && this.autocompleteResults.find(group => group.name === query));\n\n        const create = {\n            key: 'create',\n            label: this.getPathLabel(createPathNames),\n            name: query,\n            onClick: () => this.acceptAutocomplete(query)\n        };\n\n        // Only show \"create\" when there's user input that differs from an existing group name\n        const items = this.query && !duplicate ? [ create, ...results ] : results;\n\n        return items.map((item, index) => ({\n            ...item,\n            isSelected: this.selectedIndex === index,\n            onMouseOver: () => this.setSelection(index)\n        }));\n    }\n\n    setDropdownRef = el => {\n        if (el) {\n            this.dropdownEl = el;\n            this.registerOverlay();\n        }\n    }\n\n    render() {\n        return (\n            <BaseDropdown\n                open={!!this.menuItems.length}\n                disableUpperCaseTitle\n                ref={this.setDropdownRef}\n                data={this.menuItems}\n                className=\"panel-group-path-view-autocomplete\"\n                type=\"path-view-autocomplete\"\n            />\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { computed, reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport { Collection } from 'react-virtualized';\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport { translate } from 'app/js/managers/translationManager';\nimport dragManager from 'app/js/managers/dragManager';\nimport BaseElementModel from 'app/js/models/BaseElementModel';\nimport { reorderElements, getKeyForObject } from 'app/js/utils/libraryUtils';\nimport { debounce } from 'app/js/utils/promiseUtils';\n\nimport ElementTypeHeader from 'app/js/components/ElementTypeHeader';\nimport TimestampHeader from 'app/js/components/TimestampHeader';\nimport GroupView from 'app/js/components/GroupView';\nimport SearchResultHeader from 'app/js/components/SearchResultHeader';\nimport SearchOptionsMessage from 'app/js/components/SearchOptionsMessage';\nimport DropZoneView from 'app/js/components/DropZoneView';\nimport TargetMap from 'app/js/components/utils/TargetMap';\nimport DiscoverLibrariesMessage from 'app/js/components/DiscoverLibrariesMessage';\nimport SpectrumCircleLoader from 'app/js/components/spectrum/SpectrumCircleLoader';\nimport GroupPathViewAutocomplete from 'app/js/components/path-view/GroupPathAutocomplete';\nimport { showPanelTeamLibraryOneUpOnboarding } from 'app/js/utils/onboardingUtils';\nimport CreateItemCard from 'app/js/components/CreateItemCard';\n\n/**\n * Renders an array of library elements in a virtual scroller - this can be used to display the elements\n * in an individual library, or to display search results, etc.\n */\n\n@observer\nexport default class BaseContentView extends React.Component {\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        itemInjector: PropTypes.func.isRequired,\n        width: PropTypes.number,\n        height: PropTypes.number\n    };\n\n    // Renderers for the different item types that the virtual scroller handles:\n    static ITEM_VIEWS = {\n        // Need to pass in viewMode param because this.context is undefined within this static object\n        element: (data, height, width, library, viewMode, gridSizeType, additionalProps) => {\n            const View = elementConfiguration.getComponent(data.type);\n            return <View element={ data } height={ height } width={ width } viewMode={ viewMode } gridSizeType={ gridSizeType } showDetails={environment.elementDetailMode} {...additionalProps} />;\n        },\n        header: (data) => <ElementTypeHeader type={ data.type } isRole={ data.isRole } showAdd={data.showAdd} disableAdd={data.disableAdd} onClickAdd={data.onClickAdd}/>,\n        timeHeader: (data) => <TimestampHeader time={ data }/>,\n        removedElementsMessage: (data) => <div data-test-id=\"removed-elements-message\" className=\"panel-removed-elements-message\">{ data }</div>,\n        documentAssetsOnboarding: () => <DiscoverLibrariesMessage />,\n        group: (data, height, width, library, viewMode, gridSizeType, additionalProps) => <GroupView group={ !data.library ? Object.assign({ library }, data) : data} height={ height } viewMode={ viewMode } {...additionalProps} />,\n        ungroupedSeparator: () => <div data-test-id=\"ungrouped-separator\" className=\"panel-group-ungrouped-border\"></div>,\n        searchResultHeader: (data) => <SearchResultHeader numResults={ data } />,\n        searchOptionsMessage: () => <SearchOptionsMessage/>,\n        loadSpinner: () => <div className=\"panel-library-contents-load-spinner\" data-test-id=\"load-spinner\"><SpectrumCircleLoader size=\"medium\" indeterminate /></div>,\n        dropZone: (data) => <DropZoneView target={ data } />,\n        pathViewAutocomplete: (data, height, width, library, viewMode, gridSizeType, additionalProps) => <GroupPathViewAutocomplete width={width} {...additionalProps} />,\n        spacer: (data, height, width) => <div data-test-id=\"bottom-spacer\" style={ { height, width } }></div>,\n        createItem: data => <CreateItemCard shortType={ data.shortType } icon={ data.icon } fullWidth={data.fullWidth} buttonText={ data.buttonText } disabled={ data.disabled } onClick={ data.onClick } />,\n        brandKitView: (data, height, width, library) => configuration.currentProduct.getBrandKitView?.(library)\n    };\n\n    componentDidMount() {\n        showPanelTeamLibraryOneUpOnboarding();\n        this._loadingReaction = reaction(\n            () => this._showLoadingToast,\n            () => this.toggleLoadingToast(),\n            { fireImmediately: true }\n        );\n\n        this._syncErrorReaction = reaction(\n            () => this._showSyncErrorToast,\n            () => this.toggleSyncErrorToast(),\n            { fireImmediately: true }\n        );\n    }\n\n    componentWillUnmount() {\n        this.toggleLoadingToast(true);\n        this.toggleSyncErrorToast(true);\n        this._loadingReaction();\n        this._syncErrorReaction();\n    }\n\n    get _showLoadingToast() {\n        const { currentLibrary } = this.context.libraryManager;\n        return currentLibrary && !currentLibrary.areElementsLoaded;\n    }\n\n    @computed get _showSyncErrorToast() {\n        const { errorType } = this.context.libraryManager.syncStatus;\n        return errorType === 'requestFailed';\n    }\n\n    componentDidUpdate(oldProps) {\n        if (oldProps.width !== this.props.width) {\n            // In CCD, on resize we want the current section to remain the same\n            if (configuration.currentProduct.config.maintainCurrentSectionOnResize && this.context.viewState.currentSection) {\n                if (this.context.viewState.viewByState === 'group') {\n                    const currentGroup = this.items.find(item => item.type === 'group' && item.data.id === this.context.viewState.currentSection);\n                    currentGroup && elementSelectionState.revealGroup(currentGroup.data, true);\n                } else {\n                    elementSelectionState.revealGroup(this.context.viewState.currentSection, true);\n                }\n            } else {\n                this.setSelectedSection();\n            }\n        }\n    }\n\n    _getCellItemKey = item => {\n        const type = item.type;\n        const key = item.key || this._getCellKey(item);\n        const library = item.data && item.data.library ? item.data.library.id : '';\n        // we need a separate key for elements in list vs grid as they have a different structure.\n        const view = type === 'element' ? this.context.viewState.viewState : '';\n        return `${type}:${library}:${key}:${view}`;\n    }\n\n    _getCellKey = item => {\n        if (typeof item.data !== 'object') { return item.data; }\n        if (!item.data?.id || configuration.CONSTANT_KEY_IDS.includes(item.data.id)) { return item.data?.id || '*'; }\n        // header data, elements, and groups get a random key\n        return getKeyForObject(item.data);\n    }\n\n    _cellRenderer = ({ index, style }) => {\n        const { type, data, height, width, additionalStyles, library, viewMode, gridSizeType, ...additionalProps } = this.items[index];\n        const itemView = BaseContentView.ITEM_VIEWS[type](data, height, width, library, viewMode, gridSizeType, additionalProps);\n        if (additionalStyles) {\n            Object.assign(style, additionalStyles);\n        }\n        return <div key={this._getCellItemKey(this.items[index])} style={style}>{ itemView }</div>;\n    }\n\n    _cellSizeAndPositionGetter = ({ index }) => {\n        const { width, height, x, y } = this.items[index];\n        return { width, height, x, y };\n    }\n\n    _sectionItems = [];\n\n    /**\n     * @typedef {Object} Item\n     * @property {number} width\n     * @property {number} height\n     * @property {number} type - The enum for what type of item (header, element, search result header)\n     * @property {BaseElementModel|string} data - data used to render the contents in the case of header or element\n     */\n\n    /**\n     * This is the layout code for the library elements. It returns an array of objects, each\n     * with a width, height, x and y position, corresponding to each item that the virtual scroller will layout.\n     * @returns {Item[]}\n     */\n    @computed get items() {\n        this._clearDropTargets();\n\n        const { sectionItems, dropTargets, items } = this.props.itemInjector();\n\n        this._sectionItems = sectionItems;\n        dropTargets.group.forEach(group => this.dropTargets.group.push(group));\n        dropTargets.element.forEach(element => this.dropTargets.element.push(element));\n\n        return items;\n    }\n\n    _clearDropTargets() {\n        // Store drop targets for drag/drop\n        this.dropTargets = {\n            group: new TargetMap(),\n            element: new TargetMap()\n        };\n        this._bounds = null;\n    }\n\n    _setCollection = (collection) => {\n        this._collection = collection;\n    }\n\n    componentWillReact() {\n        // This is needed because the react-virtualized collection is a pure component.\n        // It won't update when we change `this.items`, because it only does a shallow comparison of its props.\n        // We therefore need to tell it when we change the layout, so it will update.\n        this._collection && this._collection.recomputeCellSizesAndPositions();\n    }\n\n    @computed get _scrollToCell() {\n        // If the height is still 0 (auto-sizer hasn't kicked in), then if we scroll to an element, it will set the\n        // scrollTop of the view to, say 200 (whatever the top of the element is). But, since the height is 0, the\n        // browser will trim this to a valid scrollTop (i.e. in the range [0, 0], i.e. 0). But react-virtualized\n        // thinks it successfully scrolled to 200. So it doesn't render anything above 200, because it thinks that\n        // they're not visible!\n        // Fix is to check we have a valid height, and if not, delay the scrollTo until it's valid.\n        return this.props.height > 0 ? this.items.findIndex(item => {\n            return item.data === elementSelectionState.itemPendingScroll;\n        }) : -1;\n    }\n\n    handleClick = (event) => {\n        if (environment.isWindowsOS() ? event.ctrlKey : event.metaKey) {\n            return;\n        }\n\n        // If you click on an element, it'll stop propagation. So you only get here if you click outside\n        // an element, in which case we clear the selection.\n        this.context.viewState.clearAllSelections();\n    }\n\n    get offsetTop() {}\n\n    handleDragEnter = e => {\n        e.preventDefault();\n    }\n\n    handleDragOver = (dragEvent) => {\n        if (this.context.viewState.isLibraryWritable(this.context.libraryManager.currentLibrary) && dragManager.dragData) {\n            dragEvent.preventDefault();\n\n            // Set the drop effect cursor (only when dragging an element)\n            const isElementData = Array.isArray(dragManager.dragData) && dragManager.dragData[0] instanceof BaseElementModel;\n            if (this.context.viewState.viewByState === 'type' && isElementData) {\n                dragEvent.dataTransfer.dropEffect = 'move';\n            }\n            // Would use dragEvent.dataTransfer.setData here, but can't access that in dragOver events\n            const validDropTargets = this.dropTargets && this.dropTargets[dragManager.dragType];\n\n            // Get the offsetTop for the library contents node, so we can compute the offset of the drag event.\n            // Since this never changes (the contents view is a fixed position), we cache it\n\n            this._bounds = this._bounds || (this.libraryContents && this.libraryContents.getBoundingClientRect());\n\n            const draggedY = dragEvent.clientY - this._bounds.top + this._scrollTop;\n            const draggedX = dragEvent.clientX - this._bounds.left;\n\n            // Set or reset the drag manager drop target with the dropTarget we're dragging over\n            if (validDropTargets) {\n                dragManager.setActiveDropTarget(validDropTargets.find(draggedX, draggedY, dragManager.dragData));\n            }\n\n            // Hook for subclass\n            this._onDragOver && this._onDragOver(draggedX, draggedY);\n        }\n    }\n\n    handleDrop = (dropEvent) => {\n        dragManager.handleDrop(dropEvent);\n    }\n\n    _scrollTop = 0;\n\n    setSelectedSection = () => {\n        const binarySearch = (arr, val, start = 0, end = arr.length - 1) => {\n            val = Math.ceil(val);\n            if (start > end) {\n                return -1;\n            }\n\n            const mid = Math.floor((start + end) / 2);\n            const section = arr[mid];\n\n            if (val >= section.y && (!arr[mid + 1] || val < arr[mid + 1].y)) {\n                return section;\n            }\n\n            return val < section.y\n                ? binarySearch(arr, val, start, mid - 1)\n                : binarySearch(arr, val, mid + 1, end);\n        };\n        const binarySearchResult = binarySearch(this._sectionItems, this._scrollTop);\n\n        if (binarySearchResult !== -1) {\n            this.context.viewState.setCurrentSection(binarySearchResult.data.id);\n        }\n    }\n\n    _debouncedSetSelectedSection = debounce(configuration.AUTO_SCROLL_GROUP_SELECT_DEBOUNCE, () => {\n        this.setSelectedSection();\n        return Promise.resolve();\n    });\n\n    handleScroll = (scrollEvent) => {\n        this._scrollTop = scrollEvent.target && scrollEvent.target.scrollTop;\n        // Debounce setting the selection while auto-scrolling from one section to another to avoid selecting all groups we scroll by.\n        this._debouncedSetSelectedSection();\n    }\n\n    findNextElementToNavigate = (keyCode, isShiftDown, isFocusKeyDown) => {\n        if (![ 'ArrowDown', 'ArrowRight', 'ArrowUp', 'ArrowLeft' ].includes(keyCode)) {\n            return;\n        }\n        let nextElement;\n        const elementArr = this.items.filter(item => item.type === 'element');\n        const elementsInViewOrder = this.context.viewState.getElementsInViewOrder(elementSelectionState.selection);\n\n        if (elementsInViewOrder.length > 0) {\n            let pivotElementID;\n            if (elementSelectionState.lastSelectedElementWithShift && isShiftDown) {\n                pivotElementID = elementSelectionState.lastSelectedElementWithShift.id;\n            } else if (elementSelectionState.currentFocusedElement && isFocusKeyDown) {\n                pivotElementID = elementSelectionState.currentFocusedElement.id;\n            } else if ([ 'ArrowDown', 'ArrowRight' ].includes(keyCode)) {\n                pivotElementID = elementsInViewOrder[elementsInViewOrder.length - 1].id;\n            } else if ([ 'ArrowUp', 'ArrowLeft' ].includes(keyCode)) {\n                pivotElementID = elementsInViewOrder[0].id;\n            }\n            const pivotIndex = elementArr.findIndex(({ data: { id } }) => pivotElementID === id);\n            switch (keyCode) {\n            case 'ArrowLeft':\n                nextElement = elementArr[pivotIndex - 1];\n                break;\n            case 'ArrowRight':\n                nextElement = elementArr[pivotIndex + 1];\n                break;\n            case 'ArrowUp':\n                for (let i = pivotIndex - 1; i >= 0; i--) {\n                    if (nextElement && elementArr[i].x < elementArr[pivotIndex].x) {\n                        break;\n                    }\n                    if (elementArr[i].y < elementArr[pivotIndex].y) {\n                        nextElement = elementArr[i];\n                        if (elementArr[i].x === elementArr[pivotIndex].x) {\n                            break;\n                        }\n                    }\n                }\n                break;\n            case 'ArrowDown':\n                {\n                    let curRowIndex = elementArr[pivotIndex].y;\n                    for (let i = pivotIndex + 1; i < elementArr.length; i++) {\n                        if (nextElement && elementArr[i].y > curRowIndex && curRowIndex > elementArr[pivotIndex].y) {\n                            break;\n                        }\n                        if (elementArr[i].y > elementArr[pivotIndex].y) {\n                            nextElement = elementArr[i];\n                            curRowIndex = elementArr[i].y;\n                            if (elementArr[i].x === elementArr[pivotIndex].x) {\n                                break;\n                            }\n                        }\n                    }\n                }\n                break;\n            }\n        } else {\n            if ([ 'ArrowDown', 'ArrowRight' ].includes(keyCode) && elementSelectionState.selection.length > 0) {\n                nextElement = elementArr[elementArr.length - 1];\n            } else if ([ 'ArrowUp', 'ArrowLeft' ].includes(keyCode) || elementSelectionState.selection.length === 0) {\n                nextElement = elementArr[0];\n            }\n        }\n        return nextElement;\n    }\n\n    handleKeyDown = e => {\n        let isHandled = true;\n        const isFocusKey = environment.isWindowsOS() ? e.ctrlKey : e.metaKey;\n        const nextElement = this.findNextElementToNavigate(e.key, e.shiftKey, isFocusKey);\n        if (nextElement) {\n            if (e.shiftKey) {\n                elementSelectionState.setSelectionRange(nextElement.data, true);\n            } else if (isFocusKey) {\n                elementSelectionState.setFocusedElement(nextElement.data, true);\n            } else if (e.altKey) {\n                let beforeElement;\n                let afterElement;\n                const elementArr = this.items.filter(item => item.type === 'element');\n                const nextElementIndex = elementArr.findIndex(({ data: { id } }) => nextElement.data.id === id);\n                if ([ 'ArrowDown', 'ArrowRight' ].includes(e.key)) {\n                    afterElement = nextElement.data;\n                    beforeElement = nextElementIndex < elementArr.length - 1 ? elementArr[nextElementIndex + 1].data : undefined;\n                } else if ([ 'ArrowUp', 'ArrowLeft' ].includes(e.key)) {\n                    beforeElement = nextElement.data;\n                    afterElement = nextElementIndex > 0 ? elementArr[nextElementIndex - 1].data : undefined;\n                }\n                reorderElements(elementSelectionState.selection, afterElement, beforeElement, true);\n            } else {\n                // Only arrow keys were pressed\n                elementSelectionState.setSelection(nextElement.data, true);\n            }\n        } else if (e.key === ' ' && elementSelectionState.currentFocusedElement) {\n            elementSelectionState.toggleSelection(elementSelectionState.currentFocusedElement);\n        } else if ([ 'PageUp', 'PageDown' ].includes(e.key)) {\n            // specially handles group view. type view will have default behavior\n            const groupArr = this.items.filter(item => item.type === 'group');\n            const currentGroupIndex = groupArr.findIndex(({ data: { id } }) => this.context.viewState.currentSection === id);\n            if (e.key === 'PageDown' && currentGroupIndex !== -1 && currentGroupIndex < groupArr.length - 1) {\n                elementSelectionState.revealGroup(groupArr[currentGroupIndex + 1].data);\n            } else if (e.key === 'PageUp' && currentGroupIndex > 0) {\n                elementSelectionState.revealGroup(groupArr[currentGroupIndex - 1].data);\n            } else {\n                isHandled = false;\n            }\n        } else {\n            isHandled = false;\n        }\n        if (isHandled) {\n            e.stopPropagation();\n            e.preventDefault();\n        }\n    }\n\n    @computed get _collectionStyle() {\n        return {\n            outline: 'none',\n            scrollBehavior: elementSelectionState.shouldEaseScrolling ? 'smooth' : 'auto',\n            overflowY: 'auto',\n            overflowX: 'hidden'\n        };\n    }\n\n    setContentsRef = (node) => {\n        this.libraryContents = node;\n    }\n\n    _getScrollToCellAndClearPending() {\n        if (this._scrollToCell !== -1) {\n            // Once we've revealed an element once, we clear it - otherwise, we'll end up scrolling to it every\n            // time we switch back to that library!\n            setTimeout(() => elementSelectionState.clearItemPendingScroll());\n        }\n        return this._scrollToCell;\n    }\n\n    toggleLoadingToast(forceClose = false) {\n        const referenceId = 'library-loading-toast-message';\n        const toastManager = this.context.toastManager;\n\n        if (forceClose || !this._showLoadingToast) {\n            toastManager.closeToast(referenceId);\n            return;\n        }\n\n        toastManager.openToast(\n            'message',\n            {\n                variant: 'info',\n                referenceId,\n                message: translate('DL_LOADING_LIBRARY'),\n                duration: .1,\n                closable: false\n            }\n        );\n    }\n\n    toggleSyncErrorToast(forceClose = false) {\n        const referenceId = 'library-sync-error-toast-message';\n        const toastManager = this.context.toastManager;\n\n        if (forceClose || !this._showSyncErrorToast) {\n            toastManager.closeToast(referenceId);\n            return;\n        }\n\n        toastManager.openToast('message', { referenceId, message: translate('DL_SYNC_REQUEST_ERROR'), variant: 'error', duration: 0 });\n    }\n\n    // This is overridden by environments.uxp.UXPLibraryContentsView.\n    renderVirtualizer() {\n        return <Collection\n            id=\"collection\"\n            cellCount={ this.items.length }\n            cellRenderer={ this._cellRenderer }\n            cellSizeAndPositionGetter={ this._cellSizeAndPositionGetter }\n            scrollToAlignment={ elementSelectionState.scrollToAlignment }\n            scrollToCell={ this._getScrollToCellAndClearPending() }\n            width={ this.props.width }\n            height={ this.props.height }\n            ref={ this._setCollection }\n            style={ this._collectionStyle }\n        />;\n    }\n\n    render() {\n        // NOTE: scrollToAlignment=\"start\" has a bug, where it will try to scroll even if the view is not scrollable,\n        // and this leads to it setting the scrollTop to an impossible value, and not rendering part of the view!!\n        // To avoid this issue, we use \"auto\" for now.\n        return <div\n            className=\"panel-inner-library-contents\"\n            tabIndex=\"0\"\n            ref={ this.setContentsRef }\n            onClick={ this.handleClick }\n            onDragEnter={ this.handleDragEnter }\n            onDragOver={ this.handleDragOver }\n            onDrop={ this.handleDrop }\n            onScroll={ this.handleScroll }\n            onKeyDown={ this.handleKeyDown }\n            data-test-id=\"library-contents\"\n        >\n            { this.renderVirtualizer() }\n        </div>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport BaseDropTarget from './baseDropTarget';\nimport { copyOrMoveGroup, reorderGroup } from 'app/js/utils/libraryUtils';\nimport { isGroupDescendantOfParent, areValidDescendants } from 'app/js/utils/groupUtils';\n\n/**\n * GroupDropTarget provides information about where we are able to drop a group.\n */\n\nexport default class GroupDropTarget extends BaseDropTarget {\n    get type() {\n        return 'group';\n    }\n\n    get beforeGroup() {\n        return this._dropTarget.beforeGroup;\n    }\n\n    get afterGroup() {\n        return this._dropTarget.afterGroup;\n    }\n\n    get isReorder() {\n        return !!(this.afterGroup || this.beforeGroup);\n    }\n\n    isValidDropTarget(dragData) {\n        // Can't move a group into itself.\n        const isSelfDrop = dragData === this.afterGroup || dragData === this.beforeGroup || dragData === this.group;\n        // Can't move a group into its parent.\n        const isParentDrop = this.group && dragData.parent === this.group;\n        // Can't move a parent into its descendant.\n        const isChildDrop = isGroupDescendantOfParent(this.afterGroup || this.group, dragData) || isGroupDescendantOfParent(this.beforeGroup || this.group, dragData);\n\n        // Can't move Document Assets if they have dragging constraints\n        // The valid child check is expensive though, so only do it if all other checks pass\n        const groupTarget = this.group || this.beforeGroup || this.afterGroup;\n        const data = Array.isArray(dragData) ? dragData : [ dragData ];\n        return !isSelfDrop && !isParentDrop && !isChildDrop && !(groupTarget.library && groupTarget.library.isDocumentAssets && !areValidDescendants(data, groupTarget, this.isReorder));\n    }\n\n    onDrop(dragData) {\n        if (this.isReorder) {\n            reorderGroup(dragData, this.afterGroup, this.beforeGroup);\n        } else {\n            copyOrMoveGroup(true, dragData, this.group.library, this.group);\n        }\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport {\n    ELEMENT_Z_INDEX,\n    GRID_LEFT_PADDING,\n    HEADER_HEIGHT,\n    PADDING,\n    PATH_VIEW_AUTOCOMPLETE_LEFT_PADDING,\n    PATH_VIEW_MAX_DEPTH\n} from './constants';\n\nimport featureFlags from 'app/js/config/featureFlags';\nimport environment from 'app/js/environment';\nimport { getLibraryCustomGroupsTree } from 'app/js/utils/groupUtils';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport ElementDropTarget from 'app/js/managers/dragDrop/elementDropTarget';\nimport configuration from 'app/js/config/configuration';\nimport appState from 'app/js/appState';\n\nexport function shouldShowDocumentAssetsOnboarding(library) {\n    const isEmptyLibrary = library?.elements.length === 0;\n    return !appState.panel.viewState.isSearchMode() && isEmptyLibrary && library.isDocumentAssets;\n}\n\nexport function addDropTarget(dropTarget, dropTargets, items) {\n    dropTargets[dropTarget.type].push(dropTarget);\n\n    if (featureFlags.get('dropZoneIndicators')) {\n        const { x, y, width, height } = dropTarget;\n        // Auto-generate a unique key based on the object reference\n        dropTarget.id = true;\n        items.push({ type: 'dropZone', data: dropTarget, x, y, width, height, additionalStyles: { pointerEvents: 'none' } });\n    }\n}\n\nexport function getNumColumns(availableWidth, gridType) {\n    const gridSizeInfo = environment.getDynamicLayoutRules()[gridType] || {};\n    const minimumBreakpoint = environment.getDynamicLayoutMinimumBreakpoint();\n    const breakpointSize = environment.getDynamicLayoutBreakpointWidth();\n\n    // calculate number of 110px breakpoints past the minimum breakpoint the current available width is\n    let stepsAway = Math.ceil((availableWidth - minimumBreakpoint) / breakpointSize);\n    stepsAway = stepsAway < 0 ? 0 : stepsAway;\n    return gridSizeInfo.getColumns && gridSizeInfo.getColumns(stepsAway) || 1;\n}\n\nexport function getLayoutDimensions(gridSizeType, availableWidth, totalWidth) {\n    const dynamicLayoutRules = environment.getDynamicLayoutRules()[gridSizeType] || {};\n    const gridHorizontalPadding = dynamicLayoutRules?.horizontalSpacing || PADDING;\n    const gridVerticalPadding = dynamicLayoutRules?.verticalSpacing || PADDING;\n\n    const columns = getNumColumns(totalWidth, gridSizeType);\n    const cellWidth = Math.floor((availableWidth + gridHorizontalPadding) / columns) - gridHorizontalPadding;\n    const cellHeight = dynamicLayoutRules.getHeight(cellWidth);\n\n    return {\n        cellWidth,\n        cellHeight,\n        gridHorizontalPadding,\n        gridVerticalPadding,\n        columns\n    };\n}\n\nexport function pushDocumentAssetsOnboarding(data, items, library) {\n    // Add the onboarding message for document assets only if the library is empty.\n    if (shouldShowDocumentAssetsOnboarding(library)) {\n        const { x, y, width, height } = data;\n        items.push({ type: 'documentAssetsOnboarding', x, y, width, height, data: {} });\n    }\n}\n\nexport function getGroupsTree(library, elements, groups) {\n    const pathView = appState.panel.viewState.viewByGroupMode === 'path';\n    const maxDepth = pathView ? library && library.pathViewMaxDepth || PATH_VIEW_MAX_DEPTH : undefined;\n    const sortBy = appState.panel.viewState.elementSortState;\n    // During a document assets search, organize assets by \"type\" (top-level group).\n    const getTree = appState.panel.viewState.isDocumentSearchMode()\n        ? () => getDocumentSearchResultsTree(elements, groups, sortBy)\n        : () => getLibraryCustomGroupsTree(library, { maxDepth, sortBy });\n    return getTree();\n}\n\nexport function getGroupedSections(library, elements, groups) {\n    const { root } = getGroupsTree(library, elements, groups);\n    return root.children;\n}\n\nexport function getDocumentSearchResultsTree(elements, groups, sortBy) {\n    const children = elementConfiguration.groupElementsByTopLevelGroup(elements, groups, sortBy);\n    const branches = Object.fromEntries(children.map(section => [ section.item.id, section ]));\n    return { root: { children }, branches };\n}\n\nexport function addElementDropTarget(dropTargetData, dropTargets, items) {\n    // Only create if it's not in the ungrouped section\n    if (dropTargetData.group && dropTargetData.group.id !== '*') {\n        addDropTarget(new ElementDropTarget(dropTargetData), dropTargets, items);\n    }\n}\n\nexport function getGroupGridSize(elements) {\n    if (configuration.currentProduct.config.uniformElementSize) {\n        return appState.panel.viewState.gridZoomFactor;\n    }\n\n    let hasLargeItems;\n    let hasMediumItems;\n    let hasSmallItems;\n    let hasWideItems;\n\n    elements.forEach(element => {\n        // There is no 'type' of elements if its is a subgroup so fallback to small size\n        const gridSize = elementConfiguration.getGridSizeByType(element.type || configuration.COLOR_ELEMENT_TYPE);\n        if (gridSize === configuration.GRID_TYPE_LARGE) {\n            hasLargeItems = true;\n        } else if (gridSize === configuration.GRID_TYPE_MEDIUM) {\n            hasMediumItems = true;\n        } else if (gridSize === configuration.GRID_TYPE_SMALL) {\n            hasSmallItems = true;\n        } else if (gridSize === configuration.GRID_TYPE_WIDE) {\n            hasWideItems = true;\n        }\n    });\n\n    if (hasLargeItems || (hasWideItems && hasMediumItems) || (hasWideItems && hasSmallItems)) {\n        return configuration.GRID_TYPE_LARGE;\n    }\n\n    if (hasWideItems && !hasMediumItems && !hasSmallItems) {\n        return configuration.GRID_TYPE_WIDE;\n    }\n\n    if (hasMediumItems) {\n        return configuration.GRID_TYPE_MEDIUM;\n    }\n\n    return configuration.GRID_TYPE_SMALL;\n}\n\nexport function addGroupItem(groupData, items) {\n    items.push(groupData);\n    const isPathView = appState.panel.viewState.viewByGroupMode === 'path';\n    const isEditing = appState.panel.viewManager.editPathGroup === groupData.data;\n    const inputEl = appState.panel.viewManager.pathState.inputElement;\n    if (isPathView && isEditing && inputEl) {\n        const { x: groupX, y: groupY, width: groupWidth, style } = groupData;\n        const groupIndent = style.paddingLeft;\n        const x = groupX + PATH_VIEW_AUTOCOMPLETE_LEFT_PADDING + groupIndent;\n        const y = groupY + HEADER_HEIGHT;\n        const width = groupWidth - x - GRID_LEFT_PADDING;\n        // z-index must be greater than elements'.\n        items.push({ type: 'pathViewAutocomplete', x, y, width, height: 0, data: { id: 'autocomplete' }, inputEl, zIndex: ELEMENT_Z_INDEX + 1 });\n    }\n}\n\nexport function getSubgroupIndent(library, elements, groups, dimensions) {\n    const width = dimensions.width * configuration.SUBGROUP_INDENT_PERCENT;\n    const levels = getGroupedSectionsLevels(library, elements, groups);\n    return Math.min(configuration.MAX_SUBGROUP_INDENT, Math.ceil(width / levels));\n}\n\nexport function getGroupedSectionsLevels(library, elements, groups) {\n    const { branches } = getGroupsTree(library, elements, groups);\n    const levels = Math.max(...Object.values(branches).map(branch => branch.item.isGroup ? branch.depth : 0));\n    // Tree depth starts at zero so offset by one.\n    return levels + 1;\n}\n\nexport function getLastSectionHeight(height) {\n    const headerHeight = configuration.currentProduct.config.headerHeight?.() || HEADER_HEIGHT;\n\n    // If we're hiding the first section header, it means our header is sticky and outside of the virtual scroller, so we need to account for that additional height.\n    const hideFirstHeader = configuration.currentProduct.config.hideFirstSectionHeader;\n    return height + (hideFirstHeader ? headerHeight : 0);\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nexport const HEADER_HEIGHT = 24;\nexport const PADDING = 4;\nexport const GRID_LEFT_PADDING = 12;\nexport const LIST_LEFT_PADDING = 12;\nexport const GROUP_CONTAINER_BOTTOM_PADDING = 12;\nexport const GROUP_BOTTOM_SPACE = 12;\nexport const GROUP_EMPTY_HEIGHT = 58;\nexport const GROUP_SEPARATOR_HEIGHT = 12;\nexport const TOP_PADDING = 8;\nexport const HEADER_MARGIN = 0;\nexport const MIN_GROUP_EMPTY_WIDTH = 160;\nexport const EXTRA_EMPTY_HEIGHT = 25;\nexport const BOTTOM_SPACER_HEIGHT = 64;\nexport const ELEMENT_Z_INDEX = 1;\nexport const PATH_VIEW_MAX_DEPTH = 0;\n// Must match _panelView.scss's .panel-chevron-container-icon's size + its left and right margins.\nexport const PATH_VIEW_AUTOCOMPLETE_LEFT_PADDING = 25;\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport dragManager from 'app/js/managers/dragManager';\nimport { getAllAncestors, getClosestCollapsedAncestor, isMeaningfulGroupBranch } from 'app/js/utils/groupUtils';\nimport GroupDropTarget from 'app/js/managers/dragDrop/groupDropTarget';\nimport ElementDropTarget from 'app/js/managers/dragDrop/elementDropTarget';\nimport SearchResultHeader from 'app/js/components/SearchResultHeader';\nimport SearchOptionsMessage from 'app/js/components/SearchOptionsMessage';\nimport appState from 'app/js/appState';\n\nimport {\n    addDropTarget,\n    addElementDropTarget,\n    getLayoutDimensions,\n    shouldShowDocumentAssetsOnboarding,\n    pushDocumentAssetsOnboarding,\n    addGroupItem,\n    getGroupedSections,\n    getSubgroupIndent,\n    getGroupGridSize,\n    getGroupsTree,\n    getLastSectionHeight\n} from './utils';\n\nimport {\n    HEADER_HEIGHT,\n    PADDING,\n    GRID_LEFT_PADDING,\n    LIST_LEFT_PADDING,\n    GROUP_CONTAINER_BOTTOM_PADDING,\n    GROUP_BOTTOM_SPACE,\n    GROUP_EMPTY_HEIGHT,\n    GROUP_SEPARATOR_HEIGHT,\n    TOP_PADDING,\n    HEADER_MARGIN,\n    BOTTOM_SPACER_HEIGHT,\n    ELEMENT_Z_INDEX,\n    MIN_GROUP_EMPTY_WIDTH,\n    EXTRA_EMPTY_HEIGHT\n} from './constants';\n\nexport default function getViewByGroupItems(library, elements, groups, dimensions) {\n    const sectionItems = [];\n    const dropTargets = {\n        group: [],\n        element: []\n    };\n\n    if (!library) {\n        return { items: [], dropTargets, sectionItems };\n    }\n\n    const groupBottomSpace = GROUP_BOTTOM_SPACE;\n    const groupEmptyHeight = configuration.currentProduct.config.emptyGroupHeight || GROUP_EMPTY_HEIGHT + groupBottomSpace;\n    const groupContainerBottomPadding = configuration.currentProduct.config.disableGroupMargin ? 0 : GROUP_CONTAINER_BOTTOM_PADDING;\n    const leftPadding = configuration.currentProduct.config.gridLeftPadding || 0;\n    const paddingBetweenGroups = configuration.currentProduct.config.paddingBetweenGroups || groupBottomSpace;\n    const reorderIndicatorHeight = groupContainerBottomPadding;\n    // We make an array of elements to display in the UI - each will have a position\n    const items = [];\n    const headerHeight = configuration.currentProduct.config.headerHeight?.() || HEADER_HEIGHT;\n    const headerMargin = configuration.currentProduct.config.headerMargin || HEADER_MARGIN;\n    const pathView = appState.panel.viewState.viewByGroupMode === 'path';\n    const sortByOrder = appState.panel.viewState.elementSortState === 'order';\n\n    const sections = getGroupedSections(library, elements, groups);\n    // Groups might be hidden due to active filters.\n    const isFiltering = appState.panel.viewState.librariesSearchState.filterCount > 0;\n    const scrollBarWidth = configuration.SCROLLBAR_WIDTH;\n    const width = dimensions.width - scrollBarWidth - (2 * leftPadding);\n    // We need to increase z-index for each successive nest level of groups to ensure they show up on top of each other\n    // This is required in the UXP virtualizer which reuses the group element, and cannot ensure document order\n    // Any content items which are not groups (and thus never overlap with each other should just be the default z index, which we are setting as 1)\n    const zIndex = -100;\n\n    // We compute and cache the entire tree once, but we don't necessarily want to render everything.\n    let shouldRenderItem;\n    if (!isFiltering) {\n        // We're rendering everything.\n        shouldRenderItem = () => true;\n    } else {\n        // Render only what's requested.\n        const requestedItems = new Set();\n        groups.forEach(group => requestedItems.add(group.id));\n        elements.forEach(element => requestedItems.add(element.id));\n        shouldRenderItem = item => requestedItems.has(item.id);\n    }\n\n    // When placing reorder drop targets, we need to know which two groups should lie between the drop target.\n    // To do that for a given group, we find the group immediately before it in its parent,\n    // taking advantage of the fact that the groups tree we've already computed is also already sorted!\n    // Note that we only need to compute this manually when placing reorder drop targets for path view,\n    // since groups are not placed in the virtualizer following their nested structure - otherwise,\n    // we could do what we do in tree view and simply look at the last thing we placed in the virtualizer.\n    const findHigherSibling = group => {\n        const { branches } = getGroupsTree(library, elements, groups);\n        const parentBranch = branches[group.id].parent;\n\n        return parentBranch.children.find((childBranch, index) => {\n            if (childBranch.item.parent !== group.parent) { return false; }\n            return parentBranch.children[index + 1] === branches[group.id];\n        });\n    };\n\n    const pushGroupSection = ({ key, section, index, sections, x, y, width, zIndex, hideHeader = false, mainDropTarget }) => {\n        // Save the initial x value so we can reset to it if we need to break to the next row.\n        const initialX = x;\n        const group = section.item;\n        const isUngrouped = group.id === '*';\n        const children = section.children.filter(child => shouldRenderItem(child.item));\n        const isEmpty = children.length === 0;\n        const indent = configuration.currentProduct.config.disableNestedGroupIndent ? 0 : getSubgroupIndent(library, elements, groups, dimensions);\n        const emptyUngroupedSection = isUngrouped && section.children.length === 0;\n        const hideUngroupedTitle = isUngrouped && (library && library.getGroups().length === 0 || emptyUngroupedSection);\n        const hideUngroupedSection = isEmpty && library && (library.hideUngroupedSection || !appState.panel.viewState.isLibraryWritable(library));\n        const indentedEmptyGroupHeight = width - indent - initialX < MIN_GROUP_EMPTY_WIDTH ? groupEmptyHeight + EXTRA_EMPTY_HEIGHT : groupEmptyHeight;\n        const emptySectionHeight = indentedEmptyGroupHeight + headerHeight + headerMargin;\n        // Root groups should have 12 space above themselves (except the first one, which already has margin from initialY position)\n        const needsGroupSeparationPadding = !group.parent && index !== 0 && !configuration.currentProduct.config.evenlySpacedSubgroups;\n        const groupSeparationPadding = needsGroupSeparationPadding ? paddingBetweenGroups : 0;\n        // In path view, dragging over a group can result in its ancestors being temporarily rendered on top of the group.\n        // Check if this is one of those spawned ancestors.\n        const isPathViewDragSpawn = !!mainDropTarget;\n        const isHoldingDragOverGroup = dragManager.isHoldingDragOverGroup(group);\n        const isPathViewDragOperation = pathView && (isHoldingDragOverGroup || isPathViewDragSpawn);\n        const allowReorder = sortByOrder && (!pathView || isPathViewDragOperation);\n        // If this is an ancestors spawned for a drag operation, we'll render it as collapsed, only showing the header and drop target.\n        const isCollapsed = isPathViewDragSpawn || appState.panel.viewState.isGroupCollapsed(group.id) || (isEmpty && group.hideDefaultTextInEmptyGroup);\n\n        // If the group is hidden, don't render it.\n        if (configuration.currentProduct.config.hideEmptyGroups && isEmpty && !isUngrouped) {\n            return { x, y };\n        }\n\n        // Enforce filters.\n        if (!shouldRenderItem(section.item)) {\n            return { x, y };\n        }\n\n        if (isUngrouped && hideUngroupedSection) {\n            return { x, y };\n        }\n\n        // Do NOT show group if App Controlled setting for hideWhenEmpty is true (e.g. Audio DocumentGroup)\n        if (isEmpty && group.hideWhenEmpty) {\n            return { x, y };\n        }\n\n        // In path view, only 'meaningful' groups are shown.\n        // Show any sections being rendered as part of a path view drag operation.\n        if (pathView && !isPathViewDragSpawn && !isMeaningfulGroupBranch(section)) {\n            return { x, y };\n        }\n\n        // In path view, never show groups if their ancestor is collapsed and visible.\n        const collapsedAncestorBranch = section.tree.branches[getClosestCollapsedAncestor(section.item)?.id];\n        if (pathView && collapsedAncestorBranch && isMeaningfulGroupBranch(collapsedAncestorBranch)) {\n            return { x, y };\n        }\n\n        // In path view, we render all the group's ancestors while dragging over it.\n        if (pathView && dragManager.isHoldingDragOverGroup(group)) {\n            const maxDepth = library.pathViewMaxDepth || 0;\n            const groupAncestors = getAllAncestors(group).slice(maxDepth);\n            const parentSections = groupAncestors.map(g => getGroupsTree(library, elements, groups).branches[g.id]);\n            mainDropTarget = dragManager.holdingDropTarget;\n            parentSections.forEach((section, index) => {\n                // Make sure this pseudo-section gets a unique key, in case the real section is also being rendered.\n                const key = `${group.id}:${section.item.id}`;\n                const { y: _y } = pushGroupSection({ key, section, index, sections: parentSections, x, y, width, zIndex, hideHeader, mainDropTarget });\n                y = _y;\n            });\n        }\n\n        y += groupSeparationPadding;\n\n        // Push the separator\n        const groupSeparatorHeight = !configuration.currentProduct.config.disableGroupSeparator && configuration.currentProduct.config.groupSeparatorHeight || GROUP_SEPARATOR_HEIGHT;\n        if (!configuration.currentProduct.config.disableGroupSeparator && isUngrouped && !hideUngroupedTitle) {\n            const ungroupedSeparator = { type: 'ungroupedSeparator', data: group, x, y, width, height: GROUP_SEPARATOR_HEIGHT };\n            items.push(ungroupedSeparator);\n            y += groupSeparatorHeight;\n        }\n\n        const groupItem = { type: 'group', data: group, key, x: leftPadding, y, width, style: { paddingLeft: x }, library: elements[0] && elements[0].library, viewMode: appState.panel.viewState.viewState, zIndex, hideHeader };\n        addGroupItem(groupItem, items);\n        // Need to subtract group separator height from y if ungrouped group so section selection for ungrouped starts at separator line\n        sectionItems.push({ y: y - (isUngrouped ? groupSeparatorHeight : 0), data: group });\n\n        if (allowReorder) {\n            const height = reorderIndicatorHeight;\n            // Find the group that comes before the current group in its parent.\n            // In tree view, that corresponds to the last section rendered, since all sections\n            // are rendered in order within their parent.\n            // But in path view, where all groups are rendered at the root, we need to actually look\n            // for the sibling that comes before this group.\n            const higherSibling = pathView ? findHigherSibling(group) : sections[index - 1];\n\n            const afterGroup = higherSibling?.item.isGroup && higherSibling.item;\n            const beforeGroup = group;\n            const dropTargetData = { x, y: y - reorderIndicatorHeight / 2, width, height, afterGroup, beforeGroup, mainDropTarget };\n            // Push the drop targets to the group type\n            addDropTarget(new GroupDropTarget(dropTargetData), dropTargets, items);\n        }\n\n        // If it's an empty group, create drop targets that are full width/height.\n        // For the ungrouped set, the drop target should occupy the remaining panel height, so we need to add it at the end when we know what that is.\n        // For collapsed groups, even if empty, the drop target should occupy just the header, like any other group.\n        if (isEmpty && !isUngrouped && !isCollapsed) {\n            const dropTargetData = { x, y, width, height: emptySectionHeight, group };\n\n            addDropTarget(new ElementDropTarget(dropTargetData), dropTargets, items);\n            addDropTarget(new GroupDropTarget(dropTargetData), dropTargets, items);\n        } else if (!isUngrouped) {\n            // Create drop targets for the header of the group.\n            // For un-collapsed groups, make sure the drop targets go all the way down to the element space (no gaps).\n            const height = headerHeight + (isCollapsed ? 0 : PADDING);\n            const dropTargetData = { x, y, width, height, group, mainDropTarget };\n            const beforeElement = children.find(child => !child.item.isGroup)?.item;\n\n            addDropTarget(new ElementDropTarget({ ...dropTargetData, beforeElement }), dropTargets, items);\n            addDropTarget(new GroupDropTarget(dropTargetData), dropTargets, items);\n        }\n\n        y += (hideUngroupedTitle || hideHeader ? 0 : headerHeight) + headerMargin;\n\n        if (isCollapsed) {\n            const collapsedHeight = y - groupItem.y;\n            // Set the group height\n            groupItem.height = collapsedHeight;\n            return { x, y };\n        }\n\n        // Children (elements or nested groups)\n        if (appState.panel.viewState.viewState === 'grid') {\n            const elementLeftPadding = configuration.currentProduct.config.gridLeftPadding || GRID_LEFT_PADDING;\n            const rightPadding = configuration.currentProduct.config.gridRightPadding || 0;\n            // If configuration.currentProduct.config.gridLeftPadding exists it means it was already\n            // subtracted from the width so we don't want to do it again. This is because in CCD we do not\n            // need to leave space for the group outline when reordering\n            const availableWidth = width - x - rightPadding - (configuration.currentProduct.config.gridLeftPadding ? 0 : elementLeftPadding * 2);\n            const gridSizeType = getGroupGridSize(children.map(child => child.item).filter(item => !item.isGroup));\n\n            const { cellHeight, cellWidth, gridHorizontalPadding, gridVerticalPadding, columns } = getLayoutDimensions(gridSizeType, availableWidth, width);\n\n            x += elementLeftPadding;\n            if (configuration.currentProduct.config.disableTopElementGridPadding) {\n                y -= gridVerticalPadding;\n            }\n\n            children.forEach((child, index) => {\n                const { item } = child;\n\n                if (index === 0 && !item.isGroup && !configuration.currentProduct.config.disablePaddingWithinGridGroup) {\n                    y += gridVerticalPadding;\n                }\n                if (index !== 0 && index % columns === 0 && !item.isGroup) {\n                    // Create a drop target for the element before a line break occurs (unless it's the first item)\n                    const dropTargetX = Math.max(0, x - cellWidth / 2 - gridHorizontalPadding);\n                    const dropTargetWidth = width - dropTargetX; // width should be remaining space in row\n                    addElementDropTarget({ x: dropTargetX, y, width: dropTargetWidth, height: cellHeight,\n                        group, afterElement: children[index - 1] && children[index - 1].item, beforeElement: item, isRowEnd: true }, dropTargets, items);\n\n                    // Line break (unless it's the first item)\n                    x = initialX + elementLeftPadding;\n                    y += cellHeight + gridVerticalPadding;\n                }\n\n                // Create drop targets for every grid element\n                if (!item.isGroup) {\n                    const dropTargetX = Math.max(0, x - gridHorizontalPadding - cellWidth / 2);\n                    const dropTargetWidth = Math.min(cellWidth + 2 * gridHorizontalPadding, x + cellWidth / 2, width - dropTargetX);\n                    addElementDropTarget({ x: dropTargetX, y, width: dropTargetWidth, height: cellHeight,\n                        group, afterElement: index > 0 ? children[index - 1].item : undefined, beforeElement: item }, dropTargets, items);\n                }\n\n                if (!item.isGroup && (index === children.length - 1 || children[index + 1].item.isGroup)) {\n                    // Create a drop target for the last *element* in the group. All elements come before subgroups.\n                    const lastX = x + cellWidth / 2;\n                    addElementDropTarget({ x: lastX, y, width: width - lastX, height: cellHeight,\n                        group, afterElement: item, isRowEnd: true }, dropTargets, items);\n                }\n\n                if (item.isGroup) {\n                    // Subgroup.\n                    const { y: _y } = pushGroupSection({ section: child, index, sections: children, x: initialX + indent, y, width, zIndex: zIndex + 1 });\n                    // Grow y by whatever the nested group added.\n                    y = _y;\n                } else {\n                    // Element.\n                    items.push({ type: 'element', data: item, x, y, width: cellWidth, height: cellHeight, viewMode: appState.panel.viewState.viewState, gridSizeType, zIndex: ELEMENT_Z_INDEX });\n                    x += cellWidth + gridHorizontalPadding;\n\n                    const isLastItem = index === children.length - 1;\n                    const precedesGroup = !isLastItem && children[index + 1].item.isGroup;\n                    if (isLastItem || precedesGroup) {\n                        // Last element, add line break\n                        y += cellHeight + gridVerticalPadding;\n                    }\n                }\n            });\n        } else { // List view\n            const elementHeight = configuration.LIST_VIEW_ELEMENT_HEIGHT;\n            children.forEach((child, index) => {\n                const { item } = child;\n                if (shouldRenderItem(item)) {\n                    if (item.isGroup) { // if it's a subgroup, we recurse\n                        const { y: _y } = pushGroupSection({ section: child, index, sections: children, x: x + indent, y, width, zIndex: zIndex + 1 });\n                        // Grow y by what the nested group added.\n                        y = _y;\n                    } else {\n                        // Create drop targets for every element\n                        addElementDropTarget({ x, y: y - elementHeight / 2, width, height: elementHeight,\n                            group, afterElement: index > 0 ? children[index - 1].item : undefined, beforeElement: item }, dropTargets, items);\n\n                        if (index === children.length - 1) {\n                            addElementDropTarget({ x, y: y + elementHeight / 2, width, height: elementHeight / 2,\n                                group, afterElement: item, isRowEnd: true }, dropTargets, items);\n                        }\n\n                        items.push({ type: 'element', data: item, x: leftPadding, y, width, height: elementHeight, viewMode: appState.panel.viewState.viewState, zIndex: ELEMENT_Z_INDEX, listStyle: { paddingLeft: x + LIST_LEFT_PADDING } });\n\n                        // New line for the next element.\n                        y += elementHeight;\n                    }\n                }\n            });\n        }\n\n        // Determine whether we use empty height or element height\n        if (isEmpty) {\n            y += indentedEmptyGroupHeight + (configuration.currentProduct.config.emptyGroupBottomPadding || 0);\n        }\n\n        groupItem.height = y - groupItem.y;\n\n        // Create the group drop targets. We need to do this at the end so we know the height.\n        if (isUngrouped) {\n            // The user should be able to drop elements into the ungrouped section.\n            const offset = configuration.currentProduct.config.lastSectionFullHeight && sections.length > 1 ? 0 : groupItem.y;\n            const ungroupedHeight = Math.max(getLastSectionHeight(dimensions.height) - offset, groupItem.height);\n            groupItem.height = ungroupedHeight;\n\n            const dropTargetData = { x: initialX, y: groupItem.y, width, height: ungroupedHeight, group };\n            addDropTarget(new ElementDropTarget(dropTargetData), dropTargets, items);\n        }\n\n        return { x, y };\n    };\n\n    const x = leftPadding;\n    let y = configuration.currentProduct.config.disableGroupMargin ? 0 : configuration.currentProduct.config.getScrollTopPadding?.() || TOP_PADDING;\n\n    if (appState.panel.viewState.isSearchMode()) { // Note: LibraryView already checks for search input and results before showing this contents view.\n        const searchResultHeaderHeight = SearchResultHeader.getHeight(elements.length, width);\n        items.push({ type: 'searchResultHeader', data: elements.length, x: 0, y, width, height: searchResultHeaderHeight });\n        y += searchResultHeaderHeight;\n    }\n\n    let hasDisplayedSection = false;\n    sections.forEach((section, index) => {\n        const hideHeader = configuration.currentProduct.config.hideFirstSectionHeader && !hasDisplayedSection;\n\n        if ((pathView && !getClosestCollapsedAncestor(section.item) && isMeaningfulGroupBranch(section)) || (!pathView && index === 0)) {\n            hasDisplayedSection = true;\n        }\n\n        const { y: _y } = pushGroupSection({ section, index, sections, x, y, width, zIndex, hideHeader });\n        y = _y;\n    });\n\n    if ((appState.panel.viewState.isLibrarySearchMode() || appState.panel.viewState.isDocumentSearchMode()) && !appState.panel.viewState.isRootView()) {\n        const searchOptionsMessageHeight = SearchOptionsMessage.getHeight(width);\n        items.push({ type: 'searchOptionsMessage', data: {}, x: 0, y, width, height: searchOptionsMessageHeight });\n        y += searchOptionsMessageHeight;\n    }\n\n    // Add extra spacing underneath the last rendered item unless we already display extra spacing with the empty ungrouped section or doc assets onboarding\n    const ungroupedEmpty = sections.find(section => section.item && section.item.id === '*').children.length === 0;\n    const isEmptyUngroupedHidden = ungroupedEmpty && library && (library.hideUngroupedSection || !appState.panel.viewState.isLibraryWritable(library));\n    if (dimensions.height <= y && !shouldShowDocumentAssetsOnboarding(library) && !configuration.currentProduct.config.hideExtraBottomSpace && (!ungroupedEmpty || isEmptyUngroupedHidden)) {\n        items.push({ type: 'spacer', data: {}, x: 0, y, width, height: BOTTOM_SPACER_HEIGHT });\n        y += BOTTOM_SPACER_HEIGHT;\n    }\n\n    // The onboarding should be place at the bottom of the panel so height should be whatever vertical space remains.\n    pushDocumentAssetsOnboarding({ x: leftPadding, y, width, height: dimensions.height - y }, items, library);\n    return { items, dropTargets, sectionItems };\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer, PropTypes as MobxPropTypes } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport { default as DefaultBaseContentView } from './BaseContentView';\nimport getViewByGroupItems from './items/getViewByGroupItems';\nimport { Element } from '@cclibraries/cc-libraries-js';\nimport { Group } from '@cclibraries/cc-libraries-js';\nimport DocumentGroup from 'app/applications/SPRK/js/models/documentAssets/DocumentGroup';\n\n@observer\nexport default class GroupContentView extends React.Component {\n    static propTypes = {\n        width: PropTypes.number,\n        height: PropTypes.number,\n        library: PropTypes.any,\n        elements: MobxPropTypes.arrayOrObservableArrayOf(PropTypes.instanceOf(Element)).isRequired,\n        groups: MobxPropTypes.arrayOrObservableArrayOf(PropTypes.oneOfType([ PropTypes.instanceOf(Group), PropTypes.instanceOf(DocumentGroup) ])).isRequired,\n        baseContentView: PropTypes.elementType\n    };\n\n    static defaultProps = {\n        baseContentView: DefaultBaseContentView\n    };\n\n    static contextType = LibrariesContext;\n\n    injectItems = () => getViewByGroupItems(\n        this.props.library,\n        this.props.elements,\n        this.props.groups,\n        {\n            width: this.props.width,\n            height: this.props.height\n        }\n    );\n\n    render() {\n        const {\n            baseContentView: BaseContentView,\n            width,\n            height,\n        } = this.props;\n\n        return (\n            <BaseContentView\n                itemInjector={ this.injectItems }\n                width={ width }\n                height={ height }\n            />\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport ElementDropTarget from 'app/js/managers/dragDrop/elementDropTarget';\nimport SearchResultHeader from 'app/js/components/SearchResultHeader';\nimport SearchOptionsMessage from 'app/js/components/SearchOptionsMessage';\nimport appState from 'app/js/appState';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport librarySizeManager from 'app/js/managers/librarySizeManager';\nimport featureFlags from 'app/js/config/featureFlags';\n\nimport {\n    addDropTarget,\n    getLayoutDimensions,\n    shouldShowDocumentAssetsOnboarding,\n    pushDocumentAssetsOnboarding,\n    getLastSectionHeight,\n} from './utils';\n\nimport {\n    PADDING,\n    HEADER_HEIGHT,\n    GRID_LEFT_PADDING,\n    LIST_LEFT_PADDING,\n    GROUP_BOTTOM_SPACE,\n    TOP_PADDING,\n    HEADER_MARGIN,\n    BOTTOM_SPACER_HEIGHT,\n    ELEMENT_Z_INDEX\n} from './constants';\nimport metrics from 'app/js/interface/metrics';\nimport { isBrandLibrary } from 'app/js/utils/brandUtils';\nimport environment from 'app/js/environment';\n\n/**\n * Get the library contents, ordered by type or role (where roles appear before remaining types)\n */\n\nexport default function getViewByTypeItems(library, elements, dimensions) {\n    const sectionItems = [];\n    const dropTargets = {\n        group: [],\n        element: []\n    };\n\n    const scrollBarWidth = configuration.SCROLLBAR_WIDTH;\n    const width = dimensions.width - scrollBarWidth;\n    if (width < 0) {\n        return { dropTargets, sectionItems, items: [] };\n    }\n\n    const sortType = appState.panel.viewState.isSearchMode() ? appState.panel.viewState.elementSearchSort : appState.panel.viewState.elementSortState;\n    const sections = appState.panel.viewState.isRemovedElementsMode()\n        ? elementConfiguration.groupElementsByTime(elements, 'removed')\n        : elementConfiguration.groupElementsByType(elements, sortType, appState.panel.viewState.elementSortDescendingState);\n\n    // We make an array of elements to display in the UI - each will have a position\n    const items = [];\n\n    let y = configuration.currentProduct.config.disableGroupMargin ? 0 : configuration.currentProduct.config.getScrollTopPadding?.() || TOP_PADDING;\n\n    if (appState.panel.viewState.isSearchMode()) { // Note: LibraryView already checks for search input and results before showing this contents view.\n        const searchResultHeaderHeight = SearchResultHeader.getHeight(elements.length, width);\n        items.push({ type: 'searchResultHeader', data: elements.length, x: 0, y, width, height: searchResultHeaderHeight });\n        y += searchResultHeaderHeight;\n    }\n\n    if (appState.panel.viewState.isRemovedElementsMode()) {\n        // Push some messages if you're not able to view removed elements:\n        if (elements.length === 0) {\n            items.push({ type: 'removedElementsMessage', data: `No deleted items.`, x: 0, y, width, height: 20 });\n            return { dropTargets, sectionItems, items };\n        }\n        if (!elements[0].library.isWritable) {\n            items.push({ type: 'removedElementsMessage', data: `You don't have write access to this library, so you can't view its deleted items.`, x: 0, y, width, height: 20 });\n            return { dropTargets, sectionItems, items };\n        }\n    }\n\n    const _isSectionTypeUsable = section => FileUtils.getUsableTypes(section.type).length;\n    // Assumes showEmptyUsableTypes or enableCreateItemCards is true\n    const showCreateCardAndEmptySection = section => {\n        // If the create card won't show up (in the case of a read-only library or a linked library)\n        // then don't show an empty group with no way to add that type of element\n        if (!appState.panel.viewState.isLibraryWritable(library, false, true) || appState.panel.viewState.isSearchMode()) { return false; }\n        // (Logo) Role section appears when viewing by role, in which case it should always be included\n        return (featureFlags.get('brandFeatureEnabled') && section.isRole)\n            || (_isSectionTypeUsable(section));\n    };\n    const contentSections = sections.filter(section => {\n        const showEmptySection = configuration.currentProduct.config.showEmptyUsableTypes && showCreateCardAndEmptySection(section);\n        return section.children.length || showEmptySection;\n    });\n    contentSections.forEach((section, index) => {\n        const type = section.type || (section.item && section.item.nameLocalizationKey) || '*'; // type can also be role usage, e.g. 'logo'\n        const shortType = section.isRole ? type : elementConfiguration.getShortType(type);\n        const elements = section.children;\n        const typeHeaderIndex = items.length;\n        const headerHeight = configuration.currentProduct.config.headerHeight?.() || HEADER_HEIGHT;\n        const onClickAdd = event => {\n            event.stopPropagation(); // stop propagation to ensure picker does not open twice\n            const openPicker = elementConfiguration.getOpenPickerOperation(section.isRole ? configuration.IMAGE_ELEMENT_TYPE : type);\n            const libFilter = isBrandLibrary(library) ? 'brands' : 'libraries';\n            metrics.reportEvent('Operations', libFilter, 'click', 'add-library-asset', {\n                content: { type: shortType }\n            }, library);\n            openPicker(library, event, section.isRole);\n        };\n        // Push the header\n        // The header takes up the whole row, and so padding/margins can be handled in CSS\n        if (appState.panel.viewState.isRemovedElementsMode()) {\n            items.push({ type: 'timeHeader', data: section.time, x: 0, y, width, height: headerHeight });\n            y += headerHeight;\n\n        } else if (!appState.panel.libraryManager.disableCCLibraries) {\n            const hideHeader = configuration.currentProduct.config.hideFirstSectionHeader && index === 0;\n            if (!hideHeader) {\n                const headerData = {\n                    isRole: section.isRole,\n                    type,\n                    id: 'header',\n                    showAdd: !!(configuration.currentProduct.config.enableCreateItemCards && section.children.length && showCreateCardAndEmptySection(section)),\n                    onClickAdd,\n                    disableAdd: !librarySizeManager.canAddElements(library),\n                };\n                items.push({ type: 'header', data: headerData, x: 0, y, width, height: headerHeight });\n            }\n            sectionItems.push({ y , data: { id: type } });\n            y += (hideHeader ? 0 : headerHeight) + (configuration.currentProduct.config.headerMargin || HEADER_MARGIN);\n\n            // TODO: Consider whether to expand when in search mode\n            if (appState.panel.viewState.isTypeCollapsed(type)) {\n                y += PADDING;\n                return;\n            }\n        }\n\n        // Push the elements\n        let x;\n        if (appState.panel.viewState.viewState === 'grid') {\n            // There is no 'row' element that we could add css left padding to in Grid View, so left padding must be added in the layout.\n            const leftPadding = (2 * configuration.currentProduct.config.gridLeftPadding) || GRID_LEFT_PADDING;\n            const rightPadding = configuration.currentProduct.config.gridRightPadding || 0;\n            const availableWidth = width - (2 * leftPadding) - rightPadding;\n\n            // When rendering Document search results, we need to use the actual element type because the section does not have an element type attribute\n            const gridSizeType = elementConfiguration.getGridSizeByType(section.type || elements[0] && elements[0].type);\n            const { cellHeight, cellWidth, gridHorizontalPadding, gridVerticalPadding, columns } = getLayoutDimensions(gridSizeType, availableWidth, width);\n            x = leftPadding;\n\n            if (configuration.currentProduct.config.disableTopElementGridPadding) {\n                y -= gridVerticalPadding;\n            }\n\n            // Push the Create Item Card in CCX\n            const showCreateCard = configuration.currentProduct.config.enableCreateItemCards && !section.children.length && showCreateCardAndEmptySection(section);\n            if (showCreateCard) {\n                const onClick = event => {\n                    event.stopPropagation(); // stop propagation to ensure picker does not open twice\n                    const openPicker = elementConfiguration.getOpenPickerOperation(section.isRole ? configuration.IMAGE_ELEMENT_TYPE : type);\n                    const libFilter = isBrandLibrary(library) ? 'brands' : 'libraries';\n                    metrics.reportEvent('Operations', libFilter, 'click', 'add-library-asset', {\n                        content: { type: shortType }\n                    }, library);\n                    openPicker(library, event, section.isRole);\n                };\n                const data = {\n                    id: `add-${shortType}-card`,\n                    icon: `CCXCreate${ shortType[0].toUpperCase() + shortType.slice(1).toLowerCase() }`,\n                    disabled: !librarySizeManager.canAddElements(library),\n                    onClick,\n                    shortType,\n                    fullWidth: true\n                };\n                const createItemWidth = width - (2 * leftPadding);\n                items.push({ type: 'createItem', data, x, y, width: createItemWidth, height: cellHeight, viewMode: appState.panel.viewState.viewState, gridSizeType, zIndex: ELEMENT_Z_INDEX });\n                x += cellWidth + gridHorizontalPadding;\n            }\n\n            elements.forEach((element, i) => {\n                if (showCreateCard) { i++; }\n\n                // Starting with the second element in a section, put it on the next line if it would otherwise go off screen\n                if (i % columns === 0 && i !== 0) {\n                    // Line break\n                    x = leftPadding;\n                    y += cellHeight + gridVerticalPadding;\n                }\n                items.push({ type: 'element', data: element, x, y, width: cellWidth, height: cellHeight, viewMode: appState.panel.viewState.viewState, gridSizeType, zIndex: ELEMENT_Z_INDEX });\n                x += cellWidth + gridHorizontalPadding;\n            });\n\n            // Reset to a new line before the next section\n            y += cellHeight + gridVerticalPadding;\n\n        } else { // List view\n            x = 0;\n            const elementHeight = configuration.LIST_VIEW_ELEMENT_HEIGHT;\n\n            elements.forEach(element => {\n                items.push({ type: 'element', data: element, x, y, width, height: elementHeight, viewMode: appState.panel.viewState.viewState, zIndex: ELEMENT_Z_INDEX, listStyle: { paddingLeft: LIST_LEFT_PADDING } });\n                y += elementHeight;\n            });\n        }\n        // if not the first or last section, add space under last element\n        if (!configuration.currentProduct.config.disableGroupMargin && index < contentSections.length - 1) {\n            y += GROUP_BOTTOM_SPACE;\n        }\n\n        if (index === contentSections.length - 1 && contentSections.length > 1 && configuration.currentProduct.config.lastSectionFullHeight) {\n            items[typeHeaderIndex].height = Math.max(getLastSectionHeight(dimensions.height), y - items[typeHeaderIndex].y);\n        }\n    });\n\n    if ((appState.panel.viewState.isLibrarySearchMode() || appState.panel.viewState.isDocumentSearchMode()) && !appState.panel.viewState.isRootView()) {\n        const searchOptionsMessageHeight = SearchOptionsMessage.getHeight(width);\n        items.push({ type: 'searchOptionsMessage', data: {}, x: 0, y, width, height: searchOptionsMessageHeight });\n        y += searchOptionsMessageHeight;\n    }\n\n    // We only want to add the brand kit view in the virtualizer if we are in mobile view\n    if (library && configuration.currentProduct.shouldShowBrandKitView?.(library) && environment.isMobileView) {\n        const BRAND_KIT_VIEW_HEIGHT = 720;\n        items.push({ type: 'brandKitView', data: {}, library, x: 0, y, width, height: BRAND_KIT_VIEW_HEIGHT });\n        y += BRAND_KIT_VIEW_HEIGHT;\n    }\n\n    if (dimensions.height <= y && !shouldShowDocumentAssetsOnboarding(library) && !configuration.currentProduct.config.hideExtraBottomSpace) {\n        items.push({ type: 'spacer', data: {}, x: 0, y, width, height: BOTTOM_SPACER_HEIGHT });\n        y += BOTTOM_SPACER_HEIGHT;\n    }\n\n    const dropTarget = new ElementDropTarget({ x: 0, y: 0, width, height: Math.max(y, dimensions.height) });\n    addDropTarget(dropTarget, dropTargets, items);\n\n    // The onboarding should be place at the bottom of the panel so height should be whatever vertical space remains.\n    pushDocumentAssetsOnboarding({ x: 0, y, width, height: dimensions.height - y }, items, library);\n\n    return { sectionItems, dropTargets, items };\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer, PropTypes as MobxPropTypes } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { default as DefaultBaseContentView } from './BaseContentView';\nimport getViewByTypeItems from './items/getViewByTypeItems';\n\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport { Element } from '@cclibraries/cc-libraries-js';\nimport { Library } from '@cclibraries/cc-libraries-js';\nimport DocumentAssetsContainer from 'app/js/models/documentAssets/DocumentAssetsContainer';\nimport DocumentElement from 'app/js/models/documentAssets/DocumentElement';\n\n@observer\nexport default class TypeContentView extends React.Component {\n    static propTypes = {\n        width: PropTypes.number,\n        height: PropTypes.number,\n        library:  PropTypes.oneOfType([ PropTypes.instanceOf(Library), PropTypes.instanceOf(DocumentAssetsContainer) ]),\n        elements: MobxPropTypes.arrayOrObservableArrayOf(PropTypes.oneOfType([ PropTypes.instanceOf(Element), PropTypes.instanceOf(DocumentElement) ])).isRequired,\n        baseContentView: PropTypes.elementType\n    };\n\n    static defaultProps = {\n        baseContentView: DefaultBaseContentView\n    };\n\n    static contextType = LibrariesContext;\n\n    injectItems = () => getViewByTypeItems(\n        this.props.library,\n        this.props.elements,\n        {\n            width: this.props.width,\n            height: this.props.height\n        }\n    );\n\n    render() {\n        const {\n            baseContentView: BaseContentView,\n            width,\n            height,\n        } = this.props;\n\n        return (\n            <BaseContentView\n                itemInjector={ this.injectItems }\n                width={ width }\n                height={ height }\n            />\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer, PropTypes as MobxPropTypes } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport GroupContentView from './GroupContentView';\nimport TypeContentView from './TypeContentView';\nimport configuration from 'app/js/config/configuration';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport { Element } from '@cclibraries/cc-libraries-js';\nimport { Group } from '@cclibraries/cc-libraries-js';\nimport DocumentGroup from 'app/applications/SPRK/js/models/documentAssets/DocumentGroup';\nimport DocumentElement from 'app/js/models/documentAssets/DocumentElement';\n\n@observer\nexport default class LibraryContentsView extends React.Component {\n    static propTypes = {\n        width: PropTypes.number,\n        height: PropTypes.number,\n        library: PropTypes.any,\n        elements: MobxPropTypes.arrayOrObservableArrayOf(PropTypes.oneOfType([ PropTypes.instanceOf(Element), PropTypes.instanceOf(DocumentElement) ])).isRequired,\n        groups: MobxPropTypes.arrayOrObservableArrayOf(PropTypes.oneOfType([ PropTypes.instanceOf(Group), PropTypes.instanceOf(DocumentGroup) ])),\n        baseContentView: PropTypes.elementType\n    };\n\n    static contextType = LibrariesContext;\n\n    get shouldRenderGroupView() {\n        return (this.context.viewState.viewByState === 'group'\n            || (this.context.viewState.isDocumentSearchMode() && configuration.currentProduct.config.defaultViewByState === 'group'))\n            && this.props.groups;\n    }\n\n    render() {\n        // Note: Group by Role and Group by Type both use the TypeContentView\n        const ContentView = this.shouldRenderGroupView ? GroupContentView : TypeContentView;\n        return <ContentView { ...this.props } />;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { observable } from 'mobx';\nimport { translate } from 'app/js/managers/translationManager';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport environment from 'app/js/environment';\nimport configuration from 'app/js/config/configuration';\nimport metrics from 'app/js/interface/metrics';\nimport { isLayerDragData, createElementFromDocument } from 'app/js/utils/dragUtils';\nimport { copyOrMoveElements } from 'app/js/utils/libraryUtils';\nimport { addElementsFromFileList } from 'app/js/utils/addElementUtils';\nimport classNames from 'classnames';\nimport { Library } from '@cclibraries/cc-libraries-js';\nimport DocumentAssetsContainer from '../models/documentAssets/DocumentAssetsContainer';\n\nconst getKeys = ({ metaKey, altKey, ctrlKey, shiftKey }) => ({ metaKey, altKey, ctrlKey, shiftKey });\n\n@observer\nexport default class LibraryDropTarget extends Component {\n\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        library: PropTypes.oneOfType([ PropTypes.instanceOf(Library), PropTypes.instanceOf(DocumentAssetsContainer) ]).isRequired,\n        children: PropTypes.func.isRequired,\n        className: PropTypes.string\n    };\n\n    @observable isDraggedOver = false;\n    dragData = null;\n\n    _showElementAddedToast(elements) {\n        const numElements = elements && elements.length;\n        if (!numElements) {\n            return;\n        }\n        const messageString = numElements > 1 ? 'DL_ELEMENTS_ADDED_SUCCESFUL' : 'DL_ELEMENT_ADDED_SUCCESFUL';\n        this.context.toastManager.openToast('message', { message: translate(messageString, { numElements, libraryName: this.props.library.name }) });\n    }\n\n    _onDragOver = dragEvent => {\n        if (this.context.viewState.isLibraryWritable(this.props.library, false)\n            && (\n                dragEvent.dataTransfer.types.includes(environment.ElementDragId)\n                || dragEvent.dataTransfer.types.includes('Files')\n            )\n        ) {\n            if (dragEvent.dataTransfer.types.includes('Files')) {\n                dragEvent.dataTransfer.dropEffect = 'copy';\n            }\n\n            dragEvent.preventDefault();\n            this.isDraggedOver = true;\n        }\n    }\n\n    _onDragLeave = () => {\n        this.isDraggedOver = false;\n        this.dragData = null;\n    }\n\n    _onDragEnter = dragEvent => {\n        dragEvent.preventDefault();\n        this.context.viewState.getDraggingData()\n            .then(dragData => this.dragData = dragData);\n    }\n\n    _onDrop = dropEvent => {\n        this.isDraggedOver = false;\n        const payload = dropEvent.dataTransfer.getData(environment.ElementDragId);\n        const files = dropEvent.dataTransfer.files;\n        const layerData = this.dragData;\n        this.dragData = null;\n\n        if (!this.context.viewState.isLibraryWritable(this.props.library, false)) {\n            return;\n        }\n\n        if (isLayerDragData(layerData)) {\n            // If the host determined this drag to be invalid, abort.\n            const isValid = layerData.assetList && layerData.assetList.length > 0;\n            if (!isValid) { return; }\n\n            layerData.library = this.props.library;\n\n            // If we are dropping from the product, allow the product chance to modify the drop behaviour - this may depend on the modifier keys\n            const keys = getKeys(dropEvent);\n            const productDropHandler = configuration.currentProduct.dropHandler\n                ? configuration.currentProduct.dropHandler(layerData, keys)\n                : Promise.reject();\n\n            productDropHandler\n                .catch(() => createElementFromDocument(layerData, this.props.library))\n                .then(elements => {\n                    if (elements) {\n                        elements = Array.isArray(elements) ? elements : [ elements ];\n                        this._showElementAddedToast(elements);\n                    }\n                });\n        } else if (payload) {\n            const parsedPayload = JSON.parse(payload);\n\n            if (parsedPayload.libraryId === this.props.library.id) {\n                return;\n            }\n\n            const elementIds = parsedPayload.elementIds;\n            const elements = elementIds.map(id => this.context.libraryManager.currentLibrary.getElementById(id));\n            const isMove = !dropEvent.altKey;\n            metrics.setExtraEventMetrics('updateElement', { subtype: 'ungroup', content: { category: 'Drag Drop' } });\n            metrics.setExtraEventMetrics(isMove ? 'moveElement' : 'copyElement', { content: { category: 'Drag Drop' } });\n            metrics.reportEvent('Element Operations', 'Element', 'click', isMove ? 'move-to-library' : 'ungroup', { event: { count: elements.length, value: 'agg' }, content: { category: 'Drag Drop' } });\n\n            copyOrMoveElements(isMove, elements, this.props.library);\n        } else if (files && files.length > 0) {\n            dropEvent.preventDefault();\n            dropEvent.stopPropagation();\n\n            const getFiles = environment.getDragFileList ? environment.getDragFileList.bind(environment) : () => Promise.resolve(files);\n\n            getFiles().then((files) => {\n                addElementsFromFileList(this.props.library, files).then(response => {\n                    this._showElementAddedToast(response);\n                });\n            });\n        }\n    }\n\n    render() {\n        const { library, children, className, ...otherProps } = this.props;\n        const classes = classNames('library-list-item-container', className);\n        return <div\n            data-test-id={ `library-drop-target-${library.id}` }\n            onDragOver={ this._onDragOver }\n            onDragLeave={ this._onDragLeave }\n            onDragEnter={ this._onDragEnter }\n            onDrop={ this._onDrop }\n            className={ classes }\n            { ...otherProps }\n        >\n            { children(this.isDraggedOver) }\n        </div>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { translate } from 'app/js/managers/translationManager';\nimport EditableName from './EditableName';\nimport { isLibraryRenameable } from 'app/js/utils/libraryUtils';\nimport { Library } from '@cclibraries/cc-libraries-js';\nimport DocumentAssetsContainer from 'app/js/models/documentAssets/DocumentAssetsContainer';\n\n@observer\nexport default class EditableLibraryName extends React.Component {\n\n    static defaultProps = {\n        allowLongDoubleClick: true,\n        isSelected: false,\n    };\n\n    static propTypes = {\n        allowLongDoubleClick: PropTypes.bool,\n        library: PropTypes.instanceOf(Library, DocumentAssetsContainer).isRequired,\n        onEditFinish: PropTypes.func,\n        onOverflowChange: PropTypes.func,\n        isSelected: PropTypes.bool,\n        isEditDisabled: PropTypes.bool\n    };\n\n    render() {\n        return (\n            <EditableName\n                item={ this.props.library }\n                allowBlankName={ false }\n                allowLongDoubleClick={ this.props.allowLongDoubleClick }\n                placeholder={ translate('DL_EDIT_NAME_PLACEHOLDER') }\n                inputClassName=\"library-list-item-edit-name\"\n                onEditFinish={ this.props.onEditFinish }\n                onOverflowChange={ this.props.onOverflowChange }\n                isSelected={ this.props.isSelected }\n                isReadOnly={ !isLibraryRenameable(this.props.library) }\n                isEditDisabled={ this.props.isEditDisabled }\n            />\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { observable } from 'mobx';\nimport environment from 'app/js/environment';\nimport * as LibraryUtils from 'app/js/utils/libraryUtils';\nimport { mapOwnershipType } from 'app/applications/CCX/js/utils.js';\nimport classNames from 'classnames';\nimport Icon from 'app/js/components/Icon';\nimport EditableLibraryName from 'app/js/components/editable-names/EditableLibraryName';\nimport metrics from 'app/js/interface/metrics';\nimport Tooltip from 'app/js/components/Tooltip';\nimport { getClosestFocusedAncestor } from 'app/js/utils/DOMUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport menuManager from 'app/js/managers/menuManager';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport configuration from 'app/js/config/configuration';\nimport { getLocalizedDate } from 'app/js/managers/translationManager';\nimport LibraryDropTarget from 'app/js/components/LibraryDropTarget';\nimport { Library } from '@cclibraries/cc-libraries-js';\nimport DocumentAssetsContainer from '../models/documentAssets/DocumentAssetsContainer';\nimport ContextMenuButton from 'app/js/components/ContextMenuButton';\nimport OverlayState from 'app/js/components/utils/OverlayState';\nimport featureFlags from '../config/featureFlags';\n\n@observer\nexport default class LibraryListItem extends React.Component {\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        library: PropTypes.oneOfType([ PropTypes.instanceOf(Library), PropTypes.instanceOf(DocumentAssetsContainer) ]).isRequired,\n        // Should provide onClick if allowNavigation is true.\n        onClick: PropTypes.func,\n        isSelected: PropTypes.bool,\n        isRecent: PropTypes.bool,\n        sharingIconOnly: PropTypes.bool,\n        allowNavigation: PropTypes.bool,\n        allowLongDoubleClick: PropTypes.bool,\n        disableContextMenu: PropTypes.bool,\n        disableEditableName: PropTypes.bool,\n        showCreatedDate: PropTypes.bool,\n        showContextMenuButton: PropTypes.bool,\n        children: PropTypes.node // Allow callers to extend the library item and display custom information about it.\n    }\n\n    static defaultProps = {\n        sharingIconOnly: true,\n        allowNavigation: true,\n        allowLongDoubleClick: true,\n        showContextMenuButton: false\n    };\n\n    overlayState = new OverlayState({\n        ignoreScrollEvents: true,\n        ignoreFocus: true\n    });\n\n    @observable hasNameTooltip = !!environment.hasUXPScrollWidthBug;\n\n    componentDidMount = () => {\n        this.context.libraryManager.fetchLibraryCollaborations(this.props.library, configuration.FETCH_COLLABORATIONS_THROTTLE);\n    }\n\n    get iconHeight() {\n        return configuration.currentProduct.config.libraryListItemIconSize || 12;\n    }\n\n    // if library is recent, uses a proxy to return an object that's the same as the original library, just has a different id\n    get sectionLibrary() {\n        if (this.props.isRecent) {\n            this._recentLibrary = this._recentLibrary || new Proxy(this.props.library, {\n                get: (target, prop) => prop === 'id' ? `${target.id}${configuration.RECENT_LIBRARY_ID_FLAG}` : target[prop]\n            });\n            return this._recentLibrary;\n        }\n        return this.props.library;\n    }\n\n    get isDocumentAssets() {\n        return this.props.library.isDocumentAssets;\n    }\n\n    get gatedUpdates() {\n        return this.props.library.gatedUpdates || [];\n    }\n\n    get gatedUpdatesBadge() {\n        if (!this.gatedUpdates.length) { return; }\n        const countLabel = this.gatedUpdates.length >= configuration.MAX_ASSET_UPDATE_COUNT ? 'UPDATE_COUNT_MAX' : 'UPDATE_COUNT';\n        const number = this.gatedUpdates.length >= configuration.MAX_ASSET_UPDATE_COUNT ? configuration.MAX_ASSET_UPDATE_COUNT : this.gatedUpdates.length;\n        return (\n            <div data-test-id=\"library-list-item-update-count\" className=\"library-list-item-update-count\">\n                { translate(countLabel, { number }) }\n            </div>\n        );\n    }\n\n    get folder() {\n        return this.props.library && this.context.libraryManager.platformFolders.find(folder => this.props.library.parentDirectoryId === folder.id);\n\n    }\n\n    get libraryName() {\n        // We need to pass section library to EditableLibraryName so that if\n        // the library is recent, when the EditableName compares the item.id\n        // to the renamingItem.id it will not set the non recent library item\n        // to rename mode, and vice versa.\n        return <EditableLibraryName\n            onOverflowChange={this.handleOverflowChange }\n            library={ this.sectionLibrary }\n            allowLongDoubleClick={ this.props.allowLongDoubleClick }\n            onEditFinish={ this.finishRename }\n            isSelected={ this.props.isSelected }\n            isEditDisabled={ this.props.disableEditableName }\n        />;\n    }\n\n    get linkedLibraryIcon() {\n        if (this.isDocumentAssets) {\n            return <Icon id=\"DocumentAssets\" height={ this.iconHeight } className={ classNames({ 'notification-indicator': !!this.gatedUpdates.length }) } />;\n        }\n\n        if (this.props.library.documentId) {\n            return <Icon id=\"LinkedLibrary\" height={ this.iconHeight } />;\n        }\n    }\n\n    get shareIcon() {\n        if (this.isDocumentAssets) {\n            return;\n        }\n\n        if (LibraryUtils.isTeamLibrary(this.props.library)) {\n            if (featureFlags.get('enableProjects')) {\n                return <Icon id=\"Projects\" height={ this.iconHeight }/>;\n            }\n            return <Icon id=\"Building\" height={ this.iconHeight }/>;\n        }\n\n        // TODO: Add click handlers when Share Sheet is enabled\n        if (LibraryUtils.isSharedUserLibrary(this.props.library)) {\n            return <Icon id=\"UserGroup\" height={ this.iconHeight }/>;\n        }\n\n        if (LibraryUtils.isPublicLibrary(this.props.library)) {\n            return <Icon id=\"Globe\" height={ this.iconHeight }/>;\n        }\n    }\n\n    get dataTestId() {\n        return `library-list-item-${this.props.library.id}`;\n    }\n\n    finishRename = (renameTrigger) => {\n        metrics.reportEvent('Library Operations', 'Library', 'click', 'rename', { content: { category: renameTrigger === 'click' ? 'List Click' : 'List Right Click' } }, this.props.library);\n        if (environment.setHeader) {\n            environment.setHeader();\n        }\n    }\n\n    handleClick = (e) => {\n        const node = getClosestFocusedAncestor(e);\n        if (node && node.tagName !== 'INPUT') {\n            node.blur();\n        }\n\n        const viewState = this.context.viewState;\n        const searchText = viewState.getSearchText();\n\n        if (viewState.isSearchMode() && searchText && configuration.currentProduct.config.reportSearchSDMEvents) {\n            const selectedLibrary = this.sectionLibrary;\n            const libraryType = selectedLibrary.roles[0] ? selectedLibrary.roles[0].type : 'library';\n            const libraryOrder = viewState.librariesInViewOrder.indexOf(selectedLibrary) + 1;\n\n            const openLibraryPayload = {\n                'custom.library.type': mapOwnershipType(selectedLibrary.ownership),\n                'custom.library.filter': libraryType,\n                'ui.search_keyword': searchText,\n                'custom.ui.location': 'editor-brands-libraries-tab',\n                'custom.search.rank': libraryOrder,\n                'custom.search.id': viewState.getSearchId()\n            };\n\n            configuration.currentProduct.config.reportSearchSDMEvents(openLibraryPayload);\n        }\n\n        if (!this.isRenamingMode && this.props.allowNavigation && this.props.onClick) {\n\n            const selectType = this.props.library.isDocumentAssets && 'select-document-assets' || 'select-library';\n            metrics.reportEvent('Navigation', 'Library Panel', 'click', selectType, null, this.props.library);\n            viewState.setSearchText('');\n            viewState.setSearchType('library');\n            this.props.onClick(this.props.library);\n        }\n\n        menuManager.closeContextMenu();\n    }\n\n    handleOverflowChange = (hasOverflow) => {\n        this.hasNameTooltip = environment.hasUXPScrollWidthBug || hasOverflow;\n    }\n\n    handleContextMenu = (mouseEvent) => {\n        if (environment.setContextMenu && !this.props.disableContextMenu) {\n            this.overlayState.toggleOverlay();\n            const excludedActions = configuration.currentProduct.config.disabledLibraryContextMenuActions || [];\n            this.context.viewManager.stopRename();\n            mouseEvent.stopPropagation();\n            const actions = this.context.libraryActions.getLibraryActions(this.props.library, false, this.props.isRecent).filter(action => !excludedActions.includes(action.id));\n            menuManager.openContextMenu(actions, mouseEvent);\n        }\n    }\n\n    get isRenamingMode() {\n        return this.context.viewManager.renamingItem && this.context.viewManager.renamingItem.id === this.sectionLibrary.id;\n    }\n\n    get invalidRename() {\n        return this.isRenamingMode && this.context.viewManager.renameStatus !== configuration.RENAME_STATES.VALID;\n    }\n\n    get shareLabel() {\n        return LibraryUtils.getLibrarySharingString(this.props.library);\n    }\n\n    get shareTooltip() {\n        return LibraryUtils.getLibrarySharingString(this.props.library, true);\n    }\n\n    get shareStatus() {\n        if (!this.shareIcon && this.props.sharingIconOnly) {\n            return;\n        }\n\n        return <Tooltip className=\"library-list-item-tooltip library-list-item-icon-container\" content={ this.shareTooltip } disable={ !!this.isRenamingMode } placement=\"right\">\n            <div data-test-id=\"library-list-item-sharing-container\" className=\"library-list-item-sharing-container\">\n                <div data-test-id=\"icon\" className=\"library-list-item-shared-icon\">{ this.shareIcon && this.shareIcon }</div>\n                {!this.props.sharingIconOnly && (\n                    <span data-test-id=\"sharing\" className=\"library-list-item-sharing\">{ this.shareLabel }</span>\n                )}\n            </div>\n        </Tooltip>;\n    }\n\n    get isHighlighted() {\n        // highlight a library in root view when recently toggled on\n        return this.context.libraryManager.isLibraryRecentlyActive(this.props.library);\n    }\n\n    get createdDate() {\n        return (\n            <Tooltip className=\"library-list-item-created\" content={ translate('DL_INFO_CREATED_DATE') }>\n                <div data-test-id=\"created-date\">{ getLocalizedDate(new Date(this.props.library.created), true) }</div>\n            </Tooltip>\n        );\n    }\n\n    get contextMenuButton() {\n        return (\n            <div className={classNames('library-list-item-context-menu', { 'open': this.overlayState.isOpen })}>\n                <ContextMenuButton quiet data-test-id=\"mosaic-context-menu\" onContextMenuClick={this.handleContextMenu} />\n            </div>\n        );\n    }\n\n    render() {\n        return (\n            <LibraryDropTarget library={this.props.library}>\n                { isDraggedOver => {\n                    const classes = classNames('library-list-item', {\n                        'is-dragged-over': isDraggedOver,\n                        'is-selected': this.props.isSelected,\n                        'is-renaming': !!this.isRenamingMode,\n                        'is-highlighted': this.isHighlighted,\n                        'invalid': !!this.invalidRename,\n                    });\n\n                    return <div\n                        data-test-id={ this.dataTestId }\n                        className={ classes }\n                        onClick={ this.handleClick }\n                        { ...environment.contextMenuEventListeners(this.handleContextMenu) }\n                        onKeyPress={ (e) => (e.key === 'Enter') ? this.handleClick(e) : null }\n                        tabIndex=\"0\"\n                        role=\"option\"\n                        aria-selected={this.context.libraryManager.currentLibrary === this.props.library}\n                        aria-label={`${this.props.library.name}, ${this.shareLabel}`}\n                    >\n                        <Tooltip className=\"library-list-item-tooltip library-list-item-name-container\" content={this.props.library.name} disable={!this.hasNameTooltip || !!this.isRenamingMode} placement=\"top\">\n                            { this.linkedLibraryIcon && <div data-test-id=\"linked-library-icon\" className=\"library-list-item-linked-library-icon\">{ this.linkedLibraryIcon }</div> }\n                            <div data-test-id=\"name\" className=\"library-list-item-name\">\n                                { this.libraryName }\n                            </div>\n                        </Tooltip>\n                        { this.isDocumentAssets ? this.gatedUpdatesBadge : this.shareStatus }\n                        { this.props.showContextMenuButton && this.contextMenuButton }\n                        { this.props.showCreatedDate && this.createdDate }\n                        {/* Render custom fields at the end */}\n                        { this.props.children }\n                    </div>;\n                } }\n            </LibraryDropTarget>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport Tooltip from './Tooltip';\nimport { translate } from 'app/js/managers/translationManager';\nimport configuration from 'app/js/config/configuration';\nimport { openHelpURL } from 'app/js/utils/linkUtils';\nimport Icon from 'app/js/components/Icon';\nimport dragManager from 'app/js/managers/dragManager';\nimport ElementDropTarget from 'app/js/managers/dragDrop/elementDropTarget';\nimport Button from '@torq-native/react-spectrum/Button';\nimport { editInSource } from 'app/js/utils/editOriginalUtils';\nimport { Library } from '@cclibraries/cc-libraries-js';\n\n@observer\nexport default class EmptyLibraryView extends React.Component {\n    static defaultProps = {\n        library: null\n    };\n\n    static propTypes = {\n        library: PropTypes.oneOfType([ PropTypes.instanceOf(Library) ])\n    };\n\n    get addDocContentOperation() {\n        return configuration.currentProduct.getAddDocContentOperation && configuration.currentProduct.getAddDocContentOperation();\n    }\n\n    get containerKey() {\n        const accessType = this.props.library.isWritable ? 'write' : 'read';\n        const libraryType = this.props.library.documentType ? 'linked-library' : 'traditional-library';\n        return `${accessType}-${libraryType}`;\n    }\n\n    get instructionContent() {\n        const accessType = this.props.library.isWritable ? 'EDIT' : 'VIEW';\n        return this.props.library.documentType ? `DL_EMPTY_LIB_PANEL_INSTRUCTION_${accessType}_LINKED_LIB` : `DL_EMPTY_LIB_PANEL_INSTRUCTION_${accessType}_TRADITIONAL`;\n    }\n\n    get instructionMessage() {\n        return <div className=\"panel-empty-view-instructions\" data-test-id={`instructions-${this.containerKey}`}>\n            { translate(this.instructionContent) }\n        </div>;\n    }\n\n    howToUseInBrowser() {\n        openHelpURL();\n    }\n\n    get emptyIconName() {\n        const accessType = this.props.library.isWritable ? 'Edit' : 'View';\n        return this.props.library.documentType ? `LinkedDocumentLibrary_Can${accessType}` : `TraditionalLibrary_Can${accessType}`;\n    }\n\n    get emptyIcon() {\n        const iconProps = { id: this.emptyIconName, height: 110 };\n        return <Icon id={ iconProps.id } height={ iconProps.height }/>;\n    }\n\n    get graphic() {\n        return <div className=\"panel-empty-view-icon\" data-test-id=\"icon\">\n            { this.emptyIcon }\n        </div>;\n    }\n\n    get headerContentWriteAccess() {\n        return this.props.library.documentType ? 'DL_EMPTY_LIB_PANEL_HEADING' : 'DL_EMPTY_LIB_PANEL_HEADING_EDIT_TRADITIONAL';\n    }\n\n    get header() {\n        const headerContent = this.props.library.isWritable ? this.headerContentWriteAccess : 'DL_EMPTY_LIB_PANEL_HEADING';\n        return <div className=\"panel-empty-view-header\" data-test-id={`header-${this.containerKey}`}>\n            { translate(headerContent) }\n        </div>;\n    }\n\n    get learnMoreButton() {\n        if (configuration.currentProduct.config.disableEmptyStateHelpIcon) { return; }\n        return <Tooltip content={ translate('DL_EMPTY_LIB_LEARN_MORE') }>\n            <div className=\"panel-empty-help-icon\" data-test-id=\"help\" onClick={this.howToUseInBrowser}>\n                <Icon id=\"Question\" height={ 18 }/>\n            </div>\n        </Tooltip>;\n    }\n\n    get addDocContentButton() {\n        if (!this.addDocContentOperation) {\n            return;\n        }\n        return <Tooltip content={ translate(this.addDocContentOperation.buttonToolTip) } data-test-id=\"add-doc-content-tooltip\">\n            <div className=\"panel-empty-add-doc-content\" data-test-id=\"add-doc-content\" onClick={this.addDocContentOperation.apply}>\n                <span className=\"panel-empty-add-doc-content-text\" data-test-id=\"add-doc-content-text\">\n                    { translate(this.addDocContentOperation.buttonName) }\n                </span>\n            </div>\n        </Tooltip>;\n    }\n\n    get openSourceFilelink() {\n        return <div className=\"panel-empty-view-link\" onClick={ () => editInSource(this.props.library) }>{ translate('DL_EMPTY_LIB_LINKED_LIBRARY') }</div>;\n    }\n\n    get openSourceFileButton() {\n        return <Button className=\"panel-empty-add-open-source-file-button\"\n            label={ translate('DL_EMPTY_LIB_LINKED_LIBRARY') }\n            onClick={ () => editInSource(this.props.library) }\n            variant=\"action\"\n            icon={<Icon width={12} height={12} id=\"OpenIn\" className=\"panel-empty-button-icon\" header={translate('DL_EMPTY_LIB_LINKED_LIBRARY')}/>}\n        />;\n    }\n\n    get openSourceFile() {\n        if (this.props.library.documentType && this.props.library.isWritable) {\n            return configuration.currentProduct.addOpenSourceFileButton ? this.openSourceFileButton : this.openSourceFilelink;\n        }\n    }\n\n    get content() {\n        if (!this.props.library || this.props.library.isDeletedFromServer) {\n            return;\n        }\n\n        return <div className=\"panel-empty-view-inner-container\" data-test-id={ `content-${this.containerKey}}`}>\n            { this.graphic }\n            { this.header }\n            { this.instructionMessage }\n            { this.openSourceFile }\n        </div>;\n    }\n\n    handleDrop = (dropEvent) => {\n        dragManager.handleDrop(dropEvent);\n    }\n\n    _dropTarget = new ElementDropTarget({});\n    handleDragOver = () => {\n        dragManager.setActiveDropTarget(this._dropTarget);\n    }\n\n    render() {\n        return <div className=\"panel-empty-view-container\" data-test-id=\"emptyLibraryView\" id=\"emptyPanelContainer\" onDrop={ this.handleDrop } onDragOver={ this.handleDragOver }>\n            { this.content }\n        </div>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { observable } from 'mobx';\nimport classNames from 'classnames';\nimport configuration from 'app/js/config/configuration';\nimport debugLog from 'app/js/utils/debugLog';\nimport dragManager from 'app/js/managers/dragManager';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport librarySizeManager from 'app/js/managers/librarySizeManager';\nimport { getNamesFromDropData, hasNativeFileTypes } from 'app/js/utils/dragUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport Icon from 'app/js/components/Icon';\nimport environment from 'app/js/environment';\nimport metrics from 'app/js/interface/metrics';\n\n// Shortcut for extracting modifiers keys from an event\nconst getKeys = ({ metaKey, altKey, ctrlKey, shiftKey }) => ({ metaKey, altKey, ctrlKey, shiftKey });\n\n@observer\nexport default class LibraryDragLayer extends React.Component {\n    static contextType = LibrariesContext;\n\n    @observable.ref _dropData;\n    // Since dragEnter and dragLeave fire on all child elements, we have\n    // to keep track of how many we drag over. When this array is empty,\n    // we know it's the actual dragLeave.\n    _dragTargets = [];\n\n    onMutation = (mutationsList) => {\n        mutationsList.forEach(list => {\n            list.removedNodes.forEach(removedNode => {\n                this._dragTargets.forEach((target, index) => {\n                    if (target === removedNode || removedNode.contains(target)) {\n                        this._dragTargets.splice(index, 1);\n                    }\n                });\n            });\n        });\n    }\n\n    componentDidMount() {\n        const EnvironmentMutationObserver = environment.MutationObserver || MutationObserver;\n        this.observer = new EnvironmentMutationObserver(this.onMutation);\n        this.observer.observe(this.dragLayerNode, { childList: true, subtree: true });\n    }\n\n    componentWillUnmount() {\n        this.observer.disconnect();\n    }\n\n    static propTypes = {\n        children: PropTypes.node\n    };\n\n    get message() {\n        return this._dropData.message;\n    }\n\n    get icon() {\n        return this._dropData.icon;\n    }\n\n    get isValid() {\n        return this._dropData.valid;\n    }\n\n    get layers() {\n        return this._dropData.layers;\n    }\n\n    get isDisabled() {\n        return !this.context.viewState.isLibraryWritable(this.context.libraryManager.currentLibrary) || !librarySizeManager.canAddElements(this.context.libraryManager.currentLibrary);\n    }\n\n    handleDragOver = dragEvent => {\n        // Drop from host app in windows won't work unless we set a dropeffect\n        if (environment.isWindowsOS() && dragEvent.dataTransfer.types.includes('com.adobe.cep.dnd.pasteboardtype')) {\n            dragEvent.dataTransfer.dropEffect = 'copy';\n        }\n\n        if (hasNativeFileTypes(dragEvent.dataTransfer.types)) {\n            dragEvent.dataTransfer.dropEffect = environment.supportsDropFiles && !this.isDisabled ? 'copy' : 'none';\n        }\n\n        dragEvent.preventDefault();\n    }\n\n    handleDragEnter = dragEvent => {\n        dragEvent.preventDefault();\n\n        if (configuration.currentProduct.config.disableLibraryDragLayer) {\n            return;\n        }\n\n        this._dragTargets.push(dragEvent.target);\n        if (this._dragTargets.length > 1) {\n            // Don't do anything if drag onto a child layer (dragEnter/Leave events trigger on the children, not just the top-level div)\n            return;\n        }\n\n        const library = this.context.libraryManager.currentLibrary;\n        if (library && library.isDeletedFromServer) {\n            // If it's deleted from the server, it's already displaying a \"this library was deleted from server\" overlay.\n            // So we don't want any drag overlay to be shown.\n            return;\n        }\n\n        const isDraggingFiles = hasNativeFileTypes(dragEvent.dataTransfer.types);\n        if (isDraggingFiles) {\n            if (environment.supportsDropFiles) {\n                this._doFilesDragEnter(dragEvent);\n            }\n        } else {\n            // We need to pass in the modifier keys, because the product may override the overlay message, based\n            // on what modifier keys are pressed.\n            const keys = getKeys(dragEvent);\n            this.context.viewState.getDraggingData()\n                .then(dragData => this._doLayersDragEnter(dragData, keys))\n                .catch(error => debugLog.log(error));\n        }\n    }\n\n    _setDropData(dropData) {\n        this._dropData = dropData;\n        dragManager.handleDragStart('element', [ dropData ], null);\n    }\n\n    _showLibraryFullError() {\n        this._dropData = {\n            disabled: true,\n            icon: 'Alert',\n            message: translate('DL_DESIGN_LIBRARY_HAS_LIMIT')\n        };\n    }\n\n    showReadOnlyAlert() {\n        this._dropData = {\n            disabled: true,\n            icon: 'Alert',\n            message: translate('DL_DESIGN_LIBRARY_READ_ONLY')\n        };\n    }\n\n    _doFilesDragEnter = () => {\n        this.context.viewState.resetMode();\n        if (!this.context.viewState.isLibraryWritable(this.context.libraryManager.currentLibrary)) {\n            this.showReadOnlyAlert();\n            return;\n        }\n        if (!librarySizeManager.canAddElements(this.context.libraryManager.currentLibrary)) {\n            this._showLibraryFullError();\n            return;\n        }\n        this._setDropData({\n            icon: 'UploadImage',\n            message: translate('DL_DESIGN_LIBRARY_NATIVE_DROP')\n        });\n    }\n\n    _doLayersDragEnter = (dropData, keys) => {\n        this.context.viewState.resetMode();\n        if (!this.context.viewState.isLibraryWritable(this.context.libraryManager.currentLibrary)) {\n            this.showReadOnlyAlert();\n            return;\n        }\n        if (!librarySizeManager.canAddElements(this.context.libraryManager.currentLibrary)) {\n            this._showLibraryFullError();\n            return;\n        }\n        let message = configuration.currentProduct.customDropMessage && configuration.currentProduct.customDropMessage(dropData, keys);\n\n        if (dropData.feedback) {\n            message = dropData.feedback;\n        }\n\n        const isValid = dropData.assetList && dropData.assetList.length > 0;\n        const setDropData = (layers = []) => {\n            this._setDropData({\n                data: dropData,\n                icon: dropData.linked ? 'AddLink' : 'AddCopy',\n                message,\n                layers,\n                valid: isValid\n            });\n        };\n\n        isValid ? getNamesFromDropData(dropData, this.context.libraryManager.currentLibrary).then(setDropData) : setDropData();\n    }\n\n    handleDragLeave = () => {\n        this._dragTargets.pop();\n        if (!this._dragTargets.length) {\n            // Cancelling drag drop from layers by dragging out\n            if (this._dropData && this._dropData.icon === 'UploadImage') {\n                // Cancelling bulk upload by dragging out\n                metrics.reportEvent('Add Assets', 'Element', 'click', 'add-cancel', { content: { category: 'Bulk Upload' } });\n            }\n\n            this._dropData = undefined;\n            dragManager.setActiveDropTarget();\n        }\n    }\n\n    handleDrop = () => {\n        this._dropData = undefined;\n        this._dragTargets = [];\n    }\n\n    get layersNode() {\n        if (this.isValid && this.layers.length) {\n            const layers = this.layers.map((layer, index) => <div key={ index.toString() }>{ layer }</div>);\n            return <div data-test-id=\"layers\" className=\"panel-contents-drop-area-text\">{ layers }</div>;\n        }\n    }\n\n    get dropArea() {\n        const classes = classNames('panel-contents-drop-area-icon', {\n            'panel-contents-drop-area-icon': this.isValid,\n            'panel-contents-drop-area-smaller-icon': !this.isValid\n        });\n\n        return (\n            <div className=\"panel-contents-drop-area-container\">\n                <div data-test-id=\"icon\" className={ classes }><Icon id={ this.icon } height={ 28 }/></div>\n                { this.layersNode }\n                <div data-test-id=\"message\" className=\"panel-contents-drop-area-subtext\">{ this.message }</div>\n            </div>\n        );\n    }\n\n    get showDropMessage() {\n        const library = this.context.libraryManager.currentLibrary;\n        const hasDropTargets = this.context.viewState.viewByState === 'group' && library && (library.getGroups().length > 0 || library.elements.length > 0);\n        // Show the drop message if it's an error (telling you why you can't drop),\n        // or if there are no specific drop targets (e.g. in view by type or an empty library, or a library with no groups).\n        return this._dropData && (this._dropData.disabled || !hasDropTargets);\n    }\n\n    get dragLayer() {\n        return this.showDropMessage && (\n            <div\n                data-test-id=\"drag-layer\"\n                className={\n                    classNames('panel-contents-drop-area', {\n                        'panel-contents-drop-area-disabled': this._dropData.disabled\n                    })\n                }\n                style={ { top: this.context.viewState.panelHeaderHeight } }\n            >\n                { this.dropArea }\n            </div>\n        );\n    }\n\n    setDragLayerRef = (node) => { this.dragLayerNode = node; }\n\n    render() {\n        return (\n            <div ref={ this.setDragLayerRef } data-test-id=\"library-contents-container\" className=\"panel-contents\" onDrop={ this.handleDrop }\n                onDragEnter={ this.handleDragEnter } onDragLeave={ this.handleDragLeave } onDragOver={ this.handleDragOver }>\n                { this.props.children }\n                { this.dragLayer }\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { translate } from 'app/js/managers/translationManager';\n\n/*\n * No Relink Result View\n * Shows a message that there are no linkable graphics in the current library.\n * Note: Displayed at the top of the library view rather than the center\n * to avoid showing up behind the initial \"Select a graphic to relink\" overlay, which is also centered.\n */\n\nexport default function NoRelinkResult() {\n    return (\n        <div className=\"panel-relink-result-none-container\" data-test-id=\"no-relink-result\">\n            <div className=\"panel-search-info\" data-test-id=\"no-relink-result-message\">\n                { translate('DL_RELINK_NONE_AVAILABLE') }\n            </div>\n        </div>\n    );\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n// Top level React View Component\n// Contains the library contents view, which uses a virtual scroller.\n\nimport React from 'react';\nimport { any } from 'prop-types';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport { AutoSizer } from 'react-virtualized';\n\nimport LibraryContentsView from './LibraryContentsView';\nimport EmptyLibraryView from './EmptyLibraryView';\nimport LibraryDragLayer from './LibraryDragLayer';\nimport NoSearchResult from './NoSearchResult';\nimport NoRelinkResult from './NoRelinkResult';\nimport environment from 'app/js/environment';\nimport metrics from 'app/js/interface/metrics';\nimport { isSearchTextEmpty } from 'app/js/utils/searchUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport configuration from 'app/js/config/configuration';\nimport Icon from 'app/js/components/Icon';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport { isBrandLibrary } from 'app/js/utils/brandUtils';\n\n@observer\nexport default class LibraryView extends React.Component {\n\n    static propTypes = {\n        library: any,\n    }\n\n    static contextType = LibrariesContext;\n\n    componentDidMount() {\n        // Clear any unused type options from the library filter if applicable\n        this.disposer = reaction(() => this.searchResults, () => {\n            if (this.viewState.librariesSearchState.filterCount) {\n                this.viewState.librariesSearchState.clearUnusedTypeOptions();\n            }\n        });\n    }\n\n    componentWillUnmount() {\n        this.disposer?.();\n    }\n\n    get library() {\n        return this.props.library || this.libraryManager.currentLibrary;\n    }\n\n    get viewState() {\n        return this.context.viewState;\n    }\n\n    get libraryManager() {\n        return this.context.libraryManager;\n    }\n\n    get searchResults() {\n        return this.viewState.librariesSearchState.searchResults;\n    }\n\n    get relinkResults() {\n        const types = this.viewState.getState().elementTypeFilter;\n        return this.libraryManager.currentLibrary.elements.filter(element => types.includes(element.type));\n    }\n\n    getLibraryContentsView(elements, groups) {\n        // The AutoSizer doesn't work in UXP, so we need the environment to be able to override it.\n        const AutoSizerComponent = environment.AutoSizer || AutoSizer;\n        // The UXPLibraryContentsView uses a UXP optimized virtualizer\n        const LibraryContentsViewComponent = environment.LibraryContentsView || LibraryContentsView;\n        return (\n            <AutoSizerComponent>\n                {({ width, height }) => <LibraryContentsViewComponent width={ width } height={ height } groups={ groups } elements={ elements } library={ this.library } />}\n            </AutoSizerComponent>\n        );\n    }\n\n    shouldDoSearch() {\n        return this.viewState.isSearchMode() && !isSearchTextEmpty(this.viewState.getSearchText());\n    }\n\n    get deletedFromServer() {\n        const library = this.library;\n        // Note that we render the library view for searching all libraries, so there might not be a current library\n        if (!library || !library.isDeletedFromServer) {\n            return null;\n        }\n\n        const sharedOrDeleted = library.collaboration === 'incoming' ? translate('DL_UNSHARED') : translate('DL_DELETED_FROM_SERVER');\n\n        return <div className=\"panel-deleted-message-container\" data-test-id=\"panel-deleted-message-container\" style={ { top: this.viewState.panelHeaderHeight } }>\n            <div data-test-id=\"panel-deleted-on-server\" className=\"panel-deleted-message\">\n                <div className=\"panel-deleted-message-inner\">\n                    <div className=\"panel-deleted-message-icon\"><Icon id=\"CreativeCloudAlert\" height={ 50 }/></div>\n                    <div className=\"panel-deleted-message-description\">{ sharedOrDeleted }</div>\n                </div>\n                <div className=\"panel-deleted-message-options\">\n                    <a data-test-id=\"delete-library\" className=\"panel-deleted-message-link\" onClick={ () => this.libraryManager.deleteLibrary(library) }>\n                        { translate('DL_REMOVE_FROM_LIST') }\n                    </a>\n                </div>\n            </div>\n        </div>;\n    }\n\n    get contents() {\n        // View deleted items mode\n        if (this.viewState.isRemovedElementsMode()) {\n            return this.getLibraryContentsView(this.library.removedElements);\n        }\n\n        // 'search' mode\n        if (this.shouldDoSearch()) {\n            const searchResults = this.searchResults;\n\n            // No search results view\n            if (searchResults.length === 0 && !this.viewState.searchState.isLoading) {\n                metrics.reportSearchEvent('Search', 'Search', 'render', 'no-results', { ui: { filter: this.viewState.getSearchType() } });\n                return <NoSearchResult />;\n            }\n\n            // TODO: Should move metrics reporting into the model\n            metrics.reportSearchEvent('Search', 'Search', 'render', 'results', { event: { value: searchResults.length }, ui: { filter: this.viewState.getSearchType() } });\n\n            // Document assets are always in view by group.\n            const filteredGroups = this.viewState.isDocumentSearchMode()\n                ? this.viewState.librariesSearchState.searchResultsGroups\n                : null;\n\n            return this.getLibraryContentsView(searchResults, filteredGroups);\n        }\n\n        if (this.viewState.searchState.filterCount > 0) {\n            // Always apply active filters even if we're not searching.\n            const filteredElements = this.searchResults;\n            const filteredGroups = this.viewState.viewByState === 'group'\n                ? this.viewState.librariesSearchState.searchResultsGroups\n                : null;\n\n            return this.getLibraryContentsView(filteredElements, filteredGroups);\n        }\n\n        // Empty current library in 'normal' or 'relink' mode\n        const isLoading = !this.library.areElementsLoaded;\n        const hasElements = this.library.elements.length > 0;\n        const hasGroups = this.library.getGroups().length > 0 && this.viewState.viewByState === 'group' && !this.viewState.isRelinkLayerMode();\n        const isReadOnly = !this.library.isWritable;\n        const noEmptyState = !isReadOnly && this.viewState.viewByState !== 'group' && configuration.currentProduct.config.hideEmptyLibraryTypeView;\n\n        if (!hasElements && !hasGroups && !isLoading && !noEmptyState) {\n            const EmptyLibraryComponent = configuration.currentProduct.config.emptyLibraryCustomComponent || EmptyLibraryView;\n            return <EmptyLibraryComponent library={this.library}/>;\n        }\n\n        // 'relink' mode\n        if (this.viewState.isRelinkLayerMode()) {\n            return this.relinkResults.length ? this.getLibraryContentsView(this.relinkResults) : <NoRelinkResult />;\n        }\n\n        // Brand library mode (shows library grid on left, and brandkit preview on right)\n        if (isBrandLibrary(this.library)) {\n            return this.getBrandKitModeView(this.library);\n        }\n\n        // 'normal' mode\n        return this.getNormalModeView(this.library);\n    }\n\n    getNormalModeView = library => {\n        return this.getLibraryContentsView(library.elements, this.viewState.viewByState === 'group' ? library.getGroups() : null);\n    }\n\n    getBrandKitModeView = library => {\n        // Render host's custom view, if any. Render the normal view otherwise.\n        if (environment.isMobileView || !(configuration.currentProduct.shouldShowBrandKitView?.(library))) {\n            return this.getNormalModeView(library);\n        }\n        return <div className=\"panel-library-contents-brand-wrapper\">\n            <div className=\"panel-library-contents-brand-left\">\n                {this.getNormalModeView(this.library)}\n            </div>\n            <div className=\"panel-library-contents-brand-right\">\n                {configuration.currentProduct.getBrandKitView(library)}\n            </div>\n        </div>;\n    }\n\n    // Allow applications to inject custom components into the library view (e.g. XD's missing fonts)\n    get contentsHeader() {\n        if (!this.viewState.isDefaultMode() || !this.library) { return null; }\n        const AdditionalLibraryHeaderView = configuration.currentProduct.config.AdditionalLibraryHeaderView;\n        return AdditionalLibraryHeaderView && <AdditionalLibraryHeaderView library={ this.library } />;\n    }\n\n    render() {\n        return <LibraryDragLayer>\n            { this.deletedFromServer }\n            <div data-test-id=\"panel-library-contents-wrapper\" className=\"panel-library-contents-wrapper\">\n                { this.contentsHeader }\n                <div data-test-id=\"panel-library-contents\" className=\"panel-library-contents\">\n                    { this.contents }\n                </div>\n            </div>\n        </LibraryDragLayer>;\n    }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"destructive\":\"PYB\",\"iconCustomization\":\"Pvf\"};","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport classNames from 'classnames';\nimport { MenuDivider, MenuHeading, MenuItem } from '@ccx-public/spectrum-wrapper/Menu';\nimport Icon from 'app/js/components/Icon';\nimport styles from './index.scss';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport { translate } from 'app/js/managers/translationManager';\nimport { observer } from 'mobx-react';\n\nexport type LibraryMenuItemType = {\n    id?: string;\n    label?: string;\n    icon?: string;\n    onClick?: () => void;\n    description?: string;\n    enableMenu?: boolean;\n    destructive?: boolean;\n    divider?: boolean;\n    checked?: boolean;\n    isTitle?: boolean;\n    key?: string;\n}\n\nexport type IconSizeType = 'S' | 'M' | 'L' | 'XL';\n\ntype MenuItemsProps = {\n    iconSize?: IconSizeType;\n    source?: string;\n    menuData: LibraryMenuItemType[];\n    hideDividers?: boolean;\n}\n\n@observer\nexport default class MenuItems extends React.Component<MenuItemsProps> {\n    static contextType = LibrariesContext;\n\n    static defaultProps = {\n        iconSize: 'S',\n    }\n\n    get iconHeight() {\n        switch (this.props.iconSize) {\n        case 'S':\n            return 18;\n        case 'M':\n            return 22;\n        case 'L':\n            return 32;\n        // when size is 'XL', the rendered icon size is still 32px\n        case 'XL':\n            return 32;\n        default:\n            return 18;\n        }\n\n    }\n\n    /**\n     * \n     * @param item The item appended at the end of the test id\n     * @returns { string } The string for the data test id\n     * @example\n     * this._getDataTestId('all') // with a source of 'dropdown' returns 'panel-dropdown-menu-item-all'\n     * this._getDataTestId('text') // with a source of 'dropdown' returns 'panel-dropdown-menu-item-text'\n     * this._getDataTestId('all') // with no source returns 'panel-menu-item'\n     * this._getDataTestId('text') // with no source returns undefined\n     */\n    _getDataTestId(item) {\n        if (this.props.source) {\n            return `panel-${this.props.source}-menu-item-${item}`;\n        }\n        return item === 'text' ? undefined : `menu-item-${item}`\n    }\n\n    _getIcon(action) {\n        if (!action.icon) { return null; }\n        const iconClasses = classNames(styles.iconCustomization, { [styles.destructive]: action.destructive });\n        return (\n           <Icon id={ action.icon } slot=\"icon\" height={ this.iconHeight } className={ iconClasses } />\n        );\n    }\n\n    render() {\n        return this.props.menuData.map(action => {\n            const actionKey = action.key || action.id;\n            if (action.divider) {\n                if (this.props.hideDividers) {\n                    return null;\n                }\n                return <MenuDivider key={actionKey} />;\n            } else if (action.isTitle) {\n                return <MenuHeading key={actionKey}>{ action.label }</MenuHeading>;\n            } \n            return (\n                <MenuItem\n                    key={actionKey}\n                    id={action.id}\n                    icon={this._getIcon(action)}\n                    onClick={ action.onClick }\n                    disabled={action.enableMenu === false}\n                    description={action.description}\n                    selected={ action.checked }\n                    data-test-id={ this._getDataTestId(actionKey) }\n                >\n                    <span data-test-id={ this._getDataTestId('text') } className={classNames({ [styles.destructive]: action.destructive })}>\n                        {translate(action.label)}\n                    </span>\n                </MenuItem>\n            );\n        });\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { computed, observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport { translate } from 'app/js/managers/translationManager';\nimport environment from 'app/js/environment';\nimport classNames from 'classnames';\nimport Icon from 'app/js/components/Icon';\nimport configuration from 'app/js/config/configuration';\n\n/**\n * This is a generic component for displaying a menu in JavaScript - it takes the same menuItems object structure\n * that the menuManager requires.\n *\n * TODO: Update the class names to something more generic (it's picking classes from different places).\n */\n\nconst MENU_ITEM_HEIGHT = 24;\nconst MENU_DIVIDER_HEIGHT = 3;\nconst MENU_FOOTER_HEIGHT = 25;\nconst MAX_NUMBER_DIVIDERS = 6;\n\n@observer\nexport default class MenuView extends React.Component {\n\n    static defaultProps = {\n        maxMenuItemsVisible: 10,\n        minMenuItemsVisible: 0,\n        iconHeight: 13,\n        footerMenu: false,\n        clientY: 0,\n        preserveMainMenuHeightForSubMenus: false,\n        canShowOutsidePanel: false\n    };\n\n    static propTypes = {\n        menuItems: PropTypes.array.isRequired,\n        maxMenuItemsVisible: PropTypes.number,\n        minMenuItemsVisible: PropTypes.number,\n        maxWidth: PropTypes.oneOfType([ PropTypes.string, PropTypes.number ]),\n        className: PropTypes.string,\n        style: PropTypes.object,\n        close: PropTypes.func,\n        iconHeight: PropTypes.number,\n        footerMenu: PropTypes.bool,\n        clientY: PropTypes.number,\n        preserveMainMenuHeightForSubMenus: PropTypes.bool,\n        canShowOutsidePanel: PropTypes.bool\n    };\n\n    componentDidUpdate(prevProps) {\n        // Reset the menu if the menu items change:\n        if (prevProps.menuItems !== this.props.menuItems) {\n            this.activeSubMenu = [ { menuItems: this.props.menuItems } ];\n        }\n    }\n\n    @observable.ref activeSubMenu = [ { menuItems: this.props.menuItems } ];\n    @observable.ref _parentElement = undefined;\n\n    @computed get headerLabel() {\n        return this.activeSubMenu[0].label;\n    }\n\n    @computed get menuItems() {\n        return this.activeSubMenu[0].menuItems;\n    }\n\n    onClickMenuItem(menuItem, event) {\n        if (menuItem.menuItems) {\n            // Save height of main menu, before descending first time within submenu\n            this.mainMenuContainerHeight = this.mainMenuContainerHeight || this._scrollableElement.offsetHeight;\n            // For a sub-menu, descend within\n            this.activeSubMenu = [ menuItem ].concat(this.activeSubMenu);\n        } else if (menuItem.enableMenu !== false) {\n            // Otherwise, it's an actual action to perform!\n            this.props.close && this.props.close(event);\n            menuItem.onClick();\n        }\n    }\n\n    onClickBack = () => {\n        this.activeSubMenu = this.activeSubMenu.slice(1);\n    }\n\n    _getMenuIndex = (menuItem, index) => {\n        // Get the unique index, minus the id prefix, e.g. 0, 1, 2 for menu items, or 0_0, 0_1, 0_2 for a submenu items of menu item 0.\n        // Fixes the issue where React was calling onClick on the parent menu item with the same index.\n        // Note that in some places we bypass the MenuManager which adds the menuId, and call setContextMenu()\n        // directly on the environment, and therefore we use the map index as backup. (Not recommended when there's no submenu).\n        return menuItem.menuId ? menuItem.menuId.replace('MENU_', '') : index;\n    }\n\n    _getItemIcon = (menuItem, index) => {\n        if (menuItem.hideIcon) {\n            return;\n        }\n        index = this._getMenuIndex(menuItem, index);\n        const icon = menuItem.icon || (menuItem.checked && 'Checkmark');\n        const iconHeight = configuration.currentProduct.config.defaultMenuIconHeight || this.props.iconHeight;\n        const style = menuItem.style ? { ...menuItem.style, height: iconHeight - 2 , width: iconHeight - 2 } : {};\n        const iconClasses = classNames('panel-menu-icon', { warning: menuItem.destructive });\n\n        return (\n            <div data-test-id={ `menu-item-${index}-icon` } className={ iconClasses } style={ style }>\n                { icon && <Icon id={ icon } height={ iconHeight } /> }\n            </div>\n        );\n    }\n\n    _getMenuItem = (menuItem, index) => {\n        index = this._getMenuIndex(menuItem, index);\n\n        if (menuItem.divider) {\n            return <div key={ index } className=\"panel-group-menu-subdivider\" />;\n        }\n\n        const itemClasses = classNames('panel-group-menu-item', {\n            disabled: menuItem.enableMenu === false\n        });\n\n        const labelClasses = classNames('panel-group-menu-label', {\n            'panel-menu-label-selected': menuItem.checked,\n            warning: menuItem.destructive\n        });\n\n        return (\n            <div key={ index } className={ itemClasses } data-test-id={ `menu-item-${index}` } onClick={ (event) => this.onClickMenuItem(menuItem, event) }>\n                { this._getItemIcon(menuItem, index) }\n                <div data-test-id={ `menu-item-${index}-label` } className={ labelClasses }>\n                    { translate(menuItem.label, menuItem.translationData) }\n                    { menuItem.description && <div data-test-id={ `menu-item-${index}-description` } className=\"panel-group-menu-item-description\">{ menuItem.description }</div> }\n                </div>\n                { menuItem.menuItems && <Icon id=\"ChevronRightSmall\" height={ 8 }/> }\n            </div>\n        );\n    }\n\n    // Header is the item at the top that allows you to return to the prior menu. e.g. after clicking \"Copy To\" you'll see the header \"< Copy To\" and a list of libraries underneath.\n    get header() {\n        if (!this.headerLabel) {\n            return;\n        }\n\n        return (\n            <div style={ { maxWidth: this.maxWidth } }>\n                <div className=\"panel-group-menu-item\" data-test-id=\"menu-item-header\" onClick={ this.onClickBack }>\n                    <div className=\"panel-menu-icon\"><Icon id=\"ChevronLeftSmall\" height={ 8 }/></div>\n                    <div data-test-id=\"menu-item-header-label\" className=\"panel-group-menu-label\">{ translate(this.headerLabel) }</div>\n                </div>\n                <div className=\"panel-group-menu-divider\" />\n            </div>\n        );\n    }\n\n    setScrollableElement = (element) => this._scrollableElement = element;\n\n    onMenuWheel = (e) => {\n        // Prevent wheel events if they would take us beyond the beginning or end of the scrollable area\n        // (otherwise, they propagate to the parent div, which will cause it to scroll)\n        const isAtTop = this._scrollableElement.scrollTop <= 0;\n        const isAtBottom = this._scrollableElement.clientHeight + this._scrollableElement.scrollTop >= this._scrollableElement.scrollHeight;\n\n        if ((e.deltaY < 0 && isAtTop) || (e.deltaY > 0 && isAtBottom)) {\n            e.preventDefault();\n            e.stopPropagation();\n        }\n    }\n\n    handleScroll = (scrollEvent) => {\n        scrollEvent.stopPropagation();\n    }\n\n    get maxWidth() {\n        if (this.props.maxWidth) {\n            // This is ugly - if a maxWidth is explicitly specified, we need to make sure the\n            // contents of the container aren't truncated if they're less than the max width.\n            return '100%';\n        }\n        let maxWidth = configuration.MAX_CONTEXT_MENU_WIDTH;\n        if (this.props.style) {\n            maxWidth = this.props.style.left ? environment.getPanelWidth() - this.props.style.left : environment.getPanelWidth() - this.props.style.right;\n            maxWidth = !Number.isNaN(maxWidth) && maxWidth || 0;\n        }\n        return Math.max(maxWidth, configuration.MAX_CONTEXT_MENU_WIDTH);\n    }\n\n    get menuContainerStyle() {\n        const menuItemHeight = environment.menuItemHeight || MENU_ITEM_HEIGHT;\n        const headerHeight = this.headerLabel ? menuItemHeight + MENU_DIVIDER_HEIGHT : 0;\n        if (this.props.preserveMainMenuHeightForSubMenus && this.mainMenuContainerHeight) {\n            const scrollableItemsHeight = this.mainMenuContainerHeight - headerHeight;\n            return { height: scrollableItemsHeight, maxWidth: this.maxWidth };\n        }\n        // We want the distance to top because it's consistent even when navigating through different height submenus\n        // We dont want to factor in distance to top if the menu is anchored to the footer because we can take up all that distance\n        const menuTop = !this.props.footerMenu ? Math.round(this.props.clientY) : 0;\n\n        let minMenuHeight = 0;\n        if (this.props.minMenuItemsVisible > 0) {\n            minMenuHeight = menuItemHeight * this.props.minMenuItemsVisible;\n        }\n\n        const maxMenuHeight = menuItemHeight * this.props.maxMenuItemsVisible + (MAX_NUMBER_DIVIDERS * MENU_DIVIDER_HEIGHT);\n        let maxHeight = maxMenuHeight;\n        if (!this.props.canShowOutsidePanel) {\n            const containerHeight = Math.min(environment.getPanelHeight() - menuTop - headerHeight - MENU_FOOTER_HEIGHT, maxMenuHeight);\n            // The remaining space is what we have to play with - see how many discrete menu items fit:\n            maxHeight = Math.floor(containerHeight / menuItemHeight) * menuItemHeight + MENU_DIVIDER_HEIGHT;\n        }\n\n        if (minMenuHeight > maxHeight) {\n            maxHeight = minMenuHeight;\n        }\n        return { minHeight: minMenuHeight, maxHeight, maxWidth: this.maxWidth };\n    }\n\n    render() {\n        const containerClasses = classNames('panel-group-menu', this.props.className);\n        const style = { ...this.props.style };\n        if (this.props.maxWidth) {\n            style.maxWidth = this.props.maxWidth;\n        }\n        return (\n            <div onWheel={ this.onMenuWheel } className={ containerClasses } style={ style } data-test-id=\"menu-container\">\n                { this.header }\n                <div ref={ this.setScrollableElement } data-test-id=\"menu-container-scrollable\" className=\"panel-group-menu-scroll-container\" onScroll={ this.handleScroll } style={ this.menuContainerStyle }>\n                    { this.menuItems.filter(menuItem => menuItem.divider !== false).map(this._getMenuItem) }\n                </div>\n            </div>\n        );\n    }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"mosaicView\":\"QEU\",\"renditionWrapper\":\"lQM\",\"topLeft\":\"wUe\",\"topRight\":\"Azs\",\"bottomLeft\":\"qvX\",\"bottomRight\":\"s74\",\"emptyState\":\"xEN\",\"fullSizeRenditionWrapper\":\"Lai\",\"list\":\"mOL\"};","\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport configuration from 'app/js/config/configuration';\nimport ColorElementView from 'app/js/components/elements/ColorElementView';\nimport ColorThemeElementView from 'app/js/components/elements/ColorThemeElementView';\nimport GradientElementView from 'app/js/components/elements/GradientElementView';\nimport TextStyleElementView from 'app/js/components/elements/TextStyleElementView';\nimport Thumbnail from 'app/js/components/elements/utils/Thumbnail';\nimport styles from './index.scss';\nimport { Library } from '@cclibraries/cc-libraries-js';\nimport { usesTextStyleElementView } from 'app/js/utils/textstyleUtils';\n\n/**\n * When provided with an Element Model, it returns the JSX for that element.\n * @param props\n */\nexport default class MosaicElementView extends React.Component {\n    static propTypes = {\n        library: PropTypes.instanceOf(Library).isRequired,\n        elementId: PropTypes.string,\n        mosaicTileSize: PropTypes.oneOf([ 'quarter', 'full' ]), // Full size single item preview or 4 medium size tiles in 2x2 grid.\n    };\n\n    getEmptyElementView() {\n        return <div className={styles.emptyChildTile} data-test-id=\"mosaic-view-empty-tile\"/>;\n    }\n\n    render() {\n        const element = this.props.library.getElementById(this.props.elementId);\n        if (!element) { return this.getEmptyElementView();}\n\n        // Using the existing thumbnail-large view for rendering all elements.\n        if (element.type === configuration.COLOR_ELEMENT_TYPE) {\n            return <ColorElementView element={element} viewMode=\"thumbnail-large\" disableInteraction />;\n        }\n        if (element.type === configuration.COLOR_THEME_ELEMENT_TYPE) {\n            // Differences in the styling, will be handled using isMosaicView flag.\n            return <ColorThemeElementView element={element} viewMode=\"thumbnail-large\" isMosaicView={true} disableInteraction />;\n        }\n        if (element.type === configuration.GRADIENT_ELEMENT_TYPE) {\n            return <GradientElementView element={element} viewMode=\"thumbnail-large\" disableInteraction />;\n        }\n        if (usesTextStyleElementView(element)) {\n            return <TextStyleElementView element={element} viewMode=\"thumbnail-large\" mosaicTileSize={ this.props.mosaicTileSize } disableInteraction />;\n        }\n\n        return <Thumbnail element={element} className={styles.mosaicViewThumbnail} viewMode=\"thumbnail-large\" disableInteraction />;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport MosaicElementView from './MosaicElementView';\nimport { Library } from '@cclibraries/cc-libraries-js';\nimport styles from './index.scss';\nimport classNames from 'classnames';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport Icon from 'app/js/components/Icon';\n\nconst RENDITION_POSITIONING_CLASSES = [\n    styles.topLeft,\n    styles.topRight,\n    styles.bottomLeft,\n    styles.bottomRight\n];\n\n@observer\nexport default class MosaicView extends React.Component {\n    static contextType = LibrariesContext;\n\n    static defaultProps = {\n        viewMode: 'grid'\n    };\n\n    static propTypes = {\n        viewMode: PropTypes.oneOf([ 'list', 'grid' ]),\n        renditionGrid: PropTypes.object,\n        library: PropTypes.instanceOf(Library).isRequired,\n        className: PropTypes.string\n    };\n\n    render() {\n        return (\n            <div\n                className={classNames(styles.mosaicView, styles[this.props.viewMode], this.props.className)}\n                data-test-id=\"mosaic-view\"\n            >\n                { this.mosaicTiles }\n            </div>\n        );\n    }\n\n    @computed\n    get mosaicTiles() {\n        if (!this.props.renditionGrid || !this.props.renditionGrid.main) {\n            return (\n                <div className={styles.emptyState} data-test-id=\"mosaic-view-empty-state\">\n                    <Icon id=\"CCLibrary\" height={32} />\n                </div>\n            );\n        }\n        const elementIds = [ this.props.renditionGrid.main, ...this.props.renditionGrid.tiles ].map(item => item.id).filter(id => !!id);\n        // If it can't fill the 2x2 grid, then it should take the main grid item and display it at full size\n        if (elementIds.length < 4) {\n            return this.getFullSizeMosaicTile(this.props.renditionGrid.main.id);\n        }\n        // Otherwise, it should fill the 2x2 grid\n        const mosaicTiles = [];\n        for (let i = 0; i < 4; i++) {\n            mosaicTiles.push(\n                this.getMosaicTile(elementIds[i], i)\n            );\n        }\n        return mosaicTiles;\n    }\n\n    getMosaicTile = (elementId, index) => {\n        const tileClasses = classNames(styles.renditionWrapper, RENDITION_POSITIONING_CLASSES[index]);\n        return (\n            <div key={elementId || index} className={ tileClasses } data-test-id=\"mosaic-view-rendition-tile\">\n                <MosaicElementView elementId={elementId} library={ this.props.library } mosaicTileSize={ 'quarter' } />\n            </div>\n        );\n    }\n\n    getFullSizeMosaicTile = (elementId) => (\n        <div className={ styles.fullSizeRenditionWrapper } data-test-id=\"mosaic-view-rendition-fullsize\">\n            <MosaicElementView elementId={ elementId } library={ this.props.library } mosaicTileSize={ 'full' } />\n        </div>\n    );\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\nimport { computed } from 'mobx';\nimport { translate } from 'app/js/managers/translationManager';\nimport HTMLText from './HTMLText';\nimport ProgressBar from './ProgressBar';\nimport * as ErrorUtils from 'app/js/utils/errorUtils';\nimport libraryProcessManager from 'app/js/managers/libraryProcessManager';\nimport * as LinkUtils from 'app/js/utils/linkUtils';\nimport Icon from 'app/js/components/Icon';\nimport environment from 'app/js/environment';\nimport classNames from 'classnames';\nimport DiscoverLibrariesMessage from 'app/js/components/DiscoverLibrariesMessage';\nimport SpectrumCircleLoader from 'app/js/components/spectrum/SpectrumCircleLoader';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport PropTypes from 'prop-types';\nimport Button from '@ccx-public/spectrum-wrapper/Button';\nimport metrics from '../interface/metrics';\n\n@observer\nexport default class NoLibrariesView extends React.Component {\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        className: PropTypes.string\n    };\n\n    // Utilities\n    reconnectToProcess = () => { libraryProcessManager.reconnectToProcess(); }\n    showAddLibraryDialog = () => { this.context.dialogManager.openDialog('createLibrary'); }\n    requestSync = () => { this.context.libraryManager.sync(); }\n    enableSyncing = () => { this.context.libraryManager.enableSyncing(); }\n    openNetworkErrorURL = () => { LinkUtils.openServiceErrorURL(this.syncStatus.errorType); }\n\n    // Mapping from error states to the behaviour and text in the error button\n    get ERROR_BUTTONS() {\n        return {\n            excludeHostnameOSX:     [ this.reconnectToProcess, 'DL_NO_LIBS_RETRY' ],\n            excludeHostnameWin:     [ this.reconnectToProcess, 'DL_NO_LIBS_RETRY' ],\n            excludeHostnameWin10:   [ this.reconnectToProcess, 'DL_NO_LIBS_RETRY' ],\n            verifyDnsSettings:      [ this.reconnectToProcess, 'DL_NO_LIBS_RETRY' ],\n            verifySocketConnection: [ this.reconnectToProcess, 'DL_NO_LIBS_RETRY' ],\n            syncDisabled:           [ this.enableSyncing, 'DL_LAUNCH_CC_APP_ENABLE_BUTTON' ],\n        };\n    }\n\n    iconWrapper(iconString) {\n        return <div data-test-id=\"no-libraries-icon\" className=\"panel-nolibs-alert-icon\"><Icon id={ iconString } height={ 48 }/></div>;\n    }\n\n    @computed get syncStatus() {\n        return this.context.libraryManager.syncStatus;\n    }\n\n    @computed get isDownloadingLibraries() {\n        return !!this.context.libraryManager.getNewLibrarySyncProgress()?.length;\n    }\n\n    @computed get icon() {\n        if (this.syncStatus.state === 'syncing') {\n            return this.iconWrapper('CreativeCloud');\n        }\n\n        if (this.syncStatus.errorType === 'syncDisabled' || this.syncStatus.errorType === 'loggedOut') {\n            return this.iconWrapper('CreativeCloudAlert');\n        }\n\n        return this.iconWrapper('CreativeCloudError');\n    }\n\n    @computed get retryMessage() {\n        if (ErrorUtils.isGenericLoadingError(this.syncStatus) && this.syncStatus.retryDuration) {\n            return (<div className=\"panel-nolibs-message\">\n                { translate('DL_SYNC_RETRY', { duration: this.syncStatus.retryDuration }) }\n            </div>);\n        }\n    }\n\n    @computed get message() {\n        const message = this.syncStatus.state === 'syncing' ? translate('DL_NO_LIBS_SYNCING') : ErrorUtils.getLoadingErrorMessage(this.syncStatus);\n\n        return (<span data-test-id=\"no-libraries-message\">\n            <HTMLText className=\"panel-nolibs-message\" html={ message }/>\n            { this.retryMessage }\n        </span>);\n    }\n\n    @computed get title() {\n        if (this.syncStatus.state !== 'error') {\n            return;\n        }\n        return (<h1 data-test-id=\"no-libraries-title\" className=\"panel-nolibs-title\">\n            { translate('DL_NO_LIBS_PAGE_NOT_AVAILABLE') }\n        </h1>);\n    }\n\n    @computed get syncingProgressBar() {\n        if (this.syncStatus.state === 'syncing') {\n            const Progress = environment.ProgressBar || ProgressBar;\n            return (<div data-test-id=\"syncing-progress-bar\" className=\"panel-nolibs-progress-bar\">\n                <Progress progress={ this.syncStatus.syncProgress } showMetaData={ false }/>\n            </div>);\n        }\n    }\n\n    @computed get link() {\n        if (this.syncStatus.state !== 'error') {\n            return null;\n        }\n        const errorLinks = {\n            serviceError:           [ () => LinkUtils.openServiceErrorURL(), 'DL_NO_LIBS_MORE_INFO' ],\n            noService:              [ LinkUtils.openInstallCCAppURL, 'DL_NO_LIBS_GET_IT' ],\n            excludeHostnameOSX:     [ this.openNetworkErrorURL, 'DL_TROUBLESHOOT_NETWORK_SETTINGS' ],\n            excludeHostnameWin:     [ this.openNetworkErrorURL, 'DL_TROUBLESHOOT_NETWORK_SETTINGS' ],\n            excludeHostnameWin10:   [ this.openNetworkErrorURL, 'DL_TROUBLESHOOT_NETWORK_SETTINGS' ],\n            verifyDnsSettings:      [ this.openNetworkErrorURL, 'DL_TROUBLESHOOT_NETWORK_SETTINGS' ],\n            updateServer:           [ LinkUtils.openUpdateCCLibrariesURL, 'DL_NO_LIBS_GET_IT' ],\n            updateClient:           [ LinkUtils.openUpdateCCLibrariesURL, 'DL_NO_LIBS_GET_IT' ],\n        };\n        const [ onClick, message ] = errorLinks[this.syncStatus.errorType] || [];\n\n        if (onClick) {\n            return <a data-test-id=\"no-libraries-link\" className=\"panel-nolibs-link\" tabIndex=\"0\" onClick={ onClick } onKeyPress={ (e) => (e.key === 'Enter') ? onClick(e) : null }>\n                { translate(message) }\n            </a>;\n        }\n    }\n\n    @computed get newLibraryButton() {\n        return (<Button\n            data-test-id=\"new-library-button\"\n            className=\"panel-nolibs-create-button\"\n            variant=\"cta\"\n            onClick={ this.showAddLibraryDialog } >\n            { translate('DL_NO_LIBS_CREATE_LIBRARY_BUTTON_TEXT') }\n        </Button>);\n    }\n\n    @computed get retrySyncButton() {\n        if (this.syncStatus.errorType !== 'noAccess') {\n            return (\n                <Button\n                    data-test-id=\"retry-button\"\n                    className=\"panel-nolibs-retry-button\"\n                    disabled={ Boolean(this.syncStatus.retryDuration) }\n                    onClick={ this.requestSync } >\n                    { translate('DL_NO_LIBS_RETRY') }\n                </Button>\n            );\n        }\n    }\n\n    @computed get button() {\n        if (this.syncStatus.state === 'syncing') {\n            return this.newLibraryButton;\n        }\n\n        if (ErrorUtils.isGenericLoadingError(this.syncStatus)) {\n            return (<React.Fragment>\n                <span>{ this.retrySyncButton }</span>\n                <span>{ this.newLibraryButton }</span>\n            </React.Fragment>);\n        }\n\n        const [ onClick, message ] = this.ERROR_BUTTONS[this.syncStatus.errorType] || [];\n        if (onClick) {\n            return (<Button\n                data-test-id=\"no-libraries-button\"\n                variant=\"secondary\"\n                className=\"panel-nolibs-retry-button\"\n                onClick={ onClick } >\n                { translate(message) }\n            </Button>);\n        }\n    }\n\n    @computed get contents() {\n        if (window.navigator.userAgent.includes('CreativeCloud')\n            && !this.context.libraryManager.areLibrariesLoaded\n            && (this.syncStatus.state !== 'error'\n            || (this.syncStatus.state === 'error'\n            && this.syncStatus.errorType === 'serviceError'))\n        ) {\n            return (\n                <div data-test-id=\"panel-nolibs-load-spinner\" className=\"panel-nolibs-middle\">\n                    <SpectrumCircleLoader size=\"large\" indeterminate />\n                </div>\n            );\n        }\n\n        // Don't render anything if we're in a state without anything to display (like loading)\n        if ([ 'ok', 'syncing', 'error' ].includes(this.syncStatus.state)) {\n\n            if (this.syncStatus.state === 'ok' || (this.syncStatus.state === 'syncing' && !this.isDownloadingLibraries)) {\n                // If we're not syncing or we're just uploading local changes, show the empty state.\n                return <DiscoverLibrariesMessage />;\n            }\n\n            const classes = classNames('panel-nolibs-middle', `panel-nolibs-${this.syncStatus.state}`);\n            return (<div className={ classes } data-test-id=\"no-libraries-content\">\n                { this.icon }\n                { this.title }\n                { this.message }\n                { this.syncingProgressBar }\n                { this.link }\n                { this.button }\n            </div>);\n        }\n    }\n\n    componentDidMount() {\n        metrics.reportEvent('Navigation', 'Library Panel', 'render', 'no-libraries-view');\n    }\n\n    render() {\n        return (<div className={ this.props.className } data-test-id=\"no-libraries-view\">\n            { this.contents }\n        </div>);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { translate } from 'app/js/managers/translationManager';\nimport SearchResultHeader from './SearchResultHeader';\nimport Icon from 'app/js/components/Icon';\nimport { observer } from 'mobx-react';\nimport SearchOptionsMessage from 'app/js/components/SearchOptionsMessage';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport configuration from '../config/configuration';\n\n/*\n * No Search Result View\n * Shows a message and link to clear filters\n */\n@observer\nexport default class NoSearchResult extends React.Component {\n    static contextType = LibrariesContext;\n    clearFilters = () => {\n        this.context.viewState.searchState.clearFilters();\n\n        if (this.context.viewState.isDocumentSearchType()) {\n            this.context.viewState.searchState.clearDocumentFilters();\n        }\n\n        // if in stock search we need to kick off another search request after clearing the filters\n        if (this.context.viewState.isStockSearchMode()) {\n            this.context.viewState.searchState.search();\n        }\n    }\n\n    get links() {\n        if (this.context.viewState.searchState.filterCount) {\n            return <div className=\"panel-search-info-link\" data-test-id=\"no-search-result-clear-filters\" onClick={ this.clearFilters }>{ translate('DL_CLEAR_FILTERS') }</div>;\n        }\n        return <SearchOptionsMessage hidePromptText={ true }/>;\n    }\n\n    render() {\n        return (\n            <div className=\"panel-search-result-none-container\" data-test-id=\"no-search-result\">\n                <SearchResultHeader numResults={ 0 } />\n                <div className=\"panel-search-info\">\n                    <div className=\"panel-search-info-graphic\" data-test-id=\"no-search-result-graphic\"><Icon id=\"NoSearchResults\" height={configuration.currentProduct.config.filterIconHeight || 100} /></div>\n                    <div className=\"panel-search-info-title\" data-test-id=\"no-search-result-title\">{ translate('DL_SEARCH_LIBRARIES_NO_RESULTS_TITLE') }</div>\n                    <div className=\"panel-search-info-body\" data-test-id=\"no-search-result-body\">{ translate('DL_SEARCH_LIBRARIES_NO_RESULTS_BODY') }</div>\n                    { this.links }\n                </div>\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport { translate } from 'app/js/managers/translationManager';\nimport BaseDropdown from 'app/js/components/panel-header/BaseDropdown';\nimport Icon from 'app/js/components/Icon';\nimport metrics from 'app/js/interface/metrics';\nimport configuration from 'app/js/config/configuration';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\n\n@observer\nexport default class SearchSourceDropdown extends React.Component {\n    static contextType = LibrariesContext;\n\n    @computed get currentSearchType() {\n        return this.context.viewState.getSearchType();\n    }\n\n    onClick = (searchType) => {\n        metrics.reportEvent('Search', 'Library Panel', 'click', 'select-search-type', { ui: { filter: searchType } });\n        this.context.viewState.setSearchType(searchType);\n    }\n\n    @computed get menuData() {\n        const searchTypes = this.context.viewState.getSearchTypes().filter(type => {\n            const isDisabledStockType = type === 'stock' && configuration.currentProduct.config.disableStockSearch;\n            const isDisabledAllLibrariesType = type === 'libraries' && (this.context.libraryManager.disableCCLibraries || configuration.currentProduct.config.disableAllLibrariesElementSearch);\n            return isDisabledStockType || isDisabledAllLibrariesType ? false : true;\n        });\n\n        return searchTypes.map(searchType => {\n            return {\n                label: translate('DL_SEARCH_' + searchType.toUpperCase()),\n                onClick: () => this.onClick(searchType),\n                isSelected: searchType === this.currentSearchType,\n                key: searchType\n            };\n        });\n    }\n\n    @computed get labelIcon() {\n        return <Icon data-test-id=\"search-source-dropdown-icon\" id=\"ChevronDownSmall\" height={ 8 } width={ 8 } />;\n    }\n\n    onClickLabel = () => {\n        this.context.dialogManager.dialogName === 'recentSearchesOverlay' && this.context.dialogManager.closeDialog();\n    }\n\n    render() {\n        return <BaseDropdown onClickLabel={ this.context.dialogManager.closeDialog } tooltip={ translate('DL_SEARCH_SELECT_SCOPE_TOOLTIP') } data={ this.menuData } className=\"panel-search-source-dropdown\" type=\"search-source\" currentLabel={ this.labelIcon } title={ translate('DL_SEARCH_DROPDOWN_TITLE') } dropdownOptions={ { ignoreScrollEvents: true } }/>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { computed, observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport { translate } from 'app/js/managers/translationManager';\nimport menuManager from 'app/js/managers/menuManager';\nimport metrics from 'app/js/interface/metrics';\nimport classNames from 'classnames';\nimport { truncateString } from 'app/js/utils/stringUtils';\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport Icon from 'app/js/components/Icon';\nimport SearchSourceDropdown from 'app/js/components/panel-header/SearchSourceDropdown';\nimport Tooltip from 'app/js/components/Tooltip';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport PropTypes from 'prop-types';\nimport Button from 'app/js/components/Button';\n\n@observer\nexport default class SearchBar extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        placeholderText: PropTypes.string\n    }\n\n    @computed get searchText() {\n        return this.context.viewState.getSearchText() || '';\n    }\n\n    @computed get disabled() {\n        const noLibraries = !this.context.libraryManager.searchableLibraries.length;\n        const isRelinkLayerMode = this.context.viewState.isRelinkLayerMode();\n        return noLibraries || isRelinkLayerMode;\n    }\n\n    @computed get searchType() {\n        return this.context.viewState.getSearchType();\n    }\n\n    componentDidMount() {\n        // If we are showing the search bar with a search filter applied, show the input box\n        if (this.searchText) {\n            this.searchInputVisible = true;\n        }\n    }\n\n    onClickSearch = (event) => {\n        metrics.reportSearchEvent('Search', 'Search', 'click', 'input', { 'ui': { 'filter': this.searchType } });\n        if (this.searchText === '' && this.context.viewState.hasRecentSearches()) {\n            this.openDialog();\n        }\n        event.stopPropagation();\n    };\n\n    onClickCancel = (event) => {\n        event.stopPropagation();\n        event.preventDefault();\n\n        this.context.dialogManager.closeDialog();\n        metrics.reportSearchEvent('Search', 'Search', 'click', 'cancel', { 'ui': { 'filter': this.searchType } });\n        this.context.viewState.setSearchText('');\n        this.searchInputVisible = false;\n    };\n\n    @observable isFocused = false;\n    @observable searchInputVisible = false;\n\n    onFocus = (event) => {\n        this.isFocused = true;\n        // TODO: Remove once UXP input click bug is fixed.\n        if (environment.hasUXPInputClickBug) {\n            // UXP doesn't get click events on input boxes, so the OverlayState's global\n            // click event doesn't fire. As a workaround, we'll trigger an existing event\n            // (flyoutMenuClicked) whenever the input box has focus. It's hacky but it's\n            // a minimal workaround\n            menuManager._listenerManager.notify('flyoutMenuClicked', event);\n\n            // Trigger the analytics for onClick, since the click event won't fire!\n            this.onClickSearch(event);\n        }\n    }\n\n    onBlur = () => {\n        this.isFocused = false;\n        if (!this.searchText) {\n            this.searchInputVisible = false;\n        }\n    }\n\n    onKeydown = (event) => {\n        if (event.key === 'Escape') {\n            this.onClickCancel(event);\n        }\n        if (event.key === 'Enter') {\n            this.context.viewState.clearFindSimilarSearchMode(); // Re-search requested, exit the find similar mode\n        }\n    };\n\n    openDialog = () => {\n        if (!configuration.currentProduct.config.hideRecentSearchesOverlay) {\n            this.context.dialogManager.openDialog('recentSearchesOverlay');\n        }\n    }\n\n    @computed get showCancel() {\n        // Show cancel button if search text exists\n        return this.searchText !== '';\n    }\n\n    onChange = (event) => {\n        const { viewState } = this.context;\n        const { config: currentProductConfig } = configuration.currentProduct;\n\n        // truncates search text to 1000 characters before searching to prevent panel freezing\n        const newValue = truncateString(event.target.value, configuration.MAX_INPUT_STRING_LENGTH, false);\n        viewState.setSearchText(newValue);\n\n        if (currentProductConfig.reportSearchSDMEvents && newValue) {\n            const suggestionList = viewState.getRecentSearches()[configuration.STORED_RECENT_SEARCH_LIBRARIES_KEY].slice(0, configuration.STORED_RECENT_SEARCH_DISPLAY_LIMIT);\n\n            const personalSearchPayload = {\n                'content.category': 'brands&libraries',\n                'ui.search_keyword': newValue,\n                'custom.ui.location': 'editor',\n                'custom.ui.search_type': 'direct',\n                'custom.search.id': viewState.getSearchId(),\n                'custom.search.suggestion_list_shown': suggestionList\n            };\n\n            const viewSearchResultPayload = {\n                'content.category': 'brands&libraries',\n                'ui.search_keyword': newValue,\n                'custom.ui.location': 'editor',\n                'custom.search.id': viewState.getSearchId(),\n                'custom.search.result_count': viewState.librariesInViewOrder.length\n            };\n\n            currentProductConfig.reportSearchSDMEvents(personalSearchPayload);\n            currentProductConfig.reportSearchSDMEvents(viewSearchResultPayload);\n        }\n\n        if (this.searchText !== '') {\n            this.context.dialogManager.closeDialog();\n        } else if (viewState.hasRecentSearches()) {\n            this.openDialog();\n        }\n    };\n\n    @computed get cancelButton() {\n        if (this.showCancel) {\n            return <div data-test-id=\"cancel\" className=\"panel-search-cancel\" onClick={this.onClickCancel}>\n                <Tooltip placement=\"left\" content={translate('DL_SEARCH_CANCEL_TOOLTIP')}>\n                    <Icon id=\"Close\" height={configuration.currentProduct.config.searchBarCloseIconHeight || 20} />\n                </Tooltip>\n            </div>;\n        }\n\n        // We need to hide the text input clear button shown as part of the UXP text widget.\n        // Sometimes it shows at times our workflow does not want to show the clear button,\n        // so we need to cover it here to make sure it only shows when we want it to.\n        if (configuration.currentProduct.config.hideDefaultSearchCancelIcon) {\n            return <div data-test-id=\"cancel-placeholder\" className=\"panel-search-cancel-placeholder\"/>;\n        }\n    }\n\n    @computed get searchIcon() {\n        if (configuration.currentProduct.config.hideCustomSearchIcon) {\n            return;\n        }\n\n        return <div data-test-id=\"panel-search-icon\" className=\"panel-search-icon\"><Icon id=\"Magnify\" height={ configuration.currentProduct.config.searchIconSize || 12 }/></div>;\n    }\n\n    @computed get showSourceSelectionButton() {\n        const disableAllLibrariesSearch = this.context.libraryManager.disableCCLibraries || configuration.currentProduct.config.disableAllLibrariesSearch || configuration.currentProduct.config.disableSearchSourceSelection;\n        return !this.context.viewState.isRootView() && !(disableAllLibrariesSearch && configuration.currentProduct.config.disableStockSearch);\n    }\n\n    @computed get sourceSelectionButton() {\n        if (this.showSourceSelectionButton) {\n            return <SearchSourceDropdown/>;\n        }\n    }\n\n    get showInputBox() {\n        // Some UXP environments give input box text infinite z order so they show above overlays like dialogs.\n        if (!environment.hasInputZOrderBug || !this.context.dialogManager.dialog) { return true; }\n        // The recent searches dialog, and context menu show below the input box so it isn't an issue.\n        const belowInputBox = [ 'recentSearchesOverlay', 'contextMenu' ];\n        return !!belowInputBox.find(dialog => dialog === this.context.dialogManager.dialogName);\n    }\n\n    _setSearchInput = node => this.searchInput = node;\n\n    handleClick = () => {\n        this.searchInputVisible = true;\n        this.isFocused = true;\n        if (this.searchInput) {\n            this.searchInput.focus();\n        }\n    }\n\n    clickSearchToStart = () => {\n        const iconSize = configuration.currentProduct.config.searchIconSize || 12;\n        return <Button quiet variant=\"action\" data-test-id=\"start-search-trigger\" className={classNames('view-toggle-button')} onClick={this.handleClick}>\n            <Icon className=\"sort-icon\" data-test-id=\"panel-dropdown-icon\" id=\"Magnify\" height={iconSize} width={iconSize} />\n        </Button>;\n    }\n\n    classicSearchBar = () => {\n        const inputClasses = classNames('panel-search-input', { disabled : this.disabled });\n        const wrapperClasses = classNames('panel-search', { 'is-focused': this.isFocused, 'show-source-button': this.showSourceSelectionButton, 'show-cancel-button': this.cancelButton });\n        const customProductSearchPlaceholderOptions = configuration.currentProduct.config.customSearchPlaceholders;\n        const customProductSearchPlaceholder = customProductSearchPlaceholderOptions && customProductSearchPlaceholderOptions[this.searchType] && translate(customProductSearchPlaceholderOptions[this.searchType]);\n        return (\n            <div className={ wrapperClasses } data-test-id=\"search-bar\">\n                { this.searchIcon }\n                { this.showInputBox && (\n                    <input\n                        uxp-quiet=\"true\"\n                        data-test-id=\"input\"\n                        value={ this.searchText }\n                        ref={ this._setSearchInput }\n                        onChange={ this.onChange }\n                        onFocus={ this.onFocus }\n                        onBlur={ this.onBlur }\n                        onClick={ this.onClickSearch }\n                        className={ inputClasses }\n                        type=\"search\"\n                        results=\"0\"\n                        onKeyDown={ this.onKeydown }\n                        placeholder={ this.props.placeholderText ?? customProductSearchPlaceholder ?? translate(`DL_SEARCH_INPUT_${this.searchType.toUpperCase()}_PLACEHOLDER`) }\n                        spellCheck=\"false\"\n                        disabled={ this.disabled } />\n                )}\n                {this.cancelButton}\n                {this.sourceSelectionButton}\n            </div>\n        );\n    }\n\n    render() {\n        // If the config flag is true, must click on the search button to start searching\n        return configuration.currentProduct.config.clickSearchToStart && !this.searchInputVisible ? this.clickSearchToStart() : this.classicSearchBar();\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\nimport { computed } from 'mobx';\nimport { translate } from 'app/js/managers/translationManager';\nimport BaseDropdown from 'app/js/components/panel-header/BaseDropdown';\nimport Icon from 'app/js/components/Icon';\nimport Button from 'app/js/components/Button';\nimport environment from 'app/js/environment';\nimport metrics from 'app/js/interface/metrics';\nimport { launchSearchStockURL } from 'app/js/utils/linkUtils';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport configuration from 'app/js/config/configuration';\n\n@observer\nexport default class SearchFiltersDropdown extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    get viewState() {\n        return this.context.viewState;\n    }\n\n    get libraryManager() {\n        return this.context.libraryManager;\n    }\n\n    // Click handlers\n    onFilterToggle = (event, filter, value) => {\n        const filterType = [ 'library', 'document' ].includes(filter.type) ? 'source' : 'asset type';\n        metrics.reportEvent('Search', 'Library Panel', 'click', value ? 'select-filter' : 'deselect-filter', { event: { value: filter.id }, content: { type: filterType } }, this.libraryManager.currentLibrary);\n        this.searchState.setSearchOption(filter.id, value, filter.type);\n        if (!this.disabled) {\n            event.stopPropagation();\n        }\n    }\n\n    // Remove a legacy document link, making all its assets local. (Option not offered on links to libraries, since that can be done at the asset level.)\n    onFilterDelete = (event, filter) => {\n        const elementsLinkedinDoc = this.libraryManager.documentAssetsContainer.elements.filter(element => element.linkReference === filter.id);\n        metrics.reportEvent('Element Operations', 'element', 'click', 'make-local', { event: { value: 'agg', count: elementsLinkedinDoc.length }, content: { category: 'Click' } });\n        elementsLinkedinDoc.forEach(element => {\n            metrics.reportElementEvent('Element Operations', 'element', 'click', 'make-local', element, { event: { value: 'single', count: 1 }, content: { category: 'Click' } });\n        });\n        environment.unlinkAssetsFromDocument(filter.id);\n        // Toggle off the document as an active filter.\n        this.searchState.setSearchOption(filter.id, false, filter.type);\n        // Toggle off all groups that are no longer available without the document.\n        const documentAssetGroups = elementConfiguration.groupElementsByTopLevelGroup(this.libraryManager.documentAssetsContainer.elements, this.libraryManager.documentAssetsContainer.getGroups());\n        this.searchState.filterTypeOptions.forEach(filter => {\n            const section = documentAssetGroups.find(section => section.item && section.item.name === filter.id);\n            const validFilter = section.children && section.children.length;\n            if (!validFilter) {\n                this.searchState.setSearchOption(filter.id, false, filter.type);\n            }\n        });\n    }\n\n    onClearFilters = event => {\n        event.stopPropagation();\n        if (this.viewState.isDocumentSearchType()) {\n            this.searchState.clearDocumentFilters();\n        } else {\n            this.searchState.clearFilters();\n        }\n    }\n\n    get searchState() {\n        return this.viewState.searchState;\n    }\n\n    get hasSelectedFilters() {\n        return this.searchState.filterCount;\n    }\n\n    @computed get searchFilters() {\n        if (this.viewState.isLibrariesSearchMode() || this.viewState.isDocumentSearchType()) {\n            return [ ...this.searchState.filterLibrariesOptions , ...this.searchState.filterTypeOptions ];\n        }\n        return this.searchState.filterTypeOptions;\n    }\n\n    formatFilterOption(filter) {\n        const isSelected = this.searchState.isSearchOptionEnabled(filter.id);\n        // Linked Document search filters have a delete option\n        const onClickDeleteFn = this.viewState.isDocumentSearchType() && filter.removable ? (event) => this.onFilterDelete(event, filter) : undefined;\n        return {\n            label: translate(filter.label),\n            onClick: (event) => this.onFilterToggle(event, filter, !isSelected),\n            onClickDelete: onClickDeleteFn,\n            isSelected,\n            key: filter.id\n        };\n    }\n\n    get clearFiltersLabel() {\n        return (\n            <div className=\"dropdown-label-wrapper\">\n                <Icon id=\"Close\" height={ 18 } className=\"left-align-correction\" />\n                { translate('DL_CLEAR_FILTERS') }\n            </div>\n        );\n    }\n\n    @computed get menuData() {\n        const typeFilters = this.searchState.filterTypeOptions.map(filter => this.formatFilterOption(filter));\n\n        let libraryFilters = [];\n\n        if ((this.viewState.isLibrariesSearchMode() || this.viewState.isDocumentSearchType()) && this.viewState.searchState.filterLibrariesOptions.length) {\n            libraryFilters = [\n                { divider: true, key: 'divider' },\n                {\n                    key: 'librariesTitle',\n                    isTitle: true,\n                    label: translate(this.viewState.isDocumentSearchType() ? 'DL_LIBRARY_LIST_FILTER_BY_SOURCE' : 'DL_LIBRARY_LIST_FILTER_BY_LIBRARY')\n                },\n                ...this.searchState.filterLibrariesOptions.map(filter => this.formatFilterOption(filter))\n            ];\n        }\n\n        const clearFilters = [\n            { divider: true, key: 'clearFiltersDivider' },\n            {\n                label: this.clearFiltersLabel,\n                key: 'clearFilters',\n                disabled: !this.hasSelectedFilters,\n                onClick: this.onClearFilters\n            }\n        ];\n\n        return [\n            ...typeFilters,\n            ...libraryFilters,\n            ...clearFilters\n        ];\n    }\n\n    @computed get disabled() {\n        if (this.context.viewState.isSearchMode()) {\n            // When searching, disable when there are no results.\n            return !(this.hasSelectedFilters || this.searchState.searchResultsCount) || this.searchFilters.length === 0;\n        }\n        // For libraries and document search, only disable if there are no items.\n        return !this.libraryManager.currentLibrary.elements.length;\n    }\n\n    @computed get labelIcon() {\n        const iconSelected = configuration.currentProduct.config.defaultFilterIconSelected ?? 'FilterNotification16';\n        const iconNotSelected = configuration.currentProduct.config.defaultFilterIcon ?? 'Filter16';\n        const iconId = this.hasSelectedFilters ? iconSelected : iconNotSelected;\n        return <Button\n            className=\"view-toggle-button\"\n            onClick={() => {}}>\n            <Icon data-test-id=\"panel-dropdown-icon\" id={ iconId } height={ 16 } width={ 16 } />\n        </Button>;\n    }\n\n    @computed get footer() {\n        return this.viewState.isStockSearchMode() && this.libraryManager.isOnline\n        && <a onClick={ () => launchSearchStockURL('', {}, true)}\n            className=\"panel-select-menu-footer\"\n            data-test-id=\"panel-dropdown-menu-footer-link\">\n            {translate('DL_STOCK_SEARCH_AUDIO_WEB')}\n        </a>;\n    }\n\n    render() {\n        const title = this.viewState.isLibrariesSearchMode() || this.libraryManager.currentLibrary && this.libraryManager.currentLibrary.isDocumentAssets ? 'DL_LIBRARY_LIST_FILTER_BY_TYPE' : 'DL_LIBRARY_LIST_FILTER_BY';\n        return <BaseDropdown\n            data={ this.menuData }\n            disabled={ this.disabled }\n            className=\"panel-search-filters-dropdown\"\n            type=\"search-filter\" currentLabel={ this.labelIcon }\n            title={ translate(title) }\n            tooltip={translate('DL_SEARCH_FILTERS_TOOLTIP')}\n            footer={ this.footer }/>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { Library } from '@cclibraries/cc-libraries-js';\nimport { translate } from 'app/js/managers/translationManager';\nimport metrics from 'app/js/interface/metrics';\nimport Icon from 'app/js/components/Icon';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport Button from 'app/js/components/Button';\nimport configuration from 'app/js/config/configuration';\n\n@observer\nexport default class ShareButton extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        library: PropTypes.instanceOf(Library),\n        height: PropTypes.number\n    }\n\n    onClickShare = () => {\n        metrics.reportEvent('Manager', 'Manage', 'click', 'share');\n        this.context.libraryActions.invite(this.props.library, true);\n    }\n\n    render() {\n        if (configuration.currentProduct.config.customShareButton) {\n            return <Button\n                variant=\"secondary\"\n                data-test-id=\"panel-navigation-share-button\"\n                className=\"panel-navigation-button\"\n                onClick={this.onClickShare}\n                tooltip={translate('DL_SHARE_LIBRARY_BUTTON_TOOLTIP')}\n            >\n                {translate('DL_SHARE')}\n            </Button>;\n        }\n        return (\n            <Button\n                quiet\n                variant=\"action\"\n                data-test-id=\"panel-navigation-share-button\"\n                className=\"panel-navigation-button\"\n                onClick={this.onClickShare}\n                tooltip={translate('DL_SHARE_LIBRARY_BUTTON_TOOLTIP')}\n            >\n                <Icon id=\"Invite\" height={this.props.height ?? 16} />\n            </Button>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\nimport { translate } from 'app/js/managers/translationManager';\nimport environment from 'app/js/environment';\nimport Icon from 'app/js/components/Icon';\nimport Button from 'app/js/components/Button';\nimport { isLibraryInvitable, isTeamLibrary, getTeamLibraryPlatformFolder, getShortLibrarySharingString, handleContextMenuLibraryClick } from 'app/js/utils/libraryUtils';\nimport classNames from 'classnames';\nimport configuration from 'app/js/config/configuration';\nimport metrics from 'app/js/interface/metrics';\nimport Tooltip from 'app/js/components/Tooltip';\nimport { getMenuItems } from 'app/js/menus/elementContextMenu';\nimport OverlayState from 'app/js/components/utils/OverlayState';\nimport MenuView from 'app/js/components/MenuView';\nimport * as ErrorUtils from 'app/js/utils/errorUtils';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport ShareButton from 'app/js/components/panel-header/ShareButton';\n\n@observer\nexport default class NavigationHeaderRow extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    menuOverlayState = new OverlayState();\n\n    get isOneUpMode() {\n        return this.context.viewState.isOneUpMode();\n    }\n\n    get isSearchMode() {\n        return this.context.viewState.isSearchMode();\n    }\n\n    get isRootView() {\n        return this.context.viewState.isRootView();\n    }\n\n    get isRelinkLayerMode() {\n        return this.context.viewState.isRelinkLayerMode();\n    }\n\n    onClickBackButton = (event) => {\n        this.onCloseMenu();\n        if (this.isOneUpMode) {\n            metrics.reportEvent('Navigation', 'Library Panel', 'click', this.context.viewState.getState().modeParams.previousMode === 'search' ? 'back-to-search' : 'back-to-library');\n            this.context.viewState.setStateBeforeOneUpMode();\n        } else {\n            if (environment.navigateBack) {\n                environment.navigateBack();\n            } else {\n                metrics.reportEvent('Navigation', 'Library Panel', 'click', 'root-view');\n                this.context.viewState.showRootView();\n            }\n        }\n        event.stopPropagation();\n    }\n\n    onClickMenu = () => {\n        this.menuOverlayState.toggleOverlay();\n        // If we are renaming or editing description, close those incase their blur does not work\n        this.context.viewManager.stopRename();\n        this.context.viewManager.stopEditDescription();\n    }\n\n    onCloseMenu = () => {\n        this.menuOverlayState.hideOverlay();\n    }\n\n    get shouldShowBackButton() {\n        return !this.isSearchMode && !this.isRootView;\n    }\n\n    get backButton() {\n        const iconSize = configuration.currentProduct.config.customBackButtonSize ?? 8;\n        if (!this.shouldShowBackButton) {\n            return;\n        }\n        let tooltip = 'DL_BACK_BUTTON_ROOT';\n        if (this.isOneUpMode) {\n            tooltip = this.context.viewState.getState().modeParams.previousMode === 'search' ? 'DL_BACK_BUTTON_SEARCH' : 'DL_BACK_BUTTON_LIBRARY';\n        }\n\n        return <Tooltip content={ translate(tooltip) }>\n            <div data-test-id=\"panel-navigation-back-button\" className=\"panel-navigation-row-back-button\" >\n                <Icon id=\"ChevronLeftSmall\" height={ iconSize } />\n            </div>\n        </Tooltip>;\n    }\n\n    onClickShare = () => {\n        metrics.reportEvent('Manager', 'Manage', 'click', 'share');\n        this.context.libraryActions.invite(this.context.libraryManager.currentLibrary, true);\n    }\n\n    onOpenLibrariesManager = (event) => {\n        metrics.reportEvent('Manager', 'Launch', 'click', 'open-manager');\n        environment.openLibraryManagerWindow();\n        event.stopPropagation();\n    }\n\n    get shareButton() {\n        if (this.isRootView || this.isOneUpMode || this.isSearchMode || this.isRelinkLayerMode || !isLibraryInvitable(this.context.libraryManager.currentLibrary)) {\n            return;\n        }\n        if (configuration.currentProduct.config.checkSharingStatus && !this.context.libraryManager.isSharingEnabled) {\n            return;\n        }\n        return <ShareButton library={this.context.libraryManager.currentLibrary} />;\n    }\n\n    get librariesManagerButton() {\n        if (!configuration.currentProduct.config.hasLibraryManager || this.isOneUpMode || this.isSearchMode || this.isRelinkLayerMode) {\n            return;\n        }\n\n        const { libraryManager } = this.context;\n\n        const librariesManagerButton = (icon, iconSize, tooltip, hasNotification = false, featureId) => {\n            let isDisabled = false;\n            if (libraryManager.librariesInitError) {\n                tooltip = ErrorUtils.getLoadingErrorMessage(libraryManager.syncStatus);\n                isDisabled = true;\n                hasNotification = false;\n            }\n            const classes = classNames('panel-navigation-button', { 'notification-indicator': hasNotification });\n\n            // Several error message strings have a <br/> tag in them, so we need to remove\n            // that from the tooltip string since tooltips are not rendered using the HTMLText tag\n            tooltip = translate(tooltip);\n            tooltip = tooltip.replace('<br/>', '');\n            const testId = hasNotification ? 'panel-navigation-open-manager-button-notification' : 'panel-navigation-open-manager-button';\n            return (\n                <Button\n                    data-test-id={testId}\n                    className={ classes }\n                    onClick={ this.onOpenLibrariesManager }\n                    tooltip={ tooltip }\n                    disabled={ isDisabled }\n                    featureId={ featureId }\n                >\n                    <Icon id={ icon } height={ iconSize } />\n                </Button>\n            );\n        };\n\n        if (this.isRootView) {\n            return librariesManagerButton('Add12', 12, 'DL_OPEN_LIB_MANAGER_BUTTON_TOOLTIP', false, 'FEATURE_TOOLTIP_DISCOVER_LIBRARIES');\n        }\n\n        if (libraryManager.currentLibrary?.isDocumentAssets && !libraryManager.isRestrictedAccount) {\n\n            const hasUpdates = libraryManager.publishState.isPendingUpdate;\n            return librariesManagerButton('ShareAssets', 16, hasUpdates ? 'DL_OPEN_LIB_MANAGER_BUTTON_DOC_ASSETS_TOOLTIP_UPDATE' : 'DL_OPEN_LIB_MANAGER_BUTTON_DOC_ASSETS_TOOLTIP', hasUpdates, 'FEATURE_TOOLTIP_SHARE_DESIGN_SYSTEMS');\n        }\n    }\n\n    get elementContextMenuButton() {\n        if (!this.isOneUpMode) {\n            return;\n        }\n        const { element, subElement } = this.context.viewState.getState().modeParams;\n        const menuItems = getMenuItems([ element ], subElement);\n        if (!menuItems.length) {\n            return;\n        }\n\n        let menu;\n        if (this.menuOverlayState.isOpen) {\n            // Only construct the menu if it's open, so we're not constantly recalculating it\n            menu = (\n                <MenuView menuItems={ menuItems } className=\"panel-search-types\" close={ this.onCloseMenu } maxMenuItemsVisible={configuration.MAX_ONEUP_ELEMENT_CONTEXT_MENU_ITEMS}/>\n            );\n        }\n\n        return (\n            <div className=\"oneup-element-context-menu-container\" ref={ this.menuOverlayState.setParentElement } >\n                <Button\n                    data-test-id=\"oneup-element-context-menu\"\n                    className=\"oneup-element-context-menu\"\n                    onClick={ this.onClickMenu }\n                >\n                    <Icon id=\"More\" height={ 16 } />\n                </Button>\n                {menu}\n            </div>\n        );\n    }\n\n    get navigationLabelText() {\n        if (this.isSearchMode) {\n            return translate('DL_SEARCH_HEADER');\n        }\n\n        if (this.isRootView) {\n            return translate('DL_LIBRARIES_PANEL_NAME');\n        }\n\n        if (this.isOneUpMode) {\n            return this.context.viewState.getState().modeParams.element.name;\n        }\n        return this.context.libraryManager.currentLibrary.name;\n    }\n\n    get linkedLibraryIcon() {\n        if (this.context.viewState.isDefaultMode() && this.context.libraryManager.currentLibrary && this.context.libraryManager.currentLibrary.documentId) {\n            return <Icon id=\"LinkedLibrary\" height={ 8 } className=\"linkedLibraryIcon\" />;\n        }\n    }\n\n    getTeamLibraryToolTipData() {\n        const library = this.context.libraryManager.currentLibrary;\n        const platformFolder = getTeamLibraryPlatformFolder(library);\n        const tooltip = [ library.name ];\n\n        if (platformFolder && platformFolder.name) {\n            tooltip.push(translate('DL_LIBRARY_TEAM_TOOLTIP', { name: platformFolder.name }), platformFolder.ownerName);\n        } else {\n            tooltip.push(translate('DL_LIBRARY_STATUS_TEAM'));\n        }\n\n        return tooltip;\n    }\n\n    get navigationLabel() {\n        const navigationLabel = configuration.currentProduct.config.lowercaseNavigationLabel ? this.navigationLabelText : this.navigationLabelText?.toLocaleUpperCase(environment.getLocale());\n        const navigationLabelText = <div className=\"panel-navigation-header-row-label-text\" data-test-id=\"panel-navigation-header-row-label-text\">{ navigationLabel }</div>;\n        if (this.isSearchMode || this.isRootView || this.isOneUpMode) {\n            return navigationLabelText;\n        }\n\n        // Generally we can rely on the util to get the label such as 'Personal library'\n        let tooltip = getShortLibrarySharingString(this.context.libraryManager.currentLibrary);\n        // Except for team libraries, which have some custom data including the collaborator names\n        if (isTeamLibrary(this.context.libraryManager.currentLibrary)) {\n            tooltip = this.getTeamLibraryToolTipData();\n        }\n\n        return <Tooltip content={ tooltip } placement={ 'bottom-left' } className=\"panel-navigation-header-row-label-text-wrapper\">\n            { navigationLabelText }\n        </Tooltip>;\n    }\n\n    render() {\n        const classes = classNames('panel-navigation-row', { 'one-up-navigation-row': this.isOneUpMode });\n        const backButtonWrapperClasses = classNames('panel-navigation-header-row-clickable', { 'is-clickable': this.shouldShowBackButton });\n        return <div data-test-id=\"panel-navigation-header-row\" className={ classes } onContextMenu={ handleContextMenuLibraryClick }>\n            <div className=\"panel-navigation-header-row-clickable-wrapper\" >\n                <div className={ backButtonWrapperClasses } data-test-id=\"panel-navigation-header-row-clickable\" onClick={ this.onClickBackButton }>\n                    { this.backButton }\n                    { this.linkedLibraryIcon }\n                    <div className=\"panel-navigation-header-row-label\" data-test-id=\"panel-navigation-header-row-label\">\n                        { this.navigationLabel }\n                    </div>\n                </div>\n            </div>\n            { this.shareButton || this.librariesManagerButton || this.elementContextMenuButton }\n            { configuration.currentProduct.libraryContextMenuButton?.(this.context.libraryManager.currentLibrary)}\n        </div>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport { translate } from 'app/js/managers/translationManager';\nimport metrics from 'app/js/interface/metrics';\nimport SearchBar from 'app/js/components/panel-header/SearchBar';\nimport SortDropdown from 'app/js/components/panel-header/SortDropdown';\nimport SearchFiltersDropdown from 'app/js/components/panel-header/SearchFiltersDropdown';\nimport LibraryListFilterButton from 'app/js/components/LibraryListFilterButton';\nimport NavigationHeaderRow from 'app/js/components/panel-header/NavigationHeaderRow';\nimport Button from 'app/js/components/Button';\nimport Icon from 'app/js/components/Icon';\nimport classNames from 'classnames';\nimport configuration from 'app/js/config/configuration';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport LibraryListItem from 'app/js/components/LibraryListItem';\nimport menuManager from 'app/js/managers/menuManager';\nimport environment from 'app/js/environment';\n\n@observer\nexport default class HeaderView extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    @computed get viewState() {\n        return this.context.viewState.viewState;\n    }\n\n    @computed get viewTypeDisabled() {\n        return this.context.viewState.isSearchMode();\n    }\n\n    @computed get listGridDisabled() {\n        return this.context.viewState.isStockSearchMode();\n    }\n\n    get library() {\n        return this.context.libraryManager.currentLibrary;\n    }\n\n    componentDidMount() {\n        this.context.viewState.setHeaderView(this);\n    }\n\n    getHeight() {\n        return this.headerRef && this.headerRef.clientHeight || 0;\n    }\n\n    getSearchBarBottom() {\n        return this.searchRef && (this.searchRef.offsetTop + this.searchRef.clientHeight);\n    }\n\n    get isLibrariesFilterEnabled() {\n        return configuration.currentProduct.config.showSortDropdownRootView && !configuration.currentProduct.config.disableFilters;\n    }\n\n    get canShowLibrariesFilterDropdown() {\n        return this.isLibrariesFilterEnabled && this.context.viewState.isRootView();\n    }\n\n    get canShowSearchFiltersDropdown() {\n        if (configuration.currentProduct.config.hideFilterDropdownOneUpView) {\n            return false;\n        }\n        return !configuration.currentProduct.config.disableFilters;\n    }\n\n    _setViewState(state) {\n        this.context.viewState.setViewState(state);\n        metrics.reportEvent('Navigation', 'Library Panel', 'click', 'view-change', null, this.context.libraryManager.currentLibrary);\n    }\n\n    onGridButtonClick = event => {\n        this._setViewState(this.viewState === 'list' ? 'grid' : 'list');\n        event.stopPropagation();\n    }\n\n    handleViewByGroupModeToggle = event => {\n        if (this.context.viewState.viewByGroupMode === 'tree') {\n            this.context.viewState.setViewByGroupMode('path');\n        } else {\n            this.context.viewState.setViewByGroupMode('tree');\n        }\n        metrics.reportEvent('Navigation', 'Library Panel', 'click', 'group-view-change', null, this.context.libraryManager.currentLibrary);\n        event.stopPropagation();\n    }\n\n    @computed get treePathToggleButton() {\n        if (this.context.viewState.isStockSearchMode() || this.isLibrariesFilterEnabled) {\n            return;\n        }\n        const treePathState = this.context.viewState.viewByGroupMode;\n        const treePathTooltip = treePathState === 'tree' ? 'DL_VIEW_BY_GROUP_PATH' : 'DL_VIEW_BY_GROUP_TREE';\n        const height = configuration.currentProduct.config.iconHeight || 16;\n        return (\n            <Button\n                data-test-id=\"tree-path-toggle-button\"\n                onClick={this.handleViewByGroupModeToggle}\n                className=\"tree-path-toggle-button\"\n                tooltip={translate(treePathTooltip)}>\n                <Icon id={treePathState === 'tree' ? 'PathView' : 'TreeView'} height={ height } />\n            </Button>\n        );\n    }\n\n    @computed get viewToggleButton() {\n        if (this.context.viewState.isStockSearchMode() || this.isLibrariesFilterEnabled || this.context.viewState.isLibraryNameSearchType()) {\n            return;\n        }\n        const listGridTooltip = this.viewState === 'grid' ? 'DL_LISTVIEW_TOOLTIP' : 'DL_GRIDVIEW_TOOLTIP';\n        const height = configuration.currentProduct.config.iconHeight || 16;\n        return (\n            <Button\n                data-test-id={`view-toggle-to-${this.viewState === 'grid' ? 'list' : 'grid'}-button`}\n                onClick={this.onGridButtonClick}\n                className=\"view-toggle-button\"\n                disabled={this.listGridDisabled}\n                tooltip={translate(listGridTooltip)}>\n                <Icon id={this.viewState === 'grid' ? 'ListView' : 'GridView'} height={ height } />\n            </Button>\n        );\n    }\n\n    @computed get sortDropdownButton() {\n        // Cannot sort results in document search mode because elements are displayed in the document assets custom groups\n        if (this.context.viewState.viewByState === 'group' && this.context.viewState.isDocumentSearchMode()) {\n            return;\n        }\n        if (this.canShowLibrariesFilterDropdown) {\n            return (\n                <SortDropdown\n                    mode=\"libraries\"\n                    data-test-id=\"sort-dropdown\"\n                    sortOrderControl\n                    hideGroupBy\n                />\n            );\n        }\n        const sortOrderControl = this.context.viewState.isStockSearchMode() ? false : true;\n        return <SortDropdown sortOrderControl={sortOrderControl} hideGroupBy={this.library && this.library.isDocumentAssets} />;\n    }\n\n    @computed get filterDropdown() {\n        if (this.canShowLibrariesFilterDropdown) {\n            return <LibraryListFilterButton/>;\n        } else if (this.canShowSearchFiltersDropdown) {\n            return <SearchFiltersDropdown/>;\n        }\n        return;\n    }\n\n    @computed get viewModeControls() {\n        const sortOnRightInRootView = configuration.currentProduct.config.sortOnRightInRootView?.() && this.context.viewState.isRootView();\n        if (configuration.currentProduct.customSubheader) {\n            return configuration.currentProduct.customSubheader();\n        }\n        return (\n            <>\n                <div className=\"panel-header-left-controls\">\n                    { this.filterDropdown }\n                    {!sortOnRightInRootView && this.sortDropdownButton }\n                </div>\n                { this.context.viewState.viewByState === configuration.VIEW_BY_MODES.GROUP && this.treePathToggleButton }\n                { this.viewToggleButton }\n            </>\n        );\n    }\n\n    @computed get relinkHeader() {\n        // TODO: Avoid calling getState() directly\n        const modeParams = this.context.viewState.getState().modeParams;\n        const icon = modeParams.missing\n            ? <div className=\"panel-relink-header-image-missing\" />\n            : <div className=\"panel-relink-header-image\"><Icon id=\"Cloud\" height={ 14 }/></div>;\n\n        return (\n            <div data-test-id=\"relink-header\" className=\"panel-relink-header\">\n                { icon }\n                <div data-test-id=\"relink-message\" className=\"panel-relink-header-text\">\n                    { modeParams.message }\n                </div>\n            </div>\n        );\n    }\n\n    @computed get removedElementsHeader() {\n        // Note: This is only reachable through the debug menu, so the strings are not translated\n        return (\n            <div data-test-id=\"removed-elements-header\" className=\"panel-relink-header\">\n                <div className=\"panel-relink-header-image\"><Icon id=\"Delete\" height={ 16 }/></div>\n                <div data-test-id=\"removed-elements-message\" className=\"panel-relink-header-text\">\n                    { 'Deleted Items' }\n                </div>\n            </div>\n        );\n    }\n\n    get hideViewModeHeader() {\n        return this.context.viewState.isOneUpMode() || this.context.viewState.isPlainRootView && !this.isLibrariesFilterEnabled;\n    }\n\n    get libraryModeHeader() {\n        if (this.hideViewModeHeader) {\n            return;\n        }\n        const variableRow = this.context.viewState.isRelinkLayerMode() ? this.relinkHeader\n            : this.context.viewState.isRemovedElementsMode() ? this.removedElementsHeader : this.viewModeControls;\n\n        return <div data-test-id=\"panel-header-controls-row\" className=\"panel-header-row panel-header-controls-row\">{ variableRow }</div>;\n    }\n\n    get searchBar() {\n        return <div className=\"panel-header-search-row\" ref={ this.setSearchRef }><SearchBar/></div>;\n    }\n\n    get navigationRow() {\n        if (configuration.currentProduct.config.disableNavigationLabel) { return; }\n\n        if ((this.context.viewState.isRootView() && !configuration.currentProduct.config.noFlyoutMenu) || this.context.libraryManager.disableCCLibraries) {\n            return;\n        }\n\n        return <NavigationHeaderRow/>;\n    }\n\n    onCreateLibraryClick = () => {\n        metrics.reportEvent('Create Library', 'Root View', 'click', 'new-library-header');\n        this.context.dialogManager.openDialog('createLibrary');\n    }\n\n    get createLibraryButton() {\n        if (configuration.currentProduct.config.readOnlyPanelUI || !this.context.libraryManager.areLibrariesLoaded || !this.context.viewState.isPlainRootView || configuration.currentProduct.config.hideHeaderCreateLibraryButton) {\n            return;\n        }\n        return <div className=\"create-library-button-header-row\" data-test-id=\"create-library-button-header-row\" onClick={ this.onCreateLibraryClick }>\n            <Icon id=\"Add14\" height={14} />\n            <div className=\"create-library-button-text\">{ translate('DL_CREATE_DESIGN_LIBRARY') }</div>\n        </div>;\n    }\n\n    setHeaderRef = ref => {\n        this.headerRef = ref;\n    }\n\n    setSearchRef = ref => {\n        this.searchRef = ref;\n    }\n\n    get documentAssets() {\n        if (this.isDocumentAssetsRootView) {\n            const library = this.context.libraryManager.documentAssetsContainer;\n            return <LibraryListItem library={ library } key={ library.id } onClick={ library => this.context.libraryManager.currentLibrary = library } showContextMenuButton={ configuration.currentProduct.config.showLibraryListItemContextMenuButton?.() }\n            />;\n        }\n    }\n\n    // XD has the LIBRARIES navigation row show up at the bottom of the header instead of the top, to act as a title\n    // for the libraries underneath and separate them visually from the document assets above\n    get isDocumentAssetsRootView() {\n        if (configuration.currentProduct.config.disableDocumentAssetsView) { return false; }\n        return !this.context.viewState.isSearchMode() && this.context.viewState.isRootView() && this.context.libraryManager.documentAssetsContainer;\n    }\n\n    onClickFlyoutMenu = () => {\n        this.context.dialogManager.openDialog('contextMenu', {\n            menuItems: menuManager.getFlyoutMenu(true),\n            maxMenuItemsVisible: 20,\n            x: 5,\n            y: 30,\n            position: 'left'\n        });\n    }\n\n    @computed get shouldDisplaySearchBar() {\n        // We want to disable the search bar in expanded view on mobile!\n        if (configuration.currentProduct.isExpandedView?.() && environment.isMobileView) { return false; }\n\n        // if its root view and dont want to enable searching for libraries but do enable searching for root libraries\n        const libraryNameSearch = configuration.currentProduct.config.enableLibraryNameSearch;\n        const hideAllLibrariesSearch = this.context.libraryManager.disableCCLibraries || configuration.currentProduct.config.disableAllLibrariesElementSearch;\n        const shouldDisplay = !this.context.viewState.isOneUpMode()\n            && ((this.context.viewState.isRootView() && libraryNameSearch) || !(this.context.viewState.isRootView() && hideAllLibrariesSearch))\n            && !configuration.currentProduct.config.disableSearchBar;\n        return shouldDisplay;\n    }\n\n    handleClick = () => {\n        this.context.viewState.clearAllSelections();\n    }\n\n    render() {\n        const classes = classNames('panel-header', { 'root-view-header' : this.context.viewState.isRootView() });\n        return (\n            <div data-test-id=\"panel-header\" className={ classes } ref={ this.setHeaderRef } onClick={this.handleClick}>\n                { !this.isDocumentAssetsRootView && this.navigationRow }\n                { this.shouldDisplaySearchBar && this.searchBar }\n                { this.createLibraryButton }\n                { this.libraryModeHeader }\n                { this.documentAssets }\n                { this.isDocumentAssetsRootView && this.navigationRow }\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport classNames from 'classnames';\nimport { observer } from 'mobx-react';\nimport { translate } from 'app/js/managers/translationManager';\nimport viewState from 'app/js/state/viewState';\nimport environment from 'app/js/environment';\nimport productInterface from 'app/js/interface/productInterface';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport Button from 'app/js/components/Button';\n\n@observer\nexport default class RelinkFooterView extends React.Component {\n\n    get selection() {\n        return elementSelectionState.selection;\n    }\n\n    _sendElementChosen(element) {\n        productInterface.sendElementChosen(element);\n        viewState.resetMode();\n    }\n\n    onClickRelink = () => {\n        if (this.selection.length > 0) {\n            this._sendElementChosen(this.selection[0]);\n        }\n    };\n\n    onClickCancel = () => this._sendElementChosen();\n\n    get relinkButton() {\n        const message = viewState.getState().modeParams.actionMessage;\n        const classes = classNames('panel-relink-button-relink', 'action', { disabled: this.selection.length === 0 });\n        return (\n            <Button data-test-id=\"relink-button\" className={ classes } onClick={ this.onClickRelink }>\n                { message }\n            </Button>\n        );\n    }\n\n    get cancelButton() {\n        return (\n            <Button data-test-id=\"relink-cancel-button\" className=\"panel-relink-button-cancel\" onClick={ this.onClickCancel }>\n                { translate('DL_CANCEL') }\n            </Button>\n        );\n    }\n\n    render() {\n        const buttons = environment.isWindowsOS()\n            ? <React.Fragment>{ this.relinkButton }{ this.cancelButton }</React.Fragment>\n            : <React.Fragment>{ this.cancelButton }{ this.relinkButton }</React.Fragment>;\n\n        return <div data-test-id=\"relink-footer\" className=\"panel-relink-action\">{ buttons }</div>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport classNames from 'classnames';\nimport { observer } from 'mobx-react';\nimport { translate } from 'app/js/managers/translationManager';\nimport viewState from 'app/js/state/viewState';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\n\n// Note: This is only reachable via the debug menu, so the strings are not translated\n\n@observer\nexport default class RemovedElementsFooterView extends React.Component {\n\n    get selection() {\n        return elementSelectionState.selection;\n    }\n\n    onClickDelete = () => {\n        // TODO: Analytics\n        // If this is turned into a real feature, add 'permanent-delete' value to deleteElement events.\n        // Also add aggregate events, and ensure SDM spreadsheet gets updated.\n        libraryManager.deleteElements(this.selection, true);\n    };\n\n    onClickRestore = () => {\n        // TODO: Analytics\n        // If this is turned into a real feature, add 'archive-elements' value to restoreElement events.\n        // Also add aggregate events, and ensure SDM spreadsheet gets updated.\n        libraryManager.restoreElements(this.selection);\n    };\n\n    onClickCancel = () => {\n        viewState.resetMode();\n    };\n\n    get deleteButton() {\n        const classes = classNames('panel-relink-button-relink', 'action', { disabled: this.selection.length === 0 });\n        return (\n            <button data-test-id=\"removed-elements-delete-button\" className={ classes } onClick={ this.onClickDelete }>\n                { 'Permanently Delete' }\n            </button>\n        );\n    }\n\n    get restoreButton() {\n        // TODO: Should also check that there's enough space in the library to restore to\n        const classes = classNames('panel-relink-button-relink', 'action', { disabled: this.selection.length === 0 });\n        return (\n            <button data-test-id=\"removed-elements-restore-button\" className={ classes } onClick={ this.onClickRestore }>\n                { 'Restore' }\n            </button>\n        );\n    }\n\n    get cancelButton() {\n        return (\n            <button data-test-id=\"removed-elements-cancel-button\" className=\"panel-relink-button-cancel\" onClick={ this.onClickCancel }>\n                { translate('DL_CANCEL') }\n            </button>\n        );\n    }\n\n    render() {\n        return (\n            <div data-test-id=\"removed-elements-footer\" className=\"panel-relink-action\">\n                { this.cancelButton }\n                { this.restoreButton }\n                { this.deleteButton }\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\nimport configuration from 'app/js/config/configuration';\nimport { translate } from 'app/js/managers/translationManager';\nimport metrics from 'app/js/interface/metrics';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport Button from 'app/js/components/Button';\n\n@observer\nexport default class UpdateAllFooterView extends React.Component {\n    static contextType = LibrariesContext;\n\n    get library() {\n        return this.context.libraryManager.currentLibrary;\n    }\n\n    updateAll = () => {\n        metrics.reportEvent('Gated Update', 'Element', 'render', 'update-all', { event: { count: this.library.gatedUpdates.length } });\n        this.library.updateLinkedAssets();\n    }\n\n    get updateLabel() {\n        const numberGatedUpdates = this.library.gatedUpdates.length;\n        if (numberGatedUpdates <= 1) {\n            // The Update button may exist when there are 0 gated updates\n            // but there are assets that can be imported from a stickersheet (legacy document links).\n            return translate('UPDATE_ASSETS');\n        } else if (numberGatedUpdates >= configuration.MAX_ASSET_UPDATE_COUNT) {\n            return translate('UPDATE_ALL_MAX', { number: configuration.MAX_ASSET_UPDATE_COUNT });\n        } else {\n            return translate('UPDATE_ALL_NUM', { number: numberGatedUpdates });\n        }\n    }\n\n    render() {\n        return (\n            <div className=\"panel-footer\" data-test-id=\"panel-footer\">\n                <div className=\"panel-footer-update\" data-test-id=\"panel-footer-update\">\n                    <Button\n                        onClick={ this.updateAll }\n                        variant=\"cta\"\n                        data-test-id=\"update-all-button\"\n                        tooltip={ this.updateLabel }\n                    >\n                        { this.updateLabel }\n                    </Button>\n                </div>\n            </div>\n        );\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\nimport { computed } from 'mobx';\nimport configuration from 'app/js/config/configuration';\nimport Button from 'app/js/components/Button';\nimport OverlayState from 'app/js/components/utils/OverlayState';\nimport Icon from 'app/js/components/Icon';\nimport MenuView from 'app/js/components/MenuView';\nimport PropTypes from 'prop-types';\n\n@observer\nexport default class BaseFooterMenuView extends React.Component {\n    static defaultProps = {\n        isDisabled: false,\n        tooltip: '',\n        icon: 'AddDropdown',\n        menuMinWidth: 160\n    };\n\n    static propTypes = {\n        menuContents: PropTypes.arrayOf(PropTypes.object).isRequired,\n        isDisabled: PropTypes.bool,\n        onClickButton: PropTypes.func,\n        onCloseMenu: PropTypes.func,\n        tooltip: PropTypes.string,\n        icon: PropTypes.string,\n        className: PropTypes.string,\n        menuMinWidth: PropTypes.number,\n        testId: PropTypes.string.isRequired\n    };\n\n    overlayState = new OverlayState({\n        onOpen: configuration.currentProduct.addOperationInstantiated,\n        onClose: configuration.currentProduct.addOperationComplete\n    });\n\n    get menuContents() {\n        return this.props.menuContents;\n    }\n\n    onCloseMenu = (event) => {\n        event.stopPropagation();\n        this.overlayState.hideOverlay();\n        this.props.onCloseMenu && this.props.onCloseMenu();\n    }\n\n    @computed get listItems() {\n        const style = { minWidth: this.props.menuMinWidth };\n        return <MenuView\n            menuItems={ this.menuContents } style={ style } className=\"panel-insert-menu\"\n            close={ this.onCloseMenu } iconHeight={ 16 } maxMenuItemsVisible={this.menuContents.length} footerMenu={ true } maxWidth={window.innerWidth - 14}\n        />;\n\n    }\n\n    get hasMenuContents() {\n        return this.menuContents.length > 0;\n    }\n\n    @computed get menu() {\n        return (\n            <div data-test-id=\"insert-menu-view\">{ this.listItems }</div>\n        );\n    }\n\n    onClickButton = (event) => {\n        this.overlayState.toggleOverlay();\n        this.props.onClickButton && this.props.onClickButton();\n        event.stopPropagation();\n    }\n\n    get isDisabled() {\n        return this.props.isDisabled;\n    }\n\n    get iconHeight() {\n        return configuration.currentProduct.config.mediumIconHeight || 16;\n    }\n\n    render() {\n        return (\n            <div>\n                <div data-test-id={ this.props.testId } id={ this.props.testId } className={ this.props.className } ref={ this.overlayState.setParentElement }>\n                    <Button data-test-id=\"add-button\" className=\"panel-footer-icon-add\" disabled={ this.isDisabled }\n                        onClick={ this.onClickButton } tooltip={ this.props.tooltip } >\n                        <Icon height={ this.iconHeight } width={ 20 } id={ this.props.icon } />\n                    </Button>\n                    { this.hasMenuContents && this.overlayState.isOpen && this.menu }\n                </div>\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\nimport { computed } from 'mobx';\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport librarySizeManager from 'app/js/managers/librarySizeManager';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport viewState from 'app/js/state/viewState';\nimport { translate } from 'app/js/managers/translationManager';\nimport configuration from 'app/js/config/configuration';\nimport metrics from 'app/js/interface/metrics';\nimport { getAddMenuItems } from 'app/js/utils/menuUtils';\nimport BaseFooterMenuView from 'app/js/components/panel-footer/BaseFooterMenuView';\n\n@observer\nexport default class AddAssetView extends React.Component {\n\n    @computed get menuContents() {\n        const inNewUserWorkflow = viewState.currentWorkflowName === 'NewUserOnboarding';\n\n        const onElementAdd = (elements) => {\n            const count = elements.length;\n            if (elements) {\n                metrics.reportEvent('Add Assets', 'Element', 'click', 'add', {\n                    event: { value: 'agg', count },\n                    content: { category: inNewUserWorkflow ? 'Onboarding' : 'Plus' }\n                });\n            }\n            viewState.resetMode();\n            // We set the selection in a timeout, since this is triggered by a click event which\n            // would also clear the selection - using a timeout makes sure that anything that would clear\n            // the selection gets chance to trigger first, so it won't override us!\n            setTimeout(() => {\n                elementSelectionState.setSelection(elements, true);\n            });\n        };\n        return getAddMenuItems(onElementAdd, inNewUserWorkflow ? 'onboarding' : 'addButton');\n    }\n\n    onCloseMenu = () => {\n        viewState.notifyWorkflowAction('click-add-menu');\n    }\n\n    onClickButton = () => {\n        viewState.notifyWorkflowAction('click-add-button');\n        // Refresh menu item icons like the color element icon,\n        // this is useful in cases like Office where document change event is not available\n        // and consequently most recent style changes may not have been captured by event listeners.\n        if (environment.updateLayerInfoOnOpenAddMenu) {\n            layerSelectionManager.updateLayerInfo();\n        }\n    }\n\n    get isDisabled() {\n        return viewState.isSearchMode() || this.menuContents.length < 1;\n    }\n\n    render() {\n        const library = libraryManager.currentLibrary;\n        const hideAddControls = configuration && configuration.currentProduct && configuration.currentProduct.config.hideAddControls;\n        if (!hideAddControls && library && library.isWritable && !library.isDeletedFromServer) {\n            return <BaseFooterMenuView menuContents={this.menuContents} isDisabled={ this.isDisabled } onClickButton={this.onClickButton} tooltip={ translate(librarySizeManager.canAddElements(library) ? 'DL_INSERT_TOOLTIP' : 'DL_INSERT_TOOLTIP_LIMIT') } onCloseMenu={ this.onCloseMenu } className={'insert-menu-container'} testId=\"add-asset-view\"/>;\n        }\n        return null;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\nimport { computed } from 'mobx';\nimport configuration from 'app/js/config/configuration';\nimport metrics from 'app/js/interface/metrics';\nimport BaseFooterMenuView from 'app/js/components/panel-footer/BaseFooterMenuView';\nimport Tooltip from 'app/js/components/Tooltip';\nimport { translate } from 'app/js/managers/translationManager';\nimport * as CaptureUtils from 'app/js/utils/captureUtils';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\n\n@observer\nexport default class AddLibraryMenuView extends React.Component {\n    static contextType = LibrariesContext;\n\n    @computed get addDocContentOperation() {\n        return configuration.currentProduct.getAddDocContentOperation && configuration.currentProduct.getAddDocContentOperation();\n    }\n\n    createNewLibrary = () => {\n        metrics.reportEvent('Create Library', 'Root View', 'click', 'new-library-footer');\n        this.context.dialogManager.openDialog('createLibrary');\n    }\n\n    @computed get menuContents() {\n        const onAddDocContentClick = () => {\n            metrics.reportEvent('Create Library', 'Root View', 'click', 'create-from-document');\n            metrics.setExtraEventMetrics('createLibrary', { fromDocument: true });\n            if (this.addDocContentOperation.enabled) {\n                this.addDocContentOperation.apply();\n            }\n            metrics.clearExtraEventMetrics('createLibrary');\n        };\n\n        const menuItems = [];\n        if (CaptureUtils.isCaptureEnabled()) {\n            menuItems.push(\n                {\n                    label: 'DL_CAPTURE',\n                    icon: 'Capture',\n                    onClick: (elementAddCallback) => CaptureUtils.openCapture(null, elementAddCallback)\n                },\n                { divider: true },\n            );\n        }\n        // Don't allow restricted access users to launch CCD since those workflows aren't available\n        if (!this.context.libraryManager.isRestrictedAccount) {\n            menuItems.push(\n                {\n                    label: 'DL_MORE_LIBRARY_BROWSE',\n                    icon: 'Browse',\n                    onClick: () => this.context.libraryManager.openBrowseAll()\n                },\n                {\n                    label: 'DL_MORE_LIBRARY_BROWSE_PUBLIC',\n                    icon: 'GlobeSearch',\n                    onClick: () => this.context.libraryManager.openMarketplace()\n                },\n                { divider: true },\n            );\n        }\n        menuItems.push(\n            // If addDocContentOperation exists and is not empty, show add doc content menu item\n            this.addDocContentOperation && {\n                label: 'DL_FLYOUT_ADD_DOC_CONTENT_MENU_ITEM',\n                enableMenu: this.context.libraryManager.areLibrariesLoaded && !this.context.viewState.isImportExportInProgress,\n                icon: this.addDocContentOperation && this.addDocContentOperation.icon,\n                onClick: () => onAddDocContentClick()\n            },\n            {\n                label: 'DL_CREATE_DESIGN_LIBRARY',\n                enableMenu: this.context.libraryManager.areLibrariesLoaded && !this.context.viewState.isImportExportInProgress,\n                icon: 'Add',\n                onClick: this.createNewLibrary\n            }\n        );\n\n        return menuItems.filter(item => item);\n    }\n\n    render() {\n        return <Tooltip content={ translate('DL_ADD_LIBRARIES_TOOLTIP') }><BaseFooterMenuView isDisabled={ !this.context.libraryManager.areLibrariesLoaded } menuContents={ this.menuContents } className={'add-library-button-container'} testId=\"add-library-menu-view\"/></Tooltip>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { Library } from '@cclibraries/cc-libraries-js';\nimport viewState from 'app/js/state/viewState';\nimport { translate } from 'app/js/managers/translationManager';\nimport { canEditInSource, editInSource } from 'app/js/utils/editOriginalUtils';\nimport BaseFooterMenuView from 'app/js/components/panel-footer/BaseFooterMenuView';\n\n@observer\nexport default class DocumentLibraryMenuView extends React.Component {\n\n    static propTypes = {\n        library: PropTypes.instanceOf(Library).isRequired,\n    };\n\n    get menuContents() {\n        return [ {\n            label: 'DL_EDIT_IN_SOURCE',\n            onClick: () => editInSource(this.props.library)\n        } ];\n    }\n\n    get isDisabled() {\n        return !canEditInSource(this.props.library) || viewState.isSearchMode();\n    }\n\n    get tooltip() {\n        if (this.isDisabled) {\n            return translate('DL_FOOTER_READ_ONLY_TOOLTIP');\n        }\n        return translate('DL_FOOTER_DOCUMENT_LIBRARY_TOOLTIP');\n    }\n\n    render() {\n        return <BaseFooterMenuView\n            menuContents={ this.menuContents } isDisabled={ this.isDisabled } menuMinWidth={ 0 }\n            icon=\"LockMenu\" tooltip={ this.tooltip }\n            className=\"insert-menu-container\" testId=\"read-only-document-library-icon\"\n        />;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\nimport { computed } from 'mobx';\nimport Button from 'app/js/components/Button';\nimport { translate } from 'app/js/managers/translationManager';\nimport metrics from 'app/js/interface/metrics';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport dragManager from 'app/js/managers/dragManager';\nimport Icon from 'app/js/components/Icon';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport groupSelectionState from 'app/js/state/groupSelectionState';\n\n@observer\nexport default class DeleteButton extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    @computed get isDisabled() {\n        const disabledViews = this.context.viewState.isStockSearchMode()\n        || !this.context.viewState.isLibraryWritable(this.context.libraryManager.currentLibrary)\n        || !this.context.libraryManager.currentLibrary\n        || this.context.libraryManager.currentLibrary.isDeletedFromServer;\n        // The delete button should not be disabled in one up mode if no groups or elements are selected.\n        const disabledSelections = !this.context.viewState.isOneUpMode() && groupSelectionState.groupSelection.length === 0 && elementSelectionState.selection.length === 0;\n        return disabledViews || disabledSelections;\n    }\n\n    _deleteElementsAndReport(elements, action) {\n        metrics.reportEvent('Element Operations', 'Element', 'click', 'delete', { event: { value: elements.length }, content: { category: action } });\n        metrics.setExtraEventMetrics('removeElement', { content: { category: action } });\n        this.context.libraryManager.deleteElements(elements);\n        metrics.clearExtraEventMetrics('removeElement');\n        elementSelectionState.clearSelection();\n        if (this.context.viewState.isOneUpMode()) {\n            this.context.viewState.setStateBeforeOneUpMode();\n        }\n    }\n\n    _deleteGroupAndReport(groups, action) {\n        metrics.setExtraEventMetrics('removeGroup', { content: { category: action } });\n        this.context.libraryManager.deleteGroups(groups, { deleteContents: true });\n        this.context.viewState.clearAllSelections();\n    }\n\n    onDrop = () => {\n        this._deleteElementsAndReport(dragManager.dragData, 'Drag Drop');\n        dragManager.handleDrop();\n    }\n\n    onClick = () => {\n        if (groupSelectionState.groupSelection.length) {\n            this._deleteGroupAndReport(groupSelectionState.groupSelection);\n        } else {\n            this._deleteElementsAndReport(elementSelectionState.selection, 'Click');\n        }\n    }\n\n    render() {\n        return <Button\n            data-test-id=\"delete-button\"\n            onDrop={ this.onDrop }\n            onClick={ this.onClick }\n            disabled={ this.isDisabled }\n            tooltip={ translate('DL_FOOTER_DELETE_TOOLTIP') }\n            className=\"panel-footer-icon-delete\" >\n            <Icon id=\"Delete\" height={ 16 } />\n        </Button>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\nimport { observable, when } from 'mobx';\nimport { translate } from 'app/js/managers/translationManager';\nimport OverlayState from 'app/js/components/utils/OverlayState';\nimport PropTypes from 'prop-types';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\n\n@observer\nexport default class LockedPopup extends React.Component {\n    @observable overlayState = new OverlayState();\n\n    static contextType = LibrariesContext\n\n    static propTypes = {\n        onClose: PropTypes.func.isRequired,\n    };\n\n    componentDidMount() {\n        this.overlayState.toggleOverlay();\n        this.disposeReaction = when(() => !this.overlayState.isOpen, this.props.onClose);\n    }\n\n    componentWillUnmount() {\n        this.disposeReaction && this.disposeReaction();\n    }\n\n    hide = () => {\n        this.props.onClose();\n    }\n\n    onClick = () => {\n        this.context.dialogManager.openDialog('unlockToolkit');\n        this.hide();\n    }\n\n    render() {\n        return <div ref={ this.overlayState.setParentElement } data-test-id=\"locked-popup\" onClick={ this.onClick }>\n            <div data-test-id=\"panel-locked-popup\" className=\"panel-locked-popup-container\">\n                <div className=\"panel-locked-message\">\n                    { translate('DL_MY_TOOLKIT_UNLOCK_BUTTON_MESSAGE') }\n                </div>\n            </div>\n        </div>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\nimport { computed, observable } from 'mobx';\nimport Icon from 'app/js/components/Icon';\nimport LockedPopup from 'app/js/components/panel-footer/LockedPopup';\nimport Button from 'app/js/components/Button';\n\n@observer\nexport default class LockedButton extends React.Component {\n\n    @observable showMenu = false;\n\n    closePopup = () => {\n        this.showMenu = false;\n    }\n\n    // Returns LockedPopup if showMenu is true\n    @computed get popup() {\n        if (this.showMenu) {\n            return <LockedPopup onClose={ this.closePopup }/>;\n        }\n    }\n\n    onClick = () => {\n        this.showMenu = true;\n    }\n\n    /**\n        Lock icon\n    **/\n\n    @computed get iconView() {\n        // TODO: Update Lock icon once we get correct Lock SVG from design\n        return (\n            <Button data-test-id=\"panel-footer-locked\" className=\"panel-footer-icon-unlock\" onClick={ this.onClick } >\n                <Icon id=\"LockPopup\" height={ 17 } width={ 16 } />\n            </Button>\n        );\n    }\n\n    render() {\n        return (<React.Fragment>\n            { this.iconView }\n            { this.popup }\n        </React.Fragment>);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\nimport { computed } from 'mobx';\nimport Tooltip from 'app/js/components/Tooltip';\nimport environment from 'app/js/environment';\nimport RelinkFooterView from './RelinkFooterView';\nimport RemovedElementsFooterView from './RemovedElementsFooterView';\nimport UpdateAllFooterView from './UpdateAllFooterView';\nimport AddAssetView from 'app/js/components/panel-footer/AddAssetView';\nimport AddLibraryMenuView from 'app/js/components/panel-footer/AddLibraryMenuView';\nimport DocumentLibraryMenuView from 'app/js/components/panel-footer/DocumentLibraryMenuView';\nimport { translate } from 'app/js/managers/translationManager';\nimport CreateGroupButton from 'app/js/components/panel-footer/CreateGroupButton';\nimport DeleteButton from 'app/js/components/panel-footer/DeleteButton';\nimport SyncButton from 'app/js/components/panel-footer/SyncButton';\nimport LockedButton from 'app/js/components/panel-footer/LockedButton';\nimport classNames from 'classnames';\nimport Icon from 'app/js/components/Icon';\nimport Button from 'app/js/components/Button';\nimport metrics from 'app/js/interface/metrics';\nimport configuration from 'app/js/config/configuration';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\n\n@observer\nexport default class FooterView extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    get hasLibraryManager() {\n        return configuration.currentProduct.config.hasLibraryManager;\n    }\n\n    get readOnlyIcon() {\n        return (\n            <Tooltip placement=\"top-start\" content={ translate('DL_FOOTER_READ_ONLY_TOOLTIP') }>\n                <div data-test-id=\"read-only-icon\" className=\"panel-footer-icon-read-only\"><Icon id=\"Lock\" height={ 16 }/></div>\n            </Tooltip>\n        );\n    }\n\n    get library() {\n        return this.context.libraryManager.currentLibrary;\n    }\n\n    @computed get createGroupButton() {\n        if (configuration.currentProduct.config.readOnlyGroups) {\n            return;\n        }\n        return <CreateGroupButton />;\n    }\n\n    @computed get addButtons() {\n        if (this.context.viewState.isRootView()) {\n            return !configuration.currentProduct.config.readOnlyPanelUI && <AddLibraryMenuView />;\n        }\n        if (this.context.viewState.isLocked(this.library)) {\n            return <LockedButton/>;\n        }\n        if (this.library && this.library.documentId) {\n            return <DocumentLibraryMenuView library={ this.library } />;\n        }\n        if (this.library && (!this.library.isWritable || this.library.isDocumentAssets)) {\n            return this.readOnlyIcon;\n        }\n\n        return <React.Fragment>\n            { this.createGroupButton }\n            { !configuration.currentProduct.config.hideAddMenuView && <AddAssetView /> }\n            <DeleteButton />\n        </React.Fragment>;\n    }\n\n    onOpenLibrariesManager = () => {\n        metrics.reportEvent('Manager', 'Launch', 'click', 'open-manager');\n        environment.openLibraryManagerWindow();\n    }\n\n    @computed get openLibraryManagerButton() {\n        if (!configuration.currentProduct.config.hasLibraryManager) { return; }\n        return (\n            <Button data-test-id=\"panel-footer-libraries-manager\" tooltip={translate('DL_OPEN_LIB_MANAGER_BUTTON_TOOLTIP')} onClick={ this.onOpenLibrariesManager } >\n                <Icon id=\"Settings\" height={ 16 }/>\n            </Button>\n        );\n    }\n\n    @computed get footerView() {\n        if (this.context.viewState.isRelinkLayerMode()) {\n            return <RelinkFooterView />;\n        }\n\n        if (this.context.viewState.isRemovedElementsMode()) {\n            return <RemovedElementsFooterView />;\n        }\n\n        return (\n            <React.Fragment>\n                <SyncButton />\n                <div className=\"panel-footer-toolbar-spacing\"></div>\n                { this.context.viewState.isRootView() && this.openLibraryManagerButton }\n                { !this.context.viewState.isSearchMode() && this.addButtons }\n            </React.Fragment>\n        );\n    }\n\n    handleClick = () => {\n        this.context.viewState.clearAllSelections();\n    }\n\n    render() {\n        if (this.library) {\n            // Document Assets view will have either no footer or the Update All button footer\n            if (this.library.newLinkedAssetsExist || environment.isPreviewActive || (this.library.gatedUpdates && this.library.gatedUpdates.length > 0)) {\n                return <UpdateAllFooterView />;\n            }\n            if (this.library.hideSyncStateFooter) {\n                return null;\n            }\n        }\n\n        return (\n            <div className=\"panel-footer\" data-test-id=\"panel-footer\" onClick={this.handleClick}>\n                <div className=\"panel-footer-divider-container\"><div className=\"panel-footer-divider\"></div></div>\n                <div className={ classNames('panel-footer-toolbar', { 'windows': environment.isWindowsOS() }) }>\n                    { this.footerView }\n                </div>\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { translate } from 'app/js/managers/translationManager';\nimport { measureTextHeight } from 'app/js/utils/DOMUtils';\n\nconst MESSAGE_CLASS = 'panel-stock-noresults-message';\nconst TIPS_HEADER_CLASS = 'panel-stock-noresults-tips-header';\n\n@observer\nexport default class StockSearchTips extends React.Component {\n\n    static propTypes = {\n        className: PropTypes.string\n    };\n\n    render() {\n        return (\n            <div className={ this.props.className }>\n                <div data-test-id=\"stock-tips-header\" className={TIPS_HEADER_CLASS}>{ StockSearchTips._getTipsHeader() }</div>\n                <div data-test-id=\"stock-tips-message\">{ StockSearchTips._getTips() }</div>\n            </div>\n        );\n    }\n\n    static _getTipsHeader() {\n        return translate('DL_STOCK_PANEL_RESULT_TIPS_HEADER');\n    }\n\n    static _getTips() {\n        return translate('DL_STOCK_PANEL_RESULT_TIPS');\n    }\n\n    static measure(width) {\n        const tipsHeaderHeight = measureTextHeight(StockSearchTips._getTipsHeader(), MESSAGE_CLASS, width);\n        const tipsHeight = measureTextHeight(StockSearchTips._getTips(), '', width);\n        const height = 20 + tipsHeaderHeight + tipsHeight;\n        return { width, height };\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport configuration from 'app/js/config/configuration';\nimport { translate } from 'app/js/managers/translationManager';\nimport StockSearchState from 'app/js/state/StockSearchState';\nimport { measureTextHeight } from 'app/js/utils/DOMUtils';\nimport StockSearchTips from 'app/js/components/stock/StockSearchTips';\n\nconst SEARCH_MORE_BUTTON_TEXT_CLASS = 'panel-stock-search-more-button-text';\n\n@observer\nexport default class SearchFooter extends React.Component {\n\n    static propTypes = {\n        stockSearchState: PropTypes.instanceOf(StockSearchState).isRequired\n    }\n\n    static _getSearchMoreButtonText() {\n        return translate('DL_STOCK_PANEL_SEARCH_ON_WEB');\n    }\n\n    static _getTipsHeader({ searchResultsCount: count }) {\n        return translate('DL_STOCK_PANEL_RESULT_COUNT', { count });\n    }\n\n    static _canShowTips({ searchResultsCount, findSimilarData }) {\n        // If we don't have enough search results, and we're not looking for similar items, we show\n        // some tips for refining the results\n        return !findSimilarData && searchResultsCount < configuration.STOCK_SEARCH_RESULT_SIZE;\n    }\n\n    static _canSearchMoreOnWeb({ searchResultsCount, findSimilarData }) {\n        // If enough search results, we show a find more link\n        // Except if we're searching for similar results, in which case this won't work on the web\n        const canOpenSimilarOnWeb = !findSimilarData || (!findSimilarData.url && !findSimilarData.path);\n        return searchResultsCount >= configuration.STOCK_SEARCH_RESULT_SIZE && canOpenSimilarOnWeb;\n    }\n\n    _getSearchMoreButton() {\n        return (\n            <div className=\"panel-stock-search-more-button-container\" onClick={this.handleSearchOnWebClick} data-test-id=\"searchmore-button\">\n                <div className={SEARCH_MORE_BUTTON_TEXT_CLASS}>{ SearchFooter._getSearchMoreButtonText() }</div>\n            </div>\n        );\n    }\n\n    handleSearchOnWebClick = () => {\n        this.props.stockSearchState.searchOnWeb();\n    }\n\n    _getSearchTips() {\n        return (\n            <div className=\"panel-stock-search-tips-container\" data-test-id=\"search-tips\">\n                <div>{ SearchFooter._getTipsHeader(this.props.stockSearchState) }</div>\n                <StockSearchTips />\n            </div>\n        );\n    }\n\n    render() {\n        if (SearchFooter._canSearchMoreOnWeb(this.props.stockSearchState)) {\n            return this._getSearchMoreButton();\n        }\n        if (SearchFooter._canShowTips(this.props.stockSearchState)) {\n            return this._getSearchTips();\n        }\n        return null;\n    }\n\n    static measure(width, stockSearchState) {\n        if (SearchFooter._canSearchMoreOnWeb(stockSearchState)) {\n            const BUTTON_MARGIN = 15;\n            const textHeight = measureTextHeight(SearchFooter._getSearchMoreButtonText(), SEARCH_MORE_BUTTON_TEXT_CLASS, width);\n            return { width, height: textHeight + BUTTON_MARGIN };\n        }\n        if (SearchFooter._canShowTips(stockSearchState)) {\n            const headerHeight = measureTextHeight(SearchFooter._getTipsHeader(stockSearchState), '', width);\n            const tipsHeight = StockSearchTips.measure(width).height;\n            return { width, height: 30 + headerHeight + tipsHeight };\n        }\n        return { width: 0, height: 0 };\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\nimport { translate } from 'app/js/managers/translationManager';\nimport SpectrumCircleLoader from 'app/js/components/spectrum/SpectrumCircleLoader';\n\n@observer\nexport default class Loading extends React.Component {\n\n    static height = 80;\n\n    get spinnerMessage() {\n        return translate('DL_STOCK_PANEL_SEARCHING_MESSAGE');\n    }\n\n    render() {\n        return (\n            <div className=\"panel-stock-message-container\" data-test-id=\"is-loading\">\n                <div className=\"stock-loading-spinner\"><SpectrumCircleLoader size=\"large\" indeterminate /></div>\n                <div className=\"panel-stock-loading-message\" data-test-id=\"loading-message\">{ this.spinnerMessage }</div>\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport SearchFooter from './SearchFooter';\nimport NoSearchResult from 'app/js/components/NoSearchResult';\nimport Loading from './Loading';\nimport { Collection } from 'react-virtualized';\nimport StockSearchState from 'app/js/state/StockSearchState';\nimport { observer } from 'mobx-react';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport { computed } from 'mobx';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport environment from 'app/js/environment';\n\n// Control the layout/offsetting of the whole virtual scroll view\nconst SCROLLBAR_WIDTH = 16;\nconst SEARCH_RESULTS_LEFT_MARGIN = 10;\n\n// Control the layout/offsetting of the individual search result items\nconst DESIRED_HEIGHT = 240; // The standard height of the thumbnails\nconst MIN_WIDTH_FOR_ICONS = 83; // Minimum width for both icons to layout horizontally\nconst MIN_PREMIUM_WIDTH = 55; // No thumbnails can be narrower then this\nconst MIN_VERTICAL_LAYOUT_HEIGHT = 60; // When license/save comp buttons are in vertical orientation, asset has to be at least this tall\n\nconst RESULTS_GUTTER = 4; // The gutter (vertical and horizontal between search results)\n\n// Control the layout/offsetting of the search UI control elements\nconst SEARCH_MORE_BUTTON_MARGIN = 5; // Space between the search button and the last search result\n\n/**\n * Lay out the assets for the give width of the row. Assets will be laid out to create a masonry\n * like grid.\n *\n * @param {Array} assets the array of assets to be laid out\n * @param {number} maxWidth the maximum width of the row\n * @param {number} leftOffset\n * @param {number} topOffset\n * @returns {Array}\n */\nfunction layoutSearchResults(assets, maxWidth, leftOffset = 0, topOffset = 0) {\n    if (!assets) {\n        return;\n    }\n\n    let assetLayoutData = [];\n    let rowAssets = [];\n    let rowWidth = 0;\n    let y = topOffset;\n\n    // For each asset we attempt to lay out a row. If a row is good (i.e. no assets that are too small) we continue to provisionally\n    // lay out each row. If we encounter an asset that would cause the layout to become bad, we move that asset to a new row and\n    // lay out the good row we had so far.\n    assets.forEach((asset, index) => {\n        const assetRowWidth = Math.ceil(Math.round(asset.thumbnail_width) * DESIRED_HEIGHT / Math.round(asset.thumbnail_height));\n        const { rowHeight, layoutData } = layoutRow(maxWidth, [ ...rowAssets, asset ], rowWidth + assetRowWidth, leftOffset, y);\n\n        if (!isGoodRowLayout(layoutData)) {\n            const { rowHeight, layoutData } = layoutRow(maxWidth, rowAssets, rowWidth, leftOffset, y);\n            assetLayoutData = assetLayoutData.concat(layoutData);\n\n            rowAssets = [ asset ];\n            rowWidth = assetRowWidth;\n            y += rowHeight + RESULTS_GUTTER;\n            return;\n        }\n        rowAssets.push(asset);\n\n        // If the total width now greater than the maxWidth (or we are processing the last element),\n        // then use the previously laid out row\n        if (index === assets.length - 1 || rowWidth + assetRowWidth > maxWidth) {\n            assetLayoutData = assetLayoutData.concat(layoutData);\n\n            rowAssets = [];\n            rowWidth = 0;\n            y += rowHeight + RESULTS_GUTTER;\n            return;\n        }\n\n        rowWidth += assetRowWidth; // This is the desired width for the element\n    });\n\n    return assetLayoutData;\n}\n\n/**\n * Lay out a single row to fit the give maxWidth\n *\n * @param {number} maxWidth the maximum width of the row\n * @param {Array} rowAssets the row assets for a specific row\n * @param {number} rowWidth the width of all the assets in the row\n * @param {number} leftOffset the left offset when the row should start (x origin)\n * @param {number} topOffset the current top offset (y origin)\n */\nfunction layoutRow(maxWidth, rowAssets, rowWidth, leftOffset, topOffset) {\n    const layoutData = [];\n    const contentWidth = maxWidth - (rowAssets.length - 1) * RESULTS_GUTTER;\n    const rowHeight = Math.floor(DESIRED_HEIGHT * contentWidth / rowWidth);\n    let x = leftOffset;\n    rowAssets.forEach((rowAsset) => {\n        const rowWidth = Math.floor(rowAsset.thumbnail_width * rowHeight / rowAsset.thumbnail_height);\n        layoutData.push({\n            x,\n            y: topOffset,\n            height: rowHeight,\n            width: rowWidth,\n            isVerticalLayout: rowWidth < MIN_WIDTH_FOR_ICONS\n        });\n        x = x + rowWidth + RESULTS_GUTTER;\n    });\n    return { rowHeight, layoutData };\n}\n\n/**\n * Determine if a layout is suitable for display. It needs to satisfy the following criteria:\n * 1. The width of any asset can't be smaller then MIN_PREMIUM_WIDTH to ensure that the premium label\n *    will always be visible and not cut off.\n * 2. If the asset can't be narrower then MIN_WIDTH_FOR_ICONS and shorter then MIN_VERTICAL_LAYOUT_HEIGHT to ensure that\n *    if the buy/license buttons are displayed there is sufficient space for them.\n * 3. If there is a single asset in the row, the layout is always \"good\". That is, a row has to fit at least\n *    one asset.\n * @param {Array} layoutData\n */\nfunction isGoodRowLayout(layoutData) {\n    if (layoutData.length === 1) {\n        return true;\n    }\n\n    return !layoutData.some(({ width, height }) => width < MIN_PREMIUM_WIDTH || (width < MIN_WIDTH_FOR_ICONS && height < MIN_VERTICAL_LAYOUT_HEIGHT));\n}\n\n@observer\nexport default class StockSearchResults extends React.Component {\n    get usableWidth() {\n        return this.props.width - SCROLLBAR_WIDTH;\n    }\n\n    _setCollection = (collection) => {\n        this._collection = collection;\n    }\n\n    componentWillReact() {\n        // This is needed because the react-virtualized collection is a pure component.\n        // It won't update when we change `this.items`, because it only does a shallow comparison of its props.\n        // We therefore need to tell it when we change the layout, so it will update.\n        this._collection && this._collection.recomputeCellSizesAndPositions();\n    }\n\n    @computed get items() {\n        const { stockSearchState } = this.props;\n        const layout = [];\n\n        if (stockSearchState.isLoading) {\n            const height = Math.max(Loading.height, this.props.height - RESULTS_GUTTER);\n            const loading = {\n                type: 'loading',\n                layout: { x: 0, y: RESULTS_GUTTER, width: this.usableWidth, height }\n            };\n            layout.push(loading);\n            return layout;\n        }\n\n        if (stockSearchState.searchResultsCount === 0) {\n            const noResults = {\n                type: 'noresults',\n                layout: { x: 0, y: 0, width: this.props.width, height: this.props.height }\n            };\n            layout.push(noResults);\n            return layout;\n        }\n\n        const { searchResults } = stockSearchState;\n        layoutSearchResults(searchResults, this.usableWidth - SEARCH_RESULTS_LEFT_MARGIN, SEARCH_RESULTS_LEFT_MARGIN, RESULTS_GUTTER)\n            .forEach((searchResultLayout, searchResultIndex) => {\n                layout.push({ type: 'searchResult', layout: searchResultLayout, data: searchResults[searchResultIndex] });\n            });\n\n        const lastSearchResult = layout[layout.length - 1];\n        const lastLayout = lastSearchResult ? lastSearchResult.layout : { x: 0, y: RESULTS_GUTTER, width: this.usableWidth, height: Math.max(Loading.height, this.props.height - RESULTS_GUTTER) };\n        const footerMetrics = SearchFooter.measure(this.usableWidth - SEARCH_RESULTS_LEFT_MARGIN, this.props.stockSearchState);\n        const footer = {\n            type: 'footer',\n            layout: {\n                x: SEARCH_RESULTS_LEFT_MARGIN,\n                y: lastLayout.y + lastLayout.height + SEARCH_MORE_BUTTON_MARGIN,\n                width: footerMetrics.width,\n                // Adding margin so we can overscroll and give the button a bit\n                // of breathing room on the bottom\n                height: footerMetrics.height + SEARCH_MORE_BUTTON_MARGIN * 5\n            }\n        };\n        layout.push(footer);\n        return layout;\n    }\n\n    cellSizeAndPositionGetter = ({ index }) => {\n        if (this.props.width === 0) {\n            return { x: 0, y: 0, width: 0, height: 0 };\n        }\n\n        return this.items[index].layout;\n    }\n\n    getItemView(type, data, layout) {\n        switch (type) {\n        case 'searchResult': {\n            const elementType = AdobeStockUtils.getElementType(data.media_type_id, data.content_type);\n            const StockSearchResultComponent = elementConfiguration.getStockComponent(elementType);\n            return (<StockSearchResultComponent stockSearchState={this.props.stockSearchState} asset={data} layout={layout}/>);\n        }\n\n        case 'footer':\n            return (<SearchFooter stockSearchState={this.props.stockSearchState} />);\n\n        case 'loading':\n            return (<Loading />);\n\n        case 'noresults':\n            return (<NoSearchResult />);\n\n        default:\n            break;\n        }\n    }\n\n    cellRenderer = ({ index, key, style }) => {\n        return (\n            <div key={key} style={style}>\n                { this.getItemView(this.items[index].type, this.items[index].data, this.items[index].layout) }\n            </div>\n        );\n    }\n\n    componentDidUpdate() {\n        // TODO: Remove once https://jira.corp.adobe.com/browse/UXP-10612 is fixed\n        if (environment.scrollBugFix) {\n            environment.scrollBugFix(this._collection, this.props.height);\n        }\n    }\n\n    render() {\n        return (\n            <div data-test-id=\"results\">\n                <Collection\n                    cellCount={this.items.length}\n                    cellRenderer={this.cellRenderer}\n                    cellSizeAndPositionGetter={this.cellSizeAndPositionGetter}\n                    ref={this._setCollection}\n                    width={this.props.width}\n                    height={this.props.height}\n                    className=\"panel-stock-search-result-virtual-scroll\"\n                />\n            </div>\n        );\n    }\n\n    static propTypes = {\n        width: PropTypes.number.isRequired,\n        height: PropTypes.number.isRequired,\n        stockSearchState: PropTypes.instanceOf(StockSearchState).isRequired,\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n// Results of the Stock Search\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport environment from 'app/js/environment';\nimport { translate } from 'app/js/managers/translationManager';\nimport StockSearchResults from './StockSearchResults';\nimport viewState from 'app/js/state/viewState';\nimport StockSearchState from 'app/js/state/StockSearchState';\nimport HTMLText from 'app/js/components/HTMLText';\nimport { AutoSizer } from 'react-virtualized';\nimport Icon from 'app/js/components/Icon';\n\nconst Offline = () => (\n    <div className=\"panel-dl-stock-error\" data-test-id=\"no-connection\">\n        <div className=\"panel-dl-stock-no-connection-icon\"><Icon id=\"CreativeCloud\" height={ 46 }/></div>\n        <HTMLText className=\"panel-dl-stock-message\" html={ translate('DL_STOCK_PANEL_NO_CONNECTION_MESSAGE') } />\n    </div>\n);\n\nconst Error = () => (\n    <div className=\"panel-dl-stock-error\" data-test-id=\"search-error\">\n        <div className=\"panel-dl-stock-message\">{ translate('DL_STOCK_PANEL_SEARCH_ERROR') }</div>\n    </div>\n);\n\n@observer\nexport default class StockSearchView extends React.Component {\n\n    static propTypes = {\n        stockSearchState: PropTypes.instanceOf(StockSearchState),\n    };\n\n    get stockSearchState() {\n        return this.props.stockSearchState || viewState.stockSearchState;\n    }\n\n    _getRenderComponent() {\n        const {\n            searchResultsCount,\n            isLoading,\n            hasSearchFailed,\n            isOnLine,\n        } = this.stockSearchState;\n\n        if (!isOnLine) {\n            return <Offline />;\n        }\n\n        if (isLoading) {\n            return this._getSearchResults();\n        }\n\n        if (hasSearchFailed) {\n            return <Error />;\n        }\n\n        if (searchResultsCount === 0) {\n            return this._getSearchResults();\n        }\n\n        return this._getSearchResults();\n    }\n\n    _getSearchResults() {\n        // The AutoSizer doesn't work in UXP, so we need the environment to be able to override it.\n        const AutoSizerComponent = environment.AutoSizer || AutoSizer;\n        return (\n            <AutoSizerComponent>\n                {({ width, height }) => {\n                    // To accommodate testing this view and its subview we provide some default\n                    // values for the width and height. Otherwise JSDOM will cause the width/height\n                    // to render as 0,0 and thus the contained Collection will not render anything.\n                    // In production code this is a no-op, since real values will be passed in =.\n                    width = width || 300;\n                    height = height || 600;\n                    return (\n                        <StockSearchResults\n                            stockSearchState={this.stockSearchState}\n                            width={width}\n                            height={height}\n                        />);\n                }\n                }\n            </AutoSizerComponent>\n        );\n    }\n\n    render() {\n        return (\n            <div data-test-id=\"stock-search\" className=\"panel-contents\">\n                { this._getRenderComponent() }\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\nimport { computed } from 'mobx';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport { translate } from 'app/js/managers/translationManager';\nimport LibraryListItem from 'app/js/components/LibraryListItem';\nimport DiscoverLibrariesMessage from 'app/js/components/DiscoverLibrariesMessage';\nimport configuration from 'app/js/config/configuration';\nimport metrics from 'app/js/interface/metrics';\nimport EmptyFilterLibraryView from 'app/js/components/EmptyFilterLibraryView';\nimport { getFilteredLibraries } from 'app/js/utils/libraryUtils';\nimport { addElementsFromDropEvent } from 'app/js/utils/addElementUtils';\nimport environment from 'app/js/environment';\nimport featureFlags from 'app/js/config/featureFlags';\nimport SearchResultHeader from 'app/js/components/SearchResultHeader';\nimport ProjectsBanner from 'app/js/components/ProjectsBanner';\nimport { shouldShowProjectsBannerOnboarding } from '../utils/onboardingUtils';\n\n@observer\nexport default class PanelRootView extends React.Component {\n    static contextType = LibrariesContext;\n\n    componentDidMount() {\n        metrics.reportEvent('Navigation', 'Root View', 'render', 'root-view', { event: { count: this.activeLibraries.length } });\n    }\n\n    @computed get activeLibraries() {\n        // All the active libraries.\n        return getFilteredLibraries('active', this.context.viewState.librariesInViewOrder);\n    }\n\n    @computed get brandLibraries() {\n        // All the active brand libraries.\n        return getFilteredLibraries('brand', this.activeLibraries);\n    }\n\n    get brandsEnabled() {\n        return featureFlags.get('brandFeatureEnabled');\n    }\n\n    @computed get traditionalLibraries() {\n        // All the active libraries that are not branded, or all libraries in apps that don't make the distinction.\n        const filter = this.brandsEnabled ? 'notBrand' : 'all';\n        return getFilteredLibraries(filter, this.activeLibraries);\n    }\n\n    _navigateToLibrary = library => {\n        environment.navigateToLibrary(library);\n    }\n\n    getLibraryItem = (library, isRecent = false) => {\n        return <LibraryListItem library={ library } key={ library.id } isRecent={ isRecent } onClick={ this._navigateToLibrary } showContextMenuButton={ configuration.currentProduct.config.showLibraryListItemContextMenuButton?.() }\n        />;\n    }\n\n    @computed get recentLibrariesView() {\n        if (configuration.currentProduct.config.disableRecentLibrariesView) { return; }\n        // No point in showing a \"recent\" section if the user only has a few libraries.\n        if (this.activeLibraries.length <= configuration.RECENTS_LIST_LIBRARY_MIN) { return; }\n        return (\n            <>\n                <div data-test-id=\"root-view-recents-header\" className=\"libraries-section-header\">{ translate('DL_SELECT_LIBRARY_LIST_HEADER_RECENT') }</div>\n                <div data-test-id=\"root-view-recent-libraries\" className=\"root-view-recent-libraries\">\n                    { this.context.libraryManager.recentLibraries.map(library => this.getLibraryItem(library, true)) }\n                </div>\n            </>\n        );\n    }\n\n    @computed get brandLibrariesView() {\n        if (!this.brandsEnabled || !this.brandLibraries.length) { return; }\n        return (\n            <>\n                <div data-test-id=\"root-view-brand-libraries-header\" className=\"libraries-section-header\">\n                    { translate('DL_BRAND_LIBRARIES') }\n                </div>\n                <div data-test-id=\"root-view-brand-libraries\">\n                    {this.brandLibraries.map(library => this.getLibraryItem(library, false)) }\n                </div>\n            </>\n        );\n    }\n\n    @computed get traditionalLibrariesView() {\n        // All libraries except brand libraries, which are rendered on a separate section.\n        return (\n            <div data-test-id=\"root-view-all-libraries\">\n                { this.traditionalLibraries.map(library => this.getLibraryItem(library, false)) }\n            </div>\n        );\n    }\n\n    @computed get libraryList() {\n        const librariesSections = [];\n        // Render any additional library sections.\n        if (this.recentLibrariesView) { librariesSections.push(this.recentLibrariesView); }\n        if (this.brandLibrariesView) { librariesSections.push(this.brandLibrariesView); }\n\n        const showLibrariesHeader = (this.brandsEnabled || !!librariesSections.length) && !!this.traditionalLibraries.length;\n\n        return <>\n            { librariesSections }\n            { showLibrariesHeader && (\n                <div data-test-id=\"root-view-all-libraries-header\" className=\"libraries-section-header\">\n                    { translate(configuration.currentProduct.config.allLibrariesSectionTitle || 'DL_SELECT_LIBRARY_LIST_HEADER_ALL') }\n                </div>\n            ) }\n            { this.traditionalLibrariesView }\n        </>;\n    }\n\n    get discoverLibrariesMessage() {\n        // For restricted access users, do not display links to CCD\n        if (this.context.libraryManager.isRestrictedAccount) {\n            return;\n        }\n\n        // By default, show discover messages at the bottom of root view, unless the app specifies otherwise.\n        if (configuration.currentProduct.showDiscoverMessageInRootView) {\n            if (!configuration.currentProduct.showDiscoverMessageInRootView(this.activeLibraries.length)) {\n                return;\n            }\n        }\n\n        return <DiscoverLibrariesMessage />;\n    }\n\n    get projectsBanner() {\n        if (this.hasDisplayableLibraries && configuration.currentProduct.config?.hasProjectsBanner?.()\n            && this.context.libraryManager.projects?.length > 0 && shouldShowProjectsBannerOnboarding()) {\n            return <ProjectsBanner rootView={true} />;\n        }\n    }\n\n    get hasDisplayableLibraries() {\n        return this.traditionalLibraries.length || (this.brandsEnabled && this.brandLibraries.length);\n    }\n\n    handleDrop = dropEvent => {\n        addElementsFromDropEvent(null, dropEvent);\n    }\n\n    get emptyLibraryNameSearchView() {\n        const header = this.brandsEnabled ? 'DL_LIBRARY_AND_BRAND_EMPTY_VIEW_HEADER' : 'DL_TEAM_LIBRARY_EMPTY_VIEW_HEADER';\n        const subtitle = this.brandsEnabled ? 'DL_LIBRARY_AND_BRAND_EMPTY_VIEW_SUBTITLE' : 'DL_TEAM_LIBRARY_EMPTY_VIEW_SUBTITLE';\n        if (this.context.viewState.isLibraryNameSearchType()) {\n            return <EmptyFilterLibraryView\n                view=\"personal\"\n                header={translate(header)}\n                subtitle={translate(subtitle)}\n                graphic=\"CCXEmptySearch\"\n            />;\n        }\n\n    }\n\n    @computed get libraryNameSearchResultsHeader() {\n        const numResults = this.traditionalLibraries.length + this.brandLibraries.length;\n        if (this.context.viewState.isLibraryNameSearchMode()) {\n            return <SearchResultHeader numResults={ numResults } />;\n        }\n    }\n\n    @computed get content() {\n        if (this.hasDisplayableLibraries) {\n            return (<>\n                { this.libraryNameSearchResultsHeader }\n                { this.libraryList }\n                { this.discoverLibrariesMessage }\n                { this.projectsBanner }\n            </>);\n        }\n        return this.emptyLibraryNameSearchView;\n    }\n\n    render() {\n        return <div className=\"panel-contents panel-root-view\" data-test-id=\"panel-root-view\" onDrop={ this.handleDrop }>\n            <div className=\"root-view-library-list\" data-test-id=\"root-view-library-list\">\n                { this.content }\n            </div>\n        </div>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport ElementModel from 'app/js/models/ElementModel';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport { observer } from 'mobx-react';\nimport { translate } from 'app/js/managers/translationManager';\nimport EditableName from './EditableName';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\n\n@observer\nexport default class EditableOneUpName extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        element: PropTypes.instanceOf(ElementModel),\n    };\n\n    get allowBlankName() {\n        return elementConfiguration.allowBlankName(this.props.element);\n    }\n\n    render() {\n        const { element } = this.props;\n\n        return (\n            <EditableName\n                item={ element }\n                allowBlankName={ this.allowBlankName }\n                placeholder={ translate('DL_EDIT_NAME_PLACEHOLDER') }\n                containerClassName={ 'oneup-element-name-container' }\n                inputClassName={ `oneup-element-name-input` }\n                textClassName={ `oneup-element-name` }\n                isReadOnly={ !this.context.viewState.isLibraryWritable(element.library) || element.disableRename }\n                isShowingEditIcon\n            >\n                { element.name }\n            </EditableName>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport ElementModel from 'app/js/models/ElementModel';\nimport { translate } from 'app/js/managers/translationManager';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport EditableOneUpName from 'app/js/components/editable-names/EditableOneUpName';\nimport EditableDescription from 'app/js/components/editable-names/EditableDescription';\nimport InfoPanelView from 'app/js/components/InfoPanelView';\nimport metrics from 'app/js/interface/metrics';\nimport configuration from 'app/js/config/configuration';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\n\n@observer\nexport default class OneUpView extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    componentDidMount = () => {\n        this.context.libraryManager.fetchLibraryCollaborations(this.element.library);\n        metrics.reportEvent('Navigation', 'Library Panel', 'render', 'element-1-up');\n    }\n\n    get element() {\n        return this.props.element;\n    }\n\n    static propTypes = {\n        element: PropTypes.instanceOf(ElementModel)\n    }\n\n    get elementType() {\n        return (elementConfiguration.getExtension(this.element) || translate(elementConfiguration.getTypeName(this.element.type, true))).toUpperCase();\n    }\n\n    get detailView() {\n        // Do not show the large-thumbnail if color theme, InfoPanelView will handle that.\n        if (this.element.type === configuration.COLOR_THEME_ELEMENT_TYPE) {\n            return;\n        }\n        const ElementView = elementConfiguration.getComponent(this.element.type);\n        return (\n            <div className=\"oneup-container oneup-detail-view-container\">\n                <div data-test-id=\"oneup-detail-view\" className=\"oneup-detail-view\">\n                    <ElementView\n                        element={ this.element }\n                        viewMode=\"thumbnail-large\"\n                    />\n                </div>\n            </div>\n        );\n    }\n\n    get elementNameAndType() {\n        return (\n            <div className=\"oneup-container oneup-element-name-type-container\">\n                <EditableOneUpName element={ this.element }/>\n                <span data-test-id=\"oneup-element-type\" className=\"oneup-element-type\">\n                    { this.elementType }\n                </span>\n            </div>\n        );\n    }\n\n    get infoPanel() {\n        return (\n            <div className=\"oneup-info-panel-container\">\n                <InfoPanelView element={ this.element } />\n            </div>\n        );\n    }\n\n    render() {\n        return (\n            <div className=\"panel-contents\" data-test-id=\"oneup-view\">\n                <div className=\"oneup-view-container\">\n                    { this.elementNameAndType }\n                    <EditableDescription element={ this.element } placeholder={ translate('DL_DESCRIPTION_PLACEHOLDER') } className=\"oneup-editable-description\" />\n                    { this.detailView }\n                    { this.infoPanel }\n                </div>\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport classNames from 'classnames';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport environment from 'app/js/environment';\nimport metrics from 'app/js/interface/metrics';\nimport ToastContainerView from 'app/js/components/ToastContainerView';\nimport DialogContainerView from 'app/js/components/DialogContainerView';\nimport HeaderView from 'app/js/components/panel-header/HeaderView';\nimport FooterView from 'app/js/components/panel-footer/FooterView';\nimport StockSearchView from 'app/js/components/stock/StockSearchView';\nimport LibraryView from 'app/js/components/LibraryView';\nimport NoLibrariesView from 'app/js/components/NoLibrariesView';\nimport PanelRootView from 'app/js/components/PanelRootView';\nimport { LibrariesProvider } from 'app/js/state/LibrariesContext';\nimport OneUpView from 'app/js/components/OneUpView';\nimport configuration from '../config/configuration';\nimport DebugHUD from 'app/js/components/debug/DebugHUD';\n// PanelView is the context root, so instead of using this.context, we can directly use the appState.\nimport appState from 'app/js/appState';\nimport themeManager from 'app/js/managers/themeManager';\n\n// The HTML lang attribute uses ISO 639-1 Language Codes\n// For chinese they have a special case.\nconst LANGUAGE_MAP = {\n    'zh-TW': 'zh-Hant',\n    'zh-CN': 'zh-Hans'\n};\nconst getISOLanguageCode = locale => LANGUAGE_MAP[locale] || locale.split('-')[0];\n\nconst preventDefault = event => event.preventDefault();\n\n/**\n * Top-level React component for the libraries panel - this contains the entire panel, including the header,\n * contents, and footer.\n */\n@observer\nexport default class PanelView extends React.Component {\n\n    // When we come online, try to sync and also send any analytics.\n    _onOnline = () => {\n        appState.panel.libraryManager.sync();\n        metrics.reportStoredOfflineEvents();\n    }\n\n    // When we go offline, try to sync, so that we can change to a sync error.\n    _onOffline = () => appState.panel.libraryManager.sync();\n\n    componentDidMount() {\n\n        // The panel CSS expects certain classes to be installed on the body, so we do that here:\n        const locale = environment.getLocale();\n        const { reactSpectrumTheme, appCode } = themeManager;\n        const legacySpectrumEnabled = configuration.currentProduct.config.legacySpectrumEnabled;\n\n        document.body.className = classNames(\n            `locale_${locale}`,\n            `ccl-App--${appCode}`,\n            `ccl-Theme--${reactSpectrumTheme}`,\n            legacySpectrumEnabled && 'spectrum-enabled',\n            {\n                windows: environment.isWindowsOS(),\n            }\n        );\n        document.body.lang = getISOLanguageCode(locale);\n\n        window.addEventListener('online', this._onOnline);\n        window.addEventListener('offline', this._onOffline);\n    }\n\n    componentWillUnmount() {\n        window.removeEventListener('online', this._onOnline);\n        window.removeEventListener('offline', this._onOffline);\n    }\n\n    @computed get currentLibrary() {\n        const library = appState.panel.libraryManager.currentLibrary;\n        // Note: Need to send in a timeout, because metrics.reportEvent also modifies observables.\n        if (library) {\n            const elementCount = library && library.elements.length;\n            const eventProperties = elementCount ? { event: { count: elementCount } } : null;\n            const isDocumentLibrary = library === appState.panel.libraryManager.documentAssetsContainer;\n            setTimeout(() => metrics.reportEvent('Navigation', isDocumentLibrary ? 'Document Assets' : 'Library Panel', 'render', isDocumentLibrary ? 'doc-assets' : 'load-library', eventProperties, library));\n        }\n        return library;\n    }\n\n    get contents() {\n        if (appState.panel.viewState.isStockSearchMode()) {\n            return <StockSearchView/>;\n        }\n\n        if (appState.panel.viewState.isOneUpMode()) {\n            return <OneUpView element={appState.panel.viewState.getState().modeParams.element}/>;\n        }\n\n        if (this.currentLibrary || appState.panel.viewState.isLibrariesSearchMode()) {\n            return <LibraryView/>;\n        }\n\n        if (!appState.panel.libraryManager.libraries.length) {\n            return <NoLibrariesView className=\"panel-nolibs-container\"/>;\n        }\n\n        return <PanelRootView />;\n    }\n\n    get footerView() {\n        if (configuration.currentProduct.config.disablePanelFooter) {\n            return;\n        }\n        if (appState.panel.viewState.isRootView() && configuration.currentProduct.config.hideFooterInRootView) {\n            return;\n        }\n        return <FooterView/>;\n    }\n\n    @computed get panelView() {\n        // Some environments like Office need to be able to take over the entire panel, e.g. for displaying a login flow.\n        const CustomPanelView = environment.getCustomPanelView();\n        if (CustomPanelView) {\n            return <CustomPanelView />;\n        }\n        return <React.Fragment>\n            <HeaderView/>\n            <div className=\"panel-contents-wrapper\">\n                { this.contents }\n                <ToastContainerView/>\n            </div>\n            { this.footerView }\n        </React.Fragment>;\n    }\n\n    @computed get panel() {\n        if (!this.currentLibrary && configuration.currentProduct.config.errorStateComponent) {\n            // AH only utilizes the panel when a library is available for the one-up view. If not, UAB will display the empty libraries view. Consequently, AH will indicate an error state if there is no library for the one-up.\n            return configuration.currentProduct.config.errorStateComponent;\n        }\n        return <React.Fragment>\n            { this.panelView }\n            <DialogContainerView/>\n        </React.Fragment>;\n    }\n\n    get topLevelHeader() {\n        // Some environments like Office and XD have a custom top-level header, for displaying the panel flyout menu.\n        const CustomHeaderView = environment.getCustomHeaderView();\n        if (CustomHeaderView) {\n            return <CustomHeaderView />;\n        }\n    }\n\n    // If there was an error syncing, we try to sync again when the user interacts with the panel\n    onClick = () => appState.panel.libraryManager.sync(true, true);\n\n    render() {\n        // Note: We disable dragover and drop events on the panel, otherwise you can drag a file onto the panel, and it will display it in the panel.\n        return (\n            <>\n                <div data-test-id=\"panel-container\" className=\"panel-container\" onClick={ this.onClick } onDragOverCapture={ preventDefault } onDropCapture={ preventDefault } >\n                    <LibrariesProvider value={ appState.panel } style={{ fontFamily: 'inherit', height: '100%', width: '100%', position: 'absolute', display: 'flex', flexDirection: 'column' }}>\n                        { !appState.panel.viewState.isRootView() && configuration.currentProduct.getPaywallBanner?.(configuration.PAYWALL_BANNER_TYPES.LIBRARY_PANEL) }\n                        { this.topLevelHeader }\n                        { this.panel }\n                        <DebugHUD />\n                    </LibrariesProvider>\n                </div>\n            </>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { translate } from 'app/js/managers/translationManager';\n\n@observer\nexport default class ProgressBar extends React.Component {\n    static defaultProps = {\n        progress: 0,\n        title: 'Progress',\n        showMetaData: true\n    };\n\n    static propTypes = {\n        progress: PropTypes.number,\n        title: PropTypes.string,\n        showMetaData: PropTypes.bool\n    };\n\n    get title() {\n        return <div data-test-id=\"progressTitle\" className=\"panel-progressTitle\">{ this.props.title }</div>;\n    }\n\n    get metadata() {\n        if (!this.props.showMetaData) {\n            return;\n        }\n        return <div className=\"panel-progressMetadata\">\n            { this.title }\n            <div data-test-id=\"progressPercent\" className=\"panel-progressPercent\">{ translate('DL_PERCENTAGE', { percent: this.props.progress }) }</div>\n        </div>;\n    }\n\n    get progressBar() {\n        return <div className=\"panel-progressContainer\">\n            <div data-test-id=\"progressBar\" className=\"panel-progressBar\" style={ { width: `${ this.props.progress }%` } }></div>\n        </div>;\n    }\n\n    render() {\n        return (\n            <div data-test-id=\"progress\" className=\"panel-progress\">\n                { this.metadata }\n                { this.progressBar }\n            </div>\n        );\n    }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"gradientContainer\":\"k5a\",\"projectLetter\":\"ViL\"};","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { getCSSForGradient } from 'app/js/utils/colorUtils';\nimport { Team } from '@ccx-public/shared-asset-model-js';\nimport styles from './index.scss';\nimport { computed } from 'mobx';\nimport emojiRegex from 'emoji-regex';\n\nexport default class ProjectGradient extends React.Component {\n\n    static propTypes = {\n        project: PropTypes.instanceOf(Team)\n    };\n\n    @computed\n    get style() {\n        if (!this.props.project?.gradientData) { return {}; }\n        return getCSSForGradient(this.props.project.gradientData);\n    }\n\n    get emojiRegEx() {\n        return emojiRegex();\n    }\n\n    get gradientLetterOrEmoji() {\n        const projectName = this.props.project?.name;\n        const potentialEmoji = projectName ? projectName.match(this.emojiRegEx) : null;\n\n        const shouldShowEmoji = projectName && potentialEmoji && projectName.startsWith(potentialEmoji);\n\n        return (\n            <span className={styles.projectLetter} data-test-id=\"project-gradient-letter\">\n                {shouldShowEmoji ? potentialEmoji : projectName?.substring(0,1)}\n            </span>\n        );\n    }\n\n    get loading() {\n        return (\n            <div className=\"ghost-loading-wrapper\">\n                <div data-test-id=\"ghost-loading\" className=\"ghost-loading\"/>\n            </div>\n        );\n    }\n\n    get content() {\n        if (!this.props.project?.gradientData) {\n            return this.loading;\n        }\n        return this.gradientLetterOrEmoji;\n    }\n\n    render() {\n        return <div data-test-id=\"project-gradient-library\" style={this.style} className={styles.gradientContainer}>\n            {this.content}\n        </div>;\n    }\n}\n","export default () => {\n\t// https://mths.be/emoji\n\treturn /[#*0-9]\\uFE0F?\\u20E3|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26AA\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C8\\u26CF\\u26D1\\u26E9\\u26F0-\\u26F5\\u26F7\\u26F8\\u26FA\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B55\\u3030\\u303D\\u3297\\u3299]\\uFE0F?|[\\u261D\\u270C\\u270D](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\u270A\\u270B](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u2693\\u26A1\\u26AB\\u26C5\\u26CE\\u26D4\\u26EA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2795-\\u2797\\u27B0\\u27BF\\u2B50]|\\u26D3\\uFE0F?(?:\\u200D\\uD83D\\uDCA5)?|\\u26F9(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\u2764\\uFE0F?(?:\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79))?|\\uD83C(?:[\\uDC04\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]\\uFE0F?|[\\uDF85\\uDFC2\\uDFC7](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDFC4\\uDFCA](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDFCB\\uDFCC](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF43\\uDF45-\\uDF4A\\uDF4C-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uDDE6\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF]|\\uDDE7\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF]|\\uDDE8\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF]|\\uDDE9\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF]|\\uDDEA\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA]|\\uDDEB\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7]|\\uDDEC\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE]|\\uDDED\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA]|\\uDDEE\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9]|\\uDDEF\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5]|\\uDDF0\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF]|\\uDDF1\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE]|\\uDDF2\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF]|\\uDDF3\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF]|\\uDDF4\\uD83C\\uDDF2|\\uDDF5\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE]|\\uDDF6\\uD83C\\uDDE6|\\uDDF7\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC]|\\uDDF8\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF]|\\uDDF9\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF]|\\uDDFA\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF]|\\uDDFB\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA]|\\uDDFC\\uD83C[\\uDDEB\\uDDF8]|\\uDDFD\\uD83C\\uDDF0|\\uDDFE\\uD83C[\\uDDEA\\uDDF9]|\\uDDFF\\uD83C[\\uDDE6\\uDDF2\\uDDFC]|\\uDF44(?:\\u200D\\uD83D\\uDFEB)?|\\uDF4B(?:\\u200D\\uD83D\\uDFE9)?|\\uDFC3(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?|\\uDFF3\\uFE0F?(?:\\u200D(?:\\u26A7\\uFE0F?|\\uD83C\\uDF08))?|\\uDFF4(?:\\u200D\\u2620\\uFE0F?|\\uDB40\\uDC67\\uDB40\\uDC62\\uDB40(?:\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F)?)|\\uD83D(?:[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3]\\uFE0F?|[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4\\uDEB5](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD74\\uDD90](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC25\\uDC27-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE41\\uDE43\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEDC-\\uDEDF\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB\\uDFF0]|\\uDC08(?:\\u200D\\u2B1B)?|\\uDC15(?:\\u200D\\uD83E\\uDDBA)?|\\uDC26(?:\\u200D(?:\\u2B1B|\\uD83D\\uDD25))?|\\uDC3B(?:\\u200D\\u2744\\uFE0F?)?|\\uDC41\\uFE0F?(?:\\u200D\\uD83D\\uDDE8\\uFE0F?)?|\\uDC68(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDC68\\uDC69]\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC69(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?[\\uDC68\\uDC69]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?|\\uDC69\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?))|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC6F(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDD75(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDE2E(?:\\u200D\\uD83D\\uDCA8)?|\\uDE35(?:\\u200D\\uD83D\\uDCAB)?|\\uDE36(?:\\u200D\\uD83C\\uDF2B\\uFE0F?)?|\\uDE42(?:\\u200D[\\u2194\\u2195]\\uFE0F?)?|\\uDEB6(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?)|\\uD83E(?:[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5\\uDEC3-\\uDEC5\\uDEF0\\uDEF2-\\uDEF8](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD\\uDDCF\\uDDD4\\uDDD6-\\uDDDD](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDDDE\\uDDDF](?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCC\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE7C\\uDE80-\\uDE88\\uDE90-\\uDEBD\\uDEBF-\\uDEC2\\uDECE-\\uDEDB\\uDEE0-\\uDEE8]|\\uDD3C(?:\\u200D[\\u2640\\u2642]\\uFE0F?|\\uD83C[\\uDFFB-\\uDFFF])?|\\uDDCE(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?|\\uDDD1(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1|\\uDDD1\\u200D\\uD83E\\uDDD2(?:\\u200D\\uD83E\\uDDD2)?|\\uDDD2(?:\\u200D\\uD83E\\uDDD2)?))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?))?|\\uDEF1(?:\\uD83C(?:\\uDFFB(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFC-\\uDFFF])?|\\uDFFC(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])?|\\uDFFD(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])?|\\uDFFE(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])?|\\uDFFF(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFE])?))?)/g;\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"projectsBannerWrapper\":\"uaI\",\"bannerClose\":\"XKj\"};","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { PropTypes } from 'prop-types';\nimport { translate } from 'app/js/managers/translationManager';\nimport HTMLText from '../HTMLText';\nimport configuration from '../../config/configuration';\nimport { openBusinessStorageURL } from '../../utils/linkUtils';\nimport styles from './index.scss';\nimport Icon from 'app/js/components/Icon';\nimport { markOnboardingViewed } from 'app/js/utils/onboardingUtils';\nimport { observable } from 'mobx';\nimport { observer } from 'mobx-react';\n\n@observer\nexport default class ProjectsBanner extends React.Component {\n    static defaultProps = {\n        rootView: false,\n    }\n\n    static propTypes = {\n        rootView: PropTypes.bool,\n    }\n\n    @observable hideBanner = false;\n\n    get text() {\n        if (this.props.rootView) {\n            return translate('PROJECTS_BANNER_ROOT_VIEW'); // links to Projects tab\n        }\n\n        return configuration.currentProduct.isExpandedBrandsView?.() ? translate('PROJECTS_BANNER_BRAND_VIEW') : translate('PROJECTS_BANNER_LIBRARY_VIEW'); // Both have links to learn more helpx\n    }\n\n    onLearnClick() {\n        //should go to https://helpx.adobe.com/enterprise/using/libraries-in-business-storage.html\n        openBusinessStorageURL();\n    }\n\n    onProjectsClick() {\n        // move to projects tab in editor, blocked by 'CCEX-87982'\n    }\n\n    handleClose = () => {\n        this.hideBanner = true;\n        markOnboardingViewed('projectsBanner');\n    }\n\n    render() {\n        if (this.props.rootView) {\n            return (\n                <div className={styles.projectsBannerWrapper}>\n                    <HTMLText data-test-id=\"projects-banner-text-rootview\" onClick={this.onProjectsClick} html={ translate(this.text) } />\n                </div>\n            );\n        } else if (this.hideBanner) {\n            return null;\n        } else {\n            return (\n                <div className={styles.projectsBannerWrapper}>\n                    <HTMLText data-test-id=\"projects-banner-text-expanded\" onClick={this.onLearnClick} html={ translate(this.text) } />\n                    <div className={styles.bannerClose} data-test-id=\"banner-close\" onClick={this.handleClose}><Icon id=\"Close\" height={16} width={16} /></div>\n                </div>\n            );\n        }\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport viewState from 'app/js/state/viewState';\nimport { translate } from 'app/js/managers/translationManager';\nimport { measureTextHeight } from 'app/js/utils/DOMUtils';\nimport environment from 'app/js/environment';\nimport configuration from 'app/js/config/configuration';\n\n/**\n * Search Result Header\n * Displays the number of search results (in a header on top of the results in the virtual scroll).\n * Note: If there are no search results, NoSearchResult view is shown instead.\n */\n\n@observer\nexport default class SearchResultHeader extends React.Component {\n    static propTypes = {\n        numResults: PropTypes.number.isRequired\n    };\n\n    /**\n     * Generate the result header message based off the number of results and whether searching current or all libraries.\n     * @param {number} numResults\n     * @returns {string} message\n     */\n    static getMessage(numResults) {\n        let message;\n\n        if (viewState.isLibrariesSearchMode()) {\n            // Search results for all libraries\n            if (viewState.searchState.hasSelectedLibraryFilters) {\n                message = numResults === 1 ? 'DL_SEARCH_RESULT_FILTERED_LIBRARIES' : 'DL_SEARCH_RESULTS_FILTERED_LIBRARIES';\n                message = translate(message, { count: numResults });\n            } else {\n                message = numResults === 1 ? 'DL_SEARCH_RESULT_LIBRARIES' : 'DL_SEARCH_RESULTS_LIBRARIES';\n                message = translate(message, { count: numResults });\n            }\n        } else if (viewState.isStockSearchMode()) {\n            // Search results for Stock (only shown when there are zero results)\n            message = translate('DL_SEARCH_RESULTS_STOCK');\n        } else if (viewState.isDocumentSearchMode() || viewState.isDocumentSearchType()) {\n            message = numResults === 1 ? 'DL_SEARCH_RESULT_DOCUMENT' : 'DL_SEARCH_RESULTS_DOCUMENT';\n            message = translate(message, { count: numResults });\n        } else {\n            // Search results for current library\n            message = numResults === 1 ? 'DL_SEARCH_RESULT_LIBRARY' : 'DL_SEARCH_RESULTS_LIBRARY';\n            message = translate(message, { query: viewState.getSearchText(), count: numResults });\n        }\n\n        return message;\n    }\n\n    /**\n     * Measure the dynamic height of the Search Result Header, which can vary due to the library name.\n     * Virtual scroll needs to know the height before the header is actually rendered.\n     * @param {number} numResults\n     * @param {number} width in px\n     * @returns {number} height in px\n     */\n    static getHeight(numResults, width) {\n        return configuration.currentProduct.config.useStaticSearchHeaderHeight ? 50 : measureTextHeight(this.getMessage(numResults), 'panel-search-result-header', width);\n    }\n\n    render() {\n        const message = SearchResultHeader.getMessage(this.props.numResults);\n        // TODO: Consider whether the className conflicts with the inline style applied to this virtual scroll item.\n        const useUppercase = !configuration.currentProduct.config.disableUppercaseSearchResultsHeader;\n        return <div className=\"panel-search-result-header\" data-test-id=\"search-result-header\">{ useUppercase ? message.toLocaleUpperCase(environment.getLocale()) : message }</div>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\n\n@observer\nexport default class ToastContainerView extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    render() {\n        return this.context.toastManager.toast || null;\n    }\n}\n","import * as React from 'react';\nexport var ManagerReferenceNodeContext = React.createContext();\nexport var ManagerReferenceNodeSetterContext = React.createContext();\nexport function Manager(_ref) {\n  var children = _ref.children;\n\n  var _React$useState = React.useState(null),\n      referenceNode = _React$useState[0],\n      setReferenceNode = _React$useState[1];\n\n  var hasUnmounted = React.useRef(false);\n  React.useEffect(function () {\n    return function () {\n      hasUnmounted.current = true;\n    };\n  }, []);\n  var handleSetReferenceNode = React.useCallback(function (node) {\n    if (!hasUnmounted.current) {\n      setReferenceNode(node);\n    }\n  }, []);\n  return /*#__PURE__*/React.createElement(ManagerReferenceNodeContext.Provider, {\n    value: referenceNode\n  }, /*#__PURE__*/React.createElement(ManagerReferenceNodeSetterContext.Provider, {\n    value: handleSetReferenceNode\n  }, children));\n}","import * as React from 'react';\n\n/**\n * Takes an argument and if it's an array, returns the first item in the array,\n * otherwise returns the argument. Used for Preact compatibility.\n */\nexport var unwrapArray = function unwrapArray(arg) {\n  return Array.isArray(arg) ? arg[0] : arg;\n};\n/**\n * Takes a maybe-undefined function and arbitrary args and invokes the function\n * only if it is defined.\n */\n\nexport var safeInvoke = function safeInvoke(fn) {\n  if (typeof fn === 'function') {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    return fn.apply(void 0, args);\n  }\n};\n/**\n * Sets a ref using either a ref callback or a ref object\n */\n\nexport var setRef = function setRef(ref, node) {\n  // if its a function call it\n  if (typeof ref === 'function') {\n    return safeInvoke(ref, node);\n  } // otherwise we should treat it as a ref object\n  else if (ref != null) {\n      ref.current = node;\n    }\n};\n/**\n * Simple ponyfill for Object.fromEntries\n */\n\nexport var fromEntries = function fromEntries(entries) {\n  return entries.reduce(function (acc, _ref) {\n    var key = _ref[0],\n        value = _ref[1];\n    acc[key] = value;\n    return acc;\n  }, {});\n};\n/**\n * Small wrapper around `useLayoutEffect` to get rid of the warning on SSR envs\n */\n\nexport var useIsomorphicLayoutEffect = typeof window !== 'undefined' && window.document && window.document.createElement ? React.useLayoutEffect : React.useEffect;","// import { isHTMLElement } from './instanceOf';\nexport default function getBoundingClientRect(element, // eslint-disable-next-line unused-imports/no-unused-vars\nincludeScale) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n\n  var rect = element.getBoundingClientRect();\n  var scaleX = 1;\n  var scaleY = 1; // FIXME:\n  // `offsetWidth` returns an integer while `getBoundingClientRect`\n  // returns a float. This results in `scaleX` or `scaleY` being\n  // non-1 when it should be for elements that aren't a full pixel in\n  // width or height.\n  // if (isHTMLElement(element) && includeScale) {\n  //   const offsetHeight = element.offsetHeight;\n  //   const offsetWidth = element.offsetWidth;\n  //   // Do not attempt to divide by 0, otherwise we get `Infinity` as scale\n  //   // Fallback to 1 in case both values are `0`\n  //   if (offsetWidth > 0) {\n  //     scaleX = rect.width / offsetWidth || 1;\n  //   }\n  //   if (offsetHeight > 0) {\n  //     scaleY = rect.height / offsetHeight || 1;\n  //   }\n  // }\n\n  return {\n    width: rect.width / scaleX,\n    height: rect.height / scaleY,\n    top: rect.top / scaleY,\n    right: rect.right / scaleX,\n    bottom: rect.bottom / scaleY,\n    left: rect.left / scaleX,\n    x: rect.left / scaleX,\n    y: rect.top / scaleY\n  };\n}","export default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    var ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n  var win = getWindow(node);\n  var scrollLeft = win.pageXOffset;\n  var scrollTop = win.pageYOffset;\n  return {\n    scrollLeft: scrollLeft,\n    scrollTop: scrollTop\n  };\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n  var OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n  var OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n\n  var OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","export default function getNodeName(element) {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n  element.document) || window.document).documentElement;\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  var _getComputedStyle = getComputedStyle(element),\n      overflow = _getComputedStyle.overflow,\n      overflowX = _getComputedStyle.overflowX,\n      overflowY = _getComputedStyle.overflowY;\n\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n\nfunction isElementScaled(element) {\n  var rect = element.getBoundingClientRect();\n  var scaleX = rect.width / element.offsetWidth || 1;\n  var scaleY = rect.height / element.offsetHeight || 1;\n  return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n\n  var isOffsetParentAnElement = isHTMLElement(offsetParent);\n  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  var documentElement = getDocumentElement(offsetParent);\n  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled);\n  var scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  var offsets = {\n    x: 0,\n    y: 0\n  };\n\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n    isScrollParent(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}","export default function getHTMLElementScroll(element) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\n  };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n  var width = element.offsetWidth;\n  var height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width: width,\n    height: height\n  };\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || ( // DOM Element detected\n    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n\n  );\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n  var _element$ownerDocumen;\n\n  if (list === void 0) {\n    list = [];\n  }\n\n  var scrollParent = getScrollParent(element);\n  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n  var win = getWindow(scrollParent);\n  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n  var updatedList = list.concat(target);\n  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n  updatedList.concat(listScrollParents(getParentNode(target)));\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\n\nfunction getTrueOffsetParent(element) {\n  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n  getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n\n  return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n  var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n  var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    var elementCss = getComputedStyle(element);\n\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  var currentNode = getParentNode(element);\n\n  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n  var window = getWindow(element);\n  var offsetParent = getTrueOffsetParent(element);\n\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n  return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n  return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n  var map = new Map();\n  var visited = new Set();\n  var result = [];\n  modifiers.forEach(function (modifier) {\n    map.set(modifier.name, modifier);\n  }); // On visiting object, check for its dependencies and visit them recursively\n\n  function sort(modifier) {\n    visited.add(modifier.name);\n    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n    requires.forEach(function (dep) {\n      if (!visited.has(dep)) {\n        var depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n    result.push(modifier);\n  }\n\n  modifiers.forEach(function (modifier) {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n  return result;\n}\n\nexport default function orderModifiers(modifiers) {\n  // order based on dependencies\n  var orderedModifiers = order(modifiers); // order based on phase\n\n  return modifierPhases.reduce(function (acc, phase) {\n    return acc.concat(orderedModifiers.filter(function (modifier) {\n      return modifier.phase === phase;\n    }));\n  }, []);\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute'\n};\n\nfunction areValidElements() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return !args.some(function (element) {\n    return !(element && typeof element.getBoundingClientRect === 'function');\n  });\n}\n\nexport function popperGenerator(generatorOptions) {\n  if (generatorOptions === void 0) {\n    generatorOptions = {};\n  }\n\n  var _generatorOptions = generatorOptions,\n      _generatorOptions$def = _generatorOptions.defaultModifiers,\n      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n      _generatorOptions$def2 = _generatorOptions.defaultOptions,\n      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n  return function createPopper(reference, popper, options) {\n    if (options === void 0) {\n      options = defaultOptions;\n    }\n\n    var state = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n      modifiersData: {},\n      elements: {\n        reference: reference,\n        popper: popper\n      },\n      attributes: {},\n      styles: {}\n    };\n    var effectCleanupFns = [];\n    var isDestroyed = false;\n    var instance = {\n      state: state,\n      setOptions: function setOptions(setOptionsAction) {\n        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n        cleanupModifierEffects();\n        state.options = Object.assign({}, defaultOptions, state.options, options);\n        state.scrollParents = {\n          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n          popper: listScrollParents(popper)\n        }; // Orders the modifiers based on their dependencies and `phase`\n        // properties\n\n        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n        state.orderedModifiers = orderedModifiers.filter(function (m) {\n          return m.enabled;\n        }); // Validate the provided modifiers so that the consumer will get warned\n        // if one of the modifiers is invalid for any reason\n\n        if (process.env.NODE_ENV !== \"production\") {\n          var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n            var name = _ref.name;\n            return name;\n          });\n          validateModifiers(modifiers);\n\n          if (getBasePlacement(state.options.placement) === auto) {\n            var flipModifier = state.orderedModifiers.find(function (_ref2) {\n              var name = _ref2.name;\n              return name === 'flip';\n            });\n\n            if (!flipModifier) {\n              console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n            }\n          }\n\n          var _getComputedStyle = getComputedStyle(popper),\n              marginTop = _getComputedStyle.marginTop,\n              marginRight = _getComputedStyle.marginRight,\n              marginBottom = _getComputedStyle.marginBottom,\n              marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n          // cause bugs with positioning, so we'll warn the consumer\n\n\n          if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n            return parseFloat(margin);\n          })) {\n            console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n          }\n        }\n\n        runModifierEffects();\n        return instance.update();\n      },\n      // Sync update – it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate: function forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        var _state$elements = state.elements,\n            reference = _state$elements.reference,\n            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n\n        if (!areValidElements(reference, popper)) {\n          if (process.env.NODE_ENV !== \"production\") {\n            console.error(INVALID_ELEMENT_ERROR);\n          }\n\n          return;\n        } // Store the reference and popper rects to be read by modifiers\n\n\n        state.rects = {\n          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n          popper: getLayoutRect(popper)\n        }; // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n\n        state.reset = false;\n        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n\n        state.orderedModifiers.forEach(function (modifier) {\n          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n        });\n        var __debug_loops__ = 0;\n\n        for (var index = 0; index < state.orderedModifiers.length; index++) {\n          if (process.env.NODE_ENV !== \"production\") {\n            __debug_loops__ += 1;\n\n            if (__debug_loops__ > 100) {\n              console.error(INFINITE_LOOP_ERROR);\n              break;\n            }\n          }\n\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          var _state$orderedModifie = state.orderedModifiers[index],\n              fn = _state$orderedModifie.fn,\n              _state$orderedModifie2 = _state$orderedModifie.options,\n              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n              name = _state$orderedModifie.name;\n\n          if (typeof fn === 'function') {\n            state = fn({\n              state: state,\n              options: _options,\n              name: name,\n              instance: instance\n            }) || state;\n          }\n        }\n      },\n      // Async and optimistically optimized update – it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce(function () {\n        return new Promise(function (resolve) {\n          instance.forceUpdate();\n          resolve(state);\n        });\n      }),\n      destroy: function destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      }\n    };\n\n    if (!areValidElements(reference, popper)) {\n      if (process.env.NODE_ENV !== \"production\") {\n        console.error(INVALID_ELEMENT_ERROR);\n      }\n\n      return instance;\n    }\n\n    instance.setOptions(options).then(function (state) {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    }); // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(function (_ref3) {\n        var name = _ref3.name,\n            _ref3$options = _ref3.options,\n            options = _ref3$options === void 0 ? {} : _ref3$options,\n            effect = _ref3.effect;\n\n        if (typeof effect === 'function') {\n          var cleanupFn = effect({\n            state: state,\n            name: name,\n            instance: instance,\n            options: options\n          });\n\n          var noopFn = function noopFn() {};\n\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach(function (fn) {\n        return fn();\n      });\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function debounce(fn) {\n  var pending;\n  return function () {\n    if (!pending) {\n      pending = new Promise(function (resolve) {\n        Promise.resolve().then(function () {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}","export default function mergeByName(modifiers) {\n  var merged = modifiers.reduce(function (merged, current) {\n    var existing = merged[current.name];\n    merged[current.name] = existing ? Object.assign({}, existing, current, {\n      options: Object.assign({}, existing.options, current.options),\n      data: Object.assign({}, existing.data, current.data)\n    }) : current;\n    return merged;\n  }, {}); // IE11 does not support Object.values\n\n  return Object.keys(merged).map(function (key) {\n    return merged[key];\n  });\n}","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n  passive: true\n};\n\nfunction effect(_ref) {\n  var state = _ref.state,\n      instance = _ref.instance,\n      options = _ref.options;\n  var _options$scroll = options.scroll,\n      scroll = _options$scroll === void 0 ? true : _options$scroll,\n      _options$resize = options.resize,\n      resize = _options$resize === void 0 ? true : _options$resize;\n  var window = getWindow(state.elements.popper);\n  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n  if (scroll) {\n    scrollParents.forEach(function (scrollParent) {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return function () {\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: function fn() {},\n  effect: effect,\n  data: {}\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n  return placement.split('-')[0];\n}","export default function getVariation(placement) {\n  return placement.split('-')[1];\n}","export default function getMainAxisFromPlacement(placement) {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n  var reference = _ref.reference,\n      element = _ref.element,\n      placement = _ref.placement;\n  var basePlacement = placement ? getBasePlacement(placement) : null;\n  var variation = placement ? getVariation(placement) : null;\n  var commonX = reference.x + reference.width / 2 - element.width / 2;\n  var commonY = reference.y + reference.height / 2 - element.height / 2;\n  var offsets;\n\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height\n      };\n      break;\n\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY\n      };\n      break;\n\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n\n  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n  if (mainAxis != null) {\n    var len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n\n      case end:\n        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n\n      default:\n    }\n  }\n\n  return offsets;\n}","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {}\n};","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref) {\n  var x = _ref.x,\n      y = _ref.y;\n  var win = window;\n  var dpr = win.devicePixelRatio || 1;\n  return {\n    x: round(round(x * dpr) / dpr) || 0,\n    y: round(round(y * dpr) / dpr) || 0\n  };\n}\n\nexport function mapToStyles(_ref2) {\n  var _Object$assign2;\n\n  var popper = _ref2.popper,\n      popperRect = _ref2.popperRect,\n      placement = _ref2.placement,\n      variation = _ref2.variation,\n      offsets = _ref2.offsets,\n      position = _ref2.position,\n      gpuAcceleration = _ref2.gpuAcceleration,\n      adaptive = _ref2.adaptive,\n      roundOffsets = _ref2.roundOffsets;\n\n  var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n      _ref3$x = _ref3.x,\n      x = _ref3$x === void 0 ? 0 : _ref3$x,\n      _ref3$y = _ref3.y,\n      y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n  var hasX = offsets.hasOwnProperty('x');\n  var hasY = offsets.hasOwnProperty('y');\n  var sideX = left;\n  var sideY = top;\n  var win = window;\n\n  if (adaptive) {\n    var offsetParent = getOffsetParent(popper);\n    var heightProp = 'clientHeight';\n    var widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n    offsetParent = offsetParent;\n\n    if (placement === top || (placement === left || placement === right) && variation === end) {\n      sideY = bottom; // $FlowFixMe[prop-missing]\n\n      y -= offsetParent[heightProp] - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (placement === left || (placement === top || placement === bottom) && variation === end) {\n      sideX = right; // $FlowFixMe[prop-missing]\n\n      x -= offsetParent[widthProp] - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  var commonStyles = Object.assign({\n    position: position\n  }, adaptive && unsetSides);\n\n  if (gpuAcceleration) {\n    var _Object$assign;\n\n    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n  }\n\n  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref4) {\n  var state = _ref4.state,\n      options = _ref4.options;\n  var _options$gpuAccelerat = options.gpuAcceleration,\n      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n      _options$adaptive = options.adaptive,\n      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n      _options$roundOffsets = options.roundOffsets,\n      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n  if (process.env.NODE_ENV !== \"production\") {\n    var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n    if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n      return transitionProperty.indexOf(property) >= 0;\n    })) {\n      console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n    }\n  }\n\n  var commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration: gpuAcceleration\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.popperOffsets,\n      position: state.options.strategy,\n      adaptive: adaptive,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.arrow,\n      position: 'absolute',\n      adaptive: false,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-placement': state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {}\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\";\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n  var basePlacement = getBasePlacement(placement);\n  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n    placement: placement\n  })) : offset,\n      skidding = _ref[0],\n      distance = _ref[1];\n\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n  return [left, right].indexOf(basePlacement) >= 0 ? {\n    x: distance,\n    y: skidding\n  } : {\n    x: skidding,\n    y: distance\n  };\n}\n\nfunction offset(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options,\n      name = _ref2.name;\n  var _options$offset = options.offset,\n      offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n  var data = placements.reduce(function (acc, placement) {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n    return acc;\n  }, {});\n  var _data$state$placement = data[state.placement],\n      x = _data$state$placement.x,\n      y = _data$state$placement.y;\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.modifiersData.popperOffsets.x += x;\n    state.modifiersData.popperOffsets.y += y;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'offset',\n  enabled: true,\n  phase: 'main',\n  requires: ['popperOffsets'],\n  fn: offset\n};","var hash = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}","var hash = {\n  start: 'end',\n  end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n  return placement.replace(/start|end/g, function (matched) {\n    return hash[matched];\n  });\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n  if (parent.contains(child)) {\n    return true;\n  } // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n      var next = child;\n\n      do {\n        if (next && parent.isSameNode(next)) {\n          return true;\n        } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n        next = next.parentNode || next.host;\n      } while (next);\n    } // Give up, the result is false\n\n\n  return false;\n}","export default function rectToClientRect(rect) {\n  return Object.assign({}, rect, {\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element) {\n  var rect = getBoundingClientRect(element);\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent) {\n  return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n  var clippingParents = listScrollParents(getParentNode(element));\n  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n  return clippingParents.filter(function (clippingParent) {\n    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n  });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary) {\n  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n  var firstClippingParent = clippingParents[0];\n  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n    var rect = getClientRectFromMixedType(element, clippingParent);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent));\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n  return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nexport default function getViewportRect(element) {\n  var win = getWindow(element);\n  var html = getDocumentElement(element);\n  var visualViewport = win.visualViewport;\n  var width = html.clientWidth;\n  var height = html.clientHeight;\n  var x = 0;\n  var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n  // can be obscured underneath it.\n  // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n  // if it isn't open, so if this isn't available, the popper will be detected\n  // to overflow the bottom of the screen too early.\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n    // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n    // errors due to floating point numbers, so we need to check precision.\n    // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n    // Feature detection fails in mobile emulation mode in Chrome.\n    // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n    // 0.001\n    // Fallback here: \"Not Safari\" userAgent\n\n    if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x + getWindowScrollBarX(element),\n    y: y\n  };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n  var _element$ownerDocumen;\n\n  var html = getDocumentElement(element);\n  var winScroll = getWindowScroll(element);\n  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  var y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x,\n    y: y\n  };\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n  return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\n}","export default function expandToHashMap(value, keys) {\n  return keys.reduce(function (hashMap, key) {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      _options$placement = _options.placement,\n      placement = _options$placement === void 0 ? state.placement : _options$placement,\n      _options$boundary = _options.boundary,\n      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n      _options$rootBoundary = _options.rootBoundary,\n      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n      _options$elementConte = _options.elementContext,\n      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n      _options$altBoundary = _options.altBoundary,\n      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n      _options$padding = _options.padding,\n      padding = _options$padding === void 0 ? 0 : _options$padding;\n  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  var altContext = elementContext === popper ? reference : popper;\n  var popperRect = state.rects.popper;\n  var element = state.elements[altBoundary ? altContext : elementContext];\n  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n  var referenceClientRect = getBoundingClientRect(state.elements.reference);\n  var popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement: placement\n  });\n  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n\n  var overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n  };\n  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n  if (elementContext === popper && offsetData) {\n    var offset = offsetData[placement];\n    Object.keys(overflowOffsets).forEach(function (key) {\n      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport default function within(min, value, max) {\n  return mathMax(min, mathMin(value, max));\n}","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport within from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { max as mathMax, min as mathMin } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      padding = options.padding,\n      _options$tether = options.tether,\n      tether = _options$tether === void 0 ? true : _options$tether,\n      _options$tetherOffset = options.tetherOffset,\n      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n  var overflow = detectOverflow(state, {\n    boundary: boundary,\n    rootBoundary: rootBoundary,\n    padding: padding,\n    altBoundary: altBoundary\n  });\n  var basePlacement = getBasePlacement(state.placement);\n  var variation = getVariation(state.placement);\n  var isBasePlacement = !variation;\n  var mainAxis = getMainAxisFromPlacement(basePlacement);\n  var altAxis = getAltAxis(mainAxis);\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : tetherOffset;\n  var data = {\n    x: 0,\n    y: 0\n  };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis || checkAltAxis) {\n    var mainSide = mainAxis === 'y' ? top : left;\n    var altSide = mainAxis === 'y' ? bottom : right;\n    var len = mainAxis === 'y' ? 'height' : 'width';\n    var offset = popperOffsets[mainAxis];\n    var min = popperOffsets[mainAxis] + overflow[mainSide];\n    var max = popperOffsets[mainAxis] - overflow[altSide];\n    var additive = tether ? -popperRect[len] / 2 : 0;\n    var minLen = variation === start ? referenceRect[len] : popperRect[len];\n    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n    // outside the reference bounds\n\n    var arrowElement = state.elements.arrow;\n    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n      width: 0,\n      height: 0\n    };\n    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n    var arrowPaddingMin = arrowPaddingObject[mainSide];\n    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n    // to include its full size in the calculation. If the reference is small\n    // and near the edge of a boundary, the popper can overflow even if the\n    // reference is not overflowing as well (e.g. virtual elements with no\n    // width or height)\n\n    var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n    var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n    var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n    var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n    if (checkMainAxis) {\n      var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n      popperOffsets[mainAxis] = preventedOffset;\n      data[mainAxis] = preventedOffset - offset;\n    }\n\n    if (checkAltAxis) {\n      var _mainSide = mainAxis === 'x' ? top : left;\n\n      var _altSide = mainAxis === 'x' ? bottom : right;\n\n      var _offset = popperOffsets[altAxis];\n\n      var _min = _offset + overflow[_mainSide];\n\n      var _max = _offset - overflow[_altSide];\n\n      var _preventedOffset = within(tether ? mathMin(_min, tetherMin) : _min, _offset, tether ? mathMax(_max, tetherMax) : _max);\n\n      popperOffsets[altAxis] = _preventedOffset;\n      data[altAxis] = _preventedOffset - _offset;\n    }\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'preventOverflow',\n  enabled: true,\n  phase: 'main',\n  fn: preventOverflow,\n  requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport within from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : padding;\n  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n  var _state$modifiersData$;\n\n  var state = _ref.state,\n      name = _ref.name,\n      options = _ref.options;\n  var arrowElement = state.elements.arrow;\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var basePlacement = getBasePlacement(state.placement);\n  var axis = getMainAxisFromPlacement(basePlacement);\n  var isVertical = [left, right].indexOf(basePlacement) >= 0;\n  var len = isVertical ? 'height' : 'width';\n\n  if (!arrowElement || !popperOffsets) {\n    return;\n  }\n\n  var paddingObject = toPaddingObject(options.padding, state);\n  var arrowRect = getLayoutRect(arrowElement);\n  var minProp = axis === 'y' ? top : left;\n  var maxProp = axis === 'y' ? bottom : right;\n  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n  var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n  var arrowOffsetParent = getOffsetParent(arrowElement);\n  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n  // outside of the popper bounds\n\n  var min = paddingObject[minProp];\n  var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n  var axisProp = axis;\n  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options;\n  var _options$element = options.element,\n      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n  if (arrowElement == null) {\n    return;\n  } // CSS selector\n\n\n  if (typeof arrowElement === 'string') {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n\n    if (!arrowElement) {\n      return;\n    }\n  }\n\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!isHTMLElement(arrowElement)) {\n      console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n    }\n  }\n\n  if (!contains(state.elements.popper, arrowElement)) {\n    if (process.env.NODE_ENV !== \"production\") {\n      console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n    }\n\n    return;\n  }\n\n  state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'arrow',\n  enabled: true,\n  phase: 'main',\n  fn: arrow,\n  effect: effect,\n  requires: ['popperOffsets'],\n  requiresIfExists: ['preventOverflow']\n};","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n  if (preventedOffsets === void 0) {\n    preventedOffsets = {\n      x: 0,\n      y: 0\n    };\n  }\n\n  return {\n    top: overflow.top - rect.height - preventedOffsets.y,\n    right: overflow.right - rect.width + preventedOffsets.x,\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\n    left: overflow.left - rect.width - preventedOffsets.x\n  };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n  return [top, right, bottom, left].some(function (side) {\n    return overflow[side] >= 0;\n  });\n}\n\nfunction hide(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var preventedOffsets = state.modifiersData.preventOverflow;\n  var referenceOverflow = detectOverflow(state, {\n    elementContext: 'reference'\n  });\n  var popperAltOverflow = detectOverflow(state, {\n    altBoundary: true\n  });\n  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n  state.modifiersData[name] = {\n    referenceClippingOffsets: referenceClippingOffsets,\n    popperEscapeOffsets: popperEscapeOffsets,\n    isReferenceHidden: isReferenceHidden,\n    hasPopperEscaped: hasPopperEscaped\n  };\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-reference-hidden': isReferenceHidden,\n    'data-popper-escaped': hasPopperEscaped\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'hide',\n  enabled: true,\n  phase: 'main',\n  requiresIfExists: ['preventOverflow'],\n  fn: hide\n};","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n  var state = _ref.state;\n  Object.keys(state.elements).forEach(function (name) {\n    var style = state.styles[name] || {};\n    var attributes = state.attributes[name] || {};\n    var element = state.elements[name]; // arrow is optional + virtual elements\n\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    } // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n\n\n    Object.assign(element.style, style);\n    Object.keys(attributes).forEach(function (name) {\n      var value = attributes[name];\n\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state;\n  var initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0'\n    },\n    arrow: {\n      position: 'absolute'\n    },\n    reference: {}\n  };\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return function () {\n    Object.keys(state.elements).forEach(function (name) {\n      var element = state.elements[name];\n      var attributes = state.attributes[name] || {};\n      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n      var style = styleProperties.reduce(function (style, property) {\n        style[property] = '';\n        return style;\n      }, {}); // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (attribute) {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect: effect,\n  requires: ['computeStyles']\n};","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n\n  var oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n      specifiedFallbackPlacements = options.fallbackPlacements,\n      padding = options.padding,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      _options$flipVariatio = options.flipVariations,\n      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n      allowedAutoPlacements = options.allowedAutoPlacements;\n  var preferredPlacement = state.options.placement;\n  var basePlacement = getBasePlacement(preferredPlacement);\n  var isBasePlacement = basePlacement === preferredPlacement;\n  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      flipVariations: flipVariations,\n      allowedAutoPlacements: allowedAutoPlacements\n    }) : placement);\n  }, []);\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var checksMap = new Map();\n  var makeFallbackChecks = true;\n  var firstFittingPlacement = placements[0];\n\n  for (var i = 0; i < placements.length; i++) {\n    var placement = placements[i];\n\n    var _basePlacement = getBasePlacement(placement);\n\n    var isStartVariation = getVariation(placement) === start;\n    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n    var len = isVertical ? 'width' : 'height';\n    var overflow = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      altBoundary: altBoundary,\n      padding: padding\n    });\n    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n\n    var altVariationSide = getOppositePlacement(mainVariationSide);\n    var checks = [];\n\n    if (checkMainAxis) {\n      checks.push(overflow[_basePlacement] <= 0);\n    }\n\n    if (checkAltAxis) {\n      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n    }\n\n    if (checks.every(function (check) {\n      return check;\n    })) {\n      firstFittingPlacement = placement;\n      makeFallbackChecks = false;\n      break;\n    }\n\n    checksMap.set(placement, checks);\n  }\n\n  if (makeFallbackChecks) {\n    // `2` may be desired in some cases – research later\n    var numberOfChecks = flipVariations ? 3 : 1;\n\n    var _loop = function _loop(_i) {\n      var fittingPlacement = placements.find(function (placement) {\n        var checks = checksMap.get(placement);\n\n        if (checks) {\n          return checks.slice(0, _i).every(function (check) {\n            return check;\n          });\n        }\n      });\n\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        return \"break\";\n      }\n    };\n\n    for (var _i = numberOfChecks; _i > 0; _i--) {\n      var _ret = _loop(_i);\n\n      if (_ret === \"break\") break;\n    }\n  }\n\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'flip',\n  enabled: true,\n  phase: 'main',\n  fn: flip,\n  requiresIfExists: ['offset'],\n  data: {\n    _skip: false\n  }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      placement = _options.placement,\n      boundary = _options.boundary,\n      rootBoundary = _options.rootBoundary,\n      padding = _options.padding,\n      flipVariations = _options.flipVariations,\n      _options$allowedAutoP = _options.allowedAutoPlacements,\n      allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n  var variation = getVariation(placement);\n  var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n    return getVariation(placement) === variation;\n  }) : basePlacements;\n  var allowedPlacements = placements.filter(function (placement) {\n    return allowedAutoPlacements.indexOf(placement) >= 0;\n  });\n\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements;\n\n    if (process.env.NODE_ENV !== \"production\") {\n      console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, \"auto\" cannot be used to allow \"bottom-start\".', 'Use \"auto-start\" instead.'].join(' '));\n    }\n  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n  var overflows = allowedPlacements.reduce(function (acc, placement) {\n    acc[placement] = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding\n    })[getBasePlacement(placement)];\n    return acc;\n  }, {});\n  return Object.keys(overflows).sort(function (a, b) {\n    return overflows[a] - overflows[b];\n  });\n}","import * as React from 'react';\nimport { createPopper as defaultCreatePopper } from '@popperjs/core';\nimport isEqual from 'react-fast-compare';\nimport { fromEntries, useIsomorphicLayoutEffect } from './utils';\nvar EMPTY_MODIFIERS = [];\nexport var usePopper = function usePopper(referenceElement, popperElement, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var prevOptions = React.useRef(null);\n  var optionsWithDefaults = {\n    onFirstUpdate: options.onFirstUpdate,\n    placement: options.placement || 'bottom',\n    strategy: options.strategy || 'absolute',\n    modifiers: options.modifiers || EMPTY_MODIFIERS\n  };\n\n  var _React$useState = React.useState({\n    styles: {\n      popper: {\n        position: optionsWithDefaults.strategy,\n        left: '0',\n        top: '0'\n      },\n      arrow: {\n        position: 'absolute'\n      }\n    },\n    attributes: {}\n  }),\n      state = _React$useState[0],\n      setState = _React$useState[1];\n\n  var updateStateModifier = React.useMemo(function () {\n    return {\n      name: 'updateState',\n      enabled: true,\n      phase: 'write',\n      fn: function fn(_ref) {\n        var state = _ref.state;\n        var elements = Object.keys(state.elements);\n        setState({\n          styles: fromEntries(elements.map(function (element) {\n            return [element, state.styles[element] || {}];\n          })),\n          attributes: fromEntries(elements.map(function (element) {\n            return [element, state.attributes[element]];\n          }))\n        });\n      },\n      requires: ['computeStyles']\n    };\n  }, []);\n  var popperOptions = React.useMemo(function () {\n    var newOptions = {\n      onFirstUpdate: optionsWithDefaults.onFirstUpdate,\n      placement: optionsWithDefaults.placement,\n      strategy: optionsWithDefaults.strategy,\n      modifiers: [].concat(optionsWithDefaults.modifiers, [updateStateModifier, {\n        name: 'applyStyles',\n        enabled: false\n      }])\n    };\n\n    if (isEqual(prevOptions.current, newOptions)) {\n      return prevOptions.current || newOptions;\n    } else {\n      prevOptions.current = newOptions;\n      return newOptions;\n    }\n  }, [optionsWithDefaults.onFirstUpdate, optionsWithDefaults.placement, optionsWithDefaults.strategy, optionsWithDefaults.modifiers, updateStateModifier]);\n  var popperInstanceRef = React.useRef();\n  useIsomorphicLayoutEffect(function () {\n    if (popperInstanceRef.current) {\n      popperInstanceRef.current.setOptions(popperOptions);\n    }\n  }, [popperOptions]);\n  useIsomorphicLayoutEffect(function () {\n    if (referenceElement == null || popperElement == null) {\n      return;\n    }\n\n    var createPopper = options.createPopper || defaultCreatePopper;\n    var popperInstance = createPopper(referenceElement, popperElement, popperOptions);\n    popperInstanceRef.current = popperInstance;\n    return function () {\n      popperInstance.destroy();\n      popperInstanceRef.current = null;\n    };\n  }, [referenceElement, popperElement, options.createPopper]);\n  return {\n    state: popperInstanceRef.current ? popperInstanceRef.current.state : null,\n    styles: state.styles,\n    attributes: state.attributes,\n    update: popperInstanceRef.current ? popperInstanceRef.current.update : null,\n    forceUpdate: popperInstanceRef.current ? popperInstanceRef.current.forceUpdate : null\n  };\n};","import * as React from 'react';\nimport { ManagerReferenceNodeContext } from './Manager';\nimport { unwrapArray, setRef } from './utils';\nimport { usePopper } from './usePopper';\n\nvar NOOP = function NOOP() {\n  return void 0;\n};\n\nvar NOOP_PROMISE = function NOOP_PROMISE() {\n  return Promise.resolve(null);\n};\n\nvar EMPTY_MODIFIERS = [];\nexport function Popper(_ref) {\n  var _ref$placement = _ref.placement,\n      placement = _ref$placement === void 0 ? 'bottom' : _ref$placement,\n      _ref$strategy = _ref.strategy,\n      strategy = _ref$strategy === void 0 ? 'absolute' : _ref$strategy,\n      _ref$modifiers = _ref.modifiers,\n      modifiers = _ref$modifiers === void 0 ? EMPTY_MODIFIERS : _ref$modifiers,\n      referenceElement = _ref.referenceElement,\n      onFirstUpdate = _ref.onFirstUpdate,\n      innerRef = _ref.innerRef,\n      children = _ref.children;\n  var referenceNode = React.useContext(ManagerReferenceNodeContext);\n\n  var _React$useState = React.useState(null),\n      popperElement = _React$useState[0],\n      setPopperElement = _React$useState[1];\n\n  var _React$useState2 = React.useState(null),\n      arrowElement = _React$useState2[0],\n      setArrowElement = _React$useState2[1];\n\n  React.useEffect(function () {\n    setRef(innerRef, popperElement);\n  }, [innerRef, popperElement]);\n  var options = React.useMemo(function () {\n    return {\n      placement: placement,\n      strategy: strategy,\n      onFirstUpdate: onFirstUpdate,\n      modifiers: [].concat(modifiers, [{\n        name: 'arrow',\n        enabled: arrowElement != null,\n        options: {\n          element: arrowElement\n        }\n      }])\n    };\n  }, [placement, strategy, onFirstUpdate, modifiers, arrowElement]);\n\n  var _usePopper = usePopper(referenceElement || referenceNode, popperElement, options),\n      state = _usePopper.state,\n      styles = _usePopper.styles,\n      forceUpdate = _usePopper.forceUpdate,\n      update = _usePopper.update;\n\n  var childrenProps = React.useMemo(function () {\n    return {\n      ref: setPopperElement,\n      style: styles.popper,\n      placement: state ? state.placement : placement,\n      hasPopperEscaped: state && state.modifiersData.hide ? state.modifiersData.hide.hasPopperEscaped : null,\n      isReferenceHidden: state && state.modifiersData.hide ? state.modifiersData.hide.isReferenceHidden : null,\n      arrowProps: {\n        style: styles.arrow,\n        ref: setArrowElement\n      },\n      forceUpdate: forceUpdate || NOOP,\n      update: update || NOOP_PROMISE\n    };\n  }, [setPopperElement, setArrowElement, placement, state, styles, update, forceUpdate]);\n  return unwrapArray(children)(childrenProps);\n}","import * as React from 'react';\nimport warning from 'warning';\nimport { ManagerReferenceNodeSetterContext } from './Manager';\nimport { safeInvoke, unwrapArray, setRef } from './utils';\nexport function Reference(_ref) {\n  var children = _ref.children,\n      innerRef = _ref.innerRef;\n  var setReferenceNode = React.useContext(ManagerReferenceNodeSetterContext);\n  var refHandler = React.useCallback(function (node) {\n    setRef(innerRef, node);\n    safeInvoke(setReferenceNode, node);\n  }, [innerRef, setReferenceNode]); // ran on unmount\n\n  React.useEffect(function () {\n    return function () {\n      return setRef(innerRef, null);\n    };\n  });\n  React.useEffect(function () {\n    warning(Boolean(setReferenceNode), '`Reference` should not be used outside of a `Manager` component.');\n  }, [setReferenceNode]);\n  return unwrapArray(children)({\n    ref: refHandler\n  });\n}","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\nimport type { Tooltip as SpectrumTooltip } from '@ccx-public/spectrum-web-component-fallbacks/dist/tooltip';\nimport type { ReactProps } from './utils';\nimport createWrapper from './utils/createWrapper';\nimport { SWCLoader } from './utils/SWCLoader';\nimport interopRequireDefault from './utils/interopRequireDefault';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Tooltip: React.ComponentType<\n    ReactProps<SpectrumTooltip, RS2CompatProps>\n> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Tooltip')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\nif (!process.env.EXCLUDE_SWC) {\n    swcLoader = new SWCLoader(['sp-tooltip'], async () => {\n        const { Tooltip } = await import(\n            /* webpackChunkName: \"SpTooltip\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/tooltip'\n        );\n        return [Tooltip];\n    });\n}\n\ntype RS2CompatProps = {\n    testId?: string;\n    children: React.ReactNode;\n};\n\nexport default createWrapper<SpectrumTooltip, RS2CompatProps>({\n    displayName: 'Tooltip',\n    fallback: RS2Tooltip,\n    swcLoader,\n    swcProps: (props) => {\n        const { className, ...rest } = props;\n        return { ...rest, class: className };\n    },\n    tagName: 'sp-tooltip',\n});\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n// https://react-spectrum.corp.adobe.com/storybook/?path=/story/overlaytrigger--with-trigger-click\n// https://opensource.adobe.com/spectrum-web-components/components/overlay-trigger/\nimport type {\n    OverlayTrigger as OverlayTriggerType,\n    OverlayContentTypes,\n    Placement,\n} from '@ccx-public/spectrum-web-component-fallbacks/dist/overlay';\nimport React, { useRef, useEffect } from 'react';\nimport createWrapper from './utils/createWrapper';\nimport { SWCLoader } from './utils/SWCLoader';\nimport interopRequireDefault from './utils/interopRequireDefault';\nimport { filterBooleanProps, useComponent } from './utils';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2OverlayTrigger: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/OverlayTrigger')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\nif (!process.env.EXCLUDE_SWC) {\n    swcLoader = new SWCLoader(['overlay-trigger'], async () => {\n        const { OverlayTrigger } = await import(\n            /* webpackChunkName: \"SpOverlay\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/overlay'\n        );\n        return [OverlayTrigger];\n    });\n}\n\ntype Triggers = 'click' | 'longClick' | 'hover' | 'focus';\n\ntype BoundariesElementType = (() => Element | null) | string;\ntype RS2CompatProps = {\n    open?: OverlayContentTypes;\n    placement?: string;\n    trigger?: Triggers | Triggers[];\n    onShow?: () => void;\n    onHide?: () => void;\n    delayShow?: number;\n    disabled?: boolean;\n    // RS2-UXP-only prop\n    boundariesElement?: BoundariesElementType;\n    show?: boolean;\n};\n\n// RS2 to SWC Placement map\nconst placementMap: Record<string, Placement> = {\n    left: 'left',\n    right: 'right',\n    top: 'top',\n    bottom: 'bottom',\n    'top left': 'top-start',\n    'top right': 'top-end',\n    'bottom left': 'bottom-start',\n    'bottom right': 'bottom-end',\n    'left top': 'left-start',\n    'left bottom': 'left-end',\n    'right top': 'right-start',\n    'right bottom': 'right-end',\n};\n\nconst DEFAULT_TRIGGERS = ['hover', 'focus'];\n\nexport default createWrapper<OverlayTriggerType, RS2CompatProps>({\n    displayName: 'OverlayTrigger',\n    fallback: RS2OverlayTrigger,\n    swcLoader,\n    SWCWrapper: function OverlayTrigger(props) {\n        const {\n            trigger = DEFAULT_TRIGGERS,\n            children,\n            className,\n            onHide,\n            onShow,\n            disabled,\n            delayShow,\n            // RS2-UXP-only props\n            /* eslint-disable @typescript-eslint/no-unused-vars */\n            boundariesElement,\n            show,\n            /* eslint-enable @typescript-eslint/no-unused-vars */\n            ...rest\n        } = props;\n        const childrenArray = React.Children.toArray(children);\n        const modalTriggerRef = useRef<OverlayTriggerType>(null);\n        const triggers =\n            typeof trigger === 'object' ? trigger : trigger ? [trigger] : [];\n        const slotNames: string[] = [];\n        const resultArray: JSX.Element[] = [];\n\n        // map RS2 to SWC Placement mapping\n        const placement = props.placement\n            ? placementMap[props.placement]\n            : 'left';\n\n        useEffect(() => {\n            const current = modalTriggerRef?.current;\n\n            if (current && onShow) {\n                current.addEventListener('sp-opened', onShow);\n            }\n            if (current && onHide) {\n                current.addEventListener('sp-closed', onHide);\n            }\n\n            return () => {\n                if (current && onShow) {\n                    current.removeEventListener('sp-opened', onShow);\n                }\n                if (current && onHide) {\n                    current.removeEventListener('sp-closed', onHide);\n                }\n            };\n        }, [onShow, onHide]);\n\n        triggers.forEach((curTrigger: string) => {\n            if (\n                curTrigger?.includes('hover') ||\n                curTrigger?.includes('focus')\n            ) {\n                slotNames.push('hover-content');\n            } else if (curTrigger?.includes('click')) {\n                slotNames.push('click-content');\n            } else if (curTrigger?.includes('longClick')) {\n                slotNames.push('longpress-content');\n            }\n        });\n\n        /*\n         * RS2 only supports two children to be used in an overlay trigger.\n         * It is assumed that the first child is the trigger element and the second child is\n         * the element to overlay. The following check, along with checking for trigger above\n         * and slot props below, are used to know if the RS2 interface is being used. If this is\n         * the case we make the same assuptions as RS2 and treat the first child as the trigger\n         * and the second child as the element to overlay.\n         * If any of these checks fail we still allow the overlay to render so the SWC interface cas be used as well.\n         * https://git.corp.adobe.com/React/react-spectrum-v2/blob/v2.39.0/src/OverlayTrigger/js/OverlayTrigger.js#L510\n         */\n        if (slotNames.length && childrenArray.length === 2) {\n            const firstChild = childrenArray[0] as JSX.Element;\n            const secondChild = childrenArray[1] as JSX.Element;\n\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            if (!firstChild.props?.slot) {\n                const TriggerComp = React.cloneElement(firstChild, {\n                    slot: 'trigger',\n                });\n                resultArray.push(TriggerComp);\n            } else {\n                resultArray.push(firstChild);\n            }\n\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            if (!secondChild.props?.slot) {\n                slotNames.forEach((curSlot: string) => {\n                    const TriggerTargetComp = React.cloneElement(secondChild, {\n                        slot: curSlot,\n                        delayed: delayShow ? true : undefined,\n                    });\n                    resultArray.push(TriggerTargetComp);\n                });\n            } else {\n                resultArray.push(secondChild);\n            }\n        }\n\n        const OverlayTrigger = useComponent('overlay-trigger');\n\n        return (\n            <OverlayTrigger\n                {...rest}\n                {...filterBooleanProps({ disabled })}\n                placement={placement}\n                class={className}\n                ref={modalTriggerRef}\n            >\n                {resultArray.length ? resultArray : children}\n            </OverlayTrigger>\n        );\n    },\n    tagName: 'overlay-trigger',\n});\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport { observable, computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport { Manager, Reference, Popper } from 'react-popper';\nimport environment from 'app/js/environment';\nimport configuration from 'app/js/config/configuration';\nimport classNames from 'classnames';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport { PortalContext } from 'app/js/components/web-components/PortalContext';\nimport { default as SpectrumTooltip } from '@ccx-public/spectrum-wrapper/Tooltip';\nimport { default as SpectrumOverlayTrigger } from '@ccx-public/spectrum-wrapper/OverlayTrigger';\n\n@observer\nclass PopperTooltip extends React.Component {\n    static contextType = PortalContext;\n\n    static propTypes = {\n        children: PropTypes.node,\n        delay: PropTypes.number,\n        placement: PropTypes.string,\n    };\n\n    render() {\n        const portalNode = this.context || document.querySelector('#content') || document.querySelector('body');\n\n        const popperModifiers = [\n            {\n                name: 'computeStyles',\n                options: {\n                    gpuAcceleration: !environment.disableGPUTooltips\n                }\n            }\n        ];\n\n        return ReactDOM.createPortal(\n            <Popper placement={ this.props.placement } modifiers={ popperModifiers }>\n                {({ placement, ref, style }) => (\n                    <div style={ style } ref={ ref } data-test-id=\"tooltip-container\" className=\"tooltip\" data-placement={ placement }>\n                        { this.props.children }\n                    </div>\n                )}\n            </Popper>,\n            portalNode\n        );\n    }\n}\n\n@observer\nexport default class Tooltip extends React.Component {\n    static contextType = LibrariesContext;\n    static defaultProps = {\n        content: '',\n        delay: 1000,\n        placement: 'top'\n    };\n\n    static propTypes = {\n        children: PropTypes.node,\n        featureId: PropTypes.string,\n        content: PropTypes.oneOfType([\n            PropTypes.string,\n            PropTypes.array\n        ]),\n        delay: PropTypes.number,\n        placement: PropTypes.string,\n        disable: PropTypes.bool,\n        className: PropTypes.string,\n    };\n\n    @observable isOpen = false;\n\n    componentDidUpdate(prevProps) {\n        if (this.props.children !== prevProps.children && this.isOpen) {\n            // Close the tooltip for nodes that get scrolled out of view in a virtualizer.\n            this.hide();\n        }\n    }\n\n    show() {\n        if (this.disabled) {\n            return;\n        }\n\n        this.isOpen = true;\n        this.context.viewManager.setTooltipActive();\n        clearTimeout(this._visibleTimer);\n        this._visibleTimer = setTimeout(this.handleMouseOut, 7000);\n    }\n\n    hide() {\n        this.isOpen = false;\n        this.context.viewManager.resetTooltip();\n    }\n\n    // We can't use mouseEnter, because react will only listen to events on the document\n    // and it gets eaten by the webcomponent boundary\n    handleMouseOver = (event) => {\n        event && event.stopPropagation();\n\n        if (this.context.viewManager.isTooltipActive) {\n            this.show();\n        } else {\n            clearTimeout(this._tooltipDelayTimer);\n            this._tooltipDelayTimer = setTimeout(() => this.show(), this.props.delay);\n        }\n    }\n\n    // We can't use mouseLeave, because react will only listen to events on the document\n    // and it gets eaten by the webcomponent boundary\n    handleMouseOut = () => {\n        clearTimeout(this._tooltipDelayTimer);\n        clearTimeout(this._visibleTimer);\n        this.hide();\n    }\n\n    handleMouseDown = () => {\n        if (this.context.viewManager.isTooltipActive) {\n            this.handleMouseOut();\n        }\n    }\n\n    get disabled() {\n        return configuration.showTooltips === 'false' || this.props.disable || !this.content.length || !this.content[0];\n    }\n\n    get content() {\n        // Disable tooltips for mobile view because they are not needed!\n        if (environment.isMobileView) { return []; }\n        return Array.isArray(this.props.content) ? this.props.content : [ this.props.content ];\n    }\n\n    @computed get tooltipContent() {\n        return this.content.map((contentText, index) => {\n            if (contentText && contentText.divider) {\n                // eslint-disable-next-line react/no-array-index-key\n                return <div key={ index.toString() } className=\"panel-tooltip-divider\" />;\n            }\n            // eslint-disable-next-line react/no-array-index-key\n            return <div key={ index.toString() } data-test-id=\"tooltip-content\" className=\"tooltipContent\">{ contentText }</div>;\n        });\n    }\n\n    getSpectrumTooltip(fallback) {\n        // Don't show tooltip if there is no content\n        if (!this.content.length || !this.content[0]) {\n            return <div data-test-id=\"no-content-tooltip-wrapper\" className=\"tooltipTriggerWrapper\">\n                { this.props.children }\n            </div>;\n        }\n\n        return (\n            <SpectrumOverlayTrigger dir=\"ltr\" className=\"tooltip-overlay-trigger\" data-test-id=\"tooltip-container-with-content\" fallback={ fallback } placement={ this.props.placement } delay={ this.props.delay } disabled={ this.disabled || null } trigger=\"hover\">\n                <div className=\"tooltipTriggerWrapper\">\n                    { this.props.children }\n                </div>\n                <SpectrumTooltip dir=\"ltr\">{ this.tooltipContent }</SpectrumTooltip>\n            </SpectrumOverlayTrigger>\n        );\n    }\n\n    render() {\n        let fallback;\n        const CustomTooltip = environment.Tooltip;\n        // CCXC-17068, CCXC-17003: In some envs (XD, UXP) the web component for tooltip does not work well, so skip using the wrapper layer and rely on environment overrides\n        if (CustomTooltip) {\n            return <CustomTooltip className={ this.props.className } content={ this.content } disable={ this.disabled } featureId={ this.props.featureId } delay={ this.props.delay }>{ this.props.children }</CustomTooltip>;\n        } else {\n            // TODO We should remove using popper (even on desktop flagship apps) and rely on the Spectrum fallback\n            fallback = <Manager>\n                <Reference>\n                    {({ ref }) => (\n                        <div className={classNames('tooltip-ref', this.props.className)} ref={ ref } onMouseOver={ this.handleMouseOver } onMouseOut={ this.handleMouseOut } onMouseDown={ this.handleMouseDown }>{ this.props.children }</div>\n                    )}\n                </Reference>\n                { this.isOpen && <PopperTooltip placement={ this.props.placement }>{ this.tooltipContent }</PopperTooltip> }\n            </Manager>;\n        }\n        return <div className={classNames('tooltip-container', this.props.className)}>{ this.getSpectrumTooltip(fallback) }</div>;\n    }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"ftr\"};","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport Button from '@torq-native/react-spectrum/Button';\nimport OpenIn from '@torq-native/react-spectrum/Icon/OpenIn';\n\nimport versionManager from 'app/js/managers/versionManager';\nimport appState from 'app/js/appState';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\n\nimport styles from './index.scss';\nimport featureFlags from 'app/js/config/featureFlags';\n\nexport default class DebugHUD extends React.Component {\n    static contextType = LibrariesContext;\n\n    get apiVersion() {\n        return appState.panel.libraryManager.privateCollection?.apiVersion || 1;\n    }\n\n    get panelVersion() {\n        const version = versionManager.getPluginVersion();\n        return version === '99.0.0' ? 'DEV' : version;\n    }\n\n    handleOpenDashboardClick = () => {\n        this.context.dialogManager.openDialog('jsApi2Dashboard');\n    }\n\n    render() {\n        if (!featureFlags.get('showDebugHUD')) {\n            return null;\n        }\n\n        return <div className={ styles.container }>\n            {\n                this.apiVersion === 2 ? (\n                    <Button\n                        icon={ <OpenIn /> }\n                        variant=\"tool\"\n                        onClick={ this.handleOpenDashboardClick }\n                    />\n                ) : undefined\n            }\n            <div>\n                <div>\n                    JS API Version: { this.apiVersion }\n                </div>\n                <div>\n                    Panel Version: { this.panelVersion }\n                </div>\n            </div>\n        </div>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport environment from 'app/js/environment';\nimport { translate } from 'app/js/managers/translationManager';\nimport Icon from 'app/js/components/Icon';\nimport { isEventWithin } from 'app/js/utils/DOMUtils';\nimport Button from '@ccx-public/spectrum-wrapper/Button';\nimport ButtonGroup from 'app/js/components/ButtonGroup';\nimport configuration from 'app/js/config/configuration';\nimport featureFlags from 'app/js/config/featureFlags';\nimport MosaicView from '../MosaicView';\n\n/**\n * Base class for all panel dialogs - this should be used by other dialogs.\n */\n\n@observer\nexport default class BaseDialog extends React.Component {\n\n    static defaultProps = {\n        cancelButtonText: 'DL_CANCEL',\n        closeOnOutsideClick: true,\n        mode: 'normal',\n        okButtonText: 'DL_OK',\n        okButtonEnabled: true,\n        showFooter: true,\n        secondaryButtonEnabled: true,\n    };\n\n    static propTypes = {\n        title: PropTypes.string,\n        okButtonText: PropTypes.string,\n        okButtonEnabled: PropTypes.bool,\n        cancelButtonText: PropTypes.string,\n        secondaryButtonText: PropTypes.string,\n        secondaryButtonEnabled: PropTypes.bool,\n        onClickOK: PropTypes.func,\n        onClickCancel: PropTypes.func,\n        onClickSecondary: PropTypes.func,\n        close: PropTypes.func, // Callback for closing the dialog (dialogManager.closeDialog())\n        closeOnOutsideClick: PropTypes.bool,\n        children: PropTypes.node,\n        className: PropTypes.string,\n        mode: PropTypes.oneOf([ 'normal', 'info', 'error', 'cloud', 'warning' ]), // warning: red primary button, normal: grey\n        showMosaicLibrary: PropTypes.any,\n        showFooter: PropTypes.bool,\n        banner: PropTypes.node,\n    };\n\n    onClickCancel = event => {\n        event && event.stopPropagation();\n        this.props.close && this.props.close();\n        this.props.onClickCancel && this.props.onClickCancel();\n    }\n\n    onClickOK = event => {\n        event && event.stopPropagation();\n        // Note: if button has the disabled attribute, the click handler won't be called\n        this.props.close && this.props.close();\n        this.props.onClickOK && this.props.onClickOK();\n    }\n\n    onClickSecondary = event => {\n        event && event.stopPropagation();\n        this.props.close && this.props.close();\n        this.props.onClickSecondary && this.props.onClickSecondary();\n    }\n\n    onClickOutsideDialog = (event) => {\n        if (this.props.closeOnOutsideClick && (!this._dialogElement || !isEventWithin(event, this._dialogElement))) {\n            // Treat clicking outside the dialog as a cancel:\n            this.onClickCancel();\n        }\n    }\n\n    // In UXP you don't get the onClick fn executed from hitting the 'enter' key on a button\n    // so here we just execute the passed in function attached to that button when you hit enter\n    handleKeyDown = (event, desiredFn) => {\n        if (event.key === 'Enter') {\n            desiredFn(event);\n        }\n    }\n\n    setDialogElement = (element) => {\n        this._dialogElement = element;\n        setTimeout(() => this._dialogElement && this._dialogElement.focus());\n    };\n\n    get okButton() {\n        return this.props.okButtonText && (\n            <Button\n                data-test-id=\"dialog-ok-button\"\n                disabled={ !this.props.okButtonEnabled }\n                onClick={ this.onClickOK }\n                variant={this.props.mode === 'warning' ? 'warning' : 'cta'}\n                treatment=\"fill\"\n            >\n                { translate(this.props.okButtonText) }\n            </Button>\n        );\n    }\n\n    get cancelButton() {\n        return this.props.cancelButtonText && (\n            <Button\n                data-test-id=\"dialog-cancel-button\"\n                onClick={ this.onClickCancel }\n                variant=\"secondary\"\n            >\n                { translate(this.props.cancelButtonText) }\n            </Button>\n        );\n    }\n\n    get secondaryButton() {\n        return this.props.secondaryButtonText && (\n            <Button\n                data-test-id=\"dialog-secondary-button\"\n                disabled={ !this.props.secondaryButtonEnabled }\n                onClick={ this.onClickSecondary }\n                variant=\"secondary\"\n            >\n                { translate(this.props.secondaryButtonText) }\n            </Button>\n        );\n    }\n\n    get footer() {\n        if (environment.isWindowsOS()) {\n            return <ButtonGroup>{ this.okButton }{ this.secondaryButton }{ this.cancelButton }</ButtonGroup>;\n        }\n        return <ButtonGroup>{ this.cancelButton }{ this.secondaryButton }{ this.okButton }</ButtonGroup>;\n    }\n\n    static _icons = {\n        error: size => <div data-test-id=\"error-icon\" className=\"panel-dialog-error-color panel-dialog-error-icon\"><Icon id=\"Error\" height={ size }/></div>,\n        info:  size => <div data-test-id=\"info-icon\" className=\"panel-dialog-info-color panel-dialog-info-icon\"><Icon id=\"Info\" height={ size }/></div>,\n        cloud: () => <div data-test-id=\"cloud-icon\" className=\"panel-dialog-cloud-icon\"><Icon id=\"AdobeFonts\" height={ 18 }/></div>\n    };\n\n    get icon() {\n        return BaseDialog._icons[this.props.mode]?.(configuration.currentProduct.config.dialogIconSize || 12);\n    }\n\n    get showMosaic() {\n        return featureFlags.get('enableProjects') && this.props.showMosaicLibrary;\n    }\n\n    get mosaicContainer() {\n        if (!this.showMosaic) { return; }\n        return (\n            <div data-test-id=\"dialog-mosaic\" className=\"panel-dialog-mosaic-container\">\n                <div className=\"panel-dialog-mosaic-inner\">\n                    <MosaicView viewMode=\"grid\" renditionGrid={this.props.showMosaicLibrary.renditionGrid} library={this.props.showMosaicLibrary}/>\n                </div>\n            </div>\n        );\n    }\n\n    render() {\n        const windowClasses = classNames('panel-dialog-window', { 'mosaic': this.showMosaic });\n        const titleClasses = classNames('panel-dialog-title', [ `panel-dialog-${this.props.mode}-color` ]);\n        return (\n            <div data-test-id=\"dialog-wrapper\" className={ classNames(this.props.className, 'panel-dialog') } onClick={ this.onClickOutsideDialog }>\n                <div data-test-id=\"dialog-window\" className={ windowClasses } ref={ this.setDialogElement } tabIndex=\"-1\">\n                    {this.props.banner}\n                    { this.mosaicContainer }\n                    <div className=\"panel-dialog-container\">\n                        <div className=\"panel-dialog-divider-container\">\n                            <div className=\"panel-dialog-divider\"/>\n                        </div>\n                        { this.props.title && (\n                            <div className=\"panel-dialog-header\">\n                                <div data-test-id=\"dialog-title\" className={ titleClasses }>{ this.props.title }</div>\n                                { this.icon }\n                            </div>\n                        ) }\n                        <div className=\"panel-dialog-contents\">\n                            { this.props.children }\n                        </div>\n                        { this.props.showFooter && (\n                            <div data-test-id=\"dialog-footer\" className=\"panel-dialog-footer\">\n                                { this.footer }\n                            </div>\n                        )}\n                        {/* Get rid of below conditional rendering once https://jira.corp.adobe.com/browse/CCXC-17903 is Done */}\n                        {configuration.currentProduct.config.displayFloatingX && <button className=\"panel-dialog-floating-close\" onClick={this.onClickCancel}>\n                            <Icon id=\"Close\" height={20}></Icon>\n                        </button>}\n                    </div>\n                </div>\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { observer } from 'mobx-react';\nimport Heading from '@torq-native/react-spectrum/Heading';\nimport OverlayTrigger from '@torq-native/react-spectrum/OverlayTrigger';\nimport Tooltip from '@torq-native/react-spectrum/Tooltip';\nimport Button from '@torq-native/react-spectrum/Button';\nimport { translate } from 'app/js/managers/translationManager';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport BaseDialog from 'app/js/components/dialogs/BaseDialog';\nimport environment from 'app/js/environment';\n\n@observer\nexport default class CreateOrPublishLibraryDialog extends React.Component {\n\n    static dialogName = 'createOrPublishLibrary';\n\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        close: PropTypes.func // Callback for closing the dialog (dialogManager.closeDialog())\n    };\n\n    get publishState() {\n        return this.context.libraryManager.publishState;\n    }\n\n    onCreate = () => {\n        this.context.dialogManager.openDialog('createLibrary');\n    }\n\n    get createSection() {\n        return this.getSection({\n            id: 'create',\n            header: this.getHeader({ title: 'DL_CREATE_PUBLISH_CREATE_TITLE' }),\n            items: this.getBulletItems([\n                { id: 'create-1', label: 'DL_CREATE_PUBLISH_CREATE_BULLET_1' },\n                { id: 'create-2', label: 'DL_CREATE_PUBLISH_CREATE_BULLET_2' }\n            ]),\n            message: 'DL_CREATE_PUBLISH_CREATE_MESSAGE',\n            action: this.getAction({ variant: 'secondary', label: 'DL_CREATE_PUBLISH_CREATE_ACTION', onClick: this.onCreate })\n        });\n    }\n\n    get disabledMessage() {\n        return {\n            OFFLINE: 'DL_LIBRARY_MANAGER_DOCUMENT_LIBRARY_OFFLINE',\n            READ_ONLY: 'DL_LIBRARY_MANAGER_DOCUMENT_LIBRARY_READ_ONLY',\n            QUOTA: 'DL_OVER_QUOTA_LIBRARY_ERROR_BODY',\n            EMPTY: 'DL_LIBRARY_MANAGER_DOCUMENT_LIBRARY_EMPTY',\n            MISSING_STORAGE: 'DL_SAVE_CLOUD_DOC_MESSAGE',\n            UPGRADE: 'DL_LIBRARY_MANAGER_DOCUMENT_LIBRARY_UPGRADE_TOOLTIP'\n        }[this.publishState.disabledStatus];\n    }\n\n    onPublish = () => {\n        this.props.close();\n        this.context.documentActions.publish(this.context.libraryManager.documentAssetsContainer).catch(() => {});\n    }\n\n    get publishSection() {\n        const disabled = !this.publishState.canPublish || this.publishState.canUpgrade;\n        const tooltip = this.disabledMessage;\n        const canUpgrade = this.publishState.canUpgrade;\n\n        return this.getSection({\n            id: canUpgrade ? 'upgrade' : 'publish',\n            header: this.getHeader({ label: 'DL_NEW', title: 'DL_CREATE_PUBLISH_PUBLISH_TITLE' }),\n            items: this.getBulletItems([\n                { id: 'publish-1', label: 'DL_CREATE_PUBLISH_PUBLISH_BULLET_1' },\n                { id: 'publish-2', label: 'DL_CREATE_PUBLISH_PUBLISH_BULLET_2' }\n            ]),\n            message: 'DL_CREATE_PUBLISH_PUBLISH_MESSAGE',\n            action: this.getAction({ variant: 'cta', label: 'DL_CREATE_PUBLISH_PUBLISH_ACTION', onClick: this.onPublish, disabled, tooltip })\n        });\n    }\n\n    getHeader({ title }) {\n        return (\n            <div className=\"create-publish-section-header\">\n                <Heading variant=\"subtitle1\" data-test-id=\"create-publish-section-title\">\n                    {translate(title)}\n                </Heading>\n            </div>\n        );\n    }\n\n    getBulletItems(items) {\n        return (\n            <div className={classNames({ 'uxp-bullet-list': !environment.supportsCSSListItem })}>\n                {items.map(({ label, id }) => (\n                    <div key={id} className=\"dialog-bullet-item\" data-test-id={`create-publish-section-item-${id}`}>\n                        {translate(label)}\n                    </div>\n                ))}\n            </div>\n        );\n    }\n\n    getAction({ variant, label, onClick, disabled, tooltip }) {\n        // A tooltip should only be shown when the button is disabled.\n        return (\n            <div className=\"create-publish-section-action\" data-test-id=\"create-publish-section-action\">\n                <OverlayTrigger boundariesElement=\"container\" placement=\"top\" trigger={[ 'hover', 'focus' ]} disabled={ !disabled }>\n                    <Button\n                        data-test-id=\"create-publish-section-action-button\"\n                        className={classNames('panel-dialog-button', variant, { disabled })}\n                        disabled={disabled}\n                        onClick={onClick}\n                        label={translate(label)}\n                        variant={variant}\n                        // RS flag to fix some UXP bugs.\n                        uxpUseNative={false}\n                    />\n                    <Tooltip ref={node => (this.tooltipRef = node)}>\n                        {/* Explain the reason for unavailability, it will be either a network or access issue */}\n                        { translate(tooltip) }\n                    </Tooltip>\n                </OverlayTrigger>\n            </div>\n        );\n    }\n\n    getSection({ id, header, items, message, action }) {\n        return (\n            <div className={classNames('create-publish-section', id)} data-test-id={`create-publish-section-${id}`}>\n                {header}\n                {items}\n                <span className=\"create-publish-section-message\" data-test-id=\"create-publish-section-message\">\n                    {translate(message)}\n                </span>\n                {action}\n            </div>\n        );\n    }\n\n    render() {\n        return (\n            <BaseDialog title={translate('DL_CREATE_DESIGN_LIBRARY')} className=\"panel-dialog-create-publish-library\" close={ this.props.close }>\n                <div className=\"create-publish-body\">\n                    { this.createSection }\n                    { this.publishSection }\n                </div>\n            </BaseDialog>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport classNames from 'classnames';\nimport { observable, computed } from 'mobx';\nimport Wait from '@torq-native/react-spectrum/Wait';\nimport Heading from '@torq-native/react-spectrum/Heading';\nimport Tooltip from '@torq-native/react-spectrum/Tooltip';\nimport OverlayTrigger from '@torq-native/react-spectrum/OverlayTrigger';\nimport BaseDialog from 'app/js/components/dialogs/BaseDialog';\nimport { translate } from 'app/js/managers/translationManager';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport LibraryListItem from 'app/js/components/LibraryListItem';\nimport DocumentElement from 'app/applications/SPRK/js/models/documentAssets/DocumentElement';\nimport localizedSorter from 'app/js/utils/localizedSorter';\nimport { getLocalizedDate } from 'app/js/managers/translationManager';\nimport SpectrumCheckbox from 'app/js/components/spectrum/SpectrumCheckbox';\nimport HTMLText from 'app/js/components/HTMLText';\nimport Icon from 'app/js/components/Icon';\nimport environment from 'app/js/environment';\nimport ResolveBrokenLinksDialog from 'app/js/components/dialogs/ResolveBrokenLinksDialog';\n\n/*\n * Resolve broken links by allowing the user to pick a library containing matching elements.\n*/\n@observer\nexport default class RelinkOrphanedDocumentAsset extends React.Component {\n\n    static dialogName = 'relinkDocumentAsset';\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        element: PropTypes.instanceOf(DocumentElement).isRequired, // The asset to relink.\n        onRelink: PropTypes.func.isRequired, // The function to call to perform the relink operation.\n        onCancel: PropTypes.func.isRequired, // The function to call when the user cancels the operation.\n        close: PropTypes.func.isRequired // Callback for closing the dialog (dialogManager.closeDialog())\n    };\n\n    @observable.ref _selectedLibrary;\n    @observable.ref _relinkableAssetsMap = new Map();\n    @observable.ref _relinkableLibrariesMap = new Map();\n    @observable _relinkAdditional = false;\n\n    componentDidMount() {\n        this.context.libraryManager.getRelinkableAssets().then(({ assets, libraries }) => {\n            this._relinkableAssetsMap = assets;\n            this._relinkableLibrariesMap = libraries;\n        });\n    }\n\n    setSelectedLibrary = library => {\n        // Auto-toggle the relink-additional option, if applicable for the selected library\n        const additionalAvailable = !!(this.getRelinkCandidatesInLibrary(library).length - 1);\n        this.setRelinkAdditional(additionalAvailable);\n        this._selectedLibrary = library;\n    }\n\n    setRelinkAdditional = value => {\n        this._relinkAdditional = value;\n    }\n\n    get selectedLibrary() {\n        return this._selectedLibrary;\n    }\n\n    get relinkAdditional() {\n        return this._relinkAdditional;\n    }\n\n    @computed get isLoading() {\n        // We know we're done with the lookup if the asset is in the map.\n        return !this._relinkableAssetsMap.get(this.props.element.id);\n    }\n\n    // The libraries that the given asset has relink candidates in.\n    @computed get relinkableLibraries() {\n        const relinkCandidatesForAsset = this._relinkableAssetsMap.get(this.props.element.id);\n        if (!relinkCandidatesForAsset || !relinkCandidatesForAsset.length) { return []; }\n        return localizedSorter.sortByModified(relinkCandidatesForAsset.map(({ element }) => element.library));\n    }\n\n    // The number of broken links that could be resolved by relinking to this library.\n    getRelinkCandidatesInLibrary(library) {\n        return this._relinkableLibrariesMap.get(library.id) || [];\n    }\n\n    onRelink = () => {\n        const selectedRelinkCandidates = this.getRelinkCandidatesInLibrary(this.selectedLibrary);\n        // Relink all matching assets to the library unless the user only wants to relink the one asset.\n        const linksToCreate = this.relinkAdditional ? selectedRelinkCandidates : [ selectedRelinkCandidates.find(({ asset }) => asset === this.props.element) ];\n        this.props.onRelink(linksToCreate);\n        this.props.close();\n    }\n\n    onCancel = () => {\n        this.props.onCancel();\n        this.props.close();\n    }\n\n    get loadingSpinner() {\n        return (\n            <div className=\"loading-container\">\n                <Wait size=\"L\" className=\"loading\" data-test-id=\"relink-orphan-asset-loading\" />\n            </div>\n        );\n    }\n\n    getNameColumn() {\n        return (\n            <div className=\"library-list-item-name-container\">\n                {this.getColumnHeader({ id: 'name', label: 'DL_LIBRARIES', className: 'library-list-item-name' })}\n            </div>\n        );\n    }\n\n    getSharingColumn() {\n        return (\n            <div className=\"library-list-item-icon-container\">\n                <div className=\"library-list-item-sharing-container\">\n                    {this.getColumnHeader({ id: 'sharing', label: 'DL_MEMBERS', className: 'library-list-item-sharing' })}\n                </div>\n            </div>\n        );\n    }\n\n    getModifiedDateColumn(content) {\n        return (\n            <span className=\"library-list-item-modified\" data-test-id=\"library-list-item-modified\">\n                {content}\n            </span>\n        );\n    }\n\n    getBrokenLinksColumn(content) {\n        return (\n            <span className=\"library-list-item-broken-links\" data-test-id=\"library-list-item-broken-links\">\n                {content}\n            </span>\n        );\n    }\n\n    getLibraryItem = library => {\n        const key = `${library.id}${library.ownerType === 'org' ? '-team' : ''}`;\n        const classnames = classNames('orphaned-library-list-item', { 'selected': this.selectedLibrary?.id === library.id });\n        const modified = getLocalizedDate(new Date(library.modified), true);\n        const resolvableLinks = this.getRelinkCandidatesInLibrary(library);\n        return (\n            <div key={key} className={ classnames } onClick={ () => this.setSelectedLibrary(library) }>\n                <LibraryListItem library={library} disableContextMenu disableEditableName allowNavigation={false} allowLongDoubleClick={false} sharingIconOnly={false} >\n                    {this.getModifiedDateColumn(modified)}\n                    {this.getBrokenLinksColumn(resolvableLinks.length)}\n                </LibraryListItem>\n            </div>\n        );\n    }\n\n    getColumnHeader({ id, label, className }) {\n        return (\n            <Heading data-test-id={`library-list-header-column-${id}`} className={classNames('library-list-column-header', className)} variant=\"subtitle3\">\n                {translate(label).toLocaleUpperCase(environment.getLocale())}\n            </Heading>\n        );\n    }\n\n    wrapWithLibrariesListItemContainer(content) {\n        // The header columns should get all the same styles as their respective library item columns.\n        return (\n            <div className=\"orphaned-library-list orphaned-asset-library-list-header\">\n                <div className=\"orphaned-library-list-item\">\n                    <div className=\"library-list-item-container\">\n                        {content}\n                    </div>\n                </div>\n            </div>\n        );\n    }\n\n    @computed get brokenLinksColumnHeader() {\n        return this.getBrokenLinksColumn(\n            <div className=\"broken-links-column-header-container\">\n                {this.getColumnHeader({ id: 'broken-links', label: 'DL_BROKEN_LINKS' })}\n                <OverlayTrigger boundariesElement=\"container\" placement=\"top\" trigger={[ 'hover', 'focus' ]}>\n                    <div data-test-id=\"broken-links-info-icon-container\">\n                        <Icon id=\"InfoOutline\" height={ 16 } />\n                    </div>\n                    <Tooltip variant=\"info\" ref={node => (this.tooltipRef = node)}>\n                        {translate('DIALOG_ORPHAN_ASSET_RELINK_BROKEN_LINKS_TOOLTIP')}\n                    </Tooltip>\n                </OverlayTrigger>\n            </div>\n        );\n    }\n\n    @computed get relinkableLibrariesHeader() {\n        return this.wrapWithLibrariesListItemContainer((\n            <div className=\"library-list-item\">\n                {this.getNameColumn()}\n                {this.getSharingColumn()}\n                {this.getModifiedDateColumn(this.getColumnHeader({\n                    id: 'modified', label: 'DL_LAST_MODIFIED'\n                }))}\n                {this.brokenLinksColumnHeader}\n            </div>\n        ));\n    }\n\n    @computed get relinkableLibrariesPicker() {\n        return (\n            <div className=\"orphaned-asset-library-picker\">\n                <div className=\"orphaned-asset-library-list-container\">\n                    {this.relinkableLibrariesHeader}\n                    <div className=\"orphaned-library-list\">\n                        {this.relinkableLibraries.map(this.getLibraryItem)}\n                    </div>\n                </div>\n                {this.relinkAdditionalMessage}\n            </div>\n        );\n    }\n\n    @computed get relinkAdditionalMessage() {\n        // Subtract the relink target of this dialog since this is messaging for _additional_ links.\n        const additionalLinksCount = this.selectedLibrary ? this.getRelinkCandidatesInLibrary(this.selectedLibrary).length - 1 : 0;\n        const singleLinkLabel = 'DIALOG_ORPHAN_ASSET_RELINK_ADDITIONAL';\n        const multipleLinkLabel = additionalLinksCount === 1 ? 'DIALOG_ORPHAN_ASSET_RELINK_ADDITIONAL_SINGULAR' : 'DIALOG_ORPHAN_ASSET_RELINK_ADDITIONAL_NUM';\n        const label = additionalLinksCount > 0 ? multipleLinkLabel : singleLinkLabel;\n        // Disable if the user hasn't picked a library or if there are no actual additional links the library would resolve.\n        const disabled = !this.selectedLibrary || additionalLinksCount === 0;\n        const onToggle = () => !disabled && this.setRelinkAdditional(!this.relinkAdditional);\n\n        return (\n            <div data-test-id=\"relink-orphan-relink-additional-message\" className={classNames('orphaned-asset-relink-additional-container', { disabled })} onClick={onToggle}>\n                <SpectrumCheckbox checked={this.relinkAdditional} disabled={disabled} />\n                {translate(label, { count: additionalLinksCount })}\n            </div>\n        );\n    }\n\n    @computed get dialogData() {\n        if (this.isLoading) {\n            return {\n                title: translate('DIALOG_ORPHAN_ASSET_RELINK_TITLE_LOADING'),\n                messageLabel: 'DIALOG_ORPHAN_ASSET_RELINK_MESSAGE_LOADING',\n                body: this.loadingSpinner,\n                // Ensure a button isn't rendered.\n                ctaButton: { label: null }\n            };\n        }\n        // Relinkable libraries.\n        return {\n            title: translate('DIALOG_ORPHAN_SELECT_TITLE'),\n            messageLabel: 'DIALOG_ORPHAN_ASSET_RELINK_MESSAGE_MATCH',\n            body: this.relinkableLibrariesPicker,\n            ctaButton: {\n                label: translate('DIALOG_ORPHAN_ASSET_RELINK_CONFIRM'),\n                onClick: this.onRelink,\n                disabled: !this.selectedLibrary\n            }\n        };\n    }\n\n    @computed get message() {\n        return (\n            <div className=\"relink-orphan-asset-message\" data-test-id=\"relink-orphan-asset-message\">\n                <HTMLText html={translate(this.dialogData.messageLabel, { name: this.props.element.name })} />\n            </div>\n        );\n    }\n\n    render() {\n        if (!this.isLoading && !this.relinkableLibraries.length) {\n            // No relink matches found. Show standard missing link dialog.\n            return <ResolveBrokenLinksDialog element={this.props.element} close={this.onCancel} />;\n        }\n        return (\n            <BaseDialog\n                title={this.dialogData.title}\n                okButtonText={this.dialogData.ctaButton.label}\n                onClickOK={this.dialogData.ctaButton.onClick}\n                okButtonEnabled={!this.dialogData.ctaButton.disabled}\n                onClickCancel={this.onCancel}\n                mode=\"normal\"\n                className=\"panel-dialog-relink-orphan-asset wide\"\n            >\n                <div className=\"panel-dialog-layout-100\" data-test-id=\"relink-orphan-asset\">\n                    {this.message}\n                    {this.dialogData.body}\n                </div>\n            </BaseDialog>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport BaseDialog from './BaseDialog';\nimport Icon from 'app/js/components/Icon';\nimport { translate } from 'app/js/managers/translationManager';\nimport classNames from 'classnames';\nimport environment from 'app/js/environment';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\n\n/*\n * If the document points to a library, but that library doesn't point back, give the option to relink it (steal it from the other doc) or create a new library.\n*/\n@observer\nexport default class RelinkDocumentLibraryDialog extends React.Component {\n    static contextType = LibrariesContext;\n    static dialogName = 'relinkDocumentLibrary';\n\n    @observable showRelinkWarning = false;\n\n    static propTypes = {\n        onRelinkChoice: PropTypes.func.isRequired,\n        close: PropTypes.func // Callback for closing the dialog (dialogManager.closeDialog())\n    };\n\n    handleCreateNew = () => {\n        // Publish to a new library.\n        this.props.onRelinkChoice('createNew');\n        this.props.close();\n    }\n\n    handlePublish = () => {\n        // Overwrite the existing library.\n        this.props.onRelinkChoice('relink');\n        this.props.close();\n    }\n\n    openRelinkOrphanDialog = () => {\n        // If there are libraries that point to this document that the document does not point back to, give option to relink one of them\n        return this.context.documentActions.relinkDocumentToOrphanedLibrary(this.context.libraryManager.documentAssetsContainer);\n    }\n\n    // Document points to this document library, but the library points to a different document\n    get relinkableLibrary() { return this.context.libraryManager.relinkableLibrary; }\n\n    // Has libraries that point to this document, but document doesn't point back\n    get canRelinkOrphans() {\n        return !!this.context.libraryManager.orphanedLibraries.length;\n    }\n\n    get dialogData() {\n        if (!this.relinkableLibrary) {\n            if (this.canRelinkOrphans) {\n                return {\n                    mode: 'normal', // makes primary button grey\n                    title: 'DL_RELINK_DOCUMENT_LIBRARY_MISSING_LIBRARY_HEADING', // You don't have access to the existing library\n                    message: 'DL_RELINK_DOCUMENT_LIBRARY_CREATE_NEW_OR_ORPHAN_MESSAGE',\n                    primaryLabel: 'DIALOG_ORPHAN_SELECT_RELINK',\n                    primaryHandler: this.openRelinkOrphanDialog,\n                    secondaryLabel: 'DL_RELINK_DOCUMENT_LIBRARY_CREATE_NEW',\n                    secondaryHandler: this.handleCreateNew,\n                    messageBullets: [ { id: 'bullet-broken-links', label: 'DL_RELINK_DOCUMENT_LIBRARY_MESSAGE_BROKEN_LINKS' }, { id: 'bullet-collaborators', label: 'DL_RELINK_DOCUMENT_LIBRARY_MESSAGE_COLLABORATORS' } ]\n                };\n            }\n\n            return {\n                mode: 'warning', // makes primary button red\n                title: 'DL_RELINK_DOCUMENT_LIBRARY_MISSING_LIBRARY_HEADING', // You don't have access to the existing library\n                message: 'DL_RELINK_DOCUMENT_LIBRARY_CREATE_NEW_MESSAGE',\n                primaryLabel: 'DL_RELINK_DOCUMENT_LIBRARY_CREATE_NEW',\n                primaryHandler: this.handleCreateNew,\n                messageBullets: [ { id: 'bullet-broken-links', label: 'DL_RELINK_DOCUMENT_LIBRARY_MESSAGE_BROKEN_LINKS' }, { id: 'bullet-collaborators', label: 'DL_RELINK_DOCUMENT_LIBRARY_MESSAGE_COLLABORATORS' } ]\n            };\n        }\n        if (!this.relinkableLibrary.isWritable) {\n            return {\n                mode: 'warning',\n                title: 'DL_RELINK_DOCUMENT_LIBRARY_READ_ONLY_HEADING', // You don't have permission to edit this library\n                message: 'DL_RELINK_DOCUMENT_LIBRARY_READ_ONLY_INFO',\n                primaryLabel: 'DL_RELINK_DOCUMENT_LIBRARY_CREATE_NEW',\n                primaryHandler: this.handleCreateNew,\n            };\n        }\n        if (this.showRelinkWarning) {\n            return {\n                mode: 'warning',\n                title: 'DL_RELINK_DOCUMENT_LIBRARY_HEADING', // Publish document assets to existing library\n                message: 'DL_RELINK_DOCUMENT_LIBRARY_WARNING',\n                primaryLabel: 'DL_RELINK_DOCUMENT_LIBRARY_PUBLISH',\n                primaryHandler: this.handlePublish,\n            };\n        }\n        return {\n            mode: 'normal',\n            title: 'DL_RELINK_DOCUMENT_LIBRARY_HEADING', // Publish document assets to existing library\n            message: 'DL_RELINK_DOCUMENT_LIBRARY_INFO',\n            primaryLabel: 'DL_RELINK_DOCUMENT_LIBRARY_CONTINUE',\n            primaryHandler: () => (this.showRelinkWarning = true),\n            secondaryLabel: 'DL_RELINK_DOCUMENT_LIBRARY_CREATE_NEW',\n            secondaryHandler: this.handleCreateNew,\n        };\n    }\n\n    _getBullets(bullets) {\n        if (!bullets) { return; }\n        return (\n            <div className={classNames({ 'uxp-bullet-list': !environment.supportsCSSListItem })}>\n                {\n                    bullets.map((bullet) => {\n                        return <div className=\"dialog-bullet-item\" key={bullet.id}>{` ${translate(bullet.label)}`}</div>;\n                    })\n                }\n            </div>\n        );\n    }\n\n    render() {\n\n        return (\n            <BaseDialog\n                className=\"panel-dialog-relink-document-library\"\n                mode={ this.dialogData.mode}\n                title={ translate(this.dialogData.title) }\n                okButtonText={ translate(this.dialogData.primaryLabel) }\n                secondaryButtonText={ translate(this.dialogData.secondaryLabel) }\n                onClickOK={ this.dialogData.primaryHandler }\n                onClickSecondary={ this.dialogData.secondaryHandler }\n                onClickCancel={ () => this.props.close() }\n            >\n                <div data-test-id=\"relink-confirm-message\" className=\"panel-dialog-layout-100\">\n                    { this.showRelinkWarning && (\n                        <div className=\"dialog-warning destructive\">\n                            <Icon id=\"Alert\" height={ 14 }/>\n                            <div className=\"warning-message-title\">{ translate('DL_CANNOT_UNDO_WARNING') }</div>\n                        </div>\n                    ) }\n                    { translate(this.dialogData.message) }\n                    { this.dialogData.messageBullets && this._getBullets(this.dialogData.messageBullets) }\n                </div>\n            </BaseDialog>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport BaseDialog from './BaseDialog';\nimport { translate } from 'app/js/managers/translationManager';\nimport classNames from 'classnames';\nimport LibraryListItem from './../LibraryListItem';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport localizedSorter from 'app/js/utils/localizedSorter';\n\n/*\n    Relink document to one of its orphaned document libraries through this picker.\n*/\n@observer\nexport default class RelinkOrphanedDocumentLibraryDialog extends React.Component {\n    static dialogName = 'relinkOrphanedDocumentLibrary';\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        relinkToOrphanLibrary: PropTypes.func.isRequired,\n        close: PropTypes.func // Callback for closing the dialog (dialogManager.closeDialog())\n    };\n\n    // Document libraries that point to this document, but it doesn't point to them\n    get orphanedLibraries() {\n        return localizedSorter.sortByModified(this.context.libraryManager.orphanedLibraries); // most recent first\n    }\n\n    // we assume that this dialog is only ever shown if there is at least one orphaned library.\n    @observable selectedLibrary = undefined;\n    @observable showConfirmationDialog = false;\n\n    get dialogData() {\n        if (this.showConfirmationDialog) {\n            return {\n                title: 'DIALOG_ORPHAN_RELINK_TITLE',\n                primaryLabel: 'DIALOG_ORPHAN_RELINK_CONTINUE',\n                message: 'DIALOG_ORPHAN_RELINK_MESSAGE',\n                primaryHandler: () => {\n                    this.props.relinkToOrphanLibrary(this.selectedLibrary);\n                    this.props.close();\n                }\n            };\n        }\n\n        return {\n            title: 'DIALOG_ORPHAN_SELECT_TITLE',\n            primaryLabel: 'DIALOG_ORPHAN_SELECT_RELINK',\n            body: this.orphanedLibrariesPicker,\n            primaryHandler: () => {\n                this.showConfirmationDialog = true;\n            }\n        };\n    }\n\n    get orphanedLibrariesPicker() {\n        return <div className=\"orphaned-library-list\">\n            {\n                this.orphanedLibraries.map((library, i) => {\n                    const classnames = classNames({\n                        'orphaned-library-list-item': true,\n                        'selected': this.selectedLibrary && this.selectedLibrary.id === library.id\n                    });\n\n                    return (\n                        <div className={ classnames } key={i} onClick={ () => { this.selectedLibrary = library; } }>\n                            <LibraryListItem library={library} disableContextMenu disableEditableName showCreatedDate allowNavigation={false} allowLongDoubleClick={false} sharingIconOnly={false} />\n                        </div>\n                    );\n                })\n            }\n        </div>;\n    }\n\n    render() {\n        return (\n            <BaseDialog\n                title={ translate(this.dialogData.title) }\n                okButtonText={ translate(this.dialogData.primaryLabel) }\n                onClickOK={ this.dialogData.primaryHandler }\n                onClickCancel={ () => this.props.close() }\n                okButtonEnabled={ !!this.selectedLibrary }\n                mode=\"normal\"\n                className=\"wide\"\n            >\n                <div data-test-id=\"relink-orphan-library\" className=\"panel-dialog-layout-100\">\n                    { this.dialogData.body || translate(this.dialogData.message) }\n                </div>\n            </BaseDialog>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { observer } from 'mobx-react';\nimport { observable, computed, when } from 'mobx';\nimport CCLibrary from '@torq-native/react-spectrum/Icon/CCLibrary';\nimport Icon from 'app/js/components/Icon';\nimport environment from 'app/js/environment';\nimport BaseDialog from 'app/js/components/dialogs/BaseDialog';\nimport { translate } from 'app/js/managers/translationManager';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport SpectrumCheckbox from 'app/js/components/spectrum/SpectrumCheckbox';\nimport { openMigrateXDToCCLibrariesURL, openAskCollaboratorsForAccessURL } from 'app/js/utils/linkUtils';\nimport DocumentElement from 'app/applications/SPRK/js/models/documentAssets/DocumentElement';\nimport metrics from 'app/js/interface/metrics';\nimport Wait from '@torq-native/react-spectrum/Wait';\n\n/*\n    Resolve broken asset (document element) links application (uxp) dialog\n\n    Application Dialogs are UXP modal dialogs in XD.\n    UXP modal dialogs in XD have a fixed height and width, which will be set in this component.\n\n    Though this dialog is registered with the dialog manager, it is only used by the ApplicationDialogView,\n    which does not go through the dialog manager. There's no need for the application dialogs to go through\n    the dialog manager because application dialogs have blocking UI and UXP only allows one at a time,\n    so there's no need for panel dialog state management.\n    When we use the words \"Dialog\" or \"Module\" followed by a letter, we're referencing the language in the design specs:\n    https://xd.adobe.com/view/f62260f1-2ef9-4914-8373-d6feee1c86fe-a371/screen/43c645f0-34f6-442d-b633-a516800383bf/\n*/\n\n@observer\nexport default class ResolveBrokenLinksDialog extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static dialogName = 'resolveBrokenLinks';\n\n    static defaultProps = {\n        fetchInvitations: true\n    };\n\n    static propTypes = {\n        element: PropTypes.instanceOf(DocumentElement), // The asset with a broken link. If none is provided, a dialog for all missing links will be shown.\n        close: PropTypes.func, // Callback for closing the dialog (dialogManager.closeDialog())\n        fetchInvitations: PropTypes.bool // We only should turn this off if we fetched right before hand (e.g. upon load, we fetch before showing the summary dialog)\n    };\n\n    @observable _librariesToFollow = new Map();\n    // Accept invites relevant to the current document by default.\n    @observable _shouldAcceptInvites = !!this.pendingInviteAssets.length;\n    @observable _isLoading = false;\n\n    componentDidMount() {\n        if (this.shouldFetchInvitations) {\n            this._isLoading = true;\n\n            // There is no invitations listener, so if an invitation comes in while throttling mouseover calls on linkBadge,\n            // we at least want to make one final forced fetch upon click.\n            // However, this is only necessary for an element where the link state is Missing Library or Pending Invite.\n            // Other states wont be affected by invitations.\n            this.context.libraryManager.fetchLibraryInvitations(true)\n                .finally(() => {\n                    this._shouldAcceptInvites = !!this.pendingInviteAssets.length;\n                    this._isLoading = false;\n                });\n        }\n\n        // All libraries are selected by default.\n        Object.keys(this.pendingFollowLibraries).forEach(libraryId => {\n            this._librariesToFollow.set(libraryId, true);\n        });\n\n        this._dispose = when(() => !this._dialogHasMissingLinks, () => {\n            // If all links relevant to this dialog got resolved in some other Libraries experience\n            // (i.e from another document or by a co-editor), close the dialog.\n            this.props.close();\n        });\n    }\n\n    componentWillUnmount() {\n        this._dispose();\n    }\n\n    get shouldFetchInvitations() {\n        return this.isOnline && this.props.fetchInvitations && (this.element.isPendingInvite || this.element.isMissingLibrary);\n    }\n\n    // If no element is provided, a view showing all broken links in the document and their resolution steps will be shown.\n    get showSummaryView() {\n        return !this.props.element;\n    }\n\n    get assetsContainer() {\n        return this.element.library;\n    }\n\n    // The number of missing links relevant to this dialog, as opposed to all missing links in the document,\n    @computed get _dialogHasMissingLinks() {\n        return !!this.elements.find(element => element.isMissingLink || element.isDeprecatedLegacyDocumentLink);\n    }\n\n    get elements() {\n        // Single link dialogs\n        if (this.props.element) {\n            return [ this.props.element ];\n        }\n        // Summary dialog\n        return this.context.libraryManager.documentAssetsContainer.resolvableMissingLinks;\n    }\n\n    get element() {\n        // Used when we know we're only working with a single element and its link.\n        return this.elements[0];\n    }\n\n    get pendingInviteAssets() {\n        // Single link dialogs:\n        if (this.props.element) { return this.element.isPendingInvite && [ this.element ]; }\n        // Summary dialog:\n        return this.assetsContainer.resolvableMissingLinks.filter(element => element.isPendingInvite);\n    }\n\n    get shouldAcceptInvites() {\n        return this._shouldAcceptInvites;\n    }\n\n    get librariesToFollow() {\n        return this._librariesToFollow;\n    }\n\n    get isOnline() {\n        return this.context.libraryManager.isOnline;\n    }\n\n    get loadingSpinner() {\n        return (\n            <div className=\"loading-container\">\n                <Wait size=\"L\" className=\"loading\" data-test-id=\"resolve-broken-links-loading\" />\n            </div>\n        );\n    }\n\n    toggleShouldAcceptInvites = () => {\n        this._shouldAcceptInvites = !this._shouldAcceptInvites;\n    }\n\n    toggleFollowLibrary = libraryId => {\n        this._librariesToFollow.set(libraryId, !this._librariesToFollow.get(libraryId));\n    }\n\n    isLibrarySelected(libraryId) {\n        return !!this.librariesToFollow.get(libraryId);\n    }\n\n    resolveSelectedLinks = () => {\n        const elements = [];\n        this.selectedPendingFollowLibraries.forEach(({ brokenLinks }) => {\n            elements.push(...brokenLinks);\n        });\n        if (this.shouldAcceptInvites) {\n            elements.push(...this.pendingInviteAssets);\n        }\n        this.resolveLinks(elements);\n    }\n\n    resolveLinks(elements) {\n        this.context.documentActions.resolveLinks(elements);\n    }\n\n    // The set of libraries selected to be followed.\n    @computed get selectedPendingFollowLibraries() {\n        const selectedToFollow = [];\n        Object.keys(this.pendingFollowLibraries).forEach(libraryId => {\n            if (this.isLibrarySelected(libraryId)) {\n                selectedToFollow.push(this.pendingFollowLibraries[libraryId]);\n            }\n        });\n        return selectedToFollow;\n    }\n\n    // The number of libraries that will be added if the selected libraries are followed and pending libraries accepted.\n    @computed get operationCount() {\n        const invitesToAcceptCount = this.shouldAcceptInvites ? this.pendingInvites.size : 0;\n        return invitesToAcceptCount + this.selectedPendingFollowLibraries.length;\n    }\n\n    @computed get pendingFollowLibraries() {\n        // Avoid listing duplicate libraries.\n        const sourceLibraries = {};\n        this.elements.forEach(element => {\n            if (element.isPendingFollow) {\n                const libraryName = element.cachedLinkedLibraryName;\n                const libraryId = element.cachedLinkedLibraryId;\n                if (!sourceLibraries[libraryId]) {\n                    sourceLibraries[libraryId] = { libraryName, brokenLinks: [] };\n                }\n                sourceLibraries[libraryId].brokenLinks.push(element);\n            }\n        });\n        return sourceLibraries;\n    }\n\n    @computed get deprecatedSourceDocuments() {\n        // Avoid listing duplicate documents.\n        const sourceDocuments = {};\n        this.elements.forEach(element => {\n            if (element.isDeprecatedLegacyDocumentLink) {\n                const documentName = element.linkedDocumentName;\n                const documentId = element.linkReference;\n                if (!sourceDocuments[documentId]) {\n                    sourceDocuments[documentId] = { documentName, brokenLinks: [] };\n                }\n                sourceDocuments[documentId].brokenLinks.push(element);\n            }\n        });\n        return sourceDocuments;\n    }\n\n    get pendingInvites() {\n        return this.context.libraryManager.invitationsData;\n    }\n\n    getResolutionStep({ id, icon, label }) {\n        return (\n            <div className=\"panel-dialog-section-label-step\" data-test-id={`panel-dialog-section-label-step-${id}`}>\n                {translate(label)}{icon}\n            </div>\n        );\n    }\n\n    getSourceHeading({ id, label }) {\n        return (\n            <div className=\"panel-dialog-section-label\" data-test-id={`panel-dialog-section-label-${id}`}>\n                {translate(label)}\n            </div>\n        );\n    }\n\n    getSourceItem({ id, icon, className, label, checkbox, onClick }) {\n        return (\n            <div key={id} className={classNames('source-list-item', className)} onClick={onClick} data-test-id={`resolve-broken-links-source-item-${id}`}>\n                <div className=\"source-name-container\">\n                    <div className=\"source-icon\">{icon}</div>\n                    <span className=\"source-name\">{label}</span>\n                </div>\n                {checkbox && (\n                    <div className=\"source-checkbox\" data-test-id={`resolve-broken-links-source-item-checkbox-${id}`}>\n                        {checkbox}\n                    </div>\n                )}\n            </div>\n        );\n    }\n\n    getSourceDocumentItem = ([ documentId, { documentName, brokenLinks } ]) => {\n        // We only need one element to trigger \"open source\".\n        const element = brokenLinks[0];\n        // Can't open source file if it's missing.\n        const canOpenSource = !element.isMissingLegacyDocumentLink;\n        return this.getSourceItem({\n            id: `legacy-link-${documentId}`,\n            icon: <Icon id=\"XDFile\" height={ 16 } data-test-id=\"panel-dialog-section-content-xd-logo\"/>,\n            className: classNames('is-file', { disabled: !canOpenSource }),\n            label: documentName,\n            onClick: () => canOpenSource && environment.editInSource(element)\n        });\n    }\n\n    getSourceLibraryItem = ([ libraryId, { libraryName } ]) => {\n        const canToggle = this.showSummaryView;\n        return this.getSourceItem({\n            id: `library-link-${libraryId}`,\n            icon: <CCLibrary size=\"S\" data-test-id=\"panel-dialog-section-content-cc-libraries-logo\" />,\n            label: libraryName,\n            checkbox: canToggle && <SpectrumCheckbox checked={ this.isLibrarySelected(libraryId) } onChange={ () => this.toggleFollowLibrary(libraryId) } />\n        });\n    }\n\n    getLibraryInvitesItem = numInvites => {\n        const canToggle = this.showSummaryView;\n        const label = numInvites > 1 ? translate('DIALOG_RESOLVE_BROKEN_LINK_NUM_INVITES', { num: this.context.libraryManager.invitationsData.size }) : translate('DIALOG_RESOLVE_BROKEN_LINK_INVITE');\n        return this.getSourceItem({\n            id: `library-link-pending-invites`,\n            icon: <CCLibrary size=\"S\" data-test-id=\"panel-dialog-section-content-cc-libraries-logo\" />,\n            label,\n            checkbox: canToggle && <SpectrumCheckbox checked={ this.shouldAcceptInvites } onChange={ this.toggleShouldAcceptInvites } />\n        });\n    }\n\n    numberResolutionStep = (numStep, stepContent) => {\n        // This is a workaround for UXP not supporting HTML ordered lists (<ol>).\n        // Otherwise, the `getResolutionStep()` method would just render <li> items that would get numbered naturally\n        // https://jira.corp.adobe.com/browse/UXP-6072\n        const localizedNumStep = numStep.toLocaleString();\n        return (\n            <div key={localizedNumStep} className=\"panel-dialog-step-counter-container\" data-test-id={`resolve-broken-links-step-${numStep}`}>\n                <span className=\"panel-dialog-label-step-counter\">\n                    {`${localizedNumStep}.`}\n                </span>\n                {stepContent}\n            </div>\n        );\n    }\n\n    // Dialog C / Module C\n    @computed get legacyLinkInfo() {\n        const deprecatedSourceDocuments = Object.entries(this.deprecatedSourceDocuments);\n        if (!deprecatedSourceDocuments.length) { return; }\n\n        const id = 'resolve-broken-links-legacy-link-info';\n        return (\n            <div key={id} className=\"resolve-broken-links-info\" data-test-id={id}>\n                {this.showSummaryView\n                    ? this.getResolutionStep({\n                        id: 'open-sources',\n                        label: 'DIALOG_RESOLVE_BROKEN_LINK_STEP_OPEN_SOURCE',\n                        icon:  <Icon id=\"Info\" onClick={() => openMigrateXDToCCLibrariesURL()} className=\"open-sources-info-icon\" height={ 16 } />,\n                    })\n                    : this.getSourceHeading({ id: 'source-document', label: 'DIALOG_RESOLVE_BROKEN_LINK_SOURCE_FILE' })\n                }\n                <div className=\"source-list\" data-test-id=\"broken-links-source-documents-list\">\n                    {deprecatedSourceDocuments.map(this.getSourceDocumentItem)}\n                </div>\n            </div>\n        );\n    }\n\n    // Dialog B / Module A\n    @computed get pendingFollowInfo() {\n        const pendingFollowLibraries = Object.entries(this.pendingFollowLibraries);\n        if (!pendingFollowLibraries.length) { return; }\n\n        const id = 'resolve-broken-links-pending-follow-info';\n        return (\n            <div key={id} className=\"resolve-broken-links-info\" data-test-id={id}>\n                {this.showSummaryView\n                    ? this.getResolutionStep({ id: 'follow-libraries', label: 'DIALOG_RESOLVE_BROKEN_LINK_STEP_FOLLOW_LIBRARIES' })\n                    : this.getSourceHeading({ id: 'source-library', label: 'DIALOG_RESOLVE_BROKEN_LINK_SOURCE_LIB' })\n                }\n                <div className=\"source-list\" data-test-id=\"broken-links-pending-follow-list\">\n                    {pendingFollowLibraries.map(this.getSourceLibraryItem)}\n                </div>\n            </div>\n        );\n    }\n\n    // Dialog D / Module B\n    @computed get pendingInviteInfo() {\n        if (!this.pendingInviteAssets.length) { return; }\n\n        const id = 'resolve-broken-links-pending-invite-info';\n        return (\n            <div key={id} className=\"resolve-broken-links-info\" data-test-id={id}>\n                {this.getResolutionStep({ id: 'accept-invites', label: 'DIALOG_RESOLVE_BROKEN_LINK_STEP_ACCEPT_INVITATIONS' })}\n                <div className=\"source-list\" data-test-id=\"broken-links-pending-invites-list\">\n                    {this.getLibraryInvitesItem(this.pendingInvites.size)}\n                </div>\n            </div>\n        );\n    }\n\n    // Module D\n    get suggestRequestInvite() {\n        // When all else fails, ask collaborators to invite you to missing libraries.\n        const id = 'resolve-broken-links-request-invites';\n        return (\n            <div key={id} className=\"resolve-broken-links-info\" data-test-id={id}>\n                {this.getResolutionStep({ id: 'request-invites', label: 'DIALOG_RESOLVE_BROKEN_LINK_STEP_REQUEST_INVITATIONS' })}\n            </div>\n        );\n    }\n\n    get suggestMakeLocal() {\n        // Suggest the user make the asset local if they want to edit it.\n        const id = 'resolve-broken-links-make-local';\n        return (\n            <div key={id} className=\"resolve-broken-links-info\" data-test-id={id}>\n                {this.getResolutionStep({ id: 'make-local', label: 'DIALOG_RESOLVE_BROKEN_LINK_STEP_MAKE_LOCAL' })}\n            </div>\n        );\n    }\n\n    @computed get missingElementSteps() {\n        // Suggest that the user accept pending invitations and that they request invites to missing libraries.\n        const steps = [\n            // Note: The wording in this first step is a little incomplete.\n            // The library exists, just the element doesn't, so it's not a case where adding a library will relink for you.\n            // The element could, however, have been moved to another library, and once you get access to it, you can relink to that element.\n            { id: 'step-1', label: this.suggestRequestInvite },\n            { id: 'step-2', label: this.suggestMakeLocal }\n        ];\n\n        // This is a workaround for UXP not supporting HTML unordered lists we could use to render bullet points (<ul>).\n        // https://jira.corp.adobe.com/browse/UXP-6072\n        return (\n            <div className=\"resolve-broken-links-resolution-bullet-list\">\n                {steps.map((step) => (\n                    <div key={step.id} className=\"dialog-bullet-item\">\n                        {step.label}\n                    </div>\n                ))}\n            </div>\n        );\n    }\n\n    // Dialog A.\n    @computed get globalResolutionSteps() {\n        const assetsMissingLinkedLibrary = this.assetsContainer.missingLinks.filter(element => element.isMissingLibrary);\n\n        // Aggregate the info for all broken links.\n        const steps = [\n            this.pendingFollowInfo,\n            this.pendingInviteInfo,\n            this.legacyLinkInfo,\n            !!assetsMissingLinkedLibrary.length && this.suggestRequestInvite\n        ].filter(x => x);\n        if (steps.length === 1) { return steps; }\n\n        return steps.map((step, numStep) => this.numberResolutionStep(numStep + 1, step));\n    }\n\n    get isLoading() {\n        return this._isLoading;\n    }\n\n    @computed get dialogData() {\n        // Disable any button that requires a connection if offline, with explanatory tooltip\n        const offline = !this.isOnline;\n        const offlineTooltip = offline ? translate('DL_LIBRARY_MANAGER_DOCUMENT_LIBRARY_OFFLINE') : undefined;\n\n        if (this.isLoading) {\n            return {\n                title: translate('DIALOG_RESOLVE_BROKEN_LINK_TITLE'),\n                message: translate('DL_LOADING'),\n                resolutionInfo: this.loadingSpinner,\n                // Ensure a button isn't rendered.\n                ctaButton: { label: null }\n            };\n        }\n\n        if (this.showSummaryView) {\n            // Don't show a CTA button if there are no action items for the user;\n            // this is the case if all missing links are deprecated legacy document links.\n            const actionableLibraryLinks = this.pendingInvites.size + Object.keys(this.pendingFollowLibraries).length;\n\n            return {\n                title: translate('DIALOG_RESOLVE_BROKEN_LINKS_TITLE'),\n                message: translate('DIALOG_RESOLVE_BROKEN_LINK_MESSAGE_MULTIPLE_LINKS'),\n                resolutionInfo: this.globalResolutionSteps,\n                ctaButton: actionableLibraryLinks && {\n                    label: translate('DIALOG_RESOLVE_BROKEN_LINK_ADD_LIBRARIES', { count: this.operationCount }),\n                    onClick: this.resolveSelectedLinks,\n                    // Nothing to add if the user has unselected everything.\n                    disabled: this.operationCount === 0 || offline,\n                    tooltip: offlineTooltip\n                }\n            };\n        }\n\n        if (this.element.isPendingFollow) {\n            return {\n                title: translate('DIALOG_RESOLVE_BROKEN_LINK_TITLE'),\n                message: translate('DIALOG_RESOLVE_BROKEN_LINK_MESSAGE_ADD_LIB'),\n                resolutionInfo: this.pendingFollowInfo,\n                ctaButton: {\n                    label: translate('DIALOG_RESOLVE_BROKEN_CTA_ADD_LIBRARY'),\n                    onClick: () => this.resolveLinks([ this.element ]),\n                    disabled: offline,\n                    tooltip: offlineTooltip\n                },\n            };\n        }\n\n        if (this.element.isDeprecatedLegacyDocumentLink) {\n            // Disable \"open file\" if the user is missing the source file.\n            const ctaDisabled = this.element.isMissingLegacyDocumentLink || offline;\n            const ctaDisabledTooltip = ctaDisabled ? (this.element.isMissingLegacyDocumentLink ? translate('ASSET_LINK_RESTRICTED') : offlineTooltip) : undefined;\n            return {\n                title: translate('DIALOG_RESOLVE_BROKEN_LINK_TITLE'),\n                message: translate('DIALOG_RESOLVE_BROKEN_LINK_MESSAGE_RELINK_FILE'),\n                resolutionInfo: this.legacyLinkInfo,\n                ctaButton: {\n                    label: translate('DIALOG_RESOLVE_BROKEN_LINK_CTA_RELINK_FILE'),\n                    onClick: () => environment.editInSource(this.element),\n                    disabled: ctaDisabled,\n                    // Explain why the button is disabled.\n                    tooltip: ctaDisabledTooltip\n                },\n                secondaryButton: {\n                    label: translate('DL_LEARN_MORE'),\n                    onClick: () => openMigrateXDToCCLibrariesURL(),\n                    disabled: offline,\n                    tooltip: offlineTooltip\n                }\n            };\n        }\n\n        if (this.element.isPendingInvite) {\n            return {\n                title: translate('DIALOG_RESOLVE_BROKEN_LINK_TITLE'),\n                message: translate('DIALOG_RESOLVE_BROKEN_LINK_PENDING_MESSAGE'),\n                resolutionInfo: this.pendingInviteInfo,\n                ctaButton: {\n                    label: translate('ACCEPT_INVITES'),\n                    onClick: () => this.resolveLinks([ this.element ]),\n                    disabled: offline,\n                    tooltip: offlineTooltip\n                }\n            };\n        }\n\n        if (this.element.isMissingLibrary) {\n            return {\n                title: translate('DIALOG_RESOLVE_BROKEN_LINK_TITLE'),\n                message: translate('DIALOG_RESOLVE_BROKEN_LINK_MESSAGE'),\n                secondaryButton: {\n                    label: translate('DL_LEARN_MORE'),\n                    onClick: () => openAskCollaboratorsForAccessURL(),\n                    disabled: offline,\n                    tooltip: offlineTooltip\n                }\n            };\n        }\n\n        if (this.element.isMissingElement) {\n            return {\n                title: translate('DIALOG_CANT_RESOLVE_BROKEN_LINK_TITLE'),\n                message: translate('DIALOG_CANT_RESOLVE_BROKEN_LINK_MESSAGE'),\n                resolutionInfo: this.missingElementSteps,\n                // Ensure a CTA button isn't rendered.\n                ctaButton: { label: null },\n                secondaryButton: {\n                    label: translate('DL_UNLINK_ASSET'),\n                    onClick: () => {\n                        metrics.reportElementEvent('ResolveBrokenLinksDialog', 'Element', 'click', 'make-local', this.element);\n                        environment.unlinkAssets([ this.element ]);\n                    }\n                }\n            };\n        }\n\n        // TODO: Handle non-deprecated document links that are missing the asset but not the file: if (isLegacyDocumentLink && isBrokenLegacyDocumentLink) {}\n    }\n\n    get title() {\n        return this.dialogData.title;\n    }\n\n    get message() {\n        return this.dialogData.message;\n    }\n\n    get ctaButton() {\n        return this.dialogData.ctaButton;\n    }\n\n    get secondaryButton() {\n        return this.dialogData.secondaryButton;\n    }\n\n    get cancelButtonLabel() {\n        return this.showSummaryView ? translate('DL_CLOSE') : translate('DL_CANCEL');\n    }\n\n    get resolutionInfo() {\n        // Give the user context on how to resolve the broken link.\n        if (!this.dialogData.resolutionInfo) { return; }\n        return (\n            <div className=\"resolve-broken-links-resolution-info\" data-test-id=\"resolve-broken-links-resolution-info\">\n                {this.dialogData.resolutionInfo}\n            </div>\n        );\n    }\n\n    render() {\n        if (!this.dialogData) { return null; }\n        return (\n            <BaseDialog\n                title={this.title}\n                cancelButtonText={this.cancelButtonLabel}\n                secondaryButtonText={this.secondaryButton?.label}\n                secondaryButtonEnabled={!this.secondaryButton?.disabled}\n                secondaryButtonTooltip={this.secondaryButton?.tooltip}\n                onClickSecondary={this.secondaryButton?.onClick}\n                okButtonText={this.ctaButton?.label || ''}\n                okButtonEnabled={!this.ctaButton?.disabled}\n                okButtonTooltip={this.ctaButton?.tooltip}\n                onClickOK={this.ctaButton?.onClick}\n                mode=\"normal\"\n                close={this.props.close}\n                className=\"panel-dialog-resolve-broken-links\"\n            >\n                <div className=\"panel-dialog-layout-100\" data-test-id=\"resolve-broken-links\">\n                    <div data-test-id=\"resolve-broken-links-message\">\n                        {this.message}\n                    </div>\n                    {this.resolutionInfo}\n                </div>\n            </BaseDialog>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport configuration from 'app/js/config/configuration';\nimport classNames from 'classnames';\nimport ElementModel from 'app/js/models/ElementModel';\nimport Icon from 'app/js/components/Icon';\nimport { getStringLength, truncateString } from 'app/js/utils/stringUtils';\nimport Button from 'app/js/components/Button';\nimport { translate } from 'app/js/managers/translationManager';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport metrics from 'app/js/interface/metrics';\nimport environment from 'app/js/environment';\n\n@observer\nexport default class EditableDescription extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static defaultProps = {\n        allowLongDoubleClick: false,\n        iconHeight: 12,\n        className: 'default-editable-description',\n    };\n\n    static propTypes = {\n        element: PropTypes.instanceOf(ElementModel).isRequired,\n        placeholder: PropTypes.string.isRequired,\n        className: PropTypes.string,\n        allowLongDoubleClick: PropTypes.bool,\n        iconHeight: PropTypes.number\n    };\n\n    get isEditingDescription() {\n        return this.context.viewManager.editDescriptionElement && this.context.viewManager.editDescriptionElement.id === this.props.element.id;\n    }\n\n    get isReadOnly() {\n        return !this.context.viewState.isLibraryWritable(this.props.element.library);\n    }\n\n    get defaultValue() {\n        // Initial value of a description\n        return this.props.element.description || '';\n    }\n\n    get editBadge() {\n        return <div tabIndex=\"0\" data-test-id=\"editable-description-edit-icon\" className=\"editable-description-icon\" onClick={this.startEdit} onKeyDown={ (e) => this.handleKeyDown(e, this.startEdit) }><Icon id=\"Edit\" height={this.props.iconHeight} tabIndex=\"-1\"/></div>;\n    }\n\n    get deleteBadge() {\n        return <div tabIndex=\"0\" data-test-id=\"editable-description-delete-icon\" className=\"editable-description-icon editable-description-delete-icon\" onClick={this.deleteDescription} onKeyDown={ (e) => this.handleKeyDown(e, this.deleteDescription) }><Icon id=\"Delete\" height={this.props.iconHeight} tabIndex=\"-1\"/></div>;\n    }\n\n    get description() {\n        if (!this.props.element.description) {\n            return undefined;\n        }\n        const splitDesc = this.props.element.description.split('\\n');\n        const description = [];\n        for (let i = 0; i < splitDesc.length; i++) {\n            description.push(<span data-test-id={`editable-description-line-${i + 1}`} key={`line_${i}`}>{splitDesc[i]}</span>);\n            description.push(<br key={`break_${i}`}/>);\n        }\n        description.pop();\n        return description;\n    }\n\n    @observable charactersRemaining = configuration.NOTES_MAX_CHARACTER_COUNT;\n\n    finishEditing(cancelChanges = false) {\n        if (!this.descriptionInput) {\n            this.editTrigger = undefined;\n            return;\n        }\n\n        const newDescription = this.descriptionInput.value;\n\n        // Change the description in the element\n        if (!cancelChanges && newDescription !== this.props.element.description) {\n            let subtypePrefix = 'add';\n            if (!newDescription) {\n                subtypePrefix = 'delete';\n            } else if (this.props.element.description) {\n                subtypePrefix = 'edit';\n            }\n            metrics.setExtraEventMetrics('updateElement', {\n                subtype: `${subtypePrefix}-note`,\n                content: { category: 'Click' }\n            });\n            this.props.element.description = newDescription.trim();\n        }\n\n        this.editTrigger = undefined;\n        // Return to the uneditable state\n        this.context.viewManager.stopEditDescription();\n    }\n\n    startEdit = mouseEvent => {\n        mouseEvent.stopPropagation();\n\n        // if it is read only and start editing, don't do anything\n        if (this.isReadOnly) {\n            return;\n        }\n\n        // Set the initial value of characters remaining to use the length of the already existing description.\n        this.charactersRemaining = this.props.element.description ? configuration.NOTES_MAX_CHARACTER_COUNT - getStringLength(this.props.element.description) : configuration.NOTES_MAX_CHARACTER_COUNT;\n        this.context.viewManager.startEditDescription(this.props.element);\n    }\n\n    deleteDescription = mouseEvent => {\n        metrics.setExtraEventMetrics('updateElement', {\n            subtype: `delete-note`,\n            content: { category: 'Click' }\n        });\n        mouseEvent.stopPropagation();\n\n        // if it is read only and start editing, don't do anything\n        if (this.isReadOnly) {\n            return;\n        }\n\n        this.props.element.description = '';\n    }\n\n    handleInputKeyDown = keyEvent => {\n        // Handle enter and escape key events\n        if (keyEvent.key === 'Enter' && !environment.isComposingInputEvent(keyEvent)) { // Enter\n            if (!keyEvent.shiftKey) {\n                this.finishEditing();\n            }\n        } else if (keyEvent.key === 'Escape') { // Escape\n            this.finishEditing(true);\n        }\n\n        keyEvent.stopPropagation();\n    }\n\n    handleBlur = () => {\n        this.finishEditing(false);\n    }\n\n    onButtonPress = mouseEvent => {\n        mouseEvent.stopPropagation();\n        this.finishEditing(true);\n    }\n\n    onButtonMouseDown = event => {\n        // Prevent onBlur from happening when button is clicked\n        event.preventDefault();\n    }\n\n    handleInput = () => {\n        // textarea maxlength does not support surrogate pairs\n        this.descriptionInput.value = truncateString(this.descriptionInput.value, configuration.NOTES_MAX_CHARACTER_COUNT, false);\n\n        this.charactersRemaining = configuration.NOTES_MAX_CHARACTER_COUNT - getStringLength(this.descriptionInput.value);\n    }\n\n    setInputRef = input => {\n        this.descriptionInput = input;\n\n        // This is unfortunately the cleanest way to do this.\n        // If we do this in a reaction on isEditingDescription, we need to wait a tick for the descriptionInput to actually render\n        // If we do this in CDM and CDU it can be fired unexpectedly on any update (ex: a sync)\n        if (this.descriptionInput && !this.isReadOnly) {\n            // It's important to call .select() before .focus() to work around https://jira.corp.adobe.com/browse/UXP-16541.\n            // Due to UXP-16541, .select() fires a blur event on the input box, which won't happen if the input box doesn't have focus yet.\n            this.descriptionInput.select();\n            this.descriptionInput.focus();\n        }\n    }\n\n    setTextRef = ref => { this.descriptionText = ref; }\n\n    get descriptionButtons() {\n        return (\n            <div className=\"editable-description-buttons\">\n                <Button variant=\"cta\" data-test-id=\"editable-description-cancel-button\" className=\"editable-description-button\" onClick={() => this.finishEditing(true)} onMouseDown={this.onButtonMouseDown} >\n                    {translate('DL_CANCEL')}\n                </Button>\n                <Button variant=\"cta\" data-test-id=\"editable-description-save-button\" className=\"editable-description-button\" onClick={() => this.finishEditing()} onMouseDown={this.onButtonMouseDown} >\n                    {translate('DL_SAVE')}\n                </Button>\n            </div>\n        );\n    }\n\n    handleKeyDown = (event, desiredFn) => {\n        if (event.key === 'Enter') { // enter key\n            event.preventDefault();\n            desiredFn(event);\n        }\n    }\n\n    render() {\n        // If readonly and there is no description, then don't show a description at all (showing the placeholder is misleading)\n        if (this.isReadOnly && !this.props.element.description) {\n            return null;\n        }\n\n        const classes = classNames('element-description', { 'read-only-description': this.isReadOnly });\n        // Determine which state we are in to show name or input\n        const nameNode = this.isEditingDescription ? (\n            <>\n                { this.descriptionButtons }\n                <textarea\n                    data-test-id=\"editable-description-input\"\n                    readOnly={this.isReadOnly}\n                    ref={this.setInputRef}\n                    className=\"element-description-input\"\n                    type=\"text\"\n                    placeholder={this.props.placeholder}\n                    uxp-quiet=\"true\"\n                    spellCheck=\"true\"\n                    onBlur={this.handleBlur}\n                    defaultValue={this.defaultValue}\n                    onKeyDown={this.handleInputKeyDown}\n                    onInput={this.handleInput}\n                />\n                <div data-test-id=\"editable-description-character-count\" className=\"editable-description-character-count\">{this.charactersRemaining}</div>\n            </>\n        ) : (\n            <div aria-label={this.props.element.description || this.props.placeholder} className={classNames('editable-description-wrapper', { 'placeholder-description': !this.props.element.description })}>\n                <span data-test-id=\"editable-description-text\" ref={this.setTextRef} className={classes} onDoubleClick={this.startEdit}>\n                    {this.description || <i>{this.props.placeholder}</i>}\n                </span>\n                <div className=\"editable-description-badges\">\n                    {this.isReadOnly || this.editBadge}\n                    {this.isReadOnly || !this.props.element.description || this.deleteBadge}\n                </div>\n            </div>\n        );\n\n        return <div data-test-id={this.props.className} className={this.props.className}><div data-test-id=\"editable-description-container\" className={classNames('element-description-container', { 'is-editing': this.isEditingDescription })}>{nameNode}</div></div>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { computed, observable, reaction } from 'mobx';\nimport configuration from 'app/js/config/configuration';\nimport classNames from 'classnames';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport Icon from 'app/js/components/Icon';\nimport { renameItem } from 'app/js/utils/libraryUtils';\nimport Tooltip from 'app/js/components/Tooltip';\nimport { translate } from 'app/js/managers/translationManager';\nimport environment from 'app/js/environment';\n\n@observer\nexport default class EditableName extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static defaultProps = {\n        allowBlankName: false,\n        allowLongDoubleClick: false,\n        onEditFinish: () => {},\n        onEditStart: () => {},\n        onEditCancel: () => {},\n        onOverflowChange: () => {},\n        onNameClick: () => {},\n        isSelected: false,\n        isShowingEditIcon: false,\n        isReadOnly: false,\n    };\n\n    static propTypes = {\n        item: PropTypes.instanceOf(Object).isRequired, // Any object that has a name getter/setter, and an id. (e.g. elements, groups).\n        placeholder: PropTypes.string.isRequired, // Placeholder text in the input field\n        containerClassName: PropTypes.string,\n        inputClassName: PropTypes.string,\n        textClassName: PropTypes.string,\n        allowBlankName: PropTypes.bool,\n        allowLongDoubleClick: PropTypes.bool,\n        children: PropTypes.node,\n        onEditFinish: PropTypes.func,\n        onEditCancel: PropTypes.func,\n        onEditStart: PropTypes.func,\n        onOverflowChange: PropTypes.func,\n        isSelected: PropTypes.bool,\n        isShowingEditIcon: PropTypes.bool,\n        isReadOnly: PropTypes.bool, // display name, with truncation and tooltip, and double click will show read only input\n        isEditDisabled: PropTypes.bool, // same as isReadOnly, but no ability to double click to get an input to edit\n        onNameClick: PropTypes.func\n    };\n\n    get name() {\n        return this.context.viewManager.renameValue;\n    }\n\n    get isEditingName() {\n        return this.context.viewManager.renamingItem && this.context.viewManager.renamingItem.id === this.props.item.id;\n    }\n\n    get defaultValue() {\n        // Initial value of an auto-named element (e.g. a color) is blank\n        return !this.props.isReadOnly && this.props.item.isAutoNamed ? '' : this.props.item.name;\n    }\n\n    componentWillUnmount() {\n        this._disposeOverflowReaction();\n    }\n\n    // Adding this additional check for the first render of the input state update\n    componentDidMount = () => {\n        this._disposeOverflowReaction = reaction(() => this.nameText, this.refreshOverflow);\n        // We need to wait a tick for the overflow to be calculated initially, otherwise the offsetWidth and scrollWidth will be 0\n        setTimeout(this.refreshOverflow);\n    }\n\n    refreshOverflow = () => {\n        this.props.onOverflowChange(this.getOverflow());\n    }\n\n    getOverflow() {\n        return this.nameText?.offsetWidth < this.nameText?.scrollWidth;\n    }\n\n    startEditing() {\n        this.props.onEditStart();\n        // Set the editable state to true\n        this.context.viewManager.startRename(this.props.item);\n        this.context.viewManager.setRenameValue(this.defaultValue);\n    }\n\n    isNameValid() {\n        if (this.name && this.context.viewManager.renameStatus !== configuration.RENAME_STATES.VALID) {\n            return false;\n        }\n\n        return this.name && this.name.trim() !== '' || this.props.allowBlankName;\n    }\n\n    @computed\n    get showWarning() {\n        if (!this.isEditingName) {\n            // No need to check for warning, if we are not renaming that group.\n            return false;\n        }\n        if (!this.name || this.name === this.defaultValue) {\n            // Don't show a warning for empty input boxes or if the user hasn't changed anything.\n            return false;\n        }\n        // Show warning for invalid names.\n        return !this.isNameValid();\n    }\n\n    finishEditing(cancelChanges = false) {\n        if (!this.nameInput) {\n            this.editTrigger = undefined;\n            return;\n        }\n        const newName = this.nameInput.value.trim();\n\n        // If name is a dupe, or you didn't specifically hit esc key and the name is invalid, then don't allow change\n        if ((newName === this.props.item.name) || (!cancelChanges && !this.isNameValid())) {\n            // Only certain element types allow a blank name (e.g. colors can display a hex value in place of the name).\n            // Otherwise, we cancel the changes to prevent you saving a blank name.\n            cancelChanges = true;\n        }\n\n        // Change the name in the element\n        if (!cancelChanges) {\n            if (this.props.item.isGroup) {\n                // We need to stop the rename in the view manager before renaming the value,\n                // otherwise the rename state could try to validate the name of a group that is merged into another group\n                this.context.viewManager.stopRename();\n            }\n            renameItem(this.props.item, newName);\n            this.props.onEditFinish(this.editTrigger);\n        } else {\n            this.props.onEditCancel();\n            this.context.viewManager.setRenameValue(this.defaultValue);\n        }\n        this.editTrigger = undefined;\n        // Return to the uneditable state\n        this.context.viewManager.stopRename();\n    }\n\n    handleClick = mouseEvent => {\n        this.props.onNameClick(mouseEvent);\n        if (this.props.allowLongDoubleClick && this.props.isSelected && !this.props.isEditDisabled) {\n            mouseEvent.stopPropagation();\n            this.editTrigger = 'click';\n            this.startEditing();\n        }\n    }\n\n    handleDoubleClick = mouseEvent => {\n        // TODO: fix the isReadOnly state that allows you to select a read only elements name with your cursor.\n        // Getting that to work in UXP which has input styling we cannot override is too risky so close to RCS.\n        // For now, its safer to just not enter rename mode at all if the element is read only.\n        if (!this.props.allowLongDoubleClick && !this.props.isEditDisabled && !this.props.isReadOnly) {\n            mouseEvent.stopPropagation();\n            this.startEditing();\n        }\n    }\n\n    handleClickEdit = mouseEvent => {\n        mouseEvent.stopPropagation();\n        this.startEditing();\n    }\n\n    handleKeyDown = keyEvent => {\n        // Handle enter and escape key events\n        if (keyEvent.key === 'Enter' && !environment.isComposingInputEvent(keyEvent)) {\n            this.finishEditing();\n        } else if (keyEvent.key === 'Escape') {\n            this.finishEditing(true);\n        }\n        keyEvent.stopPropagation();\n    }\n\n    handleBlur = () => {\n        this.finishEditing(false);\n    }\n\n    handleOnChange = ev => {\n        this.context.viewManager.setRenameValue(ev.target.value.trim());\n    }\n\n    setInputRef = input => {\n        this.nameInput = input;\n\n        // This is unfortunately the cleanest way to do this.\n        // If we do this in a reaction on isEditingName, we need to wait a tick for the nameInput to actually render\n        // If we do this in CDM and CDU it can be fired unexpectedly on any update (ex: a sync)\n        if (this.nameInput && !this.props.isReadOnly) {\n            // It's important to call .select() before .focus() to work around https://jira.corp.adobe.com/browse/UXP-16541.\n            // Due to UXP-16541, .select() fires a blur event on the input box, which won't happen if the input box doesn't have focus yet.\n            this.nameInput.select();\n            this.nameInput.focus();\n        }\n    }\n\n    @observable.ref nameText\n    setTextRef = ref => { this.nameText = ref; }\n\n    @computed get tooltipErrorMessage() {\n        const status = this.context.viewManager.renameStatus;\n        return configuration.RENAME_STATE_ERROR_MESSAGES[status];\n    }\n\n    render() {\n        const classes = classNames(this.props.inputClassName, { 'read-only-name': this.props.isReadOnly, 'show-warning': this.showWarning });\n        // Determine which state we are in to show name or input\n        const nameNode = this.isEditingName ? (\n            <div className=\"editable-name-input-wrapper\">\n                <input data-test-id=\"editable-name-input\" readOnly={ this.props.isReadOnly } ref={ this.setInputRef } maxLength={ configuration.MAX_INPUT_STRING_LENGTH }\n                    className={ classes } type=\"text\" placeholder={ this.props.placeholder } uxp-quiet=\"false\"\n                    spellCheck=\"false\" onBlur={ this.handleBlur } defaultValue={ this.defaultValue } onKeyDown={ this.handleKeyDown } onChange={ this.handleOnChange } />\n                { this.showWarning\n                    && <div data-test-id=\"editable-name-alert-tooltip\" >\n                        <Tooltip className=\"editable-name-alert-tooltip\" placement=\"top\" content={ translate(this.tooltipErrorMessage) }>\n                            <Icon className=\"editable-name-alert-icon\" id=\"Alert\" height={ configuration.currentProduct.config.alertIconHeight || 10 }/>\n                        </Tooltip>\n                    </div>\n                }\n            </div>\n        ) : (\n            <div className={ classNames('editable-name-wrapper', { 'editable-name-wrapper-edit-icon': this.props.isShowingEditIcon && !this.props.isReadOnly })}>\n                <span data-test-id=\"editable-name-text\" ref={ this.setTextRef } className={ classNames(this.props.textClassName,\n                    'editable-name-text', { 'read-only-name': this.props.isReadOnly }) } onClick={ this.handleClick } onDoubleClick={ this.handleDoubleClick } >\n                    { this.props.children || this.props.item.name }\n                </span>\n                { this.props.isShowingEditIcon && !this.props.isReadOnly && !this.props.isEditDisabled ? (\n                    <div data-test-id=\"editable-name-edit-icon\" className=\"element-name-edit-icon\" onClick={ this.handleClickEdit }><Icon id=\"Edit\" height={ 12 } /></div>\n                ) : (\n                    <span className=\"editable-name-padding\" data-test-id=\"editable-name-padding\"/>\n                ) }\n            </div>\n        );\n\n        return <div data-test-id=\"editable-name-container\" className={ classNames(this.props.containerClassName,\n            'editable-name', { 'is-editing': this.isEditingName, 'invalid': this.showWarning }) }>{ nameNode }</div>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport { observer } from 'mobx-react';\nimport { translate } from 'app/js/managers/translationManager';\nimport classNames from 'classnames';\nimport EditableName from './EditableName';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport { Element } from '@cclibraries/cc-libraries-js';\nimport DocumentElement from 'app/js/models/documentAssets/DocumentElement';\n\n@observer\nexport default class EditableElementName extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static defaultProps = {\n        selected: false,\n        viewMode: 'grid',\n        onNameClick: () => {}\n    };\n\n    static propTypes = {\n        element: PropTypes.oneOfType([ PropTypes.instanceOf(Element), PropTypes.instanceOf(DocumentElement) ]),\n        selected: PropTypes.bool,\n        viewMode: PropTypes.oneOf([ 'grid', 'list' ]),\n        onNameClick: PropTypes.func\n    };\n\n    get isEditingName() {\n        return this.context.viewManager.renamingItem && this.context.viewManager.renamingItem.id === this.props.element.id;\n    }\n\n    get allowBlankName() {\n        return elementConfiguration.allowBlankName(this.props.element);\n    }\n\n    render() {\n        const { element, selected, viewMode } = this.props;\n\n        // Since different customers prefer different visibility of element names in the grid view, we have\n        // three options - always show, show on panel hover (original value), show on element hover:\n        const editableNameContainerClasses = classNames({\n            selected,\n            'show-on-panel-hover': this.context.viewState.nameVisibility === 'panelHover',\n            'show-on-element-hover': this.context.viewState.nameVisibility === 'elementHover'\n        }, `panel-${viewMode}-item-name-container`);\n\n        return (\n            <EditableName\n                item={ element }\n                allowBlankName={ this.allowBlankName }\n                placeholder={ translate('DL_EDIT_NAME_PLACEHOLDER') }\n                containerClassName={ editableNameContainerClasses }\n                inputClassName={ `panel-${viewMode}-item-edit-name` }\n                textClassName={ `panel-${viewMode}-item-name` }\n                isSelected={ elementSelectionState.isSelected(element) }\n                isReadOnly={ !this.context.viewState.isLibraryWritable(element.library) || element.disableRename }\n                onNameClick={this.props.onNameClick}\n            >\n                { element.name }\n            </EditableName>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport classNames from 'classnames';\n\nimport Tooltip from 'app/js/components/Tooltip';\nimport { translate } from 'app/js/managers/translationManager';\nimport Icon from 'app/js/components/Icon';\nimport configuration from 'app/js/config/configuration';\n\n@observer\nexport default class PlaceButton extends React.Component {\n    static propTypes = {\n        viewMode: PropTypes.oneOf(configuration.ELEMENT_VIEW_MODES).isRequired,\n        applyOperation: PropTypes.object.isRequired\n    };\n\n    handleClick = (event) => {\n        this.props.applyOperation.apply();\n        event.stopPropagation();\n    }\n\n    getClasses() {\n        return classNames(`panel-place-button-overlay-${this.props.viewMode}`, 'show-on-hover-child');\n    }\n\n    render() {\n        return (\n            <div data-test-id=\"place-button\" className={ this.getClasses() } onClick = { this.handleClick }>\n                <Tooltip placement=\"top-start\" content={ translate(this.props.applyOperation.name) }>\n                    <Icon id=\"PlaceOnCanvas\" height={ 13 }/>\n                </Tooltip>\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport Badge from 'app/js/components/elements/badges/Badge';\nimport { observer } from 'mobx-react';\nimport { computed } from 'mobx';\nimport { translate } from 'app/js/managers/translationManager';\nimport BaseElementModel from 'app/js/models/BaseElementModel';\n\n@observer\nexport default class ContentAuthenticityBadge extends React.Component {\n\n    static propTypes = {\n        element: PropTypes.instanceOf(BaseElementModel).isRequired,\n    }\n\n    get element() {\n        return this.props.element;\n    }\n\n    @computed get contentAuthenticityBadge() {\n        return (\n            <Badge\n                dataTestId=\"verify-content-authenticity\"\n                icon=\"VerifyContentAuthenticity\"\n                tooltipContent={ translate(`DL_VERIFY_CONTENT_AUTHENTICITY`) }\n                onClick={ () => { return; } }\n            />\n        );\n    }\n\n    render() {\n        return this.contentAuthenticityBadge;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport Badge from 'app/js/components/elements/badges/Badge';\nimport { observer } from 'mobx-react';\nimport { computed } from 'mobx';\nimport { translate } from 'app/js/managers/translationManager';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport { Element } from '@cclibraries/cc-libraries-js';\nimport DocumentElement from 'app/js/models/documentAssets/DocumentElement';\n\n@observer\nexport default class EditBadge extends React.Component {\n\n    static propTypes = {\n        element: PropTypes.oneOfType([ PropTypes.instanceOf(Element), PropTypes.instanceOf(DocumentElement) ]).isRequired,\n    }\n\n    get element() {\n        return this.props.element;\n    }\n\n    @computed get editBadge() {\n        return (\n            <Badge\n                dataTestId=\"edit\"\n                icon=\"Edit\"\n                tooltipContent={ translate(`DL_EDIT_IN_SOURCE`) }\n                onClick={ this.editOperation.apply }\n            />\n        );\n    }\n\n    get editOperation() {\n        const editOperations = elementConfiguration.getEditOperations(this.element);\n        return editOperations.find(op => op.onEditItem && !op.disabled);\n    }\n\n    render() {\n\n        if (this.editOperation && this.element.library.isWritable && !elementConfiguration.isDownloadInProgress(this.element)) {\n            return this.editBadge;\n        }\n\n        return null;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport Icon from 'app/js/components/Icon';\nimport Tooltip from 'app/js/components/Tooltip';\nimport { observer } from 'mobx-react';\nimport { computed, reaction } from 'mobx';\nimport configuration from 'app/js/config/configuration';\nimport { translate } from 'app/js/managers/translationManager';\nimport environment from 'app/js/environment';\nimport { getLocalizedDate } from 'app/js/managers/translationManager';\nimport metrics from 'app/js/interface/metrics';\nimport SpectrumCircleLoader from 'app/js/components/spectrum/SpectrumCircleLoader';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport { formatGroupNameTooltip } from 'app/js/utils/groupUtils';\nimport { throttle } from 'app/js/utils/promiseUtils';\nimport { Element } from '@cclibraries/cc-libraries-js';\nimport DocumentElement from 'app/js/models/documentAssets/DocumentElement';\n\n@observer\nexport default class LinkBadge extends React.Component {\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        element: PropTypes.oneOfType([ PropTypes.instanceOf(Element), PropTypes.instanceOf(DocumentElement) ]).isRequired,\n    }\n\n    get element() {\n        return this.props.element;\n    }\n\n    get iconName() {\n        if (this.element.isSyncing) {\n            return 'AssetUploading';\n        }\n\n        // We treat deprecated legacy document links as broken in the UI.\n        if (!this.element.isDeprecatedLegacyDocumentLink) {\n            if (this.element.isNormalLinkState) {\n                return 'AssetLinked';\n            }\n            if (this.element.isPendingUpdate) {\n                return 'AssetUpdate';\n            }\n        }\n\n        if (this.element.isRestricted) {\n            return 'AssetRestricted';\n        }\n\n        //TODO: Need to align on a single icon for broken link\n        return (this.element.linkType === configuration.LIBRARY_TYPE\n            ? 'AssetBrokenElement' // For XD element\n            : 'AssetBrokenLink' // For Fred link\n        );\n    }\n\n    get tooltipContent() {\n        const tooltipStrings = [];\n\n        // State strings\n        if (this.element.isNormalLinkState) {\n            if (this.element.isDeprecatedLegacyDocumentLink) {\n                tooltipStrings.push(translate('ASSET_SOURCE_DOCUMENT_DEPRECATED'));\n                tooltipStrings.push(translate('ASSET_LINK_RESOLVE'));\n            } else if (!environment.isPreviewActive) {\n                // only show `Up-to-date` when we are not previewing\n                // during previewing, we updated the asset to show the up-to-date appearance\n                // therefore, this asset's state is normal\n                tooltipStrings.push(translate('ASSET_LINK_UP_TO_DATE'));\n            }\n        }\n        // Until XD-143597 is fixed, an asset's link state will be \"up to date\" while previewing, which would result in the wrong tooltip being shown.\n        if (this.element.isPendingUpdate || environment.isPreviewActive) {\n            if (this.element.isDeprecatedLegacyDocumentLink) {\n                // XD should not send updates for deprecated legacy document links,\n                // but if they do, we should still show the link as broken and deprecated.\n                tooltipStrings.push(translate('ASSET_SOURCE_DOCUMENT_DEPRECATED'));\n                tooltipStrings.push(translate('ASSET_LINK_RESOLVE'));\n            } else {\n                tooltipStrings.push(translate('ASSET_LINK_UPDATE'));\n                if (this.element.linkedAsset) {\n                    const dateString = getLocalizedDate(this.element.linkedAsset.modified.getTime());\n                    tooltipStrings.push(dateString);\n                }\n            }\n        }\n        if (this.element.isSyncing) { tooltipStrings.push(translate('DL_SYNCING')); }\n        if (this.element.isMissingLibraryLink) {\n            if (this.element.isPendingFollow) {\n                tooltipStrings.push(translate('ASSET_LINK_MISSING_PENDING_FOLLOW'));\n                tooltipStrings.push(translate('ASSET_LINK_MISSING_LIBRARY_RESOLVE'));\n            } else {\n                tooltipStrings.push(translate('ASSET_LINK_MISSING_LIBRARY'));\n                if (this.element.isPendingInvite) {\n                    tooltipStrings.push(translate('ASSET_LINK_MISSING_LIBRARY_RESOLVE'));\n                } else if (this.element.canRelinkToLibrary) {\n                    // Asset _may_ be relinkable.\n                    tooltipStrings.push(translate('ASSET_LINK_RESOLVE'));\n                }\n            }\n        } else if (this.element.isMissingLegacyDocumentLink) {\n            tooltipStrings.push(translate('ASSET_LINK_MISSING_SOURCE_DOCUMENT'));\n            if (this.element.canRelinkToDocument) {\n                tooltipStrings.push(translate('ASSET_LINK_RELINK'));\n            }\n        } else if (this.element.isRestricted) {\n            tooltipStrings.push(translate('ASSET_LINK_RESTRICTED'));\n        } else if (this.element.isMissingLink) { // General missing link tooltip\n            tooltipStrings.push(translate(this.element.linkType === configuration.LIBRARY_TYPE\n                ? 'ASSET_LINK_MISSING_ELEMENT'\n                : 'ASSET_LINK_MISSING_ASSET'\n            ));\n            if (this.element.canRelinkToLibrary) {\n                // Asset _may_ be relinkable.\n                tooltipStrings.push(translate('ASSET_LINK_RESOLVE'));\n            }\n        }\n\n        // Source name string\n        const sourceName = this._getElementSourceName();\n\n        if (sourceName) { // May not exist if source is missing\n            const typeOfSource = this.element.isLegacyDocumentLink ? 'ASSET_SOURCE_DOCUMENT' : 'ASSET_SOURCE_LIBRARY';\n            tooltipStrings.push(translate(typeOfSource, { name: sourceName }));\n        }\n\n        // Group path string\n        const group = this._getElementSourceGroup();\n        if (group) {\n            tooltipStrings.push(formatGroupNameTooltip(group));\n        }\n\n        return tooltipStrings;\n    }\n\n    componentDidMount() {\n        // Throttled check for team lib data and invitations\n        this.fetchLibraryInvitations();\n        this.checkIfCanAddTeamLibrary();\n\n        // When the library link goes missing, immediately check if we need to remove (lib was deleted) or add (you stopped following it) team library data\n        // and if there's a pending invite (you left a shared library).\n        this._dispose = reaction(() => this.element.isMissingLibrary, (isMissingLibrary) => {\n            if (!isMissingLibrary) { return; }\n            // SAM.js will combine simultaneous requests so it's fine to do this for each\n            // asset with this linked library without a throttle when the library goes missing.\n            this._checkIfCanAddTeamLibrary();\n            // Also fetch library invitations (throttled).\n            this.fetchLibraryInvitations();\n        });\n\n        // Array will store list of tooltip node\n        this.previousTooltips = [];\n    }\n\n    componentWillUnmount() {\n        this._dispose();\n    }\n\n    _getElementSourceGroup = () => {\n        return this.element.linkedElement && this.element.linkedElement.getGroups()[0];\n    }\n\n    _getElementSourceName = () => {\n        const linkedLibrary = this.element.linkedLibrary;\n        let sourceName;\n        if (this.element.isLegacyDocumentLink) {\n            sourceName = this.element.linkedDocumentName;\n        } else if (!linkedLibrary) {\n            sourceName = this.element.cachedLinkedLibraryName;\n        } else if (linkedLibrary.name) {\n            sourceName = linkedLibrary.name;\n        }\n        return sourceName;\n    }\n\n    onMouseOver = () => {\n        // Hiding existing tooltip before LinkBadge tooltip displays. [CCSG-902]\n        this.previousTooltips = document.querySelectorAll('active-overlay');\n        for (const tooltip of this.previousTooltips) {\n            tooltip.style.display = 'none';\n        }\n        // There are no change listeners for team library state or invitations currently, so we check on mouse over.\n        this.checkIfCanAddTeamLibrary();\n        this.fetchLibraryInvitations();\n        this.showPreview();\n    }\n\n    fetchLibraryInvitations = () => {\n        // We allow throttled checks of the invitation status, in case an invite is added or revoked, since we don't have invitation listeners.\n        if (this.element.isMissingLibrary || this.element.isPendingInvite) {\n            this.context.libraryManager.fetchLibraryInvitations();\n        }\n    }\n\n    _checkIfCanAddTeamLibrary = async () => {\n        // Fetch team library data regardless of whether we already did, since the state can change\n        // (e.g. team lib was deleted or user lost access) and we don't have a change listener.\n        if ((this.element.isMissingLibrary || this.element.isPendingFollow) && this.element.cachedLinkedLibraryAssetId) {\n            return this.context.libraryManager.fetchTeamLibraryData(this.element.cachedLinkedLibraryAssetId);\n        }\n    }\n\n    // We want to throttle the fetching of any particular asset's team libraries data\n    checkIfCanAddTeamLibrary = throttle(this._checkIfCanAddTeamLibrary, configuration.FETCH_TEAM_LIBS_THROTTLE);\n\n    showPreview = () => {\n        const isPendingUpdate = this.element.isPendingUpdate;\n        if (!this.element.isDeprecatedLegacyDocumentLink && isPendingUpdate && !environment.isPreviewActive) {\n            metrics.reportElementEvent('Gated Update', 'Element', 'render', 'preview-update', this.element);\n            environment.startPreview(this.element);\n        }\n    }\n\n    hidePreview = () => {\n        // Update tooltip display attribute so, that on hover it displays. [CCSG-902]\n        for (const tooltip of this.previousTooltips) {\n            tooltip.style.display = 'block';\n        }\n\n        if (environment.isPreviewActive) {\n            environment.cancelPreview();\n        }\n    }\n\n    handleClick = (event) => {\n        // Only time we want a click on the badge to be handled by BaseElementView is when in normal link state, and not a legacy link\n        if (!this.element.isNormalLinkState || this.element.isDeprecatedLegacyDocumentLink) {\n            event.stopPropagation();\n        }\n\n        // No experience for non-deprecated legacy cloud documents if their source file exists but not their source element.\n        if (this.element.isBrokenLegacyDocumentLink) { return; }\n        if (this.element.isMissingLegacyDocumentLink && this.element.canRelinkToDocument) {\n            // only allow relink when the file is missing and linking to cloud documents has not been deprecated.\n            this.element.relinkToDocument();\n        } else if (!this.element.isDeprecatedLegacyDocumentLink && (this.element.isPendingUpdate || environment.isPreviewActive)) {\n            metrics.reportElementEvent('Gated Update', 'Element', 'render', 'accept-update', this.element);\n            environment.commitPreview();\n        } else if (this.element.isMissingLink || this.element.isDeprecatedLegacyDocumentLink) {\n            if (this.element.canRelinkToLibrary) {\n                this.context.documentActions.relinkAssetToLibrary(this.element);\n            } else {\n                environment.openApplicationDialog('resolveBrokenLinks', { element: this.element });\n            }\n        }\n    }\n\n    onRightClick = (e) => {\n        if (environment.isPreviewActive) {\n            // Stop propagation so that context menu actions cannot be taken while preview is in effect. (Would lead to nested history records internal error.)\n            e.stopPropagation();\n        }\n    }\n\n    get loadingSpinner() {\n        return <SpectrumCircleLoader data-test-id=\"link-badge-loading\" className=\"link-badge-loading\" indeterminate size=\"small\" />;\n    }\n\n    @computed get linkBadge() {\n        // Note: We need to use onMouseOver/onMouseOut rather than onMouseEnter/onMouseLeave for this to work properly within a web component,\n        // because React will only listen to events on the document and the latter get eaten by the webcomponent boundary\n        // To avoid extra events, we prevent pointer events on the icon itself (otherwise you get multiple over/out events as you hover over children)\n        return (\n            <Tooltip placement=\"top-start\" content={ this.tooltipContent }>\n                <div className=\"element-badge-container\" data-test-id=\"link-badge\" onClick={ this.handleClick } onMouseOver={ this.onMouseOver } onMouseOut={ this.hidePreview } { ...environment.contextMenuEventListeners(this.onRightClick) }>\n                    <Icon id={ this.iconName } height={ 16 } className=\"nopointer\" />\n                </div>\n            </Tooltip>\n        );\n    }\n\n    @computed get isUnlinking() {\n        return this.context.viewManager.getIsUnlinkingAsset(this.element);\n    }\n\n    render() {\n        if (!this.element.isLinked) { return null; }\n        return this.isUnlinking ? this.loadingSpinner : this.linkBadge;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observable, computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport classNames from 'classnames';\n\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport { translate } from 'app/js/managers/translationManager';\nimport { getElementDownloadStatus, getRepresentationExtension } from 'app/js/utils/libraryUtils';\nimport { isBrandLibrary } from 'app/js/utils/brandUtils';\nimport environment from 'app/js/environment';\nimport { showContextMenu } from 'app/js/menus/elementContextMenu';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport configuration from 'app/js/config/configuration';\nimport dragManager from 'app/js/managers/dragManager';\nimport menuManager from 'app/js/managers/menuManager';\nimport versionManager from 'app/js/managers/versionManager';\nimport EditableElementName from 'app/js/components/editable-names/EditableElementName';\nimport Tooltip from 'app/js/components/Tooltip';\nimport PlaceButton from './utils/PlaceButton';\nimport Icon from 'app/js/components/Icon';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport metrics from 'app/js/interface/metrics';\nimport * as LinkUtils from 'app/js/utils/linkUtils';\nimport * as DragUtils from 'app/js/utils/dragUtils';\nimport { isFireflyElement } from 'app/js/utils/elementReferenceUtils';\nimport ContentAuthenticityBadge from 'app/js/components/elements/badges/ContentAuthenticityBadge';\nimport EditBadge from 'app/js/components/elements/badges/EditBadge';\nimport LinkBadge from 'app/js/components/elements/badges/LinkBadge';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport groupSelectionState from 'app/js/state/groupSelectionState';\nimport { getAllAncestors } from 'app/js/utils/groupUtils';\nimport { truncatePath } from 'app/js/utils/stringUtils';\nimport { measureTextDimensions } from 'app/js/utils/DOMUtils';\nimport ContextMenuButton from 'app/js/components/ContextMenuButton';\nimport { Element } from '@cclibraries/cc-libraries-js';\nimport DocumentElement from 'app/js/models/documentAssets/DocumentElement';\nimport OverlayState from 'app/js/components/utils/OverlayState';\nimport featureFlags from 'app/js/config/featureFlags';\n\n/*\n    Base Element View\n\n    Generic base element view with an editable name, top level css (by element type and viewMode), and selected overlay.\n    Specialized element views should use the Base Element View and potentially add children through transclusion.\n    e.g. <BaseElementView element={element} viewMode={viewMode}> <div>This is a child.</div> </BaseElementView>\n*/\n\n@observer\nexport default class BaseElementView extends React.Component {\n    static contextType = LibrariesContext;\n    static defaultProps = {\n        viewMode: 'grid',\n        showDetails: 'none',\n        elementBadges: []\n    };\n\n    static propTypes = {\n        showDetails: PropTypes.oneOf([ 'type', 'none' ]),\n        children: PropTypes.node,\n        element: PropTypes.oneOfType([ PropTypes.instanceOf(Element), PropTypes.instanceOf(DocumentElement) ]).isRequired,\n        viewMode: PropTypes.oneOf(configuration.ELEMENT_VIEW_MODES),\n        elementBadges: PropTypes.arrayOf(PropTypes.node),\n        gridSizeType: PropTypes.oneOf(configuration.GRID_SIZE_TYPES),\n        listStyle: PropTypes.object,\n        disableTooltip: PropTypes.bool,\n        thumbnailOnly: PropTypes.bool,\n        disableInteraction: PropTypes.bool\n    };\n\n    overlayState = new OverlayState({\n        ignoreScrollEvents: true,\n        ignoreFocus: true\n    });\n\n    constructor(props) {\n        super(props);\n\n        // The invisible drag image has to be loaded before it is displayed, otherwise we can intermittently end up\n        // with the wrong cursor\n        this.blankImage = new Image();\n        this.blankImage.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=';\n    }\n\n    get element() {\n        return this.props.element;\n    }\n\n    @computed get disabled() {\n        return elementConfiguration.isDisabled(this.element) && !this.props.viewMode.startsWith('thumbnail');\n    }\n\n    @computed get selected() {\n        return elementSelectionState.isSelected(this.element);\n    }\n\n    @computed get invalidRename() {\n        return this.context.viewManager.renamingItem === this.element\n            && this.context.viewManager.renameStatus !== configuration.RENAME_STATES.VALID;\n    }\n\n    @computed get subSelected() {\n        const parent = this.props.element.getGroups()[0];\n        const ancestors = parent ? getAllAncestors(parent, true) : [];\n        return !!ancestors.find(group => groupSelectionState.isSelected(group));\n    }\n\n    @computed get focused() {\n        return elementSelectionState.isFocused(this.element);\n    }\n\n    @computed get placeButton() {\n        if (configuration.currentProduct.config.showPlaceButtons) {\n            const applyOperations = elementConfiguration.getApplyOperations(this.element);\n            const placeButtonOp = applyOperations && applyOperations.find(operation => operation.showPlaceButton);\n            const {\n                isDownloadPending,\n                hasFailed,\n            } = getElementDownloadStatus(this.element);\n            if (placeButtonOp && !isDownloadPending && !hasFailed) {\n                return (<PlaceButton viewMode={ this.props.viewMode } applyOperation={ placeButtonOp } key=\"place-button\"/>);\n            }\n        }\n    }\n\n    handleLicense = () => {\n        metrics.reportStockEvent('License', 'click', 'start', { ui: { sequence: 'thumbnail' } }, this.element);\n\n        // Check current environment can show License Dialog\n        if (!AdobeStockUtils.canShowLicenseDialog()) {\n            LinkUtils.launchStockAssetURL(AdobeStockUtils.getStockId(this.element), this.element.type);\n            return;\n        }\n\n        AdobeStockUtils.showLicenseDialog(this.element).then(() => {\n            metrics.reportStockEvent('License', 'render', 'success', { ui: { sequence: 'thumbnail' } }, this.element);\n        }).catch(() => {\n            metrics.reportStockEvent('License', 'render', 'error', { ui: { sequence: 'thumbnail' } }, this.element);\n        });\n    }\n\n    @computed get purchaseButton() {\n        const isDisabled = !AdobeStockUtils.canShowLicenseDialog();\n        const classes = classNames('panel-list-item-license', { disabled: isDisabled });\n        if (AdobeStockUtils.isStockAsset(this.element) && this.props.viewMode === 'list' && !AdobeStockUtils.isLicensed(this.element)) {\n            return <div className={ classes }>\n                <Tooltip placement=\"top-start\" content={translate('DL_STOCK_LICENSE_MENU' + AdobeStockUtils.getLocalizationSuffix(this.props.element))}>\n                    <Icon id=\"ShoppingCart\" height={ 12 } onClick={ this.handleLicense }/>\n                </Tooltip>\n            </div>;\n        }\n        return null;\n    }\n\n    get linkBadge() {\n        return <LinkBadge key={ 'link-badge' } element={ this.props.element } />;\n    }\n\n    get elementBadges() {\n        if (this.props.disableInteraction) {\n            return [];\n        }\n        const editBadge = this.props.viewMode === 'thumbnail-large' && <EditBadge element={ this.element } key=\"edit-badge\" />;\n        const contentAuthenticityBadge = this.props.viewMode === 'thumbnail-large'\n            && isFireflyElement(this.element)\n            && <ContentAuthenticityBadge element={ this.element } key=\"content-authenticity-badge\" />;\n        const elementBadges = (this.props.viewMode !== 'thumbnail') ? this.props.elementBadges : [];\n\n        // Font syncing and link badges align to the right side of the badgecontainer, all other badges align to left side\n        const leftElementBadges = [ editBadge, contentAuthenticityBadge ].filter(Boolean);\n\n        const rightElementBadges = [];\n        elementBadges.forEach(badge => {\n            if (badge.key === 'sync-font-badge') {\n                rightElementBadges.push(badge);\n            } else {\n                leftElementBadges.push(badge);\n            }\n        });\n\n        if (this.props.element.isLinked) {\n            rightElementBadges.push(this.linkBadge);\n        }\n        if (this.props.viewMode !== 'list' && this.placeButton) {\n            rightElementBadges.push(this.placeButton);\n        }\n\n        return (\n            <div className=\"element-badges-container\" data-test-id=\"element-badges\">\n                <div className=\"element-badges-left-container\" data-test-id=\"element-badges-left-container\">\n                    { leftElementBadges }\n                </div>\n                <div className=\"element-badges-right-container\" data-test-id=\"element-badges-right-container\">\n                    { rightElementBadges }\n                </div>\n            </div>\n        );\n    }\n\n    // Classes for the top-level div for the element\n    getClasses() {\n        let classForElementTypeAndView;\n        if (this.props.viewMode === 'grid') {\n            classForElementTypeAndView = `panel-${ elementConfiguration.getShortType(this.element.type) }-item panel-grid-item`;\n        } else {\n            const isUngroupedDropTargetActive = dragManager.activeDropTarget && dragManager.activeDropTarget.group === configuration.UNGROUPED_GROUP;\n            classForElementTypeAndView = classNames({\n                'group-view': this.context.viewState.isGroupView(),\n                'ungrouped': this.props.element.getGroups().length === 0,\n                'ungrouped-drop-target': isUngroupedDropTargetActive\n            }, 'panel-list-item');\n        }\n        const additionalClasses = elementConfiguration.getAdditionalClasses(this.element);\n        const isActiveDropTarget = dragManager.activeDropTarget && dragManager.activeDropTarget.beforeElement === this.element && !dragManager.activeDropTarget.isRowEnd;\n        const isActiveEndDropTarget = dragManager.activeDropTarget && dragManager.activeDropTarget.afterElement === this.element && dragManager.activeDropTarget.isRowEnd;\n\n        const showElementOrderIndicator = this.context.viewState.elementSortState === 'order';\n        return classNames({\n            'panel-group-view-item': this.context.viewState.viewByState === 'group',\n            'disabled-item': this.disabled,\n            'selected': !this.props.disableInteraction && this.selected && !this.subSelected,\n            'sub-selected': this.subSelected,\n            'focused': this.focused,\n            'interactive': !this.props.disableInteraction,\n            'grid-name-visible': this.context.viewState.nameVisibility === 'always', // Needed to work around UXP bug https://jira.corp.adobe.com/browse/UXP-10753\n            [`panel-${this.props.viewMode}-item-separator`]: showElementOrderIndicator && isActiveDropTarget,\n            [`panel-${this.props.viewMode}-item-separator-end`]: showElementOrderIndicator && isActiveEndDropTarget\n        }, classForElementTypeAndView, additionalClasses, 'show-on-hover-parent');\n    }\n\n    @computed get style() {\n        // In list view we take the passed style prop which contains the indentation needed to match the element appear 'full width' when selected\n        if (this.props.viewMode === 'list') {\n            return this.props.listStyle;\n        }\n        if (this.props.viewMode === 'grid') {\n            return {\n                width: '100%',\n                height: '100%'\n            };\n        }\n    }\n\n    _lastClickTime = 0;\n\n    handleClick = (mouseEvent) => {\n        if (this.props.disableInteraction) { return; }\n        if (featureFlags.get('ubeDesignEnabled')) {\n            configuration.currentProduct.navigateToElement?.(this.element);\n            return;\n        }\n\n        if (configuration.currentProduct.config.navigateToElementOneUp) {\n            environment.navigateToElement?.(this.element, this.element.library);\n        }\n\n        this.onClickSetSelection(mouseEvent);\n\n        // Do the apply operation on a click (if there is one for this element type),\n        // unless any modifier keys are being held down, or if it's been less than 500ms since the last click\n        // (we interpret that as a double-click).\n        const now = new Date().valueOf();\n        if (!mouseEvent.metaKey && !mouseEvent.ctrlKey && !mouseEvent.shiftKey && this._lastClickTime < now - 500) {\n            const applyOperation = elementConfiguration.getOnClickApplyOperation(this.element);\n            applyOperation && applyOperation.apply();\n        }\n        this._lastClickTime = now;\n    }\n\n    onClickSetSelection = (mouseEvent) => {\n        mouseEvent.stopPropagation();\n        // clear context menu contents on click\n        menuManager.setContextMenu([]);\n        if (environment.isMobileView && configuration.currentProduct.isExpandedView?.()) {\n            return;\n        }\n\n        const enableMultiSelect = this.context.viewState.getState().enableMultiSelect;\n        const isWindowsOS = environment.isWindowsOS();\n\n        if (enableMultiSelect && ((!isWindowsOS && mouseEvent.metaKey) || (isWindowsOS && mouseEvent.ctrlKey)\n            || (isWindowsOS && environment.hasUXPWindowsCTRLClickBug && mouseEvent.metaKey))) {\n            // Toggle selection on this element\n            // metaKey on Mac, ctrlKey on Windows\n            elementSelectionState.toggleSelection(this.element);\n            groupSelectionState.clearSelection();\n        } else if (enableMultiSelect && mouseEvent.shiftKey) {\n            // Hold down shift to expand range of selection to include this element\n            elementSelectionState.setSelectionRange(this.element);\n        } else {\n            // Select just this element\n            groupSelectionState.clearSelection();\n            elementSelectionState.setSelection(this.element);\n        }\n    }\n\n    handleDoubleClick = (mouseEvent) => {\n        mouseEvent.stopPropagation();\n        if (this.props.disableInteraction) { return; }\n\n        if (!(this.element.library.isDocumentAssets && configuration.currentProduct.config.disableEditOnDoubleClickAsset)) {\n            // Document Assets shouldn't be editable via double click, only via context menu.\n            elementConfiguration.editElement(this.element);\n        }\n\n    }\n\n    handleDragStart = (dragEvent) => {\n        // Prevent element dragging in mobile view, since we need the long press to open the context menu\n        if (environment.isMobileView) {\n            dragEvent.preventDefault();\n            return;\n        }\n        // Select the element if not already selected\n        const selected = elementSelectionState.isSelected(this.element);\n        if (!selected) {\n            elementSelectionState.setSelection(this.element);\n        }\n\n        // Generate selected elements and asset list arrays\n        const selectedElements = elementSelectionState.selection;\n        const assetList = [];\n\n        // Loop through selected elements and generate drag data\n        selectedElements.forEach(element => {\n            const draggedData = elementConfiguration.getDragData(element);\n            if (draggedData) {\n                delete draggedData.usedRepresentationForAnalytics;\n                assetList.push(draggedData);\n            }\n        });\n\n        // Generic drag data for products\n        const dragOutData = {\n            'source': configuration.DRAGDROP_SOURCE,\n            'version': versionManager.getPluginVersion(),\n            assetList\n        };\n\n        // setData() attribute must be called exactly \"text\" in IE11\n        // https://stackoverflow.com/questions/26213011/html5-dragdrop-issue-in-internet-explorer-datatransfer-property-access-not-pos\n        try {\n            dragEvent.dataTransfer.setData(environment.ElementDragId, JSON.stringify(dragOutData));\n        } catch (e) {\n            // If it's IE11, this won't work, so just don't support dragging out of panel\n        }\n\n        const useUXPDragImage = environment.useUXPDragImage;\n        // On Mac, hide default ghost image. Windows CEP now does this for us.\n        let useCustomGhostImage = DragUtils.useCustomGhostImage() && !useUXPDragImage;\n\n        // Allow dragging out library elements which have files, not document assets (there's no download URL for a document asset)\n        if (environment.enableDragOutsideProduct && selectedElements.length === 1 && !selectedElements[0].library.isDocumentAssets) {\n            const element = selectedElements[0];\n            if (configuration.DRAGOUT_ELEMENT_TYPES.includes(element.type)) {\n                const representation = elementConfiguration.getRepresentationForExport(element);\n                const contentPath = representation && representation.getCachedContentPath();\n                const fileExtension = getRepresentationExtension(representation);\n                if (contentPath && fileExtension) {\n                    useCustomGhostImage = false;\n                    // not possible in IE, add try catch if you enable this in any environment that may be in IE\n                    dragEvent.dataTransfer.setData('DownloadURL', `file/${fileExtension}:${element.name}.${fileExtension}:file://${contentPath}`);\n                } else {\n                    // can't drag out item error\n                }\n            }\n        }\n\n        if (useCustomGhostImage) {\n            // In CEF/CCD, we need to provide an actual renderable image to make the icon go away\n            dragEvent.dataTransfer.setDragImage(this.blankImage, 0, 0);\n        }\n\n        if (useUXPDragImage) {\n            selectedElements.forEach((element, index) => {\n                const elementNode = document.getElementById(`element-${element.id}`);\n                elementNode && dragEvent.dataTransfer.uxpSetDragImageAt(elementNode, 0, 0, index);\n            });\n        }\n\n        const populateDragImageNode = (ghostContainer) => {\n            // Create the clone\n            const dragClone = dragEvent.target.cloneNode(true);\n            dragClone.style.left = (dragEvent.target.clientX - dragEvent.target.clientWidth / 2) + 'px';\n            dragClone.style.top = (dragEvent.target.clientY - dragEvent.target.clientHeight / 2) + 'px';\n            dragClone.classList.add('panel-ghost-element');\n\n            // Create the element count if dragging multiple elements\n            if (selectedElements.length > 1) {\n                const countElement = document.createElement('div');\n                countElement.classList.add('panel-ghost-count');\n                const maxCount = configuration.MAX_DRAG_DISPLAY_COUNT;\n                const displayCount = maxCount && maxCount < selectedElements.length\n                    ? translate('DL_MAX_DRAG_DISPLAY_COUNT', { maxCount })\n                    : selectedElements.length;\n                countElement.innerHTML = displayCount;\n                ghostContainer.appendChild(countElement);\n            }\n\n            // Append the clone\n            ghostContainer.appendChild(dragClone);\n            ghostContainer.style.width = (configuration.currentProduct.config.customDragCardWidth || dragEvent.target.clientWidth) + 'px';\n            ghostContainer.style.height = (configuration.currentProduct.config.customDragCardHeight || dragEvent.target.clientHeight) + 'px';\n\n            // Append the ghost to root node\n            const rootNode = dragEvent.target.getRootNode().querySelector('body') || environment.getRootPanelElement();\n            rootNode.appendChild(ghostContainer);\n        };\n\n        configuration.currentProduct.config.setElementDragData?.(dragEvent, selectedElements);\n\n        // Setup dragged item for grouping\n        dragManager.handleDragStart('element', selectedElements, useCustomGhostImage ? populateDragImageNode : null);\n    }\n\n    handleDragEnd = (e) => {\n        if (configuration.currentProduct.config.missingDropEventsBug) {\n            dragManager.handleDrop(e);\n            return;\n        }\n        dragManager.handleDragEnd();\n    }\n\n    handleContextMenu = (mouseEvent) => {\n        mouseEvent.stopPropagation();\n        if (this.props.disableInteraction) { return; }\n        this.overlayState.toggleOverlay();\n        this.context.viewState.setContextMenuPositionState({\n            x: mouseEvent.clientX,\n            y: mouseEvent.clientY\n        });\n        const libraryFilter = isBrandLibrary(this.element.library);\n        metrics.reportElementEvent('Navigation', libraryFilter ? 'brands' : 'libraries', 'click', 'library-asset-contextual-menu', this.element);\n        showContextMenu(this.element);\n        environment.onContextMenu(mouseEvent);\n    }\n\n    get contextMenuButton() {\n        if (this.props.viewMode === 'grid' && configuration.currentProduct.config.showElementContextMenuButton?.()) {\n            return (\n                <div className={classNames('gridContextMenuButton', { 'open': this.overlayState.isOpen })}>\n                    <ContextMenuButton onContextMenuClick={this.handleContextMenu} />\n                </div>\n            );\n        }\n    }\n\n    @observable.ref metadataRef;\n    setMetadataRef = el => {\n        this.metadataRef = el;\n    }\n\n    getGroupMeta(group, additionalDetails) {\n        const groups = getAllAncestors(group, true);\n        const names = groups.map(group => group.name);\n        // if searching across all libraries, we add the library name to the path\n        if (this.context.viewState.isLibrariesSearchMode()) {\n            names.unshift(group.library.name);\n        }\n        // if searching in document mode, remove the first group from the path\n        const shouldExcludeRoot = groups.find(group => !!group.excludeFromChildPaths);\n        if (this.context.viewState.isDocumentSearchMode() && shouldExcludeRoot) {\n            names.shift();\n        }\n        // If removing the first group from the path leaves it empty, we're done.\n        if (!names.length) { return; }\n\n        const { width: usedWidth } = measureTextDimensions(additionalDetails, 'panel-list-item-info');\n        const availableWidth = this.metadataRef && this.metadataRef.clientWidth - usedWidth;\n        const maxWidth = availableWidth || configuration.TOOLTIP_MAX_WIDTH;\n        // Add a comma separating the path from the rest of the metadata.\n        // We want to add the coma here so it can be taken into account when calculating the overflow/truncation.\n        if (additionalDetails) {\n            names[0] = `, ${names[0]}`;\n        }\n        const truncatedPath = truncatePath(names, { maxWidth, className: 'panel-list-item-info' });\n        if (!additionalDetails) { return truncatedPath; }\n        // Truncation might have removed the first entry, so make sure to add the comma back.\n        return truncatedPath.includes(',') ? truncatedPath : `, ${truncatedPath}`;\n    }\n\n    get additionalDetails() {\n        if (configuration.currentProduct.config.hideListViewMetadata && !this.context.viewState.isSearchMode()) {\n            return;\n        }\n        let hideExtension = false;\n        if (configuration.currentProduct.config.shouldShowExtensionInSearch) {\n            hideExtension = configuration.currentProduct.config.shouldShowExtensionInSearch(this.props.element);\n        }\n        const additionalDetails = elementConfiguration.getAdditionalElementDetails(this.props.element);\n        let extension = !hideExtension && elementConfiguration.getExtension(this.props.element);\n        extension = extension && (<span className=\"list-item-extension\" data-test-id=\"info-extension\">{ extension.toUpperCase() }</span>);\n\n        const group = this.props.element.getGroups()[0];\n        const basicInfo = [ additionalDetails ].filter(x => x).join(', ');\n        const groupInfo = group && this.context.viewState.isSearchMode() && this.getGroupMeta(group, basicInfo);\n        const allInfo = (basicInfo || groupInfo) && <span data-test-id=\"info-text\">{basicInfo}{groupInfo}</span>;\n        if (extension || allInfo) {\n            return <div ref={this.setMetadataRef} data-test-id=\"info-text-container\" className=\"panel-list-item-info\">\n                {extension}{allInfo}\n            </div>;\n        }\n    }\n\n    get extension() {\n        const extension = elementConfiguration.getExtension(this.element) || '';\n        return <div data-test-id=\"extension-text\" className=\"panel-grid-item-extension\">{ extension.toUpperCase() }</div>;\n    }\n\n    onNameClick = event => {\n        !configuration.currentProduct.config.applyElementOnNameClick && this.onClickSetSelection(event);\n    };\n\n    get nameAndDescription() {\n        const additionalDetails = this.additionalDetails;\n\n        return (this.props.viewMode === 'list' && additionalDetails) ? (\n            <div className=\"panel-list-item-multiline-container\">\n                <EditableElementName onNameClick={ this.onNameClick } element={ this.element } selected={ this.selected } viewMode={ this.props.viewMode }/>\n                {additionalDetails}\n            </div>\n        ) : (this.props.viewMode === 'list' || !configuration.currentProduct.config.hideNamesInGridView) && (\n            <div className=\"panel-grid-item-multiline-container\">\n                <EditableElementName onNameClick={ this.onNameClick } element={ this.element } selected={ this.selected } viewMode={ this.props.viewMode }/>\n                { this.props.showDetails !== 'none' && this.gridElementDetails }\n            </div>\n        );\n    }\n\n    get gridElementDetails() {\n        return (\n            <div className=\"panel-grid-item-type\" data-test-id=\"grid-item-details\">\n                { elementConfiguration.getGridElementDetails(this.props.showDetails, this.props.element) }\n            </div>\n        );\n    }\n\n    get overlay() {\n        const classes = classNames({\n            'disabled-item': this.disabled,\n            'selected': this.selected,\n            'has-opacity-bug': environment.hasOpacityBug,\n            'invalid-rename': this.invalidRename\n        }, `panel-${this.props.viewMode}-selected-overlay`);\n\n        return <div className={ classes }></div>;\n    }\n\n    get isDraggable() {\n        if (this.props.disableInteraction) { return false; }\n        return this.context.viewManager.renamingItem !== this.element && this.props.viewMode !== 'thumbnail';\n    }\n\n    _registerElementNode = (node, element) => {\n        environment.registerElementNode && environment.registerElementNode(element, node);\n    }\n\n    // When Show Names Always mode is on, we want to center the thumbnail contents of large and medium grid size elements above the name, so no part of the thumbnail is covered by the name\n    get shouldRenderThumbnailAboveName() {\n        return this.props.viewMode === 'grid'\n            && [ configuration.GRID_TYPE_LARGE, configuration.GRID_TYPE_MEDIUM ].includes(this.props.gridSizeType)\n            && this.context.viewState.nameVisibility === 'always';\n    }\n\n    get thumbnailContents() {\n        if (this.shouldRenderThumbnailAboveName) {\n            const nameHeight = configuration.currentProduct.isExpandedView?.() ? configuration.EXPANDED_GRID_VIEW_NAME_HEIGHT : configuration.GRID_VIEW_NAME_HEIGHT;\n            return <div data-test-id=\"grid-thumbnail-above-name\" className=\"grid-thumbnail-above-name\" style={ { height: `calc(100% - ${nameHeight}px)` } }>{ this.props.children }</div>;\n        }\n        return this.props.children;\n    }\n\n    @computed get tooltipContent() {\n        if (this.props.disableTooltip) { return; }\n        return elementConfiguration.getTooltipContent(this.element);\n    }\n\n    @computed get stockId() {\n        if (AdobeStockUtils.isStockAsset(this.element)) {\n            return AdobeStockUtils.getStockId(this.element);\n        }\n        return null;\n    }\n\n    onMouseOver = () => {\n        const isPendingUpdate = this.element.isPendingUpdate;\n        if (!this.element.isDeprecatedLegacyDocumentLink && isPendingUpdate && !environment.isPreviewActive && configuration.currentProduct.config.updatedPreviewOnThumbnailHover) {\n            metrics.reportElementEvent('Gated Update', 'Element', 'render', 'preview-update', this.element);\n            environment.startPreview(this.element);\n        }\n    }\n\n    onMouseOut = () => {\n        if (environment.isPreviewActive && configuration.currentProduct.config.updatedPreviewOnThumbnailHover) {\n            environment.cancelPreview();\n        }\n    }\n\n    render() {\n        if (this.props.viewMode.startsWith('thumbnail')) {\n            const additionalClasses = elementConfiguration.getAdditionalClasses(this.element);\n            const classes = classNames('panel-list-item', `${this.props.viewMode}-view`, additionalClasses);\n            return (\n                <div className={ classes } data-test-id={`element-thumbnail-${ this.element.getLegacyReference() }`}\n                    draggable={ this.isDraggable }\n                    onDragStart={ this.handleDragStart }\n                    onDragEnd={ this.handleDragEnd }>\n                    { this.props.children }\n                    { this.elementBadges }\n                </div>\n            );\n        }\n\n        const elementView = (\n            <div id={`element-${ this.element.id }`}\n                ref={ e => this._registerElementNode(e, this.element) }\n                className={ this.getClasses() }\n                style={this.style}\n                img-size=\"\"\n                data-test-id={`element-${ this.element.getLegacyReference() }`}\n                draggable={ this.isDraggable }\n                onClick={ this.handleClick }\n                onDoubleClick={ this.handleDoubleClick }\n                { ...environment.contextMenuEventListeners(this.handleContextMenu) }\n                onDragStart={ this.handleDragStart }\n                onDragEnd={ this.handleDragEnd }\n                onMouseOver={ this.onMouseOver }\n                onMouseOut={ this.onMouseOut }\n                // Add 'data-stock-id' to the element if it is a stock asset\n                { ...(this.stockId ? { 'data-stock-id': this.stockId } : {}) }\n            >\n                { this.thumbnailContents }\n                { !this.props.thumbnailOnly && <>\n                    { this.overlay }\n                    { this.nameAndDescription }\n                    { this.props.viewMode === 'list' && this.placeButton }\n                    { this.contextMenuButton || this.elementBadges }\n                </> }\n            </div>\n        );\n\n        // Color themes should not have a top level tooltip in grid view\n        if (!this.tooltipContent) { return elementView; }\n\n        return (<Tooltip placement=\"top-start\" content={ !configuration.currentProduct.config.disableContentViewTooltips ? this.tooltipContent : undefined } className=\"element-tooltip\">\n            { elementView }\n            { environment.hasUXPScrollZIndexBug && this.props.viewMode === 'list' && (\n                <div data-test-id=\"uxp-scrollbar-drag-padding\" className=\"uxp-scrollbar-drag-padding\"/>\n            ) }\n        </Tooltip>);\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\n\nimport BaseElementView from './BaseElementView';\nimport Thumbnail from './utils/Thumbnail';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\n\n// Basic Thumbnail view handles loading the thumbnail rendition for elements with no background\n\n@observer\nexport default class BasicThumbnailElementView extends React.Component {\n    static contextType = LibrariesContext;\n    static defaultProps = {\n        viewMode: 'grid',\n    };\n\n    static propTypes = {\n        ...BaseElementView.propTypes\n    };\n\n    render() {\n        return (\n            <BaseElementView { ...this.props }>\n                {\n                    // List view has an extra container around thumbnail contents. Could try to remove this later.\n                    [ 'list', 'thumbnail' ].includes(this.props.viewMode) ? (\n                        <div className=\"panel-list-item-thumb\" img-size=\"\">\n                            <Thumbnail element={ this.props.element } viewMode={this.props.viewMode} thumbnailType= { this.context.viewState.thumbnailType }/>\n                        </div>\n                    ) : <Thumbnail element={ this.props.element } viewMode={this.props.viewMode} thumbnailType= { this.context.viewState.thumbnailType }/>\n                }\n            </BaseElementView>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport classNames from 'classnames';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\n\nimport BaseElementView from './BaseElementView';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport environment from 'app/js/environment';\nimport { UXPColorProfiles, getBackgroundColor } from 'app/js/utils/colorUtils';\nimport configuration from 'app/js/config/configuration';\n\n@observer\nexport default class ColorElementView extends React.Component {\n\n    static defaultProps = {\n        viewMode: 'grid'\n    };\n\n    static propTypes = {\n        ...BaseElementView.propTypes\n    };\n\n    @computed get disabled() {\n        return elementConfiguration.isDisabled(this.props.element) && !this.props.viewMode.startsWith('thumbnail') && !configuration.currentProduct.isExpandedView?.();\n    }\n\n    convertSingleColor(color) {\n        return environment.convertSingleColor(color);\n    }\n\n    // Style the actual color div\n    getStyle() {\n        return {\n            backgroundColor: getBackgroundColor(\n                this.props.element,\n                this.disabled,\n                environment.shouldConvertColor() ? this.convertSingleColor : undefined)\n        };\n    }\n\n    get hasOpacity() {\n        // Do the primary representation\n        const representation = this.props.element.getPrimaryRepresentation();\n        const color = representation && representation.getValue('color', 'data');\n        return color && color.alpha !== undefined && color.alpha !== 1;\n    }\n\n    get colorView() {\n        const className = classNames(\n            `panel-${this.props.viewMode}-color-item-thumb`,\n            {\n                disabled: this.disabled,\n                opacity: this.hasOpacity,\n                'panel-grid-item-contents': this.props.viewMode === 'grid'\n            }\n        );\n\n        // color-profile css based on the type of UXPColorProfiles\n        let panelColorItemCSS = 'panel-color-item-content';\n        if (environment.colorProfile === UXPColorProfiles.SRGB) {\n            panelColorItemCSS = 'panel-color-item-content-auto';\n        }\n        return <div className={ className } >\n            <div data-test-id={ `color-view-${this.props.viewMode}` } style={ this.getStyle() } className={panelColorItemCSS} />\n        </div>;\n    }\n\n    render() {\n        return <BaseElementView { ...this.props }>{ this.colorView }</BaseElementView>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { computed } from 'mobx';\n\nimport BaseElementView from './BaseElementView';\nimport Tooltip from 'app/js/components/Tooltip';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport * as ColorUtils from 'app/js/utils/colorUtils';\nimport classNames from 'classnames';\nimport { showContextMenu } from 'app/js/menus/elementContextMenu';\nimport environment from 'app/js/environment';\nimport configuration from 'app/js/config/configuration';\nimport uuid from 'uuid/v4';\n\n@observer\nexport default class ColorThemeElementView extends React.Component {\n\n    static defaultProps = {\n        viewMode: 'grid',\n        isMosaicView: false\n    };\n\n    static propTypes = {\n        ...BaseElementView.propTypes,\n        isMosaicView: PropTypes.bool\n    };\n\n    @computed get disabled() {\n        return elementConfiguration.isDisabled(this.props.element) && !this.props.viewMode.startsWith('thumbnail') && !configuration.currentProduct.isExpandedView?.();\n    }\n\n    @computed get representation() {\n        return elementConfiguration.findUsableRepresentation(this.props.element, `application/vnd.adobe.colortheme+json`);\n    }\n\n    get isInteractive() {\n        return !this.props.viewMode.startsWith('thumbnail') && !this.props.disableInteraction;\n    }\n\n    get swatches() {\n        /* Value of colortheme data: {\n            mood: \"bright\",\n            swatches: [[], [], [], [], [ // 5 swatches\n                // 1 or 2 objects in every swatch for CMYK and RGB or just RGB\n                {\n                    mode: \"CMYK\",\n                    profileName: \"U.S. Web Coated\",\n                    type: \"process\",\n                    value: {\n                        c: 90.16, k: 4.42, m: 8, y: 8\n                    }\n                }, {\n                    mode: \"RGB\",\n                    profileName: \"sRGB IE123131\",\n                    type: \"process\",\n                    value: { r,g,b }\n                }\n            ]]\n        } */\n        const colorThemeData = this.representation && this.representation.getValue('colortheme', 'data');\n        if (colorThemeData) { return colorThemeData.swatches; }\n    }\n\n    useColor(colorData, event) {\n        if (this.isInteractive) {\n            const colorOps = elementConfiguration.getApplyOperations(this.props.element, colorData);\n            const operationToApply = colorOps.find(operation => !!operation.onClick);\n            if (operationToApply) { operationToApply.apply(); }\n            event.stopPropagation();\n        }\n    }\n\n    getStyle(swatch) {\n        return {\n            background: ColorUtils.getSwatchBackgroundColor(swatch, this.disabled)\n        };\n    }\n\n    getColorSwatches() {\n        if (!this.swatches) { return; }\n        let classes;\n\n        // List view\n        if ([ 'list', 'thumbnail' ].includes(this.props.viewMode)) {\n            classes = classNames({\n                'interactive': this.isInteractive,\n                'panel-thumbnail-disabled': this.disabled\n            }, 'panel-list-colortheme-item-thumb');\n\n            const innerClasses = classNames({\n                'thumbnail-view': !this.isInteractive\n            }, 'panel-list-colortheme-item-color');\n\n            return (\n                <div className={ classes } data-test-id={`colortheme-view-${this.props.viewMode}`}>{\n                    this.swatches.map(swatch => (\n                        <div key={uuid()} className={innerClasses} style={ this.getStyle(swatch) } onClick={ (clickEvent) => this.useColor(swatch, clickEvent) }>\n                            {this.isInteractive\n                                && <Tooltip placement=\"top-start\" content={ elementConfiguration.getTooltipContent(this.props.element, swatch) }>\n                                    <div className=\"panel-list-colortheme-item-color-inner\"></div>\n                                </Tooltip>\n                            }\n                        </div>\n                    ))\n                }</div>\n            );\n        }\n\n        // Grid view, detail view (1-up), or mosaic view\n        classes = classNames({\n            'panel-thumbnail-disabled':  this.disabled,\n            'panel-colortheme-mosaic-view': this.props.isMosaicView,\n            'panel-colortheme-item-color': !this.props.isMosaicView\n        });\n\n        const colorThemeContainerClasses = classNames('panel-colortheme-container', {\n            'panel-grid-item-contents' : !(this.props.viewMode.startsWith('thumbnail') || this.props.isMosaicView),\n            'panel-grid-item-contents-no-border-radius' : this.props.viewMode.startsWith('thumbnail') || this.props.isMosaicView });\n\n        // Note: Using index as the key in the list because there is no swatch id, and assuming the list of swatches in a theme should not change order.\n        // If they can change order, need to revisit this. Could use the values instead, if there cannot be duplicate color swatches in a theme.\n        return (\n            <div className={ colorThemeContainerClasses }>{\n                this.swatches.map(swatch => (\n                    <div key={uuid()} data-test-id=\"inner-swatch\" className={ classes } style={ this.getStyle(swatch) } onClick={ (clickEvent) => this.useColor(swatch, clickEvent) } { ...environment.contextMenuEventListeners((mouseEvent) => this.handleContextMenu(mouseEvent, swatch)) }>\n                        <Tooltip className=\"element-tooltip\" placement=\"bottom\"\n                            content={ configuration.currentProduct.config.disableContentViewTooltips ? undefined : elementConfiguration.getTooltipContent(this.props.element, swatch) }>\n                            <div className=\"panel-colortheme-item-color-inner\"></div>\n                        </Tooltip>\n                    </div>\n                ))\n            }</div>\n        );\n    }\n\n    handleContextMenu = (mouseEvent, swatch) => {\n        if (!this.isInteractive) { return; }\n        mouseEvent.stopPropagation();\n        showContextMenu(this.props.element, swatch);\n        environment.onContextMenu(mouseEvent);\n    }\n\n    render() {\n        return (\n            <BaseElementView { ...this.props }>\n                { this.getColorSwatches() }\n            </BaseElementView>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport classNames from 'classnames';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\n\nimport BaseElementView from './BaseElementView';\nimport ThumbnailElementView from './ThumbnailElementView';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport environment from 'app/js/environment';\nimport { UXPColorProfiles, getCSSForGradientElement } from 'app/js/utils/colorUtils';\nimport configuration from 'app/js/config/configuration';\n\n@observer\nexport default class GradientElementView extends React.Component {\n\n    static defaultProps = {\n        viewMode: 'grid'\n    };\n\n    static propTypes = {\n        ...BaseElementView.propTypes\n    };\n\n    @computed get disabled() {\n        return elementConfiguration.isDisabled(this.props.element) && !this.props.viewMode.startsWith('thumbnail') && !configuration.currentProduct.isExpandedView?.();\n    }\n\n    @computed get style() {\n        return getCSSForGradientElement(\n            this.props.element,\n            this.disabled,\n            true, // useTransform\n            false, // forceLinear\n            environment.shouldConvertColor() ? this.convertSingleColor : undefined);\n    }\n\n    convertSingleColor(color) {\n        return environment.convertSingleColor(color);\n    }\n\n    get customRenderer() {\n        return elementConfiguration.getCustomRenderer(this.props.element);\n    }\n\n    get gradientThumbnail() {\n        const CustomRenderer = this.customRenderer;\n        if (CustomRenderer) {\n            return <CustomRenderer { ...this.props } />;\n        }\n        let panelGradientItemCSS = 'panel-gradient-item-content';\n        if (environment.colorProfile === UXPColorProfiles.SRGB) {\n            panelGradientItemCSS = 'panel-gradient-item-content-auto';\n        }\n        return <div data-test-id={ `gradient-view-${this.props.viewMode}` } style={ this.style } className={panelGradientItemCSS} />;\n    }\n\n    get gradient() {\n        return (\n            <div className={ classNames(`panel-${this.props.viewMode}-gradient-item-thumb`, { disabled: this.disabled }) }>\n                { this.gradientThumbnail }\n            </div>\n        );\n    }\n\n    get gradientView() {\n        if (this.props.viewMode === 'grid') {\n            // Prevents the gradient from overflowing the rounded corners in the grid view\n            return <div className=\"panel-grid-item-contents\">{ this.gradient }</div>;\n        }\n        return this.gradient;\n    }\n\n    render() {\n        if (this.style || this.customRenderer) {\n            return <BaseElementView { ...this.props }>{ this.gradientView }</BaseElementView>;\n        }\n        return <ThumbnailElementView { ...this.props } />;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport Badge from 'app/js/components/elements/badges/Badge';\nimport { observer } from 'mobx-react';\nimport { computed } from 'mobx';\nimport { translate } from 'app/js/managers/translationManager';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport metrics from 'app/js/interface/metrics';\nimport * as LinkUtils from 'app/js/utils/linkUtils';\nimport { Element } from '@cclibraries/cc-libraries-js';\nimport DocumentElement from 'app/js/models/documentAssets/DocumentElement';\n\n@observer\nexport default class LicenseBadge extends React.Component {\n\n    static propTypes = {\n        element: PropTypes.oneOfType([ PropTypes.instanceOf(Element), PropTypes.instanceOf(DocumentElement) ]).isRequired,\n    }\n\n    get element() {\n        return this.props.element;\n    }\n\n    @computed get licenseBadge() {\n        return (\n            <Badge\n                dataTestId=\"license\"\n                icon=\"ShoppingCart\"\n                tooltipContent={ translate('DL_STOCK_LICENSE_MENU' + AdobeStockUtils.getLocalizationSuffix(this.element)) }\n                onClick={ this.handleLicense }\n                isDisabled={ !AdobeStockUtils.canShowLicenseDialog() }\n            />\n        );\n    }\n\n    handleLicense = () => {\n        metrics.reportStockEvent('License', 'click', 'start', { ui: { sequence: 'thumbnail' } }, this.element);\n\n        // Check current environment can show License Dialog\n        if (!AdobeStockUtils.canShowLicenseDialog()) {\n            LinkUtils.launchStockAssetURL(AdobeStockUtils.getStockId(this.element), this.element.type);\n            return;\n        }\n\n        AdobeStockUtils.showLicenseDialog(this.element).then(() => {\n            metrics.reportStockEvent('License', 'render', 'success', { ui: { sequence: 'thumbnail' } }, this.element);\n        }).catch(() => {\n            metrics.reportStockEvent('License', 'render', 'error', { ui: { sequence: 'thumbnail' } }, this.element);\n        });\n    }\n\n    render() {\n        // Check if is a stock asset that is not currently licensed\n        if (AdobeStockUtils.isStockAsset(this.element) && !AdobeStockUtils.isLicensed(this.element)) {\n            return this.licenseBadge;\n        }\n        return null;\n    }\n}\n","\n/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\nimport BaseElementView from './BaseElementView';\nimport ThumbnailElementView from './ThumbnailElementView';\nimport LicenseBadge from 'app/js/components/elements/badges/LicenseBadge';\n\n@observer\nexport default class StockElementView extends React.Component {\n\n    static defaultProps = {\n        viewMode: 'grid',\n    };\n\n    static propTypes = {\n        ...BaseElementView.propTypes\n    };\n\n    render() {\n        const renderProps = {\n            viewMode: this.props.viewMode,\n            element: this.props.element,\n            showDetails: this.props.showDetails,\n            gridSizeType: this.props.gridSizeType\n        };\n\n        return (\n            <ThumbnailElementView {...renderProps} listStyle={ this.props.listStyle } elementBadges={[ <LicenseBadge key={ 'license-badge' } element={ this.props.element } /> ]}>\n                { this.props.children }\n            </ThumbnailElementView>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport Badge from 'app/js/components/elements/badges/Badge';\nimport { observer } from 'mobx-react';\nimport { computed } from 'mobx';\nimport environment from 'app/js/environment';\nimport { translate } from 'app/js/managers/translationManager';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport SpectrumCircleLoader from 'app/js/components/spectrum/SpectrumCircleLoader';\nimport Icon from 'app/js/components/Icon';\nimport Tooltip from 'app/js/components/Tooltip';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport { Element } from '@cclibraries/cc-libraries-js';\nimport DocumentElement from 'app/js/models/documentAssets/DocumentElement';\n\n@observer\nexport default class SyncFontBadge extends React.Component {\n    static contextType = LibrariesContext;\n    static propTypes = {\n        element: PropTypes.oneOfType([ PropTypes.instanceOf(Element), PropTypes.instanceOf(DocumentElement) ]).isRequired,\n    }\n\n    get element() {\n        return this.props.element;\n    }\n\n    @computed\n    get loadingBadge() {\n        const SmallSpinner = environment.SmallSpinner;\n        return (\n            <div className=\"element-badge-container\">\n                <div data-test-id=\"loading-badge-spinner\" className=\"element-badge-overlay loading-spinner\">\n                    { SmallSpinner ? <SmallSpinner /> : <SpectrumCircleLoader size=\"small\" indeterminate /> }\n                </div>\n            </div>\n        );\n    }\n\n    @computed\n    get missingFontBadge() {\n        return (\n            <Tooltip placement=\"top-start\" content={ translate('DL_FONT_MISSING_TOOLTIP') }>\n                <div className=\"element-badge-warning-missing\" data-test-id=\"font-badge-missing\" ><Icon id=\"MissingFontWarning\" height={ 16 }/></div>\n            </Tooltip>\n        );\n    }\n\n    @computed\n    get activateBadge() {\n        return (\n            <Badge\n                dataTestId=\"activate\"\n                icon=\"SyncDefault\"\n                badgeSize=\"small\"\n                iconHeight={ 10 }\n                tooltipContent={ translate(`DL_TYPEKIT_${this.typekitAction.toUpperCase()}_TOOLTIP`) }\n                onClick={ () => this.runTypekitAction(this.typekitAction) }\n            />\n        );\n    }\n\n    @computed get typekitFont() {\n        const fontName = this.style && this.style.adbeFont && this.style.adbeFont.postScriptName;\n        return this.context.libraryManager.getTypekitFontData(fontName);\n    }\n\n    @computed get isFontSyncing() {\n        return this.typekitFont.isFontSyncing;\n    }\n\n    get style() {\n        const shortType = elementConfiguration.getShortType(this.element.type);\n        const representation = elementConfiguration.findUsableRepresentation(this.element, `application/vnd.adobe.${shortType}+json`);\n        const styleData = representation && representation.getValue(shortType, 'data');\n        return styleData?.adbeFont ? styleData : { adbeFont : styleData };\n    }\n\n    get isMissingFont() {\n        return !this.context.libraryManager.isFontAvailable(this.style);\n    }\n\n    get isTypekitFont() {\n        return !!this.typekitFont.fontId;\n    }\n\n    // Action that we can take to obtain the font: either \"sync\" or \"upgrade\"\n    get typekitAction() {\n        const actions = this.typekitFont.fontActions;\n        if (actions && actions.length === 0) {\n            return 'sync';\n        }\n        if (actions && actions.includes('upgrade')) {\n            return 'upgrade';\n        }\n        // Either no actions, or preview_only (i.e. we can't sync or purchase the font).\n    }\n\n    runTypekitAction = (typekitAction) => {\n        typekitAction === 'sync' ? this.typekitFont.sync(this.style, 'icon', this.element) : this.typekitFont.upgrade('icon', this.element);\n    }\n\n    render() {\n        if (this.disabled || !this.isMissingFont) {\n            // If the element is disabled (Eg: Animate) or there's no missing font, we don't need to display any additional information\n            return null;\n        }\n\n        if (this.typekitFont) {\n            if (this.typekitFont.isLoading) {\n                return null;\n            }\n            if (this.typekitFont.isFontSyncing) {\n                return this.loadingBadge;\n            }\n\n            return this.typekitAction ? this.activateBadge : this.missingFontBadge;\n        }\n\n        return this.missingFontBadge;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport classNames from 'classnames';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport { colorDataToHexString } from 'app/js/utils/colorUtils';\nimport * as TextStyleUtils from 'app/js/utils/textstyleUtils';\nimport BaseElementView from './BaseElementView';\nimport Thumbnail from './utils/Thumbnail';\nimport configuration from 'app/js/config/configuration';\nimport SyncFontBadge from 'app/js/components/elements/badges/SyncFontBadge';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport environment from 'app/js/environment';\nimport thumbnailManager from 'app/js/managers/thumbnailManager';\n\n/**\n * Renderer for text styles, paragraph styles, and fonts, including Typekit support\n */\n\n@observer\nclass TextStyleElementViewImpl extends React.Component {\n    static contextType = LibrariesContext;\n    static defaultProps = {\n        viewMode: 'grid',\n        mosaicTileSize: undefined,\n    };\n\n    static propTypes = {\n        ...BaseElementView.propTypes, // gridSizeType, etc.\n        height: PropTypes.number,\n        width: PropTypes.number,\n        mosaicTileSize: PropTypes.oneOf([ 'quarter', 'full' ]),\n    };\n\n    @computed get style() {\n        const shortType = elementConfiguration.getShortType(this.props.element.type);\n        const representation = elementConfiguration.findUsableRepresentation(this.props.element, `application/vnd.adobe.${shortType}+json`);\n        const style = representation && representation.getValue(shortType, 'data');\n\n        // Special case for fonts - the font element type is the data inside adbeFont on a character/paragraph style\n        // It needs to be be presented in the same format for this component and the utils to work.\n        return this.props.element.type === configuration.FONT_ELEMENT_TYPE ? { adbeFont: style } : style;\n    }\n\n    @computed get colorStyle() {\n        if (TextStyleUtils.hasFontColor(this.style)) {\n            return {\n                backgroundColor: colorDataToHexString(this.style.color)\n            };\n        }\n    }\n\n    get requiresContrastingBackground() {\n        // Note: This assumes the background is white; if we change that, pass it in as the second parameter.\n        return TextStyleUtils.isFontColorPoorContrast(this.style);\n    }\n\n    getColorSwatch(isFloating) {\n        if (!TextStyleUtils.hasFontColor(this.style) || this.props.mosaicTileSize) { return; }\n\n        const classes = classNames(this.props.viewMode === 'grid' ? 'panel-textstyle-color' : 'panel-textstyle-list-item-color', {\n            'contrast': this.requiresContrastingBackground,\n            'inline': !isFloating\n        });\n\n        return <div data-test-id=\"textstyle-color-swatch\" style={ this.colorStyle } className={ classes }></div>;\n    }\n\n    @computed get colorSwatchOverlay() {\n        return this.getColorSwatch(true);\n    }\n\n    @computed get disabled() {\n        return elementConfiguration.isDisabled(this.props.element) && !this.props.viewMode.startsWith('thumbnail') && !configuration.currentProduct.isExpandedView?.();\n    }\n\n    get isMissingFont() {\n        return !this.context.libraryManager.isFontAvailable(this.style);\n    }\n\n    get isWideElement() {\n        return this.props.gridSizeType === configuration.GRID_TYPE_WIDE;\n    }\n\n    get postScriptNameOrFamily() {\n        return TextStyleUtils.getPostScriptName(this.style) || TextStyleUtils.getFontFamily(this.style);\n    }\n\n    @computed get uselivePreview() {\n        const useThumbnails = configuration.currentProduct.config.useTextStyleThumbnails;\n        const fallbackToLivePreview = configuration.currentProduct.config.fallBackToFontLivePreview;\n\n        // We default to using the live preview, unless an app specifies to use thumbnails instead.\n        // Even then, if the thumbnail is missing, the app can specify whether to fallback to using the live preview (CCX),\n        // or just show the broken rendition (CCD).\n        return !useThumbnails || (fallbackToLivePreview && this._isMissingRendition);\n    }\n\n    // Be aware that on the LocalDriver, if a representation is available from which a rendition can be generated, and the rendition is not already generated and cached,\n    // this check will result in the actual generation of a thumbnail -- but at least this will be cached for the next call in the Thumbnail Component.\n    // (CloudDriver will merely return the URL without fetching it.) Either way this checks the thumbnailManager's cache first.\n    @computed get _isMissingRendition() {\n        return thumbnailManager.getLocalThumbnailURL(this.props.element, this.props.viewMode === 'thumbnail-large') === null;\n    }\n\n    getThumbnail(className) {\n        return <Thumbnail element={ this.props.element } viewMode={ this.props.viewMode } overlay={ this.colorSwatchOverlay } className={ className } thumbnailType={ this.context.viewState.thumbnailType }/>;\n    }\n\n    // Details line is shown in large thumbnails (i.e. in the grid view by type)\n    get detailsLine() {\n        const details = TextStyleUtils.getDetailsText(this.style);\n        return <div data-test-id=\"textstyle-font-details\" className=\"panel-textstyle-rendition-details\">{ details }</div>;\n    }\n\n    @computed get syncFontBadge() {\n        return !this.disabled && <SyncFontBadge key={'sync-font-badge'} element={ this.props.element } />;\n    }\n\n    get customRenderer() {\n        // Use a custom renderer if the product has one (e.g. in XD). We don't yet have designs for rendering if there's no\n        // postscript name / font family specified, so disabling custom rendering in that case for now, but can simplify this later.\n        const CustomRenderer = elementConfiguration.getCustomRenderer(this.props.element);\n        if (CustomRenderer && this.postScriptNameOrFamily) {\n            return <CustomRenderer { ...this.props } />;\n        }\n    }\n\n    getTextStyleView({ previewText, isCentered = true, showDetailsLine = false, minSize, maxSize, includeLetterSpacing = true }) {\n        const cssStyle = TextStyleUtils.getCSSForPreview(this.style, minSize, maxSize, includeLetterSpacing);\n        const containerClasses = classNames('panel-textstyle-rendition-container', {\n            center: isCentered,\n            contrast: this.requiresContrastingBackground,\n            'disabled-item': this.disabled,\n            'preview-container': !!previewText\n        });\n        const fontRenditionClasses = classNames('panel-textstyle-preview', {\n            'expanded-preview': previewText && configuration.currentProduct.isExpandedView?.()\n        });\n        return <div data-test-id=\"textstyle-font-rendition-container\" className={ containerClasses }>\n            <div style={ cssStyle } data-test-id=\"textstyle-font-rendition\" className={ fontRenditionClasses }>{ previewText }</div>\n            { showDetailsLine && this.detailsLine }\n        </div>;\n    }\n\n    isFont() {\n        return this.props.element.type === configuration.FONT_ELEMENT_TYPE;\n    }\n\n    /**\n     * Gets the text to be used in the live preview.\n     * @returns {string} Returns short two letter code 'Ag' or the name of the element.\n     */\n    getLivePreviewText() {\n        const element = this.props.element;\n\n        if (this.props.viewMode === 'grid') {\n            if (this.props.gridSizeType === configuration.GRID_TYPE_WIDE) { return element.name; } // Character styles and paragraph styles outside CCX, in View by Type grid view\n            return configuration.SHORT_FONT_PREVIEW_TEXT;\n        }\n\n        if (this.props.viewMode === 'thumbnail-large') {\n            if (!this.props.mosaicTileSize) { return element.name; } // One Up View\n            return configuration.SHORT_FONT_PREVIEW_TEXT; // Mosaic view (with live preview only applies to CCX currently)\n        }\n\n        if (this.isListOrThumbnailViewMode) {\n            return configuration.SHORT_FONT_PREVIEW_TEXT;\n        }\n    }\n\n    /**\n     * Get the minimum or maximum font size for live preview.\n     *\n     * @param {boolean} max - are we getting the max or minimum size\n     * @returns {number|undefined} Undefined = use the default max, or default min/size intrinsic to the character style.\n     */\n    getLivePreviewFontSize(max) {\n        if (this.props.viewMode === 'grid') {\n            // Character styles and paragraph styles in apps besides CCX are wide\n            if (this.props.gridSizeType === configuration.GRID_TYPE_WIDE) {\n                // Let the minimum be the default or the intrinsic size in a Character Style element.\n                return;\n            }\n            // Font elements are medium grid in all apps, and all text styles are medium in CCX\n            if (this.props.gridSizeType === configuration.GRID_TYPE_MEDIUM) { return configuration.GRID_MEDIUM_PREVIEW_FONT_SIZE; }\n            // Expanded View of Library Contents and View by Group in panel both use the large size\n            if (this.props.gridSizeType === configuration.GRID_TYPE_LARGE) { return configuration.GRID_LARGE_PREVIEW_FONT_SIZE; }\n        }\n\n        if (this.props.viewMode === 'thumbnail-large') {\n            if (!this.props.mosaicTileSize) { // One Up View\n                // Let the minimum be the default or the intrinsic size in a Character Style element. Only specify max.\n                if (max) { return configuration.ONE_UP_ELEMENT_VIEW_MAX_PREVIEW_FONT_SIZE; }\n                return;\n            }\n\n            // Mosaic view of libraries\n            if (this.props.mosaicTileSize === 'quarter') { return configuration.MOSAIC_VIEW_QUARTER_PREVIEW_FONT_SIZE; }\n            if (this.props.mosaicTileSize === 'full') { return configuration.MOSAIC_VIEW_FULL_PREVIEW_FONT_SIZE; }\n        }\n\n        if (this.isListOrThumbnailViewMode) {\n            return configuration.LIST_VIEW_PREVIEW_FONT_SIZE;\n        }\n    }\n\n    get isListOrThumbnailViewMode() {\n        return [ 'list', 'thumbnail' ].includes(this.props.viewMode);\n    }\n\n    // Render a preview in the actual font, for fonts that are available - grid view case\n    @computed get textStyleGridView() {\n        if (!this.uselivePreview) {\n            return <div className={ classNames('panel-textstyle-rendition-container', 'center', { 'font-thumbnail': this.isFont }) }>\n                { this.getThumbnail('panel-textstyle-item-img') }\n            </div>;\n        }\n\n        return this.getTextStyleView({\n            previewText: this.getLivePreviewText(),\n            isCentered: !this.isWideElement,\n            showDetailsLine: this.isWideElement,\n            maxSize: this.getLivePreviewFontSize(true),\n            minSize: this.getLivePreviewFontSize()\n        });\n    }\n\n    // Render a preview in the actual font, for fonts that are available - list view case\n    @computed get textStyleListView() {\n        // If missing font in list view, show the thumbnail as the fallback\n        if (!this.uselivePreview) {\n            return this.getThumbnail('panel-list-textstyle-item-img');\n        }\n\n        return this.getTextStyleView({\n            previewText: this.getLivePreviewText(),\n            maxSize: this.getLivePreviewFontSize(true),\n            minSize: this.getLivePreviewFontSize(),\n            includeLetterSpacing: false\n        });\n    }\n\n    render() {\n        return (\n            <BaseElementView { ...this.props } elementBadges={ [ this.syncFontBadge ] }>\n                {\n                    this.isListOrThumbnailViewMode ? (\n                        <div className={ classNames('panel-list-textstyle-thumb', { 'disabled-item': this.disabled }) }>\n                            { this.customRenderer || this.textStyleListView }\n                        </div>\n                    ) : (\n                        <React.Fragment>\n                            <div className={ `panel-${ this.props.viewMode }-textstyle-thumbnail-holder` }>\n                                { /* This div added for UX requirements for CCD. This allows us to apply spectrum-css styles to the above DIV */ }\n                                <div className=\"panel-grid-textstyle-thumbnail\">\n                                    { this.customRenderer || this.textStyleGridView }\n                                </div>\n                            </div>\n                        </React.Fragment>\n                    )\n                }\n            </BaseElementView>\n        );\n    }\n}\n\n@observer\nexport default class TextStyleElementView extends React.Component {\n\n    static propTypes = {\n        ...BaseElementView.propTypes,\n        height: PropTypes.number,\n        width: PropTypes.number,\n    };\n\n    render() {\n        const { width, ...props } = this.props;\n        const AutoSizerComponent = environment.AutoSizer;\n        if (!width && AutoSizerComponent) {\n            // props.width is undefined in One Up View. This is fine for other element types, and for the text style rendering in CEP apps.\n            // However, in XD, the custom TextStyleRenderer requires a width, and one that changes upon resize to render the truncation correctly.\n            return (<AutoSizerComponent>\n                { ({ width: resizedWidth }) => <TextStyleElementViewImpl width={ resizedWidth } { ...props } /> }\n            </AutoSizerComponent>);\n        }\n        return <TextStyleElementViewImpl { ...this.props } />;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\n\nimport BaseElementView from './BaseElementView';\nimport Thumbnail from './utils/Thumbnail';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\n\n// Thumbnail view handles loading the thumbnail rendition for most of the element types, except for style-based ones\n// (e.g. colors, color themes, text styles, paragraph styles and brushes).\n\n@observer\nexport default class ThumbnailElementView extends React.Component {\n    static contextType = LibrariesContext;\n    static defaultProps = {\n        viewMode: 'grid',\n    };\n\n    static propTypes = {\n        ...BaseElementView.propTypes,\n        children: PropTypes.node,\n        height: PropTypes.number,\n        width: PropTypes.number,\n        elementBadges: PropTypes.arrayOf(PropTypes.node),\n    };\n\n    get thumbnail() {\n        const CustomRenderer = elementConfiguration.getCustomRenderer(this.props.element);\n        if (CustomRenderer) {\n            return <CustomRenderer { ...this.props } />;\n        }\n\n        return <Thumbnail element={ this.props.element } viewMode={ this.props.viewMode } thumbnailType={ this.context.viewState.thumbnailType }/>;\n    }\n\n    get thumbnailContainer() {\n        // List view has an extra container around thumbnail contents. Could try to remove this later.\n        if ([ 'list', 'thumbnail' ].includes(this.props.viewMode)) {\n            return <div className=\"panel-list-item-thumb\" img-size=\"\">\n                { this.thumbnail }\n                { this.props.children }\n            </div>;\n        }\n\n        return <>\n            { this.thumbnail }\n            { this.props.children }\n        </>;\n    }\n\n    render() {\n        return (\n            <BaseElementView { ...this.props }>\n                { this.thumbnailContainer }\n            </BaseElementView>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { observer } from 'mobx-react';\nimport Icon from 'app/js/components/Icon';\nimport Button from 'app/js/components/Button';\nimport Tooltip from 'app/js/components/Tooltip';\n\n/* Badge already includes a circular button background (\"overlay\") behind the icon */\n\n@observer\nexport default class Badge extends React.Component {\n\n    static propTypes = {\n        dataTestId: PropTypes.string.isRequired,\n        icon: PropTypes.string.isRequired,\n        onClick: PropTypes.func.isRequired,\n        tooltipContent: PropTypes.string.isRequired,\n        isDisabled: PropTypes.bool,\n        iconHeight: PropTypes.number,\n        badgeSize: PropTypes.oneOf([ 'small', 'large' ]),\n    }\n\n    static defaultProps = {\n        isDisabled: false,\n        iconHeight: 16,\n        badgeSize: 'large'\n    }\n\n    render() {\n        const classes = classNames('element-badge-container', { disabled: this.props.isDisabled });\n        const buttonClasses = classNames('element-badge-overlay', `element-badge-size-${this.props.badgeSize}`, `element-badge-${this.props.dataTestId}`);\n        return (\n            <Tooltip placement=\"top-start\" content={ this.props.tooltipContent }>\n                <div className={classes}>\n                    <Button\n                        data-test-id={`element-badge-${ this.props.dataTestId }-button`}\n                        className={ buttonClasses }\n                        onClick={ this.props.onClick }\n                        size=\"s\"\n                    >\n                        <Icon id={ this.props.icon } height={ this.props.iconHeight } />\n                    </Button>\n                </div>\n            </Tooltip>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\n\n@observer\nexport default class FileAsset extends React.Component {\n    // This svg needs to be in a react component so we can style the individual fills according to spectrum\n    render() {\n        return (\n            <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 128 128\" height=\"128\" width=\"128\">\n                <g>\n                    <path className=\"asset-fileBackground\" d=\"M24,126c-5.5,0-10-4.5-10-10V12c0-5.5,4.5-10,10-10h61.5c2.1,0,4.1,0.8,5.6,2.3l20.5,20.4c1.5,1.5,2.4,3.5,2.4,5.7V116c0,5.5-4.5,10-10,10H24z\"></path>\n                    <g>\n                        <path className=\"asset-fileOutline\" d=\"M113.1,23.3L92.6,2.9C90.7,1,88.2,0,85.5,0H24c-6.6,0-12,5.4-12,12v104c0,6.6,5.4,12,12,12h80c6.6,0,12-5.4,12-12V30.4C116,27.8,114.9,25.2,113.1,23.3z M90,6l20.1,20H92c-1.1,0-2-0.9-2-2V6z M112,116c0,4.4-3.6,8-8,8H24c-4.4,0-8-3.6-8-8V12c0-4.4,3.6-8,8-8h61.5c0.2,0,0.3,0,0.5,0v20c0,3.3,2.7,6,6,6h20c0,0.1,0,0.3,0,0.4V116z\"></path>\n                    </g>\n                </g>\n            </svg>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport classNames from 'classnames';\nimport configuration from 'app/js/config/configuration';\nimport Tooltip from 'app/js/components/Tooltip';\nimport { retryElementDownload, getElementDownloadStatus } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport Icon from 'app/js/components/Icon';\nimport environment from 'app/js/environment';\nimport SpectrumCircleLoader from 'app/js/components/spectrum/SpectrumCircleLoader';\nimport { Element } from '@cclibraries/cc-libraries-js';\nimport DocumentElement from 'app/js/models/documentAssets/DocumentElement';\n\n@observer\nexport default class StockDownloadOverlay extends React.Component {\n    static propTypes = {\n        element: PropTypes.oneOfType([ PropTypes.instanceOf(Element), PropTypes.instanceOf(DocumentElement) ]).isRequired,\n        viewMode: PropTypes.oneOf(configuration.ELEMENT_VIEW_MODES).isRequired,\n        listStyle: PropTypes.object\n    };\n\n    get tooltipText() {\n        const {\n            percentDownloaded,\n            hasFailed,\n        } = getElementDownloadStatus(this.props.element);\n\n        if (hasFailed) {\n            return translate('DL_LINK_DOWNLOAD_FAIL_TOOLTIP');\n        }\n\n        if (percentDownloaded === undefined) {\n            return translate('DL_LINK_DOWNLOAD_TOOLTIP');\n        }\n\n        return translate('DL_LINK_DOWNLOAD_PROGRESS_TOOLTIP', { percent: percentDownloaded });\n    }\n\n    getClassNames() {\n        const isGridView = this.props.viewMode === 'grid';\n\n        return classNames({\n            'panel-core-overlay-dimmed-top-right': isGridView,\n            'panel-core-overlay-dimmed-center': !isGridView,\n        });\n    }\n\n    handleClick = () => {\n        if (getElementDownloadStatus(this.props.element).hasFailed) {\n            retryElementDownload(this.props.element);\n        }\n    }\n\n    get loadingSpinner() {\n        const SmallSpinner = environment.SmallSpinner;\n        return SmallSpinner ? <SmallSpinner /> : <SpectrumCircleLoader size=\"small\" indeterminate />;\n    }\n\n    render() {\n        const {\n            isDownloadPending,\n            hasFailed,\n        } = getElementDownloadStatus(this.props.element);\n\n        const classes = !hasFailed ? 'panel-core-overlay-dimmed-center' : this.getClassNames();\n        return isDownloadPending && (\n            <Tooltip placement=\"top-start\" content={this.tooltipText} className=\"panel-core-overlay-tooltip\">\n                <div className={ classes } onClick={this.handleClick} data-test-stock-sync-wrapper=\"visible\" data-test-id=\"stock-overlay-tooltip-trigger\">\n                    { !hasFailed && (\n                        <div className=\"panel-core-overlay-icon-syncing\" data-test-stock-sync=\"sync\">\n                            { this.loadingSpinner }\n                        </div>\n                    ) }\n                    { hasFailed && <div className=\"panel-core-overlay-icon-warning\" data-test-stock-sync=\"fail\"><Icon id=\"Alert\" height={ 16 }/></div> }\n                </div>\n            </Tooltip>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { computed, observable, reaction } from 'mobx';\nimport classNames from 'classnames';\n\nimport thumbnailManager from 'app/js/managers/thumbnailManager';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport configuration from 'app/js/config/configuration';\nimport FileAsset from 'app/js/components/ccd/FileAsset';\nimport SpectrumCircleLoader from 'app/js/components/spectrum/SpectrumCircleLoader';\nimport Icon from 'app/js/components/Icon';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport { Element } from '@cclibraries/cc-libraries-js';\nimport DocumentElement from 'app/js/models/documentAssets/DocumentElement';\nimport StockDownloadOverlay from 'app/js/components/elements/utils/StockDownloadOverlay';\nimport { isStockAsset } from 'app/js/utils/adobeStockUtils';\nimport { usesTextStyleElementView } from 'app/js/utils/textstyleUtils';\n\n/**\n * Component for rendering a thumbnail. This can be used inside of individual views for different element types; it\n * encapsulates all the code for loading the thumbnail into an image, computing its size, etc. By default it will display\n * a background behind the transparent portion of the image (e.g. a checkerboard pattern), but you can disable this.\n */\n@observer\nexport default class Thumbnail extends React.Component {\n    static contextType = LibrariesContext;\n\n    static defaultProps = {\n        viewMode: 'grid',\n    };\n\n    static propTypes = {\n        element:  PropTypes.oneOfType([ PropTypes.instanceOf(Element), PropTypes.instanceOf(DocumentElement) ]).isRequired,\n        viewMode: PropTypes.oneOf(configuration.ELEMENT_VIEW_MODES),\n        thumbnailType: PropTypes.oneOf([ 'list', 'list-group', 'grid', 'grid-group' ]),\n        className: PropTypes.string,\n        overlay: PropTypes.node,\n        showDetails: PropTypes.oneOf([ 'type', 'none' ]),\n        gridSizeType: PropTypes.oneOf(configuration.GRID_SIZE_TYPES)\n    };\n\n    componentDidMount() {\n        this._disposeReaction = reaction(() => this._url, () => {\n            this._hasFailed = false;\n        });\n    }\n\n    componentWillUnmount() {\n        if (this._disposeReaction) {\n            this._disposeReaction();\n        }\n    }\n\n    @observable _hasFailed = false;\n\n    @computed get _url() {\n        return thumbnailManager.getLocalThumbnailURL(this.props.element, this.props.viewMode === 'thumbnail-large');\n    }\n\n    @computed get _isLoading() {\n        return thumbnailManager.isThumbnailLoading(this.props.element, this.props.viewMode === 'thumbnail-large');\n    }\n\n    @computed get disabled() {\n        return elementConfiguration.isDisabled(this.props.element) && !this.props.viewMode.startsWith('thumbnail');\n    }\n\n    _handleError = () => {\n        this._hasFailed = true;\n    };\n\n    get stockDownloadOverlay() {\n        const renderProps = {\n            viewMode: this.props.viewMode,\n            element: this.props.element,\n            showDetails: this.props.showDetails,\n            gridSizeType: this.props.gridSizeType\n        };\n        // Should not render download overlay when viewMode is 'thumbnail'\n        if (isStockAsset(this.props.element) && !this.props.viewMode.startsWith('thumbnail')) {\n            return <StockDownloadOverlay {...renderProps}/>;\n        }\n        return null;\n    }\n\n    get loadingView() {\n        if (configuration.currentProduct.config.ghostLoading) {\n            return this.ghostLoadingView;\n        }\n        return this.spinnerView;\n    }\n\n    // Ghost view, for when the thumbnail is loading\n    get ghostLoadingView() {\n        return <div className=\"ghost-loading-wrapper\">\n            <div data-test-id=\"ghost-loading\" className=\"ghost-loading\">\n                { this.stockDownloadOverlay }\n            </div>\n        </div>;\n    }\n\n    // Spinner view, for when the thumbnail is loading\n    get spinnerView() {\n        return <div data-test-id=\"spinner\" className=\"loading-spinner\"><SpectrumCircleLoader size=\"small\" indeterminate />\n            { this.stockDownloadOverlay }\n        </div>;\n    }\n\n    // Broken thumbnail (missing thumbnail, or problem downloading it) - show the creative cloud icon\n    get brokenThumbnailView() {\n        // check if there is an desired backup thumbnail to use, otherwise use default\n        const preferredBackup = elementConfiguration.getBackupThumbnail(this.props.element, this.props.viewMode);\n        if (preferredBackup) {\n            return preferredBackup;\n        }\n\n        // TODO: Consolidate list and grid view if possible.\n        const classes = classNames('panel-no-rendition-icon', {\n            'panel-grid-icon-missing-rendition': [ 'grid', 'thumbnail-large' ].includes(this.props.viewMode),\n            'panel-list-icon-missing-rendition': [ 'list', 'thumbnail' ].includes(this.props.viewMode),\n        });\n\n        const size = configuration.currentProduct.isExpandedView?.() ? 45 : 20;\n        const thumbnailGraphic = configuration.currentProduct.config.spectrumFailedThumbnail ? <FileAsset /> : <Icon id=\"CreativeCloud\" height={ size }/>;\n\n        return (\n            <div data-test-id=\"thumbnail-failed-icon\" className={`panel-no-rendition-holder-${this.props.viewMode}`}>\n                <span className={ classes }>\n                    { thumbnailGraphic }\n                </span>\n            </div>\n        );\n    }\n\n    get showCheckeredBackground() {\n        return this.context.viewState.elementBackgroundPattern === configuration.ELEMENT_BACKGROUNDS.CHECKERED || elementConfiguration.showCheckeredBackground(this.props.element);\n    }\n\n    // Thumbnail view for actually showing the thumbnail - this draws a checkered background behind the image.\n    get checkedBackgroundThumbnailView() {\n        const classes = classNames('panel-item-img-holder', 'panel-thumbnail-checkered-background', {\n            'panel-thumbnail-disabled': this.disabled\n        });\n\n        return (\n            <div data-test-id=\"thumbnail-holder\" className={ classes } >\n                <img\n                    data-test-id=\"thumbnail\"\n                    className=\"panel-item-img\"\n                    src={ this._url }\n                    onError={ this._handleError }\n                    crossOrigin=\"anonymous\"\n                />\n            </div>\n        );\n    }\n\n    // Pattern elements have tiled thumbnails\n    get isThumbnailTiled() {\n        return elementConfiguration.isThumbnailTiled(this.props.element);\n    }\n\n    // Thumbnail view for actually showing the thumbnail - repeats the thumbnail image to cover the entire thumbnail space\n    get tiledThumbnailView() {\n        const classes = classNames('panel-item-img-holder', 'panel-item-tiled-thumbnail' , {\n            'panel-thumbnail-disabled': this.disabled\n        });\n\n        // This is an absolute/relative file path string. and on windows by default the forward slash is being escaped.\n        // DeEncoding here to avoid any unnecessary behaviours because of this additional escape backward slashes.\n        const url = this._url.replace(/\\\\/g, '/');\n        const style = {\n            backgroundImage: `url(\"${url}\")`,\n        };\n        return <React.Fragment>\n            <div data-test-id=\"thumbnail-holder\" className={ classes } style={ style }/>\n            { this.props.overlay }\n        </React.Fragment>;\n    }\n\n    // Thumbnail view for actually showing the thumbnail - if we don't need a background,\n    // we can simplify the code and use CSS to position the image correctly.\n    get thumbnailView() {\n        const isTextStyleElement = usesTextStyleElementView(this.props.element);\n        const classes = classNames({\n            'panel-thumbnail-disabled': this.disabled,\n            'panel-item-img-scale': !isTextStyleElement,\n        }, this.props.className);\n        return <React.Fragment>\n            <img\n                data-test-id=\"thumbnail\"\n                className={ classes }\n                src={ this._url }\n                onError={ this._handleError }\n                crossOrigin=\"anonymous\"\n            />\n            { this.props.overlay }\n        </React.Fragment>;\n    }\n\n    render() {\n        if (this._isLoading) {\n            return this.loadingView;\n        }\n\n        if (this._hasFailed) {\n            return this.brokenThumbnailView;\n        }\n\n        // for certain element types, even if there is url present, just use the fallback\n        const useFallbackOnly = [ configuration.AUDIO_ELEMENT_TYPE ];\n        if (this._url && !useFallbackOnly.includes(this.props.element.type)) {\n            if (this.isThumbnailTiled) {\n                return this.tiledThumbnailView;\n            }\n            return this.showCheckeredBackground ? this.checkedBackgroundThumbnailView : this.thumbnailView;\n        }\n\n        return this.brokenThumbnailView;\n    }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"H6Y\",\"header\":\"poT\",\"icon\":\"nB6\",\"section\":\"wXD\",\"navigation\":\"ag5\",\"actions\":\"tTX\",\"sideNavAction\":\"x62\",\"navigationItem\":\"Ieh\",\"linkOut\":\"fdP\",\"footer\":\"hzc\"};","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport classNames from 'classnames';\nimport { observer } from 'mobx-react';\nimport Rule from '@torq-native/react-spectrum/Rule';\nimport { SideNav, SideNavItem } from '@torq-native/react-spectrum/SideNav';\nimport Button from '@torq-native/react-spectrum/Button';\n//import Import from '@torq-native/react-spectrum/Icon/Import';\nimport AddCircle from '@torq-native/react-spectrum/Icon/AddCircle';\nimport CCLibrary from '@torq-native/react-spectrum/Icon/CCLibrary';\nimport Help from '@torq-native/react-spectrum/Icon/HelpOutline';\nimport DropdownButton from '@torq-native/react-spectrum/DropdownButton';\nimport { MenuItem } from '@torq-native/react-spectrum/Menu';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport { translate } from 'app/js/managers/translationManager';\nimport { getNavigationItems } from 'app/js/menus/flyoutMenu';\nimport styles from './index.scss';\nimport metrics from 'app/js/interface/metrics';\n\n@observer\nexport default class ManagerSideNav extends React.Component {\n    static contextType = LibrariesContext;\n\n    handleBrowseTeam = () => {\n        metrics.reportEvent('Manager', 'Navigation', 'click', 'browse-org');\n        this.context.libraryManager.openBrowseAll();\n    }\n\n    handleManage = () => metrics.reportEvent('Manager', 'Navigation', 'click', 'manage');\n\n    handleNewLibraryClick = () => {\n        metrics.reportEvent('Manager', 'Navigation', 'click', 'new-library');\n        if (!this.context.libraryManager.publishState.isPublished) {\n            // If the current app supports publishing a document library and the user hasn't done so, present the differences.\n            return this.context.dialogManager.openDialog('createOrPublishLibrary');\n        }\n        // Otherwise, show the traditional create library dialog.\n        this.context.libraryActions.create();\n    }\n\n    // TODO Uncomment when we re-add Import functionality to LM\n    // handleImportLibrary = () => {\n    //     metrics.reportEvent('Manager', 'Navigation', 'click', 'import-library');\n    //     this.context.dialogManager.openDialog('importExportLibrary', { library: this.context.libraryManager.currentLibrary, mode: 'import' });\n    // }\n\n    get manageNavItem() {\n        return <SideNavItem key=\"0\" title={ translate('DL_LIBRARY_MANAGER_MANAGE') } value=\"manage\" onClick={ this.handleManage } className={styles.navigationItem} data-test-id=\"manager-sidenav-navigation-manage\">\n            {translate('DL_LIBRARY_MANAGER_MANAGE')}\n        </SideNavItem>;\n    }\n\n    get browseNavItem() {\n        return <SideNavItem key=\"1\" title={ translate('DL_LIBRARY_MANAGER_BROWSE_ORG') } value=\"browse\" onClick={ this.handleBrowseTeam } className={classNames(styles.navigationItem, styles.linkOut)} data-test-id=\"manager-sidenav-navigation-browse-team\">\n            {translate('DL_LIBRARY_MANAGER_BROWSE_ORG')}\n        </SideNavItem>;\n    }\n\n    getSideNavItems = () => {\n        return [ this.manageNavItem, !this.context.libraryManager.isRestrictedAccount && this.browseNavItem ].filter(x => x);\n    }\n\n    sideNavButton({ id, icon, label, onClick }) {\n        return (\n            <Button\n                className={styles.sideNavAction}\n                data-test-id={`manager-sidenav-action-${id}`}\n                onClick={onClick}\n                title={label}\n                label={label}\n                icon={icon}\n                variant=\"action\"\n                quiet\n            />\n        );\n    }\n\n    render() {\n        // Because the side nav is fairly narrow and not resizable, items might get truncated for some locales.\n        // So we add the `title` prop to each element that renders a string, which tells UXP to display a native tooltip when overflown.\n        return (\n            <div className={styles.container}>\n                <div className={styles.header}>\n                    <div className={styles.icon}>\n                        <CCLibrary size=\"S\" data-test-id=\"manager-sidenav-cc-libraries-logo\" />\n                    </div>\n                </div>\n                <SideNav value=\"manage\" className={classNames(styles.section, styles.navigation)}>\n                    {this.getSideNavItems()}\n                </SideNav>\n                <Rule variant=\"small\" />\n                <div className={classNames(styles.section, styles.actions)}>\n                    {/* { this.sideNavButton({\n                        id: 'import-library',\n                        icon: <Import />,\n                        label: translate('DL_IMPORT'),\n                        onClick: this.handleImportLibrary\n                    }) } */}\n                    { this.sideNavButton({\n                        id: 'create-library',\n                        icon: <AddCircle />,\n                        label: translate('DL_LIBRARY_MANAGER_ACTION_CREATE_LIBRARY'),\n                        onClick: this.handleNewLibraryClick\n                    }) }\n                </div>\n                <div className={classNames(styles.section, styles.footer)}>\n                    <DropdownButton icon={<Help size=\"M\" />} iconOnly data-test-id=\"manager-sidenav-footer-help\">\n                        {getNavigationItems(null, this.context).map((item, key) => (\n                            <MenuItem key={key} onClick={() => item.onClick()} ref={node => (this[`${item.id}Ref`] = node)} data-test-id={`manager-help-${item.id}`}>\n                                {translate(item.label)}\n                            </MenuItem>\n                        ))}\n                    </DropdownButton>\n                </div>\n            </div>\n        );\n    }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"spectrum-Textfield\":\"bTZ\",\"librariesList\":\"yXf\",\"is-invalid\":\"Zjg\",\"is-valid\":\"pDE\",\"spectrum-Textfield--multiline\":\"Gj5\",\"spectrum-Textfield--quiet\":\"D7x\",\"libraryItem\":\"C-K\",\"switch\":\"tQs\",\"libraryInfo\":\"H4a\",\"followButton\":\"aJM\",\"contextMenu\":\"cZu\"};","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport Switch from '@torq-native/react-spectrum/Switch';\nimport DropdownButton from '@torq-native/react-spectrum/DropdownButton';\nimport More from '@torq-native/react-spectrum/Icon/More';\nimport { MenuItem } from '@torq-native/react-spectrum/Menu';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport LibraryListItem from '../../LibraryListItem';\nimport styles from './index.scss';\nimport metrics from 'app/js/interface/metrics';\nimport { Library } from '@cclibraries/cc-libraries-js';\nimport DocumentAssetsContainer from 'app/js/models/documentAssets/DocumentAssetsContainer';\n\n@observer\nexport default class ManagerLibrariesList extends React.Component {\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        libraries: PropTypes.arrayOf(PropTypes.oneOfType([ PropTypes.instanceOf(Library), PropTypes.instanceOf(DocumentAssetsContainer) ])).isRequired,\n    };\n\n    contextMenu = (library) => {\n        const actions = this.context.libraryActions.getLibraryActions(library, false).filter(action => !action.divider && action.enableMenu);\n        return (\n            <DropdownButton alignRight icon={<More />} iconOnly onSelect={action => action.onClick()} className={styles.contextMenu} data-test-id=\"manager-libraries-list-item-context-menu\">\n                {actions.map((action, key) => (\n                    <MenuItem disabled={!action.enableMenu} key={key} value={action}>\n                        {action.label}\n                    </MenuItem>\n                ))}\n            </DropdownButton>\n        );\n    }\n\n    handleLibraryToggle = (library) => {\n        const newToggleState = !this.context.libraryManager.isLibraryActive(library);\n        metrics.reportEvent('Manager', 'Manage', 'click', newToggleState ? 'toggle-on' : 'toggle-off', { ui: { sequence: 'toggle-single' } }, library);\n        this.context.libraryManager.setLibraryActiveState(library, newToggleState);\n    }\n\n    libraryItem = library => {\n        // Avoid having two items with same key during a promote op by appending the team status.\n        const key = `${library.id}${library.ownerType === 'org' ? '-team' : ''}`;\n        return (\n            <div key={key} className={styles.libraryItem} data-test-id={`manager-libraries-list-item-${library.id}`}>\n                <Switch\n                    checked={this.context.libraryManager.isLibraryActive(library)}\n                    onChange={() => this.handleLibraryToggle(library)}\n                    className={styles.switch}\n                    data-test-id=\"manager-libraries-list-item-switch\"\n                />\n                <div className={styles.libraryInfo} data-test-id=\"manager-libraries-list-item-info\">\n                    <LibraryListItem library={library} disableContextMenu allowNavigation={false} allowLongDoubleClick={false} sharingIconOnly={false} />\n                </div>\n                {this.contextMenu(library)}\n            </div>\n        );\n    }\n\n    render() {\n        return (\n            <div className={styles.librariesList} data-test-id=\"manager-libraries-list\">\n                {this.props.libraries.map(this.libraryItem)}\n            </div>\n        );\n    }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"_3C\",\"upgradeMessage\":\"cDN\",\"actions\":\"uTg\",\"statusMessage\":\"R48\",\"button\":\"k5F\",\"disabled\":\"tDe\",\"upgrade-section-action\":\"pzy\",\"secondary\":\"ZYs\",\"coloredBorder\":\"F9b\"};","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\n//import PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport classNames from 'classnames';\nimport Button from '@torq-native/react-spectrum/Button';\nimport OverlayTrigger from '@torq-native/react-spectrum/OverlayTrigger';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport Tooltip from '@torq-native/react-spectrum/Tooltip';\nimport { translate } from 'app/js/managers/translationManager';\nimport environment from 'app/js/environment';\nimport styles from './index.scss';\n\n@observer\nexport default class ManagerMonetization extends React.Component {\n    static contextType = LibrariesContext;\n\n    upgrade = () => {\n        return this.context.documentActions.upgradeSubscription();\n    }\n\n    get upgradeToPublishButton() {\n        return this.button({ variant: 'secondary', label: 'DL_LIBRARY_MANAGER_DOCUMENT_LIBRARY_UPGRADE', onClick: this.upgrade, tooltip: 'DL_LIBRARY_MANAGER_DOCUMENT_LIBRARY_UPGRADE_TOOLTIP' });\n    }\n\n    get buttonView() {\n        // Upgrade button view\n        return (\n            <div className={styles.actions}>\n                { this.upgradeToPublishButton }\n            </div>\n        );\n    }\n\n    button({ variant, label, onClick, tooltip }) {\n        // A tooltip should only be shown when the button is disabled.\n        // For the button disabled state:\n        // - Need to add `disabled` class because we want to override the UXP-native styles but for some reason UXP doesn't add the `.is-disabled` class to the spectrum button like they do on web.\n        // - Need to add `disabled` prop because we want the \"disabled\" text color and for some reason UXP doesn't let us modify the text color of buttons via css.\n\n        // On Windows only the last letter in this Button is being cutoff as a result of setting the border color, so here we only add the button class\n        const buttonClasses = environment.isWindowsOS() ? classNames(styles.button) : classNames(styles.button, variant);\n        return (\n            <div className=\"upgrade-section-action\" data-test-id=\"manager-upgrade-section-action-button\">\n                <OverlayTrigger boundariesElement=\"container\" placement=\"top\" trigger={[ 'hover', 'focus' ]} disabled={ this.context.libraryManager.isOnline }>\n                    <Button\n                        data-test-id=\"upgrade-section-action-button\"\n                        className={buttonClasses}\n                        onClick={onClick}\n                        label={translate(label)}\n                        variant={variant}\n                        // RS flag to fix some UXP bugs.\n                        uxpUseNative={false}\n                    />\n                    <Tooltip ref={node => (this.tooltipRef = node)}>\n                        {/* Explain the reason for unavailability, it will be either a network or access issue */}\n                        { translate(tooltip) }\n                    </Tooltip>\n                </OverlayTrigger>\n            </div>\n        );\n    }\n\n    render() {\n        return (\n            <>\n                <div className={styles.container} data-test-id=\"manager-upgrade-section-container\">\n                    <span className={styles.upgradeMessage} title={translate('DL_LIBRARY_MANAGER_DOCUMENT_LIBRARY_UPGRADE_BODY')} data-test-id=\"manager-upgrade-section-body\">\n                        { translate('DL_LIBRARY_MANAGER_DOCUMENT_LIBRARY_UPGRADE_BODY') }\n                    </span>\n                    { this.buttonView }\n                </div>\n                <div className={styles.coloredBorder}></div>\n            </>\n        );\n    }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"fDm\",\"contextMenu\":\"tgn\",\"libraryName\":\"dDR\",\"actions\":\"n0j\",\"statusMessage\":\"um8\",\"button\":\"q3Z\",\"disabled\":\"cD9\",\"cta\":\"fM3\",\"secondary\":\"Ssx\",\"wait\":\"vL3\",\"statusText\":\"Y8P\",\"statusIcon\":\"fW2\",\"error\":\"_Nr\"};","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport classNames from 'classnames';\nimport Button from '@torq-native/react-spectrum/Button';\nimport Wait from '@torq-native/react-spectrum/Wait';\nimport DropdownButton from '@torq-native/react-spectrum/DropdownButton';\nimport OverlayTrigger from '@torq-native/react-spectrum/OverlayTrigger';\nimport Tooltip from '@torq-native/react-spectrum/Tooltip';\nimport More from '@torq-native/react-spectrum/Icon/More';\nimport Alert from '@torq-native/react-spectrum/Icon/Alert';\nimport Checkmark from '@torq-native/react-spectrum/Icon/Checkmark';\nimport CloudDisconnected from '@torq-native/react-spectrum/Icon/CloudDisconnected';\nimport { MenuItem } from '@torq-native/react-spectrum/Menu';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport DocumentAssetsContainer from 'app/applications/SPRK/js/models/documentAssets/DocumentAssetsContainer';\nimport { isTeamLibrary, isSharedUserLibrary } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport environment from 'app/js/environment';\nimport HTMLText from 'app/js/components/HTMLText';\nimport { measureTextDimensions } from 'app/js/utils/DOMUtils';\nimport styles from './index.scss';\nimport metrics from 'app/js/interface/metrics';\nimport { quotaURL } from 'app/js/utils/linkUtils';\n\n@observer\nexport default class DocumentLibraryView extends React.Component {\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        assetsContainer: PropTypes.instanceOf(DocumentAssetsContainer),\n    };\n\n    get publishState() {\n        return this.context.libraryManager.publishState;\n    }\n\n    get publishedLibrary() {\n        return this.context.libraryManager.publishedDocumentLibrary;\n    }\n\n    get syncError() {\n        return this.publishState.syncError;\n    }\n\n    get writableFolders() {\n        return this.context.libraryManager.platformFolders && this.context.libraryManager.platformFolders.filter(folder => folder.isWritable);\n    }\n\n    get canPromote() {\n        const isTeamLib = this.publishedLibrary && isTeamLibrary(this.publishedLibrary);\n        // Can promote if the user has org storage. If the library is already in org storage, there's nothing to promote.\n        return !isTeamLib && this.writableFolders && this.writableFolders.length > 0;\n    }\n\n    get canRelinkOrphans() {\n        return !!this.context.libraryManager.orphanedLibraries.length;\n    }\n\n    get documentName() {\n        return environment.documentName;\n    }\n\n    publish = () => {\n        return this.context.documentActions.publish(this.props.assetsContainer).catch(() => {});\n    }\n\n    update() {\n        metrics.reportEvent('Manager', 'Manage', 'click', 'update', { event: { count: this.props.assetsContainer.getGroups().length } }, this.publishedLibrary);\n        return this.publish();\n    }\n\n    unpublish() {\n        metrics.reportEvent('Manager', 'Manage', 'click', 'unpublish', { event: { count: this.props.assetsContainer.getGroups().length } }, this.publishedLibrary);\n        this.context.libraryActions.delete(this.publishedLibrary, false);\n    }\n\n    share() {\n        metrics.reportEvent('Manager', 'Manage', 'click', 'share', {}, this.publishedLibrary);\n        environment.showShareSheet(this.publishedLibrary);\n    }\n\n    promote() {\n        return this.context.libraryActions.promote(this.publishedLibrary);\n    }\n\n    relinkOrphan() {\n        // If there are libraries that point to this document that the document does not point back to, give option to relink one of them\n        return this.context.documentActions.relinkDocumentToOrphanedLibrary(this.props.assetsContainer);\n    }\n\n    get isPublished() {\n        return this.publishState.isPublished;\n    }\n\n    get canPublish() {\n        return this.publishState.canPublish;\n    }\n\n    get canUpgrade() {\n        return this.publishState.canUpgrade;\n    }\n\n    get disabledMessage() {\n        return {\n            OFFLINE: translate('DL_LIBRARY_MANAGER_DOCUMENT_LIBRARY_OFFLINE'),\n            READ_ONLY: translate('DL_LIBRARY_MANAGER_DOCUMENT_LIBRARY_READ_ONLY'),\n            QUOTA: translate('DL_OVER_QUOTA_LIBRARY_ERROR_BODY'),\n            EMPTY: translate('DL_LIBRARY_MANAGER_DOCUMENT_LIBRARY_EMPTY'),\n            UPGRADE: translate('DL_LIBRARY_MANAGER_DOCUMENT_LIBRARY_UPGRADE_TOOLTIP'),\n            MISSING_STORAGE: translate('DL_SAVE_CLOUD_DOC_MESSAGE'),\n            COEDITOR_PUBLISHING: translate('DL_LIBRARY_MANAGER_DOCUMENT_LIBRARY_COEDITOR_PUBLISHING'),\n            MAX_ELEMENTS: translate('DL_DESIGN_LIBRARY_NATIVE_EXCEEDED_LIMIT_MESSAGE', { num: this.context.libraryManager.MAX_ELEMENTS })\n        }[this.publishState.disabledStatus];\n    }\n\n    get isPendingUpdate() {\n        return this.publishState.isPendingUpdate;\n    }\n\n    get isPublishing() {\n        return this.publishState.isPublishing;\n    }\n\n    get isLibraryLoading() {\n        return this.publishState.isLoading;\n    }\n\n    get isDocumentSyncing() {\n        return environment.isSavedCloudDocument && !environment.isSyncedCloudDocument;\n    }\n\n    get isLoading() {\n        return this.isLibraryLoading || this.isPublishing || this.isDocumentSyncing;\n    }\n\n    get syncErrorStatus() {\n        if (!this.syncError) { return; }\n\n        const { errors } = this.context.libraryManager;\n\n        if (this.syncError.code === errors.EXCEEDS_QUOTA) {\n            if (isTeamLibrary(this.publishedLibrary) || isSharedUserLibrary(this.publishedLibrary)) {\n                // Shared quota error.\n                return this.statusMessage({\n                    icon: <Alert data-test-id=\"document-library-status-error-shared-quota\" className={classNames(styles.statusIcon, styles.error)} size=\"S\"/>,\n                    label: 'DL_PUBLISH_UPDATES_ERROR_MESSAGE',\n                    tooltip: 'DL_PUBLISH_UPDATES_SHARED_QUOTA_ERROR_BODY'\n                });\n            }\n            // Personal quota error.\n            return this.statusMessage({\n                icon: <Alert data-test-id=\"document-library-status-error-quota\" className={classNames(styles.statusIcon, styles.error)} size=\"S\"/>,\n                label: 'DL_PUBLISH_UPDATES_QUOTA_ERROR_MESSAGE',\n                tooltip: 'DL_PUBLISH_UPDATES_QUOTA_ERROR_BODY',\n                onClick: () => quotaURL(),\n            });\n        }\n\n        // Generic syncing error.\n        return this.statusMessage({\n            icon: <Alert data-test-id=\"document-library-status-error-generic\" className={classNames(styles.statusIcon, styles.error)} size=\"S\"/>,\n            label: 'DL_PUBLISH_UPDATES_ERROR_MESSAGE',\n            tooltip: 'DL_PUBLISH_UPDATES_GENERAL_SYNC_ERROR'\n        });\n    }\n\n    get syncingStatus() {\n        if (!this.isPublished) { return; }\n        // Library couldn't sync.\n        if (this.syncError) { return this.syncErrorStatus; }\n\n        // We're offline, syncing will resume when we're back online.\n        if (!this.context.libraryManager.isOnline) {\n            return this.statusMessage({\n                icon: <CloudDisconnected data-test-id=\"document-library-status-offline\" className={classNames(styles.statusIcon)} size=\"S\"/>,\n                label: 'DL_PUBLISH_UPDATES_OFFLINE_ERROR_MESSAGE',\n                tooltip: 'DL_PUBLISH_UPDATES_OFFLINE_ERROR_BODY'\n            });\n        }\n\n        const { syncProgress } = this.publishedLibrary;\n        // Library up to date.\n        if (!syncProgress || syncProgress === 100) { return; }\n        // Library syncing.\n        // We'll render progress from 0-100 so to avoid the div pushing content as it grows we give it a minimum width equal to the widest it will ever be (when progress is at 100%).\n        const labelId = 'DL_LIBRARY_MANAGER_DOCUMENT_LIBRARY_PUBLISHING_PROGRESS';\n        // We can give users insight into the progress when dealing with a library.\n        return this.statusMessage({\n            icon: <Wait variant=\"determinate\" indeterminate={false} value={syncProgress} data-test-id=\"document-library-status-loading\" className={styles.wait} size=\"S\"/>,\n            label: translate(labelId, { percent: syncProgress }),\n            // We pass the `statusMessage` className for the computation to include font-size, etc.\n            style: { minWidth: measureTextDimensions(translate(labelId, { percent: 100 }), styles.statusMessage).width }\n        });\n    }\n\n    get loadingStatus() {\n        if (!this.isLoading) { return; }\n\n        let label;\n        if (this.isLibraryLoading) {\n            label = 'DL_LOADING';\n        } else if (this.isDocumentSyncing) {\n            label = 'DL_LIBRARY_MANAGER_DOCUMENT_LIBRARY_SAVING';\n        } else {\n            label = 'DL_LIBRARY_MANAGER_DOCUMENT_LIBRARY_PUBLISHING';\n        }\n\n        return this.statusMessage({\n            icon: <Wait data-test-id=\"document-library-status-loading\" size=\"S\"/>,\n            label,\n            style: styles.statusText\n        });\n    }\n\n    statusMessage({ icon, label, tooltip, style, onClick }) {\n        return <>\n            <OverlayTrigger boundariesElement=\"container\" placement=\"top\" trigger={[ 'hover', 'focus' ]} disabled={ !tooltip }>\n                <div className={styles.statusMessage} data-test-id=\"document-library-status-message\">\n                    {icon}\n                    {label && <HTMLText html={translate(label)} className={style} onClick={onClick} />}\n                </div>\n                <Tooltip ref={node => (this.tooltipRef = node)}>\n                    {translate(tooltip)}\n                </Tooltip>\n            </OverlayTrigger>\n        </>;\n    }\n\n    button({ id, variant, label, onClick }) {\n        // A tooltip should only be shown when the button is disabled.\n        // For the button disabled state:\n        // - Need to add `disabled` class because we want to override the UXP-native styles but for some reason UXP doesn't add the `.is-disabled` class to the spectrum button like they do on web.\n        // - Need to add `disabled` prop because we want the \"disabled\" text color and for some reason UXP doesn't let us modify the text color of buttons via css.\n\n        // Condition for OverlayTrigger to show up tooltips\n        let tooltipDisabled = this.canPublish || !this.disabledMessage;\n        // Check if a Free plan user and button is Share.\n        if (this.canUpgrade) {\n            tooltipDisabled = this.canPublish && id === 'share';\n        }\n        // On Windows only the last letter in this Button is being cutoff as a result of setting the border color, so here we only add the button class\n        const buttonClasses = environment.isWindowsOS() ? classNames(styles.button) : classNames(styles.button, styles[variant || 'cta'], { [styles.disabled]: !this.canPublish });\n        return (\n            <OverlayTrigger boundariesElement=\"container\" placement=\"top\" trigger={[ 'hover', 'focus' ]} disabled={ tooltipDisabled }>\n                <Button\n                    className={buttonClasses}\n                    disabled={!this.canPublish || (this.canUpgrade && id !== 'share')}\n                    onClick={() => onClick()}\n                    label={translate(label)}\n                    variant={variant || 'cta'}\n                    // RS flag to fix some UXP bugs.\n                    uxpUseNative={false}\n                    data-test-id={`manager-document-library-action-${id}`}\n                />\n                <Tooltip ref={node => (this.tooltipRef = node)}>\n                    {/* Explain the reason for unavailability */}\n                    { this.disabledMessage }\n                </Tooltip>\n            </OverlayTrigger>\n        );\n    }\n\n    get pushLibraryButton() {\n        if (!this.isPublished) {\n            return this.button({ id: 'publish' , label: 'DL_LIBRARY_MANAGER_DOCUMENT_LIBRARY_PUBLISH', onClick: this.publish });\n        }\n        if (this.isPendingUpdate) {\n            // Block user from pushing updates until sync errors are resolved.\n            if (this.syncError) { return; }\n            return this.button({ id: 'update' , label: 'DL_LIBRARY_MANAGER_DOCUMENT_LIBRARY_UPDATE', onClick: () => this.update() });\n        }\n        return this.statusMessage({ icon: <Checkmark data-test-id=\"document-library-status-up-to-date\" className={styles.statusIcon} size=\"S\" />, label: 'DL_LIBRARY_MANAGER_DOCUMENT_LIBRARY_UP_TO_DATE' });\n    }\n\n    get shareLibraryButton() {\n        if (!this.isPublished || this.isLoading) { return; }\n        return this.button({ id: 'share', variant: 'secondary', label: 'DL_LIBRARY_MANAGER_DOCUMENT_LIBRARY_SHARE', onClick: () => this.share() });\n    }\n\n    get actionsView() {\n        const push = this.pushLibraryButton; // Publish or Update.\n        const share = this.shareLibraryButton; // Share.\n        const loading = this.loadingStatus; // Document being saved or Library being populated.\n        const syncing = this.syncingStatus; // Library being synced to the cloud.\n\n        // When library has pending updates, we should still show syncing progress\n        return (\n            <div className={styles.actions}>\n                { share }\n                { this.isPendingUpdate ? <>{push}{syncing}</> : loading || syncing || push }\n            </div>\n        );\n    }\n\n    get contextMenu() {\n        const shouldHideMenu = (!this.isPublished && !this.canRelinkOrphans) || this.isLoading;\n        return (\n            <DropdownButton disabled={!this.canPublish} icon={<More />} iconOnly className={classNames(styles.contextMenu, { [styles.disabled]: shouldHideMenu })} data-test-id=\"manager-document-library-context-menu\">\n                { this.isPublished ? (\n                    <MenuItem onClick={() => this.unpublish()} data-test-id=\"manager-document-library-context-menu-action-unpublish\" ref={node => (this.unpublishRef = node)}>\n                        { translate('DL_LIBRARY_MANAGER_DOCUMENT_LIBRARY_UNPUBLISH') }\n                    </MenuItem>\n                ) : <div/> }\n                { this.isPublished && this.canPromote ? (\n                    <MenuItem onClick={() => this.promote()} data-test-id=\"manager-document-library-context-menu-action-promote\" ref={node => (this.promoteRef = node)}>\n                        { translate('DL_FLYOUT_PROMOTE_LIB') }\n                    </MenuItem>\n                ) : <div/> }\n                { this.canRelinkOrphans ? (\n                    <MenuItem onClick={() => this.relinkOrphan()} data-test-id=\"manager-document-library-context-menu-action-relink\" ref={node => (this.relinkRef = node)}>\n                        { translate('DL_FLYOUT_RELINK_LIB') }\n                    </MenuItem>\n                ) : <div/> }\n            </DropdownButton>\n        );\n    }\n\n    render() {\n        return (\n            <div className={styles.container}>\n                <span className={styles.libraryName} title={this.documentName} data-test-id=\"document-library-name\">\n                    { this.documentName }\n                </span>\n                { this.actionsView }\n                { this.contextMenu }\n            </div>\n        );\n    }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"s2a\",\"headerSection\":\"gD9\",\"header\":\"yXj\",\"staticActions\":\"XTa\",\"contextMenu\":\"tfh\",\"content\":\"L9h\",\"searchBar\":\"b98\",\"section\":\"Bb5\",\"sectionHeader\":\"c2k\",\"upgradeSection\":\"wHC\",\"noSearchResults\":\"E-W\"};","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { autorun } from 'mobx';\nimport { observer } from 'mobx-react';\nimport Rule from '@torq-native/react-spectrum/Rule';\nimport Search from '@torq-native/react-spectrum/Search';\nimport Heading from '@torq-native/react-spectrum/Heading';\nimport DropdownButton from '@torq-native/react-spectrum/DropdownButton';\nimport IllustratedMessage from '@torq-native/react-spectrum/IllustratedMessage';\nimport MoreVertical from '@torq-native/react-spectrum/Icon/MoreVertical';\nimport { MenuItem } from '@torq-native/react-spectrum/Menu';\nimport { translate } from 'app/js/managers/translationManager';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport ManagerLibrariesList from 'app/js/components/manager/ManagerLibrariesList';\nimport ManagerMonetization from 'app/js/components/manager/ManagerMonetization';\nimport DocumentLibraryView from 'app/js/components/manager/DocumentLibraryView';\nimport HTMLText from 'app/js/components/HTMLText';\nimport Icon from 'app/js/components/Icon';\nimport environment from 'app/js/environment';\nimport styles from './index.scss';\nimport metrics from 'app/js/interface/metrics';\nimport { showManagerOnboarding } from 'app/js/utils/onboardingUtils';\n\n@observer\nexport default class ManagerContent extends React.Component {\n    static contextType = LibrariesContext;\n\n    componentDidMount() {\n        autorun(() => {\n            this.context.libraryManager.loaded && showManagerOnboarding(this.context);\n        });\n    }\n\n    handleMenuSelection = (selection) => {\n        const toggleValue = selection === 'showAll';\n        this.context.libraryManager.setLibrariesActiveState(this.context.libraryManager.libraries, toggleValue);\n        this.context.libraryManager.libraries.forEach(library => {\n            metrics.reportEvent('Manager', 'Manage', 'click', toggleValue ? 'toggle-on' : 'toggle-off', { ui: { sequence: 'toggle-all' } }, library);\n        });\n    }\n\n    handleSearchChange = (value) => {\n        metrics.reportEvent('Manager', 'Search', 'input', 'search');\n        this.context.viewState.setSearchText(value);\n    }\n\n    get showSearch() {\n        return this.searchText.length > 0;\n    }\n\n    get showUpgradeView() {\n        return this.context.viewState.isUpgradeView;\n    }\n\n    get searchText() {\n        return this.context.viewState.searchText;\n    }\n\n    get libraries() {\n        return this.context.viewState.filteredLibraries;\n    }\n\n    get header() {\n        return (\n            <div className={styles.headerSection}>\n                <div className={styles.header} data-test-id=\"manager-content-header\">\n                    <Heading variant=\"subtitle1\" data-test-id=\"manager-content-title\">\n                        {translate('DL_LIBRARY_MANAGER_TITLE')}\n                    </Heading>\n                    <div className={styles.staticActions}>\n                        <Search\n                            onChange={this.handleSearchChange}\n                            placeholder={translate('DL_LIBRARY_MANAGER_SEARCH_INPUT_PLACEHOLDER')}\n                            className={styles.searchBar}\n                            data-test-id=\"manager-content-search\"\n                        />\n                        <DropdownButton alignRight icon={<MoreVertical />} iconOnly className={styles.contextMenu} data-test-id=\"manager-content-context-menu\">\n                            <MenuItem onClick={() => this.handleMenuSelection('showAll')} data-test-id=\"manager-content-context-menu-action-show-all\" ref={node => (this.showAllRef = node)}>\n                                {translate('DL_LIBRARY_MANAGER_ACTION_SHOW_ALL')}\n                            </MenuItem>\n                            <MenuItem onClick={() => this.handleMenuSelection('hideAll')} data-test-id=\"manager-content-context-menu-action-hide-all\" ref={node => (this.hideAllRef = node)}>\n                                {translate('DL_LIBRARY_MANAGER_ACTION_HIDE_ALL')}\n                            </MenuItem>\n                        </DropdownButton>\n                    </div>\n                </div>\n                <Rule variant=\"small\" />\n            </div>\n        );\n    }\n\n    managerSection = (id, { localeKey, localeParams }, content) => {\n        if (id === 'search-results') {\n            metrics.reportEvent('Manager', 'Search', 'render', 'results');\n        }\n        let sectionStyle = styles.section;\n        if (id === 'upgrade-workflow') {\n            sectionStyle = styles.upgradeSection;\n        }\n        // Note <Heading variant=\"subtitle3\" /> should be upper-cased by default - https://jira.corp.adobe.com/browse/UXP-13776.\n        return (\n            <div className={sectionStyle} data-test-id={`manager-content-section-${id}`}>\n                <Heading className={styles.sectionHeader} variant=\"subtitle3\" data-test-id={`manager-content-section-${id}-title`}>\n                    {translate(localeKey, localeParams).toLocaleUpperCase(environment.getLocale())}\n                </Heading>\n                { content }\n            </div>\n        );\n    }\n\n    get searchView() {\n        if (this.libraries.length > 0) {\n            return <ManagerLibrariesList libraries={this.libraries} data-test-id=\"manager-content-search-results-list\" />;\n        }\n        return (\n            <IllustratedMessage\n                data-test-id=\"manager-content-no-search-results-illustration\"\n                className={styles.noSearchResults}\n                heading={translate('DL_LIBRARY_MANAGER_SEARCH_EMPTY_HEADING')}\n                description={<HTMLText html={translate('DL_LIBRARY_MANAGER_SEARCH_EMPTY_DESCRIPTION', { searchText: this.searchText })} data-test-id=\"no-search-result-message\" />}\n                illustration={<Icon id=\"NoSearchResults\" height={100} />}\n            />\n        );\n    }\n\n    get documentLibraryView() {\n        if (!this.context.libraryManager.documentAssetsContainer || this.context.libraryManager.isRestrictedAccount) {\n            // Document Library not supported.\n            return;\n        }\n        return (\n            <>\n                { this.managerSection('current-file',\n                    { localeKey: 'DL_LIBRARY_MANAGER_SECTION_CURRENT_FILE' },\n                    <DocumentLibraryView assetsContainer={this.context.libraryManager.documentAssetsContainer} data-test-id=\"manager-content-document-library\" />\n                )}\n                <Rule variant=\"small\" />\n            </>\n        );\n    }\n\n    get allLibrariesView() {\n        return this.managerSection('all-libraries',\n            { localeKey: 'DL_LIBRARY_MANAGER_SECTION_ALL_LIBRARIES' },\n            <ManagerLibrariesList libraries={this.libraries} data-test-id=\"manager-content-section-all-libraries-list\" />\n        );\n    }\n\n    get upgradeView() {\n        //Check if can upgrade, then show the view\n        if (!this.context.libraryManager.documentAssetsContainer || this.context.libraryManager.isRestrictedAccount || !this.showUpgradeView) {\n            return null;\n        }\n        return this.managerSection('upgrade-workflow',\n            { localeKey: 'DL_LIBRARY_MANAGER_DOCUMENT_LIBRARY_UPGRADE_TITLE' },\n            <ManagerMonetization data-test-id=\"manager-content-section-upgrade\" />\n        );\n    }\n\n    get searchResultsView() {\n        return this.managerSection('search-results',\n            { localeKey: this.libraries.length === 1 ? 'DL_SEARCH_RESULT' : 'DL_SEARCH_RESULTS', localeParams: { count: this.libraries.length } },\n            this.searchView\n        );\n    }\n\n    render() {\n        return (\n            <div className={styles.container}>\n                {this.header}\n                <div className={styles.content}>\n                    { this.showSearch ? this.searchResultsView : (\n                        <>\n                            { this.documentLibraryView }\n                            { this.upgradeView }\n                            { this.allLibrariesView }\n                        </>\n                    )}\n                </div>\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\nimport ReactSpectrumDialog from '@torq-native/react-spectrum/Dialog';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport classNames from 'classnames';\n\n@observer\nexport default class ManagerDialogContainerView extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    get dialog() {\n        return this.context.dialogManager.dialog;\n    }\n\n    get dialogName() {\n        return this.context.dialogManager.dialogName;\n    }\n\n    get isTour() {\n        return this.context.dialogManager.isTour;\n    }\n\n    closeDialog = () => {\n        this.context.dialogManager.closeDialog();\n    }\n\n    render() {\n        if (!this.dialog) { return null; }\n\n        return (\n            <div className={classNames('spectrum-Underlay', 'is-open', { 'is-tour': this.isTour })} onClick={this.closeDialog}>\n                <div onClick={e => e.stopPropagation()}>\n                    <ReactSpectrumDialog className={`manager-dialog-${this.dialogName}`}>\n                        {this.dialog}\n                    </ReactSpectrumDialog>\n                </div>\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport ReactSpectrumToast from '@torq-native/react-spectrum/Toast';\nimport { timeToReadString } from 'app/js/utils/stringUtils';\n\n@observer\nexport default class ManagerToastContainerView extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    get toast() {\n        return this.context.toastManager.toastData;\n    }\n\n    get variant() {\n        return this.toast && this.toast.variant;\n    }\n\n    get message() {\n        return this.toast && this.toast.message;\n    }\n\n    get duration() {\n        return timeToReadString(this.message);\n    }\n\n    onClose = () => this.context.toastManager.closeToast();\n\n    render() {\n        if (!this.toast) { return null; }\n        // React Spectrum toasts only take a timeout parameter when used via the declarative dispatchers which aren't supported in UXP.\n        setTimeout(this.onClose, this.duration);\n        return (\n            <div className=\"react-spectrum-ToastContainer react-spectrum-ToastContainer--bottom-center\">\n                <ReactSpectrumToast variant={ this.variant } closable onClose={ this.onClose }>\n                    { this.message }\n                </ReactSpectrumToast>\n            </div>\n        );\n    }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"rc4\",\"sideNav\":\"iLu\",\"content\":\"E0n\"};","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\nimport { LibrariesProvider } from 'app/js/state/LibrariesContext';\nimport ManagerSideNav from 'app/js/components/manager/ManagerSideNav';\nimport ManagerContent from 'app/js/components/manager/ManagerContent';\nimport ManagerDialogContainerView from 'app/js/components/manager/ManagerDialogContainerView';\nimport ManagerToastContainerView from 'app/js/components/manager/ManagerToastContainerView';\nimport appState from 'app/js/appState';\nimport styles from './index.scss';\nconst preventDefault = event => event.preventDefault();\n\n/**\n * Top-level React component for the libraries manager.\n */\n@observer\nexport default class ManagerView extends React.Component {\n    render() {\n        // Note: We disable dragover and drop events on the manager, otherwise dragged files would also display over the panel.\n        // React Spectrum adds in-line styles for certain items like fontFamily.\n        // By default, it sets fontFamily to Adobe Clean but the Libraries Manager should use the font of the current host.\n        return (\n            <LibrariesProvider value={ appState.manager } style={{ fontFamily: 'inherit' }}>\n                <div id=\"manager-root\" className=\"manager-root body\" acceptsFirstPointer=\"all\">\n                    <div className={styles.container} data-test-id=\"manager-container\" onDragOverCapture={ preventDefault } onDropCapture={ preventDefault }>\n                        <div className={styles.sideNav} data-test-id=\"manager-sidenav-container\">\n                            <ManagerSideNav />\n                        </div>\n                        <div className={styles.content} data-test-id=\"manager-content-container\">\n                            <ManagerContent />\n                        </div>\n                        <ManagerToastContainerView />\n                        <ManagerDialogContainerView />\n                    </div>\n                </div>\n            </LibrariesProvider>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\nimport Button from 'app/js/components/Button';\nimport { translate } from 'app/js/managers/translationManager';\nimport metrics from 'app/js/interface/metrics';\nimport Icon from 'app/js/components/Icon';\nimport PropTypes from 'prop-types';\nimport configuration from 'app/js/config/configuration';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport groupSelectionState from 'app/js/state/groupSelectionState';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport classNames from 'classnames';\n\n@observer\nexport default class CreateGroupButton extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static defaultProps = {\n        showLabel: false,\n        disabled: false,\n        disableEmptySubgroups: false\n    };\n\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        showLabel: PropTypes.bool,\n        disabled: PropTypes.bool,\n        disableEmptySubgroups: PropTypes.bool\n    };\n\n    get isVisible() {\n        return this.context.libraryManager.currentLibrary && !this.context.libraryManager.currentLibrary.isDeletedFromServer;\n    }\n\n    onClickButton = (event) => {\n        event.stopPropagation();\n        // When getting the createGroup event back from the API, add info that the group button was the operation type.\n        metrics.setExtraEventMetrics('createGroup', { content: { category: 'Group Button' } });\n        const groups = !this.props.disableEmptySubgroups ? groupSelectionState.groupSelection : [];\n        const elems = elementSelectionState.selection;\n        const selection = !groups.length && elems.length ? elems : groups;\n        this.context.groupActions.createGroupFromSet(selection);\n    }\n\n    get isDisabled() {\n        return this.context.viewState.isSearchMode() || this.props.disabled;\n    }\n\n    get hasSelection() {\n        return groupSelectionState.groupSelection.length || elementSelectionState.selection.length;\n    }\n\n    get buttonNode() {\n        const iconId = this.props.showLabel ? 'AddCircle' : 'Folder';\n        const label = this.props.showLabel && <span data-test-id=\"create-group-button-label\" className=\"create-group-button-text\">{translate('DL_ADD_GROUP')}</span>;\n        const tooltipString = translate(this.hasSelection ? 'DL_GROUP_TOGETHER' : 'DL_NEW_GROUP');\n        return this.isVisible\n            ? <Button\n                className={ classNames('create-group-button', { 'svg-disabled':this.props.disabled }) }\n                data-test-id=\"create-group-button\"\n                tooltip={!configuration.currentProduct.config.disableContentViewTooltips ? tooltipString : undefined}\n                disabled={this.isDisabled}\n                onClick={this.onClickButton}>\n                <Icon id={ iconId } height={ 18 } onClick={ this.handleAddLibrary }/>\n                { label }\n            </Button> : null;\n    }\n\n    render() {\n        return this.buttonNode;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { observer } from 'mobx-react';\nimport { computed, observable } from 'mobx';\nimport { translate } from 'app/js/managers/translationManager';\nimport metrics from 'app/js/interface/metrics';\nimport Tooltip from 'app/js/components/Tooltip';\nimport Icon from 'app/js/components/Icon';\nimport * as ErrorUtils from 'app/js/utils/errorUtils';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport { getSharedQuotaErrorLibraries, getOwnedQuotaErrorLibraries } from 'app/js/utils/libraryUtils';\nimport configuration from 'app/js/config/configuration';\nimport Button from 'app/js/components/Button';\n\nconst ICON_STRINGS = {\n    ok: 'SyncDefault',\n    working: 'Syncing',\n    syncing: 'Syncing',\n    loading: 'Syncing',\n    warning: 'SyncAlert',\n    error: 'SyncError'\n};\n\n@observer\nexport default class SyncButton extends React.Component {\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        height: PropTypes.number\n    }\n\n    static defaultProps = {\n        height: 16\n    }\n\n    @observable isMouseDown = false;\n\n    @computed get syncStatus() {\n        return this.context.libraryManager.syncStatus;\n    }\n\n    /**\n        Show warning message when Thor/file-sync not running\n    **/\n    @computed get isSyncDisabled() {\n        return this.syncStatus.state === 'error' && this.syncStatus.errorType === 'syncDisabled';\n    }\n\n    @computed get isOwnedQuotaError() {\n        return this.syncStatus.state === 'error' && this.syncStatus.errorType === 'quota';\n    }\n\n    @computed get isSharedQuotaError() {\n        return this.syncStatus.state === 'error' && this.syncStatus.errorType === 'sharedQuota';\n    }\n\n    get quotaErrorLibraries() {\n        if (this.isOwnedQuotaError) {\n            return getOwnedQuotaErrorLibraries();\n        }\n        return getSharedQuotaErrorLibraries();\n    }\n\n    get shouldShowInfoViewOnMouseDown() {\n        return !configuration.currentProduct.config?.disableSyncStatusText && !this.isSyncDisabled && !this.isOwnedQuotaError && !this.isSharedQuotaError;\n    }\n\n    /**\n        Sync info message\n    **/\n\n    @computed get syncingLibrariesProgress() {\n        if (this.syncStatus.syncingLibraries.length === 0) {\n            return [ translate('DL_SYNC_PROGRESS') ];\n        }\n\n        const summary = [ translate('DL_SYNC_PROGRESS_NUM_LIBRARIES', { number: this.syncStatus.syncingLibraries.length }) ];\n\n        const libraryProgress = this.syncStatus.syncingLibraries.map((data) => {\n            if (!data.progress) {\n                return;\n            }\n            if (data.truncatedName) {\n                const translationData = { percent: data.progress, name: data.truncatedName };\n\n                if (data.state === 'uploading') {\n                    return translate('DL_UPLOAD_LIBRARY_PERCENT', translationData);\n                }\n                return translate('DL_DOWNLOAD_LIBRARY_PERCENT', translationData);\n            }\n            return translate('DL_DOWNLOAD_NEW_LIBRARY_PERCENT', { percent: data.progress });\n        });\n\n        return summary.concat(libraryProgress).filter(x => x);\n    }\n\n    @computed get messageContent() {\n        if (this.syncStatus.state === 'ok') {\n            return [ translate('DL_SYNC_OK') ];\n        }\n        if (this.syncStatus.state === 'working') {\n            return [ translate('DL_SYNC_PROGRESS') ];\n        }\n        if (this.syncStatus.state === 'syncing') {\n            // Don't need to wrap in array because syncingLibrariesProgress is returned as an array\n            return this.syncingLibrariesProgress;\n        }\n        if (this.syncStatus.state === 'error') {\n            return [\n                ErrorUtils.getFooterErrorMessage(this.syncStatus),\n                this.syncStatus.retryDuration && translate('DL_SYNC_RETRY', { duration: this.syncStatus.retryDuration })\n            ];\n        }\n        return [];\n    }\n\n    @computed get infoView() {\n        if (!this.shouldShowInfoViewOnMouseDown || !this.isMouseDown) {\n            return null;\n        }\n        return (\n            <div data-test-id=\"panel-sync-message\" className=\"panel-sync-message-container\">\n                <div className=\"panel-sync-message\">\n                    { this.messageContent.map((text, index) => <div key={ index.toString() }>{ text }</div>) }\n                </div>\n            </div>\n        );\n    }\n\n    onMouseUp = () => {\n        this.isMouseDown = false;\n        if (!this.shouldShowInfoViewOnMouseDown) {\n            return;\n        }\n    }\n\n    onMouseDown = () => {\n        this.isMouseDown = true;\n        if (!this.shouldShowInfoViewOnMouseDown) {\n            return;\n        }\n    }\n\n    onClick = (event) => {\n        metrics.reportEvent('Navigation', 'Library Panel', 'click', 'sync-state');\n        event.stopPropagation();\n\n        if (this.isSyncDisabled) {\n            this.context.dialogManager.openDialog('enableSyncPopup');\n            return;\n        }\n        if (this.isOwnedQuotaError || this.isSharedQuotaError) {\n            // Need to pass in libraries so that the component does not update when the libraries change, because the overQuotaError dialog has shouldComponentUpdate set to false\n            this.context.dialogManager.openDialog('overQuotaError', { errorType: this.isOwnedQuotaError ? 'owned' : 'shared' });\n            return;\n        }\n\n        this.context.libraryManager.sync();\n    }\n\n    /**\n        Sync icon\n    **/\n\n    @computed get iconView() {\n        let iconString = ICON_STRINGS[this.syncStatus.state];\n        if (this.syncStatus.errorType === 'loggedOut' || this.syncStatus.errorType === 'syncDisabled') {\n            iconString = ICON_STRINGS['warning'];\n        }\n\n        const className = classNames('sync-button', `panel-footer-icon-${this.syncStatus.state}`);\n        return (\n            <Button variant=\"action\" quiet data-test-id=\"sync-button\" className={className} onMouseDown={this.onMouseDown}\n                onMouseUp={ this.onMouseUp } onMouseLeave={ this.onMouseUp } onClick={ this.onClick }>\n                { iconString && <Icon height={ this.props.height } id={ iconString } key={ iconString } /> }\n            </Button>\n        );\n    }\n\n    render() {\n        return (<Tooltip placement=\"top-start\" content={ this.messageContent } disable={ Boolean(this.popup) }>\n            { this.iconView }\n            { this.infoView }\n        </Tooltip>);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { computed, observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport OverlayState from 'app/js/components/utils/OverlayState';\nimport Icon from 'app/js/components/Icon';\nimport environment from 'app/js/environment';\nimport { getClosestFocusedAncestor } from 'app/js/utils/DOMUtils';\nimport Tooltip from 'app/js/components/Tooltip';\nimport { translate } from 'app/js/managers/translationManager';\nimport configuration from 'app/js/config/configuration';\n\nconst MAX_MENU_HEIGHT = 350;\nconst MENU_ITEM_HEIGHT = 22; // should match .panel-select-menu-item height / $select-item-height in _menu.scss\nconst MIN_MENU_WIDTH = 180; // should match .panel-dropdown-menu min-width;\n\n@observer\nexport default class BaseDropdown extends React.Component {\n\n    static defaultProps = {\n        disabled: false,\n        noDropdown: false,\n        align: 'left'\n    };\n\n    static propTypes = {\n        wrapCustomLabel: PropTypes.bool,\n        dropdownOptions: PropTypes.object,\n        // Expect a react ref here\n        customLabelRef: PropTypes.shape({ current: PropTypes.instanceOf(Element) }),\n        currentLabel: PropTypes.oneOfType([ PropTypes.string, PropTypes.node ]),\n        type: PropTypes.string.isRequired,\n        title: PropTypes.string,\n        className: PropTypes.string,\n        data: PropTypes.arrayOf(PropTypes.object).isRequired,\n        disabled: PropTypes.bool,\n        // Allows consumer to control the overlay state\n        open: PropTypes.bool,\n        // Sets the icon displayed in the select bar.\n        icon: PropTypes.string,\n        // Dropdown options are not opened, even if it's not disabled.\n        noDropdown: PropTypes.bool,\n        tooltip: PropTypes.string,\n        onClickLabel: PropTypes.func,\n        footer: PropTypes.node,\n        maxHeight: PropTypes.number,\n        // Dropdown title is uppercase by default.\n        disableUpperCaseTitle: PropTypes.bool,\n        align: PropTypes.oneOf([ 'left', 'right' ]),\n        locationBasedOnLabel: PropTypes.bool\n    };\n\n    overlayState = new OverlayState({ isOpen: this.props.open, ignoreAllEvents: this._controlled, ...this.props.dropdownOptions });\n\n    @observable.ref _menuElement;\n\n    @observable.ref _menuElement;\n\n    componentWillUnmount() {\n        this._parentElement?.removeEventListener('keydown', this.onKeyNavOnDropDownItem);\n        this.overlayState.hideOverlay();\n    }\n\n    componentDidUpdate() {\n        if (this.props.disabled) {\n            this.overlayState.hideOverlay();\n        }\n    }\n\n    componentDidMount() {\n        this._parentElement?.addEventListener('keydown', this.onKeyNavOnDropDownItem);\n    }\n\n    onKeyNavOnDropDownItem =(event) => {\n        if (event.key) {\n            event.stopPropagation();\n        }\n        const active = document.activeElement.shadowRoot.activeElement;\n        if (event.key === 'ArrowDown') {\n            const nextSibling = this._getSiblingNodeForFocus(active.nextSibling, true);\n            if (nextSibling !== null) {\n                nextSibling.focus();\n            }\n        } else if (event.key === 'ArrowUp') {\n            const prevSibling = this._getSiblingNodeForFocus(active.previousSibling);\n            if (prevSibling !== null) {\n                prevSibling.focus();\n            }\n        } else if (event.key === 'Escape') {\n            this.onClickDropDown(event);\n        }\n    }\n\n    get _controlled() {\n        // The caller is controlling the open/closed state of this dropdown.\n        return this.props.open !== undefined;\n    }\n\n    _getSiblingNodeForFocus = (node, isNext) => {\n        // Some menu items (like divider) can have no tabIndex set, so we should\n        // find the correct sibling node to focus\n        while (node !== null && node.getAttribute('tabIndex') === null) {\n            node = isNext ? node.nextSibling : node.previousSibling;\n        }\n        return node;\n    }\n\n    // Click handlers\n\n    onClickDropDown = (event) => {\n        if (!this.props.disabled && !this.props.noDropdown) {\n            this.props.onClickLabel && this.props.onClickLabel();\n            const node = getClosestFocusedAncestor(event);\n            node && node.blur();\n            if (!this._controlled) {\n                this.overlayState.toggleOverlay();\n            }\n            event.stopPropagation();\n        }\n    };\n\n    onItemKeyPress = (event, item) => {\n        if (event.key === 'Enter') {\n            item.onClick(event);\n        }\n    }\n\n    onDropdownKeyPress = (event) => {\n        if (event.key === 'Enter') {\n            this.onClickDropDown(event);\n        }\n    }\n\n    onClickDelete = (event, item) => {\n        event.stopPropagation();\n        event.preventDefault();\n        item.onClickDelete(event);\n    }\n\n    menuItem(item) {\n        const checkMarkIcon = configuration.currentProduct.config.defaultCheckMark ?? 'Checkmark';\n        const isSelectedIcon = item.isSelected ? { icon : checkMarkIcon } : {};\n        const iconData = item.iconId ? { icon : item.iconId } : isSelectedIcon;\n        const classes = classNames('panel-select-menu-item', item.className, { 'is-selected': item.isSelected, 'disabled': item.disabled });\n\n        if (item.divider) {\n            return <div data-test-id=\"panel-dropdown-menu-divider\" key={ item.key } className=\"panel-menu-subdivider\"/>;\n        }\n\n        if (item.isTitle) {\n            const title = this.disableUpperCaseTitle ? item.label : item.label.toLocaleUpperCase(environment.getLocale());\n            return <div className=\"panel-select-menu-header\" key={ item.key } data-test-id=\"panel-dropdown-menu-subtitle\" >{ title }</div>;\n        }\n\n        // Note: We need to use onMouseOver rather than onMouseEnter for this to work properly within a web component,\n        // because React will only listen to events on the document and the latter get eaten by the webcomponent boundary\n        return <div key={ item.key } className={ classes } onClick={ item.disabled ? () => {} : item.onClick } onMouseOver={ item.onMouseOver } onFocus={item.onFocus} tabIndex=\"0\" onKeyPress={ (e) => this.onItemKeyPress(e, item) } data-test-id={ `panel-dropdown-menu-item-${item.key}` }>\n            { item.onClickDelete\n                && <Tooltip content={ translate('DL_LIBRARY_LIST_FILTER_UNLINK_SOURCE_TOOLTIP') } >\n                    <div data-test-id=\"panel-dropdown-menu-item-remove\" className=\"panel-menu-remove-icon\" onClick={ (e) => this.onClickDelete(e, item) }>\n                        <Icon id=\"Close\" height={ 18 } className=\"left-align-correction\"/>\n                    </div>\n                </Tooltip>\n            }\n            <div data-test-id=\"panel-dropdown-menu-item-text\" className=\"panel-menu-label\">\n                { item.label }\n            </div>\n            <div data-test-id=\"panel-dropdown-menu-item-icon\" className=\"panel-menu-icon\">{ iconData.icon ? <Icon className= {item.iconClassName} id={ iconData.icon } height={ 12 }/> : null }</div>\n        </div>;\n    }\n\n    get disableUpperCaseTitle() {\n        return configuration.currentProduct.config.lowercaseMenuTitles || this.props.disableUpperCaseTitle;\n    }\n\n    get title() {\n        if (!this.props.title) { return; }\n        return this.disableUpperCaseTitle ? this.props.title : this.props.title.toLocaleUpperCase(environment.getLocale());\n    }\n\n    @computed get menu() {\n        return (\n            <div data-test-id=\"panel-dropdown-menu\" className=\"panel-dropdown-menu\" ref={ this._setMenuAlignmentClass }>\n                <div data-test-id=\"panel-dropdown-menu-list\" style={ this.menuListStyle }>\n                    { this.title && <div className=\"panel-select-menu-header\" data-test-id=\"panel-dropdown-menu-title\" >{ this.title }</div> }\n                    { this.props.data.map(item => this.menuItem(item)) }\n                    { this.props.footer }\n                </div>\n            </div>\n        );\n    }\n\n    get isStringLabel() {\n        return typeof this.props.currentLabel === 'string';\n    }\n\n    @observable.ref wrappedLabelRef;\n    setWrappedLabelRef = ref => {\n        this.wrappedLabelRef = ref;\n    }\n\n    get currentLabel() {\n        if (!this.props.currentLabel) { return null; }\n\n        if (!this.isStringLabel && !this.props.wrapCustomLabel) {\n            return this.props.currentLabel;\n        }\n\n        return <div className=\"panel-dropdown-name\" ref={this.setWrappedLabelRef}>\n            { this.props.icon && (\n                <div data-test-id=\"panel-dropdown-menu-item-type-icon\" className=\"panel-menu-icon panel-menu-icon-type\">{ <Icon id={ this.props.icon } height={ 18 }/> }</div>\n            ) }\n            <div data-test-id=\"panel-dropdown-name\" className=\"panel-select-menu-label\">{ this.props.currentLabel }</div>\n            { !this.props.noDropdown && <div className=\"panel-menu-icon\"><Icon id=\"ChevronDownSmall\" height={ configuration.currentProduct.config.dropdownChevronHeight || 8 } /></div> }\n        </div>;\n    }\n\n    _setParentElement = (element) => {\n        this._parentElement = element;\n        this.overlayState.setParentElement(element);\n    }\n\n    _setMenuAlignmentClass = (element) => {\n        // Calculates the direction a dropdown should display towards\n        if (!element) { return; }\n        element.className += ` dropdown-align-${this.getMenuAlignment()}`;\n    }\n\n    getMenuAlignment() {\n        // Menu boundbox will not be fully populated at this point,\n        // since it's position and css values are not fully applied.\n        // Hence relying on the parent position and MIN_MENU_WIDTH\n        if (!this._parentElement) { return this.props.align; }\n        const dropdownDimensions = environment.getAdjustedBoundingClientRect ? environment.getAdjustedBoundingClientRect(this._parentElement) : this._parentElement.getBoundingClientRect();\n\n        // Overflow case: drop down menu will exceed panel boundary\n        if (environment.getPanelWidth() <= (dropdownDimensions.x + MIN_MENU_WIDTH)) {\n            const leftSideSpace = dropdownDimensions.x;\n            const rightSideSpace = environment.getPanelWidth() - dropdownDimensions.x;\n            return leftSideSpace < rightSideSpace ? 'left' : 'right';\n        }\n        if (dropdownDimensions.x - MIN_MENU_WIDTH <= 0) {\n            return 'left';\n        }\n        return this.props.align;\n    }\n\n    // Calculates how much space we have for the menu.\n    // Note: we don't need to worry about the window height changing, since we close the menu on resize.\n    get menuListStyle() {\n        const dropdownDimensions = environment.getAdjustedBoundingClientRect ? environment.getAdjustedBoundingClientRect(this._parentElement) : this._parentElement && this._parentElement.getBoundingClientRect();\n        const dropdownBottom = dropdownDimensions && dropdownDimensions.bottom;\n        const containerHeight = Math.min(environment.getPanelHeight() - dropdownBottom, MAX_MENU_HEIGHT);\n        const maxHeight = this.props.maxHeight || Math.floor(containerHeight / MENU_ITEM_HEIGHT) * MENU_ITEM_HEIGHT;\n\n        return { maxHeight: `${maxHeight}px`, overflow: 'auto' };\n    }\n\n    @computed\n    get menuContainerStyle() {\n        if (!this._menuElement) { return; }\n\n        const rect = this._menuElement.getBoundingClientRect();\n        const dropdownRight = rect?.right ?? 0;\n        const leftAdjustment = environment.getPanelWidth() - dropdownRight;\n        if (leftAdjustment < 0) {\n            return { left: `${leftAdjustment}px` };\n        }\n    }\n\n    // For cases the menu width is larger than the space to show it, shift the dropdown to the right.\n    _setMenuElement = element => {\n        this._menuElement = element;\n    }\n\n    get isOpen() {\n        if (this._controlled) { return this.props.open; }\n        return this.overlayState.isOpen;\n    }\n\n    get currentLabelRef() {\n        if (!this.isStringLabel && !this.props.wrapCustomLabel && this.props.customLabelRef) {\n            return this.props.customLabelRef;\n        }\n        return this.wrappedLabelRef;\n    }\n\n    handleClickButton = (event) => {\n        event.stopPropagation();\n    }\n\n    render() {\n        const currentLabel = this.props.tooltip\n            ? <Tooltip content={ this.props.tooltip }>{ this.currentLabel }</Tooltip>\n            : this.currentLabel;\n\n        const dropdownClasses = classNames('panel-select', 'panel-dropdown', this.props.className, {\n            disabled: this.props.disabled,\n            'panel-custom-label-dropdown': !this.isStringLabel && !this.props.wrapCustomLabel\n        });\n\n        const tabIndex = !this.isStringLabel && !this.props.wrapCustomLabel ? null : '0';\n        return (\n            <div tabIndex={ tabIndex } onKeyPress={ this.onDropdownKeyPress } data-test-id={ `${this.props.type}-dropdown` } className={ dropdownClasses } onClick={ this.onClickDropDown } ref={ this._setParentElement }>\n                { currentLabel }\n                { this.isOpen && this.menu }\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { computed } from 'mobx';\nimport classNames from 'classnames';\nimport { translate } from 'app/js/managers/translationManager';\nimport BaseDropdown from 'app/js/components/panel-header/BaseDropdown';\nimport Icon from 'app/js/components/Icon';\nimport Button from 'app/js/components/Button';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport metrics from 'app/js/interface/metrics';\nimport configuration from 'app/js/config/configuration';\nimport OverlayState from 'app/js/components/utils/OverlayState';\n\n@observer\nexport default class SortDropdown extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        // Should a selection on this menu set the sorting order of elements or libraries?\n        mode: PropTypes.oneOf([ 'elements', 'libraries' ]),\n        // Whether to add a sub menu to control asc/desc order.\n        sortOrderControl: PropTypes.bool,\n        onSortChange: PropTypes.func,\n        // Hide grouping options, for XD document assets\n        hideGroupBy: PropTypes.bool,\n        disabled: PropTypes.bool,\n    }\n\n    static defaultProps = {\n        mode: 'elements',\n        hideGroupBy: false,\n        disabled: false,\n    };\n\n    overlayState = new OverlayState({\n        ignoreScrollEvents: true,\n        ignoreFocus: true\n    });\n\n    get library() {\n        return this.context.libraryManager.currentLibrary;\n    }\n\n    get isSearchMode() {\n        return this.context.viewState.isSearchMode();\n    }\n\n    get sortState() {\n        return this.context.viewState[{\n            libraries: 'librarySortState',\n            elements: this.isSearchMode ? 'elementSearchSort' : 'elementSortState'\n        }[this.props.mode]];\n    }\n\n    get sortOrderDescending() {\n        return this.context.viewState[{\n            libraries: 'librarySortOrderDescendingState',\n            elements: 'elementSortDescendingState'\n        }[this.props.mode]];\n    }\n\n    get sortOptions() {\n        return this.context.viewState[{\n            libraries: 'getLibrariesSearchSortOptions',\n            elements: this.isSearchMode ? 'getElementSearchSortOptions' : 'getElementSortOptions',\n        }[this.props.mode]]();\n    }\n\n    get sortTooltip() {\n        return configuration.currentProduct.isExpandedBrandsView?.() ? translate('BRAND_SORT_TOOLTIP') : translate('DL_SORT_TOOLTIP');\n    }\n\n    get viewByState() {\n        return this.context.viewState.viewByState;\n    }\n\n    get alwaysShowSortIcon() {\n        if (this.context.viewState.isStockSearchMode()) {\n            return true;\n        }\n        if (!this.context.viewState.isRootView() && this.viewByState === 'group') {\n            return true;\n        }\n        return false;\n    }\n\n    handleSortBySelection = option => {\n        const setSortState = this.context.viewState[{\n            libraries: 'setLibrarySortState',\n            elements: this.isSearchMode ? 'setElementSearchSort' : 'setElementSortState'\n        }[this.props.mode]].bind(this.context.viewState);\n\n        setSortState(option);\n        this.props.onSortChange && this.props.onSortChange(option);\n        metrics.reportEvent('Navigation', 'Library Panel', 'click', 'sort-change', { content: { type: this.props.mode === 'libraries' ? 'library' : 'element' } }, this.props.mode !== 'libraries' && this.context.libraryManager.currentLibrary);\n    }\n\n    handleSortOrderToggle = () => {\n        const setSortOrder = this.context.viewState[{\n            libraries: 'setLibrarySortOrderDescendingState',\n            elements: 'setElementSortDescendingState'\n        }[this.props.mode]].bind(this.context.viewState);\n\n        setSortOrder(!this.sortOrderDescending);\n        metrics.reportEvent('Navigation', 'Library Panel', 'click', 'sort-change', null, this.context.libraryManager.currentLibrary);\n    }\n\n    handleViewBySelection = option => {\n        this.context.viewState.setViewByState(option);\n        metrics.reportEvent('Navigation', 'Library Panel', 'click', 'filter-change', null, this.context.libraryManager.currentLibrary);\n    }\n\n    get sortControlLabel() {\n        const iconId = this.sortOrderDescending ? 'Sort' : 'SortDescending';\n        return (\n            <div data-test-id=\"sort-dropdown-order-control-label\" className=\"sort-dropdown-order-control-label\">\n                <Icon className=\"sort-icon\" id={ iconId } height={ 12 } />\n                <div>\n                    { translate('DL_SORT_REVERSE_ORDER') }\n                </div>\n            </div>\n        );\n    }\n\n    @computed get groupByOptions() {\n        // Select whether to view by group or view by type.\n        return this.context.viewState.getViewByStateOptions().map(option => ({\n            key: option,\n            label: translate(`DL_VIEW_BY_${option.toUpperCase()}_SHORT`),\n            onClick: () => this.handleViewBySelection(option),\n            isSelected: this.viewByState === option\n        }));\n    }\n\n    @computed get sortByOptions() {\n        const sortOptions = this.sortOptions.map(option => {\n            return {\n                label: translate('DL_SEARCH_SORT_BY_OPTION_' + option.toUpperCase()),\n                onClick: () => this.handleSortBySelection(option),\n                isSelected: this.sortState === option,\n                key: option\n            };\n        });\n\n        const canAddSortOption = this.props.sortOrderControl && (\n            (this.viewByState === 'group' && this.sortState === 'name')\n            || (this.context.viewState.isRootView() || this.viewByState !== 'group'));\n        if (canAddSortOption) {\n            sortOptions.push(\n                { divider: true, key: 'divider-1' },\n                {\n                    label: this.sortControlLabel,\n                    id: this.sortOrderDescending ? 'sortOrderDescending' : 'sortOrderAscending',\n                    onClick: this.handleSortOrderToggle,\n                    isSelected: false,\n                    key: 'sort-order'\n                }\n            );\n        }\n        if (configuration.currentProduct.customSortOptions) {\n            return configuration.currentProduct.customSortOptions(sortOptions);\n        }\n        return sortOptions;\n    }\n\n    get menuData() {\n        const viewBySection = [\n            { isTitle: true, key: 'groupBy', label: translate('DL_GROUP_BY_TITLE') },\n            ...this.groupByOptions,\n        ];\n        const sortSection = [\n            { isTitle: true, key: 'sortBy', label: translate('DL_SORT_BY_TITLE') },\n            ...this.sortByOptions\n        ];\n\n        if (this.props.mode === 'elements' && !this.isSearchMode) {\n            if (this.props.hideGroupBy) {\n                // only show sort by options\n                return sortSection;\n            }\n            // Elements can be viewed by group or by type.\n            return [\n                ...viewBySection,\n                { divider: true, key: 'divider-2' },\n                ...sortSection\n            ];\n        }\n        return sortSection;\n    }\n\n    handleClick = () => {\n        this.overlayState.toggleOverlay();\n    }\n\n    setCustomLabelRef = (ref) => { this.customLabelRef = ref; };\n    @computed get labelIcon() {\n        const height = configuration.currentProduct.config.iconHeight || 16;\n        const width = configuration.currentProduct.config.iconWidth || 16;\n        // We should always show sort icon for stock search and in custom group view.\n        const iconId = (this.sortOrderDescending && !this.alwaysShowSortIcon) ? 'SortDescending' : 'Sort';\n\n        return (\n            <div ref={ this.setCustomLabelRef }>\n                <Button selected={this.overlayState.isOpen} quiet variant=\"action\" data-test-id=\"sort-dropdown-button\" aria-label={this.sortTooltip}\n                    className={classNames('view-toggle-button', { 'is-disabled': this.props.disabled, 'selected': this.overlayState.isOpen })} onClick={this.handleClick}>\n                    <Icon className=\"sort-icon\" data-test-id=\"panel-dropdown-icon\" id={iconId} height={height} width={width} />\n                </Button>\n            </div>\n        );\n    }\n\n    render() {\n        return <BaseDropdown\n            tooltip={ this.sortTooltip }\n            disabled={ this.props.disabled }\n            data={ this.menuData }\n            className={classNames('panel-sort-dropdown')}\n            type=\"sort\"\n            currentLabel={ this.labelIcon }\n            locationBasedOnLabel={ true }\n            customLabelRef={ this.customLabelRef }\n            align=\"right\"\n        />;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport PathViewState from 'app/js/components/utils/PathViewState';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport metrics from 'app/js/interface/metrics';\nimport classNames from 'classnames';\nimport Icon from 'app/js/components/Icon';\nimport Tooltip from 'app/js/components/Tooltip';\nimport { renameItem } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\n\nconst TRAILING_ENTRY = /(\\s*\\/\\s*)|(\\s\\s)/;\n\nconst KEYS = {\n    ESC: 'Escape',\n    ENTER: 'Enter',\n    ARROW_LEFT: 'ArrowLeft',\n    ARROW_RIGHT: 'ArrowRight'\n};\n\n@observer\nexport default class EditableGroupPath extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        // The state of the path.\n        pathState: PropTypes.instanceOf(PathViewState),\n        autocomplete: PropTypes.bool\n    };\n\n    componentDidMount() {\n        if (this.pathState.isEditing) {\n            if (this.hideHead) {\n                // If the head isn't visible, move the cursor to the end.\n                this.placeCursorAt(this.value.length);\n            } else {\n                // Select the head name.\n                this.selectHead();\n            }\n            if (this.isRename) {\n                this.context.viewManager.startRename(this.pathState.group);\n            }\n        }\n    }\n\n    componentWillUnmount() {\n        this.pathState.stopEdit();\n        this.context.viewManager.stopRename();\n    }\n\n    get pathState() {\n        return this.props.pathState;\n    }\n\n    get isRename() {\n        if (this.context.viewState.viewByGroupMode === configuration.VIEW_BY_GROUP_MODES.PATH) {\n            return false;\n        }\n        return this.pathState.livePath.length === 1;\n    }\n\n    get hideHead() {\n        // The user has edited the input.\n        if (!this.pathState.head.isGroup) { return false; }\n        // Hide the head for new groups.\n        return this.pathState.isNewGroup;\n    }\n\n    @computed get value() {\n        return this.pathState.livePath\n            .map((entry, index) => {\n                // We hide the head when editing the path for a totally new group.\n                return index === this.headIndex && this.hideHead ? '' : entry.name;\n            })\n            .join(configuration.PATH_VIEW_GROUP_SEPARATOR);\n    }\n\n    get headValue() {\n        return this.pathState.head?.name;\n    }\n\n    get headIndex() {\n        return this.pathState.headIndex;\n    }\n\n    get isEditing() {\n        return this.pathState.isEditing;\n    }\n\n    setSelectionRangeUXP(start, end) {\n        // Due to UXP-18703, text selection must happen after the input element is focused,\n        // which is asynchronous in UXP, so set the selection range only once the input is focused.\n        // This works in standard web environments as well.\n        if (document.activeElement === this.inputEl) {\n            this.inputEl.setSelectionRange(start, end);\n        } else {\n            const onFocus = () => {\n                this.inputEl.setSelectionRange(start, end);\n                this.inputEl.removeEventListener('focus', onFocus);\n            };\n            this.inputEl.addEventListener('focus', onFocus);\n        }\n    }\n\n    setSelectionRange(start, end) {\n        if (!this.inputEl) { return; }\n\n        // If it has the UXP selection range bug and the current input element is not focused\n        if (environment.hasUXPInputSelectionRangeBug) {\n            this.setSelectionRangeUXP(start, end);\n        } else {\n            this.inputEl.setSelectionRange(start, end);\n        }\n\n        this.inputEl.focus();\n    }\n\n    selectHead() {\n        // Select the head text.\n        const headStart = this.value.length - this.headValue.length;\n        const headEnd = this.value.length;\n        this.setSelectionRange(headStart, headEnd);\n\n    }\n\n    placeCursorAt(position) {\n        this.setSelectionRange(position, position);\n    }\n\n    handleCreateNew() {\n        if (this.headValue.trim()) {\n            // User is intentionally creating a new group\n            metrics.setExtraEventMetrics('createGroup', { content: { category: 'In Path' } });\n            // Remove any extra space on this entry before moving on.\n            this.pathState.updateEntry(this.headIndex, this.headValue.trim());\n            this.pathState.addEntry();\n\n            if (environment.hasUXPInputSelectionRangeBug) {\n                // Manually move the cursor at the end of the input box to workaround https://jira.corp.adobe.com/browse/UXP-18860.\n                this.placeCursorAt(this.value.length);\n            }\n        }\n    }\n\n    handleInputChange = event => {\n        const value = event.target.value;\n        // If the user hit slash, create a new entry.\n        if (value.match(/\\/$/) && value.length > this.value.length) {\n            return this.handleCreateNew();\n        }\n        // Find the entry that was edited by splitting the value by separator and searching the diff.\n        const currentValue = value.split(configuration.PATH_VIEW_GROUP_SEPARATOR);\n        const changedIndex = currentValue.findIndex((entry, index) => entry !== this.pathState.livePath[index].name);\n        // Remove the remains of a deleted entry.\n        const newValue = currentValue[changedIndex].split(TRAILING_ENTRY)[0];\n        this.pathState.updateEntry(changedIndex, newValue);\n        if (this.isRename) {\n            this.context.viewManager.setRenameValue(newValue);\n        }\n    }\n\n    handleKeyDown = event => {\n        if ([ KEYS.ARROW_LEFT, KEYS.ARROW_RIGHT ].includes(event.key)) {\n            // Usually the left and right arrows are used as shortcuts to switch the selected element,\n            // but here the user might use them to travel between characters in the input box.\n            event.stopPropagation();\n        }\n        if (event.key === KEYS.ENTER) {\n            this.handleCommitEdit();\n        }\n        if (event.key === KEYS.ESC) {\n            this.pathState.stopEdit();\n        }\n    }\n\n    handleCommitEdit() {\n        if (this.isRename) { return this.handleRenameCommit(); }\n        this.pathState.commitEdit();\n    }\n\n    handleRenameCommit() {\n        if (!this.isInvalidName && this.context.viewManager.renameValue) {\n            // We need to stop the rename in the view manager before renaming the value,\n            // otherwise the rename state could try to validate the name of a group that is merged into another group\n            const value = this.context.viewManager.renameValue.trim();\n            this.context.viewManager.stopRename();\n            renameItem(this.pathState.group, value);\n        }\n        this.pathState.stopEdit();\n    }\n\n    handleBlur = () => {\n        // If autocomplete is active, the user may click it without closing the input.\n        if (!this.props.autocomplete) {\n            this.handleCommitEdit();\n        }\n    }\n\n    handleInputClick = event => {\n        event.stopPropagation();\n    }\n\n    setInputRef = el => {\n        this.inputEl = el;\n        this.pathState.setInputElement(el);\n    }\n\n    @computed get tooltipErrorMessage() {\n        const status = this.context.viewManager.renameStatus;\n        return configuration.RENAME_STATE_ERROR_MESSAGES[status];\n    }\n\n    @computed get isInvalidName() {\n        if (!this.isRename) { return false; }\n        return this.context.viewManager.renameStatus !== configuration.RENAME_STATES.VALID;\n    }\n\n    render() {\n        const classes = classNames('panel-group-path-view-edit panel-group-container-text is-editing', { 'invalid': this.isInvalidName });\n        return (\n            <div className={ classes }>\n                <input\n                    type=\"text\"\n                    spellCheck=\"false\"\n                    uxp-quiet=\"false\"\n                    data-test-id=\"panel-group-path-view-entry-input\"\n                    className=\"panel-group-container-input\"\n                    ref={ this.setInputRef }\n                    value={ this.value }\n                    onChange={ this.handleInputChange }\n                    onKeyDown={ this.handleKeyDown }\n                    onClick={ this.handleInputClick }\n                    onBlur={ this.handleBlur }\n                />\n                { this.isInvalidName\n                    && <div data-test-id=\"editable-name-alert-tooltip\" >\n                        <Tooltip className=\"editable-name-alert-tooltip\" placement=\"top\" content={ translate(this.tooltipErrorMessage) }>\n                            <Icon className=\"editable-name-alert-icon\" id=\"Alert\" height={ 10 }/>\n                        </Tooltip>\n                    </div>\n                }\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n// This can be used in environments that don't have native ResizeObserver support\n\nexport default class LegacyBrowserResizeObserver {\n\n    constructor(cb) {\n        this._cb = cb;\n    }\n\n    disconnect() {\n        window.removeEventListener('resize', this._cb);\n    }\n\n    observe() {\n        window.addEventListener('resize', this._cb);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observable, computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport EditableGroupPath from 'app/js/components/path-view/EditableGroupPath';\nimport configuration from 'app/js/config/configuration';\nimport { debounce } from 'app/js/utils/promiseUtils';\nimport { truncatePath } from 'app/js/utils/stringUtils';\nimport { getAllAncestors } from 'app/js/utils/groupUtils';\nimport LegacyBrowserResizeObserver from 'app/js/utils/LegacyBrowserResizeObserver';\nimport { Group } from '@cclibraries/cc-libraries-js';\nimport DocumentGroup from 'app/applications/SPRK/js/models/documentAssets/DocumentGroup';\n\n@observer\nexport default class GroupPathView extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        group: PropTypes.oneOfType([ PropTypes.instanceOf(Group), PropTypes.instanceOf(DocumentGroup) ]).isRequired,\n        disableEditing: PropTypes.bool\n    };\n\n    static defaultProps = {\n        disableEditing: false\n    }\n\n    @observable _maxWidth = 0;\n\n    componentDidMount() {\n        // older versions of Chromium and IE11 don't support ResizeObserver, so fallback to a Legacy wrapper which has same interface\n        let Observer = LegacyBrowserResizeObserver;\n        if (window.ResizeObserver) {\n            Observer = window.ResizeObserver;\n        }\n        this.resizeObserver = new Observer(() => this.handleResize());\n        this.pathRef && this.resizeObserver.observe(this.pathRef);\n    }\n\n    componentWillUnmount() {\n        if (this.resizeObserver) {\n            this.resizeObserver.disconnect();\n        } else {\n            window.removeEventListener('resize', this.handleResize);\n        }\n    }\n\n    setPathRef = el => {\n        this.pathRef = el;\n    }\n\n    handleResize = debounce(configuration.WINDOW_RESIZE_DEBOUNCE, () => {\n        // Some applications have extra padding around the path view, so subtract that as well\n        const extraWidthSubtraction = configuration.currentProduct.config.editWidthSubtraction || 0;\n        this._maxWidth = this.pathRef ? this.pathRef.clientWidth - configuration.SCROLLBAR_WIDTH - extraWidthSubtraction : 0;\n        return Promise.resolve();\n    });\n\n    get pathState() {\n        return this.context.viewManager.pathState;\n    }\n\n    get maxDepth() {\n        return this.props.group.library.pathViewMaxDepth || 0;\n    }\n\n    @computed get groupPath() {\n        return [ ...getAllAncestors(this.props.group), this.props.group ].map(g => g.name).slice(this.maxDepth);\n    }\n\n    get isEditing() {\n        return this.context.viewManager.editPathGroup === this.props.group;\n    }\n\n    get maxWidth() {\n        return this._maxWidth;\n    }\n\n    handleDoubleClick = () => {\n        if (this.props.disableEditing) {\n            return;\n        }\n        this.context.viewManager.startEditPath(this.props.group);\n    }\n\n    @computed get pathView() {\n        const path = truncatePath(this.groupPath, { maxWidth: this.maxWidth, className: 'panel-group-container-text-sizer' });\n        const entries = path.split(configuration.PATH_VIEW_GROUP_SEPARATOR);\n        const head = entries[entries.length - 1];\n        const tail = entries.slice(0, entries.length - 1).join(configuration.PATH_VIEW_GROUP_SEPARATOR);\n        return (\n            <div ref={this.setPathRef}\n                data-test-id=\"panel-group-path-view\"\n                className=\"panel-group-container-text panel-group-path-view\"\n                onDoubleClick={this.handleDoubleClick}\n            >\n                { tail }{ tail && configuration.PATH_VIEW_GROUP_SEPARATOR }\n                <span className=\"panel-group-path-view-head\">{ head }</span>\n            </div>\n        );\n    }\n\n    render() {\n        if (!this.isEditing) { return this.pathView; }\n        return <EditableGroupPath pathState={this.pathState} autocomplete />;\n    }\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport classNames from 'classnames';\n\n@observer\nexport default class SpectrumCheckbox extends React.Component {\n\n    static propTypes = {\n        checked: PropTypes.bool,\n        disabled: PropTypes.bool,\n        label: PropTypes.string,\n        onChange: PropTypes.func,\n    }\n\n    render() {\n        const checkboxClasses = classNames('spectrum-Checkbox-box', { 'checked': this.props.checked });\n        return (\n            <label className=\"spectrum-Checkbox\">\n                <input tabIndex={0} data-test-id=\"spectrum-checkbox\" type=\"checkbox\" className=\"spectrum-Checkbox-input\"\n                    onClick={this.props.onChange} aria-checked={this.props.checked}\n                    aria-label={this.props.label} checked={this.props.checked} readOnly disabled={this.props.disabled} />\n                <span className={checkboxClasses}>\n                    <svg className=\"spectrum-UIIcon-CheckmarkSmall spectrum-Icon spectrum-Checkbox-checkmark\" focusable=\"false\" aria-hidden=\"true\" role=\"img\">\n                        <path d=\"M3.788 9A1 1 0 0 1 3 8.615l-2.288-3a1 1 0 1 1 1.576-1.23l1.5 1.991 3.924-4.991a1 1 0 1 1 1.576 1.23l-4.712 6A1 1 0 0 1 3.788 9z\" className=\"spectrum-UIIcon--medium\"></path>\n                    </svg>\n                </span>\n                <span className=\"spectrum-Checkbox-label\">{this.props.label}</span>\n            </label>\n        );\n    }\n}\n\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport environment from 'app/js/environment';\n\n// This is the only react-spectrum dependency outside of the library manager. This single import adds ~600kb to the bundle size.\nconst Wait = process.env.INCLUDE_DESKTOP && require('@torq-native/react-spectrum/Wait');\n\n@observer\nexport default class SpectrumCircleLoader extends React.Component {\n    static defaultProps = {\n        progress: 0,\n        size: 'large',\n        indeterminate: false,\n    };\n\n    static propTypes = {\n        progress: PropTypes.number,\n        size: PropTypes.oneOf([ 'small', 'medium', 'large' ]),\n        indeterminate: PropTypes.bool,\n        className: PropTypes.string,\n        'data-test-id': PropTypes.string\n    };\n\n    get value() {\n        return Math.min(Math.max(+this.props.progress, 0), 100);\n    }\n\n    get progressBar() {\n        // From: https://github.com/adobe/react-spectrum/blob/master/src/Wait/js/Wait.js\n        let angle;\n        const fillSubmask1Style = {};\n        const fillSubmask2Style = {};\n\n        if (!this.props.indeterminate) {\n            if (this.value > 0 && this.value <= 50) {\n                angle = -180 + (this.value / 50 * 180);\n                fillSubmask1Style.transform = 'rotate(' + angle + 'deg)';\n                fillSubmask2Style.transform = 'rotate(-180deg)';\n            } else if (this.value > 50) {\n                angle = -180 + (this.value - 50) / 50 * 180;\n                fillSubmask1Style.transform = 'rotate(0deg)';\n                fillSubmask2Style.transform = 'rotate(' + angle + 'deg)';\n            }\n        }\n\n        return <div\n            className={\n                classNames(\n                    `spectrum-CircleLoader spectrum-CircleLoader--${this.props.size}`,\n                    {\n                        'spectrum-CircleLoader--indeterminate': this.props.indeterminate\n                    },\n                    this.props.className\n                )\n            }\n            data-test-id={this.props['data-test-id']}\n        >\n            <div className=\"spectrum-CircleLoader-track\" />\n            <div className=\"spectrum-CircleLoader-fills\">\n                <div className=\"spectrum-CircleLoader-fillMask1\">\n                    <div data-test-id=\"circle-loader-submask1\" className=\"spectrum-CircleLoader-fillSubMask1\" style={fillSubmask1Style}>\n                        <div className=\"spectrum-CircleLoader-fill\" />\n                    </div>\n                </div>\n                <div className=\"spectrum-CircleLoader-fillMask2\">\n                    <div data-test-id=\"circle-loader-submask2\" className=\"spectrum-CircleLoader-fillSubMask2\" style={fillSubmask2Style}>\n                        <div className=\"spectrum-CircleLoader-fill\" />\n                    </div>\n                </div>\n            </div>\n        </div>;\n    }\n\n    get uxpProgressBar() {\n        return (\n            <Wait\n                data-test-id=\"uxp-circle-loader\"\n                variant={this.props.indeterminate ? 'indeterminate' : 'determinate'}\n                indeterminate={this.props.indeterminate}\n                value={this.value}\n                size={this.props.size.substring(0, 1).toUpperCase()}\n                className={`spectrum-CircleLoader--${this.props.size}`}\n            />\n        );\n    }\n\n    render() {\n        return (\n            <div data-test-id=\"progress\" className=\"panel-progress\">\n                {/* UXP doesn't support CSS animations, so we use the UXP Rect Spectrum component which relies on JS+SVGs instead. */}\n                { environment.supportsAnimations ? this.progressBar : this.uxpProgressBar }\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport Tooltip from '../Tooltip';\nimport { translate } from 'app/js/managers/translationManager';\nimport Icon from 'app/js/components/Icon';\nimport { computed } from 'mobx';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\n\n@observer\nexport default class StockSearchResultBadge extends React.Component {\n    static contextType = LibrariesContext;\n    static propTypes = {\n        asset: PropTypes.object.isRequired,\n        onLicenseClick: PropTypes.func.isRequired,\n        onSaveCompClick: PropTypes.func.isRequired,\n    }\n\n    @computed get isWritable() {\n        // Does not matter if the currentlibrary is loaded because this badge is shown in the stock search view, not the current library view.\n        return this.context.viewState.isLibraryWritable(this.context.libraryManager.currentLibrary, null, true);\n    }\n\n    _getLicensedBadge() {\n        if (!this.props.asset.is_licensed) {\n            return;\n        }\n\n        return (\n            <div className=\"panel-dl-stock-content-item-licensed-container\">\n                <Tooltip content={translate('DL_STOCK_LICENSED_SEARCH_RESULT')}>\n                    <div className=\"panel-dl-stock-content-item-licensed search-asset-icon\" data-test-id=\"licensed\">\n                        <div className=\"panel-dl-stock-content-item-icon-licensed\"><Icon id=\"StockLicensedBadge\" height={ 40 } width={ 46 }/></div>\n                    </div>\n                </Tooltip>\n            </div>\n        );\n    }\n\n    _getLicenseButton() {\n        if (this.props.asset.is_licensed || !this.context.libraryManager.currentLibrary) {\n            return;\n        }\n\n        const {\n            name\n        } = this.context.libraryManager.currentLibrary;\n\n        let licenseClickHandler = this.props.onLicenseClick;\n        if (!this.isWritable) {\n            licenseClickHandler = null;\n        }\n\n        const licenseClasses = classNames(\n            'panel-dl-stock-content-item-action',\n            'search-asset-icon',\n            'show-on-hover-child',\n            { disabled: !this.isWritable }\n        );\n\n        let tooltipContent;\n        if (this.isWritable) {\n            if (AdobeStockUtils.canShowLicenseDialog()) {\n                tooltipContent = translate('DL_STOCK_LICENSE_THEN_SAVE_TO_TOOLTIP', { name });\n            } else {\n                tooltipContent = translate('DL_STOCK_LICENSE_TOOLTIP');\n            }\n        } else {\n            tooltipContent = translate('DL_ERROR_EDIT_READ_ONLY_LIBRARY', { name });\n        }\n\n        return (\n            <Tooltip content={tooltipContent}>\n                <div className={licenseClasses} onClick={licenseClickHandler} data-test-id=\"license-button\">\n                    <div className=\"panel-dl-stock-content-item-icon\"><Icon id=\"ShoppingCart\" height={ 18 }/></div>\n                </div>\n            </Tooltip>\n        );\n    }\n\n    _getSaveCompButton() {\n        const {\n            asset,\n        } = this.props;\n\n        // If the asset was previously licensed or if the comp can be saved,\n        // allow the save comp button. Otherwise don't render it.\n        if (!(asset.is_licensed || AdobeStockUtils.canSaveComp(asset)) || !this.context.libraryManager.currentLibrary) {\n            return;\n        }\n\n        const {\n            name\n        } = this.context.libraryManager.currentLibrary;\n\n        let saveCompClickHandler = this.props.onSaveCompClick;\n        if (!this.isWritable) {\n            saveCompClickHandler = null;\n        }\n\n        const compClasses = classNames(\n            'panel-dl-stock-content-item-action',\n            'search-asset-icon',\n            'show-on-hover-child',\n            { disabled: !this.isWritable }\n        );\n\n        let tooltipContent;\n        if (!this.isWritable) {\n            tooltipContent = translate('DL_ERROR_EDIT_READ_ONLY_LIBRARY', { name });\n        } else if (asset.is_licensed) {\n            tooltipContent = translate('DL_STOCK_SAVE_TO_TOOLTIP', { name });\n        } else {\n            tooltipContent = translate('DL_STOCK_SAVE_PREVIEW_TO_TOOLTIP', { name });\n        }\n\n        // TODO: When offline need to show an error dialog when trying to save a comp\n        return (\n            <Tooltip content={ tooltipContent }>\n                <div className={ compClasses } onClick={ saveCompClickHandler } data-test-id=\"savecomp-button\">\n                    <div className=\"panel-dl-stock-content-item-icon\"><Icon id=\"AddStock\" height={ 18 }/></div>\n                </div>\n            </Tooltip>\n        );\n    }\n\n    render() {\n        // TODO: isVertical will be determined dynamically later\n        const isVertical = false;\n\n        const badgeLayoutClass = classNames({\n            'panel-dl-stock-content-item-hover-vertical': isVertical,\n            'panel-dl-stock-content-item-hover': !isVertical,\n        });\n\n        return (\n            <React.Fragment>\n                <div className={badgeLayoutClass} data-test-id=\"badges\">\n                    {this._getLicenseButton()}\n                    {this._getSaveCompButton()}\n                </div>\n                {this._getLicensedBadge()}\n            </React.Fragment>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport libraryManager from 'app/js/managers/libraryManager';\nimport menuManager from 'app/js/managers/menuManager';\nimport metrics from 'app/js/interface/metrics';\nimport librarySizeManager from 'app/js/managers/librarySizeManager';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport viewState from 'app/js/state/viewState';\nimport { pushMenuGroup } from 'app/js/utils/menuUtils';\nimport { launchStockAssetURL } from 'app/js/utils/linkUtils';\n\n/**\n * Shows the contextual menu for a particular Stock search result\n *\n * @param {Object} asset the Stock search result on which we are creating the menu\n * @param {DOMElement} img the DOMElement that will be used to create the preview rendition\n */\nexport function showContextMenu(asset, img) {\n    const menuItems = [];\n    const librariesGroup = [];\n\n    if (!asset.is_licensed) {\n        // MS Office does not support InApp purchase. Redirect to Adobe Stock Web to license.\n        if (!AdobeStockUtils.canShowLicenseDialog()) {\n            librariesGroup.push({\n                label: 'DL_STOCK_LICENSE_TOOLTIP',\n                onClick: () => {\n                    const sequence = metrics.STOCK_EVENTSOURCE.CONTEXT_MENU;\n                    metrics.reportStockEvent('License', 'click', 'start', { ui: { sequence } }, asset);\n                    launchStockAssetURL(asset.id, asset.type);\n                }\n            });\n        } else {\n            const toLibraryItems = getStockAssetDestinationLibraries((library) => {\n                const sequence = metrics.STOCK_EVENTSOURCE.CONTEXT_MENU;\n                metrics.reportStockEvent('License', 'click', 'start', { ui: { sequence } }, asset);\n                AdobeStockUtils.licenseAssetAndSaveToLibrary({ asset, library })\n                    .then(() => {\n                        metrics.reportStockEvent('License', 'render', 'success', { ui: { sequence } }, asset);\n                    })\n                    .catch(() => {\n                        metrics.reportStockEvent('License', 'render', 'error', { event: { error_desc: 'unknown' }, ui: { sequence } }, asset);\n                    });\n            });\n            librariesGroup.push({\n                label: 'DL_STOCK_LICENSE_THEN_SAVE_TO',\n                enableMenu: true,\n                menuItems: toLibraryItems\n            });\n        }\n    }\n\n    if (AdobeStockUtils.canSaveComp(asset) || asset.is_licensed) {\n        const toLibraryItems = getStockAssetDestinationLibraries((library) => {\n            metrics.reportStockEvent('Add Stock', 'click', 'start', null, asset);\n            AdobeStockUtils.saveCompToLibrary({ asset, library, img })\n                .then((element) => {\n                    metrics.reportStockEvent('Add Stock', 'render', 'success', {}, element);\n                })\n                .catch(() => {\n                    metrics.reportStockEvent('Add Stock', 'render', 'error', { event: { error_desc: 'unknown' } });\n                });\n        });\n        librariesGroup.push({\n            label: asset.is_licensed ? 'DL_STOCK_SAVE_TO' : 'DL_STOCK_SAVE_PREVIEW_TO',\n            enableMenu: true,\n            menuItems: toLibraryItems\n        });\n    }\n\n    pushMenuGroup(menuItems, librariesGroup);\n\n    const assetOperationsGroup = [];\n\n    // if the stock searched element is a template or a motion graphic template (media_type_id = 7),\n    // we don't show the Find Similar option because Stock does not support this option for the referenced types.\n    if (asset.media_type_id !== 7) {\n        assetOperationsGroup.push({\n            label: 'DL_STOCK_FIND_SIMILAR_MENU',\n            onClick: () => {\n                metrics.reportStockEvent('Find Similar', 'click', 'find', { 'ui': { 'sequence': 'search' } }, asset);\n                viewState.setFindSimilarSearchMode(asset.id);\n            }\n        });\n    }\n\n    assetOperationsGroup.push({\n        label: 'DL_STOCK_VIEW_ON_WEB',\n        onClick: () => {\n            launchStockAssetURL(asset.id, asset.type);\n        }\n    });\n\n    pushMenuGroup(menuItems, assetOperationsGroup);\n\n    menuManager.setContextMenu(menuItems);\n}\n\n/**\n * Returns a list of menu items that are libraries the user has access to. Libraries which\n * are writable and can accommodate a new asset will be enabled.\n *\n * The provided hander is invoked with the library as its paramter\n *\n * @param {Function} handleClick the handler that is invoked when the library is selected\n * @returns {Array} the array of menu items with a bound callback suitable for use in a menu\n */\nfunction getStockAssetDestinationLibraries(handleClick) {\n    return libraryManager.libraries.map(lib => ({\n        label: lib.name,\n        enableMenu: librarySizeManager.canAddElements(lib) && viewState.isLibraryWritable(lib, false, true),\n        checked: lib.id === libraryManager.currentLibrary.id,\n        onClick: () => {\n            handleClick(lib);\n        }\n    }));\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport StockSearchResultBadge from './StockSearchResultBadge';\nimport Tooltip from '../Tooltip';\nimport { getTooltip } from 'app/js/utils/adobeStockUtils';\nimport { showContextMenu } from 'app/js/menus/stockContextMenu';\nimport dragManager from 'app/js/managers/dragManager';\nimport {\n    saveCompToLibrary,\n    licenseAssetAndSaveToLibrary,\n} from 'app/js/utils/adobeStockUtils';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport metrics from 'app/js/interface/metrics';\nimport * as LinkUtils from 'app/js/utils/linkUtils';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport environment from 'app/js/environment';\nimport * as DragUtils from 'app/js/utils/dragUtils';\n\n@observer\nexport default class StockSearchResult extends React.Component {\n    static propTypes = {\n        asset: PropTypes.object.isRequired,\n        children: PropTypes.node.isRequired,\n        layout: PropTypes.shape({\n            width: PropTypes.number.isRequired,\n            height: PropTypes.number.isRequired\n        }).isRequired\n    };\n\n    /**\n     * @param {DOMElement} element\n     * @private\n     */\n    _setImageRef = (element) => {\n        this.imageElement = element;\n    }\n\n    /**\n     * @private\n     */\n    _handleSaveCompClick = () => {\n        const { asset } = this.props;\n\n        metrics.reportStockEvent('Add Stock', 'click', 'start', null, asset);\n        saveCompToLibrary({ asset, library: libraryManager.currentLibrary, img: this.imageElement })\n            .then((element) => {\n                metrics.reportStockEvent('Add Stock', 'render', 'success', {}, element);\n            })\n            .catch(() => {\n                metrics.reportStockEvent('Add Stock', 'render', 'error', { event: { error_desc: 'unknown' } });\n            });\n    }\n\n    /**\n     * @private\n     */\n    _handleLicenseClick = () => {\n        const sequence = metrics.STOCK_EVENTSOURCE.SEARCH;\n        const { asset } = this.props;\n\n        metrics.reportStockEvent('License', 'click', 'start', { ui: { sequence } }, asset);\n\n        // Check current environment can show License Dialog\n        if (!AdobeStockUtils.canShowLicenseDialog()) {\n            LinkUtils.launchStockAssetURL(asset.id, asset.type);\n            return;\n        }\n\n        licenseAssetAndSaveToLibrary({ asset, library: libraryManager.currentLibrary, img: this.imageElement })\n            .then(() => {\n                metrics.reportStockEvent('License', 'render', 'success', { ui: { sequence } }, asset);\n            })\n            .catch(() => {\n                metrics.reportStockEvent('License', 'render', 'error', { event: { error_desc: 'unknown' }, ui: { sequence } }, asset);\n            });\n    }\n\n    /**\n     * @param {MouseEvent} mouseEvent\n     * @private\n     */\n    _handleContextMenu = (mouseEvent) => {\n        mouseEvent.stopPropagation();\n        showContextMenu(this.props.asset, this.imageElement);\n        environment.onContextMenu(mouseEvent);\n    }\n\n    /**\n     * @param {DragEvent} dragStartEvent\n     * @private\n     */\n    _handleDragStart = (dragStartEvent) => {\n        const data = {\n            asset: this.props.asset,\n            imageElement: this.imageElement,\n            dragStartEvent,\n        };\n\n        const populateDragImageNode = (ghostContainer) => {\n            // Create the clone from the image element which has the width and height the same\n            // as the virtual scroller element\n            const dragClone = this.imageElement.cloneNode(true);\n            dragClone.style.opacity = 0.8;\n            dragClone.style.width = this.props.layout.width + 'px';\n            dragClone.style.height = this.props.layout.height + 'px';\n\n            dragClone.style.left = (dragStartEvent.target.clientX - dragStartEvent.target.clientWidth / 2) + 'px';\n            dragClone.style.top = (dragStartEvent.target.clientY - dragStartEvent.target.clientHeight / 2) + 'px';\n\n            // Append the clone\n            ghostContainer.appendChild(dragClone);\n            // Append the ghost to body\n            document.body.appendChild(ghostContainer);\n        };\n\n        const useCustomGhostImage = DragUtils.useCustomGhostImage();\n        // On Windows use the standard drag handling, on macOS use a custom drag/drop standin. On Windows\n        // we take the standard behavior with the caveat that items such as the badges will be visible in the\n        // drag image\n        dragManager.handleDragStart('stock', data, useCustomGhostImage ? populateDragImageNode : null);\n    }\n\n    /**\n     * @param {DragEvent} dragEndEvent\n     * @private\n     */\n    _handleDragEnd = (dragEndEvent) => {\n        dragManager.handleDragEnd({ dragEndEvent });\n    }\n\n    /**\n     * Open the system browser with the URL of the asset for this\n     * particular search result.\n     */\n    _handleDoubleClick = () => {\n        LinkUtils.launchStockAssetURL(this.props.asset.id, this.props.asset.type);\n    }\n\n    render() {\n        const {\n            asset,\n        } = this.props;\n        const elementType = AdobeStockUtils.getElementType(asset.media_type_id, asset.content_type);\n        const {\n            thumbnail_url,\n            id,\n        } = asset;\n\n        return (\n            <Tooltip content={getTooltip(asset)}>\n                <div className=\"panel-stock-search-result-container show-on-hover-parent\"\n                    onContextMenu={this._handleContextMenu}\n                    onDragStart={this._handleDragStart}\n                    onDragEnd={this._handleDragEnd}\n                    onDoubleClick={this._handleDoubleClick}\n                    data-test-id={`stock-result-${id}`}\n                    draggable={elementConfiguration.isStockAssetDraggable(elementType)} >\n                    <img\n                        className=\"panel-stock-search-result-image\"\n                        src={thumbnail_url}\n                        ref={this._setImageRef}\n                        data-test-id=\"image\"\n                        crossOrigin=\"anonymous\"\n                    />\n                    {/* Ensure that any additional information is overlaid on the thumbnail. This allows\n                        the display to be overridden, but the DOM element is still present to allow\n                        for thumbnail generation.  */}\n                    <div className=\"panel-stock-search-result-children-container\">\n                        {this.props.children}\n                    </div>\n\n                    <StockSearchResultBadge\n                        asset={asset}\n                        onLicenseClick={this._handleLicenseClick}\n                        onSaveCompClick={this._handleSaveCompClick} />\n                </div>\n            </Tooltip>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { LibrariesProvider } from 'app/js/state/LibrariesContext';\nimport appState from 'app/js/appState';\n\nexport const PortalContext = React.createContext();\n\nexport class PortalProvider extends React.Component {\n\n    static propTypes = {\n        children: PropTypes.node,\n        portalNode: PropTypes.instanceOf(HTMLElement)\n    };\n\n    render() {\n        return (\n            <PortalContext.Provider value={ this.props.portalNode }>\n                <LibrariesProvider value={ appState.panel } style={ {\n                    height: '100%',\n                    width: '100%',\n                    borderRadius: 'inherit',\n                    background: 'inherit'\n                } }>\n                    { this.props.children }\n                </LibrariesProvider>\n            </PortalContext.Provider>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport BaseContentView from 'app/js/components/LibraryContentsView/BaseContentView';\nimport LibraryContentsView from 'app/js/components/LibraryContentsView';\nimport Virtualizer from '@adobe/uxp-optimized/lib/Virtualizer';\nimport { isLicensed } from 'app/js/utils/adobeStockUtils';\nimport environment from 'app/js/environment';\n\nfunction getItemRect(item) {\n    // each item contains x,y,width,height properties\n    // so each item implements the expected Rect interface\n    return item;\n}\n\nfunction getItemType(item) {\n    // licensed items are rendered with a fairly complex set of elements including an svg image.\n    // by including licensed as part of the type string we can avoid destroying and recreating these elements.\n    // this improves scrolling performance.\n    const licensed = item.type === 'element' && isLicensed(item.data);\n    return `${(item.data && item.data.type) ? item.data.type : item.type}:${licensed ? 1 : 0}`;\n}\n\n// There is a circular dependency when loading this in unit tests.\n// That will result in LibraryContentsView being undefined which is why we add | class Empty { }.\n// LibraryContentsView -> environment -> XDEnvironment -> UXPEnvironment -> UXPLibraryContentsView -> LibraryContentsView\nconst BaseComponent = typeof BaseContentView === 'function' ? BaseContentView : class Empty { };\n\nclass UXPBaseContentView extends BaseComponent {\n    _onDragOver(draggedX, draggedY) {\n        if (environment.autoScrollNotSupported) {\n            // Auto-scrolling (UXP doesn't yet do this automatically, so need to simulate it)\n            if (!this._autoScrolling) {\n                const top = draggedY - this._scrollTop;\n                const height = this.props.height;\n                const AUTO_SCROLL_AREA = 40;\n                const AUTO_SCROLL_OFFSET = 20;\n                const autoScroll = top < AUTO_SCROLL_AREA ? -1 : (height - top < AUTO_SCROLL_AREA ? 1 : 0);\n                if (autoScroll) {\n                    const offset = autoScroll * AUTO_SCROLL_OFFSET;\n                    this._autoScrolling = requestAnimationFrame(() => {\n                        delete this._autoScrolling;\n                        this._uxpVirtualScroller && this._uxpVirtualScroller.scrollBy(0, offset);\n                    });\n                }\n            }\n        }\n    }\n\n    _setVirtualScroller = (collection) => {\n        this._uxpVirtualScroller = collection;\n    }\n\n    renderVirtualizer() {\n        const scrollToCell = this._getScrollToCellAndClearPending();\n        const scrollToItemKey = scrollToCell >= 0 ? this._getCellItemKey(this.items[scrollToCell]) : undefined;\n\n        return <Virtualizer\n            id=\"collection\"\n            items={ this.items }\n            itemKey={ this._getCellItemKey }\n            itemType={ getItemType }\n            itemRect={ getItemRect }\n            scrollToItem={ scrollToItemKey }\n            style={{ width: this.props.width, height: this.props.height, zIndex: 0 }}\n            ref={ this._setVirtualScroller }\n        >\n            {\n                (item) => {\n                    const { type, data, height, width, additionalStyles, library, viewMode, gridSizeType, ...additionalProps } = item;\n                    const itemView = BaseContentView.ITEM_VIEWS[type](data, height, width, library, viewMode, gridSizeType, additionalProps);\n                    const style = { zIndex: item.zIndex };\n                    if (additionalStyles) {\n                        Object.assign(style, additionalStyles);\n                    }\n                    return <div style={style}>{ itemView }</div>;\n                }\n            }\n        </Virtualizer>;\n    }\n}\n\nconst UXPLibraryContentsView = props => (\n    <LibraryContentsView\n        { ...props }\n        baseContentView={ UXPBaseContentView }\n    />\n);\n\nUXPLibraryContentsView.displayName = 'UXPLibraryContentsView';\n\nexport default UXPLibraryContentsView;\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n// Entry point for the main panel view in UXP - includes the UXP context menu.\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport classNames from 'classnames';\nconst DIVIDER_CHAR = '\\u23BC';\nconst MAX_DIVIDER_CHARS = 36;\n\n@observer\nexport default class UXPTooltip extends React.Component {\n\n    static propTypes = {\n        children: PropTypes.node,\n        featureId: PropTypes.string,\n        content: PropTypes.array,\n        disable: PropTypes.bool,\n        className: PropTypes.string\n    };\n\n    get divider() {\n        // Get the maximum width of any line of the tooltip\n        const tooltipContent = this.props.content.filter(item => !item.divider);\n        const maxLineLength = Math.max(...tooltipContent.map(a => a.length));\n\n        // Make sure the width of the divider doesn't exceed the maximum tooltip width\n        return DIVIDER_CHAR.repeat(Math.min(maxLineLength, MAX_DIVIDER_CHARS));\n    }\n\n    get tooltipContent() {\n        // Mutli-line tooltips are expressed as an array. Add dividers and separate into newlines.\n        const content = this.props.content?.map(item => item && item.divider ? this.divider : item).join('\\n');\n        if (!this.props.disable && content) {\n            return content;\n        }\n    }\n\n    render() {\n        // UXP Uses title to set tooltips\n        return <div data-test-id=\"tooltip-wrapper\" className={classNames('tooltip-ref', this.props.className)} title={this.tooltipContent}>{this.props.children}</div>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { observable } from 'mobx';\nimport configuration from 'app/js/config/configuration';\n\n/**\n * Holds the state for the Libraries Search React View. Provides observable\n * properties relevant to Libraries Search and ensures that search requests\n * get kicked off and processed.\n */\nexport default class BaseSearchState {\n\n    @observable\n    _searchTypeOptions = new Map();\n\n    @observable\n    _searchLibrariesOptions = new Map();\n\n    @observable\n    _searchDocumentGroupOptions = new Map();\n\n    @observable\n    _searchDocumentLinkOptions = new Map();\n\n    constructor(viewState) {\n        this.viewState = viewState;\n    }\n\n    _getSearchFilters(optionsMap) {\n        // Filter out 'editorial' starting in 3.19. Stock is sunset-ing the Editorial flag\n        // Users could have previously had that filter applied, so manually remove it out to ensure it's not applied still\n        return Array.from(optionsMap.entries())\n            .filter(([ optionName, value ]) => value && optionName !== 'editorial')\n            .map(([ option ]) => option);\n    }\n\n    get _searchTypeFilters() {\n        return this._getSearchFilters(this._searchTypeOptions);\n    }\n\n    get _searchLibrariesFilters() {\n        return this._getSearchFilters(this._searchLibrariesOptions);\n    }\n\n    get _searchDocumentGroupFilters() {\n        return this._getSearchFilters(this._searchDocumentGroupOptions);\n    }\n\n    get _searchDocumentLinkFilters() {\n        return this._getSearchFilters(this._searchDocumentLinkOptions);\n    }\n\n    get filterCount() {\n        let filterables = [ this._searchTypeFilters, this._searchLibrariesFilters ];\n        if (this.viewState.isDocumentSearchType() || configuration.currentProduct.config.includeGroupFilters) {\n            filterables = filterables.concat([ this._searchDocumentGroupFilters, this._searchDocumentLinkFilters ]);\n        }\n        return filterables.reduce((acc, filter) => acc + filter.length, 0);\n    }\n\n    clearFilters() {\n        this._searchTypeOptions = new Map();\n        this._searchLibrariesOptions = new Map();\n    }\n\n    /**\n     * Determine if a search option is enabled or disabled. Unknown search options\n     * always return false.\n     *\n     * @param {string} option the search option\n     * @returns {boolean} true if search option is enabled, false otherwise\n     */\n    isSearchOptionEnabled(option) {\n        return Boolean(this._searchTypeOptions.get(option)\n            || this._searchLibrariesOptions.get(option)\n            || this._searchDocumentGroupOptions.get(option)\n            || this._searchDocumentLinkOptions.get(option)\n        );\n    }\n}\n\n","import type { ReportDialogOptions, Scope } from '@sentry/browser';\nimport { captureException, getCurrentHub, showReportDialog, withScope } from '@sentry/browser';\nimport { addExceptionMechanism, isError, logger } from '@sentry/utils';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\nimport * as React from 'react';\n\nexport function isAtLeastReact17(version: string): boolean {\n  const major = version.match(/^([^.]+)/);\n  return major !== null && parseInt(major[0]) >= 17;\n}\n\nexport const UNKNOWN_COMPONENT = 'unknown';\n\nexport type FallbackRender = (errorData: {\n  error: Error;\n  componentStack: string;\n  eventId: string;\n  resetError(): void;\n}) => React.ReactElement;\n\nexport type ErrorBoundaryProps = {\n  children?: React.ReactNode | (() => React.ReactNode);\n  /** If a Sentry report dialog should be rendered on error */\n  showDialog?: boolean;\n  /**\n   * Options to be passed into the Sentry report dialog.\n   * No-op if {@link showDialog} is false.\n   */\n  dialogOptions?: ReportDialogOptions;\n  /**\n   * A fallback component that gets rendered when the error boundary encounters an error.\n   *\n   * Can either provide a React Component, or a function that returns React Component as\n   * a valid fallback prop. If a function is provided, the function will be called with\n   * the error, the component stack, and an function that resets the error boundary on error.\n   *\n   */\n  fallback?: React.ReactElement | FallbackRender;\n  /** Called when the error boundary encounters an error */\n  onError?(error: Error, componentStack: string, eventId: string): void;\n  /** Called on componentDidMount() */\n  onMount?(): void;\n  /** Called if resetError() is called from the fallback render props function  */\n  onReset?(error: Error | null, componentStack: string | null, eventId: string | null): void;\n  /** Called on componentWillUnmount() */\n  onUnmount?(error: Error | null, componentStack: string | null, eventId: string | null): void;\n  /** Called before the error is captured by Sentry, allows for you to add tags or context using the scope */\n  beforeCapture?(scope: Scope, error: Error | null, componentStack: string | null): void;\n};\n\ntype ErrorBoundaryState =\n  | {\n      componentStack: null;\n      error: null;\n      eventId: null;\n    }\n  | {\n      componentStack: React.ErrorInfo['componentStack'];\n      error: Error;\n      eventId: string;\n    };\n\nconst INITIAL_STATE = {\n  componentStack: null,\n  error: null,\n  eventId: null,\n};\n\nfunction setCause(error: Error & { cause?: Error }, cause: Error): void {\n  const seenErrors = new WeakMap<Error, boolean>();\n\n  function recurse(error: Error & { cause?: Error }, cause: Error): void {\n    // If we've already seen the error, there is a recursive loop somewhere in the error's\n    // cause chain. Let's just bail out then to prevent a stack overflow.\n    if (seenErrors.has(error)) {\n      return;\n    }\n    if (error.cause) {\n      seenErrors.set(error, true);\n      return recurse(error.cause, cause);\n    }\n    error.cause = cause;\n  }\n\n  recurse(error, cause);\n}\n\n/**\n * A ErrorBoundary component that logs errors to Sentry. Requires React >= 16.\n * NOTE: If you are a Sentry user, and you are seeing this stack frame, it means the\n * Sentry React SDK ErrorBoundary caught an error invoking your application code. This\n * is expected behavior and NOT indicative of a bug with the Sentry React SDK.\n */\nclass ErrorBoundary extends React.Component<ErrorBoundaryProps, ErrorBoundaryState> {\n  public state: ErrorBoundaryState;\n\n  private readonly _openFallbackReportDialog: boolean;\n\n  private _lastEventId?: string;\n\n  public constructor(props: ErrorBoundaryProps) {\n    super(props);\n\n    this.state = INITIAL_STATE;\n    this._openFallbackReportDialog = true;\n\n    const client = getCurrentHub().getClient();\n    if (client && client.on && props.showDialog) {\n      this._openFallbackReportDialog = false;\n      client.on('afterSendEvent', event => {\n        if (!event.type && event.event_id === this._lastEventId) {\n          showReportDialog({ ...props.dialogOptions, eventId: this._lastEventId });\n        }\n      });\n    }\n  }\n\n  public componentDidCatch(error: Error & { cause?: Error }, { componentStack }: React.ErrorInfo): void {\n    const { beforeCapture, onError, showDialog, dialogOptions } = this.props;\n    withScope(scope => {\n      // If on React version >= 17, create stack trace from componentStack param and links\n      // to to the original error using `error.cause` otherwise relies on error param for stacktrace.\n      // Linking errors requires the `LinkedErrors` integration be enabled.\n      // See: https://reactjs.org/blog/2020/08/10/react-v17-rc.html#native-component-stacks\n      //\n      // Although `componentDidCatch` is typed to accept an `Error` object, it can also be invoked\n      // with non-error objects. This is why we need to check if the error is an error-like object.\n      // See: https://github.com/getsentry/sentry-javascript/issues/6167\n      if (isAtLeastReact17(React.version) && isError(error)) {\n        const errorBoundaryError = new Error(error.message);\n        errorBoundaryError.name = `React ErrorBoundary ${error.name}`;\n        errorBoundaryError.stack = componentStack;\n\n        // Using the `LinkedErrors` integration to link the errors together.\n        setCause(error, errorBoundaryError);\n      }\n\n      if (beforeCapture) {\n        beforeCapture(scope, error, componentStack);\n      }\n\n      scope.addEventProcessor(event => {\n        addExceptionMechanism(event, { handled: false })\n        return event;\n      })\n\n      const eventId = captureException(error, { contexts: { react: { componentStack } } });\n\n      if (onError) {\n        onError(error, componentStack, eventId);\n      }\n      if (showDialog) {\n        this._lastEventId = eventId;\n        if (this._openFallbackReportDialog) {\n          showReportDialog({ ...dialogOptions, eventId });\n        }\n      }\n\n      // componentDidCatch is used over getDerivedStateFromError\n      // so that componentStack is accessible through state.\n      this.setState({ error, componentStack, eventId });\n    });\n  }\n\n  public componentDidMount(): void {\n    const { onMount } = this.props;\n    if (onMount) {\n      onMount();\n    }\n  }\n\n  public componentWillUnmount(): void {\n    const { error, componentStack, eventId } = this.state;\n    const { onUnmount } = this.props;\n    if (onUnmount) {\n      onUnmount(error, componentStack, eventId);\n    }\n  }\n\n  public resetErrorBoundary: () => void = () => {\n    const { onReset } = this.props;\n    const { error, componentStack, eventId } = this.state;\n    if (onReset) {\n      onReset(error, componentStack, eventId);\n    }\n    this.setState(INITIAL_STATE);\n  };\n\n  public render(): React.ReactNode {\n    const { fallback, children } = this.props;\n    const state = this.state;\n\n    if (state.error) {\n      let element: React.ReactElement | undefined = undefined;\n      if (typeof fallback === 'function') {\n        element = fallback({\n          error: state.error,\n          componentStack: state.componentStack,\n          resetError: this.resetErrorBoundary,\n          eventId: state.eventId,\n        });\n      } else {\n        element = fallback;\n      }\n\n      if (React.isValidElement(element)) {\n        return element;\n      }\n\n      if (fallback) {\n        __DEBUG_BUILD__ && logger.warn('fallback did not produce a valid ReactElement');\n      }\n\n      // Fail gracefully if no fallback provided or is not valid\n      return null;\n    }\n\n    if (typeof children === 'function') {\n      return (children as () => React.ReactNode)();\n    }\n    return children;\n  }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction withErrorBoundary<P extends Record<string, any>>(\n  WrappedComponent: React.ComponentType<P>,\n  errorBoundaryOptions: ErrorBoundaryProps,\n): React.FC<P> {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  const componentDisplayName = WrappedComponent.displayName || WrappedComponent.name || UNKNOWN_COMPONENT;\n\n  const Wrapped: React.FC<P> = (props: P) => (\n    <ErrorBoundary {...errorBoundaryOptions}>\n      <WrappedComponent {...props} />\n    </ErrorBoundary>\n  );\n\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  Wrapped.displayName = `errorBoundary(${componentDisplayName})`;\n\n  // Copy over static methods from Wrapped component to Profiler HOC\n  // See: https://reactjs.org/docs/higher-order-components.html#static-methods-must-be-copied-over\n  hoistNonReactStatics(Wrapped, WrappedComponent);\n  return Wrapped;\n}\n\nexport { ErrorBoundary, withErrorBoundary };\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\nimport React, { ComponentProps, useEffect, useMemo } from 'react'; // eslint-disable-line @typescript-eslint/consistent-type-imports\nimport type { Theme as ThemeType } from '@ccx-public/spectrum-web-component-fallbacks/dist/theme';\nimport createWrapper from './utils/createWrapper';\nimport { SWCLoader } from './utils/SWCLoader';\nimport type { SpectrumElementProps } from './utils';\nimport {\n    configureTypekit,\n    doesSWCNeedLoaded,\n    loadSwcIfNeeded,\n    useComponent,\n} from './utils';\nimport interopRequireDefault from './utils/interopRequireDefault';\nimport { getProviderConfig, ThemeContext } from './utils/ThemeContext';\nimport { _register } from './preload';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Provider: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Provider')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nconst TAG_NAME = 'sp-theme';\nlet swcLoader: SWCLoader | undefined;\nif (!process.env.EXCLUDE_SWC) {\n    swcLoader = new SWCLoader([TAG_NAME], async () => {\n        const { Theme } = await import(\n            /* webpackChunkName: \"SpTheme\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/theme'\n        );\n        return [Theme];\n    });\n}\n\nlet darkSpectrumThemeLoader = () => Promise.resolve() as Promise<unknown>;\nlet darkestSpectrumThemeLoader = () => Promise.resolve() as Promise<unknown>;\nlet lightSpectrumThemeLoader = () => Promise.resolve() as Promise<unknown>;\nlet lightestSpectrumThemeLoader = () => Promise.resolve() as Promise<unknown>;\nlet darkExpressThemeLoader = () => Promise.resolve() as Promise<unknown>;\nlet darkestExpressThemeLoader = () => Promise.resolve() as Promise<unknown>;\nlet lightExpressThemeLoader = () => Promise.resolve() as Promise<unknown>;\nlet lightestExpressThemeLoader = () => Promise.resolve() as Promise<unknown>;\nlet largeSpectrumScaleLoader = () => Promise.resolve() as Promise<unknown>;\nlet mediumSpectrumScaleLoader = () => Promise.resolve() as Promise<unknown>;\nlet largeExpressScaleLoader = () => Promise.resolve() as Promise<unknown>;\nlet mediumExpressScaleLoader = () => Promise.resolve() as Promise<unknown>;\n\n// Theme loaders\nif (!process.env.EXCLUDE_SWC) {\n    darkSpectrumThemeLoader = async () => {\n        return await import(\n            /* webpackChunkName: \"SWCDarkTheme\" */ '@ccx-public/spectrum-web-component-fallbacks/dist/theme/theme-dark.js'\n        );\n    };\n    darkestSpectrumThemeLoader = async () => {\n        return await import(\n            /* webpackChunkName: \"SWCDarkestTheme\" */ '@ccx-public/spectrum-web-component-fallbacks/dist/theme/theme-darkest.js'\n        );\n    };\n    lightSpectrumThemeLoader = async () => {\n        return await import(\n            /* webpackChunkName: \"SWCLightTheme\" */ '@ccx-public/spectrum-web-component-fallbacks/dist/theme/theme-light.js'\n        );\n    };\n    lightestSpectrumThemeLoader = async () => {\n        return await import(\n            /* webpackChunkName: \"SWCLightestTheme\" */ '@ccx-public/spectrum-web-component-fallbacks/dist/theme/theme-lightest.js'\n        );\n    };\n    darkExpressThemeLoader = async () => {\n        return await import(\n            /* webpackChunkName: \"SWCExpressDarkTheme\" */ '@ccx-public/spectrum-web-component-fallbacks/dist/theme/express/theme-dark.js'\n        );\n    };\n    darkestExpressThemeLoader = async () => {\n        return await import(\n            /* webpackChunkName: \"SWCExpressDarkestTheme\" */ '@ccx-public/spectrum-web-component-fallbacks/dist/theme/express/theme-darkest.js'\n        );\n    };\n    lightExpressThemeLoader = async () => {\n        return await import(\n            /* webpackChunkName: \"SWCExpressLightTheme\" */ '@ccx-public/spectrum-web-component-fallbacks/dist/theme/express/theme-light.js'\n        );\n    };\n    lightestExpressThemeLoader = async () => {\n        return await import(\n            /* webpackChunkName: \"SWCExpressLightestTheme\" */ '@ccx-public/spectrum-web-component-fallbacks/dist/theme/express/theme-lightest.js'\n        );\n    };\n\n    // Scale Loaders\n    largeSpectrumScaleLoader = async () => {\n        return await import(\n            /* webpackChunkName: \"SWCLargeScale\" */ '@ccx-public/spectrum-web-component-fallbacks/dist/theme/scale-large.js'\n        );\n    };\n    mediumSpectrumScaleLoader = async () => {\n        return await import(\n            /* webpackChunkName: \"SWCMediumScale\" */ '@ccx-public/spectrum-web-component-fallbacks/dist/theme/scale-medium.js'\n        );\n    };\n    largeExpressScaleLoader = async () => {\n        return await import(\n            /* webpackChunkName: \"SWCExpressLargeScale\" */ '@ccx-public/spectrum-web-component-fallbacks/dist/theme/express/scale-large.js'\n        );\n    };\n    mediumExpressScaleLoader = async () => {\n        return await import(\n            /* webpackChunkName: \"SWCExpressMediumScale\" */ '@ccx-public/spectrum-web-component-fallbacks/dist/theme/express/scale-medium.js'\n        );\n    };\n}\n\nasync function loadScale(\n    options: Pick<SpectrumElementProps<ThemeType>, 'scale' | 'system'>\n): Promise<unknown> {\n    if (options.scale === 'large') {\n        if (options.system === 'express') {\n            return largeExpressScaleLoader();\n        } else {\n            return largeSpectrumScaleLoader();\n        }\n    } else {\n        if (options.system === 'express') {\n            return mediumExpressScaleLoader();\n        } else {\n            return mediumSpectrumScaleLoader();\n        }\n    }\n}\n\nasync function loadColor(\n    options: Pick<SpectrumElementProps<ThemeType>, 'color' | 'system'>\n): Promise<unknown> {\n    switch (options.color) {\n        case 'dark':\n            if (options.system === 'express') {\n                return darkExpressThemeLoader();\n            } else {\n                return darkSpectrumThemeLoader();\n            }\n        case 'darkest':\n            if (options.system === 'express') {\n                return darkestExpressThemeLoader();\n            } else {\n                return darkestSpectrumThemeLoader();\n            }\n        case 'light':\n            if (options.system === 'express') {\n                return lightExpressThemeLoader();\n            } else {\n                return lightSpectrumThemeLoader();\n            }\n        case 'lightest':\n        default:\n            if (options.system === 'express') {\n                return lightestExpressThemeLoader();\n            } else {\n                return lightestSpectrumThemeLoader();\n            }\n    }\n}\n\ntype Overrides = {\n    locale?: ThemeType['lang'];\n    scale?: ThemeType['scale'];\n    spectrumTheme?: ThemeType['system'];\n    theme?: ThemeType['color'];\n    // RS2-only props\n    typekitId?: string;\n    // UXP-RS2-only props\n    disableNativeControls?: boolean;\n    useHostThemes?: boolean;\n};\n\n_register(function (config) {\n    const { scale, spectrumTheme, theme, typekitId } = config;\n    const promises = [\n        loadScale({ scale, system: spectrumTheme }),\n        loadColor({ color: theme, system: spectrumTheme }),\n        configureTypekit(typekitId),\n    ];\n\n    if (doesSWCNeedLoaded(TAG_NAME)) {\n        promises.push(loadSwcIfNeeded(TAG_NAME, config, swcLoader));\n    }\n\n    return Promise.all(promises);\n});\n\nconst Provider = createWrapper<ThemeType, Overrides>({\n    displayName: 'Provider',\n    fallback: RS2Provider,\n    swcLoader,\n    SWCWrapper: function SpProvider(props) {\n        const {\n            className,\n            locale,\n            scale,\n            spectrumTheme,\n            theme,\n            typekitId = 'ruf7eed',\n            ...rest\n        } = props;\n\n        useEffect(() => {\n            loadScale({ scale, system: spectrumTheme }).catch(console.error);\n        }, [scale, spectrumTheme]);\n\n        useEffect(() => {\n            loadColor({ color: theme, system: spectrumTheme }).catch(\n                console.error\n            );\n        }, [spectrumTheme, theme]);\n\n        useEffect(() => {\n            configureTypekit(typekitId).catch(console.error);\n        }, [typekitId]);\n\n        const Provider = useComponent(TAG_NAME);\n\n        return (\n            <Provider\n                {...rest}\n                class={className}\n                color={theme}\n                lang={locale}\n                scale={scale}\n                system={spectrumTheme}\n            />\n        );\n    },\n    tagName: TAG_NAME,\n});\n\nexport default function ProviderWrapper(\n    props: ComponentProps<typeof Provider>\n) {\n    const { scale, spectrumTheme, theme, typekitId } = props;\n\n    const config = useMemo(\n        () => getProviderConfig({ scale, spectrumTheme, theme, typekitId }),\n        [scale, spectrumTheme, theme, typekitId]\n    );\n\n    return (\n        <ThemeContext.Provider value={config}>\n            <Provider {...props} />\n        </ThemeContext.Provider>\n    );\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { ErrorBoundary } from '@sentry/react';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport themeManager from 'app/js/managers/themeManager';\nimport CoreSpectrumProvider from '@ccx-public/spectrum-wrapper/Provider';\nimport { observer } from 'mobx-react';\n\n// Use LibrariesContext to expose values, objects or functions that should be available throughout the entire render tree of a Libraries UI.\n// We should always provide a default value for the context to make testing easier, as it allows rendering context consumers without having to wrap them with a context provider.\n// Read more here: https://reactjs.org/docs/context.html#reactcreatecontext\n// The default value should ideally be appState.panel but we would run into circular dependencies if we tried importing that here\n// (AppState > LibraryManager > ... > SomeReactComponent > LibrariesContext)\n// As a workaround to keep tests simple, we manually assign appState.panel as the default value in jestSetupFiles/defineGlobals.js which runs before each test.\nexport const LibrariesContext = React.createContext({});\n\n@observer\nexport class LibrariesProvider extends React.Component {\n\n    static propTypes = {\n        children: PropTypes.node,\n        value: PropTypes.object,\n        style: PropTypes.object\n    };\n\n    render() {\n        return (\n            <ErrorBoundary>\n                <LibrariesContext.Provider value={ this.props.value }>\n                    <CoreSpectrumProvider\n                        data-test-id=\"react-spectrum-provider\"\n                        boundariesElement=\"container\"\n                        theme={ themeManager.reactSpectrumTheme }\n                        spectrumTheme={themeManager.themeSystem}\n                        scale=\"medium\"\n                        style={ this.props.style }\n                    >\n                        {this.props.children}\n                    </CoreSpectrumProvider>\n                </LibrariesContext.Provider>\n            </ErrorBoundary>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\nimport { observable } from 'mobx';\nimport PropTypes from 'prop-types';\nimport { translate } from 'app/js/managers/translationManager';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport { Library } from '@cclibraries/cc-libraries-js';\nimport Button from '@torq-native/react-spectrum/Button';\nimport Icon from 'app/js/components/Icon';\nimport { addElementsFromFileDialog } from 'app/js/utils/addElementUtils';\nimport viewState from 'app/js/state/viewState';\nimport dragManager from 'app/js/managers/dragManager';\nimport ElementDropTarget from 'app/js/managers/dragDrop/elementDropTarget';\nimport CreateGroupButton from 'app/js/components/panel-footer/CreateGroupButton';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport { debounce } from 'app/js/utils/promiseUtils';\nimport configuration from 'app/js/config/configuration';\nimport { editInSource } from 'app/js/utils/editOriginalUtils';\n\nconst EMPTY_ILLUSTRATION_CARD_WIDTH = 192;\n\n@observer\nexport default class CCDEmptyLibraryView extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static defaultProps = {\n        library: null\n    };\n\n    static propTypes = {\n        library: PropTypes.instanceOf(Library)\n    };\n\n    @observable _contentWidth = 0;\n\n    componentDidMount() {\n        const Observer = window.ResizeObserver;\n        this.resizeObserver = new Observer(() => this.handleResize());\n        this.contentRef && this.resizeObserver.observe(this.contentRef);\n        this._contentWidth = this.contentRef ? this.contentRef.clientWidth : 0;\n    }\n\n    componentWillUnmount() {\n        this.resizeObserver.disconnect();\n    }\n\n    handleResize = debounce(configuration.WINDOW_RESIZE_DEBOUNCE, () => {\n        this._contentWidth = this.contentRef ? this.contentRef.clientWidth : 0;\n        return Promise.resolve();\n    });\n\n    get contentWidth() {\n        return this._contentWidth;\n    }\n\n    openAddElementsDialog = () => {\n        addElementsFromFileDialog(this.props.library || libraryManager.currentLibrary, 'Empty State');\n    }\n\n    get addElementsButton() {\n        return <Button disabled={ viewState.isLocked(this.props.library) } data-test-id=\"primary-action-empty-button\" className=\"primary-action-empty-button\" onClick={ this.openAddElementsDialog } tabIndex=\"0\">\n            <span className=\"primary-action-empty-button-label\">{ translate('DL_EMPTY_LIB_ACCC_PRIMARY_ACTION') }</span>\n        </Button>;\n    }\n\n    get emptyLibCards() {\n        const numCardsFit = Math.floor(this.contentWidth / EMPTY_ILLUSTRATION_CARD_WIDTH);\n        const cards = [\n            {\n                img: 'EmptyLibrary2',\n                instruction: 'DL_EMPTY_LIB_PANEL_INSTRUCTION_ACCC_2',\n                testID: 'instruction2',\n                button: this.addElementsButton\n            },\n            {\n                img: 'EmptyLibrary1',\n                instruction: 'DL_EMPTY_LIB_PANEL_INSTRUCTION_ACCC_1',\n                testID: 'instruction1',\n                button: this.addGroupButton,\n                isHidden: numCardsFit < 2\n            },\n            {\n                img: 'EmptyLibrary3',\n                testID: 'instruction3',\n                instruction: 'DL_EMPTY_LIB_PANEL_INSTRUCTION_ACCC_3',\n                isHidden: numCardsFit < 3\n            }\n        ];\n        return cards.filter(card => !card.isHidden);\n    }\n\n    get addOpenFileButton() {\n        return <Button className=\"empty-state-open-file-button\"\n            label={translate('DL_EMPTY_LIB_LINKED_LIBRARY')}\n            onClick={ () => editInSource(this.props.library) }\n            variant=\"cta\"\n            icon={<Icon width={14} height={14} id=\"Link\" label={translate('DL_EMPTY_LIB_LINKED_LIBRARY')} className=\"empty-state-button-icon\" />}\n        />;\n    }\n    get emptyStateContents() {\n        const emptyStateLibrariesContent = {\n            'linked-library-read':{\n                icon: 'LinkedDocumentLibrary_CanView',\n                title: 'DL_EMPTY_LIB_LINKED_LIBRARY_READ_ONLY_TITLE',\n                text: 'DL_EMPTY_LIB_LINKED_LIBRARY_READ_ONLY_TEXT',\n                type: 'linked-library'\n            },\n            'linked-library-edit':{\n                icon: 'LinkedDocumentLibrary_CanEdit',\n                title: 'DL_EMPTY_LIB_LINKED_LIBRARY_WRITE_TITLE',\n                text: 'DL_EMPTY_LIB_LINKED_LIBRARY_WRITE_TEXT',\n                type: 'linked-library',\n                button: this.addOpenFileButton\n            },\n            'library-read':{\n                icon: 'TraditionalLibrary_CanView',\n                title: 'DL_EMPTY_LIB_TRADITIONAL_LIBRARY_READ_ONLY_TITLE',\n                text: 'DL_EMPTY_LIB_TRADITIONAL_LIBRARY_READ_ONLY_TEXT',\n                type: 'traditional-library'\n            }\n        };\n        return emptyStateLibrariesContent;\n    }\n\n    libraryContent = (libraryKey) => {\n        const emptyStateLibrariesContent = this.emptyStateContents;\n        const libraryDetail = emptyStateLibrariesContent[libraryKey];\n        return (\n            <div data-test-id={`empty-state-${libraryKey}`}>\n                <div className=\"panel-empty-icon\" data-test-id={`empty-state-${libraryKey}-icon`}>\n                    <Icon height={ 150 } id={libraryDetail.icon} />\n                </div>\n                <div className=\"panel-empty-title\" data-test-id={`empty-state-${libraryKey}-title`}>\n                    {translate(libraryDetail.title)}\n                </div>\n                <div className=\"panel-empty-text\" data-test-id={`empty-state-${libraryKey}-text`}>\n                    {translate(libraryDetail.text)}\n                </div>\n                { libraryDetail.button }\n            </div>\n        );\n    }\n\n    get editStateTraditionalLibrary() {\n        return (\n            this.emptyLibCards.map(card => (\n                <div key={`empty-card-${card.testID}`} data-test-id={`panel-empty-${card.testID}`} className=\"panel-empty-card\">\n                    <div className=\"panel-empty-card-image\">\n                        <Icon height={ 136 } width={136} id={card.img} />\n                    </div>\n                    <div className=\"panel-empty-card-instruction\" data-test-id={card.testID}>\n                        { translate(card.instruction) }\n                    </div>\n                    { card.button }\n                </div>\n            ))\n        );\n    }\n\n    get header() {\n        return <h1 className=\"panel-empty-heading-label\" data-test-id=\"header\">\n            { translate('DL_EMPTY_LIB_ACCC_TITLE') }\n        </h1>;\n    }\n\n    get addGroupButton() {\n        return <CreateGroupButton showLabel={true} />;\n    }\n\n    get writableContent() {\n        if (!this.props.library || this.props.library.isDeletedFromServer) {\n            return;\n        }\n\n        const isLinkedLibrary = this.props.library.documentType;\n\n        return <React.Fragment>\n            { !isLinkedLibrary && this.header }\n            { !isLinkedLibrary\n                && <div className=\"panel-empty-cards\" data-test-id=\"writable-cards\">\n                    { this.editStateTraditionalLibrary }\n                </div>\n            }\n            { isLinkedLibrary && this.libraryContent('linked-library-edit') }\n        </React.Fragment>;\n    }\n\n    get readOnlyContent() {\n        const libraryKey = this.props.library.documentType ? 'linked-library-read' : 'library-read';\n        return <React.Fragment>\n            {this.libraryContent(libraryKey)}\n        </React.Fragment>;\n    }\n\n    handleDrop = (dropEvent) => {\n        // if user has view permission then, drop not allowed\n        if (!this.props.library.isWritable) {\n            return;\n        }\n        dragManager.handleDrop(dropEvent);\n    }\n\n    _dropTarget = new ElementDropTarget({});\n    handleDragOver = () => {\n        // if user has view permission then, drag not allowed\n        if (!this.props.library.isWritable) {\n            return;\n        }\n        dragManager.setActiveDropTarget(this._dropTarget);\n    }\n\n    setContentRef = ref => {\n        this.contentRef = ref;\n    }\n\n    render() {\n        return <div className=\"panel-empty-container\" data-test-id=\"emptyLibraryView-ccd\" id=\"emptyPanelContainer\" onDrop={ this.handleDrop } onDragOver={ this.handleDragOver } ref={ this.setContentRef }>\n            <div className=\"panel-empty-inner-container\" data-test-id=\"content\">\n                { this.props.library && this.props.library.isWritable ? this.writableContent : this.readOnlyContent }\n            </div>\n        </div>;\n    }\n}\n","import configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport viewState from 'app/js/state/viewState';\n\nconst defaultSizes = {\n    [configuration.GRID_TYPE_SMALL]: {\n        MIN_WIDTH: 88,\n        HORIZONTAL_SPACING: 12,\n        VERTICAL_SPACING: 12,\n        MIN_NUM_COLUMNS: 1,\n        HEIGHT_OFFSET: 0,\n    },\n    [configuration.GRID_TYPE_MEDIUM]: {\n        MIN_WIDTH: 112,\n        HORIZONTAL_SPACING: 16,\n        VERTICAL_SPACING: 35,\n        MIN_NUM_COLUMNS: 1,\n        HEIGHT_OFFSET: 29,\n    },\n    [configuration.GRID_TYPE_LARGE]: {\n        MIN_WIDTH: 168,\n        HORIZONTAL_SPACING: 16,\n        VERTICAL_SPACING: 41,\n        MIN_NUM_COLUMNS: 1,\n        HEIGHT_OFFSET: 47,\n    }\n};\n\nexport default class ExpandedGrid {\n    constructor(sizeOverrides, mobileSizeOverrides = {}) {\n        // Combine all default sizes with any overrides provided\n        this.sizes = {};\n        this.mobileSizes = {};\n\n        for (const size in defaultSizes) {\n            const sizeOverride = sizeOverrides?.[size] || {};\n            const mobileSizeOverride = mobileSizeOverrides?.[size] || {};\n\n            this.sizes[size] = { ...defaultSizes[size], ...sizeOverride };\n            this.mobileSizes[size] = { ...this.sizes[size], ...mobileSizeOverride };\n        }\n    }\n\n    _getCurrentSizes() {\n        return environment.isMobileView ? this.mobileSizes : this.sizes;\n    }\n\n    getDynamicLayoutMinimumBreakpoint() {\n        return this.getDynamicLayoutBreakpointWidth();\n    }\n\n    getDynamicLayoutBreakpointWidth() {\n        // the breakpoint width is the minimum width of element + the horizontal padding for the current gridZoomFactor\n        const sizes = this._getCurrentSizes();\n        const size = sizes[viewState.gridZoomFactor] || sizes[configuration.GRID_TYPE_LARGE];\n        return size.MIN_WIDTH + size.HORIZONTAL_SPACING;\n    }\n\n    getDynamicLayoutRules() {\n        const {\n            [configuration.GRID_TYPE_LARGE]: LARGE_SIZES,\n            [configuration.GRID_TYPE_MEDIUM]: MEDIUM_SIZES,\n            [configuration.GRID_TYPE_SMALL]: SMALL_SIZES\n        } = this._getCurrentSizes();\n        return {\n            [configuration.GRID_TYPE_LARGE]: this._getDynamicLayoutRule(LARGE_SIZES),\n            [configuration.GRID_TYPE_MEDIUM]: this._getDynamicLayoutRule(MEDIUM_SIZES),\n            [configuration.GRID_TYPE_SMALL]: this._getDynamicLayoutRule(SMALL_SIZES),\n        };\n    }\n\n    _getDynamicLayoutRule(size) {\n        return (\n            {\n                getHeight: width => width + size.HEIGHT_OFFSET,\n                getColumns: stepsAway => size.MIN_NUM_COLUMNS + stepsAway,\n                verticalSpacing: size.VERTICAL_SPACING,\n                horizontalSpacing: size.HORIZONTAL_SPACING\n            }\n        );\n    }\n}\n\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport DefaultConfigs from 'app/js/config/elements/DefaultConfigs';\nimport CCDEmptyLibraryView from 'app/js/components/ccd/CCDEmptyLibraryView';\nimport { openPathViewHelpURL } from 'app/js/utils/linkUtils';\nimport appState from 'app/js/appState';\nimport HTMLText from 'app/js/components/HTMLText';\nimport { translate } from 'app/js/managers/translationManager';\nimport environment from 'app/js/environment';\nimport ExpandedGrid from 'app/js/utils/expandedGridUtils';\n\nexport function getAppConfiguration() {\n    this.config = {};\n    this.config.code = 'ACCC';\n    this.config.fullName = 'Creative Cloud Desktop';\n    this.config.translationSuffix = 'ACCC';\n    this.config.ghostLoading = true;\n    this.config.lastSectionFullHeight = true;\n    this.config.disabledCollapseSectionIds = [ 'type', 'group' ];\n    this.config.enableUnusableElements = true;\n    this.config.groupScrollAlignment = 'start';\n    this.config.windowGutterPaddingWidth = 48;\n    this.config.headerHeight = () => 36; // Should match _ccd.scss $header-height\n    this.config.headerMargin = 16;\n    this.config.disableGroupMargin = true;\n    this.config.gridLeftPadding = 16; // Should match _ccd.scss $container-spacing / 2\n    this.config.mediumIconHeight = 12;\n    this.config.smallIconHeight = 12;\n    this.config.extraSmallIconHeight = 8;\n    this.config.emptyGroupHeight = 72;\n    this.config.paddingBetweenGroups = 36;\n    this.config.disableGroupSeparator = true;\n    this.config.emptyGroupBottomPadding = 40;\n    this.config.sectionNavIndent = 8;\n    this.config.emptyUngroupedCustomMessage = 'DL_EMPTY_UNGROUP_INSTRUCTIONS';\n    this.config.viewBySelectCustomOptionGroup = 'DL_VIEW_BY_GROUP_SHORT';\n    this.config.viewBySelectCustomOptionType = 'DL_VIEW_BY_TYPE_SHORT';\n    this.config.customPanelTitle = 'DL_LIBRARIES_PANEL_NAME_YOUR_LIBRARIES';\n    this.config.invalidGroupNameSlashMessage = 'DL_GROUP_NAME_INVALID_SLASHES_ACCC';\n    this.config.emptyLibraryCustomComponent = CCDEmptyLibraryView;\n    this.config.enableUngroupedDropOverlay = true;\n    this.config.customDragCardHeight = 96;\n    this.config.customDragCardWidth = 96;\n    this.config.spectrumFailedThumbnail = true;\n    this.config.uniformElementSize = true;\n    this.config.disablePaddingWithinGridGroup = true;\n    this.config.evenlySpacedSubgroups = true;\n    this.config.disableGroupViewRename = true;\n    this.config.disableGroupViewDragging = true;\n    this.config.disableGroupViewHeaderClick = true;\n    this.config.disableFindSimilar = true;\n    this.config.disableDefaultEditError = true;\n    this.config.disableOneUpMode = true;\n    this.config.enableUppercaseGridDetails = true;\n    this.config.enableReplaceGraphic = true;\n    this.config.maintainCurrentSectionOnResize = true;\n    this.config.useTextStyleThumbnails = true; // Forces CCD to use the thumbnails rather than live rendering Fonts/Text - should remove and do this properly\n    this.config.disableContentViewTooltips = true; // Removes any extra tooltips used in the content view of CCD -- this was done using CSS before, but we have a tooltip in SectionNavigationGroupItem that we need to show now.\n    this.config.hideExtraBottomSpace = true;\n    this.config.hideFirstSectionHeader = true; // In CCD, because we always have a sticky header, we want to hide the first header so it doesn't appear in duplicate.\n\n    this.config.disableRestorePreviousCurrentLibrary = true; // Prevents us from redirecting to the libraries tab upon opening CCD\n\n    this.config.defaultViewByState = 'group';\n    this.config.defaultViewByGroupMode = 'path';\n\n    this.config.teamOnboardingRightSpacing = 100;\n    this.config.teamOnboardingTopSpacing = 90;\n    this.config.showCCDTeamsOnboarding = true;\n    this.config.disableCCDTeamsOneUpOnboarding = true;\n\n    this.config.noFlyoutMenu = true;\n    this.config.showOpenInAppMenu = true;\n    // Nested Groups overrides\n    this.config.disableGroupContextMenuInView = true;\n    this.config.disableNestedGroupIndent = true;\n    this.config.disableEditPathOperation = true;\n    this.config.disableDeleteEmptyAncestors = true;\n    this.config.editWidthSubtraction = 64; // = derived from 32px padding on right and left side\n\n    this.config.mosaicCardVariant = 'quiet';\n\n    this.config.mosaicCellPaddingBottom = 48;\n\n    // config.themes is a map from the background HEX value of the theme, to the name of the theme (CSS file) to load\n    // You can either make a fixed map that contains all the brightness value (e.g. see Photoshop: app/applications/PHXS/js/index.js),\n    // or you can programmatically set this, if you have a lot of values (e.g. see InDesign: app/applications/IDSN/js/index.js).\n    // We suggest you copy one of the existing apps that best matches the style of your app, as a starting point\n    this.config.themes = {\n        'ffffff': 'light',\n        '111111': 'darker'\n    };\n\n    this.config.translationOverrides = {\n        'DL_NO_LIBS_SYNCING': 'DL_LOADING_LIBRARIES',\n    };\n\n    // In the global CSS, certain app styles are bound to the classname 'spectrum-enabled'.\n    this.config.legacySpectrumEnabled = true;\n\n    this.config.defaultTheme = 'light';\n\n    this.config.elementTypes = [\n        DefaultConfigs.ColorElementConfig,\n        DefaultConfigs.ColorThemeElementConfig,\n        DefaultConfigs.ImageElementConfig,\n        DefaultConfigs.TextStyleElementConfig,\n        DefaultConfigs.FontElementConfig,\n        DefaultConfigs.ParagraphStyleElementConfig,\n        DefaultConfigs.TextElementConfig,\n        DefaultConfigs.LayerStyleElementConfig,\n        DefaultConfigs.BrushElementConfig,\n        DefaultConfigs.VideoElementConfig,\n        DefaultConfigs.LookElementConfig,\n        DefaultConfigs.CapsuleElementConfig,\n        DefaultConfigs.PatternElementConfig,\n        DefaultConfigs.TemplateElementConfig,\n        DefaultConfigs.AnimationElementConfig,\n        DefaultConfigs.ThreeDElementConfig,\n        DefaultConfigs.MaterialElementConfig,\n        DefaultConfigs.LightElementConfig,\n        DefaultConfigs.GradientElementConfig,\n        DefaultConfigs.ComponentElementConfig,\n        DefaultConfigs.AudioElementConfig,\n        DefaultConfigs.ChannelElementConfig,\n        DefaultConfigs.ImageGuidelineElementConfig,\n        DefaultConfigs.UnsupportedElementConfig\n    ];\n\n    this.init = () => Promise.resolve();\n\n    this._dynamicGrid = new ExpandedGrid();\n\n    this.config.getDynamicLayoutBreakpointWidth = () => {\n        return this._dynamicGrid.getDynamicLayoutBreakpointWidth();\n    };\n\n    this.config.getDynamicLayoutMinimumBreakpoint = () => {\n        return this._dynamicGrid.getDynamicLayoutMinimumBreakpoint();\n    };\n\n    this.config.getDynamicLayoutRules = () => {\n        return this._dynamicGrid.getDynamicLayoutRules();\n    };\n\n    this.config.handleViewPathView = function() {\n        openPathViewHelpURL();\n    };\n\n    this._handleToastClick = () => {\n        // trigger a popover over the 'View by Type'/'View by Group' dropdown\n        // Since this popover changes location, rather than setting the position, we use CCD's api to trigger an onboarding-style popup\n        const onboardingStore = environment.ccdAPI.ccdContext.get('onboardingTourStore');\n        // Right now, the onboarding can only display once per CCD session, so we get around that by adding a random number to tourId\n        // Which will enable the onboarding to display multiple times\n        const random = Math.floor(Math.random() * 1000);\n        const tour = {\n            componentId: '/assets/libraries', // route,\n            tourId: 'ccd.libraries.nestedGroups' + random,\n            version: 1,\n            viewType: 'Main',\n            disableProgress: true,\n            onTourEnd: () => {},\n            tourContent: [ {\n                id: 'ccd.libraries.nestedGroups',\n                stepNumber: 10,\n                type: 'coachMark',\n                title: translate('DL_VIEW_BY_GROUP_POPOVER_TITLE'),\n                target: '.view-type-dropdown',\n                domTarget: 'library-contents-view',\n                description: translate('DL_VIEW_BY_GROUP_POPOVER_BODY'),\n                confirmLabel: translate('DL_OK'),\n                cancelLabel: translate('DL_CANCEL'),\n                mandatory: false,\n                placement: 'bottom left',\n                confirmAnalyticsId: 'tour',\n                cancelAnalyticsId: 'skip',\n            } ]\n        };\n        onboardingStore.register(tour);\n    };\n\n    this.config.showCustomGroupViewPopover = () => {\n        const message = <HTMLText className=\"panel-toast-group-sort\" html={translate('DL_VIEW_BY_GROUP_POPOVER_BODY_LINK')} onClick={this._handleToastClick} />;\n        appState.panel.toastManager.openToast('message', { variant: 'info', message });\n    };\n\n    this.config.setElementDragData = (event, elements) => {\n        // This payload is intended for moving elements between groups, and copying elements between libraries\n        event.dataTransfer.effectAllowed = 'copyMove';\n        event.dataTransfer.setData(environment.ElementDragId, JSON.stringify({\n            libraryId: elements[0].library.id,\n            elementIds: elements.map(element => element.id)\n        }));\n    };\n\n    // TODO: Refactor the above to return an object, rather than using this\n    return this;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport ColorElementConfig from 'app/js/config/elements/ColorElementConfig';\n\nexport default class AEFTColorElementConfig extends ColorElementConfig {\n\n    // The colorData parameter supports using this apply function by color themes\n    _setColor(element, colorData, after) {\n\n        if (!colorData) {\n            colorData = [];\n            // JSX expects primary representation to be the first element in the array\n            element.representations.forEach(rep => {\n                const data = rep.getValue(configuration.COLOR_NAMESPACE, configuration.COLOR_DATA_KEY);\n                const relationship = rep.getValue('library', 'rel');\n                if (relationship === 'primary') {\n                    colorData.unshift(data);\n                } else {\n                    colorData.push(data);\n                }\n            });\n\n            if (element.representations.length > 0) {\n                reportApplyMetric(element.representations[0], 'setColor');\n            }\n        }\n\n        if (after) {\n            after('setColor');\n        }\n\n        return environment.execApp('setColor', [ colorData ]);\n    }\n\n    getApplyOperations(element) {\n\n        // If we have no document there is no way to use a color\n        const layerInfo = layerSelectionManager.getLayerInfo();\n        if (!layerInfo || (layerInfo && !layerInfo.selectionExists)) {\n            return [];\n        }\n\n        return [ {\n            name: 'DL_SET_COLOR_TOOLTIP',\n            icon: 'paintbucket',\n            isDraggable: false,\n            apply: (colorData, after) => this._setColor(element, colorData, after),\n            displayInMenu: true,\n            onClick: true\n        } ];\n    }\n}\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2018 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport environment from 'app/js/environment';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport imsInterface from 'app/js/interface/imsInterface';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\n\n/**\n    Common utilities for After Effects\n**/\n\nfunction format(str, ...args) {\n    return str.replace(/\\{(\\d+)\\}/gm, (_, submatch) => args[submatch]);\n}\n\nexport function aeLog(...args) {\n    const formattedString = format(...args);\n    return environment.execApp('log', [ formattedString, 'cc-libraries-panel' ]);\n}\n\nexport function addOrUpdateElementInProject(element, addingElement = false) {\n\n    aeLog('addOrUpdateElementInProject(element:{0}({1}), addingElement:{2})',\n        element.name,\n        element.id,\n        addingElement);\n\n    const updateAssetReq = {\n        name: element.name,\n        id: element.id,\n        libraryName: element.library.name,\n        reference: element.getLegacyReference(),\n        modified: element.modified,\n        created: element.created,\n        adobeStockId: AdobeStockUtils.getStockId(element)\n    };\n    updateAssetReq.licensed = (updateAssetReq.adobeStockId ? AdobeStockUtils.isLicensed(element) : null);\n\n    const assetRep = elementConfiguration.findUsableRepresentation(element, FileUtils.getUsableTypes(element.type));\n    if (assetRep) {\n        const eventName = addingElement ? 'com.adobe.DesignLibraries.events.CreateLibrariesFootage'\n            : 'com.adobe.DesignLibraries.events.UpdateLibrariesFootage';\n\n        updateAssetReq.width = assetRep.width;\n        updateAssetReq.height = assetRep.height;\n        updateAssetReq.contentLength = assetRep.contentLength;\n        updateAssetReq.contentType = assetRep.type;\n        const extensions = FileUtils.mimeTypeToExtensions(assetRep.type);\n        updateAssetReq.extension = extensions[0];\n\n        const videoData = assetRep.getValue('video', 'data');\n        if (videoData) {\n            updateAssetReq.framerate = videoData.framerate && Number(videoData.framerate);\n            updateAssetReq.duration = Math.floor(videoData.duration);\n        } else {\n            updateAssetReq.framerate = 1;\n            updateAssetReq.duration = 1;\n        }\n\n        if (addingElement) {\n            reportApplyMetric(assetRep, 'placeAsset');\n        }\n\n        if (AdobeStockUtils.isStockAsset(element)) {\n            updateAssetReq.url = assetRep.getContentURL();\n            updateAssetReq.trackingdata = assetRep.getValue('adobestock', 'trackingdata');\n\n            const userId = libraryManager.userId ?? '';\n\n            // NOTE: AEFT needs the IMS token for stock images in order to download the content from stock\n            aeLog('Retrieving IMS access token.');\n            return imsInterface.getAccessToken(userId).then(function(accessToken) {\n                aeLog('IMS access token: {0}', accessToken);\n\n                updateAssetReq.imsToken = accessToken;\n                const event = environment.createEvent(eventName, 'APPLICATION');\n                event.data = JSON.stringify(updateAssetReq);\n                aeLog('Dispatching event to application: {0}: {1}', event.name, event.data);\n                environment.dispatchEvent(event);\n\n            }).catch(function(err) {\n                aeLog('WARNING: Failed to get IMS access token: {0}', JSON.stringify(err));\n\n                const event = environment.createEvent(eventName, 'APPLICATION');\n                event.data = JSON.stringify(updateAssetReq);\n                aeLog('Dispatching event to application: {0}: {1}', event.name, event.data);\n                environment.dispatchEvent(event);\n            });\n        }\n\n        assetRep.getContentPath().then(filePath => {\n            updateAssetReq.assetPath = filePath;\n            const event = environment.createEvent(eventName, 'APPLICATION');\n            event.data = JSON.stringify(updateAssetReq);\n            aeLog('Dispatching event to application: {0}: {1}', event.name, event.data);\n            environment.dispatchEvent(event);\n            return;\n        });\n    }\n\n    aeLog('WARNING: No assetRep found.');\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ImageElementConfig from 'app/js/config/elements/ImageElementConfig';\nimport { addOrUpdateElementInProject } from '../utils';\n\nexport default class AEFTImageElementConfig extends ImageElementConfig {\n\n    getApplyOperations(element) {\n        return [ {\n            name: 'DL_ADD_IMAGE_TO_PROJECT',\n            onClick: false,\n            isDraggable: true,\n            apply: () => addOrUpdateElementInProject(element, true),\n            displayInMenu: true\n        } ];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport LookElementConfig from 'app/js/config/elements/LookElementConfig';\n\nexport default class AEFTLookElementConfig extends LookElementConfig {\n\n    _applyLook(element) {\n        const representation = this._config.findUsableRepresentation(element);\n\n        if (representation) {\n            reportApplyMetric(representation, 'placeAsset');\n            return representation.getContentPath()\n                .then(path => environment.execApp('placeAsset', [ path, false, element.name ]));\n        }\n    }\n\n    getApplyOperations(element) {\n        return [ {\n            name: 'DL_APPLY_LOOK',\n            onClick: false,\n            isDraggable: true,\n            apply: () => this._applyLook(element),\n            displayInMenu: true\n        } ];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport VideoElementConfig from 'app/js/config/elements/VideoElementConfig';\nimport { addOrUpdateElementInProject } from '../utils';\n\nexport default class AEFTVideoElementConfig extends VideoElementConfig {\n\n    getApplyOperations(element) {\n        return [ {\n            name: 'DL_ADD_TO_PROJECT',\n            icon: 'download',\n            apply: () => addOrUpdateElementInProject(element, true),\n            displayInMenu: true\n        } ];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport MaterialElementConfig from 'app/js/config/elements/MaterialElementConfig';\nimport { addOrUpdateElementInProject } from '../utils';\n\nexport default class AEFTMaterialElementConfig extends MaterialElementConfig {\n\n    getApplyOperations(element) {\n        return [ {\n            name: 'DL_ADD_TO_PROJECT',\n            onClick: false,\n            isDraggable: true,\n            apply: () => addOrUpdateElementInProject(element, true),\n            displayInMenu: true\n        } ];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ThreeDElementConfig from 'app/js/config/elements/ThreeDElementConfig';\nimport { addOrUpdateElementInProject } from '../utils';\n\nexport default class AEFTThreeDElementConfig extends ThreeDElementConfig {\n\n    getApplyOperations(element) {\n        return [ {\n            name: 'DL_ADD_TO_PROJECT',\n            onClick: false,\n            isDraggable: true,\n            apply: () => addOrUpdateElementInProject(element, true),\n            displayInMenu: true\n        } ];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport LightElementConfig from 'app/js/config/elements/LightElementConfig';\nimport { addOrUpdateElementInProject } from '../utils';\n\nexport default class AEFTLightElementConfig extends LightElementConfig {\n\n    getApplyOperations(element) {\n        return [ {\n            name: 'DL_ADD_TO_PROJECT',\n            onClick: false,\n            isDraggable: true,\n            apply: () => addOrUpdateElementInProject(element, true),\n            displayInMenu: true\n        } ];\n    }\n}\n\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport * as ColorUtils from 'app/js/utils/colorUtils';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { createElementExtraMetrics } from 'app/js/utils/libraryUtils';\n\n// Import all the element type configuration overrides\nimport DefaultConfigs from 'app/js/config/elements/DefaultConfigs';\nimport ColorElementConfig from './elements/ColorElementConfig';\nimport ImageElementConfig from './elements/ImageElementConfig';\nimport LookElementConfig from './elements/LookElementConfig';\nimport VideoElementConfig from './elements/VideoElementConfig';\nimport MaterialElementConfig from './elements/MaterialElementConfig';\nimport ThreeDElementConfig from './elements/ThreeDElementConfig';\nimport LightElementConfig from './elements/LightElementConfig';\nimport { aeLog, addOrUpdateElementInProject } from './utils';\n\nexport function getAppConfiguration() {\n\n    function rgbColorFromColor(color) {\n        return ColorUtils.rgbToHex(color, color, color).slice(1).toLowerCase();\n    }\n\n    // AE V5 darkest color is (Decimal / Hex) 35 / 23 and dark is 75 / 4b\n    this.getScaleColor = function(step) {\n        const darkStart = 35,\n            stepSize = 0.4,\n            start = darkStart,\n            delta = step,\n            value = delta * stepSize + start;\n        return rgbColorFromColor(value, value, value);\n    };\n\n    this.cssThemeBGScale = function() {\n        const scale = {};\n\n        const themes = {\n            darker: 'darker',\n            dark_v7: 'dark-v7',\n            dark: 'dark',\n            light: 'light',\n            lighter: 'lighter'\n        };\n\n        const lookupStepName = step => {\n            switch (step) {\n            case 0:\n                return themes.darker;\n            case 100:\n                return themes.dark;\n            default:\n                return 'generated/' + step;\n            }\n        };\n\n        for (let i = 0; i <= 100; i++) {\n            const hex = this.getScaleColor(i);\n            if (!Object.prototype.hasOwnProperty.call(scale, hex) || (Object.prototype.hasOwnProperty.call(scale, hex) && lookupStepName(i) !== 'generated/' + i)) {\n                scale[hex] = lookupStepName(i);\n            }\n        }\n\n        // For Drover v7 skins (Spectrum), there are 3 specific values that need to be mapped.\n        [ [ 0x1e, themes.darker ], [ 0x32, themes.dark_v7 ], [ 0xf5, themes.light ] ]\n            .forEach(info => {\n                const rgb = rgbColorFromColor(info[0]);\n                scale[rgb] = info[1];\n            });\n\n        return scale;\n    };\n\n    this.config = {};\n    this.config.code = 'AEFT';\n    this.config.fullName = 'After Effects';\n    this.config.translationSuffix = 'AE';\n    this.config.dragDropSource = 'com.adobe.aftereffects';\n    this.config.defaultStockSearchOptions = [ configuration.STOCK_SEARCH_OPTION_VIDEO.id ];\n\n    this.config.themes = this.cssThemeBGScale();\n    this.config.defaultTheme = 'darker';\n\n    this.config.elementTypes = [\n        ColorElementConfig,\n        DefaultConfigs.ColorThemeElementConfig,\n        ImageElementConfig,\n        VideoElementConfig,\n        LookElementConfig,\n        MaterialElementConfig,\n        ThreeDElementConfig,\n        LightElementConfig,\n        DefaultConfigs.AudioElementConfig,\n        DefaultConfigs.ComponentElementConfig,\n        DefaultConfigs.CapsuleElementConfig,\n        DefaultConfigs.TextStyleElementConfig,\n        DefaultConfigs.FontElementConfig,\n        DefaultConfigs.ParagraphStyleElementConfig,\n        DefaultConfigs.LayerStyleElementConfig,\n        DefaultConfigs.BrushElementConfig,\n        DefaultConfigs.PatternElementConfig,\n        DefaultConfigs.TemplateElementConfig,\n        DefaultConfigs.TextElementConfig,\n        DefaultConfigs.AnimationElementConfig,\n        DefaultConfigs.GradientElementConfig,\n        DefaultConfigs.ChannelElementConfig,\n        DefaultConfigs.ImageGuidelineElementConfig,\n        DefaultConfigs.UnsupportedElementConfig\n    ];\n\n    // This defines the element categories that are collapsed by default in the UI - change this to suit your application.\n    this.config.collapsedTypes = [\n        configuration.AUDIO_ELEMENT_TYPE,\n        configuration.BRUSH_ELEMENT_TYPE,\n        configuration.GRADIENT_ELEMENT_TYPE,\n        configuration.CHARACTER_STYLE_ELEMENT_TYPE,\n        configuration.FONT_ELEMENT_TYPE,\n        configuration.LAYER_STYLE_ELEMENT_TYPE,\n        configuration.PARAGRAPH_STYLE_ELEMENT_TYPE,\n        configuration.PATTERN_ELEMENT_TYPE,\n        configuration.TEXT_ELEMENT_TYPE,\n        configuration.TEMPLATE_ELEMENT_TYPE,\n        configuration.CAPSULE_ELEMENT_TYPE,\n        configuration.ANIMATION_ELEMENT_TYPE,\n        configuration.CHANNEL_ELEMENT_TYPE,\n        configuration.IMAGE_GUIDELINE_ELEMENT_TYPE,\n        configuration.UNSUPPORTED_ELEMENT_TYPE\n    ];\n\n    this.init = function() {\n        FileUtils.extendUsableTypes(configuration.IMAGE_ELEMENT_TYPE, [ 'application/pdf',\n            'application/illustrator',\n            'application/photoshop',\n            'application/photoshop.large',\n            'image/vnd.adobe.photoshop',\n            'image/png',\n            'image/jpeg',\n            'image/jpg',\n            'image/tiff',\n            'image/bmp',\n            'image/svg+xml',\n            'image/heic',\n            'image/x-adobe-dng',\n            'image/dng' ]);\n        FileUtils.extendUsableTypes(configuration.COLOR_ELEMENT_TYPE, [ 'application/vnd.adobe.color+json' ]);\n        FileUtils.extendUsableTypes(configuration.COLOR_THEME_ELEMENT_TYPE, [ 'application/vnd.adobe.colortheme+json' ]);\n        FileUtils.extendUsableTypes(configuration.LOOK_ELEMENT_TYPE, [ 'application/vnd.adobe.cube+txt',\n            'application/vnd.adobe.look+xml' ]);\n        FileUtils.extendUsableTypes(configuration.COMPONENT_ELEMENT_TYPE, [ 'image/svg+xml', 'image/png' ]);\n\n        // TODO: update with full list of supported video elements\n        FileUtils.extendUsableTypes(configuration.VIDEO_ELEMENT_TYPE, [\n            'video/mp4',\n            'video/quicktime',\n            'video/x-quicktime',\n            'video/x-ms-wmv',\n            'video/x-ms-asf',\n            'video/x-msvideo',\n            'video/mpeg'\n        ]);\n\n        FileUtils.extendUsableTypes(configuration.THREE_D_ELEMENT_TYPE, [\n            'application/vnd.adobe.obj.3d+zip',\n            'model/gltf+json',\n            'model/gltf-binary'\n        ]);\n\n        FileUtils.extendUsableTypes(configuration.MATERIAL_ELEMENT_TYPE, [\n            'application/vnd.adobe.sbsar+zip'\n        ]);\n\n        FileUtils.extendUsableTypes(configuration.LIGHT_ELEMENT_TYPE, [\n            'image/vnd.radiance'\n        ]);\n\n        environment.execApp('getTooltipState').then(function(tooltipState) {\n            configuration.showTooltips = tooltipState;\n        });\n\n        this.startEventListener();\n    };\n\n    this.reportEvent = function() {\n        return undefined;\n    };\n\n    this.getUserData = function(callback) {\n        environment.execApp('getUserData').then(function(strReturnValue) {\n            if (strReturnValue && strReturnValue !== 'undefined') {\n                callback(JSON.parse(strReturnValue));\n                return;\n            }\n\n            return callback();\n        });\n    };\n\n    // This specifies whether or not the + icon in the footer that shows add controls should be hidden.\n    this.config.hideAddControls = true;\n\n    const onFootageNeedsUpdate = async event => {\n        aeLog('onFootageNeedsUpdate event.data.element.reference={0}', event.data.element.reference);\n\n        const element = await libraryManager.resolveElementReference(event.data.element.reference);\n        const shouldAddNewItem = !!event.data.element.addingElement;\n        if (!element) {\n            aeLog('Cound not resolve element.');\n            throw 'Element not found';\n        }\n\n        addOrUpdateElementInProject(element, shouldAddNewItem);\n    };\n\n    const onUploadCapsule = event => {\n        //Upload Response Codes\n        const UPLOADRESPONSE = {\n            NO_ERROR : 0,\n            UPLOAD_FAILED : 1,\n            PRIMARY_FILE_MISSING : 2,\n            SECONDARY_FILE_MISSING : 3,\n            THUMBNAIL_FILE_MISSING : 4,\n            LIBRARY_NOT_FOUND : 5,\n            LIBRARY_READ_ONLY : 6\n        };\n\n        const responseEventName = 'com.adobe.DesignLibraries.events.UploadCapsuleResponse';\n        const responseEvent = environment.createEvent(responseEventName, 'APPLICATION');\n        const responseStatus = { code : UPLOADRESPONSE.NO_ERROR };\n\n        const capsuleData = event.data;\n        const library = libraryManager.getLibraryById(capsuleData.libraryId);\n        //validate we have all mandatory data\n        let err = UPLOADRESPONSE.NO_ERROR;\n        if (!FileUtils.existsFile(capsuleData.primaryPath)) {\n            err = UPLOADRESPONSE.PRIMARY_FILE_MISSING;\n        }\n        if ((err === UPLOADRESPONSE.NO_ERROR) && !FileUtils.existsFile(capsuleData.secondaryPath)) {\n            err = UPLOADRESPONSE.SECONDARY_FILE_MISSING;\n        }\n        if ((err === UPLOADRESPONSE.NO_ERROR) && !FileUtils.existsFile(capsuleData.thumbnailPath)) {\n            err = UPLOADRESPONSE.THUMBNAIL_FILE_MISSING;\n        }\n        if ((err === UPLOADRESPONSE.NO_ERROR) && !library) {\n            err = UPLOADRESPONSE.LIBRARY_NOT_FOUND;\n        }\n        if ((err === UPLOADRESPONSE.NO_ERROR) && !library.isWritable) {\n            err = UPLOADRESPONSE.LIBRARY_READ_ONLY;\n        }\n        if (err === UPLOADRESPONSE.NO_ERROR) {\n\n            const sendProgress = (currentCount, totalCount) => {\n                const progressEvent = environment.createEvent('com.adobe.DesignLibraries.events.UploadCapsuleProgress', 'APPLICATION');\n                progressEvent.data = JSON.stringify({ current : currentCount, total : totalCount });\n                environment.dispatchEvent(progressEvent);\n            };\n\n            const promises = [];\n            let representation;\n            let representationPromise;\n\n            //for upload progress\n            let totalCount = 3;\n            let uploadCount = 0;\n\n            //check if we have optional video preview\n            if (capsuleData.videoPreviewPath && FileUtils.existsFile(capsuleData.videoPreviewPath)) {\n                totalCount++;\n            }\n\n            sendProgress(uploadCount, totalCount);\n            const newElement = createElementExtraMetrics(library, capsuleData.capsuleName, configuration.CAPSULE_ELEMENT_TYPE, {});\n\n            if (capsuleData.primaryPath) {\n                representation = newElement.createRepresentation('application/vnd.adobe.ae.graphic+zip', 'primary');\n\n                //add metadata\n                if (capsuleData.metadata) {\n                    const metadata = JSON.parse(capsuleData.metadata);\n                    representation.setValue(configuration.CAPSULE_NAMESPACE, configuration.CAPSULE_DATA_KEY, metadata);\n                }\n\n                representationPromise = representation.setContentFromPath(capsuleData.primaryPath).then(() => {\n                    //progress update\n                    uploadCount = uploadCount + 1;\n                    sendProgress(uploadCount, totalCount);\n                });\n                promises.push(representationPromise);\n            }\n\n            if (capsuleData.secondaryPath) {\n                representation = newElement.createRepresentation('application/vnd.adobe.graphic+json', 'alternate');\n                representationPromise = representation.setContentFromPath(capsuleData.secondaryPath).then(() => {\n                    //progress update\n                    uploadCount = uploadCount + 1;\n                    sendProgress(uploadCount, totalCount);\n                });\n                promises.push(representationPromise);\n            }\n\n            if (capsuleData.thumbnailPath) {\n                representation = newElement.createRepresentation('image/png', 'rendition');\n                representationPromise = representation.setContentFromPath(capsuleData.thumbnailPath).then(() => {\n                    //progress update\n                    uploadCount = uploadCount + 1;\n                    sendProgress(uploadCount, totalCount);\n                });\n                promises.push(representationPromise);\n            }\n\n            if (capsuleData.videoPreviewPath && FileUtils.existsFile(capsuleData.videoPreviewPath)) {\n                representation = newElement.createRepresentation('video/mp4', 'rendition');\n                representationPromise = representation.setContentFromPath(capsuleData.videoPreviewPath).then(() => {\n                    //progress update\n                    uploadCount = uploadCount + 1;\n                    sendProgress(uploadCount, totalCount);\n                });\n                promises.push(representationPromise);\n            }\n\n            const handleSuccess = () => {\n                const cleanupPromises = [\n                    newElement.setThumbnailCache(configuration.CAPSULE_THUMBNAIL_SIZE, capsuleData.thumbnailPath),\n                    newElement.endOperation()\n                ];\n\n                Promise.all(cleanupPromises).then(() => {\n                    if (capsuleData.primaryPath) {\n                        FileUtils.deleteFile(capsuleData.primaryPath);\n                    }\n\n                    if (capsuleData.secondaryPath) {\n                        FileUtils.deleteFile(capsuleData.secondaryPath);\n                    }\n\n                    if (capsuleData.thumbnailPath) {\n                        FileUtils.deleteFile(capsuleData.thumbnailPath);\n                    }\n                });\n\n                // reveal newly added element\n                elementSelectionState.revealElement(newElement);\n                responseEvent.data = JSON.stringify(responseStatus);\n                environment.dispatchEvent(responseEvent);\n            };\n\n            const handleError = () => {\n                // Remove the element, since something went wrong\n                library.removeElement(newElement, true);\n\n                responseStatus.code = UPLOADRESPONSE.UPLOAD_FAILED;\n                responseEvent.data = JSON.stringify(responseStatus);\n                environment.dispatchEvent(responseEvent);\n            };\n\n            Promise.all(promises).then(handleSuccess, handleError);\n        } else {\n            responseStatus.code = err;\n            responseEvent.data = JSON.stringify(responseStatus);\n            environment.dispatchEvent(responseEvent);\n        }\n    };\n\n    this.startEventListener = function() {\n        environment.addEventListener('com.adobe.csxs.events.ShouldUpdateFootage', onFootageNeedsUpdate);\n        environment.addEventListener('uploadCapsuleEvent', onUploadCapsule);\n    };\n\n    this.stopEventListener = function() {\n        environment.removeEventListener('com.adobe.csxs.events.ShouldUpdateFootage', onFootageNeedsUpdate);\n        environment.removeEventListener('uploadCapsuleEvent', onUploadCapsule);\n    };\n\n    // TODO: Refactor the above to return an object, rather than using this\n    return this;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport { getComposedPath } from 'app/js/utils/DOMUtils';\n\nexport function getApplyData(representation, contentNamespace, contentKey) {\n    const { element, id, type, relationship, width, height } = representation;\n\n    const representationDragData = { id, type, relationship, width, height };\n    const dragData = {\n        id: element.id,\n        name: element.name,\n        type: element.type,\n        renditionUrl: element.getThumbnailURL(),\n        representations: [ representationDragData ],\n        linkReference: element.getReference()\n    };\n\n    if (element.description) {\n        dragData.description = element.description;\n    }\n\n    if (AdobeStockUtils.isStockAsset(element)) {\n        dragData.adobeStock = {\n            id: AdobeStockUtils.getStockId(element),\n            license: AdobeStockUtils.isLicensed(element),\n            premiumLevel: AdobeStockUtils.getStockPremiumLevel(element)\n        };\n    }\n\n    // Include custom values on the element\n    const elementCustomData = element.getValues();\n    if (elementCustomData.length) {\n        dragData.customData = elementCustomData;\n    }\n\n    if (contentNamespace && contentKey) {\n        // Include the content if it's a json value\n        representationDragData.content = representation.getValue(contentNamespace, contentKey);\n    } else {\n        // Otherwise, assume it's a file-based representation so include the content URL:\n        representationDragData.contentURL = representation.getContentURL();\n    }\n\n    // Include custom values on the representation - excluding anything like color#data that we already put in content\n    const representationCustomData = representation.getValues().filter(value => value.namespace !== contentNamespace);\n    if (representationCustomData.length) {\n        representationDragData.customData = representationCustomData;\n    }\n\n    return dragData;\n}\n\nexport function getPickerCoordinates(event) {\n    // Get the dom coordinates of where the picker should open (to the center right of the create item card, or icon in type header)\n    const pickerNodePath = getComposedPath(event)?.find(x => x.dataset?.testId?.includes('create-card') || x.dataset?.testId?.includes('type-header-add-button'));\n    if (!pickerNodePath) { return {}; }\n    const pickerBoundingRect = pickerNodePath.getBoundingClientRect();\n    return { pickerX: Math.floor(pickerBoundingRect.right), pickerY: Math.floor(pickerBoundingRect.y + (pickerBoundingRect.height / 2)) };\n}\n\nexport function mapOwnershipType(ownership) {\n    switch (ownership) {\n    case 'private':\n    case 'outgoing':\n    case 'collaborated':\n        return 'owned';\n    case 'incoming':\n        return 'shared';\n    default:\n        return ownership;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport FontElementConfig from 'app/js/config/elements/FontElementConfig';\nimport { checkTypekitFont } from 'app/js/utils/typekitUtils';\n\n// Font element configuration is essentially the same in CEP apps like AI and ID, so they can share this config\nexport default class CEPFontElementConfig extends FontElementConfig {\n\n    _setStyleInfo(styleData, name, id) {\n        styleData.type = 'charstyle';\n        styleData.name = name;\n        styleData.id = id;\n    }\n\n    _setFont(element, operation, multiOpData) {\n        const isFirstElement = multiOpData.index === 1;\n        const isLastElement = multiOpData.index === multiOpData.length;\n\n        const representation = this._config.findUsableRepresentation(element);\n        if (!representation) {\n            return;\n        }\n\n        const font = checkTypekitFont(element);\n        if (font && font.id) {\n            reportApplyMetric(representation, operation, null, { event: { value: 'typekit' } });\n        } else {\n            reportApplyMetric(representation, operation);\n        }\n\n        const styleName = element.name;\n        const styleId = element.id + ';' + element.modified;\n        const styleData = this._getStyleData(element, true);\n        this._setStyleInfo(styleData, styleName, styleId);\n        return environment.execApp(operation, [ styleData, isFirstElement, isLastElement ]);\n    }\n\n    getApplyOperations(element, subElement, multiOpData) {\n        const layerInfo = layerSelectionManager.getLayerInfo();\n\n        // If we have no document there is no way to use a text style\n        if (!layerInfo) { return []; }\n\n        if (layerInfo.kind === 'LayerKind.TEXT') {\n            return [ {\n                name: 'DL_SET_FONT_TOOLTIP',\n                icon: 'text',\n                onClick: true,\n                apply: () => this._setFont(element, 'setFont', multiOpData),\n                displayInMenu: true\n            } ];\n        }\n        return [];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport * as ColorUtils from 'app/js/utils/colorUtils';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport ColorElementConfig from 'app/js/config/elements/ColorElementConfig';\n\nexport default class DRWVColorElementConfig extends ColorElementConfig {\n\n    // The colorData parameter supports using this apply function by color themes\n    _copyColorValue(element, operation, colorData, after) {\n        if (!colorData) {\n            colorData = [];\n            // JSX expects primary representation to be the first element in the array\n            element.representations.forEach(rep => {\n                const data = rep.getValue(configuration.COLOR_NAMESPACE, configuration.COLOR_DATA_KEY);\n                if (rep.relationship === 'primary') {\n                    colorData.unshift(data);\n                } else {\n                    colorData.push(data);\n                }\n            });\n\n            if (element.representations.length > 0) {\n                reportApplyMetric(element.representations[0], operation);\n            }\n        }\n\n        if (after) {\n            after(operation);\n        }\n\n        // Get the RGB representation\n        const rgbRep = ColorUtils.getRGBRepresentation(colorData);\n        if (!rgbRep) {\n            return;\n        }\n        if (operation === 'copyRGB') {\n            return environment.execApp(operation, [ JSON.stringify(rgbRep.value) ]);\n        }\n\n        const hexColorValue = ColorUtils.colorDataToHexString(rgbRep);\n        const isLeftClick = !!(event && event.which === 1);\n\n        return environment.execApp(operation, [ hexColorValue.toUpperCase(), isLeftClick ]);\n    }\n\n    getApplyOperations(element) {\n        return [ {\n            name: 'DL_COPY_HEX_COLOR_TOOLTIP',\n            icon: 'paintbucket',\n            apply: (colorData, after) => this._copyColorValue(element, 'copyHex', colorData, after),\n            displayInMenu: true,\n            onClick: true\n        }, {\n            name: 'DL_COPY_RGB_COLOR_TOOLTIP',\n            icon: 'paintbucket',\n            apply: (colorData, after) => this._copyColorValue(element, 'copyRGB', colorData, after),\n            displayInMenu: true\n        } ];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { reportApplyMetric, reportApplyFullSizeMetric, getElementModifiedTime } from 'app/js/utils/libraryUtils';\nimport ImageElementConfig from 'app/js/config/elements/ImageElementConfig';\n\nexport default class DRWVImageElementConfig extends ImageElementConfig {\n\n    _addImageToDocument(element, isLinked, onlyDownload) {\n        const adobeStockId = AdobeStockUtils.getStockId(element);\n\n        const representation = this._config.findUsableRepresentation(element);\n        if (representation) {\n            reportApplyMetric(representation, 'placeAsset', isLinked);\n\n            return representation.getContentPath().then(path => {\n                const mimeTypeInfo = FileUtils.mimeLookup(configuration.IMAGE_ELEMENT_TYPE, representation.type);\n                const isPSD = mimeTypeInfo && mimeTypeInfo.app === 'PHXS';\n\n                return environment.execApp('placeAsset', [\n                    path,\n                    isPSD,\n                    element.library.name,\n                    element.name,\n                    element.getLegacyReference(),\n                    getElementModifiedTime(element),\n                    element.created,\n                    adobeStockId || '',\n                    (adobeStockId ? AdobeStockUtils.isLicensed(element) : null),\n                    isLinked,\n                    onlyDownload\n                ]);\n            });\n        }\n\n        // Fallback: use the full-size rendition if we don't have a representation we can use\n        return element.getThumbnailPath().then(function(path) {\n            reportApplyFullSizeMetric(element, 'placeAsset', isLinked);\n\n            return environment.execApp('placeAsset', [\n                path,\n                false,\n                element.library.name,\n                element.name,\n                element.getLegacyReference(),\n                getElementModifiedTime(element),\n                element.created,\n                adobeStockId || '',\n                (adobeStockId ? AdobeStockUtils.isLicensed(element) : null),\n                isLinked,\n                onlyDownload\n            ]);\n        });\n    }\n\n    getApplyOperations(element) {\n        return [ {\n            name: 'DL_INSERT_IMAGE_TO_DOC_AS_LINKED',\n            icon: 'download',\n            apply: () => this._addImageToDocument(element, true, false),\n            displayInMenu: configuration.currentProduct.config.isDocumentOpen\n        }, {\n            name: 'DL_INSERT_IMAGE_TO_DOC_AS_COPY',\n            icon: 'download',\n            apply: () => this._addImageToDocument(element, false, false),\n            displayInMenu: configuration.currentProduct.config.isDocumentOpen\n        }, {\n            name: 'DL_DOWNLOAD_IMAGE_AS_LINKED',\n            icon: 'download',\n            apply: () => this._addImageToDocument(element, true, true),\n            displayInMenu: true\n        }, {\n            name: 'DL_DOWNLOAD_IMAGE_AS_COPY',\n            icon: 'download',\n            apply: () => this._addImageToDocument(element, false, true),\n            displayInMenu: true\n        } ];\n    }\n\n    isDisabled(element) {\n        return !this._config.findUsableRepresentation(element) && !element.getCachedThumbnailPath();\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport environment from 'app/js/environment';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport * as ColorUtils from 'app/js/utils/colorUtils';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport debugLog from 'app/js/utils/debugLog';\n\n// Import all the element type configuration overrides\nimport DefaultConfigs from 'app/js/config/elements/DefaultConfigs';\nimport ColorElementConfig from './elements/ColorElementConfig';\nimport ImageElementConfig from './elements/ImageElementConfig';\n\nconst MAX_HINT_LIMIT = 3000;\n\nexport function getAppConfiguration() {\n    this.config = {};\n    this.config.code = 'DRWV';\n    this.config.fullName = 'Dreamweaver';\n    this.config.translationSuffix = 'DW';\n    this.config.dragDropSource = 'com.adobe.dreamweaver';\n    this.config.themes = {\n        '323232': 'darker',\n        '484848': 'dark',\n        'cacaca': 'light',\n        'f0f0f0': 'lighter'\n    };\n\n    // In the global CSS, certain app styles are bound to the classname 'spectrum-enabled'.\n    this.config.legacySpectrumEnabled = true;\n\n    this.config.defaultTheme = 'dark';\n    this.config.isDocumentOpen = false;\n    this.config.isReadOnly = true;\n\n    this.config.elementTypes = [\n        ImageElementConfig,\n        ColorElementConfig,\n        DefaultConfigs.ColorThemeElementConfig,\n        DefaultConfigs.ComponentElementConfig,\n        DefaultConfigs.TextStyleElementConfig,\n        DefaultConfigs.FontElementConfig,\n        DefaultConfigs.ParagraphStyleElementConfig,\n        DefaultConfigs.VideoElementConfig,\n        DefaultConfigs.LayerStyleElementConfig,\n        DefaultConfigs.LookElementConfig,\n        DefaultConfigs.CapsuleElementConfig,\n        DefaultConfigs.BrushElementConfig,\n        DefaultConfigs.ThreeDElementConfig,\n        DefaultConfigs.PatternElementConfig,\n        DefaultConfigs.TemplateElementConfig,\n        DefaultConfigs.TextElementConfig,\n        DefaultConfigs.AnimationElementConfig,\n        DefaultConfigs.LightElementConfig,\n        DefaultConfigs.MaterialElementConfig,\n        DefaultConfigs.GradientElementConfig,\n        DefaultConfigs.AudioElementConfig,\n        DefaultConfigs.ChannelElementConfig,\n        DefaultConfigs.ImageGuidelineElementConfig,\n        DefaultConfigs.UnsupportedElementConfig\n    ];\n\n    // This defines the element categories that are collapsed by default in the UI - change this to suit your application.\n    this.config.collapsedTypes = [\n        configuration.CHARACTER_STYLE_ELEMENT_TYPE,\n        configuration.FONT_ELEMENT_TYPE,\n        configuration.PARAGRAPH_STYLE_ELEMENT_TYPE,\n        configuration.VIDEO_ELEMENT_TYPE,\n        configuration.LAYER_STYLE_ELEMENT_TYPE,\n        configuration.LOOK_ELEMENT_TYPE,\n        configuration.CAPSULE_ELEMENT_TYPE,\n        configuration.BRUSH_ELEMENT_TYPE,\n        configuration.THREE_D_ELEMENT_TYPE,\n        configuration.PATTERN_ELEMENT_TYPE,\n        configuration.TEMPLATE_ELEMENT_TYPE,\n        configuration.TEXT_ELEMENT_TYPE,\n        configuration.ANIMATION_ELEMENT_TYPE,\n        configuration.LIGHT_ELEMENT_TYPE,\n        configuration.MATERIAL_ELEMENT_TYPE,\n        configuration.GRADIENT_ELEMENT_TYPE,\n        configuration.AUDIO_ELEMENT_TYPE,\n        configuration.CHANNEL_ELEMENT_TYPE,\n        configuration.IMAGE_GUIDELINE_ELEMENT_TYPE,\n        configuration.UNSUPPORTED_ELEMENT_TYPE\n    ];\n\n    let obj = {};\n    const pushLibrariesInfo = () => {\n        const libraryNames = [];\n\n        function sendDataToApp(currentLibraryData) {\n            currentLibraryItems.colors = currentLibraryData.colors;\n            const thumbnails = [];\n            let thumbnail;\n            if (currentLibraryData.images) {\n                const libImgLength = currentLibraryData.images.length;\n                for (let i = libImgLength - 1; i >= 0; --i) {\n                    // remove the image with thumbnailError\n                    if (currentLibraryData.images[i].thumbnailError) {\n                        currentLibraryData.images.splice(i, 1);\n                    } else {\n                        thumbnail = {};\n                        thumbnail.path = currentLibraryData.images[i].thumbnail;\n                        thumbnails.push(thumbnail);\n                    }\n                }\n                // reverse thumbnails array as we had inserted thumbnail in reverse order\n                thumbnails.reverse;\n                currentLibraryItems.images = currentLibraryData.images;\n            }\n            obj.thumbnails = thumbnails;\n            obj.currentLibraryItemList = currentLibraryItems;\n            environment.execApp('setLibraryCollection', [ JSON.stringify(obj) ]);\n        }\n\n        function updateApp() {\n            // Since we are selecting only the current library data.\n            // Since Dreamweaver uses the obj.libraries array,\n            // rather than having just one object currentLibrary,\n            // using the existing array structure and passing it to Dw,\n            // so that it does not break the implementation\n            const currentLibraryData = obj.libraries[0];\n            if (currentLibraryData) {\n                const hasAllData = currentLibraryData.images.every(image => image.thumbnail !== '' || image.thumbnailError);\n                if (hasAllData) {\n                    sendDataToApp(currentLibraryData);\n                }\n            }\n        }\n\n        function parseAndAddLibrary(library) {\n            const currentLibrary = {};\n            currentLibrary.name = library.name;\n            currentLibrary.id = library.id;\n            currentLibrary.images = [];\n            currentLibrary.colors = [];\n\n            const libElemArr = library.elements;\n            const len = libElemArr.length;\n            let elemCount = 0, rgbValue, hexValue, currentElement;\n\n            for (let j = 0; j < len && elemCount < MAX_HINT_LIMIT; j++) {\n                const image = {};\n                currentElement = libElemArr[j];\n                if (currentElement.type === configuration.IMAGE_ELEMENT_TYPE) {\n                    elemCount++;\n                    const currentElementRep = currentElement.getPrimaryRepresentation();\n                    image.elementRef = currentElement.getLegacyReference();\n                    if (currentElementRep) {\n                        image.primaryType = currentElementRep.type;\n                    } else {\n                        image.primaryType = '';\n                    }\n                    image.elementName = currentElement.name;\n                    image.adobeStockID = AdobeStockUtils.getStockId(currentElement) || '';\n                    image.isUnlicensedStockAsset = image.adobeStockID ? !AdobeStockUtils.isLicensed(currentElement) : false;\n                    const size = elementConfiguration.getThumbnailSize(currentElement);\n                    image.thumbnail = currentElement.getCachedThumbnailPath(size);\n                    if (!image.thumbnail) {\n                        // Thumbnail not fetched yet, so fetch asynchronously\n                        image.thumbnail = '';\n                        currentElement.getThumbnailPath(size).then(\n                            path => image.thumbnail = path,\n                            err => {\n                                debugLog.log(err);\n                                image.thumbnailError = true; // Handle broken thumbnail\n                            }\n                        ).then(updateApp);\n                    }\n                    currentLibrary.images.push(image);\n                } else if (currentElement.type === configuration.COLOR_ELEMENT_TYPE) {\n                    elemCount++;\n                    for (let rep = 0; rep < currentElement.representations.length; rep++) {\n                        if (ColorUtils.getRGBColor(currentElement)) {\n                            const color = {};\n                            rgbValue = currentElement.representations[rep].getValue('color', 'data');\n                            hexValue = ColorUtils.colorDataToHexString(rgbValue);\n                            color.hexValue = hexValue;\n                            color.source = 'color';\n                            color.colorAliasName = (currentElement.name && currentElement.name !== '') ? currentElement.name : hexValue;\n\n                            currentLibrary.colors.push(color);\n                        }\n                    }\n                } else if (currentElement.type === configuration.COLOR_THEME_ELEMENT_TYPE) {\n                    if (currentElement.getPrimaryRepresentation().getValue('colortheme', 'data')) {\n                        const swatches = currentElement.getPrimaryRepresentation().getValue('colortheme', 'data').swatches;\n                        elemCount++;\n                        for (let k = 0; k < swatches.length; k++) {\n                            for (let rep = 0; rep < swatches[k].length; rep++) {\n                                if (ColorUtils.getRGBRepresentation(swatches[k])) {\n                                    const colorThemeColor = {};\n                                    rgbValue = swatches[k][rep];\n                                    hexValue = ColorUtils.colorDataToHexString(rgbValue);\n                                    colorThemeColor.hexValue = hexValue;\n                                    colorThemeColor.source = 'colorTheme';\n                                    currentLibrary.colors.push(colorThemeColor);\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n            obj.libraries.push(currentLibrary);\n        }\n\n        libraryManager.libraries.forEach(function(library) {\n            if (!library.isDeletedFromServer) {\n                libraryNames.push({\n                    name: library.name,\n                    id: library.id\n                });\n            }\n        });\n\n        //Sort by name alphabetically\n        libraryNames.sort(function(a, b) {\n            if (a.name < b.name) {\n                return -1;\n            }\n            if (a.name > b.name) {\n                return 1;\n            }\n            return 0;\n        });\n\n        obj = {};\n        obj.libraryNames = libraryNames;\n        obj.libraries = [];\n\n        const currentLibraryItems = {};\n\n        //Get the current library\n        const currentLib = libraryManager.currentLibrary;\n        if (currentLib) {\n            obj.currentLibrary = libraryNames.findIndex(lib => lib.id === currentLib.id);\n\n            // parse the current library only\n            parseAndAddLibrary(currentLib);\n\n            //Sort by name alphabetically\n            obj.libraries.sort(function(a, b) {\n                if (a.name < b.name) {\n                    return -1;\n                }\n                if (a.name > b.name) {\n                    return 1;\n                }\n                return 0;\n            });\n\n            // Since we are selecting only the current library data.\n            // Since Dreamweaver uses the obj.libraries array,\n            // rather than having just one object currentLibrary,\n            // using the existing array structure and passing it to Dw,\n            // so that it does not break the implementation\n            const currentLibraryData = obj.libraries[0];\n            sendDataToApp(currentLibraryData);\n        }\n    };\n\n    let pendingInfoRequest = false;\n    const updateLibrariesInfo = () => { // Throttle the updateLibrariesInfo requests\n        if (!pendingInfoRequest) {\n            pendingInfoRequest = true;\n            setTimeout(function() {\n                pendingInfoRequest = false;\n                pushLibrariesInfo();\n            }, 100);\n        }\n    };\n\n    this.init = function() {\n        FileUtils.extendUsableTypes(configuration.IMAGE_ELEMENT_TYPE, [ 'image/png',\n            'image/jpeg',\n            'image/jpg',\n            'image/gif',\n            'image/bmp',\n            'image/svg+xml' ]);\n        FileUtils.extendUsableTypes(configuration.COLOR_ELEMENT_TYPE, [ 'application/vnd.adobe.color+json' ]);\n        FileUtils.extendUsableTypes(configuration.COLOR_THEME_ELEMENT_TYPE, [ 'application/vnd.adobe.colortheme+json' ]);\n        FileUtils.extendUsableTypes(configuration.PARAGRAPH_STYLE_ELEMENT_TYPE, []);\n        FileUtils.extendUsableTypes(configuration.CHARACTER_STYLE_ELEMENT_TYPE, []);\n        FileUtils.extendUsableTypes(configuration.LAYER_STYLE_ELEMENT_TYPE, []);\n        FileUtils.extendUsableTypes(configuration.BRUSH_ELEMENT_TYPE, []);\n        FileUtils.extendUsableTypes(configuration.LOOK_ELEMENT_TYPE, []);\n        FileUtils.extendUsableTypes(configuration.COMPONENT_ELEMENT_TYPE, [ 'image/svg+xml', 'image/png' ]);\n\n        // This determines the tooltip-enablement state. You need to implement getTooltipState in jsx/main.jsx\n        environment.execApp('getTooltipState').then(function(tooltipState) {\n            configuration.showTooltips = tooltipState;\n        });\n\n        this.startEventListener();\n        //We listen to libraryList to track changes (add/remove/rename) to the list of libraries, and sync that to the app.\n        libraryManager.addListener('libraryList', function() {\n            updateLibrariesInfo();\n        });\n        libraryManager.addListener('currentLibrary', function() {\n            updateLibrariesInfo();\n        });\n        libraryManager.addListener('libraryStatus', function() {\n            updateLibrariesInfo();\n        });\n    };\n\n    this.reportEvent = function(eventName, properties) {\n        // TO BE DONE: Implement this if you want to be notified of analytics events, so you can report them in your\n        // own product's analytics (e.g. Headlights) - this is in addition to, and not a replacement of, the\n        // analytics sent by the panel to Adobe Analytics.\n        const event = environment.createEvent('com.adobe.DesignLibraries.events.LOGPIP', 'APPLICATION');\n        // Helper to handle null and undefined properties\n        const safeGetStringProperty = function(property) {\n            return property || 'N/A';\n        };\n        const data = {\n            'eventName': safeGetStringProperty(eventName),\n            'libraryID': safeGetStringProperty(properties.libraryID),\n            'elementType': safeGetStringProperty(properties.elementType),\n            'opType': safeGetStringProperty(properties.opType)\n        };\n        event.data = JSON.stringify(data);\n        environment.dispatchEvent(event);\n    };\n\n    this.getUserData = function(callback) {\n        environment.execApp('getUserData').then(function(strReturnValue) {\n            if (strReturnValue && strReturnValue !== 'undefined') {\n                callback(JSON.parse(strReturnValue));\n                return;\n            }\n\n            return callback();\n        });\n    };\n\n    const onLayerUpdateEvent = () => {\n        layerSelectionManager.handleSelectionChange();\n    };\n\n    //TO BE DONE: DW will not support Add Asset workflows for now.\n    this.config.hideAddControls = true;\n\n    const onAddAssetToLibrary = () => {\n        //TO BE DONE: DW will not support Add Asset workflows for now.\n        //Will add the logic later...\n        return undefined;\n    };\n    const onDocumentChange = event => {\n        if (event.data.documentStatus === 'open') {\n            configuration.currentProduct.config.isDocumentOpen = true;\n        } else {\n            configuration.currentProduct.config.isDocumentOpen = false;\n        }\n    };\n\n    this.startEventListener = function() {\n        // TO BE DONE:\n        // 1) Implement a CEP event selectionChanged (or whatever you want to call it), that your application emits whenever the user selection/state changes.\n        // 2) If you have an other events that your app can send to the panel, this is the right place to register for them!\n        environment.addEventListener('selectionChanged', onLayerUpdateEvent);\n        environment.addEventListener('addAssetToLibrary', onAddAssetToLibrary);\n        environment.addEventListener('requestContextRebuild', updateLibrariesInfo);\n        environment.addEventListener('documentChanged', onDocumentChange);\n    };\n\n    this.stopEventListener = function() {\n        // TO BE DONE: This should match the events you registered in startEventListener()\n        environment.removeEventListener('selectionChanged', onLayerUpdateEvent);\n        environment.removeEventListener('addAssetToLibrary', onAddAssetToLibrary);\n        environment.removeEventListener('requestContextRebuild', updateLibrariesInfo);\n        environment.removeEventListener('documentChanged', onDocumentChange);\n    };\n\n    // TODO: Refactor the above to return an object, rather than using this\n    return this;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2016 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport environment from 'app/js/environment';\nimport productInterface from 'app/js/interface/productInterface';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport lockManager from 'app/js/managers/lockManager';\nimport { checkFileSize, setThumbnail } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport tempFileManager from 'app/js/managers/tempFileManager';\nimport documentWatchManager from 'app/js/managers/documentWatchManager';\n\nexport function editElement(element) {\n\n    // TODO: If we know that it's always an animation, we can remove the getEditableTypes() parameter.\n    const representation = elementConfiguration.findUsableRepresentation(element, FileUtils.getEditableTypes(configuration.ANIMATION_ELEMENT_TYPE));\n    const lockId = 'documentLock_' + element.id;\n    const libraryName = element.library && element.library.name;\n\n    if (!representation) {\n        return false;\n    }\n\n    let assetPath, renditionPath;\n    let assetClosed = false;\n    let assetSaveInProgress = false;\n    tempFileManager.getTempFile(representation).then(path => {\n        assetPath = path;\n        renditionPath = FileUtils.getFileNameWithoutExtension(assetPath) + '.png';\n        return environment.execApp('openAssetForEdit', [ path, renditionPath ]);\n    }).then(fileName => {\n        const listenerId = documentWatchManager.startListening(fileName, assetPath, event => {\n            switch (event) {\n            case 'closed':\n                lockManager.obtainLock(lockId, () => {\n                    documentWatchManager.stopListening(listenerId);\n                    assetClosed = true;\n                    if (!assetSaveInProgress) {\n                        tempFileManager.deleteTempFile(assetPath);\n                    }\n                    productInterface.elementEditCompleted(element);\n                    lockManager.releaseLock(lockId);\n                });\n                break;\n            case 'saved': {\n                if (!checkFileSize(assetPath)) {\n                    return;\n                }\n\n                // Check if the library exists - if it was deleted, switch to the current library\n                let library = element.library;\n                const isDeleted = !library || library.isDeletedLocally;\n                let isRecovered;\n                if (isDeleted || !library.isWritable) {\n                    library = libraryManager.getRecoveryLibrary(libraryName);\n                    if (!library) {\n                        // There's no recovery library, so don't do anything\n                        return;\n                    }\n                    isRecovered = true;\n                }\n                const promises = [];\n                lockManager.obtainLock(lockId, () => {\n                    assetSaveInProgress = true;\n                    if (element.isDeletedLocally || isRecovered) {\n                        element = library.createElement(element.name, element.type);\n                    } else {\n                        element.beginOperation();\n                        element.removeAllRepresentations();\n                    }\n                    const assetMimeType = FileUtils.fileNameToMimeType(assetPath, element.type);\n                    const newRepresentation = element.createRepresentation(assetMimeType, 'primary');\n                    promises.push(newRepresentation.setContentFromPath(assetPath));\n                    if (renditionPath && FileUtils.existsFile(renditionPath)) {\n                        promises.push(setThumbnail(element, configuration.IMAGE_THUMBNAIL_SIZE, renditionPath));\n                    }\n                    const operationsFinished = element.endOperation();\n                    const doneCbk = () => {\n                        productInterface.sendElementUpdated(newRepresentation);\n                        lockManager.releaseLock(lockId);\n                        if (isRecovered) {\n                            elementSelectionState.revealElement(element);\n                            if (isDeleted) {\n                                environment.showError(translate('DL_WARNING_RECOVERED_FROM_DELETED', {\n                                    recoveryLibraryName: library.name\n                                }));\n                            } else {\n                                environment.showError(translate('DL_WARNING_RECOVERED_FROM_READONLY', {\n                                    recoveryLibraryName: library.name,\n                                    originalLibraryName: libraryName\n                                }));\n                            }\n                        }\n\n                        operationsFinished.then(() => {\n                            if (assetClosed) {\n                                tempFileManager.deleteTempFile(assetPath);\n                            } else {\n                                tempFileManager.updateTempFile(newRepresentation, assetPath);\n                            }\n                            assetSaveInProgress = false;\n                        });\n                    };\n                    Promise.all(promises).then(doneCbk, doneCbk);\n                });\n                break;\n            }\n            }\n        });\n    });\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2016 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { checkLibraryWritable, getElementModifiedTime } from 'app/js/utils/libraryUtils';\nimport { editElement } from './animationUtils';\n\nconst sendElementUpdated = (representation, requestRef) => {\n    if (representation) {\n        const element = representation.element,\n            elementRef = element.getLegacyReference();\n\n        // We have to call this because we need to get the new path.\n        representation.getContentPath().then(function(path) {\n            const event = environment.createEvent('com.adobe.DesignLibraries.events.attachRenditionCompleted', 'APPLICATION');\n            event.data = JSON.stringify({\n                requestRef,\n                elementRef,\n                name: element.name,\n                libraryName: element.library.name,\n                modifiedTime: getElementModifiedTime(element),\n                creationTime: element.created,\n                data: [ path ]\n            });\n\n            environment.dispatchEvent(event);\n        });\n    }\n};\n\nconst fillUpdatePromises = (updatePromises, fileData, element) => {\n    const files = (fileData && fileData.files) || [];\n    for (let i = 0; i < files.length; i++) {\n        const file = files[i];\n        if (FileUtils.existsFile(file.path)) {\n            const fileMimeType = FileUtils.fileNameToMimeType(file.path, element.type);\n            const newRepresentation = element.createRepresentation(fileMimeType, file.relationship);\n            const updatePromise = newRepresentation.setContentFromPath(file.path);\n            updatePromises.push(updatePromise);\n        }\n    }\n};\n\nconst deleteLocalFiles = filesMap => {\n    for (let i = 0; i < filesMap.length; i++) {\n        FileUtils.deleteFile(filesMap[i].path);\n    }\n};\n\nconst checkEventData = (library, fileData, elementType) => {\n    if (!library) {\n        throw 'No current library';\n    }\n\n    if (!fileData || !fileData.files || !elementType) {\n        throw 'event data invalid';\n    }\n};\n\nexport async function onUpdateElement(event) {\n    const fileData = event.data.fileData;\n    const elementType = event.data.elementType;\n    const elementRef = event.data.elementRef;\n    try {\n        if (!elementRef) {\n            throw 'elementRef missing';\n        }\n        let element = await libraryManager.resolveElementReference(elementRef);\n        if (!element) {\n            throw 'Element not found';\n        }\n        // Show the element that is being updated from Ai.\n        elementSelectionState.revealElement(element);\n        const library = element.library;\n        if (!checkLibraryWritable(library)) {\n            return;\n        }\n\n        checkEventData(library, fileData, elementType);\n\n        // If the element we're editing was deleted, we recreate it as a new element, so the changes aren't lost.\n        // Otherwise, we just remove the existing representations so we can add the new ones\n        if (element.isDeletedLocally) {\n            element = library.createElement(element.name, element.type);\n        } else {\n            element.beginOperation();\n            element.removeAllRepresentations();\n        }\n\n        const updatePromises = [];\n        fillUpdatePromises(updatePromises, fileData, element);\n        // IMPORTANT: set the rendition cache at the end, because any changes to the representations will\n        // wipe the cache.\n        return Promise.all(updatePromises).then(function() {\n            const cleanupPromises = [];\n\n            if (fileData.rendition) {\n                cleanupPromises.push(element.setThumbnailCache(configuration.IMAGE_THUMBNAIL_SIZE, fileData.rendition));\n            }\n\n            cleanupPromises.push(element.endOperation);\n\n            Promise.all(cleanupPromises).then(() => {\n                if (fileData.rendition) {\n                    FileUtils.deleteFile(fileData.rendition.path);\n                }\n\n                deleteLocalFiles(fileData.files);\n            });\n\n            // Notify products that an element is created so that they can do appropriate stitching\n            // if they want to replace the content with a linked smart object.\n            sendElementUpdated(element.getPrimaryRepresentation(), event.data.requestRef);\n            return element;\n\n        }, () => Promise.reject('Could not update element'));\n    } catch (error) {\n        return Promise.reject('Could not update element: ' + error);\n    }\n}\n\nconst animationMIMEType = 'application/vnd.adobe.animate-xfl+zip';\nconst symbolMIMEType = 'application/vnd.adobe.animate-sym+zip';\n\nexport async function onEditElement(event) {\n    const elementRef = event.data.elementRef;\n    if (!elementRef) {\n        return;\n    }\n    const element = await libraryManager.resolveElementReference(elementRef);\n    if (!element) {\n        return;\n    }\n    const library = element.library;\n    if (!checkLibraryWritable(library)) {\n        return;\n    }\n    const primaryRep = element.getPrimaryRepresentation();\n    const isSymbol = primaryRep && primaryRep.type === symbolMIMEType;\n    const isAnimation = primaryRep && primaryRep.type === animationMIMEType;\n    if (isAnimation || isSymbol) {\n        return editElement(element);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2016 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { onUpdateElement, onEditElement } from './pushUtils';\n\nconst onLayerUpdateEvent = () => {\n    layerSelectionManager.handleSelectionChange();\n};\n\nexport function listen() {\n    environment.addEventListener('com.adobe.events.flash.documentChanged', onLayerUpdateEvent);\n    environment.addEventListener('com.adobe.events.flash.attachRendition', onUpdateElement);\n    environment.addEventListener('com.adobe.events.flash.editElement', onEditElement);\n}\n\nexport function stop() {\n    environment.removeEventListener('com.adobe.events.flash.documentChanged', onLayerUpdateEvent);\n    environment.removeEventListener('com.adobe.events.flash.attachRendition', onUpdateElement);\n    environment.removeEventListener('com.adobe.events.flash.editElement', onEditElement);\n}\n\nexport function attachLayerUpdateEvent() {\n    environment.addEventListener('com.adobe.events.flash.selectionChanged', onLayerUpdateEvent);\n    onLayerUpdateEvent();\n}\n\nexport function deAttachLayerUpdateEvent() {\n    environment.removeEventListener('com.adobe.events.flash.selectionChanged', onLayerUpdateEvent);\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2016 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric, reportApplyFullSizeMetric, generatePreview } from 'app/js/utils/libraryUtils';\nimport { getElementModifiedTime } from 'app/js/utils/libraryUtils';\nimport { addAnimationElement } from 'app/js/utils/addElementUtils';\nimport AnimationElementConfig from 'app/js/config/elements/AnimationElementConfig';\nimport { editElement } from '../animationUtils';\n\nconst ANIMATION_MIME_TYPE = 'application/vnd.adobe.animate-xfl+zip';\nconst SYMBOL_MIME_TYPE = 'application/vnd.adobe.animate-sym+zip';\n\nexport default class FLPRAnimationElementConfig extends AnimationElementConfig {\n\n    _addAnimationToDocument(element, isLinked) {\n        const representation = this._config.findUsableRepresentation(element);\n        if (representation) {\n            reportApplyMetric(representation, 'placeAsset');\n            return representation.getContentPath().then(path => {\n                return environment.execApp('placeAsset', [\n                    path,\n                    element.library.name,\n                    element.name,\n                    element.getLegacyReference(),\n                    getElementModifiedTime(element),\n                    element.created,\n                    isLinked,\n                    JSON.stringify(element.getValues())\n                ]);\n            });\n        }\n\n        // Fallback: use the full-size rendition if we don't have a representation we can use\n        return element.getThumbnailPath().then(path => {\n            reportApplyFullSizeMetric(element, 'placeAsset');\n            return environment.execApp('placeAsset', [\n                path,\n                element.library.name,\n                element.name,\n                element.getLegacyReference(),\n                getElementModifiedTime(element),\n                element.created,\n                isLinked\n            ]);\n        });\n    }\n\n    getApplyOperations(element) {\n\n        // If we have no document there is no way to use a graphic\n        const layerInfo = layerSelectionManager.getLayerInfo();\n        if (!layerInfo) {\n            return [];\n        }\n\n        const representation = element.getPrimaryRepresentation();\n\n        if (representation && representation.type === SYMBOL_MIME_TYPE) {\n            return [ {\n                name: 'DL_ADD_ANIMATION_TO_DOC_AS_LINKED',\n                icon: 'download',\n                allowMultiple: true,\n                apply: () => this._addAnimationToDocument(element, true),\n                displayInMenu: true\n            }, {\n                name: 'DL_ADD_ANIMATION_TO_DOC_AS_COPY',\n                icon: 'download',\n                allowMultiple: true,\n                apply: () => this._addAnimationToDocument(element, false),\n                displayInMenu: true\n            } ];\n        }\n\n        if (representation && representation.type === ANIMATION_MIME_TYPE) {\n            return [ {\n                name: 'DL_OPEN_IN_NEW_DOCUMENT',\n                icon: 'download',\n                allowMultiple: true,\n                apply: () => this._addAnimationToDocument(element, false),\n                displayInMenu: true\n            } ];\n        }\n\n        // Other types are not supported\n        return [];\n    }\n\n    _addDocContent(library, opType) {\n        return this._confirmAddOperation()\n            .then(() => environment.execApp('uploadCurrentDoc', []))\n            .then(fileData => {\n                const file = JSON.parse(fileData);\n                const appMetadata = {\n                    documentId: file.documentId,\n                    layerIds: file.layerIds,\n                    dragAssetId: ''\n                };\n                return addAnimationElement(file.layerName, file.files, file.rendition, library, opType, appMetadata, file.elementData);\n            }, () => Promise.reject('Could not extract asset.'));\n    }\n\n    _addAsset(library, opType, dragAssetId = '') {\n        return generatePreview(dragAssetId).then(files => {\n            const addFilePromises = files.map(file => {\n                const appMetadata = {\n                    documentId: file.documentId,\n                    layerIds: file.layerIds,\n                    dragAssetId\n                };\n                return addAnimationElement(file.layerName, file.files, file.rendition, library, opType, appMetadata, file.elementData);\n            });\n            return Promise.all(addFilePromises).catch(() => Promise.reject('Could not upload files'));\n\n        }, () => Promise.reject('Could not extract asset.'));\n    }\n\n    _confirmAddOperation() {\n        return environment.execApp('saveCurrentDoc', []).then((docSaved) => {\n            if (!(docSaved.toLowerCase() === 'true')) {\n                return Promise.reject('Did not save document');\n            }\n        });\n    }\n\n    getAddOperations(layerInfo) {\n\n        if (!layerInfo) {\n            return [];\n        }\n\n        const operations = [];\n\n        if (layerInfo.enableDocumentUpload) {\n            operations.push({\n                name: 'DL_ADD_ENTIRE_ANIMATION_TO_LIBRARY',\n                order: 1,\n                icon: 'AddAnimation',\n                apply: (library, opType) => this._addDocContent(library, opType)\n            });\n        }\n\n        if (layerInfo.enableAnimationUpload) {\n            operations.push({\n                name: 'DL_ADD_SYMBOL_TO_LIBRARY',\n                order: 2,\n                icon: 'AddAnimation',\n                dropSupport: true,\n                apply: (library, opType, dragAssetId) => this._addAsset(library, opType, dragAssetId)\n            });\n        }\n\n        return operations;\n    }\n\n    defaultEditOperation(element) {\n        return editElement(element);\n    }\n\n    getDragData(element) {\n        // Get the representation to use, and the path to it\n        let usableRepresentation = this._config.findUsableRepresentation(element);\n        let contentPath;\n\n        if (usableRepresentation) {\n            // will return undefined if not cached\n            contentPath = usableRepresentation.getCachedContentPath();\n        } else if (element) {\n            // Fallback: use the full-size rendition if we don't have a representation we can use\n            const path = element.getCachedThumbnailPath();\n\n            if (path) {\n                contentPath = path;\n                // Dummy representation data structure for analytics\n                usableRepresentation = {\n                    type: 'image/png',\n                    element\n                };\n            }\n        }\n\n        if (contentPath) {\n            return {\n                data: [ contentPath ],\n                // NOTE: The representation is only for analytics purposes; this will get stripped before setting the drag data\n                usedRepresentationForAnalytics: usableRepresentation,\n                metaData: element.getValue('FLPR', 'assetInfo')\n            };\n        }\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport * as ColorUtils from 'app/js/utils/colorUtils';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\n\nimport ColorElementConfig from 'app/js/config/elements/ColorElementConfig';\n\nexport default class FLPRColorElementConfig extends ColorElementConfig {\n\n    // The colorData parameter supports using this apply function by color themes\n    _setColor(element, colorData, after) {\n        if (!colorData) {\n            colorData = [];\n            // JSX expects primary representation to be the first element in the array\n            element.representations.forEach(rep => {\n                const data = rep.getValue(configuration.COLOR_NAMESPACE, configuration.COLOR_DATA_KEY);\n                if (rep.relationship === 'primary') {\n                    colorData.unshift(data);\n                } else {\n                    colorData.push(data);\n                }\n            });\n\n            if (element.representations.length > 0) {\n                reportApplyMetric(element.representations[0], 'setColor');\n            }\n        }\n\n        // Get the RGB representation\n        const rgbRep = ColorUtils.getRGBRepresentation(colorData);\n        if (!rgbRep) {\n            return;\n        }\n\n        if (after) {\n            after('setColor');\n        }\n\n        // Get the hex value from RGB data\n        const hexValue = ColorUtils.colorDataToHexString(rgbRep);\n        return environment.execApp('setColor', [ hexValue.toUpperCase() ]);\n    }\n\n    getApplyOperations(element) {\n\n        // If we have no document there is no way to use a color\n        const layerInfo = layerSelectionManager.getLayerInfo();\n        if (!layerInfo || (layerInfo && !layerInfo.selectionExists)) {\n            return [];\n        }\n\n        return [ {\n            name: 'DL_SET_COLOR_TOOLTIP',\n            icon: 'paintbucket',\n            apply: (colorData, after) => this._setColor(element, colorData, after),\n            displayInMenu: true,\n            onClick: true\n        } ];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport { addBrushElement } from 'app/js/utils/addElementUtils';\n\nimport BrushElementConfig from 'app/js/config/elements/BrushElementConfig';\n\nexport default class FLPRBrushElementConfig extends BrushElementConfig {\n\n    _addBrushToDocument(element, representation) {\n        reportApplyMetric(representation, 'useBrush');\n        return representation.getContentPath().then(path => environment.execApp('loadAndSelectBrush', [ element.library.name, element.name, path ]));\n    }\n\n    getApplyOperations(element) {\n\n        const brushTypes = FileUtils.getUsableTypes(element.type);\n        const representation = element.representations.find(rep => {\n            const isRendition = rep.relationship === 'rendition';\n            const isBrush = this._config.isRepresentationCompatible(rep, brushTypes);\n            return !isRendition && isBrush;\n        });\n\n        const layerInfo = layerSelectionManager.getLayerInfo();\n        if (!layerInfo || !representation) {\n            return [];\n        }\n\n        return [ {\n            name: 'DL_ADD_BRUSH_TO_DOC',\n            icon: 'brush',\n            onClick: true,\n            allowMultiple: true,\n            apply: () => this._addBrushToDocument(element, representation),\n            displayInMenu: true\n        } ];\n    }\n\n    _addBrush(library, opType) {\n        return environment.execApp('uploadBrushes', [ library.name ]).then(assetData => {\n            const assets = JSON.parse(assetData);\n            const promises = assets.files.map(file => addBrushElement(file.name, file.primary, file.rendition, library, opType));\n            return Promise.all(promises).then(elements => {\n                if (elements[0]) {\n                    elementSelectionState.revealElement(elements[0]);\n                }\n                return elements;\n            }, () => Promise.reject('Could not upload some brushes.'));\n        }, () => Promise.reject('Could not extract brushes.'));\n    }\n\n    getAddOperations(layerInfo) {\n        if (!layerInfo || !layerInfo.enableBrushUpload) {\n            return [];\n        }\n\n        return [ {\n            name: 'DL_ADD_BRUSH_TO_LIBRARY',\n            order: 3,\n            iconToolTip: 'DL_ADD_BRUSH_TO_LIBRARY_ICON_TOOLTIP',\n            icon: 'AddBrush',\n            apply: (library, opType) => this._addBrush(library, opType)\n        } ];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric, reportApplyFullSizeMetric, getElementModifiedTime } from 'app/js/utils/libraryUtils';\nimport ImageElementConfig from 'app/js/config/elements/ImageElementConfig';\n\nexport default class FLPRImageElementConfig extends ImageElementConfig {\n\n    _addImageToDocument(element, isLinked = false) {\n        const representation = this._config.findUsableRepresentation(element);\n        if (representation) {\n            reportApplyMetric(representation, 'placeAsset');\n            return representation.getContentPath().then(path => {\n                return environment.execApp('placeAsset', [\n                    path,\n                    element.library.name,\n                    element.name,\n                    element.getLegacyReference(),\n                    getElementModifiedTime(element),\n                    element.created,\n                    isLinked\n                ]);\n            });\n        }\n\n        // Fallback: use the full-size rendition if we don't have a representation we can use\n        return element.getThumbnailPath().then(path => {\n            reportApplyFullSizeMetric(element, 'placeAsset');\n            return environment.execApp('placeAsset', [\n                path,\n                element.library.name,\n                element.name,\n                element.getLegacyReference(),\n                getElementModifiedTime(element),\n                element.created,\n                isLinked\n            ]);\n        });\n    }\n\n    getApplyOperations(element) {\n\n        // If we have no document there is no way to use a graphic\n        const layerInfo = layerSelectionManager.getLayerInfo();\n        if (!layerInfo) {\n            return [];\n        }\n\n        return [ {\n            name: 'DL_ADD_IMAGE_TO_DOC',\n            icon: 'download',\n            allowMultiple: true,\n            apply: () => this._addImageToDocument(element),\n            displayInMenu: true\n        } ];\n    }\n\n    getAddOperations() {\n        return [];\n    }\n\n    isDisabled(element) {\n        return !this._config.findUsableRepresentation(element) && !element.getCachedThumbnailPath();\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport environment from 'app/js/environment';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport debugLog from 'app/js/utils/debugLog';\n\nimport * as FLPREvents from './events';\n\n// Import all the element type configuration overrides\nimport DefaultConfigs from 'app/js/config/elements/DefaultConfigs';\nimport AnimationElementConfig from './elements/AnimationElementConfig';\nimport ColorElementConfig from './elements/ColorElementConfig';\nimport BrushElementConfig from './elements/BrushElementConfig';\nimport ImageElementConfig from './elements/ImageElementConfig';\n\nexport function getAppConfiguration() {\n    this.config = {};\n    this.config.code = 'FLPR'; // This is the four-letter code of your application (e.g. PHXS, ILST, etc).\n    this.config.fullName = 'FlashPro'; // The full name of the application (e.g. Photoshop, Premiere Pro, etc).\n    this.config.translationSuffix = 'FP'; // A two-letter code used for identifying app-specific externalized strings\n    this.config.dragDropSource = 'com.adobe.flashpro'; // Should be of the form com.adobe.<yourapp>, e.g. com.adobe.indesign, com.adobe.premiere, etc.\n\n    // config.themes is a map from the background HEX value of the theme, to the name of the theme (CSS file) to load\n    // You can either make a fixed map that contains all the brightness value (e.g. see Photoshop: app/applications/PHXS/js/index.js),\n    // or you can programatically set this, if you have a lot of values (e.g. see InDesign: app/applications/IDSN/js/index.js).\n    // We suggest you copy one of the existing apps that best matches the style of your app, as a starting point\n    this.config.themes = {\n        '444444': 'dark',\n        'dbdbdb': 'lighter'\n    };\n\n    this.config.elementTypes = [\n        ColorElementConfig,\n        DefaultConfigs.ColorThemeElementConfig,\n        BrushElementConfig,\n        AnimationElementConfig,\n        ImageElementConfig,\n        DefaultConfigs.ComponentElementConfig,\n        DefaultConfigs.VideoElementConfig,\n        DefaultConfigs.TextStyleElementConfig,\n        DefaultConfigs.FontElementConfig,\n        DefaultConfigs.ParagraphStyleElementConfig,\n        DefaultConfigs.LayerStyleElementConfig,\n        DefaultConfigs.LookElementConfig,\n        DefaultConfigs.CapsuleElementConfig,\n        DefaultConfigs.ThreeDElementConfig,\n        DefaultConfigs.PatternElementConfig,\n        DefaultConfigs.TemplateElementConfig,\n        DefaultConfigs.LightElementConfig,\n        DefaultConfigs.MaterialElementConfig,\n        DefaultConfigs.TextElementConfig,\n        DefaultConfigs.GradientElementConfig,\n        DefaultConfigs.AudioElementConfig,\n        DefaultConfigs.ChannelElementConfig,\n        DefaultConfigs.ImageGuidelineElementConfig,\n        DefaultConfigs.UnsupportedElementConfig\n    ];\n\n    // This defines the element categories that are collapsed by default in the UI - change this to suite your application.\n    this.config.collapsedTypes = [\n        configuration.VIDEO_ELEMENT_TYPE,\n        configuration.CHARACTER_STYLE_ELEMENT_TYPE,\n        configuration.FONT_ELEMENT_TYPE,\n        configuration.PARAGRAPH_STYLE_ELEMENT_TYPE,\n        configuration.LAYER_STYLE_ELEMENT_TYPE,\n        configuration.LOOK_ELEMENT_TYPE,\n        configuration.CAPSULE_ELEMENT_TYPE,\n        configuration.THREE_D_ELEMENT_TYPE,\n        configuration.PATTERN_ELEMENT_TYPE,\n        configuration.TEMPLATE_ELEMENT_TYPE,\n        configuration.LIGHT_ELEMENT_TYPE,\n        configuration.MATERIAL_ELEMENT_TYPE,\n        configuration.TEXT_ELEMENT_TYPE,\n        configuration.GRADIENT_ELEMENT_TYPE,\n        configuration.AUDIO_ELEMENT_TYPE,\n        configuration.CHANNEL_ELEMENT_TYPE,\n        configuration.IMAGE_GUIDELINE_ELEMENT_TYPE,\n        configuration.UNSUPPORTED_ELEMENT_TYPE\n    ];\n\n    this.startEventListener = function() {\n        FLPREvents.listen();\n    };\n\n    this.stopEventListener = function() {\n        FLPREvents.stop();\n    };\n\n    this.addOperationInstantiated = function() {\n        FLPREvents.attachLayerUpdateEvent();\n    };\n\n    this.addOperationComplete = function() {\n        FLPREvents.deAttachLayerUpdateEvent();\n    };\n\n    this.init = function() {\n        FileUtils.extendUsableTypes(configuration.COLOR_ELEMENT_TYPE, [ 'application/vnd.adobe.color+json' ]);\n        FileUtils.extendUsableTypes(configuration.COLOR_THEME_ELEMENT_TYPE, [ 'application/vnd.adobe.colortheme+json' ]);\n        FileUtils.extendUsableTypes(configuration.BRUSH_ELEMENT_TYPE, [ 'application/vnd.adobe.vector.brush+zip' ]);\n        FileUtils.extendUsableTypes(configuration.IMAGE_ELEMENT_TYPE, [ 'image/svg+xml',\n            'image/png',\n            'image/jpeg',\n            'image/jpg',\n            'image/gif',\n            'image/bmp',\n            'application/photoshop',\n            'image/vnd.adobe.photoshop',\n            'application/photoshop.large',\n            'application/illustrator' ]);\n        // TODO: Populate the following based on the usable types in your product, for each type of element\n        FileUtils.extendUsableTypes(configuration.VIDEO_ELEMENT_TYPE, []);\n        FileUtils.extendUsableTypes(configuration.CHARACTER_STYLE_ELEMENT_TYPE, []);\n        FileUtils.extendUsableTypes(configuration.PARAGRAPH_STYLE_ELEMENT_TYPE, []);\n        FileUtils.extendUsableTypes(configuration.LAYER_STYLE_ELEMENT_TYPE, []);\n        FileUtils.extendUsableTypes(configuration.LOOK_ELEMENT_TYPE, []);\n        FileUtils.extendUsableTypes(configuration.THREE_D_ELEMENT_TYPE, []);\n        FileUtils.extendEditableTypes(configuration.ANIMATION_ELEMENT_TYPE, [ 'application/vnd.adobe.animate-xfl+zip', 'application/vnd.adobe.animate-sym+zip' ]);\n        FileUtils.extendUsableTypes(configuration.COMPONENT_ELEMENT_TYPE, [ 'image/svg+xml', 'image/png' ]);\n\n        // This determines the tooltip-enablement state. You need to implement getTooltipState in jsx/main.jsx\n        environment.execApp('getTooltipState').then(function(tooltipState) {\n            configuration.showTooltips = tooltipState;\n        });\n\n        this.startEventListener();\n\n        libraryManager.waitForInitialLoad().then(function() {\n            // this function is to notify FLPR that all the cep-event-listeners are attached\n            // so that app can start sending application specific cep messages to CCLibrary\n            const event = environment.createEvent('com.adobe.events.flash.extensionLoaded', 'APPLICATION');\n            event.data = '';//ignoring event data at app side.\n            event.extensionId = 'com.adobe.DesignLibraries.angular';\n            environment.dispatchEvent(event);\n        });\n    };\n\n    this.reportEvent = function(eventName, properties) {\n        environment.execApp('reportEvent', [ eventName, properties ]).then(function(strReturnValue) {\n            const returnValue = JSON.parse(strReturnValue);\n            if (returnValue) {\n                debugLog.log(eventName + ' metric reported to FL');\n            }\n        });\n    };\n\n    this.getUserData = function(callback) {\n        environment.execApp('getUserData').then(function(strReturnValue) {\n            if (strReturnValue && strReturnValue !== 'undefined') {\n                callback(JSON.parse(strReturnValue));\n                return;\n            }\n\n            return callback();\n        });\n    };\n\n    // TODO: Refactor the above to return an object, rather than using this\n    return this;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2015 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport environment from 'app/js/environment';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric, reportApplyFullSizeMetric, getElementModifiedTime } from 'app/js/utils/libraryUtils';\n\n// Configuration of apply operations for different element types\nconst APPLY_CONFIG = {};\nAPPLY_CONFIG[configuration.IMAGE_ELEMENT_TYPE] = {\n    ANALYTICS_OP_TYPE: 'addImageToDocument',\n    ANALYTICS_ELEMENT_TYPE: 'image',\n    ALLOW_PNG_FALLBACK: true\n};\nAPPLY_CONFIG[configuration.COMPONENT_ELEMENT_TYPE] = {\n    ANALYTICS_OP_TYPE: 'addComponentToDocument',\n    ANALYTICS_ELEMENT_TYPE: 'component',\n    ALLOW_PNG_FALLBACK: true\n};\nAPPLY_CONFIG[configuration.ANIMATION_ELEMENT_TYPE] = {\n    ANALYTICS_OP_TYPE: 'addAnimationToDocument',\n    ANALYTICS_ELEMENT_TYPE: 'animation',\n    ALLOW_PNG_FALLBACK: false\n};\n\nfunction _addObjectToDocument(element, representation, multiOpData, isLinked) {\n    const config = APPLY_CONFIG[element.type];\n    const isLastElement = multiOpData.index === multiOpData.length;\n\n    if (isLastElement) {\n        const eventName = 'addElement';\n        const properties = {\n            opType: config.ANALYTICS_OP_TYPE,\n            elementType: config.ANALYTICS_ELEMENT_TYPE,\n            numElements: multiOpData.length\n        };\n        configuration.currentProduct.reportEvent(eventName, properties);\n    }\n    const adobeStockId = AdobeStockUtils.getStockId(element);\n\n    // If more than one graphic has been selected, force everything to load in placegun.\n    const forceInPlaceGun = multiOpData.length > 1;\n\n    if (representation) {\n        reportApplyMetric(representation, 'placeAsset', isLinked);\n        return representation.getContentPath().then(path => {\n            return environment.execApp('placeAsset', [\n                path || '',\n                element.library.name,\n                element.name,\n                element.getLegacyReference(),\n                getElementModifiedTime(element),\n                element.created,\n                adobeStockId,\n                (adobeStockId ? AdobeStockUtils.isLicensed(element) : null),\n                isLinked,\n                forceInPlaceGun\n            ]);\n        });\n    }\n\n    // Fallback: use the full-size rendition if we don't have a representation we can use\n    return element.getThumbnailPath().then(path => {\n        reportApplyFullSizeMetric(element, 'placeAsset', isLinked);\n        return environment.execApp('placeAsset', [\n            path,\n            element.library.name,\n            element.name,\n            element.getLegacyReference(),\n            getElementModifiedTime(element),\n            element.created,\n            adobeStockId,\n            (adobeStockId ? AdobeStockUtils.isLicensed(element) : null),\n            isLinked,\n            forceInPlaceGun\n        ]);\n    });\n}\n\nexport function getApplyOperations(element, subElement, multiOpData) {\n    const layerInfo = layerSelectionManager.getLayerInfo();\n\n    // If we have no document there is no way to use a graphic\n    if (!layerInfo || layerInfo.noDocState === true) {\n        return [];\n    }\n\n    const config = APPLY_CONFIG[element.type];\n    const representation = elementConfiguration.findUsableRepresentation(element);\n\n    if (!representation && !config.ALLOW_PNG_FALLBACK) {\n        // Unsupported element - no apply operations\n        return [];\n    }\n\n    // InDesign snippets can only be added as a copy.\n    const IMAGE_REPRESENTATION_SNIPPET_TYPE = 'application/vnd.adobe.indesign-idms';\n    const isSnippetType = representation && representation.type === IMAGE_REPRESENTATION_SNIPPET_TYPE;\n\n    if (configuration.IS_APP_IN_TOUCH_MODE) {\n        return [ {\n            name: 'DL_ADD_IMAGE_TO_DOC_AS_LINKED',\n            icon: 'download',\n            allowMultiple: false,\n            apply: () => _addObjectToDocument(element, representation, multiOpData, true),\n            displayInMenu: true,\n            onClick: true\n        } ];\n    }\n\n    return [ {\n        name: 'DL_ADD_IMAGE_TO_DOC_AS_LINKED',\n        icon: 'download',\n        allowMultiple: true,\n        apply: () => _addObjectToDocument(element, representation, multiOpData, true),\n        displayInMenu: !isSnippetType\n    }, {\n        name: 'DL_ADD_IMAGE_TO_DOC_AS_COPY',\n        icon: 'download',\n        allowMultiple: true,\n        apply: () => _addObjectToDocument(element, representation, multiOpData, false),\n        displayInMenu: true\n    } ];\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { getApplyOperations } from '../graphicUtils';\nimport AnimationElementConfig from 'app/js/config/elements/AnimationElementConfig';\n\nexport default class IDSNAnimationElementConfig extends AnimationElementConfig {\n\n    getApplyOperations(element, subElement, multiOpData) {\n        return getApplyOperations(element, subElement, multiOpData);\n    }\n\n    defaultEditOperation() {\n        return false;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport ColorElementConfig from 'app/js/config/elements/ColorElementConfig';\n\nexport default class IDSNColorElementConfig extends ColorElementConfig {\n\n    // The colorData parameter supports using this apply function by color themes\n    _setColor(element, operation, multiOpData, colorData, after) {\n        const isFirstElement = multiOpData.index === 1;\n        const isLastElement = multiOpData.index === multiOpData.length;\n\n        if (!colorData) {\n            colorData = [];\n            // JSX expects primary representation to be the first element in the array\n            element.representations.forEach(rep => {\n                const data = rep.getValue(configuration.COLOR_NAMESPACE, configuration.COLOR_DATA_KEY);\n                if (element.name !== undefined) {\n                    data.name = element.name;\n                }\n                if (rep.relationship === 'primary') {\n                    colorData.unshift(data);\n                } else {\n                    colorData.push(data);\n                }\n            });\n\n            if (element.representations.length > 0) {\n                reportApplyMetric(element.representations[0], operation);\n                if (operation === 'addColor' && isLastElement === true) {\n                    configuration.currentProduct.reportEvent('addElement', {\n                        opType: 'addColor',\n                        elementType: 'color',\n                        numElements: multiOpData.length\n                    });\n                }\n            }\n        }\n\n        if (after) {\n            after(operation);\n        }\n\n        return environment.execApp(operation, [ colorData, isFirstElement, isLastElement ]);\n    }\n\n    getApplyOperations(element, subElement, multiOpData) {\n        const layerInfo = layerSelectionManager.getLayerInfo();\n\n        // If we have no document, we can still add color to swatches.\n        if (!layerInfo || (!layerInfo.selectionExists && !layerInfo.textSelectionExists && !layerInfo.insertionPointExists)) {\n            return [ {\n                name: 'DL_ID_ADD_COLORS_TOOLTIP',\n                icon: 'paintbucket',\n                allowMultiple: true,\n                apply: (colorData, after) => this._setColor(element, 'addColor', multiOpData, colorData, after),\n                displayInMenu: true\n            } ];\n        }\n\n        // If applying more than one item, we show the option to add color to swatches.\n        const showAddColorInMenu = multiOpData.length > 1;\n        return [ {\n            name: 'DL_SET_COLOR_TOOLTIP',\n            icon: 'paintbucket',\n            apply: (colorData, after) => this._setColor(element, 'setColor', multiOpData, colorData, after),\n            displayInMenu: true,\n            onClick: true\n        }, {\n            name: 'DL_ID_ADD_COLORS_TOOLTIP',\n            icon: 'paintbucket',\n            allowMultiple: true,\n            apply: (colorData, after) => this._setColor(element, 'addColor', multiOpData, colorData, after),\n            displayInMenu: showAddColorInMenu\n        } ];\n    }\n\n    defaultEditOperation(element) {\n        if (configuration.IS_APP_IN_TOUCH_MODE) {\n            return;\n        }\n\n        const representation = this._config.findUsableRepresentation(element);\n        const colorData = representation && representation.getValue(configuration.COLOR_NAMESPACE, configuration.COLOR_DATA_KEY);\n\n        return environment.execApp('replaceColor', [ colorData ]).then(colorWasChanged => {\n            if (!colorWasChanged.length || !JSON.parse(colorWasChanged)) {\n                // Nothing to do, since the color didn't change (don't need to change the library element)\n                return;\n            }\n            return environment.execApp('getLayerColor', []).then(color => {\n                const parsedColor = JSON.parse(color);\n\n                // Save the new color back to the library (remove and add new representations)\n                element.beginOperation();\n                element.removeAllRepresentations();\n\n                parsedColor.forEach((rep, index) => {\n                    const relationship = index === 0 ? 'primary' : 'rendition';\n                    const newRepresentation = element.createRepresentation(configuration.COLOR_REPRESENTATION_TYPE, relationship);\n                    newRepresentation.setValue(configuration.COLOR_NAMESPACE, configuration.COLOR_DATA_KEY, rep);\n                });\n\n                element.endOperation();\n            });\n        });\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2015 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport ColorThemeElementConfig from 'app/js/config/elements/ColorThemeElementConfig';\n\nconst COLOR_THEME_DATA_KEY = 'data';\nconst COLOR_THEME_NAMESPACE = 'colortheme';\n\nexport default class IDSNColorThemeElementConfig extends ColorThemeElementConfig {\n\n    _createColorGroup(element, multiOpData) {\n        const isFirstElement = multiOpData.index === 1;\n        const isLastElement = multiOpData.index === multiOpData.length;\n\n        const representation = this._config.findUsableRepresentation(element);\n        const themeData = representation.getValue(COLOR_THEME_NAMESPACE, COLOR_THEME_DATA_KEY);\n        themeData.name = element.name;\n\n        reportApplyMetric(representation, 'createColorGroup');\n        if (isLastElement) {\n            configuration.currentProduct.reportEvent('addElement', {\n                opType: 'createColorGroup',\n                elementType: 'colortheme',\n                numElements: multiOpData.length\n            });\n        }\n\n        return environment.execApp('createColorGroup', [ themeData, isFirstElement, isLastElement ]);\n    }\n\n    getApplyOperations(element, subElement, multiOpData) {\n\n        // Inherit operations for colours, but apply to subElement (colour data)\n        const colorThemeOps = super.getApplyOperations(element, subElement, multiOpData);\n        colorThemeOps.push({\n            name: 'DL_ID_ADD_COLORTHEME_TOOLTIP',\n            icon: 'paintbucket',\n            apply: () => this._createColorGroup(element, multiOpData),\n            displayInMenu: true,\n            allowMultiple: true\n        });\n\n        return colorThemeOps;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport environment from 'app/js/environment';\nimport productInterface from 'app/js/interface/productInterface';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport lockManager from 'app/js/managers/lockManager';\nimport { checkFileSize, setThumbnail } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport { getApplyOperations } from '../graphicUtils';\nimport ImageElementConfig from 'app/js/config/elements/ImageElementConfig';\nimport tempFileManager from 'app/js/managers/tempFileManager';\nimport documentWatchManager from 'app/js/managers/documentWatchManager';\n\nexport default class IDSNImageElementConfig extends ImageElementConfig {\n\n    getApplyOperations(element, subElement, multiOpData) {\n        return getApplyOperations(element, subElement, multiOpData);\n    }\n\n    _getLockId(element) {\n        return 'documentLock_' + element.id;\n    }\n\n    _onDocumentClose(element, editData) {\n        const lockId = this._getLockId(element);\n        lockManager.obtainLock(lockId, () => {\n            documentWatchManager.stopListening(editData.listenerId);\n            editData.isClosed = true;\n            if (editData.isSaveInProgress === false) {\n                tempFileManager.deleteTempFile(editData.tempPath);\n                FileUtils.deleteFile(editData.docPath);\n            }\n\n            productInterface.elementEditCompleted(element);\n            lockManager.releaseLock(lockId);\n        });\n    }\n\n    _onDocumentSave(element, editData) {\n        // Prevent save from updating library, if the asset is too big\n        if (!checkFileSize(editData.tempPath)) {\n            return;\n        }\n\n        editData.isSaveInProgress = true;\n        const pdfPath = FileUtils.getFileNameWithoutExtension(editData.tempPath) + '.pdf';\n        const pngPath = FileUtils.getFileNameWithoutExtension(editData.tempPath) + '.png';\n\n        if (!FileUtils.existsFile(editData.tempPath) || !FileUtils.existsFile(pdfPath)) {\n            editData.isSaveInProgress = false;\n            return;\n        }\n\n        // Check if the library exists - if it was deleted, switch to the current library\n        let library = element.library;\n        const libraryName = library.name;\n        const isDeleted = !library || library.isDeletedLocally;\n        let isRecovered = false;\n\n        if (isDeleted || !library.isWritable) {\n            library = libraryManager.getRecoveryLibrary(library.name);\n\n            if (!library) {\n                // There's no recovery library, so don't do anything\n                return;\n            }\n            isRecovered = true;\n        }\n\n        const lockId = this._getLockId(element);\n        lockManager.obtainLock(lockId, () => {\n\n            // If the element we're editing was deleted, we recreate it as a new element, so the changes aren't lost.\n            // Otherwise, we just remove the existing representations so we can add the new ones\n            const stockData = AdobeStockUtils.getStockDataForElement(element);\n            if (element.isDeletedLocally || isRecovered) {\n                element = library.createElement(element.name, element.type);\n            } else {\n                element.beginOperation();\n                element.removeAllRepresentations();\n            }\n\n            // Update the representations\n            const promises = [];\n            const assetMimeType = FileUtils.fileNameToMimeType(editData.tempPath, element.type);\n            const newRepresentation = element.createRepresentation(assetMimeType, 'primary');\n            if (stockData) {\n                // If this element is an adobe stock image, make sure we keep its stock image data\n                AdobeStockUtils.setStockData(newRepresentation, stockData);\n            }\n            promises.push(newRepresentation.setContentFromPath(editData.tempPath));\n\n            const pdfMimeType = FileUtils.fileNameToMimeType(pdfPath, element.type);\n            const pdfRepresentation = element.createRepresentation(pdfMimeType, 'rendition');\n            promises.push(pdfRepresentation.setContentFromPath(pdfPath));\n\n            if (pngPath && FileUtils.existsFile(pngPath)) {\n                promises.push(setThumbnail(element, configuration.IMAGE_THUMBNAIL_SIZE, pngPath));\n            }\n\n            // Final cleanup after saving.\n            const done = () => {\n                productInterface.sendElementUpdated(newRepresentation);\n\n                const operationsFinished = element.endOperation();\n\n                lockManager.releaseLock(lockId);\n\n                if (isRecovered) {\n                    elementSelectionState.revealElement(element);\n\n                    if (isDeleted) {\n                        environment.showError(translate('DL_WARNING_RECOVERED_FROM_DELETED', { recoveryLibraryName: library.name }));\n                    } else {\n                        environment.showError(translate('DL_WARNING_RECOVERED_FROM_READONLY', { recoveryLibraryName: library.name, originalLibraryName: libraryName }));\n                    }\n                }\n\n                operationsFinished.then(() => {\n                    if (editData.isClosed) { //do we need it.\n                        tempFileManager.deleteTempFile(editData.tempPath);\n                    } else {\n                        tempFileManager.updateTempFile(newRepresentation, editData.tempPath);\n                    }\n                    editData.isSaveInProgress = false;\n                });\n            };\n\n            Promise.all(promises).then(done, done);\n        });\n    }\n\n    defaultEditOperation(element) {\n        if (configuration.IS_APP_IN_TOUCH_MODE === true) {\n            return;\n        }\n\n        if (!this._config.isEditable(element)) {\n            // Returning false, so we fall back to the edit original workflow.\n            return false;\n        }\n        // At this point, we're guaranteed to have a primary representation that is of an editable type\n        const representation = element.getPrimaryRepresentation();\n\n        // Can't modify the representation directly - need to copy it\n        tempFileManager.getTempFile(representation)\n            .then(tempPath => environment.execApp('openAssetForEdit', [ tempPath, 'image', element.getLegacyReference() ])\n                .then(fileName => {\n                    const docPath = FileUtils.getFileNameWithoutExtension(tempPath);\n                    const editData = {\n                        docPath,\n                        tempPath,\n                        isClosed: false,\n                        isSaveInProgress: false\n                    };\n                    editData.listenerId = documentWatchManager.startListening(fileName, docPath, event => {\n                        if (event === 'closed') {\n                            this._onDocumentClose(element, editData);\n                        } else if (event === 'saved') {\n                            this._onDocumentSave(element, editData);\n                        }\n                    });\n                })\n            );\n    }\n\n    isDisabled(element) {\n        return !this._config.findUsableRepresentation(element) && !element.getCachedThumbnailPath();\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport ParagraphStyleElementConfig from 'app/js/config/elements/ParagraphStyleElementConfig';\n\nconst STYLE_REPRESENTATION_JSON_TYPE = 'application/vnd.adobe.paragraphstyle+json';\nconst STYLE_REPRESENTATION_SNIPPET_TYPE = 'application/vnd.adobe.paragraphstyle+snippet';\nconst STYLE_NAMESPACE = 'paragraphstyle';\nconst STYLE_DATA_KEY = 'data';\n\nexport default class ILSTParagraphStyleElementConfig extends ParagraphStyleElementConfig {\n\n    _setStyleInfo = function(styleData, name, id) {\n        styleData.type = 'parastyle';\n        styleData.name = name;\n        styleData.id = id;\n    }\n\n    _useParaStyle(element, operation, multiOpData) {\n        const isFirstElement = multiOpData.index === 1;\n        const isLastElement = multiOpData.index === multiOpData.length;\n\n        const representation = this._config.findUsableRepresentation(element);\n        if (!representation) {\n            return;\n        }\n\n        reportApplyMetric(representation, operation);\n        const styleName = element.name;\n        const styleId = element.id + ';' + element.modified;\n\n        let promise, styleData;\n        if (representation.type === STYLE_REPRESENTATION_JSON_TYPE) {\n            styleData = representation.getValue(STYLE_NAMESPACE, STYLE_DATA_KEY);\n            this._setStyleInfo(styleData, styleName, styleId);\n            promise = environment.execApp(operation, [ styleData, isFirstElement, isLastElement ]);\n\n        } else if (representation.type === STYLE_REPRESENTATION_SNIPPET_TYPE) {\n            promise = representation.getContentPath().then((path) => {\n                styleData = {};\n                this._setStyleInfo(styleData, styleName, styleId);\n                styleData.idmsPath = path;\n                const tempRepresentation = this._config.findUsableRepresentation(element, STYLE_REPRESENTATION_JSON_TYPE);\n                const tempStyleData = tempRepresentation.getValue(STYLE_NAMESPACE, STYLE_DATA_KEY);\n                styleData.adbeFont = tempStyleData.adbeFont;\n                styleData.fontFamily = tempStyleData.fontFamily;\n                return environment.execApp(operation, [ styleData, isFirstElement, isLastElement ]);\n            });\n        }\n        return promise;\n    }\n\n    _setParaStyle(element, multiOpData) {\n        return this._useParaStyle(element, 'setFont', multiOpData);\n    }\n\n    _addTextStyle(element, multiOpData) {\n        if (multiOpData.index === multiOpData.length) {\n            configuration.currentProduct.reportEvent('addElement', {\n                opType: 'addTextStyle',\n                elementType: 'paragraphstyle',\n                numElements: multiOpData.length\n            });\n        }\n        return this._useParaStyle(element, 'addTextStyle', multiOpData);\n    }\n\n    getApplyOperations(element, subElement, multiOpData) {\n        const layerInfo = layerSelectionManager.getLayerInfo();\n\n        // If we have no document there is no way to use a text style\n        if (!layerInfo) {\n            return [];\n        }\n\n        const operations = [];\n        if (layerInfo && layerInfo.kind === 'LayerKind.TEXT') {\n            operations.push({\n                name: 'DL_SET_PARA_STYLE_TOOLTIP',\n                icon: 'text',\n                onClick: true,\n                apply: () => this._setParaStyle(element, multiOpData),\n                displayInMenu: true\n            });\n        }\n\n        operations.push({\n            name: 'DL_ADD_AS_PARA_STYLE_TOOLTIP',\n            icon: 'pastetext',\n            allowMultiple: true,\n            apply: () => this._addTextStyle(element, multiOpData),\n            displayInMenu: true\n        });\n\n        return operations;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2016 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport TemplateElementConfig from 'app/js/config/elements/TemplateElementConfig';\n\nexport default class IDSNTemplateElementConfig extends TemplateElementConfig {\n\n    _openDocumentFromTemplate(element, representation, isStockMissing) {\n        if (isStockMissing) {\n            return environment.showError(translate(AdobeStockUtils.getStockTemplateUseError(element)));\n        }\n\n        reportApplyMetric(representation, 'useTemplate');\n        return representation.getContentPath().then(path => environment.execApp('openDocumentFromTemplate', [ path, element.name ]));\n    }\n\n    getApplyOperations(element) {\n        const templateTypes = FileUtils.getUsableTypes(element.type);\n\n        const representation = element.representations.find(rep => {\n            const isRendition = rep.relationship === 'rendition';\n            const isTemplate = this._config.isRepresentationCompatible(rep, templateTypes);\n            return !isRendition && isTemplate;\n        });\n\n        // If there's no representation because we haven't finished downloading the stock element, we still add an apply operation\n        // (which gives an error message), so the user understands what's going on.\n        const isStockMissing = !representation && this._config.isRepresentationCompatible(element.getPrimaryRepresentation(), templateTypes, true);\n        if (!representation && !isStockMissing) {\n            return [];\n        }\n\n        return [ {\n            name: 'DL_OPEN_DOC_FROM_TEMPLATE',\n            icon: 'template',\n            onDoubleClick: true,\n            apply: () => this._openDocumentFromTemplate(element, representation, isStockMissing),\n            displayInMenu: true\n        } ];\n    }\n}\n","/*************************************************************************\r\n *\r\n * ADOBE CONFIDENTIAL\r\n * ___________________\r\n *\r\n *  Copyright 2016 Adobe Systems Incorporated\r\n *  All Rights Reserved.\r\n *\r\n * NOTICE:  All information contained herein is, and remains\r\n * the property of Adobe Systems Incorporated and its suppliers,\r\n * if any.  The intellectual and technical concepts contained\r\n * herein are proprietary to Adobe Systems Incorporated and its\r\n * suppliers and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Adobe Systems Incorporated.\r\n **************************************************************************/\r\n\r\nimport configuration from 'app/js/config/configuration';\r\nimport libraryManager from 'app/js/managers/libraryManager';\r\nimport elementSelectionState from 'app/js/state/elementSelectionState';\r\nimport environment from 'app/js/environment';\r\nimport productInterface from 'app/js/interface/productInterface';\r\nimport * as FileUtils from 'app/js/utils/fileUtils';\r\nimport lockManager from 'app/js/managers/lockManager';\r\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\r\nimport { reportApplyMetric, checkFileSize, setThumbnail } from 'app/js/utils/libraryUtils';\r\nimport { translate } from 'app/js/managers/translationManager';\r\nimport TextElementConfig from 'app/js/config/elements/TextElementConfig';\r\nimport tempFileManager from 'app/js/managers/tempFileManager';\r\nimport documentWatchManager from 'app/js/managers/documentWatchManager';\r\n\r\nexport default class IDSNTextElementConfig extends TextElementConfig {\r\n\r\n    _useText(element, multiOpData, linked, withStyles, inline) {\r\n        const isFirstElement = multiOpData.index === 1;\r\n        const isLastElement = multiOpData.index === multiOpData.length;\r\n\r\n        const representation = this._config.findUsableRepresentation(element);\r\n        if (!representation) {\r\n            return;\r\n        }\r\n\r\n        if (inline) {\r\n            reportApplyMetric(representation, 'InlineText');\r\n        } else if (linked && withStyles) {\r\n            reportApplyMetric(representation, 'LinkedTextWithStyles');\r\n        } else if (withStyles) {\r\n            reportApplyMetric(representation, 'TextWithStyles');\r\n        } else {\r\n            reportApplyMetric(representation, 'TextWithoutStyles');\r\n        }\r\n        const textId = element.id + ';' + element.modified;\r\n\r\n        if (representation.type === configuration.TEXT_REPRESENTATION_JSON_TYPE) {\r\n            const textData = representation.getValue(configuration.TEXT_NAMESPACE, configuration.TEXT_DATA_KEY);\r\n            textData.id = textId;\r\n            textData.type = 'text';\r\n            return environment.execApp('placeText', [\r\n                textData,\r\n                element.getLegacyReference(),\r\n                linked,\r\n                withStyles,\r\n                inline,\r\n                isFirstElement,\r\n                isLastElement\r\n            ]);\r\n        }\r\n\r\n        if (representation.type === configuration.TEXT_REPRESENTATION_ID_SNIPPET_TYPE) {\r\n            return representation.getContentPath().then(path => {\r\n                const textData = {\r\n                    id: textId,\r\n                    type: 'text',\r\n                    idmsPath: path,\r\n                    fonts: []\r\n                };\r\n                const tempRepresentation = this._config.findUsableRepresentation(element, configuration.TEXT_REPRESENTATION_JSON_TYPE);\r\n                const tempStyleData = tempRepresentation.getValue(configuration.TEXT_NAMESPACE, configuration.TEXT_DATA_KEY);\r\n                const styles = tempStyleData.styles;\r\n                Object.keys(styles).map(key => styles[key]).forEach(styleObj => {\r\n                    if (styleObj.value.adbeFont) {\r\n                        textData.fonts.push({\r\n                            adbeFont: styleObj.value.adbeFont,\r\n                            fontFamily: styleObj.value.fontFamily\r\n                        });\r\n                    }\r\n                });\r\n                return environment.execApp('placeText', [\r\n                    textData,\r\n                    element.getLegacyReference(),\r\n                    linked,\r\n                    withStyles,\r\n                    inline,\r\n                    isFirstElement,\r\n                    isLastElement\r\n                ]);\r\n            });\r\n        }\r\n    }\r\n\r\n    _setText(element, multiOpData) {\r\n        return this._useText(element, multiOpData, true, true, false);\r\n    }\r\n\r\n    _setTextUnLinked(element, multiOpData) {\r\n        return this._useText(element, multiOpData, false, true, false);\r\n    }\r\n\r\n    _setPlainText(element, multiOpData) {\r\n        return this._useText(element, multiOpData, false, false, false);\r\n    }\r\n\r\n    _setTextInline(element, multiOpData) {\r\n        return this._useText(element, multiOpData, false, true, true);\r\n    }\r\n\r\n    getApplyOperations(element, subElement, multiOpData) {\r\n        const layerInfo = layerSelectionManager.getLayerInfo();\r\n\r\n        // If we have no document there is no way to use a text\r\n        if (!layerInfo) {\r\n            return [];\r\n        }\r\n\r\n        if (layerInfo.canBringTextInline === true) {\r\n            return [ {\r\n                name: 'DL_ADD_TEXT_INLINE_ID',\r\n                icon: 'text',\r\n                onClick: false,\r\n                apply: () => this._setTextInline(element, multiOpData),\r\n                displayInMenu: true\r\n            } ];\r\n        }\r\n\r\n        if (!layerInfo.noDocState) {\r\n            return [ {\r\n                name: 'DL_ADD_TEXT_LINKED_ID',\r\n                icon: 'text',\r\n                onClick: false,\r\n                apply: () => this._setText(element, multiOpData),\r\n                displayInMenu: true,\r\n                allowMultiple: true\r\n            }, {\r\n                name: environment.isWindowsOS() ? 'DL_ADD_TEXT_UNLINKED_ID_WIN' : 'DL_ADD_TEXT_UNLINKED_ID_MAC',\r\n                icon: 'text',\r\n                onClick: false,\r\n                apply: () => this._setTextUnLinked(element, multiOpData),\r\n                displayInMenu: true,\r\n                allowMultiple: true\r\n            }, {\r\n                name: 'DL_ADD_TEXT_UNLINKED_NOSTYLES',\r\n                icon: 'text',\r\n                onClick: false,\r\n                apply: () => this._setPlainText(element, multiOpData),\r\n                displayInMenu: true,\r\n                allowMultiple: true\r\n            } ];\r\n        }\r\n\r\n        return [];\r\n    }\r\n\r\n    _getLockId(element) {\r\n        return 'documentLock_' + element.id;\r\n    }\r\n\r\n    _onDocumentClose(element, editData) {\r\n        const lockId = this._getLockId(element);\r\n        lockManager.obtainLock(lockId, () => {\r\n            documentWatchManager.stopListening(editData.listenerId);\r\n            editData.isClosed = true;\r\n            if (editData.isSaveInProgress === false) {\r\n                tempFileManager.deleteTempFile(editData.tempPath);\r\n                FileUtils.deleteFile(editData.docPath);\r\n            }\r\n\r\n            productInterface.elementEditCompleted(element);\r\n            lockManager.releaseLock(lockId);\r\n        });\r\n    }\r\n\r\n    _onDocumentSave(element, editData) {\r\n        // Prevent save from updating library, if the asset is too big\r\n        if (!checkFileSize(editData.tempPath)) {\r\n            return;\r\n        }\r\n\r\n        editData.isSaveInProgress = true;\r\n        const pngPath = FileUtils.getFileNameWithoutExtension(editData.tempPath) + '.png';\r\n\r\n        if (!FileUtils.existsFile(editData.tempPath) || !FileUtils.existsFile(pngPath)) {\r\n            editData.isSaveInProgress = false;\r\n            return;\r\n        }\r\n\r\n        // Check if the library exists - if it was deleted, switch to the current library\r\n        let library = element.library;\r\n        const libraryName = library.name;\r\n        const isDeleted = !library || library.isDeletedLocally;\r\n        let isRecovered = false;\r\n\r\n        if (isDeleted || !library.isWritable) {\r\n            library = libraryManager.getRecoveryLibrary(library.name);\r\n\r\n            if (!library) {\r\n                // There's no recovery library, so don't do anything\r\n                return;\r\n            }\r\n            isRecovered = true;\r\n        }\r\n\r\n        const lockId = this._getLockId(element);\r\n        lockManager.obtainLock(lockId, () => {\r\n\r\n            // If the element we're editing was deleted, we recreate it as a new element, so the changes aren't lost.\r\n            // Otherwise, we just remove the existing representations so we can add the new ones\r\n            if (element.isDeletedLocally || isRecovered) {\r\n                element = library.createElement(element.name, element.type);\r\n            } else {\r\n                element.beginOperation();\r\n                element.removeAllRepresentations();\r\n            }\r\n\r\n            let getTextPromise;\r\n            if (FileUtils.existsFile(editData.docPath)) {\r\n                getTextPromise = environment.execApp('getTextInfoFromDocument', [ editData.docPath ]);\r\n            } else {\r\n                getTextPromise = environment.execApp('getTextInfoFromSnippet', [ editData.tempPath ]);\r\n            }\r\n            getTextPromise.then(textData => {\r\n                const promises = [];\r\n                const assetMimeType = FileUtils.fileNameToMimeType(editData.tempPath, element.type);\r\n                const newRepresentation = element.createRepresentation(assetMimeType, 'primary');\r\n                promises.push(newRepresentation.setContentFromPath(editData.tempPath));\r\n\r\n                const textDataObj = JSON.parse(textData);\r\n                const jsonRepresentation = element.createRepresentation(configuration.TEXT_REPRESENTATION_JSON_TYPE, 'rendition');\r\n                jsonRepresentation.setValue(configuration.TEXT_NAMESPACE, configuration.TEXT_DATA_KEY, textDataObj.textInfo);\r\n\r\n                if (pngPath && FileUtils.existsFile(pngPath)) {\r\n                    promises.push(setThumbnail(element, configuration.IMAGE_THUMBNAIL_SIZE, pngPath));\r\n                }\r\n\r\n                // Final cleanup after saving.\r\n                const done = () => {\r\n                    productInterface.sendElementUpdated(newRepresentation);\r\n\r\n                    const operationsFinished = element.endOperation();\r\n\r\n                    lockManager.releaseLock(lockId);\r\n\r\n                    if (isRecovered) {\r\n                        elementSelectionState.revealElement(element);\r\n\r\n                        if (isDeleted) {\r\n                            environment.showError(translate('DL_WARNING_RECOVERED_FROM_DELETED', { recoveryLibraryName: library.name }));\r\n                        } else {\r\n                            environment.showError(translate('DL_WARNING_RECOVERED_FROM_READONLY', { recoveryLibraryName: library.name, originalLibraryName: libraryName }));\r\n                        }\r\n                    }\r\n\r\n                    operationsFinished.then(() => {\r\n                        if (editData.isClosed) { //do we need it.\r\n                            tempFileManager.deleteTempFile(editData.tempPath);\r\n                        } else {\r\n                            tempFileManager.updateTempFile(newRepresentation, editData.tempPath);\r\n                        }\r\n                        editData.isSaveInProgress = false;\r\n                    });\r\n                };\r\n\r\n                Promise.all(promises).then(done, done);\r\n            });\r\n        });\r\n    }\r\n\r\n    defaultEditOperation(element) {\r\n        if (configuration.IS_APP_IN_TOUCH_MODE === true) {\r\n            return;\r\n        }\r\n\r\n        if (!this._config.isEditable(element)) {\r\n            // Returning false, so we fall back to the edit original workflow.\r\n            return false;\r\n        }\r\n\r\n        // At this point, we're guaranteed to have a primary representation that is of an editable type\r\n        const representation = element.getPrimaryRepresentation();\r\n\r\n        // Can't modify the representation directly - need to copy it\r\n        tempFileManager.getTempFile(representation)\r\n            .then(tempPath => {\r\n                const fonts = [];\r\n                const tempRepresentation = this._config.findUsableRepresentation(element, configuration.TEXT_REPRESENTATION_JSON_TYPE);\r\n                const tempStyleData = tempRepresentation.getValue(configuration.TEXT_NAMESPACE, configuration.TEXT_DATA_KEY);\r\n                const styles = tempStyleData.styles;\r\n\r\n                Object.keys(styles).map(key => styles[key]).forEach(styleObj => {\r\n                    if (styleObj.value.adbeFont) {\r\n                        fonts.push({\r\n                            adbeFont: styleObj.value.adbeFont,\r\n                            fontFamily: styleObj.value.fontFamily\r\n                        });\r\n                    }\r\n                });\r\n\r\n                return environment.execApp('openAssetForEdit', [ tempPath, 'text', element.getLegacyReference(), fonts ])\r\n                    .then(fileName => {\r\n                        const docPath = FileUtils.getFileNameWithoutExtension(tempPath);\r\n                        const editData = {\r\n                            docPath,\r\n                            tempPath,\r\n                            isClosed: false,\r\n                            isSaveInProgress: false\r\n                        };\r\n                        editData.listenerId = documentWatchManager.startListening(fileName, docPath, event => {\r\n                            if (event === 'closed') {\r\n                                this._onDocumentClose(element, editData);\r\n                            } else if (event === 'saved') {\r\n                                this._onDocumentSave(element, editData);\r\n                            }\r\n                        });\r\n                    });\r\n            });\r\n    }\r\n\r\n    getDragData(element) {\r\n        // Get the representation to use, and the path to it\r\n        const usableRepresentation = this._config.findUsableRepresentation(element);\r\n        if (!usableRepresentation) {\r\n            return;\r\n        }\r\n\r\n        const dragData = {};\r\n        if (usableRepresentation.type === configuration.TEXT_REPRESENTATION_ID_SNIPPET_TYPE) {\r\n            dragData.fonts = [];\r\n            const tempRepresentation = this._config.findUsableRepresentation(element, configuration.TEXT_REPRESENTATION_JSON_TYPE);\r\n            const tempStyleData = tempRepresentation.getValue(configuration.TEXT_NAMESPACE, configuration.TEXT_DATA_KEY);\r\n            const styles = tempStyleData.styles;\r\n            Object.keys(styles).map(key => styles[key]).forEach(styleObj => {\r\n                if (styleObj.value.adbeFont) {\r\n                    dragData.fonts.push({\r\n                        adbeFont: styleObj.value.adbeFont,\r\n                        fontFamily: styleObj.value.fontFamily\r\n                    });\r\n                }\r\n            });\r\n        }\r\n        return dragData;\r\n    }\r\n}\r\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { reportApplyMetric, createElementExtraMetrics } from 'app/js/utils/libraryUtils';\nimport TextStyleElementConfig from 'app/js/config/elements/TextStyleElementConfig';\nimport * as TypekitUtils from 'app/js/utils/typekitUtils';\n\nconst STYLE_REPRESENTATION_JSON_TYPE = 'application/vnd.adobe.characterstyle+json';\nconst STYLE_REPRESENTATION_SNIPPET_TYPE = 'application/vnd.adobe.characterstyle+snippet';\nconst STYLE_NAMESPACE = 'characterstyle';\nconst STYLE_DATA_KEY = 'data';\n\nexport default class IDSNTextStyleElementConfig extends TextStyleElementConfig {\n\n    _setStyleInfo(styleData, name, id) {\n        styleData.type = 'charstyle';\n        styleData.name = name;\n        styleData.id = id;\n    }\n\n    _useTextStyle(element, multiOpData, operation) {\n        const isFirstElement = multiOpData.index === 1;\n        const isLastElement = multiOpData.index === multiOpData.length;\n\n        const representation = this._config.findUsableRepresentation(element);\n        if (!representation) {\n            return;\n        }\n\n        const font = TypekitUtils.checkTypekitFont(element);\n        if (font && font.id) {\n            reportApplyMetric(representation, operation, null, { event: { value: 'typekit' } });\n        } else {\n            reportApplyMetric(representation, operation);\n        }\n\n        const styleName = element.name;\n        const styleId = element.id + ';' + element.modified;\n\n        if (representation.type === STYLE_REPRESENTATION_JSON_TYPE) {\n            const styleData = representation.getValue(STYLE_NAMESPACE, STYLE_DATA_KEY);\n            this._setStyleInfo(styleData, styleName, styleId);\n            return environment.execApp(operation, [ styleData, isFirstElement, isLastElement ]);\n        }\n\n        if (representation.type === STYLE_REPRESENTATION_SNIPPET_TYPE) {\n            return representation.getContentPath().then(path => {\n                const styleData = {};\n                this._setStyleInfo(styleData, styleName, styleId);\n                styleData.idmsPath = path;\n                const tempRepresentation = this._config.findUsableRepresentation(element, STYLE_REPRESENTATION_JSON_TYPE);\n                const tempStyleData = tempRepresentation.getValue(STYLE_NAMESPACE, STYLE_DATA_KEY);\n                styleData.adbeFont = tempStyleData.adbeFont;\n                styleData.fontFamily = tempStyleData.fontFamily;\n                return environment.execApp(operation, [ styleData, isFirstElement, isLastElement ]);\n            });\n        }\n    }\n\n    _setTextStyle(element, multiOpData) {\n        return this._useTextStyle(element, multiOpData, 'setFont');\n    }\n\n    _addTextStyle(element, multiOpData) {\n        if (multiOpData.index === multiOpData.length) {\n            configuration.currentProduct.reportEvent('addElement', {\n                opType: 'addTextStyle',\n                elementType: 'characterstyle',\n                numElements: multiOpData.length\n            });\n        }\n        return this._useTextStyle(element, multiOpData, 'addTextStyle');\n    }\n\n    getApplyOperations(element, subElement, multiOpData) {\n        const layerInfo = layerSelectionManager.getLayerInfo();\n\n        // If we have no document there is no way to use a text style\n        if (!layerInfo) {\n            return [];\n        }\n\n        const operations = [];\n        if (layerInfo && layerInfo.kind === 'LayerKind.TEXT') {\n            operations.push({\n                name: 'DL_SET_TEXT_STYLE_TOOLTIP',\n                icon: 'text',\n                onClick: true,\n                apply: () => this._setTextStyle(element, multiOpData),\n                displayInMenu: true\n            });\n        }\n\n        operations.push({\n            name: 'DL_ADD_AS_TEXT_STYLE_TOOLTIP',\n            icon: 'pastetext',\n            allowMultiple: true,\n            apply: () => this._addTextStyle(element, multiOpData),\n            displayInMenu: true\n        });\n\n        return operations;\n    }\n\n    _addTextStyleElement(layerInfo, library, opType) {\n\n        // If for some reason we don't have layerInfo then we just need to break\n        if (!layerInfo || layerInfo.kind !== 'LayerKind.TEXT') {\n            return Promise.reject('not a text layer');\n        }\n\n        return environment.execApp('getCharStyleInfo').then(data => {\n            const styleData = JSON.parse(data);\n            if (configuration.currentProduct.config?.copyTempFileIfNecessary) {\n                styleData.idmsPath = styleData.idmsPath && configuration.currentProduct.config.copyTempFileIfNecessary(styleData.idmsPath);\n                styleData.previewPath = styleData.previewPath && configuration.currentProduct.config.copyTempFileIfNecessary(styleData.previewPath);\n            }\n\n            const newElement = createElementExtraMetrics(library, styleData.styleName, configuration.CHARACTER_STYLE_ELEMENT_TYPE, {\n                opType\n            });\n\n            const updatePromises = [];\n            if (styleData.idmsPath) {\n                const primaryRepresentation = newElement.createRepresentation(STYLE_REPRESENTATION_SNIPPET_TYPE, 'primary');\n                updatePromises.push(primaryRepresentation.setContentFromPath(styleData.idmsPath));\n\n                const newRepresentation = newElement.createRepresentation(STYLE_REPRESENTATION_JSON_TYPE, 'rendition');\n                newRepresentation.setValue(STYLE_NAMESPACE, STYLE_DATA_KEY, styleData.styleInfo);\n            } else {\n                const newRepresentation = newElement.createRepresentation(STYLE_REPRESENTATION_JSON_TYPE, 'primary');\n                newRepresentation.setValue(STYLE_NAMESPACE, STYLE_DATA_KEY, styleData.styleInfo);\n            }\n\n            if (styleData.previewPath) {\n                const newRendition = newElement.createRepresentation('image/png', 'rendition');\n                updatePromises.push(newRendition.setContentFromPath(styleData.previewPath));\n            }\n\n            return Promise.all(updatePromises)\n                .then(() => {\n                    const cleanupPromises = [];\n                    if (styleData.previewPath) {\n                        cleanupPromises.push(newElement.setThumbnailCache(configuration.CHARACTER_STYLE_THUMBNAIL_SIZE, styleData.previewPath));\n                    }\n                    cleanupPromises.push(newElement.endOperation());\n\n                    Promise.all(cleanupPromises).then(() => {\n                        if (styleData.idmsPath) {\n                            FileUtils.deleteFile(styleData.idmsPath);\n                        }\n\n                        if (styleData.previewPath) {\n                            FileUtils.deleteFile(styleData.previewPath);\n                        }\n                    });\n\n                    return newElement;\n                })\n                .catch(() => {\n                    library.removeElement(newElement, true);\n                    return Promise.reject('Could not create element.');\n                });\n        });\n    }\n\n    getAddOperations(layerInfo) {\n\n        if (!layerInfo || !layerInfo.text || layerInfo.isAppliedCharStyleSupported === false) {\n            return [];\n        }\n\n        const addTextStyle = (library, opType) => new Promise(resolve => {\n            // We need to get the most current Character Style data because the user could have changed it since last selection.\n            layerSelectionManager.updateLayerInfo().then(() => resolve(this._addTextStyleElement(layerInfo, library, opType)));\n        });\n\n        // Note: for all layers, we display the operation, just disable it if it's not a text layer\n        return [ {\n            name: 'DL_ADD_TEXT_STYLE_NAME',\n            order: 2,\n            icon: 'AddCharacterStyle',\n            apply: addTextStyle\n        } ];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport environment from 'app/js/environment';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport dialogManager from 'app/js/managers/dialogManager';\nimport debugLog from 'app/js/utils/debugLog';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport viewState from 'app/js/state/viewState';\nimport { checkLibraryWritable, getElementModifiedTime, setThumbnail } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport ApplicationFontManager from 'app/js/managers/utils/ApplicationFontManager';\n\n// Import all the element type configuration overrides\nimport AnimationElementConfig from './elements/AnimationElementConfig';\nimport ColorElementConfig from './elements/ColorElementConfig';\nimport ColorThemeElementConfig from './elements/ColorThemeElementConfig';\nimport DefaultConfigs from 'app/js/config/elements/DefaultConfigs';\nimport FontElementConfig from 'app/applications/CEP/CEPFontElementConfig';\nimport ImageElementConfig from './elements/ImageElementConfig';\nimport ParagraphStyleElementConfig from './elements/ParagraphStyleElementConfig';\nimport TemplateElementConfig from './elements/TemplateElementConfig';\nimport TextElementConfig from './elements/TextElementConfig';\nimport TextStyleElementConfig from './elements/TextStyleElementConfig';\n\nconst _fs = () => window.nodeRequire('fs');\n\nexport function getAppConfiguration() {\n    this.config = {};\n    this.config.code = 'IDSN';\n    this.config.fullName = 'InDesign';\n    this.config.translationSuffix = 'ID';\n    this.config.dragDropSource = 'com.adobe.indesign';\n    this.config.offsetSelectMenu = true;\n    this.config.stateMethod = 'getCurrentStates';\n    this.config.usesEscapedFilePathsInEvents = true;\n\n    this.config.themes = {\n        '323232': 'darker', // 16.1\n        '535353': 'dark', // 16.1\n        'b8b8b8': 'light', // 16.1\n        'f0f0f0': 'lighter' // 16.1\n    };\n\n    // In the global CSS, certain app styles are bound to the classname 'spectrum-enabled'.\n    this.config.legacySpectrumEnabled = true;\n\n    this.config.defaultTheme = 'dark';\n\n    if (environment.getExtensionID() === 'com.adobe.DesignLibraries.touch') {\n        configuration.IS_APP_IN_TOUCH_MODE = true;\n        configuration.CONTEXT_MENUS_ENABLED = false;\n    } else {\n        configuration.IS_APP_IN_TOUCH_MODE = false;\n        configuration.CONTEXT_MENUS_ENABLED = true;\n    }\n\n    this.config.elementTypes = [\n        ColorElementConfig,\n        ColorThemeElementConfig,\n        TextElementConfig,\n        TextStyleElementConfig,\n        FontElementConfig,\n        ParagraphStyleElementConfig,\n        ImageElementConfig,\n        TemplateElementConfig,\n        DefaultConfigs.ComponentElementConfig,\n        AnimationElementConfig,\n        DefaultConfigs.PatternElementConfig,\n        DefaultConfigs.BrushElementConfig,\n        DefaultConfigs.VideoElementConfig,\n        DefaultConfigs.LookElementConfig,\n        DefaultConfigs.CapsuleElementConfig,\n        DefaultConfigs.ThreeDElementConfig,\n        DefaultConfigs.LayerStyleElementConfig,\n        DefaultConfigs.LightElementConfig,\n        DefaultConfigs.MaterialElementConfig,\n        DefaultConfigs.GradientElementConfig,\n        DefaultConfigs.AudioElementConfig,\n        DefaultConfigs.ChannelElementConfig,\n        DefaultConfigs.ImageGuidelineElementConfig,\n        DefaultConfigs.UnsupportedElementConfig\n    ];\n\n    // This defines the element categories that are collapsed by default in the UI - change this to suite your application.\n    this.config.collapsedTypes = [\n        configuration.PATTERN_ELEMENT_TYPE,\n        configuration.BRUSH_ELEMENT_TYPE,\n        configuration.VIDEO_ELEMENT_TYPE,\n        configuration.LOOK_ELEMENT_TYPE,\n        configuration.CAPSULE_ELEMENT_TYPE,\n        configuration.THREE_D_ELEMENT_TYPE,\n        configuration.LAYER_STYLE_ELEMENT_TYPE,\n        configuration.LIGHT_ELEMENT_TYPE,\n        configuration.MATERIAL_ELEMENT_TYPE,\n        configuration.GRADIENT_ELEMENT_TYPE,\n        configuration.AUDIO_ELEMENT_TYPE,\n        configuration.CHANNEL_ELEMENT_TYPE,\n        configuration.IMAGE_GUIDELINE_ELEMENT_TYPE,\n        configuration.UNSUPPORTED_ELEMENT_TYPE\n    ];\n    this.config.isCaptureEnabled = false; // Set to true Indesign 17.x onwards\n    // In Indesign these modules show up in Capture Panel in the order specified here\n    this.config.captureModules = [ 'Colors', 'Shapes', 'Type' ];\n\n    this.config.includeGuidInTempFileName = true;\n\n    this.config.tempFolder = () => {\n        // if InDesign 2023 - override the temp folder so it's in a writable location\n        if (this.config.majorVersion === 18) { // 18 = Indesign 2023\n            return configuration.strTempFolder.replace(/TemporaryItems/, '').replace(/\\/private/, '');\n        }\n        return configuration.strTempFolder + '/';\n    };\n\n    this.config.copyTempFileIfNecessary = (path) => {\n        let newPath = path;\n\n        // if InDesign 2023, we will get a path that includes /TemporaryItems, which is not writable\n        // in that case, copy the file to a writable location and return the new path\n        if (this.config.majorVersion === 18 && newPath.includes('TemporaryItems')) {\n            try {\n                newPath = newPath.replace(/\\/TemporaryItems/, '');\n                _fs().copyFileSync(path, newPath);\n            } catch (e) {\n                debugLog.log('Error copying file: ' + e);\n            }\n        }\n        return newPath;\n    };\n\n    const resetPanelView = () => {\n        //Reset the panel in case it is in Relink/Place mode.\n        if (viewState.isRelinkLayerMode()) {\n            viewState.resetMode();\n        }\n    };\n\n    const resetPanelState = () => {\n        resetPanelView();\n    };\n\n    const updateLibrariesInfo = () => {\n        // libraryManager.libraries is already sorted alphabetically\n        const libraries = libraryManager.libraries.filter(library => !library.isDeletedFromServer);\n        const names = libraries.map(library => ({\n            name: library.name,\n            id: library.id,\n            writable: library.isWritable\n        }));\n\n        //Get the current library\n        const currentLibrary = libraryManager.currentLibrary;\n        const current = currentLibrary ? libraries.indexOf(currentLibrary) : -1;\n\n        environment.execApp('setLibraryCollection', [ JSON.stringify({ names, current }) ]);\n    };\n\n    this.init = function() {\n        FileUtils.extendUsableTypes(configuration.IMAGE_ELEMENT_TYPE, [ 'application/vnd.adobe.indesign-idms',\n            'image/png',\n            'image/jpeg',\n            'image/jpg',\n            'image/gif',\n            'image/bmp',\n            'application/photoshop',\n            'application/photoshop.large',\n            'image/vnd.adobe.photoshop',\n            'application/illustrator',\n            'application/pdf',\n            'image/tiff' ]);\n        FileUtils.extendUsableTypes(configuration.COLOR_THEME_ELEMENT_TYPE, [ 'application/vnd.adobe.colortheme+json' ]);\n        FileUtils.extendUsableTypes(configuration.PARAGRAPH_STYLE_ELEMENT_TYPE, [ 'application/vnd.adobe.paragraphstyle+json', 'application/vnd.adobe.paragraphstyle+snippet' ]);\n        FileUtils.extendUsableTypes(configuration.CHARACTER_STYLE_ELEMENT_TYPE, [ 'application/vnd.adobe.characterstyle+json', 'application/vnd.adobe.characterstyle+snippet' ]);\n        FileUtils.extendUsableTypes(configuration.FONT_ELEMENT_TYPE, [ 'application/vnd.adobe.font+json' ]);\n        FileUtils.extendUsableTypes(configuration.TEMPLATE_ELEMENT_TYPE, [ 'application/vnd.adobe.indesign.template' ]);\n        FileUtils.extendUsableTypes(configuration.TEXT_ELEMENT_TYPE, [ 'application/vnd.adobe.text+json', 'application/vnd.adobe.indesign-idms-text' ]);\n        FileUtils.extendUsableTypes(configuration.ANIMATION_ELEMENT_TYPE, [ 'application/vnd.adobe.animate-xfl+zip', 'application/vnd.adobe.indesign-idms' ]);\n        FileUtils.extendUsableTypes(configuration.COMPONENT_ELEMENT_TYPE, [ 'image/png' ]);\n\n        FileUtils.extendEditableTypes(configuration.COLOR_ELEMENT_TYPE, [ 'application/vnd.adobe.color+json' ]);\n        FileUtils.extendEditableTypes(configuration.IMAGE_ELEMENT_TYPE, [ 'application/vnd.adobe.indesign-idms' ]);\n        FileUtils.extendEditableTypes(configuration.TEXT_ELEMENT_TYPE, [ 'application/vnd.adobe.indesign-idms-text' ]);\n\n        environment.execApp('setThumbnailExportOptions');\n\n        environment.execApp('getTooltipState').then(function(tooltipState) {\n            configuration.showTooltips = tooltipState;\n        });\n\n        environment.exec('CORE', 'getApplicationVersion', []).then((version) => {\n            try {\n                const majorVersion = parseInt(version.split('.')[0]);\n                environment.execApp('setHSBSupport', [ majorVersion >= 16 ]);\n                this.config.isCaptureEnabled = majorVersion >= 17;\n                this.config.majorVersion = majorVersion;\n            } catch (e) {\n                //do nothing\n            }\n        });\n        this.startEventListener();\n\n        libraryManager.waitForInitialLoad().then(function() {\n            resetPanelState();\n\n            //Report to app that we are fully loaded\n            const event = environment.createEvent('com.adobe.DesignLibraries.events.READY', 'APPLICATION');\n            environment.dispatchEvent(event);\n        });\n\n        //We listen to libraryList to track changes (add/remove/rename) to the list of libraries, and sync that to the app.\n        libraryManager.addListener('libraryList', function() {\n            updateLibrariesInfo();\n        });\n        libraryManager.addListener('currentLibrary', function() {\n            updateLibrariesInfo();\n        });\n    };\n    // Use mouse co-ordinates on Mac to detect a successful drop while in Adobe Stock search mode\n    this.config.useMouseEventToDetectDrop = true;\n\n    //The host app (IDSN) context in which the element creation workflow was invoked.\n    //Used for appropriate highbeam logging in the app.\n    // NOTE: May be worth replacing with libraryUtils.createElementExtraMetrics().\n    let elementCreationContext;\n\n    const setCreateElementContext = data => {\n        elementCreationContext = undefined;\n        if (data instanceof Object && Object.prototype.hasOwnProperty.call(data, 'exportContext')) {\n            elementCreationContext = data.exportContext;\n        } else if (data instanceof String) {\n            elementCreationContext = data;\n        }\n    };\n\n    const resetCreateElementContext = () => elementCreationContext = undefined;\n    const getCreateElementContext = () => elementCreationContext !== undefined ? elementCreationContext : '';\n\n    this.reportEvent = function(eventName, properties) {\n        debugLog.log('Metric reported to ID');\n        properties.event = eventName;\n        if (eventName === 'createElement') {\n            properties.creationContext = getCreateElementContext();\n        }\n        const event = environment.createEvent('com.adobe.DesignLibraries.events.LOGPIP', 'APPLICATION');\n        event.data = JSON.stringify(properties);\n        environment.dispatchEvent(event);\n        delete properties.event;\n        if (eventName === 'createElement') {\n            delete properties.creationContext;\n        }\n    };\n\n    this.getUserData = function(callback) {\n        environment.execApp('getUserData').then(function(strReturnValue) {\n            if (strReturnValue && strReturnValue !== 'undefined') {\n                callback(JSON.parse(strReturnValue));\n                return;\n            }\n\n            return callback();\n        });\n    };\n\n    const onLayerUpdateEvent = () => {\n        layerSelectionManager.handleSelectionChange();\n    };\n\n    const onPreferencesUpdateEvent = () => {\n        environment.execApp('getTooltipState').then(function(tooltipState) {\n            configuration.showTooltips = tooltipState;\n        });\n    };\n\n    this.fontManager = new ApplicationFontManager();\n    // Invalidate when the font list changes, or when the document changes,\n    // since InDesign supports document fonts.\n    const onFontListUpdateEvent = () => this.fontManager.invalidateFontList();\n    const onDocumentActivateEvent = () => this.fontManager.invalidateFontList();\n    const onDocumentDeactivateEvent = () => resetPanelView();\n\n    const switchLibrary = event => {\n        const libraryId = event.data;\n        if (libraryId !== '' && libraryId !== undefined) {\n            const library = libraryManager.getLibraryById(libraryId);\n            if (library) {\n                libraryManager.currentLibrary = library;\n            }\n        }\n    };\n\n    const onNewAssetToMigrateEvent = event => {\n        const obj = event.data;\n\n        const assetPath = obj.idmsPath;\n        const pdfPath = obj.pdfPath;\n        const pngPath = obj.pngPath;\n\n        if (!FileUtils.existsFile(assetPath) || !FileUtils.existsFile(pdfPath)) {\n            return;\n        }\n\n        let library;\n\n        //Check if first asset\n        if (Object.prototype.hasOwnProperty.call(obj, 'libraryId')) {\n            //See if we need to create a new cloud library.\n            if (obj.libraryId !== '') {\n                //Search for existing.\n                library = libraryManager.getLibraryById(obj.libraryId);\n                if (library) {\n                    libraryManager.currentLibrary = library;\n                }\n            }\n        } else {\n            library = libraryManager.currentLibrary;\n        }\n\n        if (!library && !obj.libraryName) {\n            // Get most recently used libraries\n            library = libraryManager.recentLibraries[0];\n        }\n\n        if (!library) {\n            const libraryName = obj.libraryName || translate('DL_DEFAULT_LIBRARY_NAME');\n            const newLibrary = libraryManager.createLibrary(libraryName);\n            if (!newLibrary) {\n                //Could not create library, so can't proceed\n                return;\n            }\n\n            libraryManager.currentLibrary = newLibrary;\n            library = libraryManager.currentLibrary;\n        }\n\n        if (!checkLibraryWritable(library)) {\n            return;\n        }\n\n        const element = library.createElement(obj.assetName, configuration.IMAGE_ELEMENT_TYPE);\n\n        // Update the representations\n        const promises = [];\n        const assetMimeType = FileUtils.fileNameToMimeType(assetPath, configuration.IMAGE_ELEMENT_TYPE);\n        const newRepresentation = element.createRepresentation(assetMimeType, 'primary');\n        promises.push(newRepresentation.setContentFromPath(assetPath));\n\n        const pdfMimeType = FileUtils.fileNameToMimeType(pdfPath, configuration.IMAGE_ELEMENT_TYPE);\n        const pdfRepresentation = element.createRepresentation(pdfMimeType, 'rendition');\n        promises.push(pdfRepresentation.setContentFromPath(pdfPath));\n\n        if (pngPath && FileUtils.existsFile(pngPath)) {\n            promises.push(setThumbnail(element, configuration.IMAGE_THUMBNAIL_SIZE, pngPath));\n        }\n\n        Promise.all(promises).then(function() {\n            element.endOperation();\n\n        }, function() {\n            library.removeElement(element, true);\n        });\n    };\n\n    const onCreateNewLibraryEvent = () => {\n        // Invoke create new library\n        // NOTE: This won't do anything if you're logged out (i.e. you don't have a library collection)\n        dialogManager.openDialog('createLibrary');\n    };\n\n    const acquireLibrary = (libraryID, createNew) => {\n\n        if (createNew) {\n            //Create new.\n            const libraryName = translate('DL_DEFAULT_LIBRARY_NAME');\n            return libraryManager.createLibrary(libraryName);\n        }\n\n        let library;\n        if (libraryID) {\n            //Look for existing.\n            library = libraryManager.getLibraryById(libraryID);\n        }\n\n        if (!library) {\n            //Get current library or most recent library if not supposed to create new.\n            library = libraryManager.currentLibrary || libraryManager.recentLibraries[0];\n        }\n\n        if (library && checkLibraryWritable(library)) {\n            //Set it as current.\n            libraryManager.currentLibrary = library;\n            library = libraryManager.currentLibrary;\n\n            return library;\n        }\n\n        return;\n    };\n\n    const COLOR_THEME_DATA_KEY = 'data',\n        COLOR_THEME_NAMESPACE = 'colortheme',\n        COLOR_THEME_REPRESENTATION_TYPE = 'application/vnd.adobe.colortheme+json';\n\n    const onCreateNewColorThemeEvent = event => {\n        const library = acquireLibrary();\n\n        if (!library) {\n            return;\n        }\n\n        //create the color theme representation\n        const obj = event.data;\n        const rep = {};\n        const colorThemeName = obj.themeName;\n\n        if (Object.prototype.hasOwnProperty.call(obj, 'rule')) {\n            rep.rule = obj.rule;\n            rep.baseSwatchIndex = obj.baseColorIndex;\n        }\n        if (Object.prototype.hasOwnProperty.call(obj, 'mood')) {\n            rep.mood = obj.mood;\n        }\n\n        rep.swatches = [];\n\n        const colorList = obj.assetList;\n        const promises = colorList.map(colorObj => {\n            return environment.execApp('getColorDataFromJSON', [ JSON.stringify(colorObj) ]).then(data => {\n                const colorData = JSON.parse(data);\n                rep.swatches.push(colorData);\n            });\n        });\n\n        Promise.all(promises).then(() => {\n            //create a new colortheme element\n            setCreateElementContext(obj);\n            const newElement = library.createElement(colorThemeName, configuration.COLOR_THEME_ELEMENT_TYPE);\n            const newRepresentation = newElement.createRepresentation(COLOR_THEME_REPRESENTATION_TYPE, 'primary');\n            newRepresentation.setValue(COLOR_THEME_NAMESPACE, COLOR_THEME_DATA_KEY, rep);\n\n            resetCreateElementContext();\n            newElement.endOperation();\n        });\n    };\n\n    const onCreateNewColorsEvent = event => {\n\n        const libraryID = event.data.libraryID;\n        const createNew = !!event.data.createNewLibrary;\n        const library = acquireLibrary(libraryID, createNew);\n        if (!library) {\n            return;\n        }\n\n        //Colors to add\n        const colors = [];\n        const colorList = event.data.colorList;\n        const promises = colorList.map(colorObj => {\n            return environment.execApp('getColorDataFromJSON', [ JSON.stringify(colorObj) ]).then(data => {\n                colors.push({\n                    name: colorObj.colorName,\n                    data: JSON.parse(data)\n                });\n            });\n        });\n\n        Promise.all(promises).then(() => {\n            const createColorElement = color => {\n                //create a new color element\n                const newElement = library.createElement(color.name, configuration.COLOR_ELEMENT_TYPE);\n\n                //add representations\n                color.data.forEach((rep, index) => {\n                    const relationship = index === 0 ? 'primary' : 'rendition';\n                    const newRepresentation = newElement.createRepresentation(configuration.COLOR_REPRESENTATION_TYPE, relationship);\n                    newRepresentation.setValue(configuration.COLOR_NAMESPACE, configuration.COLOR_DATA_KEY, rep);\n                });\n\n                newElement.endOperation();\n            };\n\n            setCreateElementContext(event.data);\n            for (let i = 0; i < colors.length; ++i) {\n                createColorElement(colors[i]);\n            }\n\n            resetCreateElementContext();\n        });\n    };\n\n    const CHAR_STYLE_DATA_KEY = 'data',\n        CHAR_STYLE_NAMESPACE = 'characterstyle',\n        CHAR_STYLE_REPRESENTATION_JSON_TYPE = 'application/vnd.adobe.characterstyle+json',\n        CHAR_STYLE_REPRESENTATION_SNIPPET_TYPE = 'application/vnd.adobe.characterstyle+snippet';\n\n    const PARA_STYLE_DATA_KEY = 'data',\n        PARA_STYLE_NAMESPACE = 'paragraphstyle',\n        PARA_STYLE_REPRESENTATION_JSON_TYPE = 'application/vnd.adobe.paragraphstyle+json',\n        PARA_STYLE_REPRESENTATION_SNIPPET_TYPE = 'application/vnd.adobe.paragraphstyle+snippet';\n\n    const RENDITION_SIZE = 104;\n\n    const onCreateNewTypeStylesEvent = (event, isCharStyle) => {\n\n        const libraryID = event.data.libraryID;\n        const createNew = !!event.data.createNewLibrary;\n        const library = acquireLibrary(libraryID, createNew);\n        if (!library) {\n            return;\n        }\n\n        let STYLE_DATA_KEY,\n            STYLE_NAMESPACE,\n            STYLE_ELEMENT_TYPE,\n            STYLE_REPRESENTATION_JSON_TYPE,\n            STYLE_REPRESENTATION_SNIPPET_TYPE;\n\n        if (isCharStyle) {\n            STYLE_DATA_KEY = CHAR_STYLE_DATA_KEY;\n            STYLE_NAMESPACE = CHAR_STYLE_NAMESPACE;\n            STYLE_ELEMENT_TYPE = configuration.CHARACTER_STYLE_ELEMENT_TYPE;\n            STYLE_REPRESENTATION_JSON_TYPE = CHAR_STYLE_REPRESENTATION_JSON_TYPE;\n            STYLE_REPRESENTATION_SNIPPET_TYPE = CHAR_STYLE_REPRESENTATION_SNIPPET_TYPE;\n        } else {\n            STYLE_DATA_KEY = PARA_STYLE_DATA_KEY;\n            STYLE_NAMESPACE = PARA_STYLE_NAMESPACE;\n            STYLE_ELEMENT_TYPE = configuration.PARAGRAPH_STYLE_ELEMENT_TYPE;\n            STYLE_REPRESENTATION_JSON_TYPE = PARA_STYLE_REPRESENTATION_JSON_TYPE;\n            STYLE_REPRESENTATION_SNIPPET_TYPE = PARA_STYLE_REPRESENTATION_SNIPPET_TYPE;\n        }\n\n        const documentID = event.data.documentID || -1;\n        const styleIDList = event.data.styleUIDList;\n\n        styleIDList.forEach(styleID => {\n\n            const operation = isCharStyle ? 'getCharStyleInfoByID' : 'getParaStyleInfoByID';\n            environment.execApp(operation, [ documentID, styleID ]).then(data => {\n                const styleData = JSON.parse(data);\n\n                //create a new style element\n                setCreateElementContext(event.data);\n                const newElement = library.createElement(styleData.styleName, STYLE_ELEMENT_TYPE);\n                resetCreateElementContext();\n\n                const updatePromises = [];\n\n                const primaryRepresentation = newElement.createRepresentation(STYLE_REPRESENTATION_SNIPPET_TYPE, 'primary');\n                const addRenditionPromise = primaryRepresentation.setContentFromPath(styleData.idmsPath);\n                updatePromises.push(addRenditionPromise);\n\n                const newRepresentation = newElement.createRepresentation(STYLE_REPRESENTATION_JSON_TYPE, 'rendition');\n                newRepresentation.setValue(STYLE_NAMESPACE, STYLE_DATA_KEY, styleData.styleInfo);\n\n                if (styleData.previewPath) {\n                    const newRendition = newElement.createRepresentation('image/png', 'rendition');\n                    const addRenditionPromise = newRendition.setContentFromPath(styleData.previewPath);\n                    //.then(function () {\n                    // TODO: these might not be the correct dimensions\n                    // newRendition.width = RENDITION_SIZE;\n                    // newRendition.height = RENDITION_SIZE;\n                    //});\n                    updatePromises.push(addRenditionPromise);\n                }\n\n                Promise.all(updatePromises).then(function() {\n                    const cleanupPromises = [];\n\n                    if (styleData.previewPath) {\n                        cleanupPromises.push(newElement.setThumbnailCache(RENDITION_SIZE, styleData.previewPath));\n                    }\n\n                    cleanupPromises.push(newElement.endOperation());\n\n                    Promise.all(cleanupPromises).then(() => {\n                        if (styleData.previewPath) {\n                            FileUtils.deleteFile(styleData.previewPath);\n                        }\n\n                        if (styleData.idmsPath) {\n                            FileUtils.deleteFile(styleData.idmsPath);\n                        }\n                    });\n                });\n            });\n        });\n    };\n\n    const onCreateNewParaStylesEvent = event => onCreateNewTypeStylesEvent(event, false);\n    const onCreateNewCharStylesEvent = event => onCreateNewTypeStylesEvent(event, true);\n\n    const onWorkspaceChangeEvent = event => event.data ? switchLibrary(event) : resetPanelState();\n\n    const onStockOpenEvent = async event => {\n        if (event.data && event.data.elementRef !== undefined) {\n            const element = await libraryManager.resolveElementReference(event.data.elementRef);\n            const adobeStockId = AdobeStockUtils.getStockId(element);\n\n            // TODO: Do we know it's always an image?\n            const representation = elementConfiguration.findUsableRepresentation(element, FileUtils.getUsableTypes(configuration.IMAGE_ELEMENT_TYPE));\n            if (representation) {\n                return representation.getContentPath().then(function(path) {\n                    return environment.execApp('placeAsset', [ path, element.library.name, element.name, element.getLegacyReference(), getElementModifiedTime(element), element.created, adobeStockId, (adobeStockId ? AdobeStockUtils.isLicensed(element) : null), true, false, true ]);\n                });\n            }\n\n            // Fallback: use the full-size rendition if we don't have a representation we can use\n            return element.getThumbnailPath().then(function(path) {\n                return environment.execApp('placeAsset', [ path, element.library.name, element.name, element.getLegacyReference(), getElementModifiedTime(element), element.created, adobeStockId, (adobeStockId ? AdobeStockUtils.isLicensed(element) : null), true, false ]);\n            }, err => debugLog.log(err));\n        }\n    };\n\n    const onStockOpenTemplateEvent = async event => {\n        if (event.data && event.data.elementRef !== undefined) {\n            const element = await libraryManager.resolveElementReference(event.data.elementRef);\n\n            // TODO: Do we know it's always a template?\n            const representation = elementConfiguration.findUsableRepresentation(element, FileUtils.getUsableTypes(configuration.TEMPLATE_ELEMENT_TYPE));\n            if (representation) {\n                return representation.getContentPath().then(function(path) {\n                    return environment.execApp('openDocumentFromTemplate', [ path ]);\n                });\n            }\n        }\n    };\n\n    const onCreateSnippetForElement = async event => {\n        const sendSnippetCreatedEvent = filePath => {\n            const obj = {};\n            const responseEvent = environment.createEvent('com.adobe.DesignLibraries.events.SnippetCreated', 'APPLICATION');\n            if (filePath) {\n                obj.idmsPath = filePath;\n            } else {\n                obj.idmsPath = '';\n            }\n            if (event.data.elementRef) {\n                obj.elementRef = event.data.elementRef;\n            }\n            if (event.data.guid) {\n                obj.guid = event.data.guid;\n            }\n            responseEvent.data = JSON.stringify(obj);\n            environment.dispatchEvent(responseEvent);\n        };\n\n        if (event.data && event.data.elementRef !== undefined) {\n            const element = await libraryManager.resolveElementReference(event.data.elementRef);\n            if (element.type === configuration.TEXT_ELEMENT_TYPE) {\n\n                const representation = elementConfiguration.findUsableRepresentation(element);\n                if (representation) {\n                    if (representation.type === configuration.TEXT_REPRESENTATION_JSON_TYPE) {\n                        const textData = representation.getValue(configuration.TEXT_NAMESPACE, configuration.TEXT_DATA_KEY);\n                        textData.id = element.id + ';' + element.modified;\n                        textData.type = 'text';\n                        environment.execApp('getSnippetForText', [ textData, !event.data.stripStyles ]).then(function(filePath) {\n                            sendSnippetCreatedEvent(filePath);\n                        }, function() {\n                            sendSnippetCreatedEvent();\n                        });\n                    } else if (representation.type === configuration.TEXT_REPRESENTATION_ID_SNIPPET_TYPE) {\n                        representation.getContentPath().then(function(filePath) {\n                            sendSnippetCreatedEvent(filePath);\n                        });\n                    }\n                }\n            }\n        } else {\n            sendSnippetCreatedEvent();\n        }\n    };\n\n    this.startEventListener = function() {\n        environment.addEventListener('afterSelectionChanged', onLayerUpdateEvent);\n        environment.addEventListener('afterSelectionAttributeChanged', onLayerUpdateEvent);\n        environment.addEventListener('colorChanged', onLayerUpdateEvent);\n        environment.addEventListener('colorTransformChanged', onLayerUpdateEvent);\n        environment.addEventListener('uiPreferencesChanged', onPreferencesUpdateEvent);\n        environment.addEventListener('fontListChanged', onFontListUpdateEvent);\n        environment.addEventListener('documentAfterActivate', onDocumentActivateEvent);\n        environment.addEventListener('documentAfterDeactivate', onDocumentDeactivateEvent);\n        environment.addEventListener('afterWorkspaceChanged', onWorkspaceChangeEvent);\n        if (configuration.IS_APP_IN_TOUCH_MODE === false) {\n            environment.addEventListener('newAssetToMigrate', onNewAssetToMigrateEvent);\n            environment.addEventListener('createNewCloudLibrary', onCreateNewLibraryEvent);\n            environment.addEventListener('createNewColorTheme', onCreateNewColorThemeEvent);\n            environment.addEventListener('createNewColors', onCreateNewColorsEvent);\n            environment.addEventListener('createNewParaStyles', onCreateNewParaStylesEvent);\n            environment.addEventListener('createNewCharStyles', onCreateNewCharStylesEvent);\n            environment.addEventListener('openStock', onStockOpenEvent);\n            environment.addEventListener('openStockTemplate', onStockOpenTemplateEvent);\n            environment.addEventListener('createSnippetForElement', onCreateSnippetForElement);\n        }\n    };\n\n    this.stopEventListener = function() {\n        environment.removeEventListener('afterSelectionChanged', onLayerUpdateEvent);\n        environment.removeEventListener('afterSelectionAttributeChanged', onLayerUpdateEvent);\n        environment.removeEventListener('colorChanged', onLayerUpdateEvent);\n        environment.removeEventListener('colorTransformChanged', onLayerUpdateEvent);\n        environment.removeEventListener('uiPreferencesChanged', onPreferencesUpdateEvent);\n        environment.removeEventListener('fontListChanged', onFontListUpdateEvent);\n        environment.removeEventListener('documentAfterActivate', onDocumentActivateEvent);\n        environment.removeEventListener('documentAfterDeactivate', onDocumentDeactivateEvent);\n        environment.removeEventListener('afterWorkspaceChanged', onWorkspaceChangeEvent);\n        if (configuration.IS_APP_IN_TOUCH_MODE === false) {\n            environment.removeEventListener('newAssetToMigrate', onNewAssetToMigrateEvent);\n            environment.removeEventListener('createNewCloudLibrary', onCreateNewLibraryEvent);\n            environment.removeEventListener('createNewColorTheme', onCreateNewColorThemeEvent);\n            environment.removeEventListener('createNewColors', onCreateNewColorsEvent);\n            environment.removeEventListener('createNewParaStyles', onCreateNewParaStylesEvent);\n            environment.removeEventListener('createNewCharStyles', onCreateNewCharStylesEvent);\n            environment.removeEventListener('openStock', onStockOpenEvent);\n            environment.removeEventListener('openStockTemplate', onStockOpenTemplateEvent);\n            environment.removeEventListener('createSnippetForElement', onCreateSnippetForElement);\n        }\n    };\n\n    // This handler would be called before panel proceeds with default Drop workflow\n    // After inspecting the eventData, this function should return a boolean stating\n    // whether the drop was successfully handled by the app\n    // eventData = {'source': 'com.adobe.indesign', 'version' : '10.2.0', 'assetList': [...] };\n    // return true if this application wants to handle the data\n    // return false to let panel handle the data\n    this.dropHandler = function(eventData, keys) {\n        debugLog.log('InDesign drop handler', eventData);\n        const hasModifierKey = environment.isWindowsOS() ? keys.ctrlKey : keys.metaKey;\n        if (hasModifierKey && eventData.assetList[0].type === 'text') {\n            eventData.assetList[0].type = 'image';\n        }\n        return Promise.reject();\n    };\n\n    this.customDropMessage = function(eventData, keys) {\n        const isWindows = environment.isWindowsOS();\n        const hasModifierKey = isWindows ? keys.ctrlKey : keys.metaKey;\n\n        if (!hasModifierKey && eventData.assetList[0].type === 'text') {\n            // Display a message to tell the user about the modifier key - holding down cmd/ctrl\n            // will add text as a graphic, rather than a text element\n            const dropTextMessage = `DL_CUSTOM_DROP_MESSAGE_ID_TEXT_${isWindows ? 'WIN' : 'MAC'}`;\n            return translate(dropTextMessage);\n        }\n    };\n\n    this.customOverlayMessage = function(operation, elementTypes) {\n        let message = '';\n        if (operation === 'place') {\n            message = 'DL_CUSTOM_PLACE_OVERLAY_MESSAGE_ID';\n        } else if (operation === 'relink') {\n            if (elementTypes.length === 1 && elementTypes[0] === 'text') {\n                message = 'DL_CUSTOM_RELINK_TEXT_OVERLAY_MESSAGE_ID';\n            } else {\n                message = 'DL_RELINK_RELINK_OVERLAY_MESSAGE';\n            }\n        }\n        return message && translate(message);\n    };\n\n    // Set this to allow dragging with the Cmd-key held down (otherwise, dropping gets prevented by default)\n    this.allowCmdDrag = true;\n\n    // TODO: Refactor the above to return an object, rather than using this\n    return this;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2015 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport { translate } from 'app/js/managers/translationManager';\n\nexport const PIPGlobals = {\n    DLtoAI: 'DL_To_Ai',\n    CharacterStyle: 'Character_Style',\n    ParagraphStyle: 'Paragraph_Style',\n    Color: 'Color',\n    SwatchGroups: 'Swatch_Groups',\n    Added: 'Added',\n    Applied: 'Applied'\n};\n\nexport function getDefaultLibrary() {\n    return libraryManager.getDefaultLibrary();\n}\n\nexport function acquireLibrary(libraryID, createNew) {\n    let library;\n    if (libraryID) {\n        //Look for existing.\n        library = libraryManager.getLibraryById(libraryID);\n    }\n    if (!library && !createNew) {\n        //Get current library if not supposed to create new.\n        library = libraryManager.currentLibrary;\n    }\n    if (!library) {\n        // Get most recently used libraries\n        library = libraryManager.recentLibraries[0];\n    }\n    if (!library) {\n        //Create new.\n        const libraryName = translate('DL_DEFAULT_LIBRARY_NAME');\n        library = libraryManager.createLibrary(libraryName);\n    }\n    if (library) {\n        //Set it as current.\n        libraryManager.currentLibrary = library;\n        library = libraryManager.currentLibrary;\n    }\n    return library;\n}\n\nexport function getLibraryFromEventData(eventData) {\n    let libraryID;\n    if (Object.prototype.hasOwnProperty.call(eventData, 'libraryID')) {\n        libraryID = eventData.libraryID;\n    }\n\n    let createNew = false;\n    if (Object.prototype.hasOwnProperty.call(eventData, 'createNewLibrary')) {\n        createNew = JSON.parse(eventData.createNewLibrary);\n    }\n\n    return acquireLibrary(libraryID, createNew);\n}\n\nexport function logPIPEvent(category, subcategory, eventname) {\n    if (typeof configuration.currentProduct.reportEvent === 'function') {\n        configuration.currentProduct.reportEvent('event', { category, subcategory, eventname });\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport { checkLibraryWritable, reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport { getLibraryFromEventData } from './utils';\n\nconst ILST_NAMESPACE = 'illustrator';\nconst ILST_DATA_KEY = 'data';\n\nexport function getIllustratorData(representation) {\n    return representation.getValue(ILST_NAMESPACE, ILST_DATA_KEY);\n}\n\nexport function setIllustratorData(newRep, data) {\n    newRep.setValue(ILST_NAMESPACE, ILST_DATA_KEY, { global: data.global });\n}\n\n// This function returns a promise of swatch being uploaded. Incase there is an error, the parameter\n// in the callback function is an error , else it will be null.\nconst pushSelectedSwatchColors = event => {\n    const library = getLibraryFromEventData(event.data);\n    if (!library) {\n        return Promise.reject('Library Error');\n    }\n\n    if (!checkLibraryWritable(library)) {\n        return Promise.reject('Library Error');\n    }\n\n    let opType;\n    if (Object.prototype.hasOwnProperty.call(event.data, 'isNew')) {\n        opType = event.data.isNew ? 'swatchPanelNew' : 'swatchPanelExisting';\n    }\n\n    const createColorElement = color => {\n        //create a new color element\n        let name = color.name;\n        if (!name) {\n            if (color.data && color.data[0] && color.data[0].type && color.data[0].type === 'spot') {\n                name = color.data[0].spotColorName;\n            }\n            name = name || '';\n        }\n        const newElement = library.createElement(name, configuration.COLOR_ELEMENT_TYPE);\n\n        //add representations\n        color.data.forEach((rep, index) => {\n            const relationship = index === 0 ? 'primary' : 'rendition';\n            const newRepresentation = newElement.createRepresentation(configuration.COLOR_REPRESENTATION_TYPE, relationship);\n            // Move the 'global' property out of the raw color data and into illustrator specific section in representation\n            if ('global' in rep) {\n                setIllustratorData(newRepresentation, rep);\n                delete rep.global;\n            }\n            newRepresentation.setValue(configuration.COLOR_NAMESPACE, configuration.COLOR_DATA_KEY, rep);\n        });\n\n        newElement.endOperation();\n        if (opType) {\n            reportApplyMetric(newElement.representations[0], opType);\n        }\n        return newElement;\n    };\n\n    return environment.execApp('getSelectedSwatchList').then(function(swatchList) {\n        if (!swatchList) {\n            return Promise.reject('err');\n        }\n\n        try {\n            swatchList = JSON.parse(swatchList);\n        } catch (ex) {\n            return Promise.reject('err');\n        }\n        let lastColorObj;\n        swatchList.forEach(colorObj => {\n            if (colorObj.data) {\n                lastColorObj = createColorElement(colorObj);\n            }\n        });\n\n        if (lastColorObj) {\n            // Reveal the last element that is being added from Ai.\n            elementSelectionState.revealElement(lastColorObj);\n        }\n    });\n};\n\n// This function returns a promise of swatch being uploaded. Incase there is an error, the parameter\n// in the callback function is an error , else it will be null.\nconst pushSelectedSwatchGroups = event => {\n    const library = getLibraryFromEventData(event.data);\n    if (!library) {\n        return Promise.reject('Library Error');\n    }\n\n    if (!checkLibraryWritable(library)) {\n        return Promise.reject('Library Error');\n    }\n\n    const createColorThemeElement = colorTheme => {\n        //create a new color element\n        const colorThemeName = colorTheme.mood || '';\n        let newElement;\n        if (colorTheme.swatches && colorTheme.swatches.length <= 5 && colorTheme.swatches.length > 0) {\n            newElement = library.createElement(colorThemeName, configuration.COLOR_THEME_ELEMENT_TYPE);\n            const newRepresentation = newElement.createRepresentation(configuration.COLOR_THEME_REPRESENTATION_TYPE, 'primary');\n            newRepresentation.setValue(configuration.COLOR_THEME_NAMESPACE, configuration.COLOR_THEME_DATA_KEY, colorTheme);\n            newElement.endOperation();\n        }\n        return newElement;\n    };\n\n    return environment.execApp('getSelectedSwatchGroupList').then(swatchGroupList => {\n        if (!swatchGroupList) {\n            return Promise.reject('err');\n        }\n\n        swatchGroupList = JSON.parse(swatchGroupList);\n        if (swatchGroupList.length > 0) {\n            let lastColorTheme;\n            swatchGroupList.forEach(colorThemeObj => {\n                lastColorTheme = createColorThemeElement(colorThemeObj);\n            });\n            if (lastColorTheme) {\n                // Reveal the element that is being added from Ai.\n                elementSelectionState.revealElement(lastColorTheme);\n            }\n        }\n    });\n};\n\nexport function pushColorsToLibrary(event) {\n    const data = event.data;\n    const promises = [];\n    if (data) {\n        if (data.uploadSwatch) {\n            promises.push(pushSelectedSwatchColors(event));\n        }\n        if (data.uploadSwatchGroup) {\n            promises.push(pushSelectedSwatchGroups(event));\n        }\n    }\n    return Promise.all(promises);\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { checkLibraryWritable, reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport { getLibraryFromEventData } from './utils';\n\nconst addStyle = (event, isCharacterStyle) => {\n    const library = getLibraryFromEventData(event.data);\n    if (!library) {\n        return;\n    }\n\n    if (!checkLibraryWritable(library)) {\n        return;\n    }\n\n    let opType;\n    if (Object.prototype.hasOwnProperty.call(event.data, 'isNew')) {\n        const type = isCharacterStyle ? 'characterStyle' : 'paragraphStyle';\n        opType = `${type}${event.data.isNew ? 'New' : 'Existing'}`;\n    }\n\n    let STYLE_DATA_KEY;\n    let STYLE_NAMESPACE;\n    let STYLE_ELEMENT_TYPE;\n    let STYLE_REPRESENTATION_JSON_TYPE;\n\n    if (isCharacterStyle) {\n        STYLE_DATA_KEY = 'data';\n        STYLE_NAMESPACE = 'characterstyle';\n        STYLE_ELEMENT_TYPE = configuration.CHARACTER_STYLE_ELEMENT_TYPE;\n        STYLE_REPRESENTATION_JSON_TYPE = 'application/vnd.adobe.characterstyle+json';\n    } else {\n        STYLE_DATA_KEY = 'data';\n        STYLE_NAMESPACE = 'paragraphstyle';\n        STYLE_ELEMENT_TYPE = configuration.PARAGRAPH_STYLE_ELEMENT_TYPE;\n        STYLE_REPRESENTATION_JSON_TYPE = 'application/vnd.adobe.paragraphstyle+json';\n    }\n\n    const styleIDList = event.data.styleNames;\n    const operation = isCharacterStyle ? 'addCharStyleById' : 'addParaStyleById';\n    styleIDList.forEach(styleID => {\n        environment.execApp(operation, [ styleID ]).then(data => {\n            const styleData = JSON.parse(data);\n\n            const newElement = library.createElement(styleData.styleName, STYLE_ELEMENT_TYPE);\n\n            const updatePromises = [];\n\n            const newRepresentation = newElement.createRepresentation(STYLE_REPRESENTATION_JSON_TYPE, 'primary');\n            newRepresentation.setValue(STYLE_NAMESPACE, STYLE_DATA_KEY, styleData.styleInfo);\n\n            if (styleData.previewPath) {\n                const newRendition = newElement.createRepresentation('image/png', 'rendition');\n                const addRenditionPromise = newRendition.setContentFromPath(styleData.previewPath);\n                //.then(function () {\n                // TODO: these might not be the correct dimensions\n                // newRendition.width = configuration.CHARACTER_STYLE_THUMBNAIL_SIZE;\n                // newRendition.height = configuration.CHARACTER_STYLE_THUMBNAIL_SIZE;\n                //});\n                updatePromises.push(addRenditionPromise);\n            }\n\n            Promise.all(updatePromises).then(function() {\n                const cleanupPromises = [];\n\n                if (styleData.previewPath) {\n                    cleanupPromises.push(newElement.setThumbnailCache(configuration.CHARACTER_STYLE_THUMBNAIL_SIZE, styleData.previewPath));\n                }\n\n                cleanupPromises.push(newElement.endOperation());\n\n                Promise.all(cleanupPromises).then(() => {\n                    if (styleData.previewPath) {\n                        FileUtils.deleteFile(styleData.previewPath);\n                    }\n                });\n\n                if (opType) {\n                    reportApplyMetric(newElement.representations[0], opType);\n                }\n                // Reveal the element that is being added from Ai.\n                elementSelectionState.revealElement(newElement);\n            });\n        });\n    });\n};\n\nexport function addTextStyle(event) {\n    addStyle(event, true);\n}\n\nexport function addParaStyle(event) {\n    addStyle(event, false);\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport environment from 'app/js/environment';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport productInterface from 'app/js/interface/productInterface';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { checkLibraryWritable, getCuratedName, generatePreview, getElementModifiedTime, reportApplyMetric, createElementExtraMetrics } from 'app/js/utils/libraryUtils';\nimport { addGraphicElement } from 'app/js/utils/addElementUtils';\nimport { openElementURL } from 'app/js/utils/linkUtils';\nimport BrowserUtils from 'app/js/utils/browserUtils';\nimport metrics from 'app/js/interface/metrics';\n\nconst sendElementUpdated = (representation, requestRef) => {\n    if (representation) {\n        const element = representation.element;\n        const elementRef = element.getLegacyReference();\n\n        // We have to call this because we need to get the new path.\n        representation.getContentPath().then(path => {\n            const event = environment.createEvent('com.adobe.DesignLibraries.events.ElementUpdated', 'APPLICATION');\n            event.data = JSON.stringify({\n                requestRef,\n                elementRef,\n                name: element.name,\n                libraryName: element.library.name,\n                modifiedTime: getElementModifiedTime(element),\n                creationTime: element.created,\n                data: [ path ]\n            });\n\n            environment.dispatchEvent(event);\n        });\n    }\n};\n\nconst fillUpdatePromises = (updatePromises, fileData, element) => {\n    const files = (fileData && fileData.files) || [];\n    for (let i = 0; i < files.length; i++) {\n        const file = files[i];\n        const fileMimeType = FileUtils.fileNameToMimeType(file.path, element.type);\n        const newRepresentation = element.createRepresentation(fileMimeType, file.relationship);\n        const updatePromise = newRepresentation.setContentFromPath(file.path);\n\n        updatePromises.push(updatePromise);\n    }\n};\n\nconst dispatchUnknownError = elementIdentifier => {\n    const event = environment.createEvent('ILST.InitialCommunicationError', 'APPLICATION');\n    const errorObj = libraryManager.syncStatus;\n    event.data = {\n        elementIdentifier,\n        status: 'error',\n        error: (errorObj && errorObj.errorType) || 'kError'\n    };\n    environment.dispatchEvent(event);\n};\n\nconst attachUploadListner = (element, openBrowserAfterOperation, additionalQueryParameters, elementType) => {\n    // Notify when element has been actually uploaded\n    let linkedOpened = false;\n    let eventSent = false;\n\n    const dispatchLibraryStatusEvent = status => {\n        const event = environment.createEvent('ILST.elementUploaded', 'APPLICATION');\n        const errorStatus = status || {\n            errorType: 'kNoErr',\n            state: 'ok'\n        };\n\n        // [gehlaut] With the given error codes for now it is difficult to differentiate if the user\n        // is connected to the internet. So adding a HACK for now.\n        if (!BrowserUtils.isOnline) {\n            errorStatus.state = 'error';\n            errorStatus.errorType = 'kNoInternet';\n        }\n\n        event.data = {\n            elementRef: element.getLegacyReference(),\n            status: errorStatus.state,\n            error: errorStatus.errorType || 'kNoErr'\n        };\n        environment.dispatchEvent(event);\n    };\n\n    const listener = () => {\n        const dlStatus = libraryManager.syncStatus;\n        if (!eventSent && (dlStatus.state === 'ok' || dlStatus.state === 'error')) {\n            // All changes have been synced to the cloud so send the event for it to Ai\n            dispatchLibraryStatusEvent(dlStatus);\n            eventSent = true;\n            if (openBrowserAfterOperation && dlStatus.state === 'ok' && !linkedOpened) {\n                if (elementType === 'kAIChart') {\n                    openElementURL(element, 'charts', additionalQueryParameters);\n                } else if (elementType === 'kAIArt') {\n                    openElementURL(element, 'details', additionalQueryParameters);\n                }\n                linkedOpened = true;\n            }\n            libraryManager.removeListener('libraryStatus', listener);\n        }\n    };\n\n    if (!libraryManager.syncingEnabled()) {\n        dispatchLibraryStatusEvent(libraryManager.syncStatus);\n    } else {\n        libraryManager.addListener('libraryStatus', listener);\n    }\n};\n\nconst deleteLocalFiles = filesMap => {\n    for (let i = 0; i < filesMap.length; i++) {\n        FileUtils.deleteFile(filesMap[i].path);\n    }\n};\n\nconst checkEventData = (library, fileData, elementType) => {\n    if (!library) {\n        throw 'No current library';\n    }\n\n    if (!fileData || !fileData.files || !elementType) {\n        throw 'event data invalid';\n    }\n};\n\nexport function onAddElementToLibrary(event) {\n    const fileData = event.data.fileData;\n    const library = libraryManager.currentLibrary;\n    const additionalQueryParameters = event.data.additionalQueryParameters;\n    // Notify products that an element is created so that they can do appropriate stitching\n    // if they want to replace the content with a linked smart object.\n    const openBrowserAfterOperation = event.data.openBrowserAfterOperation;\n\n    const elementType = event.data.elementType;\n    let dLElementType = null;\n\n    if (!checkLibraryWritable(library)) {\n        return;\n    }\n\n    try {\n        checkEventData(library, fileData, elementType);\n\n        if (fileData.layerIds === null || fileData.documentId === null) {\n            throw 'layer Ids Or documentId cannot be null';\n        }\n\n        if (elementType === 'kAIArt' || elementType === 'kAIChart') {\n            dLElementType = configuration.IMAGE_ELEMENT_TYPE;\n        } else {\n            throw 'Element not supported yet';\n        }\n\n        if (elementType === 'kAIChart') {\n            fileData.layerName = getCuratedName(library, fileData.layerName, 'DL_CHART_LABEL');\n        } else {\n            fileData.layerName = getCuratedName(library, fileData.layerName);\n        }\n\n        const newElement = library.createElement(fileData.layerName, dLElementType);\n\n        const updatePromises = [];\n        fillUpdatePromises(updatePromises, fileData, newElement);\n\n        // IMPORTANT: set the rendition cache at the end, because any changes to the representations will\n        // wipe the cache.\n        return Promise.all(updatePromises).then(function() {\n            const cleanupPromises = [];\n\n            if (fileData.rendition) {\n                cleanupPromises.push(newElement.setThumbnailCache(configuration.IMAGE_THUMBNAIL_SIZE, fileData.rendition));\n            }\n\n            cleanupPromises.push(newElement.endOperation());\n\n            Promise.all(cleanupPromises).then(() => {\n                deleteLocalFiles(fileData.files);\n\n                if (fileData.rendition) {\n                    FileUtils.deleteFile(fileData.rendition.path);\n                }\n            });\n\n            // Reveal the element that is being added from Ai.\n            elementSelectionState.revealElement(newElement);\n\n            const appMetadata = {\n                documentId: fileData.documentId,\n                layerIds: fileData.layerIds\n            };\n            return productInterface.sendElementCreated(newElement, appMetadata).then(() => {\n                attachUploadListner(newElement, openBrowserAfterOperation, additionalQueryParameters, elementType);\n                return newElement;\n            });\n        }, () => Promise.reject('Could not add element'));\n\n    } catch (error) {\n        dispatchUnknownError((fileData.layerIds && fileData.layerIds[0]) || null);\n        return Promise.reject('Could not add element: ' + error);\n    }\n}\n\nexport async function onUpdateElement(event) {\n    const fileData = event.data.fileData;\n    const elementType = event.data.elementType;\n    const elementRef = event.data.elementRef;\n    const additionalQueryParameters = event.data.additionalQueryParameters;\n    const openBrowserAfterOperation = event.data.openBrowserAfterOperation;\n\n    try {\n        if (!elementRef) {\n            throw 'elementRef missing';\n        }\n\n        let element = await libraryManager.resolveElementReference(elementRef);\n        if (!element) {\n            throw 'Element not found';\n        }\n        // Show the element that is being updated from Ai.\n        elementSelectionState.revealElement(element);\n\n        const library = element.library;\n        if (!checkLibraryWritable(library)) {\n            return;\n        }\n\n        checkEventData(library, fileData, elementType);\n\n        // If the element we're editing was deleted, we recreate it as a new element, so the changes aren't lost.\n        // Otherwise, we just remove the existing representations so we can add the new ones\n        if (element.isDeletedLocally) {\n            element = library.createElement(element.name, element.type);\n        } else {\n            element.beginOperation();\n            element.removeAllRepresentations();\n        }\n\n        const updatePromises = [];\n        fillUpdatePromises(updatePromises, fileData, element);\n\n        // IMPORTANT: set the rendition cache at the end, because any changes to the representations will\n        // wipe the cache.\n        return Promise.all(updatePromises).then(function() {\n            const cleanupPromises = [];\n\n            if (fileData.rendition) {\n                cleanupPromises.push(element.setThumbnailCache(configuration.IMAGE_THUMBNAIL_SIZE, fileData.rendition));\n            }\n\n            cleanupPromises.push(element.endOperation());\n\n            Promise.all(cleanupPromises).then(() => {\n                deleteLocalFiles(fileData.files);\n\n                if (fileData.rendition) {\n                    FileUtils.deleteFile(fileData.rendition.path);\n                }\n            });\n\n            // Notify products that an element is created so that they can do appropriate stitching\n            // if they want to replace the content with a linked smart object.\n            sendElementUpdated(element.getPrimaryRepresentation(), event.data.requestRef);\n            attachUploadListner(element, openBrowserAfterOperation, additionalQueryParameters, elementType);\n            return element;\n        }, () => Promise.reject('Could not update element'));\n\n    } catch (error) {\n        dispatchUnknownError(event.data.requestRef);\n        return Promise.reject('Could not update element: ' + error);\n    }\n}\n\nexport function addTextAsset(library, layerInfo) {\n\n    return environment.execApp('getTextInfo').then(data => {\n        const textData = JSON.parse(data);\n        if (!textData || !textData.textInfo) {\n            return Promise.reject('Could not create element.');\n        }\n\n        const name = layerInfo.textAssetName || textData.name;\n        const assetName = getCuratedName(library, name, 'DL_TEXT_LABEL');\n        const newElement = createElementExtraMetrics(library, assetName, configuration.TEXT_ELEMENT_TYPE, { opType: 'canvasContextMenu' });\n\n        const updatePromises = [];\n        if (textData.primaryRepresentation) {\n            const primaryRepresentation = newElement.createRepresentation(textData.primaryRepresentation.representationType, 'primary');\n            if (textData.primaryRepresentation.isFile) {\n                const addRenditionPromise = primaryRepresentation.setContentFromPath(textData.primaryRepresentation.filePath).then(() => {\n                    updatePromises.push(addRenditionPromise);\n                });\n            } else {\n                primaryRepresentation.setValue(configuration.TEXT_NAMESPACE, configuration.TEXT_DATA_KEY, textData.primaryRepresentation.data);\n            }\n\n            const newRepresentation = newElement.createRepresentation(configuration.TEXT_REPRESENTATION_JSON_TYPE, 'rendition');\n            newRepresentation.setValue(configuration.TEXT_NAMESPACE, configuration.TEXT_DATA_KEY, textData.textInfo);\n        } else {\n            const newRepresentation = newElement.createRepresentation(configuration.TEXT_REPRESENTATION_JSON_TYPE, 'primary');\n            newRepresentation.setValue(configuration.TEXT_NAMESPACE, configuration.TEXT_DATA_KEY, textData.textInfo);\n        }\n\n        if (textData.previewPath) {\n            const newRendition = newElement.createRepresentation('image/png', 'rendition');\n            newRendition.isPreferredThumbnail = true;\n            const addRenditionPromise = newRendition.setContentFromPath(textData.previewPath);\n            updatePromises.push(addRenditionPromise);\n        }\n\n        return Promise.all(updatePromises).then(function() {\n            const cleanupPromises = [];\n\n            if (textData.previewPath) {\n                cleanupPromises.push(newElement.setThumbnailCache(configuration.TEXT_THUMBNAIL_SIZE, textData.previewPath));\n            }\n\n            cleanupPromises.push(newElement.endOperation());\n\n            Promise.all(cleanupPromises).then(() => {\n                if (textData.previewPath) {\n                    FileUtils.deleteFile(textData.previewPath);\n                }\n\n                if (textData.primaryRepresentation.isFile) {\n                    FileUtils.deleteFile(textData.primaryRepresentation.filePath);\n                }\n            });\n\n            reportApplyMetric(newElement.representations[0], 'canvasContextMenu');\n            return newElement;\n\n        }, () => {\n            library.removeElement(newElement);\n            return Promise.reject('Could not create element.');\n        });\n\n    }, () => Promise.reject('Could not save text preview.'));\n}\n\nconst addGraphicAsset = (library, dragAssetId) => {\n    return generatePreview(dragAssetId).then(fileData => {\n        const appMetadata = {\n            documentId: fileData.documentId,\n            layerIds: fileData.layerIds,\n            dragAssetId\n        };\n        metrics.setExtraEventMetrics('createElement', { opType: 'canvasContextMenu' });\n        return addGraphicElement(fileData.layerName, fileData.files, fileData.rendition, library, appMetadata).then(newElement => {\n            reportApplyMetric(newElement.representations[0], 'canvasContextMenu');\n        }).catch(() => {\n            metrics.clearExtraEventMetrics('createElement');\n        });\n    }, () => Promise.reject('Could not extract asset.'));\n};\n\nconst addAsset = layerInfo => {\n    if (!layerInfo) {\n        return;\n    }\n    /* No text selected */\n    if (layerInfo.canAddTextAsset !== undefined && layerInfo.canAddTextAsset === false) {\n        return;\n    }\n    if (layerInfo.canAddTextAsset !== undefined) {\n        return addTextAsset(libraryManager.currentLibrary, layerInfo);\n    }\n    return addGraphicAsset(libraryManager.currentLibrary, undefined, undefined);\n};\n\nexport function onAddSelectionToLibrary() {\n    layerSelectionManager.updateLayerInfo().then(addAsset);\n    return;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport { checkLibraryWritable } from 'app/js/utils/libraryUtils';\nimport { getLibraryFromEventData } from './utils';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { createElementExtraMetrics, checkFileSizes, setThumbnail } from 'app/js/utils/libraryUtils';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\n\nfunction addMaterialElement(elementType, name, files = [], thumbnailPath, library, opType) {\n\n    for (let i = 0; i < files.length; i++) {\n        if (!FileUtils.existsFile(files[i].path)) {\n            return Promise.reject(new Error(`Could not add new element: path ${files[i].path} does not exist`));\n        }\n    }\n\n    for (let i = 0; i < files.length; i++) {\n        if (!FileUtils.isUploadableFile(files[i].path)) {\n            return Promise.reject(new Error(`Could not add new element: ${files[i].path} not supported`));\n        }\n    }\n\n    if (thumbnailPath && !FileUtils.existsFile(thumbnailPath)) {\n        return Promise.reject(new Error(`Could not add new element: thumbnail path ${thumbnailPath} does not exist`));\n    }\n\n    if (!library) {\n        return Promise.reject(new Error('Could not add new element: no library'));\n    }\n\n    if (!checkLibraryWritable(library, true)) {\n        return Promise.reject(new Error('Could not create element: library is read-only'));\n    }\n\n    // Prevent adding to library, if the asset is too big\n    if (!checkFileSizes(files, true)) {\n        return Promise.reject(new Error('Could not create element: one or more files exceed 1GB limit'));\n    }\n\n    const newElement = createElementExtraMetrics(library, name, elementType, { opType });\n    const updatePromises = [];\n\n    files.forEach(file => {\n        const fileMimeType = file.type || FileUtils.fileNameToMimeType(file.path, elementType);\n        const newRepresentation = newElement.createRepresentation(fileMimeType, file.relationship);\n\n        if (file.data) {\n            // Additional data (key-value pairs) to add to the primary representation\n            file.data.forEach(data => newRepresentation.setValue(data.namespace, data.key, data.value));\n        }\n\n        updatePromises.push(newRepresentation.setContentFromPath(file.path, file.moveFile).then(() => {\n            if (file.dimensions) {\n                // Can explicitly provide dimensions\n                newRepresentation.width = file.dimensions.width;\n                newRepresentation.height = file.dimensions.height;\n            }\n        }));\n    });\n\n    if (thumbnailPath) {\n        const thumbnailSize = elementConfiguration.getThumbnailSize(newElement);\n        updatePromises.push(setThumbnail(newElement, thumbnailSize, thumbnailPath));\n    }\n    return Promise.all(updatePromises)\n        .then(() => {\n            newElement.endOperation();\n            return newElement;\n        })\n        .catch(err => {\n            library.removeElement(newElement, true);\n            return Promise.reject(new Error(`Could not create element: ${err}`));\n        });\n}\n\n// This function returns a promise of material being uploaded. Incase there is an error, the parameter\n// in the callback function is an error , else it will be null.\nexport function pushMaterialsToLibrary(event) {\n\n    if (!event.data) {return Promise.reject(new Error('Empty Event sent'));}\n\n    const library = getLibraryFromEventData(event.data);\n    if (!library) {\n        return Promise.reject(new Error('Library Not Found'));\n    }\n\n    if (!checkLibraryWritable(library)) {\n        return Promise.reject(new Error('Could not create element: library is read-only'));\n    }\n\n    //copy primary representation file to temproary location, as addMaterialElement will delete original file.\n\n    const createMaterialElement = material => {\n\n        const primaryRep = [\n            {\n                path : material.representations[0].source.path,\n                relationship : 'primary',\n                data : [\n                    {\n                        namespace : '3d',\n                        key : 'data',\n                        value : material.representations[0]['3d#data']\n                    }\n                ],\n                moveFile : false\n            } ];\n        const type = configuration.MATERIAL_ELEMENT_TYPE;\n        return addMaterialElement(type, material.name, primaryRep ,material.representations[1].source.path,library,'Existing');\n    };\n\n    return environment.execApp('getSelectedMaterialList').then((materialList) => {\n        if (!materialList) {\n            return Promise.reject(new Error('Could Not get selected materials'));\n        }\n        try {\n            materialList = JSON.parse(materialList);\n            materialList.filter(x => x).map(createMaterialElement);\n        } catch (ex) {\n            return Promise.reject(new Error('Add Material Failed'));\n        }\n    });\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport environment from 'app/js/environment';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport debugLog from 'app/js/utils/debugLog';\nimport viewState from 'app/js/state/viewState';\nimport { getElementModifiedTime } from 'app/js/utils/libraryUtils';\nimport { getLibraryFromEventData } from './utils';\nimport { pushColorsToLibrary } from './colorUtils';\nimport { addTextStyle, addParaStyle } from './textUtils';\nimport { onAddElementToLibrary, onUpdateElement, onAddSelectionToLibrary } from './pushUtils';\nimport { pushMaterialsToLibrary } from './materialUtils';\n\nconst TEXT_REPRESENTATION_AIFILE_TYPE = 'application/illustrator-text';\n\nconst onFontListChanged = () => {\n    configuration.currentProduct.fontManager.invalidateFontList();\n};\n\nconst onLayerUpdateEvent = () => {\n    layerSelectionManager.handleSelectionChange();\n};\n\nconst resetPanelView = () => {\n    if (!viewState.isStockSearchMode()) {\n        viewState.resetMode();\n    }\n};\n\nconst onDocumentDeactivateEvent = () => {\n    resetPanelView();\n};\n\nexport function updateLibrariesInfo() {\n    // Note: libraryManager.getLibraries already returns the library names sorted alphabetically\n    const libraryNames = libraryManager.libraries\n        .filter(library => !library.isDeletedFromServer)\n        .map(library => ({ name: library.name, id: library.id, writable: library.isWritable }));\n\n    // Get the index of the current library\n    const currentLibrary = libraryManager.currentLibrary;\n    const currentLibraryIndex = currentLibrary ? libraryNames.findIndex(library => library.id === currentLibrary.id) : -1;\n\n    const event = environment.createEvent('ILST.libraryListUpdated', 'APPLICATION');\n    event.data = {\n        names: libraryNames,\n        current: currentLibraryIndex\n    };\n    environment.dispatchEvent(event);\n}\n\nconst onForceSyncLibrary = () => {\n    libraryManager.sync(false, false);\n};\n\nconst onWorkspaceChanged = event => {\n    // Current implementation of getLibraryFromEventData sets the current library as well.\n    // For now current library is set automatically so nothing else to do.\n    getLibraryFromEventData(event.data);\n};\n\nconst onStockOpenEvent = async event => {\n    if (!event.data || event.data.elementRef === undefined) {\n        return;\n    }\n\n    const element = await libraryManager.resolveElementReference(event.data.elementRef);\n    const adobeStockId = AdobeStockUtils.getStockId(element);\n\n    // TODO: Do we know it's always an image?\n    const representation = elementConfiguration.findUsableRepresentation(element, FileUtils.getUsableTypes(configuration.IMAGE_ELEMENT_TYPE));\n    if (representation) {\n        return representation.getContentPath().then(path => environment.execApp('placeAsset', [\n            path,\n            element.library.name,\n            element.name,\n            element.getLegacyReference(),\n            getElementModifiedTime(element),\n            element.created,\n            adobeStockId,\n            adobeStockId ? AdobeStockUtils.isLicensed(element) : null,\n            true,\n            true\n        ]));\n    }\n\n    // Fallback: use the full-size rendition if we don't have a representation we can use\n    return element.getThumbnailPath().then(path => environment.execApp('placeAsset', [\n        path,\n        element.library.name,\n        element.name,\n        element.getLegacyReference(),\n        getElementModifiedTime(element),\n        element.created,\n        adobeStockId,\n        adobeStockId ? AdobeStockUtils.isLicensed(element) : null,\n        true,\n        true\n    ]), err => debugLog.log(err));\n};\n\nconst onStockOpenTemplateEvent = async event => {\n    if (event.data && event.data.elementRef !== undefined) {\n        const element = await libraryManager.resolveElementReference(event.data.elementRef);\n\n        // TODO: Do we know it's always a template?\n        const representation = elementConfiguration.findUsableRepresentation(element, FileUtils.getUsableTypes(configuration.TEMPLATE_ELEMENT_TYPE));\n        if (representation) {\n            return representation.getContentPath().then(path => environment.execApp('openDocumentFromTemplate', [ path ]));\n        }\n    }\n};\n\nconst onGetTextAsAiFile = async event => {\n    const sendAiTextFileCreatedEvent = (filePath, stripStyles, contextData) => {\n        const responseEvent = environment.createEvent('ILST.textFileCreated', 'APPLICATION');\n        const dataMap = {};\n        if (filePath) {\n            dataMap.stripStyle = stripStyles;\n            dataMap.path = filePath;\n            dataMap.usingContextMenu = false;\n            dataMap.placeInline = false;\n            dataMap.contextData = contextData;\n        }\n        responseEvent.data = JSON.stringify(dataMap);\n        environment.dispatchEvent(responseEvent);\n    };\n\n    if (!event.data || event.data.elementRef === undefined) {\n        sendAiTextFileCreatedEvent();\n        return;\n    }\n\n    const element = await libraryManager.resolveElementReference(event.data.elementRef);\n    const representation = elementConfiguration.findUsableRepresentation(element);\n    if (element.type === configuration.TEXT_ELEMENT_TYPE && representation) {\n        if (representation.type === configuration.TEXT_REPRESENTATION_JSON_TYPE) {\n            const textData = representation.getValue(configuration.TEXT_NAMESPACE, configuration.TEXT_DATA_KEY);\n            textData.id = element.id + ';' + element.modified;\n            textData.type = 'text';\n            environment.execApp('getAiFileForText', [ textData ]).then(\n                filePath => sendAiTextFileCreatedEvent(filePath, event.data.stripStyle, event.data.contextData),\n                sendAiTextFileCreatedEvent\n            );\n        } else if (representation.type === TEXT_REPRESENTATION_AIFILE_TYPE) {\n            representation.getContentPath().then(filePath => sendAiTextFileCreatedEvent(filePath, event.data.stripStyle, event.data.contextData));\n        }\n    }\n};\n\nexport function listen() {\n    environment.addEventListener('documentAfterDeactivate', onDocumentDeactivateEvent);\n    environment.addEventListener('artSelectionChanged', onLayerUpdateEvent);\n    environment.addEventListener('fontListChanged', onFontListChanged);\n    environment.addEventListener('ILST.addElementToLibrary', onAddElementToLibrary);\n    environment.addEventListener('ILST.updateElement', onUpdateElement);\n    environment.addEventListener('ILST.forceSyncLibrary', onForceSyncLibrary);\n    environment.addEventListener('ILST.pushColorsToLibrary', pushColorsToLibrary);\n    environment.addEventListener('ILST.pushCharStyleToLibrary', addTextStyle);\n    environment.addEventListener('ILST.pushParaStyleToLibrary', addParaStyle);\n    environment.addEventListener('ILST.addSelectionToLibrary', onAddSelectionToLibrary);\n    environment.addEventListener('ILST.workspaceChanged', onWorkspaceChanged);\n    environment.addEventListener('ILST.openStock', onStockOpenEvent);\n    environment.addEventListener('ILST.openStockTemplate', onStockOpenTemplateEvent);\n    environment.addEventListener('ILST.getTextAsAiFile', onGetTextAsAiFile);\n    environment.addEventListener('ILST.pushMaterialsToLibrary', pushMaterialsToLibrary);\n}\n\nexport function stop() {\n    environment.removeEventListener('documentAfterDeactivate', onDocumentDeactivateEvent);\n    environment.removeEventListener('artSelectionChanged', onLayerUpdateEvent);\n    environment.removeEventListener('fontListChanged', onFontListChanged);\n    environment.removeEventListener('ILST.addElementToLibrary', onAddElementToLibrary);\n    environment.removeEventListener('ILST.updateElement', onUpdateElement);\n    environment.removeEventListener('ILST.forceSyncLibrary', onForceSyncLibrary);\n    environment.removeEventListener('ILST.pushColorsToLibrary', pushColorsToLibrary);\n    environment.removeEventListener('ILST.pushCharStyleToLibrary', addTextStyle);\n    environment.removeEventListener('ILST.pushParaStyleToLibrary', addParaStyle);\n    environment.removeEventListener('ILST.addSelectionToLibrary', onAddSelectionToLibrary);\n    environment.removeEventListener('ILST.workspaceChanged', onWorkspaceChanged);\n    environment.removeEventListener('ILST.openStock', onStockOpenEvent);\n    environment.removeEventListener('ILST.openStockTemplate', onStockOpenTemplateEvent);\n    environment.removeEventListener('ILST.getTextAsAiFile', onGetTextAsAiFile);\n    environment.removeEventListener('ILST.pushMaterialsToLibrary', pushMaterialsToLibrary);\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport BrushElementConfig from 'app/js/config/elements/BrushElementConfig';\n\nexport default class ILSTBrushElementConfig extends BrushElementConfig {\n\n    _addBrushToDocument = function(element, representation) {\n        reportApplyMetric(representation, 'useBrush');\n        return representation.getContentPath().then(path => environment.execApp('loadAndSelectBrush', [ path, element.name ]));\n    };\n\n    getApplyOperations(element) {\n        const brushTypes = FileUtils.getUsableTypes(element.type);\n        const representation = element.representations.find(rep => {\n            const isRendition = rep.relationship === 'rendition';\n            const isBrush = this._config.isRepresentationCompatible(rep, brushTypes);\n            return !isRendition && isBrush;\n        });\n\n        const layerInfo = layerSelectionManager.getLayerInfo();\n\n        if (!layerInfo || !representation) {\n            return [];\n        }\n\n        return [ {\n            name: 'DL_ADD_BRUSH_TO_DOC',\n            icon: 'brush',\n            onClick: true,\n            apply: () => this._addBrushToDocument(element, representation),\n            displayInMenu: true\n        } ];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport ColorElementConfig from 'app/js/config/elements/ColorElementConfig';\nimport { logPIPEvent, PIPGlobals } from '../utils';\nimport { getIllustratorData, setIllustratorData } from '../colorUtils';\n\nfunction alertSpotMismatch() {\n    const event = environment.createEvent('ILST.SpotMismtached', 'APPLICATION');\n    environment.dispatchEvent(event);\n}\n\nexport default class ILSTColorElementConfig extends ColorElementConfig {\n\n    // The colorData parameter supports using this apply function by color themes\n    _setColor(element, operation, colorData, after) {\n        if (!colorData) {\n            colorData = [];\n            // JSX expects primary representation to be the first element in the array\n            element.representations.forEach(rep => {\n                const data = rep.getValue(configuration.COLOR_NAMESPACE, configuration.COLOR_DATA_KEY);\n                const ilstData = getIllustratorData(rep);\n                if (ilstData) {\n                    data.global = ilstData.global;\n                }\n                const colorName = element.name;\n                data.name = colorName;\n                if (rep.relationship === 'primary') {\n                    colorData.unshift(data);\n                } else {\n                    colorData.push(data);\n                }\n            });\n\n            if (element.representations.length > 0) {\n                logPIPEvent(PIPGlobals.DLtoAI, PIPGlobals.Color, PIPGlobals.Added);\n                reportApplyMetric(element.representations[0], operation);\n            }\n        }\n\n        if (after) {\n            after(operation);\n        }\n\n        return environment.execApp(operation, [ colorData ]).then(isSpotMismatch => {\n            if (isSpotMismatch === 'true') {\n                alertSpotMismatch();\n            }\n        });\n    }\n\n    getApplyOperations(element) {\n\n        // If we have no document there is no way to use a color\n        const layerInfo = layerSelectionManager.getLayerInfo();\n        if (!layerInfo) {\n            return [];\n        }\n\n        if (!layerInfo.selectionExists && !layerInfo.textSelectionExists && !layerInfo.insertionPointExists) {\n            return [ {\n                name: 'DL_ID_ADD_COLORS_TOOLTIP',\n                icon: 'paintbucket',\n                allowMultiple: true,\n                apply: (colorData, after) => this._setColor(element, 'addColor', colorData, after),\n                displayInMenu: true\n            } ];\n        }\n\n        return [ {\n            name: 'DL_SET_COLOR_TOOLTIP',\n            icon: 'paintbucket',\n            apply: (colorData, after) => this._setColor(element, 'setColor', colorData, after),\n            displayInMenu: true,\n            onClick: true\n        }, {\n            name: 'DL_ID_ADD_COLORS_TOOLTIP',\n            icon: 'paintbucket',\n            allowMultiple: true,\n            apply: (colorData, after) => this._setColor(element, 'addColor', colorData, after),\n            displayInMenu: true\n        } ];\n    }\n\n    defaultEditOperation(element) {\n        const representation = this._config.findUsableRepresentation(element);\n        const colorData = representation && representation.getValue(configuration.COLOR_NAMESPACE, configuration.COLOR_DATA_KEY);\n        // add the app specific data to the color data\n        const ilstData = representation && getIllustratorData(representation);\n        if (ilstData) {\n            colorData.global = ilstData.global;\n        }\n\n        return environment.execApp('replaceColor', [ colorData ]).then(colorWasChanged => {\n            if (!JSON.parse(colorWasChanged)) {\n                return;\n            }\n\n            return environment.execApp('getLayerColor', []).then(color => {\n                const parsedColor = JSON.parse(color);\n\n                element.beginOperation();\n                element.removeAllRepresentations();\n\n                parsedColor.forEach((rep, index) => {\n                    const relationship = index === 0 ? 'primary' : 'rendition';\n                    const newRepresentation = element.createRepresentation(configuration.COLOR_REPRESENTATION_TYPE, relationship);\n                    if ('global' in rep) {\n                        setIllustratorData(newRepresentation, rep);\n                        delete rep.global;\n                    }\n                    newRepresentation.setValue(configuration.COLOR_NAMESPACE, configuration.COLOR_DATA_KEY, rep);\n                });\n\n                element.endOperation();\n            });\n        });\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport ColorThemeElementConfig from 'app/js/config/elements/ColorThemeElementConfig';\nimport { logPIPEvent, PIPGlobals } from '../utils';\n\nconst COLOR_THEME_DATA_KEY = 'data';\nconst COLOR_THEME_NAMESPACE = 'colortheme';\n\nexport default class ILSTColorThemeElementConfig extends ColorThemeElementConfig {\n\n    _addThemeAsSwatchGroup(element) {\n        const representation = element.getPrimaryRepresentation();\n        const colorThemeData = representation && representation.getValue(COLOR_THEME_NAMESPACE, COLOR_THEME_DATA_KEY);\n\n        return environment.execApp('addSwatchGroup', [ colorThemeData, element.name ]).then(err => {\n            if (err === 'undefined') {\n                logPIPEvent(PIPGlobals.DLtoAI, PIPGlobals.SwatchGroups, PIPGlobals.Added);\n            }\n            reportApplyMetric(representation, 'AddColorTheme');\n        });\n    }\n\n    getApplyOperations(element, subElement) {\n        // Inherit operations for colours, but apply to subElement (colour data)\n        const colorThemeOps = super.getApplyOperations(element, subElement);\n\n        const layerInfo = layerSelectionManager.getLayerInfo();\n        if (layerInfo) {\n            colorThemeOps.push({\n                name: 'DL_ADD_COLORTHEME_TO_SWATCHES',\n                icon: 'download',\n                displayInMenu: true,\n                allowMultiple: true,\n                apply: () => this._addThemeAsSwatchGroup(element)\n            });\n        }\n        return colorThemeOps;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\nimport CEPFontElementConfig from 'app/applications/CEP/CEPFontElementConfig';\nimport { logPIPEvent, PIPGlobals } from '../utils';\n\nexport default class ILSTFontElementConfig extends CEPFontElementConfig {\n\n    _setFont(element, operation, multiOpData) {\n        logPIPEvent(PIPGlobals.DLtoAI, PIPGlobals.CharacterStyle, PIPGlobals.Applied);\n        super._setFont(element, operation, multiOpData);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport environment from 'app/js/environment';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport productInterface from 'app/js/interface/productInterface';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport lockManager from 'app/js/managers/lockManager';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric, reportApplyFullSizeMetric, checkFileSize, getElementModifiedTime, setThumbnail } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport ImageElementConfig from 'app/js/config/elements/ImageElementConfig';\nimport tempFileManager from 'app/js/managers/tempFileManager';\nimport documentWatchManager from 'app/js/managers/documentWatchManager';\n\nexport default class ILSTImageElementConfig extends ImageElementConfig {\n\n    _addImageToDocument(element, isLinked) {\n        const adobeStockId = AdobeStockUtils.getStockId(element);\n\n        const representation = this._config.findUsableRepresentation(element);\n        if (representation) {\n            reportApplyMetric(representation, 'placeAsset', isLinked);\n            return representation.getContentPath().then(path => {\n                return environment.execApp('placeAsset', [\n                    path,\n                    element.library.name,\n                    element.name,\n                    element.getLegacyReference(),\n                    getElementModifiedTime(element),\n                    element.created,\n                    adobeStockId,\n                    (adobeStockId ? AdobeStockUtils.isLicensed(element) : null),\n                    isLinked\n                ]);\n            });\n        }\n\n        // Fallback: use the full-size rendition if we don't have a representation we can use\n        return element.getThumbnailPath().then(path => {\n            reportApplyFullSizeMetric(element, 'placeAsset', isLinked);\n            return environment.execApp('placeAsset', [\n                path,\n                element.library.name,\n                element.name,\n                element.getLegacyReference(),\n                getElementModifiedTime(element),\n                element.created,\n                adobeStockId,\n                (adobeStockId ? AdobeStockUtils.isLicensed(element) : null),\n                isLinked\n            ]);\n        });\n    }\n\n    getApplyOperations(element) {\n\n        // If we have no document there is no way to use a graphic\n        const layerInfo = layerSelectionManager.getLayerInfo();\n        if (!layerInfo) {\n            return [];\n        }\n\n        return [ {\n            name: 'DL_ADD_IMAGE_TO_DOC_AS_LINKED',\n            icon: 'download',\n            apply: () => this._addImageToDocument(element, true),\n            displayInMenu: true\n        }, {\n            name: 'DL_ADD_IMAGE_TO_DOC_AS_COPY',\n            icon: 'download',\n            apply: () => this._addImageToDocument(element, false),\n            displayInMenu: true\n        } ];\n    }\n\n    _getLockId(element) {\n        return 'documentLock_' + element.id;\n    }\n\n    _onDocumentClose(element, editData) {\n        const lockId = this._getLockId(element);\n        lockManager.obtainLock(lockId, () => {\n            documentWatchManager.stopListening(editData.listenerId);\n            editData.isClosed = true;\n            if (editData.isSaveInProgress === false) {\n                tempFileManager.deleteTempFile(editData.tempPath);\n            }\n\n            productInterface.elementEditCompleted(element);\n            lockManager.releaseLock(lockId);\n        });\n    }\n\n    _onDocumentSave(element, editData) {\n        // Prevent save from updating library, if the asset is too big\n        if (!checkFileSize(editData.tempPath)) {\n            return;\n        }\n\n        editData.isSaveInProgress = true;\n\n        // Check if the library exists - if it was deleted, switch to the current library\n        let library = element.library;\n        const libraryName = library.name;\n        const isDeleted = !library || library.isDeletedLocally;\n        let isRecovered = false;\n\n        if (isDeleted || !library.isWritable) {\n            library = libraryManager.getRecoveryLibrary(library.name);\n\n            if (!library) {\n                // There's no recovery library, so don't do anything\n                return;\n            }\n            isRecovered = true;\n        }\n\n        const lockId = this._getLockId(element);\n        lockManager.obtainLock(lockId, () => {\n\n            // If the element we're editing was deleted, we recreate it as a new element, so the changes aren't lost.\n            // Otherwise, we just remove the existing representations so we can add the new ones\n            const stockData = AdobeStockUtils.getStockDataForElement(element);\n            if (element.isDeletedLocally || isRecovered) {\n                element = library.createElement(element.name, element.type);\n            } else {\n                element.beginOperation();\n                element.removeAllRepresentations();\n            }\n\n            // Update the representations\n            const promises = [];\n            const assetMimeType = FileUtils.fileNameToMimeType(editData.tempPath, element.type);\n            const newRepresentation = element.createRepresentation(assetMimeType, 'primary');\n            if (stockData) {\n                // If this element is an adobe stock image, make sure we keep its stock image data\n                AdobeStockUtils.setStockData(newRepresentation, stockData);\n            }\n            promises.push(newRepresentation.setContentFromPath(editData.tempPath));\n\n            const pngPath = FileUtils.getFileNameWithoutExtension(editData.tempPath) + '.png';\n            if (pngPath && FileUtils.existsFile(pngPath)) {\n                promises.push(setThumbnail(element, configuration.IMAGE_THUMBNAIL_SIZE, pngPath));\n            }\n\n            // Final cleanup after saving.\n            const done = () => {\n                productInterface.sendElementUpdated(newRepresentation);\n\n                const operationsFinished = element.endOperation();\n\n                lockManager.releaseLock(lockId);\n\n                if (isRecovered) {\n                    elementSelectionState.revealElement(element);\n\n                    if (isDeleted) {\n                        environment.showError(translate('DL_WARNING_RECOVERED_FROM_DELETED', { recoveryLibraryName: library.name }));\n                    } else {\n                        environment.showError(translate('DL_WARNING_RECOVERED_FROM_READONLY', { recoveryLibraryName: library.name, originalLibraryName: libraryName }));\n                    }\n                }\n\n                operationsFinished.then(() => {\n                    if (editData.isClosed) { //do we need it.\n                        tempFileManager.deleteTempFile(editData.tempPath);\n                    } else {\n                        tempFileManager.updateTempFile(newRepresentation, editData.tempPath);\n                    }\n                    editData.isSaveInProgress = false;\n                });\n            };\n\n            Promise.all(promises).then(done, done);\n        });\n    }\n\n    defaultEditOperation(element) {\n\n        if (!this._config.isEditable(element)) {\n            // Returning false, so we fall back to the edit original workflow.\n            return false;\n        }\n\n        // At this point, we're guaranteed to have a primary representation that is of an editable type\n        const representation = element.getPrimaryRepresentation();\n\n        // Can't modify the representation directly - need to copy it\n        tempFileManager.getTempFile(representation)\n            .then(tempPath => {\n                const pngPath = FileUtils.getFileNameWithoutExtension(tempPath) + '.png';\n                environment.execApp('openAssetForEdit', [ tempPath, pngPath, 'Image' ])\n                    .then(fileName => {\n                        const event = environment.createEvent('com.adobe.illustrator.FitCurrentDocumentViewToActiveArtboard', 'APPLICATION');\n                        environment.dispatchEvent(event);\n                        const editData = {\n                            tempPath,\n                            isClosed: false,\n                            isSaveInProgress: false\n                        };\n                        editData.listenerId = documentWatchManager.startListening(fileName, tempPath, event => {\n                            if (event === 'closed') {\n                                this._onDocumentClose(element, editData);\n                            } else if (event === 'saved') {\n                                this._onDocumentSave(element, editData);\n                            }\n                        });\n                    });\n            });\n    }\n\n    isDisabled(element) {\n        return !this._config.findUsableRepresentation(element) && !element.getCachedThumbnailPath();\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport ParagraphStyleElementConfig from 'app/js/config/elements/ParagraphStyleElementConfig';\nimport { logPIPEvent, PIPGlobals } from '../utils';\n\nconst STYLE_REPRESENTATION_JSON_TYPE = 'application/vnd.adobe.paragraphstyle+json';\nconst STYLE_NAMESPACE = 'paragraphstyle';\nconst STYLE_DATA_KEY = 'data';\n\nexport default class IDSNParagraphStyleElementConfig extends ParagraphStyleElementConfig {\n\n    _setStyleInfo(styleData, name, id) {\n        styleData.type = 'parastyle';\n        styleData.name = name;\n        styleData.id = id;\n    }\n\n    _useParaStyle(element, operation, multiOpData) {\n        const isFirstElement = multiOpData.index === 1;\n        const isLastElement = multiOpData.index === multiOpData.length;\n\n        const representation = this._config.findUsableRepresentation(element);\n        reportApplyMetric(representation, operation);\n\n        if (representation) {\n            const styleName = element.name;\n            const styleId = element.id + ';' + element.modified;\n\n            if (representation.type === STYLE_REPRESENTATION_JSON_TYPE) {\n                const styleData = representation.getValue(STYLE_NAMESPACE, STYLE_DATA_KEY);\n                this._setStyleInfo(styleData, styleName, styleId);\n                return environment.execApp(operation, [ styleData, isFirstElement, isLastElement ]);\n            }\n        }\n    }\n\n    _setParaStyle(element, multiOpData) {\n        logPIPEvent(PIPGlobals.DLtoAI, PIPGlobals.ParagraphStyle, PIPGlobals.Applied);\n        return this._useParaStyle(element, 'setFont', multiOpData);\n    }\n\n    _createTextLayer(element, multiOpData) {\n        logPIPEvent(PIPGlobals.DLtoAI, PIPGlobals.ParagraphStyle, PIPGlobals.Added);\n        return this._useParaStyle(element, 'createTextLayer', multiOpData);\n    }\n\n    getApplyOperations(element, subElement, multiOpData) {\n        const layerInfo = layerSelectionManager.getLayerInfo();\n\n        // If we have no document there is no way to use a text style\n        if (!layerInfo) {\n            return [];\n        }\n\n        const operations = [];\n        if (layerInfo && layerInfo.kind === 'LayerKind.TEXT') {\n            operations.push({\n                name: 'DL_SET_PARA_STYLE_TOOLTIP',\n                icon: 'text',\n                onClick: true,\n                apply: () => this._setParaStyle(element, multiOpData),\n                displayInMenu: true\n            });\n        }\n\n        operations.push({\n            name: 'DL_ADD_AS_PARA_STYLE_TOOLTIP',\n            icon: 'pastetext',\n            apply: () => this._createTextLayer(element, multiOpData),\n            displayInMenu: true,\n            allowMultiple: true\n        });\n\n        return operations;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { reportApplyMetric, reportApplyFullSizeMetric, getElementModifiedTime } from 'app/js/utils/libraryUtils';\nimport PatternElementConfig from 'app/js/config/elements/PatternElementConfig';\n\nexport default class ILSTPatternElementConfig extends PatternElementConfig {\n\n    dragType = 'image';\n    allowDragWithoutUsableRepresentation = true;\n\n    _applyPattern(element, svgRepresentation) {\n        let representation;\n        if (svgRepresentation && configuration.currentProduct.config.enableSVGPatterns) {\n            representation = svgRepresentation;\n        } else {\n            representation = this._config.findUsableRepresentation(element);\n        }\n        if (representation) {\n            reportApplyMetric(representation, 'applyPattern');\n            return representation.getContentPath().then(path => {\n                const event = environment.createEvent('ILST.patternApplied', 'APPLICATION');\n                event.data = {\n                    path,\n                    type: representation.type,\n                    name: element.name\n                };\n                return environment.dispatchEvent(event);\n            });\n        }\n        return element.getThumbnailPath().then(path => {\n            reportApplyFullSizeMetric(element, 'applyPattern');\n            const event = environment.createEvent('ILST.patternApplied', 'APPLICATION');\n            event.data = {\n                path,\n                name: element.name\n            };\n            return environment.dispatchEvent(event);\n        });\n    }\n\n    _addImageToDocument(element, isLinked = false) {\n        const adobeStockId = AdobeStockUtils.getStockId(element);\n\n        const representation = this._config.findUsableRepresentation(element);\n        if (representation) {\n            reportApplyMetric(representation, 'placeAsset', isLinked);\n            return representation.getContentPath().then(path => {\n                return environment.execApp('placeAsset', [\n                    path,\n                    element.library.name,\n                    element.name,\n                    element.getLegacyReference(),\n                    getElementModifiedTime(element),\n                    element.created,\n                    adobeStockId,\n                    (adobeStockId ? AdobeStockUtils.isLicensed(element) : null),\n                    isLinked\n                ]);\n            });\n        }\n\n        // Fallback: use the full-size rendition if we don't have a representation we can use\n        return element.getThumbnailPath().then(path => {\n            reportApplyFullSizeMetric(element, 'placeAsset', isLinked);\n            return environment.execApp('placeAsset', [\n                path,\n                element.library.name,\n                element.name,\n                element.getLegacyReference(),\n                getElementModifiedTime(element),\n                element.created,\n                adobeStockId,\n                (adobeStockId ? AdobeStockUtils.isLicensed(element) : null),\n                isLinked\n            ]);\n        });\n    }\n\n    _addVectorPatternTileToDocument(element, svgRepresentation, isLinked = false) {\n        const adobeStockId = AdobeStockUtils.getStockId(element);\n\n        reportApplyMetric(svgRepresentation, 'placeAsset', isLinked);\n        return svgRepresentation.getContentPath().then(path => {\n            return environment.execApp('placeAsset', [\n                path,\n                element.library.name,\n                element.name,\n                element.getLegacyReference(),\n                getElementModifiedTime(element),\n                element.created,\n                adobeStockId,\n                (adobeStockId ? AdobeStockUtils.isLicensed(element) : null),\n                isLinked\n            ]);\n        });\n    }\n\n    getApplyOperations(element) {\n\n        // If we have no document there is no way to use a graphic\n        const layerInfo = layerSelectionManager.getLayerInfo();\n        if (!layerInfo) {\n            return [];\n        }\n\n        const svgRepresentation = element.representations.find(rep => {\n            const isSVG = rep.type === 'image/svg+xml';\n            const isPattern = this._config.isRepresentationCompatible(rep, FileUtils.getUsableTypes(element.type));\n            return isSVG && isPattern;\n        });\n\n        const actions = [ {\n            name: 'DL_APPLY_PATTERN',\n            icon: 'paintbucket',\n            apply: () => this._applyPattern(element, svgRepresentation),\n            displayInMenu: true,\n            onClick: true\n        }, {\n            name: 'DL_ADD_PATTERN_TO_DOC_AS_IMAGE_AS_COPY',\n            icon: 'download',\n            apply: () => this._addImageToDocument(element),\n            displayInMenu: true\n        } ];\n\n        if (svgRepresentation) {\n            actions.push({\n                name: 'DL_ADD_VECTOR_PATTERN_TILE_TO_DOC_AS_COPY',\n                icon: 'download',\n                apply: () => this._addVectorPatternTileToDocument(element, svgRepresentation),\n                displayInMenu: true\n            });\n        }\n        return actions;\n    }\n\n    getDragData(element) {\n        // Get the representation to use, and the path to it\n        const usableRepresentation = this._config.findUsableRepresentation(element);\n        let contentPath;\n\n        if (usableRepresentation) {\n            // will return undefined if not cached\n            contentPath = usableRepresentation.getCachedContentPath();\n        }\n\n        if (contentPath) {\n            return {\n                data: [ contentPath ],\n                placeType: 'unlinked',\n                // NOTE: The representation is only for analytics purposes; this will get stripped before setting the drag data\n                usedRepresentationForAnalytics: usableRepresentation\n            };\n        }\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2016 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\n\nimport TemplateElementConfig from 'app/js/config/elements/TemplateElementConfig';\n\nexport default class ILSTTemplateElementConfig extends TemplateElementConfig {\n\n    _openDocumentFromTemplate(element, representation, isStockMissing) {\n        if (isStockMissing) {\n            return environment.showError(translate(AdobeStockUtils.getStockTemplateUseError(element)));\n        }\n\n        reportApplyMetric(representation, 'useTemplate');\n        return representation.getContentPath().then(path => environment.execApp('openDocumentFromTemplate', [ path, element.name ]));\n    }\n\n    getApplyOperations(element) {\n        const templateTypes = FileUtils.getUsableTypes(element.type);\n        const representation = element.representations.find(rep => {\n            const isRendition = rep.relationship === 'rendition';\n            const isTemplate = this._config.isRepresentationCompatible(rep, templateTypes);\n            return !isRendition && isTemplate;\n        });\n\n        // If there's no representation because we haven't finished downloading the stock element, we still add an apply operation\n        // (which gives an error message), so the user understands what's going on.\n        const isStockMissing = !representation && this._config.isRepresentationCompatible(element.getPrimaryRepresentation(), templateTypes, true);\n        if (!representation && !isStockMissing) {\n            return [];\n        }\n\n        return [ {\n            name: 'DL_OPEN_DOC_FROM_TEMPLATE',\n            icon: 'template',\n            onDoubleClick: true,\n            apply: () => this._openDocumentFromTemplate(element, representation, isStockMissing),\n            displayInMenu: true\n        } ];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2016 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport environment from 'app/js/environment';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport productInterface from 'app/js/interface/productInterface';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport lockManager from 'app/js/managers/lockManager';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric, checkFileSize, setThumbnail } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport TextElementConfig from 'app/js/config/elements/TextElementConfig';\nimport tempFileManager from 'app/js/managers/tempFileManager';\nimport documentWatchManager from 'app/js/managers/documentWatchManager';\n\nconst TEXT_REPRESENTATION_AIFILE_TYPE = 'application/illustrator-text';\n\nexport default class ILSTTextElementConfig extends TextElementConfig {\n\n    _sendAiTextFileCreatedEvent(filePath, stripStyles, placeInline) {\n        const responseEvent = environment.createEvent('ILST.textFileCreated', 'APPLICATION');\n        const dataMap = {};\n        if (filePath) {\n            dataMap.stripStyle = stripStyles;\n            dataMap.placeInline = placeInline;\n            dataMap.path = filePath;\n            dataMap.usingContextMenu = true;\n        }\n        responseEvent.data = JSON.stringify(dataMap);\n        environment.dispatchEvent(responseEvent);\n    }\n\n    // operation: the function that should be called in execApp\n    // stripStyles: true if user selected place without styles\n    _useText(element, operation, stripStyles, placeInline) {\n        const representation = this._config.findUsableRepresentation(element);\n        if (!representation) {\n            return;\n        }\n\n        reportApplyMetric(representation, operation);\n        const textId = element.id + ';' + element.modified;\n\n        if (representation.type === configuration.TEXT_REPRESENTATION_JSON_TYPE) {\n            const textData = representation.getValue(configuration.TEXT_NAMESPACE, configuration.TEXT_DATA_KEY);\n            // Uncomment following line to dump the JSON data being consumed.\n            //console.log(JSON.stringify(textData));\n            textData.id = textId;\n            textData.type = 'text';\n            return environment.execApp(operation, [ textData ]).then(path => this._sendAiTextFileCreatedEvent(path, stripStyles, placeInline));\n        }\n\n        if (representation.type === TEXT_REPRESENTATION_AIFILE_TYPE) {\n            return representation.getContentPath().then(path => this._sendAiTextFileCreatedEvent(path, stripStyles, placeInline));\n        }\n    }\n\n    _setText(element) {\n        return this._useText(element, 'getAiFileForText', false, false);\n    }\n\n    _setPlainText(element) {\n        return this._useText(element, 'getAiFileForText', true, false);\n    }\n\n    _setTextInline(element) {\n        return this._useText(element, 'getAiFileForText', false, true);\n    }\n\n    getApplyOperations(element) {\n        const layerInfo = layerSelectionManager.getLayerInfo();\n\n        // If we have no document there is no way to use a text\n        if (!layerInfo) {\n            return [];\n        }\n\n        if (layerInfo.textSelectionExists === true || layerInfo.insertionPointExists === true) {\n            return [ {\n                name: 'DL_ADD_TEXT_INLINE_AI',\n                icon: 'text',\n                onClick: false,\n                apply: () => this._setTextInline(element),\n                displayInMenu: true\n            } ];\n        }\n\n        return [ {\n            name: 'DL_ADD_TEXT_UNLINKED_AI',\n            icon: 'text',\n            onClick: false,\n            apply: () => this._setText(element),\n            displayInMenu: true\n        }, {\n            name: 'DL_ADD_TEXT_UNLINKED_NOSTYLES',\n            icon: 'text',\n            onClick: false,\n            apply: () => this._setPlainText(element),\n            displayInMenu: true\n        } ];\n    }\n\n    _getLockId(element) {\n        return 'documentLock_' + element.id;\n    }\n\n    _onDocumentClose(element, editData) {\n        const lockId = this._getLockId(element);\n        lockManager.obtainLock(lockId, () => {\n            documentWatchManager.stopListening(editData.listenerId);\n            editData.isClosed = true;\n            if (editData.isSaveInProgress === false) {\n                tempFileManager.deleteTempFile(editData.tempPath);\n            }\n\n            productInterface.elementEditCompleted(element);\n            lockManager.releaseLock(lockId);\n        });\n    }\n\n    _onDocumentSave(element, editData) {\n        // Prevent save from updating library, if the asset is too big\n        if (!checkFileSize(editData.tempPath)) {\n            return;\n        }\n\n        editData.isSaveInProgress = true;\n\n        if (!FileUtils.existsFile(editData.tempPath)) {\n            editData.isSaveInProgress = false;\n            return;\n        }\n\n        // Check if the library exists - if it was deleted, switch to the current library\n        let library = element.library;\n        const libraryName = library.name;\n        const isDeleted = !library || library.isDeletedLocally;\n        let isRecovered = false;\n\n        if (isDeleted || !library.isWritable) {\n            library = libraryManager.getRecoveryLibrary(library.name);\n\n            if (!library) {\n                // There's no recovery library, so don't do anything\n                return;\n            }\n            isRecovered = true;\n        }\n\n        const lockId = this._getLockId(element);\n        lockManager.obtainLock(lockId, () => {\n\n            environment.execApp('getUpdatedTextInfo', [ editData.tempPath ]).then(data => {\n                const promises = [];\n\n                const dataObj = JSON.parse(data);\n                if (dataObj.isValidSave !== true) {\n                    return;\n                }\n\n                // If the element we're editing was deleted, we recreate it as a new element, so the changes aren't lost.\n                // Otherwise, we just remove the existing representations so we can add the new ones\n                if (element.isDeletedLocally || isRecovered) {\n                    element = library.createElement(element.name, element.type);\n                } else {\n                    element.beginOperation();\n                    element.removeAllRepresentations();\n                }\n                const textData = dataObj.textData;\n                const assetMimeType = FileUtils.fileNameToMimeType(editData.tempPath, element.type);\n                const newRepresentation = element.createRepresentation(assetMimeType, 'primary');\n                promises.push(newRepresentation.setContentFromPath(editData.tempPath));\n\n                const jsonRepresentation = element.createRepresentation(configuration.TEXT_REPRESENTATION_JSON_TYPE, 'rendition');\n                jsonRepresentation.setValue(configuration.TEXT_NAMESPACE, configuration.TEXT_DATA_KEY, textData.textInfo);\n\n                const pngPath = FileUtils.getFileNameWithoutExtension(editData.tempPath) + '.png';\n                if (pngPath && FileUtils.existsFile(pngPath)) {\n                    promises.push(setThumbnail(element, configuration.IMAGE_THUMBNAIL_SIZE, pngPath));\n                }\n\n                // Final cleanup after saving.\n                const done = () => {\n                    productInterface.sendElementUpdated(newRepresentation);\n\n                    const operationsFinished = element.endOperation();\n\n                    lockManager.releaseLock(lockId);\n\n                    if (isRecovered) {\n                        elementSelectionState.revealElement(element);\n\n                        if (isDeleted) {\n                            environment.showError(translate('DL_WARNING_RECOVERED_FROM_DELETED', { recoveryLibraryName: library.name }));\n                        } else {\n                            environment.showError(translate('DL_WARNING_RECOVERED_FROM_READONLY', { recoveryLibraryName: library.name, originalLibraryName: libraryName }));\n                        }\n                    }\n\n                    operationsFinished.then(() => {\n                        if (editData.isClosed) { //do we need it.\n                            tempFileManager.deleteTempFile(editData.tempPath);\n                        } else {\n                            tempFileManager.updateTempFile(newRepresentation, editData.tempPath);\n                        }\n                        editData.isSaveInProgress = false;\n                    });\n                };\n\n                Promise.all(promises).then(done, done);\n            });\n        });\n    }\n\n    defaultEditOperation(element) {\n\n        if (!this._config.isEditable(element)) {\n            // Returning false, so we fall back to the edit original workflow.\n            return false;\n        }\n\n        // At this point, we're guaranteed to have a primary representation that is of an editable type\n        const representation = element.getPrimaryRepresentation();\n\n        // Can't modify the representation directly - need to copy it\n        tempFileManager.getTempFile(representation)\n            .then(tempPath => {\n                const pngPath = FileUtils.getFileNameWithoutExtension(tempPath) + '.png';\n                environment.execApp('openAssetForEdit', [ tempPath, pngPath, 'text' ])\n                    .then(fileName => {\n                        const editData = {\n                            tempPath,\n                            isClosed: false,\n                            isSaveInProgress: false\n                        };\n                        editData.listenerId = documentWatchManager.startListening(fileName, tempPath, event => {\n                            if (event === 'closed') {\n                                this._onDocumentClose(element, editData);\n                            } else if (event === 'saved') {\n                                this._onDocumentSave(element, editData);\n                            }\n                        });\n                    });\n            });\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { reportApplyMetric, createElementExtraMetrics } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport TextStyleElementConfig from 'app/js/config/elements/TextStyleElementConfig';\nimport { logPIPEvent, PIPGlobals } from '../utils';\nimport * as TypekitUtils from 'app/js/utils/typekitUtils';\n\nconst STYLE_REPRESENTATION_JSON_TYPE = 'application/vnd.adobe.characterstyle+json';\nconst STYLE_NAMESPACE = 'characterstyle';\nconst STYLE_DATA_KEY = 'data';\n\nexport default class ILSTTextStyleElementConfig extends TextStyleElementConfig {\n\n    _setStyleInfo(styleData, name, id) {\n        styleData.type = 'charstyle';\n        styleData.name = name;\n        styleData.id = id;\n    }\n\n    _useTextStyle(element, operation, multiOpData) {\n        const isFirstElement = multiOpData.index === 1;\n        const isLastElement = multiOpData.index === multiOpData.length;\n\n        const representation = this._config.findUsableRepresentation(element);\n        if (!representation) {\n            return;\n        }\n\n        const font = TypekitUtils.checkTypekitFont(element);\n        if (font && font.id) {\n            reportApplyMetric(representation, operation, null, { event: { value: 'typekit' } });\n        } else {\n            reportApplyMetric(representation, operation);\n        }\n\n        const styleName = element.name;\n        const styleId = element.id + ';' + element.modified;\n\n        if (representation.type === STYLE_REPRESENTATION_JSON_TYPE) {\n            const styleData = representation.getValue(STYLE_NAMESPACE, STYLE_DATA_KEY);\n            this._setStyleInfo(styleData, styleName, styleId);\n            return environment.execApp(operation, [ styleData, isFirstElement, isLastElement ]);\n        }\n    }\n\n    _setTextStyle = function(element, multiOpData) {\n        logPIPEvent(PIPGlobals.DLtoAI, PIPGlobals.CharacterStyle, PIPGlobals.Applied);\n        return this._useTextStyle(element, 'setFont', multiOpData);\n    };\n\n    _createTextLayer = function(element, multiOpData) {\n        logPIPEvent(PIPGlobals.DLtoAI, PIPGlobals.CharacterStyle, PIPGlobals.Added);\n        return this._useTextStyle(element, 'createTextLayer', multiOpData);\n    };\n\n    getApplyOperations(element, subElement, multiOpData) {\n        const layerInfo = layerSelectionManager.getLayerInfo();\n\n        // If we have no document there is no way to use a text style\n        if (!layerInfo) {\n            return [];\n        }\n\n        const operations = [];\n        if (layerInfo.kind === 'LayerKind.TEXT') {\n            operations.push({\n                name: 'DL_SET_TEXT_STYLE_TOOLTIP',\n                icon: 'text',\n                onClick: true,\n                apply: () => this._setTextStyle(element, multiOpData),\n                displayInMenu: true\n            });\n        }\n\n        operations.push({\n            name: 'DL_ADD_AS_TEXT_STYLE_TOOLTIP',\n            icon: 'pastetext',\n            apply: () => this._createTextLayer(element, multiOpData),\n            displayInMenu: true,\n            allowMultiple: true\n        });\n\n        return operations;\n    }\n\n    _addTextStyleElement(layerInfo, library, opType) {\n\n        // If for some reason we don't have layerInfo then we just need to break\n        if (!layerInfo || layerInfo.kind !== 'LayerKind.TEXT') {\n            return Promise.reject('not a text layer');\n        }\n\n        return environment.execApp('getCharStyleInfo').then(data => {\n            const styleData = JSON.parse(data);\n\n            // Set the default text style name if one isn't defined\n            if (!styleData.styleName) {\n                styleData.styleName = translate('DL_TYPE_NEW_CHAR_STYLE');\n            }\n\n            const newElement = createElementExtraMetrics(library, styleData.styleName, configuration.CHARACTER_STYLE_ELEMENT_TYPE, {\n                opType\n            });\n\n            const newRepresentation = newElement.createRepresentation(STYLE_REPRESENTATION_JSON_TYPE, 'primary');\n            newRepresentation.setValue(STYLE_NAMESPACE, STYLE_DATA_KEY, styleData.styleInfo);\n\n            const updatePromises = [];\n            if (styleData.previewPath) {\n                const newRendition = newElement.createRepresentation('image/png', 'rendition');\n                updatePromises.push(newRendition.setContentFromPath(styleData.previewPath));\n            }\n\n            return Promise.all(updatePromises)\n                .then(() => {\n                    const cleanupPromises = [];\n\n                    if (styleData.previewPath) {\n                        cleanupPromises.push(newElement.setThumbnailCache(configuration.CHARACTER_STYLE_THUMBNAIL_SIZE, styleData.previewPath));\n                    }\n                    cleanupPromises.push(newElement.endOperation());\n\n                    Promise.all(cleanupPromises).then(() => {\n                        if (styleData.previewPath) {\n                            FileUtils.deleteFile(styleData.previewPath);\n                        }\n                    });\n\n                    return newElement;\n                })\n                .catch(() => {\n                    library.removeElement(newElement, true);\n                    return Promise.reject('Could not create element.');\n                });\n        });\n    }\n\n    getAddOperations(layerInfo) {\n        if (!layerInfo || !layerInfo.text || (layerInfo.isAppliedCharStyleSupported === false)) {\n            return [];\n        }\n\n        const addTextStyle = (library, opType) => {\n            return new Promise(resolve => {\n                // We need to get the most current Character Style data because the user could have changed it since last selection.\n                layerSelectionManager.updateLayerInfo().then(() => resolve(this._addTextStyleElement(layerInfo, library, opType)));\n            });\n        };\n\n        // Note: for all layers, we display the operation, just disable it if it's not a text layer\n        return [ {\n            name: 'DL_ADD_TEXT_STYLE_NAME',\n            order: 2,\n            icon: 'AddCharacterStyle',\n            apply: addTextStyle\n        } ];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport environment from 'app/js/environment';\nimport debugLog from 'app/js/utils/debugLog';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport ApplicationFontManager from 'app/js/managers/utils/ApplicationFontManager';\n\nimport * as ILSTEvents from './events';\n\n// Import all the element type configuration overrides\nimport DefaultConfigs from 'app/js/config/elements/DefaultConfigs';\nimport BrushElementConfig from './elements/BrushElementConfig';\nimport ColorElementConfig from './elements/ColorElementConfig';\nimport ColorThemeElementConfig from './elements/ColorThemeElementConfig';\nimport FontElementConfig from './elements/FontElementConfig';\nimport ImageElementConfig from './elements/ImageElementConfig';\nimport ParagraphStyleElementConfig from './elements/ParagraphStyleElementConfig';\nimport PatternElementConfig from './elements/PatternElementConfig';\nimport TemplateElementConfig from './elements/TemplateElementConfig';\nimport TextElementConfig from './elements/TextElementConfig';\nimport TextStyleElementConfig from './elements/TextStyleElementConfig';\n\nexport function getAppConfiguration() {\n    this.config = {};\n    this.config.code = 'ILST';\n    this.config.fullName = 'Illustrator';\n    this.config.translationSuffix = 'AI';\n    this.config.dragDropSource = 'com.adobe.illustrator';\n    this.config.offsetSelectMenu = true;\n    this.config.enableSVGPatterns = false;\n    this.config.usesEscapedFilePathsInEvents = true;\n\n    this.config.themes = {\n        '323232': 'darker', // 16.1\n        '535353': 'dark', // 16.1\n        'b8b8b8': 'light', // 16.1\n        'f0f0f0': 'lighter' // 16.1\n    };\n\n    // In the global CSS, certain app styles are bound to the classname 'spectrum-enabled'.\n    this.config.legacySpectrumEnabled = true;\n\n    this.config.defaultTheme = 'dark';\n\n    this.config.elementTypes = [\n        ColorElementConfig,\n        ColorThemeElementConfig,\n        TextElementConfig,\n        TextStyleElementConfig,\n        FontElementConfig,\n        ParagraphStyleElementConfig,\n        ImageElementConfig,\n        BrushElementConfig,\n        TemplateElementConfig,\n        PatternElementConfig,\n        DefaultConfigs.ComponentElementConfig,\n        DefaultConfigs.GradientElementConfig, // Gradients should be moved to under Color Themes once Illustrator supports them.\n        DefaultConfigs.VideoElementConfig,\n        DefaultConfigs.LookElementConfig,\n        DefaultConfigs.CapsuleElementConfig,\n        DefaultConfigs.ThreeDElementConfig,\n        DefaultConfigs.LayerStyleElementConfig,\n        DefaultConfigs.AnimationElementConfig,\n        DefaultConfigs.LightElementConfig,\n        DefaultConfigs.MaterialElementConfig,\n        DefaultConfigs.AudioElementConfig,\n        DefaultConfigs.ChannelElementConfig,\n        DefaultConfigs.ImageGuidelineElementConfig,\n        DefaultConfigs.UnsupportedElementConfig\n    ];\n\n    // This defines the element categories that are collapsed by default in the UI - change this to suite your application.\n    this.config.collapsedTypes = [\n        configuration.GRADIENT_ELEMENT_TYPE, // remove Gradients from collapsed types once Illustrator supports them.\n        configuration.VIDEO_ELEMENT_TYPE,\n        configuration.LOOK_ELEMENT_TYPE,\n        configuration.CAPSULE_ELEMENT_TYPE,\n        configuration.THREE_D_ELEMENT_TYPE,\n        configuration.LAYER_STYLE_ELEMENT_TYPE,\n        configuration.ANIMATION_ELEMENT_TYPE,\n        configuration.LIGHT_ELEMENT_TYPE,\n        configuration.AUDIO_ELEMENT_TYPE,\n        configuration.CHANNEL_ELEMENT_TYPE,\n        configuration.IMAGE_GUIDELINE_ELEMENT_TYPE,\n        configuration.UNSUPPORTED_ELEMENT_TYPE\n    ];\n\n    // Temporarily removing capture from add menu in Ai\n    // In Illustrator These modules show up in Capture Panel in the order specified here\n    // this.config.captureModules = [ 'Patterns', 'Shapes', 'Colors', 'Gradients' ];\n\n    this.config.includeGuidInTempFileName = true;\n\n    this.startEventListener = function() {\n        ILSTEvents.listen();\n    };\n\n    this.stopEventListener = function() {\n        ILSTEvents.stop();\n    };\n\n    this.fontManager = new ApplicationFontManager();\n\n    this.init = function() {\n        FileUtils.extendUsableTypes(configuration.IMAGE_ELEMENT_TYPE, [ 'image/png',\n            'image/jpeg',\n            'image/jpg',\n            'image/svg+xml',\n            'application/photoshop',\n            'application/photoshop.large',\n            'image/vnd.adobe.photoshop',\n            'application/illustrator',\n            'application/pdf' ]);\n        FileUtils.extendUsableTypes(configuration.COLOR_THEME_ELEMENT_TYPE, [ 'application/vnd.adobe.colortheme+json' ]);\n        FileUtils.extendUsableTypes(configuration.BRUSH_ELEMENT_TYPE, [ 'application/vnd.adobe.vector.brush+zip' ]);\n        FileUtils.extendUsableTypes(configuration.CHARACTER_STYLE_ELEMENT_TYPE, [ 'application/vnd.adobe.characterstyle+json' ]);\n        FileUtils.extendUsableTypes(configuration.FONT_ELEMENT_TYPE, [ 'application/vnd.adobe.font+json' ]);\n        FileUtils.extendUsableTypes(configuration.PARAGRAPH_STYLE_ELEMENT_TYPE, [ 'application/vnd.adobe.paragraphstyle+json' ]);\n        FileUtils.extendUsableTypes(configuration.TEMPLATE_ELEMENT_TYPE, [ 'application/illustrator.template', 'application/vnd.adobe.illustrator.template' ]);\n        FileUtils.extendUsableTypes(configuration.PATTERN_ELEMENT_TYPE, [ 'image/vnd.adobe.pattern+png', 'image/svg+xml' ]);\n        FileUtils.extendUsableTypes(configuration.TEXT_ELEMENT_TYPE, [ 'application/vnd.adobe.text+json', 'application/illustrator-text' ]);\n        FileUtils.extendUsableTypes(configuration.COMPONENT_ELEMENT_TYPE, [ 'image/svg+xml', 'image/png' ]);\n        FileUtils.extendUsableTypes(configuration.MATERIAL_ELEMENT_TYPE, [ 'application/vnd.adobe.sbsar+zip', 'application/vnd.adobe.mdl.material+zip' ]);\n\n        // Gradients should be enabled once Illustrator supports them.\n        // FileUtils.extendUsableTypes(configuration.GRADIENT_ELEMENT_TYPE, [ 'application/vnd.adobe.gradient+json' ]);\n\n        FileUtils.extendEditableTypes(configuration.COLOR_ELEMENT_TYPE, [ 'application/vnd.adobe.color+json' ]);\n        FileUtils.extendEditableTypes(configuration.IMAGE_ELEMENT_TYPE, [ 'image/svg+xml',\n            'application/illustrator' ]);\n        FileUtils.extendEditableTypes(configuration.TEXT_ELEMENT_TYPE, [ 'application/illustrator-text' ]);\n\n        environment.execApp('setThumbnailExportOptions');\n        environment.execApp('getTooltipState').then(function(tooltipState) {\n            configuration.showTooltips = tooltipState;\n        });\n\n        environment.exec('CORE', 'getApplicationVersion', []).then(version => {\n            try {\n                const majorVersion = parseInt(version.split('.')[0]);\n                this.config.enableSVGPatterns = majorVersion >= 23;\n            } catch (e) {\n                //do nothing\n            }\n        });\n\n        this.startEventListener();\n\n        libraryManager.waitForInitialLoad().then(function() {\n            //Report to app that we are fully loaded\n            const event = environment.createEvent('com.adobe.DesignLibraries.events.READY', 'APPLICATION');\n            environment.dispatchEvent(event);\n        });\n\n        //We listen to libraryList to track changes (add/remove/rename) to the list of libraries, and sync that to the app.\n        libraryManager.addListener('libraryList', function() {\n            ILSTEvents.updateLibrariesInfo();\n        });\n        libraryManager.addListener('currentLibrary', function() {\n            ILSTEvents.updateLibrariesInfo();\n        });\n\n    };\n\n    this.reportEvent = function(eventName, properties) {\n        debugLog.log('Metric reported to AI');\n        properties.event = eventName;\n        const event = environment.createEvent('com.adobe.illustrator.LOGPIP', 'APPLICATION');\n        event.data = JSON.stringify(properties);\n        environment.dispatchEvent(event);\n        delete properties.event;\n    };\n\n    this.getUserData = function(callback) {\n        environment.execApp('getUserData').then(function(strReturnValue) {\n            if (strReturnValue && strReturnValue !== 'undefined') {\n                callback(JSON.parse(strReturnValue));\n                return;\n            }\n\n            return callback();\n        });\n    };\n\n    // Use mouse co-ordinates on Mac to detect a successful drop while in Adobe Stock search mode\n    this.config.useMouseEventToDetectDrop = true;\n\n    // This handler would be called before panel proceeds with default Drop workflow\n    // After inspecting the eventData, this function should return a boolean stating\n    // whether the drop was successfully handled by the app\n    // return true if this application wants to handle the data\n    // return false to let panel handle the data\n    this.dropHandler = function(eventData, keys) {\n        debugLog.log('Illustrator drop handler', eventData);\n        const hasModifierKey = environment.isWindowsOS() ? keys.ctrlKey : keys.metaKey;\n        if (hasModifierKey && eventData.assetList[0].type === 'text') {\n            eventData.assetList[0].type = 'image';\n        }\n        return Promise.reject();\n    };\n\n    this.customDropMessage = function(eventData, keys) {\n        const isWindows = environment.isWindowsOS();\n        const hasModifierKey = isWindows ? keys.ctrlKey : keys.metaKey;\n\n        if (!hasModifierKey && eventData.assetList[0].type === 'text') {\n            // Display a message to tell the user about the modifier key - holding down cmd/ctrl\n            // will add text as a graphic, rather than a text element\n            const dropTextMessage = `DL_CUSTOM_DROP_MESSAGE_ID_TEXT_${isWindows ? 'WIN' : 'MAC'}`;\n            return translate(dropTextMessage);\n        }\n    };\n\n    // Set this to allow dragging with the Cmd-key held down (otherwise, dropping gets prevented by default)\n    this.allowCmdDrag = true;\n\n    // TODO: Refactor the above to return an object, rather than using this\n    return this;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/*global , RGBColor, SpotColor, ImageColorSpace, ColorConvertPurpose, CMYKColor, GrayColor, LabColor, TEXT: true, LabColor: true, ColorModel: true, NoColor: true */\n\n// import app from 'app/js/script.js';\nexport class Color {\n    Color() {\n        this.spotMismatch = false;\n    }\n\n    isColorSupported(colorObject) {\n        return colorObject._className !== 'NoColor'\n            && colorObject._className !== 'GradientColor'\n            && colorObject._className !== 'PatternColor';\n    }\n\n    isModeSupported(colorData) {\n        return colorData && (colorData.mode === 'RGB' || colorData.mode === 'CMYK' || colorData.mode === 'Gray');\n    }\n\n    colorToRGB(color) {\n        const app = window.app;\n        const rgbColor = new RGBColor();\n        let colors;\n        switch (color._className) {\n        case 'RGBColor':\n            rgbColor.red = color.red; // incomming color can be a simple json rather than an RGB object\n            rgbColor.green = color.green;\n            rgbColor.blue = color.blue;\n            break;\n        case 'CMYKColor':\n            colors = app.convertSampleColor(ImageColorSpace.CMYK, [ color.cyan, color.magenta, color.yellow, color.black ], ImageColorSpace.RGB, ColorConvertPurpose.dummypurpose);\n            rgbColor.red = colors[0];\n            rgbColor.green = colors[1];\n            rgbColor.blue = colors[2];\n            break;\n        case 'LabColor':\n            colors = app.convertSampleColor(ImageColorSpace.LAB, [ color.l, color.a, color.b ], ImageColorSpace.RGB, ColorConvertPurpose.dummypurpose);\n            rgbColor.red = colors[0];\n            rgbColor.green = colors[1];\n            rgbColor.blue = colors[2];\n            break;\n        case 'GrayColor':\n            colors = app.convertSampleColor(ImageColorSpace.GrayScale, [ color.gray ], ImageColorSpace.RGB, ColorConvertPurpose.dummypurpose);\n            rgbColor.red = colors[0];\n            rgbColor.green = colors[1];\n            rgbColor.blue = colors[2];\n            break;\n        case 'SpotColor':\n            return this.colorToRGB(color.spot.color);\n        }\n        return rgbColor;\n    }\n\n    colorToCMYK(color) {\n        const app = window.app;\n        const cmykColor = new CMYKColor();\n        let colors;\n        switch (color._className) {\n        case 'CMYKColor':\n            cmykColor.cyan = color.cyan; // incomming color can be a simple json rather than an CMYK object\n            cmykColor.magenta = color.magenta;\n            cmykColor.yellow = color.yellow;\n            cmykColor.black = color.black;\n            break;\n        case 'RGBColor':\n            colors = app.convertSampleColor(ImageColorSpace.RGB, [ color.red, color.green, color.blue ], ImageColorSpace.CMYK, ColorConvertPurpose.dummypurpose);\n            cmykColor.cyan = colors[0];\n            cmykColor.magenta = colors[1];\n            cmykColor.yellow = colors[2];\n            cmykColor.black = colors[3];\n            break;\n        case 'LabColor':\n            colors = app.convertSampleColor(ImageColorSpace.LAB, [ color.l, color.a, color.b ], ImageColorSpace.CMYK, ColorConvertPurpose.dummypurpose);\n            cmykColor.cyan = colors[0];\n            cmykColor.magenta = colors[1];\n            cmykColor.yellow = colors[2];\n            cmykColor.black = colors[3];\n            break;\n        case 'GrayColor':\n            colors = app.convertSampleColor(ImageColorSpace.GrayScale, [ color.gray ], ImageColorSpace.CMYK, ColorConvertPurpose.dummypurpose);\n            cmykColor.cyan = colors[0];\n            cmykColor.magenta = colors[1];\n            cmykColor.yellow = colors[2];\n            cmykColor.black = colors[3];\n            break;\n        case 'SpotColor':\n            return this.colorToCMYK(color.spot.color);\n        }\n        return cmykColor;\n    }\n\n    findRepWithMode(reps, mode) {\n        return reps.filter(item => item.mode === mode)?.[0];\n    }\n\n    getBestColorRepresentation(data) {\n        const color = data[0];\n\n        if (this.isModeSupported(color)) {\n            return color;\n        }\n        //Default to RGB if the primary color is not supported\n        return this.findRepWithMode(data, 'RGB');\n    }\n\n    areDataSame(color1, color2) {\n        if (color1.mode !== color2.mode) {\n            return false;\n        }\n\n        const c1Val = color1.value;\n        const c2Val = color2.value;\n\n        const compareVals = (valToCompare) => {\n            return parseFloat(c1Val[valToCompare]) === parseFloat(c2Val[valToCompare]);\n        };\n\n        Object.keys(c1Val).forEach(key => {\n            if (!compareVals(key)) {return false;}\n        });\n        return true;\n    }\n\n    dataToSolidColor(data) {\n        //If passed an array of representations then first select\n        //the best representation\n        const app = window.app;\n        const activeDoc = app.activeDocument;\n        if (Array.isArray(data)) {\n            data = this.getBestColorRepresentation(data);\n        }\n\n        if (data.type === 'spot') {\n            let spotFound = false;\n            let spot;\n            const spotColor = new SpotColor();\n            if (data.name !== undefined) {\n                data.spotColorName = data.name;\n            }\n            try {\n                spot = activeDoc.spots.getByName(data.spotColorName);\n                const appSpotData = this.solidColorToData(spot.color);\n                const spotData = this.getBestColorRepresentation(appSpotData);\n\n                const areSame = this.areDataSame(spotData, data);\n                this.spotMismatch = !areSame;\n                spotFound = true;\n            } catch (err) {\n                spotFound = false;\n            }\n            if (spotFound) {\n                spotColor.spot = spot;\n                return spotColor;\n            }\n            spotColor.spot = app.activeDocument.spots.add();\n            spotColor.spot.name = data.spotColorName;\n            spotColor.spot.color = this._colorByMode(data);\n            spotColor.spot.colorType = ColorModel.SPOT;\n            return spotColor;\n        } else if (data.type === 'none') {\n            return NoColor;\n        } else if (data.type === 'registration') {\n            if (TEXT.RegistrationColor === undefined) {\n                TEXT.updateRegistrationColor();\n            }\n            return TEXT.RegistrationColor;\n        } else if (data.type === 'process' && data.global) {\n            let spotFound = false;\n            let spot;\n            const spotColor = new SpotColor();\n            if (data.name !== undefined) {\n                data.spotColorName = data.name;\n            }\n            try {\n                spot = activeDoc.spots.getByName(data.spotColorName);\n                const appSpotData = this.solidColorToData(spot.color);\n                const spotData = this.getBestColorRepresentation(appSpotData);\n\n                const areSame = this.areDataSame(spotData, data);\n                this.spotMismatch = !areSame;\n                spotFound = true;\n            } catch (err) {\n                spotFound = false;\n            }\n            if (spotFound) {\n                spotColor.spot = spot;\n                return spotColor;\n            }\n            spotColor.spot = app.activeDocument.spots.add();\n            spotColor.spot.name = data.spotColorName;\n            spotColor.spot.color = this._colorByMode(data);\n            spotColor.spot.colorType = ColorModel.PROCESS;\n            return spotColor;\n        }\n\n        return this._colorByMode(data);\n    }\n\n    //Returns a color object solely based on the color mode\n    _colorByMode(data) {\n        let finalColor = new RGBColor();\n        if (data) {\n            switch (data.mode) {\n            case 'RGB':\n                finalColor = new RGBColor();\n                finalColor.red = data.value.r;\n                finalColor.green = data.value.g;\n                finalColor.blue = data.value.b;\n                break;\n            case 'CMYK':\n                finalColor = new CMYKColor();\n                finalColor.cyan = data.value.c;\n                finalColor.magenta = data.value.m;\n                finalColor.yellow = data.value.y;\n                finalColor.black = data.value.k;\n                break;\n            case 'Lab':\n                finalColor = new LabColor();\n                finalColor.l = data.value.l;\n                finalColor.a = data.value.a;\n                finalColor.b = data.value.b;\n                break;\n            case 'Gray':\n                finalColor = new GrayColor();\n                finalColor.gray = data.value;\n                break;\n            }\n        }\n\n        return finalColor;\n    }\n\n    solidColorToData(color) {\n        //If it is an unsupported color type then simply return undefined\n        if (!this.isColorSupported(color)) {\n            return;\n        }\n        const app = window.app;\n        let profileName,\n            representations = [];\n        try {\n            profileName = app.activeDocument.colorProfileName;\n        } catch (ignore) {\n            //need to work on\n        }\n        // Handle spot color first since it is a special case\n        if (color._className === 'SpotColor') {\n            if (color.spot.colorType === ColorModel.SPOT) {\n                representations = this.solidColorToData(color.spot.color);\n                return representations.map(function(colorItem) {\n                    colorItem.type = 'spot';\n                    colorItem.spotColorName = color.spot.name;\n                    colorItem.global = true;\n                    return colorItem;\n                });\n            } else if (color.spot.colorType === ColorModel.PROCESS) {\n                representations = this.solidColorToData(color.spot.color);\n                return representations.map(function(colorItem) {\n                    colorItem.type = 'process';\n                    colorItem.spotColorName = color.spot.name;\n                    colorItem.global = true;\n                    return colorItem;\n                });\n            }\n        }\n\n        const rgbColor = this.colorToRGB(color);\n        representations.push({\n            mode: 'RGB',\n            value: {\n                r: rgbColor.red,\n                g: rgbColor.green,\n                b: rgbColor.blue\n            },\n            type: 'process',\n            global: false,\n            profileName\n        });\n        if (color._className === 'CMYKColor') {\n            representations.unshift({\n                mode: 'CMYK',\n                value: {\n                    c: color.cyan,\n                    m: color.magenta,\n                    y: color.yellow,\n                    k: color.black\n                },\n                type: 'process',\n                global: false,\n                profileName\n            });\n        }\n\n        if (color._className === 'LabColor') {\n            representations.unshift({\n                mode: 'Lab',\n                value: {\n                    l: color.l,\n                    a: color.a,\n                    b: color.b\n                },\n                type: 'process',\n                global: false,\n                profileName\n            });\n        }\n\n        if (color._className === 'GrayColor') {\n            representations.unshift({\n                mode: 'Gray',\n                value: color.gray,\n                type: 'process',\n                global: false,\n                profileName\n            });\n        }\n\n        return representations;\n    }\n\n    getDisplayName(data) {\n        let name = '';\n        if (data) {\n            switch (data.mode) {\n            case 'RGB':\n                name += 'R=' + Math.round(data.value.r).toString();\n                name += ' G=' + Math.round(data.value.g).toString();\n                name += ' B=' + Math.round(data.value.b).toString();\n                break;\n            case 'CMYK':\n                name += 'C=' + Math.round(data.value.c).toString();\n                name += ' M=' + Math.round(data.value.m).toString();\n                name += ' Y=' + Math.round(data.value.y).toString();\n                name += ' K=' + Math.round(data.value.k).toString();\n                break;\n            case 'Lab':\n                name += 'L=' + Math.round(data.value.l).toString();\n                name += ' A=' + Math.round(data.value.a).toString();\n                name += ' B=' + Math.round(data.value.b).toString();\n                break;\n            case 'Gray':\n                name = 'Gray';\n                break;\n            }\n        }\n        if (!name) {\n            name = 'Undefined';\n        }\n        return name;\n    }\n\n    getSelectedSwatchList() {\n        return new Promise((resolve) => {\n            const app = window.app;\n            const activeDoc = app.activeDocument;\n            const result = [];\n            if (activeDoc) {\n                const swatches = activeDoc.swatches;\n                if (swatches) {\n                    const swatchList = swatches.getSelected(false);\n                    if (swatchList?.length) {\n                        swatchList.forEach(obj => result.push({\n                            'name': obj.name,\n                            'data': this.solidColorToData(obj.color)\n                        }));\n                    }\n                }\n            }\n            resolve(JSON.stringify(result));\n        });\n    }\n\n    getSelectedSwatchGroupList() {\n        return new Promise((resolve) => {\n            const app = window.app;\n            const activeDoc = app.activeDocument;\n            const result = [];\n            const swatchMoodKey = 'mood';\n            const swatchCollectionkey = 'swatches';\n            let swatchGroupList;\n            let allSwatchesInColorTheme;\n\n            let colorThemeObj;\n            if (activeDoc) {\n                const swatchGroups = activeDoc.swatchGroups;\n                if (swatchGroups) {\n                    swatchGroupList = swatchGroups.getSelected();\n                    if (swatchGroupList?.length) {\n                        swatchGroupList.forEach(obj => {\n                            colorThemeObj = {};\n                            colorThemeObj[swatchMoodKey] = obj.name;\n                            allSwatchesInColorTheme = obj.getAllSwatches();\n                            const swatchCollection = allSwatchesInColorTheme.map(swatchObj => this.solidColorToData(swatchObj.color));\n                            colorThemeObj[swatchCollectionkey] = swatchCollection;\n                            result.push(colorThemeObj);\n                        });\n                    }\n                }\n            }\n            resolve(JSON.stringify(result));\n        });\n    }\n\n    addSwatchGroup(colorTheme, groupName) {\n        return new Promise(() => {\n            const app = window.app;\n            if (colorTheme) {\n                const activeDoc = app.activeDocument;\n                const swatchMoodKey = 'mood';\n                const swatchCollectionkey = 'swatches';\n                let swatchObj;\n                let swatchGroupObj;\n                let colorObj;\n                let colorCollection;\n                let colorRep;\n\n                if (activeDoc) {\n                    const swatchGroups = activeDoc.swatchGroups;\n                    if (swatchGroups) {\n                        swatchGroupObj = swatchGroups.add();\n                        swatchGroupObj.name = groupName || colorTheme[swatchMoodKey];\n\n                        colorCollection = colorTheme[swatchCollectionkey];\n                        colorCollection.forEach(ColorCollectionObj => {\n                            colorObj = this.getBestColorRepresentation(ColorCollectionObj);\n                            colorRep = this.dataToSolidColor(colorObj);\n                            if (colorObj.type === 'spot') {\n                                swatchGroupObj.addSpot(colorRep.spot);\n                            } else {\n                                swatchObj = activeDoc.swatches.add();\n                                swatchObj.color = colorRep;\n                                swatchObj.name = this.getDisplayName(colorObj);\n                                swatchGroupObj.addSwatch(swatchObj);\n                            }\n                        });\n                    }\n                }\n            }\n        });\n    }\n\n    setFillColor(color) {\n        try {\n            const app = window.app;\n            const newColor = this.dataToSolidColor(color);\n            app.activeDocument.defaultFillColor = newColor;\n        } catch (ignore) {\n            //\n        }\n    }\n\n    setStrokeColor(color) {\n        try {\n            const app = window.app;\n            const newColor = this.dataToSolidColor(color);\n            app.activeDocument.defaultStrokeColor = newColor;\n        } catch (ignore) {\n            //\n        }\n    }\n\n    setColor(color) {\n        return new Promise((resolve, reject) => {\n            const app = window.app;\n            this.spotMismatch = false;\n            try {\n                if (app.documents.length === 0) {\n                    return;\n                }\n\n                if (app.isFillActive()) {\n                    this.setFillColor(color);\n                }\n\n                if (app.isStrokeActive()) {\n                    this.setStrokeColor(color);\n                }\n\n                const returnVal = this.spotMismatch;\n                if (this.spotMismatch === true) {\n                    this.spotMismatch = false;\n                }\n\n                resolve(returnVal);\n\n            } catch (ignore) {\n                reject;\n            }\n        });\n    }\n\n    addColor(color) {\n        return new Promise((resolve, reject) => {\n            const app = window.app;\n            this.spotMismatch = false;\n            try {\n                if (app.documents.length === 0) {\n                    return;\n                }\n\n                const activeDoc = app.activeDocument;\n                const colorObj = this.getBestColorRepresentation(color);\n                const colorRep = this.dataToSolidColor(colorObj);\n                /* Spot color is already added as a swatch in dataToSolidColor */\n                if (colorObj.type !== 'spot' && !colorObj.global) {\n                    const swatchObj = activeDoc.swatches.add();\n                    swatchObj.color = colorRep;\n                    swatchObj.name = this.getDisplayName(colorObj);\n                }\n                const returnVal = this.spotMismatch;\n                if (this.spotMismatch === true) {\n                    this.spotMismatch = false;\n                }\n                resolve(returnVal);\n            } catch (ignore) {\n                reject;\n            }\n        });\n    }\n\n    colorModifiedByUser = '';\n\n    getLayerColor() {\n        return new Promise((resolve, reject) => {\n            try {\n                const colorObject = this.solidColorToData(this.colorModifiedByUser);\n                return resolve(JSON.stringify(colorObject));\n            } catch (ignore) {\n                reject;\n            }\n        });\n    }\n\n    replaceColor(colorData) {\n        return new Promise((resolve, reject) => {\n            const app = window.app;\n            try {\n                const originalColor = this.dataToSolidColor(colorData);\n                const modifiedColor = app.showColorPicker(originalColor);\n                this.colorModifiedByUser = modifiedColor;\n                resolve(true);\n                return resolve(originalColor !== modifiedColor);\n            } catch (ex) {\n                reject(false);\n            }\n        });\n    }\n\n}\n\nexport default new Color();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport libraryManager from 'app/js/managers/libraryManager';\nimport { translate } from 'app/js/managers/translationManager';\n\nexport const PIPGlobals = {\n    DLtoAI: 'DL_To_Ai',\n    CharacterStyle: 'Character_Style',\n    ParagraphStyle: 'Paragraph_Style',\n    Color: 'Color',\n    SwatchGroups: 'Swatch_Groups',\n    Added: 'Added',\n    Applied: 'Applied'\n};\n\nexport function acquireLibrary(libraryID, createNew) {\n    let library;\n    if (libraryID) {\n        //Look for existing.\n        library = libraryManager.getLibraryById(libraryID);\n    }\n    if (!library && !createNew) {\n        //Get current library if not supposed to create new.\n        library = libraryManager.currentLibrary;\n    }\n    if (!library) {\n        // Get most recently used libraries\n        library = libraryManager.recentLibraries[0];\n    }\n    if (!library) {\n        //Create new.\n        const libraryName = translate('DL_DEFAULT_LIBRARY_NAME');\n        library = libraryManager.createLibrary(libraryName);\n    }\n    if (library) {\n        //Set it as current.\n        libraryManager.currentLibrary = library;\n        library = libraryManager.currentLibrary;\n    }\n    return library;\n}\n\nexport function getLibraryFromEventData(eventData) {\n    let libraryID;\n    if (Object.prototype.hasOwnProperty.call(eventData, 'libraryID')) {\n        libraryID = eventData.libraryID;\n    }\n\n    let createNew = false;\n    if (Object.prototype.hasOwnProperty.call(eventData, 'createNewLibrary')) {\n        createNew = JSON.parse(eventData.createNewLibrary);\n    }\n\n    return acquireLibrary(libraryID, createNew);\n}\n\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport { checkLibraryWritable, reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport { getLibraryFromEventData } from './utils';\nimport COLOR from 'app/applications/ILST_UXP/js/color';\n\nconst ILST_NAMESPACE = 'illustrator';\nconst ILST_DATA_KEY = 'data';\nconst MAX_SWATCHGROUP_SIZE = 5;\n\nexport function getIllustratorData(representation) {\n    return representation.getValue(ILST_NAMESPACE, ILST_DATA_KEY);\n}\n\nexport function setIllustratorData(newRep, data) {\n    newRep.setValue(ILST_NAMESPACE, ILST_DATA_KEY, { global: data.global });\n}\n\n// This function returns a promise of swatch being uploaded. Incase there is an error, the parameter\n// in the callback function is an error , else it will be null.\nconst pushSelectedSwatchColors = data => {\n    const library = getLibraryFromEventData(data);\n    if (!library) {\n        return Promise.reject('Library Error');\n    }\n\n    if (!checkLibraryWritable(library, false, true)) {\n        return Promise.reject('Library Error');\n    }\n\n    let opType;\n    if (Object.prototype.hasOwnProperty.call(data, 'isNew')) {\n        opType = data.isNew ? 'swatchPanelNew' : 'swatchPanelExisting';\n    }\n\n    const createColorElement = color => {\n        const name = color.name || color.data[0].spotColorName || '';\n        const newElement = library.createElement(name, configuration.COLOR_ELEMENT_TYPE);\n\n        //add representations\n        color.data.forEach((rep, index) => {\n            const relationship = index === 0 ? 'primary' : 'rendition';\n            const newRepresentation = newElement.createRepresentation(configuration.COLOR_REPRESENTATION_TYPE, relationship);\n            // Move the 'global' property out of the raw color data and into illustrator specific section in representation\n            if ('global' in rep) {\n                setIllustratorData(newRepresentation, rep);\n                delete rep.global;\n            }\n            newRepresentation.setValue(configuration.COLOR_NAMESPACE, configuration.COLOR_DATA_KEY, rep);\n        });\n\n        newElement.endOperation();\n        if (opType) {\n            reportApplyMetric(newElement.representations[0], opType);\n        }\n        return newElement;\n    };\n\n    return COLOR.getSelectedSwatchList().then((swatchList) => {\n        try {\n            swatchList = JSON.parse(swatchList);\n        } catch (ex) {\n            return Promise.reject('err');\n        }\n\n        let lastColorObj;\n        swatchList.forEach(colorObj => {\n            if (colorObj.data) {\n                lastColorObj = createColorElement(colorObj);\n            }\n        });\n\n        if (lastColorObj) {\n            // Reveal the last element that is being added from Ai.\n            elementSelectionState.revealElement(lastColorObj);\n        }\n    });\n};\n\n// This function returns a promise of swatch being uploaded. Incase there is an error, the parameter\n// in the callback function is an error , else it will be null.\nconst pushSelectedSwatchGroups = data => {\n    const library = getLibraryFromEventData(data);\n    if (!library) {\n        return Promise.reject('Library Error');\n    }\n\n    if (!checkLibraryWritable(library)) {\n        return Promise.reject('Library Error');\n    }\n\n    const createColorThemeElement = colorTheme => {\n        const colorThemeName = colorTheme.mood || '';\n        let newElement;\n        if (colorTheme.swatches && colorTheme.swatches.length <= MAX_SWATCHGROUP_SIZE && colorTheme.swatches.length > 0) {\n            newElement = library.createElement(colorThemeName, configuration.COLOR_THEME_ELEMENT_TYPE);\n            const newRepresentation = newElement.createRepresentation(configuration.COLOR_THEME_REPRESENTATION_TYPE, 'primary');\n            newRepresentation.setValue(configuration.COLOR_THEME_NAMESPACE, configuration.COLOR_THEME_DATA_KEY, colorTheme);\n            newElement.endOperation();\n        }\n        return newElement;\n    };\n\n    return COLOR.getSelectedSwatchGroupList().then(swatchGroupList => {\n        if (!swatchGroupList) {\n            return Promise.reject('err');\n        }\n\n        swatchGroupList = JSON.parse(swatchGroupList);\n        if (swatchGroupList.length > 0) {\n            let lastColorTheme;\n            swatchGroupList.forEach(colorThemeObj => {\n                lastColorTheme = createColorThemeElement(colorThemeObj);\n            });\n            if (lastColorTheme) {\n                // Reveal the element that is being added from Ai.\n                elementSelectionState.revealElement(lastColorTheme);\n            }\n        }\n    });\n};\n\nexport function pushColorsToLibrary(event) {\n    const data = JSON.parse(event);\n    const promises = [];\n    if (data) {\n        if (data.uploadSwatch) {\n            promises.push(pushSelectedSwatchColors(data));\n        }\n        if (data.uploadSwatchGroup) {\n            promises.push(pushSelectedSwatchGroups(data));\n        }\n    }\n    return Promise.all(promises);\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport environment from 'app/js/environment';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport productInterface from 'app/js/interface/productInterface';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { checkLibraryWritable, getCuratedName, generatePreview, getElementModifiedTime, reportApplyMetric, createElementExtraMetrics } from 'app/js/utils/libraryUtils';\nimport { addGraphicElement } from 'app/js/utils/addElementUtils';\nimport { openElementURL } from 'app/js/utils/linkUtils';\nimport BrowserUtils from 'app/js/utils/browserUtils';\nimport metrics from 'app/js/interface/metrics';\nimport { Events } from './events';\n\nconst sendElementUpdated = (representation, requestRef) => {\n    if (representation) {\n        const element = representation.element;\n        const elementRef = element.getLegacyReference();\n\n        // We have to call this because we need to get the new path.\n        representation.getContentPath().then(path => {\n            const event = environment.createEvent(Events.elementUpdated, 'APPLICATION');\n            event.data = JSON.stringify({\n                requestRef,\n                elementRef,\n                name: element.name,\n                libraryName: element.library.name,\n                modifiedTime: getElementModifiedTime(element),\n                creationTime: element.created,\n                data: [ path ]\n            });\n\n            environment.dispatchEvent(event);\n        });\n    }\n};\n\nconst fillUpdatePromises = (updatePromises, fileData, element) => {\n    const files = (fileData && fileData.files) || [];\n    for (let i = 0; i < files.length; i++) {\n        const file = files[i];\n        const fileMimeType = FileUtils.fileNameToMimeType(file.path, element.type);\n        const newRepresentation = element.createRepresentation(fileMimeType, file.relationship);\n        const updatePromise = newRepresentation.setContentFromPath(file.path);\n\n        updatePromises.push(updatePromise);\n    }\n};\n\nconst dispatchUnknownError = elementIdentifier => {\n    const event = environment.createEvent(Events.initialCommunicationError, 'APPLICATION');\n    const errorObj = libraryManager.syncStatus;\n    event.data = {\n        elementIdentifier,\n        status: 'error',\n        error: (errorObj && errorObj.errorType) || 'kError'\n    };\n    environment.dispatchEvent(event);\n};\n\nconst attachUploadListner = (element, openBrowserAfterOperation, additionalQueryParameters, elementType) => {\n    // Notify when element has been actually uploaded\n    let linkedOpened = false;\n    let eventSent = false;\n\n    const dispatchLibraryStatusEvent = status => {\n        const event = environment.createEvent(Events.elementUploaded, 'APPLICATION');\n        const errorStatus = status || {\n            errorType: 'kNoErr',\n            state: 'ok'\n        };\n\n        // [gehlaut] With the given error codes for now it is difficult to differentiate if the user\n        // is connected to the internet. So adding a HACK for now.\n        if (!BrowserUtils.isOnline) {\n            errorStatus.state = 'error';\n            errorStatus.errorType = 'kNoInternet';\n        }\n\n        event.data = {\n            elementRef: element.getLegacyReference(),\n            status: errorStatus.state,\n            error: errorStatus.errorType || 'kNoErr'\n        };\n        environment.dispatchEvent(event);\n    };\n\n    const listener = () => {\n        const dlStatus = libraryManager.syncStatus;\n        if (!eventSent && (dlStatus.state === 'ok' || dlStatus.state === 'error')) {\n            // All changes have been synced to the cloud so send the event for it to Ai\n            dispatchLibraryStatusEvent(dlStatus);\n            eventSent = true;\n            if (openBrowserAfterOperation && dlStatus.state === 'ok' && !linkedOpened) {\n                if (elementType === 'kAIChart') {\n                    openElementURL(element, 'charts', additionalQueryParameters);\n                } else if (elementType === 'kAIArt') {\n                    openElementURL(element, 'details', additionalQueryParameters);\n                }\n                linkedOpened = true;\n            }\n            libraryManager.removeListener('libraryStatus', listener);\n        }\n    };\n\n    if (!libraryManager.syncingEnabled()) {\n        dispatchLibraryStatusEvent(libraryManager.syncStatus);\n    } else {\n        libraryManager.addListener('libraryStatus', listener);\n    }\n};\n\nconst deleteLocalFiles = filesMap => {\n    for (let i = 0; i < filesMap.length; i++) {\n        FileUtils.deleteFile(filesMap[i].path);\n    }\n};\n\nconst checkEventData = (library, fileData, elementType) => {\n    if (!library) {\n        throw 'No current library';\n    }\n\n    if (!fileData || !fileData.files || !elementType) {\n        throw 'event data invalid';\n    }\n};\n\nexport function onAddElementToLibrary(event) {\n    const fileData = event.data.fileData;\n    const library = libraryManager.currentLibrary;\n    const additionalQueryParameters = event.data.additionalQueryParameters;\n    // Notify products that an element is created so that they can do appropriate stitching\n    // if they want to replace the content with a linked smart object.\n    const openBrowserAfterOperation = event.data.openBrowserAfterOperation;\n\n    const elementType = event.data.elementType;\n    let dLElementType = null;\n\n    if (!checkLibraryWritable(library)) {\n        return;\n    }\n\n    try {\n        checkEventData(library, fileData, elementType);\n\n        if (fileData.layerIds === null || fileData.documentId === null) {\n            throw 'layer Ids Or documentId cannot be null';\n        }\n\n        if (elementType === 'kAIArt' || elementType === 'kAIChart') {\n            dLElementType = configuration.IMAGE_ELEMENT_TYPE;\n        } else {\n            throw 'Element not supported yet';\n        }\n\n        if (elementType === 'kAIChart') {\n            fileData.layerName = getCuratedName(library, fileData.layerName, 'DL_CHART_LABEL');\n        } else {\n            fileData.layerName = getCuratedName(library, fileData.layerName);\n        }\n\n        const newElement = library.createElement(fileData.layerName, dLElementType);\n\n        const updatePromises = [];\n        fillUpdatePromises(updatePromises, fileData, newElement);\n\n        // IMPORTANT: set the rendition cache at the end, because any changes to the representations will\n        // wipe the cache.\n        return Promise.all(updatePromises).then(function() {\n            const cleanupPromises = [];\n\n            if (fileData.rendition) {\n                cleanupPromises.push(newElement.setThumbnailCache(configuration.IMAGE_THUMBNAIL_SIZE, fileData.rendition));\n            }\n\n            cleanupPromises.push(newElement.endOperation());\n\n            Promise.all(cleanupPromises).then(() => {\n                deleteLocalFiles(fileData.files);\n\n                if (fileData.rendition) {\n                    FileUtils.deleteFile(fileData.rendition.path);\n                }\n            });\n\n            // Reveal the element that is being added from Ai.\n            elementSelectionState.revealElement(newElement);\n\n            const appMetadata = {\n                documentId: fileData.documentId,\n                layerIds: fileData.layerIds\n            };\n            return productInterface.sendElementCreated(newElement, appMetadata).then(() => {\n                attachUploadListner(newElement, openBrowserAfterOperation, additionalQueryParameters, elementType);\n                return newElement;\n            });\n        }, () => Promise.reject('Could not add element'));\n\n    } catch (error) {\n        dispatchUnknownError((fileData.layerIds && fileData.layerIds[0]) || null);\n        return Promise.reject('Could not add element: ' + error);\n    }\n}\n\nexport async function onUpdateElement(event) {\n    const fileData = event.data.fileData;\n    const elementType = event.data.elementType;\n    const elementRef = event.data.elementRef;\n    const additionalQueryParameters = event.data.additionalQueryParameters;\n    const openBrowserAfterOperation = event.data.openBrowserAfterOperation;\n\n    try {\n        if (!elementRef) {\n            throw 'elementRef missing';\n        }\n\n        let element = await libraryManager.resolveElementReference(elementRef);\n        if (!element) {\n            throw 'Element not found';\n        }\n        // Show the element that is being updated from Ai.\n        elementSelectionState.revealElement(element);\n\n        const library = element.library;\n        if (!checkLibraryWritable(library)) {\n            return;\n        }\n\n        checkEventData(library, fileData, elementType);\n\n        // If the element we're editing was deleted, we recreate it as a new element, so the changes aren't lost.\n        // Otherwise, we just remove the existing representations so we can add the new ones\n        if (element.isDeletedLocally) {\n            element = library.createElement(element.name, element.type);\n        } else {\n            element.beginOperation();\n            element.removeAllRepresentations();\n        }\n\n        const updatePromises = [];\n        fillUpdatePromises(updatePromises, fileData, element);\n\n        // IMPORTANT: set the rendition cache at the end, because any changes to the representations will\n        // wipe the cache.\n        return Promise.all(updatePromises).then(function() {\n            const cleanupPromises = [];\n\n            if (fileData.rendition) {\n                cleanupPromises.push(element.setThumbnailCache(configuration.IMAGE_THUMBNAIL_SIZE, fileData.rendition));\n            }\n\n            cleanupPromises.push(element.endOperation());\n\n            Promise.all(cleanupPromises).then(() => {\n                deleteLocalFiles(fileData.files);\n\n                if (fileData.rendition) {\n                    FileUtils.deleteFile(fileData.rendition.path);\n                }\n            });\n\n            // Notify products that an element is created so that they can do appropriate stitching\n            // if they want to replace the content with a linked smart object.\n            sendElementUpdated(element.getPrimaryRepresentation(), event.data.requestRef);\n            attachUploadListner(element, openBrowserAfterOperation, additionalQueryParameters, elementType);\n            return element;\n        }, () => Promise.reject('Could not update element'));\n\n    } catch (error) {\n        dispatchUnknownError(event.data.requestRef);\n        return Promise.reject('Could not update element: ' + error);\n    }\n}\n\nexport function addTextAsset(library, layerInfo) {\n\n    return environment.execApp('getTextInfo').then(data => {\n        const textData = JSON.parse(data);\n        if (!textData || !textData.textInfo) {\n            return Promise.reject('Could not create element.');\n        }\n\n        const name = layerInfo.textAssetName || textData.name;\n        const assetName = getCuratedName(library, name, 'DL_TEXT_LABEL');\n        const newElement = createElementExtraMetrics(library, assetName, configuration.TEXT_ELEMENT_TYPE, { opType: 'canvasContextMenu' });\n\n        const updatePromises = [];\n        if (textData.primaryRepresentation) {\n            const primaryRepresentation = newElement.createRepresentation(textData.primaryRepresentation.representationType, 'primary');\n            if (textData.primaryRepresentation.isFile) {\n                const addRenditionPromise = primaryRepresentation.setContentFromPath(textData.primaryRepresentation.filePath).then(() => {\n                    updatePromises.push(addRenditionPromise);\n                });\n            } else {\n                primaryRepresentation.setValue(configuration.TEXT_NAMESPACE, configuration.TEXT_DATA_KEY, textData.primaryRepresentation.data);\n            }\n\n            const newRepresentation = newElement.createRepresentation(configuration.TEXT_REPRESENTATION_JSON_TYPE, 'rendition');\n            newRepresentation.setValue(configuration.TEXT_NAMESPACE, configuration.TEXT_DATA_KEY, textData.textInfo);\n        } else {\n            const newRepresentation = newElement.createRepresentation(configuration.TEXT_REPRESENTATION_JSON_TYPE, 'primary');\n            newRepresentation.setValue(configuration.TEXT_NAMESPACE, configuration.TEXT_DATA_KEY, textData.textInfo);\n        }\n\n        if (textData.previewPath) {\n            const newRendition = newElement.createRepresentation('image/png', 'rendition');\n            newRendition.isPreferredThumbnail = true;\n            const addRenditionPromise = newRendition.setContentFromPath(textData.previewPath);\n            updatePromises.push(addRenditionPromise);\n        }\n\n        return Promise.all(updatePromises).then(function() {\n            const cleanupPromises = [];\n\n            if (textData.previewPath) {\n                cleanupPromises.push(newElement.setThumbnailCache(configuration.TEXT_THUMBNAIL_SIZE, textData.previewPath));\n            }\n\n            cleanupPromises.push(newElement.endOperation());\n\n            Promise.all(cleanupPromises).then(() => {\n                if (textData.previewPath) {\n                    FileUtils.deleteFile(textData.previewPath);\n                }\n\n                if (textData.primaryRepresentation.isFile) {\n                    FileUtils.deleteFile(textData.primaryRepresentation.filePath);\n                }\n            });\n\n            reportApplyMetric(newElement.representations[0], 'canvasContextMenu');\n            return newElement;\n\n        }, () => {\n            library.removeElement(newElement);\n            return Promise.reject('Could not create element.');\n        });\n\n    }, () => Promise.reject('Could not save text preview.'));\n}\n\nconst addGraphicAsset = (library, dragAssetId) => {\n    return generatePreview(dragAssetId).then(fileData => {\n        const appMetadata = {\n            documentId: fileData.documentId,\n            layerIds: fileData.layerIds,\n            dragAssetId\n        };\n        metrics.setExtraEventMetrics('createElement', { opType: 'canvasContextMenu' });\n        return addGraphicElement(fileData.layerName, fileData.files, fileData.rendition, library, appMetadata).then(newElement => {\n            reportApplyMetric(newElement.representations[0], 'canvasContextMenu');\n        }).catch(() => {\n            metrics.clearExtraEventMetrics('createElement');\n        });\n    }, () => Promise.reject('Could not extract asset.'));\n};\n\nconst addAsset = layerInfo => {\n    if (!layerInfo) {\n        return;\n    }\n    /* No text selected */\n    if (layerInfo.canAddTextAsset !== undefined && layerInfo.canAddTextAsset === false) {\n        return;\n    }\n    if (layerInfo.canAddTextAsset !== undefined) {\n        return addTextAsset(libraryManager.currentLibrary, layerInfo);\n    }\n    return addGraphicAsset(libraryManager.currentLibrary, undefined, undefined);\n};\n\nexport function onAddSelectionToLibrary() {\n    layerSelectionManager.updateLayerInfo().then(addAsset);\n    return;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { checkLibraryWritable, reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport { getLibraryFromEventData } from './utils';\n\nconst addStyle = (event, isCharacterStyle) => {\n    const library = getLibraryFromEventData(event);\n    if (!library) {\n        return;\n    }\n\n    if (!checkLibraryWritable(library)) {\n        return;\n    }\n\n    let opType;\n    if (Object.prototype.hasOwnProperty.call(event, 'isNew')) {\n        const type = isCharacterStyle ? 'characterStyle' : 'paragraphStyle';\n        opType = `${type}${event.isNew ? 'New' : 'Existing'}`;\n    }\n\n    let STYLE_DATA_KEY;\n    let STYLE_NAMESPACE;\n    let STYLE_ELEMENT_TYPE;\n    let STYLE_REPRESENTATION_JSON_TYPE;\n\n    if (isCharacterStyle) {\n        STYLE_DATA_KEY = 'data';\n        STYLE_NAMESPACE = 'characterstyle';\n        STYLE_ELEMENT_TYPE = configuration.CHARACTER_STYLE_ELEMENT_TYPE;\n        STYLE_REPRESENTATION_JSON_TYPE = 'application/vnd.adobe.characterstyle+json';\n    } else {\n        STYLE_DATA_KEY = 'data';\n        STYLE_NAMESPACE = 'paragraphstyle';\n        STYLE_ELEMENT_TYPE = configuration.PARAGRAPH_STYLE_ELEMENT_TYPE;\n        STYLE_REPRESENTATION_JSON_TYPE = 'application/vnd.adobe.paragraphstyle+json';\n    }\n\n    const styleIDList = event.styleNames;\n    const operation = isCharacterStyle ? 'addCharStyleById' : 'addParaStyleById';\n    styleIDList.forEach(styleID => {\n        environment.execApp(operation, [ styleID ]).then(data => {\n            const styleData = JSON.parse(data);\n\n            const newElement = library.createElement(styleData.styleName, STYLE_ELEMENT_TYPE);\n\n            const updatePromises = [];\n\n            const newRepresentation = newElement.createRepresentation(STYLE_REPRESENTATION_JSON_TYPE, 'primary');\n            newRepresentation.setValue(STYLE_NAMESPACE, STYLE_DATA_KEY, styleData.styleInfo);\n\n            if (styleData.previewPath) {\n                const newRendition = newElement.createRepresentation('image/png', 'rendition');\n                const addRenditionPromise = newRendition.setContentFromPath(styleData.previewPath);\n                //.then(function () {\n                // TODO: these might not be the correct dimensions\n                // newRendition.width = configuration.CHARACTER_STYLE_THUMBNAIL_SIZE;\n                // newRendition.height = configuration.CHARACTER_STYLE_THUMBNAIL_SIZE;\n                //});\n                updatePromises.push(addRenditionPromise);\n            }\n\n            Promise.all(updatePromises).then(function() {\n                const cleanupPromises = [];\n\n                if (styleData.previewPath) {\n                    cleanupPromises.push(newElement.setThumbnailCache(configuration.CHARACTER_STYLE_THUMBNAIL_SIZE, styleData.previewPath));\n                }\n\n                cleanupPromises.push(newElement.endOperation());\n\n                Promise.all(cleanupPromises).then(() => {\n                    if (styleData.previewPath) {\n                        FileUtils.deleteFile(styleData.previewPath);\n                    }\n                });\n\n                if (opType) {\n                    reportApplyMetric(newElement.representations[0], opType);\n                }\n                // Reveal the element that is being added from Ai.\n                elementSelectionState.revealElement(newElement);\n            });\n        });\n    });\n};\n\nexport function addTextStyle(event) {\n    event = JSON.parse(event);\n    addStyle(event, true);\n}\n\nexport function addParaStyle(event) {\n    event = JSON.parse(event);\n    addStyle(event, false);\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport { pushColorsToLibrary } from './colorUtils';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport configuration from 'app/js/config/configuration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { onAddElementToLibrary, onAddSelectionToLibrary, onUpdateElement } from './pushUtils';\nimport viewState from 'app/js/state/viewState';\nimport { getLibraryFromEventData } from './utils';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport { getElementModifiedTime } from 'app/js/utils/libraryUtils';\nimport { addTextStyle, addParaStyle } from './textUtils';\n\nconst TEXT_REPRESENTATION_AIFILE_TYPE = 'application/illustrator-text';\n\nexport const Events = {\n    libraryListUpdated: 'ILST.libraryListUpdated',\n    elementUpdated: 'com.adobe.DesignLibraries.events.ElementUpdated',\n    initialCommunicationError: 'ILST.InitialCommunicationError',\n    elementUploaded: 'ILST.elementUploaded',\n    spotMishmatched: 'ILST.SpotMismtached',\n    fitCurrentDocumentViewToActiveArtboard: 'com.adobe.illustrator.FitCurrentDocumentViewToActiveArtboard',\n    textFileCreated: 'ILST.textFileCreated',\n    applyPattern: 'ILST.patternApplied'\n};\n\nclass ILSTEvents {\n    onLayerUpdateEvent() {\n        layerSelectionManager.handleSelectionChange();\n    }\n\n    updateLibrariesInfo() {\n        // Note: libraryManager.getLibraries already returns the library names sorted alphabetically\n        const libraryNames = libraryManager.libraries\n            .filter(library => !library.isDeletedFromServer)\n            .map(library => ({ name: library.name, id: library.id, writable: library.isWritable }));\n\n        // Get the index of the current library\n        const currentLibrary = libraryManager.currentLibrary;\n        const currentLibraryIndex = currentLibrary ? libraryNames.findIndex(library => library.id === currentLibrary.id) : -1;\n\n        const event = environment.createEvent(Events.libraryListUpdated, 'APPLICATION');\n        const libData = {\n            names: libraryNames,\n            current: currentLibraryIndex\n        };\n        event.data = JSON.stringify(libData);\n        environment.dispatchEvent(event);\n    }\n\n    onFontListChanged() {\n        configuration.currentProduct.fontManager.invalidateFontList();\n    }\n\n    resetPanelView() {\n        if (!viewState.isStockSearchMode()) {\n            viewState.resetMode();\n        }\n    }\n\n    onDocumentDeactivateEvent() {\n        this.resetPanelView();\n    }\n\n    onForceSyncLibrary() {\n        libraryManager.sync(false, false);\n    }\n\n    onWorkspaceChanged(event) {\n        // Current implementation of getLibraryFromEventData sets the current library as well.\n        // For now current library is set automatically so nothing else to do.\n        event = JSON.parse(event);\n        getLibraryFromEventData(event);\n    }\n\n    async onStockOpenEvent(event) {\n        event = JSON.parse(event);\n        if (!event || event.elementRef === undefined) {\n            return;\n        }\n\n        const element = await libraryManager.resolveElementReference(event.elementRef);\n        const adobeStockId = AdobeStockUtils.getStockId(element);\n\n        // TODO: Do we know it's always an image?\n        const representation = elementConfiguration.findUsableRepresentation(element, FileUtils.getUsableTypes(configuration.IMAGE_ELEMENT_TYPE));\n        return (representation ? representation.getContentPath() : element.getThumbnailPath()).then(path => {\n            return environment.execApp('placeAsset', {\n                filePath : path,\n                libraryName : element.library.name,\n                itemName : element.name,\n                elementRef : element.getLegacyReference(),\n                modifiedTime : getElementModifiedTime(element),\n                creationTime : element.created,\n                adobeStockId,\n                adobeStockLicense : (adobeStockId ? AdobeStockUtils.isLicensed(element) : null),\n                isLinked: true,\n                isOpenIn: true\n            });\n        });\n    }\n\n    async onGetTextAsAiFile(event) {\n        event = JSON.parse(event);\n        const sendAiTextFileCreatedEvent = (filePath, stripStyles, contextData) => {\n            const responseEvent = environment.createEvent('ILST.textFileCreated', 'APPLICATION');\n            const dataMap = {};\n            if (filePath) {\n                dataMap.stripStyle = stripStyles;\n                dataMap.path = filePath;\n                dataMap.usingContextMenu = false;\n                dataMap.placeInline = false;\n                dataMap.contextData = contextData;\n            }\n            responseEvent.data = JSON.stringify(dataMap);\n            environment.dispatchEvent(responseEvent);\n        };\n\n        if (!event || event.elementRef === undefined) {\n            sendAiTextFileCreatedEvent();\n            return;\n        }\n\n        const element = await libraryManager.resolveElementReference(event.elementRef);\n        const representation = elementConfiguration.findUsableRepresentation(element);\n        if (element.type === configuration.TEXT_ELEMENT_TYPE && representation) {\n            if (representation.type === configuration.TEXT_REPRESENTATION_JSON_TYPE) {\n                const textData = representation.getValue(configuration.TEXT_NAMESPACE, configuration.TEXT_DATA_KEY);\n                textData.id = element.id + ';' + element.modified;\n                textData.type = 'text';\n                environment.execApp('getAiFileForText', [ textData ]).then(\n                    filePath => sendAiTextFileCreatedEvent(filePath, event.stripStyle, event.contextData),\n                    sendAiTextFileCreatedEvent\n                );\n            } else if (representation.type === TEXT_REPRESENTATION_AIFILE_TYPE) {\n                representation.getContentPath().then(filePath => sendAiTextFileCreatedEvent(filePath, event.stripStyle, event.contextData));\n            }\n        }\n    }\n\n    listen() {\n        environment.addEventListener('artSelectionOrPropertyChanged', this.onLayerUpdateEvent);\n        environment.addEventListener('ILST.pushColorsToLibrary', pushColorsToLibrary);\n        environment.addEventListener('documentAfterDeactivate', this.onDocumentDeactivateEvent);\n        environment.addEventListener('fontListChanged', this.onFontListChanged);\n        environment.addEventListener('ILST.addElementToLibrary', onAddElementToLibrary);\n        environment.addEventListener('ILST.forceSyncLibrary', this.onForceSyncLibrary);\n        environment.addEventListener('ILST.addSelectionToLibrary', onAddSelectionToLibrary);\n        environment.addEventListener('ILST.updateElement', onUpdateElement);\n        environment.addEventListener('ILST.workspaceChanged', this.onWorkspaceChanged);\n        environment.addEventListener('ILST.openStock', this.onStockOpenEvent);\n        environment.addEventListener('ILST.pushCharStyleToLibrary', addTextStyle);\n        environment.addEventListener('ILST.pushParaStyleToLibrary', addParaStyle);\n        environment.addEventListener('ILST.getTextAsAiFile', this.onGetTextAsAiFile);\n    }\n\n    stop() {\n        environment.removeEventListener('artSelectionOrPropertyChanged', this.onLayerUpdateEvent);\n        environment.removeEventListener('ILST.pushColorsToLibrary', pushColorsToLibrary);\n        environment.removeEventListener('documentAfterDeactivate', this.onDocumentDeactivateEvent);\n        environment.removeEventListener('fontListChanged', this.onFontListChanged);\n        environment.removeEventListener('ILST.addElementToLibrary', onAddElementToLibrary);\n        environment.removeEventListener('ILST.forceSyncLibrary', this.onForceSyncLibrary);\n        environment.removeEventListener('ILST.addSelectionToLibrary', onAddSelectionToLibrary);\n        environment.removeEventListener('ILST.updateElement', onUpdateElement);\n        environment.removeEventListener('ILST.workspaceChanged', this.onWorkspaceChanged);\n        environment.removeEventListener('ILST.openStock', this.onStockOpenEvent);\n        environment.removeEventListener('ILST.pushCharStyleToLibrary', addTextStyle);\n        environment.removeEventListener('ILST.pushParaStyleToLibrary', addParaStyle);\n        environment.removeEventListener('ILST.getTextAsAiFile', this.onGetTextAsAiFile);\n    }\n}\n\nexport default new ILSTEvents();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport ColorElementConfig from 'app/js/config/elements/ColorElementConfig';\nimport { getIllustratorData, setIllustratorData } from '../colorUtils';\nimport COLOR from 'app/applications/ILST_UXP/js/color';\nimport { Events } from '../events';\n\nfunction alertSpotMismatch() {\n    const event = environment.createEvent(Events.spotMishmatched, 'APPLICATION');\n    environment.dispatchEvent(event);\n}\n\nexport default class ILSTColorElementConfig extends ColorElementConfig {\n\n    // The colorData parameter supports using this apply function by color themes\n    _setColor(element, operation, colorData, after) {\n        if (!colorData) {\n            colorData = [];\n            // JSX expects primary representation to be the first element in the array\n            element.representations.forEach(rep => {\n                const data = rep.getValue(configuration.COLOR_NAMESPACE, configuration.COLOR_DATA_KEY);\n                const ilstData = getIllustratorData(rep);\n                if (ilstData) {\n                    data.global = ilstData.global;\n                }\n                const colorName = element.name;\n                data.name = colorName;\n                if (rep.relationship === 'primary') {\n                    colorData.unshift(data);\n                } else {\n                    colorData.push(data);\n                }\n            });\n\n            if (element.representations.length > 0) {\n                reportApplyMetric(element.representations[0], operation);\n            }\n        }\n\n        if (after) {\n            after(operation);\n        }\n\n        if (operation === 'addColor') {\n            return COLOR.addColor(colorData).then(isSpotMismatch => {\n                if (isSpotMismatch) {\n                    alertSpotMismatch();\n                }\n            });\n        } else if (operation === 'setColor') {\n            return COLOR.setColor(colorData).then(isSpotMismatch => {\n                if (isSpotMismatch) {\n                    alertSpotMismatch();\n                }\n            });\n        }\n    }\n\n    getApplyOperations(element) {\n\n        // If we have no document there is no way to use a color\n        const layerInfo = layerSelectionManager.getLayerInfo();\n        if (!layerInfo || JSON.stringify(layerInfo) === '{}') {\n            return [];\n        }\n\n        if (!layerInfo.selectionExists && !layerInfo.textSelectionExists && !layerInfo.insertionPointExists) {\n            return [ {\n                name: 'DL_ID_ADD_COLORS_TOOLTIP',\n                icon: 'paintbucket',\n                allowMultiple: true,\n                apply: (colorData, after) => this._setColor(element, 'addColor', colorData, after),\n                displayInMenu: true\n            } ];\n        }\n\n        return [ {\n            name: 'DL_SET_COLOR_TOOLTIP',\n            icon: 'paintbucket',\n            apply: (colorData, after) => this._setColor(element, 'setColor', colorData, after),\n            displayInMenu: true,\n            onClick: true\n        }, {\n            name: 'DL_ID_ADD_COLORS_TOOLTIP',\n            icon: 'paintbucket',\n            allowMultiple: true,\n            apply: (colorData, after) => this._setColor(element, 'addColor', colorData, after),\n            displayInMenu: true\n        } ];\n    }\n\n    defaultEditOperation(element) {\n        const representation = this._config.findUsableRepresentation(element);\n        const colorData = representation && representation.getValue(configuration.COLOR_NAMESPACE, configuration.COLOR_DATA_KEY);\n        // add the app specific data to the color data\n        const ilstData = representation && getIllustratorData(representation);\n        if (ilstData) {\n            colorData.global = ilstData.global;\n        }\n\n        return COLOR.replaceColor(colorData).then(colorWasChanged => {\n            if (!JSON.parse(colorWasChanged)) {\n                return;\n            }\n\n            return COLOR.getLayerColor().then(color => {\n                const parsedColor = JSON.parse(color);\n\n                element.beginOperation();\n                element.removeAllRepresentations();\n\n                parsedColor.forEach((rep, index) => {\n                    const relationship = index === 0 ? 'primary' : 'rendition';\n                    const newRepresentation = element.createRepresentation(configuration.COLOR_REPRESENTATION_TYPE, relationship);\n                    if ('global' in rep) {\n                        setIllustratorData(newRepresentation, rep);\n                        delete rep.global;\n                    }\n                    newRepresentation.setValue(configuration.COLOR_NAMESPACE, configuration.COLOR_DATA_KEY, rep);\n                });\n\n                element.endOperation();\n            });\n        });\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport ColorThemeElementConfig from 'app/js/config/elements/ColorThemeElementConfig';\nimport COLOR from 'app/applications/ILST_UXP/js/color';\nimport configuration from 'app/js/config/configuration';\n\nexport default class ILSTColorThemeElementConfig extends ColorThemeElementConfig {\n\n    _addThemeAsSwatchGroup(element) {\n        const representation = element.getPrimaryRepresentation();\n        const colorThemeData = representation && representation.getValue(configuration.COLOR_THEME_NAMESPACE, configuration.COLOR_THEME_DATA_KEY);\n\n        return COLOR.addSwatchGroup(colorThemeData,element.name).then(() => {\n            reportApplyMetric(representation, 'AddColorTheme');\n        });\n    }\n\n    getApplyOperations(element, subElement) {\n        // Inherit operations for colours, but apply to subElement (colour data)\n        const colorThemeOps = super.getApplyOperations(element, subElement);\n\n        const layerInfo = layerSelectionManager.getLayerInfo();\n        if (layerInfo && JSON.stringify(layerInfo) !== '{}') {\n            colorThemeOps.push({\n                name: 'DL_ADD_COLORTHEME_TO_SWATCHES',\n                icon: 'download',\n                displayInMenu: true,\n                allowMultiple: true,\n                apply: () => this._addThemeAsSwatchGroup(element)\n            });\n        }\n        return colorThemeOps;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport environment from 'app/js/environment';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport productInterface from 'app/js/interface/productInterface';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport lockManager from 'app/js/managers/lockManager';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric, reportApplyFullSizeMetric, checkFileSize, getElementModifiedTime, setThumbnail } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport ImageElementConfig from 'app/js/config/elements/ImageElementConfig';\nimport tempFileManager from 'app/js/managers/tempFileManager';\nimport documentWatchManager from 'app/js/managers/documentWatchManager';\nimport { Events } from '../events';\n\nexport default class ILSTImageElementConfig extends ImageElementConfig {\n\n    _addImageToDocument(element, isLinked) {\n        const adobeStockId = AdobeStockUtils.getStockId(element);\n\n        const representation = this._config.findUsableRepresentation(element);\n        representation ? reportApplyMetric(representation, 'placeAsset', isLinked) : reportApplyFullSizeMetric(element, 'placeAsset', isLinked);\n        // Passing full in getThumbnailPath as we want full-size rendition.\n        return (representation ? representation.getContentPath() : element.getThumbnailPath('full')).then(path => {\n            return environment.execApp('placeAsset', {\n                filePath : path,\n                libraryName : element.library.name,\n                itemName : element.name,\n                elementRef : element.getLegacyReference(),\n                modifiedTime : getElementModifiedTime(element),\n                creationTime : element.created,\n                adobeStockId,\n                adobeStockLicense : (adobeStockId ? AdobeStockUtils.isLicensed(element) : null),\n                isLinked\n            });\n        });\n    }\n\n    getApplyOperations(element) {\n\n        // If we have no document there is no way to use a graphic\n        const layerInfo = layerSelectionManager.getLayerInfo();\n        if (!layerInfo || JSON.stringify(layerInfo) === '{}') {\n            return [];\n        }\n\n        return [ {\n            name: 'DL_ADD_IMAGE_TO_DOC_AS_LINKED',\n            icon: 'download',\n            apply: () => this._addImageToDocument(element, true),\n            displayInMenu: true\n        }, {\n            name: 'DL_ADD_IMAGE_TO_DOC_AS_COPY',\n            icon: 'download',\n            apply: () => this._addImageToDocument(element, false),\n            displayInMenu: true\n        } ];\n    }\n\n    _getLockId(element) {\n        return 'documentLock_' + element.id;\n    }\n\n    _onDocumentClose(element, editData) {\n        const lockId = this._getLockId(element);\n        lockManager.obtainLock(lockId, () => {\n            documentWatchManager.stopListening(editData.listenerId);\n            editData.isClosed = true;\n            if (editData.isSaveInProgress === false) {\n                tempFileManager.deleteTempFile(editData.tempPath);\n            }\n\n            productInterface.elementEditCompleted(element);\n            lockManager.releaseLock(lockId);\n        });\n    }\n\n    _onDocumentSave(element, editData) {\n        // Prevent save from updating library, if the asset is too big\n        if (!checkFileSize(editData.tempPath)) {\n            return;\n        }\n\n        editData.isSaveInProgress = true;\n\n        // Check if the library exists - if it was deleted, switch to the current library\n        let library = element.library;\n        const libraryName = library.name;\n        const isDeleted = !library || library.isDeletedLocally;\n        let isRecovered = false;\n\n        if (isDeleted || !library.isWritable) {\n            library = libraryManager.getRecoveryLibrary(library.name);\n\n            if (!library) {\n                // There's no recovery library, so don't do anything\n                return;\n            }\n            isRecovered = true;\n        }\n\n        const lockId = this._getLockId(element);\n        lockManager.obtainLock(lockId, () => {\n\n            // If the element we're editing was deleted, we recreate it as a new element, so the changes aren't lost.\n            // Otherwise, we just remove the existing representations so we can add the new ones\n            const stockData = AdobeStockUtils.getStockDataForElement(element);\n            if (element.isDeletedLocally || isRecovered) {\n                element = library.createElement(element.name, element.type);\n            } else {\n                element.beginOperation();\n                element.removeAllRepresentations();\n            }\n\n            // Update the representations\n            const promises = [];\n            const assetMimeType = FileUtils.fileNameToMimeType(editData.tempPath, element.type);\n            const newRepresentation = element.createRepresentation(assetMimeType, 'primary');\n            if (stockData) {\n                // If this element is an adobe stock image, make sure we keep its stock image data\n                AdobeStockUtils.setStockData(newRepresentation, stockData);\n            }\n            promises.push(newRepresentation.setContentFromPath(editData.tempPath));\n\n            const pngPath = FileUtils.getFileNameWithoutExtension(editData.tempPath) + '.png';\n            if (pngPath && FileUtils.existsFile(pngPath)) {\n                promises.push(setThumbnail(element, configuration.IMAGE_THUMBNAIL_SIZE, pngPath));\n            }\n\n            // Final cleanup after saving.\n            const done = () => {\n                productInterface.sendElementUpdated(newRepresentation);\n\n                const operationsFinished = element.endOperation();\n\n                lockManager.releaseLock(lockId);\n\n                if (isRecovered) {\n                    elementSelectionState.revealElement(element);\n\n                    if (isDeleted) {\n                        environment.showError(translate('DL_WARNING_RECOVERED_FROM_DELETED', { recoveryLibraryName: library.name }));\n                    } else {\n                        environment.showError(translate('DL_WARNING_RECOVERED_FROM_READONLY', { recoveryLibraryName: library.name, originalLibraryName: libraryName }));\n                    }\n                }\n\n                operationsFinished.then(() => {\n                    if (editData.isClosed) { //do we need it.\n                        tempFileManager.deleteTempFile(editData.tempPath);\n                    } else {\n                        tempFileManager.updateTempFile(newRepresentation, editData.tempPath);\n                    }\n                    editData.isSaveInProgress = false;\n                });\n            };\n\n            Promise.all(promises).then(done);\n        });\n    }\n\n    defaultEditOperation(element) {\n\n        if (!this._config.isEditable(element)) {\n            // Returning false, so we fall back to the edit original workflow.\n            return Promise.resolve(false);\n        }\n\n        // At this point, we're guaranteed to have a primary representation that is of an editable type\n        const representation = element.getPrimaryRepresentation();\n\n        // Can't modify the representation directly - need to copy it\n        return tempFileManager.getTempFile(representation)\n            .then(tempPath => {\n                const pngPath = FileUtils.getFileNameWithoutExtension(tempPath) + '.png';\n                environment.execApp('openAssetForEdit', [ tempPath, pngPath, 'Image' ])\n                    .then(fileName => {\n                        const event = environment.createEvent(Events.fitCurrentDocumentViewToActiveArtboard, 'APPLICATION');\n                        environment.dispatchEvent(event);\n                        const editData = {\n                            tempPath,\n                            isClosed: false,\n                            isSaveInProgress: false\n                        };\n                        editData.listenerId = documentWatchManager.startListening(fileName, tempPath, event => {\n                            if (event === 'closed') {\n                                this._onDocumentClose(element, editData);\n                            } else if (event === 'saved') {\n                                this._onDocumentSave(element, editData);\n                            }\n                        });\n                    });\n            });\n    }\n\n    isDisabled(element) {\n        return !this._config.findUsableRepresentation(element) && !element.getCachedThumbnailPath();\n    }\n\n    getStockDragData() {\n        // No filesystem support in UXP means that the path to the element content won't be ready by this point.\n        // If the user does drop this Stock element, we will handle adding it to the canvas in `AIEnvironment.handleDroppedStockElement`.\n        return [ '' ];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport ParagraphStyleElementConfig from 'app/js/config/elements/ParagraphStyleElementConfig';\n\nconst STYLE_REPRESENTATION_JSON_TYPE = 'application/vnd.adobe.paragraphstyle+json';\nconst STYLE_NAMESPACE = 'paragraphstyle';\nconst STYLE_DATA_KEY = 'data';\n\nexport default class ILSTParagraphStyleElementConfig extends ParagraphStyleElementConfig {\n\n    _setStyleInfo(styleData, name, id) {\n        styleData.type = 'parastyle';\n        styleData.name = name;\n        styleData.id = id;\n    }\n\n    _useParaStyle(element, operation, multiOpData) {\n        const isFirstElement = multiOpData.index === 1;\n        const isLastElement = multiOpData.index === multiOpData.length;\n\n        const representation = this._config.findUsableRepresentation(element);\n        reportApplyMetric(representation, operation);\n\n        if (representation) {\n            const styleName = element.name;\n            const styleId = element.id + ';' + element.modified;\n\n            if (representation.type === STYLE_REPRESENTATION_JSON_TYPE) {\n                const styleData = representation.getValue(STYLE_NAMESPACE, STYLE_DATA_KEY);\n                this._setStyleInfo(styleData, styleName, styleId);\n                return environment.execApp(operation, [ styleData, isFirstElement, isLastElement ]);\n            }\n        }\n    }\n\n    _setParaStyle(element, multiOpData) {\n        return this._useParaStyle(element, 'setFont', multiOpData);\n    }\n\n    _createTextLayer(element, multiOpData) {\n        return this._useParaStyle(element, 'createTextLayer', multiOpData);\n    }\n\n    getApplyOperations(element, subElement, multiOpData) {\n        const layerInfo = layerSelectionManager.getLayerInfo();\n\n        // If we have no document there is no way to use a text style\n        if (!layerInfo || JSON.stringify(layerInfo) === '{}') {\n            return [];\n        }\n\n        const operations = [];\n        if (layerInfo && layerInfo.kind === 'LayerKind.TEXT') {\n            operations.push({\n                name: 'DL_SET_PARA_STYLE_TOOLTIP',\n                icon: 'text',\n                onClick: true,\n                apply: () => this._setParaStyle(element, multiOpData),\n                displayInMenu: true\n            });\n        }\n\n        operations.push({\n            name: 'DL_ADD_AS_PARA_STYLE_TOOLTIP',\n            icon: 'pastetext',\n            apply: () => this._createTextLayer(element, multiOpData),\n            displayInMenu: true,\n            allowMultiple: true\n        });\n\n        return operations;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport environment from 'app/js/environment';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport productInterface from 'app/js/interface/productInterface';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport lockManager from 'app/js/managers/lockManager';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric, checkFileSize, setThumbnail } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport TextElementConfig from 'app/js/config/elements/TextElementConfig';\nimport tempFileManager from 'app/js/managers/tempFileManager';\nimport documentWatchManager from 'app/js/managers/documentWatchManager';\nimport { Events } from '../events';\n\nconst TEXT_REPRESENTATION_AIFILE_TYPE = 'application/illustrator-text';\n\nexport default class ILSTTextElementConfig extends TextElementConfig {\n\n    _sendAiTextFileCreatedEvent(filePath, stripStyles, placeInline) {\n        const responseEvent = environment.createEvent(Events.textFileCreated, 'APPLICATION');\n        const dataMap = {};\n        if (filePath) {\n            dataMap.stripStyle = stripStyles;\n            dataMap.placeInline = placeInline;\n            dataMap.path = filePath;\n            dataMap.usingContextMenu = true;\n        }\n        responseEvent.data = JSON.stringify(dataMap);\n        environment.dispatchEvent(responseEvent);\n    }\n\n    // operation: the function that should be called in execApp\n    // stripStyles: true if user selected place without styles\n    _useText(element, operation, stripStyles, placeInline) {\n        const representation = this._config.findUsableRepresentation(element);\n        if (!representation) {\n            return;\n        }\n\n        reportApplyMetric(representation, operation);\n        const textId = element.id + ';' + element.modified;\n\n        if (representation.type === configuration.TEXT_REPRESENTATION_JSON_TYPE) {\n            const textData = representation.getValue(configuration.TEXT_NAMESPACE, configuration.TEXT_DATA_KEY);\n            // Uncomment following line to dump the JSON data being consumed.\n            //console.log(JSON.stringify(textData));\n            textData.id = textId;\n            textData.type = 'text';\n            return environment.execApp(operation, [ textData ]).then(path => this._sendAiTextFileCreatedEvent(path, stripStyles, placeInline));\n        }\n\n        if (representation.type === TEXT_REPRESENTATION_AIFILE_TYPE) {\n            return representation.getContentPath().then(path => this._sendAiTextFileCreatedEvent(path, stripStyles, placeInline));\n        }\n    }\n\n    _setText(element) {\n        return this._useText(element, 'getAiFileForText', false, false);\n    }\n\n    _setPlainText(element) {\n        return this._useText(element, 'getAiFileForText', true, false);\n    }\n\n    _setTextInline(element) {\n        return this._useText(element, 'getAiFileForText', false, true);\n    }\n\n    getApplyOperations(element) {\n        const layerInfo = layerSelectionManager.getLayerInfo();\n\n        // If we have no document there is no way to use a text\n        if (!layerInfo || JSON.stringify(layerInfo) === '{}') {\n            return [];\n        }\n\n        if (layerInfo.textSelectionExists === true || layerInfo.insertionPointExists === true) {\n            return [ {\n                name: 'DL_ADD_TEXT_INLINE_AI',\n                icon: 'text',\n                onClick: false,\n                apply: () => this._setTextInline(element),\n                displayInMenu: true\n            } ];\n        }\n\n        return [ {\n            name: 'DL_ADD_TEXT_UNLINKED_AI',\n            icon: 'text',\n            onClick: false,\n            apply: () => this._setText(element),\n            displayInMenu: true\n        }, {\n            name: 'DL_ADD_TEXT_UNLINKED_NOSTYLES',\n            icon: 'text',\n            onClick: false,\n            apply: () => this._setPlainText(element),\n            displayInMenu: true\n        } ];\n    }\n\n    _getLockId(element) {\n        return 'documentLock_' + element.id;\n    }\n\n    _onDocumentClose(element, editData) {\n        const lockId = this._getLockId(element);\n        lockManager.obtainLock(lockId, () => {\n            documentWatchManager.stopListening(editData.listenerId);\n            editData.isClosed = true;\n            if (editData.isSaveInProgress === false) {\n                tempFileManager.deleteTempFile(editData.tempPath);\n            }\n\n            productInterface.elementEditCompleted(element);\n            lockManager.releaseLock(lockId);\n        });\n    }\n\n    _onDocumentSave(element, editData) {\n        // Prevent save from updating library, if the asset is too big\n        if (!checkFileSize(editData.tempPath)) {\n            return;\n        }\n\n        editData.isSaveInProgress = true;\n\n        if (!FileUtils.existsFile(editData.tempPath)) {\n            editData.isSaveInProgress = false;\n            return;\n        }\n\n        // Check if the library exists - if it was deleted, switch to the current library\n        let library = element.library;\n        const libraryName = library.name;\n        const isDeleted = !library || library.isDeletedLocally;\n        let isRecovered = false;\n\n        if (isDeleted || !library.isWritable) {\n            library = libraryManager.getRecoveryLibrary(library.name);\n\n            if (!library) {\n                // There's no recovery library, so don't do anything\n                return;\n            }\n            isRecovered = true;\n        }\n\n        const lockId = this._getLockId(element);\n        lockManager.obtainLock(lockId, () => {\n\n            environment.execApp('getUpdatedTextInfo', [ editData.tempPath ]).then(data => {\n                const promises = [];\n\n                const dataObj = JSON.parse(data);\n                if (dataObj.isValidSave !== true) {\n                    return;\n                }\n\n                // If the element we're editing was deleted, we recreate it as a new element, so the changes aren't lost.\n                // Otherwise, we just remove the existing representations so we can add the new ones\n                if (element.isDeletedLocally || isRecovered) {\n                    element = library.createElement(element.name, element.type);\n                } else {\n                    element.beginOperation();\n                    element.removeAllRepresentations();\n                }\n                const textData = dataObj.textData;\n                const assetMimeType = FileUtils.fileNameToMimeType(editData.tempPath, element.type);\n                const newRepresentation = element.createRepresentation(assetMimeType, 'primary');\n                promises.push(newRepresentation.setContentFromPath(editData.tempPath));\n\n                const jsonRepresentation = element.createRepresentation(configuration.TEXT_REPRESENTATION_JSON_TYPE, 'rendition');\n                jsonRepresentation.setValue(configuration.TEXT_NAMESPACE, configuration.TEXT_DATA_KEY, textData.textInfo);\n\n                const pngPath = FileUtils.getFileNameWithoutExtension(editData.tempPath) + '.png';\n                if (pngPath && FileUtils.existsFile(pngPath)) {\n                    promises.push(setThumbnail(element, configuration.IMAGE_THUMBNAIL_SIZE, pngPath));\n                }\n\n                // Final cleanup after saving.\n                const done = () => {\n                    productInterface.sendElementUpdated(newRepresentation);\n\n                    const operationsFinished = element.endOperation();\n\n                    lockManager.releaseLock(lockId);\n\n                    if (isRecovered) {\n                        elementSelectionState.revealElement(element);\n\n                        if (isDeleted) {\n                            environment.showError(translate('DL_WARNING_RECOVERED_FROM_DELETED', { recoveryLibraryName: library.name }));\n                        } else {\n                            environment.showError(translate('DL_WARNING_RECOVERED_FROM_READONLY', { recoveryLibraryName: library.name, originalLibraryName: libraryName }));\n                        }\n                    }\n\n                    operationsFinished.then(() => {\n                        if (editData.isClosed) { //do we need it.\n                            tempFileManager.deleteTempFile(editData.tempPath);\n                        } else {\n                            tempFileManager.updateTempFile(newRepresentation, editData.tempPath);\n                        }\n                        editData.isSaveInProgress = false;\n                    });\n                };\n\n                Promise.all(promises).then(done, done);\n            });\n        });\n    }\n\n    defaultEditOperation(element) {\n\n        if (!this._config.isEditable(element)) {\n            // Returning false, so we fall back to the edit original workflow.\n            return Promise.resolve(false);\n        }\n\n        // At this point, we're guaranteed to have a primary representation that is of an editable type\n        const representation = element.getPrimaryRepresentation();\n\n        // Can't modify the representation directly - need to copy it\n        return tempFileManager.getTempFile(representation)\n            .then(tempPath => {\n                const pngPath = FileUtils.getFileNameWithoutExtension(tempPath) + '.png';\n                environment.execApp('openAssetForEdit', [ tempPath, pngPath, 'text' ])\n                    .then(fileName => {\n                        const editData = {\n                            tempPath,\n                            isClosed: false,\n                            isSaveInProgress: false\n                        };\n                        editData.listenerId = documentWatchManager.startListening(fileName, tempPath, event => {\n                            if (event === 'closed') {\n                                this._onDocumentClose(element, editData);\n                            } else if (event === 'saved') {\n                                this._onDocumentSave(element, editData);\n                            }\n                        });\n                    });\n            });\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { reportApplyMetric, createElementExtraMetrics } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport TextStyleElementConfig from 'app/js/config/elements/TextStyleElementConfig';\nimport * as TypekitUtils from 'app/js/utils/typekitUtils';\n\nconst STYLE_REPRESENTATION_JSON_TYPE = 'application/vnd.adobe.characterstyle+json';\nconst STYLE_NAMESPACE = 'characterstyle';\nconst STYLE_DATA_KEY = 'data';\n\nexport default class ILSTTextStyleElementConfig extends TextStyleElementConfig {\n\n    _setStyleInfo(styleData, name, id) {\n        styleData.type = 'charstyle';\n        styleData.name = name;\n        styleData.id = id;\n    }\n\n    _useTextStyle(element, operation, multiOpData) {\n        const isFirstElement = multiOpData.index === 1;\n        const isLastElement = multiOpData.index === multiOpData.length;\n\n        const representation = this._config.findUsableRepresentation(element);\n        if (!representation) {\n            return;\n        }\n\n        const font = TypekitUtils.checkTypekitFont(element);\n        if (font && font.id) {\n            reportApplyMetric(representation, operation, null, { event: { value: 'typekit' } });\n        } else {\n            reportApplyMetric(representation, operation);\n        }\n\n        const styleName = element.name;\n        const styleId = element.id + ';' + element.modified;\n\n        if (representation.type === STYLE_REPRESENTATION_JSON_TYPE) {\n            const styleData = representation.getValue(STYLE_NAMESPACE, STYLE_DATA_KEY);\n            this._setStyleInfo(styleData, styleName, styleId);\n            return environment.execApp(operation, [ styleData, isFirstElement, isLastElement ]);\n        }\n    }\n\n     _setTextStyle = function(element, multiOpData) {\n         return this._useTextStyle(element, 'setFont', multiOpData);\n     };\n\n     _createTextLayer = function(element, multiOpData) {\n         return this._useTextStyle(element, 'createTextLayer', multiOpData);\n     };\n\n     getApplyOperations(element, subElement, multiOpData) {\n         const layerInfo = layerSelectionManager.getLayerInfo();\n\n         // If we have no document there is no way to use a text style\n         if (!layerInfo || JSON.stringify(layerInfo) === '{}') {\n             return [];\n         }\n\n         const operations = [];\n         if (layerInfo.kind === 'LayerKind.TEXT') {\n             operations.push({\n                 name: 'DL_SET_TEXT_STYLE_TOOLTIP',\n                 icon: 'text',\n                 onClick: true,\n                 apply: () => this._setTextStyle(element, multiOpData),\n                 displayInMenu: true\n             });\n         }\n\n         operations.push({\n             name: 'DL_ADD_AS_TEXT_STYLE_TOOLTIP',\n             icon: 'pastetext',\n             apply: () => this._createTextLayer(element, multiOpData),\n             displayInMenu: true,\n             allowMultiple: true\n         });\n\n         return operations;\n     }\n\n     _addTextStyleElement(layerInfo, library, opType) {\n\n         // If for some reason we don't have layerInfo then we just need to break\n         if (!layerInfo || layerInfo.kind !== 'LayerKind.TEXT') {\n             return Promise.reject('not a text layer');\n         }\n\n         return environment.execApp('getCharStyleInfo').then(data => {\n             const styleData = JSON.parse(data);\n\n             // Set the default text style name if one isn't defined\n             if (!styleData.styleName) {\n                 styleData.styleName = translate('DL_TYPE_NEW_CHAR_STYLE');\n             }\n\n             const newElement = createElementExtraMetrics(library, styleData.styleName, configuration.CHARACTER_STYLE_ELEMENT_TYPE, {\n                 opType\n             });\n\n             const newRepresentation = newElement.createRepresentation(STYLE_REPRESENTATION_JSON_TYPE, 'primary');\n             newRepresentation.setValue(STYLE_NAMESPACE, STYLE_DATA_KEY, styleData.styleInfo);\n\n             const updatePromises = [];\n             if (styleData.previewPath) {\n                 const newRendition = newElement.createRepresentation('image/png', 'rendition');\n                 updatePromises.push(newRendition.setContentFromPath(styleData.previewPath));\n             }\n\n             return Promise.all(updatePromises)\n                 .then(() => {\n                     if (styleData.previewPath) {\n                         newElement.setThumbnailCache(configuration.CHARACTER_STYLE_THUMBNAIL_SIZE, styleData.previewPath, () => {\n                             FileUtils.deleteFile(styleData.previewPath);\n                         });\n                     }\n                     newElement.endOperation();\n                     return newElement;\n                 })\n                 .catch(() => {\n                     library.removeElement(newElement, true);\n                     return Promise.reject('Could not create element.');\n                 });\n         });\n     }\n\n     getAddOperations(layerInfo) {\n         if (!layerInfo || JSON.stringify(layerInfo) === '{}' || !layerInfo.text || (layerInfo.isAppliedCharStyleSupported === false)) {\n             return [];\n         }\n\n         const addTextStyle = (library, opType) => {\n             return new Promise(resolve => {\n                 // We need to get the most current Character Style data because the user could have changed it since last selection.\n                 layerSelectionManager.updateLayerInfo().then(() => resolve(this._addTextStyleElement(layerInfo, library, opType)));\n             });\n         };\n\n         // Note: for all layers, we display the operation, just disable it if it's not a text layer\n         return [ {\n             name: 'DL_ADD_TEXT_STYLE_NAME',\n             order: 2,\n             icon: 'AddCharacterStyle',\n             apply: addTextStyle\n         } ];\n     }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport BrushElementConfig from 'app/js/config/elements/BrushElementConfig';\n\nexport default class ILSTBrushElementConfig extends BrushElementConfig {\n\n    _addBrushToDocument = function(element, representation) {\n        reportApplyMetric(representation, 'useBrush');\n        return representation.getContentPath().then(path => environment.execApp('loadAndSelectBrush',[ path, element.name ]));\n    };\n\n    getApplyOperations(element) {\n        const brushTypes = FileUtils.getUsableTypes(element.type);\n        const representation = element.representations.find(rep => {\n            const isRendition = rep.relationship === 'rendition';\n            const isBrush = this._config.isRepresentationCompatible(rep, brushTypes);\n            return !isRendition && isBrush;\n        });\n\n        const layerInfo = layerSelectionManager.getLayerInfo();\n\n        if (!layerInfo || JSON.stringify(layerInfo) === '{}' || !representation) {\n            return [];\n        }\n\n        return [ {\n            name: 'DL_ADD_BRUSH_TO_DOC',\n            icon: 'brush',\n            onClick: true,\n            apply: () => this._addBrushToDocument(element, representation),\n            displayInMenu: true\n        } ];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { reportApplyMetric, reportApplyFullSizeMetric, getElementModifiedTime } from 'app/js/utils/libraryUtils';\nimport PatternElementConfig from 'app/js/config/elements/PatternElementConfig';\nimport { Events } from '../events';\nexport default class ILSTPatternElementConfig extends PatternElementConfig {\n    dragType = 'image';\n    allowDragWithoutUsableRepresentation = true;\n\n    _applyPattern(element, svgRepresentation) {\n        let representation;\n        if (svgRepresentation && configuration.currentProduct.config.enableSVGPatterns) {\n            representation = svgRepresentation;\n        } else {\n            representation = this._config.findUsableRepresentation(element);\n        }\n        if (representation) {\n            reportApplyMetric(representation, 'applyPattern');\n            return representation.getContentPath().then(path => {\n                const event = environment.createEvent(Events.applyPattern, 'APPLICATION');\n                const dataMap = {};\n                dataMap.path = path;\n                dataMap.type = representation.type;\n                dataMap.name = element.name;\n                event.data = JSON.stringify(dataMap);\n                return environment.dispatchEvent(event);\n            });\n        }\n        return element.getThumbnailPath().then(path => {\n            reportApplyFullSizeMetric(element, 'applyPattern');\n            const event = environment.createEvent(Events.applyPattern, 'APPLICATION');\n            const dataMap = {};\n            dataMap.path = path;\n            dataMap.name = element.name;\n            event.data = JSON.stringify(dataMap);\n            return environment.dispatchEvent(event);\n        });\n    }\n\n    _addImageToDocument(element, isLinked = false) { // Workin\n        const adobeStockId = AdobeStockUtils.getStockId(element);\n        const representation = this._config.findUsableRepresentation(element);\n        if (representation) {\n            reportApplyMetric(representation, 'placeAsset', isLinked);\n            return representation.getContentPath().then(path => {\n                return environment.execApp('placeAsset', {\n                    filePath : path,\n                    libraryName : element.library.name,\n                    itemName : element.name,\n                    elementRef : element.getLegacyReference(),\n                    modifiedTime : getElementModifiedTime(element),\n                    creationTime : element.created,\n                    adobeStockId,\n                    adobeStockLicense : (adobeStockId ? AdobeStockUtils.isLicensed(element) : null),\n                    isLinked\n                });\n            });\n        }\n        // Fallback: use the full-size rendition if we don't have a representation we can use\n        return element.getThumbnailPath().then(path => {\n            reportApplyFullSizeMetric(element, 'placeAsset', isLinked);\n            return environment.execApp('placeAsset', {\n                filePath : path,\n                libraryName : element.library.name,\n                itemName : element.name,\n                elementRef : element.getLegacyReference(),\n                modifiedTime : getElementModifiedTime(element),\n                creationTime : element.created,\n                adobeStockId,\n                adobeStockLicense : (adobeStockId ? AdobeStockUtils.isLicensed(element) : null),\n                isLinked\n            });\n        });\n    }\n\n    _addVectorPatternTileToDocument(element, svgRepresentation, isLinked = false) { // Will Work SVG\n        const adobeStockId = AdobeStockUtils.getStockId(element);\n        reportApplyMetric(svgRepresentation, 'placeAsset', isLinked);\n        return svgRepresentation.getContentPath().then(path => {\n            return environment.execApp('placeAsset', {\n                filePath : path,\n                libraryName : element.library.name,\n                itemName : element.name,\n                elementRef : element.getLegacyReference(),\n                modifiedTime : getElementModifiedTime(element),\n                creationTime : element.created,\n                adobeStockId,\n                adobeStockLicense : (adobeStockId ? AdobeStockUtils.isLicensed(element) : null),\n                isLinked\n            });\n        });\n    }\n\n    getApplyOperations(element) {\n        // If we have no document there is no way to use a graphic\n        const layerInfo = layerSelectionManager.getLayerInfo();\n        if (!layerInfo || JSON.stringify(layerInfo) === '{}') {\n            return [];\n        }\n        const svgRepresentation = element.representations.find(rep => {\n            const isSVG = rep.type === 'image/svg+xml';\n            const isPattern = this._config.isRepresentationCompatible(rep, FileUtils.getUsableTypes(element.type));\n            return isSVG && isPattern;\n        });\n        const actions = [ {\n            name: 'DL_APPLY_PATTERN',\n            icon: 'paintbucket',\n            apply: () => this._applyPattern(element, svgRepresentation),\n            displayInMenu: true,\n            onClick: true\n        }, {\n            name: 'DL_ADD_PATTERN_TO_DOC_AS_IMAGE_AS_COPY',\n            icon: 'download',\n            apply: () => this._addImageToDocument(element),\n            displayInMenu: true\n        } ];\n        if (svgRepresentation) {\n            actions.push({\n                name: 'DL_ADD_VECTOR_PATTERN_TILE_TO_DOC_AS_COPY',\n                icon: 'download',\n                apply: () => this._addVectorPatternTileToDocument(element, svgRepresentation),\n                displayInMenu: true\n            });\n        }\n        return actions;\n    }\n\n    getDragData(element) {\n        // Get the representation to use, and the path to it\n        const usableRepresentation = this._config.findUsableRepresentation(element);\n        let contentPath;\n        if (usableRepresentation) {\n            // will return undefined if not cached\n            contentPath = usableRepresentation.getCachedContentPath();\n        }\n        if (contentPath) {\n            return {\n                data: [ contentPath ],\n                placeType: 'unlinked',\n                // NOTE: The representation is only for analytics purposes; this will get stripped before setting the drag data\n                usedRepresentationForAnalytics: usableRepresentation\n            };\n        }\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2016 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\n\nimport TemplateElementConfig from 'app/js/config/elements/TemplateElementConfig';\n\nexport default class ILSTTemplateElementConfig extends TemplateElementConfig {\n\n    _openDocumentFromTemplate(element, representation, isStockMissing) {\n        if (isStockMissing) {\n            return environment.showError(translate(AdobeStockUtils.getStockTemplateUseError(element)));\n        }\n        reportApplyMetric(representation, 'useTemplate');\n        return representation.getContentPath().then(path => environment.execApp('openDocumentFromTemplate',[ path, element.name ]));\n    }\n\n    getApplyOperations(element) {\n        const templateTypes = FileUtils.getUsableTypes(element.type);\n        const representation = element.representations.find(rep => {\n            const isRendition = rep.relationship === 'rendition';\n            const isTemplate = this._config.isRepresentationCompatible(rep, templateTypes);\n            return !isRendition && isTemplate;\n        });\n\n        // If there's no representation because we haven't finished downloading the stock element, we still add an apply operation\n        // (which gives an error message), so the user understands what's going on.\n        const isStockMissing = !representation && this._config.isRepresentationCompatible(element.getPrimaryRepresentation(), templateTypes, true);\n        if (!representation && !isStockMissing) {\n            return [];\n        }\n\n        return [ {\n            name: 'DL_OPEN_DOC_FROM_TEMPLATE',\n            icon: 'template',\n            onDoubleClick: true,\n            apply: () => this._openDocumentFromTemplate(element, representation, isStockMissing),\n            displayInMenu: true\n        } ];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport environment from 'app/js/environment';\nimport debugLog from 'app/js/utils/debugLog';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport ApplicationFontManager from 'app/js/managers/utils/ApplicationFontManager';\nimport ILSTEvents from '../../ILST_UXP/js/events';\n\nimport DefaultConfigs from 'app/js/config/elements/DefaultConfigs';\nimport ColorElementConfig from './elements/ColorElementConfig';\nimport ColorThemeElementConfig from './elements/ColorThemeElementConfig';\nimport ImageElementConfig from './elements/ImageElementConfig';\nimport ParagraphStyleElementConfig from './elements/ParagraphStyleElementConfig';\nimport TextElementConfig from './elements/TextElementConfig';\nimport TextStyleElementConfig from './elements/TextStyleElementConfig';\nimport BrushElementConfig from './elements/BrushElementConfig';\nimport PatternElementConfig from './elements/PatternElementConfig';\nimport TemplateElementConfig from './elements/TemplateElementConfig';\n\nexport function getAppConfiguration() {\n    this.config = {};\n    this.config.code = 'ILST_UXP';\n    this.config.fullName = 'Illustrator';\n    this.config.translationSuffix = 'AI';\n    this.config.dragDropSource = 'com.adobe.illustrator';\n    this.config.offsetSelectMenu = true;\n    this.config.usesEscapedFilePathsInEvents = true;\n    this.config.hideDefaultSearchCancelIcon = true;\n    this.config.panelWidthAdjustment = -13;\n    this.config.cancelButtonQuiet = true;\n\n    this.config.themes = {\n        '323232': 'darker', // 16.1\n        '535353': 'dark', // 16.1\n        'b8b8b8': 'light', // 16.1\n        'f0f0f0': 'lighter' // 16.1\n    };\n\n    // In the global CSS, certain app styles are bound to the classname 'spectrum-enabled'.\n    this.config.legacySpectrumEnabled = true;\n\n    this.config.defaultTheme = 'dark';\n\n    this.config.elementTypes = [\n        ColorElementConfig,\n        ColorThemeElementConfig,\n        TextElementConfig,\n        TextStyleElementConfig,\n        DefaultConfigs.FontElementConfig,\n        ParagraphStyleElementConfig,\n        ImageElementConfig,\n        BrushElementConfig,\n        TemplateElementConfig,\n        PatternElementConfig,\n        DefaultConfigs.ComponentElementConfig,\n        DefaultConfigs.GradientElementConfig, // Gradients should be moved to under Color Themes once Illustrator supports them.\n        DefaultConfigs.VideoElementConfig,\n        DefaultConfigs.LookElementConfig,\n        DefaultConfigs.CapsuleElementConfig,\n        DefaultConfigs.ThreeDElementConfig,\n        DefaultConfigs.LayerStyleElementConfig,\n        DefaultConfigs.AnimationElementConfig,\n        DefaultConfigs.LightElementConfig,\n        DefaultConfigs.MaterialElementConfig,\n        DefaultConfigs.AudioElementConfig,\n        DefaultConfigs.ChannelElementConfig,\n        DefaultConfigs.ImageGuidelineElementConfig,\n        DefaultConfigs.UnsupportedElementConfig\n    ];\n\n    // This defines the element categories that are collapsed by default in the UI - change this to suite your application.\n    this.config.collapsedTypes = [\n        configuration.GRADIENT_ELEMENT_TYPE, // remove Gradients from collapsed types once Illustrator supports them.\n        configuration.VIDEO_ELEMENT_TYPE,\n        configuration.LOOK_ELEMENT_TYPE,\n        configuration.CAPSULE_ELEMENT_TYPE,\n        configuration.THREE_D_ELEMENT_TYPE,\n        configuration.LAYER_STYLE_ELEMENT_TYPE,\n        configuration.ANIMATION_ELEMENT_TYPE,\n        configuration.LIGHT_ELEMENT_TYPE,\n        configuration.MATERIAL_ELEMENT_TYPE,\n        configuration.AUDIO_ELEMENT_TYPE,\n        configuration.CHANNEL_ELEMENT_TYPE,\n        configuration.IMAGE_GUIDELINE_ELEMENT_TYPE,\n        configuration.UNSUPPORTED_ELEMENT_TYPE\n    ];\n\n    // Temporarily removing capture from add menu in Ai\n    // In Illustrator these modules show up in Capture Panel in the order specified here\n    // this.config.captureModules = [ 'Patterns', 'Shapes', 'Colors', 'Gradients' ];\n\n    this.config.includeGuidInTempFileName = true;\n\n    this.startEventListener = function() {\n        ILSTEvents.listen();\n    };\n\n    this.stopEventListener = function() {\n        ILSTEvents.stop();\n    };\n\n    this.fontManager = new ApplicationFontManager();\n\n    this.init = function() {\n        FileUtils.extendUsableTypes(configuration.IMAGE_ELEMENT_TYPE, [ 'image/png',\n            'image/jpeg',\n            'image/jpg',\n            'image/svg+xml',\n            'image/bmp',\n            'application/photoshop',\n            'application/photoshop.large',\n            'image/vnd.adobe.photoshop',\n            'application/illustrator',\n            'application/pdf' ]);\n        FileUtils.extendUsableTypes(configuration.COLOR_THEME_ELEMENT_TYPE, [ 'application/vnd.adobe.colortheme+json' ]);\n        FileUtils.extendUsableTypes(configuration.BRUSH_ELEMENT_TYPE, [ 'application/vnd.adobe.vector.brush+zip' ]);\n        FileUtils.extendUsableTypes(configuration.CHARACTER_STYLE_ELEMENT_TYPE, [ 'application/vnd.adobe.characterstyle+json' ]);\n        FileUtils.extendUsableTypes(configuration.PARAGRAPH_STYLE_ELEMENT_TYPE, [ 'application/vnd.adobe.paragraphstyle+json' ]);\n        FileUtils.extendUsableTypes(configuration.TEMPLATE_ELEMENT_TYPE, [ 'application/illustrator.template', 'application/vnd.adobe.illustrator.template' ]);\n        FileUtils.extendUsableTypes(configuration.PATTERN_ELEMENT_TYPE, [ 'image/vnd.adobe.pattern+png', 'image/svg+xml' ]);\n        FileUtils.extendUsableTypes(configuration.TEXT_ELEMENT_TYPE, [ 'application/vnd.adobe.text+json', 'application/illustrator-text' ]);\n        FileUtils.extendUsableTypes(configuration.COMPONENT_ELEMENT_TYPE, [ 'image/svg+xml', 'image/png' ]);\n        // Gradients should be enabled once Illustrator supports them.\n        // FileUtils.extendUsableTypes(configuration.GRADIENT_ELEMENT_TYPE, [ 'application/vnd.adobe.gradient+json' ]);\n\n        FileUtils.extendEditableTypes(configuration.COLOR_ELEMENT_TYPE, [ 'application/vnd.adobe.color+json' ]);\n        FileUtils.extendEditableTypes(configuration.IMAGE_ELEMENT_TYPE, [ 'image/svg+xml',\n            'application/illustrator' ]);\n        FileUtils.extendEditableTypes(configuration.TEXT_ELEMENT_TYPE, [ 'application/illustrator-text' ]);\n\n        this.startEventListener();\n\n        libraryManager.waitForInitialLoad().then(function() {\n            const event = environment.createEvent('com.adobe.DesignLibraries.events.READY', 'APPLICATION');\n            environment.dispatchEvent(event);\n        });\n\n        //We listen to libraryList to track changes (add/remove/rename) to the list of libraries, and sync that to the app.\n        libraryManager.addListener('libraryList', function() {\n            ILSTEvents.updateLibrariesInfo();\n        });\n        libraryManager.addListener('currentLibrary', function() {\n            ILSTEvents.updateLibrariesInfo();\n        });\n\n    };\n\n    this.getUserData = function() {\n        // TODO waiting for ILST to expose licensing module\n        // window.nodeRequire('uxp').licensing.fetchProfile().then(userData => {\n        //     ...\n        //      const userProfile = JSON.parse(userData).UserProfile;\n        //      if (userProfile) {\n        //         const doSomethingWithThis =  userProfile.userId;\n        //         const returnMeTodo =  userProfile.accountType === 'type3' ? 'paid' : 'free';\n        //      }\n        //    ...\n        // });\n    };\n\n    // Use mouse co-ordinates on Mac to detect a successful drop while in Adobe Stock search mode\n    this.config.useMouseEventToDetectDrop = true;\n\n    // This handler would be called before panel proceeds with default Drop workflow\n    // After inspecting the eventData, this function should return a boolean stating\n    // whether the drop was successfully handled by the app\n    // return true if this application wants to handle the data\n    // return false to let panel handle the data\n    this.dropHandler = function(eventData, keys) {\n        debugLog.log('Illustrator drop handler', eventData);\n        const hasModifierKey = environment.isWindowsOS() ? keys.ctrlKey : keys.metaKey;\n        if (hasModifierKey && eventData.assetList[0].type === 'text') {\n            eventData.assetList[0].type = 'image';\n        }\n        return Promise.reject();\n    };\n\n    this.customDropMessage = function(eventData, keys) {\n        const isWindows = environment.isWindowsOS();\n        const hasModifierKey = isWindows ? keys.ctrlKey : keys.metaKey;\n\n        if (!hasModifierKey && eventData.assetList[0].type === 'text') {\n            // Display a message to tell the user about the modifier key - holding down cmd/ctrl\n            // will add text as a graphic, rather than a text element\n            const dropTextMessage = `DL_CUSTOM_DROP_MESSAGE_ID_TEXT_${isWindows ? 'WIN' : 'MAC'}`;\n            return translate(dropTextMessage);\n        }\n    };\n\n    // Set this to allow dragging with the Cmd-key held down (otherwise, dropping gets prevented by default)\n    this.allowCmdDrag = true;\n\n    // TODO: Refactor the above to return an object, rather than using this\n    return this;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { reaction } from 'mobx';\nimport configuration from 'app/js/config/configuration';\nimport * as colorUtils from 'app/js/utils/colorUtils';\nimport environment from 'app/js/environment';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport ApplicationFontManager from 'app/js/managers/utils/ApplicationFontManager';\nimport * as FileUtils from 'app/js/utils/fileUtils';\n\n// Import all the element type configuration overrides\nimport DefaultConfigs from 'app/js/config/elements/DefaultConfigs';\n\nexport function getAppConfiguration() {\n    this.config = {};\n    this.config.code = 'KBRG'; // This is the four-letter code of your application (e.g. PHXS, ILST, etc).\n    this.config.fullName = 'Bridge'; // The full name of the application (e.g. Photoshop, Premiere Pro, etc).\n    this.config.translationSuffix = 'BR'; // A two-letter code used for identifying app-specific externalized strings\n    this.config.dragDropSource = 'com.adobe.bridge'; // Should be of the form com.adobe.<yourapp>, e.g. com.adobe.indesign, com.adobe.premiere, etc.\n    this.config.enableUnusableElements = true;\n\n    // config.themes is a map from the background HEX value of the theme, to the name of the theme (CSS file) to load\n    this.config.themes = {\n        // mondo\n        //'323232': 'darker',\n        '535353': 'dark_mondo',\n        'b8b8b8': 'light_mondo',\n        'f0f0f0': 'lighter_mondo',\n        // drover\n        '1d1d1d': 'darker',\n        '323232': 'dark',\n        'f8f8f8': 'lighter'\n    };\n\n    // In the global CSS, certain app styles are bound to the classname 'spectrum-enabled'.\n    this.config.legacySpectrumEnabled = true;\n\n    this.config.defaultTheme = 'dark';\n\n    // This defines the order that the library element categories appear in the UI - change this to suit your application\n    this.config.elementTypes = [\n        DefaultConfigs.ImageElementConfig,\n        DefaultConfigs.VideoElementConfig,\n        DefaultConfigs.CapsuleElementConfig,\n        DefaultConfigs.TextStyleElementConfig,\n        DefaultConfigs.FontElementConfig,\n        DefaultConfigs.ColorElementConfig,\n        DefaultConfigs.ColorThemeElementConfig,\n        DefaultConfigs.BrushElementConfig,\n        DefaultConfigs.LayerStyleElementConfig,\n        DefaultConfigs.AnimationElementConfig,\n        DefaultConfigs.ParagraphStyleElementConfig,\n        DefaultConfigs.PatternElementConfig,\n        DefaultConfigs.LightElementConfig,\n        DefaultConfigs.LookElementConfig,\n        DefaultConfigs.MaterialElementConfig,\n        DefaultConfigs.ThreeDElementConfig,\n        DefaultConfigs.TemplateElementConfig,\n        DefaultConfigs.TextElementConfig,\n        DefaultConfigs.GradientElementConfig,\n        DefaultConfigs.ComponentElementConfig,\n        DefaultConfigs.AudioElementConfig,\n        DefaultConfigs.ChannelElementConfig,\n        DefaultConfigs.ImageGuidelineElementConfig,\n        DefaultConfigs.UnsupportedElementConfig\n    ];\n\n    // This specifies whether or not the + icon in the footer that shows add controls should be hidden.\n    this.config.hideAddControls = true;\n\n    //This global array holds the current selection data to remove listensers on next selectionchange\n    let gSelectedElements = [];\n\n    function sendRenditionDataToBridge(selectedElement) {\n        const BRIDGE_DESIRED_THUMBNAIL_SIZE = 256;\n        const BRIDGE_DESIRED_PREVIEW_SIZE = 1024;\n\n        if (selectedElement.type === configuration.COLOR_ELEMENT_TYPE) { // Color element\n            const rgbValue = colorUtils.getBackgroundColor(selectedElement);\n            environment.execApp('setColorValues', [ selectedElement.getLegacyReference(),\n                [ rgbValue ]\n            ]);\n        } else if (selectedElement.type === configuration.COLOR_THEME_ELEMENT_TYPE) { // Color theme element\n            const colorThemeData = selectedElement.representations[0] && selectedElement.representations[0].getValue('colortheme', 'data');\n            const rgbValues = colorThemeData && colorThemeData.swatches.map((swatch) => {\n                return colorUtils.getSwatchBackgroundColor(swatch);\n            });\n            environment.execApp('setColorValues', [ selectedElement.getLegacyReference(), rgbValues ]);\n        } else { // Other element types\n            // To get the thumbnail path showed in the Panel\n            elementConfiguration.getLocalThumbnailURL(selectedElement).then((path) => {\n                //Sending rendition data to Bridge\n                environment.execApp('setRenditionPath', [ selectedElement.getLegacyReference(),\n                    BRIDGE_DESIRED_THUMBNAIL_SIZE,\n                    path\n                ]);\n            }).catch(() => {\n                // Handle exception if required\n            });\n\n            selectedElement.getThumbnailPath(BRIDGE_DESIRED_PREVIEW_SIZE).then((path) => {\n                //Sending rendition data to Bridge\n                environment.execApp('setRenditionPath', [ selectedElement.getLegacyReference(),\n                    BRIDGE_DESIRED_PREVIEW_SIZE,\n                    path\n                ]);\n            }).catch(() => {\n                // Handle exception if required\n            });\n        }\n    }\n    function sendCurrentSelectionToBridge() {\n        // Getting current state of selection to redraw preview panel in Bridge\n        const selectedItems = elementSelectionState.selection;\n        const selectionData = [];\n        if (!selectedItems || selectedItems.length === 0) {\n            // Sending empty array to Bridge to clear the previews\n            environment.execApp('setSelectionData', [ selectedItems.length, selectionData ]);\n        } else {\n            //We need only 9 elements' selection data to set selection count Bridge.\n            for (let i = 0; i < selectedItems.length && i < 9; i++) {\n            // Data to send to Bridge for this element\n                const data = {\n                    id: selectedItems[i].getLegacyReference(),\n                    name: selectedItems[i].name,\n                    type: selectedItems[i].type\n                };\n                selectionData.push(data);\n            }\n            //Sending selection data to Bridge\n            environment.execApp('setSelectionData', [ selectedItems.length, selectionData ]);\n            //We need to generate only 9 renditions becuase Bridge doesn't preview more than 9 assets\n            for (let i = 0; i < selectedItems.length && i < 9; i++) {\n                const selectedElement = selectedItems[i];\n                sendRenditionDataToBridge(selectedElement);\n            }\n        }\n    }\n    this.init = function() {\n\n        // enabling graphics\n        FileUtils.extendUsableTypes(configuration.IMAGE_ELEMENT_TYPE, [\n            'image/png',\n            'image/jpeg',\n            'image/jpg',\n            'image/gif',\n            'image/tiff',\n            'image/bmp',\n            'image/svg+xml',\n            'image/vnd.adobe.shape+svg',\n            'application/photoshop',\n            'application/photoshop.large',\n            'image/vnd.adobe.photoshop',\n            'application/vnd.adobe.indesign-idms',\n            'application/illustrator',\n            'application/pdf',\n            'application/vnd.adobe.muse-collection',\n            'application/vnd.adobe.charts+zip'\n        ]);\n\n        // enabling videos\n        FileUtils.extendUsableTypes(configuration.VIDEO_ELEMENT_TYPE, [\n            'video/mp4',\n            'video/quicktime',\n            'image/png'\n        ]);\n\n        // enabling character style\n        FileUtils.extendUsableTypes(configuration.CHARACTER_STYLE_ELEMENT_TYPE, [\n            'application/vnd.adobe.characterstyle+json',\n            'application/vnd.adobe.indesign-idms',\n            'image/png'\n        ]);\n\n        // enabling color element\n        FileUtils.extendUsableTypes(configuration.COLOR_ELEMENT_TYPE, [ 'application/vnd.adobe.color+json' ]);\n\n        // enabling color themes\n        FileUtils.extendUsableTypes(configuration.COLOR_THEME_ELEMENT_TYPE, [ 'application/vnd.adobe.colortheme+json' ]);\n\n        // enabling brush\n        FileUtils.extendUsableTypes(configuration.BRUSH_ELEMENT_TYPE, [\n            'application/vnd.adobe.vector.brush+zip',\n            'application/vnd.adobe.scatter.brush+zip',\n            'application/vnd.adobe.ribbon.brush+zip',\n            'image/x-adobe-photoshop-brush',\n            'image/svg+xml',\n            'image/png'\n        ]);\n\n        // enabling layers\n        FileUtils.extendUsableTypes(configuration.LAYER_STYLE_ELEMENT_TYPE, [\n            'application/vnd.adobe.layerstyle',\n            'image/png'\n        ]);\n\n        // enabling paragraph style\n        FileUtils.extendUsableTypes(configuration.PARAGRAPH_STYLE_ELEMENT_TYPE, [\n            'application/vnd.adobe.paragraphstyle+json',\n            'application/vnd.adobe.paragraphstyle+snippet',\n            'application/vnd.adobe.indesign-idms',\n            'image/png'\n        ]);\n\n        // enabling look element\n        FileUtils.extendUsableTypes(configuration.LOOK_ELEMENT_TYPE, [\n            'application/vnd.adobe.candy+jpg',\n            'application/vnd.adobe.look+xml',\n            'application/vnd.adobe.cube+txt',\n            'image/jpg'\n        ]);\n\n        // enabling capsule(motion graphic template) element\n        FileUtils.extendUsableTypes(configuration.CAPSULE_ELEMENT_TYPE, [\n            'application/vnd.adobe.ppro.graphic+zip',\n            'application/vnd.adobe.ae.graphic+zip',\n            'image/png',\n            'application/vnd.adobe.graphic+json',\n            'image/gif',\n            'video/mp4'\n        ]);\n\n        // enabling pattern element\n        FileUtils.extendUsableTypes(configuration.PATTERN_ELEMENT_TYPE, [\n            'image/vnd.adobe.pattern+png',\n            'image/jpeg'\n        ]);\n\n        // enabling template element\n        FileUtils.extendUsableTypes(configuration.TEMPLATE_ELEMENT_TYPE, [\n            'application/illustrator.template',\n            'image/vnd.adobe.photoshop.template',\n            'application/vnd.adobe.indesign.template',\n            'image/png'\n        ]);\n\n        // enabling text element\n        FileUtils.extendUsableTypes(configuration.TEXT_ELEMENT_TYPE, [\n            'application/vnd.adobe.text+json', 'application/vnd.adobe.indesign-idms-text',\n            'image/png'\n        ]);\n\n        // enabling animation element\n        FileUtils.extendEditableTypes(configuration.ANIMATION_ELEMENT_TYPE, [\n            'application/vnd.adobe.animate-xfl+zip',\n            'application/vnd.adobe.animate-sym+zip',\n            'image/png',\n            'image/jpeg',\n            'image/gif'\n        ]);\n\n        // enabling 3D element\n        FileUtils.extendUsableTypes(configuration.THREE_D_ELEMENT_TYPE, [\n            'image/vnd.adobe.photoshop',\n            'application/vnd.adobe.obj.3d+zip',\n            'image/jpeg'\n        ]);\n\n        // enabling light element\n        FileUtils.extendUsableTypes(configuration.LIGHT_ELEMENT_TYPE, [\n            'application/vnd.adobe.ibl.light+zip',\n            'image/jpeg'\n        ]);\n\n        // enabling material element\n        FileUtils.extendUsableTypes(configuration.MATERIAL_ELEMENT_TYPE, [\n            'application/vnd.adobe.mdl.material+zip',\n            'image/jpeg'\n        ]);\n\n        // enabling component element\n        FileUtils.extendUsableTypes(configuration.COMPONENT_ELEMENT_TYPE, [\n            'image/svg+xml',\n            'image/png'\n        ]);\n\n        // enabling gradient element\n        FileUtils.extendUsableTypes(configuration.GRADIENT_ELEMENT_TYPE, [\n            'application/vnd.adobe.gradient+json'\n        ]);\n\n        // This determines the tooltip-enablement state. You need to implement getTooltipState in jsx/main.jsx\n        environment.execApp('getTooltipState').then(function(tooltipState) {\n            configuration.showTooltips = tooltipState;\n        });\n\n        this.startEventListener();\n\n        // Attach a selection listener so that Bridge can be notified when the selection is changed.\n        elementSelectionState.addSelectionChangedListener(function() {\n            const selectedItems = elementSelectionState.selection;\n\n            // Clearing the global array\n            gSelectedElements.forEach(dispose => dispose());\n            gSelectedElements = [];\n            if (selectedItems.length > 0) {\n                //Clearning selection in content panel of Bridge\n                environment.execApp('clearSelectionInContentPanel');\n            }\n            sendCurrentSelectionToBridge();\n            for (let i = 0; i < selectedItems.length && i < 9; i++) {\n                gSelectedElements.push(reaction(() => selectedItems[i], element => {\n                    //Sending rendition data to Bridge\n                    environment.execApp('updateSelectionData', [ element.getLegacyReference(), element.name ]);\n                    sendRenditionDataToBridge(element);\n                }));\n            }\n        });\n    };\n\n    this.reportEvent = function(/*eventName, properties*/) {\n        // TODO: Implement this if you want to be notified of analytics events, so you can report them in your\n        // own product's analytics (e.g. Headlights) - this is in addition to, and not a replacement of, the\n        // analytics sent by the panel to Adobe Analytics.\n    };\n\n    this.fontManager = new ApplicationFontManager();\n    const onFontListUpdateEvent = () => this.fontManager.invalidateFontList();\n\n    // Something other than Libraries Panel is selected in Bridge, therefore clear the selection.\n    const onClearSelection = () => elementSelectionState.clearSelection();\n\n    const onGetCurrentSelection = () => sendCurrentSelectionToBridge();\n\n    this.startEventListener = function() {\n        environment.addEventListener('fontListChanged', onFontListUpdateEvent);\n        environment.addEventListener('clearSelection', onClearSelection);\n        environment.addEventListener('getCurrentSelection', onGetCurrentSelection);\n    };\n\n    this.stopEventListener = function() {\n        environment.removeEventListener('fontListChanged', onFontListUpdateEvent);\n        environment.removeEventListener('clearSelection', onClearSelection);\n        environment.removeEventListener('getCurrentSelection', onGetCurrentSelection);\n    };\n\n    // TODO: Refactor the above to return an object, rather than using this\n    return this;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2015 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport { checkLibraryWritable, createElementExtraMetrics } from 'app/js/utils/libraryUtils';\n\nfunction detype(descriptor) {\n    return descriptor._obj;\n}\n\n// Format of color param comes from PSColor::GetDescriptor() in Photoshop,\n// BUT that descriptor has to be pushed as an object into another\n// descriptor before being converted to JSON to ensure we get the type.\nexport function transformPSColorToLibraryColor(color) {\n    const result = {\n        type: 'process',\n        profileName: color.profileName || configuration.DEFAULT_SRGB_PROFILE\n    };\n\n    const type = detype(color);\n\n    switch (type) {\n    case 'CMYKColorClass':\n        result.mode = 'CMYK';\n        result.value = {\n            c: color.cyan,\n            m: color.magenta,\n            y: color.yellowColor,\n            k: color.black\n        };\n        break;\n    case 'RGBColor':\n        result.mode = 'RGB';\n        result.value = {\n            r: color.red,\n            g: color.grain, // key typo\n            b: color.blue\n        };\n        break;\n    case 'HSBColorClass':\n        result.mode = 'HSB';\n        result.value = {\n            h: color.hue._value,\n            s: color.saturation,\n            b: color.brightness\n        };\n        break;\n    case 'labColor':\n        result.mode = 'Lab';\n        result.value = {\n            l: color.luminance,\n            a: color.a,\n            b: color.b\n        };\n        break;\n    case 'grayscale':\n        result.mode = 'Gray';\n        result.value = color.gray;\n        break;\n    default:\n        result.mode = type;\n        result.value = color;\n    }\n\n    return result;\n}\n\nconst COLOR_REPRESENTATION_TYPE = 'application/vnd.adobe.color+json';\n\n/*\nsecondary rep should be provided if primary rep is not in RGB form.\n*/\nexport function addPSColor(name, primaryRepresentation, secondaryRepresentation, opType, library) {\n    name = name || '';\n    library = library || libraryManager.getDefaultLibrary();\n\n    if (!library) {\n        return Promise.reject('Could not add color: No library');\n    }\n\n    if (!checkLibraryWritable(library)) {\n        return Promise.reject('Could not add color: Library not writable');\n    }\n\n    const newElement = createElementExtraMetrics(library, name, configuration.COLOR_ELEMENT_TYPE, { opType });\n\n    if (primaryRepresentation) {\n        newElement\n            .createRepresentation(COLOR_REPRESENTATION_TYPE, 'primary')\n            .setValue('color', 'data', transformPSColorToLibraryColor(primaryRepresentation));\n    }\n\n    if (secondaryRepresentation) {\n        newElement\n            .createRepresentation(COLOR_REPRESENTATION_TYPE, 'rendition')\n            .setValue('color', 'data', transformPSColorToLibraryColor(secondaryRepresentation));\n    }\n\n    newElement.endOperation();\n\n    // Show the addition if in library view\n    if (libraryManager.currentLibrary === library) {\n        elementSelectionState.revealElement(newElement);\n    }\n\n    return Promise.resolve(newElement);\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport { checkLibraryWritable, createElementExtraMetrics } from 'app/js/utils/libraryUtils';\n\nexport function addPSGradient(name = '', gradientData, opType, library) {\n\n    if (!gradientData) {\n        return Promise.reject('Could not add gradient: No gradient information provided');\n    }\n\n    library = library || libraryManager.getDefaultLibrary();\n\n    if (!checkLibraryWritable(library)) {\n        return Promise.reject('Could not add gradient: Library not writable');\n    }\n\n    if (gradientData.angle === undefined) {\n        // Default Photoshop gradient angle is 90 degrees, not 0\n        gradientData.angle = 90;\n    }\n\n    const newElement = createElementExtraMetrics(library, name, configuration.GRADIENT_ELEMENT_TYPE, { opType });\n\n    newElement\n        .createRepresentation(configuration.GRADIENT_REPRESENTATION_TYPE, 'primary')\n        .setValue(configuration.GRADIENT_NAMESPACE, configuration.GRADIENT_DATA_KEY, gradientData);\n\n    newElement.endOperation();\n\n    // Show the addition if in library view\n    if (libraryManager.currentLibrary === library) {\n        elementSelectionState.revealElement(newElement);\n    }\n\n    return Promise.resolve(newElement);\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport environment from 'app/js/environment';\nimport { checkFileSize } from 'app/js/utils/libraryUtils';\nimport { addBrushElement, addLayerStyleElement, addGraphicElement } from 'app/js/utils/addElementUtils';\nimport { transformPSColorToLibraryColor, addPSColor } from './colorUtils';\nimport { addPSGradient } from './gradientUtils';\nimport { addPSCharacterStyleWithDescID } from './textUtils';\n\nconst getElementProperties = element => {\n    if (!element) {\n        return {};\n    }\n\n    const matches = element.type && element.type.match(/application\\/vnd\\.adobe\\.element\\.(.*)\\+dcx/);\n    const elementType = (matches && matches.length === 2) ? matches[1] : element.type;\n    const properties = { elementID: element.id, elementType };\n\n    const library = element.library;\n\n    if (library) {\n        properties.libraryID = library.id;\n        properties.libraryElementCount = library.elements.length;\n\n        if (library.collaboration) {\n            properties.libraryShared = library.collaboration;\n        }\n    }\n\n    return properties;\n};\n\nconst doHighbeam = (eventName, properties) => {\n    // The intent of doHighbeam is to ship event details to Photoshop to\n    // have them logged via Highbeam (Headlights). Since these events\n    // originate in the Photoshop layer of the Libraries panel, we want\n    // to log them unpredicated, and hence have added a `force`\n    // parameter which is `true` here.\n    if (configuration.currentProduct.reportEvent) {\n        configuration.currentProduct.reportEvent(eventName, properties, true);\n    } else {\n        console.error('Highbeam analytics not available.');\n    }\n};\n\n/*\nFormat of brush is based on what PS sends to the panel,\ne.g.:\n\n{\n    assetType: \"brush\",\n    name:  \"<name>\",\n    abrPath: \"<path to PNG abr file>\"\n    pngPath: \"<path to PNG preview file>\"\n}\n\nThe brush name and sometimes sizeless need to get incorporated in the ABR file.\n*/\nconst onPushBrush = brushInfo => {\n    const data = brushInfo.brushOptions || {};\n    const representationData = Object.keys(data).map(key => {\n        const value = key === 'color' ? transformPSColorToLibraryColor(data[key]) : data[key];\n        return { namespace: 'photoshop', key, value };\n    });\n    const brushPrimaryRep = {\n        path: brushInfo.abrPath,\n        data: representationData\n    };\n    addBrushElement(brushInfo.name, brushPrimaryRep, brushInfo.pngPath, libraryManager.getDefaultLibrary(), brushInfo.opType)\n        .then(element => elementSelectionState.revealElement(element));\n};\n\n/*\nFormat of layerStyle is based on what PS sends to the panel,\ne.g.:\n\n{\n    assetType: \"layerStyle\",\n    name: \"<name>\",\n    aslPath: \"<path to asl file>\"\n    pngPath: \"<path to PNG preview file>\"\n}\n*/\nconst onPushLayerStyle = layerStyle => {\n    const stylePrimaryRep = {};\n    stylePrimaryRep.path = layerStyle.aslPath;\n    return addLayerStyleElement(layerStyle.name, stylePrimaryRep, layerStyle.pngPath, libraryManager.getDefaultLibrary(), layerStyle.opType).then(function(element) {\n        elementSelectionState.revealElement(element);\n    });\n};\n\n/*\nFormat of characterStyle is based on what PS sends to the panel,\ne.g.:\n\n{\n    assetType: \"characterStyle\",\n    name: \"<name>\",\n    descriptorID: <ID of descriptor w/ style info>\n    previewPath: \"<path to PNG preview file>\"\n}\n*/\nconst onPushCharacterStyle = psCharStyleInfo => {\n    return addPSCharacterStyleWithDescID(psCharStyleInfo.name, psCharStyleInfo.descriptorID, psCharStyleInfo.previewPath, psCharStyleInfo.opType)\n        .then(element => elementSelectionState.revealElement(element));\n};\n\n/*\nFormat of psColorInfo is based on what PS sends to the panel,\ne.g.:\n\n{\n    assetType: \"color\",\n    name: \"<name>\",\n    primary: { <color data from PSColor::GetDescriptor()> }\n    secondary: {\n        _obj: <color space>\n        blue: <value>,\n        grain: <value>,\n        red: <value>\n    }\n}\n\n\"secondary\" only appears if \"primary\" is not in RGB form.\nYes it's actually grain, not green.\n*/\nconst onPushColor = psColorInfo => {\n    return addPSColor(psColorInfo.name, psColorInfo.primary, psColorInfo.secondary, psColorInfo.opType);\n};\n\n/*\nFormat of psGradientInfo is based on what PS sends to the panel,\ne.g.:\n\n{\n    assetType: \"gradient\",\n    name: \"<name>\",\n    primary: { <gradient data from TCustomGradient::WriteDescriptorForLibraries> }\n}\n\n*/\nconst onPushGradient = psGradientInfo => {\n    return addPSGradient(psGradientInfo.name, psGradientInfo.primary, psGradientInfo.opType);\n};\n\nconst onPushGraphic = (parameters, eventMetadata) => {\n\n    const assetPath = parameters.assetPath;\n\n    // Prevent adding to library, if the asset is too big.\n    // Do this before we get/create the library.\n    if (!checkFileSize(assetPath, !parameters.moveFile)) {\n        return Promise.reject('Could not create element: one or more files exceed 1GB limit');\n    }\n\n    // Put together the param object that addGraphicElement expects\n    const file = { path: assetPath,\n        relationship: 'primary',\n        dimensions: { width: parameters.exportInfo.pixelWidth,\n            height: parameters.exportInfo.pixelHeight } };\n\n    const appMetadata = {};\n    appMetadata.layerIds = parameters.exportInfo.layerIDs;\n    appMetadata.documentId = parameters.exportInfo.documentID;\n    appMetadata.pushEventMetadata = eventMetadata;\n\n    // Work around CEP JSON bug which turns numbers into strings\n    file.dimensions.width = Number(file.dimensions.width);\n    file.dimensions.height = Number(file.dimensions.height);\n    appMetadata.documentId = Number(appMetadata.documentId);\n\n    if (typeof appMetadata.layerIds === 'string') {\n        appMetadata.layerIds = JSON.parse(appMetadata.layerIds);\n    }\n\n    // Show the addition\n    return addGraphicElement(parameters.name, [ file ], parameters.previewPath, libraryManager.getDefaultLibrary(), parameters.opType, appMetadata)\n        .then(element => elementSelectionState.revealElement(element));\n};\n\n// type is the class of the top-level TActionDescriptor\nconst PUSH_ASSET_HANDLERS = [\n    {\n        type: 'brush',\n        callback: onPushBrush\n    },\n    {\n        type: 'characterStyle',\n        callback: onPushCharacterStyle\n    },\n    {\n        type: 'color',\n        callback: onPushColor\n    },\n    {\n        type: 'layerStyle',\n        callback: onPushLayerStyle\n    },\n    {\n        type: 'graphic',\n        callback: onPushGraphic\n    },\n    {\n        type: 'gradient',\n        callback: onPushGradient\n    }\n];\n\nexport function pushAssetToLibrary(parameters) {\n    const metadata = parameters.event_metadata;\n\n    const respond = function(response) {\n        const event = environment.createEvent('pushAssetToLibraryResponse', 'APPLICATION');\n\n        const result = {\n            appMetadata: { pushEventMetadata: metadata },\n            response\n        };\n\n        event.data = JSON.stringify(result);\n        environment.dispatchEvent(event);\n    };\n\n    const handleOK = element => {\n        respond({ status: 'ok' });\n        doHighbeam('pushAssetToLibrary', getElementProperties(element));\n    };\n    const handleError = error => respond({ status: 'error', details: error });\n\n    if (!parameters || !metadata) {\n        return Promise.reject('pushAssetToLibrary failed: parameter error');\n    }\n\n    const type = parameters.assetType;\n\n    if (!type) {\n        return Promise.reject('pushAssetToLibrary failed: asset type not defined');\n    }\n\n    // Filter out handlers that weren't triggered\n    const toCall = PUSH_ASSET_HANDLERS.filter(handler => type === handler.type);\n    if (toCall.length === 0) {\n        return Promise.reject('pushAssetToLibrary failed: No asset handler found for ' + type);\n    }\n\n    return Promise.all(toCall.map(handler => handler.callback(parameters, metadata).then(handleOK, handleError)));\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2015 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport environment from 'app/js/environment';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { checkLibraryWritable, createElementExtraMetrics } from 'app/js/utils/libraryUtils';\n\nexport function addPSCharacterStyleWithDescID(name, descriptorID, previewPath, opType) {\n    name = name || '';\n\n    return environment.execApp('makeTextItemObjectJSONFromPushDescID', [ descriptorID ]).then(textItemJSON => {\n        const textItem = JSON.parse(textItemJSON || '');\n        let library, newElement;\n\n        try {\n            if (!textItem) {\n                throw 'makeTextItemObjectJSONFromPushDescID returned false';\n            }\n\n            library = libraryManager.getDefaultLibrary();\n\n            if (!library) {\n                throw 'No library';\n            }\n\n            if (!checkLibraryWritable(library)) {\n                return;\n            }\n\n            // SHOULDN'T THESE BE DEFINED SOMEWHERE COMMON (app agonstic)?\n            const CHAR_STYLE_REPRESENTATION_JSON_TYPE = 'application/vnd.adobe.characterstyle+json';\n            const STYLE_NAMESPACE = 'characterstyle';\n            const STYLE_DATA_KEY = 'data';\n\n            newElement = createElementExtraMetrics(library, name, configuration.CHARACTER_STYLE_ELEMENT_TYPE, {\n                opType\n            });\n\n            if (textItem) {\n                newElement\n                    .createRepresentation(CHAR_STYLE_REPRESENTATION_JSON_TYPE, 'primary')\n                    .setValue(STYLE_NAMESPACE,\n                        STYLE_DATA_KEY,\n                        textItem);\n            }\n\n            const updatePromises = [];\n\n            if (previewPath) {\n                const newRendition = newElement.createRepresentation('image/png', 'rendition');\n                const addRenditionPromise = newRendition.setContentFromPath(previewPath);\n                //.then(function () {\n                // TODO: these might not be the correct dimensions\n                // newRendition.width = RENDITION_SIZE;\n                // newRendition.height = RENDITION_SIZE;\n                //});\n                updatePromises.push(addRenditionPromise);\n            }\n\n            return Promise.all(updatePromises).then(function() {\n                const cleanupPromises = [];\n\n                if (previewPath) {\n                    cleanupPromises.push(newElement.setThumbnailCache(configuration.CHARACTER_STYLE_THUMBNAIL_SIZE, previewPath));\n                }\n\n                cleanupPromises.push(newElement.endOperation());\n\n                Promise.all(cleanupPromises).then(() => {\n                    if (previewPath) {\n                        FileUtils.deleteFile(previewPath);\n                    }\n                });\n\n                return newElement;\n\n            }, function() {\n                library.removeElement(newElement, true);\n                return Promise.reject('Could not create element.');\n            });\n\n        } catch (error) {\n            if (library && newElement) {\n                library.removeElement(newElement, true);\n            }\n            return Promise.reject('Could not add character style: ' + error);\n        }\n    }, error => Promise.reject('Could not makeTextItemObjectJSONFromPushDescID: ' + error));\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport debugLog from 'app/js/utils/debugLog';\nimport { pushAssetToLibrary } from './push';\n\n// TODO: Since this has state, it should be converted to a class.\n\nlet lastDocID;\n\nconst onDocInfoChangedEvent = psEventData => {\n    layerSelectionManager.handleSelectionChange();\n\n    if (psEventData.documentID !== lastDocID) {\n        configuration.currentProduct.handleActiveDocChanged(psEventData.documentID);\n        lastDocID = psEventData.documentID;\n    }\n    return false;\n};\n\nconst onForegroundColorChangedEvent = () => {\n    layerSelectionManager.handleSelectionChange();\n    return false;\n};\n\n// Looks are only enabled for RGB docs, so have to detect mode changes.\nconst onConvertModeEvent = () => {\n    layerSelectionManager.handleSelectionChange();\n    return false;\n};\n\nconst onFontListChanged = () => {\n    environment.execApp('refreshFonts').then(function() {\n        configuration.currentProduct.fontManager.invalidateFontList();\n    });\n    return false;\n};\n\nconst onPreferenceChanged = () => {\n    environment.execApp('getTooltipState').then(function(tooltipState) {\n        configuration.showTooltips = tooltipState;\n    });\n};\n\n// Why not just look all ids up dynamically?\nconst PS_EVENTS = [\n    {\n        id: '1684816969',\n        name: 'dlDocInfoChanged',\n        callback: onDocInfoChangedEvent,\n        dynamic: false\n    },\n    {\n        id: null,\n        name: 'foregroundColorChanged',\n        callback: onForegroundColorChangedEvent,\n        dynamic: true\n    },\n    {\n        id: null,\n        name: 'fontListChanged',\n        callback: onFontListChanged,\n        dynamic: true\n    },\n    {\n        id: null,\n        name: 'convertMode',\n        callback: onConvertModeEvent,\n        dynamic: true\n    },\n    {\n        id: null,\n        name: 'preferencesChanged',\n        callback: onPreferenceChanged,\n        dynamic: true\n    }\n];\n\nlet psEventDataString = '';\n\nconst handlePushAssetToLibrary = csEvent => {\n    if (!csEvent || !csEvent.data) {\n        return;\n    }\n\n    pushAssetToLibrary(csEvent.data);\n};\n\nconst handlePSEvent = csEvent => {\n    if (!csEvent) {\n        return;\n    }\n    // Event data is JSON, but preceded with \"ver1,\" that must be removed\n    // before it can be parsed.\n    let csEventData = {};\n    const firstOpenBrace = csEvent.data.indexOf('{');\n\n    if (firstOpenBrace !== -1) {\n        const parsableCSEventData = csEvent.data.substr(firstOpenBrace);\n        csEventData = JSON.parse(parsableCSEventData);\n    }\n\n    // item.id is a String so get the event id as a string for comparison\n    const strEventID = String(csEventData.eventID);\n\n    const matchingEventHandlerInfo = PS_EVENTS.filter(function(item) {\n        return strEventID === item.id;\n    });\n\n    if (matchingEventHandlerInfo.length === 1) {\n        matchingEventHandlerInfo[0].callback(csEventData.eventData);\n    } else {\n        debugLog.log('Expected exactly one handler per event id: ' + strEventID);\n    }\n};\n\nexport function listen() {\n    const names = PS_EVENTS.reduce(function(prev, next) {\n        if (next.dynamic) {\n            prev.push(next.name);\n        }\n        return prev;\n    }, []);\n\n    // register and listen for PS scripting events defined in PS_EVENTS\n    environment.exec('PHXS', 'getStringID', [ names ]).then(function(value) {\n        const eventIDs = value.split(',');\n        let index = 0;\n        //Store the event ids we retrieved\n        PS_EVENTS.forEach(function(ev) {\n            if (ev.dynamic) {\n                ev.id = eventIDs[index];\n                index++;\n            }\n        });\n        psEventDataString = PS_EVENTS.map(item => item.id).join(',');\n        const event = environment.createEvent('com.adobe.PhotoshopRegisterEvent', 'APPLICATION');\n        event.data = psEventDataString;\n        environment.dispatchEvent(event);\n        environment.addEventListener('com.adobe.PhotoshopJSONCallback' + configuration.EXTENSION_ID, handlePSEvent);\n\n        // This needs to be sent after all event registration is done becasue it indicates to PS\n        // that the panel is ready to handle requests. We put it in waitForInitialLoad to ensure\n        // that the panel is fully loaded as well.\n        libraryManager.waitForInitialLoad().then(() => {\n            const readyEvent = environment.createEvent('com.adobe.DesignLibraries.events.READY', 'APPLICATION');\n            environment.dispatchEvent(readyEvent);\n        });\n    });\n\n    // listen for other CEP events\n    environment.addEventListener('pushAssetToLibrary', handlePushAssetToLibrary);\n\n    // Load the preferences on launch\n    onPreferenceChanged();\n}\n\nexport function stop() {\n    const event = environment.createEvent('com.adobe.PhotoshopUnRegisterEvent', 'APPLICATION');\n    event.data = psEventDataString;\n    environment.dispatchEvent(event);\n    environment.removeEventListener('PhotoshopCallback', handlePSEvent);\n    environment.removeEventListener('pushAssetToLibrary', handlePushAssetToLibrary);\n    psEventDataString = '';\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport BrushElementConfig from 'app/js/config/elements/BrushElementConfig';\n\nexport default class PHXSBrushElementConfig extends BrushElementConfig {\n\n    _addBrushToDocument(element, representation) {\n        reportApplyMetric(representation, 'useBrush');\n\n        return representation.getContentPath().then(function(path) {\n            const namespace = 'photoshop';\n            const brushSettings = {\n                tool: representation.getValue(namespace, 'tool'),\n                flow: representation.getValue(namespace, 'flow'),\n                opacity: representation.getValue(namespace, 'opacity'),\n                blendMode: representation.getValue(namespace, 'blendMode'),\n                color: representation.getValue(namespace, 'color')\n            };\n\n            return environment.execApp('loadAndSelectBrush', [ path, element.name, brushSettings ]);\n        });\n    }\n\n    getApplyOperations(element) {\n        const brushTypes = FileUtils.getUsableTypes(element.type);\n        const representation = element.representations.find(rep => {\n            const isRendition = rep.relationship === 'rendition';\n            const isBrush = this._config.isRepresentationCompatible(rep, brushTypes);\n\n            return !isRendition && isBrush;\n        });\n\n        if (!representation) {\n            return [];\n        }\n\n        return [ {\n            name: 'DL_ADD_BRUSH_TO_DOC',\n            icon: 'brush',\n            onClick: true,\n            apply: () => this._addBrushToDocument(element, representation),\n            displayInMenu: true\n        } ];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport ColorElementConfig from 'app/js/config/elements/ColorElementConfig';\n\nexport default class PHXSColorElementConfig extends ColorElementConfig {\n\n    // The colorData parameter is so that we can use this code for color themes too\n    // TODO: Is after used anywhere?\n    _setColor(element, operation, historyName, colorData, after) {\n\n        if (!colorData) {\n            colorData = [];\n            // JSX expects primary representation to be the first element in the array\n            element.representations.forEach(rep => {\n                const data = rep.getValue(configuration.COLOR_NAMESPACE, configuration.COLOR_DATA_KEY);\n                if (rep.relationship === 'primary') {\n                    colorData.unshift(data);\n                } else {\n                    colorData.push(data);\n                }\n            });\n\n            if (element.representations.length > 0) {\n                reportApplyMetric(element.representations[0], operation);\n            }\n        }\n\n        if (after) {\n            after(operation);\n        }\n\n        return environment.execApp(operation, [ colorData, historyName ]);\n    }\n\n    getApplyOperations(element) {\n\n        const layerInfo = layerSelectionManager.getLayerInfo();\n        const setColorOperation = {\n            name: 'DL_SET_COLOR_TOOLTIP',\n            icon: 'paintbucket',\n            apply: (colorData, after) => this._setColor(element, 'setColor', translate('DL_SET_COLOR_TOOLTIP'), colorData, after),\n            displayInMenu: true\n        };\n        const operations = [];\n\n        if (layerInfo && layerInfo.selectionExists) {\n            if (layerInfo.enableShapeLayerApplyOperations) {\n                operations.push({\n                    name: 'DL_SET_FILL_COLOR_TOOLTIP',\n                    icon: 'paintbucket',\n                    apply: (colorData, after) => this._setColor(element, 'setFillColor', translate('DL_SET_FILL_COLOR_TOOLTIP'), colorData, after),\n                    displayInMenu: true\n                });\n\n                operations.push({\n                    name: 'DL_SET_STROKE_COLOR_TOOLTIP',\n                    icon: 'brush',\n                    apply: (colorData, after) => this._setColor(element, 'setStrokeColor', translate('DL_SET_STROKE_COLOR_TOOLTIP'), colorData, after),\n                    displayInMenu: true\n                });\n            } else {\n                operations.push(setColorOperation);\n            }\n\n            operations.push({\n                name: 'DL_SET_COLOR_OVERLAY_TOOLTIP',\n                icon: 'brush',\n                apply: (colorData, after) => this._setColor(element, 'setColorOverlay', translate('DL_SET_COLOR_OVERLAY_TOOLTIP'), colorData, after),\n                displayInMenu: true,\n                disableClick: true\n            });\n        } else {\n            operations.push(setColorOperation);\n        }\n\n        if (operations[0].disableClick !== true) {\n            operations[0].onClick = true;\n        }\n\n        return operations;\n    }\n\n    defaultEditOperation(element) {\n        const representation = this._config.findUsableRepresentation(element);\n        const colorData = representation && representation.getValue(configuration.COLOR_NAMESPACE, configuration.COLOR_DATA_KEY);\n\n        let colorWasChanged;\n        return environment.execApp('replaceColor', [ colorData ]).then(_colorWasChanged => {\n            colorWasChanged = JSON.parse(_colorWasChanged);\n            return environment.execApp('getLayerColor', []);\n        }).then(function(color) {\n            if (colorWasChanged) {\n                const returnedColors = JSON.parse(color);\n\n                element.beginOperation();\n                element.removeAllRepresentations();\n\n                returnedColors.forEach(function(rep, index) {\n                    const relationship = index === 0 ? 'primary' : 'rendition';\n                    const newRepresentation = element.createRepresentation(configuration.COLOR_REPRESENTATION_TYPE, relationship);\n                    newRepresentation.setValue(configuration.COLOR_NAMESPACE, configuration.COLOR_DATA_KEY, rep);\n                });\n\n                element.endOperation();\n            }\n        });\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport configuration from 'app/js/config/configuration';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport GradientElementConfig from 'app/js/config/elements/GradientElementConfig';\n\nexport default class PHXSGradientElementConfig extends GradientElementConfig {\n\n    // [CCXC-7357] Gradients created in Capture 5.2 erroneously defaulted to a smoothness value of 1\n    // which in Photoshop made smoothness appear as 0% instead of 100% in the Gradients preset panel.\n    // To fix this, we strip out the smoothness from gradients created in this older version of Capture,\n    // which are identifiable by the presence of a gradient#trackingdata field (which has since been removed) and smoothness of 1\n    _fixGradientData(representation) {\n        const data = representation.getValue(configuration.GRADIENT_NAMESPACE, configuration.GRADIENT_DATA_KEY);\n        const trackingData = representation.getValue(configuration.GRADIENT_NAMESPACE, 'trackingdata');\n        if (trackingData && data && data.smoothness === 1) {\n            delete data.smoothness;\n        }\n    }\n\n    // add new gradient to the gradients panel\n    _defineCustomGradient(element) {\n        const representation = this._config.findUsableRepresentation(element);\n        if (representation) {\n            const data = representation.getValue(configuration.GRADIENT_NAMESPACE, configuration.GRADIENT_DATA_KEY);\n\n            if (data) {\n                this._fixGradientData(representation);\n                data.name = element.name;\n                reportApplyMetric(representation, 'defineCustomGradient');\n                return environment.execApp('defineCustomGradient', [ data ]);\n            }\n        }\n    }\n\n    // apply to selection on canvas\n    _applyCustomGradient(element) {\n        const representation = this._config.findUsableRepresentation(element);\n        if (representation) {\n            const data = representation.getValue(configuration.GRADIENT_NAMESPACE, configuration.GRADIENT_DATA_KEY);\n\n            if (data) {\n                this._fixGradientData(representation);\n                data.name = element.name;\n                reportApplyMetric(representation, 'applyCustomGradient');\n                return environment.execApp('applyCustomGradient', [ data ]);\n            }\n        }\n    }\n\n    getApplyOperations(element) {\n        if (!configuration.currentProduct.config.enableGradientContextMenu || !element\n            || this.isDisabled(element)) {\n            return [];\n        }\n        // Return the array of operations.\n        return [\n            {\n                name: 'DL_ADD_GRADIENT_TO_PRESETS',\n                onClick: false,\n                apply: () => this._defineCustomGradient(element),\n                displayInMenu: true\n            },\n            {\n                name: 'DL_SET_FILL_GRADIENT_TOOLTIP',\n                onClick: true,\n                apply: () => this._applyCustomGradient(element),\n                displayInMenu: true\n            } ];\n    }\n\n    isDisabled(element) {\n        const representation = element.getPrimaryRepresentation();\n        const gradient = representation && representation.getValue('gradient', 'data');\n        return gradient && ![ 'radial', 'linear', 'noise' ].includes(gradient.type);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2015 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport environment from 'app/js/environment';\nimport productInterface from 'app/js/interface/productInterface';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport lockManager from 'app/js/managers/lockManager';\nimport { checkFileSize, setThumbnail } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport tempFileManager from 'app/js/managers/tempFileManager';\nimport documentWatchManager from 'app/js/managers/documentWatchManager';\n\nexport function primaryRepIsTemplateFormat(element) {\n    const primaryRepresentation = element.getPrimaryRepresentation();\n    if (primaryRepresentation && (primaryRepresentation.type === 'image/vnd.adobe.photoshop.template' || primaryRepresentation.type === 'application/x-adobe-libraries-psdt')) {\n        return true;\n    }\n    return false;\n}\n\nexport function editImageOr3DElement(element) {\n    // Never try to edit a graphic based on a template format\n    if (primaryRepIsTemplateFormat(element)) {\n        return false;\n    }\n\n    if (!elementConfiguration.isEditable(element)) {\n        // Returning false, so we fall back to the edit original workflow.\n        // (if edit original is disabled, this will display the old \"can't use this\" error message)\n        return false;\n    }\n\n    // At this point, we're guaranteed to have a primary representation that is of an editable type\n    const representation = element.getPrimaryRepresentation();\n\n    let assetPath;\n    let previewPath;\n    let assetClosed = false;\n    let assetSaveInProgress = false;\n    const lockId = 'documentLock_' + element.id;\n    const libraryName = element.library && element.library.name;\n\n    // Can't modify the representation directly - need to copy it\n    tempFileManager.getTempFile(representation).then(function(path) {\n        assetPath = path;\n        // Add an extra 'p' to the end of the preview filename incase the\n        // representation file turns out to also be a PNG.\n        previewPath = FileUtils.getFileNameWithoutExtension(assetPath) + 'p' + '.png';\n        return environment.execApp('openAssetForEdit', [ path, previewPath, element.getLegacyReference() ]);\n\n    }).then(fileName => {\n        // Double check that the doc is open before listening; it may have failed to open\n        // due to an error or user cancel.\n        environment.exec('CORE', 'isDocumentOpen', [ assetPath ]).then(strDocOpen => {\n            let docOpen = false;\n            if (strDocOpen !== undefined && strDocOpen !== 'undefined') {\n                docOpen = JSON.parse(strDocOpen);\n            }\n            if (!docOpen) {\n                // Cleanup for failed open.\n                tempFileManager.deleteTempFile(assetPath);\n                productInterface.elementEditCompleted(element);\n                return;\n            }\n\n            const listenerId = documentWatchManager.startListening(fileName, assetPath, event => {\n                if (event === 'closed') {\n                    lockManager.obtainLock(lockId, function() {\n                        documentWatchManager.stopListening(listenerId);\n                        assetClosed = true;\n                        if (assetSaveInProgress === false) {\n                            tempFileManager.deleteTempFile(assetPath);\n                        }\n\n                        productInterface.elementEditCompleted(element);\n\n                        lockManager.releaseLock(lockId);\n                    });\n                } else if (event === 'saved') {\n\n                    // Prevent save from updating library, if the asset is too big\n                    if (!checkFileSize(assetPath)) {\n                        return;\n                    }\n\n                    assetSaveInProgress = true;\n\n                    // Check if the library exists - if it was deleted, switch to the current library\n                    let library = element.library, isRecovered;\n                    const isDeleted = !library || library.isDeletedLocally;\n\n                    if (isDeleted || !library.isWritable) {\n                        library = libraryManager.getRecoveryLibrary(libraryName);\n\n                        if (!library) {\n                            // There's no recovery library, so don't do anything\n                            return;\n                        }\n\n                        isRecovered = true;\n                    }\n\n                    lockManager.obtainLock(lockId, () => {\n\n                        // If the element we're editing was deleted or recovered, we recreate it as a new element, so the changes aren't lost.\n                        // Otherwise, we just remove the existing representations so we can add the new ones\n                        const stockData = AdobeStockUtils.getStockDataForElement(element);\n                        if (element.isDeletedLocally || isRecovered) {\n                            element = library.createElement(element.name, element.type);\n                        } else {\n                            element.beginOperation();\n                            element.removeAllRepresentations();\n                        }\n\n                        // Update the representation\n                        const assetMimeType = FileUtils.fileNameToMimeType(assetPath, element.type);\n                        const newRepresentation = element.createRepresentation(assetMimeType, 'primary');\n                        if (stockData) {\n                            // If this element is an adobe stock image, make sure we keep its stock image data\n                            AdobeStockUtils.setStockData(newRepresentation, stockData);\n                        }\n                        const promises = [];\n                        promises.push(newRepresentation.setContentFromPath(assetPath));\n\n                        if (previewPath && FileUtils.existsFile(previewPath)) {\n                            promises.push(setThumbnail(element, elementConfiguration.getThumbnailSize(element), previewPath));\n                        }\n\n                        // Final cleanup after saving.\n                        const done = () => {\n                            const operationsFinished = element.endOperation();\n\n                            lockManager.releaseLock(lockId);\n\n                            if (isRecovered) {\n                                elementSelectionState.revealElement(element);\n\n                                if (isDeleted) {\n                                    environment.showError(translate('DL_WARNING_RECOVERED_FROM_DELETED', { recoveryLibraryName: library.name }));\n                                } else {\n                                    environment.showError(translate('DL_WARNING_RECOVERED_FROM_READONLY', { recoveryLibraryName: library.name, originalLibraryName: libraryName }));\n                                }\n                            }\n\n                            operationsFinished.then(() => {\n                                if (assetClosed) {\n                                    tempFileManager.deleteTempFile(assetPath);\n                                } else {\n                                    tempFileManager.updateTempFile(newRepresentation, assetPath);\n                                }\n                                assetSaveInProgress = false;\n\n                                // Do this last, after the update is committed because PS could unload\n                                // the extension as soon as it receives the event (in a quit scenario)\n                                productInterface.sendElementUpdated(newRepresentation);\n                            });\n                        };\n\n                        Promise.all(promises).then(done, done);\n                    });\n                }\n            });\n        });\n    });\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric, reportApplyFullSizeMetric } from 'app/js/utils/libraryUtils';\nimport { getElementModifiedTime } from 'app/js/utils/libraryUtils';\nimport ImageElementConfig from 'app/js/config/elements/ImageElementConfig';\nimport { primaryRepIsTemplateFormat, editImageOr3DElement } from '../imageUtils';\n\nexport default class PHXSImageElementConfig extends ImageElementConfig {\n\n    _addImageToDocument(element, isLinked) {\n        const adobeStockId = AdobeStockUtils.getStockId(element);\n        const representation = this._config.findUsableRepresentation(element);\n        if (representation) {\n            reportApplyMetric(representation, 'placeAsset', isLinked);\n\n            return representation.getContentPath().then(path => {\n                return environment.execApp('placeAsset', [\n                    path,\n                    element.library.name,\n                    element.name,\n                    element.getLegacyReference(),\n                    getElementModifiedTime(element),\n                    element.created,\n                    adobeStockId,\n                    (adobeStockId ? AdobeStockUtils.isLicensed(element) : null),\n                    isLinked\n                ]);\n            });\n        }\n\n        // Fallback: use the full-size rendition if we don't have a representation we can use\n        return element.getThumbnailPath().then(function(path) {\n            reportApplyFullSizeMetric(element, 'placeAsset', isLinked);\n            return environment.execApp('placeAsset', [\n                path,\n                element.library.name,\n                element.name,\n                element.getLegacyReference(),\n                getElementModifiedTime(element),\n                element.created,\n                adobeStockId,\n                (adobeStockId ? AdobeStockUtils.isLicensed(element) : null),\n                isLinked\n            ]);\n        });\n    }\n\n    getApplyOperations(element) {\n\n        if (!layerSelectionManager.hasDocumentOpen()) {\n            return [];\n        }\n\n        // Determine if we expect Photoshop to force placing as a smart object rather than layers,\n        // and change the context menu terminology if so. This list is not exhaustive nor does it\n        // always match Photoshop behavior, but it should get it right 90% of the time.\n        let isVectorType = false;\n        const representation = this._config.findUsableRepresentation(element);\n        if (representation) {\n            const vectorTypes = [ 'application/postscript', 'application/pdf', 'application/illustrator' ];\n            if (vectorTypes.indexOf(representation.type) !== -1) {\n                isVectorType = true;\n            }\n        }\n\n        const applyOperations = [];\n\n        // Don't enable place linked for PSDT because PS won't create PSDT based smart objects.\n        if (!primaryRepIsTemplateFormat(element)) {\n            applyOperations.push({\n                name: 'DL_ADD_IMAGE_TO_DOC_AS_LINKED',\n                icon: 'download',\n                apply: () => this._addImageToDocument(element, true),\n                displayInMenu: true\n            });\n        }\n\n        applyOperations.push({\n            name: isVectorType ? 'DL_ADD_IMAGE_TO_DOC_AS_COPY' : 'DL_ADD_IMAGE_TO_DOC_AS_LAYERS',\n            icon: 'download',\n            apply: () => this._addImageToDocument(element, false),\n            displayInMenu: true\n        });\n\n        return applyOperations;\n    }\n\n    defaultEditOperation(element) {\n        return editImageOr3DElement(element);\n    }\n\n    getAddOperations(layerInfo) {\n        const addOperations = super.getAddOperations(layerInfo);\n\n        if (layerInfo && layerInfo.libraryLinked) {\n            // Filter out the add operation if the layer is already a linked library element\n            return addOperations.filter(op => op.name !== 'DL_ADD_IMAGE_NAME' && op.name !== 'DL_CAPTURE');\n        }\n        return addOperations;\n    }\n\n    isDisabled(element) {\n        return !this._config.findUsableRepresentation(element) && !element.getCachedThumbnailPath();\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { createElementExtraMetrics } from 'app/js/utils/libraryUtils';\nimport LayerStyleElementConfig from 'app/js/config/elements/LayerStyleElementConfig';\nimport debugLog from 'app/js/utils/debugLog';\n\nexport default class PHXSLayerStyleElementConfig extends LayerStyleElementConfig {\n\n    _applyLayerStyle(element) {\n        const representation = this._config.findUsableRepresentation(element);\n\n        if (representation) {\n            reportApplyMetric(representation, 'applyLayerStyle');\n            return representation.getContentPath().then(path => environment.execApp('applyLayerStyle', [ path ]));\n        }\n    }\n\n    getApplyOperations(element) {\n        const layerInfo = layerSelectionManager.getLayerInfo();\n\n        // If we have no document there is no way to use a layerstyle\n        if (!layerInfo || (layerInfo && !layerInfo.enableApplyStyle)) {\n            return [];\n        }\n\n        return [ {\n            name: 'DL_APPLY_LAYER_STYLE',\n            icon: 'layerstyle',\n            onClick: true,\n            apply: () => this._applyLayerStyle(element),\n            displayInMenu: true\n        } ];\n    }\n\n    _addLayerStyle(strPathObject, library, opType) {\n        const pathObject = JSON.parse(strPathObject) || {};\n        const name = pathObject.layerName || '';\n\n        const newElement = createElementExtraMetrics(library, name, configuration.LAYER_STYLE_ELEMENT_TYPE, {\n            opType\n        });\n\n        const updatePromises = [];\n        const filePaths = pathObject.files || [];\n\n        filePaths.forEach((filePath, index) => {\n            const fileMimeType = FileUtils.fileNameToMimeType(filePath, configuration.LAYER_STYLE_ELEMENT_TYPE);\n            if (fileMimeType) {\n                const relationship = index === 0 ? 'primary' : 'alternate';\n                const newRepresentation = newElement.createRepresentation(fileMimeType, relationship);\n\n                const updatePromise = newRepresentation.setContentFromPath(filePath);\n                updatePromises.push(updatePromise);\n            } else {\n                debugLog.log(\"Could not create representation: path cannot end with '.': \" + filePath);\n            }\n        });\n\n        if (pathObject.rendition) {\n            const newRendition = newElement.createRepresentation('image/png', 'rendition');\n            const addRenditionPromise = newRendition.setContentFromPath(pathObject.rendition);\n            //.then(function () {\n            // newRendition.width = RENDITION_SIZE;\n            // newRendition.height = RENDITION_SIZE;\n            //});\n            updatePromises.push(addRenditionPromise);\n        }\n\n        return Promise.all(updatePromises).then(() => {\n            const cleanupPromises = [];\n\n            if (pathObject.rendition) {\n                cleanupPromises.push(newElement.setThumbnailCache(configuration.LAYER_STYLE_THUMBNAIL_SIZE, pathObject.rendition));\n            }\n\n            cleanupPromises.push(newElement.endOperation());\n\n            Promise.all(cleanupPromises).then(() => {\n                if (pathObject.rendition) {\n                    FileUtils.deleteFile(pathObject.rendition);\n                }\n\n                filePaths.forEach(filePath => FileUtils.deleteFile(filePath));\n            });\n            return newElement;\n\n        }, () => {\n            library.removeElement(newElement, true);\n            return Promise.reject('Could not create element.');\n        });\n    }\n\n    getAddOperations(layerInfo) {\n\n        if (!layerInfo || !layerInfo.hasLayerStyles) {\n            return [];\n        }\n\n        const addLayerStyle = (library, opType) => {\n            return environment.execApp('saveLayerStyle')\n                .then(strPathObject => this._addLayerStyle(strPathObject, library, opType))\n                .catch(() => Promise.reject('Could not save layer style.'));\n        };\n\n        return [ {\n            name: 'DL_ADD_LAYER_STYLE',\n            icon: 'AddLayerStyle',\n            order: 3,\n            dropSupport: false,\n            apply: addLayerStyle\n        } ];\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport LookElementConfig from 'app/js/config/elements/LookElementConfig';\n\nexport default class PHXSLookElementConfig extends LookElementConfig {\n\n    _applyLook(element) {\n        const representation = this._config.findUsableRepresentation(element);\n        if (representation) {\n            reportApplyMetric(representation, 'makeColorLookupLayerFromFile');\n            return representation.getContentPath().then(path => {\n                return environment.execApp('makeColorLookupLayerFromFile', [ path, element.name ]);\n            });\n        }\n    }\n\n    _applyLookIfRGBDoc(element, showErrorIfNotRGB) {\n        environment.execApp('frontDocIsRGB').then(frontDocIsRGBStr => {\n            if (frontDocIsRGBStr === 'true') {\n                this._applyLook(element);\n            } else if (showErrorIfNotRGB) {\n                alert(translate('DL_APPLY_LOOK_REQUIRES_RGB'));\n            }\n        });\n    }\n\n    getApplyOperations(element) {\n\n        // Work around the fact that we don't update layerInfo when document mode changes\n        // due to undo/redo, etc by always enabling the apply operation and checking the\n        // document mode before executing the apply operation. We setup two separate apply\n        // operations so that we can warn for the context menu case but not the single click\n        // case.\n        const applyLookRGBHack = true;\n\n        // Check if we can apply a Look\n        const layerInfo = layerSelectionManager.getLayerInfo();\n        if (!layerInfo || (layerInfo && !layerInfo.enableApplyLook && !applyLookRGBHack)) {\n            return [];\n        }\n\n        return [ {\n            name: 'DL_APPLY_LOOK',\n            onClick: true,\n            isDraggable: false,\n            apply: () => this._applyLookIfRGBDoc(element, false),\n            displayInMenu: false\n        }, {\n            name: 'DL_APPLY_LOOK',\n            onClick: false,\n            isDraggable: false,\n            apply: () => this._applyLookIfRGBDoc(element, true),\n            displayInMenu: true\n        } ];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2016 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport PatternElementConfig from 'app/js/config/elements/PatternElementConfig';\n\nexport default class PHXSPatternElementConfig extends PatternElementConfig {\n\n    // Here's the function to apply the current pattern element to the current document\n    _applyPatternToDocument = function(element) {\n        const representation = this._config.findUsableRepresentation(element);\n        if (representation) {\n            reportApplyMetric(representation, 'applyPattern');\n            return representation.getContentPath().then(path => {\n                return environment.execApp('makePatternLayerFromFile', [\n                    path,\n                    element.name,\n                    translate('DL_PHXS_HISTORY_ENTRY_APPLY_PATTERN')\n                ]);\n            });\n        }\n    };\n\n    // Here's the function to add the current pattern to the pattern preset list\n    _definePatternFile(element) {\n        const representation = this._config.findUsableRepresentation(element);\n        if (representation) {\n            reportApplyMetric(representation, 'definePatternPreset');\n            return representation.getContentPath().then(path => {\n                return environment.execApp('definePatternFile', [ path, element.name ]);\n            });\n        }\n    }\n\n    getApplyOperations(element) {\n        // If we have no document, or no current selection, we can't apply the pattern right now.\n        const layerInfo = layerSelectionManager.getLayerInfo();\n        if (!layerInfo || (layerInfo && !layerInfo.selectionExists)) {\n            return [];\n        }\n\n        // Return the array of operations.\n        return [ {\n            name: 'DL_APPLY_PATTERN',\n            onClick: true,\n            apply: () => this._applyPatternToDocument(element),\n            displayInMenu: true\n        },\n        {\n            name: 'DL_ADD_PATTERN_TO_PRESETS',\n            icon: 'brush',\n            onClick: false,\n            apply: () => this._definePatternFile(element),\n            displayInMenu: true\n        } ];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2016 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport TemplateElementConfig from 'app/js/config/elements/TemplateElementConfig';\n\nexport default class PHXSTemplateElementConfig extends TemplateElementConfig {\n\n    _openDocumentFromTemplate(element, representation) {\n        reportApplyMetric(representation, 'useTemplate');\n\n        return representation.getContentPath().then(path => {\n            return environment.execApp('openDocumentFromTemplate', [ path, element.name, element.getLegacyReference() ]);\n        });\n    }\n\n    getApplyOperations(element) {\n        const templateTypes = FileUtils.getUsableTypes(element.type);\n        const representation = element.representations.find(rep => {\n            const isRendition = rep.relationship === 'rendition';\n            const isTemplate = this._config.isRepresentationCompatible(rep, templateTypes);\n\n            return !isRendition && isTemplate;\n        });\n\n        let applyOperation = () => this._openDocumentFromTemplate(element, representation);\n\n        if (!representation) {\n            if (!this._config.isRepresentationCompatible(element.getPrimaryRepresentation(), templateTypes, true)) {\n                return [];\n            }\n\n            // Otherwise,\n            const errorMessage = AdobeStockUtils.getStockTemplateUseError(element);\n            applyOperation = () => environment.showError(translate(errorMessage));\n        }\n\n        return [ {\n            name: 'DL_OPEN_DOC_FROM_TEMPLATE',\n            icon: 'template',\n            onDoubleClick: true,\n            apply: applyOperation,\n            displayInMenu: true\n        } ];\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport TextStyleElementConfig from 'app/js/config/elements/TextStyleElementConfig';\nimport * as TypekitUtils from 'app/js/utils/typekitUtils';\n\nconst STYLE_NAMESPACE = 'characterstyle';\nconst STYLE_DATA_KEY = 'data';\n\nexport default class PHXSTextStyleElementConfig extends TextStyleElementConfig {\n\n    _setTextStyle = function(element) {\n\n        const representation = this._config.findUsableRepresentation(element);\n        if (representation) {\n            const font = TypekitUtils.checkTypekitFont(element);\n            if (font && font.id) {\n                reportApplyMetric(representation, 'setFont', null, { event: { value: 'typekit' } });\n            } else {\n                reportApplyMetric(representation, 'setFont');\n            }\n\n            const styleData = representation.getValue(STYLE_NAMESPACE, STYLE_DATA_KEY);\n            return environment.execApp('setFont', [ styleData, translate('DL_PHXS_HISTORY_ENTRY_SET_TEXT_STYLE') ]);\n        }\n    }\n\n    _createTextLayer(element) {\n        const representation = this._config.findUsableRepresentation(element);\n        if (representation) {\n            reportApplyMetric(representation, 'createTextLayer');\n\n            const styleData = representation.getValue(STYLE_NAMESPACE, STYLE_DATA_KEY);\n            return environment.execApp('createFontLayer', [ styleData, translate('DL_PHXS_HISTORY_ENTRY_CREATE_TEXT_LAYER') ]);\n        }\n    }\n\n    getApplyOperations(element) {\n\n        // If we have no document there is no way to use a text style\n        const layerInfo = layerSelectionManager.getLayerInfo();\n        if (!layerInfo || (layerInfo && !layerInfo.selectionExists)) {\n            return [];\n        }\n\n        const operations = [];\n\n        if (layerInfo && layerInfo.enableApplyText) {\n            operations.push({\n                name: 'DL_SET_TEXT_STYLE_TOOLTIP',\n                icon: 'text',\n                onClick: true,\n                apply: () => this._setTextStyle(element),\n                displayInMenu: true\n            });\n        }\n\n        operations.push({\n            name: 'DL_CREATE_TEXT_LAYER_TOOLTIP',\n            icon: 'pastetext',\n            apply: () => this._createTextLayer(element),\n            displayInMenu: true\n        });\n\n        return operations;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2015 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric, reportApplyFullSizeMetric, getElementModifiedTime } from 'app/js/utils/libraryUtils';\nimport ThreeDElementConfig from 'app/js/config/elements/ThreeDElementConfig';\nimport { editImageOr3DElement } from '../imageUtils';\n\nexport default class PHXSThreeDElementConfig extends ThreeDElementConfig {\n\n    _add3dObjectToDocument(element) {\n        const representation = this._config.findUsableRepresentation(element);\n        if (representation) {\n            reportApplyMetric(representation, 'placeAsset', false);\n\n            return representation.getContentPath().then(path => {\n                return environment.execApp('placeAsset', [\n                    path,\n                    element.library.name,\n                    element.name,\n                    element.getLegacyReference(),\n                    getElementModifiedTime(element),\n                    element.created,\n                    null,\n                    null,\n                    false\n                ]);\n            });\n        }\n\n        // Fallback: use the full-size rendition if we don't have a representation we can use\n        return element.getThumbnailPath().then(function(path) {\n            reportApplyFullSizeMetric(element, 'placeAsset', false);\n            return environment.execApp('placeAsset', [\n                path,\n                element.library.name,\n                element.name,\n                element.getLegacyReference(),\n                getElementModifiedTime(element),\n                element.created,\n                null,\n                null,\n                false\n            ]);\n        });\n    }\n\n    getApplyOperations(element) {\n\n        if (!layerSelectionManager.hasDocumentOpen()) {\n            return [];\n        }\n\n        // General linking not enabled case\n        return [ {\n            name: 'DL_ADD_IMAGE_TO_DOC',\n            icon: 'download',\n            apply: () => this._add3dObjectToDocument(element),\n            displayInMenu: true\n        } ];\n    }\n\n    defaultEditOperation(element) {\n        return editImageOr3DElement(element);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport FontElementConfig from 'app/js/config/elements/FontElementConfig';\nimport * as TypekitUtils from 'app/js/utils/typekitUtils';\n\nexport default class PHXSFontElementConfig extends FontElementConfig {\n\n    _setFont(element) {\n        const representation = this._config.findUsableRepresentation(element);\n        if (representation) {\n            const font = TypekitUtils.checkTypekitFont(element);\n            if (font && font.id) {\n                reportApplyMetric(representation, 'setFont', null, { event: { value: 'typekit' } });\n            } else {\n                reportApplyMetric(representation, 'setFont');\n            }\n\n            const styleData = this._getStyleData(element, true);\n            return environment.execApp('setFont', [ styleData, translate('DL_PHXS_HISTORY_ENTRY_SET_FONT') ]);\n        }\n    }\n\n    getApplyOperations(element) {\n\n        // If we have no document there is no way to use a text style\n        const layerInfo = layerSelectionManager.getLayerInfo();\n        if (!layerInfo || (layerInfo && !layerInfo.selectionExists)) {\n            return [];\n        }\n\n        const operations = [];\n\n        if (layerInfo && layerInfo.enableApplyText) {\n            operations.push({\n                name: 'DL_SET_FONT_TOOLTIP',\n                onClick: true,\n                apply: () => this._setFont(element),\n                displayInMenu: true\n            });\n        }\n\n        return operations;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport dialogManager from 'app/js/managers/dialogManager';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport metrics from 'app/js/interface/metrics';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport debugLog from 'app/js/utils/debugLog';\nimport viewState from 'app/js/state/viewState';\nimport { addBrushElement, addLayerStyleElement } from 'app/js/utils/addElementUtils';\nimport ApplicationFontManager from 'app/js/managers/utils/ApplicationFontManager';\nimport { observable } from 'mobx';\nimport { addPSColor } from './colorUtils';\nimport { addPSGradient } from './gradientUtils';\nimport * as PHXSEvents from './events';\n\n// Import all the element type configuration overrides\nimport DefaultConfigs from 'app/js/config/elements/DefaultConfigs';\nimport BrushElementConfig from './elements/BrushElementConfig';\nimport ColorElementConfig from './elements/ColorElementConfig';\nimport GradientElementConfig from './elements/GradientElementConfig';\nimport ImageElementConfig from './elements/ImageElementConfig';\nimport LayerStyleElementConfig from './elements/LayerStyleElementConfig';\nimport LookElementConfig from './elements/LookElementConfig';\nimport PatternElementConfig from './elements/PatternElementConfig';\nimport TemplateElementConfig from './elements/TemplateElementConfig';\nimport TextStyleElementConfig from './elements/TextStyleElementConfig';\nimport ThreeDElementConfig from './elements/ThreeDElementConfig';\nimport FontElementConfig from './elements/FontElementConfig';\n\nclass DocumentState {\n    @observable isAddDocContentEnabled = false;\n}\n\nexport function getAppConfiguration() {\n    const documentState = new DocumentState();\n\n    this.config = {};\n    this.config.code = 'PHXS';\n\n    this.config.translationSuffix = 'PS';\n    this.config.fullName = 'Photoshop';\n\n    this.config.dragDropSource = 'com.adobe.photoshop';\n\n    this.config.themes = {\n        '323232': 'darker', // 16.1\n        '535353': 'dark', // 16.1\n        'b8b8b8': 'light', // 16.1\n        'f0f0f0': 'lighter' // 16.1\n    };\n\n    // In the global CSS, certain app styles are bound to the classname 'spectrum-enabled'.\n    this.config.legacySpectrumEnabled = true;\n\n    this.config.defaultTheme = 'dark';\n\n    this.config.deleteIcon = 'Delete-PS';\n\n    this.config.elementTypes = [\n        ColorElementConfig,\n        DefaultConfigs.ColorThemeElementConfig,\n        GradientElementConfig,\n        TextStyleElementConfig,\n        FontElementConfig,\n        LayerStyleElementConfig,\n        BrushElementConfig,\n        ImageElementConfig,\n        ThreeDElementConfig,\n        PatternElementConfig,\n        TemplateElementConfig,\n        DefaultConfigs.ComponentElementConfig,\n        LookElementConfig,\n        DefaultConfigs.VideoElementConfig,\n        DefaultConfigs.CapsuleElementConfig,\n        DefaultConfigs.ParagraphStyleElementConfig,\n        DefaultConfigs.TextElementConfig,\n        DefaultConfigs.AnimationElementConfig,\n        DefaultConfigs.LightElementConfig,\n        DefaultConfigs.MaterialElementConfig,\n        DefaultConfigs.AudioElementConfig,\n        DefaultConfigs.ChannelElementConfig,\n        DefaultConfigs.ImageGuidelineElementConfig,\n        DefaultConfigs.UnsupportedElementConfig\n    ];\n\n    // This defines the element categories that are collapsed by default in the UI - change this to suite your application.\n    this.config.collapsedTypes = [\n        configuration.VIDEO_ELEMENT_TYPE,\n        configuration.PARAGRAPH_STYLE_ELEMENT_TYPE,\n        configuration.MATERIAL_ELEMENT_TYPE,\n        configuration.LIGHT_ELEMENT_TYPE,\n        configuration.TEXT_ELEMENT_TYPE,\n        configuration.CAPSULE_ELEMENT_TYPE,\n        configuration.ANIMATION_ELEMENT_TYPE,\n        configuration.AUDIO_ELEMENT_TYPE,\n        configuration.CHANNEL_ELEMENT_TYPE,\n        configuration.IMAGE_GUIDELINE_ELEMENT_TYPE,\n        configuration.UNSUPPORTED_ELEMENT_TYPE\n    ];\n\n    this.config.isCaptureEnabled = true;\n    // In Photoshop these modules show up in Capture Panel in the order specified here\n    this.config.captureModules = [ 'Patterns', 'Shapes', 'Colors', 'Gradients', 'Type' ];\n\n    // We will enable this based on PS config info until we are certain that\n    // the panel will only be run in versions of PS that contain support (hard\n    // code in pattern.js at that time).\n    this.config.enablePatternDragging = false;\n\n    // Use mouse co-ordinates on Mac to detect a successful drop while in Adobe Stock search mode\n    this.config.useMouseEventToDetectDrop = true;\n\n    this.config.hasLibraryManager = false;\n\n    function handleColorDrop(dropData) {\n        let index, colorData;\n        const promises = [];\n        for (index = 0; index < dropData.assetList.length; ++index) {\n            colorData = dropData.assetList[index].data[0];\n            promises.push(addPSColor(dropData.assetList[index].name, colorData.primary, colorData.secondary, /*opType*/ 'dragToPanel', dropData.library));\n        }\n        return Promise.all(promises);\n    }\n\n    function handleGradientDrop(dropData) {\n        const promises = [];\n        dropData.assetList.forEach(asset => {\n            const gradientIndex = asset.data[0];\n            const library = dropData.library || libraryManager.getDefaultLibrary();\n            if (typeof gradientIndex === 'number') {\n                promises.push(environment.execApp('saveGradientByIndex', [ gradientIndex, library.id ]));\n            } else {\n                promises.push(addPSGradient(asset.name, gradientIndex, /*opType*/ 'dragToPanel', library));\n            }\n        });\n        return Promise.all(promises);\n    }\n\n    function handleStyleDrop(dropData) {\n        // Use separate function here so that closure will make 'name' available in the then\n        // (the loop index will have already been incremented).\n        const saveAndAddLayerStyle = (styleIndex, name) => {\n            return environment.execApp('saveLayerStyleByIndex', [ styleIndex ]).then((strSaveInfo) => {\n                const library = dropData.library || libraryManager.getDefaultLibrary();\n                const saveInfo = JSON.parse(strSaveInfo) || {};\n                const stylePrimaryRep = {};\n                stylePrimaryRep.path = saveInfo.aslPath;\n                return addLayerStyleElement(name, stylePrimaryRep, saveInfo.previewPath, library, /*opType*/ 'dragToPanel').then((element) => {\n                    if (libraryManager.currentLibrary === library) {\n                        elementSelectionState.revealElement(element);\n                    }\n                    return element;\n                });\n            });\n        };\n        let index, styleIndex;\n        const promises = [];\n        for (index = 0; index < dropData.assetList.length; ++index) {\n            styleIndex = dropData.assetList[index].data[0];\n            promises.push(saveAndAddLayerStyle(styleIndex, dropData.assetList[index].name));\n        }\n        return Promise.all(promises);\n    }\n\n    function handleBrushDrop(dropData) {\n        // Use separate function here so that closure will make 'name' available in the then\n        // (the loop index will have already been incremented).\n        const saveAndAddBrush = (brushIndex, name) => {\n            return environment.execApp('saveBrushByIndex', [ brushIndex ]).then((strSaveInfo) => {\n                const library = dropData.library || libraryManager.getDefaultLibrary();\n                const saveInfo = JSON.parse(strSaveInfo) || {};\n                const brushPrimaryRep = {};\n                brushPrimaryRep.path = saveInfo.abrPath;\n                return addBrushElement(name, brushPrimaryRep, saveInfo.previewPath, library, /*opType*/ 'dragToPanel').then((element) => {\n                    if (libraryManager.currentLibrary === library) {\n                        elementSelectionState.revealElement(element);\n                    }\n                    return element;\n                });\n            });\n        };\n        let index, brushIndex;\n        const promises = [];\n        for (index = 0; index < dropData.assetList.length; ++index) {\n            brushIndex = dropData.assetList[index].data[0];\n            promises.push(saveAndAddBrush(brushIndex, dropData.assetList[index].name));\n        }\n        return Promise.all(promises);\n    }\n\n    function enableAddDocContent(hasOpenDoc) {\n        documentState.isAddDocContentEnabled = libraryManager.areLibrariesLoaded && hasOpenDoc;\n        return libraryManager.areLibrariesLoaded && hasOpenDoc;\n    }\n\n    this.getFlyoutMenuItems = function() {\n        return [ {\n            label: 'DL_FLYOUT_ADD_DOC_CONTENT',\n            enableMenu: enableAddDocContent(layerSelectionManager.hasDocumentOpen() && !viewState.isImportExportInProgress),\n            onClick() {\n                configuration.currentProduct.addDocContent();\n            }\n        } ];\n    };\n\n    this.addDocContent = function() {\n        dialogManager.closeDialog();\n        viewState.resetMode();\n        const event = environment.createEvent('com.adobe.DesignLibraries.events.AddDocContent', 'APPLICATION');\n        environment.dispatchEvent(event);\n    };\n\n    this.getAddDocContentOperation = function() {\n        if (!enableAddDocContent(layerSelectionManager.hasDocumentOpen())) {\n            return undefined;\n        }\n        const buttonName = viewState.isNewUserState() ? 'DL_NEW_USER_ADD_DOC_CONTENT_BUTTON' : 'DL_ADD_DOC_CONTENT_BUTTON';\n        return {\n            buttonName,\n            buttonToolTip: 'DL_ADD_DOC_CONTENT_BUTTON_TOOLTIP',\n            iconToolTip: 'DL_ADD_DOC_CONTENT_ICON_TOOLTIP',\n            icon: 'UploadDocAssets',\n            apply() {\n                configuration.currentProduct.addDocContent();\n            },\n            enabled: enableAddDocContent(layerSelectionManager.hasDocumentOpen())\n        };\n    };\n\n    this.handleActiveDocChanged = function(newDocumentId) {\n        const validDocID = (newDocumentId !== 0);\n        enableAddDocContent(validDocID);\n    };\n\n    this.dropHandlers = {\n        color: handleColorDrop,\n        gradient: handleGradientDrop,\n        style: handleStyleDrop,\n        brush: handleBrushDrop\n    };\n\n    this.dropHandler = function(eventData) {\n        const dropData = eventData;\n        if (dropData && dropData.assetList && dropData.assetList.length > 0) {\n            // We only support drop of one data type at a time\n            const dropHandler = this.dropHandlers[dropData.assetList[0].type];\n            return dropHandler ? dropHandler(dropData) : Promise.reject();\n        }\n        return Promise.reject();\n    };\n\n    this.fontManager = new ApplicationFontManager();\n\n    this.init = function() {\n\n        // Comment out but keep code as an example when not in use; will need to re-use.\n        environment.execApp('getConfigInfoFromPS').then(function(strConfigInfo) {\n            const configInfo = JSON.parse(strConfigInfo) || {};\n            configuration.currentProduct.config.enablePatternDragging = configInfo.enablePatternDragging;\n            configuration.currentProduct.config.enableGradientContextMenu = configInfo.enableGradientContextMenu;\n        });\n\n        FileUtils.extendUsableTypes(configuration.COLOR_THEME_ELEMENT_TYPE, [ 'application/vnd.adobe.colortheme+json' ]);\n        FileUtils.extendUsableTypes(configuration.BRUSH_ELEMENT_TYPE, [ 'image/x-adobe-photoshop-brush' ]);\n        FileUtils.extendUsableTypes(configuration.CHARACTER_STYLE_ELEMENT_TYPE, [ 'application/vnd.adobe.characterstyle+json' ]);\n        FileUtils.extendUsableTypes(configuration.FONT_ELEMENT_TYPE, [ 'application/vnd.adobe.font+json' ]);\n        FileUtils.extendUsableTypes(configuration.LAYER_STYLE_ELEMENT_TYPE, [ 'application/vnd.adobe.layerstyle' ]);\n        FileUtils.extendUsableTypes(configuration.THREE_D_ELEMENT_TYPE, [ 'image/vnd.adobe.photoshop' ]);\n        FileUtils.extendUsableTypes(configuration.PATTERN_ELEMENT_TYPE, [ 'image/vnd.adobe.pattern+png' ]);\n        FileUtils.extendUsableTypes(configuration.LOOK_ELEMENT_TYPE, [ 'application/vnd.adobe.cube+txt' ]);\n        FileUtils.extendUsableTypes(configuration.TEMPLATE_ELEMENT_TYPE, [ 'image/vnd.adobe.photoshop.template', 'application/vnd.adobe.photoshop.template' ]);\n        FileUtils.extendUsableTypes(configuration.GRADIENT_ELEMENT_TYPE, [ 'application/vnd.adobe.gradient.noise+json', 'application/vnd.adobe.gradient+json' ]);\n        FileUtils.extendUsableTypes(configuration.COMPONENT_ELEMENT_TYPE, [ 'image/svg+xml', 'image/png' ]);\n\n        FileUtils.extendEditableTypes(configuration.COLOR_ELEMENT_TYPE, [ 'application/vnd.adobe.color+json' ]);\n        FileUtils.extendEditableTypes(configuration.THREE_D_ELEMENT_TYPE, [ 'image/vnd.adobe.photoshop' ]);\n\n        // Adding a type as editible also adds it as usable, and we want all usable image types to be editable,\n        // so just extend the editable image types.\n        const initPromise = environment.execApp('getReadableFileExtensions').then(function(strReadableExtensions) {\n\n            const readableExtensions = JSON.parse(strReadableExtensions) || [];\n\n            // Strip out PSDT because we don't want to allow editing of PSDT elements, which won't work\n            // since it opens as a new doc unassociated with the file whence it came.\n            const psdtIndex = readableExtensions.indexOf('PSDT');\n            if (psdtIndex !== -1) {\n                readableExtensions.splice(psdtIndex, 1);\n            }\n\n            // But we do want to add PSDT as a usable type, which enables us to get it's layers for Place Layers.\n            FileUtils.extendUsableTypes(configuration.IMAGE_ELEMENT_TYPE, [ 'image/vnd.adobe.photoshop.template', 'application/x-adobe-libraries-psdt' ]);\n\n            const readOnlyExtensions = [ 'AI', 'SVG', 'SVGZ', 'PDF' ]; // These are not editable in Photoshop, only placeable\n\n            if (readableExtensions.length > 0) {\n                // Kind of ugly - we strip out the extensions that we want to only make usable, so they're not marked as 'editable'.\n                readOnlyExtensions.forEach(function(ext) {\n                    const index = readableExtensions.indexOf(ext);\n                    if (index !== -1) {\n                        readableExtensions.splice(index, 1);\n                    }\n                });\n\n                FileUtils.extendUsableTypesWithExtensions(configuration.IMAGE_ELEMENT_TYPE, readOnlyExtensions);\n                FileUtils.extendEditableTypesWithExtensions(configuration.IMAGE_ELEMENT_TYPE, readableExtensions);\n\n            } else {\n                debugLog.log('Failed to get readable file extensions from PHXS, using short default list.');\n\n                FileUtils.extendUsableTypes(configuration.IMAGE_ELEMENT_TYPE, [\n                    'application/illustrator',\n                    'image/svg+xml',\n                    'application/pdf'\n                ]);\n\n                FileUtils.extendEditableTypes(configuration.IMAGE_ELEMENT_TYPE, [\n                    'image/png',\n                    'image/jpeg',\n                    'image/jpg',\n                    'image/gif',\n                    'image/bmp',\n                    'application/photoshop',\n                    'image/vnd.adobe.photoshop',\n                    'application/photoshop.large'\n                ]);\n            }\n        });\n\n        // Dispatch com.adobe.PhotoshopPersistent event to make the panel persistent\n        // This would ensure that panel doesn't get unloaded when user switches to a different panel\n        const event = environment.createEvent('com.adobe.PhotoshopPersistent', 'APPLICATION');\n        environment.dispatchEvent(event);\n\n        this.startEventListener();\n\n        return initPromise;\n    };\n\n    this.startEventListener = function() {\n        environment.addManagerInitListener();\n        environment.addOpenDialogEventListener();\n        PHXSEvents.listen();\n    };\n\n    this.stopEventListener = function() {\n        environment.removeManagerInitListener();\n        environment.removeOpenDialogEventListener();\n        PHXSEvents.stop();\n    };\n\n    this.reportEvent = function(eventName, properties, force) {\n        // Get the opType provided by createElementExtraMetrics\n        if (eventName === 'createElement') {\n            if (!properties.opType) {\n                const extraMetrics = metrics.getExtraEventMetrics(eventName);\n                if (extraMetrics) {\n                    properties.opType = extraMetrics.opType;\n                }\n            }\n        }\n\n        environment.execApp('reportEvent', [ eventName, properties, force ]).then(function(strReturnValue) {\n            const returnValue = JSON.parse(strReturnValue);\n            if (returnValue) {\n                debugLog.log(eventName + ' metric reported to PS');\n            }\n        });\n    };\n\n    this.getUserData = function(callback) {\n        environment.execApp('getUserData').then(function(strReturnValue) {\n            if (strReturnValue && strReturnValue !== 'undefined') {\n                callback(JSON.parse(strReturnValue));\n                return;\n            }\n\n            return callback();\n        });\n    };\n\n    // TODO: Refactor the above to return an object, rather than using this\n    return this;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport DocumentUtils from './documentUtils';\nimport ImageUtils from './imageUtils';\nimport * as Constants from './constants';\n\nexport class PSAppUtils {\n    // TODO executeWhileModal: true will be deprecated soon, leave only modalBehavior later on\n    EXECUTE_OPERATION_IN_MODAL = {\n        modalBehavior: 'execute',\n        executeWhileModal: true,\n    };\n\n    async executeBatchPlayCommand(command, executeOptions) {\n        const photoshopAction = window.nodeRequire('photoshop').action;\n        if (!executeOptions) {\n            executeOptions = this.EXECUTE_OPERATION_IN_MODAL;\n        }\n        return await photoshopAction.batchPlay([ command ], executeOptions);\n    }\n\n    async executeMultipleBatchPlayCommand(commands, executeOptions) {\n        const photoshopAction = window.nodeRequire('photoshop').action;\n        if (!executeOptions) {\n            executeOptions = this.EXECUTE_OPERATION_IN_MODAL;\n        }\n        return await photoshopAction.batchPlay(commands, executeOptions);\n    }\n\n    async getAppProperty(returnRawResult, propertyKey, actionArgs, additionalArgsMap) {\n        const targetObject = [\n            {\n                '_property': propertyKey,\n                '_ref': 'property'\n            }\n        ];\n\n        const getCommand = {\n            '_obj': 'get',\n            '_target': targetObject.concat(actionArgs)\n        };\n\n        if (additionalArgsMap) {\n            additionalArgsMap.forEach((value, key) => getCommand[key] = value);\n        }\n\n        const psGetResult = await this.executeBatchPlayCommand(getCommand);\n        if (!returnRawResult && psGetResult && psGetResult instanceof Array) {\n            const data = psGetResult[0][propertyKey];\n            if (typeof data === 'string') {\n                try {\n                    return JSON.parse(data);\n                } catch (ignore) {\n                    // Ignore\n                }\n            }\n            return data;\n        }\n        return psGetResult;\n    }\n\n    async getCurrentTool() {\n        return await this.getAppProperty(false, 'tool', [ { '_enum': 'ordinal', '_ref': 'application', '_value': 'targetEnum' } ]);\n    }\n\n    async getCurrentToolOptions() {\n        return await this.getAppProperty(false, 'currentToolOptions', [ { '_enum': 'ordinal', '_ref': 'application', '_value': 'targetEnum' } ]);\n    }\n\n    async currentToolSupportsBrushes() {\n        return await this.getAppProperty(false, 'toolSupportsBrushes', [ { '_enum': 'ordinal', '_ref': 'application', '_value': 'targetEnum' } ]);\n    }\n\n    async setLayerName(activeDocumentId, activeLayerId, layerName) {\n        const setLayerNameCommand = {\n            '_obj': 'set',\n            '_target': [\n                {\n                    '_id': activeLayerId,\n                    '_ref': 'layer'\n                },\n                {\n                    '_id': activeDocumentId,\n                    '_ref': 'document'\n                }\n            ],\n            'to': {\n                '_obj': 'layer',\n                'name': layerName\n            }\n        };\n\n        return await this.executeBatchPlayCommand(setLayerNameCommand);\n    }\n\n    async setCurrentTool(toolName) {\n        const setCurrentToolCommand = {\n            '_obj': 'select',\n            '_target': [\n                {\n                    '_ref': toolName\n                }\n            ]\n        };\n\n        return await this.executeBatchPlayCommand(setCurrentToolCommand);\n    }\n\n    async setToolOptions(toolName, toolOptions) {\n        const applyToolOptionsCommand = {\n            '_obj': 'set',\n            '_target': {\n                '_ref': toolName\n            },\n            'to': toolOptions,\n            '_options': {\n                'dialogOptions': 'dontDisplay'\n            }\n        };\n\n        return await this.executeBatchPlayCommand(applyToolOptionsCommand);\n    }\n\n    async setForegroundColor(solidColor) {\n        const foregroundColorCommand = {\n            '_obj': 'set',\n            '_target': [\n                {\n                    '_property': 'foregroundColor',\n                    '_ref': 'color'\n                }\n            ],\n            'to' : solidColor\n        };\n\n        return await this.executeBatchPlayCommand(foregroundColorCommand);\n    }\n\n    async getForegroundColor() {\n        return await this.getAppProperty(false, 'foregroundColorRGB', [ { '_enum': 'ordinal', '_ref': 'application', '_value': 'targetEnum' } ]);\n    }\n\n    async getShowTooltips() {\n        return await this.getAppProperty(false, 'showToolTips', [ { '_enum': 'ordinal', '_ref': 'application', '_value': 'targetEnum' } ]);\n    }\n\n    async getSelectedLayerIndices(wantIDs, documentId) {\n        // Work-around for screwy layer indexing.\n        let backgroundIndexOffset = 1;\n        if (!wantIDs) {\n            const activeDocumentId = documentId ? documentId : await DocumentUtils.getActiveDocumentId();\n            const backgroundLayerPresent = await DocumentUtils.hasBackgroundLayer(activeDocumentId);\n            if (backgroundLayerPresent) {\n                backgroundIndexOffset = 0;\n            }\n        }\n\n        const ktargetLayers = wantIDs ? 'targetLayersIDs' : 'targetLayers';\n        const targetLayers = await this.getAppProperty(false, ktargetLayers, [ { '_enum': 'ordinal', '_ref': 'document', '_value': 'targetEnum' } ]);\n\n        const targetLayerIndices = [];\n        targetLayers.forEach(element => {\n            if (wantIDs) {\n                targetLayerIndices.push(element['_id']);\n            } else {\n                targetLayerIndices.push(element['_index'] + backgroundIndexOffset);\n            }\n        });\n        return targetLayerIndices;\n    }\n\n    async selectLayerByIndex(layerIndex, addToSelection) {\n        const selectLayerCommand = {\n            '_obj': 'select',\n            '_target': [\n                {\n                    '_index': layerIndex,\n                    '_ref': 'layer'\n                }\n            ]\n        };\n\n        if (addToSelection) {\n            selectLayerCommand['selectionModifier'] = { '_enum': 'selectionModifierType', '_value': 'addToSelection' };\n        }\n\n        return this.executeBatchPlayCommand(selectLayerCommand);\n    }\n\n    async forEachSelectedLayer(aFunction) {\n        if (typeof aFunction !== 'function') {\n            return;\n        }\n\n        const layerIndexes = await this.getSelectedLayerIndices();\n\n        // select each layer and perform operation on it\n        for (const index in layerIndexes) {\n            await this.selectLayerByIndex(layerIndexes[index]);\n            try {\n                await aFunction();\n            } catch (ignore) {\n                // eat exception to ensure we reset the original layer selection below.\n            }\n        }\n\n        // delete the last element as it is already selected\n        if (layerIndexes.length > 0) {\n            layerIndexes.pop();\n        }\n\n        // reselect layers\n        for (const index in layerIndexes) {\n            await this.selectLayerByIndex(layerIndexes[index], true);\n        }\n    }\n\n    async setPattern(propertyID, scale) {\n        const setPatternCommand = {\n            '_obj': 'set',\n            '_target': [\n                {\n                    '_enum': 'ordinal',\n                    '_ref': 'contentLayer',\n                    '_value': 'targetEnum'\n                }\n            ],\n            'to': {\n                '_obj': 'patternLayer',\n                'pattern': {\n                    'ID': propertyID,\n                    '_obj': 'pattern'\n                },\n                'scale': {\n                    '_unit': 'percentUnit',\n                    '_value': scale\n                }\n            },\n            '_options': {\n                'dialogOptions': 'display'\n            }\n        };\n\n        return await this.executeBatchPlayCommand(setPatternCommand);\n    }\n\n    async getFileFormats() {\n        const fileFormats = await this.getAppProperty(false, 'FileFormats', [ { '_enum': 'ordinal', '_ref': 'application', '_value': 'targetEnum' } ]);\n        return fileFormats;\n    }\n\n    async tempFolderPath() {\n        const photoshopCCLibrariesPanel = window.nodeRequire('photoshop').cclibrariespanel;\n        const tempFolder = await photoshopCCLibrariesPanel.getTempFolder();\n        return tempFolder.tempPath;\n    }\n\n    async generateRepresentationAndPreview(repFolderPath, repNameNoExt, previewPath, maxPreviewWidth = ImageUtils.previewMaxWidth, maxPreviewHeight = ImageUtils.previewMaxHeight) {\n        const exportCommand = {\n            '_obj': 'export',\n            'externalPreviewParams': {\n                '_obj': 'externalPreviewParams',\n                'in': {\n                    '_kind': 'local',\n                    '_path': previewPath\n                },\n                'pixelHeight': maxPreviewHeight,\n                'pixelWidth': maxPreviewWidth\n            },\n            'null': [\n                {\n                    '_enum': 'ordinal',\n                    '_ref': 'layer',\n                    '_value': 'targetEnum'\n                }\n            ],\n            'representation': {\n                '_obj': 'representation',\n                'in': {\n                    '_kind': 'local',\n                    '_path': repFolderPath\n                },\n                'name': repNameNoExt\n            },\n            'using': {\n                '_class': 'saveForCCLibrariesElement'\n            }\n        };\n\n        const exportResult = await this.executeBatchPlayCommand(exportCommand);\n\n        const repPath = exportResult[0].in._path;\n\n        const dimensions = {\n            'width': 0,\n            'height': 0\n        };\n\n        if (Object.prototype.hasOwnProperty.call(exportResult[0], Constants.PSString_PixelWidth)) {\n            dimensions.width = exportResult[0][Constants.PSString_PixelWidth];\n        }\n        if (Object.prototype.hasOwnProperty.call(exportResult[0], Constants.PSString_PixelHeight)) {\n            dimensions.width = exportResult[0][Constants.PSString_PixelHeight];\n        }\n\n        const result = {};\n        result.dimensions = dimensions;\n        result.repPath = repPath;\n\n        return result;\n    }\n\n    async saveAssets(info) {\n        const documentCount = await DocumentUtils.getNumberOfDocuments();\n        if (documentCount === 0) {\n            return;\n        }\n\n        const tempFolderPath = await this.tempFolderPath();\n        const pngPath = tempFolderPath + '/' + info.name + 'p' + '.png';\n        const repResult = await this.generateRepresentationAndPreview(tempFolderPath, info.name, pngPath, info.maxWidth, info.maxHeight);\n\n        const activeDocumentId = await DocumentUtils.getActiveDocumentId();\n        const activeLayerId = await DocumentUtils.getActiveLayerId(activeDocumentId);\n\n        const filePath = repResult.repPath;\n        const strLayerName = await DocumentUtils.getLayerName(activeDocumentId, activeLayerId);\n        const fileData = {\n            layerName: strLayerName,\n            files: [ {\n                path: filePath,\n                relationship: 'primary',\n                dimensions: repResult.dimensions\n            } ],\n            rendition: pngPath,\n            documentId: activeDocumentId\n        };\n\n        const layerIds = await this.getSelectedLayerIndices(true, activeDocumentId);\n        if (layerIds) {\n            fileData.layerIds = layerIds;\n        }\n\n        return fileData;\n    }\n}\n\nexport default new PSAppUtils();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport libraryManager from 'app/js/managers/libraryManager';\nimport configuration from 'app/js/config/configuration';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport { checkLibraryWritable, createElementExtraMetrics } from 'app/js/utils/libraryUtils';\nimport DocumentUtils from './documentUtils';\nimport DescriptorUtils from './descriptorUtils';\nimport AppUtils from './appUtils';\nimport * as Constants from './constants';\n\nexport class PSColorUtils {\n\n    psRGBMode = 'RGBColor';\n    psHSBMode = 'HSBColorClass';\n    psCMYKMode = 'CMYKColorClass';\n    psGrayscaleMode = 'grayscale';\n    psLABMode = 'labColor';\n\n    textApplyOverrideOperation = 3;\n\n    psBlackColor = {\n        '_obj': 'RGBColor',\n        'red': 0,\n        'grain': 0,\n        'blue': 0\n    }\n\n    isModeSupported(colorData) {\n        const acceptableModes = [ 'RGB', 'CMYK', 'Gray', 'Lab', 'HSB' ];\n        return colorData && !!acceptableModes.find(mode => mode === colorData.mode);\n    }\n\n    findRepWithMode(reps, mode) {\n        return reps.find(item => item.mode === mode);\n    }\n\n    getBestColorRepresentation(data) {\n        const color = data[0];\n\n        if (this.isModeSupported(color)) {\n            return color;\n        }\n        //Default to RGB if the primary color is not supported\n        return this.findRepWithMode(data, 'RGB');\n    }\n\n    async psSolidColorToLibraryColorWithRGB(solidColor, profileName) {\n        const colors = [];\n        colors.push(this.psSolidColorToLibraryColor(solidColor, profileName));\n        if (solidColor._obj !== this.psRGBMode) {\n            const psRGBColor = await this.convertColorToRGB(solidColor);\n            colors.push(this.psSolidColorToLibraryColor(psRGBColor[0].color, profileName));\n        }\n        return colors;\n    }\n\n    psSolidColorToLibraryColor(solidColor, profileName) {\n        let colorData;\n        switch (solidColor._obj) {\n        case this.psCMYKMode:\n            colorData = {\n                mode: 'CMYK',\n                value: {\n                    c: solidColor.cyan,\n                    m: solidColor.magenta,\n                    y: solidColor.yellowColor,\n                    k: solidColor.black\n                },\n                type: 'process'\n            };\n            break;\n        case this.psRGBMode:\n            colorData = {\n                mode: 'RGB',\n                value: {\n                    r: solidColor.red,\n                    g: solidColor.grain, // key typo\n                    b: solidColor.blue\n                },\n                type: 'process'\n            };\n            break;\n        case this.psLABMode:\n            colorData = {\n                mode: 'Lab',\n                value: {\n                    l: solidColor.luminance,\n                    a: solidColor.a,\n                    b: solidColor.b\n                },\n                type: 'process'\n            };\n            break;\n        case this.psGrayscaleMode:\n            colorData = {\n                mode: 'Gray',\n                value: solidColor.gray,\n                type: 'process'\n            };\n            break;\n        case this.psHSBMode:\n            colorData = {\n                mode: 'HSB',\n                value: {\n                    h: solidColor.hue._value,\n                    s: solidColor.saturation,\n                    b: solidColor.brightness\n                },\n                type: 'process'\n            };\n            break;\n        }\n\n        colorData.profileName = profileName ? profileName : (solidColor.profileName || configuration.DEFAULT_SRGB_PROFILE);\n        return colorData;\n    }\n\n    libraryColorToPSSolidColor(data) {\n        //If passed an array of representations then first select\n        //the best representation\n        if (Array.isArray(data)) {\n            data = this.getBestColorRepresentation(data);\n        }\n        let finalColor;\n        if (data) {\n            finalColor = new Object();\n            switch (data.mode) {\n            case 'RGB':\n                finalColor._obj = this.psRGBMode;\n                finalColor.red = data.value.r;\n                finalColor.green = data.value.g;\n                finalColor.blue = data.value.b;\n                break;\n            case 'CMYK':\n                finalColor._obj = this.psCMYKMode;\n                finalColor.cyan = data.value.c;\n                finalColor.magenta = data.value.m;\n                finalColor.yellowColor = data.value.y;\n                finalColor.black = data.value.k;\n                break;\n            case 'Lab':\n                finalColor._obj = this.psLABMode;\n                finalColor.luminance = data.value.l;\n                finalColor.a = data.value.a;\n                finalColor.b = data.value.b;\n                break;\n            case 'Gray':\n                finalColor._obj = this.psGrayscaleMode;\n                finalColor.gray = data.value;\n                break;\n            case 'HSB':\n                finalColor._obj = this.psHSBMode;\n                finalColor.hue = data.value.h;\n                finalColor.saturation = data.value.s;\n                finalColor.brightness = data.value.b;\n                break;\n            }\n        }\n        return finalColor;\n    }\n\n    addUnitToHSBModeSolidColor(solidColor) {\n        let newSolidColor;\n        if (solidColor._obj === this.psHSBMode) {\n            newSolidColor = new Object;\n            newSolidColor._obj = solidColor._obj;\n            newSolidColor.saturation = solidColor.saturation;\n            newSolidColor.brightness = solidColor.brightness;\n            newSolidColor.hue = { '_unit': 'angleUnit', '_value': solidColor.hue };\n        } else {\n            newSolidColor = solidColor;\n        }\n        return newSolidColor;\n    }\n\n    async showColorPicker() {\n        const showColorPickerCommand = {\n            '_obj': 'showColorPicker',\n            'to': true\n        };\n\n        return await AppUtils.executeBatchPlayCommand(showColorPickerCommand);\n    }\n\n    async setStrokeColorForShapeLayer(solidColor) {\n        const tempSolidColor = this.addUnitToHSBModeSolidColor(solidColor);\n\n        const strokeColorCommand = {\n            '_obj': 'set',\n            '_target': [\n                {\n                    '_enum': 'ordinal',\n                    '_ref': 'contentLayer',\n                    '_value': 'targetEnum'\n                }\n            ],\n            'to': {\n                '_obj': 'shapeStyle',\n                'strokeStyle': {\n                    '_obj': 'strokeStyle',\n                    'strokeEnabled': true,\n                    'strokeStyleContent': {\n                        '_obj': 'solidColorLayer',\n                        'color': tempSolidColor\n                    },\n                    'strokeStyleVersion': 2\n                },\n            }\n        };\n\n        return await AppUtils.executeBatchPlayCommand(strokeColorCommand);\n    }\n\n    async setStrokeColor(colorData) {\n        const documentCount = await DocumentUtils.getNumberOfDocuments();\n        if (documentCount === 0) {\n            return;\n        }\n        const solidColor = this.libraryColorToPSSolidColor(colorData);\n        await AppUtils.setForegroundColor(solidColor);\n\n        return await this.setStrokeColorForShapeLayer(solidColor);\n    }\n\n    async setColorOverlayForSinglySelectedLayer(solidColor) {\n        const tempSolidColor = this.addUnitToHSBModeSolidColor(solidColor);\n\n        const colorOverlayCommand = {\n            '_obj': 'set',\n            '_target': [\n                {\n                    '_property': 'layerEffects',\n                    '_ref': 'property'\n                },\n                {\n                    '_enum': 'ordinal',\n                    '_ref': 'layer',\n                    '_value': 'targetEnum'\n                }\n            ],\n            'merge': true,\n            'to': {\n                '_obj': 'layerEffects',\n                'scale': {\n                    '_unit': 'percentUnit',\n                    '_value': 100.0\n                },\n                'solidFill': {\n                    '_obj': 'solidFill',\n                    'color': tempSolidColor,\n                    'enabled': true,\n                    'mode': {\n                        '_enum': Constants.PSString_BlendMode,\n                        '_value': Constants.PSString_BlendMode_Normal\n                    },\n                    'opacity': {\n                        '_unit': 'percentUnit',\n                        '_value': 100.0\n                    }\n                }\n            }\n        };\n\n        return await AppUtils.executeBatchPlayCommand(colorOverlayCommand);\n    }\n\n    async setColorOverlay(colorData, historyName) {\n        const documentCount = await DocumentUtils.getNumberOfDocuments();\n        if (documentCount === 0) {\n            return;\n        }\n\n        const solidColor = this.libraryColorToPSSolidColor(colorData);\n        await AppUtils.setForegroundColor(solidColor);\n\n        const doSetOverlayColorFunc = async function() {\n            await this.setColorOverlayForSinglySelectedLayer(solidColor);\n        };\n\n        const setColorOverlayModalHandler = async function(executionControl) {\n            const suspensionID = await executionControl.suspendHistory({\n                'historyStateInfo': {\n                    'name': historyName,\n                    'target': [\n                        { _ref: 'document', _enum: 'ordinal', _value: 'targetEnum' },\n                        { _ref: 'application', _enum: 'ordinal', _value: 'targetEnum' }\n                    ]\n                }\n            });\n            await AppUtils.forEachSelectedLayer(doSetOverlayColorFunc.bind(this));\n\n            // optional history state commit\n            await executionControl.resumeHistory(suspensionID);\n        };\n\n        const psCore = window.nodeRequire('photoshop').core;\n        return await psCore.executeAsModal(setColorOverlayModalHandler.bind(this), { 'commandName': historyName });\n    }\n\n    async setTextColor(solidColor) {\n        const tempSolidColor = this.addUnitToHSBModeSolidColor(solidColor);\n\n        const textFillCommand = {\n            '_obj': 'set',\n            '_target': [\n                {\n                    '_property': 'textStyle',\n                    '_ref': 'property'\n                },\n                {\n                    '_enum': 'ordinal',\n                    '_ref': 'textLayer',\n                    '_value': 'targetEnum'\n                }\n            ],\n            'to': {\n                '_obj': 'textStyle',\n                'color': tempSolidColor,\n                // TODO(kamarora) - 808466226 value is copied from old extendscript code\n                //  investigate what it is and replace it with named constant\n                'textOverrideFeatureName': 808466226,\n                'typeStyleOperationType': this.textApplyOverrideOperation\n            }\n        };\n\n        return await AppUtils.executeBatchPlayCommand(textFillCommand);\n    }\n\n    async setCurrentSolidFillOrShapeLayerColor(solidColor) {\n        const tempSolidColor = this.addUnitToHSBModeSolidColor(solidColor);\n\n        const solidFillCommand = {\n            '_obj': 'set',\n            '_target': [\n                {\n                    '_enum': 'ordinal',\n                    '_ref': 'contentLayer',\n                    '_value': 'targetEnum'\n                }\n            ],\n            'to': {\n                '_obj': 'solidColorLayer',\n                'color': tempSolidColor\n            }\n        };\n\n        return await AppUtils.executeBatchPlayCommand(solidFillCommand);\n    }\n\n    async setColorForSinglySelectedLayer(solidColor) {\n        const activeDocumentId = await DocumentUtils.getActiveDocumentId();\n        const activeLayerId = await DocumentUtils.getActiveLayerId(activeDocumentId);\n\n        const layerKind = await DocumentUtils.getLayerKind(activeDocumentId, activeLayerId);\n\n        if (layerKind === DocumentUtils.layerKindMap['LayerKind.SOLIDFILL']\n                || layerKind === DocumentUtils.layerKindMap['LayerKind.VECTOR']) {\n            await this.setCurrentSolidFillOrShapeLayerColor(solidColor);\n        } else if (layerKind === DocumentUtils.layerKindMap['LayerKind.TEXT']) {\n            await this.setTextColor(solidColor);\n        }\n    }\n\n    async setColor(colorData, historyName) {\n        const solidColor = this.libraryColorToPSSolidColor(colorData);\n        await AppUtils.setForegroundColor(solidColor);\n\n        const documentCount = await DocumentUtils.getNumberOfDocuments();\n        if (documentCount === 0) {\n            return;\n        }\n\n        const doSetColorFunc = async function() {\n            await this.setColorForSinglySelectedLayer(solidColor);\n        };\n\n        const setColorModalHandler = async function(executionControl) {\n            const suspensionID = await executionControl.suspendHistory({\n                'historyStateInfo': {\n                    'name': historyName,\n                    'target': [\n                        { _ref: 'document', _enum: 'ordinal', _value: 'targetEnum' },\n                        { _ref: 'application', _enum: 'ordinal', _value: 'targetEnum' }\n                    ]\n                }\n            });\n\n            await AppUtils.forEachSelectedLayer(doSetColorFunc.bind(this));\n\n            // optional history state commit\n            await executionControl.resumeHistory(suspensionID);\n        };\n\n        const psCore = window.nodeRequire('photoshop').core;\n        await psCore.executeAsModal(setColorModalHandler.bind(this), { 'commandName': historyName });\n    }\n\n    async convertColorToRGB(color) {\n        const colorConvertCommand = {\n            '_obj': 'convertColorToSpace',\n            '_target': {\n                '_ref': 'application'\n            },\n            color,\n        };\n\n        DescriptorUtils.putEnumerationValueInDescriptor(colorConvertCommand, 'colorSpace', 'colorSpace', 'RGB');\n        return await AppUtils.executeBatchPlayCommand(colorConvertCommand);\n    }\n\n    async getSolidFillColor(documentId, layerId, profileName) {\n        let representations = [];\n        const adjustment = await AppUtils.getAppProperty(false, Constants.PSKey_Adjustment, [ { '_id': layerId, '_ref': 'layer' }, { '_id': documentId, '_ref': 'document' } ]);\n        if (Array.isArray(adjustment) && adjustment.length > 0 && adjustment[0].color) {\n            representations = await this.psSolidColorToLibraryColorWithRGB(adjustment[0].color, profileName);\n        }\n        return representations;\n    }\n\n    async getSolidStrokeColor(documentId, layerId, profileName) {\n        let representations = [];\n        const styleInfo = await AppUtils.getAppProperty(false, Constants.PSKey_AGMStrokeStyleInfo, [ { '_id': layerId, '_ref': 'layer' }, { '_id': documentId, '_ref': 'document' } ]);\n        if (styleInfo && styleInfo.strokeStyleContent && styleInfo.strokeStyleContent.color) {\n            representations = await this.psSolidColorToLibraryColorWithRGB(styleInfo.strokeStyleContent.color, profileName);\n        }\n        return representations;\n    }\n\n    async getLayerEffectColor(layerEffect, profileName, forEffect) {\n        let representations = [];\n        if (layerEffect && Object.prototype.hasOwnProperty.call(layerEffect, forEffect) && layerEffect[forEffect].color) {\n            representations = await this.psSolidColorToLibraryColorWithRGB(layerEffect[forEffect].color, profileName);\n        }\n        return representations;\n    }\n\n    async replaceColor(colorData) {\n        const solidColor = this.libraryColorToPSSolidColor(colorData);\n        await AppUtils.setForegroundColor(solidColor);\n\n        const representations = [];\n\n        const colorInformation = await this.showColorPicker();\n        if (Array.isArray(colorInformation) && colorInformation[0].value) { // color was changed\n            let profileName;\n            const activeDocumentId = await DocumentUtils.getActiveDocumentId();\n            if (activeDocumentId) {\n                profileName = await AppUtils.getAppProperty(false, 'profile', [ { '_id': activeDocumentId, '_ref': 'document' } ]);\n            }\n\n            representations.push(this.psSolidColorToLibraryColor(colorInformation[0].color, profileName));\n            representations.push(this.psSolidColorToLibraryColor(colorInformation[0].RGBFloatColor, profileName));\n        }\n\n        return representations;\n    }\n\n    async addPSColor(name, primaryRepresentation, secondaryRepresentation, opType, library) {\n        name = name || '';\n        library = library || libraryManager.getDefaultLibrary();\n\n        if (!library) {\n            return Promise.reject('Could not add color: No library');\n        }\n\n        if (!checkLibraryWritable(library)) {\n            return Promise.reject('Could not add color: Library not writable');\n        }\n\n        const newElement = createElementExtraMetrics(library, name, configuration.COLOR_ELEMENT_TYPE, { opType });\n\n        if (primaryRepresentation) {\n            newElement\n                .createRepresentation(configuration.COLOR_REPRESENTATION_TYPE, 'primary')\n                .setValue('color', 'data', this.psSolidColorToLibraryColor(primaryRepresentation));\n        }\n\n        if (secondaryRepresentation) {\n            newElement\n                .createRepresentation(configuration.COLOR_REPRESENTATION_TYPE, 'rendition')\n                .setValue('color', 'data', this.psSolidColorToLibraryColor(secondaryRepresentation));\n        }\n\n        newElement.endOperation();\n\n        // Show the addition if in library view\n        if (libraryManager.currentLibrary === library) {\n            await elementSelectionState.revealElement(newElement);\n        }\n\n        return newElement;\n    }\n}\n\nexport default new PSColorUtils();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n//Named constants for classes, strings etc used in PS descriptors in batchPlay commands\n\n//Text Style Values\nexport const PSClass_TextStyleRange = 'textStyleRange'; // 'Txtt'\nexport const PSClass_TextStyle = 'textStyle'; // 'TxtS'\nexport const PSClass_TextLayer = 'textLayer'; // 'TxLr'\nexport const PSClass_TextKey = 'textKey';\nexport const PSClass_Color = 'color';\nexport const PSKey_AddPatternToPresets = 'addPatternToPresets';\nexport const PSKey_Bounds = 'bounds';\nexport const PSKey_Char = 'char';\nexport const PSKey_CurrentToolOptions = 'currentToolOptions';\nexport const PSKey_FontCaps = 'fontCaps';\nexport const PSKey_AltLigature = 'altligature';\nexport const PSKey_Flow = 'flow';\nexport const PSKey_Fractions = 'fractions';\nexport const PSKey_Leading = 'leading'; // 'Ldng'\nexport const PSKey_Ligature = 'ligature';\nexport const PSKey_ImpliedLeading = 'impliedLeading';\nexport const PSKey_NoBreak = 'noBreak';\nexport const PSKey_OldStyle = 'oldStyle';\nexport const PSKey_Ordinals = 'ordinals';\nexport const PSKey_Ornaments = 'ornaments';\nexport const PSKey_Titling = 'titling';\nexport const PSKey_Tracking = 'tracking'; // 'Trck'\nexport const PSKey_HorizontalScale = 'horizontalScale'; // 'HrzS'\nexport const PSKey_VerticalScale = 'verticalScale'; // 'VrtS'\nexport const PSKey_Size = 'size'; // 'Sz  '\nexport const PSKey_ImpliedFontSize = 'impliedFontSize';\nexport const PSKey_SubScript = 'subScript';\nexport const PSKey_SuperScript = 'superScript';\nexport const PSKey_BaselineNormal = 'normal';\nexport const PSKey_StylisticAlternates = 'stylisticAlternates';\nexport const PSKey_ContextualLigatures = 'contextualLigatures';\nexport const PSKey_Swash = 'swash';\nexport const PSKey_SyntheticBold = 'syntheticBold';\nexport const PSKey_SyntheticItalic = 'syntheticItalic';\nexport const PSKey_TextClickPoint = 'textClickPoint'; // 'TxtC'\nexport const PSKey_TextShape = 'textShape';\nexport const PSKey_Tool = 'tool';\nexport const PSKey_Underline = 'underline'; // 'Undl'\nexport const PSKey_AutoKerning = 'autoKern'; // 'AtKr'\nexport const PSEnum_Box = 'box';\nexport const PSKey_transform = 'transform';\nexport const PSKey_warp = 'warp';\n\nexport const PSString_AntiAlias_CRISP = 'antiAliasCrisp';\nexport const PSString_AntiAlias_NONE = 'antiAliasNone';\nexport const PSString_AntiAlias_SHARP = 'antiAliasSharp';\nexport const PSString_AntiAlias_SMOOTH = 'antiAliasSmooth';\nexport const PSString_AntiAlias_STRONG = 'antiAliasStrong';\nexport const PSString_AntiAlias_PLATFORM_GRAY = 'antiAliasPlatformGray';\nexport const PSString_AntiAlias_PLATFORM_LCD = 'antiAliasPlatformLCD';\n\nexport const PSString_AutoLeading = 'autoLeading';\nexport const PSString_strikethrough = 'strikethrough';\nexport const PSString_fontPostScriptName = 'fontPostScriptName';\nexport const PSString_underlineOnLeftInVertical = 'underlineOnLeftInVertical';\nexport const PSString_underlineOnRightInVertical = 'underlineOnRightInVertical';\nexport const PSString_xHeightStrikethroughOn = 'xHeightStrikethroughOn';\nexport const PSString_opticalKern = 'opticalKern';\nexport const PSString_metricsKern = 'metricsKern';\nexport const PSString_manual = 'manual';\nexport const PSKey_Baseline = 'baseline';\nexport const PSKey_BaselineShift = 'baselineShift'; // 'Bsln'\nexport const PSKey_ImpliedBaselineShift = 'impliedBaselineShift';\n\nexport const PSKey_To = 'to';\nexport const PSKey_From = 'from';\nexport const PSKey_CCLib_Config_key = '$CCLc';\nexport const PSKey_SmartObject = 'smartObject';\nexport const PSKey_CCLibrariesElement = 'ccLibrariesElement';\nexport const PSKey_HasVectorMask = 'hasVectorMask';\nexport const PSKey_Adjustment = 'adjustment';\nexport const PSKey_AGMStrokeStyleInfo = 'AGMStrokeStyleInfo';\n\nexport const PSKey_FileOpenContext = 'fileOpenContext';\nexport const PSEnum_FileOpenContextCCLibraries = 'fileOpenContextCCLibrariesAsset';\n\nexport const PSString_TEXT_STYLE = 'textStyle';\nexport const PSString_TEXT_STYLE_RANGE = 'textStyleRange';\nexport const PSString_ORIENTATION = 'orientation';\n\nexport const PSString_ANTI_ALIAS = 'antiAlias';\nexport const PSString_ANTI_ALIAS_TYPE = 'antiAliasType';\n\nexport const PSUnit_Points = 'pointsUnit';\nexport const PSUnit_Millimeters = 'millimetersUnit';\nexport const PSUnit_Angle = 'angleUnit';\nexport const PSUnit_Percent = 'percentUnit';\nexport const PSUnit_Pixels = 'pixelsUnit';\n\nexport const PSString_PixelWidth = 'pixelWidth';\nexport const PSString_PixelHeight = 'pixelHeight';\n\nexport const PSString_DIRECTION_HORIZONTAL = 'horizontal';\nexport const PSString_DIRECTION_VERTICAL = 'vertical';\n\nexport const PSString_AUTO_KERN_MANUAL = 'manual';\nexport const PSString_AUTO_KERN_METRICS = 'metricsKern';\nexport const PSString_AUTO_KERN_OPTICAL = 'opticalKern';\n\nexport const PSString_UNDERLINE_UNDERLINEOFF = 'underlineOff';\nexport const PSString_UNDERLINE_UNDERLINERIGHT = 'underlineOnRightInVertical';\nexport const PSString_UNDERLINE_UNDERLINELEFT = 'underlineOnLeftInVertical';\n\nexport const PSString_STRIKETHRU_STRIKEOFF = 'strikethroughOff';\nexport const PSString_STRIKETHRU_STRIKEHEIGHT = 'xHeightStrikethroughOn';\nexport const PSString_STRIKETHRU_STRIKEBOX = 'eMBoxStrikethroughOn';\n\nexport const PSString_TEXT_CASE_ALLCAPS = 'allCaps';\nexport const PSString_TEXT_CASE_NORMAL = 'normal';\nexport const PSString_TEXT_CASE_SMALLCAPS = 'smallCaps';\n\nexport const PSString_Document_Mode_RGB = 'RGBColor';\nexport const PSString_Document_Mode_CMYK = 'CMYKColorEnum';\nexport const PSString_Document_Mode_Grayscale = 'grayScale';\nexport const PSString_Document_Mode_Lab = 'labColor';\nexport const PSString_Document_Mode_HSB = 'HSBColorEnum';\n\nexport const PSString_Layer_Adjustment_ColorLookup = 'colorLookup';\n\nexport const PSString_BlendMode = 'blendMode';\nexport const PSString_BlendMode_Normal = 'normal';\n\nexport const PSGlobals_maxNameLength = 248;\nexport const PSGlobals_textPreviewFontSize = 32;\nexport const PSGlobals_textPreviewString = 'Aa';\n\n// These are needed for Highbeam analytics reporting. The PSKey entries are custom, not defined by PS.\nexport const PSEvent_HeadlightsInfo = 'headlightsInfo';\nexport const PSEvent_Record = 'eventRecord';\n\n// These are custom keys that we pass through as headlights data.\n// Per Headlights documentation:\n// Avoid using the following key names:\n// GroupID, docID, sequenceNum, time, sessionId are illegal for data record name.\n// Because they will lead to failure of pivot operation. The illegal names are case insensitive.\n// We will add prefix 'HL_validataion_error_' before the illegal name. The modified name will occur in database.\n// e.g. GroupID will be modified to HL_validataion_error_groupID.\nexport const PSKey_HighbeamEventName = 'eventName';\nexport const PSKey_HighbeamLibraryID = 'libraryID';\nexport const PSKey_HighbeamLibraryElementCount = 'libraryElemCount';\nexport const PSKey_HighbeamElementID = 'elementID';\nexport const PSKey_HighbeamElementType = 'elementType';\nexport const PSKey_HighbeamRepresentationType = 'representationType';\nexport const PSKey_HighbeamOpType = 'opType';\nexport const PSKey_HighbeamDetails = 'details';\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n// Utilities to add/extract values from descriptors used in batchPlay commands and response\nexport class PSDescriptorUtils {\n    putEnumerationValueInDescriptor(descriptor, key, enumKey, value) {\n        descriptor[key] = { '_enum': enumKey, '_value': value };\n    }\n\n    putUnitValueInDescriptor(descriptor, key, unitKey, value) {\n        descriptor[key] = { '_unit': unitKey, '_value': value };\n    }\n\n    getEnumerationValueFromDescriptor(descriptor, key) {\n        return descriptor[key] ? descriptor[key]._value : undefined;\n    }\n}\n\nexport default new PSDescriptorUtils;\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { truncateString } from 'app/js/utils/stringUtils';\nimport TextUtils from './textUtils';\nimport AppUtils from './appUtils';\nimport GenericUtils from './genericUtils';\nimport * as Constants from './constants';\nimport ColorUtils from './colorUtils';\n\nexport class PSDocumentUtils {\n    layerKindMap = {\n        'LayerKind.PIXEL': 1,\n        'LayerKind.ADJUSTMENT': 2,\n        'LayerKind.TEXT': 3,\n        'LayerKind.VECTOR': 4, // shape\n        'LayerKind.SMARTOBJECT': 5,\n        'LayerKind.VIDEO': 6,\n        'LayerKind.LAYERGROUP': 7,\n        'LayerKind.3DSHEET': 8,\n        'LayerKind.GRADIENT': 9,\n        'LayerKind.PATTERN': 10,\n        'LayerKind.SOLIDFILL': 11,\n        'LayerKind.BACKGROUND': 12\n    };\n\n    getLayerKindString(layerKind) {\n        const result = GenericUtils.getKeyFromMap(this.layerKindMap, layerKind);\n        return result ? result : '';\n    }\n\n    async getNumberOfDocuments() {\n        const appDocuments = await AppUtils.getAppProperty(false, 'numberOfDocuments', [ { '_ref': 'application' } ]);\n        return appDocuments;\n    }\n\n    async frontDocIsRGB() {\n        let frontDocIsRGB = false;\n        const documentID = await this.getActiveDocumentId();\n        const documentMode = await this.getDocumentMode(documentID);\n        if (documentMode._value === Constants.PSString_Document_Mode_RGB) {\n            frontDocIsRGB = true;\n        }\n        return frontDocIsRGB;\n    }\n\n    async getDocumentMode(documentId) {\n        return await AppUtils.getAppProperty(false, 'mode', [ { '_id': documentId, '_ref': 'document' } ]);\n    }\n\n    async getSpecificLayerAdjustment(documentId, layerId) {\n        return await AppUtils.getAppProperty(false, 'adjustment', [ { '_id': layerId, '_ref': 'layer' }, { '_id': documentId, '_ref': 'document' } ]);\n    }\n\n    async getActiveDocumentId() {\n        return await AppUtils.getAppProperty(false, 'documentID', [ { '_enum': 'ordinal', '_ref': 'document', '_value': 'targetEnum' } ]);\n    }\n\n    async getActiveLayerId(activeDocumentId) {\n        return await AppUtils.getAppProperty(false, 'layerID', [ { '_enum': 'ordinal', '_ref': 'layer', '_value': 'targetEnum' },\n            { '_id': activeDocumentId, '_ref': 'document' } ]);\n    }\n\n    async getLayerKind(activeDocumentId, activeLayerId) {\n        return await AppUtils.getAppProperty(false, 'layerKind', [ { '_id': activeLayerId, '_ref': 'layer' }, { '_id': activeDocumentId, '_ref': 'document' } ]);\n    }\n\n    async getLayerName(activeDocumentId, activeLayerId) {\n        return await AppUtils.getAppProperty(false, 'name', [ { '_id': activeLayerId, '_ref': 'layer' }, { '_id': activeDocumentId, '_ref': 'document' } ]);\n    }\n\n    async getNumberOfLayers(documentId) {\n        let numberOfLayers = await AppUtils.getAppProperty(false, 'numberOfLayers', [ { '_id': documentId, '_ref': 'document' } ]);\n        const backgroundLayerPresent = await this.hasBackgroundLayer(documentId);\n        if (backgroundLayerPresent === true) {\n            numberOfLayers += 1;\n        }\n        return numberOfLayers;\n    }\n\n    async moveLayer(layerId, targetLayerIndex) {\n        const moveLayerCommand = {\n            '_obj': 'move',\n            '_target': [\n                {\n                    '_id': layerId,\n                    '_ref': 'layer'\n                }\n            ],\n            'to': {\n                '_index': targetLayerIndex,\n                '_ref': 'layer'\n            },\n            'adjustment': false\n        };\n\n        return await AppUtils.executeBatchPlayCommand(moveLayerCommand);\n    }\n\n    /* if exactly one layer is selected, return its name otherwise empty string */\n    async getActiveLayerName() {\n        let activeLayerName = '';\n        const activeDocumentId = await this.getActiveDocumentId();\n        const selectedLayerIds = await AppUtils.getSelectedLayerIndices(true, activeDocumentId);\n\n        if (selectedLayerIds.length === 1) {\n            activeLayerName = await this.getLayerName(activeDocumentId, selectedLayerIds[0]);\n        }\n\n        return activeLayerName;\n    }\n\n    async getLayerProperty(property, documentId, layerId) {\n        return await AppUtils.getAppProperty(false, property, [ { '_id': layerId, '_ref': 'layer' }, { '_id': documentId, '_ref': 'document' } ]);\n    }\n\n    async getLayerInfo() {\n        const layerObject = new Object();\n        layerObject.enableApplyStyle = false;\n        layerObject.enableApplyLook = false;\n        layerObject.enableApplyText = false;\n        layerObject.enableShapeLayerApplyOperations = false;\n        layerObject.isAppliedParaStyleSupported = false;\n        layerObject.libraryLinked = false;\n        layerObject.selectionExists = false;\n        layerObject.hasLayerStyles = false;\n        layerObject.colors = [];\n        layerObject.kind = '';\n\n        const layerColors = [];\n\n        const areEqual = function(colorData1, colorData2) {\n            let key;\n            if (colorData1 && colorData2) {\n                for (key in colorData1[0].value) {\n                    if (Object.prototype.hasOwnProperty.call(colorData1[0].value, key)) {\n                        if (!Object.prototype.hasOwnProperty.call(colorData2[0].value, key) || Math.round(colorData1[0].value[key]) !== Math.round(colorData2[0].value[key])) {\n                            return false;\n                        }\n                    }\n                }\n            }\n            return true;\n        };\n\n        const pushUnique = function(colorDataValue, colorTypeValue) {\n            if (colorDataValue === undefined) {\n                return;\n            }\n            let index;\n            for (index = 0; index < layerColors.length; index++) {\n                if (areEqual(layerColors[index].data, colorDataValue)) {\n                    return;\n                }\n            }\n            layerColors.push({\n                'colorType': colorTypeValue,\n                'data': colorDataValue\n            });\n        };\n\n        const numberOfDocuments = await this.getNumberOfDocuments();\n        if (numberOfDocuments === 0) {\n            return layerObject;\n        }\n\n        const activeDocumentId = await this.getActiveDocumentId();\n        const selectedLayerIds = await AppUtils.getSelectedLayerIndices(true, activeDocumentId);\n\n        let activeLayerId;\n        let layerKind;\n        if (selectedLayerIds.length > 0) {\n            activeLayerId = selectedLayerIds.length === 1 ? selectedLayerIds[0] : await this.getActiveLayerId(activeDocumentId);\n            layerKind = await this.getLayerKind(activeDocumentId, activeLayerId);\n        }\n\n        const profileName = await AppUtils.getAppProperty(false, 'profile', [ { '_id': activeDocumentId, '_ref': 'document' } ]);\n        if (selectedLayerIds.length === 1) {\n            layerObject.kind = this.getLayerKindString(layerKind);\n            if (layerKind === this.layerKindMap['LayerKind.TEXT']) {\n                const textKeyDescriptor = await TextUtils.getTextKeyById(activeLayerId);\n                const textContents = textKeyDescriptor.textKey;\n                if (textContents && textContents.length > 0) {\n                    layerObject.enableApplyText = true;\n                    const maxLength = 10;\n                    layerObject.text = truncateString(textContents, maxLength, false);\n                    const orientation = TextUtils.getOrientationInLibrariesFormat(textKeyDescriptor);\n                    const antiAlias = TextUtils.getAntiAliasInLibrariesFormat(textKeyDescriptor);\n                    layerObject.fontInfo = await TextUtils.getLibrariesTextItemObject(textKeyDescriptor.textStyleRange[0].textStyle, orientation, antiAlias, profileName);\n                    pushUnique(layerObject.fontInfo.color, 'PS_TEXT');\n                }\n            } else if (layerKind === this.layerKindMap['LayerKind.SMARTOBJECT']) {\n                const smartObjectDesc = await this.getLayerProperty(Constants.PSKey_SmartObject, activeDocumentId, activeLayerId);\n                if (smartObjectDesc && smartObjectDesc.link && smartObjectDesc.link._obj === Constants.PSKey_CCLibrariesElement) {\n                    layerObject.libraryLinked = true;\n                }\n            }\n\n            if (layerKind !== this.layerKindMap['LayerKind.BACKGROUND']) {\n                layerObject.enableApplyStyle = true;\n            }\n            const fillColor = await ColorUtils.getSolidFillColor(activeDocumentId, activeLayerId, profileName);\n            if (fillColor.length > 0) {\n                pushUnique(fillColor, 'FILL');\n            }\n            const strokeColor = await ColorUtils.getSolidStrokeColor(activeDocumentId, activeLayerId, profileName);\n            if (strokeColor.length > 0) {\n                pushUnique(strokeColor, 'STROKE');\n            }\n            const layerEffect = await this.getLayerProperty('layerEffects', activeDocumentId, activeLayerId);\n            const solidFillColor = await ColorUtils.getLayerEffectColor(layerEffect, profileName, 'solidFill');\n            if (solidFillColor.length > 0) {\n                pushUnique(solidFillColor, 'PS_EFFECT_FILL');\n            }\n            const frameFXColor = await ColorUtils.getLayerEffectColor(layerEffect, profileName, 'frameFX');\n            if (frameFXColor.length > 0) {\n                pushUnique(frameFXColor, 'PS_EFFECT_STROKE');\n            }\n\n            const layerName = await this.getLayerName(activeDocumentId, activeLayerId);\n            layerObject.name = truncateString(layerName, Constants.PSGlobals_maxNameLength, false);\n            layerObject.fullName = layerName;\n            layerObject.hasLayerStyles = layerEffect !== undefined;\n        } else if (selectedLayerIds.length > 1) {\n            layerObject.enableApplyStyle = true;\n            if (layerKind === this.layerKindMap['LayerKind.TEXT']) {\n                layerObject.enableApplyText = true;\n            }\n        }\n\n        const psForegroundColor = await AppUtils.getForegroundColor();\n        if (psForegroundColor) {\n            const foregroundColor = ColorUtils.psSolidColorToLibraryColor(psForegroundColor, profileName);\n            pushUnique([ foregroundColor ], 'PS_FOREGROUND');\n        }\n\n        layerObject.colors = layerColors;\n        if (selectedLayerIds.length > 0) {\n            layerObject.selectionExists = true;\n            if (layerKind === this.layerKindMap['LayerKind.VECTOR']) {\n                layerObject.enableShapeLayerApplyOperations = true;\n            }\n        }\n\n        const documentMode = await this.getDocumentMode(activeDocumentId);\n        if (documentMode._value === Constants.PSString_Document_Mode_RGB) {\n            layerObject.enableApplyLook = true;\n        }\n\n        return layerObject;\n    }\n\n    async hasBackgroundLayer(activeDocumentId) {\n        return await AppUtils.getAppProperty(false, 'hasBackgroundLayer', [ { '_id': activeDocumentId, '_ref': 'document' } ]);\n    }\n\n    async isBackgroundLayer(activeDocumentId, activeLayerId) {\n        return await AppUtils.getAppProperty(false, 'background', [ { '_id': activeLayerId, '_ref': 'layer' }, { '_id': activeDocumentId, '_ref': 'document' } ]);\n    }\n\n    async getFontList() {\n        return await AppUtils.getAppProperty(false, 'fontList', [ { '_enum': 'ordinal', '_ref': 'application', '_value': 'targetEnum' } ]);\n    }\n\n    async getLayerAdjustment() {\n        return await AppUtils.getAppProperty(false, 'adjustment', [ { '_enum': 'ordinal', '_ref': 'layer', '_value': 'targetEnum' } ]);\n    }\n\n    async getDocumentTitle(documentId) {\n        return await AppUtils.getAppProperty(false, 'title', [ { '_id': documentId, '_ref': 'document' } ]);\n    }\n\n    async isMatchingDocOpen(filePath) {\n        const filePathMap = new Map();\n        filePathMap.set('file', { '_kind': 'local', '_path': filePath });\n        const isDocumentOpen = await AppUtils.getAppProperty(false, 'hasMatchingOpenDoc', [ { '_enum': 'ordinal', '_ref': 'application', '_value': 'targetEnum' } ],\n            filePathMap);\n        return isDocumentOpen;\n    }\n}\n\nexport default new PSDocumentUtils();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nexport class PSDocumentUtils {\n    psUnitMap = {\n        'pointsUnit': 'pt',\n        'millimetersUnit': 'mm',\n        'angleUnit': 'ang',\n        'percentUnit': '%',\n        'pixelsUnit': 'px'\n    };\n\n    unitToString(key) {\n        if (Object.prototype.hasOwnProperty.call(this.psUnitMap, key)) {\n            return this.psUnitMap[key];\n        }\n        return 'pt';\n    }\n\n    stringToUnit(value) {\n        const result = this.getKeyFromMap(this.psUnitMap, value);\n        return result ? result : 'pixelsUnit';\n    }\n\n    getKeyFromMap(mapObject, value) {\n        let key;\n        for (key in mapObject) {\n            if (Object.prototype.hasOwnProperty.call(mapObject, key)) {\n                if (mapObject[key] === value) {\n                    return key;\n                }\n            }\n        }\n    }\n}\n\nexport default new PSDocumentUtils();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport configuration from 'app/js/config/configuration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport environment from 'app/js/environment';\nimport productInterface from 'app/js/interface/productInterface';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport lockManager from 'app/js/managers/lockManager';\nimport { checkFileSize, setThumbnail } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport tempFileManager from 'app/js/managers/tempFileManager';\nimport documentWatchManager from 'app/js/managers/documentWatchManager';\nimport AppUtils from './appUtils';\nimport DocumentUtils from './documentUtils';\n\nexport class PSImageUtils {\n    previewMaxWidth = 248;\n    previewMaxHeight = 188;\n\n    async placeAsset(filePath, libraryNameValue, itemName, elementRef, modifiedTime, adobeStockIdValue, adobeStockLicense, isLinked) {\n        const placeAssetCommand = {\n            '_obj': 'placeEvent',\n            'ccLibrariesElement': {\n                '_obj': 'ccLibrariesElement',\n                'adobeStockId': adobeStockIdValue,\n                'adobeStockLicenseState': {\n                    '_enum': 'adobeStockLicenseState',\n                    '_value': adobeStockLicense ? 'licensed' : 'unlicensed',\n                },\n                'dateModified': modifiedTime,\n                'elementReference': elementRef,\n                'libraryName': libraryNameValue,\n                'name': itemName\n            },\n            'layerName': itemName,\n            'null': {\n                '_kind': 'local',\n                '_path': filePath\n            },\n            '_options': {\n                'dialogOptions': 'dontDisplay'\n            }\n        };\n        if (isLinked) {\n            placeAssetCommand['linked'] = true;\n        } else {\n            placeAssetCommand['unwrapLayers'] = true;\n        }\n\n        return await AppUtils.executeBatchPlayCommand(placeAssetCommand);\n    }\n\n    async openAssetForEdit(filePath, previewPath, elementRef) {\n        const openAssetForEditCommand = {\n            '_obj': 'open',\n            'ccLibrariesElement': {\n                '_obj': 'ccLibrariesElement',\n                'elementReference': elementRef\n            },\n            'externalPreviewParams': {\n                '_obj': 'externalPreviewParams',\n                'in': {\n                    '_kind': 'local',\n                    '_path': previewPath\n                },\n                'pixelHeight': this.previewMaxHeight,\n                'pixelWidth': this.previewMaxWidth\n            },\n            'fileOpenContext': {\n                '_enum': 'ordinal',\n                '_value': 'fileOpenContextCCLibrariesAsset'\n            },\n            'null': {\n                '_kind': 'local',\n                '_path': filePath\n            },\n            'overrideOpen': true,\n            '_options': {\n                'dialogOptions': 'display'\n            }\n        };\n\n        return await AppUtils.executeBatchPlayCommand(openAssetForEditCommand);\n    }\n\n    primaryRepIsTemplateFormat(element) {\n        const primaryRepresentation = element.getPrimaryRepresentation();\n        const templateTypes = FileUtils.getUsableTypes(configuration.TEMPLATE_ELEMENT_TYPE);\n        if (primaryRepresentation && (templateTypes.includes(primaryRepresentation.type) || primaryRepresentation.type === 'application/x-adobe-libraries-psdt')) {\n            return true;\n        }\n        return false;\n    }\n\n    async openImageForEditInPS(element) {\n        const representation = element.getPrimaryRepresentation();\n\n        let assetClosed = false;\n        let assetSaveInProgress = false;\n        const lockId = 'documentLock_' + element.id;\n        const libraryName = element.library && element.library.name;\n\n        const assetPath = await tempFileManager.getTempFile(representation);\n        const previewPath = FileUtils.getFileNameWithoutExtension(assetPath) + 'p' + '.png';\n\n        await this.openAssetForEdit(assetPath, previewPath, element.getLegacyReference());\n\n        const activeDocumentId = await DocumentUtils.getActiveDocumentId();\n\n        const isDocumentOpen = await DocumentUtils.isMatchingDocOpen(assetPath);\n\n        if (!isDocumentOpen) {\n            // Cleanup for failed open.\n            tempFileManager.deleteTempFile(assetPath);\n            productInterface.elementEditCompleted(element);\n            return;\n        }\n\n        const documentTitle = await DocumentUtils.getDocumentTitle(activeDocumentId);\n        const listenerId = documentWatchManager.startListening(documentTitle, assetPath, event => {\n            if (event === 'closed') {\n                lockManager.obtainLock(lockId, function() {\n                    documentWatchManager.stopListening(listenerId);\n                    assetClosed = true;\n                    if (assetSaveInProgress === false) {\n                        tempFileManager.deleteTempFile(assetPath);\n                    }\n\n                    productInterface.elementEditCompleted(element);\n\n                    lockManager.releaseLock(lockId);\n                });\n            } else if (event === 'saved') {\n                // Prevent save from updating library, if the asset is too big\n                if (!checkFileSize(assetPath)) {\n                    return;\n                }\n\n                assetSaveInProgress = true;\n\n                // Check if the library exists - if it was deleted, switch to the current library\n                let library = element.library;\n                const isDeleted = !library || library.isDeletedLocally;\n                let isRecovered;\n\n                if (isDeleted || !library.isWritable) {\n                    library = libraryManager.getRecoveryLibrary(libraryName);\n\n                    if (!library) {\n                        // There's no recovery library, so don't do anything\n                        return;\n                    }\n\n                    isRecovered = true;\n                }\n\n                lockManager.obtainLock(lockId, () => {\n                    // If the element we're editing was deleted or recovered, we recreate it as a new element, so the changes aren't lost.\n                    // Otherwise, we just remove the existing representations so we can add the new ones\n                    const stockData = AdobeStockUtils.getStockDataForElement(element);\n                    if (element.isDeletedLocally || isRecovered) {\n                        element = library.createElement(element.name, element.type);\n                    } else {\n                        element.beginOperation();\n                        element.removeAllRepresentations();\n                    }\n\n                    // Update the representation\n                    const assetMimeType = FileUtils.fileNameToMimeType(assetPath, element.type);\n                    const newRepresentation = element.createRepresentation(assetMimeType, 'primary');\n                    if (stockData) {\n                        // If this element is an adobe stock image, make sure we keep its stock image data\n                        AdobeStockUtils.setStockData(newRepresentation, stockData);\n                    }\n                    const promises = [];\n                    promises.push(newRepresentation.setContentFromPath(assetPath));\n\n                    if (previewPath && FileUtils.existsFile(previewPath)) {\n                        promises.push(setThumbnail(element, elementConfiguration.getThumbnailSize(element), previewPath));\n                    }\n\n                    // Final cleanup after saving.\n                    const done = () => {\n                        const operationsFinished = element.endOperation();\n\n                        lockManager.releaseLock(lockId);\n\n                        if (isRecovered) {\n                            elementSelectionState.revealElement(element);\n\n                            if (isDeleted) {\n                                environment.showError(translate('DL_WARNING_RECOVERED_FROM_DELETED', { recoveryLibraryName: library.name }));\n                            } else {\n                                environment.showError(translate('DL_WARNING_RECOVERED_FROM_READONLY', { recoveryLibraryName: library.name, originalLibraryName: libraryName }));\n                            }\n                        }\n\n                        operationsFinished.then(() => {\n                            if (assetClosed) {\n                                tempFileManager.deleteTempFile(assetPath);\n                            } else {\n                                tempFileManager.updateTempFile(newRepresentation, assetPath);\n                            }\n                            assetSaveInProgress = false;\n\n                            // Do this last, after the update is committed because PS could unload\n                            // the extension as soon as it receives the event (in a quit scenario)\n                            productInterface.sendElementUpdated(newRepresentation);\n                        });\n                    };\n\n                    Promise.all(promises).then(done, done);\n                });\n            }\n        });\n    }\n\n    editImageOr3DElement(element) {\n        // Never try to edit a graphic based on a template format\n        if (this.primaryRepIsTemplateFormat(element)) {\n            return false;\n        }\n\n        if (!elementConfiguration.isEditable(element)) {\n            // Returning false, so we fall back to the edit original workflow.\n            // (if edit original is disabled, this will display the old 'can't use this' error message)\n            return false;\n        }\n\n        // At this point, we're guaranteed to have a primary representation that is of an editable type\n        return this.openImageForEditInPS(element);\n    }\n}\n\nexport default new PSImageUtils();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport AppUtils from './appUtils';\nimport ColorUtils from './colorUtils';\n\nexport class PSBrushUtils {\n    async addBrushToDocument(path, name, brushSettings) {\n        if (brushSettings && brushSettings.tool) {\n            await AppUtils.setCurrentTool(brushSettings.tool);\n        }\n\n        const toolSupportBrushes = await AppUtils.currentToolSupportsBrushes();\n        if (!toolSupportBrushes) {\n            await AppUtils.setCurrentTool('paintbrushTool');\n        }\n\n        await this.applyBrushFile(path);\n\n        if (brushSettings) {\n            if (brushSettings.blendMode || brushSettings.opacity || brushSettings.flow) {\n                // get current tool options\n                const currentToolData = await AppUtils.getAppProperty(true, 'tool', [ { '_enum': 'ordinal', '_ref': 'application', '_value': 'targetEnum' } ]);\n                const currentToolOptions = currentToolData[0].currentToolOptions;\n\n                // override the provided settings in current tool options\n                if (brushSettings.blendMode) {\n                    currentToolOptions.mode = { _enum: 'blendMode', _value: brushSettings.blendMode };\n                }\n                if (brushSettings.opacity) {\n                    currentToolOptions.opacity = { '_unit': 'percentUnit', '_value': brushSettings.opacity * 100 };\n                }\n                if (brushSettings.flow) {\n                    currentToolOptions.flow = { '_unit': 'percentUnit', '_value': brushSettings.flow * 100 };\n                }\n\n                await AppUtils.setToolOptions(currentToolData[0].tool._enum, currentToolOptions);\n            }\n\n            if (brushSettings.color) {\n                const solidColor = ColorUtils.libraryColorToPSSolidColor(brushSettings.color);\n                await AppUtils.setForegroundColor(solidColor);\n            }\n        }\n    }\n\n    async applyBrushFile(path) {\n        const applyBrushFileCommand = {\n            '_obj': 'applyBrushFile',\n            'from': {\n                '_kind': 'local',\n                '_path': path\n            }\n        };\n\n        return await AppUtils.executeBatchPlayCommand(applyBrushFileCommand);\n    }\n\n    async saveBrushByIndex(index) {\n        const tempFolderPath = await AppUtils.tempFolderPath();\n        const randomNumber = FileUtils.generateUuid();\n        const abrPath = tempFolderPath + '/Brush' + randomNumber + '.abr';\n        const pngPath = tempFolderPath + '/Brush' + randomNumber + '.png';\n\n        const saveBrushAndThumbnailFilesCommand = {\n            '_obj': 'save',\n            '_target': [\n                {\n                    '_ref': 'brush',\n                    '_index': index\n                }\n            ],\n            'to': {\n                '_kind': 'local',\n                '_path': abrPath\n            },\n            'thumbnail': {\n                '_kind': 'local',\n                '_path': pngPath\n            }\n        };\n\n        await AppUtils.executeBatchPlayCommand(saveBrushAndThumbnailFilesCommand);\n\n        return {\n            abrPath,\n            previewPath: pngPath\n        };\n    }\n}\n\nexport default new PSBrushUtils();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport AppUtils from './appUtils';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport configuration from 'app/js/config/configuration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport { checkLibraryWritable, createElementExtraMetrics } from 'app/js/utils/libraryUtils';\n\nexport class PSGradientUtils {\n    async addPSGradient(name = '', gradientData, previewPath, opType, library) {\n        if (!gradientData) {\n            return Promise.reject('Could not add gradient: No gradient information provided');\n        }\n\n        library = library || libraryManager.getDefaultLibrary();\n\n        if (!checkLibraryWritable(library)) {\n            return Promise.reject('Could not add gradient: Library not writable');\n        }\n\n        if (gradientData.angle === undefined) {\n            // Default Photoshop gradient angle is 90 degrees, not 0\n            gradientData.angle = 90;\n        }\n\n        const newElement = createElementExtraMetrics(library, name, configuration.GRADIENT_ELEMENT_TYPE, { opType });\n\n        newElement\n            .createRepresentation(configuration.GRADIENT_REPRESENTATION_TYPE, 'primary')\n            .setValue(configuration.GRADIENT_NAMESPACE, configuration.GRADIENT_DATA_KEY, gradientData);\n\n        if (previewPath && FileUtils.existsFile(previewPath)) {\n            newElement\n                .createRepresentation('image/png', 'rendition')\n                .setContentFromPath(previewPath);\n        }\n\n        newElement.endOperation();\n\n        // Show the addition if in library view\n        if (libraryManager.currentLibrary === library) {\n            elementSelectionState.revealElement(newElement);\n        }\n\n        return newElement;\n    }\n\n    async applyGradientOperation(operation, gradientData) {\n        const gradientCommand = {\n            '_obj': operation,\n            'textKey': JSON.stringify(gradientData),\n            '_options': {\n                'dialogOptions': 'dontDisplay'\n            }\n        };\n\n        return await AppUtils.executeBatchPlayCommand(gradientCommand);\n    }\n\n    async saveGradientByIndex(index) {\n        if (index === 0) {\n            // Index 0 means we are not requesting a thumbnail\n            return null;\n        }\n\n        const tempFolderPath = await AppUtils.tempFolderPath();\n        const randomNumber = FileUtils.generateUuid();\n        const pngPath = tempFolderPath + '/Gradient' + randomNumber + '.png';\n\n        const saveGradientCommand = {\n            '_obj': 'save',\n            '_target': [\n                {\n                    '_ref': 'gradientClassEvent',\n                    '_index': index\n                }\n            ],\n            'thumbnail': {\n                '_kind': 'local',\n                '_path': pngPath\n            }\n        };\n\n        await AppUtils.executeBatchPlayCommand(saveGradientCommand);\n\n        return pngPath;\n    }\n}\n\nexport default new PSGradientUtils();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport AppUtils from './appUtils';\nimport DocumentUtils from './documentUtils';\n\nexport class PSLayerStyleUtils {\n\n    async applyStyleFile(filePath) {\n        const applyStyleFileCommand = {\n            '_obj': 'applyStyleFile',\n            '_target': [\n                {\n                    '_enum': 'ordinal',\n                    '_ref': 'layer',\n                    '_value': 'targetEnum'\n                }\n            ],\n            'from': {\n                '_kind': 'local',\n                '_path': filePath\n            }\n        };\n\n        return await AppUtils.executeBatchPlayCommand(applyStyleFileCommand);\n    }\n\n    async applyLayerStyle(path) {\n        const numberOfDocuments = await DocumentUtils.getNumberOfDocuments();\n        if (numberOfDocuments === 0) {\n            return;\n        }\n\n        await this.applyStyleFile(path);\n    }\n\n    async saveStyleFile() {\n        const numberOfDocuments = await DocumentUtils.getNumberOfDocuments();\n        if (numberOfDocuments === 0) {\n            return;\n        }\n\n        const activeDocumentId = await DocumentUtils.getActiveDocumentId();\n        const activeLayerId = await DocumentUtils.getActiveLayerId(activeDocumentId);\n        const layerNameString = await DocumentUtils.getLayerName(activeDocumentId, activeLayerId);\n\n        const fileData = {\n            'layerName': layerNameString,\n            files: []\n        };\n\n        const tempFolderPath = await AppUtils.tempFolderPath();\n        const randomNumber = FileUtils.generateUuid();\n        const aslPath = tempFolderPath + '/LayerStyle' + randomNumber + '.asl';\n        const pngPath = tempFolderPath + '/LayerStyle' + randomNumber + '.png';\n        await this.saveStyleAndThumbnailToFile(aslPath, pngPath);\n\n        fileData.files.push(aslPath);\n        fileData.rendition = pngPath;\n        return fileData;\n    }\n\n    async saveStyleAndThumbnailToFile(filePath, thumbnailPath) {\n        const saveStyleFileCommand = {\n            '_obj' : 'saveStyleFile',\n            '_target': [\n                {\n                    '_enum': 'ordinal',\n                    '_ref': 'layer',\n                    '_value': 'targetEnum'\n                }\n            ],\n            'to': {\n                '_kind': 'local',\n                '_path': filePath\n            }\n        };\n\n        const thumbnailStyleFileCommand = {\n            '_obj': 'thumbnailStyleFile',\n            'from': {\n                '_kind': 'local',\n                '_path': filePath\n            },\n            'thumbnail': {\n                '_kind': 'local',\n                '_path': thumbnailPath\n            }\n        };\n\n        return await AppUtils.executeMultipleBatchPlayCommand([ saveStyleFileCommand, thumbnailStyleFileCommand ]);\n    }\n\n    async saveLayerStyleByIndex(index) {\n        const tempFolderPath = await AppUtils.tempFolderPath();\n        const randomNumber = FileUtils.generateUuid();\n        const aslPath = tempFolderPath + '/LayerStyle' + randomNumber + '.asl';\n        const pngPath = tempFolderPath + '/LayerStyle' + randomNumber + '.png';\n\n        const saveStyleAndThumbnailFilesCommand = {\n            '_obj': 'save',\n            '_target': [\n                {\n                    '_ref': 'style',\n                    '_index': index\n                }\n            ],\n            'to': {\n                '_kind': 'local',\n                '_path': aslPath\n            },\n            'thumbnail': {\n                '_kind': 'local',\n                '_path': pngPath\n            }\n        };\n\n        await AppUtils.executeBatchPlayCommand(saveStyleAndThumbnailFilesCommand);\n\n        return {\n            aslPath,\n            previewPath: pngPath\n        };\n    }\n}\n\nexport default new PSLayerStyleUtils();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport { checkFileSize } from 'app/js/utils/libraryUtils';\nimport { addLayerStyleElement, addGraphicElement } from 'app/js/utils/addElementUtils';\nimport ColorUtils from './colorUtils';\nimport GradientUtils from './gradientUtils';\nimport TextUtils from './textUtils';\n\nconst getElementProperties = element => {\n    if (!element) {\n        return {};\n    }\n\n    const matches = element.type && element.type.match(/application\\/vnd\\.adobe\\.element\\.(.*)\\+dcx/);\n    const elementType = (matches && matches.length === 2) ? matches[1] : element.type;\n    const properties = { elementID: element.id, elementType };\n\n    const library = element.library;\n\n    if (library) {\n        properties.libraryID = library.id;\n        properties.libraryElementCount = library.elements.length;\n\n        if (library.collaboration) {\n            properties.libraryShared = library.collaboration;\n        }\n    }\n\n    return properties;\n};\n\nconst doHighbeam = (eventName, properties) => {\n    // The intent of doHighbeam is to ship event details to Photoshop to\n    // have them logged via Highbeam (Headlights). Since these events\n    // originate in the Photoshop layer of the Libraries panel, we want\n    // to log them unpredicated, and hence have added a `force`\n    // parameter which is `true` here.\n    if (configuration.currentProduct.reportEvent) {\n        configuration.currentProduct.reportEvent(eventName, properties, true);\n    } else {\n        console.error('Highbeam analytics not available.');\n    }\n};\n\n/*\nFormat of layerStyle is based on what PS sends to the panel,\ne.g.:\n\n{\n    assetType: \"layerStyle\",\n    name: \"<name>\",\n    aslPath: \"<path to asl file>\"\n    pngPath: \"<path to PNG preview file>\"\n}\n*/\nconst onPushLayerStyle = layerStyle => {\n    const stylePrimaryRep = {};\n    stylePrimaryRep.path = layerStyle.aslPath;\n    return addLayerStyleElement(layerStyle.name, stylePrimaryRep, layerStyle.pngPath, libraryManager.getDefaultLibrary(), layerStyle.opType).then(function(element) {\n        return elementSelectionState.revealElement(element);\n    });\n};\n\n/*\nFormat of characterStyle is based on what PS sends to the panel,\ne.g.:\n\n{\n    assetType: \"characterStyle\",\n    name: \"<name>\",\n    descriptorID: <ID of descriptor w/ style info>\n    previewPath: \"<path to PNG preview file>\"\n}\n*/\nconst onPushCharacterStyle = psCharStyleInfo => {\n    return TextUtils.addPSCharacterStyleWithDesc(psCharStyleInfo.name, psCharStyleInfo.characterStyle, psCharStyleInfo.profile, psCharStyleInfo.previewPath, psCharStyleInfo.opType)\n        .then(element => elementSelectionState.revealElement(element));\n};\n\n/*\nFormat of psColorInfo is based on what PS sends to the panel,\ne.g.:\n\n{\n    assetType: \"color\",\n    name: \"<name>\",\n    primary: { <color data from PSColor::GetDescriptor()> }\n    secondary: {\n        _obj: <color space>\n        blue: <value>,\n        grain: <value>,\n        red: <value>\n    }\n}\n\n\"secondary\" only appears if \"primary\" is not in RGB form.\nYes it's actually grain, not green.\n*/\nconst onPushColor = psColorInfo => {\n    return ColorUtils.addPSColor(psColorInfo.name, psColorInfo.primary, psColorInfo.secondary, psColorInfo.opType);\n};\n\n/*\nFormat of psGradientInfo is based on what PS sends to the panel,\ne.g.:\n\n{\n    assetType: \"gradient\",\n    name: \"<name>\",\n    primary: { <gradient data from TCustomGradient::WriteDescriptorForLibraries> }\n}\n\n*/\nconst onPushGradient = psGradientInfo => {\n    return GradientUtils.addPSGradient(psGradientInfo.name, psGradientInfo.primary, psGradientInfo.previewPath, psGradientInfo.opType);\n};\n\nconst onPushGraphic = (parameters, eventMetadata) => {\n    const assetPath = parameters.assetPath;\n\n    // Prevent adding to library, if the asset is too big.\n    // Do this before we get/create the library.\n    if (!checkFileSize(assetPath, !parameters.moveFile)) {\n        return Promise.reject('Could not create element: one or more files exceed 1GB limit');\n    }\n\n    // Put together the param object that addGraphicElement expects\n    const file = { path: assetPath,\n        relationship: 'primary',\n        dimensions: { width: parameters.exportInfo.pixelWidth,\n            height: parameters.exportInfo.pixelHeight } };\n\n    const appMetadata = {};\n    appMetadata.layerIds = parameters.exportInfo.layerIDs;\n    appMetadata.documentId = parameters.exportInfo.documentID;\n    appMetadata.pushEventMetadata = eventMetadata;\n\n    // Show the addition\n    return addGraphicElement(parameters.name, [ file ], parameters.previewPath, libraryManager.getDefaultLibrary(), parameters.opType, appMetadata)\n        .then(element => elementSelectionState.revealElement(element));\n};\n\n// type is the class of the top-level TActionDescriptor\nconst PUSH_ASSET_HANDLERS = [\n    {\n        type: 'characterStyle',\n        callback: onPushCharacterStyle\n    },\n    {\n        type: 'color',\n        callback: onPushColor\n    },\n    {\n        type: 'layerStyle',\n        callback: onPushLayerStyle\n    },\n    {\n        type: 'graphic',\n        callback: onPushGraphic\n    },\n    {\n        type: 'gradient',\n        callback: onPushGradient\n    }\n];\n\nexport function pushAssetToLibrary(parameters) {\n    const metadata = parameters.event_metadata;\n\n    const respond = function(response) {\n        const result = {\n            appMetadata: { pushEventMetadata: metadata },\n            response\n        };\n\n        const photoshopCCLibrariesPanel = window.nodeRequire('photoshop').cclibrariespanel;\n        photoshopCCLibrariesPanel.pushAssetToLibraryResponse(result);\n    };\n\n    const handleOK = element => {\n        respond({ status: 'ok' });\n        doHighbeam('pushAssetToLibrary', getElementProperties(element));\n    };\n    const handleError = error => respond({ status: 'error', details: error });\n\n    if (!parameters || !metadata) {\n        return Promise.reject('pushAssetToLibrary failed: parameter error');\n    }\n\n    const type = parameters.assetType;\n\n    if (!type) {\n        return Promise.reject('pushAssetToLibrary failed: asset type not defined');\n    }\n\n    // Filter out handlers that weren't triggered\n    const toCall = PUSH_ASSET_HANDLERS.filter(handler => type === handler.type);\n    if (toCall.length === 0) {\n        return Promise.reject('pushAssetToLibrary failed: No asset handler found for ' + type);\n    }\n\n    return Promise.all(toCall.map(handler => handler.callback(parameters, metadata).then(handleOK, handleError)));\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport appState from 'app/js/appState';\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { pushAssetToLibrary } from './push';\nimport AppUtils from './appUtils';\n\nclass PSUXPEvents {\n    lastDocID;\n\n    onDocInfoChangedEvent = (_message, psEventData) => {\n        layerSelectionManager.handleSelectionChange();\n\n        if (psEventData.documentID !== this.lastDocID) {\n            configuration.currentProduct.handleActiveDocChanged(psEventData.documentID);\n            this.lastDocID = psEventData.documentID;\n        }\n        return false;\n    };\n\n    onForegroundColorChangedEvent = () => {\n        layerSelectionManager.handleSelectionChange();\n        return false;\n    };\n\n    // Looks are only enabled for RGB docs, so have to detect mode changes.\n    onConvertModeEvent = () => {\n        layerSelectionManager.handleSelectionChange();\n        return false;\n    };\n\n    onFontListChanged = () => {\n        configuration.currentProduct.fontManager.invalidateFontList();\n    };\n\n    onPreferenceChanged = () => {\n        AppUtils.getShowTooltips().then(showTooltips => configuration.showTooltips = showTooltips);\n    };\n\n    PS_EVENTS = [\n        {\n            name: 'dlDocInfoChanged',\n            callback: this.onDocInfoChangedEvent\n        },\n        {\n            name: 'foregroundColorChanged',\n            callback: this.onForegroundColorChangedEvent\n        },\n        {\n            name: 'fontListChanged',\n            callback: this.onFontListChanged\n        },\n        {\n            name: 'convertMode',\n            callback: this.onConvertModeEvent\n        },\n        {\n            name: 'preferencesChanged',\n            callback: this.onPreferenceChanged\n        }\n    ];\n\n    PUSH_ASSET_TO_LIBRARY_EVENT = 'pushAssetToLibrary';\n\n    handlePushAssetToLibrary = (_message, csEvent) => {\n        if (!csEvent) {\n            return;\n        }\n        return pushAssetToLibrary(csEvent);\n    };\n\n    listen() {\n        this.PS_EVENTS.forEach(event => {\n            environment.addEventListener(event.name, event.callback);\n        });\n\n        // This needs to be sent after all event registration is done becasue it indicates to PS\n        // that the panel is ready to handle requests. We put it in waitForInitialLoad to ensure\n        // that the panel is fully loaded as well.\n        appState.panel.libraryManager.waitForInitialLoad().then(() => {\n            const photoshopCCLibrariesPanel = window.nodeRequire('photoshop').cclibrariespanel;\n            photoshopCCLibrariesPanel.librariesExtensionReady();\n        });\n\n        // listen for other CEP events\n        environment.addEventListener(this.PUSH_ASSET_TO_LIBRARY_EVENT, this.handlePushAssetToLibrary);\n\n        // Load the preferences on launch\n        this.onPreferenceChanged();\n    }\n\n    stop() {\n        this.PS_EVENTS.forEach(event => {\n            environment.removeEventListener(event.name, event.callback);\n        });\n        environment.removeEventListener(this.PUSH_ASSET_TO_LIBRARY_EVENT, this.handlePushAssetToLibrary);\n    }\n}\n\nexport default new PSUXPEvents();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport AppUtils from './appUtils';\nimport * as Constants from './constants';\n\nexport class PSHighbeamUtils {\n    async logHighbeam(eventName, properties, force) {\n        if (eventName === 'createElement' || eventName === 'useElement' || eventName === 'createLink' || force) {\n            // Log events to Highbeam so CC Libraries usage can be compared\n            // to usage of other Photoshop features.\n\n            // This is the data group name; it should be identical across all calls for a given\n            // data group and self descriptive.\n            // By not including eventName in the group name, we are recording a single data\n            // group for Design Library (eventName gets added as a property).\n            const highbeamDataGroupName = 'Design Library';\n\n            // Helper to handle null and undefined properties which can't be added to\n            // an ActionDescriptor. When properties aren't set, log 'N/A' rather than\n            // letting Highbeam fill in a default value.\n            const safeAddStringPropertyToCommand = function(command, key, property) {\n                if (property) {\n                    command[key] = property;\n                } else {\n                    command[key] = 'N/A';\n                }\n            };\n\n            const logHighbeamCommand = {\n                '_obj': 'headlightsInfo',\n            };\n\n            // Required params:\n            //   - eventRecord: Data group name\n            safeAddStringPropertyToCommand(logHighbeamCommand, Constants.PSEvent_Record, highbeamDataGroupName);\n\n            // There should be a well defined and limited set of values for each property\n            // which is what you want to make Highbeam data most usable. Library/element\n            // IDs are an exception as we log them to look at aggregate per-library and\n            // per-element data.\n            safeAddStringPropertyToCommand(logHighbeamCommand, Constants.PSKey_HighbeamEventName, eventName);\n            safeAddStringPropertyToCommand(logHighbeamCommand, Constants.PSKey_HighbeamLibraryID, properties.libraryID);\n            safeAddStringPropertyToCommand(logHighbeamCommand, Constants.PSKey_HighbeamLibraryElementCount, properties.libraryElementCount);\n            safeAddStringPropertyToCommand(logHighbeamCommand, Constants.PSKey_HighbeamElementID, properties.elementID);\n            safeAddStringPropertyToCommand(logHighbeamCommand, Constants.PSKey_HighbeamElementType, properties.elementType);\n\n            // Add properties that we only want for specific event types\n            if (eventName === 'useElement') {\n                safeAddStringPropertyToCommand(logHighbeamCommand, Constants.PSKey_HighbeamRepresentationType, properties.representationType);\n                safeAddStringPropertyToCommand(logHighbeamCommand, Constants.PSKey_HighbeamOpType, properties.opType);\n                safeAddStringPropertyToCommand(logHighbeamCommand, Constants.PSKey_HighbeamDetails, properties.details);\n            }\n\n            if (eventName === 'createElement') {\n                safeAddStringPropertyToCommand(logHighbeamCommand, Constants.PSKey_HighbeamOpType, properties.opType);\n            }\n\n            if (eventName === 'createLink') {\n                safeAddStringPropertyToCommand(logHighbeamCommand, Constants.PSKey_HighbeamOpType, properties.opType);\n            }\n\n            return await AppUtils.executeBatchPlayCommand(logHighbeamCommand);\n        }\n    }\n}\n\nexport default new PSHighbeamUtils();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport GradientElementConfig from 'app/js/config/elements/GradientElementConfig';\nimport GradientUtils from '../gradientUtils';\n\nexport default class PHXSUXPGradientElementConfig extends GradientElementConfig {\n\n    // [CCXC-7357] Gradients created in Capture 5.2 erroneously defaulted to a smoothness value of 1\n    // which in Photoshop made smoothness appear as 0% instead of 100% in the Gradients preset panel.\n    // To fix this, we strip out the smoothness from gradients created in this older version of Capture,\n    // which are identifiable by the presence of a gradient#trackingdata field (which has since been removed) and smoothness of 1\n    _fixGradientData(representation) {\n        const data = representation.getValue(configuration.GRADIENT_NAMESPACE, configuration.GRADIENT_DATA_KEY);\n        const trackingData = representation.getValue(configuration.GRADIENT_NAMESPACE, 'trackingdata');\n        if (trackingData && data && data.smoothness === 1) {\n            delete data.smoothness;\n        }\n    }\n\n    // add new gradient to the gradients panel\n    _defineCustomGradient(element) {\n        const representation = this._config.findUsableRepresentation(element);\n        if (representation) {\n            const data = representation.getValue(configuration.GRADIENT_NAMESPACE, configuration.GRADIENT_DATA_KEY);\n\n            if (data) {\n                this._fixGradientData(representation);\n                data.name = element.name;\n                reportApplyMetric(representation, 'defineCustomGradient');\n                return GradientUtils.applyGradientOperation('defineCustomGradient', data);\n            }\n        }\n    }\n\n    // apply to selection on canvas\n    _applyCustomGradient(element) {\n        const representation = this._config.findUsableRepresentation(element);\n        if (representation) {\n            const data = representation.getValue(configuration.GRADIENT_NAMESPACE, configuration.GRADIENT_DATA_KEY);\n\n            if (data) {\n                this._fixGradientData(representation);\n                data.name = element.name;\n                reportApplyMetric(representation, 'applyCustomGradient');\n                return GradientUtils.applyGradientOperation('applyCustomGradient', data);\n            }\n        }\n    }\n\n    getApplyOperations(element) {\n        if (!configuration.currentProduct.config.enableGradientContextMenu || !element\n            || this.isDisabled(element)) {\n            return [];\n        }\n        // Return the array of operations.\n        return [\n            {\n                name: 'DL_ADD_GRADIENT_TO_PRESETS',\n                onClick: false,\n                apply: () => this._defineCustomGradient(element),\n                displayInMenu: true\n            },\n            {\n                name: 'DL_SET_FILL_GRADIENT_TOOLTIP',\n                onClick: true,\n                apply: () => this._applyCustomGradient(element),\n                displayInMenu: true\n            } ];\n    }\n\n    isDisabled(element) {\n        const representation = element.getPrimaryRepresentation();\n        const gradient = representation && representation.getValue('gradient', 'data');\n        if (!gradient) {\n            return false;\n        }\n        return ![ 'radial', 'linear', 'noise' ].includes(gradient.type);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport ColorElementConfig from 'app/js/config/elements/ColorElementConfig';\nimport ColorUtils from '../colorUtils';\n\nexport default class PHXSUXPColorElementConfig extends ColorElementConfig {\n\n    // The colorData parameter is so that we can use this code for color themes too\n    _setColor(element, operation, historyName, colorData, after) {\n        if (!colorData) {\n            colorData = [];\n            // JSX expects primary representation to be the first element in the array\n            element.representations.forEach(rep => {\n                const data = rep.getValue(configuration.COLOR_NAMESPACE, configuration.COLOR_DATA_KEY);\n                if (rep.relationship === 'primary') {\n                    colorData.unshift(data);\n                } else {\n                    colorData.push(data);\n                }\n            });\n\n            if (element.representations.length > 0) {\n                reportApplyMetric(element.representations[0], operation);\n            }\n        }\n\n        if (after) {\n            after(operation);\n        }\n\n        if (operation === 'setStrokeColor') {\n            return ColorUtils.setStrokeColor(colorData, historyName);\n        } else if (operation === 'setColor' || operation === 'setFillColor') {\n            return ColorUtils.setColor(colorData, historyName);\n        } else if (operation === 'setColorOverlay') {\n            return ColorUtils.setColorOverlay(colorData, historyName);\n        } else {\n            return new Error('Unsupported color operation : ' + operation);\n        }\n    }\n\n    getApplyOperations(element) {\n\n        const layerInfo = layerSelectionManager.getLayerInfo();\n        const setColorOperation = {\n            name: 'DL_SET_COLOR_TOOLTIP',\n            icon: 'paintbucket',\n            apply: (colorData, after) => this._setColor(element, 'setColor', translate('DL_SET_COLOR_TOOLTIP'), colorData, after),\n            displayInMenu: true\n        };\n        const operations = [];\n\n        if (layerInfo && layerInfo.selectionExists) {\n            if (layerInfo.enableShapeLayerApplyOperations) {\n                operations.push({\n                    name: 'DL_SET_FILL_COLOR_TOOLTIP',\n                    icon: 'paintbucket',\n                    apply: (colorData, after) => this._setColor(element, 'setFillColor', translate('DL_SET_FILL_COLOR_TOOLTIP'), colorData, after),\n                    displayInMenu: true\n                });\n\n                operations.push({\n                    name: 'DL_SET_STROKE_COLOR_TOOLTIP',\n                    icon: 'brush',\n                    apply: (colorData, after) => this._setColor(element, 'setStrokeColor', translate('DL_SET_STROKE_COLOR_TOOLTIP'), colorData, after),\n                    displayInMenu: true\n                });\n            } else {\n                operations.push(setColorOperation);\n            }\n\n            operations.push({\n                name: 'DL_SET_COLOR_OVERLAY_TOOLTIP',\n                icon: 'brush',\n                apply: (colorData, after) => this._setColor(element, 'setColorOverlay', translate('DL_SET_COLOR_OVERLAY_TOOLTIP'), colorData, after),\n                displayInMenu: true,\n                disableClick: true\n            });\n        } else {\n            operations.push(setColorOperation);\n        }\n\n        if (operations[0].disableClick !== true) {\n            operations[0].onClick = true;\n        }\n\n        return operations;\n    }\n\n    defaultEditOperation(element) {\n        const representation = this._config.findUsableRepresentation(element);\n        const colorData = representation && representation.getValue(configuration.COLOR_NAMESPACE, configuration.COLOR_DATA_KEY);\n\n        return new Promise(resolve => {\n            ColorUtils.replaceColor(colorData).then(function(returnedColors) {\n                if (Array.isArray(returnedColors) && returnedColors.length > 0) {\n                    element.beginOperation();\n                    element.removeAllRepresentations();\n\n                    returnedColors.forEach(function(rep, index) {\n                        const relationship = index === 0 ? 'primary' : 'rendition';\n                        const newRepresentation = element.createRepresentation(configuration.COLOR_REPRESENTATION_TYPE, relationship);\n                        newRepresentation.setValue(configuration.COLOR_NAMESPACE, configuration.COLOR_DATA_KEY, rep);\n                    });\n\n                    element.endOperation();\n                    resolve();\n                }\n            });\n        });\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport AppUtils from './appUtils';\n\nexport class PSTemplateUtils {\n    async openDocumentFromTemplate(path, element, elementReferenceObj) {\n        const templateCommand = {\n            '_obj': 'open',\n            'null': {\n                '_path': path,\n                '_kind': 'local'\n            },\n            'fileOpenContext': {\n                '_enum': 'ordinal',\n                '_value': 'fileOpenContextCCLibrariesAsset'\n            },\n            'overrideOpen': true,\n            'template': true,\n            '_options': {\n                'dialogOptions': 'display'\n            }\n        };\n\n        if (elementReferenceObj) {\n            templateCommand['ccLibrariesElement'] = {\n                '_obj': 'ccLibrariesElement',\n                'elementReference': elementReferenceObj\n            };\n        }\n\n        return await AppUtils.executeBatchPlayCommand(templateCommand);\n    }\n}\n\nexport default new PSTemplateUtils();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport TemplateElementConfig from 'app/js/config/elements/TemplateElementConfig';\nimport TemplateUtils from '../templateUtils';\n\nexport default class PHXSUXPTemplateElementConfig extends TemplateElementConfig {\n\n    _openDocumentFromTemplate(element, representation) {\n        reportApplyMetric(representation, 'useTemplate');\n\n        return representation.getContentPath().then(path => {\n            return TemplateUtils.openDocumentFromTemplate(path, element.name, element.getLegacyReference());\n        });\n    }\n\n    getCompatibleRepresentation(element) {\n        const templateTypes = FileUtils.getUsableTypes(element.type);\n        const representation = element.representations.find(rep => {\n            const isRendition = rep.relationship === 'rendition';\n            const isTemplate = this._config.isRepresentationCompatible(rep, templateTypes);\n\n            return !isRendition && isTemplate;\n        });\n        return representation;\n    }\n\n    getApplyOperations(element) {\n        const representation = this.getCompatibleRepresentation(element);\n\n        let applyOperation = () => this._openDocumentFromTemplate(element, representation);\n\n        if (!representation) {\n            const templateTypes = FileUtils.getUsableTypes(element.type);\n            if (!this._config.isRepresentationCompatible(element.getPrimaryRepresentation(), templateTypes, true)) {\n                return [];\n            }\n\n            // Otherwise,\n            const errorMessage = AdobeStockUtils.getStockTemplateUseError(element);\n            applyOperation = () => environment.showError(translate(errorMessage));\n        }\n\n        return [ {\n            name: 'DL_OPEN_DOC_FROM_TEMPLATE',\n            icon: 'template',\n            onDoubleClick: true,\n            apply: applyOperation,\n            displayInMenu: true\n        } ];\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n// import environment from 'app/js/environment';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport BrushElementConfig from 'app/js/config/elements/BrushElementConfig';\nimport BrushUtils from '../brushUtils';\n\nexport default class PHXSUXPBrushElementConfig extends BrushElementConfig {\n\n    _addBrushToDocument(element, representation) {\n        reportApplyMetric(representation, 'useBrush');\n\n        return representation.getContentPath().then(function(path) {\n            const namespace = 'photoshop';\n            const brushSettings = {\n                tool: representation.getValue(namespace, 'tool'),\n                flow: representation.getValue(namespace, 'flow'),\n                opacity: representation.getValue(namespace, 'opacity'),\n                blendMode: representation.getValue(namespace, 'blendMode'),\n                color: representation.getValue(namespace, 'color')\n            };\n\n            return BrushUtils.addBrushToDocument(path, element.name, brushSettings);\n        });\n    }\n\n    getCompatibleRepresentation(element) {\n        const brushTypes = FileUtils.getUsableTypes(element.type);\n        const representation = element.representations.find(rep => {\n            const isRendition = rep.relationship === 'rendition';\n            const isBrush = this._config.isRepresentationCompatible(rep, brushTypes);\n\n            return !isRendition && isBrush;\n        });\n        return representation;\n    }\n\n    getApplyOperations(element) {\n        const representation = this.getCompatibleRepresentation(element);\n        if (!representation) {\n            return [];\n        }\n\n        return [ {\n            name: 'DL_ADD_BRUSH_TO_DOC',\n            icon: 'brush',\n            onClick: true,\n            apply: () => this._addBrushToDocument(element, representation),\n            displayInMenu: true\n        } ];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport TextStyleElementConfig from 'app/js/config/elements/TextStyleElementConfig';\nimport * as TypekitUtils from 'app/js/utils/typekitUtils';\nimport TextUtils from '../textUtils';\n\nexport default class PHXSUXPTextStyleElementConfig extends TextStyleElementConfig {\n    STYLE_NAMESPACE = 'characterstyle';\n    STYLE_DATA_KEY = 'data';\n\n    _setTextStyle = function(element) {\n        const representation = this._config.findUsableRepresentation(element);\n        if (representation) {\n            const font = TypekitUtils.checkTypekitFont(element);\n            if (font && font.id) {\n                reportApplyMetric(representation, 'setFont', null, { event: { value: 'typekit' } });\n            } else {\n                reportApplyMetric(representation, 'setFont');\n            }\n\n            const styleData = representation.getValue(this.STYLE_NAMESPACE, this.STYLE_DATA_KEY);\n            return TextUtils.setFont(styleData, translate('DL_PHXS_HISTORY_ENTRY_SET_TEXT_STYLE'));\n        }\n    }\n\n    _createTextLayer(element) {\n        const representation = this._config.findUsableRepresentation(element);\n        if (representation) {\n            reportApplyMetric(representation, 'createTextLayer');\n\n            const styleData = representation.getValue(this.STYLE_NAMESPACE, this.STYLE_DATA_KEY);\n            return TextUtils.createTextLayerAndApplyFontStyle(styleData, translate('DL_PHXS_HISTORY_ENTRY_CREATE_TEXT_LAYER'));\n        }\n    }\n\n    getApplyOperations(element) {\n        // If we have no document there is no way to use a text style\n        const layerInfo = layerSelectionManager.getLayerInfo();\n        if (!layerInfo || (layerInfo && !layerInfo.selectionExists)) {\n            return [];\n        }\n\n        const operations = [];\n\n        if (layerInfo && layerInfo.enableApplyText) {\n            operations.push({\n                name: 'DL_SET_TEXT_STYLE_TOOLTIP',\n                icon: 'text',\n                onClick: true,\n                apply: () => this._setTextStyle(element),\n                displayInMenu: true\n            });\n        }\n\n        operations.push({\n            name: 'DL_CREATE_TEXT_LAYER_TOOLTIP',\n            icon: 'pastetext',\n            apply: () => this._createTextLayer(element),\n            displayInMenu: true\n        });\n\n        return operations;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport AppUtils from './appUtils';\nimport DocumentUtils from './documentUtils';\n\nexport class PSPatternUtils {\n\n    async defineAndMakePattern(path, patternName, scale) {\n        const definePatternCommand = {\n            '_obj': 'definePatternFile',\n            'from': {\n                '_kind': 'local',\n                '_path': path\n            },\n            'name': patternName,\n            'addPatternToPresets': false,\n            '_options': {\n                'dialogOptions': 'dontDisplay'\n            }\n        };\n\n        const makePatternCommand = {\n            '_obj': 'make',\n            '_target': {\n                '_ref': 'contentLayer'\n            },\n            'using': {\n                '_obj': 'contentLayer',\n                'type': {\n                    '_obj': 'patternLayer',\n                    'pattern': {\n                        '_obj': 'pattern',\n                        'name': patternName\n                    },\n                    'scale': {\n                        '_unit': 'percentUnit',\n                        '_value': scale\n                    }\n                }\n            },\n            '_options': {\n                'dialogOptions': 'dontDisplay'\n            }\n        };\n\n        return await AppUtils.executeMultipleBatchPlayCommand([ definePatternCommand, makePatternCommand ]);\n    }\n\n    async createPatternPreset(path, patternName) {\n        const createPatternPresetCommand = {\n            '_obj': 'definePatternFile',\n            'from': {\n                '_kind': 'local',\n                '_path': path\n            },\n            'name': patternName\n        };\n\n        return await AppUtils.executeBatchPlayCommand(createPatternPresetCommand);\n    }\n\n    async makePatternLayerFromFile(path, elementName, scale) {\n        await this.defineAndMakePattern(path, elementName, scale);\n        const layerAdjustment = await DocumentUtils.getLayerAdjustment();\n        const patternID = layerAdjustment[0].pattern.ID;\n        return await AppUtils.setPattern(patternID, scale);\n    }\n}\n\nexport default new PSPatternUtils();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport PatternElementConfig from 'app/js/config/elements/PatternElementConfig';\nimport PatternUtils from '../patternUtils';\n\nexport default class PHXSUXPPatternElementConfig extends PatternElementConfig {\n    scalePercent = 25;\n\n    // Here's the function to apply the current pattern element to the current document\n    _applyPatternToDocument = function(element) {\n        const representation = this._config.findUsableRepresentation(element);\n        if (representation) {\n            reportApplyMetric(representation, 'applyPattern');\n            return representation.getContentPath().then(path => {\n                return PatternUtils.makePatternLayerFromFile(path, element.name, this.scalePercent);\n            });\n        }\n    };\n\n    // Here's the function to add the current pattern to the pattern preset list\n    _definePatternFile(element) {\n        const representation = this._config.findUsableRepresentation(element);\n        if (representation) {\n            reportApplyMetric(representation, 'definePatternPreset');\n            return representation.getContentPath().then(path => {\n                return PatternUtils.createPatternPreset(path, element.name);\n            });\n        }\n    }\n\n    getApplyOperations(element) {\n        const ops = [];\n\n        const layerInfo = layerSelectionManager.getLayerInfo();\n        if (layerInfo && layerInfo.selectionExists) {\n            ops.push({\n                name: 'DL_APPLY_PATTERN',\n                onClick: true,\n                apply: () => this._applyPatternToDocument(element),\n                displayInMenu: true\n            });\n        }\n\n        ops.push({\n            name: 'DL_ADD_PATTERN_TO_PRESETS',\n            icon: 'brush',\n            onClick: false,\n            apply: () => this._definePatternFile(element),\n            displayInMenu: true\n        });\n\n        // Return the array of operations.\n        return ops;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport AppUtils from './appUtils';\nimport DocumentUtils from './documentUtils';\nimport * as Constants from './constants';\n\nexport class PSLookUtils {\n    async isActiveLayerColorLookUp() {\n        let result = false;\n        const activeDocument = await DocumentUtils.getActiveDocumentId();\n        const activeLayer = await DocumentUtils.getActiveLayerId(activeDocument);\n        const layerAdjustment = await DocumentUtils.getSpecificLayerAdjustment(activeDocument, activeLayer);\n        if (Array.isArray(layerAdjustment)) {\n            for (let i = 0; i < layerAdjustment.length; i++) {\n                if (layerAdjustment[i]._obj === Constants.PSString_Layer_Adjustment_ColorLookup) {\n                    result = true;\n                    break;\n                }\n            }\n        }\n        return result;\n    }\n\n    async applylook(path, lookName) {\n        const noOfDocuments = await DocumentUtils.getNumberOfDocuments();\n        if (noOfDocuments === 0) {\n            return;\n        }\n\n        let onlyOneLayerSelected = false;\n        const layerIndexes = await AppUtils.getSelectedLayerIndices();\n        let isColorLookup = false;\n        if (layerIndexes.length === 1) {\n            onlyOneLayerSelected = true;\n            isColorLookup = await this.isActiveLayerColorLookUp();\n        }\n\n        if (onlyOneLayerSelected && isColorLookup) {\n            // Modify the existing Color Lookup adjustment layer\n            return await this.setColorLookupLayer(path,lookName);\n        } else {\n            // Add a new Color Lookup adjustment layer\n            return await this.makeColorLookupLayerFromFile(path, lookName);\n        }\n    }\n\n    async makeColorLookupLayerFromFile(filePath, lookName) {\n        const makerColorLookupCommand = {\n            '_obj': 'makerColorLookupLayerFromFile',\n            'from': {\n                '_kind': 'local',\n                '_path': filePath\n            },\n            'name': lookName,\n            '_options': {\n                'dialogOptions': 'dontDisplay'\n            }\n        };\n\n        return await AppUtils.executeBatchPlayCommand(makerColorLookupCommand);\n    }\n\n    async setColorLookupLayer(filePath, lookName) {\n        const setColorLookupCommand = {\n            '_obj': 'set',\n            '_target': [\n                {\n                    '_enum': 'ordinal',\n                    '_ref': 'adjustmentLayer',\n                    '_value': 'targetEnum'\n                }\n            ],\n            'to': {\n                '_obj': 'colorLookup',\n                'from': {\n                    '_kind': 'local',\n                    '_path': filePath\n                },\n                'name': lookName\n            }\n        };\n\n        return await AppUtils.executeBatchPlayCommand(setColorLookupCommand);\n    }\n}\n\nexport default new PSLookUtils();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport environment from 'app/js/environment';\nimport LookElementConfig from 'app/js/config/elements/LookElementConfig';\nimport LookUtils from '../lookUtil';\nimport DocumentUtils from '../documentUtils';\nexport default class PHXSUXPLookElementConfig extends LookElementConfig {\n\n    _applyLook(element) {\n        const representation = this._config.findUsableRepresentation(element);\n        if (representation) {\n            reportApplyMetric(representation, 'makeColorLookupLayerFromFile');\n            return representation.getContentPath().then(path => {\n                return LookUtils.applylook (path, element.name);\n            });\n        }\n    }\n\n    _applyLookIfRGBDoc(element, showErrorIfNotRGB) {\n        return DocumentUtils.frontDocIsRGB().then(frontDocIsRGB => {\n            if (frontDocIsRGB === true) {\n                return this._applyLook(element);\n            } else if (showErrorIfNotRGB) {\n                environment.showError(translate('DL_APPLY_LOOK_REQUIRES_RGB'));\n            }\n        });\n    }\n\n    getApplyOperations(element) {\n        // Work around the fact that we don't update layerInfo when document mode changes\n        // due to undo/redo, etc by always enabling the apply operation and checking the\n        // document mode before executing the apply operation. We setup two separate apply\n        // operations so that we can warn for the context menu case but not the single click\n        // case.\n        const applyLookRGBHack = true;\n\n        // Check if we can apply a Look\n        const layerInfo = layerSelectionManager.getLayerInfo();\n        if (!layerInfo || (layerInfo && !layerInfo.enableApplyLook && !applyLookRGBHack)) {\n            return [];\n        }\n\n        return [ {\n            name: 'DL_APPLY_LOOK',\n            onClick: true,\n            isDraggable: false,\n            apply: () => this._applyLookIfRGBDoc(element, false),\n            displayInMenu: false\n        }, {\n            name: 'DL_APPLY_LOOK',\n            onClick: false,\n            isDraggable: false,\n            apply: () => this._applyLookIfRGBDoc(element, true),\n            displayInMenu: true\n        } ];\n    }\n}\n\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric, reportApplyFullSizeMetric } from 'app/js/utils/libraryUtils';\nimport { getElementModifiedTime } from 'app/js/utils/libraryUtils';\nimport ImageElementConfig from 'app/js/config/elements/ImageElementConfig';\nimport ImageUtils from '../imageUtils';\n\nexport default class PHXSImageElementConfig extends ImageElementConfig {\n\n    _addImageToDocument(element, isLinked) {\n        const adobeStockId = AdobeStockUtils.getStockId(element);\n        const representation = this._config.findUsableRepresentation(element);\n        if (representation) {\n            reportApplyMetric(representation, 'placeAsset', isLinked);\n\n            return representation.getContentPath().then(path => {\n                return ImageUtils.placeAsset(path, element.library.name, element.name, element.getLegacyReference(), getElementModifiedTime(element),\n                    adobeStockId, (adobeStockId ? AdobeStockUtils.isLicensed(element) : false), isLinked);\n            });\n        }\n\n        // Fallback: use the full-size rendition if we don't have a representation we can use\n        return element.getThumbnailPath().then(function(path) {\n            reportApplyFullSizeMetric(element, 'placeAsset', isLinked);\n            return ImageUtils.placeAsset(path, element.library.name, element.name, element.getLegacyReference(), getElementModifiedTime(element),\n                adobeStockId, (adobeStockId ? AdobeStockUtils.isLicensed(element) : false), isLinked);\n        });\n    }\n\n    isRepresentationVectorType(representation) {\n        let isVectorType = false;\n        if (representation) {\n            const vectorTypes = [ 'application/postscript', 'application/pdf', 'application/illustrator' ];\n            if (vectorTypes.indexOf(representation.type) !== -1) {\n                isVectorType = true;\n            }\n        }\n        return isVectorType;\n    }\n\n    getApplyOperations(element) {\n        if (!layerSelectionManager.hasDocumentOpen()) {\n            return [];\n        }\n\n        // Determine if we expect Photoshop to force placing as a smart object rather than layers,\n        // and change the context menu terminology if so. This list is not exhaustive nor does it\n        // always match Photoshop behavior, but it should get it right 90% of the time.\n        const representation = this._config.findUsableRepresentation(element);\n        const isVectorType = this.isRepresentationVectorType(representation);\n\n        const applyOperations = [];\n\n        // Don't enable place linked for PSDT because PS won't create PSDT based smart objects.\n        if (!ImageUtils.primaryRepIsTemplateFormat(element)) {\n            applyOperations.push({\n                name: 'DL_ADD_IMAGE_TO_DOC_AS_LINKED',\n                icon: 'download',\n                apply: () => this._addImageToDocument(element, true),\n                displayInMenu: true\n            });\n        }\n\n        applyOperations.push({\n            name: isVectorType ? 'DL_ADD_IMAGE_TO_DOC_AS_COPY' : 'DL_ADD_IMAGE_TO_DOC_AS_LAYERS',\n            icon: 'download',\n            apply: () => this._addImageToDocument(element, false),\n            displayInMenu: true\n        });\n\n        return applyOperations;\n    }\n\n    defaultEditOperation(element) {\n        return ImageUtils.editImageOr3DElement(element);\n    }\n\n    getAddOperations(layerInfo) {\n        const addOperations = super.getAddOperations(layerInfo);\n\n        if (layerInfo && layerInfo.libraryLinked) {\n            // Filter out the add operation if the layer is already a linked library element\n            return addOperations.filter(op => op.name !== 'DL_ADD_IMAGE_NAME' && op.name !== 'DL_CAPTURE');\n        }\n        return addOperations;\n    }\n\n    isDisabled(element) {\n        return !this._config.findUsableRepresentation(element) && !element.getCachedThumbnailPath();\n    }\n\n    getStockDragData() {\n        // No filesystem support in UXP means that the path to the element content won't be ready by this point.\n        // If the user does drop this Stock element, we will handle adding it to the canvas in `PSEnvironment.handleDroppedStockElement`.\n        return [];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric, reportApplyFullSizeMetric, getElementModifiedTime } from 'app/js/utils/libraryUtils';\nimport ThreeDElementConfig from 'app/js/config/elements/ThreeDElementConfig';\nimport ImageUtils from '../imageUtils';\n\nexport default class PHXSUXPThreeDElementConfig extends ThreeDElementConfig {\n\n    _add3dObjectToDocument(element) {\n        const representation = this._config.findUsableRepresentation(element);\n        if (representation) {\n            reportApplyMetric(representation, 'placeAsset', false);\n            return representation.getContentPath().then(path => {\n                return ImageUtils.placeAsset(path, element.library.name, element.name, element.getLegacyReference(), getElementModifiedTime(element),\n                    null, null, false);\n            });\n        }\n\n        // Fallback: use the full-size rendition if we don't have a representation we can use\n        return element.getThumbnailPath().then(function(path) {\n            reportApplyFullSizeMetric(element, 'placeAsset', false);\n            return ImageUtils.placeAsset(path, element.library.name, element.name, element.getLegacyReference(), getElementModifiedTime(element),\n                null, null, false);\n        });\n    }\n\n    getApplyOperations(element) {\n        if (!layerSelectionManager.hasDocumentOpen()) {\n            return [];\n        }\n\n        // General linking not enabled case\n        return [ {\n            name: 'DL_ADD_IMAGE_TO_DOC',\n            icon: 'download',\n            apply: () => this._add3dObjectToDocument(element),\n            displayInMenu: true\n        } ];\n    }\n\n    defaultEditOperation(element) {\n        return ImageUtils.editImageOr3DElement(element);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { createElementExtraMetrics } from 'app/js/utils/libraryUtils';\nimport LayerStyleElementConfig from 'app/js/config/elements/LayerStyleElementConfig';\nimport debugLog from 'app/js/utils/debugLog';\nimport LayerStyleUtils from '../layerStyleUtil';\n\nexport default class PHXSUXPLayerStyleElementConfig extends LayerStyleElementConfig {\n\n    _applyLayerStyle(element) {\n        const representation = this._config.findUsableRepresentation(element);\n\n        if (representation) {\n            reportApplyMetric(representation, 'applyLayerStyle');\n            return representation.getContentPath().then(path => LayerStyleUtils.applyLayerStyle(path));\n        }\n    }\n\n    getApplyOperations(element) {\n        const layerInfo = layerSelectionManager.getLayerInfo();\n\n        // If we have no document there is no way to use a layerstyle\n        if (!layerInfo || (layerInfo && !layerInfo.enableApplyStyle)) {\n            return [];\n        }\n\n        return [ {\n            name: 'DL_APPLY_LAYER_STYLE',\n            icon: 'layerstyle',\n            onClick: true,\n            apply: () => this._applyLayerStyle(element),\n            displayInMenu: true\n        } ];\n    }\n\n    _addLayerStyle(pathObject, library, opType) {\n        const name = pathObject.layerName || '';\n\n        const newElement = createElementExtraMetrics(library, name, configuration.LAYER_STYLE_ELEMENT_TYPE, {\n            opType\n        });\n\n        const updatePromises = [];\n        const filePaths = pathObject.files || [];\n\n        filePaths.forEach((filePath, index) => {\n            const fileMimeType = FileUtils.fileNameToMimeType(filePath, configuration.LAYER_STYLE_ELEMENT_TYPE);\n            if (fileMimeType) {\n                const relationship = index === 0 ? 'primary' : 'alternate';\n                const newRepresentation = newElement.createRepresentation(fileMimeType, relationship);\n\n                const updatePromise = newRepresentation.setContentFromPath(filePath).then(() => {\n                    updatePromises.push(updatePromise);\n                });\n            } else {\n                debugLog.log(\"Could not create representation: path cannot end with '.': \" + filePath);\n            }\n        });\n\n        if (pathObject.rendition) {\n            const newRendition = newElement.createRepresentation('image/png', 'rendition');\n            const addRenditionPromise = newRendition.setContentFromPath(pathObject.rendition);\n            updatePromises.push(addRenditionPromise);\n        }\n\n        return Promise.all(updatePromises).then(() => {\n            const cleanupPromises = [];\n\n            if (pathObject.rendition) {\n                cleanupPromises.push(newElement.setThumbnailCache(configuration.LAYER_STYLE_THUMBNAIL_SIZE, pathObject.rendition));\n            }\n\n            cleanupPromises.push(newElement.endOperation());\n\n            Promise.all(cleanupPromises).then(() => {\n                if (pathObject.rendition) {\n                    FileUtils.deleteFile(pathObject.rendition);\n                }\n\n                filePaths.forEach(filePath => FileUtils.deleteFile(filePath));\n            });\n\n            return newElement;\n        }, () => {\n            library.removeElement(newElement, true);\n            return Promise.reject('Could not create element.');\n        });\n    }\n\n    getAddOperations(layerInfo) {\n        if (!layerInfo || !layerInfo.hasLayerStyles) {\n            return [];\n        }\n\n        const addLayerStyle = (library, opType) => {\n            return LayerStyleUtils.saveStyleFile().then(strPathObject => this._addLayerStyle(strPathObject, library, opType))\n                .catch(() => Promise.reject('Could not save layer style.'));\n        };\n        return [ {\n            name: 'DL_ADD_LAYER_STYLE',\n            icon: 'AddLayerStyle',\n            order: 3,\n            dropSupport: false,\n            apply: addLayerStyle\n        } ];\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport FontElementConfig from 'app/js/config/elements/FontElementConfig';\nimport * as TypekitUtils from 'app/js/utils/typekitUtils';\nimport TextUtils from '../textUtils';\n\nexport default class PHXSFontElementConfig extends FontElementConfig {\n\n    _setFont(element) {\n        const representation = this._config.findUsableRepresentation(element);\n        if (representation) {\n            const font = TypekitUtils.checkTypekitFont(element);\n            if (font && font.id) {\n                reportApplyMetric(representation, 'setFont', null, { event: { value: 'typekit' } });\n            } else {\n                reportApplyMetric(representation, 'setFont');\n            }\n\n            const styleData = this._getStyleData(element, true);\n            return TextUtils.setFont(styleData, translate('DL_PHXS_HISTORY_ENTRY_SET_FONT'));\n        }\n    }\n\n    getApplyOperations(element) {\n        // // If we have no document there is no way to use a text style\n        const layerInfo = layerSelectionManager.getLayerInfo();\n        if (!layerInfo || (layerInfo && !layerInfo.selectionExists)) {\n            return [];\n        }\n\n        const operations = [];\n\n        if (layerInfo && layerInfo.enableApplyText) {\n            operations.push({\n                name: 'DL_SET_FONT_TOOLTIP',\n                onClick: true,\n                apply: () => this._setFont(element),\n                displayInMenu: true\n            });\n        }\n\n        return operations;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport dialogManager from 'app/js/managers/dialogManager';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport metrics from 'app/js/interface/metrics';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport debugLog from 'app/js/utils/debugLog';\nimport viewState from 'app/js/state/viewState';\nimport ApplicationFontManager from 'app/js/managers/utils/ApplicationFontManager';\nimport { observable } from 'mobx';\nimport BrushUtils from './brushUtils';\nimport ColorUtils from './colorUtils';\nimport GradientUtils from './gradientUtils';\nimport StyleUtils from './layerStyleUtil';\nimport { addBrushElement, addLayerStyleElement } from 'app/js/utils/addElementUtils';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport PHXSEvents from '../../PHXS_UXP/js/events';\nimport * as Constants from './constants';\nimport AppUtils from './appUtils';\nimport HighbeamUtils from './highbeamUtils';\n\n// Import all the element type configuration overrides\nimport GradientElementConfig from './elements/GradientElementConfig';\nimport ColorElementConfig from './elements/ColorElementConfig';\nimport TemplateElementConfig from './elements/TemplateElementConfig';\nimport BrushElementConfig from './elements/BrushElementConfig';\nimport TextStyleElementConfig from './elements/TextStyleElementConfig';\nimport PatternElementConfig from './elements/PatternElementConfig';\nimport LookElementConfig from './elements/LookElementConfig';\nimport ImageElementConfig from './elements/ImageElementConfig';\nimport ThreeDElementConfig from './elements/ThreeDElementConfig';\nimport LayerStyleElementConfig from './elements/LayerStyleElementConfig';\nimport FontElementConfig from './elements/FontElementConfig';\n\n// Import all the element type configuration overrides\nimport DefaultConfigs from 'app/js/config/elements/DefaultConfigs';\n\nclass DocumentState {\n    @observable isAddDocContentEnabled = false;\n}\n\nexport function getAppConfiguration() {\n    const documentState = new DocumentState();\n\n    this.config = {};\n    this.config.code = 'PHXS_UXP';\n\n    this.config.translationSuffix = 'PS';\n    this.config.fullName = 'Photoshop';\n\n    this.config.dragDropSource = 'com.adobe.photoshop';\n    this.config.hideDefaultSearchCancelIcon = true;\n    this.config.customClearSearchIconHeight = 12;\n\n    this.config.applyElementOnNameClick = true;\n\n    this.config.getScrollTopPadding = () => 7;\n    this.config.panelWidthAdjustment = -13;\n    this.config.cancelButtonQuiet = true;\n\n    this.config.themes = {\n        '323232': 'darker',\n        '535353': 'dark',\n        'b8b8b8': 'light',\n        'f0f0f0': 'lighter'\n    };\n\n    // In the global CSS, certain app styles are bound to the classname 'spectrum-enabled'.\n    this.config.legacySpectrumEnabled = true;\n\n    this.config.defaultTheme = 'dark';\n    this.config.deleteIcon = 'Delete-PS';\n\n    this.config.elementTypes = [\n        // TODO replace default configs here with custom configs to work in UXP\n        ColorElementConfig,\n        DefaultConfigs.ColorThemeElementConfig,\n        GradientElementConfig,\n        TextStyleElementConfig,\n        FontElementConfig,\n        LayerStyleElementConfig,\n        BrushElementConfig,\n        ImageElementConfig,\n        ThreeDElementConfig,\n        PatternElementConfig,\n        TemplateElementConfig,\n        DefaultConfigs.ComponentElementConfig,\n        LookElementConfig,\n        DefaultConfigs.VideoElementConfig,\n        DefaultConfigs.CapsuleElementConfig,\n        DefaultConfigs.ParagraphStyleElementConfig,\n        DefaultConfigs.TextElementConfig,\n        DefaultConfigs.AnimationElementConfig,\n        DefaultConfigs.LightElementConfig,\n        DefaultConfigs.MaterialElementConfig,\n        DefaultConfigs.AudioElementConfig,\n        DefaultConfigs.ChannelElementConfig,\n        DefaultConfigs.ImageGuidelineElementConfig,\n        DefaultConfigs.UnsupportedElementConfig\n    ];\n\n    // This defines the element categories that are collapsed by default in the UI - change this to suite your application.\n    this.config.collapsedTypes = [\n        configuration.VIDEO_ELEMENT_TYPE,\n        configuration.PARAGRAPH_STYLE_ELEMENT_TYPE,\n        configuration.MATERIAL_ELEMENT_TYPE,\n        configuration.LIGHT_ELEMENT_TYPE,\n        configuration.TEXT_ELEMENT_TYPE,\n        configuration.CAPSULE_ELEMENT_TYPE,\n        configuration.ANIMATION_ELEMENT_TYPE,\n        configuration.AUDIO_ELEMENT_TYPE,\n        configuration.CHANNEL_ELEMENT_TYPE,\n        configuration.IMAGE_GUIDELINE_ELEMENT_TYPE,\n        configuration.UNSUPPORTED_ELEMENT_TYPE\n    ];\n\n    this.config.isCaptureEnabled = true;\n    // In Photoshop these modules show up in Capture Panel in the order specified here\n    this.config.captureModules = [ 'Patterns', 'Shapes', 'Colors', 'Gradients', 'Type' ];\n\n    // We will enable this based on PS config info until we are certain that\n    // the panel will only be run in versions of PS that contain support (hard\n    // code in pattern.js at that time).\n    this.config.enablePatternDragging = false;\n\n    // Use mouse co-ordinates on Mac to detect a successful drop while in Adobe Stock search mode\n    this.config.useMouseEventToDetectDrop = true;\n\n    this.config.hasLibraryManager = false;\n\n    function handleColorDrop(dropData) {\n        const promises = [];\n        const library = dropData.library || libraryManager.getDefaultLibrary();\n        dropData.assetList.forEach(asset => {\n            const colorData = asset.data[0];\n            promises.push(ColorUtils.addPSColor(asset.name, colorData.primary, colorData.secondary, /*opType*/ 'dragToPanel', library));\n        });\n        return Promise.all(promises);\n    }\n\n    function handleGradientDrop(dropData) {\n        const saveAndAddGradient = (gradientInfo, name) => {\n            return GradientUtils.saveGradientByIndex(gradientInfo.index).then((previewPath) => {\n                const library = dropData.library || libraryManager.getDefaultLibrary();\n                return GradientUtils.addPSGradient(name, gradientInfo.data, previewPath, /*opType*/ 'dragToPanel', library);\n            });\n        };\n        const promises = [];\n        dropData.assetList.forEach(asset => {\n            const gradientInfo = asset.data[0];\n            promises.push(saveAndAddGradient(gradientInfo, asset.name));\n        });\n        return Promise.all(promises);\n    }\n\n    function handleStyleDrop(dropData) {\n        // Use separate function here so that closure will make 'name' available in the then\n        // (the loop index will have already been incremented).\n        const addLayerStyle = (name, aslPath, previewPath) => {\n            const library = dropData.library || libraryManager.getDefaultLibrary();\n            const primaryRep = {};\n            primaryRep.path = aslPath;\n            return addLayerStyleElement(name, primaryRep, previewPath, library, /*opType*/ 'dragToPanel').then((element) => {\n                if (libraryManager.currentLibrary === library) {\n                    elementSelectionState.revealElement(element);\n                }\n                return element;\n            });\n        };\n        const saveAndAddLayerStyle = (styleIndex, name) => {\n            return StyleUtils.saveLayerStyleByIndex(styleIndex).then((saveInfo) => {\n                return addLayerStyle(name, saveInfo.aslPath, saveInfo.previewPath);\n            });\n        };\n        const promises = [];\n        dropData.assetList.forEach(asset => {\n            const styleInfo = asset.data[0];\n            promises.push(saveAndAddLayerStyle(styleInfo, asset.name));\n        });\n        return Promise.all(promises);\n    }\n\n    function handleBrushDrop(dropData) {\n        // Use separate function here so that closure will make 'name' available in the then\n        // (the loop index will have already been incremented).\n        const addBrush = (name, abrPath, previewPath) => {\n            const primaryRep = {};\n            primaryRep.path = abrPath;\n            const library = dropData.library || libraryManager.getDefaultLibrary();\n            return addBrushElement(name, primaryRep, previewPath, library, /*opType*/ 'dragToPanel').then((element) => {\n                if (libraryManager.currentLibrary === library) {\n                    elementSelectionState.revealElement(element);\n                }\n                return element;\n            });\n        };\n        const saveAndAddBrush = (brushIndex, name) => {\n            return BrushUtils.saveBrushByIndex(brushIndex).then((saveInfo) => {\n                return addBrush(name, saveInfo.abrPath, saveInfo.previewPath);\n            });\n        };\n        const promises = [];\n        dropData.assetList.forEach(asset => {\n            const brushInfo = asset.data[0];\n            promises.push(saveAndAddBrush(brushInfo, asset.name));\n        });\n        return Promise.all(promises);\n    }\n\n    function enableAddDocContent(hasOpenDoc) {\n        documentState.isAddDocContentEnabled = libraryManager.areLibrariesLoaded && hasOpenDoc;\n        return libraryManager.areLibrariesLoaded && hasOpenDoc;\n    }\n\n    this.getFlyoutMenuItems = function() {\n        return [ {\n            label: 'DL_FLYOUT_ADD_DOC_CONTENT',\n            enableMenu: enableAddDocContent(layerSelectionManager.hasDocumentOpen() && !viewState.isImportExportInProgress),\n            onClick() {\n                configuration.currentProduct.addDocContent();\n            }\n        } ];\n    };\n\n    this.addDocContent = function() {\n        dialogManager.closeDialog();\n        viewState.resetMode();\n        const photoshopCCLibrariesPanel = window.nodeRequire('photoshop').cclibrariespanel;\n        photoshopCCLibrariesPanel.addDocContent();\n    };\n\n    this.getAddDocContentOperation = function() {\n        if (!enableAddDocContent(layerSelectionManager.hasDocumentOpen())) {\n            return undefined;\n        }\n        const buttonName = viewState.isNewUserState() ? 'DL_NEW_USER_ADD_DOC_CONTENT_BUTTON' : 'DL_ADD_DOC_CONTENT_BUTTON';\n        return {\n            buttonName,\n            buttonToolTip: 'DL_ADD_DOC_CONTENT_BUTTON_TOOLTIP',\n            iconToolTip: 'DL_ADD_DOC_CONTENT_ICON_TOOLTIP',\n            icon: 'UploadDocAssets',\n            apply() {\n                configuration.currentProduct.addDocContent();\n            },\n            enabled: enableAddDocContent(layerSelectionManager.hasDocumentOpen())\n        };\n    };\n\n    this.handleActiveDocChanged = function(newDocumentId) {\n        const validDocID = (newDocumentId !== 0);\n        enableAddDocContent(validDocID);\n    };\n\n    this.dropHandlers = {\n        color: handleColorDrop,\n        gradient: handleGradientDrop,\n        style: handleStyleDrop,\n        brush: handleBrushDrop\n    };\n\n    this.dropHandler = function(eventData) {\n        const dropData = eventData;\n        if (dropData && dropData.assetList && dropData.assetList.length > 0) {\n            // We only support drop of one data type at a time\n            const dropHandler = this.dropHandlers[dropData.assetList[0].type];\n            return dropHandler ? dropHandler(dropData) : Promise.reject();\n        }\n        return Promise.reject();\n    };\n\n    this.fontManager = new ApplicationFontManager();\n\n    this.init = function() {\n\n        AppUtils.getAppProperty(false, Constants.PSKey_CCLib_Config_key, [ { '_enum': 'ordinal', '_ref': 'application', '_value': 'targetEnum' } ])\n            .then(function(configInfoValue) {\n                const configInfo = configInfoValue || {};\n                configuration.currentProduct.config.enablePatternDragging = configInfo.enablePatternDragging;\n                configuration.currentProduct.config.enableGradientContextMenu = configInfo.enableGradientContextMenu;\n            });\n\n        FileUtils.extendUsableTypes(configuration.COLOR_THEME_ELEMENT_TYPE, [ 'application/vnd.adobe.colortheme+json' ]);\n        FileUtils.extendUsableTypes(configuration.BRUSH_ELEMENT_TYPE, [ 'image/x-adobe-photoshop-brush' ]);\n        FileUtils.extendUsableTypes(configuration.CHARACTER_STYLE_ELEMENT_TYPE, [ 'application/vnd.adobe.characterstyle+json' ]);\n        FileUtils.extendUsableTypes(configuration.FONT_ELEMENT_TYPE, [ 'application/vnd.adobe.font+json' ]);\n        FileUtils.extendUsableTypes(configuration.LAYER_STYLE_ELEMENT_TYPE, [ 'application/vnd.adobe.layerstyle' ]);\n        FileUtils.extendUsableTypes(configuration.THREE_D_ELEMENT_TYPE, [ 'image/vnd.adobe.photoshop' ]);\n        FileUtils.extendUsableTypes(configuration.PATTERN_ELEMENT_TYPE, [ 'image/vnd.adobe.pattern+png' ]);\n        FileUtils.extendUsableTypes(configuration.LOOK_ELEMENT_TYPE, [ 'application/vnd.adobe.cube+txt' ]);\n        FileUtils.extendUsableTypes(configuration.TEMPLATE_ELEMENT_TYPE, [ 'image/vnd.adobe.photoshop.template', 'application/vnd.adobe.photoshop.template' ]);\n        FileUtils.extendUsableTypes(configuration.GRADIENT_ELEMENT_TYPE, [ 'application/vnd.adobe.gradient.noise+json', 'application/vnd.adobe.gradient+json' ]);\n        FileUtils.extendUsableTypes(configuration.COMPONENT_ELEMENT_TYPE, [ 'image/svg+xml', 'image/png' ]);\n\n        FileUtils.extendEditableTypes(configuration.COLOR_ELEMENT_TYPE, [ 'application/vnd.adobe.color+json' ]);\n        FileUtils.extendEditableTypes(configuration.THREE_D_ELEMENT_TYPE, [ 'image/vnd.adobe.photoshop' ]);\n\n        // Adding a type as editible also adds it as usable, and we want all usable image types to be editable,\n        // so just extend the editable image types.\n        const initPromise = AppUtils.getFileFormats().then(fileFormats => {\n            let readableExtensions = [];\n\n            if (fileFormats && Array.isArray(fileFormats.readableFileExtensions)) {\n                readableExtensions = fileFormats.readableFileExtensions;\n            }\n\n            // Strip out PSDT because we don't want to allow editing of PSDT elements, which won't work\n            // since it opens as a new doc unassociated with the file whence it came.\n            const psdtIndex = readableExtensions.indexOf('PSDT');\n            if (psdtIndex !== -1) {\n                readableExtensions.splice(psdtIndex, 1);\n            }\n\n            // But we do want to add PSDT as a usable type, which enables us to get it's layers for Place Layers.\n            FileUtils.extendUsableTypes(configuration.IMAGE_ELEMENT_TYPE, [ 'image/vnd.adobe.photoshop.template', 'application/x-adobe-libraries-psdt' ]);\n\n            const readOnlyExtensions = [ 'AI', 'SVG', 'SVGZ', 'PDF' ]; // These are not editable in Photoshop, only placeable\n\n            if (readableExtensions.length > 0) {\n                // Kind of ugly - we strip out the extensions that we want to only make usable, so they're not marked as 'editable'.\n                readOnlyExtensions.forEach(function(ext) {\n                    const index = readableExtensions.indexOf(ext);\n                    if (index !== -1) {\n                        readableExtensions.splice(index, 1);\n                    }\n                });\n\n                FileUtils.extendUsableTypesWithExtensions(configuration.IMAGE_ELEMENT_TYPE, readOnlyExtensions);\n                FileUtils.extendEditableTypesWithExtensions(configuration.IMAGE_ELEMENT_TYPE, readableExtensions);\n\n            } else {\n                debugLog.log('Failed to get readable file extensions from PHXS, using short default list.');\n\n                FileUtils.extendUsableTypes(configuration.IMAGE_ELEMENT_TYPE, [\n                    'application/illustrator',\n                    'image/svg+xml',\n                    'application/pdf'\n                ]);\n\n                FileUtils.extendEditableTypes(configuration.IMAGE_ELEMENT_TYPE, [\n                    'image/png',\n                    'image/jpeg',\n                    'image/jpg',\n                    'image/gif',\n                    'image/bmp',\n                    'application/photoshop',\n                    'image/vnd.adobe.photoshop',\n                    'application/photoshop.large'\n                ]);\n            }\n        });\n\n        this.startEventListener();\n\n        return initPromise;\n    };\n\n    this.startEventListener = function() {\n        PHXSEvents.listen();\n    };\n\n    this.stopEventListener = function() {\n        PHXSEvents.stop();\n    };\n\n    this.reportEvent = function(eventName, properties, force) {\n        // Get the opType provided by createElementExtraMetrics\n        if (eventName === 'createElement') {\n            if (!properties.opType) {\n                const extraMetrics = metrics.getExtraEventMetrics(eventName);\n                if (extraMetrics) {\n                    properties.opType = extraMetrics.opType;\n                }\n            }\n        }\n\n        HighbeamUtils.logHighbeam(eventName, properties, force).then(function(strReturnValue) {\n            const returnValue = JSON.parse(strReturnValue);\n            if (returnValue) {\n                debugLog.log(eventName + ' metric reported to PS');\n            }\n        });\n    };\n\n    this.getUserData = function(callback) {\n        // TODO(kamarora) - this api is used at 2 places in Libraries panel\n        //  1. metrics.js - uses userData.accountStatus\n        //  2. captureUtils.js - uses userData.userAccountStatus\n        // current CEP based implementation relies on entryStatus, left values send by PS\n        // PS stopped sending these value when it migrated from AMT to NGL in Aug, 2018\n        // https://git.corp.adobe.com/photoshop/photoshop/commit/62bb0e89fa3dab7b0b8c0e9b6dcc78adfbfeec8c#diff-b07da5951da141b1aea62801eafc2526L2511\n        // so, I am sending hardcoded value sent by CEP implementaion for now\n        callback({ 'accountStatus': 'paid', 'secondsLeftInTrial': 0 });\n    };\n\n    // TODO: Refactor the above to return an object, rather than using this\n    return this;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { checkLibraryWritable, createElementExtraMetrics } from 'app/js/utils/libraryUtils';\nimport AppUtils from './appUtils';\nimport DocumentUtils from './documentUtils';\nimport DescriptorUtils from './descriptorUtils';\nimport ColorUtils from './colorUtils';\nimport GenericUtils from './genericUtils';\nimport * as Constants from './constants';\n\nexport class PSTextUtils {\n\n    antiAliasMap = {\n        'AntiAlias.NONE': 'antiAliasNone',\n        'AntiAlias.CRISP': 'antiAliasCrisp',\n        'AntiAlias.SHARP': 'antiAliasSharp',\n        'AntiAlias.SMOOTH': 'antiAliasSmooth',\n        'AntiAlias.STRONG': 'antiAliasStrong',\n        'AntiAlias.PLATFORMGRAY': 'antiAliasPlatformGray',\n        'AntiAlias.PLATFORM_LCD':'antiAliasPlatformLCD'\n    };\n\n    orientationMap = {\n        'Direction.HORIZONTAL': 'horizontal',\n        'Direction.VERTICAL': 'vertical'\n    };\n\n    underlineMap = {\n        'UnderlineType.UNDERLINEOFF': 'underlineOff',\n        'UnderlineType.UNDERLINERIGHT': 'underlineOnRightInVertical',\n        'UnderlineType.UNDERLINELEFT': 'underlineOnLeftInVertical'\n    };\n\n    strikeThroughMap = {\n        'StrikeThruType.STRIKEOFF': 'strikethroughOff',\n        'StrikeThruType.STRIKEHEIGHT': 'xHeightStrikethroughOn',\n        'StrikeThruType.STRIKEBOX': 'eMBoxStrikethroughOn'\n    };\n\n    textCaseMap = {\n        'TextCase.NORMAL': 'normal',\n        'TextCase.ALLCAPS': 'allCaps',\n        'TextCase.SMALLCAPS': 'smallCaps'\n    };\n\n    autoKernMap = {\n        'AutoKernType.MANUAL': 'manual',\n        'AutoKernType.METRICS': 'metricsKern',\n        'AutoKernType.OPTICAL': 'opticalKern'\n    };\n\n    getTextPropertyInPSFormat(dataMap, librariesData) {\n        const keys = Object.keys(dataMap);\n        let result = dataMap[keys[0]];\n        if (Object.prototype.hasOwnProperty.call(dataMap, librariesData)) {\n            result = dataMap[librariesData];\n        }\n        return result;\n    }\n\n    getTextPropertyInLibrariesFormat(dataMap, psData) {\n        let attr;\n        for (attr in dataMap) {\n            if (Object.prototype.hasOwnProperty.call(dataMap, attr)) {\n                if (dataMap[attr] === psData) {\n                    return attr;\n                }\n            }\n        }\n    }\n\n    getAntiAliasInPSFormat(styleData) {\n        const antiAlias = this.getTextPropertyInPSFormat(this.antiAliasMap, styleData.adbePhxsAntiAliasMethod);\n        return antiAlias;\n    }\n\n    async setFont(styleData, historyName, alreadyInModal) {\n        const setFontLocalFunction = async function() {\n            const fontList = await DocumentUtils.getFontList();\n            let fontPostScriptName;\n            if (fontList) {\n                fontPostScriptName = this.getStylePostScriptName(fontList, styleData);\n            }\n            const layerIndices = await AppUtils.getSelectedLayerIndices();\n            for (const index in layerIndices) {\n                await this.applyStyleToText(layerIndices[index], styleData, fontPostScriptName);\n            }\n        };\n\n        if (alreadyInModal) {\n            return await setFontLocalFunction.bind(this)();\n        } else {\n            const setFontModalHandler = async function(executionControl) {\n                const suspensionID = await executionControl.suspendHistory({\n                    'historyStateInfo': {\n                        'name': historyName,\n                        'target': [\n                            { _ref: 'document', _enum: 'ordinal', _value: 'targetEnum' },\n                            { _ref: 'application', _enum: 'ordinal', _value: 'targetEnum' }\n                        ]\n                    }\n                });\n\n                await setFontLocalFunction.bind(this)();\n\n                // history state commit\n                await executionControl.resumeHistory(suspensionID);\n            };\n\n            const psCore = window.nodeRequire('photoshop').core;\n            return await psCore.executeAsModal(setFontModalHandler.bind(this), { 'commandName': historyName });\n        }\n    }\n\n    async createTextLayerAndApplyFontStyle(styleData, historyName) {\n        const numberOfDocuments = await DocumentUtils.getNumberOfDocuments();\n        if (numberOfDocuments === 0) {\n            // cannot create and apply text layer if no document is open\n            return;\n        }\n\n        const createTextLayerModalHandler = async function(executionControl) {\n            const suspensionID = await executionControl.suspendHistory({\n                'historyStateInfo': {\n                    'name': historyName,\n                    'target': [\n                        { _ref: 'document', _enum: 'ordinal', _value: 'targetEnum' },\n                        { _ref: 'application', _enum: 'ordinal', _value: 'targetEnum' }\n                    ]\n                }\n            });\n\n            // create a normal layer\n            await this.createNormalLayer();\n\n            const activeDocumentId = await DocumentUtils.getActiveDocumentId();\n            const activeLayerId = await DocumentUtils.getActiveLayerId(activeDocumentId);\n\n            const targetLayerIndex = await DocumentUtils.getNumberOfLayers(activeDocumentId);\n            await DocumentUtils.moveLayer(activeLayerId, targetLayerIndex);\n\n            // get selected layer index, there will be only one layer selected which is created above\n            const layerIndices = await AppUtils.getSelectedLayerIndices();\n            const currentLayerIndex = layerIndices[0];\n\n            // set layer name\n            await AppUtils.setLayerName(activeDocumentId, activeLayerId, styleData.adbeFont.family);\n\n            // converts/creates normal layer to text layer\n            await this.createTextLayer(styleData);\n\n            // update layer contents\n            const textKey = await this.getTextKey(currentLayerIndex);\n            textKey.textKey = styleData.adbeFont.family;\n            await this.updateTextKey(textKey, currentLayerIndex);\n\n            // apply font style data\n            await this.setFont(styleData, historyName, true);\n\n            // history state commit\n            await executionControl.resumeHistory(suspensionID);\n        };\n\n        const psCore = window.nodeRequire('photoshop').core;\n        return await psCore.executeAsModal(createTextLayerModalHandler.bind(this), { 'commandName': historyName });\n    }\n\n    async updateTextKey(textKey, layerIndex) {\n        const applyTextStyleCommand = {\n            '_obj': 'set',\n            '_target': [\n                {\n                    '_index': layerIndex,\n                    '_ref': 'layer'\n                }\n            ],\n            'to': textKey\n        };\n\n        return await AppUtils.executeBatchPlayCommand(applyTextStyleCommand);\n    }\n\n    async createNormalLayer() {\n        const createNormalLayerCommand = {\n            '_obj': 'make',\n            '_target': [\n                {\n                    '_ref': 'layer'\n                }\n            ],\n            'below': false\n        };\n\n        return await AppUtils.executeBatchPlayCommand(createNormalLayerCommand);\n    }\n\n    async createTextLayer() {\n        const createTextLayerCommand = {\n            '_obj': 'make',\n            '_target': [\n                {\n                    '_ref': Constants.PSClass_TextLayer\n                }\n            ],\n            'using': {\n                '_obj': Constants.PSClass_TextLayer,\n                'antiAlias': {\n                    '_enum': Constants.PSString_ANTI_ALIAS_TYPE,\n                    '_value': 'antiAliasCrisp'\n                },\n                'orientation': {\n                    '_enum': Constants.PSString_ORIENTATION,\n                    '_value': 'horizontal'\n                },\n                'paragraphStyleRange': [],\n                'textClickPoint': {\n                    '_obj': 'paint',\n                    'horizontal': {\n                        '_unit': 'percentUnit',\n                        '_value': 10.0\n                    },\n                    'vertical': {\n                        '_unit': 'percentUnit',\n                        '_value': 10.0\n                    }\n                },\n                'textGridding': {\n                    '_enum': 'textGridding',\n                    '_value': 'none'\n                },\n                'textKey': ' ',\n                'textShape': [\n                    {\n                        '_obj': Constants.PSKey_TextShape,\n                        'char': {\n                            '_enum': 'char',\n                            '_value': 'paint'\n                        }\n                    }\n                ],\n                'textStyleRange': [\n                    {\n                        '_obj': Constants.PSClass_TextStyleRange,\n                        'from': 0,\n                        'textStyle': {\n                            '_obj': Constants.PSClass_TextStyle,\n                            'color': ColorUtils.psBlackColor,\n                            'fill': true,\n                            'stroke': false\n                        },\n                        'to': 1\n                    }\n                ]\n            }\n        };\n\n        return await AppUtils.executeBatchPlayCommand(createTextLayerCommand);\n    }\n\n    async isFontAvailable(styleData) {\n        const fontList = await DocumentUtils.getFontList();\n        const fontPostScriptName = fontList ? this.getStylePostScriptName(fontList, styleData) : false;\n        return fontPostScriptName ? true : false;\n    }\n\n    getStylePostScriptName(fontList, styleData) {\n        if (styleData.adbeFont) {\n            if (fontList.fontPostScriptName.includes(styleData.adbeFont.postScriptName)) {\n                return styleData.adbeFont.postScriptName;\n            }\n        } else if (styleData.fontFamily) {\n            const fontIndex = fontList.fontFamilyName.findIndex(fontFamily => fontFamily === styleData.fontFamily);\n            if (fontIndex !== -1) {\n                return fontList.fontPostScriptName[fontIndex];\n            }\n        }\n    }\n\n    async getTextKey(layerIndex) {\n        return await AppUtils.getAppProperty(false, 'textKey', [ { '_index': layerIndex, '_ref': 'layer' } ]);\n    }\n\n    async getTextKeyById(layerId) {\n        return await AppUtils.getAppProperty(false, 'textKey', [ { '_id': layerId, '_ref': 'layer' } ]);\n    }\n\n    getOrientationInPSFormat(styleData) {\n        return this.getTextPropertyInPSFormat(this.orientationMap, styleData.adbePhxsDirection);\n    }\n\n    getAutoKernInPSFormat(styleData) {\n        return this.getTextPropertyInPSFormat(this.autoKernMap, styleData.adbePhxsAutoKerning);\n    }\n\n    getUnderlineInPSFormat(styleData) {\n        return this.getTextPropertyInPSFormat(this.underlineMap, styleData.adbePhxsUnderline);\n    }\n\n    getStrikeThruInPSFormat(styleData) {\n        return this.getTextPropertyInPSFormat(this.strikeThroughMap, styleData.adbePhxsStrikethru);\n    }\n\n    async applyStyleToText(layerIndex, styleData, fontPostScriptName) {\n        const textDescriptor = await this.getTextKey(layerIndex);\n\n        // if text descriptor of layer does not contain textKey that means we are looking at non text layer\n        if (!Object.prototype.hasOwnProperty.call(textDescriptor, Constants.PSClass_TextKey)) {\n            return;\n        }\n\n        const newTextDescriptor = new Object();\n        newTextDescriptor._obj = Constants.PSClass_TextLayer;\n\n        // unspecified attributes shouldn't be changed\n        newTextDescriptor.merge = true;\n        // If there is a transform that has scaling, remove the scaling from the\n        // transform. This will result in copy/paste and PS native char/paragraph\n        // styles capturing the values that the user sees, rather than the internal\n        // values prior to the transform-scaling.\n        if (Object.prototype.hasOwnProperty.call(textDescriptor, Constants.PSKey_transform)) {\n            let xformYScale = 1.0;\n            let sx = 0;\n            let sy = 0;\n\n            const xformDesc = textDescriptor.transform;\n\n            const sqr = function(x) {\n                return x * x;\n            };\n\n            // Re-construct the rotate parameters from the matrix\n            const r1 = Math.atan2(xformDesc.yx, xformDesc.yy);\n            const r2 = Math.atan2(-xformDesc.xy, xformDesc.xx);\n\n            // Reset the matrix to account for the new scale.\n\n            // If both rotates are the 'same', treat it as a rotate + scale\n            // matrix, Otherwise, treat it as a skew matrix, taking\n            // the skew values (vx, vy) from the source matrix\n            const treatAsRotate = (Math.abs(r1 - r2) < 0.0001);\n\n            // Re-construct the scale values\n            if (treatAsRotate) {\n                sx = Math.sqrt(sqr(xformDesc.xx) + sqr(xformDesc.xy));\n                sy = Math.sqrt(sqr(xformDesc.yx) + sqr(xformDesc.yy));\n            } else {\n                sx = xformDesc.xx;\n                sy = xformDesc.yy;\n            }\n\n            // remember our scaling so we can scale the box\n            xformYScale = sy;\n\n            if (xformYScale !== 1.0) {\n\n                // Factor out the y scaling from the transform\n                sx = sx / xformYScale;\n                sy = 1;\n\n                // Now that we have calculated all the new values, update the desc\n                if (treatAsRotate) {\n                    xformDesc.xx = sx * Math.cos(r1);\n                    xformDesc.xy = -sx * Math.sin(r1);\n                    xformDesc.yx = sy * Math.sin(r1);\n                    xformDesc.yy = sy * Math.cos(r1);\n                } else {\n                    // Factor out the scale matrix to get the original skew values.\n                    const vx = xformDesc.yx / sy;\n                    const vy = xformDesc.xy / sx;\n\n                    xformDesc.xx = sx;\n                    xformDesc.xy = sx * vy;\n                    xformDesc.yx = sy * vx;\n                    xformDesc.yy = sy;\n                }\n\n                // put the modified xform desc back into the text desc\n                newTextDescriptor.transform = xformDesc;\n\n                // If we set the transform, then we need to propagate the click point\n                // which controls the position of point type layers.\n                if (Object.prototype.hasOwnProperty.call(textDescriptor, Constants.PSKey_TextClickPoint)) {\n                    newTextDescriptor.textClickPoint = textDescriptor.textClickPoint;\n                }\n\n                const textShapeList = textDescriptor.textShape;\n\n                if (Array.isArray(textShapeList) && textShapeList.length > 0) {\n                    newTextDescriptor.textShape = [];\n\n                }\n\n                for (const index in textShapeList) {\n                    const textShapeInstance = textShapeList[index];\n                    if (textShapeInstance.char && textShapeInstance.char._value === 'box') {\n                        textShapeInstance.bounds.bottom = textShapeInstance.bounds.bottom * xformYScale;\n                        textShapeInstance.bounds.right = textShapeInstance.bounds.right * xformYScale;\n                    }\n                    newTextDescriptor.textShape.push(textShapeInstance);\n                }\n            } // xformYScale != 1.0\n        }\n\n        // Preserve warps\n        if (Object.prototype.hasOwnProperty.call(textDescriptor, Constants.PSKey_warp)) {\n            newTextDescriptor.warp = textDescriptor.warp;\n        }\n\n        DescriptorUtils.putEnumerationValueInDescriptor(newTextDescriptor, Constants.PSString_ORIENTATION, Constants.PSString_ORIENTATION,\n            this.getOrientationInPSFormat(styleData));\n        if (styleData.adbePhxsAntiAliasMethod) {\n            DescriptorUtils.putEnumerationValueInDescriptor(newTextDescriptor, Constants.PSString_ANTI_ALIAS, Constants.PSString_ANTI_ALIAS_TYPE,\n                this.getAntiAliasInPSFormat(styleData));\n        }\n\n        const textStyleRangeList = textDescriptor.textStyleRange;\n        newTextDescriptor.textStyleRange = [];\n        const hasFontFeatureSettings = styleData.fontFeatureSettings !== undefined && styleData.fontFeatureSettings.length > 0;\n        for (const index in textStyleRangeList) {\n            const newTextStyle = new Object();\n            newTextStyle._obj = Constants.PSClass_TextStyle;\n\n            if (fontPostScriptName) {\n                newTextStyle.fontPostScriptName = fontPostScriptName;\n            }\n\n            //Font Size\n            if (styleData.fontSize !== undefined) {\n                DescriptorUtils.putUnitValueInDescriptor(newTextStyle, Constants.PSKey_Size, GenericUtils.stringToUnit(styleData.fontSize.type),\n                    styleData.fontSize.value);\n            }\n\n            // Set Horizontal Scale\n            if (styleData.adbeHorizontalScale !== undefined) {\n                newTextStyle.horizontalScale = styleData.adbeHorizontalScale;\n            }\n\n            // Set Vertical Scale\n            if (styleData.adbeVerticalScale !== undefined) {\n                newTextStyle.verticalScale = styleData.adbeVerticalScale;\n            }\n\n            // Set Faux/Synthetic Bold\n            if (styleData.adbePhxsFauxBold !== undefined) {\n                newTextStyle.syntheticBold = styleData.adbePhxsFauxBold ? true : false;\n            }\n\n            // Set Faux/Synthetic Italics\n            if (styleData.adbePhxsFauxItalic !== undefined) {\n                newTextStyle.syntheticItalic = styleData.adbePhxsFauxItalic ? true : false;\n            }\n\n            //Set auto leading\n            if (styleData.adbeAutoLeading !== undefined) {\n                newTextStyle.autoLeading = styleData.adbeAutoLeading ? true : false;\n            }\n\n            // Set Leading\n            if (styleData.lineHeight !== undefined) {\n                newTextStyle.autoLeading = false;\n                DescriptorUtils.putUnitValueInDescriptor(newTextStyle, Constants.PSKey_Leading, GenericUtils.stringToUnit(styleData.lineHeight.type),\n                    styleData.lineHeight.value);\n            }\n\n            // Set Tracking\n            if (styleData.adbeTracking !== undefined) {\n                newTextStyle.tracking = styleData.adbeTracking;\n            } else if (styleData.letterSpacing) {\n                newTextStyle.tracking = styleData.letterSpacing.value * 1000;\n            }\n\n            // Set Baseline shift\n            if (styleData.baselineShift !== undefined) {\n                DescriptorUtils.putUnitValueInDescriptor(newTextStyle, Constants.PSKey_Leading, GenericUtils.stringToUnit(styleData.baselineShift.type),\n                    styleData.baselineShift.value);\n            }\n\n            // Set Auto Kerning\n            if (styleData.adbePhxsAutoKerning) {\n                DescriptorUtils.putEnumerationValueInDescriptor(newTextStyle, Constants.PSKey_AutoKerning, Constants.PSKey_AutoKerning,\n                    this.getAutoKernInPSFormat(styleData));\n            }\n\n            // Set no break\n            if (styleData.whiteSpace && styleData.whiteSpace === 'nowrap') {\n                newTextStyle.noBreak = false;\n            }\n\n            //Underline - use PHXS underline if it exists or text-decoration property otherwise\n            if (styleData.adbePhxsUnderline) {\n                DescriptorUtils.putEnumerationValueInDescriptor(newTextStyle, Constants.PSKey_Underline, Constants.PSKey_Underline,\n                    this.getUnderlineInPSFormat(styleData));\n            } else if (styleData.textDecoration && styleData.textDecoration.indexOf('underline') !== -1) {\n                DescriptorUtils.putEnumerationValueInDescriptor(newTextStyle, Constants.PSKey_Underline, Constants.PSKey_Underline,\n                    Constants.PSString_UNDERLINE_UNDERLINELEFT);\n            } else {\n                DescriptorUtils.putEnumerationValueInDescriptor(newTextStyle, Constants.PSKey_Underline, Constants.PSKey_Underline,\n                    Constants.PSString_UNDERLINE_UNDERLINEOFF);\n            }\n\n            //StrikeThru - use PHXS strikeThru if it exists or text-decoration property otherwise\n            if (styleData.adbePhxsStrikethru) {\n                DescriptorUtils.putEnumerationValueInDescriptor(newTextStyle, Constants.PSString_strikethrough, Constants.PSString_strikethrough,\n                    this.getStrikeThruInPSFormat(styleData));\n            } else if (styleData.textDecoration && styleData.textDecoration.indexOf('line-through') !== -1) {\n                DescriptorUtils.putEnumerationValueInDescriptor(newTextStyle, Constants.PSString_strikethrough, Constants.PSString_strikethrough,\n                    Constants.PSString_STRIKETHRU_STRIKEHEIGHT);\n            } else {\n                DescriptorUtils.putEnumerationValueInDescriptor(newTextStyle, Constants.PSString_strikethrough, Constants.PSString_strikethrough,\n                    Constants.PSString_STRIKETHRU_STRIKEOFF);\n            }\n\n            // Set capitalization (SmallCaps/AllCaps/Normal)\n            if (hasFontFeatureSettings && styleData.fontFeatureSettings.indexOf('smcp') !== -1) {\n                DescriptorUtils.putEnumerationValueInDescriptor(newTextStyle, Constants.PSKey_FontCaps, Constants.PSKey_FontCaps,\n                    Constants.PSString_TEXT_CASE_SMALLCAPS);\n            } else if (styleData.textTransform === 'capitalize') {\n                DescriptorUtils.putEnumerationValueInDescriptor(newTextStyle, Constants.PSKey_FontCaps, Constants.PSKey_FontCaps,\n                    Constants.PSString_TEXT_CASE_ALLCAPS);\n            } else {\n                DescriptorUtils.putEnumerationValueInDescriptor(newTextStyle, Constants.PSKey_FontCaps, Constants.PSKey_FontCaps,\n                    Constants.PSString_TEXT_CASE_NORMAL);\n            }\n\n            newTextStyle.oldStyle = hasFontFeatureSettings && styleData.fontFeatureSettings.indexOf('onum') !== -1;\n            newTextStyle.altligature = hasFontFeatureSettings && styleData.fontFeatureSettings.indexOf('dlig') !== -1;\n            newTextStyle.ligature = hasFontFeatureSettings && styleData.fontFeatureSettings.indexOf('liga') !== -1;\n            newTextStyle.stylisticAlternates = hasFontFeatureSettings && styleData.fontFeatureSettings.indexOf('salt') !== -1;\n            newTextStyle.swash = hasFontFeatureSettings && styleData.fontFeatureSettings.indexOf('swsh') !== -1;\n            newTextStyle.fractions = hasFontFeatureSettings && styleData.fontFeatureSettings.indexOf('frac') !== -1;\n            newTextStyle.titling = hasFontFeatureSettings && styleData.fontFeatureSettings.indexOf('titl') !== -1;\n            newTextStyle.ordinals = hasFontFeatureSettings && styleData.fontFeatureSettings.indexOf('ordn') !== -1;\n            newTextStyle.ornaments = hasFontFeatureSettings && styleData.fontFeatureSettings.indexOf('ornm') !== -1;\n            newTextStyle.contextualLigatures = hasFontFeatureSettings && styleData.fontFeatureSettings.indexOf('clig') !== -1;\n\n            if (hasFontFeatureSettings && styleData.fontFeatureSettings.indexOf('subs') !== -1) {\n                DescriptorUtils.putEnumerationValueInDescriptor(newTextStyle, Constants.PSKey_Baseline, Constants.PSKey_Baseline,\n                    Constants.PSKey_SubScript);\n            } else if (hasFontFeatureSettings && styleData.fontFeatureSettings.indexOf('sups') !== -1) {\n                DescriptorUtils.putEnumerationValueInDescriptor(newTextStyle, Constants.PSKey_Baseline, Constants.PSKey_Baseline,\n                    Constants.PSKey_SuperScript);\n            } else {\n                DescriptorUtils.putEnumerationValueInDescriptor(newTextStyle, Constants.PSKey_Baseline, Constants.PSKey_Baseline,\n                    Constants.PSKey_BaselineNormal);\n            }\n\n            if (styleData.color) {\n                newTextStyle.color = ColorUtils.libraryColorToPSSolidColor(styleData.color);\n            }\n\n            const textStyleRangeInstance = textStyleRangeList[index];\n            textStyleRangeInstance.textStyle = newTextStyle;\n            newTextDescriptor.textStyleRange.push(textStyleRangeInstance);\n        }\n\n        return this.updateTextKey(newTextDescriptor, layerIndex);\n    }\n\n    getOrientationInLibrariesFormat(textStyleDescriptor) {\n        const orientation = DescriptorUtils.getEnumerationValueFromDescriptor(textStyleDescriptor, Constants.PSString_ORIENTATION);\n        return orientation ? this.getTextPropertyInLibrariesFormat(this.orientationMap, orientation) : undefined;\n    }\n\n    getAntiAliasInLibrariesFormat(textStyleDescriptor) {\n        const antiAlias = DescriptorUtils.getEnumerationValueFromDescriptor(textStyleDescriptor, Constants.PSString_ANTI_ALIAS);\n        return antiAlias ? this.getTextPropertyInLibrariesFormat(this.antiAliasMap, antiAlias) : undefined;\n    }\n\n    getFontObject(fontPostScriptName, fontList) {\n        const fontObject = {};\n        const fontIndex = fontList.fontPostScriptName.findIndex(postScriptName => postScriptName === fontPostScriptName);\n        if (fontIndex !== -1) {\n            fontObject.family = fontList.fontFamilyName[fontIndex];\n            fontObject.name = fontList.fontName[fontIndex];\n            fontObject.postScriptName = fontList.fontPostScriptName[fontIndex];\n            fontObject.style = fontList.fontStyleName[fontIndex];\n        }\n        return fontObject;\n    }\n\n    async getLibrariesTextItemObject(textStyleDescriptor, orientation, antiAlias, profileName) {\n\n        const textObject = {};\n\n        const fontPostScriptName = Object.prototype.hasOwnProperty.call(textStyleDescriptor, Constants.PSString_fontPostScriptName)\n            ? textStyleDescriptor[Constants.PSString_fontPostScriptName] : 'MyriadPro-Regular';\n\n        const fontList = await DocumentUtils.getFontList();\n\n        const fontObject = this.getFontObject(fontPostScriptName, fontList);\n\n        textObject.adbeFont = {\n            family: fontObject.family,\n            name: fontObject.name,\n            postScriptName: fontObject.postScriptName,\n            style: fontObject.style\n        };\n\n        textObject.fontFamily = fontObject.family;\n\n        const style = fontObject.style.toLowerCase();\n        if (style.indexOf('italic') !== -1) {\n            textObject.fontStyle = 'italic';\n        } else if (style.indexOf('oblique') !== -1) {\n            textObject.fontStyle = 'oblique';\n        }\n\n        if (style.indexOf('bold') !== -1) {\n            textObject.fontWeight = 'bold';\n        } else if (style.indexOf('light') !== -1 || style.indexOf('thin') !== -1) {\n            textObject.fontWeight = 'lighter';\n        }\n        if (Object.prototype.hasOwnProperty.call(textStyleDescriptor, Constants.PSKey_ImpliedFontSize)) {\n            const sizeValue = textStyleDescriptor[Constants.PSKey_ImpliedFontSize]._value;\n            const sizeUnitType = GenericUtils.unitToString(textStyleDescriptor[Constants.PSKey_ImpliedFontSize]._unit);\n            textObject.fontSize = {\n                type: sizeUnitType,\n                value: sizeValue\n            };\n        } else {\n            textObject.fontSize = {\n                type: 'pt',\n                value: 12\n            };\n        }\n        if (Object.prototype.hasOwnProperty.call(textStyleDescriptor, Constants.PSString_AutoLeading) && textStyleDescriptor[Constants.PSString_AutoLeading]) {\n            textObject.adbeAutoLeading = true;\n        }\n\n        if (Object.prototype.hasOwnProperty.call(textStyleDescriptor, Constants.PSKey_ImpliedLeading)) {\n            const leadingValue = textStyleDescriptor[Constants.PSKey_ImpliedLeading]._value;\n            const leadingUnitType = GenericUtils.unitToString(textStyleDescriptor[Constants.PSKey_ImpliedLeading]._unit);\n            textObject.lineHeight = {\n                type: leadingUnitType,\n                value: leadingValue\n            };\n        }\n\n        if (Object.prototype.hasOwnProperty.call(textStyleDescriptor, Constants.PSKey_ImpliedBaselineShift)) {\n            const baselineValue = textStyleDescriptor[Constants.PSKey_ImpliedBaselineShift]._value;\n            const baselineUnitType = GenericUtils.unitToString(textStyleDescriptor[Constants.PSKey_ImpliedBaselineShift]._unit);\n            textObject.baselineShift = {\n                type: baselineUnitType,\n                value: baselineValue\n            };\n        }\n\n        let psColor = ColorUtils.psBlackColor;\n        if (Object.prototype.hasOwnProperty.call(textStyleDescriptor, Constants.PSClass_Color)) {\n            psColor = textStyleDescriptor[Constants.PSClass_Color];\n        }\n\n        textObject.color = await ColorUtils.psSolidColorToLibraryColorWithRGB(psColor, profileName);\n\n        if (Object.prototype.hasOwnProperty.call(textStyleDescriptor, Constants.PSKey_Tracking)) {\n            textObject.adbeTracking = textStyleDescriptor[Constants.PSKey_Tracking];\n            // Adobe tracking is a value of thousandths of an em so store that value for CSS letter-spacing\n            textObject.letterSpacing = {\n                type: 'em',\n                value: (textObject.adbeTracking / 1000.0).toFixed(2)\n            };\n        }\n\n        if (Object.prototype.hasOwnProperty.call(textStyleDescriptor, Constants.PSKey_NoBreak) && textStyleDescriptor[Constants.PSKey_NoBreak]) {\n            textObject.whiteSpace = 'nowrap';\n        }\n\n        if (Object.prototype.hasOwnProperty.call(textStyleDescriptor, Constants.PSKey_HorizontalScale)) {\n            textObject.adbeHorizontalScale = textStyleDescriptor[Constants.PSKey_HorizontalScale];\n        }\n\n        if (Object.prototype.hasOwnProperty.call(textStyleDescriptor, Constants.PSKey_VerticalScale)) {\n            textObject.adbeVerticalScale = textStyleDescriptor[Constants.PSKey_VerticalScale];\n        }\n\n        if (Object.prototype.hasOwnProperty.call(textStyleDescriptor, Constants.PSKey_SyntheticBold) && textStyleDescriptor[Constants.PSKey_SyntheticBold]) {\n            textObject.adbePhxsFauxBold = true;\n        } else {\n            textObject.adbePhxsFauxBold = false;\n        }\n\n        if (Object.prototype.hasOwnProperty.call(textStyleDescriptor, Constants.PSKey_SyntheticItalic) && textStyleDescriptor[Constants.PSKey_SyntheticItalic]) {\n            textObject.adbePhxsFauxItalic = true;\n        } else {\n            textObject.adbePhxsFauxItalic = false;\n        }\n\n        if (orientation) {\n            textObject.adbePhxsDirection = orientation;\n        }\n\n        if (Object.prototype.hasOwnProperty.call(textStyleDescriptor, Constants.PSKey_Underline)) {\n            const psUnderlineValue = DescriptorUtils.getEnumerationValueFromDescriptor(textStyleDescriptor, Constants.PSKey_Underline);\n            if (psUnderlineValue !== this.underlineMap['UnderlineType.UNDERLINEOFF']) {\n                if (textObject.textDecoration) {\n                    textObject.textDecoration.push('underline');\n                } else {\n                    textObject.textDecoration = [ 'underline' ];\n                }\n                textObject.adbePhxsUnderline = this.getTextPropertyInLibrariesFormat(this.underlineMap, psUnderlineValue);\n            }\n        }\n\n        if (Object.prototype.hasOwnProperty.call(textStyleDescriptor, Constants.PSString_strikethrough)) {\n            const psStrikeThroughValue = DescriptorUtils.getEnumerationValueFromDescriptor(textStyleDescriptor, Constants.PSString_strikethrough);\n            if (psStrikeThroughValue !== this.strikeThroughMap['StrikeThruType.STRIKEOFF']) {\n                if (textObject.textDecoration) {\n                    textObject.textDecoration.push('line-through');\n                } else {\n                    textObject.textDecoration = [ 'line-through' ];\n                }\n                textObject.adbePhxsStrikethru = this.getTextPropertyInLibrariesFormat(this.strikeThroughMap, psStrikeThroughValue);\n            }\n        }\n\n        textObject.fontFeatureSettings = [];\n        if (Object.prototype.hasOwnProperty.call(textStyleDescriptor, Constants.PSKey_OldStyle) && textStyleDescriptor[Constants.PSKey_OldStyle]) {\n            textObject.fontFeatureSettings.push('onum');\n        }\n\n        if (Object.prototype.hasOwnProperty.call(textStyleDescriptor, Constants.PSKey_AltLigature) && textStyleDescriptor[Constants.PSKey_AltLigature]) {\n            textObject.fontFeatureSettings.push('dlig');\n        }\n\n        if (Object.prototype.hasOwnProperty.call(textStyleDescriptor, Constants.PSKey_Ligature) && textStyleDescriptor[Constants.PSKey_Ligature]) {\n            textObject.fontFeatureSettings.push('liga');\n        }\n\n        if (Object.prototype.hasOwnProperty.call(textStyleDescriptor, Constants.PSKey_StylisticAlternates) && textStyleDescriptor[Constants.PSKey_StylisticAlternates]) {\n            textObject.fontFeatureSettings.push('salt');\n        }\n\n        if (Object.prototype.hasOwnProperty.call(textStyleDescriptor, Constants.PSKey_Swash) && textStyleDescriptor[Constants.PSKey_Swash]) {\n            textObject.fontFeatureSettings.push('swsh');\n        }\n\n        if (Object.prototype.hasOwnProperty.call(textStyleDescriptor, Constants.PSKey_Fractions) && textStyleDescriptor[Constants.PSKey_Fractions]) {\n            textObject.fontFeatureSettings.push('frac');\n        }\n\n        if (Object.prototype.hasOwnProperty.call(textStyleDescriptor, Constants.PSKey_Titling) && textStyleDescriptor[Constants.PSKey_Titling]) {\n            textObject.fontFeatureSettings.push('titl');\n        }\n\n        if (Object.prototype.hasOwnProperty.call(textStyleDescriptor, Constants.PSKey_ContextualLigatures) && textStyleDescriptor[Constants.PSKey_ContextualLigatures]) {\n            textObject.fontFeatureSettings.push('clig');\n        }\n\n        if (Object.prototype.hasOwnProperty.call(textStyleDescriptor, Constants.PSKey_Ordinals) && textStyleDescriptor[Constants.PSKey_Ordinals]) {\n            textObject.fontFeatureSettings.push('ordn');\n        }\n\n        if (Object.prototype.hasOwnProperty.call(textStyleDescriptor, Constants.PSKey_Ornaments) && textStyleDescriptor[Constants.PSKey_Ornaments]) {\n            textObject.fontFeatureSettings.push('ornm');\n        }\n\n        if (Object.prototype.hasOwnProperty.call(textStyleDescriptor, Constants.PSKey_FontCaps)) {\n            const psFontCapsValue = DescriptorUtils.getEnumerationValueFromDescriptor(textStyleDescriptor, Constants.PSKey_FontCaps);\n            if (psFontCapsValue === Constants.PSString_TEXT_CASE_SMALLCAPS) {\n                textObject.fontFeatureSettings.push('smcp');\n            } else if (psFontCapsValue === Constants.PSString_TEXT_CASE_ALLCAPS) {\n                textObject.textTransform = 'capitalize';\n            }\n        }\n\n        if (Object.prototype.hasOwnProperty.call(textStyleDescriptor, Constants.PSKey_Baseline)) {\n            const psBaselineValue = DescriptorUtils.getEnumerationValueFromDescriptor(textStyleDescriptor, Constants.PSKey_Baseline);\n            if (psBaselineValue === Constants.PSKey_SuperScript) {\n                textObject.fontFeatureSettings.push('sups');\n            } else if (psBaselineValue === Constants.PSKey_SubScript) {\n                textObject.fontFeatureSettings.push('subs');\n            }\n        }\n\n        //If we have no open type settings delete the empty array\n        if (textObject.fontFeatureSettings.length === 0) {\n            delete textObject.fontFeatureSettings;\n        }\n\n        // Set Auto Kerning\n        if (Object.prototype.hasOwnProperty.call(textStyleDescriptor, Constants.PSKey_AutoKerning)) {\n            const psAutoKernValue = DescriptorUtils.getEnumerationValueFromDescriptor(textStyleDescriptor, Constants.PSKey_AutoKerning);\n            textObject.adbePhxsAutoKerning = this.getTextPropertyInLibrariesFormat(this.autoKernMap, psAutoKernValue);\n        }\n\n        // Set Anti Alias Method\n        if (antiAlias) {\n            textObject.adbePhxsAntiAliasMethod = antiAlias;\n        }\n\n        return textObject;\n    }\n\n    async saveTextStylePreview(fontInfo) {\n        const numberOfDocuments = await DocumentUtils.getNumberOfDocuments();\n        if (numberOfDocuments === 0) {\n            return;\n        }\n\n        const activeDocumentId = await DocumentUtils.getActiveDocumentId();\n        const activeLayerId = await DocumentUtils.getActiveLayerId(activeDocumentId);\n        if (activeLayerId) {\n            const layerKind = await DocumentUtils.getLayerKind(activeDocumentId, activeLayerId);\n            if (layerKind === DocumentUtils.layerKindMap['LayerKind.TEXT']) {\n                const tempFolderPath = await AppUtils.tempFolderPath();\n\n                const previewPath = tempFolderPath + '/TextPreview' + FileUtils.generateUuid() + '.png';\n                let postScriptName = 'MyriadPro-Regular';\n                if (fontInfo && fontInfo.adbeFont && fontInfo.adbeFont.postScriptName) {\n                    postScriptName = fontInfo.adbeFont.postScriptName;\n                }\n                const generateTextThumbnailCommand = {\n                    '_obj': 'textThumbnail',\n                    'color': ColorUtils.psBlackColor,\n                    'fontPostScriptName': postScriptName,\n                    'fontSize': Constants.PSGlobals_textPreviewFontSize,\n                    'text': Constants.PSGlobals_textPreviewString,\n                    'to': {\n                        '_kind': 'local',\n                        '_path': previewPath\n                    }\n                };\n\n                await AppUtils.executeBatchPlayCommand(generateTextThumbnailCommand);\n                return previewPath;\n            }\n        }\n    }\n\n    async addPSCharacterStyleWithDesc(name, textDescriptor, profileName, previewPath, opType) {\n        const textStyleDescriptor = textDescriptor.textStyle;\n        const orientation = this.getOrientationInLibrariesFormat(textDescriptor);\n        const antiAlias = this.getAntiAliasInLibrariesFormat(textDescriptor);\n\n        name = name || '';\n        const textItem = await this.getLibrariesTextItemObject(textStyleDescriptor, orientation, antiAlias, profileName);\n        let library, newElement;\n\n        try {\n            if (!textItem) {\n                throw 'getLibrariesTextItemObject returned false';\n            }\n\n            library = libraryManager.getDefaultLibrary();\n\n            if (!library) {\n                throw 'No library';\n            }\n\n            if (!checkLibraryWritable(library)) {\n                return;\n            }\n\n            // SHOULDN'T THESE BE DEFINED SOMEWHERE COMMON (app agonstic)?\n            const CHAR_STYLE_REPRESENTATION_JSON_TYPE = 'application/vnd.adobe.characterstyle+json';\n            const STYLE_NAMESPACE = 'characterstyle';\n            const STYLE_DATA_KEY = 'data';\n\n            newElement = createElementExtraMetrics(library, name, configuration.CHARACTER_STYLE_ELEMENT_TYPE, {\n                opType\n            });\n\n            if (textItem) {\n                newElement\n                    .createRepresentation(CHAR_STYLE_REPRESENTATION_JSON_TYPE, 'primary')\n                    .setValue(STYLE_NAMESPACE,\n                        STYLE_DATA_KEY,\n                        textItem);\n            }\n\n            const updatePromises = [];\n\n            if (previewPath) {\n                const newRendition = newElement.createRepresentation('image/png', 'rendition');\n                const addRenditionPromise = newRendition.setContentFromPath(previewPath);\n                updatePromises.push(addRenditionPromise);\n            }\n\n            return Promise.all(updatePromises).then(function() {\n                const cleanupPromises = [];\n\n                if (previewPath) {\n                    cleanupPromises.push(newElement.setThumbnailCache(configuration.CHARACTER_STYLE_THUMBNAIL_SIZE, previewPath));\n                }\n\n                cleanupPromises.push(newElement.endOperation());\n\n                Promise.all(cleanupPromises).then(() => {\n                    if (previewPath) {\n                        FileUtils.deleteFile(previewPath);\n                    }\n                });\n\n                return newElement;\n\n            }, function() {\n                library.removeElement(newElement, true);\n                return Promise.reject('Could not create element.');\n            });\n\n        } catch (error) {\n            if (library && newElement) {\n                library.removeElement(newElement, true);\n            }\n            return Promise.reject('Could not add character style: ' + error);\n        }\n    }\n}\n\nexport default new PSTextUtils();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { reportApplyMetric, reportApplyFullSizeMetric, getElementModifiedTime } from 'app/js/utils/libraryUtils';\nimport ImageElementConfig from 'app/js/config/elements/ImageElementConfig';\n\nimport path from 'path';\n\nexport default class PPROImageElementConfig extends ImageElementConfig {\n\n    _addImageToDocument(element) {\n        const adobeStockId = AdobeStockUtils.getStockId(element);\n        const representation = this._config.findUsableRepresentation(element);\n        if (representation) {\n            reportApplyMetric(representation, 'placeAsset');\n            return representation.getContentPath().then(filePath => {\n                const mimeTypeInfo = FileUtils.mimeLookup(configuration.IMAGE_ELEMENT_TYPE, representation.type);\n                const isPSD = mimeTypeInfo && mimeTypeInfo.name === 'Photoshop';\n\n                // Note: Premiere on Windows doesn't support \"..\" in paths, so need to normalize\n                return environment.execApp('placeAsset', [\n                    path.normalize(filePath),\n                    isPSD,\n                    element.library.name,\n                    element.name,\n                    element.getLegacyReference(),\n                    getElementModifiedTime(element),\n                    element.created,\n                    adobeStockId,\n                    (adobeStockId ? AdobeStockUtils.isLicensed(element) : null),\n                    false // not linked\n                ]);\n            });\n        }\n\n        // Fallback: use the full-size rendition if we don't have a representation we can use\n        return element.getThumbnailPath().then(filePath => {\n            reportApplyFullSizeMetric(element, 'placeAsset');\n            return environment.execApp('placeAsset', [\n                path.normalize(filePath),\n                false,\n                element.library.name,\n                element.name,\n                element.getLegacyReference(),\n                getElementModifiedTime(element),\n                element.created,\n                adobeStockId,\n                (adobeStockId ? AdobeStockUtils.isLicensed(element) : null),\n                false // not linked\n            ]);\n        });\n    }\n\n    getApplyOperations(element) {\n\n        // If we have no document there is no way to use a graphic\n        const layerInfo = layerSelectionManager.getLayerInfo();\n        if (!layerInfo) {\n            return [];\n        }\n\n        return [ {\n            name: 'DL_ADD_IMAGE_TO_PROJECT',\n            icon: 'download',\n            apply: () => this._addImageToDocument(element),\n            displayInMenu: true\n        } ];\n    }\n\n    isDisabled(element) {\n        return !this._config.findUsableRepresentation(element) && !element.getCachedThumbnailPath();\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { createElementExtraMetrics } from 'app/js/utils/libraryUtils';\nimport LookElementConfig from 'app/js/config/elements/LookElementConfig';\n\nexport default class PPROLookElementConfig extends LookElementConfig {\n\n    getApplyOperations(element) {\n\n        // TODO: This code doesn't do anything - are we expecting looks to be applied in Premiere?\n        const applyLook = () => {\n            const representation = this._config.findUsableRepresentation(element);\n\n            if (representation) {\n                return representation.getContentPath().then(\n                    function() {\n                        return;\n                    }\n                );\n            }\n        };\n\n        return [ {\n            name: 'DL_APPLY_LOOK',\n            onClick: true,\n            isDraggable: true,\n            apply: applyLook,\n            displayInMenu: false\n        } ];\n    }\n\n    _addLookFromData(data, library, opType) {\n        const lookData = JSON.parse(data);\n\n        const newElement = createElementExtraMetrics(library, lookData.name, configuration.LOOK_ELEMENT_TYPE, { opType });\n\n        const updatePromises = [];\n\n        if (lookData.lookPath) {\n            const newRepresentation = newElement.createRepresentation('application/vnd.adobe.look+xml', 'primary');\n            const addRenditionPromise = newRepresentation.setContentFromPath(lookData.lookPath);\n            updatePromises.push(addRenditionPromise);\n        }\n\n        if (lookData.cubePath) {\n            const type = lookData.lookPath ? 'alternate' : 'primary'; // TODO: Should not use alternate\n            const newRepresentation = newElement.createRepresentation('application/vnd.adobe.cube+txt', type);\n            const addRenditionPromise = newRepresentation.setContentFromPath(lookData.cubePath);\n            updatePromises.push(addRenditionPromise);\n        }\n\n        if (lookData.previewPath) {\n            const newRendition = newElement.createRepresentation('image/jpg', 'rendition');\n            const addRenditionPromise = newRendition.setContentFromPath(lookData.previewPath).then(function() {\n                newRendition.width = configuration.LOOK_THUMBNAIL_SIZE;\n                newRendition.height = configuration.LOOK_THUMBNAIL_SIZE;\n            });\n            updatePromises.push(addRenditionPromise);\n        }\n\n        return Promise.all(updatePromises).then(() => {\n            newElement.endOperation().then(() => {\n                if (lookData.lookPath) {\n                    FileUtils.deleteFile(lookData.lookPath);\n                }\n\n                if (lookData.cubePath) {\n                    FileUtils.deleteFile(lookData.cubePath);\n                }\n\n                if (lookData.previewPath) {\n                    FileUtils.deleteFile(lookData.previewPath);\n                }\n            });\n\n            return newElement;\n\n        }, () => {\n            library.removeElement(newElement, true);\n            return Promise.reject('Could not create element.');\n        });\n    }\n\n    getAddOperations(layerInfo) {\n        if (!layerInfo || !layerInfo.look) {\n            return [];\n        }\n\n        const addLook = (library, opType) => {\n            return environment.execApp('getSelectedLookData')\n                .then(data => this._addLookFromData(data, library, opType))\n                .catch(() => Promise.reject('Could not create element.'));\n        };\n\n        return [ {\n            name: 'DL_ADD_LOOK_NAME',\n            order: 0,\n            icon: 'AddLook',\n            apply: addLook\n        } ];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { reportApplyMetric, getElementModifiedTime } from 'app/js/utils/libraryUtils';\nimport VideoElementConfig from 'app/js/config/elements/VideoElementConfig';\n\nimport path from 'path';\n\nexport default class PPROVideoElementConfig extends VideoElementConfig {\n\n    _addVideoToDocument(element) {\n        const adobeStockId = AdobeStockUtils.getStockId(element);\n        const representation = this._config.findUsableRepresentation(element);\n        if (representation) {\n            reportApplyMetric(representation, 'placeAsset');\n            if (AdobeStockUtils.isStockAsset(element)) {\n                const usableFormats = FileUtils.getUsableTypes(element.type);\n                const contentURLs = element.representations\n                    .filter(rep => this._config.isRepresentationCompatible(rep, usableFormats))\n                    .map(rep => ({\n                        contentType: rep.type,\n                        url: rep.getContentURL()\n                    }));\n\n                return environment.execApp('placeAsset', [\n                    contentURLs,\n                    false,\n                    element.library.name,\n                    element.name,\n                    element.getLegacyReference(),\n                    getElementModifiedTime(element),\n                    element.created,\n                    adobeStockId,\n                    (adobeStockId ? AdobeStockUtils.isLicensed(element) : null),\n                    false\n                ]);\n            }\n\n            // Note: Premiere on Windows doesn't support \"..\" in paths, so need to normalize\n            representation.getContentPath().then(filePath => {\n                return environment.execApp('placeAsset', [\n                    path.normalize(filePath),\n                    false,\n                    element.library.name,\n                    element.name,\n                    element.getLegacyReference(),\n                    getElementModifiedTime(element),\n                    element.created,\n                    null,\n                    null,\n                    false\n                ]);\n            });\n        }\n    }\n\n    getApplyOperations(element) {\n        // If we have no document there is no way to use a graphic\n        const layerInfo = layerSelectionManager.getLayerInfo();\n        if (!layerInfo) {\n            return [];\n        }\n\n        return [ {\n            name: 'DL_ADD_TO_PROJECT',\n            icon: 'download',\n            apply: () => this._addVideoToDocument(element),\n            displayInMenu: true\n        } ];\n    }\n\n    /**\n     * Videos in PPRO should draggable from the Stock search view\n     * TODO: CCXC-4351 has to be resolved before the the video drag operation actually works\n     * @returns {boolean} always returns false\n     */\n    isStockAssetDraggable() {\n        return true;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { reportApplyMetric, getElementModifiedTime } from 'app/js/utils/libraryUtils';\nimport AudioElementConfig from 'app/js/config/elements/AudioElementConfig';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\n\nimport path from 'path';\n\nexport default class PPROAudioElementConfig extends AudioElementConfig {\n\n    _addAudioToDocument(element) {\n        const adobeStockId = AdobeStockUtils.getStockId(element);\n        const representation = this._config.findUsableRepresentation(element);\n        if (representation) {\n            reportApplyMetric(representation, 'placeAsset');\n\n            // Note: Premiere on Windows doesn't support \"..\" in paths, so need to normalize\n            representation.getContentPath().then(filePath => {\n                return environment.execApp('placeAsset', [\n                    path.normalize(filePath),\n                    false,\n                    element.library.name,\n                    element.name,\n                    element.getLegacyReference(),\n                    getElementModifiedTime(element),\n                    element.created,\n                    adobeStockId,\n                    (adobeStockId ? AdobeStockUtils.isLicensed(element) : null),\n                    false // not linked\n                ]);\n            });\n        }\n    }\n\n    getApplyOperations(element) {\n        const layerInfo = layerSelectionManager.getLayerInfo();\n        if (!layerInfo) {\n            return [];\n        }\n\n        return [ {\n            name: 'DL_ADD_TO_PROJECT',\n            icon: 'download',\n            apply: () => this._addAudioToDocument(element),\n            displayInMenu: true\n        } ];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport TextStyleElementConfig from 'app/js/config/elements/TextStyleElementConfig';\n\nexport default class PPROTextStyleElementConfig extends TextStyleElementConfig {\n\n    getDragData(element) {\n        return this._getStyleData(element) || {};\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport environment from 'app/js/environment';\nimport imsInterface from 'app/js/interface/imsInterface';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport * as ColorUtils from 'app/js/utils/colorUtils';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { createElementExtraMetrics } from 'app/js/utils/libraryUtils';\nimport featureFlags from 'app/js/config/featureFlags';\n\n// Import all the element type configuration overrides\nimport DefaultConfigs from 'app/js/config/elements/DefaultConfigs';\nimport ImageElementConfig from './elements/ImageElementConfig';\nimport LookElementConfig from './elements/LookElementConfig';\nimport VideoElementConfig from './elements/VideoElementConfig';\nimport AudioElementConfig from './elements/AudioElementConfig';\nimport TextStyleElementConfig from './elements/TextStyleElementConfig';\n\nexport function getAppConfiguration() {\n\n    function rgbColorFromColor(color) {\n        return ColorUtils.rgbToHex(color, color, color).slice(1).toLowerCase();\n    }\n\n    // PPro V5 darkest color is (Decimal / Hex) 35 / 23 and dark is 75 / 4b\n    this.getScaleColor = function(step) {\n        const darkStart = 35,\n            stepSize = 0.4,\n            start = darkStart,\n            delta = step,\n            value = delta * stepSize + start;\n        return rgbColorFromColor(value, value, value);\n    };\n    this.cssThemeBGScale = function() {\n        const scale = {};\n\n        const themes = {\n            darker: 'darker',\n            dark_v7: 'dark-v7',\n            dark: 'dark',\n            light: 'light',\n        };\n\n        const lookupStepName = step => {\n            switch (step) {\n            case 0:\n                return themes.darker;\n            case 100:\n                return themes.dark;\n            default:\n                return 'generated/' + step;\n            }\n        };\n\n        for (let i = 0; i <= 100; i++) {\n            const hex = this.getScaleColor(i);\n            if (!Object.prototype.hasOwnProperty.call(scale, hex) || (Object.prototype.hasOwnProperty.call(scale, hex) && lookupStepName(i) !== 'generated/' + i)) {\n                scale[hex] = lookupStepName(i);\n            }\n        }\n\n        // For Drover v7 skins (Spectrum), there are 3 specific values that need to be mapped.\n        [ [ 0x1d, themes.darker ], [ 0x32, themes.dark_v7 ], [ 0xf8, themes.light ] ]\n            .forEach(info => {\n                const rgb = rgbColorFromColor(info[0]);\n                scale[rgb] = info[1];\n            });\n\n        return scale;\n    };\n\n    this.config = {};\n    this.config.code = 'PPRO';\n    this.config.fullName = 'Premiere Pro';\n    this.config.translationSuffix = 'PR';\n    this.config.dragDropSource = 'com.adobe.premiere';\n    this.config.stockDragFormat = 'jpeg';\n    this.config.defaultStockSearchOptions = [ configuration.STOCK_SEARCH_OPTION_VIDEO.id ];\n\n    this.config.themes = this.cssThemeBGScale();\n    this.config.defaultTheme = 'darker';\n    this.config.addSupportForTextStyle = true;\n\n    this.config.elementTypes = [\n        ImageElementConfig,\n        VideoElementConfig,\n        LookElementConfig,\n        AudioElementConfig,\n        TextStyleElementConfig,\n        DefaultConfigs.CapsuleElementConfig,\n        DefaultConfigs.ColorElementConfig,\n        DefaultConfigs.ColorThemeElementConfig,\n        DefaultConfigs.ComponentElementConfig,\n        DefaultConfigs.BrushElementConfig,\n        DefaultConfigs.LayerStyleElementConfig,\n        DefaultConfigs.ParagraphStyleElementConfig,\n        DefaultConfigs.FontElementConfig,\n        DefaultConfigs.ThreeDElementConfig,\n        DefaultConfigs.PatternElementConfig,\n        DefaultConfigs.TemplateElementConfig,\n        DefaultConfigs.TextElementConfig,\n        DefaultConfigs.AnimationElementConfig,\n        DefaultConfigs.LightElementConfig,\n        DefaultConfigs.MaterialElementConfig,\n        DefaultConfigs.GradientElementConfig,\n        DefaultConfigs.ChannelElementConfig,\n        DefaultConfigs.ImageGuidelineElementConfig,\n        DefaultConfigs.UnsupportedElementConfig\n    ];\n\n    // This defines the element categories that are collapsed by default in the UI - change this to suit your application.\n    this.config.collapsedTypes = [\n        configuration.BRUSH_ELEMENT_TYPE,\n        configuration.CHANNEL_ELEMENT_TYPE,\n        configuration.GRADIENT_ELEMENT_TYPE,\n        configuration.FONT_ELEMENT_TYPE,\n        configuration.LAYER_STYLE_ELEMENT_TYPE,\n        configuration.PARAGRAPH_STYLE_ELEMENT_TYPE,\n        configuration.THREE_D_ELEMENT_TYPE,\n        configuration.PATTERN_ELEMENT_TYPE,\n        configuration.TEXT_ELEMENT_TYPE,\n        configuration.TEMPLATE_ELEMENT_TYPE,\n        configuration.ANIMATION_ELEMENT_TYPE,\n        configuration.LIGHT_ELEMENT_TYPE,\n        configuration.MATERIAL_ELEMENT_TYPE,\n        configuration.IMAGE_GUIDELINE_ELEMENT_TYPE,\n        configuration.UNSUPPORTED_ELEMENT_TYPE\n    ];\n\n    this.init = function() {\n        FileUtils.extendUsableTypes(configuration.IMAGE_ELEMENT_TYPE, [\n            'application/illustrator',\n            'application/photoshop',\n            'application/photoshop.large',\n            'image/vnd.adobe.photoshop',\n            'image/png',\n            'image/jpeg',\n            'image/jpg',\n            'image/heic'\n        ]);\n        FileUtils.extendUsableTypes(configuration.LOOK_ELEMENT_TYPE, [\n            'application/vnd.adobe.cube+txt',\n            'application/vnd.adobe.look+xml'\n        ]);\n\n        // TODO: update with full list of supported video elements\n        FileUtils.extendUsableTypes(configuration.VIDEO_ELEMENT_TYPE, [\n            'video/mp4',\n            'video/quicktime',\n            'video/x-quicktime',\n            'video/x-ms-wmv',\n            'video/x-ms-asf',\n            'video/x-msvideo',\n            'video/mpeg'\n        ]);\n\n        FileUtils.extendUsableTypes(configuration.COLOR_ELEMENT_TYPE, [ 'application/vnd.adobe.color+json' ]);\n        FileUtils.extendUsableTypes(configuration.COLOR_THEME_ELEMENT_TYPE, [ 'application/vnd.adobe.colortheme+json' ]);\n        FileUtils.extendUsableTypes(configuration.AUDIO_ELEMENT_TYPE, [\n            'audio/aac',\n            'audio/x-aac',\n            'audio/aacp',\n            'audio/mpeg',\n            'audio/mpeg3',\n            'audio/m4a',\n            'audio/mp3',\n            'audio/3gpp',\n            'audio/3gpp2',\n            'audio/x-aiff',\n            'audio/aif',\n            'audio/wav',\n            'audio/x-wav',\n        ]);\n\n        FileUtils.extendUsableTypes(configuration.CAPSULE_ELEMENT_TYPE, [\n            'application/vnd.adobe.ppro.graphic+zip',\n            'application/vnd.adobe.ae.graphic+zip'\n        ]);\n\n        FileUtils.extendUsableTypes(configuration.COMPONENT_ELEMENT_TYPE, [ 'image/png' ]);\n\n        if (featureFlags.get('enableTextStyle')) {\n            FileUtils.extendUsableTypes(configuration.CHARACTER_STYLE_ELEMENT_TYPE, [ 'application/vnd.adobe.characterstyle+json' ]);\n        }\n\n        environment.execApp('getTooltipState').then(function(tooltipState) {\n            configuration.showTooltips = tooltipState;\n        });\n\n        this.startEventListener();\n\n        libraryManager.waitForInitialLoad().then(function() {\n            //Report to app that we are fully loaded\n            const event = environment.createEvent('com.adobe.DesignLibraries.events.READY', 'APPLICATION');\n            //TODO: Verify this change\n            environment.dispatchEvent(event);\n        });\n    };\n\n    this.reportEvent = function() {\n        // Not supported by PPRO yet\n        return undefined;\n    };\n\n    this.getUserData = function(callback) {\n        environment.execApp('getUserData').then(function(strReturnValue) {\n            if (strReturnValue && strReturnValue !== 'undefined') {\n                callback(JSON.parse(strReturnValue));\n                return;\n            }\n\n            return callback();\n        });\n    };\n\n    const onLayerUpdateEvent = () => layerSelectionManager.handleSelectionChange();\n\n    const onGetIMSAccessToken = () => {\n        const userId = libraryManager.userId ?? '';\n        const messageData = {\n            clientId: imsInterface.getEnvironment().clientId,\n            imsToken: ''\n        };\n        const eventName = 'com.adobe.DesignLibraries.events.UserAccessToken';\n\n        return imsInterface.getAccessToken(userId).then(function(accessToken) {\n            messageData.imsToken = accessToken;\n            const event = environment.createEvent(eventName, 'APPLICATION');\n            event.data = JSON.stringify(messageData);\n            environment.dispatchEvent(event);\n        }, function() {\n            const event = environment.createEvent(eventName, 'APPLICATION');\n            event.data = JSON.stringify(messageData);\n            environment.dispatchEvent(event);\n        });\n    };\n\n    const onGetVideoDownloadData = async event => {\n        const elementRefData = event.data;\n        const element = await libraryManager.resolveElementReference(elementRefData);\n        const updateAssetReq = {\n            elementRef: elementRefData\n        };\n        if (!element) {\n            // Send empty message (only return the given reference)\n            updateAssetReq.name = '';\n        } else {\n            // Send info\n            updateAssetReq.name = element.name;\n            updateAssetReq.id = element.id;\n            updateAssetReq.libraryName = element.library.name;\n            updateAssetReq.reference = element.getLegacyReference();\n            updateAssetReq.modified = element.modified;\n            updateAssetReq.created = element.created;\n            updateAssetReq.adobeStockId = AdobeStockUtils.getStockId(element);\n            updateAssetReq.licensed = (updateAssetReq.adobeStockId ? AdobeStockUtils.isLicensed(element) : null);\n\n            // TODO: Do we know it's always a video?\n            const representation = elementConfiguration.findUsableRepresentation(element, FileUtils.getUsableTypes(configuration.VIDEO_ELEMENT_TYPE));\n\n            if (representation) {\n                updateAssetReq.width = representation.width;\n                updateAssetReq.height = representation.height;\n                updateAssetReq.contentLength = representation.contentLength;\n                updateAssetReq.url = representation.getContentURL();\n                updateAssetReq.trackingdata = representation.getValue('adobestock', 'trackingdata');\n                updateAssetReq.contentType = representation.type;\n                const extensions = FileUtils.mimeTypeToExtensions(representation.type);\n                updateAssetReq.extension = extensions[extensions.length - 1];\n\n                const videoData = representation.getValue('video', 'data') || false;\n                if (videoData) {\n                    updateAssetReq.framerate = Number(videoData.framerate);\n                    updateAssetReq.duration = videoData.duration;\n                }\n            }\n\n            const eventName = 'com.adobe.DesignLibraries.events.VideoUpdate';\n            const sendEvent = environment.createEvent(eventName, 'APPLICATION');\n            sendEvent.data = JSON.stringify(updateAssetReq);\n            environment.dispatchEvent(sendEvent);\n        }\n    };\n\n    const onGetLibraryReadWriteStatus = event => {\n        const LIBRARYSTATUS = {\n            LIBRARY_WRITABLE : 0,\n            LIBRARY_NOT_FOUND : 1,\n            LIBRARY_READ_ONLY : 2\n        };\n\n        const responseEventName = 'com.adobe.DesignLibraries.events.LibraryReadWriteStatusResponse';\n        const responseEvent = environment.createEvent(responseEventName, 'APPLICATION');\n        const responseStatus = { code : 0, result: [] };\n\n        const eventData = event.data;\n        const libraryIdList = eventData.libraryIdList;\n\n        if (libraryIdList.length > 0) {\n            libraryIdList.forEach(function(libraryId) {\n                const libraryResult = { id : libraryId, status :  LIBRARYSTATUS.LIBRARY_WRITABLE };\n                const library = libraryManager.getLibraryById(libraryId);\n                if (!library) {\n                    libraryResult.status = LIBRARYSTATUS.LIBRARY_NOT_FOUND;\n                } else if (!library.isWritable) {\n                    libraryResult.status = LIBRARYSTATUS.LIBRARY_READ_ONLY;\n                }\n                responseStatus.result.push(libraryResult);\n            });\n        }\n        responseEvent.data = JSON.stringify(responseStatus);\n        environment.dispatchEvent(responseEvent);\n    };\n\n    const onUploadCapsule = event => {\n        //Upload Response Codes\n        const UPLOADRESPONSE = {\n            NO_ERROR : 0,\n            UPLOAD_FAILED : 1,\n            PRIMARY_FILE_MISSING : 2,\n            SECONDARY_FILE_MISSING : 3,\n            THUMBNAIL_FILE_MISSING : 4,\n            LIBRARY_NOT_FOUND : 5,\n            LIBRARY_READ_ONLY : 6\n        };\n\n        const responseEventName = 'com.adobe.DesignLibraries.events.UploadCapsuleResponse';\n        const responseEvent = environment.createEvent(responseEventName, 'APPLICATION');\n        const responseStatus = { code : UPLOADRESPONSE.NO_ERROR };\n\n        const capsuleData = event.data;\n        const library = libraryManager.getLibraryById(capsuleData.libraryId);\n        //validate we have all mandatory data\n        let err = UPLOADRESPONSE.NO_ERROR;\n        if (!FileUtils.existsFile(capsuleData.primaryPath)) {\n            err = UPLOADRESPONSE.PRIMARY_FILE_MISSING;\n        }\n        if ((err === UPLOADRESPONSE.NO_ERROR) && !FileUtils.existsFile(capsuleData.secondaryPath)) {\n            err = UPLOADRESPONSE.SECONDARY_FILE_MISSING;\n        }\n        if ((err === UPLOADRESPONSE.NO_ERROR) && !FileUtils.existsFile(capsuleData.thumbnailPath)) {\n            err = UPLOADRESPONSE.THUMBNAIL_FILE_MISSING;\n        }\n        if ((err === UPLOADRESPONSE.NO_ERROR) && !library) {\n            err = UPLOADRESPONSE.LIBRARY_NOT_FOUND;\n        }\n        if ((err === UPLOADRESPONSE.NO_ERROR) && !library.isWritable) {\n            err = UPLOADRESPONSE.LIBRARY_READ_ONLY;\n        }\n        if (err === UPLOADRESPONSE.NO_ERROR) {\n\n            const sendProgress = (currentCount, totalCount) => {\n                const progressEvent = environment.createEvent('com.adobe.DesignLibraries.events.UploadCapsuleProgress', 'APPLICATION');\n                progressEvent.data = JSON.stringify({ current : currentCount, total : totalCount });\n                environment.dispatchEvent(progressEvent);\n            };\n\n            const promises = [];\n\n            //for upload progress\n            let totalCount = 3;\n            let uploadCount = 0;\n\n            //check if we have optional video preview\n            if (capsuleData.videoPreviewPath && FileUtils.existsFile(capsuleData.videoPreviewPath)) {\n                totalCount = totalCount + 1;\n            }\n\n            sendProgress(uploadCount, totalCount);\n            const newElement = createElementExtraMetrics(library, capsuleData.capsuleName, configuration.CAPSULE_ELEMENT_TYPE, {});\n\n            if (capsuleData.primaryPath) {\n                // check for file type, Premiere can upload both AEGraphic and PRGraphic files\n                const primaryFileExtension = FileUtils.getFileNameExtension(capsuleData.primaryPath);\n                const type = primaryFileExtension === 'aegraphic' ? 'application/vnd.adobe.ae.graphic+zip' : 'application/vnd.adobe.ppro.graphic+zip';\n                const representation = newElement.createRepresentation(type, 'primary');\n\n                //add metadata\n                if (capsuleData.metadata) {\n                    const metadata = JSON.parse(capsuleData.metadata);\n                    representation.setValue(configuration.CAPSULE_NAMESPACE, configuration.CAPSULE_DATA_KEY, metadata);\n                }\n\n                const representationPromise = representation.setContentFromPath(capsuleData.primaryPath).then(function() {\n                    //progress update\n                    uploadCount = uploadCount + 1;\n                    sendProgress(uploadCount, totalCount);\n                });\n                promises.push(representationPromise);\n            }\n\n            if (capsuleData.secondaryPath) {\n                const representation = newElement.createRepresentation('application/vnd.adobe.graphic+json', 'alternate');\n                const representationPromise = representation.setContentFromPath(capsuleData.secondaryPath).then(function() {\n                    //progress update\n                    uploadCount = uploadCount + 1;\n                    sendProgress(uploadCount, totalCount);\n                });\n                promises.push(representationPromise);\n            }\n\n            if (capsuleData.thumbnailPath) {\n                const representation = newElement.createRepresentation('image/png', 'rendition');\n                const representationPromise = representation.setContentFromPath(capsuleData.thumbnailPath).then(function() {\n                    //progress update\n                    uploadCount = uploadCount + 1;\n                    sendProgress(uploadCount, totalCount);\n                });\n                promises.push(representationPromise);\n            }\n\n            if (capsuleData.videoPreviewPath && FileUtils.existsFile(capsuleData.videoPreviewPath)) {\n                const representation = newElement.createRepresentation('video/mp4', 'rendition');\n                const representationPromise = representation.setContentFromPath(capsuleData.videoPreviewPath).then(function() {\n                    //progress update\n                    uploadCount = uploadCount + 1;\n                    sendProgress(uploadCount, totalCount);\n                });\n                promises.push(representationPromise);\n            }\n\n            const handleSuccess = () => {\n                const cleanupPromises = [];\n\n                // Add thumbnail into cache\n                cleanupPromises.push(newElement.setThumbnailCache(configuration.CAPSULE_THUMBNAIL_SIZE, capsuleData.thumbnailPath));\n\n                // Commit the element\n                cleanupPromises.push(newElement.endOperation());\n\n                Promise.all(cleanupPromises).then(() => {\n                    if (capsuleData.primaryPath) {\n                        FileUtils.deleteFile(capsuleData.primaryPath);\n                    }\n\n                    if (capsuleData.secondaryPath) {\n                        FileUtils.deleteFile(capsuleData.secondaryPath);\n                    }\n\n                    if (capsuleData.thumbnailPath) {\n                        FileUtils.deleteFile(capsuleData.thumbnailPath);\n                    }\n                });\n\n                // reveal newly added element\n                elementSelectionState.revealElement(newElement);\n                responseEvent.data = JSON.stringify(responseStatus);\n                environment.dispatchEvent(responseEvent);\n            };\n\n            const handleError = () => {\n                // Remove the element, since something went wrong\n                library.removeElement(newElement, true);\n\n                responseStatus.code = UPLOADRESPONSE.UPLOAD_FAILED;\n                responseEvent.data = JSON.stringify(responseStatus);\n                environment.dispatchEvent(responseEvent);\n            };\n\n            Promise.all(promises).then(handleSuccess, handleError);\n        } else {\n            responseStatus.code = err;\n            responseEvent.data = JSON.stringify(responseStatus);\n            environment.dispatchEvent(responseEvent);\n        }\n    };\n\n    const onDeleteCapsule = event => {\n        //Delete Response Codes\n        const DELETESTATUS = {\n            NO_ERROR : 0,\n            ELEMENT_NOT_FOUND : 1,\n            LIBRARY_NOT_FOUND : 2,\n            LIBRARY_READ_ONLY : 3\n        };\n\n        const responseEventName = 'com.adobe.DesignLibraries.events.DeleteCapsuleResponse';\n        const responseEvent = environment.createEvent(responseEventName, 'APPLICATION');\n        const responseStatus = { code : 0, result : [] };\n\n        const eventData = event.data;\n\n        const itemsToDelete = eventData.items;\n\n        if (itemsToDelete.length > 0) {\n            itemsToDelete.forEach(function(item) {\n                const deleteResult = { elementId : item.elementId, libraryId : item.libraryId, status : DELETESTATUS.NO_ERROR };\n\n                // Check library exist and not ReadOnly\n                const library = libraryManager.getLibraryById(item.libraryId);\n                if (!library) {\n                    deleteResult.status = DELETESTATUS.LIBRARY_NOT_FOUND;\n                } else if (!library.isWritable) {\n                    deleteResult.status = DELETESTATUS.LIBRARY_READ_ONLY;\n                }\n\n                // Check element exist\n                if (deleteResult.status === DELETESTATUS.NO_ERROR) {\n                    const element = library.getElementById(item.elementId);\n                    if (element) {\n                        try {\n                            library.removeElement(element);\n                        } catch (ex) {\n                            deleteResult.status = DELETESTATUS.ELEMENT_NOT_FOUND;\n                        }\n                    } else {\n                        deleteResult.status = DELETESTATUS.ELEMENT_NOT_FOUND;\n                    }\n                }\n\n                responseStatus.result.push(deleteResult);\n            });\n        }\n        responseEvent.data = JSON.stringify(responseStatus);\n        environment.dispatchEvent(responseEvent);\n    };\n\n    const onUpdateAlternateRepresentation = event => {\n        //Update Response Codes\n        const UPDATERESPONSE = {\n            NO_ERROR : 0,\n            UPDATE_FAILED : 1,\n            JSON_FILE_MISSING : 2,\n            REPRESENTATION_NOT_FOUND : 3,\n            ELEMENT_NOT_FOUND: 4,\n            LIBRARY_NOT_FOUND : 5,\n            LIBRARY_READ_ONLY : 6\n        };\n\n        const responseEventName = 'com.adobe.DesignLibraries.events.UpdateCapsuleResponse';\n        const responseEvent = environment.createEvent(responseEventName, 'APPLICATION');\n        const responseStatus = { code : UPDATERESPONSE.NO_ERROR };\n\n        const capsuleData = event.data;\n\n        //validate we have all mandatory data\n        let err = UPDATERESPONSE.NO_ERROR;\n        if (!FileUtils.existsFile(capsuleData.jsonPath)) {\n            err = UPDATERESPONSE.JSON_FILE_MISSING;\n        }\n\n        const library = libraryManager.getLibraryById(capsuleData.libraryId);\n        if ((err === UPDATERESPONSE.NO_ERROR) && !library) {\n            err = UPDATERESPONSE.LIBRARY_NOT_FOUND;\n        }\n        if ((err === UPDATERESPONSE.NO_ERROR) && !library.isWritable) {\n            err = UPDATERESPONSE.LIBRARY_READ_ONLY;\n        }\n\n        const element = library.getElementById(capsuleData.elementId);\n        if ((err === UPDATERESPONSE.NO_ERROR) && !element) {\n            err = UPDATERESPONSE.ELEMENT_NOT_FOUND;\n        }\n        //find the alternate representation that will be replaced(removed)\n        const representationToRemove = element.representations.find(rep => rep.relationship === 'alternate');\n        if (err === UPDATERESPONSE.NO_ERROR && !representationToRemove) {\n            err = UPDATERESPONSE.REPRESENTATION_NOT_FOUND;\n        }\n\n        if (err === UPDATERESPONSE.NO_ERROR) {\n            const promises = [];\n\n            // Start editing element\n            element.beginOperation();\n\n            let representation;\n            if (capsuleData.jsonPath) {\n                representation = element.createRepresentation('application/vnd.adobe.graphic+json', 'alternate');\n                const representationPromise = representation.setContentFromPath(capsuleData.jsonPath);\n                promises.push(representationPromise);\n            }\n\n            const handleSuccess = () => {\n                // Now we can safely remove the older representation\n                element.removeRepresentation(representationToRemove);\n\n                // Commit the element\n                element.endOperation().then(() => {\n                    if (capsuleData.jsonPath) {\n                        FileUtils.deleteFile(capsuleData.jsonPath);\n                    }\n                });\n\n                // reveal newly updated element\n                elementSelectionState.revealElement(element);\n                responseEvent.data = JSON.stringify(responseStatus);\n                environment.dispatchEvent(responseEvent);\n            };\n\n            const handleError = () => {\n                // Remove the representation, since something went wrong\n                element.removeRepresentation(representation);\n\n                // Commit the element\n                element.endOperation();\n\n                responseStatus.code = UPDATERESPONSE.UPDATE_FAILED;\n                responseEvent.data = JSON.stringify(responseStatus);\n                environment.dispatchEvent(responseEvent);\n            };\n\n            Promise.all(promises).then(handleSuccess, handleError);\n        } else {\n            responseStatus.code = err;\n            responseEvent.data = JSON.stringify(responseStatus);\n            environment.dispatchEvent(responseEvent);\n        }\n    };\n\n    this.startEventListener = function() {\n        environment.addEventListener('lookSelectionChanged', onLayerUpdateEvent);\n        environment.addEventListener('getIMSAccessToken', onGetIMSAccessToken);\n        environment.addEventListener('getVideoDownloadData', onGetVideoDownloadData);\n        environment.addEventListener('getLibraryReadWriteStatus', onGetLibraryReadWriteStatus);\n        environment.addEventListener('uploadCapsuleEvent', onUploadCapsule);\n        environment.addEventListener('deleteCapsuleEvent', onDeleteCapsule);\n        environment.addEventListener('updateCapsuleJSON', onUpdateAlternateRepresentation);\n    };\n\n    this.stopEventListener = function() {\n        environment.removeEventListener('lookSelectionChanged', onLayerUpdateEvent);\n        environment.removeEventListener('getIMSAccessToken', onGetIMSAccessToken);\n        environment.removeEventListener('getVideoDownloadData', onGetVideoDownloadData);\n        environment.removeEventListener('getLibraryReadWriteStatus', onGetLibraryReadWriteStatus);\n        environment.removeEventListener('uploadCapsuleEvent', onUploadCapsule);\n        environment.removeEventListener('deleteCapsuleEvent', onDeleteCapsule);\n        environment.removeEventListener('updateCapsuleJSON', onUpdateAlternateRepresentation);\n    };\n\n    // TODO: Refactor the above to return an object, rather than using this\n    return this;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n// XD Gradients do not support specifying an angle/aspect ratio.\n// Instead, these values are to be expressed by specifying the points where the gradient line begins and ends.\n// The points are X-Y coordinates in the range of 0-1 relative to the top-left corner of the container box of the object recieving the gradient.\n\nexport default class Gradient {\n\n    constructor(type, gradientData) {\n        this.type = type;\n        this._xdGradient = gradientData;\n    }\n\n    // From an XD Gradient, generate a corresponding JSON object in the CC Libraries Gradient standard.\n    // https://wiki.corp.adobe.com/display/ccexperience/Gradient\n    serializeForLibrary() {\n        const opacities = [];\n        const stops = this._xdGradient.getColorStops().map(stop => {\n            const offset = stop.stop;\n            // Generate RGBA representation object for this color.\n            const color = stop.color.serializeAGC();\n            const opacity = color.alpha === undefined ? 1 : color.alpha;\n            delete color.alpha;\n            opacities.push({ offset, opacity });\n            return ({ offset, color: [ color ] });\n        });\n        const type = this.type;\n        // Turn clockwise to anticlockwise.\n        const angle = (360 - this.nativeAngle) % 360;\n        const aspectRatio = this.aspectRatio;\n        const centerPoint = this.centerPoint;\n        const scale = this.scale;\n        return { type, stops, opacities, angle, aspectRatio, scale, centerPoint };\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport Gradient from './Gradient';\n\n// We can express a Linear Gradient with an angle of 45deg by giving the gradient endpoints of { x1: 0, y1: 1, x2: 1, y2: 0 }\n// (Please enlist your imagination for the drawing below)\n\n//   (0,0)         (1,0)\n//     +-------------+\n//     |          ***|\n//     |        **   |\n//     |      **     |\n//     |    **       |\n//     |  **         |\n//     |***          |\n//     +-------------+\n//   (0,1)         (1,1)\n\nexport default class LinearGradient extends Gradient {\n\n    constructor(gradientData) {\n        super('linear', gradientData || new environment.LinearGradient());\n    }\n\n    setColorStops(colorStops) {\n        this._xdGradient.setColorStops(colorStops);\n    }\n\n    setEndPoints({ selection, angle, aspectRatio, xdEndPoints }) {\n        // XD supports 2D endpoints for linear gradients, relative to a container.\n        // If this data is present, we'll apply it - otherwise we fall back to computing\n        // the endpoints based on the angle (e.g. for gradients created in other apps).\n        if (xdEndPoints) {\n            const { startX, startY, endX, endY } = xdEndPoints;\n            this._xdGradient.setEndPoints(startX, startY, endX, endY);\n            return;\n        }\n\n        // The PSD JS library contains a utility that can find the endpoints needed to create a particular angle.\n        // All it needs is the (anticlockwise) angle of the line we want and the aspect ratio of the object that will contain the gradient.\n        // (It also takes in a scale factor for the gradient but we will always set it to 100%)\n        // Link for the curious: https://git.corp.adobe.com/WebPA/PsdLib/blob/master/js/agc/resolvers/PlAgcGradientParams.ts\n        // Keep the line within the object for linear gradients.\n        aspectRatio = selection.localBounds.width / selection.localBounds.height;\n        const getGradientParams = environment.psdUtils.PlAgcGradientParams.getLinearGradientParams;\n        const { x1, y1, x2, y2 } = getGradientParams(angle, 100, aspectRatio);\n        this._xdGradient.setEndPoints(x1, y1, x2, y2);\n    }\n\n    // applies to the selection on canvas and creates a document asset will be linked to the element\n    apply(element, mode) {\n        environment.applyColorToSelection(mode, this._xdGradient, element);\n    }\n\n    // Clockwise angle formed by the gradient line, as used by XD.\n    get nativeAngle() {\n        // Angle in Radians, range -PI, PI.\n        let angle = Math.atan2(this._xdGradient.endY - this._xdGradient.startY, this._xdGradient.endX - this._xdGradient.startX);\n        // Convert to degrees. Range -180, 180.\n        angle = angle * (180 / Math.PI);\n        // Ensure range 0, 360.\n        if (angle < 0) { angle = angle + 360; }\n        return angle;\n    }\n\n    serializeForLibrary() {\n        const data = super.serializeForLibrary();\n        data.xdEndPoints = {\n            startX: this._xdGradient.startX,\n            startY: this._xdGradient.startY,\n            endX: this._xdGradient.endX,\n            endY: this._xdGradient.endY\n        };\n        return data;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport Gradient from './Gradient';\n\n// We could express a Radial Gradient with an aspect ratio of 0.5 by giving the gradient endpoints of { x1: 0.5, y1: 0.5, x2: 1.5, y2: 0.5 }.\n// Which would give the ellipse a radius twice as long as the height (overflowing the container).\n// (Please enlist your imagination for the drawing below)\n\n//     +----------+\n//     | * * * * *|\n//    *|     *----|*------* (1.5, 0.5)\n//    *|          |*\n//     | * * * * *|\n//     +----------+\n\nexport default class RadialGradient extends Gradient {\n\n    constructor(gradientData, bounds) {\n        super('radial', gradientData || new environment.RadialGradient());\n        this._bounds = bounds || { height: 1, width: 1 };\n    }\n\n    setColorStops(colorStops) {\n        this._xdGradient.setColorStops(colorStops);\n    }\n\n    setEndPoints({ angle, aspectRatio, scale, centerX, centerY }) {\n        // Offset the ellipse from the center of the container to account for the centerPoint, and scale the radius\n        const radius = 0.5 * scale; // Adjust from diameter scale to radius scale\n        this._xdGradient.setEndPoints(centerX, centerY, centerX + radius, centerY);\n\n        // The aspect ratio of the radial gradient is the relationship of the height and the width of the ellipse.\n        // i.e an aspect ratio of 0.5 means that the height should be half the width.\n        // Radial Gradients include a method to calculate the transformation matrix needed to draw a particular elipse, including the aspect ratio and the angle!\n        // These gradients use clockwise angles while our gradients go anti-clockwise so we need to flip the angle.\n        this._xdGradient.gradientTransform = this._xdGradient.boundingBoxTransform({ scaleX: 1, scaleY: aspectRatio, degreeRotation: (360 - angle) % 360 });\n    }\n\n    // applies to the selection on canvas and creates a document asset will be linked to the element\n    apply(element, mode) {\n        environment.applyColorToSelection(mode, this._xdGradient, element);\n    }\n\n    // Clockwise angle formed by the gradient line, as used by XD.\n    get nativeAngle() {\n        return this._xdGradient.scaleFactorsAndRotation().degreeRotation;\n    }\n\n    get aspectRatio() {\n        // To get the aspect ratio of the gradient, we need the aspect ratio of the ellipse\n        // Note: scaleX is always 1, so we ignore it.\n        const { scaleY } = this._xdGradient.scaleFactorsAndRotation();\n        return Math.abs(scaleY / this._transformAspectRatio);\n    }\n\n    get _transformAspectRatio() {\n        return this._bounds.height / this._bounds.width;\n    }\n\n    get scale() {\n        // endR is the length of the radius of the gradient as a percentage of height. (startR is always 0).\n        // To get it as a percentage of width, we need to multiply by the aspect ratio of the transform\n        // Then multiply by 2 to get the scale factor for the diameter.\n        return this._xdGradient.endR * this._transformAspectRatio * 2;\n    }\n\n    get centerPoint() {\n        return {\n            x: this._xdGradient.startX,\n            y: this._xdGradient.startY\n        };\n    }\n}\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2019 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\nimport environment from 'app/js/environment';\nimport * as SceneGraphUtils from './../scenegraphUtils';\nimport configuration from 'app/js/config/configuration';\nimport ImageElementConfig from 'app/js/config/elements/ImageElementConfig';\nimport { insertVectorImage, insertBitmapImage, createOrUpdateElementFromAGC } from '../utils';\nimport { isVector } from 'app/js/utils/libraryUtils';\n\n/**\n * Configuration for image elements in XD.\n */\nexport default class SPRKImageElementConfig extends ImageElementConfig {\n    _addImageToDocument(element, placeLinked = true) {\n        const operationName = `DL_ADD_IMAGE_TO_DOC_AS_${placeLinked ? 'LINKED' : 'COPY'}`;\n        return environment.recordHistory(operationName, () => {\n            const insertImage = isVector(element) ? insertVectorImage : insertBitmapImage;\n            return insertImage(element, placeLinked);\n        });\n    }\n\n    /**\n     * Finds all the instances on canvas of Graphics that can be imported into a Library and returns an array of these nodes.\n     * Returns Array of JSON objects storing Library compliant Graphic data.\n     * @param {Object} selection\n     * @returns {Array.<Object>} An array of nodes\n     */\n    _getImageNodesFromSelection(selection) {\n        if (!selection || selection.length === 0) { return []; }\n\n        if (selection.length === 1) {\n            const node = selection[0];\n            const isComponent = SceneGraphUtils.isComponent(node);\n            const inLibrary = node.linked;\n\n            // If you select a single node, we can add it as a graphic _unless_:\n            // (a) it's a component (in which case the component add operations take care of this), or\n            // (b) it's a linked library element (in which case it's already in a library so doesn't make sense to add).\n            return !isComponent && !inLibrary ? [ node ] : [];\n        }\n        // Selection cannot span more than one artboard.\n        if (environment.findContainingArtboardsForSelection(selection).size > 1) { return []; }\n\n        return selection;\n    }\n\n    /**\n     * Returns an array of add operations (elements that can be added to the given library), based on the current layer\n     * selection in the document. This is very app-specific, and each application needs to implement the `getAddOperations`\n     * method on their element configuration, in order to have any add operations.\n     *\n     * @param {Object} selection The current selection\n     * @returns {Operation[]} array of add operations where the apply method returns a promise\n     */\n    getAddOperations(selection) {\n        const nodes = this._getImageNodesFromSelection(selection);\n        if (nodes.length === 0) {\n            return [];\n        }\n\n        return [ {\n            name: 'DL_TYPE_IMAGE_SINGULAR',\n            icon: 'AddImage',\n            apply: (library, opType) => {\n                const guids = nodes.map(node => node.guid),\n                    name = nodes[0].name,\n                    imageData = { guids, name };\n                return this._createImageElement(imageData, library, opType).then(response => response.element);\n            }\n        } ];\n    }\n\n    getApplyOperations(element) {\n        const primary = element.getPrimaryRepresentation();\n        if (!primary) {\n            return [];\n        }\n\n        const applyOperations = [];\n\n        // The default operation is linking, for anything except XD Graphics\n        // (since you can't edit XD graphics yet, this doesn't make sense - we'll add linking once editing is supported)\n        if (primary.type !== configuration.AGC_REPRESENTATION_TYPE) {\n            applyOperations.push({\n                name: 'DL_ADD_IMAGE_TO_DOC_AS_LINKED',\n                icon: 'download',\n                isDraggable: true,\n                apply: () => this._addImageToDocument(element, true),\n                displayInMenu: true\n            });\n        }\n\n        applyOperations.push({\n            name: 'DL_ADD_IMAGE_TO_DOC_AS_COPY',\n            icon: 'download',\n            isDraggable: true,\n            apply: () => this._addImageToDocument(element, false),\n            displayInMenu: true\n        });\n        return applyOperations;\n    }\n\n    /**\n     * Create a graphic library element from the given XD node guid array and add it to the current library.\n     * Primary representation will be an AGC document.\n     * SVG and PNG renditions will be included.\n     * @param {{guids: string[], name: string}}  imageData - An object with an Array of image scenenode guids\n     *                                                       the name to use for the library element\n     * @param {LibraryModel} library\n     * @param {string} opType\n     * @returns {ElementModel} The element created.\n     */\n    _createImageElement(imageData, library, opType) {\n        return createOrUpdateElementFromAGC(configuration.IMAGE_ELEMENT_TYPE, imageData, library, opType);\n    }\n\n    isDisabled(element) {\n        return !this._config.findUsableRepresentation(element) && !element.getCachedThumbnailPath();\n    }\n\n    getDragData(element) {\n        const dragData = super.getDragData(element);\n        const primary = element.getPrimaryRepresentation();\n        if (primary && primary.type === 'application/illustrator') {\n            // XD expects the path to the thumbnail rendition which it will use it to place a loading\n            // container while the operation is in progress.\n            const thumbnailPath = element.getCachedThumbnailPath(configuration.IMAGE_THUMBNAIL_SIZE);\n            if (thumbnailPath) {\n                dragData.vectorWidth = primary.width;\n                dragData.vectorHeight = primary.height;\n                dragData.thumbnailPath = environment.normalizePath(thumbnailPath);\n            }\n        }\n        dragData.data = [ environment.normalizePath(dragData.data[0]) ];\n        return dragData;\n    }\n\n    getStockDragData() {\n        // No filesystem support in UXP means that the path to the element content won't be ready by this point.\n        // If the user does drop this Stock element, we will handle adding it to the canvas in `XDEnvironment.handleDroppedStockElement`.\n        return [ '' ];\n    }\n\n    /* TODO: Context Menu Methods */\n\n    // edit(assetOrElement) {}\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport ColorElementConfig from 'app/js/config/elements/ColorElementConfig';\nimport { getRGBColor, colorDataToHexString } from 'app/js/utils/colorUtils';\nimport { visitSelection, getColorDataFromColorSceneNode, createColorNode } from './../scenegraphUtils';\nimport { createElementExtraMetrics } from 'app/js/utils/libraryUtils';\nimport configuration from 'app/js/config/configuration';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\n\nexport default class SPRKColorElementConfig extends ColorElementConfig {\n\n    publishToLibraryLabel = 'DL_PUBLISH_LIBRARY_IN_SOURCE'\n\n    // Get apply operations for when there is a selection, or if a text edit is in progress\n    // and at least one character is selected.\n    _getColorApplyModes() {\n        const applyModes = [];\n        const selection = environment.getSelection();\n\n        if (selection.length > 0) {\n            const firstSelection = selection[0];\n            if (!(firstSelection instanceof environment.Line)) { applyModes.push('fill'); }\n\n            // Only allow strokes if text editing is not in progress (matches Asset panel behavior), and selection is not an Artboard.\n            if (!environment.isCanvasTextEditInProgress() && !(firstSelection instanceof environment.Artboard)) {\n                applyModes.push('stroke');\n            }\n        }\n\n        return applyModes;\n    }\n\n    // applies to the selection on canvas. If the element is a cc libraries element,\n    // will also create a document asset that is linked to the element.\n    _applyAndLinkColor(colorData, element, mode) {\n        const color = createColorNode(colorData, element);\n        environment.applyColorToSelection(mode, color, element);\n\n        const representation = element && element.getPrimaryRepresentation && element.getPrimaryRepresentation();\n        if (representation) {\n            reportApplyMetric(representation);\n        }\n    }\n\n    /**\n     * Get operations to apply a color to all eligible items in the current on-canvas selection.\n     * If a text-editing session is in progress, fill colors will be applied to all text in the\n     * selected region of the text editor, and stroke colors will be ignored.\n     * If text editing is not in progress, then color is applied to all items\n     * in the on-canvas selection, with these conditions:\n     * - the applied color overrides the color of all style ranges in a Text item\n     * - if a node is a Line, then apply to stroke\n     * - Artboards will receive a background fill color, but no stroke, and children are unaffected\n     * - for other containers (Group, RepeatGrid, Mask Group, Symbol), color is only applied to the children inside.\n     * @param {ElementModel} element\n     * @param {Object} subElement Color value in the case of a color theme\n     * @returns {Array.<Object>} An array of operations\n     */\n    getApplyOperations(element, subElement) {\n        const applyModes = this._getColorApplyModes();\n        const altKeyPressed = environment.isAltKeyDown;\n        const operations = applyModes.map((mode) => ({\n            // In XD, \"strokes\" are known as \"borders\", so this should be reflected in strings.\n            // But in the code, the mode will still be known as \"stroke\" as it is elsewhere.\n            name: `DL_SET_${ mode === 'stroke' ? 'BORDER' : mode.toUpperCase() }_COLOR_TOOLTIP`,\n            apply: colorData => this._applyAndLinkColor(colorData, element, mode),\n            onClick: (mode === 'fill' && !altKeyPressed) || (mode === 'stroke' && altKeyPressed),\n            displayInMenu: true\n        }));\n\n        const hexColor = colorDataToHexString(subElement || getRGBColor(element));\n        operations.push({\n            name: translate('DL_COPY_COLOR_TO_CLIPBOARD', { hex: hexColor }),\n            apply: () => {\n                environment.canvas.writePlainTextClipboard(hexColor);\n            },\n            displayInMenu: true\n        });\n\n        return operations;\n    }\n\n    // In general this will be asynchronous (only colors and gradients can be synchronously created), so we keep the pattern of returning a promise.\n    // Pass in element argument if this is an update.\n    // This will update both the representations and the element name.\n    // TODO: Decide whether to separate out the 'name' update\n    _createOrUpdateColorElement(colorData, library, opType, name, element) {\n        if (element) {\n            element.beginOperation();\n            element.removeAllRepresentations();\n            if (name) { element.name = name; }\n        } else {\n            // When name is '', the libraries API will handle generating the name from the content in the case of colors (the hex code), and marking it as isAutoNamed.\n            element = createElementExtraMetrics(library, name || '', configuration.COLOR_ELEMENT_TYPE, { opType });\n        }\n\n        const newRepresentation = element.createRepresentation(configuration.COLOR_REPRESENTATION_TYPE, 'primary');\n        newRepresentation.setValue(configuration.COLOR_NAMESPACE, configuration.COLOR_DATA_KEY, colorData);\n        element.endOperation();\n        return Promise.resolve(element);\n    }\n\n    /* Scenegraph Node -> Element */\n\n    /**\n     * Returns an array of add operations (things that can be added to the given library), based on the current layer\n     * selection in the document. This is very app-specific, and each application needs to implement the `getAddOperations`\n     * method on their element configuration, in order to have any add operations.\n     *\n     * @param {Object} selection The current selection\n     * @returns {Operation[]} array of add operations where the apply method returns a promise\n     */\n    getAddOperations(selection) {\n        // Extract color data from selection\n        const colors = this._getElementDataFromSelection(selection);\n        if (!colors) { return []; }\n\n        return colors.map(color => ({\n            name: 'DL_ADD_COLOR_NAME_' + color.type,\n            style: {\n                // This is used in the '+' (add) button menu to draw a box of the color swatch that can be added\n                backgroundColor: colorDataToHexString(color.data),\n                border: '1px solid',\n                width: '14px',\n                height: '14px',\n                margin: '1px 8px 1px 0px',\n            },\n            apply: (library, opType) => this._createOrUpdateColorElement(color.data, library, opType)\n        }));\n    }\n\n    // Returns Array of color data from selection. If user is editing text all of one color, then that color will be returned.\n    // For color data format, see colorUtils documentation.\n    _getElementDataFromSelection(selection) {\n        // If editing text is in progress, and the selected text has only one color, we will add that color.\n        // If the selected text has more than one color, no color will be added. This matches current libraries behavior.\n        if (environment.isCanvasTextEditInProgress() && environment.textEditModel.selection) {\n            const textEditorValues = environment.TextPropertyUtils.getTextEditorPropertyValues();\n            if (textEditorValues.length > 0) {\n                // Note that  XD has some weird behavior around borders in text\n                // A text node may have a stroke/border, but style ranges will not.\n                // When you click into a text node to edit, no borders will exist,\n                // even if all of the text had a border before you started editing.\n                // Therefore we only need to check for fill here.\n                const color = textEditorValues[0].fill;\n                const allTheSame = textEditorValues.every(value => {\n                    const fill = value.fill;\n                    if (!fill) { return false; }\n                    return (fill.r === color.r) && (fill.g === color.g) && (fill.b === color.b) && (fill.a === color.a);\n                });\n                if (allTheSame) {\n                    return [ { data: getColorDataFromColorSceneNode(color), type: 'FILL' } ];\n                }\n            }\n            return [];\n        }\n\n        // Do not allow adding colors when multiple top level nodes are selected.\n        if (!selection || selection.length !== 1) { return; }\n        const colors = [];\n        visitSelection(node => {\n            // Note: If node is text, we will add the color from the top level fill/stroke,\n            // which is the color from the last style range.\n            if (node.fillEnabled && node.fill) {\n                // Fill may be a Color, LinearGradientFill, RadialGradientFill, or ImageFill\n                if (node.fill instanceof environment.Color) {\n                    const colorData = getColorDataFromColorSceneNode(node.fill);\n                    colors.push({ data: colorData, type: 'FILL' }); // type should be uppercase 'STROKE' or 'FILL', to be used in localization string\n                }\n            }\n            // Note: Text Stroke is on entire node (not each styleRange)\n            if (node.strokeEnabled && node.stroke) {\n                const colorData = getColorDataFromColorSceneNode(node.stroke);\n                colors.push({ data: colorData, type: 'STROKE' });\n            }\n        // We don't really need to pass in the selection, but i made it possible just in case the layerInfo passed\n        // to getAddOperations contains more than just the selection in the future\n        }, { visitNonEditable: true, skipChildren: true }, selection);\n\n        return colors;\n    }\n\n    /* New Document Element Config APIs */\n\n    /**\n     * Create an Element inside of a cc Library from a DocumentElement (aka asset), including the primary representation.\n     * @param {DocumentElement} asset\n     * @param {LibraryModel} library - The target library where a new element will be created from the asset\n     * @param {string} opType - The operation type is reported in analytics\n     * @param {ElementModel} [element] - update this element instead of creating a new one\n     * @returns {Promise<ElementFromAsset>} returns the promise that resolves to an object with the element\n     */\n    createOrUpdateElementFromAsset(asset, library, opType, element) {\n        const primaryRepresentation = asset.getPrimaryRepresentation();\n        // Note: assetColorData is modified upon retrieval to look like our color data.\n        const assetColorData = primaryRepresentation.getValue('color', 'data');\n        // Create element and primary representation\n        return this._createOrUpdateColorElement(assetColorData, library, opType, asset.name, element).then((element) => {\n            return { element };\n        });\n    }\n\n    /* TODO: Context Menu Methods */\n\n    defaultEditOperation(element) {\n        // TODO: spec says color Library elements should be editable in XD (even if their source is a different app).\n        // Figure out converting the \"foreign\" representation into an XD asset that XD can edit.\n        // We'll also need to figure out swapping the old representations with the updated one...\n        // For now only allow on document assets.\n        if (element.library.isDocumentAssets) {\n            return environment.editColor(element);\n        }\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { reaction, observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport classNames from 'classnames';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport { debounce } from 'app/js/utils/promiseUtils';\nimport configuration from 'app/js/config/configuration';\nimport { Element } from '@cclibraries/cc-libraries-js';\nimport DocumentElement from 'app/js/models/documentAssets/DocumentElement';\nimport environment from 'app/js/environment';\n\n@observer\nexport default class BaseRenderer extends React.Component {\n    static contextType = LibrariesContext;\n\n    static defaultProps = {\n        viewMode: 'grid'\n    };\n\n    static propTypes = {\n        element: PropTypes.oneOfType([ PropTypes.instanceOf(Element), PropTypes.instanceOf(DocumentElement) ]).isRequired,\n        viewMode: PropTypes.oneOf(configuration.ELEMENT_VIEW_MODES),\n        height: PropTypes.number,\n        width: PropTypes.number,\n        gridSizeType: PropTypes.oneOf(configuration.GRID_SIZE_TYPES)\n    };\n\n    componentDidMount() {\n        this.disposer = reaction(() => environment.colorProfile, (colorProfile) => {\n            this.updateImageProviderWithColorSpace(colorProfile);\n        });\n\n        // Need to re render the images on the screen color profile change event\n        this.screenColorProfileDisposer = reaction(() => environment.screenColorProfile, (screencolorProfile) => {\n            this.updateImageProviderWithTargetColorSpace(screencolorProfile);\n        });\n    }\n\n    componentWillUnmount() {\n        this.clearImageProvider();\n        this.clearReaction();\n        this.disposer?.();\n        this.screenColorProfileDisposer?.();\n    }\n\n    clearImageProvider() {\n        if (this._imageProvider) {\n            this._imageProvider.cancel();\n            delete this._imageProvider;\n            delete this._imageProviderType;\n        }\n    }\n\n    /**\n     * Updates the color space in image provider and update the thumbnail.\n     * XD passes the color space to UXP which is used to create the image from the pixel buffer using platform APIs.\n     * updateRendition call regenerates the image using the updated color space.\n     * @param {string} colorProfile color profile of the Xd document.\n     */\n    updateImageProviderWithColorSpace = (colorProfile) => {\n        this.imageProvider.colorSpace = colorProfile;\n        Promise.resolve().then(() => {\n            this.imageProvider.updateRendition();\n        });\n    }\n\n    @observable debouncedWidth = this.props.width;\n\n    debounceWidthUpdate = debounce(configuration.THUMBNAIL_RENDERER_DEBOUNCE, () => {\n        // Clear the image provider and update the width\n        this.clearImageProvider();\n        this.debouncedWidth = this.props.width;\n        return Promise.resolve();\n    });\n\n    componentDidUpdate() {\n        if (this.debouncedWidth !== this.props.width) {\n            this.debounceWidthUpdate();\n        }\n    }\n\n    clearReaction() {\n        this._reaction && this._reaction();\n    }\n\n    get width() {\n        if (this.shouldDebounceWidthUpdate) {\n            return this.debouncedWidth;\n        }\n        return this.props.width;\n    }\n\n    // Subclasses can override this to force img to scale to fit either 100% of the width\n    // or height of the container depending on the dimensions of the img\n    get scaleToFit() {\n        return false;\n    }\n\n    // Subclasses can override this to enable debouncing the width update on resize\n    get shouldDebounceWidthUpdate() {\n        return false;\n    }\n\n    // Subclasses can override this to enable handling for the screen color profile change\n    get shouldHandleScreenColorProfileChange() {\n        return false;\n    }\n\n    /**\n     * Updates the target color space or screen color profile in the image provider and update the thumbnail.\n     * XD passes the target color space to UXP which is used to create the image from the pixel buffer using platform APIs.\n     * updateRendition call regenerates the image using the updated target color space.\n     * @param {string} screenColorProfile color profile of the Xd document.\n     */\n    updateImageProviderWithTargetColorSpace = (screenColorProfile) => {\n        if (this.shouldHandleScreenColorProfileChange && this.imageProvider) {\n            this.imageProvider.targetColorSpace = new Uint8Array(screenColorProfile);\n            Promise.resolve().then(() => {\n                this.imageProvider.updateRendition();\n            });\n        }\n    }\n\n    @observable imgStyle = {};\n\n    _setImageRef = element => {\n        this.clearReaction();\n        if (element) {\n            // UXP APIs allow setting an object as the src of an <img>, but React does not, so we cannot do src={imageProvider}\n            this._reaction = reaction(() => this.imageProvider, provider => {\n                element.src = provider;\n                if (this.scaleToFit) {\n                    // Scaling the image to be either 100% width or 100% height depending on the img dimensions\n                    element.onload = () => {\n                        if (element.naturalWidth > element.naturalHeight) {\n                            this.imgStyle = { width: '100%', height: 'auto' };\n                        } else {\n                            this.imgStyle = { width: 'auto', height: '100%' };\n                        }\n                    };\n                }\n            }, { fireImmediately: true });\n        }\n    };\n\n    get containerClassName() {\n        return classNames('xd-renderer-container', `xd-renderer-container-${this.context.viewState.viewState}-view`);\n    }\n\n    // Subclass must implement this:\n    get imageProvider() {\n        throw new Error('get imageProvider() must be implemented by subclass');\n    }\n\n    // Subclass can optionally provide overlays\n    get overlay() {\n    }\n\n    render() {\n        return <div className={ this.containerClassName } data-test-id=\"xd-renderer-container\">\n            <img data-test-id=\"xd-renderer\" ref={ this._setImageRef } style={ this.imgStyle }/>\n            { this.overlays }\n        </div>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport classNames from 'classnames';\nimport environment from 'app/js/environment';\nimport configuration from 'app/js/config/configuration';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport * as ColorUtils from 'app/js/utils/colorUtils';\nimport * as TextStyleUtils from 'app/js/utils/textstyleUtils';\nimport BaseRenderer from './BaseRenderer';\n\n// Not sure why this is needed - we can get it from XD if needed though (PlatformStyles.charStyleRenditionDim)\nconst RENDITION_DIM = 28;\nconst GRID_PADDING = 6;\nconst BASELINE = 24;\nconst BASELINE_SUBSCRIPT = 30;\n// Fallback width for one up view character style thumbnail width, when not provided or AutoSizer provides 0 to start.\n// Needs to be smaller than the minimum panel width in XD.\nconst DEFAULT_LARGE_THUMBNAIL_WIDTH = 100;\n\nconst ViewTypeMap = {\n    grid: 'Grid',\n    list: 'List',\n    thumbnail: 'List',\n    'thumbnail-large': 'Grid'\n};\n\n@observer\nexport default class TextStyleRenderer extends BaseRenderer {\n\n    @computed get style() {\n        const shortType = elementConfiguration.getShortType(this.props.element.type);\n        const representation = elementConfiguration.findUsableRepresentation(this.props.element, `application/vnd.adobe.${shortType}+json`);\n        return representation && representation.getValue(shortType, 'data');\n    }\n\n    @computed get imageProvider() {\n        const type = ViewTypeMap[this.props.viewMode];\n        if (this._imageProviderType !== type) {\n            this.clearImageProvider();\n        }\n\n        if (!this._imageProvider) {\n            this._imageProviderType = type;\n            const createMethod = `createCharacterStyle${this._imageProviderType}RenditionProvider`;\n            this._imageProvider = environment.renditionService[createMethod](RENDITION_DIM, RENDITION_DIM, environment.colorProfile, new Uint8Array(environment.screenColorProfile));\n        }\n\n        const postScriptName = TextStyleUtils.getPostScriptName(this.style) || '';\n        const family = environment.fontUtils.getFontFamily(postScriptName, TextStyleUtils.getFontFamily(this.style));\n        const style = environment.fontUtils.getFontStyle(postScriptName, TextStyleUtils.getFontStyle(this.style));\n        const displayName = this.props.element.name;\n\n        const color = ColorUtils.colorDataToHexNumberWithAlpha(this.style && this.style.color) || 0xff000000;\n        const size = TextStyleUtils.getFontSizeForPreview(this.style);\n\n        const isUnderline = TextStyleUtils.isUnderline(this.style);\n        const isStrikethrough = TextStyleUtils.isStrikethrough(this.style);\n\n        const textTransform = TextStyleUtils.getTextTransform(this.style, 'titlecase') || 'none';\n        const textScript = TextStyleUtils.getTextScript(this.style) || 'none';\n        const baselineDisplayOffset = textScript === 'subscript' ? BASELINE_SUBSCRIPT : BASELINE;\n        const characterSpacing = TextStyleUtils.getTracking(this.style) || 0;\n\n        if (type === 'Grid') {\n            // In the One Up View, the width from the AutoSizer starts as 0 on first render, and then updates.\n            // Use the default width in the meantime. No negative numbers may be passed to the image provider.\n            const width = this.width || DEFAULT_LARGE_THUMBNAIL_WIDTH;\n            const dimensions = { width: width - (2 * GRID_PADDING), height: configuration.GRID_TYPE_WIDE_SET_HEIGHT };\n            this._imageProvider.setCharacterStyleGridInfo(\n                dimensions.width,\n                dimensions.height,\n                family,\n                displayName,\n                baselineDisplayOffset,\n                style,\n                postScriptName,\n                characterSpacing,\n                color,\n                textTransform,\n                textScript,\n                isUnderline,\n                size,\n                isStrikethrough\n            );\n\n        } else {\n            const dimension = configuration.LIST_VIEW_ELEMENT_THUMBNAIL_HEIGHT - 2;\n            this._imageProvider.setCharacterStyleListInfo(\n                dimension,\n                dimension,\n                family,\n                style,\n                postScriptName,\n                configuration.SHORT_FONT_PREVIEW_TEXT,\n                color,\n                textTransform,\n                textScript,\n                isUnderline,\n                isStrikethrough\n            );\n        }\n\n        return this._imageProvider;\n    }\n\n    get overlays() {\n        // Only show details line on top of wide thumbnails (the grid-style ones)\n        if (this.props.gridSizeType === configuration.GRID_TYPE_WIDE) {\n            const details = TextStyleUtils.getDetailsText(this.style);\n            const className = classNames('panel-textstyle-rendition-details', 'xd-textstyle-renderer-details');\n            return <div className={ className } data-test-id=\"textstyle-font-details\">{ details }</div>;\n        }\n    }\n\n    get containerClassName() {\n        return classNames(super.containerClassName, {\n            contrast: TextStyleUtils.isFontColorPoorContrast(this.style)\n        });\n    }\n\n    // Subclasses can override this to enable handling for the screen color profile change\n    get shouldHandleScreenColorProfileChange() {\n        return true;\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport TextStyleElementConfig from 'app/js/config/elements/TextStyleElementConfig';\nimport { reportApplyMetric, getCuratedName } from 'app/js/utils/libraryUtils';\nimport { visitSelection, getTextStyleDataFromNodeOrStyleRange } from './../scenegraphUtils';\nimport { getTextStyleDataFromElement } from './../utils';\nimport { createElementExtraMetrics } from 'app/js/utils/libraryUtils';\nimport debugLog from 'app/js/utils/debugLog';\nimport TextStyleRenderer from '../components/TextStyleRenderer';\nimport * as FileUtils from 'app/js/utils/fileUtils';\n\nconst STYLE_NAMESPACE = 'characterstyle';\nconst STYLE_DATA_KEY = 'data';\n\nexport default class SPRKTextStyleElementConfig extends TextStyleElementConfig {\n\n    publishToLibraryLabel = 'DL_PUBLISH_LIBRARY_IN_SOURCE'\n\n    // applies to the selection on canvas and creates a document asset will be linked to the element\n    _applyAndLinkTextStyle(element) {\n        const representation = this._config.findUsableRepresentation(element);\n        const styleData = getTextStyleDataFromElement(element);\n        if (!styleData) { return; }\n\n        environment.applyCharacterStyleToSelection(styleData, element);\n\n        reportApplyMetric(representation);\n    }\n\n    // Should apply operations for when there is a selection that includes a top level text node,\n    // or if a text edit is in progress and at least one character is selected.\n    _getApplyMode() {\n        if (environment.hasTextEditSelection()) {\n            return {\n                mode: 'textEdit'\n            };\n        }\n\n        const textNodes = [];\n        visitSelection(node => {\n            if (node instanceof environment.Text) {\n                textNodes.push(node);\n            }\n        });\n        if (textNodes.length > 0) {\n            return {\n                mode: 'selection'\n            };\n        }\n        return {};\n    }\n\n    getApplyOperations(element) {\n        let operations = [];\n        const { mode } = this._getApplyMode();\n        if (mode) {\n            operations = [ {\n                name: 'DL_SET_TEXT_STYLE_TOOLTIP',\n                apply: () => {\n                    try {\n                        this._applyAndLinkTextStyle(element);\n                    } catch (err) {\n                        debugLog.log(err);\n                    }\n                },\n                onClick: true,\n                // Don't show apply operation in context menu for document assets.\n                displayInMenu: !element.library.isDocumentAssets\n            } ];\n        }\n\n        return operations;\n    }\n\n    /**\n     * Returns an array of add operations (things that can be added to the given library), based on the current layer\n     * selection in the xd document.\n     *\n     * @param {Object} selection The current selection\n     * @returns {Operation[]} array of add operations where the apply method returns a promise\n     */\n    getAddOperations(selection) {\n        // If single text node is selected with 1 style: allow adding.\n        // If single text node is selected with multiple styles: allow adding the last style.\n        // If multi selection of text nodes: do not allow adding a style.\n        // If highlighted text when editing has 1 style: allow adding.\n        // If highlighted text when editing has multiple styles: do not allow adding style.\n        const styleData = this._getTextStyleFromSelection(selection);\n        if (!styleData) { return []; }\n\n        return [ {\n            name: 'DL_ADD_TEXT_STYLE_NAME',\n            icon: 'AddCharacterStyle',\n            apply: (library, opType) => this._createOrUpdateTextStyleElement(styleData, library, opType)\n        } ];\n    }\n\n    // Returns text style data object from selection\n    _getTextStyleFromSelection(selection) {\n        // If highlighted text when editing has 1 style: allow adding.\n        // If highlighted text when editing has multiple styles: do not allow adding style.\n        if (environment.isCanvasTextEditInProgress() && environment.textEditModel.selection) {\n            const textEditorValues = environment.TextPropertyUtils.getTextEditorPropertyValues();\n            if (textEditorValues.length === 1) {\n                const styleRange = textEditorValues[0];\n                return getTextStyleDataFromNodeOrStyleRange(styleRange);\n            }\n\n            return;\n        }\n\n        if (!selection || selection.length === 0) { return; }\n        const nodes = [];\n        visitSelection(node => {\n            if (node instanceof environment.Text) {\n                nodes.push(node);\n            }\n        // We don't really need to pass in the selection, but i made it possible just in case the layerInfo passed\n        // to getAddOperations contains more than just the selection in the future\n        }, { visitNonEditable: true, skipChildren: true }, selection);\n\n        if (nodes.length === 1) {\n            return getTextStyleDataFromNodeOrStyleRange(nodes[0]);\n        }\n        // If multi selection of text nodes: do not allow adding a style.\n    }\n\n    // In the case of a text node selection, we will use the top level data from that node\n    // If it's got multiple style ranges, the top level data will be equivalent to the last one.\n    // In the case of a text edit, style range will be used instead.\n    _createThumbnail(nodeOrStyleRange) {\n        const text = {};\n        text.text = 'Aa';\n        text.fill = { r: 0, g: 0, b: 0 }; // black\n        text.fontFamily = nodeOrStyleRange.fontFamily;\n        text.strikethrough = nodeOrStyleRange.strikethrough;\n        text.charSpacing = nodeOrStyleRange.charSpacing;\n        text.underline = nodeOrStyleRange.underline;\n        text.textTransform = nodeOrStyleRange.textTransform;\n        text.textScript = nodeOrStyleRange.textScript;\n        text.fontStyle = nodeOrStyleRange.fontStyle;\n        text.postscriptName = nodeOrStyleRange.postscriptName;\n        text.fontSize = 23; // Eyeballed it to get a size of text that looks roughly correct in the thumbnail\n\n        const tempFileName = `${FileUtils.generateUuid()}.png`;\n        return environment.characterStyleToPNG(text, tempFileName);\n    }\n\n    /**\n     * Create or update a text style element from text style data.\n     * @param {Object} textStyleData text style data\n     * @param {LibraryModel} library the target library where element will be created or updated\n     * @param {string} opType The operation type reported in analytics\n     * @param {string} [name] optional name for created element, defaults to empty string\n     * @param {ElementModel} [element] optional existing element to update from text style data\n     */\n    _createOrUpdateTextStyleElement(textStyleData, library, opType, name = '', element) {\n        let resultElement;\n        if (element) {\n            element.beginOperation();\n            if (name) {\n                element.name = name;\n            }\n            resultElement = element;\n        } else {\n            // Generate a name (or use provided name) for a text style element in a library (e.g. \"Character Style 1\").\n            const assetName = getCuratedName(library, name, 'DL_ADD_TEXT_STYLE_NAME');\n            resultElement = createElementExtraMetrics(library, assetName, configuration.CHARACTER_STYLE_ELEMENT_TYPE, { opType });\n        }\n\n        const textNodeOrStyleRange = textStyleData.nodeOrStyleRange;\n        delete textStyleData.nodeOrStyleRange;\n\n        // Create the rendition representation\n        return this._createThumbnail(textNodeOrStyleRange).then(path => {\n            // If editing an existing element, make sure the thumbnail is created\n            // successfully before starting the edit, to avoid corrupting the element\n            if (element) {\n                element.removeAllRepresentations();\n            }\n\n            // Set character style properties\n            const representation = resultElement.createRepresentation(configuration.CHARACTER_STYLE_REPRESENTATION, 'primary');\n            representation.setValue(STYLE_NAMESPACE, STYLE_DATA_KEY, textStyleData);\n\n            const rendition = resultElement.createRepresentation('image/png', 'rendition');\n            // We try to move the files first - since this might fail (e.g. could be on a different volume),\n            // we fall back to copying if the move fails.\n            return rendition.setContentFromPath(path, true).catch(() => rendition.setContentFromPath(path));\n        }).then(() => {\n            return resultElement;\n        }).catch(e => {\n            debugLog.log(e);\n            if (resultElement && !element) {\n                library.removeElement(resultElement, true);\n                resultElement = null;\n            }\n            return Promise.reject(e);\n        }).finally(() => {\n            if (resultElement) {\n                resultElement.endOperation();\n            }\n        });\n    }\n\n    /* New Document Element Config APIs */\n\n    /**\n     * Create or update an Element inside of a cc Library from a DocumentElement (aka asset), including the primary representation.\n     * @param {DocumentElement} asset\n     * @param {LibraryModel} library - The target library where a new element will be created from the asset\n     * @param {string} opType - The operation type is reported in analytics\n     * @param {ElementModel} [element] optional existing element to update from given asset\n     * @returns {Promise<ElementFromAsset>} returns the promise that resolves to an object with the element\n     */\n    createOrUpdateElementFromAsset(asset, library, opType, element) {\n        const primaryRepresentation = asset.getPrimaryRepresentation();\n        // Note: assetTextStyleData is modified upon retrieval to look like our text style data.\n        const assetTextStyleData = primaryRepresentation.getValue(STYLE_NAMESPACE, STYLE_DATA_KEY);\n        // Create element and primary representation\n        return this._createOrUpdateTextStyleElement(assetTextStyleData, library, opType, asset.name, element).then((element) => {\n            return { element };\n        });\n    }\n\n    getCustomRenderer() {\n        if (environment.renditionService) { // Prevent crashing in earlier builds\n            return TextStyleRenderer;\n        }\n    }\n\n    /* TODO: Context Menu Methods */\n\n    defaultEditOperation(element) {\n        // TODO: spec says character style Library elements should be editable in XD (even if their source is a different app).\n        // Figure out converting the \"foreign\" representation into an XD asset that XD can edit.\n        // We'll also need to figure out swapping the old representations with the updated one...\n        // For now only allow on document assets.\n        if (element.library.isDocumentAssets) {\n            return environment.editCharacterStyle(element);\n        }\n    }\n\n    // override default searchAdditionalElementData for TextStyle because we don't receive paragraph data to search through\n    searchAdditionalElementData() {\n        return false;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport environment from 'app/js/environment';\nimport configuration from 'app/js/config/configuration';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport * as ColorUtils from 'app/js/utils/colorUtils';\nimport BaseRenderer from './BaseRenderer';\n\n@observer\nexport default class RadialGradientRenderer extends BaseRenderer {\n\n    @computed get gradientData() {\n        const representation = elementConfiguration.findUsableRepresentation(this.props.element, configuration.GRADIENT_REPRESENTATION_TYPE);\n        return representation && representation.getValue(configuration.GRADIENT_NAMESPACE, configuration.GRADIENT_DATA_KEY);\n    }\n\n    @computed get imageProvider() {\n        if (!this.gradientData) {\n            // A radial gradient asset can be changed into a solid color asset and vice versa but the asset id will remain the same.\n            // This creates an edge case where after the type change is made, XD might still return the older rendition provider even though the representations have already been swapped (so we won't find a gradient representation).\n            // We can work around it by reusing the existing image provider for this render cycle. When XD refreshes the provider generator, this view will be discarded.\n            return this._imageProvider;\n        }\n        const viewMode = this.props.viewMode;\n        const { stops, opacities } = this.gradientData;\n        const dimensions = { width: this.width, height: this.props.height };\n\n        if (this._imageProviderType !== viewMode) {\n            this.clearImageProvider();\n        }\n\n        if (!this._imageProvider) {\n            this._imageProviderType = viewMode;\n            this._imageProvider = environment.renditionService.createRadialGradientRenditionProvider(dimensions.width, dimensions.height, environment.colorProfile);\n        }\n\n        // Renderer expects the stops and colors serialized as strings\n        const serializedStops = stops.map(stop => stop.offset).join(', ');\n        const serializedColors = stops.map((stop, index) => {\n            // Note: Gradients in XD always have a 1:1 correspondence between color stops and opacity stops, so this is safe:\n            const opacity = opacities[index] ? opacities[index].opacity : 1;\n            return ColorUtils.colorDataAndAlphaToHexNumber(stop.color, opacity);\n        }).join(', ');\n        this._imageProvider.setGradientInfo(serializedColors, serializedStops);\n\n        return this._imageProvider;\n    }\n\n    get shouldDebounceWidthUpdate() {\n        return this.props.viewMode !== 'list';\n    }\n\n    get containerClassName() {\n        return 'xd-renderer-container-transparent';\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport configuration from 'app/js/config/configuration';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport GradientElementConfig from 'app/js/config/elements/GradientElementConfig';\nimport { getCSSForGradient } from 'app/js/utils/colorUtils';\nimport { getColorOrGradientFromElement } from './../utils';\nimport { visitSelection, getGradientDataFromGradientSceneNode } from './../scenegraphUtils';\nimport { reportApplyMetric, createElementExtraMetrics, getCuratedName } from 'app/js/utils/libraryUtils';\nimport RadialGradientRenderer from '../components/RadialGradientRenderer';\n\nexport default class SPRKGradientElementConfig extends GradientElementConfig {\n    _canReceiveGradient(node, mode) {\n        // Gradients can only be applied as 'fill' (for now).\n        // Lines and Text only have color in the form of \"border\"/\"stroke\" so we shouldn't try to set their fill to a gradient.\n        return mode === 'fill' && !(node instanceof environment.Line) && !(node instanceof environment.Text);\n    }\n\n    _getGradientApplyModes() {\n        const selection = environment.getSelection();\n        const applyModes = [];\n        if (selection.length > 0) {\n            // Consistent with Assets Panel: Always show \"Fill\" as long as at least one selected element can recieve a gradient as a fill.\n            selection.some(node => this._canReceiveGradient(node, 'fill')) && applyModes.push('fill');\n        }\n        return applyModes;\n    }\n\n    _setGradient(element, gradientData, mode) {\n        if (this.isDisabled(element)) { return; }\n\n        const gradient = getColorOrGradientFromElement(element);\n        environment.applyColorToSelection(mode, gradient, element);\n\n        const representation = this._config.findUsableRepresentation(element);\n        reportApplyMetric(representation);\n    }\n\n    /**\n     * Finds all the instances on canvas of a color gradient that can be imported into a Library.\n     * Returns Array of JSON objects storing Library compliant gradient data.\n     * @param {Object} selection\n     * @returns {Array.<Object>} An array of operations\n     */\n    _getGradientsFromSelection(selection) {\n        const gradients = [];\n        if (!selection || selection.length !== 1) { return []; }\n        visitSelection(node => {\n            // Only look in nodes that can actually store a gradient and only then check if they do.\n            if (this._canReceiveGradient(node, 'fill')) {\n                // TODO: Account for Vector Images which are often a Group Element (and therefore have no fill themselves).\n                const fill = node.fillEnabled && node.fill;\n                // Fill may be a Color, LinearGradientFill, RadialGradientFill, or BitmapFill.\n                if (fill instanceof environment.LinearGradient || fill instanceof environment.RadialGradient) {\n                    gradients.push(getGradientDataFromGradientSceneNode(fill, node.localBounds));\n                }\n            }\n        }, { visitNonEditable: true, skipChildren: true }, selection);\n        return gradients;\n    }\n\n    /**\n     * Get operations to apply a gradient to all compatible items in the current on-canvas selection.\n     * A gradient will not be applied to Text or a Line and will not be applied as stroke/border.\n     * A gradient can only be applied as fill:\n     * - For individual shapes such as Rectangles, Paths, Ellipses, etc it will override the fill color.\n     * - Artboards will receive a background fill gradient, and children are unaffected.\n     * - For other containers (Group, RepeatGrid, Mask Group, Symbol), color is only applied to the children inside.\n     * @param {ElementModel} element\n     * @returns {Array.<Object>} An array of operations\n     */\n    getApplyOperations(element) {\n        const applyModes = this._getGradientApplyModes();\n        const operations = applyModes.map(mode => ({\n            name: `DL_SET_${mode.toUpperCase()}_GRADIENT_TOOLTIP`,\n            apply: (gradientData) => this._setGradient(element, gradientData, 'fill'),\n            // Set fill as the default action when user clicks on element.\n            onClick: mode === 'fill',\n            displayInMenu: true\n        }));\n\n        return operations;\n    }\n\n    /**\n     * Returns an array of add operations (elements that can be added to the given library), based on the current layer\n     * selection in the document. This is very app-specific, and each application needs to implement the `getAddOperations`\n     * method on their element configuration, in order to have any add operations.\n     *\n     * @param {Object} selection The current selection\n     * @returns {Operation[]} array of add operations where the apply method returns a promise\n     */\n    getAddOperations(selection) {\n        // Extract gradient data from selection\n        return this._getGradientsFromSelection(selection).map(gradient => {\n            return ({\n                // TODO: Add a custom string once string-freeze is over.\n                name: 'DL_TYPE_GRADIENT_SINGULAR',\n                style: Object.assign(getCSSForGradient(gradient, false, false), {\n                    // This is used in the '+' (add) button menu to draw a box of the gradient swatch that can be added.\n                    border: '1px solid',\n                    width: '14px',\n                    height: '14px',\n                    margin: '1px 8px 1px 0px',\n                }),\n                apply: (library, opType) => this._createOrUpdateGradientElement(gradient, library, opType)\n            });\n        });\n    }\n\n    /**\n     * Create or update gradient element from gradient data.\n     * @param {Object} gradientData gradient data\n     * @param {LibraryModel} library the target library where element will be created or updated\n     * @param {string} opType the operation type reported in analytics\n     * @param {string} [name] optional name for created element, defaults to empty string\n     * @param {ElementModel} [element] optional existing element to update from gradient data\n     */\n    _createOrUpdateGradientElement(gradientData, library, opType, name = '', element) {\n        if (element) {\n            element.beginOperation();\n            element.removeAllRepresentations();\n            element.name = name || element.name;\n        }\n        const assetName = name || getCuratedName(library, name, this.typeNameSingular);\n        const resultElement = element || createElementExtraMetrics(library, assetName, configuration.GRADIENT_ELEMENT_TYPE, { opType });\n        const newRepresentation = resultElement.createRepresentation(configuration.GRADIENT_REPRESENTATION_TYPE, 'primary');\n        newRepresentation.setValue(configuration.GRADIENT_NAMESPACE, configuration.GRADIENT_DATA_KEY, gradientData);\n        resultElement.endOperation();\n        return Promise.resolve(resultElement);\n    }\n\n    isDisabled(element) {\n        const representation = this._config.findUsableRepresentation(element);\n        const data = representation && representation.getValue(configuration.GRADIENT_NAMESPACE, configuration.GRADIENT_DATA_KEY);\n        return !representation || !data;\n    }\n\n    /**\n     * Create or update an Element inside of a cc Library from a DocumentElement (aka asset), including the primary representation.\n     * @param {DocumentElement} asset\n     * @param {LibraryModel} library - The target library where a new element will be created from the asset\n     * @param {string} opType - The operation type is reported in analytics\n     * @param {ElementModel} [element] optional existing element to update from given asset\n     * @returns {Promise<ElementFromAsset>} returns the promise that resolves to an object with the element\n     */\n    createOrUpdateElementFromAsset(asset, library, opType, element) {\n        const primaryRepresentation = asset.getPrimaryRepresentation();\n        // Note: assetGradientData is modified upon retrieval to look like our gradient data.\n        const assetGradientData = primaryRepresentation.getValue('gradient', 'data');\n        // Create element and primary representation\n        return this._createOrUpdateGradientElement(assetGradientData, library, opType, asset.name, element).then((element) => {\n            return { element };\n        });\n    }\n\n    getCustomRenderer(element) {\n        if (element.library.isDocumentAssets && environment.renditionService) {\n            // XD has a custom renderer for radial gradients, but linear gradients are rendered via CSS so don't need to change that\n            const representation = elementConfiguration.findUsableRepresentation(element, configuration.GRADIENT_REPRESENTATION_TYPE);\n            const gradientData = representation && representation.getValue(configuration.GRADIENT_NAMESPACE, configuration.GRADIENT_DATA_KEY);\n            if (gradientData && gradientData.type === 'radial') {\n                return RadialGradientRenderer;\n            }\n        }\n    }\n\n    /* TODO: Context Menu Methods */\n\n    defaultEditOperation(element) {\n        // TODO: spec says color Library elements should be editable in XD (even if their source is a different app).\n        // Figure out converting the \"foreign\" representation into an XD asset that XD can edit.\n        // We'll also need to figure out swapping the old representations with the updated one...\n        // For now only allow on document assets.\n        if (element.library.isDocumentAssets) {\n            return environment.editColor(element);\n        }\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { Atom, computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport { reaction } from 'mobx';\nimport classNames from 'classnames';\nimport configuration from 'app/js/config/configuration';\nimport BaseRenderer from './BaseRenderer';\nimport environment from 'app/js/environment';\n\nconst GRID_PADDING = 6;\nconst LIST_PADDING = 1;\nconst BG_CHANGE = 'backgroundColorChanged';\nconst DEFAULT_BG_COLORS = [ 0xffffff, 0xffffffff ]; // Background colors returned when no contrast is needed\n\n@observer\nexport default class ComponentRenderer extends BaseRenderer {\n\n    componentDidMount() {\n        super.componentDidMount();\n        // Need to re render the images on the screen color profile change event\n        this.screenColorProfileDisposer = reaction(() => environment.screenColorProfile, (screencolorProfile) => {\n            this.updateImageProviderWithTargetColorSpace(screencolorProfile);\n        });\n    }\n    componentWillUnmount() {\n        this.screenColorProfileDisposer?.();\n        super.componentWillUnmount();\n    }\n\n    componentDidUpdate(prevProps) {\n        super.componentDidUpdate();\n        // clear the image provider if a new element model is coming in\n        if (prevProps.element !== this.props.element) {\n            this.clearImageProvider();\n        }\n    }\n\n    _backgroundAtom = new Atom('backgroundAtom');\n    onBackgroundColorChange = () => this._backgroundAtom.reportChanged();\n\n    get contrastBackground() {\n        this._backgroundAtom.reportObserved();\n        // XD reports the background color to use, in case the component is completely white. To keep it consistent\n        // with other renderers, we use the same contrasting background color as defined in the CSS.\n        const bgColor = this._imageProvider && this._imageProvider.backgroundColor;\n        return bgColor !== undefined && !DEFAULT_BG_COLORS.includes(bgColor);\n    }\n\n    clearImageProvider() {\n        this._imageProvider?.events?.off(BG_CHANGE, this.onBackgroundColorChange);\n        super.clearImageProvider();\n    }\n\n    @computed get imageProvider() {\n        const viewMode = this.props.viewMode;\n\n        let dimensions = { width: this.width, height: this.props.height };\n        if (viewMode === 'list') {\n            const dimension = configuration.LIST_VIEW_ELEMENT_THUMBNAIL_HEIGHT;\n            dimensions = { width: dimension, height: dimension };\n        }\n\n        // adjust for padding around thumbnail\n        dimensions.width -= this.padding * 2;\n        dimensions.height -= this.padding * 2;\n\n        const id = this.props.element && this.props.element.id;\n        // TODO: optimize this to update on width and height change, but debounce the update so that it isnt updated with EVERY resize event, which would be inefficient\n        if (this._imageProvider && (this._imageProvider.id !== id || this._imageProviderType !== viewMode)) {\n            this.clearImageProvider();\n        }\n\n        if (!this._imageProvider) {\n            this._imageProviderType = viewMode;\n            this._imageProvider = this.props.element.getRenditionProvider(dimensions.width, dimensions.height);\n            this._imageProvider.events.on(BG_CHANGE, this.onBackgroundColorChange);\n            this.onBackgroundColorChange();\n        }\n\n        return this._imageProvider;\n    }\n\n    get scaleToFit() {\n        return this.props.viewMode !== 'list';\n    }\n\n    get shouldDebounceWidthUpdate() {\n        return this.props.viewMode !== 'list';\n    }\n\n    // Subclasses can override this to enable handling for the screen color profile change\n    get shouldHandleScreenColorProfileChange() {\n        return true;\n    }\n\n    get padding() {\n        return this.props.viewMode === 'list' ? LIST_PADDING : GRID_PADDING;\n    }\n\n    get containerClassName() {\n        return classNames(super.containerClassName, {\n            contrast: this.contrastBackground\n        });\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport * as SceneGraphUtils from './../scenegraphUtils';\nimport { createOrUpdateElementFromAGC } from '../utils';\nimport configuration from 'app/js/config/configuration';\nimport { translate } from 'app/js/managers/translationManager';\nimport ComponentElementConfig from 'app/js/config/elements/ComponentElementConfig';\nimport BaseElementConfig from 'app/js/config/elements/BaseElementConfig';\nimport ComponentRenderer from '../components/ComponentRenderer';\n\nexport default class SPRKComponentElementConfig extends ComponentElementConfig {\n\n    editItemLabel = 'DL_EDIT_COMPONENT'\n    editInSourceLabel = 'DL_EDIT_COMPONENT_IN_SOURCE'\n    publishToLibraryLabel = 'DL_PUBLISH_LIBRARY_IN_SOURCE'\n\n    _getDragAndComponentData(element) {\n        const primaryRepresentation = element.getPrimaryRepresentation();\n        let dragData = BaseElementConfig.prototype.getDragData.call(this, element);\n        if (dragData) {\n            dragData.data = [ environment.normalizePath(dragData.data[0]) ];\n        } else if (primaryRepresentation.type === environment.documentLibraryConstants.XD_COMPONENT_CONTAINER_TYPE\n            || primaryRepresentation.type === environment.documentLibraryConstants.NXD_COMPONENT_CONTAINER_TYPE) {\n            dragData = {};\n            dragData.imageUIDToPathMap = [];\n            primaryRepresentation.children.forEach(childRepresentation => {\n                const contentPath = childRepresentation.getCachedContentPath();\n                if (contentPath) {\n                    const normalizedPath = environment.normalizePath(contentPath);\n                    // there is only 1 child with type AGC_REPRESENTATION_TYPE or NXD_REPRESENTATION_TYPE\n                    if (childRepresentation.type === configuration.AGC_REPRESENTATION_TYPE\n                        || childRepresentation.type === configuration.NXD_REPRESENTATION_TYPE) {\n                        dragData.data = [ normalizedPath ];\n                    } else {\n                        // there could be more than 1 other types\n                        const uidVal = childRepresentation.getValue('xd', 'uid');\n                        const imageInfo = {\n                            uid: uidVal,\n                            imagePath: normalizedPath\n                        };\n                        dragData.imageUIDToPathMap.push(imageInfo);\n                    }\n                }\n            });\n        }\n\n        dragData = Object.assign(dragData || {}, {\n            elementRef: element.getReference(),\n            elementId: element.id,\n            libraryId: element.library.id\n        });\n\n        const symbolData = primaryRepresentation\n            && (primaryRepresentation.getValue('symbol', 'data') || primaryRepresentation.getValue('xd', 'data'));\n        if (symbolData && symbolData.symbolId) {\n            dragData = Object.assign(dragData, { symbolId: symbolData.symbolId });\n        }\n        return dragData;\n    }\n\n    /**\n     * Get available operations to place a component on the canvas.\n     * Currently we will only place a copy of the component.\n     * If an AGC representation is available, we will use it; if not, we will use the best available rendition.\n     * @param {ElementModel} element\n     * @returns {Array.<Object>} An array of operations\n     */\n    getApplyOperations(element) {\n        const primary = element.getPrimaryRepresentation();\n        if (!primary) {\n            return [];\n        }\n\n        return [ {\n            name: 'DL_ADD_COMPONENT_TO_DOC_AS_COPY',\n            icon: 'download',\n            isDraggable: true,\n            apply: () => {\n                const symbolData = this._getDragAndComponentData(element);\n                return environment.addComponentToCanvas(element, symbolData);\n            },\n            // Keeping the functionality and testing, because we will need it for accessibility post-MAX2020.\n            displayInMenu: false\n        } ];\n    }\n\n    /**\n     * Finds all the instances on canvas of XD Components that can be imported into a Library.\n     * Returns Array of JSON objects storing Library compliant Component data.\n     * @param {Object} selection\n     * @returns {Array.<Object>} An array of operations\n     */\n    _getComponentsFromSelection(selection) {\n        const components = [];\n        if (!selection || selection.length !== 1) { return []; }\n        SceneGraphUtils.visitSelection(node => {\n            if (SceneGraphUtils.isComponent(node)) {\n                components.push(node);\n            }\n        }, { visitNonEditable: true, skipChildren: true }, selection);\n        return components;\n    }\n\n    /**\n     * Returns an array of add operations (elements that can be added to the given library), based on the current layer\n     * selection in the document. This is very app-specific, and each application needs to implement the `getAddOperations`\n     * method on their element configuration, in order to have any add operations.\n     *\n     * @param {Object} selection The current selection\n     * @returns {Operation[]} array of add operations where the apply method returns a promise\n     */\n    getAddOperations(selection) {\n        return this._getComponentsFromSelection(selection).map(component => {\n            return ({\n                name: 'DL_TYPE_COMPONENT_SINGULAR',\n                icon: 'AddComponent',\n                apply: (library, opType) => {\n                    try {\n                        return createOrUpdateElementFromAGC(configuration.COMPONENT_ELEMENT_TYPE, component, library, opType, null, true);\n                    } catch (e) {\n                        console.error('Error cloning XD node', e);\n                        return Promise.reject(e);\n                    }\n                }\n            });\n        });\n    }\n\n    getDragData(element) {\n        return this._getDragAndComponentData(element);\n    }\n\n    isDisabled(element) {\n        return !this._config.findUsableRepresentation(element);\n    }\n\n    /* New Document Element Config APIs */\n\n    /**\n     * @typedef {Object} ElementFromAsset\n     * @property {ElementModel} element\n     * @property {Array} [dependentAssetIds]\n     */\n\n    /**\n     * Creates or updates an Element inside of a CC Library from a DocumentElement (aka asset), including the primary representation.\n     * The existing element also contains the element's name metadata along with its primary representation.\n     * @param {DocumentElement} asset\n     * @param {LibraryModel} library - The target library where a new element will be created from the asset\n     * @param {string} opType - The operation type is reported in analytics\n     * @param {ElementModel=} existingElement - The element to update\n     * @returns {Promise<ElementFromAsset>} returns the promise that resolves to an object with the element and any dependent asset ids\n     */\n    createOrUpdateElementFromAsset(asset, library, opType, existingElement) {\n        if (!asset || !library) { return Promise.reject('Missing DocumentElement or LibraryModel'); }\n\n        const primaryRepresentation = asset.getPrimaryRepresentation();\n        if (!primaryRepresentation) { return Promise.reject('Element has no AGC representation'); }\n\n        const componentData = primaryRepresentation.getValue('symbol', 'data');\n        if (!componentData) { return Promise.reject('Element has no symbol data'); }\n\n        return createOrUpdateElementFromAGC(configuration.COMPONENT_ELEMENT_TYPE, componentData, library, opType, existingElement, true);\n    }\n\n    getCustomRenderer(element) {\n        if (element.library.isDocumentAssets && environment.renditionService) { // Prevent crashing in earlier builds)\n            return ComponentRenderer;\n        }\n    }\n\n    /* TODO: Context Menu Methods */\n\n    defaultEditOperation(element) {\n        if (element.library.isDocumentAssets) {\n            return environment.editMasterComponent(element);\n        }\n    }\n\n    getAdditionalTooltipData(element) {\n        // return the same data for all disabled XD components\n        if (this.isDisabled(element)) {\n            return {\n                createdIn: undefined,\n                representationType: undefined,\n                description: translate('DL_XD_COMPONENT_NOT_SUPPORTED')\n            };\n        }\n        if (!element.library.isDocumentAssets) { return {}; }\n        // Should display the number of instances of the document asset on the canvas.\n        const instances = environment.getAssetInstanceCount(element);\n        const message = instances > 1 ? 'DL_ASSET_INSTANCES_PLURAL' : 'DL_ASSET_INSTANCES_SINGULAR';\n        return {\n            createdIn: undefined,\n            representationType: undefined,\n            instances: translate(instances ? message : 'DL_ASSET_NO_INSTANCES', { instances })\n        };\n    }\n}\n","/*************************************************************************\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n * Copyright 2020 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport AudioElementConfig from 'app/js/config/elements/AudioElementConfig';\nimport { addAudioElement } from 'app/js/utils/addElementUtils';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\n\nexport default class SPRKAudioElementConfig extends AudioElementConfig {\n\n    _addAudioToDocument(element) {\n        const representation = element.getPrimaryRepresentation();\n        representation.getContentPath().then(filePath => {\n            const mediaFile = {\n                guid: representation.getValue('audio', 'data').guid,\n                displayName: element.name,\n                path: filePath\n            };\n            environment.addAudioToDocument(mediaFile, element);\n        });\n        reportApplyMetric(representation);\n    }\n\n    getApplyOperations(element) {\n        const primary = element.getPrimaryRepresentation();\n        if (!primary || this.isDisabled(element)) {\n            return [];\n        }\n\n        // \"Adding\" an audio element to an XD document simply writes the audio file into the document resource cache.\n        // Since local audio assets are already in the document, they're already in the resource cache so we don't offer any apply operations.\n        return [ !element.library.isDocumentAssets && {\n            name: 'DL_PLACE',\n            icon: 'download',\n            apply: () => this._addAudioToDocument(element),\n            displayInMenu: true\n        } ];\n    }\n\n    /**\n     * Create an Element inside of a cc Library from a DocumentElement (aka asset),including the primary\n     * representation. Note: updating an existing element is not supported yet because XD currently replaces\n     * rather than updates audio assets.\n     * @param {DocumentElement} asset\n     * @param {LibraryModel} library - The target library where a new element will be created from the asset\n     * @param {string} opType - The operation type is reported in analytics\n     * @param {ElementModel} [element] - update this element instead of creating a new one\n     * @returns {Promise<ElementFromAsset>} returns the promise that resolves to an object with the element in the target library\n     */\n    createOrUpdateElementFromAsset(asset, library, opType, element) {\n        // Currently XD does not support updating audio assets. You can only upload and delete them.\n        // However, an audio asset can be deleted and restored with a change modified date.\n        // For this case, we just return the existing published element (until update can be properly implemented).\n        if (element) {\n            return Promise.resolve({ element });\n        }\n\n        const primaryRepresentation = asset.getPrimaryRepresentation(),\n            mediaFile = primaryRepresentation.getValue('audio', 'data'),\n            audioPath = primaryRepresentation._representation.getCachedContentPath(mediaFile.guid),\n            audioName = primaryRepresentation._representation.getDisplayName(mediaFile.guid);\n\n        const representation = [ {\n            path: audioPath,\n            relationship: 'primary',\n            data: [ {\n                namespace: 'audio',\n                key: 'data',\n                value: { guid: mediaFile.guid }\n            } ]\n        } ];\n\n        return addAudioElement(audioName, representation, library, opType).then((element) => {\n            return { element };\n        });\n    }\n}\n","/*************************************************************************\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n * Copyright 2021 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport VideoElementConfig from 'app/js/config/elements/VideoElementConfig';\nimport { addVideoElement } from 'app/js/utils/addElementUtils';\nimport { getElementModifiedTime } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport * as UnitUtils from 'app/js/utils/unitUtils';\n\nconst MAX_CONTENT_LENGTH = 26214400;\nexport default class SPRKVideoElementConfig extends VideoElementConfig {\n\n    isDisabled(element) {\n        const primaryRepresentation = element.getPrimaryRepresentation();\n        const usableRepresentation = this._config.findUsableRepresentation(element);\n        const representation = usableRepresentation || primaryRepresentation;\n\n        if (!representation || representation.type !== 'video/mp4') {\n            return true;\n        }\n\n        // disable video which is bigger than 25 MB.\n        return representation.contentLength > MAX_CONTENT_LENGTH;\n    }\n\n    getAdditionalTooltipData(element) {\n        const data = {};\n        data.type = super.getExtension(element);\n        if (data.type !== 'mp4') {\n            data.description = translate('DL_XD_ADD_VIDEO_FILE_FORMAT_NOT_SUPPORTED_TOOLTIP');\n        }\n\n        const primaryRepresentation = element.getPrimaryRepresentation();\n        const usableRepresentation = this._config.findUsableRepresentation(element);\n        const representation = usableRepresentation || primaryRepresentation;\n\n        if (representation) {\n            if (representation.contentLength) {\n                data.filesize = UnitUtils.bytesToString(representation.contentLength);\n                if (representation.contentLength > MAX_CONTENT_LENGTH) {\n                    const size = '25';\n                    const filesize = translate('DL_FILESIZE_MB', { size });\n                    if (!data.description) {\n                        data.description = translate('DL_XD_ADD_VIDEO_FILE_TOO_BIG_TOOLTIP', { filesize });\n                    } else {\n                        data.description += '\\n' + translate('DL_XD_ADD_VIDEO_FILE_TOO_BIG_TOOLTIP', { filesize });\n                    }\n                }\n            }\n            const videoData = representation.getValue('video', 'data') || {};\n            if (videoData.duration) {\n                data.duration = UnitUtils.msToString(videoData.duration);\n            }\n        }\n        return data;\n    }\n\n    formatTooltipContent(tooltipData) {\n        const {\n            name,\n            group,\n            type,\n            duration,\n            filesize,\n            description\n        } = tooltipData;\n\n        return [\n            name,\n            group,\n            type && translate('DL_XD_VIDEO_TYPE_TOOLTIP', { type }),\n            duration && translate('DL_XD_VIDEO_DURATION_TOOLTIP', { duration }),\n            filesize && translate('DL_XD_VIDEO_SIZE_TOOLTIP', { filesize }),\n            description && { divider: true },\n            description\n        ];\n    }\n\n    /**\n     * Create an Element inside of a cc Library from a DocumentElement (aka asset),including the primary\n     * representation. Note: updating an existing element is not supported yet because XD currently replaces\n     * rather than updates video assets.\n     * @param {DocumentElement} asset\n     * @param {LibraryModel} library - The target library where a new element will be created from the asset\n     * @param {string} opType - The operation type is reported in analytics\n     * @param {ElementModel} [element] - update this element instead of creating a new one\n     * @returns {Promise<ElementFromAsset>} returns the promise that resolves to an object with the element in the target library\n     */\n    createOrUpdateElementFromAsset(asset, library, opType, element) {\n        // Currently XD does not support updating video assets except\n        // the change of name.\n        if (element) {\n            element.name = asset.name;\n            return Promise.resolve({ element });\n        }\n\n        const primaryRepresentation = asset.getPrimaryRepresentation(),\n            mediaFile = primaryRepresentation.getValue('video', 'data'),\n            videoPath = primaryRepresentation._representation.getCachedContentPath(mediaFile.guid),\n            videoName = primaryRepresentation._representation.getDisplayName(mediaFile.guid);\n\n        const representation = [ {\n            path: videoPath,\n            relationship: 'primary',\n            data: [ {\n                namespace: 'video',\n                key: 'data',\n                value: { guid: mediaFile.guid, displayName: videoName }\n            } ]\n        } ];\n\n        return addVideoElement(asset.name, representation, undefined, library, opType).then((element) => {\n            return { element };\n        });\n    }\n\n    getDragData(element) {\n        if (this.isDisabled(element)) {\n            return;\n        }\n\n        const primaryRepresentation = element.getPrimaryRepresentation(),\n            mediaFile = primaryRepresentation.getValue('video', 'data');\n\n        let dragData = super.getDragData(element);\n        if (dragData) {\n            // From CCLibrary\n            // XD on Windows doesn't support \"..\" in paths, so need to normalize any paths in the drag data\n            dragData.data = [ environment.normalizePath(dragData.data[0]) ];\n            dragData.isLinked = true;\n        } else {\n            // From the Document Assets Panel\n            const videoPath = primaryRepresentation._representation.getCachedContentPath(mediaFile.guid);\n            dragData = Object.assign({}, {\n                data: [ environment.normalizePath(videoPath) ],\n                isLinked: false\n            });\n        }\n\n        dragData = Object.assign(dragData || {}, {\n            elementRef: element.getReference(),\n            elementId: element.id,\n            libraryId: element.library.id,\n            modifiedTime: getElementModifiedTime(element),\n            hasLinkReference: Boolean(element.linkReference),\n            guid: mediaFile ? mediaFile.guid : '',\n            displayName: mediaFile ? mediaFile.displayName : null\n        });\n        return dragData;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport environment from 'app/js/environment';\nimport { translate } from 'app/js/managers/translationManager';\nimport Icon from 'app/js/components/Icon';\nimport Tooltip from 'app/js/components/Tooltip';\n\nexport default class MissingFontsHeader extends React.Component {\n\n    static propTypes = {\n        collapsed: PropTypes.bool.isRequired,\n        missingFontsCount: PropTypes.number.isRequired,\n    };\n\n    get title() {\n        return (\n            <div data-test-id=\"xd-missing-fonts-title\" className=\"xd-missing-fonts-title\">\n                { translate('ASSETS_PANEL_MISSING_FONT_TITLE', { count: this.props.missingFontsCount }) }\n            </div>\n        );\n    }\n\n    get warnIcon() {\n        return (\n            <Tooltip placement=\"top-start\" content={ translate('DL_FONTS_MISSING_TOOLTIP') }>\n                <div data-test-id=\"xd-missing-fonts-warn-icon\" className=\"xd-missing-fonts-warn-icon element-badge-warning-missing\">\n                    <Icon id=\"MissingFontWarning\" height={ 18 } width={ 18 } />\n                </div>\n            </Tooltip>\n        );\n    }\n\n    _toggleCollapsed = () => {\n        environment.toggleMissingFontsCollapsed();\n    }\n\n    get collapseChevron() {\n        return (\n            <div data-test-id=\"xd-missing-fonts-collapse-chevron\" className=\"xd-missing-fonts-collapse-chevron\"\n                onClick={ this._toggleCollapsed }>\n                <Icon id={ this.props.collapsed ? 'ChevronRightSmall' : 'ChevronDownSmall' } height={ 8 }/>\n            </div>\n        );\n    }\n\n    render() {\n        return (\n            <div data-test-id=\"xd-missing-fonts-header\" className=\"xd-missing-fonts-header\">\n                { this.collapseChevron }\n                { this.title }\n                { this.warnIcon }\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { computed, observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport { translate } from 'app/js/managers/translationManager';\nimport environment from 'app/js/environment';\nimport menuManager from 'app/js/managers/menuManager';\nimport MissingFontWrapper from '../models/MissingFontWrapper';\nimport Icon from 'app/js/components/Icon';\n\n@observer\nexport default class MissingFontView extends React.Component {\n    static contextType = LibrariesContext;\n    @observable isSelected = false;\n\n    static propTypes = {\n        missingFont: PropTypes.instanceOf(MissingFontWrapper).isRequired,\n    };\n\n    @computed get contents() {\n        const fontInfo = this.props.missingFont.fontFamily || translate('DL_INFO_UNAVAILABLE_FONT');\n        const fontStyle = this.props.missingFont.fontStyle || '';\n        const instances = this.props.missingFont.numInstances;\n        const count = !instances ? 'DL_ASSET_NO_INSTANCES' : instances > 1 ? 'DL_ASSET_INSTANCES_PLURAL' : 'DL_ASSET_INSTANCES_SINGULAR';\n        const countMessage = translate(count, { instances });\n        const content = `${fontInfo} ${fontStyle} — ${countMessage}`;\n\n        return (\n            <div data-test-id=\"xd-missing-font-view-contents\" className=\"panel-grid-item-multiline-container\">\n                <div className=\"xd-missing-font-view-contents\">\n                    { content }\n                </div>\n            </div>\n        );\n    }\n\n    _handleContextMenu = (mouseEvent) => {\n        if (environment.setContextMenu) {\n            mouseEvent.stopPropagation();\n            const actions = [\n                {\n                    id: 'replaceFont',\n                    label: translate('DL_REPLACE_FONT'),\n                    onClick: () => this.props.missingFont.replace(),\n                    enableMenu: this.props.missingFont.replaceFontAllowed,\n                },\n                {\n                    id: 'highlight',\n                    label: translate('DL_HIGHLIGHT_ON_CANVAS'),\n                    onClick: () => this.props.missingFont.highlight(),\n                    enableMenu: true,\n                }\n            ];\n            menuManager.openContextMenu(actions, mouseEvent);\n        }\n    }\n\n    _onBlur = () => {\n        this.isSelected = false;\n    }\n\n    _onClick = () => {\n        this.isSelected = true;\n    }\n    get icon() {\n        if (this.context.viewState.viewState !== 'list') {\n            return;\n        }\n        return (\n            <div className=\"panel-list-item-thumb\">\n                <div data-test-id=\"thumbnail-failed-icon\" className={`panel-no-rendition-holder-list`}>\n                    <span className=\"panel-no-rendition-icon panel-list-icon-missing-rendition\">\n                        <Icon id=\"CreativeCloud\" height={ 20 }/>\n                    </span>\n                </div>\n            </div>\n\n        );\n    }\n\n    render() {\n        return (\n            <div\n                ref={ e => this.props.missingFont.register(e) }\n                data-test-id=\"xd-missing-font-view\"\n                className={ classNames(`xd-missing-font-${this.context.viewState.viewState}-view`, 'interactive', {\n                    'selected': this.isSelected,\n                }) }\n                onBlur={ this._onBlur } tabIndex=\"0\"\n                onClick={this._onClick}\n                { ...environment.contextMenuEventListeners(this._handleContextMenu) } >\n                { this.icon }\n                { this.contents }\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport MissingFontView from './MissingFontView';\n\n@observer\nexport default class MissingFontsContainer extends React.Component {\n\n    static propTypes = {\n        missingFonts: PropTypes.array.isRequired,\n    };\n\n    render() {\n        return (\n            <div\n                data-test-id=\"xd-missing-fonts-container\"\n                className={`xd-missing-fonts-${this.context.viewState}-container`}\n            >\n                { this.props.missingFonts.map((missingFont) => <MissingFontView key={missingFont.id} missingFont={missingFont} />) }\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { computed, observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport environment from 'app/js/environment';\nimport classNames from 'classnames';\nimport MissingFontsHeader from './MissingFontsHeader';\nimport MissingFontsContainer from './MissingFontsContainer';\nimport { Library } from '@cclibraries/cc-libraries-js';\nimport DocumentAssetsContainer from 'app/js/models/documentAssets/DocumentAssetsContainer';\n\n@observer\nexport default class MissingFonts extends React.Component {\n\n    static propTypes = {\n        library: PropTypes.oneOfType([ PropTypes.instanceOf(Library), PropTypes.instanceOf(DocumentAssetsContainer) ]).isRequired,\n    };\n    @observable isOverflow = false;\n\n    @computed get missingFonts() {\n        if (!this.props.library || !this.props.library.isDocumentAssets || !environment.getMissingFonts) { return []; }\n        return environment.getMissingFonts();\n    }\n\n    get collapsed() {\n        return environment.getMissingFontsCollapsed();\n    }\n\n    componentDidMount() {\n        window.addEventListener('resize', this.setIsScrollable);\n    }\n\n    componentWillUnmount() {\n        window.removeEventListener('resize', this.setIsScrollable);\n    }\n\n    setIsScrollable = () => {\n        // Adjust CSS properties based on if MissingFontsContainer is scrollable\n        if (this._missingFontsContainerRef) {\n            this.isOverflow = this._missingFontsContainerRef._lastChild.scrollHeight > this._missingFontsContainerRef._lastChild.clientHeight;\n        }\n    }\n\n    setMissingFontsContainerRef = (element) => {\n        this._missingFontsContainerRef = element;\n    }\n\n    render() {\n        if (this.missingFonts.length === 0) { return null; }\n        const classes = classNames('xd-missing-fonts-footer', {\n            'xd-missing-fonts-scroll-line': this.isOverflow\n        });\n        return (\n            <>\n                <div ref={ this.setMissingFontsContainerRef } data-test-id=\"xd-missing-fonts\" className=\"xd-missing-fonts\">\n                    <MissingFontsHeader collapsed={ this.collapsed } missingFontsCount={ this.missingFonts.length }/>\n                    { !this.collapsed && <MissingFontsContainer missingFonts={ this.missingFonts } /> }\n                </div>\n                {!this.collapsed && <div data-test-id={ classes } className={ classes } />}\n            </>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { wrapDocumentElement } from 'app/js/models/modelCache';\nimport environment from 'app/js/environment';\nimport { getColorDataFromColorSceneNode, getGradientDataFromGradientSceneNode, getTextStyleDataFromNodeOrStyleRange } from '../../scenegraphUtils';\n\n// Note that this does not inherit from a BaseRepresentationModel because\n// even though the API is in common with the RepresentationModel,\n// the RepresentationModel is not observable, whereas the DocumentRepresentation\n// is because it has its own change listener from XD.\nexport default class DocumentRepresentation {\n\n    constructor(representation) {\n        this._representation = representation;\n        // We share the same change atom as the element, since whenever the representation changes, the element also changes\n        this._changeAtom = this.element._changeAtom;\n    }\n\n    // immutable, so not observable\n    get id() { return this._representation.id; }\n\n    get element() { return wrapDocumentElement(this._representation.element); }\n\n    get type() {\n        this._changeAtom.reportObserved();\n        return environment.representationTypeMap[this._representation.type] || this._representation.type;\n    }\n\n    get relationship() {\n        this._changeAtom.reportObserved();\n        return this._representation.relationship;\n    }\n\n    get width() {\n        this._changeAtom.reportObserved();\n        return this._representation.width;\n    }\n\n    get height() {\n        this._changeAtom.reportObserved();\n        return this._representation.height;\n    }\n\n    // This is a work around until XD implements the getValues API on their LibraryRepresentation\n    getValues() { return this._representation.getValues ? this._representation.getValues() : []; }\n\n    // Data is stored in the custom values\n    // e.g. Gradient/ColorElementHelper.getElementValue(e) will call getValue('color', 'data')\n    // e.g. CharacterStyleElementHelper.getElementValue(e) will call getValue('characterstyle', 'data')\n    // e.g. ComponentElementHelper.getElementValue(e) will call getValue('symbol', 'data')\n    getValue(namespace, key) {\n        this._changeAtom.reportObserved();\n        // TODO: workaround for XD assigning gradients the wrong namespace.\n        const value = this._representation.getValue(namespace === 'gradient' ? 'color' : namespace, key);\n        if (value) {\n            if (namespace === 'color' && key === 'data') {\n                // We need to format color data the same way as regular elements,\n                // and encapsulate it within the model layer.\n                return getColorDataFromColorSceneNode(value);\n            }\n            if (namespace === 'gradient' && key === 'data') {\n                // We need to format gradient data the same way as regular elements,\n                // and encapsulate it within the model layer.\n                return getGradientDataFromGradientSceneNode(value);\n            }\n            if (namespace === 'characterstyle' && key === 'data') {\n                return getTextStyleDataFromNodeOrStyleRange(value);\n            }\n        }\n        return value;\n    }\n\n    // Matching representation APIs:\n\n    isCompatibleType(type) {\n        this._changeAtom.reportObserved();\n        return this.type === type;\n    }\n\n    getExternalLinkDownloadProgress() { return 100; }\n\n    // This is called within the config.getDragData\n    // However, there is no cached content path for assets, so they should\n    // not be calling this once getDragData is setup correctly on each config.\n    getCachedContentPath() {}\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { reaction, when } from 'mobx';\nimport configuration from 'app/js/config/configuration';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { translate } from 'app/js/managers/translationManager';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport { openXDUIKitsURL } from 'app/js/utils/linkUtils';\nimport DefaultConfigs from 'app/js/config/elements/DefaultConfigs';\n// Import all the element type configuration overrides\nimport ImageElementConfig from './elements/ImageElementConfig';\nimport ColorElementConfig from './elements/ColorElementConfig';\nimport TextStyleElementConfig from './elements/TextStyleElementConfig';\nimport GradientElementConfig from './elements/GradientElementConfig';\nimport ComponentElementConfig from './elements/ComponentElementConfig';\nimport AudioElementConfig from './elements/AudioElementConfig';\nimport VideoElementConfig from './elements/VideoElementConfig';\nimport MissingFonts from './components/MissingFonts';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport metrics from 'app/js/interface/metrics';\nimport * as GroupUtils from 'app/js/utils/groupUtils';\nimport appState from 'app/js/appState';\n\n// Document Assets Models\nimport { registerDocumentAssetsContainers, wrapDocumentAssetsContainer } from 'app/js/models/modelCache';\nimport DocumentAssetsContainer from './models/documentAssets/DocumentAssetsContainer';\nimport DocumentGroup from './models/documentAssets/DocumentGroup';\nimport DocumentElement from './models/documentAssets/DocumentElement';\nimport DocumentRepresentation from './models/documentAssets/DocumentRepresentation';\nimport { delay } from 'app/js/utils/promiseUtils';\n\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport groupSelectionState from 'app/js/state/groupSelectionState';\n\nexport function getAppConfiguration() {\n\n    this.config = {};\n    this.config.APP_NAMESPACE = 'xd'; // For use as namespace when setValue is called\n    this.config.code = 'SPRK';\n    this.config.translationSuffix = 'XD';\n    this.config.fullName = 'XD';\n    this.config.dragDropSource = 'com.adobe.xd';\n    this.config.themes = {\n        'f5f5f5': 'lighter'\n    };\n    this.config.cancelButtonQuiet = true;\n\n    // In the global CSS, certain app styles are bound to the classname 'spectrum-enabled'.\n    this.config.legacySpectrumEnabled = true;\n\n    this.config.defaultTheme = 'lighter';\n    this.config.hideCustomSearchIcon = true;\n    this.config.hideDefaultSearchCancelIcon = true;\n    this.config.customClearSearchIconHeight = 12;\n    this.config.noFlyoutMenu = true;\n    this.config.hideHeaderCreateLibraryButton = true;\n    this.config.hasLibraryManager = true;\n    this.config.disableRecentLibrariesView = true;\n    this.config.disableEditOnDoubleClickAsset = true;\n    this.config.customTextStyleTrackingString = 'DL_TEXT_ATTRIBUTE_TRACKING_XD';\n    this.config.customTextStyleLeadingString = 'DL_TEXT_ATTRIBUTE_LEADING_XD';\n\n    this.config.defaultToDocumentAssets = true;\n    this.config.defaultViewState = 'list';\n    this.config.defaultViewByState = 'group';\n\n    this.config.hideFooterInRootView = true;\n    this.config.hideNamesInGridView = false;\n    this.config.hideListViewMetadata = true;\n\n    this.config.applyElementOnNameClick = true;\n    this.config.enableSAM = true;\n    this.config.disableOnboarding = true;\n    this.config.showTeamsOnboarding = true;\n\n    // Should equal height from the .panel-list-item css in _main.css\n    this.config.listViewElementHeight = 32;\n    this.config.smallColorGridElement = true;\n\n    this.config.getScrollTopPadding = () => 7;\n    this.config.getScrollBarPadding = () => 1; // Since XD has greater padding all around, we need to reduce scroll bar padding so that Grid Group view has enough space for 2 elements in a row within the group border.\n    this.config.gridRightPadding = 4; // To account for the widest scrollbar when 'Scrollbar always on' setting is enabled\n    this.config.AdditionalLibraryHeaderView = MissingFonts;\n    this.config.elementTypes = [\n        // Overrides\n        ColorElementConfig,\n        DefaultConfigs.ColorThemeElementConfig,\n        GradientElementConfig,\n        TextStyleElementConfig,\n        DefaultConfigs.FontElementConfig,\n        ComponentElementConfig,\n        ImageElementConfig,\n        VideoElementConfig,\n        AudioElementConfig,\n        // Defaults\n        DefaultConfigs.LayerStyleElementConfig,\n        DefaultConfigs.BrushElementConfig,\n        DefaultConfigs.ThreeDElementConfig,\n        DefaultConfigs.PatternElementConfig,\n        DefaultConfigs.TemplateElementConfig,\n        DefaultConfigs.LookElementConfig,\n        DefaultConfigs.CapsuleElementConfig,\n        DefaultConfigs.ParagraphStyleElementConfig,\n        DefaultConfigs.TextElementConfig,\n        DefaultConfigs.AnimationElementConfig,\n        DefaultConfigs.LightElementConfig,\n        DefaultConfigs.MaterialElementConfig,\n        DefaultConfigs.ChannelElementConfig,\n        DefaultConfigs.ImageGuidelineElementConfig,\n        DefaultConfigs.UnsupportedElementConfig\n    ];\n\n    // Product-specific configurations:\n    this.config.hideSearchSelectorOnSearch = true;\n    // This defines the element categories that are collapsed by default in the UI - change this to suit your application.\n    this.config.collapsedTypes = [\n        configuration.BRUSH_ELEMENT_TYPE,\n        configuration.CHANNEL_ELEMENT_TYPE,\n        configuration.PARAGRAPH_STYLE_ELEMENT_TYPE,\n        configuration.LAYER_STYLE_ELEMENT_TYPE,\n        configuration.LOOK_ELEMENT_TYPE,\n        configuration.CAPSULE_ELEMENT_TYPE,\n        configuration.THREE_D_ELEMENT_TYPE,\n        configuration.LIGHT_ELEMENT_TYPE,\n        configuration.MATERIAL_ELEMENT_TYPE,\n        configuration.PATTERN_ELEMENT_TYPE,\n        configuration.TEMPLATE_ELEMENT_TYPE,\n        configuration.TEXT_ELEMENT_TYPE,\n        configuration.ANIMATION_ELEMENT_TYPE,\n        configuration.IMAGE_GUIDELINE_ELEMENT_TYPE,\n        configuration.UNSUPPORTED_ELEMENT_TYPE\n    ];\n\n    // Customize UI options that we see during Stock search\n    // (UXP doesn't support video, for example)\n    this.config.STOCK_SEARCH_UI_OPTIONS = [\n        configuration.STOCK_SEARCH_OPTION_PHOTO,\n        configuration.STOCK_SEARCH_OPTION_ILLUSTRATION,\n        configuration.STOCK_SEARCH_OPTION_VECTOR,\n        configuration.STOCK_SEARCH_OPTION_PREMIUM,\n    ];\n\n    this.config.translationOverrides = {\n        'EMPTY_ROOT_VIEW_MESSAGE': 'EMPTY_ROOT_VIEW_MESSAGE_XD',\n        'EMPTY_ROOT_VIEW_CTA': 'EMPTY_ROOT_VIEW_CTA_XD'\n    };\n\n    // XD is interested in reporting to analytics on these events\n    this.config.reportSDMEvent = function(payload) {\n        environment.reportSDMEvent(payload);\n    };\n\n    this.config.requestPublish = async () => {\n        const MAX_RETRIES = 6;\n        for (let retries = 1; retries <= MAX_RETRIES; retries++) {\n            try {\n                const cb = await environment.requestPublishStart();\n                if (cb) {\n                    return cb;\n                }\n            } catch (err) {\n                if (retries === MAX_RETRIES) {\n                    throw err;\n                }\n                await delay(Math.pow(14, retries));\n                continue;\n            }\n            throw new Error('Request to publish failed due to a coeditor requesting to publish first');\n        }\n    };\n\n    this.config.notifyPublishEnd = () => environment.notifyPublishEnd();\n\n    /* Add any product-specific logic to decide whether an element should be editable beyond simply the mimetype. */\n    this.config.isElementEditable = function(element) {\n        // Currently, only document assets get special treatment in XD: most are always editable, audio being the exception.\n        return element.library.isDocumentAssets && [\n            configuration.COLOR_ELEMENT_TYPE,\n            configuration.GRADIENT_ELEMENT_TYPE,\n            configuration.COMPONENT_ELEMENT_TYPE,\n            configuration.CHARACTER_STYLE_ELEMENT_TYPE\n        ].includes(element.type);\n    };\n\n    /* Add any product-specific logic to decide whether a set of element should be deletable beyond simply the mimetype. */\n    this.config.disableDelete = function(elements) {\n        const documentAssets = elements.filter(element => element.library.isDocumentAssets);\n        // Whether document assets can be deleted is determined by XD.\n        return documentAssets.length && !environment.canDeleteAssets(documentAssets);\n    };\n\n    this.config.handleDiscoverLibraries = () => {\n        const url = openXDUIKitsURL();\n        metrics.reportOutgoingUrlEvent('Navigation', 'Root view', 'click', 'get-ui-kits', url);\n    };\n\n    this.config.shouldShowExtensionInSearch = (element) => {\n        return !!element.library.isDocumentAssets;\n    };\n\n    /*The function customCollapseGroupWithModifierKey handles the custom logic implemented specific to XD App.\n    whenever click event occurs on a group expand/collapse icon, and if CMD(mac) or CTRL(win) is pressed\n    during the click, then globally toggle all the nodes in the library.\n    Returns true to indicate that the event is handled by this function and further action is not needed.\n    Returns false to indicate that the event is NOT handled by this function. */\n    this.config.customCollapseGroupWithModifierKey = (mouseEvent, group) => {\n        const shouldCollapseGlobally = environment.isWindowsOS() ? mouseEvent.ctrlKey : mouseEvent.metaKey;\n        if (!shouldCollapseGlobally) {\n            return false;\n        }\n        const { viewState } = appState.panel;\n        const isCollapsed = viewState.isGroupCollapsed(group.id);\n        const rootGroups = GroupUtils.getRootGroups(group.library);\n        rootGroups.forEach(rootGroup => {\n            GroupUtils.toggleCollapseChildrenState(rootGroup, {\n                shouldCollapse:!isCollapsed,\n                expandNonMeaningfulChildren:false,\n            });\n            viewState.setGroupCollapsed(rootGroup.id, !isCollapsed);\n        });\n\n        return true;\n    };\n\n    // Remove 'export' from the library list item context menu.\n    this.config.disabledLibraryContextMenuActions = [ 'export' ];\n\n    this.config.customGroupLearnMoreLink = configuration.XD_GROUP_LEARN_MORE;\n\n    this.init = function() {\n        registerDocumentAssetsContainers({ DocumentAssetsContainer, DocumentGroup, DocumentElement, DocumentRepresentation });\n\n        FileUtils.extendUsableTypes(configuration.IMAGE_ELEMENT_TYPE, [\n            'application/vnd.adobe.element.agc+json',\n            'image/png',\n            'image/jpeg',\n            'image/jpg',\n            'image/svg+xml',\n            'application/illustrator'\n        ]);\n\n        FileUtils.extendUsableTypes(configuration.COLOR_ELEMENT_TYPE, [ 'application/vnd.adobe.color+json' ]);\n        FileUtils.extendUsableTypes(configuration.COLOR_THEME_ELEMENT_TYPE, [ 'application/vnd.adobe.colortheme+json' ]);\n        FileUtils.extendUsableTypes(configuration.CHARACTER_STYLE_ELEMENT_TYPE, [ 'application/vnd.adobe.characterstyle+json' ]);\n        FileUtils.extendUsableTypes(configuration.GRADIENT_ELEMENT_TYPE, [ 'application/vnd.adobe.gradient+json' ]);\n        if (environment.isXDFeatureFlagEnabled('newFileFormat')) {\n            FileUtils.extendUsableTypes(configuration.COMPONENT_ELEMENT_TYPE, [\n                'application/vnd.adobe.element.agc+json',\n                'application/vnd.adobe.xdcomponent+dcx',\n                'application/vnd.adobe.nxdcomponent+dcx'\n            ]);\n        } else {\n            FileUtils.extendUsableTypes(configuration.COMPONENT_ELEMENT_TYPE, [\n                'application/vnd.adobe.element.agc+json',\n                'application/vnd.adobe.xdcomponent+dcx'\n            ]);\n        }\n        FileUtils.extendUsableTypes(configuration.AUDIO_ELEMENT_TYPE, [\n            'audio/mpeg',\n            'audio/mpeg3',\n            'audio/mp3',\n            'audio/wav',\n        ]);\n        FileUtils.extendUsableTypes(configuration.VIDEO_ELEMENT_TYPE, [ 'video/mp4' ]);\n\n        this.startEventListener();\n    };\n\n    this.getDocumentAssetsContainer = () => {\n        return wrapDocumentAssetsContainer(environment.getDocumentAssetsContainer());\n    };\n\n    this.onSelectionChange = () => {\n        try {\n            layerSelectionManager.handleSelectionChange();\n        } catch (e) {\n            // if you refresh the panel (in dev mode), the event handlers don't get cleaned up so\n            // this will cause exceptions and break selection change events across XD.\n        }\n    };\n\n    this.onElementDrop = (data) => {\n        try {\n            data.items.forEach(async item => {\n                const elementData = item._parsedCCLibraryData;\n                let element = await libraryManager.resolveElementReference(elementData.elementRef);\n                if (!element) {\n                    const library = libraryManager.getLibraryById(elementData.libraryId);\n                    element = library && library.getElementById(elementData.elementId);\n                }\n                const representation = element && element.getPrimaryRepresentation();\n                representation && reportApplyMetric(representation, 'dragDrop');\n            });\n            // Applications on CEP emit this event when elements are dropped.\n            // Certain components of the panel such as `StockDragManager` listen for this event to handle cleanup and success.\n            // XD does not emit this event so we catch what it does emit and forward it as the expected type\n            environment._notifyEventListeners('dlElementDropped', { data });\n        } catch (e) {\n            // if you refresh the panel (in dev mode), the event handlers don't get cleaned up so\n            // this will cause exceptions and break selection change events across XD.\n        }\n    };\n\n    this.publishStateListenerDisposers = [];\n\n    this.addPublishStateEventListener = function(state, cb) {\n        this.publishStateListenerDisposers.push(reaction(() => libraryManager.publishStatus, status => status === state && cb()));\n    };\n\n    this.removeAllPublishStateEventListeners = function() {\n        this.publishStateListenerDisposers.forEach(dispose => dispose());\n    };\n\n    this.isPublishingHandler = () => {\n        environment.dismissToastMessage(translate('PENDING_UPDATE_TOAST_MESSAGE'), translate('PENDING_UPDATE_TOAST_ACTION_LABEL'));\n    };\n\n    this._upgradeOrUpdateToastAction = isStarterPlanUser => {\n        if (isStarterPlanUser) {\n            environment.handleUpgradeButtonClicked();\n        } else {\n            metrics.reportEvent('Publish', 'Toast', 'click', 'publish-now', { event: { count: libraryManager.publishedDocumentLibrary.getGroups().length } });\n            libraryManager.publish(libraryManager.documentAssetsContainer).catch(() => {});\n        }\n    };\n\n    this.onPendingUpdate = () => {\n        // don't show any toast while previewing or while publishing is disabled\n        if (environment.isPreviewing() || !libraryManager.publishState.canPublish) {\n            return;\n        }\n        const publishedLibrary = libraryManager.publishedDocumentLibrary;\n        // Don't offer the update canvas toast until sync errors are resolved.\n        if (publishedLibrary && publishedLibrary.isWritable && !publishedLibrary.syncError) {\n\n            const isStarterPlanUser = libraryManager.isStarterPlanUser;\n            environment.openApplicationToast(isStarterPlanUser ? translate('DL_UPGRADE_TOAST_MESSAGE') : translate('PENDING_UPDATE_TOAST_MESSAGE'), {\n                variant: 'info',\n                actionLabel: isStarterPlanUser ? translate('DL_UPGRADE_TOAST_LABEL') : translate('PENDING_UPDATE_TOAST_ACTION_LABEL'),\n                // Publish changes\n                onAction: this._upgradeOrUpdateToastAction.bind(this, isStarterPlanUser)\n            });\n        }\n    };\n\n    this.addSubscriptionChangeListener = (userUpgraded) => {\n        this.subscriptionListenerDisposer = when(() => userUpgraded && !libraryManager.isStarterPlanUser, () => this.onPendingUpdate);\n    };\n\n    this.removeSubscriptionChangeListener = () => {\n        this.subscriptionListenerDisposer && this.subscriptionListenerDisposer();\n    };\n\n    this.onInviteSent = (assetId, inviteId) => {\n        if (inviteId === 'inviteSent') {\n            const eventValue = libraryManager.publishedDocumentLibrary && libraryManager.publishedDocumentLibrary.assetId.includes(assetId) ? 'document-library' : 'library';\n            const properties = {\n                event: {\n                    pagename: undefined, // undefined because this event is triggered by the Library Manager\n                    value: eventValue\n                },\n            };\n\n            metrics.reportEvent('Manager', 'Sharesheet', 'click', 'share', properties);\n        }\n    };\n\n    this._onSelectionStateChange = function() {\n        const elements = elementSelectionState.selection;\n        const { groupSelection: groups } = groupSelectionState;\n        // Calls XDEnvironment.notifySelectionChange\n        environment.notifySelectionChange(elements, groups);\n    };\n\n    this._selectionStateListenerDisposers = [];\n\n    this.addSelectionStateEventListener = function(cb) {\n        // This will set watch the selection and call `cb()` whenever it changes.\n        this._selectionStateListenerDisposers.push(\n            reaction(() => elementSelectionState.selection, cb)\n        );\n    };\n\n    this.removeAllSelectionStateEventListeners = function() {\n        // Clean up.\n        this._selectionStateListenerDisposers.forEach(dispose => dispose());\n    };\n\n    this.startEventListener = function() {\n        environment.addSelectionListener(this.onSelectionChange);\n        environment.addTextEditListener(this.onSelectionChange);\n        environment.addDropEventListener(this.onElementDrop);\n        this.addPublishStateEventListener(configuration.DOCUMENT_LIBRARY_STATES.UNPUBLISHED_CHANGES, this.onPendingUpdate);\n        this.addPublishStateEventListener(configuration.DOCUMENT_LIBRARY_STATES.PUBLISHING, this.isPublishingHandler);\n        environment.addInviteEventListener(this.onInviteSent);\n        environment.addIsPaidUserListener(this.addSubscriptionChangeListener);\n        this.addSelectionStateEventListener(this._onSelectionStateChange);\n        // TODO: Consider adding a listener on the asset panel to know whether an item is picked even when there is\n        // no selection on the canvas, in order to update the add asset menu accordingly.\n    };\n\n    this.stopEventListener = function() {\n        environment.removeSelectionListener(this.onSelectionChange);\n        environment.removeTextEditListener(this.onSelectionChange);\n        environment.removeDropEventListener(this.onElementDrop);\n        this.removeAllPublishStateEventListeners();\n        environment.removeInviteEventListener(this.onInviteSent);\n        environment.removeIsPaidUserListener(this.removeSubscriptionChangeListener);\n        this.removeAllSelectionStateEventListeners();\n    };\n\n    // TASK: This needs to be implemented to provide data about the license state of the user for analytics purposes\n    // Examples:\n    // * {accountStatus: \"paid\"}\n    // * {accountStatus: \"trial\", secondsLeftInTrial: 10000}\n    this.getUserData = callback => callback();\n\n    // Any product-specific context menu actions for an element\n    this.getAdditionalMenuItems = element => {\n        // Currently, only document assets get special treatment in XD: most can be highlighted on canvas, audio being the exception.\n        if (element.library.isDocumentAssets && element.type !== configuration.AUDIO_ELEMENT_TYPE) {\n            // Only Highlight on Canvas for now.\n            return [ {\n                label: 'DL_HIGHLIGHT_ON_CANVAS',\n                onClick: () => {\n                    metrics.reportElementEvent('Element Operations', 'Element', 'click', 'highlight-on-canvas', element, { event: { value: 'single', count: 1 }, content: { category: 'Right Click' } });\n                    environment.highlightOnCanvas(element);\n                },\n            } ];\n        }\n    };\n\n    // TODO: Refactor the above to return an object, rather than using this\n    return this;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport { computed } from 'mobx';\n\nexport default class MissingFontWrapper {\n\n    constructor(element) {\n        this._element = element;\n        const representation = this._element.getPrimaryRepresentation();\n        this._data = representation ? representation.getValue('missingfont', 'data') : undefined;\n    }\n\n    get id() {\n        return this._element.id;\n    }\n\n    get fontFamily() {\n        return this._data && this._data.fontFamily ? this._data.fontFamily : undefined;\n    }\n\n    get fontStyle() {\n        return this._data && this._data.fontStyle ? this._data.fontStyle : undefined;\n    }\n\n    @computed get replaceFontAllowed() {\n        return environment.getAssetInstanceCount && environment.getAssetInstanceCount(this._element, true) > 0;\n    }\n\n    @computed get numInstances() {\n        return environment.getAssetInstanceCount && environment.getAssetInstanceCount(this._element);\n    }\n\n    register(node) {\n        environment.registerElementNode && environment.registerElementNode(this, node);\n    }\n\n    highlight() {\n        environment.highlightOnCanvas && environment.highlightOnCanvas(this._element);\n    }\n\n    replace() {\n        environment.replaceFont && environment.replaceFont(this._element);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\nimport { Atom, action, computed } from 'mobx';\nimport { wrapDocumentElement, wrapDocumentGroup, cleanDocumentElementsCache,\n    cleanDocumentGroupsCache, removeDocumentElementFromCache, removeDocumentGroupFromCache, } from 'app/js/models/modelCache';\nimport { translate } from 'app/js/managers/translationManager';\nimport DocumentAssetsContainer from 'app/js/models/documentAssets/DocumentAssetsContainer';\nimport environment from 'app/js/environment';\nimport appState from 'app/js/appState';\n\n/**\n * This is a wrapper over this._XDCCLibrariesAPIs.getCurrentDocumentLibrary(),\n * which is an instance of _xdRequire('library/LibraryFolder'), which shares much in common with\n * a CC Library. It is essentially a container for Document Assets, much as CC Libraries are a container for Elements.\n * NOTE: This name IS confusing, because this isn't actually a real CC Library yet.\n * It has not yet been \"published\" into what we are calling a CC DocumentLibrary.\n */\nexport default class SPRKDocumentAssetsContainer extends DocumentAssetsContainer {\n    // Document Asset folders in XD are always writable.\n    isWritable = true;\n\n    // Add here the id of any operations that should be batchable\n    _batchableOperations = [ 'delete', 'reorder' ];\n    _pendingOperations = {};\n    _operationCount = 0;\n\n    // Batching of events coming from XD (if inside a bulk operation, we queue up pending changes until the end)\n    _xdOperationsInProgress = new Set();\n    _pendingChangeCallbacks = new Set();\n\n    // We use this value to generate local cache keys dependent on the current state of the library.\n    _changeCount = 0;\n\n    constructor(documentAssetsContainer) {\n        // The documentAssetsContainer is an instance of XD's 'LibraryFolder', a singleton module that contains document assets.\n        // Since XD is providing this LibraryFolder, we don't need to manage the document assets as we normally would for other apps,\n        // so we pass an empty object to super.constructor.\n        super({});\n        this._library = documentAssetsContainer;\n\n        this._changeAtom = new Atom('documentLibraryChange',\n            () => this._isObserved = true,\n            () => this._isObserved = false\n        );\n\n        // If the panel gets reloaded, then calling the change listener will throw an exception.\n        // Remove the change listener if we reload (should only ever trigger in dev environments)\n        // See https://jira.corp.adobe.com/browse/XD-118621\n        if (this._library._ccLibrariesEventListener) {\n            this._library.removeChangeListener(this._library._ccLibrariesEventListener);\n        }\n        this._library._ccLibrariesEventListener = this._onChange;\n\n        // Important - he onChange handler is only registered when somebody is actively observing the library,\n        // but we need to be constantly listening to events so we know if we're inside an operation.\n        this._library.addChangeListener(this._onChange);\n\n        // Categorize document library events from XD\n        const types = environment.documentLibraryConstants;\n        this._beginOperationEvents = {\n            [types.BEGIN_BULK_OPERATION]: 'bulk',\n            [types.RESTART_BULK_OPERATION_TO_RENDER]: 'bulk',\n            [types.LINKED_ELEMENTS_IMPORT_START]: 'import'\n        };\n        this._endOperationEvents = {\n            [types.END_BULK_OPERATION]: 'bulk',\n            [types.EDIT_BATCH_FINISHED]: 'bulk', // TODO - seems that end bulk doesn't always fire, but edit batch finished does\n            [types.PAUSE_BULK_OPERATION_TO_RENDER]: 'bulk',\n            [types.LINKED_ELEMENTS_IMPORT_END]: 'import'\n        };\n        this._ignoreEvents = [ types.ASSETS_PANEL_DISMISS_EDITOR, types.ASSETS_PANEL_DISMISS_MISSING_FONTS_EDITOR ];\n        // The label by which to identify a bulk operation. Used to determine the \"Undo <label>\" for the action.\n        this._bulkOperationLabels = {\n            GROUP_TOGETHER: translate('DL_NEW_GROUP'),\n            REORDER: translate('DL_REORDER'),\n            UNGROUP: translate('DL_UNGROUP_NESTED_GROUPS')\n        };\n    }\n\n    on(event, callback) {\n        this._library.on(event, callback);\n    }\n\n    off(event, callback) {\n        this._library.off(event, callback);\n    }\n\n    get changeCount() {\n        this._changeAtom.reportObserved();\n        return this._changeCount;\n    }\n\n    get linkedLibraryId() {\n        this._changeAtom.reportObserved();\n        if (!environment.getLinkedLibraryIdFromDocument) { return; }\n        return environment.getLinkedLibraryIdFromDocument();\n    }\n\n    @action.bound _reportChanged() {\n        this._changeCount++;\n        this._changeAtom.reportChanged();\n\n        // Clean up any deleted assets or groups cached\n        cleanDocumentElementsCache(this._library);\n        cleanDocumentGroupsCache(this._library);\n    }\n\n    _scheduleChangeCallback(callback) {\n        if (this._xdOperationsInProgress.size > 0) {\n            this._pendingChangeCallbacks.add(callback);\n        } else {\n            callback();\n        }\n    }\n\n    @action.bound _onChange(eventType, itemId/*, elementType, oldValue */) {\n        if (this._beginOperationEvents[eventType]) {\n            this._xdOperationsInProgress.add(this._beginOperationEvents[eventType]);\n        } else if (this._endOperationEvents[eventType]) {\n            this._xdOperationsInProgress.delete(this._endOperationEvents[eventType]);\n        } else if (!this._ignoreEvents.includes(eventType)) {\n            // Only schedule a change notification for \"real\" events (not begin/end events)\n            // An endBulkOperation event will trigger any pending change notifications,\n            // but will not result in a change notification by itself\n            if (itemId) {\n                const item = this._getChangedItemById(itemId, eventType);\n                item && item._onChange(eventType);\n\n                const eventTypes = environment.documentLibraryConstants;\n                if ([ eventTypes.GROUP_REMOVED_EVENT, eventTypes.ELEMENT_REMOVED_EVENT ].includes(eventType)) {\n                    const { viewManager } = appState.panel;\n                    // If XD deleted the item we're renaming/editing the path for,\n                    // we need to clean up the panel state. This normally isn't an issue,\n                    // because we clean up the state ourselves if the delete happens\n                    // from the panel. But if the delete happens remotely, say during\n                    // a co-editing session, we don't want any trailing stale state to persist locally.\n                    if (viewManager.renamingItem?.id === itemId) {\n                        viewManager.stopRename();\n                    }\n                    if (viewManager.editPathGroup?.id === itemId) {\n                        viewManager.stopEditPath();\n                    }\n                }\n            }\n            if (this._isObserved) {\n                this._scheduleChangeCallback(this._reportChanged);\n            }\n        }\n\n        // If exited a batch, run all the queued callbacks\n        if (this._xdOperationsInProgress.size === 0 && this._pendingChangeCallbacks.size > 0) {\n            const pendingChangeCallbacks = [ ...this._pendingChangeCallbacks ];\n            this._pendingChangeCallbacks.clear();\n            pendingChangeCallbacks.forEach(callback => callback());\n        }\n    }\n\n    /**\n     * Searching the elements in a Document library, according to a filter.\n     *\n     * Note that this is still observable, because any changes to any of the elements also trigger a change event\n     * on the library (so the result of filterElements will be invalidated).\n     *\n     * @param {Function} predicate Takes an element and returns true if it should be included in the search results\n     * @returns {DocumentElement[]} array of elements that satisfy the predicate - this is resultsArray if you passed one in\n     */\n    getFilteredElements(predicate) {\n        this._changeAtom.reportObserved();\n        return this.elements.filter(predicate);\n    }\n\n    // XD only loads one document at a time (per window), so we only have one instance of the document library model at any time.\n    // For a given document, its documentId is stable and never changes for the lifetime of the document (both local and cloud\n    // documents have a document id).\n    //\n    // Note that when you \"Save As\", this changes the document to a different document with a new id. We treat this as though\n    // the entire document changed, and a new model will be created.\n    get id() {\n        // The id property of a document is not unique,\n        // so we use the documentId for a convenient unique identifier\n        // Confusingly, a cc library also has a documentId property,\n        // for identifying the link back to a document.\n        return this._library.documentId;\n    }\n\n    // We call the assets 'elements' to preserve a library-like interface for easier integration\n    get elements() {\n        this._changeAtom.reportObserved();\n        const elements = this._library.elements;\n        return elements.map(asset => wrapDocumentElement(asset));\n    }\n\n    // This allows us to count the number of document assets without instantiating all the asset wrappers.\n    get elementCount() {\n        this._changeAtom.reportObserved();\n        return this._library.elements.length;\n    }\n\n    get pathViewMaxDepth() {\n        // XD Document Assets paths start after the top-level group.\n        return 1;\n    }\n\n    _getChangedItemById(id, changeEvent) {\n        const types = environment.documentLibraryConstants;\n        const handlers = {\n            [types.ELEMENT_CHANGED_EVENT]: this.getElementById,\n            [types.GROUP_CHANGED_EVENT]: this.getGroupById\n        };\n        // Fall back to elements, since they dispatch many different types of change events.\n        if (!handlers[changeEvent]) { return this.getElementById(id); }\n        return handlers[changeEvent].call(this, id);\n    }\n\n    getElementById(id) {\n        this._changeAtom.reportObserved();\n        return wrapDocumentElement(this._library.getElementById(id));\n    }\n\n    removeGroup(group, includeContents = false) {\n        if (this._pendingOperations['reorder']) {\n            this._pendingOperations['reorder'].push({ type: 'removeGroup', data: { group, includeContents } });\n            this._currentBulkOperationLabel = this._bulkOperationLabels.UNGROUP;\n        } else {\n            environment.deleteGroup(group._group, includeContents);\n            removeDocumentGroupFromCache(group);\n        }\n    }\n\n    getGroups() { // No notion of classifier. We treat them as all default.\n        this._changeAtom.reportObserved();\n        return this._library.getGroups().map(g => wrapDocumentGroup(g));\n    }\n\n    getGroupById(id) {\n        this._changeAtom.reportObserved();\n        const group = this._library.getGroups().find(g => g.id === id);\n        if (group) {\n            return wrapDocumentGroup(group);\n        }\n    }\n\n    getGroupCount() {\n        return this._library.getGroups().length;\n    }\n\n    /* Gated Updates */\n\n    updateLinkedAssets() {\n        // Specify the assets that need updating or relinking.\n        // TODO: Remove this override after links to documents and the updateAndAddAllLinkedAssets API are deprecated\n        environment.updateAndAddAllLinkedAssets(this.elements.filter(asset => asset.isPendingUpdate || asset.newLinkedElementRef));\n    }\n\n    // After importing assets from a document, it's more like linking two documents,\n    // so any assets added later to that document also need to be imported (and the Update All button must show).\n    // TODO: This is legacy functionality that can be removed after legacy document links are deprecated.\n    get newLinkedAssetsExist() {\n        this._changeAtom.reportObserved();\n        return this._library.hasPendingLinkedElementsToAdd();\n    }\n\n    /* Missing Links */\n\n    @computed get missingLinks() {\n        // Legacy document links are not technically broken, but they are deprecated and we want users to migrate over to libraries.\n        return this.elements.filter(element => element.isMissingLink || element.isDeprecatedLegacyDocumentLink);\n    }\n\n    @computed get resolvableMissingLinks() {\n        return this.missingLinks.filter(element => {\n            // We can help the user resolve their broken links if:\n            // - They have access to the library, they just need to accept the invitation for it.\n            // - They have access to the library via a team, they just need to follow it.\n            // - The asset comes from a legacy document, and we want to help them migrate to a library link.\n            return element.isPendingInvite || element.isPendingFollow || element.isDeprecatedLegacyDocumentLink;\n        });\n    }\n\n    /* Context Menu methods (for MVP) */\n\n    removeElement(asset) {\n        if (this._pendingOperations['delete']) {\n            this._pendingOperations['delete'].push(asset);\n        } else {\n            environment.deleteAssets([ asset ]);\n            removeDocumentElementFromCache(asset);\n        }\n    }\n\n    /* Batched Operations */\n\n    _getOrderInGroup(asset, group) {\n        return environment.getOrderInGroup(asset, group);\n    }\n\n    _setGroupParent(group, parent) {\n        if (this._pendingOperations['reorder']) {\n            this._pendingOperations['reorder'].push({ type: 'groupParent', data: { group, parent } });\n        } else {\n            environment.reparentGroup(group, parent);\n        }\n    }\n\n    _setGroupOrder(group, order) {\n        if (this._pendingOperations['reorder']) {\n            this._pendingOperations['reorder'].push({ type: 'groupOrder', data: { group, order } });\n        } else {\n            environment.reorderGroup(group, order);\n        }\n    }\n\n    _setElementOrder(asset, group, order) {\n        if (this._pendingOperations['reorder']) { // batching of operations has begun\n            this._pendingOperations['reorder'].push({ type: 'elementOrder', data: { asset, group, order } });\n        } else {\n            environment.setOrderInGroup(asset, group, order);\n        }\n    }\n\n    _createGroupChild(name, order, parent) {\n        if (this._pendingOperations['reorder'] && !this._reorderOpInProgress) {\n            // Start edit history record, specifically for grouping items.\n            environment.beginOperation(this._bulkOperationLabels.GROUP_TOGETHER);\n            // We still want to enqueue the create operation even though we will have already handled it here.\n            // This is just to catch the case when a caller makes a batch of only a create operation.\n            // In that case, we want to make sure we still go through the regular batch lifecycle and call `endReorderOperation()` at the end.\n            this._pendingOperations['reorder'].push({ type: 'createGroup', data: {} });\n            // Finally, register that a batch reorder operation has been started, so we can avoid starting a new one later in the normal cycle.\n            this._reorderOpInProgress = true;\n        }\n        return environment.createGroup(name, order, parent);\n    }\n\n    beginOperation() {\n        this._operationCount++;\n        this._batchableOperations.forEach(id => {\n            this._pendingOperations[id] = this._pendingOperations[id] || [];\n        });\n    }\n\n    endOperation() {\n        if (--this._operationCount > 0) { return; }\n        const bulkOpLabel = this._currentBulkOperationLabel || this._bulkOperationLabels.REORDER;\n\n        this._batchableOperations.forEach(id => {\n            const operations = this._pendingOperations[id];\n            if (operations && operations.length) {\n                switch (id) {\n                case 'delete':\n                    environment.deleteAssets(operations);\n                    operations.forEach(removeDocumentElementFromCache);\n                    break;\n                case 'reorder':\n                    // A batch reorder might have been started by a create group operation.\n                    if (!this._reorderOpInProgress) {\n                        environment.beginOperation(bulkOpLabel); // start edit history record, specifically for reordering or ungrouping\n                    }\n                    operations.forEach(({ type, data }) => {\n                        switch (type) {\n                        case 'elementOrder':\n                            environment.setOrderInGroup(data.asset, data.group, data.order);\n                            break;\n                        case 'groupOrder':\n                            environment.reorderGroup(data.group, data.order);\n                            break;\n                        case 'groupParent':\n                            environment.reparentGroup(data.group, data.parent);\n                            break;\n                        case 'removeGroup':\n                            environment.deleteGroup(data.group._group, data.includeContents);\n                            removeDocumentGroupFromCache(data.group);\n                            break;\n                        }\n                    });\n                    environment.endOperation();\n                    this._reorderOpInProgress = false;\n                    this._currentBulkOperationLabel = null;\n                    break;\n                }\n            }\n        });\n        this._pendingOperations = {};\n    }\n\n    get publishableGroupCount() {\n        return this._library.getGroups().reduce((acc, group) => {\n            const isAppControlled = !!group.options;\n            const isEmpty = !group.children.length && this._library.elements.every(element => element.getGroups()[0] !== group);\n            return (!isAppControlled || !isEmpty || group.parent) ? acc + 1 : acc;\n        }, 0);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { Atom, action, computed } from 'mobx';\nimport { wrapDocumentAssetsContainer, wrapDocumentGroup, wrapDocumentRepresentation, cleanDocumentRepresentationsCache } from 'app/js/models/modelCache';\nimport configuration from 'app/js/config/configuration';\nimport DocumentElement from 'app/js/models/documentAssets/DocumentElement';\nimport environment from 'app/js/environment';\nimport { getSymbolId } from 'app/js/utils/elementMetadataUtils';\nimport { getLinkedElementSourceRef, getLinkReferenceType, getStaticCachedLinkedElementSourceRefString, getStaticSourceRefString } from 'app/js/utils/elementReferenceUtils';\nimport appState from 'app/js/appState';\n\n// Wraps an XD document asset to make it observable and map to ElementModel APIs for easy display in panel UI.\n// You can think of a 'DocumentElement' and an 'asset' as interchangeable terms.\n\nexport default class SPRKDocumentElement extends DocumentElement {\n\n    // Asset actually comes from the 'LibraryElement' class in XD, which closely mirrors our own element api.\n    constructor(asset) {\n        // Since XD is providing this LibraryElement, we don't need to manage the asset manually as we normally would for other apps,\n        // so we just need to forward the link reference to manage the link. TODO: pass the link reference.\n        super({}, wrapDocumentAssetsContainer(asset.library));\n        this._element = asset;\n        this._changeAtom = new Atom('documentElementChange',\n            () => this._isObserved = true,\n            () => this._isObserved = false\n        );\n        this._renditionProviders = {};\n    }\n\n    get id() { return this._element.id; }\n\n    get modified() {\n        this._changeAtom.reportObserved();\n        return this._element.modified;\n    }\n\n    get created() {\n        this._changeAtom.reportObserved();\n        return this._element.created;\n    }\n\n    @action.bound _reportChanged() {\n        this._changeAtom.reportChanged();\n\n        // Clean up any deleted representations cached for this element\n        cleanDocumentRepresentationsCache(this._element);\n    }\n\n    @action.bound _onChange(eventType) {\n        // Keep any active rendition providers as up-to-date if active (currently being rendered),\n        // otherwise just mark as needing an update so we know to update next time it's requested!\n        if (eventType === environment.documentLibraryConstants.REPRESENTATION_CHANGED_EVENT) {\n            for (const key in this._renditionProviders) {\n                const provider = this._renditionProviders[key];\n                if (provider.isActive) {\n                    provider.updateRendition();\n                } else {\n                    // Note: Even if the element isn't being observed this runs, otherwise we wouldn't\n                    // know to re-render when it's next displayed.\n                    provider.needsUpdate = true;\n                }\n            }\n        }\n\n        if (this._isObserved) {\n            // We don't directly call this._reportChanged(), because this will cause lots of re-rendering\n            // if we're in the middle of a batch operation - instead we report this to the library, who will handle it.\n            // This allows the library to call reportChanged after the batch operation finishes.\n            this.library._scheduleChangeCallback(this._reportChanged);\n        }\n    }\n\n    get library() {\n        return wrapDocumentAssetsContainer(this._element.library);\n    }\n\n    get name() {\n        this._changeAtom.reportObserved();\n        // Note that '' is the falsey value of the name when the user has not saved a name,\n        // and the default name will be returned in that case.\n        return this._element.name || this._element.defaultName;\n    }\n\n    set name(newName) {\n        environment.renameAsset(this, newName && newName.normalize());\n    }\n\n    // XD assets should only be interpreted as auto named in a case where the asset has neither a user defined name\n    // nor default name.\n    get isAutoNamed() {\n        this._changeAtom.reportObserved();\n        return !this.name;\n    }\n\n    get type() {\n        this._changeAtom.reportObserved();\n        return this._element.type; // The type may change (e.g. color -> gradient)\n    }\n\n    get dependencies() {\n        // TODO: figure out dependencies.\n        this._changeAtom.reportObserved();\n        return [];\n    }\n\n    getGroups() {\n        this._changeAtom.reportObserved();\n        return this._element.getGroups().map(g => wrapDocumentGroup(g));\n    }\n\n    // Get an asset's order in a group\n    getOrderInGroup(group) {\n        this._changeAtom.reportObserved();\n        return this.library._getOrderInGroup(this, group);\n    }\n\n    // Set an asset's order in a group\n    setOrderInGroup(group, order) {\n        this.library._setElementOrder(this, group, order);\n    }\n\n    /* New Asset interface */\n\n    // Cannot rename linked elements or audio assets.\n    // Note: Maybe we don't need to expose this and can just control it ourselves through logic elsewhere.\n    get disableRename() {\n        this._changeAtom.reportObserved();\n        return !this._element.canRename;\n    }\n\n    get canRelinkToDocument() {\n        this._changeAtom.reportObserved();\n        if (!this.isMissingLegacyDocumentLink) { return false; }\n        // Can only relink an asset linked to a missing document if document links haven't been deprecated.\n        return this.hasPermissionToRelink && !environment.isLegacyDocumentLinkDeprecated();\n    }\n\n    // Return whether a document asset has the necessary metadata to _attempt_ to relink to a library element.\n    // Note that this might return true even if the asset has no matches in any of the user's libraries.\n    @computed get canRelinkToLibrary() {\n        this._changeAtom.reportObserved();\n        const isMissingLink = this.isMissingElement || this.isMissingLibrary;\n        if (!isMissingLink) { return false; }\n        // An asset with a missing link _may_ be re-linkable if a different element exists in a published library\n        // that points to the same source as the asset's old link's source. We can perform that lookup for all assets\n        // using the current object-based linking schema to link to library elements; we can also perform that lookup for\n        // component assets using either the old string-based linking schema to link to library elements or the deprecated\n        // XD-managed mechanism to link to a cloud document - the reason we can perform the lookup for components and not other\n        // asset types is that component representations include a piece of metadata pointing to their original source asset (symbolId).\n        return !!this.cachedLinkedElementSourceRefString || !!getSymbolId(this);\n    }\n\n    get hasPermissionToRelink() {\n        // if the link is cloud document, only users who can save doc to cloud can relink\n        if (this.isLegacyCloudDocumentLink) {\n            return environment.canSaveDocToCloud;\n        }\n        return this.isLegacyDocumentLink;\n    }\n\n    /* Links */\n\n    // Could actually be renamed to sourceRef to mirror ElementModel, but the distinct name is more searchable.\n    get linkReference() {\n        this._changeAtom.reportObserved();\n        return this._element.linkedElementRefObj || this._element.linkedElementRef;\n    }\n\n    get isLinked() {\n        return !!this.linkReference;\n    }\n\n    get isLegacyCCLibrariesLink() { // CC Libraries references migrated to new JSON object format\n        return this.isLinked && getLinkReferenceType(this.linkReference) === configuration.XD_ASSET_LINK_REFERENCE_TYPES.LEGACY_CCLIBRARIES_ELEMENT;\n    }\n\n    // legacy link to either cloud or local document\n    get isLegacyDocumentLink() {\n        if (!this.isLinked) { return false; }\n        const referenceType = getLinkReferenceType(this.linkReference);\n        return referenceType === configuration.XD_ASSET_LINK_REFERENCE_TYPES.LEGACY_DOCUMENT_ASSET || referenceType === configuration.XD_ASSET_LINK_REFERENCE_TYPES.LEGACY_CLOUD_DOCUMENT_ASSET;\n    }\n\n    // legacy link to only cloud document\n    get isLegacyCloudDocumentLink() {\n        return this.isLinked && getLinkReferenceType(this.linkReference) === configuration.XD_ASSET_LINK_REFERENCE_TYPES.LEGACY_CLOUD_DOCUMENT_ASSET;\n    }\n\n    // check if this is a document link and whether document links are deprecated in this environment\n    get isDeprecatedLegacyDocumentLink() {\n        return this.isLegacyDocumentLink && environment.isLegacyDocumentLinkDeprecated();\n    }\n\n    // The name of the legacy document link. For cc libs link, use cachedLinkedLibraryName instead.\n    get linkedDocumentName() {\n        this._changeAtom.reportObserved();\n        return this._element.linkedElementFileName;\n    }\n\n    /**\n     * Used in tooltips for users that don't have access to the linked library.\n     */\n\n    get cachedLinkedLibraryName() {\n        this._changeAtom.reportObserved();\n        if (!this.isLegacyCloudDocumentLink) {\n            // Backwards compatibility for when cc libs link isn't migrated.\n            return this.linkReference?.['repo:name'] ?? this._element.linkedElementFileName;\n        }\n    }\n\n    get cachedLinkedElementInstanceId() {\n        return this.linkReference?.['stRef:fromPartInstanceID'];\n    }\n\n    get cachedLinkedElementName() {\n        return this.linkReference?.['stRef:fromPartName'];\n    }\n\n    get cachedLinkedLibraryAssetId() {\n        return this.linkReference?.['repo:assetId'];\n    }\n\n    get cachedLinkedLibraryId() {\n        return this.linkReference?.['stRef:documentID'];\n    }\n\n    get cachedLinkedElementSourceRef() {\n        this._changeAtom.reportObserved();\n        return getLinkedElementSourceRef(this);\n    }\n\n    @computed get cachedLinkedElementSourceRefString() {\n        const reference = this.cachedLinkedElementSourceRef;\n        if (!reference) { return; }\n        return JSON.stringify(reference, Object.keys(reference).sort());\n    }\n\n    get linkState() {\n        this._changeAtom.reportObserved();\n        if (this.isLegacyDocumentLink) { return this._documentLinkState; }\n        return this._elementLinkState;\n    }\n\n    get linkType() {\n        // XD linked document assets are always to library elements\n        return this.isLinked ? configuration.LIBRARY_TYPE : undefined;\n    }\n\n    get _documentLinkState() {\n        this._changeAtom.reportObserved();\n        if (!this.isLinked || !this.isLegacyDocumentLink) { return; }\n        if (this._element.isLinkMissingFile) { return configuration.ASSET_LINK_STATES.FILE_MISSING; } // overlaps with broken link, but must have separate tooltip, tbd\n        if (this._element.isLinkBroken) { return configuration.ASSET_LINK_STATES.BROKEN; } // either missing file or asset, but since we already covered that it's not the file, it's the asset.\n        if (this._element.doesLinkNeedUpdate) { return configuration.ASSET_LINK_STATES.PENDING_UPDATE; }\n        return configuration.ASSET_LINK_STATES.NORMAL;\n    }\n\n    // Observes the linked element and library\n    get _elementLinkState() {\n        this._changeAtom.reportObserved();\n        if (!this.isLinked || this.isLegacyDocumentLink) { return; }\n\n        if (!appState.libraryManager.loaded || this._isLinkStatusLoading) {\n            return configuration.ASSET_LINK_STATES.SYNCING;\n        }\n\n        if (!this.linkedLibrary) {\n\n            if (this.cachedLinkedLibraryAssetId) {\n                if (appState.libraryManager.invitationsData.has(this.cachedLinkedLibraryAssetId)) {\n                    return configuration.ASSET_LINK_STATES.PENDING_INVITE;\n                }\n\n                if (appState.libraryManager.teamLibrariesData.get(this.cachedLinkedLibraryAssetId)) {\n                    return configuration.ASSET_LINK_STATES.NEED_TO_FOLLOW;\n                }\n\n                // Unfollowed public libraries treated as a missing library currently, until durable links are supported to make performant following possible.\n            }\n\n            return configuration.ASSET_LINK_STATES.MISSING_LIBRARY;\n        }\n\n        if (!this.linkedElement) {\n            if (this.newLinkedElementRef) {\n                // This asset is linked to a missing element. Before we mark it as just a \"broken link\", let's consider the case\n                // 1) that the element we're looking for doesn't exist simply because it got replaced with a newer one; this can happen if\n                // the user changes the type of a color asset from solid to gradient: the linked 'color' library element would have been destroyed\n                // and a new 'gradient' element created. That doesn't break the source document assets because when the published library is updated,\n                // the local asset gets relinked to the new element. But what about other documents that were consuming the solid color library element?\n                // Their local assets are still linked to the old, now deleted element so they will show as broken links even though from the user's (and XD's) perspective the underlying asset is the same!\n                // We can work around this by looking for an element in the library that points to the same source asset as the element that got deleted, that will be our new replacement element;\n                // once we have a replacement element, we can offer the user the option to relink the local asset to the new element with a \"pending update\".\n                // 2) Another case: the source asset was published to an element, then the asset was deleted, and the element\n                // is deleted upon republish. The user then hits 'undo' and gets the asset back, and publishes to a new element.\n                // The new element has the same source asset, so we know we can relink to it.\n                return configuration.ASSET_LINK_STATES.PENDING_UPDATE;\n            }\n\n            // If we didn't find a replacement element then we treat it as a broken link.\n            return configuration.ASSET_LINK_STATES.MISSING_ELEMENT;\n        }\n\n        // Diff check for pending updates won't work on legacy library links since the old references did not contain instanceIds.\n        // Set to normal state briefly, before the link migrates at load time.\n        let contentChanged, nameChanged;\n        if (this.isLegacyCCLibrariesLink) {\n            contentChanged = this.linkedElement.modified !== this._element.linkedElementLastModified;\n            nameChanged = this.linkedElement.name !== this._element.name;\n        } else {\n            // An asset has a pending update if the contents or the name have been modified.\n            contentChanged = this.linkedElement.instanceId !== this.cachedLinkedElementInstanceId;\n            nameChanged = this.linkedElement.name !== this.cachedLinkedElementName;\n        }\n\n        if (contentChanged || nameChanged) {\n            // Don't start comparing and offering updates until the library is done syncing and the updates are actionable.\n            return this.linkedLibrary.syncState === 'downloading'\n                ? configuration.ASSET_LINK_STATES.SYNCING\n                : configuration.ASSET_LINK_STATES.PENDING_UPDATE;\n        }\n\n        return configuration.ASSET_LINK_STATES.NORMAL;\n    }\n\n    get isNormalLinkState() {\n        return this.linkState === configuration.ASSET_LINK_STATES.NORMAL;\n    }\n\n    get isPendingUpdate() {\n        return this.linkState === configuration.ASSET_LINK_STATES.PENDING_UPDATE;\n    }\n\n    get isSyncing() {\n        return this.linkState === configuration.ASSET_LINK_STATES.SYNCING;\n    }\n\n    // We use the terminology 'missing' because this also applies to scenarios where the library just needs to be followed,\n    // or where a different user linked this from their library which you don't have access to, or a library hasn't yet synced down.\n    // It's not irrevocably broken. But terminology can be revisited.\n    get isMissingLink() {\n        if (this.isLegacyDocumentLink) {\n            return this.isBrokenLegacyDocumentLink || this.isMissingLegacyDocumentLink;\n        }\n        return this.isMissingElement || this.isMissingLibraryLink;\n    }\n\n    get isMissingLibraryLink() {\n        return this.isMissingLibrary || this.isPendingFollow || this.isPendingInvite;\n    }\n\n    get isMissingLibrary() {\n        return this.linkState === configuration.ASSET_LINK_STATES.MISSING_LIBRARY;\n    }\n\n    get isMissingElement() {\n        return this.linkState === configuration.ASSET_LINK_STATES.MISSING_ELEMENT;\n    }\n\n    get isPendingFollow() {\n        return this.linkState === configuration.ASSET_LINK_STATES.NEED_TO_FOLLOW;\n    }\n\n    get isPendingInvite() {\n        return this.linkState === configuration.ASSET_LINK_STATES.PENDING_INVITE;\n    }\n\n    get isMissingLegacyDocumentLink() {\n        return this.linkState === configuration.ASSET_LINK_STATES.FILE_MISSING;\n    }\n\n    get isBrokenLegacyDocumentLink() {\n        return this.linkState === configuration.ASSET_LINK_STATES.BROKEN;\n    }\n\n    get _isLinkStatusLoading() {\n        // The JS API returns `undefined` when the status of a reference is unknown and `null` only when known to be missing.\n        return [ this.linkedElement, this.linkedLibrary ].includes(undefined);\n    }\n\n    // In the case of a missing element, you can still access the linked library\n    @computed get linkedLibrary() {\n        if (this.isLinked && !this.isLegacyDocumentLink) {\n            return appState.libraryManager.resolveCachedElementReferenceToLibrary(this.linkReference);\n        }\n    }\n\n    // This is the up to date version of the source element, which may be more up to date\n    // than the container asset (i.e. there is a pending gated update).\n    // Note: May not be resolvable if library is not followed or there is a missing link.\n    @computed get linkedElement() {\n        if (this.isLinked && !this.isLegacyDocumentLink) {\n            return appState.libraryManager.resolveCachedElementReference(this.linkReference);\n        }\n    }\n\n    // We are keeping linkedElement separate, to avoid assumptions that the linkedAsset is a library element.\n    // Note that Assets will have a Date object for the modified property.\n    // Assets can be documents. e.g. in Fred, a document asset (DocumentElement) can have a source/link to a Document instead of a Library Element\n    // and that is a linkedAsset instead of a linkedElement.\n    @computed get linkedAsset() {\n        if (!this.linkedElement) { return; }\n        // This should really be an AdobeAsset or AdobeAssetFragment instance, but we're not using SAM.js yet outside of CC Web\n        return {\n            name: this.linkedElement.name,\n            modified: new Date(this.linkedElement.modified)\n        };\n    }\n\n    // If the linkedElement is missing, and that element is from a regular library, the link is broken.\n    // If the element is from a published library, then it's possible that the original source asset was published to a new element.\n    // e.g. If the asset type was changed from gradient to color, or\n    // e.g. if the asset that was previously published is deleted, then recreated when the user hits undo, and republished each time.\n    // This finds whether there is a new element with a matching sourceRef in this library that can replace the old one,\n    // and returns the replacement element's reference.\n    // When there is a new matching element we will treat the link state as a pending update.\n    // Side note: When there is a matching element in a *different* library, that's treated as a broken link,\n    // and clicking the badge shows the RelinkDocumentAssetDialog. The user can choose an element from\n    // a different library to relink to, if that element had the same sourceRef as the last.\n    // In that case, newLinkedElementRef will be overwritten and the asset immediately updated,\n    // so there's no pending update interim state.\n    @computed get newLinkedElementRef() {\n        this._changeAtom.reportObserved();\n        // If the asset has been manually relinked, return that new ref.\n        if (this._newLinkedElementRef) { return this._newLinkedElementRef; }\n\n        if (this.linkedLibrary && !this.linkedElement && this.cachedLinkedElementSourceRefString) {\n            // Find another element in the same library that was published from the same source asset\n            // (Use string format for comparison rather than object reference.)\n            const [ newElement ] = this.linkedLibrary.getFilteredElements(element => getStaticSourceRefString(element) === getStaticCachedLinkedElementSourceRefString(this));\n            return newElement && newElement.getReference();\n        }\n    }\n\n    // Manually prepare this asset to be relinked to a new library element.\n    set newLinkedElementRef(newElementRef) {\n        this._changeAtom.reportChanged();\n        this._newLinkedElementRef = newElementRef;\n    }\n\n    // When a legacy document link is broken, the user can choose a different document to relink to.\n    relinkToDocument() {\n        environment.relinkAssetsToDocument(this);\n    }\n\n    // Get a rendition provider for the asset - this only works if the asset is a component\n    // We cache the rendition provider so we can reuse it rather than having to re-render while scrolling\n    getRenditionProvider(width, height) {\n        const key = `${width}-${height}`;\n        let provider = this._renditionProviders[key];\n\n        if (!provider) {\n            provider = environment.renditionService.createSymbolRenditionProvider(this.id, width, height, environment.colorProfile, new Uint8Array(environment.screenColorProfile));\n            const cancel = provider.cancel.bind(provider);\n            provider.cancel = () => {\n                // Cancel gets called when the view is disposed - hook into it so we know we don't need\n                // to keep the rendition provider up-to-date when not visible.\n                provider.isActive = false;\n                cancel();\n            };\n            this._renditionProviders[key] = provider;\n        }\n        if (provider.needsUpdate || provider.isCanceled) {\n            // Always ensure an rendition provider we return is up-to-date\n            provider.updateRendition();\n            provider.needsUpdate = false;\n        }\n        provider.isActive = true;\n        return provider;\n    }\n\n    /* Representations */\n\n    // Unlike CCLibs representations, XD's representations are mutable and observable.\n    // Representations will include the primary representation, and occasional others that are generated as needed (e.g. file > export).\n    // There are no 'rendition' representations as previews are generated live.\n    get representations() {\n        this._changeAtom.reportObserved();\n        return this._element.representations.map(representation => wrapDocumentRepresentation(representation));\n    }\n\n    // Note: We only need the primary representation so that the asset can be converted into an element during publish.\n    getPrimaryRepresentation() {\n        this._changeAtom.reportObserved();\n        return wrapDocumentRepresentation(this._element.getPrimaryRepresentation());\n    }\n\n    // Matching the Element API to avoid breaking things:\n\n    // Indicates whether content has changed. Representation ids don't change with every asset change so we use modified date.\n    // But, keep in mind that XD may return undefined upon first load. https://jira.corp.adobe.com/browse/XD-120725\n    get instanceId() {\n        return this.modified;\n    }\n\n    // theoretically immutable like an id, so no need to make observable.\n    getReference() {\n        const linkData = {\n            'dc:format': environment.documentType,\n            'repo:name': this.library.name,\n            'repo:assetId': environment.cloudAssetId, // asset id of the document, available once it is saved and synced to the cloud\n            'stRef:documentID': this.library.id, // the stable documentId (except upon save, where it changes)\n            'stRef:fromPart': `id=${this.id}`,\n            'stRef:fromPartName': this.name,\n            'stRef:manager': 'Adobe Cloud'\n        };\n\n        // Sometimes XD sends `undefined` for an asset's modified date.\n        // https://jira.corp.adobe.com/browse/XD-120725\n        if (this.instanceId) {\n            linkData['stRef:fromPartInstanceID'] = this.instanceId;\n        }\n\n        if (this.linkedElement) {\n            linkData['stRef:fromPartDerivedFrom'] = this.linkedElement.getReference(); // AdobeLibraryElement.getReference() will always return the new link schema\n        }\n\n        return linkData;\n    }\n\n    // mostly useful for equality checks since an asset's reference will be a different object instance from a published element's sourceRef\n    getReferenceString() {\n        const reference = this.getReference();\n        return JSON.stringify(reference, Object.keys(reference).sort());\n    }\n\n    // Temporarily exists for use in data-test-ids.\n    getLegacyReference() {\n        return `${environment.cloudAssetId}#id=${this.id}`;\n    }\n\n    getCachedThumbnailPath() {}\n\n    getThumbnailPath() {\n        if (this._element.getThumbnailPath) {\n            this._changeAtom.reportObserved();\n            return this._element.getThumbnailPath();\n        }\n        return Promise.reject();\n    }\n\n    getThumbnailContent() { return Promise.reject(); }\n\n    getActions(id) {\n        if (!this.isLinked) { return []; }\n\n        // Return the source element's edit-in-source actions.\n        if (id === 'editInSource' && this.isLegacyDocumentLink) {\n            return [ {\n                id: 'editInSource',\n                installedVersions: [ '0.0' ],\n                isCompatibleVersionInstalled: true,\n                invoke: () => { environment.editInSource(this); }\n            } ];\n        } else if (this.linkedElement) {\n            return this.linkedElement.getActions(id);\n        }\n    }\n}\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2020 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\nimport { Atom } from 'mobx';\nimport { wrapDocumentAssetsContainer } from 'app/js/models/modelCache';\nimport BaseGroupModel from 'app/js/models/BaseGroupModel';\nimport { wrapDocumentGroup } from 'app/js/models/modelCache';\nimport environment from 'app/js/environment';\n\n/**\n * Observable model wrapping a group provided by XD (which is confusingly called CCLibGroup)\n */\n\nexport default class DocumentGroup extends BaseGroupModel {\n\n    constructor(group) {\n        super(group);\n        // The cc libs group change atom is triggered when the name or order changes.\n        // The document group change atom is triggered when the active state of the add\n        // button changes due to a change in selection.\n        this._changeAtom = new Atom('groupChange',\n            () => !this._group.isDeletedLocally && this._group.addChangeListener(this._onChange),\n            () => this._group.removeChangeListener(this._onChange)\n        );\n    }\n\n    get library() {\n        return wrapDocumentAssetsContainer(this._group.library);\n    }\n\n    // App-Controlled options. Defaults are for regular, user-controlled groups in cclibs.\n    // Note: Currently the CC Libs JS API does not support app-controlled options yet, as\n    // these options are only used in the Asset Panel and not when viewing the published document library.\n    // Note: Any Boolean options should default to FALSE.\n    // true for all DocumentGroups, regardless of if they're created by XD, or user created\n    get isAppControlled() {\n        this._changeAtom.reportObserved();\n        return !!this._group.options;\n    }\n\n    // Whether to disable this group as a drag target when the drag\n    // does not start within it. Defaults to false.\n    get disableDraggingFromOutside() {\n        this._changeAtom.reportObserved();\n        return !!this._group.options && !!this._group.options.disableDraggingFromOutside;\n    }\n\n    /**\n     * Whether to prevent the user from editing this group (renaming it or reordering/adding assets). Defaults to false.\n     * True for root DocumentGroups created by XD such as Colors, Character Styles, etc.\n     * False for user-created DocumentGroups, which are allowed to be reordered, renamed, and deleted\n     * within the constraints of the root DocumentGroup.\n     */\n    get disableEditing() {\n        this._changeAtom.reportObserved();\n        return !!this._group.options && !!this._group.options.disableEditing;\n    }\n\n    // Whether to hide the default text displayed inside an empty group. Defaults to false.\n    get hideDefaultTextInEmptyGroup() {\n        this._changeAtom.reportObserved();\n        return !!this._group.options && !!this._group.options.hideDefaultTextInEmptyGroup;\n    }\n\n    // Whether to include this group in the path of its' children, seen in path view mode\n    // For example if the nesting structure is Colors / Blues / Dark, the path view of the final child would be only Blues / Dark\n    get excludeFromChildPaths() {\n        this._changeAtom.reportObserved();\n        return !!this._group.options && this._group.options.excludeFromChildPaths || true;\n    }\n\n    // Whether to hide the group (including the name of the group) when it's empty. Defaults to false.\n    get hideWhenEmpty() {\n        this._changeAtom.reportObserved();\n        return !!this._group.options && !!this._group.options.hideWhenEmpty;\n    }\n\n    // If there is a nameLocalizationKey, then we have stored the translations in the panel.\n    // Technically a document group doesn't need a name property in that case, but we've\n    // decided to use the name for displaying the documentGroup and only use the nameLocalizationKey\n    // when publishing.\n    // What's less than ideal about this system though is that it requires us to already have the\n    // nameLocalizationKey string hardcoded into the panel so that it will be localized.\n    // So this has to be an agreed upon string.\n    // This system does allow us to store each localized name on the published group though, so that\n    // the published library can be viewed in any language.\n    // Currently available localization keys include: ASSETS_PANEL_COLOR_TITLE, ASSETS_PANEL_IMAGE_TITLE,\n    // ASSETS_PANEL_CHARACTER_STYLE_TITLE, ASSETS_PANEL_COMPONENT_TITLE, ASSETS_PANEL_AUDIO_TITLE\n    get nameLocalizationKey() {\n        this._changeAtom.reportObserved();\n        return !!this._group.options && this._group.options.nameLocalizationKey;\n    }\n\n    /* Add Assets \"+\" Button */\n\n    // Whether to display the \"+\" button next to the group name that will add any\n    // new, de-duplicated elements/assets from the selection. Defaults to false.\n    // Note: This currently also means the ellipsis menu will disappear in favor of the \"+\" button.\n    get displayAddButton() {\n        this._changeAtom.reportObserved();\n        return !!this._group.options && !!this._group.options.displayAddButton;\n    }\n\n    get isAddButtonActive() {\n        this._changeAtom.reportObserved();\n        return !!this._group.options && !!this._group.options.isAddButtonActive;\n    }\n\n    get addButtonTooltip() {\n        this._changeAtom.reportObserved();\n        return this._group.options ? this._group.options.addButtonTooltip : undefined;\n    }\n\n    addButtonAction() {\n        if (this._group.options && this._group.options.addButtonAction) {\n            this._group.options.addButtonAction();\n        }\n    }\n\n    // To match existing APIs:\n\n    addChangeListener(cb) {\n        this._group.addChangeListener(cb);\n    }\n\n    removeChangeListener(cb) {\n        this._group.removeChangeListener(cb);\n    }\n\n    getReference() {\n        return {\n            'dc:format': environment.documentType,\n            'repo:name': this.library.name,\n            'repo:assetId': environment.cloudAssetId, // asset id of the document, available once it is saved and synced to the cloud\n            'stRef:documentID': this.library.id, // the stable documentId (except upon save, where it changes)\n            'stRef:fromPart': `id=${this.id}`,\n            'stRef:fromPartName': this.name,\n            'stRef:manager': 'Adobe Cloud'\n            // we dont store 'stRef:fromPartInstanceID' since we dont check the modified time of a group and it doesn't have content changes, only metadata.\n        };\n    }\n\n    get name() {\n        this._changeAtom.reportObserved();\n        return this._group.name;\n    }\n\n    set name(newName) {\n        environment.renameGroup(this._group, newName);\n    }\n\n    get parent() {\n        this._changeAtom.reportObserved();\n        return wrapDocumentGroup(this._group.parent);\n    }\n\n    set parent(parentGroup) {\n        if (!parentGroup) { return; }\n        this.library._setGroupParent(this._group, parentGroup._group);\n    }\n\n    get children() {\n        this._changeAtom.reportObserved();\n        return this._group.children.map(g => wrapDocumentGroup(g));\n    }\n\n    set order(newOrder) {\n        this.library._setGroupOrder(this._group, newOrder);\n    }\n\n    get order() {\n        this._changeAtom.reportObserved();\n        return String(this._group.order);\n    }\n\n    createChild(name, order) {\n        return wrapDocumentGroup(this.library._createGroupChild(name, order, this._group));\n    }\n\n    /**\n     * Searching for subgroups in this group according to a filter. By doing this inside the model, we optimize so that\n     * we only wrap the _results_ - the raw groups are passed to the filter.\n     *\n     * Note that this is still observable, because any changes to any of the groups also trigger a change event\n     * on the library (so the result of filterChildren will be invalidated).\n     *\n     * @param {Function} predicate Takes a raw group and returns true if it should be included in the search results.\n     * @returns {DocumentGroup[]} array of elements that satisfy the predicate - this is resultsArray if you passed one in.\n     */\n    getFilteredChildren(predicate) {\n        this._changeAtom.reportObserved();\n        const children = this._group.children;\n        if (!children) { return []; }\n\n        const results = [];\n        this._group.children.forEach(group => {\n            if (predicate(group)) { results.push(wrapDocumentGroup(group)); }\n        });\n        return results;\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport { getRGBColor, colorDataToRGBA } from 'app/js/utils/colorUtils';\nimport LinearGradient from './LinearGradient';\nimport RadialGradient from './RadialGradient';\n\n/**\n * Visit all items in a selection, and recursively visit their children. The selection items will not be children of each other.\n * Note that this does not currently handle the scenario where a text edit is in progress, and that scenario should be checked first.\n * @param {Function} cb A callback that should expect a node and return true to exit before recursing the children of that node further.\n * @param {Object} options\n * @param {Object} selection\n */\nexport function visitSelection(cb, options, selection) {\n    selection = selection || environment.getSelection();\n    // Note: We could alternatively use the internal API environment.artwork.selectionModel.selectionIncludingEditableGroupChildren\n    selection.forEach(node => {\n        visitNode(node, cb, options);\n    });\n}\n\n/**\n * Visit an XD node, then recursively visit all its children.\n * When entering a SymbolGroup or RepeatGrid, the edit context will update.\n * Please note that you should visit style ranges within a text node within your callback.\n * @param {Object} node A Scenegraph Node wrapper\n * @param {Function} cb A callback that should expect a node and return true to exit before recursing the children of that node further.\n * @param {Object} options\n */\nexport function visitNode(node, cb, options = {}) {\n    // Change the edit context when entering a symbol or repeatGrid\n    const isInEditContext = (environment.editContextModel.context === environment.getContextForNode(node));\n    if (!isInEditContext && environment.isInsideRepeatGridOrSymbolGroup(node)) {\n        // Note: enterContextForNode only accepts SceneNodes, not 3rd party api wrappers\n        environment.editContextModel.enterContextForNode(node);\n    }\n\n    const handled = cb(node);\n    if (handled) { return; }\n\n    const shouldVisitChildren = node => {\n        return !options.skipChildren && node.children && node.children.length > 0 && (options.visitNonEditable ? true : environment.containerTypeAllowsEditingContents(node));\n    };\n\n    if (shouldVisitChildren(node)) {\n        node.children.forEach(node => {\n            visitNode(node, cb);\n        });\n    }\n}\n\nexport function getColorDataFromColorSceneNode(color) {\n    const data = {\n        mode: 'RGB',\n        type: 'process',\n        value: {\n            r: color.r,\n            g: color.g,\n            b: color.b\n        }\n    };\n\n    if (color.a !== undefined) {\n        data.alpha = color.a / 255; // xd alpha range is 0-255, but we want it in floating point range 0-1. The rest is in 0-255 range.\n    }\n\n    return data;\n}\n\n// Create xd color node from the element or data\nexport function createColorNode(colorData, element) {\n    const RGBA = colorDataToRGBA(colorData || getRGBColor(element));\n    const colorValue = { r: RGBA.red, g: RGBA.green, b: RGBA.blue };\n    if (RGBA.alpha !== undefined) { colorValue.a = Math.round(RGBA.alpha * 255); }\n\n    return new environment.Color(colorValue);\n}\n\nexport function getGradientDataFromGradientSceneNode(fill, bounds) {\n    const gradient = fill instanceof environment.LinearGradient ? new LinearGradient(fill) : new RadialGradient(fill, bounds);\n    return gradient.serializeForLibrary();\n}\n\n/**\n * Get text style data from an XD node or style range.\n * Note that we return top-level data from the Text node. If it has multiple\n * style ranges, then the top level data is equivalent to the last style.\n * @param {*} nodeOrStyleRange XD Text node or Character Style node or style range.\n * @returns {Object} Style Data in a format expected to be stringified, with the exception of the temporary nodeOrStyleRange property.\n */\nexport function getTextStyleDataFromNodeOrStyleRange(nodeOrStyleRange) {\n    const styleData = { nodeOrStyleRange };\n\n    // Note: Stroke has been left out because it is not a documented Text node property and doesn't apply to style ranges.\n\n    if (nodeOrStyleRange.fill) {\n        styleData.color = [ getColorDataFromColorSceneNode(nodeOrStyleRange.fill) ];\n    }\n    // Character Style nodes have fontColor property (other property names match with Text node properties)\n    if (nodeOrStyleRange.fontColor) {\n        styleData.color = [ getColorDataFromColorSceneNode(nodeOrStyleRange.fontColor) ];\n    }\n\n    // Ignore 0 value lineSpacing, because lineSpacing on the node will be 0 until the value is *changed* by the user.\n    // Meanwhile, XD calculates a default lineSpacing value that it displays on screen, but this value is not available on the node.\n    if (nodeOrStyleRange.lineSpacing) {\n        styleData.lineHeight = { value: nodeOrStyleRange.lineSpacing, type: 'pt' };\n    }\n\n    if (nodeOrStyleRange.paragraphSpacing) {\n        styleData.paragraphSpacing = { value: nodeOrStyleRange.paragraphSpacing, type: 'pt' };\n    }\n\n    // charSpacing: Character spacing in increments of 1/1000th of the fontSize, in addition to the font's default character kerning. May be negative.\n    // Looks like though Ai and PS use letterSpacing, they also use adbeTracking, which avoids needing to convert units.\n    if (nodeOrStyleRange.charSpacing !== undefined && nodeOrStyleRange.charSpacing !== null) { // Save 0 values\n        styleData.adbeTracking = nodeOrStyleRange.charSpacing;\n    }\n\n    if (nodeOrStyleRange.fontSize) { // does not go below 1\n        styleData.fontSize = { type: 'pt', value: nodeOrStyleRange.fontSize };\n    }\n\n    if (nodeOrStyleRange.fontFamily) {\n        styleData.fontFamily = nodeOrStyleRange.fontFamily;\n    }\n\n    // IMPORTANT: PostScriptName is necessary to render the font correctly, and to support typekit workflows\n    if (nodeOrStyleRange.postscriptName) {\n        const postScriptName = nodeOrStyleRange.postscriptName;\n        const family = nodeOrStyleRange.fontFamily;\n        const style = nodeOrStyleRange.fontStyle;\n        const name = family && family + (style ? ` ${style}` : '');\n        styleData.adbeFont = { postScriptName, family, style, name };\n    }\n\n    if (nodeOrStyleRange.fontStyle) {\n        // TODO: Consider whether to store certain values in styleData.adbeFont.style or styleData.fontWeight instead of styleData.fontStyle. For example:\n        // Character style values for fontStyle may include: 'regular', 'italic', 'oblique', etc.\n        // Character style values for fontWeight may include: 'bold', 'lighter', etc.\n        // Character style values for adbeFont.style may include capitalized values: 'Bold Italic', 'Bold', 'Regular'\n        if (nodeOrStyleRange.fontStyle === 'Bold') {\n            styleData.fontWeight = 'bold';\n        }\n        styleData.fontStyle = nodeOrStyleRange.fontStyle;\n    }\n\n    if (nodeOrStyleRange.textScript === 'superscript') {\n        styleData.fontFeatureSettings = styleData.fontFeatureSettings || [];\n        styleData.fontFeatureSettings.push('sups');\n    }\n\n    if (nodeOrStyleRange.textScript === 'subscript') {\n        styleData.fontFeatureSettings = styleData.fontFeatureSettings || [];\n        styleData.fontFeatureSettings.push('subs');\n    }\n\n    // Valid values for textTransform in XD: \"none\", \"uppercase\", \"lowercase\", or \"titlecase\".\n    if (nodeOrStyleRange.textTransform === 'uppercase') {\n        styleData.fontFeatureSettingsObject = {\n            adbeCapitalization: 'FontCapsOption.ALLCAPS'\n        };\n    } else if (nodeOrStyleRange.textTransform === 'titlecase') {\n        // Note that textTransform was originally used to store the value 'capitalize'\n        // but it is not treated as titlecase in other apps and is either treated as none or uppercase.\n        // Therefore for XD I have added a new titlecase value, which only works in XD. (Other apps don't have titlecase.)\n        // TODO: Look into WHY 'capitalize' value exists and how it SHOULD be treated. Other apps should consolidate.\n        styleData.textTransform = 'titlecase';\n    } else if (nodeOrStyleRange.textTransform === 'lowercase') {\n        // As far as I can tell, lowercase is another case that is unique to XD. Other apps just treat this as 'none'.\n        // So, this is also a new value:\n        styleData.textTransform = 'lowercase';\n    }\n\n    if (nodeOrStyleRange.underline) {\n        styleData.textDecoration = styleData.textDecoration || [];\n        styleData.textDecoration.push('underline');\n    }\n\n    if (nodeOrStyleRange.strikethrough) {\n        styleData.textDecoration = styleData.textDecoration || [];\n        styleData.textDecoration.push('line-through');\n    }\n\n    return styleData;\n}\n\n// Returns true if the node is a component. We currently always return false (meaning that the node will be treated as\n// a regular graphic), until XD can support adding components to regular libraries.\nexport function isComponent(/*node*/) {\n    // return node instanceof this.SymbolGroup;\n    return false;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport debugLog from 'app/js/utils/debugLog';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport { convertFontSizeUnits } from 'app/js/utils/unitUtils';\nimport { flattenGradientStops } from 'app/js/utils/colorUtils';\nimport { createColorNode } from './scenegraphUtils';\nimport toastManager from 'app/js/managers/toastManager';\nimport { translate } from 'app/js/managers/translationManager';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport configuration from 'app/js/config/configuration';\nimport LinearGradient from './LinearGradient';\nimport RadialGradient from './RadialGradient';\nimport { reportApplyMetric, reportApplyFullSizeMetric, createElementExtraMetrics, isVector } from 'app/js/utils/libraryUtils';\nimport * as TextStyleUtils from 'app/js/utils/textstyleUtils';\n\n/**\n * This file contains several utility functions for applying and linking graphic elements in XD.\n * For each graphic type there exists one 'create' and one 'insert' method.\n * Use 'create' methods when you only want to generate the image as an XD node.\n * Use 'insert' methods to generate the image and apply it to the document, dispatching a corresponding analytics event.\n */\n\nconst isAI = representation => representation && representation.type === 'application/illustrator';\nconst isAGC = representation => representation && representation.type === configuration.AGC_REPRESENTATION_TYPE;\n\nfunction showGenericErrorToast() {\n    const message = translate('DL_OFFICE_IMAGE_APPLY_GENERIC_ERROR');\n    toastManager.openToast('message', { message });\n}\n\n/* Image Linking Utils */\n\n// Link the Image of the given scenenode to the contents of the given element.\n// \"Vector Linked Graphics\": the reference to the Library element is stored in the node itself.\n// More info: https://git.corp.adobe.com/WebPA/sparkler-shell/blob/master/docs/special-groups-in-xd.md\nfunction linkVectorImage(node, element) {\n    const result = new environment.Group();\n    result.linkVectorGraphic(\n        element.getReference(),\n        undefined, //TODO: used to pass in deprecated linkedElementLastModified here. Remove once API is updated.\n        undefined, //TODO: used to pass in deprecated bookmark data here. remove once linkVectorGraphic updated\n        node,\n        element.name\n    );\n    return result;\n}\n\n// Link the Image of the given scenenode to the contents of the given element.\n// \"Raster Linked Graphics\": the reference to the Library element is stored in the node's BitmapFill.\n// More info: https://git.corp.adobe.com/WebPA/sparkler-shell/blob/master/docs/special-groups-in-xd.md\nfunction linkBitmapImage(node, element) {\n    node.fill = node.fill.cloneWithOverrides({ linkedElementRef: element.getReference() });\n    return node;\n}\n\n/* Vector Image Utils */\n\nfunction createVectorThumbnail(element, placeLinked) {\n    // First check if thumbnail is cached.\n    const cachedPath = element.getCachedThumbnailPath('vector');\n    const getPath = cachedPath ? Promise.resolve(cachedPath) : element.getThumbnailPath('vector');\n    return getPath.then(path => {\n        return environment.SVGToNode(path).then(imageNode => {\n            imageNode.name = element.name;\n            imageNode = placeLinked ? linkVectorImage(imageNode, element) : imageNode;\n            return imageNode;\n        });\n    });\n}\n\nfunction insertVectorThumbnail(element, placeLinked) {\n    return createVectorThumbnail(element, placeLinked).then(imageNode => {\n        reportApplyMetric(elementConfiguration.findUsableRepresentation(element), 'placeAsset', placeLinked);\n        environment.addToCanvas(imageNode);\n        return imageNode;\n    });\n}\n\nfunction createVectorImage(element, placeLinked) {\n    // Best-effort approach at using the best vector available for this element.\n    const primary = element.getPrimaryRepresentation();\n    // Special handling for AI and AGC representations.\n    if (isAI(primary)) { return createAINode(primary, placeLinked); }\n    if (isAGC(primary)) { return createAGCNode(primary, placeLinked, configuration.IMAGE_ELEMENT_TYPE); }\n    const representation = element.representations.find(rep => FileUtils.isVectorMimeType(rep.type));\n    if (!representation) {\n        return Promise.reject('no vector representation found');\n    }\n    return representation.getContentPath().then(path => {\n        return environment.SVGToNode(path).then(imageNode => {\n            imageNode = placeLinked ? linkVectorImage(imageNode, element) : imageNode;\n            imageNode.name = element.name;\n            return imageNode;\n        });\n    });\n}\n\nexport function insertVectorImage(element, placeLinked, useAILoader = true) {\n    // Best-effort approach at using the best vector available for this element.\n    const primary = element.getPrimaryRepresentation();\n    // Special handling for AI and AGC representations.\n    if (isAI(primary)) { return insertAIRepresentation(primary, placeLinked, useAILoader); }\n    if (isAGC(primary)) { return insertAGCRepresentation(primary, placeLinked, configuration.IMAGE_ELEMENT_TYPE); }\n    return createVectorImage(element, placeLinked).then(imageNode => {\n        const representation = element.representations.find(rep => FileUtils.isVectorMimeType(rep.type));\n        reportApplyMetric(representation, 'placeAsset', placeLinked);\n        environment.addToCanvas(imageNode);\n        return imageNode;\n    }, () => {\n        // We rely on XD for SVG conversion. If that fails, we should at least place the full-size thumbnail rendition.\n        return insertFullSizeThumbnail(element, placeLinked);\n    });\n}\n\nexport function insertVectorComponent(element, placeLinked, useAILoader = true) {\n    const primary = element.getPrimaryRepresentation();\n\n    if (isAGC(primary)) {\n        return insertAGCRepresentation(primary, placeLinked, configuration.COMPONENT_ELEMENT_TYPE);\n    }\n    return insertVectorImage(element, placeLinked, useAILoader);\n}\n\nfunction createAINode(representation, placeLinked) {\n    return representation.getContentPath().then(path => {\n        return environment.AIToNode(path).then(imageNode => {\n            imageNode = placeLinked ? linkVectorImage(imageNode, representation.element) : imageNode;\n            imageNode.name = representation.element.name;\n            return imageNode;\n        });\n    });\n}\n\nfunction insertAIRepresentation(representation, placeLinked, useAILoader = true) {\n    // Vector Thumbnail lookup and AI conversion can take a while so we add a loading placeholder using the bitmap thumbnail.\n    if (useAILoader) {\n        // Ensure loading container has dimensions of final content.\n        const previewSize = environment.getSizeforFile(representation.getCachedContentPath() || '', environment.BitmapFill.create());\n        return insertLoadingImage(representation.element, placeLinked, createAINode(representation, placeLinked), previewSize).then(imageNode => {\n            reportApplyMetric(representation, 'placeAsset', placeLinked);\n            return imageNode;\n        });\n    }\n    return createAINode(representation, placeLinked).then(imageNode => {\n        reportApplyMetric(representation, 'placeAsset', placeLinked);\n        environment.addToCanvas(imageNode);\n        return imageNode;\n    }).catch(() => {\n        return insertFullSizeThumbnail(representation.element, placeLinked);\n    });\n}\n\nfunction createAGCNode(representation, placeLinked, elementType) {\n    if (!representation) { return Promise.reject('Element has no AGC representation'); }\n\n    return representation.getContent().then(blob => blob.text()).then(utf8Content => {\n        return environment.parseAGCForImport(utf8Content, elementType === configuration.COMPONENT_ELEMENT_TYPE).then(result => {\n            const isBitmap = result.node.fill && result.node.fill instanceof environment.BitmapFill;\n            const linkImage = isBitmap ? linkBitmapImage : linkVectorImage;\n            const node = placeLinked ? linkImage(result.node, representation.element) : result.node;\n            node.name = representation.element.name;\n            return { node, metadata: result.metadata };\n        });\n    });\n}\n\n// Convert the AGC representation into an XD node, falling-back to the vector rendition, then full size thumbnail.\nfunction insertAGCRepresentation(representation, placeLinked, elementType) {\n    return createAGCNode(representation, placeLinked, elementType).then(result => {\n        reportApplyMetric(representation, 'placeAsset', placeLinked);\n        environment.addToCanvas(result.node, false, undefined, result.metadata);\n        return result.node;\n    }).catch(err => {\n        debugLog.log(`Failed to create AGC Node from representation: ${err}`);\n        // Fallback to vector, then full size thumbnail.\n        return insertVectorThumbnail(representation.element, placeLinked).catch(() => {\n            return insertFullSizeThumbnail(representation.element, placeLinked);\n        });\n    });\n}\n\n/* Loading Image Utils */\n\n// Create a rectangle filled with the thumbnail of the given element.\n// The image rectangle has a blur set, shows a spinner and is linked to the element.\nfunction createLoadingContainer(element, placeLinked, previewSize) {\n    const container = new environment.Group();\n    const thumbnailPath = element.getCachedThumbnailPath(elementConfiguration.getThumbnailSize(element)) || '';\n    const thumbnail = linkBitmapImage(getFilledRectangle(thumbnailPath, previewSize), element);\n    // User might start dragging the loading container to where they want the final image to be,\n    // So make sure the thumbnail inside keeps its position within the container.\n    thumbnail.locked = true;\n    // To show the loading spinner, it is necessary to both link the node to a library element and mark the content as \"loading\".\n    // Note that if the image is supposed to be placed \"As Copy\", we will unlink it in `insertLoadingImage`'s resolved case.\n    container.linkVectorGraphic(\n        element.getReference(),\n        undefined, //TODO: used to pass in deprecated linkedElementLastModified here. Remove once API is updated.\n        undefined, //TODO: used to pass in deprecated bookmark data here. remove once linkVectorGraphic updated\n        thumbnail,\n        element.name\n    );\n    container.linkedContentReadyState = environment.Group.LINKED_CONTENT_LOADING;\n    // Standalone Scenenodes have a blue border when selected while Scenenodes linked to library elements get a green border.\n    // Since we're linking the node to an element, the border will be green; but we might not want that if `placeLinked` is false.\n    // The `linkedElementWillUnlinkOnLoad` flag is used to tell XD that the node is only linked temporarily and should recieve a blue border.\n    container.linkedElementWillUnlinkOnLoad = !placeLinked;\n    // Add a blur effect to the thumbnail.\n    environment.assignBlurToNode(thumbnail);\n    return container;\n}\n\n// Add a loading thumbnail of the given element and swap it for the loaded content once `loadImage` resolves.\nfunction insertLoadingImage(element, placeLinked, loadImage, previewSize, position) {\n    const loadingContainer = createLoadingContainer(element, placeLinked, previewSize, position);\n    environment.addToCanvas(loadingContainer, true, position);\n    return loadImage.then(imageNode => {\n        // Place the loaded content in the container and break the link created in `createLoadingContainer` if `placeLinked` is false.\n        imageNode.name = element.name;\n        environment.swapNodes(loadingContainer, imageNode);\n        // Swapping removes the selection.\n        environment.setSelection(imageNode);\n        return imageNode;\n    }).catch(() => {\n        // We rely on XD for conversions. If that fails, we should at least place the full-size thumbnail rendition.\n        loadingContainer.remove();\n        return insertFullSizeThumbnail(element, placeLinked);\n    });\n}\n\n/* Bitmap Image Utils */\n\nfunction getFilledRectangle(path, size) {\n    const fill = environment.BitmapFill.create();\n    fill.loadFromURL(path);\n    const { width, height } = size || environment.getSizeforFile(path, fill);\n    const container = new environment.Rectangle();\n    // Set width and height that match the source file.\n    container.width = width || configuration.IMAGE_THUMBNAIL_SIZE;\n    container.height = height || configuration.IMAGE_THUMBNAIL_SIZE;\n    // Fill the container with the image and name it the same as the element.\n    container.fill = fill;\n    return container;\n}\n\nfunction createBitmapImage(path, element, placeLinked) {\n    let imageNode = getFilledRectangle(path);\n    imageNode = placeLinked ? linkBitmapImage(imageNode, element) : imageNode;\n    imageNode.name = element.name;\n    return Promise.resolve(imageNode);\n}\n\nfunction insertFullSizeThumbnail(element, placeLinked) {\n    if (AdobeStockUtils.isStockAsset(element) && !AdobeStockUtils.isLicensed(element)) {\n        showGenericErrorToast();\n        return Promise.reject('Cannot place Full Size Thumbnail for Unlicensed Stock Images');\n    }\n    return element.getThumbnailPath().then(path => {\n        return createBitmapImage(path, element, placeLinked).then(imageNode => {\n            reportApplyFullSizeMetric(element, 'placeAsset', placeLinked);\n            environment.addToCanvas(imageNode);\n            return imageNode;\n        });\n    }).catch(() => {\n        // If even the full size thumbnail failed, no other fallback left, throw error toast.\n        showGenericErrorToast();\n    });\n}\n\nexport function insertBitmapImage(element, placeLinked) {\n    // Use the best representation available, falling-back to the full-size thumbnail.\n    const representation = elementConfiguration.findUsableRepresentation(element);\n    if (!representation) { return insertFullSizeThumbnail(element, placeLinked); }\n    return representation.getContentPath().then(path => {\n        return createBitmapImage(path, element, placeLinked).then(imageNode => {\n            reportApplyMetric(representation, 'placeAsset', placeLinked);\n            environment.addToCanvas(imageNode);\n            return imageNode;\n        });\n    });\n}\n\n/* Drag-Drop Stock Image Utils */\n/**\n * When users start dragging a Stock Image, we create an Image Element and begin downloading the content.\n * Normally while the download is in progress, we leverage the HTML5 canvas and the filesystem to generate a thumbnail synchronously.\n * (Look in js/managers/StockDragManager._createElement for details on the above)\n * However, in UXP we don't have access to either the filesystem or the canvas so the methods below are a workaround place the element preview asynchronously.\n */\n\nfunction createBitmapStockPreview(element, placeLinked) {\n    // For previews, get the watermarked representation.\n    const representation = element.getPrimaryRepresentation();\n    if (!representation) {\n        return Promise.reject('cannot create stock preview - no primary representation');\n    }\n    return representation.getContentPath().then(path => {\n        return createBitmapImage(path, element, placeLinked);\n    });\n}\n\nexport function insertStockPreview(element, promise, previewSize, position) {\n    // Always place Stock images as linked so that if a user licenses the asset, the content updates.\n    const placeLinked = true;\n    const createImage = isVector(element) ? createVectorImage : createBitmapStockPreview;\n    // Note: ideally, we wouldn't need to use this `insertLoadingImage` workflow.\n    // Normally we might place an image on the XD canvas with the content of a cached thumbnail and link it to the element,\n    // when the element was finished downloading, the Library Process would emit a change event and XD would automatically swap the content.\n    // However, there seems to be a bug on XD where they won't register the change of a downloaded element until the user closes/re-opens the document.\n    // https://jira.corp.adobe.com/browse/XD-88589\n    // Once that is addressed, we should be able to get rid of this manual swapping.\n    const loadImage = promise.then(fullElement => {\n        return createImage(fullElement, placeLinked).then(imageNode => {\n            reportApplyMetric(element.getPrimaryRepresentation(), 'placeAsset', placeLinked);\n            return imageNode;\n        });\n    });\n    return insertLoadingImage(element, placeLinked, loadImage, previewSize, position);\n}\n/**\n * Creates or updates an existing library element of the given type from the given XD data\n * and add it to the current library.\n * Primary representation will be an AGC document.\n * SVG and PNG renditions will be included.\n * @param {MimeType} elementType\n * @param {Object} data - scenenode data\n * @param {LibraryModel} library\n * @param {string} opType\n * @param {ElementModel} [existingElement]\n * @param {boolean} useCanonicalComponent when true, we create the library element based on\n *     the canonical instance of the given component (node). The canonical instance is\n *     the instance of a component that all other instances are derived from.\n * @returns {Object} { element: ElementModel just created, dependentAssetIds: array of dependency ids\n *     so that they can be set later on the parent element after all dependencies are published }\n */\nexport function createOrUpdateElementFromAGC(elementType, data, library, opType, existingElement, useCanonicalComponent) {\n    // start with result element and paths in outer closure scope\n    let element,\n        dependentAssetIds,\n        imageData,\n        primaryContentPath,\n        svgRenditionContentPath,\n        PNGRenditionPath;\n\n    const imagePathsToDelete = [],\n        isNxdFormat = environment.isXDFeatureFlagEnabled('newFileFormat'),\n        fileExtension = isNxdFormat ? '.nxd' : '.agc';\n    const createPrimaryContent = useCanonicalComponent\n        ? environment.serializeCanonicalComponent(data.symbolId, `${FileUtils.generateUuid()}` + fileExtension)\n        : environment.nodeGuidsToAGC(data.guids, `${FileUtils.generateUuid()}` + fileExtension);\n    const createSVGRendition = useCanonicalComponent\n        ? environment.canonicalComponentToSVG(data.symbolId, `${FileUtils.generateUuid()}.svg`).catch(() => undefined) // ignore errors creating SVG\n        : environment.nodeGuidsToSVG(data.guids, `${FileUtils.generateUuid()}.svg`);\n    const createPNGRendition = useCanonicalComponent\n        ? environment.canonicalComponentToPNG(data.symbolId, `${FileUtils.generateUuid()}.png`)\n        : environment.nodeGuidsToPNG(data.guids, `${FileUtils.generateUuid()}.png`);\n\n    // If there is not an existing element, create one now so dependencies can find it.\n    if (existingElement) {\n        existingElement.beginOperation();\n        existingElement.name = data.name;\n        element = existingElement;\n    } else {\n        element = createElementExtraMetrics(library, data.name, elementType, { opType });\n    }\n\n    return Promise.all([ createPrimaryContent, createSVGRendition, createPNGRendition ]).then(results => {\n        const representationContentPromises = [];\n\n        dependentAssetIds = results[0].dependentAssetIds;\n        primaryContentPath = results[0].filePath;\n        imageData = results[0].imageData;\n        svgRenditionContentPath = results[1];\n        PNGRenditionPath = results[2];\n\n        // Now everything is ready to update, remove the existing and add the new\n        if (existingElement) {\n            existingElement.removeAllRepresentations();\n        }\n\n        const getMimeType = (useXDComponentContainerType) => {\n            if (useXDComponentContainerType) {\n                return useXDComponentContainerType && isNxdFormat\n                    ? environment.documentLibraryConstants.NXD_COMPONENT_CONTAINER_TYPE\n                    : environment.documentLibraryConstants.XD_COMPONENT_CONTAINER_TYPE;\n            } else {\n                return configuration.AGC_REPRESENTATION_TYPE;\n            }\n        };\n\n        const copyFileToRepresentation = (representation, filePath) => {\n            return representation.setContentFromPath(filePath);\n        };\n        const moveFileToRepresentation = (representation, filePath) => {\n            // We try to move the files first - since this might fail (e.g. could be on a different volume), we fall back to copying if the move fails.\n            return representation.setContentFromPath(filePath, true)\n                .catch(() => copyFileToRepresentation(representation, filePath));\n        };\n\n        // Using a container type requires the Xd feature flag ccLibrariesGraphicsInComponent to be set.\n        // The feature flag 'newFileFormat' is tightly coupled to the flag 'ccLibrariesGraphicsInComponent'.\n        // Xd cannot publish symbols with the flag 'newFileFormat' on while 'ccLibrariesGraphicsInComponent' is off,\n        // Hence 'newFileFormat' will override 'ccLibrariesGraphicsInComponent' in this context to force.\n        // useXDComponentContainerType to true.\n        // 'ccLibrariesGraphicsInComponent' is on by default and there is no plan to turn it off. But there\n        // is a plan to remove the flag before 'newFileFormat' is turned on.\n        const useXDComponentContainerType = useCanonicalComponent\n            && (\n                isNxdFormat\n                || environment.isXDFeatureFlagEnabled('ccLibrariesGraphicsInComponent')\n            );\n\n        const primaryRepresentation = element.createRepresentation(getMimeType(useXDComponentContainerType), 'primary');\n\n        // Put the symbolId in xd data. It's used in _getDragAndComponentData. The symboldId is different than the assetId.\n        if (useCanonicalComponent && data.symbolId) {\n            primaryRepresentation.setValue('xd', 'data', { symbolId: data.symbolId });\n        }\n\n        let representation = primaryRepresentation;\n        if (useXDComponentContainerType) {\n            representation = isNxdFormat\n                ? primaryRepresentation.createChild(configuration.NXD_REPRESENTATION_TYPE)\n                : primaryRepresentation.createChild(configuration.AGC_REPRESENTATION_TYPE);\n\n            const addPrimaryRepresentationChild = imageInfo => {\n                if (!imageInfo.imagePath) { return Promise.resolve(); }\n\n                const imageRepresentation = primaryRepresentation.createChild(imageInfo.mimeType);\n                imageRepresentation.setValue('xd', 'uid', imageInfo.uid);\n\n                const setContentPath = imageInfo.moveFile ? moveFileToRepresentation : copyFileToRepresentation;\n                if (imageInfo.moveFile) {\n                    imagePathsToDelete.push(imageInfo.imagePath);\n                }\n                return setContentPath(imageRepresentation, imageInfo.imagePath);\n            };\n\n            representationContentPromises.push(...imageData.map(addPrimaryRepresentationChild));\n        }\n\n        const setPrimaryRepresentation = moveFileToRepresentation(representation, primaryContentPath);\n        representationContentPromises.push(setPrimaryRepresentation);\n\n        if (svgRenditionContentPath) {\n            // some XD component contains large images that could cause agcToSVG conversion to crash\n            // if we don't get svgRenditionContentPath, skip the creation of svg representation\n            const svgRendition = element.createRepresentation('image/svg+xml', 'rendition');\n            const setSVGRendition = moveFileToRepresentation(svgRendition, svgRenditionContentPath);\n            representationContentPromises.push(setSVGRendition);\n        }\n\n        const PNGRendition = element.createRepresentation('image/png', 'rendition');\n        PNGRendition.isPreferredThumbnail = true;\n        const setPNGRendition = PNGRendition.setContentFromPath(PNGRenditionPath);\n        representationContentPromises.push(setPNGRendition);\n\n        // We also set the PNG thumbnail in the thumbnail cache, even though it's bigger than we need for the\n        // thumbnail. This allows the thumbnail to load straight away without waiting for the local thumbnail generator\n        const thumbnailSize = elementConfiguration.getThumbnailSize(element);\n        representationContentPromises.push(element.setThumbnailCache(thumbnailSize, PNGRenditionPath).catch(() => undefined));\n        return Promise.all(representationContentPromises);\n    }).then(() => {\n        return { element, dependentAssetIds };\n    }).catch(e => {\n        debugLog.log(e);\n        if (element && !existingElement) {\n            library.removeElement(element, true);\n            element = null;\n        }\n        return Promise.reject(e);\n    }).finally(() => {\n        if (element) {\n            element.endOperation().then(() => {\n                // Tidy up by deleting the temp files\n                // after element has been created\n                if (PNGRenditionPath) {\n                    environment.deleteFile(PNGRenditionPath);\n                }\n                if (primaryContentPath) {\n                    environment.deleteFile(primaryContentPath);\n                }\n                if (svgRenditionContentPath) {\n                    environment.deleteFile(svgRenditionContentPath);\n                }\n                imagePathsToDelete.forEach(imagePath => {\n                    environment.deleteFile(imagePath);\n                });\n            });\n        }\n    });\n}\n\nexport function getColorOrGradientFromElement(element) {\n    if (element.type === configuration.COLOR_ELEMENT_TYPE) {\n        return createColorNode(undefined, element);\n    } else if (element.type === configuration.GRADIENT_ELEMENT_TYPE) {\n        const representation = elementConfiguration.findUsableRepresentation(element);\n        const data = representation.getValue(configuration.GRADIENT_NAMESPACE, configuration.GRADIENT_DATA_KEY);\n        // eslint-disable-next-line prefer-const\n        let { stops, opacities, type } = data;\n\n        // Merge the color and opacity gradients.\n        stops = flattenGradientStops(stops, opacities);\n        // Format the color stops.\n        const colorStops = [];\n        stops.forEach(stop => {\n            const { r, g, b } = stop.color.find(color => color.mode === 'RGB').value;\n            const colorData = { r, g, b };\n            colorStops.push({ stop: stop.offset, color: new environment.Color(colorData, stop.opacity) });\n        });\n\n        // create gradient object based on type\n        const gradient = type === 'linear' ? new LinearGradient() : new RadialGradient();\n        gradient.setColorStops(colorStops);\n        return gradient._xdGradient;\n    }\n}\n\nexport function getTextStyleDataFromElement(element) {\n    // Some values can be '0' or 'auto'\n    const isDefined = (arg) => {\n        return arg !== undefined && arg !== null;\n    };\n\n    const representation = elementConfiguration.findUsableRepresentation(element);\n    // Note: We have a lot of potential style data properties, but only some of them apply in XD. See list here:\n    // https://wiki.corp.adobe.com/pages/viewpage.action?spaceKey=ccprojects&title=JSON+Character+Style+Properties\n    const styleData = representation && representation.getValue('characterstyle', 'data');\n    if (!styleData) { return; }\n    const xdStyleData = {};\n\n    const color = styleData.color ? createColorNode(styleData.color) : null;\n    if (color) {\n        xdStyleData.fontColor = color;\n    }\n\n    // Character style values for fontStyle may include: 'regular', 'italic', 'oblique', etc.\n    // Character style values for fontWeight may include: 'bold', 'lighter', etc.\n    // Character style values for adbeFont.style may include capitalized values: 'Bold Italic', 'Bold', 'Regular'\n    const fontStyle = (styleData.adbeFont && styleData.adbeFont.style) || styleData.fontStyle || styleData.fontWeight;\n    // XD expects style string to start with capital letter. e.g. \"Bold\", \"Bold Oblique\", \"Light\", \"Light Oblique\", \"Oblique\", \"Regular\"\n    xdStyleData.fontStyle = fontStyle ? fontStyle.charAt(0).toUpperCase() + fontStyle.slice(1) : false;\n\n    // If the font style or family is not supported, a warning icon will appear in the Text details in XD when the Text node is selected.\n    const fontFamily = styleData.fontFamily || (styleData.adbeFont && styleData.adbeFont.family);\n    if (fontFamily) {\n        xdStyleData.fontFamily = fontFamily;\n    }\n\n    let underline, strikethrough;\n    const textDecorationObject = styleData.textDecorationObject;\n    if (textDecorationObject) {\n        underline = textDecorationObject.adbeUnderline;\n        strikethrough = textDecorationObject.adbeStrikethrough;\n    }\n    // Note: adbePhxsUnderline handles 2 kinds of underline\n    underline = underline || styleData.adbePhxsUnderline || (styleData.textDecoration\n        && Array.isArray(styleData.textDecoration) && styleData.textDecoration.includes('underline'));\n    xdStyleData.underline = !!underline;\n\n    // Note: adbePhxsStrikethru is a constant from the StrikeThruType referenced in the Photoshop Manual\n    strikethrough = strikethrough || styleData.adbePhxsStrikethru || (styleData.textDecoration\n        && Array.isArray(styleData.textDecoration) && styleData.textDecoration.includes('line-through'));\n    xdStyleData.strikethrough = !!strikethrough;\n\n    const postscriptName = styleData.adbeFont && styleData.adbeFont.postScriptName;\n    if (postscriptName) {\n        xdStyleData.postscriptName = postscriptName;\n    }\n\n    const fontSize = convertFontSizeUnits(styleData.fontSize, 'pt');\n    if (fontSize) { // should never be 0\n        xdStyleData.fontSize = fontSize;\n    }\n\n    const lineHeight = convertFontSizeUnits(styleData.lineHeight, 'pt');\n    if (isDefined(lineHeight)) {\n        xdStyleData.lineSpacing = lineHeight;\n    }\n\n    const paragraphSpacing = convertFontSizeUnits(styleData.paragraphSpacing, 'pt');\n    if (isDefined(paragraphSpacing)) {\n        xdStyleData.paragraphSpacing = paragraphSpacing;\n    }\n\n    const charSpacing = TextStyleUtils.getTracking(styleData);\n    if (isDefined(charSpacing)) {\n        xdStyleData.charSpacing = charSpacing;\n    }\n\n    xdStyleData.textScript = TextStyleUtils.getTextScript(styleData) || 'none';\n    // Valid values for textTransform in XD: \"none\", \"uppercase\", \"lowercase\", or \"titlecase\".\n    const textTransform = TextStyleUtils.getTextTransform(styleData, 'titlecase');\n    xdStyleData.textTransform = isDefined(textTransform) ? textTransform : 'none';\n\n    return xdStyleData;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport { addGraphicElement, addModelElement } from 'app/js/utils/addElementUtils';\nimport { createElementExtraMetrics, generatePreview } from 'app/js/utils/libraryUtils';\n\nfunction isObject(obj) {\n    return obj !== null && typeof obj === 'object';\n}\n\nfunction isNumber(value) {\n    return typeof value === 'number';\n}\n\nexport function isValidColorData(colorData) {\n    if (!isObject(colorData)) {\n        return false;\n    }\n\n    const hasProps = [ 'mode', 'type', 'value' ].every(prop => Object.prototype.hasOwnProperty.call(colorData, prop));\n    const hasRgbColorValues = isObject(colorData.value)\n        && colorData.mode === 'RGB'\n        && [ 'r', 'g', 'b' ].every(component => isNumber(colorData.value[component]));\n\n    return hasProps && hasRgbColorValues;\n}\n\nexport function addColorAsset(library, opType, colorData) {\n    if (!isValidColorData(colorData)) {\n        return Promise.reject('Unexpected color data format.');\n    }\n\n    const newElement = createElementExtraMetrics(library, '', configuration.COLOR_ELEMENT_TYPE, { opType });\n    const newRepresentation = newElement.createRepresentation(configuration.COLOR_REPRESENTATION_TYPE, 'primary');\n\n    newRepresentation.setValue(configuration.COLOR_NAMESPACE, configuration.COLOR_DATA_KEY, colorData);\n\n    newElement.endOperation();\n\n    return Promise.resolve(newElement);\n}\n\nexport function addImageAsset(library, opType, dragAssetId) {\n    const addImagePromise = generatePreview(dragAssetId).then(fileData => {\n        const appMetadata = {\n            documentId: fileData.documentId,\n            layerIds: fileData.layerIds,\n            dragAssetId\n        };\n\n        return addGraphicElement(\n            fileData.layerName,\n            fileData.files,\n            fileData.rendition,\n            library,\n            opType,\n            appMetadata\n        );\n    }, () => Promise.reject('Could not extract asset.'));\n\n    return addImagePromise;\n}\n\nexport function addModelAsset(library, opType, dragAssetId) {\n    const addModelPromise = generatePreview(dragAssetId).then(fileData => {\n        const appMetadata = {\n            documentId: fileData.documentId,\n            layerIds: fileData.layerIds,\n            dragAssetId\n        };\n\n        return addModelElement(\n            fileData.layerName,\n            fileData.files,\n            fileData.rendition,\n            library,\n            opType,\n            appMetadata\n        );\n    }, () => Promise.reject('Could not extract asset.'));\n\n    return addModelPromise;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport { getElementModifiedTime } from 'app/js/utils/libraryUtils';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport productInterface from 'app/js/interface/productInterface';\nimport { addColorAsset, addImageAsset, addModelAsset } from './addUtils';\n\nconst onLayerUpdateEvent = () => {\n    layerSelectionManager.handleSelectionChange();\n};\n\n// EUC-5091/CCXC-947: Notify Dimension when dragged Stock search result has downloaded\nconst onElementDrop = async event => {\n    if (event.data && event.data.elementRef !== undefined) {\n        const element = await libraryManager.resolveElementReference(event.data.elementRef);\n        const adobeStockId = AdobeStockUtils.getStockId(element);\n\n        if (adobeStockId) {\n            const representation = element.getPrimaryRepresentation();\n\n            return representation.getContentPath().then(path => {\n                return environment.execApp('updateAsset', [\n                    path,\n                    element.library.name,\n                    element.name,\n                    element.getLegacyReference(),\n                    getElementModifiedTime(element),\n                    element.created,\n                    adobeStockId,\n                    (adobeStockId ? AdobeStockUtils.isLicensed(element) : null)\n                ]);\n            });\n        }\n    }\n};\n\nconst onElementOpenForEdit = event => {\n    const elementRef = event.data && event.data.elementRef;\n    if (!elementRef) {\n        return;\n    }\n\n    const requestRef = (event.data && event.data.requestRef) || event.data.elementRef;\n    productInterface.openElementForEdit({ elementRef, requestRef });\n};\n\nconst ADD_OPERATIONS = {\n    process: (library, event) => addColorAsset(library, 'Presets', event.data),\n    image: library => addImageAsset(library, 'Presets'),\n    model: library => addModelAsset(library, 'Presets')\n};\n\nconst onAddAsset = event => {\n    const operation = event.data && ADD_OPERATIONS[event.data.type];\n    if (operation === undefined) {\n        return;\n    }\n\n    const library = libraryManager.currentLibrary;\n    operation(library, event).then(element => elementSelectionState.revealElement(element));\n};\n\nexport function start() {\n    environment.addEventListener('selectionChanged', onLayerUpdateEvent);\n    environment.addEventListener('dlElementDropped', onElementDrop);\n    environment.addEventListener('addAsset', onAddAsset);\n    environment.addEventListener('dlElementOpenForEdit', onElementOpenForEdit);\n}\n\nexport function stop() {\n    environment.removeEventListener('selectionChanged', onLayerUpdateEvent);\n    environment.removeEventListener('dlElementDropped', onElementDrop);\n    environment.removeEventListener('addAsset', onAddAsset);\n    environment.removeEventListener('dlElementOpenForEdit', onElementOpenForEdit);\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport * as ColorUtils from 'app/js/utils/colorUtils';\nimport ColorElementConfig from 'app/js/config/elements/ColorElementConfig';\nimport { addColorAsset, isValidColorData } from '../addUtils';\n\nexport default class STGRColorElementConfig extends ColorElementConfig {\n\n    dragType = 'color';\n\n    _getRGBRepresentation(element) {\n        const colorData = [];\n\n        element.representations.forEach(rep => {\n            const data = rep.getValue(configuration.COLOR_NAMESPACE, configuration.COLOR_DATA_KEY);\n            if (rep.relationship === 'primary') {\n                colorData.unshift(data);\n            } else {\n                colorData.push(data);\n            }\n        });\n\n        return ColorUtils.getRGBRepresentation(colorData);\n    }\n\n    // The colorData parameter supports using this apply function by color themes\n    _placeColorAsset(element, colorData, after) {\n        // JSX expects primary representation to be the first element in the array\n        const rgbRep = colorData ? ColorUtils.getRGBRepresentation(colorData) : this._getRGBRepresentation(element);\n        if (!rgbRep) {\n            return;\n        }\n\n        if (after) {\n            after();\n        }\n\n        return environment.execApp('placeAsset', {\n            name: element.name,\n            type: rgbRep.type,\n            value: rgbRep.value\n        });\n    }\n\n    getApplyOperations(element) {\n        return [ {\n            name: 'DL_ADD_GENERIC_TO_DOC',\n            apply: (colorData, after) => this._placeColorAsset(element, colorData, after),\n            displayInMenu: true,\n            onClick: true\n        } ];\n    }\n\n    getDragData(element) {\n        const rgbRep = this._getRGBRepresentation(element);\n        if (!rgbRep) {\n            return;\n        }\n\n        return {\n            name: element.name,\n            type: rgbRep.type,\n            value: rgbRep.value\n        };\n    }\n\n    getAddOperations(layerInfo) {\n        if (!layerInfo || !layerInfo.colors || layerInfo.colors.length === 0) {\n            return [];\n        }\n\n        return layerInfo.colors.filter(isValidColorData).map(color => {\n            return {\n                name: 'DL_ADD_COLOR_NAME',\n                style: {\n                    backgroundColor: ColorUtils.colorDataToHexString(color),\n                    border: '1px solid',\n                    width: '14px',\n                    height: '14px',\n                    margin: '1px 1px 1px 0px'\n                },\n                apply: (library, opType) => addColorAsset(library, opType, color)\n            };\n        });\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport ImageElementConfig from 'app/js/config/elements/ImageElementConfig';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport { reportApplyMetric, reportApplyFullSizeMetric, getElementModifiedTime } from 'app/js/utils/libraryUtils';\nimport { addImageAsset } from '../addUtils';\n\nexport default class STGRImageElementConfig extends ImageElementConfig {\n\n    _placeImageAsset(element) {\n        const representation = this._config.findUsableRepresentation(element);\n        const adobeStockId = AdobeStockUtils.getStockId(element);\n        if (representation) {\n            reportApplyMetric(representation, 'placeAsset');\n            return representation.getContentPath().then(path => {\n                return environment.execApp('placeAsset', [\n                    path,\n                    element.library.name,\n                    element.name,\n                    element.getLegacyReference(),\n                    getElementModifiedTime(element),\n                    element.created,\n                    adobeStockId,\n                    (adobeStockId ? AdobeStockUtils.isLicensed(element) : null)\n                ]);\n            });\n        }\n\n        // Fallback: use the full-size rendition if we don't have a representation we can use\n        return element.getThumbnailPath().then(path => {\n            reportApplyFullSizeMetric(element, 'placeAsset');\n            return environment.execApp('placeAsset', [\n                path,\n                false,\n                element.library.name,\n                element.name,\n                element.getLegacyReference(),\n                getElementModifiedTime(element),\n                element.created,\n                adobeStockId,\n                (adobeStockId ? AdobeStockUtils.isLicensed(element) : null),\n            ]);\n        });\n    }\n\n    getApplyOperations(element) {\n        return [ {\n            name: 'DL_ADD_GENERIC_TO_DOC',\n            apply: () => this._placeImageAsset(element),\n            displayInMenu: true,\n            onClick: true\n        } ];\n    }\n\n    getAddOperations(layerInfo) {\n        if (!layerInfo || !layerInfo.images || layerInfo.images.length === 0) {\n            return [];\n        }\n\n        return [ {\n            name: 'DL_ADD_IMAGE_NAME',\n            icon: 'AddImage',\n            dropSupport: true,\n            apply: addImageAsset\n        } ];\n    }\n\n    isDisabled(element) {\n        return !this._config.findUsableRepresentation(element) && !element.getCachedThumbnailPath();\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2016 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport { getElementModifiedTime } from 'app/js/utils/libraryUtils';\nimport LightElementConfig from 'app/js/config/elements/LightElementConfig';\n\nexport default class STGRLightElementConfig extends LightElementConfig {\n\n    _placeLightAsset(element) {\n        const representation = this._config.findUsableRepresentation(element);\n\n        if (representation) {\n            const adobeStockId = AdobeStockUtils.getStockId(element);\n\n            return representation.getContentPath().then(path => {\n                return environment.execApp('placeAsset', [\n                    path,\n                    element.library.name,\n                    element.name,\n                    element.getLegacyReference(),\n                    getElementModifiedTime(element),\n                    element.created,\n                    adobeStockId,\n                    (adobeStockId ? AdobeStockUtils.isLicensed(element) : null)\n                ]);\n            });\n        }\n    }\n\n    getApplyOperations(element) {\n        return [ {\n            name: 'DL_ADD_GENERIC_TO_DOC',\n            apply: () => this._placeLightAsset(element),\n            displayInMenu: true,\n            onClick: true\n        } ];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2016 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport { getElementModifiedTime } from 'app/js/utils/libraryUtils';\nimport MaterialElementConfig from 'app/js/config/elements/MaterialElementConfig';\n\nexport default class STGRMaterialElementConfig extends MaterialElementConfig {\n\n    _placeMaterialAsset(element) {\n        const representation = this._config.findUsableRepresentation(element);\n\n        if (representation) {\n            const adobeStockId = AdobeStockUtils.getStockId(element);\n\n            return representation.getContentPath().then(path => {\n                return environment.execApp('placeAsset', [\n                    path,\n                    element.library.name,\n                    element.name,\n                    element.getLegacyReference(),\n                    getElementModifiedTime(element),\n                    element.created,\n                    adobeStockId,\n                    (adobeStockId ? AdobeStockUtils.isLicensed(element) : null)\n                ]);\n            });\n        }\n    }\n\n    getApplyOperations(element) {\n        return [ {\n            name: 'DL_ADD_GENERIC_TO_DOC',\n            apply: () => this._placeMaterialAsset(element),\n            displayInMenu: true,\n            onClick: true\n        } ];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2015 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport { getElementModifiedTime } from 'app/js/utils/libraryUtils';\nimport ThreeDElementConfig from 'app/js/config/elements/ThreeDElementConfig';\nimport { addModelAsset } from '../addUtils';\n\nexport default class STGRThreeDElementConfig extends ThreeDElementConfig {\n\n    _placeModelAsset(element) {\n        const representation = this._config.findUsableRepresentation(element);\n\n        if (representation) {\n            const adobeStockId = AdobeStockUtils.getStockId(element);\n\n            return representation.getContentPath().then(path => {\n                return environment.execApp('placeAsset', [\n                    path,\n                    element.library.name,\n                    element.name,\n                    element.getLegacyReference(),\n                    getElementModifiedTime(element),\n                    element.created,\n                    adobeStockId,\n                    (adobeStockId ? AdobeStockUtils.isLicensed(element) : null)\n                ]);\n            });\n        }\n    }\n\n    getApplyOperations(element) {\n        return [ {\n            name: 'DL_ADD_GENERIC_TO_DOC',\n            apply: () => this._placeModelAsset(element),\n            displayInMenu: true,\n            onClick: true\n        } ];\n    }\n\n    getAddOperations(layerInfo) {\n        if (!layerInfo || !layerInfo.models || layerInfo.models.length === 0) {\n            return [];\n        }\n\n        return [ {\n            name: 'DL_ADD_MODEL_NAME',\n            dropSupport: true,\n            icon: 'AddModel',\n            apply: addModelAsset\n        } ];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport * as STGREvents from './events';\n\n// Import all the element type configuration overrides\nimport DefaultConfigs from 'app/js/config/elements/DefaultConfigs';\nimport ColorElementConfig from './elements/ColorElementConfig';\nimport ImageElementConfig from './elements/ImageElementConfig';\nimport LightElementConfig from './elements/LightElementConfig';\nimport MaterialElementConfig from './elements/MaterialElementConfig';\nimport ThreeDElementConfig from './elements/ThreeDElementConfig';\n\nexport function getAppConfiguration() {\n    this.config = {};\n    this.config.code = 'STGR'; // This is the four-letter code of your application (e.g. PHXS, ILST, etc).\n    this.config.fullName = 'Stager'; // The full name of the application (e.g. Photoshop, Premiere Pro, etc).\n    this.config.translationSuffix = 'SG'; // A two-letter code used for identifying app-specific externalized strings\n    this.config.dragDropSource = 'com.adobe.stager'; // Should be of the form com.adobe.<yourapp>, e.g. com.adobe.indesign, com.adobe.premiere, etc.\n\n    // config.themes is a map from the background HEX value of the theme, to the name of the theme (CSS file) to load\n    // You can either make a fixed map that contains all the brightness value (e.g. see Photoshop: app/applications/PHXS/js/index.js),\n    // or you can programatically set this, if you have a lot of values (e.g. see InDesign: app/applications/IDSN/js/index.js).\n    // We suggest you copy one of the existing apps that best matches the style of your app, as a starting point\n    this.config.themes = {\n        '323232': 'darker',\n        'f5f5f5': 'lighter'\n    };\n\n    // In the global CSS, certain app styles are bound to the classname 'spectrum-enabled'.\n    this.config.legacySpectrumEnabled = true;\n\n    this.config.defaultTheme = 'darker';\n\n    // This defines the order that the library element categories appear in the UI - change this to suit your application\n    this.config.elementTypes = [\n        ThreeDElementConfig,\n        MaterialElementConfig,\n        LightElementConfig,\n        ImageElementConfig,\n        ColorElementConfig,\n        DefaultConfigs.ColorThemeElementConfig,\n        DefaultConfigs.ComponentElementConfig,\n        DefaultConfigs.TextStyleElementConfig,\n        DefaultConfigs.FontElementConfig,\n        DefaultConfigs.ParagraphStyleElementConfig,\n        DefaultConfigs.LayerStyleElementConfig,\n        DefaultConfigs.BrushElementConfig,\n        DefaultConfigs.VideoElementConfig,\n        DefaultConfigs.LookElementConfig,\n        DefaultConfigs.CapsuleElementConfig,\n        DefaultConfigs.PatternElementConfig,\n        DefaultConfigs.TemplateElementConfig,\n        DefaultConfigs.AnimationElementConfig,\n        DefaultConfigs.TextElementConfig,\n        DefaultConfigs.GradientElementConfig,\n        DefaultConfigs.AudioElementConfig,\n        DefaultConfigs.ChannelElementConfig,\n        DefaultConfigs.ImageGuidelineElementConfig,\n        DefaultConfigs.UnsupportedElementConfig\n    ];\n\n    // This defines the element categories that are collapsed by default in the UI - change this to suite your application.\n    this.config.collapsedTypes = [\n        configuration.CHARACTER_STYLE_ELEMENT_TYPE,\n        configuration.PARAGRAPH_STYLE_ELEMENT_TYPE,\n        configuration.FONT_ELEMENT_TYPE,\n        configuration.LAYER_STYLE_ELEMENT_TYPE,\n        configuration.BRUSH_ELEMENT_TYPE,\n        configuration.VIDEO_ELEMENT_TYPE,\n        configuration.LOOK_ELEMENT_TYPE,\n        configuration.CAPSULE_ELEMENT_TYPE,\n        configuration.PATTERN_ELEMENT_TYPE,\n        configuration.TEMPLATE_ELEMENT_TYPE,\n        configuration.ANIMATION_ELEMENT_TYPE,\n        configuration.TEXT_ELEMENT_TYPE,\n        configuration.GRADIENT_ELEMENT_TYPE,\n        configuration.AUDIO_ELEMENT_TYPE,\n        configuration.CHANNEL_ELEMENT_TYPE,\n        configuration.IMAGE_GUIDELINE_ELEMENT_TYPE,\n        configuration.UNSUPPORTED_ELEMENT_TYPE\n    ];\n\n    // Dimension has a bug where the handlers for drop events aren't being attached properly, and we don't get these events\n    // Other drag events work. If this flag is set, we'll handle the drop on drag end, even though the drag may have been\n    // cancelled.\n    // TODO: Remove this and the corresponding code once the issue is fixed in Dimension.\n    this.config.missingDropEventsBug = true;\n\n    // Customize UI options that we see during Stock search\n    this.config.STOCK_SEARCH_UI_OPTIONS = [ configuration.STOCK_SEARCH_SUB_FILTER_MODEL, configuration.STOCK_SEARCH_SUB_FILTER_LIGHT, configuration.STOCK_SEARCH_SUB_FILTER_MATERIAL, configuration.STOCK_SEARCH_OPTION_PHOTO ];\n\n    // Remove 'export' from the library list item context menu.\n    this.config.disabledLibraryContextMenuActions = [ 'export' ];\n\n    this.init = function() {\n\n        // TASK: Populate the following based on the usable types in your product, for each type of element\n        FileUtils.extendUsableTypes(configuration.THREE_D_ELEMENT_TYPE, [\n            'application/vnd.adobe.obj.3d+zip',\n            '3d/vnd.adobe.dn+dcxucf',\n            'model/vnd.adobe.dn+dcxucf',\n            'model/gltf-binary',\n            'model/vnd.usdz+zip',\n            'application/vnd.adobe.fbx.3d+zip'\n        ]);\n        FileUtils.extendUsableTypes(configuration.LIGHT_ELEMENT_TYPE, [\n            'application/vnd.adobe.ibl.light+zip',\n            'application/vnd.adobe.sbsar+zip',\n            'application/vnd.adobe.exr.light+zip'\n        ]);\n        FileUtils.extendUsableTypes(configuration.MATERIAL_ELEMENT_TYPE, [\n            'application/vnd.adobe.mdl.material+zip',\n            'application/vnd.adobe.sbsar+zip'\n        ]);\n        FileUtils.extendUsableTypes(configuration.IMAGE_ELEMENT_TYPE, [\n            'image/png',\n            'image/jpeg',\n            'image/jpg',\n            'image/gif',\n            'image/svg+xml',\n            'image/vnd.adobe.photoshop',\n            'application/photoshop',\n            'application/illustrator'\n        ]);\n        FileUtils.extendUsableTypes(configuration.COLOR_ELEMENT_TYPE, [ 'application/vnd.adobe.color+json' ]);\n        FileUtils.extendUsableTypes(configuration.COLOR_THEME_ELEMENT_TYPE, [ 'application/vnd.adobe.colortheme+json' ]);\n        FileUtils.extendUsableTypes(configuration.COMPONENT_ELEMENT_TYPE, [ 'image/svg+xml', 'image/png' ]);\n        // FileUtils.extendUsableTypes(configuration.PARAGRAPH_STYLE_ELEMENT_TYPE, []);\n        // FileUtils.extendUsableTypes(configuration.CHARACTER_STYLE_ELEMENT_TYPE, []);\n        // FileUtils.extendUsableTypes(configuration.LAYER_STYLE_ELEMENT_TYPE, []);\n        // FileUtils.extendUsableTypes(configuration.BRUSH_ELEMENT_TYPE, []);\n        // FileUtils.extendUsableTypes(configuration.LOOK_ELEMENT_TYPE, []);\n        // FileUtils.extendUsableTypes(configuration.PATTERN_ELEMENT_TYPE, []);\n        // FileUtils.extendUsableTypes(configuration.TEMPLATE_ELEMENT_TYPE, []);\n        // FileUtils.extendUsableTypes(configuration.TEXT_ELEMENT_TYPE, []);\n        // FileUtils.extendUsableTypes(configuration.ANIMATION_ELEMENT_TYPE, []);\n\n        // TASK: Populate the following based on the editable types in your product, for each type of element\n        // FileUtils.extendEditableTypes(configuration.IMAGE_ELEMENT_TYPE, []);\n\n        // This determines the tooltip-enablement state. You need to implement getTooltipState in jsx/main.jsx\n        configuration.showTooltips = true;\n\n        this.startEventListener();\n    };\n\n    this.reportEvent = function() {\n        // TASK: Implement this if you want to be notified of analytics events, so you can report them in your\n        // own product's analytics (e.g. Headlights) - this is in addition to, and not a replacement of, the\n        // analytics sent by the panel to Adobe Analytics.\n        return false;\n    };\n\n    this.startEventListener = function() {\n        STGREvents.start();\n    };\n\n    this.stopEventListener = function() {\n        STGREvents.stop();\n    };\n\n    // TASK: This needs to be implemented to provide data about the license state of the user for analytics purposes\n    // Examples:\n    // * {accountStatus: \"paid\"}\n    // * {accountStatus: \"trial\", secondsLeftInTrial: 10000}\n    this.getUserData = callback => callback();\n\n    // TODO: Refactor the above to return an object, rather than using this\n    return this;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n// Require all the index.js files in the application folders\n\nconst products = {};\n\n// Adobe Desktop Apps\nif (process.env.INCLUDE_DESKTOP) {\n    products.PHXS = require('app/applications/PHXS/js/index');\n    products.PHXS_UXP = require('app/applications/PHXS_UXP/js/index');\n    products.ILST = require('app/applications/ILST/js/index');\n    products.ILST_UXP = require('app/applications/ILST_UXP/js/index');\n    products.IDSN = require('app/applications/IDSN/js/index');\n    products.AEFT = require('app/applications/AEFT/js/index');\n    products.PPRO = require('app/applications/PPRO/js/index');\n    products.FLPR = require('app/applications/FLPR/js/index');\n    products.DRWV = require('app/applications/DRWV/js/index');\n    products.KBRG = require('app/applications/KBRG/js/index');\n    products.SPRK = require('app/applications/SPRK/js/index');\n    products.ACCC = require('app/applications/ACCC/js/index');\n    products.STGR = require('app/applications/STGR/js/index');\n}\n\n// Adobe Web Apps\nif (process.env.INCLUDE_CCWEB) {\n    products.CCX = require('app/applications/CCX/js/index');\n    products.CLIO = require('app/applications/CLIO/js/index');\n    products.AH = require('app/applications/AH/js/index');\n    products.GenStudio = require('app/applications/GenStudio/js/index');\n}\n\n// MS Office Apps\nif (process.env.INCLUDE_OFFICE) {\n    products.PowerPoint = require('app/applications/PowerPoint/js/index');\n    products.Word = require('app/applications/Word/js/index');\n}\n\n// Other\nif (process.env.INCLUDE_DEV) {\n    products.GoogleSlides = require('app/applications/GoogleSlides/js/index');\n    products.Figma = require('app/applications/Figma/js/index');\n    products.StyleGuide = require('app/applications/StyleGuide/js/index');\n}\n\nimport environment from 'app/js/environment';\nimport configuration from 'app/js/config/configuration';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\n\nexport class ProductManager {\n\n    // Initializes the app-specific code by loading the index.js file of each app. Each app file exports a `getAppConfiguration`\n    // method, that returns the app's configuration object - `configuration` sets the current app's config as `currentProduct`,\n    // and we load any element-type overrides that the app specified.\n    init() {\n        const appName = environment.getAppName();\n        const appConfigurations = Object.keys(products).map(code => products[code].getAppConfiguration());\n        configuration.initApplication(appName, appConfigurations);\n        elementConfiguration.init(configuration.currentProduct.config.elementTypes);\n    }\n}\n\nexport default new ProductManager();\n","/*! ************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\nimport './sentry';\nimport './app.scss'; // tells webpack to add the global CSS to the document first thing\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport appState from 'app/js/appState';\nimport environment from './environment';\nimport themeManager from './managers/themeManager';\nimport libraryManager from './managers/libraryManager';\nimport versionManager from './managers/versionManager';\nimport productManager from './managers/productManager';\nimport linkManager from './managers/linkManager';\nimport translationManager from './managers/translationManager';\nimport testHookManager from './managers/testHookManager';\nimport configuration from './config/configuration';\nimport localSettings from './config/localSettings';\nimport productInterface from './interface/productInterface';\nimport layerSelectionManager from './managers/layerSelectionManager';\nimport menuManager from './managers/menuManager';\nimport metrics from './interface/metrics';\nimport debugLog from './utils/debugLog';\nimport localizedSorter from './utils/localizedSorter';\nimport { PerformanceTimer } from './utils/performanceUtils';\n\n// Map from extension id to top-level component\nimport PanelView from 'app/js/components/PanelView';\nconst COMPONENT_MAP = {\n    'com.adobe.cclibraries.manager': process.env.SUPPORTS_LIBRARY_MANAGER && require('app/js/components/manager/ManagerView').default,\n    'com.adobe.DesignLibraries.angular': PanelView,\n    'com.adobe.DesignLibraries.touch': PanelView\n};\n\nconst renderApp = () => {\n    if (!environment.shouldRenderPanel()) {\n        return;\n    }\n\n    const MainComponent = COMPONENT_MAP[environment.getExtensionID()];\n    const element = document.getElementById('content');\n    ReactDOM.render(<MainComponent />, element);\n};\n\nenvironment.init().then(() => {\n    if (window.performance) {\n        window.performance.mark('ccac:libraries-panel:init:begin');\n        window.performance.measure('ccac:libraries-panel:eval', 'ccac:libraries-panel:eval:begin', 'ccac:libraries-panel:init:begin');\n    }\n\n    const loadTimer = new PerformanceTimer('Load Panel');\n\n    // Configure translation (do this first, because other modules, like menuManager, depend on it):\n    translationManager.setStringMap(environment.resourceBundle);\n\n    // Wait for the environment to init before initializing anything that depends on environment:\n    localSettings.init();\n    localizedSorter.init();\n    productManager.init();\n    menuManager.init();\n    // Initialize the global application state.\n    appState.init();\n\n    // Wait for the rest of the (app/theme) CSS to load before initializing the JavaScript, otherwise we\n    // could get a flicker of unstyled HTML.\n    themeManager.init().then(() => {\n        if (environment.type === 'CEP') {\n            const JSXRoot = `${environment.getPluginPath()}/jsx`;\n            const shimJSX = `${JSXRoot}/shims.jsx`;\n            const coreJSX = `${JSXRoot}/core.jsx`;\n            const jsonJSX = `${JSXRoot}/json2.jsx`;\n            const appJSX = `${environment.getPluginPath()}/applications/${configuration.currentProduct.config.code}/jsx/main.jsx`;\n\n            environment.exec(null, 'evalFile', [ shimJSX ]);\n            environment.exec(null, 'evalFile', [ coreJSX ]);\n            environment.exec(null, 'evalFile', [ jsonJSX ]);\n            environment.exec(null, 'evalFile', [ appJSX ]);\n        }\n\n        if (environment.type !== 'ccweb') {\n            // Place a JSX call to fetch temporary folder\n            environment.exec('CORE', 'getTempFolder', []).then(data => {\n                configuration.strTempFolder = data;\n            }).catch(err => {\n                debugLog.log(`Unable to call getTempFolder: ${err}`);\n            });\n\n            // If this doesn't work for an individual app, they can override in thir index.js init() method.\n            environment.exec('CORE', 'getHostAppPathViaBridgeTalk', []).then(strAppPath => {\n                configuration.currentProduct.config.debugHostAppPath = strAppPath;\n            }).catch(err => {\n                debugLog.log(`Unable to call getHostAppPathViaBridgeTalk: ${err}`);\n            });\n\n            environment.exec('CORE', 'getApplicationVersion', []).then((version) => {\n                configuration.currentProduct.config.productVersion = version;\n            }).catch(err => {\n                debugLog.log(`Unable to call getApplicationVersion: ${err}`);\n            });\n        }\n\n        if (environment.setContextMenuPositionEventHandler) {\n            environment.setContextMenuPositionEventHandler();\n        }\n\n        function onProductInit() {\n            debugLog.init();\n            libraryManager.init();\n            testHookManager.init();\n            if (configuration.currentProduct.config.enableSAM) { linkManager.init(); }\n            window.alert = environment.showError.bind(environment);\n\n            if (environment.isLibrariesPanel() || environment.isLibrariesManager()) {\n                debugLog.log('Panel Initialized: ' + (process.env.NODE_ENV === 'production' ? 'v' + versionManager.getPluginVersion() : 'DEV'));\n                loadTimer.done();\n\n                if (environment.isLibrariesPanel()) {\n                    layerSelectionManager.startListening();\n                    productInterface.startListening();\n                }\n                environment.notifyProductInitialized();\n            } else {\n                // TODO: Test the analytics event fires.\n                metrics.reportError('Initialize', 'Init', 'initialize-error');\n            }\n\n            renderApp();\n\n            if (window.performance) {\n                window.performance.mark('ccac:libraries-panel:init:end');\n                window.performance.measure('ccac:libraries-panel:init', 'ccac:libraries-panel:init:begin', 'ccac:libraries-panel:init:end');\n            }\n        }\n\n        // Wait for the product to initialize before initializing everything else\n        const productInitPromise = configuration.currentProduct.init() || Promise.resolve();\n        productInitPromise.then(onProductInit, onProductInit);\n    }).catch(error => debugLog.log(`Unable to initialize themeManager ${error}`));\n});\n\n// In certain environments (e.g. XD, CCD), we'll be consumed as a JS file, not as an HTML file. So these environments need to import our built JS as a CommonJS module.\n// Note that this still loads fine in the generated index.html; it just allows the direct import as an option as well.\nexport default environment.exports;\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/**\n * Base class for any state store.\n * By extending BaseState you a set up your store to have access to its parent's state as well as the root application state.\n * Always instantiate a class that extends BaseState with the parent store as the leading argument;\n * it will usually be `this` when the store is created within a store.\n */\nexport class BaseState {\n    constructor(context) {\n        this._context = context;\n        this._rootContext = context ? context._rootContext : this;\n    }\n    get context() {\n        return this._context;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { observable, computed } from 'mobx';\nimport { BaseState } from 'app/js/state/BaseState';\nimport configuration from 'app/js/config/configuration';\nimport { validGroupName, getLibraryCustomGroupsTree } from 'app/js/utils/groupUtils';\nimport { validUniqueLibraryName, validElementName } from 'app/js/utils/libraryUtils';\n\n/**\n * State manager for a rename operation.\n */\nexport default class RenameState extends BaseState {\n\n    // The current element/group/library that is being renamed (if any)\n    @observable.ref _item = null;\n\n    // The current value of the item that is being renamed\n    @observable _value = '';\n\n    /**\n     * Start rename operation for the given item.\n     * @param {LibraryModel | Element | Group} item\n     */\n    startEdit(item) {\n        this._item = item;\n        if (item) {\n            this._value = item.name;\n        }\n    }\n\n    stopEdit() {\n        this._item = null;\n        this._value = '';\n    }\n\n    setValue(value) {\n        this._value = value;\n    }\n\n    get item() {\n        return this._item;\n    }\n\n    get value() {\n        return this._value;\n    }\n\n    // Groups Tree is only used for validating group names\n    @computed get groupsTree() {\n        if (!this._item || this.item.isLibrary) { return; }\n        // This gets recomputed if the current library changes or its groups change.\n        return getLibraryCustomGroupsTree(this._item.library);\n    }\n\n    @computed get status() {\n        if (!this._item || !this._value) {\n            return configuration.RENAME_STATES.VALID;\n        }\n        const finalValue = this._value.trim();\n        // TODO: look into moving name validity checks into the JS-API models layer.\n        if (this._item.isLibrary) {\n            return validUniqueLibraryName(finalValue, this._item.team);\n        } else if (this._item.isElement) {\n            return validElementName(finalValue);\n        } else if (this._item.isGroup) {\n            const { branches } = this.groupsTree;\n            return validGroupName(finalValue, this._item, branches[this._item.id].parent);\n        }\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { action, observable } from 'mobx';\nimport PathViewState from 'app/js/components/utils/PathViewState';\nimport RenameState from 'app/js/state/RenameState';\nimport { showPathEditOnboardingToast } from 'app/js/utils/onboardingUtils';\nimport { BaseState } from 'app/js/state/BaseState';\n\n/* Element and Group View Manager */\n\nexport class ViewManager extends BaseState {\n\n    // The current element the description is being edited for\n    @observable.ref _editDescriptionElement = null;\n\n    // If tooltips are active, we keep them active for 1000 milliseconds to show tooltips instantly\n    @observable isTooltipActive = false;\n\n    @observable unlinkingAssets = new Map();\n\n    pathState = new PathViewState(this);\n    renameState = new RenameState(this);\n\n    @action\n    setUnlinkingAsset(asset, isUnlinking) {\n        if (!asset) { return; }\n        if (isUnlinking) {\n            this.unlinkingAssets.set(asset.id, true);\n        } else {\n            this.unlinkingAssets.delete(asset.id);\n        }\n    }\n\n    getIsUnlinkingAsset(asset) {\n        return this.unlinkingAssets.get(asset.id);\n    }\n\n    get renamingItem() {\n        return this.renameState.item;\n    }\n\n    get editDescriptionElement() {\n        return this._editDescriptionElement;\n    }\n\n    get editPathGroup() {\n        return this.pathState.group;\n    }\n\n    setRenameValue(val) {\n        this.renameState.setValue(val);\n    }\n\n    get renameValue() {\n        return this.renameState.value;\n    }\n\n    get renameStatus() {\n        return this.renameState.status;\n    }\n\n    /**\n     * Start rename operation for the given item.\n     * @param {LibraryModel | Element | Group} item\n     */\n    @action\n    startRename(item) {\n        this.renameState.startEdit(item);\n    }\n\n    @action\n    stopRename() {\n        this.renameState.stopEdit();\n    }\n\n    @action\n    startEditDescription(item) {\n        this._editDescriptionElement = item;\n    }\n\n    @action\n    stopEditDescription() {\n        this._editDescriptionElement = null;\n    }\n\n    /**\n     * Start edit path operation for the given group.\n     * @param {Group} item\n     * @param {boolean} isNewGroup\n     */\n    @action\n    startEditPath(item, isNewGroup = false) {\n        showPathEditOnboardingToast(this.pathState.viewByGroupMode);\n        this.pathState.startEdit(item, isNewGroup);\n    }\n\n    @action\n    stopEditPath() {\n        this.pathState.stopEdit();\n    }\n\n    @action\n    setTooltipActive() {\n        clearTimeout(this._resetTooltipTimeout);\n\n        this.isTooltipActive = true;\n    }\n\n    @action\n    resetTooltip() {\n        clearTimeout(this._resetTooltipTimeout);\n\n        this._resetTooltipTimeout = setTimeout(this._resetTooltipActive, 1000);\n    }\n\n    _resetTooltipActive = () => {\n        this.isTooltipActive = false;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { observable, computed } from 'mobx';\nimport { findMatchingLibraries } from 'app/js/utils/searchUtils';\nimport { BaseState } from './BaseState';\n\nexport class ManagerViewState extends BaseState {\n    @observable _searchText = '';\n\n    setSearchText(value) {\n        this._searchText = value;\n    }\n\n    get searchText() {\n        return this._searchText;\n    }\n\n    @computed get filteredLibraries() {\n        // The library generated from the current document shouldn't be listed in the Libraries Manager.\n        const documentLibrary = this.context.libraryManager.publishedDocumentLibrary || {};\n        let libraries = this.context.libraryManager.libraries;\n        if (this.searchText) {\n            libraries = findMatchingLibraries(this.searchText, this.context.libraryManager.libraries);\n        }\n        return libraries.filter(library => library.id !== documentLibrary.id);\n    }\n\n    @computed get isUpgradeView() {\n        return this.context.libraryManager.publishState.canUpgrade;\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport { translate } from 'app/js/managers/translationManager';\nimport { canEditInSource, editInSource } from 'app/js/utils/editOriginalUtils';\nimport * as LinkUtils from 'app/js/utils/linkUtils';\nimport * as LibraryUtils from 'app/js/utils/libraryUtils';\nimport * as BrandUtils from 'app/js/utils/brandUtils';\nimport appState from 'app/js/appState';\nimport metrics from 'app/js/interface/metrics';\nimport environment from 'app/js/environment';\nimport { BaseState } from 'app/js/state/BaseState';\nimport { when } from 'mobx';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport featureFlags from 'app/js/config/featureFlags';\nimport { showCCDTeamsLibraryCreateOnboarding, shouldShowCCDTeamsLibraryCreateOnboarding } from 'app/js/utils/onboardingUtils';\n\n/**\n * Handles stateful library actions.\n */\nexport class LibraryActions extends BaseState {\n\n    /**\n     * Opens create library dialog.\n     * @param {Function} onCreate - callback to use after library is created.\n     * @param {Function} onClose - callback to use after dialog is closed.\n     */\n    create(onCreate, onClose) {\n        if (configuration.currentProduct.config.showCCDTeamsOnboarding && shouldShowCCDTeamsLibraryCreateOnboarding()) {\n            showCCDTeamsLibraryCreateOnboarding(onCreate, onClose);\n        } else {\n            this.context.dialogManager.openDialog('createLibrary', { onCreate }, onClose);\n        }\n    }\n\n    /**\n     * Opens delete/unpublish/unfollow library dialog as appropiate and executes the right operation if the user confirms.\n     * @param {LibraryModel} library\n     * @param {boolean} isTeamLeave - whether this is an unfollow team library operation.\n     */\n    delete(library, isTeamLeave = false) {\n        if (LibraryUtils.isTeamLibrary(library)) {\n            this.context.dialogManager.openDialog('deleteTeamLibrary', {\n                leave: isTeamLeave,\n                library\n            });\n        } else {\n            this.context.dialogManager.openDialog('deleteLibrary', { library });\n        }\n    }\n\n    /**\n     * Opens the export library dialog.\n     * @param {LibraryModel} library\n     */\n    export(library) {\n        this.context.dialogManager.openDialog('importExportLibrary', { library, mode: 'export' });\n    }\n\n    /**\n     * Private function that opens the sharesheet with prepopulated collaborators\n     * @param {LibraryModel} library\n     * @param {Array} collaborators\n     */\n    _openShareSheetWithCollaborators(library, collaborators) {\n        // Only open share sheet if product has showShareSheetAfterPromote flag on and the\n        // original library had collaborators other than the owner\n        const collaboratorEmails = [];\n\n        collaborators.forEach(collaborator => {\n            if (collaborator.role !== 'owner') {\n                collaboratorEmails.push(collaborator.email);\n            }\n        });\n        if (collaboratorEmails.length) {\n            environment.showShareSheet(library, 'invite', collaboratorEmails);\n        }\n    }\n\n    _isCrossRepoMove(originalLibrary, targetProject) {\n        if (originalLibrary.team) {\n            return originalLibrary.team.owner.id !== targetProject.owner.id;\n        }\n        return originalLibrary.owner !== targetProject.owner.id;\n    }\n\n    /**\n     * Private function to check if a particular action is allowed or not\n     * @param {string} action\n     */\n    _isActionAllowed(action) {\n        const excludedActions = configuration.currentProduct.config.disabledLibraryContextMenuActions || [];\n        return !excludedActions.includes(action);\n    }\n\n    /**\n     * Opens the Move to team library dialog.\n     * @param {LibraryModel} originalLibrary\n     */\n    promote(originalLibrary) {\n        const projectsEnabled = featureFlags.get('enableProjects');\n        return new Promise((resolve, reject) => {\n            if (!projectsEnabled && LibraryUtils.isTeamLibrary(originalLibrary)) { return resolve(originalLibrary); }\n            this.context.dialogManager.openDialog('promoteLibrary', { library: originalLibrary, promote: (selectedFolder, permission) => {\n                if (featureFlags.get('enableProjects') && this._isCrossRepoMove(originalLibrary, selectedFolder)) {\n                    return this.context.dialogManager.openDialog('copyTeamLibrary', { library: originalLibrary, copy: (newName) => {\n                        this.context.toastManager.openToast('message', { variant: 'info', message: translate('DL_TEAM_LIBRARY_COPYING_TOAST_PROJECTS', { libraryName: newName || originalLibrary.name, projectName: selectedFolder.name }) });\n                        const copiedLibrary = this.context.libraryManager.copyLibrary(originalLibrary, selectedFolder, { permissionInheritance: permission, newName });\n                        when(() => !copiedLibrary.id.includes('PLACEHOLDER'), () => {\n                            this.context.toastManager.openToast('action', {\n                                variant: 'success', message: translate('DL_TEAM_LIBRARY_COPIED_TOAST_PROJECTS', { libraryName: copiedLibrary.name, projectName: selectedFolder.name }),\n                                action: { label: translate('DL_OPEN_LIBRARY'), onClick: () => environment.navigateToLibrary(copiedLibrary) } });\n                        });\n                    } });\n                }\n                metrics.reportEvent('Operations', 'Promote Team Library', 'click', 'start');\n                this.context.toastManager.openToast('message', { variant: 'info', message: translate('DL_TEAM_LIBRARY_MOVING_TOAST', { libraryName: originalLibrary.name, projectName: selectedFolder.name }) });\n\n                this.context.libraryManager.fetchLibraryCollaborations(originalLibrary)\n                    .catch(() => Promise.resolve())\n                    .then(() => {\n                        try {\n                            this.context.libraryManager.moveLibrary(originalLibrary, selectedFolder, { permissionInheritance: this.permission });\n                            metrics.reportEvent('Operations', 'Promote Team Library', 'click', 'finish');\n                            // After the desired library has been moved, we want to set it to be the current library\n                            // But make sure the promoted library has appeared in the team collection list first\n                            const handlePromotedLibrary = (promotedLib) => {\n                                // If there already is a current library, then don't proceed\n                                if (!this.context.libraryManager.currentLibrary || this.context.libraryManager.currentLibrary.id === originalLibrary.id) {\n                                    const handleLibraryOpen = () => {\n                                        environment.navigateToLibrary(promotedLib);\n                                    };\n                                    this.context.toastManager.openToast('action', {\n                                        variant: 'success', message: translate('DL_TEAM_LIBRARY_SAVED_TOAST', { libraryName: originalLibrary.name, projectName: selectedFolder.name }),\n                                        action: { label: translate('DL_OPEN_LIBRARY'), onClick: handleLibraryOpen }\n                                    });\n                                    environment.navigateToLibrary(promotedLib);\n                                }\n\n                                if (configuration.currentProduct.config.showShareSheetAfterPromote) {\n                                    // The share sheet will not open until the promoted library is pushed to the server (has an assetId)\n                                    const pushedPromotedDisposer = when(() => promotedLib.isPushedToServer, () => {\n                                        this._openShareSheetWithCollaborators(promotedLib, originalLibrary.collaborators);\n                                    });\n                                    // If promotedLibrary is not pushed to server within a reasonable amount of time, we kill the reaction so that the sharesheet doesnt seem to be randomly opened later.\n                                    setTimeout(pushedPromotedDisposer, configuration.OPEN_SHARESHEET_TIMEOUT);\n                                }\n\n                                return resolve(promotedLib);\n                            };\n\n                            const createdPromotedDisposer = when(() => this.context.libraryManager.libraries.find(library => library.id === originalLibrary.id), () => {\n                                const promotedLib = this.context.libraryManager.libraries.find(library => library.id === originalLibrary.id);\n                                handlePromotedLibrary(promotedLib);\n                            });\n                            setTimeout(createdPromotedDisposer, 5000);\n                        } catch (error) {\n                            this.context.toastManager.openToast('message', { variant: 'error', message: translate('DL_TEAM_LIBRARY_MOVE_FAILED') });\n                            metrics.reportError('Operations', 'Promote Team Library', error && error.description, 'flyout-menu', 'promote-library-error', undefined, this.context.libraryManager.currentLibrary);\n                            return reject(error);\n                        }\n                    });\n            } });\n        });\n    }\n\n    /**\n     * Opens invite sharesheet when supported in the environment, forwards operation to Assets Web otherwise.\n     * @param {LibraryModel} library\n     * @param {boolean} isHeader\n     */\n    invite(library, isHeader = false) {\n        metrics.reportEvent('Library Operations', 'Collaboration', 'click', 'invite', { content: { category: isHeader ? 'Header' : 'List' } }, library);\n        if (environment.showShareSheet) {\n            environment.showShareSheet(library, LibraryUtils.isTeamLibrary(library) ? 'share' : 'invite', this.context.dialogManager);\n            return;\n        }\n        if (LibraryUtils.isCCDFiveThree()) {\n            const shareAction = LibraryUtils.isTeamLibrary(library) ? 'share' : 'invite';\n            this.context.libraryManager.openInCCD(`/assets/libraries/sharesheet/${shareAction}/${library.id}`);\n            return;\n        }\n        LinkUtils.openCollaborateURL(library);\n    }\n\n    /**\n     * Opens public link sharesheet when supported in the environment, forwards operation to Assets Web otherwise.\n     * @param {LibraryModel} library\n     * @param {boolean} isHeader\n     */\n    getLink(library, isHeader = false) {\n        if (environment.showShareSheet) {\n            metrics.reportEvent('Library Operations', 'Collaboration', 'click', 'share-link', { content: { category: isHeader ? 'Header' : 'List' } }, library);\n            environment.showShareSheet(library, 'getLink');\n            return;\n        }\n        if (LibraryUtils.isCCDFiveThree()) {\n            this.context.libraryManager.openInCCD(`/assets/libraries/sharesheet/getLink/${library.id}`);\n            return;\n        }\n        LinkUtils.openShareLibraryLinkURL(library);\n    }\n\n    /**\n     * Copy a team library to be a personal library\n     * @param {LibraryModel} library\n     */\n    async makeTeamPersonalCopy(library) {\n        if (library && LibraryUtils.isTeamLibrary(library)) {\n            const newLib = this.context.libraryManager.copyLibrary(library);\n            try {\n                this.context.libraryManager.currentLibrary = newLib;\n                this.context.toastManager.openToast('action',\n                    {\n                        variant: 'success', message: translate('DL_LIBRARY_PERSONAL_COPY_TOAST'),\n                        action: {\n                            label: translate('DL_OPEN_LIBRARY_COPY'),\n                            id: 'personalCopy',\n                            onClick: () => environment.navigateToLibrary(newLib)\n                        }\n                    });\n                metrics.reportEvent('Operations', 'Personal Copy Team Library', 'click', 'finish');\n            } catch (error) {\n                metrics.reportError('Operations', 'Personal Copy Team Library', error && error.description, 'flyout-menu', 'personal-copy-library-error', undefined, this.context.libraryManager.currentLibrary);\n                this.context.toastManager.openToast('message', { variant: 'error', message: translate('DL_TEAM_LIBRARY_COPY_FAILED') });\n                this.context.libraryManager.deleteLibrary(newLib);\n            }\n        }\n    }\n    /**\n     * Duplicate a library\n     * @param {LibraryModel} library\n     */\n    async duplicateLibrary(library) {\n        if (!library) {\n            return;\n        }\n        try {\n            // Add metrics as per CCXW-20824\n            this.context.libraryManager.copyLibrary(library);\n        } catch (error) {\n            // Add metrics as per CCXW-20824\n        }\n    }\n\n    /**\n     * Get actions for a library\n     * @param {LibraryModel} library\n     * @param {boolean} isHeader\n     * @param {boolean} isRecent\n     * @param {boolean} useRenameDialog\n     */\n    getLibraryActions(library, isHeader = false, isRecent = false, useRenameDialog = false) {\n        const collaborationType = library.collaboration || (LibraryUtils.isPublicLibrary(library) ? 'bookmarked' : 'private');\n        const isBrandLibrary = BrandUtils.isBrandLibrary(library);\n        const libraryFilter = isBrandLibrary ? 'brands' : 'libraries';\n        const handleRename = () => {\n            metrics.reportEvent('Operations', libraryFilter, 'click', 'rename', {}, library);\n            if (isHeader) {\n                environment.setHeader(true, true);\n            } else if (isRecent) {\n                // Need to use proxy here so that the viewManager.renamingItem.id includes \"-recent\" flag\n                const proxyLib = new Proxy(library, {\n                    get: (target, prop) => prop === 'id' ? `${target.id}${configuration.RECENT_LIBRARY_ID_FLAG}` : target[prop]\n                });\n                this.context.viewManager.startRename(proxyLib);\n            } else if (useRenameDialog) {\n                this.context.dialogManager.openDialog('renameLibrary', { library });\n            } else {\n                this.context.viewManager.startRename(library);\n            }\n        };\n\n        const canInvite = library.isPushedToServer && library.isWritable && !library.toolkitId && this.context.libraryManager.isSharingEnabled && this._isActionAllowed('invite');\n        const canShareLink = library.isPushedToServer && library.isWritable && !library.toolkitId && this.context.libraryManager.isSharingEnabled && !LibraryUtils.isTeamLibrary(library) && this._isActionAllowed('getLink');\n        const canExport = environment.supportsFilePicker && library.elements.length > 0 && !library.isDeletedFromServer && this._isActionAllowed('export');\n        const isStyleguideEnabled = library.isPushedToServer && LibraryUtils.isStyleGuideEnabled(library);\n        const showDuplicate = library.isWritable && configuration.currentProduct.config.showLibraryActionDuplicate;\n\n        const actions = [\n            isStyleguideEnabled && {\n                id: 'styleguide',\n                label: LibraryUtils.getStyleguideLabel(library),\n                onClick: () => LinkUtils.openStyleguideURL(library),\n                enableMenu: true,\n                hideIcon: true,\n            },\n            canInvite && {\n                id: 'invite',\n                label: translate('DL_FLYOUT_COLLABORATE'),\n                onClick: () => this.invite(library, isHeader),\n                enableMenu: true,\n                icon: 'Invite',\n                hideIcon: true,\n            },\n            canShareLink && {\n                id: 'getLink',\n                label: translate('DL_FLYOUT_SHARE_LINK'),\n                onClick: () => this.getLink(library, isHeader),\n                enableMenu: true,\n                hideIcon: true,\n            },\n            (canInvite || canShareLink) && {\n                id: 'shareDivider',\n                divider: true,\n            },\n            canExport && {\n                id: 'export',\n                label: translate('DL_EXPORT'),\n                enableMenu: true,\n                onClick: () => this.export(library),\n                hideIcon: true,\n            },\n            canEditInSource(library) && {\n                id: 'editInSource',\n                label: translate('DL_EDIT_IN_SOURCE'),\n                enableMenu: true,\n                onClick: () => editInSource(library)\n            },\n            !library.isDocumentAssets && LibraryUtils.isLibraryRenameable(library) && {\n                id: 'rename',\n                label: translate('DL_RENAME'),\n                enableMenu: true,\n                onClick: handleRename,\n                icon: 'Rename',\n                hideIcon: !configuration.currentProduct.config.showLibraryActionMenuIcons,\n            },\n            showDuplicate && {\n                id: 'duplicate',\n                label: translate('DL_DUPLICATE_ITEM'),\n                enableMenu: true,\n                onClick: () => this.duplicateLibrary(library),\n                icon: 'Duplicate',\n                hideIcon: !configuration.currentProduct.config.showLibraryActionMenuIcons\n            }\n        ].filter(x => x);\n\n        // Add Leave/Unfollow option, if applicable\n        if (!LibraryUtils.isIncomingApprovedBrandLibrary(library) && !LibraryUtils.isTeamLibrary(library) && LibraryUtils.isSharedWithMe(library) && !library.toolkitId) {\n            actions.push({\n                id: 'leave',\n                label: collaborationType === 'bookmarked' ? translate(BrandUtils.isBrandLibrary(library) ? 'DL_REMOVE_FROM_YOUR_BRANDS' : 'DL_REMOVE_FROM_YOUR_LIBRARIES') : translate('DL_LEAVE'),\n                enableMenu: true,\n                onClick: () => this.delete(library, false),\n                destructive: true,\n                icon: 'Leave',\n                hideIcon: true\n            });\n        }\n\n        // Add Delete option, if applicable\n        if (!library.isDocumentAssets && !LibraryUtils.isTeamLibrary(library) && LibraryUtils.isLibraryDeletable(library)) {\n            actions.push({\n                id: 'delete',\n                label: translate('DL_DELETE'),\n                enableMenu: true,\n                onClick: () => this.delete(library, false),\n                destructive: true,\n                icon: 'Delete',\n                hideIcon: !configuration.currentProduct.config.showLibraryActionMenuIcons\n            });\n        }\n\n        // Team-specific actions\n        if (LibraryUtils.isTeamLibrary(library) && !configuration.currentProduct.config.hideTeamLibraryAction) {\n            actions.push({\n                id: 'personalCopy',\n                label: translate('DL_LIBRARY_SAVE_PERSONAL_COPY'),\n                enableMenu: true,\n                onClick: () => this.makeTeamPersonalCopy(library),\n                hideIcon: true,\n            },\n            library.isPushedToServer && !library.isDeletedFromServer && {\n                id: 'leaveTeamLibrary',\n                label: translate(BrandUtils.isBrandLibrary(library) ? 'DL_REMOVE_FROM_YOUR_BRANDS' : 'DL_REMOVE_FROM_YOUR_LIBRARIES'),\n                enableMenu: true,\n                onClick: () => this.delete(library, true),\n                hideIcon: true,\n            },\n            LibraryUtils.isLibraryDeletable(library) && {\n                id: 'delete',\n                label: translate('DL_DELETE'),\n                enableMenu: true,\n                onClick: () => this.delete(library, false),\n                hideIcon: true,\n            });\n        }\n\n        const canPromote = !configuration.currentProduct.config.hideLibraryActionPromote && LibraryUtils.isTeamLibrariesEnabled() && this.context.libraryManager.platformFolders.length > 0 && !LibraryUtils.isTeamLibrary(library)\n            && library.isPushedToServer && library.isWritable && !library.toolkitId\n            && LibraryUtils.isOwnedLibrary(library) && this.context.libraryManager.isOnline;\n\n        const availableProjects = this.context.libraryManager.platformFolders.filter(team => team.id !== library.project?.id);\n        const canMoveOrCopy = !configuration.currentProduct.config.hideLibraryActionMoveCopy && LibraryUtils.isTeamLibrariesEnabled() && availableProjects.length > 0\n            && library.isPushedToServer && library.isWritable && !library.toolkitId\n            && this.context.libraryManager.isOnline;\n\n        if (featureFlags.get('enableProjects') ? canMoveOrCopy : canPromote) {\n            actions.push({\n                id: 'promoteTeamLib',\n                label: translate('DL_PROMOTE'),\n                enableMenu: !this.context.viewState.isImportExportInProgress,\n                onClick: () => {\n                    this.promote(library);\n                },\n                hideIcon: true,\n            });\n        }\n\n        if (featureFlags.get('brandFeatureEnabled') && this.context.viewState.isLibraryWritable(library, false, true)) {\n            const label = translate(isBrandLibrary ? 'DL_UNBRAND' : 'DL_BRAND');\n            const id = isBrandLibrary ? 'unbrand' : 'brand';\n            actions.push(\n                {\n                    id: 'brandDivider',\n                    divider: true\n                },{\n                    id,\n                    label,\n                    enableMenu: true,\n                    onClick: () => {\n                        metrics.reportEvent('Operations', libraryFilter, 'click', id, {}, library);\n                        isBrandLibrary ? appState.panel.brandActions.unbrandLibrary(library) : appState.panel.brandActions.brandLibrary(library);\n                    }\n                });\n        }\n\n        return actions.filter(x => x);\n    }\n\n    /**\n     * Determines if the given name can be assigned to the given library.\n     * Optional side-effect of showing a toast when the name is not valid.\n     * @param {string} name\n     * @param {Folder} folder\n     * @param {boolean} showToast\n     * @returns {boolean}\n     */\n    validateLibraryName(name, folder, showToast = false) {\n        // Get the value, no toasts, we'll handle them here.\n        const isValid = LibraryUtils.validateLibraryName(name);\n        const isUnique = !folder || !LibraryUtils.duplicateLibraryName(name, folder);\n        if (showToast && !isValid) {\n            this.context.toastManager.openToast('message', { variant: 'error', message: translate('DL_LIBRARY_NAME_INVALID') });\n        } else if (showToast && !isUnique) {\n            this.context.toastManager.openToast('message', { variant: 'error', message: translate('DL_LIBRARY_NAME_DUPLICATE') });\n        }\n        return isValid && isUnique;\n    }\n\n    /**\n     * Synchronously auto creates groups for all elements in an empty library according to the {@link https://wiki.corp.adobe.com/pages/viewpage.action?spaceKey=ccexperience&title=Custom+Groups+in+Library+Panel#CustomGroupsinLibraryPanel-UpdatedTaxonomyGreenFinal \"Updated Taxonomy.\"}\n     * The order of the groups is from the Updated Taxonomy table. The order of the elements within the groups is by type, the same as in view-by-type, and then by name.\n     * Also reports analytics for create group events (aggregate and single).\n     * @param {Library} library\n     */\n    autogenerateEmptyLibraryGroups(library) {\n        const groupedElements = {};\n        // Sort elements by type and, secondarily, name\n        const sections = elementConfiguration.groupElementsByType(library.elements, 'name');\n        const orderedElements = sections.reduce((elements, section) => elements.concat(section.children), []);\n        orderedElements.forEach(element => {\n            // get name of the auto group for the element under the new taxonomy\n            const name = elementConfiguration.getAutoGroupName(element);\n            if (!groupedElements[name]) {\n                groupedElements[name] = [];\n            }\n            groupedElements[name].push(element);\n        });\n\n        const groupNames = Object.keys(groupedElements);\n        const order = groupName => configuration.AUTO_GROUPS_ORDER.indexOf(groupName);\n        // Sort groups in descending order, since the last created group is the one that goes on top.\n        groupNames.sort((nameA, nameB) => order(nameB) - order(nameA));\n\n        metrics.setExtraEventMetrics('updateElement', { subtype: 'add-to-group', content: { category: 'Auto Group' } });\n        library.beginOperation();\n        groupNames.forEach(name => {\n            // extra createGroup metrics are cleared after each event, so need to set them each time.\n            metrics.setExtraEventMetrics('createGroup', {\n                content: { category: 'Auto Group' },\n                event: { value: 'single' }\n            });\n            const group = LibraryUtils.createGroup(library, translate(name)); // adds new group to the top\n\n            LibraryUtils.addElementsToGroup(groupedElements[name], group, undefined, false); // TODO: Should we add 'auto group' to the add to group metrics?\n        });\n        library.endOperation();\n        metrics.reportEvent('Create Group', 'Group', 'click', 'create', {\n            event: { value: 'agg', count: groupNames.length },\n            content: { category: 'Auto Group' }\n        });\n        metrics.reportEvent('Element Operations', 'Element', 'click', 'add-to-group', {\n            event: { value: 'agg', count: orderedElements.length },\n            content: { category: 'Auto Group' }\n        });\n    }\n\n    /**\n     * Open the Create Brand library dialog, and after a successful create, assign the brand role and navigate to that library\n     */\n    createBrandLibrary() {\n        this.context.dialogManager.openDialog('createLibrary', { createTitle: 'DL_CREATE_NEW_BRAND_LIBRARY', createPlaceholder: 'DL_CREATE_NEW_BRAND_PLACEHOLDER', isCreatingBrand: true });\n    }\n}\n\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { when, action } from 'mobx';\nimport { isTeamLibrariesEnabled } from 'app/js/utils/libraryUtils';\nimport environment from 'app/js/environment';\nimport metrics from 'app/js/interface/metrics';\nimport { BaseState } from 'app/js/state/BaseState';\nimport configuration from 'app/js/config/configuration';\nimport { translate } from 'app/js/managers/translationManager';\nimport { openAskCollaboratorsForAccessURL } from 'app/js/utils/linkUtils';\n\n/**\n * Handles stateful document library actions.\n */\n\nexport class DocumentAssetsActions extends BaseState {\n\n    /**\n     * Publishes or opens the publish team library dialog\n     * @param {DocumentAssetsContainer} assetsContainer - the document assets to publish.\n     * @returns {Promise<LibraryModel>}\n     */\n    publish(assetsContainer) {\n        if (!environment.isSavedCloudDocument) {\n            return new Promise(resolve => {\n                // Prompt the user to save as cloud document and then publish.\n                return this.context.dialogManager.openDialog('saveCloudDoc', { onSave: () => resolve(this.publish(assetsContainer)) });\n            });\n        }\n\n        // If the document points to a library that doesn't point back, give the option to relink (steal) it.\n        if (this.context.libraryManager.publishState.isPublishedLibraryNotFound) {\n            return this.relinkDocument(assetsContainer);\n        }\n\n        // If the library is already published, just update it directly.\n        if (this.context.libraryManager.publishState.isPublished) {\n            return this.context.libraryManager.publish(assetsContainer);\n        }\n\n        // We need to wait for the document to sync before publishing.\n        const publish = folder => environment.waitForCloudAssetId().then(() =>\n            // As soon as the library is created and uploaded (has an asset id), we should open the sharesheet.\n            this.context.libraryManager.publish(assetsContainer, folder).then(this._openShareSheet)\n        );\n\n        // If the user doesn't have org storage, publish to their personal space.\n        const hasLinkedElements = assetsContainer.elements.some(element => element.isLinked);\n        const linkedAnalyticsValue = hasLinkedElements ? 'local-and-linked' : 'local';\n        if (!isTeamLibrariesEnabled()) {\n            const analyticsProperties = {\n                event: { value: 'Private', count: assetsContainer.getGroups().length },\n                content: { type: linkedAnalyticsValue },\n            };\n            metrics.reportEvent('Manager', 'Manage', 'click', 'publish', analyticsProperties);\n            return publish();\n        }\n\n        // Determine the default team to display in publishing workflow\n        const availableFolders = this.context.libraryManager.platformFolders && this.context.libraryManager.platformFolders.filter(folder => folder.isWritable);\n        const defaultTeam = availableFolders.length && availableFolders[0] || undefined;\n\n        // Otherwise, let the user pick where they want to publish the library to.\n        return new Promise(resolve => {\n            this.context.dialogManager.openDialog(\n                'publishLibrary',\n                {\n                    assetsContainer,\n                    defaultTeam,\n                    onPublish: publishPromise => resolve(publishPromise.then(this._openShareSheet))\n                }\n            );\n        });\n    }\n\n    _openShareSheet = publishedLibrary => {\n        const dispose = when(\n            () => publishedLibrary.isPushedToServer,\n            () => environment.showShareSheet(publishedLibrary)\n        );\n        setTimeout(dispose, configuration.OPEN_SHARESHEET_TIMEOUT);\n    }\n\n    upgradeSubscription() {\n        environment.handleUpgradeButtonClicked();\n    }\n\n    /**\n     * Opens the relink library dialog.\n     * @param {DocumentAssetsContainer} assetsContainer - the document assets container to relink.\n     * @returns {Promise<LibraryModel>}\n     */\n    relinkDocument(assetsContainer) {\n        return new Promise(resolve => {\n            // Let the user decide if they want to publish assets as a new library or overwrite the current one.\n            this.context.dialogManager.openDialog('relinkDocumentLibrary', { onRelinkChoice: choice => {\n                // Note: if the user picks to publish as a new library, a new dialog might open (pick org).\n                // Attempting to add a new dialog immediately after removing another one causes some JS race-conditions on the react-spectrum Dialog component.\n                // The work-around below uses a Promise to essentially enqueue the adding of the new dialog until the \"browser\" is done unmounting the previous one.\n                // This works because a Promise's onFulfilled callback is only called once the stack is clear.\n                // Reference: https://promisesaplus.com/#point-34\n                Promise.resolve().then(() => {\n                    // User wants to create a fresh new library, so it's just the traditional publish operation.\n                    if (choice === 'createNew') {\n                        // Unlink the document from the old library and publish.\n                        environment.linkDocumentToLibrary();\n                        metrics.reportEvent('Manager', 'Manage', 'click', 'linkToNewDocLibrary');\n                        return resolve(this.publish(assetsContainer));\n                    }\n                    // User wants to replace the existing library's elements with the current document's assets, we'll trigger an update operation over it.\n                    return environment.waitForCloudAssetId().then(() => {\n                        metrics.reportEvent('Manager', 'Manage', 'click', 'relinkDocLibraryToDocument');\n                        return resolve(this.context.libraryManager.publish(assetsContainer));\n                    });\n                });\n            } });\n        });\n    }\n\n    /**\n     * Opens the relink asset dialog.\n     * For assets linked to published libraries, it allows the user to select a different library and relink the asset to a matching element in it.\n     * @param {DocumentElement} asset - the document asset to relink.\n     * @returns {Promise<Object>}\n     * @property {DocumentElement[]} resolvedLinks assets successfully relinked and resolved.\n     * @property {DocumentElement[]} unresolvedLinks assets we failed to relink and resolve.\n     */\n    relinkAssetToLibrary(asset) {\n        if (!asset.canRelinkToLibrary) { return Promise.reject('Asset is not relinkable to a library.'); }\n\n        return new Promise(resolve => {\n            // The user will pick a library to relink the asset to, they can also choose whether they want to relink\n            // any other assets whose links are broken and are relinkable to the same library they picked for the original asset.\n            environment.openApplicationDialog('relinkDocumentAsset', {\n                element: asset,\n                onRelink: links => {\n                    const assets = [];\n                    const { documentAssetsContainer } = this.context.libraryManager;\n                    const totalMissingLinksBefore = documentAssetsContainer.missingLinks.length;\n\n                    links.forEach(({ asset, element }) => {\n                        // Create the link between the assets and the new elements.\n                        asset.newLinkedElementRef = element.getReference();\n                        assets.push(asset);\n                    });\n\n                    // Commit the new links.\n                    return environment.updateLinkedAssets(assets).finally(() => {\n                        // Clear the link update setting.\n                        assets.forEach(asset => {\n                            asset.newLinkedElementRef = null;\n                        });\n                        metrics.reportEvent('RelinkDocumentAssetDialog', 'Element', 'click', 'relinkAssetToLibrary');\n\n                        // Resolve with the links' current status.\n                        resolve(this._getLinksResolutionStatus(assets));\n                        // Show success/error toast.\n                        this._showLinksResolutionStatus({ elements: assets, totalMissingLinksBefore });\n                    });\n                },\n                // No links resolved.\n                onCancel: () => resolve({ resolvedLinks: [], unresolvedLinks: [ asset ] })\n            });\n        });\n    }\n\n    /**\n     * Opens the relink orphaned libraries dialog, which will allow the user to select an orphaned library and relink the document to it.\n     * Then document assets will be published to the newly linked library.\n     * @param {DocumentAssetsContainer} documentAssetsContainer - the document assets library to publish to the relinked orphan library\n     * @returns {Promise<LibraryModel>}\n     */\n    relinkDocumentToOrphanedLibrary(documentAssetsContainer) {\n        this.context.dialogManager.openDialog('relinkOrphanedDocumentLibrary', {\n            relinkToOrphanLibrary: action((orphanPublishedLibrary) => { // delay updates to publish state till end of action\n                environment.linkDocumentToLibrary(orphanPublishedLibrary.id);\n                metrics.reportEvent('Manager', 'Manage', 'click', 'relinkToOrphanLibrary');\n                // Diff to see if we actually need to republish\n                // Note that in this one scenario, a different name on the document may trigger a publish\n                if (environment.documentName !== orphanPublishedLibrary.name || this.context.libraryManager.publishState.isPendingUpdate) {\n                    this.publish(documentAssetsContainer);\n                }\n            })\n        });\n    }\n\n    /**\n    * Attempt to resolve the given broken links and show progress, success and error toasts as applicable.\n    * A broken link may be resolved for a user if one of two conditions apply:\n    * - The user has been invited to the source element's library, they just need to accept the invitation.\n    * - The user has access to the source element's library via a team, they just need to follow it.\n    * @param {DocumentElement[]} elements the assets with missing links to attempt to resolve.\n    */\n    resolveLinks(elements) {\n        const promises = [];\n        const librariesToFollow = new Set();\n        const librariesToAccept = new Set();\n\n        elements.forEach(element => {\n            const libraryId = element.cachedLinkedLibraryId;\n            const assetId = element.cachedLinkedLibraryAssetId;\n            const libraryData = Object.freeze({ assetId, libraryId });\n\n            if (element.isPendingInvite) {\n                librariesToAccept.add(libraryData);\n            }\n            if (element.isPendingFollow) {\n                librariesToFollow.add(libraryData);\n            }\n        });\n\n        if (!librariesToFollow.size && !librariesToAccept.size) {\n            return Promise.reject('No resolvable broken links found');\n        }\n\n        if (librariesToAccept.size) {\n            // Note that we could be more precise and accept only the invitations that would resolve the given missing links,\n            // but the current requirement is to accept all pending invitations. If we ever want to make the resolution\n            // more granular, all we need to do is go through each library in the set and accept it.\n            metrics.reportEvent('ResolveBrokenLinksDialog', 'resolveLinks', 'click', 'acceptLibraryInvites');\n            promises.push(this.context.libraryManager.acceptAllLibraryInvitations());\n        }\n\n        librariesToFollow.forEach(({ assetId, libraryId }) => {\n            metrics.reportEvent('ResolveBrokenLinksDialog', 'resolveLinks', 'click', 'followTeamLibrary');\n            promises.push(this.context.libraryManager.followLibrary(assetId, libraryId));\n        });\n\n        return this._showLinkResolutionProgress(Promise.all(promises), elements);\n    }\n\n    /**\n    * Show a series of toasts informing the user of the state of the given element's link resolution operation.\n    * @param {Promise} resolutionOp the operation being used to resolve the missing links.\n    * @param {DocumentElement[]} elements the assets with missing links that resolutionOp is attempting to resolve.\n    */\n    _showLinkResolutionProgress(resolutionOp, elements) {\n        if (!resolutionOp || !elements || !elements.length) { return; }\n\n        const { libraryManager, toastManager } = this.context;\n        const { library: documentAssetsContainer } = elements[0];\n        // It's possible we resolve other missing links as a side effect of resolutionOp; we want to tell the user about it!\n        const totalMissingLinksBefore = documentAssetsContainer.missingLinks.length;\n\n        return new Promise(resolve => {\n            // Kick off the fake \"working\" UI syncing state to give the user something to look at while the real syncing starts.\n            libraryManager.showSyncSpinner();\n            toastManager.openToast('syncProgress');\n\n            return resolutionOp.finally(() => {\n                // When we're done syncing check if any links got resolved and inform the user.\n                when(() => ![ 'working', 'syncing' ].includes(libraryManager.syncStatus.state), () => {\n                    // Resolve with the links' current status.\n                    resolve(this._getLinksResolutionStatus(elements));\n\n                    // Show success/error toasts when we know the progress toast has been unmounted.\n                    when(() => !toastManager.toast, () => this._showLinksResolutionStatus({ elements, totalMissingLinksBefore }));\n                });\n            });\n        });\n    }\n\n    _getLinksResolutionStatus(elements) {\n        const resolvedLinks = [];\n        const unresolvedLinks = [];\n\n        elements.forEach(element => {\n            const resolutionSet = element.isMissingLink || element.isDeprecatedLegacyDocumentLink ? unresolvedLinks : resolvedLinks;\n            resolutionSet.push(element);\n        });\n\n        return { resolvedLinks, unresolvedLinks };\n    }\n\n    _showLinksResolutionStatus({ elements, totalMissingLinksBefore }) {\n        const { library: documentAssetsContainer } = elements[0];\n        const { resolvedLinks, unresolvedLinks } = this._getLinksResolutionStatus(elements);\n\n        if (unresolvedLinks.length) {\n            // Some links failed to resolve, show error toast.\n            this._showUnresolvedLinksStatus({ unresolvedLinks });\n        } else {\n            // All links were successfully resolved, show success toast.\n            const totalMissingLinksAfter = documentAssetsContainer.missingLinks.length;\n            this._showResolvedLinksStatus({ elements, resolvedLinks, totalMissingLinksBefore, totalMissingLinksAfter });\n        }\n    }\n\n    _showResolvedLinksStatus({ elements, resolvedLinks, totalMissingLinksBefore, totalMissingLinksAfter }) {\n        const { toastManager } = this.context;\n\n        if (elements.length > 1) {\n            // We were targeting multiple links, show how many total links were resolved.\n            const totalResolved = totalMissingLinksBefore - totalMissingLinksAfter;\n            toastManager.openToast('message', { variant: 'success', message: translate('DL_RESOLVE_BROKEN_LINK_TOAST_SUCCESS_NUM', { count: totalResolved }) });\n        } else {\n            // We were targeting a single link, say we resolved it, along with any other links that were also resolved as a side effect, if any.\n            const additionalResolvedLinks = totalMissingLinksBefore - (totalMissingLinksAfter + resolvedLinks.length);\n            if (!additionalResolvedLinks) {\n                // No additional resolved links.\n                return toastManager.openToast('message', { variant: 'success', message: translate('DL_RESOLVE_BROKEN_LINK_TOAST_SUCCESS') });\n            }\n            const label = additionalResolvedLinks > 1 ? 'DL_RESOLVE_BROKEN_LINK_TOAST_SUCCESS_ADDITIONAL_NUM' : 'DL_RESOLVE_BROKEN_LINK_TOAST_SUCCESS_ADDITIONAL_SINGULAR';\n            toastManager.openToast('message', { variant: 'success', message: translate(label, { count: additionalResolvedLinks }) });\n        }\n    }\n\n    _showUnresolvedLinksStatus({ unresolvedLinks }) {\n        const { toastManager } = this.context;\n        const learnMore = { label: translate('DL_LEARN_MORE'), onClick: () => openAskCollaboratorsForAccessURL() };\n\n        if (unresolvedLinks.length > 1) {\n            // We weren't able to resolve multiple links, show a generic error message.\n            toastManager.openToast('action', { variant: 'error', message: translate('DL_RESOLVE_BROKEN_LINK_TOAST_ERROR_NUM', { count: unresolvedLinks.length }), action: learnMore });\n        } else {\n            // We weren't able to resolve a specific link, tell the user why.\n            const element = unresolvedLinks[0];\n            // Check if there are matches for the asset in other libraries.\n            // Note that we use the cached relinkable assets data to make a best-effort attempt without sacrificing performance.\n            const relinkCandidates = this.context.libraryManager.relinkableAssetsData.assets?.get(element.id);\n            if (relinkCandidates?.length) {\n                // If the asset has matching elements in other libraries, suggest they relink to one of those libraries.\n                return toastManager.openToast('action', { variant: 'error', message: translate('DL_RESOLVE_BROKEN_LINK_TOAST_ERROR_MISSING_ELEMENT_MATCH'), action: learnMore });\n            }\n            if (element.isMissingElement) {\n                // If the asset has no matching elements, suggest they make it local if they want to edit it.\n                return toastManager.openToast('message', { variant: 'error', message: translate('DL_RESOLVE_BROKEN_LINK_TOAST_ERROR_MISSING_ELEMENT_NO_MATCH') });\n            }\n            // Give generic error suggesting that the user request access to the source library.\n            toastManager.openToast('action', { variant: 'error', message: translate('DL_RESOLVE_BROKEN_LINK_TOAST_ERROR'), action: learnMore });\n        }\n    }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"sectionHeader\":\"ich\",\"currentLabel\":\"PLe\",\"labelText\":\"sDg\",\"label\":\"C0y\",\"dropdownIcon\":\"VqV\",\"dropdown\":\"n1f\"};","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport classNames from 'classnames';\nimport Icon from 'app/js/components/Icon';\nimport BaseDropdown from 'app/js/components/panel-header/BaseDropdown';\nimport { translate } from 'app/js/managers/translationManager';\nimport configuration from 'app/js/config/configuration';\n\nimport styles from './index.scss';\n\n@observer\nexport default class TeamLibraryPermissionSelector extends React.Component {\n\n    @observable customLabelRef;\n    static dropdownOptions = [\n        {\n            label: 'DL_CAN_VIEW_AND_USE',\n            id: 'visibility',\n            icon: <Icon id=\"Visibility\" height={18} />,\n            key: 'read'\n        },\n        {\n            label: 'DL_CAN_EDIT',\n            id: 'editPermission',\n            icon: <Icon id=\"Edit\" height={18} />,\n            key: 'all'\n        }\n    ]\n\n    static propTypes = {\n        onPermissionChange: PropTypes.func.isRequired,\n        defaultPermission: PropTypes.oneOf([ 'read', 'all' ])\n    }\n\n    static defaultProps = {\n        defaultPermission: 'read'\n    }\n\n    @observable.ref selectedPermission;\n\n    componentDidMount() {\n        const initialPermission = TeamLibraryPermissionSelector.dropdownOptions.find(permission => permission.key === this.props.defaultPermission) || TeamLibraryPermissionSelector.dropdownOptions[0];\n        this.onDropdownSelectionHandler(initialPermission);\n    }\n\n    onDropdownSelectionHandler(option) {\n        this.selectedPermission = option;\n        this.props.onPermissionChange(option.key);\n    }\n\n    setCustomLabelRef = (ref) => { this.customLabelRef = ref; };\n    getLabel(option, currentLabel = false) {\n        if (option) {\n            return (\n                <div ref={this.setCustomLabelRef} tabIndex={currentLabel ? '0' : null} className={classNames(styles.label, 'label', {\n                    [styles.currentLabel]: currentLabel\n                })}>\n                    {option.icon}\n                    <div className={styles.labelText}>{translate(option.label)}</div>\n                    {currentLabel && <div className={classNames(styles.dropdownIcon, 'dropdown-icon')}><Icon id=\"ChevronDownSmall\" height={ configuration.currentProduct.config.dropdownChevronHeight || 8 } /></div>}\n                </div >\n            );\n        }\n    }\n\n    get dropdownData() {\n        return TeamLibraryPermissionSelector.dropdownOptions.map(option => ({\n            ...option,\n            label: option && this.getLabel(option),\n            onClick: () => this.onDropdownSelectionHandler(option),\n            isSelected: this.selectedPermission && this.selectedPermission.key === option.key\n        }));\n    }\n\n    render() {\n        return (\n            <div className={styles.container}>\n                <div className={styles.sectionHeader} data-test-id=\"team-permissions-dropdown-label\">\n                    {translate('DL_PERMISSION_TITLE')}\n                </div>\n                <div className={styles.dropdown}>\n                    <BaseDropdown\n                        data={this.dropdownData}\n                        type=\"team-permissions\"\n                        currentLabel={this.getLabel(this.selectedPermission, true)}\n                        className=\"team-permissions-dropdown\"\n                        wrapCustomLabel={false}\n                        customLabelRef={this.customLabelRef}\n                        locationBasedOnLabel={true}\n                    />\n                </div>\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n// https://opensource.adobe.com/spectrum-web-components/components/switch/\n// https://git.corp.adobe.com/torq/react-spectrum/tree/develop/src/switch\nimport React, { useEffect, useRef } from 'react';\nimport type { Switch as SwitchType } from '@ccx-public/spectrum-web-component-fallbacks/dist/switch';\nimport { filterBooleanProps, useComponent } from './utils';\nimport createWrapper from './utils/createWrapper';\nimport { SWCLoader } from './utils/SWCLoader';\nimport interopRequireDefault from './utils/interopRequireDefault';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Switch: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Switch')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\nif (!process.env.EXCLUDE_SWC) {\n    swcLoader = new SWCLoader(['sp-switch'], async () => {\n        const { Switch } = await import(\n            /* webpackChunkName: \"SpSwitch\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/switch'\n        );\n        return [Switch];\n    });\n}\n\ntype RS2CompatProps = {\n    /**\n     * The label to display with the Switch\n     */\n    label?: string;\n\n    /**\n     * Flag that decides whether to display label\n     */\n    renderLabel?: boolean;\n    /**\n     * Flag that decides black/blue checks of Switch\n     */\n    quiet?: boolean;\n    onChange?: (value: boolean, event: Event) => unknown;\n    /**\n     * SWC doesn't support fully controlling the checked state.\n     * Adding defaultChecked for RS2 compatability but checked and defaultChecked now behave the same.\n     */\n    defaultChecked?: boolean;\n};\n\nexport default createWrapper<SwitchType, RS2CompatProps>({\n    displayName: 'Switch',\n    fallback: RS2Switch,\n    swcLoader,\n    SWCWrapper: (props) => {\n        const switchWrapperRef = useRef<SwitchType>(null);\n        const {\n            renderLabel = true,\n            label,\n            className,\n            checked,\n            defaultChecked,\n            disabled,\n            children,\n            quiet,\n            onChange,\n            ...rest\n        } = props;\n\n        useEffect(() => {\n            const current = switchWrapperRef.current;\n\n            const change = (event: Event) => {\n                const target = event.target as SwitchType;\n                onChange?.(target.checked, event);\n            };\n\n            if (current && onChange) {\n                current.addEventListener('change', change);\n            }\n\n            return () => {\n                if (current && onChange) {\n                    current.removeEventListener('change', change);\n                }\n            };\n        }, [onChange]);\n\n        // Differences:\n        // ReactSpectrum           | SpectrumWebComponent\n        // ---------------------------------------------\n        // label                   | label is directly passed as innerHTML text\n\n        const Switch = useComponent('sp-switch');\n        return (\n            <Switch\n                {...rest}\n                {...filterBooleanProps({\n                    checked: checked ?? defaultChecked,\n                    disabled,\n                    emphasized: !quiet,\n                })}\n                class={className}\n                ref={switchWrapperRef}\n            >\n                {renderLabel ? label : ''}\n                {children}\n            </Switch>\n        );\n    },\n    tagName: 'sp-switch',\n});\n","// extracted by mini-css-extract-plugin\nexport default {\"sectionHeader\":\"u9N\",\"switch\":\"OiU\",\"helpIconContainer\":\"upE\",\"helpIconInnerContainer\":\"eZX\",\"helpIcon\":\"gs_\",\"disableDropdown\":\"Gx_\"};","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport Icon from 'app/js/components/Icon';\nimport { translate } from 'app/js/managers/translationManager';\nimport Switch from '@ccx-public/spectrum-wrapper/Switch';\nimport environment from 'app/js/environment';\nimport Tooltip from 'app/js/components/Tooltip';\n\nimport styles from './index.scss';\n\n@observer\nexport default class TeamLibraryPermissionSwitch extends React.Component {\n\n    @observable customLabelRef;\n\n    static switchOptions = [\n        {\n            switchOn: true,\n            key: 'read'\n        },\n        {\n            switchOn: false,\n            key: 'all'\n        },\n\n    ];\n\n    static propTypes = {\n        onPermissionChange: PropTypes.func.isRequired,\n        defaultPermission: PropTypes.oneOf([ 'read', 'all' ]),\n        isBrandLibrary: PropTypes.boolean\n    }\n\n    static defaultProps = {\n        defaultPermission: 'read'\n    }\n\n    @observable.ref selectedPermission;\n\n    componentDidMount() {\n        const initialPermission = TeamLibraryPermissionSwitch.switchOptions.find(permission => permission.key === this.props.defaultPermission) || TeamLibraryPermissionSwitch.switchOptions[0];\n        this.onSwitchSelectionHandler(initialPermission);\n    }\n\n    onSwitchSelectionHandler(option) {\n        this.selectedPermission = option;\n        this.props.onPermissionChange(option.key);\n    }\n\n    onSwitchChange = (value) => {\n        this.onSwitchSelectionHandler(TeamLibraryPermissionSwitch.switchOptions[value ? 0 : 1]);\n    }\n\n    get showHelp() {\n        return !environment.isMobileView;\n    }\n\n    render() {\n        return (\n            <div className={styles.container} data-test-id=\"team-permissions-switch-wrapper\">\n                <div className={styles.sectionHeader} data-test-id=\"team-permissions-switch-label\">\n                    {translate('DL_PROJECT_PERMISSION_TITLE')}\n                </div>\n                <div className={styles.switch}>\n                    <Switch data-test-id=\"team-permissions-switch\" onChange={ this.onSwitchChange } checked={this.selectedPermission?.switchOn} quiet label={ translate('DL_PROJECT_PERMISSION_SWITCH_LABEL') }/>\n                    {this.showHelp && <div className={styles.helpIconContainer} data-test-id=\"switch-help-icon\">\n                        <Tooltip content={translate(this.props.isBrandLibrary ? 'DL_PROJECT_PERMISSION_SWITCH_INFO_BRAND' : 'DL_PROJECT_PERMISSION_SWITCH_INFO_LIBRARY')}>\n                            <span tabIndex=\"0\" className={styles.helpIconInnerContainer}><Icon id=\"InfoOutline\" className={styles.helpIcon} height={18} /></span>\n                        </Tooltip>\n                    </div>}\n                </div>\n            </div>\n        );\n    }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"teamSelector\":\"I6b\",\"container\":\"AKl\",\"sectionHeader\":\"K_-\",\"label\":\"vdc\",\"noSubtext\":\"l02\",\"iconContainer\":\"Rot\",\"labelTextContainer\":\"Bps\",\"overflow\":\"ttK\",\"labelSubText\":\"xOS\",\"nonDropdownLabel\":\"q19\",\"dropdownRow\":\"UK0\",\"dropdown\":\"ykH\",\"helpIconContainer\":\"rix\",\"helpIconInnerContainer\":\"weW\",\"helpIcon\":\"NI9\",\"permissionSelector\":\"IH7\",\"alignCenter\":\"W3d\",\"labelIcon\":\"V93\",\"smallIcon\":\"gBt\",\"labelPersonal\":\"GXj\"};","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { observer } from 'mobx-react';\nimport { observable, computed } from 'mobx';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport BaseDropdown from 'app/js/components/panel-header/BaseDropdown';\nimport { translate } from 'app/js/managers/translationManager';\nimport Icon from 'app/js/components/Icon';\nimport TeamLibraryPermissionSelector from 'app/js/components/TeamLibraryPermissionSelector';\nimport TeamLibraryPermissionSwitch from 'app/js/components/TeamLibraryPermissionSwitch';\nimport Tooltip from 'app/js/components/Tooltip';\nimport ProjectGradient from 'app/js/components/ProjectGradient';\nimport { Library } from '@cclibraries/cc-libraries-js';\n\nimport styles from './index.scss';\nimport environment from 'app/js/environment';\nimport featureFlags from 'app/js/config/featureFlags';\n\n@observer\nexport default class TeamSelector extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        onFolderChange: PropTypes.func.isRequired,\n        library: PropTypes.instanceOf(Library),\n        onPermissionChange: PropTypes.func,\n        className: PropTypes.string,\n        showPersonalFolder: PropTypes.bool,\n        personalFolderIsBrands: PropTypes.bool,\n        type: PropTypes.oneOf([ 'team-libraries', 'publish-team-libraries' ]),\n        maxHeight: PropTypes.number,\n        // to disable dropdown\n        isDisabled: PropTypes.bool,\n        // default team can be passed as platform folder\n        defaultTeam: PropTypes.object,\n        // default permission level when team storage is selected\n        defaultPermission: PropTypes.oneOf([ 'read', 'all' ]),\n        // to not show drop down options (current label is not disabled, different from isDisabled)\n        disableTeamSelection: PropTypes.bool,\n        // In dropdown options, folder to be disabled\n        disabledTeamIds: PropTypes.arrayOf(PropTypes.string),\n        // To show help icon with tooltip\n        showHelp: PropTypes.bool,\n        iconSize: PropTypes.oneOf([ 'S', 'M' ]),\n    }\n\n    @observable.ref selectedFolder;\n\n    static defaultProps = {\n        type: 'team-libraries',\n        showHelp: false,\n        disabledTeamIds: [],\n        onPermissionChange: () => { },\n        iconSize: 'M'\n    };\n\n    componentDidMount() {\n        this.context.libraryManager.refreshTeams();\n\n        if (this.props.defaultTeam) {\n            this.selectedFolder = this.props.defaultTeam;\n        } else if (!this.props.showPersonalFolder && this.teams.length > 0) {\n            // if a default team is not provided, should select the first available folder (that isn't disabled)\n            const firstAvailableFolder = this.teams.find(team => !this.props.disabledTeamIds.includes(team.id));\n            this.selectedFolder = firstAvailableFolder;\n            this.props.onFolderChange(firstAvailableFolder);\n        }\n        this.updateSelectedFolderPermission();\n    }\n\n    @computed\n    get teams() {\n        return this.context.libraryManager.platformFolders && this.context.libraryManager.platformFolders.filter(folder => folder.isWritable && folder.id !== this.props.library?.team?.id);\n    }\n\n    get currentLabel() {\n        return this.getLabel(this.selectedFolder);\n    }\n\n    get projectsEnabled() {\n        return featureFlags.get('enableProjects');\n    }\n\n    get disableProjectsPermissionSwitch() {\n        return this.selectedFolder?.owner?.type === 'user';\n    }\n\n    getPlainTextLabel(folder) {\n        if (folder) {\n            return folder.name;\n        }\n\n        if (this.projectsEnabled) {\n            if (this.props.personalFolderIsBrands) {\n                return translate('DL_BRANDS');\n            } else {\n                return translate('DL_LIBRARIES');\n            }\n        }\n        return translate('DL_PERSONAL_STORAGE');\n    }\n\n    getLabelIcon(folder) {\n        if (this.projectsEnabled && folder?.gradientData) {\n            return <ProjectGradient project={folder} />;\n        }\n\n        let personalFolderIcon = 'User';\n\n        if (this.projectsEnabled) {\n            if (this.props.personalFolderIsBrands) {\n                personalFolderIcon = 'CCXCreateLogo';\n            } else {\n                personalFolderIcon = 'CCLibrary';\n            }\n        }\n        return <Icon className={styles.labelIcon} id={folder ? 'Building' : personalFolderIcon} height={this.props.iconSize === 'M' ? 18 : 12}/>;\n    }\n\n    getLabel(folder) {\n        return (\n            <div className={classNames(styles.label, {\n                [styles.noSubtext]: !(folder && folder.ownerName),\n                [styles.alignCenter]: this.props.iconSize === 'M'\n            })}>\n                <div className={classNames(styles.iconContainer, {\n                    [styles.labelPersonal] : !folder,\n                    [styles.smallIcon] : this.props.iconSize === 'S'\n                })}>\n                    {this.getLabelIcon(folder)}\n                </div>\n                <div className={styles.labelTextContainer}>\n                    <div className={classNames(styles.labelText, styles.overflow)}>\n                        { this.getPlainTextLabel(folder) }\n                    </div>\n                    {\n                        !this.projectsEnabled && folder?.ownerName && <div className={classNames(styles.labelSubText, styles.overflow)}>{folder.ownerName}</div>\n                    }\n                </div>\n            </div>\n        );\n    }\n\n    onClickDropdownItem(folder) {\n        this.selectedFolder = folder;\n        this.updateSelectedFolderPermission();\n        this.props.onFolderChange(folder);\n    }\n\n    updateSelectedFolderPermission() {\n        // If we aren't using TeamLibraryPermissionSwitch, then we always want to set the permission to 'all'\n        // If we are, then TeamLibraryPermissionSwitch will call onPermissionChange when it mounts\n        if (this.disableProjectsPermissionSwitch) {\n            this.props.onPermissionChange('all');\n        }\n    }\n\n    get folderMenuData() {\n        const folders = this.teams.map(folder => {\n            const folderMenuItem = {\n                label: this.getLabel(folder),\n                sublabel: !this.projectsEnabled ? folder?.ownerName : null,\n                onClick: () => this.onClickDropdownItem(folder),\n                isSelected: this.selectedFolder && this.selectedFolder.id === folder.id,\n                disabled: this.props.disabledTeamIds.includes(folder.id),\n                key: folder.id,\n                id: 'teamPermission',\n            };\n            if (this.projectsEnabled) {\n                folderMenuItem.iconContent = this.getLabelIcon(folder);\n            }\n            return folderMenuItem;\n        });\n\n        // Add the \"Personal\" folder to the front of the list of folders, and set selected folder to undefined if selected\n        if (this.props.showPersonalFolder) {\n            folders.unshift({\n                label: this.getLabel(),\n                onClick: () => this.onClickDropdownItem(null),\n                isSelected: !this.selectedFolder,\n                key: 'personal',\n                id: 'personalPermission',\n                iconContent: !this.projectsEnabled ? this.getLabelIcon() : null,\n            });\n        }\n\n        return folders;\n    }\n\n    get showHelp() {\n        return !environment.isMobileView && this.props.showHelp;\n    }\n\n    get infoTooltipContent() {\n        if (!this.projectsEnabled) {\n            return translate('DL_TEAM_LIBRARY_HELP');\n        }\n        return translate(this.props.personalFolderIsBrands ? 'DL_PROJECT_BRAND_HELP' : 'DL_PROJECT_LIBRARY_HELP');\n    }\n\n    get permissionSelector() {\n        let PermissionSelector = TeamLibraryPermissionSelector;\n        if (this.projectsEnabled) {\n            // For CCI users, we want to remove the option to make the library read-only.\n            if (this.disableProjectsPermissionSwitch) {\n                return null;\n            }\n            PermissionSelector = TeamLibraryPermissionSwitch;\n        }\n        return <PermissionSelector\n            onPermissionChange={this.props.onPermissionChange}\n            defaultPermission={this.props.defaultPermission}\n            isBrandLibrary={this.props.personalFolderIsBrands}\n        />;\n    }\n\n    get dropdown() {\n        if (this.projectsEnabled && (this.props.disableTeamSelection || this.teams.length === 0)) {\n            return <div data-test-id=\"team-selector-static-label\" className={styles.nonDropdownLabel}>{ this.currentLabel }</div>;\n        }\n        const classes = classNames(styles.teamSelector, this.props.className);\n        return <>\n            <div className={classNames(styles.dropdown)}>\n                <BaseDropdown\n                    data={this.folderMenuData}\n                    type={this.props.type}\n                    className={classNames(classes, 'team-selector-dropdown')}\n                    currentLabel={this.currentLabel}\n                    maxHeight={this.props.maxHeight}\n                    disabled={this.props.isDisabled}\n                    noDropdown={this.props.disableTeamSelection}\n                    locationBasedOnLabel={true}\n                    wrapCustomLabel\n                />\n            </div>\n            {this.showHelp && <div data-test-id=\"selector-help-icon\" className={styles.helpIconContainer}>\n                <Tooltip content={this.infoTooltipContent} delay={0}>\n                    <span tabIndex=\"0\" className={styles.helpIconInnerContainer}><Icon id=\"InfoOutline\" className={styles.helpIcon} height={18} /></span>\n                </Tooltip>\n            </div>}\n        </>;\n    }\n\n    render() {\n        const noTeams = this.teams.length === 0;\n        if (!this.projectsEnabled && noTeams) {\n            return null;\n        }\n        if (this.projectsEnabled && noTeams && !this.props.showPersonalFolder) {\n            return null;\n        }\n\n        return (\n            <div className={styles.container}>\n                <div className={styles.sectionHeader}>\n                    {translate('DL_TEAM_LIBRARY_SAVE_TO')}\n                </div>\n                <div className={styles.dropdownRow}>\n                    { this.dropdown }\n                </div>\n                { this.selectedFolder && this.permissionSelector && (\n                    <div className={styles.permissionSelector}>\n                        { this.permissionSelector }\n                    </div>\n                )}\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport BaseDialog from './BaseDialog';\nimport environment from 'app/js/environment';\nimport Icon from 'app/js/components/Icon';\nimport metrics from 'app/js/interface/metrics';\nimport { translate } from 'app/js/managers/translationManager';\nimport configuration from 'app/js/config/configuration';\nimport classNames from 'classnames';\nimport { duplicateLibraryName, validUniqueLibraryName } from 'app/js/utils/libraryUtils';\nimport TeamSelector from 'app/js/components/TeamSelector';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport featureFlags from 'app/js/config/featureFlags';\n\n@observer\nexport default class CreateLibraryDialog extends React.Component {\n\n    static contextType = LibrariesContext\n\n    static dialogName = 'createLibrary';\n\n    static defaultProps = {\n        createTitle: 'DL_CREATE_DESIGN_LIBRARY',\n        createPlaceholder: 'DL_NAME_DESC',\n        isCreatingBrand: false\n    };\n\n    static propTypes = {\n        onCreate: PropTypes.func,\n        onClose: PropTypes.func,\n        close: PropTypes.func, // Callback for closing the dialog (dialogManager.closeDialog())\n        defaultTeam: PropTypes.object,\n        isCreatingBrand: PropTypes.bool,\n        createTitle: PropTypes.string,\n        createPlaceholder: PropTypes.string\n    };\n\n    @observable name = '';\n    @observable hasPressedKey = false;\n\n    @observable.ref selectedFolder;\n    teamLibraryPermission = undefined;\n\n    componentDidMount() {\n        this.selectedFolder = this.defaultTeam;\n        // TODO: Why two metrics for this?\n        metrics.reportEvent('Create Library', 'Library Selector', 'click', 'new-library', { 'custom.library': { filter: this.isCreatingBrand ? 'brands' : 'libraries' } });\n        metrics.reportEvent('Create Library', 'New Library', 'render', 'view');\n\n        // Small hack to get around mounting issue with Web Components in CCD\n        setTimeout(() => {\n            this.inputElement?.focus();\n        });\n    }\n\n    get defaultTeam() {\n        if (this.props.defaultTeam) {\n            return this.props.defaultTeam;\n        }\n        const currentUser = metrics.currentUserId;\n        const isEnterpriseUser = currentUser && !currentUser.includes('@AdobeID');\n        const showFirstProject = featureFlags.get('enableProjects') ? isEnterpriseUser : true;\n        if (showFirstProject) {\n            const availableFolders = this.context.libraryManager.platformFolders.filter(folder => folder.isWritable);\n            return availableFolders[0];\n        }\n    }\n\n    setInputElement = (element) => {\n        this.inputElement = element;\n    }\n\n    get warningMessage() {\n        const nameErrorStatus = validUniqueLibraryName(this.name.trim(), this.selectedFolder);\n        const isValidName = nameErrorStatus === configuration.RENAME_STATES.VALID;\n        if (!isValidName) {\n            return {\n                isError: true,\n                message: translate(configuration.RENAME_STATE_ERROR_MESSAGES[nameErrorStatus], { charCount: this.remainingCharacters })\n            };\n        }\n\n        if (this.remainingCharacters <= configuration.MAX_REMAINING_CHARACTERS_LENGTH) {\n            return {\n                message: translate('DL_LIBRARY_NAME_REMAINING_CHARACTERS', { charCount: this.remainingCharacters }),\n            };\n        }\n    }\n\n    get isDuplicateLibraryName() {\n        return this.selectedFolder && duplicateLibraryName(this.name, this.selectedFolder);\n    }\n\n    get isOverMaxLength() {\n        return this.name.trim().length > configuration.MAX_INPUT_STRING_LENGTH;\n    }\n\n    get remainingCharacters() {\n        const currentLength = this.name.trim().length;\n        return configuration.MAX_INPUT_STRING_LENGTH - currentLength;\n    }\n\n    get isValidName() {\n        return !this.isErrorWarning;\n    }\n\n    get showWarning() {\n        return this.hasPressedKey && this.name.trim().length > 0 && this.warningMessage;\n    }\n\n    get isErrorWarning() {\n        return this.warningMessage?.isError;\n    }\n\n    get isCreatingBrand() {\n        return this.props.isCreatingBrand;\n    }\n\n    createLibrary(sourceAction) { // sourceAction is 'click' or 'keydown' on the create button.\n        let newLibrary;\n\n        // Actually create the library, then switch to it\n        metrics.setExtraEventMetrics('createLibrary', { opType: 'newLibrary' });\n        const opts = this.isCreatingBrand ? { roles: [ { 'type': configuration.ROLE_TYPE_BRAND } ] } : {};\n\n        if (this.selectedFolder) {\n            opts.permissionInheritance = this.teamLibraryPermission;\n            newLibrary = this.context.libraryManager.createTeamLibrary(this.selectedFolder.id, this.name, opts);\n        } else {\n            newLibrary = this.context.libraryManager.createLibrary(this.name, opts);\n        }\n\n        metrics.reportEvent('Create Library', 'New Library', sourceAction, 'create', undefined, newLibrary);\n        metrics.clearExtraEventMetrics('createLibrary');\n        if (this.props.onCreate) {\n            this.props.onCreate(newLibrary, this.selectedFolder);\n        } else {\n            environment.navigateToLibrary(newLibrary);\n        }\n    }\n\n    onClickOK = () => {\n        this.name = this.name.trim();\n        this.createLibrary('click');\n    }\n\n    onTextChange = (event) => {\n        event.stopPropagation();\n        this.name = event.target.value;\n    };\n\n    onKeyDown = (event) => {\n        event.stopPropagation();\n        // Handle enter key\n        if (event.key === 'Enter' && this.isValidName && !environment.isComposingInputEvent(event)) {\n            event.preventDefault();\n            this.createLibrary('keydown');\n            this.props.close && this.props.close();\n            this.props.onClose && this.props.onClose();\n            return;\n        }\n\n        // Handle escape key\n        if (event.keyCode === 27) {\n            this.props.close && this.props.close();\n            this.props.onClose && this.props.onClose();\n            return;\n        }\n\n        if (!this.hasPressedKey) {\n            this.hasPressedKey = true;\n            metrics.reportEvent('Create Library', 'New Library', 'keydown', 'input');\n        }\n    };\n\n    handleFolderChange = folder => {\n        this.selectedFolder = folder;\n    };\n\n    onPermissionChange = permission => {\n        this.teamLibraryPermission = permission;\n    }\n\n    render() {\n        const inputContainerClasses = classNames('panel-dialog-layout-75', 'panel-dialog-input-container', { 'panel-dialog-warning': this.showWarning });\n        let title = translate(environment.customCreateLibraryHeader || this.props.createTitle);\n        title = environment.capitalizeCreateLibraryHeader ? title.toLocaleUpperCase(environment.getLocale()) : title;\n        return (\n            <BaseDialog className={classNames('panel-dialog-create', 'panel-dialog-share')} title={title} okButtonText={translate('DL_CREATE')} onClickOK={this.onClickOK}\n                close={this.props.close} okButtonEnabled={this.isValidName} >\n                <div className=\"panel-dialog-layout-group\">\n                    <div className={inputContainerClasses}>\n                        <input className=\"panel-dialog-input\" type=\"text\" data-test-id=\"create-library-input\" spellCheck=\"false\" placeholder={translate(this.props.createPlaceholder)}\n                            style={{ width: '100%' }} ref={this.setInputElement} value={this.name} onChange={this.onTextChange} onKeyDown={this.onKeyDown} />\n                        {this.showWarning && this.isErrorWarning && <Icon id=\"Alert\" height={18} />}\n                    </div>\n                </div>\n                {this.showWarning && <div data-test-id=\"panel-dialog-name-warning\" className={classNames('panel-dialog-input-message', { 'warning': this.isErrorWarning })}>{this.warningMessage.message}</div>}\n                <div className={classNames('panel-dialog-share-select-area', { 'warning': this.isErrorWarning })}>\n                    <TeamSelector\n                        onFolderChange={this.handleFolderChange}\n                        onPermissionChange={this.onPermissionChange}\n                        personalFolderIsBrands={featureFlags.get('enableProjects') && this.isCreatingBrand}\n                        defaultTeam={this.defaultTeam}\n                        showPersonalFolder\n                        showHelp\n                    />\n                </div>\n            </BaseDialog>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport BaseDialog from './BaseDialog';\nimport { Library } from '@cclibraries/cc-libraries-js';\nimport { Element } from '@cclibraries/cc-libraries-js';\nimport metrics from 'app/js/interface/metrics';\nimport { translate } from 'app/js/managers/translationManager';\nimport { truncateString } from 'app/js/utils/stringUtils';\nimport configuration from 'app/js/config/configuration';\nimport { validateLibraryName, duplicateLibraryName } from 'app/js/utils/libraryUtils';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport Icon from 'app/js/components/Icon';\nimport classNames from 'classnames';\nimport environment from 'app/js/environment';\nimport Thumbnail from '../elements/utils/Thumbnail';\nimport ColorElementView from 'app/js/components/elements/ColorElementView';\nimport ColorThemeElementView from 'app/js/components/elements/ColorThemeElementView';\nimport GradientElementView from 'app/js/components/elements/GradientElementView';\nimport TextStyleElementView from 'app/js/components/elements/TextStyleElementView';\nimport MosaicView from 'app/js/components/MosaicView';\nimport { usesTextStyleElementView } from 'app/js/utils/textstyleUtils';\n\n// TODO: [CCXW-21059] Refactor this dialog to RenameDialog to accept both Element and Library\n@observer\nexport default class RenameLibraryDialog extends React.Component {\n\n    static contextType = LibrariesContext;\n    static dialogName = 'renameLibrary';\n\n    static propTypes = {\n        library: PropTypes.oneOfType([ PropTypes.instanceOf(Element), PropTypes.instanceOf(Library) ]).isRequired,\n        close: PropTypes.func, // Callback for closing the dialog (dialogManager.closeDialog())\n        isElement: PropTypes.bool\n    };\n\n    @observable name = '';\n    @observable hasPressedKey = false;\n    warningMessage = '';\n\n    constructor(props) {\n        super(props);\n        this.name = this.props.library.name;\n    }\n\n    get title() {\n        return translate('DL_RENAME_LIBRARY', { name: this.props.library.name });\n    }\n\n    componentDidMount() {\n        // TODO: Metrics?\n        setTimeout(() => {\n            this.inputElement.focus();\n            this.inputElement.select();\n        });\n    }\n\n    setInputElement = (element) => {\n        this.inputElement = element;\n    }\n\n    get isValidName() {\n        const folder = this.context.libraryManager.platformFolders.find(folder => this.props.library.parentDirectoryId === folder.id);\n        if (folder && duplicateLibraryName(this.name, folder)) {\n            this.warningMessage = translate('DL_LIBRARY_RENAME_DUPLICATE');\n            return false;\n        }\n        this.warningMessage = translate('DL_LIBRARY_NAME_INVALID');\n        return this.props.library.isWritable && validateLibraryName(this.name);\n    }\n\n    get showWarning() {\n        return this.hasPressedKey && this.name.trim().length > 0 && !this.isValidName;\n    }\n\n    renameLibrary(sourceAction) {\n        metrics.reportEvent('Library Operations', 'Library', sourceAction, 'rename', null, this.props.library);\n        this.props.library.name = this.name;\n        if (configuration.currentProduct.config.showElementActionToasts) {\n            this.context.toastManager.openToast('message', { message: translate('DL_RENAME_SUCCESS_TOAST'), variant: 'success' });\n        }\n    }\n\n    onClickOK = () => {\n        this.name = this.name.trim();\n        this.renameLibrary('click');\n    };\n\n    onTextChange = (event) => {\n        event.stopPropagation();\n        // truncates new name to max character limit before rename to prevent panel freezing\n        this.name = truncateString(event.target.value, configuration.MAX_INPUT_STRING_LENGTH, false);\n    };\n\n    onKeyDown = (event) => {\n        event.stopPropagation();\n        if (event.key === 'Enter' && this.isValidName && !environment.isComposingInputEvent(event)) {\n            this.renameLibrary('keydown');\n            this.props.close && this.props.close();\n        }\n\n        if (!this.hasPressedKey) {\n            this.hasPressedKey = true;\n        }\n    };\n\n    getElementThumbnail(element) {\n        if (element.type === configuration.COLOR_ELEMENT_TYPE) {\n            return <div className=\"panel-rename-thumbnail\"><ColorElementView element={element} viewMode=\"thumbnail-large\" disableInteraction /></div>;\n        }\n        if (element.type === configuration.COLOR_THEME_ELEMENT_TYPE) {\n            return <div className=\"panel-rename-thumbnail\"><ColorThemeElementView element={element} viewMode=\"thumbnail-large\" isMosaicView={false} disableInteraction /></div>;\n        }\n        if (element.type === configuration.GRADIENT_ELEMENT_TYPE) {\n            return <div className=\"panel-rename-thumbnail\"><GradientElementView element={element} viewMode=\"thumbnail-medium\" disableInteraction /></div>;\n        }\n        if (usesTextStyleElementView(element)) {\n            return <div className=\"panel-rename-thumbnail\"><TextStyleElementView element={element} viewMode=\"thumbnail-medium\" mosaicTileSize=\"full\" disableInteraction /></div>;\n        }\n\n        return <div className=\"panel-rename-thumbnail\"><Thumbnail element={element} viewMode=\"thumbnail-medium\" disableInteraction /></div>;\n    }\n\n    /**\n     * Generating thumbnail for the Library Element in the rename dialog.\n     */\n    getThumbnail() {\n        return this.props.isElement ? (<div className=\"panel-dialog-layout-15\">\n            {this.getElementThumbnail(this.props.library)}\n        </div>) : (<div className=\"panel-dialog-layout-15\">\n            <MosaicView className=\"panel-rename-thumbnail\" viewMode=\"grid\" library={this.props.library} renditionGrid={this.props.library.renditionGrid} />\n        </div>);\n    }\n\n    render() {\n        const inputContainerClasses = classNames('panel-dialog-layout-85', 'panel-dialog-input-container', { 'panel-dialog-warning': this.showWarning });\n\n        if (configuration.currentProduct.config.newRenameDialogWithThumbnail) {\n            return (\n                <BaseDialog title={ this.title } className=\"rename-dialog\" okButtonText={ translate('DL_SAVE') } onClickOK={ this.onClickOK } close={ this.props.close } okButtonEnabled={ this.isValidName } showMosaicLibrary={!this.props.isElement}>\n                    <div className=\"panel-dialog-layout-group\">\n                        {this.getThumbnail()}\n                        <div className={inputContainerClasses}>\n                            <input className=\"rename-library-input\" data-test-id=\"rename-library-input\" type=\"text\" spellCheck=\"false\" placeholder={ translate('DL_NAME_DESC') } style={ { width: '100%' } }\n                                ref={ this.setInputElement } value={ this.name } onChange={ this.onTextChange } onKeyDown={ this.onKeyDown } />\n                            { this.showWarning && <Icon id=\"Alert\" height={ 16 }/> }\n                        </div>\n                    </div>\n                    { this.showWarning && <div data-test-id=\"panel-dialog-name-warning\" className=\"panel-dialog-input-message\">{ this.warningMessage }</div>}\n                </BaseDialog>\n            );\n        }\n        return (\n            <BaseDialog title={ this.title } className=\"rename-dialog\" okButtonText={ translate('DL_RENAME') } onClickOK={ this.onClickOK }\n                close={ this.props.close } okButtonEnabled={ this.isValidName } >\n                <div className=\"panel-dialog-layout-group\">\n                    <div className={inputContainerClasses}>\n                        <input className=\"rename-library-input\" data-test-id=\"rename-library-input\" type=\"text\" spellCheck=\"false\" placeholder={ translate('DL_NAME_DESC') } style={ { width: '100%' } }\n                            ref={ this.setInputElement } value={ this.name } onChange={ this.onTextChange } onKeyDown={ this.onKeyDown } />\n                        { this.showWarning && <Icon id=\"Alert\" height={ 16 }/> }\n                    </div>\n\n                </div>\n                { this.showWarning && <div data-test-id=\"panel-dialog-name-warning\" className=\"panel-dialog-input-message\">{ this.warningMessage }</div>}\n            </BaseDialog>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport classNames from 'classnames';\nimport BaseDialog from './BaseDialog';\nimport { Library } from '@cclibraries/cc-libraries-js';\nimport metrics from 'app/js/interface/metrics';\nimport environment from 'app/js/environment';\nimport { translate } from 'app/js/managers/translationManager';\nimport { isIncomingLibrary, isPublicLibrary } from 'app/js/utils/libraryUtils';\nimport { isPublishedBrand, isBrandLibrary } from 'app/js/utils/brandUtils';\nimport { truncateString } from 'app/js/utils/stringUtils';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport configuration from 'app/js/config/configuration';\nimport HTMLText from '../HTMLText';\nimport { launchLearnMoreDeleteURL } from 'app/js/utils/linkUtils';\nimport floodgateManager from 'app/js/managers/floodgateManager';\n\n@observer\nexport default class DeleteLibraryDialog extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static dialogName = 'deleteLibrary';\n\n    static propTypes = {\n        library: PropTypes.instanceOf(Library).isRequired,\n        close: PropTypes.func // Callback for closing the dialog (dialogManager.closeDialog())\n    };\n\n    onClickLearnMore = () => {\n        launchLearnMoreDeleteURL();\n    }\n\n    get library() {\n        return this.props.library;\n    }\n\n    get deleteType() {\n        if (this.library.documentId && this.context.libraryManager.publishedDocumentLibrary === this.library) {\n            return 'documentLibrary';\n        } else if (isIncomingLibrary(this.library)) {\n            return 'incoming';\n        } else if (this.library.collaboration === 'outgoing') {\n            return 'outgoing';\n        } else if (isPublicLibrary(this.library)) {\n            return 'bookmarked';\n        } else if (isPublishedBrand(this.library) || this.library.publishedTo) {\n            return 'publishedBrand';\n        } else {\n            return 'private';\n        }\n    }\n\n    get title() {\n        if (isBrandLibrary(this.library) && configuration.currentProduct.config.customDeleteBrandMessage) {\n            return translate({\n                private: 'DELETE_BRAND',\n                outgoing: 'DELETE_BRAND',\n                incoming: 'LEAVE_BRAND',\n                bookmarked: 'DL_REMOVE_FROM_YOUR_BRANDS',\n                documentLibrary: 'BRAND_UNPUBLISH_ACTION_LONG',\n                publishedBrand: 'DELETE_BRAND'\n            }[this.deleteType]);\n        }\n        return translate({\n            private: 'DL_DELETE_LIBRARY',\n            outgoing: 'DL_DELETE_LIBRARY',\n            incoming: 'DL_LEAVE_LIBRARY',\n            bookmarked: isBrandLibrary(this.library) ? 'DL_REMOVE_FROM_YOUR_BRANDS' : 'DL_REMOVE_FROM_YOUR_LIBRARIES',\n            documentLibrary: 'DL_UNPUBLISH_LIBRARY'\n        }[this.deleteType], { name: this.library.name });\n    }\n\n    get message() {\n        if (this.library.documentId && this.context.libraryManager.publishedDocumentLibrary === this.library) {\n            return (\n                <div className={classNames({ 'uxp-bullet-list': !environment.supportsCSSListItem })}>\n                    <div className=\"dialog-bullet-item\">{` ${translate('DL_UNPUBLISH_MESSAGE_SHARING')}`}</div>\n                    <div className=\"dialog-bullet-item\">{` ${translate('DL_UNPUBLISH_MESSAGE_ELEMENTS')}`}</div>\n                </div>\n            );\n        }\n        if (isBrandLibrary(this.library) && configuration.currentProduct.config.customDeleteBrandMessage) {\n            const numberOfCollaborators = this.library.visibleCollaborators.length;\n            const privateString = floodgateManager.isBrandLifecycleEnabled() ? 'DELETE_BRAND_DRAFT' : 'DELETE_BRAND_YOURS';\n            const sharedString = this.library.visibleCollaborators.length > 1 ? 'DELETE_BRAND_SHARED_NUMBER' : 'DELETE_BRAND_SHARED_SINGULAR';\n            const brandName = translate({\n                private: privateString,\n                outgoing: sharedString,\n                incoming: sharedString,\n                bookmarked: 'DL_REMOVE_FROM_YOUR_BRANDS',\n                publishedBrand: 'DELETE_BRAND_PUBLISHED'\n            }[this.deleteType], { name: truncateString(this.library.name, 48), numUsers: numberOfCollaborators });\n            return <div>\n                <div className=\"panel-dialog-delete-brand\">{brandName}</div>\n                {this.deleteType !== 'incoming' && <HTMLText className=\"panel-dialog-delete-brand-recover\" data-test-id=\"delete-brand-recover-message\" onClick={this.onClickLearnMore} html={ translate('DELETE_BRAND_RECOVER_MESSAGE') } />}\n            </div>;\n        }\n        return translate({\n            private: 'DL_DELETE_MESSAGE',\n            outgoing: 'DL_DELETE_MESSAGE_SHARED',\n            incoming: 'DL_LEAVE_MESSAGE',\n            bookmarked: 'DL_UNFOLLOW_MESSAGE',\n        }[this.deleteType], { name: truncateString(this.library.name, 48) });\n    }\n\n    get okButtonText() {\n        return translate({\n            private: 'DL_DELETE',\n            outgoing: 'DL_DELETE',\n            incoming: 'DL_LEAVE',\n            bookmarked: 'DL_UNFOLLOW',\n            documentLibrary: 'DL_UNPUBLISH'\n        }[this.deleteType]);\n    }\n\n    onClickOK = () => {\n        if (this.context.viewState.isOneUpMode && this.context.viewState.isOneUpMode()) {\n            this.context.viewState.resetMode();\n        }\n\n        if (configuration.currentProduct.isExpandedView?.()) {\n            environment.navigateToMosaic(isBrandLibrary(this.library) ? 'brands' : 'libraries');\n        }\n\n        if (this.library.documentId && this.context.libraryManager.publishedDocumentLibrary === this.library) {\n            this.context.libraryManager.unpublish(this.library);\n            this.context.toastManager.openToast('message', { variant: 'success', message: translate('DL_UNPUBLISH_TOAST', { libraryName: this.library.name }) });\n        } else if (isPublicLibrary(this.library) || isIncomingLibrary(this.library)) {\n            this.context.libraryManager.unfollowLibrary(this.library);\n            this.context.toastManager.openToast('message', { variant: 'success', message: translate('DL_UNFOLLOW_TOAST', { libraryName: this.library.name }) });\n        } else if (this.library.publishedFrom) {\n            // If the library is a published library, delete the draft library since that will delete both artifacts in Melville\n            this._defaultDeleteLibrary(this.context.libraryManager.getLibraryByAssetId(this.library.publishedFrom));\n            // Although publishedBrand is deleted correctly from Melville, it still persists in our cache.\n            // A second call will result in 204 with Melville and remove the published brand from our cache.\n            this._defaultDeleteLibrary(this.library, false);\n        } else {\n            this._defaultDeleteLibrary(this.library);\n        }\n    }\n\n    _defaultDeleteLibrary = (library, showToast = true) => {\n        this.context.libraryManager.deleteLibrary(library);\n        let toastMessage = library.removeType === 'discard' ? 'DL_DELETE_TOAST' : 'DL_LIBRARY_PERMANENTLY_DELETED';\n        if (configuration.currentProduct.config.customDeleteBrandMessage) {\n            toastMessage = 'BRAND_DELETED_SHORT';\n        }\n        if (showToast) {\n            this.context.toastManager.openToast('message', { variant: 'success', message: translate(toastMessage, { libraryName: this.library.name }) });\n        }\n    }\n\n    onClickCancel = () => {\n        metrics.reportEvent('Operations', 'Delete Library', 'click', 'cancel');\n    }\n\n    render() {\n        return (\n            <BaseDialog mode=\"warning\" title={ this.title } className={ classNames('wide', 'delete-dialog') } okButtonText={ this.okButtonText } onClickOK={ this.onClickOK }\n                onClickCancel={ this.onClickCancel } close={ this.props.close }>\n                <div className=\"panel-dialog-layout-group\">\n                    <div data-test-id=\"delete-library-message\" className=\"panel-dialog-layout-100\">{ this.message }</div>\n                </div>\n            </BaseDialog>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { observable, computed } from 'mobx';\nimport ElementModel from 'app/js/models/ElementModel';\nimport BaseDialog from './BaseDialog';\nimport configuration from 'app/js/config/configuration';\nimport { getStringLength, truncateString } from 'app/js/utils/stringUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\n\n@observer\nexport default class NoteDialog extends React.Component {\n\n    static dialogName = 'addNote';\n\n    static propTypes = {\n        element: PropTypes.instanceOf(ElementModel).isRequired,\n        close: PropTypes.func // Callback for closing the dialog (dialogManager.closeDialog())\n    };\n\n    @observable val;\n\n    constructor(props) {\n        super(props);\n        this.val = this.props.element.description || '';\n        this.title = this.val ? translate('DL_EDIT_NOTE') : translate('DL_ADD_NOTE');\n    }\n\n    componentDidMount = () => {\n        this.noteInput.focus();\n        this.noteInput.select();\n    }\n\n    @computed\n    get count() {\n        return getStringLength(this.val);\n    }\n\n    get charactersLeft() {\n        return configuration.NOTES_MAX_CHARACTER_COUNT - this.count;\n    }\n\n    onTextChange = (event) => {\n        if (this.charactersLeft > 0 || getStringLength(event.target.value) < this.count) {\n            this.val = truncateString(event.target.value, configuration.NOTES_MAX_CHARACTER_COUNT, false);\n        }\n    }\n\n    onClickOK = () => {\n        const newDescription = this.val.trim();\n        if (this.props.element.description !== newDescription) {\n            this.props.element.description = newDescription;\n        }\n    }\n\n    get thumbnail() {\n        const View = elementConfiguration.getComponent(this.props.element.type);\n        const width = configuration.LIST_VIEW_ELEMENT_THUMBNAIL_HEIGHT;\n\n        return <div data-test-id=\"note-dialog-thumbnail-container\" className=\"note-dialog-thumbnail-container\">\n            <View element={ this.props.element } viewMode=\"thumbnail\" width={ width } />\n            <div className=\"panel-dialog-note-element-name-container\"><div className=\"panel-dialog-note-element-name\" data-test-id=\"thumbnail-viewmode-name\">{ this.props.element.name }</div></div>\n        </div>;\n    }\n\n    get okButtonEnabled() {\n        return this.count > 0 || this.props.element.description !== '';\n    }\n\n    setInputRef = (input) => { this.noteInput = input; }\n\n    render() {\n        return (\n            <BaseDialog title={ this.title } onClickOK={ this.onClickOK } close={ this.props.close } okButtonEnabled={this.okButtonEnabled}>\n                { this.thumbnail }\n                <div data-test-id=\"note-dialog-character-count\" className=\"panel-note-dialog-character-count\">{this.charactersLeft}</div>\n                <textarea data-test-id=\"note-dialog-textarea\" className=\"panel-dialog-note-textarea\" value={ this.val }\n                    onChange={ this.onTextChange } ref={ this.setInputRef } placeholder={translate('DL_NOTE_DIALOG_PLACEHOLDER')}/>\n            </BaseDialog>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport BaseDialog from './BaseDialog';\nimport SpectrumCheckbox from 'app/js/components/spectrum/SpectrumCheckbox';\nimport { markOnboardingViewed } from 'app/js/utils/onboardingUtils';\nimport { translate } from 'app/js/managers/translationManager';\n\n@observer\nexport default class ConfirmDialog extends React.Component {\n\n    static dialogName = 'confirm';\n\n    static propTypes = {\n        title: PropTypes.string.isRequired,\n        message: PropTypes.string.isRequired,\n        okText: PropTypes.string.isRequired,\n        onClickOK: PropTypes.func.isRequired,\n        hasDismissCheckbox: PropTypes.string, // pass a key to display a checkbox to prompt to not show user the dialog again\n        close: PropTypes.func // Callback for closing the dialog (dialogManager.closeDialog())\n    };\n\n    @observable doNotShowAgain = false;\n\n    handleClickOK = () => {\n        if (this.doNotShowAgain) {\n            markOnboardingViewed(this.props.hasDismissCheckbox);\n        }\n        this.props.onClickOK();\n    }\n\n    render() {\n        return (\n            <BaseDialog mode=\"warning\" title={ this.props.title } okButtonText={ this.props.okText } onClickOK={ this.handleClickOK } close={ this.props.close }>\n                <div data-test-id=\"confirm-message\" className=\"panel-dialog-layout-100\">{ this.props.message }</div>\n                {this.props.hasDismissCheckbox\n                && <div data-test-id=\"confirm-message-checkbox\" className=\"confirm-checkbox-wrapper\">\n                    <SpectrumCheckbox onChange={ () => this.doNotShowAgain = !this.doNotShowAgain } checked={this.doNotShowAgain} label={translate('DL_DISMISS_PERMANENTLY')} />\n                </div>}\n            </BaseDialog>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nconst WHATS_NEW_MAP = {\n    '3.11': [\n        'DL_WHATS_NEW_XD_IMPROVEMENTS'\n    ],\n    '3.12': [\n        'DL_WHATS_NEW_ONE_UP',\n        'DL_WHATS_NEW_RESPONSIVE_LAYOUT',\n        'DL_WHATS_NEW_CCD_DRAG_OUT'\n    ],\n    '3.13': [\n        'DL_WHATS_NEW_QUOTA',\n        'DL_WHATS_NEW_PUBLISH',\n    ],\n    '3.14': [\n        'DL_WHATS_NEW_NESTED_GROUPS',\n        'DL_WHATS_NEW_QUOTA_2'\n    ],\n    '3.18': [\n        'DL_WHATS_NEW_TRANSPARENCY',\n        'DL_WHATS_NEW_COLLAPSE_GROUPS'\n    ],\n    '3.19': [\n        'DL_WHATS_NEW_PATH_VIEW',\n        'DL_WHATS_NEW_RELINK'\n    ],\n    '3.22': [\n        'DL_WHATS_NEW_GENERAL'\n    ],\n    '4.4': [\n        'DL_WHATS_NEW_COLORS',\n    ],\n    '4.5': [\n        'DL_WHATS_NEW_FONTS',\n        'DL_WHATS_NEW_BACKGROUND_SYNC',\n        'DL_WHATS_NEW_GENERAL'\n    ],\n    '4.6': [\n        'DL_WHATS_NEW_GENERAL'\n    ],\n    '4.8': [\n        'DL_WHATS_NEW_FONTS',\n        'DL_WHATS_NEW_LIBRARY_DELETE',\n        'DL_WHATS_NEW_GENERAL'\n    ],\n};\n\nconst versions = Object.keys(WHATS_NEW_MAP);\nWHATS_NEW_MAP.latest = WHATS_NEW_MAP[versions[versions.length - 1]];\n\nexport class ReleaseNotes {\n    /**\n     * Pulls the latest set of features for Whats New\n     * @returns {Array<string>} - Array of String IDs for corresponding features (Translated later by views).\n     */\n    get whatsNew() {\n        return WHATS_NEW_MAP.latest;\n    }\n}\n\nexport default new ReleaseNotes();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport BaseDialog from './BaseDialog';\nimport { translate } from 'app/js/managers/translationManager';\nimport releaseNotes from 'app/js/config/releaseNotes';\nimport metrics from 'app/js/interface/metrics';\nimport { openWhatsNewURL } from 'app/js/utils/linkUtils';\n\nconst packageInfo = require('../../../../package.json');\n\n@observer\nexport default class WhatsNewDialog extends React.Component {\n\n    static dialogName = 'whatsNew';\n\n    static propTypes = {\n        close: PropTypes.func // Callback for closing the dialog (dialogManager.closeDialog())\n    };\n\n    onLearnMoreClick() {\n        openWhatsNewURL();\n    }\n\n    closeClick = () => {\n        metrics.reportEvent('Navigation', 'Whats New', 'click', 'close');\n        this.props.close && this.props.close();\n    };\n\n    get featureList() {\n        const list = releaseNotes.whatsNew;\n        const listItems = list && list.map(item =>\n            <div className=\"panel-dialog-whats-new-list-item\" key={ item }>{ translate(item) }</div>\n        );\n        return listItems;\n    }\n\n    get panelVersion() {\n        return packageInfo.version;\n    }\n\n    render() {\n        return (\n            <BaseDialog title={ translate('DL_WHATS_NEW_TITLE') } okButtonText={ translate('DL_OK') } cancelButtonText={ null }\n                close={ this.closeClick } >\n                <div className=\"panel-dialog-layout-group\">\n                    <div className=\"panel-dialog-whats-new\">\n                        <div className=\"date-version\">{ `${translate('DL_WHATS_NEW_DATE')} - ${translate('DL_WHATS_NEW_VERSION', { num: this.panelVersion })}` }</div>\n                        <div>{ this.featureList }</div>\n                        <div className=\"panel-dialog-whats-new-learn-more\">\n                            <a data-test-id=\"whats-new-learn-more\" onClick={ this.onLearnMoreClick }>{ translate('DL_LEARN_MORE') }</a>\n                        </div>\n                    </div>\n                </div>\n            </BaseDialog>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport BaseDialog from './../BaseDialog';\nimport { translate } from 'app/js/managers/translationManager';\nimport { observable } from 'mobx';\nimport * as ImportExport from 'app/js/utils/importExport';\nimport environment from 'app/js/environment';\nimport { Library } from '@cclibraries/cc-libraries-js';\nimport Icon from 'app/js/components/Icon';\n\nconst VALID_NAME_REGEXP = new RegExp('^[\\\\s\\\\\\\\<>:/\"|?*]+$', 'g');\n\n@observer\nexport default class ImportExportInitialDialog extends React.Component {\n\n    @observable _location = null;\n\n    static propTypes = {\n        library: PropTypes.instanceOf(Library),\n        mode: PropTypes.oneOf([ 'import', 'export' ]).isRequired,\n        onStart: PropTypes.func.isRequired,\n        close: PropTypes.func\n    };\n\n    get isOkEnabled() {\n        return this._location !== null;\n    }\n\n    get title() {\n        return this._getTranslatedString('library');\n    }\n\n    get defaultBrowseText() {\n        return this._getTranslatedString('browse_default');\n    }\n\n    _getTranslatedString = (suffix) => {\n        return translate(`DL_${this.props.mode.toUpperCase()}${suffix ? '_' + suffix.toUpperCase() : ''}`);\n    }\n\n    _chooseFile = () => {\n        if (this.props.mode === 'export') {\n            // If we don't have a valid name at all (full of spaces/invalid characters), we default to \"My Library\"\n            const validName = !this.props.library.name.match(VALID_NAME_REGEXP);\n            ImportExport.chooseExportFile(this._location, validName ? this.props.library.name : translate('DL_DEFAULT_LIBRARY_NAME')).then(this._parseLocation);\n        } else {\n            ImportExport.chooseImportFile(this._location).then(this._parseLocation);\n        }\n    }\n\n    _parseLocation = file => {\n        if (this.props.mode === 'export') {\n            // For mac: \"/\" is replaced by \":\" in order to not be mistaken for the path separator, so we correct this ONLY in the path string seen by users so it matches the actual file created\n            const fileLocation = environment.isWindowsOS() ? file : file.replace(':.cclibs', ':');\n\n            this._location = environment.isWindowsOS() ? fileLocation : fileLocation.replace(':', '/');\n        } else {\n            this._location = file;\n        }\n    }\n\n    _handleStart = () => {\n        this.props.onStart(this._location);\n    }\n\n    _handleKeyDown = (event) => {\n        event.stopPropagation();\n        if (event.key === 'Enter') {\n            this._chooseFile();\n        }\n    }\n\n    render() {\n        return (\n            <BaseDialog title={ this.title } okButtonText={ this._getTranslatedString() } onClickOK={ this._handleStart } cancelButtonText={ translate('DL_CANCEL') } onClickCancel={ this.props.close } okButtonEnabled={ this.isOkEnabled }>\n                <div className=\"panel-importExport\">\n                    <div data-test-id=\"description\" className=\"panel-importExportDescription\">{ this._getTranslatedString('description') }</div>\n                    <div className=\"panel-importExportLocation\">\n                        <div data-test-id=\"locationHeader\" className=\"panel-importExportLocationHeader\">{ translate('DL_IMPORT_EXPORT_LOCATION') }</div>\n                        <div tabIndex=\"0\" data-test-id=\"locationBrowse\" className=\"panel-importExportBrowse\" onClick={ this._chooseFile } onKeyDown={this._handleKeyDown}>\n                            <div className=\"panel-importExportBrowseButton\"><Icon id=\"FolderOpen\" height={ 16 } /></div>\n                            <div data-test-id=\"locationBrowseText\" className=\"panel-importExportBrowseLocation\">{ this._location ? this._location : this.defaultBrowseText }</div>\n                        </div>\n                    </div>\n                </div>\n            </BaseDialog>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport BaseDialog from './../BaseDialog';\nimport ProgressBar from 'app/js/components/ProgressBar';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport { translate } from 'app/js/managers/translationManager';\nimport debugLog from 'app/js/utils/debugLog';\nimport metrics from 'app/js/interface/metrics';\nimport * as ImportExport from 'app/js/utils/importExport';\nimport { Library } from '@cclibraries/cc-libraries-js';\n\nconst ERROR_TO_METRICS = {\n    OUT_OF_SPACE: 'OutOfSpace',\n    INVALID_DATA: 'InvalidData',\n    ACCESS_ERROR: 'Access'\n};\n\n@observer\nexport default class ImportExportProgressDialog extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    @observable _importExportOperation = {};\n    @observable _locationCounter = 0;\n    @observable progress = 0;\n\n    static propTypes = {\n        library: PropTypes.instanceOf(Library),\n        locations: PropTypes.arrayOf(PropTypes.string).isRequired,\n        mode: PropTypes.oneOf([ 'import', 'export' ]).isRequired,\n        onSuccess: PropTypes.func.isRequired,\n        onError: PropTypes.func.isRequired,\n        close: PropTypes.func.isRequired,\n        onCancel: PropTypes.func.isRequired\n    };\n\n    handleProgressUpdate = () => {\n        this.progress = this._importExportOperation.progress;\n    }\n\n    get title() {\n        return this._getTranslatedString('library');\n    }\n\n    _getTranslatedString = (suffix, params) => {\n        return translate(`DL_${this.props.mode.toUpperCase()}${suffix ? '_' + suffix.toUpperCase() : ''}`, params);\n    }\n\n    componentWillUnmount() {\n        this.context.viewState.setImportExportInProgress(false);\n\n        if (this._importExportOperation) {\n            this._importExportOperation.cancel();\n        }\n    }\n\n    componentDidMount() {\n        // Start the export\n        this._startOperation();\n        // Disable the flyout menu option\n        this.context.viewState.setImportExportInProgress(true);\n    }\n\n    _startOperation = () => {\n        if (this.props.mode === 'export') {\n            debugLog.log('Start Export Library');\n\n            this._importExportOperation = ImportExport.exportLibrary(this.props.library, this.props.locations[0], this._handleOperation);\n        } else {\n            debugLog.log('Start Import Library');\n            this._importExportOperation = ImportExport.importLibrary(this.props.locations[this._locationCounter], this._handleOperation);\n        }\n        this._importExportOperation.addListener('change', this.handleProgressUpdate);\n    }\n\n    _handleOperation = (err, library) => {\n        debugLog.log('Finish Import/Export Library: ' + (err ? err.code : this.props.mode === 'export' ? '' : (library && library.id)));\n\n        if (!err) {\n            this._locationCounter++;\n\n            const allCompleted = this._locationCounter >= this.props.locations.length;\n            const operationLibrary = this.props.mode === 'export' ? this.props.library : library;\n\n            // Notify of success if there are no more library file locations to import\n            if (!allCompleted) {\n                this._startOperation();\n            } else {\n                this.props.onSuccess(library);\n                // metrics.clearExtraEventMetrics(`${this.props.mode}Library`);\n            }\n\n            // set the library to use for success\n            if (this.props.mode === 'import') {\n                // Send add assets metrics\n                const properties = {\n                    event: { value: 'agg', count: operationLibrary.elements && operationLibrary.elements.length },\n                    ui: { sequence: 'import' },\n                    content: { category: 'Library Import' }\n                };\n                metrics.reportEvent('Add Assets', 'Element', 'click', 'add', properties, operationLibrary);\n                // Loop through elements and send metrics for each\n                if (operationLibrary.elements.length) {\n                    properties.event.value = 'single';\n                    operationLibrary.elements.forEach(element => {\n                        metrics.reportElementEvent('Add Assets', 'Element', 'click', 'add', element, properties);\n                    });\n                }\n            }\n            // Send analytics\n\n            const extraEventMetrics = metrics.getExtraEventMetrics(`${this.props.mode}Library`);\n            const contentCategory = extraEventMetrics && extraEventMetrics.content && extraEventMetrics.content.category || 'Flyout Menu';\n            metrics.reportEvent('Library Operations', this.props.mode === 'export' ? 'Export Library' : 'Import Library', 'render', 'success', { event: { value: operationLibrary.elements.length }, content: { category: contentCategory } }, operationLibrary);\n            if (allCompleted) {\n                metrics.clearExtraEventMetrics(`${this.props.mode}Library`);\n            }\n\n        } else {\n            metrics.clearExtraEventMetrics(`${this.props.mode}Library`);\n            debugLog.log('Import Export Error: ' + JSON.stringify(err));\n            // Set the error code\n            let errorCode = err && err.code;\n            if (errorCode === 'FS_ERROR' && err.underlyingError && (err.underlyingError.code === 'EACCES' || err.underlyingError.code === 'ENOENT')) {\n                errorCode = 'ACCESS_ERROR';\n            }\n            // Notify of error\n            if (errorCode !== 'OPERATION_CANCELLED') {\n                this.props.onError(errorCode);\n            }\n            // Send analytics\n            const eventWorkflow = 'Library Operations';\n            const eventSubcategory = this.props.mode === 'export' ? 'Export Library' : 'Import Library';\n            const library = this.props.mode === 'export' ? this.props.library : null;\n            const exportCount = this.props.mode === 'export' ? this.props.library.elements.value : null;\n            const errorProperties = { event: { value: exportCount } };\n            const errorDescription = err && err._message;\n            // Set the metrics value\n            const metricsValue = ERROR_TO_METRICS[errorCode] || 'Generic';\n            // Send the event\n            metrics.reportError(eventWorkflow, eventSubcategory, errorDescription, errorCode, metricsValue, errorProperties, library);\n        }\n    }\n\n    _handleCancel = () => {\n        const allCompleted = this._locationCounter >= this.props.locations.length;\n        if (this.props.locations.length > 1 && !allCompleted) {\n            const cancelled = this.props.locations.slice(this._locationCounter);\n            this.props.onCancel(cancelled);\n            return;\n        }\n\n        this.props.close();\n    }\n\n    get progressTitle() {\n        const key = this.props.mode === 'export' ? 'exporting' : 'importing';\n        const completed = Math.min(this._locationCounter + 1, this.props.locations.length);\n        const total = this.props.locations.length;\n\n        if (this.props.locations.length > 1) {\n            return this._getTranslatedString(`${key}_plural`, { completed, total });\n        }\n        return this._getTranslatedString(key);\n    }\n\n    render() {\n        return (\n            <BaseDialog title={ this.title } okButtonText={ this._getTranslatedString() } okButtonEnabled={ false } cancelButtonText={ translate('DL_CANCEL') } onClickCancel={ this._handleCancel } closeOnOutsideClick={ false }>\n                <div className=\"panel-importExport\">\n                    <ProgressBar title={ this.progressTitle } progress={ this.progress } />\n                </div>\n            </BaseDialog>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport BaseDialog from './../BaseDialog';\nimport { translate } from 'app/js/managers/translationManager';\n\n@observer\nexport default class ImportExportCompleteDialog extends React.Component {\n\n    static propTypes = {\n        mode: PropTypes.oneOf([ 'import', 'export' ]).isRequired,\n        close: PropTypes.func\n    };\n\n    get title() {\n        return this._getTranslatedString('library_success_title');\n    }\n\n    _getTranslatedString = (suffix) => {\n        return translate(`DL_${this.props.mode.toUpperCase()}${suffix ? '_' + suffix.toUpperCase() : ''}`);\n    }\n\n    render() {\n        return (\n            <BaseDialog title={ this.title } okButtonText={ translate('DL_OK') } onClickOK={ this.props.close } cancelButtonText={ null }>\n                <div className=\"panel-importExport\">\n                    <div data-test-id=\"complete\" className=\"panel-importExportDescription\">{ this._getTranslatedString('library_success') }</div>\n                </div>\n            </BaseDialog>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport BaseDialog from './../BaseDialog';\nimport { translate } from 'app/js/managers/translationManager';\nimport * as LinkUtils from 'app/js/utils/linkUtils';\n\n@observer\nexport default class ImportExportErrorDialog extends React.Component {\n\n    static propTypes = {\n        errorCode: PropTypes.string,\n        mode: PropTypes.oneOf([ 'import', 'export' ]).isRequired,\n        close: PropTypes.func\n    };\n\n    get errorMessage() {\n        const ERROR_MESSAGES = {\n            OUT_OF_SPACE: `DL_${this.props.mode.toUpperCase()}_ERROR_DISK_SPACE_BODY`,\n            INVALID_DATA: `DL_${this.props.mode.toUpperCase()}_ERROR_INVALID_DATA_BODY`,\n            ACCESS_ERROR: `DL_${this.props.mode.toUpperCase()}_ERROR_ACCESS_BODY`,\n            ENOENT: `DL_${this.props.mode.toUpperCase()}_ERROR_DESTINATION_PATH`,\n        };\n\n        return translate(ERROR_MESSAGES[this.props.errorCode] || 'DL_IMPORT_EXPORT_ERROR_CATCH_ALL_BODY');\n    }\n\n    get okText() {\n        if (this.props.errorCode === 'OUT_OF_SPACE' || this.props.errorCode === 'ACCESS_ERROR'\n            || this.props.errorCode === 'ENOENT') {\n            return translate('DL_OK');\n        }\n\n        return translate('DL_IMPORT_EXPORT_CONTACT_SUPPORT');\n    }\n\n    get cancelText() {\n        if (this.props.errorCode === 'OUT_OF_SPACE' || this.props.errorCode === 'ACCESS_ERROR'\n            || this.props.errorCode === 'ENOENT') {\n            return null;\n        }\n\n        return translate('DL_CANCEL');\n    }\n\n    get title() {\n        if (this.props.errorCode === 'OUT_OF_SPACE') {\n            return translate(`DL_${this.props.mode.toUpperCase()}_ERROR_DISK_SPACE_HEADER`);\n        }\n        if (this.props.errorCode === 'ACCESS_ERROR') {\n            return translate(`DL_${this.props.mode.toUpperCase()}_ERROR_ACCESS_HEADER`);\n        }\n        if (this.props.errorCode === 'INVALID_DATA') {\n            return translate(`DL_${this.props.mode.toUpperCase()}_ERROR_INVALID_DATA_HEADER`);\n        }\n        if (this.props.errorCode === 'ENOENT') {\n            return translate(`DL_${this.props.mode.toUpperCase()}_ERROR_DESTINATION_PATH_HEADER`);\n        }\n\n        return translate('DL_IMPORT_EXPORT_ERROR_CATCH_ALL_HEADER');\n    }\n\n    _handleOk = () => {\n        if (this.props.errorCode !== 'OUT_OF_SPACE' && this.props.errorCode !== 'ACCESS_ERROR'\n            && this.props.errorCode !== 'ENOENT') {\n            LinkUtils.openContactSupportURL();\n            return;\n        }\n\n        this.props.close();\n    }\n\n    render() {\n        return (\n            <BaseDialog title={ this.title } mode=\"error\" okButtonText={ this.okText } onClickOK={ this._handleOk } cancelButtonText={ this.cancelText } onClickCancel={ this.props.close }>\n                <div className=\"panel-importExport\">\n                    <div data-test-id=\"error\" className=\"panel-importExportDescription\">{ this.errorMessage }</div>\n                </div>\n            </BaseDialog>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport BaseDialog from 'app/js/components/dialogs/BaseDialog';\nimport { translate } from 'app/js/managers/translationManager';\nimport * as FileUtils from 'app/js/utils/fileUtils';\n\n@observer\nexport default class ImportExportCancelDialog extends React.Component {\n\n    static propTypes = {\n        cancelledPaths: PropTypes.arrayOf(PropTypes.string).isRequired,\n        mode: PropTypes.oneOf([ 'import' ]).isRequired,\n        close: PropTypes.func\n    };\n\n    get body() {\n        return <div className=\"panel-importExport\">\n            <div data-test-id=\"cancel\" className=\"panel-importExportDescription\">\n                <div className=\"panel-importExport-list-title\" >{ translate(`DL_${this.props.mode.toUpperCase()}_CANCEL_BODY`) }</div>\n                { this.cancelledList }\n            </div>\n        </div>;\n    }\n\n    get cancelledList() {\n        return this.props.cancelledPaths.map(path => {\n            const libraryName = FileUtils.getFileNameWithoutExtension(FileUtils.getFileNameFromPath(path));\n            return <div className=\"panel-importExport-list-item\" key={ libraryName }>{ libraryName }</div>;\n        });\n    }\n\n    get title() {\n        return translate(`DL_${this.props.mode.toUpperCase()}_CANCEL_HEADER`);\n    }\n\n    _handleOk = () => {\n        this.props.close();\n    }\n\n    render() {\n        return (\n            <BaseDialog\n                title={ translate(`DL_${this.props.mode.toUpperCase()}_CANCEL_HEADER`) }\n                onClickOK={ this._handleOk }\n                cancelButtonText={ null }>\n                { this.body }\n            </BaseDialog>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observable } from 'mobx';\nimport { observer } from 'mobx-react';\n// Import/Export dialog states\nimport ImportExportInitialDialog from './importExport/ImportExportInitialDialog';\nimport ImportExportProgressDialog from './importExport/ImportExportProgressDialog';\nimport ImportExportCompleteDialog from './importExport/ImportExportCompleteDialog';\nimport ImportExportErrorDialog from './importExport/ImportExportErrorDialog';\nimport ImportExportCancelDialog from './importExport/ImportExportCancelDialog';\nimport environment from 'app/js/environment';\nimport { Library } from '@cclibraries/cc-libraries-js';\n\n@observer\nexport default class ImportExportDialog extends React.Component {\n\n    @observable _errorCode = null;\n    @observable.ref _locations = null;\n    @observable _uiState = 'initial';\n\n    static dialogName = 'importExportLibrary';\n\n    static propTypes = {\n        library: PropTypes.instanceOf(Library),\n        mode: PropTypes.oneOf([ 'import', 'export' ]).isRequired,\n        close: PropTypes.func, // Callback for closing the dialog (dialogManager.closeDialog())\n        paths: PropTypes.arrayOf(PropTypes.string)\n    };\n\n    constructor(props) {\n        super(props);\n        // if paths are already provided for import, begin import automatically\n        if (this.props.paths && this.props.mode === 'import') {\n            this._handleStart(this.props.paths);\n        }\n    }\n\n    get initialState() {\n        return <ImportExportInitialDialog mode={ this.props.mode } library={ this.props.library } onStart={ this._handleStart } close={ this.props.close }/>;\n    }\n\n    get progressState() {\n        return <ImportExportProgressDialog mode={ this.props.mode } library={ this.props.library } locations={ this._locations } onSuccess={ this._handleSuccess } onError={ this._handleError } onCancel={ this._handleCancel } close={ this.props.close } />;\n    }\n\n    get cancelledState() {\n        return <ImportExportCancelDialog mode={ this.props.mode } cancelledPaths={ this._locations } close={ this.props.close }/>;\n    }\n\n    get completeState() {\n        return <ImportExportCompleteDialog mode={ this.props.mode } close={ this._handleCloseAfterCompleteState }/>;\n    }\n\n    get errorState() {\n        return <ImportExportErrorDialog mode={ this.props.mode } errorCode={ this._errorCode } close={ this.props.close } />;\n    }\n\n    _handleStart = (location) => {\n        if (typeof location === 'string') {\n            location = [ location ];\n        }\n        this._locations = location;\n        this._uiState = 'progress';\n    }\n\n    _handleSuccess = (library) => {\n        this._library = library;\n        this._uiState = 'complete';\n    }\n\n    _handleError = errorCode => {\n        this._uiState = 'error';\n        this._errorCode = errorCode;\n    }\n\n    _handleCancel = cancelledLocations => {\n        this._locations = cancelledLocations;\n        this._uiState = 'cancelled';\n    }\n\n    _handleCloseAfterCompleteState = () => {\n        this.props.close();\n        if (this._library && this.props.mode === 'import') {\n            environment.navigateToLibrary(this._library);\n            this._library = null;\n        }\n    };\n\n    render() {\n        return (\n            <div className={ `panel-${this.props.mode}-container` }>{ this[`${this._uiState}State`] }</div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport BaseDialog from './BaseDialog';\nimport { Library } from '@cclibraries/cc-libraries-js';\nimport { createElementsFromFiles } from 'app/js/utils/addElementUtils';\nimport { translate } from 'app/js/managers/translationManager';\n\n@observer\nexport default class DropFilesDialog extends React.Component {\n\n    static dialogName = 'dropFiles';\n\n    static propTypes = {\n        title: PropTypes.string.isRequired,\n        messages: PropTypes.arrayOf(PropTypes.string).isRequired,\n        files: PropTypes.arrayOf(PropTypes.object).isRequired,\n        library: PropTypes.instanceOf(Library).isRequired,\n        close: PropTypes.func // Callback for closing the dialog (dialogManager.closeDialog())\n    };\n\n    get canContinue() {\n        return this.props.files.length > 0;\n    }\n\n    onContinue = () => {\n        createElementsFromFiles(this.props.files, this.props.library);\n    }\n\n    @computed get contents() {\n        const messages = this.props.messages;\n        if (messages.length === 1) {\n            // Only one message, so just display it\n            return <div data-test-id=\"drop-files-message\" className=\"panel-dialog-layout-100\">{ messages[0] }</div>;\n        }\n\n        // Otherwise, display multiple messages as a list of bullet points\n        const bullets = messages.map((bullet, index) => <li key={ index }>{ bullet }</li>);\n        return <ul data-test-id=\"drop-files-bullets\" className=\"panel-drop-files-dialog-bullet\">{ bullets }</ul>;\n    }\n\n    render() {\n        return (\n            <BaseDialog title={ this.props.title } mode={ this.canContinue ? 'info' : 'error' } okButtonText={ this.canContinue ? translate('DL_CONTINUE') : null } onClickOK={ this.onContinue }\n                close={ this.props.close } okButtonEnabled={ this.canContinue } >\n                { this.contents }\n            </BaseDialog>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport classNames from 'classnames';\nimport BaseDialog from './BaseDialog';\nimport localSettings from 'app/js/config/localSettings';\nimport metrics from 'app/js/interface/metrics';\nimport Icon from 'app/js/components/Icon';\n\n@observer\nexport default class AnalyticsDialog extends React.Component {\n\n    static dialogName = 'analytics';\n\n    static propTypes = {\n        close: PropTypes.func // Callback for closing the dialog (dialogManager.closeDialog())\n    };\n\n    getDetailsButton(event) {\n        const classes = 'panel-analytics-details-button';\n        const showDetails = () => alert(`Analytics Event\\n${event.details}`);\n        return <div data-test-id=\"details\" className={ classes } onClick={ showDetails }><Icon id=\"Info\" height={ 10 } /></div>;\n    }\n\n    @computed get messages() {\n        const events = metrics.recordedEvents;\n        return events.map((event, index) => (\n            <div className=\"panel-analytics-log\" key={ index } data-test-id={ `analytics-log-message-${index}` }>\n                <div className=\"panel-analytics-message\" data-test-id=\"message\">{ event.message }</div>\n                { this.getDetailsButton(event) }\n            </div>\n        ));\n    }\n\n    get isRecording() {\n        return localSettings.getDebugValue('recordMetrics');\n    }\n\n    toggleRecording = () => {\n        localSettings.setDebugValue('recordMetrics', !this.isRecording);\n    };\n\n    clearRecording = () => {\n        metrics.clearRecordedEvents();\n    };\n\n    get recordButton() {\n        const classes = classNames('panel-analytics-record-button', { on: this.isRecording });\n        return (\n            <div className=\"panel-analytics-record-button-container\">\n                <div data-test-id=\"analytics-record-button\" className={ classes } onClick={ this.toggleRecording } />\n                <div data-test-id=\"analytics-record-text\" className=\"panel-analytics-record-text\" >{ this.isRecording ? 'Recording' : 'Not Recording' }</div>\n            </div>\n        );\n    }\n\n    get clearButton() {\n        return <button data-test-id=\"analytics-clear-button\" onClick={ this.clearRecording }>Clear Events</button>;\n    }\n\n    get overrideButton() {\n        if (metrics.isEnabled(true)) {\n            return;\n        }\n        const text = metrics.isEnabled() ? 'Stop using the Force' : 'Use the Force';\n        const toggle = () => metrics.setForceEnableAnalytics(!metrics.isEnabled());\n        return <div data-test-id=\"analytics-force-button\" className=\"panel-analytics-force-button\" onClick={ toggle }>{ text }</div>;\n    }\n\n    get enabledState() {\n        if (metrics.isEnabled(true)) {\n            return 'enabled';\n        }\n        return metrics.isEnabled() ? 'forcibly enabled' : 'disabled';\n    }\n\n    render() {\n        const description = `Record metrics as they are reported (doesn't wait for upload to Ingest)`;\n        return (\n            <BaseDialog title=\"Panel Analytics Events\" cancelButtonText=\"\" close={ this.props.close } >\n                <div className=\"panel-analytics-description\">{ description }</div>\n                <div className=\"panel-analytics-buttons\">\n                    { this.recordButton }\n                    { this.clearButton }\n                </div>\n                <div className=\"panel-analytics-logs\">{ this.messages }</div>\n                <div data-test-id=\"analytics-state\" className=\"panel-analytics-state\">Analytics are <b>{ this.enabledState }</b> for this account</div>\n                { this.overrideButton }\n            </BaseDialog>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport BaseDialog from './BaseDialog';\nimport environment from 'app/js/environment';\nimport * as ColorUtils from 'app/js/utils/colorUtils';\nimport Icon from 'app/js/components/Icon';\nimport { observable, action } from 'mobx';\nimport { observer } from 'mobx-react';\n\n@observer\nexport default class DebugThemeAndLocaleDialog extends React.Component {\n\n    static dialogName = 'appThemeDebug';\n\n    static propTypes = {\n        close: PropTypes.func // Callback for closing the dialog (dialogManager.closeDialog())\n    };\n\n    @observable theme = null;\n    @observable locale = null;\n    @observable color = ColorUtils.hexToRGBA('535353');\n    @observable currentTheme = this.getThemeName(environment.getHostEnvironment().appSkinInfo);\n    @observable currentLocale = environment.getLocale(true);\n\n    //TODO: Theme map working only in standalone mode for now\n    themeMap = { lighter: 'F0F0F0', light: 'B8B8B8', dark: '535353', darker: '323232' };\n\n    listItem(item, index, useTheme = false) {\n        const isSelected = item === (useTheme ? this.currentTheme : this.currentLocale);\n        const iconData = isSelected ? { icon: 'Checkmark' } : {};\n        const classes = classNames('panel-select-menu-item', { 'is-selected': isSelected });\n        const key = `${useTheme ? 'theme' : 'locale'}-item-${index}`;\n        const onClick = useTheme ? this.switchTheme(item) : this.switchLocale(item);\n        return <div key={ key } className={ classes } onClick={ onClick } tabIndex=\"0\" data-test-id={ `panel-dropdown-menu-item-${key}` }>\n            <div data-test-id=\"panel-dropdown-menu-item-text\" className=\"panel-menu-label\">\n                { item }\n            </div>\n            <div data-test-id=\"panel-dropdown-menu-item-icon\" className=\"panel-menu-icon\">{ iconData.icon ? <Icon id={ iconData.icon } height={ 12 }/> : null }</div>\n        </div>;\n    }\n\n    get themeList() {\n        return Object.keys(this.themeMap).map((item, index) => this.listItem(item, index, true));\n    }\n\n    get localeList() {\n        return environment.supportedLocales.map((item, index) => this.listItem(item, index));\n    }\n\n    @action\n    switchTheme = theme => () => {\n        this.color = ColorUtils.hexToRGB(this.themeMap[theme]);\n        this.theme = { panelBackgroundColor: { color: this.color } };\n        this.currentTheme = theme;\n    };\n\n    getThemeName({ panelBackgroundColor }) {\n        const RGBA = panelBackgroundColor.color;\n        const hexName = ColorUtils.rgbToHex(RGBA.red, RGBA.green, RGBA.blue);\n        return Object.keys(this.themeMap).find(key => hexName.includes(this.themeMap[key]));\n    }\n\n    @action\n    switchLocale = locale => () => {\n        this.locale = locale;\n        this.currentLocale = locale;\n    };\n\n    onClickOK = () => {\n        environment.updateHostInfo(this.locale, this.theme);\n    };\n\n    onClickSecondary = () => {\n        const theme = { panelBackgroundColor: { color: ColorUtils.hexToRGBA('535353') } };\n        const locale = 'en_US';\n        environment.updateHostInfo(locale, theme);\n    };\n\n    render() {\n        const descriptionTheme = 'Select Panel Color Theme';\n        const descriptionLocale = 'Select Panel Locale';\n        const title = 'Panel Color Theme & Locale';\n        return (\n            <BaseDialog\n                title={ title }\n                okButtonText=\"Apply Changes\"\n                onClickOK={ this.onClickOK }\n                cancelButtonText=\"Cancel\"\n                close={ this.props.close }\n                secondaryButtonText=\"Reset\"\n                onClickSecondary={this.onClickSecondary}\n            >\n                <div className=\"panel-theme-locale-description\">{ descriptionTheme }</div>\n                <div data-test-id=\"theme-list\" className=\"theme-list\">{ this.themeList }</div>\n                <div data-test-id=\"theme-locale-separator\" className=\"panel-theme-locale-border\"/>\n                <div className=\"panel-theme-locale-description\">{ descriptionLocale }</div>\n                <div data-test-id=\"locale-list\" className=\"locale-list\">{ this.localeList }</div>\n            </BaseDialog>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { computed } from 'mobx';\nimport appState from 'app/js/appState';\n\n/**\n * We allow relinking a layer to another element of the same type in CEP apps like Photoshop that have layers.\n * This shows an overlay on top of the panel with available elements on canvas to relink to.\n * For reference, here is the old eng spec on it, where a linked layer was referred to as a linked element on the canvas:\n * https://wiki.corp.adobe.com/display/ccprojects/Linked+Library+Elements+-+Architecture\n * That terminology is confusing now, so we're referring to it as a linked layer.\n */\n\n@observer\nexport default class RelinkLayerOverlay extends React.Component {\n\n    static dialogName = 'relinkLayerOverlay';\n\n    static propTypes = {\n        close: PropTypes.func.isRequired // Callback for closing the overlay (dialogManager.closeDialog())\n    };\n\n    static canDisplay() {\n        // use appState instead of context since this is a static property\n        return appState.panel.viewState.isRelinkLayerMode();\n    }\n\n    closeOverlay = () => {\n        this.props.close();\n    }\n\n    @computed get message() {\n        const uiState = appState.panel.viewState.getState();\n        const messageText = uiState && uiState.modeParams.overlayMessage;\n        return <div data-test-id=\"panel-relink-overlay-message\" className=\"panel-relink-overlay-message\">{ messageText }</div>;\n    }\n\n    render() {\n        // Note: We need to use onMouseOver rather than onMouseEnter for this to work properly within a web component,\n        // because React will only listen to events on the document and the latter get eaten by the webcomponent boundary\n        return (\n            <div data-test-id=\"panel-relink-overlay\" className=\"panel-relink-overlay\" onMouseOver={ this.closeOverlay } style={ { top: appState.panel.viewState.panelHeaderHeight } }>\n                { this.message }\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport BaseDialog from './BaseDialog';\nimport { translate } from 'app/js/managers/translationManager';\n\n@observer\nexport default class StockErrorDialog extends React.Component {\n\n    static dialogName = 'stockError';\n\n    static propTypes = {\n        title: PropTypes.string.isRequired,\n        message: PropTypes.string.isRequired,\n        close: PropTypes.func // Callback for closing the dialog (dialogManager.closeDialog())\n    };\n\n    render() {\n        return (\n            <BaseDialog title={ translate(this.props.title) } okButtonText={ translate('DL_OK') } cancelButtonText={ null } close={ this.props.close } >\n                <div data-test-id=\"stock-error-message\" className=\"panel-dialog-layout-100\">{ translate(this.props.message) }</div>\n            </BaseDialog>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport BaseDialog from './BaseDialog';\nimport { translate } from 'app/js/managers/translationManager';\n\n@observer\nexport default class StockVideoCompPickerDialog extends React.Component {\n\n    static dialogName = 'stockVideoCompPicker';\n\n    static propTypes = {\n        licenseA: PropTypes.object.isRequired,\n        licenseB: PropTypes.object.isRequired,\n        onClickOK: PropTypes.func.isRequired,\n        onClickCancel: PropTypes.func.isRequired,\n        close: PropTypes.func // Callback for closing the dialog (dialogManager.closeDialog())\n    };\n\n    onClickCancel = () => this.props.onClickCancel();\n    onClickA = () => this.props.onClickOK(this.props.licenseA);\n    onClickB = () => this.props.onClickOK(this.props.licenseB);\n\n    render() {\n        const title = translate('DL_STOCK_PURCHASE_DIALOG_TITLE_SAVE_VIDEO');\n        const message = translate('DL_STOCK_PURCHASE_DIALOG_VIDEO_SAVE_TYPE_MESSAGE');\n\n        const describe = license => `${license.label} : ${license.resolution}`;\n\n        return (\n            <BaseDialog title={ title } okButtonText={ this.props.licenseA.label } secondaryButtonText={ this.props.licenseB.label }\n                onClickOK={ this.onClickA } onClickSecondary={ this.onClickB } onClickCancel={ this.onClickCancel } close={ this.props.close } >\n                <div data-test-id=\"stock-video-comp-picker-message\" className=\"panel-dialog-layout-100\">{ message }</div>\n                <div className=\"stock-video-comp-picker-description\" data-test-id=\"stock-video-comp-picker-description\">\n                    <span className=\"panel-video-license-option\" data-test-id=\"stock-video-comp-picker-description-license-A\">{ describe(this.props.licenseA) }</span>\n                    <span className=\"panel-video-license-option\" data-test-id=\"stock-video-comp-picker-description-license-B\">{ describe(this.props.licenseB) }</span>\n                </div>\n            </BaseDialog>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n// https://opensource.adobe.com/spectrum-web-components/components/tray\n// Tray doesn't exist in RS2, no fallback\nimport type { Tray as TrayType } from '@ccx-public/spectrum-web-component-fallbacks/dist/tray';\nimport createWrapper from './utils/createWrapper';\nimport { SWCLoader } from './utils/SWCLoader';\n\nlet swcLoader;\nif (!process.env.EXCLUDE_SWC) {\n    swcLoader = new SWCLoader(['sp-tray'], async () => {\n        const { Tray } = await import(\n            /* webpackChunkName: \"SpTray\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/tray'\n        );\n        return [Tray];\n    });\n}\n\nexport default createWrapper<TrayType>({\n    displayName: 'Tray',\n    swcLoader,\n    fallback: undefined,\n    swcProps: (props) => {\n        const { className, ...rest } = props;\n        return {\n            class: className,\n            ...rest,\n        };\n    },\n    tagName: 'sp-tray',\n});\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport MenuView from 'app/js/components/MenuView';\nimport OverlayState from 'app/js/components/utils/OverlayState';\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport { Menu } from '@ccx-public/spectrum-wrapper/Menu';\nimport MenuItems from 'app/js/components/MenuItems';\nimport Tray from '@ccx-public/spectrum-wrapper/Tray';\n\n/**\n * Context menu that's displayed as a modal dialog.\n */\n\nconst DEFAULT_MINIMUM_NUMBER_VISIBLE_ITEMS = 4;\n\n@observer\nexport default class ContextMenu extends React.Component {\n\n    static defaultProps = {\n        maxMenuItemsVisible: 10\n    };\n\n    static propTypes = {\n        menuItems: PropTypes.array.isRequired,\n        x: PropTypes.number.isRequired,\n        y: PropTypes.number.isRequired,\n        maxMenuItemsVisible: PropTypes.number,\n        maxWidth: PropTypes.oneOfType([ PropTypes.string, PropTypes.number ]),\n        close: PropTypes.func,\n        position: PropTypes.string,\n        parentElement: PropTypes.object, // optional additional parent element to be ignored by overlaystate\n    };\n\n    // We can invoke this as a menu, for environments that don't have native menus.\n    static dialogName = 'contextMenu';\n\n    // Need to pass in hideEvent 'mousedown' because firefox right click triggers an extra\n    // click event that will automatically hide the context menu right after it is opened\n    overlayState = new OverlayState({\n        isOpen: true,\n        onClose: () => this.props.close(),\n        hideEvent: 'mousedown',\n        ignoreFocus: configuration.currentProduct.config.ignoreFocusContextMenu\n    });\n\n    get style() {\n        const width = environment.getPanelWidth();\n        const height = environment.getPanelHeight();\n        const x = this.props.x;\n        const y = this.props.y;\n        const menuWidth = configuration.MAX_CONTEXT_MENU_WIDTH;\n        // Check that there's enough space to display the menu\n        // TODO: Improve this heuristic\n        let xObj;\n        if (this.props.position === 'right') {\n            xObj = width - x < menuWidth ? { left: width - x } : { right: x };\n        } else {\n            if (width - x < menuWidth) {\n                xObj = x - menuWidth > 0 ? { right: width - x } : { left: width - menuWidth };\n            } else {\n                xObj = { left: x };\n            }\n        }\n        const yObj = height - y < 150 ? { top: 'auto', bottom: height - y } : { top: y };\n\n        return Object.assign(xObj, yObj);\n    }\n\n    close = () => {\n        // We have to close via the overlay state, to stop it listening to global events - this will in turn call\n        // our props.close:\n        this.overlayState.hideOverlay();\n    }\n\n    setParentRef = ref => {\n        // Parent elements includes the context menu div and the optional menu button (for toggling purposes)\n        this.overlayState.setParentElement([ ref, this.props.parentElement ]);\n    }\n\n    get trayComponent() {\n        // Tray component doesn't auto-close on item click, so we need to add it to each onClick method unless another dialog is triggered.\n        const itemWithoutOnClickClose = [ 'delete', 'duplicate' ];\n        const mappedMenuItems = this.props.menuItems.map(item => ({\n            ...item,\n            onClick: () => {\n                item.onClick();\n                itemWithoutOnClickClose.includes(item.id) && this.close();\n            },\n        }));\n\n        return (\n            <Tray\n                style={{\n                    display: 'flex',\n                    justifyContent:'space-between',\n                }}\n                ref={ this.setParentRef }\n                open={ this.overlayState.isOpen }\n                onClose={ this.close }\n                items={mappedMenuItems}\n            >\n                <div className=\"tray-menu-items\" data-test-id=\"tray-menu-items\">\n                    <MenuItems menuData={ mappedMenuItems }/>\n                </div>\n            </Tray>\n        );\n    }\n\n    get defaultContextMenu() {\n        const menuItemsExcludingDividers = this.props.menuItems.filter(item => !item.divider);\n        const minMenuItemsVisible = Math.min(menuItemsExcludingDividers.length, DEFAULT_MINIMUM_NUMBER_VISIBLE_ITEMS);\n\n        if (environment.isMobileView && configuration.currentProduct.config.useTrayContextMenu) {\n            return this.trayComponent;\n        }\n        return (\n            <div ref={ this.setParentRef }>\n                <MenuView clientY={this.props.y} menuItems={ this.props.menuItems } maxMenuItemsVisible={ this.props.maxMenuItemsVisible } minMenuItemsVisible={ minMenuItemsVisible }\n                    maxWidth={ this.props.maxWidth } style={ this.style } close={ this.close } className=\"panel-search-types\" />\n            </div>\n        );\n    }\n\n    get spectrumWrapperContextMenu() {\n        // The spectrum wrapper menu does not close automatically when an item is clicked, so we need to add that as part of each onClick method.\n        const mappedMenuItems = this.props.menuItems.map(item => ({\n            ...item,\n            onClick: () => {\n                item.onClick();\n                this.close();\n            },\n        }));\n\n        return (\n            <Menu\n                style={ {\n                    maxHeight: '500px',\n                    overflowY: 'auto',\n                    ...this.style\n                } }\n                ref={ this.setParentRef }\n                open={ this.overlayState.isOpen }\n                onClose={ this.close }\n            >\n                <MenuItems menuData={ mappedMenuItems } hideDividers={configuration.currentProduct.config.hideLibraryActionMenuDivider} />\n            </Menu>\n        );\n    }\n\n    render() {\n        return configuration.currentProduct.config.useSpectrumWrapperContextMenu ? this.spectrumWrapperContextMenu : this.defaultContextMenu;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\n/**\n * Provides an SVG triangle that can be used alongside coachmarks and popovers.\n * Add a class to change the color.\n */\n\nexport default class Triangle extends React.Component {\n    static defaultProps = {\n        offset: '25px',\n        size: '18px',\n        classes: 'popover-triangle',\n        horizontalPlacement: 'left'\n    };\n\n    static propTypes = {\n        horizontalPlacement: PropTypes.oneOf([ 'left', 'right' ]),\n        offset: PropTypes.string,\n        direction: PropTypes.oneOf([ 'up', 'down' ]).isRequired,\n        size: PropTypes.string,\n        classes: PropTypes.string // Use to provide 'fill' color through the 'color' css property (so that theme variables stay in css)\n    };\n\n    render() {\n        let path;\n        const style = {\n            fill: 'currentColor',\n            stroke: '#e1e1e1',\n            position: 'absolute',\n            width: this.props.size,\n            height: this.props.size,\n            [this.props.horizontalPlacement]: this.props.offset\n        };\n        const offset = `-${this.props.size}`;\n\n        // Note that these triangles have the point in the center of the viewbox.\n        // If later we need other directions, left: \"M 50,50 L 100,0 L 100,100\", right: \"M 0,0 L 0,100 L 50,50\"\n        if (this.props.direction === 'down') {\n            style.bottom = offset;\n            path = 'M 100,0 L 50,50 L 0,0';\n        } else {\n            style.top = offset;\n            path = 'M 0,100 L 50,50 L 100,100';\n        }\n\n        return (<div data-test-id=\"popover-triangle\" className={ this.props.classes }>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\" style={ style }>\n                <path strokeWidth=\"5px\" d={ path }/>\n            </svg>\n        </div>);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { observer } from 'mobx-react';\nimport Button from '@ccx-public/spectrum-wrapper/Button';\nimport ButtonGroup from '../ButtonGroup';\nimport environment from 'app/js/environment';\nimport { isEventWithin } from 'app/js/utils/DOMUtils';\nimport Triangle from 'app/js/components/Triangle';\nimport OverlayState from '../utils/OverlayState';\n\n/**\n * Base class for all panel overlays - this should be used by other overlays.\n */\n\n@observer\nexport default class BasePopover extends React.Component {\n\n    static defaultProps = {\n        triangleOffset: 25,\n        showPopoverTriangle: true,\n        closeOnWindowClick: true,\n        closeOnButtonClick: true,\n        closeOnOverlayEvent: true,\n        closeOnResize: true,\n        horizontalPlacement: 'left',\n        hideFooter: false,\n        onDragEnter: () => {},\n        verticalButtonGroup: false,\n        buttonSize: 'M'\n    };\n\n    overlayState = new OverlayState({\n        ignoreAllEvents: !this.props.closeOnOverlayEvent,\n        ignoreClickOutsideEvent: !this.props.closeOnWindowClick,\n        ignoreScrollEvents: true,\n        ignoreResizeEvents: !this.props.closeOnResize,\n        ignoreFocus: true,\n        onClose: this.props.close,\n        isOpen: true\n    });\n\n    static propTypes = {\n        className: PropTypes.string,\n        okButtonText: PropTypes.string,\n        cancelButtonText: PropTypes.string,\n        cancelButtonQuiet: PropTypes.bool,\n        buttonSize: PropTypes.string,\n        onClickOK: PropTypes.func,\n        onClickCancel: PropTypes.func,\n        close: PropTypes.func.isRequired,\n        children: PropTypes.node,\n        hideFooter: PropTypes.bool,\n        indicators: PropTypes.node,\n        x: PropTypes.oneOfType([ PropTypes.string, PropTypes.number ]).isRequired,\n        y: PropTypes.number.isRequired,\n        width: PropTypes.number,\n        triangleOffset: PropTypes.number,\n        placement: PropTypes.oneOf([ 'top', 'bottom' ]).isRequired,\n        horizontalPlacement: PropTypes.oneOf([ 'right', 'left' ]),\n        showPopoverTriangle: PropTypes.bool,\n        closeOnWindowClick: PropTypes.bool,\n        isDisabled: PropTypes.bool,\n        onDragEnter: PropTypes.func,\n        closeOnButtonClick: PropTypes.bool,\n        closeOnOverlayEvent: PropTypes.bool,\n        closeOnResize: PropTypes.bool, // Whether we want to close the popover on resize.\n        additionalFooterButtons: PropTypes.node, // Should contain Buttons only, since they will be added to the ButtonGroup component\n        additionalFooterContent: PropTypes.node, // Additional content to display near the footer ButtonGroup, but not inside of it\n        minHeight: PropTypes.number, // the min height of the popover after which it should be forced to scroll,\n        verticalButtonGroup: PropTypes.bool\n    };\n\n    onClickOK = () => {\n        this.props.closeOnButtonClick && this.props.close();\n        this.props.onClickOK && this.props.onClickOK();\n    }\n\n    onClickCancel = () => {\n        this.props.closeOnButtonClick && this.props.close();\n        this.props.onClickCancel && this.props.onClickCancel();\n    }\n\n    get popoverPositionStyle() {\n        const style = { [this.props.placement]: this.props.y, [this.props.horizontalPlacement]: this.props.x, width: this.props.width };\n        if (this.props.minHeight) {\n            style.height = Math.min(window.innerHeight, this.props.minHeight) + 'px';\n            style['overflowY'] = 'auto';\n        }\n        return style;\n    }\n\n    get popoverTriangle() {\n        if (this.props.showPopoverTriangle) {\n            return <Triangle direction={this.props.placement === 'bottom' ? 'down' : 'up'} horizontalPlacement={ this.props.horizontalPlacement } offset={ this.props.triangleOffset + 'px' } />;\n        }\n    }\n\n    get okButton() {\n        return this.props.okButtonText && (\n            <Button size={this.props.buttonSize} className={classNames({ 'disabled': this.props.isDisabled }, 'popover-ok-button')} disabled={ this.props.isDisabled } data-test-id=\"popover-ok-button\" variant=\"cta\" onClick={ () => { !this.props.isDisabled && this.onClickOK(); } }>{ this.props.okButtonText }</Button>\n        );\n    }\n\n    get cancelButton() {\n        return this.props.cancelButtonText && (\n            <Button size={this.props.buttonSize} quiet={this.props.cancelButtonQuiet} variant=\"secondary\" data-test-id=\"popover-cancel-button\" className=\"popover-cancel-button\" onClick={ this.onClickCancel }>{ this.props.cancelButtonText }</Button>\n        );\n    }\n\n    get footer() {\n        if (this.props.hideFooter) { return; }\n        const isWindowsOS = environment.isWindowsOS();\n        const classes = classNames('popover-footer', {\n            'popover-footer-vertical': this.props.verticalButtonGroup\n        });\n        return <div data-test-id=\"popover-footer\" className={classes}>\n            { this.props.additionalFooterContent }\n            <ButtonGroup className=\"popover-footer-buttons\" preferSpectrumFallback orientation={this.props.verticalButtonGroup ? 'vertical' : 'horizontal'}>\n                { !isWindowsOS && <>{ this.props.additionalFooterButtons }{ this.cancelButton }{ this.okButton }</> }\n                { isWindowsOS && <>{ this.okButton }{ this.cancelButton }{ this.props.additionalFooterButtons }</> }\n            </ButtonGroup>\n        </div>;\n    }\n\n    _setPopoverParent = ref => {\n        this.overlayState.setParentElement(ref);\n        this._popoverParent = ref;\n    }\n\n    handleWindowClick = (e) => {\n        e.stopPropagation();\n        if (this.props.closeOnWindowClick && (!this._popoverParent || !isEventWithin(e, this._popoverParent))) {\n            this.props.close();\n        }\n    };\n\n    render() {\n        return (\n            <div data-test-id=\"popover-wrapper\" className={classNames('popover-wrapper', this.props.className)} onClick={ this.handleWindowClick } onDragEnter={ this.props.onDragEnter }>\n                <div data-test-id=\"popover-layout\" ref={ this._setPopoverParent } className=\"popover-layout\" style={ this.popoverPositionStyle }>\n                    { this.popoverTriangle }\n                    { this.props.children }\n                    { this.footer }\n                </div>\n                { this.props.indicators }\n            </div>\n        );\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport BasePopover from 'app/js/components/dialogs/BasePopover';\nimport { translate } from 'app/js/managers/translationManager';\nimport configuration from 'app/js/config/configuration';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\n\n// TODO: Update with correct graphic for unlock dialog when we get this from Kelly\nimport unlockCoachmark from 'app/images/unlock_coachmark.png';\n\n@observer\nexport default class UnlockToolkitDialog extends React.Component {\n\n    static contextType = LibrariesContext\n\n    static dialogName = 'unlockToolkit';\n\n    static propTypes = {\n        close: PropTypes.func.isRequired, // Callback for closing the overlay (dialogManager.closeDialog())\n    };\n\n    onClickOK = () => {\n        this.context.viewState.unlock(this.context.libraryManager.currentLibrary);\n    }\n\n    onClose = () => {\n        this.props.close();\n    }\n\n    get toolkitType() {\n        const type = this.context.libraryManager.currentLibrary && this.context.libraryManager.currentLibrary.toolkitId;\n        if (configuration.TOOLKIT_TYPES.includes(type)) {\n            return type.toUpperCase();\n        }\n        return 'GENERIC';\n    }\n\n    get title() {\n        return <div data-test-id=\"popover-title\" className=\"popover-title\">{ translate('DL_TOOLKIT_UNLOCK_POPOVER_TITLE', { toolkitName: this.context.libraryManager.currentLibrary.name }) }</div>;\n    }\n\n    get body() {\n        // TODO: update these strings with final string values once we have them\n        return <div data-test-id=\"popover-body\" className=\"popover-body\">{ translate(`DL_${this.toolkitType}_TOOLKIT_UNLOCK_POPOVER_BODY`) }</div>;\n    }\n\n    get graphic() {\n        return <img data-test-id=\"popover-graphic\" className=\"popover-graphic\" src={ unlockCoachmark }></img>;\n    }\n\n    get y() {\n        return this.context.viewState.panelHeaderHeight;\n    }\n\n    render() {\n        return (\n            <div className=\"coach-mark-with-image\">\n                <BasePopover\n                    okButtonText={ translate('DL_MY_TOOLKIT_UNLOCK_POPOVER_UNLOCK_BUTTON') }\n                    onClickOK={ this.onClickOK }\n                    cancelButtonText={ translate('DL_CANCEL') }\n                    close={ this.onClose }\n                    showPopoverTriangle={false}\n                    x={ 5 }\n                    y={ this.y }\n                    placement=\"top\">\n                    { this.graphic }\n                    { this.title }\n                    { this.body }\n                </BasePopover>\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { computed } from 'mobx';\nimport { translate } from 'app/js/managers/translationManager';\nimport { isEventWithin } from 'app/js/utils/DOMUtils';\nimport Icon from 'app/js/components/Icon';\nimport configuration from 'app/js/config/configuration';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\n\nconst STORED_RECENT_SEARCH_LIBRARIES_KEY = configuration.STORED_RECENT_SEARCH_LIBRARIES_KEY;\nconst STORED_RECENT_SEARCH_STOCK_KEY = configuration.STORED_RECENT_SEARCH_STOCK_KEY;\n\n@observer\nexport default class RecentSearchesOverlay extends React.Component {\n    static contextType = LibrariesContext;\n    static dialogName = 'recentSearchesOverlay';\n\n    static propTypes = {\n        close: PropTypes.func.isRequired // Callback for closing the overlay (dialogManager.closeDialog())\n    };\n\n    get recentStockSearches() {\n        return this.context.viewState.getRecentSearches()[STORED_RECENT_SEARCH_STOCK_KEY].slice(0, configuration.STORED_RECENT_SEARCH_DISPLAY_LIMIT);\n    }\n\n    get recentLibrarySearches() {\n        return this.context.viewState.getRecentSearches()[STORED_RECENT_SEARCH_LIBRARIES_KEY].slice(0, configuration.STORED_RECENT_SEARCH_DISPLAY_LIMIT);\n    }\n\n    // Click handlers\n\n    onClickOutsideDialog = (event) => {\n        if (!this._dialogElement || !isEventWithin(event, this._dialogElement)) {\n            // Treat clicking outside the dialog as a cancel:\n            this.onClose();\n        }\n    }\n\n    onClearAllClick = () => {\n        this.context.viewState.clearAllRecentSearches();\n        this.onClose();\n    }\n\n    onClearItemClick = (searchType, searchText) => {\n        this.context.viewState.clearRecentSearch(searchType, searchText);\n\n        if (!this.context.viewState.hasRecentSearches()) {\n            this.onClose();\n            return;\n        }\n\n        this.forceUpdate();\n    }\n\n    onRecentSearchClick = (type, text) => {\n        const viewState = this.context.viewState;\n\n        // Only change search type if we click on a recent stock search, or we are in stock search clicking a non-stock recent search\n        if (type === 'stock') {\n            viewState.setSearchType(type);\n        } else if (viewState.getSearchType() === 'stock') {\n            // if clicking on non stock recent search while in the stock search mode, change search type to Current Library\n            viewState.setSearchType('library');\n        }\n\n        const searchQuery = viewState.getSearchText() || '';\n        viewState.setSearchText(text);\n\n        if (configuration.currentProduct.config.reportSearchSDMEvents) {\n            const keywordRank = this.recentLibrarySearches.indexOf(text) + 1;\n\n            const personalSearchPayload = {\n                'content.category': 'brands&libraries',\n                'ui.search_keyword': text,\n                'custom.ui.location': 'editor',\n                'custom.ui.search_type': 'recents',\n                'custom.ui.keyword_rank': keywordRank,\n                'custom.search.id': viewState.getSearchId(),\n                'custom.search.prefix_query': searchQuery,\n                'custom.search.suggestion_list_shown': this.recentLibrarySearches\n            };\n\n            const viewSearchResultPayload = {\n                'content.category': 'brands&libraries',\n                'ui.search_keyword': text,\n                'custom.ui.location': 'editor',\n                'custom.search.id': viewState.getSearchId(),\n                'custom.search.result_count': viewState.librariesInViewOrder.length\n            };\n\n            configuration.currentProduct.config.reportSearchSDMEvents(personalSearchPayload);\n            configuration.currentProduct.config.reportSearchSDMEvents(viewSearchResultPayload);\n        }\n\n        this.onClose();\n    }\n\n    onClose = () => this.props.close();\n\n    getListItem(value, searchType) {\n        return <div data-test-id={ `list-item-${value}` } className=\"panel-recent-search-overlay-list-item\" key={ value } >\n            { configuration.currentProduct.config.enableRecentSearchClockIcons && <Icon height={ 18 } id=\"Clock\" />}\n            <div className=\"recent-search-text-wrapper\"><div data-test-id=\"list-item-text\" className=\"recent-search-text\" onClick={ () => this.onRecentSearchClick(searchType, value) }>{ value }</div></div>\n            <div data-test-id=\"close-icon\" className=\"clear-recent-search-icon\" onClick={ () => this.onClearItemClick(searchType, value) }><Icon height={ 16 } id=\"Close\" /></div>\n        </div>;\n    }\n\n    get clearAllButton() {\n        return <div data-test-id=\"clear-all\" className=\"panel-recent-search-overlay-header-clear-all\" onClick={ this.onClearAllClick }>{ translate('DL_RECENT_SEARCH_OVERLAY_CLEAR_ALL') }</div>;\n    }\n\n    getSearchTypeList(searchType) {\n        const isStockList = searchType === STORED_RECENT_SEARCH_STOCK_KEY;\n        const searches = isStockList ? this.recentStockSearches : this.recentLibrarySearches;\n        const recentHeaderText = configuration.currentProduct.config.customRecentSearchTitle || 'DL_RECENT_SEARCH_OVERLAY_LIBRARY_HEADER';\n        const headerText = isStockList ? 'DL_RECENT_SEARCH_OVERLAY_STOCK_HEADER' : recentHeaderText;\n        // Only show clear all in stock section if there is no libraries section\n        const includeClearAll = !configuration.currentProduct.config.disableClearAllSearches && (isStockList && this.recentLibrarySearches.length === 0 || !isStockList);\n\n        return <React.Fragment>\n            <div data-test-id={ `${searchType}-header` } className=\"panel-recent-search-overlay-header\">\n                <div data-test-id={ `${searchType}-header-text` } className=\"panel-recent-search-overlay-header-text\">{ translate(headerText) }</div>\n                { includeClearAll && this.clearAllButton }\n            </div>\n            { searches.map(search => this.getListItem(search, searchType)) }\n        </React.Fragment>;\n    }\n\n    get recentLibrarySearchList() {\n        if (this.recentLibrarySearches.length) {\n            return this.getSearchTypeList(STORED_RECENT_SEARCH_LIBRARIES_KEY);\n        }\n    }\n\n    get recentStockSearchList() {\n        // only show divider if libraries section has items\n        const showDivider = this.recentLibrarySearches.length > 0;\n        if (this.recentStockSearches.length) {\n            return <React.Fragment>\n                { showDivider && <div data-test-id=\"divider\" className=\"panel-recent-search-overlay-subdivider\"></div> }\n                { this.getSearchTypeList(STORED_RECENT_SEARCH_STOCK_KEY) }\n            </React.Fragment>;\n        }\n    }\n\n    setOverlayElement = (element) => {\n        this._dialogElement = element;\n    };\n\n    get topDistance() {\n        return this.context.viewState.searchBarBottom + 8;\n    }\n\n    @computed get shouldShowStockList() {\n        return !this.context.viewState.isRootView() && !this.context.libraryManager.currentLibrary.isDocumentAssets && !configuration.currentProduct.config.disableStockSearch;\n    }\n\n    render() {\n        return (\n            <div data-test-id=\"panel-recent-search-overlay\" className=\"panel-recent-search-overlay\" onClick={ this.onClickOutsideDialog } style={ { top: this.topDistance } }>\n                <div className=\"panel-recent-search-overlay-content\" ref={ this.setOverlayElement }>\n                    {this.recentLibrarySearchList}\n                    { this.shouldShowStockList && this.recentStockSearchList }\n                </div>\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observable, computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport BaseDialog from './BaseDialog';\nimport classNames from 'classnames';\nimport { Library } from '@cclibraries/cc-libraries-js';\nimport metrics from 'app/js/interface/metrics';\nimport { translate } from 'app/js/managers/translationManager';\nimport TeamSelector from 'app/js/components/TeamSelector';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport Icon from 'app/js/components/Icon';\nimport Button from 'app/js/components/Button';\nimport { getCollaboratorEmails, isSharedUserLibrary } from 'app/js/utils/libraryUtils';\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport SpectrumCircleLoader from 'app/js/components/spectrum/SpectrumCircleLoader';\n\n@observer\nexport default class PromoteTeamLibraryDialog extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static dialogName = 'promoteLibrary';\n\n    static propTypes = {\n        library: PropTypes.instanceOf(Library).isRequired,\n        close: PropTypes.func,\n        promote: PropTypes.func.isRequired\n    };\n\n    @computed\n    get writableFolders() {\n        if (this.props.library.team) {\n            return this.context.libraryManager.platformFolders.filter(team => team.id !== this.props.library.team.id);\n        }\n        return this.context.libraryManager.platformFolders;\n    }\n\n    @observable.ref selectedFolder = this.writableFolders[0];\n\n    permission = 'none';\n\n    componentDidMount() {\n        // We're going to use the platformFolders that are already loaded to seed the dropdown, but we will trigger a\n        // non-blocking collection refresh on the process to keep things up to date.\n        this.context.libraryManager.refreshTeams();\n        this.context.libraryManager.fetchLibraryCollaborations(this.props.library, configuration.FETCH_COLLABORATIONS_THROTTLE); // to get the up to date shareTooltip\n    }\n\n    get library() {\n        return this.props.library;\n    }\n\n    get title() {\n        return translate('DL_TEAM_LIBRARY_PROMOTE_TITLE');\n    }\n\n    get message() {\n        return translate('DL_PROMOTE_TEAM_MESSAGE');\n    }\n\n    get okButtonText() {\n        return translate('DL_MOVE');\n    }\n\n    get dropdown() {\n        return this.writableFolders.length > 0 && (\n            <div className=\"panel-dialog-share-select-area promote\">\n                <TeamSelector\n                    onFolderChange={this.handleFolderChange}\n                    library={ this.props.library }\n                    onPermissionChange={this.onPermissionChange}\n                    selectedFolder={this.selectedFolder}\n                />\n            </div>\n        );\n    }\n\n    get buttonContent() {\n        return <div data-test-id=\"promote-team-copy-collaborators\" className=\"promote-team-copy-collaborators-label-container\">\n            <div className=\"promote-team-copy-collaborators-icon-container\">\n                <Icon className=\"promote-team-copy-collaborators-icon\" id=\"Copy\" height={14}/>\n            </div>\n            <div>\n                <div className=\"promote-team-copy-collaborators-label-text\">\n                    {translate('DL_COPY_COLLABORATORS')}\n                </div>\n            </div>\n        </div>;\n    }\n\n    handleClickOK = () => {\n        this.props.promote(this.selectedFolder, this.permission);\n    }\n\n    handleClickCancel = () => {\n        metrics.reportEvent('Operations', 'Delete Team Library', 'click', 'cancel');\n    }\n\n    handleFolderChange = folder => {\n        this.selectedFolder = folder;\n        if (folder.key === 'personal') {\n            this.permission = 'none';\n        }\n    }\n\n    onPermissionChange = permission => {\n        this.permission = permission;\n    }\n\n    handleClickCopy = (event) => {\n        event && event.stopPropagation();\n        const emailString = getCollaboratorEmails(this.props.library);\n        if (emailString) {\n            environment.copyContentToClipboard(emailString);\n        }\n    }\n\n    handleKeyDown = (event, desiredFn) => {\n        if (event.key === 'Enter') {\n            desiredFn(event);\n        }\n    }\n\n    get isCollaboratorsLoaded() {\n        return getCollaboratorEmails(this.props.library);\n    }\n\n    get warningMessageAndButton() {\n\n        if (this.isCollaboratorsLoaded) {\n            return (\n                <>\n                    <div className=\"panel-dialog-layout-100 promote-team-message-wrapper\">\n                        <div className=\"dialog-warning\">\n                            <div className=\"promote-team-message-title\">{translate('DL_PROMOTE_TEAM_WARN')}</div>\n                        </div>\n                        <div data-test-id=\"make-team-library-dialog\" className=\"make-team-library-dialog\">{translate('DL_PROMOTE_TEAM_MESSAGE')}</div>\n                    </div>\n                    <Button variant=\"secondary\"\n                        className=\"promote-team-copy-collaborators\" onClick={ this.handleClickCopy }\n                        onKeyDown={(event) => this.handleKeyDown(event, this.handleClickCopy)}>\n                        {this.buttonContent}\n                    </Button>\n                </>\n            );\n        }\n        return this.loadingSpinnerMessage;\n    }\n\n    get loadingSpinnerMessage() {\n        return (\n            <div className=\"panel-dialog-collaborator-loading\">\n                <div className=\"panel-loader\">\n                    <SpectrumCircleLoader size=\"small\" indeterminate={true}></SpectrumCircleLoader>\n                </div>\n                <div className=\"panel-loading-message\">{ translate('DL_LOADING_LIBRARY_COLLABORATORS') }</div>\n            </div>\n        );\n    }\n\n    render() {\n        return (\n            <BaseDialog className={classNames('panel-dialog-promote','panel-dialog-share')} title={this.title} okButtonText={this.okButtonText} onClickOK={this.handleClickOK}\n                onClickCancel={this.handleClickCancel} close={this.props.close}>\n                <div className=\"promote-team-dialog\">\n                    {this.dropdown}\n                    { isSharedUserLibrary(this.props.library) && this.warningMessageAndButton }\n                </div>\n            </BaseDialog>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport BaseDialog from './BaseDialog';\nimport classNames from 'classnames';\nimport { Library } from '@cclibraries/cc-libraries-js';\nimport { Team } from '@ccx-public/shared-asset-model-js';\nimport metrics from 'app/js/interface/metrics';\nimport { translate } from 'app/js/managers/translationManager';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport Icon from 'app/js/components/Icon';\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport { validUniqueLibraryName } from 'app/js/utils/libraryUtils';\nimport { isBrandLibrary } from 'app/js/utils/brandUtils';\nimport HTMLText from 'app/js/components/HTMLText';\n\n@observer\nexport default class CopyTeamLibraryDialog extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static dialogName = 'copyTeamLibrary';\n\n    static propTypes = {\n        library: PropTypes.instanceOf(Library).isRequired,\n        project: PropTypes.instanceOf(Team).isRequired,\n        permission: PropTypes.string,\n        close: PropTypes.func,\n        copy: PropTypes.func.isRequired\n    };\n\n    static defaultProps = {\n        permission: 'none'\n    };\n\n    @observable name = this.props.library.name;\n    @observable hasPressedKey = false;\n\n    componentDidMount() {\n        // Small hack to get around mounting issue with Web Components in CCD\n        setTimeout(() => {\n            this.inputElement?.focus();\n        });\n    }\n\n    get library() {\n        return this.props.library;\n    }\n\n    get isBrandLibrary() {\n        return isBrandLibrary(this.library);\n    }\n\n    get title() {\n        return translate(this.isBrandLibrary ? 'DL_TEAM_BRAND_COPY_TITLE' : 'DL_TEAM_LIBRARY_COPY_TITLE');\n    }\n\n    // Body message should be displayed using HTMLText because the <b> tags within it\n    get message() {\n        return <div data-test-id=\"copy-dialog-message\"><HTMLText html={translate(this.isBrandLibrary ? 'DL_TEAM_BRAND_COPY_BODY' : 'DL_TEAM_LIBRARY_COPY_BODY')}/></div>;\n    }\n\n    get okButtonText() {\n        return translate('DL_SAVE_COPY');\n    }\n\n    copy() {\n        this.props.copy(this.name);\n    }\n\n    handleClickOK = () => {\n        this.copy();\n    }\n\n    handleClickCancel = () => {\n        metrics.reportEvent('Operations', 'Copy Team Library', 'click', 'cancel');\n    }\n\n    setInputElement = (element) => {\n        this.inputElement = element;\n    }\n\n    get warningMessage() {\n        const nameErrorStatus = validUniqueLibraryName(this.name.trim(), this.props.project);\n        const isValidName = nameErrorStatus === configuration.RENAME_STATES.VALID;\n        if (!isValidName) {\n            return {\n                isError: true,\n                message: translate(configuration.RENAME_STATE_ERROR_MESSAGES[nameErrorStatus], { charCount: this.remainingCharacters })\n            };\n        }\n\n        if (this.remainingCharacters <= configuration.MAX_REMAINING_CHARACTERS_LENGTH) {\n            return {\n                message: translate('DL_LIBRARY_NAME_REMAINING_CHARACTERS', { charCount: this.remainingCharacters }),\n            };\n        }\n    }\n\n    get isOverMaxLength() {\n        return this.name.trim().length > configuration.MAX_INPUT_STRING_LENGTH;\n    }\n\n    get remainingCharacters() {\n        const currentLength = this.name.trim().length;\n        return configuration.MAX_INPUT_STRING_LENGTH - currentLength;\n    }\n\n    get isValidName() {\n        return !this.isErrorWarning;\n    }\n\n    get showWarning() {\n        return this.hasPressedKey && this.name.trim().length > 0 && this.warningMessage;\n    }\n\n    get isErrorWarning() {\n        return this.warningMessage?.isError;\n    }\n\n    onTextChange = (event) => {\n        event.stopPropagation();\n        this.name = event.target.value;\n    };\n\n    onKeyDown = (event) => {\n        event.stopPropagation();\n        // Handle enter key\n        if (event.key === 'Enter' && this.isValidName && !environment.isComposingInputEvent(event)) {\n            event.preventDefault();\n            this.copy();\n            this.props.close && this.props.close();\n            return;\n        }\n\n        // Handle escape key\n        if (event.keyCode === 27) {\n            this.props.close && this.props.close();\n            return;\n        }\n\n        if (!this.hasPressedKey) {\n            this.hasPressedKey = true;\n        }\n    };\n\n    render() {\n        const inputContainerClasses = classNames('panel-dialog-layout-75', 'panel-dialog-input-container', { 'panel-dialog-warning': this.showWarning });\n        return (\n            <BaseDialog className={classNames('panel-dialog-promote','panel-dialog-share')} title={this.title} okButtonText={this.okButtonText} onClickOK={this.handleClickOK}\n                onClickCancel={this.handleClickCancel} close={this.props.close} okButtonEnabled={this.isValidName}>\n                <div className=\"promote-team-dialog\">\n                    <div className=\"panel-dialog-layout-group\">\n                        <div className={inputContainerClasses}>\n                            <input className=\"panel-dialog-input\" type=\"text\" data-test-id=\"copy-library-input\" spellCheck=\"false\" placeholder={translate(this.isBrandLibrary ? 'DL_CREATE_NEW_BRAND_PLACEHOLDER' : 'DL_CREATE_NEW_LIBRARY_PLACEHOLDER')}\n                                style={{ width: '100%' }} ref={this.setInputElement} value={this.name} onChange={this.onTextChange} onKeyDown={this.onKeyDown} />\n                            {this.showWarning && this.isErrorWarning && <Icon id=\"Alert\" height={18} />}\n                        </div>\n                    </div>\n                    {this.showWarning && <div data-test-id=\"panel-dialog-name-warning\" className={classNames('panel-dialog-input-message', { 'warning': this.isErrorWarning })}>{this.warningMessage.message}</div>}\n                    { this.message }\n                </div>\n            </BaseDialog>\n        );\n    }\n}\n","\n/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { observer } from 'mobx-react';\nimport BaseDialog from './BaseDialog';\nimport { Library } from '@cclibraries/cc-libraries-js';\nimport metrics from 'app/js/interface/metrics';\nimport environment from 'app/js/environment';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport { translate } from 'app/js/managers/translationManager';\nimport Icon from '../Icon';\nimport configuration from 'app/js/config/configuration';\nimport { isBrandLibrary } from 'app/js/utils/brandUtils';\nimport featureFlags from 'app/js/config/featureFlags';\n\n// Dialog used for both Leave and Delete Team Library Workflows\n\n@observer\nexport default class DeleteTeamLibraryDialog extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static dialogName = 'deleteTeamLibrary';\n\n    static propTypes = {\n        library: PropTypes.instanceOf(Library).isRequired,\n        leave: PropTypes.bool,\n        close: PropTypes.func\n    };\n\n    get library() {\n        return this.props.library;\n    }\n\n    get deleteType() {\n        if (this.props.leave) { return 'leave'; }\n        if (this.library.documentId && this.context.libraryManager.publishedDocumentLibrary === this.library) { return 'unpublish'; }\n        return 'delete';\n    }\n\n    get title() {\n        return translate({\n            delete: 'DL_DELETE_LIBRARY',\n            leave: isBrandLibrary(this.library) ? 'DL_REMOVE_FROM_YOUR_BRANDS' : 'DL_REMOVE_FROM_YOUR_LIBRARIES',\n            unpublish: 'DL_UNPUBLISH_LIBRARY'\n        }[this.deleteType], { name: this.library.name });\n    }\n\n    get message() {\n        if (this.props.leave) {\n            return (\n                <>\n                    <div className=\"dialog-bullet-item\">{` ${translate('DL_DELETE_LIBRARY_LINK')}`}</div>\n                    <div className=\"dialog-bullet-item\">{` ${translate(isBrandLibrary(this.library) ? 'DL_LEAVE_TEAM_BRAND_ACCESS' : 'DL_LEAVE_TEAM_LIBRARY_ACCESS')}`}</div>\n                    <div className=\"dialog-bullet-item\">{` ${translate(isBrandLibrary(this.library) ? 'DL_LEAVE_TEAM_REJOIN_BRAND' : 'DL_LEAVE_TEAM_REJOIN')}`}</div>\n                </>\n            );\n        }\n\n        if (this.library.documentId && this.context.libraryManager.publishedDocumentLibrary === this.library) {\n            return (\n                <>\n                    <div className=\"dialog-bullet-item\">{` ${translate('DL_UNPUBLISH_MESSAGE_SHARING')}`}</div>\n                    <div className=\"dialog-bullet-item\">{` ${translate('DL_UNPUBLISH_MESSAGE_ELEMENTS')}`}</div>\n                </>\n            );\n        }\n\n        return (\n            <>\n                <div className=\"dialog-warning destructive\">\n                    <Icon id=\"Alert\" height={ 14 }/>\n                    <div className=\"warning-message-title\">{ translate('DL_CANNOT_UNDO_WARNING') }</div>\n                </div>\n                <>\n                    <div className=\"dialog-bullet-item\">{` ${translate('DL_DELETE_TEAM_LIBRARY_ACCESS')}`}</div>\n                    <div className=\"dialog-bullet-item\">{` ${translate('DL_DELETE_LIBRARY_LINK')}`}</div>\n                </>\n            </>\n        );\n    }\n\n    get okButtonText() {\n        return translate({\n            delete: 'DL_DELETE',\n            leave: 'DL_UNFOLLOW',\n            unpublish: 'DL_UNPUBLISH'\n        }[this.deleteType]);\n    }\n\n    onClickOK = () => {\n        if (this.context.viewState.isOneUpMode && this.context.viewState.isOneUpMode()) {\n            this.context.viewState.resetMode();\n        }\n        if (configuration.currentProduct.isExpandedView?.()) {\n            environment.navigateToMosaic(isBrandLibrary(this.library) ? 'brands' : 'libraries');\n        }\n        if (this.library.documentId && this.context.libraryManager.publishedDocumentLibrary === this.library) {\n            this.context.libraryManager.unpublish(this.library);\n            this.context.toastManager.openToast('message', { variant: 'success', message: translate('DL_UNPUBLISH_TOAST', { libraryName: this.library.name }) });\n        } else if (this.props.leave) {\n            this.context.libraryManager.unfollowLibrary(this.library);\n            this.context.toastManager.openToast('message', { variant: 'success', message: translate('DL_UNFOLLOW_TOAST', { libraryName: this.library.name }) });\n        } else {\n            metrics.reportEvent('Operations', 'Delete Team Library', 'click', 'ok');\n            this.context.libraryManager.deleteLibrary(this.library);\n            this.context.toastManager.openToast('message', { variant: 'success', message: translate('DL_DELETE_TOAST', { libraryName: this.library.name }) });\n        }\n    }\n\n    onClickCancel = () => {\n        metrics.reportEvent('Operations', 'Delete Team Library', 'click', 'cancel');\n    }\n\n    render() {\n        const testID = this.props.leave ? 'leave-team-library-message' : 'delete-team-library-message';\n        return (\n            <BaseDialog mode=\"warning\" title={ this.title } className=\"delete-dialog\" okButtonText={ this.okButtonText } onClickOK={ this.onClickOK }\n                onClickCancel={ this.onClickCancel } close={ this.props.close } showMosaicLibrary={configuration.currentProduct.config.showMosaicInDeleteTeamDialog && featureFlags.get('enableProjects') ? this.library : null}>\n                <div className=\"panel-dialog-layout-group\">\n                    <div data-test-id={ testID } className={classNames('panel-dialog-layout-100', { 'uxp-bullet-list': !environment.supportsCSSListItem })}>{ this.message }</div>\n                </div>\n            </BaseDialog>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport Icon from 'app/js/components/Icon';\nimport BaseDialog from 'app/js/components/dialogs/BaseDialog';\nimport DocumentAssetsContainer from 'app/applications/SPRK/js/models/documentAssets/DocumentAssetsContainer';\nimport { openWhatsNewURL } from 'app/js/utils/linkUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport environment from 'app/js/environment';\nimport metrics from 'app/js/interface/metrics';\nimport TeamSelector from 'app/js/components/TeamSelector';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\n\n@observer\nexport default class PublishLibraryDialog extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static dialogName = 'publishLibrary';\n\n    static propTypes = {\n        assetsContainer: PropTypes.instanceOf(DocumentAssetsContainer),\n        defaultTeam: PropTypes.object,\n        // Callback for closing the dialog (dialogManager.closeDialog())\n        close: PropTypes.func,\n        // Callback when publish event is triggered (publishPromise) => void\n        onPublish: PropTypes.func\n    };\n\n    static defaultProps = {\n        onPublish: () => {}\n    }\n\n    @observable.ref selectedFolder = this.props.defaultTeam;\n    permission;\n\n    publish() {\n        // We need to wait for the document to sync before publishing.\n        const publishPromise = environment\n            .waitForCloudAssetId()\n            .then(() => {\n                // Specify a folder only when publishing to a team library.\n                const { libraryManager } = this.context;\n                return libraryManager.publish(libraryManager.documentAssetsContainer, this.selectedFolder, { permissionInheritance: this.permission });\n            });\n        this.props.onPublish(publishPromise);\n    }\n\n    clickOk = () => {\n        const hasLinkedElements = this.props.assetsContainer.elements.some(element => element.isLinked);\n        const analyticsProperties = {\n            event: { value: this.selectedFolder ? 'Shared' : 'Private', count: this.props.assetsContainer.getGroups().length },\n            content: { type: hasLinkedElements ? 'local-and-linked' : 'local' }\n        };\n        metrics.reportEvent('Manager', 'Publish Library', 'click', 'publish', analyticsProperties);\n        this.publish();\n    }\n\n    clickCancel = () => metrics.reportEvent('Manager', 'Publish Library', 'click', 'cancel');\n\n    handleFolderChange = (folder) => {\n        if (folder) {\n            metrics.reportEvent('Manager', 'Publish Library', 'click', 'add-org');\n        }\n        this.selectedFolder = folder;\n    }\n\n    onPermissionChange = permission => {\n        this.permission = permission;\n    }\n\n    render() {\n        return (\n            <BaseDialog className=\"panel-dialog-share\" title={translate('DL_PUBLISH_LIBRARY_TITLE')} okButtonText={translate('DL_PUBLISH_LIBRARY_CONFIRM')} onClickOK={this.clickOk} onClickCancel={this.clickCancel} close={this.props.close}>\n                <div className=\"panel-dialog-share-select-area\">\n                    <TeamSelector\n                        onFolderChange={this.handleFolderChange}\n                        onPermissionChange={this.onPermissionChange}\n                        type=\"publish-team-libraries\"\n                        defaultTeam={this.props.defaultTeam}\n                        showPersonalFolder\n                        showHelp={true}\n                    />\n                    <div className=\"panel-dialog-share-learn-more\">\n                        <div className=\"panel-dialog-share-learn-more-icon\"><Icon id=\"Link\" height={10} /></div>\n                        <a tabIndex=\"0\" data-test-id=\"panel-dialog-learn-more-team\" onClick={() => openWhatsNewURL()}>{translate('DL_LEARN_MORE')}</a>\n                    </div>\n                </div>\n            </BaseDialog>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport BasePopover from 'app/js/components/dialogs/BasePopover';\nimport { translate } from 'app/js/managers/translationManager';\nimport { markOnboardingViewed } from 'app/js/utils/onboardingUtils';\nimport { bytesToString } from 'app/js/utils/unitUtils';\nimport { openLibraryArchiveURL } from 'app/js/utils/linkUtils';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\n\n@observer\nexport default class QuotaWarningPopover extends React.Component {\n\n    static contextType = LibrariesContext;\n    static dialogName = 'quotaWarningPopover';\n    static isAlwaysInline = true;\n\n    static propTypes = {\n        close: PropTypes.func.isRequired // Callback for closing the overlay (dialogManager.closeDialog())\n    };\n\n    onClose = () => {\n        markOnboardingViewed('quotaUpdate');\n        this.props.close();\n    }\n\n    onClickManage = () => {\n        markOnboardingViewed('quotaUpdate');\n        openLibraryArchiveURL(this.context.libraryManager.currentLibrary, 'Quota Message');\n        this.props.close();\n    }\n\n    get title() {\n        return <div data-test-id=\"popover-title\" className=\"popover-title\">{ translate('DL_QUOTA_WARNING_DIALOG_TITLE') }</div>;\n    }\n\n    get body() {\n        const decimalPlaces = 1;\n        const usedStorage = bytesToString(this.context.libraryManager.userQuota.storage_used, decimalPlaces);\n        const totalStorage = bytesToString(this.context.libraryManager.userQuota.storage_quota, decimalPlaces);\n        const librariesSize = bytesToString(this.context.libraryManager.storageUsed, decimalPlaces);\n\n        return <div data-test-id=\"popover-body\" className=\"popover-body\">{ translate('DL_QUOTA_WARNING_DIALOG_BODY', { usedStorage, totalStorage, librariesSize }) }</div>;\n    }\n\n    render() {\n        return (\n            <div>\n                <BasePopover\n                    okButtonText={ translate('DL_LIBRARY_MANAGER_MANAGE') }\n                    onClickOK={ this.onClickManage }\n                    close={ this.onClose }\n                    x={ 5 }\n                    y={ 31 }\n                    triangleOffset={ 10}\n                    placement=\"bottom\">\n                    { this.title }\n                    { this.body }\n                </BasePopover>\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport BasePopover from 'app/js/components/dialogs/BasePopover';\nimport PropTypes from 'prop-types';\nimport { translate } from 'app/js/managers/translationManager';\nimport { openLibraryArchiveURL } from 'app/js/utils/linkUtils';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport { getSharedQuotaErrorLibraries, getOwnedQuotaErrorLibraries } from 'app/js/utils/libraryUtils';\n\nconst ERROR_TYPE_OWNED = 'owned';\nconst ERROR_TYPE_SHARED = 'shared';\n\nexport default class OverQuotaPopover extends React.Component {\n    static contextType = LibrariesContext;\n\n    static dialogName = 'overQuotaError';\n    static isAlwaysInline = true;\n\n    static defaultProps = {\n        errorType: ERROR_TYPE_OWNED\n    };\n\n    static propTypes = {\n        close: PropTypes.func.isRequired, // Callback for closing the overlay (dialogManager.closeDialog())\n        errorType: PropTypes.oneOf([ ERROR_TYPE_OWNED, ERROR_TYPE_SHARED ]).isRequired\n    };\n\n    // We dont want this popover to change after it is opened\n    shouldComponentUpdate() {\n        return false;\n    }\n\n    onClose = () => this.props.close()\n\n    onClickOK = () => {\n        if (this.props.errorType === ERROR_TYPE_OWNED) {\n            openLibraryArchiveURL();\n        }\n        this.onClose();\n    }\n\n    get title() {\n        return <div data-test-id=\"popover-title\" className=\"popover-title\">\n            { translate(`DL_OVER_QUOTA_${this.libraries.length === 1 ? 'LIBRARY' : 'LIBRARIES'}_ERROR_TITLE`, { libraryName: this.libraries[0] && this.libraries[0].name }) }\n        </div>;\n    }\n\n    get body() {\n        let body = 'DL_OVER_QUOTA_LIBRARY_ERROR_BODY';\n        if (this.props.errorType === ERROR_TYPE_SHARED) {\n            body = `DL_OVER_QUOTA_SHARED_${this.libraries.length === 1 ? 'LIBRARY' : 'LIBRARIES'}_ERROR_BODY`;\n        }\n        return <div data-test-id=\"popover-body\" className=\"popover-body\">{ translate(body) }</div>;\n    }\n\n    get sharedQuotaErrorLibraries() {\n        return getSharedQuotaErrorLibraries();\n    }\n\n    get ownedQuotaErrorLibraries() {\n        return getOwnedQuotaErrorLibraries();\n    }\n\n    get libraries() {\n        if (this.props.errorType === ERROR_TYPE_OWNED) {\n            return this.ownedQuotaErrorLibraries;\n        }\n        return this.sharedQuotaErrorLibraries;\n    }\n\n    render() {\n        return (\n            <div>\n                <BasePopover\n                    okButtonText={ translate(this.props.errorType === 'owned' ? 'DL_LIBRARY_MANAGER_MANAGE' : 'DL_OK') }\n                    onClickOK={ this.onClickOK }\n                    close={ this.onClose }\n                    x={ 5 }\n                    y={ 31 }\n                    triangleOffset={ 10 }\n                    placement=\"bottom\">\n                    { this.title }\n                    { this.body }\n                </BasePopover>\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport BaseDialog from './BaseDialog';\nimport { translate } from 'app/js/managers/translationManager';\nimport environment from 'app/js/environment';\n\n@observer\nexport default class SaveCloudDocDialog extends React.Component {\n\n    static dialogName = 'saveCloudDoc';\n\n    static propTypes = {\n        onSave: PropTypes.func,\n        close: PropTypes.func // Callback for closing the dialog (dialogManager.closeDialog())\n    };\n\n    onClickOK = () => {\n        return environment.openSaveAs().then(saved => {\n            if (saved) { this.props.onSave && this.props.onSave(); }\n        });\n    }\n\n    get message() {\n        return (\n            <div className=\"panel-dialog-illustrated-message\">\n                <div data-test-id=\"save-cloud-doc-illustration\" className={`panel-dialog-illustrated-message-image ${environment.getAppName()}`} />\n                <div data-test-id=\"save-cloud-doc-heading\" className=\"panel-dialog-illustrated-message-heading\">\n                    { translate(`DL_SAVE_CLOUD_DOC_HEADING_${environment.getAppName()}`) }\n                </div>\n                <div data-test-id=\"save-cloud-doc-message\" className=\"panel-dialog-illustrated-message-description\">\n                    { translate('DL_SAVE_CLOUD_DOC_MESSAGE') }\n                </div>\n            </div>\n        );\n    }\n\n    render() {\n        return (\n            <BaseDialog className=\"panel-dialog-save-cloud-doc\" okButtonText={ translate('DL_SAVE_CLOUD_DOC_CONFIRM') } onClickOK={ this.onClickOK } close={ this.props.close }>\n                <div className=\"panel-dialog-layout-100\">{ this.message }</div>\n            </BaseDialog>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport BasePopover from 'app/js/components/dialogs/BasePopover';\nimport { translate } from 'app/js/managers/translationManager';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\n\n@observer\nexport default class EnableSyncPopup extends React.Component {\n\n    static contextType = LibrariesContext;\n    static dialogName = 'enableSyncPopup';\n    static isAlwaysInline = true;\n\n    static propTypes = {\n        close: PropTypes.func.isRequired // Callback for closing the overlay (dialogManager.closeDialog())\n    };\n\n    onClose = () => {\n        this.props.close();\n    }\n\n    get title() {\n        return <div data-test-id=\"popover-title\" className=\"popover-title\">{ translate('DL_LAUNCH_CC_APP_TITLE') }</div>;\n    }\n\n    get body() {\n        return <div data-test-id=\"popover-body\" className=\"popover-body\">{ translate('DL_LAUNCH_CC_APP_MESSAGE') }</div>;\n    }\n\n    enableSync = () => {\n        this.onClose();\n        this.context.libraryManager.enableSyncing();\n    }\n\n    render() {\n        return (\n            <div>\n                <BasePopover\n                    okButtonText={ translate('DL_LAUNCH_CC_APP_ENABLE_BUTTON') }\n                    onClickOK={ this.enableSync }\n                    close={ this.onClose }\n                    x={ 5 }\n                    y={ 31 }\n                    triangleOffset={ 10}\n                    placement=\"bottom\">\n                    { this.title }\n                    { this.body }\n                </BasePopover>\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n// https://opensource.adobe.com/spectrum-web-components/components/checkbox/\n// https://git.corp.adobe.com/torq/react-spectrum/tree/develop/src/Checkbox\nimport type { Checkbox as CheckboxType } from '@ccx-public/spectrum-web-component-fallbacks/dist/checkbox';\nimport React, { useEffect, useRef } from 'react';\nimport { filterBooleanProps, useComponent } from './utils';\nimport createWrapper from './utils/createWrapper';\nimport { SWCLoader } from './utils/SWCLoader';\nimport interopRequireDefault from './utils/interopRequireDefault';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Checkbox: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Checkbox')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\nif (!process.env.EXCLUDE_SWC) {\n    swcLoader = new SWCLoader(['sp-checkbox'], async () => {\n        const { Checkbox } = await import(\n            /* webpackChunkName: \"SpCheckbox\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/checkbox'\n        );\n        return [Checkbox];\n    });\n}\n\ntype RS2CompatProps = {\n    /**\n     * The label to display with the checkbox\n     */\n    label?: string;\n    /**\n     * Won't allow a permanent selection\n     */\n    readOnly?: boolean;\n    /**\n     * Flag that decides whether to display label\n     */\n    renderLabel?: boolean;\n    onChange?: (value: boolean, event: Event) => unknown;\n};\n\nexport default createWrapper<CheckboxType, RS2CompatProps>({\n    displayName: 'Checkbox',\n    fallback: RS2Checkbox,\n    swcLoader,\n    SWCWrapper: (props) => {\n        const checkboxWrapperRef = useRef<CheckboxType>(null);\n        const {\n            className,\n            renderLabel = true,\n            readOnly,\n            label,\n            checked,\n            disabled,\n            invalid,\n            indeterminate,\n            emphasized,\n            children,\n            onChange,\n            ...rest\n        } = props;\n\n        useEffect(() => {\n            const current = checkboxWrapperRef.current;\n\n            const change = (event: Event) => {\n                const target = event.target as CheckboxType;\n                onChange?.(target.checked, event);\n            };\n\n            if (current && onChange) {\n                current.addEventListener('change', change);\n            }\n\n            return () => {\n                if (current && onChange) {\n                    current.removeEventListener('change', change);\n                }\n            };\n        }, [onChange]);\n\n        // ReactSpectrum2        | SpectrumWebComponent\n        // ---------------------------------------------\n        // readOnly              | readonly\n        // label                 | label is directly passed as innerHTML text\n        // renderlabel:          | no such flag to conditionally render label\n        // flag based on which   |\n        // label is rendered     |\n\n        // checked, disabled, invalid, indeterminate, emphasized, readOnly are props in RS2\n        // but when passed directly as attributes to SWC, they don't work as expected.\n        // So these attributes are only passed if they are true;\n\n        // label must be passed a prop and not as children to the wrapper.\n\n        const Checkbox = useComponent('sp-checkbox');\n        return (\n            <Checkbox\n                {...rest}\n                {...filterBooleanProps({\n                    checked,\n                    disabled,\n                    emphasized,\n                    indeterminate,\n                    invalid,\n                    readonly: readOnly,\n                })}\n                class={className}\n                ref={checkboxWrapperRef}\n            >\n                {renderLabel ? label : ''}\n                {children}\n            </Checkbox>\n        );\n    },\n    tagName: 'sp-checkbox',\n});\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { observer } from 'mobx-react';\nimport { computed, observable, when } from 'mobx';\nimport { Library, Group } from '@cclibraries/cc-libraries-js';\nimport DocumentAssetsContainer from 'app/js/models/documentAssets/DocumentAssetsContainer';\nimport BasePopover from './BasePopover';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport { createSubgroup, getDefaultGroupName, validGroupName, getCustomGroupsTree } from 'app/js/utils/groupUtils';\nimport { createGroup, validUniqueLibraryName } from 'app/js/utils/libraryUtils';\nimport environment from '../../environment';\nimport metrics from 'app/js/interface/metrics';\nimport configuration from 'app/js/config/configuration';\nimport { translate } from 'app/js/managers/translationManager';\nimport Icon from 'app/js/components/Icon';\nimport { truncateString } from 'app/js/utils/stringUtils';\nimport TeamSelector from 'app/js/components/TeamSelector';\nimport Tooltip from 'app/js/components/Tooltip';\nimport { isBrandLibrary } from 'app/js/utils/brandUtils';\nimport appState from 'app/js/appState';\nimport featureFlags from 'app/js/config/featureFlags';\nimport Checkbox from '@ccx-public/spectrum-wrapper/Checkbox';\nimport SpectrumCircleLoader from 'app/js/components/spectrum/SpectrumCircleLoader';\nimport SyncButton from 'app/js/components/panel-footer/SyncButton';\nimport MosaicView from 'app/js/components/MosaicView';\n\nwindow.setImmediate = window.setImmediate || window.setTimeout;\n\n// the order of this determines the order of how the icons show up in the footer (from left to right)\nconst CREATE_MODE_TYPES = {\n    BRAND: 'brand',\n    LIBRARY: 'library',\n    GROUP: 'group',\n};\n\nconst CREATE_MODE_PAGE_INFO = {\n    [CREATE_MODE_TYPES.BRAND]: {\n        tooltip: 'DL_ADD_BRAND_TOOLTIP',\n        icon: 'CCXCreateBrandPlus',\n        inputHeader: 'DL_CREATE_BRAND_HEADER_TITLE',\n        title: 'DL_CREATE_NEW_BRAND_LIBRARY',\n        getInputPlaceholder: () => translate('DL_CREATE_NEW_BRAND_PLACEHOLDER')\n    },\n    [CREATE_MODE_TYPES.LIBRARY]: {\n        tooltip: 'DL_ADD_LIBRARY_TOOLTIP',\n        icon: 'AddCCLibrary',\n        inputHeader: 'DL_CREATE_LIBRARY_HEADER_TITLE',\n        title: 'DL_CREATE_DESIGN_LIBRARY',\n        getInputPlaceholder: () => translate('DL_CREATE_NEW_LIBRARY_PLACEHOLDER')\n    },\n    [CREATE_MODE_TYPES.GROUP]: {\n        tooltip: 'DL_ADD_GROUP_TOOLTIP',\n        icon: 'AddGroup',\n        inputHeader: 'DL_CREATE_GROUP_HEADER_TITLE',\n        title: 'DL_CREATE_NEW_GROUP',\n        getInputPlaceholder: (currentGroupBranch) => getDefaultGroupName(currentGroupBranch)\n    }\n};\n\n@observer\nexport default class BaseSelectTargetPopover extends React.Component {\n    static contextType = LibrariesContext;\n\n    static dialogName = 'selectLibrary';\n    static isAlwaysInline = true;\n\n    static defaultProps = {\n        id: 'select',\n        disableSearch: false,\n        enableSetAsDefault: false,\n        getTargetProps: () => ({ className: '' }),\n        x: 0,\n        y: 0,\n        isDocumentAssets: false,\n        onSubmit: () => {},\n        okButtonText: 'DL_SAVE',\n        title: 'DL_SAVE_TO',\n    }\n\n    static propTypes = {\n        id: PropTypes.string,\n        additionalFooterContent: PropTypes.node,\n        close: PropTypes.func.isRequired, // Callback for closing the dialog (dialogManager.closeDialog())\n        cancelButtonQuiet: PropTypes.bool,\n        emptyGroupMessageLabel: PropTypes.string,\n        getTargetProps: PropTypes.func.isRequired,\n        onSubmit: PropTypes.func.isRequired, // action whenever the user confirms the action.\n        closeOnResize: PropTypes.bool,\n        title: PropTypes.string.isRequired,\n        okButtonText: PropTypes.string,\n        validateTarget: PropTypes.func,\n        disableGroupSelection: PropTypes.bool,\n        disableSearch: PropTypes.bool,\n        enableSetAsDefault: PropTypes.bool,\n        height: PropTypes.number,\n        onChange: PropTypes.func,\n        onCreateGroup: PropTypes.func,\n        isDocumentAssets: PropTypes.bool,\n        isGroupOp: PropTypes.bool,\n        startingLibrary: PropTypes.oneOfType([ PropTypes.instanceOf(Library), PropTypes.instanceOf(DocumentAssetsContainer) ]),\n        startingGroup: PropTypes.instanceOf(Group),\n        width: PropTypes.number,\n        x: PropTypes.number.isRequired,\n        y: PropTypes.number.isRequired,\n    }\n\n    @computed\n    get groupsTree() {\n        if (!this.showGroupPicker) { return; }\n        const elementSortState = this.context.viewState.elementSortState;\n        const sortBy = elementSortState === 'modified' ? 'order' : elementSortState;\n        return getCustomGroupsTree([], this.selectedLibrary.getGroups(), { sortBy, includeUngrouped: false });\n    }\n\n    @observable createModeType = null;\n    @observable name = '';\n\n    @observable.ref _selectedLibrary;\n    @observable.ref selectedGroup = this.props.startingGroup;\n    @observable.ref selectedFolder;\n    @observable _makeCurrentLibraryDefault = false;\n    disposeZeroLibrariesReaction;\n\n    componentDidMount() {\n        // if we have loaded libraries and the user doesn't have any, switch to creation mode\n        this.disposeZeroLibrariesReaction = when(() => this.areLibrariesLoaded && this.zeroLoadedLibraries, () => this.createModeType = 'library');\n    }\n\n    componentWillUnmount() {\n        this.disposeZeroLibrariesReaction();\n    }\n\n    get selectedLibrary() {\n        if (this._selectedLibrary === undefined) {\n            // If the user hasn't set a library, default to the starting library.\n            return this.props.startingLibrary;\n        }\n        return this._selectedLibrary;\n    }\n\n    get makeCurrentLibraryDefault() {\n        return this.selectedLibrary === this.defaultLibrary || this._makeCurrentLibraryDefault;\n    }\n\n    get defaultLibrary() {\n        if (!this.props.enableSetAsDefault) { return; }\n        return this.context.libraryManager.getDefaultLibrary();\n    }\n\n    @computed get areLibrariesLoaded() {\n        return this.context.libraryManager.areLibrariesLoaded;\n    }\n\n    @computed get areLibrariesLoading() {\n        return this.context.libraryManager.areLibrariesLoading;\n    }\n\n    @computed get zeroLoadedLibraries() {\n        return !this.context.libraryManager.activeLibraries.length;\n    }\n\n    @computed get showLoading() {\n        // NOTE: the order of this check triggers fetching libraries\n        // zeroLoadedLibraries should come _first_\n        return this.zeroLoadedLibraries && this.areLibrariesLoading;\n    }\n\n    setSelectedLibrary = (library) => {\n        this._selectedLibrary = library;\n        this.props.onChange?.({ library, group: this.selectedGroup });\n    }\n\n    setSelectedGroup = (group) => {\n        this.selectedGroup = group;\n        this.props.onChange?.({ library: this.selectedLibrary, group });\n    }\n\n    clearSelectedLibrary = () => {\n        this._selectedLibrary = null;\n        this.props.onChange?.({ library: undefined, group: this.selectedGroup });\n    }\n\n    shouldDisableSubmission = () => {\n        // If a library isn't selected and not creating a library, then disable the button\n        if (!this.selectedLibrary && !this.createData) {\n            return true;\n        }\n\n        // If the picker has no group selected in document assets, disable the button\n        if (this.isDocumentAssets && !this.selectedGroup) {\n            return true;\n        }\n\n        // If the picker is creating a group / library and the name status is not valid\n        if (this.createData && this.nameStatus !== configuration.RENAME_STATES.VALID) {\n            return true;\n        }\n\n        // If the selected library is not a valid target, disable the button\n        // This is possible because when we render the copy-move-picker in a context where\n        // there is no current library, we will select the library the items belong to\n        if (!this.createData && this.selectedLibrary && !this.validateTarget({ library: this.selectedLibrary })) {\n            return true;\n        }\n    }\n\n    shouldAllowBack = (item) => {\n        return item && (!this.isDocumentAssets || this.selectedGroup);\n    }\n\n    shouldHideFooterIcon = (footerIconType) => {\n        // if it's on the group picker body and the icon isn't a group, hide the icon\n        if (this.showGroupPicker && footerIconType !== CREATE_MODE_TYPES.GROUP) { return true; }\n\n        // if it's not on the group picker body and the icon is the group icon, hide the icon\n        if (!this.showGroupPicker && footerIconType === CREATE_MODE_TYPES.GROUP) { return true; }\n\n        // if the icon is a brand icon and brands are not enabled, hide the icon\n        if (footerIconType === CREATE_MODE_TYPES.BRAND && !featureFlags.get('brandFeatureEnabled')) { return true; }\n\n        // always hide the icon in create mode\n        return !!this.createData;\n    }\n\n    shouldDisableFooterIcon = () => {\n        if (this.selectedGroup && !this.validateTarget({ group: this.selectedGroup, library: this.selectedLibrary })) {\n            return true;\n        }\n    }\n\n    get showCreateActionsInHeader() {\n        return this.props.enableSetAsDefault;\n    }\n\n    // If it does not have a parent, selectedGroup would be set to undefined\n    setSelectedGroupToParent = () => {\n        this.selectedGroup = this.selectedGroup.parent;\n        this.props.onChange?.({ library: this.selectedLibrary, group: this.selectedGroup });\n    }\n\n    get isDocumentAssets() {\n        return this.props.isDocumentAssets;\n    }\n\n    get operationTitle() {\n        if (this.showLoading) {\n            return '';\n        }\n        if (this.createData) {\n            return translate(this.createData.title);\n        }\n        return translate(this.props.title);\n\n    }\n\n    get showGroupPicker() {\n        return this.selectedLibrary && !this.props.disableGroupSelection;\n    }\n\n    onClickBack = () => {\n        return this.selectedGroup ? this.setSelectedGroupToParent() : this.clearSelectedLibrary();\n    }\n\n    getHeader = (showNameRow, item) => {\n        const classes = classNames('popover-title', 'select-target-title-container', { 'select-target-header-border': !this.createData, 'popover-title-empty': this.showLoading });\n\n        return (\n            <div data-test-id=\"popover-title\" className={classes}>\n                <div className=\"select-target-operation-row\" data-test-id=\"select-target-operation-row\">\n                    <div className=\"select-target-operation\" data-test-id=\"select-target-operation\">\n                        {this.operationTitle}\n                    </div>\n                    {this.props.enableSetAsDefault\n                            && !this.showLoading\n                            && <div className=\"select-target-header-icons\">{this.createIcons}</div>\n                    }\n                    <div className=\"select-target-close\" data-test-id=\"select-target-close\" onClick={this.props.close}><Icon id=\"Close\" height={20} width={20} /></div>\n                </div>\n                { showNameRow && (\n                    <div className=\"select-target-name-row\" data-test-id=\"select-target-name-row\">\n                        {this.shouldAllowBack(item) && <div className=\"select-target-back\" data-test-id=\"select-target-back-arrow\" onClick={this.onClickBack}><Icon id=\"BackArrow\" height={ 16 } width={ 16 } /></div>}\n                        <div data-test-id=\"select-target-item-name\" className=\"select-target-name\">{item ? item.name : translate('DL_SELECT_LIBRARY')}</div>\n                    </div>\n                )}\n            </div>\n        );\n    }\n\n    onClickFooterIcon = (footerIconType) => {\n        if (!this.shouldDisableFooterIcon()) {\n            this.createModeType = footerIconType;\n            this.name = this.createData.getInputPlaceholder(this.currentGroupBranch);\n            this.selectedFolder = undefined;\n        }\n    }\n\n    get header() {\n        if (this.createData) {\n            return this.getHeader(false);\n        }\n\n        if (!this.selectedGroup && !this.showGroupPicker) {\n            // In root view, has no header\n            return this.getHeader(!this.props.disableGroupSelection);\n        }\n\n        if (this.selectedGroup) {\n            // In a group, show group name as header\n            return this.getHeader(true, this.selectedGroup);\n        }\n\n        // In a library but not a group, show library name as header\n        return this.getHeader(true, this.selectedLibrary);\n    }\n\n    getFooterIcon = (footerIconType) => {\n        if (this.shouldHideFooterIcon(footerIconType)) {\n            return;\n        }\n\n        const { icon, tooltip } = CREATE_MODE_PAGE_INFO[footerIconType];\n\n        const classes = classNames('select-target-footer-icon', { 'disabled': this.shouldDisableFooterIcon() });\n        const footerIconSize = configuration.currentProduct.config.copyMoveFooterIconSize ?? 14;\n        return (\n            <Tooltip content={ translate(tooltip) } key={footerIconType} >\n                <div className={classes} data-test-id={`select-target-footer-icon-${footerIconType}`} onClick={() => this.onClickFooterIcon(footerIconType)} >\n                    <Icon id={icon} width={footerIconSize} height={footerIconSize} />\n                </div>\n            </Tooltip>\n        );\n    }\n\n    get x() {\n        // Don't go the full width for Photoshop UXP since its scrollbars display over everything else\n        const panelWidthModifier = configuration.currentProduct.config.panelWidthAdjustment || 0;\n        const hostContainerWidth = environment.getHostContainerWidth() + panelWidthModifier;\n        const pickerWidth = this.props.width ?? configuration.DEFAULT_SELECT_TARGET_POPOVER_WIDTH;\n        if (hostContainerWidth < pickerWidth) { return 0; }\n        const overflow = this.props.x + pickerWidth - hostContainerWidth;\n        // Shift x if the popover would overflow the panel.\n        return this.props.x - Math.max(0, overflow);\n    }\n\n    get y() {\n        const hostContainerHeight = environment.getHostContainerHeight();\n        const pickerHeight = this.props.height ?? configuration.DEFAULT_SELECT_TARGET_POPOVER_HEIGHT;\n        if (hostContainerHeight < pickerHeight) { return 0; }\n        const overflow = this.props.y + pickerHeight - hostContainerHeight;\n        // Shift y if the popover would overflow the panel.\n        return this.props.y - Math.max(0, overflow);\n    }\n\n    get nameStatus() {\n        if (this.showGroupPicker) {\n            // Name validation for groups\n            return validGroupName(this.itemName, null, this.currentGroupBranch);\n        }\n        // Name validation for libraries\n        return validUniqueLibraryName(this.itemName, this.selectedFolder);\n    }\n\n    @computed\n    get itemName() {\n        return this.name.trim();\n    }\n\n    onClickCell = (isDisabled, item) => {\n        if (!isDisabled) {\n            if (item.isGroup) {\n                this.setSelectedGroup(item);\n            } else {\n                // if we are clicking the selected library, clear our selection\n                if (item === this.selectedLibrary) {\n                    this.clearSelectedLibrary();\n                } else {\n                    this.setSelectedLibrary(item);\n                }\n                this._makeCurrentLibraryDefault = false;\n            }\n        }\n    }\n\n    getTargetItem = (item) => {\n        const type = item.isGroup ? 'group' : 'library';\n        // hide group in picker when hideWhenEmpty is active and the group is empty\n        if (item && item.isGroup && item.hideWhenEmpty && item.children.length === 0) {\n            return;\n        }\n        const selected = item.isLibrary && item === this.selectedLibrary;\n        const isDisabled = !this.validateTarget(type === 'group' ? { group: item } : { library: item });\n        const { className: targetClassNames } = this.props.getTargetProps(item);\n        const classes = classNames('select-target-cell', `copymove-${type}`, { 'select-target-cell-disabled': isDisabled }, { 'select-target-cell-selected': selected }, targetClassNames);\n        const icons = this.getCellIcons(item);\n        if (configuration.currentProduct.config.showMosaicViewInSelectLibraryPicker) {\n            return (\n                <div key={item.id} data-test-id={`${this.props.id}-${type}-${item.id}`} className={classes} onClick={() => this.onClickCell(isDisabled, item)} >\n                    { icons.left }\n                    <MosaicView className=\"select-target-cell-mosaic\" viewMode=\"grid\" library={item} renditionGrid={item.renditionGrid} />\n                    <Tooltip content={ item.name } >\n                        <div className=\"select-target-cell-text\" data-test-id={`${this.props.id}-${type}-${item.id}-text`}>{item.name}</div>\n                    </Tooltip>\n                    { icons.right }\n                </div>\n            );\n        }\n        return (\n            <div key={item.id} data-test-id={`${this.props.id}-${type}-${item.id}`} className={classes} onClick={() => this.onClickCell(isDisabled, item)} >\n                { icons.left }\n                <Tooltip content={ item.name } >\n                    <div className=\"select-target-cell-text\" data-test-id={`${this.props.id}-${type}-${item.id}-text`}>{item.name}</div>\n                </Tooltip>\n                { icons.right }\n            </div>\n        );\n    };\n\n    getCellIcons = (item) => {\n        const icons = { left: undefined, right: undefined };\n        if (item?.documentId) {\n            icons.left = this.getCellIconElement('LinkedLibrary', 'left');\n        }\n\n        if (item.isLibrary && isBrandLibrary(item)) {\n            icons.left = this.getCellIconElement('CCXCreateLogo', 'left');\n        }\n\n        if (!this.props.disableGroupSelection) {\n            icons.right = this.getCellIconElement('ChevronRightSmall', 'right');\n        }\n\n        if (item === this.selectedLibrary) {\n            icons.right = this.getCellIconElement('Checkmark', 'right');\n        }\n        return icons;\n    }\n\n    getCellIconElement = (name, position) => {\n        const iconSize = configuration.currentProduct.config.copyMoveListItemIconSize ?? 8;\n        return <div className={`select-target-cell-icon-${position}`} data-test-id={`select-target-cell-icon-${position}-${name}`}><Icon id={name} width={ iconSize } height={ iconSize } /></div>;\n    }\n\n    @computed get currentGroupBranch() {\n        if (!this.showGroupPicker) { return; }\n        const { branches, root } = this.groupsTree;\n        const branch = this.selectedGroup ? branches[this.selectedGroup.id] : root;\n        return branch;\n    }\n\n    @computed get groupItems() {\n        if (!this.showGroupPicker) { return; }\n        return this.currentGroupBranch.children.map(branch => branch.item);\n    }\n\n    get emptyGroupMessageLabel() {\n        return this.props.emptyGroupMessageLabel;\n    }\n\n    get defaultPickerBody() {\n        if (this.showLoading) { return this.loadingSpinner; }\n        if (this.showGroupPicker) {\n            const groups = this.groupItems;\n            if (!groups || groups.length === 0) {\n                // returns empty group message if there are no groups\n                return <div data-test-id=\"select-target-empty-group-message\" className=\"select-target-empty-group-message\">{ this.emptyGroupMessageLabel }</div>;\n            }\n            return groups.map(x => this.getTargetItem(x));\n        }\n        return this.context.libraryManager.activeLibraries.map(x => this.getTargetItem(x));\n    }\n\n    setInputElement = (element) => {\n        this.inputElement = element;\n        // Small hack to select and focus in CCD as well\n        setImmediate(() => {\n            if (this.inputElement) {\n                // It's important to call .select() before .focus() to work around https://jira.corp.adobe.com/browse/UXP-16541.\n                // Due to UXP-16541, .select() fires a blur event on the input box, which won't happen if the input box doesn't have focus yet.\n                this.inputElement.select();\n                this.inputElement.focus();\n            }\n        });\n    }\n\n    validateTarget = (item) => {\n        const { library } = item;\n\n        if (this.props.validateTarget) { return this.props.validateTarget(item); }\n\n        // default validation is intended to run against a library\n        if (!library) {\n            return false;\n        }\n\n        const allowUnloaded = library !== this.context.libraryManager.currentLibrary;\n\n        if (!this.context.viewState.isLibraryWritable(library, false, allowUnloaded)) {\n            return false;\n        }\n\n        return true;\n    }\n\n    onTextChange = (event) => {\n        // truncates new name to 248 characters before rename to prevent panel freezing\n        this.name = truncateString(event.target.value, configuration.MAX_INPUT_STRING_LENGTH, false);\n        // If the item name would be nothing, like in the case where the name is all spaces \"     \", then clear the name string.\n        if (!this.itemName.length) { this.name = ''; }\n    };\n\n    onKeyDown = keyEvent => {\n        // Handle enter and escape key events\n        if (keyEvent.key === 'Enter' && !environment.isComposingInputEvent(keyEvent)) {\n            if (!this.shouldDisableSubmission()) {\n                this.submitAction(keyEvent);\n            }\n        } else if (keyEvent.key === 'Escape') {\n            this.cancelCreateMode();\n        }\n        keyEvent.stopPropagation();\n    }\n\n    onSubmit = () => {\n        const extraMetrics = {};\n\n        if (this.makeCurrentLibraryDefault) {\n            extraMetrics.ccl = { set_as_default: true };\n        }\n\n        this.props.onSubmit({\n            library: this.selectedLibrary,\n            group: this.selectedGroup,\n            extraMetrics,\n        });\n    }\n\n    cancelCreateMode = () => {\n        this.createModeType = null;\n    }\n\n    createGroupAction = () => {\n\n        const newGroup = this.selectedGroup ? createSubgroup(this.selectedGroup, this.itemName, false) : createGroup(this.selectedLibrary, this.itemName);\n\n        this.props.onCreateGroup?.(newGroup);\n\n        this.setSelectedGroup(newGroup);\n        return newGroup;\n    }\n\n    _createTeamLibrary = () => {\n        return this.context.libraryManager.createTeamLibrary(this.selectedFolder.id, this.itemName, { permissionInheritance: this.permission });\n    }\n\n    _createPersonalLibrary = () => {\n        return this.context.libraryManager.createLibrary(this.itemName);\n    }\n\n    createLibraryAction = (sourceAction) => {\n        const libManager = this.context.libraryManager;\n        const isCreatingFirstLib = libManager.areLibrariesLoaded && !libManager.libraries.length;\n\n        const newLibrary = this.selectedFolder ? this._createTeamLibrary() : this._createPersonalLibrary();\n        this.setSelectedLibrary(newLibrary);\n\n        metrics.reportEvent('Create Library', 'New Library', sourceAction, 'create', { ccl: { is_creating_first_library: isCreatingFirstLib } }, newLibrary);\n\n        return newLibrary;\n    }\n\n     createBrandAction = () => {\n         const newBrand = this.createLibraryAction();\n         appState.panel.brandActions.brandLibrary(newBrand);\n         return newBrand;\n     }\n\n    _createActions = {\n        [CREATE_MODE_TYPES.GROUP]: this.createGroupAction,\n        [CREATE_MODE_TYPES.LIBRARY]: this.createLibraryAction,\n        [CREATE_MODE_TYPES.BRAND]: this.createBrandAction\n    }\n\n    submitAction = (event) => {\n        const sourceAction = event?.type === 'keydown' ? event.type : 'click';\n        const createAction = this._createActions[this.createModeType];\n        if (createAction) {\n            this.cancelCreateMode();\n            return createAction(sourceAction);\n        }\n\n        if (this.selectedLibrary) {\n            if (this.makeCurrentLibraryDefault) {\n                this.context.libraryManager.setDefaultLibrary(this.selectedLibrary);\n            }\n\n            return this.onSubmit();\n        }\n    }\n\n    handleFolderChange = folder => {\n        this.selectedFolder = folder;\n    };\n\n    handleDragEnter = e => {\n        e.preventDefault();\n        this.props.close();\n    }\n\n    onPermissionChange = permission => {\n        this.permission = permission;\n    }\n\n    get createInputHeader() {\n        if (!configuration.currentProduct.config.enableCopyMovePickerCreateInputHeader) { return; }\n        return <div className=\"select-target-create-input-header\" data-test-id=\"select-target-create-input-header\">{ translate(this.createData.inputHeader) }</div>;\n    }\n\n    get createGroupOrLibPickerBody() {\n        const showErrorTooltip = this.nameStatus !== configuration.RENAME_STATES.VALID && this.name.trim().length > 0;\n        return (\n            <div className={classNames('select-target-create-container', 'panel-dialog-share', { 'invalid': showErrorTooltip })}>\n                { this.createInputHeader }\n                <div className=\"select-target-create-input-wrapper\">\n                    <input className=\"panel-dialog-input\" type=\"text\" data-test-id={`${this.props.id}-create-input`} spellCheck=\"false\" placeholder={translate(this.showGroupPicker ? 'DL_EDIT_GROUP_NAME_PLACEHOLDER' : 'DL_CREATE_NEW_LIBRARY_PLACEHOLDER')}\n                        ref={this.setInputElement} value={this.name} onChange={this.onTextChange} onKeyDown={this.onKeyDown} />\n                    { showErrorTooltip\n                        && <div data-test-id=\"select-target-alert-tooltip\" >\n                            <Tooltip className=\"select-target-alert-tooltip\" placement=\"top\" content={ translate(configuration.RENAME_STATE_ERROR_MESSAGES[this.nameStatus]) }>\n                                <Icon className=\"select-target-alert-icon\" data-test-id=\"select-target-alert-icon\" id=\"Alert\" height={ 12 }/>\n                            </Tooltip>\n                        </div>\n                    }\n                </div>\n                {\n                    // team libraries dropdown\n                    !this.showGroupPicker && (\n                        <TeamSelector\n                            onFolderChange={this.handleFolderChange}\n                            onPermissionChange={this.onPermissionChange}\n                            showPersonalFolder\n                            personalFolderIsBrands={ this.createModeType === CREATE_MODE_TYPES.BRAND}\n                            iconSize={configuration.currentProduct.config.copyMoveTeamSelectorIconSize || 'S'}\n                        />\n                    )\n                }\n            </div>\n        );\n    }\n\n    get okButtonLabel() {\n        if (this.createData) { return translate('DL_CREATE'); }\n        return translate(this.props.okButtonText);\n    }\n\n    @computed\n    get createData() {\n        if (!this.createModeType) { return; }\n        return CREATE_MODE_PAGE_INFO[this.createModeType];\n    }\n\n    @computed\n    get inputPlaceholder() {\n        if (!this.createData) { return; }\n        return this.createData.getInputPlaceholder();\n    }\n\n    get createIcons() {\n        return (\n            <>\n                {configuration.currentProduct.config.showSyncIconInSelectLibraryPicker && <SyncButton />}\n                {!configuration.currentProduct.config.hideIconsInSelectLibraryPicker && Object.values(CREATE_MODE_TYPES).map(type => this.getFooterIcon(type))}\n            </>\n        );\n    }\n\n    get additionalFooterContent() {\n        return this.props.additionalFooterContent;\n    }\n\n    @computed\n    get disableSetAsDefaultLibraryCheckbox() {\n        return !this.selectedLibrary\n            || !this.selectedLibrary?.isWritable\n            || !this.validateTarget({ library: this.selectedLibrary });\n    }\n\n    @computed\n    get footer() {\n        if (this.createData && !this.mergeInfo) { return; }\n\n        if (!this.showGroupPicker && this.props.enableSetAsDefault) {\n            return <div className=\"select-target-footer\">\n                <Checkbox\n                    data-test-id=\"select-target-set-as-default-checkbox\"\n                    onChange={val => this._makeCurrentLibraryDefault = val}\n                    checked={this.makeCurrentLibraryDefault}\n                    disabled={this.disableSetAsDefaultLibraryCheckbox}\n                    label={translate('DL_SET_AS_DEFAULT_LIBRARY')}\n                />\n            </div>;\n        }\n\n        return (\n            <div\n                data-test-id=\"select-target-footer\"\n                className=\"select-target-footer\">\n                { this.createIcons }\n                { this.additionalFooterContent }\n            </div>);\n    }\n\n    get loadingSpinner() {\n        return (\n            <div>\n                <SpectrumCircleLoader size=\"large\" data-test-id=\"select-target-loading-spinner\" indeterminate />\n            </div>\n        );\n    }\n\n    get cancelButtonText() {\n        if (this.createData || configuration.currentProduct.config.showCancelInSelectLibraryPicker) {\n            return translate('DL_CANCEL');\n        }\n\n        return;\n    }\n\n    get shouldCloseOnCancel() {\n        // if we're in creation mode and the user has no libraries, cancel should close the dialog\n        if (this.createData) {\n            return this.zeroLoadedLibraries && this.areLibrariesLoaded;\n        }\n\n        return true;\n    }\n\n    onClickCancel = () => {\n        if (this.shouldCloseOnCancel) {\n            this.props.close();\n        }\n        this.cancelCreateMode();\n    }\n\n    render() {\n        const classes = classNames('select-target-body', { 'select-target-creating-body': this.createData, 'select-target-loading': this.showLoading });\n\n        return (\n            <BasePopover\n                {...this.props}\n                okButtonText={this.okButtonLabel}\n                cancelButtonText={this.cancelButtonText}\n                cancelButtonQuiet={configuration.currentProduct.config.cancelButtonQuiet}\n                onClickOK={this.submitAction}\n                onClickCancel={this.onClickCancel}\n                onDragEnter={this.handleDragEnter}\n                closeOnButtonClick={!this.createData}\n                close={this.props.close}\n                hideFooter={this.showLoading}\n                x={this.x}\n                y={this.y}\n                placement=\"top\"\n                showPopoverTriangle={false}\n                isDisabled={this.shouldDisableSubmission()}\n                additionalFooterContent={this.footer}\n                className=\"select-target-container\">\n                {this.header}\n                <div data-test-id=\"select-target-body\" className={classes}>{this.createData ? this.createGroupOrLibPickerBody : this.defaultPickerBody}</div>\n            </BasePopover>\n        );\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { observable, computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport DocumentAssetsContainer from 'app/js/models/documentAssets/DocumentAssetsContainer';\nimport { Group, Element, Library } from '@cclibraries/cc-libraries-js';\nimport DocumentGroup from 'app/applications/SPRK/js/models/documentAssets/DocumentGroup';\nimport configuration from 'app/js/config/configuration';\nimport DocumentElement from 'app/js/models/documentAssets/DocumentElement';\nimport { translate } from 'app/js/managers/translationManager';\nimport metrics from 'app/js/interface/metrics';\nimport { areValidDescendants, isGroupDescendantOfParent, getAllAncestors, getMergeableGroupsInBranch, getCustomGroupsTree } from 'app/js/utils/groupUtils';\nimport BaseSelectTargetPopover from 'app/js/components/dialogs/BaseSelectTargetPopover';\nimport Tooltip from 'app/js/components/Tooltip';\nimport Icon from 'app/js/components/Icon';\n\n@observer\nexport default class CopyMovePickerPopover extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static dialogName = 'copyOrMove';\n    static isAlwaysInline = true;\n\n    static propTypes = {\n        // Moving either a list of elements or a group\n        items: PropTypes.arrayOf(\n            PropTypes.oneOfType([\n                PropTypes.instanceOf(Element),\n                PropTypes.instanceOf(DocumentElement),\n                PropTypes.instanceOf(Group),\n                PropTypes.instanceOf(DocumentGroup)\n            ])\n        ).isRequired,\n        close: PropTypes.func.isRequired, // Callback for closing the dialog (dialogManager.closeDialog())\n        copyMoveAction: PropTypes.func.isRequired, // action whenever picker confirms copy or move\n        isMove: PropTypes.bool.isRequired,\n        x: PropTypes.number.isRequired,\n        y: PropTypes.number.isRequired,\n        isDocumentAssets: PropTypes.bool,\n        enableSetAsDefault: PropTypes.bool,\n        disableGroupSelection: PropTypes.bool,\n        startingLibrary: PropTypes.oneOfType([ PropTypes.instanceOf(Library), PropTypes.instanceOf(DocumentAssetsContainer) ]),\n    }\n\n    @observable.ref selectedLibrary = this.startingLibrary;\n    @observable.ref selectedGroup = this.startingGroup;\n\n    _handleChange = ({ group, library }) => {\n        this.selectedLibrary = library;\n        this.selectedGroup = group;\n    }\n\n    _validateTarget = ({ group, library }) => {\n        if (group) {\n\n            // If you are trying to move or copy a group to within itself, then disable group\n            if (this.isGroupsOp && isGroupDescendantOfParent(group, this.items[0])) {\n                return false;\n            }\n\n            // If document assets and the group is an invalid child, then disable group\n            if (this.isDocumentAssets && !areValidDescendants(this.groups, group)) {\n                return false;\n            }\n        } else {\n            if (this.props.isMove && this.disableGroupSelection && !!this.items.find(item => item.library === library)) {\n                // Unless the user can select groups, they shouldn't be able to select the element's current library as the move target.\n                return false;\n            }\n            // If the library is read only, disable selection of the library.\n            // The library does not need to have all elements loaded unless it is the current library.\n            const allowUnloaded = library !== this.context.libraryManager.currentLibrary;\n\n            if (!this.context.viewState.isLibraryWritable(library, false, allowUnloaded)) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    @computed\n    get groupsTree() {\n        const elementSortState = this.context.viewState.elementSortState;\n        const sortBy = elementSortState === 'modified' ? 'order' : elementSortState;\n        return getCustomGroupsTree([], this.selectedLibrary?.getGroups(), { sortBy, includeUngrouped: false });\n    }\n\n    @computed get currentGroupBranch() {\n        const { branches, root } = this.groupsTree;\n        const branch = this.selectedGroup ? branches[this.selectedGroup.id] : root;\n        return branch;\n    }\n\n    @computed get mergeableGroups() {\n        if (!this.isGroupsOp) { return; }\n        // The copy/move picker is only called with a single group to copy/move, but we should guard against that anyway.\n        if (this.items.length > 1) { return; }\n        const sourceGroup = this.items[0];\n        return getMergeableGroupsInBranch(sourceGroup, this.currentGroupBranch);\n    }\n\n    get items() {\n        return this.props.items;\n    }\n\n    get groups() {\n        if (this.isGroupsOp) {\n            return this.items;\n        }\n\n        return [ ...new Set(this.items.map(item => item.getGroups()[0])) ];\n    }\n\n    get startingLibrary() {\n        // make sure you aren't starting the copy in a read-only lib\n        const currentLibrary = this.context.libraryManager.currentLibrary;\n\n        if (this.props.startingLibrary) {\n            return this.props.startingLibrary;\n        }\n\n        if (this.context.viewState.isLibraryWritable(currentLibrary) && !configuration.currentProduct.config.readOnlyGroups) {\n            return currentLibrary;\n        }\n    }\n\n    get startingGroup() {\n        // this will assume that the items selected are valid to be moved, since that is checked before the picker is opened\n        // keep moving upwards until there is a group with disableDraggingFromOutside enabled\n        const value = this.groups[0] && [ this.groups[0], ...getAllAncestors(this.groups[0]) ].find(group => group.disableDraggingFromOutside);\n\n        return value;\n    }\n\n    get isGroupsOp() {\n        return this.items[0].isGroup;\n    }\n\n    get isDocumentAssets() {\n        return this.items[0].library.isDocumentAssets;\n    }\n\n    get emptyGroupMessageLabel() {\n        if (this.mergeableGroups?.length) { return translate('DL_MERGE_EMPTY_GROUP'); }\n        return translate(this.props.isMove ? 'DL_MOVE_EMPTY_GROUP' : 'DL_COPY_EMPTY_GROUP');\n    }\n\n    _handleSubmit = async ({ library, group, extraMetrics }) => {\n        if (!this.isGroupsOp) {\n            if (!this.props.isMove) {\n                metrics.reportEvent('Add Assets', 'Element', 'click', 'add', {\n                    event: { value: 'agg', count: this.items.length },\n                    content: {\n                        category: 'Element Copy',\n                    }\n                }, this.context.libraryManager.currentLibrary);\n                metrics.setExtraEventMetrics('copyElement', { content: { category: 'Element Copy' } });\n            } else {\n                metrics.reportEvent('Element Operations', 'Element', 'move', 'element', {\n                    event: { value: 'agg', count: this.items.length },\n                    content: {\n                        category: 'Right Click',\n                    },\n                    ...extraMetrics\n                }, this.context.libraryManager.currentLibrary);\n            }\n        }\n\n        this.props.copyMoveAction(this.props.isMove, this.isGroupsOp ? this.items[0] : this.items, library, group);\n    }\n\n    _onCreateGroup = () => {\n        metrics.setExtraEventMetrics('createGroup', { content: { category: `${ this.props.isMove ? 'Move' : 'Copy' } Picker` } });\n    }\n\n    getTargetProps = (item) => {\n        return { className: classNames({ mergeable: this.mergeableGroups?.includes(item) }) };\n    }\n\n    get okButtonText() {\n        if (this.mergeableGroups?.length) { return translate('DL_MERGE'); }\n        const localizedTextKey = this.props.isMove\n            ? (configuration.currentProduct.config.overrideMoveText || 'DL_MOVE')\n            : (configuration.currentProduct.config.overrideCopyText || 'DL_COPY');\n        return translate(localizedTextKey);\n    }\n\n    get headerTitle() {\n        const localizedHeaderKey = this.props.isMove\n            ? (configuration.currentProduct.config.overrideMoveHeaderText || 'DL_MOVE_TO')\n            : (configuration.currentProduct.config.overrideCopyHeaderText || 'DL_COPY_TO');\n        return translate(localizedHeaderKey);\n    }\n\n    @computed\n    get mergeInfo() {\n        if (!this.mergeableGroups?.length) { return; }\n        return (\n            <div className=\"select-target-footer-icon select-target-merge-info-icon\">\n                <Tooltip placement=\"top-start\" className=\"select-target-merge-info-tooltip\" content={translate('DL_MERGE_HELP_TOOLTIP')}>\n                    <Icon id=\"HelpOutline\" data-test-id=\"select-target-merge-info-icon\" height={14} width={14} />\n                </Tooltip>\n            </div>\n        );\n    }\n\n    get disableGroupSelection() {\n        return this.props.disableGroupSelection ?? configuration.currentProduct.config.readOnlyGroups;\n    }\n\n    render() {\n        return (\n            <BaseSelectTargetPopover\n                id=\"copymove\"\n                additionalFooterContent={this.mergeInfo}\n                close={this.props.close}\n                disableGroupSelection={this.disableGroupSelection}\n                enableSetAsDefault={this.props.enableSetAsDefault}\n                disableSearch\n                emptyGroupMessageLabel={this.emptyGroupMessageLabel}\n                getTargetProps={this.getTargetProps}\n                height={configuration.currentProduct.config.copyMovePickerHeightOverride}\n                isGroupsOp={this.isGroupsOp}\n                isDocumentAssets={this.isDocumentAssets}\n                isMove={this.props.isMove}\n                onChange={this._handleChange}\n                onCreateGroup={this._onCreateGroup}\n                onSubmit={this._handleSubmit}\n                okButtonText={this.okButtonText}\n                startingGroup={this.startingGroup}\n                startingLibrary={this.startingLibrary}\n                title={this.headerTitle}\n                validateTarget={this._validateTarget}\n                width={configuration.currentProduct.config.copyMovePickerWidthOverride}\n                x={this.props.x}\n                y={this.props.y}\n            />\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport BasePopover from 'app/js/components/dialogs/BasePopover';\nimport { translate } from 'app/js/managers/translationManager';\nimport migrateGraphic from 'app/images/Onboarding_Nested-Groups.png';\nimport HTMLText from 'app/js/components/HTMLText';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport { replaceGroupDelimiters, convertDelimitedNamesToGroups } from 'app/js/utils/groupUtils';\nimport { shouldShowGroupsOnboarding, showGroupsOnboarding } from 'app/js/utils/onboardingUtils';\nimport configuration from 'app/js/config/configuration';\nimport { openPathViewHelpURL } from 'app/js/utils/linkUtils';\nimport environment from 'app/js/environment';\nimport { Library } from '@cclibraries/cc-libraries-js';\nimport DocumentAssetsContainer from 'app/js/models/documentAssets/DocumentAssetsContainer';\nimport Button from '@ccx-public/spectrum-wrapper/Button';\n\nconst MIGRATE_TOAST_TIMEOUT = 5000;\n\n@observer\nexport default class MigrateLibraryWithSlashesPopover extends React.Component {\n\n    static dialogName = 'migrateLibraryWithSlashes';\n    static isAlwaysInline = true;\n\n    static contextType = LibrariesContext;\n    static isAlwaysInline = true;\n\n    static propTypes = {\n        library: PropTypes.oneOfType([ PropTypes.instanceOf(Library), PropTypes.instanceOf(DocumentAssetsContainer) ]),\n        close: PropTypes.func.isRequired // Callback for closing the overlay (dialogManager.closeDialog())\n    };\n\n    get title() {\n        return <div data-test-id=\"popover-title\" className=\"popover-title\">{ translate('DL_MIGRATE_LIBRARY_POPOVER_TITLE') }</div>;\n    }\n\n    get body() {\n        return <div data-test-id=\"popover-body\" className=\"popover-body\"><HTMLText linkClickMethods={{ learnMore: () => openPathViewHelpURL() }} html={ translate('DL_MIGRATE_LIBRARY_POPOVER_BODY') }/></div>;\n    }\n\n    get graphic() {\n        return <img data-test-id=\"popover-graphic\" className=\"popover-graphic\" src={ migrateGraphic } />;\n    }\n\n    showErrorToast() {\n        this.context.toastManager.openToast('message', {\n            duration: MIGRATE_TOAST_TIMEOUT,\n            variant: 'error',\n            message: <HTMLText html={ translate('DL_MIGRATE_LIBRARY_POPOVER_ERROR_TOAST') } />\n        });\n    }\n\n    handleClickReplaceSlashes = () => {\n        try {\n            replaceGroupDelimiters(this.props.library);\n            this.context.toastManager.openToast('message', {\n                duration: MIGRATE_TOAST_TIMEOUT,\n                closable: false,\n                variant: 'success',\n                message: <HTMLText linkClickMethods={{ learnMore: () => openPathViewHelpURL() }} html={ translate('DL_MIGRATE_LIBRARY_POPOVER_SUCCESS_TOAST_REPLACE') } />\n            });\n        } catch (error) {\n            // This shouldn't ever happen\n            this.showErrorToast();\n        }\n\n        this.props.close();\n    }\n\n    handleConvertDelimitedNamesToGroups = async () => {\n        try {\n            await convertDelimitedNamesToGroups(this.props.library);\n\n            // Note: convertDelimitedNamesToGroups is asynchronous because it uses copyOrMove elements, which is\n            // asynchronous in the copy case. Because this will always be a move, we can reasonably expect this to\n            // be a synchronous operation. Thus no spinner should be needed.\n\n            if (shouldShowGroupsOnboarding()) {\n                this.context.viewState.setViewByState(configuration.VIEW_BY_MODES.GROUP);\n                showGroupsOnboarding();\n            } else {\n                this.context.toastManager.openToast('message', {\n                    duration: MIGRATE_TOAST_TIMEOUT,\n                    closable: false,\n                    variant: 'success',\n                    message: <HTMLText linkClickMethods={{ learnMore: () => openPathViewHelpURL() }} html={translate('DL_MIGRATE_LIBRARY_POPOVER_SUCCESS_TOAST_GROUP')}/>\n                });\n            }\n        } catch (error) {\n            // This shouldn't ever happen\n            this.showErrorToast();\n        }\n        this.props.close();\n    }\n\n    handleClickBackToRoot = () => {\n        if (environment.navigateToAllLibraries) {\n            environment.navigateToAllLibraries();\n        }\n        this.context.libraryManager.currentLibrary = null;\n        //for CCD we need to handleClickBackToRoot through navigateToAllLibraries which for all other environments would be null\n        environment.navigateToAllLibraries?.();\n        this.props.close();\n    }\n\n    render() {\n        const additionalFooterButtons = (\n            <>\n                <Button data-test-id=\"popover-migrate-button\" variant=\"secondary\" onClick={ this.handleConvertDelimitedNamesToGroups }>{ translate('DL_MIGRATE_LIBRARY_POPOVER_CONVERT_TO_GROUPS') }</Button>\n                <Button data-test-id=\"popover-back-button\" variant=\"secondary\" onClick={ this.handleClickBackToRoot }>{ translate('DL_BACK_BUTTON_ROOT') }</Button>\n            </>\n        );\n\n        return (\n            <BasePopover\n                className=\"migrate-slashes-library-popover\"\n                okButtonText={ translate('DL_MIGRATE_LIBRARY_POPOVER_REPLACE_SLASHES') }\n                onClickOK={ this.handleClickReplaceSlashes }\n                additionalFooterButtons={ additionalFooterButtons }\n                close={ this.props.close }\n                x={ 0 } // Can't center panel accurately because width is dynamic\n                y={ 10 }\n                placement=\"top\"\n                verticalButtonGroup\n                closeOnWindowClick={ false }\n                showPopoverTriangle={ false }\n                closeOnOverlayEvent={ false }\n                minHeight={540}>\n                { this.graphic }\n                { this.title }\n                { this.body }\n            </BasePopover>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport BaseDialog from 'app/js/components/dialogs/BaseDialog';\nimport HTMLText from 'app/js/components/HTMLText';\nimport { translate } from 'app/js/managers/translationManager';\nimport { quotaURL, openLibraryArchiveURL } from 'app/js/utils/linkUtils';\n\n// Enum for quota error types.\nconst QUOTA_ERROR = {\n    OWNED: 'owned',\n    SHARED: 'shared'\n};\n\n/**\n * Error dialog explaining the type of over-quota error for a publish operation.\n */\n@observer\nexport default class PublishQuotaErrorDialog extends React.Component {\n\n    static dialogName = 'publishQuotaError';\n\n    static propTypes = {\n        isFirstTimePublishing: PropTypes.bool,\n        errorType: PropTypes.oneOf([ QUOTA_ERROR.OWNED, QUOTA_ERROR.SHARED ]).isRequired,\n        close: PropTypes.func // Callback for closing the dialog (dialogManager.closeDialog())\n    };\n\n    handleUpgrade = () => {\n        // TODO: analytics when specified.\n        quotaURL();\n    }\n\n    handleFreeUpSpace = () => {\n        // TODO: analytics when specified.\n        openLibraryArchiveURL();\n    }\n\n    get dialogData() {\n        if (this.props.isFirstTimePublishing) {\n            // First time publish.\n            return {\n                title: translate('DL_PUBLISH_QUOTA_ERROR_HEADING'),\n                okButtonText: translate('DL_PUBLISH_QUOTA_ERROR_UPGRADE'),\n                // TODO: add hyperlink to this message.\n                message: <HTMLText html={translate('DL_PUBLISH_QUOTA_ERROR_BODY')} onClick={this.handleFreeUpSpace} />,\n                onClickOK: this.handleUpgrade\n            };\n        }\n        // Update operation.\n        return {\n            [QUOTA_ERROR.OWNED]: {\n                title: translate('DL_PUBLISH_UPDATES_QUOTA_ERROR_HEADING'),\n                okButtonText: translate('DL_PUBLISH_QUOTA_ERROR_UPGRADE'),\n                message: translate('DL_PUBLISH_UPDATES_QUOTA_ERROR_BODY'),\n                onClickOK: this.handleUpgrade\n            },\n            [QUOTA_ERROR.SHARED]: {\n                title: translate('DL_PUBLISH_UPDATES_QUOTA_ERROR_HEADING'),\n                message: translate('DL_PUBLISH_UPDATES_SHARED_QUOTA_ERROR_BODY')\n            }\n        }[this.props.errorType];\n    }\n\n    render() {\n        return (\n            <BaseDialog mode=\"error\" className=\"panel-dialog-publish-quota-error\" close={ this.props.close } {...this.dialogData}>\n                <div data-test-id=\"publish-quota-error-message\" className=\"panel-dialog-layout-100\">\n                    { this.dialogData.message }\n                </div>\n            </BaseDialog>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport BasePopover from 'app/js/components/dialogs/BasePopover';\nimport { translate } from 'app/js/managers/translationManager';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\n\n@observer\nexport default class ViewByGroupPopover extends React.Component {\n\n    static dialogName = 'viewByGroupPopover';\n\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        close: PropTypes.func.isRequired // Callback for closing the overlay (dialogManager.closeDialog())\n    }\n\n    get title() {\n        return <div data-test-id=\"popover-title\" className=\"popover-title\">{ translate('DL_VIEW_BY_GROUP_POPOVER_TITLE') }</div>;\n    }\n\n    get body() {\n        return <div data-test-id=\"popover-body\" className=\"popover-body\">{ translate('DL_VIEW_BY_GROUP_POPOVER_BODY') }</div>;\n    }\n\n    render() {\n        return (\n            <div className=\"view-by-group-popover\">\n                <BasePopover\n                    okButtonText={ translate('DL_OK') }\n                    close={ this.props.close }\n                    x={ 10 }\n                    y={ this.context.viewState.panelHeaderHeight }\n                    placement=\"top\"\n                    horizontalPlacement=\"left\">\n                    { this.title }\n                    { this.body }\n                </BasePopover>\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport BaseDialog from './BaseDialog';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport classNames from 'classnames';\n\n@observer\nexport default class LoadLibraryByAssetIdDialog extends React.Component {\n    static contextType = LibrariesContext;\n    static dialogName = 'loadLibraryByAssetId';\n\n    static propTypes = {\n        close: PropTypes.func\n    };\n\n    @observable assetId = '';\n\n    loadLibrary() {\n        this.context.libraryManager.loadLibraryByAssetId(this.assetId.trim()).then(library => {\n            this.context.libraryManager.currentLibrary = library;\n            this.props.close?.();\n        });\n    }\n\n    handleClickOK = () => {\n        this.loadLibrary();\n    };\n\n    handleChange = event => {\n        this.assetId = event.target.value;\n    };\n\n    handleKeyDown = event => {\n        if (event.key === 'Enter') {\n            this.loadLibrary();\n        }\n    };\n\n    render() {\n        return (\n            <BaseDialog\n                title=\"Load library by asset ID\"\n                className=\"rename-dialog\"\n                okButtonText=\"Load\"\n                onClickOK={ this.handleClickOK }\n                close={ this.props.close }\n            >\n                <div className=\"panel-dialog-layout-group\">\n                    <div className={classNames('panel-dialog-layout-75', 'panel-dialog-input-container')}>\n                        <input\n                            className=\"rename-library-input\"\n                            type=\"text\"\n                            spellCheck=\"false\"\n                            placeholder=\"Asset ID\"\n                            style={ { width: '100%' } }\n                            value={ this.name }\n                            onKeyDown={ this.handleKeyDown }\n                            onChange={ this.handleChange }\n                        />\n                    </div>\n                </div>\n            </BaseDialog>\n        );\n    }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"statusText\":\"CZe\",\"actionGrid\":\"sxx\",\"libraryHeader\":\"FBl\",\"executeLine\":\"FWe\",\"executeText\":\"f0O\",\"operation\":\"dPa\",\"linkedAction\":\"x6t\",\"action\":\"nz1\",\"insert\":\"npQ\",\"update\":\"fhm\",\"remove\":\"Bn6\"};","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport classNames from 'classnames';\nimport ButtonGroup from '@torq-native/react-spectrum/ButtonGroup';\nimport Button from '@torq-native/react-spectrum/Button';\nimport Pause from '@torq-native/react-spectrum/Icon/Pause';\nimport Play from '@torq-native/react-spectrum/Icon/Play';\n\nimport BaseDialog from 'app/js/components/dialogs/BaseDialog';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\n\nimport styles from './index.scss';\n\n@observer\nexport default class JsApi2DashboardDialog extends React.Component {\n    static contextType = LibrariesContext;\n    static dialogName = 'jsApi2Dashboard';\n\n    static propTypes = {\n        close: PropTypes.func\n    };\n\n    @observable isSyncing = false;\n    @observable displayState = [\n        []\n    ];\n\n    componentDidMount() {\n        this.isSyncing = this.context.libraryManager.syncingEnabled();\n        this.context.libraryManager.dangerouslyAccessCCLibraries().on?.('report', this.pushDisplayState);\n\n        this.tickInterval = setInterval(() => {\n            if (this.displayState.length > 1) {\n                this.displayState.shift();\n            }\n        }, 750);\n\n        this.pushDisplayState();\n    }\n\n    componentWillUnmount() {\n        this.context.libraryManager.dangerouslyAccessCCLibraries().off?.('report', this.pushDisplayState);\n        clearInterval(this.tickInterval);\n    }\n\n    pushDisplayState = () => {\n        this.displayState.push([ ...this.libraryHeaders, ...this.libraryActions, ...this.libraryOperations ]);\n    };\n\n    async handleSyncClick(sync) {\n        if (sync) {\n            await this.context.libraryManager.enableSyncing();\n        } else {\n            this.context.libraryManager.disableSyncing();\n        }\n\n        this.isSyncing = this.context.libraryManager.syncingEnabled();\n    }\n\n    get libraries() {\n        return this.context.libraryManager.libraries.filter(library => library.actions.length > 0).slice(0, 6);\n    }\n\n    get libraryHeaders() {\n        return this.libraries.map((library, index) => (\n            <div\n                key={ library.id }\n                className={ styles.libraryHeader }\n                style={ { gridColumn: `${index + 1} / span 1` } }\n            >\n                { library.name }\n            </div>\n        )).concat([\n            <div key=\"exec-line\" className={ styles.executeLine }>\n                <div className={ styles.executeText }>Execute</div>\n            </div>\n        ]);\n    }\n\n    get libraryActions() {\n        const actionToQueueMap = new Map();\n        const cellToLinkedCellMap = new Map();\n        const actionQueues = [];\n\n        for (let column = 0; column < this.libraries.length; column += 1) {\n            const library = this.libraries[column];\n            const actionQueue = [];\n            actionQueues.push(actionQueue);\n\n            const actions = library.actions.slice(0, 8);\n\n            for (let row = 0; row < actions.length; row += 1) {\n                const action = actions[row];\n                const cell = { library, action, column, row };\n                actionToQueueMap.set(action, actionQueue);\n                actionQueue.push(cell);\n            }\n        }\n\n        let scanRow = 0;\n        let didFindCellLastRow;\n\n        do {\n            didFindCellLastRow = false;\n\n            for (const actionQueue of actionQueues) {\n                const cell = actionQueue.find(action => action.row === scanRow);\n\n                if (!cell) {\n                    continue;\n                }\n\n                didFindCellLastRow = true;\n\n                if (!cell.action.link || cell.action.name === 'dependent') {\n                    continue;\n                }\n\n                const linkedAction = cell.action.link;\n                const linkedActionQueue = actionToQueueMap.get(linkedAction);\n                const linkedCell = linkedActionQueue.find(cell => cell.action === linkedAction);\n                const linkedCellIndex = linkedActionQueue.indexOf(linkedCell);\n\n                if (linkedCell.library === cell.library) {\n                    continue;\n                }\n\n                for (let i = linkedCellIndex; i < linkedActionQueue.length; i += 1) {\n                    const actionToShift = linkedActionQueue[i];\n                    actionToShift.row = cell.row + i - linkedCellIndex;\n                }\n\n                cellToLinkedCellMap.set(cell, linkedCell);\n            }\n\n            scanRow += 1;\n        } while (didFindCellLastRow);\n\n        const linkedActionElements = [];\n        for (const [ action, dependentAction ] of cellToLinkedCellMap.entries()) {\n            const maxColumn = Math.max(action.column, dependentAction.column) + 1;\n            const minColumn = Math.min(action.column, dependentAction.column);\n\n            linkedActionElements.push(\n                <div\n                    key={ `${action.type}-${dependentAction.type}-link-${action.row}` }\n                    className={ classNames(styles.linkedAction) }\n                    style={\n                        {\n                            gridColumn: `${minColumn + 1} / ${maxColumn + 1}`,\n                            gridRow: `${action.row + 3} / span 1`\n                        }\n                    }\n                />\n            );\n        }\n\n        const actionElements = actionQueues.flat().map(({ library, action, column, row }) => (\n            <div\n                key={ `${library.name}-${action.type}-${column}-${row}` }\n                className={ classNames(styles.action, styles[action.type]) }\n                style={ { gridColumn: `${column + 1} / span 1`, gridRow: `${row + 3} / span 1` } }\n            >\n                { action.name }\n            </div>\n        ));\n\n        return [ ...linkedActionElements, ...actionElements ];\n    }\n\n    get libraryOperations() {\n        return this.libraries.map((library, index) => {\n            if (library.operation && !typeof library.operation !== 'symbol') {\n                const actionCount = library.operation.actions.length;\n\n                /* eslint-disable react/no-array-index-key */\n                return (\n                    <div\n                        key={ `op-${library.name}-${index}` }\n                        className={ styles.operation }\n                        style={ { gridColumn: `${index + 1} / span 1`, gridRow: `3 / span ${actionCount}` } }\n                    />\n                );\n                /* eslint-enable react/no-array-index-key */\n            }\n        }).filter(Boolean);\n    }\n\n    get currentDisplayState() {\n        return this.displayState[0];\n    }\n\n    render() {\n        return (\n            <BaseDialog\n                title=\"JS API 2.0 Dashboard\"\n                close={ this.props.close }\n            >\n                <div>\n                    <div className={ styles.statusText }>\n                        Syncing: { this.isSyncing ? 'Enabled' : 'Disabled' }\n                    </div>\n                    <ButtonGroup>\n                        <Button\n                            icon={ <Play /> }\n                            onClick={ () => this.handleSyncClick(true) }\n                            disabled={ this.isSyncing }\n                        >\n                            Start Syncing\n                        </Button>\n                        <Button\n                            icon={ <Pause /> }\n                            onClick={ () => this.handleSyncClick(false) }\n                            disabled={ !this.isSyncing }\n                        >\n                            Stop Syncing\n                        </Button>\n                    </ButtonGroup>\n                    <div className={ styles.actionGrid }>\n                        { this.currentDisplayState }\n                    </div>\n                </div>\n            </BaseDialog>\n        );\n    }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"publishBrandDialog\":\"LWd\",\"panelOrganizationBox\":\"TNA\",\"panelOrganizationTop\":\"xWb\",\"panelOrganizationTitle\":\"dbv\",\"ghostLoading\":\"oxH\",\"panelOrganizationSubtitle\":\"eTM\",\"panelOrganizationBottom\":\"coe\",\"publishSuccessContent\":\"GZf\",\"successHeader\":\"n1s\",\"successFooter\":\"C2W\",\"panelLoadingButton\":\"pIu\",\"statusLightAnimation\":\"kL-\",\"dialogBanner\":\"dLu\",\"dialogBannerButton\":\"fJ7\",\"publishDialogBody\":\"AFu\",\"m2\":\"hsb\",\"publishSuccessDialogBody\":\"jdo\",\"dialogBody\":\"YVS\",\"confetti\":\"LnA\"};","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\nimport type { ElementSize } from '@ccx-public/spectrum-web-component-fallbacks/dist/base';\nimport type { ProgressCircle } from '@ccx-public/spectrum-web-component-fallbacks/dist/progress-circle';\nimport { SWCLoader } from './utils/SWCLoader';\nimport createWrapper from './utils/createWrapper';\nimport { filterBooleanProps } from './utils';\nimport interopRequireDefault from './utils/interopRequireDefault';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Wait: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Wait')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\nif (!process.env.EXCLUDE_SWC) {\n    swcLoader = new SWCLoader(['sp-progress-circle'], async () => {\n        const { ProgressCircle } = await import(\n            /* webpackChunkName: \"SpProgressCircle\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/progress-circle'\n        );\n        return [ProgressCircle];\n    });\n}\n\ntype RS2Size = 'S' | 'M' | 'L';\ntype RS2CompatProps = {\n    /** progress of the progress circle */\n    value?: number;\n    variant?: 'overBackground';\n    size?: RS2Size;\n};\n\nconst SIZE_CONVERSIONS: Record<RS2Size, ElementSize> = {\n    S: 's',\n    M: 'm',\n    L: 'l',\n};\n\nexport default createWrapper<ProgressCircle, RS2CompatProps>({\n    displayName: 'Wait',\n    fallback: RS2Wait,\n    swcLoader,\n    swcProps: (props) => {\n        const {\n            className,\n            variant,\n            value,\n            indeterminate,\n            size = 'M',\n            ...rest\n        } = props;\n\n        // ReactSpectrum2           | SpectrumWebComponent\n        // ---------------------------------------------\n        // value                    | progress\n        // variant:overBackground   | static\n\n        return {\n            ...rest,\n            ...filterBooleanProps({\n                indeterminate: typeof value === 'undefined' || indeterminate,\n            }),\n            class: className,\n            progress: value,\n            size: SIZE_CONVERSIONS[size],\n            static:\n                variant && variant === 'overBackground' ? 'white' : undefined,\n        };\n    },\n    tagName: 'sp-progress-circle',\n});\n","import React from 'react';\nimport BaseDialog from 'app/js/components/dialogs/BaseDialog';\nimport { Library } from '@cclibraries/cc-libraries-js';\nimport styles from './index.scss';\nimport PropTypes from 'prop-types';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport Lottie from 'lottie-web';\nimport classnames from 'classnames';\nimport { computed, observable, when } from 'mobx';\nimport linkManager from 'app/js/managers/linkManager';\nimport { translate } from 'app/js/managers/translationManager';\nimport Icon from 'app/js/components/Icon';\nimport HTMLText from 'app/js/components/HTMLText';\nimport Button from '@ccx-public/spectrum-wrapper/Button';\nimport Wait from '@ccx-public/spectrum-wrapper/Wait';\nimport ButtonGroup from 'app/js/components/ButtonGroup';\nimport { isPublishedBrand } from 'app/js/utils/brandUtils';\nimport GenStudioToast from 'app/images/GenStudio/animations/GenStudioToast.json';\nimport GenStudio_Published from 'app/images/GenStudio/animations/GenStudio_Published.json';\nimport floodgateManager from 'app/js/managers/floodgateManager';\nimport { launchLearnMorePublishURL } from 'app/js/utils/linkUtils';\n\nexport default class PublishDialog extends BaseDialog {\n    static dialogName = 'publishBrand';\n\n    constructor(props) {\n        super(props);\n\n        this.confettiCanvasRef = React.createRef();\n        this.publishPillCanvasRef = React.createRef();\n    }\n\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        brand: PropTypes.instanceOf(Library),\n        close: PropTypes.func.isRequired, // Callback for closing the dialog (dialogManager.closeDialog()),\n        needsReview: PropTypes.bool,\n        onPublish: PropTypes.func,\n        action: PropTypes.string.isRequired // 'publish' or 'unpublish'\n    };\n\n    static defaultProps = {\n        action: 'publish'\n    }\n\n    @computed\n    get toUnpublish() {\n        if (this.isBrandLifecycleEnabled) {\n            return this.props?.action === 'unpublish';\n        }\n        return isPublishedBrand(this.props.brand);\n    }\n\n    get showPublishBrandBanner() {\n        return this.props.needsReview && this.currPage === 'publish0';\n    }\n\n    get isBrandLifecycleEnabled() {\n        return floodgateManager.isBrandLifecycleEnabled();\n    }\n\n    @observable orgName = null;\n    @observable currPage = this.toUnpublish ? 'unpublish' : 'publish0';\n\n    @observable isActionLoading = false;\n\n    get isOrgLoading() {\n        return this.orgName === null;\n    }\n\n    componentDidMount() {\n        linkManager\n            .getAssetWithCloudID(this.props.brand.assetId)\n            .then((response) => {\n                when(\n                    () => !!response.repositoryName,\n                    () => {\n                        this.orgName = response.repositoryName;\n                    }\n                );\n            })\n            .catch((e) => {\n                return Promise.reject(e);\n            });\n    }\n\n    handleClickOK = () => {\n        if (this.toUnpublish) {\n            this.context.brandActions.unpublishBrand(this.props.brand);\n        } else {\n            this.context.brandActions.publishBrand(this.props.brand);\n            this.props.onPublish?.();\n        }\n    };\n\n    handlePublish = async () => {\n        this.isActionLoading = true;\n        const success = await this.context.brandActions.publishBrand(this.props.brand);\n        if (success === 1) {\n            this.triggerConfetti();\n        }\n        this.isActionLoading = false;\n    }\n\n    handleUnpublish = async () => {\n        this.isActionLoading = true;\n        const success = await this.context.brandActions.unpublishBrand(this.props.brand);\n        if (success === 1) {\n            // Close the dialog on successful unpublish\n            // Dont need to set this.isActionLoading = false because we are closing the dialog\n            // If we were to set this.isActionLoading = false after close, there would be a very brief flash of the enabled unpublish button before closing\n            this.props.close();\n        } else {\n            this.isActionLoading = false;\n        }\n    }\n\n    triggerConfetti = async () => {\n        this.currPage = 'publishConfetti';\n        const confetti = Lottie.loadAnimation({\n            container: this.confettiCanvasRef.current, // the dom element that will contain the animation\n            renderer: 'svg',\n            loop: false,\n            autoplay: true,\n            animationData: GenStudioToast\n        });\n        confetti.addEventListener('complete', this.onCompleteAnimation);\n    }\n\n    onCompleteAnimation = () => {\n        Lottie.destroy();\n        this.currPage = 'publish1';\n        this.triggerPublishPillAnimation();\n    }\n\n    onClickCancel = (event) => {\n        event?.stopPropagation();\n        this.props.close?.();\n    };\n\n    get actionSpinner() {\n        return (\n            <div data-test-id=\"publish-dialog-action-spinner\" className={styles.panelLoadingButton}>\n                <Wait size=\"S\" indeterminate />\n                <div style={{ opacity: 0 }}>{translate(this.toUnpublish ? 'BRAND_UNPUBLISH_ACTION' : 'BRAND_PUBLISH_ACTION')}</div>\n            </div>\n        );\n    }\n\n    onClickLearnMore = () => {\n        launchLearnMorePublishURL();\n    }\n\n    get publishContent() {\n        return (\n            <div data-test-id=\"publish-content\">\n                <div className={styles.panelOrganizationBox}>\n                    <div className={styles.panelOrganizationTop}>\n                        <Icon id=\"Building\" height={18} />\n                        <div className={classnames(styles.panelOrganizationTitle, { [styles.ghostLoading]: this.isOrgLoading })}>\n                            {this.orgName ? translate('BRAND_PUBLISH_DIALOG_INFO_ORG', { organization: this.orgName }) : translate('BRAND_PUBLISH_DIALOG_INFO_ORG_GENERIC')}\n                        </div>\n                        <div className={styles.panelOrganizationPermission}>{translate('BRAND_PUBLISH_DIALOG_INFO_ROLE')}</div>\n                    </div>\n                    {!this.isBrandLifecycleEnabled && <div className={styles.panelOrganizationBottom}>\n                        <div className={styles.panelOrganizationSubtitle}>{translate('BRAND_PUBLISH_DIALOG_INFO_SUBTITLE')}</div>\n                    </div>}\n                </div>\n                <div className={classnames(styles.publishDialogBody, { [styles.m2]: !this.isBrandLifecycleEnabled })}>\n                    {this.isBrandLifecycleEnabled\n                        ? <HTMLText data-test-id=\"publish-dialog-body\" onClick={this.onClickLearnMore} html={ translate('BRAND_PUBLISH_DIALOG_PERMISSIONS') } />\n                        : translate('BRAND_PUBLISH_DIALOG_PERMISSIONS_M2')}\n                </div>\n                {this.isBrandLifecycleEnabled\n                    && <div className={styles.publishDialogBody} data-test-id=\"publish-dialog-review-info\">\n                        { translate('BRAND_PUBLISH_DIALOG_REVIEW_INFO') }\n                    </div>\n                }\n                <ButtonGroup className=\"panel-dialog-footer\">\n                    <Button data-test-id=\"publish-cancel-button\" onClick={this.onClickCancel} variant=\"secondary\" treatment=\"outline\">\n                        {translate('DL_CANCEL')}\n                    </Button>\n                    <Button\n                        data-test-id=\"publish-ok-button\"\n                        onClick={(event) => {\n                            event && event.stopPropagation();\n                            this.handlePublish();\n                        }}\n                        variant={'cta'}\n                        disabled={this.isActionLoading}\n                    >\n                        {this.isActionLoading ? this.actionSpinner : translate('BRAND_PUBLISH_ACTION')}\n                    </Button>\n                </ButtonGroup>\n            </div>\n        );\n    }\n\n    get publishConfetti() {\n        return (\n            <>\n                <div\n                    className={styles.confetti}\n                    ref={this.confettiCanvasRef}\n                    id=\"extraction-dialog-canvas\"\n                />\n            </>\n\n        );\n    }\n\n    get publishSuccessContent() {\n        return (\n            <div className={styles.publishSuccessContent} data-test-id=\"publish-success-content\">\n                <div className={styles.statusLightAnimation} ref={this.publishPillCanvasRef}/>\n                <div className={classnames(styles.successHeader, 'panel-dialog-title')}>{translate('BRAND_PUBLISH_SUCCESS_TITLE', { brand: this.props.brand.name })}</div>\n                <div className={styles.publishSuccessDialogBody}>{translate('BRAND_PUBLISH_SUCCESS_BODY')}</div>\n                <ButtonGroup className={styles.successFooter}>\n                    <Button\n                        data-test-id=\"publish-done-button\"\n                        onClick={(event) => {\n                            event && event.stopPropagation();\n                            Lottie.destroy('publish-pill');\n                            this.props.close();\n                        }}\n                        variant={'cta'}\n                    >\n                        {translate('BRAND_PUBLISH_SUCCESS_DONE')}\n                    </Button>\n                </ButtonGroup>\n            </div>\n        );\n    }\n\n    triggerPublishPillAnimation = () => {\n        Lottie.destroy('publish-pill');\n        Lottie.loadAnimation({\n            container: this.publishPillCanvasRef.current, // the dom element that will contain the animation\n            renderer: 'svg',\n            loop: false,\n            autoplay: true,\n            name: 'publish-pill',\n            animationData: GenStudio_Published\n        });\n    }\n\n    get unpublishContent() {\n        const unpublishDialogBody = this.isBrandLifecycleEnabled ? 'BRAND_UNPUBLISH_DIALOG_BODY_PROJECTS' : 'BRAND_UNPUBLISH_DIALOG_BODY_DIRECT_INVITE';\n        return (\n            <div data-test-id=\"unpublish-content\" className={styles.dialogBody}>\n                {translate(unpublishDialogBody)}\n                <ButtonGroup className=\"panel-dialog-footer\">\n                    <Button data-test-id=\"unpublish-cancel-button\" onClick={this.onClickCancel} variant=\"secondary\" treatment=\"outline\">\n                        {translate('DL_CANCEL')}\n                    </Button>\n                    <Button\n                        data-test-id=\"unpublish-ok-button\"\n                        onClick={(event) => {\n                            event && event.stopPropagation();\n                            this.handleUnpublish();\n                        }}\n                        variant=\"cta\"\n                        disabled={this.isActionLoading}\n                    >\n                        {this.isActionLoading ? this.actionSpinner : translate('BRAND_UNPUBLISH_ACTION')}\n                    </Button>\n                </ButtonGroup>\n            </div>\n        );\n    }\n\n    get publishBrandBanner() {\n        const onBannerReviewClick = () => {\n            this.props.close();\n        };\n\n        return (\n            this.showPublishBrandBanner && (\n                <div className={styles.dialogBanner}>\n                    <div>{translate('BRAND_PUBLISH_DIALOG_REVIEW_BANNER')}</div>\n                    <Button className={styles.dialogBannerButton} data-test-id=\"dialog-cancel-button\" onClick={onBannerReviewClick} variant=\"secondary\" treatment=\"outline\">\n                        {translate('BRAND_PUBLISH_DIALOG_REVIEW_BUTTON')}\n                    </Button>\n                </div>\n            )\n        );\n    }\n\n    /**\n     * PublishBrandDialog has three valid states:\n     * 1. Publish0 - which warns users about the consequence of publishing\n     * 2. Publish1 - which confirms that a brand is successfully published\n     * 3. Unpublish - which warns users about the consequence of unpublish\n     *\n     * Publish0 and Publish1 use nonstandard footer buttons so the default BaseDialog footer is hidden for those.\n     * Unpublish does not have a success view, and instead uses a toast to confirm success.\n     */\n    render() {\n        let displayPage = '';\n        let title = undefined;\n\n        switch (this.currPage) {\n        case 'unpublish':\n            displayPage = this.unpublishContent;\n            title = translate('BRAND_UNPUBLISH_ACTION_LONG');\n            break;\n        case 'publish0':\n            displayPage = this.publishContent;\n            title = translate('BRAND_PUBLISH_ACTION_LONG');\n            break;\n        case 'publish1':\n            displayPage = this.publishSuccessContent;\n            break;\n        case 'publishConfetti':\n            displayPage = this.publishConfetti;\n            break;\n        default:\n            displayPage = this.publishContent;\n            title = translate('BRAND_PUBLISH_ACTION_LONG');\n            break;\n        }\n\n        return (\n            <BaseDialog\n                title={title}\n                className={styles.publishBrandDialog}\n                close={this.props.close}\n                banner={this.publishBrandBanner}\n                showFooter={false}\n                ref={this.dialogRef}\n            >\n                {displayPage}\n            </BaseDialog>\n        );\n    }\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport BasePopover from 'app/js/components/dialogs/BasePopover';\nimport { translate } from 'app/js/managers/translationManager';\nimport onboardingImage from '../../../images/captureCoachMark.png';\nimport * as CaptureUtils from 'app/js/utils/captureUtils';\nimport * as OnboardingConstants from 'app/js/components/onboarding/onboardingConstants';\nimport { markOnboardingViewed } from 'app/js/utils/onboardingUtils';\nimport metrics from 'app/js/interface/metrics';\nimport { getAddMenuItems } from 'app/js/utils/menuUtils';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\n\nexport default class CaptureOnboardingPopover extends React.Component {\n    static dialogName = 'captureOnboardingPopover';\n    static contextType = LibrariesContext;\n    static isAlwaysInline = true;\n\n    static propTypes = {\n        close: PropTypes.func.isRequired // Callback for closing the overlay (dialogManager.closeDialog())\n    };\n\n    componentDidMount() {\n        metrics.reportEvent('Onboarding', 'Capture', 'render', 'modal');\n    }\n\n    componentWillUnmount() {\n        this.context.viewState.setCurrentWorkflow();\n    }\n\n    onClickOK = () => {\n        CaptureUtils.openCapture(true);\n        metrics.reportEvent('Onboarding', 'Capture', 'click', 'view');\n        this.props.close();\n    }\n\n    onClose = () => {\n        markOnboardingViewed('capture');\n        metrics.reportEvent('Onboarding', 'Capture', 'click', 'close');\n        this.props.close();\n    }\n\n    get title() {\n        return <div data-test-id=\"popover-title\" className=\"popover-title\">{ translate('DL_CAPTURE_ONBOARDING_POPOVER_TITLE') }</div>;\n    }\n\n    get body() {\n        return <div data-test-id=\"popover-body\" className=\"popover-body\">{ translate('DL_CAPTURE_ONBOARDING_POPOVER_BODY') }</div>;\n    }\n\n    get graphic() {\n        return <img data-test-id=\"popover-graphic\" className=\"capture-popover-graphic\" src={ onboardingImage } />;\n    }\n\n    get y() {\n        const addMenuItems = getAddMenuItems().filter(x => !x.divider);\n        return OnboardingConstants.FOOTER_HEIGHT + OnboardingConstants.MENU_PADDING + (OnboardingConstants.MENU_ITEM_HEIGHT * addMenuItems.length);\n    }\n\n    render() {\n        return (\n            <div className=\"coach-mark-with-image\">\n                <BasePopover\n                    okButtonText={ translate('DL_CAPTURE_TOUR') }\n                    onClickOK={ this.onClickOK }\n                    cancelButtonText={ translate('DL_CANCEL') }\n                    close={ this.onClose }\n                    x={ 5 }\n                    y={ this.y }\n                    triangleOffset={ 163 }\n                    horizontalPlacement=\"right\"\n                    placement=\"bottom\">\n                    { this.graphic }\n                    { this.title }\n                    { this.body }\n                </BasePopover>\n            </div>\n        );\n    }\n}\n","export const FOOTER_HEIGHT = 32;\nexport const MENU_PADDING = 12;\nexport const MENU_ITEM_HEIGHT = 27;\nexport const MENU_DIVIDER_HEIGHT = 5;\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { observable } from 'mobx';\nimport BasePopover from 'app/js/components/dialogs/BasePopover';\nimport { translate } from 'app/js/managers/translationManager';\nimport { markOnboardingViewed } from 'app/js/utils/onboardingUtils';\nimport environment from 'app/js/environment';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport classNames from 'classnames';\nimport HTMLText from 'app/js/components/HTMLText';\nimport { openTeamsLearnMoreURL } from 'app/js/utils/linkUtils';\n\nimport NewUserOnboardingImage from 'app/images/NewUserOnboarding.png';\nimport ReturningUserOnboardingImage from 'app/images/teamLibrariesOnboarding.png';\n\nconst TOP_MARGIN = 12;\nconst RIGHT_MARGIN = 2;\nconst LEFT_MARGIN = 12;\nconst BOTTOM_MARGIN = 40;\n\n@observer\nexport default class RootViewOnboardingPopover extends React.Component {\n\n    static contextType = LibrariesContext;\n    static dialogName = 'rootViewOnboardingPopover';\n\n    @observable currentStepId = 0;\n\n    static propTypes = {\n        close: PropTypes.func.isRequired, // Callback for closing the overlay (dialogManager.closeDialog())\n    };\n\n    get isNewUser() {\n        return this.context.viewState.isNewUserState();\n    }\n\n    markViewed() {\n        if (this.isNewUser) {\n            markOnboardingViewed('newUserRoot');\n        }\n        markOnboardingViewed('panelRootOnboarding');\n    }\n\n    closeDialog() {\n        this.markViewed();\n        this.props.close();\n    }\n\n    onClickSkip = () => {\n        this.closeDialog();\n    }\n\n    onClose = (event) => {\n        event && event.preventDefault();\n        if (!this.isLastStep) {\n            this.currentStepId++;\n            return;\n        }\n        this.closeDialog();\n    }\n\n    getCoachmarkIndicatorRings = () => {\n        return <div\n            data-test-id=\"root-view-overlay-highlight\"\n            className={\n                classNames(\n                    'delightful-performant-coachmark-indicator-ring',\n                    'root-view-onboarding-coachmarks'\n                )\n            }\n        />;\n    }\n\n    onLearnMoreClick = () => {\n        openTeamsLearnMoreURL();\n    }\n\n    get title() {\n        if (this.isNewUser) {\n            return <div data-test-id=\"popover-title\" className=\"popover-title\">{ translate(this.currentStep.title) }</div>;\n        } else {\n            return <div className=\"popover-title-row\">\n                <div data-test-id=\"popover-title\" className=\"popover-title\">{ translate(this.currentStep.title) }</div>\n                <div data-test-id=\"popover-page-number\" className=\"popover-page-number\">\n                    { translate('DL_INFO_PAGINATION_COUNT', { currentPage: this.currentStepId + 1, totalPages: this.isNewUser ? this.allStepsNewUser.length : this.allStepsReturningUser.length }) }\n                </div>\n            </div>;\n        }\n    }\n\n    get body() {\n        if (this.currentStep.htmlBody) {\n            return <HTMLText data-test-id=\"popover-body\" onClick={this.onLearnMoreClick} className=\"popover-body\" html={ translate(this.currentStep.htmlBody) } />;\n        } else {\n            return <div data-test-id=\"popover-body\" className=\"popover-body\">{ translate(this.currentStep.body) }</div>;\n        }\n\n    }\n\n    get graphic() {\n        return <img data-test-id=\"popover-graphic\" className=\"popover-graphic\" src={ this.currentStep.onboardingImage }></img>;\n    }\n\n    get y() {\n        const customHeaderView = environment.getCustomHeaderView();\n        return (customHeaderView && customHeaderView.height || 0) + TOP_MARGIN;\n    }\n\n    get currentStep() {\n        if (this.isNewUser) {\n            return this.allStepsNewUser[this.currentStepId];\n        }\n        return this.allStepsReturningUser[this.currentStepId];\n    }\n\n    get allStepsNewUser() {\n        return [\n            {\n                x: LEFT_MARGIN,\n                y: this.y,\n                verticalPlacement: 'top',\n                horizontalPlacement: 'left',\n                onboardingImage: NewUserOnboardingImage,\n                title: 'DL_PANEL_NEW_USER_ONBOARDING_TITLE1',\n                body: 'DL_PANEL_NEW_USER_ONBOARDING_DESCRIPTION1',\n                okButtonText: 'DL_ONBOARDING_TOUR_NEXT'\n            }, {\n                x: RIGHT_MARGIN,\n                y: BOTTOM_MARGIN,\n                verticalPlacement: 'bottom',\n                horizontalPlacement: 'right',\n                title: 'DL_PANEL_NEW_USER_ONBOARDING_TITLE2',\n                body: 'DL_PANEL_NEW_USER_ONBOARDING_DESCRIPTION2',\n                okButtonText: 'DL_ONBOARDING_TOUR_FINISH',\n                indicator: this.getCoachmarkIndicatorRings(),\n            }\n        ];\n    }\n\n    get allStepsReturningUser() {\n        return [\n            {\n                x: LEFT_MARGIN,\n                y: this.y,\n                verticalPlacement: 'top',\n                horizontalPlacement: 'left',\n                onboardingImage: ReturningUserOnboardingImage,\n                title: 'DL_EXISTING_USER_PANEL_ONBOARDING_TITLE1',\n                htmlBody: 'DL_EXISTING_USER_PANEL_ONBOARDING_DESCRIPTION1',\n                okButtonText: 'DL_ONBOARDING_TOUR_NEXT',\n                cancelButtonText: 'DL_ONBOARDING_TOUR_SKIP',\n            }, {\n                x: RIGHT_MARGIN,\n                y: BOTTOM_MARGIN,\n                verticalPlacement: 'bottom',\n                horizontalPlacement: 'right',\n                title: 'DL_EXISTING_USER_PANEL_ONBOARDING_TITLE2',\n                body: 'DL_EXISTING_USER_PANEL_ONBOARDING_DESCRIPTION2',\n                okButtonText: 'DL_ONBOARDING_TOUR_FINISH',\n                indicator: this.getCoachmarkIndicatorRings(),\n            }\n        ];\n    }\n\n    get isLastStep() {\n        return this.currentStepId === (this.isNewUser ? this.allStepsNewUser.length - 1 : this.allStepsReturningUser.length - 1);\n    }\n\n    render() {\n        return (\n            <div className={classNames('coach-mark-with-image', 'panel-root-view-onboarding')}>\n                <BasePopover\n                    okButtonText={ translate(this.currentStep.okButtonText) }\n                    cancelButtonText={ this.currentStep.cancelButtonText ? translate(this.currentStep.cancelButtonText) : null }\n                    close={ this.onClose }\n                    onClickCancel={ this.onClickSkip }\n                    x={ this.currentStep.x }\n                    y={ this.currentStep.y }\n                    indicators={ this.currentStep.indicator }\n                    showPopoverTriangle={ false }\n                    closeOnWindowClick={ this.isLastStep }\n                    horizontalPlacement={ this.currentStep.horizontalPlacement }\n                    placement={ this.currentStep.verticalPlacement }>\n                    { this.graphic }\n                    { this.title }\n                    { this.body }\n                </BasePopover>\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport environment from 'app/js/environment';\nimport BasePopover from 'app/js/components/dialogs/BasePopover';\nimport { translate } from 'app/js/managers/translationManager';\nimport { markOnboardingViewed } from 'app/js/utils/onboardingUtils';\nimport metrics from 'app/js/interface/metrics';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport { openPathViewHelpURL } from 'app/js/utils/linkUtils';\nimport Button from '@ccx-public/spectrum-wrapper/Button';\n\nexport default class PathViewOnboarding extends React.Component {\n    static dialogName = 'pathViewOnboarding';\n    static contextType = LibrariesContext;\n    static isAlwaysInline = true;\n\n    static propTypes = {\n        close: PropTypes.func.isRequired // Callback for closing the overlay (dialogManager.closeDialog())\n    };\n\n    componentDidMount() {\n        metrics.reportEvent('Onboarding', 'Path view', 'render', 'modal');\n    }\n\n    onClickOK = () => {\n        metrics.reportEvent('Onboarding', 'Path view', 'click', 'view');\n        this.props.close();\n    }\n\n    onClose = () => {\n        markOnboardingViewed('groupsPathView');\n        metrics.reportEvent('Onboarding', 'Path view', 'click', 'close');\n        this.props.close();\n    }\n\n    handleLearnMoreClick = () => {\n        markOnboardingViewed('groupsPathView');\n        metrics.reportEvent('Onboarding', 'Path view', 'click', 'learnmore');\n        openPathViewHelpURL();\n        this.props.close();\n    }\n\n    get title() {\n        return <div data-test-id=\"popover-title\" className=\"popover-title\">{ translate('DL_GROUP_ONBOARDING_POPOVER_TITLE') }</div>;\n    }\n\n    get body() {\n        return <div data-test-id=\"popover-body\" className=\"popover-body\">{ translate('DL_GROUP_ONBOARDING_POPOVER_BODY') }</div>;\n    }\n\n    get indicators() {\n        return <div\n            data-test-id=\"path-view-overlay-highlight\"\n            className={\n                classNames(\n                    'delightful-performant-coachmark-indicator-ring',\n                    'path-view-onboarding'\n                )\n            }\n        />;\n    }\n\n    get y() {\n        // We can't use viewState.panelHeaderHeight because this dialog can\n        // be opened before the header has updated, and so viewState.panelHeaderHeight\n        // returns an inaccurate height. Since this dialog is only ever shown in the\n        // current library view, the header will always be 112 + additional custom header height\n\n        const libraryHeaderHeight = 112;\n        const customHeaderView = environment.getCustomHeaderView();\n        const customHeaderHeight = customHeaderView && customHeaderView.height || 0;\n        return customHeaderHeight + libraryHeaderHeight;\n    }\n\n    get learnMoreButton() {\n        return (\n            <Button data-test-id=\"popover-learn-more-button\" className=\"popover-cancel-button\" variant=\"secondary\" onClick={ this.handleLearnMoreClick }>\n                { translate('DL_LEARN_MORE') }\n            </Button>\n        );\n    }\n\n    render() {\n        return (\n            <div className=\"coach-mark-with-image\">\n                <BasePopover\n                    okButtonText={ translate('DL_OK') }\n                    onClickOK={ this.onClickOK }\n                    additionalFooterButtons={ this.learnMoreButton }\n                    close={ this.onClose }\n                    x={ 10 }\n                    y={ this.y }\n                    triangleOffset={ 32 }\n                    horizontalPlacement=\"right\"\n                    placement=\"top\"\n                    indicators={ this.indicators }>\n                    { this.title }\n                    { this.body }\n                </BasePopover>\n            </div>\n        );\n    }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"panelTeamLibOneUpOnboarding\":\"lSG\"};","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { observable } from 'mobx';\nimport BasePopover from 'app/js/components/dialogs/BasePopover';\nimport { translate } from 'app/js/managers/translationManager';\nimport { markOnboardingViewed } from 'app/js/utils/onboardingUtils';\nimport environment from 'app/js/environment';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport styles from './index.scss';\nimport HTMLText from 'app/js/components/HTMLText';\n\nconst TOP_MARGIN = 40;\nconst RIGHT_MARGIN = 6;\nconst LEFT_MARGIN = 12;\n\n@observer\nexport default class PanelTeamLibraryOneUpOnboardingPopover extends React.Component {\n\n    static contextType = LibrariesContext;\n    static dialogName = 'panelTeamLibraryOneUpOnboardingPopover';\n    @observable currentStepId = 0;\n\n    static propTypes = {\n        close: PropTypes.func.isRequired, // Callback for closing the overlay (dialogManager.closeDialog())\n    };\n\n    closeDialog() {\n        markOnboardingViewed('teamLibraryOneUpPanel');\n        this.props.close();\n    }\n\n    onClickSkip = () => {\n        this.closeDialog();\n    }\n\n    onClose = (event) => {\n        event && event.preventDefault();\n        if (!this.isLastStep) {\n            this.currentStepId++;\n            return;\n        }\n        this.closeDialog();\n    }\n\n    get title() {\n        return <div className=\"popover-title-row\">\n            <div data-test-id=\"popover-title\" className=\"popover-title\">\n                <HTMLText html={ translate(this.currentStep.title) } />\n            </div>\n            <div data-test-id=\"popover-page-number\" className=\"popover-page-number\">\n                { translate('DL_INFO_PAGINATION_COUNT', { currentPage: this.currentStepId + 1, totalPages: this.allSteps.length }) }\n            </div>\n        </div>;\n    }\n\n    get body() {\n        return <div data-test-id=\"popover-body\" className=\"popover-body\">{ translate(this.currentStep.body) }</div>;\n    }\n\n    get y() {\n        const customHeaderView = environment.getCustomHeaderView();\n        return (customHeaderView && customHeaderView.height || 0) + TOP_MARGIN;\n    }\n\n    get currentStep() {\n        return this.allSteps[this.currentStepId];\n    }\n\n    get allSteps() {\n        return [\n            {\n                x: RIGHT_MARGIN,\n                y: this.y,\n                verticalPlacement: 'top',\n                horizontalPlacement: 'right',\n                title: 'DL_PANEL_TEAM_LIBRARY_ONBOARDING_TITLE1',\n                body: 'DL_PANEL_TEAM_LIBRARY_ONBOARDING_DESCRIPTION1',\n                okButtonText: 'DL_ONBOARDING_TOUR_NEXT',\n                cancelButtonText: 'DL_ONBOARDING_TOUR_SKIP',\n            }, {\n                x: LEFT_MARGIN,\n                y: this.y,\n                verticalPlacement: 'top',\n                horizontalPlacement: 'left',\n                title: 'DL_PANEL_TEAM_LIBRARY_ONBOARDING_TITLE2',\n                body: 'DL_PANEL_TEAM_LIBRARY_ONBOARDING_DESCRIPTION2',\n                okButtonText: 'DL_ONBOARDING_TOUR_FINISH',\n            }\n        ];\n    }\n\n    get isLastStep() {\n        return this.currentStepId === this.allSteps.length - 1;\n    }\n\n    render() {\n        if (!this.currentStep) {\n            return null;\n        }\n        return (\n            <div className={styles.panelTeamLibOneUpOnboarding}>\n                <BasePopover\n                    okButtonText={ translate(this.currentStep.okButtonText) }\n                    cancelButtonText={ this.currentStep.cancelButtonText ? translate(this.currentStep.cancelButtonText) : null }\n                    onClickCancel={ this.onClickSkip }\n                    close={ this.onClose }\n                    x={ this.currentStep.x }\n                    y={ this.currentStep.y }\n                    showPopoverTriangle={ true }\n                    triangleOffset={10}\n                    closeOnWindowClick={ this.isLastStep }\n                    horizontalPlacement={ this.currentStep.horizontalPlacement }\n                    placement={ this.currentStep.verticalPlacement }>\n                    { this.title }\n                    { this.body }\n                </BasePopover>\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { observable } from 'mobx';\nimport BasePopover from 'app/js/components/dialogs/BasePopover';\nimport { translate } from 'app/js/managers/translationManager';\nimport { markOnboardingViewed } from 'app/js/utils/onboardingUtils';\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport { isLibraryInvitable } from 'app/js/utils/libraryUtils';\n\nconst SECOND_RIGHT_FOOTER_BUTTON = 33;\nconst DEFAULT_GROUP_BUTTON_LOCATION = 57;\nconst DEFAULT_INVITE_BUTTON_LOCATION = 42;\n\n@observer\nexport default class FirstEnteredLibraryOnboardingPopoverTour extends React.Component {\n\n    static contextType = LibrariesContext;\n    static isTour = true;\n    static dialogName = 'firstEnteredLibraryOnboardingPopoverTour';\n    static propTypes = {\n        close: PropTypes.func.isRequired, // Callback for closing the overlay (dialogManager.closeDialog()),\n        isNewUserTour: PropTypes.bool\n    };\n\n    @observable currentStepId = 0;\n\n    closeDialog() {\n        this.context.viewState.setTourInProgress(false);\n        markOnboardingViewed('firstEnteredLibrary');\n        this.props.close();\n    }\n\n    onClickCancel = () => {\n        this.closeDialog();\n    }\n\n    onClose = () => {\n        if (!this.isLastStep) {\n            this.currentStepId++;\n            return;\n        }\n        this.closeDialog();\n    }\n\n    get title() {\n        return <div className=\"popover-title-row\">\n            <div data-test-id=\"popover-title\" className=\"popover-title\">{ translate(this.currentStep.title) }</div>\n            { this.props.isNewUserTour && <div data-test-id=\"popover-page-number\" className=\"popover-page-number\">{ translate('DL_INFO_PAGINATION_COUNT', { currentPage: this.currentStepId + 1, totalPages: this.allSteps.length }) }</div> }\n        </div>;\n    }\n\n    get body() {\n        return <div data-test-id=\"popover-body\" className=\"popover-body\">{ translate(this.currentStep.body) }</div>;\n    }\n\n    get y() {\n        return this.context.viewState.panelHeaderHeight;\n    }\n\n    get currentStep() {\n        return this.allSteps[this.currentStepId];\n    }\n\n    get allSteps() {\n        const groupTriangleOffset = configuration.currentProduct.config.hideAddControls ? SECOND_RIGHT_FOOTER_BUTTON : DEFAULT_GROUP_BUTTON_LOCATION;\n        const customHeaderView = environment.getCustomHeaderView();\n        const customHeaderHeight = customHeaderView && customHeaderView.height || 0;\n        const inviteY = DEFAULT_INVITE_BUTTON_LOCATION + customHeaderHeight;\n\n        const steps = [\n            { x: 5, y: 30, triangleOffset: SECOND_RIGHT_FOOTER_BUTTON, title: 'DL_NEW_USER_TOUR_ADD_TITLE', body: 'DL_NEW_USER_TOUR_ADD_BODY', verticalPlacement: 'bottom', isDisabled: !this.props.isNewUserTour || configuration.currentProduct.config.hideAddControls },\n            { x: 5, y: 30, triangleOffset: groupTriangleOffset, title: 'DL_NEW_USER_TOUR_GROUP_TITLE', body: 'DL_NEW_USER_TOUR_GROUP_BODY', verticalPlacement: 'bottom', isDisabled: !this.props.isNewUserTour },\n            { x: 5, y: inviteY, triangleOffset: 9, title: 'DL_NEW_USER_TOUR_INVITE_TITLE', body: 'DL_NEW_USER_TOUR_INVITE_BODY', verticalPlacement: 'top', isDisabled: !isLibraryInvitable(this.context.libraryManager.currentLibrary) }\n        ];\n\n        return steps.filter(step => !step.isDisabled);\n    }\n\n    get isLastStep() {\n        return this.currentStepId === this.allSteps.length - 1;\n    }\n\n    get okButtonText() {\n        const lastStepText = this.props.isNewUserTour ? 'DL_ONBOARDING_TOUR_FINISH' : 'DL_OK';\n        return translate(!this.isLastStep ? 'DL_ONBOARDING_TOUR_NEXT' : lastStepText);\n    }\n\n    get cancelButtonText() {\n        return translate(!this.isLastStep ? 'DL_ONBOARDING_TOUR_SKIP' : '');\n    }\n\n    render() {\n        if (!this.currentStep) {\n            return null;\n        }\n        return (\n            <div className=\"coach-mark-with-image popover-tour-transparent-overlay\">\n                <BasePopover\n                    okButtonText={ this.okButtonText }\n                    onClickCancel={ this.onClickCancel }\n                    triangleOffset={ this.currentStep.triangleOffset }\n                    cancelButtonText={ this.cancelButtonText }\n                    close={ this.onClose }\n                    x={ this.currentStep.x }\n                    y={ this.currentStep.y }\n                    closeOnWindowClick={ this.isLastStep }\n                    horizontalPlacement=\"right\"\n                    placement={this.currentStep.verticalPlacement}>\n                    { this.title }\n                    { this.body }\n                </BasePopover>\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { observable } from 'mobx';\nimport BasePopover from 'app/js/components/dialogs/BasePopover';\nimport { translate } from 'app/js/managers/translationManager';\nimport { markOnboardingViewed } from 'app/js/utils/onboardingUtils';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport environment from 'app/js/environment';\n\nconst PUBLISH_BUTTON_X_FROM_RIGHT = 70;\nconst PUBLISH_BUTTON_Y_FROM_TOP = 205;\nconst PUBLISH_BUTTON_OFFSET_FROM_RIGHT_OF_POPOVER = 25;\nconst FIRST_TOGGLE_X_FROM_LEFT = 210;\nconst FIRST_TOGGLE_Y_FROM_TOP = 335;\nconst TOGGLE_OFFSET_FROM_LEFT_OF_POPOVER = 17;\n\n@observer\nexport default class ManagerOnboardingPopoverTour extends React.Component {\n\n    static dialogName = 'managerOnboardingPopoverTour';\n    static contextType = LibrariesContext;\n    /*\n        Note on Tour overlays in UXP:\n        There are 2 overlays to know of.\n        1) One is the .popover-wrapper part of the Popover, which is typicalled dimmed and arrests clicks and scrolling.\n           For Tours, the wrapper is made transparent. In UXP, when the wrapper is transparent, scrolling isn't arrested, so we separately handle scrolling.\n        2) The other is the .spectrum-Underlay used in the ManagerDialogContainer, which creates a darker dimmed overlay\n           for dialogs in the LM. We pass dialogs into the ReactSpectrumDialog in the LM (which centers dialogs, but we turn this off), and we keep the\n           underlay which turns off scrolling, but make it transparent as well.\n    */\n    static isTour = true;\n    static propTypes = {\n        close: PropTypes.func.isRequired, // Callback for closing the overlay (dialogManager.closeDialog()),\n    };\n\n    @observable currentStepId = 0;\n\n    closeDialog() {\n        markOnboardingViewed('librariesManager');\n        this.props.close();\n    }\n\n    onClickSkip = () => {\n        this.closeDialog();\n    }\n\n    onClose = () => { // BasePopover calls this anytime a click occurs on OK/Cancel or outside window. (So in this case on Skip, Next, or Finish)\n        if (!environment.isLibraryManagerWindowOpen()) {\n            return;\n        }\n        if (!this.isLastStep) {\n            this.currentStepId++;\n            return;\n        }\n        this.closeDialog();\n    }\n\n    get title() {\n        return <div className=\"popover-title-row\">\n            <div data-test-id=\"popover-title\" className=\"popover-title\">{ translate(this.currentStep.title) }</div>\n            { this.allSteps.length > 1\n                && <div data-test-id=\"popover-page-number\" className=\"popover-page-number\">\n                    { translate('DL_INFO_PAGINATION_COUNT', { currentPage: this.currentStepId + 1, totalPages: this.allSteps.length }) }\n                </div>\n            }\n        </div>;\n    }\n\n    get body() {\n        return <div data-test-id=\"popover-body\" className=\"popover-body\">{ translate(this.currentStep.body) }</div>;\n    }\n\n    get currentStep() {\n        return this.allSteps[this.currentStepId];\n    }\n\n    get allSteps() {\n        const steps = [ {\n            x: PUBLISH_BUTTON_X_FROM_RIGHT,\n            y: PUBLISH_BUTTON_Y_FROM_TOP,\n            triangleOffset: PUBLISH_BUTTON_OFFSET_FROM_RIGHT_OF_POPOVER,\n            verticalPlacement: 'top',\n            horizontalPlacement: 'right',\n            title: 'MANAGER_TOUR_TITLE_1',\n            body: 'MANAGER_TOUR_BODY_1',\n            okButtonText: 'DL_ONBOARDING_TOUR_NEXT',\n            cancelButtonText: 'DL_ONBOARDING_TOUR_SKIP',\n            disable: this.context.libraryManager.isRestrictedAccount\n        },\n        {\n            x: FIRST_TOGGLE_X_FROM_LEFT,\n            y: FIRST_TOGGLE_Y_FROM_TOP,\n            triangleOffset: TOGGLE_OFFSET_FROM_LEFT_OF_POPOVER,\n            verticalPlacement: 'top',\n            horizontalPlacement: 'left',\n            title: 'MANAGER_TOUR_TITLE_2',\n            body: 'MANAGER_TOUR_BODY_2',\n            okButtonText: 'DL_ONBOARDING_TOUR_FINISH',\n        } ];\n\n        return steps.filter(step => !step.disable);\n    }\n\n    get isLastStep() {\n        return this.currentStepId === this.allSteps.length - 1;\n    }\n\n    render() {\n        if (!this.currentStep) {\n            return null;\n        }\n        return (\n            <div className=\"coach-mark-with-image popover-tour-transparent-overlay\">\n                <BasePopover\n                    okButtonText={ translate(this.currentStep.okButtonText) }\n                    cancelButtonText={ this.currentStep.cancelButtonText && translate(this.currentStep.cancelButtonText) }\n                    onClickCancel={ this.onClickSkip }\n                    triangleOffset={ this.currentStep.triangleOffset }\n                    close={ this.onClose }\n                    x={ this.currentStep.x }\n                    y={ this.currentStep.y }\n                    closeOnWindowClick={ this.isLastStep }\n                    horizontalPlacement={ this.currentStep.horizontalPlacement }\n                    placement={ this.currentStep.verticalPlacement }>\n                    { this.title }\n                    { this.body }\n                </BasePopover>\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { markOnboardingViewed } from 'app/js/utils/onboardingUtils';\nimport metrics from 'app/js/interface/metrics';\nimport { translate } from 'app/js/managers/translationManager';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport BaseDialog from './BaseDialog';\nimport Icon from 'app/js/components/Icon';\nimport classNames from 'classnames';\nimport { openTeamsLearnMoreURL } from 'app/js/utils/linkUtils';\n\nexport default class TeamsLibraryCCDOneUpOnboardingDialog extends React.Component {\n\n    static contextType = LibrariesContext;\n    static dialogName = 'teamsLibraryCCDOneUpOnboardingDialog';\n\n    static propTypes = {\n        close: PropTypes.func.isRequired // Callback for closing the overlay (dialogManager.closeDialog())\n    };\n\n    componentDidMount() {\n        metrics.reportEvent('Onboarding', 'Teams Library One up Intro', 'render', 'modal');\n    }\n\n    constructor(props) {\n        super(props);\n    }\n\n    onClickOK = () => {\n        markOnboardingViewed('teamsLibraryOpen');\n        metrics.reportEvent('Onboarding', 'Teams Library One up Intro', 'click', 'close');\n        this.props.close();\n    }\n\n    onLearnMoreClick = () => {\n        openTeamsLearnMoreURL();\n    }\n\n    render() {\n        const inputContainerClasses = classNames('panel-dialog-layout-75', 'panel-dialog-input-container', { 'panel-dialog-warning': this.showWarning });\n        return (\n            <BaseDialog title={ translate('DL_TEAM_LIBRARY_ONBOARDING_HEADING') } okButtonText={ translate('DL_OK') } onClickOK={ this.onClickOK } onClickCancel = { this.onLearnMoreClick }\n                close={ this.props.close } cancelButtonText={ translate('DL_LEARN_MORE')} className=\"team-library-one-up-onboarding\" >\n                <div className={inputContainerClasses}>\n                    <span className=\"team-library-onboarding-browse-icon-container\"><Icon id=\"Browse\" data-test-id=\"onboarding-browse-icon\" height={18} /></span>\n                    <span data-test-id=\"onboarding-first-message\" className=\"team-library-onboarding-message-container\">{translate('DL_TEAM_LIBRARY_ONBOARDING_FIRST_MESSAGE')}</span>\n                </div>\n                <div className={inputContainerClasses}>\n                    <span className=\"team-library-onboarding-invite-icon-container\"><Icon id=\"Invite\" data-test-id=\"onboarding-invite-icon\" height={18} /></span>\n                    <span data-test-id=\"onboarding-second-message\" className=\"team-library-onboarding-message-container\">{translate('DL_TEAM_LIBRARY_ONBOARDING_SECOND_MESSAGE')}</span>\n                </div>\n                <div className={inputContainerClasses}>\n                    <span className=\"team-library-onboarding-organisations-icon-container\"><Icon id=\"Organisations\" data-test-id=\"onboarding-organisation-icon\" height={18} /></span>\n                    <span data-test-id=\"onboarding-third-message\" className=\"team-library-onboarding-message-container\">{translate('DL_TEAM_LIBRARY_ONBOARDING_THIRD_MESSAGE')}</span>\n                </div>\n            </BaseDialog>\n        );\n    }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"Hen\",\"graphic\":\"iKS\",\"heading\":\"TrK\",\"description\":\"eQY\"};","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport BaseDialog from '../BaseDialog';\nimport { translate } from 'app/js/managers/translationManager';\nimport metrics from 'app/js/interface/metrics';\nimport teamLibrariesOnboarding from 'app/images/teamLibrariesOnboarding.png';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport HTMLText from 'app/js/components/HTMLText';\nimport styles from './index.scss';\nimport { openTeamsLearnMoreURL } from 'app/js/utils/linkUtils';\n\n@observer\nexport default class TeamsLibraryCreateCCDOnboardingDialog extends React.Component {\n\n    static dialogName = 'teamsLibraryCreateCCDOnboardingDialog';\n    static contextType = LibrariesContext;\n    static propTypes = {\n        close: PropTypes.func, // Callback for closing the dialog (dialogManager.closeDialog())\n        defaultTeam: PropTypes.object\n    };\n\n    componentDidMount() {\n        metrics.reportEvent('Onboarding', 'Teams Library Create Intro', 'render', 'modal');\n    }\n\n    closeClick = () => {\n        metrics.reportEvent('Onboarding', 'Teams Library Create Intro', 'click', 'close');\n        this.props.close && this.props.close();\n        this.context.viewState.setRemoveDialogPadding(false);\n        this.context.dialogManager.openDialog('createLibrary', { defaultTeam: this.props.defaultTeam });\n    };\n\n    onLearnMoreClick = () => {\n        openTeamsLearnMoreURL();\n    }\n\n    render() {\n        return (\n            <BaseDialog data-test-id=\"team-libraries-create-onboarding\" okButtonText={ translate('DL_OK') } close={ this.closeClick } cancelButtonText={ null } >\n                <div className=\"panel-dialog-layout-group\">\n                    <div className={styles.container}>\n                        <img\n                            data-test-id=\"team-libraries-create-onboarding-graphic\"\n                            className={styles.graphic}\n                            src={ teamLibrariesOnboarding }\n                        />\n                        <HTMLText\n                            className={styles.heading}\n                            data-test-id=\"team-libraries-create-onboarding-heading\"\n                            html={ translate('DL_TEAM_LIBRARIES_CREATE_DIALOG_TITLE') }\n                        />\n                        <HTMLText\n                            className={styles.description}\n                            data-test-id=\"team-libraries-create-onboarding-description\"\n                            html= {translate('DL_TEAM_LIBRARIES_CREATE_DIALOG_DESCRIPTION')}\n                            onClick={this.onLearnMoreClick}\n                        />\n                    </div>\n                </div>\n            </BaseDialog>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport BaseDialog from '../BaseDialog';\nimport { Library } from '@cclibraries/cc-libraries-js';\nimport { translate } from 'app/js/managers/translationManager';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\n\n@observer\nexport default class RevisionHistoryDialog extends React.Component {\n    static contextType = LibrariesContext;\n    static dialogName = 'revisionHistory';\n    static propTypes = {\n        library: PropTypes.instanceOf(Library).isRequired,\n        close: PropTypes.func // Callback for closing the dialog (dialogManager.closeDialog())\n    };\n\n    get title() {\n        return translate('DL_REVISIONHISTORY_LIBRARY', { name: this.props.library.name });\n    }\n\n    render() {\n        return (\n            <BaseDialog title={this.title} okButtonText={''} close={this.props.close} cancelButtonText={''}>\n\n                {/* Delete after fetching actual data from library object */}\n                {Array.from({ length: 11 }, (_, index) => (\n                    <div key={index}>\n                        <span>Edited</span> <br></br>\n                        <span>Today 2:15pm</span>\n                    </div>\n                ))}\n\n            </BaseDialog>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport CreateLibraryDialog from 'app/js/components/dialogs/CreateLibraryDialog';\nimport RenameLibraryDialog from 'app/js/components/dialogs/RenameLibraryDialog';\nimport DeleteLibraryDialog from 'app/js/components/dialogs/DeleteLibraryDialog';\nimport NoteDialog from 'app/js/components/dialogs/NoteDialog';\nimport ConfirmDialog from 'app/js/components/dialogs/ConfirmDialog';\nimport WhatsNewDialog from 'app/js/components/dialogs/WhatsNewDialog';\nimport ImportExportDialog from 'app/js/components/dialogs/ImportExportDialog';\nimport DropFilesDialog from 'app/js/components/dialogs/DropFilesDialog';\nimport AnalyticsDialog from 'app/js/components/dialogs/AnalyticsDialog';\nimport DebugThemeAndLocaleDialog from 'app/js/components/dialogs/DebugThemeAndLocaleDialog';\nimport RelinkLayerOverlay from 'app/js/components/dialogs/RelinkLayerOverlay';\nimport StockErrorDialog from 'app/js/components/dialogs/StockErrorDialog';\nimport StockVideoCompPickerDialog from 'app/js/components/dialogs/StockVideoCompPickerDialog';\nimport ContextMenu from 'app/js/components/dialogs/ContextMenu';\nimport UnlockToolkitDialog from 'app/js/components/dialogs/UnlockToolkitDialog';\nimport RecentSearchesOverlay from 'app/js/components/dialogs/RecentSearchesOverlay';\nimport PromoteTeamLibraryDialog from 'app/js/components/dialogs/PromoteTeamLibraryDialog';\nimport CopyTeamLibraryDialog from 'app/js/components/dialogs/CopyTeamLibraryDialog';\nimport DeleteTeamLibraryDialog from 'app/js/components/dialogs/DeleteTeamLibraryDialog';\nimport PublishLibraryDialog from 'app/js/components/dialogs/PublishLibraryDialog';\nimport QuotaWarningPopover from 'app/js/components/dialogs/QuotaWarningPopover';\nimport OverQuotaPopover from 'app/js/components/dialogs/OverQuotaPopover';\nimport SaveCloudDocDialog from 'app/js/components/dialogs/SaveCloudDocDialog';\nimport EnableSyncPopup from 'app/js/components/dialogs/EnableSyncPopup';\nimport BaseSelectTargetPopover from 'app/js/components/dialogs/BaseSelectTargetPopover';\nimport CopyMovePickerPopover from 'app/js/components/dialogs/CopyMovePickerPopover';\nimport MigrateLibraryWithSlashesPopover from 'app/js/components/dialogs/MigrateLibraryWithSlashesPopover';\nimport PublishQuotaErrorDialog from 'app/js/components/dialogs/PublishQuotaErrorDialog';\nimport ViewByGroupPopover from 'app/js/components/dialogs/ViewByGroupPopover';\nimport LoadLibraryByAssetIdDialog from 'app/js/components/dialogs/LoadLibraryByAssetIdDialog';\nimport JsApi2DashboardDialog from 'app/js/components/dialogs/JsApi2DashboardDialog';\nimport PublishBrandDialog from 'app/js/components/GenStudio/PublishBrandDialog';\n\n// Onboarding specific Popovers/Dialogs are imported here for organization\nimport CaptureOnboardingPopover from 'app/js/components/onboarding/CaptureOnboardingPopover';\nimport RootViewOnboardingPopover from 'app/js/components/onboarding/RootViewOnboardingPopover';\nimport PathViewOnboarding from 'app/js/components/onboarding/PathViewOnboarding';\nimport PanelTeamLibraryOneUpOnboardingPopover from 'app/js/components/onboarding/PanelTeamLibraryOneUpOnboarding';\nimport FirstEnteredLibraryOnboardingPopoverTour from 'app/js/components/onboarding/FirstEnteredLibraryOnboardingPopoverTour';\nimport ManagerOnboardingPopoverTour from 'app/js/components/onboarding/ManagerOnboardingPopoverTour';\nimport TeamsLibraryCCDOneUpOnboardingDialog from 'app/js/components/dialogs/TeamsLibraryCCDOneUpOnboardingDialog';\nimport TeamsLibraryCreateCCDOnboardingDialog from 'app/js/components/dialogs/TeamsLibraryCreateCCDOnboardingDialog';\nimport RevisionHistoryDialog from 'app/js/components/dialogs/RevisionHistory';\n\n// All dialogs available to register:\nconst librariesDialogs = [\n    // Standard Dialogs\n    CreateLibraryDialog,\n    RenameLibraryDialog,\n    DeleteLibraryDialog,\n    NoteDialog,\n    ConfirmDialog,\n    WhatsNewDialog,\n    ImportExportDialog,\n    DropFilesDialog,\n    AnalyticsDialog,\n    DebugThemeAndLocaleDialog,\n    RelinkLayerOverlay,\n    StockErrorDialog,\n    StockVideoCompPickerDialog,\n    ContextMenu,\n    UnlockToolkitDialog,\n    RecentSearchesOverlay,\n    PromoteTeamLibraryDialog,\n    CopyTeamLibraryDialog,\n    DeleteTeamLibraryDialog,\n    PublishLibraryDialog,\n    SaveCloudDocDialog,\n    QuotaWarningPopover,\n    EnableSyncPopup,\n    OverQuotaPopover,\n    CopyMovePickerPopover,\n    BaseSelectTargetPopover,\n    MigrateLibraryWithSlashesPopover,\n    PublishQuotaErrorDialog,\n    ViewByGroupPopover,\n    LoadLibraryByAssetIdDialog,\n    JsApi2DashboardDialog,\n    PublishBrandDialog,\n    // Onboarding Dialogs/Popovers go here for organization\n    CaptureOnboardingPopover,\n    RootViewOnboardingPopover,\n    FirstEnteredLibraryOnboardingPopoverTour,\n    ManagerOnboardingPopoverTour,\n    TeamsLibraryCCDOneUpOnboardingDialog,\n    PanelTeamLibraryOneUpOnboardingPopover,\n    TeamsLibraryCreateCCDOnboardingDialog,\n    PathViewOnboarding,\n    RevisionHistoryDialog,\n    // Environment specific dialog imports\n    process.env.SUPPORTS_LIBRARY_MANAGER && require('app/js/components/dialogs/RelinkDocumentLibraryDialog').default,\n    process.env.SUPPORTS_LIBRARY_MANAGER && require('app/js/components/dialogs/RelinkDocumentAssetDialog').default,\n    process.env.SUPPORTS_LIBRARY_MANAGER && require('app/js/components/dialogs/RelinkOrphanedLibraryDialog').default,\n    process.env.SUPPORTS_LIBRARY_MANAGER && require('app/js/components/dialogs/CreateOrPublishLibraryDialog').default,\n    process.env.SUPPORTS_LIBRARY_MANAGER && require('app/js/components/dialogs/ResolveBrokenLinksDialog').default\n];\n\nexport default librariesDialogs;\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { BaseState } from './BaseState';\n\n/**\n * Base class for wrapping UI state - so far two classes extend from this, one for each UI we support:\n *\n * ManagerState - handles the state of the Libraries Manager.\n * PanelState - handles the state of the Libraries Panel.\n *\n * Add getters to any and all shared global state.\n */\nexport class BaseUIState extends BaseState {\n\n    get libraryManager() {\n        return this._rootContext.libraryManager;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { BaseDialogManager } from 'app/js/managers/dialogManager';\nimport { ViewManager } from 'app/js/managers/viewManager';\nimport { ToastManager } from 'app/js/managers/toastManager';\nimport { ManagerViewState } from 'app/js/state/ManagerViewState';\nimport { LibraryActions } from 'app/js/utils/LibraryActions';\nimport { DocumentAssetsActions } from 'app/js/models/documentAssets/DocumentAssetsActions';\nimport librariesDialogs from 'app/js/managers/utils/librariesDialogs';\nimport { BaseUIState } from './BaseUIState';\n\n/**\n * Stores all UI State of the Libraries Manager.\n * A ManagerState instance should be given as the value for a LibrariesContext provider in a Manager UI.\n */\nexport class ManagerState extends BaseUIState {\n\n    constructor(context) {\n        super(context);\n\n        this.dialogManager = new BaseDialogManager(this);\n        this.viewManager = new ViewManager(this);\n        this.toastManager = new ToastManager(this);\n        this.viewState = new ManagerViewState(this);\n        this.libraryActions = new LibraryActions(this);\n        this.documentActions = new DocumentAssetsActions(this);\n    }\n\n    init() {\n        this.dialogManager.init(librariesDialogs);\n    }\n\n    reset() {\n        // Reset the manager to its initial state.\n        this.dialogManager.closeDialog();\n        this.toastManager.closeToast();\n        this.viewState.setSearchText('');\n        this.viewManager.stopRename();\n    }\n}\n","/*************************************************************************\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n **************************************************************************/\n\nimport {\n    trackingEvent,\n    Actions,\n    ElementTypes,\n} from '@genstudio/instrumentation';\n\nconst APP_NAME = 'GenStudio-app';\nconst FEATURE = 'brands';\n\nexport class OmegaMetrics {\n    /**\n  * Sends a publish brand tracking event\n  * @param {string} brandId Id of published brand\n  */\n    sendPublishBrandOmegaEvent(brandId) {\n        const event = {\n            applicationName: APP_NAME,\n            eventData: {\n                feature: FEATURE,\n                action: Actions.click,\n                widget: {\n                    name: 'publish-brand-dialog',\n                    type: 'dialog',\n                },\n                element: `publish-button`,\n                elementId: `publish-button-id`,\n                type: ElementTypes.button,\n            },\n            attributes: {\n                brandId,\n            }\n        };\n        trackingEvent(event);\n    }\n\n    /**\n  * Sends an unpublish brand tracking event\n  * @param {string} brandId Id of unpublished brand\n  */\n    sendUnpublishBrandOmegaEvent(brandId) {\n        const event = {\n            applicationName: APP_NAME,\n            eventData: {\n                feature: FEATURE,\n                action: Actions.click,\n                widget: {\n                    name: 'unpublish-brand-dialog',\n                    type: 'dialog',\n                },\n                element: `unpublish-button`,\n                elementId: `unpublish-button-id`,\n                type: ElementTypes.button,\n            },\n            attributes: {\n                brandId,\n            }\n        };\n        trackingEvent(event);\n    }\n}\n\nexport default new OmegaMetrics();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { translate } from 'app/js/managers/translationManager';\nimport * as LibraryUtils from 'app/js/utils/libraryUtils';\nimport { isInBrandOneUpView, isBrandEditable } from 'app/js/utils/brandUtils';\nimport metrics from 'app/js/interface/metrics';\nimport OmegaMetrics from 'app/js/interface/omegaMetrics';\nimport floodgateManager from '../managers/floodgateManager';\nimport environment from 'app/js/environment';\nimport { BaseState } from 'app/js/state/BaseState';\nimport { inviteOrganization, removeOrganization } from 'app/js/interface/adobeInvitationsRest';\nimport appState from 'app/js/appState';\nimport configuration from 'app/js/config/configuration';\nimport linkManager from 'app/js/managers/linkManager';\n\n/**\n * Handles stateful brand actions (GenStudio)\n */\nexport class BrandActions extends BaseState {\n\n    /**\n     * Opens the rename dialog\n     * @param {LibraryModel} brand\n     * @param {string} newName\n     */\n    rename(brand, newName) {\n        metrics.reportEvent('Operations', 'brand', 'click', 'rename', {}, brand);\n        if (floodgateManager.isBrandLifecycleEnabled() && newName) {\n            brand.name = newName;\n            return brand;\n        }\n        this.context.dialogManager.openDialog('renameLibrary', { library: brand });\n    }\n\n    /**\n     * Opens invite sharesheet (assumes environment.showShareSheet is defined, no fallback supplied)\n     * @param {LibraryModel} brand\n     * @param {boolean} isHeader\n     */\n    invite(brand, isHeader = false) {\n        metrics.reportEvent('Library Operations', 'Collaboration', 'click', 'invite', { content: { category: isHeader ? 'Header' : 'List' } }, brand);\n        environment.showShareSheet?.(brand, 'invite');\n    }\n\n    /**\n     * get actions available for the given brand\n     * @param {LibraryModel} brand\n     * @returns {Array} of menu items\n     */\n    getBrandActions(brand) {\n        // For GenStudio, we only want to allow brand creators to run actions on their brands.\n        if (!environment.isBrandCreator && floodgateManager.isBrandLifecycleEnabled()) {return []; }\n\n        const collaborationType = brand.collaboration || (LibraryUtils.isPublicLibrary(brand) ? 'bookmarked' : 'private'); // shouldn't have public brands, but just in case\n        const canInvite = brand.isWritable && !brand.toolkitId && this.context.libraryManager.isSharingEnabled && !floodgateManager.isBrandLifecycleEnabled();\n        const canLeave = !LibraryUtils.isIncomingApprovedBrandLibrary(brand) && !LibraryUtils.isTeamLibrary(brand) && LibraryUtils.isSharedWithMe(brand) && !brand.toolkitId;\n        const canDelete = !brand.isDocumentAssets && LibraryUtils.isLibraryDeletable(brand);\n        const canEdit = isBrandEditable(brand) && !isInBrandOneUpView(environment.brandLocation);\n        const canUnpublish = floodgateManager.isBrandLifecycleEnabled() && (brand.publishedTo || brand.publishedFrom);\n\n        return [\n            canInvite && {\n                id: 'invite',\n                label: translate('DL_FLYOUT_COLLABORATE'),\n                onClick: () => this.invite(brand, false),\n                enableMenu: true,\n                description: translate('DL_FLYOUT_COLLABORATE_DESCRIPTION'),\n                icon: 'Invite',\n                hideIcon: false\n            },\n            canInvite && {\n                id: 'shareDivider',\n                divider: true,\n            },\n            canEdit && {\n                id: 'edit',\n                label: translate('DL_EDIT_ITEM'),\n                onClick: () => this.editBrand(brand),\n                enableMenu: true,\n                icon: 'Edit',\n                hideIcon: false\n            },\n            canUnpublish && {\n                id: 'unpublish',\n                label: translate('DL_UNPUBLISH'),\n                enableMenu: true,\n                onClick: () => this.context.dialogManager.openDialog('publishBrand', { brand, needsReview: brand?.needsReview, action: 'unpublish' }),\n                icon: 'PublishRemove',\n                hideIcon: false,\n            },\n            !floodgateManager.isBrandLifecycleEnabled() && LibraryUtils.isLibraryRenameable(brand) && {\n                id: 'rename',\n                label: translate('DL_RENAME'),\n                enableMenu: true,\n                onClick: () => this.rename(brand),\n                icon: 'Rename',\n                hideIcon: false\n            },\n            canLeave && {\n                id: 'leave',\n                label: collaborationType === 'bookmarked' ? 'DL_REMOVE_FROM_YOUR_BRANDS' : translate('DL_LEAVE'),\n                enableMenu: true,\n                onClick: () => this.context.dialogManager.openDialog('deleteLibrary', { library: brand }),\n                destructive: true,\n                icon: 'Leave',\n                hideIcon: false\n            },\n            canDelete && {\n                id: 'delete',\n                label: translate('DL_DELETE'),\n                enableMenu: true,\n                onClick: () => this.context.dialogManager.openDialog('deleteLibrary', { library: brand }),\n                destructive: true,\n                icon: 'Delete',\n                hideIcon: false\n            }\n        ].filter(x => x);\n    }\n\n    /**\n     * Publish a brand\n     * @param {LibraryModel} brand\n     * @param {string} [successToastMessage] message to display in a success toast.\n     */\n    async publishBrand(brand, successToastMessage) {\n        if (floodgateManager.isBrandLifecycleEnabled()) {\n            try {\n                // Wait for the brand to be committed before publishing, since then it will have an assetId.\n                await brand.committed;\n\n                // This is a temporary operation to update brand role on app metadata until Melville maintains brand roles in the right location themselves\n                const resolvedBrand = await linkManager.getAssetWithCloudID(brand.assetId);\n                await resolvedBrand.patchAppMetadata([ {\n                    op: 'add',\n                    path: '/library:roles',\n                    value: brand.roles\n                } ]);\n\n                await appState.libraryManager.publishBrand(brand);\n\n                await new Promise((resolve) => {\n                    // Another temporary workaround to get the publish workflow to work --\n                    // Since we don't get the publishedTo data from the publishBrand response, we need to listen for the change event on the appMetadata\n                    resolvedBrand.appMetadata.once('change', () => {\n                        const publishedTo = resolvedBrand.appMetadata.data?.['brand:publishedTo'];\n\n                        // Load the brand, ensuring that it's app metadata is up to date\n                        brand.load().then(() => {\n                            // Navigate to the published brand\n                            if (publishedTo) {\n                                environment.navigateToLibrary({ ...brand, id: publishedTo['repo:assetId'] });\n                            }\n\n                            if (successToastMessage) {\n                                this.context.toastManager.openToast('message', { variant: 'success', message: translate(successToastMessage) });\n                            }\n                            metrics.reportPublishBrand(brand);\n                            OmegaMetrics.sendPublishBrandOmegaEvent(brand.id);\n                            resolve();\n                        });\n                    });\n                }).catch(err => {\n                    throw err;\n                });\n\n                return 1;\n\n            } catch (err) {\n                this.context.toastManager.openToast('message', { variant: 'error', message: translate('BRAND_PUBLISH_ERROR_TOAST') });\n                metrics.reportPublishBrand(brand, {\n                    'event.subtype': 'error',\n                    'event.error_code': err?.statusCode,\n                    'event.error_desc': err?.message\n                });\n                return 0;\n            }\n        }\n\n        return inviteOrganization(appState.libraryManager.userId, brand.assetId)\n            .then((response) => {\n                const collaborator = response.collaborators[0];\n                if (collaborator && collaborator.statusCode.toString().startsWith('2')) {\n                    brand.roles = [ ...brand.roles, { type: configuration.ROLE_VERIFIED } ];\n                    if (successToastMessage) {\n                        this.context.toastManager.openToast('message', { variant: 'success', message: translate(successToastMessage) });\n                    }\n                    metrics.reportPublishBrand(brand);\n                    OmegaMetrics.sendPublishBrandOmegaEvent(brand.id);\n                    return 1;\n                } else if (collaborator && collaborator.statusCode.toString().startsWith('4')) {\n                    this.context.toastManager.openToast('message', {\n                        variant: 'error',\n                        message: `${translate('DL_GENERIC_MANAGER_DIALOG_ERROR')} ${collaborator.statusCode}: ${collaborator.statusText}`,\n                    });\n                    metrics.reportPublishBrand(brand, {\n                        'event.subtype': 'error',\n                        'event.error_code': collaborator.statusCode,\n                        'event.error_desc': collaborator.statusText\n                    });\n                    return 0;\n                }\n            })\n            .catch((err) => {\n                this.context.toastManager.openToast('message', { variant: 'error', message: err?.message || translate('DL_GENERIC_MANAGER_DIALOG_ERROR') });\n                metrics.reportPublishBrand(brand, {\n                    'event.subtype': 'error',\n                    'event.error_code': err?.statusCode,\n                    'event.error_desc': err?.message\n                });\n                return 0;\n            });\n    }\n\n    /**\n     * Unpublish a brand (M3 feature)\n     * @param {LibraryModel} brand\n     */\n    async unpublishBrandM3(brand) {\n        const draftBrandId = brand.publishedFrom || brand.assetId;\n        try {\n            const draftBrand = await linkManager.getAssetWithCloudID(draftBrandId);\n            await appState.libraryManager.unpublishBrand(brand);\n\n            return new Promise((resolve) => {\n                // A temporary workaround to get the unpublish workflow to work\n                // Since we don't get the publishedTo data from the unpublishBrand response, we need to listen for the change event on the appMetadata\n                draftBrand.appMetadata.once('change', () => {\n                    const publishedTo = draftBrand.appMetadata.data?.['brand:publishedTo'];\n\n                    if (!publishedTo && brand.publishedFrom && isInBrandOneUpView(environment.brandLocation)) {\n                        environment.navigateToLibrary({ ...brand, id: brand.publishedFrom });\n                    }\n\n                    this.context.toastManager.openToast('message', { variant: 'success', message: translate('BRAND_UNPUBLISHED_SUCCESS_TOAST') });\n\n                    metrics.reportUnpublishBrand(brand);\n                    OmegaMetrics.sendUnpublishBrandOmegaEvent(brand.id);\n                    resolve(1);\n                });\n            });\n\n        } catch (err) {\n            this.context.toastManager.openToast('message', { variant: 'error', message: translate('BRAND_UNPUBLISH_ERROR_TOAST') });\n            metrics.reportUnpublishBrand(brand, {\n                'event.subtype': 'error',\n                'event.error_code': err?.status,\n                'event.error_desc': err?.message\n            });\n            return 0;\n        }\n    }\n\n    /**\n     * Unpublish a brand\n     * @param {LibraryModel} brand\n     */\n    async unpublishBrand(brand) {\n        // Perform M3 publish if brand lifecycle is enabled\n        if (floodgateManager.isBrandLifecycleEnabled() && (brand.publishedTo || brand.publishedFrom)) {\n            return this.unpublishBrandM3(brand);\n        }\n        return removeOrganization(appState.libraryManager.userId, brand.assetId).then((response) => {\n            const collaborator = response.collaborators[0];\n            if (collaborator && collaborator.statusCode.toString().startsWith('2')) {\n                brand.roles = brand.roles.filter(role => role.type !== configuration.ROLE_VERIFIED);\n                this.context.toastManager.openToast('message', { variant: 'success', message: translate('BRAND_UNPUBLISHED_SUCCESS_TOAST_M2') });\n                metrics.reportUnpublishBrand(brand);\n                OmegaMetrics.sendUnpublishBrandOmegaEvent(brand.id);\n                return 1;\n            } else if (collaborator && collaborator.statusCode.toString().startsWith('4')) {\n                this.context.toastManager.openToast('message', {\n                    variant: 'error',\n                    message: `${translate('DL_GENERIC_MANAGER_DIALOG_ERROR')} ${collaborator.statusCode}: ${collaborator.statusText}`\n                });\n                metrics.reportUnpublishBrand(brand, {\n                    'event.subtype': 'error',\n                    'event.error_code': collaborator.statusCode,\n                    'event.error_desc': collaborator.statusText\n                });\n                return 0;\n            }\n        }).catch((err) => {\n            this.context.toastManager.openToast('message', { variant: 'error', message: err?.message || translate('DL_GENERIC_MANAGER_DIALOG_ERROR') });\n            metrics.reportUnpublishBrand(brand, {\n                'event.subtype': 'error',\n                'event.error_code': err?.statusCode,\n                'event.error_desc': err?.message\n            });\n            return 0;\n        });\n    }\n\n    /**\n     * Edit a brand.\n     * @param {LibraryModel} brand\n     */\n    async editBrand(brand) {\n        // First, navigate from the Published view to the Draft/Root version of the brand\n        if (brand.publishedFrom) {\n            environment.navigateToLibrary({ ...brand, id: brand.publishedFrom });\n        }\n    }\n\n    /**\n     * Exit draft mode of a brand and show the published brand.\n     * @param {LibraryModel} brand\n     */\n    async closeDraft(brand) {\n        // Close the draft and show the last published brand artifact\n        if (brand.publishedTo) {\n            environment.navigateToLibrary({ ...brand, id: brand.publishedTo });\n        }\n    }\n\n    /**\n     * Mutates a library to give it the Brand role\n     *\n     * @param {string} library\n     */\n    brandLibrary(library) {\n        // If/when we support a library having multiple roles this will have to change, but it's fine for now.\n        library.roles = [ { type: configuration.ROLE_TYPE_BRAND } ];\n    }\n\n    /**\n     * Mutates a library to remove its Brand role\n     *\n     * @param {string} library\n     */\n    unbrandLibrary(library) {\n        // If/when we support a library having multiple roles this will have to change, but it's fine for now.\n        library.roles = [];\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport metrics from 'app/js/interface/metrics';\nimport { BaseState } from 'app/js/state/BaseState';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport groupSelectionState from 'app/js/state/groupSelectionState';\nimport { createGroup, addElementsToGroup } from 'app/js/utils/libraryUtils';\nimport { createSubgroup, minimumCommonAncestor } from 'app/js/utils/groupUtils';\n\n/**\n * Handles stateful group actions.\n */\nexport class GroupActions extends BaseState {\n\n    /**\n     * Create a group based on the passed in items array, following the common ancestor rules in nested groups\n     * @param {Group[] | Element[]} items the items you want to group together\n     *\n    */\n    createGroupFromSet(items) {\n        // this action should not be possible while searching across all libraries, but just in case\n        if (this.context.viewState.isLibrariesSearchMode()) {\n            return;\n        }\n        const groups = items.length && items[0].isGroup ? items : [];\n        // Fallback to current library if creating empty\n        const library = items.length && items[0].library || this.context.libraryManager.currentLibrary;\n        if (this.context.viewState.viewByState !== 'group') {\n            this.context.viewState.setViewByState('group');\n        }\n\n        if (this.context.viewState.viewByState === 'group') {\n            library.beginOperation();\n            let newGroup;\n            // find all the groups whose parents are not in the selection\n            const highestSelected = groups.filter(group =>\n                !group.parent || (group.parent && !groups.includes(group.parent))\n            );\n            // if there is only one highest selected group, we just create a subgroup and move on\n            if (highestSelected && highestSelected.length === 1) {\n                newGroup = createSubgroup(highestSelected[0]);\n            } else {\n                const closestCommon = minimumCommonAncestor(items);\n                // if selection has no parents to use for a subgroup, create one at top level\n                newGroup = (!closestCommon || closestCommon === configuration.UNGROUPED_GROUP) ? createGroup(library) : createSubgroup(closestCommon);\n                if (groups.length >= 1) {\n                    // groups whose parents are not in the set are considered 'top level' of this selection\n                    // we only have to reassign these groups to have the new ancestor, their subgroups will follow\n                    highestSelected.forEach(group => group.parent = newGroup);\n                } else {\n                    // if no groups, then we can assume items are all elements\n                    addElementsToGroup(items, newGroup);\n                    metrics.reportEvent('Element Operations', 'Element', 'click', 'add-to-group', {\n                        event: { value: 'agg', count: items.length },\n                        content: { category: 'Click' }\n                    }, library);\n                    metrics.setExtraEventMetrics('updateElement', { subtype: 'add-to-group', content: { category: 'Click' } });\n                }\n            }\n            library.endOperation();\n            this.context.viewState.clearAllSelections();\n            groupSelectionState.setSelection(newGroup);\n            // If we were searching, reset the view mode so we can see the new group:\n            this.context.viewState.resetMode();\n\n            this._onNewGroup(newGroup);\n        }\n    }\n\n    _onNewGroup(newGroup) {\n        // Scroll to and highlight the default group name for renaming\n        elementSelectionState.revealGroup(newGroup);\n        // groups in both tree and path view should get the path view edit experience\n        if (!configuration.currentProduct.config.disableEditPathOperation) {\n            this.context.viewManager.startEditPath(newGroup, true);\n        } else {\n            this.context.viewManager.startRename(newGroup);\n        }\n    }\n\n    /**\n     * Creates a subgroup under the given group, reveals it in the panel and triggers rename/edit path on it.\n     * @param {Group} parentGroup\n     */\n    createSubgroup(parentGroup) {\n        const newGroup = createSubgroup(parentGroup);\n        this._onNewGroup(newGroup);\n        return newGroup;\n    }\n}\n\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport dialogManager from 'app/js/managers/dialogManager';\nimport { ViewManager } from 'app/js/managers/viewManager';\nimport toastManager from 'app/js/managers/toastManager';\nimport viewState from 'app/js/state/viewState';\nimport { LibraryActions } from 'app/js/utils/LibraryActions';\nimport { BrandActions } from 'app/js/utils/BrandActions';\nimport { DocumentAssetsActions } from 'app/js/models/documentAssets/DocumentAssetsActions';\nimport { GroupActions } from 'app/js/utils/GroupActions';\nimport librariesDialogs from 'app/js/managers/utils/librariesDialogs';\nimport { BaseUIState } from './BaseUIState';\n\n/**\n * Stores all UI State of the Libraries Panel.\n * A PanelState instance should be given as the value for a LibrariesContext provider in a Panel UI.\n */\nexport class PanelState extends BaseUIState {\n\n    constructor(context) {\n        super(context);\n\n        // TODO: remove these overrides when we get rid of the singletons.\n        // Also, use a common base class with the ManagerViewStore.\n        this.dialogManager = dialogManager;\n        this.viewManager = new ViewManager(this);\n        this.toastManager = toastManager;\n        this.viewState = viewState;\n        this.libraryActions = new LibraryActions(this);\n        this.brandActions = new BrandActions(this);\n        this.documentActions = new DocumentAssetsActions(this);\n        this.groupActions = new GroupActions(this);\n    }\n\n    init() {\n        this.dialogManager.init(librariesDialogs);\n        this.viewState.init();\n    }\n\n    reset() {\n        // Reset the panel to its initial state.\n        this.dialogManager.closeDialog();\n        this.toastManager.closeToast();\n        this.viewState.setSearchText('');\n        this.viewManager.stopRename();\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport libraryManager from 'app/js/managers/libraryManager';\nimport { ManagerState } from 'app/js/state/ManagerState';\nimport { PanelState } from 'app/js/state/PanelState';\nimport { BaseState } from 'app/js/state/BaseState';\n\n/**\n * The root application state.\n * Expose in BaseUIState any global state that all branches should share.\n */\nexport class AppState extends BaseState {\n\n    constructor() {\n        super();\n        // Add all shared state to a main state branch of the application\n        this.libraryManager = libraryManager;\n        // Create separate sub-state branches for each UI.\n        // Note we grant access to the main context by passing it down to each branch.\n        this.panel = new PanelState(this);\n        this.manager = new ManagerState(this);\n    }\n\n    init() {\n        this.panel.init();\n        this.manager.init();\n    }\n\n    reset() {\n        this.panel.reset();\n        this.manager.reset();\n    }\n}\n\nexport default new AppState();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport Icon from 'app/js/components/Icon';\nimport viewState from 'app/js/state/viewState';\nimport { translate } from 'app/js/managers/translationManager';\nimport classNames from 'classnames';\nimport { getClosestFocusedAncestor } from 'app/js/utils/DOMUtils';\nimport BaseDropdown from 'app/js/components/panel-header/BaseDropdown';\nimport configuration from 'app/js/config/configuration';\nimport Button from 'app/js/components/Button';\nimport OverlayState from 'app/js/components/utils/OverlayState';\nimport floodgateManager from 'app/js/managers/floodgateManager';\nimport environment from 'app/js/environment';\n\n@observer\nexport default class LibraryListFilterButton extends React.Component {\n\n    static defaultProps = {\n        onFilterChange: () => {},\n        disabledFilters: [],\n        disabled: false\n    };\n\n    static propTypes = {\n        onFilterChange: PropTypes.func,\n        disabledFilters: PropTypes.arrayOf(PropTypes.string),\n        disabled: PropTypes.bool\n    }\n    overlayState = new OverlayState({\n        ignoreScrollEvents: true,\n        ignoreFocus: true\n    });\n\n    @computed get currentLibrariesFilter() {\n        return viewState.currentLibrariesFilter;\n    }\n\n    get filterData() {\n        const filterOptions = viewState.getLibraryListFilterOptions().map(option => {\n            if (this.props.disabledFilters.includes(option)) {\n                return null;\n            }\n\n            const filterItem = { id: option };\n\n            filterItem.label = translate(`DL_LIBRARY_LIST_FILTER_${option.toUpperCase()}`);\n\n            filterItem.isSelected = this.currentLibrariesFilter === option;\n            filterItem.key = option;\n\n            filterItem.onClick = () => {\n                viewState.setCurrentLibrariesFilter(option);\n                this.props.onFilterChange();\n            };\n\n            return filterItem;\n        }).filter(item => item);\n\n        const titleItem = {\n            label: translate('DL_LIBRARY_LIST_FILTER_BY'),\n            isTitle: true,\n            onClick: () => {},\n            id: 'title'\n        };\n\n        return [ titleItem ].concat(filterOptions);\n    }\n\n    handleFocusVisibility = (event) => {\n        const node = getClosestFocusedAncestor(event);\n        node && node.blur();\n    }\n\n    handleClick = () => {\n        this.overlayState.toggleOverlay();\n    }\n\n    setCustomLabelRef = (ref) => { this.customLabelRef = ref; };\n    @computed get labelIcon() {\n        const height = configuration.currentProduct.config.iconHeight || 16;\n        const width = configuration.currentProduct.config.iconWidth || 16;\n        const isBrands = configuration.currentProduct.isExpandedBrandsView?.();\n        return (\n            <div ref={ this.setCustomLabelRef }>\n                <Button selected={ this.overlayState.isOpen } quiet variant=\"action\" data-test-id=\"library-list-filter-button\" disabled={ this.props.disabled }\n                    aria-label={translate(isBrands ? 'DL_LIBRARY_LIST_FILTER_BRANDS' : 'DL_LIBRARY_LIST_FILTER_LIBS')} className={classNames('view-toggle-button', { 'is-disabled': this.props.disabled, 'selected': this.overlayState.isOpen })} onClick={this.handleClick}\n                >\n                    <Icon id={ 'Filter' } data-test-id=\"panel-dropdown-icon\" height={ height } width={ width } />\n                    { this.currentLibrariesFilter !== 'all' && <div className=\"filter-applied-badge\" data-test-id=\"library-list-filter-button-badge\"/> }\n                </Button>\n            </div>\n        );\n    }\n\n    render() {\n        const isBrands = configuration.currentProduct.isExpandedBrandsView?.();\n        const hideFilters = floodgateManager.hasLoaded() && floodgateManager.isBrandLifecycleEnabled() && !environment.isBrandCreator;\n\n        if (hideFilters) {\n            return null;\n        }\n\n        return <BaseDropdown\n            data-test-id=\"filter-libraries-dropdown\"\n            tooltip={translate(isBrands ? 'DL_LIBRARY_LIST_FILTER_BRANDS' : 'DL_LIBRARY_LIST_FILTER_LIBS')}\n            data={this.filterData}\n            className={'panel-select-library-filter'}\n            type=\"filter\"\n            currentLabel={this.labelIcon}\n            locationBasedOnLabel={ true }\n            customLabelRef = { this.customLabelRef }/>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport viewState from 'app/js/state/viewState';\nimport { translate } from 'app/js/managers/translationManager';\nimport { measureTextHeight } from 'app/js/utils/DOMUtils';\nimport metrics from 'app/js/interface/metrics';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport configuration from 'app/js/config/configuration';\n\nconst MESSAGE_MARGIN = 36; //Make sure this value matches $panel-contents-bottom-message-margin in _panelView.scss\n\n// TODO: Consider combining (esp. CSS) with DiscoverLibrariesMessage\nexport default class SearchOptionsMessage extends React.Component {\n\n    static defaultProps = {\n        hidePromptText: false\n    };\n\n    static propTypes = {\n        hidePromptText: PropTypes.bool\n    };\n\n    static getHeight(width) {\n        const titleHeight = measureTextHeight(translate('DL_SEARCH_SCOPE_SUGGESTION_TITLE'), 'panel-contents-bottom-message-text', width);\n        const allLibrariesLinkHeight = measureTextHeight(translate('DL_SEARCH_SCOPE_SUGGESTION_ALL_LIBRARIES'), 'panel-contents-bottom-message-link', width);\n        const stockLinkHeight = !viewState.isDocumentSearchMode() && measureTextHeight(translate('DL_SEARCH_SCOPE_SUGGESTION_STOCK'), 'panel-contents-bottom-message-link', width) || 0;\n        return titleHeight + allLibrariesLinkHeight + stockLinkHeight + (MESSAGE_MARGIN * 2);\n    }\n\n    onStockSearchClick = () => {\n        metrics.reportEvent('Search', 'Search', 'click', 'try-stock', { ui: { filter: viewState.getSearchType() } });\n        viewState.setSearchType('stock');\n    }\n\n    onLibrariesSearchClick = () => {\n        metrics.reportEvent('Search', 'Search', 'click', 'try-all-libraries', { ui: { filter: viewState.getSearchType() } });\n        viewState.setSearchType('libraries');\n    }\n\n    get searchStockLink() {\n        if (configuration.currentProduct.config.disableStockSearch || viewState.isDocumentSearchType() || viewState.isStockSearchMode()) {\n            return;\n        }\n        return <div className=\"panel-contents-bottom-message-link\" data-test-id=\"search-result-bottom-message-stock-search\" onClick={ this.onStockSearchClick }>{ translate('DL_SEARCH_SCOPE_SUGGESTION_STOCK') }</div>;\n    }\n\n    render() {\n        if (viewState.isLibrariesSearchMode() || libraryManager.disableCCLibraries || configuration.currentProduct.config.disableSearchSourceSelection) {\n            return null;\n        }\n        return <div className=\"panel-contents-bottom-message\" data-test-id=\"search-result-bottom-message\">\n            { !this.props.hidePromptText && <div className=\"panel-contents-bottom-message-text\" data-test-id=\"search-result-bottom-message-title\">{ translate('DL_SEARCH_SCOPE_SUGGESTION_TITLE') }</div> }\n            { !configuration.currentProduct.config.disableAllLibrariesElementSearch && <div className=\"panel-contents-bottom-message-link\" data-test-id=\"search-result-bottom-message-libraries-search\"\n                onClick={ this.onLibrariesSearchClick }>{ translate('DL_SEARCH_SCOPE_SUGGESTION_ALL_LIBRARIES') }</div> }\n            { this.searchStockLink }\n        </div>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { observable } from 'mobx';\nimport menuManager from 'app/js/managers/menuManager';\nimport viewState from 'app/js/state/viewState';\nimport { isEventWithin } from 'app/js/utils/DOMUtils';\nimport environment from 'app/js/environment';\n\n/**\n * Utility class for handling the visibility of a non-modal overlay on the panel - for example, menu popups (library select,\n * view switcher, add menu etc), and other popovers that don't prevent interactivity with the rest of the panel when open.\n *\n * We have a common behaviour for such overlays, in that if you click outside, or scroll/resize the panel, click the flyout\n * menu, or drag a file from the desktop, the overlay should be dismissed. To avoid having duplicate code in each component that displays an overlay or menu,\n * you should use an instance of OverlayState to manage the open state (just bind to `overlayState.isOpen`).\n *\n * Note that you should setup a `ref={ overlayState.setParentElement }` on the overlay itself, to prevent dismissing it\n * when the user clicks _inside_ the overlay/menu.\n *\n * Note that we attach listeners to the window, outside of the React synthetic event system, because React doesn't have an API\n * for global event handlers. (Using `context` may be an alternative.) This makes testing a bit difficult. See BaseToast.spec.js for an example.\n */\nexport default class OverlayState {\n\n    @observable _isOpen = false;\n    _prevDimensions = null;\n\n    /**\n     * You can pass in the following options:\n     * - ignoreScrollEvents: If true, will not dismiss the overlay on a scroll event (which it does by default).\n     * - ignoreResizeEvents: If true, will not dismiss the overlay on a resize event (which it does by default).\n     * - ignoreViewMode: If true, will not dismiss the overlay when view mode changes (which it does by default).\n     * - isOpen: If true, will initialize the overlay state in the open mode (false by default)\n     * - onOpen: Callback when the overlay state is opened.\n     * - onClose: Callback when the overlay state is closed.\n     * - ignoreEscape: If true, will not dismiss the overlay on a Escape key press event (which it does by default).\n     *\n     * @param {Object} [options]\n     */\n    constructor(options = {}) {\n        this._options = options;\n        this._hideEvent = options.hideEvent || 'click';\n        if (options.isOpen) {\n            // Open the overlay state initially if requested\n            this._openOverlay();\n        }\n    }\n\n    /**\n     * To detect if the overlay loses focus (during keyboard navigation), we need to listen for the window gaining focus.\n     * This event should be 'focusin', but it doesn't trigger properly from the shadow DOM (in CCD), so we use keyup instead in that case.\n     */\n    get _focusEvent() {\n        const parent = this._parentElements && this._parentElements.find(x => x);\n        // any element in the shadowDOM will have a shadowRoot\n        const isInShadowDOM = parent && parent.shadowRoot;\n        return isInShadowDOM ? 'keyup' : 'focusin';\n    }\n\n    /**\n     * If the event came from outside the parent element, hide.\n     * @param {Object} event\n     */\n    _globalHide = (event) => {\n        let fromFlyoutMenu = false;\n        // don't hide an overlay if we know a click event originates from the flyoutMenu\n        if (environment.flyoutMenuClickEvent) {\n            fromFlyoutMenu = event?.type === environment.flyoutMenuClickEvent;\n        }\n        const isEventOutsideParents = !event || !this._parentElements || this._parentElements.every(element => !element || !isEventWithin(event, element));\n        if (!fromFlyoutMenu && isEventOutsideParents) {\n            this.hideOverlay();\n        }\n    }\n\n    /**\n     * Separate hide handler since XD fires a lot of resize events even when not resizing\n     */\n    _resizeHide = () => {\n        // When listening for resize, it is ok if the resize event is outside of the parents\n        if (!environment.hasUXPResizeBug) { this._globalHide(); }\n        const currentDimensions = { width: environment.getPanelWidth(), height: environment.getPanelHeight() };\n        if (this._prevDimensions && JSON.stringify(this._prevDimensions) !== JSON.stringify(currentDimensions)) {\n            this.hideOverlay();\n            return;\n        }\n        this._prevDimensions = currentDimensions;\n    }\n\n    /**\n     * Call this with a reference to the parent element, and/or any elements from which click events are to be ignored.\n     * This is so that we can detect whether the user clicks inside or outside the overlay.\n     * We only change isOpen to false if they click outside the parent element(s).\n     *\n     * We make this an arrow function to make it easier to bind to via `ref={}`.\n     * @param {Object|Object[]} ref - The DOM element reference, or an Array of such.\n     *      Note: This expects that the ref is from an HTML element, not a React custom class component instance,\n     *      since DOMUtils.isEventWithin does not handle react components. So for example a <div> and not a <Button>.\n     */\n    setParentElement = (ref) => {\n        this._parentElements = Array.isArray(ref) ? ref : [ ref ];\n    }\n\n    getParentElement() {\n        return this._parentElements;\n    }\n\n    /**\n     * Whether the menu is open - you should bind to this from the component, to decide whether to display the menu\n     */\n    get isOpen() {\n        return this._isOpen;\n    }\n\n    _hideOnEscapeKey = (event) => {\n        if (event.key === 'Escape') {\n            this._globalHide();\n        }\n    }\n\n    _openOverlay() {\n        if (!this._options.ignoreAllEvents) {\n            if (!this._options.ignoreClickOutsideEvent) { window.addEventListener(this._hideEvent, this._globalHide, true); }\n            window.addEventListener('contextmenu', this._globalHide, true);\n            window.addEventListener('dragstart', this._globalHide, true);\n            menuManager.addListener('flyoutMenuClicked', this._globalHide);\n            menuManager.addListener('flyoutMenuOpened', this._globalHide);\n            environment.addEventListener('canvasClick', this._globalHide);\n            if (!this._options.ignoreResizeEvents) { window.addEventListener('resize', this._resizeHide, true); }\n            if (!this._options.ignoreScrollEvents) { window.addEventListener('scroll', this._globalHide, true); }\n            if (!this._options.ignoreViewState) { viewState.addListener('resetMode', this._doHideOverlay); }\n            if (!this._options.ignoreFocus) { window.addEventListener(this._focusEvent, this._globalHide, true); }\n            if (!this._options.ignoreEscape) { window.addEventListener('keydown', this._hideOnEscapeKey, true); }\n        }\n\n        this._isOpen = true;\n    }\n\n    _doHideOverlay = () => this.hideOverlay();\n\n    /**\n     * Hide the menu (if it's open)\n     */\n    hideOverlay() {\n        if (this.isOpen) {\n            if (!this._options.ignoreAllEvents) {\n                if (!this._options.ignoreClickOutsideEvent) { window.removeEventListener(this._hideEvent, this._globalHide, true); }\n                window.removeEventListener('contextmenu', this._globalHide, true);\n                window.removeEventListener('dragstart', this._globalHide, true);\n                menuManager.removeListener('flyoutMenuClicked', this._globalHide);\n                menuManager.removeListener('flyoutMenuOpened', this._globalHide);\n                environment.removeEventListener('canvasClick', this._globalHide);\n                if (!this._options.ignoreResizeEvents) { window.removeEventListener('resize', this._resizeHide, true); }\n                if (!this._options.ignoreScrollEvents) { window.removeEventListener('scroll', this._globalHide, true); }\n                if (!this._options.ignoreViewState) { viewState.removeListener('resetMode', this._doHideOverlay); }\n                if (!this._options.ignoreFocus) { window.removeEventListener(this._focusEvent, this._globalHide, true); }\n                if (!this._options.ignoreEscape) { window.removeEventListener('keydown', this._hideOnEscapeKey, true); }\n            }\n\n            this._isOpen = false;\n            this._prevDimensions = null;\n            this._options.onClose && this._options.onClose();\n        }\n    }\n\n    /**\n     * Toggle the menu (show it if it's open, hide it if it isn't)\n     */\n    toggleOverlay() {\n        if (this.isOpen) {\n            return this.hideOverlay();\n        }\n\n        this._openOverlay();\n        this._options.onOpen && this._options.onOpen();\n    }\n}\n\n// Specialized sub-classes handle more specific use cases\n\n/**\n * OverlayState to use for workflows - starts in an open state, and handles ending the workflow when a\n * \"hideable\" event happens, unless it changes the workflow state.\n */\nexport class WorkflowOverlayState extends OverlayState {\n    constructor(workflow) {\n        super({ ignoreScrollEvents: true, ignoreViewState: true, isOpen: true, ignoreFocus: true });\n        this._workflow = workflow;\n    }\n\n    hideOverlay() {\n        const state = this._workflow.state;\n        // We could be triggered due to a click on something that will advance the workflow, so don't\n        // close the overlay immediately - instead, allow the click handler to finish and see if the state changed.\n        setTimeout(() => {\n            if (this._workflow.state === state) {\n                this._workflow.endWorkflow();\n                super.hideOverlay();\n            }\n        });\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { observable, computed } from 'mobx';\nimport {\n    restoreGroups,\n    moveGroupElementsToPath,\n    getAllAncestors,\n    getRootGroups,\n    getLibraryCustomGroupsTree,\n    rectifyGroupPathWithExistingTree\n} from 'app/js/utils/groupUtils';\nimport appState from 'app/js/appState';\nimport configuration from 'app/js/config/configuration';\nconst { VIEW_BY_GROUP_MODES } = configuration;\n\nconst LEADING_SPACE = /^ /;\nconst DOUBLE_SPACES = / {2}/;\nconst SINGLE_SPACE = ' ';\nconst TRAILING_SLASH = / \\//;\nconst SLASH = '/';\n\n/**\n * State manager for a group path edit operation.\n */\nexport default class PathViewState {\n\n    // The current group that is having its path edited.\n    @observable.ref _group = null;\n    @observable.ref _inputElement = null;\n    _isNewGroup = false;\n\n    @observable.ref _livePath = [];\n\n    get group() {\n        return this._group;\n    }\n\n    get viewByGroupMode() {\n        // TODO: change this to this.context. when the panel viewState singleton is removed.\n        return appState.panel.viewState.viewByGroupMode;\n    }\n\n    get maxDepth() {\n        if (!this.group) { return 0; }\n        // In tree view, we don't want to show any of the group's ancestors.\n        if (this.viewByGroupMode === VIEW_BY_GROUP_MODES.TREE) { return this._groupPath.length - 1; }\n        return this.group.library.pathViewMaxDepth || 0;\n    }\n\n    /**\n     * Call this with a reference to the input element controlling the content of the path.\n     * This is so that we can populate the autocomplete results and offer focus/key event bindings to the autocomplete view.\n     *\n     * We make this an arrow function to make it easier to bind to via `ref={}`.\n     * @param {Object|Object[]} ref - The DOM element reference.\n     */\n    setInputElement = ref => {\n        this._inputElement = ref;\n    }\n\n    get inputElement() {\n        return this._inputElement;\n    }\n\n    get isNewGroup() {\n        return this._isNewGroup;\n    }\n\n    /**\n     * Returns all groups between this group and the root.\n     */\n    @computed get _groupPath() {\n        return [ ...getAllAncestors(this.group), this.group ];\n    }\n\n    /**\n     * Returns all groups between this group and the highest depth-compliant group.\n     */\n    @computed get groupPath() {\n        if (!this.group) { return []; }\n        return this._groupPath.slice(this.maxDepth);\n    }\n\n    @computed get changesToCommit() {\n        if (!this._commitPath.length) { return false; }\n        if (this._groupPath.length !== this._commitPath.length) { return true; }\n        return !!this._commitPath.filter((group, index) => group !== this._groupPath[index]).length;\n    }\n\n    @computed get _commitPath() {\n        // The path to the group that the assets will be moved to if the edit is committed.\n        // Remove the head if empty.\n        return this.matchedPath.filter(entry => entry.name);\n    }\n\n    @computed get matchedPath() {\n        if (!this.isEditing) { return []; }\n\n        return rectifyGroupPathWithExistingTree(this.group.library, this._groupPath, this.livePath, this.maxDepth);\n    }\n\n    @computed get headIndex() {\n        return this.livePath.length - 1;\n    }\n\n    @computed get head() {\n        return this.livePath[this.headIndex];\n    }\n\n    getAutocompleteResultsForPath(groupPath) {\n        // We'll search for the value of the head in the entry preceding it.\n        const headIndex = groupPath.length - 1;\n        const isEmptyHead = !groupPath.length || !groupPath[headIndex].name.length;\n        // Search the root for the first item.\n        const parent = groupPath[headIndex - 1];\n        // We can only search through actual groups.\n        if (parent && !parent.isGroup) { return []; }\n        if (isEmptyHead) {\n            // If the user deletes the current head, offer all groups at that level.\n            return parent ? parent.children : getRootGroups(this.group.library);\n        }\n        const head = groupPath[headIndex];\n        const namesMatch = (a, b) => a.toLowerCase().includes(b.toLowerCase());\n        if (!parent) {\n            // For root groups, search among all other root groups in the library.\n            return this.group.library.getFilteredGroups(undefined, group => !group.parent && namesMatch(group.name, head.name.trim()));\n        }\n        // No matches if no user input.\n        if (!head.name) { return []; }\n        return parent.getFilteredChildren(group => namesMatch(group.name, head.name.trim()));\n\n    }\n\n    @computed get autocompleteResults() {\n        if (!this.isEditing) { return []; }\n        return this.getAutocompleteResultsForPath(this.matchedPath);\n    }\n\n    get livePath() {\n        return this._livePath;\n    }\n\n    get isEditing() {\n        return !!(this._group && this._livePath.length);\n    }\n\n    startEdit(group, isNewGroup = false) {\n        this._group = group;\n        this._isNewGroup = isNewGroup;\n        this.reset();\n    }\n\n    stopEdit() {\n        this._group = null;\n        this._isNewGroup = false;\n        this._livePath = [];\n        this.setInputElement(null);\n    }\n\n    commitEdit() {\n        if (this.changesToCommit) {\n            // Move assets and subgroups from the current path to the new one.\n            // We always use matching groups when available - in path view, this is very clear to the user because they saw the match come up in the autocomplete;\n            // in tree view, however, there is no autocomplete menu so the user might not notice that they've entered an existing group. To keep the user informed,\n            // we'll show the \"groups with the same name have been merged\" toast and give them the chance to undo the entire operation.\n            const newHead = this._commitPath[this._commitPath.length - 1];\n            const offerUndo = newHead.isGroup && this.viewByGroupMode === configuration.VIEW_BY_GROUP_MODES.TREE;\n            const groupsTree = offerUndo && getLibraryCustomGroupsTree(this.group.library);\n\n            appState.panel.viewState.clearAllSelections();\n            // Commit the change.\n            moveGroupElementsToPath(this.group, this._commitPath, { deleteEmpty: true });\n\n            if (offerUndo) {\n                const undo = () => restoreGroups(groupsTree);\n                appState.panel.toastManager.openToast('undoMergeGroups', { undo });\n            }\n            //TODO: if requested by Sherif, add event to track when a path edit is committed here.\n        }\n        this.stopEdit();\n    }\n\n    reset() {\n        this._livePath = this.groupPath.slice();\n    }\n\n    getNewGroupEntry(name) {\n        return { name: name || '' };\n    }\n\n    _escapeName(name) {\n        // Remove trailing slashes.\n        name = name.replace(TRAILING_SLASH, '');\n        // Allow only one space.\n        name = name.replace(DOUBLE_SPACES, SINGLE_SPACE);\n        // No leading spaces.\n        name = name.replace(LEADING_SPACE, '');\n        // Replace existing slashes in the name with spaces.\n        name = name.replace(SLASH, SINGLE_SPACE);\n        return name;\n    }\n\n    addEntry(name) {\n        this._livePath.push(this.getNewGroupEntry(name));\n        this._livePath = this._livePath.slice();\n    }\n\n    updateEntry(index, name) {\n        // Can't edit constrained groups.\n        if (this._livePath[index].disableEditing) { return; }\n        // If the entry was an actual group, swap it for a new entry.\n        const entry = this._livePath[index].isGroup ? this.getNewGroupEntry() : this._livePath[index];\n\n        // Update the entry.\n        entry.name = this._escapeName(name);\n        this._livePath[index] = entry;\n        // Updating an entry deletes all entries after it.\n        this._livePath = this._livePath.slice(0, index + 1);\n    }\n\n    deleteEntry(index) {\n        const group = this._livePath[index];\n        // Can't delete constrained groups.\n        if (group.disableEditing) { return; }\n        // Deleting an entry deletes all entries after it.\n        this._livePath = this._livePath.slice(0, index);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nexport class Configuration {\n\n    EXTENSION_ID = 'com.adobe.DesignLibraries.angular';\n    MANAGER_EXTENSION_ID = 'com.adobe.cclibraries.manager';\n    STOCK_PURCHASE_EXTENSION_ID = 'com.adobe.stock.panel.licensing-embedded';\n    PROFILE_CHANGE_EVENT_ID = 'com.adobe.csxs.events.ProfileChanged';\n\n    strTempFolder = '';\n    showTooltips = true;\n\n    // Drag-drop related constants\n    DRAGDROP_SOURCE = 'com.adobe.designlibrary';\n    UNGROUPED_GROUP = { id: '*', isGroup: true };\n    MAX_DRAG_DISPLAY_COUNT = 99;\n    // allow a user to drag three times before doing x activity\n    // (such as triggering the popover to switch to Custom Groups)\n    DRAG_COUNT_TRIGGER_MAX = 3;\n    PATH_VIEW_GROUP_SEPARATOR = ' / ';\n\n    // TODO: we shouldn't store functions in the configuration service\n    nativeProxy = undefined;\n\n    SYNC_NOTIFICATIONS_AVAILABLE = false;\n\n    // Populated by calling initApplication()\n    APP_NAME = '';\n    SUPPORTED_PRODUCTS = [];\n    currentProduct = undefined;\n\n    // Share link analytics host type\n    SHARE_LINK_HOST_TYPE_PARAM = 'cclibrariespanel';\n\n    // Help URLs:\n    LEARN_MORE_URL_ROOT = 'https://www.adobe.com/go/cclibraries_help';\n    LIBRARY_MANAGEMENT_URL_ROOT = 'https://www.adobe.com/go/library-management';\n    PATH_VIEW_URL_ROOT = 'https://www.adobe.com/go/learn-more-path-view';\n    SERVICE_ERROR_URL_ROOT = 'https://www.adobe.com/go/process_error';\n    INSTALL_CC_APP_URL_ROOT = 'https://www.adobe.com/go/cc_install';\n    UPDATE_CC_APP_URL_ROOT = 'https://www.adobe.com/go/process_update';\n    UPDATE_CC_LIBRARIES_URL_ROOT = 'https://www.adobe.com/go/panel_update';\n    WHATS_NEW_URL_ROOT = 'https://www.adobe.com/go/cclibs-whats-new';\n    STOCK_LICENSE_INFORMATION_URL_ROOT = 'https://www.adobe.com/go/stock-license-terms';\n    FEEDBACK_URL_ROOT = 'https://www.adobe.com/go/libraries-feedback';\n    TEAM_LIBRARIES_URL_ROOT = 'https://www.adobe.com/go/learn_more_team_libraries';\n    BUSINESS_STORAGE_URL_ROOT = 'https://helpx.adobe.com/enterprise/using/libraries-in-business-storage.html';\n    LEARN_MORE_QUOTA_URL_ROOT = 'https://www.adobe.com/go/learn_more_quota';\n    LEARN_MORE_TEAMS_URL_ROOT = 'https://www.adobe.com/go/cclibraries_teams_learn_more';\n    LEARN_MORE_COLLABORATION_URL_ROOT = 'https://www.adobe.com/go/creative-cloud-collaboration';\n    OFFICE_INSTRUCTIONS_URL_ROOT = 'https://www.adobe.com/go/libraries-microsoft-add-in';\n    DELETE_HELPX_ROOT = 'https://www.adobe.com/go/cc-delete-files'; //'https://helpx.adobe.com/creative-cloud/help/delete-files-permanently.html';\n    PUBLISH_LEARN_MORE_ROOT = 'https://www.adobe.com/go/brandspublishing';\n\n    // XD URLs\n    XD_UI_KITS_ROOT = 'http://www.adobe.com/go/xd_ui_kits_more';\n    XD_MISSING_LINKS_ASK_FOR_ACCESS_LEARN_MORE = 'http://www.adobe.com/go/xd_missinglinks'; // leads to #request-access-to-libraries header\n    XD_MIGRATE_TO_CCLIBRARIES_LEARN_MORE = 'http://www.adobe.com/go/xd_designsys_migration_libraries_learnmore';\n    XD_GROUP_LEARN_MORE = 'https://www.adobe.com/go/xd_pt_pathview';\n\n    LIBRARIES_VIEW_STATES = {\n        GRID: 'grid',\n        LIST: 'list'\n    }\n\n    ELEMENTS_VIEW_STATES = {\n        GRID: 'grid',\n        LIST: 'list'\n    }\n\n    AVAILABLE_HELP_LANGUAGES = {\n        ae: true,\n        br: true,\n        cn: true,\n        cz: true,\n        dk: true,\n        de: true,\n        en: true,\n        es: true,\n        fi: true,\n        fr: true,\n        hu: true,\n        il: true,\n        it: true,\n        jp: true,\n        mx: true,\n        kr: true,\n        no: true,\n        nl: true,\n        pl: true,\n        ru: true,\n        se: true,\n        tr: true,\n        tw: true,\n        ua: true,\n    };\n    DEFAULT_HELP_LANGUAGE = 'en';\n    TEST_LOCALE = 'zz_ZZ'; // Special locale to use for localization testing - not a real language\n\n    // Floodgate related Constants\n    FLOODGATE_CLIENT_ID = 'CCXWeb1'\n    FLOODGATE_URL = 'https://ZZZZ/fg/api/v3/feature'\n\n    // CCLibraries specific floodgate constants\n    FLOODGATE_LIBRARIES_CLIENT_ID = 'CCLibraries';\n\n    // GenStudio/Brands specific floodgate constants\n    FLOODGATE_BRANDS_CLIENT_ID = 'unified_brand_service';\n\n    // Language Map to Assets Web\n    ASSETS_WEB_SPECIALTY_LANGUAGE_MAP = {\n        'zh-CN': 'zh-Hans',\n        'zh-TW': 'zh-Hant',\n    };\n\n    // Creative Cloud website URLs\n    CCWEB_ELEMENT_URL = 'https://ZZZZ/libraries/YYYY/XXXX';\n    CCWEB_LIBRARIES_URL = 'https://ZZZZ/libraries/YYYY';\n    CCWEB_LIBRARY_ARCHIVE_URL = 'https://ZZZZ/assets/libraries/YYYY?filter=archive';\n    CCWEB_LIBRARIES_ARCHIVE_URL = 'https://ZZZZ/deleted';\n    CCWEB_TEAM_LIBRARIES_URL = 'https://www.adobe.com/go/browse-more-libraries';\n    CCWEB_BROWSE_ALL_URL = 'https://ZZZZ/more-libraries';\n    CCWEB_MARKETPLACE_STAGE = 'https://stage.creativecloud.adobe.com/cc/libraries/?locale=ZZZZ';\n    CCWEB_MARKETPLACE_PROD = 'https://creativecloud.adobe.com/cc/libraries/?locale=ZZZZ';\n\n    // Express website URLS\n    EXPRESS_STAGE = 'https://stage.projectx.corp.adobe.com/your-stuff/ZZZZ/XXXX';\n    EXPRESS_PROD = 'https://new.express.adobe.com/your-stuff/ZZZZ/XXXX';\n\n    // The supported route selector for the registered CCWeb components.\n    CCWEB_LIBRARIES_ROUTE_SELECTOR = /^\\/(?:libraries|brands)[/]?([^/]+)?$/;\n\n    // Detect whether a string is an assetId.\n    ASSET_ID_SELECTOR = new RegExp('^urn:aaid:sc:([a-z]{2}.*):[a-z0-9]{8}-([a-z0-9]{4}-){3}[a-z0-9]{12}$', 'i');\n\n    // Detect whether a string is a library id.\n    LIBRARY_ID_SELECTOR = new RegExp('^[a-z0-9]{8}-([a-z0-9]{4}-){3}[a-z0-9]{12}$', 'i'); // for example 06b155c7-d786-47b7-adc9-d2c7fc38831b\n\n    // Public Library Link URLs\n    PUBLIC_LIBRARY_URL = 'https://ZZZZ/link/YYYY';\n\n    // CCE-related constants\n    CREATIVE_CLOUD_ID = 'creative_cloud';\n\n    // Firefly-related constants\n    FIREFLY_RECIPE_TYPE = 'application/vnd.adobe.firefly-recipe+dcx';\n\n    // Constants\n    IMAGE_ELEMENT_TYPE = 'application/vnd.adobe.element.image+dcx';\n    CHANNEL_ELEMENT_TYPE = 'application/vnd.adobe.element.channel+dcx';\n    COLOR_ELEMENT_TYPE = 'application/vnd.adobe.element.color+dcx';\n    COLOR_THEME_ELEMENT_TYPE = 'application/vnd.adobe.element.colortheme+dcx';\n    BRUSH_ELEMENT_TYPE = 'application/vnd.adobe.element.brush+dcx';\n    CHARACTER_STYLE_ELEMENT_TYPE = 'application/vnd.adobe.element.characterstyle+dcx';\n    PARAGRAPH_STYLE_ELEMENT_TYPE = 'application/vnd.adobe.element.paragraphstyle+dcx';\n    FONT_ELEMENT_TYPE = 'application/vnd.adobe.element.font+dcx';\n    LAYER_STYLE_ELEMENT_TYPE = 'application/vnd.adobe.element.layerstyle+dcx';\n    LOOK_ELEMENT_TYPE = 'application/vnd.adobe.element.look+dcx';\n    CAPSULE_ELEMENT_TYPE = 'application/vnd.adobe.element.graphic+dcx';\n    VIDEO_ELEMENT_TYPE = 'application/vnd.adobe.element.video+dcx';\n    THREE_D_ELEMENT_TYPE = 'application/vnd.adobe.element.3d+dcx';\n    LIGHT_ELEMENT_TYPE = 'application/vnd.adobe.element.light+dcx';\n    MATERIAL_ELEMENT_TYPE = 'application/vnd.adobe.element.material+dcx';\n    PATTERN_ELEMENT_TYPE = 'application/vnd.adobe.element.pattern+dcx';\n    TEMPLATE_ELEMENT_TYPE = 'application/vnd.adobe.element.template+dcx';\n    TEXT_ELEMENT_TYPE = 'application/vnd.adobe.element.text+dcx';\n    ANIMATION_ELEMENT_TYPE = 'application/vnd.adobe.element.animation+dcx';\n    LIBRARY_TYPE = 'application/vnd.adobe.library+dcx';\n    GRADIENT_ELEMENT_TYPE = 'application/vnd.adobe.element.gradient+dcx';\n    COMPONENT_ELEMENT_TYPE = 'application/vnd.adobe.element.component+dcx';\n    AUDIO_ELEMENT_TYPE = 'application/vnd.adobe.element.audio+dcx';\n    IMAGE_GUIDELINE_ELEMENT_TYPE = 'application/vnd.adobe.element.imageguideline+dcx';\n\n    // Role type\n    // Note: Check `configuration.currentProduct.config.roleType` for the role type used in the respective app env.\n    ROLE_TYPE_BRAND = 'brand';\n    // Role usage data\n    ROLE_LOGO = 'logo';\n    ROLE_HEADER='header';\n    ROLE_BODY='body';\n    // Role priority data\n    ROLE_PRIORITY_PRIMARY = 'primary';\n    ROLE_PRIORITY_SECONDARY = 'secondary';\n    ROLE_VERIFIED = 'approvedbrand';\n\n    FETCH_COLLABORATIONS_THROTTLE = (1000 * 60 * 30); // 30 min\n    FETCH_INVITATIONS_THROTTLE = (1000 * 60 * 5); // 5 min\n    FETCH_TEAM_LIBS_THROTTLE = (1000 * 60 * 3); // 3 min\n    // 202 = Double the width of the grid-box in _designLibrary_image.scss (to account for high-dpi): 103px - 2px (due to 1px border on each side)\n    IMAGE_THUMBNAIL_SIZE = 202;\n    LOOK_THUMBNAIL_SIZE = this.IMAGE_THUMBNAIL_SIZE;\n    CAPSULE_THUMBNAIL_SIZE = this.IMAGE_THUMBNAIL_SIZE;\n    VIDEO_THUMBNAIL_SIZE = this.IMAGE_THUMBNAIL_SIZE;\n    THREE_D_THUMBNAIL_SIZE = this.IMAGE_THUMBNAIL_SIZE;\n    LIGHT_THUMBNAIL_SIZE = this.IMAGE_THUMBNAIL_SIZE;\n    MATERIAL_THUMBNAIL_SIZE = this.IMAGE_THUMBNAIL_SIZE;\n    BRUSH_THUMBNAIL_SIZE = 124; // TODO: high dpi?\n    CHARACTER_STYLE_THUMBNAIL_SIZE = 104;\n    PARAGRAPH_STYLE_THUMBNAIL_SIZE = this.CHARACTER_STYLE_THUMBNAIL_SIZE;\n    FONT_THUMBNAIL_SIZE = this.CHARACTER_STYLE_THUMBNAIL_SIZE;\n    LAYER_STYLE_THUMBNAIL_SIZE = 108;\n    PATTERN_THUMBNAIL_SIZE = this.IMAGE_THUMBNAIL_SIZE;\n    TEMPLATE_THUMBNAIL_SIZE = this.IMAGE_THUMBNAIL_SIZE;\n    TEXT_THUMBNAIL_SIZE = this.IMAGE_THUMBNAIL_SIZE;\n    ANIMATION_THUMBNAIL_SIZE = this.IMAGE_THUMBNAIL_SIZE;\n    COMPONENT_THUMBNAIL_SIZE = this.IMAGE_THUMBNAIL_SIZE;\n    // TODO  @donohue - after thumbnail image is selected after thumbnail image for audio is selected\n    AUDIO_THUMBNAIL_SIZE = this.IMAGE_THUMBNAIL_SIZE;\n\n    LARGE_THUMBNAIL_SIZE = 400;\n\n    // Max string length for input comes from Repo API spec https://git.corp.adobe.com/pages/caf/api-spec/chapters/syntax.html#asset-name-syntax\n    // 255 - 7 for .cclibc extension\n    MAX_INPUT_STRING_LENGTH = 248;\n    MAX_REMAINING_CHARACTERS_LENGTH = 50;\n\n    // Group view sizes\n    GROUP_GRID_WIDTH = 95;\n    GROUP_GRID_HEIGHT = 60;\n\n    // Storage quota constants\n    QUOTA_WARNING_THRESHOLD = 70;\n\n    BYTE_MULTIPLIER = 1024;\n    MEGABYTE_MULTIPLIER = 1024 * 1024;\n\n    // Upload Constants\n    WARN_EXTENDED_UPLOAD_TIME = 30000;\n\n    // Grid Constants\n    GRID_MINIMUM_BREAKPOINT = 290;\n    GRID_VIEW_BREAKPOINT_SIZE = 110;\n\n    GRID_TYPE_LARGE = 'large';\n    GRID_TYPE_MEDIUM = 'medium';\n    GRID_TYPE_SMALL = 'small';\n    GRID_TYPE_WIDE = 'wide';\n    GRID_TYPE_WIDE_SET_HEIGHT = 54;\n    MAX_CONTEXT_MENU_WIDTH = 200;\n\n    GRID_VIEW_NAME_HEIGHT = 16;\n    EXPANDED_GRID_VIEW_NAME_HEIGHT = 28; // should match css: .cc-libraries-expanded.panel-grid-item-name-container height\n\n    GRID_SIZE_TYPES = [\n        this.GRID_TYPE_LARGE,\n        this.GRID_TYPE_MEDIUM,\n        this.GRID_TYPE_SMALL,\n        this.GRID_TYPE_WIDE\n    ]\n\n    ELEMENT_BACKGROUNDS = {\n        CHECKERED: 'checkered',\n        SOLID: 'solid'\n    }\n\n    THUMBNAIL_RENDERER_DEBOUNCE = 300;\n\n    OPEN_SHARESHEET_TIMEOUT = 10000;\n\n    MAX_LIBRARIES_ONBOARDING = 3; // maximum number of libraries a user can have before we hide onboarding DiscoverMessage\n\n    // List view dimensions\n    get LIST_VIEW_ELEMENT_HEIGHT() {\n        return this.currentProduct.config.listViewElementHeight || 44;\n    }\n    get LIST_VIEW_ELEMENT_THUMBNAIL_HEIGHT() {\n        return this.LIST_VIEW_ELEMENT_HEIGHT - 8; // 36\n    }\n\n    get SCROLLBAR_WIDTH() {\n        return this.currentProduct.config.getScrollBarPadding?.() ?? 16;\n    }\n\n    SUBGROUP_INDENT_PERCENT = .15\n    MAX_SUBGROUP_INDENT = 16;\n\n    // Previews for fonts\n    SHORT_FONT_PREVIEW_TEXT = 'Ag'; // TODO: What about non-roman fonts?\n    DEFAULT_MAX_PREVIEW_FONT_SIZE = 20;\n    DEFAULT_MIN_PREVIEW_FONT_SIZE = 11;\n    DEFAULT_PREVIEW_FONT_SIZE = 12;\n    ONE_UP_ELEMENT_VIEW_MAX_PREVIEW_FONT_SIZE = 60;\n    // These numbers were determined by trying to match the size of live preview text to the size that\n    // text will appear within Font thumbnails in the same views, so that thumbnails and live previews\n    // are close enough to be interchangeable.\n    // Note that expanded views (large grid library contents and mosaic/root view) may have resizable tiles, but these font sizes work across them.\n    LIST_VIEW_PREVIEW_FONT_SIZE = 20;\n    MOSAIC_VIEW_QUARTER_PREVIEW_FONT_SIZE = 45;\n    MOSAIC_VIEW_FULL_PREVIEW_FONT_SIZE = 80;\n    GRID_MEDIUM_PREVIEW_FONT_SIZE = 27;\n    GRID_LARGE_PREVIEW_FONT_SIZE = 45;\n\n    // Libraries Managers CEP events.\n    MANAGER_CEP_EVENTS = {\n        INIT: 'com.adobe.cclibraries.manager.init',\n        CLOSE: 'com.adobe.csxs.events.ExtensionUnloaded',\n        OPEN_DIALOG: 'com.adobe.cclibraries.manager.openDialog'\n    };\n\n    //Recent Search constants\n    RECENT_SEARCH_TIMER = 3000;\n    STORED_RECENT_LIBRARIES_SEARCH_LIMIT = 15;\n    STORED_RECENT_STOCK_SEARCH_LIMIT = 5;\n    STORED_RECENT_SEARCH_DISPLAY_LIMIT = 5;\n    STORED_RECENT_SEARCH_LIBRARIES_KEY = 'libraries';\n    STORED_RECENT_SEARCH_STOCK_KEY = 'stock';\n\n    // Adobe stock related constants\n    STOCK_NAMESPACE = 'adobestock';\n    STOCK_DATA_KEY = 'trackingdata';\n\n    STOCK_CLIENT_ID = 'AdobeStockClient2';\n    STOCK_TARGET_SCOPE = 'AdobeID,openid,creative_cloud,creative_sdk,cc_private,gnav,sao.stock,additional_info.address.mail_to,additional_info.dob,read_organizations,read_pc.stock,read_pc.stock_credits,additional_info.roles,sao.cce_private,account_cluster.read';\n    STOCK_GET_USER_PROFILE_PATH = '/Rest/Libraries/1/Member/Profile?locale=ZZZZ&content_id=YYYY&license=LLLL&format=message_ccx'; // message_ccx used in panel 2.10.0+ to request dynamic html for purchase ext\n    STOCK_LICENSE_PATH = '/Rest/Libraries/1/Content/License?content_id=ZZZZ&license=LLLL';\n    STOCK_METADATA_PATH = '/Rest/Media/1/Files';\n    STOCK_INFO_PATH = '/Rest/Libraries/1/Content/Info?content_id=ZZZZ';\n    STOCK_SEARCH_PATH = '/Search';\n    STOCK_SEARCH_API_PATH = '/Rest/Media/1/Search/Files';\n    STOCK_ABANDON_TRANSACTION_PATH = '/Rest/Libraries/1/Member/Abandon?&state=ZZZZ&content_id=YYYY&license=LLLL';\n    INVITATIONS_COLLABORATIONS_API_PATH = '/api/v4/share';\n    INVITATIONS_CAPABILITIES_API_PATH = '/api/v4/capabilities';\n    INVITATIONS_PENDING_API_PATH = '/api/v4/invitations';\n    INVITATIONS_ACCEPT_API_PATH = '/api/v4/invitations/id';\n\n    STOCK_LICENSE_TYPE_STANDARD = 'Standard';\n    STOCK_LICENSE_TYPE_EXTENDED = 'Extended';\n    STOCK_LICENSE_TYPE_SMALL = 'Standard_M';\n\n    STOCK_IMAGE_LICENSE_TYPE_SMALL = {\n        'label': 'DL_STOCK_LICENSE_TYPE_SMALL',\n        'field': 'Standard_M'\n    };\n\n    STOCK_IMAGE_LICENSE_TYPE_FULL = {\n        'label': 'DL_STOCK_LICENSE_TYPE_FULL',\n        'field': 'Standard'\n    };\n\n    STOCK_IMAGE_LICENSE_TYPES = [\n        this.STOCK_IMAGE_LICENSE_TYPE_FULL,\n        this.STOCK_IMAGE_LICENSE_TYPE_SMALL\n    ];\n\n    STOCK_VIDEO_LICENSE_TYPE_HD = { 'label': 'HD', 'field': 'Video_HD' };\n    STOCK_VIDEO_LICENSE_TYPE_4K = { 'label': '4K', 'field': 'Video_4K' };\n\n    STOCK_VIDEO_LICENSE_TYPES = [\n        this.STOCK_VIDEO_LICENSE_TYPE_4K,\n        this.STOCK_VIDEO_LICENSE_TYPE_HD\n    ];\n\n    STOCK_STATE_PURCHASED = 'purchased';\n    STOCK_STATE_NOT_PURCHASED = 'not_purchased';\n    STOCK_STATE_CANCELLED = 'cancelled';\n\n    STOCK_SEARCH_RESULT_SIZE = 50;\n\n    NOTES_MAX_CHARACTER_COUNT = 130;\n\n    STOCK_SEARCH_TIMEOUT = 30 * 1000;\n\n    STOCK_SIMILARITY_THUMBNAIL_SIZE = 640;\n\n    // Main filters\n    STOCK_SEARCH_OPTION_PHOTO = { 'label': 'DL_STOCK_SEARCH_OPTION_PHOTO', 'id': 'photo', 'param': 'photo' };\n    STOCK_SEARCH_OPTION_ILLUSTRATION = { 'label': 'DL_STOCK_SEARCH_OPTION_ILLUSTRATION', 'id': 'illustration', 'param': 'illustration' };\n    STOCK_SEARCH_OPTION_VECTOR = { 'label': 'DL_STOCK_SEARCH_OPTION_VECTOR', 'id': 'vector', 'param': 'vector' };\n    STOCK_SEARCH_OPTION_VIDEO = { 'label': 'DL_STOCK_SEARCH_OPTION_VIDEO', 'id': 'video', 'param': 'video' };\n    STOCK_SEARCH_OPTION_TEMPLATE = { 'label': 'DL_STOCK_SEARCH_OPTION_TEMPLATE', 'id': 'template', 'param': 'template' };\n    STOCK_SEARCH_OPTION_3D = { 'label': 'DL_STOCK_SEARCH_OPTION_3D', 'id': '3d', 'param': '3d' };\n\n    // Sub filters\n    STOCK_SEARCH_SUB_FILTER_MODEL = { 'label': 'DL_TYPE_3D', 'id': '3d_1', 'param': '3d', 'filterKey': '3d_type_id', 'filterValue': 1, 'isArray': true };\n    STOCK_SEARCH_SUB_FILTER_LIGHT = { 'label': 'DL_TYPE_LIGHT', 'id': '3d_2', 'param': '3d', 'filterKey': '3d_type_id', 'filterValue': 2, 'isArray': true };\n    STOCK_SEARCH_SUB_FILTER_MATERIAL = { 'label': 'DL_TYPE_MATERIAL', 'id': '3d_3', 'param': '3d', 'filterKey': '3d_type_id', 'filterValue': 3, 'isArray': true };\n\n    // Other (non-content-type) filters\n    STOCK_SEARCH_OPTION_PREMIUM = {\n        'label': 'DL_STOCK_SEARCH_OPTION_PREMIUM',\n        'id': 'premium',\n        'filterKey': 'premium',\n        'filterValue': 'true'\n    };\n\n    // List of all stock filters including the sub-filters\n    STOCK_SEARCH_OPTIONS = [\n        this.STOCK_SEARCH_OPTION_PHOTO,\n        this.STOCK_SEARCH_OPTION_ILLUSTRATION,\n        this.STOCK_SEARCH_OPTION_VECTOR,\n        this.STOCK_SEARCH_OPTION_VIDEO,\n        this.STOCK_SEARCH_OPTION_TEMPLATE,\n        this.STOCK_SEARCH_OPTION_3D,\n        this.STOCK_SEARCH_OPTION_PREMIUM,\n        this.STOCK_SEARCH_SUB_FILTER_MODEL,\n        this.STOCK_SEARCH_SUB_FILTER_LIGHT,\n        this.STOCK_SEARCH_SUB_FILTER_MATERIAL\n    ];\n\n    STOCK_SEARCH_UI_OPTIONS = [\n        this.STOCK_SEARCH_OPTION_PHOTO,\n        this.STOCK_SEARCH_OPTION_ILLUSTRATION,\n        this.STOCK_SEARCH_OPTION_VECTOR,\n        this.STOCK_SEARCH_OPTION_VIDEO,\n        this.STOCK_SEARCH_OPTION_TEMPLATE,\n        this.STOCK_SEARCH_OPTION_3D,\n        this.STOCK_SEARCH_OPTION_PREMIUM,\n    ];\n\n    // For supporting product specific templates\n    STOCK_SEARCH_PRODUCT_TEMPLATE_ID_MAP = { 'PHXS': [ 1 ], 'ILST': [ 2 ], 'IDSN': [ 3 ], 'PPRO': [ 5 ] };\n\n    STOCK_SEARCH_PRODUCT_MOGRT_VERSION_MAP = {\n        'PPRO': {\n            '13.1.0': '1.5',\n            '13.0.0': '1.4',\n            '12.0.0': '1.3',\n        }\n    };\n\n    STOCK_CORE_CONTENT_LEVEL_ID = 0; // Normal stock paid content\n    STOCK_FREE_CONTENT_LEVEL_ID = 1; // Free content\n    STOCK_PREMIUM_CONTENT_LEVEL_IDS = [ 2, 3, 4 ]; // Premium content\n\n    STOCK_TEMPLATES_SUPPORTED_PRODUCTS = [ 'PHXS', 'PHXS_UXP', 'ILST', 'IDSN', 'PPRO', 'KBRG' ]; // No Stock templates for other products\n\n    AGC_REPRESENTATION_TYPE = 'application/vnd.adobe.element.agc+json';\n\n    NXD_REPRESENTATION_TYPE = 'application/vnd.adobe.element.nxd+json';\n\n    COLOR_NAMESPACE = 'color';\n    COLOR_DATA_KEY = 'data';\n    COLOR_REPRESENTATION_TYPE = 'application/vnd.adobe.color+json';\n    DEFAULT_SRGB_PROFILE = 'sRGB IEC61966-2.1';\n\n    COLOR_THEME_DATA_KEY = 'data';\n    COLOR_THEME_NAMESPACE = 'colortheme';\n    COLOR_THEME_REPRESENTATION_TYPE = 'application/vnd.adobe.colortheme+json';\n\n    GRADIENT_NAMESPACE = 'gradient';\n    GRADIENT_DATA_KEY = 'data';\n    GRADIENT_REPRESENTATION_TYPE = 'application/vnd.adobe.gradient+json';\n\n    CHARACTER_STYLE_REPRESENTATION = 'application/vnd.adobe.characterstyle+json';\n\n    FONT_NAMESPACE = 'font';\n    FONT_DATA_KEY = 'data';\n    FONT_REPRESENTATION_TYPE = 'application/vnd.adobe.font+json';\n\n    THREE_D_NAMESPACE = '3d';\n    THREE_D_DATA_KEY = 'data';\n\n    TEXT_REPRESENTATION_ID_SNIPPET_TYPE = 'application/vnd.adobe.indesign-idms-text';\n    TEXT_REPRESENTATION_JSON_TYPE = 'application/vnd.adobe.text+json';\n    TEXT_NAMESPACE = 'text';\n    TEXT_DATA_KEY = 'data';\n\n    CAPSULE_DEFINITION_REPRESENTATION_TYPE = 'application/vnd.adobe.graphic+json';\n    CAPSULE_NAMESPACE = 'graphic';\n    CAPSULE_DATA_KEY = 'data';\n\n    VIDEO_NAMESPACE = 'video';\n    AUDIO_NAMESPACE = 'audio';\n\n    // Public links constants\n    PUBLIC_LINK_CLIENT_ID = 'CCXPublicLinks1';\n    PUBLIC_LINK_TARGET_SCOPE = 'AdobeID,openid,gnav,sao.cce_private,sao.ccprivate,creative_cloud,sao.ccpublish,additional_info.roles';\n\n    LIBRARY_SNAPSHOT_EXTENSION = 'cclibs';\n    LIBRARY_CLOUD_EXTENSION = 'cclibc';\n    LIBRARY_ALLOWED_EXTENSIONS = [ this.LIBRARY_SNAPSHOT_EXTENSION, this.LIBRARY_CLOUD_EXTENSION ]\n    // Files allowed for native drop. If you add to this, make sure you add UI info to the fileUtils mimeMap\n    NATIVE_DROP_ALLOWED_FILE_EXTENSIONS = [ 'ai', 'png', 'bmp', 'psd', 'svg', 'gif', 'jpg', 'jpeg', 'tif', 'tiff', 'pdf', 'heic', 'heif', 'dng', 'psdt',\n        'ait', 'indt', 'fla', 'mp4', 'mov', 'wmv', 'mpeg', 'mpg', 'wav', 'aac', 'mp3', 'mp2', 'm4a', 'aiff', 'aif', 'aifc', 'mdl', 'sbsar', 'glb', 'gltf', 'obj', 'dn', 'usdz', 'ibl', 'fbx', 'exr', 'hdr', this.LIBRARY_SNAPSHOT_EXTENSION, this.LIBRARY_CLOUD_EXTENSION ];\n    NATIVE_DROP_FILES_SLOW_PERFORMANCE_THRESHOLD = 500; // Update this field based on performance testing updates\n    NATIVE_DROP_MAX_FILE_COUNT = 1000;\n\n    DEFAULT_ELEMENTS_PER_CATEGORY = 50;\n    SHOW_MORE_STAGGER_INTERVAL = 3;\n    THEME_COLOR_CHANGED_EVENT = 'com.adobe.csxs.events.ThemeColorChanged';\n    THEME_COLOR_CHANGED_EVENT_UXP = 'themechanged';\n\n    CONTEXT_MENUS_ENABLED = true;\n    IS_APP_IN_TOUCH_MODE = false;\n\n    RECENTS_LIST_LIMIT = 5;\n    RECENTS_LIST_LIBRARY_MIN = 8;\n    RECENT_LIBRARY_ID_FLAG = '-recent';\n\n    DEFAULT_TOAST_TIMEOUT = 3000;\n    UNDO_TOAST_TIMEOUT = 5000; // 5 seconds to undo\n    TOAST_FADEOUT = 500; // Matches the 0.5s for .panel-toast.fadeout\n\n    IMPORT_EXPORT_DEFAULT_FOLDER = 'CC Library'; // Need to revisit this again\n\n    // Copying or moving many elements can be slow, so show a toast\n    SLOW_COPY_MOVE_THRESHOLD = 200;\n\n    CONTRAST_THRESHOLD = 10;\n\n    MAX_ONEUP_ELEMENT_CONTEXT_MENU_ITEMS = 30;\n\n    // We throttle updating the add menu on selection/document change events, to avoid\n    // making too many expensive calls if it gets continually triggered\n    // Wait for this time (ms) without any event before updating.\n    SELECTION_CHANGE_THROTTLE = 100;\n\n    // Debounce setting the current section on auto-scroll.\n    // This prevents groups being selected as they're passed by on their way to the target.\n    AUTO_SCROLL_GROUP_SELECT_DEBOUNCE = 300;\n\n    WINDOW_RESIZE_DEBOUNCE = 200;\n\n    // Ingest constants\n    ANALYTICS_PROJECT = 'cclib-panel';\n    ANALYTICS_INGEST_TYPE = 'dunamis';\n    ANALYTICS_MAX_QUEUED_EVENTS = 50;\n    ANALYTICS_DEBOUNCE = 15000;\n\n    DISABLE_CREATE_ELEMENT_METRIC_OPTYPES = [ 'publish' ];\n\n    GROUPS_TREE_CACHE_KEEPALIVE_TIME = 5 * 60 * 1000; // 5 minutes.\n\n    THUMBNAIL_CACHE_KEEPALIVE_TIME = 5 * 60 * 1000; // 5 minutes.\n\n    /*\n     * Order in which the auto groups should be shown, according to the Updated Taxonomy. (Colors on top.)\n     */\n    AUTO_GROUPS_ORDER = [\n        'DL_AUTOGROUP_COLORS',\n        'DL_AUTOGROUP_TYPOGRAPHY',\n        'DL_AUTOGROUP_STYLES',\n        'DL_AUTOGROUP_BRUSHES',\n        'DL_AUTOGROUP_VECTORS',\n        'DL_AUTOGROUP_IMAGES',\n        'DL_AUTOGROUP_MOTION',\n        'DL_AUTOGROUP_3D',\n        'DL_AUTOGROUP_TEMPLATES',\n        'DL_AUTOGROUP_UNKNOWN'\n    ];\n\n    /*\n     * The types of files that can be saved-as\n     */\n    EXPORTABLE_ELEMENT_TYPES = [\n        this.IMAGE_ELEMENT_TYPE,\n        this.ANIMATION_ELEMENT_TYPE,\n        this.VIDEO_ELEMENT_TYPE,\n        // The expectation for export light element is a folder in a specific format.\n        // For the MVP, we're going to go the Assets Web route, and not do light elements for now.\n        // this.LIGHT_ELEMENT_TYPE,\n        this.THREE_D_ELEMENT_TYPE,\n        this.AUDIO_ELEMENT_TYPE,\n    ];\n\n    DRAGOUT_ELEMENT_TYPES = [\n        this.ANIMATION_ELEMENT_TYPE,\n        this.IMAGE_ELEMENT_TYPE,\n        this.TEMPLATE_ELEMENT_TYPE,\n        this.VIDEO_ELEMENT_TYPE,\n        this.THREE_D_ELEMENT_TYPE\n    ];\n\n    TOOLKIT_TYPES = [\n        'photoshop_swatches',\n        'photoshop_brushes',\n        'photoshop_gradients',\n        'photoshop_patterns',\n        'photoshop_styles',\n        'photoshop_shapes'\n    ];\n\n    // Names from MS docs https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file\n    WINDOWS_RESERVED_NAMES = [ 'CON', 'PRN', 'AUX', 'NUL', 'COM1', 'COM2', 'COM3', 'COM4',\n        'COM5', 'COM6', 'COM7', 'COM8', 'COM9', 'LPT1', 'LPT2', 'LPT3', 'LPT4', 'LPT5', 'LPT6', 'LPT7', 'LPT8', 'LPT9' ];\n\n    // Name/rename states for elements, groups, and libraries\n    RENAME_STATES = {\n        VALID: 'VALID',\n        SLASH_ELEMENT: 'SLASH_ELEMENT',\n        SLASH_GROUP: 'SLASH_GROUP',\n        INVALID_CHARACTER: 'INVALID_CHARACTER',\n        INVALID_LIBRARY_PERIOD: 'INVALID_LIBRARY_PERIOD',\n        INVALID_LIBRARY_LENGTH: 'INVALID_LIBRARY_LENGTH',\n        DUPLICATE_LIBRARY: 'DUPLICATE_LIBRARY',\n        DUPLICATE_GROUP: 'DUPLICATE_GROUP',\n    }\n\n    RENAME_STATE_ERROR_MESSAGES = {\n        [`${this.RENAME_STATES.SLASH_ELEMENT}`]: 'DL_EDIT_NAME_INVALID_SLASH',\n        [`${this.RENAME_STATES.SLASH_GROUP}`]: this.currentProduct && this.currentProduct.config.invalidGroupNameSlashMessage || 'DL_GROUP_NAME_INVALID_SLASHES',\n        [`${this.RENAME_STATES.INVALID_CHARACTER}`]: 'DL_LIBRARY_NAME_INVALID',\n        [`${this.RENAME_STATES.DUPLICATE_LIBRARY}`]: 'DL_LIBRARY_NAME_DUPLICATE',\n        [`${this.RENAME_STATES.INVALID_LIBRARY_LENGTH}`]: 'DL_LIBRARY_NAME_REMAINING_CHARACTERS',\n        [`${this.RENAME_STATES.INVALID_LIBRARY_PERIOD}`]: 'DL_LIBRARY_NAME_PERIOD_END',\n        [`${this.RENAME_STATES.DUPLICATE_GROUP}`]: 'DL_GROUP_NAME_DUPLICATE',\n    }\n\n    // Badge and tooltip states for asset links (for both links to backing element or legacy document)\n    ASSET_LINK_STATES = {\n        NORMAL: 'NORMAL',\n        PENDING_UPDATE: 'PENDING_UPDATE',\n        // Element link states\n        MISSING_ELEMENT: 'MISSING_ELEMENT', // Library exists but element does not\n        MISSING_LIBRARY: 'MISSING_LIBRARY', // Library deleted or not accessible\n        NEED_TO_FOLLOW: 'NEED_TO_FOLLOW', // Library inaccessible, but it is a public or team lib and can probably be followed.\n        SYNCING: 'SYNCING', // Library is syncing,\n        PENDING_INVITE: 'PENDING_INVITE', // Library exists but user needs to accept the invite to sync it locally\n        // Legacy Document link states\n        BROKEN: 'BROKEN', // either missing file or asset\n        FILE_MISSING: 'FILE_MISSING', // missing file\n    };\n\n    // XD Document Assets can have link references to cc library elements or documents.\n    // This distinguishes the format of the reference (but not whether the link format is fully deprecated).\n    XD_ASSET_LINK_REFERENCE_TYPES = {\n        CCLIBRARIES_ELEMENT: 'CCLIBRARIES_ELEMENT',\n        LEGACY_CCLIBRARIES_ELEMENT: 'LEGACY_CCLIBRARIES_ELEMENT',\n        LEGACY_DOCUMENT_ASSET: 'LEGACY_DOCUMENT_ASSET',\n        LEGACY_CLOUD_DOCUMENT_ASSET: 'LEGACY_CLOUD_DOCUMENT_ASSET'\n    }\n\n    SAM_LINK_STATES = {\n        NORMAL: 'UpToDate',\n        PENDING_METADATA_UPDATE: 'MetadataOutOfDate',\n        PENDING_UPDATE: 'OutOfDate',\n        RESTRICTED: 'Restricted',\n        DISCARDED: 'Discarded',\n        BROKEN: 'Broken'\n    };\n\n    SAM_PERMISSIONS = {\n        READ: 'Read', // Read-only,\n        WRITE: 'Write', // Read + write,\n        DELETE: 'Delete', // Read + write + delete\n        SHARE: 'Share', // Read + write + share\n        MOVE: 'Move', // Read + write + move\n        RENAME: 'Rename', // Read + write + rename\n        ALL: 'All', // Read + write + delete + share + move + rename\n        ACK: 'Ack', // No access, but can acknowledge existence (allows request access)\n        NONE: 'None', // No access\n        // Legacy permission values\n        EDIT: 'Edit', // Read + write\n        VIEW: 'View', // Read-only\n    };\n\n    // SAM-JS originally only supported a single permission value for each asset.\n    // This was later changed to support multiple combinations of permissions.\n    // As a result, some permissions are now deprecated, but still supported within the Libraries panel and DAP for backwards compatibility.\n    SAM_LEGACY_PERMISSIONS_MAP = {\n        Edit: this.SAM_PERMISSIONS.WRITE,\n        View: this.SAM_PERMISSIONS.READ,\n    };\n\n    // States for the document library\n    DOCUMENT_LIBRARY_STATES = {\n        LOADING: 'LOADING', // Document library is loading\n        NOT_PUBLISHED: 'NOT_PUBLISHED', // Document library is not published\n        PUBLISHED: 'PUBLISHED', // Document library is published and up-to-date\n        PUBLISHING: 'PUBLISHING', // Document library is currently publishing\n        COEDITOR_PUBLISHING: 'COEDITOR_PUBLISHING', // Document library currently being pushed by a coeditor\n        UNPUBLISHED_CHANGES: 'UNPUBLISHED_CHANGES', // Document library is published, but there are pending updates\n        NOT_FOUND: 'NOT_FOUND' // Document library is published, but cannot find the published library because it isn't linked back to the document\n    };\n\n    // Messages used to communicate with host web application for Document Assets and Libraries.\n    // Keep documentation up to date:\n    // https://wiki.corp.adobe.com/display/ccexperience/CC+Libraries+and+Document+Assets+in+CC+web+applications#CCLibrariesandDocumentAssetsinCCwebapplications-APIbetweenDocumentAssetsPanelandFred\n    DOCUMENT_ASSETS_MESSAGES = {\n        RECEIVE_ASSETS: 'ccac.dap.in.notify.assets',\n        RECEIVE_CONFIG: 'ccac.dap.in.notify.config',\n        SEND_UPDATE: 'ccac.dap.out.notify.update'\n    };\n    LIBRARIES_MESSAGES = {\n        APPLY_ELEMENTS: 'ccac.libraries.out.request.apply',\n        REQUEST_ACTION: 'ccac.libraries.out.request.action', // see CCX_ACTIONS below\n        RECEIVE_UPDATE: 'ccac.libraries.in.request.update'\n    };\n    CCX_ACTIONS = {\n        OPEN_PICKER: 'openPicker',\n        OPEN_SHARE_SHEET: 'openShareSheet',\n        OPEN_TEMPLATE_PREVIEW: 'openPreview'\n    };\n\n    GEN_STUDIO_ACTIONS = {\n        OPEN_UPLOAD_WIZARD: 'openUploadWizard',\n        OPEN_SHARE_SHEET: 'openShareSheet',\n    }\n\n    DISABLED_PUBLISH_STATES = {\n        OFFLINE: 'OFFLINE', // User is offline.\n        READ_ONLY: 'READ_ONLY', // User has no access to the document or library.\n        QUOTA: 'QUOTA', // User is out of available storage.\n        EMPTY: 'EMPTY', // Document has no assets.\n        MISSING_STORAGE: 'MISSING_STORAGE', // User has no storage entitlements at all.\n        UPGRADE: 'UPGRADE', // User has Starter (Free) Plan\n        COEDITOR_PUBLISHING: 'COEDITOR_PUBLISHING', // During a coediting session another XD session has started publishing associated library\n        MAX_ELEMENTS: 'MAX_ELEMENTS' // Document contains >10k assets, the maximum for a library.\n    };\n\n    // Enum for types of changes to elements\n    ELEMENT_CHANGE_TYPE = {\n        CONTENT: 'CONTENT', // Content or name changed (groups might have changed as well).\n        GROUP: 'GROUP' // Only the group changed.\n    };\n\n    // Enum for types of changes to groups\n    GROUP_CHANGE_TYPE = {\n        CONTENT: 'CONTENT', // Name changed.\n        GROUP: 'GROUP' // Order or parent changed.\n    };\n\n    // TODO: upper case the values when they're not used anywhere directly.\n    VIEW_BY_GROUP_MODES = {\n        TREE: 'tree',\n        PATH: 'path'\n    };\n\n    VIEW_BY_MODES = {\n        TYPE: 'type',\n        GROUP: 'group'\n    };\n\n    LIBRARY_CONTENTS_VIEW_TABS = {\n        ELEMENTS: 'elements',\n        PREVIEW: 'preview'\n    };\n\n    /**\n     * The filter options for brand for the M2.1 release\n     * TODO: Remove this when removing floodgateManager.isBrandLifecycleEnabled\n     * @readonly\n     * @enum {'all' | 'yours' | 'shared' | 'published'}\n     */\n    BRANDS_FILTER_OPTIONS_M2_1 = Object.freeze({\n        ALL: 'all',\n        YOURS: 'yours',\n        SHARED: 'shared',\n        PUBLISHED: 'published'\n    });\n\n    /**\n     * The filter options for brand for the M3 release\n     * @readonly\n     * @enum {'all' | 'created' | 'drafts' | 'published'}\n     */\n    BRANDS_FILTER_OPTIONS = Object.freeze({\n        /** Filter option for all brands */\n        ALL: 'all',\n        /** Filter option for brands created by the user */\n        CREATED: 'created',\n        /** Filter option for brands in the draft state */\n        DRAFTS: 'drafts',\n        /** Filter option for brands in the published state */\n        PUBLISHED: 'published'\n    });\n\n    /**\n     * The sort options for the brands list view.\n     * @readonly\n     * @enum {'modified' | 'name' | 'created'}\n     */\n    BRANDS_SORT_OPTIONS = Object.freeze({\n        /** Sort by the date each brand was last modified */\n        MODIFIED: 'modified',\n\n        /** Sort by the date each brand was created */\n        CREATED: 'created',\n\n        /** Sort by the name of the brand */\n        NAME: 'name',\n    });\n\n    MAX_ASSET_UPDATE_COUNT = 99;\n\n    // 'thumbnail' used in editing descriptions, and 'thumbnail-large' in the one-up element view.\n    ELEMENT_VIEW_MODES = [ 'grid', 'list', 'thumbnail', 'thumbnail-large' ];\n\n    // Heuristic for the minimum display time per character, for various languages\n    // This is used for displaying toasts, so we can make sure it's visible for long enough for the user to read.\n    // (languages like Chinese need longer to read per character, so this can be tweaked per language)\n    DISPLAY_TIME_PER_CHARACTER = {\n        'en-US': 50,\n        'ja-JP': 75,\n        'ko-KR': 100,\n        'zh-CN': 150,\n        'zh-TW': 150\n    }\n\n    PREFERRED_EXPORT_TYPES = {\n        'image/vnd.adobe.shape+svg': [ 'image/svg+xml' ]\n    };\n\n    // Dimensions of the copy/move popover used so it does not overlap outside of the panel.\n    DEFAULT_SELECT_TARGET_POPOVER_WIDTH = 200;\n    DEFAULT_SELECT_TARGET_POPOVER_HEIGHT = 226;\n    COPYMOVE_TL_DROPDOWN_MAXHEIGHT= 80;\n\n    // Maximum number of collaborators to list in tooltip\n    MAX_COLLABORATORS = 15;\n\n    // Should match maxWidth (200) - padding values (5x2) in .tooltip css class.\n    TOOLTIP_MAX_WIDTH = 190;\n\n    // CEP 11.5 and up switched to Vulcan 7 which deprecates function calls we were using previously\n    MIN_CEP_VULCAN_7_VERSION = 11.5;\n\n    // Debug log progress keys\n    PROGRESS_LOG = {\n        PUBLISHING: 'Publishing',\n        COEDITOR_PUBLISHING: 'Coeditor Publishing'\n    };\n\n    CONSTANT_KEY_IDS = [ '*', 'autocomplete' ];\n\n    SPECTRUM_ICONS_MAP = {\n        SyncDefault: 'Cloud',\n        LinkedLibrary: 'Link',\n        ChevronLeftMedium: 'ChevronLeft',\n        ChevronDownSmall: 'ChevronDown',\n        ChevronRightSmall: 'ChevronRight'\n    }\n\n    // EXPRESS Premium Paywall banner types\n    PAYWALL_BANNER_TYPES = {\n        BRAND: 'Brands',\n        LIBRARY: 'Libraries',\n        LIBRARY_PANEL: 'LibraryPanel'\n    };\n\n    /**\n     * Called from the products service to register the app-specific configurations.\n     *\n     * @param {string} appName The code for the current application (e.g. PHXS, ILST).\n     * @param {Object[]} appConfigurations The configurations for all the supported products (these come from the application's index.js)\n     */\n    initApplication(appName, appConfigurations) {\n        this.APP_NAME = appName;\n        this.SUPPORTED_PRODUCTS = appConfigurations.map(appConfig => appConfig.config);\n        this.currentProduct = appConfigurations.find(appConfig => appConfig.config.code === appName);\n    }\n\n    /**\n     * Converts the short name of an element type to a DCX mime type.\n     *\n     * @param {string} shortType Short name of the element type (e.g. color).\n     * @returns {string} Mime type for the element (e.g. \"application/vnd.adobe.element.color+dcx\").\n     */\n    getElementType(shortType) {\n        return 'application/vnd.adobe.element.' + shortType + '+dcx';\n    }\n}\n\nexport default new Configuration();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport librarySizeManager from 'app/js/managers/librarySizeManager';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport * as UnitUtils from 'app/js/utils/unitUtils';\nimport { getTruncatedElementName, getElementModifiedTime, checkElementWritable } from 'app/js/utils/libraryUtils';\nimport { isEditOriginalEnabled, editOriginal, canEditInSource, editInSource } from 'app/js/utils/editOriginalUtils';\nimport viewState from 'app/js/state/viewState';\nimport localizedSorter from 'app/js/utils/localizedSorter';\nimport { translate } from 'app/js/managers/translationManager';\nimport environment from 'app/js/environment';\nimport configuration from 'app/js/config/configuration';\nimport { formatGroupNameTooltip, getCustomGroupsTree } from 'app/js/utils/groupUtils';\n\nimport BaseElementConfig from './elements/BaseElementConfig';\nimport DefaultConfigs from './elements/DefaultConfigs';\nimport libraryManager from '../managers/libraryManager';\nimport elementSelectionState from '../state/elementSelectionState';\nimport metrics from 'app/js/interface/metrics';\nimport { blobToDataURL } from 'app/js/utils/encodingUtils';\n\n/**\n * ElementConfiguration contains the configuration for the different element types - it's basically\n * a big map from element type to a configuration object, that provides information like:\n *\n * - What component should be used to render elements of this type\n * - What are the allowed apply operations (using elements).\n * - How do we add an element of this type.\n */\nexport class ElementConfiguration {\n\n    _getConfiguration(type) {\n        // We fallback to the unknown type '*' if we don't have any information about the element type\n        if (!this._configurations) {\n            throw 'Error: element configuration is not initialized.';\n        }\n        return this._configurations[type] || this._configurations['*'];\n    }\n\n    /**\n     * Initialize the element type configurations. We read the element type from the type property.\n     *\n     * @param {BaseElementConfig[]} configurations - The configuration classes, in the order they should be displayed in the UI\n     */\n    init(configurations = []) {\n\n        if (this._configurations) {\n            throw 'Error: Can only register element type configurations once.';\n        }\n\n        this._configurations = {};\n        this._elementTypes = [];\n\n        configurations.forEach(ConfigurationClass => {\n            const configuration = new ConfigurationClass(this);\n            const type = configuration && configuration.type;\n\n            if (!(configuration instanceof BaseElementConfig)) {\n                throw `Error: Element type configuration ${configuration.constructor.name} is not an instance of BaseElementConfig.`;\n            }\n\n            if (this._configurations[type]) {\n                throw `Error: Attempting to register element type ${type} more than once.`;\n            }\n\n            this._configurations[type] = configuration;\n            this._elementTypes.push(type);\n        });\n\n        // Check that the configurations you've added correspond precisely to the default configs\n        const expectedTypes = Object.keys(DefaultConfigs).map(key => new DefaultConfigs[key]().type);\n        expectedTypes.forEach(type => {\n            if (!this._elementTypes.includes(type)) {\n                throw `No configuration for element type ${type} - you must provide a configuration.`;\n            }\n        });\n        this._elementTypes.forEach(type => {\n            if (!expectedTypes.includes(type)) {\n                throw `Unexpected element type ${type} - no default configuration exists.`;\n            }\n        });\n    }\n\n    /**\n     * Returns a list of all the registered element types in the product configuration order\n     *\n     * @returns {string[]} array of element types in the order to display\n     */\n    getElementTypes() {\n        return this._elementTypes;\n    }\n\n    /**\n     * This finds the first brand role of an element, if available, and returns its usage string.\n     * Used when viewing by role, where we group the element into a section by role, instead of by type.\n     * @param {ElementModel} element\n     * @returns {string} the role usage e.g. 'logo' 'header' 'body'\n     * https://git.corp.adobe.com/caf/xcm/blob/master/schemas/cc/library/data/role/role.schema.json\n     */\n    getElementRole(element) {\n        if (!element?.roles?.length) { return; }\n        const role = element.roles.find(r => r.type === configuration.currentProduct.config.roleType); // For now we assume we are using the first role within the app's namespace\n        // e.g. role: { type: 'brand', usage: 'logo' }\n        return role?.usage; // the role usage is what is used as the type category/section and is more or less synonymous with the term 'role'\n    }\n\n    /**\n     * This finds the priority of branded element, if available, and returns its priority string.\n     * @param {ElementModel} element\n     * @returns {string} priority e.g. 'primary' 'secondary' 'accent'\n     * https://git.corp.adobe.com/caf/xcm/blob/master/schemas/cc/library/data/role/role.schema.json\n     */\n    getElementPriority(element) {\n        if (!element?.roles?.length) { return; }\n        const role = element.roles.find(r => r.type === configuration.currentProduct.config.roleType); // For now we assume we are using the first role within the app's namespace\n        // e.g. role: { type: 'brand', usage: 'logo' }\n        return role?.priority; // the role usage is what is used as the type category/section and is more or less synonymous with the term 'role'\n    }\n\n    /**\n     * Returns the size of renditions (thumbnails) for each rendition type.\n     *\n     * This is passed into the cc-libraries-api-js as a configuration option.\n     *\n     * @returns {Object} map from element type to rendition size\n     */\n    getThumbnailSizes() {\n        const thumbnailSizes = {};\n        this.getElementTypes().forEach(type => {\n            const configuration = this._getConfiguration(type);\n            if (configuration.thumbnailSize) {\n                thumbnailSizes[type] = [ configuration.thumbnailSize ];\n            }\n        });\n        return thumbnailSizes;\n    }\n\n    /**\n     * Returns the size of renditions (thumbnails) for each rendition type.\n     *\n     * This is passed into the cc-libraries-api-js as a configuration option.\n     *\n     * @returns {Object} map from element type to rendition size\n     */\n    getFullRenditionConfig() {\n        const fullRenditionConfig = {};\n        this.getElementTypes().forEach(type => {\n            const configuration = this._getConfiguration(type);\n            if (configuration.fullRenditionConfig) {\n                fullRenditionConfig[type] = configuration.fullRenditionConfig();\n            }\n        });\n        return fullRenditionConfig;\n    }\n\n    /**\n     * Gets the React component to use as the renderer for an element of the given type\n     *\n     * @param {string} type\n     * @returns {ReactComponent} renderer\n     */\n    getComponent(type) {\n        return this._getConfiguration(type).component;\n    }\n\n    /**\n     * Gets a custom renderer to use for rendering\n     *\n     * @param {ElementModel} element\n     * @returns {ReactComponent|undefined} renderer\n     */\n    getCustomRenderer(element) {\n        return this._getConfiguration(element.type).getCustomRenderer(element);\n    }\n\n    /**\n     * Gets the React component to use as the renderer for an element of the given type\n     *\n     * @param {ElementModel} element\n     * @returns {ReactComponent} renderer\n     */\n    getInfoControlComponent(element) {\n        return this._getConfiguration(element.type).getInfoControlComponent(element);\n    }\n\n    /**\n     * Gets the React component to use as the renderer for a Stock search result\n     *\n     * @param {string} type\n     * @returns {ReactComponent} renderer\n     */\n    getStockComponent(type) {\n        return this._getConfiguration(type).stockComponent;\n    }\n\n    getGridSizeByType(type) {\n        if (configuration.currentProduct.config.uniformElementSize) {\n            return viewState.gridZoomFactor;\n        }\n        const elementConfig = this._getConfiguration(type);\n        return elementConfig.gridSizeType;\n    }\n\n    /**\n     * Gets a function for filtering elements of the given type, based on the element type\n     *\n     * @param {string} type\n     * @returns {Function} search function\n     */\n    getElementSearchFunction(type) {\n        const configuration = this._getConfiguration(type);\n        if (!configuration._elementSearchFunctionClosure) {\n            // Optimization: Avoid creating a closure on every call\n            configuration._elementSearchFunctionClosure = configuration.search.bind(configuration);\n        }\n        return configuration._elementSearchFunctionClosure;\n    }\n\n    /**\n     * Gets the translation key for the display name for the element type - you need to call `translate()` on\n     * the key, to get the localized string to display.\n     *\n     * TODO: Should we do the translation here?\n     *\n     * @param {string} type\n     * @param {boolean} singular\n     * @returns {string} translation key for the name of the element type\n     */\n    getTypeName(type, singular = false) {\n        return this._getConfiguration(type)[singular ? 'typeNameSingular' : 'typeName'];\n    }\n\n    /**\n     * Shortens the element type for easier type checking in code.\n     * The short type is also used in css for the grid view of each element.\n     * e.g. 'application/vnd.adobe.element.characterstyle+dcx' --> 'characterstyle'\n     * e.g. '*' --> 'unsupported' (unknown type)\n     *\n     * @param {string} type\n     * @returns {string}\n     */\n    getShortType(type = '') {\n        const configuration = this._getConfiguration(type);\n        const matches = configuration.type.match(/application\\/vnd\\.adobe\\.element\\.(.*)\\+dcx/);\n        return matches ? matches[1] : 'unsupported';\n    }\n\n    /**\n     * Determine if the the Stock search result is draggable.\n     *\n     * @param {string} type\n     * @returns {boolean} true if it can be dragged, false otherwise\n     */\n    isStockAssetDraggable(type) {\n        const configuration = this._getConfiguration(type);\n        return configuration.isStockAssetDraggable();\n    }\n\n    /**\n     * Determine if the given Stock asset of a specific type is licensable under the standard license or\n     * if a choice needs to be made from available licenses.\n     *\n     * @param {string} type the element type\n     * @param {boolean} isPremium whether the asset is premium\n     * @param {boolean} isEditorial whether the asset is editorial\n     * @returns {boolean} true, if the Stock license is not standard, false otherwise\n     */\n    isStockMultiLicense(type, isPremium, isEditorial) {\n        const configuration = this._getConfiguration(type);\n        return configuration.isStockMultiLicense(isPremium, isEditorial);\n    }\n\n    /**\n     * An unlicensed Stock element can have a comp (i.e. a \"preview\") that a customer can use to\n     * place on their canvas or a timeline. There are potentially multiple comps per element\n     * – e.g. 4K or HD video, small or large version of an image. There are also certain Stock elements\n     * that don't have such a preview (templates, 3D objects).\n     *\n     * The mapping between a type of license that a customer is requesting and the type of comp that is\n     * available for an element is not trivial.\n     *\n     * This function translates between the requested license and a \"comp\" appropriate for that license.\n     *\n     * As a basic case, the license type and the comp is the same thing. For others (such as photos), this\n     * mapping is more complicates. See the VideoElementConfig and ImageElementConfig for those cases.\n     *\n     * @param {string} type\n     * @param {string} requestedLicenseType\n     * @returns {string}\n     */\n    getStockCompKeyForLicenseType(type, requestedLicenseType) {\n        const configuration = this._getConfiguration(type);\n        return configuration.getStockCompKeyForLicenseType(requestedLicenseType);\n    }\n\n    // Element methods\n\n    /**\n     * Gets the untranslated name of the auto group that should contain this element.\n     * Names are from the {@link https://wiki.corp.adobe.com/pages/viewpage.action?spaceKey=ccexperience&title=Custom+Groups+in+Library+Panel#CustomGroupsinLibraryPanel-UpdatedTaxonomyGreenFinal \"Updated Taxonomy.\"}\n     * @param {ElementModel} element\n     * @returns {string} The localization string that will be translated into the name.\n     */\n    getAutoGroupName(element) {\n        return this._getConfiguration(element.type).getAutoGroupName(element);\n    }\n\n    /**\n     * Whether the element is allowed to have a blank name (e.g. colors can fall back to a hex value).\n     * If the element type _is_ allowed to have a blank name, make sure the libraries API knows how to\n     * auto-generate a name for the elemnet.\n     *\n     * @param {ElementModel} element\n     * @returns {boolean} whether the element is allowed to have a blank name\n     */\n    allowBlankName(element) {\n        return element && this._getConfiguration(element.type).allowBlankName === true;\n    }\n\n    /**\n     * Gets the thumbnail size for the given element.\n     *\n     * @param {ElementModel} element\n     * @returns {number} rendition size\n     */\n    getThumbnailSize(element) {\n        return element && this._getConfiguration(element.type).thumbnailSize;\n    }\n\n    /**\n     * Local URL of the thumbnail, which will be one of these:\n     * - file URL (file://) in environments with file systems\n     * - Data URL (data:image/png;base64,) in sandboxed desktop environments that require embedded data\n     * - Object URL (blob:) in web environments\n     *\n     * Note that when using the LocalDriver, this call results in the process generating a thumbnail using the Imaging Service.\n     * When on the CloudDriver, this merely returns the renditionUrl, which is an URL that melville has already given us along with the\n     * element data, in a library where elements have been loaded. It is not until the URL is fetched that the R-API generates the rendition.\n     *\n     * The logic to choose which representation to use to generate the rendition is contained in Melville and the Process,\n     * and follows this algorithm: https://wiki.corp.adobe.com/display/ccprojects/Creative+Cloud+Libraries+DCX+Format#CreativeCloudLibrariesDCXFormat-Renditionalgorithm\n     *\n     * Get the URL through thumbnailManager.getLocalThumbnailURL() to take advantage of caching and observability.\n     *\n     * @param {ElementModel} element\n     * @param {boolean} isLarge if true, will return a large thumbnail\n     * @returns {Promise} promise that resolves to the thumbnail URL.\n     */\n    getLocalThumbnailURL(element, isLarge = false) {\n        const elementConfiguration = this._getConfiguration(element.type);\n        const size = isLarge ? configuration.LARGE_THUMBNAIL_SIZE : elementConfiguration.thumbnailSize;\n\n        if (!configuration.currentProduct.config.usesThumbnailDataURLs) {\n            if (environment.supportsFileURLs) {\n                return element.getThumbnailPath(size).then(path => path && `file://${path}`);\n            }\n            return Promise.resolve(element.getThumbnailURL(size));\n        }\n\n        // If we don't have a filesystem, we'll need to fetch the thumbnail contents instead:\n        return element.getThumbnailContent(size).then(blobToDataURL);\n    }\n\n    /**\n     * Gets a badge for an element (indicating the element type) - right now, these are only displayed in the list view.\n     *\n     * @param {ElementModel} element\n     * @returns {string} badge for the element\n     */\n    getBadgeText(element) {\n        return this._getConfiguration(element.type).getBadgeText(element);\n    }\n\n    /**\n     * Gets an object of element specific primary properties information for display in CCD info panel.\n     *\n     * @param {ElementModel} element\n     * @returns {Object} custom panel primary properties object for display in CCD info panel\n     */\n    getCustomPanelInfoPrimaryProperties(element) {\n        const configuration = this._getConfiguration(element.type);\n        return configuration.getCustomPanelInfoPrimaryProperties(element);\n    }\n\n    /**\n     * Gets an object of element specific subproperties information for display in CCD info panel.\n     *\n     * @param {ElementModel} element\n     * @returns {Object} custom panel subproperties object for display in CCD info panel\n     */\n    getCustomPanelInfoSubProperties(element) {\n        const configuration = this._getConfiguration(element.type);\n        return configuration.getCustomPanelInfoSubProperties(element);\n    }\n\n    /**\n     * Gets an object of element specific controls for display in CCD info panel.\n     *\n     * @param {ElementModel} element\n     * @returns {Object} custom panel object for display in CCD info panel\n     */\n    getCustomServiceProperties(element) {\n        const configuration = this._getConfiguration(element.type);\n        return configuration.getCustomServiceProperties(element);\n    }\n\n    /**\n     * Gets extension for an element (indicating the element type) - right now, these are only displayed in the CCD grid view.\n     *\n     * @param {ElementModel} element\n     */\n    getExtension(element) {\n        return this._getConfiguration(element.type).getExtension(element);\n    }\n\n    /**\n     * @typedef Operation\n     * @type {Object}\n     * @property {string} name - name of the operation\n     * @property {Function} action\n     */\n\n    /**\n     * Returns an array of apply operations that are allowed, for the given element. For example, for a color, this could return:\n     * `[ {name: 'Fill with colour', action: function () {} }, {name: 'Stroke with color', action: function () {} } ]`\n     *\n     * Some elements, like color themes, have logical sub-elements that can be applied independently (i.e. the sub-colors).\n     *\n     * @param {ElementModel} element\n     * @param {Object} [subElement]\n     * @param {string} [overrideType] Override the type of the element for getting the apply operations.\n     * @returns {Operation[]} array of apply operations\n     */\n    getApplyOperations(element, subElement, overrideType) {\n        const configuration = this._getConfiguration(overrideType || element.type);\n        const multiOpData = { index: 1, length: 1, uuid: FileUtils.generateUuid() };\n\n        // Note: To make the element configuration implementations consistent between single and multi-ops, we\n        // provide multiOpData even for a single operation.\n        return configuration.getApplyOperations(element, subElement, multiOpData);\n    }\n\n    /**\n     * Returns an array of apply operations that are allowed, for the given array of elements\n     *\n     * @param {ElementModel[]} elements\n     * @returns {Operation[]} array of apply operations\n     */\n    getMultiApplyOperations(elements = []) {\n\n        // If it's just a single element, we can fall back to the simpler case:\n        if (elements.length === 1) {\n            return this.getApplyOperations(elements[0]);\n        }\n\n        // Generating a uuid to make an association between all the operations returned from this call.\n        // This would make sense for the multi operation case where multiple \"multi operations\" are going on\n        // Not sure if that is even possible but adding a uuid to make the call to operations robust.\n        const uuid = FileUtils.generateUuid();\n\n        // Check that all the items are of the same type - we don't allow multiple apply operations on different types\n        if (elements.length === 0 || !elements.every(element => element.type === elements[0].type)) {\n            return [];\n        }\n\n        // Now, find the operations that support multiple elements, and combine them together:\n        const applyOperationMap = {};\n        elements.forEach((element, index) => {\n            const configuration = this._getConfiguration(element.type);\n            // TODO: Not sure why we use base-1 indexing for this, but keeping it in for legacy reasons\n            const multiOpData = { index: index + 1, length: elements.length, uuid };\n            const operations = configuration.getApplyOperations(element, undefined, multiOpData).filter(o => o.allowMultiple);\n\n            operations.forEach(operation => {\n                if (!applyOperationMap[operation.name]) {\n                    operation.apply = [ operation.apply ];\n                    applyOperationMap[operation.name] = operation;\n                } else {\n                    applyOperationMap[operation.name].apply.push(operation.apply);\n                }\n            });\n        });\n\n        // Filter out the operations that don't apply to all the elements (it's weird if only some of them get applied)\n        const operations = Object.keys(applyOperationMap)\n            .map(key => applyOperationMap[key])\n            .filter(operation => operation.apply.length === elements.length);\n\n        // Convert the array of operations into a single \"apply\" function\n        operations.forEach(operation => {\n            const applyFunctions = operation.apply;\n            operation.apply = () => applyFunctions.map(f => f());\n        });\n        return operations;\n    }\n\n    /**\n     * Returns an operation to apply when clicking on the given element (and optional subElement), or undefined if\n     * there is no such operation.\n     *\n     * @param {ElementModel} element\n     * @param {Object} [subElement]\n     * @returns {Operation|undefined} operation to apply on click\n     */\n    getOnClickApplyOperation(element, subElement) {\n        const operations = this.getApplyOperations(element, subElement);\n        // Note: the previous implementation found the _last_ operation with an onClick method, so we preserve this behaviour:\n        operations.reverse();\n        return operations.find(operation => operation.onClick);\n    }\n\n    /**\n     * Returns an operation to apply when double-clicking on the given element (and optional subElement), or undefined if\n     * there is no such operation.\n     *\n     * @param {ElementModel} element\n     * @param {Object} [subElement]\n     * @returns {Operation|undefined} operation to apply on edit\n     */\n    getOnEditApplyOperation(element, subElement) {\n        const operations = this.getApplyOperations(element, subElement);\n        // Note: the previous implementation found the _last_ operation with an onEditItem method, so we preserve this behaviour:\n        operations.reverse();\n        return operations.find(operation => operation.onEditItem);\n    }\n\n    editElement(element) {\n        const applyOperation = this.getOnEditApplyOperation(element);\n\n        if (applyOperation) {\n            applyOperation.apply();\n            return;\n        }\n\n        // Now, check for an edit operation\n        const editOperations = this.getEditOperations(element);\n        const onEditItemOperations = editOperations.find(op => op.onEditItem);\n        const editOperation = editOperations.find(op => op.onEditItem && !op.disabled);\n\n        if (onEditItemOperations && checkElementWritable(element)) {\n            if (this.isDownloadInProgress(element)) {\n                // For stock elements, we don't let you edit them while they are still downloading\n                environment.showError(translate('DL_ERROR_EDIT_ELEMENT_DOWNLOADING'));\n            } else {\n                editOperation?.apply();\n            }\n        }\n    }\n\n    /**\n     * Returns an array of edit operations that are allowed, for the given element.\n     *\n     * @param {ElementModel} element\n     * @returns {Operation[]} array of edit operations\n     */\n    getEditOperations(element) {\n        const elemConfiguration = this._getConfiguration(element.type);\n        const reportEditOperation = (eventSubtype, element) => {\n            metrics.reportElementEvent('Element Operations', 'Element', 'click', eventSubtype, element, { event: { value: 'single', count: 1 }, content: { category: 'Right Click' } });\n        };\n        // If it's an element in a published document library or an asset linked to a traditional document, we offer edit-in-source.\n        if (element.isLegacyDocumentLink) {\n            const isDeprecatedLegacyDocumentLink = element.isDeprecatedLegacyDocumentLink;\n            // need to keep 'edit in source' for non-deprecated document linking\n            const name = isDeprecatedLegacyDocumentLink ? elemConfiguration.publishToLibraryLabel : 'DL_EDIT_IN_SOURCE';\n            const editOperationName = isDeprecatedLegacyDocumentLink ? 'publish-to-source-library' : 'edit-in-source-document';\n            return [ {\n                name,\n                disabled: element.isLinked && element.isMissingLink,\n                apply: () => {\n                    reportEditOperation(editOperationName, element);\n                    editInSource(element);\n                },\n                onEditItem: true\n            } ];\n        } else if (canEditInSource(element)) {\n            return [ {\n                name: elemConfiguration.editInSourceLabel || 'DL_EDIT_IN_SOURCE',\n                disabled: element.isLinked && element.isMissingLink,\n                apply: () => {\n                    // This makes the assumption that lacking the editInSourceLabel is equivalent to read only permission. TODO: Look into whether accurate\n                    reportEditOperation(elemConfiguration.editInSourceLabel ? 'edit-in-source-document' : 'view-in-source-document', element);\n                    editInSource(element);\n                },\n                onEditItem: true\n            } ];\n        }\n\n        // If it's an element linked to a library, offer to show the element in the source library.\n        if (element.isLinked) {\n            const linkedElement = libraryManager.resolveCachedElementReference(element.linkReference);\n            return linkedElement ? [ {\n                name: 'DL_REVEAL_LINKED_ITEM',\n                apply: () => {\n                    // Should activate the source library.\n                    reportEditOperation('reveal-in-library', element);\n                    libraryManager.setLibraryActiveState(linkedElement.library, true);\n                    elementSelectionState.revealElement(linkedElement);\n                }\n            } ] : [];\n        }\n\n        if (!elemConfiguration.defaultEditOperation && !isEditOriginalEnabled(element)) {\n            // Can't edit the element in either the current product _or_ any other product, so no\n            // supported edit operations\n            return [];\n        }\n\n        return [ {\n            name: elemConfiguration.editItemLabel || 'DL_EDIT_ITEM',\n            disabled: !this.isEditable(element, true),\n            apply: () => {\n                if (!elemConfiguration.defaultEditOperation) {\n                    // Immediately jump to edit original, since there's no operation for this product\n                    editOriginal(element);\n                    return;\n                }\n\n                // Some edit operations are async.\n                return Promise.resolve(elemConfiguration.defaultEditOperation(element)).then(handled => {\n                    if (handled === false) {\n                        // TODO: Why do we check for stock errors in this case but not the first?\n                        editOriginal(element, this.isEditable(element, true, true));\n                    }\n                });\n            },\n            onEditItem: true\n        } ];\n    }\n\n    /**\n     * Returns a boolean determining an elements disabled state\n     *\n     * @param {Element} element\n     * @returns {boolean} whether element is disabled\n     */\n    isDisabled(element) {\n        // Disable new library elements until they get a permanent id. Should not apply to document assets.\n        // https://jira.corp.adobe.com/browse/CCXC-14856\n        const isDisabled = this._getConfiguration(element.type).isDisabled(element) || (!element.isCommitted && !element.library.isDocumentAssets);\n        return !configuration.currentProduct.config.enableUnusableElements && isDisabled;\n    }\n\n    isThumbnailTiled(element) {\n        const configuration = this._getConfiguration(element.type);\n        return configuration.isThumbnailTiled;\n    }\n\n    showCheckeredBackground(element) {\n        const configuration = this._getConfiguration(element.type);\n        return configuration.showCheckeredBackground;\n    }\n\n    /**\n     * Returns true if the given item is editable in the current app (or if allowEditInOtherApps, if it's editable in\n     * either the current app or another app).\n     *\n     * @param {ElementModel} element\n     * @param {boolean} [allowEditInOtherApps=false] - If true, will consider the element editable if another app can edit it.\n     * @param {boolean} [allowBrokenLinks=false] - Do we consider the element editable, even if it has broken links?\n     * @returns {boolean} whether the element is editable\n     */\n    isEditable(element, allowEditInOtherApps = false, allowBrokenLinks = false) {\n        const representation = element.getPrimaryRepresentation();\n        if (!representation || !viewState.isLibraryWritable(element.library, false, true)) {\n            return false;\n        }\n\n        const editableMimeTypes = FileUtils.getEditableTypes(element.type);\n        let isEditable = this.isRepresentationCompatible(representation, editableMimeTypes, allowBrokenLinks);\n\n        if (allowEditInOtherApps && !isEditable) {\n            // Check to see whether edit original is possible. This returns true, even if the\n            // relevant app isn't installed, so you can still get an error message.\n            isEditable = isEditOriginalEnabled(element);\n        }\n\n        if (!isEditable && configuration.currentProduct.config.isElementEditable) {\n            // Check if there are further product configurations for this element that might make it editable.\n            isEditable = configuration.currentProduct.config.isElementEditable(element);\n        }\n\n        return isEditable;\n    }\n\n    /**\n     * Returns an array of add operations (things that can be added to the given library), based on the current layer\n     * selection in the document. This is very app-specific, and each application needs to implement the `getAddOperations`\n     * method on their element configuration, in order to have any add operations.\n     *\n     * @param {Object} layerInfo\n     * @param {LibraryModel} library The library that elements would be added to.\n     * @returns {Operation[]} array of add operations where the apply method returns a promise\n     */\n    getAddOperations(layerInfo, library) {\n\n        // TODO: This should probably be lifted to the footer, so that we can disable the plus button.\n        if (library && !librarySizeManager.canAddElements(library)) {\n            return [];\n        }\n\n        return this.getElementTypes()\n            .map(type => {\n                const configuration = this._getConfiguration(type);\n\n                // For each operation, let it return the add operations based on the layer information\n                const operations = configuration.getAddOperations(layerInfo);\n                operations.forEach(op => op.type = type);\n                return operations;\n            })\n            .reduce((a, b) => a.concat(b), []);\n    }\n\n    /**\n     * Returns the operation for sending a message to the host app to open a file/color/font picker for this element type.\n     * The picker should send a message back to create the element.\n     * @param {string} type\n     * @returns {Function} function that returns a promise\n     */\n    getOpenPickerOperation(type) {\n        const configuration = this._getConfiguration(type);\n        return configuration.openPicker;\n    }\n\n    /**\n     * Opens the element preview for the given element.\n     * @param {ElementModel} element\n     */\n    openElementPreview(element) {\n        const configuration = this._getConfiguration(element.type);\n        configuration.openPreview(element);\n    }\n\n    /**\n     * Returns an object describing tooltip data for the given element / sub-element.\n     *\n     * @param {ElementModel} element\n     * @param {Object} [subElement] an object with color swatch data from a color theme\n     * @returns {Object} tooltip data for the element or subelement\n     */\n    // TODO: Collapse this function into getTooltipContent\n    getTooltipData(element, subElement) {\n        const elemConfig = this._getConfiguration(element.type);\n        if (subElement) {\n            return elemConfig.getAdditionalTooltipData(element, subElement);\n        }\n\n        const isStockAsset = AdobeStockUtils.isStockAsset(element);\n        const representation = element.getPrimaryRepresentation() || {};\n        const typeInfo = representation && FileUtils.mimeLookup(element.type, representation.type);\n        const group = element.getGroups()[0];\n\n        const tooltipData = {\n            name: getTruncatedElementName(element),\n            group: group && formatGroupNameTooltip(group),\n            isStockAsset,\n            stockId: isStockAsset ? AdobeStockUtils.getStockId(element) : undefined,\n            isLicensed: isStockAsset ? AdobeStockUtils.isLicensed(element) : undefined,\n            createdIn: typeInfo && typeInfo.createdIn,\n            // typeInfo.displayName is a translation string for a type ('Light', 'Material') or subtype ('JPEG', 'Photoshop').\n            // displayName is not always provided (i.e. if an app extends usable types with something not in\n            // the FileUtils mimemap), in which case the badge can be used (e.g. 'SGI').\n            representationType: typeInfo && (typeInfo.displayName ? translate(typeInfo.displayName) : typeInfo.badge),\n            filesize: representation.contentLength && UnitUtils.bytesToString(representation.contentLength),\n            dimensions: representation.width && representation.height && UnitUtils.dimensionsToString(representation.width, representation.height),\n            description: element.description,\n            isDisabled: this.isDisabled(element)\n        };\n\n        Object.assign(tooltipData, elemConfig.getAdditionalTooltipData(element, subElement));\n\n        for (const key of Object.keys(tooltipData)) {\n            if (tooltipData[key] === undefined) {\n                delete tooltipData[key];\n            }\n        }\n\n        return tooltipData;\n    }\n\n    /**\n     * Returns an array of strings formatted for each line of the tooltip for the element or subelement, if provided.\n     *\n     * @param {ElementModel} element\n     * @param {Array} [subElement] an Array with color swatch data (for rgb and cmyk color data, or just rgb) from a color theme\n     * @returns {Array|undefined}\n     */\n    getTooltipContent(element, subElement) {\n        if (!element) { return; }\n\n        const elementConfiguration = this._getConfiguration(element.type);\n        let tooltipData = this.getTooltipData(element, subElement);\n\n        if (configuration.currentProduct.config.enabledElementTooltipData) {\n            const enabledTooltipData = {};\n            configuration.currentProduct.config.enabledElementTooltipData.forEach(dataType => {\n                enabledTooltipData[dataType] = tooltipData[dataType];\n            });\n            tooltipData = enabledTooltipData;\n        }\n        const tooltipContent = elementConfiguration.formatTooltipContent(tooltipData).filter(x => x);\n\n        // If we're in search mode, we also show:\n        // (a) the name of the group (if the element belongs to a group)\n        // (b) the name of the library (if we're searching multiple libraries);\n        const searchModeTooltips = [];\n\n        if (viewState.isLibrariesSearchMode()) {\n            searchModeTooltips.push(translate('DL_ITEM_LIBRARY_TOOLTIP', {\n                libraryName : element.library.name\n            }));\n        }\n\n        if (searchModeTooltips.length > 0) {\n            tooltipContent.push({ divider: true });\n            tooltipContent.push.apply(tooltipContent, searchModeTooltips);\n        }\n\n        return tooltipContent;\n    }\n\n    /**\n     * Returns an object describing tooltip data for the given element / sub-element.\n     *\n     * @param {ElementModel} element\n     * @param {boolean} [includeTypeSpecificDragData=true]\n     * @param {string} [overrideType] Override the type of the element for getting the drag data.\n     *\n     * @returns {Object} drag data\n     */\n    getDragData(element, includeTypeSpecificDragData = true, overrideType) {\n        const configuration = this._getConfiguration(overrideType || element.type);\n\n        let dragData = {\n            name: element.name,\n            libraryName: element.library.name,\n            type: configuration.dragType || element.type, //Allow type specification to support backwards compatible \"image\" type\n            elementRef: element.getLegacyReference(),\n            modifiedTime: getElementModifiedTime(element),\n            creationTime: element.created\n        };\n\n        if (AdobeStockUtils.isStockAsset(element)) {\n            dragData.adobeStock = {\n                id: AdobeStockUtils.getStockId(element),\n                license: AdobeStockUtils.isLicensed(element),\n                premiumLevel: AdobeStockUtils.getStockPremiumLevel(element)\n            };\n        }\n\n        // Combine the drag data with data from the element configurations\n        // Note: There's only one case when we don't include the type-specific drag data,\n        // and that's when dragging a stock image from the search view (because there isn't\n        // yet a library element). We should tidy this code up.\n        if (includeTypeSpecificDragData) {\n            const additionalDragData = configuration.getDragData(element);\n            if (!additionalDragData) {\n                return undefined;\n            }\n            dragData = Object.assign(dragData, additionalDragData);\n        }\n        return dragData;\n    }\n\n    /**\n     * Returns computed Stock drag data from Stock search results.\n     *\n     * @param {ElementModel} element\n     * @param {Object} asset\n     * @param {Object} dragThumbDetails\n     */\n    getStockDragData(element, asset, dragThumbDetails) {\n        const type = element.type;\n        if (!this.isStockAssetDraggable(type)) {\n            return {};\n        }\n\n        const configuration = this._getConfiguration(type);\n\n        const dragData = this.getDragData(element, false);\n        const stockDragData = configuration.getStockDragData(asset, dragThumbDetails);\n\n        dragData.data = stockDragData;\n        return dragData;\n    }\n\n    /**\n     * Add additional stock metadata from the purchase info to a representation, based on the element type.\n     *\n     * @param {RepresentationModel} representation\n     * @param {Object} stockData\n     */\n    setStockMetadata(representation, stockData) {\n        const configuration = this._getConfiguration(representation.element.type);\n        configuration.setStockMetadata(representation, stockData);\n    }\n\n    /**\n     * Returns true if the given representation has a type that's in the list of contentTypes provided\n     *\n     * @param {RepresentationModel} representation\n     * @param {string[]} contentTypes\n     * @param {boolean} [allowBrokenLinks=false] If true, treats a representation as \"usable\" even if it's an external link and isn't downloaded.\n     * @returns {boolean} whether the representation is compatible with the list of contentTypes\n     */\n    isRepresentationCompatible(representation, contentTypes, allowBrokenLinks = false) {\n        if (!representation) {\n            return false;\n        }\n\n        // For external links, check we have the content path on disk\n        if (!allowBrokenLinks && representation.isExternalLink) {\n            // There are two cases for external links - either we want to allow you to use an external link\n            // that hasn't yet been downloaded (e.g. for video), or we don't want you to use it (e.g. for images)\n            // Since this depends on the element type, we make it configurable\n\n            // If there was an error downloading the external link, it's never usable\n            if (representation.getCachedExternalLinkError()) {\n                return false;\n            }\n\n            // If we're auto-downloading isn't turned off, then don't allow us to use the representation if we haven't finished\n            // downloading. This allows us to use another representation as a fallback, while it's downloading\n            const configuration = this._getConfiguration(representation.element.type);\n            if (configuration.autoDownloadExternalLinks !== false && !representation.getCachedContentPath()) {\n                return false;\n            }\n        }\n\n        return contentTypes.some(type => representation.isCompatibleType(type));\n    }\n\n    /**\n     * Returns the first compatible representation of an element that matches one of the the given content types.\n     * If no content types are provided, we use the usable types for the element type, as defined in FileUtils.\n     *\n     * TODO: Should rename to findCompatibleRepresentation.\n     *\n     * @param {ElementModel} element\n     * @param {string|string[]} [contentTypes]\n     * @param {boolean} [allowBrokenLinks=false]\n     * @returns {RepresentationModel|undefined}\n     */\n    findUsableRepresentation(element, contentTypes, allowBrokenLinks = false) {\n        contentTypes = contentTypes || FileUtils.getUsableTypes(element.type);\n        contentTypes = Array.isArray(contentTypes) ? contentTypes : [ contentTypes ];\n        // First, look for the primary representation (if there is one - there should be)\n        const primary = element.getPrimaryRepresentation();\n        if (primary && this.isRepresentationCompatible(primary, contentTypes, allowBrokenLinks)) {\n            return primary;\n        }\n\n        // Otherwise, pick the first representation that's of a type that we can use\n        return element.representations.find(representation => this.isRepresentationCompatible(representation, contentTypes, allowBrokenLinks));\n    }\n\n    /**\n     * Return an object that meaningfully embeds the primary content and/or the rendition of a library element.\n     * This is useful when we need to send data for an app to apply or preview an element on a document.\n     * @param {ElementModel} element\n     * @returns {Object}\n     * @property {Object} primary\n     * @property {Object} rendition\n     */\n    getEmbeddedData(element) {\n        if (!element) { return {}; }\n        const configuration = this._getConfiguration(element.type);\n        return configuration.getEmbeddedData(element);\n    }\n\n    /**\n     * Returns true if the element is currently downloading (i.e. it's a stock element and currently downloading the stock image).\n     *\n     * @param {ElementModel} element\n     * @returns {boolean} whether there's a download in progress\n     */\n    isDownloadInProgress(element) {\n        const representation = element.getPrimaryRepresentation();\n        if (representation && representation.isExternalLink) {\n\n            // If there is problem with the link, then download is _not_ in progress\n            if (representation.getCachedExternalLinkError()) {\n                return false;\n            }\n\n            // If auto-download is enabled & no content-path is set, then we are still downloading\n            const configuration = this._getConfiguration(element.type);\n            if (configuration.autoDownloadExternalLinks !== false && !representation.getCachedContentPath()) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    /**\n     * Takes an array of elements and groups them according to element type or role. The elements in each\n     * group are sorted according to the sortBy method.\n     *\n     * When grouped by role, roles will take precendence over type.\n     *\n     * @param {ElementModel[]} elements\n     * @param {string} sortBy Sort method ('name', or 'modified')\n     * @param {boolean} sortDescending\n     * @returns {Object[]} An array of sections containing type or role, and an array of children (elements)\n     */\n    groupElementsByType(elements, sortBy, sortDescending = false) {\n        const sortFn = sortBy === 'modified'\n            ? elements => localizedSorter.sortByModified(elements)\n            : elements => localizedSorter.sortByName(elements);\n        const elementRolesInViewByRole = configuration.currentProduct.config.elementRolesInViewByRole;\n\n        const typeSectionMap = {};\n        this.getElementTypes().forEach(type => typeSectionMap[type] = { type, children: [] });\n        // If viewing by brand, elements with a role (as specified in elementRolesInViewByRole) will be grouped separately, not by mimetype.\n        const viewByRole = viewState.viewByState === 'role';\n        const roleSectionMap = {};\n        if (viewByRole) {\n            elementRolesInViewByRole.forEach(role => roleSectionMap[role] = { type: role, isRole: true, children: [] });\n        }\n\n        // Get section headers\n        elements.forEach(element => {\n            const role = element.roles?.length > 0 && this.getElementRole(element);\n            if (viewByRole && role && elementRolesInViewByRole.includes(role)) {\n                roleSectionMap[role] = roleSectionMap[role] || { type: role, isRole: true, children: [] };\n                roleSectionMap[role].children.push(element);\n            } else {\n                const key = typeSectionMap[element.type] ? element.type : '*';\n                typeSectionMap[key].children.push(element);\n            }\n        });\n\n        // Turn maps into ordered lists, with roles in front.\n        let sections = Object.keys(typeSectionMap).map(type => typeSectionMap[type]);\n        if (viewByRole) {\n            const roleSections = Object.keys(roleSectionMap).map(usage => roleSectionMap[usage]);\n            sections = roleSections.concat(sections);\n        }\n        sections.forEach(section => {\n            const elements = sortFn(section.children);\n            // TOFIX: returning from forEach is a bug. it's just a 'continue'. but this has been here for 4 years...\n            if (sortDescending) {\n                return elements.reverse();\n            }\n\n            return elements;\n        });\n\n        return sections;\n    }\n\n    /**\n     * Takes an array of elements and groups them according to custom group.\n     *\n     * @param {ElementModel[]} elements\n     * @param {GroupModel[]} groups\n     * @param {number} maxDepth how deep to allow the subgroup tree structure to grow (a value of 0 flattens all groups onto the root level)\n     * @param {'order'|'name'} sortBy how to order elements and groups.\n     * @returns {GroupsTreeBranch[]} An array of sections containing a group id and an array of children (elements)\n     * (See GroupUtils.getCustomGroupsTree() for more info on the structure of GroupsTreeBranch).\n     */\n    groupElementsByCustomGroup(elements, groups, maxDepth, sortBy) {\n        // By definition, in this function we only want groups related to elements. No need to do the empty-groups pass.\n        const { root } = getCustomGroupsTree(elements, groups, { maxDepth, sortBy, includeEmpty: false });\n        return root.children;\n    }\n\n    /**\n     * Takes an array of elements and groups them according to their top-level group.\n     * Useful for grouping document assets by their \"type\" despite being in nested groups.\n     * @param {Element[]} elements\n     * @param {Group[]} groups\n     * @param {'order'|'name'} sortBy how to order elements and groups.\n     * @returns {GroupsTreeBranch[]} An array of sections containing a group id and an array of children (elements)\n     * (See GroupUtils.getCustomGroupsTree() for more info on the structure of GroupsTreeBranch).\n     */\n    groupElementsByTopLevelGroup(elements, groups, sortBy) {\n        // Construct the tree with maxDepth 1 so that all subgroups float up to be direct children of top-level groups.\n        const { root } = getCustomGroupsTree(elements, groups, { maxDepth: 1, sortBy });\n        const getChildElements = branch => {\n            const elements = [];\n            branch.children.forEach(child => {\n                if (child.item.isGroup) {\n                    // There can only be one more level of elements since we set maxDepth = 1.\n                    elements.push(...getChildElements(child));\n                } else {\n                    elements.push(child);\n                }\n            });\n            return elements;\n        };\n\n        // Move all elements under their top-level group ancestor.\n        root.children.forEach(branch => {\n            branch.children = getChildElements(branch);\n        });\n        return root.children;\n    }\n\n    /**\n     * Takes an array of elements and groups them according to timestamp (this could be created/modified/removed)\n     * This groups elements by the minute - so elements that were created/modified/removed in the same minute\n     * are grouped together.\n     *\n     * The sections are descending, so the most recently created/modified/removed elements will come first.\n     *\n     * TODO: We may want to be cleverer about the sections (e.g. coarser groupings going further back in time),\n     * but for now it's only used for the debug view, for viewing removed elements in the panel.\n     *\n     * @param {ElementModel[]} elements\n     * @param {string} timeField The time field on an element to group by (created, modified, or removed)\n     * @returns {Object[]} An array of sections containing a timestamp and an array of children (elements)\n     */\n    groupElementsByTime(elements, timeField) {\n        const sectionMap = {};\n\n        elements.forEach(element => {\n            const time = Math.round(element[timeField] / 60000) * 60000;\n            sectionMap[time] = sectionMap[time] || { time, children: [] };\n            sectionMap[time].children.push(element);\n        });\n\n        // Return sorted by time, so the most recent elements come first\n        const sections = Object.keys(sectionMap).map(time => sectionMap[time]);\n        sections.sort((a, b) => b.time - a.time);\n        sections.forEach(section => localizedSorter.sortByName(section.children));\n        return sections;\n    }\n\n    /**\n     * Takes an ElementModel and returns the additional details about the element.\n     *\n     * @param {ElementModel} element\n     * @returns {string} A string to display additional details about the element in the list mode.\n     */\n    getAdditionalElementDetails(element) {\n        return this._getConfiguration(element.type).getAdditionalElementDetails(element);\n    }\n\n    /**\n     * Takes an ElementModel and returns the additional details about the element for the grid.\n     *\n     * @param {string} mode\n     * @param {ElementModel} element\n     * @returns {string} A string to display additional details about the element in the list mode.\n     */\n    getGridElementDetails(mode, element) {\n        const details = this._getConfiguration(element.type).getGridElementDetails(mode, element);\n        return configuration.currentProduct.config.enableUppercaseGridDetails ? details.toLocaleUpperCase(environment.getLocale()) : details;\n    }\n\n    /**\n     * Returns true if the given element can be used with the \"find-similar\" search on Adobe Stock.\n     *\n     * @param {ElementModel} element\n     * @returns {boolean} true if the element supports find-similar.\n     */\n    canFindSimilar(element) {\n        return this._getConfiguration(element.type).canFindSimilar(element);\n    }\n\n    /**\n    * Takes an ElementModel and returns the additional classes for the element.\n    *\n    * @param {ElementModel} element\n    * @returns {string} A string to display additional classes to apply to the element\n    */\n    getAdditionalClasses(element) {\n        return this._getConfiguration(element.type).getAdditionalClasses(element);\n    }\n\n    /**\n     * Takes an element and returns a specific thumbnail rendition to be used a backup to display to users\n     * @param {ElementModel} element\n     * @param {string} viewMode such as \"list\", or \"grid\"\n     */\n    getBackupThumbnail(element, viewMode) {\n        return this._getConfiguration(element.type).getBackupThumbnail(element, viewMode);\n    }\n\n    getReplaceableExtensions(element) {\n        return this._getConfiguration(element.type).getReplaceableExtensions(element);\n    }\n\n    /**\n     * Gets representation of an element to export the element\n     * @param {ElementModel} element\n     */\n    getRepresentationForExport(element) {\n        const representation = element.getPrimaryRepresentation();\n        const representationTypes = configuration.PREFERRED_EXPORT_TYPES[representation.type] || [ representation.type ];\n        return this.findUsableRepresentation(element, representationTypes);\n    }\n}\n\nexport default new ElementConfiguration();\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2016 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\nimport configuration from '../configuration';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport BaseElementConfig from './BaseElementConfig';\nimport { getPrimaryRepresentationBadge, getPrimaryRepresentationExtension } from 'app/js/utils/libraryUtils';\nimport { getElementMetadata, METADATA } from 'app/js/utils/elementMetadataUtils';\n\nimport ThumbnailElementView from 'app/js/components/elements/ThumbnailElementView';\n\n/**\n * Configuration for animation elements.\n */\nexport default class AnimationElementConfig extends BaseElementConfig {\n\n    type = configuration.ANIMATION_ELEMENT_TYPE;\n    typeName = 'DL_TYPE_ANIMATION';\n    typeNameSingular = 'DL_TYPE_ANIMATION_SINGULAR';\n    thumbnailSize = configuration.ANIMATION_THUMBNAIL_SIZE;\n    dragType = 'animation';\n\n    component = ThumbnailElementView;\n\n    allowDragWithoutUsableRepresentation = true;\n\n    getAutoGroupName() { return 'DL_AUTOGROUP_MOTION'; }\n\n    fullRenditionConfig() {\n        const usableTypes = FileUtils.getUsableTypes(this.type);\n        if (usableTypes.length === 0) {\n            // If we don't have any usable types, we probably haven't configured the usable types yet,\n            // so don't set any conditions!\n            return [];\n        }\n\n        return [ {\n            id: configuration.currentProduct.config.code,\n            condition: 'IF_NO_MATCHING_REPRESENTATION',\n            types: usableTypes\n        } ];\n    }\n\n    getBadgeText(element) {\n        return getPrimaryRepresentationBadge(element);\n    }\n\n    getExtension(element) {\n        return getPrimaryRepresentationExtension(element);\n    }\n\n    getCustomPanelInfoSubProperties(element) {\n        return getElementMetadata(element, [\n            METADATA.dimensions,\n        ]);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\n\nimport StockElementView from './StockElementView';\nimport BaseElementView from 'app/js/components/elements/BaseElementView';\n\n@observer\nexport default class AudioElementView extends React.Component {\n\n    static defaultProps = {\n        viewMode: 'grid',\n    };\n\n    static propTypes = {\n        ...BaseElementView.propTypes,\n    };\n\n    /**\n     * Once the element 1up is developed, will we likely incorporate a new viewMode for the 1up views.\n     * For this audio element we will create a new component that plays audio content\n     * such as render() { if (this.props.viewMode === 'one-up') { return <AudioPlayer ... /> ...\n     * For now, we'll just have the static image and stock licensing info (if applicable)\n    */\n    render() {\n        return (\n            <StockElementView data-test-id={'audio-view'} { ...this.props } />\n        );\n    }\n}\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2019 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\nimport configuration from '../configuration';\nimport BaseElementConfig from './BaseElementConfig';\nimport * as UnitUtils from 'app/js/utils/unitUtils';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { getPrimaryRepresentationExtension } from 'app/js/utils/libraryUtils';\nimport AudioElementView from 'app/js/components/elements/AudioElementView';\nimport { translate } from 'app/js/managers/translationManager';\nimport { mimeLookup } from 'app/js/utils/fileUtils';\nimport classNames from 'classnames';\n\nconst audioIcons = require.context('../../../images/audio', false, /.svg$/);\n\nimport { getPrimaryRepresentationBadge } from 'app/js/utils/libraryUtils';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\n\n/**\n * Configuration for audio elements.\n */\nexport default class AudioElementConfig extends BaseElementConfig {\n\n    type = configuration.AUDIO_ELEMENT_TYPE;\n    typeName = 'DL_TYPE_AUDIO';\n    typeNameSingular = 'DL_TYPE_AUDIO_SINGULAR';\n\n    thumbnailSize = configuration.AUDIO_THUMBNAIL_SIZE;\n\n    autoDownloadExternalLinks = true;\n\n    component = AudioElementView;\n\n    // audio elements are automatically grouped with other MOTION types like Video\n    getAutoGroupName() { return 'DL_AUTOGROUP_MOTION'; }\n\n    getDragData(element) {\n        if (!AdobeStockUtils.isStockAsset(element)) {\n            return super.getDragData(element);\n        }\n        const usableFormats = FileUtils.getUsableTypes(element.type);\n        const representations = element.representations.filter(rep => this._config.isRepresentationCompatible(rep, usableFormats));\n        const contentURLs = representations.map(representation => ({\n            contentType: representation.type,\n            url: representation.getContentURL(),\n            contentLength: representation.contentLength,\n        }));\n\n        // Then, usableRepresentation is just the same as representations[0]. -the first rep that's usable\n        if (contentURLs.length > 0) {\n            return {\n                data: contentURLs,\n                // NOTE: The representation is only for analytics purposes; this will get stripped before setting the drag data:\n                usedRepresentationForAnalytics: representations[0]\n            };\n        }\n    }\n\n    getExtension(element) {\n        return getPrimaryRepresentationExtension(element);\n    }\n\n    getAdditionalTooltipData(element) {\n        const data = {};\n\n        const primaryRepresentation = element.getPrimaryRepresentation();\n        const usableRepresentation = this._config.findUsableRepresentation(element);\n\n        const representation = usableRepresentation || primaryRepresentation;\n\n        if (!usableRepresentation) {\n            data.disabledMessage = `DL_ERROR_UNSUPPORTED_${configuration.currentProduct.config.translationSuffix}`;\n        }\n        const audioData = representation && representation.getValue('audio', 'data') || {};\n        const stockData = AdobeStockUtils.getStockData(representation) || {};\n        if (representation) {\n            if (representation.contentLength) {\n                data.filesize = UnitUtils.bytesToString(representation.contentLength);\n            }\n            if (audioData.duration) {\n                data.duration = UnitUtils.msToString(audioData.duration);\n            }\n            if (stockData.artist) {\n                data.artist = stockData.artist;\n            }\n            if (audioData.tempo) {\n                data.tempo = UnitUtils.bpmToString(audioData.tempo);\n            }\n        }\n\n        return data;\n    }\n\n    formatTooltipContent(tooltipData) {\n        const {\n            name,\n            group,\n            duration,\n            tempo,\n            artist,\n            filesize,\n            disabledMessage,\n            isStockAsset,\n            stockId,\n            isLicensed,\n            description\n        } = tooltipData;\n\n        return [\n            name,\n            group,\n            duration,\n            tempo,\n            artist,\n            filesize,\n            disabledMessage && translate(disabledMessage),\n            isStockAsset && `${translate('DL_ADOBE_STOCK_AUDIO')}: ${stockId}`,\n            isStockAsset && (isLicensed ? translate('DL_LICENSED') : translate('DL_UNLICENSED')),\n            description && { divider: true },\n            description\n        ];\n    }\n\n    getBadgeText(element) {\n        return getPrimaryRepresentationBadge(element);\n    }\n\n    getCustomPanelInfoSubProperties(element) {\n        const primaryRepresentation = element.getPrimaryRepresentation();\n        const audioData = primaryRepresentation.getValue('audio', 'data') || {};\n        const stockData = AdobeStockUtils.getStockData(primaryRepresentation) || {};\n        const metadata = [];\n\n        if (audioData.duration) {\n            metadata.push({\n                label: translate('DL_INFO_DURATION'),\n                value: UnitUtils.msToString(audioData.duration)\n            });\n        }\n\n        if (audioData.tempo) {\n            metadata.push({\n                label: translate('DL_AUDIO_TEMPO'),\n                value: audioData.tempo,\n            });\n        }\n\n        if (stockData.artist) {\n            metadata.push({\n                label: translate('DL_AUDIO_ARTIST'),\n                value: stockData.artist,\n            });\n        }\n\n        if (stockData.album) {\n            metadata.push({\n                label: translate('DL_AUDIO_ALBUM'),\n                value: stockData.album,\n            });\n        }\n\n        return metadata;\n    }\n\n    getBackupThumbnail(element, viewMode) {\n        // Returns an image to display for missing Audio element renditions\n        const representation = element.getPrimaryRepresentation();\n        if (!representation) {\n            return;\n        }\n        // first, get audio type - such as audio/mpeg3\n        const type = representation.type;\n        const typeMimeInfo = mimeLookup(configuration.AUDIO_ELEMENT_TYPE, type);\n        // since multiple audio types can have same extension -> use the badge which has the audio extension\n        // such as 'mp3'\n        const extension = typeMimeInfo && typeMimeInfo.badge.toLowerCase();\n        const disabled = this._config.isDisabled(element) && !viewMode.startsWith('thumbnail') && !configuration.currentProduct.isExpandedView?.();\n        if (!extension) {\n            return;\n        }\n\n        // this resolves to something like /app/images/audio/mp3_filetype_64.svg\n        const imgSrc = audioIcons(`./${extension}_filetype_64.svg`);\n        // set width and height in both places to ensure img is centered vertically within thumbnail\n        return (\n            <div data-test-id=\"thumbnail-failed-icon-audio\" className={ classNames(`panel-no-rendition-holder-${viewMode}`, { 'panel-thumbnail-disabled': disabled }, `panel-${ viewMode }-element-fallback`)}>\n                <img src={imgSrc} className={ `panel-${ viewMode }-element-fallback` } />\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport environment from 'app/js/environment';\n\n/**\n * This component badges the bottom of the search result with \"Premium\", \"Free\", or\n * \"Editorial\" label. Hence the name, since like the chin on a face, it is on the bottom.\n */\nexport default class StockSearchResultChin extends React.Component {\n    static propTypes = {\n        asset: PropTypes.object.isRequired,\n    }\n\n    _getIsEditorial() {\n        return this.props.asset.is_editorial;\n    }\n\n    // Illustrative assets are defined as content with logos and/or other IP that is not tied to a specific event\n    _getIsIllustrative() {\n        return this.props.asset.is_illustrative;\n    }\n\n    _getIsFree() {\n        return AdobeStockUtils.isFreeAsset(this.props.asset);\n    }\n\n    _getIsPremium() {\n        const {\n            asset: {\n                is_premium,\n            }\n        } = this.props;\n\n        return is_premium;\n    }\n\n    _getFreeChin() {\n        if (!this._getIsFree()) {\n            return;\n        }\n\n        return (\n            <div className=\"panel-dl-stock-content-footer-bar-text\" data-test-id=\"free-chin\">{ translate('DL_STOCK_FOOTER_BAR_FREE').toLocaleUpperCase(environment.getLocale()) }</div>\n        );\n    }\n\n    _getPremiumChin() {\n        if (!this._getIsPremium()) {\n            return;\n        }\n\n        const {\n            asset: {\n                price,\n            }\n        } = this.props;\n\n        return (\n            <div className=\"panel-dl-stock-content-footer-bar-text\" data-test-id=\"premium-chin\">\n                <span>{ translate('DL_STOCK_FOOTER_BAR_PREMIUM').toLocaleUpperCase(environment.getLocale()) }</span>\n                <span data-test-id=\"price\">{ price || null }</span>\n            </div>\n        );\n    }\n\n    _getEditorialChin() {\n        if (\n            !this._getIsEditorial()\n            && !this._getIsIllustrative()\n        ) {\n            return;\n        }\n\n        return (\n            <div className=\"panel-dl-stock-content-footer-bar-text panel-dl-stock-content-footer-bar-text-editorial\" data-test-id=\"editorial-chin\">\n                <span>{ translate('DL_STOCK_SEARCH_RESULT_EDITORIAL_LABEL').toLocaleUpperCase(environment.getLocale()) }</span>\n            </div>\n        );\n    }\n\n    _getChin() {\n        const isChinVisible = this._getIsFree() || this._getIsEditorial() || this._getIsPremium() || this._getIsIllustrative();\n\n        if (!isChinVisible) {\n            return;\n        }\n\n        return (\n            <div className=\"panel-dl-stock-content-footer-bar-rect\" data-test-id=\"chin-background\">\n                { this._getFreeChin() }\n                { this._getPremiumChin() }\n                { this._getEditorialChin() }\n            </div>\n        );\n    }\n\n    render() {\n        const chinClasses = ({\n            'panel-dl-stock-badge-video': this.props.asset.media_type_id === 4\n        }, 'panel-dl-stock-content-footer-bar');\n\n        return (\n            <div className={chinClasses} data-test-id=\"asset-chin\">\n                { this._getChin() }\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport StockSearchResult from './StockSearchResult';\nimport StockSearchResultChin from './StockSearchResultChin';\n\n@observer\nexport default class StockImageSearchResult extends React.Component {\n    static propTypes = {\n        asset: PropTypes.object.isRequired,\n        layout: PropTypes.shape({\n            width: PropTypes.number.isRequired,\n            height: PropTypes.number.isRequired\n        }).isRequired\n    };\n\n    render() {\n        return (\n            <StockSearchResult { ...this.props }>\n                <StockSearchResultChin asset={ this.props.asset } />\n            </StockSearchResult>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from '../configuration';\nimport { isStockAsset, getStockId, getStockSearchQuery } from 'app/js/utils/adobeStockUtils';\nimport StockImageSearchResult from 'app/js/components/stock/StockImageSearchResult';\nimport { translate } from 'app/js/managers/translationManager';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport { getElementMetadata, METADATA } from 'app/js/utils/elementMetadataUtils';\nimport { mimeLookup } from 'app/js/utils/fileUtils';\nimport { getAllAncestors } from 'app/js/utils/groupUtils';\nimport classNames from 'classnames';\nimport path from 'path';\n\nconst fallbackIcons = require.context('../../../images/fallbacks', false, /.svg$/);\n\n/**\n * Base class for element configurations (e.g. images, text styles, colors etc.).\n * All element configurations should inherit from this base class.\n */\nexport default class BaseElementConfig {\n\n    constructor(config) {\n        // We provide access to the elementConfiguration via _config.\n        // Sub-classes should use this rather than importing elementConfiguration.\n        this._config = config;\n    }\n\n    /**\n     * Type of the element - this should be overridden by the subclass.\n     */\n    type = undefined;\n\n    /**\n     * Translation key to use for the name of the element type (appears as the header for the section)\n     */\n    typeName = undefined;\n\n    /**\n     * Translation key to use for the name of the element type (appears in the element)\n     */\n    typeNameSingular = undefined;\n\n    /**\n     * Size of the thumbnails to use.\n     */\n    thumbnailSize = undefined;\n\n    /**\n     * String describing the drag type of the element (used in the drag data while dragging).\n     */\n    dragType = undefined;\n\n    /**\n     * Whether the element is allowed to not have a name. Right now, only colors are allowed to (we used to allow blank names\n     * for character styles as well, but not any more).\n     */\n    allowBlankName = false;\n\n    /**\n     * Whether the element can be dragged, even if it doesn't have a usable representation (in which case,\n     * we fall back to the full-size rendition).\n     */\n    allowDragWithoutUsableRepresentation = false;\n\n    /**\n     * By default, external links (e.g. for stock elements) will be downloaded - you can turn this off for some element type\n     * (like video), to support on-demand downloading.\n     *\n     * TODO: We should be able to get this information from the libraries API, rather than duplicating it here.\n     */\n    autoDownloadExternalLinks = true;\n\n    /**\n     * React component to use for the rendering an element - subclasses should define the specific renderer they want to use.\n     */\n    component;\n\n    /**\n     * React component to use for the rendering a Stock search result - subclasses should override this if a customization is needed.\n     */\n    stockComponent = StockImageSearchResult;\n\n    /**\n     * Grid size type of the element renderer in the grid view\n     */\n    gridSizeType = configuration.GRID_TYPE_LARGE;\n\n    /**\n     * Specify an edit operation for the element type\n     *\n     * TODO: should we just call this editOperation?\n     */\n    // defaultEditOperation(element) {\n    //     ... edit the element\n    // }\n\n    /**\n     * Override this to provide the name of the auto group that should contain this element type.\n     * This is based off the {@link https://wiki.corp.adobe.com/pages/viewpage.action?spaceKey=ccexperience&title=Custom+Groups+in+Library+Panel#CustomGroupsinLibraryPanel-UpdatedTaxonomyGreenFinal \"Updated Taxonomy.\"}\n     * @returns {string}\n     */\n    getAutoGroupName() { return 'DL_AUTOGROUP_UNKNOWN'; }\n\n    getAdditionalTooltipData(element) {\n        // Note: If configuration.currentProduct is undefined in unit tests, then you need to add the currentProduct property.\n\n        if (this.isDisabled(element)) {\n            return { disabledMessage: 'DL_ERROR_UNSUPPORTED_' + configuration.currentProduct.config.translationSuffix };\n        }\n    }\n\n    formatTooltipContent(tooltipData) {\n        const {\n            name,\n            group,\n            createdIn,\n            representationType,\n            dimensions,\n            filesize,\n            disabledMessage,\n            isStockAsset,\n            stockId,\n            isLicensed,\n            description\n        } = tooltipData;\n\n        return [\n            name,\n            group,\n            createdIn && `${translate('DL_CREATED_IN')} ${translate(createdIn)}`,\n            representationType && `${translate('DL_TYPE')} ${representationType}`,\n            disabledMessage && translate(disabledMessage),\n            dimensions,\n            filesize,\n            isStockAsset && `${translate('DL_ADOBE_STOCK_PHOTO')}: ${stockId}`,\n            isStockAsset && (isLicensed ? translate('DL_LICENSED') : translate('DL_UNLICENSED')),\n            description && { divider: true },\n            description\n        ];\n    }\n\n    /**\n     * Search the given element with the given search strings. By default it searches the name, and\n     * description, group name, and any stock search queries attached to the element.\n     *\n     * Returns true if the element matches the search query, otherwise false.\n     *\n     * For elements that require additional data to be searched, implement `searchAdditionalElementData`\n     *\n     * @param {ElementModel} element\n     * @param {string[]} searchStrings - the search queries\n     * @returns {boolean} whether the element satisfies the search query.\n     */\n    search(element, searchStrings) {\n        const name = element.name && element.name.toLowerCase();\n        const description = element.description && element.description.toLowerCase();\n        const group = element.getGroups()[0];\n        const groupNames = group && [ group, ...getAllAncestors(group) ].map(g => g.name.toLowerCase());\n        const stockId = getStockId(element);\n\n        let stockSearchQuery = getStockSearchQuery(element);\n        stockSearchQuery = stockSearchQuery && stockSearchQuery.toLowerCase();\n\n        // Use a loop to avoid creating functions while searching\n        for (let i = 0; i < searchStrings.length; i++) {\n            const searchString = searchStrings[i];\n            const matches = (name && name.includes(searchString))\n                || (description && description.includes(searchString))\n                || (groupNames && groupNames.find(g => g.includes(searchString)))\n                || (stockId && stockId.includes(searchString))\n                || (stockSearchQuery && stockSearchQuery.includes(searchString))\n                || (this.searchAdditionalElementData && this.searchAdditionalElementData(element, searchString));\n\n            if (!matches) {\n                return false;\n            }\n        }\n        // Has to match _all_ the searchStrings, to be a match!\n        return true;\n    }\n\n    /**\n     * Override this to provide additional drag data for the element, or return undefined\n     * if you don't want any drag data at all.\n     *\n     * If you _do_ provide drag data, note that common drag data (e.g. the element name etc)\n     * will always be present, so you don't need to provide this - only element-specific additional data.\n     *\n     * @param {ElementModel} element\n     */\n    getDragData(element) {\n\n        // Get the representation to use, and the path to it\n        let usableRepresentation = this._config.findUsableRepresentation(element);\n        let contentPath;\n\n        if (usableRepresentation) {\n            // will be undefined if not cached\n            contentPath = usableRepresentation.getCachedContentPath();\n        } else if (element && this.allowDragWithoutUsableRepresentation) {\n            // Fallback: use the full-size rendition if we don't have a representation we can use\n            const path = element.getCachedThumbnailPath();\n\n            if (path) {\n                contentPath = path;\n                // Dummy representation data structure for analytics\n                usableRepresentation = {\n                    type: 'image/png',\n                    element\n                };\n            }\n        }\n\n        if (contentPath) {\n            const dragData = {};\n            // Normalizing the path is needed for Premiere on Windows, which doesn't support \"..\" in paths, and is harmless for other applications\n            const normalizedPath = contentPath && !contentPath.startsWith('http') ? path.normalize(contentPath) : contentPath;\n            dragData.data = [ normalizedPath ];\n\n            // NOTE: The representation is only for analytics purposes; this will get stripped before setting the drag data\n            dragData.usedRepresentationForAnalytics = usableRepresentation;\n\n            return dragData;\n        }\n    }\n\n    /**\n     * Override this to provide apply operations for the element type\n     */\n    getApplyOperations(/*element, subElement, multiOpData*/) {\n        return [];\n    }\n\n    /**\n     * Override this to provide add operations (creating a new element of this type), based on the current layer selection.\n     */\n    getAddOperations(/*layerInfo*/) {\n        return [];\n    }\n\n    /**\n     * Override this to provide additional details that are displayed below the name of the element in the list view, e.g. for character style and paragraph styles.\n     */\n    getAdditionalElementDetails(/*element*/) {\n        return undefined;\n    }\n\n    /**\n     * Details that are displayed below the name of the element in the grid view.\n     * @param {string} mode of details to display\n     * @param {ElementModel} element\n     */\n    getGridElementDetails(mode, element) {\n        if (mode === 'type') {\n            if (AdobeStockUtils.isStockAsset(element)) {\n                return `${translate(this.typeNameSingular)}, ${translate(AdobeStockUtils.isLicensed(element) ? 'DL_LICENSED_ADOBE_STOCK' : 'DL_UNLICENSED_ADOBE_STOCK')}`;\n            }\n\n            return translate(this.typeNameSingular);\n        }\n    }\n\n    /**\n     * Override this to display a badge next to the element in the list view\n     */\n    getBadgeText(/*element*/) {\n        return undefined;\n    }\n\n    /**\n     * Override this to display element specific custom primary info in the info panel in CCD\n     * the default primary properties for all element types are the elementSize and the elementType\n     * @param {ElementModel} element\n     */\n    getCustomPanelInfoPrimaryProperties(element) {\n        return getElementMetadata(element, [\n            METADATA.elementType,\n            METADATA.elementSize\n        ]);\n    }\n\n    /**\n     * Override this to display React component to use for the rendering the custom controls section in the info panel/1up\n     */\n    getInfoControlComponent(/*element*/) {\n        return undefined;\n    }\n\n    /**\n     * Override this to display element specific custom info in the info panel in CCD\n     */\n    getCustomPanelInfoSubProperties(/*element*/) {\n        return [];\n    }\n\n    /**\n     * Override this to display element specific service properties info in the info panel in CCD\n     * if there is no override, will return stock service properties if element is stock and an empty array otherwise\n     * @param {ElementModel} element\n     */\n    getCustomServiceProperties(element) {\n        return AdobeStockUtils.getStockPanelInfo(element);\n    }\n\n    /**\n     * Override this to enable element replacement\n     */\n    getReplaceableExtensions(/*element*/) {\n        return false;\n    }\n\n    /**\n     * Override this to display a badge next to the element in the list view\n     */\n    getExtension(/*element*/) {\n        return undefined;\n    }\n\n    /**\n     * Determine whether an element supports find similar - by default this is only true if it's a stock element,\n     * but you can override this.\n     * @param {ElementModel} element\n     */\n    canFindSimilar(element) {\n        return isStockAsset(element);\n    }\n\n    /**\n     * Determine whether an element is disabled or not\n     * @param {ElementModel} element\n     */\n    isDisabled(element) {\n        return !this._config.findUsableRepresentation(element);\n    }\n\n    /**\n     * Override this to add additional CSS classes to the BaseElementView when rendering an element\n     */\n    getAdditionalClasses(/*element*/) {\n        return [];\n    }\n\n    /**\n     * Override to determine if a particular asset in the Stock search view can be dragged into the application\n     */\n    isStockAssetDraggable(/*type*/) {\n        return false;\n    }\n\n    /**\n     * Whether a stock asset is covered under the standard license or if a license of a different type is required\n     */\n    isStockMultiLicense(/*isEditorial, isPremium*/) {\n        return false;\n    }\n\n    /**\n     * An unlicensed Stock element can have a comp (i.e. a \"preview\") that a customer can use to\n     * place on their canvas or a timeline. There are potentially multiple comps per element\n     * – e.g. 4K or HD video, small or large version of an image. There are also certain Stock elements\n     * that don't have such a preview (templates, 3D objects).\n     *\n     * The mapping between a type of license that a customer is requesting and the type of comp that is\n     * available for an element is not trivial.\n     *\n     * This function translates between the requested license and a \"comp\" appropriate for that license.\n     *\n     * As a basic case, the license type and the comp is the same thing. For others (such as photos), this\n     * mapping is more complicates. See the VideoElementConfig and ImageElementConfig for those cases.\n     *\n     * @param {string} requestedLicenseType\n     * @returns {string}\n     */\n    getStockCompKeyForLicenseType(requestedLicenseType) {\n        return requestedLicenseType;\n    }\n\n    /**\n     * Override to return type specific drag data for stock derived from the element and the\n     * Stock search result. This is needed since we need this data synchronously during drag, but\n     * element creation is asynchronous.\n     */\n    getStockDragData(/*element, asset*/) {\n        return [];\n    }\n\n    /**\n     * Override to set element-specific stock metadata on a licensed representation\n     */\n    setStockMetadata(/*representation, stockData*/) {\n    }\n\n    /**\n     * Override to set element-specific backup images in case rendition is missing\n     * Otherwise it will default to Creative Cloud Icon\n     * @param {LibraryElement} element\n     * @param {string} viewMode\n     */\n    getBackupThumbnail(element, viewMode) {\n        const representation = element.getPrimaryRepresentation();\n        if (!representation) {\n            return;\n        }\n\n        const type = representation.type;\n        const typeMimeInfo = mimeLookup(element.type, type);\n\n        // use first extension as the extension image to display\n        const extension = typeMimeInfo && typeMimeInfo.exts[0].toLowerCase();\n        const disabled = this._config.isDisabled(element) && !viewMode.startsWith('thumbnail');\n        if (!extension) {\n            return;\n        }\n\n        // this resolves to something like /app/images/fallbacks/ibl_filetype_1024.svg\n        let imgSrc;\n        try {\n            imgSrc = fallbackIcons(`./${extension}_filetype_1024.svg`);\n        } catch {\n            return;\n        }\n        // set width and height in both places to ensure img is centered vertically within thumbnail\n        return (\n            <div data-test-id=\"thumbnail-failed-icon-fallback\"\n                className={ classNames(`panel-no-rendition-holder-${viewMode}`,\n                    { 'panel-thumbnail-disabled': disabled }, `panel-${ viewMode }-element-fallback`)}>\n                <img src={imgSrc} className={ `panel-${ viewMode }-element-fallback` } />\n            </div>\n        );\n    }\n\n    /**\n     * Override to specify a custom renderer for the element. Not all element types support this.\n     * This only overrides the thumbnail we render, not the rest of the chrome around the element (name, etc)\n     *\n     * Expected to return a React component that takes in element and viewMode as props.\n     */\n    getCustomRenderer(/*element*/) {\n    }\n\n    /**\n     * Override to specify an object that meaningfully embeds the primary content and or the rendition of a library element.\n     * This is useful when we need to send element data for an app to apply or preview it in a document.\n     * @returns {Object}\n     * @property {Object} primary\n     * @property {Object} rendition\n     */\n    getEmbeddedData(/*element*/) { return {}; }\n\n    /**\n     * Returns the filename for a given base name and extension.\n     *\n     * @param {string} baseName - The base name of the file.\n     * @param {string} extension - The file extension.\n     * @returns {string} The formatted filename.\n     */\n    getFilename(baseName, extension) {\n        const formattedBaseName = baseName.replace(/ +/g, '-');\n        return `${formattedBaseName}.${extension}`;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\n\nimport BaseElementView from './BaseElementView';\nimport Thumbnail from './utils/Thumbnail';\nimport classNames from 'classnames';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\n\n@observer\nexport default class BrushElementView extends React.Component {\n    static contextType = LibrariesContext;\n    static defaultProps = {\n        viewMode: 'grid'\n    };\n\n    static propTypes = {\n        ...BaseElementView.propTypes\n    };\n\n    get isInteractive() {\n        return this.props.viewMode !== 'thumbnail';\n    }\n\n    render() {\n        const classes = classNames({\n            'thumbnail-view': !this.isInteractive,\n            'interactive': this.isInteractive\n        }, 'panel-list-brush-item-thumb');\n        return (\n            <BaseElementView { ...this.props }>\n                {\n                    [ 'list', 'thumbnail' ].includes(this.props.viewMode) ? (\n                        <div className={ classes }>\n                            <Thumbnail element={ this.props.element } viewMode={ this.props.viewMode } className=\"panel-list-brush-item\" thumbnailType= { this.context.viewState.thumbnailType }/>\n                        </div>\n                    ) : <Thumbnail className={ `panel-${ this.props.viewMode }-item-background` } element={ this.props.element } viewMode={ this.props.viewMode } thumbnailType= { this.context.viewState.thumbnailType }/>\n                }\n            </BaseElementView>\n        );\n    }\n}\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2013 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\nimport configuration from '../configuration';\nimport BaseElementConfig from './BaseElementConfig';\nimport { translate } from 'app/js/managers/translationManager';\nimport BrushElementView from 'app/js/components/elements/BrushElementView';\n\nconst brushTypeNames = {\n    'application/vnd.adobe.scatter.brush+zip': 'DL_BRUSHTYPE_SCATTER',\n    'application/vnd.adobe.vector.brush+zip': 'DL_BRUSHTYPE_VECTOR',\n    'application/vnd.adobe.ribbon.brush+zip': 'DL_BRUSHTYPE_RIBBON',\n    'image/x-adobe-photoshop-brush': 'DL_BRUSHTYPE_SCATTER'\n};\n\n/**\n * Configuration for brush elements.\n */\nexport default class BrushElementConfig extends BaseElementConfig {\n\n    type = configuration.BRUSH_ELEMENT_TYPE;\n    typeName = 'DL_TYPE_BRUSH';\n    typeNameSingular = 'DL_TYPE_BRUSH_SINGULAR';\n    thumbnailSize = configuration.BRUSH_THUMBNAIL_SIZE;\n\n    gridSizeType = configuration.GRID_TYPE_MEDIUM;\n\n    component = BrushElementView;\n\n    getAutoGroupName() { return 'DL_AUTOGROUP_BRUSHES'; }\n\n    getAdditionalTooltipData(element) {\n        const data = {};\n\n        const primaryRepresentation = element.getPrimaryRepresentation();\n        if (primaryRepresentation && primaryRepresentation.type) {\n            data.brushType = brushTypeNames[primaryRepresentation.type];\n        }\n\n        if (!this._config.findUsableRepresentation(element)) {\n            data.disabledMessage = 'DL_ERROR_BRUSH_NOT_SUPPORTED_' + configuration.currentProduct.config.translationSuffix;\n        }\n        return data;\n    }\n\n    formatTooltipContent(tooltipData) {\n        const {\n            name,\n            group,\n            brushType,\n            disabledMessage,\n            description\n        } = tooltipData;\n\n        return [\n            name,\n            group,\n            brushType && translate(brushType),\n            disabledMessage && translate(disabledMessage),\n            description && { divider: true },\n            description\n        ];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from '../configuration';\nimport BaseElementConfig from './BaseElementConfig';\nimport * as ColorUtils from 'app/js/utils/colorUtils';\nimport { createElementExtraMetrics } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport environment from 'app/js/environment';\nimport { createElementFromData } from 'app/js/utils/addElementUtils';\n\nimport ColorElementView from 'app/js/components/elements/ColorElementView';\n\n/**\n * Configuration for color elements.\n */\nexport default class ColorElementConfig extends BaseElementConfig {\n\n    type = configuration.COLOR_ELEMENT_TYPE;\n    typeName = 'DL_TYPE_COLOR';\n    typeNameSingular = 'DL_TYPE_COLOR_SINGULAR';\n\n    // Colors are allowed to have blank names (we fall back to the hex value)\n    allowBlankName = true;\n\n    gridSizeType = configuration.GRID_TYPE_SMALL;\n\n    component = ColorElementView;\n\n    getAutoGroupName() { return 'DL_AUTOGROUP_COLORS'; }\n\n    _createColor(color, library, opType) {\n        let name = color.name;\n        if (!name && color.data[0] && color.data[0].type && color.data[0].type === 'spot') {\n            name = color.data[0].spotColorName;\n        }\n        name = name || '';\n\n        const newElement = createElementExtraMetrics(library, name, configuration.COLOR_ELEMENT_TYPE, {\n            opType\n        });\n        color.data.forEach((rep, index) => {\n            const relationship = index === 0 ? 'primary' : 'rendition';\n            const newRepresentation = newElement.createRepresentation(configuration.COLOR_REPRESENTATION_TYPE, relationship);\n            newRepresentation.setValue(configuration.COLOR_NAMESPACE, configuration.COLOR_DATA_KEY, rep);\n        });\n\n        newElement.endOperation();\n        return Promise.resolve(newElement);\n    }\n\n    _getColorData(element) {\n        const representation = element.getPrimaryRepresentation();\n        return representation?.getValue(configuration.COLOR_NAMESPACE, configuration.COLOR_DATA_KEY);\n    }\n\n    getAddOperations(layerInfo) {\n\n        // Check if there are any colors to add\n        if (!layerInfo || !layerInfo.colors || layerInfo.colors.length === 0) {\n            return [];\n        }\n\n        return layerInfo.colors.filter(c => c.data).map(colorObject => {\n            const color = colorObject.data;\n            return {\n                name: 'DL_ADD_COLOR_NAME_' + colorObject.colorType,\n                style: {\n                    // This is used in the '+' (add) button menu to draw a box of the color swatch that can be added\n                    backgroundColor: ColorUtils.colorDataToHexString(color),\n                    border: '1px solid',\n                    width: '14px',\n                    height: '14px',\n                    margin: '1px 6px 1px 0px'\n                },\n                apply: (library, opType) => this._createColor(colorObject, library, opType)\n            };\n        });\n    }\n\n    searchAdditionalElementData(element, searchString) {\n        let color = ColorUtils.getRGBColor(element);\n        color = color && ColorUtils.colorDataToHexString(color).toLowerCase();\n        return color && color.includes(searchString);\n    }\n\n    getAdditionalTooltipData(element) {\n        const data = {};\n\n        // Do the primary representation\n        const color = this._getColorData(element);\n        if (color) {\n            data.primaryValue = ColorUtils.getStringColorValue(color);\n            data.opacity = color.alpha;\n            data.spotColorName = color.spotColorName;\n        }\n\n        // Do the RGB representation\n        const rgbColor = ColorUtils.getRGBColor(element);\n        if (rgbColor) {\n            data.hexValue = ColorUtils.colorDataToHexString(rgbColor).toUpperCase();\n        }\n\n        return data;\n    }\n\n    getCustomPanelInfoSubProperties(element) {\n        const colors = element.representations\n            .filter(representation => representation.type === 'application/vnd.adobe.color+json')\n            .map(representation => representation ? representation.getValue('color', 'data') : null);\n        return ColorUtils.getAllColorValues(colors);\n    }\n\n    formatTooltipContent(tooltipData) {\n        const opacity = tooltipData.opacity !== undefined && translate('DL_PERCENTAGE', {\n            percent: Math.round(tooltipData.opacity * 100)\n        });\n\n        const {\n            name,\n            group,\n            spotColorName,\n            hexValue,\n            primaryValue,\n            description,\n        } = tooltipData;\n\n        return [\n            !(hexValue === name) && name,\n            spotColorName && `${translate('DL_SPOT_COLOR')} ${spotColorName}`,\n            hexValue,\n            group,\n            primaryValue,\n            opacity && `${translate('DL_OPACITY')} ${opacity}`,\n            description && { divider: true },\n            description\n        ];\n    }\n\n    getAdditionalClasses(element) {\n        const background = environment.getHostEnvironment().appSkinInfo.panelBackgroundColor.color;\n        const color = ColorUtils.getRGBColor(element);\n        if (color) {\n            const contrast = ColorUtils.getContrast(ColorUtils.colorDataToRGB(color), background);\n            return contrast <= configuration.CONTRAST_THRESHOLD ? [ 'contrast' ] : [];\n        }\n        return [];\n    }\n\n    getEmbeddedData(element) {\n        const primary = this._getColorData(element);\n        const rendition = ColorUtils.getRGBColor(element);\n        return { primary, rendition };\n    }\n\n    /**\n     * Create an element and its representations (given representations data from a LIBRARIES_MESSAGES.RECEIVE_UPDATE message)\n     * In general this will be asynchronous (only colors and gradients can be synchronously created), so we keep the pattern of returning a promise.\n     * @param {Object} elementData\n     * @param {Library} library\n     * @param {Object} extraMetrics\n     * @returns {Promise} resolves to the element\n     */\n    createElement(elementData, library, extraMetrics) {\n        const representations = elementData.representations.map(({ type, content, ...rest }) => ({\n            type: type || configuration.COLOR_REPRESENTATION_TYPE,\n            customData: [ {\n                namespace: configuration.COLOR_NAMESPACE,\n                key: configuration.COLOR_DATA_KEY,\n                value: content\n            } ],\n            ...rest\n        }));\n        return createElementFromData({ ...elementData, representations }, library, extraMetrics);\n    }\n\n    /**\n     * Update a given element's representations (given representations data from a LIBRARIES_MESSAGES.RECEIVE_UPDATE message)\n     * @param {Object} elementData\n     * @param {Library} library\n     * @returns {Promise} resolves to the element\n     */\n    updateElement(elementData, library) {\n        const element = library.getElementById(elementData.id);\n        element.beginOperation();\n        if (elementData.representations) { // Need to check for new representations before we remove the existing ones\n            element.removeAllRepresentations();\n\n            elementData.representations.forEach((rep) => {\n                const { type, content, relationship } = rep;\n                const newRepresentation = element.createRepresentation(type, relationship);\n                newRepresentation.setValue(configuration.COLOR_NAMESPACE, configuration.COLOR_DATA_KEY, content);\n            });\n        }\n\n        element.endOperation();\n        return Promise.resolve(element);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { computed, observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport classNames from 'classnames';\nimport * as ColorUtils from 'app/js/utils/colorUtils';\nimport ElementModel from 'app/js/models/ElementModel';\nimport BaseInfoPanelController from 'app/js/components/BaseInfoPanelController';\nimport PropTypes from 'prop-types';\nimport { LibrariesContext } from '../state/LibrariesContext';\n\n@observer\nexport default class ColorThemeController extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        element: PropTypes.instanceOf(ElementModel).isRequired\n    };\n\n    componentDidMount = () => {\n        if (this.context.viewState.isOneUpMode()) {\n            this.context.viewState.setOneUpSubElement(this.controllerData[this.currentColorIndex].swatch);\n        }\n    };\n\n    @observable currentColorIndex = 0;\n\n    onColorChange = (index) => {\n        this.currentColorIndex = index;\n        if (this.context.viewState.isOneUpMode()) {\n            this.context.viewState.setOneUpSubElement(this.controllerData[index].swatch);\n        }\n    }\n\n    get displayBar() {\n        const colors = this.controllerData.map((color, index) => {\n            const classes = classNames('info-panel-controller-nav-item', { selected: this.currentColorIndex === index });\n            return <div className=\"info-panel-controller-nav-item-wrapper\"\n                onClick={ () => this.onColorChange(index) }\n                data-test-id={ `info-panel-controller-color-theme-block-button-${index}`}\n                key={ `color-${index.toString()}` } >\n                <div className={ classes }\n                    data-test-id={ `info-panel-controller-color-theme-block-${index}`}\n                    style={ { backgroundColor: color.hex } } />\n            </div>;\n        });\n        return <div className=\"info-panel-controller-nav\">\n            { colors }\n        </div>;\n    }\n\n    @computed get controllerData() {\n        return ColorUtils.getColorThemeData(this.props.element);\n    }\n\n    render() {\n        return <BaseInfoPanelController\n            currentStopIndex={ this.controllerData.length < this.currentColorIndex ? 0 : this.currentColorIndex }\n            onChange={ pageNumber => this.onColorChange(pageNumber - 1) }\n            displayBar={ this.displayBar }\n            controllerData={ this.controllerData }\n            stopLabel=\"DL_INFO_COLOR_STOP\" />;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from '../configuration';\nimport BaseElementConfig from './BaseElementConfig';\nimport * as ColorUtils from 'app/js/utils/colorUtils';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\n\nimport ColorThemeElementView from 'app/js/components/elements/ColorThemeElementView';\nimport ColorThemeController from 'app/js/components/ColorThemeController';\n\n/**\n * Configuration for color theme elements.\n */\nexport default class ColorThemeElementConfig extends BaseElementConfig {\n\n    type = configuration.COLOR_THEME_ELEMENT_TYPE;\n    typeName = 'DL_TYPE_COLOR_THEME';\n    typeNameSingular = 'DL_TYPE_COLOR_THEME_SINGULAR';\n\n    gridSizeType = configuration.GRID_TYPE_WIDE;\n\n    component = ColorThemeElementView;\n\n    getAutoGroupName() { return 'DL_AUTOGROUP_COLORS'; }\n\n    getApplyOperations(element, subElement) {\n\n        if (!element || !subElement) {\n            return [];\n        }\n\n        // Inherit operations for colours, but apply to subElement (colour data)\n        const colorOps = this._config.getApplyOperations({\n            type: configuration.COLOR_ELEMENT_TYPE,\n            library: element.library,\n            getPrimaryRepresentation: () => element.getPrimaryRepresentation()\n        }, subElement);\n\n        return colorOps.map(op => ({\n            name: op.name,\n            icon: op.icon,\n            displayInMenu: op.displayInMenu,\n            onClick: op.onClick,\n            apply: () => op.apply(subElement, operation => {\n                const representation = this._config.findUsableRepresentation(element);\n                if (representation) {\n                    reportApplyMetric(representation, operation);\n                }\n            })\n        }));\n    }\n\n    searchAdditionalElementData(element, searchString) {\n        const representation = this._config.findUsableRepresentation(element);\n        const colortheme = representation && representation.getValue('colortheme', 'data');\n\n        if (colortheme && Array.isArray(colortheme.swatches)) {\n            for (let i = 0; i < colortheme.swatches.length; i++) {\n                const color = colortheme.swatches[i];\n                const colorString = ColorUtils.colorDataToHexString(color).toLowerCase();\n                if (colorString.includes(searchString)) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n\n    // @param {Array} subElement - the swatch is an array with one or two objects for RGB and CMYK\n    getAdditionalTooltipData(element, subElement) {\n        if (!subElement) { return {}; }\n        const data = {};\n\n        data.spotColorName = subElement[0] && subElement[0].spotColorName;\n        data.hexValue = ColorUtils.colorDataToHexString(subElement).toUpperCase();\n        data.primaryValue = ColorUtils.getStringColorValue(subElement[0]);\n        data.description = element.description;\n\n        if (!this._config.findUsableRepresentation(element)) {\n            data.disabledMessage = 'DL_ERROR_UNSUPPORTED_' + configuration.currentProduct.config.translationSuffix;\n        }\n        return data;\n    }\n\n    getInfoControlComponent() {\n        return ColorThemeController;\n    }\n\n    formatTooltipContent(tooltipData) {\n        return [\n            tooltipData.name,\n            tooltipData.group,\n            tooltipData.spotColorName && `${translate('DL_SPOT_COLOR')} ${tooltipData.spotColorName}`,\n            tooltipData.hexValue,\n            tooltipData.primaryValue,\n            tooltipData.disabledMessage && translate(tooltipData.disabledMessage),\n            tooltipData.description && { divider: true },\n            tooltipData.description\n        ];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from '../configuration';\nimport BaseElementConfig from './BaseElementConfig';\nimport { translate } from 'app/js/managers/translationManager';\nimport {\n    getPrimaryRepresentationBadge,\n    getPrimaryRepresentationExtension,\n    isVector\n} from 'app/js/utils/libraryUtils';\n\nimport ThumbnailElementView from 'app/js/components/elements/ThumbnailElementView';\n\nexport default class ComponentElementConfig extends BaseElementConfig {\n\n    type = configuration.COMPONENT_ELEMENT_TYPE;\n    typeName = 'DL_TYPE_COMPONENT';\n    typeNameSingular = 'DL_TYPE_COMPONENT_SINGULAR';\n    thumbnailSize = configuration.COMPONENT_THUMBNAIL_SIZE;\n\n    component = ThumbnailElementView;\n\n    getAutoGroupName(element) {\n        return isVector(element) ? 'DL_AUTOGROUP_VECTORS' : 'DL_AUTOGROUP_IMAGES';\n    }\n\n    formatTooltipContent(tooltipData) {\n        const {\n            name,\n            group,\n            createdIn,\n            representationType,\n            filesize,\n            disabledMessage,\n            description,\n            instances\n        } = tooltipData;\n\n        return [\n            name,\n            group,\n            createdIn && `${translate('DL_CREATED_IN')} ${translate(createdIn)}`,\n            representationType && `${translate('DL_TYPE')} ${representationType}`,\n            filesize,\n            disabledMessage && translate(disabledMessage),\n            description && { divider: true },\n            description,\n            instances\n        ];\n    }\n\n    getBadgeText(element) {\n        return getPrimaryRepresentationBadge(element);\n    }\n\n    getExtension(element) {\n        return getPrimaryRepresentationExtension(element);\n    }\n\n    canFindSimilar() {\n        return false;\n    }\n\n    getAdditionalTooltipData(element) {\n        const data = {};\n\n        if (!this._config.findUsableRepresentation(element)) {\n            data.disabledMessage = 'DL_ERROR_UNSUPPORTED_' + configuration.currentProduct.config.translationSuffix;\n        }\n        return data;\n    }\n\n    // Components by default inherit the same apply operations and drag behavior as graphics, otherwise\n    // they won't work in other apps besides XD. This should change when we properly implement multi-state components.\n\n    getApplyOperations(element) {\n        if (!element) { return []; }\n        return this._config.getApplyOperations(element, undefined, configuration.IMAGE_ELEMENT_TYPE);\n    }\n\n    getDragData(element) {\n        return this._config.getDragData(element, true, configuration.IMAGE_ELEMENT_TYPE);\n    }\n}\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2017 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\nimport configuration from '../configuration';\nimport BaseElementConfig from './BaseElementConfig';\nimport { translate } from 'app/js/managers/translationManager';\nimport StockElementView from 'app/js/components/elements/StockElementView';\nimport { getElementMetadata, METADATA } from 'app/js/utils/elementMetadataUtils';\nimport path from 'path';\n\n/**\n * Configuration for capsule (MOGRT) elements.\n */\nexport default class CapsuleElementConfig extends BaseElementConfig {\n\n    type = configuration.CAPSULE_ELEMENT_TYPE;\n    typeName = 'DL_TYPE_CAPSULE';\n    typeNameSingular = 'DL_TYPE_CAPSULE_SINGULAR';\n    thumbnailSize = configuration.CAPSULE_THUMBNAIL_SIZE;\n\n    dragType = 'capsule';\n\n    component = StockElementView;\n\n    getAutoGroupName() { return 'DL_AUTOGROUP_TEMPLATES'; }\n\n    getAdditionalTooltipData(element) {\n        const data = {};\n        if (!this._config.findUsableRepresentation(element)) {\n            data.disabledMessage = 'DL_ERROR_CAPSULE_NOT_SUPPORTED_' + configuration.currentProduct.config.translationSuffix;\n        }\n        return data;\n    }\n\n    getDragData(element) {\n        const dragData = super.getDragData(element);\n        if (!dragData) {\n            return;\n        }\n\n        // Get the JSON representation\n        // Note: This should never have been allowed - it violates the principle that all representations\n        // should be self-contained. Now we have to deal with this forever, grrrrrr >_<\n        const jsonRepresentation = this._config.findUsableRepresentation(element, configuration.CAPSULE_DEFINITION_REPRESENTATION_TYPE);\n        if (jsonRepresentation) {\n            // will return undefined if not cached\n            const jsonPath = jsonRepresentation.getCachedContentPath();\n            // Normalizing the path is needed for Premiere on Windows, which doesn't support \"..\" in paths, and is harmless for other applications\n            const normalizedPath = jsonPath.startsWith && !jsonPath.startsWith('http') ? path.normalize(jsonPath) : jsonPath;\n            if (normalizedPath) {\n                dragData.json = [ normalizedPath ];\n            }\n        }\n\n        return dragData;\n    }\n\n    formatTooltipContent(tooltipData) {\n        const {\n            name,\n            group,\n            createdIn,\n            duration,\n            filesize,\n            isStockAsset,\n            stockId,\n            isLicensed,\n            disabledMessage,\n            description\n        } = tooltipData;\n\n        return [\n            name,\n            group,\n            createdIn && `${translate('DL_CREATED_IN')} ${translate(createdIn)}`,\n            duration,\n            filesize,\n            isStockAsset && `${translate('DL_ADOBE_STOCK_CAPSULE')}: ${stockId}`,\n            isStockAsset && (isLicensed ? translate('DL_LICENSED') : translate('DL_UNLICENSED')),\n            disabledMessage && translate(disabledMessage),\n            description && { divider: true },\n            description\n        ];\n    }\n\n    // Stock doesn't currently support find-similar for capsules\n    canFindSimilar() {\n        return false;\n    }\n\n    setStockMetadata(representation, stockData) {\n        if (stockData.duration || stockData.filesize) {\n            representation.setValue(configuration.CAPSULE_NAMESPACE, configuration.CAPSULE_DATA_KEY, {\n                duration: stockData.duration,\n                contentLength: stockData.filesize\n            });\n        }\n    }\n\n    getCustomPanelInfoSubProperties(element) {\n        return getElementMetadata(element, [\n            METADATA.dimensions,\n            METADATA.capsuleFramesPerSecond,\n            METADATA.capsuleDuration\n        ]);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from '../configuration';\nimport BaseElementConfig from './BaseElementConfig';\nimport BasicThumbnailElementView from 'app/js/components/elements/BasicThumbnailElementView';\n\n/**\n * Configuration for channel elements.\n */\nexport default class ChannelElementConfig extends BaseElementConfig {\n\n    type = configuration.CHANNEL_ELEMENT_TYPE;\n    typeName = 'DL_TYPE_CHANNEL';\n    typeNameSingular = 'DL_TYPE_CHANNEL_SINGULAR';\n\n    gridSizeType = configuration.GRID_TYPE_SMALL;\n    thumbnailSize = configuration.AUDIO_THUMBNAIL_SIZE;\n\n    component = BasicThumbnailElementView;\n\n    getAutoGroupName() { return 'DL_AUTOGROUP_UNKNOWN'; }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from '../configuration';\nimport BaseElementConfig from './BaseElementConfig';\nimport BasicThumbnailElementView from 'app/js/components/elements/BasicThumbnailElementView';\n\n/**\n * Configuration for image guideline elements.\n */\nexport default class ImageGuidelineElementConfig extends BaseElementConfig {\n\n    type = configuration.IMAGE_GUIDELINE_ELEMENT_TYPE;\n    typeName = 'DL_TYPE_IMAGE_GUIDELINE';\n    typeNameSingular = 'DL_TYPE_IMAGE_GUIDELINE_SINGULAR';\n\n    gridSizeType = configuration.GRID_TYPE_SMALL;\n    thumbnailSize = configuration.AUDIO_THUMBNAIL_SIZE;\n\n    component = BasicThumbnailElementView;\n\n    getAutoGroupName() { return 'DL_AUTOGROUP_UNKNOWN'; }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from '../configuration';\nimport BaseElementConfig from './BaseElementConfig';\nimport { translate } from 'app/js/managers/translationManager';\n\nimport ThumbnailElementView from 'app/js/components/elements/ThumbnailElementView';\n\n/**\n * Configuration for unsupported elements.\n */\nexport default class UnsupportedElementConfig extends BaseElementConfig {\n\n    type = '*';\n    typeName = 'DL_TYPE_UNKNOWN';\n    typeNameSingular = 'DL_TYPE_UNKNOWN';\n    thumbnailSize = 82; // TODO: high dpi?\n\n    gridSizeType = configuration.GRID_TYPE_LARGE;\n\n    component = ThumbnailElementView;\n\n    getAdditionalTooltipData() {\n        return {\n            disabledMessage: 'DL_ERROR_UNSUPPORTED_' + configuration.currentProduct.config.translationSuffix\n        };\n    }\n\n    formatTooltipContent(tooltipData) {\n        return [\n            translate(tooltipData.disabledMessage),\n            tooltipData.description && { divider: true },\n            tooltipData.description\n        ];\n    }\n}\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2018 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\n// Useful way of importing all the default element configurations, so you don't need to import them one-by-one\n// (most products only override a subset of the element types)\n\nimport AnimationElementConfig from './AnimationElementConfig';\nimport BrushElementConfig from './BrushElementConfig';\nimport CapsuleElementConfig from './CapsuleElementConfig';\nimport ChannelElementConfig from './ChannelElementConfig';\nimport ColorElementConfig from './ColorElementConfig';\nimport ColorThemeElementConfig from './ColorThemeElementConfig';\nimport GradientElementConfig from './GradientElementConfig';\nimport ImageElementConfig from './ImageElementConfig';\nimport ImageGuidelineElementConfig from './ImageGuidelineElementConfig';\nimport LayerStyleElementConfig from './LayerStyleElementConfig';\nimport LightElementConfig from './LightElementConfig';\nimport LookElementConfig from './LookElementConfig';\nimport MaterialElementConfig from './MaterialElementConfig';\nimport ParagraphStyleElementConfig from './ParagraphStyleElementConfig';\nimport PatternElementConfig from './PatternElementConfig';\nimport TemplateElementConfig from './TemplateElementConfig';\nimport TextElementConfig from './TextElementConfig';\nimport TextStyleElementConfig from './TextStyleElementConfig';\nimport ThreeDElementConfig from './ThreeDElementConfig';\nimport UnsupportedElementConfig from './UnsupportedElementConfig';\nimport VideoElementConfig from './VideoElementConfig';\nimport ComponentElementConfig from './ComponentElementConfig';\nimport AudioElementConfig from './AudioElementConfig';\nimport FontElementConfig from './FontElementConfig';\n\nexport default {\n    AnimationElementConfig,\n    AudioElementConfig,\n    BrushElementConfig,\n    CapsuleElementConfig,\n    ChannelElementConfig,\n    ColorElementConfig,\n    ColorThemeElementConfig,\n    ComponentElementConfig,\n    GradientElementConfig,\n    ImageElementConfig,\n    ImageGuidelineElementConfig,\n    LayerStyleElementConfig,\n    LightElementConfig,\n    LookElementConfig,\n    MaterialElementConfig,\n    ParagraphStyleElementConfig,\n    PatternElementConfig,\n    TemplateElementConfig,\n    TextElementConfig,\n    TextStyleElementConfig,\n    FontElementConfig,\n    ThreeDElementConfig,\n    UnsupportedElementConfig,\n    VideoElementConfig\n};\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from '../configuration';\nimport BaseElementConfig from './BaseElementConfig';\nimport * as TextStyleUtils from 'app/js/utils/textstyleUtils';\nimport TextStyleElementView from 'app/js/components/elements/TextStyleElementView';\nimport { getCustomServiceProperties } from 'app/js/utils/typekitUtils';\nimport { getElementMetadata, METADATA } from 'app/js/utils/elementMetadataUtils';\nimport { createElementFromData, getFileFromRepresentationData } from 'app/js/utils/addElementUtils';\n\nconst STYLE_NAMESPACE = 'font';\nconst STYLE_DATA_KEY = 'data';\n\nconst STYLE_REPRESENTATION_TYPE = 'application/vnd.adobe.font+json';\n\n/**\n * Configuration for font elements.\n */\nexport default class FontElementConfig extends BaseElementConfig {\n\n    type = configuration.FONT_ELEMENT_TYPE;\n    typeName = 'DL_TYPE_FONT';\n    typeNameSingular = 'DL_TYPE_FONT_SINGULAR';\n    thumbnailSize = configuration.FONT_THUMBNAIL_SIZE;\n\n    gridSizeType = configuration.GRID_TYPE_MEDIUM;\n\n    component = TextStyleElementView;\n\n    getAutoGroupName() { return 'DL_AUTOGROUP_TYPOGRAPHY'; }\n\n    getAddOperations(layerInfo) {\n\n        if (!layerInfo || !layerInfo.text || !layerInfo.fontInfo) {\n            return [];\n        }\n\n        // TODO\n        return [];\n    }\n\n    _getStyleData(element, wrapAsCharacterStyle) {\n        const representation = this._config.findUsableRepresentation(element, STYLE_REPRESENTATION_TYPE);\n        const style = representation && representation.getValue(STYLE_NAMESPACE, STYLE_DATA_KEY);\n        return style && wrapAsCharacterStyle ? { adbeFont: style } : style;\n    }\n\n    searchAdditionalElementData(element, searchString) {\n        const style = this._getStyleData(element);\n        const fontFamily = style && style.family && style.family.toLowerCase();\n        const fontStyle = style && style.style && style.style.toLowerCase();\n\n        return (fontFamily && fontFamily.includes(searchString))\n            || (fontStyle && fontStyle.includes(searchString));\n    }\n\n    getAdditionalTooltipData(element) {\n        const style = this._getStyleData(element, true);\n        return TextStyleUtils.getAdditionalTooltipData(style);\n    }\n\n    getAdditionalElementDetails(element) {\n        const style = this._getStyleData(element, true);\n        if (style) {\n            const styleProperties = TextStyleUtils.getStyleProperties(style);\n            return styleProperties.join(', ');\n        }\n    }\n\n    formatTooltipContent(tooltipData) {\n        return TextStyleUtils.formatTooltipContent(tooltipData);\n    }\n\n    getCustomServiceProperties(element) {\n        return getCustomServiceProperties(element);\n    }\n\n    getCustomPanelInfoSubProperties(element) {\n        return getElementMetadata(element, [\n            METADATA.fontFamily,\n            METADATA.fontStyle\n        ]);\n    }\n\n    getEmbeddedData(element) {\n        const primary = this._getStyleData(element);\n        return { primary };\n    }\n\n    _formatRepresentationDataFromPicker(elementData) {\n        elementData.representations = elementData.representations || [];\n        return elementData.representations.map(({ type, content, ...rest }) => {\n            let customData;\n            if (type === configuration.FONT_REPRESENTATION_TYPE) {\n                customData = [ {\n                    namespace: configuration.FONT_NAMESPACE,\n                    key: configuration.FONT_DATA_KEY,\n                    value: content // possible fields: postScriptName, name, family, style, localizedName, localizedFamily, localizedStyle, typekitFontId, byofFontId, foundry, designer\n                } ];\n            }\n\n            return {\n                type: type || configuration.FONT_REPRESENTATION_TYPE,\n                customData,\n                content: customData ? undefined : content,\n                ...rest\n            };\n        });\n    }\n\n    /**\n     * Create an element and its representations (given representations data from a LIBRARIES_MESSAGES.RECEIVE_UPDATE message)\n     * In general this will be asynchronous (only colors and gradients can be synchronously created), so we keep the pattern of returning a promise.\n     * @param {Object} elementData // { name, type, representations }. Example representation: { type, relationship, content | content URL}. Content = Object, File, or Blob.\n     * @param {Library} library\n     * @param {Object} extraMetrics\n     * @returns {Promise} resolves to the element\n     */\n    createElement(elementData, library, extraMetrics) {\n        elementData.name = undefined; // We want a newly created element to be considered autonamed, which means it has no name and pulls the name from the representation data.\n        // Reformat representation data from message payload to separate out content types: customData, or File/Blob. contentURL is separate property already.\n        // Font elements should have 2 representations: the primary representation with JSON content, and the rendition with binary data content.\n        const representations = this._formatRepresentationDataFromPicker(elementData);\n        return createElementFromData({ ...elementData, representations }, library, extraMetrics);\n    }\n\n    /**\n     * Update a element's representations (given representations data from a LIBRARIES_MESSAGES.RECEIVE_UPDATE message)\n     * @param {Object} elementData // { name, type, representations }. Example representation: { type, relationship, content | content URL}. Content = Object, File, or Blob.\n     * @param {Library} library\n     * @returns {Promise} resolves to the element\n     */\n    async updateElement(elementData, library) {\n        const element = library.getElementById(elementData.id);\n        elementData.representations = this._formatRepresentationDataFromPicker(elementData);\n        if (elementData.representations.length) { // Need to check for new representations before we remove the existing ones\n\n            await Promise.all(elementData.representations.map(async (representationData) => {\n                const file = await getFileFromRepresentationData(representationData);\n                if (file) {\n                    // returns a path to the unreferenced DCX component\n                    // the file.type may be incorrect, so pass the preferred type for the representation as well\n                    representationData.stagedData = await library.stageRepresentationForCommit(file, representationData.type);\n                }\n            }));\n\n            element.beginOperation();\n            element.removeAllRepresentations();\n            if (elementData.roles) {\n                element.roles = elementData.roles;\n            }\n            if (elementData.customData) {\n                elementData.customData.forEach(({ namespace, key, value }) => element.setValue(namespace, key, value));\n            }\n            await Promise.all(elementData.representations.map(async (representationData) => {\n                const newRepresentation = element.createRepresentation(representationData.type || configuration.FONT_REPRESENTATION_TYPE, representationData.relationship);\n                if (representationData.stagedData) {\n                    // link representation to the previously uploaded DCX component\n                    await newRepresentation.setStagedContent(representationData.stagedData);\n                }\n                if (representationData.customData) {\n                    representationData.customData.forEach(({ namespace, key, value }) => newRepresentation.setValue(namespace, key, value));\n                }\n            }));\n            element.endOperation();\n        }\n\n        return element;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { computed, observable, reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as ColorUtils from 'app/js/utils/colorUtils';\nimport ElementModel from 'app/js/models/ElementModel';\nimport BaseInfoPanelController from 'app/js/components/BaseInfoPanelController';\nimport PropTypes from 'prop-types';\n\nconst MAX_PERCENTAGE = 0.94;\nconst MIN_PERCENTAGE = 0.05;\n\n@observer\nexport default class GradientController extends React.Component {\n\n    componentDidMount() {\n        this.disposeElementReaction = reaction(() => this.props.element, () => this.resetCurrentStopIndex());\n    }\n\n    resetCurrentStopIndex = () => {\n        this.currentStopIndex = 0;\n    }\n\n    componentWillUnmount() {\n        this.disposeElementReaction();\n    }\n\n    static propTypes = {\n        element: PropTypes.instanceOf(ElementModel).isRequired\n    };\n\n    @observable currentStopIndex = 0;\n\n    onStopChange = (newPage) => {\n        this.currentStopIndex = newPage - 1;\n    }\n\n    get displayBar() {\n        const gradientStyle = ColorUtils.getCSSForGradientElement(this.props.element, false, false, true);\n        const currentStop = this.controllerData[this.currentStopIndex];\n\n        const offset = currentStop.offset > 0.5 ? Math.min(MAX_PERCENTAGE, currentStop.offset) : Math.max(MIN_PERCENTAGE, currentStop.offset);\n\n        return <div className=\"info-panel-controller-nav info-panel-controller-gradient\" >\n            <div data-test-id=\"info-panel-controller-gradient-bar\" className=\"info-panel-controller-gradient-bar\" style={ gradientStyle }>\n                <div data-test-id=\"info-panel-controller-gradient-bar-circle\" className=\"info-panel-controller-gradient-bar-circle\" style={ { left: `${offset * 100}%` } }/>\n            </div>\n        </div>;\n    }\n\n    @computed get controllerData() {\n        return ColorUtils.getGradientData(this.props.element);\n    }\n\n    render() {\n        // In rare instances, defend against corrupt gradients\n        if (!this.controllerData.length) {\n            return null;\n        }\n        return <BaseInfoPanelController\n            currentStopIndex={ this.currentStopIndex }\n            onChange={ this.onStopChange }\n            displayBar={ this.displayBar }\n            controllerData={ this.controllerData }\n        />;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from '../configuration';\nimport BaseElementConfig from './BaseElementConfig';\nimport { translate } from 'app/js/managers/translationManager';\n\nimport GradientElementView from 'app/js/components/elements/GradientElementView';\nimport GradientController from 'app/js/components/GradientController';\nimport { roundToDecimalPlace } from 'app/js/utils/unitUtils';\nimport * as ColorUtils from 'app/js/utils/colorUtils';\n\nexport default class GradientElementConfig extends BaseElementConfig {\n    type = configuration.GRADIENT_ELEMENT_TYPE;\n    typeName = 'DL_TYPE_GRADIENT';\n    typeNameSingular = 'DL_TYPE_GRADIENT_SINGULAR';\n\n    gridSizeType = configuration.GRID_TYPE_SMALL;\n\n    component = GradientElementView;\n\n    // Gradient Elements are Auto-Grouped with Colors.\n    getAutoGroupName() { return 'DL_AUTOGROUP_COLORS'; }\n\n    searchAdditionalElementData(element, searchString) {\n        const representation = element.getPrimaryRepresentation();\n        const gradient = representation && representation.getValue('gradient', 'data');\n        return gradient && gradient.stops && gradient.stops.some(stop => {\n            let color = stop.color || [];\n            color = ColorUtils.getRGBRepresentation(color);\n            color = color && ColorUtils.colorDataToHexString(color).toLowerCase();\n            return color && color.includes(searchString);\n        });\n    }\n\n    getAdditionalTooltipData(element) {\n        const data = {};\n        // Get the primary representation\n        const representation = element.getPrimaryRepresentation();\n        const gradient = representation && representation.getValue('gradient', 'data');\n        if (gradient) {\n            data.type = gradient.type;\n            data.stopCount = gradient.stops && gradient.stops.length;\n        }\n        if (!this._config.findUsableRepresentation(element)) {\n            data.disabledMessage = `DL_ERROR_GRADIENT_NOT_SUPPORTED_${configuration.currentProduct.config.translationSuffix}`;\n        }\n        return data;\n    }\n\n    formatTooltipContent(tooltipData) {\n        const gradientTypes = {\n            linear: 'DL_GRADIENT_TYPE_LINEAR',\n            radial: 'DL_GRADIENT_TYPE_RADIAL',\n            noise: 'DL_GRADIENT_TYPE_NOISE'\n        };\n        const {\n            name,\n            group,\n            type,\n            disabledMessage\n        } = tooltipData;\n        return [\n            name,\n            group,\n            gradientTypes[type] && translate(gradientTypes[type]),\n            disabledMessage && translate(disabledMessage),\n            tooltipData.description && { divider: true },\n            tooltipData.description\n        ];\n    }\n\n    getInfoControlComponent(element) {\n        const representation = element.getPrimaryRepresentation();\n        const gradient = representation && representation.getValue('gradient', 'data');\n\n        if (gradient && [ 'radial', 'linear' ].includes(gradient.type)) {\n            return GradientController;\n        }\n    }\n\n    getCustomPanelInfoSubProperties(element) {\n        const representation = element.getPrimaryRepresentation();\n        const gradient = representation && representation.getValue('gradient', 'data');\n        const panelInfo = [];\n        if (gradient.type) {\n            panelInfo.push({\n                label: translate('DL_INFO_GRADIENT_TYPE'),\n                value: translate(`DL_GRADIENT_TYPE_${gradient.type.toUpperCase()}`),\n            });\n        }\n\n        if (gradient.type === 'linear' && gradient.angle) {\n            panelInfo.push({\n                label: translate('DL_INFO_GRADIENT_ANGLE'),\n                value: translate('DL_DEGREE', { degree: roundToDecimalPlace(gradient.angle, 2) })\n            });\n        }\n\n        if (gradient.type === 'radial') {\n            panelInfo.push({\n                label: translate('DL_INFO_GRADIENT_ASPECT_RATIO'),\n                value: roundToDecimalPlace(gradient.aspectRatio, 2)\n            });\n\n            panelInfo.push({\n                label: translate('DL_INFO_GRADIENT_CENTER_POINT'),\n                value: `${roundToDecimalPlace(gradient.centerPoint.x, 2)}, ${roundToDecimalPlace(gradient.centerPoint.y, 2)}`\n            });\n        }\n        return panelInfo;\n    }\n}\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2013 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\nimport configuration from '../configuration';\nimport BaseElementConfig from './BaseElementConfig';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { addGraphicElement } from 'app/js/utils/addElementUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport { createElementFromData } from 'app/js/utils/addElementUtils';\nimport StockElementView from 'app/js/components/elements/StockElementView';\nimport {\n    generatePreview,\n    getPrimaryRepresentationBadge,\n    getPrimaryRepresentationExtension,\n    isVector\n} from 'app/js/utils/libraryUtils';\nimport * as CaptureUtils from 'app/js/utils/captureUtils';\nimport { getElementMetadata, METADATA } from 'app/js/utils/elementMetadataUtils';\nimport { getStockPanelInfo } from 'app/js/utils/adobeStockUtils';\n\nconst INTERCHANGABLE_EXTENSIONS = [\n    [ 'jpg', 'jpeg', 'png', 'tif', 'tiff', 'bmp' ],\n    [ 'svg' ],\n    [ 'pdf' ],\n    [ 'ai' ],\n    [ 'psd' ]\n];\n\n/**\n * Configuration for image elements.\n */\nexport default class ImageElementConfig extends BaseElementConfig {\n\n    type = configuration.IMAGE_ELEMENT_TYPE;\n    typeName = 'DL_TYPE_IMAGE';\n    typeNameSingular = 'DL_TYPE_IMAGE_SINGULAR';\n    thumbnailSize = configuration.IMAGE_THUMBNAIL_SIZE;\n    dragType = 'image';\n\n    getReplaceableExtensions(element) {\n        const extension = getPrimaryRepresentationExtension(element);\n        return extension && INTERCHANGABLE_EXTENSIONS.find(replacements => replacements.includes(extension)) || [];\n    }\n\n    allowDragWithoutUsableRepresentation = true;\n\n    component = StockElementView;\n\n    getAutoGroupName(element) {\n        return isVector(element) ? 'DL_AUTOGROUP_VECTORS' : 'DL_AUTOGROUP_IMAGES';\n    }\n\n    fullRenditionConfig() {\n        const usableTypes = FileUtils.getUsableTypes(configuration.IMAGE_ELEMENT_TYPE);\n        if (usableTypes.length === 0) {\n            // If we don't have any usable types, we probably haven't configured the usable types yet,\n            // so don't set any conditions!\n            return [];\n        }\n\n        return [ {\n            id: configuration.currentProduct.config.code,\n            condition: 'IF_NO_MATCHING_REPRESENTATION',\n            types: usableTypes\n        } ];\n    }\n\n    getAddOperations(layerInfo) {\n        const operations = [];\n        if (CaptureUtils.isCaptureEnabled()) {\n            const capture = (elementAddCallback) => Promise.resolve(CaptureUtils.openCapture(null, elementAddCallback));\n            operations.push({\n                interactive: true,\n                name: 'DL_CAPTURE',\n                icon: 'Capture',\n                dropSupport: false,\n                apply: capture\n            });\n        }\n\n        if (!layerInfo || !layerInfo.selectionExists) {\n            return operations;\n        }\n\n        const addAsset = (library, opType, dragAssetId) => {\n            return generatePreview(dragAssetId).then(fileData => {\n                const appMetadata = { documentId: fileData.documentId, layerIds: fileData.layerIds, dragAssetId };\n                return addGraphicElement(fileData.layerName,\n                    fileData.files,\n                    fileData.rendition,\n                    library,\n                    opType,\n                    appMetadata);\n            }, () => Promise.reject('Could not extract asset.'));\n        };\n\n        operations.unshift({\n            name: 'DL_ADD_IMAGE_NAME',\n            icon: 'AddImage',\n            dropSupport: true,\n            apply: addAsset\n        });\n\n        return operations;\n    }\n\n    formatTooltipContent(tooltipData) {\n        const {\n            name,\n            group,\n            createdIn,\n            representationType,\n            dimensions,\n            filesize,\n            disabledMessage,\n            isStockAsset,\n            stockId,\n            isLicensed,\n            description\n        } = tooltipData;\n\n        return [\n            name,\n            group,\n            createdIn && `${translate('DL_CREATED_IN')} ${translate(createdIn)}`,\n            representationType && `${translate('DL_TYPE')} ${representationType}`,\n            disabledMessage && translate(disabledMessage),\n            dimensions,\n            filesize,\n            isStockAsset && `${translate('DL_ADOBE_STOCK_PHOTO')}: ${stockId}`,\n            isStockAsset && (isLicensed ? translate('DL_LICENSED') : translate('DL_UNLICENSED')),\n            description && { divider: true },\n            description\n        ];\n    }\n\n    getBadgeText(element) {\n        return getPrimaryRepresentationBadge(element);\n    }\n\n    getExtension(element) {\n        return getPrimaryRepresentationExtension(element);\n    }\n\n    // Images work with find-similar, even if they're not stock.\n    canFindSimilar() {\n        return true;\n    }\n\n    /**\n     * Images are draggable from the Stock search view\n     * @returns {boolean} always returns true\n     */\n    isStockAssetDraggable() {\n        return true;\n    }\n\n    /**\n     * Whether the specific Stock image asset uses a non-standard license, of which there are\n     * potentially multiple.\n     *\n     * @param {boolean} isPremium whether it is a Stock premium asset\n     * @param {boolean} isEditorial whether is a Stock editorial asset\n     * @returns {boolean} true if multiple or non standard licenses apply, false otherwise\n     */\n    isStockMultiLicense(isPremium, isEditorial) {\n        return isPremium || isEditorial;\n    }\n\n    /**\n     * The identifier for which comp should be used when saving an unlicensed image element from\n     * Stock to a library.\n     * @returns {string}\n     */\n    getStockCompKeyForLicenseType() {\n        return configuration.STOCK_LICENSE_TYPE_STANDARD;\n    }\n\n    /**\n     *\n     * @param {Object} asset\n     * @param {Object} dragThumbDetails\n     * @returns {string[]}\n     */\n    getStockDragData(asset, dragThumbDetails) {\n        return [ dragThumbDetails.path ];\n    }\n\n    getCustomPanelInfoSubProperties(element) {\n        return getElementMetadata(element, [\n            METADATA.dimensions\n        ]);\n    }\n\n    getCustomServiceProperties(element) {\n        return getStockPanelInfo(element);\n    }\n\n    /**\n     * Create an image element and its representations (given representations data from a LIBRARIES_MESSAGES.RECEIVE_UPDATE message)\n     * @param {Object} elementData\n     * @param {Library} library\n     * @param {Object} extraMetrics\n     * @returns {Promise} resolves to the element\n     */\n    async createElement(elementData, library, extraMetrics) {\n        return createElementFromData(elementData, library, extraMetrics);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from '../configuration';\nimport BaseElementConfig from './BaseElementConfig';\nimport BasicThumbnailElementView from 'app/js/components/elements/BasicThumbnailElementView';\nimport { translate } from 'app/js/managers/translationManager';\n\n/**\n * Configuration for layer style elements.\n */\nexport default class LayerStyleElementConfig extends BaseElementConfig {\n\n    type = configuration.LAYER_STYLE_ELEMENT_TYPE;\n    typeName = 'DL_TYPE_LAYER_STYLE';\n    typeNameSingular = 'DL_TYPE_LAYER_STYLE_SINGULAR';\n    thumbnailSize = configuration.LAYER_STYLE_THUMBNAIL_SIZE;\n\n    gridSizeType = configuration.GRID_TYPE_MEDIUM;\n\n    component = BasicThumbnailElementView;\n\n    getAutoGroupName() { return 'DL_AUTOGROUP_STYLES'; }\n\n    getAdditionalTooltipData(element) {\n        const data = {};\n\n        if (!this._config.findUsableRepresentation(element)) {\n            data.disabledMessage = 'DL_ERROR_LAYER_STYLE_NOT_SUPPORTED_' + configuration.currentProduct.config.translationSuffix;\n        }\n        return data;\n    }\n\n    formatTooltipContent(tooltipData) {\n        return [\n            tooltipData.name,\n            tooltipData.group,\n            tooltipData.disabledMessage && translate(tooltipData.disabledMessage),\n            tooltipData.description && { divider: true },\n            tooltipData.description\n        ];\n    }\n}\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2015 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\nimport configuration from '../configuration';\nimport BaseElementConfig from './BaseElementConfig';\nimport { translate } from 'app/js/managers/translationManager';\nimport StockElementView from 'app/js/components/elements/StockElementView';\nimport { getElementMetadata, METADATA } from 'app/js/utils/elementMetadataUtils';\n\n/**\n * Configuration for 3d light elements.\n */\nexport default class LightElementConfig extends BaseElementConfig {\n\n    type = configuration.LIGHT_ELEMENT_TYPE;\n    typeName = 'DL_TYPE_LIGHT';\n    typeNameSingular = 'DL_TYPE_LIGHT_SINGULAR';\n    thumbnailSize = configuration.LIGHT_THUMBNAIL_SIZE;\n    dragType = 'light';\n\n    component = StockElementView;\n\n    gridSizeType = configuration.GRID_TYPE_MEDIUM;\n\n    getAutoGroupName() { return 'DL_AUTOGROUP_3D'; }\n\n    formatTooltipContent(tooltipData) {\n        const {\n            name,\n            group,\n            createdIn,\n            representationType,\n            isStockAsset,\n            stockId,\n            isLicensed,\n            description,\n            disabledMessage,\n        } = tooltipData;\n\n        return [\n            name,\n            group,\n            createdIn && `${translate('DL_CREATED_IN')} ${translate(createdIn)}`,\n            representationType && `${translate('DL_TYPE')} ${representationType}`,\n            disabledMessage && translate(disabledMessage),\n            isStockAsset && `${translate('DL_ADOBE_STOCK_LIGHT')}: ${stockId}`,\n            isStockAsset && (isLicensed ? translate('DL_LICENSED') : translate('DL_UNLICENSED')),\n            description && { divider: true },\n            description\n        ];\n    }\n\n    setStockMetadata(representation, stockData) {\n        if (stockData['3d_metadata']) {\n            representation.setValue('3d', 'data', stockData['3d_metadata']);\n        }\n    }\n\n    getCustomPanelInfo(element) {\n        return getElementMetadata(element, [\n            METADATA.dimensions\n        ]);\n    }\n}\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2013 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\nimport { translate } from 'app/js/managers/translationManager';\nimport configuration from '../configuration';\nimport BaseElementConfig from './BaseElementConfig';\n\nimport ThumbnailElementView from 'app/js/components/elements/ThumbnailElementView';\n\n/**\n * Configuration for look elements.\n */\nexport default class LookElementConfig extends BaseElementConfig {\n\n    type = configuration.LOOK_ELEMENT_TYPE;\n    typeName = 'DL_TYPE_LOOK';\n    typeNameSingular = 'DL_TYPE_LOOK_SINGULAR';\n    thumbnailSize = configuration.LOOK_THUMBNAIL_SIZE;\n\n    component = ThumbnailElementView;\n\n    getAutoGroupName() { return 'DL_AUTOGROUP_STYLES'; }\n\n    formatTooltipContent(tooltipData) {\n        return [\n            tooltipData.name,\n            tooltipData.group,\n            tooltipData.disabledMessage && translate(tooltipData.disabledMessage),\n            tooltipData.description && { divider: true },\n            tooltipData.description\n        ];\n    }\n}\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2015 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\nimport configuration from '../configuration';\nimport BaseElementConfig from './BaseElementConfig';\nimport { translate } from 'app/js/managers/translationManager';\nimport StockElementView from 'app/js/components/elements/StockElementView';\n\nconst STOCK_METADATA_NAMESPACE = '3d';\nconst STOCK_METADATA_KEY = 'data';\n\n/**\n * Configuration for 3d material elements.\n */\nexport default class MaterialElementConfig extends BaseElementConfig {\n\n    type = configuration.MATERIAL_ELEMENT_TYPE;\n    typeName = 'DL_TYPE_MATERIAL';\n    typeNameSingular = 'DL_TYPE_MATERIAL_SINGULAR';\n    thumbnailSize = configuration.MATERIAL_THUMBNAIL_SIZE;\n    dragType = 'material';\n\n    component = StockElementView;\n\n    gridSizeType = configuration.GRID_TYPE_MEDIUM;\n\n    getAutoGroupName() { return 'DL_AUTOGROUP_3D'; }\n\n    formatTooltipContent(tooltipData) {\n        const {\n            name,\n            group,\n            createdIn,\n            representationType,\n            isStockAsset,\n            stockId,\n            isLicensed,\n            description,\n            disabledMessage,\n        } = tooltipData;\n\n        return [\n            name,\n            group,\n            createdIn && `${translate('DL_CREATED_IN')} ${translate(createdIn)}`,\n            representationType && `${translate('DL_TYPE')} ${representationType}`,\n            disabledMessage && translate(disabledMessage),\n            isStockAsset && `${translate('DL_ADOBE_STOCK_MATERIAL')}: ${stockId}`,\n            isStockAsset && (isLicensed ? translate('DL_LICENSED') : translate('DL_UNLICENSED')),\n            description && { divider: true },\n            description\n        ];\n    }\n\n    setStockMetadata(representation, stockData) {\n        if (stockData['3d_metadata']) {\n            representation.setValue(STOCK_METADATA_NAMESPACE, STOCK_METADATA_KEY, stockData['3d_metadata']);\n        }\n    }\n\n    getCustomPanelInfoSubProperties(element) {\n        const subproperties = [];\n\n        const representation = element.getPrimaryRepresentation();\n        const stockMetadata = representation.getValue(STOCK_METADATA_NAMESPACE, STOCK_METADATA_KEY);\n        const materialMetadata = stockMetadata && stockMetadata.materials && stockMetadata.materials[0];\n        if (materialMetadata) {\n            if (materialMetadata.tileable !== undefined) {\n                subproperties.push({\n                    label: translate('DL_INFO_TILEABLE'),\n                    value: translate(`DL_INFO_${materialMetadata.tileable ? 'YES' : 'NO'}`)\n                });\n            }\n            if (materialMetadata.procedural !== undefined) {\n                subproperties.push({\n                    label: translate('DL_INFO_PROCEDURAL'),\n                    value: translate(`DL_INFO_${materialMetadata.procedural ? 'YES' : 'NO'}`)\n                });\n            }\n        }\n        return subproperties;\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2015 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from '../configuration';\nimport BaseElementConfig from './BaseElementConfig';\nimport environment from 'app/js/environment';\nimport * as TextStyleUtils from 'app/js/utils/textstyleUtils';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { createElementExtraMetrics } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport { getElementMetadata, METADATA } from 'app/js/utils/elementMetadataUtils';\nimport { getCustomServiceProperties } from 'app/js/utils/typekitUtils';\nimport TextStyleElementView from 'app/js/components/elements/TextStyleElementView';\n\nconst STYLE_NAMESPACE = 'paragraphstyle';\nconst STYLE_DATA_KEY = 'data';\n\nconst STYLE_REPRESENTATION_JSON_TYPE = 'application/vnd.adobe.paragraphstyle+json';\nconst STYLE_REPRESENTATION_SNIPPET_TYPE = 'application/vnd.adobe.paragraphstyle+snippet';\n\n/**\n * Configuration for paragraph style elements.\n */\nexport default class ParagraphStyleElementConfig extends BaseElementConfig {\n\n    type = configuration.PARAGRAPH_STYLE_ELEMENT_TYPE;\n    typeName = 'DL_TYPE_PARA_STYLE';\n    typeNameSingular = 'DL_TYPE_PARA_STYLE_SINGULAR';\n    thumbnailSize = configuration.PARAGRAPH_STYLE_THUMBNAIL_SIZE;\n\n    gridSizeType = configuration.GRID_TYPE_WIDE;\n\n    component = TextStyleElementView;\n\n    _addParaStyleImpl(layerInfo, library, opType) {\n        // If for some reason we don't have layerInfo then we just need to break\n        if (!layerInfo || layerInfo.kind !== 'LayerKind.TEXT') {\n            return Promise.reject('Not a text layer');\n        }\n\n        return environment.execApp('getParaStyleInfo').then(data => {\n            const styleData = JSON.parse(data);\n\n            if (configuration.currentProduct.config?.copyTempFileIfNecessary) {\n                styleData.idmsPath = styleData.idmsPath && configuration.currentProduct.config.copyTempFileIfNecessary(styleData.idmsPath);\n                styleData.previewPath = styleData.previewPath && configuration.currentProduct.config.copyTempFileIfNecessary(styleData.previewPath);\n            }\n\n            if (!styleData.styleName) {\n                styleData.styleName = translate('DL_TYPE_NEW_PARA_STYLE');\n            }\n\n            const newElement = createElementExtraMetrics(library, styleData.styleName, configuration.PARAGRAPH_STYLE_ELEMENT_TYPE, {\n                opType\n            });\n\n            const updatePromises = [];\n            if (styleData.idmsPath) {\n                const primaryRepresentation = newElement.createRepresentation(STYLE_REPRESENTATION_SNIPPET_TYPE, 'primary');\n                const addRenditionPromise = primaryRepresentation.setContentFromPath(styleData.idmsPath);\n                updatePromises.push(addRenditionPromise);\n\n                const newRepresentation = newElement.createRepresentation(STYLE_REPRESENTATION_JSON_TYPE, 'rendition');\n                newRepresentation.setValue(STYLE_NAMESPACE, STYLE_DATA_KEY, styleData.styleInfo);\n            } else {\n                const newRepresentation = newElement.createRepresentation(STYLE_REPRESENTATION_JSON_TYPE, 'primary');\n                newRepresentation.setValue(STYLE_NAMESPACE, STYLE_DATA_KEY, styleData.styleInfo);\n            }\n\n            if (styleData.previewPath) {\n                const newRendition = newElement.createRepresentation('image/png', 'rendition');\n                const addRenditionPromise = newRendition.setContentFromPath(styleData.previewPath);\n                // .then(function () {\n                // TODO: these might not be the correct dimensions\n                // newRendition.width = RENDITION_SIZE;\n                // newRendition.height = RENDITION_SIZE;\n                // });\n                updatePromises.push(addRenditionPromise);\n            }\n\n            return Promise.all(updatePromises).then(() => {\n                const cleanupPromises = [];\n\n                if (styleData.previewPath) {\n                    cleanupPromises.push(newElement.setThumbnailCache(configuration.PARAGRAPH_STYLE_THUMBNAIL_SIZE, styleData.previewPath));\n                }\n\n                cleanupPromises.push(newElement.endOperation());\n\n                Promise.all(cleanupPromises).then(() => {\n                    if (styleData.previewPath) {\n                        FileUtils.deleteFile(styleData.previewPath);\n                    }\n\n                    if (styleData.idmsPath) {\n                        FileUtils.deleteFile(styleData.idmsPath);\n                    }\n                });\n\n                return newElement;\n\n            }, () => {\n                library.removeElement(newElement, true);\n                return Promise.reject('Could not create element.');\n            });\n\n        }, () => {\n            return Promise.reject('Could not save paragraph style preview.');\n        });\n    }\n\n    getAutoGroupName() { return 'DL_AUTOGROUP_TYPOGRAPHY'; }\n\n    getAddOperations(layerInfo) {\n\n        if (!layerInfo || !layerInfo.text || (layerInfo.isAppliedParaStyleSupported === false)) {\n            return [];\n        }\n\n        const addParaStyle = (library, opType) => {\n            return new Promise(resolve => {\n                // We need to get the most current Character Style data because the user could have changed it since last selection.\n                layerSelectionManager.updateLayerInfo().then(() => resolve(this._addParaStyleImpl(layerInfo, library, opType)));\n            });\n        };\n\n        // Note: for all layers, we display the operation, just disable it if it's not a text layer\n        return [ {\n            name: 'DL_ADD_PARA_STYLE_NAME',\n            order: 3,\n            icon: 'AddParagraphStyle',\n            apply: addParaStyle\n        } ];\n    }\n\n    _getStyleData(element) {\n        const representation = this._config.findUsableRepresentation(element, STYLE_REPRESENTATION_JSON_TYPE);\n        return representation && representation.getValue(STYLE_NAMESPACE, STYLE_DATA_KEY);\n    }\n\n    // TODO: This is the same as for text styles\n    searchAdditionalElementData(element, searchString) {\n        const style = this._getStyleData(element);\n        const fontFamily = style && style.fontFamily && style.fontFamily.toLowerCase();\n        const fontStyle = style && style.adbeFont && style.adbeFont.style && style.adbeFont.style.toLowerCase();\n        const fontSize = style && style.fontSize && style.fontSize.value && style.fontSize.value.toString().toLowerCase();\n\n        return (fontFamily && fontFamily.includes(searchString))\n            || (fontStyle && fontStyle.includes(searchString))\n            || (fontSize && fontSize.includes(searchString));\n    }\n\n    getAdditionalTooltipData(element) {\n        const style = this._getStyleData(element);\n        const isDisabled = this._config.isDisabled(element);\n        return TextStyleUtils.getAdditionalTooltipData(style, isDisabled);\n    }\n\n    formatTooltipContent(tooltipData) {\n        return TextStyleUtils.formatTooltipContent(tooltipData);\n    }\n\n    getAdditionalElementDetails(element) {\n        const style = this._getStyleData(element);\n        if (style) {\n            const styleProperties = TextStyleUtils.getStyleProperties(style);\n            return styleProperties.join(', ');\n        }\n    }\n\n    getCustomServiceProperties(element) {\n        return getCustomServiceProperties(element);\n    }\n\n    getCustomPanelInfoSubProperties(element) {\n        return getElementMetadata(element, [\n            METADATA.fontFamily,\n            METADATA.fontStyle,\n            METADATA.fontSize,\n            METADATA.fontDecoration,\n            METADATA.alignment,\n            METADATA.paragraphLeftIndent,\n            METADATA.paragraphRightIndent,\n            METADATA.paragraphFirstLineIndent,\n            METADATA.paragraphSpaceBefore,\n            METADATA.paragraphSpaceAfter,\n            METADATA.fontColorType,\n            METADATA.fontHexColor,\n            METADATA.fontRgbColor,\n            METADATA.fontCmykColor,\n            METADATA.fontLabColor,\n            METADATA.fontHsbColor,\n            METADATA.fontGrayColor,\n            METADATA.fontSpotColor,\n            METADATA.fontOpacity\n        ]);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2016 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from '../configuration';\nimport BaseElementConfig from './BaseElementConfig';\nimport { translate } from 'app/js/managers/translationManager';\nimport { isVector } from 'app/js/utils/libraryUtils';\n\nimport ThumbnailElementView from 'app/js/components/elements/ThumbnailElementView';\n\n/**\n * Configuration for pattern elements.\n */\nexport default class PatternElementConfig extends BaseElementConfig {\n\n    type = configuration.PATTERN_ELEMENT_TYPE;\n    typeName = 'DL_TYPE_PATTERN';\n    typeNameSingular = 'DL_TYPE_PATTERN_SINGULAR';\n    thumbnailSize = configuration.PATTERN_THUMBNAIL_SIZE;\n\n    component = ThumbnailElementView;\n\n    isThumbnailTiled = true;\n\n    gridSizeType = configuration.GRID_TYPE_MEDIUM;\n\n    getAutoGroupName(element) {\n        return isVector(element) ? 'DL_AUTOGROUP_VECTORS' : 'DL_AUTOGROUP_IMAGES';\n    }\n\n    getAdditionalTooltipData(element) {\n        const data = { patternType: isVector(element) ? 'DL_VECTOR_PATTERN_TYPE' : 'DL_BITMAP_PATTERN_TYPE' };\n\n        if (!this._config.findUsableRepresentation(element)) {\n            data.disabledMessage = 'DL_ERROR_UNSUPPORTED_' + configuration.currentProduct.config.translationSuffix;\n        }\n\n        return data;\n    }\n\n    formatTooltipContent(tooltipData) {\n        const {\n            name,\n            group,\n            patternType,\n            disabledMessage,\n            description\n        } = tooltipData;\n\n        return [\n            name,\n            group,\n            // Note: Could also use DL_REPRESENTATION_TYPE_BITMAP_PATTERN and DL_REPRESENTATION_TYPE_VECTOR_PATTERN.\n            patternType && `${translate('DL_TYPE')} ${translate(patternType)}`,\n            disabledMessage && translate(disabledMessage),\n            description && { divider: true },\n            description\n        ];\n    }\n\n    getBadgeText(element) {\n        // I can't add a badge to the mimeMap in fileUtils.js because both these types of Patterns have the same\n        // primary representation, so the badge would always be 'PNG'\n        return isVector(element) ? 'SVG' : 'PNG';\n    }\n\n    getExtension(element) {\n        return this.getBadgeText(element);\n    }\n}\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2016 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\nimport configuration from '../configuration';\nimport BaseElementConfig from './BaseElementConfig';\nimport { translate } from 'app/js/managers/translationManager';\nimport StockElementView from 'app/js/components/elements/StockElementView';\nimport { getPrimaryRepresentationBadge, getPrimaryRepresentationExtension } from 'app/js/utils/libraryUtils';\nimport { getElementMetadata, METADATA } from 'app/js/utils/elementMetadataUtils';\n\n/**\n * Configuration for template elements.\n */\nexport default class TemplateElementConfig extends BaseElementConfig {\n\n    type = configuration.TEMPLATE_ELEMENT_TYPE;\n    typeName = 'DL_TYPE_TEMPLATE';\n    typeNameSingular = 'DL_TYPE_TEMPLATE_SINGULAR';\n    thumbnailSize = configuration.IMAGE_THUMBNAIL_SIZE;\n\n    component = StockElementView;\n\n    getAutoGroupName() { return 'DL_AUTOGROUP_TEMPLATES'; }\n\n    getAdditionalTooltipData(element) {\n        const data = {};\n        if (this.isDisabled(element)) {\n            data.disabledMessage = 'DL_ERROR_TEMPLATE_NOT_SUPPORTED_' + configuration.currentProduct.config.translationSuffix;\n        }\n        return data;\n    }\n\n    isDisabled(element) {\n        return !this._config.findUsableRepresentation(element, null, true);\n    }\n\n    formatTooltipContent(tooltipData) {\n        const {\n            name,\n            group,\n            representationType,\n            isStockAsset,\n            stockId,\n            isLicensed,\n            filesize,\n            disabledMessage,\n            description\n        } = tooltipData;\n\n        return [\n            name,\n            group,\n            representationType && `${translate('DL_TYPE')} ${representationType}`,\n            filesize,\n            isStockAsset && `${translate('DL_ADOBE_STOCK_TEMPLATE')}: ${stockId}`,\n            isStockAsset && (isLicensed ? translate('DL_LICENSED') : translate('DL_UNLICENSED')),\n            disabledMessage && translate(disabledMessage),\n            description && { divider: true },\n            description\n        ];\n    }\n\n    getBadgeText(element) {\n        return getPrimaryRepresentationBadge(element);\n    }\n\n    getExtension(element) {\n        return getPrimaryRepresentationExtension(element);\n    }\n\n    // Stock doesn't currently support find-similar for templates\n    canFindSimilar() {\n        return false;\n    }\n\n    getCustomPanelInfoSubProperties(element) {\n        return getElementMetadata(element, [\n            METADATA.dimensions\n        ]);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2017 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport BaseElementConfig from './BaseElementConfig';\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { getCuratedName, createElementExtraMetrics, getPrimaryRepresentationBadge, getPrimaryRepresentationExtension } from 'app/js/utils/libraryUtils';\nimport { truncateString } from 'app/js/utils/stringUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport { isLightColor } from 'app/js/utils/colorUtils';\nimport BasicThumbnailElementView from 'app/js/components/elements/BasicThumbnailElementView';\n\n/**\n * Configuration for text elements.\n */\nexport default class TextElementConfig extends BaseElementConfig {\n\n    type = configuration.TEXT_ELEMENT_TYPE;\n    typeName = 'DL_TYPE_TEXT';\n    typeNameSingular = 'DL_TYPE_TEXT_SINGULAR';\n    thumbnailSize = configuration.TEXT_THUMBNAIL_SIZE;\n    dragType = 'text';\n\n    component = BasicThumbnailElementView;\n\n    gridSizeType = configuration.GRID_TYPE_MEDIUM;\n\n    _addTextImpl(layerInfo, library, opType) {\n        //If for some reason we don't have layerInfo then we just need to break\n        if (!layerInfo || !layerInfo.canAddTextAsset) {\n            return Promise.reject('no text in layer');\n        }\n\n        return environment.execApp('getTextInfo').then(data => {\n            const textData = JSON.parse(data);\n            if (!textData || !textData.textInfo) {\n                return Promise.reject('Could not create element.');\n            }\n\n            if (configuration.currentProduct.config?.copyTempFileIfNecessary) {\n                textData.previewPath = configuration.currentProduct.config.copyTempFileIfNecessary(textData.previewPath);\n                textData.primaryRepresentation.filePath = configuration.currentProduct.config.copyTempFileIfNecessary(textData.primaryRepresentation.filePath);\n            }\n\n            const name = layerInfo.textAssetName || textData.name;\n\n            const assetName = getCuratedName(library, name, 'DL_TEXT_LABEL');\n\n            let selectionType = 'textFrame';\n            if (layerInfo.textSelectionExists === true) {\n                selectionType = 'textSelection';\n            } else if (layerInfo.insertionPointExists === true) {\n                selectionType = 'insertionPoint';\n            }\n            const newElement = createElementExtraMetrics(library, assetName, configuration.TEXT_ELEMENT_TYPE, {\n                opType,\n                selectionType\n            });\n\n            const updatePromises = [];\n            if (textData.primaryRepresentation) {\n                const primaryRepresentation = newElement.createRepresentation(textData.primaryRepresentation.representationType, 'primary');\n                if (textData.primaryRepresentation.isFile) {\n                    const addRenditionPromise = primaryRepresentation.setContentFromPath(textData.primaryRepresentation.filePath).then(() => {\n                        // Note: Noticed a possible race condition here. If all the updatePromises resolve before this is pushed,\n                        // this whole function will resolve early. Leaving as is for now, but something to be aware of.\n                        updatePromises.push(addRenditionPromise);\n                    });\n                } else {\n                    primaryRepresentation.setValue(configuration.TEXT_NAMESPACE, configuration.TEXT_DATA_KEY, textData.primaryRepresentation.data);\n                }\n\n                const newRepresentation = newElement.createRepresentation(configuration.TEXT_REPRESENTATION_JSON_TYPE, 'rendition');\n                newRepresentation.setValue(configuration.TEXT_NAMESPACE, configuration.TEXT_DATA_KEY, textData.textInfo);\n            } else {\n                const newRepresentation = newElement.createRepresentation(configuration.TEXT_REPRESENTATION_JSON_TYPE, 'primary');\n                newRepresentation.setValue(configuration.TEXT_NAMESPACE, configuration.TEXT_DATA_KEY, textData.textInfo);\n            }\n\n            if (textData.previewPath) {\n                const newRendition = newElement.createRepresentation('image/png', 'rendition');\n                newRendition.isPreferredThumbnail = true; // Should use the preview rather than the primary as the thumbnail\n                updatePromises.push(newRendition.setContentFromPath(textData.previewPath));\n            }\n\n            return Promise.all(updatePromises).then(() => {\n                const cleanupPromises = [];\n\n                if (textData.previewPath) {\n                    cleanupPromises.push(newElement.setThumbnailCache(configuration.TEXT_THUMBNAIL_SIZE, textData.previewPath));\n                }\n\n                cleanupPromises.push(newElement.endOperation());\n\n                Promise.all(cleanupPromises).then(() => {\n                    if (textData.previewPath) {\n                        FileUtils.deleteFile(textData.previewPath);\n                    }\n\n                    if (textData.primaryRepresentation.isFile) {\n                        FileUtils.deleteFile(textData.primaryRepresentation.filePath);\n                    }\n                });\n\n                return newElement;\n\n            }, () => {\n                library.removeElement(newElement);\n                return Promise.reject('Could not create element.');\n            });\n\n        }, () => {\n            return Promise.reject('Could not save text preview.');\n        });\n    }\n\n    getAutoGroupName() { return 'DL_AUTOGROUP_TYPOGRAPHY'; }\n\n    getAddOperations(layerInfo) {\n\n        if (!layerInfo || !layerInfo.canAddTextAsset) {\n            return [];\n        }\n\n        const addText = (library, opType) => {\n            return new Promise(resolve => {\n                // We need to get the most current text data because the user could have changed it since last selection.\n                layerSelectionManager.updateLayerInfo().then(() => resolve(this._addTextImpl(layerInfo, library, opType)));\n            });\n        };\n\n        const getDropLabel = (label, library) => {\n            // TOFIX: Update this if you want a custom label (not just the layer name), for text\n            return getCuratedName(library, layerInfo.textAssetName, 'DL_TEXT_LABEL');\n        };\n\n        // Note: for all layers, we display the operation, just disable it if it's not a text layer\n        return [ {\n            name: 'DL_ADD_TEXT_NAME',\n            icon: 'AddText',\n            dropSupport: true,\n            getDropLabel,\n            apply: addText\n        } ];\n    }\n\n    // TODO: This is the same as for text styles\n    searchAdditionalElementData(element, searchString) {\n        const MAX_CHAR_COUNT = 6000; // 1000 words (avg. 5 character long) + 1000 spaces in between.\n        const representation = this._config.findUsableRepresentation(element, configuration.TEXT_REPRESENTATION_JSON_TYPE);\n        const textData = representation && representation.getValue(configuration.TEXT_NAMESPACE, configuration.TEXT_DATA_KEY);\n\n        if (!textData || !textData.paragraphs) {\n            return false;\n        }\n\n        // We get lines of text to search - up to the maximum number of characters.\n        let handled = 0;\n        for (let i = 0; i < textData.paragraphs.length; i++) {\n            if (handled >= MAX_CHAR_COUNT) {\n                break;\n            }\n            const text = truncateString(textData.paragraphs[i].text, MAX_CHAR_COUNT - handled).toLowerCase();\n            if (text.includes(searchString)) {\n                return true;\n            }\n            handled += text.length;\n        }\n        return false;\n    }\n\n    getDragData(element) {\n        // Get the representation to use, and the path to it\n        const usableRepresentation = this._config.findUsableRepresentation(element);\n\n        if (usableRepresentation) {\n            return {};\n        }\n    }\n\n    _getTooltipTextData(element) {\n        const representation = this._config.findUsableRepresentation(element, configuration.TEXT_REPRESENTATION_JSON_TYPE);\n        const textData = representation && representation.getValue(configuration.TEXT_NAMESPACE, configuration.TEXT_DATA_KEY);\n        return textData;\n    }\n\n    getAdditionalTooltipData(element) {\n        const data = {};\n\n        const TOOLTIP_CHAR_COUNT = 160;\n        const textData = this._getTooltipTextData(element);\n\n        data.description = element.description;\n\n        if (!this._config.findUsableRepresentation(element)) {\n            data.disabledMessage = 'DL_ERROR_UNSUPPORTED_' + configuration.currentProduct.config.translationSuffix;\n        }\n\n        if (textData && textData.paragraphs && textData.paragraphs[0] && textData.paragraphs[0].text) {\n            // Tooltip - composed from first two paragraphs, length is TOOLTIP_CHAR_COUNT at max.\n            data.paragraphText = {};\n\n            data.paragraphText.firstPara = truncateString(textData.paragraphs[0].text, TOOLTIP_CHAR_COUNT);\n            const firstParaLength = textData.paragraphs[0].text.length;\n\n            if (firstParaLength <= TOOLTIP_CHAR_COUNT && textData.paragraphs[1] && textData.paragraphs[1].text) {\n                data.paragraphText.secondPara = truncateString(textData.paragraphs[1].text, TOOLTIP_CHAR_COUNT - firstParaLength);\n            }\n        }\n        return data;\n    }\n\n    getAdditionalElementDetails(element) {\n        const textData = this._getTooltipTextData(element);\n\n        const INFO_CHAR_COUNT = 500;\n        let paragraphText = '';\n\n        if (textData && textData.paragraphs) {\n            textData.paragraphs.forEach(paragraph => {\n                paragraphText += paragraph.text;\n                paragraphText += ' ';\n            });\n        }\n\n        if (paragraphText.length >= INFO_CHAR_COUNT) {\n            paragraphText = truncateString(paragraphText, INFO_CHAR_COUNT);\n        }\n\n        return paragraphText;\n    }\n\n    formatTooltipContent({ paragraphText = {}, description }) {\n        const {\n            firstPara,\n            secondPara,\n            disabledMessage\n        } = paragraphText;\n\n        return [\n            (!firstPara && !secondPara) && translate('DL_TEXT_EMPTY_CONTENT_TOOLTIP'),\n            firstPara,\n            secondPara,\n            disabledMessage && translate(disabledMessage),\n            description && { divider: true },\n            description\n        ];\n    }\n\n    getBadgeText(element) {\n        return getPrimaryRepresentationBadge(element);\n    }\n\n    getExtension(element) {\n        return getPrimaryRepresentationExtension(element);\n    }\n\n    getAdditionalClasses(element) {\n        const representation = this._config.findUsableRepresentation(element, configuration.TEXT_REPRESENTATION_JSON_TYPE);\n        const elementData = representation && representation.getValue(configuration.TEXT_NAMESPACE, configuration.TEXT_DATA_KEY);\n        if (elementData && elementData.paragraphs) {\n            for (let i = 0; i < elementData.paragraphs.length; i++) {\n                const runs = elementData.paragraphs[i].runs || [];\n                for (let j = 0; j < runs.length; j++) {\n                    for (let k = 0; k < runs[j].styles.length; k++) {\n                        const stylePointer = runs[j].styles[k];\n                        const textStyles = elementData.styles[stylePointer] || {};\n                        const rgbRep = textStyles.value && textStyles.value.color;\n                        if (environment.recolorLightTextElements && rgbRep && isLightColor(rgbRep)) {\n                            // if we find a run with light text we can return early, otherwise keep looking\n                            return [ 'light-text' ];\n                        }\n                    }\n                }\n            }\n        }\n        return [];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from '../configuration';\nimport BaseElementConfig from './BaseElementConfig';\nimport environment from 'app/js/environment';\nimport * as TextStyleUtils from 'app/js/utils/textstyleUtils';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { getCustomServiceProperties } from 'app/js/utils/typekitUtils';\nimport { createElementExtraMetrics } from 'app/js/utils/libraryUtils';\nimport TextStyleElementView from 'app/js/components/elements/TextStyleElementView';\nimport { getElementMetadata, METADATA } from 'app/js/utils/elementMetadataUtils';\n\nconst STYLE_NAMESPACE = 'characterstyle';\nconst STYLE_DATA_KEY = 'data';\n\nconst STYLE_REPRESENTATION_TYPE = 'application/vnd.adobe.characterstyle+json';\n\n/**\n * Configuration for text/character style elements.\n */\nexport default class TextStyleElementConfig extends BaseElementConfig {\n\n    type = configuration.CHARACTER_STYLE_ELEMENT_TYPE;\n    typeName = 'DL_TYPE_TEXT_STYLE';\n    typeNameSingular = 'DL_TYPE_TEXT_STYLE_SINGULAR';\n    thumbnailSize = configuration.CHARACTER_STYLE_THUMBNAIL_SIZE;\n\n    gridSizeType = configuration.GRID_TYPE_WIDE;\n\n    component = TextStyleElementView;\n\n    _addTextStyleImpl(layerInfo, library, opType) {\n        // If for some reason we don't have layerInfo then we just need to break\n        if (!layerInfo || layerInfo.kind !== 'LayerKind.TEXT') {\n            return Promise.reject('Not a text layer');\n        }\n\n        return environment.execApp('saveTextStylePreview', [ layerInfo.fontInfo ]).then(filePath => {\n            if (filePath === undefined || filePath === 'undefined') {\n                return Promise.reject('Unable to generate preview');\n            }\n\n            const newElement = createElementExtraMetrics(library, '', configuration.CHARACTER_STYLE_ELEMENT_TYPE, {\n                opType\n            });\n\n            const newRepresentation = newElement.createRepresentation(STYLE_REPRESENTATION_TYPE, 'primary');\n            newRepresentation.setValue(STYLE_NAMESPACE, STYLE_DATA_KEY, layerInfo.fontInfo);\n\n            // Create the rendition representation\n            const newRendition = newElement.createRepresentation('image/png', 'rendition');\n            const addRenditionPromise = newRendition.setContentFromPath(filePath);\n            //.then(function () {\n            // TODO: these might not be the correct dimensions\n            // newRendition.width = RENDITION_SIZE;\n            // newRendition.height = RENDITION_SIZE;\n            //});\n\n            return addRenditionPromise.then(() => {\n                Promise.all([\n                    newElement.setThumbnailCache(configuration.CHARACTER_STYLE_THUMBNAIL_SIZE, filePath),\n                    newElement.endOperation()\n                ]).then(() => {\n                    FileUtils.deleteFile(filePath);\n                });\n\n                return newElement;\n\n            }, () => {\n                library.removeElement(newElement, true);\n                return Promise.reject('Could not create element.');\n            });\n\n        }, () => {\n            return Promise.reject('Could not save text style preview.');\n        });\n    }\n\n    getAutoGroupName() { return 'DL_AUTOGROUP_TYPOGRAPHY'; }\n\n    getAddOperations(layerInfo) {\n\n        if (!layerInfo || !layerInfo.text || !layerInfo.fontInfo) {\n            return [];\n        }\n\n        const addTextStyle = (library, opType) => {\n            return new Promise(resolve => {\n                // We need to get the most current Character Style data because the user could have changed it since last selection.\n                layerSelectionManager.updateLayerInfo().then(() => resolve(this._addTextStyleImpl(layerInfo, library, opType)));\n            });\n        };\n\n        // Note: for all layers, we display the operation, just disable it if it's not a text layer\n        return [ {\n            name: 'DL_ADD_TEXT_STYLE_NAME',\n            icon: 'AddCharacterStyle',\n            apply: addTextStyle\n        } ];\n    }\n\n    _getStyleData(element) {\n        const representation = this._config.findUsableRepresentation(element, STYLE_REPRESENTATION_TYPE);\n        const styleData = representation && representation.getValue(STYLE_NAMESPACE, STYLE_DATA_KEY);\n        return styleData?.adbeFont ? styleData : { adbeFont : styleData };\n    }\n\n    // TODO: This is the same as for paragraph styles\n    searchAdditionalElementData(element, searchString) {\n        const style = this._getStyleData(element);\n        const fontFamily = style && style.fontFamily && style.fontFamily.toLowerCase();\n        const fontStyle = style && style.adbeFont && style.adbeFont.style && style.adbeFont.style.toLowerCase();\n        const fontSize = style && style.fontSize && style.fontSize.value && style.fontSize.value.toString().toLowerCase();\n\n        return (fontFamily && fontFamily.includes(searchString))\n            || (fontStyle && fontStyle.includes(searchString))\n            || (fontSize && fontSize.includes(searchString));\n    }\n\n    getAdditionalElementDetails(element) {\n        const style = this._getStyleData(element);\n        if (style) {\n            const styleProperties = TextStyleUtils.getStyleProperties(style);\n            return styleProperties.join(', ');\n        }\n    }\n\n    getAdditionalTooltipData(element) {\n        const style = this._getStyleData(element);\n        const isDisabled = this._config.isDisabled(element);\n        return TextStyleUtils.getAdditionalTooltipData(style, isDisabled);\n    }\n\n    formatTooltipContent(tooltipData) {\n        return TextStyleUtils.formatTooltipContent(tooltipData);\n    }\n\n    getCustomServiceProperties(element) {\n        return getCustomServiceProperties(element);\n    }\n\n    getCustomPanelInfoSubProperties(element) {\n        return getElementMetadata(element, [\n            METADATA.fontFamily,\n            METADATA.fontStyle,\n            METADATA.fontSize,\n            METADATA.fontDecoration,\n            METADATA.alignment,\n            METADATA.fontColorType,\n            METADATA.fontHexColor,\n            METADATA.fontRgbColor,\n            METADATA.fontCmykColor,\n            METADATA.fontLabColor,\n            METADATA.fontHsbColor,\n            METADATA.fontGrayColor,\n            METADATA.fontSpotColor,\n            METADATA.fontOpacity\n        ]);\n    }\n}\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2015 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\nimport configuration from '../configuration';\nimport BaseElementConfig from './BaseElementConfig';\nimport { translate } from 'app/js/managers/translationManager';\nimport StockElementView from 'app/js/components/elements/StockElementView';\n\n/**\n * Configuration for 3D elements.\n */\nexport default class ThreeDElementConfig extends BaseElementConfig {\n\n    type = configuration.THREE_D_ELEMENT_TYPE;\n    typeName = 'DL_TYPE_3D';\n    typeNameSingular = 'DL_TYPE_3D_SINGULAR';\n    thumbnailSize = configuration.THREE_D_THUMBNAIL_SIZE;\n    dragType = '3d';\n\n    component = StockElementView;\n\n    gridSizeType = configuration.GRID_TYPE_MEDIUM;\n\n    getAutoGroupName() { return 'DL_AUTOGROUP_3D'; }\n\n    formatTooltipContent(tooltipData) {\n        const {\n            name,\n            group,\n            createdIn,\n            representationType,\n            filesize,\n            disabledMessage,\n            isStockAsset,\n            stockId,\n            isLicensed,\n            description\n        } = tooltipData;\n\n        return [\n            name,\n            group,\n            createdIn && `${translate('DL_CREATED_IN')} ${translate(createdIn)}`,\n            representationType && `${translate('DL_TYPE')} ${representationType}`,\n            filesize,\n            disabledMessage && translate(disabledMessage),\n            isStockAsset && `${translate('DL_ADOBE_STOCK_MODEL')}: ${stockId}`,\n            isStockAsset && (isLicensed ? translate('DL_LICENSED') : translate('DL_UNLICENSED')),\n            description && { divider: true },\n            description\n        ];\n    }\n\n    setStockMetadata(representation, stockData) {\n        if (stockData['3d_metadata']) {\n            representation.setValue('3d', 'data', stockData['3d_metadata']);\n        }\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\n\nimport StockElementView from './StockElementView';\nimport * as UnitUtils from 'app/js/utils/unitUtils';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport BaseElementView from './BaseElementView';\nimport configuration from 'app/js/config/configuration';\n\n@observer\nexport default class VideoElementView extends React.Component {\n\n    static defaultProps = {\n        viewMode: 'grid'\n    };\n\n    static propTypes = {\n        ...BaseElementView.propTypes\n    };\n\n    @computed get disabled() {\n        return elementConfiguration.isDisabled(this.props.element) && !this.props.viewMode.startsWith('thumbnail') && !configuration.currentProduct.isExpandedView?.();\n    }\n\n    @computed get videoDuration() {\n        const representation = this.props.element.getPrimaryRepresentation();\n        const videoData = representation && representation.getValue('video', 'data');\n        return videoData && videoData.duration && UnitUtils.msToString(videoData.duration);\n    }\n\n    @computed get videoBadge() {\n        if ([ 'grid', 'thumbnail-large' ].includes(this.props.viewMode) && this.videoDuration) {\n            return (\n                <div className=\"panel-video-badge\" data-test-id=\"video-view-badge\">\n                    <div className=\"panel-video-badge-duration\" data-test-id=\"video-view-duration\">{this.videoDuration}</div>\n                </div>\n            );\n        }\n    }\n\n    render() {\n        return (\n            <StockElementView { ...this.props }>\n                { this.videoBadge }\n            </StockElementView>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport StockSearchResult from './StockSearchResult';\nimport debugLog from 'app/js/utils/debugLog';\nimport { msToString } from 'app/js/utils/unitUtils';\nimport configuration from 'app/js/config/configuration';\nimport { getLicenseTypesFromSearchResult } from 'app/js/utils/adobeStockUtils';\nimport environment from 'app/js/environment';\n\n@observer\nexport default class StockVideoSearchResult extends React.Component {\n    static propTypes = {\n        asset: PropTypes.object.isRequired,\n        layout: PropTypes.shape({\n            width: PropTypes.number.isRequired,\n            height: PropTypes.number.isRequired\n        }).isRequired\n    };\n\n    _playing = false;\n\n    handleMouseOver = (e) => {\n        if (this._playing) {\n            return;\n        }\n        this._playing = true;\n        e.target.play().catch((err) => {\n            const { name, message } = err || {};\n\n            debugLog.log(`Could not play video at ${this.props.asset.video_small_preview_url}. Encountered error ${name} with details ${message}`);\n        });\n    }\n\n    handleMouseOut = (e) => {\n        this._playing = false;\n        e.target.pause();\n    }\n\n    getLicenseLabels() {\n        const { is_licensed } = this.props.asset;\n\n        // If the asset is licensed display the current license. If the current license can't be found,\n        // don't display anything\n        if (is_licensed) {\n            const license = configuration.STOCK_VIDEO_LICENSE_TYPES.find(({ field }) => is_licensed === field);\n            return license ? [ license.label ] : [];\n        }\n\n        // If not, return the list of possible license types\n        return getLicenseTypesFromSearchResult(this.props.asset).map(({ label }) => label);\n    }\n\n    get videoFooter() {\n        const licenseLabels = this.getLicenseLabels().map((licenseLabel) => (\n            <div key={ licenseLabel } className=\"panel-stock-search-result-video-footer-license\" data-test-id={`video-license-${licenseLabel}`}>{ licenseLabel }</div>\n        ));\n        return (\n            <div className=\"panel-stock-search-result-video-footer\" data-test-id=\"video-footer\">\n                <div className=\"panel-stock-search-result-video-footer-container\">\n                    <div className=\"panel-stock-search-result-video-footer-duration\" data-test-id=\"video-duration\">{ msToString(this.props.asset.duration) }</div>\n                    { licenseLabels }\n                </div>\n            </div>\n        );\n    }\n\n    render() {\n        const {\n            asset: {\n                video_small_preview_url\n            },\n        } = this.props;\n\n        // Note: We need to use onMouseOver/onMouseOut rather than onMouseEnter/onMouseLeave for this to work properly within a web component,\n        // because React will only listen to events on the document and the latter get eaten by the webcomponent boundary\n        return (\n            <StockSearchResult {...this.props}>\n                {!environment.hasVideoRenderingBug && <video\n                    className=\"panel-stock-search-result-video\"\n                    loop={true}\n                    muted={true}\n                    preload=\"auto\"\n                    onMouseOver={this.handleMouseOver}\n                    onMouseOut={this.handleMouseOut}\n                    data-test-id=\"video\"\n                >\n                    <source src={video_small_preview_url} type=\"video/mp4\" />\n                </video> }\n                { this.videoFooter }\n            </StockSearchResult>\n        );\n    }\n}\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2013 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\nimport configuration from '../configuration';\nimport BaseElementConfig from './BaseElementConfig';\nimport * as UnitUtils from 'app/js/utils/unitUtils';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\n\nimport VideoElementView from 'app/js/components/elements/VideoElementView';\nimport StockVideoSearchResult from 'app/js/components/stock/StockVideoSearchResult';\nimport { getPrimaryRepresentationBadge, getPrimaryRepresentationExtension } from 'app/js/utils/libraryUtils';\nimport { getElementMetadata, METADATA } from 'app/js/utils/elementMetadataUtils';\n\n/**\n * Configuration for video elements.\n */\nexport default class VideoElementConfig extends BaseElementConfig {\n\n    type = configuration.VIDEO_ELEMENT_TYPE;\n    typeName = 'DL_TYPE_VIDEO';\n    typeNameSingular = 'DL_TYPE_VIDEO_SINGULAR';\n    thumbnailSize = configuration.VIDEO_THUMBNAIL_SIZE;\n\n    autoDownloadExternalLinks = false;\n\n    component = VideoElementView;\n    stockComponent = StockVideoSearchResult;\n\n    getAutoGroupName() { return 'DL_AUTOGROUP_MOTION'; }\n\n    getDragData(element) {\n        if (!AdobeStockUtils.isStockAsset(element)) {\n            return super.getDragData(element);\n        }\n        const contentURLs = [];\n        const usableFormats = FileUtils.getUsableTypes(element.type);\n\n        let usableRepresentation;\n        element.representations.forEach(representation => {\n            if (this._config.isRepresentationCompatible(representation, usableFormats)) {\n                usableRepresentation = usableRepresentation || representation;\n\n                const videoData = representation.getValue('video', 'data') || {};\n                contentURLs.push({\n                    contentType: representation.type,\n                    url: representation.getContentURL(),\n                    width: representation.width,\n                    height: representation.height,\n                    contentLength: representation.contentLength,\n                    framerate: videoData.framerate,\n                    duration: videoData.duration\n                });\n\n            }\n        });\n\n        if (contentURLs.length > 0) {\n            return {\n                data: contentURLs,\n                // NOTE: The representation is only for analytics purposes; this will get stripped before setting the drag data:\n                usedRepresentationForAnalytics: usableRepresentation\n            };\n        }\n    }\n\n    getAdditionalTooltipData(element) {\n        const data = {};\n\n        const primaryRepresentation = element.getPrimaryRepresentation();\n        const usableRepresentation = this._config.findUsableRepresentation(element);\n\n        data.description = element.description;\n\n        if (!usableRepresentation) {\n            data.disabledMessage = `DL_ERROR_UNSUPPORTED_${configuration.currentProduct.config.translationSuffix}`;\n        }\n\n        const representation = usableRepresentation || primaryRepresentation;\n        if (representation) {\n            if (representation.width && representation.height) {\n                data.dimensions = UnitUtils.dimensionsToString(representation.width, representation.height);\n            }\n            if (representation.contentLength) {\n                data.filesize = UnitUtils.bytesToString(representation.contentLength);\n            }\n            const videoData = representation.getValue('video', 'data') || {};\n            if (videoData.framerate) {\n                data.framerate = UnitUtils.fpsToString(videoData.framerate);\n            }\n            if (videoData.duration) {\n                data.duration = UnitUtils.msToString(videoData.duration);\n            }\n        }\n\n        return data;\n    }\n\n    formatTooltipContent(tooltipData) {\n        const {\n            name,\n            group,\n            dimensions,\n            duration,\n            framerate,\n            filesize,\n            isStockAsset,\n            stockId,\n            isLicensed,\n            description,\n            disabledMessage\n        } = tooltipData;\n\n        return [\n            name,\n            group,\n            dimensions,\n            duration,\n            framerate,\n            filesize,\n            disabledMessage && translate(disabledMessage),\n            isStockAsset && `${translate('DL_ADOBE_STOCK_VIDEO')}: ${stockId}`,\n            isStockAsset && (isLicensed ? translate('DL_LICENSED') : translate('DL_UNLICENSED')),\n            description && { divider: true },\n            description\n        ];\n    }\n\n    /**\n     * Videos are generally not draggable from the Stock search view\n     * @returns {boolean} always returns false\n     */\n    isStockAssetDraggable() {\n        return false;\n    }\n\n    /**\n     * All stock video assets can be sold under multiple licenses depending on what the customer needs.\n     *\n     * @returns {boolean} alway true\n     */\n    isStockMultiLicense() {\n        return true;\n    }\n\n    getExtension(element) {\n        return getPrimaryRepresentationExtension(element);\n    }\n\n    /**\n     * The identifier for which comp should be used when saving an comp for video Stock search result.\n     * The license type for videos can either be the full license (Video_4K, Video_HD) or a shortened\n     * label, which we will attempt to translate using the existing label to comp mapping.\n     *\n     * @param {string} requestedLicenseType\n     * @returns {string}\n     */\n    getStockCompKeyForLicenseType(requestedLicenseType) {\n        const license = configuration.STOCK_VIDEO_LICENSE_TYPES.find(({ label }) => label === requestedLicenseType);\n        return (license && license.field) || requestedLicenseType;\n    }\n\n    getStockDragData(asset) {\n        const licenseTypes = AdobeStockUtils.getLicenseTypesFromSearchResult(asset);\n        const {\n            url,\n            width,\n            height,\n        } = asset.comps[licenseTypes[0].field];\n\n        const videoAssetData = {\n            content_type: asset.content_type,\n            framerate: asset.framerate,\n            duration: asset.duration,\n            url,\n            width,\n            height,\n        };\n\n        return [ videoAssetData ];\n    }\n\n    setStockMetadata(representation, stockData) {\n        if (stockData.framerate || stockData.duration) {\n            representation.setValue('video', 'data', {\n                framerate: stockData.framerate,\n                duration: stockData.duration\n            });\n        }\n    }\n\n    getBadgeText(element) {\n        return getPrimaryRepresentationBadge(element);\n    }\n\n    getCustomPanelInfoSubProperties(element) {\n        return getElementMetadata(element, [\n            METADATA.dimensions,\n            METADATA.videoFramesPerSecond,\n            METADATA.videoDuration\n        ]);\n    }\n\n    /**\n     * Override this to provide additional details that are displayed below the name of the element in the list view, e.g. for character style and paragraph styles.\n     * @param {ElementModel} element\n     */\n    getAdditionalElementDetails(element) {\n        const metaData = getElementMetadata(element, [\n            METADATA.videoDuration\n        ]);\n        return metaData[0] && metaData[0].value;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport localSettings from 'app/js/config/localSettings';\nimport { shouldShowCaptureFeatureFlag } from 'app/js/utils/captureUtils';\nimport { shouldShowTextStyleFeatureFlag } from 'app/js/utils/dragUtils';\nimport environment from 'app/js/environment';\nimport configuration from 'app/js/config/configuration';\n\n/**\n * To add a feature flag now, all you need to do is add one line to featureFlags.js (the key and label), and it'll be added to the debug menu automatically.\n * You also only need to change one test in the featureFlags tests - the flyoutMenu tests no longer need to change.\n * If it's a conditional FF, you will also need to mock the underlying condition in shouldShowInMenu.\n *\n * Wherever you need to set a FF value in tests, as long as you are mocking localSettings by initializing the test environment,\n * you can set the FF via localSettings to simulate manually setting the FF via the debug menu:\n * e.g. `localSettings.setDebugValue('brandFeatureEnabled', true);` `localSettings.setDebugValue('brandFeatureEnabled', false);`\n * Otherwise you can mock the getter:\n * e.g. `jest.spyOn(featureFlags, 'get').mockImplementation(key => key === 'brandFeatureEnabled');` `featureFlags.get.mockRestore();`\n */\n\nexport class FeatureFlags {\n\n    _config = {};\n\n    _addBool(key, label, shouldShowInMenu = () => true, afterHook = () => undefined, defaultValue = false) {\n        this._config[key] = { label, shouldShowInMenu, afterHook, defaultValue };\n    }\n\n    _addEnum(key, enums, shouldShowInMenu = () => true, afterHook = () => undefined, defaultValue = false) {\n        this._config[key] = { enums, shouldShowInMenu, afterHook, defaultValue };\n    }\n\n    constructor() {\n        // Register feature flags here - we support two types:\n        // Boolean flags (enabled/disable) - just provide a name and a label.\n        // Enumeration flags (multiple possible values) - provide a name and map from enumeration values to labels.\n        this._addBool('dropZoneIndicators', 'Enable Drop-Zone Indicators');\n        this._addEnum('localeDebug', {\n            keys: 'Enable Localization Keys',\n            test: 'Enable Test Locale'\n        });\n        this._addBool('recordMetrics', 'Enable Analytics Recording');\n        this._addBool('logIngestAPI', 'Enable Ingest API Logging');\n        this._addBool('apiLogging', 'Enable Libraries API Logging', () => environment.disableAPILoggingByDefault);\n        this._addBool('publishDiffLogging', 'Enable Document Library Diff Logging');\n        this._addBool('showToolkitLibraries', 'Enable Showing Toolkit Libraries');\n        this._addBool('ccdDarkestTheme', 'Enable CCD Darkest Theme', () => environment.ccdAPI, () => {\n            // The flag will overwrite any passed in theme to be dark theme if the feature flag is on.\n            environment.ccdAPI.updateTheme({ panelBackgroundColor: { color: { alpha: 255, green: 245, blue: 245, red: 245 } } });\n        });\n        this._addBool('capture', 'Enable Capture', shouldShowCaptureFeatureFlag);\n        this._addBool('showDebugHUD', 'Show Debug HUD');\n        this._addBool('brandFeatureEnabled', 'Enable Brands [CCX]', () => {\n            return configuration.currentProduct.config.showBrandFeatureFlag;\n        });\n        this._addBool('globalSearchBoxEnabled', 'Enable global searchbar [CCX]', () => {\n            return configuration.currentProduct.config.showGlobalSearchbarFeatureFlag;\n        });\n        this._addBool('librariesCCLColorThemeEnabled', 'Enable Color Themes [CCX]', () => {\n            return configuration.currentProduct.config.showColorThemeFeatureFlag;\n        });\n        this._addBool('enableProjects', 'Enable Projects experience');\n        this._addBool('disableExpandedNavigationLabel', 'Disable Expanded View Navigation Label [CCX]', () => {\n            return configuration.currentProduct.config.showDisableExpandedNavigationLabelFeatureFlag;\n        });\n        this._addBool(\n            'forceEnableCCLibraries',\n            'Force Enable CC Libraries',\n            undefined,\n            () => setTimeout(() => window.location.reload(), 2000),\n        );\n        this._addBool('enableTextStyle', 'Enable Text Styles', shouldShowTextStyleFeatureFlag); // For DVA apps, enabling Text Character Style, behind a feature flag\n        this._addBool('enableOpenInAppMenu', 'Enable Open in App Menu for 3D elements in CCD');\n        this._addBool('ubeDesignEnabled', 'Enable new design based on UBE designs [AW]', () => {\n            return configuration.currentProduct.config.ubeDesignEnabled;\n        });\n\n        this._addBool('showRevisionHistory', 'Show Revision History [GenStudio]', () => {\n            return configuration.currentProduct.config.showRevisionHistory;\n        });\n\n        this._addBool('useFakeProjectName', 'Use Fake Project Name [GenStudio]', () => {\n            return configuration.currentProduct.config.useFakeProjectName;\n        });\n    }\n\n    // Get the value of a feature flag - this will be a Boolean in case of a Boolean flag,\n    // or a string in case of a enumeration flag.\n    get(key) {\n        if (!this._config[key]) {\n            throw new Error(`Feature flag ${key} not found`);\n        }\n        return localSettings.getDebugValue(key) || environment.getFeatureFlag(key) || this._config[key].defaultValue;\n    }\n\n    // Get the menu items to display in the debug menu\n    getMenuItems() {\n        const menuItems = [];\n        Object.keys(this._config).map(key => {\n            const config = this._config[key];\n            if (!config.shouldShowInMenu()) {\n                return;\n            }\n\n            const value = localSettings.getDebugValue(key);\n            if (config.enums) {\n                Object.keys(config.enums).forEach(enumVal => {\n                    const option = config.enums[enumVal];\n                    const label = typeof option === 'string' ? option : option.label;\n                    const shouldShowInMenu = typeof option === 'string' || !option.shouldShowInMenu || option.shouldShowInMenu();\n\n                    if (!shouldShowInMenu) {\n                        return;\n                    }\n\n                    menuItems.push({\n                        label,\n                        checked: value === enumVal,\n                        onClick: () => {\n                            localSettings.setDebugValue(key, value === enumVal ? undefined : enumVal);\n                            config.afterHook();\n                        }\n                    });\n                });\n                return;\n            }\n\n            menuItems.push({\n                label: this._config[key].label,\n                checked: value === true,\n                onClick: () => {\n                    localSettings.setDebugValue(key, !value);\n                    config.afterHook();\n                }\n            });\n        });\n        return menuItems;\n    }\n}\n\nexport default new FeatureFlags();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { observable, reaction } from 'mobx';\nimport environment from 'app/js/environment';\nimport * as FileUtils from '../utils/fileUtils';\nimport { addListenerManager } from '../utils/listenerUtils';\nimport debugLog from 'app/js/utils/debugLog';\n\nconst _fs = () => window.nodeRequire('fs');\n\n/**\n    Local Settings service\n\n    This service allows you to get and set persistent settings that are local to this instance of the design library panel.\n    Each app (e.g. Photoshop, Illustrator) gets its own settings.\n    The settings are saved in a JSON file in the user's file system.\n**/\n\nclass FSSettings {\n\n    _settings = observable.map();\n\n    _writing = false;\n    _pendingWrite = false;\n\n    constructor(path, fileName) {\n        this._path = path;\n        this._fileName = fileName;\n        this._listenerManager = addListenerManager(this, [ 'flushed' ]);\n\n        try {\n            // Synchronous operations are ok on loading\n            this._settings.replace(JSON.parse(_fs().readFileSync(path + fileName)));\n        } catch (e) {\n            // ignore\n        }\n    }\n\n    _write() {\n        // If we're already writing the settings, just schedule another write afterwards\n        if (this._writing) {\n            this._pendingWrite = true;\n            return;\n        }\n\n        this._writing = true;\n\n        const finishedWrite = () => {\n            this._writing = false;\n            if (this._pendingWrite) {\n                this._pendingWrite = false;\n                this._write();\n            } else {\n                this._listenerManager.notify('flushed');\n            }\n        };\n\n        FileUtils.ensurePathExists(this._path, () => {\n            _fs().writeFile(this._path + this._fileName, JSON.stringify(this._settings.toJSON(), undefined, 2), err => {\n                if (err) {\n                    debugLog.log(err);\n                    this._pendingWrite = false; // Cancel pending write so we don't try to write again\n                }\n                finishedWrite();\n            });\n        });\n    }\n\n    get(key) {\n        return this._settings.get(key);\n    }\n\n    set(key, value) {\n        this._settings.set(key, value);\n        this._write();\n    }\n}\n\n// Fallback when we don't have filesystem access (e.g. for in-browser clients)\nclass LocalStorageSettings {\n\n    _settings = observable.map();\n\n    constructor(name) {\n        this._localStorageKey = environment.getLocalStorageKey(name);\n        try {\n            let settingsStr = environment.localStorage.getItem(this._localStorageKey);\n\n            // It may be split over multiple keys, due to a UXP windows limitation of 4KB per key.\n            // In this case, we store a comma-separated list of keys in the main storage key, and\n            // we just need to fetch each fragment and append them together.\n            if (settingsStr[0] !== '{') {\n                const keys = settingsStr.split(',');\n                settingsStr = keys.map(key => environment.localStorage.getItem(key)).join('');\n            }\n            this._settings.replace(JSON.parse(settingsStr));\n        } catch (e) {\n            // ignore\n        }\n    }\n\n    // Can call to move the current local settings to a new storage key - this can happen in XD where the current\n    // document changes its id, but we want to copy all the current settings over.\n    rebind(newName) {\n        this._localStorageKey = environment.getLocalStorageKey(newName);\n        this._save();\n    }\n\n    get(key) {\n        return this._settings.get(key);\n    }\n\n    _setItem(key, value) {\n        try {\n            environment.localStorage.setItem(key, value);\n        } catch (err) {\n            // Don't crash if there's an error, it just means that the user's settings won't persist\n            debugLog.log(`Error - Unable to write to localStorage: ${err}`);\n        }\n    }\n\n    set(key, value) {\n        this._settings.set(key, value);\n        this._save();\n    }\n\n    _save() {\n        const settingsStr = JSON.stringify(this._settings.toJSON());\n\n        // UXP on Windows has a limit of 4KB per localStorage entry, so need to split if it goes above this\n        // We can remove this once on UXP 4, which has no such limit.\n        const maxLength = environment.maxLocalStorageLength;\n        if (maxLength && settingsStr.length > maxLength) {\n            const numChunks = Math.ceil(settingsStr.length / maxLength);\n            const keys = [];\n            for (let i = 0; i < numChunks; i++) {\n                const key = this._localStorageKey + i;\n                keys.push(key);\n                this._setItem(key, settingsStr.substr(i * maxLength, maxLength));\n            }\n            this._setItem(this._localStorageKey, keys.join(','));\n        } else {\n            this._setItem(this._localStorageKey, settingsStr);\n        }\n    }\n}\n\n//  * XD has one panel instance per-document, so we need to store local settings in a key that\n//  * includes the document id, so they don't overlap.\nconst getKey = key => environment.documentId ? `${environment.documentId}#${key}-docAssets` : key;\n\nexport class LocalSettings {\n\n    @observable.ref _settings;\n\n    init(settingsFileName = 'settings.json', debugFileName = 'debug') {\n        const loadSettings = () => this.load(getKey(settingsFileName), getKey(debugFileName));\n        loadSettings();\n\n        // Some environments scope settings to the documentId, so need to switch over settings if this changes\n        reaction(() => environment.documentId, () => {\n            debugLog.log(`Rebinding settings: ${getKey(settingsFileName)}`);\n            this._settings.rebind(getKey(settingsFileName));\n            this._debugSettings?.rebind(getKey(debugFileName));\n        });\n\n        // Some environments may change the location of the settings at run-time,\n        // so make sure to load the correct settings whenever that happens.\n        reaction(() => environment.localSettingsKey, loadSettings);\n    }\n\n    load(settingsFileName, debugFileName) {\n        debugLog.log(`Loading settings: ${settingsFileName}`);\n        if (!environment.supportsFileSystem) {\n            // Use the browser localStorage if we don't have a filesystem\n            this._settings = new LocalStorageSettings(settingsFileName);\n            if (!environment.hideDebugFlyoutMenu(debugFileName)) {\n                this._debugSettings = new LocalStorageSettings(debugFileName);\n            }\n            return;\n        }\n\n        this._settings = new FSSettings(environment.getLocalRoot(), settingsFileName);\n        if (_fs().existsSync(environment.getGlobalRoot() + debugFileName)) {\n            this._debugSettings = new FSSettings(environment.getGlobalRoot(), debugFileName);\n        }\n    }\n\n    /* ***********************************\n     * Public API functions\n     * ***********************************/\n\n    setValue(key, value) {\n        this._settings.set(key, value);\n    }\n\n    getValue(key) {\n        return this._settings.get(key);\n    }\n\n    // These are only used by the debug menu, and for feature flags etc:\n\n    setDebugValue(key, value) {\n        if (this.hasDebugSettings()) {\n            this._debugSettings.set(key, value);\n        }\n    }\n\n    getDebugValue(key) {\n        if (this.hasDebugSettings()) {\n            return this._debugSettings.get(key);\n        }\n        return undefined;\n    }\n\n    hasDebugSettings() {\n        return this._debugSettings !== undefined;\n    }\n\n    showDebugMenu() {\n        return this.hasDebugSettings();\n    }\n\n    addListener(eventName, callback) {\n        this._settings.addListener(eventName, callback);\n    }\n\n    removeListener(eventName, callback) {\n        this._settings.removeListener(eventName, callback);\n    }\n}\n\nexport default new LocalSettings();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2016 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/**\n    This provides/abstracts the information about the environment - it gives the\n    same interface whether in CEP, Electron, UXP etc (though the implementation is different).\n**/\n\n// Note: Order matters\nconst environments = [\n    process.env.INCLUDE_DESKTOP && require('app/js/environments/CEPEnvironment'),\n    process.env.INCLUDE_DESKTOP && require('app/js/environments/ElectronEnvironment'),\n    process.env.INCLUDE_OFFICE && require('app/js/environments/OfficeEnvironment'),\n    process.env.INCLUDE_DEV && require('app/js/environments/GoogleEnvironment'),\n    process.env.INCLUDE_DESKTOP && require('app/js/environments/XDEnvironment'),\n    process.env.INCLUDE_DESKTOP && require('app/js/environments/PSEnvironment'),\n    process.env.INCLUDE_DESKTOP && require('app/js/environments/AIEnvironment'),\n    process.env.INCLUDE_DESKTOP && require('app/js/environments/CCDEnvironment'),\n    process.env.INCLUDE_DEV && require('app/js/environments/FigmaEnvironment'),\n    process.env.INCLUDE_CCWEB && require('app/js/environments/HorizonEnvironment'),\n    // CCWebEnvironment should be checked last, as it is the default environment.\n    process.env.INCLUDE_CCWEB && require('app/js/environments/CCWebEnvironment'),\n].filter(x => x).map(module => module.default || module);\n\n// Test each environment in order, to find the one that matches the product.\nconst Environment = environments.find(Environment => Environment.check());\n\nexport default new Environment();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n/*global , dom,*/\n\nclass ERROR {\n    constructor(number, message) {\n        this.number = number;\n        this.message = message;\n    }\n\n    toString() {\n        return 'Error ' + this.number + ': ' + this.message;\n    }\n}\n\nclass Enumeration {\n    constructor(name, identifier) {\n        this._enumName = name;\n        this._enumId = identifier;\n        this._kind = 'enum';\n    }\n\n    toString() {\n        return this._enumName;\n    }\n}\n\nclass EnumerationValue {\n    constructor(enumValueName, enumValueId, enumId, enumName) {\n        this._enumValueName = enumValueName;\n        this._enumValueId = enumValueId;\n        this._enumId = enumId;\n        this._enumName = enumName;\n        this._kind = 'enumValue';\n    }\n\n    toString() {\n        return this._enumName + '.' + this._enumValueName;\n    }\n}\n\nfunction isCreatable(obj) {\n    return (Object.prototype.hasOwnProperty.call(obj, '_kind') && obj._kind === 'creatable');\n}\n\nfunction isNonCreatable(obj) {\n    return (Object.prototype.hasOwnProperty.call(obj, '_target') && obj._target._kind === 'nonCreatable');\n}\n\nfunction reduceNonCreatableObjects(targetObj) {\n    if (targetObj === null) {return null;}\n    if (Array.isArray(targetObj)) {\n        for (const [ key , value ] of Object.entries(targetObj)) {\n            targetObj[key] = reduceNonCreatableObjects(value);\n        }\n\n    } else if (isCreatable(targetObj)) {\n        for (const [ key , value ] of Object.entries(targetObj)) {\n            if (isNonCreatable(value)) {\n                targetObj[key] = reduceNonCreatableObjects(value);\n            }\n        }\n\n    } else if (isNonCreatable(targetObj)) {\n        if (Object.prototype.hasOwnProperty.call(targetObj, '_target') && targetObj._target._kind === 'nonCreatable') {\n            targetObj = targetObj._target;\n            return targetObj;\n        }\n    } else {return targetObj;}\n    return targetObj;\n}\n\nfunction LiveObjectAPICall(...args) {\n    let result = undefined;\n    let errorObj = undefined;\n    const target = args[0];\n    const methodName = args[1];\n\n    const theArgs = [ ...args ].slice(2);\n\n    let arr = [];\n    arr.push(...theArgs[0]);\n\n    if (typeof arr === 'object') {arr = reduceNonCreatableObjects(arr);}\n\n    try {\n        if (theArgs.length === 0) {result = dom.action('call', target, methodName);} else {result = dom.action('call', target, methodName, arr);}\n    } catch (e) {\n        errorObj = e;\n    }\n\n    if (errorObj) {\n        if (!errorObj['domain'] || errorObj['domain'] !== 'ExtendScript') {throw errorObj;}\n        throw new ERROR(errorObj.number, errorObj.message);\n    }\n    return ConvertLiveObjectValue(result);\n}\n\nfunction LiveObjectAPIGet(...args) {\n    let result = undefined;\n    let errorObj = undefined;\n    const target = args[0];\n    const propertyName = args[1];\n\n    try {\n        result = dom.action('get', target, propertyName);\n    } catch (e) {\n        errorObj = e;\n    }\n\n    if (errorObj) {\n        if (!errorObj['domain'] || errorObj['domain'] !== 'ExtendScript') {throw errorObj;}\n        throw new ERROR(errorObj.number, errorObj.message);\n    }\n    return ConvertLiveObjectValue(result);\n}\n\nfunction LiveObjectAPIPut(...args) {\n    let result = undefined;\n    let errorObj = undefined;\n    const target = args[0];\n    const propertyName = args[1];\n    let value = args[2];\n\n    if (typeof value === 'object') {value = reduceNonCreatableObjects(value);}\n\n    try {\n        result = dom.action('put', target, propertyName, value);\n    } catch (e) {\n        errorObj = e;\n    }\n\n    if (errorObj) {\n        if (!errorObj['domain'] || errorObj['domain'] !== 'ExtendScript') {throw errorObj;}\n        throw new ERROR(errorObj.number, errorObj.message);\n    }\n    return ConvertLiveObjectValue(result);\n}\n\nclass LiveObjectHostAPI {\n\n    getClassInfo(liveObjectProxy) {\n        if (!this.classInfoCache) {this.classInfoCache = new Map();}\n        const className = liveObjectProxy['_className'];\n        let info = this.classInfoCache.get(className);\n        if (!info || this.disableCache) {\n            info = dom.action('getClassInfo', liveObjectProxy);\n            this.classInfoCache.set(className, info);\n        }\n        return info;\n    }\n\n    setDisableCache(value) {\n        this.disableCache = value;\n    }\n\n    addEnumValue(enumObject, enumValueObject) {\n        if (!this.enumValueCache) {this.enumValueCache = new Map();}\n\n        const enumerationId = enumObject._enumId;\n        if (!this.enumValueCache[enumerationId]) {this.enumValueCache[enumerationId] = new Map();}\n\n        this.enumValueCache[enumerationId][enumValueObject._enumValueId] = enumValueObject;\n    }\n\n    getEnumerationValue(enumerationId, enumValueId) {\n        const enumValues = this.enumValueCache[enumerationId];\n        if (!enumValues) {return undefined;}\n        return enumValues[enumValueId];\n    }\n}\n\nwindow.liveObjectAPI = new LiveObjectHostAPI();\nwindow.liveObjectAPI.setDisableCache(false);\n\nfunction createNonCreatableProxyHandler() {\n\n    const handler = {\n        get(obj, propertyName, ...args) {\n\n            if (obj['_properties'].indexOf(propertyName) > -1) {\n                const propValue = LiveObjectAPIGet(obj['_target'], propertyName);\n\n                return propValue;\n            }\n\n            if (obj['_collections'].indexOf(propertyName) > -1) {\n                const collection = LiveObjectAPIGet(obj['_target'], propertyName);\n                return collection;\n            }\n\n            if (obj['_methods'].indexOf(propertyName) > -1) {\n                return function(...args) {\n                    return LiveObjectAPICall(obj['_target'], propertyName, args);\n                };\n            }\n\n            return Reflect.get(obj, propertyName, ...args);\n        },\n\n        set(obj, propertyName, value, ...args) {\n\n            if (obj['_properties'].indexOf(propertyName) > -1) {\n                LiveObjectAPIPut(obj['_target'], propertyName, value);\n                return true;\n            }\n\n            return Reflect.set(obj, propertyName, value, ...args);\n        },\n\n    };\n    return handler;\n}\n\nfunction createCollectionProxyHandler() {\n\n    const handler = {\n        get(obj, propertyName) {\n\n            const indexNumber = parseInt(propertyName);\n\n            if (!isNaN(indexNumber)) {\n\n                const element = dom.action('call', obj['_target'], 'getElement', indexNumber);\n                return ConvertLiveObjectValue(element);\n            } else {\n\n                if (obj['_properties'].indexOf(propertyName) > -1) {\n\n                    const value = LiveObjectAPIGet(obj['_target'], propertyName);\n                    return value;\n                }\n\n                if (obj['_methods'].indexOf(propertyName) > -1) {\n                    return function(...args) {\n                        return LiveObjectAPICall(obj['_target'], propertyName, args);\n                    };\n                }\n\n                const element = dom.action('call', obj['_target'], 'getElement', propertyName);\n                return ConvertLiveObjectValue(element);\n            }\n        },\n\n        set(...args) {\n\n            return Reflect.set(...args);\n        },\n\n    };\n\n    return handler;\n}\n\nfunction ConvertLiveObjectValue(value) {\n    switch (typeof value) {\n    case 'undefined':\n    case 'number':\n    case 'string':\n    case 'boolean': return value;\n    case 'object': {\n        if (Array.isArray(value)) {\n            let x;\n            for (x = 0; x < value.length; x++) {\n                value[x] = ConvertLiveObjectValue(value[x]);\n            }\n            return value;\n        } else {return ConvertLiveObjectObject(value);}\n    }\n    default:\n    }\n    throw 'Unknown type: ' + (typeof value);\n}\n\nfunction ConvertLiveObjectObject(theObject) {\n    if (theObject['_className']) {return createJSProxy(theObject);} else {\n        if (theObject['_enumId']) {\n            const enumerationId = theObject._enumId;\n            const enumValueId = theObject._enumValueId;\n            return window.liveObjectAPI.getEnumerationValue(enumerationId, enumValueId);\n        }\n        return theObject;\n    }\n}\n\nfunction createJSProxy(liveObjectProxy) {\n\n    const className = liveObjectProxy['_className'];\n    if (!className) {throw Error('missing _className');}\n\n    const kind = liveObjectProxy['_kind'];\n    if (!kind) {throw Error('missing _kind');}\n\n    const classInfo = window.liveObjectAPI.getClassInfo(liveObjectProxy);\n\n    const targetObject = {};\n    Object.defineProperty(targetObject, '_target', {\n        value: liveObjectProxy,\n        enumerable: false\n    });\n    Object.defineProperty(targetObject, '_properties', {\n        value: classInfo['_properties'],\n        enumerable: false\n    });\n    Object.defineProperty(targetObject, '_methods', {\n        value: classInfo['_methods'],\n        enumerable: false\n    });\n    Object.defineProperty(targetObject, '_collections', {\n        value: classInfo['_collections'],\n        enumerable: false\n    });\n\n    let result;\n    if (kind === 'nonCreatable') {\n\n        classInfo['_properties'].forEach(propertyName => {\n            targetObject[propertyName] = null;\n        });\n\n        result = new Proxy(targetObject, createNonCreatableProxyHandler());\n    } else if (kind === 'collection') {\n\n        classInfo['_properties'].forEach(propertyName => {\n            targetObject[propertyName] = null;\n        });\n\n        result = new Proxy(targetObject, createCollectionProxyHandler());\n\n    } else if (kind === 'creatable') {\n        for (const x in liveObjectProxy) {\n            if (typeof liveObjectProxy[x] === 'object' && liveObjectProxy[x]._kind === 'nonCreatable') {\n                liveObjectProxy[x] = createJSProxy(liveObjectProxy[x]);\n            }\n        }\n        result = liveObjectProxy;\n    }\n\n    return result;\n}\nclass CreatableClassParent {\n    constructor(name) {\n        this._className = name;\n        this._kind = 'creatable';\n    }\n}\n\nfunction initializeLiveObjectSupport() {\n    window.app = createJSProxy({ '_className': 'Application', '_kind': 'nonCreatable' });\n\n    const creatableClasses = dom.action('getCreatableClasses');\n    creatableClasses.forEach(name => {\n        global[name] = (class extends CreatableClassParent {\n            constructor() {\n                super(name);\n                const defaultForm = dom.action('instantiateProxy', { '_className': name });\n\n                for (const property in defaultForm) {\n                    if (Object.hasOwnProperty.call(defaultForm,property)) {\n                        this[property] = defaultForm[property];\n                    }\n                }\n            }\n        });\n    });\n\n    const enumClasses = dom.action('getEnumerations');\n    enumClasses.forEach(enumDefinition => {\n\n        const enumName = enumDefinition['_enumName'];\n        const enumId = enumDefinition['_enumId'];\n\n        const enumObject = new Enumeration(enumName, enumId);\n        global[enumName] = enumObject;\n\n        const enumValues = enumDefinition['_values'];\n        enumValues.forEach(enumValueDefinition => {\n            const enumValueName = enumValueDefinition['_enumValueName'];\n            const enumValueId = enumValueDefinition['_enumValueId'];\n            const enumValueObject = new EnumerationValue(enumValueName, enumValueId, enumId, enumName);\n            enumObject[enumValueName] = enumValueObject;\n\n            window.liveObjectAPI.addEnumValue(enumObject, enumValueObject);\n        });\n    });\n}\n\ntry {\n    initializeLiveObjectSupport();\n} catch (e) {\n    ////\n}\nexport default window.app;\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/*global , ExportType, OpenOptions */\n\nimport app from 'script_module';\nimport environment from 'app/js/environment';\nimport COLOR from 'app/applications/ILST_UXP/js/color.js';\nimport debugLog from 'app/js/utils/debugLog';\nexport class ILSTAppUtils {\n    previewMaxWidth = 248;\n    previewMaxHeight = 188;\n    getThumbnailOptions(maxWidth, maxHeight) {\n        const options = new global['ExportOptionsPNG24']();\n        options.antiAliasing = true;\n        options.transparency = true;\n\n        const dimn = new global['Dimensions']();\n        dimn.width = maxWidth ? maxWidth : this.previewMaxWidth;\n        dimn.height = maxHeight ? maxHeight : this.previewMaxHeight;\n\n        options.dimensions = dimn;\n        return options;\n    }\n\n    static shortenString(str, withDots, length) {\n        str = str.replace(/(<|>|:|\"|\\/|\\\\|\\||\\?|\\*|[\\x00-\\x1F])|\\(|\\)|\\{|\\}|,/g, '');\n\n        length = length || 10;\n\n        if (str.length > length) {\n            str = str.substr(0, length - 1);\n            if (withDots) {\n                str = str + '...';\n            }\n        }\n\n        return str;\n    }\n\n    saveAsPNG(file, exportFullFile, maxWidth, maxHeight) {\n        const app = window.app;\n        const options = this.getThumbnailOptions(maxWidth, maxHeight);\n        if (exportFullFile) {\n            app.activeDocument.exportFile(file, ExportType.PNG24, options);\n        } else {\n            app.activeDocument.exportSelectionAsPNG(file, options);\n        }\n    }\n\n    async placeAsset(assetDetails) {\n        // https://forums.adobe.com/message/4896032\n        // Place doesn't necessarily give you the exact artwork that is in the file,\n        // copy/paste is the only way to get this.\n        try {\n            const app = window.app;\n            const fs = environment.fs;\n            const uxpfs = window.nodeRequire('uxp').storage.localFileSystem;\n            const tempFolder = await uxpfs.getTemporaryFolder();\n\n            const assetFile = { '_path' : assetDetails.filePath };\n\n            if (!app || app.documents.length === 0 || !app.activeDocument) {\n                if (assetDetails.isOpenIn === true) {\n                    app.documents.add();\n                } else {\n                    // Need to make a copy of the file to avoid overwrite\n                    const fileExtension = assetDetails.filePath.substr(assetDetails.filePath.lastIndexOf('.') + 1).toLowerCase();\n                    const destPath = tempFolder.nativePath + '/' + new Date().valueOf() + '.' + fileExtension;\n\n                    fs.copyFile(assetDetails.filePath,destPath);\n                    return;\n                }\n            }\n            const shouldLoadToPlaceGun = !assetDetails.isOpenIn;\n            app.activeDocument.importFile(assetFile, assetDetails.isLinked, assetDetails.libraryName, assetDetails.itemName, assetDetails.elementRef,\n                assetDetails.modifiedTime, assetDetails.creationTime, assetDetails.adobeStockId, assetDetails.adobeStockLicense, shouldLoadToPlaceGun);\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n    }\n\n    async saveAssets(info) {\n        const app = window.app;\n        const fileData = { files: [] };\n        const fs = window.nodeRequire('uxp').storage.localFileSystem;\n        const tempFolder = await fs.getTemporaryFolder();\n        const fileName = info.name + '.png';\n        const pngFile = await tempFolder.createFile(fileName, { overwrite: true });\n        this.saveAsPNG({ '_path':pngFile.nativePath }, false, info.maxWidth, info.maxHeight);\n        fileData.rendition = ('/private/' + pngFile.nativePath);\n\n        // ** Save as AI file **\n        const aiPath = info.name + '.ai';\n        const aiFile = await tempFolder.createFile(aiPath, { overwrite: true });\n\n        app.activeDocument.exportSelectionAsAi({ '_path':aiFile.nativePath });\n\n        fileData.files.push({\n            path: aiFile.nativePath,\n            relationship: 'primary'\n        });\n\n        fileData.layerName = app.activeDocument.activeLayer.name;\n        return JSON.stringify(fileData);\n    }\n\n    static pushUnique(colorData, colorType, layerColors) {\n        if (colorData === undefined) {\n            return;\n        }\n        let index;\n        for (index = 0; index < layerColors.length; index++) {\n            if (layerColors[index].data === colorData) {\n                return;\n            }\n        }\n        layerColors.push({\n            colorType,\n            'data': colorData\n        });\n    }\n\n    static populateTextOptionsInLayerObject(layerObject, selection, fillTooltipObj, strokeTooltipObj, isFontAvailableinAIObj) {\n        const app = window.app;\n        layerObject.kind = 'LayerKind.TEXT'; /// kind need to be Layerkind.Text to enable the button\n        if (selection.contents === '') {\n            layerObject.text = 'Random Text'; ///For enabling 'Add Text Style'\n        } else {\n            layerObject.text = selection.contents;\n            const maxLength = 100;\n            if (layerObject.text.length > maxLength) {\n                layerObject.text = layerObject.text.substr(0, maxLength - 1);\n            }\n        }\n        fillTooltipObj.fillTooltip = 'AI_TEXT_FILL';\n        strokeTooltipObj.strokeTooltip = 'AI_TEXT_STROKE';\n        {\n            layerObject.canAddTextAsset = true;\n            if (selection && selection.length > 0 && selection.characterAttributes && selection.characterAttributes.textFont) {\n                isFontAvailableinAIObj.isFontAvailableinAI = app.textFonts.isFontAvailable(selection.characterAttributes.textFont.name);\n            } else if (selection && selection.length === 0) {\n                const currentFont = app.textFonts.getCurrentFont();\n                isFontAvailableinAIObj.isFontAvailableinAI = app.textFonts.isFontAvailable(currentFont);\n                layerObject.canAddTextAsset = true;\n                layerObject.insertionPointExists = true;\n            }\n        }\n    }\n\n    getLayerName() {\n        const app = window.app;\n        return new Promise(function(resolve) {\n            const name = app.activeDocument.activeLayer.name;\n            resolve(name);\n        });\n    }\n\n    getLayerInfo() {\n        const app = window.app;\n        return new Promise(function(resolve) {\n            try {\n                const layerObject = {};\n                const layerColors = [];\n                const fillTooltipObj = { fillTooltip: 'FILL' };\n                const strokeTooltipObj = { strokeTooltip: 'STROKE' };\n                const isFontAvailableinAIObj = { isFontAvailableinAI: true };\n\n                const appSelection = app.selection;\n                if (appSelection) {\n                    let selection = appSelection;\n\n                    layerObject.kind = '';\n                    if (selection) {\n                        if (selection.length === 1 && selection[0] && selection[0]['_target'] && selection[0]['_target']._className === 'TextFrame') {\n                            selection = selection[0].textRange;\n                            ILSTAppUtils.populateTextOptionsInLayerObject(layerObject, selection, fillTooltipObj, strokeTooltipObj, isFontAvailableinAIObj);\n                        } else if (selection['_target'] && selection['_target']._className === 'TextRange') {\n                            ILSTAppUtils.populateTextOptionsInLayerObject(layerObject, selection, fillTooltipObj, strokeTooltipObj, isFontAvailableinAIObj);\n                        }\n                    }\n\n                    try {\n                        const fillColor = app.activeDocument.defaultFillColor;\n                        ILSTAppUtils.pushUnique(COLOR.solidColorToData(fillColor), fillTooltipObj.fillTooltip, layerColors);\n                    } catch (ex) {\n                        debugLog.log(ex);\n                    }\n\n                    try {\n                        const strokeColor = app.activeDocument.defaultStrokeColor;\n                        ILSTAppUtils.pushUnique(COLOR.solidColorToData(strokeColor), strokeTooltipObj.strokeTooltip, layerColors);\n                    } catch (ex) {\n                        debugLog.log(ex);\n                    }\n\n                    layerObject.colors = layerColors;\n\n                    layerObject.name = 'None';\n\n                    // && pageItems.length !== numItemsSelected\n                    if (selection[0] && selection[0].name && selection[0].name !== '') {\n                        layerObject.name = selection[0].name;\n                        layerObject.fullName = selection[0].name;\n                    } else {\n                        if (app.activeDocument.activeLayer) {\n                            layerObject.name = app.activeDocument.activeLayer.name;\n                            layerObject.fullName = app.activeDocument.activeLayer.name;\n                        }\n                    }\n\n                    layerObject.name = ILSTAppUtils.shortenString(layerObject.name, false, 248);\n                    layerObject.selectionExists = (appSelection && appSelection.length > 0);\n\n                    layerObject.isAppliedCharStyleSupported = false;\n                    layerObject.isAppliedParaStyleSupported = false;\n                    if (layerObject.kind === 'LayerKind.TEXT' && isFontAvailableinAIObj.isFontAvailableinAI) {\n                        layerObject.isAppliedCharStyleSupported = true;\n                        layerObject.isAppliedParaStyleSupported = true;\n                    }\n                    //If we happen to have a selection that is not an array but a TextRange object\n                    //then we are in text edit mode and should report no selection to disable adding it as a graphic\n                    //but we still wish to allow applying colors to textRange\n                    if (appSelection && appSelection['_target'] && appSelection['_target']._className === 'TextRange') {\n                        layerObject.selectionExists = false;\n                        // Ensure text selection and not just insertion point\n                        if (appSelection.length > 0) {\n                            layerObject.textSelectionExists = true;\n                        }\n                    }\n                }\n                resolve(layerObject);\n            } catch (ex) {\n                debugLog.log(ex);\n            }\n        });\n    }\n\n    openAsset(filePath) {\n        try {\n            const newDoc = app.open({ _path:filePath });\n            return newDoc.name;\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n    }\n\n    openAssetForEdit(filePath, thumbnailPath, assetType) {\n        if (thumbnailPath) {\n            try {\n                const options = new OpenOptions();\n                options.addToRecentFiles = false;\n                const newDoc = app.openCloudLibraryAssetForEditing({ _path:filePath }, { _path:thumbnailPath }, assetType, options);\n                return Promise.resolve(newDoc.name);\n            } catch (ex) {\n                debugLog.log(ex);\n            }\n        } else {\n            return Promise.resolve(this.openAsset(filePath));\n        }\n    }\n\n    loadAndSelectBrush(FilePath, BrushName) {\n        try {\n            app.activeDocument.brushes.add({ '_path':FilePath }, BrushName);\n        } catch (ex) {\n            //$._ADBE_LIBS_CORE.writeToLog('ILST.jsx-loadAndSelectBrush()', ex);\n        }\n    }\n\n    openDocumentFromTemplate(TemplatePath) {\n        try {\n            app.open({ '_path':TemplatePath });\n        } catch (ex) {\n            //$._ADBE_LIBS_CORE.writeToLog('ILST.jsx-openDocumentFromTemplate()', ex);\n        }\n    }\n}\n\nexport default new ILSTAppUtils();\n","\n/*global ,  UnitValue,\n         StyleRunAlignmentType, AlternateGlyphsForm, BaselineDirectionType, FontBaselineOption, FontCapsOption, FigureStyleType, AutoKernType,\n         FontOpenTypePositionOption, WariChuJustificationType, TabStopInfo, Justification, AutoLeadingType, KinsokuOrderEnum, BurasagariTypeEnum,\n         KashidasType, DirOverrideType, DigitSetType, DiacVPosType, KashidaWidthType, ParagraphDirectionType, ComposerEngineType, TextOrientation, NoColor, ColorModel, TabStopAlignment,*/\n\nimport app from 'script_module';\nimport COLOR from 'app/applications/ILST_UXP/js/color';\nimport debugLog from 'app/js/utils/debugLog';\n//import * as FileUtils from 'app/js/utils/fileUtils';\n\nexport class Text {\n\n    PARASTYLE_REPRESENTATION_JSON_TYPE = 'application/vnd.adobe.paragraphstyle+json';\n    CHARSTYLE_REPRESENTATION_JSON_TYPE = 'application/vnd.adobe.characterstyle+json';\n\n    GET_CHARACTER_STYLE = 'Get Character Style';\n    GET_PARAGRAPH_STYLE = 'Get Paragraph Style';\n\n    GET_CHARACTER_STYLE_BY_ID = 'Get Character Style By Id';\n    GET_PARAGRAPH_STYLE_BY_ID = 'Get Paragraph Style By Id';\n    GET_COLLISION_RESPONCE = 'Get Collision Response';\n\n    MAX_STYLE_NAME_SIZE = 255;\n    TypographyArray = [];\n    GlobalConflictResolutionStrategy = {};\n\n    ConflictResolutionStrategy = {\n        wasNotOk: 1,\n        useExisting: 2,\n        useIncoming: 3\n    };\n\n    isEmptyObject(obj) {\n        let key;\n        for (key in obj) {\n            if (Object.prototype.hasOwnProperty.call(obj, key)) {\n                //has at-least one own property\n                return false;\n            }\n        }\n        return true;\n    }\n\n    collectCharacterAttributes(obj, characterAttributes) {\n        const charAttributes = {};\n        let key, value;\n        for (key in characterAttributes) {\n            if (Object.prototype.hasOwnProperty.call(characterAttributes, key)) {\n                try {\n                    charAttributes[key] = characterAttributes[key];\n                } catch (ex) {\n                    debugLog.log(ex);\n                }\n            }\n        }\n        if (charAttributes.fillColor !== undefined) {\n            if (charAttributes.fillColor.__class__ === 'String') {\n                obj.color = charAttributes.fillColor;\n            } else if (COLOR.isColorSupported(charAttributes.fillColor)) {\n                obj.color = COLOR.solidColorToData(charAttributes.fillColor);\n            }\n        }\n\n        // Only add stroke color if we have one\n        if (charAttributes.strokeColor !== undefined) {\n            if (charAttributes.strokeColor.__class__ === 'String') {\n                obj.adbeIlstStrokeColor = charAttributes.strokeColor;\n            } else if (COLOR.isColorSupported(charAttributes.strokeColor)) {\n                obj.adbeIlstStrokeColor = COLOR.solidColorToData(charAttributes.strokeColor);\n            }\n        }\n\n        if (charAttributes.textFont !== undefined) {\n            if (charAttributes.textFont !== null) {\n                obj.adbeFont = {\n                    family: charAttributes.textFont.family,\n                    name: charAttributes.textFont.name,\n                    postScriptName: charAttributes.textFont.name,\n                    style: charAttributes.textFont.style\n                };\n                obj.fontFamily = charAttributes.textFont.family;\n            }\n        }\n\n        if (charAttributes.size !== undefined) {\n            obj.fontSize = {\n                type: 'pt',\n                value: charAttributes.size\n            };\n        }\n\n        if (charAttributes.textFont !== undefined && charAttributes.textFont !== null && charAttributes.textFont.style !== undefined) {\n            //Approximate font-style and font-weight for CSS\n            const style = charAttributes.textFont.style.toLowerCase();\n            if (style.indexOf('italic') !== -1) {\n                obj.fontStyle = 'italic';\n            } else if (style.indexOf('oblique') !== -1) {\n                obj.fontStyle = 'oblique';\n            }\n\n            if (style.indexOf('bold') !== -1) {\n                obj.fontWeight = 'bold';\n            }\n\n            if (style.indexOf('light') !== -1 || style.indexOf('thin') !== -1) {\n                obj.fontWeight = 'lighter';\n            }\n        }\n\n        //CHARACTER ATTRIBUTES\n        //Enumerations\n\n        if (charAttributes.alignment !== undefined) {\n            obj.adbeIlstAlignment = charAttributes.alignment;\n        }\n\n        if (charAttributes.alternateGlyphs !== undefined) {\n            try {\n                obj.adbeIlstAlternateGlyphs = charAttributes.alternateGlyphs;\n            } catch (e) {\n                obj.adbeIlstAlternateGlyphs = AlternateGlyphsForm.DEFAULTFORM.toString();\n            }\n        }\n\n        if (charAttributes.baselineDirection !== undefined) {\n            obj.adbeIlstBaselineDirection = charAttributes.baselineDirection;\n            if (obj.adbeIlstBaselineDirection === 'BaselineDirectionType.TateChuYoko') {\n                obj.adbeIdsnTatechuyoko = true;\n            }\n        }\n\n        if (charAttributes.figureStyle !== undefined) {\n            obj.adbeIlstFigureStyle = charAttributes.figureStyle;\n        }\n\n        if (charAttributes.kerningMethod !== undefined) {\n            try {\n                obj.adbeIlstKerningMethod = charAttributes.kerningMethod;\n            } catch (err) {\n                obj.adbeIlstKerningMethod = AutoKernType.AUTO.toString();\n            }\n        }\n\n        if (charAttributes.openTypePosition !== undefined) {\n            obj.adbeIlstOpenTypePosition = charAttributes.openTypePosition;\n        }\n\n        if (charAttributes.wariChuJustification !== undefined) {\n            obj.adbeIlstWariChuJustification = charAttributes.wariChuJustification;\n        }\n\n        //booleans and numbers\n\n        if (charAttributes.akiLeft !== undefined) {\n            obj.adbeIlstAkiLeft = charAttributes.akiLeft;\n        }\n\n        if (charAttributes.akiRight !== undefined) {\n            obj.adbeIlstAkiRight = charAttributes.akiRight;\n        }\n\n        if (charAttributes.autoLeading !== undefined) {\n            if (charAttributes.autoLeading) {\n                obj.adbeAutoLeading = true;\n            }\n        }\n\n        if (charAttributes.baselineShift !== undefined) {\n            obj.baselineShift = {\n                type: 'pt',\n                value: charAttributes.baselineShift\n            };\n        }\n\n        if (charAttributes.connectionForms !== undefined) {\n            obj.adbeIlstConnectionForms = charAttributes.connectionForms;\n        }\n\n        if (charAttributes.horizontalScale !== undefined) {\n            obj.adbeHorizontalScale = charAttributes.horizontalScale;\n        }\n\n        if (charAttributes.leading !== undefined) {\n            obj.lineHeight = {\n                type: 'pt',\n                value: charAttributes.leading\n            };\n        }\n        if (charAttributes.language !== undefined) {\n            obj.adbeIdsnAppliedLanguageName = charAttributes.language;\n        }\n\n        if (charAttributes.noBreak !== undefined) {\n            if (charAttributes.noBreak) {\n                obj.whiteSpace = 'nowrap';\n            }\n        }\n\n        if (charAttributes.overprintFill !== undefined) {\n            obj.adbeIlstOverprintFill = charAttributes.overprintFill;\n        }\n\n        if (charAttributes.overprintStroke !== undefined) {\n            obj.adbeIlstOverprintStroke = charAttributes.overprintStroke;\n        }\n\n        if (charAttributes.proportionalMetrics !== undefined) {\n            obj.adbeIlstProportionalMetrics = charAttributes.proportionalMetrics;\n        }\n\n        if (charAttributes.rotation !== undefined) {\n            obj.adbeIlstRotation = charAttributes.rotation;\n        }\n\n        //Only gather the stroke weight if there is a color specified\n\n        if (charAttributes.strokeWeight !== undefined) {\n            if (obj.adbeIlstStrokeColor) {\n                obj.adbeIlstStrokeWeight = charAttributes.strokeWeight;\n            }\n        }\n\n        if (charAttributes.tateChuYokoHorizontal !== undefined) {\n            obj.adbeIlstTateChuYokoHorizontal = charAttributes.tateChuYokoHorizontal;\n        }\n\n        if (charAttributes.tateChuYokoVertical !== undefined) {\n            obj.adbeIlstTateChuYokoVertical = charAttributes.tateChuYokoVertical;\n        }\n\n        // OpenType feature settings\n        obj.fontFeatureSettings = [];\n        obj.fontFeatureSettingsObject = {};\n        if (charAttributes.swash !== undefined) {\n            obj.fontFeatureSettingsObject.adbeOTFSwash = charAttributes.swash;\n            if (charAttributes.swash) {\n                obj.fontFeatureSettings.push('swsh');\n            }\n        }\n\n        if (charAttributes.justificationAlternates !== undefined) {\n            obj.fontFeatureSettingsObject.adbeOTFJustificationAlternates = charAttributes.justificationAlternates;\n            if (charAttributes.justificationAlternates) {\n                obj.fontFeatureSettings.push('jalt');\n            }\n        }\n\n        if (charAttributes.stylisticSets !== undefined) {\n            /* Spec's count starts with 2, ILST's starts with 1, converting as per spec */\n            obj.adbeIdsnOtfStylisticSets = 2 * charAttributes.stylisticSets;\n        }\n\n        if (charAttributes.ordinals !== undefined) {\n            obj.fontFeatureSettingsObject.adbeOTFOrdinals = charAttributes.ordinals;\n            if (charAttributes.ordinals) {\n                obj.fontFeatureSettings.push('ordn');\n            }\n        }\n\n        if (charAttributes.ornaments !== undefined) {\n            obj.fontFeatureSettingsObject.adbeOTFOrnaments = charAttributes.ordinals;\n            if (charAttributes.ornaments) {\n                obj.fontFeatureSettings.push('ornm');\n            }\n        }\n\n        if (charAttributes.kana !== undefined) {\n            obj.fontFeatureSettingsObject.adbeOTFHVKana = charAttributes.kana;\n            if (charAttributes.kana) {\n                obj.fontFeatureSettings.push('hvkn');\n            }\n        }\n\n        if (charAttributes.discretionaryLigature !== undefined) {\n            obj.fontFeatureSettingsObject.adbeOTFDiscretionaryLigatures = charAttributes.discretionaryLigature;\n            if (charAttributes.discretionaryLigature) {\n                obj.fontFeatureSettings.push('dlig');\n            }\n        }\n\n        if (charAttributes.contextualLigature !== undefined) {\n            obj.fontFeatureSettingsObject.adbeOTFContextualAlternates = charAttributes.contextualLigature;\n            if (charAttributes.contextualLigature) {\n                obj.fontFeatureSettings.push('clig');\n            }\n        }\n\n        if (charAttributes.ligature !== undefined) {\n            obj.fontFeatureSettingsObject.adbeLigatures = charAttributes.ligature;\n            if (charAttributes.ligature) {\n                obj.fontFeatureSettings.push('liga');\n            }\n        }\n\n        if (charAttributes.fractions !== undefined) {\n\n            obj.fontFeatureSettingsObject.adbeOTFFractions = charAttributes.fractions;\n            if (charAttributes.fractions) {\n                obj.fontFeatureSettings.push('frac');\n            }\n        }\n\n        if (charAttributes.titling !== undefined) {\n            obj.fontFeatureSettingsObject.adbeOTFTitlingAlternates = charAttributes.titling;\n            if (charAttributes.titling) {\n                obj.fontFeatureSettings.push('titl');\n            }\n        }\n\n        if (charAttributes.stylisticAlternates !== undefined) {\n            obj.fontFeatureSettingsObject.adbeOTFStylisticAlternates = charAttributes.stylisticAlternates;\n            if (charAttributes.stylisticAlternates) {\n                obj.fontFeatureSettings.push('salt');\n            }\n        }\n\n        if (charAttributes.italics !== undefined) {\n            obj.fontFeatureSettingsObject.adbeOTFRomanItalics = charAttributes.italics;\n            if (charAttributes.italics) {\n                obj.fontFeatureSettings.push('rita');\n            }\n        }\n\n        if (charAttributes.baselinePosition === FontBaselineOption.SUPERSCRIPT.toString()) {\n            obj.fontFeatureSettingsObject.adbePosition = 'Position.SUPERSCRIPT';\n            obj.fontFeatureSettings.push('sups');\n        } else if (charAttributes.baselinePosition === FontBaselineOption.SUBSCRIPT.toString()) {\n            obj.fontFeatureSettingsObject.adbePosition = 'Position.SUBSCRIPT';\n            obj.fontFeatureSettings.push('subs');\n        } else if (charAttributes.baselinePosition === FontBaselineOption.NORMALBASELINE.toString()) {\n            obj.fontFeatureSettingsObject.adbePosition = 'Position.NORMAL';\n        }\n\n        if (charAttributes.capitalization !== undefined) {\n            if (charAttributes.capitalization === FontCapsOption.NORMALCAPS.toString()) {\n                obj.fontFeatureSettingsObject.adbeCapitalization = 'FontCapsOption.NORMAL';\n            } else {\n                obj.fontFeatureSettingsObject.adbeCapitalization = charAttributes.capitalization;\n            }\n        }\n\n        if (charAttributes.capitalization === FontCapsOption.ALLSMALLCAPS.toString()) {\n            obj.fontFeatureSettings.push('c2sc');\n        } else if (charAttributes.capitalization === FontCapsOption.SMALLCAPS.toString()) {\n            obj.fontFeatureSettings.push('smcp');\n        } else if (charAttributes.capitalization === FontCapsOption.ALLCAPS.toString()) {\n            obj.textTransform = 'capitalize';\n        }\n\n        if (this.isEmptyObject(obj.fontFeatureSettingsObject)) {\n            delete obj.fontFeatureSettingsObject;\n        }\n\n        //If we have no open type settings delete the empty array\n        if (obj.fontFeatureSettings.length === 0) {\n            delete obj.fontFeatureSettings;\n        }\n\n        if (charAttributes.tracking !== undefined) {\n            obj.adbeTracking = charAttributes.tracking;\n        }\n\n        if (obj.adbeTracking) {\n            obj.letterSpacing = {\n                type: 'em',\n                value: (obj.adbeTracking / 1000.0).toFixed(2)\n            };\n        }\n\n        if (charAttributes.Tsume !== undefined) {\n            obj.adbeIlstTsume = charAttributes.Tsume;\n        }\n\n        obj.textDecorationObject = {};\n        // text-decoration properties\n\n        if (charAttributes.underline !== undefined) {\n            obj.textDecorationObject.adbeUnderline = charAttributes.underline;\n            if (charAttributes.underline) {\n                if (obj.textDecoration) {\n                    obj.textDecoration.push('underline');\n                } else {\n                    obj.textDecoration = [ 'underline' ];\n                }\n            }\n        }\n\n        //Strike through or in CSS speak line-through\n        if (charAttributes.strikeThrough !== undefined) {\n            obj.textDecorationObject.adbeStrikethrough = charAttributes.strikeThrough;\n            if (charAttributes.strikeThrough) {\n                if (obj.textDecoration) {\n                    obj.textDecoration.push('line-through');\n                } else {\n                    obj.textDecoration = [ 'line-through' ];\n                }\n            }\n        }\n\n        if (charAttributes.verticalScale !== undefined) {\n            obj.adbeVerticalScale = charAttributes.verticalScale;\n        }\n\n        if (charAttributes.wariChuCharactersAfterBreak !== undefined) {\n            obj.adbeIlstWariChuCharactersAfterBreak = charAttributes.wariChuCharactersAfterBreak;\n        }\n\n        if (charAttributes.wariChuCharactersBeforeBreak !== undefined) {\n            obj.adbeIlstWariChuCharactersBeforeBreak = charAttributes.wariChuCharactersBeforeBreak;\n        }\n\n        if (charAttributes.wariChuEnabled !== undefined) {\n            obj.adbeIlstWariChuEnabled = charAttributes.wariChuEnabled;\n        }\n\n        if (charAttributes.wariChuLineGap !== undefined) {\n            obj.adbeIlstWariChuLineGap = charAttributes.wariChuLineGap;\n        }\n\n        if (charAttributes.wariChuLines !== undefined) {\n            obj.adbeIlstWariChuLines = charAttributes.wariChuLines;\n        }\n\n        if (charAttributes.wariChuScale !== undefined) {\n            obj.adbeIlstWariChuScale = charAttributes.wariChuScale;\n        }\n\n        if (charAttributes.kashidas !== undefined) {\n            obj.adbeIdsnKashidas = charAttributes.kashidas;\n        }\n\n        if (charAttributes.dirOverride !== undefined) {\n            value = charAttributes.dirOverride.split('.', 2)[1];\n            obj.adbeIdsnCharacterDirection = 'CharacterDirectionOptions.' + value;\n        }\n\n        if (charAttributes.digitSet !== undefined) {\n            obj.adbeIdsnDigitsType = charAttributes.digitSet;\n        }\n\n        if (charAttributes.diacVPos !== undefined) {\n            obj.adbeIdsnDiacriticPosition = charAttributes.diacVPos;\n        }\n\n        if (charAttributes.diacXOffset !== undefined) {\n            obj.adbeIdsnXOffsetDiacritic = charAttributes.diacXOffset;\n        }\n\n        if (charAttributes.diacYOffset !== undefined) {\n            obj.adbeIdsnYOffsetDiacritic = charAttributes.diacYOffset;\n        }\n\n        return obj;\n    }\n\n    collectParagraphAttributes(obj, source) {\n        this.getJustificationAttributes(obj, source);\n        this.getScalingAttributes(obj, source);\n        this.getSpacingAttributes(obj, source);\n        this.getHyphenationAttributes(obj, source);\n        this.getIndentationAttributes(obj, source);\n        this.getOtherAttributes(obj, source);\n        this.getTabAttributes(obj, source);\n    }\n\n    convertJustificationString(justificationStr, isSingleWord) {\n        'use strict';\n        //converts Paragraph Justification to Id specific String ,, and vice versa\n        let prefix = 'Alignment.';\n        if (isSingleWord) {\n            prefix = 'Justification.';\n        }\n        switch (justificationStr) {\n        //Justification is of form Alignment.<Id Specific Justification>\n        //converting it to Ai's Justification Specific String\n        case 'Alignment.LEFT_ALIGN':\n            return 'LEFT';\n        case 'Alignment.CENTER_ALIGN':\n            return 'CENTER';\n        case 'Alignment.RIGHT_ALIGN':\n            return 'RIGHT';\n        case 'Alignment.LEFT_JUSTIFIED':\n            return 'FULLJUSTIFYLASTLINELEFT';\n        case 'Alignment.CENTER_JUSTIFIED':\n            return 'FULLJUSTIFYLASTLINECENTER';\n        case 'Alignment.RIGHT_JUSTIFIED':\n            return 'FULLJUSTIFYLASTLINERIGHT';\n        case 'Alignment.FULLY_JUSTIFIED':\n            return 'FULLJUSTIFY';\n        case 'Justification.LEFT_ALIGN':\n            return 'LEFT';\n        case 'Justification.CENTER_ALIGN':\n            return 'CENTER';\n        case 'Justification.RIGHT_ALIGN':\n            return 'RIGHT';\n        case 'Justification.LEFT_JUSTIFIED':\n            return 'FULLJUSTIFYLASTLINELEFT';\n        case 'Justification.CENTER_JUSTIFIED':\n            return 'FULLJUSTIFYLASTLINECENTER';\n        case 'Justification.RIGHT_JUSTIFIED':\n            return 'FULLJUSTIFYLASTLINERIGHT';\n        case 'Justification.FULLY_JUSTIFIED':\n            return 'FULLJUSTIFY';\n            //Converting Ai Specific Justfication to Id's adbeParaAlignment parameter\n        case 'Justification.LEFT':\n            return prefix + 'LEFT_ALIGN';\n        case 'Justification.CENTER':\n            return prefix + 'CENTER_ALIGN';\n        case 'Justification.RIGHT':\n            return prefix + 'RIGHT_ALIGN';\n        case 'Justification.FULLJUSTIFYLASTLINELEFT':\n            return prefix + 'LEFT_JUSTIFIED';\n        case 'Justification.FULLJUSTIFYLASTLINECENTER':\n            return prefix + 'CENTER_JUSTIFIED';\n        case 'Justification.FULLJUSTIFYLASTLINERIGHT':\n            return prefix + 'RIGHT_JUSTIFIED';\n        case 'Justification.FULLJUSTIFY':\n            return prefix + 'FULLY_JUSTIFIED';\n\n        default:\n            return '';\n        }\n\n    }\n\n    convertKinsokuTypeString(kinsokuStr) {\n        'use strict';\n        switch (kinsokuStr) {\n        case 'KinsokuType.KINSOKU_PUSH_IN_FIRST':\n            return 'KinsokuOrderEnum.PUSHIN';\n        case 'KinsokuType.KINSOKU_PUSH_OUT_FIRST':\n            return 'KinsokuOrderEnum.PUSHOUTFIRST';\n        case 'KinsokuType.KINSOKU_PUSH_OUT_ONLY':\n            return 'KinsokuOrderEnum.PUSHOUTONLY';\n        case 'KinsokuOrderEnum.PUSHIN':\n            return 'KinsokuType.KINSOKU_PUSH_IN_FIRST';\n        case 'KinsokuOrderEnum.PUSHOUTONLY':\n            return 'KinsokuType.KINSOKU_PUSH_OUT_ONLY';\n        case 'KinsokuOrderEnum.PUSHOUTFIRST':\n            return 'KinsokuType.KINSOKU_PUSH_OUT_FIRST';\n        default:\n            return '';\n        }\n    }\n\n    convertTabAlignmentTypeString(TabAlignmentStr) {\n        'use strict';\n        const prefix = 'TabStopAlignment.';\n        switch (TabAlignmentStr) {\n        case 'TabStopAlignment.LEFT_ALIGN':\n            return TabStopAlignment.Left;\n        case 'TabStopAlignment.RIGHT_ALIGN':\n            return TabStopAlignment.Right;\n        case 'TabStopAlignment.CENTER_ALIGN':\n            return TabStopAlignment.Center;\n        case 'TabStopAlignment.CHARACTER_ALIGN':\n            return TabStopAlignment.Decimal;\n        case 'TabType.Left':\n            return prefix + 'LEFT_ALIGN';\n        case 'TabType.Right':\n            return prefix + 'RIGHT_ALIGN';\n        case 'TabType.Center':\n            return prefix + 'CENTER_ALIGN';\n        case 'TabType.Decimal':\n            return prefix + 'CHARACTER_ALIGN';\n        default:\n            return '';\n        }\n    }\n\n    convertComposerEngineTypeString(composerEngineTypeStr) {\n        'use strict';\n        const prefix = 'ComposerType.';\n        switch (composerEngineTypeStr) {\n        case 'ComposerType.WorldReady':\n            return ComposerEngineType.optycaComposer;\n        case 'ComposerType.Japanese':\n        case 'ComposerType.Adobe':\n            return ComposerEngineType.latinCJKComposer;\n        case 'ComposerEngineType.optycaComposer':\n            return prefix + 'WorldReady';\n        case 'ComposerEngineType.latinCJKComposer':\n            if (app.preferences.getBooleanPreference('showAsianTextOptions') === true) {\n                return prefix + 'Japanese';\n            }\n            return prefix + 'Adobe';\n        default:\n            return '';\n        }\n    }\n\n    getJustificationAttributes(obj, source) {\n\n        ///////////////////////////////\n        ////    Common Attributes\n        ///////////////////////////////\n\n        try {\n            //justification\n            if (source.justification !== undefined) {\n                obj.adbeParaAlignment = this.convertJustificationString(source.justification, false);\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        try {\n            //singleWordJustification\n            if (source.singleWordJustification !== undefined) {\n                const justStr = source.singleWordJustification;\n                obj.adbeSingleWordJustification = this.convertJustificationString(justStr, true);\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        ///////////////////////////////\n        ////    Ai Specific Attributes\n        ///////////////////////////////\n    }\n\n    getSpacingAttributes(obj, source) {\n        ///////////////////////////////\n        ////    Common Attributes\n        ///////////////////////////////\n\n        try {\n            //minimumWordSpacing\n            if (source.minimumWordSpacing !== undefined) {\n                obj.adbeMinimumWordSpacing = source.minimumWordSpacing;\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        try {\n            //desiredWordSpacing\n            if (source.desiredWordSpacing !== undefined) {\n                obj.adbeDesiredWordSpacing = source.desiredWordSpacing;\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        try {\n            //maximumWordSpacing\n            if (source.maximumWordSpacing !== undefined) {\n                obj.adbeMaximumWordSpacing = source.maximumWordSpacing;\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        try {\n            //minimumLetterSpacing\n            if (source.minimumLetterSpacing !== undefined) {\n                obj.adbeMinimumLetterSpacing = source.minimumLetterSpacing;\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        try {\n            //desiredLetterSpacing\n            if (source.desiredLetterSpacing !== undefined) {\n                obj.adbeDesiredLetterSpacing = source.desiredLetterSpacing;\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        try {\n            //maximumLetterSpacing\n            if (source.maximumLetterSpacing !== undefined) {\n                obj.adbeMaximumLetterSpacing = source.maximumLetterSpacing;\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        try {\n            //spaceAfter\n            if (source.spaceAfter !== undefined) {\n                obj.adbeSpaceAfter = {\n                    type: 'pt',\n                    value: source.spaceAfter\n                };\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        try {\n            //spaceBefore\n            if (source.spaceBefore !== undefined) {\n                obj.adbeSpaceBefore = {\n                    type: 'pt',\n                    value: source.spaceBefore\n                };\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        ///////////////////////////////\n        ////    Ai Specific Attributes\n        ///////////////////////////////\n    }\n\n    getScalingAttributes(obj, source) {\n        ///////////////////////////////\n        ////    Common Attributes\n        ///////////////////////////////\n        try {\n            //minimumGlyphScaling\n            if (source.minimumGlyphScaling !== undefined) {\n                obj.adbeMinimumGlyphScaling = source.minimumGlyphScaling;\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        try {\n            //desiredGlyphScaling\n            if (source.desiredGlyphScaling !== undefined) {\n                obj.adbeDesiredGlyphScaling = source.desiredGlyphScaling;\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        try {\n            //maximumGlyphScaling\n            if (source.maximumGlyphScaling !== undefined) {\n                obj.adbeMaximumGlyphScaling = source.maximumGlyphScaling;\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        ///////////////////////////////\n        ////    Ai Specific Attributes\n        ///////////////////////////////\n    }\n\n    getHyphenationAttributes(obj, source) {\n\n        ///////////////////////////////\n        ////    Common Attributes\n        ///////////////////////////////\n        try {\n            //hyphenation\n            if (source.hyphenation !== undefined) {\n                obj.adbeHyphenation = source.hyphenation;\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        //hyphenationZone\n        if (source.hyphenationZone !== undefined) {\n            obj.adbeHyphenationZone = {\n                type: 'pt',\n                value: source.hyphenationZone\n            };\n        }\n\n        //hyphenateCapitalizedWords\n        if (source.hyphenateCapitalizedWords !== undefined) {\n            obj.adbeHyphenateCapitalizedWords = source.hyphenateCapitalizedWords;\n        }\n\n        ///////////////////////////////\n        ////    Ai Specific Attributes\n        ///////////////////////////////\n\n        try {\n            //hyphenationPreference\n            if (source.hyphenationPreference !== undefined) {\n                obj.adbeHyphenWeight = source.hyphenationPreference * 100; // to make it 0-100 as ID\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        try {\n            //maximumConsecutiveHyphens\n            if (source.maximumConsecutiveHyphens !== undefined) {\n                obj.adbeHyphenateLimit = source.maximumConsecutiveHyphens;\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        try {\n            //minimumAfterHyphen\n            if (source.minimumAfterHyphen !== undefined) {\n                obj.adbeHyphenateAfterFirst = source.minimumAfterHyphen;\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        try {\n            //minimumBeforeHyphen\n            if (source.minimumBeforeHyphen !== undefined) {\n                obj.adbeHyphenateBeforeLast = source.minimumBeforeHyphen;\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        try {\n            //minimumHyphenatedWordSize\n            if (source.minimumHyphenatedWordSize !== undefined) {\n                obj.adbeHyphenateWordsLongerThan = source.minimumHyphenatedWordSize;\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n    }\n\n    getIndentationAttributes(obj, source) {\n\n        ///////////////////////////////\n        ////    Common Attributes\n        ///////////////////////////////\n        try {\n            //firstLineIndent\n            if (source.firstLineIndent !== undefined) {\n                obj.adbeFirstLineIndent = {\n                    type: 'pt',\n                    value: source.firstLineIndent\n                };\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        try {\n            //leftIndent\n            if (source.leftIndent !== undefined) {\n                obj.adbeLeftIndent = {\n                    type: 'pt',\n                    value: source.leftIndent\n                };\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        try {\n            //rightIndent\n            if (source.rightIndent !== undefined) {\n                obj.adbeRightIndent = {\n                    type: 'pt',\n                    value: source.rightIndent\n                };\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        ///////////////////////////////\n        ////    Ai Specific Attributes\n        ///////////////////////////////\n    }\n\n    getOtherAttributes(obj, source) {\n\n        ///////////////////////////////\n        ////    Common Attributes\n        ///////////////////////////////\n\n        try {\n            if (source.paragraphDirection !== undefined) {\n                obj.adbeIdsnParagraphDirection = source.paragraphDirection;\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        try {\n            if (source.kashidaWidth !== undefined) {\n                obj.adbeIdsnKashidaWidth = source.kashidaWidth;\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        try {\n            if (source.composerEngine !== undefined) {\n                obj.adbeIlstComposerEngine = this.convertComposerEngineTypeString(source.composerEngine);\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        //bunriKinshi\n        try {\n            if (source.bunriKinshi !== undefined) {\n                obj.adbeBunriKinshi = source.bunriKinshi;\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        try {\n            //kinsokuOrder  : kinsokuOrder is kinsokuType in Id\n            if (source.kinsokuOrder !== undefined) {\n                obj.adbeKinsokuType = this.convertKinsokuTypeString(source.kinsokuOrder);\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        ///////////////////////////////\n        ////    Ai Specific Attributes\n        ///////////////////////////////\n\n        //autoLeadingAmount\n        try {\n            if (source.autoLeadingAmount !== undefined) {\n                obj.adbeParaAutoLeading = source.autoLeadingAmount;\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        //burasagariType\n        try {\n            if (source.burasagariType !== undefined) {\n                switch (source.burasagariType) {\n                case BurasagariTypeEnum.Forced.toString():\n                    obj.adbeIlstBurasagariType = 'BurasagariTypeEnum.Forced';\n                    break;\n                case BurasagariTypeEnum.Standard.toString():\n                    obj.adbeIlstBurasagariType = 'BurasagariTypeEnum.Standard';\n                    break;\n                case BurasagariTypeEnum.None.toString():\n                    obj.adbeIlstBurasagariType = 'BurasagariTypeEnum.None';\n                    break;\n                }\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        //everyLineComposer\n        try {\n            if (source.everyLineComposer !== undefined) {\n                obj.adbeIlstEveryLineComposer = source.everyLineComposer;\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        //leadingType\n        try {\n            if (source.leadingType !== undefined) {\n                obj.adbeLeadingModel = source.leadingType;\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        //kurikaeshiMojiShori\n        try {\n            if (source.kurikaeshiMojiShori !== undefined) {\n                obj.adbeIlstKurikaeshiMojiShori = source.kurikaeshiMojiShori;\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        //mojikumi\n        if (source.mojikumi !== undefined) {\n            obj.adbeIlstMojikumi = source.mojikumi;\n        }\n        //kinsoku\n        if (source.kinsoku !== undefined) {\n            switch (source.kinsoku) {\n            case 'Hard':\n                obj.adbeKinsokuSet = 'KinsokuSet.HARD_KINSOKU';\n                break;\n            case 'Soft':\n                obj.adbeKinsokuSet = 'KinsokuSet.SOFT_KINSOKU';\n                break;\n            case 'None':\n                obj.adbeKinsokuSet = 'KinsokuSet.NOTHING';\n                break;\n            }\n        }\n\n        //romanHanging\n        try {\n            if (source.romanHanging !== undefined) {\n                obj.adbeIlstRomanHanging = source.romanHanging;\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n    }\n\n    getTabAttributes(obj, source) {\n        try {\n            if (source.tabStops !== undefined) {\n                obj.adbeTabStops = [];\n                const tabStops = source.tabStops;\n                let tabStop;\n                let tabStopObj = {};\n                let i;\n                for (i = 0; i < tabStops.length; ++i) {\n                    tabStop = tabStops[i];\n                    tabStopObj = {};\n                    tabStopObj.adbeTabAlignment = this.convertTabAlignmentTypeString(tabStop.alignment);\n                    tabStopObj.adbeTabAlignmentChar = tabStop.alignmentCharacter;\n                    tabStopObj.adbeTabLeader = tabStop.leader;\n\n                    tabStopObj.adbeTabPosition = {\n                        type: 'pt',\n                        value: tabStop.position\n                    };\n                    obj.adbeTabStops.push(tabStopObj);\n                }\n                if (obj.adbeTabStops.length === 0) {\n                    delete obj.adbeTabStops;\n                }\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n    }\n\n    captureText(responseJsonData) {\n        let textInfo = {};\n        textInfo = JSON.parse(responseJsonData);\n        const stylesMap = textInfo.styles;\n        let styleItem, styleItemKey;\n        let styleItemValue;\n        let newStyleItemValue;\n        let styleType;\n        for (styleItemKey in stylesMap) {\n            if (Object.prototype.hasOwnProperty.call(stylesMap, styleItemKey)) {\n                styleItem = stylesMap[styleItemKey];\n                newStyleItemValue = {};\n                styleType = styleItem.type;\n                styleItemValue = styleItem.value;\n                delete styleItemValue.styleName;\n                this.collectCharacterAttributes(newStyleItemValue, styleItemValue);\n                if (styleType === 'application/vnd.adobe.paragraphstyle+json') {\n                    this.collectParagraphAttributes(newStyleItemValue, styleItemValue);\n                }\n                styleItem.value = newStyleItemValue;\n            }\n        }\n\n        return textInfo;\n    }\n\n    async getTextInfo() {\n        const textObj = {};\n        let topObject;\n        const appSelection = app.activeDocument.selection;\n        // 1. If a text range is selected, appSelection represents the selected text range\n        // 2. If a single text frame is selected, appSelection represents an array of length 1\n        // 3. If multiple objects are selected, appSelection represents an array of length > 1\n\n        if (appSelection && appSelection['_target'] && appSelection['_target']._className === 'TextRange') {\n            topObject = appSelection;\n        } else if (Array.isArray(appSelection)) {\n            if (appSelection.length === 1 && appSelection[0] && appSelection[0]['_target'] && appSelection[0]['_target']._className === 'TextFrame') {\n                topObject = appSelection[0].textRange;\n            }\n        }\n\n        if (topObject) {\n            // At this point, topObject represents the selected text range\n            // We now create an ai file with this text range\n            //let fs = window.nodeRequire('fs');\n            const uxpfs = window.nodeRequire('uxp').storage.localFileSystem;\n            const tempFolder = await uxpfs.getTemporaryFolder();\n            const basePath = tempFolder.nativePath + 'TextPreview' + new Date().valueOf();\n            const aiPath = basePath + '.ai';\n            const pngPath = basePath + '.png';\n            const responseJsonData = app.sendScriptMessage('Design Library', 'Get Add Text JSON', basePath);\n            const textInfo = this.captureText(responseJsonData);\n            if (!this.isEmptyObject(textInfo)) {\n                textObj.primaryRepresentation = {};\n                textObj.primaryRepresentation.filePath = aiPath;\n                textObj.primaryRepresentation.isFile = true;\n                textObj.primaryRepresentation.representationType = 'application/illustrator-text';\n                textObj.textInfo = textInfo;\n                textObj.previewPath = pngPath;\n            } else {\n                debugLog.log('this.getTextInfo->failed creating text info');\n            }\n\n            //******************TEMP CHANGES TO BE REMOVED*************\n            //** write to file\n            //var txtFile = \"C:/Users/anmurark/Desktop/Trash/test.txt\";\n            //var file = new File(txtFile);\n            //file.open(\"w\"); // open file with write access\n            //file.write(JSON.stringify(textObj, null, \"\\t\"));\n            //file.close();\n        }\n        return JSON.stringify(textObj);\n    }\n\n    async getParagraphStyle() {\n        const paragraphStyleObject = {};\n        const styleInfo = {};\n        const uxpfs = window.nodeRequire('uxp').storage.localFileSystem;\n        const tempFolder = await uxpfs.getTemporaryFolder();\n        const previewPath = tempFolder.nativePath + 'TextStylePreview' + new Date().valueOf() + '.png';\n        let attributes;\n        let jsonString;\n        try {\n            jsonString = app.sendScriptMessage('Design Library', this.GET_PARAGRAPH_STYLE, previewPath);\n            if (jsonString) {\n                attributes = JSON.parse(jsonString);\n            }\n            if (attributes.styleName) {\n                paragraphStyleObject.styleName = attributes.styleName;\n            }\n            if (attributes) {\n                try {\n                    this.collectParagraphAttributes(styleInfo, attributes);\n                } catch (ex1) {\n                    debugLog.log('Error ILST->this.getCharacterStyle()->collectParagraphAttributes() ', ex1);\n                }\n\n                try {\n                    this.collectCharacterAttributes(styleInfo, attributes);\n                } catch (ex2) {\n                    debugLog.log('Error ILST->this.getCharacterStyle()->collectCharacterAttributes() ', ex2);\n                }\n            }\n\n            paragraphStyleObject.styleInfo = styleInfo;\n            paragraphStyleObject.previewPath = previewPath;\n        } catch (ex) {\n            debugLog.log('Error ILST->this.getParagraphStyle()', ex);\n        }\n        return paragraphStyleObject;\n    }\n\n    async getCharacterStyle() {\n        //var currentSelection = app.activeDocument.selection;\n        const uxpfs = window.nodeRequire('uxp').storage.localFileSystem;\n        const tempFolder = await uxpfs.getTemporaryFolder();\n        const previewPath = tempFolder.nativePath + 'TextStylePreview' + new Date().valueOf() + '.png';\n        const characterStyleObject = {};\n        let attributes;\n        let jsonString;\n        try {\n            jsonString = app.sendScriptMessage('Design Library', this.GET_CHARACTER_STYLE, previewPath);\n            if (jsonString) {\n                attributes = JSON.parse(jsonString);\n            }\n            const styleInfo = {};\n            if (attributes.styleName) {\n                characterStyleObject.styleName = attributes.styleName;\n            }\n            if (attributes) {\n                try {\n                    this.collectCharacterAttributes(styleInfo, attributes);\n                } catch (ex1) {\n                    debugLog.log('Error ILST->this.getCharacterStyle()->collectCharacterAttributes() ', ex1);\n                }\n            }\n            characterStyleObject.styleInfo = styleInfo;\n            characterStyleObject.previewPath = previewPath;\n        } catch (ex) {\n            debugLog.log('Error ILST->this.getCharacterStyle()', ex);\n        }\n        return characterStyleObject;\n    }\n\n    async getParaStyleInfo() {\n        try {\n            const styleObj = await this.getParagraphStyle();\n            return JSON.stringify(styleObj);\n        } catch (ex) {\n            debugLog.log('ILST.jsx-getParaStyleInfo()', ex);\n        }\n    }\n\n    async getCharStyleInfo() {\n        try {\n            const styleObj = await this.getCharacterStyle();\n            return JSON.stringify(styleObj);\n        } catch (ex) {\n            debugLog.log('ILST.jsx-getParaStyleInfo()', ex);\n        }\n    }\n\n    processStyleName(styleName) {\n        const length = styleName.length;\n        if (length >= this.MAX_STYLE_NAME_SIZE) {\n            styleName = styleName.substring(0, this.MAX_STYLE_NAME_SIZE);\n        }\n        return styleName;\n    }\n\n    getParagraphStyleJSONStringfromAI(styleName, thumbnailFilePath) {\n        const payLoad = {};\n        payLoad.styleName = styleName;\n        if (thumbnailFilePath) {\n            payLoad.previewPath = thumbnailFilePath;\n        } else {\n            payLoad.previewPath = 'null';\n        }\n        const response = app.sendScriptMessage('Design Library', this.GET_PARAGRAPH_STYLE_BY_ID, JSON.stringify(payLoad));\n        return response;\n    }\n\n    getCharacterStyleJSONStringfromAI(styleName, thumbnailFilePath) {\n        const payLoad = {};\n        payLoad.styleName = styleName;\n        if (thumbnailFilePath) {\n            payLoad.previewPath = thumbnailFilePath;\n        } else {\n            payLoad.previewPath = 'null';\n        }\n        const response = app.sendScriptMessage('Design Library', this.GET_CHARACTER_STYLE_BY_ID, JSON.stringify(payLoad));\n        return response;\n    }\n\n    removeParagraphStyle(styleName) {\n        const paragraphStyle = app.activeDocument.paragraphStyles.getByName(styleName);\n        if (paragraphStyle) {\n            paragraphStyle.remove();\n        }\n    }\n\n    removeCharacterStyle(styleName) {\n        const characterStyle = app.activeDocument.characterStyles.getByName(styleName);\n        if (characterStyle) {\n            characterStyle.remove();\n        }\n    }\n\n    updateRegistrationColor() {\n        try {\n            const doc = app.activeDocument;\n            const spotsVar = doc.spots;\n            const spotCount = spotsVar.length;\n            let i;\n            for (i = 0; i < spotCount; i++) {\n                if (spotsVar[i].colorType === ColorModel.REGISTRATION) {\n                    this.RegistrationColor = doc.swatches.getByName(spotsVar[i].name).color;\n                    return;\n                }\n            }\n        } catch (ex1) {\n            debugLog.log('Error while reading registration color', ex1);\n        }\n    }\n\n    addCharacterAttributesToStyle(style, source, orientation) {\n        let value, font;\n        let i = 0;\n        const activeDoc = app.activeDocument;\n        if (!activeDoc) {\n            return;\n        }\n        if (source.adbeFont && source.adbeFont.postScriptName !== '') {\n\n            try {\n                font = app.textFonts.getFontByName(source.adbeFont.postScriptName);\n                style.characterAttributes.textFont = font;\n            } catch (ex) {\n                debugLog.log(ex);\n            }\n\n        } else if (source.fontFamily) {\n            //If all we have is the font-family then try to use that\n            for (i = 0; i < app.textFonts.length; i++) {\n                font = app.textFonts[i];\n                if (font.family === source.fontFamily) {\n                    style.characterAttributes.textFont = font;\n                    break;\n                }\n            }\n        }\n\n        try {\n            if (source.color) {\n                if (source.color.__class__ === 'String') {\n                    if (source.color === 'None') {\n                        style.characterAttributes.fillColor = NoColor;\n                    } else if (source.color === 'Registration') {\n                        if (this.RegistrationColor === undefined) {\n                            this.updateRegistrationColor();\n                        }\n                        style.characterAttributes.fillColor = this.RegistrationColor;\n                    }\n                } else {\n                    style.characterAttributes.fillColor = COLOR.dataToSolidColor(source.color);\n                }\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        try {\n            if (source.adbeIlstStrokeColor) {\n                if (source.adbeIlstStrokeColor.__class__ === 'String') {\n                    if (source.adbeIlstStrokeColor === 'None') {\n                        style.characterAttributes.strokeColor = NoColor;\n                    } else if (source.adbeIlstStrokeColor === 'Registration') {\n                        if (this.RegistrationColor === undefined) {\n                            this.updateRegistrationColor();\n                        }\n                        style.characterAttributes.strokeColor = this.RegistrationColor;\n                    }\n                } else {\n                    style.characterAttributes.strokeColor = COLOR.dataToSolidColor(source.adbeIlstStrokeColor);\n                }\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n        /* We probably don't want to add a stroke color if there isn't one defined\n        else if (!source.adbeIlstStrokeColor && source.color) {\n            style.characterAttributes.strokeColor = COLOR.dataToSolidColor(source.color);\n        }*/\n\n        if (source.fontSize !== undefined) {\n            //var size = new UnitValue(source.fontSize.value, source.fontSize.type);\n            style.characterAttributes.size = source.fontSize.value;\n        }\n\n        //CHARACTER\n\n        //Enumerations\n        if (source.adbeIlstAlignment) {\n            value = source.adbeIlstAlignment.split('.', 2)[1];\n            style.characterAttributes.alignment = StyleRunAlignmentType[value];\n            if (orientation === TextOrientation.VERTICAL) {\n                if (style.characterAttributes.alignment === StyleRunAlignmentType.ROMANBASELINE) {\n                    style.characterAttributes.alignment = StyleRunAlignmentType.center;\n                } else if (style.characterAttributes.alignment === StyleRunAlignmentType.center) {\n                    style.characterAttributes.alignment = StyleRunAlignmentType.ROMANBASELINE;\n                }\n            }\n        }\n        if (source.adbeIlstAlternateGlyphs) {\n            value = source.adbeIlstAlternateGlyphs.split('.', 2)[1];\n            style.characterAttributes.alternateGlyphs = AlternateGlyphsForm[value];\n        }\n        if (source.adbeIlstBaselineDirection) {\n            value = source.adbeIlstBaselineDirection.split('.', 2)[1];\n            style.characterAttributes.baselineDirection = BaselineDirectionType[value];\n        }\n        if (source.adbeIdsnTatechuyoko === true) {\n            style.characterAttributes.baselineDirection = BaselineDirectionType.TateChuYoko;\n        }\n        if (source.adbeIlstFigureStyle) {\n            value = source.adbeIlstFigureStyle.split('.', 2)[1];\n            style.characterAttributes.figureStyle = FigureStyleType[value];\n        }\n        if (source.adbeIlstKerningMethod) {\n            value = source.adbeIlstKerningMethod.split('.', 2)[1];\n            style.characterAttributes.kerningMethod = AutoKernType[value];\n        }\n        if (source.adbeIlstOpenTypePosition) {\n            value = source.adbeIlstOpenTypePosition.split('.', 2)[1];\n            style.characterAttributes.openTypePosition = FontOpenTypePositionOption[value];\n        }\n        if (source.adbeIlstWariChuJustification) {\n            value = source.adbeIlstWariChuJustification.split('.', 2)[1];\n            style.characterAttributes.wariChuJustification = WariChuJustificationType[value];\n        }\n\n        if (source.adbeIdsnKashidas !== undefined) {\n            value = source.adbeIdsnKashidas.split('.', 2)[1];\n            style.characterAttributes.kashidas = KashidasType[value];\n        }\n\n        if (source.adbeIdsnCharacterDirection !== undefined) {\n            value = source.adbeIdsnCharacterDirection.split('.', 2)[1];\n            style.characterAttributes.dirOverride = DirOverrideType[value];\n        }\n\n        if (source.adbeIdsnDigitsType !== undefined) {\n            value = source.adbeIdsnDigitsType.split('.', 2)[1];\n            style.characterAttributes.digitSet = DigitSetType[value];\n        }\n        try {\n            if (source.adbeIdsnDiacriticPosition !== undefined) {\n                value = source.adbeIdsnDiacriticPosition.split('.', 2)[1];\n                style.characterAttributes.diacVPos = DiacVPosType[value];\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        //booleans and numbers\n        if (source.fontStyle === 'italics') {\n            style.characterAttributes.italics = true;\n        }\n        if (source.adbeIlstAkiLeft !== undefined) {\n            style.characterAttributes.akiLeft = source.adbeIlstAkiLeft;\n        }\n        if (source.adbeIlstAkiRight !== undefined) {\n            style.characterAttributes.akiRight = source.adbeIlstAkiRight;\n        }\n        if (source.adbeAutoLeading) {\n            style.characterAttributes.autoLeading = true;\n        }\n        if (source.baselineShift !== undefined) {\n            const bShift = new UnitValue(source.baselineShift.value, source.baselineShift.type);\n            style.characterAttributes.baselineShift = bShift.as('pt');\n        }\n        if (source.adbeIlstConnectionForms !== undefined) {\n            style.characterAttributes.connectionForms = source.adbeIlstConnectionForms;\n        }\n        /*if (source.adbeIlstContextualLigature) {\n            style.characterAttributes.contextualLigature = source.adbeIlstContextualLigature;\n        }*/\n\n        if (source.adbeHorizontalScale !== undefined) {\n            style.characterAttributes.horizontalScale = source.adbeHorizontalScale;\n        }\n\n        if (source.lineHeight !== undefined) {\n            const lead = new UnitValue(source.lineHeight.value, source.lineHeight.type);\n            style.characterAttributes.autoLeading = false;\n            style.characterAttributes.leading = lead.as('pt');\n        }\n\n        try {\n            if (source.adbeIdsnAppliedLanguageName !== undefined) {\n                style.characterAttributes.language = source.adbeIdsnAppliedLanguageName;\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n\n        if (source.whiteSpace && source.whiteSpace === 'nowrap') {\n            style.characterAttributes.noBreak = true;\n        }\n        if (source.adbeIlstOverprintFill !== undefined) {\n            style.characterAttributes.overprintFill = source.adbeIlstOverprintFill;\n        }\n        if (source.adbeIlstOverprintStroke !== undefined) {\n            style.characterAttributes.overprintStroke = source.adbeIlstOverprintStroke;\n        }\n        if (source.adbeIlstProportionalMetrics !== undefined) {\n            style.characterAttributes.proportionalMetrics = source.adbeIlstProportionalMetrics;\n        }\n        if (source.adbeIlstRotation !== undefined) {\n            style.characterAttributes.rotation = source.adbeIlstRotation;\n        }\n\n        //Only set stroke weight if color is available because it will add a default black color if we set it and color is not set\n        //Also, dont override with default black color if fill color is specified as NoColor\n        if (source.adbeIlstStrokeWeight !== undefined && source.adbeIlstStrokeColor && style.characterAttributes.strokeColor.typename !== 'NoColor') {\n            style.characterAttributes.strokeWeight = source.adbeIlstStrokeWeight.value;\n        }\n        if (source.adbeIlstTateChuYokoHorizontal !== undefined) {\n            style.characterAttributes.tateChuYokoHorizontal = source.adbeIlstTateChuYokoHorizontal;\n        }\n        if (source.adbeIlstTateChuYokoVertical !== undefined) {\n            style.characterAttributes.tateChuYokoVertical = source.adbeIlstTateChuYokoVertical;\n        }\n\n        //Use our Adobe Tracking property if its available but revert back to converting CSS letter-spacing otherwise\n        if (source.adbeTracking !== undefined) {\n            style.characterAttributes.tracking = source.adbeTracking;\n        } else if (source.letterSpacing) {\n            style.characterAttributes.tracking = source.letterSpacing.value * 1000;\n        }\n\n        //text-decoration underline and strike-through\n\n        if (source.textDecorationObject !== undefined) {\n            if (source.textDecorationObject.adbeUnderline !== undefined) {\n                style.characterAttributes.underline = source.textDecorationObject.adbeUnderline;\n            }\n            if (source.textDecorationObject.adbeStrikethrough !== undefined) {\n                style.characterAttributes.strikeThrough = source.textDecorationObject.adbeStrikethrough;\n            }\n        } else if (source.textDecoration) {\n            if (source.textDecoration.indexOf('underline') !== -1) {\n                style.characterAttributes.underline = true;\n            } else {\n                style.characterAttributes.underline = false;\n            }\n\n            if (source.textDecoration.indexOf('line-through') !== -1) {\n                style.characterAttributes.strikeThrough = true;\n            } else {\n                style.characterAttributes.strikeThrough = false;\n            }\n        }\n\n        if (source.adbeIdsnXOffsetDiacritic !== undefined) {\n            style.characterAttributes.diacXOffset = source.adbeIdsnXOffsetDiacritic;\n        }\n        if (source.adbeIdsnYOffsetDiacritic !== undefined) {\n            style.characterAttributes.diacYOffset = source.adbeIdsnYOffsetDiacritic;\n        }\n\n        if (source.adbeIlstTsume !== undefined) {\n            style.characterAttributes.Tsume = source.adbeIlstTsume;\n        }\n\n        if (source.adbeVerticalScale !== undefined) {\n            style.characterAttributes.verticalScale = source.adbeVerticalScale;\n        }\n\n        if (source.adbeIlstWariChuCharactersAfterBreak !== undefined) {\n            style.characterAttributes.wariChuCharactersAfterBreak = source.adbeIlstWariChuCharactersAfterBreak;\n        }\n\n        if (source.adbeIlstWariChuCharactersBeforeBreak !== undefined) {\n            style.characterAttributes.wariChuCharactersBeforeBreak = source.adbeIlstWariChuCharactersBeforeBreak;\n        }\n\n        if (source.adbeIlstWariChuEnabled !== undefined) {\n            style.characterAttributes.wariChuEnabled = source.adbeIlstWariChuEnabled;\n        }\n\n        if (source.adbeIlstWariChuLineGap !== undefined) {\n            style.characterAttributes.wariChuLineGap = source.adbeIlstWariChuLineGap;\n        }\n\n        if (source.adbeIlstWariChuLines !== undefined) {\n            style.characterAttributes.wariChuLines = source.adbeIlstWariChuLines;\n        }\n\n        if (source.adbeIlstWariChuScale !== undefined) {\n            style.characterAttributes.wariChuScale = source.adbeIlstWariChuScale;\n        }\n\n        if (source.adbeIdsnOtfStylisticSets !== undefined) {\n            /* Converting to the value Illustrator understands */\n            style.characterAttributes.stylisticSets = source.adbeIdsnOtfStylisticSets / 2;\n        }\n\n        let fontFeatureSettings = source.fontFeatureSettingsObject;\n        if (!fontFeatureSettings) {\n            fontFeatureSettings = source.fontFeatureSettings;\n        }\n\n        if (fontFeatureSettings) {\n            if (fontFeatureSettings.__class__ === 'Array' && fontFeatureSettings.length > 0) {\n                const hasFontFeatureSettings = source.fontFeatureSettings !== undefined && source.fontFeatureSettings.length > 0;\n\n                style.characterAttributes.discretionaryLigature = hasFontFeatureSettings && (source.fontFeatureSettings.indexOf('dlig') !== -1);\n                style.characterAttributes.contextualLigature = hasFontFeatureSettings && source.fontFeatureSettings.indexOf('clig') !== -1;\n                style.characterAttributes.ornaments = hasFontFeatureSettings && source.fontFeatureSettings.indexOf('ornm') !== -1;\n                style.characterAttributes.ordinals = hasFontFeatureSettings && source.fontFeatureSettings.indexOf('ordn') !== -1;\n                style.characterAttributes.swash = hasFontFeatureSettings && source.fontFeatureSettings.indexOf('swsh') !== -1;\n                style.characterAttributes.ligature = hasFontFeatureSettings && source.fontFeatureSettings.indexOf('liga') !== -1;\n                style.characterAttributes.fractions = hasFontFeatureSettings && source.fontFeatureSettings.indexOf('frac') !== -1;\n                style.characterAttributes.titling = hasFontFeatureSettings && source.fontFeatureSettings.indexOf('titl') !== -1;\n                style.characterAttributes.stylisticAlternates = hasFontFeatureSettings && source.fontFeatureSettings.indexOf('salt') !== -1;\n                style.characterAttributes.italics = hasFontFeatureSettings && source.fontFeatureSettings.indexOf('rita') !== -1;\n\n                // Superscript subscript normal baseline\n                if (hasFontFeatureSettings && source.fontFeatureSettings.indexOf('sups') !== -1) {\n                    style.characterAttributes.baselinePosition = FontBaselineOption.SUPERSCRIPT;\n                } else if (hasFontFeatureSettings && source.fontFeatureSettings.indexOf('subs') !== -1) {\n                    style.characterAttributes.baselinePosition = FontBaselineOption.SUBSCRIPT;\n                } else {\n                    style.characterAttributes.baselinePosition = FontBaselineOption.NORMALBASELINE;\n                }\n\n                // All small caps, small caps. all caps, normal\n                if (hasFontFeatureSettings && source.fontFeatureSettings.indexOf('c2sc') !== -1) {\n                    style.characterAttributes.capitalization = FontCapsOption.ALLSMALLCAPS;\n                } else if (hasFontFeatureSettings && source.fontFeatureSettings.indexOf('smcp') !== -1) {\n                    style.characterAttributes.capitalization = FontCapsOption.SMALLCAPS;\n                } else if (source.textTransform === 'capitalize') {\n                    style.characterAttributes.capitalization = FontCapsOption.ALLCAPS;\n                } else {\n                    style.characterAttributes.capitalization = FontCapsOption.NORMALCAPS;\n                }\n            } else if (fontFeatureSettings.__class__ === 'Object') {\n\n                if (fontFeatureSettings.adbeOTFSwash !== undefined) {\n                    style.characterAttributes.swash = fontFeatureSettings.adbeOTFSwash;\n                }\n                if (fontFeatureSettings.adbeOTFOrdinals !== undefined) {\n                    style.characterAttributes.ordinals = fontFeatureSettings.adbeOTFOrdinals;\n                }\n                if (fontFeatureSettings.adbeOTFDiscretionaryLigatures !== undefined) {\n                    style.characterAttributes.discretionaryLigature = fontFeatureSettings.adbeOTFDiscretionaryLigatures;\n                }\n                if (fontFeatureSettings.adbeOTFContextualAlternates !== undefined) {\n                    style.characterAttributes.contextualLigature = fontFeatureSettings.adbeOTFContextualAlternates;\n                }\n                if (fontFeatureSettings.adbeLigatures !== undefined) {\n                    style.characterAttributes.ligature = fontFeatureSettings.adbeLigatures;\n                }\n                if (fontFeatureSettings.adbeOTFFractions !== undefined) {\n                    style.characterAttributes.fractions = fontFeatureSettings.adbeOTFFractions;\n                }\n                if (fontFeatureSettings.adbeOTFTitlingAlternates !== undefined) {\n                    style.characterAttributes.titling = fontFeatureSettings.adbeOTFTitlingAlternates;\n                }\n                if (fontFeatureSettings.adbeOTFStylisticAlternates !== undefined) {\n                    style.characterAttributes.stylisticAlternates = fontFeatureSettings.adbeOTFStylisticAlternates;\n                }\n                if (fontFeatureSettings.adbeOTFRomanItalics !== undefined) {\n                    style.characterAttributes.italics = fontFeatureSettings.adbeOTFRomanItalics;\n                }\n                if (fontFeatureSettings.adbeOTFOrnaments !== undefined) {\n                    style.characterAttributes.ornaments = fontFeatureSettings.adbeOTFOrnaments;\n                }\n                if (fontFeatureSettings.adbeOTFHVKana !== undefined) {\n                    style.characterAttributes.kana = fontFeatureSettings.adbeOTFHVKana;\n                }\n                if (fontFeatureSettings.adbePosition) {\n                    switch (fontFeatureSettings.adbePosition) {\n                    case 'Position.NORMAL':\n                        style.characterAttributes.baselinePosition = FontBaselineOption.NORMALBASELINE;\n                        break;\n                    case 'Position.SUBSCRIPT':\n                        style.characterAttributes.baselinePosition = FontBaselineOption.SUBSCRIPT;\n                        break;\n                    case 'Position.SUPERSCRIPT':\n                        style.characterAttributes.baselinePosition = FontBaselineOption.SUPERSCRIPT;\n                        break;\n                    }\n                }\n                if (fontFeatureSettings.adbeCapitalization) {\n                    switch (fontFeatureSettings.adbeCapitalization) {\n                    case 'FontCapsOption.NORMAL':\n                        style.characterAttributes.capitalization = FontCapsOption.NORMALCAPS;\n                        break;\n                    case 'FontCapsOption.ALLSMALLCAPS':\n                        style.characterAttributes.capitalization = FontCapsOption.ALLSMALLCAPS;\n                        break;\n                    case 'FontCapsOption.SMALLCAPS':\n                        style.characterAttributes.capitalization = FontCapsOption.SMALLCAPS;\n                        break;\n                    case 'FontCapsOption.ALLCAPS':\n                        style.characterAttributes.capitalization = FontCapsOption.ALLCAPS;\n                        break;\n                    }\n                }\n                if (fontFeatureSettings.adbeOTFJustificationAlternates !== undefined) {\n                    style.characterAttributes.justificationAlternates = fontFeatureSettings.adbeOTFJustificationAlternates;\n                }\n            }\n        }\n    }\n\n    setJustificationAttributes(style, source) {\n\n        let value;\n\n        if (source.adbeIdsnParagraphDirection !== undefined) {\n            value = source.adbeIdsnParagraphDirection.split('.', 2)[1];\n            style.paragraphAttributes.paragraphDirection = ParagraphDirectionType[value];\n        }\n        //justification\n        if (source.adbeParaAlignment !== undefined) {\n            switch (this.convertJustificationString(source.adbeParaAlignment, false)) {\n            case 'CENTER':\n                style.paragraphAttributes.justification = Justification.CENTER;\n                break;\n            case 'LEFT':\n                style.paragraphAttributes.justification = Justification.LEFT;\n                break;\n            case 'RIGHT':\n                style.paragraphAttributes.justification = Justification.RIGHT;\n                break;\n            case 'FULLJUSTIFY':\n                style.paragraphAttributes.justification = Justification.FULLJUSTIFY;\n                break;\n            case 'FULLJUSTIFYLASTLINECENTER':\n                style.paragraphAttributes.justification = Justification.FULLJUSTIFYLASTLINECENTER;\n                break;\n            case 'FULLJUSTIFYLASTLINELEFT':\n                style.paragraphAttributes.justification = Justification.FULLJUSTIFYLASTLINELEFT;\n                break;\n            case 'FULLJUSTIFYLASTLINERIGHT':\n                style.paragraphAttributes.justification = Justification.FULLJUSTIFYLASTLINERIGHT;\n                break;\n            default:\n                break;\n            }\n        }\n        //singleWordJustification\n        if (source.adbeSingleWordJustification !== undefined) {\n            switch (this.convertJustificationString(source.adbeSingleWordJustification, true)) {\n            case 'CENTER':\n                style.paragraphAttributes.singleWordJustification = Justification.CENTER;\n                break;\n            case 'LEFT':\n                style.paragraphAttributes.singleWordJustification = Justification.LEFT;\n                break;\n            case 'RIGHT':\n                style.paragraphAttributes.singleWordJustification = Justification.RIGHT;\n                break;\n            case 'FULLJUSTIFY':\n                style.paragraphAttributes.singleWordJustification = Justification.FULLJUSTIFY;\n                break;\n            case 'FULLJUSTIFYLASTLINECENTER':\n                style.paragraphAttributes.singleWordJustification = Justification.FULLJUSTIFYLASTLINECENTER;\n                break;\n            case 'FULLJUSTIFYLASTLINELEFT':\n                style.paragraphAttributes.singleWordJustification = Justification.FULLJUSTIFYLASTLINELEFT;\n                break;\n            case 'FULLJUSTIFYLASTLINERIGHT':\n                style.paragraphAttributes.singleWordJustification = Justification.FULLJUSTIFYLASTLINERIGHT;\n                break;\n            default:\n                break;\n            }\n        }\n    }\n\n    setScalingAttributes(style, source) {\n        ///////////////////////////////\n        ////    Common Attributes\n        ///////////////////////////////\n\n        //minimumGlyphScaling\n        if (source.adbeMinimumGlyphScaling !== undefined) {\n            style.paragraphAttributes.minimumGlyphScaling = source.adbeMinimumGlyphScaling;\n        }\n\n        //maximumGlyphScaling\n        if (source.adbeMaximumGlyphScaling !== undefined) {\n            style.paragraphAttributes.maximumGlyphScaling = source.adbeMaximumGlyphScaling;\n        }\n        //desiredGlyphScaling\n        if (source.adbeDesiredGlyphScaling !== undefined) {\n            style.paragraphAttributes.desiredGlyphScaling = source.adbeDesiredGlyphScaling;\n        }\n\n        ///////////////////////////////\n        ////    Ai Specific Attributes\n        ///////////////////////////////\n    }\n\n    setSpacingAttributes(style, source) {\n        ///////////////////////////////\n        ////    Common Attributes\n        ///////////////////////////////\n\n        //maximumWordSpacing\n        if (source.adbeMaximumWordSpacing !== undefined) {\n            style.paragraphAttributes.maximumWordSpacing = source.adbeMaximumWordSpacing;\n        }\n        //minimumWordSpacing\n        if (source.adbeMinimumWordSpacing !== undefined) {\n            style.paragraphAttributes.minimumWordSpacing = source.adbeMinimumWordSpacing;\n        }\n        //desiredWordSpacing\n        if (source.adbeDesiredWordSpacing !== undefined) {\n            style.paragraphAttributes.desiredWordSpacing = source.adbeDesiredWordSpacing;\n        }\n\n        //maximumLetterSpacing\n        if (source.adbeMaximumLetterSpacing !== undefined) {\n            style.paragraphAttributes.maximumLetterSpacing = source.adbeMaximumLetterSpacing;\n        }\n        //minimumLetterSpacing\n        if (source.adbeMinimumLetterSpacing !== undefined) {\n            style.paragraphAttributes.minimumLetterSpacing = source.adbeMinimumLetterSpacing;\n        }\n        //desiredLetterSpacing\n        if (source.adbeDesiredLetterSpacing !== undefined) {\n            style.paragraphAttributes.desiredLetterSpacing = source.adbeDesiredLetterSpacing;\n        }\n\n        //spaceAfter\n        if (source.adbeSpaceAfter !== undefined) {\n            const spaceAfter = new UnitValue(source.adbeSpaceAfter.value, source.adbeSpaceAfter.type);\n            style.paragraphAttributes.spaceAfter = spaceAfter.as('pt');\n        }\n\n        //spaceBefore\n        if (source.adbeSpaceBefore !== undefined) {\n            const spaceBefore = new UnitValue(source.adbeSpaceBefore.value, source.adbeSpaceBefore.type);\n            style.paragraphAttributes.spaceBefore = spaceBefore.as('pt');\n        }\n\n        ///////////////////////////////\n        ////    Ai Specific Attributes\n        ///////////////////////////////\n    }\n\n    setHyphenationAttributes(style, source) {\n\n        ///////////////////////////////\n        ////    Common Attributes\n        ///////////////////////////////\n\n        //hyphenation\n        if (source.adbeHyphenation !== undefined) {\n            style.paragraphAttributes.hyphenation = source.adbeHyphenation;\n        }\n\n        //hyphenationZone\n        if (source.adbeHyphenationZone !== undefined) {\n            const hyphenationZone = new UnitValue(source.adbeHyphenationZone.value, source.adbeHyphenationZone.type);\n            style.paragraphAttributes.hyphenationZone = hyphenationZone.as('pt');\n        }\n        //hyphenateCapitalizedWords\n        if (source.adbeHyphenateCapitalizedWords !== undefined) {\n            style.paragraphAttributes.hyphenateCapitalizedWords = source.adbeHyphenateCapitalizedWords;\n        }\n        ///////////////////////////////\n        ////    Ai Specific Attributes\n        ///////////////////////////////\n\n        //hyphenationPreference\n        if (source.adbeHyphenWeight !== undefined) {\n            style.paragraphAttributes.hyphenationPreference = source.adbeHyphenWeight / 100; // to make it 0-100 as ID\n        }\n\n        //maximumConsecutiveHyphens\n        if (source.adbeHyphenateLimit !== undefined) {\n            style.paragraphAttributes.maximumConsecutiveHyphens = source.adbeHyphenateLimit;\n        }\n        //minimumAfterHyphen\n        if (source.adbeHyphenateAfterFirst !== undefined) {\n            style.paragraphAttributes.minimumAfterHyphen = source.adbeHyphenateAfterFirst;\n        }\n\n        //minimumBeforeHyphen\n        if (source.adbeHyphenateBeforeLast !== undefined) {\n            style.paragraphAttributes.minimumBeforeHyphen = source.adbeHyphenateBeforeLast;\n        }\n\n        //minimumHyphenatedWordSize\n        if (source.adbeHyphenateWordsLongerThan !== undefined) {\n            style.paragraphAttributes.minimumHyphenatedWordSize = source.adbeHyphenateWordsLongerThan;\n        }\n    }\n\n    setIndentationAttributes(style, source) {\n\n        ///////////////////////////////\n        ////    Common Attributes\n        ///////////////////////////////\n\n        //firstLineIndent\n        if (source.adbeFirstLineIndent !== undefined) {\n            const firstLineIndent = new UnitValue(source.adbeFirstLineIndent.value, source.adbeFirstLineIndent.type);\n            style.paragraphAttributes.firstLineIndent = firstLineIndent.as('pt');\n        }\n        //leftIndent\n        if (source.adbeLeftIndent !== undefined) {\n            const leftIndent = new UnitValue(source.adbeLeftIndent.value, source.adbeLeftIndent.type);\n            style.paragraphAttributes.leftIndent = leftIndent.as('pt');\n        }\n        //rightIndent\n        if (source.adbeRightIndent !== undefined) {\n            const rightIndent = new UnitValue(source.adbeRightIndent.value, source.adbeRightIndent.type);\n            style.paragraphAttributes.rightIndent = rightIndent.as('pt');\n        }\n\n        ///////////////////////////////\n        ////    Ai Specific Attributes\n        ///////////////////////////////\n    }\n\n    setOtherAttributes(style, source) {\n\n        ///////////////////////////////\n        ////    Common Attributes\n        ///////////////////////////////\n\n        let value;\n\n        //bunriKinshi\n        if (source.adbeBunriKinshi !== undefined) {\n            style.paragraphAttributes.bunriKinshi = source.adbeBunriKinshi;\n        }\n\n        //kinsokuOrder  : kinsokuOrder is kinsokuType in Id\n        if (source.adbeKinsokuType !== undefined) {\n            const kinsokuType = this.convertKinsokuTypeString(source.adbeKinsokuType);\n            switch (kinsokuType) {\n            case 'KinsokuOrderEnum.PUSHOUTFIRST':\n                style.paragraphAttributes.kinsokuOrder = KinsokuOrderEnum.PUSHOUTFIRST;\n                break;\n            case 'KinsokuOrderEnum.PUSHIN':\n                style.paragraphAttributes.kinsokuOrder = KinsokuOrderEnum.PUSHIN;\n                break;\n            case 'KinsokuOrderEnum.PUSHOUTONLY':\n                style.paragraphAttributes.kinsokuOrder = KinsokuOrderEnum.PUSHOUTONLY;\n                break;\n            }\n        }\n\n        ///////////////////////////////\n        ////    Ai Specific Attributes\n        ///////////////////////////////\n\n        //autoLeadingAmount\n        if (source.adbeParaAutoLeading !== undefined) {\n            style.paragraphAttributes.autoLeadingAmount = source.adbeParaAutoLeading;\n        }\n\n        //burasagariType\n        if (source.adbeIlstBurasagariType !== undefined) {\n            switch (source.adbeIlstBurasagariType) {\n            case 'BurasagariTypeEnum.Forced':\n                style.paragraphAttributes.burasagariType = BurasagariTypeEnum.Forced;\n                break;\n            case 'BurasagariTypeEnum.Standard':\n                style.paragraphAttributes.burasagariType = BurasagariTypeEnum.Standard;\n                break;\n            case 'BurasagariTypeEnum.None':\n                style.paragraphAttributes.burasagariType = BurasagariTypeEnum.None;\n                break;\n            }\n        }\n\n        //leadingType\n        if (source.adbeLeadingModel !== undefined) {\n            switch (source.adbeLeadingModel) {\n            case 'AutoLeadingType.BOTTOMTOBOTTOM':\n                style.paragraphAttributes.leadingType = AutoLeadingType.BOTTOMTOBOTTOM;\n                break;\n            case 'AutoLeadingType.TOPTOTOP':\n                style.paragraphAttributes.leadingType = AutoLeadingType.TOPTOTOP;\n                break;\n            }\n        }\n\n        //kurikaeshiMojiShori\n        if (source.adbeIlstKurikaeshiMojiShori !== undefined) {\n            style.paragraphAttributes.kurikaeshiMojiShori = source.adbeIlstKurikaeshiMojiShori;\n        }\n        //kinsoku\n        if (source.adbeKinsokuSet !== undefined) {\n            switch (source.adbeKinsokuSet) {\n            case 'KinsokuSet.HARD_KINSOKU':\n                style.paragraphAttributes.kinsoku = 'Hard';\n                break;\n            case 'KinsokuSet.SOFT_KINSOKU':\n                style.paragraphAttributes.kinsoku = 'Soft';\n                break;\n            case 'KinsokuSet.NOTHING':\n                style.paragraphAttributes.kinsoku = 'None';\n                break;\n            }\n        }\n        //mojikumi\n        if (source.adbeIlstMojikumi !== undefined) {\n            style.paragraphAttributes.mojikumi = source.adbeIlstMojikumi;\n        }\n        //romanHanging\n        if (source.adbeIlstRomanHanging !== undefined) {\n            style.paragraphAttributes.romanHanging = source.adbeIlstRomanHanging;\n        }\n\n        if (source.adbeIdsnKashidaWidth !== undefined) {\n            value = source.adbeIdsnKashidaWidth.split('.', 2)[1];\n            style.paragraphAttributes.kashidaWidth = KashidaWidthType[value];\n        }\n\n        if (source.adbeIlstComposerEngine !== undefined) {\n            value = this.convertComposerEngineTypeString(source.adbeIlstComposerEngine);\n            style.paragraphAttributes.composerEngine = value;\n        }\n        //everyLineComposer\n        if (source.adbeIlstEveryLineComposer !== undefined) {\n            style.paragraphAttributes.everyLineComposer = source.adbeIlstEveryLineComposer;\n        }\n    }\n\n    setTabAttributes(style, source) {\n        try {\n            if (source.adbeTabStops !== undefined) {\n                const tabStops = source.adbeTabStops;\n                const tabStopInfo = [];\n                let tab;\n                for (tab = 0; tab < tabStops.length; ++tab) {\n                    tabStopInfo[tab] = new TabStopInfo();\n                    tabStopInfo[tab].position = tabStops[tab].adbeTabPosition.value;\n                    tabStopInfo[tab].decimalCharacter = tabStops[tab].adbeTabAlignmentChar;\n                    tabStopInfo[tab].alignment = this.convertTabAlignmentTypeString(tabStops[tab].adbeTabAlignment);\n                    if (tabStops[tab].adbeTabLeader !== undefined && tabStops[tab].adbeTabLeader !== '') {\n                        tabStopInfo[tab].leader = tabStops[tab].adbeTabLeader;\n                    }\n                }\n                style.paragraphAttributes.tabStops = tabStopInfo;\n            }\n        } catch (ex) {\n            debugLog.log(ex);\n        }\n    }\n\n    addParagraphStyleToAI(styleName, styleAttributes, orientation) {\n        let paragraphStyle;\n        styleName = this.processStyleName(styleName);\n        paragraphStyle = app.activeDocument.paragraphStyles.add(styleName);\n        if (paragraphStyle === undefined) {\n            if (app.activeDocument.paragraphStyles && app.activeDocument.paragraphStyles[0].name === styleName) { //first element in this array is always the normal style\n                return null;\n            }\n            const tempStyleName = 'Temp' + new Date().valueOf();\n            const tempStyleObject = this.addParagraphStyleToAI(tempStyleName, styleAttributes, orientation);\n\n            if (tempStyleObject === null || tempStyleObject === undefined) {\n                return null;\n            }\n\n            //getting JSON for temp Style\n            const tempStyleJSONString = this.getParagraphStyleJSONStringfromAI(tempStyleName);\n            const exisingStyleJSONString = this.getParagraphStyleJSONStringfromAI(styleName);\n\n            try {\n                this.removeParagraphStyle(tempStyleName);\n            } catch (ex2) {\n                debugLog.log('ILST-> TEXT-> addParagraphStyleToAI -> removeParagraphStyle', ex2);\n            }\n\n            if (!tempStyleJSONString || !exisingStyleJSONString) {\n                return null; /// no not proceed further stop adding style\n            }\n\n            paragraphStyle = app.activeDocument.paragraphStyles.getByName(styleName);\n\n            if (tempStyleJSONString === exisingStyleJSONString) {\n                return paragraphStyle; // style are same\n            }\n\n            //else showing collision dialog\n            const response = app.sendScriptMessage('Design Library', this.GET_COLLISION_RESPONCE, '');\n            const resonseJSON = JSON.parse(response);\n\n            if (!resonseJSON) {\n                return null; //conflict responce error\n            }\n\n            const wasOk = resonseJSON.ActionOK && resonseJSON.ActionOK === 'true';\n            const useExisting = resonseJSON.useExisting && resonseJSON.useExisting === 'true';\n\n            if (!wasOk) {\n                return null;\n            }\n            if (useExisting) {\n                return paragraphStyle;\n            }\n\n            //if we are here here then we are using the incomming style\n        }\n        //adding character attributes to style\n        if (paragraphStyle) {\n            paragraphStyle.clear(); //clearing before applying\n            try {\n                this.addCharacterAttributesToStyle(paragraphStyle, styleAttributes, orientation);\n            } catch (ex0) {\n                debugLog.log('addParagraphStyleToAI ->addCharacterAttributesToStyle', ex0);\n            }\n            try {\n                //adding paragraph attributes to style\n                this.setJustificationAttributes(paragraphStyle, styleAttributes);\n                this.setScalingAttributes(paragraphStyle, styleAttributes);\n                this.setSpacingAttributes(paragraphStyle, styleAttributes);\n                this.setHyphenationAttributes(paragraphStyle, styleAttributes);\n                this.setIndentationAttributes(paragraphStyle, styleAttributes);\n                this.setOtherAttributes(paragraphStyle, styleAttributes);\n                this.setTabAttributes(paragraphStyle, styleAttributes);\n\n            } catch (ex1) {\n                debugLog.log('addParagraphStyleToAI  ->adding paragraph attributes to style      ', ex1);\n            }\n        }\n        return paragraphStyle;\n    }\n\n    addCharacterStyleToAI(styleName, styleAttributes, orientation) {\n        let characterStyle;\n        styleName = this.processStyleName(styleName);\n        characterStyle = app.activeDocument.characterStyles.add(styleName);\n        if (characterStyle === undefined) {\n            // creating a temp Style\n            if (app.activeDocument.characterStyles && app.activeDocument.characterStyles[0].name === styleName) { //first element in this array is always the normal style\n                return null;\n            }\n            const tempStyleName = 'Temp' + new Date().valueOf();\n            const tempStyleObject = this.addCharacterStyleToAI(tempStyleName, styleAttributes);\n            if (tempStyleObject === null || tempStyleObject === undefined) {\n                return null;\n            }\n            //getting JSON for temp Style\n            const tempStyleJSONString = this.getCharacterStyleJSONStringfromAI(tempStyleName);\n            const exisingStyleJSONString = this.getCharacterStyleJSONStringfromAI(styleName);\n\n            try {\n                this.removeCharacterStyle(tempStyleName);\n            } catch (ex2) {\n                debugLog.log('ILST-> TEXT-> addCharacterStyleToAI -> removeCharacterStyle', ex2);\n            }\n            if (!tempStyleJSONString || !exisingStyleJSONString) {\n                return null; /// no not proceed further stop adding style\n            }\n\n            characterStyle = app.activeDocument.characterStyles.getByName(styleName);\n\n            if (tempStyleJSONString === exisingStyleJSONString) {\n                return characterStyle; // style are same\n            }\n\n            //else showing collision dialog\n            let wasOk = true;\n            let useExisting = false;\n            if (this.GlobalConflictResolutionStrategy.initialized !== true) {\n                const response = app.sendScriptMessage('Design Library', this.GET_COLLISION_RESPONCE, '');\n                const resonseJSON = JSON.parse(response);\n\n                if (!resonseJSON) {\n                    return null; //conflict responce error\n                }\n\n                wasOk = resonseJSON.ActionOK && resonseJSON.ActionOK === 'true';\n                useExisting = resonseJSON.useExisting && resonseJSON.useExisting === 'true';\n\n                this.GlobalConflictResolutionStrategy.initialized = true;\n                if (!wasOk) {\n                    this.GlobalConflictResolutionStrategy.strategy = this.ConflictResolutionStrategy.wasNotOk;\n                } else if (useExisting) {\n                    this.GlobalConflictResolutionStrategy.strategy = this.ConflictResolutionStrategy.useExisting;\n                } else {\n                    this.GlobalConflictResolutionStrategy.strategy = this.ConflictResolutionStrategy.useIncoming;\n                }\n            } else {\n                if (this.GlobalConflictResolutionStrategy.strategy === this.ConflictResolutionStrategy.wasNotOk) {\n                    wasOk = false;\n                } else if (this.GlobalConflictResolutionStrategy.strategy === this.ConflictResolutionStrategy.useExisting) {\n                    useExisting = true;\n                }\n            }\n\n            if (!wasOk) {\n\n                return null;\n            }\n            if (useExisting) {\n                return characterStyle;\n            }\n\n            //if we are here here then we are using the incomming style\n        }\n\n        //adding character attributes to style\n        try {\n            if (characterStyle) {\n                characterStyle.clear();\n                this.addCharacterAttributesToStyle(characterStyle, styleAttributes, orientation);\n            }\n        } catch (ex0) {\n            debugLog.log('addCharacterStyleToAI -> addCharacterAttributesToStyle', ex0);\n        }\n        return characterStyle;\n    }\n\n    setParagraphStyle(attributes) {\n        let i;\n        const paragraphStyle = this.addParagraphStyleToAI(attributes.name, attributes);\n\n        const appSelection = app.selection;\n        if (appSelection) {\n            try {\n                if (paragraphStyle) {\n                    if (appSelection['_target'] && appSelection['_target']._className === 'TextRange') {\n                        paragraphStyle.applyTo(appSelection, true);\n                    } else if (appSelection.length > 0 && appSelection[0] !== undefined) {\n\n                        for (i = 0; i < appSelection.length; i++) {\n                            if (appSelection[i]['_target'] && appSelection[i]['_target']._className === 'TextFrame') {\n                                paragraphStyle.applyTo(appSelection[i].textRange, true);\n                            }\n                        }\n                    }\n                }\n            } catch (ex2) {\n                debugLog.log('Ilst.jsx-setParagraphStyle', ex2);\n            }\n        }\n    }\n\n    setCharacterStyle(attributes) {\n        //var currentSelection = app.selection;\n        let i = 0;\n        const characterStyle = this.addCharacterStyleToAI(attributes.name, attributes);\n        const appSelection = app.selection;\n        if (appSelection) {\n            try {\n                if (characterStyle) {\n                    if (appSelection['_target'] && appSelection['_target']._className === 'TextRange') {\n                        characterStyle.applyTo(appSelection, true);\n                    } else if (appSelection.length > 0 && appSelection[0] !== undefined) {\n                        for (i = 0; i < appSelection.length; i++) {\n                            if (appSelection[i]['_target'] && appSelection[i]['_target']._className === 'TextFrame') {\n                                characterStyle.applyTo(appSelection[i].textRange, true);\n                            }\n                        }\n                    }\n                }\n            } catch (ex2) {\n                debugLog.log('Ilst.jsx-setCharacterStyle', ex2);\n            }\n        }\n    }\n\n    setFont(styleObject) {\n        'use strict';\n        try {\n            if (styleObject.type === 'parastyle') {\n                this.setParagraphStyle(styleObject);\n            } else {\n                this.setCharacterStyle(styleObject);\n            }\n        } catch (ex) {\n            debugLog.log('Ilst.jsx-setFont()', ex);\n        }\n    }\n\n    addParagraphStyles() {\n        this.GlobalConflictResolutionStrategy.initialized = false;\n\n        const numStyles = this.TypographyArray.length;\n        let itr, typography;\n        for (itr = 0; itr < numStyles; itr++) {\n            typography = this.TypographyArray[itr];\n            this.addParagraphStyle(typography);\n        }\n\n        this.GlobalConflictResolutionStrategy.initialized = false;\n    }\n\n    addCharacterStyles() {\n        this.GlobalConflictResolutionStrategy.initialized = false;\n\n        const numStyles = this.TypographyArray.length;\n        let itr, typography;\n        for (itr = 0; itr < numStyles; itr++) {\n            typography = this.TypographyArray[itr];\n            this.addCharacterStyle(typography);\n        }\n\n        this.GlobalConflictResolutionStrategy.initialized = false;\n    }\n\n    addParagraphStyle(attributes) {\n        this.addParagraphStyleToAI(attributes.name, attributes);\n    }\n\n    addCharacterStyle(attributes) {\n        this.addCharacterStyleToAI(attributes.name, attributes);\n    }\n\n    createTextLayer(styleObject, isFirstElement, isLastElement) {\n        if (isFirstElement !== false) {\n            this.TypographyArray = [];\n        }\n\n        this.TypographyArray.push(styleObject);\n\n        if (isLastElement !== false) {\n            try {\n                if (styleObject.type === 'parastyle') {\n                    this.addParagraphStyles();\n                } else {\n                    this.addCharacterStyles();\n                }\n            } catch (ex) {\n                debugLog.log('Ilst.jsx-createTextLayer()', ex);\n            }\n            this.TypographyArray = [];\n        }\n    }\n\n    async getCharacterStyleById(id) {\n        const uxpfs = window.nodeRequire('uxp').storage.localFileSystem;\n        const tempFolder = await uxpfs.getTemporaryFolder();\n        const previewPath = tempFolder.nativePath + 'TextStylePreview' + new Date().valueOf() + '.png';\n        const characterStyleObject = {};\n        try {\n            const jsonString = this.getCharacterStyleJSONStringfromAI(id, previewPath);\n            if (jsonString) {\n                const attributes = JSON.parse(jsonString);\n                const styleInfo = {};\n                characterStyleObject.styleName = id;\n                if (app.activeDocument.characterStyles && app.activeDocument.characterStyles[0].name === id) { //first element in this array is always the normal style\n                    if (id[0] === '[' && id[id.length - 1] === ']') {\n                        characterStyleObject.styleName = id.substring(1, id.length - 1); // removing [ & ]\n                    }\n                }\n                this.collectCharacterAttributes(styleInfo, attributes);\n                characterStyleObject.styleInfo = styleInfo;\n                characterStyleObject.previewPath = previewPath;\n            }\n        } catch (ex) {\n            //debugLog.log(\"Error ILST->TEXT.getCharacterStyleById()\", ex);\n        }\n        return characterStyleObject;\n    }\n\n    async getParagraphStyleById(id) {\n        const paragraphStyleObject = {};\n        const styleInfo = {};\n        const uxpfs = window.nodeRequire('uxp').storage.localFileSystem;\n        const tempFolder = await uxpfs.getTemporaryFolder();\n        const previewPath = tempFolder.nativePath + 'TextStylePreview' + new Date().valueOf() + '.png';\n        try {\n            const jsonString = this.getParagraphStyleJSONStringfromAI(id, previewPath);\n            const attributes = JSON.parse(jsonString);\n            if (attributes) {\n                paragraphStyleObject.styleName = id;\n                if (app.activeDocument.paragraphStyles && app.activeDocument.paragraphStyles[0].name === id) { //first element in this array is always the normal style\n                    if (id[0] === '[' && id[id.length - 1] === ']') {\n                        paragraphStyleObject.styleName = id.substring(1, id.length - 1); // removing [ & ]\n                    }\n                }\n                this.collectParagraphAttributes(styleInfo, attributes);\n                this.collectCharacterAttributes(styleInfo, attributes);\n                paragraphStyleObject.styleInfo = styleInfo;\n                paragraphStyleObject.previewPath = previewPath;\n            }\n        } catch (ex) {\n            //debugLog.log(\"Error ILST->TEXT.getParagraphStyleById()\", ex);\n        }\n        return paragraphStyleObject;\n    }\n\n    async addCharStyleById(id) {\n        try {\n            const styleObj = await this.getCharacterStyleById(id);\n            return JSON.stringify(styleObj);\n        } catch (ex) {\n            //debugLog.log('ILST.jsx-getCharStyleInfo()', ex);\n        }\n\n    }\n\n    async addParaStyleById(id) {\n        try {\n            const styleObj = await this.getParagraphStyleById(id);\n            return JSON.stringify(styleObj);\n        } catch (ex) {\n            //debugLog.log('ILST.jsx-getCharStyleInfo()', ex);\n        }\n\n    }\n}\n\nexport default new Text();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n/*global , dom,*/ ////dom is a global exposed by Illustrator for handling events related functionalities.\nimport app from 'script_module';\nimport UXPEnvironment from './UXPEnvironment';\nimport AppUtils from 'app/applications/ILST_UXP/js/appUtils';\nimport debugLog from 'app/js/utils/debugLog';\nimport Text from 'app/applications/ILST_UXP/js/text';\n\nexport default class AIEnvironment extends UXPEnvironment {\n    /**\n     * Check whether we're in an UXP Illustrator environment. Only instantiate this class if true!\n     * @returns {boolean}\n     */\n    static check() {\n        return navigator.userAgent.indexOf('UXP') > -1;\n    }\n\n    type = 'Illustrator';\n    pluginId = 'com.adobe.cclibrariespanel';\n    hasUXPStockExtension = true;\n\n    // Opacity is not a supported property in AI, workarounds for rendering engines that do not support changing opacity\n    //by place a grey overlay over all (except video) element containers is present in file _elementView.scss\n    hasOpacityBug = true;\n\n    additionalStockLicenseCoreModules = [ { name: 'dom', type: 'window-global' } ];\n\n    // Illustrator's UXP input boxes get infinite z-index, they need to be hidden when overlayed with other content.\n    // We previously filed https://jira.corp.adobe.com/browse/UXP-15942 but UXP has said they won't be able to fix this.\n    hasInputZOrderBug = true;\n\n    constructor(w = window) {\n        super(w);\n\n        const uxpHost = window.nodeRequire('uxp').host;\n        const locale = this.findLocaleMatch(uxpHost.locale);\n        this._hostEnvironment = {\n            appName: 'ILST_UXP',\n            appId: 'ILST',\n            appVersion: uxpHost.version,\n            isAppOnline: true,\n            appLocale: locale,\n            appUILocale: locale,\n            appSkinInfo: {\n                panelBackgroundColor: {\n                    color: { alpha: 255, green: 83, blue: 83, red: 83 }\n                }\n            }\n        };\n    }\n\n    /**\n     * Route log messages to UXPLog log file in ILST product folder.\n     *\n     * @param {string} message\n     */\n    debugLog(message) {\n        // eslint-disable-next-line no-console\n        console.info(message);\n        return true;\n    }\n\n    setPanelFlyoutMenu(menuItems) {\n        const entrypoints = window.nodeRequire('uxp').entrypoints;\n        const currentMenu = entrypoints.getPanel('ccLibrariesPanel').menuItems;\n        if (!currentMenu) {\n            return;\n        }\n        let dividerCount = 0;\n        this._flyoutMenuClickHandlers = {};\n        const reformattedMenuItems = menuItems.map(item => {\n            if (item.divider) {\n                // dividers still need unique labels or UXP will think it's a dupe and skip\n                return { id: `DIVIDER_${dividerCount++}`, label: '-' };\n            }\n            this._flyoutMenuClickHandlers[item.menuId] = item.onClick;\n            return { id: item.menuId, label: item.label, enabled: item.enableMenu, checked: item.checked };\n        });\n\n        // If you try to remove and insert in one go, The UI freezes up, so remove them all first, then insert new items\n        for (let i = currentMenu.size; i > 0; i--) {\n            currentMenu.removeAt(i - 1);\n        }\n\n        reformattedMenuItems.forEach((newItem, i) => { currentMenu.insertAt(i, newItem); });\n    }\n\n    handleFlyout(id) {\n        this._flyoutMenuClickHandlers[id] && this._flyoutMenuClickHandlers[id]();\n    }\n\n    /**\n     * UXP Plugins in PS require you to use the entrypoints.setup method for every panel that will load\n     * Each plugin is rendered into a separate island with a given root node in the same DOM.\n     * Note: 'hide' is not currently called when the panel or libraries manager is closed,\n     * but it is provided in case of future use.\n     */\n    get exports() {\n        const entrypoints = window.nodeRequire('uxp').entrypoints;\n\n        return entrypoints.setup({\n            panels: {\n                ccLibrariesPanel: {\n                    show: e => {\n                        this._waitForInit.then(() => {\n                            this._panelMountPoint = this.getMountPoint(e.node);\n                            this.renderPanel(this._panelMountPoint);\n                        });\n                    },\n                    hide: () => {\n                        if (this._panelMountPoint) {\n                            this.unmountPanel(this._panelMountPoint);\n                            this._panelMountPoint.remove();\n                            delete this._panelMountPoint;\n                        }\n                    },\n                    // we will populate the flyout menu after menuManager has initialized\n                    menuItems: [],\n                    invokeMenu: id => {\n                        this.handleFlyout(id);\n                    }\n                },\n            },\n            commands: {\n                adobeStockLicensingPlugin: {\n                    run: async(event) => {\n                        try {\n                            await this.openStockLicenseExtension(JSON.parse(event.data));\n                        } catch (rejectionReason) {\n                            debugLog.log(rejectionReason);\n                        }\n                    }\n                }\n            }\n        });\n    }\n\n    /**\n     * Returns whether or not a video rendering bug is present on current operating system\n     * Currently Video loading and rendering is not supported in UXP on ILST and will throw an exception\n     * and display a black square with infinite z index.\n     * @returns {boolean} true if environment has rendering issue with <video> tag\n     */\n    get hasVideoRenderingBug() {\n        return !!this.isWindowsOS();\n    }\n\n    /**\n     * Execute commands fired by Libraries panel which are still using the old CEP's exec/exec\n     * Once these operations are moved to api's in AIEnvironment. This function can be deleted.\n     *\n     * @param {string} lib - Name of the library (e.g. CORE, PHXS etc).\n     * @param {string} operation\n     * @param {Array} args\n     * @returns {Promise}\n     */\n    async exec(lib, operation, args = []) {\n\n        if (operation === 'getApplicationVersion') {\n            const version = app.version;\n            return version;\n        } else if (operation === 'getHostAppPathViaBridgeTalk') {\n            const uxpfs = window.nodeRequire('uxp').storage.localFileSystem;\n            const folder = await uxpfs.getDataFolder();\n            const path = folder.nativePath;\n            return path;\n        } else if (operation === 'getTempFolder') {\n            const uxpfs = window.nodeRequire('uxp').storage.localFileSystem;\n            const tempFolder = await uxpfs.getTemporaryFolder();\n            const path = tempFolder.nativePath;\n            return path;\n        }\n\n        super.exec(lib, operation,args);\n    }\n\n    /**\n     * Execute commands fired by Libraries panel which are still using the old CEP's exec/exec\n     * Once these operations are moved to api's in AIEnvironment. This function can be deleted.\n     * Execute a command in the scope of the application. This is shorthand for\n     * `exec(appCode, operation, args)`.\n     *\n     * @param {string} operation\n     * @param {Array} args\n     * @returns {Promise}\n     */\n    execApp(operation, args) {\n        if (operation === 'saveAssets') {\n            return AppUtils.saveAssets(args[0]);\n        } else if (operation === 'placeAsset') {\n            return AppUtils.placeAsset(args);\n        } else if (operation === 'openAssetForEdit') {\n            return AppUtils.openAssetForEdit(...args);\n        } else if (operation === 'getTextInfo') {\n            return Text.getTextInfo();\n        } else if (operation === 'getParaStyleInfo') {\n            return Text.getParaStyleInfo();\n        } else if (operation === 'getCharStyleInfo') {\n            return Text.getCharStyleInfo();\n        } else if (operation === 'setFont') {\n            return Text.setFont(args[0]);\n        } else if (operation === 'createTextLayer') {\n            return Text.createTextLayer(...args);\n        } else if (operation === 'addCharStyleById') {\n            return Text.addCharStyleById(...args);\n        } else if (operation === 'addParaStyleById') {\n            return Text.addParaStyleById(...args);\n        } else if (operation === 'loadAndSelectBrush') {\n            return AppUtils.loadAndSelectBrush(...args);\n        } else if (operation === 'openDocumentFromTemplate') {\n            return AppUtils.openDocumentFromTemplate(...args);\n        }\n        return super.exec(this._hostEnvironment.appName, operation, args);\n    }\n\n    /**\n     * Add an event listener for messages from the application.\n     * @param {string} eventName\n     * @param {Function} callback\n     */\n    addEventListener(eventName, callback) {\n        super.addEventListener(eventName, callback);\n\n        dom.addEventListener(eventName, callback, false);\n    }\n\n    /**\n     * Remove an event listener previously added via `addEventListener()`.\n     * @param {string} eventName\n     * @param {Function} callback\n     */\n    removeEventListener(eventName, callback) {\n        super.removeEventListener(eventName, callback);\n\n        dom.removeEventListener(eventName, callback, false);\n    }\n\n    getLayerName() {\n        return AppUtils.getLayerName();\n    }\n\n    getLayerInfo() {\n        return AppUtils.getLayerInfo();\n    }\n\n    dispatchEvent(event) {\n        dom.dispatchEvent(event.type,event.data);\n    }\n\n    connectProductInterface(productInterface) {\n        const getProductInterfaceHandler = (method, requiresData = true, callback) => data => {\n            let result;\n            if (!requiresData) {\n                result = productInterface[method]();\n            } else if (data) {\n                result = productInterface[method](JSON.parse(data));\n            }\n            callback && result && callback(result);\n        };\n\n        this.disconnectProductInterface();\n        this._handlers = {\n            dragStarted: getProductInterfaceHandler('startDragFromProduct'),\n            dragEnded: getProductInterfaceHandler('endDragFromProduct', false),\n        };\n\n        // Start listening for events from the product\n        for (const eventName in this._handlers) {\n            this.addEventListener(eventName, this._handlers[eventName]);\n        }\n    }\n\n    disconnectProductInterface() {\n        if (this._handlers) {\n            // Stop listening for events from the product\n            for (const eventName in this._handlers) {\n                this.removeEventListener(eventName, this._handlers[eventName]);\n            }\n            delete this._handlers;\n        }\n    }\n\n    get application() {\n        return app;\n    }\n\n    get core() {\n        return app;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/**\n * Local storage object - this is just window.localStorage, except that some browser like Edge\n * can have security settings that throw an error if you access localStorage. Adding a backup\n * where we fall back to a non-persistent store so the panel doesn't crash.\n */\nlet localStorageImpl;\ntry {\n    localStorageImpl = localStorage;\n} catch (e) {\n    console.error(`Unable to access localStorage: ${e}`);\n    const store = {};\n    localStorageImpl = {\n        getItem: key => store[key],\n        setItem: (key, value) => store[key] = value,\n        removeItem: key => delete store[key]\n    };\n}\n\nexport default localStorageImpl;\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/* global __webpack_public_path__ */\nimport configuration from 'app/js/config/configuration';\nimport viewState from 'app/js/state/viewState';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport appState from '../appState';\nimport copyToClipboard from 'copy-to-clipboard';\nimport localStorage from './web/localStorage';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport { action, computed, observable } from 'mobx';\nimport { debounce } from '../utils/promiseUtils';\n\n/**\n * Parse a messages.properties file (loosely based on jquery.i18n.properties)\n * @param  {string} data The strings to parse\n * @returns {Object}      Key value pairs for the parsed strings\n */\nfunction parseLocalisationFile(data) {\n    const list = {};\n    const parameters = data.split(/\\n/);\n    for (let i = 0; i < parameters.length; i++) {\n        parameters[i] = parameters[i].replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, ''); // trim\n        if (parameters[i].length > 0 && parameters[i].match('^#') !== '#') { // skip comments\n            const pair = parameters[i].split('=');\n            /** Process key & value */\n            const name = pair[0].replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, ''); // trim\n            let value = pair.length === 1 ? '' : pair[1];\n            // process multi-line values\n            while (value.match(/\\\\$/) && value.match(/\\\\$/).toString() === '\\\\') {\n                value = value.substring(0, value.length - 1);\n                value += parameters[++i].replace(/\\s\\s*$/, ''); // right trim\n            }\n            // Put values with embedded '='s back together\n            for (let s = 2; s < pair.length; s++) {\n                value += '=' + pair[s];\n            }\n            value = value.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, ''); // trim\n            // add to map\n            list[name] = value;\n        } // END: skip comments\n    }\n    return list;\n}\n\n/**\n * Load the localization strings. Advantages of using XHR is that\n * the service worker can update it on the fly.\n *\n * Note: We'd like to use fetch here, but it doesn't work with file:/// URLs.\n *\n * @param {string} locale User Interface locale\n * @returns {Promise}\n */\nfunction loadResourceBundle(locale) {\n    const request = new XMLHttpRequest();\n    return new Promise((resolve, reject) => {\n        request.open('GET', `${__webpack_public_path__}${process.env.LOCALE_FOLDER}/${locale}/messages.properties`, true);\n        request.onload = () => resolve(request.response);\n        request.onerror = reject;\n        request.send();\n    });\n}\n\nexport const supportedLocales = [\n    'cs_CZ', 'da_DK', 'de_DE', 'en_US', 'es_ES', 'es_MX', 'fi_FI', 'fr_FR', 'fr_CA', 'fr_MA', 'hu_HU', 'id_ID',\n    'it_IT', 'ja_JP', 'ko_KR', 'nb_NO', 'nl_NL', 'pl_PL', 'pt_BR', 'ru_RU', 'sv_SE', 'th_TH', 'tr_TR', 'uk_UA',\n    'vi_VN', 'zh_CN', 'zh_TW'\n];\n\nexport const LOGIN_STATE = {\n    LOGGED_OUT: 'logged_out',\n    LOGGED_IN: 'logged_in',\n    LOGGING_IN: 'logging_in',\n    ERROR: 'error'\n};\n\nconst OS_NAME_MAP = {\n    win: 'Windows',\n    winarm: 'Win-ARM:64',\n    mac: 'Mac OS X',\n    macarm: 'Mac-ARM:64'\n};\n\nexport default class BaseEnvironment {\n\n    _listeners = {};\n\n    constructor(w) {\n        this._window = w;\n    }\n\n    /**\n     * Most environments support animations and css list display, except for UXP currently.\n     */\n    supportsAnimations = true;\n    supportsCSSListItem = true;\n\n    videoElementsSupported = true;\n\n    // true if the panel is under development mode\n    developerMode = process.env.NODE_ENV !== 'production';\n    localStorage = localStorage;\n\n    /**\n     * Initializing the environment. Some environments require an asynchronous initialization step,\n     * so this can be overridden.\n     *\n     * @returns {Promise}\n     */\n    init() {\n        return Promise.resolve();\n    }\n\n    /**\n     * Notify the environment that the panel is finished initializing. This can be used to initialize APIs exposed\n     * from the libraries panel to the product, or to notify the product that the panel is ready to receive messages.\n     */\n    notifyProductInitialized() {\n    }\n\n    /**\n     * Called when the product interface initializes, to connect an instance to the environment. This allows the environment\n     * to setup event listeners and call the appropriate\n     *\n     * TODO: We should simplify this in future by just passing appState into notifyProductInitialized, so the environment can\n     * access all the state without importing globals.\n     */\n    connectProductInterface(/*productInterface*/) {\n    }\n\n    /**\n     * Called to disconnect the product interface from the environment. Currently only used by unit tests.\n     */\n    disconnectProductInterface() {\n    }\n\n    /**\n     * Called by app.js when the panel renders - if an environment returns false, this will prevent the\n     * main rendering of the panel from happening - instead, the environment can expose APIs for rendering.\n     * (e.g. this can be used for integrations where the panel is included as a JS file, rather than the main HTML entry).\n     *\n     * @returns {boolean} false if the rendering is handled by the environment.\n     */\n    shouldRenderPanel() {\n        return true;\n    }\n\n    /**\n     * Decides if the host/environment needs to convert the color before rendering it in ColorElementView.\n     * @returns {boolean} true if a color conversion is needed, false otherwise.\n     */\n    shouldConvertColor() {\n        return false;\n    }\n\n    /**\n     * This function is passed by ColorElementView to get the background-color CSS.\n     * Host need to ovrride it if a conversion is needed i.e. if shouldConvertColor returns true.\n     * Note: This is needed because UXP does not support color-profile CSS on UWP.\n     * So any UXP app that is implemented on Windows with UWP, such as XD, needs to do this.\n     * UXP supports color-profile CSS on Win32 so other apps do not need this converter. More detail: UXP-19217\"\n     * @param {Object} color to convert\n     * @returns {Object} converts the color based on the logic provided by the host/environment.\n     */\n    convertSingleColor(color) {\n        return color;\n    }\n\n    /**\n     * Get the id of the extension.\n     *\n     * @returns {string}\n     */\n    getExtensionID() {\n        return this._extensionId;\n    }\n\n    /**\n     * Load translation strings from a file on disk - this is used internally, but exposed\n     * as a public method, so it can be used for debugging (e.g. dynamically loading a different\n     * locale to use while testing)\n     *\n     * @param {string} locale\n     * @returns {Promise<Object>}\n     */\n    fetchResourceBundle(locale) {\n        return loadResourceBundle(locale).then(strings => parseLocalisationFile(strings));\n    }\n\n    // Private: Used by sub-classes that need to download the translation strings (i.e. are not CEP).\n    _loadResourceBundle(locale) {\n        return this.fetchResourceBundle(locale).then(bundle => this._resourceBundle = bundle);\n    }\n\n    /**\n     * Get the string resources for the panel - this is a map from keys to string values.\n     *\n     * @returns {Object}\n     */\n    get resourceBundle() {\n        return this._resourceBundle;\n    }\n\n    /**\n     * Free up the memory taken by the loaded localization strings. Causes\n     * resourceBundle property to return null.\n     */\n    clearResourceBundle() {\n        this._resourceBundle = null;\n    }\n\n    /**\n     * Get all the locales that the libraries panel supports.\n     *\n     * @returns {string[]} supported locales\n     */\n    get supportedLocales() {\n        return supportedLocales;\n    }\n\n    /**\n     * Root directory where library data is stored (inside this folder there are folders for each app)\n     *\n     * @returns {string}\n     */\n    getGlobalRoot() {\n        return this.getUserDataPath() + '/Adobe/Creative Cloud Libraries/';\n    }\n\n    /**\n     * Root directory where library data is stored for the current application.\n     * Data inside this folder will not be shared between different apps.\n     *\n     * @returns {string}\n     */\n    getLocalRoot() {\n        return this.getGlobalRoot() + this.getAppName() + '/';\n    }\n\n    /**\n     * Returns a key to use for local storage of the given settings type (settings.json or debug).\n     * In most environments you don't need to override this, but in some special cases like XD,\n     * it needs to be overridden so that we associate settings with the open document as well!\n     *\n     * @param {string} name\n     * @returns {string}\n     */\n    getLocalStorageKey(name) {\n        return `cclibraries#${name}`;\n    }\n\n    /**\n     * Some environments need to bypass the regular logging of messages to our log file on disk,\n     * e.g. if they don't have filesystem access. An environment can override this message to\n     * hook into the log messages.\n     *\n     * Return true to indicate that the log message was handled by the environment, and prevent\n     * it falling through to the regular logging.\n     *\n     * @param {string} message\n     */\n    debugLog(message) {\n        // We log to the console as well as the log file, if we're in a dev environment\n        if (process.env.NODE_ENV !== 'production') {\n            // eslint-disable-next-line no-console\n            console.info(message);\n        }\n    }\n\n    /**\n     * Is this loading the library panel or some other extension\n     * @returns {boolean}\n     */\n    isLibrariesPanel() {\n        return [\n            'com.adobe.DesignLibraries.angular',\n            'com.adobe.cclibrariespanel',\n            'com.adobe.DesignLibraries.touch'\n        ].includes(this._extensionId);\n    }\n\n    /**\n     * Is this loading the library manager.\n     * @returns {boolean}\n     */\n    isLibrariesManager() {\n        return this._extensionId === configuration.MANAGER_EXTENSION_ID;\n    }\n\n    /**\n     * Name of the ARM operating system, on DEVICE_DESCRIPTION from process\n     * If the OS is not an ARM OS, returns the OS name we get from the client window\n     * Mac-ARM:64 if a Mac ARM machine based on DEVICE_DESCRIPTION from process\n     * Win-ARM:64 if a Windows ARM machine based on DEVICE_DESCRIPTION from process\n     * @returns {string}\n     */\n    getOSName() {\n        const processOSName = libraryManager.DEVICE_DESCRIPTION;\n        const osType = processOSName && processOSName.split('-')[0];\n        return osType && OS_NAME_MAP[osType] || this._getClientOSName();\n    }\n\n    /**\n     * Name of the operating system, based on CEP code. Windows or Mac OS X based on the platform.\n     * @returns {string}\n     */\n    _getClientOSName() {\n        const userAgent = this._window.navigator.userAgent;\n\n        if (/windows|win10|win32/i.test(userAgent)) {\n            return 'Windows';\n        }\n\n        if (/macintosh|darwin/i.test(userAgent)) {\n            return 'Mac OS X';\n        }\n\n        if (/CrOS/.test(userAgent)) {\n            return 'Chrome OS';\n        }\n\n        if (/android/i.test(userAgent)) {\n            return 'Android';\n        }\n\n        if (/iPad|iPhone|iPod/.test(userAgent)) {\n            return 'iOS';\n        }\n\n        return 'Unknown Operation System'; // CEP has this typo, so we perpetuate it to keep consistent values\n    }\n\n    /**\n     * The version information of the operating system we are running on.\n     * @returns {string}\n     */\n    getOSVersion() {\n        const platform = this._window.navigator.platform;\n        const userAgent = this._window.navigator.userAgent;\n\n        if (platform === 'Win32' || platform === 'Windows') {\n            let winVersion = '';\n            if (userAgent.includes('Windows')) {\n                if (userAgent.includes('Windows NT 6.1')) {\n                    winVersion = 'Windows 7';\n                } else if (userAgent.includes('Windows NT 6.2')) {\n                    winVersion = 'Windows 8';\n                } else if (userAgent.includes('Windows NT 6.3')) {\n                    winVersion = 'Windows 8.1';\n                } else if (userAgent.includes('Windows NT 10')) {\n                    winVersion = 'Windows 10';\n                }\n\n                winVersion += userAgent.includes('WOW64') ? ' 64-bit' : ' 32-bit';\n            }\n\n            return winVersion;\n        }\n        if (platform === 'MacIntel' || platform === 'Macintosh') {\n            const version = /[Apple Silicon | Mac OS X ]([0-9_.]+)/.exec(userAgent);\n            const result = version && version[1] ? version[1].replace(/_/g, '.') : '';\n            return result;\n        }\n        return '';\n    }\n\n    /**\n     * String representing the operating system. Note that by default we compute this based on the navigator\n     * (platform and userAgent) data, but it can be overridden if you have a more precise way of getting the OS.\n     *\n     * @returns {string}\n     */\n    getOSInformation() {\n        const osName = this.getOSName();\n        const osVersion = this.getOSVersion();\n        return osName + (osVersion ? ' ' + osVersion : '');\n    }\n\n    /**\n     * Whether the environment is windows or not\n     * @returns {boolean}\n     */\n    isWindowsOS() {\n        return this.getOSInformation().includes('Win');\n    }\n\n    /**\n     * Name of the current application\n     * @returns {string}\n     */\n    getAppName() {\n        return this.getHostEnvironment().appName;\n    }\n\n    /**\n     * Version of the current application\n     * @returns {string}\n     */\n    getAppVersion() {\n        return this.getHostEnvironment().appVersion;\n    }\n\n    /**\n     * Current locale.\n     * @param {boolean} keepUnderscore\n     * @returns {string}\n     */\n    getLocale(keepUnderscore) {\n        const locale = this.getHostEnvironment()?.appUILocale || 'en_US';\n        return keepUnderscore ? locale : locale.replace('_', '-');\n    }\n\n    /**\n     * Description of the current application environment, including name, version and locale.\n     * @returns {string}\n     */\n    getAppDescription() {\n        return this.getAppName() + ' ' + this.getAppVersion() + ' ' + this.getLocale();\n    }\n\n    /**\n     * Create an event to send to the application.\n     *\n     * @param {string} type The name of the event.\n     * @param {string} scope The scope of event, can be \"GLOBAL\" or \"APPLICATION\".\n     * @param {string} appId The unique identifier of the application that generated the event.\n     * @param {string} extensionId The unique identifier of the extension that generated the event.\n     * @param {Object} data Data to attach to the event.\n     * @returns {Object} the event\n     */\n    createEvent(type, scope, appId, extensionId, data) {\n        return { type, scope, appId, extensionId, data };\n    }\n\n    /**\n     * Add an event listener for messages from the application.\n     * @param {string} eventId\n     * @param {Function} callback\n     */\n    addEventListener(eventId, callback) {\n        this._listeners[eventId] = this._listeners[eventId] || [];\n        this._listeners[eventId].push(callback);\n    }\n\n    /**\n     * Remove an event listener previously added via `addEventListener()`.\n     * @param {string} eventId\n     * @param {Function} callback\n     */\n    removeEventListener(eventId, callback) {\n        this._listeners[eventId] = this._listeners[eventId] && this._listeners[eventId].filter(cb => cb !== callback);\n    }\n\n    /**\n     * Internal: Call the handlers of all event listeners previously added via `addEventListener()`.\n     * @param {string} eventId\n     * @param {Object} data\n     */\n    _notifyEventListeners(eventId, data) {\n        if (this._listeners[eventId]) {\n            this._listeners[eventId].forEach(listener => listener(data));\n        }\n    }\n\n    /**\n     * Access any feature flag passed by the environment at initialization.\n     * (Useful for when the debug menu is not accessible or needs to be set programmatically.)\n     * Note that this is used in FeatureFlags.js only. Otherwise you should get the FF from FeatureFlags.js!\n     * The environment's FF will override the default value in featureFlags.js,\n     * but not over any manual override via the debug menu.\n     */\n    getFeatureFlag(/*key*/) {\n        return;\n    }\n\n    /**\n     * Get a list of available extensions. Needs to be implemented by the sub-class if that environment supports\n     * other extensions.\n     *\n     * @returns {string[]}\n     */\n    getAvailableExtensions() {\n        return [];\n    }\n\n    /**\n     * Called from anywhere that intercepts a right-click (context menu) event. Implement this if you need to\n     * intercept in some way.\n     */\n    onContextMenu(/*event*/) {\n    }\n\n    /**\n     * Spread to any component that wants to listen for a context menu event.\n     * Used to handle cases where onContextMenu doesn't work, such as mobile environments.\n     *\n     * @param {Function} contextMenuHandler The method to call when a context menu event is triggered\n     * @returns {Object} By default, the context menu event is handled by onContextMenu\n     */\n    contextMenuEventListeners(contextMenuHandler) {\n        return { onContextMenu: contextMenuHandler };\n    }\n\n    /**\n     * For most environments, the root DOM element is document.body, but some environments (like in UXP) it may differ.\n     * This allows the environment to override this, if needed:\n     *\n     * @returns {HTMLElement}\n     */\n    getRootPanelElement() {\n        return document.body;\n    }\n\n    /**\n     * For most environments, the root DOM element is document.body, so the panel width is window.innerWidth.\n     * This allows the environment to override this, if needed:\n     *\n     * @returns {number}\n     */\n    getPanelWidth() {\n        return window.innerWidth;\n    }\n\n    /**\n     * For most environments, the root DOM element is document.body, so the panel height is window.innerHeight.\n     * This allows the environment to override this, if needed:\n     *\n     * @returns {number}\n     */\n    getPanelHeight() {\n        return window.innerHeight;\n    }\n\n    /**\n     * For most environments, the container we are given to render items is the size of the panel itself.\n     * However, in web environments, we will sometimes want to render items outside of the panel, but still within the host itself.\n     * This allows the environment to specify the host container size, if needed:\n     *\n     * @returns {number}\n     */\n    getHostContainerWidth() {\n        return this.getPanelWidth();\n    }\n\n    /**\n     * For most environments, the container we are given to render items is the size of the panel itself.\n     * However, in web environments, we will sometimes want to render items outside of the panel, but still within the host itself.\n     * This allows the environment to specify the host container size, if needed:\n     *\n     * @returns {number}\n     */\n    getHostContainerHeight() {\n        return this.getPanelHeight();\n    }\n\n    /**\n     * Whether the environment is logged in - if this returns false, it's treated the same way as if the app isn't logged in - the libraries\n     * API will not initialize, same as in NGL mode. This should only be implemented by third-party environments (e.g. Office) that need to\n     * do their own authentication.\n     *\n     * @returns {boolean}\n     */\n    isLoggedIn() {\n        return true;\n    }\n\n    getLoginState() {\n        return LOGIN_STATE.LOGGED_IN;\n    }\n\n    /**\n     * Override this to take over the entire panel view. Note that this should only be used for certain states (e.g. showing an authentication\n     * flow in third-party integrations like Office).\n     *\n     * @returns {React.Component}\n     */\n    getCustomPanelView() {\n        return;\n    }\n\n    /**\n     * Override this to add a custom component to the top of the panel - above the panel header.\n     *\n     * @returns {React.Component}\n     */\n    getCustomHeaderView() {\n        return;\n    }\n\n    /**\n     * Override this to add a custom check for a composing event (an event coming from an IME for some languages)\n     *\n     * @returns {boolean}\n     */\n    isComposingInputEvent() {\n        return;\n    }\n\n    /**\n     * getSavePath is a requirement for element export. It should resolve to the destination path\n     *\n     * @returns {Promise}\n     */\n    getSavePath() {\n        return Promise.resolve(new Error('getSavePath is not defined'));\n    }\n\n    /**\n     * Get and parse the layer info (used by layerSelectionManager for adding assets).\n     * This must be implemented to support adding elements to a library\n     * @returns {Promise} Promise returns parsed layer info\n     */\n    getLayerInfo() {\n        return Promise.reject('getLayerInfo is not implemented');\n    }\n\n    /**\n     * Get the name of the currently selected layer. This is used for dragging from the product onto the libraries panel.\n     * @returns {Promise} Promise returns parsed layer info\n     */\n    getLayerName() {\n        return Promise.reject('getLayerName is not implemented');\n    }\n\n    /**\n     * Gets the state of the current document - path to it, and layerID of the selected layer.\n     * Override this if the app supports switching between different documents and selections.\n     *\n     * @returns {Promise} Promise returns parsed layer info\n     */\n    getCurrentDocumentState() {\n        return Promise.resolve({ path: undefined, layerID: undefined });\n    }\n\n    /**\n     * Is the font available in this environment.\n     * @returns {Promise} Promise returns boolean\n     */\n    isFontAvailable(/*style*/) {\n        return Promise.resolve(false);\n    }\n\n    /**\n     * Open a URL asynchronously - we don't know the URL yet (e.g. it's a jump URL).\n     * By default this calls launchInBrowser once the URL resolves - override to do something different.\n     * @param {Promise} urlPromise Promise that resolves with a URL to open\n     */\n    launchInBrowserAsync(urlPromise) {\n        urlPromise.then(url => this.launchInBrowser(url));\n    }\n\n    /**\n     * Should we hide the debug flyout menu?\n     * @returns {boolean}\n     */\n    hideDebugFlyoutMenu() {\n        return false;\n    }\n\n    /**\n     * Override this to implement launching the default web browser and navigating to the supplied URL\n     */\n    launchInBrowser(/*url*/) {\n        return;\n    }\n\n    getProfile() {\n        return {};\n    }\n\n    /**\n     * Override this to expose document library constants, for apps that support document libraries\n     */\n    get documentLibraryConstants() {\n        return {};\n    }\n\n    /* Override this to implement launching the Library Manager window in an environment. */\n    openLibraryManagerWindow() {}\n\n    /* Override this to implement function that returns if the library manager window is open or not. */\n    isLibraryManagerWindowOpen() {}\n\n    addManagerInitListener() {}\n    addOpenDialogEventListener() {}\n\n    getDynamicLayoutBreakpointWidth() {\n        if (configuration.currentProduct.config.getDynamicLayoutBreakpointWidth) {\n            return configuration.currentProduct.config.getDynamicLayoutBreakpointWidth();\n        }\n        return configuration.GRID_VIEW_BREAKPOINT_SIZE;\n    }\n\n    getDynamicLayoutMinimumBreakpoint() {\n        if (configuration.currentProduct.config.getDynamicLayoutMinimumBreakpoint) {\n            return configuration.currentProduct.config.getDynamicLayoutMinimumBreakpoint();\n        }\n        return configuration.GRID_MINIMUM_BREAKPOINT;\n    }\n\n    getDynamicLayoutRules() {\n        if (configuration.currentProduct.config.getDynamicLayoutRules) {\n            return configuration.currentProduct.config.getDynamicLayoutRules();\n        }\n        const showNameAlways = viewState.nameVisibility === 'always';\n        const extraNameHeight = showNameAlways ? configuration.GRID_VIEW_NAME_HEIGHT : 0;\n        return {\n            [configuration.GRID_TYPE_LARGE]: {\n                getHeight: width => Math.floor(0.8 * width) + extraNameHeight,\n                getColumns: stepsAway => 2 + stepsAway\n            },\n            [configuration.GRID_TYPE_MEDIUM]: {\n                getHeight: width => width + extraNameHeight,\n                getColumns: stepsAway => {\n                    const numEvenSteps = Math.floor(stepsAway / 2);\n                    const numOddSteps = numEvenSteps + (stepsAway % 2);\n                    return 3 + (2 * numEvenSteps) + numOddSteps;\n                }\n            },\n            [configuration.GRID_TYPE_SMALL]: {\n                getHeight: width => width,\n                getColumns: stepsAway => 4 + (2 * stepsAway)\n            },\n            [configuration.GRID_TYPE_WIDE]: {\n                getHeight: () => configuration.GRID_TYPE_WIDE_SET_HEIGHT,\n                getColumns: stepsAway => 1 + Math.floor(stepsAway / 2)\n            }\n        };\n    }\n\n    /**\n     * Whether or not the environment has a bug with rendering <video> tags\n     */\n    get hasVideoRenderingBug() {\n        return false;\n    }\n\n    /**\n     * Whether or not the environment has a bug that closes the toast immediately after opening\n     */\n    get ignoreFocusOutsideToast() {\n        return false;\n    }\n\n    navigateToLibrary(library) {\n        appState.libraryManager.currentLibrary = library;\n    }\n\n    /**\n     * Method to copy the given content to clipboard\n     * @param {*} content Object to be copied\n     */\n    copyContentToClipboard(content) {\n        copyToClipboard(content);\n    }\n\n    /**\n     * Show an error message to the end user.\n     */\n    showError() {}\n\n    /**\n     * Show a message to the end user.\n     */\n    showMessage() {}\n\n    /**\n     * Whether or not the environment can place elements\n     */\n    canPlaceElements = true;\n\n    /**\n     * Whether the menus (context/flyout menu) should be returned in JSON. If false, they're returned as XML.\n     * Since the XML format is only understood by CEP, we return true by default.\n     *\n     * @type {boolean}\n     */\n    isMenuInJson = true;\n\n    /**\n     * Different colors for light representations (white text elements)\n     */\n    recolorLightTextElements = true;\n\n    /**\n     * Whether drag-n-drop of native files is supported. True by default.\n     *\n     * @type {boolean}\n     */\n    supportsDropFiles = true;\n\n    /**\n     * By default, we assume that we support filesystem access - change to false for sandboxed browser environments.\n     *\n     * @type {boolean}\n     */\n    supportsFileSystem = true;\n\n    /**\n     * By default, we assume this environment supports connecting to the process.\n     */\n    supportsProcessConnection = true;\n\n    /**\n     * By default, we assume that we support file:// URLs - change to false for browser environments where we're hosting\n     * from a domain (you can't load file:// URLs from a different domain for security reasons).\n     *\n     * @type {boolean}\n     */\n    _supportsFileURLs = true;\n    get supportsFileURLs() {\n        return this._supportsFileURLs;\n    }\n    set supportsFileURLs(value) {\n        this._supportsFileURLs = value;\n    }\n\n    /**\n     * Whether a file picker returning absolute file path is supported. True by default.\n     */\n    supportsFilePicker = true;\n\n    /**\n     * Whether placing images inside a <button> is supported (e.g. UXP does not support this). True by default.\n     */\n    supportsImagesInButtons = true;\n\n    /**\n     * Are notes supported in this environment?\n     *\n     * @type {boolean}\n     */\n    supportsNotes = true;\n\n    /**\n     * Is the export element workflow supported in this environment?\n     *\n     * @type {boolean}\n     */\n    supportsExportElement = false;\n\n    /**\n     * Expose a custom IMSLib interface - expects the same APIs as node-imslib.\n     */\n    IMSLib = null;\n\n    /**\n     * Overrides small spinners in the content view\n     */\n    SmallSpinner = null;\n\n    /**\n     * Drag-drop related constants\n     */\n    ElementDragId = 'com.adobe.cep.dnd.pasteboardtype';\n    GroupDragId = 'com.adobe.cclibraries.dnd.group';\n\n    /**\n     * Add special handling for dropped Stock Elements.\n     * @param {Object} dragState\n     */\n    async handleDroppedStockElement(dragState) {\n        const element = dragState?.currentlyDraggedElement;\n        const promise = dragState?.currentlyDraggedElementPromise;\n        const operations = elementConfiguration?.getApplyOperations(element);\n\n        if (!element || !promise || operations?.size === 0) {\n            return;\n        }\n\n        // Stock elements are created synchronously but we need to wait for the representations\n        // to at least be created before sending place data to the document. The value of `promise` here\n        // is the promise returned by `adobeStockUtils#createStockElement`, called by `StockDragManager#handleDragStart`:\n        // https://git.corp.adobe.com/ProjectCentral/cc-libraries-panel/blob/main/app/js/utils/adobeStockUtils.js#L934\n        await promise;\n\n        // It would be better if we could filter by id, i.e `id === 'placeLinked'`,\n        // but we haven't assigned ids to the element config operations.\n        const requiredOperation = operations.find(({ name }) => name === 'DL_ADD_IMAGE_TO_DOC_AS_LINKED') || operations[0];\n        return requiredOperation.apply();\n    }\n\n    /**\n     * maintain the information whether an active view related to CC Libraries is currently mounted or not.\n     *\n     * For environment like CCD, where panel is initialized via loading of js file, we need to know when\n     * an active view related to CC Libraries is mounted by the application. Runtime property,\n     * hence observable.\n     *\n     * @returns {boolean} true (default) or if any view related to CC Libraries is currently mounted.\n     */\n    @observable isViewMounted = true;\n\n    @action _setIsViewMounted = value => {\n        this.isViewMounted = value;\n    };\n\n    /**\n     * maintain the information whether environment prefers delay launch of the process.\n     *\n     * @returns {boolean} true (default), if environment prefers delay launching of the process.\n     */\n    delayProcessLaunch = false;\n\n    /**\n     * we need to debounce the call to _setRenderingActive, since we might get multiple calls\n     * with false followed by true, which we don't want to act on.\n     */\n    setIsViewMounted = debounce(100, mounted => {\n        this._setIsViewMounted(mounted);\n        return Promise.resolve();\n    });\n\n    /**\n     * based on current state of the settings and runtime properties, we can determine if we should maintain\n     * an active connection to process or disconnect.\n     */\n    @computed get maintainConnectionToProcess() {\n        return this.isViewMounted;\n    }\n\n    /**\n     * based on current state of the settings and runtime properties, we can determine if we should launch\n     * the process or not.\n     */\n    @computed get canLaunchProcess() {\n        return !this.delayProcessLaunch || this.isViewMounted;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport themeManager from 'app/js/managers/themeManager';\n\nconst TEMPLATE_ID = 'cc-libraries-base-template';\n\nexport const createTemplateIfNecessary = () => {\n    let template = document.getElementById(TEMPLATE_ID);\n\n    if (template) {\n        return template;\n    }\n\n    template = document.createElement('template');\n    template.setAttribute('id', TEMPLATE_ID);\n\n    // We need to do this because the panel styles rely on a more traditional DOM structure\n    const html = document.createElement('html');\n    const head = document.createElement('head');\n    const body = document.createElement('body');\n    body.style.overflow = 'visible';\n    html.appendChild(head);\n    html.appendChild(body);\n    template.content.appendChild(html);\n    document.head.appendChild(template);\n\n    themeManager.addRoot(html);\n\n    return template;\n};\n\nexport const getTemplate = () => {\n    const template = createTemplateIfNecessary();\n    return template.content.firstElementChild.cloneNode(true);\n};\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { PortalProvider } from './PortalContext';\nimport themeManager from 'app/js/managers/themeManager';\nimport { translate } from 'app/js/managers/translationManager';\nimport retargetEvents from '@ccx-public/component-shared/utils/retargetEvents';\nimport environment from 'app/js/environment';\nimport configuration from 'app/js/config/configuration';\nimport { getTemplate } from './util';\nimport { reaction } from 'mobx';\n\n/**\n * BaseView is a basic component (and hopefully temporary workaround)\n * for getting the panel styles from the document's head\n */\nexport default class BaseView extends HTMLElement {\n\n    // 'ismobileview' is the attribute currently provided by CCX. Unfortunately, as this method is static, configuration.currentProduct.config is not available at this point.\n    static isMobileViewAttributeName = 'ismobileview';\n    static isCurrentUserBrandCreator = 'cancreate';\n\n    // Each component must override with any routes it supports.\n    // See BaseView.handleRouteChange\n    routeHandlers = [];\n\n    constructor(node, classList = [], bodyClassList = []) {\n        super();\n\n        this.node = node;\n        this.shadowDOM = this.attachShadow({ mode: 'open' });\n\n        const html = getTemplate();\n        this.shadowDOM.appendChild(html);\n\n        // Needed for proper overlay positioning in react-spectrum\n        this.shadowBody = html.querySelector('body');\n        this.shadowDOM.body = this.shadowBody;\n        this.shadowDOM.documentElement = html;\n\n        retargetEvents(this.shadowDOM);\n\n        this.mountPoint = document.createElement('div');\n        this.mountPoint.classList.add(...classList);\n        this.shadowBody.appendChild(this.mountPoint);\n\n        // TODO: Refactor this to a single location. This code also exists in the panel.\n        const locale = environment.getLocale();\n        const { reactSpectrumTheme, appCode } = themeManager;\n        const legacySpectrumEnabled = configuration.currentProduct.config.legacySpectrumEnabled;\n        this.shadowBody.classList.add(\n            `locale_${locale}`,\n            `ccl-App--${appCode}`,\n            `ccl-Theme--${reactSpectrumTheme}`,\n            legacySpectrumEnabled && 'spectrum-enabled',\n            ...bodyClassList\n        );\n        if (environment.isWindowsOS()) {\n            this.shadowBody.classList.add('windows');\n        }\n    }\n\n    connectedCallback() {\n        // Check the root for style tags.\n        // If there are style tags, we don't need to reload the theme.\n        const hasStyles = !!this.shadowDOM.querySelector('style');\n\n        themeManager.addRoot(this.shadowDOM, hasStyles).then(() => {\n            this.render();\n        });\n\n        this._localeReactionDispose = reaction(() => translate('DL_LIBRARIES'), () => {\n            this.handleRouteChange(this.getAttribute('route'));\n        });\n    }\n\n    disconnectedCallback() {\n        ReactDOM.unmountComponentAtNode(this.mountPoint);\n        themeManager.removeRoot(this.shadowDOM);\n        this._localeReactionDispose?.();\n    }\n\n    // Any web component can now pass in a isMobileView attribute (it will always be lower cased here), and that data will be set on the environment.\n    // Note: observedAttributes needs to be static.\n    static get observedAttributes() {\n        return [ BaseView.isMobileViewAttributeName, BaseView.isCurrentUserBrandCreator, 'route' ];\n    }\n\n    async attributeChangedCallback(name, oldValue, newValue) {\n        // We don't do this in the constructor() because an element's attributes are unavailable until connected to the DOM.\n        if (newValue !== oldValue) {\n            switch (name) {\n            case BaseView.isCurrentUserBrandCreator:\n                environment.setIsBrandCreator?.(newValue === 'true');\n                break;\n            case BaseView.isMobileViewAttributeName:\n                environment.setIsMobileView?.(newValue === 'true');\n                if (newValue === 'true') {\n                    this.mountPoint.classList.add('mobile');\n                } else {\n                    this.mountPoint.classList.remove('mobile');\n                }\n                break;\n            case 'route':\n                // Wait for the route change handling to finish before resolving.\n                await this.handleRouteChange(newValue);\n                break;\n            default:\n            }\n        }\n    }\n\n    /**\n     * Handle the host changing the `route` prop on the web component.\n     * Follows the CCAC pattern specified here:\n     * https://wiki.corp.adobe.com/pages/viewpage.action?spaceKey=assetscollab&title=Asset+Management+Architecture+Evolution#AssetManagementArchitectureEvolution-RoutingandNavigation\n     * @param {string} route\n     */\n    handleRouteChange(route) {\n        // Handle the route in the component.\n        for (const [ matcher, handler ] of this.routeHandlers) {\n            const result = matcher.exec(route);\n            if (result) {\n                return handler(...result);\n            }\n        }\n    }\n\n    render(node = this.node) {\n        this.node = node;\n        // TODO: Remember to call ReactDOM.unmountComponentAtNode where appropriate\n        ReactDOM.render(<PortalProvider portalNode={this.shadowBody}>{ node }</PortalProvider>, this.mountPoint);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport BaseView from './BaseView';\nimport environment from 'app/js/environment';\n\n/**\n * BaseComponentView provides support for component view classes\n * with environment support via an observable attribute\n */\nexport default class BaseComponentView extends BaseView {\n    connectedCallback() {\n        super.connectedCallback();\n        environment.setCurrentBaseWebComponent(this);\n    }\n\n    disconnectedCallback() {\n        super.disconnectedCallback();\n\n        // remove self from environment to prevent memory leaks\n        environment.setCurrentBaseWebComponent(null);\n    }\n\n    constructor(node, classList = [], bodyClassList = []) {\n        super(node, classList, bodyClassList);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\nimport { computed } from 'mobx';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport Icon from 'app/js/components/Icon';\n\n// Utilities\n\n@observer\nexport default class NoLibrariesListView extends React.Component {\n\n    @computed get syncStatus() {\n        return libraryManager.syncStatus;\n    }\n\n    @computed get icon() {\n        return <span className=\"error-icon\"><Icon id=\"CreativeCloudError\" height={130} width={130} /></span>;\n    }\n\n    @computed get contents() {\n        // Only render errors\n        if (this.syncStatus.state !== 'error') {\n            return null;\n        }\n        return (<div className=\"list-nolibs-middle\" data-test-id=\"no-libraries-list-view-content\">\n            { this.icon }\n        </div>);\n    }\n\n    render() {\n        return (<div className=\"list-nolibs-container\" data-test-id=\"no-libraries-list-view\">\n            { this.contents }\n        </div>);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\nimport { computed } from 'mobx';\nimport Icon from 'app/js/components/Icon';\nimport { translate } from 'app/js/managers/translationManager';\nimport Button from 'app/js/components/Button';\nimport PropTypes from 'prop-types';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport { openHelpURL } from 'app/js/utils/linkUtils';\nimport environment from 'app/js/environment';\n\n@observer\nexport default class LibraryListOnboarding extends React.Component {\n    static propTypes = {\n        handleCreateLibrary: PropTypes.func.isRequired,\n        handleFollowLibrary: PropTypes.func.isRequired,\n        handleMarketplace: PropTypes.func.isRequired,\n    }\n\n    get text() {\n        return <div className=\"onboarding-text\">\n            <h1 data-test-id=\"library-list-onboarding-heading\" className=\"onboarding-header\">{ translate('DL_LIBRARY_LIST_ONBOARDING_HEADER') }</h1>\n            <div data-test-id=\"library-list-onboarding-text\">\n                { translate('DL_LIBRARY_LIST_ONBOARDING_BODY') }\n                { ' ' }\n                <a tabIndex=\"0\" onKeyPress={ (e) => (e.key === 'Enter') ? openHelpURL(e) : null } data-test-id=\"library-list-onboarding-link\" className=\"onboarding-link\" onClick={openHelpURL}>{ translate('DL_LIBRARY_LIST_ONBOARDING_LINK') }</a>\n            </div>\n        </div>;\n    }\n\n    get librariesIcon() {\n        return <div data-test-id=\"library-list-onboarding-cclibrary-icon\" className=\"cclibrary-onboarding-icon\">\n            <Icon id=\"OnboardingCCLibrary\" height={184} width={184} />\n        </div>;\n    }\n\n    get createLibraryButton() {\n        return <div className=\"onboarding-action-buttons\">\n            <Button data-test-id=\"library-list-onboarding-create-button\" className=\"onboarding-create-library-button\" onClick={ this.props.handleCreateLibrary }>\n                <span className=\"onboarding-action-buttons-label\">{ translate('DL_LIB_LIST_ONBOARDING_CREATE_LIBRARY_BUTTON_TEXT') }</span>\n            </Button>\n        </div>;\n    }\n\n    get followLibraryButton() {\n        return (\n            <div className=\"onboarding-action-buttons\">\n                {environment.getIsStarterKitsAvailable && environment.getIsStarterKitsAvailable()\n                    ? <Button data-test-id=\"library-list-onboarding-marketplace-button\" className=\"onboarding-follow-library-button\" onClick={ this.props.handleMarketplace }>\n                        <span className=\"onboarding-action-buttons-label\">{ translate('DL_GO_MARKETPLACE') }</span>\n                    </Button>\n                    : <Button data-test-id=\"library-list-onboarding-follow-button\" className=\"onboarding-follow-library-button\" onClick={ this.props.handleFollowLibrary }>\n                        <span className=\"onboarding-action-buttons-label\">{ translate('DL_LIB_LIST_ONBOARDING_FOLLOW_LIBRARY_BUTTON_TEXT') }</span>\n                    </Button>\n                }\n            </div>\n        );\n    }\n\n    @computed get content() {\n        return <div data-test-id=\"library-list-onboarding-content\" className=\"onboarding-content\">\n            { this.librariesIcon }\n            { this.text }\n            { this.createLibraryButton }\n            { libraryManager.isSharingEnabled && this.followLibraryButton }\n        </div>;\n    }\n\n    render() {\n        return <div data-test-id=\"library-list-onboarding\" className=\"library-list-onboarding\">\n            { this.content }\n        </div>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { computed } from 'mobx';\nimport Icon from 'app/js/components/Icon';\nimport { translate } from 'app/js/managers/translationManager';\nimport viewState from 'app/js/state/viewState';\n\nexport default class LibraryListEmptyFilteredView extends React.Component {\n\n    get text() {\n        return <div className=\"onboarding-text\">\n            <div data-test-id=\"library-list-empty-filter-view-heading\" className=\"onboarding-header\">{ translate('DL_LIBRARY_LIST_EMPTY_FILTER_VIEW_TITLE') }</div>\n            <div data-test-id=\"library-list-empty-filter-view-text\">\n                { translate('DL_LIBRARY_LIST_EMPTY_FILTER_VIEW_BODY') }\n            </div>\n        </div>;\n    }\n\n    get librariesIcon() {\n        return <div data-test-id=\"library-list-empty-filter-view-icon\" className=\"library-list-empty-filter-icon\">\n            <Icon id=\"FilterWarning\" height={ 52 } width={ 50 } />\n        </div>;\n    }\n\n    resetFilter = () => {\n        viewState.resetCurrentLibrariesFilter();\n    }\n\n    get resetFilterLink() {\n        return <a tabIndex=\"0\"\n            onKeyPress={ e => e.key === 'Enter' && this.resetFilter(e) }\n            data-test-id=\"library-list-empty-filter-view-reset-button\"\n            className=\"clear-filter-link\"\n            onClick={ this.resetFilter }>\n            { translate('DL_LIBRARY_LIST_EMPTY_FILTER_VIEW_CTA') }\n        </a>;\n    }\n\n    @computed get content() {\n        return <div data-test-id=\"library-list-empty-filter-view-content\" className=\"onboarding-content\">\n            { this.librariesIcon }\n            { this.text }\n            { this.resetFilterLink }\n        </div>;\n    }\n\n    render() {\n        return <div data-test-id=\"library-list-empty-filter-view\" className=\"library-list-empty-filter\">\n            { this.content }\n        </div>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport LibraryListItem from './LibraryListItem';\nimport Icon from 'app/js/components/Icon';\nimport localizedSorter from 'app/js/utils/localizedSorter';\nimport { translate } from 'app/js/managers/translationManager';\nimport environment from 'app/js/environment';\nimport NoLibrariesListView from 'app/js/components/ccd/NoLibrariesListView';\nimport LibraryListOnboarding from 'app/js/components/ccd/LibraryListOnboarding';\nimport LibraryListEmptyFilteredView from 'app/js/components/ccd/LibraryListEmptyFilteredView';\nimport Tooltip from 'app/js/components/Tooltip';\nimport SpectrumCircleLoader from 'app/js/components/spectrum/SpectrumCircleLoader';\nimport LibraryListFilterButton from 'app/js/components/LibraryListFilterButton';\nimport metrics from 'app/js/interface/metrics';\nimport localSettings from 'app/js/config/localSettings';\nimport { getDebugMenuItems } from 'app/js/menus/flyoutMenu';\nimport SortDropdown from 'app/js/components/panel-header/SortDropdown';\nimport Button from 'app/js/components/Button';\nimport configuration from 'app/js/config/configuration';\nimport { getFilteredLibraries } from 'app/js/utils/libraryUtils';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\n\n@observer\nexport default class LibraryListView extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    @computed get currentLibrariesFilter() {\n        return this.context.viewState.currentLibrariesFilter;\n    }\n\n    @computed get isLoadingLibraries() {\n        if (!(this.context.libraryManager.syncStatus.state === 'working' || this.context.libraryManager.syncStatus.state === 'syncing')) {\n            return false;\n        }\n\n        const syncingLibraries = this.context.libraryManager.getNewLibrarySyncProgress();\n        return syncingLibraries.some((syncStatus) => syncStatus.progress && !this.context.libraryManager.libraries.find(({ id }) => id === syncStatus.id));\n    }\n\n    @computed get loadingLibraries() {\n        return this.isLoadingLibraries && (\n            <div className=\"library-list-load-more\">\n                <SpectrumCircleLoader size=\"small\" indeterminate />\n                <div className=\"library-list-load-more-text\">{translate('DL_LOADING_MORE_LIBRARIES')}</div>\n            </div>\n        );\n    }\n\n    @computed get sortedLibraries() {\n        const libraries = this.context.libraryManager.getCCLibraries();\n        const isAscending = !this.context.viewState.librarySortOrderDescendingState;\n        return this.context.viewState.librarySortState === 'name' ? localizedSorter.sortByName(libraries, isAscending) : localizedSorter.sortByModified(libraries, !isAscending);\n    }\n\n    @computed get libraries() {\n        return getFilteredLibraries(this.currentLibrariesFilter, this.sortedLibraries);\n    }\n\n    @computed get libraryList() {\n        return (\n            <div role=\"listbox\" aria-label={translate('DL_ARIA_LIBRARY_LIST_TITLE')}\n                data-test-id=\"library-list-content\" className=\"library-list-content\">\n                { this.libraries.map(library => {\n                    // to avoid having two elements with same key during promote, append team status\n                    const key = `${library.id}${library.ownerType === 'org' ? '-team' : ''}`;\n                    const isSelected = environment.isContentViewMounted && this.context.libraryManager.currentLibrary && this.context.libraryManager.currentLibrary.id === library.id;\n                    return <LibraryListItem\n                        isSelected={ isSelected }\n                        key={ key }\n                        library={ library }\n                        onClick={ library => environment.navigateToLibrary(library) }\n                        showContextMenuButton={ configuration.currentProduct.config.showLibraryListItemContextMenuButton?.() }\n                    />;\n                }) }\n                { this.loadingLibraries }\n            </div>\n        );\n    }\n\n    navigationItem({ id, icon, label, onClick }) {\n        return (\n            <Button\n                data-test-id={`library-list-navigation-item-${id}`}\n                className=\"library-list-navigation-item\"\n                onClick={onClick}\n            >\n                <Icon\n                    data-test-id={`library-list-navigation-item-icon-${id}`}\n                    className=\"library-list-navigation-item-icon\"\n                    id={icon}\n                    height={ 18 }\n                />\n                <span data-test-id={`library-list-navigation-item-label-${id}`} className=\"library-list-navigation-item-label\">\n                    { label }\n                </span>\n            </Button>\n        );\n    }\n\n    get navigationItems() {\n        const starterKitEnabled = environment.getIsStarterKitsAvailable && environment.getIsStarterKitsAvailable();\n        const isOnline = this.context.libraryManager.isOnline;\n        return (\n            <div data-test-id=\"navigation\" className=\"library-list-navigation\">\n                { isOnline && this.navigationItem({ id: 'browseLibrary', icon: 'Browse', label: translate('DL_MORE_LIBRARY_BROWSE'), onClick: this.handleBrowseMore }) }\n                { starterKitEnabled ? (\n                    this.navigationItem({ id: 'marketplace', icon: 'Shop', label: translate('DL_GO_MARKETPLACE'), onClick: () => this.handleMarketplace('add-menu') })\n                ) : (\n                    this.navigationItem({ id: 'followLibrary', icon: 'GlobeSearch', label: translate('DL_LIB_LIST_ONBOARDING_FOLLOW_LIBRARY_BUTTON_TEXT'), onClick: () => this.handleFollowLibrary('add-menu') })\n                ) }\n            </div>\n        );\n    }\n\n    onFilterChange = () => {\n        if (!this.libraries.includes(this.context.libraryManager.currentLibrary) && this.libraries.length) {\n            environment.navigateToLibrary(this.libraries[0]);\n        }\n    }\n\n    get disabledFilters() {\n        return this.context.viewState.getLibraryListFilterOptions().filter(filterOption => !this.isFilterEnabled(filterOption));\n    }\n\n    isFilterEnabled(filterId) {\n        const filteredLibraries = getFilteredLibraries(filterId, this.sortedLibraries);\n        return filteredLibraries.length > 0;\n    }\n\n    @computed get libraryOnboarding() {\n        if (!this.loadingLibraries && this.libraries.length === 0) {\n            return <LibraryListEmptyFilteredView/>;\n        }\n\n        if (this.context.libraryManager.libraries.length === 1 && !this.isLoadingLibraries) {\n            return <LibraryListOnboarding\n                handleCreateLibrary={ this.handleCreateLibrary }\n                handleFollowLibrary={() => this.handleFollowLibrary('empty-panel')}\n                handleMarketplace={() => this.handleMarketplace('empty-panel')} />;\n        }\n    }\n\n    onContextClickTitle = (event) => {\n        event.preventDefault();\n        event.stopPropagation();\n        if (localSettings.showDebugMenu() && event.shiftKey && event.altKey) {\n            const rect = event.target.getBoundingClientRect();\n            this.context.viewState.setContextMenuPositionState({\n                x: rect.left,\n                y: rect.bottom\n            });\n            // Note: Consider calling MenuManager.setContextMenu() instead when there are submenus (Adds unique ids for submenu items)\n            environment.setContextMenu(getDebugMenuItems());\n        }\n    }\n\n    @computed get contents() {\n        if (!this.context.libraryManager.libraries || this.context.libraryManager.libraries.length < 1) {\n            return <NoLibrariesListView/>;\n        }\n        return <React.Fragment>\n            { this.navigationItems }\n            <div data-test-id=\"header\" className=\"library-list-header\">\n                <div data-test-id=\"title\" className=\"library-list-title\" { ...environment.contextMenuEventListeners(this.onContextClickTitle) }>\n                    { translate(configuration.currentProduct.config.customPanelTitle || 'DL_LIBRARIES_PANEL_NAME') }\n                </div>\n                { this.listControls }\n            </div>\n            { this.libraryList }\n            { this.libraryOnboarding }\n        </React.Fragment>;\n    }\n\n    handleCreateLibrary = (event) => {\n        // when dialog is closed, focused element should return to origin 'Enter' click for the add library + button method of invocation\n        const onClose = () => {\n            // path data does not exist for click action, only using 'Enter' key\n            const path = event.path && event.path[0].id;\n            if (path === 'addLibraryListMenu') {\n                const node = event.target.shadowRoot.getElementById('addLibraryListMenu');\n                node && node.focus();\n            }\n        };\n        this.context.libraryActions.create(library => environment.navigateToLibrary(library), onClose);\n    };\n\n    handleFollowLibrary = source => {\n        metrics.reportEvent('Navigation', 'Library Panel', 'click', 'view-public-libraries', { ui: { sequence: source } });\n        environment.openFollowLibrary();\n    }\n\n    handleMarketplace = source => {\n        metrics.reportEvent('Navigation', 'Library Panel', 'click', 'view-marketplace', { ui: { sequence: source } });\n        environment.routeToStarterKits();\n    }\n\n    handleBrowseMore = () => {\n        metrics.reportEvent('Library', 'Library List', 'click', 'browse-more-libraries');\n        // Launch Assets Web in iFrame in CCD to browse more libraries to follow.\n        environment.openBrowseMore();\n    }\n\n    get listControls() {\n        return <div role=\"toolbar\" aria-label={translate('DL_ARIA_LIBRARY_LIST_SORT_OPTIONS')}\n            data-test-id=\"controls\" className=\"library-list-controls\">\n            <div data-test-id=\"sortControls\" className=\"library-list-sortControls\">\n                <SortDropdown data-test-id=\"sort-libraries\" mode=\"libraries\" sortOrderControl />\n                <LibraryListFilterButton onFilterChange={ this.onFilterChange } disabledFilters={ this.disabledFilters }/>\n                <Tooltip content={translate('DL_ADD_LIBRARY_TOOLTIP')}>\n                    <button\n                        aria-label={translate('DL_ADD_LIBRARY_TOOLTIP')}\n                        tabIndex=\"0\"\n                        data-test-id=\"add-library\"\n                        className=\"library-list-addButton\"\n                        role=\"button\"\n                        id=\"addLibraryListMenu\"\n                        onClick={ this.handleCreateLibrary }>\n                        <Icon id=\"Add\" height={ 18 } />\n                    </button>\n                </Tooltip>\n            </div>\n        </div>;\n    }\n\n    render() {\n        return (\n            <div data-test-id=\"library-list\" className=\"library-list\">\n                { this.contents }\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport BaseComponentView from '../BaseComponentView';\nimport LibraryListView from 'app/js/components/LibraryListView';\nimport environment from 'app/js/environment';\n\nexport default class LibraryListViewContainer extends BaseComponentView {\n    static get observedAttributes() {\n        return [ 'route' ];\n    }\n\n    constructor() {\n        super(<LibraryListView />, [ 'ccd-list-container' ]);\n    }\n\n    attributeChangedCallback(name, oldValue, newValue) {\n        switch (name) {\n        case 'route':\n            environment.handleRouteChange(newValue);\n            break;\n        default:\n        }\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { computed } from 'mobx';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { translate } from 'app/js/managers/translationManager';\nimport metrics from 'app/js/interface/metrics';\nimport BaseDropdown from 'app/js/components/panel-header/BaseDropdown';\nimport configuration from 'app/js/config/configuration';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\n\n@observer\nexport default class SelectViewTypeDropdown extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        showTitle: PropTypes.bool,\n    }\n\n    @computed get currentSearchType() {\n        return this.context.viewState.getSearchType();\n    }\n\n    @computed get selectedOption() {\n        return this.context.viewState.viewByState;\n    }\n\n    @computed get groupLabel() {\n        return configuration.currentProduct.config.viewBySelectCustomOptionGroup || 'DL_VIEW_BY_GROUP';\n    }\n\n    @computed get typeLabel() {\n        return configuration.currentProduct.config.viewBySelectCustomOptionType || 'DL_VIEW_BY_TYPE';\n    }\n\n    onClick = (viewOption) => {\n        this.context.viewState.setViewByState(viewOption);\n        metrics.reportEvent('Navigation', 'Library Panel', 'click', 'filter-change');\n    };\n\n    @computed get menuData() {\n        return this.context.viewState.getViewByStateOptions().map(viewOption => {\n            return {\n                label: translate(this[`${viewOption}Label`]),\n                onClick: () => this.onClick(viewOption),\n                isSelected: viewOption === this.selectedOption,\n                key: viewOption\n            };\n        });\n    }\n\n    @computed get currentLabel() {\n        return translate(this[`${this.selectedOption}Label`]);\n    }\n\n    @computed get title() {\n        return (\n            <div className=\"panel-select-view-title\" data-test-id=\"panel-select-view-title\">\n                { translate('DL_GROUP_BY_TITLE') }\n            </div>\n        );\n    }\n\n    render() {\n        return <div className=\"panel-select-view-wrapper\">\n            { this.props.showTitle && this.title }\n            <BaseDropdown data={ this.menuData } tooltip={ !configuration.currentProduct.config.disableContentViewTooltips ? translate('DL_VIEW_BY_TOOLTIP') : undefined} className=\"panel-select-view no-outline-dropdown view-type-dropdown\" type=\"select-view\" currentLabel={ this.currentLabel }/>\n        </div>;\n    }\n}\n","import { observer } from 'mobx-react/index';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observable } from 'mobx';\nimport classNames from 'classnames';\nimport environment from 'app/js/environment';\nimport dragManager from 'app/js/managers/dragManager';\nimport { getClosestFocusedAncestor } from 'app/js/utils/DOMUtils';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport configuration from 'app/js/config/configuration';\n\n@observer\nexport default class SectionNavigationItem extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        id: PropTypes.string.isRequired,\n        children: PropTypes.node.isRequired,\n        isReorderable: PropTypes.bool,\n        isElementDropTarget: PropTypes.bool,\n        onClick: PropTypes.func,\n        onContextClick: PropTypes.func,\n        onReorderDrop: PropTypes.func,\n        onElementsDrop: PropTypes.func,\n        requiresFocus: PropTypes.bool,\n        style: PropTypes.object,\n        isCollapsible: PropTypes.bool,\n        expander: PropTypes.node,\n        onToggleCollapse: PropTypes.func,\n        indent: PropTypes.number,\n    };\n\n    static defaultProps = {\n        isCollapsible: false\n    }\n\n    static defaultProps = {\n        onClick: () => {},\n        onContextClick: () => {},\n        onReorderDrop: () => {},\n        onElementsDrop: () => {},\n        indent: 0\n    };\n\n    @observable isDraggedOver = false;\n    @observable isDraggedOverBottom = false;\n    @observable isDraggedOverTop = false;\n\n    get isUngrouped() {\n        return !this.props.id || this.props.id === '*';\n    }\n\n    handleDragStart = e => {\n        if (this.props.isReorderable) {\n            e.dataTransfer.setData(environment.GroupDragId, this.props.id);\n        }\n        if (this.props.isCollapsible && !this.context.viewState.isGroupNavigationCollapsed(this.props.id)) {\n            this.context.viewState.setCollapsedGroupNavigationToDrag(this.props.id);\n            this.props.onToggleCollapse(e);\n        }\n    };\n\n    handleDrop = e => {\n        if (this.props.isReorderable && e.dataTransfer.types.includes(environment.GroupDragId)) {\n            const sourceId = e.dataTransfer.getData(environment.GroupDragId);\n            this.props.onReorderDrop(sourceId, this.isDraggedOverBottom);\n            const didCollapseToDrag = this.context.viewState.collapsedGroupNavigationToDrag(sourceId);\n            if (didCollapseToDrag && this.context.viewState.isGroupNavigationCollapsed(sourceId)) {\n                this.context.viewState.setGroupNavigationCollapsed(sourceId, false);\n                this.context.viewState.clearCollapsedGroupNavigationToDrag();\n            }\n        } else if (this.props.isElementDropTarget && e.dataTransfer.types.includes(environment.ElementDragId)) {\n            const elementInfo = JSON.parse(e.dataTransfer.getData(environment.ElementDragId));\n            this.props.onElementsDrop(elementInfo);\n\n            // Gotta do this to prevent ghosting. This is also in dragManager's handleDrop for the same reason.\n            dragManager.handleDragEnd();\n        }\n\n        this.isDraggedOver = false;\n        this.isDraggedOverBottom = false;\n        this.isDraggedOverTop = false;\n    };\n\n    handleDragOver = e => {\n        e.preventDefault();\n        e.dataTransfer.dropEffect = 'move';\n\n        if (this.ref) {\n            if (this.props.isReorderable && e.dataTransfer.types.includes(environment.GroupDragId)) {\n                const rect = this.ref.getBoundingClientRect();\n                const y = e.y - rect.y;\n                this.isDraggedOverBottom = y > rect.height / 2;\n                this.isDraggedOverTop = !this.isDraggedOverBottom;\n            } else if (this.props.isElementDropTarget && e.dataTransfer.types.includes(environment.ElementDragId)) {\n                this.isDraggedOver = true;\n            }\n        }\n    };\n\n    handleDragLeave = () => {\n        this.isDraggedOver = false;\n        this.isDraggedOverBottom = false;\n        this.isDraggedOverTop = false;\n    };\n\n    handleKeyDown = (event) => {\n        event.stopPropagation();\n        if (event.key === 'Enter') {\n            this.props.onToggleCollapse(event);\n        }\n    }\n\n    get expanderIcon() {\n        if (this.props.expander) {\n            return this.props.expander;\n        }\n    }\n\n    render() {\n        const {\n            id,\n            isReorderable,\n            isElementDropTarget,\n            onClick: onClickProp,\n            onContextClick,\n            children,\n            requiresFocus,\n        } = this.props;\n\n        const onClick = (e) => {\n            if (requiresFocus) {\n                const node = getClosestFocusedAncestor(e);\n                if (node && node.tagName !== 'INPUT') {\n                    node.blur();\n                }\n            }\n            onClickProp(e);\n        };\n\n        const dataTestId = `section-navigation-${ id }`;\n        const classes = classNames('section-navigation-nav-item', {\n            'is-editing': this.context.viewManager.renamingItem && this.context.viewManager.renamingItem.id === id,\n            'is-dragged-over-top': this.isDraggedOverTop,\n            'is-dragged-over-bottom': this.isDraggedOverBottom,\n        });\n\n        const wrapperClasses = classNames('section-navigation-nav-item-wrapper', {\n            'is-selected': this.context.viewState.currentSection === id,\n            'is-dragged-over': this.isDraggedOver,\n        });\n        // We push each item over by the prescribed indent amount, and then an additional 16px to account for padding\n        const adjustLeft = this.props.indent + (2 * configuration.currentProduct.config.sectionNavIndent);\n\n        const dragProps = {\n            onDragStart: this.handleDragStart,\n            onDragOver: this.handleDragOver,\n            onDragEnter: e => e.preventDefault(),\n            onDragLeave: this.handleDragLeave,\n            onDrop: this.handleDrop,\n            draggable: isReorderable,\n        };\n\n        const focusAttributes = requiresFocus ? {\n            tabIndex: '0',\n            onKeyPress: e => (e.key === 'Enter') ? onClick(e) : null\n        } : {};\n\n        return (\n            <div data-test-id=\"section-navigation-nav-item-wrapper\" className={ wrapperClasses } style={{ paddingLeft: `${adjustLeft}px` }}>\n                { this.expanderIcon }\n                <div\n                    ref={ref => (this.ref = ref)}\n                    { ...((isReorderable || isElementDropTarget) ? dragProps : {})}\n                    className={ classes }\n                    key={ dataTestId }\n                    data-test-id={ dataTestId }\n                    onClick={ onClick }\n                    onKeyDown = { this.handleKeyDown }\n                    { ...focusAttributes }\n                    { ...environment.contextMenuEventListeners(onContextClick) }\n                    style={{ width: `calc(100% - ${this.props.indent}px)` }}\n                >\n                    <div className=\"section-navigation-nav-item-text\">\n                        { children }\n                    </div>\n                </div>\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { translate } from 'app/js/managers/translationManager';\nimport EditableName from './EditableName';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport { Group } from '@cclibraries/cc-libraries-js';\nimport DocumentGroup from 'app/applications/SPRK/js/models/documentAssets/DocumentGroup';\n\n@observer\nexport default class EditableGroupName extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        group: PropTypes.oneOfType([ PropTypes.instanceOf(Group), PropTypes.instanceOf(DocumentGroup) ]),\n        placeholder: PropTypes.string,\n        onEditStart: PropTypes.func,\n        onEditFinish: PropTypes.func,\n        onEditCancel: PropTypes.func,\n        onOverflowChange: PropTypes.func,\n    };\n\n    render() {\n        return <EditableName\n            item={ this.props.group }\n            placeholder={ this.props.placeholder || translate('DL_EDIT_GROUP_NAME_PLACEHOLDER') }\n            containerClassName=\"panel-group-container-text\"\n            inputClassName=\"panel-group-container-input\"\n            onEditStart={ this.props.onEditStart }\n            onEditFinish={ this.props.onEditFinish }\n            onEditCancel={ this.props.onEditCancel }\n            onOverflowChange={ this.props.onOverflowChange }\n            isReadOnly={ !this.context.viewState.isLibraryWritable(this.props.group.library) }\n            isEditDisabled={ !this.context.viewState.isLibraryWritable(this.props.group.library) }\n        />;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { computed, observable } from 'mobx';\nimport { translate } from 'app/js/managers/translationManager';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport SectionNavigationItem from './SectionNavigationItem';\nimport EditableGroupName from 'app/js/components/editable-names/EditableGroupName';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport environment from 'app/js/environment';\nimport { getContextMenu } from 'app/js/menus/groupContextMenu';\nimport metrics from 'app/js/interface/metrics';\nimport { reorderGroup, addElementsToGroup } from 'app/js/utils/libraryUtils';\nimport Tooltip from 'app/js/components/Tooltip';\nimport { getAllDescendantGroups } from 'app/js/utils/groupUtils';\nimport Icon from 'app/js/components/Icon';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\n\nexport class Expander extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        group: PropTypes.object.isRequired,\n        isCollapsed: PropTypes.bool,\n        onToggleCollapse: PropTypes.func\n    }\n\n    render() {\n        const hasChildren = this.props.group.children && this.props.group.children.length > 0;\n        // root, childless parent\n        if (!hasChildren && !this.props.group.parent) {\n            return <div/>;\n        } else if (!hasChildren) {// leaf node gets a \"phantom\" chevron. ie placeholder\n            return <div className=\"section-expander-icon\" />;\n        } else {\n            return <div data-test-id={`section-expander-${this.props.group.id}`} className=\"section-expander-icon\" onClick={ this.props.onToggleCollapse }>\n                <Icon id={ this.props.isCollapsed ? 'ChevronRightMedium' : 'ChevronDownMedium' } height={ 10 }/>\n            </div>;\n        }\n    }\n}\n\n@observer\nexport default class SectionNavigationGroupItem extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    @observable hasNameTooltip = false;\n\n    static propTypes = {\n        group: PropTypes.object.isRequired,\n        indent: PropTypes.number\n    }\n\n    static defaultProps = {\n        indent: 0\n    }\n\n    get group() {\n        return this.props.group;\n    }\n\n    get isRenamingMode() {\n        return this.context.viewManager.renamingItem && this.context.viewManager.renamingItem.id === this.group.id;\n    }\n\n    get isCollapsed() {\n        return this.context.viewState.isGroupNavigationCollapsed(this.props.group.id);\n    }\n\n    @computed get groupsTree() {\n        return elementConfiguration.groupElementsByCustomGroup(\n            this.context.libraryManager.currentLibrary.elements,\n            this.context.libraryManager.currentLibrary.getGroups(),\n            0,\n            this.context.viewState.elementSortState\n        );\n    }\n\n    // flat list of group items in order\n    get orderedGroups() {\n        return this.context.viewState.groupsInViewOrder;\n    }\n\n    onGroupClick = (group) => {\n        const firstElemInGroup = this.groupsTree.find(branch => branch.item === group)?.children[0];\n        if (firstElemInGroup) {\n            elementSelectionState.setItemPendingScroll(firstElemInGroup.item);\n        } else {\n            elementSelectionState.revealGroup(group);\n        }\n    };\n\n    onGroupContextClick = (mouseEvent, group) => {\n        if (environment.setContextMenu && group.id !== '*') {\n            mouseEvent.preventDefault();\n            mouseEvent.stopPropagation();\n            const menuItems = getContextMenu(group, 'Right Click');\n            menuItems.map(item => item.label = translate(item.label));\n            // Note: Consider calling MenuManager.setContextMenu() instead when there are submenus (Adds unique ids for submenu items)\n            environment.setContextMenu(menuItems);\n        }\n    };\n\n    handleReorderDrop = (destination, sourceId, isAfter = false) => {\n        if (sourceId === destination.id) {\n            return;\n        }\n        // find the ordered groups that are actually visible\n        const collapsedGroups = this.orderedGroups.filter(group => this.context.viewState.isGroupNavigationCollapsed(group.id));\n        const hiddenChildren = [];\n        collapsedGroups.forEach(group => hiddenChildren.push(...getAllDescendantGroups(group, false)));\n        const visibleOrderedGroups = this.orderedGroups.filter(group => !hiddenChildren.includes(group));\n\n        const source = destination.library.getGroupById(sourceId);\n        const destinationIndex = visibleOrderedGroups.findIndex(group => group.id === destination.id);\n        metrics.setExtraEventMetrics('updateGroup', { content: { category: 'List' } });\n\n        let afterGroup = isAfter ? destination : visibleOrderedGroups[destinationIndex - 1];\n        const beforeGroup = isAfter ? visibleOrderedGroups[destinationIndex + 1] : destination;\n        const afterGroupCollapsed = afterGroup && this.context.viewState.isGroupNavigationCollapsed(afterGroup.id);\n\n        // Reorder to the top of a subgroup\n        if ((source.parent === afterGroup) && (beforeGroup && beforeGroup.parent === afterGroup) && !afterGroupCollapsed) {\n            afterGroup = undefined;\n        }\n\n        const isReorderingRootGroups = !source.parent\n                                        && afterGroup && !afterGroup.parent\n                                        && beforeGroup && !beforeGroup.parent;\n\n        // Reorder out of a subgroup\n        if (!isReorderingRootGroups && (afterGroup && afterGroup.parent === source.parent) && (beforeGroup !== source.parent) && !afterGroupCollapsed) {\n            afterGroup = undefined;\n        }\n\n        reorderGroup(\n            source,\n            afterGroup,\n            beforeGroup\n        );\n\n        // Scroll to find the the group in its new position.\n        elementSelectionState.setItemPendingScroll(source);\n    };\n\n    handleElementsDrop = (destination, elementInfo) => {\n        const elements = elementInfo.elementIds.map(elementId => this.context.libraryManager.currentLibrary.getElementById(elementId));\n        const group = destination.library ? destination : undefined;\n        const reorderInSameGroup = group && elements.every(element => !!element.getOrderInGroup(group));\n        const eventSubtype = group ? (reorderInSameGroup ? 'order' : 'add-to-group') : 'ungroup';\n        metrics.reportEvent('Element Operations', 'Element', 'click', eventSubtype, {\n            event: { value: 'agg', count: elements.length },\n            content: { category: 'Drag Drop' }\n        }, this.context.libraryManager.currentLibrary);\n        metrics.setExtraEventMetrics('updateElement', { subtype: eventSubtype, content: { category: 'Drag Drop List' } });\n        addElementsToGroup(elements, group, null, undefined, 'Drag Drop List');\n    };\n\n    handleOverflowChange = (hasOverflow) => {\n        this.hasNameTooltip = hasOverflow;\n    };\n\n    onToggleCollapse = (mouseEvent) => {\n        mouseEvent.stopPropagation();\n        this.context.viewState.setGroupNavigationCollapsed(this.group.id, !this.isCollapsed);\n    }\n\n    render() {\n        return (\n            <SectionNavigationItem\n                isReorderable={ this.context.viewState.isLibraryWritable(this.context.libraryManager.currentLibrary)\n                    && !!this.group.library && this.context.viewManager.renamingItem !== this.group && this.context.viewState.elementSortState === 'order' }\n                isElementDropTarget={ this.context.viewState.isLibraryWritable(this.context.libraryManager.currentLibrary) }\n                key={ this.group.id }\n                id={ this.group.id }\n                onClick={ () => this.onGroupClick(this.group) }\n                onContextClick={ (e) => this.onGroupContextClick(e, this.group) }\n                requiresFocus={ true }\n                onReorderDrop={ (sourceId, isAfter) => this.handleReorderDrop(this.group, sourceId, isAfter) }\n                onElementsDrop={ (elements) => this.handleElementsDrop(this.group, elements) }\n                isCollapsible={ this.group.children && this.group.children.length > 0 }\n                onToggleCollapse={this.onToggleCollapse}\n                expander={ <Expander group={this.group} onToggleCollapse={this.onToggleCollapse} isCollapsed={this.isCollapsed} />}\n                indent={this.props.indent}\n            >\n                <Tooltip className=\"group-name-tooltip\" placement=\"top\" content={ this.group.name } disable={ !this.hasNameTooltip || !!this.isRenamingMode }>\n                    { this.group.name && <EditableGroupName onOverflowChange={ this.handleOverflowChange } group={ this.group } key={ this.group.id } placeholder={ translate('DL_EDIT_GROUP_NAME_PLACEHOLDER_ACCC') } /> || translate('DL_GROUP_UNGROUPED') }\n                </Tooltip>\n            </SectionNavigationItem>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport SelectViewTypeDropdown from 'app/js/components/panel-header/SelectViewTypeDropdown';\nimport { computed, observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport classNames from 'classnames';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport { createNewGroupWithElements } from 'app/js/utils/libraryUtils';\nimport React from 'react';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport { translate } from 'app/js/managers/translationManager';\nimport viewState from 'app/js/state/viewState';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport CreateGroupButton from 'app/js/components/panel-footer/CreateGroupButton';\nimport SectionNavigationItem from './SectionNavigationItem';\nimport metrics from 'app/js/interface/metrics';\nimport configuration from 'app/js/config/configuration';\nimport { getLibraryCustomGroupsTree } from 'app/js/utils/groupUtils';\nimport SectionNavigationGroupItem from './SectionNavigationGroupItem';\nimport appState from 'app/js/appState';\n\n@observer\nexport default class SectionNavigation extends React.Component {\n    MIN_WIDTH = 208;\n    _MAX_WIDTH = this.MIN_WIDTH * 3; // use this.MAX_WIDTH\n    RESIZE_THRESHOLD = 25;\n\n    @observable _width = this.MIN_WIDTH;\n\n    setCurrentFirstSection() {\n        // To reveal a group, we pass the group object. To reveal a type, we pass the mimetype string.\n        const currentSection = viewState.viewByState === 'group' ? this.orderedGroups[0] : this.typedElements[0] && this.typedElements[0].type;\n        elementSelectionState.revealGroup(currentSection, true);\n    }\n\n    componentDidUpdate() {\n        if (!viewState.currentSection) {\n            this.setCurrentFirstSection();\n        }\n    }\n\n    componentDidMount() {\n        if (!viewState.currentSection) {\n            this.setCurrentFirstSection();\n        }\n        window.addEventListener('resize', this.adjustNavWidth);\n    }\n\n    componentWillUnmount() {\n        window.removeEventListener('resize', this.adjustNavWidth);\n    }\n\n    @computed get typedElements() {\n        return elementConfiguration.groupElementsByType(libraryManager.currentLibrary.elements, viewState.elementSortState).filter(typeGroup => typeGroup.children.length > 0);\n    }\n\n    @computed get typeList() {\n        const onTypeClick = (type) => {\n            const firstElemInType = this.typedElements.find(section => section.type === type).children[0];\n            // We are guaranteed to have an element here, bc in CCD only types with elements are displayed\n            elementSelectionState.setItemPendingScroll(firstElemInType);\n        };\n\n        return this.typedElements.map(group => (\n            <SectionNavigationItem key={ group.type } id={ group.type } requiresFocus={ true } onClick={ () => onTypeClick(group.type) }>\n                { translate(elementConfiguration.getTypeName(group.type)) }\n            </SectionNavigationItem>\n        ));\n    }\n\n    // flat list of group items in order\n    get orderedGroups() {\n        return viewState.groupsInViewOrder;\n    }\n\n    @computed get tree() {\n        const sortBy = viewState.elementSortState;\n        return getLibraryCustomGroupsTree(libraryManager.currentLibrary, { sortBy });\n    }\n\n    @computed get groupedSectionsLevels() {\n        const { branches } = this.tree;\n        const levels = Math.max(...Object.values(branches).map(branch => branch.item.isGroup ? branch.depth : 0));\n        // Tree depth starts at zero so offset by one.\n        return levels + 1;\n    }\n\n    @computed get subgroupIndent() {\n        const width = this._width * configuration.SUBGROUP_INDENT_PERCENT;\n        const levels = this.groupedSectionsLevels;\n        return Math.min(configuration.MAX_SUBGROUP_INDENT, Math.ceil(width / levels));\n    }\n\n    @computed get groupList() {\n        if (!libraryManager.currentLibrary.elements.length && this.orderedGroups.length <= 1) {\n            return;\n        }\n\n        const indent = this.subgroupIndent;\n        const items = [];\n        const pushGroupSection = (section, x) => {\n            const group = section.item;\n            if (group === configuration.UNGROUPED_GROUP && !section.children.length) {\n                return;\n            }\n            items.push(<SectionNavigationGroupItem key={group.id} group={group} indent={x} />);\n            if (viewState.isGroupNavigationCollapsed(group.id)) {\n                return;\n            }\n            if (section.children) {\n                section.children.forEach((child) => {\n                    const { item } = child;\n                    if (item.isGroup) {\n                        pushGroupSection(child, x + indent);\n                    }\n                });\n            }\n        };\n\n        const { root } = this.tree;\n        root.children.forEach(group => pushGroupSection(group, 0));\n        return items;\n    }\n\n    get list() {\n        return viewState.viewByState === 'type' ? this.typeList : this.groupList;\n    }\n\n    get disableGroup() {\n        return !viewState.isLibraryWritable(libraryManager.currentLibrary)\n        || (libraryManager.currentLibrary.documentType && libraryManager.currentLibrary.elementCount === 0);\n    }\n\n    get createGroupButton() {\n        if (viewState.viewByState === 'type') {\n            return;\n        }\n\n        const handleElementsDrop = (elementInfo) => {\n            const elements = elementInfo.elementIds.map(elementId => libraryManager.currentLibrary.getElementById(elementId));\n            metrics.reportEvent('Element Operations', 'Element', 'click', 'add-to-group', {\n                event: { value: 'agg', count: elements.length },\n                content: { category: 'Drag Drop Group Button' }\n            }, libraryManager.currentLibrary);\n            metrics.setExtraEventMetrics('updateElement', { subtype: 'add-to-group', content: { category: 'Drag Drop Group Button' } });\n            metrics.setExtraEventMetrics('createGroup', { content: { category: 'Drag Drop Group Button' } });\n            createNewGroupWithElements(elements, 'Drag Drop Group Button');\n        };\n\n        return (\n            <SectionNavigationItem\n                isReorderable={ false }\n                isElementDropTarget\n                key=\"newGroupButton\"\n                id=\"newGroupButton\"\n                requiresFocus={ false }\n                onElementsDrop={ (elements) => handleElementsDrop(elements) }\n            >\n                <div className=\"section-navigation-new-group\"><CreateGroupButton disableEmptySubgroups={ true } showLabel={ true } disabled={ this.disableGroup }/></div>\n            </SectionNavigationItem>);\n    }\n\n    get navigation() {\n        return <div className=\"section-navigation-nav-list\">\n            <div className=\"section-navigation-nav-list-contents\" >\n                { this.list }\n            </div>\n        </div>;\n    }\n\n    handleClick = () => {\n        appState.panel.viewState.clearAllSelections();\n    }\n\n    get MAX_WIDTH() {\n        // The max width is either half of the window, or 3 times the min width, whichever is smaller\n        const halfWindow = (window.innerWidth / 2) - (configuration.currentProduct.config.windowGutterPaddingWidth * 2);\n        return Math.min(halfWindow, this._MAX_WIDTH);\n    }\n\n    // Adjust the width of the section navigation component\n    // Depending on window size or mouse position\n    adjustNavWidth = () => {\n        this._width = Math.min(Math.max(this._width, this.MIN_WIDTH), this.MAX_WIDTH);\n    }\n\n    mouseDragHandler = (moveEvent) => {\n        moveEvent.preventDefault();\n        if (Math.abs(this._xOffset - moveEvent.pageX) > this.RESIZE_THRESHOLD) {\n            const primaryButtonPressed = moveEvent.buttons === 1;\n            if (!primaryButtonPressed) {\n                this.adjustNavWidth();\n                window.removeEventListener('mousemove', this.mouseDragHandler);\n                return;\n            }\n            const desiredWidth = ((this._xOffset - moveEvent.pageX) * -1 + this._startingPanelWidth);\n            if (desiredWidth <= this.MAX_WIDTH && desiredWidth >= this.MIN_WIDTH) {\n                this._width = desiredWidth;\n            }\n        }\n    }\n\n    handleResizeStart = (event) => {\n        event.preventDefault();\n        this._startingPanelWidth = this._width;\n        this._xOffset = event.pageX;\n        window.addEventListener('mousemove', this.mouseDragHandler);\n    }\n\n    render() {\n        return (\n            <div onClick={this.handleClick} className={ classNames('ccd-view-panel', { 'is-open': viewState.showNavigation }) } style={ { width: this._width } } data-test-id=\"ccd-view-panel\">\n                <div className=\"ccd-view-panel-column\">\n                    <SelectViewTypeDropdown showTitle />\n                    <div className=\"ccd-section-nav-divider\"/>\n                    { this.createGroupButton }\n                    <div className=\"ccd-section-nav-list-wrapper\">\n                        { this.navigation }\n                    </div>\n                </div>\n                <div className=\"ccd-side-nav-handle\" onMouseDown={this.handleResizeStart}/>\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { computed, reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport classNames from 'classnames';\n\nimport LibraryView from 'app/js/components/LibraryView';\nimport NoLibrariesView from 'app/js/components/NoLibrariesView';\nimport SectionNavigation from 'app/js/components/ccd/SectionNavigation';\nimport DebugHUD from 'app/js/components/debug/DebugHUD';\nimport { translate } from 'app/js/managers/translationManager';\nimport environment from 'app/js/environment';\nimport metrics from 'app/js/interface/metrics';\nimport configuration from 'app/js/config/configuration';\nimport DialogContainerView from 'app/js/components/DialogContainerView';\nimport featureFlags from 'app/js/config/featureFlags';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport appState from 'app/js/appState';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport { showCCDTeamsOneUpOnboarding } from 'app/js/utils/onboardingUtils';\nimport GroupPathView from '../path-view/GroupPathView';\n\nfunction setFooter() {\n    // Should set sort if current library doesnt exist or if current library has elements\n    // Should set zoom if viewed in grid view and if current library doesnt exist or if current library has elements\n    const showFooterActions = !appState.panel.libraryManager.currentLibrary || appState.panel.libraryManager.currentLibrary.elements.length > 0;\n    const isGridView = appState.panel.viewState.viewState === 'grid';\n    const typeSortOptions = [ { label: translate('DL_SORT_NAME'), key: 'name' }, { label: translate('DL_SORT_DATE'), key: 'modified' } ];\n    const groupSortOption = [ { label: translate('DL_SEARCH_SORT_BY_OPTION_ORDER'), key: 'order' }, { label: translate('DL_SORT_NAME'), key: 'name' } ];\n    const sortValue = appState.panel.viewState.viewByState === 'type' ? typeSortOptions : groupSortOption;\n    environment.setFooter({\n        navigation: {\n            value: [ true, false ],\n            selected: appState.panel.viewState.showNavigation,\n            onChange: (value) => {\n                appState.panel.viewState.setShowNavigation(value);\n                setFooter();\n            }\n        },\n        zoom: (showFooterActions && isGridView) && {\n            value: [ configuration.GRID_TYPE_SMALL, configuration.GRID_TYPE_MEDIUM, configuration.GRID_TYPE_LARGE ],\n            selected: appState.panel.viewState.gridZoomFactor,\n            onChange: (zoomFactor) => {\n                appState.panel.viewState.setGridZoomFactor(zoomFactor);\n                setFooter();\n            }\n        },\n        sort: showFooterActions && {\n            value: sortValue,\n            selected: appState.panel.viewState.elementSortState,\n            reverse: appState.panel.viewState.elementSortDescendingState,\n            onChange: (value, isDescending) => {\n                appState.panel.viewState.setElementSortState(value);\n                appState.panel.viewState.setElementSortDescendingState(isDescending);\n                metrics.reportEvent('Navigation', 'Library Panel', 'click', 'sort-change', { content: { type: 'element' } });\n                setFooter();\n            },\n            supportReverseOrder: false,\n        }\n    });\n}\n\n@observer\nexport default class CCDLibraryContentsView extends React.Component {\n\n    static contextType = LibrariesContext;\n    constructor(props, context) {\n        super(props);\n        if (environment.setHeader) {\n            this.disposeHeaderChangeReaction = reaction(() => context.libraryManager.isSharingEnabled, () => environment.setHeader());\n        }\n\n        if (environment.setFooter) {\n            this.disposeViewStateReaction = reaction(() => context.viewState.viewByState, () => setFooter(), { fireImmediately: true });\n            this.disposeLibraryElementsReaction = reaction(() => context.libraryManager.currentLibrary && context.libraryManager.currentLibrary.elements.length, () => setFooter(), { fireImmediately: true });\n        }\n    }\n\n    componentDidMount() {\n        showCCDTeamsOneUpOnboarding();\n    }\n\n    componentDidUpdate() {\n        const section = this.context.viewState.currentSection;\n        if (!this.library || (this.context.viewState.viewByState === 'type') || (section && section === '*') || !section) {\n            return;\n        }\n        // If currentSection is a group, verify that groups still exists, and if it doesn't set a new currentSection\n        // This happens if a published library is updated, or if the current group is deleted in another app for example\n        const currentGroup = this.library.getGroupById(section);\n        if (!currentGroup) {\n            const inOrder = this.context.viewState.groupsInViewOrder;\n            inOrder.length && this.context.viewState.setCurrentSection(inOrder[0].id);\n        }\n    }\n\n    componentWillUnmount() {\n        if (this.disposeViewStateReaction) {\n            this.disposeViewStateReaction();\n        }\n\n        if (this.disposeLibraryElementsReaction) {\n            this.disposeLibraryElementsReaction();\n        }\n\n        if (this.disposeHeaderChangeReaction) {\n            this.disposeHeaderChangeReaction();\n        }\n    }\n\n    get library() {\n        return this.context.libraryManager.currentLibrary;\n    }\n\n    @computed get viewPanel() {\n        if (!this.library || !this.context.viewState.showNavigation) {\n            return;\n        }\n        return <SectionNavigation/>;\n    }\n\n    @computed get stickyHeader() {\n        const section = this.context.viewState.currentSection;\n        const isEmpty = this.library && (this.library.elements.length === 0 && this.library.getGroups().length === 0)\n            || (this.context.viewState.viewByState === 'type' && this.library.elements.length === 0);\n        const onlyHasUngrouped = this.context.viewState.viewByState === 'group' && this.library.getGroups().length === 0;\n        if (!section || !this.library || isEmpty || onlyHasUngrouped) {\n            return;\n        }\n        const getGroupHeader = () => {\n            const currentGroup = this.library.getGroupById(section);\n            // This situation will happen only when a group is moved to another library\n            // Wait for the debounce to define a new section before displaying the sticky header\n            if (!currentGroup) {\n                return;\n            }\n            return <GroupPathView group={currentGroup} disableEditing={true} />;\n        };\n        const getTypeHeader = () => {\n            const type = section === '*' ? translate('DL_GROUP_UNGROUPED') : translate(elementConfiguration.getTypeName(section));\n            return <span className=\"panel-group-header root last-of-type\">{type}</span>;\n        };\n        const header = (this.context.viewState.viewByState === 'type') || (section === '*') ? getTypeHeader() : getGroupHeader();\n\n        return (\n            <div data-test-id=\"ccd-sticky-header\" className=\"ccd-sticky-header\">\n                {header}\n            </div>\n        );\n    }\n\n    @computed get libraryContents() {\n        if (this.library) {\n            return (<>\n                { this.stickyHeader }\n                <div className=\"ccd-contents-container\">\n                    <LibraryView/>\n                </div>\n            </>\n            );\n        }\n\n        return <NoLibrariesView className=\"panel-nolibs-container\"/>;\n    }\n\n    @computed get toolkitUnlock() {\n        const onClick = () => {\n            this.context.viewState.unlock(this.library);\n            if (environment.setHeader) {\n                environment.setHeader();\n            }\n        };\n        //TODO: update these strings with final string values once we have them\n        if (this.library && this.library.toolkitId && this.context.viewState.isLocked(this.library)) {\n            const toolkitType = configuration.TOOLKIT_TYPES.includes(this.library.toolkitId) ? this.library.toolkitId.toUpperCase() : 'GENERIC';\n            return <div className=\"toolkit-unlocked-bar\" data-test-id=\"toolkit-unlocked-bar\">\n                <div className=\"toolkit-unlocked-bar-text\">{ translate(`DL_${toolkitType}_TOOLKIT_UNLOCK_TOAST_MESSAGE`) }</div>\n                <button className=\"toolkit-unlocked-bar-button\" data-test-id=\"toolkit-unlocked-bar-button\" onClick={ onClick }>\n                    <span className=\"toolkit-unlocked-bar-button-text\">\n                        { translate('DL_MY_TOOLKIT_UNLOCK_TOAST_BUTTON') }\n                    </span>\n                </button>\n            </div>;\n        }\n    }\n\n    render() {\n        const contentsClasses = classNames('panel-contents-wrapper', `panel-contents-zoom-${ this.context.viewState.gridZoomFactor }`);\n        return <React.Fragment>\n            {featureFlags.get('showToolkitLibraries') && this.toolkitUnlock}\n            <div className=\"ccd-contents-wrapper\">\n                {this.viewPanel}\n                <div className={ contentsClasses }>\n                    {this.libraryContents}\n                </div>\n                <DialogContainerView/>\n                <DebugHUD />\n            </div>\n        </React.Fragment>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport CCDLibraryContentsView from 'app/js/components/ccd/CCDLibraryContentsView';\nimport BaseComponentView from '../BaseComponentView';\nimport environment from 'app/js/environment';\nimport appState from 'app/js/appState';\n\nexport default class LibraryContentsView extends BaseComponentView {\n    static get observedAttributes() {\n        return [ 'route' ];\n    }\n\n    constructor() {\n        super(<CCDLibraryContentsView />, [ 'ccd-panel-container' ]);\n    }\n\n    connectedCallback() {\n        super.connectedCallback();\n        environment.isContentViewMounted = true;\n    }\n\n    disconnectedCallback() {\n        super.disconnectedCallback();\n        environment.isContentViewMounted = false;\n        appState.panel.viewState.showRootView();\n    }\n\n    attributeChangedCallback(name, oldValue, newValue) {\n        switch (name) {\n        case 'route':\n            environment.handleRouteChange(newValue);\n            break;\n        default:\n        }\n    }\n}\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2020 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\nimport React from 'react';\nimport BaseView from '../BaseView';\nimport { handleClose } from 'app/applications/ACCC/js/utils';\nimport dialogManager from 'app/js/managers/dialogManager';\nimport viewState from 'app/js/state/viewState';\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\n\n@observer\nclass LibraryCustomDialog extends React.Component {\n    static propTypes = {\n        onClose: PropTypes.func.isRequired\n    }\n\n    render() {\n        const dialog = dialogManager.dialog;\n\n        if (!dialog) {\n            this.props.onClose();\n            return null;\n        }\n\n        return React.cloneElement(dialog, {\n            close: () => {\n                dialog.props.close();\n                this.props.onClose();\n            }\n        });\n    }\n}\n\nexport default class LibraryCustomDialogView extends BaseView {\n    constructor() {\n        super(\n            <LibraryCustomDialog onClose={ () => handleClose(this) }/>,\n            viewState.getRemovePadding() ? [ 'ccd-dialog-container-no-margin' ] : [],\n            viewState.getRemovePadding() ? [ 'ccd-dialog-body-no-margin' ] : []\n        );\n    }\n}\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2020 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\nimport environment from 'app/js/environment';\nimport themeManager from 'app/js/managers/themeManager';\n\n/**\n    Common utilities for CCD\n**/\n\n/**\n * Handles closing custom dialogs in CCD, and cleans up theme manager\n * @param {Object} webComponent is the node where our custom dialog is mounted, such as library-delete-dialog-view\n */\nexport function handleClose(webComponent) {\n    environment.hideDialog();\n    themeManager.removeRoot(webComponent.shadowDOM);\n}\n\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport BaseView from '../BaseView';\nimport InfoPanelView from 'app/js/components/InfoPanelView';\nimport environment from 'app/js/environment';\n\nexport default class LibraryInfoPanelView extends BaseView {\n    constructor() {\n        super(<InfoPanelView />, [ 'ccd-info-container' ]);\n    }\n\n    connectedCallback() {\n        super.connectedCallback();\n        environment.isLibrariesViewMounted = true;\n    }\n\n    disconnectedCallback() {\n        super.disconnectedCallback();\n        environment.isLibrariesViewMounted = false;\n    }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"libraryMosaicHeader\":\"iQ3\",\"libraryMosaicHeaderContainer\":\"Pve\",\"libraryMosaicTitle\":\"J9H\",\"libraryMosaicHeaderControls\":\"pdT\",\"libraryMosaicHeaderButtonContainer\":\"MNG\",\"libraryMosaicHeaderNewLibrary\":\"hN8\",\"libraryMosaicHeaderButtonIcon\":\"p9k\",\"libraryMosaicHeaderSubdivider\":\"PR-\",\"libraryMosaicToggleButtonContainer\":\"Ct7\",\"libraryMosaicToggleButton\":\"PqJ\",\"newButton\":\"y1R\",\"librarySearchFilter\":\"n8Y\",\"libraryMosaicHeaderSearch\":\"gLI\",\"newDropdown\":\"dfF\"};","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport Heading from '@torq-native/react-spectrum/Heading';\nimport Button from '@torq-native/react-spectrum/Button';\nimport Search from '@torq-native/react-spectrum/Search';\nimport BaseDropdown from 'app/js/components/panel-header/BaseDropdown';\nimport classNames from 'classnames';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport { translate } from 'app/js/managers/translationManager';\nimport configuration from 'app/js/config/configuration';\nimport Icon from 'app/js/components/Icon';\nimport environment from 'app/js/environment';\nimport metrics from 'app/js/interface/metrics';\nimport Tooltip from 'app/js/components/Tooltip';\nimport LibraryListFilterButton from 'app/js/components/LibraryListFilterButton';\nimport SortDropdown from 'app/js/components/panel-header/SortDropdown';\nimport { handleContextMenuLibraryClick } from 'app/js/utils/libraryUtils';\nimport * as ErrorUtils from 'app/js/utils/errorUtils';\nimport { observer } from 'mobx-react';\nimport { computed } from 'mobx';\nimport PropTypes from 'prop-types';\nimport OverlayState from 'app/js/components/utils/OverlayState';\n\nimport styles from './index.scss';\n\nconst GRID_VIEW = configuration.LIBRARIES_VIEW_STATES.GRID;\nconst LIST_VIEW = configuration.LIBRARIES_VIEW_STATES.LIST;\n\n@observer\nexport default class LibrariesExpandedViewHeader extends React.Component {\n    static contextType = LibrariesContext\n\n    static defaultProps = {\n        variant: 'default'\n    }\n\n    static propTypes = {\n        variant: PropTypes.oneOf([ 'assets-web', 'default' ])\n    }\n\n    overlayState = new OverlayState({\n        ignoreScrollEvents: true,\n        ignoreFocus: true\n    })\n\n    onSortChange = () => {\n        metrics.reportEvent(\n            'Navigation',\n            'Library Panel',\n            'click',\n            'sort-change',\n            {\n                content: { type: 'library' }\n            }\n        );\n    }\n\n    onClickBrowseLibraries = () => {\n        if (environment.openBrowseMore) {\n            metrics.reportEvent(\n                'Navigation',\n                'Navigation',\n                'click',\n                'browse-all-libraries'\n            );\n            environment.openBrowseMore();\n        }\n    }\n\n    handleCreateLibrary = () =>\n        this.context.libraryActions.create((library) =>\n            environment.navigateToLibrary(library)\n        )\n\n    @computed get syncStatus() {\n        return this.context.libraryManager.syncStatus;\n    }\n\n    getHeaderButton({\n        id,\n        label,\n        className,\n        onClick,\n        icon,\n        disabled,\n        tooltip\n    }) {\n        return (\n            <Tooltip\n                content={tooltip}\n                className={styles.libraryMosaicHeaderButtonContainer}>\n                <Button\n                    data-test-id={`library-mosaic-header-${id}`}\n                    label={label}\n                    variant=\"action\"\n                    className={classNames(\n                        className,\n                        styles.libraryMosaicHeaderButton\n                    )}\n                    disabled={disabled}\n                    icon={icon}\n                    onClick={onClick}\n                />\n            </Tooltip>\n        );\n    }\n\n    get disableActions() {\n        return (\n            !this.context.libraryManager.libraries.length\n            && this.syncStatus.state === 'error'\n            && !ErrorUtils.isGenericLoadingError(this.syncStatus)\n        );\n    }\n\n    get browseAllButton() {\n        const isDisabled\n            = !this.context.libraryManager.isOnline || this.disableActions;\n        return this.getHeaderButton({\n            id: isDisabled ? 'browse-all-offline' : 'browse-all',\n            className: styles.libraryMosaicHeaderBrowseAll,\n            label: translate('DL_MORE_LIBRARY_BROWSE_ALL'),\n            onClick: this.onClickBrowseLibraries,\n            disabled: isDisabled,\n            icon: (\n                <Icon\n                    id=\"Browse\"\n                    height={14}\n                    width={15}\n                    className={styles.libraryMosaicHeaderButtonIcon}\n                />\n            ),\n            tooltip: isDisabled\n                ? translate('DL_MORE_LIBRARY_BROWSE_ALL_OFFLINE')\n                : translate('DL_MORE_LIBRARY_BROWSE_ALL')\n        });\n    }\n\n    get newLibraryButton() {\n        return this.getHeaderButton({\n            id: 'new-library',\n            label: translate('DL_NEW_LIBRARY'),\n            className: styles.libraryMosaicHeaderNewLibrary,\n            onClick: this.handleCreateLibrary,\n            icon: (\n                <Icon\n                    id=\"AddCircle\"\n                    height={14}\n                    className={styles.libraryMosaicHeaderButtonIcon}\n                />\n            ),\n            tooltip: translate('DL_NEW_LIBRARY'),\n            disabled: this.disableActions\n        });\n    }\n\n    onToggleViewClick = () => {\n        this.context.viewState.setLibrariesViewState(\n            this.context.viewState.librariesViewState === LIST_VIEW\n                ? GRID_VIEW\n                : LIST_VIEW\n        );\n    }\n\n    get toggleViewButton() {\n        const toggleIcon\n            = this.context.viewState.librariesViewState === LIST_VIEW\n                ? 'GridView'\n                : 'ListView';\n        return (\n            <Tooltip\n                content={translate('DL_LIBRARY_TOGGLE_VIEW')}\n                className={styles.libraryMosaicToggleButtonContainer}>\n                <Button\n                    data-test-id=\"library-mosaic-header-toggle-view\"\n                    variant=\"action\"\n                    className={styles.libraryMosaicToggleButton}\n                    disabled={this.disableActions}\n                    onClick={this.onToggleViewClick}\n                    icon={<Icon id={toggleIcon} height={16} />}\n                />\n            </Tooltip>\n        );\n    }\n\n    // Filter libraries using Search Field\n    get filterBySearch() {\n        return (\n            <Search\n                data-test-id=\"library-mosaic-header-search\"\n                className={styles.libraryMosaicHeaderSearch}\n                onChange={this.onSearchChange}\n                placeholder={translate(\n                    'DL_LIBRARY_MANAGER_SEARCH_INPUT_PLACEHOLDER_AW'\n                )}\n                quiet\n                maxLength={100}\n            />\n        );\n    }\n\n    /**\n     * @param {string} searchText - The search text to filter libraries\n     */\n    onSearchChange = (searchText) => {\n        // what metric should we report here?\n        // metrics.reportEvent('AW Expanded View', 'Search', 'input', 'search');\n        this.context.viewState.setSearchText(searchText);\n    }\n\n    // New Button for Expanded View (New Library, Browse All)\n    get newButton() {\n        return (\n            <div className={styles.newDropdown}>\n                <BaseDropdown\n                    tooltip={translate('DL_NEW')}\n                    data={this.newDropdownData}\n                    className=\"new-dropdown\"\n                    type=\"newButton\"\n                    locationBasedOnLabel={true}\n                    currentLabel={this.label}\n                    customLabelRef={this.customLabelRef}\n                />\n            </div>\n        );\n    }\n\n    handleClick = () => {\n        this.overlayState.toggleOverlay();\n    }\n\n    setCustomLabelRef = (ref) => {\n        this.customLabelRef = ref;\n    }\n\n    get newDropdownData() {\n        const items = [\n            {\n                label: translate('DL_NEW_LIBRARY'),\n                onClick: () =>\n                    this.context.dialogManager.openDialog('createLibrary', {\n                        createTitle: translate('DL_NEW_LIBRARY'),\n                        onCreate: environment.navigateToMosaic\n                    }),\n                id: 'NewLibrary',\n                iconId: 'AddCircle',\n                key: 'newLibrary'\n            },\n            {\n                label: translate('DL_MORE_LIBRARY_BROWSE_ALL'),\n                onClick: () => environment.navigateToBrowseAll?.(),\n                id: 'BrowseAll',\n                iconId: 'Browse',\n                key: 'browseAll'\n            }\n        ];\n        return items;\n    }\n\n    get label() {\n        return (\n            <div ref={this.setCustomLabelRef}>\n                <Button\n                    variant=\"cta\"\n                    onClick={this.handleClick}\n                    selected={this.overlayState.isOpen}\n                    data-test-id=\"new-button-dropdown\">\n                    <Icon\n                        id=\"AddCircle\"\n                        height={14}\n                        className={styles.newButton}\n                    />\n                    {translate('DL_NEW')}\n                </Button>\n            </div>\n        );\n    }\n\n    get isEmptyView() {\n        return this.context.libraryManager.libraries.length === 0;\n    }\n\n    get libraryMosiacHeaderControls() {\n        if (this.props.variant === 'assets-web') {\n            return (\n                <>\n                    <LibraryListFilterButton />\n                    {!this.isEmptyView && (\n                        <>\n                            <SortDropdown\n                                mode=\"libraries\"\n                                sortOrderControl\n                                onSortChange={this.onSortChange}\n                            />\n                            {this.toggleViewButton}\n                            <span\n                                data-test-id=\"libraries-search-filter\"\n                                className={styles.librarySearchFilter}>\n                                {translate('DL_SEARCH_FILTERS_TOOLTIP')}\n                            </span>\n                            {this.filterBySearch}\n                        </>\n                    )}\n                    <span\n                        data-test-id=\"mosaic-header-divider\"\n                        className={styles.libraryMosaicHeaderSubdivider}\n                    />\n                    {this.newButton}\n                </>\n            );\n        }\n        return (\n            <>\n                {this.newLibraryButton}\n                {this.browseAllButton}\n                <span\n                    data-test-id=\"mosaic-header-divider\"\n                    className={styles.libraryMosaicHeaderSubdivider}\n                />\n                <LibraryListFilterButton disabled={this.disableActions} />\n                <SortDropdown\n                    disabled={this.disableActions}\n                    mode=\"libraries\"\n                    sortOrderControl\n                    onSortChange={this.onSortChange}\n                />\n                {this.toggleViewButton}\n            </>\n        );\n    }\n\n    render() {\n        return (\n            <div\n                data-test-id=\"library-mosaic-header\"\n                className={styles.libraryMosaicHeader}>\n                <div className={styles.libraryMosaicHeaderContainer}>\n                    <Heading\n                        variant=\"subtitle1\"\n                        data-test-id=\"mosaic-header-title\"\n                        className={styles.libraryMosaicTitle}\n                        onContextMenu={handleContextMenuLibraryClick}>\n                        {translate(\n                            configuration.currentProduct.config\n                                .customPanelTitle || 'DL_LIBRARIES_PANEL_NAME'\n                        )}\n                    </Heading>\n                    <div className={styles.libraryMosaicHeaderControls}>\n                        {this.libraryMosiacHeaderControls}\n                    </div>\n                </div>\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\nimport React from 'react';\n\n// https://opensource.adobe.com/spectrum-web-components/components/card/\n// https://git.corp.adobe.com/torq/react-spectrum/tree/develop/src/Card\nimport type { Card as SpectrumCard } from '@ccx-public/spectrum-web-component-fallbacks/dist/card';\nimport createWrapper from './utils/createWrapper';\nimport { SWCLoader } from './utils/SWCLoader';\nimport { filterBooleanProps, useComponent } from './utils';\nimport interopRequireDefault from './utils/interopRequireDefault';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires */\nconst RS2Card: {\n    Card: React.ComponentType<unknown>;\n    CardBody: React.ComponentType<unknown>;\n    CardPreview: React.ComponentType<unknown>;\n} = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Card'))\n    : {};\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires */\n\nlet swcLoader;\nif (!process.env.EXCLUDE_SWC) {\n    swcLoader = new SWCLoader(['sp-card'], async () => {\n        const { Card } = await import(\n            /* webpackChunkName: \"SpCard\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/card'\n        );\n        return [Card];\n    });\n}\n\ntype RS2CardCompatProps = {\n    /** Whether or not the card is selected */\n    selected?: boolean;\n\n    /** What happens when the checkbox is clicked */\n    onSelectionChange?: () => void;\n\n    /** The action menu to display on the card */\n    actionMenu?: React.ReactNode;\n};\n\nexport const Card = createWrapper<SpectrumCard, RS2CardCompatProps>({\n    displayName: 'Card',\n    fallback: RS2Card.Card,\n    swcLoader,\n    SWCWrapper: function SpCard(props) {\n        const {\n            children,\n            className,\n            onSelectionChange,\n            selected,\n            actionMenu,\n            ...rest\n        } = props;\n        const Card = useComponent('sp-card');\n        return (\n            <Card\n                {...rest}\n                {...filterBooleanProps({ selected })}\n                onchange={onSelectionChange}\n                class={className}\n            >\n                {children}\n                {actionMenu && <div slot=\"actions\">{actionMenu}</div>}\n            </Card>\n        );\n    },\n    tagName: 'sp-card',\n});\n\ntype CardBodyProps = {\n    /** The title of the card body */\n    title?: string;\n\n    /** The subtitle on the card body */\n    subtitle?: string;\n\n    /** The description on the card body */\n    description?: string;\n};\n\n// https://git.corp.adobe.com/torq/react-spectrum/tree/develop/src/Card/js/CardBody.js\nexport const CardBody = createWrapper<CardBodyProps>({\n    displayName: 'CardBody',\n    fallback: RS2Card.CardBody,\n    swcLoader,\n    SWCWrapper: function SpCardBody(props) {\n        const { title, subtitle, description } = props;\n        const headingSlot = title && <div slot=\"heading\">{title}</div>;\n        const subheadingSlot = subtitle && (\n            <div slot=\"subheading\">{subtitle}</div>\n        );\n        const descriptionSlot = description && (\n            <div slot=\"description\">{description}</div>\n        );\n\n        return (\n            <>\n                {headingSlot}\n                {subheadingSlot}\n                {descriptionSlot}\n            </>\n        );\n    },\n    tagName: 'sp-card',\n});\n\ntype CardPreviewProps = { children: React.ReactNode };\n\n// https://git.corp.adobe.com/torq/react-spectrum/tree/develop/src/Card/js/CardPreview.js\nexport const CardPreview = createWrapper<CardPreviewProps>({\n    displayName: 'CardPreview',\n    fallback: RS2Card.CardPreview,\n    swcLoader,\n    SWCWrapper: function SpCardPreview(props) {\n        return props.children ? (\n            <div slot=\"preview\">{props.children}</div>\n        ) : null;\n    },\n    tagName: 'sp-card',\n});\n","// extracted by mini-css-extract-plugin\nexport default {\"mosaic\":\"WKb\",\"mosaicCardWrapper\":\"Kig\",\"spectrum-Card-subtitle\":\"MAl\",\"mosaicCardPreview\":\"TKs\",\"subtitleWrapper\":\"LCv\",\"subtitle\":\"xMZ\",\"iconWrapper\":\"Vlw\",\"teamName\":\"qd-\",\"sharingIcon\":\"uMe\",\"dateString\":\"hSK\"};","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport metrics from 'app/js/interface/metrics';\nimport ContextMenuButton from 'app/js/components/ContextMenuButton';\nimport { Library } from '@cclibraries/cc-libraries-js';\nimport environment from 'app/js/environment';\nimport { handleLibraryContextMenu } from 'app/js/utils/libraryUtils';\nimport { isBrandLibrary } from 'app/js/utils/brandUtils';\nimport styles from './index.scss';\nimport classNames from 'classnames';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport MosaicView from 'app/js/components/MosaicView';\nimport OverlayState from 'app/js/components/utils/OverlayState';\n\n// This file is used in CCD and formerly Express. All changes should be verified in both surfaces.\n\n@observer\nexport default class LibraryMosaicGridItem extends React.Component {\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        library: PropTypes.instanceOf(Library).isRequired\n    };\n\n    overlayState = new OverlayState({\n        ignoreScrollEvents: true,\n        ignoreFocus: true\n    });\n\n    handleContextMenuClick = (event) => {\n        if (environment.setContextMenu) {\n            this.overlayState.toggleOverlay();\n            const _isBrandLibrary = isBrandLibrary(this.props.library);\n            metrics.reportEvent('Navigation', _isBrandLibrary ? 'brands' : 'libraries', 'click', `${_isBrandLibrary ? 'brand' : 'library'}-contextual-menu`, {}, this.props.library);\n            handleLibraryContextMenu(event, this.props.library);\n        }\n    }\n\n    get coverImage() {\n        const { library } = this.props;\n        return <MosaicView viewMode=\"grid\" renditionGrid={library.renditionGrid}\n            library={library} data-test-id=\"library-grid-mosaic-view\"/>;\n    }\n\n    get contextMenuButton() {\n        if (environment.isMobileView) { return; }\n        return (\n            <div className={classNames('gridContextMenuButton', { 'open': this.overlayState.isOpen })}>\n                <ContextMenuButton quiet data-test-id=\"mosaic-context-menu\" onContextMenuClick={this.handleContextMenuClick} />\n            </div>\n        );\n    }\n\n    render() {\n        return (\n            <div\n                { ...environment.contextMenuEventListeners(this.handleContextMenuClick) }\n                className={classNames(styles.mosaic, styles.mosaicCardPreview)}\n                data-test-id=\"mosaic-card-component\"\n            >\n                { this.contextMenuButton }\n                { this.coverImage }\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n// https://opensource.adobe.com/spectrum-web-components/components/status-light/\n// There will be no RS2 fallback.\nimport type { StatusLight as StatusLightType } from '@ccx-public/spectrum-web-component-fallbacks/dist/status-light';\nimport { filterBooleanProps } from './utils';\nimport createWrapper from './utils/createWrapper';\nimport { SWCLoader } from './utils/SWCLoader';\n\nlet swcLoader;\nif (!process.env.EXCLUDE_SWC) {\n    swcLoader = new SWCLoader(['sp-status-light'], async () => {\n        const { StatusLight } = await import(\n            /* webpackChunkName: \"SpStatusLight\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/status-light'\n        );\n        return [StatusLight];\n    });\n}\n\nexport default createWrapper<StatusLightType>({\n    displayName: 'StatusLight',\n    fallback: undefined,\n    swcLoader,\n    swcProps: (props) => {\n        const { className, disabled, ...rest } = props;\n\n        return {\n            ...rest,\n            ...filterBooleanProps({\n                disabled,\n            }),\n            class: className,\n        };\n    },\n    tagName: 'sp-status-light',\n});\n","// extracted by mini-css-extract-plugin\nexport default {\"subtitleWrapper\":\"FZG\",\"subtitle\":\"HwJ\",\"iconWrapper\":\"M43\",\"statusBadge\":\"gJD\",\"teamName\":\"J76\",\"dateString\":\"m8S\",\"sharingIcon\":\"eSl\"};","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\nimport type { SyntheticEvent } from 'react';\nimport React, { useEffect, useRef } from 'react';\n\n// https://opensource.adobe.com/spectrum-web-components/components/action-menu/\n// https://git.corp.adobe.com/torq/react-spectrum/tree/develop/src/DropdownButton\nimport type { ActionMenu as ActionMenuType } from '@ccx-public/spectrum-web-component-fallbacks/dist/action-menu';\nimport type { ReactProps } from './utils';\nimport { SWCLoader } from './utils/SWCLoader';\nimport createWrapper from './utils/createWrapper';\nimport { filterBooleanProps, useComponent } from './utils';\n\ntype RS2DropdownButtonCompatProps = {\n    label?: string;\n    // RS2 icon prop will get transformed into an icon slot for SWC.\n    icon?: JSX.Element;\n    onClick?: (event: SyntheticEvent) => void;\n    onSelect?: (option: string) => void;\n    alignRight?: boolean;\n    'aria-label'?: string;\n};\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2DropdownButton: React.ComponentType<\n    ReactProps<ActionMenuType, RS2DropdownButtonCompatProps>\n> = process.env.INCLUDE_RS2\n    ? require('react-spectrum/DropdownButton').default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nfunction getButtonIcon(\n    icon?: RS2DropdownButtonCompatProps['icon']\n): React.ReactNode {\n    if (!icon) {\n        return;\n    }\n\n    return React.cloneElement(icon, { slot: 'icon' });\n}\n\nlet swcLoader;\nif (!process.env.EXCLUDE_SWC) {\n    swcLoader = new SWCLoader(['sp-action-menu'], async () => {\n        const { ActionMenu } = await import(\n            /* webpackChunkName: \"SpActionMenu\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/action-menu'\n        );\n        return [ActionMenu];\n    });\n}\n\nexport default createWrapper<ActionMenuType, RS2DropdownButtonCompatProps>({\n    displayName: 'DropdownButton',\n    fallback: (props) => {\n        const { children, ...rest } = props;\n        if (RS2DropdownButton) {\n            return (\n                <RS2DropdownButton {...rest}>\n                    {React.Children.map(children, (child) =>\n                        React.isValidElement(child)\n                            ? React.cloneElement(child, {\n                                  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                                  // @ts-ignore\n                                  forceFallback: true,\n                              })\n                            : child\n                    )}\n                </RS2DropdownButton>\n            );\n        }\n        return null;\n    },\n    swcLoader,\n    SWCWrapper: (props) => {\n        const actionMenuWrapperRef = useRef<ActionMenuType>(null);\n        const {\n            className,\n            children,\n            icon,\n            label,\n            onSelect,\n            disabled,\n            focused,\n            invalid,\n            open,\n            quiet,\n            readonly,\n            alignRight,\n            placement,\n            'aria-label': ariaLabel,\n            ...rest\n        } = props;\n        const buttonIcon = getButtonIcon(icon);\n        const labelContents = label ? <span slot=\"label\">{label}</span> : null;\n        const menuPlacement = alignRight ? 'bottom-end' : placement;\n\n        useEffect(() => {\n            const { current } = actionMenuWrapperRef;\n\n            const handleSelect = (event: Event) => {\n                const target = event.target as HTMLInputElement;\n\n                onSelect?.(target.value);\n            };\n\n            if (current && onSelect) {\n                current.addEventListener('change', handleSelect);\n            }\n\n            return () => {\n                if (current && onSelect) {\n                    current.removeEventListener('change', handleSelect);\n                }\n            };\n        }, [onSelect]);\n\n        const SWCActionMenuProps = {\n            ...filterBooleanProps({\n                disabled,\n                focused,\n                invalid,\n                open,\n                quiet,\n                readonly,\n            }),\n            label: ariaLabel,\n            placement: menuPlacement,\n            ...rest,\n        };\n\n        const ActionMenu = useComponent('sp-action-menu');\n        return (\n            <ActionMenu\n                ref={actionMenuWrapperRef}\n                class={className}\n                {...SWCActionMenuProps}\n            >\n                {buttonIcon}\n                {labelContents}\n                {typeof children !== 'string' && children}\n            </ActionMenu>\n        );\n    },\n    tagName: 'sp-action-menu',\n});\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport SpectrumDropdownButton from '@ccx-public/spectrum-wrapper/DropdownButton';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport { observer } from 'mobx-react';\nimport MenuItems, { LibraryMenuItemType, IconSizeType } from 'app/js/components/MenuItems';\nimport { MenuGroup } from '@ccx-public/spectrum-wrapper/Menu';\n\ntype DropdownButtonProps = {\n    icon?: JSX.Element;\n    dataTestId?: string;\n    menuIconSize?: IconSizeType;\n    menuData: LibraryMenuItemType[];\n    quiet?: boolean;\n    disabled?: boolean;\n    hideDividers?: boolean;\n    /** The source of the dropdown button to pass for data test ids */\n    source?: string;\n    placement?: \n    \"top\" | \"top-start\" | \"top-end\" |\n    \"right\" | \"right-start\" | \"right-end\" |\n    \"bottom\" | \"bottom-start\" | \"bottom-end\" |\n    \"left\" | \"left-start\" | \"left-end\";\n}\n\n@observer\nexport default class DropdownButton extends React.Component<DropdownButtonProps> {\n    static contextType = LibrariesContext;\n\n    _onClick = (event) => {\n        event.stopPropagation();\n    }\n\n    render() {\n        const disableDropdownButton = this.props.disabled || !this.props.menuData || this.props.menuData.length === 0;\n        return (\n            <SpectrumDropdownButton\n                icon={ this.props.icon }\n                data-test-id={this.props.dataTestId || \"dropdown-button\"}\n                quiet={this.props.quiet}\n                placement={this.props.placement}\n                onClick={this._onClick}\n                disabled={disableDropdownButton}\n            >\n                <MenuGroup>\n                    <MenuItems source={ this.props.source } menuData={ this.props.menuData } iconSize={ this.props.menuIconSize } hideDividers={ this.props.hideDividers } />\n                </MenuGroup>\n            </SpectrumDropdownButton>\n        );\n    }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"mosaic\":\"GdS\",\"mosaicCardPreview\":\"MuV\",\"gradientCover\":\"Yos\",\"statusBadge\":\"wAU\"};","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport metrics from 'app/js/interface/metrics';\nimport { translate } from 'app/js/managers/translationManager';\nimport { Library } from '@cclibraries/cc-libraries-js';\nimport StatusLight from '@ccx-public/spectrum-wrapper/StatusLight';\nimport environment from 'app/js/environment';\nimport { handleLibraryContextMenu } from 'app/js/utils/libraryUtils';\nimport { isPublishedBrand, isBrandLibrary } from 'app/js/utils/brandUtils';\nimport styles from './index.scss';\nimport classNames from 'classnames';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport OverlayState from 'app/js/components/utils/OverlayState';\nimport floodgateManager from 'app/js/managers/floodgateManager';\n\nconst gradientBackgroundIcons = require.context('../../../../images/GenStudio', false, /.svg$/);\n\n@observer\nexport default class BrandsGradientItem extends React.Component {\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        library: PropTypes.instanceOf(Library).isRequired,\n    };\n\n    @computed\n    get isPublished() {\n        return isPublishedBrand(this.props.library);\n    }\n\n    overlayState = new OverlayState({\n        ignoreScrollEvents: true,\n        ignoreFocus: true\n    });\n\n    handleContextMenuClick = (event) => {\n        if (environment.setContextMenu) {\n            this.overlayState.toggleOverlay();\n            const _isBrandLibrary = isBrandLibrary(this.props.library);\n            metrics.reportEvent('Navigation', _isBrandLibrary ? 'brands' : 'libraries', 'click', `${_isBrandLibrary ? 'brand' : 'library'}-contextual-menu`, {}, this.props.library);\n            handleLibraryContextMenu(event, this.props.library);\n        }\n    }\n\n    /**\n     * Returns a simple hash code from a string - this is not secure and should not be used for security purposes.\n     * It is used here to generate a random number based on the assetId to select a gradient cover image.\n     * @param  {string} str The string to hash.\n     * @returns {number}    A 32bit integer\n     * https://stackoverflow.com/questions/6122571/simple-non-secure-hash-function-for-javascript\n     * @see http://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/\n     */\n    hashCode(str) {\n        let hash = 0;\n        for (let i = 0, len = str.length; i < len; i++) {\n            const chr = str.charCodeAt(i);\n            hash = (hash << 5) - hash + chr;\n            hash |= 0; // Convert to 32bit integer\n        }\n        return Math.abs(hash);\n    }\n\n    get coverImage() {\n        const { library } = this.props;\n        // In order to associate the same library with the same gradient cover image, we use a simple hash function\n        // then we map the hash to number between 1 and 20 to select the cover image.\n        if (!library.assetId) { // library only has placeholder id initially\n            return <></>;\n        }\n        const simpleHash = this.hashCode(library.assetId);\n        const order = (simpleHash % 20) + 1;\n        const imgSrc = gradientBackgroundIcons(`./cover${order}.svg`);\n        return <img className={styles.gradientCover} src={imgSrc} />;\n    }\n\n    get statusBadge() {\n        return <div className={styles.statusBadge}>{this.publishedBadge}</div>;\n    }\n\n    get publishedBadge() {\n        return <StatusLight data-test-id=\"published-status-light\" variant=\"positive\">{translate('BRAND_PUBLISHED_BADGE')}</StatusLight>;\n    }\n\n    render() {\n        return (\n            <div\n                { ...environment.contextMenuEventListeners(this.handleContextMenuClick) }\n                className={classNames(styles.mosaic, styles.mosaicCardPreview)}\n                data-test-id=\"mosaic-card-component\"\n            >\n                { this.coverImage }\n                { this.isPublished && !floodgateManager.isBrandLifecycleEnabled() && this.statusBadge }\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { Library } from '@cclibraries/cc-libraries-js';\nimport StatusLight from '@ccx-public/spectrum-wrapper/StatusLight';\nimport configuration from 'app/js/config/configuration';\nimport * as LibraryUtils from 'app/js/utils/libraryUtils';\nimport { isPublishedBrand } from 'app/js/utils/brandUtils';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport styles from './index.scss';\nimport { translate } from 'app/js/managers/translationManager';\nimport Tooltip from 'app/js/components/Tooltip';\nimport floodgateManager from 'app/js/managers/floodgateManager';\nimport DropdownButton from 'app/js/components/DropdownButton';\nimport { Card, CardPreview, CardBody } from '@ccx-public/spectrum-wrapper/Card';\nimport BrandsGradientItem from '../BrandsGradientItem/index';\n\n@observer\nexport default class BrandCard extends React.Component {\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        brand: PropTypes.instanceOf(Library).isRequired,\n        isDraggedOver: PropTypes.bool,\n        handleCardPress: PropTypes.func,\n        itemRect: PropTypes.object\n    };\n\n    getGenStudioContextMenu(brand) {\n        const excludedActions = configuration.currentProduct.config.disabledLibraryContextMenuActions || [];\n        const actions = this.context.brandActions.getBrandActions(brand);\n        const menuData = actions.filter(action => !excludedActions.includes(action.id));\n        return <DropdownButton quiet menuData={menuData} hideDividers />;\n    }\n\n    get isBrandLifecycleEnabled() {\n        return floodgateManager.isBrandLifecycleEnabled();\n    }\n\n    get publishedBadge() {\n        return <StatusLight data-test-id=\"published-status-light\" variant=\"positive\">{translate('BRAND_PUBLISHED_BADGE')}</StatusLight>;\n    }\n\n    get draftBadge() {\n        return <StatusLight data-test-id=\"draft-status-light\" disabled>{translate('BRAND_DRAFT_BADGE')}</StatusLight>;\n    }\n\n    get isPublished() {\n        return isPublishedBrand(this.props.brand);\n    }\n\n    getBrandSubtitle() {\n        let dateString;\n        if (this.context.viewState.librarySortState === 'created' && this.props.brand.created) {\n            dateString = `${translate('DL_INFO_CREATED')} ${LibraryUtils.formatDate(this.props.brand.created)}`;\n        } else if (this.props.brand.modified) {\n            dateString = `${translate('DL_INFO_MODIFIED')} ${LibraryUtils.formatDate(this.props.brand.modified)}`;\n        }\n\n        return (\n            <div className={styles.subtitleWrapper} style={ { width: this.props.itemRect?.width } }>\n                <div className={styles.iconWrapper}>\n                    {this.isBrandLifecycleEnabled\n                    && <div data-test-id=\"brand-card-subtitle-status-badge\" className={styles.statusBadge}>\n                        {(this.isPublished ? this.publishedBadge : this.draftBadge)}\n                    </div>\n                    }\n                    {dateString && <span data-test-id=\"brand-card-subtitle-date-string\" className={styles.dateString}>{dateString}</span>}\n                    {!this.isBrandLifecycleEnabled && <Tooltip content={ LibraryUtils.getLibrarySharingString(this.props.brand, true) }>\n                        <div data-test-id=\"brand-card-subtitle-share-icon\" className={styles.sharingIcon}>{LibraryUtils.getIconForLibrary(this.props.brand)}</div>\n                    </Tooltip>}\n                </div>\n            </div>\n        );\n    }\n\n    render() {\n        if (!floodgateManager.hasLoaded()) {return null;}\n\n        return (<Card\n            size=\"L\"\n            variant=\"standard\"\n            data-test-id={`library-grid-mosaic-card-${this.props.brand.id}`}\n            allowsSelection={false}\n            selected={this.props.isDraggedOver}\n            onClick={ () => this.props.handleCardPress(this.props.brand)}\n            tabIndex=\"0\"\n            onKeyDown={ (event) => (event.key === 'Enter') ? this.props.handleCardPress(this.props.brand) : null }\n            aria-label={this.props.brand.name}\n            key={LibraryUtils.getKeyForObject(this.props.brand)}\n            style={{ width: '100%', height: '100%' }}\n            actionMenu={this.getGenStudioContextMenu(this.props.brand)}\n        >\n            <CardPreview>\n                <BrandsGradientItem library={this.props.brand} />\n            </CardPreview>\n            <CardBody\n                title={this.props.brand.name}\n                subtitle={this.getBrandSubtitle()}\n            />\n        </Card>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { computed } from 'mobx';\nimport Virtualizer from '@adobe/uxp-optimized/lib/Virtualizer';\nimport { Library } from '@cclibraries/cc-libraries-js';\nimport { Card, CardPreview, CardBody } from '@ccx-public/spectrum-wrapper/Card';\nimport Tooltip from 'app/js/components/Tooltip';\nimport LibraryDropTarget from 'app/js/components/LibraryDropTarget';\nimport environment from 'app/js/environment';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport CreateItemCard from 'app/js/components/CreateItemCard';\nimport * as LibraryUtils from 'app/js/utils/libraryUtils';\nimport { getFilteredLibraries } from 'app/js/utils/libraryUtils';\nimport * as BrandUtils from 'app/js/utils/brandUtils';\nimport { mapOwnershipType } from 'app/applications/CCX/js/utils.js';\nimport LibraryMosaicGridItem from './LibraryMosaicGridItem';\nimport { translate } from 'app/js/managers/translationManager';\nimport configuration from 'app/js/config/configuration';\nimport DiscoverLibrariesMessage from 'app/js/components/DiscoverLibrariesMessage';\nimport styles from './index.scss';\nimport DocumentAssetsContainer from 'app/js/models/documentAssets/DocumentAssetsContainer';\nimport SearchResultHeader from 'app/js/components/SearchResultHeader';\nimport metrics from 'app/js/interface/metrics';\nimport ProjectsBanner from 'app/js/components/ProjectsBanner';\nimport { shouldShowProjectsBannerOnboarding } from 'app/js/utils/onboardingUtils';\nimport BrandCard from '../../GenStudio/BrandCard/index';\n\n@observer\nexport default class LibrariesExpandedGridView extends React.Component {\n\n    static contextType = LibrariesContext;\n    static propTypes = {\n        height: PropTypes.number,\n        width: PropTypes.number,\n        libraries: PropTypes.arrayOf(PropTypes.oneOfType([ PropTypes.instanceOf(Library), PropTypes.instanceOf(DocumentAssetsContainer) ])),\n        className: PropTypes.string,\n        filterBy: PropTypes.string\n    };\n\n    @computed get cellDimensions() {\n        return environment.isMobileView\n        // MOBILE DIMENSIONS\n            ? {\n                CELL_PADDING_BOTTOM: 16,\n                CELL_PADDING_RIGHT: 16,\n                CELL_WIDTH_MIN: 150,\n                CELL_HEIGHT_STATIC_HEIGHT: 0,\n                CONTAINER_PADDING_TOP: 8,\n                MIN_COLUMNS: configuration.currentProduct.config.mobileMosaicMinColumns\n            }\n        // DESKTOP DIMENSIONS\n            : {\n                CELL_PADDING_BOTTOM: configuration.currentProduct.config.mosaicCellPaddingBottom === undefined ? 24 : configuration.currentProduct.config.mosaicCellPaddingBottom,\n                CELL_PADDING_RIGHT: 24,\n                CELL_WIDTH_MIN: configuration.currentProduct.config.mosaicCardWidth || 150,\n                CELL_HEIGHT_STATIC_HEIGHT: configuration.currentProduct.config.mosaicCellHeightStatic || 0,\n                CONTAINER_PADDING_TOP: configuration.currentProduct.config.mosaicContainerPaddingTop === undefined ? 24 : configuration.currentProduct.config.mosaicContainerPaddingTop,\n            };\n    }\n\n    getCellHeight = width => width + this.CELL_HEIGHT_STATIC_HEIGHT;\n\n    ITEM_VIEWS = {\n        library: item => this._getCard({ library: item.data, itemRect: this.getItemRect(item) }),\n        searchResultsHeader: ({ numResults }) => <div><SearchResultHeader numResults={ numResults }/></div>,\n        createItem: ({ shortType, icon, buttonText, onClick }) => <div><CreateItemCard shortType={shortType} icon={icon} buttonText={ translate(buttonText) } onClick={onClick} /></div>,\n        projectsBanner: () => <div><ProjectsBanner rootView={false} /></div>,\n        discoverLibrariesMessage: () => <div><DiscoverLibrariesMessage /></div>,\n    };\n\n    yourLibraryTour = {\n        componentId: '/assets/libraries',\n        tourId: 'ccd.onboarding.assets.lib.yourLibraries',\n        version: 1,\n        tourContent: [\n            {\n                id: 'manage.inApp.libraries',\n                stepNumber: 10,\n                type: 'coachMark',\n                title: translate('DL_COACHMARK_FIRST_HEADING'),\n                description: translate('DL_COACHMARK_FIRST_MESSAGE'),\n                target: '[data-test-id=\"mosaic-view\"]',\n                confirmLabel: translate('DL_ONBOARDING_TOUR_NEXT'),\n                cancelLabel: translate('DL_ONBOARDING_TOUR_SKIP'),\n                domTarget: 'library-personal-view',\n                confirmAnalyticsId: 'next',\n                cancelAnalyticsId: 'skip',\n                placement: 'bottom'\n            },\n            {\n                id: 'browse.shared.libraries',\n                stepNumber: 20,\n                type: 'coachMark',\n                title: translate('DL_COACHMARK_SECOND_HEADING'),\n                description: translate('DL_COACHMARK_SECOND_MESSAGE'),\n                target: '[data-test-id=\"panel-icon-Browse\"]',\n                confirmLabel: translate('DL_ONBOARDING_TOUR_NEXT'),\n                cancelLabel: translate('DL_ONBOARDING_TOUR_SKIP'),\n                domTarget: 'library-personal-view',\n                confirmAnalyticsId: 'next',\n                cancelAnalyticsId: 'skip',\n                placement: 'bottom'\n            },\n            {\n                id: 'find.more.libraries',\n                stepNumber: 30,\n                type: 'coachMark',\n                title: translate('DL_COACHMARK_THIRD_HEADING'),\n                description: translate('DL_COACHMARK_THIRD_MESSAGE'),\n                target: '[id=\"tabId-CCDMarket\"]',\n                confirmLabel: translate('DL_ONBOARDING_TOUR_FINISH'),\n                confirmAnalyticsId: 'done',\n                placement: 'bottom'\n            } ]\n    };\n\n    getItemRect = item => {\n        const { CELL_PADDING_BOTTOM, CELL_PADDING_RIGHT, CELL_WIDTH_MIN, CELL_HEIGHT_STATIC_HEIGHT, CONTAINER_PADDING_TOP, MIN_COLUMNS } = this.cellDimensions;\n\n        const columns = MIN_COLUMNS || Math.max(Math.floor((this.props.width - CELL_PADDING_RIGHT) / (CELL_WIDTH_MIN + CELL_PADDING_RIGHT)), 1);\n        const index = this.items.indexOf(item) - (this.showSearchHeader ? 1 : 0);\n\n        const cellWidth = (this.props.width - CELL_PADDING_RIGHT) / columns - CELL_PADDING_RIGHT;\n        const cellHeight = cellWidth + CELL_HEIGHT_STATIC_HEIGHT;\n        const searchHeaderHeight = this.showSearchHeader ? SearchResultHeader.getHeight(item.numResults, this.props.width) : 0;\n\n        const x = CELL_PADDING_RIGHT + (index % columns) * (cellWidth + CELL_PADDING_RIGHT);\n        const y = CONTAINER_PADDING_TOP + searchHeaderHeight + Math.floor(index / columns) * (cellHeight + CELL_PADDING_BOTTOM);\n\n        if (item.key === 'search-results-header') {\n            const width = this.props.width || 0;\n            const height = searchHeaderHeight;\n            return { height, width, x: 0, y: CONTAINER_PADDING_TOP };\n        }\n\n        if (item.key === 'discover-libraries-message') {\n            // will need to re-jig this for mobile breakpoints once we have them\n            const width = environment.isMobileView ? 200 : 500;\n            const discoverY = this.props.libraries.length ? index % columns === 0 ? y : y + cellHeight : 100;\n            return { height: 400, width, x: (this.props.width / 2) - (width / 2), y: discoverY + CONTAINER_PADDING_TOP };\n        }\n\n        if (item.key === 'projects-banner') {\n            const width = this.props.width - (2 * CELL_PADDING_RIGHT) || 0;\n            return { height: 30, width, x: CELL_PADDING_RIGHT, y: y + cellHeight + CELL_PADDING_BOTTOM };\n        }\n\n        return { height: cellHeight, width: cellWidth, x, y };\n    };\n\n    componentDidMount = () => {\n        this.context.viewState.setViewState('grid');\n        this.props.libraries.forEach(library => {\n            // Fetch the collaborators list for only collaborated libraries.\n            if (LibraryUtils.isSharedUserLibrary(library)) {\n                this.context.libraryManager.fetchLibraryCollaborations(library, configuration.FETCH_COLLABORATIONS_THROTTLE);\n            }\n        });\n        this.registerYourLibraryTour();\n    }\n\n    /**\n     * Registers the library tour with the CCD team.\n     * Shows the paginated coachmarks for the first time users.\n     */\n    registerYourLibraryTour = () => {\n        if (environment.ccdAPI) {\n            const onboardingManager = environment.ccdAPI.ccdContext.getOnboardingManager();\n            onboardingManager.registerOnboarding(this.yourLibraryTour, 'CCLibs');\n        }\n    }\n\n    get projectNameLoading() {\n        return (\n            <div className=\"ghost-loading-wrapper\">\n                <div data-test-id=\"ghost-loading\" className=\"ghost-loading\"/>\n            </div>\n        );\n    }\n\n    getLibrarySubtitle(library, librarySharingData) {\n        const isTeamLibrary = LibraryUtils.isTeamLibrary(library);\n        let subtitle = library.ownership ? librarySharingData : null;\n        subtitle = Array.isArray(subtitle) ? subtitle[0] : subtitle;\n        if (!subtitle && isTeamLibrary) {\n            // Project names are loaded asynchronously, so show a loading state.\n            return this.projectNameLoading;\n        }\n        return subtitle;\n    }\n\n    getLibraryInfo(library, itemRect) {\n        const isTeamLibrary = LibraryUtils.isTeamLibrary(library);\n        const librarySharingData = LibraryUtils.getLibrarySharingString(library);\n        const orgName = isTeamLibrary ? librarySharingData[1] : null;\n        return (\n            <div className={styles.subtitleWrapper} style={ { width: itemRect.width } }>\n                <Tooltip content={ LibraryUtils.getLibrarySharingString(library, true) }>\n                    <div className={styles.iconWrapper}>\n                        {LibraryUtils.getIconForLibrary(library)}\n                        <span className={styles.subtitle} data-test-id=\"library-subtitle\">\n                            { this.getLibrarySubtitle(library, librarySharingData) }\n                            {isTeamLibrary && orgName && <span className={styles.teamName}>{orgName}</span>}\n                        </span>\n                    </div>\n                </Tooltip>\n            </div>\n        );\n    }\n\n    get _showDiscoverMessage() {\n        return configuration.currentProduct.showDiscoverMessageInRootView?.(this.props.libraries.length || 0);\n    }\n\n    get _showProjectsBanner() {\n        const shouldShowBanner = shouldShowProjectsBannerOnboarding();\n        const hasProjects = this.context.libraryManager.projects?.length > 0;\n        return configuration.currentProduct.config?.hasProjectsBanner?.() && shouldShowBanner && hasProjects;\n    }\n\n    @computed\n    get showSearchHeader() {\n        return this.props.libraries.length && this.context.viewState.isLibraryNameSearchMode();\n    }\n\n    @computed\n    get items() {\n        let searchResultsHeader = [];\n        if (this.showSearchHeader) {\n            searchResultsHeader = [ { key: 'search-results-header', type: 'searchResultsHeader', numResults: this.props.libraries.length } ];\n        }\n        let createItemCard = [];\n        if (this.props.libraries.length && !this.showSearchHeader && configuration.currentProduct.config.enableCreateItemCards) {\n            const createItemCardData = this.props.filterBy === 'brand'\n                ? { shortType: 'brand', icon: 'CCXCreateLogo', buttonText: 'DL_CREATE_NEW_BRAND_LIBRARY', onClick: () => { this.context.libraryActions.createBrandLibrary(); } }\n                : { shortType: 'library', icon: 'CCXLibraryLarge', buttonText: 'DL_CREATE_DESIGN_LIBRARY', onClick: () => this.context.dialogManager.openDialog('createLibrary') };\n            createItemCard = [ { key: 'create-library-card', type: 'createItem', ...createItemCardData } ];\n        }\n        const discoverLibrariesMessage = this._showDiscoverMessage ? [ { key: 'discover-libraries-message' , type: 'discoverLibrariesMessage', x: 12, y: 500, height: 100 } ] : [];\n        const projectsBanner = this._showProjectsBanner ? [ { key: 'projects-banner', type: 'projectsBanner', } ] : [];\n        return [\n            ...searchResultsHeader,\n            ...createItemCard,\n            ...this.props.libraries.map(library => ({ data: library, key: LibraryUtils.getKeyForObject(library), type: 'library' })),\n            ...projectsBanner,\n            ...discoverLibrariesMessage,\n        ];\n    }\n\n    handleCardPress = library => {\n        const selectType = library.isDocumentAssets && 'select-document-assets' || 'select-library';\n        metrics.reportEvent('Navigation', 'Library Panel', 'click', selectType, null, library);\n\n        const viewState = this.context.viewState;\n        const searchText = viewState.getSearchText();\n\n        if (configuration.currentProduct.config.reportSearchSDMEvents && viewState.isSearchMode() && searchText) {\n            const isBrandLibrary = BrandUtils.isBrandLibrary(library);\n            const listedLibraries = isBrandLibrary ? getFilteredLibraries('brand', viewState.librariesInViewOrder) : getFilteredLibraries('notBrand', viewState.librariesInViewOrder);\n            const libraryOrder = listedLibraries.indexOf(library) + 1;\n\n            const openLibraryPayload = {\n                'custom.library.type': mapOwnershipType(library.ownership),\n                'custom.library.filter': isBrandLibrary ? 'brand' : 'library',\n                'ui.search_keyword': searchText,\n                'custom.ui.location': isBrandLibrary ? 'homes-brands-tab' : 'homes-libraries-tab',\n                'custom.search.rank': libraryOrder,\n                'custom.search.id': viewState.getSearchId()\n            };\n\n            configuration.currentProduct.config.reportSearchSDMEvents(openLibraryPayload);\n        }\n\n        environment.navigateToLibrary(library);\n        if (!configuration.currentProduct.config.keepSearchOnLibraryNavigate) {\n            viewState.setSearchText('');\n            viewState.setSearchType('library');\n        }\n    }\n\n    _getCard = (data) => {\n        const { library, itemRect } = data;\n\n        return (\n            <LibraryDropTarget className={styles.mosaicCardWrapper} library={ library }>\n                {\n                    isDraggedOver => {\n                        if (configuration.currentProduct.config.showBrandCard) {\n                            return <BrandCard itemRect={itemRect} isDraggedOver={isDraggedOver} brand={library} handleCardPress={this.handleCardPress}/>;\n                        }\n                        return (<Card\n                            size={ environment.isMobileView ? 'S' : 'L' }\n                            variant={configuration.currentProduct.config.mosaicCardVariant || 'standard'}\n                            data-test-id={`library-grid-mosaic-card-${library.id}`}\n                            allowsSelection={false}\n                            selected={isDraggedOver}\n                            onClick={ () => this.handleCardPress(library)}\n                            tabIndex=\"0\"\n                            onKeyDown={ (event) => (event.key === 'Enter') ? this.handleCardPress(library) : null }\n                            aria-selected={this.context.libraryManager.currentLibrary === library}\n                            aria-label={library.name}\n                            key={LibraryUtils.getKeyForObject(library)}\n                            style={{ width: '100%', height: '100%' }}\n                        >\n                            <CardPreview>\n                                <LibraryMosaicGridItem library={library} />\n                            </CardPreview>\n                            <CardBody\n                                title={library.name}\n                                subtitle={<span>{this.getLibraryInfo(library, itemRect)}</span>}\n                            />\n                        </Card>);\n                    }\n                }\n            </LibraryDropTarget>\n        );\n    }\n\n    render() {\n        const { width, height } = this.props;\n\n        return (\n            <div className={this.props.className} data-test-id=\"library-grid-view\">\n                <Virtualizer\n                    id=\"library-grid\"\n                    items={this.items}\n                    itemKey={item => item.key}\n                    itemType={item => item.type}\n                    itemRect={this.getItemRect}\n                    style={{ width, height, paddingBottom: '30px' }}\n                >\n                    { item => this.ITEM_VIEWS[item.type](item) }\n                </Virtualizer>\n            </div>\n        );\n    }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"libraryListContainer\":\"z_T\",\"libraryMosaicListItem\":\"Z6E\",\"isDraggedOver\":\"kKg\",\"libraryMosaicListItemContextMenuContainer\":\"_dK\",\"libraryMosaicListItemContextMenu\":\"Xo2\",\"libraryMosaicListItemSharedIcon\":\"OAi\",\"libraryMosaicListItemMosaicTileContainer\":\"mv5\",\"libraryMosaicListHeaderContainer\":\"RZo\",\"libraryMosaicListItemName\":\"FdZ\",\"libraryMosaicListItemIconContainer\":\"qof\",\"libraryMosaicListItemModifiedContainer\":\"bZ-\",\"libraryMosaicListItemNameContainer\":\"O6x\",\"libraryMosaicListNameColumnContainer\":\"rwq\",\"libraryMosaicListModifiedColumnContainer\":\"uUR\",\"libraryMosaicListItemContainer\":\"n63\",\"libraryMosaicListHeaderInnerContainer\":\"ehh\",\"libraryMosaicHeaderText\":\"DQS\",\"libraryMosaicItemTeamName\":\"i8r\",\"libraryMosaicItemText\":\"G_1\",\"libraryMosaicListItemSharingContainer\":\"Yfc\",\"libraryMosaicListHeaderTitle\":\"Sh5\"};","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport classNames from 'classnames';\nimport MosaicView from 'app/js/components/MosaicView';\nimport * as LibraryUtils from 'app/js/utils/libraryUtils';\nimport * as BrandUtils from 'app/js/utils/brandUtils';\nimport metrics from 'app/js/interface/metrics';\nimport ContextMenuButton from 'app/js/components/ContextMenuButton';\nimport Tooltip from 'app/js/components/Tooltip';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport environment from 'app/js/environment';\nimport LibraryDropTarget from 'app/js/components/LibraryDropTarget';\nimport { formatDate, handleLibraryContextMenu } from 'app/js/utils/libraryUtils';\nimport styles from './index.scss';\nimport { Library } from '@cclibraries/cc-libraries-js';\nimport DocumentAssetsContainer from 'app/js/models/documentAssets/DocumentAssetsContainer';\n\n@observer\nexport default class LibraryMosaicListItem extends React.Component {\n    static contextType = LibrariesContext;\n\n    static defaultProps = {\n        showSharingStatus: true\n    };\n\n    static propTypes = {\n        library: PropTypes.oneOfType([ PropTypes.instanceOf(Library), PropTypes.instanceOf(DocumentAssetsContainer) ]).isRequired,\n        onClick: PropTypes.func,\n        showSharingStatus: PropTypes.bool\n    }\n\n    get dataTestId() {\n        return `library-mosaic-list-item-${this.props.library.id}`;\n    }\n\n    handleClick = () => {\n        if (this.props.onClick) {\n            this.props.onClick(this.props.library);\n        }\n    }\n\n    handleContextMenuClick = (event) => {\n        if (environment.setContextMenu) {\n            const isBrandLibrary = BrandUtils.isBrandLibrary(this.props.library);\n            metrics.reportEvent('Navigation', isBrandLibrary ? 'brands' : 'libraries', 'click', `${isBrandLibrary ? 'brand' : 'library'}-contextual-menu`, {}, this.props.library);\n            handleLibraryContextMenu(event, this.props.library);\n        }\n    }\n\n    get shareLabel() {\n        return LibraryUtils.getLibrarySharingString(this.props.library);\n    }\n\n    get shareTooltip() {\n        return LibraryUtils.getLibrarySharingString(this.props.library, true);\n    }\n\n    get shareStatus() {\n        const shareLabel = this.shareLabel;\n        const isTeamLibrary = LibraryUtils.isTeamLibrary(this.props.library);\n        const subtitle = this.props.library.ownership !== 'private' ? Array.isArray(shareLabel) ? shareLabel[0] : shareLabel : shareLabel;\n        const orgName = isTeamLibrary ? shareLabel[1] : null;\n        const icon = LibraryUtils.getIconForLibrary(this.props.library);\n        return <Tooltip className={classNames(styles.libraryMosaicListItemContainer, styles.libraryMosaicListItemIconContainer)} content={ this.shareTooltip }>\n            <div data-test-id=\"library-mosaic-list-item-sharing-container\" className={styles.libraryMosaicListItemSharingContainer}>\n                {icon && <div data-test-id=\"icon\" className={styles.libraryMosaicListItemSharedIcon}>{ icon }</div>}\n                { shareLabel && <span data-test-id=\"sharing-label\">{ subtitle }</span> }\n                { isTeamLibrary && orgName && <span data-test-id=\"org-name\" className={classNames(styles.libraryMosaicItemTeamName, styles.libraryMosaicItemText)}>{orgName}</span> }\n            </div>\n        </Tooltip>;\n    }\n\n    get modifiedDate() {\n        const modifiedDateString = formatDate(this.props.library.modified);\n        return (\n            <div className={classNames(styles.libraryMosaicListItemContainer, styles.libraryMosaicListItemModifiedContainer, styles.libraryMosaicItemText) }\n                data-test-id=\"library-mosaic-list-item-modified\">\n                { modifiedDateString }\n            </div>\n        );\n    }\n\n    get contextMenu() {\n        return <div className={styles.libraryMosaicListItemContextMenuContainer}>\n            <div className={styles.libraryMosaicListItemContextMenu}>\n                <ContextMenuButton data-test-id=\"library-mosaic-list-item-context-menu\" onContextMenuClick={ this.handleContextMenuClick }/>\n            </div>\n        </div>;\n    }\n\n    get mosaicGrid() {\n        return <div className={styles.libraryMosaicListItemMosaicTileContainer}>\n            <MosaicView viewMode=\"list\" renditionGrid={this.props.library.renditionGrid}\n                library={this.props.library} data-test-id=\"library-list-mosaic-view\" />\n        </div>;\n    }\n\n    render() {\n        return (\n            <LibraryDropTarget library={this.props.library}>\n                { isDraggedOver => {\n                    const classes = classNames(styles.libraryMosaicListItem, { isDraggedOver });\n                    return <div\n                        data-test-id={ this.dataTestId }\n                        className={ classes }\n                        onClick={ this.handleClick }\n                        { ...environment.contextMenuEventListeners(this.handleContextMenuClick) }\n                        onKeyDown={ (e) => (e.key === 'Enter') ? this.handleClick() : null }\n                        tabIndex=\"0\"\n                        role=\"list\"\n                        aria-selected={this.context.libraryManager.currentLibrary === this.props.library}\n                        aria-label={`${this.props.library.name}, ${this.shareLabel}`}\n                    >\n                        { this.mosaicGrid }\n                        <div className={classNames(styles.libraryMosaicListNameContainer, styles.libraryMosaicListNameColumnContainer)}>\n                            <div data-test-id=\"library-mosaic-list-item-name\" className={classNames(styles.libraryMosaicListItemName, styles.libraryMosaicItemText)}>\n                                { this.props.library.name }\n                            </div>\n                        </div>\n                        { this.modifiedDate }\n                        { this.props.showSharingStatus && this.shareStatus }\n                        { this.contextMenu }\n                    </div>;\n                } }\n            </LibraryDropTarget>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport { Library } from '@cclibraries/cc-libraries-js';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { translate } from 'app/js/managers/translationManager';\nimport Icon from 'app/js/components/Icon';\nimport environment from 'app/js/environment';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport LibraryMosaicListItem from './LibraryMosaicListItem';\nimport styles from './index.scss';\nimport DocumentAssetsContainer from 'app/js/models/documentAssets/DocumentAssetsContainer';\n\n@observer\nexport default class LibrariesExpandedListView extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static defaultProps = {\n        showSharingStatus: true,\n    };\n\n    static propTypes = {\n        libraries: PropTypes.arrayOf(PropTypes.oneOfType([ PropTypes.instanceOf(Library), PropTypes.instanceOf(DocumentAssetsContainer) ])),\n        showSharingStatus: PropTypes.bool\n    }\n\n    @computed get libraryList() {\n        return (\n            <div role=\"listbox\" aria-label={translate('DL_ARIA_LIBRARY_LIST_TITLE')}\n                data-test-id=\"library-mosaic-list-content\">\n                { this.props.libraries.map(library => {\n                    const key = `${library.id}${library.ownerType === 'org' ? '-team' : ''}`;\n                    return <div key={ key } data-test-id=\"library-mosaic-list-item\">\n                        <LibraryMosaicListItem\n                            library={ library }\n                            showSharingStatus={ this.props.showSharingStatus }\n                            onClick={ library => environment.navigateToLibrary(library) }\n                        />\n                        <hr/>\n                    </div>;\n                }) }\n            </div>\n        );\n    }\n\n    handleSortChange = (sortBy) => {\n        // if we are already sorting by the same field, toggle the sort order\n        if (this.context.viewState.librarySortState === sortBy) {\n            this.context.viewState.setLibrarySortOrderDescendingState(!this.context.viewState.librarySortOrderDescendingState);\n        } else {\n            this.context.viewState.setLibrarySortState(sortBy);\n        }\n    }\n\n    handleKeyDown = (event, sortBy) => {\n        if (event.key === 'Enter') {\n            this.handleSortChange(sortBy);\n        }\n    }\n\n    get sortingIcon() {\n        const arrowIcon = this.context.viewState.librarySortOrderDescendingState ? 'ArrowUp' : 'ArrowDown';\n        const dataTestId = this.context.viewState.librarySortOrderDescendingState ? 'arrow-up' : 'arrow-down';\n        return <span data-test-id={dataTestId}><Icon id={arrowIcon} height={10} /></span>;\n    }\n\n    get listViewHeader() {\n        return <div>\n            <div className={ styles.libraryMosaicListHeaderContainer }>\n                <div data-test-id=\"library-mosaic-list-item-header-mosaic-tile\" className={styles.libraryMosaicListItemMosaicTileContainer} />\n                <div className={classNames(styles.libraryMosaicListNameColumnContainer, styles.libraryMosaicListItemNameContainer, styles.libraryMosaicListHeaderTitle)}\n                    data-test-id=\"library-mosaic-list-item-header-name\"\n                    onClick={() => this.handleSortChange('name')}\n                    onKeyDown={(event) => this.handleKeyDown(event, 'name')} >\n                    <div tabIndex=\"0\" className={styles.libraryMosaicListHeaderInnerContainer}>\n                        <span className={styles.libraryMosaicHeaderText}>{translate('DL_LIST_VIEW_HEADER_NAME')}</span>\n                        { this.context.viewState.librarySortState === 'name' && this.sortingIcon }\n                    </div>\n                </div>\n                <div className={classNames(styles.libraryMosaicListItemContainer, styles.libraryMosaicListHeaderTitle, styles.libraryMosaicListModifiedColumnContainer) }\n                    data-test-id=\"library-mosaic-list-item-header-modified\"\n                    onClick={() => this.handleSortChange('modified')}\n                    onKeyDown={(event) => this.handleKeyDown(event, 'modified')} >\n                    <div tabIndex=\"0\" className={styles.libraryMosaicListHeaderInnerContainer}>\n                        <span className={styles.libraryMosaicHeaderText}>{ translate('DL_LIST_VIEW_HEADER_MODIFIED') }</span>\n                        { this.context.viewState.librarySortState === 'modified' && this.sortingIcon }\n                    </div>\n                </div>\n                {this.props.showSharingStatus && <div className={classNames(styles.libraryMosaicListItemContainer, styles.libraryMosaicListHeaderTitle, styles.libraryMosaicHeaderText)}\n                    data-test-id=\"library-mosaic-list-item-header-sharing\">\n                    { translate('DL_LIST_VIEW_HEADER_SHARING') }\n                </div> }\n            </div>\n            <hr/>\n        </div>;\n    }\n\n    @computed get contents() {\n        return <React.Fragment>\n            { this.listViewHeader }\n            { this.libraryList }\n        </React.Fragment>;\n    }\n\n    render() {\n        return (\n            <div data-test-id=\"library-mosaic-list\" className={styles.libraryListContainer}>\n                { this.contents }\n            </div>\n        );\n    }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"tNa\",\"gridViewContainer\":\"WdN\",\"librariesContainer\":\"rsS\",\"innerGridViewContainer\":\"lXg\",\"toastContainer\":\"TQO\",\"noLibrariesView\":\"s05\"};","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\nimport { computed } from 'mobx';\nimport { AutoSizer } from 'react-virtualized';\nimport PropTypes from 'prop-types';\nimport { Library } from '@cclibraries/cc-libraries-js';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport DialogContainerView from 'app/js/components/DialogContainerView';\nimport NoLibrariesView from 'app/js/components/NoLibrariesView';\nimport EmptyFilterLibraryView from 'app/js/components/EmptyFilterLibraryView';\nimport { getFilteredLibraries } from 'app/js/utils/libraryUtils';\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport { addElementsFromDropEvent } from 'app/js/utils/addElementUtils';\nimport ExpandedViewHeader from './ExpandedViewHeader';\nimport LibrariesExpandedGridView from './GridView';\nimport LibrariesExpandedListView from './ListView';\nimport styles from './index.scss';\nimport ToastContainerView from 'app/js/components/ToastContainerView';\nimport DocumentAssetsContainer from 'app/js/models/documentAssets/DocumentAssetsContainer';\n\n@observer\nexport default class PanelRootExpandedView extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        libraries: PropTypes.arrayOf(PropTypes.oneOfType([ PropTypes.instanceOf(Library), PropTypes.instanceOf(DocumentAssetsContainer) ])),\n        header: PropTypes.node,\n        filterBy: PropTypes.string,\n        viewState: PropTypes.oneOf([ 'grid', 'list' ]),\n    };\n\n    get currentViewState() {\n        // Allow overriding global state.\n        return this.props.viewState || this.context.viewState.librariesViewState;\n    }\n\n    get filterBy() {\n        // Allow overriding global state.\n        return this.props.filterBy || this.context.viewState.currentLibrariesFilter || 'all';\n    }\n\n    @computed get isSearchFiltering() {\n        const hasFilter = this.context.viewState.currentLibrariesFilter !== 'all';\n        return !!(hasFilter || this.context.viewState.getSearchText());\n    }\n\n    @computed get libraries() {\n        const filterBy = this.filterBy;\n        // Allow overriding global state.\n        const libraries = this.props.libraries || this.context.viewState.librariesInViewOrder;\n        return getFilteredLibraries(filterBy, libraries);\n    }\n\n    @computed get emptyView() {\n        if (this.isSearchFiltering) { return <EmptyFilterLibraryView view=\"personal\"/>; }\n        if (configuration.currentProduct.config.customEmptyRootState) {\n            const CustomEmptyRootState = configuration.currentProduct.config.customEmptyRootState;\n            return <CustomEmptyRootState />;\n        } else {\n            return <NoLibrariesView className={styles.noLibrariesView} />;\n        }\n    }\n\n    @computed get librariesView() {\n        const AutoSizerComponent = environment.AutoSizer || AutoSizer;\n        return <AutoSizerComponent>{this.getLibrariesContent}</AutoSizerComponent>;\n    }\n\n    getLibrariesContent = ({ width, height }) => {\n        if (this.currentViewState === configuration.LIBRARIES_VIEW_STATES.GRID) {\n            return (\n                <div className={styles.gridViewContainer}>\n                    <div className={styles.innerGridViewContainer}>\n                        <LibrariesExpandedGridView height={height} width={width} libraries={this.libraries} filterBy={this.filterBy} />\n                    </div>\n                </div>\n            );\n        }\n        return <LibrariesExpandedListView height={height} width={width} libraries={this.libraries} />;\n    }\n\n    @computed get header() {\n        return this.props.header || <ExpandedViewHeader />;\n    }\n\n    @computed get content() {\n        if (this.libraries.length) { return <div className={styles.librariesContainer}>{this.librariesView}</div>; }\n        return this.emptyView;\n    }\n\n    handleDrop = dropEvent => {\n        // Requires environment.getDragFileList to be defined.\n        addElementsFromDropEvent(null, dropEvent);\n    }\n\n    render() {\n        return (\n            <div data-test-id=\"panel-root-expanded-view\" className={styles.container} onDrop={ this.handleDrop } onClick={ (event) => {\n                if (event.detail >= 4) {\n                    throw new Error('Rage Clicking');\n                }\n            } }>\n                {this.header}\n                {this.content}\n                <DialogContainerView/>\n                <div className={styles.toastContainer}><ToastContainerView/></div>\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\nimport { computed } from 'mobx';\nimport PropTypes from 'prop-types';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport { getLibrariesInViewOrder, getFilteredLibraries } from 'app/js/utils/libraryUtils';\nimport PanelRootExpandedView from 'app/js/components/PanelRootExpandedView';\n\n@observer\nexport default class LibraryTeamsView extends React.Component {\n\n    static contextType = LibrariesContext;\n    static propTypes = {\n        filterBy: PropTypes.oneOf([ 'all', 'addedToYourLibraries', 'notAdded' ]),\n        sortBy: PropTypes.oneOf([ 'name', 'modifiedDate' ]),\n        sortOrder: PropTypes.oneOf([ 'asc', 'desc' ]),\n        viewType: PropTypes.oneOf([ 'grid', 'list' ]),\n        theme: PropTypes.oneOf([ 'light', 'dark' ]),\n        teamId: PropTypes.string,\n        // `teamNames` is a comma separated string of all team names available to the user.\n        // This is only used to detect mutations.\n        teamNames: PropTypes.string\n    };\n\n    componentDidUpdate({ teamNames }) {\n        if (teamNames !== this.props.teamNames) {\n            this.context.libraryManager.refreshTeams();\n        }\n    }\n\n    get sortBy() {\n        // Per CCD: https://git.corp.adobe.com/CCX/projects/blob/main/src/packages/CDOView/stores/constants.ts#L16\n        // Transform into the sort values we use in viewState\n        return this.props.sortBy === 'modifiedDate' ? 'modified' : this.props.sortBy;\n    }\n\n    @computed get libraries() {\n        const { sortBy, filterBy } = this.props;\n        const isAscending = this.props.sortOrder === 'asc';\n        const searchText = this.context.viewState.getSearchText();\n        const teamLibraries = getFilteredLibraries('team', this.context.libraryManager.getCCLibraries());\n        const librariesInViewOrder = getLibrariesInViewOrder(teamLibraries, { sortBy, filterBy, isAscending, searchText });\n        return librariesInViewOrder.filter(lib => lib.team.id === this.props.teamId);\n    }\n\n    render() {\n        return <PanelRootExpandedView libraries={this.libraries} viewState={this.props.viewType} />;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport BaseComponentView from '../BaseComponentView';\nimport LibraryTeamsView from 'app/js/components/LibraryTeamsView';\n\nexport default class LibraryTeamsViewContainer extends BaseComponentView {\n    static get observedAttributes() {\n        return [ 'teamnames', 'teamid', 'filterby', 'sortby', 'sortorder', 'viewtype', 'theme' ];\n    }\n\n    constructor() {\n        super(<LibraryTeamsView />, [ 'ccd-panel-container' ]);\n    }\n\n    attributeChangedCallback() {\n        const teamNames = this.getAttribute('teamnames');\n        const teamId = this.getAttribute('teamid');\n        const filterBy = this.getAttribute('filterby');\n        const sortBy = this.getAttribute('sortby');\n        const sortOrder = this.getAttribute('sortorder');\n        const viewType = this.getAttribute('viewtype');\n        const theme = this.getAttribute('theme');\n        this.render(<LibraryTeamsView teamNames={teamNames} teamId={teamId} filterBy={filterBy} sortBy={sortBy} sortOrder={sortOrder} viewType={viewType} theme={theme} />);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport BaseView from '../BaseView';\nimport PanelRootExpandedView from 'app/js/components/PanelRootExpandedView';\nimport environment from 'app/js/environment';\n\nexport default class LibraryYoursViewContainer extends BaseView {\n    constructor() {\n        super(<PanelRootExpandedView />, [ 'ccd-panel-container' ]);\n        environment.setCurrentBaseWebComponent(this);\n    }\n\n    connectedCallback() {\n        super.connectedCallback();\n        environment.isLibrariesViewMounted = true;\n    }\n\n    disconnectedCallback() {\n        super.disconnectedCallback();\n        environment.isLibrariesViewMounted = false;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport libraryManager from 'app/js/managers/libraryManager';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport { defineElement } from 'app/js/utils/DOMUtils';\nimport viewState from 'app/js/state/viewState';\nimport { reaction, when } from 'mobx';\n// Web component imports. We add these as custom elements in init()\nimport LibraryListViewComponent from 'app/js/components/web-components/ACCC/LibraryListView';\nimport LibraryContentsViewComponent from 'app/js/components/web-components/ACCC/LibraryContentsView';\nimport LibraryCustomDialogViewComponent from 'app/js/components/web-components/ACCC/LibraryCustomDialogView';\nimport LibraryInfoPanelViewComponent from 'app/js/components/web-components/ACCC/LibraryInfoPanelView';\nimport LibraryTeamsViewComponent from 'app/js/components/web-components/ACCC/LibraryTeamsView';\nimport LibraryYoursViewComponent from 'app/js/components/web-components/ACCC/LibraryYoursView';\nimport { findFirstElement, getLibraryCustomGroupsTree } from 'app/js/utils/groupUtils';\nimport libraryProcessManager from 'app/js/managers/libraryProcessManager';\n\nexport default class CCDApi {\n    constructor(env) {\n        this._environment = env;\n        this._initialized = false;\n        this._listenerCallbacks = new Set();\n    }\n\n    _initPromise = new Promise((res) => {\n        this._markInit = () => {\n            this._initialized = true;\n            res();\n        };\n    });\n\n    _loadedPromise = new Promise(res => {\n        this._markLoaded = res;\n    });\n\n    /*\n        init function should:\n        - store the current CCD context (X)\n        - set the locale and theme (X)\n        - register web components (X)\n        - connect to libraries process (?) (initializing libraryManager will connect to libraries process)\n    */\n    init(context, vulcanInterface, themeInfo, displayLocale = 'en_US') {\n        if (this._initialized) {\n            return Promise.resolve();\n        }\n\n        if (!context || !themeInfo || !vulcanInterface) {\n            throw new Error('A Vulcan instance, theme, and context must be provided.');\n        }\n\n        this._environment.setVulcanInterface(vulcanInterface);\n\n        defineElement('library-list-view', LibraryListViewComponent);\n        defineElement('library-contents-view', LibraryContentsViewComponent);\n        defineElement('library-custom-dialog-view', LibraryCustomDialogViewComponent);\n        defineElement('library-info-view', LibraryInfoPanelViewComponent);\n        defineElement('library-personal-view', LibraryYoursViewComponent);\n        defineElement('library-teams-view', LibraryTeamsViewComponent);\n\n        reaction(() => libraryManager.libraries.length, () => {\n            for (const callback of this._listenerCallbacks) {\n                callback();\n            }\n        });\n\n        // save current ccd context\n        this.ccdContext = context;\n\n        return this._environment.updateHostInfo(displayLocale, themeInfo).then(() => {\n            // Init has been called, so start loading libraries\n            this._markInit();\n\n            return {\n                '/libraries/*': {\n                    components: {\n                        content: {\n                            tagName: 'library-contents-view',\n                            keyBindings: {\n                                // TODO: add any keybindings overridden in the list contents\n                            }\n                        },\n                        list: {\n                            tagName: 'library-list-view',\n                            keyBindings: {\n                                // TODO: add any keybindings overridden in the list view\n                            }\n                        },\n                        yourlibrary: {\n                            tagName: 'library-personal-view',\n                            keyBindings: {\n                                // TODO: add any keybindings overridden in personal view\n                            }\n                        },\n                        teamlibrary: {\n                            tagName: 'library-teams-view',\n                            keyBindings: {\n                                // TODO: add any keybindings overridden in teams view\n                            }\n                        }\n                    }\n                }\n            };\n        });\n    }\n\n    openBrowseLibs() {\n        this._environment.openBrowseMore();\n    }\n\n    openPublicLibs() {\n        this._environment.openPublicLibs();\n    }\n\n    createNewLibrary(teamId) {\n        this._environment.openCreateNewLibraryDialog(teamId);\n    }\n\n    updateLocale(locale) {\n        this._environment.updateHostInfo(locale, undefined);\n    }\n\n    /*\n    This is the method CCD will call to update the theme within the libraries panel\n    LIGHT THEME OBJECT: {\n        panelBackgroundColor: { color: { alpha: 255, green: 245, blue: 245, red: 245 } }\n    }\n    DARKEST THEME OBJECT: {\n        panelBackgroundColor: { color: { alpha: 255, green: 50, blue: 50, red: 50 } }\n    }\n    */\n    updateTheme(theme) {\n        this._environment.updateHostInfo(undefined, theme);\n    }\n\n    waitOnInit() {\n        return this._initPromise;\n    }\n\n    getSyncState() {\n        return libraryManager.syncStatus;\n    }\n\n    sync() {\n        return libraryManager.sync();\n    }\n\n    // Returns the first element from the default/current library\n    getDefaultElement() {\n        if (!libraryManager.areLibrariesLoaded || libraryManager.libraries.length === 0) {\n            return { libraryId: undefined, libraryCount: 0 };\n        }\n\n        const library = libraryManager.getDefaultLibrary();\n        const sections = viewState.viewByState === 'group'\n            ? getLibraryCustomGroupsTree(library).root.children\n            : elementConfiguration.groupElementsByType(library.elements, viewState.elementSortState, viewState.elementSortDescendingState);\n\n        for (const section of sections) {\n            const firstElement = viewState.viewByState === 'group' ? findFirstElement(section.item, library.elements) : section.children && section.children[0];\n            if (firstElement) {\n                return { libraryId: library.id, id: firstElement.id, libraryCount: libraryManager.libraries.length };\n            }\n        }\n\n        // If there is no element, just return the library\n        return { libraryId: library.id, libraryCount: libraryManager.libraries.length };\n    }\n\n    getLibraryByAssetId(assetId) {\n        return libraryManager.getLibraryByAssetId(assetId);\n    }\n\n    async asyncGetLibraryByAssetId(assetId) {\n        // Note: Some clients pass in malformed asset ids\n        const lowerCaseAssetId = assetId.toLowerCase();\n        await libraryManager.waitForLibrariesLoaded();\n        return libraryManager.libraries.find(library => library.assetId && library.assetId.toLowerCase() === lowerCaseAssetId);\n    }\n\n    hasLibrariesFromOtherTeams() {\n        return Boolean(libraryManager.libraries.find(library => library.team && !libraryManager.platformFolders.find(team => team.id === library.team.id)));\n    }\n\n    addLibraryChangeListener(callback) {\n        this._listenerCallbacks.add(callback);\n    }\n\n    removeLibraryChangeListener(callback) {\n        this._listenerCallbacks.delete(callback);\n    }\n\n    /**\n     * Asynchronously checks if the process is running.\n     * @returns {Promise<boolean>} Promise that resolves to true if process is running, false otherwise.\n     */\n    isProcessRunning() {\n        if (!this.ccdContext) {\n            return Promise.reject(new Error('CCDApi is not initialized'));\n        }\n        return libraryProcessManager.isProcessRunning();\n    }\n\n    /**\n     * Asynchronously checks if syncing is enabled.\n     * @returns {Promise<boolean>} Promise that resolves to true if syncing is enabled, false otherwise.\n     */\n    isSyncingEnabled() {\n        if (!this.ccdContext) {\n            return Promise.reject(new Error('CCDApi is not initialized'));\n        }\n        return libraryProcessManager.isSyncingEnabled();\n    }\n\n    /**\n     * Requests Process to enable/disable syncing.\n     * @param {boolean} enabled - true to enable syncing, false to disable syncing.\n     */\n    setSyncingEnabled(enabled) {\n        if (!this.ccdContext) {\n            throw new Error('CCDApi is not initialized');\n        }\n        libraryProcessManager.setSyncingEnabled(enabled);\n    }\n\n    /**\n     * SyncingEnabledChanged message callback.\n     *\n     * @callback syncingEnabledChangedCallback\n     * @param {boolean} current state of syncing enabled.\n     */\n\n    /**\n     * Allows attaching a listener to be notified when syncing enabled is modified.\n     * @param {syncingEnabledChangedCallback} callback function that will be called when syncing enabled is modified.\n     */\n    addSyncingEnabledChangedListener(callback) {\n        if (!this.ccdContext) {\n            throw new Error('CCDApi is not initialized');\n        }\n        libraryProcessManager.addSyncingEnabledChangedListener(callback);\n    }\n\n    /**\n     * Allows removing previously attached listener.\n     * @param {syncingEnabledChangedCallback} callback function that was previously added with addSyncingEnabledChangedListener.\n     */\n\n    removeSyncingEnabledChangedListener(callback) {\n        if (!this.ccdContext) {\n            throw new Error('CCDApi is not initialized');\n        }\n        libraryProcessManager.removeSyncingEnabledChangedListener(callback);\n    }\n\n    /**\n     * Navigates to a library by assetId.\n     * @param {string} assetId - The assetId of the library to navigate to.\n     */\n    async navigateToLibrary(assetId) {\n        try {\n            // If the Process isn't running, we can't navigate to a library.\n            // Therefore, we need to navigate to all libraries to launch it and\n            // to show a spinner while we launch it.\n            if (!(await this.isProcessRunning())) {\n                this._environment.navigateToAllLibraries();\n            }\n\n            // Then, we check whether the initial libraries have been loaded.\n            // If they haven't, that means the Process is still launching.\n            when(() => libraryManager.areLibrariesLoaded, async () => {\n                // Finally, we resolve the library against the cloud storage.\n                // If it doesn't exist in the cache, we hit the storage services.\n                // If we can't find the library, we navigate to all libraries.\n                const library = await libraryManager.resolveLibraryByAssetId(assetId);\n                this._environment.navigateToLibrary(library);\n            });\n        } catch (e) {\n            // eslint-disable-next-line no-console\n            console.error('Error navigating to library:', e);\n            // eslint-disable-next-line no-console\n            console.info('Navigating to all libraries...');\n            this._environment.navigateToAllLibraries();\n        }\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { observable } from 'mobx';\n\n@observer\nexport default class CCDAutoSizer extends React.Component {\n    static propTypes = {\n        children: PropTypes.func.isRequired,\n    };\n\n    @observable height = 0;\n    @observable width = 0;\n    timeout = null;\n\n    componentDidMount() {\n        this.resizeObserver = new ResizeObserver(() => this.handleResize());\n        this.resizeObserver.observe(this.contentBox);\n        this.handleResize();\n    }\n\n    componentWillUnmount() {\n        this.resizeObserver.disconnect();\n    }\n\n    handleResize = () => {\n        if (this.timeout) {\n            clearTimeout(this.timeout);\n        }\n\n        this.timeout = setTimeout(() => {\n            this.height = this.contentBox?.clientHeight;\n            this.width = this.contentBox?.clientWidth;\n        }, 100);\n    };\n\n    render() {\n        const {\n            children,\n        } = this.props;\n\n        return (\n            <div\n                ref={ref => (this.contentBox = ref)}\n                style={{\n                    height: '100%',\n                    width: '100%'\n                }}\n            >\n                {children({ height: this.height, width: this.width })}\n            </div>\n        );\n    }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"TooltipContainer\":\"TEu\",\"Tooltip\":\"fy7\"};","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport classNames from 'classnames';\nimport Tooltip from '@torq-native/react-spectrum/Tooltip';\nimport styles from './SpectrumTooltip.scss';\n\nconst TOOLTIP_EASE_IN = 1000; // 1 sec\nconst TOOLTIP_EASE_OUT = 7000; // 7 sec\n\n@observer\nexport default class SpectrumTooltip extends React.Component {\n    static defaultProps = {\n        content: '',\n        delay: TOOLTIP_EASE_IN,\n        placement: 'top'\n    };\n\n    static propTypes = {\n        children: PropTypes.node,\n        featureId: PropTypes.string,\n        content: PropTypes.array,\n        delay: PropTypes.number,\n        placement: PropTypes.string,\n        disable: PropTypes.bool,\n        className: PropTypes.string\n    };\n\n    @observable isOpen = false;\n\n    showTooltip = () => {\n        this.isOpen = true;\n        if (this._visibleTimer) {\n            clearTimeout(this._visibleTimer);\n        }\n        this._visibleTimer = setTimeout(this.hideTooltip, TOOLTIP_EASE_OUT);\n    }\n\n    hideTooltip = () => {\n        this.isOpen = false;\n        if (this._visibleTimer) {\n            clearTimeout(this._visibleTimer);\n        }\n        this._visibleTimer = undefined;\n    }\n\n    // We can't use mouseEnter, because react will only listen to events on the document\n    // and it gets eaten by the webcomponent boundary\n    handleMouseOver = (event) => {\n        event && event.stopPropagation();\n        // show the tooltip after 1s\n        this._visibleTimer = setTimeout(this.showTooltip, this.props.delay);\n    }\n\n    get tooltipContent() {\n        return this.props.content.map((contentText, index) => {\n            if (contentText && contentText.divider) {\n                return <div key={ index.toString() } className=\"panel-tooltip-divider\" />;\n            }\n            return <div key={ index.toString() } className=\"tooltip-content\">{ contentText }</div>;\n        });\n    }\n\n    // TODO [CCXC-20893] -- Convert CCD to use the spectrum-wrapper Tooltip\n    // We should do this so that we don't have to maintain this component anymore and are ready for when CCD migrates to SWC\n    render() {\n        return (<div className={ classNames('tooltip-wrapper-container', this.props.className, styles.TooltipContainer) } onMouseOver={ this.handleMouseOver } onMouseOut={ this.hideTooltip } onMouseDown={ this.hideTooltip }>\n            { this.props.children }\n            { !this.props.disable && <Tooltip className={ classNames('tooltip-wrapper', styles.Tooltip) } placement={ this.props.placement } open={ this.isOpen } >\n                { this.tooltipContent }\n            </Tooltip> }\n        </div>);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { VulcanMessage as CEPVulcanMessage } from 'app/js/interface/cep_libs/Vulcan';\nimport debugLog from 'app/js/utils/debugLog';\nimport BaseVulcanInterface from './BaseVulcanInterface';\nimport { base64ToUtf8, utf8ToBase64 } from 'app/js/utils/encodingUtils';\n\nexport default class CCDVulcanInterface extends BaseVulcanInterface {\n    constructor() {\n        super();\n\n        // Needed to use CEPVulcanMessage\n        window.cep = window.cep || {\n            encoding: {\n                convertion: {\n                    b64_to_utf8: base64ToUtf8,\n                    utf8_to_b64: utf8ToBase64\n                }\n            }\n        };\n    }\n\n    setVulcanInterface(vulcanInterface) {\n        this._vulcanInterface = vulcanInterface;\n    }\n\n    /**\n     Control Lib APIs\n     **/\n\n    isCCLibProcessInstalled() {\n        return this._vulcanInterface.isAppInstalledEx(this.ccLibProcessSAPCode);\n    }\n\n    isCCLibProcessRunning() {\n        return this.isAppRunningEx(this.ccLibProcessSAPCode);\n    }\n\n    isAppRunningEx(appId) {\n        return this._vulcanInterface.isAppRunningEx(appId);\n    }\n\n    launchAppEx(appId) {\n        return new Promise(resolve => {\n            this._vulcanInterface.launchAppEx(appId, true).then(result => {\n                resolve(result);\n            });\n        });\n    }\n\n    launchCCLibProcess() {\n        return new Promise(resolve => {\n            this._vulcanInterface.launchAppEx(this.ccLibProcessSAPCode, false, '');\n            resolve();\n        });\n    }\n\n    addMessageListener(type, handler) {\n        debugLog.log('Vulcan: Add Listener: ' + type);\n        handler.wrapper = (response, message) => {\n            handler(message, response.appId, response.appVersion);\n        };\n        this._vulcanInterface.addMessageListener(type, handler.wrapper);\n    }\n\n    removeMessageListener(type, handler) {\n        debugLog.log('Vulcan: Remove Listener: ' + type);\n        this._vulcanInterface.removeMessageListener(type, handler?.wrapper);\n    }\n\n    // Payload must be a string\n    sendMessage(type, payload, { payloadType = 'base64' } = {}) {\n        debugLog.log('Vulcan: Send Message: ' + type);\n\n        const message = new CEPVulcanMessage(type);\n        if (payloadType === 'json') {\n            message.data = JSON.stringify(payload);\n        } else if (payloadType === 'base64') {\n            message.setPayload(payload);\n        }\n        this._vulcanInterface.dispatchMessage(message);\n    }\n}\n\nexport {\n    CEPVulcanMessage\n};\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2016 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport BaseEnvironment, { supportedLocales } from './BaseEnvironment';\nimport CCDApi from 'app/js/environments/ccd/CCDApi';\nimport CCDAutoSizer from './ccd/CCDAutoSizer';\nimport SpectrumTooltip from 'app/js/components/spectrum/SpectrumTooltip';\nimport SpectrumCircleLoader from 'app/js/components/spectrum/SpectrumCircleLoader';\nimport { computed, reaction, observable } from 'mobx';\nimport translationManager, { translate } from 'app/js/managers/translationManager';\nimport configuration from 'app/js/config/configuration';\nimport viewState from 'app/js/state/viewState';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport { copyOrMoveElements, createGroup, getLibrarySharingString, getTeamLibraryPlatformFolder } from 'app/js/utils/libraryUtils';\nimport { isBrandLibrary } from 'app/js/utils/brandUtils';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport { addElementsFromFileDialog } from 'app/js/utils/addElementUtils';\nimport { getLoadingErrorMessage, getErrorLink } from 'app/js/utils/errorUtils';\nimport metrics from 'app/js/interface/metrics';\nimport { doCopyOrMoveElements, getMenuItems } from 'app/js/menus/elementContextMenu';\nimport { expressSharingURL, fetchBrowseTeamsURL, launchFollowLibraryURL } from 'app/js/utils/linkUtils';\nimport imsInterface from 'app/js/interface/imsInterface';\nimport CCDVulcanInterface, { CEPVulcanMessage } from 'app/js/interface/vulcan/CCDVulcanInterface';\nimport UXPLibraryContentsView from 'app/js/environments/uxp/UXPLibraryContentsView';\nimport appState from 'app/js/appState';\nimport dialogManager from '../managers/dialogManager';\nimport { createTemplateIfNecessary } from 'app/js/components/web-components/util';\nimport themeManager from '../managers/themeManager';\nimport { HybridDriver, LocalDriver, ccdConnector } from '@cclibraries/cc-libraries-js';\nimport { base64ToUtf8, utf8ToBase64 } from 'app/js/utils/encodingUtils';\nimport libraryProcessManager from '../managers/libraryProcessManager';\nimport localSettings from 'app/js/config/localSettings';\nimport featureFlags from '../config/featureFlags';\n\n// Temp: IMSLib should be exposed through CCD\nclass IMSLib {\n    constructor(ccdApi) {\n        this._ccdApi = ccdApi;\n    }\n\n    createRefEx(imsEndpoint) {\n        return { endpoint: imsEndpoint };\n    }\n\n    fetchAccessToken(imsRef, clientId, clientSecret, userId, serviceId, scopes, callback) {\n        const profile = this._ccdApi.ccdContext.imsData;\n        if (profile && profile.accessToken) {\n            profile.accessToken()\n                .then(access_token => callback(null, { access_token }))\n                .catch(err => callback(err));\n            return;\n        }\n        return libraryManager.getAccessToken(userId, clientId, clientSecret, scopes)\n            .then(data => callback(null, data), callback);\n    }\n}\n\nfunction mapToContextMenu(items) {\n    return items.map(item => ({\n        id: item.id,\n        isDivider: item.divider || false,\n        label: translate(item.label),\n        onClick: item.onClick,\n        isDisabled: item.enableMenu === false,\n        isSelected: item.checked || item.isSelected,\n        subMenu: item.menuItems ? mapToContextMenu(item.menuItems) : undefined\n    }));\n}\n\nconst TOOLBAR_ITEMS_TO_OMIT = [ 'DL_RENAME', 'DL_DELETE', 'DL_DUPLICATE_ITEM', 'DL_DUPLICATE_SELECTED_ITEMS' ];\nconst TOOLBAR_ITEMS_TO_OVERWRITE = [ 'DL_COPY_SELECTED_ITEMS', 'DL_COPY_ITEM', 'DL_MOVE_SELECTED_ITEMS', 'DL_MOVE_ITEM' ];\n\nconst NAVBAR_HEIGHT = 42;\nconst TOOLBAR_MENU_RIGHT_PADDING = 10;\nconst TOOLBAR_ICON_HEIGHT = 32;\nconst TOOLBAR_MENU_TOP_PADDING = 65;\n\nexport default class CCDEnvironment extends BaseEnvironment {\n\n    /**\n     * Check whether we're in the CCD environment\n     * @returns {boolean}\n     */\n    static check() {\n        return window.navigator.userAgent.includes('CreativeCloud');\n    }\n\n    _hostEnvironment = {\n        appName: 'ACCC',\n        appId: 'ACCC',\n        appVersion: this.getAppVersionFromUserAgent(),\n        appLocale: 'en_US',\n        appUILocale: 'en_US',\n    };\n    // TODO [CCXC-20893] -- Remove this override and convert CCD to use the spectrum-wrapper Tooltip\n    // We should do this so that we don't have to maintain this component anymore and are ready for when CCD migrates to SWC\n    Tooltip = SpectrumTooltip;\n    AutoSizer = CCDAutoSizer;\n    ProgressBar = SpectrumCircleLoader;\n    SmallSpinner = () => <SpectrumCircleLoader size=\"small\" indeterminate />;\n    supportsFileSystem = false;\n    vulcanInterface = new CCDVulcanInterface();\n    type = 'CCD';\n    ccdAPI = new CCDApi(this);\n    IMSLib = new IMSLib(this.ccdAPI);\n    excludeDocumentRoot = true;\n    responsiveLayout = true;\n    supportsNotes = false;\n    supportsExportElement = true;\n    disableGPUTooltips = true;\n    recolorLightTextElements = false;\n    canPlaceElements = false;\n    enableDragOutsideProduct = true;\n    capitalizeCreateLibraryHeader = true;\n    customCreateLibraryHeader = 'DL_NEW_LIBRARY';\n\n    dialogOverrides = {\n        confirm: (params) => this.showDialog('confirm', {\n            title: params.title,\n            confirmLabel: params.okText,\n            cancelLabel: translate('DL_CANCEL'),\n            content: params.message,\n            onConfirm: params.onClickOK\n        }),\n        dropFiles: () => this.showDialog('confirm', {\n            title: translate('DL_DESIGN_LIBRARY_NATIVE_FILE_SIZE_TITLE'),\n            varient: 'error',\n            confirmLabel: translate('DL_OK'),\n            content: translate('DL_DESIGN_LIBRARY_NATIVE_FILE_SIZE_MESSAGE'),\n            onConfirm: undefined,\n            cancelLabel: undefined\n        }),\n        pathViewOnboarding: () => { },\n        rootViewOnboardingPopover: () => { },\n        firstEnteredLibraryOnboardingPopoverTour: () => { },\n        quotaWarningPopover: () => { }\n    };\n\n    ElementDragId = 'com.adobe.cclibraries.dnd.elements';\n\n    // Use UXPLibraryContents view to take advantage of uxp-optimized's Virtualizer (better than react-virtualized).\n    LibraryContentsView = UXPLibraryContentsView;\n\n    @observable isContentViewMounted = false;\n    @observable isLibrariesViewMounted = false;\n\n    /**\n     * Tracks the toast opened via {@link showToast()}.\n     * @type {{ id: string, referenceId: string | undefined }}\n     */\n    _openToast;\n\n    @computed get isAnyViewMounted() {\n        return this.isContentViewMounted || this.isLibrariesViewMounted;\n    }\n\n    get isOnline() {\n        return !!window.ccdOnline;\n    }\n\n    get cloudDriverConnector() {\n        return async () => {\n            return {\n                env: this.imsEnvironment,\n                token: await this.imsProfile.accessToken(),\n                refreshAccessToken: this.imsProfile.accessToken.bind(this.imsProfile)\n            };\n        };\n    }\n\n    get ccLibrariesDriver() {\n        if (!this._ccLibrariesDriver) {\n            // Needed to use CEPVulcanMessage\n            window.cep = window.cep || {\n                encoding: {\n                    convertion: {\n                        b64_to_utf8: base64ToUtf8,\n                        utf8_to_b64: utf8ToBase64\n                    }\n                }\n            };\n\n            this._ccLibrariesDriver = localSettings.getDebugValue('jsapiHybridDriver')\n                ? this.hybridDriver\n                : new LocalDriver(ccdConnector(this._rawVulcanInterface, CEPVulcanMessage));\n        }\n\n        return this._ccLibrariesDriver;\n    }\n\n    get hybridDriver() {\n        return new HybridDriver(\n            ccdConnector(this._rawVulcanInterface, CEPVulcanMessage),\n            this.cloudDriverConnector\n        );\n    }\n\n    get imsProfile() {\n        return this.ccdAPI.ccdContext.imsData;\n    }\n\n    get imsEnvironment() {\n        return this.imsProfile?.environment === 'stage' ? 'staging' : 'production';\n    }\n\n    get imsUserId() {\n        return this.imsProfile?.userId;\n    }\n\n    getAppVersionFromUserAgent() {\n        const result = /CreativeCloud\\/([0-9.]+)/.exec(window.navigator.userAgent);\n        return result && result[1];\n    }\n\n    setContextMenuPositionEventHandler = () => {\n        window.addEventListener('contextmenu', (mouseEvent) => {\n            const position = {\n                x: mouseEvent.clientX,\n                y: mouseEvent.clientY\n            };\n\n            viewState.setContextMenuPositionState(position);\n        }, true);\n    };\n\n    @computed get _availableActions() {\n        if (!libraryManager.currentLibrary || libraryManager.currentLibrary.isDeletedFromServer) {\n            return { actions: [], moreActions: [] };\n        }\n\n        const actions = [];\n\n        if (viewState.isLibraryWritable(libraryManager.currentLibrary) && !elementSelectionState.selection.length) {\n            const items = [\n                {\n                    id: 'add',\n                    label: translate('DL_UPLOAD_FILE'),\n                    onClick: () => addElementsFromFileDialog(libraryManager.currentLibrary, 'Toolbar'),\n                },\n                {\n                    id: 'createGroup',\n                    label: translate('DL_CREATE_NEW_GROUP'),\n                    onClick: () => {\n                        const newGroup = createGroup(libraryManager.currentLibrary, translate('DL_NEW_GROUP_NAME'));\n                        viewState.setViewByState('group');\n                        elementSelectionState.revealGroup(newGroup);\n                        appState.panel.viewManager.startRename(newGroup);\n                    },\n                }\n            ];\n            const menu = mapToContextMenu(items);\n            actions.push(\n                {\n                    iconComponentID: 'add',\n                    isCTA: true,\n                    label: translate('DL_ADD_ELEMENT'),\n                    onClick: (mouseEvent) => {\n                        let posX = mouseEvent.clientX, posY = mouseEvent.clientY;\n                        if (!posX && !posY) {\n                            const buttonPos = document.activeElement.getBoundingClientRect();\n                            posX = buttonPos.x;\n                            posY = buttonPos.y;\n                        }\n                        viewState.setContextMenuPositionState({\n                            x: posX,\n                            y: posY\n                        });\n                        this.setContextMenu(menu);\n                    },\n                },\n            );\n        }\n\n        const firstElement = elementSelectionState.selection[0];\n\n        switch (elementSelectionState.selection.length) {\n        case 0:\n            break;\n        case 1:\n            if (viewState.isLibraryWritable(firstElement.library)) {\n                actions.push(\n                    {\n                        iconComponentID: 'rename',\n                        label: translate('DL_RENAME'),\n                        onClick: () => {\n                            metrics.setExtraEventMetrics('updateElement', { content: { category: 'Toolbar' } });\n                            elementSelectionState.revealElement(firstElement);\n                            appState.panel.viewManager.startRename(firstElement);\n                        }\n                    }\n                );\n            }\n        // eslint-disable-next-line no-fallthrough\n        default:\n            if (viewState.isLocked(libraryManager.currentLibrary)) {\n                break;\n            }\n            if (viewState.isLibraryWritable(elementSelectionState.selection[0].library)) {\n                if (libraryManager.currentLibrary.elements.length + elementSelectionState.selection.length <= libraryManager.MAX_ELEMENTS) {\n                    actions.push(\n                        {\n                            iconComponentID: 'duplicate',\n                            label: translate('DL_DUPLICATE_ITEM'),\n                            onClick: () => {\n                                metrics.setExtraEventMetrics('copyElement', { content: { category: 'Toolbar' } });\n                                copyOrMoveElements(false, elementSelectionState.selection, libraryManager.currentLibrary, undefined, true, 'Toolbar').then(() => {\n                                    metrics.clearExtraEventMetrics('copyElement');\n                                });\n                            }\n                        }\n                    );\n                }\n\n                actions.push({\n                    iconComponentID: 'delete',\n                    label: translate('DL_DELETE'),\n                    onClick: () => {\n                        const count = elementSelectionState.selection.length;\n\n                        metrics.setExtraEventMetrics('removeElement', { content: { category: 'Toolbar' } });\n                        libraryManager.deleteElements(elementSelectionState.selection);\n                        elementSelectionState.setSelection();\n\n                        if (count > 0) {\n                            metrics.reportEvent('Element Operations', 'Element', 'click', 'delete', {\n                                event: {\n                                    count,\n                                    value: 'agg'\n                                }, content: { category: 'Toolbar' }\n                            });\n                        }\n                    }\n                });\n            }\n        }\n\n        const menuItems = getMenuItems(elementSelectionState.selection).reduce((memo, action) => {\n            // TODO: It would be cleaner to just add a filter parameter to getMenuItems that gets\n            // passed through to pushMenuGroup so you don't have to walk through and adjust the menu here.\n            if (action.divider && memo[memo.length - 1] && memo[memo.length - 1].divider) {\n                return memo;\n            }\n\n            // With the copy move picker, we need to define the location for the menu to show up.\n            // We can figure out the location based on the number of items and the width of the panel.\n            if (TOOLBAR_ITEMS_TO_OVERWRITE.includes(action.label)) {\n                const menuY = (TOOLBAR_ICON_HEIGHT * (actions.length + 1)) + TOOLBAR_MENU_TOP_PADDING + NAVBAR_HEIGHT;\n                const pickerWidth = configuration.currentProduct.config.copyMovePickerWidthOverride ?? configuration.DEFAULT_SELECT_TARGET_POPOVER_WIDTH;\n                memo.push({\n                    ...action,\n                    onClick: () => dialogManager.openDialog('copyOrMove', {\n                        items: elementSelectionState.selection,\n                        x: this.getPanelWidth() - pickerWidth - TOOLBAR_MENU_RIGHT_PADDING,\n                        y: menuY,\n                        isMove: action.label.includes('DL_MOVE'),\n                        copyMoveAction: doCopyOrMoveElements\n                    })\n                });\n            } else if (!TOOLBAR_ITEMS_TO_OMIT.includes(action.label)) {\n                memo.push(action);\n            }\n\n            return memo;\n        }, []);\n\n        if (menuItems.length && menuItems[menuItems.length - 1] && menuItems[menuItems.length - 1].divider) {\n            menuItems.pop();\n        }\n\n        if (menuItems.length && menuItems[0] && menuItems[0].divider) {\n            menuItems.unshift();\n        }\n\n        return { actions, moreActions: mapToContextMenu(menuItems) };\n    }\n\n    @computed get elementDetailMode() {\n        return viewState.gridZoomFactor === configuration.GRID_TYPE_LARGE ? 'type' : undefined;\n    }\n\n    constructor(w) {\n        super(w);\n        this._window = window;\n        window.__disable_swc__ = true;\n        this.isViewMounted = false;\n        this.delayProcessLaunch = true;\n\n        reaction(() => this.isAnyViewMounted, value => {\n            this.setIsViewMounted(value);\n        });\n\n    }\n\n    /**\n     * Initialize the environment. This is asynchronous because we need to load the localization strings\n     *\n     * @returns {Promise}\n     */\n    init() {\n        const promise = this.ccdAPI.waitOnInit();\n\n        promise.then(() => {\n            libraryProcessManager.addSyncStateChangedListener(state => {\n                if (!libraryProcessManager.isConnected()) {\n                    this.setSyncState(state);\n                }\n            });\n            reaction(() => this.isContentViewMounted && libraryManager.currentLibrary && this._availableActions, () => {\n                const { actions, moreActions } = this._availableActions;\n                const position = elementSelectionState.selection.length ? 'top' : 'middle';\n                this.setHeader();\n                this.ccdAPI.ccdContext.setSelectionData({ infoPanelComponent: 'library-info-view', availableActions: actions, moreActions, count: elementSelectionState.selection.length, position, deselectCallback: () => elementSelectionState.setSelection() });\n            });\n        });\n\n        return promise;\n    }\n\n    debugLog(message) {\n        // Always log to console in CCD (even in production), because this gets\n        // routed to CCD's logs.\n        // eslint-disable-next-line no-console\n        console.info(message);\n    }\n\n    /**\n     * Ask CCD if 'Marketplace' tab for finding Starter Kits is enabled yet?\n     */\n    getIsStarterKitsAvailable() {\n        return this.ccdAPI.ccdContext.isStarterKitsAvailable();\n    }\n\n    /**\n     * Send command to CCD to navigate to the 'Marketplace' tab to browse Starter Kits\n     * This will only do anything if `getIsStarterKitsAvailable` is true\n     */\n    routeToStarterKits() {\n        // When we route to starter kits, we first want to change the route of the sideNav to the default view.\n        // Otherwise, we'll get unexpected behavior when we click 'Find public libraries' again for a second\n        // consecutive time in a point product.\n        this.ccdAPI.ccdContext.routeToStarterKits();\n    }\n\n    /**\n     * Send command to CCD to navigate to a specific library\n     * If no libraryId is passed, will default to the generic libraries route\n     * @param {Library} library\n     */\n    navigateToLibrary(library) {\n        if (library) {\n            super.navigateToLibrary(library);\n            this.ccdAPI.ccdContext.setRoute(`/assets/libraries/${library.id}`);\n        } else {\n            this.navigateToAllLibraries();\n        }\n    }\n\n    /**\n     * Send command to CCD to navigate to a your libraries\n     */\n    navigateToAllLibraries() {\n        this.ccdAPI.ccdContext.setRoute('/assets/libraries');\n    }\n\n    /**\n     * Provide a way for CCD to invoke new Library Creation\n     * This will be invoked when Create New Library is pressed in Teams view header\n     * @param {string} teamId\n     */\n    openCreateNewLibraryDialog(teamId) {\n        let defaultTeam = teamId ? libraryManager.platformFolders.find(folder => folder.id === teamId) : undefined;\n        if (defaultTeam && !defaultTeam.isWritable) {\n            // Only if the user has edit permission on the team, team should be selected.\n            defaultTeam = undefined;\n        }\n        const onCreate = library => this.navigateToLibrary(library);\n        dialogManager.openDialog('createLibrary', { defaultTeam, onCreate });\n    }\n\n    _waitTillAccessTokenIsAvailable() {\n        const profile = this.imsProfile;\n        if (profile) {\n            return Promise.resolve();\n        }\n        return libraryManager.waitForCollectionsLoaded();\n    }\n\n    openBrowseMore() {\n        this._waitTillAccessTokenIsAvailable().then(() => {\n            return fetchBrowseTeamsURL().then(teamUrl => {\n                this.showWebArticle(teamUrl, {\n                    title: translate('DL_MORE_LIBRARY_BROWSE'),\n                    timeout: 30000,\n                    callbacks: {\n                        onExit: () => {\n                            metrics.reportEvent('Library', 'Find Team Libraries', 'click', 'done');\n                        }\n                    }\n                });\n            });\n        }).catch(error => {\n            this.showError(translate('DL_TEAM_LIBRARY_BROWSE_AUTH_ERROR', { assetsSite: imsInterface.getEnvironment().ccwebHost }));\n            metrics.reportError('Operations', 'Browse team libraries', error && error.description, 'ccd-menu', 'browse-library-error', undefined, libraryManager.currentLibrary);\n        });\n    }\n\n    openPublicLibs() {\n        if (this.getIsStarterKitsAvailable()) {\n            metrics.reportEvent('Navigation', 'Library Panel', 'click', 'view-marketplace', { ui: { sequence: 'root-view' } });\n            this.routeToStarterKits();\n        } else {\n            metrics.reportEvent('Navigation', 'Library Panel', 'click', 'view-public-libraries', { ui: { sequence: 'root-view' } });\n            this.openFollowLibrary();\n        }\n    }\n\n    openFollowLibrary() {\n        const followLibraryURL = imsInterface.getEnvironment().followLibrariesGoURL + '?locale=' + this.getLocale();\n        this.showWebArticle(followLibraryURL, {\n            title: translate('DL_LIB_LIST_ONBOARDING_FOLLOW_LIBRARY_WEB_ARICLE_HEADING'),\n            callbacks: {\n                onMessage: message => {\n                    const { action, data } = message || {};\n                    if (action === 'view-public-library') {\n                        const { linkId } = data || {};\n                        if (linkId) {\n                            metrics.reportEvent('Library', 'Follow Public Libraries', 'click', 'library', { event: { value: linkId } });\n                            launchFollowLibraryURL(linkId);\n                        }\n                    }\n                },\n                onExit: () => {\n                    metrics.reportEvent('Library', 'Follow Public Libraries', 'click', 'done');\n                }\n            }\n        });\n    }\n\n    _routeHandlers = [\n        [\n            /^\\/libraries\\/sharesheet\\/([^/]+)\\/([^/]+)$/,\n            (shareAction, libraryId) => {\n                // if CCD is not already running it can take a second for panel state to initialize\n                // and all the libraries to be surfaced in library manager, so we need to re-check\n                const openSharesheet = (retryCount = 0) => {\n                    const desiredLib = libraryManager.getLibraryById(libraryId);\n                    if (desiredLib) {\n                        libraryManager.currentLibrary = desiredLib;\n                        this.showShareSheet(desiredLib, shareAction);\n                        this.navigateToLibrary(desiredLib); // reset the route to not include /sharesheet\n                    } else if (retryCount < 10) {\n                        // Try again after 500ms, but only up to 10 retries\n                        setTimeout(() => openSharesheet(retryCount + 1), 500);\n                    }\n                };\n                openSharesheet();\n            }\n        ],\n        [\n            /^\\/libraries\\/([^/]+)(?:\\/elements\\/([^/]+))?$/,\n            (libraryId, elementId) => {\n                if (libraryId) {\n                    libraryManager.waitForLibrariesLoaded().then(() => {\n                        const library = libraryManager.getLibraryById(libraryId);\n                        if (library) {\n                            libraryManager.currentLibrary = library;\n\n                            if (elementId) {\n                                const element = library.getElementById(elementId, true);\n\n                                if (element) {\n                                    elementSelectionState.revealElement(element);\n                                }\n                            }\n                        }\n                    });\n                }\n            }\n        ]\n    ];\n\n    handleRouteChange(route) {\n        for (const [ matcher, handler ] of this._routeHandlers) {\n            const result = matcher.exec(route);\n            if (result) {\n                handler(...result.slice(1));\n                break;\n            }\n        }\n    }\n\n    setVulcanInterface(vulcanInterface) {\n        this._rawVulcanInterface = vulcanInterface;\n        this.vulcanInterface.setVulcanInterface(vulcanInterface);\n    }\n\n    /**\n     * Sends the showContextMenu command to CCD to show a context menu.\n     * @param {Array} menuItems\n     */\n    setContextMenu(menuItems) {\n        this.ccdAPI.ccdContext.showContextMenu(viewState.contextMenuPositionState, mapToContextMenu(menuItems));\n    }\n\n    /**\n     * Sends the showShareSheet command to CCD to show a share sheet\n     * @param {Object} library\n     * @param {string} shareAction\n     */\n    showShareSheet(library, shareAction) {\n        const enableProjects = !!featureFlags.get('enableProjects');\n        const isTeam = this.isTeamLibrary(library);\n        const assetData = {\n            urn: library.assetId,\n            name: library.name,\n            mimeType: configuration.LIBRARY_TYPE,\n            enableProjectsSharesheet: isTeam && enableProjects,\n            type: isBrandLibrary(library) ? 'expressBrand' : 'expressLibrary',\n            libraryResourceURL: expressSharingURL(!!isBrandLibrary(library), library.assetId) // only used for projects sharing\n        };\n\n        const sharesheetPayload = {\n            assetData,\n            shareAction,\n            shareCapabilities: enableProjects ? [ 'invite', 'getLink' ] : shareAction === 'share' ? [ 'invite' ] : undefined\n        };\n\n        if (isTeam) {\n            const parentFolder = getTeamLibraryPlatformFolder(library);\n            const teamName = parentFolder && parentFolder.name;\n            if (teamName) {\n                this.ccdAPI.ccdContext.showShareSheet({ ...sharesheetPayload, team: { name: teamName, assetId: library.project?.id } });\n                return;\n            }\n        }\n\n        this.ccdAPI.ccdContext.showShareSheet(sharesheetPayload);\n    }\n\n    /**\n     * Sends the setHeader command to CCD to populate the header.\n     * @param {boolean} editMode\n     * @param {boolean} isLibraryAction\n     */\n    setHeader(editMode = false, isLibraryAction) {\n        const excludedActions = [ 'invite' ];\n        const library = libraryManager.currentLibrary;\n        if (!library) {\n            this.ccdAPI.ccdContext.setHeader('libraries', {});\n            return;\n        }\n\n        let actions = appState.panel.libraryActions.getLibraryActions(library, true).filter(action => !excludedActions.includes(action.id));\n        if (!actions.find(x => x.id === 'getLink')) {\n            actions = actions.filter(action => action.id !== 'shareDivider');\n        }\n        const onUserAddShowShareSheet = () => {\n            metrics.reportEvent('Library Operations', 'Collaboration', 'click', 'invite', { content: { category: 'Header' } }, library);\n            this.showShareSheet(library, this.isTeamLibrary(library) ? 'share' : 'invite');\n        };\n\n        const readOnly = Boolean(!library.isWritable || library.toolkitId || library.documentId);\n        const canShare = Boolean(library.isWritable && !library.toolkitId && libraryManager.isSharingEnabled && library.isPushedToServer);\n        const onUserAdd = canShare ? onUserAddShowShareSheet : undefined;\n        const hideViewOnlyLabel = Boolean(library.toolkitId && !viewState.isLocked(library));\n\n        this.ccdAPI.ccdContext.setHeader('libraries', {\n            name: library.name,\n            subTitle: getLibrarySharingString(library),\n            onNameChange: (name) => {\n                name = name.trim();\n                if (name === library.name) {\n                    return;\n                }\n                const folder = library && libraryManager.platformFolders.find(folder => library.parentDirectoryId === folder.id);\n                if (name && !readOnly && appState.panel.libraryActions.validateLibraryName(name, folder, true)) {\n                    metrics.reportEvent('Library Operations', 'Library', 'click', 'rename', { content: { category: isLibraryAction ? 'Header Right Click' : 'Header Click' } });\n                    library.name = name;\n                }\n                this.setHeader();\n            },\n            onUserAdd,\n            moreActions: mapToContextMenu(actions),\n            editMode,\n            readOnly,\n            hideViewOnlyLabel,\n        });\n    }\n\n    /**\n     * Show a toast message in CCD\n     * @param {string} message - message to show\n     * @param {Object} action - should this toast have a button? What should the button do?\n     * @param {Object} data - Raw toast props provided to toastManager.openToast\n     */\n    showToast(message, action, data = {}) {\n        const props = { variant: data.variant || 'success' };\n        if (action) {\n            props.actionLabel = action.label;\n            props.closeOnAction = true;\n            props.onAction = action.onClick;\n        }\n\n        const toastId = this.ccdAPI.ccdContext.showToast(message, props);\n        this._openToast = { id: toastId, referenceId: data.referenceId };\n    }\n\n    /**\n     * Hides the toast in CCD, if the opened toast has the same reference ID.\n     * @param {string | undefined} referenceId The ID of the toast to close\n     */\n    hideToast(referenceId) {\n        if (this._openToast && this._openToast.referenceId === referenceId) {\n            this.ccdAPI.ccdContext.toastStore.hide(this._openToast.id);\n            this._openToast = undefined;\n        }\n    }\n\n    /**\n     * Hides any open toasts.\n     */\n    hideAllToasts() {\n        if (this._openToast) {\n            this.ccdAPI.ccdContext.toastStore.hideAll();\n            this._toast = undefined;\n        }\n    }\n\n    /**\n     * Sends the current sync state to CCD in the correct format\n     * @param {Object} syncState\n     */\n    setSyncState(syncState) {\n        const formatState = () => {\n            if (syncState.state === 'ok') {\n                return 'synced';\n            }\n\n            if (syncState.state === 'error' && syncState.errorType === 'syncDisabled') {\n                return 'paused';\n            }\n            return syncState.state;\n        };\n        const state = formatState();\n        const totalPercentage = syncState.syncProgress === 100 ? undefined : syncState.syncProgress;\n        const formattedData = {\n            status: state,\n            data: {\n                totalPercentage,\n                error: {\n                    errorString: state === 'error' && syncState.errorType ? getLoadingErrorMessage(syncState).replace('<br/> ', '') : undefined,\n                    errorLink: state === 'error' && syncState.errorType ? getErrorLink(syncState) : undefined,\n                    errorType: state === 'error' && syncState.errorType || undefined,\n                }\n            }\n        };\n        //TODO: move call out of if statement once ccd context provides their setSyncState function\n        if (this.ccdAPI.ccdContext.setSyncState) {\n            this.ccdAPI.ccdContext.setSyncState(formattedData);\n        }\n    }\n\n    /**\n     * Sends the showDialog command to CCD to pop up a dialog.\n     * @param {string} type\n     * @param {Object} options\n     */\n    showDialog(type, options) {\n        this.hideDialog();\n        this._currentDialogKey = this.ccdAPI.ccdContext.showDialog(type, options);\n    }\n\n    openCustomDialog() {\n        return this.showDialog('customWebcomponent', { webComponent: 'library-custom-dialog-view', removePadding: viewState.getRemovePadding(), onClose: dialogManager.closeDialog });\n    }\n\n    /**\n     * Sends the hideDialog command to CCD to close a dialog.\n     *\n     */\n    hideDialog() {\n        if (this._currentDialogKey) {\n            this.ccdAPI.ccdContext.hideDialog(this._currentDialogKey);\n            delete this._currentDialogKey;\n        }\n    }\n\n    /**\n     * @param {string} url (required) The URL to open\n     * @param {Object} config (required) Configuration for the WebArticle viewer UI\n     *\n     * config.title: (required) The title for the application window when the WebArticle\n     *               is being shown\n     * config.exitLabel: The label for the button that the user can click to close the\n     *                   WebArticle view (default: 'Done')\n     * config.callbacks.onExit: Called when the web article view is closed\n     * config.callbacks.onMessage: Called when the loaded webpage posts a message through\n     *                             window.parent.postMessage()\n     */\n    showWebArticle(url, config) {\n        this.ccdAPI.ccdContext.showWebArticle(url, config);\n    }\n\n    /**\n     * Sends footer config to host app\n     * @param {Object} footerData\n     */\n    setFooter(footerData) {\n        this.ccdAPI.ccdContext.setFooter(footerData);\n    }\n\n    getRootPanelElement() {\n        return this._currentBaseWebComponent;\n    }\n\n    setCurrentBaseWebComponent(component) {\n        this._currentBaseWebComponent = component;\n    }\n\n    /**\n     * Gets a list of files from the CCD drag/drop api\n     * @returns {Promise} array of file objects\n     */\n    getDragFileList() {\n        const delimiter = this.isWindowsOS() ? '\\\\' : '/';\n        return this.ccdAPI.ccdContext.getDraggedFilePaths().then((paths) => {\n            return Promise.all(paths.map((path) => {\n                return libraryManager.getFileSize(path).then((size) => ({\n                    path,\n                    size,\n                    name: path.split(delimiter).pop()\n                }));\n            }));\n        });\n    }\n\n    /**\n     * Gets a destination path from the CCD API\n     * @returns {Promise}\n     */\n    getSavePath() {\n        return new Promise((res) => this.ccdAPI.ccdContext.showFolderPicker(res, {\n            windowTitle: translate('DL_EXPORT'),\n            promptButton: translate('DL_EXPORT')\n        }));\n    }\n\n    /**\n     * Gets a destination path from the CCD filepicker API to export a library\n     * @param {string} suggestedName The prepopulated name of the file in the dialog.\n     * @returns {Promise} filepath for saving\n     */\n    getFileForSaving(suggestedName) {\n        const options = {\n            windowTitle: translate('DL_EXPORT_LIBRARY'),\n            promptButton: translate('DL_EXPORT'),\n        };\n\n        // Using openFolderPicker instead as ccd-container openSaveDialog is unreliable\n        return this.ccdAPI.ccdContext.filePickerStore.openFolderPicker(options)\n            .then(folders => {\n                const folder = folders.shift();\n                if (folder) {\n                    const slash = this.isWindowsOS() ? '\\\\' : '/';\n                    return { nativePath: folder + slash + suggestedName };\n                } else {\n                    return null;\n                }\n            });\n    }\n\n    /**\n     * Updates the host info for theme and locale\n     * @param {string} locale - en_US, ja_JP, es_MX, etc.\n     * @param {Object} themeInfo - theme color information\n     */\n    updateHostInfo(locale, themeInfo) {\n        const host = this.getHostEnvironment();\n\n        if (themeInfo) {\n            host.appSkinInfo = themeInfo;\n            if (themeManager.isInitialized) {\n                themeManager.updateTheme(themeInfo);\n            }\n            this._notifyEventListeners(configuration.THEME_COLOR_CHANGED_EVENT);\n        }\n\n        if (locale) {\n            host.appUILocale = supportedLocales.includes(locale) ? locale : 'en_US';\n            return this._loadResourceBundle(host.appUILocale).then(() => {\n                translationManager.setStringMap(this._resourceBundle);\n            });\n        }\n\n        return Promise.resolve();\n    }\n\n    /**\n     * Don't render the panel, we just want to give them the API and web components\n     *\n     * @returns {boolean}\n     */\n    shouldRenderPanel() {\n        return false;\n    }\n\n    isLibrariesPanel() {\n        return true;\n    }\n\n    /**\n     * Get the path to the user's data folder. This is where library data is stored.\n     * @returns {string}\n     */\n    getUserDataPath() {\n        return null;\n    }\n\n    /**\n     * Get an object describing the host environment - this includes information about the application name,\n     * version, and background color / theme.\n     *\n     * @returns {Object}\n     */\n    getHostEnvironment() {\n        return this._hostEnvironment;\n    }\n\n    /**\n     * Launch the default web browser and navigate to the supplied URL\n     * @param {string} url URL to launch\n     */\n    launchInBrowser(url) {\n        window.open(url);\n    }\n\n    /**\n     * Show the error message to the end user.\n     * @param {string} error\n     */\n    showError(error) {\n        this.showToast(error, null, { variant: 'warning' });\n    }\n\n    handleClientConnected = error => {\n        if (!error && !this.maintainConnectionToProcess) {\n            libraryProcessManager.disconnectFromProcess();\n            return;\n        }\n        // Per https://jira.corp.adobe.com/browse/CCXC-8310\n        this.ccdAPI.ccdContext.logEvent({\n            'event.workflow': 'Debug',\n            'event.subcategory': 'CC Library',\n            'event.type': error ? 'failure' : 'success',\n            'event.subtype': 'log',\n            'event.error_code': 'ACCC_LIBRARIES_PROCESS_CONNECTION_STATUS',\n            'event.error_type': ''\n        });\n    }\n\n    /**\n     * Execute an extendscript command - this is the primary way we tell the application to do something.\n     *\n     * @param {string} lib - Name of the library (e.g. CORE, PHXS etc).\n     * @param {string} operation\n     * @param {Array} args\n     * @returns {Promise}\n     */\n    exec(lib, operation, args = []) {\n        const command = `${lib}.${operation}`;\n        this.debugLog(`exec ${command} ${args}`);\n        return Promise.reject('not implemented');\n    }\n\n    dispatchEvent() {\n        return 'not implemented';\n    }\n\n    /**\n     * Execute a command in the scope of the application. This is shorthand for\n     * `exec(appCode, operation, args)`.\n     *\n     * @param {string} operation\n     * @param {Array} args\n     * @returns {Promise}\n     */\n    execApp(operation, args) {\n        return this.exec(this._hostEnvironment.appName, operation, args);\n    }\n\n    notifyProductInitialized() {\n        createTemplateIfNecessary();\n        this.ccdAPI._markLoaded();\n    }\n\n    get exports() {\n        return this.ccdAPI;\n    }\n\n    // There is a isTeamLibrary method in libraryUtils.js which currently checks two conditions:\n    //     1. Whether a library is a team/project library.\n    //     2. Whether a library is located in a secret project.\n    //\n    // This method only checks the first condition because the second one is causing a bug in CCD:\n    // https://jira.corp.adobe.com/browse/SHARED-1694. Ideally the other method should only check the\n    // first condition as well, but that's a far larger and riskier refactor that would prevent us from\n    // meeting a tight deadline for MAX 2024.\n    isTeamLibrary(library) {\n        return library.ownership === 'incoming' && (library.ownerType === 'org' || library.project);\n    }\n}\n","/**************************************************************************************************\n*\n* ADOBE SYSTEMS INCORPORATED\n* Copyright 2013 Adobe Systems Incorporated\n* All Rights Reserved.\n*\n* NOTICE:  Adobe permits you to use, modify, and distribute this file in accordance with the\n* terms of the Adobe license agreement accompanying it.  If you have received this file from a\n* source other than Adobe, then your use, modification, or distribution of it requires the prior\n* written permission of Adobe.\n*\n**************************************************************************************************/\n\n/* eslint no-var: off */\n\n/** CSInterface - v7.0.0 */\n\n/**\n * Stores constants for the window types supported by the CSXS infrastructure.\n */\nfunction CSXSWindowType()\n{\n}\n\n/** Constant for the CSXS window type Panel. */\nCSXSWindowType._PANEL = \"Panel\";\n\n/** Constant for the CSXS window type Modeless. */\nCSXSWindowType._MODELESS = \"Modeless\";\n\n/** Constant for the CSXS window type ModalDialog. */\nCSXSWindowType._MODAL_DIALOG = \"ModalDialog\";\n\n/** EvalScript error message */\nvar EvalScript_ErrMessage = \"EvalScript error.\";\n\n/**\n * @class Version\n * Defines a version number with major, minor, micro, and special\n * components. The major, minor and micro values are numeric; the special\n * value can be any string.\n *\n * @param major   The major version component, a positive integer up to nine digits long.\n * @param minor   The minor version component, a positive integer up to nine digits long.\n * @param micro   The micro version component, a positive integer up to nine digits long.\n * @param special The special version component, an arbitrary string.\n *\n * @returns A new \\c Version object.\n */\nfunction Version(major, minor, micro, special)\n{\n    this.major = major;\n    this.minor = minor;\n    this.micro = micro;\n    this.special = special;\n}\n\n/**\n * The maximum value allowed for a numeric version component.\n * This reflects the maximum value allowed in PlugPlug and the manifest schema.\n */\nVersion.MAX_NUM = 999999999;\n\n/**\n * @class VersionBound\n * Defines a boundary for a version range, which associates a \\c Version object\n * with a flag for whether it is an inclusive or exclusive boundary.\n *\n * @param version   The \\c #Version object.\n * @param inclusive True if this boundary is inclusive, false if it is exclusive.\n *\n * @returns A new \\c VersionBound object.\n */\nfunction VersionBound(version, inclusive)\n{\n    this.version = version;\n    this.inclusive = inclusive;\n}\n\n/**\n * @class VersionRange\n * Defines a range of versions using a lower boundary and optional upper boundary.\n *\n * @param lowerBound The \\c #VersionBound object.\n * @param upperBound The \\c #VersionBound object, or null for a range with no upper boundary.\n *\n * @returns A new \\c VersionRange object.\n */\nfunction VersionRange(lowerBound, upperBound)\n{\n    this.lowerBound = lowerBound;\n    this.upperBound = upperBound;\n}\n\n/**\n * @class Runtime\n * Represents a runtime related to the CEP infrastructure.\n * Extensions can declare dependencies on particular\n * CEP runtime versions in the extension manifest.\n *\n * @param name    The runtime name.\n * @param version A \\c #VersionRange object that defines a range of valid versions.\n *\n * @returns A new \\c Runtime object.\n */\nfunction Runtime(name, versionRange)\n{\n    this.name = name;\n    this.versionRange = versionRange;\n}\n\n/**\n* @class Extension\n* Encapsulates a CEP-based extension to an Adobe application.\n*\n* @param id              The unique identifier of this extension.\n* @param name            The localizable display name of this extension.\n* @param mainPath        The path of the \"index.html\" file.\n* @param basePath        The base path of this extension.\n* @param windowType          The window type of the main window of this extension.\n                 Valid values are defined by \\c #CSXSWindowType.\n* @param width           The default width in pixels of the main window of this extension.\n* @param height          The default height in pixels of the main window of this extension.\n* @param minWidth        The minimum width in pixels of the main window of this extension.\n* @param minHeight       The minimum height in pixels of the main window of this extension.\n* @param maxWidth        The maximum width in pixels of the main window of this extension.\n* @param maxHeight       The maximum height in pixels of the main window of this extension.\n* @param defaultExtensionDataXml The extension data contained in the default \\c ExtensionDispatchInfo section of the extension manifest.\n* @param specialExtensionDataXml The extension data contained in the application-specific \\c ExtensionDispatchInfo section of the extension manifest.\n* @param requiredRuntimeList     An array of \\c Runtime objects for runtimes required by this extension.\n* @param isAutoVisible       True if this extension is visible on loading.\n* @param isPluginExtension   True if this extension has been deployed in the Plugins folder of the host application.\n*\n* @returns A new \\c Extension object.\n*/\nfunction Extension(id, name, mainPath, basePath, windowType, width, height, minWidth, minHeight, maxWidth, maxHeight,\n                   defaultExtensionDataXml, specialExtensionDataXml, requiredRuntimeList, isAutoVisible, isPluginExtension)\n{\n    this.id = id;\n    this.name = name;\n    this.mainPath = mainPath;\n    this.basePath = basePath;\n    this.windowType = windowType;\n    this.width = width;\n    this.height = height;\n    this.minWidth = minWidth;\n    this.minHeight = minHeight;\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this.defaultExtensionDataXml = defaultExtensionDataXml;\n    this.specialExtensionDataXml = specialExtensionDataXml;\n    this.requiredRuntimeList = requiredRuntimeList;\n    this.isAutoVisible = isAutoVisible;\n    this.isPluginExtension = isPluginExtension;\n}\n\n/**\n * @class CSEvent\n * A standard JavaScript event, the base class for CEP events.\n *\n * @param type        The name of the event type.\n * @param scope       The scope of event, can be \"GLOBAL\" or \"APPLICATION\".\n * @param appId       The unique identifier of the application that generated the event.\n * @param extensionId     The unique identifier of the extension that generated the event.\n *\n * @returns A new \\c CSEvent object\n */\nexport function CSEvent(type, scope, appId, extensionId)\n{\n    this.type = type;\n    this.scope = scope;\n    this.appId = appId;\n    this.extensionId = extensionId;\n}\n\n/** Event-specific data. */\nCSEvent.prototype.data = \"\";\n\n/**\n * @class SystemPath\n * Stores operating-system-specific location constants for use in the\n * \\c #CSInterface.getSystemPath() method.\n * @returns A new \\c SystemPath object.\n */\nexport function SystemPath()\n{\n}\n\n/** The path to user data.  */\nSystemPath.USER_DATA = \"userData\";\n\n/** The path to common files for Adobe applications.  */\nSystemPath.COMMON_FILES = \"commonFiles\";\n\n/** The path to the user's default document folder.  */\nSystemPath.MY_DOCUMENTS = \"myDocuments\";\n\n/** @deprecated. Use \\c #SystemPath.Extension.  */\nSystemPath.APPLICATION = \"application\";\n\n/** The path to current extension.  */\nSystemPath.EXTENSION = \"extension\";\n\n/** The path to hosting application's executable.  */\nSystemPath.HOST_APPLICATION = \"hostApplication\";\n\n/**\n * @class ColorType\n * Stores color-type constants.\n */\nfunction ColorType()\n{\n}\n\n/** RGB color type. */\nColorType.RGB = \"rgb\";\n\n/** Gradient color type. */\nColorType.GRADIENT = \"gradient\";\n\n/** Null color type. */\nColorType.NONE = \"none\";\n\n/**\n * @class RGBColor\n * Stores an RGB color with red, green, blue, and alpha values.\n * All values are in the range [0.0 to 255.0]. Invalid numeric values are\n * converted to numbers within this range.\n *\n * @param red   The red value, in the range [0.0 to 255.0].\n * @param green The green value, in the range [0.0 to 255.0].\n * @param blue  The blue value, in the range [0.0 to 255.0].\n * @param alpha The alpha (transparency) value, in the range [0.0 to 255.0].\n *      The default, 255.0, means that the color is fully opaque.\n *\n * @returns A new RGBColor object.\n */\nfunction RGBColor(red, green, blue, alpha)\n{\n    this.red = red;\n    this.green = green;\n    this.blue = blue;\n    this.alpha = alpha;\n}\n\n/**\n * @class Direction\n * A point value  in which the y component is 0 and the x component\n * is positive or negative for a right or left direction,\n * or the x component is 0 and the y component is positive or negative for\n * an up or down direction.\n *\n * @param x     The horizontal component of the point.\n * @param y     The vertical component of the point.\n *\n * @returns A new \\c Direction object.\n */\nfunction Direction(x, y)\n{\n    this.x = x;\n    this.y = y;\n}\n\n/**\n * @class GradientStop\n * Stores gradient stop information.\n *\n * @param offset   The offset of the gradient stop, in the range [0.0 to 1.0].\n * @param rgbColor The color of the gradient at this point, an \\c #RGBColor object.\n *\n * @returns GradientStop object.\n */\nfunction GradientStop(offset, rgbColor)\n{\n    this.offset = offset;\n    this.rgbColor = rgbColor;\n}\n\n/**\n * @class GradientColor\n * Stores gradient color information.\n *\n * @param type          The gradient type, must be \"linear\".\n * @param direction     A \\c #Direction object for the direction of the gradient\n                (up, down, right, or left).\n * @param numStops          The number of stops in the gradient.\n * @param gradientStopList  An array of \\c #GradientStop objects.\n *\n * @returns A new \\c GradientColor object.\n */\nfunction GradientColor(type, direction, numStops, arrGradientStop)\n{\n    this.type = type;\n    this.direction = direction;\n    this.numStops = numStops;\n    this.arrGradientStop = arrGradientStop;\n}\n\n/**\n * @class UIColor\n * Stores color information, including the type, anti-alias level, and specific color\n * values in a color object of an appropriate type.\n *\n * @param type          The color type, 1 for \"rgb\" and 2 for \"gradient\".\n                The supplied color object must correspond to this type.\n * @param antialiasLevel    The anti-alias level constant.\n * @param color         A \\c #RGBColor or \\c #GradientColor object containing specific color information.\n *\n * @returns A new \\c UIColor object.\n */\nfunction UIColor(type, antialiasLevel, color)\n{\n    this.type = type;\n    this.antialiasLevel = antialiasLevel;\n    this.color = color;\n}\n\n/**\n * @class AppSkinInfo\n * Stores window-skin properties, such as color and font. All color parameter values are \\c #UIColor objects except that systemHighlightColor is \\c #RGBColor object.\n *\n * @param baseFontFamily        The base font family of the application.\n * @param baseFontSize          The base font size of the application.\n * @param appBarBackgroundColor     The application bar background color.\n * @param panelBackgroundColor      The background color of the extension panel.\n * @param appBarBackgroundColorSRGB     The application bar background color, as sRGB.\n * @param panelBackgroundColorSRGB      The background color of the extension panel, as sRGB.\n * @param systemHighlightColor          The operating-system highlight color, as sRGB.\n *\n * @returns AppSkinInfo object.\n */\nfunction AppSkinInfo(baseFontFamily, baseFontSize, appBarBackgroundColor, panelBackgroundColor, appBarBackgroundColorSRGB, panelBackgroundColorSRGB, systemHighlightColor)\n{\n    this.baseFontFamily = baseFontFamily;\n    this.baseFontSize = baseFontSize;\n    this.appBarBackgroundColor = appBarBackgroundColor;\n    this.panelBackgroundColor = panelBackgroundColor;\n    this.appBarBackgroundColorSRGB = appBarBackgroundColorSRGB;\n    this.panelBackgroundColorSRGB = panelBackgroundColorSRGB;\n    this.systemHighlightColor = systemHighlightColor;\n}\n\n/**\n * @class HostEnvironment\n * Stores information about the environment in which the extension is loaded.\n *\n * @param appName   The application's name.\n * @param appVersion    The application's version.\n * @param appLocale The application's current license locale.\n * @param appUILocale   The application's current UI locale.\n * @param appId     The application's unique identifier.\n * @param isAppOnline  True if the application is currently online.\n * @param appSkinInfo   An \\c #AppSkinInfo object containing the application's default color and font styles.\n *\n * @returns A new \\c HostEnvironment object.\n */\nfunction HostEnvironment(appName, appVersion, appLocale, appUILocale, appId, isAppOnline, appSkinInfo)\n{\n    this.appName = appName;\n    this.appVersion = appVersion;\n    this.appLocale = appLocale;\n    this.appUILocale = appUILocale;\n    this.appId = appId;\n    this.isAppOnline = isAppOnline;\n    this.appSkinInfo = appSkinInfo;\n}\n\n/**\n * @class HostCapabilities\n * Stores information about the host capabilities.\n *\n * @param EXTENDED_PANEL_MENU True if the application supports panel menu.\n * @param EXTENDED_PANEL_ICONS True if the application supports panel icon.\n * @param DELEGATE_APE_ENGINE True if the application supports delegated APE engine.\n * @param SUPPORT_HTML_EXTENSIONS True if the application supports HTML extensions.\n * @param DISABLE_FLASH_EXTENSIONS True if the application disables FLASH extensions.\n *\n * @returns A new \\c HostCapabilities object.\n */\nfunction HostCapabilities(EXTENDED_PANEL_MENU, EXTENDED_PANEL_ICONS, DELEGATE_APE_ENGINE, SUPPORT_HTML_EXTENSIONS, DISABLE_FLASH_EXTENSIONS)\n{\n    this.EXTENDED_PANEL_MENU = EXTENDED_PANEL_MENU;\n    this.EXTENDED_PANEL_ICONS = EXTENDED_PANEL_ICONS;\n    this.DELEGATE_APE_ENGINE = DELEGATE_APE_ENGINE;\n    this.SUPPORT_HTML_EXTENSIONS = SUPPORT_HTML_EXTENSIONS;\n    this.DISABLE_FLASH_EXTENSIONS = DISABLE_FLASH_EXTENSIONS; // Since 5.0.0\n}\n\n/**\n * @class ApiVersion\n * Stores current api version.\n *\n * Since 4.2.0\n *\n * @param major  The major version\n * @param minor  The minor version.\n * @param micro  The micro version.\n *\n * @returns ApiVersion object.\n */\nfunction ApiVersion(major, minor, micro)\n{\n    this.major = major;\n    this.minor = minor;\n    this.micro = micro;\n}\n\n/**\n * @class MenuItemStatus\n * Stores flyout menu item status\n *\n * Since 5.2.0\n *\n * @param menuItemLabel  The menu item label.\n * @param enabled        True if user wants to enable the menu item.\n * @param checked        True if user wants to check the menu item.\n *\n * @returns MenuItemStatus object.\n */\nfunction MenuItemStatus(menuItemLabel, enabled, checked)\n{\n    this.menuItemLabel = menuItemLabel;\n    this.enabled = enabled;\n    this.checked = checked;\n}\n\n/**\n * @class ContextMenuItemStatus\n * Stores the status of the context menu item.\n *\n * Since 5.2.0\n *\n * @param menuItemID     The menu item id.\n * @param enabled        True if user wants to enable the menu item.\n * @param checked        True if user wants to check the menu item.\n *\n * @returns MenuItemStatus object.\n */\nfunction ContextMenuItemStatus(menuItemID, enabled, checked)\n{\n    this.menuItemID = menuItemID;\n    this.enabled = enabled;\n    this.checked = checked;\n}\n//------------------------------ CSInterface ----------------------------------\n\n/**\n * @class CSInterface\n * This is the entry point to the CEP extensibility infrastructure.\n * Instantiate this object and use it to:\n * <ul>\n * <li>Access information about the host application in which an extension is running</li>\n * <li>Launch an extension</li>\n * <li>Register interest in event notifications, and dispatch events</li>\n * </ul>\n *\n * @returns A new \\c CSInterface object\n */\nexport function CSInterface()\n{\n}\n\n/**\n * User can add this event listener to handle native application theme color changes.\n * Callback function gives extensions ability to fine-tune their theme color after the\n * global theme color has been changed.\n * The callback function should be like below:\n *\n * @example\n * // event is a CSEvent object, but user can ignore it.\n * function OnAppThemeColorChanged(event)\n * {\n *    // Should get a latest HostEnvironment object from application.\n *    var skinInfo = JSON.parse(window.__adobe_cep__.getHostEnvironment()).appSkinInfo;\n *    // Gets the style information such as color info from the skinInfo,\n *    // and redraw all UI controls of your extension according to the style info.\n * }\n */\nCSInterface.THEME_COLOR_CHANGED_EVENT = \"com.adobe.csxs.events.ThemeColorChanged\";\n\n/** The host environment data object. */\nCSInterface.prototype.hostEnvironment = window.__adobe_cep__ ? JSON.parse(window.__adobe_cep__.getHostEnvironment()) : '';\n\n/** Retrieves information about the host environment in which the\n *  extension is currently running.\n *\n *   @returns A \\c #HostEnvironment object.\n */\nCSInterface.prototype.getHostEnvironment = function()\n{\n    this.hostEnvironment = JSON.parse(window.__adobe_cep__.getHostEnvironment());\n    return this.hostEnvironment;\n};\n\n/** Closes this extension. */\nCSInterface.prototype.closeExtension = function()\n{\n    window.__adobe_cep__.closeExtension();\n};\n\n/**\n * Retrieves a path for which a constant is defined in the system.\n *\n * @param pathType The path-type constant defined in \\c #SystemPath ,\n *\n * @returns The platform-specific system path string.\n */\nCSInterface.prototype.getSystemPath = function(pathType)\n{\n    var path = decodeURI(window.__adobe_cep__.getSystemPath(pathType));\n    var OSVersion = this.getOSInformation();\n    if (OSVersion.indexOf(\"Windows\") >= 0)\n    {\n      path = path.replace(\"file:///\", \"\");\n    }\n    else if (OSVersion.indexOf(\"Mac\") >= 0)\n    {\n      path = path.replace(\"file://\", \"\");\n    }\n    return path;\n};\n\n/**\n * Evaluates a JavaScript script, which can use the JavaScript DOM\n * of the host application.\n *\n * @param script    The JavaScript script.\n * @param callback  Optional. A callback function that receives the result of execution.\n *          If execution fails, the callback function receives the error message \\c EvalScript_ErrMessage.\n */\nCSInterface.prototype.evalScript = function(script, callback)\n{\n    if(callback === null || callback === undefined)\n    {\n        callback = function(result){};\n    }\n    window.__adobe_cep__.evalScript(script, callback);\n};\n\n/**\n * Retrieves the unique identifier of the application.\n * in which the extension is currently running.\n *\n * @returns The unique ID string.\n */\nCSInterface.prototype.getApplicationID = function()\n{\n    var appId = this.hostEnvironment.appId;\n    return appId;\n};\n\n/**\n * Retrieves host capability information for the application\n * in which the extension is currently running.\n *\n * @returns A \\c #HostCapabilities object.\n */\nCSInterface.prototype.getHostCapabilities = function()\n{\n    var hostCapabilities = JSON.parse(window.__adobe_cep__.getHostCapabilities() );\n    return hostCapabilities;\n};\n\n/**\n * Triggers a CEP event programmatically. Yoy can use it to dispatch\n * an event of a predefined type, or of a type you have defined.\n *\n * @param event A \\c CSEvent object.\n */\nCSInterface.prototype.dispatchEvent = function(event)\n{\n    if (typeof event.data == \"object\")\n    {\n        event.data = JSON.stringify(event.data);\n    }\n\n    window.__adobe_cep__.dispatchEvent(event);\n};\n\n/**\n * Registers an interest in a CEP event of a particular type, and\n * assigns an event handler.\n * The event infrastructure notifies your extension when events of this type occur,\n * passing the event object to the registered handler function.\n *\n * @param type     The name of the event type of interest.\n * @param listener The JavaScript handler function or method.\n * @param obj      Optional, the object containing the handler method, if any.\n *         Default is null.\n */\nCSInterface.prototype.addEventListener = function(type, listener, obj)\n{\n    window.__adobe_cep__.addEventListener(type, listener, obj);\n};\n\n/**\n * Removes a registered event listener.\n *\n * @param type      The name of the event type of interest.\n * @param listener  The JavaScript handler function or method that was registered.\n * @param obj       Optional, the object containing the handler method, if any.\n *          Default is null.\n */\nCSInterface.prototype.removeEventListener = function(type, listener, obj)\n{\n    window.__adobe_cep__.removeEventListener(type, listener, obj);\n};\n\n/**\n * Loads and launches another extension, or activates the extension if it is already loaded.\n *\n * @param extensionId       The extension's unique identifier.\n * @param startupParams     Not currently used, pass \"\".\n *\n * @example\n * To launch the extension \"help\" with ID \"HLP\" from this extension, call:\n * <code>requestOpenExtension(\"HLP\", \"\"); </code>\n *\n */\nCSInterface.prototype.requestOpenExtension = function(extensionId, params)\n{\n    window.__adobe_cep__.requestOpenExtension(extensionId, params);\n};\n\n/**\n * Retrieves the list of extensions currently loaded in the current host application.\n * The extension list is initialized once, and remains the same during the lifetime\n * of the CEP session.\n *\n * @param extensionIds  Optional, an array of unique identifiers for extensions of interest.\n *          If omitted, retrieves data for all extensions.\n *\n * @returns Zero or more \\c #Extension objects.\n */\nCSInterface.prototype.getExtensions = function(extensionIds)\n{\n    var extensionIdsStr = JSON.stringify(extensionIds);\n    var extensionsStr = window.__adobe_cep__.getExtensions(extensionIdsStr);\n\n    var extensions = JSON.parse(extensionsStr);\n    return extensions;\n};\n\n/**\n * Retrieves network-related preferences.\n *\n * @returns A JavaScript object containing network preferences.\n */\nCSInterface.prototype.getNetworkPreferences = function()\n{\n    var result = window.__adobe_cep__.getNetworkPreferences();\n    var networkPre = JSON.parse(result);\n\n    return networkPre;\n};\n\n/**\n * Initializes the resource bundle for this extension with property values\n * for the current application and locale.\n * To support multiple locales, you must define a property file for each locale,\n * containing keyed display-string values for that locale.\n * See localization documentation for Extension Builder and related products.\n *\n * Keys can be in the\n * form <code>key.value=\"localized string\"</code>, for use in HTML text elements.\n * For example, in this input element, the localized \\c key.value string is displayed\n * instead of the empty \\c value string:\n *\n * <code><input type=\"submit\" value=\"\" data-locale=\"key\"/></code>\n *\n * @returns An object containing the resource bundle information.\n */\nCSInterface.prototype.initResourceBundle = function()\n{\n    var resourceBundle = JSON.parse(window.__adobe_cep__.initResourceBundle());\n    var resElms = document.querySelectorAll('[data-locale]');\n    for (var n = 0; n < resElms.length; n++)\n    {\n       var resEl = resElms[n];\n       // Get the resource key from the element.\n       var resKey = resEl.getAttribute('data-locale');\n       if (resKey)\n       {\n           // Get all the resources that start with the key.\n           for (var key in resourceBundle)\n           {\n               if (key.indexOf(resKey) === 0)\n               {\n                   var resValue = resourceBundle[key];\n                   if (key.length == resKey.length)\n                   {\n                        resEl.innerHTML = resValue;\n                   }\n                   else if ('.' == key.charAt(resKey.length))\n                   {\n                        var attrKey = key.substring(resKey.length + 1);\n                        resEl[attrKey] = resValue;\n                   }\n               }\n           }\n       }\n    }\n    return resourceBundle;\n};\n\n/**\n * Writes installation information to a file.\n *\n * @returns The file path.\n */\nCSInterface.prototype.dumpInstallationInfo = function()\n{\n    return window.__adobe_cep__.dumpInstallationInfo();\n};\n\n/**\n * Retrieves version information for the current Operating System,\n * See http://www.useragentstring.com/pages/Chrome/ for Chrome \\c navigator.userAgent values.\n *\n * @returns A string containing the OS version, or \"unknown Operation System\".\n * If user customizes the User Agent by setting CEF command parameter \"--user-agent\", only\n * \"Mac OS X\" or \"Windows\" will be returned.\n */\nCSInterface.prototype.getOSInformation = function()\n{\n    var userAgent = navigator.userAgent;\n\n    if ((navigator.platform == \"Win32\") || (navigator.platform == \"Windows\"))\n    {\n        var winVersion = \"Windows\";\n        var winBit = \"\";\n        if (userAgent.indexOf(\"Windows\") > -1)\n        {\n            if (userAgent.indexOf(\"Windows NT 5.0\") > -1)\n            {\n                winVersion = \"Windows 2000\";\n            }\n            else if (userAgent.indexOf(\"Windows NT 5.1\") > -1)\n            {\n                winVersion = \"Windows XP\";\n            }\n            else if (userAgent.indexOf(\"Windows NT 5.2\") > -1)\n            {\n                winVersion = \"Windows Server 2003\";\n            }\n            else if (userAgent.indexOf(\"Windows NT 6.0\") > -1)\n            {\n                winVersion = \"Windows Vista\";\n            }\n            else if (userAgent.indexOf(\"Windows NT 6.1\") > -1)\n            {\n                winVersion = \"Windows 7\";\n            }\n            else if (userAgent.indexOf(\"Windows NT 6.2\") > -1)\n            {\n                winVersion = \"Windows 8\";\n            }\n            else if (userAgent.indexOf(\"Windows NT 6.3\") > -1)\n            {\n                winVersion = \"Windows 8.1\";\n            }\n            else if (userAgent.indexOf(\"Windows NT 10\") > -1)\n            {\n                winVersion = \"Windows 10\";\n            }\n\n            if (userAgent.indexOf(\"WOW64\") > -1)\n            {\n                winBit = \" 64-bit\";\n            }\n            else\n            {\n                winBit = \" 32-bit\";\n            }\n        }\n\n        return winVersion + winBit;\n    }\n    else if ((navigator.platform == \"MacIntel\") || (navigator.platform == \"Macintosh\"))\n    {\n        var result = \"Mac OS X\";\n\n        if (userAgent.indexOf(\"Mac OS X\") > -1)\n        {\n            result = userAgent.substring(userAgent.indexOf(\"Mac OS X\"), userAgent.indexOf(\")\"));\n            result = result.replace(/_/g, \".\");\n        }\n\n        return result;\n    }\n\n    return \"Unknown Operation System\";\n};\n\n/**\n * Opens a page in the default system browser.\n *\n * Since 4.2.0\n *\n * @param url  The URL of the page/file to open, or the email address.\n * Must use HTTP/HTTPS/file/mailto protocol. For example:\n *   \"http://www.adobe.com\"\n *   \"https://github.com\"\n *   \"file:///C:/log.txt\"\n *   \"mailto:test@adobe.com\"\n *\n * @returns One of these error codes:\\n\n *      <ul>\\n\n *          <li>NO_ERROR - 0</li>\\n\n *          <li>ERR_UNKNOWN - 1</li>\\n\n *          <li>ERR_INVALID_PARAMS - 2</li>\\n\n *          <li>ERR_INVALID_URL - 201</li>\\n\n *      </ul>\\n\n */\nCSInterface.prototype.openURLInDefaultBrowser = function(url)\n{\n    return cep.util.openURLInDefaultBrowser(url);\n};\n\n/**\n * Retrieves extension ID.\n *\n * Since 4.2.0\n *\n * @returns extension ID.\n */\nCSInterface.prototype.getExtensionID = function()\n{\n     return window.__adobe_cep__.getExtensionId();\n};\n\n/**\n * Retrieves the scale factor of screen.\n * On Windows platform, the value of scale factor might be different from operating system's scale factor,\n * since host application may use its self-defined scale factor.\n *\n * Since 4.2.0\n *\n * @returns One of the following float number.\n *      <ul>\\n\n *          <li> -1.0 when error occurs </li>\\n\n *          <li> 1.0 means normal screen </li>\\n\n *          <li> >1.0 means HiDPI screen </li>\\n\n *      </ul>\\n\n */\nCSInterface.prototype.getScaleFactor = function()\n{\n    return window.__adobe_cep__.getScaleFactor();\n};\n\n/**\n * Set a handler to detect any changes of scale factor. This only works on Mac.\n *\n * Since 4.2.0\n *\n * @param handler   The function to be called when scale factor is changed.\n *\n */\nCSInterface.prototype.setScaleFactorChangedHandler = function(handler)\n{\n    window.__adobe_cep__.setScaleFactorChangedHandler(handler);\n};\n\n/**\n * Retrieves current API version.\n *\n * Since 4.2.0\n *\n * @returns ApiVersion object.\n *\n */\nCSInterface.prototype.getCurrentApiVersion = function()\n{\n    var apiVersion = JSON.parse(window.__adobe_cep__.getCurrentApiVersion());\n    return apiVersion;\n};\n\n/**\n * Set panel flyout menu by an XML.\n *\n * Since 5.2.0\n *\n * Register a callback function for \"com.adobe.csxs.events.flyoutMenuClicked\" to get notified when a\n * menu item is clicked.\n * The \"data\" attribute of event is an object which contains \"menuId\" and \"menuName\" attributes.\n *\n * Register callback functions for \"com.adobe.csxs.events.flyoutMenuOpened\" and \"com.adobe.csxs.events.flyoutMenuClosed\"\n * respectively to get notified when flyout menu is opened or closed.\n *\n * @param menu     A XML string which describes menu structure.\n * An example menu XML:\n * <Menu>\n *   <MenuItem Id=\"menuItemId1\" Label=\"TestExample1\" Enabled=\"true\" Checked=\"false\"/>\n *   <MenuItem Label=\"TestExample2\">\n *     <MenuItem Label=\"TestExample2-1\" >\n *       <MenuItem Label=\"TestExample2-1-1\" Enabled=\"false\" Checked=\"true\"/>\n *     </MenuItem>\n *     <MenuItem Label=\"TestExample2-2\" Enabled=\"true\" Checked=\"true\"/>\n *   </MenuItem>\n *   <MenuItem Label=\"---\" />\n *   <MenuItem Label=\"TestExample3\" Enabled=\"false\" Checked=\"false\"/>\n * </Menu>\n *\n */\nCSInterface.prototype.setPanelFlyoutMenu = function(menu)\n{\n    if (\"string\" != typeof menu)\n    {\n        return;\n    }\n\n    window.__adobe_cep__.invokeSync(\"setPanelFlyoutMenu\", menu);\n};\n\n/**\n * Updates a menu item in the extension window's flyout menu, by setting the enabled\n * and selection status.\n *\n * Since 5.2.0\n *\n * @param menuItemLabel The menu item label.\n * @param enabled       True to enable the item, false to disable it (gray it out).\n * @param checked       True to select the item, false to deselect it.\n *\n * @returns false when the host application does not support this functionality (HostCapabilities.EXTENDED_PANEL_MENU is false).\n *         Fails silently if menu label is invalid.\n *\n * @see HostCapabilities.EXTENDED_PANEL_MENU\n */\nCSInterface.prototype.updatePanelMenuItem = function(menuItemLabel, enabled, checked)\n{\n    var ret = false;\n    if (this.getHostCapabilities().EXTENDED_PANEL_MENU)\n    {\n        var itemStatus = new MenuItemStatus(menuItemLabel, enabled, checked);\n        ret = window.__adobe_cep__.invokeSync(\"updatePanelMenuItem\", JSON.stringify(itemStatus));\n    }\n    return ret;\n};\n\n\n/**\n * Set context menu by XML string.\n *\n * Since 5.2.0\n *\n * There are a number of conventions used to communicate what type of menu item to create and how it should be handled.\n * - an item without menu ID or menu name is disabled and is not shown.\n * - if the item name is \"---\" (three hyphens) then it is treated as a separator. The menu ID in this case will always be NULL.\n * - Checkable attribute takes precedence over Checked attribute.\n * - a PNG icon. For optimal display results please supply a 16 x 16px icon as larger dimensions will increase the size of the menu item.\n     The Chrome extension contextMenus API was taken as a reference.\n     https://developer.chrome.com/extensions/contextMenus\n * - the items with icons and checkable items cannot coexist on the same menu level. The former take precedences over the latter.\n *\n * @param menu      A XML string which describes menu structure.\n * @param callback  The callback function which is called when a menu item is clicked. The only parameter is the returned ID of clicked menu item.\n *\n * @description An example menu XML:\n * <Menu>\n *   <MenuItem Id=\"menuItemId1\" Label=\"TestExample1\" Enabled=\"true\" Checkable=\"true\" Checked=\"false\" Icon=\"./image/small_16X16.png\"/>\n *   <MenuItem Id=\"menuItemId2\" Label=\"TestExample2\">\n *     <MenuItem Id=\"menuItemId2-1\" Label=\"TestExample2-1\" >\n *       <MenuItem Id=\"menuItemId2-1-1\" Label=\"TestExample2-1-1\" Enabled=\"false\" Checkable=\"true\" Checked=\"true\"/>\n *     </MenuItem>\n *     <MenuItem Id=\"menuItemId2-2\" Label=\"TestExample2-2\" Enabled=\"true\" Checkable=\"true\" Checked=\"true\"/>\n *   </MenuItem>\n *   <MenuItem Label=\"---\" />\n *   <MenuItem Id=\"menuItemId3\" Label=\"TestExample3\" Enabled=\"false\" Checkable=\"true\" Checked=\"false\"/>\n * </Menu>\n */\nCSInterface.prototype.setContextMenu = function(menu, callback)\n{\n    if (\"string\" != typeof menu)\n    {\n        return;\n    }\n\n    window.__adobe_cep__.invokeAsync(\"setContextMenu\", menu, callback);\n};\n\n/**\n * Set context menu by JSON string.\n *\n * Since 6.0.0\n *\n * There are a number of conventions used to communicate what type of menu item to create and how it should be handled.\n * - an item without menu ID or menu name is disabled and is not shown.\n * - if the item label is \"---\" (three hyphens) then it is treated as a separator. The menu ID in this case will always be NULL.\n * - Checkable attribute takes precedence over Checked attribute.\n * - a PNG icon. For optimal display results please supply a 16 x 16px icon as larger dimensions will increase the size of the menu item.\n     The Chrome extension contextMenus API was taken as a reference.\n * - the items with icons and checkable items cannot coexist on the same menu level. The former take precedences over the latter.\n     https://developer.chrome.com/extensions/contextMenus\n *\n * @param menu      A JSON string which describes menu structure.\n * @param callback  The callback function which is called when a menu item is clicked. The only parameter is the returned ID of clicked menu item.\n *\n * @description An example menu JSON:\n *\n * {\n *      \"menu\": [\n *          {\n *              \"id\": \"menuItemId1\",\n *              \"label\": \"testExample1\",\n *              \"enabled\": true,\n *              \"checkable\": true,\n *              \"checked\": false,\n *              \"icon\": \"./image/small_16X16.png\"\n *          },\n *          {\n *              \"id\": \"menuItemId2\",\n *              \"label\": \"testExample2\",\n *              \"menu\": [\n *                  {\n *                      \"id\": \"menuItemId2-1\",\n *                      \"label\": \"testExample2-1\",\n *                      \"menu\": [\n *                          {\n *                              \"id\": \"menuItemId2-1-1\",\n *                              \"label\": \"testExample2-1-1\",\n *                              \"enabled\": false,\n *                              \"checkable\": true,\n *                              \"checked\": true\n *                          }\n *                      ]\n *                  },\n *                  {\n *                      \"id\": \"menuItemId2-2\",\n *                      \"label\": \"testExample2-2\",\n *                      \"enabled\": true,\n *                      \"checkable\": true,\n *                      \"checked\": true\n *                  }\n *              ]\n *          },\n *          {\n *              \"label\": \"---\"\n *          },\n *          {\n *              \"id\": \"menuItemId3\",\n *              \"label\": \"testExample3\",\n *              \"enabled\": false,\n *              \"checkable\": true,\n *              \"checked\": false\n *          }\n *      ]\n *  }\n *\n */\nCSInterface.prototype.setContextMenuByJSON = function(menu, callback)\n{\n    if (\"string\" != typeof menu)\n    {\n        return;\n    }\n\n    window.__adobe_cep__.invokeAsync(\"setContextMenuByJSON\", menu, callback);\n};\n\n/**\n * Updates a context menu item by setting the enabled and selection status.\n *\n * Since 5.2.0\n *\n * @param menuItemID    The menu item ID.\n * @param enabled       True to enable the item, false to disable it (gray it out).\n * @param checked       True to select the item, false to deselect it.\n */\nCSInterface.prototype.updateContextMenuItem = function(menuItemID, enabled, checked)\n{\n    var itemStatus = new ContextMenuItemStatus(menuItemID, enabled, checked);\n    ret = window.__adobe_cep__.invokeSync(\"updateContextMenuItem\", JSON.stringify(itemStatus));\n};\n\n/**\n * Get the visibility status of an extension window.\n *\n * Since 6.0.0\n *\n * @returns true if the extension window is visible; false if the extension window is hidden.\n */\nCSInterface.prototype.isWindowVisible = function()\n{\n    return window.__adobe_cep__.invokeSync(\"isWindowVisible\", \"\");\n};\n\n/**\n * Resize extension's content to the specified dimensions.\n * 1. Works with modal and modeless extensions in all Adobe products.\n * 2. Extension's manifest min/max size constraints apply and take precedence.\n * 3. For panel extensions\n *    3.1 This works in all Adobe products except:\n *        * Premiere Pro\n *        * Prelude\n *        * After Effects\n *    3.2 When the panel is in certain states (especially when being docked),\n *        it will not change to the desired dimensions even when the\n *        specified size satisfies min/max constraints.\n *\n * Since 6.0.0\n *\n * @param width  The new width\n * @param height The new height\n */\nCSInterface.prototype.resizeContent = function(width, height)\n{\n    window.__adobe_cep__.resizeContent(width, height);\n};\n\n/**\n * Register the invalid certificate callback for an extension.\n * This callback will be triggered when the extension tries to access the web site that contains the invalid certificate on the main frame.\n * But if the extension does not call this function and tries to access the web site containing the invalid certificate, a default error page will be shown.\n *\n * Since 6.1.0\n *\n * @param callback the callback function\n */\nCSInterface.prototype.registerInvalidCertificateCallback = function(callback)\n{\n    return window.__adobe_cep__.registerInvalidCertificateCallback(callback);\n};\n\n/**\n * Register an interest in some key events to prevent them from being sent to the host application.\n *\n * This function works with modeless extensions and panel extensions.\n * Generally all the key events will be sent to the host application for these two extensions if the current focused element\n * is not text input or dropdown,\n * If you want to intercept some key events and want them to be handled in the extension, please call this function\n * in advance to prevent them being sent to the host application.\n *\n * Since 6.1.0\n *\n * @param keyEventsInterest      A JSON string describing those key events you are interested in. A null object or\n                                 an empty string will lead to removing the interest\n *\n * This JSON string should be an array, each object has following keys:\n *\n * keyCode:  [Required] represents an OS system dependent virtual key code identifying\n *           the unmodified value of the pressed key.\n * ctrlKey:  [optional] a Boolean that indicates if the control key was pressed (true) or not (false) when the event occurred.\n * altKey:   [optional] a Boolean that indicates if the alt key was pressed (true) or not (false) when the event occurred.\n * shiftKey: [optional] a Boolean that indicates if the shift key was pressed (true) or not (false) when the event occurred.\n * metaKey:  [optional] (Mac Only) a Boolean that indicates if the Meta key was pressed (true) or not (false) when the event occurred.\n *                      On Macintosh keyboards, this is the command key. To detect Windows key on Windows, please use keyCode instead.\n * An example JSON string:\n *\n * [\n *     {\n *         \"keyCode\": 48\n *     },\n *     {\n *         \"keyCode\": 123,\n *         \"ctrlKey\": true\n *     },\n *     {\n *         \"keyCode\": 123,\n *         \"ctrlKey\": true,\n *         \"metaKey\": true\n *     }\n * ]\n *\n */\nCSInterface.prototype.registerKeyEventsInterest = function(keyEventsInterest)\n{\n    return window.__adobe_cep__.registerKeyEventsInterest(keyEventsInterest);\n};\n\n/**\n * Set the title of the extension window.\n * This function works with modal and modeless extensions in all Adobe products, and panel extensions in Photoshop, InDesign, InCopy, Illustrator, Flash Pro and Dreamweaver.\n *\n * Since 6.1.0\n *\n * @param title The window title.\n */\nCSInterface.prototype.setWindowTitle = function(title)\n{\n    window.__adobe_cep__.invokeSync(\"setWindowTitle\", title);\n};\n\n/**\n * Get the title of the extension window.\n * This function works with modal and modeless extensions in all Adobe products, and panel extensions in Photoshop, InDesign, InCopy, Illustrator, Flash Pro and Dreamweaver.\n *\n * Since 6.1.0\n *\n * @returns The window title.\n */\nCSInterface.prototype.getWindowTitle = function()\n{\n    return window.__adobe_cep__.invokeSync(\"getWindowTitle\", \"\");\n};\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { VulcanInterface as CEP_LIBSVulcanInterface, VulcanMessage as CEPVulcanMessage } from 'app/js/interface/cep_libs/Vulcan';\nimport debugLog from 'app/js/utils/debugLog';\nimport BaseVulcanInterface from './BaseVulcanInterface';\n\nexport default class CEPVulcanInterface extends BaseVulcanInterface {\n    constructor() {\n        super();\n        this._ccLibProcessIdentifier = this._cepVulcanInterface.useSpecifiers ? this.ccLibProcessSpecifier : this.ccLibProcessSAPCode;\n    }\n\n    get _cepVulcanInterface() {\n        return CEP_LIBSVulcanInterface;\n    }\n\n    /**\n        Control Lib APIs\n    **/\n\n    isCCLibProcessInstalled() {\n        return this._cepVulcanInterface.isAppInstalled(this._ccLibProcessIdentifier);\n    }\n\n    isCCLibProcessRunning() {\n        return this._cepVulcanInterface.isAppRunning(this._ccLibProcessIdentifier);\n    }\n\n    launchCCLibProcess() {\n        return new Promise(resolve => {\n            this._cepVulcanInterface.launchApp(this._ccLibProcessIdentifier, false, '');\n            resolve();\n        });\n    }\n\n    addMessageListener(type, handler) {\n        debugLog.log('Vulcan: Add Listener: ' + type);\n        handler.wrapper = (response, ...args) => {\n            const message = this._cepVulcanInterface.getPayload(response, ...args);\n            handler(message, response.appId, response.appVersion);\n        };\n        this._cepVulcanInterface.addMessageListener(this._vulcanPrefix + type, handler.wrapper);\n    }\n\n    removeMessageListener(type, handler) {\n        debugLog.log('Vulcan: Remove Listener: ' + type);\n        this._cepVulcanInterface.removeMessageListener(this._vulcanPrefix + type, handler && handler.wrapper);\n    }\n\n    // Note: Since CEP only supports broadcast messages, we don't expose the endpoint-directed messages here (even though node-vulcanjs supports it)\n    // Payload must be a string\n    sendMessage(type, payload) {\n        debugLog.log('Vulcan: Send Message: ' + type);\n\n        const message = new CEPVulcanMessage(this._vulcanPrefix + type);\n        message.setPayload(payload);\n        this._cepVulcanInterface.dispatchMessage(message);\n    }\n}\n\nexport {\n    CEPVulcanMessage\n};\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2016 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { CSInterface, CSEvent } from 'app/js/interface/cep_libs/CSInterface';\nimport BaseEnvironment from './BaseEnvironment';\nimport { VulcanInterface, VulcanMessage } from 'app/js/interface/cep_libs/Vulcan';\nimport CEPVulcanInterface from 'app/js/interface/vulcan/CEPVulcanInterface';\nimport configuration from 'app/js/config/configuration';\nimport localSettings from 'app/js/config/localSettings';\nimport appState from 'app/js/appState';\nimport { openCollaborateURL } from 'app/js/utils/linkUtils';\nimport { isCCDFiveThree } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport { cepConnector, HybridDriver, LocalDriver } from '@cclibraries/cc-libraries-js';\nimport imsInterface from '../interface/imsInterface';\nimport translationManager from 'app/js/managers/translationManager';\nimport { supportedLocales } from './BaseEnvironment';\n\n/**\n * CEP Environment - this is the majority of the desktop apps, including Photoshop,\n * Illustrator, InDesign, Premiere Pro etc.\n */\nexport default class CEPEnvironment extends BaseEnvironment {\n\n    /**\n     * Check whether we're in a CEP environment. Only instantiate this class if true!\n     * @returns {boolean}\n     */\n    static check() {\n        return !!window.__adobe_cep__;\n    }\n\n    type = 'CEP';\n    vulcanInterface = new CEPVulcanInterface();\n    isMenuInJson = false;\n\n    get cloudDriverConnector() {\n        return async () => {\n            const environment = imsInterface.getEnvironment();\n            const env = environment.label === 'Staging' ? 'staging' : 'production';\n            const userId = await imsInterface.getCurrentUserIdHelper();\n            const refreshAccessToken = () => imsInterface.getAccessToken(userId);\n            const token = await refreshAccessToken();\n            return {\n                env,\n                token,\n                refreshAccessToken\n            };\n        };\n    }\n\n    get ccLibrariesDriver() {\n        return localSettings.getDebugValue('jsapiHybridDriver')\n            ? this.hybridDriver\n            : new LocalDriver(cepConnector(VulcanInterface, VulcanMessage), { ignoreRenditionGrids: true });\n    }\n\n    get hybridDriver() {\n        return new HybridDriver(\n            cepConnector(VulcanInterface, VulcanMessage),\n            this.cloudDriverConnector\n        );\n    }\n\n    // Remove when we can guarantee the Libraries Manager instance will persist.\n    hasManagerPersistenceBug = true;\n    flyoutMenuClickEvent = 'com.adobe.csxs.events.flyoutMenuClicked';\n\n    get supportsFileURLs() {\n        const useHybridDriver = localSettings.getDebugValue('jsapiHybridDriver');\n        if (useHybridDriver === undefined) {\n            return true;\n        }\n        return !useHybridDriver;\n    }\n\n    constructor(w = window) {\n        super(w);\n        this._appInterface = new CSInterface();\n        this._extensionId = this._appInterface.getExtensionID();\n        this._resourceBundle = this._appInterface.initResourceBundle();\n        window.__disable_swc__ = true;\n    }\n\n    /**\n     * Get an object describing the host environment - this includes information about the application name,\n     * version, and background color / theme.\n     *\n     * @param {boolean} refresh - If true, will refetch the host environment rather than using a cached copy.\n     * @returns {Object}\n     */\n    getHostEnvironment(refresh) {\n        if (!this._hostEnvironment || refresh) {\n            this._hostEnvironment = this._appInterface.getHostEnvironment();\n        }\n        return this._hostEnvironment;\n    }\n\n    /**\n     * Updates the host info for locale\n     * @param {string} locale - en_US, ja_JP, es_MX, etc.\n     */\n    updateHostInfo(locale) {\n        const host = this.getHostEnvironment();\n\n        if (locale) {\n            host.appUILocale = supportedLocales.includes(locale) ? locale : 'en_US';\n            return this._loadResourceBundle(host.appUILocale).then(() => {\n                translationManager.setStringMap(this._resourceBundle);\n            });\n        }\n\n        return Promise.resolve();\n    }\n\n    /**\n     * Get a string describing the current operating system and version.\n     *\n     * @returns {string}\n     */\n    getOSInformation() {\n        // Overrides the OS string with CEP's method:\n        return this._appInterface.getOSInformation();\n    }\n\n    // Evaluate a JSX script\n    _evalScript(script, numRetries = 0) {\n        return new Promise((resolve, reject) => {\n            this._appInterface.evalScript(script, data => {\n                if (data.indexOf('Error') !== 0 && data !== 'EvalScript error.') {\n                    return resolve(data);\n                }\n\n                this.debugLog('Tried to execute: ' + script);\n                this.debugLog('Failed with: ' + data);\n\n                // Photoshop sometimes fails to execute JSX, so allow us to retry up to 2 times\n                // Note that this only handles transient JSX failure - i.e. it doesn't take into account modal states\n                // where JSX could be blocked for many minutes.\n                if (numRetries < 2) {\n                    setTimeout(() => this._evalScript(script, numRetries + 1).then(resolve, reject), 50);\n                } else {\n                    reject(data);\n                }\n            });\n        });\n    }\n\n    /**\n     * Execute an extendscript command - this is the primary way we tell the application to do something.\n     *\n     * @param {string} lib - Name of the library (e.g. CORE, PHXS etc).\n     * @param {string} operation\n     * @param {Array} args\n     * @returns {Promise}\n     */\n    exec(lib, operation, args = []) {\n        // Construct the argument string\n        if (!Array.isArray(args)) {\n            args = [ args ];\n        }\n        const strArguments = args.map(JSON.stringify).join(', ');\n        const extScriptPrfix = lib ? `$._ADBE_LIBS_${lib}.` : '$.';\n        return this._evalScript(`${extScriptPrfix}${operation}(${strArguments})`);\n    }\n\n    /**\n     * Execute a command in the scope of the application. This is shorthand for\n     * `exec(appCode, operation, args)`.\n     *\n     * @param {string} operation\n     * @param {Array} args\n     * @returns {Promise}\n     */\n    execApp(operation, args) {\n        return this.exec(this.getAppName(), operation, args);\n    }\n\n    /**\n     * Show the error message to the end user.\n     * @param {string} msg - Message to show.\n     */\n    showError(msg) {\n        return this.exec('CORE', 'showError', [ msg ]);\n    }\n\n    /**\n     * Create an event to send to the application.\n     *\n     * @param {string} type - The name of the event.\n     * @param {string} scope - The scope of event, can be \"GLOBAL\" or \"APPLICATION\".\n     * @param {string} appId - The unique identifier of the application that generated the event.\n     * @param {string} extensionId - The unique identifier of the extension that generated the event.\n     * @param {Object} data - Data to attach to the event.\n     * @returns {Object} the event\n     */\n    createEvent(type, scope, appId, extensionId, data) {\n        const event = new CSEvent(type, scope, appId, extensionId);\n        event.data = data;\n        return event;\n    }\n\n    /**\n     * Dispatch an event (created by createEvent) to the application.\n     * @param {Object} event\n     */\n    dispatchEvent(event) {\n        event.extensionId = this._appInterface.getExtensionID();\n        this._appInterface.dispatchEvent(event);\n    }\n\n    /**\n     * Add an event listener for messages from the application.\n     * @param {string} eventId\n     * @param {Function} callback\n     */\n    addEventListener(eventId, callback) {\n        this._appInterface.addEventListener(eventId, callback);\n    }\n\n    /**\n     * Remove an event listener previously added via `addEventListener()`.\n     * @param {string} eventId\n     * @param {Function} callback\n     */\n    removeEventListener(eventId, callback) {\n        this._appInterface.removeEventListener(eventId, callback);\n    }\n\n    /**\n     * Get the path to the extension.\n     * @returns {string}\n     */\n    getPluginPath() {\n        return this._appInterface.getSystemPath('extension');\n    }\n\n    /**\n     * Get the path to the user's data folder. This is where library data is stored.\n     * @returns {string}\n     */\n    getUserDataPath() {\n        return this._appInterface.getSystemPath('userData');\n    }\n\n    /**\n     * Get the path to the user's documents folder. This is only used by the debug menu items.\n     * @returns {string}\n     */\n    getMyDocumentsPath() {\n        return this._appInterface.getSystemPath('myDocuments');\n    }\n\n    /**\n     * Set the Fly out menu to a specific JSON/XML (use isMenuJSON to identify if JSON menu is desired)\n     * @param {string} menuItems Object/XML representing the menu.\n     */\n    setPanelFlyoutMenu(menuItems) {\n        if (this._menuItems !== menuItems) {\n            this._appInterface.setPanelFlyoutMenu(menuItems);\n            this._menuItems = menuItems;\n        }\n    }\n\n    /**\n     * Show the context menu at the mouse position with the supplied contents\n     * @param {string}   menu     Object/XMl representing the menu\n     * @param {Function} callback Function to call with the menuId when a menu item is clicked.\n     */\n    setContextMenu(menu, callback) {\n        this._appInterface.setContextMenu(menu, callback);\n    }\n\n    /**\n     * Set the title of the panel/dialog window\n     * @param {string} title The title to set\n     */\n    setWindowTitle(title) {\n        this._appInterface.setWindowTitle(title);\n    }\n\n    /**\n     * Set the title of the panel/dialog window\n     * @param {number} width\n     * @param {number} height\n     */\n    resizeContent(width, height) {\n        this._appInterface.resizeContent(width, height);\n    }\n\n    /**\n     * Launch the default web browser and navigate to the supplied URL\n     * @param {string} url URL to launch\n     * @param {boolean} [isImmediate=false] - flag to launch the url immediately, instead of waiting for the next tick. Eg: From Typekit extension\\\n     * @returns {Promise}\n     */\n    launchInBrowser(url, isImmediate = false) {\n        // In CEP on Windows, it can cause the browser to reload if we call this from certain call stacks\n        // (seems like if it's still processing the response from a fetch, this can happen). Probably due\n        // to re-entrant event handling code. We do the openURL call in a timeout, to make sure it's on a clean stack\n        return new Promise(resolve => {\n            const openURL = () => {\n                this._appInterface.openURLInDefaultBrowser(url);\n                resolve();\n            };\n            isImmediate ? openURL() : setTimeout(openURL);\n        });\n    }\n\n    /**\n     * Request the app to open a different extension\n     * @param {string} extensionId\n     * @param {Object} params\n     */\n    requestOpenExtension(extensionId, params) {\n        this._appInterface.requestOpenExtension(extensionId, params);\n    }\n\n    /**\n     * Close the current extension\n     */\n    closeExtension() {\n        this._appInterface.closeExtension();\n    }\n\n    /**\n     * Get a list of available extensions.\n     * This is needed for detecting the stock licensing extension, so we can load it.\n     *\n     * @returns {string[]}\n     */\n    getAvailableExtensions() {\n        if (!this._extensionList) {\n            this._extensionList = this._appInterface.getExtensions();\n        }\n        return this._extensionList;\n    }\n\n    getProfile() {\n        const profile = window.profile && window.profile.getProfile();\n        try {\n            return JSON.parse(profile);\n        } catch (error) {\n            return { error };\n        }\n    }\n\n    _waitForManagerInit;\n\n    /**\n     * Set up _waitForManagerInit as a promise to track the Manager initialization.\n     * We need this to know when the Manager is ready to process events sent from the panel.\n     */\n    addManagerInitListener() {\n        this._waitForManagerInit = new Promise(resolve => {\n            this.addEventListener(configuration.MANAGER_CEP_EVENTS.INIT, resolve);\n            if (this.hasManagerPersistenceBug) {\n                // If the Manager will be opened on a new instance each time, we'll need to re-attatch the listener on teardown for next time it opens.\n                this.addEventListener(configuration.MANAGER_CEP_EVENTS.CLOSE, () => {\n                    // Avoid memory leaks, remove the previous listener before adding a new one.\n                    this.removeEventListener(configuration.MANAGER_CEP_EVENTS.INIT, resolve);\n                    this.addManagerInitListener();\n                });\n            }\n        });\n    }\n\n    /**\n     * Open a dialog on top of the Libraries Manager.\n     * @param {string} name\n     * @param {Object} params\n     * @param {Function} onCloseCallback\n     */\n    openDialogInManager(name, params, onCloseCallback) {\n        // Open the manager and when it's ready, send the event to open the dialog.\n        this.openLibraryManagerWindow();\n        this._waitForManagerInit.then(() => {\n            // In CEP, the panel and manager will be in different JS contexts so we need to communicate via events.\n            const event = this.createEvent(configuration.MANAGER_CEP_EVENTS.OPEN_DIALOG, 'APPLICATION');\n            event.data = { name, params, onCloseCallback };\n            this.dispatchEvent(event);\n        });\n    }\n\n    _openDialogInManager(event) {\n        // At this point we're in the Manager's CEP context so we can open the dialog.\n        const { name, params, onCloseCallback } = event.data;\n        // Wait for the process before opening any dialogs.\n        appState.libraryManager.waitForLibrariesLoaded().then(() => {\n            appState.manager.dialogManager.openDialog(name, params, onCloseCallback);\n        }).catch(() => {\n            appState.manager.toastManager.openToast('message', { variant: 'error', message: translate('DL_GENERIC_MANAGER_DIALOG_ERROR') });\n        });\n    }\n\n    addOpenDialogEventListener() {\n        this.addEventListener(configuration.MANAGER_CEP_EVENTS.OPEN_DIALOG, this._openDialogInManager);\n    }\n\n    removeOpenDialogEventListener() {\n        this.removeEventListener(configuration.MANAGER_CEP_EVENTS.OPEN_DIALOG, this._openDialogInManager);\n    }\n\n    openLibraryManagerWindow() {\n        this.requestOpenExtension(configuration.MANAGER_EXTENSION_ID);\n    }\n\n    /**\n     * Opens the sharesheet on top of the Libraries Manager if supported in the current app. Otherwise opens in CCD or web.\n     * @param {Object} library\n     * @param {string} shareMode how the library should be shared. One of 'invite' or 'getLink'.\n     */\n    showShareSheet(library, shareMode = 'invite') {\n        if (isCCDFiveThree()) {\n            return appState.libraryManager.openInCCD(`/assets/libraries/sharesheet/${shareMode}/${library.id}`);\n        }\n        openCollaborateURL(library);\n    }\n\n    /*\n        Interfacing between the panel and the product (handling CEP events etc)\n    */\n\n    _sendApplicationEvent(eventType, data) {\n        const event = this.createEvent(`com.adobe.DesignLibraries.events.${eventType}`, 'APPLICATION');\n        event.data = JSON.stringify(data);\n        this.dispatchEvent(event);\n    }\n\n    _notifyLibraryCreated(library) {\n        // Report success or failure\n        this._sendApplicationEvent('CreateLibraryResponse', {\n            success: library ? true : false,\n            libraryName: library ? library.name : '',\n            libraryId: library ? library.id : ''\n        });\n    }\n\n    notifyElementCreated(eventData) {\n        this._sendApplicationEvent('ElementCreated', eventData);\n    }\n\n    notifyElementChosen(eventData) {\n        this._sendApplicationEvent(eventData.elementRef ? 'ElementChosen' : 'ElementChooseCancelled', eventData);\n    }\n\n    notifyElementUpdated(eventData) {\n        this._sendApplicationEvent('ElementUpdated', eventData);\n    }\n\n    notifyLibraryTempDir(path) {\n        this._sendApplicationEvent('TEMPDIR', { path });\n    }\n\n    connectProductInterface(productInterface) {\n        const getProductInterfaceHandler = (method, requiresData = true, callback) => event => {\n            const data = event && event.data;\n            if (data || !requiresData) {\n                const result = productInterface[method](data);\n                callback && callback(result);\n            }\n        };\n\n        this.disconnectProductInterface();\n        this._handlers = {\n            dlElementOpenForEdit: getProductInterfaceHandler('openElementForEdit'),\n            dlElementReveal: getProductInterfaceHandler('revealElement'),\n            dlElementChoose: getProductInterfaceHandler('invokeChooseElement'),\n            dlElementChooseCancel: getProductInterfaceHandler('cancelChooseElement', false),\n            dlElementLinkCreated: getProductInterfaceHandler('reportElementLinkCreated'),\n            dlElementDropped: getProductInterfaceHandler('reportElementDropped', false),\n            dlCreateLibrary: getProductInterfaceHandler('createLibrary', true, library => this._notifyLibraryCreated(library)),\n            dlSetCurrentLibrary: getProductInterfaceHandler('setCurrentLibrary'),\n            dragStarted: getProductInterfaceHandler('startDragFromProduct'),\n            dragEnded: getProductInterfaceHandler('endDragFromProduct', false),\n            'com.adobe.DesignLibraries.events.InvokeVisualSearch': getProductInterfaceHandler('invokeVisualSearch'),\n            'com.adobe.DesignLibraries.events.LaunchCaptureWorkflow': getProductInterfaceHandler('launchCaptureWorkflow')\n        };\n\n        // Start listening for events from the product\n        for (const eventName in this._handlers) {\n            this.addEventListener(eventName, this._handlers[eventName]);\n        }\n    }\n\n    disconnectProductInterface() {\n        if (this._handlers) {\n            // Stop listening for events from the product\n            for (const eventName in this._handlers) {\n                this.removeEventListener(eventName, this._handlers[eventName]);\n            }\n            delete this._handlers;\n        }\n    }\n\n    isFontAvailable(style) {\n        return this.execApp('isFontAvailable', [ style ]).then(res => res !== 'false');\n    }\n\n    getLayerInfo() {\n        return this.execApp('getLayerInfo').then(layerInfo => {\n            try {\n                if (!layerInfo) { return; }\n                return JSON.parse(layerInfo);\n            } catch (e) {\n                this.debugLog(e);\n            }\n        });\n    }\n\n    getLayerName() {\n        return this.execApp('getLayerName');\n    }\n\n    getCurrentDocumentState() {\n        //The method 'getCurrentState' gives an evalscript error in InDesign turkish locale machines. This might be an issue with ExtendScript, hence changed the name to 'getCurrentStates' for InDesign.\n        const currentStateMethod = configuration.currentProduct.config.stateMethod || 'getCurrentState';\n\n        return this.execApp(currentStateMethod).then(data => {\n            if (data && data !== 'undefined') {\n                try {\n                    return JSON.parse(data);\n                } catch (e) {\n                    this.debugLog(e);\n                    // We treat an invalid current state as having an open document with invalid layerID\n                    // (Note sure if this ever happens in practice, but we have a unit test for it)\n                    return { layerID: -1 };\n                }\n            }\n        }).catch(err => {\n            this.debugLog(`Unable to getDocumentState: ${err}`);\n        });\n    }\n\n    isDocumentOpen(path) {\n        return this.exec('CORE', 'isDocumentOpen', [ path ]).then(strDocOpen => {\n            if (strDocOpen === undefined || strDocOpen === 'undefined') {\n                return false;\n            }\n            try {\n                return JSON.parse(strDocOpen); // parses 'true' or 'false'\n            } catch (ignore) {\n                return false;\n            }\n        });\n    }\n\n    addDocumentChangeListener(callback) {\n        this.removeDocumentChangeListener(callback);\n\n        callback._handler = event => {\n            // This assumes that the event.data always has one of the following forms:\n            // <documentAfterSave><url>file:///path</url></documentAfterSave> or\n            // <documentAfterSave><url>file:///path</url><name>fileNameWithOutExtension</name></documentAfterSave>\n            let eventPath = event.data.substring(event.data.indexOf('<url>') + 5, event.data.indexOf('</url>'));\n            eventPath = eventPath.split('file://').join('');\n\n            // IDSN and ILST send an escaped file path in events\n            if (configuration.currentProduct.config.usesEscapedFilePaths) {\n                eventPath = unescape(eventPath);\n            }\n\n            const eventMap = {\n                documentAfterDeactivate: 'deactivated',\n                documentAfterSave: 'saved'\n            };\n\n            callback({\n                type: eventMap[event.type] || event.type,\n                path: eventPath\n            });\n        };\n\n        this.addEventListener('documentAfterSave', callback._handler);\n        this.addEventListener('documentAfterDeactivate', callback._handler);\n    }\n\n    removeDocumentChangeListener(callback) {\n        if (callback._handler) {\n            this.removeEventListener('documentAfterSave', callback._handler);\n            this.removeEventListener('documentAfterDeactivate', callback._handler);\n            delete callback._handler;\n        }\n    }\n\n    notifyProductInitialized() {\n        const eventName = this.isLibrariesManager() ? configuration.MANAGER_CEP_EVENTS.INIT : 'dlPanelInitialized';\n        this.dispatchEvent(this.createEvent(eventName, 'APPLICATION'));\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport debugLog from 'app/js/utils/debugLog';\nimport BaseVulcanInterface from './BaseVulcanInterface';\n\n// All Vulcan messages start with this\nconst VULCAN_PREFIX = 'vulcan.SuiteMessage.';\n\nexport default class NodeVulcanInterface extends BaseVulcanInterface {\n\n    constructor(VulcanJS) {\n        super();\n        // We are either passed a VulcanJS override (such as for XD), or we get it from Electron/Dimension in init()\n        this.vulcanjs = VulcanJS;\n    }\n\n    /**\n     * Initializes the vulcan interface - for non-CEP environments like electron, which use the node.js wrapper for Vulcan\n     */\n    async init() {\n        debugLog.log('Vulcan: Switching to node-vulcanjs (non-CEP environment)');\n        if (!this.vulcanjs) {\n            await environment.exec('CORE', 'getHostEnvironment', environment.getExtensionID()).then(hostEnvironment => {\n                // Load the node version of vulcan libraries\n                try {\n                    this.vulcanjs = window.nodeRequire(hostEnvironment.nodeVulcanjsPath || 'node-vulcanjs');\n                    this.vulcanjs.VulcanAdapter; // Will throw if not defined.\n\n                } catch (e) {\n                    debugLog('Unable to load node-vulcanjs: ' + e);\n                }\n            });\n\n        }\n        this._VulcanMessageLib = new this.vulcanjs.VulcanAdapter(environment.getAppName() + '-LIBS', environment.getAppVersion());\n        this._VulcanControlLib = new this.vulcanjs.VulcanControlAdapter();\n        this._VulcanMessageLib.addMessageListener((type, message, sourceId, sourceVersion) => {\n            type = type.replace(VULCAN_PREFIX, '');\n            if (this._listenerManager.hasListeners(type)) {\n                debugLog.log('Vulcan: Receive Message: ' + type);\n                this._listenerManager.notify(type, message, sourceId, sourceVersion);\n            }\n        });\n\n        // Hacky way to find whether it is new version of node-vulcanjs or old\n        // new version relies on SAPCodes as well as use modern launchApp\n        this.launchCCLibProcess = this._VulcanControlLib.getAppDetails ? this._launchCCLibProcessV2 : this._launchCCLibProcessV1;\n        this._ccLibProcessIdentifier = this._VulcanControlLib.getAppDetails ? this.ccLibProcessSAPCode : this.ccLibProcessSpecifier;\n    }\n\n    _launchCCLibProcessV1() {\n        return new Promise(resolve => {\n            this._VulcanControlLib.launchApp(this._ccLibProcessIdentifier, false, '', resolve);\n        });\n    }\n\n    _launchCCLibProcessV2() {\n        return this._VulcanControlLib.launchApp(this._ccLibProcessIdentifier, false, '');\n    }\n\n    /**\n        Control Lib APIs\n    **/\n\n    isAppRunning() {\n        return this.isCCLibProcessRunning();\n    }\n\n    isCCLibProcessInstalled() {\n        return this._VulcanControlLib.isAppInstalled(this._ccLibProcessIdentifier);\n    }\n\n    isCCLibProcessRunning() {\n        return this._VulcanControlLib.isAppRunning(this._ccLibProcessIdentifier);\n    }\n\n    addMessageListener(type, handler) {\n        debugLog.log('Vulcan: Add Listener: ' + type);\n        this._listenerManager.addListener(type, handler);\n    }\n\n    removeMessageListener(type, handler) {\n        debugLog.log('Vulcan: Remove Listener: ' + type);\n        this._listenerManager.removeListener(type, handler);\n    }\n\n    sendMessage(type, payload) {\n        debugLog.log('Vulcan: Send Message: ' + type);\n        this._VulcanMessageLib.sendMessage(type, payload, '', '');\n    }\n\n    dispatchMessage(payload) {\n        debugLog.log('Vulcan: Dispatch Message: ' + payload.type);\n        this._VulcanMessageLib.sendMessage(payload.type, payload.message);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2016 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport BaseEnvironment from './BaseEnvironment';\nimport uuid from 'uuid/v4';\nimport configuration from 'app/js/config/configuration';\nimport NodeVulcanInterface from 'app/js/interface/vulcan/NodeVulcanInterface';\nimport retargetEvents from '@ccx-public/component-shared/utils/retargetEvents';\nimport { nodeConnector, LocalDriver } from '@cclibraries/cc-libraries-js';\nimport { VulcanMessage as CEPVulcanMessage } from 'app/js/interface/cep_libs/Vulcan';\nimport { applyPatches } from './electron/ElectronUtils';\n\n/**\n * Convert menu to the format expected by the native app.\n * @param  {Object} menu         JSON menu object used by CCLibraries\n * @returns {Object}              JSON menu object suitable for the current platform\n */\nfunction convertMenuToNativeFormat(menu) {\n    const getMenuItem = item => ({\n        type: item.divider ? 'separator' : (!item.menuItems ? 'checkbox' : 'submenu'),\n        label: item.label,\n        checked: !!item.checked,\n        id: item.menuId,\n        enabled: item.enableMenu !== false,\n        submenu: item.menuItems && item.menuItems.map(getMenuItem)\n    });\n    return menu.map(getMenuItem);\n}\n\n/**\n * Electron Environment - this is currently only used by Stager.\n */\nexport default class ElectronEnvironment extends BaseEnvironment {\n\n    /**\n     * Check whether we're in an Electron environment. Only instantiate this class if true!\n     * @returns {boolean}\n     */\n    static check() {\n        return !!(window.process && window.process.type);\n    }\n\n    type = 'electron';\n\n    // Custom drag images aren't working properly in Stager - disable for now\n    disableCustomDragImage = true;\n\n    // Use legacy load format for Stager\n    useSVGLegacyHref = true;\n\n    // Used for handlers for messages coming from the product\n    _callbacks = {};\n\n    constructor(w = window) {\n        super(w);\n        this._electron = w.nodeRequire('electron');\n        window.__disable_swc__ = true;\n\n        this._extensionId = 'com.adobe.DesignLibraries.angular';\n\n        retargetEvents.ignoreEventPaths = true;\n\n        // Polyfills (Stager is on a 4 year old version of Electron)\n        if (window.NodeList && !NodeList.prototype.forEach) {\n            NodeList.prototype.forEach = Array.prototype.forEach;\n        }\n\n        const fs = w.nodeRequire('fs');\n        if (!fs.copyFile) {\n            fs.copyFile = function(oldPath, newPath, callback) {\n                try {\n                    // Write to a temp file (streaming copy), then do a rename\n                    // This ensures an atomic write\n                    const tempPath = newPath + '_' + uuid();\n\n                    const tempFile = fs.createWriteStream(tempPath);\n                    const sourceFile = fs.createReadStream(oldPath);\n\n                    let finished = false;\n                    sourceFile.on('end', () => {\n                        if (!finished) {\n                            finished = true;\n                            fs.rename(tempPath, newPath, err => {\n                                if (err) {\n                                    // TODO: There's a fundamental bug in file copy. We're waiting for the\n                                    // read stream to close, not the write stream to close, which means the\n                                    // file may not have finished writing yet and the rename will fail with ENOENT\n                                    // Proper fix would be to switch to fs.copyFile which was added in node 8, but this\n                                    // is a change to the websocket API.\n                                    // For now, we just wait a bit and retry the rename\n                                    setTimeout(() => {\n                                        fs.rename(tempPath, newPath, callback);\n                                    }, 100);\n                                    return;\n                                }\n                                callback(null);\n                            });\n                        }\n                    });\n                    sourceFile.on('error', err => {\n                        finished = true;\n                        callback(err);\n                    });\n                    sourceFile.pipe(tempFile);\n                } catch (err) {\n                    callback(err);\n                }\n            };\n        }\n    }\n\n    /**\n     * Initialize the environment. For Electron, this is asynchronous because we need to send a message to\n     * the app to get some information, and also load the localized strings from disk.\n     *\n     * @returns {Promise}\n     */\n    init() {\n        // Setup a listener for messages from the app\n        this._electron.ipcRenderer.on('cclibrary', (event, message) => this._onMessage(message));\n        return this.exec('CORE', 'getHostEnvironment', this.getExtensionID()).then(hostEnvironment => {\n            this._hostEnvironment = hostEnvironment;\n\n            this.vulcanInterface = new NodeVulcanInterface();\n            this.vulcanInterface.init();\n            this.ccLibrariesDriver = new LocalDriver(nodeConnector(this.vulcanInterface, CEPVulcanMessage));\n\n            // Load the node version of imslib libraries\n            try {\n                this.IMSLib = this._window.nodeRequire(hostEnvironment.nodeImslibPath || 'node-imslib');\n                this.IMSLib.loadLib(hostEnvironment.imslibPath);\n            } catch (e) {\n                this.debugLog('Unable to load node-imslib: ' + e);\n            }\n\n            applyPatches();\n            // Fetch the localized strings by reading the file from disk:\n            return this._loadResourceBundle(hostEnvironment.appUILocale);\n        });\n    }\n\n    /**\n     * Get an object describing the host environment - this includes information about the application name,\n     * version, and background color / theme.\n     *\n     * @returns {Object}\n     */\n    getHostEnvironment() {\n        return this._hostEnvironment;\n    }\n\n    /**\n     * Execute a command in the application. This is the same interface as for executing extendScript in a CEP\n     * application, but instead it sends a message to the app via the Electron IPC.\n     *\n     * @param {string} lib - Name of the library (e.g. CORE, PHXS etc).\n     * @param {string} operation\n     * @param {Array} args\n     * @returns {Promise}\n     */\n    exec(lib, operation, args = []) {\n        const type = `${lib}.${operation}`;\n        // Lightweight random number to match the callback to function name\n        const callback = Math.random().toString(36);\n\n        return new Promise((resolve, reject) => {\n            this._callbacks[callback] = (err, data) => err ? reject(type + ': ' + err) : resolve(data);\n            this._sendMessage({ type, data: args, callback });\n        });\n    }\n\n    /**\n     * Execute a command in the scope of the application. This is shorthand for\n     * `exec(appCode, operation, args)`.\n     *\n     * @param {string} operation\n     * @param {Array} args\n     * @returns {Promise}\n     */\n    execApp(operation, args) {\n        return this.exec(this._hostEnvironment.appName, operation, args);\n    }\n\n    /**\n     * Get and parse the layer info (used by layerSelectionManager for adding assets).\n     * @returns {Promise} Promise returns parsed layer info\n     */\n    getLayerInfo() {\n        return this.execApp('getLayerInfo').then(layerInfo => {\n            try {\n                if (!layerInfo) { return; }\n                return JSON.parse(layerInfo);\n            } catch (e) {\n                this.debugLog(e);\n            }\n        });\n    }\n\n    /**\n     * Show the error message to the end user.\n     * @param  {string} msg - Message to show.\n     */\n    showError(msg) {\n        //Allow the app to override the error messages but still show if it doesn't\n        return this.exec('CORE', 'showError', msg).then(hasShown => {\n            if (!hasShown) {\n                this._electron.remote.dialog.showErrorBox(msg, '');\n            }\n        });\n    }\n\n    _sendMessage(message) {\n        this._electron.ipcRenderer.send('cclibrary', JSON.stringify(message));\n    }\n\n    _onMessage(message) {\n        try {\n            message = JSON.parse(message);\n        } catch (ignore) {\n            // Ignore\n        }\n\n        // TODO: We should be able to use a single map for this. Keeping it as it is for now though.\n        if (message.type === 'callback' && this._callbacks[message.id]) {\n            this._callbacks[message.id](message.error, message.data);\n            delete this._callbacks[message.id];\n\n        } else if (message.type === 'event') {\n            if (message.event === 'com.adobe.csxs.events.ThemeColorChanged') {\n                this._hostEnvironment.appSkinInfo = message.data;\n            }\n            const { data, scope, appId, extensionId } = message;\n            this._notifyEventListeners(message.event, { type: message.event, data, scope, appId, extensionId });\n        }\n    }\n\n    /**\n     * Dispatch an event (created by createEvent) to the application.\n     * @param {Object} event\n     */\n    dispatchEvent(event) {\n        this._sendMessage({ type: 'event', data: event });\n    }\n\n    /**\n     * Get the path to the extension.\n     * @returns {string}\n     */\n    getPluginPath() {\n        return this._hostEnvironment.extensionPath;\n    }\n\n    /**\n     * Get the path to the user's data folder. This is where library data is stored.\n     * @returns {string}\n     */\n    getUserDataPath() {\n        const process = this._window.process;\n        if (process.platform !== 'darwin') {\n            // Replace \\ with /, so the path consistently uses / - otherwise we get some weird crazy errors with rendition paths\n            const userDirectory = process.env.USERPROFILE.replace(/\\\\/g, '/');\n            return userDirectory + '/AppData/Roaming';\n        }\n        return process.env.HOME + '/Library/Application Support';\n    }\n\n    /**\n     * Get the path to the user's documents folder. This is only used by the debug menu items.\n     * @returns {string}\n     */\n    getMyDocumentsPath() {\n        const process = this._window.process;\n        if (process.platform === 'darwin') {\n            return process.env.HOME + '/Documents';\n        }\n        return process.env.USERPROFILE.replace(/\\\\/g, '/') + '/Documents';\n    }\n\n    /**\n     * Set the Fly out menu to a specific JSON/XML (use isMenuJSON to identify if JSON menu is desired)\n     * @param {string} menuItems Object/XML representing the menu.\n     */\n    setPanelFlyoutMenu(menuItems) {\n        this.exec('CORE', 'setPanelFlyoutMenu', convertMenuToNativeFormat(menuItems));\n    }\n\n    /**\n     * Show the context menu at the mouse position with the supplied contents\n     * @param {string}   menu     Object/XMl representing the menu\n     * @param {Function} callback Function to call with the menuId when a menu item is clicked.\n     */\n    setContextMenu(menu, callback) {\n        // Menu.popup is synchronous, and blocks js thread, which interferes with click events\n        // So don't pollute the thread if the menu is empty anyway\n        if (Array.isArray(menu) && !menu.length > 0) {\n            return;\n        }\n        menu = convertMenuToNativeFormat(menu);\n\n        const processMenuItem = item => {\n            if (!item.enabled) {\n                item.type = 'normal';\n                item.submenu = undefined;\n            }\n            if (item.submenu) {\n                item.submenu.forEach(processMenuItem);\n            } else {\n                item.click = () => callback(item.id);\n            }\n        };\n        menu.forEach(processMenuItem);\n\n        const currentWindow = this._electron.remote.getCurrentWindow();\n        this._electron.remote.Menu.buildFromTemplate(menu).popup(currentWindow);\n    }\n\n    /**\n     * Set the title of the panel/dialog window\n     * @param {string} title The title to set\n     */\n    setWindowTitle(title) {\n        this.exec('CORE', 'setWindowTitle', title);\n    }\n\n    /**\n     * Set the title of the panel/dialog window\n     * @param {number} width\n     * @param {number} height\n     */\n    resizeContent(width, height) {\n        // NOTE: This workflow resizes the purchase extension, which is an electron window in Felix\n        // It does NOT work to resize the library panel, which is part of the overall Felix window, and we would need an api from them to handle that case\n        const currentWindow = this._electron.remote.getCurrentWindow();\n        currentWindow.setSize(width, height);\n    }\n\n    /**\n     * Launch the default web browser and navigate to the supplied URL\n     * @param {string} url URL to launch\n     */\n    launchInBrowser(url) {\n        this._electron.shell.openExternal(url);\n    }\n\n    /**\n     * Request the app to open a different extension\n     * @param {string} extensionId\n     * @param {Object} params\n     */\n    requestOpenExtension(extensionId, params) {\n        this.exec('CORE', 'requestOpenExtension', { extensionId, params });\n    }\n\n    /**\n     * Close the current extension\n     */\n    closeExtension() {\n        this.exec('CORE', 'closeExtension');\n    }\n\n    notifyProductInitialized() {\n        // Not sure if Stager is using this for anything, but keeping it for now - can remove if it's not used\n        const eventName = this.isLibrariesManager() ? configuration.MANAGER_CEP_EVENTS.INIT : 'dlPanelInitialized';\n        this.dispatchEvent(this.createEvent(eventName, 'APPLICATION'));\n    }\n\n    /**\n     * Getting the bounding rect in Stager does not include x and y values, so manually set x and y to be the left and top values\n     * @param {Element} element The parent element used to determine the bounding client rectangle\n     * @returns {ClientRect}\n     */\n    getAdjustedBoundingClientRect(element) {\n        if (!element) { return null; }\n        const elementDimensions = element.getBoundingClientRect();\n\n        elementDimensions.x = elementDimensions.left;\n        elementDimensions.y = elementDimensions.top;\n\n        return elementDimensions;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/**\n * Some patches to make our really old version of Electron work\n */\n\nexport function applyPatches() {\n    // Object.values polyfill (not included by default in our stager version)\n    Object.values = (obj) => Object.keys(obj).map(e => obj[e]);\n\n    // Promise finally() polyfill\n    if (!Promise.prototype.finally) {\n        Promise.prototype.finally = function(callback) {\n            if (typeof callback !== 'function') {\n                return this.then(callback, callback);\n            }\n            const P = this.constructor || Promise;\n            return this.then(\n                value => P.resolve(callback()).then(() => value),\n                err => P.resolve(callback()).then(() => { throw err; })\n            );\n        };\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/* global __non_webpack_require__*/\n\nimport UXPEnvironment from './UXPEnvironment';\nimport TextUtils from 'app/applications/PHXS_UXP/js/textUtils';\nimport DocumentUtils from 'app/applications/PHXS_UXP/js/documentUtils';\nimport AppUtils from 'app/applications/PHXS_UXP/js/appUtils';\nimport MenuView from 'app/js/components/MenuView';\nimport ReactDOM from 'react-dom';\nimport libraryManager from 'app/js/managers/libraryManager';\n\nconst Unexpected_Events = [ 'canvasClick', 'com.adobe.csxs.events.flyoutMenuClicked', 'com.adobe.csxs.events.flyoutMenuOpened',\n    'com.adobe.csxs.events.flyoutMenuClosed', 'com.adobe.csxs.events.ThemeColorChanged' ];\n\nexport default class PSEnvironment extends UXPEnvironment {\n\n    // Photoshop's UXP button implementation has a bug where giving them custom styles breaks the native ones.\n    // TODO: remove once https://jira.corp.adobe.com/browse/UXP-15945 is fixed.\n    hasUXPButtonStyleBug = true;\n\n    // Photoshop's UXP input boxes get infinite z-index, they need to be hidden when overlayed with other content.\n    // We previously filed https://jira.corp.adobe.com/browse/UXP-15942 but UXP has said they won't be able to fix this.\n    hasInputZOrderBug = true;\n\n    // Opacity is not a supported property in Photoshop\n    // TODO: remove once bug https://jira.corp.adobe.com/browse/PS-59528 is addressed, or Ps improves their rendering engine\n    hasOpacityBug = true;\n\n    hasUXPStockExtension = true;\n    hasUXPCaptureExtension = true;\n    additionalStockLicenseCoreModules = [ { name: 'photoshop', type: 'module' } ];\n    additionalCaptureCoreModules = [ 'photoshop' ];\n\n    /**\n     * Check whether we're in an UXP PS environment. Only instantiate this class if true!\n     * @returns {boolean}\n     */\n    static check() {\n        // We can verify we're in UXP by checking the userAgent + app\n        try {\n            __non_webpack_require__('photoshop');\n        } catch (e) {\n            return false;\n        }\n        // you could just return 'true' here, but we can also double check it's UXP runtime\n        return navigator.userAgent.indexOf('UXP') > -1;\n    }\n\n    type = 'Photoshop';\n    // plugin id from the manifest.json\n    pluginId = 'com.adobe.cclibrariespanel';\n\n    constructor(w = window) {\n        super(w);\n\n        const uxpHost = window.nodeRequire('uxp').host;\n        const locale = this.findLocaleMatch(uxpHost.locale);\n        this._hostEnvironment = {\n            appName: 'PHXS_UXP',\n            appId: 'PHXS',\n            appVersion: uxpHost.version,\n            appLocale: locale,\n            isAppOnline: true,\n            appUILocale: locale,\n            appSkinInfo: {\n                panelBackgroundColor: {\n                    color: { alpha: 255, green: 83, blue: 83, red: 83 }\n                }\n            }\n        };\n    }\n\n    /**\n     * Route log messages to UXPLog log file in Photoshop product folder.\n     *\n     * @param {string} message\n     */\n    debugLog(message) {\n        // eslint-disable-next-line no-console\n        console.info(message);\n        return true;\n    }\n\n    setPanelFlyoutMenu(menuItems) {\n        const entrypoints = window.nodeRequire('uxp').entrypoints;\n        const currentMenu = entrypoints.getPanel('ccLibrariesPanel').menuItems;\n        let dividerCount = 0;\n        this._flyoutMenuClickHandlers = {};\n        const reformattedMenuItems = menuItems.map(item => {\n            if (item.divider) {\n                // dividers still need unique labels or UXP will think it's a dupe and skip\n                return { id: `DIVIDER_${dividerCount++}`, label: '-' };\n            }\n            this._flyoutMenuClickHandlers[item.menuId] = item.onClick;\n            return { id: item.menuId, label: item.label, enabled: item.enableMenu, checked: item.checked };\n        });\n\n        // If you try to remove and insert in one go, The UI freezes up, so remove them all first, then insert new items\n        for (let i = currentMenu.size; i > 0; i--) {\n            currentMenu.removeAt(i - 1);\n        }\n\n        reformattedMenuItems.forEach((newItem, i) => { currentMenu.insertAt(i, newItem); });\n    }\n\n    handleFlyout(id) {\n        this._flyoutMenuClickHandlers[id] && this._flyoutMenuClickHandlers[id]();\n    }\n\n    /**\n     * UXP Plugins in PS require you to use the entrypoints.setup method for every panel that will load\n     * Each plugin is rendered into a separate island with a given root node in the same DOM.\n     * Note: 'hide' is not currently called when the panel or libraries manager is closed,\n     * but it is provided in case of future use.\n     */\n    get exports() {\n        const entrypoints = window.nodeRequire('uxp').entrypoints;\n\n        return entrypoints.setup({\n            panels: {\n                ccLibrariesPanel: {\n                    show: e => {\n                        this._waitForInit.then(() => {\n                            this._panelMountPoint = this.getMountPoint(e.node);\n                            this.renderPanel(this._panelMountPoint);\n                            // Hides the little gray square in corner of panel that allows for resize\n                            this.core.suppressResizeGripper({ 'type': 'panel', 'target': 'ccLibrariesPanel', 'value': true });\n                        });\n                    },\n                    hide: () => {\n                        if (this._panelMountPoint) {\n                            this.unmountPanel(this._panelMountPoint);\n                            this._panelMountPoint.remove();\n                            delete this._panelMountPoint;\n                        }\n                    },\n                    // we will populate the flyout menu after menuManager has initialized\n                    menuItems: [],\n                    invokeMenu: id => {\n                        this.handleFlyout(id);\n                    }\n                },\n            },\n            commands: {\n                // TODO: uncomment once PS and XD are on UXP 4.4 and support host-specific manifest overrides.\n                // ccLibrariesManager: () => {\n                //     this._getManager().then(mountPoint => mountPoint.showModal());\n                // },\n                adobeStockLicensingPlugin: {\n                    run: async(event) => {\n                        try {\n                            await this.openStockLicenseExtension(JSON.parse(event.data));\n                        } catch (rejectionReason) {\n                            // promise rejected when user closes the dialog by clicking on 'x' icon\n                        }\n                    }\n                }\n            }\n        });\n    }\n\n    /**\n     * Get the path to the extension.\n     * @returns {string}\n     */\n    getPluginPath() {\n        return window.nodeRequire('uxp').entrypoints._pluginInfo._pluginInfo.pluginPath;\n    }\n\n    /**\n     * Gets a list of files from the uxpEntries file path\n     * @param {DataTransfer} dataTransfer object related to drag event\n     * @returns {Promise} array of objects with path to file\n     */\n    async getDragFileList(dataTransfer) {\n        const delimiter = this.isWindowsOS() ? '\\\\' : '/';\n        const paths = dataTransfer.uxpEntries.map(file => file.nativePath);\n        return Promise.all(paths.map((path) => {\n            return libraryManager.getFileSize(path).then((size) => ({\n                path,\n                size,\n                name: path.split(delimiter).pop()\n            }));\n        }));\n\n    }\n\n    // TODO: Implement isLibraryManagerWindowOpen(). can set a flag when showModal() promise returns.\n    // https://adobexdplatform.com/plugin-docs/reference/uxp/class/HTMLDialogElement.html#htmldialogelementshowmodal\n    // Note this documentation is from XD and may be different in terms of what is rendered, but the UXP interface is likely the same.\n\n    /**\n     * When the UXP stock dialog has closed, call stockLicenseExtensionClosed host binding in PS\n     * @param {*} event data from Stock license event\n     */\n    _onUXPStockDialogClosed(event) {\n        const photoshopCCLibrariesPanel = window.nodeRequire('photoshop').cclibrariespanel;\n        photoshopCCLibrariesPanel.stockLicenseExtensionClosed(this._deleteUndefinedKeys(event.data));\n        return super._onUXPStockDialogClosed(event);\n    }\n\n    /**\n     * Called from anywhere that intercepts a right-click (context menu) event.\n     * PS UXP environment does not support nested menus https://jira.corp.adobe.com/browse/PS-59801  in their\n     * native menus, which we need for things like 'Add to group' or 'Copy to', so we need to override and use this\n     *\n     * @param {MouseEvent} event\n     */\n    onContextMenu(event) {\n        event.preventDefault();\n\n        if (this._contextMenu.length > 0 && !this.flyoutDialogElement) {\n            this.flyoutDialogElement = document.createElement('popup');\n\n            // Add flyout to DOM\n            document.body && document.body.appendChild(this.flyoutDialogElement);\n\n            this.flyoutDialogElement.addEventListener('close', this.removeContextMenu);\n\n            const subMenuPresent = this._contextMenu.some(item => item.menuItems);\n\n            const minItems = subMenuPresent ? 4 : 0;\n            ReactDOM.render(<MenuView clientY={event.clientY} menuItems={ this._contextMenu } maxMenuItemsVisible={ 15 } minMenuItemsVisible={ minItems } maxWidth={ 200 } style={ { left: 0, top: 0 } }\n                preserveMainMenuHeightForSubMenus={ true } canShowOutsidePanel = { true } close={ this.closeContextMenu } className=\"panel-search-types\" />, this.flyoutDialogElement);\n\n            this.flyoutDialogElement.showFlyout(event.currentTarget);\n        }\n    }\n\n    /**\n     * Called when flyout should close by clicking on it\n     */\n    closeContextMenu = () => {\n        if (this.flyoutDialogElement) {\n            this.flyoutDialogElement.close();\n        }\n    }\n\n    /**\n     * Called when flyout is closed, we need to remove it from DOM\n     * flyout can be closed in two ways:\n     * 1. when this.closeContextMenu() fn is called\n     * 2. ps closes flyout when user click outside it or esc is pressed etc\n     */\n    removeContextMenu = () => {\n        if (this.flyoutDialogElement) {\n            this.flyoutDialogElement.remove();\n            this.flyoutDialogElement = undefined;\n        }\n    }\n\n    /**\n     * Returns whether or not a video rendering bug is present on current operating system\n     * Currently Video loading and rendering is not supported in UXP on Windows and will throw an exception\n     * and display a black square with infinite z index.\n     * @returns {boolean} true if environment has rendering issue with <video> tag\n     */\n    get hasVideoRenderingBug() {\n        return !!this.isWindowsOS();\n    }\n\n    /**\n     * TODO(kamarora) - Execute commands fired by Libraries panel which are still using the old CEP's exec/exec\n     * Once these operations are moved to api's in PSEnvironment. This function can be deleted.\n     *\n     * @param {string} lib - Name of the library (e.g. CORE, PHXS etc).\n     * @param {string} operation\n     * @param {Array} args\n     * @returns {Promise}\n     */\n    exec(lib, operation, args = []) {\n        if (operation === 'getTempFolder') {\n            return new Promise(function(resolve) {\n                const uxpfs = window.nodeRequire('uxp').storage.localFileSystem;\n                uxpfs.getTemporaryFolder().then(tempFolder => resolve(tempFolder.nativePath));\n            });\n        }\n        if (operation === 'getApplicationVersion') {\n            return new Promise(resolve => {\n                resolve(this._hostEnvironment.appVersion);\n            });\n        }\n        return super.exec(lib, operation, args);\n    }\n\n    /**\n     * TODO(kamarora) - Execute commands fired by Libraries panel which are still using the old CEP's exec/exec\n     * Once these operations are moved to api's in PSEnvironment. This function can be deleted.\n     * Execute a command in the scope of the application. This is shorthand for\n     * `exec(appCode, operation, args)`.\n     *\n     * @param {string} operation\n     * @param {Array} args\n     * @returns {Promise}\n     */\n    execApp(operation, args) {\n        if (operation === 'saveAssets') {\n            return new Promise(function(resolve) {\n                AppUtils.saveAssets(args[0]).then(fileData => resolve(JSON.stringify(fileData)));\n            });\n        } else if (operation === 'saveTextStylePreview') {\n            return new Promise(function(resolve) {\n                TextUtils.saveTextStylePreview(args[0]).then(filePath => resolve(filePath));\n            });\n        }\n\n        return this.exec(this._hostEnvironment.appName, operation, args);\n    }\n\n    get application() {\n        return window.nodeRequire('photoshop').app;\n    }\n\n    get core() {\n        return window.nodeRequire('photoshop').core;\n    }\n\n    //if there are undefined keys in eventData, then PS does not parse that object,\n    //in CEP, we were sending serialized json, hence it did not have undefined keys.\n    _deleteUndefinedKeys(data) {\n        Object.keys(data).forEach(key => {\n            if (data[key] && typeof data[key] === 'object') {\n                this._deleteUndefinedKeys(data[key]);\n            } else if (data[key] === undefined) {\n                delete data[key];\n            }\n        });\n        return data;\n    }\n\n    notifyElementCreated(eventData) {\n        eventData = this._deleteUndefinedKeys(eventData);\n        const photoshopCCLibrariesPanel = window.nodeRequire('photoshop').cclibrariespanel;\n        photoshopCCLibrariesPanel.libraryElementCreated(eventData);\n    }\n\n    notifyElementUpdated() {\n        const photoshopCCLibrariesPanel = window.nodeRequire('photoshop').cclibrariespanel;\n        photoshopCCLibrariesPanel.libraryElementUpdated(); //PS does not need any data\n    }\n\n    notifyElementChosen(eventData) {\n        if (eventData.elementRef) {\n            eventData = this._deleteUndefinedKeys(eventData);\n            const photoshopCCLibrariesPanel = window.nodeRequire('photoshop').cclibrariespanel;\n            photoshopCCLibrariesPanel.libraryElementChosen(eventData);\n        }\n    }\n\n    _notifyLibraryCreated(library) {\n        // Report success or failure\n        const photoshopCCLibrariesPanel = window.nodeRequire('photoshop').cclibrariespanel;\n        photoshopCCLibrariesPanel.createLibraryResponse(library ? true : false);\n    }\n\n    /**\n     * Add an event listener for messages from the application.\n     * @param {string} eventName\n     * @param {Function} callback\n     */\n    addEventListener(eventName, callback) {\n        super.addEventListener(eventName, callback);\n        //TODO (tanagarw) unexpected events, might require cleanup in extension, there could be others as well\n        if (Unexpected_Events.includes(eventName)) {\n            return;\n        }\n        const photoshopAction = window.nodeRequire('photoshop').action;\n        photoshopAction.addNotificationListener([ eventName ], callback);\n    }\n\n    /**\n     * Remove an event listener previously added via `addEventListener()`.\n     * @param {string} eventName\n     * @param {Function} callback\n     */\n    removeEventListener(eventName, callback) {\n        super.removeEventListener(eventName, callback);\n        //TODO (tanagarw) unexpected events, might require cleanup in extension, there could be others as well\n        if (Unexpected_Events.includes(eventName)) {\n            return;\n        }\n        const photoshopAction = window.nodeRequire('photoshop').action;\n        photoshopAction.removeNotificationListener([ eventName ], callback);\n    }\n\n    connectProductInterface(productInterface) {\n        const getProductInterfaceHandler = (method, requiresData = true, callback) => (_message, data) => {\n            if (data || !requiresData) {\n                const result = productInterface[method](data);\n                callback && callback(result);\n            }\n        };\n\n        this.disconnectProductInterface();\n        this._handlers = {\n            ElementOpenForEdit: getProductInterfaceHandler('openElementForEdit'),\n            ElementReveal: getProductInterfaceHandler('revealElement'),\n            ElementChoose: getProductInterfaceHandler('invokeChooseElement'),\n            ElementChooseCancel: getProductInterfaceHandler('cancelChooseElement', false),\n            ElementLinkCreated: getProductInterfaceHandler('reportElementLinkCreated'),\n            ElementDropped: getProductInterfaceHandler('reportElementDropped', false),\n            CreateLibrary: getProductInterfaceHandler('createLibrary', true, library => this._notifyLibraryCreated(library)),\n            DragStarted: getProductInterfaceHandler('startDragFromProduct'),\n            DragEnded: getProductInterfaceHandler('endDragFromProduct', false)\n        };\n\n        // Start listening for events from the product\n        for (const eventName in this._handlers) {\n            this.addEventListener(eventName, this._handlers[eventName]);\n        }\n    }\n\n    disconnectProductInterface() {\n        if (this._handlers) {\n            // Stop listening for events from the product\n            for (const eventName in this._handlers) {\n                this.removeEventListener(eventName, this._handlers[eventName]);\n            }\n            delete this._handlers;\n        }\n    }\n\n    isFontAvailable(style) {\n        return new Promise(function(resolve, reject) {\n            TextUtils.isFontAvailable(style).then(result => resolve(result))\n                .catch(() => reject('Could not get font availability from PS'));\n        });\n    }\n\n    getLayerInfo() {\n        return new Promise(function(resolve, reject) {\n            DocumentUtils.getLayerInfo().then(layerInfo => resolve(layerInfo))\n                .catch(() => reject('Could not get layer info from PS'));\n        });\n    }\n\n    getLayerName() {\n        return new Promise(function(resolve, reject) {\n            DocumentUtils.getActiveLayerName().then(layerName => resolve(layerName))\n                .catch(() => reject('Could not get active layer name from PS'));\n        });\n    }\n\n    getCurrentDocumentState() {\n        return new Promise(function(resolve) {\n            // PHXS only uses layerId, will populate path if needed later\n            const currentState = { path: undefined, layerID: -1 };\n            DocumentUtils.getNumberOfDocuments().then(noOfDocuments => {\n                if (noOfDocuments > 0) {\n                    DocumentUtils.getActiveDocumentId().then(activeDocumentId => {\n                        DocumentUtils.getActiveLayerId(activeDocumentId).then(activeLayerId => {\n                            if (activeLayerId) {\n                                currentState.layerID = activeLayerId;\n                            }\n                            resolve(currentState);\n                        });\n                    });\n                } else {\n                    resolve(currentState);\n                }\n            });\n        });\n    }\n\n    isDocumentOpen(path) {\n        return new Promise(function(resolve) {\n            DocumentUtils.isMatchingDocOpen(path).then(result => resolve(result));\n        });\n    }\n\n    addDocumentChangeListener(callback) {\n        this.removeDocumentChangeListener(callback);\n\n        callback._handler = (message, event) => {\n            // This assumes that the event.data always has one of the following forms:\n            // <documentAfterSave><url>file:///path</url></documentAfterSave> or\n            // <documentAfterSave><url>file:///path</url><name>fileNameWithOutExtension</name></documentAfterSave>\n            let eventPath = event.data.substring(event.data.indexOf('<url>') + 5, event.data.indexOf('</url>'));\n            eventPath = eventPath.split('file://').join('');\n\n            const eventMap = {\n                documentAfterDeactivate: 'deactivated',\n                documentAfterSave: 'saved'\n            };\n\n            callback({\n                type: eventMap[message],\n                path: eventPath\n            });\n        };\n\n        this.addEventListener('documentAfterSave', callback._handler);\n        this.addEventListener('documentAfterDeactivate', callback._handler);\n    }\n\n    removeDocumentChangeListener(callback) {\n        if (callback._handler) {\n            this.removeEventListener('documentAfterSave', callback._handler);\n            this.removeEventListener('documentAfterDeactivate', callback._handler);\n            delete callback._handler;\n        }\n    }\n\n    showError(message) {\n        // TODO(kamarora):id message is undefined super.showError is throwing an exception\n        // which is causing panel to go blank, check message before calling super.showError()\n        if (message) {\n            super.showError(message);\n        }\n    }\n\n    deleteFile(filePath) {\n        const photoshopCCLibrariesPanel = window.nodeRequire('photoshop').cclibrariespanel;\n        return photoshopCCLibrariesPanel.deleteTempFile(filePath);\n    }\n}\n","/*************************************************************************\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n * Copyright 2021 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n **************************************************************************/\n\n/**\n * Polyfills for browser's JS functionality that should be contributed\n * back to the UXP platform.\n */\n\n/**\n * Decodes base64 encoded string.\n * Polyfill for browser's atob.\n *\n * Original: https://github.com/inexorabletash/polyfill/blob/master/web.js#L60.\n *\n * @param {string} input Base64 string to decode.\n * @returns {string} Decoded string.\n */\nfunction atob(input) {\n    const B64_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n    let position = 0;\n    const output = [];\n    let buffer = 0;\n    let bits = 0;\n    let n;\n\n    input = input.replace(/\\s/g, '');\n    if (input.length % 4 === 0) {\n        input = input.replace(/=+$/, '');\n    }\n    if (input.length % 4 === 1) {\n        throw Error('The string to be decoded contains invalid characters.');\n    }\n    if (/[^+/0-9A-Za-z]/.test(input)) {\n        throw Error('The string to be decoded contains invalid characters.');\n    }\n\n    while (position < input.length) {\n        n = B64_ALPHABET.indexOf(input.charAt(position));\n        buffer = (buffer << 6) | n;\n        bits += 6;\n\n        if (bits === 24) {\n            output.push(String.fromCharCode((buffer >> 16) & 0xff));\n            output.push(String.fromCharCode((buffer >> 8) & 0xff));\n            output.push(String.fromCharCode(buffer & 0xff));\n            bits = 0;\n            buffer = 0;\n        }\n        position += 1;\n    }\n\n    if (bits === 12) {\n        buffer = buffer >> 4;\n        output.push(String.fromCharCode(buffer & 0xff));\n    } else if (bits === 18) {\n        buffer = buffer >> 2;\n        output.push(String.fromCharCode((buffer >> 8) & 0xff));\n        output.push(String.fromCharCode(buffer & 0xff));\n    }\n\n    return output.join('');\n}\n\n/**\n * Encodes bytes (as string) to base64.\n * Polyfill for browser's btoa.\n *\n * Original: https://github.com/inexorabletash/polyfill/blob/master/web.js#L60.\n * @param {string} input\n * @returns {string} Encoded string as base64.\n */\nfunction btoa(input) {\n    const B64_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n    let position = 0;\n    const out = [];\n    let o1;\n    let o2;\n    let o3;\n    let e1;\n    let e2;\n    let e3;\n    let e4;\n\n    // eslint-disable-next-line no-control-regex\n    if (/[^\\x00-\\xFF]/.test(input)) {\n        throw Error('The string to be encoded contains invalid characters.');\n    }\n\n    while (position < input.length) {\n        o1 = input.charCodeAt(position++);\n        o2 = input.charCodeAt(position++);\n        o3 = input.charCodeAt(position++);\n\n        // 111111 112222 222233 333333\n        e1 = o1 >> 2;\n        e2 = ((o1 & 0x3) << 4) | (o2 >> 4);\n        e3 = ((o2 & 0xf) << 2) | (o3 >> 6);\n        e4 = o3 & 0x3f;\n\n        if (position === input.length + 2) {\n            e3 = 64;\n            e4 = 64;\n        } else if (position === input.length + 1) {\n            e4 = 64;\n        }\n\n        out.push(B64_ALPHABET.charAt(e1), B64_ALPHABET.charAt(e2), B64_ALPHABET.charAt(e3), B64_ALPHABET.charAt(e4));\n    }\n\n    return out.join('');\n}\n\nconst base64AToB = window.atob || atob;\nconst base64BToA = window.btoa || btoa;\n\nexport { base64AToB as atob, base64BToA as btoa };\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observable } from 'mobx';\nimport { observer } from 'mobx-react';\n\n/**\n * UXP exposes menu/menuitem DOM element types for constructing a context menu. This component takes\n * a JSON description of a menu, and converts it to a form that UXP can display.\n */\n\n@observer\nexport default class UXPContextMenu extends React.Component {\n\n    @observable.ref menuItems = [];\n\n    showContextMenu(menuItems, x, y) {\n        this.menuItems = menuItems;\n        this._menuRef && this._menuRef.popupAt(x, y);\n    }\n\n    renderMenuItem = (data, index) => {\n        if (data.divider) {\n            return <hr key={ index } />;\n        }\n\n        if (data.menuItems && data.enableMenu) {\n            // `menu` gets associated with the next `menuitem` to render as submenu\n            return (\n                <>\n                    <menu key={ index + 'sub' } label={ data.label }>{ data.menuItems.map(this.renderMenuItem) }</menu>\n                    <menuitem key={ index } label={ data.label } />\n                </>);\n        }\n\n        return <menuitem key={ index } label={ data.label } disabled={ data.enableMenu === false } checked={ data.checked === true } onClick={ data.onClick } />;\n    }\n\n    setMenuRef = e => this._menuRef = e;\n\n    render() {\n        return <menu ref={ this.setMenuRef }>{ this.menuItems.map(this.renderMenuItem) }</menu>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n// Entry point for the main panel view in UXP - includes the UXP context menu.\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\n\nimport PanelView from 'app/js/components/PanelView';\nimport UXPContextMenu from './UXPContextMenu';\n\n@observer\nexport default class UXPPanel extends React.Component {\n\n    setMenuRef = e => this._menuRef = e;\n\n    showContextMenu(menuItems, onClick, x, y) {\n        this._menuRef && this._menuRef.showContextMenu(menuItems, onClick, x, y);\n    }\n\n    render() {\n        return (\n            <div id=\"uxp-panel-root\" className=\"uxp-panel-root body\" acceptsFirstPointer=\"all\">\n                <PanelView />\n                <UXPContextMenu ref={ this.setMenuRef } />\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { observable } from 'mobx';\n\n@observer\nexport default class UXPAutoSizer extends React.Component {\n    static propTypes = {\n        children: PropTypes.func.isRequired,\n    };\n\n    @observable height = 0;\n    @observable width = 0;\n    throttled = false;\n\n    componentDidMount() {\n        window.addEventListener('resize', this.handleResize);\n        this.handleResize();\n    }\n\n    componentWillUnmount() {\n        window.removeEventListener('resize', this.handleResize);\n    }\n\n    handleResize = () => {\n        this.height = this.contentBox.clientHeight;\n        this.width = this.contentBox.clientWidth;\n    };\n\n    render() {\n        const {\n            children,\n        } = this.props;\n\n        return (\n            <div\n                data-test-id=\"auto-sizer\"\n                ref={ref => (this.contentBox = ref)}\n                style={{\n                    height: '100%',\n                    width: '100%'\n                }}\n            >\n                {children({ height: this.height, width: this.width })}\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n// UXP does not support the MutationObserver which is needed for bulk upload.\n// Since XD does not currently support bulk upload anyway, the mutation observer\n// is not actually necessary to track when the drag leaves the panel, so we can\n// just stub this out here.\n\n// TODO: we will need to find a solution for tracking dom changes before we are\n// able to implement bulk upload for XD. Best solution would be for UXP to implement MutationObserver.\nexport default class UXPMutationObserver {\n\n    constructor() {}\n\n    disconnect() {}\n\n    observe() {}\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport debugLog from 'app/js/utils/debugLog';\nimport BaseVulcanInterface from './BaseVulcanInterface';\n\nexport default class UXPVulcanInterface extends BaseVulcanInterface {\n\n    /**\n     * Initializes the UXP Vulcan interface\n     */\n    init() {\n        const uxpVulcan = window.nodeRequire('uxp').vulcan;\n        this._dispatcher = uxpVulcan.dispatcher;\n        this._control = uxpVulcan.control;\n        this._message = uxpVulcan.message;\n        this._ccLibProcessIdentifier = this._control.getInstalledAppsEx ? this.ccLibProcessSAPCode : this.ccLibProcessSpecifier;\n        this._getInstalledApps = this._control.getInstalledAppsEx ? this._getInstalledAppsV2 : this._getInstalledAppsV1;\n    }\n\n    _getInstalledAppsV1() {\n        // Deprecated since Vulcan 6.0, leaving in for now just in case needed for backwards compat.\n        return this._control.getInstalledApps();\n    }\n\n    _getInstalledAppsV2() {\n        return this._control.getInstalledAppsEx();\n    }\n\n    isCCLibProcessInstalled() {\n        return this._getInstalledApps()\n            .then(apps => { return !!apps.find(app => app.name === this._ccLibProcessIdentifier || app.sapCode === this._ccLibProcessIdentifier); })\n            .catch(err => {\n                debugLog.log('Vulcan: isCCLibProcessInstalled check failed ' + err);\n            });\n    }\n\n    isCCLibProcessRunning() {\n        return this._getInstalledApps()\n            .then(apps => {\n                const installed = apps.find(app => app.name === this._ccLibProcessIdentifier || app.sapCode === this._ccLibProcessIdentifier);\n                return !!installed && installed.isRunning();\n            })\n            .catch(error => {\n                debugLog.log('Vulcan: isCCLibProcessRunning check failed ' + error);\n            });\n    }\n\n    launchCCLibProcess() {\n        return this._getInstalledApps()\n            .then(apps => {\n                const installed = apps.find(app => app.name === this._ccLibProcessIdentifier || app.sapCode === this._ccLibProcessIdentifier);\n                return !!installed && installed.launch();\n            })\n            .catch(error => {\n                debugLog.log('Vulcan: failed to launch CCLibProcess ' + error);\n            });\n    }\n\n    addMessageListener(type, handler) {\n        debugLog.log('Vulcan: Add Listener: ' + type);\n        this._dispatcher.addEventListener(this._vulcanPrefix + type, handler);\n    }\n\n    removeMessageListener(type, handler) {\n        debugLog.log('Vulcan: Remove Listener: ' + type);\n        this._dispatcher.removeEventListener(this._vulcanPrefix + type, handler);\n    }\n\n    // We could update this to target a specific app, but simply broadcasting to all is sufficient\n    sendMessage(type, payload) {\n        debugLog.log('Vulcan: Send Message: ' + type);\n        this._dispatcher.broadcastMessage(new this._message(this._vulcanPrefix + type, payload));\n    }\n\n}\n\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2016 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/**\n    UXP Environment - this should be generic to any UXP app. Specific apps (like XD) can subclass this environment.\n**/\n\n/* global __non_webpack_require__*/\n\nimport BaseEnvironment from './BaseEnvironment';\nimport { applyPatches } from './uxp/UXPUtils';\nimport UXPPanel from './uxp/UXPPanel';\nimport UXPAutoSizer from './uxp/UXPAutoSizer';\nimport UXPMutationObserver from './uxp/UXPMutationObserver';\nimport UXPTooltip from './uxp/UXPTooltip';\nimport UXPVulcanInterface from 'app/js/interface/vulcan/UXPVulcanInterface';\nimport toastManager from 'app/js/managers/toastManager';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport UXPLibraryContentsView from 'app/js/environments/uxp/UXPLibraryContentsView';\nimport ReactDOM from 'react-dom';\nimport configuration from 'app/js/config/configuration';\nimport localSettings from 'app/js/config/localSettings';\nimport { REACT_SPECTRUM_THEME_MAP } from 'app/js/managers/themeManager';\nimport CCLibEventTarget from '../utils/uxpEventTarget';\nimport { uxpConnector, LocalDriver, HybridDriver } from '@cclibraries/cc-libraries-js';\nimport appState from 'app/js/appState';\nimport { UXPColorProfiles } from 'app/js/utils/colorUtils';\nimport { arrayBufferToDataURL } from 'app/js/utils/encodingUtils';\nimport imsInterface from '../interface/imsInterface';\nimport translationManager from 'app/js/managers/translationManager';\nimport { supportedLocales } from './BaseEnvironment';\n\nconst OS_NAME = {\n    darwin: 'Mac OS X',\n    win10: 'Windows'\n};\n\n// UXP uses the superlative theme names like React Spectrum.\n// Object.entries would crash in environment checks in Dimension environment so add safeguard\nconst UXP_THEME_MAP = Object.entries ? Object.assign({}, ...Object.entries(REACT_SPECTRUM_THEME_MAP).map(([ a,b ]) => ({ [b]: a }))) : {};\n\n// Temp: IMSLib should be exposed through UXP\nclass IMSLib {\n    createRefEx(imsEndpoint) {\n        return { endpoint: imsEndpoint };\n    }\n\n    fetchAccessToken(imsRef, clientId, clientSecret, userId, serviceId, scopes, callback) {\n        return libraryManager.getAccessToken(userId, clientId, clientSecret, scopes)\n            .then(data => callback(null, data), callback);\n    }\n}\n\n/**\n * UXP Environment - this is used by newer apps like XD.\n *\n * Note, you can't instantiate a UXPEnvironment directly - it should be subclassed for specific app contexts (e.g. XD)\n */\nexport default class UXPEnvironment extends BaseEnvironment {\n\n    // UXP doesn't support the svg <use> tag, so need the polyfill\n    useSVGPolyfill = true;\n\n    // Each UXP host application styles their own controls.\n    hasNativeControlStyles = true;\n\n    // TODO: We need to build the filesystem abstraction into the environment layer, since UXP uses different FS APIs.\n    // For now, turning off FS mode.\n    supportsFileSystem = false;\n\n    get supportsFileURLs() {\n        const useHybridDriver = localSettings.getDebugValue('jsapiHybridDriver');\n        if (useHybridDriver === undefined) {\n            return true;\n        }\n        return !useHybridDriver;\n    }\n\n    // Turn off the custom drag images, since UXP doesn't support this\n    disableCustomDragImage = true;\n\n    // Switch to a div-based implementation of image buttons, since UXP doesn't support images inside a <button>\n    supportsImagesInButtons = false;\n\n    // TODO: Remove once https://jira.corp.adobe.com/browse/UXP-10618 is fixed\n    hasUXPInputClickBug = true;\n\n    // TODO: Remove once https://jira.corp.adobe.com/browse/UXP-18703 is fixed.\n    hasUXPInputSelectionRangeBug = true;\n\n    // TODO: Remove once https://jira.corp.adobe.com/browse/UXP-16256 is fixed\n    hasUXPScrollWidthBug = true;\n\n    // TODO: Remove once https://jira.corp.adobe.com/browse/UXP-16541 is fixed.\n    hasUXPSelectBlurBug = true;\n\n    // TODO: Remove once https://jira.corp.adobe.com/browse/UXP-17605 is fixed.\n    // On UXP holding down CTRL while clicking will not set mouseEvent.ctrlKey = true, but metaKey = true\n    hasUXPWindowsCTRLClickBug = true;\n\n    // TODO: Remove once https://jira.corp.adobe.com/browse/UXP-18037 is fixed.\n    hasUXPResizeBug = true;\n\n    useUXPDragImage = true;\n\n    // Override the AutoSizer component for UXP\n    AutoSizer = UXPAutoSizer;\n\n    // Override the MutationObserver component for UXP\n    MutationObserver = UXPMutationObserver;\n\n    // Override the Tooltip component for UXP\n    Tooltip = UXPTooltip;\n\n    // Use UXPLibraryContents view to take advantage of uxp-optimized's Virtualizer\n    LibraryContentsView = UXPLibraryContentsView;\n\n    // Override the drag event type.\n    ElementDragId = 'application/cc-graphic';\n\n    // UXP does not support animations yet.\n    supportsAnimations = false;\n\n    // UXP does not support CSS transform. Remove once ticket below is addressed.\n    // https://jira.corp.adobe.com/browse/UXP-7928\n    hasUXPTransformBug = true;\n\n    // TODO: Remove once https://jira.corp.adobe.com/browse/UXP-10612 is fixed\n    hasUXPRevealElementBug = true;\n\n    // TODO: Remove once https://jira.corp.adobe.com/browse/UXP-10790 is fixed\n    autoScrollNotSupported = true;\n\n    // UXP does not support getting the duration of a video by loading the videos metadata\n    videoElementsSupported = false;\n\n    // UXP does not support most specifying `display: list-item`, useful for paragraphs with bullet-points.\n    supportsCSSListItem = false;\n\n    // Prior to UXP 4, there's a limit of 4KB for any localStorage values on Windows\n    maxLocalStorageLength = 4000;\n\n    // The UXP native id of an element in the panel.\n    nativeIds = {};\n\n    constructor(w) {\n        super(w);\n        applyPatches(w);\n\n        // This should be further populated by each subclass extending UXPEnvironment.\n        this._hostEnvironment = {\n            appSkinInfo: {}\n        };\n\n        // uxp.host stores all APIs we use to communicate with the host application.\n        this._appInterface = window.nodeRequire('uxp').host;\n        this._extensionId = 'com.adobe.cclibrariespanel';\n\n        // This is used to prevent XD from asking us to render until we're ready!\n        this._waitForInit = new Promise(resolve => this._isReadyToRender = resolve);\n    }\n\n    init() {\n        // Listen for theme changes in the host app.\n        this._appInterface.addEventListener(configuration.THEME_COLOR_CHANGED_EVENT_UXP, () => {\n            this._updateTheme().then(() => this._notifyEventListeners(configuration.THEME_COLOR_CHANGED_EVENT));\n        });\n        this.vulcanInterface.init();\n        // Fetch the localized strings by reading the file from disk and set up the initial app theme.\n        return Promise.all([ this._loadResourceBundle(this._hostEnvironment.appUILocale), this._updateTheme() ]);\n    }\n\n    vulcanInterface = new UXPVulcanInterface();\n    IMSLib = new IMSLib();\n\n    get cloudDriverConnector() {\n        return async () => {\n            const { licensing } = window.nodeRequire('uxp');\n            const env = await licensing.isProductionEnv() ? 'production' : 'staging';\n            const { clientId, clientSecret, clientScope } = imsInterface.getEnvironment(env);\n            const refreshAccessToken = () => licensing.getAccessToken({ clientId, clientSecret, clientScope, forceRefresh: false });\n            const token = await refreshAccessToken();\n            return {\n                env,\n                token,\n                refreshAccessToken\n            };\n        };\n    }\n\n    get ccLibrariesDriver() {\n        return localSettings.getDebugValue('jsapiHybridDriver')\n            ? this.hybridDriver\n            : new LocalDriver(uxpConnector(__non_webpack_require__('uxp').vulcan), { ignoreRenditionGrids: true });\n    }\n\n    get hybridDriver() {\n        return new HybridDriver(\n            uxpConnector(__non_webpack_require__('uxp').vulcan),\n            this.cloudDriverConnector\n        );\n    }\n\n    /**\n     * In the case of UXP, we don't directly render the panel. Instead of rendering anything, we just remember that the panel has been initialized.\n     * If somebody requests the panel to be rendered before this, we'll wait for it).\n     */\n    shouldRenderPanel() {\n        this._isReadyToRender();\n        return false;\n    }\n\n    /**\n     * Renders the UXP panel into the given DOM element\n     *\n     * @param {HTMLElement} domElement\n     */\n    renderPanel(domElement) {\n        ReactDOM.render(<UXPPanel ref={ e => this._panel = e } />, domElement);\n    }\n\n    /**\n     * Renders the UXP panel into the given DOM element\n     *\n     * @param {HTMLElement} domElement\n     */\n    async renderManager(domElement) {\n        // In environments where the library manager is not loaded in app.js, this causes a circular dependency if\n        // loaded with the other imports.\n        let ManagerView = await import('app/js/components/manager/ManagerView');\n        ManagerView = ManagerView.default || ManagerView;\n\n        return new Promise(resolve => {\n            ReactDOM.render(<ManagerView ref={ e => this._manager = e } />, domElement, () => resolve(domElement));\n        });\n    }\n\n    /**\n     * Unmount React root for panel (avoids memory leaks).\n     *\n     * @param {HTMLElement} domElement\n     */\n    unmountPanel(domElement) {\n        ReactDOM.unmountComponentAtNode(domElement);\n        delete this._panel;\n    }\n\n    /**\n     * Unmount React root for manager (avoids memory leaks).\n     *\n     * @param {HTMLElement} domElement\n     */\n    unmountManager(domElement) {\n        ReactDOM.unmountComponentAtNode(domElement);\n        delete this._manager;\n    }\n\n    /**\n     * UXP will provide the <body> as the root node to the first panel island,\n     * or a <uxp-panel> tag for subsequent panels. Rendering directly into <body>\n     * is not recommended by React and may cause the UXP dev tools Elements tab to fail\n     * upon hot reload, so we recommend creating a mount point (such as a <div> or <dialog>)\n     * into which you will render the panel, manager, or application dialog.\n     * The element we create, however, has to be one of the supported UXP html elements:\n     * https://www.adobe.io/xd/uxp/develop/reference/uxp/ui-html-index/\n     * @param {HTMLElement} rootNode\n     * @param {string} elementType\n     * @returns {HTMLElement} typically used for the mount point that you render into for the panel, manager, or uxp application dialog\n     */\n    getMountPoint(rootNode, elementType = 'div') {\n        const domElement = document.createElement(elementType);\n        rootNode.appendChild(domElement);\n        return domElement;\n    }\n\n    /**\n     * UXP allows you to create a <dialog> DOM element, which can be appended anywhere within the <body>,\n     * controlled using a specified API (e.g. showModal()), and rendered into.\n     * UXP Dialog elements may be implemented differently per app.\n     *\n     * In XD, it is a modal dialog above the document that blocks all other UI, and only one can be shown at once.\n     * XD Dialog Docs: https://adobexdplatform.com/plugin-docs/reference/uxp/class/HTMLDialogElement.html#htmldialogelement\n     * Newer but less complete XD Dialog Docs: https://www.adobe.io/xd/uxp/uxp/reference-js/Global%20Members/HTML%20Elements/HTMLDialogElement/\n     * Since you can only show one dialog at once, you should always close or dismiss a dialog first\n     * and then wait for the dialog's promise to resolve before showing another one.\n     *\n     * In PS, it is a non-blocking floating window.\n     * Hence, in PS, the UXP dialog is used for rendering the Libraries Manager, whereas XD has a special UXP panel type for the floating window.\n     * @param {HTMLElement} rootNode\n     * @returns {HTMLDialogElement}\n     */\n    getUXPDialog(rootNode) {\n        return this.getMountPoint(rootNode, 'dialog');\n    }\n\n    /**\n     * Get an object describing the host environment - this includes information about the application name,\n     * version, and background color / theme.\n     *\n     * @returns {Object}\n     */\n    getHostEnvironment() {\n        return this._hostEnvironment;\n    }\n\n    /**\n     * Name of the operating system provided by the product. Windows or Mac OS X based on the platform.\n     * @returns {string}\n     */\n    _getClientOSName() {\n        const os = window.nodeRequire('os');\n        return OS_NAME[os.platform()] || 'Unknown Operation System';\n    }\n\n    /**\n     * The version information of the operating system we are running on.\n     * @returns {string}\n     */\n    getOSVersion() {\n        const os = window.nodeRequire('os');\n        const version = os.release();\n        if (version && os.platform() === 'darwin') {\n            // On Mac, UXP returns the Darwin version rather than the OS version.\n            // This is always 4 versions ahead (see https://en.wikipedia.org/wiki/Darwin_(operating_system))\n            // We use a mapping - unfortunately we can only reliably get the major/minor version\n            const darwinMajorVersion = parseInt(version.split('.')[0]);\n            return `10.${darwinMajorVersion - 4}`;\n        }\n        return version;\n    }\n\n    /**\n     * Gets a file reference suitable for read-write by displaying a \"Save\" file picker dialog to the user.\n     * https://adobexdplatform.com/plugin-docs/reference/uxp/module/storage.html#module-storage-filesystemprovider-getfileforsaving\n     * @param {string} suggestedName The prepopulated name of the file in the dialog.\n     * @returns {Promise.<?File>}\n     */\n    getFileForSaving(suggestedName) {\n        const fs = window.nodeRequire('uxp').storage.localFileSystem;\n        return fs.getFileForSaving(suggestedName);\n    }\n\n    /**\n     * Gets a file (or files) suitable for reading by displaying an \"Open\" file picker dialog to the user.\n     * File entries returned by this API are read-only - use getFileForSaving to get a File entry you can write to.\n     * https://adobexdplatform.com/plugin-docs/reference/uxp/module/storage.html#module-storage-filesystemprovider-getfileforopening\n     * @returns {Promise.<Array.<File>>}\n     * @param {Array} types an array of string representing allowable file types to be opened\n     */\n    getFileForOpening(types) {\n        const fs = window.nodeRequire('uxp').storage.localFileSystem;\n        return fs.getFileForOpening({ types });\n    }\n\n    /**\n     * Get UXP panel's local data folder\n     * @returns {Promise<Folder>}\n     */\n    getDataFolder() {\n        return new Promise((resolve, reject) => {\n            const fs = window.nodeRequire('uxp').storage.localFileSystem;\n            fs.getDataFolder().then(pluginFolder => {\n                return resolve(pluginFolder);\n            }, error => {\n                return reject(error);\n            });\n        });\n    }\n\n    /**\n     * Get access to Entry from panel's data folder\n     * Note: UXP allows reading files present only in plugin data folder\n     * @param {string} entryName The name of the file present in plugin folder\n     * @returns {Promise<Entry>}\n     */\n    getEntryFromDataFolder(entryName) {\n        return new Promise((resolve, reject) => {\n            if (!entryName) {\n                return reject('File Name is required');\n            }\n            this.getDataFolder().then(folder => {\n                folder.getEntry(entryName).then(file => {\n                    return resolve(file);\n                }).catch(() => {\n                    return reject('Unable to find entry');\n                });\n            }, () => {\n                return reject('Unable to fetch folder');\n            });\n        });\n    }\n\n    /**\n     * Get image Data URI from image's absolute file path\n     * @param {string} imageAbsPath The abosulte path of image located in plugin folder\n     * @returns {Promise<Entry>}\n     */\n    getBase64DataFromImage(imageAbsPath) {\n        return new Promise(resolve => {\n            if (!imageAbsPath) {\n                resolve(undefined);\n            } else {\n                this.getEntryFromDataFolder(imageAbsPath.split('/').pop()).then(entry => {\n                    const format = { format: window.nodeRequire('uxp').storage.formats.binary };\n                    entry.read(format).then(arrayBuffer => {\n                        resolve(arrayBufferToDataURL(arrayBuffer));\n                    }).catch(e =>\n                        this.debugLog.log(e));\n                }, () => {\n                    return resolve(undefined);\n                });\n            }\n        });\n    }\n\n    // PS uses a command to open a UXP modal dialog, which appears as a window in PS.\n    // XD, however, does not use a command, but rather a special type of floating window uxp panel.\n    openLibraryManagerWindow() {\n        const pm = window.nodeRequire('uxp').pluginManager;\n        const cclibraries = Array.from(pm.plugins).find(plugin => plugin.id === this.pluginId);\n        cclibraries.invokeCommand('ccLibrariesManager');\n    }\n\n    // Note: This is used in the case of PS or Ai UXP, where the manager window is a uxp dialog.\n    // XD is the exception, where a uxp dialog appears as a document modal dialog,\n    // and it has a separate mechanism for opening the manager window as a panel that appears as a floating window.\n    _getManager() {\n        if (!this._managerInitPromise) {\n            this._managerInitPromise = this._waitForInit.then(() => {\n                // Add the manager dialog as a sibling of the panel in the DOM.\n                this._managerMountPoint = this.getUXPDialog(this._panelMountPoint.parentNode);\n                // Reset the manager state each time it closes.\n                this._managerMountPoint.addEventListener('close', () => appState.manager.reset());\n                return this.renderManager(this._managerMountPoint);\n            });\n        }\n        return this._managerInitPromise;\n    }\n\n    /**\n     * Open a dialog on top of the Libraries Manager.\n     *\n     * Technically, this means a React Component managed by the DialogManager will be rendered in the Libraries Manager window,\n     * which in PS is actually a UXP dialog (whereas in XD it is a floating window panel).\n     * @param {string} name\n     * @param {Object} params\n     * @param {Function} onCloseCallback\n     */\n    openDialogInManager(name, params, onCloseCallback) {\n        // In UXP, the panel and manager are on the same JS context so we can just open the dialog directly.\n        const openDialog = () => appState.manager.dialogManager.openDialog(name, params, onCloseCallback);\n        this._getManager().then(mountPoint => {\n            // We have to wait until the view is initialized before drawing an overlay.\n            mountPoint.addEventListener('load', openDialog);\n            // We don't want the dialog to re-open the next time the manager is loaded.\n            mountPoint.addEventListener('close', () => mountPoint.removeEventListener('load', openDialog));\n            mountPoint.showModal();\n        });\n    }\n\n    /**\n     * Execute an extendscript command - this is the primary way we tell the application to do something.\n     *\n     * @param {string} lib - Name of the library (e.g. CORE, PHXS etc).\n     * @param {string} operation\n     * @param {Array} args\n     * @returns {Promise}\n     */\n    exec(lib, operation, args = []) {\n        const command = `${lib}.${operation}`;\n        this.debugLog(`exec ${command} ${args}`);\n        return Promise.reject('not implemented');\n    }\n\n    /**\n     * Execute a command in the scope of the application. This is shorthand for\n     * `exec(appCode, operation, args)`.\n     *\n     * @param {string} operation\n     * @param {Array} args\n     * @returns {Promise}\n     */\n    execApp(operation, args) {\n        return this.exec(this._hostEnvironment.appName, operation, args);\n    }\n\n    /**\n     * Show the error message to the end user.\n     * @param {string} message - Message to show.\n     */\n    showError(message) {\n        // For now, we just display error messages as a toast - we might want to add an error toast for this\n        toastManager.openToast('message', { message });\n    }\n\n    /**\n     * Dispatch an event (created by createEvent) to the application.\n     */\n    dispatchEvent() {\n        return null;\n    }\n\n    /**\n     * Get the path to the extension.\n     * @returns {string}\n     */\n    getPluginPath() {\n        return null;\n    }\n\n    /**\n     * Get the path to the user's data folder. This is where library data is stored.\n     * @returns {string}\n     */\n    getUserDataPath() {\n        const os = window.nodeRequire('os');\n        if (this.isWindowsOS()) {\n            // Replace \\ with /, so the path consistently uses /\n            const userDirectory = os.homedir().replace(/\\\\/g, '/');\n            return userDirectory + '/AppData/Roaming';\n        }\n        return `${os.homedir()}/Library/Application Support`;\n    }\n\n    /**\n     * Get the path to the user's documents folder. This is only used by the debug menu items.\n     * @returns {string}\n     */\n    getMyDocumentsPath() {\n        return null;\n    }\n\n    /**\n     * Set the Fly out menu to a specific JSON/XML (use isMenuJSON to identify if JSON menu is desired)\n     * @param {Object} menu Object representing the menu.\n     */\n    setPanelFlyoutMenu(menu) {\n        this._flyoutMenu = menu;\n    }\n\n    /**\n     * Show the context menu at the mouse position with the supplied contents\n     * @param {Object} menu Object representing the menu\n     */\n    setContextMenu(menu) {\n        this._contextMenu = menu;\n    }\n\n    /**\n     * Called from anywhere that intercepts a right-click (context menu) event. We need to disable the\n     * default behaviour.\n     *\n     * @param {MouseEvent} event\n     */\n    onContextMenu(event) {\n        const menuItems = this._contextMenu;\n        if (menuItems && menuItems.length) {\n            this._panel.showContextMenu(menuItems, event.clientX, event.clientY);\n        }\n    }\n\n    /**\n     * Set the title of the panel/dialog window\n     * @param {string} title The title to set\n     */\n    setWindowTitle(title) {\n        this.debugLog('TODO: Implement setWindowTitle() - is this possible?', title);\n    }\n\n    /**\n     * Set the title of the panel/dialog window\n     * @param {number} width\n     * @param {number} height\n     */\n    resizeContent(width, height) {\n        this.debugLog('TODO: Implement resizeContent() - is this possible?', width, height);\n    }\n\n    /**\n     * Launch the default web browser and navigate to the supplied URL\n     * @param {string} url URL to launch\n     * @returns {Promise}\n     */\n    launchInBrowser(url) {\n        const uxp = window.nodeRequire('uxp');\n        uxp.shell.openExternal(url);\n    }\n\n    /**\n     * Close the current extension\n     */\n    closeExtension() {\n        this.debugLog('TODO: Implement closeExtension()');\n    }\n\n    /**\n     * Get the root panel element inside the UXP island\n     */\n    getRootPanelElement() {\n        return document.getElementById('uxp-panel-root');\n    }\n\n    /**\n     * Get the root Libraries Manager element inside the UXP island\n     */\n    getRootManagerElement() {\n        return document.getElementById('manager-root');\n    }\n\n    /**\n     * Get the window width for UXP\n     */\n    getPanelWidth() {\n        const root = this.getRootPanelElement() || this.getRootManagerElement();\n        return root?.clientWidth || 0;\n    }\n\n    /**\n     * Get the window height for UXP\n     */\n    getPanelHeight() {\n        const root = this.getRootPanelElement() || this.getRootManagerElement();\n        return root?.clientHeight || 0;\n    }\n\n    scrollBugFix(collection, clientHeight, offset = 0) {\n        // In UXP, if the scrollHeight of a scroll container changes, it doesn't ensure that scrollTop is\n        // set to a valid value (i.e. clipped to the range [0, Math.max(0, scrollHeight - clientHeight)]).\n        // This confuses the virtual scroller since it thinks it's rendering at a different scroll position\n        // than expected.\n        //\n        // This is a temporary hack to detect this state and correct for it - we can remove this once the\n        // UXP bug is fixed (https://jira.corp.adobe.com/browse/UXP-10612).\n        const collectionView = collection && collection._collectionView;\n        const scrollingContainer = collectionView && collectionView._scrollingContainer;\n\n        if (!scrollingContainer) {\n            return;\n        }\n\n        // Close your eyes and pretend you didn't see this\n        const scrollHeight = collectionView.props.cellLayoutManager.getTotalSize().height;\n        const maxScrollTop = Math.max(0, scrollHeight - clientHeight);\n        const scrollTop = Math.max(0, Math.min(maxScrollTop, scrollingContainer.scrollTop + offset));\n\n        if (scrollingContainer.scrollTop !== scrollTop) {\n            // Clip scrollTop - UXP should do this automatically:\n            scrollingContainer.scrollTop = scrollTop;\n            collectionView._onScroll({ target: scrollingContainer });\n        }\n    }\n\n    registerElementNode(element, node) {\n        if (!node || !element) { return; }\n        this.nativeIds[element.id] = node._nativeId;\n    }\n\n    getNativeIdForElement(elementId) {\n        return this.nativeIds[elementId];\n    }\n\n    /**\n     * Fetch the current host app theme.\n     */\n    _getTheme() {\n        if (this._appInterface.getTheme) {\n            return this._appInterface.getTheme().then(theme => UXP_THEME_MAP[theme]);\n        }\n        return Promise.resolve(configuration.currentProduct.config.defaultTheme);\n    }\n\n    /**\n     * Fetch the current host app theme and update our local binding.\n     */\n    _updateTheme() {\n        return this._getTheme().then(theme => {\n            this._hostEnvironment.appSkinInfo.panelNamedTheme = theme;\n        });\n    }\n\n    /**\n     * When the UXP stock dialog has finished this will resolve or reject depending on if it was successful\n     * @param {*} event data from Stock license event\n     */\n    _onUXPStockDialogClosed(event) {\n        const eventData = event.data;\n        return new Promise((resolve, reject) => {\n            if (eventData && eventData.didFinish) {\n                // Either resolve the with the ref of the newly created element or re-use the existing element.\n                // If an element has been created it's reference string will be eventData.data.elementRef\n                // If an existing element is updated then the ref we need is eventData.elementRef(finalElementRef in the panel)\n                // `eventData.data.elementRef` points to what stock panel gives back(`finalElementRef` in the panel).\n                // `eventData.elementRef` points to the elementRef that is sent from here during `init`.\n                resolve({\n                    ...eventData.data,\n                    // grab finalElementRef or the elementRef sent during init\n                    elementRef: eventData.elementRef || eventData.data?.elementRef,\n                });\n            } else {\n                reject(eventData && eventData.data);\n            }\n        });\n    }\n\n    _stockExtensionOpen = false;\n\n    /**\n     * Open the Stock UXP extension via UXP's PluginManager\n     * Note: Currently only used in PS UXP\n     * @param {*} config with desired element, and parameters passed from adobeStockUtils file ->\n     *      contentId, skipQuotaCheck, licenseType, metadata, addToLibraryID, thumbnailDetails, stockSearchAsset\n     */\n    openStockLicenseExtension({ element, ...options }) {\n        if (this._stockExtensionOpen) {\n            return Promise.reject('Stock extension already open');\n        }\n        return new Promise((resolve, reject) => {\n            this._stockExtensionOpen = true;\n            const pm = window.nodeRequire('uxp').pluginManager;\n            // Get libs plugin location and then from there construct path to stock-panel-licensing folder\n            const librariesExtension = Array.from(pm.plugins).find(plugin => plugin.id === 'com.adobe.cclibrariespanel');\n            const stockLocation = librariesExtension.pluginPath + 'extensions/stock-panel-licensing';\n            const stockPlugin = pm.createPlugin(stockLocation, pm.PLUGIN_TYPE_FIRST_PARTY, {\n                name: 'Adobe Stock Licensing Plugin',\n                allowDebugging: true,\n                enableDebugging: this._enableStockDebugging(stockLocation),\n                allowCodeGenerationFromStrings: true,\n            });\n            pm.addPlugin(stockPlugin, true);\n            const stockExtension = stockPlugin.runtime;\n            stockExtension.addEventListener(pm.RUNTIME_INITIALIZE, () => {\n                // even though stock is 1st party, we still have to register Vulcan because it won't be injected by PS\n                stockExtension.registerUxpModule('vulcan', () => window.nodeRequire('uxp').vulcan);\n                stockExtension.registerUxpModule('licensing', () => window.nodeRequire('uxp').licensing);\n                stockExtension.registerUxpModule('host', () => window.nodeRequire('uxp').host);\n                stockExtension.registerCoreModule('cclibraries', () => new CCLibEventTarget());\n                if (this.additionalStockLicenseCoreModules) {\n                    this.additionalStockLicenseCoreModules.forEach(({ name, type }) => stockExtension.registerCoreModule(name, () => {\n                        // TODO: AI-4257489: cdoHost is not been sent to child plugins opened via UXP PluginManager\n                        // Revert after the above ticket is fixed\n                        switch (type) {\n                        case 'window-global':\n                            // window.cdoHost is not accessible in child plugins(like Stock plugin opened via pluginManager), so injecting it as CoreModule.\n                            return window[name];\n                        case 'module':\n                        default:\n                            return window.nodeRequire(name);\n                        }\n                    }));\n                }\n            });\n            stockExtension.load();\n\n            const licenseData = () => {\n                const data = { ...options };\n                if (element) {\n                    data['elementRef'] = element.getLegacyReference && element.getLegacyReference();\n                    data['elementType'] = element.type;\n                    data['elementName'] = element.name;\n                }\n                return data;\n            };\n\n            stockExtension.invokeCommand('adobeStockLicensingPlugin', licenseData()).then(async(event) => {\n                await stockExtension.unload();\n                pm.removePlugin(stockPlugin);\n                if (event === 'reasonCanceled') { // When the user clicks on \"x\" icon to close the dialog\n                    reject(event);\n                } else {\n                    resolve(this._onUXPStockDialogClosed(event));\n                }\n            });\n        // no catch() needed as the reject() will be handled at the point of invocation\n        // for example in adobeStockUtils.licenseAssetAndSaveToLibrary\n        }).finally(() => {\n            this._stockExtensionOpen = false;\n        });\n    }\n\n    isWindowsOS() {\n        // PS environment is 'win', XD is 'win32', so allow for some flexibility here.\n        // MacOS is 'darwin', so make sure we don't catch that.\n        const regex = new RegExp(/^win/);\n        return regex.test(window.nodeRequire('uxp').host.platform);\n    }\n\n    _isLoggedIn = false;\n\n    // We do a little hack here to keep isLoggedIn synchronous like the other environments, when actually the UXP check is async\n    isLoggedIn() {\n        if (!this._isCheckingUser) {\n            this._isCheckingUser = true;\n            window.nodeRequire('uxp').licensing.checkIfUserIsValid().then(isLoggedIn => {\n                this._isCheckingUser = false;\n                if (this._isLoggedIn !== isLoggedIn) {\n                    this._isLoggedIn = isLoggedIn;\n                    this._notifyEventListeners(configuration.PROFILE_CHANGE_EVENT_ID);\n                }\n            });\n        }\n        return this._isLoggedIn;\n    }\n\n    /**\n     * Gets a list of files from the uxpEntries file path\n     * @param {DataTransfer} dataTransfer object related to drag event\n     * @returns {Promise} array of objects with path to file\n     */\n    async getDragFileList(dataTransfer) {\n        const delimiter = this.isWindowsOS() ? '\\\\' : '/';\n        const paths = dataTransfer?.uxpEntries.map(file => file.nativePath);\n        return Promise.all(paths.map((path) => {\n            return libraryManager.getFileSize(path).then((size) => ({\n                path,\n                size,\n                name: path.split(delimiter).pop()\n            }));\n        }));\n\n    }\n\n    /**\n     * UXP 'fs' implementation is incomplete, so we generally disable it in UXPUtils so it is not used by the JS-API,\n     * but in some instances we need it, so use at your own risk\n     */\n    get fs() { return __non_webpack_require__('fs'); }\n\n    hideDebugFlyoutMenu(debugFileName) {\n        try {\n            const debugLocation = this.fs.lstatSync(`file:${this.getGlobalRoot()}${debugFileName}`);\n            return !debugLocation.isFile();\n        } catch (e) {\n            this.debugLog(e);\n            return true;\n        }\n    }\n\n    /**\n     * Updates the host info for theme and locale\n     * @param {string} locale - en_US, ja_JP, es_MX, etc.\n     */\n    updateHostInfo(locale) {\n        const host = this.getHostEnvironment();\n\n        if (locale) {\n            host.appUILocale = supportedLocales.includes(locale) ? locale : 'en_US';\n            return this._loadResourceBundle(host.appUILocale).then(() => {\n                translationManager.setStringMap(this._resourceBundle);\n            });\n        }\n\n        return Promise.resolve();\n    }\n\n    /**\n     * Method to copy the given content to clipboard\n     * @param {*} content Object to be copied\n     */\n    copyContentToClipboard(content) {\n        this.canvas.writePlainTextClipboard(content.toString());\n    }\n\n    /**\n     * Look for debug.json file in stock extension folder to programmatically determine whether to enable debugging\n     * @param {string} stockLocation\n     * @returns {Bool}\n     */\n    _enableStockDebugging(stockLocation) {\n        try {\n            const debugFile = this.fs.lstatSync(`file:${stockLocation}/debug.json`);\n            return debugFile.isFile();\n        } catch (e) {\n            this.debugLog(e);\n            return false;\n        }\n    }\n\n    /**\n     * Find the common locale key to represent the given language in an application\n     * @param {string} appLanguage for example 'fr'\n     * @param {Object} appLocaleMap application specific rules to interpret equivalent languages\n     * @returns {string} the CC libraries locale key, for example 'fr_FR'\n     */\n    findLocaleMatch(appLanguage, appLocaleMap = {}) {\n        if (!appLanguage) {\n            return 'en_US';\n        }\n        const locale\n            = appLocaleMap[appLanguage]\n            || this.supportedLocales.find(locale => locale.startsWith(appLanguage))\n            || this.supportedLocales.find(locale => locale.startsWith(appLanguage.substr(0, 2)))\n            || 'en_US';\n        return locale;\n    }\n\n    /**\n     * Returns the color profile. This getter is used by ColorElementView/GradientElementView to render the color element.\n     * @returns {string} color profile\n     */\n    get colorProfile() {\n        return UXPColorProfiles.MONITOR;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/* global __non_webpack_require__*/\nimport { btoa, atob } from 'app/js/environments/uxp/btoa-atob-polyfill';\nimport uuid from 'uuid/v4';\n\n/**\n * Some patches to make UXP work\n */\n\nexport function applyPatches(window) {\n\n    // Fix so nodeRequire can work\n    window.nodeRequire = module => {\n        // The fs module exposed by UXP is incomplete (missing some methods like stat), so use at your own risk\n        if (module === 'fs') {\n            // The fs module exposed by UXP is incomplete (missing some methods like stat), so don't allow it to be used.\n            return;\n        }\n        return __non_webpack_require__(module);\n    };\n\n    // UXP Doesn't support accessing node.attributes as an object map, only as an array\n    const attributesProperty = Object.getOwnPropertyDescriptor(window.Element.prototype, 'attributes');\n    !window.IS_XD_TEST_ENVIRONMENT && !window.IS_AI_TEST_ENVIRONMENT && !window.IS_PS_TEST_ENVIRONMENT && Object.defineProperty(window.Node.prototype, 'attributes', {\n        get() {\n            const attributes = attributesProperty.get.apply(this);\n            const newAttributes = [];\n            for (let i = 0; i < attributes.length; i++) {\n                newAttributes.push(attributes[i]);\n                newAttributes[attributes[i].name] = attributes[i].value;\n            }\n            return newAttributes;\n        }\n    });\n\n    // UXP doesn't have DOMParser - For now, we pull in xmldom as a polyfill\n    // Note: When we remove this polyfill, check if the new UXP DOMparser returns upper or lowercase tagnames\n    // If uppercase, remove the toUpperCase from HTMLText.nodeToJSX()\n    if (!window.DOMParser) {\n        // Bug [CCXC-7075]: xmldom seems not to be parsing the first node correctly if it is text without surrounding html\n        window.DOMParser = require('xmldom').DOMParser;\n    } else {\n        !window.IS_XD_TEST_ENVIRONMENT && console.warn('UXP added window.DOMParser - can remove patch');\n    }\n\n    // TODO: polyfill can be removed now\n    if (!window.btoa) {\n        window.btoa = btoa;\n        window.atob = atob;\n    } else {\n        !window.IS_XD_TEST_ENVIRONMENT && !window.IS_PS_TEST_ENVIRONMENT && console.warn('UXP added window.btoa - can remove patch');\n    }\n\n    // SAMjs relies on this state to enable/disable ons subscriptions. Setting this value to 'visible'\n    // ensures that the ons interface in sam will start up.\n    if (!window.document.visibilityState) {\n        window.document.visibilityState = 'visible';\n    }\n\n    // `crypto.getRandomValues() not supported` is a known issue with uuid in UXP\n    // SAM.js allows us to override uuid in UXP, which is less tricky than polyfilling getRandomValues\n    // https://git.corp.adobe.com/CCX/shared-asset-model-js/pull/107\n    window.crypto = window.crypto || {};\n    if (!window.crypto.randomUUID) {\n        window.crypto.randomUUID = uuid;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\n\nimport UXPTooltip from 'app/js/environments/uxp/UXPTooltip';\nimport environment from 'app/js/environment';\n\n@observer\nclass FeatureTooltip extends React.Component {\n\n    static propTypes = {\n        children: PropTypes.node,\n        featureId: PropTypes.string,\n        className: PropTypes.string\n    };\n\n    _setTooltipNode = node => {\n        this._tooltipNode = node;\n    }\n\n    componentDidMount() {\n        environment.registerFeatureTooltip(this.props.featureId, this._tooltipNode);\n    }\n\n    componentDidUpdate(prevProps) {\n        if (prevProps.featureId !== this.props.featureId) {\n            environment.unregisterFeatureTooltip(prevProps.featureId, this._tooltipNode);\n            environment.registerFeatureTooltip(this.props.featureId, this._tooltipNode);\n        }\n    }\n\n    componentWillUnmount() {\n        environment.unregisterFeatureTooltip(this.props.featureId, this._tooltipNode);\n    }\n\n    render() {\n        return <div ref={ this._setTooltipNode }>{ this.props.children }</div>;\n    }\n}\n\n@observer\nexport default class XDTooltip extends React.Component {\n\n    static propTypes = {\n        children: PropTypes.node,\n        featureId: PropTypes.string,\n        content: PropTypes.oneOfType([\n            PropTypes.string,\n            PropTypes.array\n        ]),\n        disable: PropTypes.bool,\n        className: PropTypes.string\n    };\n\n    render() {\n        if (this.props.featureId && !this.props.disable && environment.getAppSetting('featureTooltipsEnabled')) {\n            return <FeatureTooltip featureId={ this.props.featureId } className={ this.props.className }>{ this.props.children }</FeatureTooltip>;\n        }\n\n        // Regular (non-feature) tooltip\n        return <UXPTooltip { ...this.props }/>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { Atom } from 'mobx';\nimport MissingFontWrapper from './MissingFontWrapper';\n\nconst MISSING_FONT_TYPE = 'application/vnd.adobe.element.missingfont+dcx';\n\nexport default class MissingFontsModel {\n\n    constructor(XDCCLibrariesAPIs) {\n        this._api = XDCCLibrariesAPIs;\n        this._collapsed = true;\n        // TODO [XD-118755] Switch to missing fonts specific event infrastructure once available\n        this._changeAtom = new Atom('missingFontChange',\n            () => this._api.addAssetsChangeListener(this._onLibraryChange),\n            () => this._api.removeAssetsChangeListener(this._onLibraryChange)\n        );\n    }\n\n    _reportChanged() {\n        if (!this._reportChangedTimeout) {\n            this._reportChangedTimeout = setTimeout(() => {\n                delete this._reportChangedTimeout;\n                this._changeAtom.reportChanged();\n            }, 2000);\n        }\n    }\n\n    _onLibraryChange = (event, id, type) => {\n        if (event === 'assetsPanelDismissMissingFontsEditor' || type === MISSING_FONT_TYPE) {\n            this._reportChanged();\n        }\n    }\n\n    _wrapMissingFont(element) {\n        if (!element) { return; }\n        return new MissingFontWrapper(element);\n    }\n\n    get missingFonts() {\n        this._changeAtom.reportObserved();\n        const missingFonts = this._api.getMissingFonts();\n        return missingFonts.map(element => this._wrapMissingFont(element));\n    }\n\n    get collapsed() {\n        this._changeAtom.reportObserved();\n        return this._collapsed;\n    }\n\n    toggleCollapsed() {\n        this._collapsed = !this._collapsed;\n        this._changeAtom.reportChanged();\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { observer } from 'mobx-react';\nimport appState from 'app/js/appState';\nimport PropTypes from 'prop-types';\nimport ReactSpectrumDialog from '@torq-native/react-spectrum/Dialog';\nimport { LibrariesProvider } from 'app/js/state/LibrariesContext';\n\n/**\n * Top level React component for the application modal dialog (UXP only) that appears over the document with blocking UI.\n * Similar to PanelView and ManagerView in that it provides the LibrariesProvider,\n * and similar to a simplified version of  ManagerDialogContainerView in that it renders the React Spectrum 2 dialog container and dialog.\n *\n * Because the dialog blocks interaction with the panel, and will render components that need a context,\n * we pass in the panel context into this part of the render tree. A separate state tree is not necessary for now\n * unless we choose to use the dialogManager (because the dialogManager for the panel does things we dont want,\n * such as closing on canvas click, and to prevent the dialog from also showing in the panel).\n */\n@observer\nexport default class ApplicationDialogView extends React.Component {\n\n    static propTypes = {\n        children: PropTypes.node // dialog\n    };\n\n    render() {\n        return (\n            <div className=\"application-dialog-container\" data-test-id=\"application-dialog-container\">\n                <LibrariesProvider value={ appState.panel } style={{ fontFamily: 'inherit' }}>\n                    <ReactSpectrumDialog>\n                        { this.props.children }\n                    </ReactSpectrumDialog>\n                </LibrariesProvider>\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2016 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/* global __non_webpack_require__*/\n\nimport { observable, when, autorun, Atom, reaction } from 'mobx';\nimport UXPEnvironment from './UXPEnvironment';\nimport configuration from 'app/js/config/configuration';\nimport { translate } from 'app/js/managers/translationManager';\nimport { reportApplyMetric, isTeamLibrary, getTeamLibraryPlatformFolder, getSourceId, shouldOfferDelimitedNamesConversion } from 'app/js/utils/libraryUtils';\nimport debugLog from 'app/js/utils/debugLog';\nimport { insertStockPreview, getTextStyleDataFromElement, getColorOrGradientFromElement } from 'app/applications/SPRK/js/utils';\nimport XDTooltip from 'app/applications/SPRK/js/components/XDTooltip';\nimport path from 'path';\nimport { clearDocumentCache } from 'app/js/models/modelCache';\nimport { getMultipleOrderStringsBetween, formatShareSheetToast } from 'app/js/utils/stringUtils';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport libraryManager, { LIBRARY_SYNC_STATES } from 'app/js/managers/libraryManager';\nimport MissingFontsModel from 'app/applications/SPRK/js/models/MissingFontsModel';\nimport metrics from 'app/js/interface/metrics';\nimport { canEditInSource, editInSource } from 'app/js/utils/editOriginalUtils';\nimport viewState from 'app/js/state/viewState';\nimport appState from 'app/js/appState';\nimport environment from 'app/js/environment';\nimport { getGroupLevel } from 'app/js/utils/groupUtils';\nimport ApplicationDialogView from 'app/js/components/ApplicationDialogView';\nimport ReactDOM from 'react-dom';\nimport { UXPColorProfiles } from 'app/js/utils/colorUtils';\nimport { canRenameElements } from 'app/js/menus/elementContextMenu';\n\n/**\n * XD has some specific hooks that extend UXP, so it has its own environment\n * Parts of the XD first party API are exposed on the XDEnvironment.\n */\nconst localeMap = {\n    'zh-Hans': 'zh_CN',\n    'zu': configuration.TEST_LOCALE // XD uses Zulu as their test locale\n};\n\n// XD returns the wrong theme for itself. They're actually 'lighter'.\n// TODO: remove this map and the _getTheme() override when they fix that.\nconst XD_THEME_MAP = {\n    'light': 'lighter'\n};\n\n/* these are subcategories and subtypes in payload data that XD is interested in analytics data */\nconst _xdAnalyticsSubcategoriesAndSubtypes = {\n    'New Library': [ 'create' ],\n    Library: [ 'delete' ],\n    Group: [ 'create', 'rename', 'delete', 'delete-with-assets', 'order' ],\n    Element: [ 'add', 'add-note', 'add-to-group', 'rename', 'use', 'update-all', 'accept-update', 'order',\n        'edit-in-source-document', 'reveal-in-library', 'view-in-source-document', 'publish-to-source-library' ],\n    Search: [ 'input' ],\n    Manage: [ 'publish', 'unpublish', 'share', 'toggle-off', 'toggle-on', 'update' ],\n    Navigation: [ 'browse-libraries', 'browse-org' ],\n    'Root View': [ 'browse-libraries' ],\n    'Library Panel': [ 'select-document-assets', 'select-library', 'select-search-type', 'root-view',\n        'deselect-filter', 'select-filter', 'expand-group', 'collapse-group', 'view-change', 'sort-change' ],\n    'Root Search': [ 'input' ],\n    Toast: [ 'publish-now' ],\n    Launch: [ 'open-manager' ]\n};\n\n/* this is aggregate event in case of multiple items being selected,\n * currently we are interested only in add-to-group\n * there are other events such as delete/copy/mode that supports aggregate\n * but we are not interested in those at this point.\n * This list can be extended more in the future if needed.\n */\nconst _xdAnalyticsElementTypes = {\n    'add-to-group': [ 'agg' ],\n    'update-all': [ undefined ],\n    'accept-update': [ undefined ]\n};\n\n// TODO: Break some of this functionality out into environments/xd utils\n\nexport default class XDEnvironment extends UXPEnvironment {\n\n    /**\n     * Check whether we're in an XD environment. Only instantiate this class if true!\n     * @returns {boolean}\n     */\n    static check() {\n        // We detect whether we're in an XD environment by seeing whether the xd module is available\n        try {\n            __non_webpack_require__('xd');\n        } catch (e) {\n            return false;\n        }\n        return true;\n    }\n\n    type = 'XD';\n    // plugin id from the manifest.json\n    pluginId = 'CC_LIBS';\n    developerMode = process.env.NODE_ENV !== 'production'; // true if the xd plugin is under development\n\n    // In XD, logging is really expensive, and the API generates a lot of log messages. We disable this by default (it can be enabled via a feature flag)\n    disableAPILoggingByDefault = true;\n\n    _documentChangeAtom = new Atom('xdDocumentChange');\n\n    _settingsChangeAtom = new Atom('xdSettingsChange');\n\n    _colorProfileChangeAtom = new Atom('xdColorProfileChange')\n\n    _moduleCache = {};\n\n    // Override the Tooltip component for XD\n    Tooltip = XDTooltip;\n\n    // https://jira.corp.adobe.com/browse/XD-145598\n    hasUXPScrollZIndexBug = true;\n\n    @observable _isCoeditorPublishing = false;\n\n    constructor(w = window) {\n        super(w);\n\n        // Get information about the XD context for the host environment\n        // Note that XD doesn't support region info, so we need to map onto a locale we support (e.g. en => en_US).\n        const application = this.application;\n        const appLanguage = application.locale;\n        const locale = this.findLocaleMatch(appLanguage, localeMap);\n        const appVersion = application.config.appVersion;\n\n        this._hostEnvironment = {\n            appName: 'SPRK',\n            appId: 'SPRK',\n            appVersion,\n            appLocale: locale,\n            isAppOnline: true,\n            appUILocale: locale,\n            appSkinInfo: {\n                panelBackgroundColor: {\n                    color: { alpha: 255, green: 245, blue: 245, red: 245 }\n                }\n            }\n        };\n\n        metrics.setEnvironment({ productVersion: appVersion });\n\n        this._missingFontsModel = new MissingFontsModel(this._XDCCLibrariesAPIs);\n\n        this._waitForInit.then(() => {\n            // TODO: These listeners from PR#6211 should be using Atoms to align with the existing pattern.\n            // PublishStateListeners\n            // We had to move these here since waitForXD utility below may tell us XD is ready but we are not there yet\n            this._XDCCLibrariesAPIs.addCoeditorPublishStartListener(this._coeditorPublishingHandler);\n            this._XDCCLibrariesAPIs.addCoeditorPublishEndListener(this._coeditorFinishPublishingHandler);\n            this._isCoeditorPublishing = !!this._XDCCLibrariesAPIs.isCoeditorPublishing();\n        });\n    }\n\n    _updateCloudAssetId = id => {\n        this._cloudAssetId = id;\n    }\n\n    _updateCloudStorageWritable = writableStatus => {\n        this._hasWritableStorage = writableStatus;\n    }\n\n    get colorProfile() {\n        this._colorProfileChangeAtom.reportObserved();\n        return this._XDCCLibrariesAPIs.getColorProfile?.() === 'srgb' ? UXPColorProfiles.SRGB : UXPColorProfiles.MONITOR;\n    }\n\n    get screenColorProfile() {\n        this._colorProfileChangeAtom.reportObserved();\n        return this._XDCCLibrariesAPIs.getScreenColorProfile?.();\n    }\n\n    async _waitForXD() {\n        await this._XDCCLibrariesAPIs.waitForXD();\n\n        // Initialize the document state.\n        this._updateCloudAssetId(this._XDCCLibrariesAPIs.getPermanentCloudUrn());\n        this._updateCloudStorageWritable(this._XDCCLibrariesAPIs.isCloudStorageWritable());\n\n        // `addPermanentCloudUrnListener` has logic to remove the event listener after triggering the callback.\n        this._XDCCLibrariesAPIs.addPermanentCloudUrnListener(this._updateCloudAssetId);\n        this._XDCCLibrariesAPIs.addCloudStorageWritableListener(this._updateCloudStorageWritable);\n\n        // add callback for canvas click\n        this._XDCCLibrariesAPIs.addCanvasMouseDownListener(() => this._onCanvasClick());\n\n        this._updateIsPaidUser();\n        this.addIsPaidUserListener(this._updateIsPaidUser);\n\n        // Register for document id changes - the id changes when you save the document as a new document\n        // (e.g. save as local, save as cloud doc).\n        const docInfo = this._host.docInfo;\n        docInfo.on(docInfo.DOC_ID_CHANGE, () => {\n            debugLog.log(`Document id changed: ${docInfo.docId}`);\n            // Clear the models for the old document library, since the new one will have a separate id\n            // (avoids keeping it around in memory forever)\n            clearDocumentCache();\n            // Local document id changed, cloud asset id is now stale. It will be updated by `addPermanentCloudUrnListener` handler when XD syncs it to the cloud.\n            this._updateCloudAssetId(undefined);\n            // XD disposes the listener after calling it once, so add it every time the id changes to ensure we get notified when the new doc gets synced.\n            this._XDCCLibrariesAPIs.addPermanentCloudUrnListener(this._updateCloudAssetId);\n            this._documentChangeAtom.reportChanged();\n        });\n\n        docInfo.on(docInfo.USER_CHANGED_NAME, () => {\n            this._documentChangeAtom.reportChanged();\n            if (libraryManager.publishedDocumentLibrary && libraryManager.publishedDocumentLibrary.isWritable) {\n                // Update published library name.\n                libraryManager.publishedDocumentLibrary.name = this.documentName;\n            }\n        });\n\n        if (this._XDCCLibrariesAPIs.registerChangeCallback) {\n            this._XDCCLibrariesAPIs.registerChangeCallback('settingsChange', () => {\n                this._settingsChangeAtom.reportChanged();\n            });\n        }\n\n        if (this._XDCCLibrariesAPIs.addColorProfileChangeListener) {\n            this._XDCCLibrariesAPIs.addColorProfileChangeListener(() => {\n                this._colorProfileChangeAtom.reportChanged();\n            });\n        }\n    }\n\n    /**\n     * Initialize any APIs exposed from the library panel to the environment. This function is called\n     * when it's safe for the environment to use the exposed APIs\n     */\n    notifyProductInitialized() {\n        this._XDCCLibrariesAPIs.initLibrariesApis(this.exports.ccLibrariesAPI);\n    }\n\n    /**\n     * Initialize the environment. This is asynchronous because we need to load the localization strings, and wait for\n     * XD to initialize\n     *\n     * @returns {Promise}\n     */\n    init() {\n        this.vulcanInterface.init();\n        return Promise.all([ super.init(), this._waitForXD() ]);\n    }\n\n    /**\n     * UXP Plugins in XD require an export of a module with a show and hide function.\n     * Each plugin is rendered into a separate island with a given root node in the same DOM.\n     * Note: 'hide' is not currently called when the panel or libraries manager is closed,\n     * but it is provided in case of future use.\n     */\n    get exports() {\n        return {\n            panels: {\n                ccLibrariesPanel: {\n                    show: e => {\n                        if (!this._panel) {\n                            this._waitForInit.then(() => {\n                                this._panelMountPoint = this.getMountPoint(e.node);\n                                this.renderPanel(this._panelMountPoint);\n                            });\n                        }\n                    },\n                    hide: () => {\n                        if (this._panelMountPoint) {\n                            this.unmountPanel(this._panelMountPoint);\n                            this._panelMountPoint.remove();\n                            delete this._panelMountPoint;\n                        }\n                    }\n                },\n                ccLibrariesManager: {\n                    show: e => {\n                        if (!this._manager) {\n                            this._waitForInit.then(() => {\n                                this._managerMountPoint = this.getMountPoint(e.node);\n                                this.renderManager(this._managerMountPoint);\n                            });\n                        }\n                    },\n                    hide: () => {\n                        if (this._managerMountPoint) {\n                            this.unmountManager(this._managerMountPoint);\n                            this._managerMountPoint.remove();\n                            delete this._managerMountPoint;\n                        }\n                    }\n                }\n            },\n            ccLibrariesAPI: {\n                getMultipleOrderStringsBetween,\n                revealAssets: ids => this.revealAssets(ids),\n                revealDocumentAssetsView: () => libraryManager.currentLibrary = libraryManager.documentAssetsContainer,\n                revealRootView: () => viewState.showRootView(),\n                setItemViewMode: mode => viewState.setViewState(mode),\n                canEditElementInSource: (elementRef) => this.canEditElementInSource(elementRef),\n                editElementInSource: (elementRef) => this.editElementInSource(elementRef),\n                // XD uses resolveElementReference to get the data they need to apply an element on canvas.\n                // resolveElementReference() is now asynchronous, so XD needs to update their use of the API.\n                // For now, it's safe to use the cached value, since the element is bound to be cached and loaded,\n                // considering it was just seen and applied by the user.\n                resolveElementReference: (elementRef) => libraryManager.resolveCachedElementReference(elementRef),\n                getColorOrGradientFromElement,\n                getTextStyleDataFromElement,\n                getLibraryById: (id) => libraryManager.getLibraryById(id),\n                getLibraries: () => libraryManager.libraries,\n                addLinkStateListener: (assetId, cb) => this.addLinkStateListener(assetId, cb),\n                removeLinkStateListener: (assetId, cb) => this.removeLinkStateListener(assetId, cb),\n                registerLibrary: (id, callback) => this.registerLibrary(id, callback),\n                addLibraryListChangedListener: (callback) => this.addLibraryListChangedListener(callback),\n                removeLibraryListChangedListener: (callback) => this.removeLibraryListChangedListener(callback),\n                hasLibrariesLoadingError: () => libraryManager.librariesInitError,\n                addLibraryNameChangedListener: (id, callback) => this.addLibraryNameChangedListener(id, callback),\n                removeLibraryNameChangedListener: (id) => this.removeLibraryNameChangedListener(id),\n                waitForInitialLoad: () => libraryManager.waitForInitialLoad(),\n                getServiceInfo: () => libraryManager.getServiceInfo(),\n                shouldOfferDelimitedNamesConversion: this._handleXDMigrationDetection,\n                canRenameElements: (elements) => {\n                    return canRenameElements(elements);\n                },\n                renameElement: (element) => {\n                    if (element && canRenameElements([ element ])) {\n                        appState.panel.viewManager.startRename(element);\n                    }\n                },\n                getSourceId\n            }\n        };\n    }\n\n    /**\n     * Returns whether or not the current document library needs to be migrated\n     * to convert group names that contain the path view delimiter\n     * @returns {boolean}\n     */\n    _handleXDMigrationDetection = () => {\n        return shouldOfferDelimitedNamesConversion(libraryManager.documentAssetsContainer);\n    }\n\n    /**\n     * Open a dialog on top of the Libraries Manager.\n     * @param {string} name\n     * @param {Object} params\n     * @param {Function} onCloseCallback\n     */\n    openDialogInManager(name, params, onCloseCallback) {\n        // Open the manager and when it's ready, send the event to open the dialog.\n        this.openLibraryManagerWindow();\n        // In XD, the panel and manager are on the same JS context so we can just open the dialog directly.\n        appState.manager.dialogManager.openDialog(name, params, onCloseCallback);\n    }\n\n    /**\n     * Open a modal dialog over XD document. Will block interaction with the panel, and have the same panel context.\n     * @param {string} dialogName The name of an application dialog registered with the DialogManager\n     * @param {Object} [params]\n     * @returns {promise} The UXP HTMLDialogElement#showModal returns a promise, unlike in the regular DOM.\n     */\n    openApplicationDialog(dialogName, params) {\n        if (!this._panelMountPoint) { return; }\n\n        return this._XDCCLibrariesAPIs.waitForModalDialogClosed().then(() => {\n            const dialogMountPoint = this.getUXPDialog(this._panelMountPoint.parentNode);\n            this._renderApplicationDialog(dialogName, dialogMountPoint, params);\n\n            return dialogMountPoint.showModal().catch(error => {\n                if (error.code === dialogMountPoint.REJECTION_REASON_NOT_ALLOWED) {\n                    console.error('App does not allow showing dialog, e.g. may already be another dialog');\n                }\n            });\n        });\n    }\n\n    /**\n     * Renders the ApplicationDialogView into the given dialog DOM element mount point\n     * https://adobexdplatform.com/plugin-docs/reference/uxp/class/HTMLDialogElement.html\n     *\n     * @param {string} dialogName\n     * @param {HTMLDialogElement} dialogElement\n     * @param {Object} [params]\n     */\n    _renderApplicationDialog(dialogName, dialogElement, params = {}) {\n        const Dialog = appState.panel.dialogManager.dialogs[dialogName];\n\n        // Add an event listener for when the dialog closes that will unmount the dialog component from the body.\n        dialogElement.addEventListener('close', () => {\n            ReactDOM.unmountComponentAtNode(dialogElement);\n            document.body.removeChild(dialogElement);\n        });\n\n        // What we are doing here is very similar to a React Portal.\n        // We are separating the react render tree from the DOM tree,\n        // and creating a <dialog> element in the DOM tree under the panel mount point <div> while\n        // using the same panel context, for now, in the dialog component.\n        // We are not using a portal because the dialog is not clearly related to a part of the panel's React render tree that would be a parent,\n        // and we don't need to worry about events bubbling to the parent component.\n        // Plus we could choose to use a separate context in the future. For now we use the same context since the dialog has a blocking UI anyway.\n        ReactDOM.render(<ApplicationDialogView>\n            <Dialog {...params} close={() => {\n                dialogElement.close();\n            }} />\n        </ApplicationDialogView>, dialogElement);\n    }\n\n    _onCanvasClick() {\n        viewState.clearAllSelections();\n        this._notifyEventListeners('canvasClick');\n    }\n\n    // { assetId: <Map of cbs to disposers> }\n    _linkListeners = {};\n\n    // We listen for asset link state whenever the asset is in view in the panel. We don't listen all the time.\n    // XD should also separately be able to control listening to the link state whenever the on canvas link badge is in view (on the Design tab).\n    // Note: The callback will be called once, immediately, with the initial link state.\n    // Note to Users: Be careful, this hooks into Mobx in the panel, and several deep listeners. So be sure to remove the listener when appropriate.\n    // Listeners that this hooks into: 1) the asset listener, 2) the deep collection listener inside resolveElementReference,\n    // 3) a collection listener on every collection, for resolveElementReferenceToLibrary.\n    addLinkStateListener(assetId, cb) {\n        if (!assetId || !cb || !libraryManager.documentAssetsContainer || (this._linkListeners[assetId] && this._linkListeners[assetId].get(cb))) { return; }\n        const asset = libraryManager.documentAssetsContainer.getElementById(assetId);\n        if (!asset) { return; }\n        const disposer = autorun(() => cb(asset.linkState));\n        this._linkListeners[assetId] = this._linkListeners[assetId] || new Map();\n        this._linkListeners[assetId].set(cb, disposer);\n    }\n\n    removeLinkStateListener(assetId, cb) {\n        if (!assetId || !cb) { return; }\n        const listenerMap = this._linkListeners[assetId];\n        if (listenerMap) {\n            const disposer = listenerMap.get(cb);\n            listenerMap.delete(cb);\n            if (disposer) { disposer(); }\n            if (listenerMap.size === 0) {\n                delete this._linkListeners[assetId];\n            }\n        }\n    }\n\n    connectProductInterface(productInterface) {\n        const getProductInterfaceHandler = (method, requiresData = true, callback) => event => {\n            const data = event && event.data;\n            if (data || !requiresData) {\n                const result = productInterface[method](data);\n                callback && callback(result);\n            }\n        };\n\n        this.disconnectProductInterface();\n        this._handlers = {\n            dlElementDropped: getProductInterfaceHandler('reportElementDropped', false),\n        };\n\n        // Start listening for events from the product\n        for (const eventName in this._handlers) {\n            this.addEventListener(eventName, this._handlers[eventName]);\n        }\n    }\n\n    disconnectProductInterface() {\n        if (this._handlers) {\n            // Stop listening for events from the product\n            for (const eventName in this._handlers) {\n                this.removeEventListener(eventName, this._handlers[eventName]);\n            }\n            delete this._handlers;\n        }\n    }\n\n    /**\n     * Calls the callback function when the library with id is available to the current user\n     * @param {string} id the id of the library\n     * @param {Function} callback the function that is called when the libraryId is available\n     */\n    registerLibrary(id, callback) {\n        when(\n            () => libraryManager.initialized && libraryManager.getLibraryById(id),\n            () => callback(id));\n    }\n\n    // map of library name change listeners to dispose\n    _libraryNameChangeDisposers = new Map();\n\n    /**\n     * Calls the callback function when the library name is changed, or when first loaded.\n     * Used by XD to update the linkReference available on linked assets, which stores the library name.\n     * @param {string} id the id of the library\n     * @param {Function} callback the function that is called when the library name is changed or first loaded.\n     */\n    addLibraryNameChangedListener(id, callback) {\n        if (this._libraryNameChangeDisposers.get(id)) {\n            return;\n        }\n        const library = libraryManager.getLibraryById(id);\n        this._libraryNameChangeDisposers.set(id, reaction(() => library.name, () => callback(id)));\n        when(\n            () => libraryManager.initialized && libraryManager.getLibraryById(id),\n            () => callback(id));\n    }\n\n    /**\n     * Remove the library name change listener associated with the given library id.\n     * @param {string} id the id of the library\n     */\n    removeLibraryNameChangedListener(id) {\n        const disposer = this._libraryNameChangeDisposers.get(id);\n        if (disposer) {\n            disposer();\n            this._libraryNameChangeDisposers.delete(id);\n        }\n    }\n\n    // map of LibraryList change listeners to dispose\n    _libraryListChangeDisposers = new Map();\n    /**\n     * Calls the callback function when the library list is changed\n     * @param {Function} callback the function that is called when the library list is changed\n     */\n    addLibraryListChangedListener(callback) {\n        if (this._libraryListChangeDisposers.get(callback)) {\n            return;\n        }\n        this._libraryListChangeDisposers.set(callback, reaction(() => libraryManager.libraries, callback));\n    }\n\n    removeLibraryListChangedListener(callback) {\n        const disposer = this._libraryListChangeDisposers.get(callback);\n        if (disposer) {\n            disposer();\n            this._libraryListChangeDisposers.delete(callback);\n        }\n    }\n\n    /**\n     * Reveals the asset with the given id in the Document Assets panel.\n     * @param {string[] | number[]} ids\n     */\n    revealAssets(ids) {\n        when(() => libraryManager.areLibrariesLoaded, () => {\n            const library = libraryManager.documentAssetsContainer;\n            if (library) {\n                const elements = ids.map(id => library.getElementById(id));\n                // TODO if any elements are not found in the library - should display a toast message\n                elementSelectionState.revealElements(elements);\n            }\n        });\n    }\n\n    // menuItemHeight is for both regular menus and the library drop down menu.\n    get menuItemHeight() {\n        // Matches the height override for .panel-select-menu-item\n        return 32;\n    }\n\n    /**\n     * Route log messages to XD's log file.\n     *\n     * @param {string} message\n     */\n    debugLog(message) {\n        super.debugLog(message);\n        const log = window.nodeRequire('xd').host.log;\n        log.debug(log.CATEGORY_CC_LIBRARIES, message);\n        return true;\n    }\n\n    getUserDataPath() {\n        return null;\n    }\n\n    getLayerInfo() {\n        // Note: Can change this to be { colors: <array of color data> } like PHXS if need to consider actual layers,\n        // or color selected in asset panel, instead of just artwork selection\n        return Promise.resolve(this.getSelection());\n    }\n\n    /*\n      XD-specific APIs\n      Here, we can expose APIs that XD gives us access to.\n      Note: These should be 1st party APIs for the most part, since the 3rd party APIs\n      are not sufficient and sceneNode wrappers will not be accepted by 1st party functions.\n     */\n\n    _xdRequire(module) {\n        if (!this._moduleCache[module]) {\n            const { host } = window.nodeRequire('xd');\n            this._moduleCache[module] = host.require(module);\n        }\n        return this._moduleCache[module];\n    }\n\n    // Used in tests\n    get _host() {\n        const { host } = window.nodeRequire('xd');\n        return host;\n    }\n\n    @observable _cloudAssetId;\n    @observable _hasWritableStorage;\n\n    /**\n     * The global asset id of the document, available once it is saved and synced to the cloud.\n     * Note: This is the 'urn' portion of the full url in docInfo.cloudID\n     * e.g. cloudID: https://cc-api-storage.adobe.io/id/urn:aaid:sc:US:817acf39-0f19-4a16-b990-5a5752e7de8e\n     *      urn: urn:aaid:sc:US:817acf39-0f19-4a16-b990-5a5752e7de8e\n     * @returns {string|null}\n     */\n    get cloudAssetId() {\n        return this._cloudAssetId;\n    }\n\n    /**\n     * Boolean value updated by the XD API that tells us if XD is able to save the document to the cloud\n     * True if the the user has storage entitlements AND they have storage available.\n     * @returns {boolean}\n     */\n    get canSaveDocToCloud() {\n        // _hasWritableStorage only tracks whether the user has storage entitlments at all, regardless of available storage.\n        return this._hasWritableStorage && this.hasAvailableStorage;\n    }\n\n    /**\n     * Returns whether the user has available cloud storage.\n     * @returns {boolean}\n     */\n    get hasAvailableStorage() {\n        const { quotaTotal, quotaUsed } = this._XDCCLibrariesAPIs.getCloudStorageData();\n        return quotaUsed < quotaTotal;\n    }\n\n    /**\n     * Returns a Promise that resolves with the permanent urn of the current cloud document.\n     * @returns {Promise}\n     */\n    waitForCloudAssetId() {\n        return new Promise(resolve => when(() => this.cloudAssetId, resolve));\n    }\n\n    // Local document name\n    get documentName() {\n        // docInfo is defined in DocInfoExtension.js\n        this._documentChangeAtom.reportObserved();\n        return this._host.docInfo && this._host.docInfo.name;\n    }\n\n    // Local document id.\n    // It will persist through the document becoming a cloud document (at which point the doc will gain an additional cloudAssetId).\n    // Note that if you \"Save As\", this creates a new document, which will have a different document id - so the document loaded\n    // within the XD window can change, causing the reported document id to change.\n    get documentId() {\n        this._documentChangeAtom.reportObserved();\n        return this._host.docInfo && this._host.docInfo.docId;\n    }\n\n    get _XDCCLibrariesAPIs() {\n        return this._xdRequire('library/api/CCLibrariesApis');\n    }\n\n    get documentType() {\n        // Returns the cloud doc mimetype: 'application/vnd.adobe.xd.cloudproject+dcx'\n        // 'application/vnd.adobe.sparkler.project+dcx' would be for local docs, but will return undefined here.\n        return this._XDCCLibrariesAPIs.getDocumentMimeType();\n    }\n\n    // The access permissions of the user to the current document.\n    get documentSharingRole() {\n        return this._host.docInfo && this._host.docInfo.cloudSharingRole;\n    }\n\n    get canEditDocument() {\n        return this.documentSharingRole === 'owner' || this.documentSharingRole === 'editor';\n    }\n\n    // Returns true if the doc has been manually saved as a cloud document (not autosaved).\n    get isSavedCloudDocument() {\n        return this._XDCCLibrariesAPIs.isCloudDocNamed();\n    }\n\n    // Returns true if the doc has been synced to the cloud at least once.\n    get isSyncedCloudDocument() {\n        return !!this.cloudAssetId;\n    }\n\n    /**\n     * Opens the sharesheet on top of the Libraries Manager.\n     * @param {Object} library\n     * @param {string} shareAction how the library should be shared. One of 'share' or 'getLink'.\n     * @param {Array} invitees array of email strings that the sharesheet should be pre-populated with\n     */\n    showShareSheet(library, shareAction = 'share', invitees = []) {\n        // XD no longer supports the \"invite\" share action, they use \"share\" instead\n        if (shareAction === 'invite') {\n            shareAction = 'share';\n        }\n\n        this.openLibraryManagerWindow();\n        if (isTeamLibrary(library)) {\n            // For Team Libraries, `share` should always be used, and we pass the teamName\n            const parentFolder = getTeamLibraryPlatformFolder(library);\n            const teamName = parentFolder && parentFolder.name;\n            this._XDCCLibrariesAPIs.toggleShareSheet(true, library.assetId, library.name, 'share', toastData => {\n                appState.manager.toastManager.openToast('message', { variant: toastData.state, message: formatShareSheetToast(toastData) });\n            }, teamName, invitees);\n            return;\n        }\n        this._XDCCLibrariesAPIs.toggleShareSheet(true, library.assetId, library.name, shareAction, toastData => {\n            appState.manager.toastManager.openToast('message', { variant: toastData.state, message: formatShareSheetToast(toastData) });\n        }, undefined, invitees);\n    }\n\n    openLibraryManagerWindow() {\n        if (!this.isLibraryManagerWindowOpen()) {\n            metrics.reportEvent('Manager', 'Manage', 'render', 'library-manager');\n        }\n        this._XDCCLibrariesAPIs.toggleCCLibraryManager(true);\n    }\n\n    isLibraryManagerWindowOpen() {\n        return this._XDCCLibrariesAPIs.isCCLibraryManagerVisible();\n    }\n\n    // Note that document libraries are product-specific rather than environment-specific, so never call this from common code.\n    // The document library should be accessed via libraryManager.documentAssetsContainer, which calls into configuration.currentProduct.getDocumentAssetsContainer()\n    getDocumentAssetsContainer() {\n        this._documentChangeAtom.reportObserved();\n        // The doc lib is initialized before the panel is loaded.\n        // Ignore the word \"current\". There is only ever one document library singleton per panel environment.\n        return this._XDCCLibrariesAPIs.getCurrentDocumentLibrary();\n    }\n\n    getLinkedLibraryIdFromDocument() {\n        return this._XDCCLibrariesAPIs.getPublishedDocumentLibraryId();\n    }\n\n    // Store the id of a published cc document library. In the future, will also store a durable link.\n    // Unlink by calling with undefined id.\n    linkDocumentToLibrary(publishedDocumentLibraryId, /* durableLink */) {\n        // We want to make sure that we end in an unblocked state after unlinking the publish library\n        if (!publishedDocumentLibraryId) {\n            this.notifyPublishEnd();\n        }\n        // Accepts null, undefined, and strings\n        this._XDCCLibrariesAPIs.setPublishedDocumentLibraryId(publishedDocumentLibraryId);\n    }\n\n    get documentPath() {\n        const docInfo = window.nodeRequire('xd').host.docInfo;\n        // Path on disk or URL to cloud doc\n        // Note that for accounts with services not provisioned (e.g. Chinese), XD allows you to create a new\n        // cloud document, but it'll never have a filePath - so we just put in a dummy path in this case to\n        // allow the panel to load\n        return docInfo.filePath || (docInfo.name && `orphan/${docInfo.name}`);\n    }\n\n    isLegacyDocumentLinkDeprecated() {\n        if (this._XDCCLibrariesAPIs.isDocumentLinkingDeprecated) {\n            return this._XDCCLibrariesAPIs.isDocumentLinkingDeprecated();\n        }\n        // if we don't have isDocumentLinkDeprecated api yet, just use the FF documentLinkingDeprecation\n        return environment.isXDFeatureFlagEnabled('documentLinkingDeprecation');\n    }\n\n    @observable _isPaidUser;\n    get isPaidUser() {\n        return this._isPaidUser;\n    }\n\n    _updateIsPaidUser = () => {\n        this._isPaidUser = this._XDCCLibrariesAPIs.isPaidUser();\n    }\n\n    handleUpgradeButtonClicked() {\n        this._XDCCLibrariesAPIs.handleUpgradeButtonClicked();\n    }\n\n    addIsPaidUserListener(cb) {\n        this._XDCCLibrariesAPIs.addIsPaidUserListener(cb);\n    }\n\n    removeIsPaidUserListener(cb) {\n        this._XDCCLibrariesAPIs.removeIsPaidUserListener(cb);\n    }\n\n    /* Group Related */\n    // Get an asset's order in a group\n    getOrderInGroup(asset, group) {\n        group = group._group || group; // unwrap the model\n        return this._XDCCLibrariesAPIs.getOrderInGroup(asset.id, group);\n    }\n\n    // Set an asset's order in a group\n    setOrderInGroup(asset, group, order) {\n        group = group._group || group;\n        this._XDCCLibrariesAPIs.setOrderInGroup(asset.id, group, order);\n        const action = {\n            name: 'updateElement',\n            library: asset.library,\n            data: {\n                groups: [ group ],\n                id: asset.id\n            },\n            baseData: {\n                groups: asset.groups\n            }\n        };\n        metrics.reportAPIEvent(action);\n        metrics.clearExtraEventMetrics('updateElement');\n    }\n\n    _getGroupAnalyticsProperties(group) {\n        return {\n            libraryID: group.library.id,\n            libraryElementCount: group.library.elements.length,\n            libraryGroupCount: group.library.getGroups().length,\n            groupID: group.id,\n            groupClassifierName: group.classifierName,\n            groupLevel: getGroupLevel(group),\n        };\n    }\n\n    createGroup(name, order, parent) {\n        const newGroup = this._XDCCLibrariesAPIs.createGroup(name, order, parent);\n        const action = {\n            name: 'createGroup',\n            data: { id: newGroup.id },\n            library: newGroup.library\n        };\n        metrics.reportAPIEvent(action);\n        metrics.clearExtraEventMetrics('createGroup');\n        return newGroup;\n    }\n\n    deleteGroup(group, includeContents) {\n        const action = {\n            name: 'removeGroup',\n            data: { id: group.id },\n            library: group.library\n        };\n        const storedExtraMetrics = metrics.getExtraEventMetrics('removeGroup');\n        metrics.setExtraEventMetrics('removeGroup', { ...storedExtraMetrics, includeContents, groupLevel: getGroupLevel(group) });\n        this._XDCCLibrariesAPIs.deleteGroup(group, includeContents);\n        metrics.reportAPIEvent(action);\n        metrics.clearExtraEventMetrics('removeGroup');\n    }\n\n    renameGroup(group, name) {\n        this._XDCCLibrariesAPIs.renameGroup(group, name);\n        const action = {\n            name: 'updateGroup',\n            data: {\n                id: group.id,\n                name\n            },\n            baseData: {\n                name: group.name,\n                id: group.id\n            },\n            library: group.library\n        };\n        metrics.reportAPIEvent(action);\n        metrics.clearExtraEventMetrics('updateGroup');\n    }\n\n    reorderGroup(group, order) {\n        const storedExtraMetrics = metrics.getExtraEventMetrics('updateGroup');\n        metrics.setExtraEventMetrics('updateGroup', { ...storedExtraMetrics, groupLevel: getGroupLevel(group) });\n        const action = {\n            name: 'updateGroup',\n            library: group.library,\n            data: { name: group.name },\n            baseData: { name: group.name }\n        };\n        this._XDCCLibrariesAPIs.reorderGroup(group, order);\n        metrics.reportAPIEvent(action);\n        metrics.clearExtraEventMetrics('updateGroup');\n    }\n\n    reparentGroup(group, parent) {\n        this._XDCCLibrariesAPIs.reparentGroup(group, parent);\n    }\n\n    /**\n     * Begin batch operation.\n     * @param {string} name the name of the operation in the history stack\n     */\n    beginOperation(name) { this._XDCCLibrariesAPIs.beginOperation(name); }\n\n    /**\n     * End batch operation.\n     */\n    endOperation() { this._XDCCLibrariesAPIs.endOperation(); }\n\n    get application() {\n        return window.nodeRequire('xd').host.app;\n    }\n\n    get vulcan() {\n        return this._xdRequire('vulcan');\n    }\n\n    get psdUtils() {\n        return this._xdRequire('third_party/psd-lib-js/psd-lib');\n    }\n\n    get fontUtils() {\n        return this._xdRequire('FontUtils');\n    }\n\n    /* Analytics */\n\n    /* look at payload data and call reportEventToXDAnalytics when appropriate */\n    reportSDMEvent(payload) {\n        if (this._shouldReportToXDAnalytics(payload)) {\n            this._reportEventToXDAnalytics(JSON.stringify(payload));\n        }\n    }\n\n    /* report the event data to XD's highbeam analytics */\n    _reportEventToXDAnalytics(data) {\n        this._xdRequire('library/CCLibrariesAnalyticsUtil').reportCCLibraryActionAnalyticsEvent(data);\n    }\n\n    /* Looking at payload content and return true if payload contains data that XD is interested in */\n    _shouldReportToXDAnalytics(payload) {\n        if (payload) {\n            const subCat = payload['event.subcategory'];\n            const subType = payload['event.subtype'];\n            if ((_xdAnalyticsSubcategoriesAndSubtypes[subCat] || []).includes(subType)) {\n                if (subCat === 'Element') {\n                    const allowedEventValues = _xdAnalyticsElementTypes[subType];\n                    return allowedEventValues\n                        ? allowedEventValues.includes(payload['event.value'])\n                        : Boolean(payload['content.mimetype']);\n                }\n                return true;\n            }\n        }\n        return false;\n    }\n\n    /* Text related */\n\n    get textEditModel() {\n        return this._xdRequire('ui/UIModels').textEditModel;\n    }\n\n    get TextPropertyUtils() {\n        return this._xdRequire('ui/properties/TextPropertyUtils');\n    }\n\n    addTextEditListener(cb) {\n        const textEditModel = this.textEditModel;\n        const TextEditModel = this._xdRequire('ui/text/TextEditModel');\n        // TODO: Look into how many times this should be called due to these warnings:\n        // [TextEditModel] (node) warning: possible EventEmitter memory leak detected. 11 listeners added for textStyleUpdateDuringEdit. Use emitter.setMaxListeners() to increase limit.\n        // [TextEditModel] (node) warning: possible EventEmitter memory leak detected. 11 listeners added for textEditChange. Use emitter.setMaxListeners() to increase limit.\n        // [TextEditModel] (node) warning: possible EventEmitter memory leak detected. 11 listeners added for textChangeDuringEdit. Use emitter.setMaxListeners() to increase limit.\n        textEditModel.addListener(TextEditModel.TEXT_STYLE_UPDATE, cb);\n        textEditModel.addListener(TextEditModel.TEXT_EDIT_MODE_CHANGE, cb);\n        textEditModel.addListener(TextEditModel.TEXT_PROPERTY_CHANGE, cb);\n    }\n\n    removeTextEditListener(cb) {\n        const textEditModel = this.textEditModel;\n        const TextEditModel = this._xdRequire('ui/text/TextEditModel');\n        textEditModel.removeListener(TextEditModel.TEXT_STYLE_UPDATE, cb);\n        textEditModel.removeListener(TextEditModel.TEXT_EDIT_MODE_CHANGE, cb);\n        textEditModel.removeListener(TextEditModel.TEXT_PROPERTY_CHANGE, cb);\n    }\n\n    /**\n     * Find out if there is currently an active text editor for a text field on the canvas.\n     * @returns {boolean} true if there is an active text editor for a text field on the canvas.\n     */\n    isCanvasTextEditInProgress() {\n        return this.textEditModel && this.textEditModel.editInProgress && !this.textEditModel.isDecoration;\n        // If isDecoration is true, then the user is editing text in the decorations layer, like an artboard label, which we don't want to change.\n    }\n\n    hasTextEditSelection() {\n        const textEditModel = this.textEditModel;\n        return this.isCanvasTextEditInProgress() && textEditModel.paddedSelection && textEditModel.paddedSelection.length > 0;\n    }\n\n    /* Tooltip related */\n\n    get featureTooltipProvider() {\n        return this._xdRequire('library/CCLibrariesFeatureTooltipProvider');\n    }\n\n    registerFeatureTooltip(featureId, node) {\n        if (this.featureTooltipProvider) {\n            this.featureTooltipProvider.registerView(featureId, node);\n        }\n    }\n\n    unregisterFeatureTooltip(featureId, node) {\n        if (this.featureTooltipProvider) {\n            this.featureTooltipProvider.unregisterView(featureId, node);\n        }\n    }\n\n    /* Application settings related */\n\n    getAppSetting(key) {\n        this._settingsChangeAtom.reportObserved();\n        if (this._XDCCLibrariesAPIs.getAppSetting) {\n            return this._XDCCLibrariesAPIs.getAppSetting(key);\n        }\n    }\n\n    /* Rendition related */\n\n    get renditionService() {\n        return window.nodeRequire('xd').renditionService;\n    }\n\n    /* SceneNodes - Require directly instead of through 3rd party Scenegraph module */\n\n    get Artboard() {\n        return this._xdRequire('Artboard');\n    }\n\n    get Color() {\n        return this._xdRequire('Color');\n    }\n\n    get Group() {\n        return this._xdRequire('Group');\n    }\n\n    get Line() {\n        return this._xdRequire('Line');\n    }\n\n    get LinearGradient() {\n        return this._xdRequire('LinearGradientFill');\n    }\n\n    get RadialGradient() {\n        return this._xdRequire('RadialGradientFill');\n    }\n\n    get SymbolGroup() { // external wrapper is called a SymbolInstance\n        return this._xdRequire('SymbolGroup');\n    }\n\n    get Text() {\n        return this._xdRequire('Text');\n    }\n\n    get Rectangle() {\n        return this._xdRequire('Rectangle');\n    }\n\n    get BitmapFill() {\n        return this._xdRequire('BitmapFill');\n    }\n\n    get GraphicNode() {\n        return this._xdRequire('GraphicNode');\n    }\n\n    // Constants from XD (e.g. for change events, document asset types, etc)\n    get documentLibraryConstants() {\n        return this._xdRequire('library/DocumentLibraryConstants');\n    }\n\n    /* SceneNodeUtils */\n\n    containerTypeAllowsEditingContents(node) {\n        return this._xdRequire('artwork/SceneNodeUtil').containerTypeAllowsEditingContents(node);\n    }\n\n    isInsideRepeatGridOrSymbolGroup(node) {\n        return this._xdRequire('artwork/SceneNodeUtil').isInsideRepeatGridOrSymbolGroup(node);\n    }\n\n    // Returns true if group is effectively empty - either has no children or all its children are invisible.\n    isEffectivelyEmptyGroup(node) {\n        return this._xdRequire('artwork/SceneNodeUtil').isEffectivelyEmptyGroup(node);\n    }\n\n    /**\n     * Replaces a node with a different node in the tree, preserving position and any metadata on the old node.\n     * Use this when you want to replace a node on canvas with a new node that the user would think of as \"the same object\".\n     *\n     * @param {SceneNode} origNode The original node to remove.\n     * @param {SceneNode} newNode The node to replace the original node with.\n     */\n    swapNodes(origNode, newNode) {\n        const SceneNodeUtil = this._xdRequire('artwork/SceneNodeUtil');\n        SceneNodeUtil.centerImageInMask(origNode, newNode, newNode.localBounds, true);\n        SceneNodeUtil.replaceNodePreservingInteractions(origNode, newNode);\n    }\n\n    /**\n     * First party scenenodes do not have the isContainer property, so we need this util.\n     * Returns true if node is a container with no visual appearance of its own (beyond the appearance of its children).\n     * This is true for a Group, RepeatGrid, Mask Group, or SymbolGroup.\n     * It is false for Artboard or BooleanGroup - they do have children, but they also may have fill/stroke, etc. themselves.\n     * (Artboard inherits from Rectangle and BooleanGroup inherits from Path). Use specific instanceof checks for those\n     * cases if desired.\n     * @param {SceneNode} node\n     * @returns {boolean}\n     */\n    isContainer(node) {\n        return this._xdRequire('artwork/SceneNodeUtil').isContainer(node);\n    }\n\n    /* Artwork or Context related */\n\n    get _selectionModel() {\n        return this._xdRequire('artwork/Artwork').selectionModel;\n    }\n\n    getSelection() {\n        return this._selectionModel.selection;\n    }\n\n    setSelection(sceneNodes) {\n        this._selectionModel.selection = sceneNodes;\n    }\n\n    // TODO: Potentially add functionality to track whether user has selected something from the Assets panel,\n    // and that is now in focus instead of the canvas selection. (e.g. In PHXS, we allow adding colors from the color panel selection.)\n    addSelectionListener(cb) {\n        const SelectionModel = this._xdRequire('artwork/SelectionModel');\n        const selection = this._xdRequire('artwork/Artwork').selectionModel;\n        selection.addListener(SelectionModel.SELECTION_CHANGE, cb);\n        selection.addListener(SelectionModel.ARTWORK_CHANGE, cb);\n    }\n\n    removeSelectionListener(cb) {\n        const SelectionModel = this._xdRequire('artwork/SelectionModel');\n        const selection = this._xdRequire('artwork/Artwork').selectionModel;\n        selection.removeListener(SelectionModel.SELECTION_CHANGE, cb);\n        selection.removeListener(SelectionModel.ARTWORK_CHANGE, cb);\n    }\n\n    addInviteEventListener(cb) {\n        this._XDCCLibrariesAPIs.addShareSheetInviteSentListener(cb);\n    }\n\n    removeInviteEventListener(cb) {\n        this._XDCCLibrariesAPIs.removeShareSheetInviteSentListener(cb);\n    }\n\n    get editContextModel() {\n        return this._xdRequire('artwork/Artwork').editContextModel;\n    }\n\n    /**\n     * Return a set of artboard ancestors for all items in the selection.\n     * @param {Array.<SceneNode>} selection\n     * @returns {Set.<Artboard>}\n     */\n    findContainingArtboardsForSelection(selection) {\n        return this._xdRequire('artwork/ArtboardUtil').findContainingArtboardsForSelection(selection);\n    }\n\n    /* Import Utils */\n\n    get progressController() {\n        return { incrementProgressValue: () => { }, isProgressCancelRequested: () => false };\n    }\n\n    /**\n     * Add special handling for dropped Stock Elements.\n     * @param {Object} dragState\n     */\n    handleDroppedStockElement(dragState) {\n        // Placement should be undo-able.\n        return this.recordHistory('DL_ADD_IMAGE_TO_DOC_AS_LINKED', () => {\n            const element = dragState.currentlyDraggedElement;\n            const promise = dragState.currentlyDraggedElementPromise;\n            const asset = dragState.asset;\n            // Ensure loading container has dimensions of final content.\n            const previewSize = { height: asset.comp_height, width: asset.comp_width };\n            // The location of the drop event in the XD canvas.\n            let { x, y } = dragState.dragDropEvent;\n            // Normally, we would place the image where the mouse was released to simulate a real drag drop.\n            // However, XD (and its users) expect the origin of the image to be the top-left corner, so we translate the position.\n            x += previewSize.width / 2;\n            y += previewSize.height / 2;\n            const position = { x, y };\n            return insertStockPreview(element, promise, previewSize, position);\n        });\n    }\n\n    // Generate the appropriate XD node (Path, Rectangle, etc) for the AI file at `assetPath`.\n    AIToNode(assetPath) {\n        if (!assetPath) { return Promise.reject('No file given for AI conversion'); }\n        return this._XDCCLibrariesAPIs.tempAIToNode(this.normalizePath(assetPath));\n    }\n\n    // Generate the appropriate XD node (Path, Rectangle, etc) for the SVG file at `assetPath`.\n    SVGToNode(assetPath) {\n        if (!assetPath) { return Promise.reject('No file given for SVG conversion'); }\n        return this._xdRequire('artwork/Artwork').linkedGraphicRegistry._getXDAssetDataForSVG({ assetPath: this.normalizePath(assetPath) }).then(result => {\n            if (!result || result.isSVGOrAGCImportError || !result.node || this.isEffectivelyEmptyGroup(result.node)) {\n                return Promise.reject('Error converting SVG into XD node');\n            }\n            return result.node;\n        });\n    }\n\n    // Generate the appropriate XD node (Path, Rectangle, etc) for the AGC file at `assetPath`.\n    parseAGCForImport(agcDocument, isComponent) {\n        if (!agcDocument) { return Promise.reject('No document given for AGC conversion'); }\n        const importUtil = this._xdRequire('importers/ImportUtil');\n        const importFn = isComponent ? importUtil.importAGCComponentFromCCLib : importUtil.importAGCNodeFromCCLib;\n        return importFn(agcDocument, this.progressController).then(result => {\n            if (!result || result.failedItems.length) {\n                return Promise.reject('Error converting AGC Document into XD node');\n            }\n            return { node: result.importedArt[0], metadata: result };\n        });\n    }\n\n    assignBlurToNode(node) {\n        return this._xdRequire('library/LibraryVectorUtils').assignBlurForLoadingVector(node, node.localBounds);\n    }\n\n    /* Export Utils */\n\n    // If `filePath` is a relative path, generate an absolute path.\n    // XD is failing to read files with relative paths. This could be removed once XD addresses issue:\n    // https://jira.corp.adobe.com/browse/XD-88925\n    normalizePath(filePath) {\n        return path.normalize(filePath);\n    }\n\n    _getTempPath(fileName) {\n        const fs = this._xdRequire('fs');\n        if (!this._tempDir || !fs.existsSync(this._tempDir)) {\n            // We only need to create one temp dir for the XD session - only recreate it if it's deleted.\n            this._tempDir = this._xdRequire('FileUtil').makeTemporaryFolder();\n            debugLog.log(`Created temp dir: ${this._tempDir}`);\n        }\n        // Note: makeTemporaryFolder already appends a / at the end, so we can just append the filename\n        return `${this._tempDir}${fileName}`;\n    }\n\n    _writeTextFile(fileName, contents) {\n        const fs = this._xdRequire('fs');\n        const tempPath = this._getTempPath(fileName);\n        return fs.writeFile(tempPath, contents).then(() => tempPath);\n    }\n\n    deleteFile(path) {\n        const fs = this._xdRequire('fs');\n        return fs.deleteFileOrFolderSync(path);\n    }\n\n    serializeCanonicalComponent(symbolId, fileName) {\n        if (!symbolId) { return Promise.reject('No XD symbolId given for serialization'); }\n        if (!fileName) { return Promise.reject('No fileName given for serialized component'); }\n\n        const isNXDEnabled = environment.isXDFeatureFlagEnabled('newFileFormat');\n\n        // the second parameter 'true' is to tell XD that we would like to have the imageData to be sent separately, i.e.\n        // not embedded in serializedSymbol. This way we can add the image separately as children representations\n        const primaryRepresentationForComponent = this._XDCCLibrariesAPIs.getPrimaryRepresentationForComponent(symbolId, true);\n\n        if (isNXDEnabled ? !primaryRepresentationForComponent.serializedSymbol : !primaryRepresentationForComponent.agcDocument) {\n            return Promise.reject('Error getting AGC for component');\n        }\n\n        const serializedSymbolString = isNXDEnabled ? primaryRepresentationForComponent.serializedSymbol : JSON.stringify(primaryRepresentationForComponent.agcDocument);\n\n        return this._writeTextFile(fileName, serializedSymbolString)\n            .then((filePath) => {\n                const { dependentAssetIds, imageData } = primaryRepresentationForComponent;\n                return { filePath, dependentAssetIds, imageData };\n            })\n            .catch(() => Promise.reject('Error writing component Document to file'));\n    }\n\n    canonicalComponentToSVG(symbolId, fileName) {\n        if (!symbolId) { return Promise.reject('No XD symbolId given for SVG conversion'); }\n        if (!fileName) { return Promise.reject('No fileName given for the converted SVG'); }\n\n        return this._XDCCLibrariesAPIs.getSVGRepresentationForComponent(symbolId)\n            .then(svg => this._writeTextFile(fileName, svg))\n            .catch(() => Promise.reject('Error converting XD symbolId into SVG'));\n    }\n\n    canonicalComponentToPNG(symbolId, fileName) {\n        if (!symbolId) { return Promise.reject('No XD symbolId given for PNG conversion'); }\n        if (!fileName) { return Promise.reject('No fileName given for the converted PNG'); }\n\n        const path = this._getTempPath(fileName);\n        return this._XDCCLibrariesAPIs.getPNGRepresentationForComponent(symbolId, path)\n            .then(() => path);\n    }\n\n    nodeGuidsToAGC(guids, fileName) {\n        if (!guids || !guids.length) { return Promise.reject('No XD node guids given for AGC conversion' + guids); }\n        if (!fileName) { return Promise.reject('No fileName given for the converted AGC'); }\n\n        const { agcDocument } = this._XDCCLibrariesAPIs.getPrimaryRepresentationForSceneNodeGuids(guids);\n        if (!agcDocument) { return Promise.reject('Error getting AGC for component'); }\n\n        return this._writeTextFile(fileName, JSON.stringify(agcDocument))\n            .then((filePath) => {\n                return { filePath };\n            })\n            .catch(() => Promise.reject('Error writing component AGC Document to file'));\n    }\n\n    nodeGuidsToSVG(guids, fileName) {\n        if (!guids || !guids.length) { return Promise.reject('No XD node guids given for SVG conversion'); }\n        if (!fileName) { return Promise.reject('No fileName given for the converted SVG'); }\n\n        return this._XDCCLibrariesAPIs.getSVGRepresentationForSceneNodeGuids(guids)\n            .then(svg => this._writeTextFile(fileName, svg))\n            .catch(() => Promise.reject('Error converting XD guids into SVG'));\n    }\n\n    nodeGuidsToPNG(guids, fileName) {\n        if (!guids || !guids.length) { return Promise.reject('No XD node guids given for PNG conversion'); }\n        if (!fileName) { return Promise.reject('No fileName given for the converted PNG'); }\n\n        const path = this._getTempPath(fileName);\n        return this._XDCCLibrariesAPIs.getPNGRepresentationForSceneNodeGuids(guids, path)\n            .then(() => path);\n    }\n\n    characterStyleToPNG(style, fileName) {\n        if (!style) { return Promise.reject('No XD character style for PNG conversion'); }\n        if (!fileName) { return Promise.reject('No fileName given for the converted PNG'); }\n\n        const path = this._getTempPath(fileName);\n        return this._XDCCLibrariesAPIs.getPNGRepresentationForCharacterStyle(style, path)\n            .then(() => path);\n    }\n\n    getContextForNode(node) {\n        return this._xdRequire('artwork/EditContextModel').getContextForNode(node);\n    }\n\n    // Returns width/height of image at `path`.\n    getSizeforFile(path, fill) {\n        return this._xdRequire('library/LibraryVectorUtils').getSizeForAIFile(path, fill, {});\n    }\n\n    /**\n     * Always wrap your edits in recordHistory in order to allow the user to undo them.\n     * @param {string} operationName - the localization string that will be used to find the translation\n     * @param {Function} operationFn - the function that needs to be recorded in history\n     */\n    recordHistory(operationName, operationFn) {\n        return new Promise(resolve => {\n            const undoLabel = translate(operationName);\n            const artwork = this._xdRequire('artwork/Artwork');\n            artwork.history.startRecord(undoLabel);\n            const onFinish = (err) => {\n                if (err) { debugLog.log(err); }\n                artwork.history.endRecord();\n                return resolve();\n            };\n            const promise = operationFn();\n            return promise ? promise.then(onFinish, onFinish) : onFinish();\n        });\n    }\n\n    /**\n    * Apply to Selection\n    * Note: All Apply to Selection APIs will also create an asset that is linked to the element,\n    * and also store the assetId and id of the library, to enable follow and request access actions in the future.\n    * @param {string} mode\n    * @param {ColorOrGradientScenegraphNode} colorOrGradient\n    * @param {object|ElementModel} - may be a color object when coming from a color theme element\n    */\n\n    applyColorToSelection(mode, colorOrGradient, element) {\n        if (element.library.isDocumentAssets) {\n            this._XDCCLibrariesAPIs.applyColorFromDocumentAsset(\n                mode,\n                colorOrGradient,\n                element.id\n            );\n        } else {\n            // also creates a linked asset\n            this._XDCCLibrariesAPIs.applyColorFromCCLibrariesElement(\n                mode,\n                colorOrGradient,\n                element.getReference?.() // color object from a theme won't have a reference\n            );\n        }\n    }\n\n    applyCharacterStyleToSelection(charStyle, element) {\n        if (element.library.isDocumentAssets) {\n            this._XDCCLibrariesAPIs.applyCharacterStyleFromDocumentAsset(\n                charStyle,\n                element.id\n            );\n        } else {\n            // also creates a linked asset\n            this._XDCCLibrariesAPIs.applyCharacterStyleFromCCLibrariesElement(\n                charStyle,\n                element.getReference()\n            );\n        }\n    }\n\n    addAudioToDocument(mediaFile, element) {\n        this._XDCCLibrariesAPIs.applyAudioFromCCLibrariesElement(mediaFile, element.getReference());\n    }\n\n    /* Canvas */\n\n    get canvas() {\n        return window.nodeRequire('xd').host.canvas;\n    }\n\n    /**\n     * Add the given node into the current document in the appropiate artboard.\n     * Unless a `position` is specified, the node will be positioned in X,Y coordinates such that it is visible to the user, placed in front of them, even considering zoom values.\n     * If `selectAfterPlace` is true, the node will be selected after adding.\n     * This is a very helpful utility that takes care of a lot of positioning logic\n     * However, note that it DOES rename the node, so we save the original name before adding, to restore it after.\n     * @param {SceneNode} node\n     * @param {Object} [selectAfterPlace]\n     * @param {Object} [position]\n     * @param {Object} [metadata]\n     * @returns {boolean} Returns true if the node was successfully placed, false otherwise.\n     */\n    addToCanvas(node, selectAfterPlace = true, position, metadata) {\n        const name = node.name;\n        metadata = metadata || {};\n        const importData = Object.assign(metadata, { importedArt: [ node ] });\n        if (position) {\n            node.setPosition(position.x, position.y);\n        }\n        const success = this._xdRequire('importers/ImportUtil').addImportedItemFromCCLib(importData, this.editContextModel, true, !position);\n        node.name = name;\n        selectAfterPlace && this.setSelection(node);\n        return success;\n    }\n\n    addComponentToCanvas(element, symbolData) {\n        return this._XDCCLibrariesAPIs.addComponentToCanvas(symbolData)\n            .then(() => reportApplyMetric(element.getPrimaryRepresentation(), 'placeAsset'));\n    }\n\n    addDropEventListener(cb) {\n        this.canvas.on(this.canvas.DRAG_DROP, cb);\n    }\n\n    removeDropEventListener(cb) {\n        this.canvas.off(this.canvas.DRAG_DROP, cb);\n    }\n\n    // https://git.corp.adobe.com/WebPA/sparkler-shell/blob/main/js/library/DocumentLibraryConstants.js\n    get representationTypeMap() {\n        const xdConstants = this.documentLibraryConstants;\n        return {\n            [xdConstants.XD_COLOR_REPRESENTATION_TYPE]: configuration.COLOR_REPRESENTATION_TYPE,\n            [xdConstants.XD_LINEAR_GRADIENT_REPRESENTATION_TYPE]: configuration.GRADIENT_REPRESENTATION_TYPE,\n            [xdConstants.XD_RADIAL_GRADIENT_REPRESENTATION_TYPE]: configuration.GRADIENT_REPRESENTATION_TYPE,\n            [xdConstants.XD_ANGULAR_GRADIENT_REPRESENTATION_TYPE]: configuration.GRADIENT_REPRESENTATION_TYPE,\n            [xdConstants.SYMBOL_REPRESENTATION_TYPE]: configuration.AGC_REPRESENTATION_TYPE\n            // Character style and Audio representations appear to be the same type.\n        };\n    }\n\n    _generateToastMessage(message, actionLabel = '') {\n        return `${message} [${actionLabel}|]`;\n    }\n\n    /**\n     * Add a toast to the XD canvas.\n     * @param {string} message The message to display\n     * @param {Object} [options] The toast configuration\n     * @param {string} options.variant The type of toast to display. One of 'error', 'info', 'success'. Default is 'info'\n     * @param {number} options.timeout The amount of time in seconds that the toast should persist. Default is 12.\n     * @param {string} options.actionLabel Label for action button.\n     * @param {Function} options.onAction  Function called when action button is clicked (if one is present).\n     * @param {Function} options.onDismiss Function called when toast is dismissed by the user.\n     */\n    openApplicationToast(message, options = {}) {\n        const { variant, timeout, actionLabel, onAction, onDismiss } = options;\n        // The action label must be embedded in the message. i.e \"This is my toast message. [Click here|http://adobe.com]\"\n        const toastMessage = this._generateToastMessage(message, actionLabel);\n        return this._XDCCLibrariesAPIs.displayToastMessage(toastMessage, variant, timeout, onAction, onDismiss);\n    }\n\n    dismissToastMessage(message, actionLabel = '') {\n        this._XDCCLibrariesAPIs.dismissToastMessage(this._generateToastMessage(message, actionLabel));\n    }\n\n    /* Other API stubs */\n\n    getMissingFontsCollapsed() {\n        return this._missingFontsModel.collapsed;\n    }\n\n    toggleMissingFontsCollapsed() {\n        this._missingFontsModel.toggleCollapsed();\n    }\n\n    getMissingFonts() {\n        return this._missingFontsModel.missingFonts;\n    }\n\n    highlightOnCanvas(asset) {\n        return this._XDCCLibrariesAPIs.highlightOnCanvas(asset.id);\n    }\n\n    _getEditAnalyticsAction(asset) {\n        return {\n            name: 'updateElementContent',\n            data: {\n                id: asset.id\n            }\n        };\n    }\n\n    notifySelectionChange(elements, groups) {\n        this._XDCCLibrariesAPIs.notifySelectionChange?.(elements, groups);\n    }\n\n    /**\n     * Highlights the Main component on canvas.\n     * @param {DocumentElement} asset The message to display\n     * @returns {Promise<boolean>} whether XD successfully handled the operation.\n     */\n    editMasterComponent(asset) {\n        metrics.reportAPIEvent(this._getEditAnalyticsAction(asset));\n        metrics.clearExtraEventMetrics('updateElementContent');\n        return this._XDCCLibrariesAPIs.editMasterComponent(asset.id);\n    }\n\n    editColor(asset) {\n        const nativeId = this.getNativeIdForElement(asset.id);\n        if (!nativeId) { return; }\n        metrics.reportAPIEvent(this._getEditAnalyticsAction(asset));\n        metrics.clearExtraEventMetrics('updateElementContent');\n        return this._XDCCLibrariesAPIs.editColor(asset.id, nativeId);\n    }\n\n    editCharacterStyle(asset) {\n        const nativeId = this.getNativeIdForElement(asset.id);\n        if (!nativeId) { return; }\n        metrics.reportAPIEvent(this._getEditAnalyticsAction(asset));\n        metrics.clearExtraEventMetrics('updateElementContent');\n        return this._XDCCLibrariesAPIs.editCharacterStyle(asset.id, nativeId);\n    }\n\n    editInSource(asset) {\n        metrics.reportAPIEvent(this._getEditAnalyticsAction(asset));\n        metrics.clearExtraEventMetrics('updateElementContent');\n        this._XDCCLibrariesAPIs.editInSource(asset.id);\n    }\n\n    canEditElementInSource(elementRef) {\n        // TODO: XD calls this to check if they can offer \"edit in source\" when the user right-clicks on a linked asset on canvas.\n        // resolveElementReference is now asynchronous; until XD updates their end to account for that, they'll have edge cases\n        // where the source library/element have not been loaded yet, so they will not be in the cache.\n        // But this should at least keep us from breaking.\n        const element = libraryManager.resolveCachedElementReference(elementRef);\n        return element && canEditInSource(element);\n    }\n\n    editElementInSource(elementRef) {\n        when(() => libraryManager.areLibrariesLoaded, async () => {\n            const element = await libraryManager.resolveElementReference(elementRef);\n            if (element && canEditInSource(element)) {\n                editInSource(element);\n            }\n        });\n    }\n\n    /**\n     * @param {ElementModel|LibraryModel} item\n     */\n    getDocumentEditActions(item) {\n        if (this._XDCCLibrariesAPIs.getDocumentEditActions) {\n            const documentType = item.library ? item.library.documentType : item.documentType;\n            if (documentType === 'application/vnd.adobe.xd.cloudproject+dcx') {\n                const documentId = item.library ? item.library.documentId : item.documentId;\n                const assetId = item.sourceRef && getSourceId(item);\n                return this._XDCCLibrariesAPIs.getDocumentEditActions(documentId, assetId);\n            }\n        }\n    }\n\n    replaceFont(asset) {\n        const nativeId = this.getNativeIdForElement(asset.id);\n        if (!nativeId) { return; }\n        return this._XDCCLibrariesAPIs.replaceFont(asset.id, nativeId);\n    }\n\n    getAssetInstanceCount(asset, ignoreLinkedElements = false) {\n        return this._XDCCLibrariesAPIs.getNumInstancesOfAsset(asset.id, ignoreLinkedElements);\n    }\n\n    /* Updating linked assets, unlinking, and (legacy) relinking */\n\n    /**\n     * Update the given linked asset(s) with the latest from their source (library elements or documents).\n     * This should NOT be called during preview (i.e. click on linked badge), but it IS called during other update workflows e.g. context menu or Update All button.\n     * @param {DocumentElement[]} assets The assets to update.\n     * @returns {Promise}\n     */\n    updateLinkedAssets(assets) {\n        assets = Array.isArray(assets) ? assets : [ assets ];\n        return this._XDCCLibrariesAPIs.updateLinkedAssets(assets.map(asset => ({\n            linkedAssetId: asset.id,\n            // If defined, the link on the asset will be updated to point to the given element.\n            newLinkedElementRef: asset.newLinkedElementRef\n        })));\n    }\n\n    /**\n     * Update any legacy cc library link references on an array of assets to the new JSON format references.\n     * @param {DocumentElement[]} assets The assets to update.\n     */\n    migrateLinkReferences(assets = []) {\n        const updateData = assets.reduce((result, asset) => {\n            // If we don't have access to the element, or there is a pending update on the element,\n            // we leave the legacy link alone until the element is relinked or the update is accepted, respectively.\n            if (asset.isLegacyCCLibrariesLink && asset.linkedElement && asset.isNormalLinkState) {\n                result.push({\n                    linkedAssetId: asset.id,\n                    newLinkedElementRef: asset.linkedElement.getReference()\n                });\n            }\n            // If the element is missing, remains a broken link.\n            // DocumentElement._elementLinkState should still process the state correctly with legacy link ref.\n\n            return result;\n        }, []);\n\n        if (updateData.length && this._XDCCLibrariesAPIs.migrateLinkedAssets) {\n            this._XDCCLibrariesAPIs.migrateLinkedAssets(updateData);\n        }\n    }\n\n    /**\n     * Update all assets linked to cloud documents and library elements.\n     * TODO: Remove this API once legacy document links are deprecated and use updateLinkedAssets instead.\n     * @param {DocumentElement[]} assets optional, assets that should have their links updated to point to given library elements.\n     */\n    updateAndAddAllLinkedAssets(assets) {\n        assets = assets && assets.map(asset => ({\n            linkedAssetId: asset.id,\n            newLinkedElementRef: asset.newLinkedElementRef\n        }));\n        return this._XDCCLibrariesAPIs.updateAndAddAllLinkedAssets(assets);\n    }\n\n    canUnlinkAssets(assets) {\n        return this._XDCCLibrariesAPIs.canAssetsBeMadeLocal(assets.map(asset => asset.id));\n    }\n\n    canDeleteAssets(assets) {\n        return this._XDCCLibrariesAPIs.canAssetsBeDeleted(assets.map(asset => asset.id));\n    }\n\n    unlinkAssets(assets) {\n        // TODO: add this back in once XD fixes a bug on their side that is not firing the change event for isLinkedwhen a component is finished unlinking\n        // https://jira.corp.adobe.com/browse/XD-148123\n        // assets.forEach(asset => {\n        //     viewManager.setUnlinkingAsset(asset, true);\n        //     when(() => !asset.isLinked, () => {\n        //         viewManager.setUnlinkingAsset(asset, false);\n        //     });\n        // });\n\n        this._XDCCLibrariesAPIs.makeLocal(assets.map(asset => asset.id));\n    }\n\n    // TODO: Remove this once legacy document links are deprecated\n    relinkAssetsToDocument(assets) {\n        assets = Array.isArray(assets) ? assets : [ assets ];\n        // When called on a single asset with a broken legacy link to a document,\n        // this should open a document picker UI for relinking assets.\n        this._XDCCLibrariesAPIs.relink(assets.map(asset => asset.id));\n    }\n\n    // Call XD to handle the case when the user clicks on the deprecated linked asset badge\n    handleDocumentLinkingAssetNoLongerSupported(asset) {\n        this._XDCCLibrariesAPIs.handleDocumentLinkingAssetNoLongerSupported(asset.id);\n    }\n\n    /* Previews and Updating during Preview */\n\n    @observable _isPreviewActive;\n\n    get isPreviewActive() {\n        return this._isPreviewActive;\n    }\n\n    /**\n     * Updates the linked asset model with the new data from the backing element or document and sends change notification.\n     * If the update to preview includes an element relink operation, the new element's ref should be forwarded for XD to look up the representation.\n     * @param {DocumentElement} asset\n     * @returns {Promise}\n     */\n    startPreview(asset) {\n        this._isPreviewActive = true;\n        return this._XDCCLibrariesAPIs.startPreview(asset.id, asset.newLinkedElementRef);\n    }\n\n    /**\n     * Updates the modified date and linkedElementModified date and sends change notification\n     * @returns {Promise}\n     */\n    commitPreview() {\n        this._isPreviewActive = false;\n        return this._XDCCLibrariesAPIs.commitPreview();\n    }\n\n    /**\n     * Removes the changes from the asset and sends change notification\n     * @returns {Promise}\n     */\n    cancelPreview() {\n        this._isPreviewActive = false;\n        return this._XDCCLibrariesAPIs.cancelPreview();\n    }\n\n    isPreviewing() {\n        return this._xdRequire('artwork/Artwork').previewModeController.isActive();\n    }\n\n    deleteAssets(assets) {\n        metrics.reportEvent('Element Operations', 'Element', 'click', 'delete', { event: { count: assets.length, value: 'agg' } });\n        assets.forEach(asset => {\n            const action = {\n                name: 'removeElement',\n                data: { id: asset.id },\n                library: asset.library,\n            };\n            metrics.reportAPIEvent(action);\n        });\n        this._XDCCLibrariesAPIs.deleteAssets(assets.map(asset => asset.id));\n        metrics.clearExtraEventMetrics('removeElements');\n    }\n\n    // Resolves to `true` if document was saved, `false` if user cancelled.\n    openSaveAs() {\n        this._XDCCLibrariesAPIs.toggleCCLibraryManager(false);\n        return this._XDCCLibrariesAPIs.openSaveAsDialog().then(saved => {\n            this._XDCCLibrariesAPIs.toggleCCLibraryManager(true);\n            return saved;\n        });\n    }\n\n    // Sets the name on an asset, wrapped in undo history record\n    renameAsset(asset, name) {\n        const originalName = asset.name;\n        const action = {\n            name: 'updateElement',\n            data: { name, id: asset.id },\n            baseData: { name: originalName },\n            library: asset.library\n        };\n        metrics.reportAPIEvent(action);\n        this._XDCCLibrariesAPIs.rename(asset.id, name);\n        metrics.clearExtraEventMetrics('updateElement');\n    }\n\n    /* Request permission for a lock to start publishing\n     * @returns {Promise<Function|undefined>} request lock that resolves with callback if successful, undefined otherwise\n     */\n    requestPublishStart() {\n        return this._XDCCLibrariesAPIs.requestPublishStart();\n    }\n\n    // Tell XD that we have finished publishing\n    notifyPublishEnd() {\n        this._XDCCLibrariesAPIs.notifyPublishEnd();\n    }\n\n    // Public getter for isCoEditorPublishing observable\n    get isCoeditorPublishing() {\n        return this._isCoeditorPublishing;\n    }\n\n    _coeditorPublishingHandler = () => {\n        this._isCoeditorPublishing = true;\n        this.dismissToastMessage(translate('PENDING_UPDATE_TOAST_MESSAGE'), translate('PENDING_UPDATE_TOAST_ACTION_LABEL'));\n    }\n\n    _coeditorFinishPublishingHandler = () => {\n        if (this._isCoeditorPublishing) {\n            if (libraryManager.publishedDocumentLibrary) {\n                const [ completePromise ] = libraryManager.syncStateCompleteListener(libraryManager.publishedDocumentLibrary, LIBRARY_SYNC_STATES.DOWNLOADING);\n                completePromise.then(() => this._isCoeditorPublishing = false);\n            } else {\n                this._isCoeditorPublishing = false;\n            }\n        }\n    }\n\n    /**\n     * Removes the assets with legacy links to the provided document reference,\n     * and makes any such assets used on canvas into local assets.\n     * @param {string} documentRef the document reference whose linked assets will be removed\n     */\n    unlinkAssetsFromDocument(documentRef) {\n        this._XDCCLibrariesAPIs.removeFromLibrary(documentRef);\n    }\n\n    /**\n     * Fetch the current host app theme.\n     */\n    _getTheme() {\n        return super._getTheme().then(theme => XD_THEME_MAP[theme]);\n    }\n\n    isLoggedIn() {\n        // XD does not expose licensing module yet https://jira.corp.adobe.com/browse/XD-132318 but once they do we can\n        // remove this overrride and rely on UXPEnvironment to check\n        return true;\n    }\n\n    hideDebugFlyoutMenu() {\n        return false;\n    }\n\n    isXDFeatureFlagEnabled(featureFlagName) {\n        return this._XDCCLibrariesAPIs.isFeatureFlagEnabled(featureFlagName);\n    }\n\n    shouldConvertColor() {\n        this._colorProfileChangeAtom.reportObserved();\n        return this.isXDFeatureFlagEnabled('colorManagement');\n    }\n\n    convertSingleColor(color) {\n        return this._XDCCLibrariesAPIs.convertSingleColor(color, this._XDCCLibrariesAPIs.getColorProfile());\n    }\n\n    get isAltKeyDown() {\n        return this._XDCCLibrariesAPIs.isAltKeyDown();\n    }\n\n    navigateToLibrary(library) {\n        super.navigateToLibrary(library);\n        this._XDCCLibrariesAPIs.didNavigateToLibrary?.(library);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport versionManager from 'app/js/managers/versionManager';\nimport imsInterface from 'app/js/interface/imsInterface';\nimport debugLog from 'app/js/utils/debugLog';\n\n// @private\nfunction _getInvitationServiceURL() {\n    return `https://${ imsInterface.getEnvironment().invitationsHost }`;\n}\n\nfunction _fetchInvitationsService(userId, apiPath, utilName, reqMethod, reqBody) {\n    return imsInterface.getAccessToken(userId).then((accessToken) => {\n        if (!accessToken) {\n            return Promise.reject(401);\n        }\n\n        const url = _getInvitationServiceURL() + apiPath;\n        const reqOptions = {\n            body: reqBody ? JSON.stringify(reqBody) : undefined,\n            method: reqMethod,\n            headers: {\n                'x-api-key': 'ProjectCentralPanel11', // TODO: REVERT THIS LINE WHEN CLIENTIDS `genstudio` AND `xint-frontend-foundations` HAVE BEEN APPROVED + SUBSCRIBED\n                'Authorization': 'Bearer ' + accessToken,\n                'User-Agent': versionManager.getUserAgent()\n            }\n        };\n        if (reqMethod === 'POST' || reqMethod === 'PATCH') {\n            reqOptions.headers['Content-Type'] = 'application/json';\n        }\n\n        return fetch(url, reqOptions)\n            .then((response) => {\n                if (response.status !== 200) {\n                    response.text().then((text) => {\n                        debugLog.log(`Error with ${utilName}: result= ${text}`);\n                    });\n                    return Promise.reject(response.status);\n                }\n\n                return response.json();\n            });\n    }).catch((error) => {\n        if (error === 'LOGGED_OUT') {\n            debugLog.log('Error with getLibrariesInvitations: could not get token');\n            return Promise.reject(401);\n        }\n\n        return Promise.reject(error);\n    });\n}\n\nexport function getLibrariesInvitations(userId) {\n    return _fetchInvitationsService(userId, configuration.INVITATIONS_PENDING_API_PATH, 'getLibrariesInvitations', 'GET');\n}\n\nexport function acceptInvitation(userId, invitationId) {\n    const apiPath = `${ configuration.INVITATIONS_ACCEPT_API_PATH }/${ invitationId }`;\n    return _fetchInvitationsService(userId, apiPath, 'acceptInvitation', 'POST');\n}\n\nexport function inviteOrganization(userId, assetId) {\n    const apiPath = `${ configuration.INVITATIONS_COLLABORATIONS_API_PATH }/${assetId}?mode=direct_acl`;\n    return _fetchInvitationsService(userId, apiPath, 'inviteOrganization', 'POST', { recipients: [ { canComment: false, recipient: 'orgEverybody', role: 'viewer' } ] });\n}\n\nexport function removeOrganization(userId, assetId) {\n    const apiPath = `${ configuration.INVITATIONS_COLLABORATIONS_API_PATH }/${assetId}?mode=direct_acl`;\n    return _fetchInvitationsService(userId, apiPath, 'removeOrganization', 'PATCH', { collaborators: [ { id: 'orgEverybody', action: 'remove' } ] });\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport versionManager from 'app/js/managers/versionManager';\nimport imsInterface from 'app/js/interface/imsInterface';\nimport debugLog from 'app/js/utils/debugLog';\nimport metrics from 'app/js/interface/metrics';\nimport { readFile } from 'app/js/utils/fileUtils';\nimport { getSearchUIOptions, getMogrtApiVersion } from 'app/js/utils/adobeStockUtils';\nimport { delay } from 'app/js/utils/promiseUtils';\nimport viewState from 'app/js/state/viewState';\n\nconst RESULT_COLUMNS = '&result_columns[]=comp_height'\n    + '&result_columns[]=audio_samplerate'\n    + '&result_columns[]=audio_samplerate_preview'\n    + '&result_columns[]=comp_url'\n    + '&result_columns[]=comp_width'\n    + '&result_columns[]=comps' // video licenses\n    + '&result_columns[]=content_type'\n    + '&result_columns[]=duration'\n    + '&result_columns[]=framerate'\n    + '&result_columns[]=height'\n    + '&result_columns[]=id'\n    + '&result_columns[]=is_licensed'\n    + '&result_columns[]=licenses' // premium licenses\n    + '&result_columns[]=media_type_id'\n    + '&result_columns[]=premium_level_id'\n    + '&result_columns[]=stock_id'\n    + '&result_columns[]=thumbnail_height'\n    + '&result_columns[]=thumbnail_url'\n    + '&result_columns[]=thumbnail_width'\n    + '&result_columns[]=title'\n    + '&result_columns[]=video_small_preview_url'\n    + '&result_columns[]=width'\n    + '&result_columns[]=is_premium'\n    + '&result_columns[]=creator_name'\n    + '&result_columns[]=is_illustrative';\n\n// @private\nfunction getStockServiceURL() {\n    return 'https://' + imsInterface.getEnvironment().stockHost;\n}\n\n// @private\nconst prepareForBinaryUpload = (request, sBinaryData, fileParamName, fileName) => {\n    const POST_REQUEST_BOUNDARY = 'cclibrariespanel' + Math.round(Math.random() * 9999999);\n    const CRLF = '\\r\\n';\n    const DASHES = '--';\n\n    const getBinaryBuffer = (binaryData) => {\n        const ords = Array.prototype.map.call(binaryData, byte => byte.charCodeAt(0) & 0xff);\n        const ui8a = new Uint8Array(ords);\n        return ui8a.buffer;\n    };\n\n    const reqBody = DASHES + POST_REQUEST_BOUNDARY + CRLF\n        + 'Content-Disposition: form-data;'\n        + 'name=\"' + fileParamName + '\";'\n        + 'filename=\"' + unescape(encodeURIComponent(fileName)) + '\"' + CRLF\n        + 'Content-Type: application/octet-stream' + CRLF + CRLF\n        + sBinaryData + CRLF\n        + DASHES + POST_REQUEST_BOUNDARY + CRLF;\n\n    request.method = 'POST';\n    request.headers['Content-Type'] = 'multipart/form-data;boundary=' + POST_REQUEST_BOUNDARY;\n    request.body = getBinaryBuffer(reqBody);\n    request.transformRequest = [];\n};\n\nconst MAX_RENDITION_RETRY = 3;\n\n// @private\nfunction _searchStockAssets(userId, searchText, findSimilarData, searchOptions, resultSize, renditionRetries = 0, searchRetries = 0, viaStockSearch) {\n\n    let binaryDataToUpload;\n\n    return imsInterface.getAccessToken(userId).then((accessToken) => {\n        if (!accessToken) {\n            return Promise.reject(401);\n        }\n\n        let url = getStockServiceURL() + configuration.STOCK_SEARCH_API_PATH;\n\n        if (findSimilarData && findSimilarData.url) {\n            // If this is a URL on server\n            const urlWithAuth = `${findSimilarData.url}&api_key=${imsInterface.getEnvironment().clientId}&user_token=${accessToken}`;\n\n            // Before we call Stock search with rendition URL, we want to make sure\n            // that the URL actually exists on the server, if not we should send local\n            // rendition data to avoid search failures\n\n            // If there is no local thumbnail path, then there is no point doing a HEAD check\n            // TODO: For now, turn this off for browser-sandboxed environments, due to origin policy\n            if (findSimilarData.path && environment.supportsFileSystem) {\n                const headers = {\n                    'User-Agent': versionManager.getUserAgent()\n                };\n                return fetch(urlWithAuth, { method: 'HEAD', headers }).then((response) => {\n                    if (!response.ok) {\n                        return Promise.reject(response.status);\n                    }\n\n                    // Rendition exists, proceed with URL based search\n                    return _searchStockAssets(\n                        userId,\n                        searchText,\n                        {\n                            url: findSimilarData.url\n                        },\n                        searchOptions,\n                        resultSize,\n                        renditionRetries,\n                        searchOptions,\n                        viaStockSearch\n                    );\n                }).catch(() => {\n                    if (renditionRetries === 0) {\n                        // We exceeded retry limit. Send the local thumbnail for search\n                        return _searchStockAssets(\n                            userId,\n                            searchText,\n                            {\n                                path: findSimilarData.path\n                            },\n                            searchOptions,\n                            resultSize,\n                            renditionRetries,\n                            searchOptions,\n                            viaStockSearch\n                        );\n                    }\n\n                    // Retry for rendition after 2 seconds\n                    return delay(2000, _searchStockAssets.bind(\n                        null,\n                        userId,\n                        searchText,\n                        findSimilarData,\n                        searchOptions,\n                        resultSize,\n                        renditionRetries - 1,\n                        searchOptions,\n                        viaStockSearch\n                    ));\n                });\n            }\n\n            url += '?search_parameters[similar_url]=' + encodeURIComponent(urlWithAuth);\n        } else if (findSimilarData && findSimilarData.path) {\n            binaryDataToUpload = readFile(findSimilarData.path, 'binary');\n            url += '?search_parameters[similar_image]=1';\n        } else if (findSimilarData && findSimilarData.id) {\n            url += '?search_parameters[similar]=' + findSimilarData.id;\n        } else {\n            // Need to encode a multibyte character for searchText, as IE11 does not take care of unencoded character.\n            url += '?search_parameters[words]=' + encodeURIComponent(searchText);\n        }\n\n        url += '&search_parameters[limit]=' + resultSize;\n        url += '&search_parameters[thumbnail_size]=240';\n        url += `&search_parameters[order]=${viewState.elementSearchSort}`;\n\n        url += '&locale=' + environment.getLocale();\n\n        const options = configuration.STOCK_SEARCH_OPTIONS.filter(option => searchOptions && searchOptions[option.id]);\n        const optionsQueryParameters = options.reduce((optionsQueryParams, option) => {\n            const { param, filterKey, filterValue } = option;\n\n            if (param) {\n                optionsQueryParams += '&search_parameters[filters][content_type:' + param + ']=1';\n                // For fetching product specific templates and Motion Graphics Templates.\n                // Also, viaStockSearch flag restricts adding template_type_id to Stock search url only (and doesn't allow any addition to url via save+license workflow).\n                if (param === 'template' && viaStockSearch) {\n                    const productCode = configuration.currentProduct.config.code;\n                    const newTemplate = configuration.STOCK_SEARCH_PRODUCT_TEMPLATE_ID_MAP[productCode];\n                    if (newTemplate) {\n                        optionsQueryParams += newTemplate.reduce((newTemplateParams, element) => `${newTemplateParams}&search_parameters[filters][template_type_id][]=${element}`, '');\n                    }\n                    const mogrtApiVersion = getMogrtApiVersion();\n\n                    if (mogrtApiVersion) {\n                        optionsQueryParams += `&search_parameters[filters][mogrt_api_version]=${mogrtApiVersion}`;\n                    }\n                }\n            }\n\n            if (filterKey) {\n                optionsQueryParams += `&search_parameters[filters][${filterKey}]`;\n\n                // If the filter value is expected to take in a\n                // collection of items, then indicate that it's\n                // an array with an extra '[]' in the url.\n                if (option.isArray) {\n                    optionsQueryParams += '[]';\n                }\n\n                optionsQueryParams += '=' + filterValue;\n            }\n\n            return optionsQueryParams;\n        }, '');\n\n        url += optionsQueryParameters;\n\n        // TODO: Consider merging this forEach with the above function to clarify the flow\n        if (options.length === 0) { // No options means, all options\n            const uiOptions = getSearchUIOptions();\n            uiOptions.forEach((option) => {\n                // Only content types will have the \"param\" property\n                if (option.param) {\n                    url += `&search_parameters[filters][content_type:${option.param}]=1`;\n                }\n            });\n        }\n\n        // required result columns\n        url += RESULT_COLUMNS;\n\n        const req = {\n            method: 'GET',\n            url,\n            headers: {\n                'x-api-key': imsInterface.getEnvironment().clientId,\n                'Authorization': 'Bearer ' + accessToken,\n                'User-Agent': versionManager.getUserAgent()\n            }\n        };\n\n        if (binaryDataToUpload) {\n            prepareForBinaryUpload(req, binaryDataToUpload, 'similar_image', 'similar_image.jpeg');\n        }\n\n        metrics.addProductHeaders(req.headers);\n\n        const request = new Request(req.url, req);\n\n        return fetch(request)\n            .then((response) => {\n                if (response.status !== 200) {\n                    return Promise.reject(response);\n                }\n\n                return response.json();\n            })\n            .then((data) => {\n                return data.files;\n            })\n            .catch((response) => {\n                if (response.status === 401 && searchRetries > 0) {\n                    imsInterface.clearAccessToken();\n                    return _searchStockAssets(userId, searchText, findSimilarData, searchOptions, resultSize, renditionRetries, searchRetries - 1, viaStockSearch);\n                }\n\n                response.text().then((text) => {\n                    debugLog.log(`Error ${response.status}: adobeStockRest.searchStockAssets, result=\\n ${typeof text === 'string' ? text : JSON.stringify(text)}`);\n                });\n\n                return Promise.reject(response.status);\n            });\n    }, (error) => {\n        debugLog.log(`Error getting access token: searchStockAssets, result= ${typeof error === 'string' ? error : JSON.stringify(error)}`);\n\n        return Promise.reject(401);\n    });\n}\n\nexport function searchStockAssets(userId, searchText, findSimilarData, searchOptions, resultSize, viaStockSearch) {\n    return _searchStockAssets(\n        userId,\n        searchText,\n        findSimilarData,\n        searchOptions,\n        resultSize,\n        MAX_RENDITION_RETRY,\n        1,\n        viaStockSearch\n    );\n}\n\n/**\n * Attempts to license the given asset or retrieve information about the licensed asset if it\n * has been already licensed.\n *\n * @param {string} userId the user id of the customer\n * @param {string} assetId the asset id of the item being licensed\n * @param {string} licenseType the license name of the desired license\n * @param {Object} [formData] the form data if we are licensing items the require license references\n * @param {number} [retries=0] the number of times this call will be retried\n * @returns {Promise} promise that resolves to the result of the call an error code\n */\nexport function licenseAsset(userId, assetId, licenseType, formData, retries = 0) {\n    return imsInterface.getAccessToken(userId).then((accessToken) => {\n        if (!accessToken) {\n            return Promise.reject(401);\n        }\n\n        let url = getStockServiceURL() + configuration.STOCK_LICENSE_PATH;\n        url = url.replace(/ZZZZ/, assetId);\n        url = url.replace(/LLLL/, licenseType);\n\n        const req = {\n            method: 'POST',\n            headers: {\n                'x-api-key': imsInterface.getEnvironment().clientId,\n                'Authorization': 'Bearer ' + accessToken,\n                'User-Agent': versionManager.getUserAgent()\n            }\n        };\n        if (formData) {\n            req.data = { 'cce_agency': formData };\n        }\n\n        metrics.addProductHeaders(req.headers);\n\n        return fetch(url, req)\n            .then((response) => {\n                if (response.status === 401 && retries > 0) {\n                    imsInterface.clearAccessToken();\n                    return licenseAsset(userId, assetId, licenseType, formData, retries - 1);\n                }\n\n                if (response.status !== 200) {\n                    response.text().then((text) => {\n                        debugLog.log(`Error with licenseAsset: result= ${text}`);\n                    });\n                    return Promise.reject(response.status);\n                }\n\n                return response.json();\n            });\n    }).catch((error) => {\n        if (error === 'LOGGED_OUT') {\n            debugLog.log('Error with licenseAsset: could not get token');\n            return Promise.reject(401);\n        }\n\n        return Promise.reject(error);\n    });\n}\n\nexport function getStockAssetMetadata(userId, assetId) {\n    return imsInterface.getAccessToken(userId).then((accessToken) => {\n        if (!accessToken) {\n            return Promise.reject(401);\n        }\n\n        let url = getStockServiceURL() + configuration.STOCK_METADATA_PATH;\n        url += `?ids=${assetId}`;\n        url += '&result_columns[]=is_editorial&result_columns[]=creator_name&result_columns[]=premium_level_id';\n\n        const req = {\n            method: 'GET',\n            headers: {\n                'x-api-key': imsInterface.getEnvironment().clientId,\n                'Authorization': 'Bearer ' + accessToken,\n                'User-Agent': versionManager.getUserAgent()\n            }\n        };\n\n        metrics.addProductHeaders(req.headers);\n\n        return fetch(url, req)\n            .then((response) => {\n                if (response.status !== 200) {\n                    response.text().then((text) => {\n                        debugLog.log(`Error with getStockAssetMetadata: result= ${text}`);\n                    }).catch(err => {\n                        debugLog.log(`Error with getStockAssetMetadata: error= ${err}`);\n                    });\n                    return Promise.reject(response.status);\n                }\n\n                return response.json();\n            });\n    }).catch((error) => {\n        if (error === 'LOGGED_OUT') {\n            debugLog.log('Error with getStockAssetMetadata: could not get token');\n            return Promise.reject(401);\n        }\n\n        return Promise.reject(error);\n    });\n}\n","/**************************************************************************************************\n*\n* ADOBE SYSTEMS INCORPORATED\n* Copyright 2013 Adobe Systems Incorporated\n* All Rights Reserved.\n*\n* NOTICE:  Adobe permits you to use, modify, and distribute this file in accordance with the\n* terms of the Adobe license agreement accompanying it.  If you have received this file from a\n* source other than Adobe, then your use, modification, or distribution of it requires the prior\n* written permission of Adobe.\n*\n**************************************************************************************************/\n\n/* eslint no-var: off */\n\n/** Vulcan - v7.0.0 */\n\n/**\n * @class Vulcan\n *\n * The singleton instance, <tt>VulcanInterface</tt>, provides an interface\n * to the Vulcan. Allows you to launch CC applications\n * and discover information about them.\n */\nfunction Vulcan()\n{\n    this._version = 7;\n    this.useSpecifiers = true;\n}\n\n/**\n * Gets all available application specifiers on the local machine.\n *\n * @returns The array of all available application specifiers.\n */\nVulcan.prototype.getTargetSpecifiers = function()\n{\n\tvar params = {};\n\treturn JSON.parse(window.__adobe_cep__.invokeSync(\"vulcanGetTargetSpecifiers\", JSON.stringify(params)));\n};\n\n/**\n * Launches a CC application on the local machine, if it is not already running.\n *\n * @param targetSpecifier The application specifier; for example \"indesign\".\n *\n *        Note: In Windows 7 64-bit or Windows 8 64-bit system, some target applications (like Photoshop and Illustrator) have both 32-bit version\n *        and 64-bit version. Therefore, we need to specify the version by this parameter with \"photoshop-70.032\" or \"photoshop-70.064\". If you\n *        installed Photoshop 32-bit and 64-bit on one Windows 64-bit system and invoke this interface with parameter \"photoshop-70.032\", you may\n *        receive wrong result.\n *        The specifiers for Illustrator is \"illustrator-17.032\", \"illustrator-17.064\", \"illustrator-17\" and \"illustrator\".\n *\n *        In other platforms there is no such issue, so we can use \"photoshop\" or \"photoshop-70\" as specifier.\n * @param focus           True to launch in foreground, or false to launch in the background.\n * @param cmdLine         Optional, command-line parameters to supply to the launch command.\n * @returns True if the app can be launched, false otherwise.\n */\nVulcan.prototype.launchApp = function(targetSpecifier, focus, cmdLine)\n{\n    if(!requiredParamsValid(targetSpecifier) )\n    {\n        return false;\n    }\n\n\tvar params = {};\n\tparams.targetSpecifier = targetSpecifier;\n\tparams.focus = focus ? \"true\" : \"false\";\n\tparams.cmdLine = (cmdLine === undefined || cmdLine === null) ? \"\" : cmdLine;\n\n\treturn JSON.parse(window.__adobe_cep__.invokeSync(\"vulcanLaunchApp\", JSON.stringify(params))).result;\n};\n\n/**\n * Checks whether a CC application is running on the local machine.\n *\n * @param targetSpecifier The application specifier; for example \"indesign\".\n *\n *        Note: In Windows 7 64-bit or Windows 8 64-bit system, some target applications (like Photoshop and Illustrator) have both 32-bit version\n *        and 64-bit version. Therefore, we need to specify the version by this parameter with \"photoshop-70.032\" or \"photoshop-70.064\". If you\n *        installed Photoshop 32-bit and 64-bit on one Windows 64-bit system and invoke this interface with parameter \"photoshop-70.032\", you may\n *        receive wrong result.\n *        The specifiers for Illustrator is \"illustrator-17.032\", \"illustrator-17.064\", \"illustrator-17\" and \"illustrator\".\n *\n *        In other platforms there is no such issue, so we can use \"photoshop\" or \"photoshop-70\" as specifier.\n * @returns True if the app is running, false otherwise.\n */\nVulcan.prototype.isAppRunning = function(targetSpecifier)\n{\n    if(!requiredParamsValid(targetSpecifier) )\n    {\n        return false;\n    }\n\n\tvar params = {};\n\tparams.targetSpecifier = targetSpecifier;\n\n\treturn JSON.parse(window.__adobe_cep__.invokeSync(\"vulcanIsAppRunning\", JSON.stringify(params))).result;\n};\n\n/**\n * Checks whether a CC application is installed on the local machine.\n *\n * @param targetSpecifier The application specifier; for example \"indesign\".\n *\n *        Note: In Windows 7 64-bit or Windows 8 64-bit system, some target applications (like Photoshop and Illustrator) have both 32-bit version\n *        and 64-bit version. Therefore, we need to specify the version by this parameter with \"photoshop-70.032\" or \"photoshop-70.064\". If you\n *        installed Photoshop 32-bit and 64-bit on one Windows 64-bit system and invoke this interface with parameter \"photoshop-70.032\", you may\n *        receive wrong result.\n *        The specifiers for Illustrator is \"illustrator-17.032\", \"illustrator-17.064\", \"illustrator-17\" and \"illustrator\".\n *\n *        In other platforms there is no such issue, so we can use \"photoshop\" or \"photoshop-70\" as specifier.\n * @returns True if the app is installed, false otherwise.\n */\nVulcan.prototype.isAppInstalled = function(targetSpecifier)\n{\n    if(!requiredParamsValid(targetSpecifier) )\n    {\n        return false;\n    }\n\n\tvar params = {};\n\tparams.targetSpecifier = targetSpecifier;\n\n\treturn JSON.parse(window.__adobe_cep__.invokeSync(\"vulcanIsAppInstalled\", JSON.stringify(params))).result;\n};\n\n/**\n * Retrieves the local install path of a CC application.\n *\n * @param targetSpecifier The application specifier; for example \"indesign\".\n *\n *        Note: In Windows 7 64-bit or Windows 8 64-bit system, some target applications (like Photoshop and Illustrator) have both 32-bit version\n *        and 64-bit version. Therefore, we need to specify the version by this parameter with \"photoshop-70.032\" or \"photoshop-70.064\". If you\n *        installed Photoshop 32-bit and 64-bit on one Windows 64-bit system and invoke this interface with parameter \"photoshop-70.032\", you may\n *        receive wrong result.\n *        The specifiers for Illustrator is \"illustrator-17.032\", \"illustrator-17.064\", \"illustrator-17\" and \"illustrator\".\n *\n *        In other platforms there is no such issue, so we can use \"photoshop\" or \"photoshop-70\" as specifier.\n * @returns The path string if the application is found, \"\" otherwise.\n */\nVulcan.prototype.getAppPath = function(targetSpecifier)\n{\n    if(!requiredParamsValid(targetSpecifier) )\n    {\n        return \"\";\n    }\n\n\tvar params = {};\n\tparams.targetSpecifier = targetSpecifier;\n\n\treturn JSON.parse(window.__adobe_cep__.invokeSync(\"vulcanGetAppPath\", JSON.stringify(params))).result;\n};\n\n/**\n * Registers a message listener callback function for a Vulcan message.\n *\n * @param type            The message type.\n * @param callback        The callback function that handles the message.\n *            Takes one argument, the message object.\n * @param obj             Optional, the object containing the callback method, if any.\n *            Default is null.\n */\nVulcan.prototype.addMessageListener = function(type, callback, obj)\n{\n    if(!requiredParamsValid(type, callback) || !strStartsWith(type, VulcanMessage.TYPE_PREFIX))\n    {\n        return;\n    }\n\n\tvar params = {};\n\tparams.type = type;\n\n\twindow.__adobe_cep__.invokeAsync(\"vulcanAddMessageListener\", JSON.stringify(params), callback, obj);\n};\n\n/**\n * Removes a registered message listener callback function for a Vulcan message.\n *\n * @param type            The message type.\n * @param callback        The callback function that was registered.\n *            Takes one argument, the message object.\n * @param obj             Optional, the object containing the callback method, if any.\n *            Default is null.\n */\nVulcan.prototype.removeMessageListener = function(type, callback, obj)\n{\n    if(!requiredParamsValid(type, callback) || !strStartsWith(type, VulcanMessage.TYPE_PREFIX))\n    {\n        return;\n    }\n\n    var params = {};\n    params.type = type;\n\n    window.__adobe_cep__.invokeAsync(\"vulcanRemoveMessageListener\", JSON.stringify(params), callback, obj);\n};\n\n/**\n * Dispatches a Vulcan message.\n *\n * @param vulcanMessage   The message object.\n */\nVulcan.prototype.dispatchMessage = function(vulcanMessage)\n{\n    if(!requiredParamsValid(vulcanMessage) || !strStartsWith(vulcanMessage.type, VulcanMessage.TYPE_PREFIX))\n    {\n        return;\n    }\n\n\tvar params = {};\n\tvar message = new VulcanMessage(vulcanMessage.type);\n\tmessage.initialize(vulcanMessage);\n\tparams.vulcanMessage = message;\n\n\twindow.__adobe_cep__.invokeSync(\"vulcanDispatchMessage\", JSON.stringify(params));\n};\n\n/**\n * Retrieves the message payload of a Vulcan message for the registered message listener callback function.\n *\n * @param vulcanMessage   The message object.\n * @returns                A string containing the message payload.\n */\nVulcan.prototype.getPayload = function(vulcanMessage)\n{\n    if(!requiredParamsValid(vulcanMessage) || !strStartsWith(vulcanMessage.type, VulcanMessage.TYPE_PREFIX))\n    {\n        return null;\n    }\n\n\tvar message = new VulcanMessage(vulcanMessage.type);\n\tmessage.initialize(vulcanMessage);\n\treturn message.getPayload();\n};\n\n/** Singleton instance of Vulcan **/\nexport var VulcanInterface = new Vulcan();\n\n//--------------------------------- Vulcan Message ------------------------------\n\n/**\n * @class VulcanMessage\n * Message type for sending messages between host applications.\n * A message of this type can be broadcast to all running\n * Vulcan-enabled apps.\n *\n * To send a message between extensions running within one\n * application, use the <code>CSEvent</code> type in CSInterface.js.\n *\n * @param type            The message type.\n *\n */\nexport function VulcanMessage(type)\n{\n    this.type = type;\n    this.scope = VulcanMessage.SCOPE_SUITE;\n    this.appId = VulcanMessage.DEFAULT_APP_ID;\n\tthis.appVersion = VulcanMessage.DEFAULT_APP_VERSION;\n    this.data = VulcanMessage.DEFAULT_DATA;\n}\n\nVulcanMessage.TYPE_PREFIX    = \"vulcan.SuiteMessage.\";\nVulcanMessage.SCOPE_SUITE    = \"GLOBAL\";\nVulcanMessage.DEFAULT_APP_ID = \"UNKNOWN\";\nVulcanMessage.DEFAULT_APP_VERSION = \"UNKNOWN\";\nVulcanMessage.DEFAULT_DATA = \"<data><payload></payload></data>\";\nVulcanMessage.dataTemplate = \"<data>{0}</data>\";\nVulcanMessage.payloadTemplate = \"<payload>{0}</payload>\";\n\n/**\n * Initializes this message instance.\n *\n * @param message         A \\c message instance to use for initialization.\n */\nVulcanMessage.prototype.initialize = function(message)\n{\n    this.type = message.type;\n    this.scope = message.scope;\n    this.appId = message.appId;\n    this.appVersion = message.appVersion;\n    this.data = message.data;\n};\n\n/**\n * Retrieve the message data.\n *\n * @returns A data string in XML format.\n */\nVulcanMessage.prototype.xmlData = function ()\n{\n    if(this.data === undefined)\n    {\n        var str = \"\";\n\t\tstr = String.format(VulcanMessage.payloadTemplate, str);\n\t\tthis.data = String.format(VulcanMessage.dataTemplate, str);\n    }\n    return this.data;\n};\n\n/**\n * Sets the message payload of this message.\n *\n * @param payload         A string containing the message payload.\n */\nVulcanMessage.prototype.setPayload = function(payload)\n{\n    var str = cep.encoding.convertion.utf8_to_b64(payload);\n    str = String.format(VulcanMessage.payloadTemplate, str);\n    this.data = String.format(VulcanMessage.dataTemplate, str);\n};\n\n/**\n * Retrieves the message payload of this message.\n *\n * @returns                A string containing the message payload.\n */\nVulcanMessage.prototype.getPayload = function()\n{\n    var str = GetValueByKey(this.data, \"payload\");\n    if(str !== null)\n    {\n        return cep.encoding.convertion.b64_to_utf8(str);\n    }\n\n    return null;\n};\n\n/**\n * Converts the properties of this instance to a string.\n *\n * @returns The string version of this instance.\n */\nVulcanMessage.prototype.toString = function()\n{\n    var str = \"type=\" + this.type;\n    str += \", scope=\" + this.scope;\n    str += \", appId=\" + this.appId;\n    str += \", appVersion=\" + this.appVersion;\n    str += \", data=\" + this.xmlData();\n    return str;\n};\n\n//--------------------------------------- Util --------------------------------\n\n/**\n * Formats a string based on a template.\n *\n * @param src The format template.\n *\n * @returns The formatted string\n */\nString.format = function(src)\n{\n    if (arguments.length === 0)\n    {\n        return null;\n    }\n\n    var args = Array.prototype.slice.call(arguments, 1);\n    return src.replace(/\\{(\\d+)\\}/g, function(m, i){\n        return args[i];\n  });\n};\n\n/**\n * Retrieves the content of an XML element.\n *\n * @param xmlStr    The XML string.\n * @param key       The name of the tag.\n *\n * @returns          The content of the tag, or the empty string if such tag is found\n *          or the tag has no content.\n */\nfunction GetValueByKey(xmlStr, key)\n{\n    if(window.DOMParser)\n    {\n        var parser = new window.DOMParser();\n        try\n        {\n            var xmlDoc = parser.parseFromString(xmlStr, \"text/xml\");\n            var node = xmlDoc.getElementsByTagName(key)[0];\n            if(node && node.childNodes[0])\n            {\n                return node.childNodes[0].nodeValue;\n            }\n        }\n        catch(e)\n        {\n            //log the error\n        }\n    }\n    return \"\";\n}\n\n/**\n * Reports whether required parameters are valid.\n *\n * @returns    True if all required parameters are valid,\n *            false if any of the required parameters are invalid.\n */\nfunction requiredParamsValid()\n{\n    for(var i = 0; i< arguments.length; i++)\n    {\n        var argument = arguments[i];\n        if(argument === undefined || argument === null)\n        {\n            return false;\n        }\n    }\n\n    return true;\n}\n\n/**\n * Reports whether a string has a given prefix.\n *\n * @param str       The target string.\n * @param prefix    The specific prefix string.\n *\n * @returns          True if the string has the prefix, false if not.\n */\nfunction strStartsWith(str, prefix)\n{\n    if(typeof str != \"string\")\n    {\n        return false;\n    }\n    return str.indexOf(prefix) === 0;\n}\n","/**************************************************************************************************\n*\n* ADOBE SYSTEMS INCORPORATED\n* Copyright 2020 Adobe Systems Incorporated\n* All Rights Reserved.\n*\n* NOTICE:  Adobe permits you to use, modify, and distribute this file in accordance with the\n* terms of the Adobe license agreement accompanying it.  If you have received this file from a\n* source other than Adobe, then your use, modification, or distribution of it requires the prior\n* written permission of Adobe.\n*\n**************************************************************************************************/\n\n/** Vulcan - v11.1.0 */\n\n/**\n/**\n * @class Vulcan\n *\n * The singleton instance, <tt>VulcanInterface</tt>, provides an interface\n * to the Vulcan. Allows you to launch CC applications\n * and discover information about them.\n */\n function Vulcan()\n {\n    this._version = 11.1;\n    this.useSpecifiers = false;\n}\n\n /**\n  * Gets all available application SAPCode-Specifiers on the local machine.\n  *\n  * Vulcan Control New 6.x APIs, and Deprecating older Vulcan Control APIs.\n  * Changes : New getTargetSpecifiersEx returns productSAPCodeSpecifiers\n  *\n  * @return The array of all available application SAPCode-Specifiers.\n  */\n Vulcan.prototype.getTargetSpecifiers = function()\n {\n     var params = {};\n     return JSON.parse(window.__adobe_cep__.invokeSync(\"vulcanGetTargetSpecifiersEx\", JSON.stringify(params)));\n };\n\n Vulcan.prototype.getTargetSpecifiersEx = function() {\n    return this.getTargetSpecifiers();\n }\n\n /**\n  * Launches a CC application on the local machine, if it is not already running.\n  *\n  * Vulcan Control New 6.x APIs, and Deprecating older Vulcan Control APIs.\n  * Changes : New launchAppEx uses productSAPCodeSpecifiers\n  * Changes : Modified function name to match previous vulcan version\n  *\n  * @param productSAPCodeSpecifier The application specifier; for example \"ILST-25.2.3\", \"ILST-25\", \"ILST-25.2.3-en_US\" and \"ILST\".\n  * @param focus           True to launch in foreground, or false to launch in the background.\n  * @param cmdLine         Optional, command-line parameters to supply to the launch command.\n  * @return True if the app can be launched, false otherwise.\n  */\n Vulcan.prototype.launchApp = function(productSAPCodeSpecifier, focus, cmdLine)\n {\n     if(!requiredParamsValid(productSAPCodeSpecifier))\n     {\n         return false;\n     }\n\n     var params = {};\n     params.productSAPCodeSpecifier = productSAPCodeSpecifier;\n     params.focus = focus ? \"true\" : \"false\";\n     params.cmdLine = requiredParamsValid(cmdLine) ? cmdLine : \"\";\n\n     return JSON.parse(window.__adobe_cep__.invokeSync(\"vulcanLaunchAppEx\", JSON.stringify(params))).result;\n };\n\n Vulcan.prototype.launchAppEx = function(productSAPCodeSpecifier, focus, cmdLine)\n {\n    return this.launchApp(productSAPCodeSpecifier, focus, cmdLine);\n }\n \n /**\n  * Checks whether a CC application is running on the local machine.\n  *\n  * Vulcan Control New 6.x APIs, and Deprecating older Vulcan Control APIs.\n  * Changes : New isAppRunningEx uses productSAPCodeSpecifiers\n  * Changes : Modified function name to match previous vulcan version\n  *\n  * @param productSAPCodeSpecifier The application specifier; for example \"ILST-25.2.3\", \"ILST-25\", \"ILST-25.2.3-en_US\" and \"ILST\".\n  * @return True if the app is running, false otherwise.\n  */\n Vulcan.prototype.isAppRunning = function(productSAPCodeSpecifier)\n {\n     if(!requiredParamsValid(productSAPCodeSpecifier))\n     {\n         return false;\n     }\n\n     var params = {};\n     params.productSAPCodeSpecifier = productSAPCodeSpecifier;\n\n     return JSON.parse(window.__adobe_cep__.invokeSync(\"vulcanIsAppRunningEx\", JSON.stringify(params))).result;\n };\n\n Vulcan.prototype.isAppRunningEx = function(productSAPCodeSpecifier) {\n    return this.isAppRunning(productSAPCodeSpecifier);\n }\n\n /**\n  * Checks whether a CC application is installed on the local machine.\n  *\n  * Vulcan Control New 6.x APIs, and Deprecating older Vulcan Control APIs.\n  * Changes : New isAppInstalledEx uses productSAPCodeSpecifiers\n  * Changes : Modified function name to match previous vulcan version\n  *\n  * @param productSAPCodeSpecifier The application specifier; for example \"ILST-25.2.3\", \"ILST-25\", \"ILST-25.2.3-en_US\" and \"ILST\".\n  * @return True if the app is installed, false otherwise.\n  */\n Vulcan.prototype.isAppInstalled = function(productSAPCodeSpecifier)\n {\n     if(!requiredParamsValid(productSAPCodeSpecifier)) {\n         return false;\n     }\n\n     const params = { productSAPCodeSpecifier };\n     return !!(JSON.parse(window.__adobe_cep__.invokeSync(\"vulcanIsAppInstalledEx\", JSON.stringify(params)) || '{}').result);\n };\n\n Vulcan.prototype.isAppInstalledEx = function(productSAPCodeSpecifier) {\n    return this.isAppInstalled(productSAPCodeSpecifier);\n }\n\n /**s\n  * Retrieves the local install path of a CC application.\n  *\n  * Vulcan Control New 6.x APIs, and Deprecating older Vulcan Control APIs.\n  * Changes : New getAppPathEx uses productSAPCodeSpecifiers\n  * Changes : Modified function name to match previous vulcan version\n  *\n  * @param productSAPCodeSpecifier The application specifier; for example \"ILST-25.2.3\", \"ILST-25\", \"ILST-25.2.3-en_US\" and \"ILST\".\n  * @return The path string if the application is found, \"\" otherwise.\n  */\n Vulcan.prototype.getAppPath = function(productSAPCodeSpecifier)\n {\n     if(!requiredParamsValid(productSAPCodeSpecifier))\n     {\n         return \"\";\n     }\n\n     var params = {};\n     params.productSAPCodeSpecifier = productSAPCodeSpecifier;\n\n     return JSON.parse(window.__adobe_cep__.invokeSync(\"vulcanGetAppPathEx\", JSON.stringify(params))).result;\n };\n\n Vulcan.prototype.getAppPathEx = function(productSAPCodeSpecifier) {\n    return this.getAppPath(productSAPCodeSpecifier);\n }\n\n /**\n  * Registers a message listener callback function for a Vulcan message.\n  *\n  * @param type            The message type.\n  * @param callback        The callback function that handles the message.\n  *                        Takes one argument, the message object.\n  * @param obj             Optional, the object containing the callback method, if any.\n  *                        Default is null.\n  */\n Vulcan.prototype.addMessageListener = function(type, callback, obj)\n {\n     if(!requiredParamsValid(type, callback) || !strStartsWith(type, VulcanMessage.TYPE_PREFIX))\n     {\n         return;\n     }\n\n     var params = {};\n     params.type = type;\n\n     window.__adobe_cep__.invokeAsync(\"vulcanAddMessageListener\", JSON.stringify(params), callback, obj);\n };\n\n /**\n  * Removes a registered message listener callback function for a Vulcan message.\n  *\n  * @param type            The message type.\n  * @param callback        The callback function that was registered.\n  *                        Takes one argument, the message object.\n  * @param obj             Optional, the object containing the callback method, if any.\n  *                        Default is null.\n  */\n Vulcan.prototype.removeMessageListener = function(type, callback, obj)\n {\n     if(!requiredParamsValid(type, callback) || !strStartsWith(type, VulcanMessage.TYPE_PREFIX))\n     {\n         return;\n     }\n\n     var params = {};\n     params.type = type;\n\n     window.__adobe_cep__.invokeAsync(\"vulcanRemoveMessageListener\", JSON.stringify(params), callback, obj);\n };\n\n /**\n  * Dispatches a Vulcan message.\n  *\n  * @param vulcanMessage   The message object.\n  */\n Vulcan.prototype.dispatchMessage = function(vulcanMessage)\n {\n     if(!requiredParamsValid(vulcanMessage) || !strStartsWith(vulcanMessage.type, VulcanMessage.TYPE_PREFIX))\n     {\n         return;\n     }\n\n     var params = {};\n     var message = new VulcanMessage(vulcanMessage.type);\n     message.initialize(vulcanMessage);\n     params.vulcanMessage = message;\n\n     window.__adobe_cep__.invokeSync(\"vulcanDispatchMessage\", JSON.stringify(params));\n };\n\n /**\n  * Retrieves the message payload of a Vulcan message for the registered message listener callback function.\n  *\n  * @param vulcanMessage   The message object.\n  * @return                A string containing the message payload.\n  */\n Vulcan.prototype.getPayload = function(vulcanMessage)\n {\n     if(!requiredParamsValid(vulcanMessage) || !strStartsWith(vulcanMessage.type, VulcanMessage.TYPE_PREFIX))\n     {\n         return null;\n     }\n\n     var message = new VulcanMessage(vulcanMessage.type);\n     message.initialize(vulcanMessage);\n     return message.getPayload();\n };\n\n /**\n  * Gets all available endpoints of the running Vulcan-enabled applications.\n  *\n  * Since 7.0.0\n  *\n  * @return                The array of all available endpoints.\n  * An example endpoint string:\n  * <endPoint>\n  *   <appId>PHXS</appId>\n  *   <appVersion>16.1.0</appVersion>\n  * </endPoint>\n  */\n Vulcan.prototype.getEndPoints = function()\n {\n     var params = {};\n     return JSON.parse(window.__adobe_cep__.invokeSync(\"vulcanGetEndPoints\", JSON.stringify(params)));\n };\n\n /**\n  * Gets the endpoint for itself.\n  *\n  * Since 7.0.0\n  *\n  * @return                The endpoint string for itself.\n  */\n Vulcan.prototype.getSelfEndPoint = function()\n {\n     var params = {};\n     return window.__adobe_cep__.invokeSync(\"vulcanGetSelfEndPoint\", JSON.stringify(params));\n };\n\n /** Singleton instance of Vulcan **/\n export var VulcanInterface = new Vulcan();\n\n //--------------------------------- Vulcan Message ------------------------------\n\n /**\n  * @class VulcanMessage\n  * Message type for sending messages between host applications.\n  * A message of this type can be sent to the designated destination\n  * when appId and appVersion are provided and valid. Otherwise,\n  * the message is broadcast to all running Vulcan-enabled applications.\n  *\n  * To send a message between extensions running within one\n  * application, use the <code>CSEvent</code> type in CSInterface.js.\n  *\n  * @param type            The message type.\n  * @param appId           The peer appId.\n  * @param appVersion      The peer appVersion.\n  *\n  */\n export function VulcanMessage(type, appId, appVersion)\n {\n     this.type = type;\n     this.scope = VulcanMessage.SCOPE_SUITE;\n     this.appId = requiredParamsValid(appId) ? appId : VulcanMessage.DEFAULT_APP_ID;\n     this.appVersion = requiredParamsValid(appVersion) ? appVersion : VulcanMessage.DEFAULT_APP_VERSION;\n     this.data = VulcanMessage.DEFAULT_DATA;\n }\n\n VulcanMessage.TYPE_PREFIX    = \"vulcan.SuiteMessage.\";\n VulcanMessage.SCOPE_SUITE    = \"GLOBAL\";\n VulcanMessage.DEFAULT_APP_ID = \"UNKNOWN\";\n VulcanMessage.DEFAULT_APP_VERSION = \"UNKNOWN\";\n VulcanMessage.DEFAULT_DATA = \"<data><payload></payload></data>\";\n VulcanMessage.dataTemplate = \"<data>{0}</data>\";\n VulcanMessage.payloadTemplate = \"<payload>{0}</payload>\";\n\n /**\n  * Initializes this message instance.\n  *\n  * @param message         A \\c message instance to use for initialization.\n  */\n VulcanMessage.prototype.initialize = function(message)\n {\n     this.type = message.type;\n     this.scope = message.scope;\n     this.appId = message.appId;\n     this.appVersion = message.appVersion;\n     this.data = message.data;\n };\n \n /**\n  * Retrieves the message data.\n  *\n  * @return A data string in XML format.\n  */\n VulcanMessage.prototype.xmlData = function()\n {\n     if(this.data === undefined)\n     {\n         var str = \"\";\n         str = String.format(VulcanMessage.payloadTemplate, str);\n         this.data = String.format(VulcanMessage.dataTemplate, str);\n     }\n     return this.data;\n };\n\n /**\n  * Sets the message payload of this message.\n  *\n  * @param payload         A string containing the message payload.\n  */\n VulcanMessage.prototype.setPayload = function(payload)\n {\n     var str = cep.encoding.convertion.utf8_to_b64(payload);\n     str = String.format(VulcanMessage.payloadTemplate, str);\n     this.data = String.format(VulcanMessage.dataTemplate, str);\n };\n\n /**\n  * Retrieves the message payload of this message.\n  *\n  * @return                A string containing the message payload.\n  */\n VulcanMessage.prototype.getPayload = function()\n {\n     var str = GetValueByKey(this.data, \"payload\");\n     if(str !== null)\n     {\n         return cep.encoding.convertion.b64_to_utf8(str);\n     }\n     return null;\n };\n\n /**\n  * Converts the properties of this instance to a string.\n  *\n  * @return The string version of this instance.\n  */\n VulcanMessage.prototype.toString = function()\n {\n     var str = \"type=\" + this.type;\n     str += \", scope=\" + this.scope;\n     str += \", appId=\" + this.appId;\n     str += \", appVersion=\" + this.appVersion;\n     str += \", data=\" + this.xmlData();\n     return str;\n };\n\n //--------------------------------------- Util --------------------------------\n\n /**\n  * Formats a string based on a template.\n  *\n  * @param src The format template.\n  *\n  * @return The formatted string\n  */\n String.format = function(src)\n {\n     if (arguments.length === 0)\n     {\n         return null;\n     }\n\n     var args = Array.prototype.slice.call(arguments, 1);\n     return src.replace(/\\{(\\d+)\\}/g, function(m, i){\n         return args[i];\n   });\n };\n\n /**\n  * Retrieves the content of an XML element.\n  *\n  * @param xmlStr    The XML string.\n  * @param key       The name of the tag.\n  *\n  * @return          The content of the tag, or the empty string\n  *                  if such tag is not found or the tag has no content.\n  */\n function GetValueByKey(xmlStr, key)\n {\n     if(window.DOMParser)\n     {\n         var parser = new window.DOMParser();\n         try\n         {\n             var xmlDoc = parser.parseFromString(xmlStr, \"text/xml\");\n             var node = xmlDoc.getElementsByTagName(key)[0];\n             if(node && node.childNodes[0])\n             {\n                 return node.childNodes[0].nodeValue;\n             }\n         }\n         catch(e)\n         {\n             //log the error\n         }\n     }\n     return \"\";\n }\n \n /**\n  * Reports whether required parameters are valid.\n  *\n  * @return    True if all required parameters are valid,\n  *            false if any of the required parameters are invalid.\n  */\n function requiredParamsValid()\n {\n     for(var i = 0; i < arguments.length; i++)\n     {\n         var argument = arguments[i];\n         if(argument === undefined || argument === null)\n         {\n             return false;\n         }\n     }\n     return true;\n }\n\n /**\n  * Reports whether a string has a given prefix.\n  *\n  * @param str       The target string.\n  * @param prefix    The specific prefix string.\n  *\n  * @return          True if the string has the prefix, false if not.\n  */\n function strStartsWith(str, prefix)\n {\n     if(typeof str != \"string\")\n     {\n         return false;\n     }\n     return str.indexOf(prefix) === 0;\n }\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport * as Vulcan7 from './Vulcan.7';\nimport * as Vulcan11 from './Vulcan.11';\nimport configuration from 'app/js/config/configuration';\n\nlet vulcan;\n\ntry {\n    const {major, minor} = JSON.parse(window.__adobe_cep__.getCurrentApiVersion()) || {major:0 , minor:0};\n    const cepVersion = Number.parseFloat(`${major}.${minor}`);\n    vulcan = cepVersion >= configuration.MIN_CEP_VULCAN_7_VERSION ? Vulcan11 : Vulcan7;\n} catch(e) {\n    vulcan = Vulcan7;\n}\n\nexport const VulcanInterface = vulcan.VulcanInterface;\nexport const VulcanMessage = vulcan.VulcanMessage;\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nmodule.exports = {\n    SCOPES: 'openid,AdobeID,creative_cloud,creative_sdk,cc_private,sao.stock,sao.cce_private,tk_platform,ab.manage',\n    FETCH_TOKEN_EVENT: 'com.adobe.csxs.events.internal.ims.FetchAccessToken',\n    CONFIGS: {\n        'staging': {\n            'label': 'Staging',\n            'clientId': 'ProjectCentralPanel11',\n            'clientSecret': process.env.CLIENT_SECRET_STAGING,\n            'storageHost': 'cc-api-storage-stage.adobe.io',\n            'assetsHost': 'cc-api-assets-stage.adobe.io',\n            'ccwebHost': 'assets-stage.adobecc.com',\n            'ims': 'ims-na1-stg1.adobelogin.com',\n            'imsServices': 'adobeid-na1-stg1.services.adobe.com',\n            'stockHost': 'stock-stage.adobe.io',\n            'stockWebHost': 'primary.stock.stage.adobe.com',\n            'typekitHost': 'cctypekit-relstage.adobe.io',\n            'linkServiceHost': 'links-stage.adobecc.com',\n            'linkServiceWebHost': 'shared-assets-stage.adobecc.com',\n            'ccLibraryServiceHost': 'ccx-melville-stage.adobe.io',\n            'supportContactGoURL': 'https://www.stage.adobe.com/go/ccl_contact',\n            'followLibrariesGoURL': 'https://www.adobe.com/go/stage_cc_public_libraries',\n            'invitationsHost': 'invitations-stage.adobe.io',\n            'personalizationHost': 'p13n-stage.adobe.io',\n            'experienceCloudHost': 'https://experience-stage.adobe.com'\n        },\n        'production': {\n            'label': 'Production',\n            'clientId': 'ProjectCentralPanel11',\n            'clientSecret': process.env.CLIENT_SECRET_PRODUCTION,\n            'storageHost': 'cc-api-storage.adobe.io',\n            'assetsHost': 'cc-api-assets.adobe.io',\n            'ccwebHost': 'assets.adobe.com',\n            'ims': 'ims-na1.adobelogin.com',\n            'imsServices': 'adobeid-na1.services.adobe.com',\n            'stockHost': 'stock.adobe.io',\n            'stockWebHost': 'stock.adobe.com',\n            'typekitHost': 'cctypekit.adobe.io',\n            'linkServiceHost': 'links-prod.adobecc.com',\n            'linkServiceWebHost': 'shared-assets.adobe.com',\n            'ccLibraryServiceHost': 'libraries.adobe.io',\n            'supportContactGoURL': 'https://www.adobe.com/go/ccl_contact',\n            'followLibrariesGoURL': 'https://www.adobe.com/go/cc_public_libraries',\n            'invitationsHost': 'invitations.adobe.io',\n            'personalizationHost': 'p13n.adobe.io',\n            'experienceCloudHost': 'https://experience.adobe.com'\n        }\n    }\n};\n","/**************************************************************************************************\n*\n* ADOBE SYSTEMS INCORPORATED\n* Copyright 2013 Adobe Systems Incorporated\n* All Rights Reserved.\n*\n* NOTICE:  Adobe permits you to use, modify, and distribute this file in accordance with the\n* terms of the Adobe license agreement accompanying it.  If you have received this file from a\n* source other than Adobe, then your use, modification, or distribution of it requires the prior\n* written permission of Adobe.\n*\n**************************************************************************************************/\n\n/* eslint no-var: off */\n\n/** IMSInterface - v7.0.0 */\n\n/**\n * @class AAMStatus\n * Stores status information for the Adobe Application Manager.\n * All values must use UTF-8 encoded chars.\n *\n * @param status   The authorization status.\n * @param callerId The caller ID, a unique ID for your application created by PlugPlug. The ID identifies the service that made the original request.\n * @param payload  For future use.\n *\n * @returns An \\c AAMStatus object.\n **/\nfunction AAMStatus(status, callerId, payload)\n{\n    this.status = status;\n    this.callerId = callerId;\n    this.payload = payload;\n}\n\n/**\n * @class IMSInterface\n * This is the entry point to the Adobe Identity Management Service (IMS) toolkit library.\n * Instantiate this class, and use the object to:\n * <ul>\n * <li>Retrieve a subscription access token for a particular service.</li>\n * <li>Retrieve a list of users who are registered on this device.</li>\n * <li>Invoke Adobe Application Manager (AAM) to interact with user if needed.</li>\n * </ul>\n * Most requests include a session reference, which is returned from a connection request,\n * and an IMS client ID, which uniquely identifies your service and service context. When\n * developing a CS Extension, you must register with the IMS team to receive your client ID.\n *\n * @returns The \\c IMSInterface object for an IMS session.\n */\nexport function IMSInterface()\n{\n}\n\n/**\n * Registers a  handler for a CS event. The handler is a callback function that is\n * passed a single parameter, the \\c #CSEvent object containing detailed information\n * about the event.\n *\n * You must register callback functions to handle the results of asynchronous calls\n * to the \\c IMSInterface methods.\n *\n * @param type      The event-type  constant.\n * @param listener  The JavaScript handler function for the event.\n */\nIMSInterface.prototype.addEventListener = function(type, listener)\n{\n    window.__adobe_cep__.addEventListener(type, listener);\n};\n\n/**\n * Removes the handler associated with a CS event.\n *\n * @param type      The event-type  constant.\n * @param listener  The JavaScript handler function that was registered for the event.\n */\nIMSInterface.prototype.removeEventListener = function(type, listener)\n{\n    window.__adobe_cep__.removeEventListener(type, listener);\n};\n\n/**\n * Establishes an IMS session. Must be called before any IMS access methods.\n * This method is not thread safe.\n *\n * @returns An IMS reference string, as returned from IMSLib, which you\n *  can then use to make further IMS calls to this object's methods.\n *\n * @deprecated Please use imsConnectWithEndpoint instead.\n */\nIMSInterface.prototype.imsConnect = function()\n{\n    var imsRef = window.__adobe_cep__.imsConnect();\n    return imsRef;\n};\n\n/**\n * Disconnects the extension from IMS and disposes of the IMS reference.\n *\n * @param imsRef     An IMS reference returned from the \\c IMSConnect() call.\n */\nIMSInterface.prototype.imsDisconnect = function(imsRef)\n{\n    window.__adobe_cep__.imsDisconnect(imsRef);\n};\n\n/**\n * Retrieves user account information from IMS/Renga.\n *\n * @param imsRef    An IMS reference returned from the \\c IMSConnect() call.\n * @param clientID  The IMS client ID for your extension, assigned by the IMS team on registration.\n *\n * @returns Account information in XML string format. This is an example of the returned XML string:\\n\n * <listing>\\n\n *   &lt;UserAccounts&gt;\\n\n *     &lt;UserData default=\"true\"&gt;\\n\n *       &lt;UserID&gt;12345&#64;AdobeID&lt;/UserID&gt;\\n\n *       &lt;Name&gt;Joe Bloggs&lt;/Name&gt;\\n\n *       &lt;FirstName&gt;Joe&lt;/FirstName&gt;\\n\n *       &lt;LastName&gt;Bloggs&lt;/LastName&gt;\\n\n *       &lt;Email&gt;Joe_Bloggs&#64;testemail.com&lt;/Email&gt;\\n\n *       &lt;SAOList&gt;\\n\n *         &lt;SAOData id=\"123456789\"&gt;\\n\n *           &lt;ServiceCode&gt;my_service&lt;/ServiceCode&gt;\\n\n *           &lt;ServiceStatus&gt;ACTIVE&lt;/ServiceStatus&gt;\\n\n *           &lt;ServiceLevel&gt;CS_LVL_1&lt;/ServiceLevel&gt;\\n\n *         &lt;/SAOData&gt;\\n\n *       &lt;/SAOList&gt;\\n\n *     &lt;/UserData&gt;\\n\n *   &lt;/UserAccounts&gt;\\n\n * </listing>\\n\n */\nIMSInterface.prototype.imsFetchAccounts = function(imsRef, clientId)\n{\n    var accounts = window.__adobe_cep__.imsFetchAccounts(imsRef, clientId);\n    return accounts;\n};\n\n/**\n * Requests an access token from IMS for a given user and service.\n *\n * This function is asynchronous. To handle the result, register a callback for the event\n * IMSInterface.events.imsFetchAccessTokenWithStatus or IMSInterface.events.imsFetchAccessToken.\n * For event IMSInterface.events.imsFetchAccessToken, the event data is a JSON string\n * with format {\"toua\":\"...\",...,\"emailVerified\":\"false\"}.\n * For event IMSInterface.events.imsFetchAccessTokenWithStatus, the event data is a JSON string\n * with format {\"status\":\"0\",\"details\":{\"toua\":\"...\",...,\"emailVerified\":\"false\"}}.\n *\n * @see addEventListener()\n *\n * @param imsRef         An IMS reference returned from the \\c IMSConnect() call.\n * @param clientID       The IMS client ID for your extension, assigned by the IMS team on registration.\n *               This is the service-code value in the Renga Service Account Object for your client.\n * @param clientSecret       The client secret associated with the provided client ID\n * @param userAccountGuid    The unique person GUID for the Renga account, as returned by\n                the <code>fetchAccounts()</code> method. The token is generated for this user.\n * @param serviceAccountGuid (optional, not currently used) A unique identifier for a Service Account Object (SAO).\n * @param scope          (optional) A comma delimited list of services for which the refresh and access tokens are requested.\n                By default, this is 'openid,AdobeID'. Scope strings are case sensitive.\n                If the cached version of the refresh token does not match the\n                requested service scopes, a new refresh token is fetched.\n                To request your service's own SAO, add your service to the list;\n                for example,  'openid,AdobeID,browserlab'.\n *\n * @returns A boolean status. Returning true means only the call to imsFetchAccessToken function itself is successful.\n *                          Returning false means that failed to fetch access token.\n */\nIMSInterface.prototype.imsFetchAccessToken = function(imsRef, clientId, clientSecret, userAccountGuid, serviceAccountGuid, scope)\n{\n    return window.__adobe_cep__.imsFetchAccessToken(imsRef, clientId, clientSecret, userAccountGuid, serviceAccountGuid, scope);\n};\n\n/**\n * Requests that IMS revoke a user's device token.\n * On success, this removes the user account from the current device.\n * The device token allows access to all services managed by the Adobe Application Manager (AAM),\n * so its removal affects all IMS-related services running on the device.\n *\n * This function is asynchronous. To handle the result, register a callback for the event\n * IMSInterface.events.imsFetchAccessTokenWithStatus or IMSInterface.events.imsFetchAccessToken\n * @see addEventListener()\n *\n * @param imsRef        An IMS reference returned from the \\c IMSConnect() call.\n * @param clientID      The IMS client ID for your extension, assigned by the IMS team on registration.\n *              This is the service-code value in the Renga Service Account Object for your client.\n * @param clientSecret      The client secret associated with the provided client ID\n * @param userAccountGuid   The unique person GUID for the Renga account, as returned by\n                the <code>fetchAccounts()</code> method. The token is generated for this user.\n * @param serviceAccountGuid (optional, not currently used) A unique identifier for a Service Account Object (SAO).\n *\n * @returns A boolean status. Returning true means only the call to imsRevokeDeviceToken function itself is successful.\n *                           Returning false means that failed to revoke device token.\n */\nIMSInterface.prototype.imsRevokeDeviceToken = function(imsRef, clientId, clientSecret, userAccountGuid, serviceAccountGuid)\n{\n    return window.__adobe_cep__.imsFetchAccessToken(imsRef, clientId, clientSecret, userAccountGuid, serviceAccountGuid, \"REVOKE\");\n};\n\n/**\n * Persists proxy credentials for an Adobe ID in the local store.\n *\n * @param proxyUsername The username for the Adobe ID credential. Must not be an empty string.\n * @param proxyPassword The password for the Adobe ID credential. Must not be an empty string.\n */\nIMSInterface.prototype.imsSetProxyCredentials = function(proxyUsername, proxyPassword)\n{\n    window.__adobe_cep__.imsSetProxyCredentials(proxyUsername, proxyPassword);\n};\n\n/**\n * Launches the Adobe Application Manager (AAM) AIR application.\n * If an error occurs when fetching an access token, this allows the user to\n * log in with their Adobe ID credentials, or accept new terms of use.\n *\n * This function is asynchronous. To handle the result, register a callback for the event IMSInterface.events.imsAAMIMSStatus.\n * The returned event contains an \\c #AAMStatus object.\n * @see addEventListener()\n *\n * @param clientID       The IMS client ID for your extension, assigned by the IMS team.\n *               Matches the <code>serviceCode</code> value in the Service Account Object (SAO).\n * @param clientSecret       The client secret associated with the provided client ID.\n * @param redirectUri        The redirect URI registered with IMS\n * @param userAccountGuid    The unique person GUID for the Renga account, as returned in the response\n                to the <code>fetchAccounts()</code> method.\n * @param serviceAccountGuid (optional, not currently used) A unique identifier for a Service Account Object (SAO).\n * @param scope          (optional) A comma delimited list of services for which the refresh token was requested.\n *\n * @returns A boolean status. Returning true means only the call to showAAM function itself is successful.\n *                          Returning false means that failed to show AAM.\n */\nIMSInterface.prototype.showAAM = function(clientId, clientSecret, redirectUri, userAccountGuid, serviceAccountGuid, scope)\n{\n    return window.__adobe_cep__.showAAM(clientId, clientSecret, redirectUri, userAccountGuid, serviceAccountGuid, scope);\n};\n\n/**\n * Retrieves the IMS user id that is currently logged in.\n *\n * Since 4.1.0\n *\n * @returns The IMS user id for the currently logged in user.\n */\nIMSInterface.prototype.imsGetCurrentUserId = function()\n{\n    var userId = window.__adobe_cep__.getCurrentImsUserId();\n    return userId;\n};\n\n/**\n * Retrieves the IMS user id that is currently logged in. This function\n * also takes care of the workarounds specified for some of the products:\n * https://wiki.corp.adobe.com/display/csxs/CEP+5.0+HTML+Extension+Cookbook#CEP5.0HTMLExtensionCookbook-GetthecurrentIMSUserID\n *\n * @param callback This function is asynchronous so provide a callback to handle the result.\n *\n * Since 5.2.0\n *\n * @returns The IMS user id for the currently logged in user.\n */\nIMSInterface.prototype.imsGetCurrentUserIdHelper = function(callback)\n{\n    // different workflows for Ps, Ai and ID.\n    var hostEnvironment = JSON.parse(window.__adobe_cep__.getHostEnvironment());\n    var appName = hostEnvironment.appName;\n    if (appName === \"ILST\") {\n        window.__adobe_cep__.evalScript('app.userGUID', function(result){\n            callback(result);\n        });\n    } else if (appName === \"IDSN\") {\n        window.__adobe_cep__.evalScript('app.userGuid', function(result){\n            callback(result);\n        });\n    } else if (appName === \"PHSP\" || appName === \"PHXS\") {\n        window.__adobe_cep__.evalScript(\"var getUserIdPhotoshop = function() {var userId = '';try {var bhnc = app.charIDToTypeID('bhnc');var ref = new ActionReference();ref.putProperty(app.charIDToTypeID('Prpr'), bhnc);ref.putEnumerated(app.charIDToTypeID('capp'), app.charIDToTypeID('Ordn'), app.charIDToTypeID('Trgt'));var appDesc = app.executeActionGet(ref);if (appDesc.hasKey(bhnc)) {userId = appDesc.getString(bhnc);}} catch (e) {}return userId;};\", function(result){\n            window.__adobe_cep__.evalScript('getUserIdPhotoshop()', function(result2) {\n                callback(result2);\n            });\n        });\n    } else {\n        var userId = window.__adobe_cep__.getCurrentImsUserId();\n        callback(userId);\n    }\n};\n\n/**\n * Establishes an IMS session. Must be called before any IMS access methods.\n *\n * Since 5.2.0\n *\n * @param imsEndpoint The IMS URL which needs to be passed in the format like \"ims-na1.adobelogin.com\".\n * If imsEndpoint is set to undefined, null or empty string, IMSLib will use production endpoint of IMS.\n *\n * @returns An IMS reference string, as returned from IMSLib, which you\n *  can then use to make further IMS calls to this object's methods.\n */\nIMSInterface.prototype.imsConnectWithEndpoint = function(imsEndpoint)\n{\n    var params = {};\n    params.imsEndpoint = (imsEndpoint === undefined || imsEndpoint === null || imsEndpoint === \"\") ? \"undefined\" : imsEndpoint;\n    const imsRes = window.__adobe_cep__.invokeSync(\"imsConnectWithEndpoint\", JSON.stringify(params));\n    return imsRes && JSON.parse(imsRes).result;\n};\n\n/**\n * Requests the continue token for a particular client ID with the provided access token.\n * If the redirectUri parameter is provided then a JumpURL will be created by appending the token to the URL.\n * This enables the support of SSO workflows from desktop to web.\n *\n * This function is asynchronous. To handle the result, register a callback for the event IMSInterface.events.imsFetchContinueToken\n * @see addEventListener()\n *\n * Since 5.2.0\n *\n * @param imsRef         An IMS reference returned from the \\c IMSConnect() call.\n * @param bearerToken       The access token issued by IMS.\n * @param targetClientId    The client ID needed for the destination.\n * @param redirectUri  (optional) The URL to jump to. It should be URL encoded.\n * @param scope        (optional) A comma delimited list of services for which the refresh token was requested.\n * @param responseType (optional) The IMS integration type the target has.\n * @param locale       (optional) The locale in the format language_country.\n *\n * @returns A boolean status. Returning true means only the call to imsFetchContinueToken function itself is successful.\n *                          Returning false means that failed to fetch continue token.\n */\nIMSInterface.prototype.imsFetchContinueToken = function(imsRef, bearerToken, targetClientId, redirectUri, scope, responseType, locale)\n{\n    if ((redirectUri === undefined) || (redirectUri === null))\n    {\n        redirectUri = \"\";\n    }\n    if ((scope === undefined) || (scope === null))\n    {\n        scope = \"\";\n    }\n    if ((responseType === undefined) || (responseType === null))\n    {\n        responseType = \"\";\n    }\n    if ((locale === undefined) || (locale === null))\n    {\n        locale = \"\";\n    }\n\n    var params = {};\n    params.imsRef = imsRef;\n    params.bearerToken = bearerToken;\n    params.targetClientId = targetClientId;\n    params.redirectUri = redirectUri;\n    params.scope = scope;\n    params.responseType = responseType;\n    params.locale = locale;\n    return JSON.parse(window.__adobe_cep__.invokeSync(\"imsFetchContinueToken\", JSON.stringify(params))).result;\n};\n\n/**\n * This API will remove a particular user as default for a client_id. In case the user has logged in only for a specific client,\n * this API will revoke user's deviceToken at server end.\n *\n * This function is asynchronous. To handle the result, register a callback for the event IMSInterface.events.imsLogoutUser.\n * @see addEventListener()\n *\n * Since 6.0.0\n *\n * @param imsRef              An IMS reference returned from the \\c IMSConnect() call.\n * @param userAccountGuid     The unique person GUID for the Renga account, as returned in the response\n                              to the <code>fetchAccounts()</code> or <code>GetCurrentUserId</code> methods.\n * @param clientId            The IMS client ID for your extension, assigned by the IMS team.\n *                            Matches the <code>serviceCode</code> value in the Service Account Object (SAO).\n *\n * @returns An IMS reference string, as returned from IMSLib, which you\n *  can then use to make further IMS calls to this object's methods.\n */\nIMSInterface.prototype.imsLogoutUser = function(imsRef, userAccountGuid, clientId)\n{\n    var params = {};\n    params.imsRef = imsRef;\n    params.userAccountGuid = userAccountGuid;\n    params.clientId = clientId;\n    return JSON.parse(window.__adobe_cep__.invokeSync(\"imsLogoutUser\", JSON.stringify(params))).result;\n};\n\n/**\n * Fetches the user profile data for a given person guid.\n *\n * @param imsRef             An IMS reference returned from the \\c IMSConnect() call.\n * @param userAccountGuid    The unique person GUID for the Renga account, as returned in the response\n *                           to the <code>fetchAccounts()</code> or <code>GetCurrentUserId</code> methods.\n * @returns User Profile Data in XML string format.\n */\nIMSInterface.prototype.imsFetchUserProfileData = function(imsRef, userAccountGuid)\n{\n    var params = {};\n    params.imsRef = imsRef;\n    params.userAccountGuid = userAccountGuid;\n    return window.__adobe_cep__.invokeSync(\"imsFetchUserProfileData\", JSON.stringify(params));\n};\n\n/**\n * A helper function to simplify supporting Single-Sign-On (SSO) workflows in services. There are three different levels of customization:\n * <ul>\n *  <li>The most basic is to pass true for openBrowser and include a valid URL. CEP will open the URL in the default browser using the existing API cep.util.openURLInDefaultBrowser(). This does not attempt any SSO workflows.</li>\n *  <li>By supplying valid entries for all the other parameters but passing false for openBrowser, CEP will complete the SSO workflows but will return the generated URL to the client so that they can complete the last step. The data returned to the client will be the same as the response currently returned in API IMSInterface.imsFetchContinueToken.</li>\n *  <li>The most comprehensive workflow is to include all parameters and pass true to OpenBrowser. CEP will complete the SSO workflows and open the generated URL in the default browser so that the user is automatically signed into the web service.</li>\n * </ul>\n *\n * This function is asynchronous so to handle the result you will need to register a callback for the event IMSInterface.events.imsSSOStatus\n * The event data is a JSON string with format {\"status\":\"0\",\"details\":{}} where the details could contain the results of:\n * <ul>\n *   <li>FetchAccessToken request if attempting this step in the process fails.</li>\n *   <li>FetchContinueToken request if this step failed or you passed false to openBrowser</li>\n *   <li>A status of IMSInterface.status.IMSMANAGER_SUCCESS_BROWSER_OPENED if you passed true for openBrowser</li>\n * </ul>\n *\n * @since 6.1.0\n * @see addEventListener()\n *\n * @param openBrowser        Boolean value to determine if the SSO token should be opened in the browser. Default is false.\n * @param url                The URL to jump to. It should be URL encoded.\n * @param imsRef             (optional) An IMS reference returned from the \\c IMSConnect() call.\n * @param clientID           (optional) The IMS client ID for your extension, assigned by the IMS team on registration.\n * @param clientSecret       (optional) The client secret associated with the provided client ID\n * @param scope              (optional) A comma delimited list of services for which the refresh and access tokens are requested, for example 'openid,AdobeID,browserlab'.\n * @param userAccountGuid    (optional) The unique person GUID for the Renga account, as returned by\n *                           the <code>fetchAccounts()</code>, <code>imsGetCurrentUserId</code> or <code>imsGetCurrentUserIdHelper</code> methods. If you do not pass a userAccountGuid but\n *                           openBrowser is true, the Jump URL will be opened without attempting SSO workflows.\n * @param targetClientId     (optional) The client ID needed for the destination.\n * @param targetScope        (optional) A comma delimited list of services for which the refresh token should be authorized to use to ensure the user can successful sign-in to the service.\n * @param targetResponseType (optional) The IMS integration type the target has.\n * @param targetLocale       (optional) The locale in the format language_country, for example \"en_US\".\n *\n * @returns A boolean status. Returning false means that we failed to trigger the SSO workflows. This could be caused by invalid parameters.\n */\nIMSInterface.prototype.imsAttemptSSOJumpWorkflows = function(openBrowser, url, imsRef, clientID, clientSecret, scope, userAccountGuid, targetClientId, targetScope, targetResponseType, targetLocale)\n{\n\n    if (!openBrowser) {\n        openBrowser = false;\n    }\n    if ((clientID === undefined) || (clientID === null)) {\n        clientID = \"\";\n    }\n    if ((clientSecret === undefined) || (clientSecret === null)) {\n        clientSecret = \"\";\n    }\n    if ((scope === undefined) || (scope === null)) {\n        scope = \"\";\n    }\n    if ((targetClientId === undefined) || (targetClientId === null)) {\n        targetClientId = \"\";\n    }\n    if ((targetScope === undefined) || (targetScope === null)) {\n        targetScope = \"\";\n    }\n    if ((targetResponseType === undefined) || (targetResponseType === null)) {\n        targetResponseType = \"\";\n    }\n    if ((imsRef === undefined) || (imsRef === null)) {\n        imsRef = \"\";\n    }\n    if ((userAccountGuid === undefined) || (userAccountGuid === null)) {\n        userAccountGuid = \"\";\n    }\n\n    var params = {};\n    params.imsRef = imsRef;\n    params.openBrowser = openBrowser;\n    params.url = url;\n    params.clientId = clientID;\n    params.clientSecret = clientSecret;\n    params.scope = scope;\n    params.userAccountGuid = userAccountGuid;\n    params.targetClientId = targetClientId;\n    params.targetScope = targetScope;\n    params.targetResponseType = targetResponseType;\n    params.targetLocale = targetLocale;\n\n    return JSON.parse(window.__adobe_cep__.invokeSync(\"imsAttemptSSOJumpWorkflows\", JSON.stringify(params))).result;\n};\n\nIMSInterface.events = {\n    imsFetchAccessTokenWithStatus      : \"com.adobe.csxs.events.internal.ims.FetchAccessTokenWithStatus\",\n    imsFetchAccessToken                : \"com.adobe.csxs.events.internal.ims.FetchAccessToken\",\n    imsRevokeAccessToken               : \"com.adobe.csxs.events.internal.ims.FetchAccessTokenWithStatus\",\n    imsFetchContinueToken              : \"com.adobe.csxs.events.internal.ims.FetchAccessTokenWithStatus\",\n    imsAAMIMSStatus                    : \"vulcan.SuiteMessage.com.adobe.aam.AAMIMSStatus\",\n    imsLogoutUser                      : \"com.adobe.csxs.events.internal.ims.LogoutUser\",\n    imsSSOStatus                       : \"com.adobe.csxs.events.internal.ims.SSOStatus\"\n};\n\nIMSInterface.status = {\n    IMS_SUCCESS                                     : \"0\", /**< General Success status.*/\n    IMS_ERROR_FAILURE                               : \"1\",/**< General failure status.*/\n    IMS_ERROR_INVALID_ARGUMENTS                     : \"2\", /**< Error returned if invalid arguments are passed to an API.*/\n    IMS_ERROR_CANCEL                                : \"20\", /**< Error returned if the Http request is cancelled.*/\n    IMS_ERROR_TIMEOUT                               : \"21\",/**< Error returned if the Http request is timed out.*/\n    IMS_ERROR_HTTPFAILURE                           : \"22\", /**< Error returned if http request fails.*/\n    IMS_ERROR_SSLFAILURE                            : \"23\",/**< Error returned if http request fails, due to SSL certifiaction error.*/\n    IMS_ERROR_AUTH_PROXY_REQUIRED                   : \"24\", /**< Error returned if http request is being made behind proxy.*/\n    IMS_ERROR_AUTH_PROXY_FAILED                     : \"25\", /**< Error returned if http request failed due to wrong proxy credentials.*/\n    IMS_ERROR_IN_ACCESS_IDP                         : \"26\", /**< Error returned if IMSLib fails in accessing IDP server. Probably server is down.*/\n    IMS_ERROR_ANOTHER_REQUEST_IN_PROCESS            : \"40\", /**< Error returned if async call to IMSLib is made when one async http request is already in progress.*/\n    IMS_ERROR_IN_READ_USER_DATA                     : \"60\", /**< Error returned if IMSLib fails in reading user specific data from the user machine.*/\n    IMS_ERROR_IN_SAVE_USER_DATA                     : \"61\", /**< Error returned if IMSLib fails in saving user specific data on the user machine.*/\n    IMS_ERROR_IN_REMOVE_USER_DATA                   : \"62\", /**< Error returned if IMSLib fails in removing user specific data from the user machine.*/\n    IMS_ERROR_USER_DATA_NOT_PRESENT                 : \"63\", /**< Error returned if IMSLib detects that user data is not present on the user machine.*/\n    IMS_ERROR_IN_READ_DEVICE_TOKEN                  : \"64\", /**< Error returned if IMSLib fails in reading device token from the user machine.*/\n    IMS_ERROR_IN_SAVE_DEVICE_TOKEN                  : \"65\", /**< Error returned if IMSLib fails in saving device token on the user machine.*/\n    IMS_ERROR_IN_REMOVE_DEVICE_TOKEN                : \"66\", /**< Error returned if IMSLib fails in removing device token from the user machine.*/\n    IMS_ERROR_DEVICE_TOKEN_NOT_PRESENT              : \"67\", /**< Error returned if device token is not present on the user machine.*/\n    IMS_ERROR_INVALID_DEVICE_TOKEN                  : \"68\", /**< Error returned if invalid device token is present on the user machine.*/\n    IMS_ERROR_CLIENTID_NOT_PRESENT                  : \"69\", /**< Error returned, if client id information is missing on the user machine.*/\n    IMS_ERROR_IN_FETCH_USER_ACCOUNTS                : \"70\", /**< Error returned, if IMSLib fails in fetching user accounts details from the user machine.*/\n    IMS_ERROR_IN_SAVE_USER_FOR_CLIENTID             : \"71\", /**< Error returned, if IMSLib fails in saving user id for a particular client id.*/\n    IMS_ERROR_DEVICE_ID_NOT_PRESENT                 : \"72\", /**< Error returned if device id is not present on the user machine.*/\n    IMS_ERROR_DEFAULT_USER_FOR_CLIENTID_NOT_PRESENT : \"73\", /**< Error returned if there is no default user for client_id*/\n    IMS_ERROR_NO_USER_RECORDS_PRESENT               : \"74\", /**< Error returned if there is no user records are present in opm.db*/\n    IMS_ERROR_ACCESS_DENIED                         : \"80\", /**< Error returned if IMS server returns error code 'access_denied' while generating token.*/\n    IMS_ERROR_INVALID_REQUEST                       : \"81\", /**< Error returned if IMS server returns error code 'invalid_request' while generating token.*/\n    IMS_ERROR_INVALID_CLIENT                        : \"82\", /**< Error returned if IMS server returns error code 'invalid_client' while generating token.*/\n    IMS_ERROR_INVALID_GRANT                         : \"83\", /**< Error returned if IMS server returns error code 'invalid_grant' while generating token.*/\n    IMS_ERROR_UNAUTHORIZED_CLIENT                   : \"84\", /**< Error returned if IMS server returns error code 'unauthorized_client' while generating token.*/\n    IMS_ERROR_UNSUPPORTED_RESPONSE_TYPE             : \"85\", /**< Error returned if IMS server returns error code 'unsupported_response_type' while generating token.*/\n    IMS_ERROR_INVALID_SCOPE                         : \"86\", /**< Error returned if IMS server returns error code 'invalid_scope' while generating token.*/\n    IMS_ERROR_UNSUPPORTED_GRANT_TYPE                : \"87\", /**< Error returned if IMS server returns error code 'unsupported_grant_type' while generating token.*/\n    IMS_ERROR_BAD_REQUEST                           : \"88\", /**< Error returned if IMS server returns error code 'bad_request' while generating token.*/\n    IMS_ERROR_INVALID_CREDENTIALS                   : \"89\", /**< Error returned if IMS server returns error code 'invalid_credentials' while generating token.*/\n    IMS_ERROR_IN_GET_AUTH_DATA_FROM_IDP             : \"100\", /**< Error returned if IMSLib fails fetching authentication data from server.*/\n    IMS_ERROR_IN_GET_DEVICE_TOKEN_FROM_IDP          : \"101\", /**< Error returned if IMSLib fails fetching device token from server.*/\n    IMS_ERROR_IN_GET_REFRESH_TOKEN_FROM_IDP         : \"102\", /**< Error returned if IMSLib fails fetching device token from server.*/\n    IMS_ERROR_IN_GET_ACCESS_TOKEN_FROM_IDP          : \"103\", /**< Error returned if IMSLib fails fetching device token from server.*/\n    IMS_ERROR_IN_GET_PROFILE_DATA_FROM_IDP          : \"104\", /**< Error returned if IMSLib fails fetching device token from server.*/\n    IMS_ERROR_TOU_CHANGED                           : \"120\", /**< Error returned if TOU has changed. */\n    IMS_ERROR_IN_REVOKE_DEVICE_TOKEN                : \"121\", /**< Error returned if IMSLib fails in revoking device token. */\n    IMS_ERROR_TOU_NOT_CURRENT                       : \"122\", /**< Terms of use acceptance is not current. */\n    IMS_ERROR_EVS_INVALID                           : \"123\", /**< Email Verification Status does not meet required policy. */\n    IMS_ERROR_ACCT_ACT_REQ                          : \"124\", /**< Some issue with the user account requires attention/action. i.e. COPPA or some other issue requiring user action, related to the user account rather than a subscription. */\n    IMS_ERROR_ACCT_DISABLED                         : \"125\", /**< Account is currently disabled. */\n    IMS_ERROR_SUBS_ACT_REQ                          : \"126\", /**< Some issue with the subscription requires attention/action. i.e. payment error etc. */\n    IMS_ERROR_SUBS_NO_SUB                           : \"127\", /**< No current subscription exists for the user. i.e. closed/removed. */\n    IMS_ERROR_NO_BUDDY_GROUP_FOR_CLIENT             : \"150\", /**< No buddy_group exists for the client queried. */\n    IMS_ERROR_CLIENT_REGISTERED_FOR_OTHER_GROUP     : \"151\", /**< Client is already registered for some group other than requested. */\n    IMS_ERROR_GROUP_ENTRY_NOT_PRESENT               : \"152\", /**< No entry exixts for the group queried. */\n    IMS_ERROR_IN_SAVE_GROUP_DATA                    : \"153\", /**< Error Occured while saving the buddy-group data */\n    IMS_ERROR_CNAME_ENTRY_NOT_PRESENT               : \"154\", /**< CName entry not present */\n    IMS_ERROR_IN_SAVE_BACKOFF_DATA                  : \"155\", /**< Error Occured while saving the backoff data for the cname */\n    /**< For HTTP errors 401 to 600, IMSLib returns them as it is, they are not wrapped by any IMSLib errors */\n    /**< CEP Errors */\n    IMSMANAGER_ERROR_EXCEPTION                      : \"3000\", /**< Error returned when an exception is thrown during processing in the event callback */\n    IMSMANAGER_ERROR_ENCODING                       : \"3001\", /**< Error returned if the inDetails information failed to be encoded into a Base64 string */\n    IMSMANAGER_SUCCESS_BROWSER_OPENED               : \"3002\", /**< Status returned if CEP successfully opens the default browser with the SSO URL as part of the AttemptSSOJumpWorkflows API */\n    IMSMANAGER_ERROR_BROWSER_FAILED_TO_OPEN         : \"3003\", /**< Status returned if CEP fails to open the SSO URL in the default browser */\n\n    IMS_UNKNOWN_ERROR                               : \"0xFFFF\"\n};\n\n// @deprecated Use IMSInterface.events directly.\nIMSInterface.prototype.events = IMSInterface.events;\n","/**************************************************************************************************\n*\n* ADOBE SYSTEMS INCORPORATED\n* Copyright 2013 Adobe Systems Incorporated\n* All Rights Reserved.\n*\n* NOTICE:  Adobe permits you to use, modify, and distribute this file in accordance with the\n* terms of the Adobe license agreement accompanying it.  If you have received this file from a\n* source other than Adobe, then your use, modification, or distribution of it requires the prior\n* written permission of Adobe.\n*\n**************************************************************************************************/\n\n/** NGLInterface - v10.2.0 */\n\n/**\n * @class AAMStatus\n * Stores status information for the Adobe Application Manager.\n * All values must use UTF-8 encoded chars.\n *\n * @param status   The authorization status.\n * @param callerId The caller ID, a unique ID for your application created by PlugPlug. The ID identifies the service that made the original request.\n * @param payload  For future use.\n *\n * @return An \\c AAMStatus object.\n **/\nfunction AAMStatus(status, callerId, payload)\n{\n    this.status = status;\n    this.callerId = callerId;\n    this.payload = payload;\n}\n\n/**\n * @class NGLInterface\n * This is the entry point to the Adobe Identity Management Service (IMS) toolkit library.\n * Instantiate this class, and use the object to:\n * <ul>\n * <li>Retrieve a subscription access token for a particular service.</li>\n * <li>Retrieve a list of users who are registered on this device.</li>\n * <li>Invoke Adobe Application Manager (AAM) to interact with user if needed.</li>\n * </ul>\n * Most requests include a session reference, which is returned from a connection request,\n * and an NGL client ID, which uniquely identifies your service and service context. When\n * developing a CS Extension, you must register with the NGL team to receive your client ID.\n *\n * @return The \\c NGLInterface object for an IMS session.\n */\nexport function NGLInterface()\n{\n}\n\n/**\n * Registers a  handler for a CS event. The handler is a callback function that is\n * passed a single parameter, the \\c #CSEvent object containing detailed information\n * about the event.\n *\n * You must register callback functions to handle the results of asynchronous calls\n * to the \\c NGLInterface methods.\n *\n * @param type      The event-type  constant.\n * @param listener  The JavaScript handler function for the event.\n */\nNGLInterface.prototype.addEventListener = function(type, listener)\n{\n    window.__adobe_cep__.addEventListener(type, listener);\n};\n\n/**\n * Removes the handler associated with a CS event.\n *\n * @param type      The event-type  constant.\n * @param listener  The JavaScript handler function that was registered for the event.\n */\nNGLInterface.prototype.removeEventListener = function(type, listener)\n{\n    window.__adobe_cep__.removeEventListener(type, listener);\n};\n\n\n/**\n * Requests an access token from IMS for a given user and service.\n *\n * This function is asynchronous. To handle the result, register a callback for the event\n * NGLInterface.events.imsFetchAccessTokenWithStatus\n * For event NGLInterface.events.imsFetchAccessTokenWithStatus, the event data is a JSON string\n * with format {\"status\":\"0\",\"details\":{\"toua\":\"...\",...,\"emailVerified\":\"false\"}}.\n *\n * @see addEventListener()\n * @param clientID       The IMS client ID for your extension, assigned by the IMS team on registration.\n *                       This is the service-code value in the Renga Service Account Object for your client.\n * @param clientSecret   The client secret associated with the provided client ID\n * @param scope          (optional) A comma delimited list of services for which the refresh and access tokens are requested.\n                         By default, this is 'openid,AdobeID'. Scope strings are case sensitive.\n                         If the cached version of the refresh token does not match the\n                         requested service scopes, a new refresh token is fetched.\n                         To request your service's own SAO, add your service to the list;\n                         for example,  'openid,AdobeID,browserlab'.\n *\n * @return               A boolean status. Returning true means only the call to imsFetchAccessToken function itself is successful.\n *\t\t\t\t\t\t Returning false means that failed to fetch access token.\n */\nNGLInterface.prototype.imsFetchAccessToken = function(clientId, clientSecret, scope)\n{\n    return window.__adobe_cep__.nglImsFetchAccessToken(clientId, clientSecret, scope);\n};\n\n/**\n * Requests the IMSProfile from NGL for a given access token.\n *\n * This function is asynchronous. To handle the result, register a callback for the event\n * NGLInterface.events.imsFetchProfile\n *\n * @see addEventListener() \n * @param accessToken    The access token issued by IMS.\n * @return               A boolean status. Returning true means only the call to imsFetchProfile function itself is successful.\n *\t\t\t\t\t\t Returning false means that failed to fetch access token.\n */\nNGLInterface.prototype.imsFetchProfile = function(accessToken)\n{\n    return window.__adobe_cep__.nglImsFetchProfile(accessToken);\n};\n\n/**\n * Requests the continue token for a particular client ID with the provided access token.\n * If the redirectUri parameter is provided then a JumpURL will be created by appending the token to the URL.\n * This enables the support of SSO workflows from desktop to web.\n *\n * This function is asynchronous. To handle the result, register a callback for the event NGLInterface.events.imsFetchContinueToken\n * @see addEventListener()\n *\n * Since 10.2.0\n *\n * @param bearerToken       The access token issued by IMS.\n * @param targetClientId    The client ID needed for the destination.\n * @param redirectUri  (optional) The URL to jump to. It should be URL encoded.\n * @param scope        (optional) A comma delimited list of services for which the refresh token was requested.\n * @param responseType (optional) The IMS integration type the target has.\n * \n * @return A boolean status. Returning true means only the call to imsFetchContinueToken function itself is successful.\n *\t\t\t\t\t\t\tReturning false means that failed to fetch continue token.\n */\nNGLInterface.prototype.imsFetchContinueToken = function(bearerToken, targetClientId, redirectUri, scope, responseType)\n{\n    if ((redirectUri === undefined) || (redirectUri === null))\n    {\n        redirectUri = \"\";\n    }\n    if ((scope === undefined) || (scope === null))\n    {\n        scope = \"\";\n    }\n    if ((responseType === undefined) || (responseType === null))\n    {\n        responseType = \"\";\n    }\n    \n\n    var params = {};\n    params.bearerToken = bearerToken;\n    params.targetClientId = targetClientId;\n    params.redirectUri = redirectUri;\n    params.scope = scope;\n    params.responseType = responseType;\n    return JSON.parse(window.__adobe_cep__.invokeSync(\"nglImsFetchContinueToken\", JSON.stringify(params))).result;\n};\n\n/**\n * Retrieves the IMS user id that is currently logged in.\n *\n * Since 10.2.0\n *\n * @return The IMS user id for the currently logged in user.\n */\nNGLInterface.prototype.imsGetCurrentUserId = function()\n{\n    var userId = window.__adobe_cep__.getCurrentImsUserId();\n    return userId;\n};\n\n/**\n * Retrieves the IMS user id that is currently logged in. This function\n * also takes care of the workarounds specified for some of the products:\n * https://wiki.corp.adobe.com/display/csxs/CEP+5.0+HTML+Extension+Cookbook#CEP5.0HTMLExtensionCookbook-GetthecurrentIMSUserID\n * \n * @param callback This function is asynchronous so provide a callback to handle the result.\n * \n * Since 10.2.0\n *\n * @return The IMS user id for the currently logged in user.\n */\nNGLInterface.prototype.imsGetCurrentUserIdHelper = function(callback)\n{\n    // different workflows for Ps, Ai and ID.\n    var hostEnvironment = JSON.parse(window.__adobe_cep__.getHostEnvironment());\n    var appName = hostEnvironment.appName;\n    if (appName === \"ILST\") {\n        window.__adobe_cep__.evalScript('app.userGUID', function(result){\n            callback(result);\n        });\n    } else if (appName === \"IDSN\") {\n        window.__adobe_cep__.evalScript('app.userGuid', function(result){\n            callback(result);\n        });\n    } else if (appName === \"PHSP\" || appName === \"PHXS\") {\n        window.__adobe_cep__.evalScript(\"var getUserIdPhotoshop = function() {var userId = '';try {var bhnc = app.charIDToTypeID('bhnc');var ref = new ActionReference();ref.putProperty(app.charIDToTypeID('Prpr'), bhnc);ref.putEnumerated(app.charIDToTypeID('capp'), app.charIDToTypeID('Ordn'), app.charIDToTypeID('Trgt'));var appDesc = app.executeActionGet(ref);if (appDesc.hasKey(bhnc)) {userId = appDesc.getString(bhnc);}} catch (e) {}return userId;};\", function(result){\n            window.__adobe_cep__.evalScript('getUserIdPhotoshop()', function(result2) {\n                callback(result2);\n            });\n        });\n    } else {\n        var userId = window.__adobe_cep__.getCurrentImsUserId();\n        callback(userId);\n    }\n};\n\n/**\n * Launches the Adobe Application Manager (AAM) AIR application.\n * If an error occurs when fetching an access token, this allows the user to\n * log in with their Adobe ID credentials, or accept new terms of use.\n *\n * This function is asynchronous. To handle the result, register a callback for the event IMSInterface.events.imsAAMIMSStatus.\n * The returned event contains an \\c #AAMStatus object.\n * @see addEventListener()\n *\n * @param clientID       The IMS client ID for your extension, assigned by the IMS team.\n *               Matches the <code>serviceCode</code> value in the Service Account Object (SAO).\n * @param clientSecret       The client secret associated with the provided client ID.\n * @param redirectUri        The redirect URI registered with IMS\n * @param userAccountGuid    The unique person GUID for the Renga account, as returned in the response\n                to the <code>fetchAccounts()</code> method.\n * @param serviceAccountGuid (optional, not currently used) A unique identifier for a Service Account Object (SAO).\n * @param scope          (optional) A comma delimited list of services for which the refresh token was requested.\n *\n * @return A boolean status. Returning true means only the call to showAAM function itself is successful. \n *\t\t\t\t\t\t\tReturning false means that failed to show AAM.\n */\nNGLInterface.prototype.showAAM = function(clientId, clientSecret, redirectUri, userAccountGuid, serviceAccountGuid, scope)\n{\n    return window.__adobe_cep__.showAAM(clientId, clientSecret, redirectUri, userAccountGuid, serviceAccountGuid, scope);\n};\n\n\nNGLInterface.events = {\n    imsFetchAccessToken                : \"com.adobe.csxs.events.internal.ims.FetchAccessTokenWithStatus\",\n    imsFetchContinueToken              : \"com.adobe.csxs.events.internal.ims.FetchAccessTokenWithStatus\",\n    imsFetchProfile                    : \"com.adobe.csxs.events.internal.ims.FetchAccessTokenWithStatus\"\n};\n\nNGLInterface.status = {\n    SUCCESS                                             : \"0\",\n    RESULT_PENDING                                      : \"1\",\n    NOT_CONFIGURED                                      : \"2\",\n    ALREADY_CONFIGURED                                  : \"3\",\n    NOT_IMPLEMENTED                                     : \"4\",\n    INVALID_PARAM                                       : \"5\",\n    INVALID_CONFIG                                      : \"6\",\n    INVALID_NID                                         : \"7\",\n    INVALID_APP_ID_ERROR                                : \"8\",\n    INVALID_APP_VERSION_ERROR                           : \"9\",\n    INVALID_PROFILE_STATUS                              : \"10\",\n    SIGNIN_UNAVAILABLE                                  : \"11\",\n    FEATURE_UNAVAILABLE                                 : \"12\",\n    INVALID_OPERATING_CONFIG                            : \"13\",\n    TRANSIENT_BUILD_EXPIRED                             : \"14\",\n\n    // Network stack related errors\n    INVALID_URL                                         : \"101\",\n    NETWORK_ERROR                                       : \"102\", \n    PROXY_AUTH_REQUIRED                                 : \"103\",\n    UNAUTHORISED_SERVER_CALL                            : \"104\",\n    HTTP_REQUEST_CANCELLED                              : \"105\",\n    HTTP_REQUEST_TIMEDOUT                               : \"106\",\n    HTTP_FAILURE                                        : \"107\",\n    HTTP_SSL_FAILURE                                    : \"108\",\n    HTTP_BAD_REQUEST                                    : \"109\", \n    NO_CONTENT                                          : \"110\",\n\n    // ASNP related errors\n    EXCEPTION_RETRIEVING_LATEST_COP                     : \"201\",\n    FAILED_TO_VERIFY_LATEST_COP                         : \"202\",\n    FAILED_TO_PARSE_LATEST_COP                          : \"203\",\n    COP_RETRIEVAL_FAILED                                : \"204\",\n    FAILED_TO_SAVE_NGL_PROFILE_LOCALLY                  : \"205\",\n    FAILED_TO_FETCH_PRINCIPAL                           : \"206\",\n    FAILED_TO_FETCH_CACHED_NGL_PROFILE                  : \"207\",\n    FAILED_TO_PARSE_CACHED_NGL_PROFILE                  : \"208\",\n    FAILED_TO_DELETE_CACHED_NGL_PROFILE                 : \"209\",\n    NGL_PROFILE_STORAGE_FAILURE                         : \"210\",\n    DEVICE_ID_PRINCIPAL_MISMATCH                        : \"211\",\n    LATEST_COP_PRINCIPAL_MISMATCH                       : \"212\",\n    LATEST_COP_DEV_TOKEN_HASH_MISMATCH                  : \"213\",\n    ACCESS_TOKEN_COULD_NOT_BE_FETCHED                   : \"214\",\n    LATEST_COP_COULD_NOT_BE_SAVED_LOCALLY               : \"215\",\n    LATEST_COP_RUNTIME_MODE_MISMATCH                    : \"216\",\n    LATEST_COP_APP_ID_MISMATCH                          : \"217\",\n    PRINCIPAL_NOT_FOUND                                 : \"218\",\n    PRINCIPAL_STORAGE_FAILURE                           : \"219\",\n    INVALID_DEVICE_TOKEN_TO_FETCH_ACCESS_TOKEN          : \"220\", //The device token used to get Profile was invalidated\n    CACHED_NGL_PROFILE_PRINCIPAL_MISMATCH               : \"221\",\n    RUNTIME_MODE_MISMATCH_IN_CACHED_NGL_PROFILE         : \"222\",\n    APP_ID_MISMATCH_IN_CACHED_NGL_PROFILE               : \"223\",\n    ACCESS_DENIED_TO_SAVE_NGL_PROFILE                   : \"224\",\n    ACCESS_DENIED_TO_GET_CACHED_NGL_PROFILE             : \"225\",\n    ACCESS_DENIED_TO_DELETE_CACHED_NGL_PROFILE          : \"226\",\n    ACCESS_DENIED_IN_STORING_PRINCIPAL                  : \"227\",\n    CACHED_NGL_PROFILE_NOT_FOUND                        : \"228\",\n    WORKFLOW_RETRIEVAL_FAILED                           : \"229\",\n    FAILED_TO_CREATE_REQUEST_BODY                       : \"230\",\n    FAILED_TO_FETCH_SUSI_WF                             : \"231\",\n    FAILED_TO_FETCH_WF                                  : \"232\",\n    FAILED_FETCH_IMS_JUMP_TOKEN                         : \"233\",\n    FAILED_TO_PARSE_WF_JSON                             : \"234\",\n    INVALID_WF_TYPE_IN_REPSONSE                         : \"235\",\n    PARSING_ERROR                                       : \"236\",\n    STORAGE_PARSE_ERROR                                 : \"237\",\n    STORAGE_ACCESS_DENIED                               : \"238\",\n    STORAGE_READ_ERROR                                  : \"239\",\n    STORAGE_WRITE_ERROR                                 : \"240\",\n    STORAGE_DELETE_ERROR                                : \"241\",\n    STORAGE_DATA_NOT_FOUND                              : \"242\",\n    STORAGE_INSUFFICIENT_MEMORY                         : \"243\",\n    STORAGE_INSUFFICIENT_SIZE                           : \"244\",\n    STORAGE_DATA_CONVERSION_ERROR                       : \"245\",\n    STORAGE_DATA_RETRIEVAL_ERROR                        : \"246\",   \n    INVALID_ASNP_FRL_FILE                               : \"247\",\n    CANNOT_FETCH_WITH_NGLU_NOTIFIED_TOKEN_TEMPORARILY   : \"248\", /* we couldn't access the token, probably due to keychain lock */\n    SESSION_ID_MISMATCH                                 : \"249\",\n    FAILED_TO_LOAD_DATA_FROM_STORAGE_TO_MEMORY          : \"250\",\n    CLOCK_ROLLED_BACK                                   : \"251\",\n    CACHELIFETIME_ELAPSED                               : \"252\",\n    NPDID_PRINCIPAL_MISMATCH                            : \"253\",\n    EXCEPTION_ID_MISMATCH                               : \"254\",\n    UNLICENSED_APP_DENY_COPS_CALL_PRINCIPAL_INVALID     : \"255\",\n\n\n    // Identity API errors\n    IMS_ERROR_ACCESS_DENIED                             : \"301\",\n    IMS_ERROR_INVALID_CLIENT                            : \"302\",\n    IMS_ERROR_INVALID_GRANT                             : \"303\",\n    IMS_ERROR_UNAUTHORIZED_CLIENT                       : \"304\",\n    IMS_ERROR_UNSUPPORTED_RESPONSE_TYPE                 : \"305\",\n    IMS_ERROR_INVALID_SCOPE                             : \"306\",\n    IMS_ERROR_UNSUPPORTED_GRANT_TYPE                    : \"307\",\n    IMS_ERROR_BAD_REQUEST                               : \"308\",\n    IMS_ERROR_TOU_CHANGED                               : \"309\",\n    IMS_ERROR_IN_REVOKE_DEVICE_TOKEN                    : \"310\",\n    IMS_ERROR_TOU_NOT_CURRENT                           : \"311\",\n    IMS_ERROR_EVS_INVALID                               : \"312\",\n    IMS_ERROR_ACCT_ACT_REQ                              : \"313\",\n    IMS_ERROR_ACCT_DISABLED                             : \"314\",\n    IMS_ERROR_SUBS_ACT_REQ                              : \"315\",\n    IMS_ERROR_SUBS_NO_SUB                               : \"316\",\n    IMS_ERROR_JUMP_URL_HANDLING_REQUIRED                : \"317\",\n    IMS_ERROR_ACCT_PASSWORD_UPDATED                     : \"318\",\n    IMS_ERROR_ACCT_MIGRATE                              : \"319\",\n    IMS_ERROR_ACCT_DOB_AGE                              : \"320\",\n    IMS_ERROR_ACCESS_DENIED_NON_T1                      : \"321\",\n    IMS_ERROR_UNKNOWN_ERROR                             : \"322\",\n    IMS_ERROR_ACCESS_DENIED_T1                          : \"323\",\n    IMS_ERROR_RETRY_REQUEST                             : \"324\",\n\n    // Profile related errors\n    WORKFLOW_REQUIRED                                   : \"401\",\n    PROFILE_EXPIRED                                     : \"402\",\n    PROFILE_UNAVAILABLE                                 : \"403\",\n    PROFILE_DENIED                                      : \"404\",\n    PROFILE_OVERACTIVATED                               : \"405\",\n    PROFILE_LOCALE_RECONFIGURE                          : \"406\",\n    PROFILE_SIGNIN                                      : \"407\",\n    PROFILE_SIGNOUT                                     : \"408\",\n    //Internal\n    PROFILE_REFRESH_NEEDED                              : \"410\",\n\n    // Generic Errors\n    INTERNAL_ERROR                                      : \"501\",\n    RUNTIME_ERROR                                       : \"502\",\n    GENERIC_FAILURE                                     : \"503\",\n    USER_ABORT                                          : \"504\",\n\n    /**< CEP Errors */\n    IMSMANAGER_ERROR_EXCEPTION                          : \"3000\", /**< Error returned when an exception is thrown during processing in the event callback */\n    IMSMANAGER_ERROR_ENCODING                           : \"3001\", /**< Error returned if the inDetails information failed to be encoded into a Base64 string */\n\tIMSMANAGER_SUCCESS_BROWSER_OPENED                   : \"3002\", /**< Status returned if CEP successfully opens the default browser with the SSO URL as part of the AttemptSSOJumpWorkflows API */\n    IMSMANAGER_ERROR_BROWSER_FAILED_TO_OPEN             : \"3003\", /**< Status returned if CEP fails to open the SSO URL in the default browser */\n\n    NGLMANAGER_ERROR_EXCEPTION                          : \"4000\", // Error returned when an exception is thrown during processing in the FetchAccessToken callback\n    NGLMANAGER_ERROR_ENCODING                           : \"4001\",  // Error returned if the inDetails information failed to be encoded into a Base64 string\n\n    IMS_UNKNOWN_ERROR                                   : \"0xFFFF\"\n};\n\n// @deprecated Use NGLInterface.events directly.\nNGLInterface.prototype.events = NGLInterface.events;\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { IMSInterface as CEPIMSInterface } from 'app/js/interface/cep_libs/IMSInterface';\nimport { NGLInterface as CEPNGLInterface } from 'app/js/interface/cep_libs/NGLInterface';\nimport environment from 'app/js/environment';\nimport libraryProcessManager from 'app/js/managers/libraryProcessManager';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport debugLog from 'app/js/utils/debugLog';\nimport { SCOPES, FETCH_TOKEN_EVENT, CONFIGS } from './constants';\n\nexport class IMSInterface {\n\n    _nglInterface = new CEPNGLInterface();\n    _imsInterface = new CEPIMSInterface();\n\n    get imsRef() {\n        if (!this._imsRefCache) {\n            const env = this.getEnvironment();\n            this._imsRefCache = environment.IMSLib ? environment.IMSLib.createRefEx(env.ims) : this._imsInterface.imsConnectWithEndpoint(env.ims);\n        }\n        return this._imsRefCache;\n    }\n\n    _getAccessTokenCEP(interfaceInstance, params) {\n        return new Promise((resolve, reject) => {\n            // eslint-disable-next-line prefer-const\n            let timeout;\n\n            const resolveAccessToken = event => {\n                const token = event && params.getToken(event);\n                interfaceInstance.removeEventListener(params.eventName, resolveAccessToken);\n                clearTimeout(timeout);\n\n                if (token) {\n                    resolve(token);\n                } else {\n                    reject();\n                }\n            };\n\n            interfaceInstance.addEventListener(params.eventName, resolveAccessToken);\n            interfaceInstance.imsFetchAccessToken(...params.funcParams);\n\n            // If IMS doesn't respond in 5s, assume something went wrong\n            timeout = setTimeout(() => {\n                debugLog.log('IMS: Timed out fetching access token - trying process');\n\n                // Try to fetch an access token from the process if we fail fetching it via CEP\n                // (there are known bugs in CEP in fetching access tokens for first-time launch of an app for a new user)\n                resolveAccessToken();\n            }, 5000);\n        });\n    }\n\n    _getAccessToken(userId) {\n        if (!userId) {\n            return Promise.resolve(null);\n        }\n\n        const env = this.getEnvironment();\n\n        // Connect to IMS: Use node-imslib for non-CEP apps, like Dimension\n        // NOTE: This will always return the access token for the host (cc web), which means we need to make sure\n        // all of the client IDs used in the panel match the host's client ID\n        if (environment.IMSLib) {\n            return new Promise(resolve => environment.IMSLib.fetchAccessToken(this.imsRef, env.clientId, env.clientSecret, userId, '', SCOPES,\n                (err, res) => resolve(err ? null : res.access_token)));\n        }\n\n        let version;\n        if (environment._appInterface) {\n            version = environment._appInterface.getCurrentApiVersion();\n        }\n\n        let tokenPromise;\n        if (version && version.major >= 11) {\n            tokenPromise = this._getAccessTokenCEP(this._nglInterface, {\n                funcParams: [ env.clientId, env.clientSecret, SCOPES ],\n                eventName: this._nglInterface.events.imsFetchAccessToken,\n                getToken: event => event && event.data && event.data.details && event.data.details.access_token,\n            });\n        } else {\n            tokenPromise = this._getAccessTokenCEP(this._imsInterface, {\n                funcParams: [ this.imsRef, env.clientId, env.clientSecret, userId, '', SCOPES ],\n                eventName: FETCH_TOKEN_EVENT,\n                getToken: event => event && event.data && event.data.access_token,\n            });\n        }\n        return tokenPromise.catch(() => {\n            // Try to fetch an access token from the process if we fail fetching it via CEP\n            // (there are known bugs in CEP in fetching access tokens for first-time launch of an app for a new user)\n            return libraryManager.getAccessToken(userId, env.clientId, env.clientSecret, SCOPES)\n                .then((data) => data && data.access_token);\n        });\n    }\n\n    // 'staging' or 'production' environment type for IMS service\n    get environmentType() {\n        const info = libraryProcessManager.getServiceInfo();\n        const processEnvType = info && info.environment && info.environment.toLowerCase();\n        const productEnvType = environment.imsEnvironment;\n        // We get the environment (stage vs production) from the CC Library process, but we just assume it's\n        // production if we're not yet connected.\n        return processEnvType || productEnvType || 'production';\n    }\n\n    /**\n     * Get information about the user requested or current environment we're in (staging vs production).\n     * This includes endpoints to use, etc.\n     *\n     * @param {*} envType string indicating the user requested environment.\n     * @returns {Object} contains the ims clientId, clientSecret, and all the end points for services we call, for either staging or prod environments.\n     */\n    getEnvironment(envType) {\n        const config = CONFIGS[envType || this.environmentType];\n        if (environment.imsClientId) {\n            // Usually we get the ims client id and access token through a call to IMS, specifically through NGLLib, in the process.\n            // This isn't available in a browser environment, so CCWeb provides their own access token and client id in the browser environment,\n            // and we need to match that client id.\n            return Object.assign({}, config, { clientId: environment.imsClientId, clientScope: SCOPES });\n        }\n        return { ...config, clientScope: SCOPES };\n    }\n\n    /**\n     * Get an access token for the given user id. This returns a promise that resolves to an access token, or is rejected if\n     * we're logged out.\n     * @param {string} userId\n     */\n    getAccessToken(userId) {\n        // If we have a cached token, just return it\n        if (this._accessTokenCache) {\n            return Promise.resolve(this._accessTokenCache);\n        }\n\n        if (!this._getAccessTokenPromise) {\n            debugLog.log('IMS: Fetching access token: environment is ' + this.getEnvironment().label);\n            this._getAccessTokenPromise = this._getAccessToken(userId).then(token => {\n                delete this._getAccessTokenPromise;\n                if (token) {\n                    this._accessTokenCache = token;\n                    return token;\n                }\n                return Promise.reject('LOGGED_OUT');\n            });\n        }\n\n        return this._getAccessTokenPromise;\n    }\n\n    /**\n     * Clear the cached access token (e.g. if we become logged out)\n     */\n    clearAccessToken() {\n        delete this._accessTokenCache;\n    }\n\n    /**\n     * If profile object is available on CEP, ask for user availability (in NGL-compliant apps).\n     * Else, return true and let other checks handle the workflow.\n     */\n    hasValidUser() {\n        return window && window.profile ? window.profile.hasValidUser() : environment.isLoggedIn();\n    }\n\n    /**\n     * get a URL for authenticating the user directly with IMS. This will display the IMS login screen and prompt the user to enter\n     * their username/password. It will redirect back with an access token.\n     *\n     * This should only be used in environments that don't have access to IMSLib - e.g. for authenticating the panel in MS Office.\n     *\n     * @param {string} redirectURI\n     * @param {string} [envType] Specify a specific environment (staging or production) - if missing, will use the current environment\n     * @returns {string} IMS authorization URL\n     */\n    getLoginURL(redirectURI, envType) {\n        const env = CONFIGS[envType] || this.getEnvironment();\n        return `https://${env.ims}/ims/authorize/v1?client_id=${env.clientId}&response_type=token&scope=${SCOPES}&redirect_uri=${encodeURIComponent(redirectURI)}&locale=${environment.getLocale().replace('-', '_')}`;\n    }\n\n    getCurrentUserIdHelper() {\n        return new Promise(resolve => {\n            this._nglInterface.imsGetCurrentUserIdHelper(resolve);\n        });\n    }\n\n    /**\n     * Returns decoded data stored in accessToken\n     * @param {string} token\n     * @returns {Object} imsData, including userId and clientId\n     */\n    decodeToken(token) {\n        const parts = token ? token.split('.') : [];\n        if (parts.length !== 3) {\n            return undefined;\n        }\n        try {\n            return JSON.parse(atob(parts[1]));\n        } catch (e) {\n            return undefined;\n        }\n    }\n\n    /**\n     * Returns decoded user data stored in accessToken\n     * @param {string} token\n     * @returns {Object} userId and clientId\n     */\n    extractUserDataFromToken(token) {\n        const decoded = this.decodeToken(token);\n\n        if (decoded) {\n            return {\n                user: {\n                    id: decoded.user_id,\n                    clientId: decoded.client_id\n                }\n            };\n        }\n        return undefined;\n    }\n\n}\n\nexport default new IMSInterface();\n","// @ts-check\n\n/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/**\n Service for reporting metrics to an analytics service. Some operational events will be reported separately\n using the new ingest service in operationalMetrics.js\n **/\n\nimport { observable } from 'mobx';\nimport IngestAPI from '@ccx-public/ingest';\nimport configuration from '../config/configuration';\nimport environment from 'app/js/environment';\nimport imsInterface from '../interface/imsInterface';\nimport localSettings from '../config/localSettings';\nimport featureFlags from 'app/js/config/featureFlags';\nimport versionManager from '../managers/versionManager';\nimport librarySizeManager from '../managers/librarySizeManager';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport debugLog from '../utils/debugLog';\nimport * as AdobeStockUtils from '../utils/adobeStockUtils';\nimport viewState from '../state/viewState';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport { reaction } from 'mobx';\nimport BrowserUtils from 'app/js/utils/browserUtils';\nimport { isPublicLibrary, isTeamLibrary } from 'app/js/utils/libraryUtils';\nimport { isPublishedBrand, isUnpublishedBrand, isBrandLibrary } from 'app/js/utils/brandUtils';\nimport { getGroupLevel, getRootGroupType } from 'app/js/utils/groupUtils';\nimport { rgbToHex } from '../utils/colorUtils';\nimport floodgateManager from '../managers/floodgateManager';\n\nconst STORE_OFFLINE = {\n    'Operations': {\n        'Export Library': true\n    },\n    'Create Library': {\n        'Import Library': true\n    },\n    'Typekit': {\n        'Sync-Font': true,\n        'Purchase': true,\n        'Upgrade': true,\n        'Conditional': true,\n        'Update Info': true\n    }\n};\n\nconst CONTENT_CATEGORY_OPTYPE_OVERRIDES = {\n    'presets': 'Presets'\n};\n\nconst UNKNOWN_EVENT_ATTR_VALUE = 'Unknown';\n\nlet _ingest;\nexport const Ingest = {\n    init(dependencies, options) {\n        _ingest = new IngestAPI(dependencies, options);\n    },\n    isInitialized() {\n        return _ingest !== undefined;\n    },\n    postEvent(payload) {\n        if (_ingest) {\n            _ingest.postEvent(payload);\n        }\n    },\n    flush() {\n        if (_ingest) {\n            _ingest.flush();\n        }\n    },\n    setEnabled(enabled) {\n        if (_ingest) {\n            _ingest.enable(enabled);\n        }\n    }\n};\n\nconst OFFLINE_TYPEKIT_EVENTS_KEY = 'offlineTypekitEvents';\n\nexport const IGNORED_ERRORS = [\n    'ResizeObserver loop completed with undelivered notifications.',\n    'ResizeObserver loop limit exceeded',\n];\n\nexport class Metrics {\n\n    // Constants for the eventSource parameter for Stock analytics\n    STOCK_EVENTSOURCE = {\n        SEARCH: 'search',\n        CONTEXT_MENU: 'context-menu'\n    };\n\n    constructor() {\n        // Capture and report unhandled JS runtime errors\n        window.onerror = (message, url, lineNumber, columnNumber) => {\n            if (typeof message === 'string' && IGNORED_ERRORS.includes(message)) {\n                return;\n            }\n            const description = `${url}#${lineNumber}:${columnNumber}: ${message}`;\n            this.reportError('Navigation', 'Runtime Error', description);\n            debugLog.log('Uncaught Error: ' + description);\n        };\n    }\n\n    initialized = false;\n    @observable _enabled = false;\n    environment = {};\n    extraEventMetrics = {};\n    extraElementMetrics = {};\n\n    // We allow recording analytics for debugging purposes.\n    _recordedEvents = observable.array();\n\n    _recordEvent(message, details) {\n        this._recordedEvents.push({ time: new Date().valueOf(), message, details });\n    }\n\n    /*\n        API for debug UI\n    */\n\n    get recordedEvents() {\n        return this._recordedEvents;\n    }\n\n    clearRecordedEvents() {\n        this._recordedEvents.clear();\n    }\n\n    /*\n        Public API\n    */\n\n    get productLocation() {\n        return 'libraries/' + (process.env.NODE_ENV === 'production' ? versionManager.getPluginVersion() : 'DEV');\n    }\n\n    get userAccountStatus() {\n        const userProfile = environment.getProfile();\n        const accountType = userProfile && userProfile.RelationshipProfile && userProfile.RelationshipProfile[0] && userProfile.RelationshipProfile[0].appEntitlementStatus;\n        return accountType && accountType.toLowerCase() || this.userData && this.userData.accountStatus;\n    }\n\n    setEnvironment(config) {\n        if (config.product) { this.environment.product = config.product; }\n        if (config.productVersion) { this.environment.productVersion = config.productVersion; }\n        if (config.version) { this.environment.version = config.version; }\n        if (config.os) { this.environment.os = config.os; }\n        if (config.offline !== undefined) { this.environment.offline = config.offline; }\n        if (config.consumer) { this.environment.consumer = config.consumer; }\n    }\n\n    addProductHeaders(headers) {\n        if (headers) {\n            headers['X-Product'] = this.environment.product + '/' + this.environment.productVersion;\n            headers['X-Product-Location'] = 'libraries/' + (process.env.NODE_ENV === 'production' ? this.environment.version : 'DEV');\n        }\n        return headers;\n    }\n\n    // External isEnabled API is observable\n    isEnabled(rawStateOnly = false) {\n        if (rawStateOnly || !this.currentUserId) {\n            return this._enabled;\n        }\n        return this._enabled || Boolean(localSettings.getDebugValue(`forceEnableAnalytics#${this.currentUserId}`));\n    }\n\n    analyticsApiKey() {\n        return configuration.currentProduct.config.ingestApiKey || imsInterface.getEnvironment().clientId;\n    }\n\n    // Internal checkEnabled API will update the observable state\n    _checkEnabled() {\n        const enabled = libraryManager.ANALYTICS_ENABLED;\n        if (this._enabled !== enabled && Ingest.isInitialized()) {\n            debugLog.log('Analytics: ' + enabled);\n            this._enabled = enabled;\n            Ingest.setEnabled(enabled);\n            libraryManager._ccLibraries.utils.metrics.setEnabled(enabled);\n        }\n        return this.isEnabled();\n    }\n\n    // Only use this for debugging - should never be turned on for customer accounts\n    setForceEnableAnalytics(enabled) {\n        if (this.currentUserId) {\n            localSettings.setDebugValue(`forceEnableAnalytics#${this.currentUserId}`, enabled);\n            this._checkEnabled();\n        }\n    }\n\n    // Initialize and set user id\n    setUserId(userId) {\n        const hasUserChanged = this.currentUserId !== userId;\n        this.currentUserId = userId;\n        this._checkEnabled();\n\n        if (!userId || !hasUserChanged) {\n            return; // No user, or we've already processed the state for this user\n        }\n\n        // Initialize the environment variables that are sent with events\n        if (!this.initialized) {\n            this.initialized = true;\n            const isOfflineError = (status) => status.state === 'error' && status.errorType === 'network';\n            reaction(() => isOfflineError(libraryManager.syncStatus), offline => this.setEnvironment({ offline }));\n\n            // Setup environment values\n            this.setEnvironment({\n                product: configuration.currentProduct.config.fullName,\n                version: versionManager.getPluginVersion(),\n                os: environment.getOSInformation()\n            });\n\n            // Get the containing application's version\n            environment.exec('CORE', 'getApplicationVersion', []).then((version) => {\n                this.setEnvironment({ productVersion: version });\n                libraryManager._ccLibraries.utils.metrics.product = `${configuration.currentProduct.config.code}/${version}`;\n            }).catch(() => {\n                // Fail gracefully.\n            });\n\n            if (configuration.currentProduct.getUserData) {\n                configuration.currentProduct.getUserData((userData) => {\n                    this.userData = userData;\n                    libraryManager._ccLibraries.utils.metrics.userAccountStatus = this.userAccountStatus;\n                });\n            }\n\n            // Initialize Ingest per user.\n            this._initializeIngest(this.currentUserId);\n        }\n\n        libraryManager._ccLibraries.utils.metrics.apiKey = this.analyticsApiKey();\n        libraryManager._ccLibraries.utils.metrics.productLocation = this.productLocation;\n        libraryManager._ccLibraries.utils.metrics.platform = 'DESKTOP';\n        libraryManager._ccLibraries.utils.metrics.sessionGuid = imsInterface.imsRef;\n\n        if (this._checkEnabled() && environment.isLibrariesPanel()) {\n            if (configuration.currentProduct.config.reportPublishedUnpublishedCountOnInit) {\n                // We need floodgate to have loaded in order to get the published count in the correct way based on feature flag\n                const disposer = reaction(() => floodgateManager.hasLoaded(), () => {\n                    const brands = libraryManager.libraries.filter(lib => isBrandLibrary(lib));\n                    const publishedCount = brands.filter(brand => isPublishedBrand(brand)).length;\n                    const unpublishedCount = brands.filter(brand => isUnpublishedBrand(brand)).length;\n                    this._reportInitializeEvent({\n                        event: {\n                            count: publishedCount,\n                            value: unpublishedCount\n                        }\n                    });\n                    disposer();\n                });\n            } else {\n                this._reportInitializeEvent();\n            }\n\n            if (libraryManager.currentLibrary) {\n                const currentLibraryElementCount = libraryManager.currentLibrary && libraryManager.currentLibrary.elements.length;\n                this.reportEvent('Navigation', 'Library Panel', 'render', 'load-library', { event: { count: currentLibraryElementCount } });\n            }\n\n        }\n    }\n\n    _reportInitializeEvent(initData) {\n        this.reportEvent('Initialize', 'Init', 'render', 'view', initData);\n    }\n\n    flush() {\n        Ingest.flush();\n    }\n\n    // Mechanism to pass extra metrics data down to reportEvent() in cases where\n    // reportEvent() gets called by the API layer and we don't want to clutter up\n    // those methods with (panel specific) metrics parameters.\n    // Added specifically for passing down the operation type for a createEvent\n    // (used by PS).\n    // Please note that API operations will call reportEvent synchronously, so you can leave this data for a set of element events\n    // and just clear it after the operations.\n    setExtraEventMetrics(eventName, metrics) {\n        this.extraEventMetrics[eventName] = metrics;\n    }\n\n    getExtraEventMetrics(eventName) {\n        return this.extraEventMetrics[eventName];\n    }\n\n    clearExtraEventMetrics(eventName) {\n        delete this.extraEventMetrics[eventName];\n    }\n\n    // This is separated out just so that we can spy on it and return a mock group in tests.\n    _getApiReportGroup(groupID, libraryID) {\n        const library = libraryID ? libraryManager.getLibraryById(libraryID) : libraryManager.currentLibrary;\n        return library && library.getGroupById(groupID);\n    }\n\n    // This is separated out just so that we can spy on it and return a mock element in tests.\n    _getApiReportElement(elementID, libraryID) {\n        const library = libraryID && libraryManager.getLibraryById(libraryID);\n        return library && library.getElementById(elementID);\n    }\n    /*\n        Reporting\n    */\n\n    reportStoredOfflineEvents() {\n        let offlineEvents = localSettings.getValue(OFFLINE_TYPEKIT_EVENTS_KEY);\n        offlineEvents = offlineEvents ? JSON.parse(offlineEvents) : [];\n        if (BrowserUtils.isOnline && offlineEvents.length) {\n            offlineEvents.forEach(function(payload) {\n                if (payload && Ingest) {\n                    Ingest.postEvent(payload);\n                }\n            });\n            localSettings.setValue(OFFLINE_TYPEKIT_EVENTS_KEY, JSON.stringify([]));\n        }\n    }\n\n    reportElementEvent(workflow, eventSubcategory, eventType, eventSubtype, element, properties) {\n        properties = properties || {};\n        const elementProperties = this._getElementProperties(element);\n        this.reportEvent(workflow, eventSubcategory, eventType, eventSubtype, this._extendProperties(elementProperties, properties), element && element.library);\n    }\n\n    reportGroupEvent(workflow, eventSubcategory, eventType, eventSubtype, group, properties) {\n        properties = properties || {};\n\n        const groupProperties = this._getGroupProperties(group);\n        this.reportEvent(workflow, eventSubcategory, eventType, eventSubtype, this._extendProperties(groupProperties, properties), group && group.library);\n    }\n\n    // Metrics using the new SDM should use this function to report metrics. Once all\n    // metrics using the old SDM have been updated, we can remove the reportEvent legacy function\n    // Note: Properties is not expected to be flattened yet. i.e. it can have nested objects one level deep\n    reportEvent(workflow, eventSubcategory, eventType, eventSubtype, properties, currentLibrary) {\n        if (configuration.currentProduct.config.shouldDisableMetricsEvent?.(workflow, eventSubcategory, eventType, eventSubtype, properties, currentLibrary)) {\n            return;\n        }\n        workflow = `Library:${workflow}`;\n        if (!this._checkEnabled()) { return; }\n        this.reportStoredOfflineEvents();\n\n        if (Ingest.isInitialized()) {\n            currentLibrary = currentLibrary || libraryManager.currentLibrary;\n            const currentLibraryProperties = this._getLibraryProperties(currentLibrary);\n            properties = properties ? this._extendProperties(properties, currentLibraryProperties) : currentLibraryProperties;\n\n            // basePayload is common for all events (context like the app details, OS, etc), but eventPayload is specific to the event.\n            // It's useful to separate them out so we can log the eventPayload separately.\n            const basePayload = this.createBasePayload();\n            const eventPayload = {};\n            // Note that the payload to ingest should be flat. e.g. 'event.workflow' is the name of a property, and event isn't a separate object.\n            eventPayload['content.action'] = properties.content && (properties.content.actionUrl ? properties.content.actionUrl + '&guid=' + basePayload['event.guid'] : properties.content.action);\n            eventPayload['event.workflow'] = workflow;\n            eventPayload['event.subcategory'] = eventSubcategory;\n            eventPayload['event.type'] = eventType;\n            eventPayload['event.subtype'] = eventSubtype;\n\n            // Update event payload by adding event data from properties\n            this.updateEventPayload(properties, eventPayload);\n\n            // Store the event payload in the logs (but not the basePayload since it's big and rarely changes) - useful for debugging.\n            debugLog.log('Analytics Event: ' + JSON.stringify(eventPayload));\n            if (featureFlags.get('recordMetrics')) {\n                // Additionally, the debug menu lets us record analytics in the panel, and display it in a debug UI.\n                // We don't keep this turned on all the time, to avoid the expense of keeping all the past events around in memory.\n                const message = `${workflow}, ${eventSubcategory}, ${eventType}, ${eventSubtype}`;\n                const details = `Event Payload: ${JSON.stringify(eventPayload, undefined, 2)}\\n\\nBase Payload: ${JSON.stringify(basePayload, undefined, 2)}`;\n                this._recordEvent(message, details);\n            }\n\n            const payload = Object.assign({}, basePayload, eventPayload);\n            if (configuration.currentProduct.config.reportSDMEvent) {\n                configuration.currentProduct.config.reportSDMEvent(payload);\n            }\n\n            if (!BrowserUtils.isOnline && STORE_OFFLINE[workflow] && STORE_OFFLINE[workflow][eventSubcategory]) {\n                const localReports = localSettings.getValue(OFFLINE_TYPEKIT_EVENTS_KEY);\n                const offlineEvents = localReports ? JSON.parse(localReports) : [];\n                offlineEvents.push(payload);\n                localSettings.setValue(OFFLINE_TYPEKIT_EVENTS_KEY, JSON.stringify(offlineEvents));\n            } else {\n                Ingest.postEvent(payload);\n            }\n        }\n    }\n\n    updateEventPayload(properties, eventPayload) {\n        Object.keys(properties).forEach(function(key) {\n            Object.keys(properties[key]).forEach(function(contentKey) {\n                // Flattens the keys from nested objects one level deep\n                const payloadKey = key + '.' + contentKey;\n                const payloadValue = properties[key][contentKey];\n                if (!eventPayload[payloadKey] && payloadValue !== undefined) {\n                    eventPayload[payloadKey] = payloadValue;\n                }\n            });\n        });\n    }\n\n    // TODO: Consider how to merge analytics error reporting and debuglog workflows\n    reportError(workflow, eventSubcategory, errorDescription, errorCode, errorType, properties, library) {\n        properties = properties || {};\n        properties.event = properties.event || {};\n        if (errorCode) { properties.event.error_code = errorCode; }\n        if (errorType) { properties.event.error_type = errorType; }\n        if (errorDescription) { properties.event.error_desc = errorDescription; }\n        this.reportEvent(workflow, eventSubcategory, 'render', 'error', properties, library);\n    }\n\n    reportSearchEvent(workflow, subcategory, type, subtype, properties) {\n        subcategory = subcategory === 'Search' && viewState.isRootView() ? 'Root Search' : subcategory;\n        this.reportEvent(workflow, subcategory, type, subtype, properties);\n        if (viewState.getSearchType() === 'stock') {\n            this.reportStockEvent('Search', type, subtype);\n        }\n    }\n\n    reportOutgoingUrlEvent(workflow, eventSubcategory, eventType, eventSubtype, baseUrl, properties, isStock) {\n        // constructs the outgoing URL with parameters required for metrics.\n        const xProduct = this.environment.product + '/' + this.environment.productVersion;\n        const xProductLocation = 'libraries/' + (process.env.NODE_ENV === 'production' ? this.environment.version : 'DEV');\n        let url = baseUrl + '&x-product=' + xProduct + '&x-product-location=' + xProductLocation;\n        if (isStock) {\n            url = url + '&as_channel=adobe_apps&as_campclass=brand&as_camptype=CCLibrary';\n        }\n        properties = Object.assign({ content: { actionUrl: url } }, properties);\n        this.reportEvent(workflow, eventSubcategory, eventType, eventSubtype, properties);\n    }\n\n    _getAPIElementUpdateType(action) {\n        const data = action.data || {};\n        const baseData = action.baseData || {};\n        if (data.name !== baseData.name) {\n            return 'rename';\n        }\n\n        if (data.description !== baseData.description) {\n            if (!data.description) {\n                return 'delete-note';\n            }\n            if (!baseData.description) {\n                return 'add-note';\n            }\n            return 'edit-note';\n        }\n\n        if (!data.groups.length) {\n            return 'ungroup';\n        }\n        const index = baseData.groups ? baseData.groups?.findIndex(({ id }) => id === data.groups[0].id) : -1;\n        if (index > -1) {\n            return 'order';\n        } else {\n            return 'add-to-group';\n        }\n    }\n\n    _getAPIGroupUpdateType(action) {\n        if (action.data?.name !== action.baseData?.name) {\n            return 'rename';\n        }\n        return 'order';\n    }\n\n    // ONLY Used by the API to map old data model params to new SDM values.\n    reportAPIEvent(action) {\n        // if action is a dependent and the dependent is linked to the moveElement, use the moveElement name\n        const overridingLinkActions = [ 'moveElement' ];\n        const eventName = action.name === 'dependent' && overridingLinkActions.includes(action.link?.name) ? action.link?.name : action.name;\n        const properties = {};\n\n        const extraMetrics = this.getExtraEventMetrics(eventName);\n        if (extraMetrics) {\n            Object.keys(extraMetrics).forEach(function(name) {\n                const value = extraMetrics[name];\n                // Don't allow extra metrics to override existing properties; and can't set a property to undefined or null\n                if (properties[name] === undefined && value !== undefined && value !== null) {\n                    properties[name] = value;\n                }\n            });\n        }\n\n        if (properties.disableReport) {\n            return;\n        }\n\n        const opType = properties['opType'];\n\n        // Override content category for all events with an optype that has a specified category override\n        const overrideCategory = CONTENT_CATEGORY_OPTYPE_OVERRIDES[opType];\n        const category = overrideCategory || properties.content && properties.content.category;\n        let addElementCategory = '';\n        let eventProperties = {}; // any other SDM properties. Anything left over in properties that is not added to eventProperties is ignored unless reporting with the old data model.\n\n        const reportElementEvent = (workflow, eventSubcategory, eventType, eventSubtype, eventProperties = {}) => {\n            const libraryId = action.library?.id;\n            const elementId = action.data?.id || libraryManager.extractPathElementId(action.path);\n            eventProperties.content = eventProperties.content || {};\n            eventProperties.content.category = overrideCategory || eventProperties.content.category;\n            const contentElement = this._getApiReportElement(elementId, libraryId);\n            if (contentElement) {\n                return this.reportElementEvent(workflow, eventSubcategory, eventType, eventSubtype, contentElement, eventProperties);\n            }\n            this.reportEvent(workflow, eventSubcategory, eventType, eventSubtype, eventProperties, libraryManager.getLibraryById(libraryId));\n        };\n\n        const reportLibraryEvent = (workflow, eventSubcategory, eventType, eventSubtype, eventProperties = {}) => {\n            const library = properties.library;\n            eventProperties.content = eventProperties.content || {};\n            eventProperties.content.category = overrideCategory || eventProperties.content.category;\n            this.reportEvent(workflow, eventSubcategory, eventType, eventSubtype, eventProperties, library);\n        };\n\n        const reportGroupEvent = (workflow, eventSubcategory, eventType, eventSubtype, eventProperties = {}) => {\n            const libraryId = action.library?.id;\n            const groupId = action.data?.id || libraryManager.extractPathGroupId(action.path);\n\n            eventProperties.content = eventProperties.content || {};\n            eventProperties.content.category = overrideCategory || eventProperties.content.category;\n            const group = this._getApiReportGroup(groupId, libraryId);\n            if (group) {\n                // Need to run this in a timeout in order to get the accurate subgroup level, because by the time we hit this case the\n                // subgroup is created but it's parent has not yet been set\n                setTimeout(() => {\n                    eventProperties.content.status = eventProperties.content.status || getGroupLevel(group);\n                    eventProperties.content.extension = eventProperties.content.extension || getRootGroupType(group);\n                    this.reportGroupEvent(workflow, eventSubcategory, eventType, eventSubtype, group, eventProperties);\n                }, 0);\n                return;\n            }\n            // deleteGroup will have no group, but instead should send content.id and content.type in the eventProperties:\n            this.reportEvent(workflow, eventSubcategory, eventType, eventSubtype, eventProperties, libraryManager.getLibraryById(libraryId));\n        };\n        let updateType;\n        switch (eventName) {\n        case 'removeLibrary':\n            eventProperties = {\n                event: {\n                    pagename: properties.event && properties.event.pagename,\n                    value: null,\n                    count: null,\n                }\n            };\n            reportLibraryEvent('Library Operations', 'Library', 'click', 'delete', eventProperties);\n            break;\n        case 'createElement':\n            switch (opType) {\n            case 'addButton':\n                addElementCategory = 'Plus';\n                break;\n            case 'onboarding':\n                addElementCategory = 'Onboarding';\n                break;\n            case 'dragDrop':\n                addElementCategory = 'Bulk Upload';\n                break;\n            case 'dragToPanel':\n                addElementCategory = 'Drag Drop From Layers';\n                break;\n            case 'manualVacuum':\n                addElementCategory = 'Import Document';\n                break;\n            case 'presetNameDlg':\n            case 'swatchPanelExisting':\n            case 'swatchPanelNew':\n            case 'characterStyleExisting':\n            case 'characterStyleNew':\n            case 'paragraphStyleExisting':\n            case 'paragraphStyleNew':\n                addElementCategory = 'Presets';\n                break;\n            case 'Toolbar':\n                addElementCategory = 'Toolbar';\n                break;\n            case 'Empty State':\n                addElementCategory = 'Empty State';\n                break;\n            case 'canvasContextMenu':\n                addElementCategory = 'Canvas Context Menu';\n                break;\n            default:\n                addElementCategory = overrideCategory || category;\n            }\n            eventProperties = {\n                event: {\n                    value: 'single',\n                    count: 1,\n                    pagename: properties.event && properties.event.pagename,\n                },\n                content: {\n                    category: addElementCategory,\n                    extension: properties['extension'],\n                    size: properties['size']\n                },\n                ccl: { ...properties.ccl }\n            };\n            reportElementEvent('Add Assets', 'Element' , 'click', 'add', eventProperties);\n            break;\n        case 'copyElement':\n            eventProperties = {\n                event: { value: 'single', count: 1, pagename: null, },\n                content: { category }\n            };\n            reportElementEvent('Add Assets', 'Element' , 'click', 'add', eventProperties);\n            break;\n        case 'moveElement':\n            if (action.type === 'insert') {\n                eventProperties = { event: { value: 'single', count: 1, pagename: null, }, content: { category: category || 'Right Click' } };\n                reportElementEvent('Element Operations', 'Element', 'click', 'move-to-library', eventProperties);\n            }\n            break;\n        case 'updateElement':\n            updateType = this._getAPIElementUpdateType(action);\n            // Several other operations will result in elements being reordered in some way, so any update element without a category should not be reported. Categroy should always be set by the reorder workflow that wants to report it.\n            if (!updateType || (!category && [ 'order', 'add-to-group', 'ungroup' ].includes(updateType))) {\n                break;\n            }\n            eventProperties = { event: { count: 1, value: 'single', pagename: null, }, content: { category: category || 'Click' } };\n            reportElementEvent('Element Operations', 'Element', 'click', updateType, eventProperties);\n            break;\n        case 'updateElementContent':\n            eventProperties = { event: { value: 'single', count: null, pagename: null, }, content: { category: 'Right Click' } };\n            reportElementEvent('Element Operations', 'Element', 'click', opType === 'replace' ? 'replace' : 'edit', eventProperties);\n            break;\n        case 'removeElement':\n            eventProperties = { event: { value: 'single', count: null, pagename: null, }, content: { category } };\n            reportElementEvent('Element Operations', 'Element', 'click', 'delete', eventProperties);\n            break;\n        case 'restoreElement':\n            eventProperties = { event: { value: 'single', count: null, pagename: null, }, content: { category: 'Click' } };\n            reportElementEvent('Element Operations', 'Element', 'click', 'undo-delete', eventProperties);\n            break;\n        case 'createGroup':\n            // Category values: Group Button / Right Click / Empty Panel / Auto Group\n            reportGroupEvent('Create Group', 'Group', 'click', 'create', { content: { category } });\n\n            break;\n        case 'updateGroup':\n            updateType = this._getAPIGroupUpdateType(action);\n            eventProperties = { event: { value: null, count: null, }, content: { category: category || 'Click' } };\n            if (updateType === 'order') {\n                eventProperties.event = { value: properties.groupOrder, count: null, pagename: null, };\n            }\n            reportGroupEvent('Group Operations', 'Group', 'click', updateType, eventProperties);\n            break;\n        case 'removeGroup':\n            eventProperties = { event: { value: null, count: null, }, content: { type: 'group', status: properties.groupLevel } };\n            if (properties.includeContents) {\n                // Since the group is already deleted, we provide the content info manually\n                eventProperties.event = { count: properties.numberElementsInGroup };\n            }\n            reportGroupEvent('Group Operations', 'Group', 'click', properties.includeContents ? 'delete-with-assets' : 'delete', eventProperties);\n            break;\n        case 'copyGroup':\n            if (properties.includeContents) {\n                eventProperties = { event: { count: properties.numberElementsInGroup } };\n            }\n            reportGroupEvent('Group Operations', 'Group', 'click', 'copy-to-library', eventProperties);\n            break;\n        case 'moveGroup':\n            // Moving a group with contents results in: 'updateElementMetadata', 'copyElement', 'moveGroup', 'updateGroupMetadata'\n            if (properties.includeContents) {\n                eventProperties = { event: { count: properties.numberElementsInGroup } };\n            }\n            reportGroupEvent('Group Operations', 'Group', 'click', 'move-to-library', eventProperties);\n            break;\n        }\n\n        // TODO: Reporting to the product is REALLY expensive. Like, 10ms per event expensive.\n        // We're turning off reporting for any operations that can happen in a batch (e.g. copy/move/delete/restore),\n        // because this can cause the panel to hang. We need to figure out exactly what events the products need,\n        // and/or reduce the analytics for batch operations to a single event.\n        // Note that the non-API panel-only aggregate events are triggered separately by calling reportEvent().\n        if (![ 'copyElement', 'moveElement', 'deleteElement', 'restoreElement', 'updateElement', 'copyGroup', 'moveGroup', 'removeGroup', 'updateGroup' ].includes(eventName)) {\n            if (properties.library) {\n                properties.library = properties.library.data;\n            }\n            this._reportToProduct(eventName, properties);\n        }\n    }\n\n    // Map API error event to SDM\n    // TODO: API currently only sends a message and needs to be refactored to send additional data to any client (panel, server, etc).\n    // This can be updated/removed at the same time.\n    // On the bright side, the API only reports one error (collection sync error).\n    reportAPIError(message) {\n        this.reportError(undefined, undefined, message);\n    }\n\n    reportUseElement(representation, opType) {\n        if (viewState.isSearchMode()) {\n            this.reportEvent('Search', viewState.isRootView() ? 'Root Search' : 'Search', 'click', 'result', { 'ui': { 'filter': viewState.getSearchType() } });\n            if (viewState.isStockSearchMode()) {\n                this.reportEvent('Stock', 'Stock Search', 'click', 'success', { 'ui': { 'filter': 'stock' } });\n            }\n        }\n\n        const extraMetrics = this.getExtraEventMetrics('reportUseElement');\n        this.clearExtraEventMetrics('reportUseElement');\n        const element = representation.element;\n        // Checking if triggered by right click\n        const isRightClick = extraMetrics && extraMetrics.isRightClick;\n        const eventProperties = {\n            content: {\n                category: opType === 'dragDrop' ? 'Drag Drop' : (isRightClick ? 'Right Click' : 'Click')\n            },\n            'env.com.name': 'CC Libraries Panel',\n            ...this._getUIPayload()\n        };\n        libraryManager._ccLibraries.utils.metrics.reportUseElement(element, eventProperties);\n    }\n\n    reportCreateLink() {\n        if (this._checkEnabled()) {\n            this.reportAPIEvent({ name: 'createLink' });\n        }\n    }\n\n    reportCheckoutElement() {\n        if (this._checkEnabled()) {\n            this.reportAPIEvent({ name: 'checkoutElement' });\n        }\n    }\n\n    reportPublishBrand(brand, eventProperties) {\n        libraryManager._ccLibraries.utils.metrics.reportPublishBrand(brand, eventProperties);\n    }\n\n    reportUnpublishBrand(brand, eventProperties) {\n        libraryManager._ccLibraries.utils.metrics.reportUnpublishBrand(brand, eventProperties);\n    }\n\n    reportStockEvent(subcategory, type, subtype, properties, stockComponent) {\n        properties = properties || {};\n        properties.ui = properties.ui || {};\n        if (subcategory === 'Search') {\n            const optionsArray = viewState.getStockSearchOptionValuesArray();\n            properties.ui.filter = optionsArray.length ? optionsArray.join(', ') : 'none';\n        }\n\n        if (stockComponent) {\n            // if stock component is element report as element event\n            if (stockComponent.library) {\n                return this.reportElementEvent('Stock', subcategory, type, subtype, stockComponent, properties);\n            }\n\n            // if stock component is stock asset then set properties and report as element event\n            properties.content = properties.content || {};\n            properties.content.name = stockComponent.title;\n            properties.content.type = stockComponent.content_type;\n            properties.content.status = stockComponent.is_licensed ? 'licensed' : 'unlicensed';\n        }\n        this.reportEvent('Stock', subcategory, type, subtype, properties);\n    }\n\n    _reportToProduct(eventName, properties) {\n        if (!this._checkEnabled()) { return; }\n        // Call the JSX layer to report metrics to the product if a callback is defined\n        if (configuration.currentProduct.reportEvent) {\n            configuration.currentProduct.reportEvent(eventName, properties);\n        }\n    }\n\n    // In case of operational events, we just want to send a subset of SDM data.\n    createBasePayload(isOperationalEvent = false) {\n        const basePayload = {\n            // TODO: event.ip, event.device_guid, consumer.client_id\n            'event.guid': generateGUID(),\n            'event.category': 'DESKTOP',\n            'event.user_guid': this.currentUserId || UNKNOWN_EVENT_ATTR_VALUE,\n            'event.offline': this.environment.offline ? true : false,\n            'event.language': environment.getLocale(),\n            'event.session_guid': imsInterface.imsRef,\n            'event.context_guid': UNKNOWN_EVENT_ATTR_VALUE,\n            'source.name': configuration.currentProduct.config.code,\n            'source.client_id': imsInterface.getEnvironment().clientId,\n            'source.version': this.environment.productVersion || UNKNOWN_EVENT_ATTR_VALUE,\n            'source.platform': environment.getOSName(),\n            'source.os_version': environment.getOSVersion(),\n\n            'user.service_code': 'creativecloud',\n            'user.service_level': this.userAccountStatus,\n\n            'env.com.name': 'CC Libraries Panel',\n            'env.com.version': versionManager.getPluginVersion()\n        };\n\n        try {\n            //@ts-ignore\n            basePayload['event.org_guid'] = window?.top?.corpId || UNKNOWN_EVENT_ATTR_VALUE;\n        } catch {\n            basePayload['event.org_guid'] = UNKNOWN_EVENT_ATTR_VALUE;\n        }\n\n        if (configuration.currentProduct.config.reportUserRoleInAnalytics) {\n            if (environment.rawIsBrandCreator === undefined) {\n                // just incase our event beats the web component init\n                basePayload['content.author'] = UNKNOWN_EVENT_ATTR_VALUE;\n            } else {\n                basePayload['content.author'] = environment.rawIsBrandCreator ? 'editor' : 'collaborator';\n            }\n        }\n\n        if (!isOperationalEvent) {\n            // Add consumer information\n            // Consumer is the app using the panel\n            basePayload['consumer.name'] = this.environment.consumer || configuration.currentProduct.config.code;\n            basePayload['consumer.version'] = environment.getAppVersion();\n            basePayload['consumer.platform'] = environment.getOSName();\n            basePayload['consumer.os_version'] = environment.getOSVersion();\n        }\n\n        // Add UI data\n        Object.assign(basePayload, this._getUIPayload(isOperationalEvent));\n\n        return basePayload;\n    }\n\n    _getUIPayload(isOperationalEvent = false) {\n        const payload = {};\n\n        if (!isOperationalEvent) {\n            payload['ui.view_type'] = viewState.viewState,\n            payload['ui.sort_order'] = viewState.elementSortState + (viewState.elementSortDescendingState ? '-descending' : '');\n\n            if (!environment.isLibraryManagerWindowOpen()) {\n                if (viewState.isRootView()) {\n                    // Root view\n                    payload['event.pagename'] = 'Root View';\n                } else if (viewState.isOneUpMode()) {\n                    // Element 1Up\n                    payload['event.pagename'] = '1Up View';\n                    if (libraryManager.currentLibrary) {\n                        // current library will be undefined when the oneup was opened from a root view search.\n                        payload['event.pagetype'] = libraryManager.currentLibrary.documentId ? 'published' : 'traditional';\n                    }\n                } else if (libraryManager.currentLibrary.isDocumentAssets) {\n                    // Document Assets\n                    payload['event.pagename'] = 'Document Assets View';\n                } else {\n                    // Library\n                    payload['event.pagename'] = 'Library View';\n                    // Published vs Traditional\n                    payload['event.pagetype'] = libraryManager.currentLibrary.documentId ? 'published' : 'traditional';\n                }\n            }\n\n            if (!viewState.isSearchMode()) {\n                if (viewState.viewByState === 'type') {\n                    payload['ui.filter'] = `by-${viewState.viewByState}`;\n                } else {\n                    payload['ui.filter'] = `by-group-${viewState.viewByGroupMode}`;\n                }\n            }\n        }\n\n        if (configuration.currentProduct.isExpandedView) {\n            // Expanded view vs. Editor view\n            payload['event.pagetype'] = configuration.currentProduct.isExpandedView() ? 'expanded-view' : 'editor-view';\n        }\n\n        payload['ccl.is_mobile_view'] = !!environment.isMobileView;\n\n        return payload;\n    }\n\n    _initializeIngest(userId) {\n        Ingest.init({\n            log(msg) {\n                if (featureFlags.get('logIngestAPI')) {\n                    debugLog.log(msg);\n                }\n            },\n            getAccessToken(callback) {\n                imsInterface.getAccessToken(userId).then((accessToken) => {\n                    callback(null, accessToken);\n                }, function(error) {\n                    callback(error);\n                });\n            },\n            clearAccessToken() {\n                imsInterface.clearAccessToken();\n            }\n        }, {\n            ENVIRONMENT: imsInterface.getEnvironment().label === 'Staging' ? 'stage' : 'prod',\n            ANALYTICS_ENABLED: this.isEnabled(),\n            ANALYTICS_API_KEY:  this.analyticsApiKey(),\n            ANALYTICS_X_PRODUCT: this.environment.product + '/' + this.environment.productVersion,\n            ANALYTICS_X_PRODUCT_LOCATION: this.productLocation,\n            ANALYTICS_USER_AGENT: window.navigator.userAgent,\n            ANALYTICS_PROJECT: configuration.ANALYTICS_PROJECT,\n            ANALYTICS_INGEST_TYPE: configuration.ANALYTICS_INGEST_TYPE,\n            ANALYTICS_MAX_QUEUED_EVENTS: configuration.ANALYTICS_MAX_QUEUED_EVENTS,\n            ANALYTICS_DEBOUNCE: configuration.ANALYTICS_DEBOUNCE\n        });\n    }\n\n    _getLibraryProperties(library) {\n        if (!library) {\n            return {};\n        }\n        let shareStatus = 'private';\n        if (isPublicLibrary(library)) {\n            shareStatus = 'follow';\n        } else if (library.collaboration) {\n            if (library.collaboration === 'outgoing') {\n                shareStatus = 'owner';\n            } else {\n                shareStatus = library.isWritable ? 'edit' : 'view';\n            }\n        }\n        shareStatus = library.toolkitId ? 'presets' : shareStatus;\n\n        // Don't set content.author to the share status if we're using it for the user role in brands\n        const content = configuration.currentProduct.config.reportUserRoleInAnalytics ? { } : { content: { author: shareStatus } };\n\n        return {\n            ...content,\n            event: { context_guid: library.id },\n            ccl: { library_storage_type: this._libraryStorageType(library) },\n            'custom.library': { filter: isBrandLibrary(library) ? 'brands' : 'libraries' }\n        };\n    }\n\n    _getElementProperties(element) {\n        if (!element) { return {}; }\n        const representation = element.getPrimaryRepresentation();\n        const trackingData = representation && representation.getValue(configuration.STOCK_NAMESPACE, configuration.STOCK_DATA_KEY);\n        const properties = this._getLibraryProperties(element.library);\n\n        properties.ccl = properties.ccl || { library_storage_type: null };\n\n        if (trackingData) {\n            properties.ccl.tracking_data = JSON.stringify(trackingData);\n        }\n\n        const linkedData = {\n            isLinked: false\n        };\n\n        if (element.isLinked) {\n            const linkedElement = element.linkedElement;\n            const linkedElementLibrary = linkedElement && linkedElement.library;\n            linkedData.isLinked = element.isLinked;\n            linkedData.linkedLibraryType = linkedElementLibrary && linkedElementLibrary.documentId ? 'published' : 'traditional';\n        }\n        properties.ccl.asset_linked_data = JSON.stringify(linkedData);\n\n        properties.content = properties.content || { author: null, };\n        properties.content.id = element.id;\n        properties.content.action = element.getValue && element.getValue('capture', 'data') ? element.getValue('capture', 'data').app?.split('-')[0] : element.createdContext && element.createdContext.app;\n        properties.content.mimetype = element.type;\n        properties.content.type = elementConfiguration.getShortType(element.type);\n        properties.content.size = librarySizeManager.getSize(element);\n        properties.content.extension = elementConfiguration.getBadgeText(element);\n        if (AdobeStockUtils.isStockAsset(element)) {\n            properties.content.status = AdobeStockUtils.isLicensed(element) ? 'licensed' : 'unlicensed';\n        }\n        const addtionalMetaData = this._getElementMetaData(element);\n        this._extendProperties(properties, addtionalMetaData);\n        return properties;\n    }\n\n    _getGroupProperties(group) {\n        if (!group) { return {}; }\n        // Get event.context_guid and content.author from the library\n        const properties = this._getLibraryProperties(group.library);\n        properties.content = properties.content || { author: null, };\n        properties.content.id = group.id;\n        properties.content.type = 'group';\n        return properties;\n    }\n\n    _extendProperties(properties, additionalProperties) {\n        Object.keys(additionalProperties).forEach(key => {\n            properties[key] = Object.assign(properties[key] || {}, additionalProperties[key]);\n        });\n        return properties;\n    }\n\n    _getElementMetaData(element) {\n        const assetRoleInfo = {\n            'custom.library': {\n                'asset_role': elementConfiguration.getElementRole(element) || 'none',\n                'asset_priority': elementConfiguration.getElementPriority(element) || 'none',\n            }\n        };\n        const shortType = elementConfiguration.getShortType(element.type);\n        let customElementData;\n        switch (shortType) {\n        case 'color': customElementData = this._getColorElementMetaData(element); break;\n        case 'font': customElementData = this._getFontElementMetaData(element); break;\n        case 'image': customElementData = this._getImageElementMetaData(element); break;\n        default: customElementData = {}; break;\n        }\n        return { ...assetRoleInfo, ...customElementData };\n    }\n\n    _getColorElementMetaData(element) {\n        const rep = element.getPrimaryRepresentation();\n        const data = rep?.getValue('color', 'data');\n        if (data?.value) {\n            const { r, g, b } = data.value;\n            const hex = rgbToHex(r, g, b);\n            return {\n                'custom.content': {\n                    name: hex\n                }\n            };\n        }\n        return {};\n    }\n    _getFontElementMetaData(element) {\n        const rep = element.getPrimaryRepresentation();\n        const data = rep?.getValue('font', 'data');\n        if (data) {\n            return {\n                'custom.content': {\n                    name: data.postScriptName,\n                    status: data.isPremium ? 'premium' : 'free'\n                }\n            };\n        }\n        return {};\n    }\n    _getImageElementMetaData(element) {\n        return {\n            'custom.content': {\n                name: element.name || ''\n            }\n        };\n    }\n\n    _libraryStorageType(library) {\n        if (isTeamLibrary(library)) {\n            return 'business';\n        } else {\n            return 'user';\n        }\n    }\n}\n\nfunction generateGUID() {\n    return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n        const r = Math.random() * 16 | 0;\n        const v = (c === 'x') ? r : (r & 0x3 | 0x8);\n        return v.toString(16);\n    });\n}\n\nexport default new Metrics();\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2013 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\n/**\n    Service for reporting operational metrics to dunamis using new dunamis-cclibrary lib.\n**/\n\nimport IngestAPI from '@ccx-public/ingest';\nimport metrics from 'app/js/interface/metrics';\nimport debugLog from '../utils/debugLog';\nimport imsInterface from 'app/js/interface/imsInterface';\nimport configuration from 'app/js/config/configuration';\nimport * as Sentry from '@sentry/browser';\n\nexport const SUBTYPE = {\n    Init: 'init',\n    Create: 'create',\n    Read: 'read',\n    Update: 'update',\n    Delete: 'delete',\n    Move: 'move',\n    Copy: 'copy',\n    Duplicate: 'duplicate',\n    Publish: 'publish'\n};\n\nexport const WORKFLOW = {\n    Creation: 'Creation',\n};\n\nexport const SUBCATEGORY = {\n    Component: 'Component',\n    Element: 'Element',\n    Library: 'Library',\n};\n\nexport const CrudResult = {\n    Success: 'success'\n};\n\nclass OperationalMetrics {\n    operationalIngestClient;\n\n    initializeOperationalMetrics(userId) {\n        this.operationalIngestClient = new IngestAPI({\n            log(msg) {\n                debugLog.log(msg);\n            },\n            getAccessToken(callback) {\n                imsInterface.getAccessToken(userId).then((accessToken) => {\n                    callback(null, accessToken);\n                }, function(error) {\n                    callback(error);\n                });\n            },\n            clearAccessToken() {\n                imsInterface.clearAccessToken();\n            }\n        },\n        {\n            ENVIRONMENT: imsInterface.getEnvironment().label === 'Staging' ? 'stage' : 'prod',\n            ANALYTICS_API_KEY: metrics.analyticsApiKey(),\n            ANALYTICS_X_PRODUCT: metrics.environment.product + '/' + metrics.environment.productVersion,\n            ANALYTICS_X_PRODUCT_LOCATION: 'libraries/' + (process.env.NODE_ENV === 'production' ? metrics.environment.version : 'DEV'),\n            ANALYTICS_USER_AGENT: window.navigator.userAgent,\n            ANALYTICS_PROJECT: configuration.ANALYTICS_PROJECT,\n            ANALYTICS_INGEST_TYPE: configuration.ANALYTICS_INGEST_TYPE,\n            ANALYTICS_MAX_QUEUED_EVENTS: configuration.ANALYTICS_MAX_QUEUED_EVENTS,\n            ANALYTICS_DEBOUNCE: configuration.ANALYTICS_DEBOUNCE\n        });\n        this.operationalIngestClient.enable(true);\n    }\n\n    getElementPayload(element) {\n        const eventPayload = {};\n        metrics.updateEventPayload(metrics._getElementProperties(element), eventPayload);\n\n        return Object.assign({}, metrics.createBasePayload(true), eventPayload);\n    }\n\n    getLibraryPayload(library) {\n        const eventPayload = {};\n        metrics.updateEventPayload(metrics._getLibraryProperties(library), eventPayload);\n\n        return Object.assign({}, metrics.createBasePayload(true), eventPayload);\n    }\n\n    addExtraMetrics(eventPayload, extraMetrics) {\n        if (extraMetrics.event) {\n            Object.keys(extraMetrics.event).forEach((key) => eventPayload[`event.${key}`] = extraMetrics.event[key]);\n        }\n\n        if (extraMetrics.ccl) {\n            Object.keys(extraMetrics.ccl).forEach((key) => eventPayload[`ccl.${key}`] = extraMetrics.ccl[key]);\n        }\n\n        return eventPayload;\n    }\n\n    sendCreateLibraryEvent(library, extraMetrics = {}) {\n        const baseEventAttrs = {\n            'event.workflow': WORKFLOW.Creation,\n            'event.subcategory': SUBCATEGORY.Library,\n            'event.type': CrudResult.Success,\n            'event.subtype': SUBTYPE.Create,\n        };\n\n        return this.sendLibraryEvent(baseEventAttrs, library, extraMetrics);\n    }\n\n    sendCopyElementEvent(element) {\n        const baseEventAttrs = {\n            'event.workflow': WORKFLOW.Creation,\n            'event.subcategory': SUBCATEGORY.Element,\n            'event.type': CrudResult.Success,\n            'event.subtype': SUBTYPE.Copy,\n        };\n\n        return this.sendElementEvent(baseEventAttrs, element);\n    }\n\n    sendCreateElementEvent(element, extraMetrics = {}) {\n        const baseEventAttrs = {\n            'event.workflow': WORKFLOW.Creation,\n            'event.subcategory': SUBCATEGORY.Element,\n            'event.type': CrudResult.Success,\n            'event.subtype': SUBTYPE.Create,\n        };\n\n        return this.sendElementEvent(baseEventAttrs, element, extraMetrics);\n    }\n\n    sendDeleteElementEvent(element) {\n        const baseEventAttrs = {\n            'event.workflow': WORKFLOW.Creation,\n            'event.subcategory': SUBCATEGORY.Element,\n            'event.type': CrudResult.Success,\n            'event.subtype': SUBTYPE.Delete,\n        };\n\n        return this.sendElementEvent(baseEventAttrs, element);\n    }\n\n    sendDeleteLibraryEvent(library) {\n        const baseEventAttrs = {\n            'event.workflow': WORKFLOW.Creation,\n            'event.subcategory': SUBCATEGORY.Library,\n            'event.type': CrudResult.Success,\n            'event.subtype': SUBTYPE.Delete,\n        };\n\n        return this.sendLibraryEvent(baseEventAttrs, library);\n    }\n\n    sendDuplicateElementEvent(element) {\n        const baseEventAttrs = {\n            'event.workflow': WORKFLOW.Creation,\n            'event.subcategory': SUBCATEGORY.Element,\n            'event.type': CrudResult.Success,\n            'event.subtype': SUBTYPE.Duplicate,\n        };\n\n        return this.sendElementEvent(baseEventAttrs, element);\n    }\n\n    sendMoveElementEvent(element) {\n        const baseEventAttrs = {\n            'event.workflow': WORKFLOW.Creation,\n            'event.subcategory': SUBCATEGORY.Element,\n            'event.type': CrudResult.Success,\n            'event.subtype': SUBTYPE.Move,\n        };\n\n        return this.sendElementEvent(baseEventAttrs, element);\n    }\n\n    sendMoveLibraryEvent(library) {\n        const baseEventAttrs = {\n            'event.workflow': WORKFLOW.Creation,\n            'event.subcategory': SUBCATEGORY.Library,\n            'event.type': CrudResult.Success,\n            'event.subtype': SUBTYPE.Move,\n        };\n\n        return this.sendLibraryEvent(baseEventAttrs, library);\n    }\n\n    sendPublishLibraryEvent(library) {\n        const baseEventAttrs = {\n            'event.workflow': WORKFLOW.Creation,\n            'event.subcategory': SUBCATEGORY.Library,\n            'event.type': CrudResult.Success,\n            'event.subtype': SUBTYPE.Publish,\n        };\n\n        return this.sendLibraryEvent(baseEventAttrs, library);\n    }\n\n    sendUpdateElementEvent(element) {\n        const baseEventAttrs = {\n            'event.workflow': WORKFLOW.Creation,\n            'event.subcategory': SUBCATEGORY.Element,\n            'event.type': CrudResult.Success,\n            'event.subtype': SUBTYPE.Update,\n        };\n\n        return this.sendElementEvent(baseEventAttrs, element);\n    }\n\n    sendElementEvent(baseEventAttrs, element, extraMetrics = {}) {\n        // Wait for the element to be uploaded to the backend before reporting on it.\n        // The placeholder element will not have accurate reporting data, so wait until\n        // the accurate element data is available. This should only wait on newly created\n        // elements. For most events, the element will have already been committed and\n        // this should be a resolved promise.\n        return element.committed?.then(() => {\n            const eventPayload = Object.assign({}, this.getElementPayload(element), baseEventAttrs);\n\n            if (Object.keys(extraMetrics).length !== 0) {\n                this.addExtraMetrics(eventPayload, extraMetrics);\n            }\n\n            this.sendEvent(eventPayload);\n        }).catch(() => {});\n    }\n\n    sendLibraryEvent(baseEventAttrs, library, extraMetrics = {}) {\n        // Wait for the library to be committed to the backend before reporting on it.\n        // The placeholder library will not have accurate reporting data (example: personal\n        // vs. business storage - all placeholder libraries report personal storage), so\n        // wait until the accurate library data is available. This should only wait on\n        // newly created libraries. For most events, the library will have already been\n        // committed and this should be a resolved promise.\n        return library.committed?.then(() => {\n            const eventPayload = Object.assign({}, this.getLibraryPayload(library), baseEventAttrs);\n\n            if (Object.keys(extraMetrics).length !== 0) {\n                this.addExtraMetrics(eventPayload, extraMetrics);\n            }\n\n            this.sendEvent(eventPayload);\n        }).catch(() => {});\n    }\n\n    sendEvent(payload) {\n        try {\n            debugLog.log('Operational Event: ' + JSON.stringify(payload));\n\n            this.operationalIngestClient.postEvent(payload);\n        } catch (error) {\n            Sentry.captureException(error);\n\n            debugLog.log('Error sending Operational Event: ' + error);\n        }\n    }\n}\n\nexport default new OperationalMetrics();\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2013 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\n/**\n * Manager for requests to the target application (e.g. for editing an element in a library)\n */\nexport default class AppRequestManager {\n\n    _editRequestRefs = {};\n    _chooseRequestRef = undefined;\n\n    setEditRequestRef(elementRef, requestRef) {\n        if (elementRef) {\n            this._editRequestRefs[elementRef] = requestRef;\n        }\n    }\n\n    getEditRequestRef(elementRef) {\n        return this._editRequestRefs[elementRef];\n    }\n\n    clearEditRequestRef(elementRef) {\n        delete this._editRequestRefs[elementRef];\n    }\n\n    setChooseRequestRef(requestRef) {\n        this._chooseRequestRef = requestRef;\n    }\n\n    getChooseRequestRef() {\n        return this._chooseRequestRef;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from '../config/configuration';\nimport elementConfiguration from '../config/elementConfiguration';\nimport * as CaptureUtils from 'app/js/utils/captureUtils';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport dialogManager from 'app/js/managers/dialogManager';\nimport environment from 'app/js/environment';\nimport metrics from '../interface/metrics';\nimport { addListenerManager } from '../utils/listenerUtils';\nimport viewState from '../state/viewState';\nimport * as AdobeStockUtils from '../utils/adobeStockUtils';\nimport { checkElementWritable, getElementModifiedTime } from '../utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport AppRequestManager from './utils/AppRequestManager';\n\n// @private\nfunction getUsablePathForElement(element) {\n    const representation = elementConfiguration.findUsableRepresentation(element);\n    if (representation) {\n        return representation.getContentPath();\n    }\n\n    // If we can't find a representation to use, get the rendition path.\n    return element.getThumbnailPath();\n}\n\n/**\n * Interfacing with the product via CEP - this handles both sending and receiving events\n */\nexport class ProductInterface {\n\n    _appRequestManager = new AppRequestManager();\n\n    constructor() {\n        this._listenerManager = addListenerManager(this, [ 'elementDropped' ]);\n    }\n\n    // When right clicking a linked element (possibly with a broken link) in the Layer panel and choosing\n    // \"relink to Library Graphic\", a dlElementChoose event will be heard by the panel.\n    // Documentation on Linked Elements: https://wiki.corp.adobe.com/display/ccprojects/Linked+Library+Elements+-+Architecture\n    async invokeChooseElement({ requestRef, elementRef, elementName, operation, elementType }) {\n        this._appRequestManager.setChooseRequestRef(requestRef);\n\n        let element;\n        if (elementRef) {\n            element = await libraryManager.resolveElementReference(elementRef);\n            elementName = elementName || (element && element.name);\n        }\n\n        const overlayMessage = configuration.currentProduct.customOverlayMessage && configuration.currentProduct.customOverlayMessage(operation, elementType);\n\n        if (operation === 'place') {\n            viewState.setRelinkLayerMode({\n                message: translate('DL_RELINK_PLACE_MESSAGE'),\n                actionMessage: translate('DL_PLACE'),\n                missing: false,\n                overlayMessage: overlayMessage || translate('DL_RELINK_PLACE_OVERLAY_MESSAGE')\n            }, elementType);\n        } else {\n            viewState.setRelinkLayerMode({\n                message: translate('DL_RELINK_' + operation.toUpperCase() + '_MESSAGE', { elementName }),\n                actionMessage: translate('DL_RELINK'),\n                missing: elementRef && !element, // Missing if elementRef is passed but we can't find the element\n                overlayMessage: overlayMessage || translate('DL_RELINK_RELINK_OVERLAY_MESSAGE')\n            }, elementType);\n        }\n\n        // TODO: This should go into setRelinkLayerMode but we currently can't do it because of the circular dependency issues.\n        const selections = elementSelectionState.selection;\n        if (selections.length > 1 || (selections[0] && selections[0].type !== configuration.IMAGE_ELEMENT_TYPE)) {\n            // Clear the selection if there is multiple selection or the selection is not a graphic element\n            elementSelectionState.clearSelection();\n        }\n    }\n\n    cancelChooseElement() {\n        viewState.resetMode();\n    }\n\n    async openElementForEdit({ elementRef, requestRef }) {\n        const element = await libraryManager.resolveElementReference(elementRef);\n\n        if (!element || !checkElementWritable(element)) {\n            return;\n        }\n\n        this._appRequestManager.setEditRequestRef(elementRef, requestRef);\n\n        const editOperation = elementConfiguration.getEditOperations(element).find(op => op.onEditItem);\n        if (editOperation) {\n            metrics.reportElementEvent('Operations', 'Edit', 'click', 'start', element);\n            // Also reveal the element you're editing\n            elementSelectionState.revealElement(element);\n            editOperation.apply();\n        }\n    }\n\n    async revealElement({ elementRef }) {\n        const element = await libraryManager.resolveElementReference(elementRef);\n        elementSelectionState.revealElement(element);\n    }\n\n    async reportElementLinkCreated({ elementRef, cause }) {\n        const element = await libraryManager.resolveElementReference(elementRef);\n        if (element) {\n            metrics.reportCreateLink(element, cause || 'createElement');\n        }\n    }\n\n    async reportElementDropped({ elementRef, details, linked, x, y } = {}) {\n        this._listenerManager.notify('elementDropped', { elementRef, details, linked, x, y });\n\n        const element = await libraryManager.resolveElementReference(elementRef);\n        const usedRepresentation = element && elementConfiguration.findUsableRepresentation(element);\n        if (!usedRepresentation) {\n            return;\n        }\n\n        metrics.reportUseElement(usedRepresentation, 'dragDrop', details);\n\n        // As of CEP 6.0.0.75 all event.data members are strings, even it source JSON\n        // specifies bools, numbers, objects, arrays, etc, so handle the string case\n        // here but future proof for the boolean case.\n        const isLinked = typeof linked === 'string' ? linked.toLowerCase() === 'true' : linked;\n        if (isLinked) {\n            metrics.reportCreateLink(element, 'dragDrop');\n        }\n    }\n\n    createLibrary({ name, enforceUniqueName, makeCurrent }) {\n        let libraryName = name || translate('DL_DEFAULT_LIBRARY_NAME');\n\n        // Make the library name unique if requested.\n        // We add ' N' to the end where N is the next unused number.\n        if (enforceUniqueName) {\n            const libraryNames = libraryManager.libraries\n                .filter(library => !library.isDeletedFromServer)\n                .map(library => library.name);\n\n            const baseName = libraryName;\n            let suffix = 2;\n            while (libraryNames.includes(libraryName)) {\n                libraryName = baseName + ' ' + suffix++;\n            }\n        }\n\n        const library = libraryManager.createLibrary(libraryName);\n\n        if (library && makeCurrent) {\n            // Reset the view or delete/rename dialogs can be left referring\n            // to an inactive library but acting on the new library.\n            dialogManager.closeDialog();\n            viewState.resetMode();\n            libraryManager.currentLibrary = library;\n        }\n\n        return library;\n    }\n\n    setCurrentLibrary({ libraryId }) {\n        libraryManager.waitForInitialLoad().then(() => {\n            const library = libraryManager.getLibraryById(libraryId);\n            if (library) {\n                viewState.resetMode();\n                libraryManager.currentLibrary = library;\n            }\n        });\n    }\n\n    invokeVisualSearch({ imagePath, deleteFileAfterUse }) {\n        viewState.setFindSimilarSearchMode(undefined, undefined, imagePath, deleteFileAfterUse);\n    }\n\n    launchCaptureWorkflow({ assetType, imageUriList }) {\n        viewState.resetMode();\n        CaptureUtils.openCaptureForAssetType(assetType, imageUriList);\n    }\n\n    startDragFromProduct(dragData) {\n        viewState.startDragFromProduct(dragData);\n    }\n\n    endDragFromProduct() {\n        viewState.endDragFromProduct();\n    }\n\n    _getElementEventData(element, path, additionalProperties) {\n        const eventData = {\n            elementRef  : element.getLegacyReference(),\n            name        : element.name,\n            libraryName : element.library.name,\n            modifiedTime: getElementModifiedTime(element),\n            creationTime: element.created,\n            data        : [ path ],\n            ...additionalProperties\n        };\n\n        if (AdobeStockUtils.isStockAsset(element)) {\n            eventData.adobeStock = {\n                id: AdobeStockUtils.getStockId(element),\n                license: AdobeStockUtils.isLicensed(element)\n            };\n        }\n\n        return eventData;\n    }\n\n    startListening() {\n        environment.connectProductInterface(this);\n    }\n\n    stopListening() {\n        environment.disconnectProductInterface();\n    }\n\n    /**\n     * Let the product know that a library element was created.\n     * @param {ElementModel} newElement\n     * @param {Object} appMetadata\n     */\n    sendElementCreated(newElement, appMetadata) {\n        if (!environment.notifyElementCreated) {\n            return;\n        }\n\n        getUsablePathForElement(newElement).then(path => {\n            // Backwards compatibility; remove after apps have switched to looking\n            // for these inside of 'appMetadata'\n            const { documentId, layerIds } = appMetadata || {};\n            const eventData = this._getElementEventData(newElement, path, { appMetadata, documentId, layerIds });\n            environment.notifyElementCreated(eventData);\n        });\n    }\n\n    /**\n     * Let the product know that the user selected an element, in 'choose element' mode.\n     * If no element is passed in, this lets the product know that the user cancelled the 'choose element' mode.\n     *\n     * @param {ElementModel} element\n     */\n    sendElementChosen(element) {\n        if (!environment.notifyElementChosen) {\n            return;\n        }\n\n        const requestRef = this._appRequestManager.getChooseRequestRef();\n        if (!element) {\n            environment.notifyElementChosen({ requestRef });\n            return;\n        }\n\n        getUsablePathForElement(element).then(path => {\n            const eventData = this._getElementEventData(element, path, { requestRef });\n            environment.notifyElementChosen(eventData);\n        });\n    }\n\n    /**\n     * Let the product know that a library element was modified.\n     * @param {RepresentationModel} representation\n     */\n    sendElementUpdated(representation) {\n        if (!representation || !environment.notifyElementUpdated) {\n            return;\n        }\n\n        const element = representation.element;\n        const elementRef = element.getLegacyReference();\n        const requestRef = this._appRequestManager.getEditRequestRef(elementRef);\n\n        representation.getContentPath().then(path => {\n            const eventData = this._getElementEventData(element, path, { requestRef });\n            environment.notifyElementUpdated(eventData);\n        });\n    }\n\n    /**\n     * Called when the element has finished being edited.\n     * @param {ElementModel} element\n     */\n    elementEditCompleted(element) {\n        // We are done with this element so remove the requestRef.\n        metrics.reportElementEvent('Operations', 'Edit', 'render', 'success', element);\n        const elementRef = element.getLegacyReference();\n        this._appRequestManager.clearEditRequestRef(elementRef);\n    }\n\n}\n\nexport default new ProductInterface();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\nimport { addListenerManager } from 'app/js/utils/listenerUtils';\n\n// All Vulcan messages start with this\nconst VULCAN_PREFIX = 'vulcan.SuiteMessage.';\n\nexport default class BaseVulcanInterface {\n\n    constructor() {\n        this._listenerManager = addListenerManager();\n    }\n\n    init() {\n    }\n\n    get _vulcanPrefix() {\n        return VULCAN_PREFIX;\n    }\n\n    get ccLibProcessSpecifier() {\n        return 'cclibraries';\n    }\n\n    get ccLibProcessSAPCode() {\n        return 'LIBS';\n    }\n\n    /**\n     * Utility for doing the port discovery in an agnostic way - will use either CEP or node.js vulcan wrapper.\n     * Pass this in as the vulcanCall dependency to the CC Libraries API-JS\n     * @param {string} requestType\n     * @param {Object} requestPayload\n     * @param {string} responseType\n     * @param {Function} callback\n     */\n    handlePortDiscoveryCall(requestType, requestPayload, responseType, callback) {\n        // The Libraries API includes the \"vulcan.SuiteMessage.\" prefix, so need to strip it\n        requestType = requestType.replace(VULCAN_PREFIX, '');\n        responseType = responseType.replace(VULCAN_PREFIX, '');\n\n        // Listen for the response\n        // eslint-disable-next-line prefer-const\n        let timeout;\n        const responseHandler = message => {\n            this.removeMessageListener(responseType, responseHandler);\n            clearTimeout(timeout);\n            if (!message) {\n                callback('NO_VULCAN_MESSAGE');\n                return;\n            }\n            callback(message.payload ? message.payload : message);\n        };\n\n        this.addMessageListener(responseType, responseHandler);\n        // If the timeout occurs before the listener, then we show the \"Something went wrong initializing\n        // Creative Cloud Library\" error, because the process is not connected and responding.\n        timeout = setTimeout(responseHandler, 3000);\n\n        // Send the request\n        this.sendMessage(requestType, requestPayload);\n    }\n\n    /**\n     * Calls the vulcan interface to send a message and revert back its response\n     * @param {Object} options - The options for the call. Following fields are supported:\n     *  - requestType: The request type\n     *  - responseType: The response type\n     *  - payload: [optional] The payload to send\n     *  - timeout: [optional] The timeout in milliseconds\n     * @returns {Promise} a Promise that resolves with the response message or rejects with an error.\n     */\n    call({ requestType, responseType, payload = '', timeout = 3000 }) {\n        return new Promise ((resolve, reject) => {\n            let timeoutId = null;\n\n            const responseHandler = (message, timeoutExpired) => {\n                if (!timeoutId) {\n                    // Already Promise is fulfilled or rejected.\n                    return;\n                }\n                this.removeMessageListener(responseType, responseHandler);\n                clearTimeout(timeoutId);\n                timeoutId = null;\n                if (timeoutExpired) {\n                    return reject(new Error('timed-out'));\n                }\n                resolve(message);\n            };\n\n            this.addMessageListener(responseType, responseHandler);\n\n            // If the timeout occurs before the listener, then we will reject the promise.\n            timeoutId = setTimeout(() => responseHandler(null, true), timeout);\n\n            // Send the request\n            this.sendMessage(requestType, payload);\n        });\n    }\n}\n\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { action, observable, computed } from 'mobx';\nimport environment from 'app/js/environment';\n\n/**\n * Managers for dialogs in the Libraries Manager and Panel - this handles the state of the currently open dialog.\n * If you want to show a dialog, just call `dialogManager.openDialog(name, params)`.\n *\n * Note that this is also used for other modal overlays, such as the overlays for onboarding.\n * The behavior for dialogs and modal overlays is to click outside (but in a div that covers the panel) to dismiss it.\n * An additional click is needed to interact with anything after that (unlike non-modal overlays (menus, etc) managed by OverlayState).\n *\n * WARNING: Singleton exported is for panel context. You should ideally not be using this, but instead access the correct dialogManager from the context/appState\n */\n\n/**\n * The base DialogManager class, used by the Library Manager context.\n */\n\nexport class BaseDialogManager {\n\n    _dialogs = {};\n\n    @observable.ref _currentDialog;\n\n    init(dialogs) {\n        dialogs.forEach(dialog => dialog && this.register(dialog));\n    }\n\n    register(dialogClass) {\n        this._dialogs[dialogClass.dialogName] = dialogClass;\n    }\n\n    @action\n    _openDialog = (name, params, onCloseCallback) => {\n        // If there is an open dialog through environment, we should close it first.\n        environment.hideDialog?.();\n        if (!this._dialogs[name]) {\n            throw new Error(`Open Dialog: Dialog of type ${name} does not exist.`);\n        }\n\n        // If the environment has an overriding renderer, we still track which dialogs are opened for state purposes.\n        if (environment.dialogOverrides && environment.dialogOverrides[name]) {\n            this._currentDialog = { name, params };\n            return environment.dialogOverrides[name](params, { close: [ () => { this._currentDialog = undefined; } ] });\n        }\n\n        this._currentDialog = { name, params };\n        this._onCloseCallback = onCloseCallback;\n    }\n\n    @action\n    _closeDialog = () => {\n        this._currentDialog = undefined;\n        this._onCloseCallback && this._onCloseCallback();\n        this._onCloseCallback = undefined;\n    }\n\n    // action fields cannot be reassigned, so these are separated out to be overwritten in the subclass\n    openDialog = (name, params, onCloseCallback) => { this._openDialog(name, params, onCloseCallback); }\n    closeDialog = () => { this._closeDialog(); }\n\n    @computed\n    get dialog() {\n        const data = this._currentDialog;\n        // Do not show dialog here if the environment has an overriding renderer.\n        if (data && !(environment?.dialogOverrides && environment.dialogOverrides[data.name])) {\n            const Dialog = this._dialogs[data.name];\n            const canDisplay = Dialog.canDisplay ? Dialog.canDisplay() : true;\n            return canDisplay ? <Dialog { ...(data.params || {}) } close={ this.closeDialog } /> : undefined;\n        }\n    }\n\n    @computed\n    get isDialogAlwaysInline() {\n        const data = this._currentDialog;\n        const Dialog = data && this._dialogs[data.name];\n        if (Dialog) {\n            return Dialog.isAlwaysInline;\n        }\n    }\n\n    @computed\n    get isTour() {\n        const data = this._currentDialog;\n        const Dialog = data && this._dialogs[data.name];\n        if (Dialog) {\n            return Dialog.isTour;\n        }\n    }\n\n    get dialogName() {\n        if (this._currentDialog) { return this._currentDialog.name; }\n    }\n\n    get dialogs() {\n        return this._dialogs;\n    }\n}\n\n/**\n * Manager for dialogs in the panel context (adds canvas click listener)\n */\n\nexport class PanelDialogManager extends BaseDialogManager {\n\n    openDialog = (name, params, onCloseCallback) => {\n        super._openDialog(name, params, onCloseCallback);\n        // We only want to dismiss dialogs upon clicking the canvas in the panel, not manager, context.\n        environment.addEventListener('canvasClick', this.closeDialog);\n    }\n\n    closeDialog = () => {\n        super._closeDialog();\n        environment.removeEventListener('canvasClick', this.closeDialog);\n    }\n}\n\n// Note: The singleton exported is for the panel context only. Ideally you should not be importing this file directly, but instead access it through the correct context.\nexport default new PanelDialogManager();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport * as FileUtils from 'app/js/utils/fileUtils';\n\nconst guidExpr = new RegExp(/^.*_([0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}).*$/);\n\n/*\n * Listen to change events (save and close) on an open document.\n * The DocumentWatchManager is a singleton that ensures there's only one listener on a document at a time.\n*/\n\nexport class DocumentWatchManager {\n\n    _nextListenerId = 0;\n    _listenerMap = {};\n\n    _getNewListenerId() {\n        return 'documentListener' + this._nextListenerId++;\n    }\n\n    // Sets the modified timestamp of the file, and returns true if this was different from the last modified timestamp\n    _updateModifiedTimestamp(listener) {\n        let mtime;\n        if (listener.path) {\n            const stat = FileUtils.statFile(listener.path);\n            mtime = stat && stat.mtime;\n        }\n\n        const modified = !listener.mtime || !mtime || listener.mtime.getTime() !== mtime.getTime();\n        listener.mtime = mtime;\n\n        return modified;\n    }\n\n    _onDocumentStateChangeEvent = ({ type, path }) => {\n        Object.keys(this._listenerMap).forEach(key => {\n            const listener = this._listenerMap[key];\n\n            // If we have a guid, we'll just look for that in the eventPath - otherwise we fall back to the filename\n            const listenerMatchPath = listener.tempFileId || listener.fileName;\n\n            if (path.includes(listenerMatchPath)) {\n                if (type === 'deactivated') {\n                    // If the document is deactivated, the user may have switched to a different document,\n                    // or actually closed the document - we don't know which, so we have to check:\n                    environment.isDocumentOpen(listener.path).then(isOpen => !isOpen && listener.callback('closed'));\n                } else if (type === 'closed') {\n                    listener.callback('closed');\n                } else if (type === 'saved') {\n                    // If document was changed & then saved\n                    // Need to check the modified timestamp to see if it actually changed!\n                    // (it could be in a saved state, but no changes had been made)\n                    if (this._updateModifiedTimestamp(listener)) {\n                        listener.callback('saved');\n                    }\n                }\n            }\n        });\n    }\n\n    // Starts and stops listening to document state changes from the app, depending on if there are any listeners.\n    _ensureListener() {\n        if (!environment.addDocumentChangeListener) {\n            return;\n        }\n\n        const numListeners = Object.keys(this._listenerMap).length;\n        if (numListeners === 1) {\n            // If it's the first document watch, then start listening for change events from the app.\n            environment.addDocumentChangeListener(this._onDocumentStateChangeEvent);\n        } else if (numListeners === 0) {\n            // If the last document watch is removed, then stop listening for document changes.\n            environment.removeDocumentChangeListener(this._onDocumentStateChangeEvent);\n        }\n    }\n\n    /**\n     * Start listening to a document.\n     * @param {string} fileName - Should be of the form <name>.<extension> preferably, or\n     *      <name>_<guid>.<extension> (We support this format for ILST/IDSN since there were encoding\n     *      issues with their names that prevented us from directly comparing the file path, so we use the guid instead.)\n     * @param {string} path - full file path\n     * @param {Function} callback - A Function expecting the 'closed' or 'saved' event.\n     * @returns {string} listenerId - e.g. 'documentListener1'\n     */\n    startListening(fileName, path, callback) {\n        // Check if we're already listening for the given path - don't allow us to listen twice\n        const hasListener = Object.keys(this._listenerMap).some(id => this._listenerMap[id].path === path);\n        if (hasListener) { return; }\n\n        // If there is a guid in the name, we use it for comparison in the listener.\n        // The correct solution would be to pass this into the startListening() call, but for now we want to make the minimal change,\n        // so let's parse the fileName for the <guid>.\n        const guidMatch = guidExpr.exec(path);\n        const tempFileId = guidMatch && guidMatch[1];\n\n        const listener = {\n            fileName,\n            path,\n            tempFileId,\n            callback\n        };\n        const listenerId = this._getNewListenerId();\n\n        this._updateModifiedTimestamp(listener);\n        this._listenerMap[listenerId] = listener;\n        this._ensureListener();\n\n        return listenerId;\n    }\n\n    /**\n     * Stop listening to changes on a document.\n     * @param {string} listenerId\n     */\n    stopListening(listenerId) {\n        const listener = this._listenerMap[listenerId];\n        if (listener) {\n            delete this._listenerMap[listenerId];\n            this._ensureListener();\n        }\n    }\n}\n\nexport default new DocumentWatchManager();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\nimport appState from 'app/js/appState';\nimport dragManager from 'app/js/managers/dragManager';\n\nexport default class BaseDropTarget {\n\n    constructor(dropTarget) {\n        // Provides parameters of the drop target\n        this._dropTarget = dropTarget;\n    }\n\n    get x() {\n        return this._dropTarget.x;\n    }\n\n    get y() {\n        return this._dropTarget.y;\n    }\n\n    get width() {\n        return this._dropTarget.width;\n    }\n\n    get height() {\n        return this._dropTarget.height;\n    }\n\n    get group() {\n        return this._dropTarget.group;\n    }\n\n    /**\n     * A \"main\" target is specified when a drop target's state should be dependent on another's.\n     * This is a useful concept for drag-drop during path view where dragging over a group\n     * should \"unwrap\" its path, spawning all ancestors, adding a valid drop target for each;\n     * the original group's target is specified as the \"main\" target for all spawned targets, since\n     * the original group's target should remain as the `holdingDropTarget` while any of its dependents is \"active\" -\n     * otherwise, if the user hovered over one of the spawned ancestors, the original group would be \"deactivated\"\n     * and the spawned ancestor would be removed from the view. For more context on how this works,\n     * search for \"dragManager.isHoldingDragOverGroup(group)\" in LibraryContentsView.groupedItems.\n     */\n    get mainDropTarget() {\n        return this._dropTarget.mainDropTarget;\n    }\n\n    get viewState() {\n        return appState.panel.viewState;\n    }\n\n    get isHoldingDrag() {\n        // The user is holding the drag over this target if they're holding over this target's group, or over this target's \"main\"'s group.\n        return dragManager.isHoldingDragOverGroup(this.group) || this.mainDropTarget?.isHoldingDrag;\n    }\n\n    onDrop() {\n        throw 'You need to implement this in the subclass.';\n    }\n\n    _activate = () => {\n        dragManager.handleHoldDragStart(this);\n    }\n\n    _groupActivateTimeout = null;\n\n    onActivate() {\n        if (this.group && this.group.id) {\n            this._groupActivateTimeout = setTimeout(this._activate, 1000);\n        }\n    }\n\n    onDeactivate() {\n        clearTimeout(this._groupActivateTimeout);\n        dragManager.handleHoldDragEnd();\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport BaseDropTarget from './baseDropTarget';\nimport { addElementsToGroup, reorderElements, copyOrMoveElements } from 'app/js/utils/libraryUtils';\nimport metrics from 'app/js/interface/metrics';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport appState from 'app/js/appState';\nimport { areValidDescendants } from 'app/js/utils/groupUtils';\nimport configuration from 'app/js/config/configuration';\n\n/**\n * ElementDropTarget provides information about where we are able to drop an element.\n * Represents the area directly under the dragged element in a group, or else the whole empty group, ungrouped section, or collapsed group header.\n */\n\nexport default class ElementDropTarget extends BaseDropTarget {\n\n    get type() {\n        return 'element';\n    }\n\n    get beforeElement() {\n        return this._dropTarget.beforeElement;\n    }\n\n    get afterElement() {\n        return this._dropTarget.afterElement;\n    }\n\n    get isRowEnd() {\n        return this._dropTarget.isRowEnd;\n    }\n\n    isValidDropTarget(dragData) {\n        // Drop target is invalid if dragging to another group and disableDraggingFromOutside\n        const draggedGroups = dragData && dragData.length > 0 && ([ ...new Set(dragData.map(element => element.getGroups && element.getGroups()[0])) ]);\n        const isDocumentAssets = dragData && Array.isArray(dragData) && dragData.find(element => element.library && element.library.isDocumentAssets);\n        const isReadOnlyGroups = configuration.currentProduct.config.readOnlyGroups;\n\n        if (isDocumentAssets && !areValidDescendants(draggedGroups, this.group) || isReadOnlyGroups) {\n            return false;\n        }\n\n        // If dragging only one element, dropping it before/after itself would cause no update. Dragging multiple elements will always cause an update.\n        return dragData.length > 1 ? true : dragData[0] !== this._dropTarget.afterElement && dragData[0] !== this._dropTarget.beforeElement;\n    }\n\n    onDrop(dragData, dropEvent, isNewElement = false) {\n        if (dropEvent && dropEvent.altKey) {\n            copyOrMoveElements(false, dragData, libraryManager.currentLibrary).then((elements) => {\n                this._dropElements(elements);\n            });\n        } else {\n            this._dropElements(dragData, isNewElement);\n        }\n    }\n\n    _dropElements(elements, isNewElement = false) {\n        if (!elements || elements.length === 0) { return; }\n\n        if (!this.group) {\n            // No group to drop the element into.\n            // This happens if the user drag-drops elements while in view by type.\n            return this._handleDropOnType(isNewElement);\n        }\n\n        if (this.group.id === '*') { // Ungrouping\n            // If element(s) are ungrouped, and dropped back into ungrouped, do nothing.\n            const allUngrouped = elements.every(element => element.getGroups().length === 0);\n            if (allUngrouped) { return; }\n\n            // Create aggregate analytics event (to be followed separately by element level events.)\n            metrics.reportEvent('Element Operations', 'Element', 'click', 'ungroup', {\n                event: { value: 'agg', count: elements.length },\n                content: { category: 'Drag Drop' }\n            }, libraryManager.currentLibrary);\n            // Set panel info on API-derived element events.\n            metrics.setExtraEventMetrics('updateElement', { subtype: 'ungroup', content: { category: 'Drag Drop' } });\n\n            // Ungroup elements\n            addElementsToGroup(elements);\n\n            return;\n        }\n\n        // Analytic events distinguish between whether the element(s) is being reordered in the same group or added to a different group.\n        // Note: If elements in different groups are dragged to a different spot in one of the same groups, this will count in the aggregate as an 'add-to-group'\n        // and 'order' is reserved for the more specialized case of reordering within the same group only.\n        const reorderInSameGroup = elements.every(element => !!element.getOrderInGroup(this.group));\n        const eventSubtype = reorderInSameGroup ? 'order' : 'add-to-group';\n        metrics.reportEvent('Element Operations', 'Element', 'click', eventSubtype, {\n            event: { value: 'agg', count: elements.length },\n            content: { category: 'Drag Drop' }\n        }, libraryManager.currentLibrary);\n        metrics.setExtraEventMetrics('updateElement', { subtype: eventSubtype, content: { category: 'Drag Drop' } });\n\n        const ignoreInternalReorder = appState.panel.viewState.elementSortState !== 'order'; // do not allow reordering elements that are already in the group when not in sort by order\n        if ((!this.afterElement && !this.beforeElement) || ignoreInternalReorder) {\n            if (ignoreInternalReorder) {\n                // only add elements to group that are not already there.\n                elements = elements.filter(element => !element.getOrderInGroup(this.group));\n            }\n            // adding elements to an empty group, or adding to a group without a specified order (including collapsed group case)\n            addElementsToGroup(elements, this.group);\n        } else {\n            // ordering elements (whether it be within the same group or in a new group)\n\n            reorderElements(elements, this.afterElement, this.beforeElement);\n        }\n\n        // Stop the timeout for expanding a group\n        this.onDeactivate();\n    }\n\n    _groupPopoverTrigger = 0;\n\n    _handleDropOnType(isNewElement = false) {\n        this._groupPopoverTrigger++;\n        if (this._groupPopoverTrigger < configuration.DRAG_COUNT_TRIGGER_MAX) {\n            return;\n        }\n        // Open popover asking the user to view by group if they want to organize their assets.\n        // We only show this if you're trying to drag existing elements - if it's a new element, we don't show the popover\n        // (otherwise you get spammed every time you drag onto the panel in view by type)\n        if (!isNewElement && !configuration.currentProduct.config.showCustomGroupViewPopover) {\n            this._groupPopoverTrigger = 0;\n            return appState.panel.dialogManager.openDialog('viewByGroupPopover');\n        }\n\n        if (configuration.currentProduct.config.showCustomGroupViewPopover) {\n            this._groupPopoverTrigger = 0;\n            configuration.currentProduct.config.showCustomGroupViewPopover();\n        }\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport { updateLicensedStockElements } from 'app/js/utils/adobeStockLicenseUtils';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport dialogManager from 'app/js/managers/dialogManager';\nimport { translate } from 'app/js/managers/translationManager';\nimport environment from 'app/js/environment';\nimport librarySizeManager from 'app/js/managers/librarySizeManager';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport { saveRenditionSync } from 'app/js/utils/imageUtils';\nimport viewState from 'app/js/state/viewState';\nimport productInterface from 'app/js/interface/productInterface';\nimport versionManager from 'app/js/managers/versionManager';\nimport appState from 'app/js/appState';\n\n/**\n * Handle drag and drop operations related to Stock assets. It creates\n * updates and library elements as needed.\n */\nexport default class StockDragManager {\n\n    constructor(dragManager) {\n        this._dragManager = dragManager;\n    }\n\n    _validateCreateElementPreconditions(asset) {\n        const {\n            stockSearchState: {\n                isOnLine,\n            }\n        } = viewState;\n\n        // If this asset is already licensed & we are offline, we do not want to proceed further\n        if (asset.is_licensed !== '' && !isOnLine) {\n            const elementType = AdobeStockUtils.getElementType(asset.media_type_id, asset.content_type);\n            environment.showError(translate(`DL_STOCK_PURCHASE_OFFLINE_ERROR${AdobeStockUtils.getLocalizationSuffix({ type: elementType })}`));\n            return false;\n        }\n\n        // If Library is not writeable\n        if (libraryManager.currentLibrary.isWritable === false) {\n            environment.showError(translate('DL_STOCK_DRAGDROP_READONLY_LIB_MSG'));\n            return false;\n        }\n\n        // If Library reached its max element limit\n        if (!librarySizeManager.canAddElements(libraryManager.currentLibrary)) {\n            environment.showError(translate('DL_DESIGN_LIBRARY_HAS_LIMIT'));\n            return false;\n        }\n\n        return true;\n    }\n\n    _getLicenseType(asset) {\n        const elementType = AdobeStockUtils.getElementType(asset.media_type_id, asset.content_type);\n        if (elementConfiguration.isStockMultiLicense(elementType, asset.is_premium, asset.is_editorial)) {\n            return AdobeStockUtils.getLicenseTypesFromSearchResult(asset)[0].field;\n        }\n        return configuration.STOCK_LICENSE_TYPE_STANDARD;\n    }\n\n    _createElement(asset, imageElement) {\n        const library = libraryManager.currentLibrary;\n        const elementType = AdobeStockUtils.getElementType(asset.media_type_id, asset.content_type);\n\n        if (!this._validateCreateElementPreconditions(asset)) {\n            return {};\n        }\n\n        const dragThumbFormat = configuration.currentProduct.config.stockDragFormat || 'png';\n        const dragThumbSize = AdobeStockUtils.getCompSizeFromSearchResult(asset);\n\n        let thumbnailDetails = {};\n        let dragThumbDetails = {};\n\n        if (environment.supportsFileSystem) {\n            // Save rendition synchronously\n            thumbnailDetails = saveRenditionSync(imageElement, libraryManager.tempDir);\n            dragThumbDetails = saveRenditionSync(imageElement, libraryManager.tempDir, dragThumbSize, dragThumbFormat);\n        }\n\n        // Element is created, kick off the process of making it a stock element\n        const { promise, element } = AdobeStockUtils.createStockElement({\n            library,\n            elementType,\n            asset,\n            thumbnailDetails,\n            licenseType: this._getLicenseType(asset),\n        });\n        promise.catch(() => {\n            dialogManager.openDialog('stockError', { title: 'DL_STOCK_SAVE_UNKNOWN_ERROR_TITLE', message: 'DL_STOCK_SAVE_UNKNOWN_ERROR' });\n        });\n\n        const draggedData = elementConfiguration.getStockDragData(element, asset, dragThumbDetails);\n        this._dragManager.dragData.didCreateElement = true;\n\n        return { promise, element, draggedData };\n    }\n\n    /**\n     * Attempt to save the stock asset result into a library and populate the drag event with the\n     * created element. If the saving process doesn't work, it will interrupt the drag process.\n     *\n     * Note that while the creation of the element is synchronous, the element will continue to be\n     * modified asynchronously while the drag operation is in process (e.g. download of a full\n     * resolution rendition). This allows the host to place a thumbnail of the element on canvas\n     * while the full resolution asset is downloaded, and use the element reference and the linking mechanism\n     * to automatically swap the images when the full resolution asset is ready.\n     *\n     * @param {Object} dragState contains the data needed to start the drag operation\n     * @param {DragEvent} dragState.dragStartEvent the drag event which caused the drag to start\n     * @param {Object} dragState.asset Stock asset search result on which the drag operation is happening\n     * @param {DOMElement} dragState.imageElement the image DOM element that will serve as the element thumbnail\n     */\n    async handleDragStart(dragState) {\n        const { dragStartEvent, asset, imageElement } = dragState;\n        const isLicensed = asset.is_licensed && asset.is_licensed !== '';\n        const elementType = AdobeStockUtils.getElementType(asset.media_type_id, asset.content_type);\n\n        if (!elementConfiguration.isStockAssetDraggable(elementType)) {\n            return;\n        }\n\n        let element = AdobeStockUtils.findStockElementInLibrary(asset.id, libraryManager.currentLibrary);\n        let promise;\n        let draggedData;\n\n        if (element) {\n            draggedData = elementConfiguration.getDragData(element);\n            if (draggedData) {\n                delete draggedData.usedRepresentationForAnalytics;\n            }\n        } else {\n            ({\n                draggedData,\n                element,\n                promise,\n            } = this._createElement(asset, imageElement));\n            dragState.didCreateElement = true;\n            dragState.currentlyDraggedElementPromise = promise;\n        }\n\n        if (!element) {\n            return;\n        }\n\n        dragState.currentlyDraggedElement = element;\n        // We need to wait for the element to get a permanent id before we can\n        // send the drag data to the host. Otherwise, the host app would create a link to an element\n        // that does not exist and the placeholder thumbnail wouldn't get replaced with the full resolution image when downloaded.\n        // Note that because we're handling the drop event asynchronously, we need to persist React's synthetic drag event.\n        // See: https://legacy.reactjs.org/docs/legacy-event-pooling.html\n        // We won't need to do this once we upgrade to React 17.\n\n        // We don't need to do this for videos because they're not downloaded when added to a library, so we don't run into the same bug as for images\n        if (element.type !== configuration.VIDEO_ELEMENT_TYPE) {\n            dragStartEvent.persist?.();\n            await element.committed;\n        }\n\n        if (draggedData) {\n            draggedData.path = draggedData.data[0];\n        }\n\n        if (isLicensed && element) {\n            const userId = appState.libraryManager.userId;\n            updateLicensedStockElements(userId, asset);\n        }\n\n        productInterface.addListener('elementDropped', this._handleElementDropped);\n\n        const dragOutData = {\n            source: configuration.DRAGDROP_SOURCE,\n            version: versionManager.getPluginVersion(),\n            assetList: [ draggedData ],\n        };\n        dragStartEvent.dataTransfer.setData(environment.ElementDragId, JSON.stringify(dragOutData));\n    }\n\n    /**\n     * @param {Object} dragDropEvent contains useful data to finish the drop operation.\n     */\n    _handleElementDropped = (dragDropEvent) => {\n        const dragState = this.dragEndState || this._dragManager.dragData;\n        dragState.dragDropEvent = dragDropEvent;\n        dragState.elementDroppedEventReceived = true;\n\n        productInterface.removeListener('elementDropped', this._handleElementDropped);\n    }\n\n    cleanup() {\n        productInterface.removeListener('elementDropped', this._handleElementDropped);\n        delete this.dragEndState;\n    }\n\n    handleDragEnd(dragState) {\n        // Need to save the dragState because dragmanager immediately clears the dragmanager.dragdata after calling this, so we need to save the data so we can use it in the timeout.\n        this.dragEndState = dragState;\n        const { dragEndEvent } = this.dragEndState;\n\n        // If we didn't create an element, there is nothing to cleanup regardless of\n        // the drop success state\n        if (!this.dragEndState.didCreateElement) {\n            this.cleanup();\n            return;\n        }\n\n        // If the drop happened outside the panel bounds, consider a success\n        const didDropSucceed\n            = dragEndEvent.clientX < 0\n            || dragEndEvent.clientX > environment.getPanelWidth()\n            || dragEndEvent.clientY < 0\n            || dragEndEvent.clientY > environment.getPanelHeight();\n\n        const removeElement = () => {\n            this.dragEndState.currentlyDraggedElement.library.removeElement(this.dragEndState.currentlyDraggedElement, true);\n            this.cleanup();\n        };\n        const handleSuccess = () => {\n            environment.handleDroppedStockElement && environment.handleDroppedStockElement(this.dragEndState).then(() => {\n                this.cleanup();\n            });\n        };\n        // If Product asked us to use Mouse events instead of 'elementDropped' CSEvent\n        if (configuration.currentProduct.config.useMouseEventToDetectDrop) {\n            // Mouse events are not reliable on Windows. So, do not delete the element on Windows\n            if (!didDropSucceed && !environment.isWindowsOS()) {\n                removeElement();\n            } else {\n                handleSuccess();\n            }\n        } else {\n            setTimeout(() => {\n                if (!this.dragEndState.elementDroppedEventReceived) {\n                    removeElement();\n                } else {\n                    handleSuccess();\n                }\n            }, this.dragEndState.elementDroppedEventReceived ? 0 : 1000);\n        }\n    }\n\n    dispose() {\n        productInterface.removeListener('elementDropped', this._handleElementDropped);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { action, observable } from 'mobx';\nimport viewState from 'app/js/state/viewState';\nimport StockDragManager from './utils/StockDragManager';\nimport { hasNativeFileTypes, isLayerDragData, createElementFromDocument } from 'app/js/utils/dragUtils';\nimport environment from 'app/js/environment';\nimport { addElementsFromFileList } from 'app/js/utils/addElementUtils';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport { getMultipleOrderStringsBetween } from 'app/js/utils/stringUtils';\nimport configuration from 'app/js/config/configuration';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport { reportApplyMetric } from 'app/js/utils/libraryUtils';\nimport debugLog from '../utils/debugLog';\n\n// Shortcut for extracting modifiers keys from an event\nconst getKeys = ({ metaKey, altKey, ctrlKey, shiftKey }) => ({ metaKey, altKey, ctrlKey, shiftKey });\n\nexport class DragManager {\n    // The current dragged group or element(s) (if any)\n    @observable.ref _dragData = null;\n    // The current dragged type (group or element)\n    @observable.ref _dragType = '';\n    // The current drop target\n    @observable.ref _activeDropTarget = null;\n    @observable.ref _holdingDropTarget = null;\n\n    _hooks = {};\n\n    constructor() {\n        this.registerHook('stock', new StockDragManager(this));\n    }\n\n    get dragData() {\n        return this._dragData;\n    }\n\n    get dragType() {\n        return this._dragType;\n    }\n\n    get activeDropTarget() {\n        return this._activeDropTarget;\n    }\n\n    get holdingDropTarget() {\n        return this._holdingDropTarget;\n    }\n\n    isHoldingDragOverGroup(group) {\n        if (!this._holdingDropTarget) { return; }\n        return group === this._holdingDropTarget.group;\n    }\n\n    registerHook(dragType, dragHandler) {\n        this._hooks[dragType] = dragHandler;\n    }\n\n    dispose() {\n        Object.keys(this._hooks).forEach(dragType => this._hooks[dragType].dispose());\n    }\n\n    _handleGlobalDrop = () => {\n        this._reportAppliedElement();\n        this.handleDragEnd();\n    }\n\n    _handleDragOver = (dragEvent) => {\n        const x = dragEvent.clientX;\n        const y = dragEvent.clientY;\n        // When dragging outside of the panel, CEP sends an event where X & Y are 0, we don't want to listen to this\n        if (x === 0 && y === 0) {\n            if (this._dragClone) {\n                this._dragClone.style.visibility = 'hidden';\n            }\n            this.setActiveDropTarget();\n        } else if (this._dragClone) {\n            const rect = this._dragClone.parentNode && this._dragClone.parentNode.getBoundingClientRect() || {};\n            const rectX = rect.x || rect.left || 0;\n            const rectY = rect.y || rect.top || 0;\n            // If we are dragging in list view or dragging a group, we want the X position to be offset from the left\n            const xOffset = viewState.viewState === 'list' || this._dragType === 'group' ? 25 : (this._dragClone.clientWidth / 2) + rectX;\n            const yOffset = (this._dragClone.clientHeight / 2) + rectY;\n            // Set to visible to avoid blink of image at 0/0\n            this._dragClone.style.visibility = 'visible';\n            this._dragClone.style.left = (x - xOffset) + 'px';\n            this._dragClone.style.top = (y - yOffset) + 'px';\n        }\n    }\n\n    /**\n     *\n     * @param {string} type the type of drag we are executing\n     * @param {Object} data the data (if any) that is associated with the drag operation\n     * @param {boolean} populateDragImageNode true to display ghost images\n     */\n    @action\n    handleDragStart(type, data, populateDragImageNode) {\n        this._dragType = type;\n        this._dragData = data;\n\n        if (populateDragImageNode) {\n            // Create a container to hold the clone\n            const ghostContainer = document.createElement('div');\n            ghostContainer.setAttribute('data-test-id', 'panel-ghost-clone');\n            ghostContainer.id = 'panel-ghost-clone';\n            ghostContainer.style.position = 'absolute';\n            // Set to invisible to avoid blink of image at 0/0\n            ghostContainer.style.visibility = 'hidden';\n            ghostContainer.style.pointerEvents = 'none';\n\n            populateDragImageNode(ghostContainer);\n            this._dragClone = ghostContainer.getRootNode().querySelector('#panel-ghost-clone');\n\n            // Listen to mouse movement to track drag position\n            document.body.addEventListener('dragover', this._handleDragOver);\n            document.body.addEventListener('dragleave', this._handleDragOver);\n        }\n\n        // OK SO - There is a case where if an element is mid-drag, and the list grid updates / the dragged element is\n        // removed that the ghost will stay on the screen. The reason for this is that dragend cannot be fired if the\n        // element no longer exists. Moreover, mouseup cannot be caught during the drag workflow. The only event that\n        // indicates that the drag has ended is the drop event.\n        //\n        // We can catch the drop event on the document in the BUBBLE phase and fire handleDragEnd. This guarantees that it\n        // will fire after the proper drop events on drop targets. handleDragEnd is idempotent, so it doesn't matter if\n        // it's fired twice.\n        //\n        // Cases where this can happen:\n        // 1. Drag an item over a collapsed group to open the group\n        // 2. Scroll far enough down or up that the element is plucked by react-virtualized\n        // 3. A render-causing sync\n        //\n        // This global drop listener also helps us catch drop events in environments where the panel is not notified\n        // that an element was dropped into the host app (ex. CCWebEnvironment). In some environments, the panel\n        // is notified of drop events via `productInterface.reportElementDropped`.\n        document.addEventListener('drop', this._handleGlobalDrop);\n\n        if (this._hooks[type]) {\n            this._hooks[type].handleDragStart(data);\n        }\n    }\n\n    @action\n    handleDrop(dropEvent) {\n        const dropTarget = this._activeDropTarget;\n        const dragData = this._dragData;\n        // We have to do this here, because the drop and dragEnd events are buggy in the BaseElementView.\n        this.handleDragEnd();\n        if (!dropTarget || !dropTarget.isValidDropTarget(dragData)) {\n            return;\n        }\n        const layerData = dragData && dragData[0] && dragData[0].data || {};\n        if (isLayerDragData(layerData)) {\n            // If the host determined this drag to be invalid, abort.\n            const isValid = layerData.assetList && layerData.assetList.length > 0;\n            if (!isValid) { return; }\n\n            // If we are dropping from the product, allow the product chance to modify the drop behaviour - this may depend on the modifier keys\n            const keys = getKeys(dropEvent);\n            const productDropHandler = configuration.currentProduct.dropHandler\n                ? configuration.currentProduct.dropHandler(layerData, keys)\n                : Promise.reject();\n\n            productDropHandler\n                .catch(() => createElementFromDocument(layerData, libraryManager.currentLibrary))\n                .then(element => {\n                    dropTarget.onDrop(Array.isArray(element) ? element : [ element ], undefined, true);\n                });\n            return;\n        }\n\n        const dropEventTypes = dropEvent && dropEvent.dataTransfer && dropEvent.dataTransfer.types || [];\n        if (!hasNativeFileTypes(dropEventTypes)) {\n            dropTarget.onDrop(dragData);\n            return;\n        }\n\n        // Do drop for native files\n        dropEvent.preventDefault();\n\n        const getFiles = environment.getDragFileList ? environment.getDragFileList.bind(environment, dropEvent.dataTransfer) : () => Promise.resolve(dropEvent.dataTransfer.files);\n\n        getFiles().then((files) => {\n            files = Array.from(files);\n            const group = dropTarget && dropTarget.group;\n            if (group) {\n                const afterOrder = dropTarget.afterElement && dropTarget.afterElement.getOrderInGroup(group);\n                const beforeOrder = dropTarget.beforeElement && dropTarget.beforeElement.getOrderInGroup(group);\n                const orders = getMultipleOrderStringsBetween(files.length, beforeOrder, afterOrder);\n\n                files.forEach((file, index) => file.group = { id: group.id, order: orders[index] });\n            }\n\n            addElementsFromFileList(libraryManager.currentLibrary, files);\n        }).catch(error => debugLog.log(error));\n    }\n\n    @action\n    handleDragEnd(data) {\n        if (data) {\n            Object.assign(this._dragData, data);\n        }\n        this._hooks[this._dragType] && this._hooks[this._dragType].handleDragEnd(this._dragData);\n\n        if (this._dragClone) {\n            this._dragClone.remove();\n        }\n\n        // reset drag data\n        this._dragData = null;\n        this._dragType = '';\n        this.setActiveDropTarget();\n        this.handleHoldDragEnd();\n\n        document.removeEventListener('drop', this._handleGlobalDrop);\n        document.body.removeEventListener('dragover', this._handleDragOver);\n        document.body.removeEventListener('dragleave', this._handleDragOver);\n    }\n\n    /**\n     * Called when the user holds the drag over a drop target for over a second.\n     * @param {BaseDropTarget} dropTarget\n     */\n    @action\n    handleHoldDragStart(dropTarget) {\n        const { group } = dropTarget;\n        // Expand the drop target's group if collapsed.\n        if (viewState.isGroupCollapsed(group.id)) {\n            viewState.setGroupCollapsed(group.id, false);\n        }\n        // Don't re-activate the same holdingDropTarget.\n        if (dropTarget !== this._holdingDropTarget) {\n            this._setHoldingDropTarget(dropTarget);\n        }\n    }\n\n    /**\n     * Called when the user stops holding the drag over a drop target.\n     */\n    @action\n    handleHoldDragEnd() {\n        this._setHoldingDropTarget(null);\n    }\n\n    _setHoldingDropTarget(dropTarget) {\n        this._holdingDropTarget = dropTarget;\n    }\n\n    @action\n    setActiveDropTarget(dropTarget) {\n        if (this._activeDropTarget !== dropTarget) {\n            // Remove the previous drop target timeout for expanding the group.\n            // If we're staying within the same group being hold-dragged, don't deactivate it.\n            // Always deactivate if we're un-setting the active group entirely.\n            if (this._activeDropTarget && (!this._activeDropTarget.isHoldingDrag || !dropTarget)) {\n                this._activeDropTarget.onDeactivate?.();\n            }\n            // Set the active drop target\n            this._activeDropTarget = dropTarget;\n            // Add a timeout to the drop target to expand the group when dragging over it.\n            // If we're staying within the same group being hold-dragged, don't switch the active state.\n            if (this._activeDropTarget && !this._activeDropTarget.isHoldingDrag) {\n                this._activeDropTarget.onActivate?.();\n            }\n        }\n    }\n\n    /**\n     * Called when an element has been dragged from the panel and dropped onto a host application.\n     */\n    _reportAppliedElement() {\n        if (this.dragType !== 'element') {\n            return;\n        }\n\n        for (const element of this.dragData) {\n            const representation = elementConfiguration.findUsableRepresentation(element);\n\n            // in cases we need to place a thumbnail (i.e. representation is not found), use the primary representation for reporting metrics\n            const representationForMetrics = representation ? representation : element.getPrimaryRepresentation();\n            reportApplyMetric(representationForMetrics, 'dragDrop');\n        }\n    }\n}\n\nexport default new DragManager();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport versionManager from 'app/js/managers/versionManager';\nimport imsInterface from 'app/js/interface/imsInterface';\nimport debugLog from 'app/js/utils/debugLog';\nimport { getFloodgateURL } from 'app/js/utils/linkUtils';\n\nconst featureFlagFeaturesKey = 'features';\n\nasync function _fetchFloodgateService(userId, clientId, reqMethod, imsProfile) {\n    try {\n        const accessToken = await imsInterface.getAccessToken(userId);\n        if (!accessToken) {\n            throw new Error('Invalid Token');\n        }\n        const userEmail = imsProfile?.email;\n        const userOrg = imsProfile?.projectedProductContext?.[0]?.prodCtx?.owningEntity;\n        const url = getFloodgateURL(clientId, userEmail, userOrg);\n\n        const reqOptions = {\n            method: reqMethod,\n            headers: {\n                'x-api-key': imsInterface.getEnvironment().clientId,\n                'Content-Type': 'application/json',\n                'Authorization': `Bearer ${accessToken}`,\n                'User-Agent': versionManager.getUserAgent()\n            }\n        };\n        const response = await fetch(url, reqOptions);\n        if (response.status !== 200) {\n            const text = await response.text();\n            debugLog.log(`Error: Response from Floodgate= ${text}`);\n            throw new Error('Unable to fetch data');\n        }\n        return response.json();\n    } catch (err) {\n        debugLog.log(`[FloodgateRest._fetchFloodgateService] ${err}`);\n        return {};\n    }\n}\n\nexport async function getFeatures(userId, clientId, imsProfile) {\n    const { releases } = await _fetchFloodgateService(userId, clientId, 'GET', imsProfile);\n    return Array.isArray(releases) ? releases.map(release => release ? release[featureFlagFeaturesKey] : release).flat() : [];\n}\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2022 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\n/**\n    Service for Floodgate to fetch features\n**/\n\nimport configuration from 'app/js/config/configuration';\nimport { getFeatures } from 'app/js/interface/floodgateRest';\nimport debugLog from 'app/js/utils/debugLog';\nimport { observable } from 'mobx';\nimport environment from '../environment';\n\nexport class FloodgateManager {\n    @observable _featuresSet;\n    _currentUserId;\n    _initialized = false;\n    @observable _loaded = false;\n\n    async init(userId) {\n        if (!userId) {\n            return;\n        }\n        const hasUserChanged = this._currentUserId !== userId;\n        if (this._initialized && !hasUserChanged) {\n            return;\n        }\n        this._currentUserId = userId;\n        this._initialized = true;\n        try {\n            const imsProfile = environment.getIMSProfile ? await environment.getIMSProfile() : {};\n            const floodGateFeatures = await Promise.all([\n                getFeatures(this._currentUserId, configuration.FLOODGATE_CLIENT_ID, imsProfile),\n                getFeatures(this._currentUserId, configuration.FLOODGATE_LIBRARIES_CLIENT_ID, imsProfile),\n                getFeatures(this._currentUserId, configuration.FLOODGATE_BRANDS_CLIENT_ID, imsProfile)\n            ]).then(arraysOfFeatures =>\n                arraysOfFeatures.reduce((accumulator, features) => accumulator.concat(features), [])\n            );\n            this._featuresSet = new Set(floodGateFeatures);\n            this._loaded = true;\n            return this._featuresSet;\n        } catch (err) {\n            this._initialized = false;\n            this._loaded = true;\n            debugLog.log(`[FloodgateManager.init] ${err}`);\n        }\n    }\n\n    hasLoaded() {\n        return this._loaded;\n    }\n\n    hasFeature(flag) {\n        return this._featuresSet?.has(flag);\n    }\n\n    isStyleguideEnabled() {\n        return this.hasFeature('cc_styleguides');\n    }\n\n    // A feature flag that enables all work done in the Brand Lifecycle epic!\n    // https://jira.corp.adobe.com/browse/BRANDS-203\n    isBrandLifecycleEnabled() {\n        return this.hasFeature('ubs.brand_lifecycle');\n    }\n}\n\nexport default new FloodgateManager();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from '../config/configuration';\nimport environment from 'app/js/environment';\nimport { addListenerManager } from '../utils/listenerUtils';\nimport { observable } from 'mobx';\n\n/**\n * Manager for layer selections in the application - the \"add\" menu in the library panel is contextual, and based on\n * the current selection (i.e. which colors, graphics, styles etc you can add).\n */\nexport class LayerSelectionManager {\n\n    @observable.ref _layerInfo;\n    _listening = false;\n    _lastSelectionChange = 0;\n\n    _currentDocumentPath;\n    @observable _hasCurrentDocument = false;\n\n    constructor() {\n        // This adds the addListener/removeListener functions to the object, for the given events:\n        this._listenerManager = addListenerManager(this, [ 'layerSelectionChanged' ]);\n    }\n\n    /**\n     * Update layer info\n     */\n    updateLayerInfo() {\n        if (!this._updatingPromise) {\n            this._updatingPromise = environment.getLayerInfo().then(data => {\n                delete this._updatingPromise;\n                this._layerInfo = data;\n                this._listenerManager.notify('layerSelectionChanged', this._layerInfo);\n                return this._layerInfo;\n            }, () => { delete this._updatingPromise; });\n        }\n        return this._updatingPromise;\n    }\n\n    /**\n     * Update document state\n     * @private\n     */\n    _getDocumentState() {\n        environment.getCurrentDocumentState().then(docInfo => {\n            // Clear the state first, so it gets reset if no docInfo was passed in\n            this._currentDocumentPath = undefined;\n            this._hasCurrentDocument = false;\n\n            if (docInfo) {\n                this._currentDocumentPath = docInfo.path;\n                // If we have document open, this always returns a non-negative layer ID\n                this._hasCurrentDocument = docInfo.layerID !== -1;\n\n                this.updateLayerInfo();\n            }\n        });\n    }\n\n    /**\n     * Tell the layer selection manager that the selection changed - this causes it to refresh the document state.\n     *\n     * Note that we debounce this - we'll only update if there's a gap of 100ms without any change event.\n     */\n    handleSelectionChange() {\n        if (this._listening) {\n            // We delay any update for 100ms - if another update comes in before then, we'll cancel and setup a new delay.\n            // If no updates come in, then the update will fire after 100ms - this means that if the document is constantly changing,\n            // we'll update 100ms after the last change (this is faster than the user can move to click on the add menu).\n            clearTimeout(this._selectionChangeTimeout);\n            this._selectionChangeTimeout = setTimeout(() => this._getDocumentState(), configuration.SELECTION_CHANGE_THROTTLE);\n        }\n    }\n\n    startListening() {\n        this._listening = true;\n        this._getDocumentState();\n    }\n\n    stopListening = function() {\n        this._listening = false;\n    }\n\n    // Returns a promise to the current layer/selection name\n    // YOU PROBABLY SHOULDN'T CALL THIS FUNCTION. Use libraryUtils.getLayerName() instead.\n    getLayerName() {\n        return environment.getLayerName();\n    }\n\n    getLayerInfo = function() {\n        return this._layerInfo;\n    }\n\n    getCurrentDocumentName() {\n        if (this._currentDocumentPath && this._currentDocumentPath.length > 0) {\n            if (this._currentDocumentPath.indexOf('/') > -1) {\n                return this._currentDocumentPath.substring(this._currentDocumentPath.lastIndexOf('/') + 1);\n            }\n            return this._currentDocumentPath.substring(this._currentDocumentPath.lastIndexOf('\\\\') + 1);\n        }\n    }\n\n    getCurrentDocumentPath() {\n        return this._currentDocumentPath;\n    }\n\n    hasDocumentOpen() {\n        return this._hasCurrentDocument;\n    }\n\n}\n\nexport default new LayerSelectionManager();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { Atom } from 'mobx';\n\nexport default class ProgressiveLoaderWrapper {\n    constructor(progressiveLoader) {\n        this._progressiveLoader = progressiveLoader;\n\n        // Setup atom corresponding to results\n        this._changeAtom = new Atom('change',\n            () => this._progressiveLoader.on?.('change', this._onChange),\n            () => this._progressiveLoader.off?.('change', this._onChange)\n        );\n    }\n    _onChange = () => {\n        this._changeAtom.reportChanged();\n    }\n\n    get results() {\n        this._changeAtom.reportObserved();\n        return this._progressiveLoader.results;\n    }\n\n    get isComplete() {\n        this._changeAtom.reportObserved();\n        return this._progressiveLoader.isComplete;\n    }\n\n    abort() {\n        this._progressiveLoader.abort();\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { Atom } from 'mobx';\nimport { wrapElement, cleanLibrariesCache, clearCache, wrapLibrary } from './modelCache';\nimport ProgressiveLoaderWrapper from './ProgressiveLoaderWrapper';\n\n/**\n    UPDATE: This is only used by TestUtils currently.\n\n    This is a wrapper over the ccLibraries main module from the cc-libraries-api-js\n    Manages loaded libraries and exposes other methods.\n\n    For API documentation, see: https://git.corp.adobe.com/pages/ProjectCentral/cc-libraries-api-js/CCLibraries.html\n\n    The cc-libaries-api-js will remain framework-agnostic, which means that we need to wrap it to make it observable by MobX.\n    This wrapping is using Atoms (https://mobx.js.org/refguide/extending.html) - you tell MobX when something\n    observable is used (atom.reportObserved()) and when the observable changes (atom.reportChanged()).\n    The biggest use case for Atoms is to subscribe to some (non mobx) observable.\n    Atoms are a tool to make something look observable to MobX, by providing hooks into when it is observed or unobserved by MobX,\n    while allowing us to wrap something complex. In this case we use those hooks to start/stop change listeners,\n    which in turn will manually reportObserved() to signal MobX that the data has been changed and it'll re-render anything listening to it.\n\n    API Wrapper Methodology:\n\n    Models: A model is essentially a MobX observable wrapper for any part of the Libraries API that has its own listeners, external api, and state,\n    which can be hooked into by any derivative reaction, including Mobx-React observables.\n\n    Caching: Any model that is not a singleton is cached, because we don't want observers to think it's a new model each time we fetch a library, causing a new render.\n    There is only one CCLibrariesModel, so there is no need to cache it.\n\n    Atoms: Atoms are used to start and stop change listeners in each model.\n\n    Wrapping GETTERS/CREATE:\n        If immutable/won't change, don't consider it state, so don't make it observable. But still expose it. e.g. id.\n        For things that can change, i.e. are stateful, they should be observable (call _changeAtom.reportObserved()).\n        I have also transformed `getSomething()` methods to be actual getters: ` get something(){}`\n        If there is an applicable observable model, the returned item should be wrapped in it. (and cached)\n        If a getter is async, it is left as `getSomething()`, and will return a promise. It will NOT call reportObserved(),\n        as all observables and computed properties are computed synchronously in mobx.\n        If there is no applicable atom or change listener or model, it's a non-observable method or getter,\n         and I am leaving it as a method. e.g. isInitialized(), isProcessRunning().\n    Wrapping SETTERS and OPERATIONS (e.g. copy) that trigger a change listener:\n        Anything that triggers a change listener will automatically reportChanged() to the atom in the change listener, so no special calls are needed.\n        Async methods should return a promise.\n    For other OPERATIONS that don't affect the model's state nor trigger a change listener e.g. init(), sync():\n        They should still be exposed.\n    For methods we do not use:\n        I left a note saying I did not wrap these. Can always add wrappers later.\n\n    Usage: When a client uses this api wrapper, they should be either affecting the state\n        (calls to the api wrappers don't need to be wrapped in an @action since we already control notifications to mobX manually)\n        or responding to changes in state through a computed value or reaction (@observer, @reaction, @autorun, etc.).\n        In React, components are decorated with the @observer reaction in order to automate re-rendering.\n        Note: When using an async `getSomeState` method in React, put that call in componentDidMount lifecycle hook.\n            Should not asynchronously load data in the render fn, as it should be a pure reflection of props/state.\n\n    NOTE: Calling reportObserved() on a self made atom will not trigger the hooks if reportObserved is triggered outside a reactive context.\n        This is because if you're not calling it in a reaction, you only need the value once and aren't setting up an observer.\n        If you console.log('currently a reactive context?' ,this._changeAtom.reportObserved()) inside the property you can double check.\n\n    TODO: Consider computed-async-mobx for the ability to convert asynchronous getters into an observable\n**/\n\nexport default class CCLibrariesModel {\n\n    /**\n     * Register some external dependencies with the model. This is used e.g. to add Typekit support to the font manager - since\n     * Typekit pulls in a lot of other dependencies, including the libraryManager, this leads to ugly cyclic dependencies if we\n     * import it directly - this should be called from the libraryManager as part of the initialization process.\n     *\n     * @param {Object} dependencies\n     */\n    static registerDependencies(dependencies) {\n        this._dependencies = dependencies;\n    }\n\n    /**\n     * Get a dependency supplied by registerDependencies - this should only be used internally by the model classes.\n     * (it allows pulling external code into the model without bloating the imports).\n     *\n     * @param {string} name dependency name\n     * @returns {Class} dependency\n     */\n    static _getDependency(name) {\n        return this._dependencies?.[name];\n    }\n\n    constructor(ccLibraries) { // Pass in ccLibraries api or mock.\n        // If we are reinstantiating the whole API, LibraryManager, and therefore panel, clear the cache.\n        clearCache();\n\n        this._ccLibraries = ccLibraries;\n\n        this._librariesAtom = new Atom('libraries',\n            () => this._ccLibraries.on('change', this._onLibrariesChanged),\n            () => this._ccLibraries.off('change', this._onLibrariesChanged)\n        );\n        // Setup atom corresponding to setting local process settings\n        this._localSettingsAtom = new Atom('localSettings',\n            () => this._ccLibraries.on('configurationChange', this._onLocalSettings),\n            () => this._ccLibraries.off('configurationChange', this._onLocalSettings)\n        );\n\n        this._syncAtom = new Atom('sync',\n            () => this._ccLibraries.on('sync', this._onSync),\n            () => this._ccLibraries.off('sync', this._onSync)\n        );\n\n        const removeAllListeners = this._removeAllListeners.bind(this);\n        this.DANGEROUS = { removeAllListeners };\n    }\n\n    // Listener Callback uses ESNext class field initializer with arrow function to bind context.\n    _onLibrariesChanged = () => {\n        this._librariesAtom.reportChanged();\n        cleanLibrariesCache();\n    }\n\n    _onLocalSettings = () => {\n        this._localSettingsAtom.reportChanged();\n    }\n\n    _onSync = () => {\n        this._syncAtom.reportChanged();\n    }\n\n    on(event, cb) {\n        this._ccLibraries.on(event, cb);\n    }\n\n    off(event, cb) {\n        this._ccLibraries.off(event, cb);\n    }\n\n    _removeAllListeners() {\n        this._ccLibraries.DANGEROUS.removeAllListeners();\n    }\n\n    /* API WRAPPER */\n\n    get utils() {\n        return this._ccLibraries.utils;\n    }\n\n    get errors() {\n        return this._ccLibraries.errors;\n    }\n\n    // Observable methods\n\n    async resolveElementReference(elementRef) {\n        return wrapElement(await this._ccLibraries.resolveElementReference(elementRef));\n    }\n\n    resolveCachedElementReference(elementRef) {\n        this._librariesAtom.reportObserved();\n        this._syncAtom.reportObserved();\n        const resolution = this._ccLibraries.resolveCachedElementReference(elementRef);\n        if (resolution) { return wrapElement(resolution); }\n        // The JS-API returns `undefined` when the state of a reference is unknown and `null` when it's known to be missing.\n        return resolution;\n    }\n\n    async resolveElementReferenceToLibrary(elementRef) {\n        return wrapLibrary(await this._ccLibraries.resolveElementReferenceToLibrary(elementRef));\n    }\n\n    resolveCachedElementReferenceToLibrary(elementRef) {\n        this._librariesAtom.reportObserved();\n        this._syncAtom.reportObserved();\n        const resolution = this._ccLibraries.resolveCachedElementReferenceToLibrary(elementRef);\n        if (resolution) { return wrapLibrary(resolution); }\n        // The JS-API returns `undefined` when the state of a reference is unknown and `null` when it's known to be missing.\n        return resolution;\n    }\n\n    resolveCachedLibraryReference(libraryRef) {\n        this._librariesAtom.reportObserved();\n        this._syncAtom.reportObserved();\n        const resolution = this._ccLibraries.resolveCachedLibraryReference(libraryRef);\n        if (resolution) { return wrapLibrary(resolution); }\n        // The JS-API returns `undefined` when the state of a reference is unknown and `null` when it's known to be missing.\n        return resolution;\n    }\n\n    async resolveLibraryReference(libraryRef) {\n        return wrapLibrary(await this._ccLibraries.resolveLibraryReference(libraryRef));\n    }\n\n    async resolveLibraryById(id) {\n        return wrapLibrary(await this._ccLibraries.resolveLibraryById(id));\n    }\n\n    async resolveLibraryByAssetId(assetId) {\n        return wrapLibrary(await this._ccLibraries.resolveLibraryByAssetId(assetId));\n    }\n\n    // Not Observable (yet)\n    // This is a wrapper, so the whole public api needs to be exposed, even those that have nothing to do with state.\n\n    refreshTeams() {\n        return this._ccLibraries.refreshTeams();\n    }\n\n    getOption(key) {\n        return this._ccLibraries.getOption(key);\n    }\n\n    setOption(key, value) {\n        this._ccLibraries.setOption(key, value);\n    }\n\n    getLocalSetting(key) {\n        this._localSettingsAtom.reportObserved();\n        return this._ccLibraries.getLocalSetting(key);\n    }\n\n    setLocalSetting(key, value) {\n        this._ccLibraries.setLocalSetting(key, value);\n    }\n\n    getRootDir() {\n        return this._ccLibraries.getRootDir();\n    }\n\n    getLocale() {\n        return this._ccLibraries.getLocale();\n    }\n\n    isConnected() {\n        return this._ccLibraries.isConnected();\n    }\n\n    get connectionState() {\n        return this._ccLibraries.connectionState;\n    }\n\n    // Try to reconnect to the shared local storage service, if the connection was broken\n    reconnect() {\n        this._ccLibraries.reconnect();\n    }\n\n    get connected() {\n        this._syncAtom.reportObserved();\n        return this._ccLibraries.isConnected();\n    }\n\n    get processInfo() {\n        return this._ccLibraries.processInfo;\n    }\n\n    // Try to disconnect from the shared local storage service\n    disconnect() {\n        this._ccLibraries.disconnect?.();\n    }\n\n    getServiceInfo() {\n        return this._ccLibraries.getServiceInfo();\n    }\n\n    isSyncingEnabled() {\n        this._syncAtom.reportObserved();\n        return this._ccLibraries.isSyncingEnabled();\n    }\n\n    enableSyncing() {\n        return this._ccLibraries.enableSyncing();\n    }\n\n    disableSyncing() {\n        this._ccLibraries.disableSyncing();\n    }\n\n    getAccessToken(userId, clientId, clientSecret, scopes) {\n        return this._ccLibraries.getAccessToken(userId, clientId, clientSecret, scopes);\n    }\n\n    openInCCD(path) {\n        return this._ccLibraries.openInCCD(path);\n    }\n\n    getDefaultLibrary() {\n        const defaultLibrary = this._ccLibraries.getDefaultLibrary?.();\n        if (!defaultLibrary) { return; }\n        return wrapLibrary(defaultLibrary);\n    }\n\n    setDefaultLibrary(library) {\n        this._ccLibraries.setDefaultLibrary(library);\n    }\n\n    getSearchResults(searchQuery, filters, elementSort) {\n        // Creates a new SearchLoader class object on the JS API side\n        const searchLoader = this._ccLibraries.getSearchResults && this._ccLibraries.getSearchResults(searchQuery, filters, elementSort);\n        return new ProgressiveLoaderWrapper(searchLoader);\n    }\n\n    get canAccessLocalProcess() {\n        return this._ccLibraries.canAccessLocalProcess ?? true;\n    }\n\n    getLibraryById(id) {\n        const library = this._ccLibraries.getLibraryById(id);\n        return library && wrapLibrary(library);\n    }\n\n    getLibraryByToolkitId(toolkitId) {\n        const library = this._ccLibraries.getLibraryByToolkitId(toolkitId);\n        return library && wrapLibrary(library);\n    }\n\n    get libraries() {\n        this._librariesAtom.reportObserved();\n        return this._ccLibraries.libraries.map(wrapLibrary);\n    }\n\n    get userQuota() {\n        this._librariesAtom.reportObserved();\n        this._syncAtom.reportObserved();\n        return this._ccLibraries.userQuota;\n    }\n\n    get storageUsed() {\n        return this._ccLibraries.storageUsed;\n    }\n\n    async loadLibraryByAssetId(assetId) {\n        return wrapLibrary(await this._ccLibraries.loadLibraryByAssetId(assetId));\n    }\n\n    createLibrary(name, opts = {}) {\n        return wrapLibrary(this._ccLibraries.createLibrary(name, opts));\n    }\n\n    copyLibrary(library, opts) {\n        return wrapLibrary(this._ccLibraries.copyLibrary(library._library, opts));\n    }\n\n    async moveLibrary(library, folder, opts) {\n        return wrapLibrary(await this._ccLibraries.moveLibrary(library._library, folder, opts));\n    }\n\n    importLibrary(path, callback) {\n        return this._ccLibraries.importLibrary(path, (err, library) => callback(err, wrapLibrary(library)));\n    }\n\n    exportLibrary(library, path, callback) {\n        return this._ccLibraries.exportLibrary(library._library, path, callback);\n    }\n\n    removeLibrary(library) {\n        return this._ccLibraries.removeLibrary(library._library);\n    }\n\n    followLibrary(assetId, libraryId) {\n        return this._ccLibraries.followLibrary(assetId, libraryId);\n    }\n\n    unfollowLibrary(library) {\n        return this._ccLibraries.unfollowLibrary(library._library);\n    }\n\n    get areLibrariesLoaded() {\n        this._librariesAtom.reportObserved();\n        this._syncAtom.reportObserved();\n        return this._ccLibraries.areLibrariesLoaded;\n    }\n\n    get areLibrariesLoading() {\n        this._syncAtom.reportObserved();\n        return this._ccLibraries.areLibrariesLoading;\n    }\n\n    get fontManager() {\n        return this._ccLibraries.fontManager;\n    }\n\n    get userId() {\n        return this._ccLibraries.userId;\n    }\n\n    get syncState() {\n        this._syncAtom.reportObserved();\n        return this._ccLibraries.syncState;\n    }\n\n    get retryTime() {\n        this._syncAtom.reportObserved();\n        return this._ccLibraries.retryTime;\n    }\n\n    sync() {\n        return this._ccLibraries.syncState.sync();\n    }\n\n    async getTempDir() {\n        return this._ccLibraries.getTempDir();\n    }\n\n    get teams() {\n        this._librariesAtom.reportObserved();\n        return this._ccLibraries.teams;\n    }\n\n    get projects() {\n        this._librariesAtom.reportObserved();\n        return this._ccLibraries.projects;\n    }\n\n    changeDriver(driver) {\n        return this._ccLibraries.changeDriver(driver);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport { observable, computed, action, reaction } from 'mobx';\nimport libraryProcessManager from 'app/js/managers/libraryProcessManager';\nimport { truncateString, millisecondsToMinutesAndSeconds } from 'app/js/utils/stringUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport { transformErrorCodeToErrorType } from 'app/js/utils/libraryUtils';\n\n/**\n * @typedef SyncingLibrary\n * @type {object}\n * @property {string} state - Current syncing state of the library\n * @property {number} [progress] - Syncing progress value\n * @property {string} [truncatedName] - Shortened readable library name\n */\n\n/**\n * @typedef Status\n * @type {object}\n * @property {string} state - Current overall syncing state\n * @property {string} [errorType] - Error, if one currently exists\n * @property {Array.<SyncingLibrary>} [syncingLibraries] - List of currently syncing libraries\n */\nexport class SyncState {\n\n    constructor(libraryManager) {\n        this._libraryManager = libraryManager;\n    }\n\n    /**\n        Private interface\n    **/\n\n    // 'loading' - hide any errors. This is the default so that errors dont flicker in and out on first load\n    // 'connected' - successfully connected to the process\n    // 'error' - still not connected to the process after the loading timeout ended, show error\n    @observable _processState = 'loading';\n\n    // Public flag to tell UI to show syncing icon during an expensive operation (e.g. copying files on disk), even though not technically syncing\n    @observable _isWorking = false;\n\n    // true when loading login state\n    // false when completed login loading timeout\n    @observable _isLoadingCollections = true;\n\n    @action _launchProcess() {\n        libraryProcessManager.launchCCLibraryProcess();\n    }\n\n    @action _setProcessState(state) {\n        this._processState = state;\n    }\n\n    reset() {\n        this._setProcessState('loading');\n        clearTimeout(this._loadingTimeout);\n        this._loadingTimeout = null;\n        clearTimeout(this._loginTimeout);\n        this._loginTimeout = null;\n    }\n\n    establishConnectionWithProcess() {\n        this._startProcessTimeout();\n    }\n\n    _startProcessTimeout() {\n        this._launchProcess();\n        this._setProcessState('loading');\n        this._loadingTimeout = this._loadingTimeout || setTimeout(() => {\n            this._setProcessState(libraryProcessManager.isConnected() ? 'connected' : 'error');\n            delete this._loadingTimeout;\n        }, 3000);\n    }\n\n    // 'loading' - hide any errors. This is the default so that logout state doesnt flicker in and out on first load\n    // 'yes' - successfully logged in\n    // 'no' - not logged in\n    get _isLoggedIn() {\n        const isLoggedIn = this._libraryManager.isAppLoggedIn && this._libraryManager.areLibrariesLoaded;\n        if (isLoggedIn) {\n            return 'yes';\n        }\n\n        return this._libraryManager.areLibrariesLoading ? 'loading' : 'no';\n    }\n\n    get _connectionState() {\n        if (libraryProcessManager.isConnected()) {\n            return;\n        }\n\n        const status = { state: 'error' };\n\n        if (!libraryProcessManager.isProcessInstalled()) {\n            status.errorType = 'noService';\n            return status;\n        }\n\n        const info = libraryProcessManager.getServiceInfo() || {};\n\n        if (info.updateRequired === 'client') {\n            status.errorType = 'updateClient';\n            return status;\n        }\n\n        if (info.updateRequired === 'server') {\n            status.errorType = 'updateServer';\n            return status;\n        }\n\n        if (info.portDiagnosis === 'SIMPLE_HOSTNAME_GOING_TO_PROXY') {\n            if (environment.isWindowsOS()) {\n                status.errorType = 'excludeHostnameWin10';\n                const os = environment.getOSInformation();\n                if (os.indexOf('Windows 7') !== -1 || os.indexOf('Windows 8') !== -1) {\n                    status.errorType = 'excludeHostnameWin';\n                }\n                return status;\n            }\n            status.errorType = 'excludeHostnameOSX';\n            return status;\n        }\n\n        if (info.portDiagnosis === 'DNS_RESOLUTION_FAILED') {\n            status.errorType = 'verifyDnsSettings';\n            return status;\n        }\n\n        if (info.portDiagnosis === 'COULD_NOT_CONNECT_SOCKET') {\n            status.errorType = 'verifySocketConnection';\n            status.showTestUrl = Boolean(info.connectionPort);\n            return status;\n        }\n\n        if (this._libraryManager._ccLibraries.connectionState === 'error') {\n            status.errorType = 'serviceError';\n        } else {\n            status.state = 'loading';\n        }\n        return status;\n    }\n\n    get _loginState() {\n        if (this._isLoggedIn === 'no') {\n            return { state: 'error', errorType: 'loggedOut' };\n        }\n        if (this._isLoggedIn === 'loading') {\n            return { state: 'loading' };\n        }\n    }\n\n    @observable _retryInvalidator = 0;\n    @computed get _secondsToRetry() {\n        this._retryInvalidator; // Touch, so we invalidate when it changes\n\n        const retryTime = this._libraryManager.retryTime - Date.now();\n        const secondsToRetry = retryTime > 0 && millisecondsToMinutesAndSeconds(retryTime);\n\n        if (secondsToRetry) {\n            // Force any observables that depend on _secondsToRetry to update after a second\n            // We need this because the value depends on the current time, which is not observable.\n            setTimeout(() => this._retryInvalidator++, 1000);\n        }\n        return secondsToRetry;\n    }\n\n    get _syncState() {\n        const status = {\n            syncingLibraries: []\n        };\n\n        // TODO: This is an IIFE because it was previously a loop with a lot of 'break's\n        // We should de-munge this function so it doesn't need to be an IIFE\n        (() => {\n            /**\n             First check for global errors\n             **/\n            // FS error doing commits\n            if (this._libraryManager.commitError) {\n                status.state = 'error';\n                status.errorType = 'fs';\n                return;\n            }\n\n            if (!this._libraryManager.syncingEnabled()) {\n                status.state = 'error';\n                status.errorType = 'syncDisabled';\n                return;\n            }\n\n            /**\n             Now check sync state / errors\n             **/\n            status.state = this._libraryManager.syncState || 'syncing';\n            status.syncProgress = this._libraryManager.syncProgress;\n\n            // Clear any previous error on the status: we'll set it again, below, if it's in an error state\n            delete status.errorType;\n\n            // Add the progress for individual libraries:\n            if (status.state === 'syncing') {\n                // First, update any new libraries we've started syncing\n                this._libraryManager.getNewLibrarySyncProgress().forEach((data) => {\n                    status.syncingLibraries.push({\n                        state: 'downloading',\n                        progress: data.progress\n                    });\n                });\n\n                // Then, update any existing libraries (including removing those that finished syncing\n                this._libraryManager.libraries.forEach((library) => {\n                    if (!library.syncState) {\n                        return;\n                    }\n                    status.syncingLibraries.push({\n                        state: library.syncState,\n                        progress: library.syncProgress,\n                        truncatedName: truncateString(library.name, 15)\n                    });\n                });\n\n                // Show the sync progress of the first collection that's syncing\n                return;\n            }\n\n            // If it's an error, add some additional information\n            if (status.state === 'error') {\n                const primaryError = this._libraryManager.getPrimarySyncError();\n                const library = this._libraryManager.getLibraryById(primaryError?.libraryId);\n\n                if (primaryError) {\n                    status.errorType = transformErrorCodeToErrorType(primaryError.code, this._libraryManager.errors, [ 'incoming','team' ].includes(library?.ownership));\n\n                    if (status.errorType !== 'general') {\n                        return;\n                    }\n\n                    // If it's not a general error, and it applies to a specific library, show this below\n                    if (library) {\n                        status.errorType = 'library';\n                        status.library = library;\n                        return;\n                    }\n                }\n                // Some errors cause an automatic retry, so update this in the state\n                status.retryDuration = this._secondsToRetry;\n            }\n        })();\n\n        // Use actual state instead of fake \"working\" state when a real sync starts.\n        if (this._isWorking && status.state !== 'syncing') {\n            return { state: 'working' };\n        }\n\n        return status;\n    }\n\n    get _accessState() {\n        const hasAccessError = this._libraryManager.getPrimarySyncError()?.code === this._libraryManager.errors.ACCESS_DENIED;\n        return hasAccessError ? { state: 'error', errorType: 'noAccess' } : undefined;\n    }\n\n    get _initialState() {\n        if (this._libraryManager.initialized) {\n            return;\n        }\n        if (this._libraryManager.isAppLoggedIn === false) {\n            // The libraryManager won't be initialized unless the app is logged in, so detect this error here:\n            return { state: 'error', errorType: 'appLoggedOut' };\n        }\n        return { state: 'loading' };\n    }\n\n    /**\n        Public interface\n    **/\n\n    init() {\n        reaction(() => this.status, (status) => {\n            // If state has updated to no longer be in fake \"working\" state, reset _isWorking to false\n            if (status.state !== 'working') {\n                this._isWorking = false;\n            }\n            // If process disconnects after once being connected, launch process via _startProcessTimeout\n            if (this._processState === 'connected' && !libraryProcessManager.isConnected()) {\n                this._startProcessTimeout();\n                return;\n            }\n            // If process reconnects after previously being disconnected, set _processState to 'connected'\n            if (this._processState === 'error' && libraryProcessManager.isConnected()) {\n                this._setProcessState('connected');\n                return;\n            }\n        });\n        this._startProcessTimeout();\n    }\n\n    /**\n     * Get current sync state\n     * @returns {Status}\n     * @readonly\n     * @memberof SyncState\n     */\n    @computed get status() {\n        return this._initialState // If panel has not been initialized, show initializing error (takes precedence over all other errors)\n            || this._accessState // If panel has restricted access, show restricted access error\n            || this._connectionState // If not connected to the CCLibrary Process, show error\n            || this._loginState // If user is not logged in, show logout error\n            || this._syncState; // If library collection has some other sync error, show error. If currently syncing, calculates\n    }\n\n    // If syncing is enabled, sets public flag to tell UI to show syncing icon, even though not technically syncing\n    // Status will update UI again whenever the status is updated next.\n    // e.g. For native upload, it will transition to 'syncing' as soon as the first status update occurs.\n    // Note: This status only works on the client which is experiencing the momentarily slow UX.\n    //       This status does not reflect in other apps, as it does not come from the server.\n    showSyncSpinner() {\n        if (this._libraryManager.syncingEnabled()) {\n            this._isWorking = true;\n        }\n    }\n\n    // A user-friendly localized message describing potential problems with shutting down the libraries panel now.\n    // The only case this targets for now is when the user attempts to leave while a sync upload is in progress,\n    // but having this generic getter will help if we decide to support more or give more granular messaging.\n    @computed\n    get shutdownWarning() {\n        if (this.status?.state !== 'syncing') { return; }\n        const { syncingLibraries } = this.status;\n        const uploads = syncingLibraries.filter(sync => sync.state === 'uploading');\n        if (!uploads.length) { return; }\n        return translate('DL_NAVIGATION_WARNING_SYNCING_IN_PROGRESS');\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport { getSourceId } from 'app/js/utils/libraryUtils';\nimport { getCustomGroupsTree, getLibraryCustomGroupsTree, isGroupEmpty } from 'app/js/utils/groupUtils';\nimport { getSourceInstanceId } from 'app/js/utils/elementReferenceUtils';\n\n// General utilities for document library-related operations.\n\nconst stringifyGroups = element => {\n    const elementGroupsData = element.getGroups().map(group => ({ name: group.name }));\n    return JSON.stringify(elementGroupsData);\n};\n\nexport function diffElements(elements, assets, targetLibrary, sourceLibrary) {\n    return new DiffElements(elements, assets, targetLibrary, sourceLibrary);\n}\n\nexport function diffGroups(groups, documentGroups) {\n    return new DiffGroups(groups, documentGroups);\n}\n\nclass DiffItems {\n\n    constructor(targetItems, sourceItems, sourceGroupTree, targetGroupTree) {\n        this._targetItems = targetItems;\n        this._sourceItems = sourceItems;\n        this._sourceGroupTree = sourceGroupTree;\n        this._targetGroupTree = targetGroupTree;\n\n        this._sourceMap = sourceItems.reduce((acc, source) => {\n            acc[source.id] = { source };\n            return acc;\n        }, {});\n\n        this._newItems = [];\n        this._unchangedItems = [];\n        this._itemsToUpdate = [];\n        this._itemsToDelete = [];\n        this._itemsToDiff = [];\n\n        // Populate the arrays.\n        this._computeDiff();\n    }\n\n    // <DocumentElement | DocumentGroup>[]\n    // New items must be returned in hierarchical order with elements closest to the root at the front\n    // because the batch processing API assumes children will be created after their parents\n    get newItems() {\n        return this._newItems.sort((a, b) => this._sourceDepthMap.get(a.id) < this._sourceDepthMap.get(b.id) ? -1 : 1);\n    }\n\n    // { source: <DocumentElement | DocumentGroup>, target: <ElementModel | GroupModel> }[]\n    get unchangedItems() { return this._unchangedItems; }\n\n    // { source: <DocumentElement | DocumentGroup>, target: <ElementModel | GroupModel>, diff: 'CONTENT' | 'GROUP' }[]\n    get itemsToUpdate() { return this._itemsToUpdate; }\n\n    // <ElementModel | GroupModel>[]\n    get itemsToDelete() { return this._itemsToDelete; }\n\n    get hasChanges() {\n        return !![ this.newItems, this.itemsToUpdate, this.itemsToDelete ].find(updates => updates.length);\n    }\n\n    toString() {\n        const reduceItem = item => ({\n            name: item.name,\n            type: item.type || 'Group',\n            id: item.id,\n            groups: item.isElement && item.getGroups().map(reduceItem)\n        });\n        return JSON.stringify({\n            create: this.newItems.map(reduceItem),\n            update: this.itemsToUpdate.map(i => reduceItem(i.source)),\n            delete: this.itemsToDelete.map(reduceItem)\n        }, null, 2);\n    }\n\n    _visitItem(target) {\n        const update = {};\n        const sourceId = getSourceId(target);\n        let source, visited;\n        if (this._sourceMap[sourceId]) {\n            source = this._sourceMap[sourceId].source;\n            visited = this._sourceMap[sourceId].visited;\n        }\n        if (this._isDeleted(target, source, visited)) {\n            this._itemsToDelete.push(target);\n        } else if (source) {\n            update.target = target;\n            update.source = source;\n            if (!this._ignore(target, source, visited)) {\n                // Mark items to diff later.\n                this._itemsToDiff.push({ target, source });\n            }\n\n            this._sourceMap[source.id].visited = true;\n        }\n    }\n\n    _computeDiff() {\n        // Visit each item in the source and target and determine whether they need creating, deleting or updating.\n        // Check the status of existing items.\n        // This will populate:\n        // - this._newItems: with source items that need publishing.\n        // - this._itemsToDelete: with target items that need deleting.\n        // - this._itemsToDiff: with valid source/target pairs that should be checked for updates.\n        this._targetItems.forEach(item => this._visitItem(item));\n        this._sourceItems.forEach(item => {\n            // Register new valid items.\n            const { source, target, visited } = this._sourceMap[item.id];\n            if (!visited && !this._ignore(target, source)) {\n                this._newItems.push(item);\n            }\n        });\n\n        // Check this._itemsToDiff for updates.\n        // A source/target pair should have matching values for order within their parent.\n        // Because order values might not be managed the same way across clients (ex. XD doesn't normalize its order strings),\n        // we want to compare their relative order within their parent, rather than compare the literal values on the items.\n        const [ targetOrderMap ] = this._createOrderAndDepthMap(this._targetGroupTree, getSourceId);\n        const [ sourceOrderMap, sourceDepthMap ] = this._createOrderAndDepthMap(this._sourceGroupTree, item => item.id);\n        this._targetOrderMap = targetOrderMap;\n        this._sourceOrderMap = sourceOrderMap;\n        this._sourceDepthMap = sourceDepthMap;\n\n        this._itemsToDiff.forEach(update => {\n            const { source, target } = update;\n            // Diff items.\n            const diff = this._diff(target, source);\n            if (diff || target.removed) { // update or restore\n                update.diff = diff;\n                this._itemsToUpdate.push(update);\n            } else { // no changes\n                this._unchangedItems.push(update);\n            }\n        });\n    }\n\n    // This map is created in order to make it more efficient to compare the logical order of the source library and the target library.\n    // The reason we need a map to compare these orders instead of comparing the string directly is to ensure that an update request isn't shown in the case\n    // where the order is normalized differently in libraries vs in XD.\n    _createOrderAndDepthMap(groupTree, getSourceId) {\n        const orderMap = new Map();\n        const depthMap = new Map();\n        const { branches, root } = groupTree;\n        branches.root = root;\n        Object.values(branches).forEach(branch => {\n            const children = (branch.children || []).filter(({ item }) => {\n                // Get the source asset id, from source or target.\n                const sourceId = getSourceId(item);\n                const visitData = this._sourceMap[sourceId];\n                if (visitData) {\n                    const { source, target, visited } = visitData;\n                    // If an item will be ignored when publishing, it should also be ignored when computing the orders to diff.\n                    return !this._ignore(target, source, visited);\n                }\n                // An orphan target should be ignored if it has already been removed.\n                // If it needed to be restored, it wouldn't be an orphan, a source item would link to it.\n                return !item.removed;\n            });\n            children.forEach(({ item }, index) => {\n                orderMap.set(item.id, index);\n                depthMap.set(item.id, branches[item.id].depth);\n            });\n        });\n        return [ orderMap, depthMap ];\n    }\n}\n\nclass DiffElements extends DiffItems {\n\n    constructor(targetItems, sourceItems, targetLibrary, sourceLibrary) {\n        const sourceGroupsTree = getLibraryCustomGroupsTree(sourceLibrary);\n        const targetGroupsTree = getLibraryCustomGroupsTree(targetLibrary);\n        super(targetItems, sourceItems, sourceGroupsTree, targetGroupsTree);\n    }\n\n    /**\n     * Check if changes between the asset and published element exist.\n     * Checks the modified date (indicating a change to content) or changes to certain metadata (order in groups/groups, name).\n     * @param {ElementModel} element\n     * @param {DocumentElement} asset\n     * @returns {ElementChangeType}\n     */\n    _diff(element, asset) {\n        // Content changes\n        if (asset.instanceId !== getSourceInstanceId(element)) {\n            // To protect against live editing race conditions where one user makes\n            // a change and the other publishes before that change comes in,\n            // we check whether the stored asset modified date is different\n            // (rather than checking asset.modified > element.modified)\n            return configuration.ELEMENT_CHANGE_TYPE.CONTENT;\n        }\n\n        // Name metadata changes\n        // Note: When published, an autonamed asset's name will get saved as the name of the\n        // published element, but the element will not be auto named. Since the asset.name will return\n        // the auto generated name, we can do a direct comparison of name properties.\n        if (asset.name !== element.name) {\n            return configuration.ELEMENT_CHANGE_TYPE.CONTENT;\n        }\n\n        // Group name metadata changes\n        if (stringifyGroups(asset) !== stringifyGroups(element)) {\n            return configuration.ELEMENT_CHANGE_TYPE.GROUP;\n        }\n\n        if (this._targetOrderMap.get(element.id) !== this._sourceOrderMap.get(asset.id)) {\n            return configuration.ELEMENT_CHANGE_TYPE.GROUP;\n        }\n    }\n\n    _assetTypeChanged(element, asset) {\n        return asset && asset.type !== element.type;\n    }\n\n    _isDeleted(element, asset, visited) {\n        // Asset no longer exists, element is missing an accurate sourceRef, the element is a duplicate,\n        // or the type of the asset has changed (e.g. if a color asset becomes a gradient,\n        // a new published element will replace the old)\n        return !element.removed && (!asset || visited || this._assetTypeChanged(element, asset));\n    }\n\n    _ignore(element, asset, visited) {\n        if (!element || !asset) { return; }\n        // Do not restore a removed element where the current asset has a different type\n        // (A new element with the same type should already have been created.)\n        // Similarly, do not restore a removed element  (i.e. when undoing a deleted asset)\n        // if the source asset has already been published (relinked) to another element during co-editing.\n        return element.removed && (this._assetTypeChanged(element, asset) || visited);\n    }\n\n}\n\nclass DiffGroups extends DiffItems {\n\n    constructor(targetItems, sourceItems) {\n        const sourceGroupsTree = getCustomGroupsTree([], sourceItems);\n        const targetGroupsTree = getCustomGroupsTree([], targetItems);\n        super(targetItems, sourceItems, sourceGroupsTree, targetGroupsTree);\n    }\n\n    /**\n     * Check if changes between the documentGroup and published group exist.\n     * @param {GroupModel} group\n     * @param {DocumentGroup} documentGroup\n     * @returns {GroupChangeType}\n     */\n    _diff(group, documentGroup) {\n        // Name metadata changes\n        if (documentGroup.name !== group.name) {\n            return configuration.GROUP_CHANGE_TYPE.CONTENT;\n        }\n\n        if (this._targetOrderMap.get(group.id) !== this._sourceOrderMap.get(documentGroup.id)) {\n            return configuration.GROUP_CHANGE_TYPE.GROUP;\n        }\n\n        const sourceParent = documentGroup.parent || {};\n        const publishedParent = group.parent || {};\n        // The published group's parent is linked to a group other than the source's parent.\n        const parentChanged = getSourceId(publishedParent) !== sourceParent.id;\n        if (parentChanged) {\n            // Parent changes\n            return configuration.GROUP_CHANGE_TYPE.GROUP;\n        }\n    }\n\n    _isDeleted(group, documentGroup) {\n        // Document Group no longer exists, Library Group is missing an accurate sourceRef,\n        // or a previously publishable document group now meets the conditions to be ignored.\n        return !documentGroup || this._ignore(group, documentGroup);\n    }\n\n    _ignore(group, documentGroup) {\n        // Don't publish app-created groups that have nothing in them (i.e. empty Audio document groups).\n        return documentGroup.isAppControlled && isGroupEmpty(documentGroup) && !documentGroup.parent;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { computed } from 'mobx';\nimport environment from 'app/js/environment';\nimport configuration from 'app/js/config/configuration';\nimport * as DocumentAssetsUtils from 'app/js/models/documentAssets/documentAssetsUtils';\nimport debugLog from '../utils/debugLog';\nimport featureFlags from '../config/featureFlags';\n\n/**\n * Utility class to track the publish state and capabilities of the current document and library.\n */\nexport class PublishState {\n\n    constructor(libraryManager) {\n        this._libraryManager = libraryManager;\n    }\n\n    /**\n     * Publish state of the document library - see configuration.DOCUMENT_LIBRARY_STATES\n     *\n     * LOADING: Document library is loading\n     * NOT_PUBLISHED: Document library is not published\n     * PUBLISHED: Document library is published and up-to-date\n     * PUBLISHING: Document library is currently publishing\n     * COEDITOR_PUBLISHING: Document library currently being pushed by a coeditor\n     * UNPUBLISHED_CHANGES: Document library is published, but there are pending updates\n     * NOT_FOUND: Document library is published, but cannot find the published library\n     */\n    @computed get status() {\n        const assetsContainer = this._assetsContainer;\n        const publishedLibrary = this._publishedLibrary;\n        const isPublishing = this._libraryManager.isPublishing;\n        const logDiff = msg => featureFlags.get('publishDiffLogging') && debugLog.log(msg);\n\n        // Document Library not supported.\n        if (!assetsContainer) { return; }\n\n        //Coeditor publishing needs to resolve higher here since a published library will not exist yet for coeditors\n        if (this._isCoeditorPublishing) {\n            return this.states.COEDITOR_PUBLISHING;\n        }\n\n        // If there's no published document library, either we haven't yet published or the library can't be found.\n        if (!publishedLibrary) {\n            return assetsContainer.linkedLibraryId ? this.states.NOT_FOUND : this.states.NOT_PUBLISHED;\n        }\n\n        if (!publishedLibrary.areElementsLoaded) {\n            return this.states.LOADING;\n        }\n\n        // If we're in the middle of publishing, we return a special state - this is really important to avoid the\n        // any reactions that depend on publishState from re-triggering over and over while we're modifying the library\n        // during a publish (the diff is very expensive).\n        if (isPublishing) {\n            return this.states.PUBLISHING;\n        }\n\n        // At this point we have a published document library but we don't know if it's up-to-date or not\n        // Doing a diff is really expensive, so we try to short-circuit where possible.\n        if (assetsContainer.elementCount !== publishedLibrary.elementCount) {\n            logDiff(`Element Count Mismatch: Document Library Element Count: ${assetsContainer.elementCount}. Published Library Element Count: ${publishedLibrary.elementCount}.`);\n            return this.states.UNPUBLISHED_CHANGES;\n        }\n\n        if (assetsContainer.publishableGroupCount !== publishedLibrary.getGroupCount()) {\n            logDiff(`Group Count Mismatch: Document Library Group Count: ${assetsContainer.publishableGroupCount}. Published Library Group Count: ${publishedLibrary.getGroupCount()}.`);\n            return this.states.UNPUBLISHED_CHANGES;\n        }\n\n        // Do the expensive diff for groups and elements.\n        // TODO: We should optimize further to short-circuit the diff here. As soon as we find a difference, we can stop.\n        const groupDiff = DocumentAssetsUtils.diffGroups(publishedLibrary.getGroups(), assetsContainer.getGroups());\n        if (groupDiff.hasChanges) {\n            logDiff(`Group Mismatch: ${groupDiff}`);\n            return this.states.UNPUBLISHED_CHANGES;\n        }\n\n        // Restoring deleted assets should also restore the deleted published elements, which will fix any broken links.\n        const elementDiff = DocumentAssetsUtils.diffElements([ ...publishedLibrary.elements, ...publishedLibrary.removedElements ], assetsContainer.elements, publishedLibrary, assetsContainer);\n        if (elementDiff.hasChanges) {\n            logDiff(`Element Mismatch: ${elementDiff}`);\n            return this.states.UNPUBLISHED_CHANGES;\n        }\n\n        return this.states.PUBLISHED;\n    }\n\n    get states() {\n        return configuration.DOCUMENT_LIBRARY_STATES;\n    }\n\n    get _publishedLibrary() {\n        return this._libraryManager.publishedDocumentLibrary;\n    }\n\n    get _assetsContainer() {\n        return this._libraryManager.documentAssetsContainer;\n    }\n\n    get syncError() {\n        if (!this._publishedLibrary) { return; }\n        return this._libraryManager.syncErrors.find(error => error.libraryId === this._publishedLibrary.id);\n    }\n\n    get isPublished() {\n        return [ this.states.PUBLISHED, this.states.UNPUBLISHED_CHANGES ].includes(this.status);\n    }\n\n    get isPublishedLibraryNotFound() {\n        return this.status === this.states.NOT_FOUND;\n    }\n\n    get isPendingUpdate() {\n        return this.status === this.states.UNPUBLISHED_CHANGES;\n    }\n\n    get isPublishing() {\n        // We show a publishing state if we're in the process of creating the published library.\n        const isPublishing = this.status === this.states.PUBLISHING;\n        return !this.syncError && (isPublishing || (this.isPublished && this._publishedLibrary.isPushedToServer === false));\n    }\n\n    get _isCoeditorPublishing() {\n        return environment.isCoeditorPublishing;\n    }\n\n    get isLoading() {\n        return this.status === this.states.LOADING;\n    }\n\n    get _canSaveDocToCloud() {\n        return environment.isSavedCloudDocument || environment.canSaveDocToCloud;\n    }\n\n    get _hasLibraryAccess() {\n        return !this._publishedLibrary || this._publishedLibrary.isWritable;\n    }\n\n    get _hasDocumentAccess() {\n        return !environment.isSavedCloudDocument || environment.canEditDocument;\n    }\n\n    get _isPaidUser() {\n        return environment.isPaidUser;\n    }\n\n    get _documentAssetsCount() {\n        return this._libraryManager.documentAssetsContainer.elementCount;\n    }\n\n    get _hasPublishableContent() {\n        // Can only publish library if there are assets to publish and user has write access to the document;\n        // the exception is when the library has already been published, in which case re-publishing with no assets is a valid operation.\n        return this._documentAssetsCount > 0 || this.isPublished;\n    }\n\n    get _isOversizedDocument() {\n        // There's a platform limit on the amount of elements a library can have.\n        // The document is oversized if publishing it would require us to go above that limit.\n        return this._documentAssetsCount > this._libraryManager.MAX_ELEMENTS;\n    }\n\n    get canPublish() {\n        // If the document is unsaved AND the user is able to save the document to the cloud, we'll enable the publish button, which will open the 'Save As' window.\n        return !this._isOversizedDocument\n            && this._canSaveDocToCloud\n            && this._libraryManager.isOnline\n            && this._hasPublishableContent\n            && this._hasDocumentAccess\n            && this._hasLibraryAccess\n            && !this._isCoeditorPublishing\n            && !this.isPublishing;\n    }\n\n    get canUpgrade() {\n        return !this._isPaidUser && this._canSaveDocToCloud && this._libraryManager.isOnline && this._hasDocumentAccess && this._hasLibraryAccess;\n    }\n\n    get disabledStatus() {\n        if (this.canPublish && this._isPaidUser) { return; }\n\n        const states = configuration.DISABLED_PUBLISH_STATES;\n\n        if (!this._libraryManager.isOnline) {\n            return states.OFFLINE;\n        }\n        if (!this._hasDocumentAccess || !this._hasLibraryAccess) {\n            return states.READ_ONLY;\n        }\n        if (!environment.hasAvailableStorage) {\n            return states.QUOTA;\n        }\n        if (!this._canSaveDocToCloud) {\n            return states.MISSING_STORAGE;\n        }\n        if (!this._hasPublishableContent) {\n            return states.EMPTY;\n        }\n        if (!this._isPaidUser) {\n            return states.UPGRADE;\n        }\n        if (this._isCoeditorPublishing) {\n            return states.COEDITOR_PUBLISHING;\n        }\n        if (this._isOversizedDocument) {\n            return states.MAX_ELEMENTS;\n        }\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\nimport environment from 'app/js/environment';\nimport debugLog from 'app/js/utils/debugLog';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport versionManager from 'app/js/managers/versionManager';\nimport imsInterface from 'app/js/interface/imsInterface';\n\nconst OPERATION_MAP = {\n    sync:         [ 'POST', () => `${_getTypekitDomain()}/v1/selections?locale=${environment.getLocale()}` ],\n    unsync:       [ 'DELETE', (fontId) => `${_getTypekitDomain()}/v1/selections/${fontId}` ],\n    entitlements: [ 'GET', (fontId) => `${_getTypekitDomain()}/v1/variations/${fontId}/entitlement_workflows?purpose=sync&locale=${environment.getLocale()}` ]\n};\n\n/*\n    To enable dev testing both on stage and prod for Typekit APIs\n*/\nfunction _getTypekitDomain() {\n    return 'https://' + imsInterface.getEnvironment().typekitHost;\n}\n\n/*\n    Common function for fetching IMS access token and creating request with appropriate headers and body\n*/\nfunction _fetchRequest(httpMethod, url, fontData) {\n    const userID = libraryManager.userId;\n    return imsInterface.getAccessToken(userID).then(accessToken => {\n\n        const headers = {\n            'Authorization': 'Bearer ' + accessToken,\n            'Content-Type': 'application/json',\n            'X-Api-Key': imsInterface.getEnvironment().clientId,\n            'Accept': 'application/json'\n        };\n\n        if (!environment.disableUserAgentHeaders) {\n            headers['User-Agent'] = versionManager.getUserAgent();\n        }\n\n        const req = {\n            method: httpMethod,\n            url,\n            headers\n        };\n\n        if (httpMethod === 'POST') {\n            req.body = JSON.stringify(fontData);\n        }\n        debugLog.log('Typekit Font request - ' + 'url: ' + url + ' ' + 'data: ' + fontData);\n        return req;\n    }).catch(error => {\n        debugLog.log('Error getting access token: TypekitUtils , result=' + JSON.stringify(error));\n        return Promise.reject(error);\n    });\n}\n\n/**\n * Request Font related operations - sync, fetching entitlements, etc.\n * @param {string} operation Exact purpose for the network call\n * @param {string} fontId This is unique identifier - can be typekitFontId or postScriptName\n * @param {string} language Default language of the font for fetching the corresponding string\n */\nexport function doFontOperation(operation, fontId, language) {\n    const [ method, getURL ] = OPERATION_MAP[operation];\n    const url = getURL(fontId, language);\n    return _fetchRequest(method, url, [ fontId ])\n        .then(httpRequest => fetch(new Request(url, httpRequest)))\n        .then(response => {\n            if (response.status !== 200) {\n                if (response.status === 204 && method === 'DELETE') {\n                    return;\n                }\n                // For errors, there may be a body that contains an error message - in which case we want to reject with that.\n                return response.json().then(data => Promise.reject(data));\n            }\n            return response.json();\n        });\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport metrics from 'app/js/interface/metrics';\nimport debugLog from 'app/js/utils/debugLog';\nimport * as AdobeTypekitRest from 'app/js/interface/adobeTypekitRest';\nimport { observable, when } from 'mobx';\nimport libraryManager from 'app/js/managers/libraryManager';\n\nexport default class TypekitFont {\n\n    @observable _fontSyncing;\n    @observable.ref _variationDetails;\n\n    @observable _isLoading = true;\n\n    constructor(postScriptName, getFontDataFromProcess) {\n        this._postScriptName = postScriptName;\n        this._getFontDataFromProcess = getFontDataFromProcess;\n\n        this.refresh();\n    }\n\n    _getFontData(getFontDataFromProcess) {\n        return getFontDataFromProcess().catch(error => {\n            debugLog.log('Error fetching font data: ' + error);\n        });\n\n    }\n\n    /*\n        PUBLIC APIs\n    */\n\n    get postScriptName() {\n        return this._postScriptName;\n    }\n\n    get variation() {\n        return this._variationDetails;\n    }\n\n    get fontId() {\n        return this.variation && this.variation.font && this.variation.font.sync && this.variation.font.sync.font_id;\n    }\n\n    get fontActions() {\n        return this.variation && this.variation.font && this.variation.font.sync && this.variation.font.sync.required_action;\n    }\n\n    // Variations still being fetch (via network or process)\n    get isLoading() {\n        return this._isLoading;\n    }\n\n    // Get current state for deciding the spinning animation on the view while the font sync is in progress\n    get isFontSyncing() {\n        return this._fontSyncing;\n    }\n\n    // Get current cached font availability\n    get isFontAvailable() {\n        if (libraryManager.fontManager) {\n            return libraryManager.fontManager.getCachedSystemFontAvailability(this._postScriptName);\n        }\n    }\n\n    // Fetch font data from process\n    refresh() {\n        this._getFontData(this._getFontDataFromProcess).then(variationDetails => {\n            this._isLoading = false;\n            this._variationDetails = variationDetails;\n        });\n    }\n\n    /**\n     * Sending a request to Typekit to sync down a font on the user's local machine.\n     * We can only confirm if the request is success or failure.\n     * Unfortunately, for checking whether the font has synced or not, we currently rely on the product to give us an updated font list.\n     *\n     * @param {Object} style Object containing information about the text styles\n     * @param {string} source For tracking analytics whether operation is triggered from icon, context menu, etc.\n     * @param {ElementModel} element Actual element being passed for analytics purposes\n     * @returns {Promise} For handling appropriate response\n     */\n    sync(style, source, element) {\n        const metricSubType = source === 'context' ? 'context-start' : 'start';\n        metrics.reportElementEvent('Typekit', 'Sync-Font', 'click', metricSubType, element);\n        debugLog.log('Syncing Typekit Font: ' + this.fontId);\n\n        this._fontSyncing = true;\n\n        const onError = (errorDesc, status) => {\n            metrics.reportElementEvent('Typekit', 'Sync-Font', 'render', 'error', element, { event: { error_code: status, error_desc: errorDesc } });\n            debugLog.log(errorDesc);\n            this._fontSyncing = false;\n        };\n        return AdobeTypekitRest.doFontOperation('sync', this.fontId).then(data => {\n            if (data && data[0] && data[0].variation) {\n                metrics.reportElementEvent('Typekit', 'Sync-Font', 'render', 'success', element);\n                debugLog.log('Font Sync request sent successfully: ' + JSON.stringify(data));\n                when(() => this.isFontAvailable, () => this._fontSyncing = false);\n            } else {\n                const errorDesc = 'Font sync could not complete: ' + JSON.stringify(data);\n                onError(errorDesc, 200);\n            }\n        }).catch(status => {\n            const errorDesc = 'Font sync error ' + status;\n            onError(errorDesc, status);\n        });\n    }\n\n    unsync(style, source, element) {\n        const metricSubType = source === 'context' ? 'context-start' : 'start';\n        metrics.reportElementEvent('Typekit', 'Sync-Font', 'click', metricSubType, element);\n        debugLog.log('Unsyncing Typekit Font: ' + this.fontId);\n\n        this._fontSyncing = true;\n\n        const onError = (errorDesc) => {\n            debugLog.log(errorDesc);\n            this._fontSyncing = false;\n        };\n        return AdobeTypekitRest.doFontOperation('unsync', this.fontId).then(data => {\n            if (!data) {\n                debugLog.log('Font Unsync request sent successfully');\n                when(() => !this.isFontAvailable, () => this._fontSyncing = false);\n            } else {\n                const errorDesc = 'Font unsync could not complete: ' + JSON.stringify(data);\n                onError(errorDesc, 200);\n            }\n        }).catch(status => {\n            const errorDesc = 'Font unsync error ' + status;\n            onError(errorDesc, status);\n        });\n    }\n\n    /**\n     * Take the user to a webpage for upgrading/subscribing to a plan\n     * @param {string} source For tracking analytics whether operation is triggered from icon, context menu, etc.\n     * @param {ElementModel} element Actual element being passed for analytics purposes\n     */\n    upgrade(source, element) {\n        const metricSubType = source === 'context' ? 'context-start' : 'start';\n\n        return AdobeTypekitRest.doFontOperation('entitlements', this.fontId).then(data => {\n            const fontUpgradeURL = data.upgrade && data.upgrade[0] && data.upgrade[0].url;\n            metrics.reportElementEvent('Typekit', 'Upgrade', 'click', metricSubType, element, { content: { action: fontUpgradeURL } });\n            environment.launchInBrowser(fontUpgradeURL);\n        }).catch((error) => {\n            debugLog.log('Error occurred during upgrade: ' + JSON.stringify(error));\n        });\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport TypekitFont from 'app/js/managers/utils/TypekitFont';\nimport { Atom } from 'mobx';\n/**\n * This is a wrapper over the FontManager from the JSAPI2 which sends requests for data to the AdobeLibraryFontManager in the process.\n * This is only available in LocalDriver mode.\n *\n * It provides functionality for detecting which system fonts are installed, as well\n * as functionality for Typekit Fonts such as retrieving information about the font\n * and license/activated state, and change notifications for entitlement changes.\n */\nexport default class FontManager {\n\n    _fontMap = {};\n    _fontAvailableMap = {};\n    _hasFetchedFontAvailability = {};\n    _hasRefreshedFontData = {};\n    _pendingFontAvailabilityPromises = {};\n\n    constructor(fontManager) {\n        this._fontManager = fontManager;\n\n        this._changeAtom = new Atom('fontManagerChange',\n            () => this._fontManager.on('change', this._onChange),\n            () => this._fontManager.off('change', this._onChange)\n        );\n\n        // We need to clear the font map whenever it changed - note that we want to do this\n        // even if nobody is observing the font manager, so it has to be done outside of the change atom.\n        this._fontManager.on('change', () => {\n            // Note: we don't clear the font map so that we maintain the\n            // existing font data until the refresh is complete\n            this._hasRefreshedFontData = {};\n            // Note: we don't clear the availability map so that we maintain the\n            // existing availability until the process fetch tells if it has changed\n            this._hasFetchedFontAvailability = {};\n        });\n    }\n\n    _onChange = () => {\n        // Changes: in user's entitlements for typekit fonts, such as\n        // changes on the list of the fonts the user has access to on Typekit.\n        this._changeAtom.reportChanged();\n    }\n\n    /**\n     * Returns the cached font data else goes ahead and fetches it\n     * @param {string} name Unique postScriptName for a font\n     * @returns {TypekitFont} Typekit font object to access any corresponding attribute (Eg: variation) or perform any operation (Eg: sync)\n     */\n    getFontData(name) {\n        this._changeAtom.reportObserved();\n\n        if (this._fontMap[name] && !this._hasRefreshedFontData[name]) {\n            this._fontMap[name].refresh();\n        } else if (!this._fontMap[name]) {\n            this._fontMap[name] = new TypekitFont(name, () => this._getFontDataFromProcess(name));\n        }\n        this._hasRefreshedFontData[name] = true;\n\n        return this._fontMap[name];\n    }\n\n    /**\n     * Returns whether the given font is installed on the system (this queries the CC Library Process).\n     *\n     * @param {string} fontName The name of the font to match (postscript name or font family, depending on matchFamily parameter)\n     * @param {boolean} matchFamily True to match the font family, false to match the postscript name.\n     * @returns {boolean} Whether or not the font is available.\n     */\n    isSystemFontAvailable(fontName, matchFamily) {\n        const key = fontName + (matchFamily ? ':family' : '');\n        let isAvailable = this.getCachedSystemFontAvailability(fontName, matchFamily);\n        if (!this._hasFetchedFontAvailability[key]) {\n            // If we don't know whether the font is available, we optimistically return true, and make sure\n            // that we check the actual state (if used in a MobX reaction, this will cause it to run when the\n            // data comes back).\n            isAvailable = isAvailable === undefined ? true : isAvailable;\n        }\n        return isAvailable;\n    }\n\n    /**\n     * Returns the cached availability of the given font on the system and triggers the system font availibility check to update the cache\n     *\n     * @param {string} fontName The name of the font to match (postscript name or font family, depending on matchFamily parameter)\n     * @param {boolean} matchFamily True to match the font family, false to match the postscript name.\n     * @returns {boolean} Whether or not the font is available according to the current cache.\n     */\n    getCachedSystemFontAvailability(fontName, matchFamily) {\n        this._changeAtom.reportObserved();\n\n        const key = fontName + (matchFamily ? ':family' : '');\n        const isAvailable = this._fontAvailableMap[key];\n\n        if (!this._hasFetchedFontAvailability[key]) {\n            // If we don't know whether the font is available, query the process to find out!\n            if (!this._pendingFontAvailabilityPromises[key]) {\n                this._pendingFontAvailabilityPromises[key] = this._getSystemFontAvailabilityFromProcess(fontName, matchFamily).then(isAvailable => {\n                    delete this._pendingFontAvailabilityPromises[key];\n                    this._fontAvailableMap[key] = isAvailable;\n                    this._hasFetchedFontAvailability[key] = true;\n                    this._onChange();\n                }, () => {\n                    // In case of error, we still need to clear the promise so we can try again!\n                    delete this._pendingFontAvailabilityPromises[key];\n                });\n            }\n        }\n        return isAvailable;\n    }\n\n    _getSystemFontAvailabilityFromProcess(fontName, matchFamily) {\n        return this._fontManager.isSystemFontAvailable(fontName, matchFamily);\n    }\n\n    _getFontDataFromProcess(postScriptName) {\n        return this._fontManager.getFontData(postScriptName).then(data => data.variation);\n    }\n}\n","// @ts-check\n\n/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\nimport { setUser as sentrySetUser } from '@sentry/browser';\nimport { computed, observable, when, observe, reaction, action, Atom, transaction } from 'mobx';\n/**\n * @typedef {import('@ccx-public/shared-asset-model-js').LinkReference} LinkReference\n * @typedef {import('@cclibraries/cc-libraries-js').Library} Library\n */\nimport { wrapElement } from 'app/js/models/modelCache';\nimport CCLibrariesModel from 'app/js/models/CCLibrariesModel';\nimport imsInterface from 'app/js/interface/imsInterface';\nimport localSettings from 'app/js/config/localSettings';\nimport featureFlags from 'app/js/config/featureFlags';\nimport configuration from 'app/js/config/configuration';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport localizedSorter from 'app/js/utils/localizedSorter';\nimport debugLog from 'app/js/utils/debugLog';\nimport metrics from 'app/js/interface/metrics';\nimport dialogManager from 'app/js/managers/dialogManager';\nimport toastManager from 'app/js/managers/toastManager';\nimport librarySizeManager from 'app/js/managers/librarySizeManager';\nimport environment from 'app/js/environment';\nimport { translate } from 'app/js/managers/translationManager';\nimport { SyncState } from 'app/js/state/syncState';\nimport { PublishState } from 'app/js/state/PublishState';\nimport {\n    showLibraryOnboarding,\n    showRootViewOnboarding,\n    shouldShowRootIntroOnboarding,\n    shouldShowDeleteNestedGroupContents,\n    showDeleteNestedGroupContents\n} from 'app/js/utils/onboardingUtils';\nimport {\n    launchBrowseAllURL,\n    launchMarketplaceURL,\n    launchCCWebMarketplaceURL\n} from 'app/js/utils/linkUtils';\nimport viewState from 'app/js/state/viewState';\nimport { PerformanceTimer } from 'app/js/utils/performanceUtils';\nimport BrowserUtils from 'app/js/utils/browserUtils';\nimport * as LibraryUtils from 'app/js/utils/libraryUtils';\nimport * as DocumentAssetsUtils from 'app/js/models/documentAssets/documentAssetsUtils';\nimport * as GroupUtils from 'app/js/utils/groupUtils';\nimport { getStaticCachedLinkedElementSourceRefString, getStaticSourceRefString } from 'app/js/utils/elementReferenceUtils';\nimport { getLibrariesInvitations, acceptInvitation } from 'app/js/interface/adobeInvitationsRest';\nimport { findMatchingElements, isSearchTextEmpty } from 'app/js/utils/searchUtils';\nimport { getSymbolId } from 'app/js/utils/elementMetadataUtils';\nimport ProgressiveLoaderWrapper from 'app/js/models/ProgressiveLoaderWrapper';\nimport linkManager from 'app/js/managers/linkManager';\nimport { throttle } from 'app/js/utils/promiseUtils';\n\n// Note: LibraryManager should be the _only_ place that imports 'cc-libraries-api-js' directly.\n// Accessing it directly elsewhere is really dangerous, because it won't be wrapped in MobX.\nimport CCLibraries, { CloudDriver, ProgressiveLoader, utils } from '@cclibraries/cc-libraries-js';\nimport libraryProcessManager from './libraryProcessManager';\nimport appState from 'app/js/appState';\nimport floodgateManager from './floodgateManager';\nimport FontManager from 'app/js/managers/FontManager';\nimport operationalMetrics from 'app/js/interface/operationalMetrics';\n\n/* eslint-disable no-unused-vars */\nimport DocumentAssetsContainer from 'app/applications/SPRK/js/models/documentAssets/DocumentAssetsContainer';\nimport DocumentElement from 'app/applications/SPRK/js/models/documentAssets/DocumentElement';\nimport DocumentGroup from 'app/applications/SPRK/js/models/documentAssets/DocumentGroup.js';\nimport ElementModel from 'app/js/models/ElementModel';\nimport GroupModel from 'app/js/models/GroupModel';\nimport LibraryModel from 'app/js/models/LibraryModel';\nimport TypekitFont from 'app/js/managers/utils/TypekitFont';\n/* eslint-enable no-unused-vars */\n\n/**\n * @typedef PublishGroupResult\n * @type {object}\n * @property {DocumentGroup} documentGroup - Source group\n * @property {GroupModel} group - Target group being updated\n*/\n\nconst INIT_CCLIBS = {\n    libraries: [],\n    isSyncingEnabled: () => false,\n    isConnected: () => false,\n    getServiceInfo: () => { },\n    getOption: () => undefined,\n    getLocalSetting: () => undefined,\n    resolveLibraryReference: () => Promise.resolve(undefined),\n    resolveCachedLibraryReference: () => undefined,\n    resolveElementReferenceToLibrary: () => Promise.resolve(undefined),\n    resolveElementReference: () => Promise.resolve(undefined),\n    resolveCachedElementReferenceToLibrary: () => undefined,\n    resolveCachedElementReference: () => undefined,\n    getPrimarySyncError: () => undefined,\n    on: () => undefined,\n};\n\n// Enum for quota error types.\nconst QUOTA_ERROR = {\n    OWNED: 'owned',\n    SHARED: 'shared'\n};\n\nconst JSAPI_SEARCH_TYPES = [ 'library', 'libraries' ];\n\nexport const LIBRARY_SYNC_STATES = {\n    UPLOADING: 'uploading',\n    DOWNLOADING: 'downloading',\n    DONE: undefined\n};\n\n/**\n * The LibraryManager is a singleton that does several things:\n * 1) manages Current Library state and persistent cache\n * 2) manages Libraries (getting observable libraries, elements from the Mobx-wrapped API, and deleting elements and libraries)\n * 3) exposes controls to initialize the CC Libraries API, and reflect this state\n * 4) exposes controls and information about state of the CC Libraries Service/Shared Local Storage Process\n * 5) manages Document Assets (getting observable assets from the Mobx-wrapped API)\n */\nexport class LibraryManager {\n    @observable isOnline = BrowserUtils.isOnline;\n    @observable.ref _ccLibraries;\n    @observable _tempDir = null;\n\n    // You can pass in your own model to wrap, e.g. for use in unit tests.\n    constructor(ccLibrariesModel) {\n        // Note: CCLibraries doesn't get initialized until the library manager is initialized, so we include an INIT_CCLIBS placeholder until then\n        this._ccLibraries = ccLibrariesModel || INIT_CCLIBS;\n\n        window.addEventListener('online', () => {\n            this.isOnline = true;\n        });\n\n        window.addEventListener('offline', () => {\n            this.isOnline = false;\n        });\n\n        this._tempDirDisposer = reaction(() => this._tempDir, () => environment.notifyLibraryTempDir?.(this._tempDir));\n    }\n\n    _onSyncStateChange() {\n        if (environment.setSyncState) {\n            environment.setSyncState(this.syncStatus);\n        }\n\n        if (this.librariesInitError) {\n            metrics.reportError('Initialize', 'Init', 'initialize-error', null, this.syncStatus.errorType);\n        }\n\n        if (configuration.currentProduct.config.mustHaveCurrentLibrary) {\n            if (this.syncStatus.state === 'ok' && this.areLibrariesLoaded && this.libraries.length > 0 && !this.currentLibrary) {\n                this.currentLibrary = this._findNextCurrentLibrary();\n                return;\n            }\n\n            if (!this.currentLibrary) {\n                viewState.resetMode();\n            }\n\n        } else {\n            if (!this.isAppLoggedIn) {\n                viewState.resetMode();\n            }\n        }\n    }\n\n    // If there are elements with broken links, we'll give the user a dialog with information on how to resolve them.\n    async _detectBrokenLinksAndOfferResolution() {\n        if (!this.documentAssetsContainer.missingLinks?.length) { return; }\n\n        // Some links might be broken simply because the user hasn't accepted the invitation to the source library or added the team library.\n        // So we fetch all team library data and library invitations to make sure we can tell the user if that's the case.\n        const checkInvitesAndTeamLibAccess = () => {\n\n            const promises = [];\n            let fetchInvitations = false;\n\n            this.documentAssetsContainer.missingLinks.forEach(asset => {\n                if (asset.isMissingLibrary && asset.cachedLinkedLibraryAssetId) {\n                    promises.push(this.fetchTeamLibraryData(asset.cachedLinkedLibraryAssetId));\n                }\n\n                // We only need to fetch invitations if there are assets linked to missing libraries for which we want to check or update the invite status.\n                // i.e. Legacy document links won't trigger a fetch of cc libraries invitations.\n                if (asset.isMissingLibraryLink) { fetchInvitations = true; }\n            });\n\n            if (fetchInvitations) {\n                promises.push(this.fetchLibraryInvitations());\n            }\n\n            return Promise.all(promises);\n        };\n\n        await checkInvitesAndTeamLibAccess();\n\n        if (this.documentAssetsContainer.resolvableMissingLinks.length) {\n            // Show the dialog to the user if we know there are action items that would help resolve the broken links.\n            // No need to fetch again since we just did it.\n            environment.openApplicationDialog?.('resolveBrokenLinks', { fetchInvitations: false });\n        }\n    }\n\n    // Link Migration to new reference format as JSON object\n    _migrateLinkReferences() {\n        environment.migrateLinkReferences?.(this.documentAssetsContainer.elements);\n    }\n\n    _syncState = new SyncState(this);\n    publishState = new PublishState(this);\n\n    get syncStatus() {\n        return this._syncState.status;\n    }\n\n    get publishStatus() {\n        return this.publishState.status;\n    }\n\n    get librariesInitError() {\n        return this.syncStatus.state === 'error' && !this.areLibrariesLoaded;\n    }\n\n    @computed get isSharingEnabled() {\n        if (!this.isOnline) {\n            return false;\n        }\n\n        if (this.syncStatus.state !== 'error') {\n            return true;\n        }\n\n        return this.syncStatus.errorType !== 'network' && this.syncStatus.errorType !== 'noAccess';\n    }\n\n    @computed get isRestrictedAccount() {\n        return this.syncStatus.errorType && this.syncStatus.errorType === 'noAccess';\n    }\n\n    @computed get isStarterPlanUser() {\n        return !this.publishState._isPaidUser;\n    }\n\n    // sets public flag to tell UI to show syncing icon, even though not technically syncing\n    // Status will update UI again whenever the status is updated next.\n    showSyncSpinner() {\n        this._syncState.showSyncSpinner();\n    }\n\n    @computed\n    get shutdownWarning() {\n        // For now, only the syncing status informs whether the user should get a warning\n        // when trying to shutdown the panel, but other stateful checks might go here in the future.\n        // (i.e we might also want to check whether the user has an incomplete rename operation in the UI, etc).\n        return this._syncState.shutdownWarning;\n    }\n\n    /**\n     * Fetch an access token via the CC Library process\n     *\n     * @param {string} userId\n     * @param {string} clientId\n     * @param {string} clientSecret\n     * @param {string} scopes\n     * @returns {Promise}\n     */\n    getAccessToken(userId, clientId, clientSecret, scopes) {\n        return this._ccLibraries.getAccessToken(userId, clientId, clientSecret, scopes);\n    }\n\n    /**\n     * Provides access to the underlying CC Libraries API object (which is wrapped in MobX).\n     * It's very rare that you need access to this - you should normally go through the libraryManager APIs,\n     * or other utilities.\n     */\n    dangerouslyAccessCCLibraries() {\n        return this._ccLibraries;\n    }\n\n    _restorePreviousCurrentLibrary = () => {\n        // XD should always show document assets when opening a document\n        if (configuration.currentProduct.config.defaultToDocumentAssets) {\n            this.currentLibrary = this.documentAssetsContainer;\n        } else if (!configuration.currentProduct.config.disableRestorePreviousCurrentLibrary) {\n            // Most recently saved library key in local settings as we currently store it\n            const localStorageLatestLibraryId = localSettings.getValue(this._getCurrentLibraryIdKey());\n\n            // Setup the current library for the user that just logged in\n            // If the root view onboarding still needs to been shown, should set current library to null so we revert to root view\n            const currentLibraryId = shouldShowRootIntroOnboarding() ? null : localStorageLatestLibraryId\n                || localSettings.getValue(this.userId + '#currentLibraryId')\n                || localSettings.getValue('currentDesignLibraryId'); // Backwards compatibility (stored this way for very old clients)\n\n            const currentLibrary = this.getLibraryById(currentLibraryId) || this._findNextCurrentLibrary();\n            environment.navigateToLibrary(currentLibrary);\n        }\n    }\n\n    _onLibrariesConnectionChange = () => {\n        operationalMetrics.initializeOperationalMetrics();\n        // If the connection state changed, a user logged in or out.\n        // We need to clear the access token cached by the imsInterface service.\n        imsInterface.clearAccessToken();\n\n        metrics.setUserId(this.userId);\n        floodgateManager.init(this.userId).then((featuresSet) => {\n            const isUsingHybridDriver = localSettings.getDebugValue('jsapiHybridDriver');\n            if (!isUsingHybridDriver && environment.hybridDriver && featuresSet && featuresSet.has('cc_libraries_managed_sync')) {\n                this._ccLibraries.changeDriver(environment.hybridDriver);\n            }\n            if (featuresSet && !featuresSet.has('ubs.brand_lifecycle') && configuration.currentProduct.config.code === 'GenStudio') {\n                // [GENSTUDIO ONLY] If M3 flag is not set, then revert to M2 flows by reinitializing JSAPI with new options.\n                // Workaround for M3, will be removed once we migrate all M2 clients.\n                const updatedOptions = {\n                    ...this._ccLibraries.options,\n                    enableBrandLifecycleManagement: false,\n                    includeApprovedBrandsInLibraries: true,\n                };\n                const cloudDriver = this._ccLibraries.cloudDriver;\n                if (cloudDriver) {\n                    cloudDriver.updateOptions(updatedOptions);\n                    this._ccLibraries = new CCLibraries(cloudDriver, updatedOptions);\n                }\n            }\n        });\n        sentrySetUser({ id: this.userId });\n        operationalMetrics.initializeOperationalMetrics(this.userId);\n    }\n\n    _onAreLibrariesLoadedChange = () => {\n        if (!this.areLibrariesLoaded) {\n            // Logged out - no current library\n            this.currentLibrary = undefined;\n            return;\n        }\n\n        // Construct legacy toggle state map.\n        this._initLegacyActiveLibrariesMap();\n\n        // Show root onboarding popover if the conditions are met\n        showRootViewOnboarding();\n    }\n\n    _initLegacyActiveLibrariesMap() {\n        this._legacyActiveLibraries = {};\n        this.libraries.forEach(library => {\n            this._legacyActiveLibraries[library.id] = libraryProcessManager.getLocalMachineSetting(this._legacyGetLibraryActiveKey(library));\n        });\n    }\n\n    /**\n     * Gets a temporary directory for the current library.\n     *\n     * This directory may be shared by other libraries, but it is not the same\n     * directory as the more general `configuration.strTempFolder`.\n     *\n     * @returns {string | undefined}\n     */\n    get tempDir() {\n        return this._tempDir;\n    }\n\n    // Get search loader class that contains search results\n    // Note: elementSort shoudl match JSAPI2 e.g. 'modifiedDate' instead of 'modified'\n    getSearchResults(query, filters, elementSort, searchViewState) {\n        //TODO: Get rid of this generator once JS API 2 is turned on\n        const legacySearchGenerator = async function *() {\n            const currentLibrary = this.currentLibrary;\n            const isDocumentSearchType = searchViewState.isDocumentSearchType();\n            if (isSearchTextEmpty(query) && (isDocumentSearchType || (currentLibrary && !searchViewState.isSearchMode()))) {\n                const library = isDocumentSearchType ? this.documentAssetsContainer : currentLibrary;\n                // For document assets or if not actively searching, all elements match.\n                return library.elements;\n            }\n\n            // Need to filter out document assets library for all libraries search because the document assets results will be combined in the LibrariesSearchState and we do not want duplicates\n            const libraries = (searchViewState.isLibrariesSearchMode() ? this.searchableLibraries.filter(lib => !lib.isDocumentAssets) : [ currentLibrary ]).filter(x => x);\n            const results = findMatchingElements(query, libraries);\n            yield results;\n        }.bind(this);\n\n        const shouldUseJSAPISearch = !this.disableCCLibraries && JSAPI_SEARCH_TYPES.includes(searchViewState.getSearchType());\n        const searchLoader = shouldUseJSAPISearch ? this._ccLibraries.getSearchResults(query, filters, elementSort) : new ProgressiveLoader(legacySearchGenerator);\n\n        return new ProgressiveLoaderWrapper(searchLoader);\n    }\n\n    @computed get platformFolders() {\n        // non-SAM enabled environments return an empty array for Projects currently, so fall back to teams endpoint\n        // https://git.corp.adobe.com/ProjectCentral/cc-libraries-js/blob/main/src/drivers/CloudDriver/index.ts#L816\n        return this._ccLibraries.projects || [];\n    }\n\n    @computed get userQuota() {\n        const userQuota = this._ccLibraries.userQuota;\n        if (userQuota) {\n            const byteMultiplier = Math.pow(configuration.BYTE_MULTIPLIER, 3);\n            // convert sizes to bytes instead of GB so we can use the bytesToString function on the values\n            return {\n                storage_quota: userQuota.storage_quota * byteMultiplier,\n                storage_used: userQuota.storage_used * byteMultiplier,\n                storage_available: userQuota.storage_available * byteMultiplier,\n            };\n        }\n    }\n\n    refreshTeams() {\n        return this._ccLibraries.refreshTeams();\n    }\n\n    /* Document Library and Published CC Document Library */\n\n    // Get and cache the library-like container of the document assets\n    @computed get documentAssetsContainer() {\n        return configuration.currentProduct.getDocumentAssetsContainer?.();\n    }\n\n    // Gets the library that is linked to the cloud document and that the cloud document is linked to.\n    // This is the library that contains elements published from document assets.\n    // The library returned is dependent on the current document context.\n    get publishedDocumentLibrary() {\n        if (!this.documentAssetsContainer) { return; }\n        const linkedLibraryId = this.documentAssetsContainer.linkedLibraryId;\n        return this.libraries.find(library =>\n            library.documentId === environment.cloudAssetId\n            && library.id === linkedLibraryId\n        );\n    }\n\n    // If the document group has a nameLocalizationKey, then store all the localized names on the published group.\n    // Assumes that if the group has a nameLocalizationKey (e.g. ASSETS_PANEL_COLOR_TITLE),\n    // that we have already agreed upon the string and stored it.\n    // returns {Promise}\n    _localizeGroup(documentGroup, group) {\n        if (!documentGroup.nameLocalizationKey) { return Promise.resolve(); }\n\n        this._cachedLocalizedNames = this._cachedLocalizedNames || {};\n        let locales = environment.supportedLocales;\n        const defaultLocale = environment.getLocale(true);\n        locales = locales.reduce((acc, locale) => {\n            if (locale !== defaultLocale) { acc.push(locale); }\n            return acc;\n        }, [ defaultLocale ]);\n\n        if (!this._cachedLocalizedNames[documentGroup.nameLocalizationKey]) {\n            // Avoid loading locale files every time we publish by caching the localized names\n            // { 'ASSETS_PANEL_COLOR_TITLE': { 'en_US': 'Colors', ... }, ... }\n            this._cachedLocalizedNames[documentGroup.nameLocalizationKey] = {};\n\n            const getAllLocalizedStrings = () => {\n                const localeToStringMap = {};\n                const promises = locales.map(locale => environment.fetchResourceBundle(locale).then(parsedStringsMap => {\n                    localeToStringMap[locale] = parsedStringsMap;\n                }));\n                return Promise.all(promises).then(() => localeToStringMap);\n            };\n\n            return getAllLocalizedStrings().then(localeToStringMap => {\n                locales.forEach(locale => {\n                    const translatedStrings = localeToStringMap[locale];\n                    const localizedName = translatedStrings[documentGroup.nameLocalizationKey];\n                    this._cachedLocalizedNames[documentGroup.nameLocalizationKey][locale] = localizedName;\n                    group.setLocalizedName(locale, localizedName);\n                });\n            });\n        }\n\n        locales.forEach(locale => {\n            if (this._cachedLocalizedNames[documentGroup.nameLocalizationKey] && this._cachedLocalizedNames[documentGroup.nameLocalizationKey][locale]) {\n                const localizedName = this._cachedLocalizedNames[documentGroup.nameLocalizationKey][locale];\n                group.setLocalizedName(locale, localizedName);\n            }\n        });\n\n        return Promise.resolve();\n    }\n\n    _updateGroupParents(publishResults, documentGroupToGroupMap) {\n        publishResults.forEach(({ documentGroup, group }) => {\n            const documentGroupParent = documentGroup.parent;\n            const groupParent = documentGroupParent && documentGroupToGroupMap[documentGroupParent.id];\n            group.parent = groupParent;\n        });\n    }\n\n    /**\n     * Create or update a group in the target publishedLibrary to match the given document library group.\n     * @param {DocumentGroup} documentGroup - the source group\n     * @param {LibraryModel} publishedLibrary - the target library to publish into\n     * @param {Object} documentGroupToGroupMap - a map of the document group to its published group\n     * @param {GroupModel} [existingGroup] - group to update\n     * @returns {Promise.<PublishGroupResult>} The published library group\n     */\n    _publishGroup(documentGroup, publishedLibrary, documentGroupToGroupMap, existingGroup) {\n        if (existingGroup) {\n            // Update existing group.\n            existingGroup.name = documentGroup.name;\n            existingGroup.order = documentGroup.order;\n            documentGroupToGroupMap[documentGroup.id] = existingGroup;\n            return Promise.resolve({ documentGroup, group: existingGroup });\n        }\n        // Create group.\n        metrics.setExtraEventMetrics('createGroup', { disableReport: true });\n        const group = publishedLibrary.createGroup(documentGroup.name, documentGroup.order);\n        documentGroupToGroupMap[documentGroup.id] = group;\n\n        // Set sourceRef on group to link back to source document and document group.\n        group.sourceRef = documentGroup.getReference();\n\n        return this._localizeGroup(documentGroup, group).then(() => ({ group, documentGroup }));\n    }\n\n    /**\n     * Create or update groups in the target publishedLibrary to match those in the document library\n     * will lose their current groups.\n     * @param {DocumentAssetsContainer} documentAssetsContainer - the source library and groups\n     * @param {LibraryModel} publishedLibrary - the target library to publish into\n     * @returns {Promise.<Object>} a mapping from the document group id to the published group\n     */\n    _publishGroups(documentAssetsContainer, publishedLibrary) {\n        const documentGroups = documentAssetsContainer.getGroups();\n        const publishedGroups = publishedLibrary.getGroups();\n\n        const {\n            newItems: newDocumentGroups, itemsToDelete: groupsToDelete, itemsToUpdate: groupsToUpdate, unchangedItems: unchangedGroups\n        } = DocumentAssetsUtils.diffGroups(publishedGroups, documentGroups);\n\n        const groupPromises = [];\n        const documentGroupToGroupMap = unchangedGroups.reduce((acc, { source: documentGroup, target: group }) => {\n            acc[documentGroup.id] = group;\n            return acc;\n        }, {});\n\n        // Also disable the undo-toast as the library should always reflect the document assets.\n        metrics.setExtraEventMetrics('removeGroup', { disableReport: true });\n        this.deleteGroups(groupsToDelete, { checkForDependents: false, showUndoToast: false, hasSeenWarning: true });\n\n        newDocumentGroups.forEach(documentGroup => {\n            groupPromises.push(this._publishGroup(documentGroup, publishedLibrary, documentGroupToGroupMap));\n        });\n\n        groupsToUpdate.forEach(({ target: group, source: documentGroup }) => {\n            groupPromises.push(this._publishGroup(documentGroup, publishedLibrary, documentGroupToGroupMap, group));\n        });\n\n        return Promise.all(groupPromises).then(publishResults => {\n            this._updateGroupParents(publishResults, documentGroupToGroupMap);\n            return documentGroupToGroupMap;\n        });\n    }\n\n    // Maps the asset group data onto the element\n    _updateGroupsMetadata(element, documentElement, documentGroupToGroupMap) {\n        if (documentGroupToGroupMap) {\n            const documentGroups = documentElement.getGroups();\n            documentGroups.forEach(documentGroup => {\n                const group = documentGroupToGroupMap[documentGroup.id];\n                const order = documentElement.getOrderInGroup(documentGroup);\n                metrics.setExtraEventMetrics('updateElement', { disableReport: true });\n                element.setOrderInGroup(group, order);\n            });\n        }\n    }\n\n    /**\n     * Create or update an element in the target publishedLibrary from the asset.\n     * Assumes that _publishGroups has already been called to delete/recreate groups\n     * and _diffElement was already called to determine whether an update is needed to more than just the groups data.\n     * @param {DocumentElement} documentElement - the source asset\n     * @param {LibraryModel} publishedLibrary - the target library to publish into\n     * @param {Object} documentGroupToGroupMap - a map of the document group to its published group\n     * @param {ElementModel} [existingElement] - element to update\n     * @param {boolean} [updateContent] - will result in a change in the modified date of the existingElement (accounts for changes to name as well as representations for now)\n     * @returns {Promise} - does not resolve to the element\n     */\n    _publishElement(documentElement, publishedLibrary, documentGroupToGroupMap, existingElement, updateContent) {\n        if (!documentElement || !publishedLibrary || !documentGroupToGroupMap) { return Promise.resolve(); }\n\n        // If the element was removed, restore it.\n        if (existingElement && existingElement.removed) {\n            publishedLibrary.restoreElement(existingElement);\n        }\n\n        // There are no changes to make to the element (other than the required group metadata changes)\n        if (existingElement && !updateContent) {\n            // This does not change the modified date on the element, only the library;\n            // so a gated update will not be triggered on assets linked to this element.\n            this._updateGroupsMetadata(existingElement, documentElement, documentGroupToGroupMap);\n            // Always overwrite sourceRef because the document id part of it may change if the published doc lib\n            // is relinked to a forked document, or it may need to be updated to the new link schema.\n            if (existingElement.sourceRefString !== documentElement.getReferenceString()) {\n                // NOTE: This wont trigger a gated update in a consuming asset update\n                // unless the element's instanceID (content) or name changes,\n                // as detected in DocumentElement._elementLinkState.\n                existingElement.sourceRef = documentElement.getReference();\n            }\n            return Promise.resolve({ element: existingElement });\n        }\n\n        const elementConfig = elementConfiguration._getConfiguration(documentElement.type);\n        if (elementConfig && elementConfig.createOrUpdateElementFromAsset) {\n            // Create or update the element, element name, and primary representation\n            // TODO: Decide whether the update to 'name' should move from the config to here\n            metrics.setExtraEventMetrics('updateElement', { disableReport: true });\n            return elementConfig.createOrUpdateElementFromAsset(documentElement, publishedLibrary, 'publish', existingElement)\n                .then(({ element, dependentAssetIds }) => {\n                    // We always set the groups metadata as the asset might have been moved or its group deleted.\n                    this._updateGroupsMetadata(element, documentElement, documentGroupToGroupMap);\n\n                    // Set sourceRef on element to link back to source document and asset.\n                    // Always overwrites sourceRef because the document id part of it may change if the published doc lib\n                    // is relinked to a forked document, or in order to update the reference to the new link schema.\n                    element.sourceRef = documentElement.getReference();\n\n                    return Promise.resolve({ element, dependentAssetIds });\n                });\n        }\n    }\n\n    /**\n     * Updates the dependencies array for the published element\n     * @param {*[]} publishResults - the results from _publishElement\n     * @returns {ElementModel[]} - returns elements that had errors updating\n     */\n    _updateElementDependencies(publishResults) {\n        let assetIdToElement;\n        const publishedLibrary = this.publishedDocumentLibrary;\n        const errorElements = [];\n\n        publishResults.forEach(({ element, dependentAssetIds }) => {\n            if (!element || !dependentAssetIds) {\n                // if there's no element or dependentAssetIds then there's no changes to make\n                return;\n            }\n\n            // ensure no back references\n            const rootSourceId = LibraryUtils.getSourceId(element);\n            const filteredAssetIds = dependentAssetIds.filter(id => id !== rootSourceId);\n\n            // See if the existing dependencies changed compared to the new filteredAssetIds\n            const isDependencyEqual = (dep, index) => LibraryUtils.getSourceId(dep) === filteredAssetIds[index];\n            if (!element.hasMissingDependencies && element.dependencies.length === filteredAssetIds.length && element.dependencies.every(isDependencyEqual)) {\n                return;\n            }\n\n            // build map of asset ids to elements if it's not already built\n            if (!assetIdToElement) {\n                assetIdToElement = new Map();\n                publishedLibrary.elements.forEach((element) => {\n                    assetIdToElement.set(LibraryUtils.getSourceId(element), element);\n                });\n            }\n\n            try {\n                element.dependencies = filteredAssetIds.map(assetId => assetIdToElement.get(assetId));\n            } catch (e) {\n                errorElements.push(element);\n                const msg = 'Error updating dependencies: ' + e;\n                // add context if the error was due to missing ids\n                const missingIds = filteredAssetIds.filter(assetId => !assetIdToElement.has(assetId));\n                if (missingIds.length) {\n                    msg + ' Unmapped Assets Ids: ' + missingIds;\n                }\n                debugLog.log(msg);\n            }\n        });\n\n        return errorElements;\n    }\n\n    /**\n     * Listen for a sync state update to finalize\n     * @param {*} publishedLibrary\n     * @param {*} syncState\n     * @param {function(string): void=} [log]\n     * @returns {[Promise, function(): void]} - Sync state future, Sync state reaction disposer\n     * @memberof LibraryManager\n     */\n    // eslint-disable-next-line no-unused-vars\n    syncStateCompleteListener(publishedLibrary, syncState, log = (msg) => {}) {\n        let clear;\n        const completePromise = new Promise(resolve => {\n            debugLog.log(`waiting for '${syncState}' sync state`);\n            // eslint-disable-next-line prefer-const\n            let preStateHit;\n\n            clear = () => {\n                log(`Clearing wait for sync state ${syncState}`);\n                clearTimeout(syncStateTimeout);\n                syncStateDisposer();\n                resolve();\n            };\n\n            const syncStateTimeout = setTimeout(clear, 1000 * 60);\n            const syncStateDisposer = reaction(\n                () => publishedLibrary.syncState,\n                value => {\n                    log(`Sync state update: ${value}`);\n                    if (value === syncState) {\n                        log(`State '${syncState}' hit for published library.`);\n                        clearTimeout(syncStateTimeout);\n                        preStateHit = true;\n                    }\n\n                    if (value === undefined && preStateHit) {\n                        log(`${syncState} complete`);\n                        clear();\n                    }\n                },\n                { fireImmediately: true }\n            );\n        });\n\n        return [ completePromise, clear ];\n    }\n\n    /**\n     * Part of the XD document workflow is to request a lock on the document before publishing.\n     * This is to reduce the chance of a race condition where 2 coeditors attempt to publish at the same time.\n     * If requesting the publish lock fails on XD side and this is a first time publish event we should clean up\n     * after ourselves by unpublishing the linked library\n     * @param {boolean} isFirstTimePublishing - boolean value stating if we are publishing a document library for the first time\n   */\n    async _requestPublish(isFirstTimePublishing = false) {\n        try {\n            return await configuration.currentProduct.config.requestPublish?.();\n        } catch (e) {\n            if (isFirstTimePublishing) {\n                this.unpublish(this.publishedDocumentLibrary);\n            }\n            appState.manager.toastManager.openToast(\n                'message',\n                {\n                    variant: 'error',\n                    message: translate('DL_PUBLISH_GENERAL_ERROR_TOAST')\n                }\n            );\n            throw e;\n        }\n    }\n\n    /**\n     * Creates a new CC Library with elements that are created from the assets in the Document Library.\n     * If the published document library for this document already exists,\n     * it updates that library with any changes from the assets or document name.\n     * Prevents any MobX reactions to changes to observable models from running until the library is returned.\n     * Assumes you have previously checked this.publishStatus to determine whether to create a published library.\n     * @param {DocumentAssetsContainer} documentLibrary The document library to publish into a CC Library\n     * @param {Object} [folder] optional target folder for creating a team library\n     * @param {Object} opts\n     * @returns {Promise<LibraryModel>}\n     */\n    @action async publish(documentLibrary, folder, opts = {}) {\n        // only publish if there is a global cloud asset id for the document\n        if (!documentLibrary || !environment.cloudAssetId) { return Promise.reject('Missing documentLibrary or cloudAssetId'); }\n\n        if (this._isPublishing) {\n            return Promise.reject();\n        }\n        this._isPublishing = true;\n\n        // Stop listening for sync errors on the library.\n        this._clearPublishQuotaErrorListener();\n\n        let publishedLibrary = this.publishedDocumentLibrary || this.relinkableLibrary;\n        const isFirstTimePublishing = !publishedLibrary;\n        if (isFirstTimePublishing) { // create Published Library\n            opts.team = folder;\n            publishedLibrary = this._ccLibraries.createLibrary(environment.documentName, opts);\n            operationalMetrics.sendCreateLibraryEvent(publishedLibrary);\n\n            // Immediately link library to the document to prevent modification of the library,\n            // before calling beginOperation() and adding elements\n            publishedLibrary.linkToDocument(environment.cloudAssetId, environment.documentType);\n            // Link document back to publishedLibrary\n            environment.linkDocumentToLibrary(publishedLibrary.id);\n            // Relink document on being updated with actual library info which is created asyncly\n            // and it is guarenteed to be called before publish action is completed\n            // since we wait till new element and group creation is resolved\n            this._publishedLibraryIdDisposer = reaction(() => publishedLibrary.previousPlaceHolderId, () => {\n                environment.linkDocumentToLibrary(publishedLibrary.id);\n            }, { fireImmediately: true });\n        }\n\n        // Relink (steal) the document library if needed.\n        if (publishedLibrary === this.relinkableLibrary) {\n            publishedLibrary.linkToDocument(environment.cloudAssetId, environment.documentType);\n        }\n\n        const _publishToLibrary = (documentLibrary, publishedLibrary) => {\n            publishedLibrary.beginOperation();\n\n            if (isFirstTimePublishing) {\n                // Create Groups before creating elements\n                return this._publishGroups(documentLibrary, publishedLibrary).then(documentGroupToGroupMap => {\n                    // Create Elements\n                    const elementPromises = documentLibrary.elements.map(documentElement => {\n                        return this._publishElement(documentElement, publishedLibrary, documentGroupToGroupMap);\n                    });\n                    return Promise.all(elementPromises);\n                });\n            } else { // Republish\n                // Changing the document name does not trigger a publish, but it will be updated whenever publish occurs.\n                if (environment.documentName !== publishedLibrary.name) {\n                    publishedLibrary.name = environment.documentName;\n                }\n\n                // Diff elements.\n                const {\n                    newItems: newAssets, itemsToDelete: elementsToDelete, itemsToUpdate: elementsToUpdate, unchangedItems: unchangedElements\n                } = DocumentAssetsUtils.diffElements([ ...publishedLibrary.elements, ...publishedLibrary.removedElements ], documentLibrary.elements, publishedLibrary, documentLibrary);\n\n                // Delete and recreate groups (elements' group metadata must be updated afterwards)\n                return this._publishGroups(documentLibrary, publishedLibrary).then(documentGroupToGroupMap => {\n                    /* Check for changes in elements (only after groups are created) */\n                    const elementPromises = [];\n                    elementsToUpdate.forEach(update => {\n                        const { target: element, source: asset, diff } = update;\n                        // The element must be republished to update the groups data,\n                        // but distinguish whether content needs to be updated (i.e. not only groups changed)\n                        elementPromises.push(this._publishElement(asset, publishedLibrary, documentGroupToGroupMap, element, diff === configuration.ELEMENT_CHANGE_TYPE.CONTENT));\n                    });\n                    unchangedElements.forEach(update => {\n                        const { target: element, source: asset } = update;\n                        // Even though there are no changes, the groups metadata will have been removed\n                        // when groups were published, so the element needs to update group metadata again.\n                        elementPromises.push(this._publishElement(asset, publishedLibrary, documentGroupToGroupMap, element, false));\n                    });\n\n                    // Also disable the undo-toast as the library should always reflect the document assets.\n                    this.deleteElements(elementsToDelete, true, false, false);\n                    newAssets.forEach(asset => {\n                        elementPromises.push(this._publishElement(asset, publishedLibrary, documentGroupToGroupMap));\n                    });\n\n                    return Promise.all(elementPromises);\n                });\n            }\n        };\n\n        const logProgress = debugLog.progress(configuration.PROGRESS_LOG.PUBLISHING);\n        debugLog.log(`Publishing document library...`);\n\n        // Logging is really expensive since so much is happening during the publish. We disable logging until the publish completes\n        environment.disableAPILoggingByDefault && !featureFlags.get('apiLogging') && debugLog.disable();\n\n        let publishCompleteResolver, syncStateCompleteDisposer;\n        // First we have to ask XD for publish access. When this resolves, we can then start publishing\n        // Then we can report a publish event is taking place allowing the product to hook into the publish workflow.\n        try {\n            publishCompleteResolver = await this._requestPublish(isFirstTimePublishing);\n\n            // We wait for uploading to complete before updating client that publishing has completed\n            // Setting up here before any modifictions take place so we do not miss the observation changes\n            const [ completePromise, syncStateDisposer ] = this.syncStateCompleteListener(publishedLibrary, LIBRARY_SYNC_STATES.UPLOADING, logProgress.log);\n            syncStateCompleteDisposer = syncStateDisposer;\n            completePromise.then(() => {\n                logProgress.log('Sync state listener for published library upload resolved');\n                logProgress.end();\n                configuration.currentProduct.config.notifyPublishEnd?.();\n            });\n            const publishResults = await _publishToLibrary(documentLibrary, publishedLibrary);\n\n            operationalMetrics.sendPublishLibraryEvent(publishedLibrary);\n            debugLog.enable();\n            logProgress.log('Created elements');\n            this._updateElementDependencies(publishResults);\n            logProgress.log('Updated dependencies');\n            publishedLibrary.endOperation();\n            logProgress.log('Committed');\n\n            // We'll unpublish the library if it fails to sync upon first publish.\n            this._startPublishQuotaErrorListener();\n\n            return publishedLibrary;\n\n        } catch (err) {\n            debugLog.enable();\n            logProgress.log(`Error: ${err}`);\n            logProgress.end();\n            syncStateCompleteDisposer?.();\n            throw err;\n        } finally {\n            logProgress.log(`Setting isPublishing false and updating environment`);\n            this._isPublishing = false;\n            publishCompleteResolver?.();\n        }\n    }\n\n    @action unpublish(publishedDocumentLibrary) {\n        if (!publishedDocumentLibrary || !environment.linkDocumentToLibrary) { return; }\n        // Remove link to library from document\n        environment.linkDocumentToLibrary();\n        // Dispose any quota error reactions.\n        this._clearPublishQuotaErrorListener();\n        // We don't need to remove the links back to the document, since the library is being deleted.\n        return this.deleteLibrary(publishedDocumentLibrary);\n    }\n\n    @observable _isPublishing = false;\n\n    get isPublishing() {\n        return this._isPublishing;\n    }\n\n    // If the document points to a published document library, but that library doesn't point back to the document,\n    // that library is a candidate for relinking (i.e. to be stolen from the document it currently points to\n    // by pointing it to this document)\n    @computed get relinkableLibrary() {\n        if (this.publishState.isPublishedLibraryNotFound) {\n            const documentLinkedLibraryId = this.documentAssetsContainer.linkedLibraryId;\n            return this.libraries.find(library => library.id === documentLinkedLibraryId);\n        }\n    }\n\n    // Writable document libraries that point to (have been published from) the document,\n    // excluding the current published document library that the document already points to.\n    // These are candidates for relinking (i.e. the document will point to it, making the current publishedDocumentLibrary into an orphan instead)\n    @computed get orphanedLibraries() {\n        const documentLinkedLibraryId = this.documentAssetsContainer.linkedLibraryId; // the id of the lib that the doc points to\n        return this.libraries.filter(library => {\n            return library.documentId === environment.cloudAssetId\n                && library.documentType === environment.documentType\n                && library.isWritable\n                && library.id !== documentLinkedLibraryId; // i.e. this is the current publishedDocumentLibrary that the doc already points to\n        });\n    }\n\n    /* Libraries */\n\n    getCCLibraries(includePartiallyLoadedLibraries = false) {\n        if (!this._ccLibraries.isConnected() && !environment.maintainConnectionToProcess) {\n            return [];\n        }\n        return this._ccLibraries.libraries.filter(lib => {\n            // If showToolkitLibraries is turned off, filter out any toolkit libraries\n            if (!featureFlags.get('showToolkitLibraries') && lib.toolkitId) {\n                return false;\n            }\n            // If includePartiallyLoadedLibraries is false library is not loaded is turned off, filter out any not loaded libraries\n            if (!includePartiallyLoadedLibraries && !lib.isLibraryLoaded) {\n                return false;\n            }\n            return true;\n        });\n    }\n\n    // All active (toggled) CC Libraries except for the one published from this document (in XD), which show in root view\n    @computed get activeLibraries() {\n        return this.libraries.filter(library => {\n            if (!this.publishedDocumentLibrary) { return this.isLibraryActive(library); }\n            return this.isLibraryActive(library) && library.id !== this.publishedDocumentLibrary.id;\n        });\n    }\n\n    // Not loaded libraries should only be used for search and nothing else\n    @computed get partiallyLoadedLibraries() {\n        const allLibraries = this.getCCLibraries(true) || [];\n        return allLibraries.filter(library => !library.isLibraryLoaded);\n    }\n\n    // Should be able to search both active libraries and document library and libraries that are not yet loaded\n    @computed get searchableLibraries() {\n        const activeAndDocumentLibraries = this.documentAssetsContainer ? [ this.documentAssetsContainer, ...this.activeLibraries ] : this.activeLibraries;\n        return [ ...activeAndDocumentLibraries, ...this.partiallyLoadedLibraries ];\n    }\n\n    // Get all libraries - this will return them sorted by name,\n    // since most of the time that's the order we display them to the user.\n    // Filters out any not loaded libraries\n    @computed get libraries() {\n        const allLibraries = this.getCCLibraries();\n        localizedSorter.sortByName(allLibraries);\n        return allLibraries;\n    }\n\n    // Gets the most recently accessed libraries - this is used to display the\n    // \"recents\" section of the library dropdown menu. If you have fewer than 12 libraries, this includes\n    // all libraries, otherwise it's the top 6 most recently accessed.\n    // The current library is always top of this list.\n    @computed get recentLibraries() {\n        const allLibraries = this.getCCLibraries();\n\n        // We show between 5 and 8 recent libraries, depending on how many libraries we have\n        const numRecentLibraries = this.libraries.length > configuration.RECENTS_LIST_LIBRARY_MIN /* 8 */\n            ? configuration.RECENTS_LIST_LIMIT /* 5 */\n            : allLibraries.length;\n\n        // Sorts the most recent libraries first (so it's in reverse order of the last access timestamp)\n        const recencySortFn = (lib1, lib2) => {\n            const t1 = this.getLastAccess(lib1);\n            const t2 = this.getLastAccess(lib2);\n            return t1 > t2 ? -1 : (t1 < t2 ? 1 : 0);\n        };\n\n        return allLibraries.sort(recencySortFn).slice(0, numRecentLibraries);\n    }\n\n    getLibraryById(id) {\n        if (this.documentAssetsContainer && this.documentAssetsContainer.id === id) {\n            return this.documentAssetsContainer;\n        }\n        return this._ccLibraries.getLibraryById(id);\n    }\n\n    getLibraryByAssetId(assetId) {\n        // Note: Some clients pass in malformed asset ids\n        return this.libraries.find(library => library.assetId && library.assetId.toLowerCase() === assetId.toLowerCase());\n    }\n\n    getLibraryByToolkitId(tooltkitId) {\n        return this._ccLibraries.getLibraryByToolkitId(tooltkitId);\n    }\n\n    /* Current library */\n\n    // @observable.ref creates an observable property which tracks the reference but doesn't try to wrap its value.\n    // The library already has an observable wrapper thanks to the API wrapper.\n    @observable.ref _currentLibrary;\n\n    get currentLibrary() {\n        return this._currentLibrary;\n    }\n\n    set currentLibrary(library) {\n        // Don't re-run all the side effects when just setting to the same library,\n        // nor when changing between `undefined` and `null`.\n        if (this._currentLibrary === library || (!this.currentLibrary && !library)) {\n            return;\n        }\n\n        const { viewState } = appState.panel;\n\n        // Clear current selection on currentLibrary change\n        viewState.setCurrentSection(null);\n        this._currentLibrary = library;\n\n        // Always clear the selection when we switch libraries\n        viewState.clearAllSelections();\n\n        // Clear the search query when switching libraries.\n        viewState.setSearchText('');\n\n        // Clear the filters applied to the previous library.\n        viewState.librariesSearchState.clearFilters();\n\n        // Stop listening for the previous current library being deleted.\n        this._clearDeletionListener();\n\n        // Stop listening for elements to be loaded in to run delimeter migration check\n        this._clearElementLoadCheckListener();\n\n        // Stop listening for document changes\n        this._clearDocumentChangeListener();\n\n        // Stop listening for assetId changes.\n        this._clearAssetIdChangeListener();\n\n        if (library) {\n            // Set the search context to the library.\n            viewState.setSearchType('library');\n\n            // Start loading the library elements in the order they appear in the UI\n            LibraryUtils.loadSortedElements(library);\n\n            // The documentAssetsContainer's method to load elements is a no-op and its elements are loaded by the host app.\n            // If the document has been published, load the elements for publishDocumentLibrary as well, which is the library\n            // from the JSAPI that the documentAssetsContainer links to.\n            if (library === this.documentAssetsContainer && this.publishedDocumentLibrary) {\n                LibraryUtils.loadSortedElements(this.publishedDocumentLibrary);\n            }\n\n            // Record what library we've switched to (so it's remembered on restart)\n            // Also records the last access time of the library, which we use for the recent libraries list\n            if (this.areLibrariesLoaded) {\n                const currentLibraryDateKey = this._getCurrentLibraryIdKey() + library.id;\n                localSettings.setValue(this._getCurrentLibraryIdKey(), library.id);\n                localSettings.setValue(currentLibraryDateKey, Date.now());\n            }\n\n            // Make sure the library is toggled on!\n            if (!this.isLibraryActive(library)) {\n                this.setLibraryActiveState(library, true);\n            }\n\n            // Open the migration dialog if the library needs to be migrated when the library's elements are loaded\n            this._elementLoadCheckListener = when(() => library.areElementsLoaded, () => {\n                if (LibraryUtils.shouldOfferDelimitedNamesConversion(library)) {\n                    dialogManager.openDialog('migrateLibraryWithSlashes', { library });\n                }\n            });\n\n            // Exclude document assets and libraries that aren't fully loaded.\n            if (!library.isTransient && library !== this.documentAssetsContainer) {\n                const libraryStillExists = () => {\n                    return this.libraries.includes(library);\n                };\n\n                // When the current library is deleted, change to next current library if product requires a current library\n                this._deletionListener = when(() => !libraryStillExists(), () => {\n                    const nextLibrary = this.areLibrariesLoaded && this._findNextCurrentLibrary();\n                    if (nextLibrary && environment.isViewMounted) {\n                        environment.navigateToLibrary(nextLibrary);\n                    } else {\n                        environment.navigateToLibrary(null);\n                    }\n                });\n\n                // Re-navigate to the library whenever its assetId changes.\n                this._assetIdChangeListener = reaction(() => library.assetId, () => {\n                    // This is helpful in workflows that result in a new library that should immediately be navigated to (i.e create, promote).\n                    // The assetId of a library, though, is only available after it syncs to the cloud, and there are certain\n                    // contexts where navigation is only possible once the library gets an assetId (i.e Express expanded view, url is assetId).\n                    // This reaction essentially accepts the currentLibrary assignment but queues up another the navigation\n                    // for when the library gets an assetId.\n                    environment.navigateToLibrary(library);\n                });\n            }\n\n            if (library === this.documentAssetsContainer) {\n                const localCachedLibraryId = library.id;\n                this._documentChangeListener = reaction(() => environment.documentId, value => {\n                    if (localCachedLibraryId !== value) {\n                        environment.navigateToLibrary(this._findNextCurrentLibrary());\n                    }\n                });\n            }\n\n            // Show onboarding popover if the conditions are met\n            showLibraryOnboarding();\n\n            this._ccLibraries.getTempDir(library)\n                .then(tempDir => this._tempDir = tempDir)\n                .catch(e => {\n                    debugLog.log(`Could not fetch temp directory: ${e}`);\n                    this._tempDir = null;\n                });\n        } else {\n            // If there's no library, ensure that the dialog manager closes any dialogs we have open\n            dialogManager.closeDialog();\n\n            // Also ensure we set the right search context.\n            viewState.setSearchType(configuration.currentProduct.config.rootViewSearchType ?? 'libraries');\n\n            // Set brand kit mode to false if it is currently active\n            if (viewState.isBrandKitMode()) {\n                viewState.setBrandKitMode(false);\n            }\n\n            if (this.areLibrariesLoaded) {\n                // Record that we're in the root view, if the user switched to it\n                localSettings.setValue(this._getCurrentLibraryIdKey(), null);\n            }\n\n            this._tempDir = null;\n        }\n    }\n\n    _findNextCurrentLibrary() {\n        if (this.documentAssetsContainer && configuration.currentProduct.config.defaultToDocumentAssets) {\n            // Whenever the most recent library can't be determined (missing library or we're on a new document) default to document assets.\n            return this.documentAssetsContainer;\n        }\n        if (!configuration.currentProduct.config.mustHaveCurrentLibrary) {\n            return null;\n        }\n\n        let mostRecentLibrary;\n        let mostRecentAccess;\n\n        this.libraries\n            .filter(library => {\n                if (!featureFlags.get('showToolkitLibraries') && library.toolkitId) {\n                    return false;\n                }\n                return true;\n            })\n            .forEach(library => {\n                const lastAccess = this.getLastAccess(library);\n\n                if (!mostRecentAccess || lastAccess > mostRecentAccess) {\n                    mostRecentLibrary = library;\n                    mostRecentAccess = lastAccess;\n                }\n            });\n        return mostRecentLibrary;\n    }\n\n    /**\n     * @typedef Team\n     * @property {string} name - name of a team\n     * @property {string} id - id of the team\n     *\n     * @typedef Role\n     * @property {string} type\n     * @property {string} [usage]\n     * @property {string} [priority]\n     *\n     * @param {string} name\n     * @param {Object} [opts] - optional information to attach to created library\n     * @param {string} [opts.permissionInheritance] - 'read' | 'all'\n     * @param {Team} [opts.team] - create a library under a particular team\n     * @param {Role[]} [opts.roles] - roles associated with the new library\n     */\n    createLibrary = function(name, opts = {}) {\n        if (!this._ccLibraries.isConnected()) {\n            return;\n        }\n        viewState.resetCurrentLibrariesFilter();\n        const isCreatingFirstLib = this.areLibrariesLoaded && !this.libraries.length;\n        const library = this._ccLibraries.createLibrary(name, opts);\n\n        // report operational event.\n        operationalMetrics.sendCreateLibraryEvent(library, { ccl: { is_creating_first_library: isCreatingFirstLib } });\n        // New libraries should be active by default.\n        this.setLibraryActiveState(library, true);\n        return library;\n    }\n\n    /*\n    * @param {string} teamUrn\n    * @param {string} name\n    */\n    createTeamLibrary = function(teamUrn, name, opts = {}) {\n        const folder = this.platformFolders.find(folder => folder.id === teamUrn);\n\n        if (folder) {\n            viewState.resetCurrentLibrariesFilter();\n            opts.team = folder;\n            const library = this._ccLibraries.createLibrary(name, opts);\n            // report operational event.\n            operationalMetrics.sendCreateLibraryEvent(library);\n            // New libraries should be active by default.\n            this.setLibraryActiveState(library, true);\n            return library;\n        }\n    }\n\n    loadLibraryByAssetId(assetId) {\n        return this._ccLibraries.loadLibraryByAssetId(assetId);\n    }\n\n    unfollowLibrary(library) {\n        if (!library || LibraryUtils.isOwnedLibrary(library)) {\n            return;\n        }\n\n        return this._ccLibraries.unfollowLibrary(library);\n    }\n\n    followLibrary(assetId, libraryId) {\n        return this._ccLibraries.followLibrary(assetId, libraryId);\n    }\n\n    /**\n     * Deletes the given library - if it's a public library, this corresponds to removing the bookmark.\n     *\n     * If the current library is deleted on this machine (either in this app, or another), we'll automatically switch\n     * to a different library. This is because the user can't continue to modify the library after we've deleted it from disk storage.\n     *\n     * If a library is deleted on the server, however, one of two things happens:\n     * - If it's not the current library, it'll be deleted locally (see the constructor for the code that does this).\n     * - If it _is_ the current library, we'll show a message in the panel that it was deleted - this is just so that it's less\n     *   jarring to the user (the library doesn't suddenly disappear while they're using it).\n     *\n     * @param {LibraryModel} library\n     */\n    deleteLibrary(library) {\n        if (!library || LibraryUtils.isPublicLibrary(library) || library.isDeletedLocally) {\n            return;\n        }\n\n        viewState.lockToolkit(library);\n        if (!environment.isLibraryManagerWindowOpen()) {\n            metrics.setExtraEventMetrics('removeLibrary', { library, event: { pagename: viewState.isRootView() && 'Root View' || this.currentLibrary && this.currentLibrary.isDocumentAssets && 'Document Assets View' || 'Library View' } });\n        }\n\n        // Only remove the library if it still exists locally\n        const removeLibraryResponse = this._ccLibraries.removeLibrary(library);\n        // Note: The constructor sets up a reaction that updates the currentlibrary once it is deleted locally.\n\n        operationalMetrics.sendDeleteLibraryEvent(library);\n        return removeLibraryResponse;\n    }\n\n    moveLibrary(library, folder, opts) {\n        const moveLibraryResponse = this._ccLibraries.moveLibrary(library, folder, opts);\n        operationalMetrics.sendMoveLibraryEvent(library);\n        return moveLibraryResponse;\n    }\n\n    copyLibrary(library, folder, opts) {\n        return this._ccLibraries.copyLibrary(library, { team: folder, ...opts });\n    }\n\n    importLibrary(path, callback) {\n        return this._ccLibraries.importLibrary(path, callback);\n    }\n\n    exportLibrary(library, path, callback) {\n        return this._ccLibraries.exportLibrary(library, path, callback);\n    }\n\n    publishBrand(brand) {\n        return this._ccLibraries.publishBrand(brand);\n    }\n\n    unpublishBrand(brand) {\n        return this._ccLibraries.unpublishBrand(brand);\n    }\n\n    // Key used for the currentLibrary cached in Local Settings (file based persistent/offline storage)\n    _getCurrentLibraryIdKey() {\n        return `${this.userId}#currentLibraryId`;\n    }\n\n    /**\n     * Deletes an array of elements, and stores them under the `lastDeletedElements` property. This is used by\n     * the undo message that pops up when you delete elements, giving the user a few seconds to change their mind.\n     *\n     * @param {ElementModel[]} elements array of elements to delete\n     * @param {boolean} [permanentlyDelete=false]\n     * @param {boolean} [checkForDependents=true]\n     * @param {boolean} [showUndoToast=true]\n     */\n    @action deleteElements(elements, permanentlyDelete = false, checkForDependents = true, showUndoToast = true) {\n        if (!elements || elements.length === 0) {\n            return;\n        }\n\n        // Check to see if there are any elements that have dependents in the library\n        if (checkForDependents && LibraryUtils.doElementsHaveDependents(elements)) {\n            LibraryUtils.confirmOperationWithDependents('delete', elements.length > 1 ? 'elements' : 'element',\n                () => this.deleteElements(elements, permanentlyDelete, false));\n            return;\n        }\n\n        if (!permanentlyDelete && elements.length > this.MAX_REMOVED_ELEMENTS) {\n            // We require you to permanently delete the elements, if you're deleting more than the maximum that\n            // can fit in the trash can. This pops up a confirmation dialog before continuing:\n            LibraryUtils.confirmDeleteElements(elements, () => this.deleteElements(elements, true));\n            return;\n        }\n\n        const performanceTimer = new PerformanceTimer('Delete Elements');\n\n        // We wrap the deletes in a begin/end operation block, to ensure only one\n        // commit to each library, and only one UI update to be triggered per library\n        // (otherwise, it gets really slow when you delete a lot of elements).\n        const operations = {};\n        const ensureOperation = library => {\n            if (!operations[library.id]) {\n                library.beginOperation();\n                operations[library.id] = library;\n            }\n        };\n\n        const undoableDeletes = [];\n        elements.forEach(element => {\n            ensureOperation(element.library);\n            const isPermanentDelete = permanentlyDelete || element.library.disableNonPermanentDelete;\n            if (!isPermanentDelete) {\n                undoableDeletes.push(element);\n            }\n            element.library.removeElement(element, isPermanentDelete);\n            operationalMetrics.sendDeleteElementEvent(element);\n        });\n\n        Object.keys(operations).forEach(id => operations[id].endOperation());\n\n        if (undoableDeletes.length && showUndoToast && !configuration.currentProduct.config.showElementActionToasts) {\n            // Can only undo over library elements (not document assets).\n            toastManager.openToast('undoDeleteElements', { elements: undoableDeletes });\n        }\n\n        if (configuration.currentProduct.config.showElementActionToasts) {\n            let message;\n            if (elements.length === 1) {\n                message = translate('DL_DELETE_SUCCESS_TOAST');\n            } else {\n                message = translate('DL_DELETE_SUCCESS_TOAST_PLURAL', { num: elements.length });\n            }\n            toastManager.openToast('message', {\n                message,\n                variant: 'success',\n            });\n        }\n\n        performanceTimer.done();\n    }\n\n    /**\n     * Deletes a group from the library. If you request removing the elements in the group, we'll allow you to undo\n     * the operation (and update latestDeletedElements).\n     *\n     * @param {GroupModel[]} groups array of groups to delete\n     * @param {Object} options\n     * @property {boolean} deleteContents\n     * @property {boolean} [permanentlyDelete=false]\n     * @property {boolean} [checkForDependents=true]\n     * @property {boolean} [hasSeenWarning=false]\n     * @property {boolean} [deleteEmptyAncestors=false]\n     */\n    @action deleteGroups(groups, options) {\n        options = Object.assign({\n            deleteContents: false,\n            permanentlyDelete: false,\n            checkForDependents: true,\n            hasSeenWarning: false,\n            deleteEmptyAncestors: false,\n            showUndoToast: true\n        }, options);\n\n        const { deleteContents, permanentlyDelete, checkForDependents, hasSeenWarning, deleteEmptyAncestors, showUndoToast } = options;\n\n        if (!groups || !groups.length) {\n            return;\n        }\n        // If deleting group that is the currentSection, unset currentSection\n        if (groups.find(group => viewState.currentSection === group.id)) {\n            viewState.setCurrentSection();\n        }\n\n        const library = groups[0].library;\n        const allElements = [];\n        const sortBy = viewState.elementSortState;\n\n        const groupsTree = GroupUtils.getLibraryCustomGroupsTree(library, { sortBy });\n        const { branches } = groupsTree;\n\n        // Mark all descendants for deletion.\n        const descendants = deleteContents ? groups.reduce((curr, group) => {\n            return curr.concat(GroupUtils.getAllDescendantGroups(group));\n        }, []) : [];\n\n        // Mark for deletion all ancestors that have a group to be deleted as their sole child (since they will become empty).\n        const emptyAncestors = deleteEmptyAncestors ? groups.reduce((curr, group) => {\n            return curr.concat(GroupUtils.getAllAncestors(group).filter(group => {\n                return !group.disableEditing && branches[group.id].children.length === 1;\n            }));\n        }, []) : [];\n\n        // ensure no duplicates when merging these two arrays\n        groups = [ ...new Set([ ...groups, ...descendants, ...emptyAncestors ]) ];\n\n        groups.forEach(group => {\n            const branch = branches[group.id];\n\n            branch.children.forEach(child => {\n                if (!child.item.isGroup) {\n                    allElements.push(child.item);\n                }\n            });\n        });\n\n        // Check to see if there are any elements in the group that have dependents in the library\n        if (checkForDependents && deleteContents && LibraryUtils.doElementsHaveDependents(allElements)) {\n            LibraryUtils.confirmOperationWithDependents('delete', 'group', () => this.deleteGroups(groups, { deleteContents: true, permanentlyDelete, checkForDependents: false }));\n            return;\n        }\n\n        if (!deleteContents) {\n            viewState.clearAllSelections();\n            const closestCommon = GroupUtils.minimumCommonAncestor(groups);\n            library.beginOperation();\n            if (closestCommon) {\n                LibraryUtils.addElementsToGroup(allElements, closestCommon);\n            }\n            groups.forEach(group => {\n                group.children && group.children.forEach(child => {\n                    // reparent the direct children if needed\n                    if (closestCommon && child.isGroup) {\n                        child.parent = closestCommon;\n                    }\n                });\n                library.removeGroup(group, false);\n            });\n            library.endOperation();\n            if (showUndoToast) {\n                toastManager.openToast('undoDeleteGroup', { groupsTree, elements: allElements, ungroup: true });\n            }\n            return;\n        }\n\n        if (!permanentlyDelete && allElements.length > this.MAX_REMOVED_ELEMENTS) {\n            // We require you to permanently delete the elements, if you're deleting more than the maximum that\n            // can fit in the trash can. This pops up a confirmation dialog before continuing:\n            LibraryUtils.confirmDeleteElements(allElements, () => this.deleteGroups(groups, { deleteContents: true, permanentlyDelete: true, checkForDependents: false, hasSeenWarning: true }));\n            return;\n        }\n\n        if (permanentlyDelete) {\n            // We can't use the libraries API for permanently removing the elements in a group, because it doesn't give an option to\n            // permanently delete the elements (TODO: Maybe we should add an option?)\n            library.beginOperation();\n            groups.forEach(group => library.removeGroup(group, false));\n            allElements.forEach(element => {\n                library.removeElement(element, true);\n                operationalMetrics.sendDeleteElementEvent(element);\n            });\n            library.endOperation();\n            return;\n        }\n\n        if (hasSeenWarning || !shouldShowDeleteNestedGroupContents()) {\n            // remove the group, all descendant groups, and pass the flag in to delete all their elements as well\n            viewState.clearAllSelections();\n            library.beginOperation();\n            groups.forEach(groupToRemove => {\n                library.removeGroup(groupToRemove, true);\n            });\n            library.endOperation();\n\n            // We set this last, so nobody reacts to the deleted elements until after they've been deleted!\n            // Currently there is no way for the libraries panel to restore elements in document assets, so don't show there\n            if (!library.isDocumentAssets && showUndoToast) { toastManager.openToast('undoDeleteGroup', { groupsTree, elements: allElements }); }\n        } else { // display the warning that this will delete elements and subgroups\n            showDeleteNestedGroupContents(groups);\n        }\n    }\n\n    @action restoreElements(elements, branch = {}) {\n        // We wrap the undos in a begin/end operation block, to ensure only one\n        // commit to each library, and only one UI update to be triggered per library\n        // (otherwise, it gets really slow when you restore a lot of elements).\n        const operations = {};\n        const ensureOperation = library => {\n            if (!operations[library.id]) {\n                library.beginOperation();\n                operations[library.id] = library;\n            }\n        };\n\n        const orders = {};\n        branch.children && branch.children.forEach(child => {\n            if (!child.item.isGroup) {\n                orders[child.item.id] = child.order;\n            }\n        });\n\n        elements.forEach(element => {\n            if (!element.isDeletedLocally && element.removed) {\n                if (element.library.isWritable) {\n                    if (librarySizeManager.canAddElements(element.library)) { // Normal case: Restore elements in same library\n                        ensureOperation(element.library);\n                        element.library.restoreElement(element);\n                        const order = orders[element.id];\n                        order && element.setOrderInGroup(branch.item, order);\n                    } else { // Library is full. Add to overflow library instead.\n                        // Note: The library capacity will not change _between_ elements, but during the initial delay\n                        // between when we show the undo toast and the user clicks to restore elements,\n                        // it's possible the library lost capacity to restore 1 or more of the deleted elements.\n                        // Since the user won't get another chance to restore, we want to ensure the operation\n                        // succeeds. Therefore, some of these elements will go to an overflow library.\n                        metrics.setExtraEventMetrics('moveElement', { content: { category: 'Undo Delete' } });\n                        element.library.moveElement(element, this.getOverflowLibrary(element.library.name));\n                    }\n                } else { // Library has become read-only. Add to recovery library instead.\n                    metrics.setExtraEventMetrics('copyElement', { content: { category: 'Undo Delete' } });\n                    // Recovering from a read-only library: We can't delete it from the trash, so have to leave it there.\n                    element.library.copyElement(element, this.getRecoveryLibrary(element.library.name));\n                }\n            }\n        });\n\n        Object.keys(operations).forEach(id => operations[id].endOperation());\n    }\n\n    _collaborationData = observable.map();\n    _invitationsData = observable.map();\n    _teamLibrariesData = observable.map(); // note that values can be false to show the asset id was checked, but it is not a team library that can be followed.\n    @observable.ref _relinkableAssetsData = {};\n\n    /**\n     * Fetches the library collaborations for a specific library, or grabs them from the cache.\n     * Throttled to 5 minutes minimum to avoid overloading the invitation service.\n     * @param {LibraryModel} library - the shared or team library the collaborations are being fetched for\n     * @param {number} [ms] - the length of time between throttled requests in milliseconds\n     */\n    fetchLibraryCollaborations = (library, ms = 0) => {\n        const FIVE_MINUTES = (1000 * 60 * 5);\n        ms = Math.max(ms, FIVE_MINUTES);\n\n        // Do not fetch personal or public libraries.\n        // We fetch team libraries, even though we don't show their collaborators list in the Library Manager,\n        // because we still want to get the display names of the creator and modifier for the InfoPanelView.\n        if (!library || (!LibraryUtils.isSharedUserLibrary(library) && !LibraryUtils.isTeamLibrary(library))) { return Promise.resolve(); }\n\n        const libraryData = this._collaborationData.get(library.id);\n        if (!libraryData || libraryData.timestamp < Date.now() - ms) {\n            // Fetch if we don't have cached data\n            library.loadCollaborators().then(() => {\n                this._collaborationData.set(library.id, {\n                    timestamp: Date.now(),\n                });\n            }).catch(err => {\n                debugLog.log(`Could not get library collab data: ${err}`);\n            });\n        }\n\n    }\n\n    // an observable map with the invitation data (libraryURN: invitationData)\n    // where the libraryURN (aka \"cloud asset id\" or \"resource urn\") looks like:\n    // \"urn:aaid:sc:US:35f59809-909b-4db1-b6c4-3ef720998903\"\n    get invitationsData() {\n        return this._invitationsData;\n    }\n\n    // An observable map with the team libraries data (libraryURN: teamlibData)\n    // teamlibData will be false if no access, undefined if not team library, or data if team library\n    get teamLibrariesData() {\n        return this._teamLibrariesData;\n    }\n\n    /**\n     * Maps of relinkable assets and their relink library elements candidates.\n     * Call getRelinkableAssets() first to populate the map.\n     * This is just a cached map you can use if you know you don't need to refresh the data.\n     */\n    get relinkableAssetsData() {\n        return this._relinkableAssetsData;\n    }\n\n    _getInvites = () => {\n        if (!this.loaded) {\n            return new Promise(resolve => when(() => this.loaded, () => resolve(this._getInvites())));\n        }\n\n        return getLibrariesInvitations(this.userId).then(response => {\n            this.invitationsData.clear(); // overwrite old data\n            response.forEach(invitationData => {\n                // filter the invitations by mimetype to get only the libraries invites\n                if (invitationData.resourceType === 'application/vnd.adobe.library+dcx') {\n                    this.invitationsData.set(invitationData.resourceURN, invitationData);\n                }\n            });\n        }).catch(err => {\n            // TODO: Decide how we want to handle this depending on the causes. Can block from retrying, or let retry.\n            debugLog.log(`Could not get libraries invitation data: ${err}`);\n        });\n    }\n\n    _throttledFetchInvitations = throttle(this._getInvites, configuration.FETCH_INVITATIONS_THROTTLE);\n\n    /**\n     * Fetches all libraries invitations and stores it in invitationsData map.\n     * Throttled to 5 minutes to avoid overloading the invitation service.\n     * @param {boolean} [immediate] - whether to execute immediately instead of throttling\n     * @returns {Promise}\n     */\n    fetchLibraryInvitations(immediate) {\n        if (immediate) {\n            return this._getInvites();\n        } else {\n            return this._throttledFetchInvitations();\n        }\n    }\n\n    // TODO post link migration: Add acceptLibraryInvitation(libraryUrn).\n    // Use the new link ref's repo:assetId to get the invitation by resourceURN\n    // This can then be used to update the element state and make it possible to accept an invite specifically\n    // matching a migrated broken link, instead of accepting all invites.\n\n    /**\n     * Accepts all the fetched invitations, one by one. Then refreshes the invitations list at the end.\n     * @returns {Promise} Resolves once all invites are accepted.\n     */\n    acceptAllLibraryInvitations() {\n        const acceptInvitePromises = [];\n        this.invitationsData.forEach((invitationData, /*urn*/) => {\n            const promise = acceptInvitation(this.userId, invitationData.invitationId)\n                .catch(err => {\n                    debugLog.log(`Could not accept library invitation: ${err}`);\n                    // will get 404 error if invite could not be found because it was already accepted\n                    // (in which case the library will sync down on its own)\n                });\n            acceptInvitePromises.push(promise);\n        });\n\n        return Promise.all(acceptInvitePromises).finally(() => {\n            // Reset the invitations data, which should be empty unless a new invite came in after last fetch\n            return this.fetchLibraryInvitations(true);\n        });\n    }\n\n    // When there is a missing library link, check if it's a team library that the user can add.\n    // SAM.js reduces multiple duplicate requests into one, but any further throttling should be done at the asset level.\n    async fetchTeamLibraryData(assetId) {\n        try {\n            this.teamLibrariesData.clear(); // overwrite old data\n\n            // Check if the asset exists/the user has access\n            const adobeAsset = await linkManager.getAssetWithCloudID(assetId);\n            if (!adobeAsset || adobeAsset.isDiscarded) {\n                return this.teamLibrariesData.set(assetId, false);\n            }\n            // Check if this AdobeAsset has team library metadata\n            if (!adobeAsset.appMetadata.isLoaded) {\n                await adobeAsset.appMetadata.load();\n            }\n            // Example data: {\n            //     repo:assetId: \"urn:aaid:sc:US:743ef9be-2059-4f45-abc0-b6d685a00e6e\"\n            //     repo:name: \"Everyone\"\n            // } (or undefined if not team library)\n            this.teamLibrariesData.set(assetId, adobeAsset.appMetadata.data['cc:inherited']?.['cc:team']);\n        } catch (e) {\n            debugLog.log(`[libraryManager.fetchTeamLibraryData] ${e}`);\n            this.teamLibrariesData.set(assetId, false);\n        }\n    }\n\n    /**\n     * Resolve the given element reference to an element object if exists.\n     * A reference for an element can be retrieved using {@link Element#getReference}.\n     * Compatible with legacy element references, and the parsed and stringified new link schemas.\n     *\n     * @param {LinkReference | string} [elementRef]\n     * @param {boolean} [includeRemovedElements] whether to allow resolving to an available removed element.\n     * @returns {Promise<Element | undefined>}\n     */\n    resolveElementReference(elementRef, includeRemovedElements = false) {\n        return this._ccLibraries.resolveElementReference(elementRef, includeRemovedElements);\n    }\n\n    /**\n     * Resolve the given element reference to an element object using the libraries and elements in memory.\n     * Returns `undefined` if the reference status is unknown and `null` if the element is known to be missing.\n     * Usually it's better to use {@link resolveElementReference} which isn't limited to the cache\n     * and will attempt to resolve the reference against cloud storage.\n     *\n     * @param {LinkReference | string} [elementRef]\n     * @param {boolean} [includeRemovedElements] whether to allow resolving to an available removed element.\n     * @returns {Element | undefined | null}\n     */\n    resolveCachedElementReference(elementRef, includeRemovedElements = false) {\n        return this._ccLibraries.resolveCachedElementReference(elementRef, includeRemovedElements);\n    }\n\n    /**\n     * Resolve the given element reference to the library, if it exists. This is useful if {@link resolveElementReference} returns\n     * undefined (i.e. the element doesn't exist), since it lets you check whether the library exists.\n     * A reference for an element can be retrieved using {@link Element#getReference}.\n     * Compatible with legacy element references, and the parsed and stringified new link schemas.\n     *\n     * @param {LinkReference | string} [elementRef]\n     * @returns {Promise<LibraryModel | undefined>}\n     */\n    resolveElementReferenceToLibrary(elementRef) {\n        return this._ccLibraries.resolveElementReferenceToLibrary(elementRef);\n    }\n\n    /**\n     * Resolve the given element reference to the library, using libraries in memory.\n     * Returns `undefined` if the reference status is unknown and `null` if the element is known to be missing.\n     * Usually it's better to use {@link resolveElementReferenceToLibrary} which isn't limited to the cache\n     * and will attempt to resolve the reference against cloud storage.\n     *\n     * @param {LinkReference | string} [elementRef]\n     * @returns {LibraryModel | undefined | null}\n     */\n    resolveCachedElementReferenceToLibrary(elementRef) {\n        return this._ccLibraries.resolveCachedElementReferenceToLibrary(elementRef);\n    }\n\n    /**\n     * Resolve the given library reference to a library object if exists.\n     * A reference for a Library can be retrieved using {@link Library#getReference}.\n     * Compatible wit the parsed and stringified new link schemas.\n     *\n     * @param {LinkReference | string} [libRef]\n     * @returns {Promise<Library | undefined>}\n     */\n    resolveLibraryReference(libRef) {\n        return this._ccLibraries.resolveLibraryReference(libRef);\n    }\n\n    /**\n     * Resolves the given library reference to the library, using libraries in memory.\n     * Returns `undefined` if the reference status is unknown or `null` if the element is known to be missing.\n     * Usually it's better to use {@link resolveLibraryReference} which isn't limited to the cache\n     * and will attempt to resolve the reference against cloud storage\n     * @param {LinkReference | string} libRef\n     * @returns {Library | undefined | null}\n     */\n    resolveCachedLibraryReference(libRef) {\n        return this._ccLibraries.resolveCachedLibraryReference(libRef);\n    }\n\n    /**\n     * Resolve the given library or id against cloud storage.\n     *\n     * @param {string} id\n     * @returns {Promise<Library | undefined>}\n     */\n    resolveLibraryById(id) {\n        return this._ccLibraries.resolveLibraryById(id);\n    }\n\n    /**\n     * Resolve the given asset id against cloud storage.\n     *\n     * @param {string} assetId\n     * @returns {Promise<Library | undefined>}\n     */\n    resolveLibraryByAssetId(assetId) {\n        return this._ccLibraries.resolveLibraryByAssetId(assetId);\n    }\n\n    /**\n     * Go through the current document and for each asset with a missing element or library link,\n     * look for elements in the user's (synced) libraries that share the same source asset as the original element.\n     * This is useful for helping the user resolve their broken links, since we can offer them the option to relink the asset to one of the matching elements.\n     * This computation is potentially very expensive, since we scan every element of every library looking for matches;\n     * so we return a promise to make this easier to use non-blockingly.\n     * Note: If the asset has a relinkable element with the same source asset within the same published library,\n     * the consuming asset will have a link state of pending update, and therefore will not be included here.\n     * Relinkable elements are only found in _other_ published libraries.\n     * @returns {Promise<Object>}\n     * @property {Map<string, Object[]>} assets the relink candidates per-asset\n     * @property {Map<string, Object[]>} libraries the relink candidates per-library\n     * Where:\n     * The key string is the asset/library id and\n     * The value object is of type { asset: DocumentElement, element: ElementModel }, representing the local asset and its relink element candidate.\n     */\n    getRelinkableAssets() {\n        return new Promise(resolve => {\n            const missingLinksSourceRefs = new Map();\n            const libraries = new Map();\n            const assets = new Map();\n            let scanForLegacyLinkMatches = false;\n\n            // Save a reference to all relinkable missing links.\n            this.documentAssetsContainer.missingLinks.forEach(asset => {\n                if (asset.canRelinkToLibrary) {\n                    // We'll track all relink element candidates for each asset.\n                    assets.set(asset.id, []);\n                    // Add the consuming asset's reference pointing to the source asset.\n                    // - For assets linked to library elements via the current object-based linking mechanism, this will be in the link reference itself (sourceRef).\n                    // - For _components_ linked to cloud documents or to library elements via the old string-based linking mechanism, this will be stored in the representation (symbolId).\n                    const sourceIdentifier = getStaticCachedLinkedElementSourceRefString(asset);\n                    const legacySourceIdentifier = !sourceIdentifier && getSymbolId(asset);\n                    if (legacySourceIdentifier) {\n                        // Finding relink candidates for legacy links requires us to dive into the elements' representations.\n                        // We don't want to do that unless we know we're looking for a match for this type of link.\n                        scanForLegacyLinkMatches = true;\n                    }\n                    missingLinksSourceRefs.set(sourceIdentifier || legacySourceIdentifier, asset);\n                }\n            });\n\n            // Look for library elements that share the same sources as our missing links.\n            this.libraries.forEach(library => {\n                // Only look for matches in libraries published from documents.\n                if (!library.documentId) { return; }\n                // We use library.filterElement to avoid instantiating a mobx wrapper for each element while scanning for matches.\n                // Note, however, that we're not using the output of .filterElements() so that we can do everything in one loop;\n                // so we need to manually wrap the elements we do want to return. Also note that it's important that the \"predicate\"\n                // callback to .filterElements() return falsy (void in our case), otherwise the elements will be wrapped anyway.\n                library.getFilteredElements(_element => {\n                    const sourceIdentifier = getStaticSourceRefString(_element);\n                    let matchingSourceIdentifier = missingLinksSourceRefs.has(sourceIdentifier) && sourceIdentifier;\n\n                    // We only want to do the work of trying to match this element to a legacy document link\n                    // if we're actually missing legacy document links, and if we haven't already matched this element to a non-legacy document link.\n                    if (!matchingSourceIdentifier && scanForLegacyLinkMatches) {\n                        const legacySourceIdentifier = getSymbolId(_element);\n                        matchingSourceIdentifier = missingLinksSourceRefs.has(legacySourceIdentifier) && legacySourceIdentifier;\n                    }\n\n                    if (matchingSourceIdentifier) {\n                        // Element points to the same source as a missing link in this document.\n                        // We'll add it to the list of elements this asset could relink to.\n                        const element = wrapElement(_element);\n                        const asset = missingLinksSourceRefs.get(matchingSourceIdentifier);\n                        const link = { asset, element };\n\n                        // Save the relink candidate on both the per-asset and per-library maps.\n                        assets.get(asset.id).push(link);\n                        // We'll track all relink element candidates in each library.\n                        if (!libraries.has(library.id)) {\n                            libraries.set(library.id, []);\n                        }\n                        libraries.get(element.library.id).push(link);\n                    }\n                });\n            });\n\n            const result = { assets, libraries };\n            this._relinkableAssetsData = result;\n            return resolve(result);\n        });\n    }\n\n    syncingEnabled() {\n        return this._ccLibraries.isSyncingEnabled();\n    }\n\n    getServiceInfo() {\n        return this._ccLibraries.processInfo;\n    }\n\n    /**\n     * Retrieve the settings related to SNI handshake.\n     *\n     * @returns {*} object containing all the parameters related to SNI handshake.\n     */\n    getSNISettings() {\n        return utils.getSNISettings();\n    }\n\n    sync(isClick, isGlobal) {\n        if (this.disableCCLibraries) { return; }\n        const shouldSync = this.syncState === 'error' && !this.retryTime;\n\n        // Kind of ugly: we allow for three types of sync:\n        // 1) On global click, that will sync on every click, but only if we're not polling, or there's an error\n        // 2) On local click, that will always do a sync, so long as it wasn't handled by the global click handler already\n        // 3) On other event, that will always do a sync\n        if (!isClick || (isGlobal && shouldSync) || (!isGlobal && !shouldSync)) {\n            if (this.syncState !== 'syncing') {\n                this._ccLibraries.syncState.sync();\n            }\n        }\n    }\n\n    async enableSyncing() {\n        await Promise.resolve(this._ccLibraries.enableSyncing());\n\n        // Also do a sync, so we can prod the shared local storage service to check the coresync state\n        this.sync();\n    }\n\n    disableSyncing() {\n        // Need to disconnect from Process/Cloud endpoints\n        this._ccLibraries.disableSyncing(true);\n    }\n\n    get _activeLibraries() {\n        const activeLibraries = libraryProcessManager.getLocalMachineSetting(this._activeLibrariesKey);\n        // Read legacy format to ensure backwards compatibility.\n        return activeLibraries || this._legacyActiveLibraries || {};\n    }\n\n    // Each library's active state used to be stored individually.\n    // i.e { lib1#active-state: true, lib2#active-state: false, ... }\n    // Which meant bulk toggle operations required writing to disk multiple times, impacting performance.\n    // To remedy that, we updated to store all toggle states under a single entry.\n    // i.e { activeLibraries: { lib1: true, lib2: false, ... }, ... }\n    // This format allows us to toggle as many libraries as we want and only write to disk once.\n    // For backwards compatibility, we still want to support reading the old format.\n    _legacyGetLibraryActiveKey(library) {\n        return `activeLibrary#${library.id}-${configuration.currentProduct.config.code}`;\n    }\n\n    get _activeLibrariesKey() {\n        // The toggle state of a library is app-specific.\n        return `activeLibraries-${configuration.currentProduct.config.code}`;\n    }\n\n    // Libraries that have been toggled on in the Libraries Manager\n    isLibraryActive(library) {\n        if (library.isDocumentAssets) {\n            // Some apps (i.e CCX) use the Document Assets model without enabling it in the UI.\n            return !configuration.currentProduct.config.disableDocumentAssetsView;\n        }\n        const activeLibraries = this._activeLibraries;\n        // Libraries are always toggled on by default (unless the user toggles them off).\n        return library && activeLibraries[library.id] !== false;\n    }\n\n    @observable _recentlyActiveLibraries = new Map();\n    // the length of time we consider to be 'recently activated'\n    _secondsConsideredRecent = 2000;\n\n    // Root libraries are highlighted briefly after they are toggled on\n    isLibraryRecentlyActive(library) {\n        return !!this._recentlyActiveLibraries.get(library.id);\n    }\n\n    _updateRecentlyActiveLibraries(library, value) {\n        if (value) {\n            const setTimeoutId = setTimeout(() => {\n                this._recentlyActiveLibraries.delete(library.id);\n            }, this._secondsConsideredRecent);\n            this._recentlyActiveLibraries.set(library.id, setTimeoutId);\n        } else {\n            const setTimeoutId = this._recentlyActiveLibraries.get(library.id);\n            if (setTimeoutId) {\n                clearTimeout(setTimeoutId);\n                this._recentlyActiveLibraries.delete(library.id);\n            }\n        }\n    }\n\n    setLibraryActiveState(library, value) {\n        const activeLibraries = this._activeLibraries;\n        activeLibraries[library.id] = value;\n        libraryProcessManager.setLocalMachineSetting(this._activeLibrariesKey, activeLibraries);\n        this._updateRecentlyActiveLibraries(library, value);\n    }\n\n    // Bulk action for setting the active state of a set of libraries.\n    setLibrariesActiveState(libraries, value) {\n        const activeLibraries = this._activeLibraries;\n\n        // Write to the object once for each library.\n        libraries.forEach(library => {\n            activeLibraries[library.id] = value;\n        });\n\n        // Write to disk only once.\n        libraryProcessManager.setLocalMachineSetting(this._activeLibrariesKey, activeLibraries);\n    }\n\n    /*\n        Initialization\n    */\n\n    @observable _initialized = false;\n    @observable _isLoadingAppLoggedInState = true;\n    @observable _isAppLoggedIn = false;\n\n    get isAppLoggedIn() {\n        if (this._isLoadingAppLoggedInState && !this._isAppLoggedIn) {\n            // Undefined state is used to hide the logged out message so we don't flicker.\n            return undefined;\n        }\n        return this._isAppLoggedIn;\n    }\n\n    /**\n     * Is the library manager initialized? This is true after `init()` is called.\n     */\n    get initialized() { return this._initialized; }\n\n    /**\n     * True when the initial load is complete.\n     * False, if the user is logged out, or logged in on this machine for the first time, so their libraries are syncing.\n     */\n    @computed get loaded() {\n        return Boolean(this.areLibrariesLoaded);\n    }\n\n    /**\n     * Returns a promise that resolves when loaded becomes true - this is useful for clients since they don't need to know about MobX\n     * in order to listen for this event.\n     */\n    waitForInitialLoad() {\n        return new Promise(resolve => {\n            when(() => this.loaded, () => resolve());\n        });\n    }\n\n    static disconnectTimeoutDuration = 120 * 1000; // 2 minutes\n\n    /**\n     * Initialize the CC Libraries API if user is logged in - you _must_ call this before doing anything else with the library manager.\n     * If no user logged in, start listening to a CEP event to trigger login check with IMS.\n     * Note that you can only initialize the library manager once.\n     */\n    init() {\n        this._isAppLoggedIn = imsInterface.hasValidUser();\n\n        if (this._initialized) {\n            return;\n        }\n        CCLibrariesModel.registerDependencies({\n            getFileSize: path => this.getFileSize(path),\n            getInstalledVersion: appCode => this.getInstalledVersion(appCode),\n        });\n\n        this._vulcanInterface = environment.vulcanInterface;\n\n        if (!this._isAppLoggedIn) {\n            if (!this._nglEventListener) {\n                // In order to prevent the initial flicker on the libraries panel (while we're fetching the user login status):\n                // 1) We add a 1 second delay and return undefined. So, for 0-1 second, we can just show the panel in loading state.\n                // 2) If the login state is already available, or after 1 second has elapsed,\n                // we return the appropriate true/false value for the panel to show the correct login state/message.\n                setTimeout(() => this._isLoadingAppLoggedInState = false, 1000);\n                this._nglEventListener = () => this.init();\n                environment.addEventListener(configuration.PROFILE_CHANGE_EVENT_ID, this._nglEventListener);\n            }\n            return;\n        }\n\n        if (this._nglEventListener) {\n            environment.removeEventListener(configuration.PROFILE_CHANGE_EVENT_ID, this._nglEventListener);\n            this._nglEventListener = undefined;\n        }\n\n        // this._ccLibraries is always equal to INIT_CCLIBS, except during testing, where we've already supplied a mock\n        if (this._ccLibraries === INIT_CCLIBS && !this.disableCCLibraries) {\n            if (environment.libraryContext?.ccLibraries) {\n                this._ccLibraries = environment.libraryContext.ccLibraries;\n            } else {\n                this._ccLibraries = new CCLibraries(environment.ccLibrariesDriver, {\n                    elementTypes: [ 'elements' ],\n                    readOnly: configuration.currentProduct.config.readOnlyCCLibraries,\n                    locale: environment.getLocale(),\n                    disableLocalFallthrough: configuration.currentProduct.config.disableProcessInCloudMode,\n                    disablePreemptiveLibraryLoad: configuration.currentProduct.config.disablePreemptiveLibraryLoad,\n                    disableFallbackDefaultLibrary: configuration.currentProduct.config.disableFallbackDefaultLibrary,\n                    enableBrandLifecycleManagement: configuration.currentProduct.config.enableBrandLifecycleManagement,\n                    includeApprovedBrandsInLibraries: configuration.currentProduct.config.includeApprovedBrandsInLibraries,\n                    skipConnectingOnInit: environment.supportsProcessConnection && !environment.canLaunchProcess,\n                    featureFlags: {\n                        enableProjects: featureFlags.get('enableProjects'),\n                        enableGenStudioAPIs: true, // always enabled for now - could trigger this based on passed in app code in the future\n                    },\n                    mobXCreateAtom: (name, onBecomeObservedHandler, onBecomeUnobservedHandler) => {\n                        return new Atom(name, onBecomeObservedHandler, onBecomeUnobservedHandler);\n                    },\n                    mobXTransaction: transaction,\n                    cloudDriver: environment.cloudDriverConnector ? new CloudDriver(environment.cloudDriverConnector) : undefined,\n                    fileSystemCache: environment.fs ? { fs: environment.fs, dir: environment.getLocalRoot() } : undefined,\n                    renditionSizes: elementConfiguration.getThumbnailSizes(),\n                    fullRenditionConfig: elementConfiguration.getFullRenditionConfig()\n                });\n            }\n\n            environment.exec('CORE', 'getApplicationVersion', []).then((version) => {\n                this._ccLibraries.utils.metrics.apiKey = metrics.analyticsApiKey();\n                this._ccLibraries.utils.metrics.product = `${configuration.currentProduct.config.code}/${version}`;\n                this._ccLibraries.utils.metrics.productLocation = metrics.productLocation;\n            }).catch(() => {\n                // fail gracefully\n            });\n        }\n\n        if (this._ccLibraries.fontManager) {\n            this._fontManager = new FontManager(this._ccLibraries.fontManager);\n        }\n\n        this._initialized = true;\n\n        // Add API analytics reporter listener\n        const reportCallback = (args) => {\n            const commitedEvents = [];\n            args.forEach(action => {\n                if (action.type === 'commit') {\n                    metrics.reportAPIEvent(action.action);\n                    if (!commitedEvents.includes(action.action.name)) {\n                        commitedEvents.push(action.action.name);\n                    }\n                }\n            });\n            // clear any stored extra metrics, need to do this after all commits of each event type in the batch have been reported\n            commitedEvents.forEach(event => {\n                metrics.clearExtraEventMetrics(event);\n            });\n        };\n\n        this._ccLibraries.on('report', (...args) => {\n            reportCallback(args);\n        });\n\n        if (configuration.currentProduct.config.defaultToDocumentAssets && this.disableCCLibraries) {\n            when(() => this.documentAssetsContainer, () => {\n                this.currentLibrary = this.documentAssetsContainer;\n            });\n        }\n        if (!this.disableCCLibraries) {\n            this._syncState.init();\n            // Shallow watch for a change in load state\n            // We don't wait for 'loaded' because we don't need to wait until initial sync is done\n            observe(this, 'areLibrariesLoaded', () => this._onAreLibrariesLoadedChange());\n\n            // Due to the way web.js is set up, libraries-js now initializes before the libraries-panel is loaded. This causes _isConnected\n            // to evaluate to `true` before the following observer is set up. This prevents onLibrariesConnectionChange from triggering,\n            // because the observer doesn't witness the original false -> true change event. Therefore, we trigger onLibrariesConnectionChange\n            // once during setup if _isConnected has already been set to true.\n            if (this._isConnected) {\n                this._onLibrariesConnectionChange();\n            }\n            observe(this, '_isConnected', () => this._onLibrariesConnectionChange());\n            this._ccLibraries.on('restore', this._restorePreviousCurrentLibrary);\n\n            reaction(() => this.syncStatus, () => this._onSyncStateChange());\n\n            // When the environment should not be connected to process, we should disconnect, otherwise we should try to reconnect.\n            reaction(() => environment.maintainConnectionToProcess, maintainConnection => {\n                if (maintainConnection) {\n                    this._disconnectTimeout && clearTimeout(this._disconnectTimeout);\n                    this._disconnectTimeout = undefined;\n                    this._syncState.establishConnectionWithProcess();\n                    if (!libraryProcessManager.isConnected()) {\n                        libraryProcessManager.reconnectToProcess();\n                    }\n                } else {\n                    this._disconnectTimeout = setTimeout(() => {\n                        libraryProcessManager.disconnectFromProcess();\n                        this._syncState.reset();\n                        this._disconnectTimeout = undefined;\n                    }, LibraryManager.disconnectTimeoutDuration);\n                }\n            });\n\n            // When XD has loaded, check if there are any elements with broken links that we can fix.\n            when(() => this.loaded && this.documentAssetsContainer, () => {\n                this._detectBrokenLinksAndOfferResolution();\n                this._migrateLinkReferences();\n            });\n        }\n    }\n\n    @computed get storageUsed() {\n        return this._ccLibraries.storageUsed || 0;\n    }\n\n    _clearDeletionListener() {\n        this._deletionListener?.();\n        this._deletionListener = undefined;\n    }\n\n    _clearElementLoadCheckListener() {\n        this._elementLoadCheckListener?.();\n        this._elementLoadCheckListener = undefined;\n    }\n\n    _clearDocumentChangeListener() {\n        this._documentChangeListener?.();\n        this._documentChangeListener = undefined;\n    }\n\n    _clearAssetIdChangeListener() {\n        this._assetIdChangeListener?.();\n        this._assetIdChangeListener = undefined;\n    }\n\n    _startPublishQuotaErrorListener() {\n        this._publishQuotaErrorListener = when(() => this.publishedDocumentLibrary && this.publishedDocumentLibrary.syncError, () => {\n            const isFirstTimePublishing = !this.publishedDocumentLibrary.isPushedToServer;\n            const { syncError } = this.publishedDocumentLibrary;\n            // We'll issue warnings on the Libraries Manager.\n            const { dialogManager, toastManager } = appState.manager;\n            const isQuotaError = syncError.code === this.errors.EXCEEDS_QUOTA;\n\n            if (isQuotaError) {\n                // For quota errors, we'll show a dialog to the user with more info.\n                const errorType = (LibraryUtils.isIncomingLibrary(this.publishedDocumentLibrary) || LibraryUtils.isTeamLibrary(this.publishedDocumentLibrary)) ? QUOTA_ERROR.SHARED : QUOTA_ERROR.OWNED;\n                dialogManager.openDialog('publishQuotaError', { isFirstTimePublishing, errorType });\n            } else {\n                // For all other sync errors, we'll show a generic toast.\n                const message = translate(isFirstTimePublishing ? 'DL_PUBLISH_GENERAL_ERROR_TOAST' : 'DL_PUBLISH_UPDATES_GENERAL_ERROR_TOAST');\n                toastManager.openToast('message', { variant: 'error', message });\n            }\n\n            if (isFirstTimePublishing) {\n                this.unpublish(this.publishedDocumentLibrary);\n            }\n        });\n    }\n\n    _clearPublishQuotaErrorListener() {\n        if (this._publishQuotaErrorListener) {\n            this._publishQuotaErrorListener();\n            this._publishQuotaErrorListener = undefined;\n        }\n    }\n\n    _clearPublishedLibraryListener() {\n        this._publishedLibraryIdDisposer?.();\n        this._publishedLibraryIdDisposer = undefined;\n    }\n\n    _clearTempDirListener() {\n        this._tempDirDisposer?.();\n        this._tempDirDisposer = undefined;\n    }\n\n    // Call this in the library manager unit tests after each test. Since the model caches are global, it can\n    // cause issues if a previous test is still watching the model\n    dispose() {\n        this._clearDeletionListener();\n        this._clearPublishQuotaErrorListener();\n        this._clearElementLoadCheckListener();\n        this._clearAssetIdChangeListener();\n        this._clearPublishedLibraryListener();\n        this._clearTempDirListener();\n        this._ccLibraries.DANGEROUS.removeAllListeners();\n    }\n\n    /**\n     * Checks if a font is a available on the local machine - this is synchronous and returns immediately.\n     * If we don't know whether the font is available, we'll return true, and kick off a query to the process.\n     * This is bindable in MobX, so the view will update when the data comes back.\n     * @param {Object} style\n     * @returns {boolean} Whether the font is available (or undefined if we don't know)\n     */\n    isFontAvailable(style) {\n        if (!style) {\n            // If the style does not exist, report as available.\n            return true;\n        }\n\n        const adbeFont = style.adbeFont || {};\n        const hasFontIdentifier = adbeFont.postScriptName || style.fontFamily || adbeFont.family;\n        if (!hasFontIdentifier) {\n            // If the style does not have font information, report as available.\n            return true;\n        }\n\n        // Products can supply their own font manager, which we'll call into first.\n        // If we get a negative from the product, we still fall back to the system fonts.\n        // (the assumption is that the product can add additional fonts, like InDesign document fonts,\n        // but not take away from system fonts).\n        if (configuration.currentProduct.fontManager) {\n            const isFontAvailable = configuration.currentProduct.fontManager.isFontAvailable(style);\n            if (isFontAvailable) {\n                return isFontAvailable;\n            }\n        }\n\n        if (this.fontManager) {\n            const fontName = adbeFont.postScriptName;\n            const fontFamily = style.fontFamily || adbeFont.family;\n            return this.fontManager.isSystemFontAvailable(fontName || fontFamily, !fontName);\n        }\n    }\n\n    /**\n     * Get the Typekit data for the given font name\n     *\n     * @param {string} fontName PostScript name of the font.\n     * @returns {TypekitFont} Typekit font object to access properties (e.g. variations) or perform operations (e.g. syncing the font)\n     */\n    getTypekitFontData(fontName) {\n        return this.fontManager?.getFontData(fontName);\n    }\n\n    /* Other */\n\n    // Maximum number of elements allowed in a library\n    get MAX_ELEMENTS() {\n        return this._ccLibraries.getOption('MAX_ELEMENTS');\n    }\n\n    // Maximum number of removed elements allowed in a library\n    get MAX_REMOVED_ELEMENTS() {\n        return this._ccLibraries.getOption('MAX_REMOVED_ELEMENTS');\n    }\n\n    // Maximum size of a component (in bytes) in a library\n    get MAX_COMPONENT_SIZE() {\n        return this._ccLibraries.getOption('MAX_COMPONENT_SIZE');\n    }\n\n    // Whether analytics are enabled (the CC Library process gets this from Thor and shares with the panel)\n    get ANALYTICS_ENABLED() {\n        return this._ccLibraries.getOption('ANALYTICS_ENABLED');\n    }\n\n    get DEVICE_DESCRIPTION() {\n        return this._ccLibraries.getOption('DEVICE_DESCRIPTION');\n    }\n\n    /**\n     * Gets the error codes from the CC Libraries API.\n     */\n    get errors() {\n        // TODO\n        return {\n            ACCESS_DENIED: 'ACCESS_DENIED',\n            RETRYABLE_SERVER_ERROR: 'RETRYABLE_SERVER_ERROR',\n            NETWORK_ERROR: 'NETWORK_ERROR',\n            LOGGED_OUT: 'LOGGED_OUT',\n            FS_ERROR: 'FS_ERROR',\n            EXCEEDS_QUOTA: 'EXCEEDS_QUOTA',\n            REQUEST_FAILED: 'REQUEST_FAILED'\n        };\n    }\n\n    // Get the last time a library was viewed\n    getLastAccess(library) {\n        if (!library || !this.areLibrariesLoaded) { return; }\n        if (library === this.currentLibrary) {\n            // Current library is always the most recently accessed\n            return new Date().valueOf();\n        }\n        const currentLibraryDateKey = this._getCurrentLibraryIdKey() + library.id;\n        const accessed = localSettings.getValue(currentLibraryDateKey) || 0;\n        return Math.max(library.modified, accessed);\n    }\n\n    /**\n     * Returns the current library if available, otherwise a new library with the default name.\n     * Note that there are some situations where there might not be a current library (e.g. during an initial sync),\n     * so you can use this if you need to get a library to use and don't want to handle the case where there isn't\n     * a library selected in the UI (e.g. for products auto-adding elements to a library).\n     *\n     * 99.9% of the time there will be a current library (assuming you're logged in), so this is just to be on the safe side :)\n     *\n     * Note also that the process will automatically create a default library if it detects that there are no libraries, after\n     * a successful sync.\n     *\n     * @returns {LibraryModel} default library to use.\n     */\n    getDefaultLibrary() {\n        if (!this.currentLibrary) {\n            const defaultLibrary = this._ccLibraries.getDefaultLibrary();\n            if (configuration.currentProduct.config.disableFallbackDefaultLibrary) {\n                return defaultLibrary;\n            }\n            return defaultLibrary || this.createLibrary(translate('DL_DEFAULT_LIBRARY_NAME'));\n        }\n        return this.currentLibrary;\n    }\n\n    /**\n     * Set a custom default library for the current user in the current session, overriding the default value returned by {@link LibraryManager#getDefaultLibrary}\n     * (i.e this custom default library gets reset if we lose the user's local settings file or localStorage entry, for the local/cloud mode respectively)\n     * Only libraries that the user has edit access to can be marked as the default library.\n     * Passing a falsy value will result in the default library being reset.\n     * @param {LibraryModel} library the library to mark as default.\n     */\n    setDefaultLibrary(library) {\n        this._ccLibraries.setDefaultLibrary(library);\n    }\n\n    get defaultLibrary() {\n        return this.getDefaultLibrary();\n    }\n\n    /**\n     * Get an existing library with this name, if it is writable and not full.\n     * Otherwise, create a writable library with the same name.\n     * @param {string} name\n     * @returns {LibraryModel}\n     */\n    _getLibraryWithName(name) {\n        if (!name) { return; }\n        const library = this.libraries.find(library => {\n            return library.name === name && library.isWritable && library.ownership !== 'incoming' && librarySizeManager.canAddElements(library);\n        });\n        return library || this._ccLibraries.createLibrary(name);\n    }\n\n    /**\n     * Returns a library that you can use for recovery purposes - e.g. if you were editing a library element, but the library\n     * it was previously in was deleted before you hit save, we can create a \"recovered\" library to save it to (so you don't lose the changes).\n     *\n     * You pass in the original library name, and we'll create a new library called \"<name> (Recovered)\", or return an existing library if\n     * one already exists with that name.\n     *\n     * @param {string} originalLibraryName Name of the original library\n     * @returns {LibraryModel} library to use for recovery purposes.\n     */\n    getRecoveryLibrary(originalLibraryName) {\n        const name = translate('DL_RECOVERED_LIBRARY_NAME', { name: originalLibraryName });\n        return this._getLibraryWithName(name);\n    }\n\n    /**\n     * Returns a library that you can use for overflow purposes - e.g. if you were uploading 1k elements, and someone added an\n     * element simultatneously from a different device, instead of going over the limit, we create an \"overflow\" library.\n     *\n     * You pass in the original library name, and we'll create a new library called \"<name> (Overflow)\", or return an existing library if\n     * one already exists with that name.\n     *\n     * @param {string} originalLibraryName Name of the original library\n     * @returns {LibraryModel} library to use for recovery purposes.\n     */\n    getOverflowLibrary(originalLibraryName) {\n        const name = translate('DL_OVERFLOW_LIBRARY_NAME', { name: originalLibraryName });\n        return this._getLibraryWithName(name);\n    }\n\n    /**\n     * Copies a file to elsewhere on the file system\n     *\n     * @param {string} source - source file\n     * @param {string} destination - desired destination path\n     * @param {boolean} allowOverride - if destination already exists, do we overwrite it or come up with a new name?\n     * @returns {Promise} Resolves with file size, rejects with error.\n     */\n    copyFile(source, destination, allowOverride = false) {\n        return this._ccLibraries.utils.copyFile(source, destination, allowOverride);\n    }\n\n    /**\n     * Returns the size of a file.\n     *\n     * @param {string} path\n     * @returns {Promise} Resolves with file size, rejects with error.\n     */\n    getFileSize(path) {\n        return this._ccLibraries.utils.getFileSize(path);\n    }\n\n    /**\n     * Returns the element id in action path\n     *\n     * @param {string} path\n     * @returns {string} element id\n     */\n    extractPathElementId(path) {\n        return this._ccLibraries.utils.extractElementId(path);\n    }\n\n    /**\n     * Returns the group id in action path\n     *\n     * @param {string} path\n     * @returns {string} group id\n     */\n    extractPathGroupId(path) {\n        return this._ccLibraries.utils.extractGroupId(path);\n    }\n\n    /**\n     * Returns the installed version of the desired app\n     * @param {string} appCode is the four-letter abbreviation of the desired app, ex 'ACCC'\n     * @returns {string} App version, such as '5.3.0.5'\n     */\n    getInstalledVersion(appCode) {\n        try {\n            return this._ccLibraries.utils.getInstalledVersion(appCode);\n        } catch (e) {\n            // ignore\n        }\n    }\n\n    // Backwards compatibility for old listeners, which can be expressed in terms of reactions.\n    // Note that we return a function that you can call, to stop listening.\n    addListener(name, callback) {\n        const callbackWithDigest = (...args) => {\n            callback.apply(this, args);\n        };\n\n        if (name === 'libraryList') {\n            // libraryList is triggered not only if the list of libraries changes, but if the name/deleted/writable state of any\n            // library changes.\n            return reaction(\n                () =>\n                    this.libraries.reduce(\n                        (memo, lib, index) =>\n                            memo\n                            + `${index === 0 ? '' : ';'}${lib.name},${\n                                lib.isDeletedFromServer\n                            },${lib.isWritable}`,\n                        ''\n                    ),\n                callbackWithDigest\n            );\n        }\n        if (name === 'currentLibrary') {\n            return reaction(() => this.currentLibrary, callbackWithDigest);\n        }\n        if (name === 'libraryStatus') {\n            return reaction(() => this.syncState, callback);\n        }\n    }\n\n    openInCCD(path) {\n        return this._ccLibraries.openInCCD(path);\n    }\n\n    async openBrowseAll() {\n        if (this._ccLibraries.canAccessLocalProcess) {\n            return this.openInCCD('/assets/libraries/teamLibs');\n        }\n\n        return launchBrowseAllURL();\n    }\n\n    async openMarketplace() {\n        if (this._ccLibraries.canAccessLocalProcess) {\n            return this.openInCCD('/assets/libraries/publicLibs');\n        }\n\n        return launchMarketplaceURL();\n    }\n\n    async openCCWebMarketplace() {\n        return launchCCWebMarketplaceURL();\n    }\n\n    waitForLibrariesLoaded(timeToWait = 5000) {\n        // We ask for the list of libraries here as a forcing function to connect\n        // and start loading libraries from the connected source.\n        // Some clients are setup to not connect to a source on initialization.\n        // If we are waiting for libraries to load, lets make sure we start loading them...\n        this._ccLibraries.libraries;\n\n        return new Promise((resolve, reject) => {\n            // eslint-disable-next-line prefer-const\n            let timeoutId;\n\n            const dispose = when(() => this.areLibrariesLoaded, () => {\n                clearTimeout(timeoutId);\n                resolve();\n            });\n\n            timeoutId = setTimeout(() => {\n                dispose();\n                reject();\n            }, timeToWait);\n        });\n    }\n\n    get disableCCLibraries() {\n        return configuration.currentProduct?.config.disableCCLibraries && !featureFlags.get('forceEnableCCLibraries');\n    }\n\n    get userId() {\n        if (this.disableCCLibraries) { return environment.imsUserId; }\n        return this._ccLibraries.userId || environment.imsUserId;\n    }\n\n    async getUserId() {\n        if (!this.disableCCLibraries && !configuration.currentProduct.config.disablePreemptiveLibraryLoad) {\n            await this.waitForInitialLoad();\n        }\n        return this.userId;\n    }\n\n    @computed\n    get _isConnected() {\n        return this._ccLibraries.connected;\n    }\n\n    @computed get connectionState() {\n        return this._ccLibraries.connectionState;\n    }\n\n    @computed get areLibrariesLoaded() {\n        return this._ccLibraries.areLibrariesLoaded;\n    }\n\n    @computed get areLibrariesLoading() {\n        return this._ccLibraries.areLibrariesLoading;\n    }\n\n    get fontManager() {\n        return this._fontManager;\n    }\n\n    get projects() {\n        return this._ccLibraries.projects;\n    }\n\n    /*\n    * Syncing status info... These should maybe go elsewhere (SyncState?)\n    */\n\n    getPrimarySyncError() {\n        return this._ccLibraries.syncState?.primaryError;\n    }\n\n    getNewLibrarySyncProgress() {\n        return this._ccLibraries.syncState.transientProgress;\n    }\n\n    get syncState() {\n        return this._ccLibraries.syncState?.status;\n    }\n\n    get syncProgress() {\n        return this._ccLibraries.syncState.progress;\n    }\n\n    get syncErrors() {\n        return this._ccLibraries.syncState.errors;\n    }\n\n    get commitError() {\n        return this._ccLibraries.syncState.commitError;\n    }\n\n    get retryTime() {\n        return this._ccLibraries.retryTime;\n    }\n}\n\nexport default new LibraryManager();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport debugLog from 'app/js/utils/debugLog';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport environment from 'app/js/environment';\nimport { transformErrorCodeToErrorType } from 'app/js/utils/libraryUtils';\n\nconst FIXED_CONSTANTS = {\n    VULCAN_SYNCING_ENABLED_QUERY_REQUEST: 'cclibraries.service.QuerySyncingEnabledRequest',\n    VULCAN_SYNCING_ENABLED_QUERY_RESPONSE: 'cclibraries.service.QuerySyncingEnabledResponse',\n    VULCAN_SYNCING_ENABLED_CHANGE_REQUEST: 'cclibraries.service.SetSyncingEnabledRequest',\n    VULCAN_SYNCING_ENABLED_CHANGED_MESSAGE: 'cclibraries.service.SyncingEnabledChanged',\n    VULCAN_SYNC_STATE_CHANGED_MESSAGE: 'cclibraries.service.SyncStateChanged',\n};\n\n/**\n * The LibraryProcessManager handles the connection between the panel and the CCLibrary process\n */\nexport class LibraryProcessManager {\n\n    /*\n        Launching and Connecting to Shared Local Storage (ccLibraries) Service\n    */\n\n    _cclibraryProcessLaunchPending = false;\n\n    get _ccLibraries() {\n        // The process manager needs to access the underlying ccLibraries API object\n        return libraryManager.dangerouslyAccessCCLibraries();\n    }\n\n    get _vulcanInterface() {\n        return environment.vulcanInterface;\n    }\n\n    /**\n     * Get information about the CCLibrary process. This includes the process version, the code version, and the environment\n     * TODO: Rename to getProcessInfo()\n     */\n    getServiceInfo() {\n        return environment.canLaunchProcess ? this._ccLibraries.processInfo : undefined;\n    }\n\n    /**\n     * Is the CCLibrary process installed?\n     */\n    isProcessInstalled() {\n        return this._vulcanInterface.isCCLibProcessInstalled();\n    }\n\n    /**\n     * Is the CCLibrary process running?\n     */\n    isProcessRunning() {\n        return this._vulcanInterface.isCCLibProcessRunning();\n    }\n\n    /**\n     * Is the CCLibrary process installed?\n     * TODO: Look into making a mobx wrapper for `connected`\n     */\n    isConnected() {\n        return this._ccLibraries.isConnected();\n    }\n\n    /**\n     * Disconnect from the CCLibrary process\n     */\n    disconnectFromProcess() {\n        this._ccLibraries.disconnect?.();\n        this._clearAndResetProcessConnectionPolling();\n        this._clearAndResetProcessLaunchPolling();\n    }\n\n    _clearAndResetProcessLaunchPolling() {\n        if (this._cclibraryProcessLaunchPolling) {\n            clearInterval(this._cclibraryProcessLaunchPolling);\n            this._cclibraryProcessLaunchPolling = null;\n        }\n    }\n\n    _clearAndResetProcessConnectionPolling() {\n        if (this._cclibraryProcessConnectionPolling) {\n            clearTimeout(this._cclibraryProcessConnectionPolling);\n            this._cclibraryProcessConnectionPolling = null;\n        }\n    }\n\n    /**\n     * Launch the CCLibrary process\n     */\n    launchCCLibraryProcess() {\n        if (!environment.canLaunchProcess || this._cclibraryProcessLaunchPolling) { return; }\n\n        // Clear the retry launch interval and connect to the service.\n        const started = () => {\n            this._clearAndResetProcessLaunchPolling();\n            this.reconnectToProcess();\n            this._vulcanInterface.removeMessageListener('cclibraries.service.Initialized', started);\n\n            if (environment.maintainConnectionToProcess) {\n                // Wait 10s, then check if we're still connected - if not, need to retry\n                this._cclibraryProcessConnectionPolling = setTimeout(() => {\n                    this._cclibraryProcessConnectionPolling = null;\n                    if (!this.isConnected()) {\n                        this.launchCCLibraryProcess();\n                    }\n                }, 10000);\n            } else {\n                this._clearAndResetProcessConnectionPolling();\n            }\n        };\n\n        const startLibrariesProcess = () => {\n            debugLog.log('Launching CCLibrary Process');\n            this._vulcanInterface.launchCCLibProcess(); // use vulcan IPC to launch libraries process\n        };\n\n        // Launch the CC Library Process\n        const launch = () => {\n            // If we happen to already be connected then abort the interval\n            if (this.isConnected()) {\n                started();\n                return;\n            }\n\n            // NOTE: We never try to launch the CC Library process if an update is required (either to the panel or process).\n            // Unfortunately, Vulcan.isAppRunning always returns false on the Mac, which can mean we keep on trying to start the\n            // process even though it's already running, and this causes 2 second hangs on the main thread in the desktop products.\n            const serviceInfo = this.getServiceInfo() || {};\n            if (!serviceInfo.updateRequired && this.isProcessInstalled()) {\n                // CCD (and possibly UXP will return a promise for isAppRunning)\n                Promise.resolve(this.isProcessRunning()).then((isRunning) => {\n                    if (isRunning) {\n                        this._clearAndResetProcessLaunchPolling();\n                        this.reconnectToProcess();\n                    } else {\n                        startLibrariesProcess();\n                    }\n                });\n            }\n        };\n\n        // Once the process is launched, clear the retry interval and connect\n        this._vulcanInterface.addMessageListener('cclibraries.service.Initialized', started);\n        // try to connect first just in case already launched\n        this.reconnectToProcess();\n        // Start the launch\n        this._cclibraryProcessLaunchPolling = setInterval(launch, 5000); // Retry launch if it fails.\n        launch();\n    }\n\n    /**\n     * Try to reconnect to the CCLibrary process (this won't do anything if the process isn't running)\n     */\n    reconnectToProcess() {\n        return environment.maintainConnectionToProcess && this._ccLibraries.reconnect();\n    }\n\n    /**\n     * Read a local setting from the local machine via the CC Library process (this is shared with other apps).\n     *\n     * @param {string} key\n     * @returns {*} value\n     */\n    getLocalMachineSetting(key) {\n        return this._ccLibraries.getLocalSetting(key);\n    }\n\n    /**\n     * Persist a local setting to the local machine via the CC Library process (this will be shared with other apps).\n     * Warning: This is async now, so you must await it before checking the result.\n     *\n     * @param {string} key\n     * @param {*} value\n     */\n    async setLocalMachineSetting(key, value) {\n        await this._ccLibraries.setLocalSetting(key, value);\n    }\n\n    async isSyncingEnabled() {\n        if (this.isConnected()) {\n            return this._ccLibraries.isSyncingEnabled();\n        }\n        return JSON.parse(await this._vulcanInterface.call({\n            requestType: FIXED_CONSTANTS.VULCAN_SYNCING_ENABLED_QUERY_REQUEST,\n            responseType: FIXED_CONSTANTS.VULCAN_SYNCING_ENABLED_QUERY_RESPONSE,\n            timeout: 1000\n        })).syncingEnabled;\n    }\n\n    setSyncingEnabled(syncingEnabled) {\n        if (this.isConnected()) {\n            return syncingEnabled ? this._ccLibraries.enableSyncing() : this._ccLibraries.disableSyncing();\n        }\n        this._vulcanInterface.sendMessage(FIXED_CONSTANTS.VULCAN_SYNCING_ENABLED_CHANGE_REQUEST, { syncingEnabled }, { payloadType: 'json' });\n    }\n\n    addSyncingEnabledChangedListener(listener) {\n        listener.syncingEnabledChangedListener = jsonResponse => {\n            try {\n                listener(JSON.parse(jsonResponse).syncingEnabled);\n            } catch (err) {\n                debugLog.log('Error parsing JSON response from SyncingEnabledBroadcast', err);\n            }\n        };\n        this._vulcanInterface.addMessageListener(FIXED_CONSTANTS.VULCAN_SYNCING_ENABLED_CHANGED_MESSAGE, listener.syncingEnabledChangedListener);\n    }\n\n    removeSyncingEnabledChangedListener(listener) {\n        if (listener.syncingEnabledChangedListener) {\n            this._vulcanInterface.removeMessageListener(FIXED_CONSTANTS.VULCAN_SYNCING_ENABLED_CHANGED_MESSAGE, listener.syncingEnabledChangedListener);\n        }\n    }\n\n    static transformSyncState(vulcanSyncState, genericErrors) {\n        // through vulcan process sends a very minimal sync state object and\n        // we need to convert into the same format as that of syncState._syncState\n        if (vulcanSyncState.syncingEnabled === false) {\n            return { state: 'error', errorType: 'syncDisabled' };\n        }\n        const { state } = vulcanSyncState;\n        return state === 'error' ? { state, errorType: transformErrorCodeToErrorType(vulcanSyncState.error?.code, genericErrors, false) } : { state };\n    }\n\n    addSyncStateChangedListener(listener) {\n        listener.syncStateChangedListener = jsonResponse => {\n            try {\n                listener(LibraryProcessManager.transformSyncState(JSON.parse(jsonResponse), libraryManager.errors));\n            } catch (err) {\n                debugLog.log('Error parsing JSON response from SyncStateChangedBroadcast', err);\n            }\n        };\n        this._vulcanInterface.addMessageListener(FIXED_CONSTANTS.VULCAN_SYNC_STATE_CHANGED_MESSAGE, listener.syncStateChangedListener);\n    }\n\n    removeSyncStateChangedListener(listener) {\n        if (listener.syncStateChangedListener) {\n            this._vulcanInterface.removeMessageListener(FIXED_CONSTANTS.VULCAN_SYNC_STATE_CHANGED_MESSAGE, listener.syncStateChangedListener);\n        }\n    }\n}\n\nexport default new LibraryProcessManager();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport libraryManager from 'app/js/managers/libraryManager';\nimport { bytesToString } from '../utils/unitUtils';\nimport LibraryModel from 'app/js/models/LibraryModel';\n\n/**\n * Manager for free space available inside of libraries. This tracks pending operations\n * as well as the current number of elements in a library. It also provides method for\n * computing the size (in bytes) of a library\n *\n * When doing a bulk upload that would fill a library, we need to keep track of elements that are pending,\n * so that we can prevent additional additions to the library from this panel.\n * Note: This only prevents additions from the same panel, since this is local state.\n */\nexport class LibrarySizeManager {\n\n    // Map from library id to number of pending add elements\n    _pendingElementsMap = {};\n\n    /**\n     * Call this when you need to save space for a pending element in a library, while some other asynchronous operation occurs.\n     * This is specifically used in bulk uploads, while the file is being copied, before createElement() is called.\n     * @param {LibraryModel} library\n     */\n    incrementPendingElements(library) {\n        if (!library) { return; }\n\n        this._pendingElementsMap[library.id] = this._pendingElementsMap[library.id] || 0;\n        this._pendingElementsMap[library.id]++;\n    }\n\n    /**\n     * Call this when the pending element is actually added to the library (e.g. createElement() is called).\n     * @param {LibraryModel} library\n     */\n    decrementPendingElements(library) {\n        if (!library) { return; }\n\n        if (this._pendingElementsMap[library.id] > 0) {\n            this._pendingElementsMap[library.id]--;\n        }\n    }\n\n    /**\n     * Returns true if the library has space to add new elements.\n     * By default this will check for space for 1 element.\n     * Every operation that allows the user to add an element should call this.\n     *\n     * Note: This takes into account \"pending\" uploads from this local panel, but not in other apps.\n     * This does not matter in most cases where you are adding multiple elements, as usually the elements\n     * are added all at the same time. It does matter for Bulk Uploads, which create elements at different\n     * times, after each file is asynchronously copied. (So we need to call this before each element is\n     * created in a bulk upload.)\n     *\n     * Please also check if the library.isWritable in addition to whether it has remaining capacity.\n     *\n     * You may check library.elementCount instead when you need to know the actual number of elements\n     * currently in the library, not counting pending elements.\n     *\n     * @param {LibraryModel} library The library you're trying to add to.\n     * @param {number} [numberOfNewElements=1] Number of new elements you want to add (default is 1).\n     * @returns {boolean} Whether you can add elements to the library\n     */\n    canAddElements(library, numberOfNewElements = 1) {\n        if (!library) { return false; }\n\n        const uploadingElementsInProgress = this._pendingElementsMap[library.id] || 0;\n        // Avoid instantiating ElementModels just to check count.\n        const elementCount = library instanceof LibraryModel ? library.elementCount : library.elements.length;\n        const remainingCapacity = libraryManager.MAX_ELEMENTS - elementCount - uploadingElementsInProgress;\n        return remainingCapacity >= numberOfNewElements;\n    }\n\n    /**\n     * Compute the total size, in Bytes, of either an element, library, or array of elements.\n     *\n     * @param {ElementModel|LibraryModel|ElementModel[]} item\n     * @returns {number} Total size in Bytes.\n     */\n    getSize(item) {\n        if (!item) {\n            return 0;\n        }\n\n        if (Array.isArray(item)) {\n            // If it's an array, add up the sizes of all the items in the array\n            return item.reduce((size, i) => size + this.getSize(i), 0);\n        }\n\n        if (item.elements) {\n            // If it's a library, add up all of its elements\n            return item.elements.reduce((size, i) => size + this.getSize(i), 0);\n        }\n\n        if (item.representations) {\n            // If it's an element, add up all of its representations\n            return item.representations.reduce((size, i) => size + (i.contentLength || 0), 0);\n        }\n\n        return 0;\n    }\n\n    /**\n     * Get a string describing the total size of either an element, library, or array of elements.\n     *\n     * @param {ElementModel|LibraryModel|ElementModel[]} item\n     * @returns {string} String describing the total size of the elements (e.g. \"20 MB\").\n     */\n    getSizeAsString(item) {\n        return bytesToString(this.getSize(item));\n    }\n}\n\nexport default new LibrarySizeManager();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/**\n * @typedef {import('@ccx-public/shared-asset-model-js').LinkReference} LinkReference\n * @typedef {import('@ccx-public/shared-asset-model-js').AdobeAsset} AdobeAsset\n * @typedef {import('@ccx-public/shared-asset-model-js').AssetLink} SAMAssetLink\n */\nimport { computed, reaction } from 'mobx';\nimport configuration from 'app/js/config/configuration';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport { getStaticSourceRefString } from 'app/js/utils/elementReferenceUtils';\nimport appState from 'app/js/appState';\nimport AssetLink from './AssetLink';\n\n/**\n * A Document Asset Link referencing a Library element (an Asset fragment), managed via the Libraries JS-API.\n */\nexport default class LibraryLink extends AssetLink {\n\n    /**\n     * @param {SAMAssetLink} assetLink\n     */\n    constructor(assetLink) {\n        super(assetLink);\n        // Emit a 'change' notification each time the library element link status changes.\n        this._disposeLinkChangeListener = reaction(() => this.linkStatus, () => this.emit('change'));\n    }\n\n    dispose() {\n        super.dispose();\n        this._disposeLinkChangeListener();\n    }\n\n    getLocalData() {\n        const element = this.linkedElement;\n        const libraryAsset = this.linkedAsset;\n        // If the element is defined, so should libraryAsset, but they come from different\n        // services (Libraries-JS vs SAM-JS, so we assert both just in case).\n        const linkedAsset = element && libraryAsset && {\n            'repo:assetId': libraryAsset.cloudID,\n            'repo:repositoryId': libraryAsset.repositoryID,\n            resource: this._resource,\n            name: element.name,\n            linkReference: this.getNewLinkRef(),\n            permission: this.permission,\n            _links: this._links,\n            _embedded: this._embedded\n        };\n\n        return {\n            linkState: this.linkStatus,\n            linkedAsset\n        };\n    }\n\n    getRenditionURL(size) {\n        return this.linkedElement?.getThumbnailURL(size);\n    }\n\n    get primaryContentURL() {\n        return this._links?.['http://ns.adobe.com/adobecloud/rel/primary']?.href;\n    }\n\n    get primaryContent() {\n        return this._embedded?.['http://ns.adobe.com/adobecloud/rel/primary'];\n    }\n\n    @computed\n    get _links() {\n        const links = {};\n        if (this._linkedPrimary) {\n            links['http://ns.adobe.com/adobecloud/rel/primary'] = {\n                href: this._linkedPrimary.getContentURL()\n            };\n        }\n        if (this._linkedRendition) {\n            links['http://ns.adobe.com/adobecloud/rel/rendition'] = {\n                href: this._linkedRendition,\n                templated: true\n            };\n        }\n        return links;\n    }\n\n    @computed\n    get _embedded() {\n        const embedded = {};\n        const { primary, rendition } = elementConfiguration.getEmbeddedData(this.linkedElement);\n        if (primary) {\n            embedded['http://ns.adobe.com/adobecloud/rel/primary'] = primary;\n        }\n        if (rendition) {\n            embedded['http://ns.adobe.com/adobecloud/rel/rendition'] = rendition;\n        }\n        return embedded;\n    }\n\n    get _resource() {\n        // The `resource` object is sent to enable the host to perform operations over the platform resource (i.e copy).\n        // That only applies to elements with component-backed representations.\n        if (!this._linkedPrimary) { return null; }\n        return {\n            reltype: 'http://ns.adobe.com/adobecloud/rel/component',\n            component_id: this._linkedPrimary.id\n        };\n    }\n\n    get _linkedPrimary() {\n        const primaryRepresentation = this.linkedElement?.getPrimaryRepresentation();\n        if (primaryRepresentation?.getContentURL()) { return primaryRepresentation; }\n    }\n\n    @computed\n    get _linkedRendition() {\n        // TODO: this should be a templated url, sending the default size for now.\n        return this.getRenditionURL(configuration.IMAGE_THUMBNAIL_SIZE);\n    }\n\n    @computed\n    get linkedLibrary() {\n        return appState.libraryManager.resolveCachedElementReferenceToLibrary(this.linkReference);\n    }\n\n    @computed\n    get linkedElement() {\n        return appState.libraryManager.resolveCachedElementReference(this.linkReference);\n    }\n\n    @computed\n    get alternativeLinkedElement() {\n        if (this.linkedLibrary && !this.linkedElement && this.sourceRef) {\n            // Find another element in the same library that was created from the same source asset as this link.\n            // (Use string format for comparison rather than object reference.)\n            const [ newElement ] = this.linkedLibrary.getFilteredElements(element => {\n                return getStaticSourceRefString(element) === getStaticSourceRefString(this);\n            });\n            return newElement;\n        }\n    }\n\n    get _isLinkStatusLoading() {\n        // The JS API returns `undefined` when the status of a reference is unknown and `null` only when known to be missing.\n        return [ this.linkedElement, this.linkedLibrary ].includes(undefined);\n    }\n\n    get isSyncing() {\n        return (!appState.libraryManager.loaded && !configuration.currentProduct.config.disablePreemptiveLibraryLoad) || this._isLinkStatusLoading || this.linkedLibrary?.syncState === 'downloading';\n    }\n\n    get isNormalLinkState() {\n        // SAM is able to resolve links to libraries pending follow, but we don't want to treat those as \"normal\" in the UI.\n        return super.isNormalLinkState && !this.isPendingFollow;\n    }\n\n    get isMissingLink() {\n        // We treat a library pending follow as missing in the UI, even though the link is resolved via SAM.\n        return super.isMissingLink || this.isPendingFollow;\n    }\n\n    get isMissingLibrary() {\n        return this.linkStatus === configuration.SAM_LINK_STATES.BROKEN && !this.linkedLibrary;\n    }\n\n    get isMissingElement() {\n        return !!(this.linkStatus === configuration.SAM_LINK_STATES.BROKEN && !this.linkedElement);\n    }\n\n    get isPendingFollow() {\n        // Pending follow if we couldn't find the library but SAM could and the library is in team storage (we might be able to skip this last check).\n        return !!(!this.linkedLibrary && this.linkStatus === configuration.SAM_LINK_STATES.NORMAL && appState.libraryManager.teamLibrariesData.get(this.assetId));\n    }\n\n    get isPendingInvite() {\n        return !!(this.linkStatus === configuration.SAM_LINK_STATES.RESTRICTED && appState.libraryManager.invitationsData.has(this.assetId));\n    }\n\n    get isMissingLibraryLink() {\n        return this.isMissingLibrary || this.isPendingFollow || this.isPendingInvite;\n    }\n\n    /**\n     * The link status as it should be surfaced to the host application.\n     * We want to send the host standard SAM-compliant link statuses, even though we can get a lot more granular\n     * with these self-managed links. Note that internally in the panel, we can still use custom statuses such as isPendingInvite,\n     * we just won't be surfacing them to clients.\n     * @returns {LinkStatus}\n     */\n    get linkStatus() {\n        if (this.isSyncing) {\n            // Return 'UpToDate' while the status of the link is ambiguous.\n            return configuration.SAM_LINK_STATES.NORMAL;\n        }\n\n        if (!this.linkedLibrary) {\n            // If we couldn't resolve the library ourselves, return the link status as determined by SAM.\n            // This will be either \"Broken\", \"Restricted\" or \"Discarded\".\n            return super.linkStatus;\n        }\n\n        if (!this.linkedElement) {\n            if (this.alternativeLinkedElement) {\n                // If there is a re-linkable element to fix this link, surface that to the host as a pending update.\n                return configuration.SAM_LINK_STATES.PENDING_UPDATE;\n            }\n            // No element, the link is broken.\n            return configuration.SAM_LINK_STATES.BROKEN;\n        }\n\n        if (!this.fragmentInstanceId) {\n            // We can't compute a diff for legacy library links since the old references don't contain instanceIds or names.\n            // Fortunately, only XD uses these legacy links, so we can manage this edge case in SPRKDocumentElement.\n            return configuration.SAM_LINK_STATES.NORMAL;\n        }\n\n        if (!this._resource) {\n            // If the backing representation was removed, we're probably in the middle of updating the element locally.\n            // Don't register a change until the new representation is added.\n            return configuration.SAM_LINK_STATES.NORMAL;\n        }\n\n        // Diff to check for pending updates. Either the content or the name can be out of date.\n        if (this.linkedElement.instanceId !== this.fragmentInstanceId) {\n            return configuration.SAM_LINK_STATES.PENDING_UPDATE;\n        }\n        if (this.linkedElement.name !== this.fragmentName) {\n            return configuration.SAM_LINK_STATES.PENDING_METADATA_UPDATE;\n        }\n\n        return configuration.SAM_LINK_STATES.NORMAL;\n    }\n\n    /**\n     * @returns {LinkReference}\n     */\n    _getNewLinkRef() {\n        return this.linkedElement?.getReference() || this.alternativeLinkedElement?.getReference();\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/**\n * @typedef {import('@ccx-public/shared-asset-model-js').AssetLinkList} AssetLinkList\n * @typedef {import('@ccx-public/shared-asset-model-js').LinkReference} LinkReference\n */\nimport { Atom, observable } from 'mobx';\nimport { initializeSharedAssetModel, MESSAGE_LOGGED } from '@ccx-public/shared-asset-model-js';\nimport { utils as CCLibrariesUtils } from '@cclibraries/cc-libraries-js';\nimport imsInterface from 'app/js/interface/imsInterface';\nimport debugLog from 'app/js/utils/debugLog';\nimport localSettings from 'app/js/config/localSettings';\nimport AssetLink from 'app/js/models/documentAssets/links/AssetLink';\nimport LibraryLink from 'app/js/models/documentAssets/links/LibraryLink';\nimport { isLibraryLinkReference } from 'app/js/utils/elementReferenceUtils';\nimport environment from 'app/js/environment';\n\nconst SAMEnvironment = {\n    STAGE: 0,\n    PRODUCTION: 1\n};\n\n/*\n    https://git.corp.adobe.com/CCX/shared-asset-model-js\n*/\n\nexport class LinkManager {\n\n    /**\n     * @type {AssetLinkList}\n     */\n    @observable.ref _linkList;\n\n    constructor() {\n        this._waitForInit = new Promise(resolve => this._completeInit = resolve);\n    }\n\n    get areLogsEnabled() {\n        return localSettings.getDebugValue('enableSAMLogs');\n    }\n\n    async init() {\n        // In ccweb, the user id will not change. In the panel, it may when the user logs out,\n        // so we need to reinit then.\n        let userId = environment.imsUserId;\n        const { appId, appVersion } = environment.getHostEnvironment();\n        const config = {\n            CLIENT_ID: imsInterface.getEnvironment()?.clientId || environment.imsClientId,\n            ENVIRONMENT: (environment.imsEnvironment || imsInterface.environmentType) === 'staging' ? SAMEnvironment.STAGE : SAMEnvironment.PRODUCTION,\n            USER_ID: userId,\n            HOST_PRODUCT_DATA: {\n                // User-facing application, with version number\n                PRODUCT_ID: `${appId}/${appVersion}`,\n                // Component within the application using SAM.js, with version number\n                PRODUCT_LOCATION: 'CCLibrariesPanel'\n            }\n        };\n        const hooks = {\n            refreshAccessToken: async () => {\n                userId = environment.imsUserId;\n                try {\n                    return await imsInterface.getAccessToken(userId);\n                } catch (e) { debugLog.log(`[refreshAccessToken] ${e}`); }\n            }\n        };\n\n        try {\n            // Minimum required parameters are an access token, along with the clientId and userId this corresponds to:\n            this._assetModel = await initializeSharedAssetModel(config, hooks);\n\n            //Catch logging events from SAM\n            this._assetModel.on(MESSAGE_LOGGED, this._handleSAMLogEvent);\n\n            // Create a link manager - this is the basis of managing all links:\n            this._linkManager = this._assetModel.assetLinkManager;\n            // Create a list of links\n            this._linkList = this._linkManager.createList();\n            // Make SAM (e.g. link status) observable\n            this._assetModel.makeObservable((...args) => new Atom(...args));\n\n            this._completeInit();\n        } catch (e) { debugLog.log(`[LinkManager.init] ${e}`); }\n    }\n\n    _handleSAMLogEvent(event) {\n        if (this.areLogsEnabled) {\n            debugLog.log(`[SAM.js] ${event.message}`);\n        }\n    }\n\n    // An array of links that can be monitored together for notifications\n    get linkList() {\n        return this._linkList && this._linkList.links;\n    }\n\n    async _addLink(linkReference) {\n        // Ensure we're working with a valid object reference.\n        linkReference = CCLibrariesUtils.parseLinkReference(linkReference);\n        if (!linkReference) { return; }\n\n        // We manage all links using SAM-JS, which enables us to monitor changes via ONS.\n        const [ link ] = await this._linkList.add([ linkReference ]);\n\n        if (isLibraryLinkReference(linkReference)) {\n            // Links to library elements get more granular management via the Libraries JS-API.\n            return new LibraryLink(link);\n        }\n        return new AssetLink(link);\n    }\n\n    /**\n     * @param {LinkReference | string} linkReference\n     */\n    async addLink(linkReference) {\n        // The libraryManager (which is part of the code path to fetchAccessToken) is initialized before the linkManager,\n        // and the models will call addLink before the linkList is created, so we need to wait for it.\n        await this._waitForInit;\n\n        if (!linkReference) { return; }\n        // Add existing link from link reference (note - this supports taking either a string or a link reference object)\n        const link = await this._addLink(linkReference);\n        return link;\n    }\n\n    /**\n     * @param {AssetLink} link\n     */\n    removeLink(link) {\n        if (!link) { return; }\n        // Stop listening for and changes.\n        link.dispose();\n        this._linkList?.remove(link._link);\n    }\n\n    // Returns a promise that resolves to the AdobeAsset\n    async getAssetWithCloudID(assetId) {\n        await this._waitForInit;\n        try {\n            const hostAssetContext = this._assetModel.hostAssetContext;\n            const asset = await hostAssetContext.getAssetWithCloudID(assetId);\n            return asset;\n        } catch (e) {\n            // Bypass 404 NOT_FOUND errors, which are expected if user doesn't have access to the asset or it doesn't exist,\n            // unless verbose logs are enabled for debugging.\n            if (this.areLogsEnabled || !e.message.includes('NOT_FOUND')) {\n                debugLog.log(`[LinkManager.getAssetWithCloudID] ${e}`);\n            }\n        }\n    }\n\n    /**\n     * Exposes the ProjectContext.resolveProjectByName method\n     * Not link-related but seems like the best location as SAM is already initialized here\n     * @param {string} name The project name (relative path)\n     * @returns {Project}\n     */\n    async resolveProjectByName(name) {\n        await this._waitForInit;\n        try {\n            const projectContext = this._assetModel.projectContext;\n            const project = await projectContext.resolveProjectByName(name);\n            return project;\n        } catch (e) {\n            debugLog.log(`[LinkManager.resolveProjectByName] ${e}`);\n        }\n    }\n\n}\n\nexport default new LinkManager();\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2013 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\n/**\n * Manager for locking - preventing concurrent access\n */\nexport class LockManager {\n\n    _locks = {};\n\n    /**\n     * Acquire a lock - the continuation will be called straight away if the lock is available,\n     * otherwise it's placed in a queue, and won't be called until everyone ahead in the queue has\n     * obtained and released the lock.\n     *\n     * @param {string} lockName Name of the lock\n     * @param {Function} continuation Function to call when the lock is acquired.\n     * @param {Object} [thisObject] Object to use as this context when invoking continuation.\n     */\n    obtainLock(lockName, continuation, thisObject) {\n        let lock = this._locks[lockName];\n        if (!lock) {\n            lock = {\n                pendingContinuations: [],\n                isLocked: false\n            };\n\n            this._locks[lockName] = lock;\n        }\n\n        if (lock.isLocked) {\n            lock.pendingContinuations.push({ continuation, thisObject });\n        } else {\n            lock.isLocked = true;\n            continuation.apply(thisObject, [ null ]);\n        }\n    }\n\n    /**\n     * Release a lock - this should be called after the continuation passed to `obtainLock` has been invoked.\n     * The lock must be released, otherwise all subsequent attempts to obtain it will be blocked.\n     *\n     * @param {string} lockName Name of the lock\n     */\n    releaseLock(lockName) {\n        const lock = this._locks[lockName];\n        if (lock) {\n            if (lock.pendingContinuations.length > 0) {\n                const cont = lock.pendingContinuations.shift();\n                setTimeout(function() {\n                    cont.continuation.apply(cont.thisObject, [ null ]);\n                });\n            } else {\n                delete this._locks[lockName];\n            }\n        }\n    }\n}\n\nexport default new LockManager();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport metrics from 'app/js/interface/metrics';\nimport { addListenerManager } from 'app/js/utils/listenerUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport { reaction } from 'mobx';\nimport { getFlyoutMenu } from 'app/js/menus/flyoutMenu';\n\n// Takes an array of menu items and constructs an XML representation of the menu (used by CEP)\nconst getTranslatedMenuXML = (menuItems) => {\n\n    // Pass in an array of attributes and their values to construct a <MenuItem ... /> string\n    const constructMenuItem = (attributes, subMenuItems) => {\n        const attributesStr = Object.keys(attributes)\n            .filter(key => attributes[key] !== undefined)\n            .map(key => `${key}=\"${attributes[key]}\"`)\n            .join(' ');\n        const subMenuStr = subMenuItems ? getTranslatedMenuXML(subMenuItems) : '';\n        return `<MenuItem ${attributesStr}>${subMenuStr}</MenuItem>`;\n    };\n\n    return menuItems.map(menuItem => {\n        if (menuItem.divider) {\n            return '<MenuItem Label=\"---\"/>';\n        }\n\n        const Label = translate(menuItem.label, menuItem.translationData)\n            .replace(new RegExp('&', 'g'), '&amp;')\n            .replace(new RegExp('\"', 'g'), '&quot;')\n            .replace(new RegExp(\"'\", 'g'), '&apos;')\n            .replace(new RegExp('<', 'g'), '&lt;')\n            .replace(new RegExp('>', 'g'), '&gt;');\n\n        return constructMenuItem({\n            Id: menuItem.menuId,\n            Label,\n            Checkable: true,\n            Checked: menuItem.checked,\n            Enabled: Object.prototype.hasOwnProperty.call(menuItem, 'enableMenu') ? menuItem.enableMenu : true\n        }, menuItem.menuItems);\n    }).join('');\n};\n\nconst translateLabels = menuItem => {\n    menuItem.label = menuItem.label && translate(menuItem.label, menuItem.translationData);\n    if (menuItem.menuItems) {\n        menuItem.menuItems.forEach(translateLabels);\n    }\n};\n\nconst getMenuData = menuItems => {\n    if (environment.isMenuInJson) {\n        // For non-CEP environments, we use a JSON representation of the menu, rather than XML\n        menuItems.forEach(translateLabels);\n        return menuItems;\n    }\n\n    return `<Menu>${getTranslatedMenuXML(menuItems)}</Menu>`;\n};\n\n// Constructs a mapping from ids to the menu items that they correspond to\n// (This is used to determine which item the user clicked on, so we can invoke the right operation).\nconst makeMenuItemMapping = (menuItems, prefix = 'MENU') => {\n    const mapping = {};\n\n    menuItems.forEach((menuItem, index) => {\n        const id = prefix + '_' + index;\n        menuItem.menuId = id;\n        mapping[id] = menuItem;\n\n        if (menuItem.menuItems) {\n            Object.assign(mapping, makeMenuItemMapping(menuItem.menuItems, id));\n        }\n    });\n\n    return mapping;\n};\n\nexport class MenuManager {\n\n    getFlyoutMenu(includeDebugItems) {\n        return this._getFlyoutMenu(includeDebugItems);\n    }\n\n    get contextMenu() {\n        return this._contextMenu;\n    }\n\n    constructor(_getFlyoutMenu = getFlyoutMenu) {\n        this._getFlyoutMenu = _getFlyoutMenu;\n        this._listenerManager = addListenerManager(this, [ 'flyoutMenuClicked', 'flyoutMenuOpened' ]);\n    }\n\n    init() {\n        reaction(() => this.getFlyoutMenu(), menuItems => this._setFlyoutMenu(menuItems), { fireImmediately: true });\n        environment.addEventListener('com.adobe.csxs.events.flyoutMenuClicked', this._onFlyoutMenuClicked);\n        environment.addEventListener('com.adobe.csxs.events.flyoutMenuOpened', this._onFlyoutMenuOpened);\n        environment.addEventListener('com.adobe.csxs.events.flyoutMenuClosed', this._onFlyoutMenuClosed);\n\n        // Clear the context menu if you don't right-click on something with a menu\n        window.oncontextmenu = e => {\n            this.setContextMenu([]);\n            environment.onContextMenu(e);\n        };\n    }\n\n    dispose() {\n        environment.removeEventListener('com.adobe.csxs.events.flyoutMenuClicked', this._onFlyoutMenuClicked);\n        environment.removeEventListener('com.adobe.csxs.events.flyoutMenuOpened', this._onFlyoutMenuOpened);\n        environment.removeEventListener('com.adobe.csxs.events.flyoutMenuClosed', this._onFlyoutMenuClosed);\n\n        window.oncontextmenu = undefined;\n    }\n\n    _onFlyoutMenuClicked = (event) => {\n        const menuId = event && event.data && event.data.menuId;\n\n        if (menuId && this._flyoutMenuMapping) {\n            if (this._flyoutMenuMapping[menuId] && this._flyoutMenuMapping[menuId].onClick) {\n                this._flyoutMenuMapping[menuId].onClick();\n            }\n        }\n\n        this._listenerManager.notify('flyoutMenuClicked', event);\n    }\n\n    _onFlyoutMenuOpened = (event) => {\n        this.flyoutMenuOpen = true;\n        metrics.reportEvent('Navigation', 'Library Panel', 'click', 'flyout-menu');\n        this._listenerManager.notify('flyoutMenuOpened', event);\n    }\n\n    _onFlyoutMenuClosed = () => {\n        this.flyoutMenuOpen = false;\n        if (this._pendingFlyoutMenuItems) {\n            this._setFlyoutMenu(this._pendingFlyoutMenuItems);\n            delete this._pendingFlyoutMenuItems;\n        }\n    }\n\n    /**\n     * Set the right-click context menu.\n     * You can optionally also specify a commonOnClick function that gets called before\n     * any of the specific menu item click handlers (i.e. for common operations that you want to happen\n     * for any item in the menu).\n     * @param {Object[]} menuItems\n     * @param {Function} commonOnClick\n     */\n    setContextMenu(menuItems, commonOnClick) {\n        // Add menu ids to ensure React gets a unique key\n        const mapping = makeMenuItemMapping(menuItems);\n        // Allows code to read back the current context menu via this.contextMenu\n        this._contextMenu = menuItems;\n\n        // Hook up the commonOnClick handler\n        if (commonOnClick) {\n            Object.values(mapping).forEach(mapping => {\n                const onClick = mapping.onClick;\n                mapping.onClick = () => {\n                    onClick && onClick();\n                    commonOnClick();\n                };\n            });\n        }\n\n        environment.setContextMenu(getMenuData(menuItems), menuId => {\n            if (mapping[menuId] && mapping[menuId].onClick) {\n                mapping[menuId].onClick();\n            }\n        });\n    }\n\n    /**\n     * Set the panel flyout menu.\n     * @param {Object[]} menuItems\n     */\n    _setFlyoutMenu(menuItems) {\n        // If flyout menu is already open when we go to set it, the flyout menu will go blank.\n        // To prevent this, we define a callback to set the flyout menu the next time it closes.\n        if (this.flyoutMenuOpen) {\n            this._pendingFlyoutMenuItems = menuItems;\n            return;\n        }\n        this._flyoutMenuMapping = makeMenuItemMapping(menuItems);\n        // Pass the menu into the environment, if it requires it (e.g. CEP needs to make a call to set the menu)\n        environment.setPanelFlyoutMenu && environment.setPanelFlyoutMenu(getMenuData(menuItems));\n    }\n\n    openContextMenu(actions, mouseEvent) {\n        this.setContextMenu(actions);\n        environment.onContextMenu(mouseEvent);\n    }\n\n    closeContextMenu() {\n        if (environment.closeContextMenu) {\n            environment.closeContextMenu();\n        }\n    }\n}\n\nexport default new MenuManager();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { action } from 'mobx';\n\nconst MAX_PATH_LENGTH = 256;\n\nexport class TempFileManager {\n    _tempFileMap = {};\n\n    /* Private methods */\n\n    _getFilePath = (path, name) => {\n        let newPath = configuration.strTempFolder + '/';\n\n        if (configuration.currentProduct.config.tempFolder) {\n            newPath = configuration.currentProduct.config.tempFolder();\n        }\n\n        const rawAssetName = path.split('/').pop(),\n            extension = '.' + FileUtils.getFileNameExtension(rawAssetName),\n            includeGuid = configuration.currentProduct.config.includeGuidInTempFileName,\n            maxFileNameLength = MAX_PATH_LENGTH - newPath.length - extension.length - (includeGuid ? 36 : 0); // 36 is the GUID length\n        let fileName = FileUtils.curateFileName(name).substring(0, maxFileNameLength);\n\n        // The guid in the file name is needed in AI and ID, to workaround a character encoding issue in the paths in CEP events\n        if (includeGuid) {\n            fileName = `${fileName}_${FileUtils.generateUuid()}`;\n        }\n\n        return `${newPath}${fileName}${extension}`;\n    };\n\n    _copyToTempLocation = (path, name) => {\n        const savePath = this._getFilePath(path, name);\n        return libraryManager.copyFile(path, savePath).then(() => savePath);\n    };\n\n    /* Public Methods */\n\n    /**\n     * Creates (if needed) an entry in the tempFileMap object, creates (if needed) a temporary file on disk, and returns a promise with the path to the file.\n     * @param {RepresentationModel} representation\n     */\n    @action\n    getTempFile(representation) {\n        const element = representation.element;\n\n        return representation.getContentPath().then(path => {\n\n            // If we already have a temp file for the element, with the given path to the representation,\n            // we can just return that temp file (so we don't open a new document). Since it's a copy-on-write\n            // scheme, this check is safe.\n            const elementRef = element.getLegacyReference();\n            if (this._tempFileMap[elementRef] && this._tempFileMap[elementRef].path === path) {\n                return this._tempFileMap[elementRef].tempPath;\n            }\n\n            // Don't already have a temp file, so make a copy\n            return this._copyToTempLocation(path, element.name).then(tempPath => {\n                this._tempFileMap[elementRef] = {\n                    path,\n                    tempPath\n                };\n                return tempPath;\n            });\n        });\n    }\n\n    /**\n     * Updates the temp file stored on disk.\n     * @param {RepresentationModel} representation\n     * @param {string} tempPath\n     */\n    @action\n    updateTempFile(representation, tempPath) {\n        const element = representation.element;\n\n        return representation.getContentPath().then(path => {\n\n            // If we saved a temp file, then the element would have been updated. This means that\n            // the path changed, so the cache is out-of-date. To prevent a new temp file being opened\n            // if you double click on the element after editing it, we update the tempFileMap with the new path\n            const elementRef = element.getLegacyReference();\n            this._tempFileMap[elementRef] = {\n                path,\n                tempPath\n            };\n\n            // Ensure there is no other element relying on this tempPath\n            Object.keys(this._tempFileMap).forEach(ref => {\n                if (ref !== elementRef && this._tempFileMap[ref].tempPath === tempPath) {\n                    delete this._tempFileMap[ref];\n                }\n            });\n        });\n    }\n\n    /**\n     * Deletes the temp file on disk and removes the entry in the tempFileMap object.\n     * @param {string} tempPath\n     */\n    @action\n    deleteTempFile(tempPath) {\n        FileUtils.deleteFile(tempPath);\n\n        // Only delete the cache entry if it's the same tempFile we're deleting.\n        Object.keys(this._tempFileMap).forEach(ref => {\n            if (this._tempFileMap[ref].tempPath === tempPath) {\n                delete this._tempFileMap[ref];\n            }\n        });\n    }\n}\n\nexport default new TempFileManager();\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2013 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\nimport menuManager from 'app/js/managers/menuManager';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport * as ImportExport from 'app/js/utils/importExport';\nimport environment from 'app/js/environment';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\n\n/**\n * Manager for exposing test hooks, used by the UI automation tests\n */\nexport class TestHookManager {\n\n    init() {\n        // Add a window hook, so unit tests can access the methods in this class\n        window.__test__ = this;\n    }\n\n    /**\n     * Exposes the current flyout menu items to the UI automation tests\n     */\n    getFlyoutMenu() {\n        return menuManager.getFlyoutMenu();\n    }\n\n    /**\n     * Exposes the current context menu items to the UI automation tests\n     */\n    getContextMenu() {\n        return menuManager.contextMenu;\n    }\n\n    /**\n     * Exposes the current library id and the number of elements in the current library to the UI automation tests\n     */\n    getCurrentLibraryInfo() {\n        const library = libraryManager.currentLibrary;\n        if (library) {\n            return {\n                id: library.id,\n                numElements: library.elements.length\n            };\n        }\n    }\n\n    /**\n     * Allows the UI Automation test to set a file path, to be used in place of displaying a file picker (e.g. for import and export).\n     * This is because it's not possible to automate interacting with the system file picker dialog.\n     *\n     * @param {string} filePath\n     */\n    setFilePath(filePath) {\n        this._filePath = filePath;\n    }\n\n    /**\n     * Get the file path set by the UI automation - note that this is not cleared automatically, you need to call\n     * `window.__test__.setFilePath()` to clear it again (which will revert to displaying the system file picker).\n     */\n    getFilePath() {\n        return this._filePath;\n    }\n\n    /**\n     * Get the files to import set by UI automation - note that this is not cleared automatically, you need to call\n     * `window.__test__.setFilesToImport()` to clear it again (which will revert to displaying the system file picker).\n     */\n    getFilesToImport() {\n        return this._files;\n    }\n\n    /**\n     * Allows the UI automation tests to set some files to be imported; skipping the file picker.\n     * This is because it's not possible to automate interacting with the system file picker dialog.\n     *\n     * @param {*} files An array of objects containing data necessary to map to File objects.\n     */\n    setFilesToImport(files) {\n        this._files = files ? files.map(f => {\n            const data = new Uint8Array(f.content.data);\n            const blob = new Blob([ data ], { type: f.type });\n            return new File([ blob ], f.name, { type: f.type, lastModified: f.lastModified });\n        }) : undefined;\n    }\n\n    /**\n    * Allows UI Automation to import a library in Adobe Xd\n    * you need to call `window.__test__.setFilePath` before calling `window.__test__.importLibrary()` to set a path to a file.\n    */\n    importLibrary() {\n        ImportExport.importLibrary(this._filePath, (err, library) => {\n            if (library) {\n                libraryManager.currentLibrary = library;\n            }\n        });\n    }\n\n    /**\n    * Allows UI Automation to get a status of Library Manager window in Adobe Xd\n    */\n    isLibraryManagerWindowOpen() {\n        return environment.isLibraryManagerWindowOpen();\n    }\n\n    /**\n    * Allows UI Automation to enable add menu in standalone mode and add element(s) to library panel\n    *\n    * @param {string} layerInfoObj\n    */\n    enableAddElementMenu(layerInfoObj) {\n        environment.setLayerInfo(layerInfoObj);\n        layerSelectionManager.updateLayerInfo();\n    }\n\n    /**\n    * Allows UI Automation to select multiple elements\n    *\n    * @param {Array} [elementNames=[]] names of elements to select\n    */\n    selectElements(elementNames = []) {\n        const library = libraryManager.currentLibrary;\n        const elementsToSelect = library.elements.filter(element => {\n            return elementNames.includes(element.name);\n        });\n        if (!elementsToSelect.length) {\n            elementSelectionState.clearSelection();\n        } else {\n            elementSelectionState.setSelection(elementsToSelect, true);\n        }\n    }\n\n    /**\n     * Allows UI Automation to disable sync\n     */\n    disableSync() {\n        libraryManager.disableSyncing();\n    }\n\n    /**\n     * Allows UI Automation to enable sync\n     */\n    async enableSync() {\n        await libraryManager.enableSyncing();\n    }\n\n    /**\n     * Allows UI Automation to get a status of sync: enabled or disabled\n     */\n    isSyncingEnabled() {\n        return libraryManager.syncingEnabled();\n    }\n\n}\n\nexport default new TestHookManager();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/* global __webpack_public_path__ */\n\nimport { observable, computed, action } from 'mobx';\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport { delay } from 'app/js/utils/promiseUtils';\nimport { loadCSS } from 'cssloader';\n\n// Utility for converting a color object to string in hexadecimal format:\nfunction toHex(color, delta) {\n    const getStr = (value, delta = 0) => {\n        const computedValue = Math.round(Math.max(0, Math.min(255, value + delta)));\n        const computedValueStr = computedValue.toString(16);\n        return (computedValueStr.length === 1 ? '0' : '') + computedValueStr;\n    };\n    return color ? getStr(color.red, delta) + getStr(color.green, delta) + getStr(color.blue, delta) : '';\n}\n\n// Utility for checking whether any CSS is loaded at the given root - it checks for the color-theme-background class being available.\nfunction isCSSLoaded(root) {\n    if (!root.styleSheets) {\n        // Root is not a document in this case (template)\n        return true;\n    }\n\n    for (let i = root.styleSheets.length - 1; i >= 0; i--) {\n        try {\n            const classes = root.styleSheets[i].rules || root.styleSheets[i].cssRules;\n            for (let j = 0; j < classes.length; j++) {\n                if (classes[j].selectorText === '.color-theme-background') {\n                    return true;\n                }\n            }\n        } catch (e) {\n            // firefox may throw Invalid Access Error if we access a CSSStyleSheet before it's parsed, so we catch it here\n            // https://bugzilla.mozilla.org/show_bug.cgi?id=761236\n        }\n    }\n}\n\n// Utilities for loading/unloading themes - we always attach inside of the head element\nconst loadTheme = (theme, root) => theme && theme.use(root.querySelector('head'));\nconst unloadTheme = (theme, root) => theme && theme.unuse(root.querySelector('head'));\n\nexport const REACT_SPECTRUM_THEME_MAP = {\n    light: 'light',\n    dark: 'dark',\n    lighter: 'lightest',\n    darker: 'darkest'\n};\n\n// ThemeManager dynamically loads CSS through cssloader at runtime.\nexport class ThemeManager {\n\n    @observable themeName = configuration.currentProduct.config.defaultTheme;\n\n    // The roots that the theme manager will attach CSS to - this is an array of documents or shadow roots.\n    _roots = [];\n\n    /**\n     * Fetch the stylesheet\n     * Note: We'd like to use fetch here, but it doesn't work with file:/// URLs.\n     */\n    _fetchStyles() {\n        const STYLES_URL = `${__webpack_public_path__}styles.css`;\n        const request = new XMLHttpRequest();\n        return new Promise((resolve, reject) => {\n            request.open('GET', STYLES_URL, true);\n            request.onload = () => resolve(request.response);\n            request.onerror = reject;\n            request.send();\n        });\n    }\n\n    init() {\n        environment.addEventListener(configuration.THEME_COLOR_CHANGED_EVENT, this._onAppThemeColorChanged);\n\n        // In most environments, the panel just attaches to the document, so we attach styles to the document head.\n        // This can be turned off in contexts where there library components are running inside of web components, e.g. in CCD.\n        if (!environment.excludeDocumentRoot) {\n            this._roots.push(document);\n        }\n\n        // The following code is not for the faint of heart - we wanted to extract the CSS from the main bundle, which can\n        // be done via the MiniCSSExtractPlugin, but this breaks hot module replacement. To keep both, we need to stick with\n        // the style-loader in development.\n\n        if (process.env.NODE_ENV === 'production') {\n            // In production, we use the MiniCSSExtractPlugin, so we need to load the CSS ourselves:\n            this._globalStyleTag = this._fetchStyles().then(css => {\n                const style = document.createElement('style');\n                style.setAttribute('type', 'text/css');\n                style.setAttribute('data-cc-libraries-global-css', '');\n                style.appendChild(document.createTextNode(css));\n                return style;\n            });\n\n            if (!environment.excludeDocumentRoot) {\n                // In environments that use the HTML entrypoint, webpack already attaches the <link> to styles.css to the HTML\n                // But we also need to handle other environments like UXP that doesn't use the HTML entrypoint but still has a\n                // document root.\n                const hasStyleLink = Array(document.head.children).some(n => n.tagName === 'LINK' && n.rel === 'stylesheet' && n.href.endsWith('/styles.css'));\n                if (!hasStyleLink) {\n                    // Note: creating a <link> tag doesn't seem to work in UXP, so we'll just attach it as a <style> tag:\n                    this._addGlobalCSSAsStyleTag(document);\n                }\n            }\n\n        } else {\n            // In dev mode, we use the style loader so that we can get hot module replacement working\n            // And before we init, the global CSS style tag has alreader been added to the document/host.\n            const cssElement = document.querySelector('[data-cc-libraries-global-css]');\n            this._globalStyleTag = Promise.resolve(cssElement);\n\n            // Also need to monitor for changes to handle hot module reloading\n            if (window.MutationObserver) {\n                // TODO: Debug why CSS reloading not working. perhaps b/c it only watches the global css on the document, rather than themes or global css on the shadow root\n                // in fact, perhaps we also want to be watching the CSSOM instead of the DOM and use something other than a MutationObserver\n                const cssChangeObserver = new MutationObserver(() => {\n                    // If there is a global style tag, when it changes, we want to propagate that change everywhere\n                    this._roots.filter(root => root !== document).forEach(root => {\n                        this._addGlobalCSSAsStyleTag(root, true);\n                    });\n                });\n                window.observedElement = cssElement;\n                cssChangeObserver.observe(cssElement, { childList: true });\n            }\n\n            if (!environment.excludeDocumentRoot) {\n                // Enable style to be loaded by all devices, restore default value overwritten for CCD.\n                cssElement.setAttribute('media', 'all');\n\n                // Stager's old version of Electron doesn't consider 'not all' a valid query, so it never attaches the\n                // style tag to the document's stylesheets. This can be resolved by plucking it and appending it again.\n                const head = cssElement.parentNode;\n                head.removeChild(cssElement);\n                head.appendChild(cssElement);\n            }\n        }\n\n        return this.updateTheme(environment.getHostEnvironment().appSkinInfo).finally(() => this._finishedInitialization = true);\n    }\n\n    async _addGlobalCSSAsStyleTag(root, replace) {\n        const head = root.querySelector('head');\n        const oldStyle = head.querySelector('[data-cc-libraries-global-css]');\n        if (oldStyle && !replace) {\n            // We skip if we're adding but the CSS is already added,\n            // unless we're replacing it\n            return;\n        }\n\n        // Create a <style> tag for the common CSS. It would be nicer to use\n        // a constructable style sheet so we can share it across shadow DOMs,\n        // but this doesn't play well with the useable-loader for themes.\n        // The biggest issue is that adoptedStyleSheets are added _after_\n        // any HTML stylesheets, which is the opposite to what we need.\n        // The only way to fix this would be to move to constructable stylesheets\n        // for _all_ CSS, but that's a much bigger change - so stick with using\n        // style tags for now.\n        if (!this._globalStyleTag) {\n            // We haven't initialized yet, so skip\n            return;\n        }\n        const globalStyleTag = await this._globalStyleTag;\n        const newStyle = globalStyleTag.cloneNode(true);\n        newStyle.removeAttribute('media');\n        if (oldStyle) {\n            head.replaceChild(newStyle, oldStyle);\n        } else {\n            head.insertBefore(newStyle, head.firstChild);\n        }\n    }\n\n    @computed\n    get reactSpectrumTheme() {\n        return REACT_SPECTRUM_THEME_MAP[this.themeName] || 'light';\n    }\n\n    get themeSystem() {\n        return configuration.currentProduct?.config.themeSystem || 'spectrum';\n    }\n\n    get appCode() {\n        return configuration.currentProduct.config.code;\n    }\n\n    get isInitialized() {\n        return !!this._finishedInitialization;\n    }\n\n    /**\n     * Adds a new root to load themes into - this should either be a document or a shadow DOM root.\n     *\n     * @param {DocumentOrShadowRoot} root\n     * @param {boolean} [isThemeLoaded] Has the theme already been loaded on this root?\n     * @returns {Promise} A promise that resolves when the CSS has loaded.\n     */\n    addRoot(root, isThemeLoaded = false) {\n        if (!this._roots.includes(root)) {\n            this._roots.push(root);\n\n            // Load the main app.css style sheet into the root (this is common across all themes)\n            this._addGlobalCSSAsStyleTag(root);\n\n            // Load the product/theme specific style sheet into the root\n            if (!isThemeLoaded) {\n                loadTheme(this._theme, root);\n            }\n        }\n        return isThemeLoaded ? Promise.resolve() : this._waitForBackgroundColor();\n    }\n\n    /**\n     * Unregisters the given root - this should either be a document or a shadow DOM root.\n     *\n     * @param {DocumentOrShadowRoot} root\n     */\n    removeRoot(root) {\n        const index = this._roots.indexOf(root);\n        if (index !== -1) {\n            this._roots.splice(index, 1);\n            unloadTheme(this._theme, root);\n        }\n    }\n\n    _onAppThemeColorChanged = () => {\n        this.updateTheme(environment.getHostEnvironment(true).appSkinInfo);\n    };\n\n    _waitForBackgroundColor() {\n        if (this._roots.every(isCSSLoaded)) {\n            return Promise.resolve();\n        }\n\n        // Check again in a few milliseconds\n        return delay(10, () => this._waitForBackgroundColor());\n    }\n\n    _replaceTheme(newTheme) {\n        const oldTheme = this._theme;\n        if (newTheme === oldTheme) {\n            return;\n        }\n\n        this._theme = newTheme;\n        this._roots.forEach(root => {\n            if (root !== document) {\n                // Ensure it has the global CSS added - this will do nothing, if we have already set it.\n                // (this handles the case if the root was added before theme manager was initialized)\n                this._addGlobalCSSAsStyleTag(root);\n            }\n            loadTheme(newTheme, root);\n        });\n\n        // We unload the old theme in a timeout, to avoid flickering\n        setTimeout(() => this._roots.forEach(root => unloadTheme(oldTheme, root)), 20);\n    }\n\n    _validateAppSkinInfo(appSkinInfo = {}) {\n        return appSkinInfo.panelBackgroundColor?.color?.red\n            && appSkinInfo.panelBackgroundColor?.color?.green\n            && appSkinInfo.panelBackgroundColor?.color?.blue;\n    }\n\n    @action\n    _updateTheme(appSkinInfo = {}) {\n        const { themes } = configuration.currentProduct.config;\n        const appSetColor = appSkinInfo.panelBackgroundColor?.color;\n        let updatedTheme = appSkinInfo.panelNamedTheme || themes[toHex(appSetColor)];\n\n        if (!updatedTheme && this._validateAppSkinInfo(appSkinInfo)) {\n            let best;\n            Object.keys(themes)\n                .map(color => {\n                    const match = /(?<red>[0-9a-f]{2})(?<green>[0-9a-f]{2})(?<blue>[0-9a-f]{2})/i.exec(color);\n                    if (!match) {\n                        return;\n                    }\n                    const { groups } = match;\n                    const distance = Math.sqrt(((parseInt(groups.red, 16) - appSetColor.red) ** 2)\n                                               + ((parseInt(groups.green, 16) - appSetColor.green) ** 2)\n                                               + ((parseInt(groups.blue, 16) - appSetColor.blue) ** 2));\n                    if (!best || best > distance) {\n                        best = distance;\n                        updatedTheme = themes[color];\n                    }\n                });\n        }\n\n        this.themeName = updatedTheme || configuration.currentProduct.config.defaultTheme;\n    }\n\n    // Update the theme with the AppSkinInfo retrieved from the host product.\n    updateTheme(appSkinInfo) {\n        // Swap out the css\n        this._updateTheme(appSkinInfo);\n\n        // Import the application-specific css theme: applications/<app>/css/<theme>/main.scss\n        // This module will be loaded dynamically by webpack, separate from the main JS file.\n        const loadingPromise = loadCSS(configuration.currentProduct.config.code, this.themeName)\n            .then(module => {\n                if (this._loadingPromise === loadingPromise) {\n                    // Check that no other requests came in as we were loading - if so, we don't update, to avoid race conditions\n                    this._replaceTheme(module);\n                    delete this._loadingPromise;\n                }\n            })\n            .then(() => this._waitForBackgroundColor());\n        this._loadingPromise = loadingPromise;\n        return loadingPromise;\n    }\n}\n\nexport default new ThemeManager();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/**\n * Uses webpack dynamic loading to load a CSS file. This lives in its own file, because we can't test this in Jest - since\n * Jest runs in node, it doesn't use webpack, and so doesn't understand dynamic imports\n *\n * With dynamic imports, the chunk is run through all the same loaders as it\n * would be if it were a static import, but just at a later time. The resulting module for the\n * theme css is one that has passed through the custom useable-loader, and returns a module exporting use() and unuse().\n * @param {number} productCode\n * @param {string} themeName\n */\nexport function loadCSS(productCode, themeName) {\n    try {\n        // IMPORTANT: Do not move the construction of the path outside the import, otherwise webpack\n        // won't know to pull in all the possible paths as chunks. This is a dynamic require, so it's not\n        // pulled into the main JS file, but compiled as a separate file to be loaded dynamically.\n        if (!process.env.INCLUDE_DESKTOP && !process.env.INCLUDE_DEV && !process.env.INCLUDE_OFFICE) {\n            // We can exclude generating the CSS for desktop products if we're building exclusively for web:\n            return import(\n                /* webpackChunkName: \"css/[request]\" */\n                /* webpackExclude: /\\applications\\/(PHXS|PHXS_UXP|ILST|ILST_UXP|IDSN|AEFT|PPRO|FLPR|DRWV|KBRG|SPRK|ACCC|STGR|GoogleSlides|Figma|StyleGuide|PowerPoint|Word)\\// */\n                '../applications/' + productCode + '/css/' + themeName + '/main.scss'\n            );\n        } else if (!process.env.INCLUDE_DESKTOP && !process.env.INCLUDE_DEV) {\n            // We can exclude generating the CSS for desktop/dev products if we're building for office:\n            return import(\n                /* webpackChunkName: \"css/[request]\" */\n                /* webpackExclude: /\\applications\\/(PHXS|PHXS_UXP|ILST|ILST_UXP|IDSN|AEFT|PPRO|FLPR|DRWV|KBRG|SPRK|ACCC|STGR|GoogleSlides|Figma|StyleGuide)\\// */\n                '../applications/' + productCode + '/css/' + themeName + '/main.scss'\n            );\n        } else { // In Dev environment, we process everything\n            return import(\n                /* webpackChunkName: \"css/[request]\" */\n                '../applications/' + productCode + '/css/' + themeName + '/main.scss'\n            );\n        }\n\n    } catch (e) {\n        console.error('Theme not found: ' + productCode + '/' + themeName);\n        return Promise.reject();\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { observable } from 'mobx';\n\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport debugLog from 'app/js/utils/debugLog';\nimport environment from 'app/js/environment';\nimport configuration from 'app/js/config/configuration';\n\n// Removed elements get removed from the local cache after 10 minutes - make sure we don't ask\n// for any thumbnails from such elements, because they'll get removed as soon as we download them!\nconst isRemovedFromLocalCache = element => {\n    if (element.removed) {\n        const cacheExpiry = 10 * 60 * 1000; // 10 minutes\n        const currentTime = new Date().valueOf();\n        return currentTime - element.removed >= cacheExpiry;\n    }\n    return false;\n};\n\nclass ThumbnailDataCache {\n\n    constructor(element, isLarge) {\n        this._element = element;\n        this._isLarge = isLarge;\n    }\n\n    _fetchId = 0;\n    _blobCache = new Map();\n\n    dispose() {\n        // Release the reference to the blob.\n        this._blobCache.forEach(blobSrc => URL.revokeObjectURL(blobSrc));\n    }\n\n    // URL for the element's thumbnail. We use `undefined` to mean that we don't yet know the thumbnail (i.e. we're loading it),\n    // and `null` to mean that the thumbnail is broken.\n    @observable _url;\n\n    // In some cases like document assets, the modified time doesn't always change when the element rendition changes\n    // In this case we allow a changeCount to be used on the element instead of modified, as the cache invalidator\n    get _elementModified() {\n        return this._element.changeCount || this._element.modified;\n    }\n\n    /**\n     * Synchronously returns URL of the thumbnail, which will be one of these:\n     * - file URL (file://) in environments with file systems,\n     * - Data URL (data:image/png;base64,) in sandboxed desktop environments that require embedded data\n     * - Object URL (blob:) in web environments,\n     * - null if there's no thumbnail\n     * - undefined if we're still waiting for the thumbnail\n     *\n     * Asychronously requests an update as needed, and this observable value will update.\n     */\n    get url() {\n        if (isRemovedFromLocalCache(this._element)) {\n            // Show a broken thumbnail for elements that were deleted more than 10 minutes ago\n            // (the removed elements view is currently debug-only, but we'd want to improve this before adding a proper view)\n            return null;\n        }\n        if (this._elementModified !== this._modified) {\n            // If the element changed, we trigger an update, and return the cached value in the meantime.\n            // The update is asynchronous, so it'll modify the state later - causing any reactions that\n            // accessed this.url to trigger when the URL comes back.\n            this._update();\n        }\n        return this._url;\n    }\n\n    // Private: updating the thumbnail URL\n    _update() {\n        const fetchId = ++this._fetchId;\n        const modified = this._modified = this._elementModified;\n\n        // Trick: Since the new thumbnail often comes in really quickly, we add a delay before clearing out the\n        // old thumbnail, to avoid flicker in the UI. For example, if you rename an element, this avoids seeing\n        // a flicker where it goes back to the loading spinner.\n        const loadDelayTimeout = setTimeout(() => {\n            if (fetchId === this._fetchId) {\n                this._url = undefined;\n            }\n        }, 300);\n\n        const onFinished = url => {\n            clearTimeout(loadDelayTimeout);\n            if (fetchId === this._fetchId) {\n                if (this._elementModified !== modified) {\n                    // The element changed while we were fetching the thumbnail, so just fetch it again\n                    this._update();\n                    return;\n                }\n\n                if (!url && !this._element.getPrimaryRepresentation()?.isCommitted) {\n                    // We may not have a thumbnail URL until the element and its primary representation is committed.\n                    // Use undefined to indicate we are waiting for the thumbnail.\n                    this._url = undefined;\n                } else {\n                    this._url = url || null;\n                }\n            }\n        };\n\n        this._getThumbnailUrl().then(onFinished).catch(err => {\n            debugLog.log('Error getting thumbnail URL: ' + err);\n            onFinished();\n        });\n    }\n\n    async _getThumbnailUrl() {\n        const url = await elementConfiguration.getLocalThumbnailURL(this._element, this._isLarge);\n        // ACP doesn't have consistent cache-control for renditions, so in web environments\n        // we need to cache the images locally.\n        // https://jira.corp.adobe.com/browse/ACPCSS-6198\n        if (environment.supportsFileURLs) { return url; }\n        return this._getThumbnailBlobUrl(url);\n    }\n\n    async _getThumbnailBlobUrl(url) {\n        if (!url) { return undefined; }\n\n        const cacheKey = `${url}#${this._element.instanceId}`;\n        const cachedUrl = this._blobCache.get(cacheKey);\n        if (cachedUrl) { return cachedUrl; }\n\n        // Rendition urls are authenticated, so no need to inject auth headers\n        const response = await fetch(url);\n        if (response.ok) {\n            const blobSrc = URL.createObjectURL(await response.blob());\n            // Cache the blob source. The cache will get cleared when the user switches libraries.\n            this._blobCache.set(cacheKey, blobSrc);\n            return blobSrc;\n        } else {\n            throw new Error(`could not load thumbnail for element: ${this._element.id}`);\n        }\n    }\n}\n\nexport class ThumbnailManager {\n\n    _thumbnailCache = new Map();\n    _deletionListeners = new Map();\n\n    _clearThumbnailData = cacheKey => {\n        const cacheEntry = this._thumbnailCache.get(cacheKey);\n        cacheEntry?.dispose();\n        this._thumbnailCache.delete(cacheKey);\n    }\n\n    _addDeletionEventListener = element => {\n        // If the library is removed, we need to clear its elements' thumbnail cache entries.\n        // This is important because if the library were to be re-added later,\n        // the rendition urls for the elements could change, making any cached urls invalid.\n        if (!this._deletionListeners.has(element.library.id)) {\n            this._deletionListeners.set(element.library.id, () => {\n                element.library.off('remove', this._deletionListeners.get(element.library.id));\n                this._deletionListeners.delete(element.library.id);\n\n                this._thumbnailCache.forEach((_, key) => {\n                    if (key.startsWith(`${element.library.id}#`)) {\n                        this._clearThumbnailData(key);\n                    }\n                });\n            });\n            element.library.on('remove', this._deletionListeners.get(element.library.id));\n        }\n    };\n\n    _getThumbnailData(element, isLarge) {\n        const uniqueKey = `${element.library.id}#${element.id}` + (isLarge ? '--large' : '--normal');\n        // After the keepalive expires, clear the cache entry.\n        const keepaliveTimeout = setTimeout(() => this._clearThumbnailData(uniqueKey), configuration.THUMBNAIL_CACHE_KEEPALIVE_TIME);\n        const cacheEntry = this._thumbnailCache.get(uniqueKey);\n\n        if (cacheEntry) {\n            clearTimeout(cacheEntry.timeout);\n            // Extend keepalive and return cached value.\n            cacheEntry.timeout = keepaliveTimeout;\n            return cacheEntry;\n        }\n\n        if (!cacheEntry || cacheEntry._element !== element) {\n            this._thumbnailCache.set(uniqueKey, new ThumbnailDataCache(element, isLarge));\n            this._addDeletionEventListener(element);\n        }\n        return this._thumbnailCache.get(uniqueKey);\n    }\n\n    /**\n     * Synchronously returns the local URL for the given element's thumbnail. This is observable via MobX, so any renderers\n     * can use this, and will be updated automatically when the element changes and the URL updates.\n     *\n     * URL of the thumbnail will be one of these formats:\n     * - file URL (file://) in environments with file systems,\n     * - Data URL (data:image/png;base64,) in sandboxed desktop environments that require embedded data\n     * - Object URL (blob:) in web environments,\n     * - null if there's no thumbnail\n     * - undefined if we're still waiting for the thumbnail\n     *\n     * Note that when using the LocalDriver, this call results in the process generating a thumbnail using the Imaging Service.\n     * When on the CloudDriver, this merely returns the renditionUrl, which is an URL that melville has already given us along with the\n     * element data, in a library where elements have been loaded. It is not until the URL is fetched that the R-API generates the rendition.\n     *\n     * @param {ElementModel} element\n     * @param {boolean} isLarge\n     * @returns {string} local thumbnail URL\n     */\n    getLocalThumbnailURL(element, isLarge = false) {\n        return this._getThumbnailData(element, isLarge).url;\n    }\n\n    /**\n     * Are we still loading the thumbnail URL for the element? This can be used in the UI to display a loading\n     * spinner.\n     *\n     * Note that `!isThumbnailLoading(element) && !getLocalThumbnailURL(element)` means that we're not loading, but we\n     * don't have a thumbnail - this means we should display a broken thumbnail indicator.\n     *\n     * @param {ElementModel} element\n     * @param {boolean} isLarge\n     * @returns {boolean} true if the thumbnail URL is still loading.\n     */\n    isThumbnailLoading(element, isLarge = false) {\n        return this._getThumbnailData(element, isLarge).url === undefined;\n    }\n\n    /**\n     * Clears the cached thumbnail data. This can be called when switching libraries, to allow us a second chance to fetch broken thumbnails\n     * (otherwise the view will never try to reload a broken thumbnail, unless the element changes).\n     */\n    clearCache() {\n        this._thumbnailCache.forEach(thumbnailDataCache => thumbnailDataCache.dispose());\n        this._thumbnailCache.clear();\n    }\n}\n\nexport default new ThumbnailManager();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport classNames from 'classnames';\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport OverlayState from 'app/js/components/utils/OverlayState';\nimport React from 'react';\nimport configuration from 'app/js/config/configuration';\nimport { when, observable } from 'mobx';\nimport environment from 'app/js/environment';\nimport Icon from 'app/js/components/Icon';\n\n/**\n * Base class used by all toasts.\n * A toast will either timeout and fade out, or will disappear immediately when a click occurs outside of it.\n */\n@observer\nexport default class BaseToast extends React.Component {\n\n    static propTypes = {\n        children: PropTypes.node,\n        duration: PropTypes.number, // The amount of time in ms the toast should persist. If set to 0, the toast will remain until closed manually.\n        close: PropTypes.func.isRequired, // Callback for closing the dialog (toastManager.closeToast())\n        closable: PropTypes.bool, // Whether the user should be able to manually dismiss the toast.\n        variant: PropTypes.oneOf([ 'error', 'warning', 'success', 'info' ])\n    };\n\n    static defaultProps = {\n        variant: 'info',\n        closable: true\n    };\n\n    @observable isFadingOut = false;\n\n    constructor(props) {\n        super(props);\n        // handles hiding the toast when user clicks outside toast, but not when scrolling or changing focus\n        // If we define a toast as not closable: we should ignore all overlay events.\n        this.overlayState = new OverlayState({ ignoreAllEvents: !props.closable, ignoreScrollEvents: true, ignoreFocus: environment.ignoreFocusOutsideToast });\n    }\n\n    componentDidMount() {\n        // update overlay state to reflect that the toast starts open\n        this.overlayState.toggleOverlay();\n\n        if (this.props.duration !== 0) {\n            // fade out after toast times out\n            const duration = this.props.duration || configuration.DEFAULT_TOAST_TIMEOUT;\n            let timeout = setTimeout(() => {\n                this.isFadingOut = true;\n                // after giving time to fade out, close the toast\n                timeout = setTimeout(this.props.close, configuration.TOAST_FADEOUT);\n            }, duration);\n\n            // if user clicked outside the toast, cancel the timeout and close the toast (even if in the middle of fading out)\n            when(() => !this.overlayState.isOpen, () => {\n                // isOpen started out true, so this will only ever trigger when it becomes false\n                clearTimeout(timeout);\n                this.props.close(); // update the toastManager to officially close the toast.\n            });\n        }\n    }\n\n    render() {\n        return (\n            <div data-test-id=\"toast\" className={ classNames('panel-toast', `panel-toast--variant-${this.props.variant}`, { fadeout: this.isFadingOut }) } ref={ this.overlayState.setParentElement }>\n                <span className=\"panel-toast-text\">\n                    { this.props.children }\n                </span>\n                { this.props.closable && (\n                    <div className=\"panel-toast-action panel-toast-close\" data-test-id=\"panel-toast-close\" onClick={ this.props.close }>\n                        <Icon id=\"Close\" height={ 18 } />\n                    </div>\n                ) }\n            </div>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { observer } from 'mobx-react';\nimport React from 'react';\nimport BaseToast from 'app/js/components/toasts/BaseToast';\nimport { translate } from 'app/js/managers/translationManager';\nimport configuration from 'app/js/config/configuration';\nimport PropTypes from 'prop-types';\n\n/**\n * Toast with action to undo an action.\n */\n@observer\nexport default class BaseUndoToast extends React.Component {\n    static propTypes = {\n        message: PropTypes.string.isRequired,\n        undo: PropTypes.func.isRequired,\n        close: PropTypes.func.isRequired // Callback for closing the dialog (toastManager.closeToast())\n    };\n\n    render() {\n        return (<BaseToast close={ this.props.close } duration={ configuration.UNDO_TOAST_TIMEOUT }>\n            <span data-test-id=\"toast-message\">{ this.props.message }</span>\n            <span data-test-id=\"toast-undo-action\" className=\"panel-toast-action\" onClick={ this.props.undo }>{ translate('DL_UNDO_DELETE') }</span>\n        </BaseToast>);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport BaseUndoToast from 'app/js/components/toasts/BaseUndoToast';\nimport ElementModel from 'app/js/models/ElementModel';\nimport { translate } from 'app/js/managers/translationManager';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport metrics from 'app/js/interface/metrics';\nimport { truncateString } from 'app/js/utils/stringUtils';\n\nfunction getMessage(elements) {\n    if (elements.length === 1) {\n        return translate('DL_UNDO_DELETE_ITEM', { name: truncateString(elements[0].name, 25) });\n    }\n    return translate('DL_UNDO_DELETE_ITEMS', { num: elements.length });\n}\n\nfunction undoDelete(elements, groupInfo) {\n    libraryManager.restoreElements(elements, groupInfo);\n    metrics.reportEvent('Element Operations', 'Element', 'click', 'undo-delete', { event: { value: 'agg', count: elements.length }, content: { category: 'Click' } });\n}\n\n/**\n * Toast with action to undo last deleted element(s).\n */\n@observer\nexport default class UndoDeleteElementsToast extends React.Component {\n\n    static propTypes = {\n        elements: PropTypes.arrayOf(PropTypes.instanceOf(ElementModel)).isRequired,\n        groupInfo: PropTypes.object,\n        close: PropTypes.func.isRequired // Callback for closing the dialog (toastManager.closeToast())\n    };\n\n    static toastName = 'undoDeleteElements';\n\n    static getMessage(props) {\n        return getMessage(props.elements);\n    }\n\n    static getAction(props) {\n        return {\n            label: translate('DL_UNDO_DELETE'),\n            onClick: () => undoDelete(props.elements, props.groupInfo),\n        };\n    }\n\n    get message() {\n        return getMessage(this.props.elements);\n    }\n\n    undoDelete = () => {\n        undoDelete(this.props.elements, this.props.groupInfo);\n        this.props.close();\n    }\n\n    render() {\n        return <BaseUndoToast undo={ this.undoDelete } close={ this.props.close } message={ this.message }/>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { observer } from 'mobx-react';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport BaseUndoToast from 'app/js/components/toasts/BaseUndoToast';\nimport { translate } from 'app/js/managers/translationManager';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\nimport configuration from 'app/js/config/configuration';\nimport { restoreGroups } from 'app/js/utils/groupUtils';\n\nfunction getMessage(groupsTree, ungroup) {\n    const branches = Object.values(groupsTree.branches);\n    // Get the library.\n    const { library } = branches.find(branch => branch.item.library).item;\n    const oldGroupsCount = branches.filter(branch => branch.item.isGroup && branch.item !== configuration.UNGROUPED_GROUP).length;\n    const existingGroupsCount = library.getGroupCount();\n    const numGroups = oldGroupsCount - existingGroupsCount;\n    if (numGroups > 1) {\n        return ungroup ? translate('DL_UNDO_UNGROUPED_GROUP_PLURAL', { num: numGroups })\n            : translate('DL_UNDO_DELETED_GROUP_PLURAL', { num: numGroups });\n    } else {\n        return ungroup ? translate('DL_UNDO_UNGROUPED_GROUP_SINGULAR')\n            : translate('DL_UNDO_DELETED_GROUP_SINGULAR');\n    }\n}\n\nfunction undoDelete(groupsTree) {\n    restoreGroups(groupsTree);\n}\n\n/**\n * Toast with action to undo last deleted groups and element(s).\n */\n@observer\nexport default class UndoDeleteGroupToast extends React.Component {\n    static propTypes = {\n        groupsTree: PropTypes.object.isRequired,\n        close: PropTypes.func.isRequired, // Callback for closing the dialog (toastManager.closeToast())\n        ungroup: PropTypes.bool\n    };\n\n    static contextType = LibrariesContext;\n\n    static toastName = 'undoDeleteGroup';\n\n    static getMessage(props) {\n        return getMessage(props.groupsTree, props.ungroup);\n    }\n\n    static getAction(props) {\n        return {\n            label: translate('DL_UNDO_DELETE'),\n            onClick: () => undoDelete(props.groupsTree)\n        };\n    }\n\n    get message() {\n        return getMessage(this.props.groupsTree, this.props.ungroup);\n    }\n\n    undoDelete = () => {\n        undoDelete(this.props.groupsTree);\n        this.props.close();\n    }\n\n    render() {\n        return <BaseUndoToast undo={ this.undoDelete } close={ this.props.close } message={ this.message }/>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport BaseUndoToast from 'app/js/components/toasts/BaseUndoToast';\nimport ElementModel from 'app/js/models/ElementModel';\nimport { translate } from 'app/js/managers/translationManager';\nimport metrics from 'app/js/interface/metrics';\n\nfunction undoDelete(element, description) {\n    metrics.setExtraEventMetrics('updateElement', {\n        subtype: `undo-delete-note`,\n        content: { category: 'Click' }\n    });\n    element.description = description;\n}\n\n/**\n * Toast with action to undo last deleted element(s).\n */\n@observer\nexport default class UndoDeleteDescriptionToast extends React.Component {\n\n    static propTypes = {\n        element: PropTypes.instanceOf(ElementModel).isRequired,\n        description: PropTypes.string.isRequired,\n        close: PropTypes.func.isRequired // Callback for closing the dialog (toastManager.closeToast())\n    };\n\n    static toastName = 'undoDeleteDescription';\n\n    static getMessage() {\n        return translate('DL_UNDO_DELETE_DESCRIPTION');\n    }\n\n    get message() {\n        return translate('DL_UNDO_DELETE_DESCRIPTION');\n    }\n\n    static getAction(props) {\n        return {\n            label: translate('DL_UNDO_DELETE'),\n            onClick: () => undoDelete(props.element, props.description),\n        };\n    }\n\n    undoDelete = () => {\n        undoDelete(this.props.element, this.props.description);\n        this.props.close();\n    }\n\n    render() {\n        return <BaseUndoToast undo={ this.undoDelete } close={ this.props.close } message={ this.message }/>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport BaseToast from 'app/js/components/toasts/BaseToast';\nimport { timeToReadString } from 'app/js/utils/stringUtils';\n\n/**\n * Most common toast type -- just displays a simple message (which should already be translated).\n */\n\n@observer\nexport default class MessageToast extends React.Component {\n\n    static propTypes = {\n        close: PropTypes.func.isRequired, // Callback for closing the dialog (toastManager.closeToast())\n        message: PropTypes.oneOfType([ PropTypes.string, PropTypes.node ]).isRequired, // a translated string, or node, (such as when passing an HTMLText component)\n        variant: PropTypes.oneOf([ 'error', 'warning', 'success', 'info' ]),\n        duration: PropTypes.number, // Allow for a specific duration for a toast.\n        closable: PropTypes.bool\n    };\n\n    // We add this property because the actual class name can change when minified, but strings wont.\n    static toastName = 'message';\n\n    static getMessage(props) {\n        return props.message;\n    }\n\n    get duration() {\n        return this.props.duration ?? timeToReadString(this.props.message);\n    }\n\n    render() {\n        return (\n            <BaseToast\n                close={ this.props.close }\n                variant={ this.props.variant }\n                duration={ this.duration }\n                closable={ this.props.closable }\n            >\n                <span data-test-id=\"toast-message\">{ this.props.message }</span>\n            </BaseToast>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport BaseToast from 'app/js/components/toasts/BaseToast';\nimport { timeToReadString } from 'app/js/utils/stringUtils';\n\n/**\n * Displays a simple message (which should already be translated) along with an action button\n */\n@observer\nexport default class ActionMessageToast extends React.Component {\n\n    static propTypes = {\n        action: PropTypes.shape({\n            label: PropTypes.string.isRequired,\n            onClick: PropTypes.func.isRequired\n        }).isRequired, // Object containing the Label and OnClick method for the action button of toast\n        close: PropTypes.func.isRequired, // Callback for closing the dialog (toastManager.closeToast())\n        message: PropTypes.oneOfType([ PropTypes.string, PropTypes.node ]).isRequired, // a translated string, or node, (such as when passing an HTMLText component)\n        variant: PropTypes.oneOf([ 'error', 'warning', 'success', 'info' ]) // This isn't used currently, but we need to standardize this API for external cases\n    };\n\n    // We add this property because the actual class name can change when minified, but strings wont.\n    static toastName = 'action';\n\n    static getMessage(props) {\n        return props.message;\n    }\n\n    static getAction(props) {\n        return props.action;\n    }\n\n    get duration() {\n        return timeToReadString(this.props.message);\n    }\n\n    onClick = () => {\n        this.props.action.onClick();\n        this.props.close();\n    }\n\n    render() {\n        return (\n            <BaseToast close={ this.props.close } duration={ this.duration } variant={ this.props.variant }>\n                <span data-test-id=\"toast-message\">{ this.props.message }</span>\n                <span data-test-id=\"toast-action\" className=\"panel-toast-action\" onClick={ this.onClick }>{this.props.action.label}</span>\n            </BaseToast>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { observer } from 'mobx-react';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport BaseUndoToast from 'app/js/components/toasts/BaseUndoToast';\nimport { translate } from 'app/js/managers/translationManager';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\n\nfunction getMessage() {\n    return translate('DL_GROUPS_MERGED_TOAST');\n}\n\nfunction undo(props) {\n    props.undo();\n}\n\n/**\n * Toast with action to undo merging groups.\n */\n@observer\nexport default class UndoMergeGroupsToast extends React.Component {\n    static propTypes = {\n        undo: PropTypes.func.isRequired, // Callback for undoing the merge.\n        close: PropTypes.func.isRequired, // Callback for closing the dialog (toastManager.closeToast())\n    };\n\n    static contextType = LibrariesContext;\n\n    static toastName = 'undoMergeGroups';\n\n    static getMessage() {\n        return translate('DL_GROUPS_MERGED_TOAST');\n    }\n\n    static getAction(props) {\n        return {\n            label: translate('DL_UNDO_DELETE'),\n            onClick: () => undo(props)\n        };\n    }\n\n    get message() {\n        return getMessage();\n    }\n\n    undo = () => {\n        undo(this.props);\n        this.props.close();\n    }\n\n    render() {\n        return <BaseUndoToast undo={ this.undo } close={ this.props.close } message={ this.message }/>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { observer } from 'mobx-react';\nimport { computed, when } from 'mobx';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport Icon from 'app/js/components/Icon';\nimport BaseToast from 'app/js/components/toasts/BaseToast';\nimport { translate } from 'app/js/managers/translationManager';\nimport { LibrariesContext } from 'app/js/state/LibrariesContext';\n\n/**\n * Displays the progress of the current libraries syncing state and closes itself when syncing is done.\n */\n@observer\nexport default class SyncProgressToast extends React.Component {\n\n    static contextType = LibrariesContext;\n\n    static propTypes = {\n        close: PropTypes.func.isRequired, // Callback for closing the dialog (toastManager.closeToast())\n    };\n\n    static toastName = 'syncProgress';\n\n    get syncStatus() {\n        return this.context.libraryManager.syncStatus;\n    }\n\n    componentDidMount() {\n        this.dispose = when(() => ![ 'working', 'syncing' ].includes(this.syncStatus.state), () => {\n            // Close the toast once syncing is not in progress.\n            this.props.close();\n        });\n    }\n\n    componentWillUnmount() {\n        this.dispose();\n    }\n\n    @computed get message() {\n        return translate('DL_SYNC_PROGRESS_PERCENT', { percent: this.syncStatus.syncProgress || 0 });\n    }\n\n    render() {\n        return (\n            <BaseToast variant=\"info\" close={ this.props.close } duration={ 0 }>\n                <div className=\"panel-toast-sync-progress\">\n                    <Icon id=\"SyncingSpinner\" height={ 18 } className=\"sync-progress-icon\" data-test-id=\"sync-progress-icon\" />\n                    <span data-test-id=\"toast-message\">{ this.message }</span>\n                </div>\n            </BaseToast>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { action, observable, computed } from 'mobx';\nimport environment from 'app/js/environment';\n// Toasts to register:\nimport UndoDeleteElementsToast from 'app/js/components/toasts/UndoDeleteElementsToast';\nimport UndoDeleteGroupToast from 'app/js/components/toasts/UndoDeleteGroupToast';\nimport UndoDeleteDescriptionToast from 'app/js/components/toasts/UndoDeleteDescriptionToast';\nimport MessageToast from 'app/js/components/toasts/MessageToast';\nimport ActionMessageToast from 'app/js/components/toasts/ActionMessageToast';\nimport UndoMergeGroupsToast from 'app/js/components/toasts/UndoMergeGroupsToast';\nimport SyncProgressToast from 'app/js/components/toasts/SyncProgressToast';\n\n/*\n * Manager for toasts in the panel. Creates an easy interface for opening toasts and ensures that only one toast is ever shown.\n * If you want to show a toast, just call `toastManager.openToast(name, message)`. Message should be an already localized string.\n * A toast component will appear at the top of the panel.\n * Clicking anywhere else in the panel will dismiss it. Otherwise it will time out and fade.\n *\n * Note: Since clicking anywhere else in the panel will dismiss the toast, and the only toasts currently are a result of user action\n * in the panel, it's not possible to have more than one toast. Will need to refactor if need to support multiple toasts or toasts as push notifications.\n */\nexport class ToastManager {\n    // Keyed by toastName\n    _toasts = {};\n\n    @observable.ref _openToast; // {name, data}\n\n    constructor() {\n        this.register(UndoDeleteElementsToast);\n        this.register(UndoDeleteGroupToast);\n        this.register(UndoDeleteDescriptionToast);\n        this.register(MessageToast);\n        this.register(ActionMessageToast);\n        this.register(UndoMergeGroupsToast);\n        this.register(SyncProgressToast);\n        // New toasts only need to be added if they will be structurally different.\n    }\n\n    register(toastClass) {\n        this._toasts[toastClass.toastName] = toastClass;\n    }\n\n    /**\n     * Open a toast by name, with optional data. e.g. `openToast('undoDelete')` or the basic case: `openToast('message', { message })`\n     * @param {string} name - toastName property of the toast class\n     * @param {Object} [data] - Optional object with props expected by the toast. e.g. `message` for the MessageToast, which should be a translated string.\n     */\n    @action\n    openToast(name, data) {\n        const ToastClass = this._toasts[name];\n        if (!ToastClass) {\n            throw new Error(`Open Toast: Toast of type ${name} does not exist.`);\n        }\n\n        if (environment.showToast) {\n            return environment.showToast(ToastClass.getMessage(data), ToastClass.getAction && ToastClass.getAction(data), data);\n        }\n\n        this._openToast = { name, data };\n    }\n\n    closeToast = referenceId => {\n        if (environment.hideToast) {\n            environment.hideToast(referenceId);\n            return;\n        }\n\n        const openToast = this._openToast;\n        const toastRefId = openToast?.data?.referenceId;\n        if (openToast && toastRefId === referenceId) {\n            this._forceClose();\n        }\n    }\n\n    @action\n    _forceClose = () => {\n        if (environment.hideAllToasts) {\n            environment.hideAllToasts();\n        }\n        this._openToast = undefined;\n    }\n\n    @computed\n    get toast() {\n        const openToast = this._openToast;\n        if (openToast) {\n            const Toast = this._toasts[openToast.name];\n            return <Toast { ...openToast.data } close={ this._forceClose } />;\n        }\n    }\n\n    get toastData() {\n        return this._openToast && this._openToast.data;\n    }\n\n    get toastName() {\n        return this._openToast && this._openToast.name;\n    }\n}\n\nexport default new ToastManager();\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2018 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\nimport { observable } from 'mobx';\nimport environment from 'app/js/environment';\nimport configuration from 'app/js/config/configuration';\nimport featureFlags from 'app/js/config/featureFlags';\n\nconst PROJECTS_OVERRIDES_KEYS = [\n    'DL_TEAM_LIBRARY_PROMOTE_TITLE',\n    'DL_PANEL_TEAM_LIBRARY_ONBOARDING_DESCRIPTION1',\n    'DL_PANEL_TEAM_LIBRARY_ONBOARDING_DESCRIPTION1',\n    'DL_PANEL_TEAM_LIBRARY_ONBOARDING_TITLE2',\n    'DL_PANEL_TEAM_LIBRARY_ONBOARDING_DESCRIPTION2',\n    'DL_TEAM_LIBRARY_ONBOARDING_HEADING',\n    'DL_TEAM_LIBRARY_ONBOARDING_FIRST_MESSAGE',\n    'DL_TEAM_LIBRARY_ONBOARDING_SECOND_MESSAGE',\n    'DL_EXPORT_BROWSE_DEFAULT',\n    'DL_INFO_TEAM',\n    'DL_PERMISSION_TITLE',\n    'DL_PROMOTE_TEAM_MESSAGE',\n    'DL_EXISTING_USER_PANEL_ONBOARDING_DESCRIPTION1',\n    'DL_EXISTING_USER_PANEL_ONBOARDING_TITLE2',\n    'DL_EXISTING_USER_PANEL_ONBOARDING_DESCRIPTION2',\n    'DL_TEAM_LIBRARY_ONBOARDING_THIRD_MESSAGE',\n    'DL_TEAM_LIBRARY_PROMOTE_TITLE',\n    'DL_TEAM_LIBRARY_HELP',\n    'DL_PROMOTE_TEAM_MESSAGE',\n    'DL_TEAM_LIBRARY_ONBOARDING_THIRD_MESSAGE',\n    'DL_TEAM_LIBRARY_MOVING_TOAST',\n    'DL_TEAM_LIBRARY_SAVED_TOAST',\n    'DL_LIBRARY_LIST_FILTER_TEAM',\n    'DL_TEAM_LIBRARIES_CREATE_DIALOG_DESCRIPTION'\n];\nconst PROJECTS_SUFFIX = '_PROJECTS';\n\nconst PROJECTS_OVERRIDES = PROJECTS_OVERRIDES_KEYS.reduce((obj, key) => {\n    obj[key] = `${key}${PROJECTS_SUFFIX}`;\n    return obj;\n}, {});\n\n/**\n * Manager for translating strings\n */\nexport class TranslationManager {\n\n    @observable.ref _stringMap = {};\n    @observable.ref __testStringMap;\n\n    _formatters = {};\n\n    get _testStringMap() {\n        if (!this.__testStringMap) {\n            // Load the test strings lazily, so they're not in memory unless we need them.\n            this.__testStringMap = {};\n            environment.fetchResourceBundle(configuration.TEST_LOCALE).then(strings => {\n                this.__testStringMap = strings;\n            });\n        }\n        return this.__testStringMap;\n    }\n\n    /**\n     * Set the map from keys to localized strings (which may contain parameters for interpolation).\n     * This should be called when the panel initializes, passing in the CEP resource bundle. It can\n     * also be called dynamically, to switch the language at runtime.\n     *\n     * @param {Object} stringMap\n     */\n    setStringMap(stringMap) {\n        this._stringMap = stringMap;\n        this._formatters = {};\n    }\n\n    /**\n     * Translate the string provided, interpolating any parameters, and return a translated string.\n     *\n     * @param {string} key\n     * @param {Object} [params]\n     * @returns {string} the translated string\n     */\n    translate(key, params) {\n        const translationOverrides = configuration.currentProduct?.config.translationOverrides;\n        if (translationOverrides && translationOverrides[key]) {\n            key = translationOverrides[key];\n        }\n\n        // Override certain strings for projects rebrand\n        if (featureFlags.get('enableProjects') && PROJECTS_OVERRIDES[key]) {\n            if (this._stringMap[key + PROJECTS_SUFFIX]) {\n                key = key + PROJECTS_SUFFIX;\n            }\n        }\n\n        const debug = featureFlags.get('localeDebug');\n        let translated;\n        if (debug === 'test') {\n            translated = this._testStringMap[key];\n        } else if (debug !== 'keys') {\n            translated = this._stringMap[key];\n        }\n        translated = translated || key;\n\n        if (params) {\n            Object.keys(params).forEach(key => {\n                let value = params[key];\n                const regex = new RegExp('[{]{2}' + key + '[}]{2}', 'g');\n                value = typeof value === 'number' ? this.getLocalizedNumber(value) : value;\n                translated = translated.replace(regex, value);\n            });\n        }\n        return translated;\n    }\n\n    /**\n     * Returns a locale string (e.g. '8/4/20, 8:54 PM')\n     * @param {number} dateTime\n     * @param {boolean} dateOnly - true if you only want the date string\n     * @returns {string}\n     */\n    getLocalizedDate(dateTime, dateOnly) {\n        const date = new Date(dateTime);\n        const options = { dateStyle: 'short' };\n        if (!dateOnly) { options.timeStyle = 'short'; }\n        // Cache the formatter, since creating it is expensive.\n        this._formatters.date = this._formatters.date || new Intl.DateTimeFormat(environment.getLocale(), options);\n        return isNaN(date.valueOf()) ? '' : this._formatters.date.format(date);\n    }\n\n    /**\n     * Returns a localized number string (e.g. '10,000')\n     * @param {number} number\n     * @returns {string}\n     */\n    getLocalizedNumber(number) {\n        // Cache the formatter, since creating it is expensive.\n        this._formatters.number = this._formatters.number || new Intl.NumberFormat(environment.getLocale());\n        return this._formatters.number.format(number);\n    }\n}\n\nconst translationManager = new TranslationManager();\n\nexport default translationManager;\n\n// Shorthand for accessing `translate`, so you can do\n// `import { translate } from 'app/js/managers/translationManager';`\nexport function translate(key, params) {\n    return translationManager.translate(key, params);\n}\n\nexport function getLocalizedDate(dateTime, dateOnly) {\n    return translationManager.getLocalizedDate(dateTime, dateOnly);\n}\n\nexport function getLocalizedNumber(number) {\n    return translationManager.getLocalizedNumber(number);\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { observable } from 'mobx';\nimport environment from 'app/js/environment';\n\n/**\n * Normally, we use the CC Library process to watch the system fonts, and products don't need to add any\n * specific logic for detecting what fonts are installed on the system.\n *\n * However, Adobe Apps often pull additional fonts that are not installed as system fonts, and so they\n * need to be able to override this. In addition, InDesign supports document fonts - these are fonts\n * that are associated with a specific document, and only usable inside that document.\n *\n * If a product has their own mechanism for detecting fonts, they can add the following to their configuration:\n *\n * `this.fontManager = new ApplicationFontManager()`\n *\n * This assumes that they implement `execApp('isFontAvailable')`, to determine whether a font is available.\n * They also need to call `fontManager.invalidateFontList()` when the fonts change.\n */\nexport default class ApplicationFontManager {\n\n    _fontAvailableMap = observable.map();\n    _pendingPromises = {};\n\n    /**\n     * Checks if a font is a available on the local machine - this is synchronous and returns immediately.\n     * If we don't know whether the font is available, we'll return true, and kick off a query to the product.\n     * This is bindable in MobX, so the view will update when the data comes back.\n     * @param {Object} style\n     * @returns {boolean}\n     */\n    isFontAvailable(style) {\n        const key = style.fontFamily + ':' + JSON.stringify(style.adbeFont);\n        const isAvailable = this._fontAvailableMap.get(key);\n\n        if (isAvailable === undefined && !this._pendingPromises[key]) {\n            this._pendingPromises[key] = environment.isFontAvailable(style).then(isAvailable => {\n                delete this._pendingPromises[key];\n                this._fontAvailableMap.set(key, isAvailable);\n            });\n        }\n        return isAvailable;\n    }\n\n    /**\n     *  Products should call this when they know the font data in the product changed\n     */\n    invalidateFontList() {\n        this._fontAvailableMap.clear();\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/*global PLUGIN_VERSION */\n\nimport environment from 'app/js/environment';\nimport * as FileUtils from 'app/js/utils/fileUtils';\n\nexport class VersionManager {\n    pluginVersion = null;\n\n    getPluginVersion() {\n        if (!this.pluginVersion) {\n            try {\n                const manifestPath = environment.getPluginPath() + '/CSXS/manifest.xml';\n                const strManifest = FileUtils.readFile(manifestPath, 'utf8');\n\n                const xmlParser = new DOMParser();\n                const manifestXml = xmlParser.parseFromString(strManifest, 'text/xml');\n                const rootNode = manifestXml.getElementsByTagName('ExtensionManifest')[0];\n\n                this.pluginVersion = rootNode && rootNode.getAttribute('ExtensionBundleVersion');\n\n            } catch (err) {\n                // We can't read the manifest file, e.g. we're in the built standalone panel, where it doesn't exist.\n                // Instead, we use the global window.version, if there is one.\n                // Note: PLUGIN_VERSION is an undefined global variable - it gets replaced by the build script\n                // If not present (Built without minification), we define this to unknown\n                try {\n                    this.pluginVersion = PLUGIN_VERSION;\n                } catch (e) {\n                    this.pluginVersion = 'UNKNOWN';\n                }\n            }\n        }\n\n        return this.pluginVersion;\n    }\n\n    getUserAgent() {\n        return `CCLibrariesPanel/${this.getPluginVersion()}`;\n    }\n}\n\nexport default new VersionManager();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport libraryManager from 'app/js/managers/libraryManager';\nimport environment from 'app/js/environment';\nimport toastManager from 'app/js/managers/toastManager';\nimport { translate } from 'app/js/managers/translationManager';\n\nexport const VULCAN_APP_READY = 'desktop.interop.AppReady';\nexport const VULCAN_DATA_IMPORT_RESOURCE = 'vulcan.SuiteMessage.desktop.interop.ImportResource';\nconst VULCAN_APP_REQUEST_READY_INTERVAL = 1000;\nconst VULCAN_APP_READY_TIMEOUT = 30000;\nconst VULCAN_APP_READY_REQUEST = 'desktop.interop.AppReadyRequest';\nconst MAX_ELEMENT_SEND_LIMIT = 10;\n// TODO process this according to app after analysis which needs to be removed and which needs to be left intact\n// For Sampler all need to be done, for painter, need to check https://jira.corp.adobe.com/browse/CCXC-16746\nconst extensions = [ 'sbsar', 'exr', 'obj', 'fbx', 'usdz' ];\n\n/**\n * Lists all the apps that will be eligible for an 'open in' option\n * Right now, just 3D Sampler and Painter\n */\nexport const openInEligibleApps = {\n    'SBSTA': {\n        appId: 'SBSTA',\n        label: 'Substance 3D Sampler',\n        install: {\n            label: 'Substance 3D Sampler',\n            route: '/apps/all/desktop/pdp/SBSTA'\n        }\n    },\n    'SBSTP': {\n        appId: 'SBSTP',\n        label: 'Substance 3D Painter',\n        install: {\n            label: 'Substance 3D Painter',\n            route: '/apps/all/desktop/pdp/SBSTP'\n        }\n    }\n};\n\n/**\n * Following types will have no 'Open in app' option and thus are not a part of this list\n * Material:\n * application/vnd.adobe.pbr.material+dcx\n * Light:\n * application/vnd.adobe.ibl.light+zip\n * 3D Models:\n * image/vnd.adobe.photoshop\n * Stager, Designer, Modeler to be introduced in a similar way\n */\nconst supportedAppsByMimetype = {\n    //Materials\n    'application/vnd.adobe.mdl.material+zip' : [],\n    // Lights\n    'application/vnd.adobe.sbsar+zip': [ 'SBSTA', 'SBSTP' ],\n    'application/vnd.adobe.exr.light+zip': [ 'SBSTA', 'SBSTP' ],\n    // 3D Models\n    'application/vnd.adobe.obj.3d+zip': [ 'SBSTA', 'SBSTP' ],\n    '3d/vnd.adobe.dn+dcxucf': [ 'SBSTP' ],\n    'model/gltf-binary': [ 'SBSTP' ],\n    'model/gltf+json': [ 'SBSTP' ],\n    'model/vnd.usdz+zip': [ 'SBSTP' ],\n    'application/vnd.adobe.fbx.3d+zip': [ 'SBSTP' ],\n    // Graphics\n    'application/photoshop.large': [ 'SBSTA', 'SBSTP' ],\n    'image/svg+xml': [ 'SBSTP' ]\n};\n\nexport const getInstallAppLabel = (name) => {\n    return translate('DL_OPEN_IN_APP_GET_APP', { name });\n};\n\n/**\n * @param {Object} element the element to be sent to substance 3d apps\n * @param {string} appId appId - as of now SBSTA/SBSTP\n * This dispatches a message to relevant app with info about the element.\n * This has been tested only on Sampler and Painter\n */\nexport function sendToSubstance3DApp(element, appId) {\n    if (!element || !appId) {\n        return;\n    }\n    const representation = element.getPrimaryRepresentation();\n    return representation.getContentPath().then(path => {\n        const nameWithExtension = path.split('/').pop();\n        let name = nameWithExtension;\n        extensions.forEach(extension => name = name.match(`\\\\.${extension}`) ? name.split(`.${extension}`)[0] : name);\n        const message = {\n            name,\n            path,\n            'take_file_ownership': false\n        };\n        const payload = {\n            type: 'desktop.interop.ImportResource',\n            appId,\n            data: JSON.stringify(message)\n        };\n        environment.vulcanInterface.sendMessage(payload.type, payload.data, payload.appId);\n    });\n}\n\nexport async function checkAppIsRunningOrLaunch(vulcan, appId) {\n    return vulcan.isAppRunningEx(appId).then(running => {\n        if (!running) {\n            return vulcan.launchAppEx(appId);\n        }\n        return '1'; //app already running;\n    }).then(result => {\n        if (result !== '1') {\n            throw new Error('Failed to launch');\n        }\n    });\n}\n\nexport function checkAppIsReady(vulcan, appId) {\n    let appReadyTimeout, appReadyRequestInterval, appReadyCallback;\n    return new Promise((resolve, reject) => {\n        // resolve when we receive an APP_READY\n        appReadyCallback = function(data) {\n            if (data && data.indexOf(VULCAN_DATA_IMPORT_RESOURCE) >= 0) {\n                resolve();\n            }\n        };\n\n        // listen for APP_READY\n        vulcan.addMessageListener(VULCAN_APP_READY, appReadyCallback);\n\n        const payload = {\n            type: VULCAN_APP_READY_REQUEST,\n            appId,\n            data: VULCAN_DATA_IMPORT_RESOURCE,\n        };\n        // periodically ask if ready via APP_READY_REQUEST\n        appReadyRequestInterval = setInterval(() => {\n            vulcan.sendMessage(payload.type, payload.data, payload.appId);\n        }, VULCAN_APP_REQUEST_READY_INTERVAL);\n\n        // fail if we don't get the APP_READY message in 30 seconds\n        appReadyTimeout = setTimeout(() => {\n            reject();\n        }, VULCAN_APP_READY_TIMEOUT);\n\n    }).finally(() => {\n        // cleanup all stateful things\n        clearTimeout(appReadyTimeout);\n        clearInterval(appReadyRequestInterval);\n        vulcan.removeMessageListener(VULCAN_APP_READY, appReadyCallback);\n    });\n}\n\n/**\n * @param {Array} elements\n * @returns {Object} menuItem\n * If all elements selected have an app they can be opened in, the common apps enabled\n * and the different ones disabled would be the result\n * returns the menu item for open in app which expands to list the apps for open in\n */\nexport function getOpenInThreeDAppMenuItem(elements) {\n    const menuItems = [];\n    const eligibleApps = new Map();\n\n    const eligibleTypes = Object.keys(supportedAppsByMimetype);\n\n    for (const e of elements) {\n        const actualType = e.getPrimaryRepresentation().type || '';\n        if (!eligibleTypes.includes(actualType)) {\n            // If this is a non 3d element or a 3d element that is not to have 'Open in option'(Refer to comment above map)\n            return;\n        }\n        const apps = supportedAppsByMimetype[actualType];\n        if (apps.length > 0) {\n            apps.forEach(app => {\n                const currentCount = eligibleApps.get(app) || 0; // if the app is not already present in the set, this will result in adding appId,1\n                eligibleApps.set(app, currentCount + 1);\n            });\n        }\n    }\n\n    eligibleApps.forEach((count, appId) => {\n        const appInfo = openInEligibleApps[appId];\n        const enableMenu = count === elements.length; // all apps made an entry in the map for this appId, so all elements are supported by this appId\n\n        if (libraryManager.getInstalledVersion(appId)) {\n            menuItems.push({\n                label: appInfo.label,\n                enableMenu,\n                onClick: async () => {\n                    if (elements.length > MAX_ELEMENT_SEND_LIMIT) {\n                        toastManager.openToast('message', { message: translate('DL_OPEN_IN_APP_THREE_D_LIMIT_MESSAGE', { maxItemLimit: MAX_ELEMENT_SEND_LIMIT }), variant: 'info' });\n                    } else {\n                        try {\n                            await checkAppIsRunningOrLaunch(environment.vulcanInterface, appId);\n                            await checkAppIsReady(environment.vulcanInterface, appId);\n                            if (Object.values(openInEligibleApps).find(app => app.appId === appId)) {\n                                //supported 3d apps\n                                elements.forEach(e => { sendToSubstance3DApp(e, appId); });\n                            }\n                        } catch (e) {\n                            toastManager.openToast('message', { message: translate('DL_THREE_D_APP_LAUNCH_FAILURE_TITLE', { name: appInfo.label }), variant: 'info' });\n                        }\n                    }\n                }\n            });\n        } else {\n            const installLabel = getInstallAppLabel(appInfo.install.label);\n            menuItems.push({\n                label: installLabel,\n                enableMenu,\n                onClick: () => {\n                    libraryManager.openInCCD(appInfo.install.route); // Go to app page\n                }\n            });\n        }\n    });\n\n    if (menuItems.length) {\n        return ({\n            label: translate('DL_OPEN_IN_APP_MENU_ITEM'),\n            displayInMenu: true,\n            menuItems\n        });\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport sanitize from 'sanitize-filename';\nimport configuration from 'app/js/config/configuration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport menuManager from 'app/js/managers/menuManager';\nimport dialogManager from 'app/js/managers/dialogManager';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport metrics from 'app/js/interface/metrics';\nimport librarySizeManager from 'app/js/managers/librarySizeManager';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport viewState from 'app/js/state/viewState';\nimport debugLog from 'app/js/utils/debugLog';\nimport { addElementsToGroup, copyOrMoveElements, getRepresentationExtension,\n    isOwnedLibrary } from 'app/js/utils/libraryUtils';\nimport { pushMenuGroup } from 'app/js/utils/menuUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport localizedSorter from 'app/js/utils/localizedSorter';\nimport toastManager from 'app/js/managers/toastManager';\nimport environment from 'app/js/environment';\nimport * as LinkUtils from 'app/js/utils/linkUtils';\nimport { replaceElementFromFile } from 'app/js/utils/addElementUtils';\nimport { fileNameToExtension, getFilesUsingHTMLFileDialog } from 'app/js/utils/fileUtils';\nimport { areValidDescendants } from '../utils/groupUtils';\nimport { getOpenInThreeDAppMenuItem } from '../utils/openInAppUtils';\nimport appState from 'app/js/appState';\nimport featureFlags from 'app/js/config/featureFlags';\nimport operationalMetrics from 'app/js/interface/operationalMetrics';\n\n/**\n * Structure of an Element Context Menu Item:\n *\n * {\n *      label: string, *required\n *      translationData: [Object],\n *      enableMenu: [bool], // control whether a menu item is visible but disabled\n *      checked: [bool],\n *      menuItems: [Array], // submenu items (no need for onClick)\n *      onClick: [fn],\n *      id: string // optional\n * }\n *\n * Note that formatting properties may be added on separately through the menu utils (icon, style, divider),\n * and a MenuId is added in MenuManager.\n **/\n\nfunction isLibraryWritable(library, allowDocumentLibraries) {\n    // want to allow write operations to be available in libraries and stock search mode because they are not current library views.\n    const allowUnloadedLibraryWrite = viewState.isLibrariesSearchMode() || viewState.isStockSearchMode();\n    return viewState.isLibraryWritable(library, allowDocumentLibraries, allowUnloadedLibraryWrite);\n}\n\nfunction getStockMenuItems(element) {\n    const menuItems = [];\n    const isAudio = element.type === configuration.AUDIO_ELEMENT_TYPE;\n    const canDisplayStockMenuItems = !libraryManager.isRestrictedAccount;\n\n    // License stock element\n    if (canDisplayStockMenuItems && AdobeStockUtils.isStockAsset(element) && !AdobeStockUtils.isLicensed(element)) {\n        menuItems.push({\n            label: 'DL_STOCK_LICENSE_MENU' + AdobeStockUtils.getLocalizationSuffix(element),\n            id: 'licenseImage',\n            onClick: () => {\n                metrics.reportStockEvent('License', 'click', 'start', { ui: { sequence: 'context-menu' } }, element);\n\n                if (!AdobeStockUtils.canShowLicenseDialog()) {\n                    LinkUtils.launchStockAssetURL(AdobeStockUtils.getStockId(element), element.type);\n                    return;\n                }\n\n                AdobeStockUtils.showLicenseDialog(element).then(() => {\n                    metrics.reportStockEvent('License', 'render', 'success', { ui: { sequence: 'context-menu' } }, element);\n                }).catch(() => {\n                    metrics.reportStockEvent('License', 'render', 'error', { ui: { sequence: 'context-menu' } }, element);\n                });\n            },\n        });\n    }\n\n    // Find similar\n    if (!configuration.currentProduct.config.disableStockSearch && !configuration.currentProduct.config.disableFindSimilar && elementConfiguration.canFindSimilar(element)\n        && canDisplayStockMenuItems && !isAudio) {\n        menuItems.push({\n            label: 'DL_STOCK_FIND_SIMILAR_MENU',\n            onClick: async () => {\n                // Find similar based on stock id (stock elements)\n                if (AdobeStockUtils.isStockAsset(element)) {\n                    metrics.reportStockEvent('Find Similar', 'click', 'find', { ui: { sequence: 'context-menu' } }, element);\n                    viewState.setFindSimilarSearchMode(AdobeStockUtils.getStockId(element));\n                    return;\n                }\n\n                // Find visually-similar (for images)\n                const getThumbnailUrl = async () => {\n                    try {\n                        let thumbnailUrl = await element.getAuthenticatedThumbnailURL(configuration.STOCK_SIMILARITY_THUMBNAIL_SIZE);\n                        if (thumbnailUrl) {\n                            // Platform URLs may already have a parameter included in the url\n                            thumbnailUrl += `${thumbnailUrl.includes('?') ? '&' : '?'}accept=image/jpeg`;\n                        }\n                        return thumbnailUrl;\n                    // If there is no available thumbnailUrl, then continue on without it\n                    } catch (err) { return; }\n                };\n\n                const thumbnailUrl = await getThumbnailUrl();\n                const thumbnailPath = await element.getThumbnailPath(configuration.IMAGE_THUMBNAIL_SIZE);\n                viewState.setFindSimilarSearchMode(undefined, thumbnailUrl, thumbnailPath);\n            },\n            enableMenu: true\n        });\n    }\n\n    return menuItems;\n}\n\nfunction getTypekitMenuItems(element) {\n    const shortType = elementConfiguration.getShortType(element.type);\n    const representation = elementConfiguration.findUsableRepresentation(element, `application/vnd.adobe.${shortType}+json`);\n    const styleData = representation && representation.getValue(shortType, 'data');\n    const style = styleData?.adbeFont ? styleData : { adbeFont : styleData };\n    const fontName = style?.adbeFont?.postScriptName;\n\n    if (!styleData || !fontName) {\n        return [];\n    }\n    const typekitFont = libraryManager.getTypekitFontData(fontName);\n    const isFontAvailable = libraryManager.isFontAvailable(style);\n\n    if (!typekitFont || !typekitFont.fontId || !typekitFont.fontActions) {\n        return [];\n    }\n\n    if (isFontAvailable) {\n        if (typekitFont.fontActions.length === 0) {\n            return [ {\n                label: 'DL_TYPEKIT_UNSYNC_TOOLTIP',\n                id: 'disableFont',\n                onClick: () => typekitFont.unsync(style, 'context', element)\n            } ];\n        }\n        return [];\n    }\n\n    if (typekitFont.fontActions.length === 0) {\n        return [ {\n            label: 'DL_TYPEKIT_SYNC_TOOLTIP',\n            id: 'activateFont',\n            onClick: () => typekitFont.sync(style, 'context', element)\n        } ];\n    }\n\n    return [\n        typekitFont.fontActions.includes('upgrade') && {\n            label: 'DL_TYPEKIT_UPGRADE_TOOLTIP',\n            id: 'subscribeToActivateFont',\n            onClick: () => typekitFont.upgrade('context', element)\n        }\n    ];\n}\n\nfunction getContentMenuItems(element, subElement) {\n    // Apply operations\n    const applyOperations = elementConfiguration.getApplyOperations(element, subElement);\n    let menuItems = applyOperations\n        .filter(op => op.displayInMenu)\n        .map(op => ({\n            label: op.name,\n            id: 'applyColor', // different id for each element type?\n            onClick: () => {\n                metrics.setExtraEventMetrics('reportUseElement', { isRightClick: true });\n                op.apply();\n            }\n        }));\n\n    // Edit operations\n    const editOperations = elementConfiguration.getEditOperations(element);\n    if (isLibraryWritable(element.library, true)) {\n        menuItems = menuItems.concat(editOperations.map(op => (!op.disabled && {\n            label: op.name,\n            id: 'edit',\n            onClick: () => {\n                op.apply();\n            }\n        })));\n    }\n\n    return menuItems;\n}\n\nfunction doExportPrimaryRepresentation(element) {\n    if (environment.supportsExportElement) {\n        const delimiter = environment.isWindowsOS() ? '\\\\' : '/';\n        environment.getSavePath().then(([ destinationPath ]) => {\n            if (!destinationPath) {\n                // Cancel button was pressed\n                return;\n            }\n\n            const representation = elementConfiguration.getRepresentationForExport(element);\n            const ext = getRepresentationExtension(representation);\n\n            const elementName = sanitize(element.name).replace(/^\\./, '') || 'Untitled';\n            const fullDestinationPath = `${destinationPath}${delimiter}${elementName}.${ext}`;\n\n            if (representation) {\n                representation.getContentPath().then((sourcePath) => {\n                    return libraryManager.copyFile(sourcePath, fullDestinationPath).then(() => {\n                        toastManager.openToast('message', { message: translate('DL_ELEMENT_EXPORTED'), variant: 'success' });\n                    }).catch(err => {\n                        debugLog.log(`Failed to export element: ${err}`);\n                        toastManager.openToast('message', { message: translate('DL_ELEMENT_EXPORT_FAILED'), variant: 'error' });\n                    });\n                });\n            } else {\n                toastManager.openToast('message', { message: translate('DL_ELEMENT_EXPORT_FAILED'), variant: 'error' });\n            }\n        });\n    }\n}\n\nfunction getSingleElementMenuItems(element, subElement) {\n    const menuItems = [];\n\n    if (viewState.isLibrariesSearchMode() || (viewState.isOneUpMode() && viewState.getState().modeParams.previousMode === 'search')) {\n        pushMenuGroup(menuItems, [ {\n            label: 'DL_REVEAL_ITEM',\n            id: 'reveal',\n            onClick: () => elementSelectionState.revealElement(element)\n        } ]);\n    }\n\n    // Stock-related menu items\n    pushMenuGroup(menuItems, getStockMenuItems(element));\n\n    // Typekit-related menu items if supported element\n    if (!elementConfiguration.isDisabled(element)) {\n        pushMenuGroup(menuItems, getTypekitMenuItems(element));\n    }\n\n    // Content-based menu items (applying and editing)\n    pushMenuGroup(menuItems, getContentMenuItems(element, subElement));\n\n    // Replace graphic\n    const replaceableExtensions = configuration.currentProduct.config.enableReplaceGraphic\n        && isLibraryWritable(element.library)\n        && elementConfiguration.getReplaceableExtensions(element) || [];\n\n    if (replaceableExtensions.length) {\n        const isLogo = element.roles?.some(role => role.usage === configuration.ROLE_LOGO);\n        const strings = {\n            'logo': {\n                success: translate('DL_REPLACE_LOGO_SUCCESS'),\n                error: translate('DL_REPLACE_LOGO_ERROR'),\n                replaceTypeError: translate('DL_FILE_REPLACE_LOGO_UNSUPPORTED')\n            },\n            'graphic': {\n                success: translate('DL_REPLACE_GRAPHIC_SUCCESS'),\n                error: translate('DL_REPLACE_GRAPHIC_ERROR'),\n                replaceTypeError: translate('DL_FILE_REPLACE_GRAPHIC_UNSUPPORTED')\n            }\n        };\n        menuItems.push({\n            label: isLogo ? translate('DL_REPLACE_LOGO') : translate('DL_REPLACE_GRAPHIC'),\n            id: 'replace',\n            enableMenu: true,\n            onClick: () => doReplaceGraphic(element, replaceableExtensions, strings[isLogo ? 'logo' : 'graphic'])\n        });\n    }\n\n    // App-specific menu items.\n    // Some apps, like XD, pass us custom menu data on each document element model.\n    if (element.additionalMenuItems) {\n        menuItems.push(...element.additionalMenuItems);\n    }\n    // Otherwise, app specific element menu items can be found in the config.\n    const additionalMenuItems = configuration.currentProduct.getAdditionalMenuItems?.(element);\n    if (additionalMenuItems) {\n        pushMenuGroup(menuItems, additionalMenuItems);\n    }\n\n    // Disable notes for document assets.\n    if (environment.supportsNotes && !element.library.isDocumentAssets && isLibraryWritable(element.library)) {\n        // Add Note, Edit Note and Delete Note operations\n        const onNoteOperationClick = (opType, element) => {\n            operationalMetrics.sendUpdateElementEvent(element);\n            metrics.setExtraEventMetrics('updateElementMetadata', {\n                subtype: `${opType}-note`,\n                content: { category: 'Right Click' }\n            });\n            if (opType === 'delete') {\n                toastManager.openToast('undoDeleteDescription', { element, description: element.description });\n                element.description = '';\n                return;\n            }\n            if (viewState.isOneUpMode()) {\n                appState.panel.viewManager.startEditDescription(element);\n            } else {\n                dialogManager.openDialog('addNote', { element });\n            }\n        };\n\n        pushMenuGroup(menuItems, [\n            !element.description && {\n                label: 'DL_ADD_NOTE',\n                onClick: () => onNoteOperationClick('add', element),\n                id: 'addDescription'\n            },\n            element.description && {\n                label: 'DL_EDIT_NOTE',\n                onClick: () => onNoteOperationClick('edit', element),\n                id: 'editDescription'\n            },\n            element.description && {\n                label: 'DL_DELETE_NOTE',\n                onClick: () => onNoteOperationClick('delete', element),\n                id: 'deleteDescription',\n            }\n        ]);\n    }\n\n    if (!configuration.currentProduct.config.readOnlyPanelUI && environment.supportsExportElement && configuration.EXPORTABLE_ELEMENT_TYPES.includes(element.type)) {\n        // There is a possibility assets (Unlicensed Stock) do not have a usable rendition. This is a bug.\n        // If that's the case, we want to disable the export button.\n        const primary = element.getPrimaryRepresentation();\n        const representation = primary && elementConfiguration.getRepresentationForExport(element);\n        if (representation) {\n            pushMenuGroup(menuItems, [\n                {\n                    label: 'DL_EXPORT_A_COPY',\n                    enableMenu: !elementConfiguration.isDownloadInProgress(element),\n                    onClick: () => {\n                        metrics.reportElementEvent('Element Operations', 'Element', 'click', 'export', element);\n                        doExportPrimaryRepresentation(element);\n                    }\n                },\n            ]);\n        }\n    }\n\n    const showGetInfo = !configuration.currentProduct.config.disableOneUpMode && !element.library.isDocumentAssets\n        && !viewState.isOneUpMode() && !configuration.currentProduct.isExpandedView?.();\n    pushMenuGroup(menuItems, [ showGetInfo && {\n        label: 'DL_GET_INFO',\n        id: 'details',\n        onClick: () => viewState.setOneUpMode(element)\n    } ]);\n\n    return menuItems;\n}\n\nfunction getMultiElementMenuItems(elements) {\n    // Some apply operations support multi-apply\n    const multiApplyOperations = elementConfiguration.getMultiApplyOperations(elements);\n    return multiApplyOperations\n        .filter(op => op.displayInMenu)\n        .map(op => ({\n            label: op.name,\n            onClick: () => {\n                // TODO: No analytics?\n                op.apply();\n            }\n        }));\n}\n\nexport function doCopyOrMoveElements(isMove, elements, targetLibrary, targetGroup, preserveGroups) {\n    // Note: For the current release, elements are move to \"ungrouped\" when we copy/move them to a different library unless a target group is specified.\n    // However, when duplicating, we always preserve the groups!\n    const isDuplicate = targetLibrary === elements[0].library && targetGroup === elements[0].getGroups()[0];\n\n    // Don't do anything if you're moving an element to the same group it is already in;\n    if (isMove && isDuplicate) {\n        return;\n    }\n\n    // If many elements copied/moved, show a toast to say they are being moved.\n    if (elements.length > configuration.SLOW_COPY_MOVE_THRESHOLD) {\n        const copyString = isDuplicate ? 'DL_DUPLICATING_ITEMS' : 'DL_COPYING_ITEMS';\n        const message = translate((isMove ? 'DL_MOVING_ITEMS' : copyString), {\n            numberElements: elements.length,\n            libraryName: targetLibrary.name\n        });\n        toastManager.openToast('message', { message });\n    }\n\n    function reportOperationalEvent(elements) {\n        elements.forEach(element => {\n            if (isDuplicate) {\n                operationalMetrics.sendDuplicateElementEvent(element);\n            } else {\n                if (isMove) {\n                    operationalMetrics.sendMoveElementEvent(element);\n                } else {\n                    operationalMetrics.sendCopyElementEvent(element);\n                }\n            }\n        });\n    }\n\n    copyOrMoveElements(isMove, elements, targetLibrary, targetGroup, isDuplicate || preserveGroups).then(newElements => {\n        reportOperationalEvent(elements);\n\n        if (newElements.length && (viewState.isSearchMode() || isDuplicate)) {\n            // Change the selection to the new elements, if we're duplicating them\n            // (newly created elements get the selection)\n            elementSelectionState.setSelection(newElements);\n        } else if (isMove && !viewState.isLibrariesSearchMode()) {\n            // If it's a move and not in search, it must be to a different library, so the elements were deleted.\n            // We need to clear the selection (same as for the delete action).\n            elementSelectionState.clearSelection(elements);\n            if (configuration.currentProduct.config.showElementActionToasts) {\n                const message = elements.length > 1 ? translate('DL_MOVE_SUCCESS_TOAST_PLURAL', { libraryName: targetLibrary.name, num: elements.length }) : translate('DL_MOVE_SUCCESS_TOAST', { libraryName: targetLibrary.name });\n                appState.panel.toastManager.openToast('message', { message, variant: 'success' });\n            }\n        }\n\n        if (isDuplicate) {\n            // Report the aggregate analytics event. (Which will be followed by per-element API analytics events.)\n            const groupType = targetGroup ? 'existing-group' : (preserveGroups ? 'preserve-group' : 'ungrouped');\n            metrics.reportEvent('Add Assets', 'Element', 'click', 'add', {\n                event: { value: 'agg', count: newElements.length },\n                content: {\n                    category: 'Duplicate',\n                    status: groupType\n                }\n            }, libraryManager.currentLibrary);\n            metrics.setExtraEventMetrics('copyElement', { content: { category: 'Duplicate' } });\n            if (configuration.currentProduct.config.showElementActionToasts) {\n                toastManager.openToast('message', { message: translate('DL_DUPLICATE_SUCCESS_TOAST'), variant: 'success' });\n            }\n        }\n    }).catch((error) => {\n        // Note: Can adjust the error type and description as you see fit here.\n        if (!isMove) {\n            metrics.clearExtraEventMetrics('copyElement');\n            metrics.reportError('Add Assets', 'Element', error && error.description, 'context-menu', 'copy-elements-error', undefined, libraryManager.currentLibrary);\n        } else {\n            metrics.reportError('Element Operations', 'Element', error && error.description, 'context-menu', 'move-elements-error', {\n                content: { category: 'Right Click' }\n            }, libraryManager.currentLibrary);\n        }\n    });\n}\n\nfunction doReplaceGraphic(element, fileTypes, strings) {\n    return getFilesUsingHTMLFileDialog({ multiple: false, fileTypes })\n        .then(\n            files => {\n                const extOfSelected = fileNameToExtension(files[0].name);\n                const containsExpectedFileType = !!fileTypes.find(x => x === extOfSelected);\n                if (!containsExpectedFileType) {\n                    return environment.showError(strings.replaceTypeError);\n                }\n                return replaceElementFromFile(files[0], element, translate(strings.success));\n            },\n            () => {\n                metrics.reportEvent('Replace Graphic', 'Element', 'click', 'replace-cancel');\n            }\n        )\n        .catch(() => environment.showError(translate(strings.error)));\n}\n\nfunction getAssetLinkingMenuItems(elements) {\n    const allLinked = elements.every(element => element.isLinked);\n    if (!allLinked) { return []; }\n\n    const menuItems = [];\n\n    const libraryLinks = [];\n    const documentLinks = [];\n    const notRelinkable = [];\n\n    elements.forEach(element => {\n        if (element.canRelinkToLibrary) {\n            libraryLinks.push(element);\n        } else if (element.canRelinkToDocument) {\n            documentLinks.push(element);\n        } else {\n            notRelinkable.push(element);\n        }\n    });\n\n    const allRelinkable = !notRelinkable.length;\n    // Can only relink either library links or document links in a single operation.\n    const singleTypeSelection = !(libraryLinks.length && documentLinks.length);\n    // Can only relink one library link at a time.\n    const validLibraryRelinkSelection = !libraryLinks.length || libraryLinks.length === 1;\n\n    const canRelink = allRelinkable && singleTypeSelection && validLibraryRelinkSelection;\n    const relink = elements => {\n        if (elements[0].canRelinkToLibrary) {\n            return appState.panel.documentActions.relinkAssetToLibrary(elements[0]);\n        }\n        return environment.relinkAssetsToDocument(elements);\n    };\n\n    if (canRelink) {\n        menuItems.push({\n            label: 'DL_RELINK_ASSET',\n            onClick: () => relink(elements)\n        });\n    }\n\n    const canUnlinkAssets = environment.canUnlinkAssets && environment.canUnlinkAssets(elements);\n    if (canUnlinkAssets) {\n        menuItems.push({\n            label: 'DL_UNLINK_ASSET',\n            onClick: () => {\n                metrics.reportEvent('Element Operations', 'element', 'click', 'make-local', { event: { value: 'agg', count: elements.length }, content: { category: 'Right Click' } });\n                elements.forEach(element => {\n                    metrics.reportElementEvent('Element Operations', 'element', 'click', 'make-local', element, { event: { value: 'single', count: 1 }, content: { category: 'Right Click' } });\n                });\n                environment.unlinkAssets(elements);\n            }\n        });\n    }\n\n    const allNeedUpdate = elements.every(element => element.isPendingUpdate);\n    if (allNeedUpdate) {\n        menuItems.unshift({\n            label: 'DL_UPDATE_ASSET',\n            onClick: () => environment.updateLinkedAssets(elements),\n        });\n    }\n    return menuItems;\n}\n\nfunction _getCopyMovePickerItems(elementsAndDependencies, elements, canCopyElements, canMoveElements) {\n    const menuItems = [];\n\n    if (\n        configuration.currentProduct.config.disableCopyMoveTo\n        || (configuration.currentProduct.config.disableCopyMoveToMobile && environment.isMobileView)\n    ) {\n        return [];\n    }\n\n    // Remove \"Copy To\" and \"Move To\" options if the elements are within a restricted group\n    if (elements[0].library.isDocumentAssets && elements.length > 1) {\n        if (elements[0].getGroups()[0] && !areValidDescendants(elements, elements[0].getGroups()[0])) {\n            return [];\n        }\n    }\n\n    const { x, y } = viewState.contextMenuPositionState;\n    if (elementsAndDependencies.length > elements.length) {\n        menuItems.push(canCopyElements && {\n            label: 'DL_COPY_ITEM_AND_DEPENDENCIES',\n            id: 'copyTo',\n            enableMenu: true,\n            onClick: () => dialogManager.openDialog('copyOrMove', { items: elementsAndDependencies, x, y, isMove: false, copyMoveAction: doCopyOrMoveElements })\n        },\n        canMoveElements && {\n            label: 'DL_MOVE_ITEM_AND_DEPENDENCIES',\n            id: 'moveTo',\n            enableMenu: true,\n            onClick: () => dialogManager.openDialog('copyOrMove', { items: elementsAndDependencies, x, y, isMove: true, copyMoveAction: doCopyOrMoveElements }),\n            icon: 'S_MoveTo_18_N',\n            hideIcon: !configuration.currentProduct.config.showLibraryActionMenuIcons,\n        });\n    } else {\n        const itemsMoveLabel = configuration.currentProduct.config.overrideMoveContextMenuText || (elements.length > 1 ? 'DL_MOVE_SELECTED_ITEMS' : 'DL_MOVE_ITEM');\n        menuItems.push(canCopyElements && {\n            label: elements.length > 1 ? 'DL_COPY_SELECTED_ITEMS' : 'DL_COPY_ITEM',\n            id: 'copyTo',\n            enableMenu: true,\n            onClick: () => {\n                elements.forEach(element => {\n                    metrics.reportElementEvent('Element Operations', 'Element', 'open', 'copy', element);\n                });\n                dialogManager.openDialog('copyOrMove', { items: elements, x, y, isMove: false, copyMoveAction: doCopyOrMoveElements });\n            }\n        },\n        canMoveElements && {\n            label: itemsMoveLabel,\n            id: 'moveTo',\n            enableMenu: true,\n            onClick: () => {\n                elements.forEach(element => {\n                    metrics.reportElementEvent('Element Operations', 'Element', 'open', 'move', element);\n                });\n                dialogManager.openDialog('copyOrMove', { items: elements, x, y, isMove: true, copyMoveAction: doCopyOrMoveElements });\n            },\n            icon: 'S_MoveTo_18_N',\n            hideIcon: !configuration.currentProduct.config.showLibraryActionMenuIcons,\n        });\n    }\n    return menuItems;\n}\n\nfunction getCopyMoveMenuItems(elements) {\n    // If all libraries are forced to be read only, we cannot copy or move an element to any other library\n    if (configuration.currentProduct.config.readOnlyPanelUI) {\n        return [];\n    }\n    const parentLibraries = {};\n    elements.forEach(element => parentLibraries[element.library.id] = element.library);\n\n    // Get an array of all the elements including any dependencies - if the elements have no dependencies,\n    // or the dependencies are all included in the array of elements, then this will be equal to elements.\n    const elementsAndDependencies = [];\n    Object.keys(parentLibraries).forEach(id => {\n        elementsAndDependencies.push(...parentLibraries[id].getElementsAndDependencies(elements));\n    });\n\n    // For document assets, we disable the copy action\n    const isDocumentAssets = elements[0].library.isDocumentAssets;\n    const canCopyElements = !isDocumentAssets;\n    const canMoveElements = elements.every(element => isLibraryWritable(element.library));\n\n    // We only allow duplicating elements if they all belong to the same library (otherwise that would be weird...)\n    // Can't duplicate document assets.\n    const canDuplicateElements = !configuration.currentProduct.config.disableDuplicateElements\n        && elements.every(element => element.library === elements[0].library)\n        && isLibraryWritable(elements[0].library)\n        && librarySizeManager.canAddElements(elements[0].library, elements.length);\n\n    const copyMoveItems = _getCopyMovePickerItems(elementsAndDependencies, elements, canCopyElements, canMoveElements);\n\n    const menuItems = [ canDuplicateElements && !isDocumentAssets && {\n        label: elements.length > 1 ? 'DL_DUPLICATE_SELECTED_ITEMS' : 'DL_DUPLICATE_ITEM',\n        id: 'duplicate',\n        enableMenu: true,\n        onClick: () => doCopyOrMoveElements(false, elements, elements[0].library, elements[0].getGroups()[0]),\n        icon: 'Duplicate',\n        hideIcon: !configuration.currentProduct.config.showLibraryActionMenuIcons,\n    }, ...copyMoveItems ];\n\n    return menuItems;\n}\n\nfunction getGroupMenuItems(elements) {\n    if (viewState.isLibrariesSearchMode() || libraryManager.disableCCLibraries || configuration.currentProduct.config.readOnlyPanelUI) {\n        // We don't support adding to groups when you're searching across all libraries, since it's\n        // too confusing. Most of the time it won't work, because you're selecting elements in different\n        // libraries, but even if they are in the same library it's confusing what happened when you\n        // create the group, since you can't see it in the search view.\n        // We also don't support grouping document assets.\n        return [];\n    }\n\n    const areAllElementsUngrouped = elements.every((element) => element.getGroups().length === 0);\n    // We don't offer \"ungroup\" for document assets, since there's no ungrouped section.\n    const canUngroup = !elements[0].library.isDocumentAssets && !areAllElementsUngrouped;\n    const groupMenuItems = [];\n    const targetGroups = [];\n\n    if (elements[0].library.isDocumentAssets) {\n        // We can check the validity of the current selection by pretending we would move all the groups to the first element's group\n        // The invalidChild check will compare if the document assets groups have drag constraints, which is equivalent with what would happen here\n        const isValid = elements.length > 1 ? areValidDescendants(elements, elements[0].getGroups()[0]) : true;\n        isValid && pushMenuGroup(groupMenuItems, [ {\n            label: elements.length > 1 ? 'DL_GROUP_TOGETHER' : 'DL_GROUP_SINGLE_ELEMENT',\n            enableMenu: true,\n            onClick: () => {\n                metrics.setExtraEventMetrics('createGroup', { content: { category: 'Right Click Element' } });\n                appState.panel.groupActions.createGroupFromSet(elements);\n            }\n        } ]);\n        return groupMenuItems;\n    }\n\n    const areAllElementsSameGroup = group => elements.every(element => element.getGroups()[0] === group);\n\n    // Now, add existing groups\n    const existingGroups = localizedSorter.sortByName(elements[0].library.getGroups()).map(group => ({\n        label: group.name,\n        enableMenu: areAllElementsUngrouped || !areAllElementsSameGroup(group),\n        checked: !areAllElementsUngrouped && areAllElementsSameGroup(group),\n        onClick: () => {\n            addElementsToGroup(elements, group);\n\n            // Create aggregate analytics event\n            metrics.reportEvent('Element Operations', 'Element', 'click', 'add-to-group', {\n                event: { value: 'agg', count: elements.length },\n                content: { category: 'Right Click' }\n            }, libraryManager.currentLibrary);\n            // Set panel info on API-derived element events.\n            metrics.setExtraEventMetrics('updateElement', { subtype: 'add-to-group', content: { category: 'Right Click' } });\n\n            elements.forEach(element => {\n                operationalMetrics.sendUpdateElementEvent(element);\n            });\n            viewState.setViewByState('group');\n            viewState.resetMode();\n        }\n    }));\n\n    // Check if library(or every library in case of ungroup) is writable\n    const isWritable = elements.every((element) => isLibraryWritable(element.library));\n\n    pushMenuGroup(targetGroups, existingGroups);\n    if (isWritable) {\n        pushMenuGroup(groupMenuItems, [\n            {\n                label: elements.length > 1 ? 'DL_GROUP_TOGETHER' : 'DL_GROUP_SINGLE_ELEMENT',\n                enableMenu: isWritable,\n                onClick: () => {\n                    metrics.setExtraEventMetrics('createGroup', { content: { category: 'Right Click Element' } });\n                    appState.panel.groupActions.createGroupFromSet(elements);\n                }\n            },\n            canUngroup && {\n                label: elements.length === 1 ? 'DL_UNGROUP' : 'DL_UNGROUP_SELECTED_ITEMS',\n                enableMenu: isWritable,\n                onClick: () => {\n                    metrics.reportEvent('Element Operations', 'Element', 'click', 'ungroup', {\n                        event: { value: 'agg', count: elements.length },\n                        content: { category: 'Right Click' }\n                    }, libraryManager.currentLibrary);\n                    metrics.setExtraEventMetrics('updateElement', { subtype: 'ungroup', content: { category: 'Right Click' } });\n                    addElementsToGroup(elements);\n                }\n            } ]\n        );\n    }\n\n    return groupMenuItems;\n}\n\nexport function canRenameElements(elements) {\n    const hideRename = viewState.viewState === 'grid' && configuration.currentProduct.config.hideNamesInGridView;\n    return !hideRename && elements.length === 1 && elements.every(element => !element.isLinked && !element.disableRename && viewState.isLibraryWritable(element.library));\n}\n\nexport function getMenuItems(elements, subElement) {\n    if (elements.length === 0) {\n        return [];\n    }\n\n    // Construct the menu - starting with the element-specific operations\n    const menuItems = elements.length === 1 ? getSingleElementMenuItems(elements[0], subElement) : getMultiElementMenuItems(elements);\n\n    // Add 'Open in app' option for Substance Sampler and Substance Painter supported file types\n    const openInAppMenuItems = featureFlags.get('enableOpenInAppMenu') && configuration.currentProduct.config.showOpenInAppMenu && getOpenInThreeDAppMenuItem(elements);\n    if (openInAppMenuItems) {\n        menuItems.unshift(openInAppMenuItems);\n    }\n\n    const readOnlyGroups = configuration.currentProduct.config.readOnlyGroups;\n\n    // Ungroup, Group from selection, etc.\n    if (!readOnlyGroups) {\n        pushMenuGroup(menuItems, getGroupMenuItems(elements));\n    }\n    // Now, add the copy-move operations\n    pushMenuGroup(menuItems, getCopyMoveMenuItems(elements));\n\n    const disableDelete = configuration.currentProduct.config.disableDelete && configuration.currentProduct.config.disableDelete(elements);\n\n    // Now, the rename and delete, and report abuse options\n    pushMenuGroup(menuItems, [\n        canRenameElements(elements) && {\n            label: 'DL_RENAME',\n            id: 'rename',\n            icon: 'Rename',\n            hideIcon: !configuration.currentProduct.config.showElementActionMenuIcons,\n            enableMenu: true,\n            onClick: () => {\n                elements.forEach(element => {\n                    metrics.reportElementEvent('Element Operations', 'Element', 'open', 'rename', element);\n                });\n                metrics.setExtraEventMetrics('updateElement', { content: { category: 'Right Click' } });\n                operationalMetrics.sendUpdateElementEvent(elements[0]);\n                if (configuration.currentProduct.config.showRenameDialogOnElementAction) {\n                    dialogManager.openDialog('renameLibrary', { library: elements[0], isElement: true });\n                } else {\n                    elementSelectionState.setSelection(elements[0]);\n                    appState.panel.viewManager.startRename(elements[0]);\n                }\n            }\n        },\n        !disableDelete && elements.every(element => isLibraryWritable(element.library)) && {\n            label: 'DL_DELETE',\n            id: 'delete',\n            icon: 'Delete',\n            hideIcon: !configuration.currentProduct.config.showElementActionMenuIcons,\n            destructive: !configuration.currentProduct.config.showActionAsNonDestructive,\n            enableMenu: true,\n            onClick: () => {\n                // If deleted in 1-up mode, exit 1-up mode.\n                if (viewState.isOneUpMode()) {\n                    viewState.setStateBeforeOneUpMode();\n                }\n                // Make sure we de-select the elements (if they were selected)\n                elementSelectionState.clearSelection(elements);\n                metrics.reportEvent('Element Operations', 'Element', 'click', 'delete', {\n                    event: { value: 'agg', count: elements.length },\n                    content: { category: 'Right Click' }\n                }, libraryManager.currentLibrary);\n\n                metrics.setExtraEventMetrics('removeElement', { content: { category: 'Right Click' } });\n                libraryManager.deleteElements(elements);\n            }\n        },\n        elements.length === 1 && !isOwnedLibrary(elements[0].library) && !configuration.currentProduct.config.disableReportAbuse && {\n            label: 'DL_REPORT_ABUSE',\n            id: 'reportAbuse',\n            icon: 'Flag',\n            hideIcon: !configuration.currentProduct.config.showElementActionMenuIcons,\n            destructive: !configuration.currentProduct.config.showActionAsNonDestructive,\n            onClick: () => LinkUtils.openReportAbuseURL(elements[0])\n        }\n    ]);\n\n    pushMenuGroup(menuItems, getAssetLinkingMenuItems(elements));\n\n    return menuItems;\n}\n\nexport function showContextMenu(element, subElement) {\n    if (!viewState.isContextMenuEnabled()) {\n        // Don't show the context menu if not wanted by the mode\n        menuManager.setContextMenu([]);\n        return;\n    }\n\n    // Get the elements to apply the operation to - it's either the element we right-clicked on,\n    // or in the case of a selection, it's the entire selection!\n    const elements = elementSelectionState.isSelected(element) ? elementSelectionState.selection.slice() : [ element ];\n\n    let menuItems = getMenuItems(elements, subElement);\n\n    if (configuration.currentProduct.config.elementContextMenuOrder) {\n        const objectsMap = menuItems.reduce((acc, menuItem) => {\n            acc[menuItem.id] = menuItem;\n            return acc;\n        }, {});\n\n        menuItems = configuration.currentProduct.config.elementContextMenuOrder.map(id => {\n            if (id === 'divider' && !environment.isMobileView) {\n                return { divider: true };\n            } else {\n                return objectsMap[id];\n            }\n        });\n        menuItems = menuItems.filter(x => x);\n    }\n\n    // Set the context menu - note that we ensure the item that you right-clicked on is selected, before\n    // applying the operation.\n    menuManager.setContextMenu(menuItems, () => elementSelectionState.ensureSelection(element));\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport librarySizeManager from 'app/js/managers/librarySizeManager';\nimport environment from 'app/js/environment';\nimport debugLog from 'app/js/utils/debugLog';\nimport * as StringUtils from 'app/js/utils/stringUtils';\nimport { getTruncatedElementName } from 'app/js/utils/libraryUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport imsInterface from 'app/js/interface/imsInterface';\n\nconst _fs = () => window.nodeRequire('fs');\n\n/**\n    Private functions\n**/\n\nfunction launchFile(path) {\n    if (environment.isWindowsOS()) {\n        window.cep.process.createProcess('start', path.replace(/\\//g, '\\\\'));\n        alert((path === debugLog.getLogFolder() ? 'Folder is ' : 'Information saved to ') + path);\n        return;\n    }\n    window.cep.process.createProcess('/usr/bin/open', path);\n}\n\nfunction formatShortDate(epochTime) {\n    const date = new Date(epochTime);\n    return (date.getMonth() + 1) + '-' + date.getDate() + '-' + date.getFullYear();\n}\n\nfunction formatShortTime(epochTime) {\n    const date = new Date(epochTime);\n    const minutes = date.getMinutes();\n    return date.getHours() + ':' + (minutes <= 9 ? '0' : '') + minutes;\n}\n\n/**\n    Public API\n**/\n\nexport function viewLibrariesInfo() {\n    const libraries = libraryManager.libraries;\n    const now = Date.now();\n\n    const rows = libraries.map(library => `\n        <tr>\n            <td class='libraryName'>${StringUtils.encodeStringForHTML(library.name)}</td>\n            <td class='libraryElementCount'>${ library.elements.length }</td>\n            <td class='librarySize'>${ librarySizeManager.getSizeAsString(library) }</td>\n            <td class='libraryDate'>${ formatShortDate(library.modified) }</td>\n            <td class='libraryCollab'>${ library.ownership || '&nbsp' }</td>\n            <td class='libraryId'>${ library.id }</td>\n        </tr>\n    `).join('');\n\n    const info = `\n        <HTML><HEAD style=\"font-family:sans-serif;\"><TITLE>My CC Libraries</TITLE></HEAD>\n        <body style=\"font-family:sans-serif\">\n        <H1>My CC Libraries</H1>\n        <p>${ libraries.length + ' libraries, ' + formatShortDate(now) + ' ' + formatShortTime(now) }</p>\n        <table BORDER=1 CELLPADDING=4 CELLSPACING=1 RULES=ROWS FRAME=HSIDES BORDERCOLOR=\"#EEEEEE\" style=\"font-size:small\">\n            <tr>\n                <th>&nbsp</th>\n                <th>Elements</th>\n                <th>Data size</th>\n                <th>Last modified</th>\n                <th>Collaboration</th>\n                <th>ID</th>\n            </tr>\n            ${ rows }\n        </table></body></HTML>\n    `;\n\n    const tempFilePath = environment.getMyDocumentsPath() + '/AllLibrariesInfo.html';\n    try {\n        _fs().writeFileSync(tempFilePath, info);\n        launchFile(tempFilePath);\n    } catch (err) {\n        alert('Failed to create libraries info debug file\\n\\nCould not write to ' + tempFilePath + '\\n\\n' + err.toString());\n        throw err;\n    }\n}\n\nexport function viewLibraryInfo() {\n    const currentLibrary = libraryManager.currentLibrary;\n    let elementData = '';\n\n    elementConfiguration.getElementTypes().forEach(type => {\n        const name = translate(elementConfiguration.getTypeName(type));\n        const elementsOfType = currentLibrary.elements.filter(element => element.type === type);\n        if (elementsOfType.length > 0) {\n            elementData += '\\n    ' + name + ': ' + elementsOfType.length + ' (' + librarySizeManager.getSizeAsString(elementsOfType) + ')';\n        }\n    });\n\n    const elementSummary = currentLibrary.elements.length + ' (' + librarySizeManager.getSizeAsString(currentLibrary) + ')';\n    const libraryInformation = `Current Library Information\\nName: ${currentLibrary.name}\\nElements: ${elementSummary}${elementData}`;\n\n    environment.showError(libraryInformation);\n}\n\nexport function viewElementInfo() {\n    const currentLibrary = libraryManager.currentLibrary;\n    const now = Date.now();\n\n    let rows = '';\n    elementConfiguration.groupElementsByType(currentLibrary.elements, 'name').forEach(typeGroup => {\n        typeGroup.children.forEach(element => {\n            const type = translate(elementConfiguration.getTypeName(element.type));\n            const name = getTruncatedElementName(element);\n            const time = formatShortDate(element.modified);\n\n            rows += `\n            <tr>\n                <td class='elementType'>${ type }</td>\n                <td class='elementName'>${ name }</td>\n                <td class='elementTime'>${ time }</td>\n                <td class='elementId'>${ element.id }</td>\n            </tr>`;\n        });\n    });\n    const info = `\n        <HTML>\n            <HEAD style=\"font-family:sans-serif;\"><TITLE>Contents of \"${currentLibrary.name}\"</TITLE></HEAD>\n            <body style=\"font-family:sans-serif\">\n                <H1 class='libraryName'>Contents of \"${currentLibrary.name}\"</H1>\n                <p class='libraryDescription'>${ currentLibrary.elements.length + ' elements, ' + formatShortDate(now) + ' ' + formatShortTime(now) }</p>\n                <table BORDER=1 CELLPADDING=4 CELLSPACING=1 RULES=ROWS FRAME=HSIDES BORDERCOLOR=\"#EEEEEE\" style=\"font-size:small\">\n                    <tr><th>Type</th><th>Name</th><th>Last modified</th><th>ID</th></tr>\n                    ${rows}\n                </table>\n            </body>\n        </HTML>`;\n\n    const tempFilePath = environment.getMyDocumentsPath() + '/' + StringUtils.makeSafeFilename(currentLibrary.name, 'Library contents') + '.html';\n    try {\n        _fs().writeFileSync(tempFilePath, info);\n        launchFile(tempFilePath);\n    } catch (err) {\n        alert('Failed to create element info debug file\\n\\nCould not write to ' + tempFilePath + '\\n\\n' + err.toString());\n        throw err;\n    }\n}\n\nexport function showLogFolder() {\n    launchFile(debugLog.getLogFolder());\n}\n\nexport async function followIncomingLibraries() {\n    const env = imsInterface.getEnvironment();\n    const token = await imsInterface.getAccessToken(libraryManager.userId);\n    const headers = {\n        Authorization: `Bearer ${token}`,\n        'x-api-key': env.clientId,\n        'Content-Type': 'application/json'\n    };\n\n    let url = `https://${env.invitationsHost}/api/v3/resources?orderBy=-sharedate`;\n\n    while (url) {\n        const response = await fetch(url, { headers });\n        const json = await response.json();\n        const resources = json && json._embedded && json._embedded.resources;\n\n        if (resources) {\n            for (const resource of resources) {\n                const path = resource._links && resource._links[ 'http://ns.adobe.com/ccapi/path' ];\n\n                if (!path || resource.resourceType !== 'application/vnd.adobe.library+dcx') {\n                    continue;\n                }\n\n                const id = path.href.split('/').pop();\n\n                libraryManager.followLibrary(resource.resourceUrn, id, { role: resource.role });\n            }\n        }\n\n        url = json && json._links && json._links.next && json._links.next.href;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { observable } from 'mobx';\nimport environment from 'app/js/environment';\n\n/**\n * All Brands Onboarding States\n * @readonly\n * @enum {string}\n */\nexport const BrandsOnboardingStates = Object.freeze({\n\n    /** \"Need to make edits?\" coachmark that explains that changes made are done in the draft brand. */\n    EDIT_TUTORIAL: 'brand_edit_tutorial_seen',\n\n    /** \"What is a draft?\" coachmark that explains draft vs published brand. */\n    DRAFT_TUTORIAL_STEP_1: 'draft_tutorial_step_1_seen',\n\n    /** \"Edits auto-save\" coachmark that explains that changes in draft mode are auto saved. */\n    DRAFT_TUTORIAL_STEP_2: 'draft_tutorial_step_2_seen',\n\n    /** Set if the user skipped the coachmark tutorial for a draft brand. */\n    DRAFT_TUTORIAL_SKIPPED: 'draft_tutorial_skipped',\n\n    /** \"Ready when you are\" coachmark that explains that changes made to a brand need to be published for others to use them. */\n    PUBLISH_CHANGES_TUTORIAL: 'brand_publish_changes_tutorial_seen',\n\n});\n\n/**\n * Implemented as a way to have onboarding states set in the local storage be observable between components.\n * @class\n */\nclass OnboardingState {\n    _state = observable.map();\n\n    get state() {\n        return this._state;\n    }\n\n    /**\n     * Initialize the onboarding state by setting the state values from the local storage\n     */\n    init() {\n        for (const onboardingState in BrandsOnboardingStates) {\n            const onboardingStateString = BrandsOnboardingStates[onboardingState];\n            this._state.set(onboardingStateString, environment.localStorage.getItem(onboardingStateString));\n        }\n    }\n\n    /**\n     * Clear all values in the onboarding state\n     */\n    clearAll() {\n        const allKeys = this._state.keys();\n        allKeys.forEach(key => {\n            environment.localStorage.setItem(key, '');\n        });\n        this._state = observable.map();\n    }\n\n    /**\n     * Set a specific onboarding state\n     * @param {BrandsOnboardingStates} key {@link BrandsOnboardingStates List of onboarding states}\n     * @param {boolean} value\n     */\n    setOnboardingState(key, value) {\n        if (!value) {\n            value = '';\n        }\n        value = String(value);\n        this._state.set(key, value);\n        environment.localStorage.setItem(key, value);\n    }\n\n    /**\n     * Get a specific onboarding state\n     * @param {BrandsOnboardingStates} key {@link BrandsOnboardingStates List of onboarding states}\n     * @returns {boolean} The onboarding value\n     */\n    getOnboardingState(key) {\n        const mappedValue = this._state.get(key);\n        const storedValue = environment.localStorage.getItem(key);\n        return mappedValue || storedValue;\n    }\n}\n\n/**\n * A util used to manage a user's onboarding state for brands. ({@link OnboardingState Link})\n * @type {OnboardingState}\n */\nexport default new OnboardingState();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/* eslint-disable no-console */\n\nimport configuration from 'app/js/config/configuration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport libraryProcessManager from 'app/js/managers/libraryProcessManager';\nimport toastManager from '../managers/toastManager';\nimport dialogManager from 'app/js/managers/dialogManager';\nimport localSettings from 'app/js/config/localSettings';\nimport featureFlags from 'app/js/config/featureFlags';\nimport environment from 'app/js/environment';\nimport versionManager from 'app/js/managers/versionManager';\nimport metrics from 'app/js/interface/metrics';\nimport viewState from 'app/js/state/viewState';\nimport { canEditInSource, editInSource } from 'app/js/utils/editOriginalUtils';\nimport { truncateString } from 'app/js/utils/stringUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport * as LinkUtils from 'app/js/utils/linkUtils';\nimport * as DebugUtils from 'app/js/utils/debugUtils';\nimport * as LibraryUtils from 'app/js/utils/libraryUtils';\nimport { isBrandLibrary } from 'app/js/utils/brandUtils';\nimport { pushMenuGroup } from 'app/js/utils/menuUtils';\nimport { resetOnboardingState, resetManagerOnboardingState } from 'app/js/utils/onboardingUtils';\nimport brandsOnboardingUtils from 'app/js/utils/GenStudio/onboardingUtils';\nimport appState from 'app/js/appState';\n\nfunction _getCreateLibraryItem() {\n    if (configuration.currentProduct.config.readOnlyPanelUI) {\n        return [];\n    }\n    const { areLibrariesLoaded } = libraryManager;\n    const includeImport = environment.supportsFilePicker && areLibrariesLoaded;\n    const hasLibraryManager = configuration.currentProduct.config.hasLibraryManager;\n    if (!areLibrariesLoaded) {\n        return [];\n    }\n\n    // These dialogs should open on top of the Libraries Manager when supported.\n    const openDialog = (...args) => hasLibraryManager ? environment.openDialogInManager(...args) : dialogManager.openDialog(...args);\n    return [\n        {\n            label: 'DL_MENU_CREATE_LIB',\n            enableMenu: areLibrariesLoaded && !viewState.isImportExportInProgress && !viewState.isTourInProgress,\n            onClick: () => openDialog('createLibrary')\n        },\n        includeImport && {\n            label: 'DL_IMPORT_LIBRARY',\n            enableMenu: !viewState.isImportExportInProgress && !viewState.isTourInProgress,\n            onClick: () => {\n                metrics.reportEvent('Library Operations', 'Import Library', 'click', 'start', { content: { category: 'Flyout Menu' } });\n                openDialog('importExportLibrary', { library: libraryManager.currentLibrary, mode: 'import' });\n            }\n        }\n    ];\n}\n\nfunction _getTeamLibraryItems(library, isLibraryDeletedFromServer, translationData) {\n    const enablePromote = LibraryUtils.isTeamLibrariesEnabled() && !LibraryUtils.isTeamLibrary(library) && library.isPushedToServer\n        && !isLibraryDeletedFromServer && library.isWritable && !library.toolkitId && LibraryUtils.isOwnedLibrary(library) && libraryManager.isOnline;\n    const enableUnfollow = LibraryUtils.isTeamLibrary(library) && library.isPushedToServer && !isLibraryDeletedFromServer;\n    const includeRemove = LibraryUtils.isTeamLibrary(library) && LibraryUtils.isLibraryDeletable(library);\n\n    return [\n        LibraryUtils.isTeamLibrary(library) && !isLibraryDeletedFromServer && {\n            label: 'DL_FLYOUT_PERSONAL_COPY_LIB',\n            enableMenu: !viewState.isImportExportInProgress,\n            translationData,\n            onClick: () => {\n                // don't have analytics requirements yet so this will need to be updated\n                metrics.reportEvent('Operations', 'Personal Copy Team Library', 'click', 'start');\n                appState.panel.libraryActions.makeTeamPersonalCopy(library);\n            }\n        },\n        enablePromote && {\n            label: 'DL_FLYOUT_PROMOTE_LIB',\n            enableMenu: !viewState.isImportExportInProgress,\n            translationData,\n            onClick: () => {\n                metrics.reportEvent('Operations', 'Promote Team Library', 'click', 'start');\n                appState.panel.libraryActions.promote(library);\n            }\n        },\n        enableUnfollow && {\n            label: isBrandLibrary(library) ? 'DL_REMOVE_FROM_YOUR_BRANDS' : 'DL_REMOVE_FROM_YOUR_LIBRARIES',\n            enableMenu: !viewState.isImportExportInProgress,\n            translationData,\n            onClick: () => {\n                metrics.reportEvent('Operations', 'Unfollow Team Library', 'click', 'start');\n                dialogManager.openDialog('deleteTeamLibrary', { library, leave: true });\n            }\n        },\n        includeRemove && {\n            label: 'DL_FLYOUT_REMOVE_LIB',\n            translationData,\n            enableMenu: !viewState.isImportExportInProgress,\n            onClick() {\n                metrics.reportEvent('Operations', 'Delete Library', 'click', 'start');\n                dialogManager.openDialog('deleteTeamLibrary', { library, leave: false });\n            }\n        }\n    ];\n}\n\nfunction _getLibraryOperationItems() {\n    const library = libraryManager.currentLibrary;\n    const isLibraryDeletedFromServer = library ? library.isDeletedFromServer : false;\n    const enableLibraryActions = !viewState.isImportExportInProgress;\n\n    if (!library) {\n        return [];\n    }\n\n    const includeSendLink = library.isPushedToServer && !library.toolkitId && !LibraryUtils.isTeamLibrary(library) && !isLibraryDeletedFromServer && library.isWritable && !libraryManager.isRestrictedAccount;\n    const includeCollaboration = LibraryUtils.isLibraryInvitable(library);\n    const includeRename = LibraryUtils.isLibraryRenameable(library) && !isLibraryDeletedFromServer;\n    const includeUnfollow = !LibraryUtils.isTeamLibrary(library) && LibraryUtils.isSharedWithMe(library);\n    const includeRemove = !LibraryUtils.isTeamLibrary(library) && LibraryUtils.isLibraryDeletable(library);\n    const includeExport = environment.supportsFilePicker && library.elements.length > 0 && !isLibraryDeletedFromServer && !configuration.currentProduct.config.readOnlyPanelUI;\n    const includeAutogenerateGroups = viewState.isLibraryWritable(library) && !isLibraryDeletedFromServer && library.elements.length > 0 && library.getGroups()?.length === 0;\n\n    const translationData = { libraryName : truncateString(library.name, 15) };\n    const teamItems = _getTeamLibraryItems(library, isLibraryDeletedFromServer, translationData) || [];\n\n    return [\n        includeExport && {\n            label: 'DL_EXPORT_LIBRARY_FLYOUT',\n            enableMenu: enableLibraryActions,\n            translationData,\n            onClick: () => {\n                dialogManager.openDialog('importExportLibrary', { library, mode: 'export' });\n                metrics.reportEvent('Library Operations', 'Export Library', 'click', 'start', null, library);\n            }\n        },\n        includeCollaboration && {\n            label: 'DL_FLYOUT_COLLABORATE',\n            enableMenu: true,\n            onClick: () => appState.panel.libraryActions.invite(library, false)\n        },\n        includeSendLink && {\n            label: 'DL_FLYOUT_SHARE_LINK',\n            enableMenu: true,\n            onClick() {\n                metrics.reportEvent('Collaboration', 'Share Library Link', 'click', 'start', null, library);\n                appState.panel.libraryActions.getLink(library, false);\n            }\n        },\n        ...teamItems,\n        includeRename && {\n            label: 'DL_FLYOUT_RENAME_LIB',\n            enableMenu: enableLibraryActions,\n            translationData,\n            onClick: () => dialogManager.openDialog('renameLibrary', { library })\n        },\n        canEditInSource(library) && {\n            label: 'DL_EDIT_IN_SOURCE',\n            enableMenu: enableLibraryActions,\n            onClick: () => editInSource(library)\n        },\n        includeUnfollow && {\n            label: LibraryUtils.isPublicLibrary(library) ? (isBrandLibrary(library) ? 'DL_REMOVE_FROM_YOUR_BRANDS' : 'DL_REMOVE_FROM_YOUR_LIBRARIES') : 'DL_FLYOUT_LEAVE_LIB',\n            translationData,\n            enableMenu: !library.toolkitId && !isLibraryDeletedFromServer && !viewState.isImportExportInProgress,\n            onClick() {\n                metrics.reportEvent('Operations', 'Unfollow Library', 'click', 'start');\n                dialogManager.openDialog('deleteLibrary', { library });\n            }\n        },\n        includeRemove && {\n            label: 'DL_FLYOUT_REMOVE_LIB',\n            translationData,\n            enableMenu: enableLibraryActions,\n            onClick() {\n                metrics.reportEvent('Operations', 'Delete Library', 'click', 'start');\n                dialogManager.openDialog('deleteLibrary', { library });\n            }\n        },\n        includeAutogenerateGroups && {\n            label: 'DL_FLYOUT_AUTOGENERATE_GROUPS',\n            translationData,\n            enableMenu: enableLibraryActions,\n            onClick: () => appState.panel.libraryActions.autogenerateEmptyLibraryGroups(library)\n        }\n    ].filter(item => item);\n}\n\nfunction _getViewOperationItems() {\n    if (viewState.isRootView()) {\n        return [];\n    }\n\n    const { areLibrariesLoaded } = libraryManager;\n    const includeCollapseAll = viewState.viewByState === configuration.VIEW_BY_MODES.GROUP;\n\n    return [\n        includeCollapseAll && {\n            label: 'DL_COLLAPSE_ALL',\n            enableMenu: areLibrariesLoaded && !viewState.isTourInProgress,\n            onClick: () => {\n                const groups = libraryManager.currentLibrary.getGroups();\n                groups.forEach(group => viewState.setGroupCollapsed(group.id, true));\n                metrics.reportEvent('Navigation', 'Library Panel', 'click', 'collapse-groups');\n            }\n        },\n        {\n            label: 'DL_SHOW_NAMES_ALWAYS',\n            enableMenu: areLibrariesLoaded && !viewState.isTourInProgress,\n            checked: viewState.nameVisibility === 'always',\n            onClick: () => {\n                const value = viewState.nameVisibility === 'always' ? 'elementHover' : 'always';\n                viewState.setNameVisibility(value);\n                metrics.reportEvent('Navigation', 'Library Panel', 'click', 'name-visibility', { event: { value } });\n            }\n        },\n        {\n            label: 'DL_SHOW_TRANSPARENCY_GRID',\n            enableMenu: areLibrariesLoaded && !viewState.isTourInProgress,\n            checked: viewState.elementBackgroundPattern === configuration.ELEMENT_BACKGROUNDS.CHECKERED,\n            onClick: () => {\n                const value = viewState.elementBackgroundPattern === configuration.ELEMENT_BACKGROUNDS.SOLID ? configuration.ELEMENT_BACKGROUNDS.CHECKERED : configuration.ELEMENT_BACKGROUNDS.SOLID;\n                viewState.setElementBackgroundPattern(value);\n                metrics.reportEvent('Navigation', 'Library Panel', 'click', 'element-background', { event: { value } });\n            }\n        }\n    ];\n}\n\nexport function getNavigationItems(library, context = { dialogManager }) {\n    const isLibraryDeletedFromServer = library ? library.isDeletedFromServer : false;\n    const includeViewOnWebsite = library && library.isPushedToServer && !isLibraryDeletedFromServer && !LibraryUtils.isTeamLibrary(libraryManager.currentLibrary) && !libraryManager.isRestrictedAccount;\n    const includeViewArchive = libraryManager.areLibrariesLoaded && !libraryManager.isRestrictedAccount;\n    const includeProvideFeedback = !libraryManager.isRestrictedAccount;\n\n    return [\n        includeViewOnWebsite && {\n            id: 'viewOnline',\n            label: 'DL_FLYOUT_VIEW_ON_WEBSITE',\n            enableMenu: !viewState.isTourInProgress,\n            onClick: () => LinkUtils.openLibraryURL(library)\n        },\n        includeViewArchive && {\n            id: 'viewOnlineArchive',\n            label: 'DL_FLYOUT_VIEW_ARCHIVE_ON_WEBSITE',\n            enableMenu: !viewState.isTourInProgress,\n            onClick: () => LinkUtils.openLibraryArchiveURL(library)\n        },\n        {\n            id: 'learn',\n            label: 'DL_FLYOUT_HOW_TO_USE',\n            enableMenu: !viewState.isTourInProgress,\n            onClick: () => LinkUtils.openHelpURL(true)\n        },\n        {\n            id: 'whatsNew',\n            label: 'DL_FLYOUT_WHATS_NEW',\n            enableMenu: !viewState.isTourInProgress,\n            onClick() {\n                metrics.reportEvent('Navigation', 'Flyout Menu', 'click', 'whats-new');\n                context.dialogManager.openDialog('whatsNew');\n            }\n        },\n        includeProvideFeedback && {\n            id: 'feedback',\n            label: 'DL_FLYOUT_FEEDBACK',\n            enableMenu: !viewState.isTourInProgress,\n            onClick: () => LinkUtils.openFeedbackURL()\n        }\n    ].filter(action => action);\n}\n\nfunction _getDebugInfoItems() {\n    return [\n        {\n            label: process.env.NODE_ENV === 'production' ? 'v' + versionManager.getPluginVersion() : 'DEV',\n            enableMenu: false\n        },\n        {\n            label: 'Panel Information',\n            onClick: () => environment.showError([\n                'Panel Information',\n                `Path: ${environment.getPluginPath()}`,\n                `Analytics State: ${metrics.isEnabled() ? 'Enabled' : 'Disabled'}`,\n                `User Agent: ${navigator.userAgent}`\n            ].join('\\n\\n'))\n        },\n        {\n            label: 'View Library Info',\n            enableMenu: libraryManager.currentLibrary !== undefined,\n            onClick: () => DebugUtils.viewLibraryInfo()\n        },\n        {\n            label: 'View Element Info',\n            enableMenu: libraryManager.currentLibrary !== undefined,\n            onClick: () => DebugUtils.viewElementInfo()\n        },\n        {\n            label: 'View All Libraries Info',\n            enableMenu: libraryManager.currentLibrary !== undefined,\n            onClick: () => DebugUtils.viewLibrariesInfo()\n        },\n        {\n            label: 'Show Logs Folder',\n            enableMenu: true,\n            onClick: () => DebugUtils.showLogFolder()\n        },\n        {\n            label: 'Follow All Incoming Libraries',\n            enableMenu: true,\n            onClick: () => DebugUtils.followIncomingLibraries()\n        }\n    ];\n}\n\nfunction _getDebugUIActionItems() {\n    return [\n        {\n            // Loc team wants this option to easily verify string translation, currently it's not surfaced to users, but may be by CCX at some point\n            label: 'Force open warning syncing in progress toast',\n            enableMenu: true,\n            onClick: () => toastManager.openToast('message', { undefined, message: translate('DL_NAVIGATION_WARNING_SYNCING_IN_PROGRESS'), variant: 'error', duration: 0 })\n        },\n        {\n            label: 'Show Deleted Items in Panel',\n            enableMenu: libraryManager.currentLibrary !== undefined,\n            onClick: () => viewState.setRemovedElementsMode()\n        },\n        {\n            label: 'Change Theme and Locale',\n            enableMenu: true,\n            onClick: () => dialogManager.openDialog('appThemeDebug')\n        },\n        {\n            label: 'Show Analytics in Panel',\n            enableMenu: true,\n            onClick: () => dialogManager.openDialog('analytics')\n        },\n        {\n            label: 'Show Relink Layer Mode',\n            enableMenu: libraryManager.currentLibrary !== undefined,\n            onClick() {\n                viewState.setRelinkLayerMode({\n                    message: 'This relink mode was shown by the debug menu item',\n                    actionMessage: translate('DL_RELINK'),\n                    missing: false,\n                    overlayMessage: translate('DL_RELINK_RELINK_OVERLAY_MESSAGE')\n                });\n            }\n        },\n        {\n            label: 'Show Groups Onboarding',\n            enableMenu: true,\n            onClick: () => dialogManager.openDialog('pathViewOnboarding')\n        },\n        {\n            label: 'Show Team Libraries One up view Onboarding',\n            enableMenu: true,\n            onClick: () => dialogManager.openDialog('panelTeamLibraryOneUpOnboardingPopover')\n        },\n        {\n            label: 'Show Capture Onboarding',\n            enableMenu: true,\n            onClick: () => dialogManager.openDialog('captureOnboardingPopover')\n        },\n        {\n            label: 'Show Root View Onboarding',\n            enableMenu: true,\n            onClick: () => dialogManager.openDialog('rootViewOnboardingPopover')\n        },\n        {\n            label: 'Show New User Library View Tour Onboarding',\n            enableMenu: true,\n            onClick: () => {\n                viewState.setTourInProgress(true);\n                dialogManager.openDialog('firstEnteredLibraryOnboardingPopoverTour', { isNewUserTour: true });\n            }\n        },\n        {\n            label: 'Show Returning User Library View Onboarding',\n            enableMenu: true,\n            onClick: () => dialogManager.openDialog('firstEnteredLibraryOnboardingPopoverTour')\n        },\n        {\n            // Because this is being triggered from the panel context, instead of simply opening the dialog, we reset the state and open the libraries manager.\n            label: 'Show Manager Onboarding',\n            enableMenu: configuration.currentProduct.config.hasLibraryManager,\n            onClick: () => {\n                resetManagerOnboardingState();\n                !environment.isLibraryManagerWindowOpen() && environment.openLibraryManagerWindow();\n            }\n        },\n        {\n            label: 'Enable quota warning onboarding',\n            enableMenu: true,\n            checked: localSettings.getDebugValue('enableQuotaWarningOnboarding'),\n            onClick: () => localSettings.setDebugValue('enableQuotaWarningOnboarding', !localSettings.getDebugValue('enableQuotaWarningOnboarding'))\n        }\n    ];\n}\n\nfunction _getDebugHelperItems() {\n    let stockSimulationTargetAppCode = localSettings.getDebugValue('stockSimulationTargetAppCode');\n\n    if (!stockSimulationTargetAppCode) {\n        stockSimulationTargetAppCode = configuration.currentProduct.config.code;\n        localSettings.setDebugValue('stockSimulationTargetAppCode', stockSimulationTargetAppCode);\n    }\n\n    return [\n        ...featureFlags.getMenuItems(),\n        {\n            label: 'Set Stock Simulation Target App [' + stockSimulationTargetAppCode + ']...',\n            onClick: () => {\n                const targetAppCode = prompt('Please enter code for target app, e.g.:\\n\\nPHXS for Photoshop\\nILST for Illustrator\\nIDSN for InDesign', localSettings.getDebugValue('stockSimulationTargetAppCode'));\n                localSettings.setDebugValue('stockSimulationTargetAppCode', targetAppCode);\n            }\n        },\n        {\n            label: 'Copy Selected ElementRef',\n            onClick() {\n                const data = elementSelectionState.selection.map(function(element) { return element.getReferenceString(); }).join('\\n');\n\n                try {\n                    const exec = window.nodeRequire('child_process').exec;\n                    if (environment.isWindowsOS()) {\n                        exec(\"echo '\" + data + \"' | clip\");\n                    } else {\n                        exec(\"echo '\" + data + \"' | pbcopy\");\n                    }\n                } catch (e) {\n                    environment.canvas.writePlainTextClipboard(data);\n                }\n            }\n        },\n        {\n            label: 'Reset Onboarding State (takes effect on restart)',\n            enableMenu: true,\n            onClick: () => resetOnboardingState()\n        },\n        configuration.currentProduct.config.useBrandsOnboarding && (\n            {\n                label: 'Reset Brands Onboarding State [GenStudio]',\n                enableMenu: true,\n                onClick: () => brandsOnboardingUtils.clearAll()\n            }),\n        {\n            label: 'Enable SAM.js logs', // Remember refresh to trigger the next network calls.\n            enableMenu: configuration.currentProduct.config.enableSAM,\n            onClick: () => {\n                localSettings.setDebugValue('enableSAMLogs', !localSettings.getDebugValue('enableSAMLogs'));\n            }\n        },\n        {\n            label: 'Reset collapsed state to default',\n            enableMenu: true,\n            onClick: () => viewState.resetCollapsedTypes()\n        },\n        {\n            label: 'Reset view states to default',\n            enableMenu: true,\n            onClick: () => viewState.resetViewStates()\n        }\n    ];\n}\n\nfunction _getDebugToolkitItems() {\n    // Accessing .libraries triggers the API initialization, so don't do that just for the debug menu items.\n    if (!libraryManager.areLibrariesLoaded) { return []; }\n\n    const toolkitLibraries = libraryManager.libraries.filter(library => library.toolkitId);\n\n    return [\n        {\n            label: 'Lock all toolkit libraries',\n            enableMenu: !!toolkitLibraries.length,\n            onClick: () => toolkitLibraries.forEach(toolkit => viewState.lockToolkit(toolkit))\n        },\n        {\n            label: 'Ensure all toolkit libraries',\n            enableMenu: true,\n            onClick: () => {\n                configuration.TOOLKIT_TYPES.forEach(toolkitType => libraryManager.getLibraryByToolkitId(`${toolkitType}`));\n            }\n        },\n        {\n            label: 'Delete all toolkit libraries',\n            enableMenu: !!toolkitLibraries.length,\n            onClick: () => toolkitLibraries.forEach(toolkit => libraryManager.deleteLibrary(toolkit))\n        },\n    ];\n}\n\nfunction _getDebugJSAPI2Items() {\n    return [\n        {\n            label: 'Enable JSAPI Hybrid Mode',\n            checked: localSettings.getDebugValue('jsapiHybridDriver'),\n            enableMenu: true,\n            onClick: () => {\n                localSettings.setDebugValue('jsapiHybridDriver', !localSettings.getDebugValue('jsapiHybridDriver'));\n                window.location.reload();\n            }\n        },\n        {\n            label: 'Open JS API 2.0 Debug Dashboard',\n            enableMenu: true,\n            onClick: () => dialogManager.openDialog('jsApi2Dashboard')\n        },\n        {\n            label: 'Load library by asset ID',\n            enableMenu: true,\n            onClick: () => {\n                dialogManager.openDialog('loadLibraryByAssetId');\n            }\n        },\n        {\n            // Note this only exposes the last 30 days of history. Garbage collection is turned off until [https://jira.corp.adobe.com/browse/CA-803]\n            // is fixed, though, so older versions are still currently recoverable using the recover scripts in the process.\n            label: 'Load Version History (in console)',\n            enableMenu: true, // loadVersionHistory is only available in CloudDriver, but CloudDriver is available even in desktop environments\n            onClick: () => {\n                const lib = libraryManager.currentLibrary;\n                lib.loadVersionHistory().then(history => {\n                    const libraryPromises = history.map(version => version.load());\n                    return Promise.all(libraryPromises).then(() => {\n                        return history;\n                    });\n                }).then(history => {\n                    console.log(`Current library name:`, lib.name);\n                    console.log(`Current library id:`, lib.id);\n                    console.log(`Current library asset id:`, lib.assetId, '\\n\\n');\n                    history.forEach(version => {\n                        console.log(`Version ${version.id}:`, version); // Note that the version.createdDate will be at the same or later time than the last modified time of the library.\n                        const library = version._libraryVersion;\n                        console.log(`Version ${ version.id } Library model:`, library);\n                        const date = new Date(library.modified).toLocaleString(); // can change locale and timezone, find the one the user is looking for\n                        console.log(`Version ${ version.id } Library modified: ${date}\\n\\n`);\n                    });\n                });\n            }\n        }\n    ];\n}\n\nfunction _getDebugEnvironmentItems() {\n    const info = libraryProcessManager.getServiceInfo();\n    const envLabel = info && info.environment;\n\n    return [\n        {\n            label: 'Production',\n            checked: envLabel === 'Production',\n            enableMenu: false\n        },\n        {\n            label: 'Staging',\n            checked: envLabel === 'Staging',\n            enableMenu: false\n        }\n    ];\n}\n\nexport function getDebugMenuItems() {\n    const menuItems = [];\n    const info = libraryProcessManager.getServiceInfo();\n    const processVersion = info && (info.codeVersion + (info.buildNumber ? '-' + info.buildNumber : ''));\n\n    pushMenuGroup(menuItems, _getDebugInfoItems());\n    pushMenuGroup(menuItems, _getDebugUIActionItems());\n    pushMenuGroup(menuItems, _getDebugHelperItems());\n    pushMenuGroup(menuItems, _getDebugToolkitItems());\n    pushMenuGroup(menuItems, _getDebugJSAPI2Items());\n    pushMenuGroup(menuItems, _getDebugEnvironmentItems());\n    pushMenuGroup(menuItems, [ {\n        label: libraryProcessManager.isConnected() ? 'Connected To: v' + processVersion : 'Not Connected',\n        enableMenu: false\n    } ]);\n\n    return menuItems;\n}\n\nexport function getFlyoutMenu(includeDebugItems) {\n    // Construct the menu\n    const menuItems = [];\n    const library = libraryManager.currentLibrary;\n\n    pushMenuGroup(menuItems, _getCreateLibraryItem());\n    // Allow indivdual product to customize the flyout menu items\n    const getProductMenuItems = configuration.currentProduct.getFlyoutMenuItems;\n    if (getProductMenuItems) {\n        const productMenuItems = getProductMenuItems().map(item => {\n            item.enableMenu = item.enableMenu && !viewState.isTourInProgress;\n            return item;\n        });\n        pushMenuGroup(menuItems, productMenuItems);\n    }\n\n    pushMenuGroup(menuItems, _getLibraryOperationItems().map((item) => { item.enableMenu = item.enableMenu && !viewState.isTourInProgress; return item; }));\n    pushMenuGroup(menuItems, _getViewOperationItems());\n    pushMenuGroup(menuItems, getNavigationItems(library, { dialogManager }));\n    pushMenuGroup(menuItems, environment.flyoutMenuItems || []); // Use this for things like Sign Out, that are based on the environment\n\n    // Append any debug menu items, if we have a debug file in the right place\n    if (includeDebugItems !== false && localSettings.showDebugMenu()) {\n        pushMenuGroup(menuItems, getDebugMenuItems());\n    }\n    return menuItems;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport libraryManager from 'app/js/managers/libraryManager';\nimport menuManager from 'app/js/managers/menuManager';\nimport { getWritableLibraries, copyOrMoveGroup, addElementsToGroup } from 'app/js/utils/libraryUtils';\nimport { pushMenuGroup } from 'app/js/utils/menuUtils';\nimport dialogManager from 'app/js/managers/dialogManager';\nimport viewState from 'app/js/state/viewState';\nimport metrics from 'app/js/interface/metrics';\nimport { getAddMenuItems } from 'app/js/utils/menuUtils';\nimport groupSelectionState from '../state/groupSelectionState';\nimport configuration from '../config/configuration';\nimport appState from 'app/js/appState';\n\nfunction getNestedGroupsCopyMoveMenuItems(group) {\n    const isDocumentAssets = group.library.isDocumentAssets;\n    const elementsInGroup = group.library.elements.filter(element => element.getOrderInGroup(group));\n    // Get libraries that are writable and have enough space for the selected elements.\n    const availableLibraryMap = getWritableLibraries(elementsInGroup.length);\n    availableLibraryMap[group.library.id] = false;\n\n    // In order to copy a group, there must be at least one available target library.\n    const hasWritableTargets = libraryManager.libraries.some(library => availableLibraryMap[library.id]);\n    // Can't copy groups from a document asset library.\n    const canCopyGroup = hasWritableTargets && !isDocumentAssets;\n\n    // In order to move a group, all the source libraries must be writable, as well as being able to copy the elements\n    const canMoveGroup = hasWritableTargets && viewState.isLibraryWritable(group.library);\n\n    const { x, y } = viewState.contextMenuPositionState;\n\n    return [ canCopyGroup && {\n        label: 'DL_COPY_ITEM',\n        enableMenu: true,\n        onClick: () => dialogManager.openDialog('copyOrMove', { items: [ group ], x, y, isMove: false, copyMoveAction: copyOrMoveGroup })\n    }, canMoveGroup && {\n        label: 'DL_MOVE_ITEM',\n        enableMenu: true,\n        onClick: () => dialogManager.openDialog('copyOrMove', { items: [ group ], x, y, isMove: true, copyMoveAction: copyOrMoveGroup })\n    } ];\n}\n\nfunction getGroupAddElementsMenuItems(group) {\n    const getSubMenuItems = () => {\n        const addToGroup = (elements) => {\n            addElementsToGroup(elements, group);\n        };\n        return getAddMenuItems(addToGroup);\n    };\n\n    const subMenuItems = getSubMenuItems();\n    if (subMenuItems.length) {\n        return [ {\n            label: 'DL_ADD_ELEMENTS_TO_GROUP',\n            enableMenu: true,\n            menuItems: subMenuItems\n        } ];\n    }\n    return [];\n}\n\n// Creates an empty subgroup from the group you right clicked on - always goes 'down' the tree\nfunction _handleCreateSubgroupClick(group) {\n    metrics.setExtraEventMetrics('createGroup', { content: { category: 'Right Click Group' } });\n    appState.panel.groupActions.createSubgroup(group);\n}\n\nexport function getContextMenu(group, analyticsCategory) {\n    const menuItems = [];\n    const selection = groupSelectionState.groupSelection;\n    const selectionCommonAncestor = selection.length > 1 && groupSelectionState.getSelectionCommonAncestor();\n    const isDocumentAssets = group.library.isDocumentAssets;\n    const isPathView = viewState.viewByGroupMode === 'path';\n    // Document assets are restricted to their top-level (type) group, so if there's no common ancestor in the selection, no common operations are allowed.\n    const isInvalidSelection = isDocumentAssets && !selectionCommonAncestor;\n    // Can't \"Make group from selection\" while on path view.\n    const canGroupMultiselect = !isInvalidSelection && !isPathView && selection.length && selection.length > 1;\n    // Can't \"Add items to group\" in document assets.\n    const canPerformElementOps = !isDocumentAssets && viewState.isLibraryWritable(group.library) && (!selection.length || selection.length === 1);\n    // If the group can't be edited, we only allow creating subgroups.\n    if (group.disableEditing) {\n        pushMenuGroup(menuItems, [\n            {\n                label: 'DL_CREATE_SUBGROUP',\n                enableMenu: true,\n                onClick: () => { _handleCreateSubgroupClick(group); }\n            }\n        ]);\n        return menuItems;\n    }\n\n    // Add element options\n    canPerformElementOps && pushMenuGroup(menuItems, [ ...getGroupAddElementsMenuItems(group) ]);\n\n    // Group operations.\n    if (viewState.isLibraryWritable(group.library)) {\n        // Create subgroup and Group together options\n        pushMenuGroup(menuItems, [\n            {\n                label: 'DL_CREATE_SUBGROUP',\n                enableMenu: true,\n                onClick: () => { _handleCreateSubgroupClick(group); }\n            },\n            canGroupMultiselect && {\n                label: 'DL_GROUP_TOGETHER',\n                enableMenu: true,\n                onClick: () => appState.panel.groupActions.createGroupFromSet(selection)\n            },\n        ]);\n    }\n\n    // Copy/Move operations.\n    pushMenuGroup(menuItems, getNestedGroupsCopyMoveMenuItems(group), !isDocumentAssets);\n\n    // Edit operations.\n    if (viewState.isLibraryWritable(group.library)) {\n        // Now, the rename/edit path and ungroup and delete operations\n        const canRename = (!selection.length || selection.length === 1);\n        const renameOp = {\n            label: 'DL_RENAME_GROUP',\n            enableMenu: true,\n            onClick: () => {\n                metrics.setExtraEventMetrics('updateGroup', { content: { category: analyticsCategory } });\n                if (configuration.currentProduct.config.disableEditPathOperation) {\n                    appState.panel.viewManager.startRename(group);\n                    appState.panel.viewManager.setRenameValue(group.name);\n                } else {\n                    appState.panel.viewManager.startEditPath(group);\n                }\n            }\n        };\n        const editPathOp = {\n            label: 'DL_EDIT_PATH',\n            enableMenu: true,\n            onClick: () => {\n                appState.panel.viewManager.startEditPath(group);\n            }\n        };\n        const renameOrEditOp = isPathView && !configuration.currentProduct.config.disableEditPathOperation ? editPathOp : renameOp;\n        pushMenuGroup(menuItems, [\n            canRename && renameOrEditOp,\n            {\n                label: 'DL_UNGROUP_NESTED_GROUPS',\n                enableMenu: true,\n                onClick: () => {\n                    metrics.setExtraEventMetrics('removeGroup', { content: { category: analyticsCategory } });\n                    libraryManager.deleteGroups([ group ]);\n                }\n            },\n            {\n                label: 'DL_DELETE_NESTED_GROUPS',\n                enableMenu: true,\n                onClick: () => {\n                    libraryManager.deleteGroups(selection.length > 0 ? selection : [ group ],\n                        { deleteContents: true, deleteEmptyAncestors: isPathView && !configuration.currentProduct.config.disableDeleteEmptyAncestors });\n                }\n            }\n        ], !isDocumentAssets);\n    }\n    return menuItems;\n}\n\nexport function showContextMenu(group) {\n    menuManager.setContextMenu(getContextMenu(group));\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/**\n * This exists solely for PropTypes checking of an interface, used both by BaseWrappedElementModel\n * (for XD Doc Assets and CC Libs elements) and Fred DocumentElement (which doesn't use an atom\n * based wrapper, and does not have an _element to wrap) implementations.\n * Does not assume there is an underlying _element or _changeAtom.\n */\n\nexport default class BaseElementModel {\n    isElement = true;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { Atom, action } from 'mobx';\n\n/**\n * This base group model was created to avoid importing circular dependencies where: GroupModel > ModelCache > DocumentGroup > GroupModel...\n * Instead we have: import GroupModel > ModelCache > DocumentGroup > BaseGroupModel.\n */\n\nexport default class BaseGroupModel {\n\n    isGroup = true;\n\n    constructor(group) {\n        this._group = group;\n\n        // The cc libs group change atom is triggered when the name or order changes.\n        // The document group change atom is triggered when the active state of the add\n        // button changes due to a change in selection.\n        this._changeAtom = new Atom('groupChange',\n            () => !this._group.isDeletedLocally && this._group.on?.('change', this._onChange),\n            () => this._group.off?.('change', this._onChange)\n        );\n    }\n\n    @action.bound _onChange() {\n        this._changeAtom.reportChanged();\n    }\n\n    /* API WRAPPER */\n\n    get id() {\n        // immutable, so no need to make it observable\n        return this._group.id;\n    }\n\n    get classifierName() {\n        // immutable, so no need to make it observable\n        return this._group.classifierName;\n    }\n\n    get name() {\n        this._changeAtom.reportObserved();\n        return this._group.name;\n    }\n\n    set name(newName) {\n        this._group.name = newName;\n    }\n\n    get order() {\n        this._changeAtom.reportObserved();\n        return String(this._group.order);\n    }\n\n    set order(newOrder) {\n        this._group.order = newOrder;\n    }\n\n    get modified() {\n        this._changeAtom.reportObserved();\n        return this._group.modified;\n    }\n\n    get modifiedBy() {\n        this._changeAtom.reportObserved();\n        return this._group.modifiedBy;\n    }\n\n    get modifiedContext() {\n        this._changeAtom.reportObserved();\n        return this._group.modifiedContext;\n    }\n\n    get wasModifiedLocally() {\n        this._changeAtom.reportObserved();\n        return this._group.wasModifiedLocally;\n    }\n\n    get created() {\n        this._changeAtom.reportObserved();\n        return this._group.created;\n    }\n\n    get createdBy() {\n        this._changeAtom.reportObserved();\n        return this._group.createdBy;\n    }\n\n    get createdContext() {\n        this._changeAtom.reportObserved();\n        return this._group.createdContext;\n    }\n\n    get wasCreatedLocally() {\n        this._changeAtom.reportObserved();\n        return this._group.wasCreatedLocally;\n    }\n\n    get isDeletedLocally() {\n        this._changeAtom.reportObserved();\n        return this._group.isDeletedLocally;\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/**\n * This exists solely for PropTypes checking of a library interface, used both by BaseWrappedLibraryModel\n * (for XD DocumentAssetsContainer and CC LibraryModel) and Fred DocumentAssetsContainer (which doesn't use an atom\n * based wrapper, and does not have a _library to wrap) implementations.\n * Does not assume there is an underlying _library or _changeAtom.\n */\n\nexport default class BaseLibraryModel {\n\n    isLibrary = true;\n\n    loadElements() {\n        // no-op\n    }\n\n    get removedElements() {\n        return [];\n    }\n\n    get areElementsLoaded() {\n        return true;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport BaseElementModel from 'app/js/models/BaseElementModel';\n\n/**\n * This is the base element model for elements and assets that need an Atom wrapper around a core _element\n * (e.g. XD DocumentElement and CC Libs ElementModel, but not Fred DocumentElement).\n * Assumes there is a _changeAtom to make the underlying _element observable.\n * This base model avoids circular dependencies where:\n * import ElementModel > modelCache > DocumentElement > ElementModel\n * and instead of having DocumentElement inherit from ElementModel, we have:\n * import ElementModel > modelCache > DocumentElement > BaseElementModel\n * (and vice versa: DocumentElement > modelCache > ElementModel > BaseElementModel)\n */\n\nexport default class BaseWrappedElementModel extends BaseElementModel {\n\n    constructor(element) {\n        super();\n        this._element = element;\n    }\n\n    // Override this:\n    _changeAtom = undefined;\n\n    /* API WRAPPER */\n\n    get id() { return this._element.id; }\n\n    get type() { return this._element.type; }\n\n    get modified() {\n        this._changeAtom.reportObserved();\n        return this._element.modified;\n    }\n\n    get created() {\n        this._changeAtom.reportObserved();\n        return this._element.created;\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { Atom, action, when } from 'mobx';\nimport { wrapLibrary, wrapElement, wrapGroup, wrapRepresentation, removeRepresentationFromCache,\n    removeRepresentationsCache, cleanRepresentationsCache } from './modelCache';\nimport BaseWrappedElementModel from './BaseWrappedElementModel';\nimport { getTempPath } from '../utils/fileUtils';\nimport appState from 'app/js/appState';\n\n/**\n * This is a wrapper over the AdobeLibraryElement from the cc-libraries-api-js\n * UPDATE: This is only used by TestUtils currently.\n *\n * For documentation, see: https://git.corp.adobe.com/pages/ProjectCentral/cc-libraries-api-js/AdobeLibraryElement.html\n */\n\nexport default class ElementModel extends BaseWrappedElementModel {\n\n    constructor(element) {\n        super(element);\n\n        // Atom wrapper provides hooks for when the model becomes observed or unobserved, which allow us to control listening.\n        this._changeAtom = new Atom('elementChange',\n            // Register a listener for changes in the element - this includes metadata, like the element name, as well as adding or\n            // removing representations, and any changes to representation content. It also hears a change when it is deleted,\n            // so that removed event info and isDeletedLocally can be updated.\n            () => !element.isDeletedLocally && element.on('change', this._onChange),\n            () => element.off('change', this._onChange)\n        );\n    }\n\n    @action.bound _onChange() {\n        // We don't directly call this._changeAtom.reportChanged();, because this will cause lots of re-rendering\n        // if many elements change at once during bulk operations. Instead, we tell the library that we changed,\n        // and wait for the library change event to call reportChanged() - this allows us to batch them in a mobx transaction.\n        this.library._pushPendingElementChanged(this._changeAtom);\n\n        // Clean up any deleted representations cached for this element\n        cleanRepresentationsCache(this._element);\n    }\n\n    /* API WRAPPER */\n    // Mostly inherited from BaseWrappedElementModel\n\n    // A reference is a globally unique reference combining the library id and element id and other info,\n    // whereas the element id is only unique within the library.\n    getReference() {\n        // immutable like an id, so no need to make observable\n        return this._element.getReference();\n    }\n\n    getReferenceString() {\n        return this._element.getReferenceString();\n    }\n\n    getLegacyReference() {\n        return this._element.getLegacyReference();\n    }\n\n    get name() {\n        this._changeAtom.reportObserved();\n        return this._element.name;\n    }\n\n    set name(newName) { this._element.name = newName; }\n\n    get isAutoNamed() {\n        this._changeAtom.reportObserved();\n        return this._element.isAutoNamed;\n    }\n\n    get isCommitted() {\n        this._changeAtom.reportObserved();\n        return this._element.isCommitted;\n    }\n\n    get committed() {\n        return new Promise(resolve => when(() => this.isCommitted, resolve));\n    }\n\n    getLocalizedName(locale) {\n        this._changeAtom.reportObserved();\n        return this._element.getLocalizedName(locale);\n    }\n\n    setLocalizedName(locale, name) {\n        this._element.setLocalizedName(locale, name);\n    }\n\n    get library() {\n        // Parent doesn't change so no need to listen to the changeAtom here.\n        // If an element is moved to a different library, it is copied and the old element is deleted.\n        return wrapLibrary(this._element.library);\n    }\n\n    get isWritable() {\n        this._changeAtom.reportObserved();\n        return this._element.isWritable;\n    }\n\n    get tags() {\n        this._changeAtom.reportObserved();\n        return this._element.tags;\n    }\n\n    set tags(tags) { this._element.tags = tags; }\n\n    get dependencies() {\n        this._changeAtom.reportObserved();\n        return this._element.dependencies.map(wrapElement);\n    }\n    set dependencies(elements) {\n        this._element.dependencies = elements.map(element => element._element);\n    }\n\n    get hasMissingDependencies() {\n        this._changeAtom.reportObserved();\n        return this._element.hasMissingDependencies;\n    }\n\n    getGroups(classifierName) {\n        this._changeAtom.reportObserved();\n        return this._element.getGroups(classifierName).map(wrapGroup);\n    }\n\n    getOrderInGroup(group) {\n        this._changeAtom.reportObserved();\n        return this._element.getOrderInGroup(group._group);\n    }\n\n    setOrderInGroup(group, order, removeExistingGroups) {\n        this._element.setOrderInGroup(group._group, order, removeExistingGroups);\n    }\n\n    get description() {\n        this._changeAtom.reportObserved();\n        return this._element.description;\n    }\n\n    set description(newDescription) { this._element.description = newDescription; }\n\n    get descriptionModified() {\n        this._changeAtom.reportObserved();\n        return this._element.descriptionModified;\n    }\n\n    get descriptionModifiedBy() {\n        this._changeAtom.reportObserved();\n        return this._element.descriptionModifiedBy;\n    }\n\n    get descriptionModifiedContext() {\n        this._changeAtom.reportObserved();\n        return this._element.descriptionModifiedContext;\n    }\n\n    get wasDescriptionModifiedLocally() {\n        this._changeAtom.reportObserved();\n        return this._element.wasDescriptionModifiedLocally;\n    }\n\n    get modifiedBy() {\n        this._changeAtom.reportObserved();\n        return this._element.modifiedBy;\n    }\n\n    get modifiedContext() {\n        this._changeAtom.reportObserved();\n        return this._element.modifiedContext;\n    }\n\n    get wasModifiedLocally() {\n        this._changeAtom.reportObserved();\n        return this._element.wasModifiedLocally;\n    }\n\n    get createdBy() {\n        this._changeAtom.reportObserved();\n        return this._element.createdBy;\n    }\n\n    get createdContext() {\n        this._changeAtom.reportObserved();\n        return this._element.createdContext;\n    }\n\n    get wasCreatedLocally() {\n        this._changeAtom.reportObserved();\n        return this._element.wasCreatedLocally;\n    }\n\n    get removed() {\n        this._changeAtom.reportObserved();\n        return this._element.removed;\n    }\n\n    get removedBy() {\n        this._changeAtom.reportObserved();\n        return this._element.removedBy;\n    }\n\n    get removedContext() {\n        this._changeAtom.reportObserved();\n        return this._element.removedContext;\n    }\n\n    get wasRemovedLocally() {\n        this._changeAtom.reportObserved();\n        return this._element.wasRemovedLocally;\n    }\n\n    get isDeletedLocally() {\n        this._changeAtom.reportObserved();\n        return this._element.isDeletedLocally;\n    }\n\n    get sourceRef() {\n        this._changeAtom.reportObserved();\n        return this._element.sourceRef;\n    }\n\n    set sourceRef(sourceRef) { this._element.sourceRef = sourceRef; }\n\n    get sourceRefString() {\n        this._changeAtom.reportObserved();\n        return this._element.sourceRefString;\n    }\n\n    set sourceRefString(sourceRefString) { this._element.sourceRefString = sourceRefString; }\n\n    // Check if the content has been updated using a unique identifier that always updates (the primary representation id)\n    get instanceId() {\n        this._changeAtom.reportObserved();\n        return this._element.instanceId;\n    }\n\n    get roles() {\n        this._changeAtom.reportObserved();\n        return this._element.roles;\n    }\n\n    set roles(roles) { this._element.roles = roles; }\n\n    /* Operations */\n\n    beginOperation() { this._element.beginOperation(); }\n    endOperation() {\n        return Promise.all(this._copyThumbnailPromises).then(() => new Promise(resolve => {\n            this._element.endOperation(resolve);\n        }));\n    }\n\n    /* Representations */\n\n    // RepresentationModels are not observable, because every time a representation is set or operated upon,\n    // the element change listener is called, which will update the list of representations.\n    // Note that because we always return a new array, when a change occurs and mobx does dirty checking,\n    // it will always see a new value and trigger a render. (This issue applies to anyplace we return a new Array.)\n    get representations() {\n        this._changeAtom.reportObserved();\n        return this._element.representations.map(wrapRepresentation);\n    }\n\n    // The single representation getters will always return a cached RepresentationModel,\n    // so Mobx will dirty check correctly in this case.\n    getPrimaryRepresentation() {\n        this._changeAtom.reportObserved();\n        return wrapRepresentation(this._element.getPrimaryRepresentation());\n    }\n\n    getRepresentationById(id) {\n        this._changeAtom.reportObserved();\n        return wrapRepresentation(this._element.getRepresentationById(id));\n    }\n\n    createRepresentation(type, relationship, index, preserveThumbnail) {\n        return wrapRepresentation(this._element.createRepresentation(type, relationship, index, preserveThumbnail));\n    }\n\n    // Removes representation from element, saves to disk, and syncs to server.\n    removeRepresentation(representation) {\n        this._element.removeRepresentation(representation._representation); // Async but no cb\n        removeRepresentationFromCache(representation);\n    }\n\n    removeAllRepresentations() {\n        this._element.removeAllRepresentations(); // Async but no cb\n        removeRepresentationsCache(this._element);\n    }\n\n    /* Custom Values */\n\n    getValue(namespace, key) {\n        this._changeAtom.reportObserved();\n        return this._element.getValue(namespace, key);\n    }\n\n    getValues() {\n        this._changeAtom.reportObserved();\n        return this._element.getValues();\n    }\n\n    setValue(namespace, key, value) { // triggers a change\n        this._element.setValue(namespace, key, value);\n    }\n\n    /* Thumbnails */\n\n    /**\n     * Get a remote server URL to a thumbnail of the element, with the requested size. The URL will not include the access token.\n     *\n     * @param {number} size\n     * @returns {Promise}\n     */\n    getThumbnailURL(size) {\n        return this._element.getThumbnailURL(size);\n    }\n\n    /**\n     * Get a path to a file on disk, which is a thumbnail of the element, with the requested size.\n     * If the thumbnail is not already cached on disk, we will download it from shared cloud.\n     *\n     * @param {number} size\n     * @returns {Promise}\n     */\n    getThumbnailPath(size) {\n        return this._waitForSetThumbnailCache.then(() => this._element.getThumbnailPath(size));\n    }\n\n    /**\n     * Get the contents of the requested size of the thumbnail of the element as a Blob.\n     * If the thumbnail is not already cached on disk, we will download it from shared cloud.\n     *\n     * @param {number} size\n     * @returns {Promise<Blob>}\n     */\n    getThumbnailContent(size) {\n        return this._waitForSetThumbnailCache.then(() => this._element.getThumbnailContent(size));\n    }\n\n    /**\n     * Get a path to a file on the disk which is a thumbnail of an element with a specific size as passed in the function.\n     * If it is cached, it immediately returns the path, otherwise it will return undefined.\n     * @param {number} size\n     * @returns {string}\n     */\n    getCachedThumbnailPath(size) {\n        this._changeAtom.reportObserved();\n        return this._element.getCachedThumbnailPath(size);\n    }\n\n    _waitForSetThumbnailCache = Promise.resolve();\n    _copyThumbnailPromises = [];\n\n    // Workaround for Catalina issues with macl - sometimes the app temp directory\n    // isn't accessible to the process, so we run into problems saving the thumbnail cache.\n    // Instead, we try moving the thumbnail into the process temp dir, so we can use that instead.\n    _copyThumbnailToTempDir(oldPath) {\n        const fs = window.nodeRequire('fs');\n        const path = window.nodeRequire('path');\n        const tempDir = appState.libraryManager.tempDir;\n        if (!fs || !path || !fs.copyFile || !tempDir) {\n            // Skip if we don't have filesystem access - just go ahead with the old name\n            return Promise.resolve(oldPath);\n        }\n\n        // Getting the temp dir synchronously, so we bypass checking it exists (this is already\n        // checked when we load the collection, and besides we'll skip over if we can't rename).\n\n        // append a uuid to the basename (without extension) to ensure uniqueness\n        const name = getTempPath(path.basename(oldPath));\n        const newPath = path.join(tempDir, name);\n\n        if (oldPath.startsWith(tempDir)) {\n            // If already in our temp dir, don't need to do anything.\n            return Promise.resolve(oldPath);\n        }\n\n        // Copy the thumbnail - we can't move it since we often use the same file for the thumbnail\n        // cache and the thumbnail rendition.\n        const copyPromise = new Promise(resolve => {\n            fs.copyFile(oldPath, newPath, err => resolve(err ? oldPath : newPath));\n        });\n\n        // Keep an array of pending copy promises, so we can block endOperation if there are\n        // thumbnails we're still copying.\n        this._copyThumbnailPromises.push(copyPromise);\n        copyPromise.then(() => {\n            const index = this._copyThumbnailPromises.indexOf(copyPromise);\n            if (index !== -1) {\n                this._copyThumbnailPromises.splice(index, 1);\n            }\n        });\n\n        return copyPromise;\n    }\n\n    _removeCopiedPath(copiedPath) {\n        const fs = window.nodeRequire('fs');\n        if (fs) {\n            fs.unlink(copiedPath, () => undefined);\n        }\n    }\n\n    setThumbnailCache(size, path) {\n        // If we're in the middle of updating the thumbnail cache, we don't want any calls to `getThumbnailPath`\n        // to happen, because they'd return the wrong value (i.e. the previous thumbnail). To prevent this, we\n        // keep a promise for the last `setThumbnailCache` call that gets resolved as soon as it completes - that\n        // way, we can wait for any pending setThumbnailCache to complete before calling getThumbnailPath.\n        let _finishedSetThumbnailCache;\n        this._waitForSetThumbnailCache = new Promise(resolve => _finishedSetThumbnailCache = resolve);\n\n        return this._copyThumbnailToTempDir(path).then(copiedPath => new Promise((resolve, reject) => {\n            this._element.setThumbnailCache(size, copiedPath, (err, newPathToThumbnail) => {\n                err ? reject(err) : resolve(newPathToThumbnail);\n\n                _finishedSetThumbnailCache();\n                if (path !== copiedPath) {\n                    // If we copied the thumbnail, we need to tidy up afterwards\n                    this._removeCopiedPath(copiedPath);\n                }\n            });\n        }));\n    }\n\n    supportsVectorThumbnail() {\n        this._changeAtom.reportObserved();\n        return this._element.supportsVectorThumbnail();\n    }\n\n    /* Element actions */\n\n    getActions(id) {\n        this._changeAtom.reportObserved();\n        return this._element.getActions(id);\n    }\n\n    getAuthenticatedThumbnailURL(size) {\n        return this._element.getAuthenticatedThumbnailURL(size);\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { wrapLibrary, wrapGroup } from './modelCache';\nimport BaseGroupModel from './BaseGroupModel';\n\n/**\n * This is a wrapper over a Group from the cc-libraries-api-js\n *\n * For documentation, see: https://git.corp.adobe.com/pages/ProjectCentral/cc-libraries-api-js/AdobeLibraryGroup.html\n */\n\nexport default class GroupModel extends BaseGroupModel {\n\n    get library() {\n        return wrapLibrary(this._group.library);\n    }\n\n    getLocalizedName(locale) {\n        this._changeAtom.reportObserved();\n        return this._group.getLocalizedName(locale);\n    }\n\n    getLocalizedNames() {\n        this._changeAtom.reportObserved();\n        return this._group.getLocalizedNames();\n    }\n\n    setLocalizedName(locale, name) {\n        this._group.setLocalizedName(locale, name);\n    }\n\n    get sourceRef() {\n        this._changeAtom.reportObserved();\n        return this._group.sourceRef;\n    }\n\n    set sourceRef(sourceRef) {\n        this._group.sourceRef = sourceRef;\n    }\n\n    get sourceRefString() {\n        this._changeAtom.reportObserved();\n        return this._group.sourceRefString;\n    }\n\n    set sourceRefString(sourceRefString) { this._group.sourceRefString = sourceRefString; }\n\n    get parent() {\n        const parent = this._group.parent;\n        if (parent) {\n            return wrapGroup(parent);\n        }\n    }\n\n    set parent(group) {\n        this._group.parent = group && group._group;\n    }\n\n    // returns <GroupModel[]>\n    get children() {\n        const children = this._group.children;\n        if (children) {\n            return children.map(child => wrapGroup(child));\n        }\n    }\n\n    /**\n     * Searching for subgroups in this group according to a filter. By doing this inside the model, we optimize so that\n     * we only wrap the _results_ - the raw groups are passed to the filter.\n     *\n     * Note that this is still observable, because any changes to any of the groups also trigger a change event\n     * on the library (so the result of filterChildren will be invalidated).\n     *\n     * @param {Function} predicate Takes a raw group and returns true if it should be included in the search results.\n     * @returns {GroupModel[]} array of elements that satisfy the predicate - this is resultsArray if you passed one in.\n     */\n    getFilteredChildren(predicate) {\n        this._changeAtom.reportObserved();\n        return this._group.getFilteredChildren(predicate).map(wrapGroup);\n    }\n\n    createChild(name, order) {\n        return wrapGroup(this._group.createChild(name, order));\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport BaseLibraryModel from 'app/js/models/BaseLibraryModel';\n\n/**\n * Base library model for CC and Document Libraries. (For easier PropTypes/instance of checking.)\n * Assumes there is a _changeAtom to make the underlying _library observable.\n */\n\nexport default class BaseWrappedLibraryModel extends BaseLibraryModel {\n\n    constructor(library) {\n        super();\n        this._library = library;\n    }\n\n    // Override this:\n    _changeAtom = undefined;\n\n    // This allows us to check if there's space in a library without instantiating all the element wrappers.\n    // Note: Use librarySizeManager.canAddElements instead to check if a library has space to add elements.\n    get elementCount() {\n        this._changeAtom.reportObserved();\n        return this._library.elements.length;\n    }\n\n    // This allows us to check if the number of groups in a library without instantiating all the group wrappers.\n    getGroupCount(classifier = '$default') {\n        this._changeAtom.reportObserved();\n        return this._library.getGroupCount(classifier);\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { Atom, action, when } from 'mobx';\nimport { wrapElement, removeElementFromCache, cleanElementsCache,\n    wrapGroup, removeGroupFromCache, cleanGroupsCache } from './modelCache';\nimport BaseWrappedLibraryModel from './BaseWrappedLibraryModel';\nimport { isPublicLibrary } from 'app/js/utils/libraryUtils';\nimport appState from 'app/js/appState';\n\n/**\n * This is a wrapper over a single AdobeLibraryComposite from cc-libraries-api-js. Manages the following:\n * * Library-level metadata (e.g. name, created and modified timestamps).\n * * Creating and deleting library elements.\n * * Transactional library operations.\n * * Copying/moving elements between different libraries.\n * * Change notifications for library changes.\n * * Filtering elements by type.\n *\n * For API documentation, see: https://git.corp.adobe.com/pages/ProjectCentral/cc-libraries-api-js/AdobeLibraryComposite.html\n */\n\nexport default class LibraryModel extends BaseWrappedLibraryModel {\n\n    /* @param {LibraryModel} library */\n    constructor(library) {\n        // Use the unwrapped library (this._library) when you need to avoid mobx.\n        // e.g. To get the name of a deleted library without starting a changeListener (which will cause an error), need to use this.\n        super(library);\n\n        // Note that we can use multiple atoms for separating different types of changes.\n        // Here, we have an atom for changes (adding/removing libraries), and a separate atom for sync status\n        // - so that we don't re-render the library contents just because the sync status changed!\n\n        // Listen for changes in the library - this includes the library being renamed, elements being added or removed, but also any changes\n        // to elements and their representations. The notification happens both for changes initiated through the library API, *and\n        // for changes as a consequence of syncing with the server*. Note that it doesn't tell you what changed. It's intended as a trigger for redrawing the library.\n\n        this._changeAtom = new Atom('libraryChange',\n            () => !this._library.isDeletedLocally && this._library.on('change', this._onChange),\n            () => this._library.off('change', this._onChange)\n        );\n        // With the migration to the JS API 2 and the move away from collections, we need to react to sync events directly from CC Libraries.\n        // This will go away when we remove the panel models.\n        const ccLibraries = appState.libraryManager.dangerouslyAccessCCLibraries();\n        this._syncAtom = ccLibraries._syncAtom;\n    }\n\n    on(event, callback) {\n        this._library.on(event, callback);\n    }\n\n    off(event, callback) {\n        this._library.off(event, callback);\n    }\n\n    emit(event) {\n        this._library.emit(event);\n    }\n\n    /*\n        Listener Callbacks (with bound context)\n        Should signal any observers that element has been changed.\n    */\n\n    _pushPendingElementChanged(changeAtom) {\n        // When an element changes, the library always changes afterwards. We use the library change as a way of\n        // batching up operations. Note that we can't use the same change listener as for the library change atom,\n        // because it's possible that it isn't active\n        if (!this._pendingElementChangeAtoms) {\n            this._pendingElementChangeAtoms = [];\n            this._library.on('change', this._onChangeElements);\n        }\n        this._pendingElementChangeAtoms.push(changeAtom);\n    }\n\n    // On library change, batch notify any pending element changes in one action.\n    @action.bound _onChangeElements() {\n        const changeAtoms = this._pendingElementChangeAtoms;\n        delete this._pendingElementChangeAtoms;\n        this._library.off('change', this._onChangeElements);\n        changeAtoms.forEach(atom => atom.reportChanged());\n    }\n\n    @action.bound _onChange() {\n        this._changeAtom.reportChanged();\n        // Clean up any deleted elements or groups cached for this library\n        cleanElementsCache(this._library);\n        cleanGroupsCache(this._library);\n    }\n\n    /**\n     * Searching the elements in a library, according to a filter. By doing this inside the model, we optimize so that\n     * we only wrap the _results_ - the raw library elements are passed to the filter.\n     *\n     * Note that this is still observable, because any changes to any of the elements also trigger a change event\n     * on the library (so the result of filterElements will be invalidated).\n     *\n     * @param {Function} predicate Takes a raw element and returns true if it should be included in the search results\n     * @returns {ElementModel[]} array of elements that satisfy the predicate - this is resultsArray if you passed one in\n     */\n    getFilteredElements(predicate) {\n        this._changeAtom.reportObserved();\n        return this._library.getFilteredElements(predicate).map(wrapElement);\n    }\n\n    /**\n     * Searching for groups in this library according to a filter. By doing this inside the model, we optimize so that\n     * we only wrap the _results_ - the raw groups are passed to the filter.\n     *\n     * Note that this is still observable, because any changes to any of the groups also trigger a change event\n     * on the library (so the result of filterChildren will be invalidated).\n     *\n     * @param {string} classifier Group classifier\n     * @param {Function} predicate Takes a raw group and returns true if it should be included in the search results.\n     * @returns {GroupModel[]} array of elements that satisfy the predicate - this is resultsArray if you passed one in.\n     * TODO: add equivalent method to DocumentGroup.\n     */\n    getFilteredGroups(classifier = '$default', predicate) {\n        this._changeAtom.reportObserved();\n        return this._library.getFilteredGroups(classifier, predicate).map(wrapGroup);\n    }\n\n    /* API WRAPPER */\n\n    get id() {\n        return this._library.id;\n    }\n\n    get previousPlaceHolderId() {\n        this._changeAtom.reportObserved();\n        return this._library.previousPlaceHolderId;\n    }\n\n    get publicLinkId() {\n        if (isPublicLibrary(this)) {\n            // Hack for now - we should move this to the libraries API.\n            const composite = this._library._dcxComposite;\n            const href = composite && composite.href;\n            const parts = href && href.split('/');\n            return parts && parts[parts.length - 1];\n        }\n    }\n\n    get resourceId() {\n        const composite = this._library._dcxComposite;\n        return composite && composite.href;\n    }\n\n    // A reference is a globally unique reference combining the library id and asset id\n    getReference() {\n        // immutable like an id, so no need to make observable\n        return this._library.getReference();\n    }\n\n    getReferenceString() {\n        return this._library.getReferenceString();\n    }\n\n    get name() {\n        this._changeAtom.reportObserved();\n        return this._library.name;\n    }\n\n    set name(newName) {\n        this._library.name = newName;\n    }\n\n    get roles() {\n        this._changeAtom.reportObserved();\n        return this._library.roles;\n    }\n\n    set roles(roles) {\n        this._library.roles = roles;\n    }\n\n    getLocalizedName(locale) {\n        this._changeAtom.reportObserved();\n        return this._library.getLocalizedName(locale);\n    }\n\n    setLocalizedName(locale, name) {\n        this._library.setLocalizedName(locale, name);\n    }\n\n    get isCommitted() {\n        this._changeAtom.reportObserved();\n        return this._library.isCommitted;\n    }\n\n    get committed() {\n        return new Promise(resolve => when(() => this.isCommitted, resolve));\n    }\n\n    get created() {\n        this._changeAtom.reportObserved();\n        return this._library.created;\n    }\n\n    get createdBy() {\n        this._changeAtom.reportObserved();\n        return this._library.createdBy;\n    }\n\n    get bookmark() {\n        this._changeAtom.reportObserved();\n        return this._library.bookmark;\n    }\n\n    get assetId() {\n        this._changeAtom.reportObserved();\n        return this._library.assetId;\n    }\n\n    get toolkitId() {\n        this._changeAtom.reportObserved();\n        return this._library.toolkitId;\n    }\n\n    get documentId() {\n        this._changeAtom.reportObserved();\n        return this._library.documentId;\n    }\n\n    get documentType() {\n        this._changeAtom.reportObserved();\n        return this._library.documentType;\n    }\n\n    get modified() {\n        this._changeAtom.reportObserved();\n        return this._library.modified;\n    }\n\n    get modifiedBy() {\n        this._changeAtom.reportObserved();\n        return this._library.modifiedBy;\n    }\n\n    get collaboration() {\n        this._changeAtom.reportObserved();\n        return this._library.collaboration;\n    }\n\n    get collaborators() {\n        this._changeAtom.reportObserved();\n        return this._library.collaborators;\n    }\n\n    get visibleCollaborators() {\n        this._changeAtom.reportObserved();\n        return this._library.visibleCollaborators;\n    }\n\n    loadCollaborators() {\n        this._changeAtom.reportObserved();\n        return this._library.loadCollaborators();\n    }\n\n    get ownership() {\n        this._changeAtom.reportObserved();\n        return this._library.ownership;\n    }\n\n    get team() {\n        this._changeAtom.reportObserved();\n        return this._library.team;\n    }\n\n    get project() {\n        this._changeAtom.reportObserved();\n        return this._library.team;\n    }\n\n    get isWritable() {\n        this._changeAtom.reportObserved();\n        return this._library.isWritable;\n    }\n\n    get isParentWritable() {\n        this._changeAtom.reportObserved();\n        return this._library.isParentWritable;\n    }\n\n    get isTransient() {\n        this._changeAtom.reportObserved();\n        return this._library.isTransient;\n    }\n\n    get owner() {\n        this._changeAtom.reportObserved();\n        return this._library.owner;\n    }\n\n    get ownerType() {\n        this._changeAtom.reportObserved();\n        return this._library.ownerType;\n    }\n\n    get parentDirectoryId() {\n        this._changeAtom.reportObserved();\n        return this._library.parentDirectoryId;\n    }\n\n    get isDeletedFromServer() {\n        this._changeAtom.reportObserved();\n        return this._library.isDeletedFromServer;\n    }\n\n    get isDeletedLocally() {\n        this._changeAtom.reportObserved();\n        return this._library.isDeletedLocally;\n    }\n\n    get isQuotaExceeded() {\n        this._changeAtom.reportObserved();\n        return this._library.isQuotaExceeded;\n    }\n\n    get storageUsed() {\n        this._changeAtom.reportObserved();\n        return this._library.storageUsed;\n    }\n\n    get renditionGrid() {\n        return this._library.renditionGrid;\n    }\n\n    // Note: For syncProgress/syncState we need to listen for changes on the library collection,\n    // so we use the collection's _syncAtom for this.\n\n    // If the library is syncing, this will have a value of `'uploading'` or `'downloading'`, depending on what is\n    // happening at that moment. If the library is not syncing, the value will be `undefined`.\n    // Note that even though we register for changes to this value by listening to the collection,\n    // the value for libraries is distinct from the syncState value on collections.\n    get syncState() {\n        this._syncAtom?.reportObserved();\n        return this._library.syncState;\n    }\n\n    get syncProgress() {\n        this._syncAtom.reportObserved();\n        return this._library.syncProgress;\n    }\n\n    get syncError() {\n        this._syncAtom.reportObserved();\n        const { syncErrors } = appState.libraryManager;\n        if (!syncErrors) { return; }\n        return syncErrors.find(error => error.libraryId === this.id);\n    }\n\n    get isPushedToServer() {\n        this._syncAtom?.reportObserved();\n        this._changeAtom.reportObserved();\n        return this._library.isPushedToServer;\n    }\n\n    get publishedFrom() {\n        this._syncAtom?.reportObserved();\n        this._changeAtom.reportObserved();\n        return this._library.publishedFrom;\n    }\n\n    get publishedTo() {\n        this._syncAtom?.reportObserved();\n        this._changeAtom.reportObserved();\n        return this._library.publishedTo;\n    }\n\n    get lastPublishedVersion() {\n        this._syncAtom?.reportObserved();\n        this._changeAtom.reportObserved();\n        return this._library.lastPublishedVersion;\n    }\n\n    get version() {\n        this._syncAtom?.reportObserved();\n        this._changeAtom.reportObserved();\n        return this._library.version;\n    }\n\n    get extractedFrom() {\n        this._syncAtom?.reportObserved();\n        this._changeAtom.reportObserved();\n        return this._library.extractedFrom;\n    }\n\n    /* Operations */\n\n    beginOperation() { this._library.beginOperation(); }\n    endOperation() {\n        return new Promise(resolve => this._library.endOperation(resolve));\n    }\n\n    /*\n        Element Operations\n    */\n\n    loadElements(sortObject) {\n        // TODO: JS-API 2.0 - legacy compatibility - remove this check\n        if (typeof this._library.loadElements === 'function') {\n            return this._library.loadElements(sortObject);\n        }\n    }\n\n    get areElementsLoaded() {\n        this._changeAtom.reportObserved();\n\n        // TODO: JS-API 2.0 - legacy compatibility - remove this check\n        return typeof this._library.areElementsLoaded === 'undefined' || this._library.areElementsLoaded;\n    }\n\n    get elements() {\n        this._changeAtom.reportObserved();\n        return this._library.elements.map(wrapElement);\n    }\n\n    get elementCount() {\n        this._changeAtom.reportObserved();\n        return this._library.elementCount;\n    }\n\n    get isLibraryLoaded() {\n        this._changeAtom.reportObserved();\n        // TODO: JS-API 2.0 - legacy compatibility - remove this check\n        return typeof this._library.isLibraryLoaded === 'undefined' || this._library.isLibraryLoaded;\n    }\n\n    // An array of all the removed elements in the library. (Elements that are permanently removed are not moved here.)\n    // Read-only - the default behavior of {@link LibraryModel#removeElement} is to move the element from\n    // {@link LibraryModel#elements} to this array. You can also use {@link LibraryModel#removeElement} to permanently\n    // remove an element. To restore a removed element, see {@link LibraryModel#restoreElement}.\n    // Note: This does not update libraryManager.latestDeletedElements. For that functionality, use libraryManager.deleteElements()\n    get removedElements() {\n        this._changeAtom.reportObserved();\n        return this._library.removedElements.map(wrapElement);\n    }\n\n    // This allows us to check if there are any archived elements in a library without instantiating all the element wrappers.\n    get removedElementCount() {\n        this._changeAtom.reportObserved();\n        return this._library.removedElementCount;\n    }\n\n    get documentationElements() {\n        this._changeAtom.reportObserved();\n        return this._library.documentationElements.map(wrapElement);\n    }\n\n    get documentationElementCount() {\n        this._changeAtom.reportObserved();\n        return this._library.documentationElementCount;\n    }\n\n    getElementById(id, excludeRemovedElements) {\n        this._changeAtom.reportObserved();\n        // return element with its api state wrapper\n        return wrapElement(this._library.getElementById(id, excludeRemovedElements));\n    }\n\n    createElement(name, type) {\n        return wrapElement(this._library.createElement(name, type));\n    }\n\n    removeElement(element, permanentlyRemove) {\n        this._library.removeElement(element._element, permanentlyRemove); // triggers change listener whether permanent or not.\n        // Remove element from cache, whether or not it's been permanently deleted.\n        removeElementFromCache(element);\n    }\n\n    restoreElement(element) {\n        return wrapElement(this._library.restoreElement(element._element));\n    }\n\n    copyElement(element, newLibrary) {\n        return this._library.copyElement(element._element, newLibrary._library).then(newElement => {\n            return wrapElement(newElement);\n        });\n    }\n\n    // equivalent to copying the element, and then deleting the original\n    moveElement(element, newLibrary) {\n        return this._library.moveElement(element._element, newLibrary._library).then(newElement => {\n            removeElementFromCache(element);\n            return wrapElement(newElement);\n        });\n    }\n\n    getGroups(classifierName) {\n        this._changeAtom.reportObserved();\n        return this._library.getGroups(classifierName).map(wrapGroup);\n    }\n\n    getGroupById(id) {\n        this._changeAtom.reportObserved();\n        const group = this._library.getGroupById(id);\n        if (group) {\n            return wrapGroup(group);\n        }\n    }\n\n    createGroup(name, order, classifierName) {\n        return wrapGroup(this._library.createGroup(name, order, classifierName));\n    }\n\n    removeGroup(group, removeElementsInGroup) {\n        this._library.removeGroup(group._group, removeElementsInGroup);\n        removeGroupFromCache(group);\n    }\n\n    copyGroup(group, targetLibrary, includeContents) {\n        return this._library.copyGroup(group._group, targetLibrary._library, includeContents).then(newGroup => {\n            return wrapGroup(newGroup);\n        });\n    }\n\n    moveGroup(group, targetLibrary, includeContents) {\n        return this._library.moveGroup(group._group, targetLibrary._library, includeContents).then(newGroup => {\n            return wrapGroup(newGroup);\n        });\n    }\n\n    /*\n     Library Renditions\n     A flat derived representation of a library's main elements.\n     (Not currently used by panel or web)\n     TODO: We might want a separate atom for this, to improve performance.\n    */\n\n    getRenditionURL(renditionType) {\n        this._changeAtom.reportObserved();\n        return this._library.getRenditionURL(renditionType);\n    }\n\n    getRenditionPath(renditionType) {\n        this._changeAtom.reportObserved();\n        return new Promise((resolve, reject) => {\n            this._library.getRenditionPath(renditionType, (err, path) => {\n                if (err) {\n                    reject(err);\n                } else {\n                    resolve(path);\n                }\n            });\n        });\n    }\n\n    getAuthenticatedRenditionURL(renditionType) {\n        this._changeAtom.reportObserved();\n        return new Promise((resolve, reject) => {\n            this._library.getAuthenticatedRenditionURL(renditionType, (err, url) => {\n                if (err) {\n                    reject(err);\n                } else {\n                    resolve(url);\n                }\n            });\n        });\n    }\n\n    setRendition(renditionType, content, encoding, type) {\n        return new Promise((resolve, reject) => {\n            this._library.setRendition(renditionType, content, encoding, type, err => err ? reject(err) : resolve());\n        });\n    }\n\n    removeRendition(renditionType) {\n        return this._library.removeRendition(renditionType);\n    }\n\n    setRenditionFromPath(renditionType, path, type) {\n        return new Promise((resolve, reject) => {\n            this._library.setRenditionFromPath(renditionType, path, type, err => err ? reject(err) : resolve());\n        });\n    }\n\n    // Re-upload the library if it was deleted from Creative Cloud\n    rebindToServer() {\n        return new Promise((resolve, reject) => {\n            this._library.rebindToServer(err => err ? reject(err) : resolve());\n        });\n    }\n\n    // Manually sync just this library with Creative Cloud. This both pulls down any changes from the server, and pushes\n    // local changes if the library is modified.\n    sync() {\n        return new Promise((resolve, reject) => {\n            this._library.sync(err => err ? reject(err) : resolve());\n        });\n    }\n\n    getValue(namespace, key) {\n        this._changeAtom.reportObserved();\n        return this._library.getValue(namespace, key);\n    }\n\n    setValue(namespace, key, value, keepModifiedTime) {\n        return this._library.setValue(namespace, key, value, keepModifiedTime);\n    }\n\n    // Note that the documentId should be the cloudAssetId of a cloud document, not the stable documentId that any document will have.\n    linkToDocument(documentId, documentType) {\n        this._library.linkToDocument(documentId, documentType);\n    }\n\n    getElementsAndDependencies(elements) {\n        this._changeAtom.reportObserved();\n        return this._library.getElementsAndDependencies(elements.map(element => element._element)).map(wrapElement);\n    }\n\n    getActions(id) {\n        this._changeAtom.reportObserved();\n        return this._library.getActions(id);\n    }\n\n    stageRepresentationForCommit(file) {\n        return this._library.stageRepresentationForCommit(file);\n    }\n\n    load() {\n        return this._library.load();\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport { action, computed, observable } from 'mobx';\nimport { translate } from 'app/js/managers/translationManager';\nimport BaseLibraryModel from 'app/js/models/BaseLibraryModel';\nimport DocumentElement from './DocumentElement';\nimport linkManager from 'app/js/managers/linkManager';\nimport configuration from 'app/js/config/configuration';\n\n// TODO - remove?\n\n/**\n * Fred / CCX does not have the concept of a document library, but it does have document assets.\n * This is just a container for those assets, rather than a wrapper over a library.\n */\nexport default class DocumentAssetsContainer extends BaseLibraryModel {\n    isLibraryLoaded = true;\n    isDocumentAssets = true;\n    isWritable = false;\n    // Document Asset deletes are always permanent.\n    disableNonPermanentDelete = true;\n    // Document Asset view should hide ungrouped section\n    hideUngroupedSection = true;\n\n    hideSyncStateFooter = true;\n\n    // An array of DocumentElements\n    @observable.shallow _elements = [];\n\n    _pendingChanges = {}; // Pending update message to send to Fred\n    _operationCount = 0;\n\n    constructor(data) {\n        super();\n        this._data = data;\n        if (data.elements) {\n            this._update(data.elements);\n            delete data.elements;\n        }\n    }\n\n    @action.bound _update(add = [], update = [], remove = []) {\n\n        update.forEach(data => {\n            const asset = this.getElementById(data.id);\n            if (asset) {\n                asset._update(data);\n            } else { // This shouldn't happen\n                add.push(update);\n            }\n        });\n\n        add.forEach(data => {\n            const asset = this.getElementById(data.id);\n            if (asset) {\n                // Check if the asset already exists, incase of duplicate message\n                // Note that this is a pre-optimization and can be taken out, or we could log an error.\n                asset._update(data);\n            } else {\n                this._elements.push(new DocumentElement(data, this));\n            }\n        });\n\n        if (remove.length) {\n            const assetsToRemove = {};\n            remove.forEach(data => { assetsToRemove[data.id] = true; });\n            // Rather than replacing the array with a filtered array, we edit the same array in place,\n            // just to ensure some consistency in how we update the array and avoid bugs.\n            const filterElementsInPlace = elements => {\n                let j = 0;\n                for (let i = 0; i < elements.length; i++) {\n                    const asset = elements[i];\n                    if (!assetsToRemove[asset.id]) {\n                        // overwrites the elements array starting at the beginning\n                        elements[j++] = asset;\n                    } else {\n                        // if asset is being removed, stop tracking the link\n                        linkManager.removeLink(asset._link);\n                    }\n                }\n                // truncates the array to the elements we are keeping\n                elements.length = j;\n            };\n\n            filterElementsInPlace(this._elements);\n        }\n    }\n\n    _sendPendingChanges() {\n        const payload = {};\n        Object.values(this._pendingChanges).forEach(({ type, data }) => {\n            payload[type] = payload[type] || [];\n            payload[type].push(data);\n        });\n        this._pendingChanges = {};\n        environment.sendMessage?.(configuration.DOCUMENT_ASSETS_MESSAGES.SEND_UPDATE, payload);\n    }\n\n    // Used to send an update to Fred, when document assets changed via the libraries panel\n    _sendChange(type, data) {\n        this._pendingChanges[data.id] = { type, data };\n\n        // If we're in the middle of an operation, wait for the operation to end before sending the changes\n        if (this._operationCount === 0) {\n            this._sendPendingChanges();\n        }\n    }\n\n    get id() { return this._data.id; }\n\n    get name() { return translate('DOCUMENT_ASSETS'); }\n\n    get ownership() { return 'private'; }\n\n    @computed get elements() {\n        return this._elements; // note that no wrapping is needed, since the elements are already observable\n    }\n\n    getElementById(id) { return this._elements.find(e => e.id === id); }\n\n    // No benefit to using this on Fred assets, but it matches existing APIs\n    @computed get elementCount() { return this._elements.length; }\n\n    /**\n     * Searching the elements in a Document library, according to a filter.\n     *\n     * Note that this is still observable, because any changes to any of the elements also trigger a change event\n     * on the library (so the result of filterElements will be invalidated).\n     *\n     * @param {Function} predicate Takes an element and returns true if it should be included in the search results\n     * @returns {DocumentElement[]} array of elements that satisfy the predicate - this is resultsArray if you passed one in\n     */\n    getFilteredElements(predicate) {\n        return this.elements.filter(predicate);\n    }\n\n    getElementsAndDependencies(elements) {\n        return elements;\n    }\n\n    getGroups() { return []; }\n\n    getGroupCount() {\n        return 0;\n    }\n\n    /* Gated Updates */\n\n    // Number of pending updates is shown in the updates badge on the list item in root view\n    @computed get gatedUpdates() { return this.elements.filter(asset => asset.isPendingUpdate); }\n\n    updateLinkedAssets() {\n        environment.updateLinkedAssets(this.gatedUpdates);\n    }\n\n    /* Missing Links */\n\n    @computed get missingLinks() {\n        return this.elements.filter(element => element.link?.isMissingLink);\n    }\n\n    @computed get resolvableMissingLinks() {\n        return this.missingLinks.filter(element => {\n            // We can help the user resolve their broken links if:\n            // - They have access to the library, they just need to accept the invitation for it.\n            // - They have access to the library via a team, they just need to follow it.\n            return element.link?.isPendingInvite || element.link?.isPendingFollow;\n        });\n    }\n\n    /* Batched Operations */\n\n    beginOperation() {\n        this._operationCount++;\n    }\n\n    endOperation() {\n        this._operationCount--;\n        if (this._operationCount === 0) {\n            this._sendPendingChanges();\n        }\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n// Does not inherit from a BaseRepresentationModel class despite overlapping APIs with the RepresentationModel,\n// because most shared APIs are getters, which cannot be separated from setters, and the DocumentRepresentation\n// is read only.\nexport default class DocumentRepresentation {\n\n    constructor(representation, parent) {\n        this._element = parent;\n        this._representation = representation;\n    }\n    // There is no need to _update the representation model, as the representation should just be replaced\n\n    get id() { return this._representation.id; }\n\n    get element() { return this._element; }\n\n    get type() { return this._representation.type; }\n\n    get relationship() { return this._representation.relationship; }\n\n    get width() { return this._representation.width; }\n\n    get height() { return this._representation.height; }\n\n    // Matching representation APIs:\n\n    getValues() { return []; }\n\n    getValue(/*namespace, key*/) {}\n\n    isCompatibleType(type) { return this.type === type; }\n\n    getExternalLinkDownloadProgress() { return undefined; }\n\n    getCachedContentPath() {}\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { action, observable, computed, when } from 'mobx';\nimport environment from 'app/js/environment';\nimport configuration from 'app/js/config/configuration';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport DocumentRepresentation from './DocumentRepresentation';\nimport BaseElementModel from 'app/js/models/BaseElementModel';\nimport linkManager from 'app/js/managers/linkManager';\nimport metrics from 'app/js/interface/metrics';\nimport AssetLink from './links/AssetLink';\n\nexport default class DocumentElement extends BaseElementModel {\n\n    @observable.ref _data = { representations: [] };\n    /**\n     * This asset's link. Can be an instance of LibraryLink or AssetLink depending on the link's source.\n     * @type {AssetLink}\n     */\n    @observable.ref _link;\n    @observable.ref _representations = [];\n    @observable _changeCount = 1;\n    _isDirty = false;\n\n    constructor(data, parent) {\n        super();\n        this._library = parent;\n        this._update(data);\n    }\n\n    _updateRepresentations(data) {\n        this._representations = data.representations.map(repData => new DocumentRepresentation(repData, this));\n    }\n\n    _onLinkChange = () => {\n        // Whenever the link changes, we need to send an update to Fred with the new localData\n        // We always send messages via the library so they can be aggregated together if many elements change\n        // in close succession\n\n        try {\n            // Special case - if the link is partial (only contains an asset id), we immediately update the link and send\n            // the notification to Fred. We shouldn't be parsing the link reference here, but this is temporary - later on,\n            // UAP will integrate SAM.js and be able to return a full linkReference to Fred when an asset is placed, rather\n            // than just the asset id.\n            const linkReference = environment.apiVersion === 0 ? JSON.parse(this.linkReference) : this.linkReference;\n            const properties = Object.keys(linkReference);\n            const isPartialLinkReference = properties.length === 1 && properties[0] === 'repo:assetId';\n\n            if (isPartialLinkReference && this._link.linkedAsset) {\n                // This will trigger another change event on the link, so we just return afterwards\n                // TODO: For handling partial link references it would be better if we can _only_ update the linkReference and nothing else\n                // The problem is that we don't know if the asset changed since the link reference was created. If it included the repo:etag,\n                // we could distinguish between these cases, but for now we send the full data to Fred.\n                // Note that we don't change the modified time of the element, since the update wasn't triggered by the user.\n                this.updateLink(true);\n                return;\n            }\n        } catch (e) {\n            // ignore\n        }\n\n        const data = Object.assign({}, this._isDirty ? this._data : { id: this.id }, {\n            '$local': this._link.getLocalData()\n        });\n        this._library._sendChange('update', data);\n    }\n\n    @action.bound async _update(data, isLocalUpdate = false) {\n        data.representations = data.representations || [];\n        const previousLinkReference = this._data.linkReference;\n        this._data = data;\n        this._updateRepresentations(data);\n        this._changeCount++;\n        this._isDirty = isLocalUpdate;\n\n        // If we're currently updating a link, wait for that update before continuing\n        if (this._updateLock) {\n            await this._updateLock;\n        }\n        // Use to lock updates so we only allow one to be performed at a time\n        const doLockedUpdate = async updateFn => {\n            let removeLock;\n            try {\n                this._updateLock = new Promise(resolve => removeLock = resolve);\n                return await updateFn();\n            } finally {\n                delete this._updateLock;\n                removeLock();\n            }\n        };\n\n        if (!previousLinkReference && data.linkReference) {\n            // Added\n            // Note that we get the actual link asynchronously, but we don't want the asset to temporarily appear as unlinked.\n            // We add a dummy link in the meantime, so the link will appear us UpToDate (no badging) until we hear otherwise.\n            this._link = { linkStatus: 'UpToDate', isNormalLinkState: true, linkReference: data.linkReference };\n            await doLockedUpdate(async () => {\n                this._link = await linkManager.addLink(data.linkReference);\n                this._link.on('change', this._onLinkChange);\n                this._onLinkChange();\n            });\n        } else if (previousLinkReference && !data.linkReference) {\n            // Removed\n            linkManager.removeLink(this._link);\n            this._link.off('change', this._onLinkChange);\n            this._link = undefined;\n        } else if (!AssetLink.areReferencesEqual(data.linkReference, previousLinkReference)) {\n            // Updated\n            await doLockedUpdate(() => this._link.update(data.linkReference));\n        }\n    }\n\n    get id() { return this._data.id; }\n\n    get type() { return this._data.type; }\n\n    get changeCount() {\n        // If previewing, we need to change the change count for the thumbnail to refresh. We use a negative number\n        // to avoid conflict with the positive changeCount range.\n        return environment.previewingAsset === this ? -1 : this._changeCount;\n    }\n\n    get modified() { return this._data.modified; }\n\n    get created() { return this._data.created; }\n\n    get name() { return this._data.name; }\n\n    get library() { return this._library; }\n\n    get dependencies() { return []; }\n\n    // Linked assets cannot be renamed\n    get disableRename() { return this.isLinked; }\n\n    getGroups() { return []; }\n\n    /* Representations */\n\n    get representations() { return this._representations; }\n\n    // Note: We only need the primary representation so that the asset can be converted into an element during publish.\n    getPrimaryRepresentation() {\n        return this._representations.find(rep => rep.relationship === 'primary');\n    }\n\n    /* Renditions */\n\n    _getLinkedAssetRenditionURL(size) {\n        const asset = this.linkedAsset;\n        if (asset) {\n            // The platform sets a cache-control max-age=432000 by default, which means the browser will cache the\n            // result for 5 days. Need to investigate why they do this for mutable assets, but in the meantime we\n            // add the etag of the asset as a cache buster - so the browser will always refresh if the etag changes\n            return this._link.getRenditionURL(size) + `&cb=${encodeURIComponent(asset.etag)}`;\n        }\n    }\n\n    // URL to a cloud resource (e.g. a platform rendition URL), or a blob URL, or a data:// URL with a base64-encoded PNG.\n    // This is generally required, but there are situations where it's ok for a document asset not to have a renditionURL:\n    // - If the Fred document is waiting for a rendition to be downloaded, so it's not available yet.\n    // - If the document asset is a color, gradient, or character style - where the rendition can be generated from the content (e.g. color value).\n    // In cases where Fred already has a blob in memory for the rendition, it can provide a blob URL via this field.\n    // The document assets panel is responsible for disposing the blob (via URL.revokeObjectURL()) when it is no longer needed,\n    // i.e. when Fred updates the model to either remove the asset or change its renditionURL.\n    // Fred should therefore never pass a blob URL to the document assets panel that it's using somewhere else.\n    async getThumbnailURL(size) {\n        if (environment.previewingAsset === this) {\n            return this._getLinkedAssetRenditionURL(size);\n        }\n        // Fred doesn't return the renditionURL straight away, so allow a timeout for resolving it (so we show a spinner\n        // in the meantime)\n        return new Promise((resolve, reject) => {\n            const cancelTimeout = setTimeout(() => {\n                cancel();\n                reject('timeout');\n            }, 2000);\n            const cancel = when(() => this._data.renditionURL, () => {\n                clearTimeout(cancelTimeout);\n                resolve(this._data.renditionURL);\n            });\n        });\n    }\n\n    get linkReference() {\n        return this._data.linkReference;\n    }\n\n    get link() {\n        return this._link;\n    }\n\n    // Note that this is set asynchronously for links to Assets.\n    get isLinked() { return !!this._link; }\n\n    get linkType() {\n        return this._link?.type;\n    }\n\n    get linkState() {\n        if (this.isSyncing) { return configuration.ASSET_LINK_STATES.SYNCING; }\n        return this._link?.linkStatus;\n    }\n\n    get isNormalLinkState() {\n        return this._link?.isNormalLinkState;\n    }\n\n    get isPendingUpdate() {\n        return this._link?.isPendingUpdate;\n    }\n\n    get isMissingLink() {\n        return this._link?.isMissingLink;\n    }\n\n    get isRestricted() {\n        return this._link?.isRestricted;\n    }\n\n    get isSyncing() {\n        // Either the host's instance or the link are syncing.\n        return !!this._data.isSyncing || this._link?.isSyncing;\n    }\n\n    // The source asset that the container asset is linked to\n    @computed get linkedAsset() {\n        return this._link?.linkedAsset;\n    }\n\n    // TODO: Investigate what action to take when user clicks broken link badge instead of this\n    relinkToDocument() {}\n\n    get canRelink() { return false; }\n\n    // Matching the Element API to avoid breaking things:\n\n    // TODO: Update to the new linkReference schema.\n    getReference() {\n        return this.getLegacyReference();\n    }\n\n    getLegacyReference() {\n        // This is used by the thumbnail cache so needs to be globally unique. If we're going to store it anywhere else\n        // (e.g. as a sourceRef when publishing document libraries) then we should fix it up.\n        const assetId = environment.cloudAssetId || this.library.id; // Fred doesn't tell us its document's asset id, but it should\n        return `${assetId}#id=${this.id}`;\n    }\n\n    getActions() { return []; }\n\n    // Get any custom actions for the element provided by the app\n    get additionalMenuItems() {\n        // data.actions is an array of configurable context menu items\n        /* Expected format of menu item:\n            id, // non-localized menu item id used in metrics\n            name, // localized label to display in the context menu\n            disabled, // visible, but greyed out\n            messageType, // type of message we send back when menu item is clicked\n            messagePayload // what we send back\n        */\n        if (!this._data.actions || !this._data.actions.length) { return []; }\n        return this._data.actions.map(item => ({\n            label: item.name,\n            enableMenu: !item.disabled,\n            onClick: () => {\n                metrics.reportElementEvent('Element Operations', 'Element', 'click', item.id, this, { event: { value: 'single', count: 1 }, content: { category: 'Right Click' } });\n                environment.sendMessage(item.messageType, item.messagePayload);\n            }\n        }));\n    }\n\n    // Accept an update to a linked asset\n    @action async updateLink(preserveModifiedTime = false) {\n        if (!this.isPendingUpdate) {\n            // Nothing to do, since no pending update\n            return;\n        }\n        const { linkedAsset: asset } = this._link.getLocalData();\n        // Remove the extension from the name\n        const [ , name ] = /^(.*?)(?:\\.\\w+)?$/.exec(asset.name) || [];\n        const { linkReference } = asset;\n        // Copy the data so we trigger reactions\n        const newData = Object.assign({}, this._data, {\n            linkReference,\n            name,\n            modified: preserveModifiedTime ? this._data.modified : Date.now(),\n            renditionURL: this._getLinkedAssetRenditionURL(elementConfiguration.getThumbnailSize(this))\n        });\n        if (newData.representations.length) {\n            const primaryRepresentation = newData.representations[0];\n            primaryRepresentation.contentURL = this._link.primaryContentURL;\n            if (!primaryRepresentation.contentURL) {\n                // Some links point to assets that don't store remote content (i.e library element colors, text styles, etc).\n                // We'll embed the content directly on the representation.\n                primaryRepresentation.content = this._link.primaryContent;\n            }\n            // width/height may have changed, so don't send them back to Fred. Fred should update these when it fetches the contents\n            delete primaryRepresentation.width;\n            delete primaryRepresentation.height;\n        }\n\n        // This triggers a change to the link (changing its state to UpToDate), which will then call into\n        // this._onLinkChange, which handles sending the update message to Fred\n        this._update(newData, true);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/**\n * @typedef {import('@ccx-public/shared-asset-model-js').AssetLink} AssetLink\n * @typedef {import('@ccx-public/shared-asset-model-js').AdobeAsset} AdobeAsset\n * @typedef {import('@ccx-public/shared-asset-model-js').LinkReference} LinkReference\n * @typedef {import('@ccx-public/shared-asset-model-js').LinkStatus} LinkStatus\n */\nimport EventEmitter from 'events';\nimport { computed, observable } from 'mobx';\nimport { utils as CCLibrariesUtils } from '@cclibraries/cc-libraries-js';\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\n\n/**\n * A Document Asset Link referencing an Adobe Asset (including a Library), managed via SAM-JS.\n */\nexport default class AssetLink extends EventEmitter {\n\n    static areReferencesEqual(linkRef1, linkRef2) {\n        if (environment.apiVersion === 0 || !linkRef1 || !linkRef2) {\n            // LinkReferences used to be passed as strings.\n            return linkRef1 === linkRef2;\n        }\n        return JSON.stringify(linkRef1, Object.keys(linkRef1).sort()) === JSON.stringify(linkRef2, Object.keys(linkRef2).sort());\n    }\n\n    /**\n     * @type {AssetLink}\n     */\n    @observable.ref _link;\n\n    _onChange = () => this.emit('change');\n\n    /**\n     * @param {AssetLink} assetLink\n     */\n    constructor(assetLink) {\n        super();\n        this._link = assetLink;\n        // Emit a 'change' notification each time the SAM-JS link changes.\n        // DocumentElementModel listens for these events to send updates to the host.\n        this._link.on('change', this._onChange);\n    }\n\n    /** Public API */\n\n    dispose() {\n        this._link.off('change', this._onChange);\n    }\n\n    @computed\n    get linkReference() {\n        return this._link?.getAssetLinkRef();\n    }\n\n    get isSyncing() {\n        // SAM-JS sets the link state to \"UpToDate\" while it's resolving the link.\n        return this.linkStatus === configuration.SAM_LINK_STATES.NORMAL && !this.linkedAsset;\n    }\n\n    get isNormalLinkState() {\n        return this.linkStatus === configuration.SAM_LINK_STATES.NORMAL;\n    }\n\n    get isPendingUpdate() {\n        return this.linkStatus === configuration.SAM_LINK_STATES.PENDING_UPDATE\n            || this.linkStatus === configuration.SAM_LINK_STATES.PENDING_METADATA_UPDATE;\n    }\n\n    get isMissingLink() {\n        return (this.linkStatus === configuration.SAM_LINK_STATES.DISCARDED)\n            || (this.linkStatus === configuration.SAM_LINK_STATES.BROKEN)\n            || (this.linkStatus === configuration.SAM_LINK_STATES.RESTRICTED);\n    }\n\n    get isRestricted() {\n        return this.linkStatus === configuration.SAM_LINK_STATES.RESTRICTED;\n    }\n\n    /**\n     * The link status as it should be surfaced to the host application.\n     * @returns {LinkStatus}\n     * Observable with respect to AssetLink's 'change' events, emitted if the underlying linkStatus changes.\n     */\n    get linkStatus() {\n        // TEMP - SAM.js introduced a separate state for MetadataOutOfDate that we don't yet handle.\n        // Since this used to be the same as UpToDate, we just map it to the same value for now.\n        // The more correct treatment would be to treat this as an automatic update (i.e. auto update\n        // the link if the only changes are to the link metadata, not the content).\n        const status = this._link?.linkStatus;\n        return status === configuration.SAM_LINK_STATES.PENDING_METADATA_UPDATE\n            ? configuration.SAM_LINK_STATES.NORMAL\n            : status;\n    }\n\n    /**\n     * @returns {AdobeAsset | undefined}\n     */\n    get linkedAsset() {\n        return this._link?.adobeAsset;\n    }\n\n    /**\n     * What the new linkReference would be if we accepted the pending update.\n     * @returns {LinkReference | string}\n     */\n    getNewLinkRef() {\n        const newLinkRef = this._getNewLinkRef();\n        if (environment.apiVersion === 0) {\n            // LinkReferences used to be passed as strings.\n            return JSON.stringify(newLinkRef, Object.keys(newLinkRef).sort());\n        }\n        return newLinkRef;\n    }\n\n    @computed\n    get permission() {\n        // SAM-JS originally supported a single permission value for an asset.\n        // This was later changed to support multiple combinations of permissions\n        // (e.g. a user can have only Read permission, or Read + Write, or Read + Share, etc)\n        // To avoid breaking existing integrations, we return the single highest permission the user has on the asset.\n        const permissions = configuration.SAM_PERMISSIONS;\n        return [\n            // Edit and View are deprecated on SAM-JS, but our host apps still expect them,\n            // so we need to return them but map them to their new names when interfacing with SAM-JS.\n            permissions.EDIT,\n            permissions.VIEW,\n            permissions.ACK,\n            permissions.NONE,\n        ].find((permission) => {\n            const samPermissionName = configuration.SAM_LEGACY_PERMISSIONS_MAP[permission] || permission;\n            return this.linkedAsset?.hasPermission(samPermissionName);\n        });\n    }\n\n    getLocalData() {\n        const asset = this.linkedAsset;\n        const linkedAsset = asset && {\n            'repo:assetId': asset.cloudID,\n            'repo:repositoryId': asset.repositoryID,\n            resource: this._resource,\n            name: asset.name,\n            linkReference: this.getNewLinkRef(),\n            permission: this.permission,\n            _links: asset.links\n        };\n\n        return {\n            linkState: this.linkStatus,\n            linkedAsset\n        };\n    }\n\n    getRenditionURL(size) {\n        return this.linkedAsset?.getRenditionURL(size);\n    }\n\n    get primaryContentURL() {\n        return this.linkedAsset?.links?.['http://ns.adobe.com/adobecloud/rel/primary']?.href;\n    }\n\n    get primaryContent() {\n        return this.linkedAsset?.embedded?.['http://ns.adobe.com/adobecloud/rel/primary'];\n    }\n\n    /**\n     * Update the link to match the given reference.\n     * @param {LinkReference} newLinkRef\n     */\n    async update(newLinkRef) {\n        if (!newLinkRef || !this._link) { return; }\n        // Update the local link reference, ensure we're working with a valid object reference.\n        newLinkRef = CCLibrariesUtils.parseLinkReference(newLinkRef);\n        return this._link?.updateWithLinkRef(newLinkRef);\n    }\n\n    get _resource() {\n        return {\n            reltype: 'http://ns.adobe.com/adobecloud/rel/primary'\n        };\n    }\n\n    /**\n     * @returns {LinkReference}\n     */\n    _getNewLinkRef() {\n        return this._link?.getNewAssetLinkRef(this.linkedAsset);\n    }\n\n    /** Asset references */\n\n    get assetId() {\n        return this.linkReference['repo:assetId'];\n    }\n\n    get repositoryId() {\n        return this.linkReference['repo:repositoryId'];\n    }\n\n    get documentId() {\n        return this.linkReference['stRef:documentID'];\n    }\n\n    get name() {\n        return this.linkReference['repo:name'];\n    }\n\n    get type() {\n        return this.linkReference['dc:format'];\n    }\n\n    get instanceId() {\n        return this.linkReference['stRef:instanceID'];\n    }\n\n    /** Fragment references */\n\n    get fragmentIdentifier() {\n        return this.linkReference['stRef:fromPart'];\n    }\n\n    get fragmentName() {\n        return this.linkReference['stRef:fromPartName'];\n    }\n\n    get fragmentInstanceId() {\n        return this.linkReference['stRef:fromPartInstanceID'];\n    }\n\n    get sourceRef() {\n        return this.linkReference['stRef:fromPartDerivedFrom'];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { Atom, when } from 'mobx';\nimport { wrapElement, wrapRepresentation, removeRepresentationFromCache } from './modelCache';\nimport appState from 'app/js/appState';\n\n/**\n * This is a wrapper over the AdobeLibraryRepresentation from the cc-libraries-api-js\n *\n * For documentation, see: https://git.corp.adobe.com/pages/ProjectCentral/cc-libraries-api-js/AdobeLibraryRepresentation.html\n *\n * NOTE: This model is observable, but the change listener is at the level of the element.\n * When a representation changes its contents, it is deleted and added anew to the element,\n * which is why the change notification was designed to fire at the element level.\n * Other changes to the representation will trigger a change notification on the element.\n */\n\nexport default class RepresentationModel {\n\n    constructor(representation) {\n        this._representation = representation;\n\n        // Register for notifications from the element, to know when the cached external link path changes\n        // There are no change events on representations - changing a representation will trigger a change event on the element.\n        this._changeAtom = new Atom('representationChange',\n            () => !this._representation.isDeletedLocally && this._representation.element.on('change', this._onChange),\n            () => this._representation.element.off('change', this._onChange)\n        );\n\n        // TODO: Remove me\n        // Register for notifications from the collection, to handle external link download progress\n        // (sync progress, even for external links, is stored on the collection)\n        const ccLibraries = appState.libraryManager.dangerouslyAccessCCLibraries();\n        this._syncAtom = ccLibraries._syncAtom;\n    }\n\n    _onChange = () => {\n        this._changeAtom.reportChanged();\n    }\n\n    _onSyncChange = () => {\n        // The collection can generate a lot of sync events while syncing, so we make sure that we only report a change here if\n        // the download progress actually did change for this representation!\n        const externalLinkDownloadProgress = this._representation.getExternalLinkDownloadProgress();\n        if (this._lastExternalLinkDownloadProgress !== externalLinkDownloadProgress) {\n            this._lastExternalLinkDownloadProgress = externalLinkDownloadProgress;\n            this._syncAtom.reportChanged();\n        }\n    }\n\n    get id() { return this._representation.id; }\n\n    get element() { return wrapElement(this._representation.element); }\n\n    get isWritable() { return this._representation.isWritable; }\n\n    get type() { return this._representation.type; }\n\n    get relationship() { return this._representation.relationship; }\n    set relationship(relationship) { this._representation.relationship = relationship; }\n\n    get width() { return this._representation.width; }\n    set width(width) { this._representation.width = width; }\n\n    get height() { return this._representation.height; }\n    set height(height) { this._representation.height = height; }\n\n    get isFullSize() { return this._representation.isFullSize; }\n    set isFullSize(isFullSize) { this._representation.isFullSize = isFullSize; }\n\n    get isPreferredThumbnail() { return this._representation.isPreferredThumbnail; }\n    set isPreferredThumbnail(isPreferredThumbnail) { this._representation.isPreferredThumbnail = isPreferredThumbnail; }\n\n    get contentLength() {\n        return this._representation.contentLength;\n    }\n    set contentLength(length) { this._representation.contentLength = length; }\n\n    get isDeletedLocally() { return this._representation.isDeletedLocally; }\n\n    get isExternalLink() { return this._representation.isExternalLink; }\n\n    get children() {\n        this._changeAtom.reportObserved();\n        return this._representation.children.map(wrapRepresentation);\n    }\n\n    get isCommitted() {\n        this._changeAtom.reportObserved();\n        return this._representation.isCommitted;\n    }\n\n    get committed() {\n        return new Promise(resolve => when(() => this.isCommitted, resolve));\n    }\n\n    isCompatibleType(type) { return this._representation.isCompatibleType(type); }\n\n    /* Custom Values */\n\n    getValue(namespace, key) { return this._representation.getValue(namespace, key); }\n\n    getValues() { return this._representation.getValues(); }\n\n    setValue(namespace, key, value, isMetadata) { // triggers a change\n        this._representation.setValue(namespace, key, value, isMetadata);\n    }\n\n    /* Content (data that gets stored in a component - i.e. in a file on disk) */\n\n    setContent(content, encoding, fileName, options = {}) {\n        return this._representation.setContent(content, encoding, fileName, options);\n    }\n\n    setContentFromPath(path, moveFile) {\n        return this._representation.setContentFromPath(path, moveFile);\n    }\n\n    setStagedContent(payload) {\n        return this._representation.setStagedContent(payload);\n    }\n\n    setContentFromURL(createLink, url, headers) {\n        return this._representation.setContentFromURL(createLink, url, headers);\n    }\n\n    getContentPath() {\n        return this._representation.getContentPath();\n    }\n\n    getCachedContentPath() {\n        this._changeAtom.reportObserved();\n        return this._representation.getCachedContentPath();\n    }\n\n    getContent() {\n        return this._representation.getContent();\n    }\n\n    getContentURL() { return this._representation.getContentURL(); }\n\n    getAuthenticatedContentURL() {\n        return this._representation.getAuthenticatedContentURL();\n    }\n\n    /* External Link */\n\n    testExternalLink() {\n        return new Promise((resolve, reject) => {\n            this._representation.testExternalLink((err, success) => err ? reject(err) : resolve(success));\n        });\n    }\n\n    clearCachedExternalLink() {\n        return this._representation.clearCachedExternalLink();\n    }\n\n    getCachedExternalLinkError() {\n        this._changeAtom.reportObserved();\n        return this._representation.getCachedExternalLinkError();\n    }\n\n    getExternalLinkDownloadProgress() {\n        this._syncAtom.reportObserved();\n        return this._representation.getExternalLinkDownloadProgress();\n    }\n\n    /* Nested child representations */\n\n    createChild(type) {\n        return wrapRepresentation(this._representation.createChild(type));\n    }\n\n    removeChild(representation) {\n        this._representation.removeChild(representation._representation); // Async but no cb\n        removeRepresentationFromCache(representation);\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n// There's a circular dependency here, but since this file is going away... whatever.\nimport 'app/js/environment';\nimport 'app/js/config/configuration';\nimport 'app/js/config/localSettings';\n\nimport RepresentationModel from './RepresentationModel';\nimport ElementModel from './ElementModel';\nimport GroupModel from './GroupModel';\nimport LibraryModel from './LibraryModel';\nimport appState from 'app/js/appState';\n\n/* The modelCache wraps an AdobeLibraryRepresentation/Element/Folder in its Model, and handles caching.\n * The purpose of the model cache is NOT to cache libraries for the API. The libraries returned from the API\n * are always going to be what's current on the filesystem.\n * For most models except those in Fred (which dont use the modelCache), there are two parallel sets of objects that need to be kept in sync -\n * the underlying objects that are not observable, but still stateful, and the observable mobx wrappers for these objects.\n * The model for the representation/element/library needs to be the same whenever returned by the API\n * -- otherwise Mobx will think that the observables keep on changing when it does dirty checking!\n * Thus, we keep a cache so they're wrapped the same way.\n * And since models can be instantiated from multiple places in the API, we need one central place to\n * cache them when they are instantiated. Hence the API's modelCache.\n *\n * BUG: Turns out that even though the models are the same, the new array of models that we return when getting a list of libraries,\n * elements, etc.,is always a new reference, and as such will always trigger a new render in that case (but only when mobx does dirty checking\n * -- i.e. after the respective change notification). This is a small performance issue.\n */\n\n// Registration of Document Assets Models\nconst documentAssetsContainers = {};\nexport const registerDocumentAssetsContainers = containers => Object.keys(containers).forEach(name => documentAssetsContainers[name] = containers[name]);\n\nlet _librariesCache; // libraries cached\nlet _libraryObjectToModelMap; // libraries cached (by object reference)\nlet _elementsByLibraryCache = {}; // elements cached { libraryId: { elementId: { element, representationsById } } }\nlet _groupsByLibraryCache = {}; // groups cached { libraryId: { groupId: group } }\n\nlet _assetsByDocumentCache = {}; // assets cached { libraryId: { assetId: { element, representationsById } } }\nlet _assetsContainerCache = {}; // DocumentAssetsContainer cached by local document id (XD only has 1 document, but future apps may have more) { libraryId: DocumentAssetsContainer }\nlet _groupsByDocumentCache = {}; // groups cached { libraryId: { groupId: group } }\n\n// nukes the entire cache. useful for when user changes.\nexport const clearCache = () => {\n    _librariesCache = undefined;\n    _libraryObjectToModelMap = undefined;\n    _elementsByLibraryCache = {};\n    _groupsByLibraryCache = {};\n};\nexport const clearDocumentCache = () => {\n    _assetsByDocumentCache = {};\n    _groupsByDocumentCache = {};\n    _assetsContainerCache = {};\n};\n\n/* Representations */\n\nconst _wrapRepresentation = (representation, elementsByLibraryCache, Model) => {\n    if (!representation) { return; }\n\n    const element = representation.element;\n    const elementId = element.id;\n    const library = element.library;\n    const libraryId = library.documentId || library.id;\n    const id = representation.id;\n\n    // Format of elementsCache: { elementId: { element: element, representationsById: {representationId: representation} } }\n    const elementsCache = elementsByLibraryCache[libraryId] = elementsByLibraryCache[libraryId] || {};\n    elementsCache[elementId] = elementsCache[elementId] || {};\n    const representationsCache = elementsCache[elementId].representationsById = elementsCache[elementId].representationsById || {};\n    if (!representationsCache[id] || representationsCache[id]._representation !== representation) {\n        representationsCache[id] = new Model(representation);\n    }\n\n    return representationsCache[id];\n};\n\n// Clean out irrelevant cached representations for an element\nconst _cleanRepresentationsCache = (element, elementsByLibraryCache) => {\n    if (!element) { return; }\n    const libraryId = element.library.documentId || element.library.id;\n    const elementsCache = elementsByLibraryCache[libraryId];\n    const elementsCacheEntry = elementsCache && elementsCache[element.id];\n    const representationsCache = elementsCacheEntry && elementsCacheEntry.representationsById;\n    if (representationsCache) {\n        // Copy over all the cache entries for the representations that still exist (filtering out those that were deleted)\n        const newRepresentationsCache = {};\n        element.representations.forEach(rep => newRepresentationsCache[rep.id] = representationsCache[rep.id]);\n        elementsCacheEntry.representationsById = newRepresentationsCache;\n    }\n};\n\nexport const wrapRepresentation = representation => _wrapRepresentation(representation, _elementsByLibraryCache, RepresentationModel);\nexport const cleanRepresentationsCache = element => _cleanRepresentationsCache(element, _elementsByLibraryCache);\n\nexport const wrapDocumentRepresentation = representation => _wrapRepresentation(representation, _assetsByDocumentCache, documentAssetsContainers.DocumentRepresentation);\nexport const cleanDocumentRepresentationsCache = element => _cleanRepresentationsCache(element, _assetsByDocumentCache);\n\n// Remove this specific representation from the cache\nexport const removeRepresentationFromCache = representation => {\n    const element = representation && representation.element;\n    const library = element && element.library;\n    const elementsCache = library && _elementsByLibraryCache[library.documentId || library.id];\n    const representationsCache = elementsCache && elementsCache[element.id] && elementsCache[element.id].representationsById;\n\n    if (representationsCache) {\n        delete representationsCache[representation.id];\n    }\n};\n\n// Remove all cached representations for an element.\nexport const removeRepresentationsCache = element => {\n    const library = element && element.library;\n    const elementsCache = library && _elementsByLibraryCache[library.documentId || library.id];\n    const elementsCacheEntry = elementsCache && elementsCache[element.id];\n    if (elementsCacheEntry) {\n        delete elementsCacheEntry.representationsById;\n    }\n};\n\n/* Elements or Assets */\n\nconst _wrapElement = (element, elementsByLibraryCache, Model) => {\n    if (!element) { return; }\n\n    // Format of elementsCache: { elementId: { element: element, representationsById: {} } }\n    const parentId = element.library.documentId || element.library.id;\n    const elementsCache = elementsByLibraryCache[parentId] = elementsByLibraryCache[parentId] || {};\n    const id = element.id;\n    elementsCache[id] = elementsCache[id] || {};\n    if (!elementsCache[id].element || elementsCache[id].element._element !== element) {\n        elementsCache[id].element = new Model(element);\n    }\n\n    return elementsCache[id].element;\n};\n\n// Remove element and corresponding representations from cache\nconst _removeElementFromCache = (element, elementsByLibraryCache) => {\n    if (!element) { return; }\n    const parentId = element.library.documentId || element.library.id;\n    const elementsCache = elementsByLibraryCache[parentId];\n    if (elementsCache) {\n        delete elementsCache[element.id];\n    }\n};\n\n// Clean up any elements/representations that should no longer be cached for this library\nconst _cleanElementsCache = (library, elementsByLibraryCache) => {\n    if (!library) { return; }\n    // a document library may have a native id field that is not actually unique. we use the doc id as a unique id instead.\n    const parentId = library.documentId || library.id;\n    const elementsCache = elementsByLibraryCache[parentId];\n    if (elementsCache) {\n        // Copy over all the cache entries for the elements that still exist (filtering out those that were deleted)\n        const newElementsCache = {};\n        library.elements.forEach(element => newElementsCache[element.id] = elementsCache[element.id]);\n        elementsByLibraryCache[parentId] = newElementsCache;\n    }\n};\n\nexport const wrapElement = element => _wrapElement(element, _elementsByLibraryCache, ElementModel);\nexport const removeElementFromCache = element => _removeElementFromCache(element, _elementsByLibraryCache);\nexport const cleanElementsCache = library => _cleanElementsCache(library, _elementsByLibraryCache);\n\nexport const wrapDocumentElement = element => _wrapElement(element, _assetsByDocumentCache, documentAssetsContainers.DocumentElement);\nexport const removeDocumentElementFromCache = element => _removeElementFromCache(element, _assetsByDocumentCache);\nexport const cleanDocumentElementsCache = library => _cleanElementsCache(library, _assetsByDocumentCache);\n\n/* Groups Caching for Elements or Assets */\n\nconst _wrapGroup = (group, groupsByParentCache, Model) => {\n    if (!group) { return; }\n    const library = group.library;\n    const parentId = library.documentId || library.id;\n    const groupsCache = groupsByParentCache[parentId] = groupsByParentCache[parentId] || {};\n    const id = group.id;\n\n    if (!groupsCache[id] || groupsCache[id]._group !== group) {\n        groupsCache[id] = new Model(group);\n    }\n\n    return groupsCache[id];\n};\n\nconst _removeGroupFromCache = (group, groupsByParentCache) => {\n    if (!group) { return; }\n    const library = group.library;\n    const parentId = library.documentId || library.id;\n    const groupsCache = groupsByParentCache[parentId];\n    if (groupsCache) {\n        delete groupsCache[group.id];\n    }\n};\n\n// Clean up any groups that should no longer be cached for this library\n// @param { LibraryModel | DocumentAssetsContainer } parent\nconst _cleanGroupsCache = (parent, groupsByParentCache) => {\n    if (!parent) { return; }\n    const parentId = parent.documentId || parent.id;\n    const groupsCache = groupsByParentCache[parentId];\n    if (groupsCache) {\n        // Copy over all the cache entries for the groups that still exist (filtering out those that were deleted)\n        const newGroupsCache = {};\n        // TODO: We need to do this for _all_ groups, so need a parent.getAllGroups() API\n        parent.getGroups().forEach(group => newGroupsCache[group.id] = groupsCache[group.id]);\n        groupsByParentCache[parentId] = newGroupsCache;\n    }\n};\n\nexport const wrapGroup = group => _wrapGroup(group, _groupsByLibraryCache, GroupModel);\nexport const removeGroupFromCache = group => _removeGroupFromCache(group, _groupsByLibraryCache);\nexport const cleanGroupsCache = group => _cleanGroupsCache(group, _groupsByLibraryCache);\n\nexport const wrapDocumentGroup = group => _wrapGroup(group, _groupsByDocumentCache, documentAssetsContainers.DocumentGroup);\nexport const removeDocumentGroupFromCache = group => _removeGroupFromCache(group, _groupsByDocumentCache);\nexport const cleanDocumentGroupsCache = group => _cleanGroupsCache(group, _groupsByDocumentCache);\n\n/* Document Libraries */\n\n// Unlike the ccLibraries container, the assetsContainer container needs caching b/c the model\n// is accessible not just on the libraryManager but also on the asset. There's no clean up though\n// because there's only ever 1.\nexport const wrapDocumentAssetsContainer = (assetsContainer) => {\n    if (!assetsContainer) { return; }\n\n    // The XD LibraryFolder doesn't have an id, so we use the documentId for a convenient unique identifier\n    const documentId = assetsContainer.documentId;\n    if (!_assetsContainerCache[documentId] || _assetsContainerCache[documentId]._library !== assetsContainer) {\n        _assetsContainerCache[documentId] = new documentAssetsContainers.DocumentAssetsContainer(assetsContainer);\n    }\n\n    return _assetsContainerCache[documentId];\n};\n\n/* Libraries */\n\nexport const wrapLibrary = library => {\n    if (!library) { return; }\n\n    const libraryId = library.id;\n    const librariesCache = _librariesCache = _librariesCache || {};\n\n    // Maintaining this lookup keeps this operation O(1)\n    const libraryObjectToModelMap = _libraryObjectToModelMap = _libraryObjectToModelMap || new Map();\n\n    // If the library is cached by reference but not ID, we need to cache the library by the new ID\n    if (libraryObjectToModelMap.has(library)) {\n        librariesCache[libraryId] = libraryObjectToModelMap.get(library);\n    }\n\n    // if it's not already cached, instantiate new library model and cache\n    if (!librariesCache[libraryId] || librariesCache[libraryId]._library !== library) {\n        const model = new LibraryModel(library);\n        libraryObjectToModelMap.set(library, model);\n        librariesCache[libraryId] = model;\n    }\n\n    return librariesCache[libraryId];\n};\n\n// Clean up the cache after a sync, in case a library was deleted on the server\nexport const cleanLibrariesCache = () => {\n    const librariesCache = _librariesCache;\n    const libraryObjectToModelMap = _libraryObjectToModelMap;\n\n    if (librariesCache && libraryObjectToModelMap) {\n        // Copy over all the cache entries for the libraries that still exist (filtering out those that were deleted)\n        const newLibrariesCache = {};\n        const newLibraryObjectToModelMap = new Map();\n\n        const ccLibraries = appState.libraryManager.dangerouslyAccessCCLibraries();\n\n        // TODO: Temp hack for tests\n        Object.entries(_librariesCache).forEach(([ libraryId, library ]) => {\n            if (library && !library.isMockBoundToCCLibraries) {\n                newLibrariesCache[libraryId] = library;\n            }\n        });\n\n        for (const [ library, model ] of _libraryObjectToModelMap.entries()) {\n            if (!library.isMockBoundToCCLibraries) {\n                newLibraryObjectToModelMap.set(library, model);\n            }\n        }\n        // end hack\n\n        ccLibraries._ccLibraries.libraries.forEach(library => {\n            newLibrariesCache[library.id] = librariesCache[library.id];\n            newLibraryObjectToModelMap.set(library, libraryObjectToModelMap.get(library));\n        });\n\n        _librariesCache = newLibrariesCache;\n        _libraryObjectToModelMap = newLibraryObjectToModelMap;\n    }\n};\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2020 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\n/* global PLUGIN_VERSION */\n\nif (window.performance) {\n    window.performance.mark('ccac:libraries-panel:eval:begin'); // Always the first thing to run to accurately measure\n}\n\nconst { basename } = require('path');\nconst { init, makeBrowserOfflineTransport, makeFetchTransport } = require('@sentry/browser');\nconst { CaptureConsole, RewriteFrames } = require('@sentry/integrations');\nconst { inferEnvironment } = require('@ccx-public/component-shared/sentry');\n\nconst inAppStackPattern = process.env.NODE_ENV === 'development'\n    ? /webpack-internal:\\/\\/\\/\\.\\/app\\//\n    : /(?!.*sentry.*).*libraries.*/; // TODO: Ideally we'd scope to \"cclibraries\", this requires updating CDN path from \"libraries\"\n\nconst integrations = [\n    new RewriteFrames({\n        iteratee: (frame) => {\n            // Check if frame is in app or external\n            const filename = frame.filename?.toLowerCase() || '';\n            const inlineScript = !filename.match(/.jsx?$/);\n            frame.in_app = !inlineScript && inAppStackPattern.test(filename);\n\n            // Rewrite CDN, UXP, and CEP paths to root to match against uploaded source maps at root.\n            // - /libraries/4.2.63/remoteEntry-<hash>.js -> ~/remoteEntry-<hash>.js\n            // - /…/Adobe/UXP/extensions/CCLibraries4.4.240 3/main-<hash>.js -> ~/main-<hash>.js\n            // - /…/Adobe/CEP/extensions/CCLibrariesPanel_CCX_Desktop_Valet/main-<hash>.js -> ~/main-<hash>.js\n            frame.filename = `/${basename(frame.filename)}`;\n\n            return frame;\n        }\n    })\n];\n\nif (process.env.NODE_ENV === 'development') {\n    integrations.push(new CaptureConsole({\n        levels: [\n            'error', // For capturing React \"Warning\" errors in development. Unrelated errors are not ignored.\n            'warn' // For capturing React warnings in development. Unrelated warnings are ignored below in beforeSend.\n        ]\n    }));\n}\n\ninit({\n    environment: inferEnvironment({\n        version: PLUGIN_VERSION,\n        hostname: window?.location.hostname,\n        environment: process.env.NODE_ENV,\n    }),\n    dsn: 'https://cf682462403b43869f5daeeee58f9d45@o1383653.ingest.sentry.io/4504000583761920',\n    release: `cc-libraries-panel@${PLUGIN_VERSION}`,\n    tracesSampleRate: 1.0,\n    integrations,\n    ignoreErrors: [ /Failed to fetch/ ], // The only error ignored client-side, See: https://docs.sentry.io/product/data-management-settings/filtering/\n    transport: makeBrowserOfflineTransport(makeFetchTransport),\n    beforeBreadcrumb(breadcrumb, hint) {\n        if (breadcrumb.category === 'ui.click') {\n            if (hint) {\n                if (hint.event?.target?.dataset?.testId) {\n                    breadcrumb.message = breadcrumb.message + `[test-id=${hint.event.target.dataset.testId}]`;\n                }\n            }\n        }\n\n        if (breadcrumb.category === 'xhr' || breadcrumb.category === 'fetch') {\n            if (hint) {\n                const headers = (hint.xhr?._cdtXHR?.headers) // UXP\n                    || (Object.fromEntries(hint.response?.headers?.entries() || [])) // Web\n                    || {}; // None\n\n                breadcrumb.data['x-request-id'] = headers['X-Request-Id'] || headers['x-request-id'];\n            }\n        }\n\n        return breadcrumb;\n    },\n    beforeSend(event) {\n        if (event.exception) {\n            const frames = event.exception.values[0]?.stacktrace?.frames || [];\n\n            if (!frames.some(frame => frame.in_app)) {\n                return null; // Ignore all exceptions without a frame originating from this component\n            }\n        }\n\n        const message = event.message?.toLowerCase();\n\n        if (\n            event.level !== 'error'\n            && !message?.includes('reactjs.org')\n            && !message?.includes('fb.me')\n            && !message?.includes('failed prop type')\n        ) {\n            return null; // Ignore all warnings not from React. React includes a link for more info in all warnings\n        }\n\n        return event;\n    }\n});\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport {\n    action,\n    observable,\n} from 'mobx';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport { searchStockAssets } from 'app/js/interface/adobeStockRest';\nimport localSettings from 'app/js/config/localSettings';\nimport configuration from 'app/js/config/configuration';\nimport { debounce } from 'app/js/utils/promiseUtils';\nimport { launchSearchStockURL, launchFindSimilarURL } from 'app/js/utils/linkUtils';\nimport metrics from 'app/js/interface/metrics';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport BrowserUtils from 'app/js/utils/browserUtils';\nimport BaseSearchState from 'app/js/state/BaseSearchState';\n\n/**\n * Controls the delays between customer entering a search query\n * and the time before a search kicks off.\n */\nconst SEARCH_DEBOUNCE = 200;\n\n/**\n * Wraps the Stock Search with a context so that we can track the search\n * requests as they are returned and ignore the ones that are stale.\n *\n * @param {number} context\n * @param {string} userId\n * @param {string} searchText\n * @param {Object} findSimilarData\n * @param {Object} searchOptions\n */\nconst searchStockWithContext = (context, userId, searchText, findSimilarData, searchOptions) => {\n    return searchStockAssets(userId, searchText, findSimilarData, searchOptions, configuration.STOCK_SEARCH_RESULT_SIZE, true)\n        .then((results) => [ context, results ])\n        .catch((error) => Promise.reject([ context, error ]));\n};\n\n/**\n * Wraps the Stock Search with a context so that we can track the search\n * requests as they are returned and ignore the ones that are stale. Debounce the search\n * so that we only issue the calls after a delay to not send too many requests as the customer is typing.\n *\n * @param {number} context\n * @param {string} userId\n * @param {string} searchText\n * @param {Object} findSimilarData\n * @param {Object} searchOptions\n */\nconst debouncedSearchStockWithContext = debounce(SEARCH_DEBOUNCE, searchStockWithContext);\n\n/**\n * Holds the state for the Stock Search React View. Provides observable\n * properties relevant to Stock Search and ensures that search requests\n * get kicked off and processed.\n */\nexport default class StockSearchState extends BaseSearchState {\n    @observable\n    _isLoading = false;\n\n    @observable.ref\n    _searchResults = [];\n\n    @observable\n    _hasSearchFailed = false;\n\n    @observable\n    _isOnLine = BrowserUtils.isOnline;\n\n    _currentSearchContext = 0;\n\n    get isLoading() {\n        return this._isLoading;\n    }\n\n    get searchResults() {\n        return this._searchResults;\n    }\n\n    get searchResultsCount() {\n        return this._searchResults.length;\n    }\n\n    get hasSearchFailed() {\n        return this._hasSearchFailed;\n    }\n\n    get isOnLine() {\n        return this._isOnLine;\n    }\n\n    get findSimilarData() {\n        return this.viewState.getFindSimilarData();\n    }\n\n    get filterTypeOptions() {\n        return AdobeStockUtils.getSearchUIOptions();\n    }\n\n    @action\n    init() {\n        for (const searchOption of this.viewState.getStockSearchOptionValuesArray()) {\n            this._searchTypeOptions.set(searchOption, true);\n        }\n\n        window.addEventListener('online', this._handleOnLineTransition);\n        window.addEventListener('offline', this._handleOnLineTransition);\n    }\n\n    /**\n     * Perform the search given the current search context. Will not fire off\n     * Stock Search network requests if Stock search mode is not active.\n     *\n     * In addition ensures that if there are multiple search requests in flight,\n     * only the one the most recent one (corresponding to the most recently issued\n     * search) is accepted as the search result.\n     *\n     * Attempting to invoke the search when not in Stock search mode will ignore\n     * the search request.\n     *\n     * @param {boolean} shouldDebounce whether the search request is debounced.\n     */\n    @action.bound\n    search(shouldDebounce = true) {\n        if (!this.viewState.isStockSearchMode()) {\n            return;\n        }\n\n        this._isLoading = true;\n        this._hasSearchFailed = false;\n        this._searchResults = [];\n        this._currentSearchContext = this._currentSearchContext + 1;\n\n        const userId = libraryManager.userId;\n        const searchText = this.viewState.getSearchText();\n        const findSimilarData = this.viewState.getFindSimilarData();\n\n        const invokeSearch = shouldDebounce ? debouncedSearchStockWithContext : searchStockWithContext;\n        invokeSearch(this._currentSearchContext, userId, searchText, findSimilarData, this._searchTypeOptions.toJS())\n            .then(this._handleSearchSuccess)\n            .catch(this._handleSearchFailure);\n    }\n\n    /**\n     * Update the search results if the returning request is for the most recent search\n     * that was requested. This is done by ensuring the the context parameter of the\n     * processed search is the same as the current search context.\n     *\n     * @param {Array} searchContext tuple of searchContext for the request and the results\n     */\n    @action.bound\n    _handleSearchSuccess([ searchContext, results ]) {\n        if (searchContext !== this._currentSearchContext || !this.viewState.isStockSearchMode()) {\n            return;\n        }\n\n        // Cache-buster - prevent browser caching of the search result thumbnails due to a CEP bug\n        // (CCXC-3956 - Sometimes broken thumbnails are shown in Stock Search results in Libraries Panel)\n        results.forEach(result => result.thumbnail_url = result.thumbnail_url ? `${result.thumbnail_url}?_uncache=${Math.random()}` : '');\n\n        if (results.length === 0) {\n            metrics.reportStockEvent('Search', 'render', 'no-results');\n        }\n\n        this._searchResults = results;\n        this._isLoading = false;\n    }\n\n    /**\n     * Update the state with the error condition. This is done by ensuring the the context parameter of the\n     * processed search is the same as the current search context.\n     *\n     * @param {Array} searchContext tuple of searchContext for the request and the error details\n     */\n    @action.bound\n    _handleSearchFailure([ searchContext, error_code ]) {\n        if (searchContext !== this._currentSearchContext || !this.viewState.isStockSearchMode()) {\n            return;\n        }\n\n        metrics.reportStockEvent('Search', 'render', 'error', { event: { error_code } });\n\n        this._isLoading = false;\n        this._hasSearchFailed = true;\n    }\n\n    @action.bound\n    _handleOnLineTransition() {\n        this._isOnLine = BrowserUtils.isOnline;\n    }\n\n    dispose() {\n        window.removeEventListener('online', this._handleOnLineTransition);\n        window.removeEventListener('offline', this._handleOnLineTransition);\n    }\n\n    /**\n     * Changes the search option and triggers a search with the new search options\n     *\n     * @param {string} option the search option that needs to be changed\n     * @param {boolean} state the state to which the search option needs to be changed\n     */\n    @action\n    setSearchOption(option, state) {\n        if (state) {\n            this.clearFilters();\n        }\n        this._searchTypeOptions.set(option, state);\n        this._persistSearchOptions(this._searchTypeOptions);\n        metrics.reportStockEvent('Search', 'click', state ? 'add-filter' : 'remove-filter', { ui: { filter: option } });\n        this.search(false);\n    }\n\n    /**\n     * @param {Map} searchOptions the search option Map to be serialized\n     * @private\n     */\n    _persistSearchOptions(searchOptions) {\n        const serializedOptions = Array.from(searchOptions.entries())\n            .filter(([ , value ]) => value)\n            .map(([ option ]) => option);\n        localSettings.setValue('searchOptionValues', serializedOptions);\n    }\n\n    /**\n     * Launch a find similar search on the Stock web site depending on the type of current search the\n     * customer is viewing.\n     */\n    searchOnWeb() {\n        const { id } = this.findSimilarData || {};\n        if (id) {\n            launchFindSimilarURL(id, this._searchTypeOptions.toJS());\n        } else {\n            launchSearchStockURL(this.viewState.getSearchText(), this._searchTypeOptions.toJS());\n        }\n    }\n\n    clearFilters() {\n        super.clearFilters();\n        this.search();\n    }\n}\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2013 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\nimport { computed, observable, reaction } from 'mobx';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport { addListenerManager } from 'app/js/utils/listenerUtils';\nimport viewState from './viewState';\nimport GroupModel from 'app/js/models/GroupModel';\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport { getAllAncestors } from '../utils/groupUtils';\n\n// Map the role section to a method that determines if an element would be in that section\nconst ROLE_SECTIONS = [ configuration.ROLE_LOGO ];\n\n/**\n * State for selection of library elements.\n */\nexport class ElementSelectionState {\n\n    _listenerManager = addListenerManager();\n\n    // Internally, we keep the selected elements array as an observable. We\n    // _always_ replace this._selectedElements whenever it changes (never mutating the array),\n    // which means that we only need mobx to track the reference.\n    @observable.ref _selectedElements = [];\n    @observable.ref _itemPendingScroll;\n    @observable.ref _focusedElement;\n    @observable.ref _disableScrollEasing;\n\n    /**\n     * Check if an element is selected.\n     *\n     * @param {ElementModel} element\n     * @returns {boolean} whether the element is selected\n     */\n    isSelected(element) {\n        return this.selection.includes(element);\n    }\n\n    /**\n     * Check if an element is focused.\n     *\n     * @param {ElementModel} element\n     * @returns {boolean} whether the element is focused\n     */\n    isFocused(element) {\n        return this._focusedElement === element;\n    }\n\n    /**\n     * Array of selected elements.\n     */\n    @computed get selection() {\n        // TODO: There is currently a bug in the API where isDeletedLocally doesn't get set correctly\n        // if the change was made outside of the current client, therefore we also check .removed.\n        // That said, this is also not a complete solution as it'd fail for permanently deleted elements.\n        // Just check isDeletedLocally, when CCXC-3598 is fixed.\n        if (viewState.isRemovedElementsMode()) {\n            return this._selectedElements.filter(element => !element.isDeletedLocally && element.removed);\n        }\n        return this._selectedElements.filter(element => !element.isDeletedLocally && !element.removed);\n    }\n\n    // Returns all elements (not just selected ones) in the current view.\n    @computed get _allElements() {\n        if (viewState.isSearchMode() || viewState.isDocumentSearchType() || viewState.librariesSearchState.hasSelectedTypeFilters) {\n            return viewState.librariesSearchState.searchResults;\n        }\n        const library = this.selection[0].library;\n        if (viewState.isRemovedElementsMode()) {\n            return library.removedElements;\n        }\n        return library.elements;\n    }\n\n    // Returns all visible elements (not just selected ones) ordered as they appear in the current view.\n    @computed get _allElementsInViewOrder() {\n        if (viewState.isGroupView() && !viewState.librariesSearchState.hasSelectedTypeFilters) {\n            return viewState.getLibraryElementsInViewOrder(this.selection[0].library);\n        }\n        return viewState.getElementsInViewOrder(this._allElements);\n    }\n\n    /**\n     * Set the scroll to the supplied element.\n     *\n     * @param {ElementModel} element Element to scroll,\n     */\n    setItemPendingScroll(element) {\n        this._itemPendingScroll = element;\n    }\n\n    /**\n     * Ensures that the given element is selected - if it's already selected, nothing will happen.\n     * If it isn't selected, the selection will be set to just the given element.\n     *\n     * @param {ElementModel} element\n     */\n    ensureSelection(element) {\n        if (element && !this.selection.includes(element)) {\n            this.setSelection(element);\n        }\n    }\n\n    /**\n     * Set the focus to the supplied element. ignore focus if element is selected.\n     *\n     * @param {ElementModel} element Element to focus,\n     * @param {boolean} doScroll Scroll to the element?\n     */\n    setFocusedElement(element, doScroll = false) {\n        this._focusedElement = element;\n        if (doScroll) {\n            this._itemPendingScroll = element;\n        }\n    }\n\n    /**\n     * Set the selection to be precisely the given element(s).\n     *\n     * @param {ElementModel|ElementModel[]} element Element to select, or an array of elements\n     * @param {boolean} [doScroll=false] Scroll to the element?\n     * @param {boolean} [forceExpand=true] Manually expand any collapsed section to which this element belongs\n     */\n    setSelection(element, doScroll = false, forceExpand = true) {\n        const expandSection = element => {\n            // Ensure the element's visibility when selected by opening whatever active section(s) it's in.\n            if ([ 'type', 'role' ].includes(viewState.viewByState)) {\n                // If we are viewing by role, we want to map some of the types to their respective roles if they meet the criteria for that role\n                const collapsedType = this._getElementSection(element);\n                viewState.setTypeCollapsed(collapsedType, false);\n            } else {\n                const group = element.getGroups()[0];\n                if (!group) { return; }\n                const groups = [ ...getAllAncestors(group), group ];\n                if (!groups.length) { return; }\n                groups.forEach(group => viewState.setGroupCollapsed(group.id, false));\n            }\n        };\n\n        const setHeader = () => {\n            if (environment.setHeader) {\n                environment.setHeader();\n            }\n        };\n\n        element = element || [];\n        // Handle the case where it's an array of elements\n        // For example, this is used with 1 or more Symbol elements\n        if (Array.isArray(element)) {\n            this._selectedElements = element;\n            delete this._lastSelectedElement;\n            if (doScroll) {\n                // The top-most element should be visible so make sure we have them in the right order.\n                element = viewState.getElementsInViewOrder(element);\n                this._itemPendingScroll = element[0];\n            }\n            forceExpand && element.forEach(expandSection);\n            setHeader();\n            return;\n        }\n        forceExpand && expandSection(element);\n\n        this._selectedElements = [ element ];\n        this._lastSelectedElement = element;\n        this._lastSelectedElementWithShift = undefined;\n        this._focusedElement = undefined;\n\n        setHeader();\n\n        if (doScroll) {\n            this._itemPendingScroll = element;\n        }\n    }\n\n    _getElementSection = element => {\n        const { roles, type } = element;\n        if (viewState.viewByState !== 'role' || !roles.length) { return type; }\n        return roles.find(role => ROLE_SECTIONS.includes(role.usage))?.usage ?? type;\n    }\n\n    /**\n     * Expand the selection range up to the element (i.e. shift-clicking on the element).\n     * Starting with a single element selected, if you shift-click on a different element, all the elements\n     * in between are also selected. The first element is called the pivot, so if you shift-click again,\n     * the selection is always adjusted relative to the pivot.\n     *\n     * If any categories are collapsed, and the selection spans a collapsed category, it will be expanded.\n     *\n     * @param {ElementModel} element\n     * @param {Bool} doScroll\n     * @param {Bool} selectingEntireGroup if true, there is additional logic to decide pivot\n     * @param {boolean} forceExpand\n     */\n    setSelectionRange(element, doScroll = false, selectingEntireGroup = false, forceExpand = true) {\n        // If there's nothing selected already, just select the element.\n        if (this.selection.length === 0) {\n            this.setSelection(element);\n            return;\n        }\n\n        // Get the elements in the order they'll be visible in the view\n        const elementsInViewOrder = this._allElementsInViewOrder;\n\n        // Find the pivot - this is the element that the selection range is relative to.\n        // It's normally the last selected element, but if we don't know that, we pick the last element in the selection\n        let pivot;\n        const index = elementsInViewOrder.indexOf(element);\n        const lastInSelection = this.selection.map(element => elementsInViewOrder.indexOf(element)).reduce((x, y) => Math.max(x, y), 0);\n        if (selectingEntireGroup) {\n            const firstInSelection = this.selection.map(element => elementsInViewOrder.indexOf(element)).reduce((x, y) => Math.min(x, y), elementsInViewOrder.length - 1);\n            pivot = index < firstInSelection ? lastInSelection : firstInSelection;\n        } else {\n            pivot = this._lastSelectedElement\n                ? elementsInViewOrder.indexOf(this._lastSelectedElement)\n                : lastInSelection;\n        }\n        this._selectedElements = index < pivot\n            ? elementsInViewOrder.slice(index, pivot + 1)\n            : elementsInViewOrder.slice(pivot, index + 1);\n\n        // Check that all the elements in the selection are visible (i.e. expand any collapsed categories as needed):\n        forceExpand && this.selection.forEach(element => {\n            if (viewState.isElementSectionCollapsed(element)) {\n                viewState.setTypeCollapsed(element.type, false);\n            }\n        });\n\n        this._lastSelectedElementWithShift = element;\n\n        if (doScroll) {\n            this._itemPendingScroll = element;\n        }\n    }\n\n    /**\n     * Clear the selection. If you pass in an array of elements, it'll _only_ clear elements in that array\n     * from the selection.\n     *\n     * @param {ElementModel[]} [elements] Array of elements to clear the selection of.\n     */\n    clearSelection(elements) {\n        if (this.selection.length === 0) {\n            return;\n        }\n\n        this._selectedElements = elements ? this.selection.filter(element => !elements.includes(element)) : [];\n        this._lastSelectedElementWithShift = undefined;\n        this._focusedElement = undefined;\n        delete this._lastSelectedElement;\n    }\n\n    /**\n     * Toggles the selection state for the given element.\n     *\n     * @param {ElementModel} element\n     */\n    toggleSelection(element) {\n        if (!element) {\n            return;\n        }\n\n        if (this.isSelected(element)) {\n            this._selectedElements = this.selection.filter(e => e !== element);\n            this._lastSelectedElement = undefined;\n        } else {\n            this._selectedElements = this.selection.concat([ element ]);\n            this._lastSelectedElement = element;\n        }\n        // Remove focus from the element if selection in changed\n        this._focusedElement = undefined;\n    }\n\n    /**\n     * Reveals (and selects) the given elements in the library\n     * All elements must belong to the same library.\n     * @param {ElementModel[]} elements\n     */\n    revealElements(elements) {\n        if (!elements || !elements.length) { return; }\n\n        const library = elements[0].library;\n        const canRevealElements = elements.every(element => element.library === library);\n\n        if (!canRevealElements) { return; }\n\n        if (!library.isDocumentAssets && viewState.isDocumentSearchType()) {\n            // Need to make sure we switch out of document assets search type before switching to show an element in a non document assets library\n            viewState.setSearchType('library');\n        }\n\n        viewState.resetMode();\n        libraryManager.currentLibrary = library;\n\n        // We set the selection in a timeout, since this may be triggered by a click event which\n        // would also clear the selection - using a timeout makes sure that anything that would clear\n        // the selection gets chance to trigger first, so it won't override us!\n        setTimeout(() => {\n            this.setSelection(elements, true);\n        }, environment.hasUXPRevealElementBug ? 500 : 0);\n    }\n\n    /**\n     * Reveals (and selects) the given element in the library\n     * @param {ElementModel} element\n     */\n    revealElement(element) {\n        if (!element) { return; }\n        return this.revealElements([ element ]);\n    }\n\n    /**\n     * Reveals the given group in the library\n     *\n     * @param {GroupModel} group\n     * @param {boolean} [snapToGroup=false]\n     */\n    revealGroup(group, snapToGroup = false) {\n        if (!group) {\n            return;\n        }\n\n        viewState.setCurrentSection(group.id || group);\n        this.setItemPendingScroll(group);\n\n        const ancestors = getAllAncestors(group, true);\n        ancestors.forEach(group => {\n            if (viewState.isGroupCollapsed(group.id)) {\n                viewState.setGroupCollapsed(group.id, false);\n            }\n        });\n\n        if (snapToGroup) {\n            this._disableScrollEasing = true;\n\n            setTimeout(() => {\n                this._disableScrollEasing = false;\n            }, 0);\n        }\n    }\n\n    /**\n     * Item that we should be scrolling to, in the UI. The idea is that we always ensure that the last\n     * selected item is visible at the time we select it.\n     * The item can be an element or a group.\n     *\n     * @returns {ElementModel|GroupModel} item to scroll to.\n     */\n    get itemPendingScroll() {\n        return this._itemPendingScroll;\n    }\n\n    /**\n     * Item that was last selected using shift via setSelectionRange()\n     *\n     * @returns {ElementModel} item selected via shift\n     */\n    get lastSelectedElementWithShift() {\n        return this._lastSelectedElementWithShift;\n    }\n\n    /**\n     * Item that is in the current focus\n     *\n     * @returns {ElementModel} item selected via shift\n     */\n    get currentFocusedElement() {\n        return this._focusedElement;\n    }\n\n    /**\n     * Clears the pending scroll-to item - this should be called by the view after it's been revealed,\n     * so we don't keep on trying to reveal the same item!\n     */\n    clearItemPendingScroll() {\n        this._itemPendingScroll = undefined;\n    }\n\n    @computed get scrollToAlignment() {\n        if (this._itemPendingScroll instanceof GroupModel || this._itemPendingScroll === configuration.UNGROUPED_GROUP || typeof this._itemPendingScroll === 'string') {\n            return configuration.currentProduct.config.groupScrollAlignment || 'auto';\n        }\n\n        return 'auto';\n    }\n\n    // Backwards compatibility for old listeners, which can be expressed in terms of reactions.\n    // Note that we return a function that you can call, to stop listening.\n    addSelectionChangedListener(callback) {\n        return reaction(() => this.selection, selection => {\n            callback(selection);\n        });\n    }\n\n    /**\n     * Should we ease the scrolling of the LibraryContentsView\n     */\n    @computed get shouldEaseScrolling() {\n        return !this._disableScrollEasing;\n    }\n}\n\nexport default new ElementSelectionState();\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2021 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\nimport { computed, observable } from 'mobx';\nimport { addListenerManager } from 'app/js/utils/listenerUtils';\nimport { getAllAncestors, getAllDescendantGroups, minimumCommonAncestor } from 'app/js/utils/groupUtils';\nimport viewState from 'app/js/state/viewState';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\n\n/**\n * State for selection of library groups\n */\nexport class GroupSelectionState {\n\n    _listenerManager = addListenerManager();\n\n    // Internally, we keep the selected group array as an observable. We\n    // _always_ replace this._selectedGroups whenever it changes (never mutating the array),\n    // which means that we only need mobx to track the reference.\n    @observable.ref _selectedGroups = [];\n\n    /**\n     * Returns true if the passed in group is currently selected\n     * @param {GroupModel} desiredGroup\n     * returns {Boolean} true if group is selected\n     */\n    isSelected(desiredGroup) {\n        return !!this.groupSelection.find(group => group === desiredGroup);\n    }\n\n    /**\n     * Add the passed in group to the selection, optionally select all descendant groups with boolean\n     * @param {GroupModel} group\n     * @param {Bool} includeDescendants\n     */\n    setSelection(group, includeDescendants = true) {\n        if (!group) {\n            return;\n        }\n\n        if (this.groupSelection.length > 0) {\n            this.clearSelection();\n        }\n        const groupsToChange = includeDescendants ? getAllDescendantGroups(group, true) : [ group ];\n        this._selectedGroups = this.groupSelection.concat(groupsToChange);\n    }\n\n    /**\n     * Adds the passed in group to the selection range, as well as others that fall between already selected groups\n     * @param {GroupModel} group the group you want to include in the range of selected elements\n     */\n    setSelectionRange(group) {\n        if (this.groupSelection.length === 0) {\n            this.setSelection(group);\n        }\n\n        const groupsInViewOrder = viewState.groupsInViewOrder;\n        const index = groupsInViewOrder.indexOf(group);\n        let pivot = this.groupSelection.map(element => groupsInViewOrder.indexOf(element)).reduce((x, y) => Math.max(x, y), 0);\n        // if the index (group you want) is after the last selected group, then use first selected group as pivot in that case\n        if (index > pivot) {\n            pivot = groupsInViewOrder.indexOf(this.groupSelection[0]);\n        }\n        this._selectedGroups = index < pivot\n            ? groupsInViewOrder.slice(index, pivot + 1)\n            : groupsInViewOrder.slice(pivot, index + 1);\n    }\n\n    /**\n     * Remove all groups from group selection\n     * Optionally pass in specific group(s) to remove from group selection\n     * @param {GroupModel[]} groups array of length one or more containing the groups you want to remove\n     */\n    clearSelection(groups) {\n        this._selectedGroups = groups ? this._selectedGroups.filter(group => !groups.includes(group)) : [];\n    }\n\n    /**\n     * Toggle (ie deselect if it's selected) the passed in group, and perform same action for all descendant children\n     * @param {GroupModel} group you want to add/remove from group selection\n     */\n    toggleSelection(group) {\n        const groupsToChange = getAllDescendantGroups(group, true);\n\n        if (this.isSelected(group)) {\n            this._selectedGroups = this.groupSelection.filter(group => !groupsToChange.includes(group));\n        } else {\n            // could use a Set here instead but this is fine for now\n            this._selectedGroups = this.groupSelection.concat([ ...groupsToChange.filter(g => !this.groupSelection.includes(g)) ]);\n        }\n    }\n\n    /**\n     * Array of selected groups.\n     */\n    @computed get groupSelection() {\n        const group = this._selectedGroups[0];\n        // Add the observable groups array to the computation so that it gets recomputed when groups get deleted.\n        if (group && !group.library.getGroups().length) { return []; }\n        return this._selectedGroups.filter(group => !group.isDeletedLocally);\n    }\n\n    /**\n     * Returns the group that the current groupSelection/elementSelection/viewState has in common for nearest ancestor.\n     * For example if elements are selected in Primary/dark and Primary/light, the closest group is Primary.\n     * For the top root nodes, their closest ancestor is undefined i.e. area above the ungrouped section.\n     *\n     * @returns {GroupModelString}\n     */\n    getSelectionCommonAncestor() {\n        const groups = this.groupSelection;\n        const elems = elementSelectionState.selection;\n        // if nothing is selected, it was probably a right click, in which case we don't need an ancestor, because we can use the element/group that did right click\n        if (!groups.length && elems.length === 1) {\n            return elems[0].getGroups()[0];\n        }\n        const selection = !groups.length && elems.length ? elems : groups;\n        if (!selection.length) { return; }\n        return minimumCommonAncestor(selection);\n    }\n\n    /**\n     * Depending on current group selection, returns the groups that are considered the highest selection of a 'branch'\n     * We visually display the title of these groups to be darker than any children\n     * @returns {GroupModel[]} array of the highest selected groups\n     */\n    findHighestSelectedGroups() {\n        const currentSelection = this.groupSelection;\n        // its the highest selected group if its in selection, AND its a root group OR the ancestors of this group are not selected\n        return currentSelection.filter(group => {\n            return !group.parent || !getAllAncestors(group).find(ancestorGroup => this.isSelected(ancestorGroup));\n        });\n    }\n}\n\nexport default new GroupSelectionState();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { computed, observable, action, reaction } from 'mobx';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport BaseSearchState from 'app/js/state/BaseSearchState';\nimport { translate } from 'app/js/managers/translationManager';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport { getCustomGroupsTree } from 'app/js/utils/groupUtils';\nimport { findMatchingElements, isSearchTextEmpty } from 'app/js/utils/searchUtils';\nimport configuration from 'app/js/config/configuration';\nimport { getBaseRef } from 'app/js/utils/elementReferenceUtils';\n\n/**\n * Holds the state for the Libraries Search React View. Provides observable\n * properties relevant to Libraries Search and ensures that search requests\n * get kicked off and processed.\n */\nexport default class LibrariesSearchState extends BaseSearchState {\n\n    @observable.ref searchLoader;\n    @observable _loaderSearchResults = undefined;\n    @observable visibleResultsLimit;\n\n    resetSearchLoader() {\n        if (this.searchLoader) {\n            this.searchLoader.abort();\n            this.resultsReaction && this.resultsReaction();\n            this.completeReaction && this.completeReaction();\n            this.visibleResultsLimit = undefined;\n            this._loaderSearchResults = undefined;\n        }\n    }\n\n    @action.bound\n    search() {\n        if (this.viewState.isSearchMode() && this.viewState.isStockSearchMode()) {\n            return;\n        }\n\n        const searchText = this.viewState.getSearchText();\n\n        const filters = {};\n        const elementSort = {\n            sectionType: 'type',\n            sections: elementConfiguration.getElementTypes(),\n            // elementSort should match expected JS API 2 sort values. e.g. 'modifiedDate' instead of 'modified'\n            field: this.viewState.elementSearchSort === 'name' ? 'name' : 'modifiedDate',\n            direction: this.viewState.elementSearchSort === 'name' ? 'ascending' : 'descending'\n        };\n\n        if ((this.viewState.isLibrarySearchMode() || this._isDocumentSearch) && libraryManager.currentLibrary) {\n            filters['library_id'] = libraryManager.currentLibrary.id;\n        }\n\n        this.resetSearchLoader();\n\n        if (searchText) {\n            this.searchLoader = libraryManager.getSearchResults(searchText, filters, elementSort, this.viewState);\n\n            this.resultsReaction = reaction(() => this.searchLoader.results.length, () => {\n                this._loaderSearchResults = this.searchLoader.results;\n                this.setVisibleResultsCursor();\n            });\n            this.completeReaction = reaction(() => this.searchLoader.isComplete, () => this.seachCompleteHandler());\n        }\n    }\n\n    seachCompleteHandler() {\n        this.visibleResultsLimit = undefined;\n    }\n\n    setVisibleResultsCursor() {\n        const orderType = this.viewState.elementSearchSort === 'name' ? 'name' : 'modified';\n        const lastResult = this.searchLoader.results[this.searchLoader.results.length - 1];\n        if (lastResult) {\n            this.visibleResultsLimit = { orderedValue: lastResult[orderType], type: lastResult.type, name: lastResult.name };\n        }\n    }\n\n    @computed get isLoading() {\n        return this.viewState.isSearchMode() && (!this.searchLoader || !this.searchLoader.isComplete);\n    }\n\n    get elementTypeOrder() {\n        return elementConfiguration.getElementTypes();\n    }\n\n    @computed.equals((a, b) => a.elements === b.elements ? a.count === b.count : false)\n    get visibleSearchResults() {\n        const matchingElements = this._matchingElements.elements;\n        if (!this.isLoading) {\n            return { elements: matchingElements, count: matchingElements.length };\n        }\n        const elements = matchingElements.filter(element => {\n            if (!this.visibleResultsLimit) {\n                return false;\n            }\n            const isAboveType = this.elementTypeOrder.indexOf(element.type) < this.elementTypeOrder.indexOf(this.visibleResultsLimit.type);\n            const isAboveLimit = this.viewState.elementSearchSort === 'name'\n                ? element[this.viewState.elementSearchSort] <= this.visibleResultsLimit.orderedValue\n                : element[this.viewState.elementSearchSort] >= this.visibleResultsLimit.orderedValue;\n\n            const isInLoadingType = element.type === this.visibleResultsLimit.type;\n\n            // If its already in a type above the current limit type, then we dont have to check if its above the visible ordering limit because we will have already loaded all elements of that type in order.\n            return isAboveType || (isAboveLimit && isInLoadingType);\n        });\n        return { elements, count: elements.length };\n    }\n\n    // If we simply return the `library.elements` array, observers of this computed property will not\n    // react to elements being added or removed from the library. Instead, return an object with\n    // the array and its length, which can be used in a custom mobx equality check to trigger observers\n    // when elements are added or removed. A copy of the array's length must be used, or its value\n    // will be updated when the array's length change, and the equality check will always show the\n    // same length.\n    @computed.equals((a, b) => a.elements === b.elements ? a.count === b.count : false)\n    get _matchingElements() {\n        if (this._loaderSearchResults) {\n            return { elements: this._loaderSearchResults, count: this._loaderSearchResults.length };\n        }\n        const currentLibrary = libraryManager.currentLibrary;\n        if ((this._isDocumentSearch || (currentLibrary && !this._isSearchMode)) && isSearchTextEmpty(this.viewState.getSearchText())) {\n            const library = this._isDocumentSearch ? libraryManager.documentAssetsContainer : currentLibrary;\n            // For document assets or if not actively searching, all elements match.\n            const elements = library.elements;\n            return { elements, count: elements.length };\n        }\n        const libraries = (this.viewState.isLibrariesSearchMode() ? libraryManager.searchableLibraries : [ currentLibrary ]).filter(x => x);\n        const elements = findMatchingElements(this.viewState.getSearchText(), libraries);\n        return { elements, count: elements.length };\n    }\n\n    /**\n     * In Document Assets view, if not doing global search, you can adjust search filters before you\n     * start typing a search query, so it's kind of like \"pre-search\". This is different\n     * from isDocumentSearchMode which refers to an active search with a query entered\n     */\n    @computed get _isDocumentSearch() {\n        return this.viewState.isDocumentSearchType();\n    }\n\n    @computed get _isSearchMode() {\n        return this.viewState.isSearchMode();\n    }\n\n    @computed get _searchResultsTypes() {\n        const foundTypes = {};\n        this.visibleSearchResults.elements.forEach(element => foundTypes[element.type] = true);\n        return Object.keys(foundTypes);\n    }\n\n    // Returns the ids of all the CC Libraries in the search results (this excludes document assets)\n    @computed get _searchResultsLibraries() {\n        const foundLibraryIds = {};\n        this.visibleSearchResults.elements.forEach(element => {\n            const library = element.library;\n            if (!library.isDocumentAssets) {\n                foundLibraryIds[element.library.id] = true;\n            }\n        });\n        return Object.keys(foundLibraryIds);\n    }\n\n    @computed get searchResults() {\n        if (this.viewState.isSearchMode() && this.viewState.isStockSearchMode()) {\n            return [];\n        }\n\n        //Filter what elements to display based on search filters\n        const hasTypeFilters = this.hasSelectedTypeFilters;\n        const hasLibraryFilters = this.hasSelectedLibraryFilters;\n        const hasDocumentGroupFilters = this.hasSelectedDocumentGroupFilters;\n        const hasDocumentLinkFilters = this.hasSelectedDocumentLinkFilters;\n        const includeGroupFilter = configuration.currentProduct.config.includeGroupFilters;\n\n        if ((this.viewState.isDocumentSearchType() && (hasDocumentGroupFilters || hasDocumentLinkFilters)) || (includeGroupFilter && !hasTypeFilters)) {\n            const library = !includeGroupFilter ? libraryManager.documentAssetsContainer : libraryManager.currentLibrary;\n            const sections = elementConfiguration.groupElementsByTopLevelGroup(this._matchingElements.elements, library.getGroups());\n\n            return this.visibleSearchResults.elements.filter(element => {\n                const matchingGroup = sections.find(section => section.children.map(child => child.item).includes(element));\n                let elementGroup = matchingGroup && matchingGroup.item && matchingGroup.item.name;\n                if (configuration.currentProduct.config.allowUngroupedFiltering) {\n                    elementGroup = elementGroup || (matchingGroup.item.id === '*' && 'ungrouped');\n                }\n                const isValidGroup = elementGroup && this._searchDocumentGroupFilters.includes(elementGroup);\n                const filterId = element.isLinked ? getBaseRef(element.linkReference) : library.name; // linked or local asset\n                // true if either the document is local, or its from a linked document AND we want the results from that document\n                const isValidLink = this._searchDocumentLinkFilters.includes(filterId);\n                return (isValidGroup || !hasDocumentGroupFilters) && (isValidLink || !hasDocumentLinkFilters);\n            });\n        }\n\n        if (hasTypeFilters || hasLibraryFilters) {\n            return this.visibleSearchResults.elements.filter(element => {\n                const isValidType = this._searchTypeFilters.includes(element.type);\n                const isValidParentLibrary = this._searchLibrariesFilters.includes(element.library.id);\n\n                if (!hasLibraryFilters) {\n                    return isValidType;\n                }\n                if (!hasTypeFilters) {\n                    return isValidParentLibrary;\n                }\n                return isValidType && isValidParentLibrary;\n            });\n        }\n        return this.visibleSearchResults.elements;\n    }\n\n    @computed get searchResultsCount() {\n        return this.searchResults.length;\n    }\n\n    @computed get searchResultsGroups() {\n        const filteredGroups = [];\n        // Get the groups tree for the elements matching the search. Exclude any paths that contain no elements.\n        const { branches } = getCustomGroupsTree(this.searchResults, libraryManager.currentLibrary.getGroups(), { includeEmpty: false });\n        Object.values(branches).forEach(branch => {\n            // Exclude empty ungrouped section\n            if (branch.item.isGroup && (branch.item !== configuration.UNGROUPED_GROUP || branch.children.length)) {\n                const isPathView = this.viewState.viewByGroupMode === configuration.VIEW_BY_GROUP_MODES.PATH;\n                const maxDepth = branch.item?.library?.pathViewMaxDepth;\n                const isTopLevel = maxDepth && branch.depth < maxDepth;\n                if (!isPathView) {\n                    filteredGroups.push(branch.item);\n                } else if (!branch.children[0]?.item.isGroup || !!isTopLevel) {\n                    // In path view, only groups with elements are rendered, or if they are top level\n                    // We could alternatively use isGroupMeaningful check, but this is a constant time lookup, so it's faster than the util\n                    filteredGroups.push(branch.item);\n                }\n            }\n        });\n        return filteredGroups;\n    }\n\n    get hasSelectedLibraryFilters() {\n        return !!this._searchLibrariesFilters.length;\n    }\n\n    get hasSelectedTypeFilters() {\n        return !!this._searchTypeFilters.length;\n    }\n\n    get hasSelectedDocumentGroupFilters() {\n        return !!this._searchDocumentGroupFilters.length;\n    }\n\n    get hasSelectedDocumentLinkFilters() {\n        return !!this._searchDocumentLinkFilters.length;\n    }\n\n    @computed get filterLibrariesOptions() {\n        if (this._isDocumentSearch) {\n            const sources = {};\n            // the order is 'Local assets', linked documents, then linked libraries\n            sources[libraryManager.documentAssetsContainer.name] = { label: 'DOCUMENT_ASSETS_FILTER', id: libraryManager.documentAssetsContainer.name, type: 'document' };\n            this.visibleSearchResults.elements.forEach(element => {\n                if (element.isLegacyDocumentLink && element.linkedDocumentName) {\n                    sources[element.linkedDocumentName] = { label: element.linkedDocumentName, id: getBaseRef(element.linkReference), type: 'document', removable: true };\n                }\n            });\n            this.visibleSearchResults.elements.forEach(element => {\n                const libraryName = element.linkedLibrary?.name ?? element.cachedLinkedLibraryName;\n                if (element.isLinked && !element.isLegacyDocumentLink && libraryName) {\n                    sources[libraryName] = { label: libraryName, id: getBaseRef(element.linkReference), type: 'document' };\n\n                }\n            });\n\n            return Object.values(sources);\n        }\n        return this._searchResultsLibraries\n            .concat(this._searchLibrariesFilters.filter(filter => !this._searchResultsLibraries.includes(filter)))\n            .map(filter => {\n                const library = libraryManager.getLibraryById(filter);\n                return { id: filter, label: library.name, type: 'library' };\n            });\n    }\n\n    @computed get filterTypeOptions() {\n        if (this._isDocumentSearch) {\n            const documentAssetGroups = elementConfiguration.groupElementsByTopLevelGroup(this._matchingElements.elements, libraryManager.documentAssetsContainer.getGroups());\n            return documentAssetGroups\n                .filter(branch => (branch.item && branch.children && branch.children.length) || this._searchDocumentGroupFilters.includes(branch.item && branch.item.name))\n                .map(branch => ({ id: branch.item.name, label: translate(branch.item.nameLocalizationKey), type: 'group' }));\n        }\n        return this._searchResultsTypes\n            .concat(this._searchTypeFilters.filter(filter => !this._searchResultsTypes.includes(filter)))\n            .map(filter => ({ id: filter, label: elementConfiguration.getTypeName(filter), type: 'type' }));\n    }\n\n    /**\n     * Removes any type filters that are active, but are not included in the results of the search result types.\n     * This case should only exist when deleting an element while a library or a search is fitered.\n     */\n    clearUnusedTypeOptions() {\n        this._searchTypeFilters\n            .filter(type => !this._searchResultsTypes.includes(type))\n            .forEach(type => this.setSearchOption(type, false, 'type'));\n    }\n\n    /**\n     * Changes the search option and triggers a search with the new search options\n     *\n     * @param {string} option the search option that needs to be changed\n     * @param {boolean} state the state to which the search option needs to be changed\n     * @param {string} type the type of search option being changed\n     */\n    setSearchOption(option, state, type) {\n        switch (type) {\n        case 'library':\n            this._searchLibrariesOptions.set(option, state);\n            return;\n        case 'group':\n            this._searchDocumentGroupOptions.set(option, state);\n            return;\n        case 'document':\n            this._searchDocumentLinkOptions.set(option, state);\n            return;\n        default:\n            this._searchTypeOptions.set(option, state);\n        }\n    }\n\n    clearLibrariesFilters() {\n        this._searchLibrariesOptions = new Map();\n    }\n\n    clearDocumentFilters() {\n        this._searchDocumentGroupOptions = new Map();\n        this._searchDocumentLinkOptions = new Map();\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport localSettings from 'app/js/config/localSettings';\nimport environment from 'app/js/environment';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { addListenerManager } from 'app/js/utils/listenerUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport { observable, action, isArrayLike, computed } from 'mobx';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport groupSelectionState from 'app/js/state/groupSelectionState';\nimport metrics from 'app/js/interface/metrics';\nimport StockSearchState from './StockSearchState';\nimport LibrariesSearchState from './LibrariesSearchState';\nimport dialogManager from 'app/js/managers/dialogManager';\nimport libraryProcessManager from 'app/js/managers/libraryProcessManager';\nimport { isSearchTextEmpty } from 'app/js/utils/searchUtils';\nimport { getLibraryCustomGroupsTree } from '../utils/groupUtils';\nimport appState from 'app/js/appState';\nimport { getLibrariesInViewOrder } from 'app/js/utils/libraryUtils';\nimport { isBrandLibrary } from 'app/js/utils/brandUtils';\nimport featureFlags from 'app/js/config/featureFlags';\nimport floodgateManager from '../managers/floodgateManager';\n\n/**\n    Constants\n**/\n\nconst DEFAULT_RELINK_TYPE_FILTER = [ 'image' ];\n\nconst MODES = {\n    'normal': {\n        enableMultiSelect: true,\n        enableContextMenu: true\n    },\n    'relink': {\n        enableMultiSelect: false,\n        enableContextMenu: false\n    },\n    'removed_elements': {\n        enableMultiSelect: true,\n        enableContextMenu: false\n    },\n    'search': {\n        enableMultiSelect: true,\n        enableContextMenu: true\n    },\n    'one_up': {\n        enableMultiSelect: true,\n        enableContextMenu: true\n    },\n    // In this mode, we render a third-party view, so these settings don't apply.\n    'brand_kit': {}\n};\n\nconst COLLAPSED_KEY = {\n    type: '#collapsedTypes',\n    group: '#collapsedGroups',\n    groupNavigation: '#collapsedGroupNavigation'\n};\n\nconst STOCK_SEARCH_SORT_OPTIONS = [ 'relevance', 'creation', 'popularity', 'nb_downloads' ];\nconst ELEMENTS_SORT_OPTIONS = [ 'name', 'order', 'modified' ];\nconst ELEMENTS_SEARCH_SORT_OPTIONS = [ 'modified', 'name' ];\nconst LIBRARIES_SORT_OPTIONS = [ 'modified', 'name' ];\n\n// Can't sort by order when viewing by type nor by modified when viewing by group\nconst ELEMENT_VIEW_BY_SORT_BY_MATRIX = {\n    type: [ 'name', 'modified' ],\n    group: [ 'order', 'name' ],\n    role: [ 'name', 'modified' ]\n};\n\nconst STORED_RECENT_SEARCH_LIBRARIES_KEY = configuration.STORED_RECENT_SEARCH_LIBRARIES_KEY;\nconst STORED_RECENT_SEARCH_STOCK_KEY = configuration.STORED_RECENT_SEARCH_STOCK_KEY;\n\n// Anything that we bind to in the state should be observable.\nclass State {\n    @observable mode = 'normal'; // normal, relink, search, one_up\n    @observable isImportExportInProgress = false;\n    @observable isTourInProgress = false;\n    @observable.ref modeParams = {\n        // Example modeParams:\n\n        // Search Mode\n        // text: undefined,\n        // type: undefined,\n        // findSimilarData: {id: findSimilarId, url: findSimilarUrl, path: findSimilarPath, deleteFileAfterUse: deleteFileAfterUse}\n\n        // Relink Mode\n        // message: \"This relink mode was shown by the debug menu item\",\n        // actionMessage: $translate.instant('DL_RELINK'),\n        // missing: false,\n        // overlayMessage: $translate.instant('DL_RELINK_RELINK_OVERLAY_MESSAGE')\n    };\n    @observable currentSection = undefined;\n    @observable gridZoomFactor = undefined;\n    @observable showNavigation = true;\n    @observable collapsedGroupNavToDrag = new Array();\n    @observable view = 'grid';\n    @observable librarySortOrderDescending = false;\n}\n\nexport class ViewState {\n    init() {\n        // Update the initial state based on local settings:\n        this._state.elementSortDescending = localSettings.getValue('elementSortDescendingState') || this._state.elementSortDescending;\n        const initLibrarySort = localSettings.getValue('librarySortState') || configuration.currentProduct.config.defaultLibrarySortState || this._state.librarySort;\n        this._state.librarySort = initLibrarySort;\n        this._state.librarySortOrderDescending = initLibrarySort !== 'name';\n        this._state.gridZoomFactor = localSettings.getValue('gridZoomFactor') || this._state.gridZoomFactor;\n        this._state.view = localSettings.getValue('viewState') || this._state.view;\n        this._state.showNavigation = localSettings.getValue('showNavigationState') === undefined ? this._state.showNavigation : localSettings.getValue('showNavigationState');\n        // Initialize the stockSearchState\n        this._stockSearchState.init();\n    }\n\n    constructor() {\n        this._listenerManager = addListenerManager(this, [ 'resetMode' ]);\n        this._stockSearchState = new StockSearchState(this);\n        this._librariesSearchState = new LibrariesSearchState(this);\n\n        this._state = new State();\n        this._state.elementSearchSort = 'modified';\n        this._state.elementSortDescending = false;\n        this._state.librarySort = 'name';\n        this._state.librarySortOrderDescending = false;\n        this._state.gridZoomFactor = configuration.GRID_TYPE_MEDIUM;\n        this._state.view = configuration.ELEMENTS_VIEW_STATES.GRID; // list or grid\n        this._state.librariesView = configuration.LIBRARIES_VIEW_STATES.GRID; // list or grid\n        this._state.viewBy = 'group'; // type or group\n        this._state.numResults = 0; // TODO: get rid of this.\n        this._state.enableMultiSelect = true;\n        this._state.enableContextMenu = true;\n        this._state.elementTypeFilter = [];\n        this._state.contextMenuPosition = { x: 0, y: 0 };\n        this._state.showNavigation = true;\n        this._state.collapsedGroupNavToDrag = [];\n\n        // Use these for debugging observables (after importing intercept from mobx):\n        // intercept(this._state, 'modeParams',(change) => {console.log('intercept modeParams:', JSON.stringify(change)); return change;});\n        // intercept(this._state, 'mode',(change) => {console.log('intercept mode:', JSON.stringify(change)); return change;});\n    }\n\n    setHeaderView(headerView) {\n        this._headerView = headerView;\n    }\n\n    /**\n        Private variables / state\n    **/\n\n    // Sets persistent state. State that doesn't need to persist, can be assigned directly.\n    @action _setState(key, value) {\n        this._state[key] = value; // potentially mutates an observable\n        localSettings.setValue(key + 'State', value); // localSettings is observable\n    }\n\n    @action _setMode(mode, params, elementTypeFilter) {\n        // // If changing out of relink mode, close relink dialog\n        // if (mode !== 'relink' && this._state.mode === 'relink' && dialogManager.dialog) {\n        //     dialogManager.closeDialog();\n        // }\n\n        const newMode = MODES[mode];\n        this._state.enableMultiSelect = newMode.enableMultiSelect;\n        this._state.enableContextMenu = newMode.enableContextMenu;\n        this._state.elementTypeFilter = elementTypeFilter; // for relink mode\n\n        // mutate observables\n        this._state.mode = mode;\n        this._state.modeParams = Object.assign({}, this._state.modeParams, params || {});\n\n        if (this.isSearchMode()) {\n            this.searchState.search();\n        }\n    }\n\n    _deleteFindSimilarFile() {\n        const findSimilarData = this._state.modeParams.findSimilarData;\n        if (findSimilarData && findSimilarData.path && findSimilarData.deleteFileAfterUse) {\n            FileUtils.deleteFile(findSimilarData.path);\n        }\n    }\n\n    // Called by the productInterface when the app notifies us the user has started dragging something\n    startDragFromProduct(dragData) {\n        this._draggingData = dragData;\n    }\n\n    endDragFromProduct() {\n        this._draggingData = null;\n    }\n\n    getDraggingData() {\n        let count = 0,\n            interval;\n\n        return new Promise((resolve, reject) => {\n            interval = setInterval(() => {\n                if (this._draggingData) {\n                    clearInterval(interval);\n                    resolve(this._draggingData);\n                } else if (++count > 9) {\n                    clearInterval(interval);\n                    reject('Listener did not receive drag data');\n                }\n            }, 10);\n        });\n    }\n\n    /**\n        Public API\n    **/\n\n    // Used to set current onboarding workflow\n    setCurrentWorkflow(workflow) {\n        this._currentWorkflow = workflow;\n    }\n\n    // Used to set current onboarding workflow\n    get currentWorkflowName() {\n        return this._currentWorkflow && this._currentWorkflow.name;\n    }\n\n    notifyWorkflowAction(action) {\n        if (this._currentWorkflow && this._currentWorkflow.notifyAction) {\n            this._currentWorkflow.notifyAction(action);\n        }\n    }\n\n    // React code should use this, since it's observable\n    // TODO: Get rid of _state.view, and have everything go through this\n    get viewState() {\n        return localSettings.getValue('viewState') || configuration.currentProduct.config.defaultViewState || configuration.ELEMENTS_VIEW_STATES.GRID;\n    }\n\n    get librariesViewState() {\n        return localSettings.getValue('librariesViewState') || configuration.currentProduct.config.defaultViewState || configuration.LIBRARIES_VIEW_STATES.GRID;\n    }\n\n    _getViewByStateKey(library = libraryManager.currentLibrary) {\n        const baseKey = 'viewByState';\n        // A new library will have a placeholder id before it syncs to the cloud for the first time,\n        // so if the user changes the view by state before the library gets a permanent id,\n        // the value in localStorage will map to the placeholder id. If we used `library.id` as cache key\n        // that would cause the view by state to reset when the library does sync and gets a permanent id -\n        // to avoid that, we use the previous placeholder id as cache key when available.\n        // Note that `library.previousPlaceHolderId` survives a panel reload because the JS API includes it\n        // in the serialized library object it saves to the IndexedDB cache, so we'd only lose the cached view by state\n        // value if the user manually clears the app cache, which is fair game.\n        const libraryKey = library?.previousPlaceHolderId || library?.id;\n        return library ? `${baseKey}#${libraryKey}` : baseKey;\n    }\n\n    // React code should use this, since it's observable\n    // TODO: Get rid of _state.viewBy, and have everything go through this\n    get viewByState() {\n        if (libraryManager.currentLibrary && libraryManager.currentLibrary.isDocumentAssets) {\n            return configuration.currentProduct.config.defaultViewByState || 'group';\n        }\n        const localSettingsValue = localSettings.getValue(this._getViewByStateKey());\n        let defaultView = 'type';\n        if (libraryManager.currentLibrary?.getGroups().length >= 1) {\n            defaultView = 'group';\n        } else if (isBrandLibrary(libraryManager.currentLibrary) && featureFlags.get('brandFeatureEnabled')) {\n            defaultView = 'role';\n        }\n\n        const viewByState = localSettingsValue || configuration.currentProduct.config.defaultViewByState || defaultView;\n\n        // If the result is going to be role, then we should check to see if brands are enabled and if the current library is a brand library\n        // otherwise we fallback to grouping by type\n        if (viewByState === 'role' && (!isBrandLibrary(libraryManager.currentLibrary) || !featureFlags.get('brandFeatureEnabled'))) {\n            return 'type';\n        }\n        return viewByState;\n    }\n\n    get viewByGroupMode() {\n        // 'tree' or 'path'\n        return localSettings.getValue('viewByGroupModeState') || configuration.currentProduct.config.defaultViewByGroupMode || 'tree';\n    }\n\n    // Note: The order of these options is reflected in the view by drop down menu\n    getViewByStateOptions() {\n        // Only show \"Group by Brand\" if in a brand library\n        if (featureFlags.get('brandFeatureEnabled') && isBrandLibrary(libraryManager.currentLibrary)) { return [ 'role', 'type', 'group' ]; }\n        return [ 'type', 'group' ];\n    }\n\n    getViewByGroupModeOptions() {\n        return [ 'tree', 'path' ];\n    }\n\n    getViewStateOptions() {\n        return [ 'grid', 'list' ];\n    }\n\n    get currentLibrariesFilter() {\n        if (floodgateManager.isBrandLifecycleEnabled() && !environment.isBrandCreator) {\n            return 'all';\n        }\n        return localSettings.getValue('currentLibrariesFilter') || 'all';\n    }\n\n    setCurrentLibrariesFilter(filterKey) {\n        return localSettings.setValue('currentLibrariesFilter', filterKey);\n    }\n\n    resetCurrentLibrariesFilter() {\n        return localSettings.setValue('currentLibrariesFilter', 'all');\n    }\n\n    getLibraryListFilterOptions() {\n        if (configuration.currentProduct.config.useBrandsFilterOptions) {\n            return floodgateManager.isBrandLifecycleEnabled() ? Object.values(configuration.BRANDS_FILTER_OPTIONS) : Object.values(configuration.BRANDS_FILTER_OPTIONS_M2_1);\n        }\n\n        return [ 'all', 'personal', 'shared', 'public', 'team' ];\n    }\n\n    // React code should use this, since it's observable\n    get elementSortState() {\n        const defaultSortValue = configuration.currentProduct.config.defaultElementSortState || ELEMENT_VIEW_BY_SORT_BY_MATRIX[this.viewByState][0];\n        return localSettings.getValue(`elementSortState#${this.viewByState}`) || defaultSortValue;\n    }\n\n    get _elementSearchSortState() {\n        return localSettings.getValue('elementSearchSortState') || 'modified';\n    }\n\n    get elementSortDescendingState() {\n        return localSettings.getValue('elementSortDescendingState') || false;\n    }\n\n    get librarySortState() {\n        return localSettings.getValue('librarySortState') || configuration.currentProduct.config.defaultLibrarySortState || 'name';\n    }\n\n    get librarySortOrderDescendingState() {\n        const localDescendingOrder = localSettings.getValue('librarySortOrderDescendingState');\n        return localDescendingOrder ?? this._state.librarySortOrderDescending ?? false;\n    }\n\n    @computed get showNavigation() {\n        return this._state.showNavigation;\n    }\n\n    @computed get gridZoomFactor() {\n        return this._state.gridZoomFactor;\n    }\n\n    get stockSearchState() {\n        return this._stockSearchState;\n    }\n\n    get librariesSearchState() {\n        return this._librariesSearchState;\n    }\n\n    get searchState() {\n        return this.isStockSearchMode() ? this._stockSearchState : this._librariesSearchState;\n    }\n\n    get nameVisibility() {\n        return localSettings.getValue('nameVisibility') || configuration.currentProduct.config.nameVisibilityOverride || 'elementHover';\n    }\n\n    get elementBackgroundPattern() {\n        return localSettings.getValue('elementBackground') || configuration.ELEMENT_BACKGROUNDS.SOLID;\n    }\n\n    get contextMenuPositionState() {\n        return this._state.contextMenuPosition;\n    }\n\n    // Note: we modify the state in-place, to make it easier for directives to bind to changes\n    getState() {\n        return this._state;\n    }\n\n    isDefaultMode() {\n        return this._state.mode === 'normal';\n    }\n\n    isRelinkLayerMode() {\n        return this._state.mode === 'relink';\n    }\n\n    isLocked(library) {\n        return library && library.toolkitId && !localSettings.getValue(this._getUnlockedKey(library));\n    }\n\n    unlock(library) {\n        metrics.reportEvent('Library Operations', 'Library', 'click', 'unlock', null, library);\n        localSettings.setValue(this._getUnlockedKey(library), true);\n    }\n\n    // Exposed for debug menu\n    lockToolkit(library) {\n        localSettings.setValue(this._getUnlockedKey(library), false);\n    }\n\n    _getUnlockedKey(library) {\n        return `unlockedToolkit#${library.toolkitId}`;\n    }\n\n    isLibraryWritable(library, allowDocumentLibraries, allowUnloadedElements) {\n        // Locked toolkit libraries and document libraries are not writable.\n        // Libraries are not writable while their elements are in the process of loading\n        return library\n        && library.isWritable\n        && (allowUnloadedElements || library.areElementsLoaded)\n        && !this.isLocked(library)\n        && (allowDocumentLibraries || !library.documentId);\n    }\n\n    isRemovedElementsMode() {\n        return this._state.mode === 'removed_elements';\n    }\n\n    isSearchMode() {\n        return this._state.mode === 'search';\n    }\n\n    isOneUpMode() {\n        return this._state.mode === 'one_up';\n    }\n\n    isBrandKitMode() {\n        return this._state.mode === 'brand_kit';\n    }\n\n    isGroupView() {\n        // Group view is used in Document Assets search, but not other search types.\n        const isDocumentSearchType = this.getSearchType() === 'document';\n        return this.viewByState === 'group' && (isDocumentSearchType || (!this.isSearchMode() && !this.isRelinkLayerMode()));\n    }\n\n    /**\n     * Use this to tell if we're doing a search across top level library names (not within the libraries for the elements)\n     * @returns {boolean}\n     */\n    isLibraryNameSearchType() {\n        return this.getSearchType() === 'libraryName';\n    }\n\n    isContextMenuEnabled() {\n        return this._state.enableContextMenu;\n    }\n\n    isNewUserState() {\n        // New user state = no writable non-toolkit libraries have elements or deleted elements\n        return !libraryManager.libraries.some(library => {\n            const hasElements = library.elementCount > 0 || library.removedElementCount > 0;\n            return library.isWritable && hasElements && !library.toolkitId;\n        });\n    }\n\n    isLibrarySearchMode() {\n        return this._state.mode === 'search' && this._state.modeParams.type === 'library';\n    }\n\n    isLibraryNameSearchMode() {\n        return this._state.mode === 'search' && this._state.modeParams.type === 'libraryName';\n    }\n\n    isLibrariesSearchMode() {\n        return this._state.mode === 'search' && this._state.modeParams.type === 'libraries';\n    }\n\n    isStockSearchMode() {\n        return this._state.mode === 'search' && this._state.modeParams.type === 'stock';\n    }\n\n    isDocumentSearchMode() {\n        return this._state.mode === 'search' && this._state.modeParams.type === 'document';\n    }\n\n    /**\n     * Use this to tell whether the document asset filters should be shown, even if there is not an active document search.\n     * In Document Assets view, in document assets scope or global search scope, you can adjust search filters before you\n     * start typing a search query, so it's kind of like \"pre-search\". This is different\n     * from isDocumentSearchMode which refers to an active search with a query entered\n     */\n    isDocumentSearchType() {\n        // In Document Assets view, search type will either be 'libraries' or the default 'document'\n        return this.getSearchType() === 'document' || this.getSearchType() === 'libraries' && libraryManager.currentLibrary && libraryManager.currentLibrary.isDocumentAssets && isSearchTextEmpty(this.getSearchText());\n    }\n\n    getSearchText() {\n        return this._state.modeParams.text?.trimStart();\n    }\n\n    getSearchId() {\n        return this._state.modeParams.searchId;\n    }\n\n    _currentSearchTimeout = null;\n\n    getLocalMachineSetting(key) {\n        if (!libraryManager.disableCCLibraries) {\n            return libraryProcessManager.getLocalMachineSetting(key);\n        } else {\n            localSettings.getValue(key);\n        }\n    }\n\n    setLocalMachineSetting(key, value) {\n        if (!libraryManager.disableCCLibraries) {\n            // warning: this is async\n            libraryProcessManager.setLocalMachineSetting(key, value);\n        } else {\n            // Fallback to use local storage if we've disabled CC Libraries and therefore there is no local process\n            localSettings.setValue(key, value);\n        }\n    }\n\n    _getRecentSearchKey() {\n        const userId = libraryManager.disableCCLibraries ? environment.imsUserId : libraryManager.userId;\n        return `${userId}#recentSearches`;\n    }\n\n    getRecentSearches() {\n        return this.getLocalMachineSetting(this._getRecentSearchKey()) || { libraries: [], stock: [] };\n    }\n\n    _addRecentSearch(searchType, searchText) {\n        const recentSearches = this.getRecentSearches();\n        const searchLimit = searchType === 'stock' ? configuration.STORED_RECENT_STOCK_SEARCH_LIMIT : configuration.STORED_RECENT_LIBRARIES_SEARCH_LIMIT;\n        const storedSearches = recentSearches[searchType].filter(storedSearch => storedSearch !== searchText);\n        const index = storedSearches.indexOf(searchText);\n        // if index of searchText exists, remove the duplicate, otherwise remove\n        // the last element if the array length is already at searchLimit\n        storedSearches.splice(index === -1 ? searchLimit - 1 : index, 1);\n        storedSearches.unshift(searchText);\n\n        const key = this._getRecentSearchKey();\n        recentSearches[searchType] = storedSearches;\n        this.setLocalMachineSetting(key, recentSearches);\n    }\n\n    clearRecentSearch(searchType, value) {\n        const recentSearches = this.getRecentSearches();\n        const storedSearches = recentSearches[searchType];\n        if (storedSearches.length > 0) {\n            recentSearches[searchType] = storedSearches.filter(search => search !== value);\n            this.setLocalMachineSetting(this._getRecentSearchKey(), recentSearches);\n        }\n    }\n\n    clearAllRecentSearches() {\n        this.setLocalMachineSetting(this._getRecentSearchKey(), { libraries: [], stock: [] });\n    }\n\n    hasRecentSearches() {\n        const recentSearches = this.getRecentSearches();\n        return recentSearches[STORED_RECENT_SEARCH_LIBRARIES_KEY].length > 0 || recentSearches[STORED_RECENT_SEARCH_STOCK_KEY].length > 0;\n    }\n\n    _storeRecentSearch() {\n        if (this._currentSearchTimeout) {\n            clearTimeout(this._currentSearchTimeout);\n        }\n        const value = this.getSearchText();\n        if (!value || !value.trim() || value === translate('DL_STOCK_FIND_SIMILAR_PLACEHOLDER')) {\n            return;\n        }\n        const searchType = this.isStockSearchMode() ? STORED_RECENT_SEARCH_STOCK_KEY : STORED_RECENT_SEARCH_LIBRARIES_KEY;\n        this._currentSearchTimeout = setTimeout(() => {\n            this._addRecentSearch(searchType, value);\n        }, configuration.RECENT_SEARCH_TIMER);\n    }\n\n    setSearchText(value) {\n        const currentSearchText = this.getSearchText();\n        let isDifferent = currentSearchText !== value;\n\n        if (!currentSearchText && !value) {\n            isDifferent = false;\n        }\n\n        if (isDifferent && !currentSearchText) {\n            metrics.reportSearchEvent('Search', 'Search', 'keydown', 'input', { 'ui':{ 'filter': this.getSearchType() } });\n        }\n\n        this._state.modeParams = Object.assign({}, this._state.modeParams, { text: value, type: this.getSearchType() });\n\n        if (isSearchTextEmpty(this.getSearchText()) && !(this._state.modeParams.findSimilarData && this._state.modeParams.findSimilarData.findSimilarId)) {\n            if (this.isSearchMode()) {\n                this.resetMode();\n            }\n        } else {\n            if (!this.isSearchMode()) {\n                this.setSearchMode(this._state.modeParams);\n            }\n            // TODO: change this so that we dont depend on the text to determine the mode\n            if (this._state.modeParams.text !== translate('DL_STOCK_FIND_SIMILAR_PLACEHOLDER')) {\n                this.clearFindSimilarSearchMode(); // Search text changed, exit the find similar mode\n            }\n        }\n        this.clearAllSelections();\n\n        if (this.isSearchMode()) {\n            this.searchState.search();\n        }\n\n        this._storeRecentSearch();\n    }\n\n    clearAllSelections() {\n        groupSelectionState.clearSelection();\n        elementSelectionState.clearSelection();\n    }\n\n    getElementSortOptions() {\n        return ELEMENTS_SORT_OPTIONS;\n    }\n\n    getLibrariesSearchSortOptions() {\n        return configuration.currentProduct.config.useBrandsSortOptions ? Object.values(configuration.BRANDS_SORT_OPTIONS) : LIBRARIES_SORT_OPTIONS;\n    }\n\n    getElementSearchSortOptions() {\n        if (this.isStockSearchMode()) {\n            return STOCK_SEARCH_SORT_OPTIONS;\n        }\n        return ELEMENTS_SEARCH_SORT_OPTIONS;\n    }\n\n    setElementSearchSort(value) {\n        if (this.isStockSearchMode() && STOCK_SEARCH_SORT_OPTIONS.includes(value)) {\n            localSettings.setValue('stockSearchSort', value);\n            this._stockSearchState.search();\n        } else if (ELEMENTS_SEARCH_SORT_OPTIONS.includes(value)) {\n            this._setElementSearchSortState(value);\n            this.searchState.search();\n        }\n    }\n\n    isValidElementSortOption(sortOption) {\n        if (this.isSearchMode()) {\n            return this.isStockSearchMode()\n                ? STOCK_SEARCH_SORT_OPTIONS.includes(sortOption)\n                : ELEMENTS_SEARCH_SORT_OPTIONS.includes(sortOption);\n        }\n        return ELEMENT_VIEW_BY_SORT_BY_MATRIX[this.viewByState].includes(sortOption);\n    }\n\n    get elementSearchSort() {\n        if (this.isStockSearchMode()) {\n            return localSettings.getValue('stockSearchSort') || 'relevance';\n        }\n        return this._elementSearchSortState;\n    }\n\n    // Based on the view mode, returns the dimension type for the thumbnails\n    get thumbnailType() {\n        return this.viewState + (this.isDefaultMode() && this.viewByState === 'group' ? '-group' : '');\n    }\n\n    // Note that this will return a value even when not yet searching/in search mode.\n    // TODO: Can we just remove modeParams.type and use localSettings everywhere?\n    // Returns an observable value (due to localSettings). One of: 'stock', 'library', 'libraries', 'document'\n    getSearchType() {\n        if (libraryManager.currentLibrary && libraryManager.currentLibrary.isDocumentAssets) {\n            // in Document Assets view, if searchType is undefined or anything other than 'libraries', then default to document\n            return !localSettings.getValue('searchType') || localSettings.getValue('searchType') !== 'libraries' ? 'document' : 'libraries';\n        } else if (this._state.modeParams.type) {\n            return this._state.modeParams.type;\n        } else if (!this.isRootView()) {\n            // default value for library view is localsetting value if it exists, and otherwise is library\n            const restoredValue = localSettings.getValue('searchType');\n            // 'libraryName' doesn't make sense as a search mode when viewing a specific library.\n            if (!restoredValue || restoredValue === 'libraryName') { return 'library'; }\n            return restoredValue;\n        } else if (this.isRootView() && configuration.currentProduct.config.enableLibraryNameSearch) {\n            return 'libraryName';\n        } else {\n            // otherwise, search all libraries\n            return 'libraries';\n        }\n    }\n\n    getSearchTypes() {\n        // Restricted access account do not have ability to search Stock\n        if (libraryManager.isRestrictedAccount) {\n            return [ 'library', 'libraries' ];\n        }\n        if (libraryManager.currentLibrary && libraryManager.currentLibrary.isDocumentAssets) {\n            return [ 'document', 'libraries' ];\n        }\n        return [ 'stock', 'library', 'libraries' ];\n    }\n\n    getStockSearchOptionValuesArray() {\n        const searchOptionValues = localSettings.getValue('searchOptionValues');\n        if (!searchOptionValues || !isArrayLike(searchOptionValues)) {\n            return configuration.currentProduct.config.defaultStockSearchOptions || [];\n        }\n\n        return searchOptionValues;\n    }\n\n    getFindSimilarData() {\n        return this._state.modeParams.findSimilarData;\n    }\n\n    setStockSearchOptionValuesArray(options) {\n        if (options) {\n            localSettings.setValue('searchOptionValues', Object.keys(options).filter(key => options[key]));\n        }\n    }\n\n    setSearchType(value) { // e.g. 'stock', 'libraries', 'library', 'document', 'libraryName'\n        if (value !== 'libraries') {\n            this.librariesSearchState.clearLibrariesFilters();\n        }\n        localSettings.setValue('searchType', value);\n        this._state.modeParams = Object.assign({}, this._state.modeParams, { type: value });\n\n        this.searchState.search();\n        this._storeRecentSearch();\n    }\n\n    setElementSortState(sortState) {\n        localSettings.setValue(`elementSortState#${this.viewByState}`, sortState);\n    }\n\n    _setElementSearchSortState(sortState) {\n        this._setState('elementSearchSort', sortState);\n    }\n\n    setElementSortDescendingState(elementSortDescending) {\n        this._setState('elementSortDescending', elementSortDescending);\n    }\n\n    setLibrarySortState(sortState) {\n        this.setLibrarySortOrderDescendingState(sortState !== 'name');\n        this._setState('librarySort', sortState);\n    }\n\n    setLibrarySortOrderDescendingState(sortOrderState) {\n        this._setState('librarySortOrderDescending', sortOrderState);\n    }\n\n    setGridZoomFactor(zoomFactorState) {\n        this._setState('gridZoomFactor', zoomFactorState);\n    }\n\n    setShowNavigation(value) {\n        this._setState('showNavigation', value);\n    }\n\n    setViewState(currViewState) {\n        this._setState('view', currViewState);\n    }\n\n    setLibrariesViewState(currLibrariesViewState) {\n        this._setState('librariesView', currLibrariesViewState);\n    }\n\n    resetViewStates() {\n        this._setState('view', configuration.currentProduct.config.defaultViewState || configuration.ELEMENTS_VIEW_STATES.GRID);\n        this._setState('librariesView', configuration.currentProduct.config.defaultViewState || configuration.LIBRARIES_VIEW_STATES.GRID);\n    }\n\n    setRemoveDialogPadding(removePadding) {\n        this._setState('removePadding', removePadding);\n    }\n\n    getRemovePadding() {\n        return this._state.removePadding;\n    }\n\n    setViewByState(viewByState) {\n        this.setCurrentSection(null);\n        this._state['viewBy'] = viewByState;\n        localSettings.setValue(this._getViewByStateKey(), viewByState);\n        if (!libraryManager.currentLibrary) {\n            return;\n        }\n        let sectionToReveal;\n        if ((viewByState === 'type' || viewByState === 'role') && libraryManager.currentLibrary.elements.length) {\n            sectionToReveal = this.getTypeSectionsInViewOrder(libraryManager.currentLibrary.elements).type;\n        }\n        if (viewByState === 'group') {\n            sectionToReveal = this.groupsInViewOrder && this.groupsInViewOrder[0];\n        }\n        sectionToReveal && elementSelectionState.revealGroup(sectionToReveal, true);\n    }\n\n    setViewByGroupMode(viewByGroupMode) {\n        // 'tree' or 'path'\n        this._setState('viewByGroupMode', viewByGroupMode);\n    }\n\n    setNameVisibility(visibility) {\n        localSettings.setValue('nameVisibility', visibility);\n    }\n\n    setElementBackgroundPattern(background) {\n        localSettings.setValue('elementBackground', background);\n    }\n\n    setContextMenuPositionState(position) {\n        this._setState('contextMenuPosition', position);\n    }\n\n    /**\n     * Set Relink Layer Mode\n     * @param {Object} params { message, actionMessage, missing, overlayMessage }\n     * @param {string[]} elementFilterTypes - Note that these are short types which will be converted to mimetypes.\n     * These are the mimetypes that support linking (basically everything that gets exposed through the product bridge):\n     * https://git.corp.adobe.com/ProjectCentral/cc-libraries-api-js/blob/master/server/config.js#L83\n     * Relink mode should filter based on the mimetype of the original element - we don't allow you to change a link to a different type.\n     */\n    setRelinkLayerMode(params, elementFilterTypes) {\n        params = params || {};\n\n        if (!elementFilterTypes) {\n            elementFilterTypes = DEFAULT_RELINK_TYPE_FILTER;\n        }\n        elementFilterTypes = Array.isArray(elementFilterTypes) ? elementFilterTypes : [ elementFilterTypes ];\n        // Convert shortTypes to mimetypes\n        elementFilterTypes = elementFilterTypes.map(shortType => configuration.getElementType(shortType));\n        // Trigger render of LibraryView\n        this._setMode('relink', params, elementFilterTypes);\n        dialogManager.openDialog('relinkLayerOverlay');\n    }\n\n    /**\n     * Set the root mode - sets the current library to null, which also clears any currently selected elements.\n     */\n    showRootView() {\n        libraryManager.currentLibrary = null;\n    }\n\n    /**\n     * Is the root mode\n     */\n    isRootView() {\n        // It is possible to access the one up mode without selecting a library through root search.\n        // Therefore, this needs to make sure it is not in one up mode.\n        return !libraryManager.currentLibrary && !this.isOneUpMode();\n    }\n\n    /**\n     * Set the \"view removed elements\" mode - this can only be triggered from the debug menu.\n     */\n    setRemovedElementsMode() {\n        this._setMode('removed_elements', {});\n    }\n\n    // params: { text, type, findSimilarData, findSimilarId, findSimilarUrl, placeholder, searchId }\n    setSearchMode(params) {\n        if (params && !params?.searchId) {\n            params.searchId = FileUtils.generateUuid();\n        }\n\n        this._setMode('search', params);\n    }\n\n    clearSearchMode() {\n        this.searchState?.resetSearchLoader?.();\n        delete this._state.modeParams.searchId;\n    }\n\n    /**\n     * Set One Up Mode\n     * @param {ElementModel} element The element that the 1-up panel displays the information for.\n     * Changes the view state to the 1-up panel mode.\n     * The 1-up panel is a view accessed by double-clicking an element.\n     * The panel will give a user more information about the double-clicked element and allow them to interact with the element easier.\n     */\n    setOneUpMode(element) {\n        if (!element) {\n            throw new Error('setOneUpMode must have the parameter \"element\" to properly display the one up view.');\n        }\n\n        /*\n            Previous mode is used to determine the view that the program goes back to when the user reaches the one up mode.\n            If the user was searching, it will take them back to their exact search.\n        */\n        this._setMode('one_up', { element, previousMode: this.getState().mode });\n    }\n\n    setOneUpSubElement(subElement) {\n        this._state.modeParams.subElement = subElement;\n    }\n\n    setBrandKitMode(enable) {\n        if (enable && configuration.currentProduct.isExpandedView?.()) {\n            this._setMode('brand_kit');\n        } else {\n            this._setMode('normal');\n        }\n    }\n\n    setStateBeforeOneUpMode() {\n        // This is so that the user can go back to their search if they get reach the one-up view by double clicking an element in search\n        const oneUpParams = this.getState().modeParams;\n        if (oneUpParams.previousMode === 'search') {\n            // If they were in search, set the state back to search mode\n            this.setSearchMode(oneUpParams);\n            this.clearOneUpModeParams();\n        } else {\n            // If they were NOT in search, set the state back to the root view.\n            this.resetMode();\n        }\n\n    }\n\n    clearOneUpModeParams() {\n        delete this._state.modeParams.element;\n        delete this._state.modeParams.previousMode;\n        delete this._state.modeParams.subElement;\n    }\n\n    // TODO: Get rid of this.\n    setNumResults(numResults) {\n        this._state.numResults = numResults;\n    }\n\n    resetMode() {\n        this._listenerManager.notify('resetMode');\n        this.clearFindSimilarSearchMode();\n        this.clearSearchMode();\n        this.librariesSearchState.clearFilters();\n        if (this._state.mode !== 'normal') {\n            this._setMode('normal');\n            this._state.modeParams = Object.assign({}, this._state.modeParams, { text: '' });\n        }\n    }\n\n    // Used to put panel in Stock search + find visually similar mode\n    setFindSimilarSearchMode(findSimilarId, findSimilarUrl, findSimilarPath, deleteFileAfterUse) {\n        this._deleteFindSimilarFile();\n\n        this._state.modeParams = Object.assign({}, this._state.modeParams, {\n            text: translate('DL_STOCK_FIND_SIMILAR_PLACEHOLDER'),\n            type: 'stock',\n            findSimilarData: {\n                id: findSimilarId,\n                url: findSimilarUrl,\n                path: findSimilarPath,\n                deleteFileAfterUse\n            }\n        });\n\n        this.setSearchMode(this._state.modeParams);\n    }\n\n    // Switch from Find Similar Search to regular Stock Search\n    clearFindSimilarSearchMode() {\n        this._deleteFindSimilarFile();\n        this._state.modeParams.findSimilarData = undefined;\n    }\n\n    // @private\n    _getCollapsedKey() {\n        if (this._state.mode === 'search') {\n            return 'search';\n        }\n        const library = libraryManager.currentLibrary;\n        return library && library.id;\n    }\n\n    // @private\n    _getCollapsedMap(collapsedType) {\n        return localSettings.getValue(libraryManager.userId + '#' + COLLAPSED_KEY[collapsedType]) || {};\n    }\n\n    // @private\n    _setCollapsedMap(map, collapsedType) {\n        if (!libraryManager.areLibrariesLoaded) {\n            return;\n        }\n\n        const libraryIds = libraryManager.searchableLibraries.map(library => library.id);\n\n        // Before writing the map, we remove any keys for libraries that don't exist any more\n        // This avoids storing data on disk that we don't need any more.\n        const keysToDelete = Object.keys(map).filter(key => key !== 'search' && !libraryIds.includes(key));\n        keysToDelete.forEach(key => delete map[key]);\n\n        // Finally, save the new map:\n        localSettings.setValue(libraryManager.userId + '#' + COLLAPSED_KEY[collapsedType], map);\n    }\n\n    // @private\n    _isCollapsed(id, collapsedKey) {\n        const disabledIDs = configuration.currentProduct.config.disabledCollapseSectionIds;\n        if (disabledIDs && disabledIDs.includes(id)) {\n            return false;\n        }\n        const key = this._getCollapsedKey();\n        if (!key) {\n            return false;\n        }\n        // Currently only usable for types.\n        const defaultCollapsedMap = !this.isSearchMode() && configuration.currentProduct.config.collapsedTypes || [];\n        const collapsedArray = this._getCollapsedMap(id)[key] || defaultCollapsedMap;\n        return collapsedArray.includes(collapsedKey);\n    }\n\n    // @private\n    _setCollapsed(id, collapsedKey, isCollapsed) {\n        const key = this._getCollapsedKey();\n        if (!key) {\n            return;\n        }\n        const map = this._getCollapsedMap(id);\n        const defaultCollapsedMap = !this.isSearchMode() && configuration.currentProduct.config.collapsedTypes || [];\n        const collapsedArray = map[key] || defaultCollapsedMap;\n\n        if (collapsedArray.includes(collapsedKey) === isCollapsed) {\n            // nothing to do, since it's already correct\n            return;\n        }\n\n        const newMap = Object.assign({}, map);\n        newMap[key] = collapsedArray.filter(t => t !== collapsedKey);\n        if (isCollapsed) {\n            newMap[key].push(collapsedKey);\n        }\n        this._setCollapsedMap(newMap, id);\n    }\n\n    // resets the stored type collapsed states to default\n    resetCollapsedTypes() {\n        this._setCollapsedMap({}, 'type');\n    }\n\n    /**\n     * Get the collapse state of an element type section. Note that a role's usage, e.g. 'logo', is considered a type.\n     * This is associated with the current library, so if you switch to another library (with a different\n     * collapse state), and then back again, it will remember this state.\n     *\n     * @param {string} type Element type or Element's role usage (e.g. \"logo\")\n     * @returns {boolean} True if the type should be collapsed in the UI\n     */\n    isTypeCollapsed(type) {\n        return this._isCollapsed('type', type);\n    }\n\n    /**\n     * Get the collapse state of an element type or role section.\n     * An element is categorized by role instead of type when viewing by role.\n     * This is associated with the current library, so if you switch to another library (with a different\n     * collapse state), and then back again, it will remember this state.\n     *\n     * @param {ElementModel} element\n     * @returns {boolean} True if the element's type or role section should be collapsed in the UI\n     */\n    isElementSectionCollapsed(element) {\n        // Note: For now we assume just the first role is the section used in View By Role\n        const type = this.viewByState === 'role' && elementConfiguration.getElementRole(element) || element.type;\n        return this.isTypeCollapsed(type);\n    }\n\n    /**\n     * Get the collapse state of an element group.\n     * This is associated with the current library, so if you switch to another library (with a different\n     * collapse state), and then back again, it will remember this state.\n     *\n     * @param {string} groupId - ID of the collapsed group\n     * @returns {boolean} True if the type should be collapsed in the UI\n     */\n    isGroupCollapsed(groupId) {\n        // The id for the ungrouped group and the unsupported type are both '*', so they conflict.\n        // TODO: We should fix this properly by changing the ungrouped group id.\n        return this._isCollapsed('group', groupId === '*' ? 'ungrouped' : groupId);\n    }\n\n    /**\n     * Get the collapse state of an element group.\n     * This is associated with the current library, so if you switch to another library (with a different\n     * collapse state), and then back again, it will remember this state.\n     *\n     * @param {string} groupId - ID of the collapsed group\n     * @returns {boolean} True if the type should be collapsed in the UI\n     */\n    isGroupNavigationCollapsed(groupId) {\n        // The id for the ungrouped group and the unsupported type are both '*', so they conflict.\n        // TODO: We should fix this properly by changing the ungrouped group id.\n        return this._isCollapsed('groupNavigation', groupId);\n    }\n\n    /**\n     * Change the collapse state of an element type group - this is saved to local storage so it persists.\n     * This is associated with the current library, so if you switch to another library (with a different\n     * collapse state), and then back again, it will remember this state.\n     *\n     * @param {string} type Element type\n     * @param {boolean} isCollapsed True if the type should be collapsed in the UI\n     */\n    setTypeCollapsed(type, isCollapsed) {\n        this._setCollapsed('type', type, isCollapsed);\n    }\n\n    /**\n     * Change the collapse state of an element group - this is saved to local storage so it persists.\n     * This is associated with the current library, so if you switch to another library (with a different\n     * collapse state), and then back again, it will remember this state.\n     *\n     * @param {string} groupId Group\n     * @param {boolean} isCollapsed True if the type should be collapsed in the UI\n     */\n    setGroupCollapsed(groupId, isCollapsed) {\n        // The id for the ungrouped group and the unsupported type are both '*', so they conflict.\n        // TODO: We should fix this properly by changing the ungrouped group id.\n        this._setCollapsed('group', groupId === '*' ? 'ungrouped' : groupId, isCollapsed);\n    }\n\n    /**\n     * Change the collapse state of an element group - this is saved to local storage so it persists.\n     * This is associated with the current library, so if you switch to another library (with a different\n     * collapse state), and then back again, it will remember this state.\n     *\n     * @param {string} groupId Group\n     * @param {boolean} isCollapsed True if the type should be collapsed in the UI\n     */\n    setGroupNavigationCollapsed(groupId, isCollapsed) {\n        // The id for the ungrouped group and the unsupported type are both '*', so they conflict.\n        // TODO: We should fix this properly by changing the ungrouped group id.\n        this._setCollapsed('groupNavigation', groupId, isCollapsed);\n    }\n\n    /**\n     * If the collapsed state of a group navigation item was contingent on a drag action, store the group id\n     * @param {string} groupId\n     */\n    setCollapsedGroupNavigationToDrag(groupId) {\n        this._state.collapsedGroupNavToDrag.push(groupId);\n    }\n\n    /**\n     * Returns true if the given group navigation item was collapsed during a drag action\n     * @param {string} groupId\n     * @returns {Bool}\n     */\n    collapsedGroupNavigationToDrag(groupId) {\n        return !!this._state.collapsedGroupNavToDrag.find(id => id === groupId);\n    }\n\n    /**\n     * Reset the group navigation items being counted as collapsed during a drag action\n     */\n    clearCollapsedGroupNavigationToDrag() {\n        this._state.collapsedGroupNavToDrag = [];\n    }\n\n    /**\n     * Returns a list of all elements in the given branches, in the order their branches were passed in.\n     * @param {GroupsTreeBranch[]} groupBranches\n     * @returns {Element[]}\n     */\n    _getElementsFromBranches(groupBranches) {\n        return groupBranches.reduce((elements, section) => {\n            const sectionElements = section.children.map(child => child.item);\n            return elements.concat(sectionElements);\n        }, []);\n    }\n\n    /**\n     * Return all the elements in nested group order\n     * @param {Element[]} elements to sort into view order, normally this is all the library elements\n     * @returns {Element[]} array of elements as they would appear top to bottom in list view (or left to right in grid view)\n     */\n    _getElementsInNestedGroupOrder(elements) {\n        if (!elements.length) { return []; }\n        // We can't sort by modified in view by group, fall back to sort by order.\n        const sortBy = this.elementSortState === 'modified' ? 'order' : this.elementSortState;\n        const library = elements[0].library;\n        const groupSections = elementConfiguration.groupElementsByCustomGroup(elements, library.getGroups(), 0, sortBy);\n        return this._getElementsFromBranches(groupSections);\n    }\n\n    /**\n     * Given a list of elements, sorts them so they're in the same order as in the view.\n     * This returns a new array - it does not modify the array in-place.\n     * Note: You should filter the elements before passing them to this function,\n     * rather than relying on filtered elements being sorted first.\n     * If you're calling `getElementsInViewOrder(library.elements)`, consider calling `getLibraryElementsInViewOrder(library)` instead,\n     * it outputs the same result but it will use a cached value if available.\n     * @param {ElementModel[]} elements\n     */\n    getElementsInViewOrder(elements) {\n        if (this.isGroupView()) {\n            return this._getElementsInNestedGroupOrder(elements);\n        }\n        const typeSections = this.getTypeSectionsInViewOrder(elements);\n        return typeSections.reduce((orderedElements, section) => orderedElements.concat(section.children), []);\n    }\n\n    /**\n     * Given a library, return its elements so that they're in the same order they would be in the view.\n     * If you only want to group a subset of all library elements (i.e filtering/searching), call `getElementsInViewOrder()` instead.\n     * @param {Library} library\n     * @returns {Element[]}\n     */\n    getLibraryElementsInViewOrder(library) {\n        if (this.isGroupView()) {\n            // We can't sort by modified in view by group, fall back to sort by order.\n            const sortBy = this.elementSortState === 'modified' ? 'order' : this.elementSortState;\n            const { root } = getLibraryCustomGroupsTree(library, { sortBy, maxDepth: 0 });\n            return this._getElementsFromBranches(root.children);\n        }\n        return this.getElementsInViewOrder(library.elements);\n    }\n\n    /**\n     * Given some elements, return the type/brand sections and their element children, in view order\n     * @param {ElementModel[]} elements\n     * @returns {Object[]} An array of sections containing a timestamp or type and an array of children (elements)\n     */\n    getTypeSectionsInViewOrder(elements) {\n        const sortBy = this.isSearchMode() || this.isRelinkLayerMode() ? this._elementSearchSortState : this.elementSortState;\n        return this.isRemovedElementsMode()\n            ? elementConfiguration.groupElementsByTime(elements, 'removed')\n            : elementConfiguration.groupElementsByType(elements, sortBy);\n    }\n\n    /**\n     * In the current library - returns all the library groups so they're in the same order as in the view.\n     *\n     * @returns {GroupModel[]}\n     */\n    @computed get groupsInViewOrder() {\n        if (!libraryManager.currentLibrary) {\n            return [];\n        }\n        const elementSortBy = this.elementSortState;\n        const sortBy = libraryManager.currentLibrary && libraryManager.currentLibrary.fixedSortOrder || elementSortBy;\n        const { root } = getLibraryCustomGroupsTree(libraryManager.currentLibrary, { maxDepth: 0, sortBy });\n        return root.children.reduce((groups, section) => groups.concat(section.item), []);\n    }\n\n    @computed get librariesInViewOrder() {\n        const libraries = appState.libraryManager.getCCLibraries();\n        const sortBy = this.librarySortState;\n        const filterBy = this.currentLibrariesFilter;\n        const searchText = this.getSearchText();\n        const isAscending = !this.librarySortOrderDescendingState;\n        return getLibrariesInViewOrder(libraries, { sortBy, filterBy, searchText, isAscending });\n    }\n\n    setImportExportInProgress(value) {\n        this._state.isImportExportInProgress = value;\n    }\n\n    get isImportExportInProgress() {\n        return this._state.isImportExportInProgress;\n    }\n\n    setTourInProgress(value) {\n        this._state.isTourInProgress = value;\n    }\n\n    get isTourInProgress() {\n        return this._state.isTourInProgress;\n    }\n\n    get isPlainRootView() {\n        return this.isRootView() && !this.isRelinkLayerMode() && !this.isRemovedElementsMode() && !this.isSearchMode();\n    }\n\n    setCurrentSection(section) {\n        this._state.currentSection = section;\n    }\n\n    get currentSection() {\n        return this._state.currentSection;\n    }\n\n    get searchBarBottom() {\n        return this._headerView && this._headerView.getSearchBarBottom() || 0;\n    }\n\n    get panelHeaderHeight() {\n        const customHeaderView = environment.getCustomHeaderView?.();\n        const customHeaderHeight = customHeaderView && customHeaderView.height || 0;\n        const headerHeight = this._headerView && this._headerView.getHeight() || 0;\n        return customHeaderHeight + headerHeight;\n    }\n}\n\nexport default new ViewState();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { observable } from 'mobx';\nimport retargetEvents from '@ccx-public/component-shared/utils/retargetEvents';\nimport environment from 'app/js/environment';\n\nconst measurementCache = observable.map();\nconst measurementDOMElements = {};\n\n/**\n * Measure the width/height of text as rendered in browser, given a css class and max width.\n * Useful for virtual scroll, which needs to know the height before the component is actually rendered.\n *\n * Note on implementation: Though using canvas.measureText() is preferrable to adding a DOM node,\n * it didn't work in the case of the Search Result Header.\n *\n * @param {string} text\n * @param {string} className\n * @param {number} maxWidth - Width in px\n * @param {node} customRootNode\n * @returns {Object} width and height in px\n */\nexport function measureTextDimensions(text, className, maxWidth, customRootNode) {\n    const key = JSON.stringify({ text, className });\n\n    // If already cached, can bypass the calculation\n    const cachedValue = measurementCache.get(key);\n    if (cachedValue && cachedValue.maxWidth === maxWidth) {\n        return cachedValue.dimensions;\n    }\n\n    let element = measurementDOMElements[key];\n    if (!element) {\n        // Create a new DOM element for measuring this text.\n        const domElement = document.createElement('span');\n        domElement.className = className;\n        domElement.style.display = 'inline-block';\n        domElement.style.visibility = 'hidden';\n        domElement.textContent = text;\n        const rootNode = customRootNode || environment.getRootPanelElement()?.shadowDOM || document.body;\n        rootNode.appendChild(domElement);\n        element = measurementDOMElements[key] = { domElement };\n    }\n\n    if (element.maxWidth !== maxWidth) {\n        element.domElement.style.maxWidth = maxWidth + 'px';\n        element.maxWidth = maxWidth;\n    }\n\n    const measure = () => {\n        const width = element.domElement.clientWidth;\n        const height = element.domElement.clientHeight;\n        if (width || height) {\n            element.domElement.parentNode.removeChild(element.domElement);\n            clearInterval(element.interval);\n            delete measurementDOMElements[key];\n\n            const dimensions = { width, height };\n            setTimeout(() => measurementCache.set(key, { maxWidth: element.maxWidth, dimensions }));\n            return dimensions;\n        }\n    };\n\n    const dimensions = measure();\n    if (!dimensions && !element.interval) {\n        // UXP won't give us the answer straight away (unlike normal browser), so need to poll\n        element.interval = setInterval(measure, 10);\n    }\n\n    // In the meantime, return the previous cached value (so there's less stutter)\n    return dimensions || (cachedValue ? cachedValue.dimensions : { width: 0, height: 0 });\n}\n\n/**\n * Returns a promise that resolves to the content duration\n *\n * Note on implementation: This only works for audio/video filetypes that are supported by the HTML5 audio/video tag\n *\n * @param {string} contentPath\n */\nexport function getContentDuration(contentPath) {\n    return new Promise((resolve, reject) => {\n        // this works for audio elements even if the domElement is video type\n        const domElement = document.createElement('video');\n\n        domElement.src = contentPath;\n        domElement.id = 'videoDurationElement';\n        domElement.preload = 'metadata';\n        domElement.style.display = 'inline-block';\n        domElement.style.visibility = 'hidden';\n        document.body.appendChild(domElement);\n\n        domElement.onloadedmetadata = () => {\n            resolve(domElement.duration * 1000);\n            domElement.parentNode.removeChild(domElement);\n        };\n\n        domElement.onerror = () => {\n            reject();\n            domElement.parentNode.removeChild(domElement);\n        };\n    });\n}\n\n/**\n * Shorthand for measuring just the text height (when you don't care about the width)\n * Note: seems to have performance issues in Safari browser\n *\n * @param {string} text\n * @param {string} className\n * @param {number} maxWidth - Width in px\n * @returns {number} height in px\n */\nexport function measureTextHeight(text, className, maxWidth) {\n    return measureTextDimensions(text, className, maxWidth).height;\n}\n\n/**\n * Get the composed path for a given event (i.e. path of DOM elements through which the request bubbled)\n *\n * @param {Event} event\n * @returns {HTMLElement[]} Path to the event\n */\nexport function getComposedPath(event) {\n    if (retargetEvents.ignoreEventPaths) {\n        return;\n    }\n    // React events don't include the composedPath reliably, so look at the native event if present\n    event = event.nativeEvent || event;\n\n    if (event.path || event.composedPath) {\n        return event.path || (event.composedPath && event.composedPath());\n    }\n\n    // Fallback if don't have a path on the event:\n    const path = [];\n    let el = event.target;\n    while (el) {\n        path.push(el);\n        if (el.tagName === 'HTML') {\n            path.push(document);\n            path.push(window);\n            return path;\n        }\n        el = el.parentElement;\n    }\n}\n\n/**\n * Does the event target a node nested within a specific parent node?\n *\n * @param {Event} event\n * @param {HTMLElement} parentElement\n * @returns {boolean} Is the target element within the parent?\n */\nexport function isEventWithin(event, parentElement) {\n    const path = getComposedPath(event);\n    return path ? path.includes(parentElement) : parentElement.contains(event.target);\n}\n\n/**\n * Returns closest ancenstor node in focussed state to an event's target node\n *\n * @param {Event} event\n * @returns {HTMLElement} ancestorElement\n */\nexport function getClosestFocusedAncestor(event) {\n    const root = event?.target?.getRootNode?.();\n    let ancestor;\n    if (root && event.path) {\n        ancestor = event.path.find(element => (\n            element?.getRootNode?.() === root && element === root.activeElement\n        ));\n    }\n    return ancestor;\n}\n\n/**\n * Check if an array of DOM nodes (e.g. event.composedPath()) contains nodes with the given tag names, in order.\n * @param {HTMLElement[]} path - array of DOM nodes\n * @param {string[]} nodeNames - array of tag names\n * @returns {boolean}\n */\nexport function doesPathContainNodeNamesInOrder(path, nodeNames) {\n    let nextIndex = 0;\n    for (let i = 0; i < path.length; i++) {\n        if (path[i].nodeName === nodeNames[nextIndex]) { nextIndex++; }\n        if (nextIndex === nodeNames.length) { // Found all the expected node names in the correct order\n            return true;\n        }\n    }\n    return false;\n}\n\n/**\n * Safely define a custom HTML element.\n * @param {string} tagName - the name to register for the element\n * @param {HTMLElement} CustomElementClass - the constructor for the element\n * @param {CustomElementRegistry} [customElements=window.customElements] - the customElements registry to use\n * @returns {boolean}\n */\nexport function defineElement(tagName, CustomElementClass, customElements = window.customElements) {\n    if (!customElements || !tagName || !CustomElementClass) { return; }\n\n    try {\n        customElements.get(tagName) || customElements.define(tagName, CustomElementClass);\n    } catch (e) {\n        // Multiple elements cannot share the same constructor. Use inheritance as a workaround.\n        class CustomElementOverride extends CustomElementClass {}\n        customElements.define(tagName, CustomElementOverride);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from '../config/configuration';\nimport elementConfiguration from '../config/elementConfiguration';\nimport productInterface from '../interface/productInterface';\nimport * as FileUtils from '../utils/fileUtils';\nimport { createElementExtraMetrics, checkLibraryWritable, checkFileSizes, getCuratedName, setThumbnail } from '../utils/libraryUtils';\nimport libraryManager from '../managers/libraryManager';\nimport { translate } from '../managers/translationManager';\nimport librarySizeManager from '../managers/librarySizeManager';\nimport metrics from '../interface/metrics';\nimport elementSelectionState from '../state/elementSelectionState';\nimport { getFileUploadData } from 'app/js/utils/libraryUtils';\nimport environment from 'app/js/environment';\nimport dialogManager from 'app/js/managers/dialogManager';\nimport { getContentDuration } from 'app/js/utils/DOMUtils';\nimport { PerformanceTimer } from 'app/js/utils/performanceUtils';\nimport tempFileManager from 'app/js/managers/tempFileManager';\nimport viewState from 'app/js/state/viewState';\nimport { CloudDriver, utils } from '@cclibraries/cc-libraries-js';\nimport toastManager from 'app/js/managers/toastManager';\nimport { when } from 'mobx';\nimport debugLog from './debugLog';\n\n/**\n * Generic method for creating a library element - supports adding multiple representations, but only if all the representations have\n * files associated with them.\n * @private\n *\n * @param {string} elementType\n * @param {string} name Name of the new element.\n * @param {Object[]} [files] Files to add\n * @param {string} [thumbnailPath] Path to the thumbnail of the element.\n * @param {LibraryModel} library The library to add the element to.\n * @param {string} opType String describing the type of the operation, used by analytics.\n * @param {Object[]} [elementData] Additional data to add to the element ({ namespace, key, value }).\n * @returns {Promise} resolves with the element object, if successful.\n */\nfunction addMultiFileElement(elementType, name, files = [], thumbnailPath, library, opType, elementData = []) {\n\n    for (let i = 0; i < files.length; i++) {\n\n        if (configuration.currentProduct.config?.copyTempFileIfNecessary) {\n            files[i].path = configuration.currentProduct.config.copyTempFileIfNecessary(files[i].path);\n        }\n\n        const e = FileUtils.existsFile(files[i].path);\n        if (!e) {\n            return Promise.reject(`Could not add new element: path ${files[i].path} does not exist`);\n        }\n    }\n\n    if (thumbnailPath && !FileUtils.existsFile(thumbnailPath)) {\n        return Promise.reject(`Could not add new element: thumbnail path ${thumbnailPath} does not exist`);\n    }\n\n    if (!library) {\n        return Promise.reject('Could not add new element: no library');\n    }\n\n    if (!checkLibraryWritable(library, true)) {\n        return Promise.reject('Could not create element: library is read-only');\n    }\n\n    // Prevent adding to library, if the asset is too big\n    if (!checkFileSizes(files, true)) {\n        return Promise.reject('Could not create element: one or more files exceed 1GB limit');\n    }\n\n    const newElement = createElementExtraMetrics(library, name, elementType, { opType });\n    const updatePromises = [];\n\n    files.forEach(file => {\n        const fileMimeType = file.type || FileUtils.fileNameToMimeType(file.path, elementType);\n        const newRepresentation = newElement.createRepresentation(fileMimeType, file.relationship);\n\n        if (file.data) {\n            // Additional data (key-value pairs) to add to the primary representation\n            file.data.forEach(data => newRepresentation.setValue(data.namespace, data.key, data.value));\n        }\n\n        updatePromises.push(newRepresentation.setContentFromPath(file.path, file.moveFile).then(() => {\n            if (file.dimensions) {\n                // Can explicitly provide dimensions\n                newRepresentation.width = file.dimensions.width;\n                newRepresentation.height = file.dimensions.height;\n            }\n        }));\n    });\n\n    if (thumbnailPath) {\n        const thumbnailSize = elementConfiguration.getThumbnailSize(newElement);\n        updatePromises.push(setThumbnail(newElement, thumbnailSize, thumbnailPath));\n    }\n\n    // Additional data (key-value pairs) to add to the element\n    elementData.forEach(data => newElement.setValue(data.namespace, data.key, data.value));\n\n    return Promise.all(updatePromises)\n        .then(() => {\n            newElement.endOperation();\n            return newElement;\n        })\n        .catch(err => {\n            library.removeElement(newElement, true);\n            return Promise.reject(`Could not create element: ${err}`);\n        });\n}\n\n/**\n * Add a graphic element to a libary. This will delete any files you pass in, after creating the library element (it's assumed\n * that the files are temporary).\n *\n * @param {string} name Name of the new element.\n * @param {Object[]} representations Representations to add ({ path, relationship, data, dimensions, moveFile })\n * @param {string} [thumbnailPath] Path to the thumbnail of the element.\n * @param {LibraryModel} library The library to add the element to.\n * @param {string} opType String describing the type of the operation, used by analytics.\n * @param {Object} [appMetadata] Object with additional data to pass to `productInterface.sendElementCreated()`.\n * @param {Object[]} [elementData] Additional data to add to the element ({ namespace, key, value }).\n * @returns {Promise} resolves with the element object, if successful.\n */\nexport function addGraphicElement(name, representations, thumbnailPath, library, opType, appMetadata, elementData) {\n    name = getCuratedName(library, name);\n\n    const type = configuration.IMAGE_ELEMENT_TYPE;\n    return addMultiFileElement(type, name, representations, thumbnailPath, library, opType, elementData)\n        .then(element => {\n            // Notify products that an element is created so that they can do appropriate stitching\n            // if they want to replace the content with a linked smart object.\n            productInterface.sendElementCreated(element, appMetadata);\n            return element;\n        });\n}\n\n/**\n * Add a audio element to a libary. This will delete any files you pass in, after creating the library element (it's assumed\n * that the files are temporary).\n *\n * @param {string} name Name of the new element.\n * @param {Object[]} representations Representations to add ({ path, relationship, data, dimensions, moveFile })\n * @param {LibraryModel} library The library to add the element to.\n * @param {string} opType String describing the type of the operation, used by analytics.\n * @param {Object} [appMetadata] Object with additional data to pass to `productInterface.sendElementCreated()`.\n * @param {Object[]} [elementData] Additional data to add to the element ({ namespace, key, value }).\n * @returns {Promise} resolves with the element object, if successful.\n */\nexport function addAudioElement(name, representations, library, opType, appMetadata, elementData) {\n    name = getCuratedName(library, name);\n\n    const type = configuration.AUDIO_ELEMENT_TYPE;\n    return addMultiFileElement(type, name, representations, undefined, library, opType, elementData)\n        .then(element => {\n            // Notify products that an element is created so that they can do appropriate stitching\n            // if they want to replace the content with a linked smart object.\n            productInterface.sendElementCreated(element, appMetadata);\n            return element;\n        });\n}\n\n/**\n * Add a video element to a libary. This will delete any files you pass in, after creating the library element (it's assumed\n * that the files are temporary).\n *\n * @param {string} name Name of the new element.\n * @param {Object[]} representations Representations to add ({ path, relationship, data, dimensions, moveFile })\n * @param {string} [thumbnailPath] Path to the thumbnail of the element.\n * @param {LibraryModel} library The library to add the element to.\n * @param {string} opType String describing the type of the operation, used by analytics.\n * @param {Object} [appMetadata] Object with additional data to pass to `productInterface.sendElementCreated()`.\n * @param {Object[]} [elementData] Additional data to add to the element ({ namespace, key, value }).\n * @returns {Promise} resolves with the element object, if successful.\n */\nexport function addVideoElement(name, representations, thumbnailPath, library, opType, appMetadata, elementData) {\n    name = getCuratedName(library, name);\n\n    const type = configuration.VIDEO_ELEMENT_TYPE;\n    return addMultiFileElement(type, name, representations, thumbnailPath, library, opType, elementData)\n        .then(element => {\n            // Notify products that an element is created so that they can do appropriate stitching\n            // if they want to replace the content with a linked smart object.\n            productInterface.sendElementCreated(element, appMetadata);\n            return element;\n        });\n}\n\n/**\n * Add an animation element to a libary. This will delete any files you pass in, after creating the library element (it's assumed\n * that the files are temporary).\n *\n * @param {string} name Name of the new element.\n * @param {Object[]} representations Representations to add ({ path, relationship, data, dimensions, moveFile })\n * @param {string} [thumbnailPath] Path to the thumbnail of the element.\n * @param {LibraryModel} library The library to add the element to.\n * @param {string} opType String describing the type of the operation, used by analytics.\n * @param {Object} [appMetadata] Object with additional data to pass to `productInterface.sendElementCreated()`.\n * @param {Object[]} [elementData] Additional data to add to the element ({ namespace, key, value }).\n * @returns {Promise} resolves with the element object, if successful.\n */\nexport function addAnimationElement(name, representations, thumbnailPath, library, opType, appMetadata, elementData) {\n    name = getCuratedName(library, name);\n\n    const type = configuration.ANIMATION_ELEMENT_TYPE;\n    return addMultiFileElement(type, name, representations, thumbnailPath, library, opType, elementData)\n        .then(element => {\n            // Notify products that an element is created so that they can do appropriate stitching\n            // if they want to replace the content with a linked smart object.\n            productInterface.sendElementCreated(element, appMetadata);\n            return element;\n        });\n}\n\n/**\n * Add a layer style element to a libary. This will delete any files you pass in, after creating the library element (it's assumed\n * that the files are temporary).\n *\n * @param {string} name Name of the new element.\n * @param {Object} primaryRep Primary representation ({ path, relationship, data, dimensions, moveFile })\n * @param {string} thumbnailPath Path to the thumbnail of the element.\n * @param {LibraryModel} library The library to add the element to.\n * @param {string} opType String describing the type of the operation, used by analytics.\n * @returns {Promise} resolves with the element object, if successful.\n */\nexport function addLayerStyleElement(name, primaryRep, thumbnailPath, library, opType) {\n    primaryRep.relationship = 'primary';\n\n    // TODO: Should we use getCuratedName() for layer styles?\n    const type = configuration.LAYER_STYLE_ELEMENT_TYPE;\n    return addMultiFileElement(type, name, [ primaryRep ], thumbnailPath, library, opType);\n}\n\n/**\n * Add a brush element to a libary. This will delete any files you pass in, after creating the library element (it's assumed\n * that the files are temporary).\n *\n * @param {string} name Name of the new element.\n * @param {Object} primaryRep Primary representation ({ path, relationship, data, dimensions, moveFile })\n * @param {string} thumbnailPath Path to the thumbnail of the element.\n * @param {LibraryModel} library The library to add the element to.\n * @param {string} opType String describing the type of the operation, used by analytics.\n * @returns {Promise} resolves with the element object, if successful.\n */\nexport function addBrushElement(name, primaryRep, thumbnailPath, library, opType) {\n    primaryRep.relationship = 'primary';\n\n    // TODO: Should we use getCuratedName() for brush elements?\n    const type = configuration.BRUSH_ELEMENT_TYPE;\n    return addMultiFileElement(type, name, [ primaryRep ], thumbnailPath, library, opType);\n}\n\n/**\n * Add a 3D element to a libary. This will delete any files you pass in, after creating the library element (it's assumed\n * that the files are temporary).\n *\n * @param {string} name Name of the new element.\n * @param {Object[]} representations Representations to add ({ path, relationship, data, dimensions, moveFile })\n * @param {string} [thumbnailPath] Path to the thumbnail of the element.\n * @param {LibraryModel} library The library to add the element to.\n * @param {string} opType String describing the type of the operation, used by analytics.\n * @param {Object} [appMetadata] Object with additional data to pass to `productInterface.sendElementCreated()`.\n * @param {Object[]} [elementData] Additional data to add to the element ({ namespace, key, value }).\n * @returns {Promise} resolves with the element object, if successful.\n */\nexport function addModelElement(name, representations, thumbnailPath, library, opType, appMetadata, elementData) {\n    name = getCuratedName(library, name);\n\n    const type = configuration.THREE_D_ELEMENT_TYPE;\n\n    return addMultiFileElement(type, name, representations, thumbnailPath, library, opType, elementData)\n        .then(element => {\n            // Notify products that an element is created so that they can do appropriate stitching\n            // if they want to replace the content with a linked smart object.\n            productInterface.sendElementCreated(element, appMetadata);\n            return element;\n        });\n}\n\n/**\n * Gets a File object from the passed in representation - supports in precedence order:\n * - content: a Blob or a File\n * - contentURL: A URL (which will be downloaded into a blob)\n * @param {Object} representationData\n * @param {string} name\n * @param {string} type\n * @returns {File|undefined}\n */\nexport async function getFileFromRepresentationData({ content, contentURL }, name = '', type) {\n    // Look for a file:\n    try {\n        if (content && content instanceof File) {\n            return content;\n        }\n        // Look for a blob:\n        let blob;\n        if (content && content instanceof Blob) {\n            blob = content;\n        } else if (contentURL) {\n            const response = await fetch(contentURL);\n            blob = await response.blob();\n        }\n        if (blob) {\n            type = blob.type;\n            name = name || `${FileUtils.generateUuid()}.${FileUtils.mimeTypeToExtensions(type)[0]}`;\n            return new File([ blob ], name, { type });\n        }\n    } catch {\n        // File is undefined in UXP so catch this just in case\n    }\n    // We go through this code on desktop, where the \"file\" is not actually a File, so let any non-file/blob\n    // content pass through\n    return content;\n}\n\n/**\n * Create an element from an object describing its data\n *\n * @param {Object} elementData The data for element to create - this includes the name, type,\n * group, role, customData, and array of representations. If it's a file-based representation,\n * the content is expected as a File or Blob object (on the representation.content), or can\n * be passed as a contentURL, which will be downloaded into a File.\n * @param {Library} library The library to add the elements to\n * @param {Object} extraMetrics Properties to send with analytics\n * @returns {Promise} resolves with the element if successfully created\n */\nexport async function createElementFromData(elementData, library, extraMetrics) {\n    // If dealing with a large bulk upload that will fill the library,\n    // since copyFile takes a while, it would be possible for other elements\n    // to be added to the library and the library to go over the limit.\n    // To prevent this, we keep track of the number of \"pending\" uploads\n    // where the file is being copied before we can actually create the element.\n    librarySizeManager.incrementPendingElements(library);\n\n    try {\n        await Promise.all(elementData.representations.map(async (representationData) => {\n            const file = await getFileFromRepresentationData(representationData);\n            if (file) {\n                // returns a path to the unreferenced DCX component\n                // the file.type may be incorrect, so pass the preferred type for the representation as well\n                representationData.stagedData = await library.stageRepresentationForCommit(file, representationData.type);\n            }\n        }));\n    } catch (error) {\n        debugLog.log(error);\n    } finally {\n        // Decrement the pending uploads, since we are about to create the element.\n        librarySizeManager.decrementPendingElements(library);\n    }\n\n    // If the library was deleted (or became read-only) while we were copying the file, abort!\n    if (library.isDeletedLocally || !library.isWritable) {\n        return Promise.reject('Library was deleted (or became read-only).');\n    }\n\n    // If library has synced some new elements and ran out of space during the bulk upload, start saving to an overflow library.\n    // Note: We need to use the actual size of the library, not including pending elements,\n    // to determine when to create the overflow library.\n    if (library.elementCount >= libraryManager.MAX_ELEMENTS) {\n        library = libraryManager.getOverflowLibrary(library.name);\n    }\n\n    // Synchronously create element (affects library's element count immediately)\n    const element = createElementExtraMetrics(library, elementData.name || '', elementData.type, extraMetrics);\n    if (!element) {\n        return Promise.reject('Could not create element during upload.');\n    }\n    if (elementData.roles) {\n        element.roles = elementData.roles;\n    }\n    if (elementData.group) {\n        const group = library.getGroupById(elementData.group.id);\n        if (group) {\n            element.setOrderInGroup(group, elementData.group.order);\n        }\n    }\n    if (elementData.sourceRef) {\n        element.sourceRef = elementData.sourceRef;\n    }\n    if (elementData.customData) {\n        elementData.customData.forEach(({ namespace, key, value }) => element.setValue(namespace, key, value));\n    }\n\n    metrics.setExtraEventMetrics('updateElement', { disableReport: true });\n\n    try {\n        await Promise.all(elementData.representations.map(async (representationData) => {\n            const representation = element.createRepresentation(representationData.type, representationData.relationship || 'primary');\n            if (representationData.stagedData) {\n                // link representation to the previously uploaded DCX component\n                await representation.setStagedContent(representationData.stagedData);\n            }\n            if (representationData.customData) {\n                representationData.customData.forEach(({ namespace, key, value }) => representation.setValue(namespace, key, value));\n            }\n            if (representationData.setDuration) {\n                try {\n                    const duration = await getContentDuration(representation.getCachedContentPath());\n                    const type = element.type === configuration.VIDEO_ELEMENT_TYPE ? 'video' : 'audio';\n                    representation.setValue(type, 'data', { duration });\n                } catch (e) {\n                    // Continue if this fails (duration is nice to have, but we won't fail to create the element if we can't get it).\n                }\n            }\n        }));\n    } catch (e) {\n        if (!library.isDeletedLocally && library.isWritable) {\n            library.removeElement(element, true);\n        }\n        return;\n    }\n\n    element.endOperation();\n    return element;\n}\n\n/**\n * From a file list (from input or dataTransfer), add the selected files to the library.\n *\n * @param {FileList|File[]} droppedFiles The files we want to add to the library.\n * Note that each file may have a .group or .role property to add to the element.\n * @param {Library} library The library to add the elements to\n * @param {string} source The source of the call used for analytics\n * @returns {Promise} resolves with the array of element objects.\n */\nexport async function createElementsFromFiles(droppedFiles, library, source) {\n    const performanceTimer = new PerformanceTimer('Add Elements');\n\n    // Start syncing spinner ahead of actual progress updates, in order to show that the panel is working\n    // during the delay after drop (or \"Continue\" button) and before the first element is created and rendered. [CCXC-1307]\n    libraryManager.showSyncSpinner();\n\n    viewState.clearAllSelections(); // Clear selection before uploading files\n    const elementMetaDataForAnalytics = new Map();\n    const createElementFromFile = async (dropFile) => {\n        const fileName = dropFile.name;\n        const fileExtension = dropFile.extension || FileUtils.getFileNameExtension(fileName);\n        const fileSize = dropFile.size;\n        let fileMimeType;\n\n        if (fileExtension) {\n            fileMimeType = FileUtils.getUploadableType(FileUtils.extensionToMimeTypes(fileExtension));\n        } else { // If no extension, treat it as an image\n            fileMimeType = FileUtils.fileNameToMimeType(fileName, configuration.IMAGE_ELEMENT_TYPE);\n        }\n\n        if (!fileMimeType) { return Promise.reject('Unsupported drag data'); } // Do not attempt to upload if we cannot figure out the file content type\n\n        const elementType = FileUtils.getUploadElementTypeFromMimeType(fileMimeType);\n\n        try {\n            const element = await createElementFromData({\n                name: FileUtils.getFileNameWithoutExtension(fileName),\n                type: elementType,\n                roles: dropFile.role && [ dropFile.role ],\n                group: dropFile.group,\n                customData: dropFile.customData,\n                representations: [ {\n                    content: dropFile,\n                    type: fileMimeType,\n                    setDuration: [ configuration.VIDEO_ELEMENT_TYPE, configuration.AUDIO_ELEMENT_TYPE ].includes(elementType) && environment.videoElementsSupported\n                } ]\n            }, library, { opType: source || 'dragDrop', extension: fileExtension, size: dropFile.size });\n            // Add the newly added element to the selection only if the library and the selection haven't changed while we were uploading\n            if (element && library === libraryManager.currentLibrary && elementSelectionState.selection.length === 0) {\n                elementSelectionState.setSelection(element);\n            }\n            performanceTimer.done();\n            elementMetaDataForAnalytics.set(element.id, {\n                fileExtension, fileSize\n            });\n            return element;\n        } catch (e) {\n            metrics.reportError('Add Assets', 'Element', undefined, undefined, undefined, { content: { category: source || 'Bulk Upload' } }, library);\n        }\n    };\n\n    // FileList doesn't return an array. So we have to use Array.from to convert it to use forEach\n    const fileListArray = Array.from(droppedFiles);\n\n    // if the first item is a library file, it means all dropped files are library files\n    if (FileUtils.isLibraryFileExtension(fileListArray[0].extension)) {\n        if (configuration.currentProduct.config.disableImport) {\n            return Promise.resolve();\n        }\n        const paths = fileListArray.map(file => file.path);\n        metrics.reportEvent('Library Operations', 'Import Library', 'click', 'start', { content: { category: 'Bulk Upload' } });\n        metrics.setExtraEventMetrics('importLibrary', { content: { category: 'Bulk Upload' } });\n        dialogManager.openDialog('importExportLibrary', { library, mode: 'import', paths });\n        return Promise.resolve();\n    }\n\n    const uploadTime = utils.estimateUploadTime(fileListArray);\n\n    if (uploadTime >= configuration.WARN_EXTENDED_UPLOAD_TIME && configuration.currentProduct.config.warnLargeFileUpload) {\n        configuration.currentProduct.config.warnLargeFileUpload();\n\n        metrics.reportEvent('Navigation', 'Large Upload', 'render', 'warning-modal-displayed', {\n            ccl: {\n                'file_count': fileListArray.length,\n                'upload_size': fileListArray.reduce((total, file) => total + file.size, 0),\n            }\n        });\n\n        // We need to allow the event loop time to render the toast before\n        // file uploads due to the possibility of locking...\n        // Will be removed once the upload workflow has been rearchitected to\n        // reduce the occurence of this.\n        // See https://jira.corp.adobe.com/browse/CCXC-18445\n        await new Promise(r => setTimeout(r, 10));\n    }\n\n    const promises = fileListArray.map(createElementFromFile);\n\n    return Promise.all(promises).then(elements => {\n        // Filter out any failed add elements:\n        elements = elements.filter(x => x);\n        const sizes = [], extensions = [], types = [], roles = [], priorities = [];\n\n        if (elements.length) {\n            elements.forEach(el => {\n                const elementMetaData = elementMetaDataForAnalytics.get(el.id);\n                sizes.push(elementMetaData?.fileSize);\n                extensions.push(elementMetaData?.fileExtension);\n                types.push(elementConfiguration.getElementRole(el) === 'logo' ? 'logo' : elementConfiguration.getShortType(el.type));\n                roles.push(elementConfiguration.getElementRole(el) || 'none');\n                priorities.push(elementConfiguration.getElementPriority(el) || 'none');\n            });\n            metrics.reportEvent('Add Assets', 'Element', 'click', 'add', { event: { value: 'agg', count: elements.length }, content: { category: source || 'Bulk Upload', type: types.join(','), extension: extensions.join(','), size: sizes.join(',') }, 'custom.library': { asset_role: roles.join(','), asset_priority: priorities.join(',') } }, library);\n        }\n        return elements;\n    });\n}\n\n/**\n * Replace an elements primary representation with a new file\n *\n * @param {Object} newFile The file to replace the element with\n * @param {ElementModel} element The element being replaced\n * @param {string} successToastMessage message to display after element was replaced successfully\n */\nexport function replaceElementFromFile(newFile, element, successToastMessage = translate('DL_REPLACE_GRAPHIC_SUCCESS')) {\n    if (newFile.size > libraryManager.MAX_COMPONENT_SIZE) {\n        const title = translate('DL_DESIGN_LIBRARY_NATIVE_FILE_SIZE_TITLE'),\n            messages = [ translate('DL_DESIGN_LIBRARY_NATIVE_FILE_SIZE_MESSAGE') ];\n        dialogManager.openDialog('dropFiles', {\n            title,\n            messages,\n            files: [],\n            library: element.library\n        });\n        return Promise.resolve();\n    }\n\n    const fileName = newFile.name;\n\n    const fileExtension = FileUtils.getFileNameExtension(fileName);\n    let fileMimeType;\n\n    if (fileExtension) {\n        fileMimeType = FileUtils.getUploadableType(FileUtils.extensionToMimeTypes(fileExtension));\n    } else { // If no extension, treat it as an image (same as bulk upload)\n        fileMimeType = FileUtils.fileNameToMimeType(fileName, configuration.IMAGE_ELEMENT_TYPE);\n    }\n\n    const library = element.library;\n\n    metrics.setExtraEventMetrics('updateElementContent', { opType: 'replace', content: { category: 'Right Click' } });\n\n    return library.stageRepresentationForCommit(newFile, fileMimeType).then((stagedRepresentationData) => {\n        // If the library was deleted (or became read-only) while we were copying the file, abort!\n        if (library.isDeletedLocally || !library.isWritable) {\n            return Promise.reject('Library was deleted (or became read-only).');\n        }\n\n        element.beginOperation();\n        element.removeAllRepresentations();\n\n        const newRepresentation = element.createRepresentation(fileMimeType, 'primary');\n\n        const done = () => {\n            // TODO: Internalize this into the JS-API\n            if (!(environment.ccLibrariesDriver instanceof CloudDriver)) {\n                tempFileManager.deleteTempFile(stagedRepresentationData);\n            }\n            element.endOperation();\n        };\n\n        const onSuccess = () => {\n            done();\n            // When the primary representation is committed, the graphic is ready to be used and the user can be notified that the graphic has been replaced!\n            when(() => element.getPrimaryRepresentation().isCommitted, () => toastManager.openToast('message', { message: successToastMessage, variant: 'success' }));\n        };\n\n        const onError = err => {\n            done();\n            return Promise.reject(err);\n        };\n\n        return newRepresentation.setStagedContent(stagedRepresentationData).then(onSuccess, onError);\n    });\n}\n\n/**\n * Takes a drop event, extracts the file list and adds each file to the supplied library,\n * or attempts to import a library from the given files, if no library is supplied.\n * @param {LibraryModel} library\n * @param {DragEvent} dropEvent\n */\nexport function addElementsFromDropEvent(library, dropEvent) {\n    // Dropping a library file onto root view should import the library\n    const files = dropEvent.dataTransfer.files || dropEvent.dataTransfer.uxpEntries;\n    if (files && files.length > 0) {\n        dropEvent.preventDefault();\n\n        const getFiles = environment.getDragFileList ? environment.getDragFileList.bind(environment, dropEvent.dataTransfer) : () => Promise.resolve(files);\n\n        getFiles().then((files) => {\n            addElementsFromFileList(library, files);\n        });\n    }\n}\n\n/**\n * Open a file dialog for selection of elements to add.\n *\n * @param {LibraryModel} library The library to add the elements to.\n * @param {string} source The source of the call used for analytics\n * @param {string} elementType use to filter the available extensions in the file dialog\n * @param {Object} [role] optional role to set on the elements\n * @param {boolean} [restrictToUsableTypes=false] Should only allow usable types to be uploaded\n * @returns {Object[]} array of elements created\n */\nexport function addElementsFromFileDialog(library, source, elementType, role, restrictToUsableTypes = false) {\n    const fileTypes = elementType ? FileUtils.getUploadExtensionsForElementType(elementType, restrictToUsableTypes) : undefined;\n    return FileUtils.getFilesUsingHTMLFileDialog({ multiple: true, fileTypes })\n        .then(\n            files => {\n                if (role) {\n                    files = Array.from(files);\n                    files.forEach(file => file.role = role);\n                }\n                addElementsFromFileList(library, files, source);\n            },\n            () => {\n                metrics.reportEvent('Add Assets', 'Element', 'click', 'add-cancel', { content: { category: source } });\n            }\n        )\n        // It's weird that we don't show an error here, but this was the behavior before.\n        .catch(() => undefined);\n}\n\n/**\n * Takes a file list and adds each file to the supplied library\n * @param {LibraryModel} library\n * @param {FileList|File[]} files - note that each file could have a .group or .role property added\n * @param {string} source The source of the call used for analytics\n */\nexport function addElementsFromFileList(library, files, source) {\n    return new Promise((resolve, reject) => {\n        const data = getFileUploadData(library, Array.from(files));\n\n        if (data.title) {\n            if (environment.showDialog) {\n                const hasFiles = data.files.length !== 0;\n\n                environment.showDialog('confirm', {\n                    title: data.title,\n                    variant: 'error',\n                    confirmLabel: hasFiles ? translate('DL_UPLOAD') : translate('DL_OK'),\n                    content: data.messages[0],\n                    onConfirm: hasFiles ? () => { createElementsFromFiles(data.files, library).then(resolve).catch(reject); } : undefined,\n                    cancelLabel: hasFiles ? translate('DL_CANCEL') : undefined,\n                });\n            } else {\n                dialogManager.openDialog('dropFiles', data);\n            }\n        } else if (data.files.length > 0) {\n            return createElementsFromFiles(data.files, library, source).then(resolve).catch(reject);\n        }\n    });\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport { licenseAsset } from 'app/js/interface/adobeStockRest';\n\nfunction areExternalLinksEqual(url1, url2) {\n\n    // TODO: Remove this condition once the below logic is enabled\n    if (url1 === '' || url2 === '') {\n        return false;\n    }\n\n    // TODO: We're turning this off for now, because of a bug in the Stock service that\n    // returns different APIs in the search and license APIs. Remove this when fixed.\n    return true;\n\n    // Strip any query parameters; they just have to point to the same resource\n    //return url1.split('?')[0] === url2.split('?')[0];\n}\n\nfunction updateElementWithLicensedURL(element, assetId, stockId, imageContents) {\n    const licensedData = imageContents.purchase_details;\n    const compData = AdobeStockUtils.canSaveComp(null, element) && imageContents.comp;\n    const thumbnailData = imageContents.thumbnail;\n\n    const query = AdobeStockUtils.getStockSearchQuery(element);\n    const method = AdobeStockUtils.getStockMethod(element);\n    const premiumLevel = AdobeStockUtils.getStockPremiumLevel(element);\n\n    const licensedStockData = {\n        content_id: assetId,\n        license: licensedData.license,\n        state: configuration.STOCK_STATE_PURCHASED,\n        method,\n        premiumLevel\n    };\n\n    if (stockId) {\n        licensedStockData.stock_id = stockId.toString();\n    }\n\n    // Start editing the element\n    element.beginOperation();\n    const promises = [];\n\n    const setLicensedData = licensedRepresentation => {\n        licensedRepresentation.setValue(configuration.STOCK_NAMESPACE, configuration.STOCK_DATA_KEY, licensedStockData);\n\n        // We want to preserve the search query stored with the element\n        if (query) {\n            AdobeStockUtils.setStockSearchQuery(licensedRepresentation, query);\n        }\n\n        // Some element types store additional metadata from the purchase data - allow them to add it here:\n        elementConfiguration.setStockMetadata(licensedRepresentation, licensedData);\n\n        const licensedPromise = licensedRepresentation.setContentFromURL(true, licensedData.url, {}).then(() => {\n            if (licensedData.width) {\n                licensedRepresentation.width = licensedData.width;\n            }\n            if (licensedData.height) {\n                licensedRepresentation.height = licensedData.height;\n            }\n            licensedRepresentation.isFullSize = true;\n            if (licensedData.content_length) {\n                licensedRepresentation.contentLength = licensedData.content_length;\n            }\n        });\n        promises.push(licensedPromise);\n    };\n\n    // Firstly, see if the element was modified - if not, we can just insert the new primary\n    const currentPrimary = element.getPrimaryRepresentation();\n    const compUrl = compData && compData.url;\n    if (currentPrimary && currentPrimary.isExternalLink && areExternalLinksEqual(currentPrimary.getContentURL(), compUrl)) {\n        // Demote the current primary to a rendition, and insert a new primary, which is the licensed image\n        currentPrimary.relationship = 'rendition';\n        setLicensedData(element.createRepresentation(licensedData.content_type, 'primary', 0, true));\n\n    } else {\n        // It changed - need to clear all the representations and recreate them from the comp data\n        // OR, it's an element that doesn't have a comp (like a capsule), in which case the stockUtils creates\n        // a \"broken\" comp respresentation whose contentURL is '', so that we fall into this code. This is\n        // ugly and we should fix that.\n        element.removeAllRepresentations();\n\n        // The licensed image/video\n        const licensedRepresentation = element.createRepresentation(licensedData.content_type, 'primary');\n        setLicensedData(licensedRepresentation);\n\n        if (compData) {\n            // The comp image/video\n            const compRepresentation = element.createRepresentation(compData.content_type, 'rendition');\n            compRepresentation.setValue(configuration.STOCK_NAMESPACE, configuration.STOCK_DATA_KEY, {\n                content_id: assetId,\n                state: configuration.STOCK_STATE_NOT_PURCHASED,\n                method\n            });\n\n            // Some element types store additional metadata from the purchase data - allow them to add it here:\n            elementConfiguration.setStockMetadata(compRepresentation, compData);\n\n            const compPromise = compRepresentation.setContentFromURL(true, compData.url, {}).then(() => {\n                if (compData.width) {\n                    compRepresentation.width = compData.width;\n                }\n                if (compData.height) {\n                    compRepresentation.height = compData.height;\n                }\n                if (compData.content_length) {\n                    compRepresentation.contentLength = compData.content_length;\n                }\n            });\n            promises.push(compPromise);\n        }\n\n        // TODO: Don't hard-code element-specific logic\n        if (element.type === configuration.CAPSULE_ELEMENT_TYPE) {\n            const capsuleData = licensedData.capsule;\n            if (capsuleData.url_json) {\n                const jsonRepresentation = element.createRepresentation(configuration.CAPSULE_DEFINITION_REPRESENTATION_TYPE, 'alternate');\n                const jsonPromise = jsonRepresentation.setContentFromURL(false, capsuleData.url_json, {});\n                promises.push(jsonPromise);\n            }\n\n            if (capsuleData.url_png) {\n                const pngRepresentation = element.createRepresentation('image/png', 'rendition');\n                const pngPromise = pngRepresentation.setContentFromURL(false, capsuleData.url_png, {}).then(() => {\n                    if (capsuleData.width && capsuleData.height) {\n                        pngRepresentation.width = capsuleData.width;\n                        pngRepresentation.height = capsuleData.height;\n                    }\n                });\n                promises.push(pngPromise);\n            }\n        }\n\n        // The thumbnail\n        const thumbnailRepresentation = element.createRepresentation(thumbnailData.content_type, 'rendition');\n        const thumbnailPromise = thumbnailRepresentation.setContentFromURL(false, thumbnailData.url, {}).then(() => {\n            if (thumbnailData.width) {\n                thumbnailRepresentation.width = thumbnailData.width;\n            }\n            if (thumbnailData.height) {\n                thumbnailRepresentation.height = thumbnailData.height;\n            }\n\n            // Set the thumbnail cache to be the thumbnail\n            // This makes it a bit faster since we don't need to wait for shared cloud\n            return thumbnailRepresentation.getContentPath().then(path => {\n                if (path) {\n                    element.setThumbnailCache(elementConfiguration.getThumbnailSize(element), path);\n                }\n            });\n        });\n        promises.push(thumbnailPromise);\n    }\n\n    const done = () => {\n        // Important: Don't block on the endOperation completing, because we might be wrapped in another operation.\n        element.endOperation();\n    };\n    return Promise.all(promises).then(done, done);\n}\n\nfunction updateLicenses(assetId, stockId, imageContents) {\n    const promises = [];\n    libraryManager.libraries.forEach(library => {\n        if (library.isWritable) {\n            library.elements.forEach(element => {\n                if (AdobeStockUtils.getStockId(element) === assetId && !AdobeStockUtils.isLicensed(element)) {\n                    promises.push(updateElementWithLicensedURL(element, assetId, stockId, imageContents));\n                }\n            });\n        }\n    });\n    return Promise.all(promises);\n}\n\n/**\n    Public API\n**/\n\n/**\n * Walks through all the libraries and updates any instances of the given stock element to be licensed.\n * This is only called in two places:\n *\n * 1) If you add an already-licensed stock asset to your library, from the stock search, it first\n *    creates a comp element, then calls into this method to update it (and any other comps) to be licensed.\n * 2) If you drag a stock element from the search results to the canvas, the same thing applies - it first\n *    creates a comp, and then updates the comp with the licensed information.\n *\n * @param {string} userId\n * @param {Object} stockSearchAsset\n */\nexport function updateLicensedStockElements(userId, stockSearchAsset) {\n    const assetId = String(stockSearchAsset.id);\n    const licenseType = stockSearchAsset.is_licensed;\n\n    return licenseAsset(userId, assetId, licenseType).then(licenseData => {\n        const imageContents = licenseData && licenseData.contents && licenseData.contents[assetId];\n        const stockId = licenseData && licenseData.member && licenseData.member.stock_id;\n\n        // Check that the imageContents part of the purchase data is valid, before continuing.\n        const isDataValid = imageContents && [ 'purchase_details', 'thumbnail' ].every(field => {\n            const data = imageContents[field];\n            return data && data.url && data.content_type;\n        });\n        if (!isDataValid) {\n            return Promise.reject('Invalid data from license API: ' + JSON.stringify(imageContents));\n        }\n\n        return updateLicenses(assetId, stockId, imageContents);\n    });\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport Button from 'app/js/components/Button';\nimport ElementModel from 'app/js/models/ElementModel';\nimport PropTypes from 'prop-types';\nimport * as LinkUtils from 'app/js/utils/linkUtils';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport Icon from 'app/js/components/Icon';\nimport { translate } from 'app/js/managers/translationManager';\nimport metrics from 'app/js/interface/metrics';\n\nexport default class LicenseStockButton extends React.Component {\n\n    static propTypes = {\n        element: PropTypes.instanceOf(ElementModel).isRequired\n    };\n\n    onClickButton = () => {\n        metrics.reportStockEvent('License', 'click', 'start', { ui: { sequence: 'info-panel' } }, this.props.element);\n        LinkUtils.launchStockAssetURL(AdobeStockUtils.getStockId(this.props.element), this.props.element.type);\n    };\n\n    render() {\n        return (\n            <Button\n                data-test-id=\"stock-license-button\"\n                onClick={ this.onClickButton }\n                className=\"stock-license-button\">\n                <Icon id=\"ShoppingCart\" height={ 18 }/>\n                <div className=\"stock-license-button-label\">{ translate('DL_INFO_BUY_STOCK_LICENSE') }</div>\n            </Button>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/**\n    Utilities related to Adobe Stock, for example getting and setting stock data, determining if element is stock, etc.\n**/\n\nimport libraryManager from 'app/js/managers/libraryManager';\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport metrics from 'app/js/interface/metrics';\nimport { translate } from 'app/js/managers/translationManager';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport { launchStockLicenseInfoURL, launchStockAssetURL } from 'app/js/utils/linkUtils';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport { retry } from 'app/js/utils/promiseUtils';\nimport { checkLibraryWritable } from 'app/js/utils/libraryUtils';\nimport librarySizeManager from 'app/js/managers/librarySizeManager';\nimport dialogManager from 'app/js/managers/dialogManager';\nimport { getRenditionFromDOMElement } from 'app/js/utils/imageUtils';\nimport viewState from 'app/js/state/viewState';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport { updateLicensedStockElements } from 'app/js/utils/adobeStockLicenseUtils';\nimport LicenseStockButton from 'app/js/components/LicenseStockButton';\nimport debugLog from 'app/js/utils/debugLog';\nimport { getStockAssetMetadata } from 'app/js/interface/adobeStockRest';\nimport appState from 'app/js/appState';\n\n/**\n * Constants for internal use to communicate which error condition has\n * ocurred when licensing assets\n */\n\nconst USER_CANCELLED = 'cancelled';\nconst LIMIT_REACHED = 'limit';\nconst ALTERNATIVE_LICENSE_IDS = [\n    'Internal_Use',\n    'Digital_Use',\n    'Social_Media',\n    'Video_HD_Standard',\n    'Video_HD_Internal_Use',\n    'Video_HD_Digital_Use',\n    'Video_HD_Social_Media'\n];\n\n/**\n * @param {Object} representation\n * @returns {Object|undefined}\n */\nexport function getStockData(representation) {\n    if (!representation) {\n        return undefined;\n    }\n\n    return representation.getValue(configuration.STOCK_NAMESPACE, configuration.STOCK_DATA_KEY);\n}\n\nexport function getStockPanelInfo(element) {\n    if (!element || !isStockAsset(element)) {\n        return [];\n    }\n\n    const stockPanelInfo = [];\n    const stockData = getStockDataForElement(element);\n\n    if (stockData.content_id) {\n        const onKeyPress = (e) => {\n            if (e.key === 'Enter') {\n                launchStockAssetURL(stockData.content_id, element.type);\n            }\n        };\n        const value = <a tabIndex=\"0\" data-test-id=\"stock-id-link\" onKeyPress={ onKeyPress } onClick={ () => launchStockAssetURL(stockData.content_id, element.type) }>{ stockData.content_id }</a>;\n        stockPanelInfo.push({\n            label: translate('DL_INFO_STOCK_ID'),\n            value\n        });\n    }\n\n    if (stockData.creator_name) {\n        stockPanelInfo.push({\n            label: translate('DL_INFO_STOCK_AUTHOR'),\n            value: stockData.creator_name\n        });\n    }\n\n    let value;\n    if (stockData.license) {\n        const onClickLicense = () => launchStockLicenseInfoURL();\n        const onKeyPress = (e) => {\n            if (e.key === 'Enter') {\n                launchStockLicenseInfoURL();\n            }\n        };\n        value = <a tabIndex=\"0\" data-test-id=\"stock-licenses-link\" onKeyPress={ onKeyPress } onClick={ onClickLicense }>{ translate(_getStockLicenseString(element, stockData)) }</a>;\n    } else {\n        value = <LicenseStockButton element={ element } />;\n    }\n\n    // Should not show liscense button in oneup mode because it is already implemented by the icons.\n    if (!viewState.isOneUpMode()) {\n        stockPanelInfo.push({\n            label: translate('DL_INFO_STOCK_LICENSE'),\n            value\n        });\n    }\n\n    if (stockData.is_editorial) {\n        stockPanelInfo.push({\n            label: translate('DL_INFO_STOCK_RESTRICTION'),\n            value: translate('DL_INFO_STOCK_RESTRICTION_EDITORIAL')\n        });\n    }\n\n    return stockPanelInfo;\n}\n\nfunction _getStockLicenseString(element, stockData) {\n    const { license } = stockData;\n    const currentUser = metrics.currentUserId;\n    const isEnterpriseUser = currentUser && !currentUser.includes('@AdobeID');\n\n    if (isEnterpriseUser) {\n        const isStandardCoreType = license === 'Standard' && (element.type === configuration.IMAGE_ELEMENT_TYPE || [ 0, 1 ].includes(stockData.premium_level_id));\n        if (ALTERNATIVE_LICENSE_IDS.includes(license)) {\n            return _getGenericLicenseName(license);\n        } else if (isStandardCoreType) {\n            return 'DL_INFO_STOCK_LICENSE_STANDARD';\n        }\n        return 'DL_INFO_STOCK_LICENSE_EXTENDED';\n    } else if (stockData.is_editorial) {\n        if ([ 'Standard_M', 'Video_HD' ].includes(license)) {\n            return 'DL_INFO_STOCK_LICENSE_STANDARD';\n        }\n        return 'DL_INFO_STOCK_LICENSE_ENHANCED';\n    }\n    return _getGenericLicenseName(license);\n}\n\nfunction _getGenericLicenseName(license) {\n    switch (license) {\n    case 'Standard':\n    case 'Standard_M':\n    case 'Video_HD_Standard':\n        return 'DL_INFO_STOCK_LICENSE_STANDARD';\n    case 'Extended':\n        return 'DL_INFO_STOCK_LICENSE_EXTENDED';\n    case 'Enhanced':\n    case 'Video_HD':\n    case 'Video_4K':\n        return 'DL_INFO_STOCK_LICENSE_ENHANCED';\n    case 'Video_HD_Internal_Use':\n    case 'Internal_Use':\n        return 'DL_INFO_STOCK_LICENSE_INTERNAL_USE';\n    case 'Digital_Use':\n    case 'Video_HD_Digital_Use':\n        return 'DL_INFO_STOCK_LICENSE_DIGITAL_USE';\n    case 'Social_Media':\n    case 'Video_HD_Social_Media':\n        return 'DL_INFO_STOCK_LICENSE_SOCIAL_MEDIA';\n    default:\n        return 'DL_INFO_STOCK_LICENSE_NA';\n    }\n}\n\nexport function updateStockMetadata(element) {\n    const stockData = getStockDataForElement(element);\n    if (!stockData) {\n        return;\n    }\n\n    if (stockData.is_editorial === undefined || stockData.creator_name === undefined || stockData.premium_level_id === undefined) {\n        getStockAssetMetadata(appState.libraryManager.userId, stockData.content_id).then(data => {\n            const fetchedMetadata = data && data.files && data.files[0] || {};\n            const representation = element.getPrimaryRepresentation();\n            if (representation) {\n                const newData = Object.assign({}, stockData, fetchedMetadata);\n                // Need to add the newly fetched metadata values to the stock data with\n                // the isMetadata as true so that the modification time\n                // is not changed by making changes to the representation\n                representation.setValue(configuration.STOCK_NAMESPACE, configuration.STOCK_DATA_KEY, newData, true);\n            }\n        }).catch(() => {\n            debugLog.log('Error with getStockAssetMetadata');\n        });\n    }\n}\n\n/**\n * Extract the Stock metadata from the element's primary representation. If an additional index\n * is provided, use the representation referenced by that index to extract the data.\n *\n * @param {ElementModel} element\n * @param {number|undefined} index the representation index from which to extract the Stock data\n */\nexport function getStockDataForElement(element, index) {\n    // First try the primary representation\n    const representation = index === undefined ? element.getPrimaryRepresentation() : element.representations[index];\n    let stockData = getStockData(representation);\n\n    // If the contentURL is blank, then do not consider it as a download failure\n    if (stockData && representation.isExternalLink && representation.getCachedExternalLinkError() && representation.getContentURL() !== '') {\n        // It's an external link, but the external link isn't valid: See if there's a comp representation to try:\n        const compStockData = getStockDataForElement(element, index === undefined ? 0 : index + 1);\n        if (compStockData) {\n            // Use the comp representation's comp data, because the primary isn't licensed\n            stockData = compStockData;\n        } else {\n            // The primary isn't licensed, and we don't have a comp - oh no!\n            // Let's be tricksy and reconstruct the unlicensed stock data\n            stockData = {\n                content_id: stockData.content_id,\n                stock_id: stockData.stock_id,\n                state: 'not_purchased',\n                method: stockData.method,\n                premiumLevel: stockData.premiumLevel\n            };\n        }\n    }\n\n    return stockData;\n}\n\nexport function setStockData(representation, stockData) {\n    representation.setValue(configuration.STOCK_NAMESPACE, configuration.STOCK_DATA_KEY, stockData);\n}\n\nexport function isStockAsset(element) {\n    const isSupportedElementType = getLocalizationSuffix(element) !== '';\n    const hasStockData = getStockDataForElement(element) !== undefined;\n    return isSupportedElementType && hasStockData;\n}\n\nexport function isLicensed(element) {\n    if (configuration.currentProduct.config.disableLicenseFlow) {\n        return true;\n    }\n    const stockData = getStockDataForElement(element);\n    if (stockData) {\n        if (stockData.state === configuration.STOCK_STATE_PURCHASED) {\n            return true;\n        }\n    }\n    return false;\n}\n\nexport function getStockId(element) {\n    const stockData = getStockDataForElement(element);\n    if (stockData) {\n        return String(stockData.content_id);\n    }\n    return null;\n}\n\nexport function getStockMethod(element) {\n    const stockData = getStockDataForElement(element);\n    if (stockData) {\n        return String(stockData.method);\n    }\n    return null;\n}\n\nexport function getStockPremiumLevel(element) {\n    const stockData = getStockDataForElement(element);\n    if (stockData) {\n        return stockData.premiumLevel;\n    }\n    return null;\n}\n\nexport function getStockSearchQuery(element) {\n    let query;\n\n    element.representations.some(function(representation) {\n        query = representation.getValue('stock', 'query');\n        return query;\n    });\n\n    return query;\n}\n\nexport function setStockSearchQuery(representation, query) {\n    if (representation) {\n        representation.setValue('stock', 'query', query);\n    }\n}\n\nexport function getLocalizationSuffix(element) {\n    if (element) {\n        if (element.type === configuration.IMAGE_ELEMENT_TYPE) {\n            return '_PHOTO';\n        }\n        if (element.type === configuration.VIDEO_ELEMENT_TYPE) {\n            return '_VIDEO';\n        }\n        if (element.type === configuration.TEMPLATE_ELEMENT_TYPE) {\n            return '_TEMPLATE';\n        }\n        if (element.type === configuration.THREE_D_ELEMENT_TYPE || element.type === configuration.LIGHT_ELEMENT_TYPE || element.type === configuration.MATERIAL_ELEMENT_TYPE) {\n            return '_THREE_D';\n        }\n        if (element.type === configuration.CAPSULE_ELEMENT_TYPE) {\n            return '_CAPSULE';\n        }\n        if (element.type === configuration.AUDIO_ELEMENT_TYPE) {\n            return '_AUDIO';\n        }\n    }\n    return '';\n}\n\nexport function getLicenseType(element) {\n    // This is used by the licensing APIs to determine the type of license.\n    // For now, this is hard-coded to mean \"pick the highest resolution available\",\n    // for each of the element types.\n    if (element) {\n        if (element.type === configuration.IMAGE_ELEMENT_TYPE) {\n            return 'Standard';\n        }\n        if (element.type === configuration.VIDEO_ELEMENT_TYPE) {\n            return 'Video_Original';\n        }\n        if (element.type === configuration.TEMPLATE_ELEMENT_TYPE) {\n            return 'Standard';\n        }\n    }\n    // Use Standard as the default - it should never get to this point, but just in case so we don't\n    // have a missing pararmeter in the API calls\n    return 'Standard';\n}\n\nexport function getStockEditError(element) {\n    const representation = element.getPrimaryRepresentation();\n    const stockData = representation && getStockData(representation);\n    const isPurchased = stockData && stockData.state === configuration.STOCK_STATE_PURCHASED;\n\n    if (isPurchased && representation.isExternalLink && representation.getCachedExternalLinkError()) {\n        // Somebody else purchased it, but we don't have a license!\n        // So ask the user if they\n\n        return 'DL_STOCK_LICENSE_TO_EDIT' + getLocalizationSuffix(element);\n    }\n}\n\nexport function getStockTemplateUseError(element) {\n    if (element.type === configuration.TEMPLATE_ELEMENT_TYPE) {\n        const representation = element.getPrimaryRepresentation();\n        const stockData = representation && getStockData(representation);\n        const isPurchased = stockData && stockData.state === configuration.STOCK_STATE_PURCHASED;\n        if (representation.isExternalLink && representation.getCachedExternalLinkError()) {\n            if (isPurchased) {\n                // Somebody else purchased it, but we don't have a license!\n                return 'DL_STOCK_LICENSE_TO_USE_TEMPLATE_OWNED';\n            }\n            // we don't have a license, not purchased by a collaborator\n            return 'DL_STOCK_LICENSE_TO_USE_TEMPLATE';\n        }\n        if (!representation.getCachedContentPath()) {\n            return 'DL_ERROR_PLACE_TEMPLATE_DOWNLOADING';\n        }\n    }\n}\n\n/**\n * Use the `licenses` or `comps` property on a stock search result item to build a\n * list of licenses that can be displayed to the user.\n *\n * Premium and Editorial assets should have a 'licenses' property that\n * lists the available images sizes that are available to license: Standard/Standard_M.\n * Videos have a 'comps' property with available license types: Standard, Video_HD, Video_4K.\n * Each license is an object with a width, height, and url.\n *\n * @param {Object} searchResult A search result with a licenses and/or comps property\n *\n *   e.g {\n *     \"licenses\": {\n *       \"Standard\": {\n *         \"width\": 1920,\n *         \"height\": 1080,\n *         \"url\": \"https://stock.adobe.com/Rest/Libraries/Download/128545115/1\"\n *       },\n *       \"Standard_M\": {\n *         \"width\": 960,\n *         \"height\": 540,\n *         \"url\": \"https://stock.adobe.com/Rest/Libraries/Download/128545115/5\"\n *       }\n *     }\n *   }\n *\n * @returns {Object} Returns a list of video types or image sizes that are available to license.\n */\nexport function getLicenseTypesFromSearchResult(searchResult) {\n    const availableLicenseTypes = [];\n    let licenseTypes, availableLicenses;\n\n    if (searchResult.media_type_id === 4) { //video\n        licenseTypes = configuration.STOCK_VIDEO_LICENSE_TYPES;\n        availableLicenses = searchResult.comps;\n    } else { // editorial or premium image\n        licenseTypes = configuration.STOCK_IMAGE_LICENSE_TYPES;\n        availableLicenses = searchResult.licenses;\n    }\n    if (availableLicenses) {\n        licenseTypes.forEach(function(type) {\n            if (availableLicenses[type.field]) {\n                const compOrLicense = availableLicenses[type.field];\n                availableLicenseTypes.push({\n                    field: type.field,\n                    label: type.label,\n                    resolution: compOrLicense.width + ' x ' + compOrLicense.height\n                });\n            }\n        });\n    }\n    return availableLicenseTypes;\n}\n\n/**\n * Calculates the physical size (width & height by taking DPI into consideration)\n * of the comp based on the size of the licensed image\n *\n * @param {Object} searchResult the Stock search result\n * @returns {Object} object with width and height properties\n */\nexport function getCompSizeFromSearchResult(searchResult) {\n    // All Adobe Stock licensed images have DPI of 300\n    const LICENSED_IMAGE_DPI = 300;\n\n    // DPI of images generated through HTML canvas is 72\n    const HTML_CANVAS_DPI = 72;\n\n    const compHeight = searchResult.comp_height,\n        compWidth = searchResult.comp_width;\n\n    // If it is a vector or video, then we would like to return the actual comp's width / height\n    if (searchResult.media_type_id === 3 || searchResult.media_type_id === 4) {\n        return { 'width': compWidth, 'height': compHeight };\n    }\n\n    const licensedImageWidth = searchResult.width,\n        scaleRatio = compWidth / licensedImageWidth,\n        compDpi = LICENSED_IMAGE_DPI * scaleRatio,\n        dpiDiff = HTML_CANVAS_DPI / compDpi;\n\n    return { 'width': compWidth * dpiDiff, 'height': compHeight * dpiDiff };\n}\n\n// Returns true if the content is Free\nexport function isFreeAsset(searchResult) {\n    return searchResult.premium_level_id === configuration.STOCK_FREE_CONTENT_LEVEL_ID;\n}\n\n// Returns true if the content is Premium\nexport function isPremiumAsset(searchResult) {\n    return (configuration.STOCK_PREMIUM_CONTENT_LEVEL_IDS.indexOf(searchResult.premium_level_id) > -1);\n}\n\n/**\n * Returns true if it is possible to \"Save\" comp for this asset\n *\n * @param {Object} searchResult\n * @param {ElementModel} element\n * @returns {boolean}\n */\nexport function canSaveComp(searchResult, element) {\n    if (searchResult) {\n        const {\n            media_type_id,\n            comps\n        } = searchResult;\n        const isValidMediaType = media_type_id !== 7 && media_type_id !== 6;\n        const hasComps = !!comps && comps.length !== 0;\n\n        return isValidMediaType && !isFreeAsset(searchResult) && hasComps;\n    }\n\n    if (!element) {\n        return false;\n    }\n\n    switch (element.type) {\n    case configuration.TEMPLATE_ELEMENT_TYPE:\n    case configuration.THREE_D_ELEMENT_TYPE:\n    case configuration.MATERIAL_ELEMENT_TYPE:\n    case configuration.LIGHT_ELEMENT_TYPE:\n        return false;\n\n    default:\n        return true;\n    }\n}\n\nexport function getSearchUIOptions() {\n    const productCode = configuration.currentProduct.config.code;\n    // Removing templates from search filters.\n    // Need to create a function for this in configuration if more filter exceptions are requested in future.\n    const searchUIOptions = (configuration.STOCK_TEMPLATES_SUPPORTED_PRODUCTS.indexOf(productCode) > -1) ? configuration.STOCK_SEARCH_UI_OPTIONS : configuration.STOCK_SEARCH_UI_OPTIONS.filter((type) => { return type !== configuration.STOCK_SEARCH_OPTION_TEMPLATE; });\n\n    return configuration.currentProduct.config.STOCK_SEARCH_UI_OPTIONS || searchUIOptions;\n}\n\n/**\n * Initiate the licensing flow and hand off the control to the licensing extension.\n *\n * @param {Object} element a full library element or a skeleton element that has a 'type' property.\n * @param {string} addToLibraryID the ID of the library which is the destination of the licensed asset\n * @param {Object} [thumbnailDetails] the details of what to use for the thumbnail for the licensed element.\n * @param {Object} metadata the additional metadata that carries information about the Stock asset from which the final element originated\n * @param {Object} stockSearchAsset the Stock search result. Optional.\n * @returns {Promise} resolves when the licensing is complete or rejects if the licensing process fails\n */\nexport function showLicenseDialog(element, addToLibraryID, thumbnailDetails, metadata, stockSearchAsset) {\n    // If the stockSearchAsset isn't provided, extract the required information from the element\n    const skipQuotaCheck = stockSearchAsset && stockSearchAsset.is_licensed !== '';\n    const {\n        id: contentId = getStockId(element),\n        is_licensed: licenseType,\n    } = stockSearchAsset || {};\n    const invokerId = 'CCLibrariesPanel';\n\n    return new Promise((resolve, reject) => {\n        metrics.reportStockEvent('License', 'render', 'window', {}, element);\n\n        let srcElement = element;\n        if (!element.getLegacyReference) { // means it is not an element instance(ElementModel)\n            const _el = findStockElementInLibrary(contentId, libraryManager.getLibraryById(addToLibraryID) || libraryManager.currentLibrary);\n            // If the element is found then the library already has an element for the asset, i.e.\n            // a comp has been added to the library before and is now being licensed.\n            // If that is the case, then we will want to consider that element to be the source for\n            // the asset that is about to be licensed to avoid adding a duplicate element to the library.\n            if (_el) {\n                srcElement = _el;\n            }\n        }\n\n        if (environment.hasUXPStockExtension) {\n            return resolve(environment.openStockLicenseExtension({ element: srcElement, contentId, skipQuotaCheck, licenseType, metadata, addToLibraryID, stockSearchAsset, invokerId }));\n        }\n\n        // Note: We always invoke the stock license extension even if the element is already licensed - this simplifies the workflow.\n\n        function _onReportMetric(event) {\n            if (event.data.isError) {\n                metrics.reportStockEvent('License', 'render', 'error', { 'event': { 'error_code': event.data.statusCode, 'error_type': event.data.errorType } }, element);\n\n            } else {\n                if (element && element.id) {\n                    metrics.reportCheckoutElement(element, event.data.cartId, event.data.opType);\n                }\n            }\n        }\n\n        // Register for event to know when Purchase dialog loads & pass on the required information\n        function _onPurchaseDialogInit() {\n            environment.removeEventListener(initEventID, _onPurchaseDialogInit);\n            const performEventID = 'com.adobe.stock.panel.license.perform';\n            const csEvent = environment.createEvent(performEventID, 'APPLICATION', 'CCLibrariesPanel', environment.getExtensionID());\n\n            let srcElementRef;\n            if (typeof srcElement.getLegacyReference === 'function') {\n                // means the licensing is initiated from library element (i.e., with elementRef)\n                srcElementRef = srcElement.getLegacyReference();\n            }\n\n            csEvent.data = { 'elementRef': srcElementRef, 'elementType': element.type, 'elementName': element.name, contentId, skipQuotaCheck, licenseType, metadata, addToLibraryID, stockSearchAsset, invokerId };\n            environment.dispatchEvent(csEvent);\n        }\n\n        const extensionID = configuration.STOCK_PURCHASE_EXTENSION_ID;\n        const initEventID = 'com.adobe.stock.panel.license.init';\n        environment.addEventListener(initEventID, _onPurchaseDialogInit);\n        environment.addEventListener('com.adobe.inapp.purchase.reportMetric', _onReportMetric);\n\n        // Register for event to know when Purchase dialog closes & get purchase information\n        function _onPurchaseDialogClosed(event) {\n            // If this callback is due to ExtensionUnloaded event\n            if (event.type === 'com.adobe.csxs.events.ExtensionUnloaded') {\n                const xmlParser = new DOMParser();\n                const xmlDoc = xmlParser.parseFromString(event.data, 'text/xml');\n                // Check for the extension that got unloaded\n                if (xmlDoc.getElementsByTagName('Id')[0].childNodes[0].nodeValue !== extensionID || xmlDoc.getElementsByTagName('ClosingType')[0].childNodes[0].nodeValue !== '1') {\n                    return;\n                }\n            }\n\n            environment.removeEventListener(doneEventID, _onPurchaseDialogClosed);\n            environment.removeEventListener('com.adobe.csxs.events.ExtensionUnloaded', _onPurchaseDialogClosed);\n            environment.removeEventListener('com.adobe.inapp.purchase.reportMetric', _onReportMetric);\n            const eventData = event.data;\n            if (eventData && eventData.didFinish) {\n                // Either resolve the with the ref of the newly created element or re-use the existing element.\n                // If an element has been created it's reference string will be eventData.data.elementRef\n                // If an existing element is updated then the ref we need is eventData.elementRef(finalElementRef in the panel)\n                // `eventData.data.elementRef` points to what stock panel gives back(`finalElementRef` in the panel).\n                // `eventData.elementRef` points to the elementRef that is sent from here during `init`.\n                resolve({\n                    ...eventData.data,\n                    // grab finalElementRef or the elementRef sent during init\n                    elementRef: eventData.elementRef || eventData.data?.elementRef,\n                });\n            } else {\n                reject(eventData && eventData.data);\n            }\n        }\n        const doneEventID = 'com.adobe.stock.panel.license.closed';\n        environment.addEventListener(doneEventID, _onPurchaseDialogClosed);\n        environment.addEventListener('com.adobe.csxs.events.ExtensionUnloaded', _onPurchaseDialogClosed);\n\n        environment.requestOpenExtension(extensionID);\n    });\n}\n\n/**\n * Extracts the data from a Stock search result and computes a tooltip suitable for display.\n *\n * @param {Object} asset the stock asset (search result) used to compute the tooltip\n * @returns {string[]} the text of the tooltip, each array entry is a line of text. Empty array when no tooltip can be generated\n */\nexport function getTooltip(asset) {\n    const {\n        title,\n        media_type_id,\n        content_type,\n    } = asset;\n\n    const tooltip = [];\n\n    if (title) {\n        tooltip.push(title);\n    }\n\n    if (!media_type_id) {\n        return tooltip;\n    }\n\n    const assetTypeDescription = translate(`DL_STOCK_ASSET_TOOLTIP_TYPE_${media_type_id}`);\n\n    const elementType = getElementType(media_type_id);\n    const { badge } = FileUtils.mimeLookup(elementType, content_type) || {};\n\n    if (!badge) {\n        tooltip.push(assetTypeDescription);\n        return tooltip;\n    }\n\n    const assetDescription = translate('DL_STOCK_ASSET_TOOLTIP_DESCRIPTION', { type: assetTypeDescription, contentType: badge });\n\n    tooltip.push(assetDescription);\n    return tooltip;\n}\n\n/**\n * Return a corresponding element type for a give media_type_id and content_type\n * from a Stock search result. If no suitable mapping is found for a given combination\n * assume it's an image.\n *\n * @param {number} mediaTypeId the media_type_id as defined by Stock APIs\n * @param {string} contentType the content_type string as defined by Stock APIs\n */\nexport function getElementType(mediaTypeId, contentType) {\n    const capsuleMap = {\n        [FileUtils.CAPSULE_PPRO_MIME_TYPE]: configuration.CAPSULE_ELEMENT_TYPE,\n        [FileUtils.CAPSULE_AE_MIME_TYPE]: configuration.CAPSULE_ELEMENT_TYPE,\n    };\n\n    const threeDMap = {\n        [FileUtils.LIGHT_MIME_TYPE]: configuration.LIGHT_ELEMENT_TYPE,\n        [FileUtils.MATERIAL_MIME_TYPE]: configuration.MATERIAL_ELEMENT_TYPE,\n    };\n\n    switch (mediaTypeId) {\n    case 4:\n        return configuration.VIDEO_ELEMENT_TYPE;\n\n    case 7:\n        return capsuleMap[contentType] || configuration.TEMPLATE_ELEMENT_TYPE;\n\n    case 6:\n        return threeDMap[contentType] || configuration.THREE_D_ELEMENT_TYPE;\n\n    case 9:\n        return configuration.AUDIO_ELEMENT_TYPE;\n\n    default:\n        return configuration.IMAGE_ELEMENT_TYPE;\n    }\n}\n\nfunction licenseChooser(asset) {\n    const elementType = getElementType(asset.media_type_id, asset.content_type);\n    const isElementPremiumOrEditorialImage\n        = elementType === configuration.IMAGE_ELEMENT_TYPE\n        && (asset.is_editorial || asset.is_premium);\n\n    if (!isElementPremiumOrEditorialImage\n        && elementType !== configuration.VIDEO_ELEMENT_TYPE) {\n        return Promise.resolve(configuration.STOCK_LICENSE_TYPE_STANDARD);\n    }\n\n    const licenses = getLicenseTypesFromSearchResult(asset);\n    if (licenses.length === 0) {\n        // Error: There's no available license (should never happen, but being on the safe side)\n        return Promise.reject();\n    }\n\n    if (elementType === configuration.IMAGE_ELEMENT_TYPE) {\n        // Since the user is trying to save (and not license) the image, we can just pick one of the license types.\n        // All license types have the same preview file, regardless of whether they're small or large.\n        return Promise.resolve(licenses[0].field);\n    }\n\n    if (elementType === configuration.VIDEO_ELEMENT_TYPE) {\n        if (asset.is_licensed === configuration.STOCK_VIDEO_LICENSE_TYPE_4K.field) {\n            // If the stock element is already licensed as 4K, then no need to check the licenses\n            return Promise.resolve(configuration.STOCK_VIDEO_LICENSE_TYPE_4K.label);\n        }\n\n        if (licenses.length === 1) {\n            // TODO: Why do we use label for video license types, but field for image license types?\n            return Promise.resolve(licenses[0].label);\n        }\n\n        // Unlike images, videos comps may have different resolutions - we open a dialog to let the user choose\n        // between a 4K or HD comp.\n        return new Promise((resolve, reject) => {\n            dialogManager.openDialog('stockVideoCompPicker', {\n                licenseA: licenses[0],\n                licenseB: licenses[1],\n                onClickOK: license => resolve(license.label),\n                onClickCancel: () => reject({ reason: USER_CANCELLED })\n            });\n        });\n    }\n}\n\n/**\n * Determine if a given asset can be saved to a library by validating the asset object as well\n * as the library. The library needs to be writable and below the size limit. The asset has to\n * contain certain required metadata attributes.\n *\n * @param {Object} asset the search result asset details from Stock\n * @param {LibraryModel} library the library to which we are attempting to save the asset\n * @returns {Promise} resolved or rejected promise based on the library and asset status\n */\nfunction validateAssetAndLibrary(asset, library) {\n    if (!librarySizeManager.canAddElements(library)) {\n        return Promise.reject({ reason: LIMIT_REACHED });\n    }\n\n    if (!asset.id || !asset.content_type || !asset.media_type_id) {\n        return Promise.reject();\n    }\n    // Allowing libraries with unloaded elements to be valid and show them.\n    // Done by passing third argument allowUnloadedElements as true (and hence second argument allowDocumentLibraries as false).\n    const isLibraryWritable = checkLibraryWritable(library, false, true);\n    if (!isLibraryWritable) {\n        return Promise.reject();\n    }\n\n    return Promise.resolve({ asset, library });\n}\n\nconst ERROR_MAP = {\n    [ LIMIT_REACHED ]: { title: 'DL_DESIGN_LIBRARY_HAS_LIMIT_TITLE', message: 'DL_DESIGN_LIBRARY_HAS_LIMIT' },\n    UNKNOWN:           { title: 'DL_STOCK_SAVE_UNKNOWN_ERROR_TITLE', message: 'DL_STOCK_SAVE_UNKNOWN_ERROR' }\n};\n\nfunction showStockError({ reason } = {}) {\n    const stockError = ERROR_MAP[reason || 'UNKNOWN'];\n    if (stockError) {\n        dialogManager.openDialog('stockError', stockError);\n        return Promise.reject();\n    }\n}\n\n/**\n * Save the given asset to the given library. Handles the element creation, selecting the appropriate\n * video and still image resolution if needed.\n *\n * @param {Object} params\n * @param {Object} params.asset the Stock asset which is to be saved\n * @param {LibraryModel} params.library the library to which the asset is to be saved\n * @param {DOMElement} params.img the DOM element that refers to the image to be used for the thumbnail\n * @returns {Promise} resolves with the element when the asset was successfully saved, rejects otherwise\n */\nexport function saveCompToLibrary({ asset, library, img }) {\n    const elementType = getElementType(asset.media_type_id, asset.content_type);\n\n    // TODO\n    // Implement state management for element so we can't\n    // have the same element being saved more then once\n    // at the same time.\n    let thumbnailDetails;\n    return validateAssetAndLibrary(asset, library)\n        .then(() => {\n            thumbnailDetails = getRenditionFromDOMElement(img, {}, 'png');\n            return licenseChooser(asset);\n        })\n        .then(licenseType => {\n            // thumbnailDetails will be false if img is not fully loaded, which cause the rendition to be downloaded\n            return createStockElement({ library, elementType, asset, thumbnailDetails, licenseType }).promise;\n        })\n        .then((element) => {\n            elementSelectionState.revealElement(element);\n            return element;\n        })\n        .catch(error => {\n            if (error && error.reason === USER_CANCELLED) {\n                return Promise.reject();\n            }\n            return showStockError(error);\n        });\n}\n\n/**\n * Attempts to license and save the asset to the given library.\n *\n * @param {Object} params\n * @param {Object} params.asset the Stock asset which is to be saved\n * @param {LibraryModel} params.library the library to which the asset is to be saved\n * @returns {Promise} resolves when the licensing flows completes. Rejects if an unknown error has occurred\n */\nexport function licenseAssetAndSaveToLibrary({ asset, library }) {\n    return validateAssetAndLibrary(asset, library)\n        .then(() => {\n            return showLicenseDialog(\n                { type: getElementType(asset.media_type_id, asset.content_type) },\n                library.id,\n                undefined,\n                makeStockMetadata(asset),\n                asset\n            ).catch(() => {\n                return Promise.reject({ reason: USER_CANCELLED });\n            });\n        })\n        .then(({ createdElementRef, elementRef } = {}) => {\n            // Either createdElementRef or elementRef will be set.\n            // createdElementRef will be set if a new library element has been created\n            // elementRef will be set when an existing element is being updated.\n            if (!createdElementRef && !elementRef) {\n                return Promise.reject();\n            }\n            const predicate = () => libraryManager.resolveElementReference(createdElementRef || elementRef);\n            return retry(100, 30, predicate);\n        })\n        .then((element) => {\n            if (element) {\n                elementSelectionState.revealElement(element);\n                return element;\n            }\n        })\n        .catch(error => {\n            return showStockError(error);\n        });\n}\n\n/**\n * Find an element in a library that represents the a stock asset with a given id. If more then\n * one matching element is found, return the last one.\n *\n * @param {number} stockId the Stock ID that we are looking for\n * @param {LibraryModel} library the library in which we want to find the element\n * @returns {(ElementModel|undefined)} either the element itself or undefined if element is not found\n */\nexport function findStockElementInLibrary(stockId, library) {\n    if (!stockId || !library) {\n        return undefined;\n    }\n\n    const needleStockIdString = String(stockId);\n    const elements = library.getFilteredElements((element) => needleStockIdString === getStockId(element));\n\n    return elements[elements.length - 1];\n}\n\n/**\n * @private\n * @param {Object} similarData the similarity data\n */\nfunction getFindMethod(similarData) {\n    const {\n        id,\n        url,\n        path,\n    } = similarData || {};\n    if (id) {\n        return 'similarSearch';\n    }\n\n    if (url || path) {\n        return 'visualSearch';\n    }\n\n    return 'search';\n}\n\n/**\n * Given the current state and a stock search result asset return a metadata suitable for\n * attaching to a Stock element\n * @param {Object} asset Stock search result\n * @returns {Object} an object that contain the information that is attached to Stock library elements\n */\nexport function makeStockMetadata(asset) {\n    return {\n        searchText: viewState.getSearchText(),\n        method: getFindMethod(viewState.getFindSimilarData()),\n        premiumLevel: asset.premium_level_id\n    };\n}\n\n/**\n * Create a Stock element in a given library. It will return with an element that\n * is in the process of being created and a promise that resolves when the element is fully created.\n *\n * @param {Object} params\n * @param {LibraryModel} params.library The library in which to create the element\n * @param {string} params.elementType\n * @param {Object} params.asset The Stock asset search results which is what is being saved to the library\n * @param {Object} params.thumbnailDetails If falsey, we will download the thumbnail from the asset's thumbnail_url property\n * @param {string} params.licenseType The preview comp license type that is saved, relevant for video (4K, HD, etc.)\n * @returns {Object} { promise, element }\n */\nexport function createStockElement({ library, elementType, asset, thumbnailDetails, licenseType }) {\n    // If we cannot add any more elements to this library\n    if (!librarySizeManager.canAddElements(library)) {\n        return { promise: Promise.reject({ reason: LIMIT_REACHED }) };\n    }\n\n    const metadata = makeStockMetadata(asset);\n    const element = library.createElement(asset.title, elementType); // calls beginOperation\n    const representationPromises = [];\n\n    const primary = element.createRepresentation(asset.content_type, 'primary');\n    setStockData(primary, {\n        content_id: asset.id,\n        stock_id: asset.stock_id,\n        state: configuration.STOCK_STATE_NOT_PURCHASED,\n        method: metadata && metadata.method,\n        premiumLevel: asset.premium_level_id\n    });\n\n    metrics.reportElementEvent('Add Assets', 'Element' , 'click', 'add', element, { event: { value: 'single' }, content: { category: 'Stock Search' } });\n\n    if (metadata && metadata.searchText) {\n        setStockSearchQuery(primary, metadata.searchText);\n    }\n\n    // If there are no comps, the only operation possible is 'License'.\n    let targetComp = { url: '', width: 0, height: 0 };\n\n    if (canSaveComp(asset)) {\n        const comp = elementConfiguration.getStockCompKeyForLicenseType(elementType, licenseType);\n        targetComp = asset.comps[comp];\n    }\n\n    const primaryPromise = primary.setContentFromURL(true, targetComp.url, {}).then(() => {\n        primary.width = targetComp.width;\n        primary.height = targetComp.height;\n        if (asset.content_length) {\n            primary.contentLength = asset.content_length;\n        }\n\n        if (asset.framerate || asset.duration) {\n            const namespace = elementType === configuration.VIDEO_ELEMENT_TYPE ? configuration.VIDEO_NAMESPACE : configuration.AUDIO_NAMESPACE;\n            if (elementType === configuration.AUDIO_ELEMENT_TYPE) {\n                primary.setValue(namespace, 'data', {\n                    duration: asset.duration\n                });\n            } else {\n                primary.setValue(namespace, 'data', {\n                    framerate: asset.framerate,\n                    duration: asset.duration\n                });\n            }\n        }\n\n        if (asset.audio_samplerate) {\n            primary.setValue(configuration.AUDIO_NAMESPACE, 'data', {\n                samplerate: asset.isLicensed ? asset.audio_samplerate : asset.audio_samplerate_preview\n            });\n        }\n    });\n    representationPromises.push(primaryPromise);\n\n    // Some things, such as setting the thumbnail cache, should only be completed after the representations are created/downloaded and a path is available,\n    // so add these secondary actions to the commitPromises array, to be completed before endOperation() is called.\n    const commitPromises = [];\n    if (thumbnailDetails && thumbnailDetails.path) {\n        // if the thumbnail is already downloaded, create the representation from its path\n        const thumbnail = element.createRepresentation(FileUtils.fileNameToMimeType(thumbnailDetails.path, elementType), 'rendition');\n        const thumbnailPromise = thumbnail.setContentFromPath(thumbnailDetails.path, false).then(() => {\n            if (thumbnailDetails.width) {\n                thumbnail.width = thumbnailDetails.width;\n            }\n            if (thumbnailDetails.height) {\n                thumbnail.height = thumbnailDetails.height;\n            }\n        });\n        representationPromises.push(thumbnailPromise);\n\n        commitPromises.push(element.setThumbnailCache(elementConfiguration.getThumbnailSize(element), thumbnailDetails.path));\n    } else if (thumbnailDetails && thumbnailDetails.dataURL) {\n        // if the thumbnail is already downloaded, create the representation from its path\n        const thumbnail = element.createRepresentation('image/png', 'rendition');\n        const thumbnailPromise = thumbnail.setContent(thumbnailDetails.dataURL, 'base64', `${FileUtils.generateUuid()}.png`).then(() => {\n            if (thumbnailDetails.width) {\n                thumbnail.width = thumbnailDetails.width;\n            }\n            if (thumbnailDetails.height) {\n                thumbnail.height = thumbnailDetails.height;\n            }\n        });\n        representationPromises.push(thumbnailPromise);\n    } else if (asset.thumbnail_url) {\n        // Download the thumbnail from URL (remove any query params)\n        const thumbnailUrl = asset.thumbnail_url.split('?')[0];\n        const mimetype = FileUtils.fileNameToMimeType(thumbnailUrl, elementType) || 'image/jpeg';\n        const thumbnail = element.createRepresentation(mimetype, 'rendition');\n        const thumbnailPromise = thumbnail.setContentFromURL(false, thumbnailUrl).then(() => {\n            const thumbnailSize = elementConfiguration.getThumbnailSize(element);\n            // set the thumbnail cache as well, so that a it wont be downloaded again.\n            commitPromises.push(thumbnail.getContentPath().then(path => element.setThumbnailCache(thumbnailSize, path)));\n        });\n        representationPromises.push(thumbnailPromise);\n    } // else no thumbnail\n\n    const promise = Promise.all(representationPromises)\n        .then(() => {\n            if (asset.is_licensed) {\n                // If the stock element is already licensed, we need to update it with the licensed information\n                const userId = appState.libraryManager.userId;\n                commitPromises.push(updateLicensedStockElements(userId, asset).then(() => element.endOperation()));\n            } else {\n                // Otherwise, we've already finished creating the comp, so we're done.\n                commitPromises.push(element.endOperation());\n            }\n            return Promise.all(commitPromises);\n        })\n        .then(() => element)\n        .catch(() => {\n            element.library.removeElement(element, true);\n            return Promise.reject();\n        });\n\n    return { promise, element };\n}\n\nexport function getMogrtApiVersion() {\n    const productCode = configuration.currentProduct.config.code;\n    const currentProductVersion = configuration.currentProduct.config.productVersion;\n    const mogrtVersions = configuration.STOCK_SEARCH_PRODUCT_MOGRT_VERSION_MAP[productCode];\n    if (!mogrtVersions) {\n        return;\n    }\n    const prodVersions = Object.keys(mogrtVersions).sort().reverse();\n    const highestProdVersion = prodVersions.find((appVersion) => currentProductVersion >= appVersion);\n    return highestProdVersion && mogrtVersions[highestProdVersion];\n}\n\nexport function canShowLicenseDialog() {\n    if (environment.hasUXPStockExtension) {\n        return true;\n    }\n    // App must be able to open extensions, and we need to have the new stock licensing extension available\n    const canOpenExtensions = !!environment.requestOpenExtension;\n    const isStockPanelAvailable = environment.getAvailableExtensions().some(extension => extension.name === configuration.STOCK_PURCHASE_EXTENSION_ID);\n    return canOpenExtensions && isStockPanelAvailable;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport floodgateManager from 'app/js/managers/floodgateManager';\nimport environment from 'app/js/environment';\nimport featureFlags from '../config/featureFlags';\n\n/**\n * Is the brand editable? M3 feature only\n * @param {Library} brand Check if this brand is editable\n * @param {boolean} creator Optional. If the requesting component wants to specify the creator\n * @returns {boolean} True if the brand is editable\n */\nexport function isBrandEditable(brand, creator) {\n    const isBrandCreator = floodgateManager.hasLoaded() && (creator || environment.isBrandCreator);\n    const m3Enabled = floodgateManager.isBrandLifecycleEnabled();\n    const isPublished = isPublishedBrand(brand);\n    return isBrandCreator && m3Enabled && isPublished;\n}\n\n/**\n * Returns true if the brand can be renamed.\n * @param {Library} brand\n * @param {boolean} [creator=environment.isBrandCreator] Optional. If the requesting component wants to specify the creator\n */\nexport function isBrandRenameable(brand, creator = environment.isBrandCreator) {\n    const isPublished = isPublishedBrand(brand);\n    return !!(creator && brand.isWritable && !isPublished);\n}\n\n/**\n * Returns brand project name\n */\nexport function getBrandProjectName() {\n    return featureFlags.get('useFakeProjectName') ? 'Fake Project' : 'Adobe GenStudio Brands';\n}\n\n/**\n * Returns true if the brand is published\n *\n * @param {LibraryModel} brand\n */\nexport function isPublishedBrand(brand) {\n    // In M3 we should look at the publishedFrom field to determine if the brand is a published asset.\n    return floodgateManager.isBrandLifecycleEnabled() ? !!brand?.publishedFrom : !!brand?.roles?.find(role => role.type === configuration.ROLE_VERIFIED);\n}\n\n/**\n * Returns true if the brand is unpublished\n * Different definitions of unpublished based on Brand Lifecycle feature\n *\n * @param {LibraryModel} brand\n */\nexport function isUnpublishedBrand(brand) {\n    return floodgateManager.isBrandLifecycleEnabled() ? (!(brand?.publishedFrom) && !(brand?.publishedTo)) : !brand?.roles?.find(role => role.type === configuration.ROLE_VERIFIED);\n}\n\n/**\n * Returns true for all brands that should appear under the \"All\" filter.\n * If the Brand Lifecycle feature is enabled, it will filter out Drafts that have their Published versions loaded.\n * Otherwise, all brands are shown.\n *\n * @param {LibraryModel} brand\n * @param {LibraryModel[]} brands\n */\nexport function filteredAllLibraries(brand, brands) {\n    if (floodgateManager.hasLoaded() && floodgateManager.isBrandLifecycleEnabled()) {\n        const hasPublishedAsset = brand?.publishedTo;\n        let isPublishedAssetLoaded = false;\n        if (hasPublishedAsset) {\n            isPublishedAssetLoaded = brands.find(b => b.assetId === hasPublishedAsset);\n        }\n        return !(hasPublishedAsset && isPublishedAssetLoaded);\n    } else {\n        return true;\n    }\n}\n\n/**\n * Returns true if library has the brand role\n *\n * @param {string} library\n * @returns { boolean }\n */\nexport function isBrandLibrary(library) {\n    return !!library?.roles?.find(role => role.type === configuration.ROLE_TYPE_BRAND);\n}\n\n/**\n * Returns true if current location is inside a brand\n *\n * @param {string} brandLocation\n * @returns { boolean }\n */\nexport function isInBrandOneUpView(brandLocation) {\n    // Regex matching urls that contain /brands/ and followed by one or more characters.\n    const insideBrandUrlPattern = /\\/brands\\/.+/;\n    return insideBrandUrlPattern.test(brandLocation);\n}\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2020 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\nimport environment from 'app/js/environment';\n\n/**\n * Provides a consistent interface for browser settings that may not be consistent across environments. (CEF, CEP, UXP, Electron, etc.)\n */\nclass BrowserUtils {\n    /**\n     * Is the host application connected to the internet?\n     *\n     * @returns {boolean}\n     */\n    get isOnline() {\n        return (environment && environment.isOnline !== undefined) ? environment.isOnline : window.navigator.onLine;\n    }\n}\n\nexport default new BrowserUtils();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport libraryProcessManager from 'app/js/managers/libraryProcessManager';\nimport { generatePreview, getCuratedName, getFilteredLibraries } from 'app/js/utils/libraryUtils';\nimport configuration from 'app/js/config/configuration';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport imsInterface from 'app/js/interface/imsInterface';\nimport metrics from 'app/js/interface/metrics';\nimport featureFlags from 'app/js/config/featureFlags';\nimport UXPEventTarget from 'app/js/utils/uxpEventTarget';\nimport localizedSorter from 'app/js/utils/localizedSorter';\nimport { translate } from 'app/js/managers/translationManager';\n\nconst maxPreviewWidth = 1024;\nconst maxPreviewHeight = 1024;\n\nexport const CAPTURE_EXTENSION_ID = 'com.adobe.capture.extension';\n\nexport const CAPTURE_EVENTS = {\n    INIT: 'com.adobe.capture.extension.init',\n    IMAGE: 'com.adobe.capture.extension.image',\n    SAVE: 'com.adobe.capture.extension.save',\n    CLOSE: 'com.adobe.capture.extension.close',\n    SET_CAPTURE_PREFERENCE: 'com.adobe.capture.extension.setCapturePreference',\n    GET_CAPTURE_PREFERENCE: 'com.adobe.capture.extension.getCapturePreference'\n};\n\nconst CAPTURE_PREFERENCE_KEY = 'com.adobe.capture.extension.preferenceKey';\n\nlet onCaptureInit;\nlet _isWebGLSupported = undefined;\nlet onCaptureSaveCallback;\n\nconst assetTypeToCaptureModule = {\n    'colorTheme': 'Colors',\n    'shape': 'Shapes',\n    'gradient': 'Gradients',\n    'pattern': 'Patterns',\n    'type': 'Type'\n};\n\nexport function resetWebGLFlag() {\n    _isWebGLSupported = undefined;\n}\n\nconst onCaptureSave = (event, elementAddCallback) => {\n    const eventData = event && event.data;\n    if (eventData) {\n        const asset = event.data;\n        let library = null;\n        const privateLibraries = getFilteredLibraries('personal', libraryManager.libraries);\n        if (libraryManager.currentLibrary) {\n            library = libraryManager.currentLibrary;\n        } else if (privateLibraries) {\n            localizedSorter.sortByModified(privateLibraries);\n            library = privateLibraries[0];\n        }\n        if (!library) {\n            library = libraryManager.createLibrary(translate('DL_CAPTURE_DEFAULT_LIBRARY_NAME'));\n        }\n        const assetName = getCuratedName(library, '', asset.prefix);\n        const libraryElement = library.createElement(assetName, asset.type);\n        const promises = [];\n\n        libraryElement.setValue('capture', 'data', asset.captureData || {});\n        asset.representations.forEach((rep, index) => {\n            const libraryRep = libraryElement.createRepresentation(rep.type, rep.relationship);\n            if (rep.metadata) {\n                for (const key in rep.metadata) {\n                    libraryRep.setValue(asset.namespace, key, rep.metadata[key]);\n                }\n            }\n            if (rep.filePath) {\n                promises.push(libraryRep.setContentFromPath(rep.filePath));\n            } else if (rep.extension === 'json') {\n                libraryRep.setValue(asset.namespace, 'data', rep.data);\n            } else {\n                promises.push(libraryRep.setContent(rep.data, rep.encoding, `asset${index}.${rep.extension}`));\n            }\n        });\n        Promise.all(promises).then(() => {\n            libraryElement.endOperation();\n            metrics.reportEvent('Add Assets', 'Element', 'click', 'add', { event: { value: 'agg', count: 1 }, content: { category: 'Capture', mimetype: asset.type } });\n            elementSelectionState.revealElement(libraryElement);\n            elementAddCallback && elementAddCallback([ libraryElement ]);\n        });\n    }\n};\n\nconst onCaptureClose = function() {\n    environment.removeEventListener(CAPTURE_EVENTS.INIT, onCaptureInit);\n    environment.removeEventListener(CAPTURE_EVENTS.SAVE, onCaptureSaveCallback);\n    environment.removeEventListener(CAPTURE_EVENTS.CLOSE, onCaptureClose);\n    environment.removeEventListener(CAPTURE_EVENTS.SET_CAPTURE_PREFERENCE, _setCapturePreference);\n    environment.removeEventListener(CAPTURE_EVENTS.GET_CAPTURE_PREFERENCE, _getCapturePreference);\n};\n\nconst getCaptureModules = function() {\n    const captureModules = configuration.currentProduct.config.captureModules || [];\n    if (libraryManager.isRestrictedAccount) {\n        // Since, Adobe fonts service is not available in China, Type module is disabled for China based users\n        return captureModules.filter(moduleName => moduleName !== 'Type');\n    }\n    return captureModules;\n};\n\n/**\n * Enforcing check to verify, if the products meets all the requirement for it to be supporting capture.\n * Requirements are as follows:\n * 1. config.captureModules array , which represents modules to be enabled, should be present in config and shouldn't be empty\n * 2. environment should have webgl support or it is UXP\n * @returns {boolean}\n */\nfunction isCaptureSupported() {\n    const captureModules = getCaptureModules();\n    return (environment.hasUXPCaptureExtension || isWebGLSupported()) && captureModules.length > 0;\n}\n\nfunction isWebGLSupported() {\n    if (_isWebGLSupported === undefined) {\n        const glCanvas = document.createElement('canvas');\n        const gl = glCanvas.getContext('webgl');\n        _isWebGLSupported = gl !== undefined && gl !== null;\n    }\n    return _isWebGLSupported;\n}\n\nfunction isCaptureEnabledForProduct() {\n    return Boolean(configuration.currentProduct.config.isCaptureEnabled);\n}\n\n/**\n * Checks if the environment doesn't have capture enabled (in which case feature-flag is redundant)\n * and environment has all pre-requisites for capture\n * @returns {boolean|boolean}\n */\nexport function shouldShowCaptureFeatureFlag() {\n    return !isCaptureEnabledForProduct() && isCaptureSupported();\n}\n\n/**\n * Check if capture is supported by the environment and product has it enabled in its config\n * or feature flag is checked.\n *\n * In order to enable capture feature flag :\n * 1. set the flag isCaptureEnabled to false in config of the product\n * 2. populate array, captureModules, with available capture Modules in config of the product\n * 3. Environment should either be UXP or have Webgl support\n * @returns {boolean|*}\n */\nexport function isCaptureEnabled() {\n    return isCaptureSupported() && (isCaptureEnabledForProduct() || featureFlags.get('capture'));\n}\n\nexport function isCapturePresentInAddMenu() {\n    return elementConfiguration.getAddOperations(layerSelectionManager.getLayerInfo(), libraryManager.currentLibrary).some(op => op.name === 'DL_CAPTURE');\n}\n\nexport function openCapture(forceTakeTour = false, elementAddCallback, assetType) {\n    if (layerSelectionManager.getLayerInfo() && layerSelectionManager.getLayerInfo().selectionExists) {\n        generatePreview('', maxPreviewWidth, maxPreviewHeight).then(fileData => {\n            _openCapture(forceTakeTour, fileData.rendition, elementAddCallback, assetType);\n        }, () => _openCapture(forceTakeTour, undefined, elementAddCallback, assetType) /* Open without rendition in case of any error */);\n    } else {\n        _openCapture(forceTakeTour, undefined, elementAddCallback, assetType);\n    }\n}\n\nexport function openCaptureForAssetType(assetType, imageUriList) {\n    if (Array.isArray(imageUriList) && imageUriList.length) {\n        // TODO: Open Capture panel with all the images. Currently no product sends image list.\n        // Placeholder implementation which opens Capture panel with the first image\n        _openCapture(false, imageUriList[0], null, assetType);\n    } else {\n        openCapture(false, null, assetType);\n    }\n}\n\nfunction _getCaptureSettingKey(type) {\n    const userId = libraryManager.userId;\n    return `${userId}#capture#${type}`;\n}\n\nfunction _getCaptureRestState(type) {\n    return libraryProcessManager.getLocalMachineSetting(_getCaptureSettingKey(type));\n}\n\nfunction _setCaptureRestState(type, value) {\n    libraryProcessManager.setLocalMachineSetting(_getCaptureSettingKey(type), value);\n}\n\nfunction _openCapture(forceTakeTour, imageURI, elementAddCallback, assetType) {\n    if (environment.hasUXPCaptureExtension) {\n        _openUXPCapture(forceTakeTour, imageURI, elementAddCallback, assetType);\n    } else {\n        _openCEPCapture(forceTakeTour, imageURI, elementAddCallback, assetType);\n    }\n}\n\nfunction _openCEPCapture(takeTour, imageURI, elementAddCallback, assetType) {\n    onCaptureClose();\n    onCaptureInit = function() {\n        environment.removeEventListener(CAPTURE_EVENTS.INIT, onCaptureInit);\n\n        const sendResponseToCapture = (userData) => {\n            const csEvent = environment.createEvent(CAPTURE_EVENTS.IMAGE, 'APPLICATION', 'CCLibrariesPanel', environment.getExtensionID());\n            const captureModules = getCaptureModules();\n            csEvent.data = {\n                takeTour,\n                imageURI,\n                modules: captureModules,\n                selectedModule: assetType ? assetTypeToCaptureModule[assetType] : captureModules[0],\n                userId: libraryManager.userId,\n                userAccountStatus: userData && userData.userAccountStatus,\n                env: imsInterface.getEnvironment().label,\n                tempDir: libraryManager.tempDir,\n                analyticsEnabled: libraryManager.ANALYTICS_ENABLED\n            };\n            environment.dispatchEvent(csEvent);\n        };\n\n        if (configuration.currentProduct.getUserData) {\n            configuration.currentProduct.getUserData(userData => sendResponseToCapture(userData));\n        } else {\n            sendResponseToCapture();\n        }\n    };\n    onCaptureSaveCallback = (e) => onCaptureSave(e, elementAddCallback);\n    environment.addEventListener(CAPTURE_EVENTS.INIT, onCaptureInit);\n    environment.addEventListener(CAPTURE_EVENTS.SAVE, onCaptureSaveCallback);\n    environment.addEventListener(CAPTURE_EVENTS.CLOSE, onCaptureClose);\n    environment.addEventListener(CAPTURE_EVENTS.SET_CAPTURE_PREFERENCE, _setCapturePreference);\n    environment.addEventListener(CAPTURE_EVENTS.GET_CAPTURE_PREFERENCE, _getCapturePreference);\n    environment.requestOpenExtension(CAPTURE_EXTENSION_ID);\n}\n\nfunction _setCapturePreference(event) {\n    const eventData = event && event.data;\n    if (eventData) {\n        let preference = _getCaptureRestState(CAPTURE_PREFERENCE_KEY);\n        if (!preference) {\n            preference = {};\n        }\n        Object.assign(preference, eventData);\n        _setCaptureRestState(CAPTURE_PREFERENCE_KEY, preference);\n    }\n}\n\nfunction _getCapturePreference(event) {\n    const eventData = event && event.data;\n    const eventId = eventData.eventId;\n    const preferenceKey = eventData.preferenceKey;\n    if (eventId && preferenceKey) {\n        const csEvent = environment.createEvent(eventId, 'APPLICATION', 'CCLibrariesPanel', environment.getExtensionID());\n        if (eventData) {\n            const preference = _getCaptureRestState(CAPTURE_PREFERENCE_KEY);\n            if (preference) {\n                csEvent.data = preference[preferenceKey];\n            }\n        }\n        environment.dispatchEvent(csEvent);\n    }\n}\n\nfunction _openUXPCapture(takeTour, imageAbsPath, elementAddCallback, assetType) {\n    environment.getBase64DataFromImage(imageAbsPath).then(imageURI => {\n        const pm = window.nodeRequire('uxp').pluginManager;\n        const librariesExtension = Array.from(pm.plugins).find(plugin => plugin.id === 'com.adobe.cclibrariespanel');\n        const captureLocation = librariesExtension.pluginPath + 'extensions/capture';\n        const capturePlugin = pm.createPlugin(captureLocation, pm.PLUGIN_TYPE_FIRST_PARTY, {\n            name: 'Extract from Image',\n            allowCodeGenerationFromStrings: true,\n        });\n        pm.addPlugin(capturePlugin, true);\n        const captureExtension = capturePlugin.runtime;\n        captureExtension.addEventListener(pm.RUNTIME_INITIALIZE, () => {\n            captureExtension.registerUxpModule('host', () => window.nodeRequire('uxp').host);\n            captureExtension.registerUxpModule('licensing', () => window.nodeRequire('uxp').licensing);\n            captureExtension.registerUxpModule('eventTarget', () => {\n                const eventTarget = new UXPEventTarget();\n                eventTarget.addEventListener(CAPTURE_EVENTS.SAVE, (event) => {\n                    if (event.detail) {\n                        onCaptureSave(event.detail, elementAddCallback);\n                    }\n                });\n                environment.addEventListener(CAPTURE_EVENTS.SET_CAPTURE_PREFERENCE, _setCapturePreference);\n                environment.addEventListener(CAPTURE_EVENTS.GET_CAPTURE_PREFERENCE, _getCapturePreference);\n                return eventTarget;\n            });\n\n            if (environment.additionalCaptureCoreModules) {\n                environment.additionalCaptureCoreModules.forEach(name => captureExtension.registerCoreModule(name, () => window.nodeRequire(name)));\n            }\n        });\n        captureExtension.load();\n\n        window.nodeRequire('uxp').licensing.fetchProfile().then(userData => {\n            const captureModules = getCaptureModules();\n            const captureInitData = {\n                takeTour,\n                imageURI,\n                modules: captureModules,\n                selectedModule: assetType ? assetTypeToCaptureModule[assetType] : captureModules[0],\n                env: imsInterface.getEnvironment().label,\n                tempDir: libraryManager.tempDir,\n                analyticsEnabled: libraryManager.ANALYTICS_ENABLED\n            };\n            const userProfile = JSON.parse(userData).UserProfile;\n            if (userProfile) {\n                captureInitData.userId = userProfile.userId;\n                captureInitData.userAccountStatus = userProfile.accountType === 'type3' ? 'paid' : 'free';\n            }\n            captureExtension.invokeCommand('createFromImage', captureInitData).then(async() => {\n                await captureExtension.unload();\n                pm.removePlugin(capturePlugin);\n                _captureUXPClosed();\n            });\n        });\n    });\n}\n\nfunction _captureUXPClosed() {\n    // To be implemented\n}\n\nexport function closeCapture() {\n    const event = environment.createEvent(CAPTURE_EVENTS.CLOSE, 'APPLICATION', 'CCLibrariesPanel', environment.getExtensionID());\n    event.data = ''; // CEP turns undefined into the string \"undefined\", so dispatch empty string instead\n    environment.dispatchEvent(event);\n    environment.closeExtension();\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/**\n    Utilities for colors. See below for data formats.\n\n    Color data format (the 'value' of an rgb representation):  {\n        mode: 'RGB',\n        profileName: 'sRGB IEC61966-2.1',\n        type: 'process',\n        value: { r: 50, g: 50, b: 50 }\n    }\n\n    Color swatch (from a color theme) format: [\n        colorDataForRGB, // just like above color data\n        colorDataForCMYK // CMYK is optional\n    ]\n\n    rgb color object: {r: 2, g: 55, b: 99}\n**/\n\nimport configuration from 'app/js/config/configuration';\nimport environment from '../environment';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport { translate } from 'app/js/managers/translationManager';\n\nconst DISABLED_ALPHA = 0.2;\nconst ENABLED_ALPHA = 1;\n\nconst PRECISION = 100; // 2 decimal points.\n\nexport const UXPColorProfiles = {\n    MONITOR: 'monitor',\n    SRGB: 'srgb'\n};\n\n// Convert RGB values to a hex number (e.g. rgbToHexNumber(50, 50, 50) = 0x323232)\nexport function rgbToHexNumber(r, g, b) {\n    const red = (Math.max(0, Math.min(255, r)));\n    const green = (Math.max(0, Math.min(255, g)));\n    const blue = (Math.max(0, Math.min(255, b)));\n    return red << 16 | green << 8 | blue;\n}\n\nconst ALPHA_OFFSET = Math.pow(2, 24);\n\n// Add alpha to an RGB hex number (e.g. rgbToHexNumber(0x323232, 1) = 0xff323232)\nfunction addAlphaToRGBHexNumber(color, alpha = 1) {\n    alpha = Math.round(alpha * 255);\n    // Note: can't use a bitwise shift since in JS it gets converted to int32, and you'll get overflow\n    return alpha * ALPHA_OFFSET + color;\n}\n\n// Convert RGB values to a hex number (e.g. rgbToHexNumber(50, 50, 50, 1) = 0xff323232)\nexport function rgbaToHexNumber(red, green, blue, alpha = 1) {\n    return addAlphaToRGBHexNumber(rgbToHexNumber(red, green, blue), alpha);\n}\n\n// Convert RGB values to a hex string (e.g. rgbToHex(50, 50, 50) = '#323232')\nexport function rgbToHex(red, green, blue) {\n    //TODO: add toUpperCase() here IOS and processJS both uses the upper case for RGB name\n    let str = rgbToHexNumber(red, green, blue).toString(16).toUpperCase();\n    while (str.length < 6) {\n        str = '0' + str;\n    }\n    return '#' + str;\n}\n\n// Convert a hex string to an RGB object\nexport function hexToRGB(hexColor) {\n    hexColor = hexColor.charAt(0) === '#' ? hexColor.substring(1) : hexColor;\n    return {\n        red: parseInt(hexColor.substring(0, 2), 16),\n        green: parseInt(hexColor.substring(2, 4), 16),\n        blue: parseInt(hexColor.substring(4, 6), 16)\n    };\n}\n\n// Convert a hex string to an RGBA object\nexport function hexToRGBA(hexColor) {\n    hexColor = hexColor.charAt(0) === '#' ? hexColor.substring(1) : hexColor;\n    let alpha = parseInt(hexColor.substring(6, 8), 16);\n    alpha = isNaN(alpha) ? 255 : alpha;\n    return Object.assign({ alpha }, hexToRGB(hexColor));\n}\n\n// Compute a brightness value (average of RGB values) from an RGB object\nexport function getBrightness(color) {\n    return (color.red + color.green + color.blue) / 3;\n}\n\n// Gets the contrast between two colors in RGB format {red, green, blue}\nexport function getContrast(bgColor, fgColor) {\n    return Math.abs(getBrightness(bgColor) - getBrightness(fgColor));\n}\n\n// Internal: This is used by other methods that need the r,g,b values, to avoid\n// them having to create a new array.\n// Takes a function that operates on r,g,b,a values ((r,g,b,a)->result), along with a default return value,\n// and returns a function that takes a color data object (or array of color data objects) as input.\nconst _pipeRGBValues = (fn, defaultValue) => inputData => {\n    // If data is a swatch array of colorData, get the rgb data\n    const data = Array.isArray(inputData) ? getRGBRepresentation(inputData) : inputData;\n    if (data && data.value) {\n        return fn(Math.round(data.value.r), Math.round(data.value.g), Math.round(data.value.b), data.alpha);\n    }\n    return defaultValue;\n};\n\n/**\n * Convert the color data stored in a library representation to an RGB or RGBA object\n *\n * @param {Object|Array} color data object (or array of color data objects)\n * @returns {Object} with red, green, blue, alpha properties\n */\nexport const colorDataToRGBA = _pipeRGBValues((red, green, blue, alpha) => ({ red, green, blue, alpha }));\nexport const colorDataToRGB = _pipeRGBValues((red, green, blue) => ({ red, green, blue }));\n\n// Convert color data to a hex string\nexport const colorDataToHexString = _pipeRGBValues(rgbToHex, '');\n\n// Convert color data to a hex number\nexport const colorDataToHexNumber = _pipeRGBValues(rgbToHexNumber);\n\n// Convert color data to a hex number with alpha\nexport const colorDataToHexNumberWithAlpha = _pipeRGBValues(rgbaToHexNumber);\n\n// Convert color data + separate alpha to a hex number with alpha\nexport const colorDataAndAlphaToHexNumber = (data, alpha) => {\n    const colorValue = colorDataToHexNumber(data);\n    return colorValue && addAlphaToRGBHexNumber(colorValue, alpha);\n};\n\n// Convert color data to a CSS \"rgba(...)\" string\nexport const colorDataToRgbaCss = (data, alpha) => _pipeRGBValues((red, green, blue) => `rgba(${red},${green},${blue},${alpha})`)(data);\n\nexport const round = x => Math.round(x * PRECISION) / PRECISION;\nconst normalize = (a, b, offset) => (offset - a.offset) / (b.offset - a.offset);\n\n/**\n * Get the CSS backgroundColor for a color element depending on whether it's enabled or disabled\n *\n * @param {AdobeLibraryElement|BaseElementModel} element\n * @param {boolean} [disabled]\n * @param {Function} convertFn\n */\nexport function getBackgroundColor(element, disabled, convertFn = undefined) {\n    if (!element) { return; }\n    let rgbColorData = getRGBColor(element);\n    if (!rgbColorData) { return; }\n    let alpha = rgbColorData.alpha === undefined ? 1 : rgbColorData.alpha;\n\n    if (convertFn !== undefined) {\n        const { alpha: convertedAlpha, ...convertedColor } = convertFn({ ...rgbColorData.value, alpha });\n        // Perform a deep clone in order not to modify the original element value\n        const convertedRgbData = {\n            ...rgbColorData,\n            value: {\n                ...rgbColorData.value\n            }\n        };\n        convertedRgbData.value = convertedColor;\n        rgbColorData = convertedRgbData;\n        alpha = convertedAlpha;\n    }\n    return colorDataToRgbaCss(rgbColorData, disabled ? DISABLED_ALPHA : alpha);\n}\n\n/**\n * Given two known values `v1` and `v2`, approximates the value of a point `x`.\n * @param {number} x\n * @param {number} v1\n * @param {number} v2\n */\nfunction _linearInterpolate(x, v1, v2) {\n    const y = v1 + (v2 - v1) * x;\n    return round(y);\n}\n\n/**\n * Using linear interpolation, approximate the color of the point at `targetOffset` found between known colors `colorDataA` and `colorDataB`.\n * @param {number} targetOffset\n * @param {Array} colorDataA\n * @param {Array} colorDataB\n */\nexport function _linearInterpolateColor(targetOffset, colorDataA, colorDataB) {\n    const colorA = getRGBRepresentation(colorDataA);\n    const colorB = getRGBRepresentation(colorDataB);\n    // An RGB representation is required.\n    if (!colorA || !colorB) { return; }\n    const newColor = {\n        mode: 'RGB',\n        value: {\n            r: _linearInterpolate(targetOffset, colorA.value.r, colorB.value.r),\n            g: _linearInterpolate(targetOffset, colorA.value.g, colorB.value.g),\n            b: _linearInterpolate(targetOffset, colorA.value.b, colorB.value.b)\n        }\n    };\n    // We put the value in a list since this is just one of the representations of the color (RGB)\n    return [ newColor ];\n}\n\n/**\n * Add explicit stops representing the midpoints between each stop, as needed.\n * Gradient Stop value will be read and stored using `valueKey`.\n * @param {string} valueKey\n * @param {Array} stops\n */\nexport function _addMidpointStops(valueKey, stops) {\n    // The midpoint of two stops is the point where the value is exactly half-way between the value of the two stops.\n    // For stops A and B where the former precedes the latter, the midpoint is stored in B and is expressed as the offset B towards A.\n    // Note that the above implies the first stop in a gradient stores no meaningful midpoint value so we can skip it.\n    const newStops = [];\n    for (let i = 0; i < stops.length; i++) {\n        const stopA = stops[i];\n        const stopB = stops[i + 1];\n        // Add each stop to the list.\n        newStops.push(stopA);\n        if (stopB && stopB.midpoint && round(stopB.midpoint) !== 0.5) {\n            // If the midpoint is not exactly in the middle of the two stops, we need to add an explicit stop there.\n            const interpolate = valueKey === 'color' ? _linearInterpolateColor : _linearInterpolate;\n            newStops.push({\n                offset: _linearInterpolate(stopB.midpoint, stopA.offset, stopB.offset),\n                [valueKey]: interpolate(0.5, stopA[valueKey], stopB[valueKey])\n            });\n        }\n    }\n    return newStops;\n}\n\n/**\n * Interpolate either a color or an opacity value at `offset` using the closest value from `stops` and `prevStop`\n * @param {Array} valueKey\n * @param {Array} offset\n * @param {Array} stops\n * @param {Array} prevStop\n */\nfunction _getFauxValue(valueKey, offset, stops, prevStop) {\n    const nextStop = stops.find(stop => stop.offset > offset);\n    if (!nextStop) {\n        // Undefined stop at the end of the gradient, value should be equal to that of the last defined stop.\n        return prevStop[valueKey];\n    }\n    if (!prevStop) {\n        // Undefined stop at the start of the gradient, value should be equal to that of the first defined stop.\n        return nextStop[valueKey];\n    }\n    const interpolate = valueKey === 'color' ? _linearInterpolateColor : _linearInterpolate;\n    // To ease the interpolation, we normalize the offset of the stop to be a relative position between `prevStop` and `nextStop`.\n    return interpolate(normalize(prevStop, nextStop, offset), prevStop[valueKey], nextStop[valueKey]);\n}\n\n/**\n * Create an array of stops containing all stops form both `colorStops` and `opacityStops` with approximated values for non-matching locations.\n * @param {Array} colorStops\n * @param {Array} opacityStops\n * @param {boolean} addFauxValues\n */\nexport function _combineStops(colorStops, opacityStops, addFauxValues = true) {\n    const addToMap = (stops) => stops.forEach(stop => {\n        offsetMap[stop.offset] = offsetMap[stop.offset] || {};\n        Object.assign(offsetMap[stop.offset], stop);\n    });\n    // Create a map of all stop positions in both colorStops and opacityStops.\n    // When a stop position exists in both arrays the data of both stops will be merged.\n    const offsetMap = {};\n    addToMap(colorStops);\n    addToMap(opacityStops);\n    // We retrieve the map's keys and sort them numerically to get an ordered list of all stop locations.\n    // For each location we either have both color and opacity data or we're missing one of the two,\n    // in which case we will approximate a value for that stop by interpolation, using the two nearest stops.\n    let prevStop;\n    return Object.keys(offsetMap).sort().map(offset => {\n        const stop = offsetMap[offset];\n        // Opacity without a color stop, needs a faux color\n        if (addFauxValues) {\n            stop.color = stop.color || _getFauxValue('color', offset, colorStops, prevStop);\n        }\n\n        // Color stop without an opacity, needs a faux opacity\n        if (stop.opacity === undefined && addFauxValues) {\n            stop.opacity = _getFauxValue('opacity', offset, opacityStops, prevStop);\n        }\n        prevStop = stop;\n        return stop;\n    });\n}\n\n/**\n * Return all color stops needed to draw a gradient.\n * @param {Array} colorStops\n * @param {Array} opacityStops\n * @param {boolean} addFauxStops\n */\nexport function flattenGradientStops(colorStops, opacityStops, addFauxStops = true) {\n    let colors = colorStops.slice(0);\n    // The standard is to specify opacity in the opacity gradient.\n    // Invalidate opacity that is directly specified in the color stops.\n    colors.forEach(stop => (stop.opacity = undefined));\n    if (addFauxStops) {\n        colors = _addMidpointStops('color', colorStops);\n    }\n\n    // Account for opacity in the gradient.\n    if (!opacityStops || opacityStops.length === 0) {\n        // Default case, just set the opacities all to 1 to express full opacity accross the gradient.\n        colors.forEach(stop => stop.opacity = 1);\n    } else {\n        // In the case where an Opacity gradient is specified, it should be overlaid with the Color gradient.\n        // However, it is possible that the positions of the Color and Opacity stops do not match.\n        // In that case we will create extra, \"faux\" stops that will approximate the value of the missing stops.\n        const opacities = addFauxStops ? _addMidpointStops('opacity', opacityStops) : opacityStops;\n        colors = _combineStops(colors, opacities, addFauxStops);\n    }\n    return colors;\n}\n\n/**\n * Get the style object needed to render this gradient element depending on whether it's enabled or disabled.\n * @param {AdobeLibraryElement|ElementModel} element\n * @param {boolean} [disabled]\n * @param {boolean} [useTransform]\n * @param {boolean} [forceLinear]\n * @param {Function} convertFn\n */\nexport function getCSSForGradientElement(element, disabled, useTransform, forceLinear = false, convertFn = undefined) {\n    if (!element || !element.representations || element.representations.length === 0) { return; }\n    const representation = element.getPrimaryRepresentation();\n    const data = representation.getValue('gradient', 'data');\n    if (!data) { return; }\n    return getCSSForGradient(data, disabled, useTransform, forceLinear, convertFn);\n}\n\n/**\n * Get the style object needed to render the given gradient datatransform for gradient data.\n * @param {Object} data\n * @param {boolean} [disabled]\n * @param {boolean} [useTransform]\n * @param {boolean} [forceLinear]\n * @param {Function} convertFn\n */\nexport function getCSSForGradient(data, disabled, useTransform = true, forceLinear = false, convertFn = undefined) {\n    // A Gradient Library Element expresses a transition of colors along a figure.\n    // It stores a collection of specified position-color pairs called \"stops\" to specify that at a point X% away from the start of the figure, the color should be exactly Y.\n    // The creator of a Gradient can fine-tune the rate of the color transitions by specifying \"midpoint\" values to the stops, which\n    // represent the position of the point between two stops where the color value is exactly half-way between the value of the other two.\n    // With the structure above, the consumer of a Gradient Element can draw it by assigning each point between two stops, color values gradually closer to the value of the next stop.\n    // Optionally, a Gradient Element can store a second array of stops representing Opacity along the figure.\n    // eslint-disable-next-line prefer-const\n    let { type, stops, opacities, angle, aspectRatio, scale, centerPoint } = data;\n\n    if (forceLinear) {\n        type = 'linear';\n        angle = 0;\n    }\n    // Catching missing or corrupted data:\n    // 1) Only certain gradient types can be rendered using CSS.\n    if (![ 'linear', 'radial' ].includes(type) || !stops) { return; }\n    // 2) The default angle is 0.\n    angle = angle || 0;\n    // 3) The default aspect ratio and scale for a radial gradient is 1.\n    aspectRatio = aspectRatio || 1;\n    scale = scale || 1;\n    // Note that the percentage dimensions are based on the radius in CSS, so we need to multiply by .5\n    const scaleX = .5 * scale;\n    // 4) The default centerPoint of a radial gradient is at the center of the container (50% 50%).\n    const centerX = centerPoint && centerPoint.x !== undefined ? centerPoint.x : 0.5;\n    const centerY = centerPoint && centerPoint.y !== undefined ? centerPoint.y : 0.5;\n\n    stops = flattenGradientStops(stops, opacities);\n\n    // These are the CSS properties needed to render the gradient.\n    let transform;\n    const willTransform = type === 'radial' && !environment.hasUXPTransformBug && useTransform;\n\n    const gradient = [];\n    // We visit each stop, extract the color and opacity data and convert them to an RGBA value we can use for styling.\n    for (let i = 0; i < stops.length; i++) {\n        const stop = stops[i];\n        // A stop can be represented in any color space but it should always include an RGB representation.\n        const rgbColorData = stop.color && stop.color.length && stop.color.find(color => color.mode === 'RGB');\n        if (!rgbColorData) { return; }\n\n        let alpha = disabled ? DISABLED_ALPHA : stop.opacity;\n        let finalRgbColorData = rgbColorData;\n        if (convertFn !== undefined) {\n            const { alpha: convertedAlpha, ...convertedColor } = convertFn({ ...rgbColorData.value, alpha });\n            // Perform a deep clone in order not to modify the original element value\n            finalRgbColorData = {\n                ...rgbColorData,\n                value: {\n                    ...rgbColorData.value\n                }\n            };\n            finalRgbColorData.value = convertedColor;\n            alpha = convertedAlpha;\n\n        }\n        const rgba = colorDataToRgbaCss(finalRgbColorData, alpha);\n        // A stop's 'offset' is its position relative to the start of the gradient line.\n        const offset = stop.offset && `${Math.round(stop.offset * 100)}%`;\n        gradient.push(`${rgba} ${offset || ''}`);\n    }\n\n    // Account for angles, aspect ratios and centerPoints.\n    // A Library Gradient's angle is measured anti-clockwise from the positive x-axis (0deg points to the right)\n    // A CSS Gradient's angle is measured clockwise from the positive y-axis (0deg points up). So we adjust by 90deg.\n    type === 'linear' && gradient.unshift(`${90 - angle}deg`);\n    // For radial gradients, we will take care of respecting the angle and the center point using the CSS `transform` property.\n    if (willTransform) {\n        const SCALE = Math.ceil(2 * Math.max(\n            Math.max(1, Math.abs(centerX)) / scaleX,\n            Math.max(1, Math.abs(centerY)) / (scaleX * aspectRatio)\n        ));\n        // Place a small circle in the center with aspect ratio of 1. The transform below will account for centerpoint, scale, aspect ratio and angle.\n        type === 'radial' && gradient.unshift(`ellipse ${50 / SCALE}% ${50 / SCALE}% at 50% 50%`);\n        // Leave default transformOrigin in th the center of the container.\n        // Scale the radial gradient to respect the scale and aspect ratio, rotate to repect the angle and translate to respect the center point (offset from 0.5 since we render the ellipsis at the center).\n        // CCS `rotate` values are measured clockwise from the x-axis (0deg points right, progresses downward),\n        // while Library Gradient's angle is measured anti-clockwise from the positive x-axis (0deg points right, progresses upward), so flip sign to convert.\n        transform = `translate(${round((centerX - 0.5) * 100)}%, ${round((centerY - 0.5) * 100)}%) rotate(${-1 * angle}deg) scale(${scale * SCALE},${scale * SCALE * aspectRatio})`;\n    } else {\n        // But if there is no support for CSS `transform`, we can still set the center point here but we won't be able to draw the right angle\n        type === 'radial' && gradient.unshift(`ellipse ${round(scaleX * 100)}% ${round((scaleX * 100) * aspectRatio)}% at ${round(centerX * 100)}% ${round(centerY * 100)}%`);\n    }\n\n    // The actual CSS gradient string\n    // Ex. linear-gradient(90deg,rgba(109,101,90,1),rgba(191,188,181,1),rgba(170,152,128,1),rgba(34,34,32,1).\n    // Ex. radial-gradient(ellipse 100% 100% at 50% 50%,rgba(109,101,90,1),rgba(191,188,181,1),rgba(170,152,128,1),rgba(34,34,32,1)\n    const backgroundImage = `${type}-gradient(${gradient.join(',')})`;\n\n    return { backgroundImage, transform };\n}\n\n/**\n * Get the CSS backgroundColor for a color swatch depending on whether it's enabled or disabled\n *\n * @param {Array} swatch - array of color data objects for RGB and maybe CMYK\n * @param {boolean} [disabled]\n */\nexport function getSwatchBackgroundColor(swatch, disabled) {\n    if (!swatch || !Array.isArray(swatch)) { return; }\n    const rgbColorData = swatch.find(data => data.mode === 'RGB');\n    if (!rgbColorData) { return; }\n    return colorDataToRgbaCss(rgbColorData, disabled ? DISABLED_ALPHA : ENABLED_ALPHA);\n}\n\n// Convert color data to a string e.g. 'C10 M20 Y30 K40'\nexport function getStringColorValue(color, includePrefixes = true) {\n    let result;\n    if (color) {\n        if (includePrefixes) {\n            if (color.mode === 'CMYK') {\n                result = 'C' + Math.round(color.value.c) + ' M' + Math.round(color.value.m) + ' Y' + Math.round(color.value.y) + ' K' + Math.round(color.value.k);\n            } else if (color.mode === 'RGB') {\n                result = 'R' + Math.round(color.value.r) + ' G' + Math.round(color.value.g) + ' B' + Math.round(color.value.b);\n            } else if (color.mode === 'Lab') {\n                result = 'L' + Math.round(color.value.l) + ' A' + Math.round(color.value.a) + ' B' + Math.round(color.value.b);\n            } else if (color.mode === 'HSB') {\n                result = 'H' + Math.round(color.value.h) + ' S' + Math.round(color.value.s) + ' B' + Math.round(color.value.b);\n            } else if (color.mode === 'Gray') {\n                result = 'G' + Math.round(color.value);\n            }\n        } else {\n            if (color.mode === 'CMYK') {\n                result = Math.round(color.value.c) + ', ' + Math.round(color.value.m) + ', ' + Math.round(color.value.y) + ', ' + Math.round(color.value.k);\n            } else if (color.mode === 'RGB') {\n                result = Math.round(color.value.r) + ', ' + Math.round(color.value.g) + ', ' + Math.round(color.value.b);\n            } else if (color.mode === 'Lab') {\n                result = Math.round(color.value.l) + ', ' + Math.round(color.value.a) + ', ' + Math.round(color.value.b);\n            } else if (color.mode === 'HSB') {\n                result = Math.round(color.value.h) + ', ' + Math.round(color.value.s) + ', ' + Math.round(color.value.b);\n            } else if (color.mode === 'Gray') {\n                result = Math.round(color.value);\n            }\n        }\n\n    }\n    return result;\n}\n\n// Given a color element, return the color data for its RGB representation\nexport function getRGBColor(element) {\n    if (!element || !element.representations) { return; }\n\n    const colors = element.representations.map(rep => rep.getValue('color', 'data'));\n    return getRGBRepresentation(colors);\n}\n\n// Return the RGB representation from an array of representation values (swatch?)\nexport function getRGBRepresentation(colors) {\n    const rgbColors = colors.filter(color => color && color.mode === 'RGB');\n\n    // Ideally we want to pick the first sRGB color, but some library elements store an\n    // RGB representation with a non-standard profile. To avoid rendering those unusable,\n    // we'll fall back to the first RGB representation of any color space, if there's no\n    // sRGB representation (this is technically wrong, but avoids a breaking change)\n    const srgbColor = rgbColors.find(color => !color.profileName || color.profileName === configuration.DEFAULT_SRGB_PROFILE);\n    return srgbColor || rgbColors[0];\n}\n\n// Returns true if the given color is above a certain lightness threshold (brightness >= 230)\nexport const isLightColor = _pipeRGBValues((red, green, blue) => {\n    const colorAverage = (red + green + blue) / 3;\n    // 690 is the decided on color value for the lightest text where\n    // this issue is visible (R: 230, G: 230, B: 230).\n    return colorAverage >= 230 ? true : false;\n}, false);\n\n// returns all possible color values for the array of color objects\nexport function getAllColorValues(colors) {\n    const allColors = (Array.isArray(colors) ? colors : [ colors ]).filter(color => !!color);\n    const values = [];\n\n    // Need to get these values only ONCE because we only want them listed once per color\n    const typeColor = allColors.find(color => color.type);\n    if (typeColor) {\n        values.push({\n            label: translate('DL_INFO_COLOR_TYPE'),\n            value: translate(`DL_INFO_${typeColor.type.toUpperCase()}_COLOR_TYPE`),\n        });\n\n        if (typeColor.type === 'spot' && typeColor.profileName) {\n            values.push({\n                label: translate('DL_INFO_COLOR_PROFILE'),\n                value: typeColor.profileName\n            });\n        }\n    }\n\n    allColors.forEach(color => {\n        if (color.mode === 'RGB') {\n            const hex = colorDataToHexString(color).toUpperCase();\n            if (hex) {\n                values.push({ label: 'HEX', value: hex });\n            }\n        }\n\n        const trueColorValue = getStringColorValue(color, false);\n        values.push({ label: color.mode, value: trueColorValue });\n    });\n\n    const spotColor = allColors.find(color => color.spotColorName);\n    if (spotColor) {\n        values.push({ label: 'SPOT', value: spotColor.spotColorName });\n    }\n\n    const opacityColor = allColors.find(color => color.alpha !== undefined);\n    if (opacityColor) {\n        values.push({\n            label: translate('DL_INFO_OPACITY'),\n            value: translate('DL_PERCENTAGE', { percent: opacityColor.alpha * 100 })\n        });\n    }\n    return values;\n}\n\nexport function getColorThemeData(element) {\n    const representation = elementConfiguration.findUsableRepresentation(element, `application/vnd.adobe.colortheme+json`);\n    const colortheme = representation && representation.getValue('colortheme', 'data');\n\n    if (colortheme && Array.isArray(colortheme.swatches)) {\n        const colors = colortheme.swatches.map(color => {\n            const hex = colorDataToHexString(color);\n            const data = getAllColorValues(color);\n            const swatch = color;\n\n            return {\n                hex,\n                data,\n                swatch\n            };\n        });\n        return colors;\n    }\n    return [];\n}\n\nexport function getGradientData(element) {\n    const representation = element.getPrimaryRepresentation();\n    const gradient = representation && representation.getValue('gradient', 'data');\n\n    if (gradient && Array.isArray(gradient.stops)) {\n        const allStops = flattenGradientStops(gradient.stops, gradient.opacities, false);\n        const stops = allStops.map((stop, index) => {\n            let data = [];\n            if (stop.color) {\n                data = data.concat(getAllColorValues(stop.color));\n            }\n\n            const prevStop = index > 0 ? allStops[ index - 1 ] : null;\n            if (prevStop) {\n                const midpointDistance = (stop.offset - prevStop.offset) / 2;\n                stop.midpoint = stop.offset - midpointDistance;\n            } else {\n                stop.midpoint = undefined;\n            }\n\n            stop.opacity && data.push({ label: translate('DL_INFO_OPACITY'), value: translate('DL_PERCENTAGE', { percent: Math.round(stop.opacity * 100) }) });\n            data.push({ label: translate('DL_INFO_GRADIENT_OFFSET'), value: translate('DL_PERCENTAGE', { percent: Math.round(stop.offset * 100) }) });\n            stop.midpoint && data.push({ label: translate('DL_INFO_GRADIENT_MIDPOINT'), value: translate('DL_PERCENTAGE', { percent: Math.round(stop.midpoint * 100) }) });\n            return {\n                offset: stop.offset,\n                data,\n            };\n        });\n        return stops;\n    }\n\n    return [];\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/**\n    Debug Log service\n\n    This service allows you to write messages to a log file. Each app (e.g. Photoshop, Illustrator) has its own log.\n**/\n\nimport environment from 'app/js/environment';\nimport * as FileUtils from './fileUtils';\nimport { addListenerManager } from './listenerUtils';\n\nconst MAX_LOG_SIZE = 5 * 1024 * 1024; // 5MB\nconst _fs = () => window.nodeRequire('fs');\nconst logFileExtension = '.log';\n\nexport class DebugLog {\n\n    _progressMap = new Map();\n\n    // Allow injection for unit tests\n    constructor(options = {}) {\n        this._maxLogSize = options.maxLogSize || MAX_LOG_SIZE;\n    }\n\n    _enabled = true;\n    pendingLogWrite = null;\n    writingToLog = false;\n    _isInitialized = false;\n    _messagesBeforeInit = '';\n\n    /* ***********************************\n     * Private helper functions\n     * ***********************************/\n\n    _swapLogIfNeeded(callback) {\n        const fs = _fs();\n        fs.stat(this.logFilePath, (err, stats) => {\n            if (!err && stats.size > this._maxLogSize) {\n                // Move the current log into the previous log (this overwrites the file if already there)\n                fs.rename(this.logFilePath, this.prevLogFilePath, callback);\n                return;\n            }\n\n            callback(null);\n        });\n    }\n\n    _doLogWrite() {\n        FileUtils.ensurePathExists(this.logRoot, (err) => {\n            if (err) {\n                // Cancel pending write\n                this.pendingLogWrite = undefined;\n                console.error(err);\n                this._listenerManager.notify('flushed');\n                return;\n            }\n\n            this._swapLogIfNeeded((err) => {\n                if (err) {\n                    // Cancel pending write\n                    this.pendingLogWrite = undefined;\n                    console.error(err);\n                    this._listenerManager.notify('flushed');\n                    return;\n                }\n\n                const dataToWrite = this.pendingLogWrite;\n                this.pendingLogWrite = undefined;\n\n                this.writingToLog = true;\n                _fs().appendFile(this.logFilePath, dataToWrite, (err) => {\n                    // Listener used in testing to trigger second write\n                    if (err) {\n                        console.error(err);\n                    }\n\n                    this.writingToLog = false;\n\n                    if (this.pendingLogWrite) {\n                        this._doLogWrite();\n                    } else {\n                        this._listenerManager.notify('flushed');\n                    }\n                });\n            });\n        });\n    }\n\n    /* ***********************************\n     * Public API functions\n     * ***********************************/\n\n    init() {\n        if (this._isInitialized || !environment.supportsFileSystem) {\n            return;\n        }\n\n        this._listenerManager = addListenerManager(this, [ 'flushed' ]);\n        const env = window.process.env;\n\n        if (environment.isWindowsOS()) {\n            const tempDirectory = env && env.TEMP.replace(/\\\\/g, '/');\n            this.logRoot = tempDirectory + '/CreativeCloud/Creative Cloud Libraries';\n        } else {\n            this.logRoot = env && env.HOME + '/Library/Logs/CreativeCloud/Creative Cloud Libraries';\n        }\n\n        this.logFilePrefix = 'CC Library Panel ' + environment.getAppName() + ' ' + environment.getAppVersion();\n\n        this.logFilePath = this.logRoot + '/' + this.logFilePrefix + logFileExtension;\n        this.prevLogFilePath = this.logRoot + '/' + this.logFilePrefix + ' (prev)' + logFileExtension;\n\n        // We need a different log file for JSX errors, because it'll be written to by a different process\n        this.jsxLogFilePath = this.logRoot + '/' + this.logFilePrefix + ' (jsx)' + logFileExtension;\n\n        environment.exec('CORE', 'setLogPath', [ this.jsxLogFilePath ]);\n        environment.exec('CORE', 'writeToLog', [ '', '--- Starting new session ---' ]);\n\n        this._isInitialized = true;\n\n        if (this._messagesBeforeInit) {\n            this.pendingLogWrite = this._messagesBeforeInit;\n            this._messagesBeforeInit = '';\n            this._doLogWrite();\n        }\n    }\n\n    _duplicateMessageCount = 0;\n\n    // Allow logging to be enabled/disabled - allows it to be turned off during expensive operations\n    enable() { this._enabled = true; }\n    disable() { this._enabled = false; }\n\n    log(message) {\n        if (!this._enabled) {\n            return;\n        }\n\n        // Optimization: If we see the same message multiple times in succession, we aggregate it\n        if (message === this._previousMessage) {\n            this._duplicateMessageCount++;\n            return;\n        }\n\n        // The environment can override our log mechanism (e.g. in XD, we route logs through the app)\n        const handled = environment.debugLog(message);\n        if (handled || !environment.supportsFileSystem) {\n            return;\n        }\n\n        // Output to log file\n        let logFileMessage = `${new Date().toString()} ${message}\\n`;\n\n        // If we had previously seen the same message multiple times, we just output it once to the logs, with\n        // a number indicating the message count. This avoids flooding the logs with the same message over and over again:\n        if (this._previousMessage && this._duplicateMessageCount > 0) {\n            logFileMessage = `${new Date().toString()} ${this._previousMessage} (${this._duplicateMessageCount})\\n${logFileMessage}`;\n        }\n        this._previousMessage = message;\n        this._duplicateMessageCount = 0;\n\n        // if the object is not initialized, we append the messages and write just after we are done with initialization.\n        if (!this._isInitialized) {\n            this._messagesBeforeInit += logFileMessage;\n            return;\n        }\n\n        if (this.pendingLogWrite) {\n            // We already have a write in progress, but it hasn't written yet\n            // Just stuff our data on the end\n            this.pendingLogWrite += logFileMessage;\n        } else {\n            this.pendingLogWrite = logFileMessage;\n\n            // If writingToLog is true, it means we're in the middle of the appendFile\n            // operation. So, it'll kick off another write afterwards anyway. Otherwise,\n            // we need to kick off a log write ourselves.\n            if (!this.writingToLog) {\n                this._doLogWrite();\n            }\n        }\n    }\n\n    showLogFile(jsxLog) {\n        const command = environment.isWindowsOS() ? 'start' : '/usr/bin/open';\n        window.cep.process.createProcess(command, jsxLog ? this.jsxLogFilePath : this.logFilePath);\n    }\n\n    getLogFolder() {\n        return this.logRoot;\n    }\n\n    progress(key) {\n        let progressUtil = this._progressMap.get(key);\n        if (progressUtil) {\n            return progressUtil;\n        }\n\n        const startTime = Date.now();\n        const log = (msg) => this.log(`${key}: ${msg}: ${Date.now() - startTime}ms`);\n        const end = () => this._progressMap.delete(key);\n        progressUtil = { log, end };\n        this._progressMap.set(key, progressUtil);\n        return progressUtil;\n    }\n}\n\nexport default new DebugLog();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport { getLayerName } from 'app/js/utils/libraryUtils';\nimport { createElementsFromFiles } from 'app/js/utils/addElementUtils';\nimport environment from 'app/js/environment';\n\n// @private\nfunction checkDropType(operation, type) {\n    return !type || operation.type === configuration.getElementType(type);\n}\n\n// @private\nfunction getDropOperation(type, library) {\n    const layerInfo = layerSelectionManager.getLayerInfo();\n    const addOperations = elementConfiguration.getAddOperations(layerInfo, library);\n    return addOperations.find(operation => operation.dropSupport && checkDropType(operation, type));\n}\n\n// Create one element from drop data, even if multiple layers have been selected.\n// (We cannot distinguish if those layers are part of one object or not.)\nexport function createElementFromDocument(dropData, library) {\n    const asset = dropData.assetList[0];\n    const dragAssetId = asset && asset.data;\n    const dropType = asset && asset.type;\n    const operation = getDropOperation(dropType, library);\n\n    if (operation && library) {\n        return operation.apply(library, 'dragToPanel', dragAssetId).then(element => {\n            elementSelectionState.setSelection(element, true);\n            return element;\n        });\n    }\n\n    return Promise.reject('Unsupported drag data');\n}\n\n/**\n * Add elements to the given library when dragging files from either\n * the file system, or from the product (layers, graphics, etc).\n *\n * @param {Object} eventData\n * @param {AdobeLibraryModel} library\n * @returns {Promise} promise that returns the created element/s\n * (which may be in more than 1 library in the case of overflow)\n */\nexport function addElementsFromDropData(eventData, library) {\n    const dropData = eventData.assetList;\n    const dropFiles = eventData.files;\n    // We always give preference to JSON data over files\n    if (dropData) {\n        return createElementFromDocument(eventData, library);\n    }\n    if (dropFiles) {\n        return createElementsFromFiles(dropFiles, library);\n    }\n    return Promise.reject('Unsupported drag data');\n}\n\n/**\n * Utility that returns the names of assets being dragged to the panel.\n * Can be layer/graphic names or file names.\n *\n * @param {Object} dropData\n * @param {LibraryModel} library\n */\nexport function getNamesFromDropData(dropData, library) {\n    const asset = dropData.assetList[0];\n    const operation = getDropOperation(asset.type, library);\n    const getLabel = label => operation && operation.getDropLabel ? operation.getDropLabel(label, library) : label;\n\n    return asset.name\n        ? Promise.resolve([ getLabel(asset.name) ])\n        : getLayerName(library).then(layerName => [ getLabel(layerName) ]);\n}\n\nexport function hasNativeFileTypes(types) {\n    // Microsoft Internet Explorer and Edge will provide a DOMStringList instead of an array, therefore using Array methods like includes or indexOf is not possible.\n    // For DOMStringList, using the contains method yields the same result\n    // https://github.com/leonadler/drag-and-drop-across-browsers#detecting-if-the-user-is-dragging-files-or-text\n    const includes = types.includes ? 'includes' : 'contains';\n\n    return (types[includes]('Files') && !types[includes]('com.adobe.cep.dnd.pasteboardtype'))\n        || types[includes]('application/uxp-entry-type');\n}\n\nexport function isLayerDragData(dragData) {\n    if (!dragData) { return false; }\n    // Some layer drop operations are determined to be invalid by the host.\n    // In these cases, the host provides no `assetList` but it provides a 'feedback' property with a custom message for the user.\n    // The message is displayed on the drag overlay:\n    // https://git.corp.adobe.com/ProjectCentral/cc-libraries-panel/blob/develop/app/js/components/LibraryDragLayer.jsx#L188\n    return !!(dragData.feedback || dragData.assetList && dragData.assetList.length > 0);\n}\n\n/**\n * Returns whether we should set a custom drag image.\n * @returns {boolean}\n */\nexport function useCustomGhostImage() {\n    // Windows environments already provide a ghost image. Other environments don't even support it.\n    return !environment.isWindowsOS() && !environment.disableCustomDragImage;\n}\n\nfunction isTextStyleDragSupportedForProduct() {\n    return Boolean(configuration.currentProduct.config.addSupportForTextStyle);\n}\n\n/**\n * Checks if the product support enable/disable of dragging of text character style (in which case feature-flag is redundant)\n * @returns {boolean}\n */\nexport function shouldShowTextStyleFeatureFlag() {\n    return isTextStyleDragSupportedForProduct();\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from '../config/configuration';\nimport environment from 'app/js/environment';\nimport { getStockEditError } from './adobeStockUtils';\nimport { translate } from 'app/js/managers/translationManager';\n\n// Utilities for edit-original (editing a library element in a different product)\n// Note: You shouldn't import these directly; go via the elementConfiguration\n\n// Private - utility for showing an error message\nfunction showErrorMsg(message, messageParameter, isDefaultMessage) {\n    if (isDefaultMessage && configuration.currentProduct.config.disableDefaultEditError) {\n        return;\n    }\n    const translation = translate(message, messageParameter);\n    environment.showError(translation);\n}\n\n// Private: gets the edit original actions for the element\nfunction getEditActions(element) {\n    const actions = element.getActions('edit');\n\n    // We should _never_ try to edit-original in the current app, or we get into an infinite loop!\n    // So, we filter out the edit actions for the current app.\n    return actions.filter(action => action.appCode && action.appCode !== configuration.currentProduct.config.code);\n}\n\n// Private: invoke an action\nfunction invokeAction(action, defaultError) {\n    if (!action) {\n        showErrorMsg(defaultError, undefined, true);\n        return;\n    }\n\n    // TODO: Currently we show a different error message if you can place elements - this should go away with the\n    // element one-up view, where we no longer do edit on double click\n    if (action.installedVersions.length === 0) {\n        showErrorMsg(environment.canPlaceElements ? 'DL_ERROR_INSTALL_NEEDED' : 'DL_ERROR_INSTALL_NEEDED_NO_PLACE', { app: action.appName });\n        return;\n    }\n\n    if (!action.isCompatibleVersionInstalled) {\n        showErrorMsg(environment.canPlaceElements ? 'DL_ERROR_UPDATE_NEEDED' : 'DL_ERROR_UPDATE_NEEDED_NO_PLACE', { app: action.appName });\n        return;\n    }\n\n    action.invoke(err => {\n        if (err) {\n            if (err.underlyingError === 'APP_LAUNCH_TIMEOUT' || err.underlyingError === 'APP_LAUNCH_FAILED') {\n                showErrorMsg('DL_ERROR_APP_LAUNCH_TAKING_TIME');\n            } else if (err.underlyingError === 'APP_SEND_ACTION_FAILED') {\n                showErrorMsg('DL_ERROR_EDIT_FAILED');\n            } else {\n                showErrorMsg(defaultError, undefined, true);\n            }\n        }\n    });\n}\n\n/**\n * Returns true if the element can be edited in another product.\n *\n * @param {ElementModel} element\n * @returns {boolean} whether edit original is supported for the element\n */\nexport function isEditOriginalEnabled(element) {\n    return getEditActions(element).length > 0;\n}\n\n/**\n * Invoke the \"edit original\" action on an element (i.e. launch another product to edit the element).\n * This will show an error message if it fails.\n *\n * @param {ElementModel} element\n * @param {boolean} [checkForStockErrors=false]\n */\nexport function editOriginal(element, checkForStockErrors = false) {\n    const stockErrorMessage = getStockEditError(element);\n    if (checkForStockErrors && stockErrorMessage) {\n        // It's not editable due to a stock error\n        showErrorMsg(stockErrorMessage);\n        return;\n    }\n\n    const actions = getEditActions(element);\n    invokeAction(actions[0], 'DL_ERROR_INVALID_FILE_FORMAT_' + configuration.currentProduct.config.translationSuffix);\n}\n\n/**\n * Returns true if edit in source is enabled for the given element or library\n *\n * @param {ElementModel|LibraryModel} item\n */\nexport function canEditInSource(item) {\n    const documentId = item.library ? item.library.documentId : item.documentId;\n    if (!documentId || !item.isWritable) {\n        return false;\n    }\n\n    const actions = item.getActions('editInSource');\n    return actions.length > 0;\n}\n\n/**\n * Invoke the \"edit in source\" action on an element or library (i.e. launch the element in the document library it was created from).\n * This will show an error message if it fails.\n *\n * @param {ElementModel|LibraryModel} item\n */\nexport function editInSource(item) {\n    // This is a special case for XD to avoid launching the wrong app version on Windows\n    const actions = environment.getDocumentEditActions\n        && environment.getDocumentEditActions(item)\n        || item.getActions('editInSource');\n    invokeAction(actions[0], 'DL_ERROR_EDIT_IN_SOURCE');\n}\n\nconst documentTypeExtensionMap = {\n    'application/vnd.adobe.xd.cloudproject+dcx': '.xdc'\n};\n\n/**\n * Get the name of the document library that a library was generated from. Right now, this just assumes that the document\n * has the same name as the library, and appends the file extension based on mime type.\n *\n * @param {LibraryModel} document\n * @returns {string} name of the document library.\n */\nexport function getDocumentName(document) {\n    const extension = documentTypeExtensionMap[document.documentType] || '';\n    return `${document.name}${extension}`;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { translate } from 'app/js/managers/translationManager';\nimport configuration from 'app/js/config/configuration';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport * as UnitUtils from 'app/js/utils/unitUtils';\nimport * as TextstyleUtils from 'app/js/utils/textstyleUtils';\nimport * as ColorUtils from 'app/js/utils/colorUtils';\n\nconst colorTypeStrings = {\n    process: 'DL_COLOR_TYPE_PROCESS',\n    spot: 'DL_COLOR_TYPE_SPOT',\n    registration: 'DL_COLOR_TYPE_REGISTRATION',\n    none: 'DL_COLOR_TYPE_NONE',\n};\n\n// Decorator function to get a key of DCX field from the primary representation\nfunction withData(dataKey) {\n    return function(fn) {\n        return function(element) {\n            const representation = element.getPrimaryRepresentation();\n\n            if (!representation) {\n                return;\n            }\n\n            return fn(representation.getValue(dataKey, 'data'));\n        };\n    };\n}\n\n// Decorator function to get the appropriate DCX field for ParagraphStyles & CharacterStyles\nfunction withFontData(fn) {\n    return function(element, type) {\n        const representation = elementConfiguration.findUsableRepresentation(element, `application/vnd.adobe.${type}+json`);\n\n        if (!representation) {\n            return;\n        }\n\n        // Special case for font elements (top-level data is the same as adbeFont inside character and paragraph styles)\n        const data = representation.getValue(type, 'data');\n        return fn(element.type === configuration.FONT_ELEMENT_TYPE ? { adbeFont: data } : data);\n    };\n}\n\n// Decorator function to get the RGB representation of a color element\nfunction withRGBData(fn) {\n    return function(element) {\n        const representation = element.representations.find(representation => representation.getValue('color', 'data').mode === 'RGB');\n\n        if (!representation) {\n            return;\n        }\n\n        return fn(representation.getValue('color', 'data'));\n    };\n}\n\n/**\n * Generates an array of data to be consumed by CCD in the metadata panel\n *\n * @param {ElementModel} element - element for which to generate fields\n * @param {Function[]} fields - fields to generate for metadata panel\n * @returns {Object[]}\n */\nexport function getElementMetadata(element, fields = []) {\n    const type = elementConfiguration.getShortType(element.type);\n\n    return fields.reduce((memo, field) => {\n        const value = field(element, type);\n        if (value) {\n            memo.push(value);\n        }\n\n        return memo;\n    }, []);\n}\n\n/**\n * Get the symbolId of a component element.\n * The symbolId is a piece of metadata stored in the primary representation of XD components published into libraries;\n * it maps to the original document asset that the component is created from. It's useful when looking for re-link\n * candidates, when we want to offer the user an alternative element to link their broken-link asset - we want to\n * find elements that were published from the same source asset as the asset's original linked element.\n * @param {BaseElementModel} element - element for which to get the symbolId.\n * @returns {string}\n */\nexport function getSymbolId(element) {\n    // Only components have symbolIds, don't bother looking through the representation.\n    if (element.type !== configuration.COMPONENT_ELEMENT_TYPE) { return; }\n    const representation = element.getPrimaryRepresentation();\n    const symbolData = representation?.getValue('symbol', 'data') || representation?.getValue('xd', 'data');\n    return symbolData?.symbolId;\n}\n\nconst colorType = withRGBData((data) => {\n    return data && {\n        label: translate('DL_INFO_COLOR_TYPE'),\n        value: translate(colorTypeStrings[data.type || 'none'])\n    };\n});\n\nconst colorProfileName = withRGBData((data = {}) => {\n    return data.profileName && {\n        label: translate('DL_INFO_COLOR_PROFILE'),\n        value: data.profileName\n    };\n});\n\nconst fontFamily = withFontData((data) => {\n    const fontFamily = TextstyleUtils.getFontFamily(data);\n    return fontFamily && {\n        label: translate('DL_INFO_FONT_FAMILY'),\n        value: fontFamily\n    };\n});\n\nconst fontStyle = withFontData((data) => {\n    const fontStyle = TextstyleUtils.getFontStyle(data);\n    return fontStyle && {\n        label: translate('DL_INFO_FONT_STYLE'),\n        value: fontStyle\n    };\n});\n\nconst fontSize = withFontData((data) => {\n    const fontSize = TextstyleUtils.getFontSize(data);\n    return fontSize && {\n        label: translate('DL_INFO_FONT_SIZE'),\n        value: fontSize\n    };\n});\n\nconst fontOpacity = withFontData((fontData) => {\n    const opacityColor = fontData && Array.isArray(fontData.color) && fontData.color.find(color => color.alpha);\n    if (!opacityColor) {\n        return;\n    }\n\n    return {\n        label: translate('DL_INFO_OPACITY'),\n        value: translate('DL_PERCENTAGE', { percent: opacityColor.alpha * 100 })\n    };\n});\n\nconst fontColorType = withFontData((fontData) => {\n    const typeColor = fontData && Array.isArray(fontData.color) && fontData.color.find(color => color.type);\n    if (!typeColor) {\n        return;\n    }\n\n    return {\n        label: translate('DL_INFO_COLOR_TYPE'),\n        value: translate(`DL_INFO_${typeColor.type.toUpperCase()}_COLOR_TYPE`)\n    };\n});\n\nconst fontHexColor = withFontData((fontData) => {\n    const hex = fontData && fontData.color && ColorUtils.colorDataToHexString(fontData.color);\n\n    if (!hex) {\n        return;\n    }\n    return {\n        label: 'HEX',\n        value: hex && hex.toUpperCase()\n    };\n});\n\nconst fontRgbColor = withFontData((fontData) => {\n    const rgb = fontData && fontData.color && ColorUtils.colorDataToRGB(fontData.color);\n    if (!rgb) {\n        return;\n    }\n    return {\n        label: 'RGB',\n        value: `${Math.round(rgb.red)}, ${Math.round(rgb.green)}, ${Math.round(rgb.blue)}`\n    };\n});\n\nconst fontCmykColor = withFontData((fontData) => {\n    const cmyk = fontData && Array.isArray(fontData.color) && fontData.color.find(color => color.mode === 'CMYK');\n    if (!cmyk) {\n        return;\n    }\n    return {\n        label: 'CMYK',\n        value: `${Math.round(cmyk.value.c)}, ${Math.round(cmyk.value.m)}, ${Math.round(cmyk.value.y)}, ${Math.round(cmyk.value.k)}`\n    };\n});\n\nconst fontLabColor = withFontData((fontData) => {\n    const lab = fontData && Array.isArray(fontData.color) && fontData.color.find(color => color.mode === 'Lab');\n    if (!lab) {\n        return;\n    }\n    return {\n        label: 'Lab',\n        value: `${Math.round(lab.value.l)}, ${Math.round(lab.value.a)}, ${Math.round(lab.value.b)}`\n    };\n});\n\nconst fontHsbColor = withFontData((fontData) => {\n    const hsb = fontData && Array.isArray(fontData.color) && fontData.color.find(color => color.mode === 'HSB');\n    if (!hsb) {\n        return;\n    }\n    return {\n        label: 'HSB',\n        value: `${Math.round(hsb.value.h)}, ${Math.round(hsb.value.s)}, ${Math.round(hsb.value.b)}`\n    };\n});\n\nconst fontGrayColor = withFontData((fontData) => {\n    const gray = fontData && Array.isArray(fontData.color) && fontData.color.find(color => color.mode === 'Gray');\n    if (!gray) {\n        return;\n    }\n    return {\n        label: 'Gray',\n        value: `${Math.round(gray.value)}`\n    };\n});\n\nconst fontSpotColor = withFontData((fontData) => {\n    const spotColor = fontData && Array.isArray(fontData.color) && fontData.color.find(color => color.spotColorName);\n    if (!spotColor) {\n        return;\n    }\n\n    return {\n        label: 'SPOT',\n        value: spotColor.spotColorName\n    };\n});\n\nconst alignment = withFontData((data) => {\n    const paragraphAlignment = TextstyleUtils.getParagraphAlignment(data);\n    return paragraphAlignment && {\n        label: translate('DL_INFO_ALIGNMENT'),\n        value: paragraphAlignment\n    };\n});\n\nconst fontDecoration = withFontData((fontData) => {\n    if (!fontData || !fontData.textDecoration || fontData.textDecoration.length === 0) {\n        return;\n    }\n\n    return {\n        label: translate('DL_INFO_TEXT_DECORATION'),\n        value: fontData.textDecoration.map(decoration => translate(`DL_INFO_${decoration.replace('-', '').toUpperCase()}`)).join(', ')\n    };\n});\n\nconst createIndentFunction = (key, translationKey) => withFontData((fontData) => {\n    if (!fontData || !fontData[key]) {\n        return;\n    }\n\n    const { value, type } = fontData[key];\n\n    return {\n        label: translate(translationKey),\n        value: `${value} ${type}`\n    };\n});\n\nconst paragraphLeftIndent = createIndentFunction('adbeLeftIndent', 'DL_INFO_LEFT_INDENT');\nconst paragraphRightIndent = createIndentFunction('adbeRightIndent', 'DL_INFO_RIGHT_INDENT');\nconst paragraphSpaceBefore = createIndentFunction('adbeSpaceBefore', 'DL_INFO_SPACE_BEFORE');\nconst paragraphSpaceAfter = createIndentFunction('adbeSpaceAfter', 'DL_INFO_SPACE_AFTER');\nconst paragraphFirstLineIndent = createIndentFunction('adbeFirstLineIndent', 'DL_INFO_FIRST_LINE_INDENT');\n\nconst videoFramesPerSecond = withData('video')(\n    (data = {}) => data.framerate && {\n        label: translate('DL_INFO_FRAMERATE'),\n        value: translate('DL_FRAMERATE', { framerate: data.framerate })\n    }\n);\n\nconst capsuleFramesPerSecond = withData('graphic')(\n    (data = {}) => data.framerate && {\n        label: translate('DL_INFO_FRAMERATE'),\n        value: translate('DL_FRAMERATE', { framerate: data.framerate })\n    }\n);\n\nconst videoDuration = withData('video')(\n    (data = {}) => data.duration && {\n        label: translate('DL_INFO_DURATION'),\n        value: UnitUtils.msToString(data.duration)\n    }\n);\n\nconst capsuleDuration = withData('graphic')(\n    (data = {}) => data.duration && {\n        label: translate('DL_INFO_DURATION'),\n        value: UnitUtils.msToString(data.duration)\n    }\n);\n\nfunction elementSize(element) {\n    const representation = element.getPrimaryRepresentation() || {};\n    return representation.contentLength && {\n        label: translate('DL_INFO_SIZE'),\n        value: UnitUtils.bytesToString(representation.contentLength, 1)\n    };\n}\n\nfunction width(element) {\n    const representation = element.getPrimaryRepresentation() || {};\n    return representation.width && {\n        label: translate('DL_INFO_WIDTH'),\n        value: translate('DL_LENGTH', { length: representation.width })\n    };\n}\n\nfunction height(element) {\n    const representation = element.getPrimaryRepresentation() || {};\n    return representation.height && {\n        label: translate('DL_INFO_HEIGHT'),\n        value: translate('DL_LENGTH', { length: representation.height })\n    };\n}\n\nfunction dimensions(element) {\n    const representation = element.getPrimaryRepresentation() || {};\n    return representation.height && representation.width && {\n        label: translate('DL_INFO_DIMENSIONS'),\n        value: translate('DL_DIMENSIONS', { width: representation.width, height: representation.height })\n    };\n}\n\nfunction elementType(element) {\n    return {\n        label: translate('DL_INFO_TYPE'),\n        value: translate(elementConfiguration.getTypeName(element.type, true))\n    };\n}\n\nexport const METADATA = {\n    colorType,\n    colorProfileName,\n    fontFamily,\n    fontSize,\n    fontStyle,\n    fontColorType,\n    fontOpacity,\n    fontHexColor,\n    fontRgbColor,\n    fontCmykColor,\n    fontLabColor,\n    fontHsbColor,\n    fontGrayColor,\n    fontSpotColor,\n    fontDecoration,\n    alignment,\n    paragraphLeftIndent,\n    paragraphRightIndent,\n    paragraphFirstLineIndent,\n    paragraphSpaceBefore,\n    paragraphSpaceAfter,\n    videoFramesPerSecond,\n    capsuleFramesPerSecond,\n    videoDuration,\n    capsuleDuration,\n    elementSize,\n    width,\n    height,\n    dimensions,\n    elementType\n};\n","import configuration from 'app/js/config/configuration';\n/**\n * Find more link reference utils on {@link CCLibraries#utils}\n */\nimport { utils as CCLibrariesUtils } from '@cclibraries/cc-libraries-js';\n\n// Start to separate out element utils from the overloaded library manager and libraryUtils, without adding to models.\n/*\nNew Link Schema: https://git.corp.adobe.com/caf/xcm/blob/master/schemas/cc/link/link.schema.json\nExample references with new link schema: (All JSON objects)\n\n    ElementModel.getReference()\n        {\n            'dc:format': 'application/vnd.adobe.library+dcx',\n            'repo:assetId': this.library.assetId,\n            'repo:name': this.library.name, // we cache the library name for use in broken link messaging\n            'stRef:manager': 'Adobe Cloud',\n            'stRef:documentID': this.library.id,\n            'stRef:fromPart': `id=${this.id}`, // fragment id\n            'stRef:fromPartName': this.name,\n            'stRef:fromPartInstanceID': this.instanceId, // the primaryRepresentation.id is more unique than using a modified date\n            'stRef:fromPartDerivedFrom': this.sourceRef // nested reference (to a DocumentElement.getReference())\n                // if legacy sourceRef, will still format as { 'repo:assetId': urn, 'stRef:fromPart': 'id=docAssetId' }\n        }\n\n    DocumentElement.getReference()\n        {\n            'dc:format': environment.documentType,\n            'repo:name': this.library.name,\n            'repo:assetId': environment.cloudAssetId, // asset id of the document, available once it is saved and synced to the cloud\n            'stRef:documentID': this.library.id, // the stable documentId (except upon save, where it changes)\n            'stRef:fromPart': `id=${this.id}`,\n            'stRef:fromPartInstanceID': this.modified, // indicates whether link is out of date. representation ids don't change with every element change so we use modified date\n            'stRef:fromPartName': this.name,\n            'stRef:manager': 'Adobe Cloud',\n            'stRef:fromPartDerivedFrom': this.linkedElement?.getReference() // nested reference to ElementModel.getReference()\n        }\n\n    DocumentGroup.getReference()\n        {\n            'dc:format': environment.documentType,\n            'repo:name': this.library.name,\n            'repo:assetId': environment.cloudAssetId, // asset id of the document, available once it is saved and synced to the cloud\n            'stRef:documentID': this.library.id, // the stable documentId (except upon save, where it changes)\n            'stRef:fromPart': `id=${this.id}`,\n            'stRef:fromPartName': this.name,\n            'stRef:manager': 'Adobe Cloud',\n            // we dont store 'stRef:fromPartInstanceID' since we dont check the modified time of a group and it doesn't have content changes, only metadata.\n        }\n\nExample legacy references:\n\n    ElementModel.getReference() -> still available as `getLegacyReference()`\n        `cloud-asset://${\n            this._library._collection._syncManager.getElementRefDomain() + this._library._collection._syncManager.getElementRefPath()\n        }/${this._library.id};node=${this.id};\n\n    DocumentElement.getReference()\n        `${environment.cloudAssetId}#id=${this.id}`\n\n    DocumentGroup.getReference()\n        `${environment.cloudAssetId}#id=${this.id}`\n*/\n\n// get the id of the document element/group that this element/group was published from\nexport function getSourceId(element) {\n    if (!element.sourceRef) { return; }\n    // sourceRef will always be returned in the new link format\n    return element.sourceRef?.['stRef:fromPart']?.substr(3); // removes the `id=` prefix\n}\n\n// get the instance id. e.g. of the source asset for a published element, used to tell if any content has changed\nexport function getSourceInstanceId(element) {\n    if (!element.sourceRef) { return; }\n    return element.sourceRef?.['stRef:fromPartInstanceID'];\n}\n\n/**\n * Get only the immutable fields of an asset's linked element source ref.\n * Given an asset linked to an element in a published document library,\n * this is will identify the source asset of the element, while ignoring its link state (i.e. whether the source asset has changed).\n * Note that 'repo:assetId' and 'stRef:documentID' are also immutable, but we ignore them because we want to be able to support\n * relinking to libraries published from forked versions of the original document, which we couldn't do if we enforced matches for 'repo:assetId' and 'stRef:documentID'.\n * @param {DocumentElement} asset\n * @returns {Object}\n */\nfunction getStaticCachedLinkedElementSourceRef(asset) {\n    if (!asset.cachedLinkedElementSourceRef) { return; }\n    return {\n        'stRef:fromPart': asset.cachedLinkedElementSourceRef['stRef:fromPart']\n    };\n}\n\n/**\n * Get only the immutable fields of an asset's linked element source ref.\n * Given an element in a published document library,\n * this is will identify the source asset of the element, while ignoring its link state (i.e. whether the source asset has changed).\n * Note that 'repo:assetId' and 'stRef:documentID' are also immutable, but we ignore them because we want to be able to support\n * relinking to libraries published from forked versions of the original document, which we couldn't do if we enforced matches for 'repo:assetId' and 'stRef:documentID'.\n * @param {ElementModel} element\n * @returns {Object}\n */\nfunction getStaticSourceRef(element) {\n    if (!element.sourceRef) { return; }\n    return {\n        'stRef:fromPart': element.sourceRef['stRef:fromPart']\n    };\n}\n\n/**\n * Get the stringified version of the immutable fields of an asset's linked element's sourceRef.\n * @param {DocumentElement} asset\n * @returns {string}\n */\nexport function getStaticCachedLinkedElementSourceRefString(asset) {\n    const staticSourceRef = getStaticCachedLinkedElementSourceRef(asset);\n    if (!staticSourceRef) { return; }\n    return JSON.stringify(staticSourceRef, Object.keys(staticSourceRef).sort());\n}\n\n/**\n * Get the stringified version of the immutable fields of an element's sourceRef.\n * @param {ElementModel} element\n * @returns {string}\n */\nexport function getStaticSourceRefString(element) {\n    const staticSourceRef = getStaticSourceRef(element);\n    if (!staticSourceRef) { return; }\n    return JSON.stringify(staticSourceRef, Object.keys(staticSourceRef).sort());\n}\n\n// Asset A is published to Element A which is consumed by Asset B in another document.\n// In this scenario, given Asset B, return the reference to Asset A nested in the link reference to Element A.\nexport function getLinkedElementSourceRef(asset) {\n    return asset.linkReference?.['stRef:fromPartDerivedFrom'];\n}\n\n/**\n * Get the `dc:format` value from the sourceRef object string\n * @param {string} element\n * @returns {string}\n */\nexport function getSourceRefMimetype(element) {\n    const sourceRefObj = element && element.sourceRef;\n    return sourceRefObj && sourceRefObj['dc:format'];\n}\n\n/**\n * Determine whether element originated from Firefly generative AI via its sourceRef attribute\n * @returns {boolean}\n * @param {ElementModel} element\n */\nexport function isFireflyElement(element) {\n    const sourceRefDcFormatString = getSourceRefMimetype(element);\n    return sourceRefDcFormatString && sourceRefDcFormatString.includes(configuration.FIREFLY_RECIPE_TYPE);\n}\n\n/**\n * Get link reference type for XD DocumentElement.linkReference\n * - Library element new reference: JSON object, not a string. See example ElementModel.getReference() at top of file.\n * - Library element legacy reference: cloud-asset://platform-cs.adobe.io/assets/adobe-libraries/dd23d590-58af-459b-ad00-9902f3c73068;node=e4f0c8b4-8f12-442e-a623-a78afa1f08bc\n * - Legacy cloud document reference: https://cc-api-storage.adobe.io/id/urn:aaid:sc:US:63bbcc56-21a9-42b1-8be8-a8a21c262281\n * - Legacy local document reference (Mac): data:text/plain;path=/Users/lkhong/Desktop/Test Files/localComponents.xd;relativePath=localComponents.xd\n * - Legacy local document reference (Win): data:text/plain;path=C:\\Users\\qfang\\Documents\\NCP-local-0104-1.xd;relativePath=NCP-local-0104-1.xd\n * @param {Object|string} linkReference\n * @returns {string}\n */\nexport function getLinkReferenceType(linkReference) {\n    const XD_ASSET_LINK_REFERENCE_TYPES = configuration.XD_ASSET_LINK_REFERENCE_TYPES;\n\n    if (typeof linkReference === 'string') {\n        if (/^cloud-asset:/.test(linkReference)) { return XD_ASSET_LINK_REFERENCE_TYPES.LEGACY_CCLIBRARIES_ELEMENT; }\n        if (/^https:/.test(linkReference)) { return XD_ASSET_LINK_REFERENCE_TYPES.LEGACY_CLOUD_DOCUMENT_ASSET; }\n        return XD_ASSET_LINK_REFERENCE_TYPES.LEGACY_DOCUMENT_ASSET;\n    }\n\n    if (typeof linkReference === 'object') {\n        return XD_ASSET_LINK_REFERENCE_TYPES.CCLIBRARIES_ELEMENT;\n    }\n}\n\nexport function isLibraryLinkReference(linkReference) {\n    // Ensure we're dealing with an object.\n    linkReference = CCLibrariesUtils.parseLinkReference(linkReference);\n    if (!linkReference) { return; }\n    return linkReference['dc:format'] === configuration.LIBRARY_TYPE;\n}\n\n/**\n * Returns the base library/document portion of a (legacy or modern) cc libraries or document reference (aka an asset's linkReference).\n * @param {string} linkReference e.g. 'cloud-asset://platform-cs.adobe.io/assets/adobe-libraries/library_1234;node=library_1234'\n * @returns {string} e.g. 'cloud-asset://platform-cs.adobe.io/assets/adobe-libraries/library_1234'\n */\nexport function getBaseRef(linkReference) {\n    if (typeof linkReference === 'object') { // modern cc library element reference\n        return linkReference['repo:assetId']; // cachedLinkedLibraryAssetId\n    }\n\n    // For legacy (cloud or local) document, this will just return entire string since there is no ;node and the whole ref refers to the document.\n    // For legacy cc libraries element refs, this will return the cloud-asset part of the reference and take off the ;node part for the element.\n    return linkReference.split(';node')[0];\n}\n\n// can fill in other clearly named utils here rather than directly accessing the opaque property names in a reference\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/**\n * Utils for blobs, files, binary data, and encoding/decoding\n *\n * On the web we will primarily be dealing with binary data in the form of Blobs (a File is a Blob).\n * The Fetch Response object interprets an incoming (Node) Buffer and makes it available clientside as utf-8 text, an ArrayBuffer or a Blob.\n * The CCLibs JSAPI has been updated to return Blobs from any content request such as representation.getContent() and element.getThumbnailContent().\n * Encodings are now handled client side.\n * You can extract the data with various methods including: blob.text() for utf-8, URL.createObjectURL(blob) for an Object URL pointing to the blob in memory,\n * or use the utils below to get a Data URL with embedded base64 data (for smaller images) or just the base64 encoded data itself.\n * More info below on btoa gotchas, and Data URLs vs Object URLs.\n */\n\n/* Synchronous Utils */\n\n// We default to png mimetypes, as we are primarily only using data URLs for thumbnails.\nconst base64ToDataUrl = (base64, mimetype = 'image/png') => `data:${mimetype};base64,${base64}`;\nconst dataURLToBase64 = dataURL => dataURL.substr(dataURL.indexOf(',') + 1);\n\n/**\n * Convert ArrayBuffer to a Base64-encoded ASCII string\n *\n * Base64 is a binary-to-text encoding scheme that represents binary data in an git pushASCII string format.\n * It is commonly used to transmit binary data over channels that are designed to handle text data.\n *\n * @param {ArrayBuffer} arrayBuffer\n * @returns {string} base64\n */\nexport function arrayBufferToBase64(arrayBuffer) {\n    let binaryString = ''; // each character represents 1 byte of binary data\n    const bytes = new Uint8Array(arrayBuffer);\n    const length = bytes.byteLength;\n    // We don't use the spread operator here, as it can cause a StackOverFlow when the\n    // number of arguments being passed to the function exceeds 65536.\n    // Same goes for why we iterate instead of using apply().\n    for (let i = 0; i < length; i++) {\n        binaryString += String.fromCharCode(bytes[ i ]);\n    }\n    return window.btoa(binaryString); // We added 'window' because otherwise you will see an incorrect TS notification in VSCode about btoa being deprecated (this only applies to btoa in Node though).\n}\n\n/**\n * Convert ArrayBuffer to Data URL\n * @param {ArrayBuffer} arrayBuffer\n * @param {string} [mimetype] defaults to 'image/png' (as is primarily used for png thumbnails)\n * @returns {string} Data URL\n */\nexport function arrayBufferToDataURL(arrayBuffer, mimetype) {\n    return base64ToDataUrl(arrayBufferToBase64(arrayBuffer), mimetype);\n}\n\n/**\n * Base 64 conversions for UTF-8 strings.\n *\n * NOTE: btoa() creates a Base64-encoded ASCII string from a 'binary string'\n * (i.e. a string in which each character in the string is treated as a byte of binary data).\n * Compexity arises when you need to encode UTF-16 or UTF-8 strings, which may have characters\n * of more than 1 byte. e.g. Calling btoa(\"€\") would result in a Character Out Of Range exception.\n * To turn arbitrary strings into base64, you must first convert the string to a single byte representation. (And vice versa.)\n * You can learn more about the \"unicode problem\" and possible solutions for handling arbitrary strings here:\n * https://developer.mozilla.org/en-US/docs/Glossary/Base64#solution_2_%E2%80%93_rewriting_atob_and_btoa_using_typedarrays_and_utf-8\n * This solution solves the \"unicode problem\", but relies on the deprecated methods escape/unescape.\n */\n\nexport const base64ToUtf8 = (str) => decodeURIComponent(escape(window.atob(str)));\nexport const utf8ToBase64 = (str) => window.btoa(unescape(encodeURIComponent(str)));\n\n/* Async Utils */\n\n// FileReader is not currently available in UXP\nconst _blobToDataURLIfFileReader = (blob) => {\n    return new Promise((resolve) => {\n        const reader = new FileReader();\n        reader.onload = () => {\n            resolve(reader.result);\n        };\n        reader.readAsDataURL(blob);\n    });\n};\n\n/**\n * Convert a Blob to Base64\n * @param {Blob} blob\n * @returns {Promise<string>} base64\n */\nexport function blobToBase64(blob) {\n    if (FileReader) {\n        return _blobToDataURLIfFileReader(blob).then(dataURLToBase64);\n    }\n    return blob.arrayBuffer().then(arrayBufferToBase64);\n}\n\n/**\n * Convert a Blob to a Data URL\n *\n * Data URLs (previously known as Data URIs) are used for small files that can be embedded directly into the HTML or CSS.\n * As the image is base64 encoded, the Data URL can be given directly to an attribute without use of javascript. e.g. <img src=\"data:image/png;base64,iVBORw0K==\"\">\n * Base64 encoding takes up more space than binary data, so when dealing with larger files, it is better to use Object URLs.\n * Object URLs are more size efficient for larger files, as the Blob stores binary data in memory, accessible by the DOM through a hex string pointer provided by URL.createObjectURL(blob).\n * Object URLs look like: \"blob:http://domain.com/{36-char-long-hex-string}\"\n * If you are using javascript to set `img.src`, then you might as well use an Object URL.\n * Caveat: The URL is only valid while the document is loaded, so if you were to refresh the page and set the same Object URL to an image you create, it just wouldn’t work.\n * More info on common use cases and differentiation: https://yaz.in/p/blobs-files-and-data-uris/\n *\n * @param {Blob} blob\n * @param {string} [mimetype] defaults to 'image/png' (as is primarily used for png thumbnails)\n * @returns {Promise<string>} data URL\n */\nexport function blobToDataURL(blob, mimetype) {\n    if (FileReader) { // faster to use native browser API, but not available in UXP\n        return _blobToDataURLIfFileReader(blob);\n    }\n\n    return blob.arrayBuffer().then(arrayBufferToDataURL, mimetype);\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { translate } from 'app/js/managers/translationManager';\nimport * as LinkUtils from 'app/js/utils/linkUtils';\n\n// Mapping of all known error message codes to array of panel loading specific message (at index 0)\n// and footer specific message (index 1)\nconst ERROR_MESSAGE = {\n    fs:                     [ 'DL_FS_ERROR', 'DL_FS_ERROR' ],\n    general:                [ 'DL_NO_LIBS_ERROR_SYNCING', 'DL_SYNC_ERROR' ],\n    jsx:                    [ 'DL_NO_LIBS_ERROR_INIT', 'DL_INIT_ERROR' ],\n    library:                [ 'DL_NO_LIBS_ERROR_SYNCING', 'DL_SYNC_ERROR_LIBRARY' ],\n    loggedOut:              [ 'DL_NO_LIBS_LOGGED_OUT', 'DL_SYNC_LOGGED_OUT' ],\n    appLoggedOut:           [ 'DL_NO_LIBS_APP_LOGGED_OUT', 'DL_NO_LIBS_APP_LOGGED_OUT' ], // Added for NGL apps\n    network:                [ 'DL_NO_LIBS_ERROR_CONNECTING', 'DL_SYNC_ERROR_CONNECTING' ],\n    noAccess:               [ 'DL_NO_LIBS_NO_ACCESS', 'DL_SYNC_ERROR_NO_ACCESS' ],\n    noService:              [ 'DL_NO_LIBS_SERVICE_NOT_INSTALLED', 'DL_SYNC_SERVICE_NOT_INSTALLED' ],\n    quota:                  [ 'DL_NO_LIBS_ERROR_SYNCING', 'DL_SYNC_ERROR_QUOTA_EXCEEDED' ],\n    sharedQuota:            [ 'DL_NO_LIBS_ERROR_SYNCING', 'DL_SYNC_ERROR_QUOTA_EXCEEDED' ],\n    server:                 [ 'DL_SYNC_ERROR_SERVER', 'DL_SYNC_ERROR_SERVER' ],\n    serviceError:           [ 'DL_NO_LIBS_SERVICE_NOT_RUNNING', 'DL_SYNC_SERVICE_NOT_RUNNING' ],\n    syncDisabled:           [ 'DL_NO_LIBS_SYNC_DISABLED', 'DL_SYNC_DISABLED' ],\n    updateClient:           [ 'DL_NO_LIBS_UPDATE_CLIENT', 'DL_SYNC_UPDATE_CLIENT' ],\n    updateServer:           [ 'DL_NO_LIBS_UPDATE_SERVER', 'DL_SYNC_UPDATE_SERVER' ],\n    excludeHostnameOSX:     [ 'DL_NO_LIBS_NETWORK_PROBLEM', 'DL_SYNC_NETWORK_PROBLEM' ],\n    excludeHostnameWin:     [ 'DL_NO_LIBS_NETWORK_PROBLEM', 'DL_SYNC_NETWORK_PROBLEM' ],\n    excludeHostnameWin10:   [ 'DL_NO_LIBS_NETWORK_PROBLEM', 'DL_SYNC_NETWORK_PROBLEM' ],\n    verifyDnsSettings:      [ 'DL_NO_LIBS_NETWORK_PROBLEM', 'DL_SYNC_NETWORK_PROBLEM' ],\n    verifySocketConnection: [ 'DL_NO_LIBS_SOCKET_BLOCKED', 'DL_SYNC_SOCKET_BLOCKED' ],\n    requestFailed:          [ 'DL_SYNC_REQUEST_ERROR', 'DL_SYNC_REQUEST_ERROR' ]\n};\n\nconst LOADING_INDEX = 0;\nconst FOOTER_INDEX = 1;\n\n// All errors types not considered \"generic\" error types in the NoLibrariesView layout\nconst NON_GENERIC_LOADING_ERRORS = [\n    'noService',\n    'serviceError',\n    'updateClient',\n    'updateServer',\n    'loggedOut',\n    'appLoggedOut',\n    'jsx',\n    'syncDisabled',\n    'excludeHostnameOSX',\n    'excludeHostnameWin',\n    'excludeHostnameWin10',\n    'verifyDnsSettings',\n    'verifySocketConnection'\n];\n\nexport function isGenericLoadingError(status) {\n    return !NON_GENERIC_LOADING_ERRORS.includes(status.errorType);\n}\n\n// Error messages should be displayed using HTMLText because the <br/> tags within them\nexport function getLoadingErrorMessage(status) {\n    return translate(ERROR_MESSAGE[status.errorType] && ERROR_MESSAGE[status.errorType][LOADING_INDEX] || ERROR_MESSAGE.general[LOADING_INDEX]);\n}\n\nexport function getFooterErrorMessage(status) {\n    const stringId = ERROR_MESSAGE[status.errorType] && ERROR_MESSAGE[status.errorType][FOOTER_INDEX] || ERROR_MESSAGE.general[FOOTER_INDEX];\n    if (status.errorType === 'library') {\n        return translate(stringId, { name: status.library.name });\n    }\n    return translate(stringId);\n}\n\nexport function getErrorLink(status) {\n    if (status.state !== 'error') {\n        return null;\n    }\n    const errorLinks = {\n        serviceError:           LinkUtils.getServiceErrorURL(),\n        noService:              LinkUtils.getInstallCCAppURL(),\n        excludeHostnameOSX:     LinkUtils.getServiceErrorURL('excludeHostnameOSX'),\n        excludeHostnameWin:     LinkUtils.getServiceErrorURL('excludeHostnameWin'),\n        excludeHostnameWin10:   LinkUtils.getServiceErrorURL('excludeHostnameWin10'),\n        verifyDnsSettings:      LinkUtils.getServiceErrorURL('verifyDnsSettings'),\n        updateServer:           LinkUtils.getUpdateCCLibrariesURL(),\n        updateClient:           LinkUtils.getUpdateCCLibrariesURL(),\n    };\n    return errorLinks[status.errorType];\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport environment from 'app/js/environment';\nimport uuid from 'uuid/v4';\nimport path from 'path';\n\nconst _fs = () => window.nodeRequire('fs');\n\n// There are some useful static methods on the libraries API that we expose via FileUtils\nimport { utils } from '@cclibraries/cc-libraries-js';\nimport testHookManager from 'app/js/managers/testHookManager';\n\n// Utilities for file operations\n\nexport const LIGHT_MIME_TYPE = 'application/vnd.adobe.ibl.light+zip';\nexport const MATERIAL_MIME_TYPE = 'application/vnd.adobe.mdl.material+zip';\nexport const CAPSULE_AE_MIME_TYPE = 'application/vnd.adobe.ae.graphic+zip';\nexport const CAPSULE_PPRO_MIME_TYPE = 'application/vnd.adobe.ppro.graphic+zip';\n\nconst mimeMap = {};\n// Note: The app property, which matches the host names in the .debug file, should be stable, unlike other strings.\nmimeMap[configuration.IMAGE_ELEMENT_TYPE] = {\n    'image/vnd.adobe.photoshop':             { exts: [ 'psd' ], badge: 'Ps', displayName: 'DL_REPRESENTATION_TYPE_PHOTOSHOP', app: 'PHXS', createdIn: 'DL_APP_PHOTOSHOP' },\n    'application/photoshop':                 { exts: [ 'psd' ], badge: 'Ps', displayName: 'DL_REPRESENTATION_TYPE_PHOTOSHOP', app: 'PHXS', createdIn: 'DL_APP_PHOTOSHOP' },\n    'application/photoshop.large':           { exts: [ 'psb' ], badge: 'Ps', displayName: 'DL_REPRESENTATION_TYPE_PHOTOSHOP', app: 'PHXS', createdIn: 'DL_APP_PHOTOSHOP' },\n    'application/illustrator':               { exts: [ 'ai' ], badge: 'Ai', displayName: 'DL_REPRESENTATION_TYPE_ILLUSTRATOR', app: 'ILST', createdIn: 'DL_APP_ILLUSTRATOR' },\n    'application/vnd.adobe.indesign-idms':   { exts: [ 'idms' ], badge: 'Id', displayName: 'DL_REPRESENTATION_TYPE_INDESIGN', app: 'IDSN', createdIn: 'DL_APP_INDESIGN' },\n    'application/vnd.adobe.muse-collection': { exts: [ 'muse' ], badge: 'Mu', displayName: 'DL_REPRESENTATION_TYPE_MUSE', app: 'MUSE', createdIn: 'DL_APP_MUSE' }, // deprecated app\n    'application/vnd.adobe.charts+zip':      { exts: [ 'zip' ], badge: 'PDF', displayName: 'DL_REPRESENTATION_TYPE_CHART', app: 'ILST', createdIn: 'DL_APP_ILLUSTRATOR' }, // Creative Cloud Charts are a deprecated experimental website and feature in Ai\n    'image/vnd.adobe.shape+svg':             { exts: [ 'shape' ], badge: 'SVG', displayName: 'DL_REPRESENTATION_TYPE_SHAPE' },\n    'application/vnd.adobe.element.agc+json':{ exts: [ 'agc' ], badge: 'Xd', displayName: 'DL_REPRESENTATION_TYPE_XD', app: 'SPRK', createdIn: 'DL_APP_XD' },\n    'application/vnd.adobe.xd.cloudproject+dcx': { exts: [ 'xdc' ], badge: 'Xd', displayName: 'DL_REPRESENTATION_TYPE_XD', app: 'SPRK', createdIn: 'DL_APP_XD' },\n    'document/vnd.adobe.cpsd+dcx':           { exts: [ 'psdc' ], badge: 'Ps', displayName: 'DL_REPRESENTATION_TYPE_PHOTOSHOP', app: 'PHXS', createdIn: 'DL_APP_PHOTOSHOP' },\n    'document/vnd.adobe.illustrator+dcx':    { exts: [ 'aic' ], badge: 'Ai', displayName: 'DL_REPRESENTATION_TYPE_ILLUSTRATOR', app: 'ILST', createdIn: 'DL_APP_ILLUSTRATOR' },\n    // display names for other types are just the extensions in the badges, which don't need to be translated.\n    'application/pdf':                       { exts: [ 'pdf' ], badge: 'PDF' },\n    'image/png':                             { exts: [ 'png' ], badge: 'PNG' },\n    'image/jpeg':                            { exts: [ 'jpeg' ], badge: 'JPEG' },\n    'image/jpg':                             { exts: [ 'jpg' ], badge: 'JPG' },\n    'image/gif':                             { exts: [ 'gif' ], badge: 'GIF' },\n    'image/tiff':                            { exts: [ 'tif', 'tiff' ], badge: 'TIF' },\n    'image/bmp':                             { exts: [ 'bmp' ], badge: 'BMP' },\n    'image/svg+xml':                         { exts: [ 'svg' ], badge: 'SVG' },\n    'image/heic':                            { exts: [ 'heic' ], badge: 'HEIC' },\n    'image/heif':                            { exts: [ 'heif' ], badge: 'HEIF' },\n    'image/x-adobe-dng':                     { exts: [ 'dng' ], badge: 'DNG' },\n    'image/dng':                             { exts: [ 'dng' ], badge: 'DNG' }\n};\n\nmimeMap[configuration.COLOR_ELEMENT_TYPE] = {\n    'application/vnd.adobe.color+json': { exts: [ 'ase' ], displayName: 'DL_REPRESENTATION_TYPE_COLOR' }\n};\n\nmimeMap[configuration.CHANNEL_ELEMENT_TYPE] = {\n    'application/vnd.adobe.channel+json': { exts: [ 'json' ], displayName: 'DL_REPRESENTATION_TYPE_CHANNEL' }\n};\n\nmimeMap[configuration.GRADIENT_ELEMENT_TYPE] = {\n    'application/vnd.adobe.gradient+json': { exts: [ 'grd' ], displayName: 'DL_REPRESENTATION_TYPE_GRADIENT' },\n    'application/vnd.adobe.gradient.noise+json': { exts: [ 'grd' ], displayName: 'DL_REPRESENTATION_TYPE_GRADIENT' },\n    'image/png': { exts: [ 'png' ] }\n};\n\nmimeMap[configuration.IMAGE_GUIDELINE_ELEMENT_TYPE] = {\n    'application/vnd.adobe.imageguideline+json': { exts: [ 'json' ], displayName: 'DL_REPRESENTATION_TYPE_IMAGE_GUIDELINE' }\n};\n\nmimeMap[configuration.COLOR_THEME_ELEMENT_TYPE] = {\n    'application/vnd.adobe.colortheme+json': { exts: [ 'ase' ], displayName: 'DL_REPRESENTATION_TYPE_COLOR' }\n};\n\nmimeMap[configuration.BRUSH_ELEMENT_TYPE] = {\n    'application/vnd.adobe.scatter.brush+zip': { exts: [ 'brush' ], displayName: 'DL_REPRESENTATION_TYPE_BRUSH' },\n    'application/vnd.adobe.ribbon.brush+zip':  { exts: [ 'brush' ], displayName: 'DL_REPRESENTATION_TYPE_BRUSH' },\n    'image/x-adobe-photoshop-brush':           { exts: [ 'abr' ], displayName: 'DL_REPRESENTATION_TYPE_BRUSH' },\n    'application/vnd.adobe.vector.brush+zip':  { exts: [ 'brush' ], displayName: 'DL_REPRESENTATION_TYPE_BRUSH' }\n};\n\nmimeMap[configuration.CAPSULE_ELEMENT_TYPE] = {\n    'application/vnd.adobe.ae.graphic+zip': { exts: [ 'aegraphic' ], displayName: 'DL_REPRESENTATION_TYPE_CAPSULE', app: 'AEFT', createdIn: 'DL_APP_AE' },\n    'application/vnd.adobe.ppro.graphic+zip': { exts: [ 'prgraphic' ], displayName: 'DL_REPRESENTATION_TYPE_CAPSULE', app: 'PPRO', createdIn: 'DL_APP_PPRO' }\n};\n\nmimeMap[configuration.CHARACTER_STYLE_ELEMENT_TYPE] = {\n    'application/vnd.adobe.characterstyle+json':    { exts: [ 'style' ], displayName: 'DL_REPRESENTATION_TYPE_TEXT_STYLE' },\n    'application/vnd.adobe.characterstyle+snippet': { exts: [ 'idms' ], displayName: 'DL_REPRESENTATION_TYPE_TEXT_STYLE' }\n};\n\nmimeMap[configuration.PARAGRAPH_STYLE_ELEMENT_TYPE] = {\n    'application/vnd.adobe.paragraphstyle+json':    { exts: [ 'style' ], displayName: 'DL_REPRESENTATION_TYPE_PARA_STYLE' },\n    'application/vnd.adobe.paragraphstyle+snippet': { exts: [ 'idms' ], displayName: 'DL_REPRESENTATION_TYPE_PARA_STYLE' }\n};\n\nmimeMap[configuration.FONT_ELEMENT_TYPE] = {\n    'application/vnd.adobe.font+json': { exts: [ 'style' ], displayName: 'DL_REPRESENTATION_TYPE_FONT' }\n};\n\nmimeMap[configuration.LAYER_STYLE_ELEMENT_TYPE] = {\n    'application/vnd.adobe.layerstyle': { exts: [ 'asl' ], displayName: 'DL_REPRESENTATION_TYPE_LAYER_STYLE' }\n};\n\nmimeMap[configuration.LOOK_ELEMENT_TYPE] = {\n    'application/vnd.adobe.cube+txt': { exts: [ 'cube' ], displayName: 'DL_REPRESENTATION_TYPE_CUBE_LUT' },\n    'application/vnd.adobe.look+xml': { exts: [ 'look' ], displayName: 'DL_REPRESENTATION_TYPE_LOOK' }\n};\n\nmimeMap[configuration.THREE_D_ELEMENT_TYPE] = {\n    'application/vnd.adobe.obj.3d+zip': { exts: [ 'obj' ], displayName: 'DL_REPRESENTATION_TYPE_MODEL' },\n    'application/vnd.adobe.fbx.3d+zip': { exts: [ 'fbx', ], displayName: 'DL_REPRESENTATION_TYPE_MODEL' },\n    'image/vnd.adobe.photoshop': { exts: [ 'psd' ], displayName: 'DL_REPRESENTATION_TYPE_PHOTOSHOP_3D' },\n    'model/gltf-binary': { exts: [ 'glb' ], displayName: 'DL_REPRESENTATION_TYPE_MODEL' },\n    'model/gltf+json': { exts: [ 'gltf' ], displayName: 'DL_REPRESENTATION_TYPE_MODEL' },\n    'model/vnd.usdz+zip': { exts: [ 'usdz' ], displayName: 'DL_REPRESENTATION_TYPE_MODEL' },\n    '3d/vnd.adobe.dn+dcxucf': { exts: [ 'dn' ], displayName: 'DL_REPRESENTATION_TYPE_MODEL' },\n    'model/vnd.adobe.dn+dcxucf': { exts: [ 'dn' ], displayName: 'DL_REPRESENTATION_TYPE_MODEL' },\n};\n\nmimeMap[configuration.LIGHT_ELEMENT_TYPE] = {\n    'application/vnd.adobe.ibl.light+zip': { exts: [ 'ibl' ], displayName: 'DL_REPRESENTATION_TYPE_LIGHT' },\n    'application/vnd.adobe.exr.light+zip': { exts: [ 'exr' ], displayName: 'DL_REPRESENTATION_TYPE_LIGHT' },\n    'image/vnd.radiance' : { exts: [ 'hdr' ], displayName: 'DL_REPRESENTATION_TYPE_LIGHT' },\n};\n\nmimeMap[configuration.MATERIAL_ELEMENT_TYPE] = {\n    'application/vnd.adobe.mdl.material+zip': { exts: [ 'mdl' ], displayName: 'DL_REPRESENTATION_TYPE_MATERIAL' },\n    'application/vnd.adobe.sbsar+zip': { exts: [ 'sbsar' ], displayName: 'DL_REPRESENTATION_TYPE_MATERIAL' },\n};\n\n// If you need to look up whether a pattern is bitmap or vector, preferably use libraryUtils.isVector()\nmimeMap[configuration.PATTERN_ELEMENT_TYPE] = {\n    'image/vnd.adobe.pattern+png': { exts: [ 'png' ], displayName: 'DL_REPRESENTATION_TYPE_BITMAP_PATTERN' },\n    'image/svg+xml': { exts: [ 'svg' ], displayName: 'DL_REPRESENTATION_TYPE_VECTOR_PATTERN' }\n};\n\nmimeMap[configuration.VIDEO_ELEMENT_TYPE] = {\n    'video/quicktime':  { exts: [ 'mov' ], badge: 'MOV', displayName: 'DL_REPRESENTATION_TYPE_VIDEO' },\n    'video/mp4': { exts: [ 'mp4' ], badge: 'MP4', displayName: 'DL_REPRESENTATION_TYPE_VIDEO' },\n    'video/x-quicktime': { exts: [ 'mov' ], badge: 'MOV', displayName: 'DL_REPRESENTATION_TYPE_VIDEO' },\n    'video/x-ms-wmv': { exts: [ 'wmv' ], badge: 'WMV', displayName: 'DL_REPRESENTATION_TYPE_VIDEO' },\n    'video/x-ms-asf': { exts: [ 'wmv' ], badge: 'WMV', displayName: 'DL_REPRESENTATION_TYPE_VIDEO' },\n    'video/mpeg': { exts: [ 'mpeg', 'mpg' ], badge: 'MPEG', displayName: 'DL_REPRESENTATION_TYPE_VIDEO' },\n};\n\nmimeMap[configuration.AUDIO_ELEMENT_TYPE] = {\n    'audio/aac': { exts: [ 'aac' ], badge: 'AAC', displayName: 'DL_REPRESENTATION_TYPE_AUDIO' },\n    'audio/x-aac': { exts: [ 'aac' ], badge: 'AAC', displayName: 'DL_REPRESENTATION_TYPE_AUDIO' },\n    'audio/aacp': { exts: [ 'aacp' ], badge: 'AAC', displayName: 'DL_REPRESENTATION_TYPE_AUDIO' },\n    'audio/mpeg': { exts: [ 'mp2', 'mpeg', 'mpg' ], badge: 'MP2', displayName: 'DL_REPRESENTATION_TYPE_AUDIO' },\n    'audio/mpeg3': { exts: [ 'mp3', 'mpeg3' ], badge: 'MP3', displayName: 'DL_REPRESENTATION_TYPE_AUDIO' },\n    'audio/m4a': { exts: [ 'm4a' ], badge: 'M4A', displayName: 'DL_REPRESENTATION_TYPE_AUDIO' },\n    'audio/mp3': { exts: [ 'mp3' ], badge: 'MP3', displayName: 'DL_REPRESENTATION_TYPE_AUDIO' },\n    'audio/3gpp': { exts: [ '3gpp' ], badge: '3GPP', displayName: 'DL_REPRESENTATION_TYPE_AUDIO' },\n    'audio/3gpp2': { exts: [ '3gpp2' ], badge: '3GPP', displayName: 'DL_REPRESENTATION_TYPE_AUDIO' },\n    'audio/x-aiff': { exts: [ 'aiff' ], badge: 'AIFF', displayName: 'DL_REPRESENTATION_TYPE_AUDIO' },\n    'audio/aif': { exts: [ 'aif' ], badge: 'AIF', displayName: 'DL_REPRESENTATION_TYPE_AUDIO' },\n    'audio/wav': { exts: [ 'wav' ], badge: 'WAV', displayName: 'DL_REPRESENTATION_TYPE_AUDIO' },\n    'audio/x-wav': { exts: [ 'wav' ], badge: 'WAV', displayName: 'DL_REPRESENTATION_TYPE_AUDIO' },\n};\n\nmimeMap[configuration.TEMPLATE_ELEMENT_TYPE] = {\n    'image/vnd.adobe.photoshop.template':         { exts: [ 'psdt' ], badge: 'Ps', displayName: 'DL_REPRESENTATION_TYPE_TEMPLATE' },\n    'application/vnd.adobe.photoshop.template':   { exts: [ 'psdt' ], badge: 'Ps', displayName: 'DL_REPRESENTATION_TYPE_TEMPLATE' },\n    'application/illustrator.template':           { exts: [ 'ait' ], badge: 'Ai', displayName: 'DL_REPRESENTATION_TYPE_TEMPLATE' },\n    'application/vnd.adobe.illustrator.template': { exts: [ 'ait' ], badge: 'Ai', displayName: 'DL_REPRESENTATION_TYPE_TEMPLATE' },\n    'application/vnd.adobe.indesign.template':    { exts: [ 'indt' ], badge: 'Id', displayName: 'DL_REPRESENTATION_TYPE_TEMPLATE' }\n};\n\nmimeMap[configuration.TEXT_ELEMENT_TYPE] = {\n    'application/vnd.adobe.text+json':          { exts: [ 'text' ], displayName: 'DL_REPRESENTATION_TYPE_TEXT' },\n    'application/illustrator-text':             { exts: [ 'ai' ], badge: 'Ai', displayName: 'DL_REPRESENTATION_TYPE_TEXT' },\n    'application/vnd.adobe.indesign-idms-text': { exts: [ 'idms' ], badge: 'Id', displayName: 'DL_REPRESENTATION_TYPE_TEXT' }\n};\n\nmimeMap[configuration.ANIMATION_ELEMENT_TYPE] = {\n    'application/vnd.adobe.animate-xfl+zip': { exts: [ 'fla', 'xfl' ], badge: 'An', displayName: 'DL_REPRESENTATION_TYPE_ANIMATION', app: 'FLPR', createdIn: 'DL_APP_ANIMATE' },\n    'application/vnd.adobe.animate-sym+zip': { exts: [ 'sym' ], badge: 'SYM', displayName: 'DL_REPRESENTATION_TYPE_ANIMATION', app: 'FLPR', createdIn: 'DL_APP_ANIMATE' }\n};\n\nmimeMap[configuration.COMPONENT_ELEMENT_TYPE] = {\n    'application/vnd.adobe.element.agc+json': { exts: [ 'agc' ], badge: 'Xd', displayName: 'DL_REPRESENTATION_TYPE_XD_COMPONENT', app: 'SPRK', createdIn: 'DL_APP_XD' },\n    'application/vnd.adobe.xdcomponent+dcx': { exts: [ 'agc' ], badge: 'Xd', displayName: 'DL_REPRESENTATION_TYPE_XD_COMPONENT', app: 'SPRK', createdIn: 'DL_APP_XD' },\n    'application/vnd.adobe.nxdcomponent+dcx': { exts: [ 'agc' ], badge: 'Xd', displayName: 'DL_REPRESENTATION_TYPE_XD_COMPONENT', app: 'SPRK', createdIn: 'DL_APP_XD' },\n};\n\n// When adding bulk upload support for new mimetypes, you need to add the\n// mimetype to the array for the element type category that the new mimetype should be added to\nconst bulkUploadMimeTypesByElementType = {};\n\nbulkUploadMimeTypesByElementType[configuration.IMAGE_ELEMENT_TYPE] = [\n    'application/illustrator',\n    'image/png',\n    'image/bmp',\n    'image/vnd.adobe.photoshop',\n    'application/photoshop',\n    'image/svg+xml',\n    'image/gif',\n    'image/jpg',\n    'image/jpeg',\n    'image/tiff',\n    'application/pdf',\n    'image/heic',\n    'image/heif',\n    'image/x-adobe-dng',\n    'image/dng'\n];\n\nbulkUploadMimeTypesByElementType[configuration.TEMPLATE_ELEMENT_TYPE] = [\n    'image/vnd.adobe.photoshop.template',\n    'application/vnd.adobe.photoshop.template',\n    'application/illustrator.template',\n    'application/vnd.adobe.illustrator.template',\n    'application/vnd.adobe.indesign.template'\n];\n\nbulkUploadMimeTypesByElementType[configuration.ANIMATION_ELEMENT_TYPE] = [\n    'application/vnd.adobe.animate-xfl+zip'\n];\n\nbulkUploadMimeTypesByElementType[configuration.VIDEO_ELEMENT_TYPE] = [\n    'video/mp4',\n    'video/quicktime',\n    'video/x-quicktime',\n    'video/x-ms-wmv',\n    'video/x-ms-asf',\n    'video/mpeg'\n];\n\nbulkUploadMimeTypesByElementType[configuration.AUDIO_ELEMENT_TYPE] = [\n    'audio/aac',\n    'audio/x-aac',\n    'audio/aacp',\n    'audio/mpeg',\n    'audio/mpeg3',\n    'audio/m4a',\n    'audio/mp3',\n    'audio/3gpp',\n    'audio/3gpp2',\n    'audio/x-aiff',\n    'audio/aif',\n    'audio/vnd.wave',\n    'audio/wav',\n    'audio/x-wav',\n];\n\nbulkUploadMimeTypesByElementType[configuration.MATERIAL_ELEMENT_TYPE] = [\n    'application/vnd.adobe.mdl.material+zip',\n    'application/vnd.adobe.sbsar+zip'\n];\n\nbulkUploadMimeTypesByElementType[configuration.THREE_D_ELEMENT_TYPE] = [\n    '3d/vnd.adobe.dn+dcxucf',\n    'model/vnd.adobe.dn+dcxucf',\n    'application/vnd.adobe.fbx.3d+zip',\n    'application/vnd.adobe.obj.3d+zip',\n    'model/gltf-binary',\n    'model/gltf+json',\n    'model/vnd.usdz+zip'\n];\n\nbulkUploadMimeTypesByElementType[configuration.LIGHT_ELEMENT_TYPE] = [\n    'application/vnd.adobe.exr.light+zip',\n    'application/vnd.adobe.ibl.light+zip',\n    'image/vnd.radiance'\n];\n\n// @private\nfunction getTypesWithProperty(elementType, propertyFn) {\n    const elementMimeMap = mimeMap[elementType] || {};\n    return Object.keys(elementMimeMap).filter(key => propertyFn(elementMimeMap[key]));\n}\n\n// @private\nfunction doesTypeSatisfyProperty(mimeType, elementType, propertyFn) {\n    // If elementType is provided only search the relevant mime map\n    if (elementType) {\n        const elementMimeMap = mimeMap[elementType];\n        return elementMimeMap && elementMimeMap[mimeType] && propertyFn(elementMimeMap[mimeType]);\n    }\n\n    // otherwise, search across all the mime maps\n    return Object.keys(mimeMap).some(key => mimeMap[key] && mimeMap[key][mimeType] && propertyFn(mimeMap[key][mimeType]));\n}\n\nexport function mimeLookup(elementType, mimeType) {\n    return mimeMap[elementType] && mimeMap[elementType][mimeType];\n}\n\nexport function getUploadElementTypeFromMimeType(mimeType) {\n    return Object.keys(bulkUploadMimeTypesByElementType).find(elementType => {\n        return bulkUploadMimeTypesByElementType[elementType].some(type => type === mimeType);\n    });\n}\n\nexport function getUsableTypes(elementType) {\n    return getTypesWithProperty(elementType, data => data.usable);\n}\n\nexport function isTypeUsable(mimeType, elementType) {\n    return !!doesTypeSatisfyProperty(mimeType, elementType, data => data.usable);\n}\n\nexport function getEditableTypes(elementType) {\n    return getTypesWithProperty(elementType, data => data.editable);\n}\n\nexport function isTypeEditable(mimeType, elementType) {\n    return !!doesTypeSatisfyProperty(mimeType, elementType, data => data.editable);\n}\n\n// @private\nfunction extendTypes(elementType, mimeTypes, isEditable) {\n    const elementMimeMap = mimeMap[elementType];\n    if (!elementMimeMap) {\n        return;\n    }\n\n    mimeTypes.forEach(mimeType => {\n        const entry = elementMimeMap[mimeType];\n        if (!entry) {\n            const fileExtensions = mimeTypeToExtensions(mimeType);\n            if (fileExtensions && fileExtensions.length > 0) {\n                const firstFileExtension = fileExtensions[0];\n                // no displayName (localization string) is added by default. Badge should be used instead in tooltip.\n                elementMimeMap[mimeType] = {\n                    exts: fileExtensions,\n                    badge: firstFileExtension.toUpperCase(),\n                    usable: true,\n                    editable: !!isEditable\n                };\n            }\n        } else {\n            entry.usable = true;\n            entry.editable = !!isEditable;\n        }\n    });\n}\n\n// @private\nfunction extendTypesWithExtensions(elementType, fileExtensions, isEditable) {\n    const elementMimeMap = mimeMap[elementType];\n    if (!elementMimeMap) {\n        return;\n    }\n\n    fileExtensions.forEach(fileExtension => {\n        fileExtension = fileExtension.toLowerCase();\n        const mimeTypes = extensionToMimeTypes(fileExtension); // all mimetypes for an extension\n\n        // e.g. AI has three mimetypes, and it will be added to each\n        mimeTypes.filter(x => x).forEach(mimeType => {\n            const entry = elementMimeMap[mimeType];\n            if (!entry) {\n                // no displayName (localization string) is added by default. Badge should be used instead in tooltip.\n                elementMimeMap[mimeType] = {\n                    exts: [ fileExtension ],\n                    badge: fileExtension.toUpperCase(),\n                    usable: true,\n                    editable: !!isEditable\n                };\n            } else {\n                if (!entry.exts.includes(fileExtension)) {\n                    entry.exts.push(fileExtension);\n                }\n                entry.usable = true;\n                entry.editable = !!isEditable;\n            }\n        });\n    });\n}\n\nexport function extendUsableTypes(elementType, mimeTypes) {\n    extendTypes(elementType, mimeTypes);\n}\n\nexport function extendUsableTypesWithExtensions(elementType, fileExtensions) {\n    extendTypesWithExtensions(elementType, fileExtensions);\n}\n\n// AdobeLibraryConfig.prototype.ELEMENT_ACTION_PRODUCT_MAP controls whether the \"Edit\" option shows up in context menu for the Edit Original workflow\n// However, the type must be allowed as Editable by the app in order for the app to open the file\nexport function extendEditableTypes(elementType, mimeTypes) {\n    extendTypes(elementType, mimeTypes, true);\n}\n\nexport function extendEditableTypesWithExtensions(elementType, fileExtensions) {\n    extendTypesWithExtensions(elementType, fileExtensions, true);\n}\n\nexport function fileNameToExtension(fileName) {\n    const index = fileName.lastIndexOf('.') + 1;\n\n    if (index > 0) {\n        return index !== fileName.length ? fileName.substr(index).toLowerCase().trim() : '';\n    }\n}\n\n// returns list of extensions for a mimetype\nexport function mimeTypeToExtensions(mimeType) {\n    return utils.mimeTypeToExtensions(mimeType);\n}\n\n// returns list of mimetypes for an extension\nexport function extensionToMimeTypes(fileExtension) {\n    return utils.extensionToMimeTypes(fileExtension);\n}\n\nexport function canGenerateRenditionFromMimeType(mimeType) {\n    return utils.canComputeRenditionFromMimeType(mimeType);\n}\n\n/**\n * Check whether a representation's mimetype is a vector mimetype.\n * @param {string} mimeType\n * @returns {boolean}\n */\nexport function isVectorMimeType(mimeType) {\n    // extensions in comments below come from AdobeLibraryMimeTypeUtils\n    const vectorMimeTypes = [\n        // pdf and svg are vector formats, though they can embed bitmap images\n        'image/svg+xml', //svg, svgz\n        'application/pdf', // pdf\n        'application/illustrator', // ai\n        'application/postscript', // ai, eps, ps\n        'image/vnd.adobe.shape+svg', // shape\n        // Creative Cloud Charts (Preview) was introduced in the June 2015 release of Illustrator CC as a technology preview to gather real-world feedback from customers on the new service.\n        // Based on customer feedback, the Illustrator team has decided to pause Charts. The Charts preview won’t be included in Illustrator with the November 2015 release.\n        // After November 30, 2015 when an Illustrator document containing a chart is opened, the Chart will be converted to standard Illustrator vector graphics.\n        'application/vnd.adobe.charts+zip', // zip\n        configuration.AGC_REPRESENTATION_TYPE, // .agc \"Adobe Graphics Composite\" https://wiki.corp.adobe.com/display/agc/AGC+Format\n    ];\n\n    return vectorMimeTypes.includes(mimeType);\n}\n\n// Returns the FIRST mimetype to which an extension matches. e.g. 'ai' maps to 'application/illustrator' but not 'application/illustrator-text' nor 'application/postscript'\nexport function fileNameToMimeType(fileName, elementType) {\n    const elementMimeMap = mimeMap[elementType];\n    if (fileName) {\n        const fileExtension = fileNameToExtension(fileName);\n        if (fileExtension) {\n            let type = Object.keys(elementMimeMap).find(key => elementMimeMap[key].exts.includes(fileExtension));\n            if (!type) {\n                // If it's not in the map, return the first (alphabetically) mimetype for the extension\n                const mimeTypes = extensionToMimeTypes(fileExtension);\n                type = mimeTypes && mimeTypes[0];\n            }\n            return type;\n        }\n    }\n}\n\nexport function curateFileName(fileName) {\n    return fileName && fileName.replace(/(<|>|:|\"|\\/|\\\\|\\||\\?|\\*|[\\x00-\\x1F])|\\(|\\)|\\{|\\}|,|\\s/g, '');\n}\n\nexport function getFileNameFromPath(filePath) {\n    const delimiter = environment.isWindowsOS() ? '\\\\' : '/';\n    const indexOfDelimiter = filePath && filePath.lastIndexOf(delimiter);\n    if (indexOfDelimiter >= 0) {\n        filePath = filePath.substr(indexOfDelimiter + 1);\n    }\n    return filePath && filePath.normalize();\n}\n\nexport function getFileNameWithoutExtension(fileName) {\n    const indexOfPeriod = fileName && fileName.lastIndexOf('.');\n    if (indexOfPeriod >= 0) {\n        fileName = fileName.substr(0, indexOfPeriod);\n    }\n    return fileName && fileName.normalize();\n}\n\nexport function getFileNameExtension(fileName) {\n    const indexOfPeriod = fileName && fileName.lastIndexOf('.');\n    if (indexOfPeriod >= 0) {\n        return fileName.substr(indexOfPeriod + 1);\n    }\n    return '';\n}\n\n/**\n * Checks if the given file extension is a valid library extension\n * @param {string} fileExtension\n * @returns {boolean}\n */\nexport function isLibraryFileExtension(fileExtension) {\n    return configuration.LIBRARY_ALLOWED_EXTENSIONS.includes(fileExtension);\n}\n\nexport function isUploadableType(mimeType) {\n    const uploadableElementTypes = Object.keys(bulkUploadMimeTypesByElementType);\n    return uploadableElementTypes.some(type => !!mimeMap[type][mimeType]);\n}\n\n// Checks to see if the file is of Image element type & a representation exists\nexport function isUploadableFile(fileName) {\n    if (!fileName) {\n        return false;\n    }\n    const fileExtension = fileNameToExtension(fileName);\n    const mimeTypes = extensionToMimeTypes(fileExtension);\n    return mimeTypes.some(isUploadableType);\n}\n\n// given an array of types, return first uploadable type\nexport function getUploadableType(mimeTypeList) {\n    return mimeTypeList.find(isUploadableType);\n}\n\nexport function existsFile(filePath) {\n    const fs = _fs();\n    return fs ? fs.existsSync(filePath) : true;\n}\n\nexport function deleteFile(filePath) {\n    if (environment.deleteFile) {\n        return environment.deleteFile(filePath);\n    }\n\n    // It's ok for delete file to fail, since it means the file was already deleted\n    try {\n        _fs().unlinkSync(filePath);\n    } catch (ignore) {\n        // Ignore\n    }\n}\n\nexport function statFile(filePath) {\n    // It's ok for stat file to fail, since it means the file did not exist\n    try {\n        return _fs().statSync(filePath);\n    } catch (ignore) {\n        // Ignore\n        return {};\n    }\n}\n\nexport function readFile(filePath, encoding, callback) {\n    if (callback) {\n        _fs().readFile(filePath, encoding, callback);\n    } else {\n        return _fs().readFileSync(filePath, encoding);\n    }\n}\n\nexport function writeFile(filePath, data, encoding, callback) {\n    if (callback) {\n        _fs().writeFile(filePath, data, encoding, callback);\n    } else {\n        return _fs().writeFileSync(filePath, data, encoding);\n    }\n}\n\nexport function generateUuid() {\n    return uuid();\n}\n\n/**\n * Generate a unique path on top of the given file path\n * @param {string} filePath for example 'xyz.png'\n * @returns {string} for example 'xyz_4cf70d9a-71d6-403e-82a9-4999b7ca2fce.png'\n */\nexport function getTempPath(filePath) {\n    const parsed = path.parse(filePath);\n    return path.join(parsed.dir, parsed.name) + '_' + generateUuid() + parsed.ext;\n}\n\n// Ensures that the given path exists, and creates any missing dirs if not\nexport function ensurePathExists(filePath, callback) {\n\n    function recursiveEnsurePath(i, dirs, callback) {\n        const pathToTest = dirs.slice(0, i).join('/');\n        const continuation = () => {\n            // Ignore any error in mkdir - it's ok if the directory already exists\n            if (i < dirs.length) {\n                recursiveEnsurePath(i + 1, dirs, callback);\n            } else {\n                callback(null);\n            }\n        };\n\n        const fs = _fs();\n        fs.exists(pathToTest, exists => !exists ? fs.mkdir(pathToTest, continuation) : continuation());\n    }\n\n    const dirs = filePath.split('/'); // Should be path.sep?\n    recursiveEnsurePath(2, dirs, callback); // Start from '/<rootdir>'\n}\n\n/**\n * Opens a HTML file dialog\n * @param { Object } [options] filesTypes = array of extensions, e.g. ['png']\n * @returns { Promise }\n */\nexport function getFilesUsingHTMLFileDialog({ fileTypes, multiple } = {}) {\n    if (testHookManager.getFilesToImport()) {\n        return Promise.resolve(testHookManager.getFilesToImport());\n    }\n    return new Promise((resolve, reject) => {\n        const input = Object.assign(document.createElement('input'), {\n            type: 'file',\n            multiple\n        });\n\n        if (fileTypes) {\n            input.setAttribute('accept', fileTypes.map(type => `.${type}`).join(', '));\n        }\n\n        const callback = () => {\n            const files = input.files;\n\n            // lets not leave any dangling input elements once the callback is complete.\n            input.removeEventListener('change',callback);\n            input.remove();\n            files.length && resolve(files) || reject();\n        };\n\n        // Safari requires that the file input element is part of the DOM prior to triggering liseners.\n        environment.getRootPanelElement().prepend(input);\n        input.addEventListener('change', callback);\n        input.dispatchEvent(new MouseEvent('click'));\n    });\n}\n\n/**\n * Get a list of extensions that can be used for the fileTypes filter in getFilesUsingHTMLFileDialog\n * @param {string} elementType\n * @param {boolean} [restrictToUsableTypes=false] Should only allow usable types to be uploaded\n * @returns {string[]}\n */\nexport function getUploadExtensionsForElementType(elementType, restrictToUsableTypes = false) {\n    let bulkUploadMimeTypes = bulkUploadMimeTypesByElementType[elementType];\n    if (restrictToUsableTypes) {\n        bulkUploadMimeTypes = bulkUploadMimeTypes.filter(mimeType => isTypeUsable(mimeType, elementType));\n    }\n    const mimeTypesMap = mimeMap[elementType];\n    if (!mimeTypesMap || !bulkUploadMimeTypes) { return; }\n\n    let exts = [];\n    bulkUploadMimeTypes.forEach(bulkUploadMimeType => {\n        exts = exts.concat(mimeTypesMap[bulkUploadMimeType].exts);\n    });\n    return exts;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\n\n/**\n * Util class to restore a library's groups and elements as needed to match the given tree.\n */\nexport default class RestoreGroupsTree {\n\n    constructor(groupsTree, library) {\n        const { branches: oldBranches } = groupsTree;\n\n        this.existingItems = {};\n        this.library = library;\n\n        const groupsToDelete = [];\n        const elementsToDelete = [];\n\n        [ ...library.getGroups(), ...library.elements ].forEach(item => {\n            this.existingItems[item.id] = item;\n            // To restore to the given tree, we'll need to delete any existing items not in it.\n            if (!oldBranches[item.id]) {\n                const itemsToDelete = item.isGroup ? groupsToDelete : elementsToDelete;\n                itemsToDelete.push(item);\n            }\n        });\n\n        // Ungrouped always exists.\n        this.existingItems[configuration.UNGROUPED_GROUP.id] = configuration.UNGROUPED_GROUP;\n\n        // Restore the tree, starting from the root.\n        const { root } = groupsTree;\n        this._root = new RestoreGroupsTreeGroupBranch(root, this);\n\n        elementsToDelete.forEach(el => library.removeElement(el, false));\n        groupsToDelete.forEach(group => library.removeGroup(group, false));\n    }\n}\n\nclass RestoreGroupsTreeBranch {\n\n    constructor(oldBranch, tree) {\n        this._oldBranch = oldBranch;\n        this._tree = tree;\n        this._restore();\n    }\n\n    get _existingItems() {\n        return this._tree.existingItems;\n    }\n\n    get _library() {\n        return this._tree.library;\n    }\n\n    get _oldParentGroup() {\n        if (!this._oldBranch.parent) { return; }\n        return this._oldBranch.parent.item;\n    }\n\n    get _restoredParentGroup() {\n        if (!this._oldParentGroup) { return; }\n        return this._existingItems[this._oldParentGroup.id];\n\n    }\n\n    _restore() {\n        // Restore the item and its metadata, if needed.\n        const { item: oldItem } = this._oldBranch;\n        // The root doesn't have an item to be restored, only children.\n        if (oldItem) {\n            this._item = this._existingItems[oldItem.id] || this._restoreItem();\n            this._restoreMetadata();\n            // Save a reference to the item.\n            this._existingItems[oldItem.id] = this._item;\n        }\n        // Restore this branch's children, if any.\n        (this._oldBranch.children || []).forEach(branch => {\n            const RestoreBranch = branch.item.isGroup ? RestoreGroupsTreeGroupBranch : RestoreGroupsTreeElementBranch;\n            new RestoreBranch(branch, this._tree);\n        });\n    }\n\n    _restoreItem() { throw 'You need to implement this in the subclass.'; }\n\n    _restoreMetadata() { throw 'You need to implement this in the subclass.'; }\n}\n\nclass RestoreGroupsTreeGroupBranch extends RestoreGroupsTreeBranch {\n\n    _createGroup(...args) {\n        if (this._restoredParentGroup) {\n            return this._restoredParentGroup.createChild(...args);\n        }\n        return this._library.createGroup(...args);\n    }\n\n    _restoreItem() {\n        const { name: oldName, order: oldOrder } = this._oldBranch;\n        return this._createGroup(oldName, oldOrder);\n    }\n\n    _restoreMetadata() {\n        const { order: oldOrder, name: oldName } = this._oldBranch;\n        // Restore the group's metadata.\n        this._item.name = oldName;\n        this._item.parent = this._restoredParentGroup;\n        this._item.order = oldOrder;\n    }\n}\n\nclass RestoreGroupsTreeElementBranch extends RestoreGroupsTreeBranch {\n\n    _restoreItem() {\n        const { item } = this._oldBranch;\n        this._library.restoreElement(item);\n        return item;\n    }\n\n    _restoreMetadata() {\n        const { order: oldOrder, name: oldName } = this._oldBranch;\n        // Restore the element's metadata.\n        this._item.name = oldName;\n        // If the element used to be ungrouped, we want to make sure it gets ungrouped again.\n        const targetGroup = oldOrder ? this._restoredParentGroup : this._item.getGroups()[0];\n        if (targetGroup) {\n            this._item.setOrderInGroup(targetGroup, oldOrder);\n        }\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport RestoreGroupsTree from 'app/js/utils/restoreGroupsTree';\nimport localizedSorter from 'app/js/utils/localizedSorter';\nimport configuration from 'app/js/config/configuration';\nimport { getElementsByGroup } from './groupUtils';\n\n/**\n * Utility class for generating a tree of groups, subgroups and their elements.\n *  {\n *      root: {\n *\n *          someRootGroupIdA: GroupsTreeGroupBranch,\n *          someRootGroupIdB: GroupsTreeGroupBranch,\n *          ...\n *          '*': { children: GroupsTreeElementBranch[] }\n *      },\n *      branches: {\n *          someRootGroupIdA: GroupsTreeGroupBranch,\n *          someRootGroupIdB: GroupsTreeGroupBranch,\n *          '*': { children: GroupsTreeElementBranch[] }\n *          someSubGroupIdA: GroupsTreeGroupBranch,\n *          someSubSubGroupIdB: GroupsTreeGroupBranch,\n *          someElementId: GroupsTreeElementBranch\n *          ...\n *      }\n *  }\n *\n * `branches` is a map of all branches of the tree in order of addition;\n *  useful if after creating the ordered tree, you need to access a specific branch in constant time.\n *  If `maxDepth` is specified, all subgroups beyond that depth will be added to the closest complying parent.\n *\n *  A GroupsTreeBranch's .order, .name and .parent correspond to the item's value * at the time the tree was constructed *.\n *  As such, a GroupsTree is useful when trying to restore a library's groups to a previous state; simply compute the tree before an operation,\n *  and if you want to \"undo\" the operation, call GroupUtils.restoreGroups(groupsTree) where groupsTree is computed tree before the operation.\n *\n * @param {ElementModel[]} elements\n * @param {GroupModel[]} groups\n * @param {Object} options\n * @property {'order'|'name'} options.sortBy how to order elements and groups.\n * @property {number} options.maxDepth // The maximum depth the tree is allowed to have.\n * @property {boolean} options.includeEmpty // If false, will include only branches (+ ancestors) that contain elements.\n * @property {boolean} options.includeUngrouped // If false, will not include the \"ungrouped elements\" branch and its elements.\n * @returns {GroupsTree}\n */\nexport default class GroupsTree {\n\n    // We'll build the tree from the bottom up, creating the nodes as needed to place groups and elements.\n    _root;\n    // We'll save references to the nodes we place to avoid having to traverse the tree to find them.\n    _branches = {};\n\n    _options = {\n        sortBy: 'order',\n        maxDepth: -1,\n        includeEmpty: true,\n        includeUngrouped: true\n    };\n\n    get root() {\n        return this._root;\n    }\n\n    get branches() {\n        return this._branches;\n    }\n\n    get options() {\n        return this._options;\n    }\n\n    addBranch(branch) {\n        this._branches[branch.item.id] = branch;\n    }\n\n    constructor(elements, groups, options) {\n        this._options = Object.assign(this._options, options);\n\n        const { includeEmpty, includeUngrouped } = this.options;\n\n        // We'll track all group nodes we need to visit.\n        const pendingGroups = new Set(groups);\n\n        this._root = new GroupsTreeGroupBranch(this);\n\n        // Add the ungrouped node at the root.\n        if (includeUngrouped) {\n            this._addNodesToGroupBranch([ configuration.UNGROUPED_GROUP ]);\n        }\n\n        // Place the elements in their groups.\n        getElementsByGroup(elements).forEach((elements, group) => {\n            this._addNodesToGroupBranch(elements, group);\n            // Visited the group node, delete it from the pending set.\n            pendingGroups.delete(group);\n        });\n\n        if (includeEmpty) {\n            // Add any empty groups still pending.\n            pendingGroups.forEach(group => {\n                // Pending groups might be descendants of each other so by adding one, we might have added another.\n                if (!this.branches[group.id]) {\n                    this._addNodesToGroupBranch([ group ], group.parent);\n                }\n            });\n        }\n\n        // Finally sort the GroupsTree\n        this.root.sort();\n    }\n\n    /*\n     * Does the actual tree construction, adding parent groups as needed to get the item and its group in the tree.\n     */\n    _addNodesToGroupBranch(items, group) {\n        if (!group || this.branches[group.id]) {\n            // Adding to the root or to a branch we've already visited (so we have a reference to).\n            const groupBranch = group && this.branches[group.id];\n            const itemsAsBranches = items.map(item => {\n                const GroupsTreeBranch = item.isGroup ? GroupsTreeGroupBranch : GroupsTreeElementBranch;\n                const newBranch = new GroupsTreeBranch(this, item, groupBranch);\n\n                // Save the branch.\n                this.addBranch(newBranch);\n                return newBranch;\n            });\n\n            // Insert branches in their parent.\n            itemsAsBranches[0].parent.insertChildren(itemsAsBranches);\n        } else {\n            // First place the parent in the tree.\n            this._addNodesToGroupBranch([ group ], group.parent);\n            // Then place the child (don't do this at home, children first!).\n            this._addNodesToGroupBranch(items, group);\n        }\n    }\n}\n\nexport class GroupsTreeBranch {\n\n    _item;\n    _order;\n    _name;\n    _parent;\n    _depth;\n    _tree;\n\n    /**\n     * @returns {Group | Element | configuration.UNGROUPED_GROUP}\n     */\n    get item() {\n        return this._item;\n    }\n\n    /**\n     * @returns {GroupsTreeGroupBranch}\n     */\n    get parent() {\n        return this._parent;\n    }\n\n    get order() {\n        return this._order;\n    }\n\n    get name() {\n        return this._name;\n    }\n\n    // The \"depth\" of this branch in the tree where 0 is a group at the root.\n    get depth() {\n        return this._depth;\n    }\n\n    get tree() {\n        return this._tree;\n    }\n\n    constructor(tree, item, parentBranch) {\n        this._tree = tree;\n        this._item = item;\n        this._depth = parentBranch ? parentBranch.originalDepth + 1 : 0;\n        // A GroupsTree is used to restore a library's groups to a previous state.\n        // We save the item's current metadata on the branch itself so that if any of it changes,\n        // we can reference the branch to restore the state.\n        this._parent = parentBranch;\n        this._order = this._getOrder();\n        this._name = this._getName();\n    }\n\n    getSortValue() {\n        const { sortBy } = this.tree.options;\n        // Caller can choose to sort by name or order.\n        return sortBy === 'name' ? this._name : this._order;\n    }\n\n    /*\n    * Get the current name of the item.\n    */\n    _getName() {\n        return this.item && this.item.name;\n    }\n\n    /*\n    * Returns whether a branch 'a' should go before or after a branch 'b'.\n    */\n    compareBranches = (a, b) => {\n        if (a.item.isGroup && b.item.isGroup) {\n            // Both are group branches.\n            return this._compareGroupBranches(a, b);\n        }\n        if (!a.item.isGroup && !b.item.isGroup) {\n            // Both are element branches.\n            return this._compareElementBranches(a, b);\n        }\n\n        // Mixed element/group pair. Elements always go before groups.\n        return a.item.isGroup ? 1 : -1;\n    }\n\n    /*\n    * Returns whether an element branch 'a' should go before or after an element branch 'b'.\n    */\n    _compareElementBranches(a, b) {\n        return localizedSorter.compare(a.getSortValue(), b.getSortValue());\n    }\n\n    /*\n    * Returns whether a group branch 'a' should go before or after a group branch 'b'.\n    */\n    _compareGroupBranches(a, b) {\n        const { branches } = this.tree;\n        if ([ a.item, b.item ].includes(configuration.UNGROUPED_GROUP)) {\n            // Ungrouped always goes last.\n            return a.item === configuration.UNGROUPED_GROUP ? 1 : -1;\n        }\n\n        if (a.item.parent === b.item.parent) {\n            // Sibling groups, sort by their order in their parent or their name as appropriate.\n            return localizedSorter.compare(a.getSortValue(), b.getSortValue());\n        }\n\n        if (a.item.parent === b.item || b.item.parent === a.item) {\n            // Children always go after their parents.\n            return a.item.parent === b.item ? 1 : -1;\n        }\n\n        // We want to determine if 'a' should go before or after 'b' but the only known relationships are sibling-sibling and parent-child.\n        // We'll check up or down the tree as appropriate until we hit a branch pair we can use as proxy.\n        if (b.originalDepth > a.originalDepth) {\n            // 'b' is too deep, use their parent as proxy.\n            return this._compareGroupBranches(a, branches[b.item.parent.id]);\n        } else if (a.originalDepth > b.originalDepth) {\n            // 'b' is too high, use a's parent as proxy.\n            return this._compareGroupBranches(branches[a.item.parent.id], b);\n        }\n\n        // 'b' is as deep as 'a', compare their parents to each other.\n        return this._compareGroupBranches(branches[a.item.parent.id], branches[b.item.parent.id]);\n    }\n}\n\nclass GroupsTreeGroupBranch extends GroupsTreeBranch {\n\n    _originalDepth;\n    _children = [];\n\n    constructor(tree, item, parentBranch) {\n        super(tree, item, parentBranch);\n\n        const { branches, root, options } = tree;\n        const { maxDepth } = options;\n\n        // If we need to enforce depth constraints, we might have to change the tree structure.\n        // However, we should still save a reference to the actual topological relation between the branches for future reference.\n        this._originalDepth = this.depth;\n\n        if (parentBranch && maxDepth >= 0) {\n            // Float subgroups up until they comply with depth constraints.\n            while (this.depth > maxDepth) {\n                // If the group has a parent, it's guaranteed to be in the tree since children come after parents.\n                const parent = parentBranch.item.parent;\n                // Depth constraints might push the group to the root.\n                parentBranch = parent && branches[parent.id];\n                this._depth -= 1;\n            }\n        }\n\n        this._parent = parentBranch || root;\n    }\n\n    get children() {\n        return this._children;\n    }\n\n    set children(children) {\n        this._children = children;\n    }\n\n    // The original depth of this branch before depth constrains were enforced.\n    get originalDepth() {\n        return this._originalDepth;\n    }\n\n    /*\n    * Get the current order of the group in its parent.\n    */\n    _getOrder() {\n        return this.item && this.item.order;\n    }\n\n    /**\n     * Inserts the given branches in this branch's children array preserving sort order.\n     * @param {GroupTreeBranch[]} branches - l\n     */\n    insertChildren(branches) {\n        this.children = this.children.concat(branches);\n    }\n\n    sort() {\n        const children = this._children;\n        if (children) {\n            const length = children.length;\n\n            // Sort the children if we have more than 1 entry\n            if (length > 1) {\n                children.sort(this.compareBranches);\n            }\n\n            // If we have any children, we should attempt to traverse lower into the tree to sort siblings\n            if (length) {\n                let currentBranchIndex = children.length - 1;\n                let branch = children[currentBranchIndex];\n                while (currentBranchIndex >= 0 && branch.children) {\n                    branch.sort();\n                    currentBranchIndex--;\n                    branch = children[currentBranchIndex];\n                }\n            }\n        }\n    }\n}\n\nclass GroupsTreeElementBranch extends GroupsTreeBranch {\n\n    get isUngrouped() {\n        return this.parent.item === configuration.UNGROUPED_GROUP;\n    }\n\n    /*\n    * Get the current order of the element in its group, if any.\n    */\n    _getOrder() {\n        // Ungrouped elements have no order.\n        return !this.isUngrouped && this.item.getOrderInGroup(this.parent.item);\n    }\n\n    getSortValue() {\n        // Ungrouped elements are always sorted by name.\n        return this.isUngrouped ? this._name : super.getSortValue();\n    }\n}\n\n/**\n * Restores a library's groups and elements as needed to match the given tree.\n * @param {GroupTree} groupsTree - The group tree to match.\n * @returns {GroupsTree} the matched group tree.\n */\nexport function restoreGroupsTree(groupsTree) {\n    // Get the library. The ungrouped set is a branch but it doesn't point to the library, so find the first item that does.\n    const { library } = Object.values(groupsTree.branches).find(branch => branch.item.library).item;\n\n    library.beginOperation();\n    new RestoreGroupsTree(groupsTree, library);\n    library.endOperation();\n\n    return groupsTree;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/*\n * Utils for dealing with Library groups.\n */\n\nimport localizedSorter from 'app/js/utils/localizedSorter';\nimport configuration from 'app/js/config/configuration';\nimport { createGroup, addElementsToGroup, reorderGroup } from 'app/js/utils/libraryUtils';\nimport { truncatePath, getOrderStringBetween } from 'app/js/utils/stringUtils';\nimport { translate } from 'app/js/managers/translationManager';\nimport metrics from '../interface/metrics';\nimport viewState from '../state/viewState';\nimport debugLog from 'app/js/utils/debugLog';\nimport GroupsTree, { restoreGroupsTree } from 'app/js/utils/groupsTree';\nimport localSettings from 'app/js/config/localSettings';\nimport { isStockAsset } from './adobeStockUtils';\nimport appState from 'app/js/appState';\n\nconst GROUP_DELIMITER = '/';\nconst GROUP_DELIMITER_REPLACEMENT_REGEX = new RegExp(GROUP_DELIMITER, 'g');\nconst GROUP_DELIMITER_REPLACEMENT = '-';\nconst GROUP_COLLECTOR_REGEX = /(?:^|\\/)([^/]+)/g;\n\n/**\n * Is the desired name a valid group name for this group in this branch?\n * The default valid return value is configuration.RENAME_STATES.VALID\n * @param {string} name\n * @param {GroupModel} group // If this is a rename operation, the existing group (so it doesn't match duplicates on itself)\n * @param {GroupsTreeGroupBranch} parentBranch // The parent branch of the group\n * @returns {string} one of the values laid out in configuration.RENAME_STATES\n */\nexport function validGroupName(name, group, parentBranch) {\n    if (name.match(/[\\\\/]/gm)) {\n        return configuration.RENAME_STATES.SLASH_GROUP;\n    }\n\n    const matchesGroupName = groupName => groupName && name.toLocaleLowerCase() === groupName.toLocaleLowerCase();\n\n    // Cases where we don't need to do a check for duplicates:\n    // 1. If the existing group's name matches the desired name.\n    // 2. If the existing group is not empty.\n    if ((group && (matchesGroupName(group.name) || !isGroupEmpty(group)))) {\n        return configuration.RENAME_STATES.VALID;\n    }\n\n    // Find if any child of the parent branch has the same group name as the desired name.\n    const conflict = !!parentBranch.children.find(group => matchesGroupName(group.item && group.item.name));\n\n    return conflict ? configuration.RENAME_STATES.DUPLICATE_GROUP : configuration.RENAME_STATES.VALID;\n}\n\n/**\n * Check if a group contains elements or other groups.\n * @param {GroupModel} group\n * @returns {boolean}\n */\nexport function isGroupEmpty(group) {\n    if (!group.library) { return true; }\n    const { branches } = getLibraryCustomGroupsTree(group.library);\n    return !branches[group.id]?.children.length;\n}\n\n/**\n * Returns the order that should be used for a new subgroup based on contents of the passed parentGroup\n * @param {GroupModel} parentGroup\n * @returns {string} the order to use for a new subgroup\n */\nfunction _getSubgroupOrder(parentGroup) {\n    const beforeSibling = parentGroup.children.length > 0 && localizedSorter.sortByOrder(parentGroup.children);\n    const elemsInParentGroup = parentGroup.library.elements.filter(elem => elem.getGroups()[0] === parentGroup);\n    const beforeElement = localizedSorter.sortByOrderInGroup(parentGroup, elemsInParentGroup);\n    let beforeOrder;\n    // first, check if there are already sibling subgroups\n    if (beforeSibling && beforeSibling.length) {\n        beforeOrder = beforeSibling[0].order;\n    } else if (beforeElement && beforeElement.length) { // if not, check if there are sibling elements\n        beforeOrder = beforeElement[0].getOrderInGroup(parentGroup);\n    }\n    // finally, if the parent group is empty, we will just use the default order\n    return getOrderStringBetween(undefined, beforeOrder);\n}\n\n/**\n * Creates a new group that is a child of the passed parent group\n * @param {GroupModel} parentGroup represents the parent for the new subgroup\n * @param {string} name optional name for the new group.\n * @returns {GroupModel} the resulting subgroup\n */\nexport function createSubgroup(parentGroup, name) {\n    if (!parentGroup) {\n        return;\n    }\n\n    const order = _getSubgroupOrder(parentGroup);\n    const { branches } = getCustomGroupsTree([], parentGroup.library.getGroups());\n    const newGroup = parentGroup.createChild(name || getDefaultGroupName(branches[parentGroup.id]), order);\n    return newGroup;\n}\n\n/**\n * Gets the subgroup level of a passed group. Root group is level 0, subgroup of the root would be level 1, subgroup of that subgroup would be level 2, and so on.\n * @param {GroupModel} group represents the group you want to get the level of\n */\nexport function getGroupLevel(group) {\n    const getLevel = (group, count = 0) => {\n        const parent = group.parent;\n        return parent ? getLevel(parent, count + 1) : count;\n    };\n\n    return getLevel(group);\n}\n\n/**\n * Returns the asset type of the root group. The root group will only have an asset type for subgroups in Document Assets.\n * @param {GroupModel} group represents the group for which you want to get root parents type\n */\nexport function getRootGroupType(group) {\n    if (!group) {\n        return;\n    }\n    const getRoot = (group) => {\n        const parent = group.parent;\n        return parent ? getRoot(parent) : group;\n    };\n\n    const rootGroup = getRoot(group);\n    const groupType = rootGroup && rootGroup.nameLocalizationKey && rootGroup.nameLocalizationKey.match(/^(?:ASSETS_PANEL_)(.*?)(?:_TITLE)$/);\n    return groupType && groupType[1] && groupType[1].replace('_', ' ').toLowerCase();\n}\n\n/**\n * Recursively expand (or collapse) all descendent branches from the given current branch\n * Can expand non-meaningful (see isMeaningfulGroupBranch) children branches as well\n * @param {GroupModel} group\n * @param {Object} options\n * @property {boolean} options.shouldCollapse\n * @property {boolean} options.expandNonMeaningfulChildren\n */\nexport function toggleCollapseChildrenState(group, options) {\n    const { shouldCollapse, expandNonMeaningfulChildren } = options;\n    const sortBy = viewState.elementSortState;\n    const tree = getLibraryCustomGroupsTree(group.library, { sortBy });\n    const currentBranch = tree.branches[group.id];\n    currentBranch.children.forEach(childBranch => {\n        // Don't need to expand elements, return early\n        if (!childBranch.item.isGroup) {\n            return;\n        }\n        // If we want to expand non-meaningful children recursively, do that now\n        if (expandNonMeaningfulChildren) {\n            if (!isMeaningfulGroupBranch(childBranch)) {\n                viewState.setGroupCollapsed(childBranch.item.id, false);\n            }\n        } else {\n            // Otherwise, its just a normal expand/collapse action\n            viewState.setGroupCollapsed(childBranch.item.id, shouldCollapse);\n        }\n        toggleCollapseChildrenState(childBranch.item, { shouldCollapse, expandNonMeaningfulChildren });\n    });\n}\n\n/**\n * Is this group visible based on having collapsed ancestors?\n * @param {GroupModel} group\n * @returns {GroupModel|undefined}\n */\nexport function getClosestCollapsedAncestor(group) {\n    const ancestors = group.isGroup && getAllAncestors(group).reverse();\n    return ancestors.find(group => viewState.isGroupCollapsed(group.id));\n}\n\n/**\n * Return whether a given branch of a groups tree is \"meaningful\".\n * By meaningful we mean that the group isn't just a shell for other subgroups.\n * In other words, a branch is meaningful if it has elements or if it's completely empty (no elements and no subgroups).\n * A group is also meaningful if it's above the library's max allowed nesting depth.\n * @param {GroupsTreeBranch} groupBranch\n * @returns {boolean}\n */\nexport function isMeaningfulGroupBranch(groupBranch) {\n    const hasElements = !!groupBranch.children.find(child => !child.item.isGroup);\n    const hasSubgroups = groupBranch.item.children && groupBranch.item.children.length;\n    const maxDepth = groupBranch.item.library && groupBranch.item.library.pathViewMaxDepth;\n    const isTopLevel = maxDepth && groupBranch.depth < maxDepth;\n    return hasElements || !hasSubgroups || !!isTopLevel;\n}\n\n/**\n * Generates a tree of groups, subgroups and their elements.\n * If `maxDepth` is specified, all subgroups beyond that depth will be added to the closest complying parent.\n * Computing the tree is expensive, so if you find yourself calling `getCustomGroupsTree(library.elements, library.getGroups()),\n * consider calling `getLibraryCustomGroupsTree(library)` instead - it outputs the same tree but it will use a cached value if available.\n * @param {ElementModel[]} elements\n * @param {GroupModel[]} groups\n * @param {Object} options\n * @property {'order'|'name'} options.sortBy how to order elements and groups.\n * @property {number} options.maxDepth // The maximum depth the tree is allowed to have.\n * @property {boolean} options.includeEmpty // If false, will include only branches (+ ancestors) that contain elements.\n * @property {boolean} options.includeUngrouped // If false, will not include the \"ungrouped elements\" branch and its elements.\n * @returns {GroupsTree}\n */\nexport function getCustomGroupsTree(elements, groups, options) {\n    return new GroupsTree(elements, groups, options);\n}\n\nconst groupsTreeCache = new Map();\n\n/**\n * For a given library, generates a tree of its groups and elements and caches the value.\n * The cache is tied to the library's modified date, so that if the library changes between calls, you don't get the stale tree;\n * the cache is also dependent on the tree configuration options, so that if you request the tree sorted by name for a library,\n * you get the expected result if you then request the tree sorted by order for the same (unchanged) library.\n * Currently, cache entries get discarded after 5 minutes of disuse.\n * @param {Library[]} library\n * @param {Object} options\n * @property {'order'|'name'} options.sortBy how to order elements and groups.\n * @property {number} options.maxDepth // The maximum depth the tree is allowed to have.\n * @property {boolean} options.includeEmpty // If false, will include only branches (+ ancestors) that contain elements.\n * @property {boolean} options.includeUngrouped // If false, will not include the \"ungrouped elements\" branch and its elements.\n * @returns {GroupsTree}\n */\nexport function getLibraryCustomGroupsTree(library, options = {}) {\n    if (!library) { return; }\n    // Sort the options alphabetically so that the order they're passed in doesn't prevent a cache hit.\n    options = Object.keys(options).sort().reduce((acc, key) => {\n        acc[key] = options[key];\n        return acc;\n    }, {});\n\n    const userId = appState.libraryManager.userId;\n    const cacheKey = `${userId}${library.id}${JSON.stringify(options)}`;\n    const keepaliveTimeout = setTimeout(() => groupsTreeCache.delete(cacheKey), configuration.GROUPS_TREE_CACHE_KEEPALIVE_TIME);\n    const cacheEntry = groupsTreeCache.get(cacheKey);\n    // XD Document Assets don't have a modified date but we do track local changes.\n    const modified = library.modified || library.changeCount;\n    const elementCount = library.elementCount;\n\n    if (cacheEntry && !localSettings.getDebugValue('disableGroupsTreeCache')) {\n        clearTimeout(cacheEntry.timeout);\n        if (cacheEntry.modified === modified && cacheEntry.elementCount === elementCount) {\n            // Extend keepalive and return cached value.\n            cacheEntry.timeout = keepaliveTimeout;\n            return cacheEntry.value;\n        }\n    }\n\n    const value = getCustomGroupsTree(library.elements, library.getGroups(), options);\n\n    // We don't want to cache this value if a sync is in-progress\n    if (!localSettings.getDebugValue('disableGroupsTreeCache') && library.areElementsLoaded && !library.syncState) {\n        groupsTreeCache.set(cacheKey, { value, modified, timeout: keepaliveTimeout, elementCount });\n    }\n\n    return value;\n}\n\n/**\n * Given a passed group, return the group's respective descendant groups as an Array\n * Optional parameter to include the group itself in the list, which is default false\n * This is lightweight but does not guarantee they groups will be in order. If you\n * need groups in view order use viewState.groupsInViewOrder or GroupUtils.getLibraryCustomGroupsTree\n * @param {GroupModel} group\n * @param {boolean} [includeSelf] should the passed in group be included in list, default false\n */\nexport function getAllDescendantGroups(group, includeSelf = false) {\n    const descendantChildren = includeSelf ? [ group ] : [];\n    const addToDescendants = (currGroup) => {\n        if (currGroup && currGroup.children) {\n            descendantChildren.push(...currGroup.children);\n            currGroup.children.forEach(childGroup => addToDescendants(childGroup));\n        }\n    };\n    addToDescendants(group);\n    return descendantChildren;\n}\n\n/**\n * Given a passed group, return the group's respective elements as an Array\n * @param {GroupModel} group\n */\nexport function getAllDescendantElements(group) {\n    if (!group.children) { return []; }\n    // get the 'live' tree, rather than the cached version here, because we can be mid-operation so the cache could return a stale library\n    const { branches } = getCustomGroupsTree(group.library.elements, group.library.getGroups());\n    const groupBranch = branches[group.id];\n    const descendantElements = [];\n    const visitElements = branch => {\n        (branch.children || []).forEach(childBranch => {\n            if (childBranch.item.isGroup) {\n                visitElements(childBranch);\n            } else {\n                descendantElements.push(childBranch.item);\n            }\n        });\n    };\n    visitElements(groupBranch);\n    return descendantElements;\n}\n\n/**\n * Given a group, return all its ancestors.\n * @param {GroupModel} group\n * @param {boolean} [includeSelf] should the passed in group be included in list, default false\n */\nexport function getAllAncestors(group, includeSelf = false) {\n    if (!group.parent) {\n        return includeSelf ? [ group ] : [];\n    }\n    const res = [ ...getAllAncestors(group.parent), group.parent ];\n    if (includeSelf) {\n        res.push(group);\n    }\n    return res;\n}\n\n/**\n * Returns the first element that occurs in the given group (or any children groups) in view order\n * @param {GroupModel} group from which we want the first element\n * @returns {ElementModel} if there is a descendant element anywhere off this group, otherwise undefined\n */\nexport function findFirstElement(group) {\n    if (!group.library) { return; }\n    const sortBy = viewState.elementSortState;\n    const { branches } = getLibraryCustomGroupsTree(group.library, { sortBy });\n\n    const getFirstElement = groupBranch => {\n        if (!groupBranch || !groupBranch.children.length) { return; }\n        const subgroups = [];\n\n        for (const child of groupBranch.children) {\n            if (!child.item.isGroup) {\n                // We found our element.\n                return child.item;\n            }\n            subgroups.push(child);\n        }\n\n        // Look in the subgroups.\n        return subgroups.reduce((_, group, i, arr) => {\n            const firstElement = getFirstElement(group);\n            // Found an element, stop scanning.\n            if (firstElement) { arr.splice(i - 1); }\n            return firstElement;\n        }, undefined);\n    };\n\n    return getFirstElement(branches[group.id]);\n}\n\n/**\n * Returns the last element that occurs in the given group in view order\n * @param {GroupModel} group from which we want the last element\n * @returns {ElementModel} if there is a descendant element anywhere off this group, otherwise undefined\n */\nexport function findLastElement(group) {\n    const sortBy = viewState.elementSortState;\n    const { branches } = getLibraryCustomGroupsTree(group.library, { sortBy });\n    const descenders = [];\n    // first assemble the list of all descendent groups to check in order\n    // a -> b -> c will be [c, b, a]\n    const addChildrenGroups = (groupBranch) => {\n        if (!groupBranch || !groupBranch.children || !groupBranch.children.length) { return; }\n\n        descenders.unshift(groupBranch.item);\n        for (const child of groupBranch.children) {\n            if (child.item.isGroup) {\n                descenders.unshift(child.item);\n                child.children.forEach(nextChild => addChildrenGroups(nextChild));\n            }\n        }\n    };\n    addChildrenGroups(branches[group.id]);\n\n    // we're going to start with the last descendant group and start looking for the lowest element from there\n    for (const currGroup of descenders) {\n        const currChildren = branches[currGroup.id].children;\n        if (currChildren && currChildren.length > 0) {\n            for (let i = currChildren.length - 1; i >= 0; i--) {\n                if (!currChildren[i].item.isGroup) {\n                    return currChildren[i].item;\n                }\n            }\n        }\n    }\n}\n\n/**\n * Get all root groups for a specific library (libraries that do not have a parent group)\n * @param {LibraryModel} library the library we want the root groups from\n */\nexport function getRootGroups(library) {\n    const groups = library.getGroups();\n    return groups.filter(group => group && !group.parent);\n}\n\nfunction _getMinCommonAncestor(branchA, branchB) {\n    if (branchA === branchB.parent || branchB === branchA.parent) {\n        // Grandma is the common ancestor between parent and child.\n        return branchA === branchB.parent ? branchA.parent : branchB.parent;\n    }\n\n    if (branchA.parent === branchB.parent) {\n        // Common ancestor of siblings is their parent (undefined for two root groups).\n        return branchA.parent;\n    }\n\n    if (branchA.depth < branchB.depth) {\n        // A is above B, find common ancestor between A and B's parent.\n        return branchB.parent && _getMinCommonAncestor(branchA, branchB.parent);\n    }\n\n    if (branchA.depth > branchB.depth) {\n        // A is below B, find common ancestor between A's parent and B.\n        return branchA.parent && _getMinCommonAncestor(branchA.parent, branchB);\n    }\n\n    // A and B are cousins, find the common ancestor between their parents.\n    return _getMinCommonAncestor(branchA.parent, branchB.parent);\n}\n\nfunction _getAllDescendantBranches(branch) {\n    if (!branch.children || !branch.children.length) { return []; }\n    const descendants = [];\n    const visitBranch = branch => {\n        if (!branch.children) { return; }\n        branch.children.forEach(childBranch => {\n            descendants.push(childBranch);\n            visitBranch(childBranch);\n        });\n    };\n    visitBranch(branch);\n    return descendants;\n}\n\n/**\n * When given an array of groups or elements, returns the nearest group these have in common, or undefined if the minimum group is the root level.\n * For example if Primary/dark and Primary/light are passed the closest common ancestor is Primary\n * If Primary/ and Secondary/ are selected, the minimum ancestor is undefined\n *\n * @param {GroupModel[]|ElementModel[]} items\n * @returns {GroupModel|undefined}\n */\nexport function minimumCommonAncestor(items) {\n    if (!items.length) { return; }\n    if (items.length === 1) {\n        return items[0].isGroup ? items[0].parent : items[0].getGroups()[0];\n    }\n    // Get the group tree.\n    const { branches } = getLibraryCustomGroupsTree(items[0].library);\n    return items.reduce((common, current) => {\n        if (!common) { return; }\n        // Basically, if “common” is derived/computed (which we know if it’s not in the original list),\n        // check if it’s still valid and if so keep it as the minimum common ancestor, otherwise find a new minimum common ancestor\n        if (!items.includes(common)) {\n            const descendants = _getAllDescendantBranches(branches[common.id]);\n            if (descendants.includes(branches[current.id])) {\n                return common;\n            }\n        }\n        const minimumCommon = _getMinCommonAncestor(branches[common.id], branches[current.id]);\n        return minimumCommon && minimumCommon.item;\n    });\n}\n\n/**\n * Given an array of groups / group shells, creates the groups and parent-child relationships necessary to create a path from the first group to the last.\n *\n * @param {Array<GroupModel|Object>} path\n * @param {LibraryModel} library\n * @returns {GroupModel[]} // The path-compliant groups in order of ancestry (descending).\n */\nexport function ensureGroupPath(path, library) {\n    library.beginOperation();\n\n    const groupPath = [];\n    const _createGroup = (name, index) => {\n        return index === 0 ? createGroup(library, name.trim()) : createSubgroup(groupPath[index - 1], name.trim());\n    };\n    // Create groups as needed.\n    path.forEach((entry, index) => {\n        const group = entry.isGroup ? entry : _createGroup(entry.name, index);\n        if (index === 0) {\n            // Avoid cycles\n            group.parent = undefined;\n        } else if (entry.isGroup) {\n            // Ensure the relationship for existing groups.\n            group.parent = groupPath[index - 1];\n        }\n        groupPath.push(group);\n    });\n\n    library.endOperation();\n    return groupPath;\n}\n\n/**\n * Given a group and a group path, moves all the group's elements into the last group in the path.\n * Creates groups and parent-child relationships as needed to satisfy the path.\n *\n * @param {GroupModel} group\n * @param {Array<GroupModel|Object>} path\n * @param {Object} options\n * @property {boolean} deleteEmpty // Whether to delete groups left empty as a result of the move operation.\n * @property {boolean} moveSubgroups // Whether to move the group's subgroups to the new path as well.\n * @returns {Promise<GroupModel[]>} // The group where the elements were moved, in order of ancestry (descending).\n */\nexport function moveGroupElementsToPath(group, path, options) {\n    options = Object.assign({\n        deleteEmpty: false,\n        moveSubgroups: true\n    }, options);\n\n    if (!group) { return; }\n\n    const { deleteEmpty, moveSubgroups } = options;\n    const { library } = group;\n    const { branches } = getLibraryCustomGroupsTree(library);\n\n    library.beginOperation();\n\n    const oldGroupPath = getAllAncestors(group, true);\n    const newPath = ensureGroupPath(path, library);\n    const newHead = newPath[newPath.length - 1];\n\n    const elementsToMove = [];\n    const groupsToMove = [];\n    const headBranch = branches[group.id];\n\n    headBranch.children.forEach(branch => {\n        const { item } = branch;\n        const itemsToMove = item.isGroup ? groupsToMove : elementsToMove;\n        // Avoid loops by moving only what's not already in the new path.\n        // Don't move subgroups unless configured to do so.\n        const moveItem = !newPath.includes(item) && (!item.isGroup || moveSubgroups);\n        if (moveItem) {\n            itemsToMove.push(item);\n        }\n    });\n\n    if (elementsToMove.length) {\n        metrics.reportEvent('Element Operations', 'Element', 'move', 'element', {\n            event: { value: 'agg', count: elementsToMove.length },\n            content: { category: 'Path Menu' }\n        }, library);\n        metrics.setExtraEventMetrics('updateElement', { subtype: 'add-to-group', content: { category: 'Path Menu' } });\n    }\n\n    // Move the group's elements to the new head.\n    addElementsToGroup(elementsToMove, newHead);\n    // If requested, also move subgroups to the new head.\n    const promises = moveSubgroups ? groupsToMove.map(group => copyOrMoveGroupAndDescendants(group, library, newHead, { isMove: true })) : [ Promise.resolve() ];\n\n    return Promise.all(promises).then(() => {\n        if (deleteEmpty) {\n            // Check whether a group will be rendered empty by the move operation.\n            // Note that we check *will be* rather than *is* empty because we're in the middle of a batch operation,\n            // which in XD document assets means that none of the changes have been committed yet.\n            const willGroupBeEmpty = group => {\n                const groupBranch = branches[group.id];\n                // The group will become empty if all its children are being moved.\n                const movedAllChildren = !groupBranch.children.find(child => ![ ...groupsToMove, ...elementsToMove ].includes(child.item));\n                if (movedAllChildren) {\n                    // We've already performed the moves, so we can reuse the array to also track newly \"empty\" groups.\n                    groupsToMove.push(group);\n                }\n                return movedAllChildren;\n            };\n\n            // Remove all groups in the old path rendered empty by the move operation.\n            oldGroupPath.reverse().forEach(group => {\n                if (!newPath.includes(group) && willGroupBeEmpty(group)) {\n                    group.library.removeGroup(group);\n                }\n            });\n        }\n\n        library.endOperation();\n\n        return newPath;\n    });\n}\n\n/**\n * Given a group and a parent group, will return whether the group is a descendant of the parent group.\n * Returns true if the group is the same as the parent group.\n *\n * @param {GroupModel} group\n * @param {GroupModel} parentGroup\n */\nexport function isGroupDescendantOfParent(group, parentGroup) {\n    if (!group || !parentGroup) {\n        return false;\n    }\n    // this is a for loop so it doesn't crash on circular dependency\n    for (let _ = 0; _ < parentGroup.library.getGroupCount(); _++) {\n        if (group === parentGroup) {\n            return true;\n        }\n        group = group && group.parent;\n        if (!group) {\n            break;\n        }\n    }\n    return false;\n}\n\n/**\n * For each of the groups or elements passed in, checks validity to move to targetGroup,\n * returning true if desired move would be invalid\n *\n * @param {BaseElementModel[]|BaseGroupModel[]} items children items to test validity\n * @param {BaseGroupModel} targetGroup\n * @param {Bool} isReorder\n * @returns {Bool} whether or not the desired target is valid\n */\nexport function areValidDescendants(items, targetGroup, isReorder = false) {\n    if (!items.length || !targetGroup) {\n        return false;\n    }\n\n    const isInvalidChild = (groupsToMove, targetGroup, isReorder) => {\n        const getConstrainedAncestor = group => {\n            for (let g = group; g; g = g.parent) {\n                if (g.disableDraggingFromOutside) {\n                    return g;\n                }\n            }\n        };\n        const targetConstrainedAncestor = getConstrainedAncestor(targetGroup);\n        const res = groupsToMove.some(group => getConstrainedAncestor(group) !== targetConstrainedAncestor);\n\n        // if it's a reorder - we need to do additional checks\n        if (isReorder && !res) {\n            // In an attempt to reorder above/below a root group the targetGroup will be the root group\n            // In which case we need to make sure you're allowed to drag outside of that root group first\n            return !targetGroup.disableDraggingFromOutside;\n        }\n        return !res;\n    };\n    const groupsToMove = items[0].isGroup ? items : [ ...new Set(items.map(element => element.getGroups()[0])) ];\n    if (!groupsToMove.length) {\n        return false;\n    }\n    return isInvalidChild(groupsToMove, targetGroup, isReorder);\n}\n\n/**\n * Utility for copying/moving a group from one library to another (with or without its contents).\n * This ensures that the copied group is ordered at the start of the groups in the target library.\n *\n * @param {Group} group The group to move/copy.\n * @param {Library} targetLibrary The library to move/copy the group into.\n * @param {Group} [targetParentGroup] The group to move/copy the group into.\n * @param {Object} options\n * @property {boolean} [isMove=false] set to true to copy the group instead of moving it.\n * @property {boolean} [includeContents=false] whether to also copy/move the elements in the group\n * @returns {Promise<Group>} the moved/copied group.\n */\nexport function copyOrMoveGroupAndDescendants(group, targetLibrary, targetParentGroup, options) {\n    options = Object.assign({\n        isMove: false,\n        includeContents: true\n    }, options);\n\n    const action = (group, targetLibrary, targetParentGroup, options) => {\n        const { isMove, includeContents } = options;\n\n        // If the group is already in the library, we just need to reparent it.\n        if (isMove && group.library.id === targetLibrary.id) {\n            group.parent = targetParentGroup;\n            return Promise.resolve(group);\n        }\n        // Workaround for move operation by first copying and then deleting the group.\n        // const copyOrMoveGroup = isMove ? group.library.moveGroup : group.library.copyGroup;\n        const copyOrMoveGroup = group.library.copyGroup;\n\n        return copyOrMoveGroup.call(group.library, group, targetLibrary, includeContents).then(newGroup => {\n            newGroup.parent = targetParentGroup;\n\n            if (!group.children.length) { return newGroup; }\n\n            const promises = [];\n            // Copy/Move children as well.\n            group.children.forEach(child => {\n                promises.push(copyOrMoveGroupAndDescendants(child, targetLibrary, newGroup, options));\n            });\n\n            return Promise.all(promises).then(() => newGroup);\n        });\n    };\n\n    targetLibrary.beginOperation();\n\n    return action(group, targetLibrary, targetParentGroup, options).then(newGroup => {\n        // The moved/copied group should be at the top of its new parent.\n        const parentChildren = targetParentGroup ? targetParentGroup.children : getRootGroups(targetLibrary);\n        const siblings = parentChildren.filter(child => child !== newGroup);\n        const firstGroup = localizedSorter.sortByOrder(siblings)[0];\n\n        if (firstGroup && firstGroup !== newGroup) {\n            reorderGroup(newGroup, undefined, firstGroup, { merge: false });\n        }\n\n        return newGroup;\n    }).catch(e => {\n        debugLog.log(e);\n        // Allow caller to handle errors.\n        throw e;\n    }).finally(() => {\n        // Workaround to manually delete the original group and element after copy.\n        if (options.isMove && group.library.id !== targetLibrary.id) {\n            // Deleting original group.\n            group.library.removeGroup(group,true);\n        }\n        targetLibrary.endOperation();\n    });\n}\n\n/**\n * Return whether a source group could be merged into a target group.\n * Two groups can be merged if they share the same name (case insensitive).\n * @param {BaseGroupModel} sourceGroup the group to potentially merge from.\n * @param {BaseGroupModel} targetGroup the group to potentially merge into.\n * @returns {boolean}\n */\nexport function canGroupBeMergedInto(sourceGroup, targetGroup) {\n    // Can't merge into anything other than a group.\n    if (!sourceGroup.isGroup || !targetGroup.isGroup) { return false; }\n    // Can't merge a group into itself.\n    if (sourceGroup === targetGroup) { return false; }\n    // Can't merge from or into the ungrouped set.\n    if ([ targetGroup, sourceGroup ].includes(configuration.UNGROUPED_GROUP)) {\n        return false;\n    }\n    // Can't merge a group into its descendant.\n    if (isGroupDescendantOfParent(targetGroup, sourceGroup)) { return false; }\n    return sourceGroup.name.toLocaleLowerCase() === targetGroup.name.toLocaleLowerCase();\n}\n\n/**\n * For a given sourceGroup return all groups at the targetBranch it could be merged into, in order of preference.\n * Current preference is:\n * - Merging into targetBranch's group should take precedence over merging into one of its children.\n * @param {BaseGroupModel} sourceGroup\n * @param {GroupsTreeBranch} targetBranch\n * @returns {BaseGroupModel[]} return the groups sourceGroup could merge into at targetGroup, if any.\n */\nexport function getMergeableGroupsInBranch(sourceGroup, targetBranch) {\n    if (!sourceGroup || !targetBranch) { return []; }\n    const children = targetBranch.children.map(branch => branch.item);\n    return [ targetBranch.item, ...children ].filter(g => g && canGroupBeMergedInto(sourceGroup, g));\n}\n\n/**\n * For a given source group and a target group, moves all content from source into target (recursively merging when needed) and deletes the source group.\n * The groups must be in the same library.\n * @param {BaseGroupModel} sourceGroup the group to merge from.\n * @param {BaseGroupModel} targetGroup the group to merge into\n * @returns {BaseGroupModel} return the target group.\n */\nexport function mergeGroups(sourceGroup, targetGroup) {\n    if (sourceGroup.library !== targetGroup.library) {\n        throw new Error('Cannot merge groups from different libraries.');\n    }\n\n    const { library } = sourceGroup;\n    // get the 'live' tree, rather than the cached version here, because we can be mid-operation so the cache could be stale\n    const { branches } = getCustomGroupsTree(library.elements, library.getGroups());\n\n    // Place item in its new group, maintaining its old relative order if possible.\n    const reparentItem = (item, newParent) => {\n        const itemBranch = branches[item.id];\n        const parentBranch = itemBranch.parent;\n        const relativeOrder = parentBranch.children.findIndex(branch => branch.item === item);\n\n        // We will insert the incoming item between the item with its current relative order and the next.\n        const newParentBranch = branches[newParent.id];\n        const newPreviousSibling = newParentBranch.children[relativeOrder];\n        const newNextSibling = newParentBranch.children[relativeOrder + 1];\n        // These are branches so we can read the order the same way for groups and elements.\n        const order = getOrderStringBetween(newPreviousSibling && newPreviousSibling.order, newNextSibling && newNextSibling.order);\n\n        if (item.isGroup) {\n            item.parent = newParent;\n            item.order = order;\n        } else {\n            item.setOrderInGroup(newParent, order);\n        }\n        return item;\n    };\n\n    const _mergeGroups = (sourceGroup, targetGroup) => {\n        const { children } = branches[sourceGroup.id];\n\n        children.forEach(child => {\n            const { item } = child;\n            // Move the item into the right group.\n            reparentItem(item, targetGroup);\n            // Check for a group to merge into at the new location.\n            if (item.isGroup) {\n                const mergeableGroup = getMergeableGroupsInBranch(item, branches[targetGroup.id])[0];\n                if (mergeableGroup) {\n                    _mergeGroups(item, mergeableGroup);\n                }\n            }\n        });\n\n        // Delete source group.\n        library.removeGroup(sourceGroup);\n        return targetGroup;\n    };\n\n    library.beginOperation();\n\n    _mergeGroups(sourceGroup, targetGroup);\n\n    library.endOperation();\n\n    return targetGroup;\n}\n\n/**\n * Restores groups and elements as needed to match the given tree.\n * @param {GroupTree} groupsTree - The group tree to match. See GroupUtils.getLibraryCustomGroupsTree() for more info.\n */\nexport function restoreGroups(groupsTree) {\n    return restoreGroupsTree(groupsTree);\n}\n\n/**\n * Returns the path to the given group, truncated to fit the tooltip width.\n * (i.e. if 'Group A / Group B / Group C / Group D' is too long, render 'Group A / ... / Group C / Group D' and so on).\n * @param {GroupModel} group\n * @returns {string}\n */\nexport function formatGroupNameTooltip(group) {\n    const groups = [ ...getAllAncestors(group), group ];\n    const names = groups.map(group => group.name);\n    return truncatePath(names, { maxWidth: configuration.TOOLTIP_MAX_WIDTH });\n}\n\n/**\n * Given a passed in branch, generate a unique new group name.\n * @param {GroupsTreeGroupBranch} branch\n * @returns {string}\n */\nexport function getDefaultGroupName(branch) {\n    // Note that we use a non-breaking space, which allows us to distinguish the auto-generated suffix from any numbers\n    // that the user deliberately entered in the name (for example, this could be collapsed in the UI in future)\n    const nameFromCounter = counter => `${translate('DL_NEW_GROUP_NAME')}${ counter ? `\\u00A0${counter}` : '' }`;\n\n    const sortedChildren = localizedSorter.sortByName(branch.children);\n    let counter = 0;\n    for (let i = 0; i < sortedChildren.length; i++) {\n        if (sortedChildren[i].name === nameFromCounter(counter)) {\n            counter++;\n        }\n    }\n    return nameFromCounter(counter);\n}\n\n/**\n * Gets the elements in a library as a map by group ID. All groups included will have at least 1 child.\n * @param {ElementModel[]} elements\n * @returns {Map<GroupModel, Array<ElementModel>>} elementGroupMap - Elements mapped by group id\n*/\nexport function getElementsByGroup(elements) {\n    return elements.reduce(\n        (elementGroupMap, element) => {\n            const group = element.getGroups()[0] || configuration.UNGROUPED_GROUP;\n            const elementCollection = elementGroupMap.get(group) || [];\n            elementCollection.push(element);\n            elementGroupMap.set(group, elementCollection);\n            return elementGroupMap;\n        }, new Map());\n}\n\n/**\n * Converts elements and groups that contain the group delimiter character '/' to an actual tree of groups.\n * @param {LibraryModel} library\n */\nexport async function convertDelimitedNamesToGroups(library) {\n    library.beginOperation();\n\n    // Migrate the groups\n    for (const group of library.getGroups()) {\n        if (!group.name || !group.name.includes(GROUP_DELIMITER)) {\n            continue;\n        }\n\n        const basePath = getAllAncestors(group);\n        const path = buildPathFromString(library, basePath, group.name);\n\n        // If the basePath is the same as the path, then the name isn't actually convertible.\n        // In this case, we just fall back onto replaceGroupDelimiters\n        if (basePath.length === path.length) {\n            replaceGroupDelimitersInNode(group);\n            continue;\n        }\n\n        await moveGroupElementsToPath(group, path, { deleteEmpty: true });\n    }\n\n    // Migrate the elements\n    for (const element of [ ...library.elements, ...library.removedElements ]) {\n        if (!canReplaceGroupDelimitersInElement(element)) {\n            continue;\n        }\n\n        const parentGroup = element.getGroups()?.[0];\n        const basePath = parentGroup ? getAllAncestors(parentGroup, true) : [];\n        const path = buildPathFromString(library, basePath, element.name);\n\n        // If the basePath is the same as the path, then the name isn't actually convertable.\n        // In this case, we just fall back onto replaceGroupDelimiters\n        if (basePath.length === path.length) {\n            replaceGroupDelimitersInNode(element);\n            continue;\n        }\n\n        const [ tail ] = path.splice(path.length - 1);\n        const newGroupPath = ensureGroupPath(path, library);\n        const newGroup = newGroupPath[newGroupPath.length - 1];\n\n        element.setOrderInGroup(newGroup, 'a');\n        element.name = tail.name;\n    }\n\n    library.endOperation();\n}\n\n/**\n * Can an element have any group delimiters replaced?\n * @param {ElementModel} element\n * @returns {boolean} true if the passed in element can have present group delimiters replaced\n */\nexport function canReplaceGroupDelimitersInElement(element) {\n    if (!element?.name) {\n        return false;\n    }\n    return element?.name.includes(GROUP_DELIMITER) && !element.disableRename && !element.isLinked && !isStockAsset(element);\n}\n\n/**\n * Converts element and group names that contain the group delimiter '/' to have the more benign '-'\n * @param {LibraryModel} library\n */\nexport function replaceGroupDelimiters(library) {\n    if (!library.isWritable) {\n        return;\n    }\n\n    library.beginOperation();\n\n    const groups = library.getGroups();\n    const elements = library.elements;\n    const removedElements = library.removedElements;\n\n    for (const node of [ ...groups, ...elements, ...removedElements ]) {\n        replaceGroupDelimitersInNode(node);\n    }\n\n    library.endOperation();\n}\n\nconst replaceGroupDelimitersInNode = node => {\n    if (!node.isElement || (node.isElement && canReplaceGroupDelimitersInElement(node))) {\n        node.name = node.name?.replace(GROUP_DELIMITER_REPLACEMENT_REGEX, GROUP_DELIMITER_REPLACEMENT);\n    }\n};\n\n/**\n * Creates an absolute path given a basePath and a parseable string.\n * [ group1, group2 ], \"existing_group/path/segments\" => [ group1, group2, existingGroup, { name: \"path\" }, { name: \"segments\" } ]\n *\n * @param {LibraryModel} library\n * @param {GroupModel[]} basePath\n * @param {string} pathString\n * @returns {(GroupModel|Object)[]}\n */\nfunction buildPathFromString(library, basePath, pathString) {\n    const path = basePath.concat();\n\n    for (let [ , name ] of pathString?.matchAll(GROUP_COLLECTOR_REGEX)) {\n        name = name.trim();\n\n        if (!name) {\n            continue;\n        }\n\n        path.push({ name });\n    }\n\n    return rectifyGroupPathWithExistingTree(library, basePath, path);\n}\n\n/**\n * Takes a new (proposed) path and injects existing groups where possible\n *\n * @param {LibraryModel} library\n * @param {GroupModel[]} basePath\n * @param {(GroupModel|Object)[]} newPath\n * @param {number} maxDepth\n * @returns {(GroupModel|Object)[]}\n */\nexport function rectifyGroupPathWithExistingTree(library, basePath, newPath, maxDepth = undefined) {\n    // For the lookup, add back whatever was removed to enforce the max depth.\n    const matchedGroups = maxDepth ? basePath.slice(0, maxDepth) : [];\n    const namesMatch = (group, entry) => group.name.toLowerCase() === entry.name.trim().toLowerCase();\n    const searchLibrary = (library, entry) => {\n        // Look for a root group in the library matching the entry.\n        return library.getFilteredGroups(undefined, group => !group.parent && namesMatch(group, entry))[0];\n    };\n    const searchParent = (parent, entry) => {\n        if (!parent.isGroup) { return; }\n        // Look for a group in the parent matching the entry.\n        return parent.getFilteredChildren(group => namesMatch(group, entry))[0];\n    };\n    const findMatch = (parent, entry) => {\n        if (parent) { return searchParent(parent, entry); }\n        return searchLibrary(library, entry);\n    };\n    newPath.forEach(entry => {\n        if (!entry.isGroup) {\n            const parent = matchedGroups[matchedGroups.length - 1];\n            entry = findMatch(parent, entry) || entry;\n        }\n        matchedGroups.push(entry);\n    });\n\n    return matchedGroups;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2016 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport {\n    writeFile,\n    generateUuid,\n} from 'app/js/utils/fileUtils';\nimport debugLog from 'app/js/utils/debugLog';\n\n/**\n    Utilities for images\n**/\n\n/**\n * Generates a base64 encoded version from an img tag\n *\n * @param {DOMElement} img The rendered image to be saved\n * @param {Object} imgSize The optional size of the resulting image\n * @param {string} fileType The image type, defaults to PNG\n * @returns {Object} dataURL for image, height and width\n */\nexport function getRenditionFromDOMElement(img, imgSize, fileType) {\n    const {\n        width = img.naturalWidth,\n        height = img.naturalHeight\n    } = imgSize;\n\n    // Create an empty canvas element\n    const canvas = document.createElement('canvas');\n    canvas.width = width;\n    canvas.height = height;\n\n    if (canvas.width === 0 || canvas.height === 0) {\n        return {\n            width: 0,\n            height: 0,\n            dataURL: undefined,\n        };\n    }\n\n    let dataURL;\n\n    try {\n        const ctx = canvas.getContext('2d');\n        // Copy the image contents to the canvas\n        ctx.drawImage(img, 0, 0, width, height);\n        dataURL = canvas.toDataURL('image/' + fileType);\n        dataURL = dataURL.replace(/^data:image\\/(png|jpg|jpeg);base64,/, '');\n    } catch (error) {\n        debugLog.log('Error using Canvas API to download image');\n    }\n\n    return {\n        width: canvas.width,\n        height: canvas.height,\n        dataURL,\n    };\n}\n\n/**\n * Save a thumbnail to disk to serve as a rendition rather then having to re-download\n * the thumbnail over the network.\n *\n * @param {DOMElement} img The rendered image to be saved\n * @param {string} tempPath a path where to store the rendition image\n * @param {Object} imgSize The optional size of the resulting image\n * @param {string} fileType The image type, defaults to PNG\n * @returns {Object} the rendition details\n * @throws {Error} when there is no temp path provided or the thumbnail couldn't be generated\n */\nexport function saveRenditionSync(img, tempPath, imgSize = {}, fileType = 'png') {\n    const {\n        width,\n        height,\n        dataURL,\n    } = getRenditionFromDOMElement(img, imgSize, fileType);\n\n    const path = `${tempPath}/${generateUuid()}.${fileType}`;\n    writeFile(path, dataURL, 'base64');\n\n    return {\n        path,\n        width,\n        height\n    };\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/**\n    Functions to export libraries to files, and import libraries from files.\n**/\n\nimport environment from 'app/js/environment';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport testHookManager from 'app/js/managers/testHookManager';\nimport { translate } from 'app/js/managers/translationManager';\nimport configuration from 'app/js/config/configuration';\n\n/**\n    Private functions\n**/\n\nfunction calcDestinationFile(path, libraryName) {\n    if (environment.getFileForSaving) {\n        return environment.getFileForSaving(`${libraryName}.${configuration.LIBRARY_SNAPSHOT_EXTENSION}`).then(file => {\n            if (!file) { return Promise.reject('No file selected.'); }\n            return file.nativePath;\n        });\n    }\n\n    const promptStr = translate('DL_SELECT_FOLDER');\n    return environment.exec('CORE', 'chooseFileLocation', [ promptStr, encodeURIComponent(path), encodeURIComponent(libraryName) ]).then((result) => {\n        if (result === 'null' || result === '') {\n            return Promise.reject('No file selected.');\n        }\n\n        return decodeURIComponent(result);\n    });\n}\n\nfunction calcSourceFile(path) {\n    if (environment.getFileForOpening) {\n        return environment.getFileForOpening(configuration.LIBRARY_ALLOWED_EXTENSIONS).then(file => {\n            if (!file) { return Promise.reject('No file selected.'); }\n            return file.nativePath;\n        });\n    }\n\n    const promptStr = translate('DL_SELECT_LIBRARY');\n    return environment.exec('CORE', 'chooseFile', [ promptStr, encodeURIComponent(path) ]).then((result) => {\n        if (result === 'null' || result === '') {\n            return Promise.reject('No file selected.');\n        }\n        return decodeURIComponent(result);\n    });\n}\n\n/**\n    Public API\n**/\n\nexport function chooseExportFile(path, libraryName) {\n    if (testHookManager.getFilePath()) {\n        // Allow UI automation to override the system file picker\n        return Promise.resolve(testHookManager.getFilePath());\n    }\n    return calcDestinationFile(path, libraryName);\n}\n\nexport function chooseImportFile(path) {\n    if (testHookManager.getFilePath()) {\n        // Allow UI automation to override the system file picker\n        return Promise.resolve(testHookManager.getFilePath());\n    }\n    return calcSourceFile(path);\n}\n\nexport function importLibrary(sourceFile, callback) {\n    if (!sourceFile) {\n        callback('No file selected');\n        return;\n    }\n\n    return libraryManager.importLibrary(sourceFile, callback);\n}\n\nexport function exportLibrary(library, exportLocation, callback) {\n    if (!exportLocation) {\n        callback('No location selected');\n        return;\n    }\n\n    return libraryManager.exportLibrary(library, exportLocation, callback);\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport Icon from 'app/js/components/Icon';\nimport ProjectGradient from 'app/js/components/ProjectGradient';\nimport configuration from 'app/js/config/configuration';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport environment from 'app/js/environment';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\nimport localizedSorter from 'app/js/utils/localizedSorter';\nimport * as FileUtils from 'app/js/utils/fileUtils';\nimport metrics from 'app/js/interface/metrics';\nimport { translate } from 'app/js/managers/translationManager';\nimport { truncateString, getOrderStringBetween, getMultipleOrderStringsBetween, isValidOrderString } from 'app/js/utils/stringUtils';\nimport librarySizeManager from 'app/js/managers/librarySizeManager';\nimport viewState from 'app/js/state/viewState';\nimport debugLog from 'app/js/utils/debugLog';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport dialogManager from 'app/js/managers/dialogManager';\nimport { PerformanceTimer } from 'app/js/utils/performanceUtils';\nimport appState from 'app/js/appState';\nimport { restoreGroups, copyOrMoveGroupAndDescendants, getAllDescendantElements, getLibraryCustomGroupsTree, getMergeableGroupsInBranch,\n    mergeGroups, getDefaultGroupName, canReplaceGroupDelimitersInElement } from 'app/js/utils/groupUtils';\nimport menuManager from 'app/js/managers/menuManager';\nimport * as ElementReferenceUtils from 'app/js/utils/elementReferenceUtils';\nimport floodgateManager from 'app/js/managers/floodgateManager';\nimport uuid from 'uuid/v4';\nimport { findMatchingLibraries } from 'app/js/utils/searchUtils';\nimport * as GroupUtils from 'app/js/utils/groupUtils';\nimport localSettings from 'app/js/config/localSettings';\nimport { getDebugMenuItems } from 'app/js/menus/flyoutMenu';\nimport operationalMetrics from 'app/js/interface/operationalMetrics';\nimport featureFlags from 'app/js/config/featureFlags';\nimport { isPublishedBrand, isUnpublishedBrand, filteredAllLibraries, isBrandLibrary } from 'app/js/utils/brandUtils';\n\n// General utilities for library-related operations\n\n/**\n * Generates a preview (thumbnails) for the current layer selection on the canvas\n * (calls into ExtendScript for this)\n * @param {string} [dragAssetId]\n * @param {int} [maxWidth]\n * @param {int} [maxHeight]\n */\nexport function generatePreview(dragAssetId = '', maxWidth, maxHeight) {\n    const currentLayerInfo = {\n        name: FileUtils.generateUuid(),\n        maxWidth,\n        maxHeight\n    };\n\n    return environment.execApp('saveAssets', [ currentLayerInfo, true, dragAssetId ]).then(fileData => {\n        if (fileData === 'undefined') {\n            return Promise.reject();\n        }\n        return JSON.parse(fileData);\n    });\n}\n\n/**\n * Utility to check if the given list of files contain any that are greater than the max size (1GB).\n * If so, it'll show an error message, and return false. If the second arg is true, it also takes\n * care of deleting the files\n * @param {Object[]} files\n * @param {boolean} deleteFilesOnError\n */\nexport function checkFileSizes(files, deleteFilesOnError) {\n    let isTooBig = false;\n\n    files.forEach(file => {\n        // It's ugly to do this synchronously, but it simplifies the code\n        const stats = FileUtils.statFile(file.path);\n        if (stats && stats.size > libraryManager.MAX_COMPONENT_SIZE) {\n            isTooBig = true;\n        }\n    });\n\n    if (isTooBig) {\n        if (deleteFilesOnError) {\n            files.forEach(function(file) {\n                FileUtils.deleteFile(file.path);\n            });\n        }\n\n        // Show the error dialog\n        environment.showError(translate('DL_ERROR_FILE_TOO_BIG'));\n        return false;\n    }\n\n    return true;\n}\n\n/**\n * Shorthand for checking file sizes when you only have a single file\n * @param {string} filePath\n * @param {boolean} deleteFileOnError\n */\nexport function checkFileSize(filePath, deleteFileOnError) {\n    return checkFileSizes([ { path: filePath } ], deleteFileOnError);\n}\n\nconst reportBulkUploadError = (errorDescription, isImportError) => {\n    if (isImportError) {\n        metrics.reportError('Library Operations', 'Import Library', errorDescription, undefined, 'invalidData');\n        return;\n    }\n    metrics.reportError('Add Assets', 'Element', errorDescription, undefined, 'batch-upload', { content: { category: 'Bulk Upload' } });\n};\n\nconst reportBulkUploadWarningEvent = (errorDescription) => {\n    metrics.reportEvent('Add Assets', 'Element', 'add', 'element-warning', { 'event': { 'error_type': 'batch-upload', 'error_desc': errorDescription }, content: { category: 'Bulk Upload' } });\n};\n\n// Map from warning key to title, message, and error_desc (for analytics).\nconst WARNING_MAP = {\n    hasUnsupportedExtensions: [ 'UNSUPPORTED_ASSET_TITLE', 'UNSUPPORTED_ASSET_MESSAGE_CONTINUE', 'graphics-only' ],\n    hasOverSizedFiles:        [ 'FILE_SIZE_TITLE', 'FILE_SIZE_MESSAGE_CONTINUE', 'large-file' ],\n    slowUpload:               [ 'LARGE_UPLOAD_TITLE', 'LARGE_UPLOAD_MESSAGE', 'slow-upload' ]\n};\n\n/**\n * Given native file drop data (an object with numbered keys for the files and a length) returns an object with a list of\n * supported files, and optionally a title/messages to display as an error/confirmation.\n *\n * @param {AdobeLibraryModel} library Library to add the files to\n * @param {Object[]} files Array of files to add (from the file data)\n * @returns {Object} Object of the form `{files, library, title, messages}`\n */\nexport function getFileUploadData(library, files) {\n    const warningMap = {};\n    let supportedFiles = [];\n    let supportedFilesSize = 0;\n\n    files.forEach(file => {\n        file.extension = FileUtils.getFileNameExtension(file.name).toLowerCase();\n        const fileIsLibrary = FileUtils.isLibraryFileExtension(file.extension);\n\n        if (!library && !fileIsLibrary) {\n            // only libraries can be imported without selecting a target library\n            return;\n        }\n\n        if (!getNativeDropTypes().includes(file.extension)) {\n            // Unsupported extension\n            warningMap.hasUnsupportedExtensions = true;\n        } else if (file.size > libraryManager.MAX_COMPONENT_SIZE && !fileIsLibrary) {\n            warningMap.hasOverSizedFiles = true;\n        } else {\n            // Supported\n            // File is not supported if file is an element file and the library is not defined\n            supportedFiles.push(file);\n            supportedFilesSize += file.size;\n        }\n    });\n\n    if (supportedFiles.length > configuration.NATIVE_DROP_MAX_FILE_COUNT) {\n        warningMap.exceedsFileCountLimit = true;\n    }\n\n    // Upload may be slow if too many files or too large drop\n    // 10GB is an arbitrary limit for now. Needs thorough performance analysis\n    if (supportedFiles.length > configuration.NATIVE_DROP_FILES_SLOW_PERFORMANCE_THRESHOLD\n        || supportedFilesSize > libraryManager.MAX_COMPONENT_SIZE * 10) {\n        warningMap.slowUpload = true;\n    }\n\n    // Cannot exceed max elements in library -> reject\n    if (library && !librarySizeManager.canAddElements(library, supportedFiles.length)) {\n        reportBulkUploadError('exceeded-library-limit');\n        return {\n            title: translate('DL_DESIGN_LIBRARY_NATIVE_EXCEEDED_LIMIT_TITLE'),\n            messages: [ translate('DL_DESIGN_LIBRARY_NATIVE_EXCEEDED_LIMIT_MESSAGE', { num: libraryManager.MAX_ELEMENTS }) ],\n            files: [],\n            library\n        };\n    }\n\n    const warnings = Object.keys(warningMap);\n    const supportedExtensions = getNativeDropTypes().join(', ');\n    let title, messages;\n    if (warningMap.exceedsFileCountLimit) {\n        reportBulkUploadError('exceeded-max-file-count');\n        title = translate('DL_DESIGN_LIBRARY_NATIVE_EXCEEDED_FILE_COUNT_TITLE');\n        messages = [ translate('DL_DESIGN_LIBRARY_NATIVE_EXCEEDED_FILE_COUNT_MESSAGE', { limit: configuration.NATIVE_DROP_MAX_FILE_COUNT }) ];\n        supportedFiles = [];\n    } else if (supportedFiles.length === 0) {\n        // There are no supported files - show an error\n        if (warningMap.hasUnsupportedExtensions) {\n            reportBulkUploadError('unsupported-asset');\n            title = translate('DL_DESIGN_LIBRARY_NATIVE_UNSUPPORTED_ASSET_TITLE');\n            messages = [ translate('DL_DESIGN_LIBRARY_NATIVE_UNSUPPORTED_ASSET_MESSAGE', { supportedExtensions }) ];\n        } else if (warningMap.hasOverSizedFiles) {\n            reportBulkUploadError('oversized-file');\n            title = translate('DL_DESIGN_LIBRARY_NATIVE_FILE_SIZE_TITLE');\n            messages = [ translate('DL_DESIGN_LIBRARY_NATIVE_FILE_SIZE_MESSAGE', { supportedExtensions }) ];\n        }\n    } else if (supportedFiles.some(file => FileUtils.isLibraryFileExtension(file.extension))\n        && supportedFiles.some(file => !FileUtils.isLibraryFileExtension(file.extension))) {\n        // There are both library files and element files - show an error\n        reportBulkUploadError('unsupported-file-type-mix', true);\n        title = translate('DL_IMPORT_ERROR');\n        messages = [ translate('DL_IMPORT_LIBRARY_ELEMENT_MIX_MESSAGE') ];\n        supportedFiles = [];\n    } else if (warnings.length > 0) {\n        // There are supported files, but we have some warnings - show a confirmation dialog\n        messages = warnings.map(warning => translate(`DL_DESIGN_LIBRARY_NATIVE_${WARNING_MAP[warning][1]}`, { supportedExtensions }));\n        if (warnings.length > 1) {\n            title = translate('DL_DESIGN_LIBRARY_NATIVE_MULTIPLE_ERRORS_TITLE');\n            // TODO: Should we report analytics in the case of multiple warnings?\n        } else {\n            const warning = warnings[0];\n            title = translate(`DL_DESIGN_LIBRARY_NATIVE_${WARNING_MAP[warning][0]}`),\n            reportBulkUploadWarningEvent(WARNING_MAP[warning][2]);\n        }\n    }\n\n    return { title, messages, files: supportedFiles, library };\n}\n\n/**\n * Generate a name for a new element in a library - if you don't pass in a name to use, we'll generate a generic name,\n * and avoid making it the same name as any existing elements (e.g. \"Artwork 3\"). If you _do_ pass in a name, we just\n * use that (we don't check for duplicates in that case).\n *\n * @param {LibraryModel} library Library to add to.\n * @param {string} [strName] Suggested name to use for the element - if this is non-empty, we'll use this name.\n * @param {string} [labelPrefixKey='DL_ARTWORK_LABEL'] Translation key for the prefix of generic names (default is \"Artwork\").\n * @returns {string} Name to use for the element.\n */\nexport function getCuratedName(library, strName, labelPrefixKey = 'DL_ARTWORK_LABEL') {\n    if (typeof strName === 'string' && strName) {\n        // If the layer has a non-blank name, then we're done.\n        return strName;\n    }\n\n    // If the layer doesn't have a name, or multiple layers were selected,\n    // then we'll make up a unique name. Incase labelPrefix is defined it is used\n    // after translation else we use 'Artwork' so that name resembles 'Artwork nnn'.\n    const labelPrefix = translate(labelPrefixKey);\n\n    // Search all existing library elements to find names of the form \"labelPrefix nnn\",\n    // and remember the highest nnn we find.\n    const regexp = new RegExp('^' + labelPrefix + '\\\\s+(\\\\d+)$');\n    let highestFound = 0;\n    library.elements.forEach(element => {\n        const matchResult = regexp.exec(element.name);\n        if (matchResult && matchResult[1]) {\n            const num = parseInt(matchResult[1], 10);\n            if (num > highestFound) {\n                highestFound = num;\n            }\n        }\n    });\n\n    // We're done scanning. Make up a name that is different from any of the ones we found.\n    return labelPrefix + ' ' + (highestFound + 1);\n}\n\n/**\n * Returns a promise to the current layer/selection name.\n * If there is no name, we make up a unique one. You have to pass in a library,\n * in case we need to scan the library's elements looking for a unique name.\n *\n * @param {LibraryModel} library Library to add the later (as a graphic element) to.\n * @returns {string} Name to use for the element.\n */\nexport function getLayerName(library) {\n    return layerSelectionManager.getLayerName().then(result => getCuratedName(library, result));\n}\n\n// Metrics Utils\n\n/**\n * Report analytics for using/applying a library element (e.g. when you drag an image into a document,\n * or click on a color to apply it to the document).\n * @param {RepresentationModel} representation\n * @param {string} operation\n * @param {boolean} isLinked\n * @param {Object} extraMetrics\n *\n * TODO: This should be moved to metrics...\n */\nexport function reportApplyMetric(representation, operation, isLinked, extraMetrics) {\n    if (!representation) {\n        debugLog.log(`Error: reporting analytics for invalid representation`);\n        return;\n    }\n    metrics.setExtraEventMetrics('useElement', extraMetrics);\n    metrics.reportUseElement(representation, operation);\n    if (isLinked) {\n        metrics.reportCreateLink(representation.element, operation);\n    }\n    metrics.clearExtraEventMetrics('useElement');\n}\n\n/**\n * Report analytics for using/applying a library element's full size rendition.\n * @param {ElementModel} element\n * @param {string} operation\n * @param {boolean} isLinked\n * @param {Object} extraMetrics\n *\n * TODO: This should be moved to metrics...\n */\nexport function reportApplyFullSizeMetric(element, operation, isLinked, extraMetrics) {\n    // Since there are no full size representations, only a derived full size rendition, we must create a fake\n    // representation to pass the metrics info.\n    const fakeFullSizeRepresentation = {\n        type: 'image/png',\n        element\n    };\n    reportApplyMetric(fakeFullSizeRepresentation, operation, isLinked, extraMetrics);\n}\n\n/**\n * This is a wrapper for library.createElement() which makes the extra metrics data\n * provided available to the app specific reportEvent() routines.\n *\n * All app agnostic code should use this to create elements and provide the following\n * metrics data at minimum:\n *\n * App specific code that creates elements is free to pass whatever metrics data they\n * see fit.\n *\n * App specific reportEvent() routines can retrieve the extra data by calling\n * metrics.getExtraEventMetrics(\"createElement\") when the eventName === \"createElement\".\n *\n * @param {LibraryModel} library\n * @param {string} name\n * @param {string} type\n * @param {Object} extraMetrics\n *\n * TODO: This should be moved to metrics...\n */\nexport function createElementExtraMetrics(library, name, type, extraMetrics = {}) {\n    // We want to disable metrics for certain workflows that create elements. For example, the\n    // publish workflow does create new elements but since adding the elements is not directly\n    // done by the user, theres no reason to track it.\n    if (configuration.DISABLE_CREATE_ELEMENT_METRIC_OPTYPES.includes(extraMetrics.opType)) {\n        extraMetrics.disableReport = true;\n    }\n    if (!library) {\n        return;\n    }\n    try {\n        metrics.setExtraEventMetrics('createElement', extraMetrics);\n        const element = library.createElement(name, type);\n        operationalMetrics.sendCreateElementEvent(element, extraMetrics);\n        return element;\n    } catch {\n        metrics.clearExtraEventMetrics('createElement');\n    }\n}\n\n/**\n * Check if a library is writable, and show an error dialog if it isn't.\n *\n * @param {LibraryModel} library\n * @param {boolean} allowDocumentLibraries\n * @param {boolean} allowUnloadedElements Whether or not the library should be considered writable if not all elements are loaded.\n * @returns {boolean} Whether or not the library is writable.\n */\nexport function checkLibraryWritable(library, allowDocumentLibraries, allowUnloadedElements) {\n    if (!viewState.isLibraryWritable(library, allowDocumentLibraries, allowUnloadedElements)) {\n        environment.showError(translate('DL_ERROR_EDIT_READ_ONLY_LIBRARY', { name: library.name }));\n        return false;\n    }\n\n    return true;\n}\n\n/**\n * Check if a library element is writable (editable), and show an error dialog if it isn't.\n *\n * @param {ElementModel} element\n * @returns {boolean} Whether or not the element can be modified.\n */\nexport function checkElementWritable(element) {\n    if (!element.library.isWritable) {\n        environment.showError(translate('DL_ERROR_EDIT_READ_ONLY_ELEMENT'));\n        return false;\n    }\n\n    return true;\n}\n\n/**\n * Get a truncated name for the given library element (e.g. to display in tooltips and menus)\n *\n * @param {ElementModel} element\n * @returns {string} truncated element name\n */\nexport function getTruncatedElementName(element) {\n    if (element && element.name) {\n        return truncateString(element.name, 150).trim();\n    }\n    return;\n}\n\n/* Group and Ordering Utils */\n// TODO: Separate into different file.\n\n/**\n * Private: These utilities check for any duplicate orders and fixes them, for groups and elements in a group respectively.\n * Note that we only call this before reordering, to avoid churn.\n * @param {Object[]} items\n */\nfunction ensureOrdersValid(items) {\n    // This works for any array of objects with an order property.\n    items = localizedSorter.sortByOrder(items);\n    if (items.some(item => !isValidOrderString(item.order))) {\n        // If any of the orders are invalid, we just give all the items new orders - this should never happen in practice.\n        // (this is easier than dealing with cases where multiple elements have invalid orders).\n        const newOrders = getMultipleOrderStringsBetween(items.length);\n        items.forEach((item, index) => item.order = newOrders[index]);\n        return;\n    }\n    // Now, make sure there are no duplicate orders:\n    for (let i = 0; i < items.length - 1; i++) {\n        const item = items[i];\n        const order = item.order;\n        const nextOrder = items[i + 1].order;\n        if (order === nextOrder) {\n            const prevOrder = items[i - 1] && items[i - 1].order;\n            item.order = getOrderStringBetween(prevOrder, nextOrder);\n        }\n    }\n}\n\n// In order to use the same ensureOrdersValid function, we wrap each element so that it has an order\n// getter/setter - then the code is the same!\nclass GroupedElement {\n    constructor(element, group) {\n        this.element = element;\n        this.group = group;\n    }\n    get order() {\n        return this.element.getOrderInGroup(this.group);\n    }\n    set order(order) {\n        this.element.setOrderInGroup(this.group, order);\n    }\n}\n\nfunction ensureGroupOrdersValid(library) {\n    ensureOrdersValid(library.getGroups());\n}\n\nfunction ensureElementOrdersValid(group) {\n    const elements = group.library.elements.filter(element => element.getGroups()[0] === group);\n    ensureOrdersValid(elements.map(element => new GroupedElement(element, group)));\n}\n\n/**\n * Change the order of a group, so that it lies between [afterGroup, beforeGroup] in the ordering of groups.\n *\n * @param {GroupModel} group\n * @param {GroupModel} [afterGroup]\n * @param {GroupModel} [beforeGroup]\n * @param {Object} [options]\n * @property {merge} options.merge // Whether to attempt to merge with matching groups at the new position.\n */\nexport function reorderGroup(group, afterGroup, beforeGroup, options) {\n    options = Object.assign({\n        merge: true\n    }, options);\n\n    const { merge: shouldMerge } = options;\n    // Save the state of the library before any operations so we can offer undo.\n    const sourceGroupsTree = shouldMerge && getLibraryCustomGroupsTree(group.library);\n\n    // Make sure none of the groups in the library have the same order, otherwise\n    // we won't be able to insert a group in between them.\n    group.library.beginOperation();\n    ensureGroupOrdersValid(group.library);\n\n    const parent = (afterGroup || beforeGroup).parent;\n    // Ensure groups are siblings before reordering.\n    group.parent = parent;\n    group.order = getOrderStringBetween(afterGroup && afterGroup.order, beforeGroup && beforeGroup.order);\n\n    if (shouldMerge) {\n        // Merge with a group at the new location, if possible\n        mergeGroupsAfterOperation(false, group, group.library, group.library, parent, sourceGroupsTree, sourceGroupsTree);\n    }\n\n    group.library.endOperation();\n}\n\n/**\n * Utility used to rename a group. The group will be merged with any existing groups at its level with the new name.\n * @param {Group} group The group to be renamed.\n * @param {Library} newName The new name to give the group.\n * @returns {Group} returns the renamed or merged group.\n */\nfunction renameGroup(group, newName) {\n    if (!newName) { return; }\n    // Save the state of the library before any operations so we can offer undo.\n    const sourceGroupsTree = getLibraryCustomGroupsTree(group.library);\n\n    group.name = newName;\n    // Merge with a group with the new name at the group's location, if possible.\n    group = mergeGroupsAfterOperation(false, group, group.library, group.library, group.parent, sourceGroupsTree, sourceGroupsTree);\n    return group;\n}\n\n/**\n * Rename a library or a library item.\n * @param {Library | Group | Element} item\n * @param {string} newName\n * @returns {Library | Group | Element} returns the renamed item.\n */\nexport function renameItem(item, newName) {\n    if (item.isGroup) {\n        return renameGroup(item, newName);\n    }\n    item.name = newName;\n    return item;\n}\n\n/**\n * Creates a new group, such that it lies between [afterGroup, beforeGroup] in the ordering of groups.\n *\n * The default behaviour if you don't pass in any group is to put the new group at the top.\n *\n * @param {LibraryModel} library\n * @param {string} name\n * @param {GroupModel} [afterGroup]\n * @param {GroupModel} [beforeGroup]\n * @returns {GroupModel}\n */\nexport function createGroup(library, name, afterGroup, beforeGroup) {\n    if (!afterGroup && !beforeGroup) {\n        // Default is to place before the first group in the library\n        beforeGroup = localizedSorter.sortByOrder(library.getGroups())[0];\n    }\n\n    // If no name is passed in, get the default group name\n    if (!name) {\n        const { root, branches } = getLibraryCustomGroupsTree(library);\n        const sibling = beforeGroup || afterGroup;\n        const parentBranch = sibling ? branches[sibling.id].parent : root;\n        name = getDefaultGroupName(parentBranch);\n    }\n\n    const order = getOrderStringBetween(afterGroup && afterGroup.order, beforeGroup && beforeGroup.order);\n    return library.createGroup(name, order);\n}\n\n/**\n * Add the given set of elements to the given group. You should only call this directly if the\n * group you're adding to is empty, or you don't have a specific order you want to specify -\n * otherwise, you should call reorderElements() instead.\n *\n * The default order if you don't specify one, is at the end of the group.\n *\n * You must _only_ ever call this utility with elements that belong to the same library as the group.\n *\n * @param {ElementModel[]} elements\n * @param {GroupModel} group\n * @param {string} [order]\n * @param {boolean} [sortByCustomGroup=true] By default, we preserve the relative order of the elements in the group view.\n *                                           If false, we keep the order that the elements are passed in with.\n */\nexport function addElementsToGroup(elements, group, order, sortByCustomGroup = true) {\n    if (elements.length === 0) {\n        return;\n    }\n\n    if (!group) {\n        // We can't have an order outside of a group - so this just means that we\n        // move all the elements to be unclassified (not in any group)\n        elements[0].library.beginOperation();\n        elements.forEach(element => {\n            element.getGroups()[0] && element.setOrderInGroup(element.getGroups()[0], undefined);\n        });\n        elements[0].library.endOperation();\n        return;\n    }\n    if (!order) {\n        // So we have a group, but no order was specified - we should do the default behaviour\n        // of placing the elements at the _end_ of the group. We do this by getting an order string\n        // that comes after that of the last element in the group, and using this as the prefix for\n        // all the copied elements\n        const elementsInGroup = getSortedElementsInGroup(group);\n        const lastElement = elementsInGroup[elementsInGroup.length - 1];\n        order = lastElement ? getOrderStringBetween(lastElement.getOrderInGroup(group)) : '';\n    }\n\n    const suffixes = getMultipleOrderStringsBetween(elements.length);\n    if (sortByCustomGroup) {\n        // We order the elements, so that we respect their original relative order in the view-by-custom-group mode\n        elements = viewState.getElementsInViewOrder(elements);\n    } // otherwise, we respect the order that the elements were passed in with.\n\n    group.library.beginOperation();\n    elements.forEach((element, index) => {\n        if (element.group) {\n            return;\n        }\n        element.setOrderInGroup(group, order + suffixes[index]);\n    });\n    group.library.endOperation();\n    viewState.setGroupCollapsed(group.id, false);\n}\n\n/**\n * Gets the elements in a group, sorted by order.\n * @param {GroupModel} group\n * @returns {ElementModel[]} elements - Elements sorted by order in group.\n */\nexport function getSortedElementsInGroup(group) {\n    const elementsInGroup = group.library.elements.filter(element => element.getGroups()[0] === group);\n    return localizedSorter.sortByOrderInGroup(group, elementsInGroup);\n}\n\n/**\n * Change the order of a set of elements, so that they lie between [afterElement, beforeElement] in the ordering of\n * elements in the group, but retain their existing relative ordering prior to being grouped. If you're moving the\n * elements between two existing elements in a group, you must pass in both afterElement and beforeElement.\n * However, only one of them is required if you're moving the elements to the start or end of the group.\n *\n * You must _only_ ever call this utility with elements that belong to the same library.\n *\n * @param {ElementModel[]} elements\n * @param {ElementModel} [afterElement]\n * @param {ElementModel} [beforeElement]\n * @param {boolean} [doScroll]\n */\nexport function reorderElements(elements, afterElement, beforeElement, doScroll = false) {\n    // Find the group we're going to add the elements to:\n    const afterGroup = afterElement && afterElement.getGroups()[0];\n    const beforeGroup = beforeElement && beforeElement.getGroups()[0];\n    const group = afterGroup || beforeGroup;\n\n    // Make sure none of the elements in the group have the same order, otherwise\n    // we won't be able to insert an element in between them.\n    if (group) {\n        group.library.beginOperation();\n        ensureElementOrdersValid(group);\n    }\n\n    // Find the order to add the elements to, in the group:\n    const afterOrder = afterElement && afterElement.getOrderInGroup(group);\n    const beforeOrder = beforeElement && beforeElement.getOrderInGroup(group);\n    addElementsToGroup(elements, group, getOrderStringBetween(afterOrder, beforeOrder));\n    group && group.library.endOperation();\n\n    if (doScroll && elements.length > 0) {\n        elementSelectionState.setItemPendingScroll(elements[0]);\n    }\n}\n\n/**\n * Returns true of the given array of elements have any elements that depend on them, but are not\n * in the array. This is used, for example, for determining if it's safe to delete a set of elements.\n *\n * @param {ElementModel[]} elements\n * @returns {boolean}\n */\nexport function doElementsHaveDependents(elements) {\n    const elementsById = {};\n    const librariesToCheck = {};\n    elements.forEach(element => {\n        // Elements can be in different libraries so you need a globally unique identifier, not just the element id, as a key.\n        elementsById[`${element.library.id}#${element.id}`] = element;\n        librariesToCheck[element.library.id] = element.library;\n    });\n\n    // For each library, see if there's an element that is not in the list of elements, but has a dependency on\n    // an element in the list of elements.\n    return Object.keys(librariesToCheck).some(id => {\n        const library = librariesToCheck[id];\n        return library.elements.some(element => !elementsById[`${element.library.id}#${element.id}`]\n            && element.dependencies.some(dependency => elementsById[`${dependency.library.id}#${dependency.id}`]));\n    });\n}\n\n/**\n * Returns true of the given array of elements depend on any elements that are not\n * in the array. This is used, for example, for determining if it's safe to copy a set of elements\n * (i.e. will the target be usable).\n *\n * @param {ElementModel[]} elements\n * @returns {boolean}\n */\nexport function doElementsHaveDependencies(elements) {\n    const elementsById = {};\n    elements.forEach(element => elementsById[`${element.library.id}#${element.id}`] = element);\n    return elements.some(element => element.dependencies.some(dependency => !elementsById[`${dependency.library.id}#${dependency.id}`]));\n}\n\nexport function confirmDeleteElements(elements, callback) {\n    dialogManager.openDialog('confirm', {\n        title: translate('DL_DELETE_ELEMENTS'),\n        message: translate('DL_DELETE_ELEMENTS_MESSAGE', { num: elements.length }),\n        okText: translate('DL_DELETE'),\n        onClickOK: callback\n    });\n}\n\nfunction confirmOperation(operation, type, suffix, callback) {\n    const prefix = `DL_${operation.toUpperCase()}`;\n    dialogManager.openDialog('confirm', {\n        title: translate(prefix),\n        message: translate(`${prefix}_${type.toUpperCase()}_${suffix}`),\n        okText: translate(prefix),\n        onClickOK: callback\n    });\n}\n\nexport function confirmOperationWithDependents(operation, type, callback) {\n    confirmOperation(operation, type, 'WITH_DEPENDENTS', callback);\n}\n\nexport function confirmOperationWithDependencies(operation, type, callback) {\n    confirmOperation(operation, type, 'WITH_DEPENDENCIES', callback);\n}\n\n/**\n * Utility for copying/moving an array of elements from one library to another. You can\n * specify a target group in the target library, or no group (ungrouped), or request to preserve\n * the existing groups of the library.\n *\n * Note that if you pass in `preservedGroups=true`, the `toGroup` will be ignored.\n * Note: Make sure that the toLibrary is writable and has capacity.\n *\n * @param {boolean} isMove - true for a move, false for a copy.\n * @param {ElementModel[]} elements The elements to move/copy.\n * @param {LibraryModel} toLibrary The library to move/copy to.\n * @param {GroupLibrary} [toGroup] The group in the target library to move/copy to.\n * @param {boolean} [preserveGroups=false] Whether to preserve the existing groups of the elements.\n * @param {boolean} [checkForDependents=true] Whether to check for dependents of the members of the group that are not in the group\n */\nexport function copyOrMoveElements(isMove, elements, toLibrary, toGroup, preserveGroups = false, checkForDependents = true) {\n\n    // Check to see if there are any elements that have dependents in the library\n    // If so, and we're moving, we show a warning (source library will have broken elements after move)\n    if (isMove && checkForDependents && doElementsHaveDependents(elements)) {\n        confirmOperationWithDependents('move', elements.length > 1 ? 'elements' : 'element',\n            () => copyOrMoveElements(isMove, elements, toLibrary, toGroup, preserveGroups, false));\n        return;\n    }\n    // Note: We don't bother to check for dependencies, since the copy command should be correct (Copy with dependencies)\n\n    const performanceTimer = new PerformanceTimer(`Element ${ isMove ? 'Move' : 'Copy'}`);\n\n    // We want the elements to appear in the same order when sorted by date as they were in the original library\n    // So, we need the most recently modified element to be added _last_, so it gets the highest modified time.\n    // However, when adding the elements to a custom group, we need to preserve the relative order they were passed in.\n    // To achieve both these goals, we first tag the elements with the original index, then sort by modified:\n    const elementData = elements.map((element, index) => ({ element, index, modified: element.modified }));\n    const dateSortedElements = localizedSorter.sortByModified(elementData, true);\n\n    // And here comes the trick - we copy the elements with the most recently modified last, so the modified dates are\n    // as expected - but we place each element (after copying), in the same place as its source was in the\n    // original elements array you passed in. So voila, we get the right modified time, but the newElements are in\n    // the same order as the elements that were passed in.\n    const fromLibraries = new Map();\n    const newElements = [];\n    const promises = dateSortedElements.map(({ element, index }) => {\n        const fromLibrary = element.library;\n        // moveElement promise rejects if the element library matches the library it is being moved to\n        // therefore, don't call moveElement if the libraries match\n        if (isMove && fromLibrary === toLibrary) {\n            return;\n        }\n\n        if (isMove && !fromLibraries.has(fromLibrary.id)) {\n            fromLibrary.beginOperation();\n            fromLibraries.set(fromLibrary.id, fromLibrary);\n        }\n\n        const copyOrMovePromise = isMove ? fromLibrary.moveElement(element, toLibrary) : fromLibrary.copyElement(element, toLibrary);\n        return copyOrMovePromise.then(newElement => newElements[index] = newElement);\n    });\n\n    const newGroups = {};\n    toLibrary.beginOperation();\n\n    return Promise.all(promises).then(() => {\n        if (preserveGroups) {\n            for (let i = 0; i < elements.length; i++) {\n                const group = elements[i].getGroups()[0];\n                if (group) {\n                    let newGroup = newGroups[group.id];\n                    if (!newGroup) {\n                        // If the group already exists in the target library, we can reuse it, so\n                        // long as it has the same name!\n                        newGroup = toLibrary.getGroupById(group.id);\n                        if (!newGroup || newGroup.name !== group.name) {\n                            newGroup = createGroup(toLibrary, group.name);\n                        }\n                        newGroups[group.id] = newGroup;\n                    }\n                    // Now simply copy the order across:\n                    newElements[i].setOrderInGroup(newGroup, elements[i].getOrderInGroup(group));\n                }\n            }\n        } else {\n            // Not preserving groups is the easy case - just add all the elements to the target\n            // group in the order they were passed in!\n            addElementsToGroup(newElements.length > 0 ? newElements : elements, toGroup);\n        }\n\n        performanceTimer.done();\n\n        return newElements;\n    }).finally(() => {\n        toLibrary.endOperation();\n        fromLibraries.forEach(library => library.endOperation());\n    });\n}\n\n/**\n * Private utility used to merge groups after an operation. Called after copy, move, reorder and rename.\n * @param {boolean} isMove - true for a move, false for anything else.\n * @param {Group} newGroup The group that was moved or copied.\n * @param {Library} sourceLibrary The library that `newGroup` was moved or copied from.\n * @param {Library} targetLibrary The library that `newGroup` was moved or copied into.\n * @param {Group} [targetGroup] The group that `newGroup` was moved or copied into.\n * @param {GroupTree} sourceGroupTree The group tree for sourceLibrary before `newGroup` was moved or copied.\n * @param {GroupTree} targetGroupTree The group tree for `newGroup's` new library, before the move or copy op.\n * @returns {Group} returns the resulting group after the merge. Shows undo toast.\n */\nfunction mergeGroupsAfterOperation(isMove, newGroup, sourceLibrary, targetLibrary, targetGroup, sourceGroupTree, targetGroupTree) {\n    const isCrossLibraryOp = sourceLibrary !== targetLibrary;\n    // All the elements that were moved or copied.\n    const newElements = getAllDescendantElements(newGroup);\n\n    // Check for a group to merge with at the new location.\n    // Note that we look over the targetGroup branch and not newGroup.parent's branch because we're in the middle of a batch operation,\n    // which in XD document assets means none of the changes have been committed yet, so newGroup.parent may not point to targetGroup at this point.\n    const targetBranch = targetGroup ? targetGroupTree.branches[targetGroup.id] : targetGroupTree.root;\n    const mergeableGroup = getMergeableGroupsInBranch(newGroup, targetBranch)[0];\n\n    if (!mergeableGroup) { return newGroup; }\n\n    const mergedGroup = mergeGroups(newGroup, mergeableGroup);\n\n    const undo = () => {\n        // For a cross-library move, we should move back the elements before attempting to restore the trees.\n        // Otherwise, restoring the target tree would delete the elements.\n        const undoMoveElements = () => {\n            if (!isMove || !isCrossLibraryOp) { return Promise.resolve(); }\n            return copyOrMoveElements(isMove, newElements, sourceLibrary, null, false, false);\n        };\n\n        return undoMoveElements().then(() => {\n            // If we operated across libraries, we need to restore both trees.\n            const treesToRestore = isCrossLibraryOp ? [ sourceGroupTree, targetGroupTree ] : [ sourceGroupTree ];\n            treesToRestore.forEach(groupsTree => {\n                restoreGroups(groupsTree);\n            });\n        });\n    };\n\n    // Show undo toast.\n    appState.panel.toastManager.openToast('undoMergeGroups', { undo });\n    return mergedGroup;\n}\n\n/**\n * Utility for copying/moving a group from one library to another (with or without its contents).\n * This ensures that the copied group is ordered at the start of the groups in the target library.\n *\n * @param {boolean} isMove - true for a move, false for a copy.\n * @param {GroupModel} group The group to move/copy.\n * @param {LibraryModel} toLibrary The library to move/copy the group to.\n * @param {GroupModel} [toGroup] The group to move/copy the group to.\n * @param {boolean} [includeContents=true] Whether to also copy/move the contents of the group\n * @param {boolean} [checkForDependents=true] Whether to check for dependents of the members of the group that are not in the group\n * @param {boolean} [checkForDependencies=true] Whether to check for dependencies of the members of the group that are not in the group\n */\nexport function copyOrMoveGroup(isMove, group, toLibrary, toGroup, includeContents = true, checkForDependents = true, checkForDependencies = true) {\n    if (!group || !toLibrary) {\n        return;\n    }\n    // Check to see if there are any elements in the group that have dependents in the library\n    // If so, and we're moving, we show a warning (source library will have broken elements after move)\n    const elements = getAllDescendantElements(group);\n    if (isMove && includeContents && checkForDependents && doElementsHaveDependents(elements)) {\n        confirmOperationWithDependents('move', 'group', () => copyOrMoveGroup(isMove, group, toLibrary, toGroup, includeContents, false, checkForDependencies));\n        return;\n    }\n\n    // Check to see if there are any elements in the group that have dependencies in the library\n    // If so, we show a warning (target library will have broken elements after move/copy)\n    if (includeContents && checkForDependencies && doElementsHaveDependencies(elements)) {\n        confirmOperationWithDependencies(isMove ? 'move' : 'copy', 'group',\n            () => copyOrMoveGroup(isMove, group, toLibrary, toGroup, includeContents, checkForDependents, false));\n        return;\n    }\n\n    const fromLibrary = group.library;\n\n    // Save the group trees in their current state so that we can offer undo.\n    const sourceGroupTree = getLibraryCustomGroupsTree(fromLibrary);\n    const targetGroupTree = getLibraryCustomGroupsTree(toLibrary);\n\n    toLibrary.beginOperation();\n    fromLibrary.beginOperation();\n\n    return copyOrMoveGroupAndDescendants(group, toLibrary, toGroup, { isMove, includeContents })\n        .then(newGroup => {\n            // Make sure the group we moved into is expanded.\n            if (toGroup) { viewState.setGroupCollapsed(toGroup.id, false); }\n            // Merge with a group at the new location if possible.\n            return mergeGroupsAfterOperation(isMove, newGroup, group.library, toLibrary, toGroup, sourceGroupTree, targetGroupTree);\n        })\n        .catch(error => {\n            debugLog.log(error);\n            // Note: Can adjust the error type and description as you see fit here.\n            if (!isMove) {\n                metrics.reportError('Add Group', 'Group', error && error.description, 'context-menu', 'copy-group-error', undefined, group.library);\n            } else {\n                metrics.reportError('Group Operations', 'Group', error && error.description, 'context-menu', 'move-group-error', {\n                    content: { category: 'Right Click' } }, group.library);\n            }\n        }).finally(() => {\n            toLibrary.endOperation();\n            fromLibrary.endOperation();\n        });\n}\n\n/**\n * Sets the given path as the thumbnail of the element for the given size. This sets the thumbnail cache,\n * and additionally adds the thumbnail as a rendition representation (stored in the library), if we won't\n * be able to generate the thumbnail from any of the existing representations.\n *\n * @param {ElementModel} element\n * @param {number} size\n * @param {string} path\n * @returns {Promise} promise will resolve when the thumbnail is set.\n */\nexport function setThumbnail(element, size, path) {\n    const canGenerateRendition = element.representations.some(rep => FileUtils.canGenerateRenditionFromMimeType(rep.type));\n\n    const promises = [];\n    if (!canGenerateRendition) {\n        // We can't generate thumbnail from any of its representations, so store the thumbnail\n        // as a representation so that other products/machines can generate thumbnails for this element.\n        const newRepresentation = element.createRepresentation('image/png', 'rendition');\n        promises.push(newRepresentation.setContentFromPath(path));\n    }\n\n    element.setThumbnailCache(size, path).catch(() => undefined);\n\n    return Promise.all(promises);\n}\n\n// Utilities related to external links:\n\n// Private util to see if a representation has a pending download\nfunction isRepresentationDownloadPending(representation) {\n    return representation.isExternalLink && !representation.getCachedContentPath() && !representation.getCachedExternalLinkError();\n}\n\n/**\n * Get the download progress for any external links currently being downloaded by the element - this just returns the\n * download progress for the first representation that's downloading (which should normally be the biggest one, since the\n * primary representation comes before any comps).\n *\n * @param {ElementModel} element\n * @returns {number|undefined} Download progress of the element (between 0 and 100), or undefined if not downloading.\n */\nexport function getElementDownloadProgress(element) {\n    const downloadingRep = element.representations.find(rep => rep.getExternalLinkDownloadProgress());\n    return downloadingRep && downloadingRep.getExternalLinkDownloadProgress();\n}\n\nexport function getElementDownloadStatus(element) {\n    const isDownloadPending = elementConfiguration.isDownloadInProgress(element);\n    const percentDownloaded = getElementDownloadProgress(element);\n    const hasFailed = percentDownloaded === -1;\n\n    return {\n        isDownloadPending,\n        percentDownloaded,\n        hasFailed,\n    };\n}\n\n/**\n * Get the modified time for the element. You should call this rather than looking at `element.modified` directly, because it\n * takes into account the stock download - we decrement the modified time by 1 while we're downloading, so that it looks like the\n * element changed (if you place it as a link) after the download finishes - otherwise the product won't update, e.g. to replace\n * the thumbnail placeholder with the comp/full-res image.\n *\n * @param {ElementModel} element\n * @returns {number} Adjusted modified time of the element\n */\nexport function getElementModifiedTime(element) {\n    const isDownloadPending = element.representations.some(isRepresentationDownloadPending);\n    return isDownloadPending ? element.modified - 1 : element.modified;\n}\n\n/**\n * Get a badge corresponding to the type of the primary representation, to display in the UI. This is based on the mime type configuration\n * in FileUtils (so it can depend on the element type).\n *\n * @param {ElementModel} element\n * @returns {string} Badge to display (e.g. used in the list view)\n */\nexport function getPrimaryRepresentationBadge(element) {\n    const representation = element.getPrimaryRepresentation();\n    if (representation) {\n        const typeInfo = FileUtils.mimeLookup(element.type, representation.type);\n        return typeInfo && typeInfo.badge;\n    }\n}\n\n/**\n * Get a extension corresponding to the type of the representation, to display in the UI. This is based on the mime type configuration\n * in FileUtils (so it can depend on the representation type).\n *\n * @param {RepresentationModel} representation\n */\nexport function getRepresentationExtension(representation) {\n    if (representation) {\n        const typeInfo = FileUtils.mimeLookup(representation.element.type, representation.type);\n        return typeInfo && typeInfo.exts && typeInfo.exts[0];\n    }\n}\n\n/**\n * Get a extension for an element corresponding to the type of the primary representation, to display in the UI. This is based on the mime type configuration\n * in FileUtils (so it can depend on the element type).\n *\n * @param {ElementModel} element\n */\nexport function getPrimaryRepresentationExtension(element) {\n    return getRepresentationExtension(element.getPrimaryRepresentation());\n}\n\n/**\n * Retry the download of any external links\n *\n * @param {ElementModel} element\n */\nexport function retryElementDownload(element) {\n    element.representations.forEach(representation => {\n        if (isRepresentationDownloadPending(representation)) {\n            representation.getContentPath(); // This triggers the refetch\n        }\n    });\n}\n\n// Determine which libraries are an available target based on write access\n// and available library limit to add more elements.\nexport function getWritableLibraries(numElementsToAdd) {\n    const availableLibraryMap = {};\n    libraryManager.libraries.forEach(library => {\n        availableLibraryMap[library.id] = viewState.isLibraryWritable(library, false, true) && librarySizeManager.canAddElements(library, numElementsToAdd);\n    });\n    return availableLibraryMap;\n}\n\n/**\n * Method to sort and filter the given libraries according to the given constraints.\n * @param {Array<Library>} libraries\n * @param {Object} options\n * @returns {Array<Library>}\n */\nexport function getLibrariesInViewOrder(libraries, options) {\n    const sortState = configuration.currentProduct.config.defaultLibrarySortState || 'name';\n    Object.assign({\n        sortBy: sortState,\n        filterBy: 'all',\n        searchText: '',\n        isAscending: sortState !== 'name', // ascending when sorting by name\n    }, options);\n\n    const { sortBy, filterBy, searchText, isAscending } = options;\n\n    // Get all libraries, applying any active filters.\n    libraries = getFilteredLibraries(filterBy, libraries);\n    // Then apply any search constraints.\n    if (searchText) {\n        libraries = findMatchingLibraries(searchText, libraries);\n    }\n\n    // If brands are enabled, separate brand libraries from traditional libraries\n    // since these are always listed first\n    let brandLibraries;\n    if (featureFlags.get('brandFeatureEnabled')) {\n        brandLibraries = getFilteredLibraries('brand', libraries);\n        libraries = getFilteredLibraries('notBrand', libraries);\n    }\n\n    // Sort according to the current setting.\n    if (sortBy === 'modified') {\n        libraries = localizedSorter.sortByModified(libraries, isAscending);\n\n        if (brandLibraries) {\n            brandLibraries = localizedSorter.sortByModified(brandLibraries, isAscending);\n            libraries = brandLibraries.concat(libraries);\n        }\n        return libraries;\n    }\n\n    if (sortBy === 'created') {\n        libraries = localizedSorter.sortByCreated(libraries, isAscending);\n\n        if (brandLibraries) {\n            brandLibraries = localizedSorter.sortByCreated(brandLibraries, isAscending);\n            libraries = brandLibraries.concat(libraries);\n        }\n        return libraries;\n    }\n\n    // Default to sorting by name.\n    libraries = localizedSorter.sortByName(libraries, isAscending);\n    if (brandLibraries) {\n        brandLibraries = localizedSorter.sortByName(brandLibraries, isAscending);\n        libraries = brandLibraries.concat(libraries);\n    }\n\n    return libraries;\n}\n\n/**\n * Method to filter the libraries based on the given filter.\n * The filtering methods are defined in {LibraryUtils}\n * @param {string} filter\n * @param {Array} libraries\n * @returns {Array}\n */\nexport function getFilteredLibraries(filter, libraries) {\n    switch (filter) {\n    case 'personal':\n    case 'yours':\n        return libraries.filter(library => !isSharedUserLibrary(library) && !isPublicLibrary(library) && !isTeamLibrary(library) && !isIncomingApprovedBrandLibrary(library));\n    case 'shared':\n        return libraries.filter(library => isSharedUserLibrary(library) && !isIncomingApprovedBrandLibrary(library));\n    case 'public':\n        return libraries.filter(library => isPublicLibrary(library));\n    case 'team':\n        return libraries.filter(library => isTeamLibrary(library));\n    case 'notAdded':\n        return [];\n    case 'brand':\n        return libraries.filter(library => isBrandLibrary(library));\n    case 'notBrand':\n        return libraries.filter(library => !isBrandLibrary(library));\n    case 'active':\n        return libraries.filter(library => {\n            return appState.libraryManager.isLibraryActive(library) && library.id !== appState.libraryManager.publishedDocumentLibrary?.id;\n        });\n    case 'drafts':\n        return libraries.filter(library => isUnpublishedBrand(library));\n    case 'created':\n        return libraries.filter(library => isCurrentUserCreatedLibrary(library) && filteredAllLibraries(library, libraries));\n    case 'published':\n        return libraries.filter(library => isPublishedBrand(library));\n    case 'all':\n        return libraries.filter(library => filteredAllLibraries(library, libraries));\n    case 'addedToYourLibraries':\n    default:\n        return libraries;\n    }\n}\n\n/**\n * Determine whether the graphic element is a vector by checking mimetypes of its representations. (Used by images and patterns.)\n * Note that PDFs and SVGs, which can embed bitmap graphics, are considered vector formats.\n * @param {ElementMode} element\n * @returns {boolean}\n */\nexport function isVector(element) {\n    return element.representations.some(rep => FileUtils.isVectorMimeType(rep.type));\n}\n\n/**\n * Deprecated, use this.context.libraryActions instead.\n * TODO: remove once no file uses LibraryUtils.libraryActions directly.\n */\nexport const libraryActions = new Proxy({}, {\n    get(_, name) {\n        console.warn(`LibraryUtils.libraryActions is deprecated, use this.context.libraryActions instead`);\n        return appState.panel.libraryActions[name];\n    }\n});\n\n// Is the current installed version of CCD at least 5.3?\nexport function isCCDFiveThree() {\n    const ccdVersion = libraryManager.getInstalledVersion('ACCC') || '0.0';\n    const [ major, minor ] = ccdVersion.split('.').map(Number);\n    return major > 5 || (major === 5 && minor >= 3);\n}\n\nexport function isSharedWithMe(library) {\n    return isIncomingLibrary(library) || isPublicLibrary(library);\n}\n\n/**\n * Attempts to create a new group with the passed elements as contents\n * @param {Array} elements\n */\nexport function createNewGroupWithElements(elements) {\n\n    if (viewState.viewByState === 'group') {\n        libraryManager.currentLibrary.beginOperation();\n        const newGroup = createGroup(libraryManager.currentLibrary);\n        if (elements.length > 0 && !viewState.isLibrariesSearchMode()) {\n            // Only add the selected elements to the group if we're showing a single library,\n            // or if we're searching within one library:\n            addElementsToGroup(elements, newGroup);\n        }\n        libraryManager.currentLibrary.endOperation();\n        elementSelectionState.revealGroup(newGroup);\n        // If we were searching, reset the view mode so we can see the new group:\n        viewState.resetMode();\n        // Highlight the default group name for renaming\n        appState.panel.viewManager.startRename(newGroup);\n    }\n}\n\n/**\n* Determines if the given name is valid for an element\n* The default valid return value is configuration.RENAME_STATES.VALID\n* @param {string} name\n* @returns {string} one of the values laid out in configuration.RENAME_STATES\n*/\nexport function validElementName(name) {\n    if (name.match(/[\\\\/]/gm)) {\n        return configuration.RENAME_STATES.SLASH_ELEMENT;\n    }\n    return configuration.RENAME_STATES.VALID;\n}\n\n/**\n * Determines if a library name is valid in all required ways (both character validity and non-duplicate)\n * If you want to determine just character validity, use validateLibraryName\n * If you want to determine if a proposed library name is a non-duplicate, use duplicateLibraryName\n * The default valid return value is configuration.RENAME_STATES.VALID\n * @param {string} name\n * @param {AdobeLibraryFolder} folder\n * @returns {string} one of the values laid out in configuration.RENAME_STATES\n */\nexport function validUniqueLibraryName(name, folder) {\n    if (name.length > configuration.MAX_INPUT_STRING_LENGTH) {\n        return configuration.RENAME_STATES.INVALID_LIBRARY_LENGTH;\n    } else if (name.endsWith('.')) {\n        return configuration.RENAME_STATES.INVALID_LIBRARY_PERIOD;\n    } else if (!validateLibraryName(name)) {\n        // General invalid name error\n        return configuration.RENAME_STATES.INVALID_CHARACTER;\n    } else if (folder && duplicateLibraryName(name, folder)) {\n        return configuration.RENAME_STATES.DUPLICATE_LIBRARY;\n    }\n    return configuration.RENAME_STATES.VALID;\n}\n\n/**\n * Determines if a string is a valid library name\n * @param {string} name\n * @returns {boolean}\n */\nexport function validateLibraryName(name) {\n    if (!name) { return false; }\n    const trimmedName = name.trim();\n    const regex = /[/:*\\\\?\"|<>]/;\n    const hasForbiddenLetter = trimmedName.match(regex);\n    const endsWithPeriod = trimmedName.endsWith('.');\n    const correctLength = trimmedName.length > 0 && trimmedName.length <= configuration.MAX_INPUT_STRING_LENGTH;\n    const isWindowsReserveName = configuration.WINDOWS_RESERVED_NAMES.find(reserved => reserved.toLowerCase() === trimmedName.toLowerCase());\n\n    const isValid = !hasForbiddenLetter && !endsWithPeriod && !isWindowsReserveName && correctLength;\n    return isValid;\n}\n\n/**\n * Determines if a library with the same name already exists in the given folder\n * @param {string} name\n * @param {AdobeLibraryFolder} folder\n * @returns {boolean}\n */\nexport function duplicateLibraryName(name, folder) {\n    const normalizedName = name.trim().toLowerCase();\n    const isDuplicate = !!libraryManager.libraries.find(lib => lib.name && lib.name.toLowerCase() === normalizedName && lib.parentDirectoryId && folder.id === lib.parentDirectoryId);\n    return isDuplicate;\n}\n\n/**\n * Returns the comma-separated list of collaborator emails for a library (if any)\n *\n * @param {LibraryModel} library\n * @returns {string}\n */\nexport function getCollaboratorEmails(library) {\n    if (library && (isSharedUserLibrary(library) || isTeamLibrary(library))) {\n        const collaborators = library.visibleCollaborators || [];\n        const emails = collaborators.map(collaborator => collaborator.email).filter(Boolean);\n\n        return emails.join(', ');\n    }\n\n    return '';\n}\n\n/**\n * Returns translated string for a library's collaboration state. Note this is different than getLibrarySharingString,\n * which has detailed collaborator info. Hence why this function is called 'short'\n * For example 'Team library', 'Shared library', 'Personal library'\n * @param {LibraryModel} library\n * @returns {string}\n */\nexport function getShortLibrarySharingString(library) {\n    if (!library) { return ''; }\n\n    if (isTeamLibrary(library)) {\n        return translate('DL_LIBRARY_STATUS_TEAM');\n    } else if (isPublicLibrary(library)) {\n        return translate('DL_LIBRARY_STATUS_PUBLIC');\n    } else if (isSharedUserLibrary(library)) {\n        return translate('DL_LIBRARY_STATUS_SHARED');\n    }\n\n    return translate('DL_LIBRARY_STATUS_PERSONAL');\n}\n\n/**\n * Returns translated string for sharing state, or an array of strings (names of collaborators, truncated to 15)\n * Note: You should call libraryManager.fetchLibraryCollaborations before getting this string.\n * @param {LibraryModel} library\n * @param {boolean} forTooltip - tooltips vary slightly from labels\n * @returns {string|string[]}\n */\nexport function getLibrarySharingString(library, forTooltip) {\n    if (!library) { return; }\n\n    if (configuration.currentProduct.config.showShortenedSharingString && forTooltip) {\n        if (isPublishedBrand(library)) {\n            return translate('DL_LIBRARY_LIST_FILTER_PUBLISHED');\n        } else if (isSharedUserLibrary(library)) {\n            return translate('DL_LIBRARY_LIST_FILTER_SHARED');\n        } else {\n            return translate('DL_LIBRARY_LIST_FILTER_YOURS');\n        }\n    }\n\n    if (isSharedUserLibrary(library) && !isTeamLibrary(library)) {\n        const collaborationData = library.collaborators;\n        if (collaborationData.length) {\n            // Filter out predefinedPrincipals for now, and also collaborators that are ESM admins without an explicit invitation. (done on JS API side)\n            const collaborators = library.visibleCollaborators;\n\n            if (forTooltip) {\n                const collabNames = [];\n                const getDisplayName = (collaborator) => {\n                    // displayName and email only available if collaborator.type === 'imsUser' or 'addressBookContact'\n                    // displayName only available if the user has public profile name\n                    const displayName = collaborator?.name || collaborator?.email;\n                    return collaborator.role === 'owner' ? translate('DL_INFO_OWNER', { name: displayName }) : displayName;\n                };\n\n                collaborators.forEach(collaborator => {\n                    const displayName = getDisplayName(collaborator);\n                    if (!displayName) { return; } // We currently skip any user without profile info to display\n                    if (collaborator.role === 'owner') {\n                        // Owner always goes first.\n                        const temp = collabNames[0];\n                        if (temp) {\n                            collabNames[0] = displayName;\n                            if (collabNames.length < configuration.MAX_COLLABORATORS) {\n                                collabNames.push(temp);\n                            }\n                        } else {\n                            collabNames.push(displayName);\n                        }\n                    } else if (collabNames.length < configuration.MAX_COLLABORATORS) { // Show max 15 collaborators.\n                        collabNames.push(displayName);\n                    }\n                });\n\n                // If there are more than 15 collaborators, or we skipped a collaborator with no display info\n                if (collaborators.length > collabNames.length) {\n                    const remainder = collaborators.length - collabNames.length;\n                    collabNames.push(translate('DL_INFO_MORE_COLLABORATORS', { number: remainder }));\n                }\n\n                return collabNames;\n            }\n\n            if (collaborators.length > 1) {\n                return translate('DL_INFO_COLLABORATORS', { number: collaborators.length });\n            }\n            return translate('DL_INFO_COLLABORATOR');\n        }\n\n        // Fallbacks if collab data is not yet available (e.g. if offline or still fetching first time)\n        if (forTooltip && isIncomingLibrary(library)) { return translate('DL_INFO_SHARED_WITH_YOU'); }\n        return translate('DL_INFO_SHARED');\n    }\n\n    if (isPublicLibrary(library)) {\n        return translate('DL_INFO_PUBLIC');\n    }\n\n    if (isTeamLibrary(library)) {\n        const parentFolder = libraryManager.platformFolders.find(folder => folder.id === library.parentDirectoryId) || {};\n        if (featureFlags.get('enableProjects')) {\n            return [ parentFolder.name ];\n        }\n\n        return [ parentFolder.name || translate('DL_INFO_TEAM'), parentFolder.ownerName ];\n    }\n\n    return translate('DL_INFO_ONLY_YOU');\n}\n\n/**\n * Returns the file types that can be natively dropped onto libraries panel\n */\nexport function getNativeDropTypes() {\n    let extensions = configuration.NATIVE_DROP_ALLOWED_FILE_EXTENSIONS;\n\n    if (libraryManager.isRestrictedAccount || configuration.currentProduct.config.disableImport) {\n        extensions = configuration.NATIVE_DROP_ALLOWED_FILE_EXTENSIONS.filter(fileType => !FileUtils.isLibraryFileExtension(fileType));\n    }\n\n    return extensions;\n}\n\n/**\n * Returns true if the library is a team library\n *\n * @param {LibraryModel} library\n */\nexport function isTeamLibrary(library) {\n    // Leave this in for now because inherited metadata isn't ready yet. Redundant check intentional.\n    const oldCheck = library.ownership === 'incoming' && library.ownerType === 'org';\n    // Does the current user belong to the Project in which this library is stored?\n    // Answer could be no if the user was directly invited to a library in a project to which they don't have access\n    // if not, treat it like a normal library\n    const doesUserBelongToProject = libraryManager.projects?.some(project => project?.id === library.project?.id);\n    return Boolean((library.ownership === 'incoming' && library.project) || oldCheck) && doesUserBelongToProject;\n}\n\nexport function getTeamLibraryPlatformFolder(library) {\n    return libraryManager.platformFolders.find(folder => folder.id === library.parentDirectoryId);\n}\n\n/**\n * Returns true if the library is an incoming user library;\n * or, if in GenStudio, also checks if the library is not created by the current logged-in user.\n *\n * @param {LibraryModel} library\n */\nexport function isIncomingLibrary(library) {\n    return (library.ownership === 'incoming' || (\n        configuration.currentProduct.config.adminFilterFallback\n            && !isCurrentUserOwnedLibrary(library))\n    ) && !isTeamLibrary(library);\n}\n\nexport function isPublicLibrary(library) {\n    return library.ownership === 'public';\n}\n\nexport function isOwnedLibrary(library) {\n    return [ 'private', 'outgoing' ].includes(library.ownership);\n}\n\n/**\n * Returns true if the library is owned by the current logged-in user.\n *\n * @param {LibraryModel} library\n */\nexport function isCurrentUserOwnedLibrary(library) {\n    return appState.libraryManager.userId === library.owner;\n}\n\n/**\n * Returns true if the library is created by the current logged-in user.\n *\n * @param {LibraryModel} library\n */\nexport function isCurrentUserCreatedLibrary(library) {\n    return appState.libraryManager.userId === library.createdBy;\n}\n\n/**\n * Returns true if the library is to or from a user 'shared' (incoming or outgoing)\n *\n * @param {LibraryModel} library\n */\nexport function isSharedUserLibrary(library) {\n    return isIncomingLibrary(library) || library.collaboration === 'outgoing' || library.collaboration?.state === 'outgoing';\n}\n\n/**\n * Returns true if the library is allowed to invite other users to view or edit\n *\n * @param {LibraryModel} library\n */\nexport function isLibraryInvitable(library) {\n    return library && library.isPushedToServer && !library.toolkitId && !isPublicLibrary(library) && !library.isDeletedFromServer && library.isWritable && !libraryManager.isRestrictedAccount;\n}\n\nexport function isIncomingApprovedBrandLibrary(library) {\n    // Will need to eventually change when we have filters based on certain projects\n    return isPublishedBrand(library) && isIncomingLibrary(library) && !(library.bookmark?.id);\n}\n\n/**\n * Returns true if the user has team libraries access\n */\nexport function isTeamLibrariesEnabled() {\n    return libraryManager.platformFolders.length !== 0;\n}\n\n/**\n * Returns true if the library can be renamed. This is not the same as isLibraryWritable on platform, since a rename is\n * a folder operation.\n * @param {LibraryModel} library\n */\nexport function isLibraryRenameable(library) {\n    const canWriteName = isTeamLibrary(library) ? library.isParentWritable : true;\n    return Boolean(!library.toolkitId && !library.documentId && library.isWritable && canWriteName);\n}\n\n/**\n * Returns true if the library can have its link shared\n * @param {LibraryModel} library\n */\n\nexport function canShareLibraryLink(library) {\n    if (configuration.currentProduct.config.disabledLibraryContextMenuActions?.includes('getLink') || !library) { return false;}\n    return library.isPushedToServer\n        && library.isWritable\n        && libraryManager.isSharingEnabled\n        && !isTeamLibrary(library)\n        && !library.isDeletedFromServer\n        && !libraryManager.isRestrictedAccount;\n}\n\n/**\n * Returns true if the library can be deleted.\n * @param {LibraryModel} library\n */\nexport function isLibraryDeletable(library) {\n    if (configuration.currentProduct.config.readOnlyPanelUI) {\n        return false;\n    }\n    const canDelete = isTeamLibrary(library)\n        ? library.isParentWritable && library.isWritable\n        : !isSharedWithMe(library) && !library.toolkitId;\n    return Boolean(!library.isDeletedFromServer && canDelete);\n}\n\n// A library is an owned over quota library if it is a library owned by the user\n// and its error code is EXCEEDS_QUOTA\nexport function getOwnedQuotaErrorLibraries() {\n    const syncErrors = libraryManager.syncErrors || [];\n    return syncErrors.reduce((errorLibs, error) => {\n        const library = libraryManager.getLibraryById(error.libraryId);\n        return error.code === libraryManager.errors.EXCEEDS_QUOTA && library ? errorLibs.concat([ library ]) : errorLibs;\n    }, []);\n}\n\n// A library is a shared over quota library if it is an incoming collaboration\n// and its error code is RETRYABLE_SERVER_ERROR and it is an incoming collaborated library\nexport function getSharedQuotaErrorLibraries() {\n    return libraryManager.syncErrors.reduce((errorLibs, error) => {\n        const library = libraryManager.getLibraryById(error.libraryId);\n\n        if (library && library.ownership !== 'incoming') {\n            return errorLibs;\n        }\n\n        const isSharedOverQuota = error.code === libraryManager.errors.EXCEEDS_QUOTA;\n        return library && isSharedOverQuota ? errorLibs.concat([ library ]) : errorLibs;\n    }, []);\n}\n\n// get the id of the document element/group that this element/group was published from\nexport function getSourceId(element) { return ElementReferenceUtils.getSourceId(element); }\n\n/**\n *\n * Human readable elapsed or remaining time (example: 3 minutes ago)\n * @param  {Date|number|string} date A Date object, timestamp or string parsable with Date.parse()\n * @param  {number} [ellapsedLimit] Number of milliseconds, when the diff is over this number of milliseconds the function should return the date instead of ellapsed/remaining time\n * @returns {string} Human readable elapsed or remaining time\n *\n */\nexport function formatDate(date, ellapsedLimit) {\n    const locale = environment.getLocale();\n    const rft = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' });\n    const dtf = new Intl.DateTimeFormat(locale, { numeric: 'auto' });\n    const nowDate = Date.now();\n    const SECOND = 1000;\n    const MINUTE = 60 * SECOND;\n    const HOUR = 60 * MINUTE;\n    const DAY = 24 * HOUR;\n    const WEEK = 7 * DAY;\n    const MONTH = 30 * DAY;\n    const YEAR = 365 * DAY;\n    const intervals = [\n        { type: YEAR, divisor: YEAR, unit: 'year' },\n        { type: MONTH, divisor: MONTH, unit: 'month' },\n        { type: WEEK, divisor: WEEK, unit: 'week' },\n        { type: DAY, divisor: DAY, unit: 'day' },\n        { type: HOUR, divisor: HOUR, unit: 'hour' },\n        { type: MINUTE, divisor: MINUTE, unit: 'minute' },\n        { type: 30 * SECOND, divisor: SECOND, unit: 'seconds' },\n        { type: 0, divisor: 1, text: translate('DL_JUST_NOW') },\n    ];\n    const now = typeof nowDate === 'object' ? nowDate.getTime() : new Date(nowDate).getTime();\n    const diff = now - (typeof date === 'object' ? date : new Date(date)).getTime();\n    const diffAbs = Math.abs(diff);\n\n    if (ellapsedLimit && diff > ellapsedLimit) {\n        return dtf.format(date);\n    }\n\n    for (const interval of intervals) {\n        if (diffAbs >= interval.type) {\n            const x = Math.round(Math.abs(diff) / interval.divisor);\n            const isFuture = diff < 0;\n            return interval.unit ? rft.format(isFuture ? x : -x, interval.unit) : interval.text;\n        }\n    }\n}\n\nexport function getIconForLibrary(library) {\n    if (isPublishedBrand(library)) {\n        return <Icon id=\"Building\" height={ 12 } data-test-id=\"building-icon\" />;\n    } else if (isTeamLibrary(library)) {\n        const project = libraryManager.platformFolders?.find(folder => folder.id === library.parentDirectoryId);\n        if (!featureFlags.get('enableProjects')) {\n            return <Icon id=\"Building\" height={ 12 } data-test-id=\"building-icon\" />;\n        }\n        return <ProjectGradient project={project} />;\n    } else if (isSharedUserLibrary(library)) {\n        return (\n            <Icon id=\"UserGroup\" height={ 12 } data-test-id=\"user-group-icon\" />\n        );\n    } else if (isPublicLibrary(library)) {\n        return (\n            <Icon id=\"Globe\" height={ 12 } data-test-id=\"globe-icon\" />\n        );\n    } else {\n        return (\n            <Icon id=\"User\" height={ 12 } data-test-id=\"user-alone-icon\" />\n        );\n    }\n}\n\nexport function handleLibraryContextMenu(event, library) {\n    const excludedActions = configuration.currentProduct.config.disabledLibraryContextMenuActions || [];\n    event.stopPropagation();\n    let actions = [];\n    if (configuration.currentProduct.config.useBrandActions) {\n        actions = appState.panel.brandActions.getBrandActions(library);\n    } else {\n        actions = appState.panel.libraryActions.getLibraryActions(library, false, false, true).filter(action => !excludedActions.includes(action.id));\n    }\n    menuManager.openContextMenu(actions, event);\n}\n\nexport function shouldOfferDelimitedNamesConversion(library) {\n    const disableDelimiterCheck = configuration.currentProduct.config.disableDelimitedNamesConversion;\n    if (!viewState.isLibraryWritable(library) || disableDelimiterCheck) { return false; }\n    // Get all elements and groups into a list\n    const libraryItems = [ ...library.elements, ...library.getGroups() ];\n    // Find an item where the name includes a slash\n    const hasDelimitedNames = item => item.name?.includes('/');\n    return !!libraryItems.find(item => {\n        // Always detect delimiters in group names.\n        if (item.isGroup) { return hasDelimitedNames(item); }\n        // Elements have several special cases, check those now\n        return canReplaceGroupDelimitersInElement(item);\n    });\n}\n\nexport function isStyleGuideEnabled(library) {\n    return floodgateManager.isStyleguideEnabled() && (viewState.isLibraryWritable(library) || library.documentationElementCount > 0);\n}\n\nexport function getStyleguideLabel(library) {\n    return translate(library.documentationElementCount > 0 ? 'DL_FLYOUT_VIEW_STYLEGUIDE' : 'DL_FLYOUT_ADD_STYLEGUIDE');\n}\n\nconst _stableKeysForObjects = new WeakMap();\n\n// Since we can no longer rely on the ID to be stable, we need to generate a new key so it doesn't remount if the ID changes\nexport function getKeyForObject(item) {\n    if (_stableKeysForObjects.get(item)) {\n        return _stableKeysForObjects.get(item);\n    }\n    const newUUID = uuid();\n    _stableKeysForObjects.set(item, newUUID);\n    return newUUID;\n}\n\n// Load library elements in UI sort order\n// This must occur before certain library operations, such as creating a new element.\nexport function loadSortedElements(library) {\n    const getOrderedGroupIds = () => {\n        const groups = [];\n        const collectGroupsInOrder = node => {\n            if (node.item && node.item.isGroup) {\n                groups.push(`${node.item.classifierName}#${node.item.id}`);\n            }\n\n            if (node.children) {\n                node.children.forEach(collectGroupsInOrder);\n            }\n        };\n\n        const sortBy = viewState.elementSortState;\n        const { root } = GroupUtils.getLibraryCustomGroupsTree(library, { sortBy });\n        collectGroupsInOrder(root);\n        return groups;\n    };\n\n    // Start loading the library elements. This is idempotent.\n    // In some cases we need to load the elements in the order they appear in the UI.\n    const sections = viewState.viewByState === 'group'\n        ? getOrderedGroupIds()\n        : elementConfiguration.getElementTypes();\n\n    // JS API does not support 'role' viewByState, but it is a minor deviation from regular 'type' sort order\n    // where logo graphics appear right above graphics.\n    const sectionType = viewState.viewByState === 'role' ? 'type' : viewState.viewByState;\n\n    library.loadElements({\n        sectionType,\n        sections,\n        // JS API expects the 'modifiedDate' value\n        // https://git.corp.adobe.com/ProjectCentral/cc-libraries-js/blob/b03518987cb58c95566a6496d4f167aade485b50/src/drivers/Driver.ts#L69\n        field: viewState.elementSortState === 'modified' ? 'modifiedDate' : 'name',\n        direction: viewState.elementSortDescendingState ? 'descending' : 'ascending',\n    });\n}\n\n// Utility function to trigger opening the debug context menu\nexport function handleContextMenuLibraryClick(event) {\n    event.preventDefault();\n    event.stopPropagation();\n    if (configuration.currentProduct.config.noFlyoutMenu && localSettings.showDebugMenu() && event.shiftKey && event.altKey) {\n        menuManager.openContextMenu(getDebugMenuItems(), event);\n    }\n}\n\nexport function transformErrorCodeToErrorType(errorCode, genericErrors, collaboratedLibrary = false) {\n    switch (errorCode) {\n    case genericErrors.RETRYABLE_SERVER_ERROR:\n        return 'server';\n    case genericErrors.NETWORK_ERROR:\n    case genericErrors.LOGGED_OUT:\n        return 'network';\n    case genericErrors.FS_ERROR:\n        return 'fs';\n    case genericErrors.EXCEEDS_QUOTA:\n        return collaboratedLibrary ? 'sharedQuota' : 'quota';\n    case genericErrors.ACCESS_DENIED:\n        return 'noAccess';\n    case genericErrors.REQUEST_FAILED:\n        return 'requestFailed';\n    default:\n        return 'general';\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport configuration from 'app/js/config/configuration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport versionManager from 'app/js/managers/versionManager';\nimport environment from 'app/js/environment';\nimport * as AdobeStockUtils from 'app/js/utils/adobeStockUtils';\nimport imsInterface from 'app/js/interface/imsInterface';\nimport metrics from 'app/js/interface/metrics';\nimport viewState from 'app/js/state/viewState';\nimport themeManager from '../managers/themeManager';\n\n// Open a browser to the given URL. If the browser is not already logged into creative cloud,\n// then we want to automatically log in the browser using the userid that this panel is logged in as.\n// To do this, we use the IMS 'jump token' feature.\n//\n// For more info, see https://wiki.corp.adobe.com/display/ims/Transferring+Tokens and\n// https://git.corp.adobe.com/Stormcloud/docs/blob/master/development/web/urls.md#jump-urls\nfunction jumpTo(targetUrl, requireAuthorization, targetClientId, targetScope) {\n    if (!requireAuthorization) {\n        // We can just jump to the URL directly, since it's a public link\n        environment.launchInBrowser(targetUrl);\n        return;\n    }\n\n    // We have a different method for asynchronous launching.\n    // This is to allow web environments to handle popup blockers - the browser will prevent popups that don't happen\n    // in response to a click, and the workaround is to popup a blank window and replace the URL when it comes in.\n    environment.launchInBrowserAsync(getJumpUrl(targetUrl, requireAuthorization, targetClientId, targetScope));\n}\n\nfunction getJumpUrl(targetUrl, requireAuthorization, targetClientId, targetScope, doRetry) {\n    // Get our current access token, which represents the current logged in IMS user.\n    return imsInterface.getAccessToken(libraryManager.userId)\n        .then((accessToken) => {\n            // Send a message to the IMS jump token service.\n            const env = imsInterface.getEnvironment();\n            const url = `https://${env.ims}/ims/jumptoken/v1`;\n            const req = {\n                method: 'POST',\n                url,\n                headers: {\n                    'Content-type': 'application/x-www-form-urlencoded',\n                    'User-Agent': versionManager.getUserAgent()\n                },\n                body: encodeOptionsAsString({\n                    client_id: env.clientId,\n                    bearer_token: accessToken,\n                    target_client_id: targetClientId || 'CreativeCloudWeb1',\n                    target_redirect_uri: targetUrl,\n                    // TODO: The hard-coded scopes for public creative cloud should change to jump_ccassets, once metascope setup\n                    target_scope: targetScope || 'openid,creative_cloud,read_organizations,additional_info.screen_name,additional_info.secondary_email',\n                    target_response_type: (targetClientId === configuration.STOCK_CLIENT_ID) ? 'code' : 'token'\n                }, true)\n            };\n\n            const request = new Request(req.url, req);\n            return fetch(request)\n                .then((response) => {\n                    if (!response || response.status === 401) {\n                        return Promise.reject(response);\n                    }\n                    return response.json();\n                }).then((response) => {\n                    if (!response.jump) {\n                        return Promise.reject(response);\n                    }\n                    return response.jump;\n                }).catch((error) => {\n                    if (error.status === 401 && !doRetry) {\n                        // Invalid access token, request a new one\n                        imsInterface.clearAccessToken();\n                        return getJumpUrl(targetUrl, true, targetClientId, targetScope, true);\n                    }\n                    // Other error, just launch URL directly\n                    return targetUrl;\n                });\n        }).catch(() => {\n            // Error getting access token, just launch URL directly\n            return targetUrl;\n        });\n}\n\nfunction getWebHostName() {\n    return imsInterface.getEnvironment().ccwebHost;\n}\n\nfunction getAssetsWebLibraryId(library) {\n    // Public libraries need to pass the link id to assets web, not the library id\n    return library.publicLinkId || library.assetId || library.id;\n}\n\nexport function getLibraryURL(library) {\n    const hostName = getWebHostName();\n\n    let url = configuration.CCWEB_LIBRARIES_URL;\n    url = url.replace(/ZZZZ/, hostName);\n    url = url.replace(/YYYY/, getAssetsWebLibraryId(library));\n\n    return url;\n}\n\nfunction getArchiveURL(library) {\n    const hostName = getWebHostName();\n\n    let url = library ? configuration.CCWEB_LIBRARY_ARCHIVE_URL : configuration.CCWEB_LIBRARIES_ARCHIVE_URL;\n    url = url.replace(/ZZZZ/, hostName);\n    url = url.replace(/YYYY/, library && getAssetsWebLibraryId(library));\n\n    return url;\n}\n\nfunction getElementURL(element) {\n    const hostName = getWebHostName();\n\n    let url = configuration.CCWEB_ELEMENT_URL;\n    url = url.replace(/ZZZZ/, hostName);\n    url = url.replace(/YYYY/, getAssetsWebLibraryId(element.library));\n    url = url.replace(/XXXX/, element.id);\n\n    return url;\n}\n\nexport function encodeOptionsAsString(options) {\n    return Object.keys(options).map(key => `${encodeURIComponent(key)}=${encodeURIComponent(options[key])}`).join('&');\n}\n\nexport function getQueryParams(options) {\n    const optionString = encodeOptionsAsString(options);\n    if (optionString.length) {\n        return '?' + optionString;\n    }\n    return '';\n}\n\nfunction getLocalisedGoURL(urlRoot) {\n    let lang = environment.getLocale().substring(3).toLowerCase(); // locale is someething like 'en-US' or 'fr-FR' or 'zh-CN'.\n    // normally we can just append the language, such as 'fr' but for this regional variation we include locale as well\n    // if there eventually is > 1 language-locale combination needed we might want to refactor this\n    if (environment.getLocale() === 'fr-CA') {\n        lang = '_fr_ca';\n    } else if (configuration.AVAILABLE_HELP_LANGUAGES[lang]) {\n        lang = '_' + lang;\n    } else {\n        lang = ''; // Don't include a suffix for English\n    }\n    return urlRoot + lang;\n}\n\nfunction getStockJumpURLParams() {\n    const headers = metrics.addProductHeaders({});\n\n    let locale = environment.getLocale();\n    if (!locale || locale.length === 0) {\n        locale = 'en-US';\n    }\n\n    return {\n        'x-product': encodeURIComponent(headers['X-Product']),\n        'x-product-location': encodeURIComponent(headers['X-Product-Location']),\n        'as_camptype': encodeURIComponent(configuration.currentProduct.config.fullName),\n        'as_channel': 'adobe_apps',\n        'as_campclass': 'brand',\n        'as_campaign': 'cc15_app',\n        'as_source': 'app',\n        'as_content': 'library',\n        locale,\n        sso_inbound: 1\n    };\n}\n\nfunction getPublicLibraryURL(linkId) {\n    const hostName = imsInterface.getEnvironment().linkServiceWebHost;\n    let url = configuration.PUBLIC_LIBRARY_URL;\n    url = url.replace(/ZZZZ/, hostName);\n    url = url.replace(/YYYY/, linkId);\n    return url;\n}\n\nexport function getBrowseAllURL() {\n    const hostName = getWebHostName();\n\n    let url = configuration.CCWEB_BROWSE_ALL_URL;\n    url = url.replace(/ZZZZ/, hostName);\n\n    return url;\n}\n\nexport function getMarketplaceURL() {\n    // TODO: Stock website doesn't currently have a libraries section\n    return getStockURL();\n}\n\n// Fetch the goUrl for Assets Web browse more libraries page\n// Includes environment, locale, and client id\n// example returns string such as \"https://www.adobe.com/go/browse-more-libraries-stg?locale=fr&source=ProjectCentralPanel11\"\nexport function getEmbeddedBrowseAllURL() {\n    const env = imsInterface.getEnvironment().label === 'Staging' ? '-stg' : '';\n    let url = `${configuration.CCWEB_TEAM_LIBRARIES_URL}${env}`;\n\n    let locale = environment.getLocale();\n    if (!locale || locale.length === 0) {\n        locale = 'en-US';\n    }\n    const client_id = imsInterface.getEnvironment().clientId;\n\n    // Generally Assets Web just wants the first two letters of locale (eg. fr-Fr -> fr)\n    // With two exceptions, (eg zh-CN -> zh-Hans)\n    const specialShortLocale = configuration.ASSETS_WEB_SPECIALTY_LANGUAGE_MAP[locale];\n    const shortLocale = specialShortLocale ? specialShortLocale : locale.substr(0,2);\n    url += getQueryParams({ locale: shortLocale, source: client_id, theme: themeManager.reactSpectrumTheme });\n    return url;\n}\n\nfunction addContentTypeParams(options, stockParams) {\n    let hasOptions = false;\n    const setParam = (key, value, keyAcceptsArray) => {\n        // If this key already exists & its an Array type param, then do something like \"1,2,3...\"\n        if (stockParams[key] && keyAcceptsArray) {\n            stockParams[key] += '%2C' + value;\n        } else {\n            stockParams[key] = value;\n        }\n    };\n\n    if (options) {\n        // Loop through search options and set appropriate query params\n        configuration.STOCK_SEARCH_OPTIONS.forEach((option) => {\n            if (options[option.id]) {\n                setParam('filters[content_type:' + option.param + ']', 1);\n\n                if (option.filterKey) {\n                    setParam('filters[' + option.filterKey + '][]', option.filterValue, true);\n                }\n                hasOptions = true;\n            }\n        });\n    }\n\n    if (!hasOptions) { // No options means, all options\n        const uiOptions = AdobeStockUtils.getSearchUIOptions();\n        uiOptions.forEach((option) => {\n            setParam('filters[content_type:' + option.param + ']', 1);\n        });\n    }\n}\n\nexport function openLibraryURL(library) {\n    if (library) {\n        const url = getLibraryURL(library);\n        metrics.reportOutgoingUrlEvent('Navigation', 'Flyout Menu', 'click', 'view-website', url);\n        jumpTo(url, true);\n    }\n}\n\nexport function openLibraryArchiveURL(library, eventSource) {\n    eventSource = eventSource || 'Flyout Menu';\n    const url = getArchiveURL(library);\n    metrics.reportOutgoingUrlEvent('Navigation', eventSource, 'click', 'view-deleted-items', url);\n    jumpTo(url, true);\n}\n\n// TODO: Assets web does not handle the \"section\" parameter at all anywhere, so we should\n// figure out what we are trying to use this for in the ILST pushUtils (the only place using\n// this function) and work with assets web to get that functional\nexport function openElementURL(element, section, additionalParams) {\n    if (element) {\n        const params = additionalParams || {};\n        if (section) {\n            params.section = section;\n        }\n        metrics.reportEvent('Navigation', 'View Element on Website', 'click', 'success');\n        const url = getElementURL(element) + getQueryParams(params);\n        jumpTo(url, true);\n    }\n}\n\nexport function openReportAbuseURL(element) {\n    if (element) {\n        const params = { dialog: 'report_abuse' };\n        metrics.reportEvent('Navigation', 'Report Abuse on Website', 'click', 'success');\n        const url = getElementURL(element) + getQueryParams(params);\n        jumpTo(url, true);\n    }\n}\n\nexport function openStyleguideURL(library) {\n    if (library) {\n        const url = getLibraryURL(library) + '/styleguide';\n        metrics.reportOutgoingUrlEvent('Styleguide', 'Flyout Menu', 'click', 'view-website', url);\n        jumpTo(url, true);\n    }\n}\n\nexport function openCollaborateURL(library) {\n    if (library) {\n        const url = getLibraryURL(library) + getQueryParams({\n            dialog: 'collaborate',\n            mv: configuration.SHARE_LINK_HOST_TYPE_PARAM,\n            mv2: configuration.currentProduct.config.code\n        });\n        metrics.reportOutgoingUrlEvent('Library Operations', 'Collaboration', 'click', 'invite', url);\n        jumpTo(url, true);\n    }\n}\n\nexport function openHelpURL(isFlyout) {\n    const url = getLocalisedGoURL(configuration.LEARN_MORE_URL_ROOT);\n    metrics.reportOutgoingUrlEvent('Navigation', isFlyout ? 'Flyout Menu' : '', 'click', 'learn-more', url);\n    jumpTo(url, false);\n}\n\nexport function openTeamsLearnMoreURL() {\n    const url = getLocalisedGoURL(configuration.LEARN_MORE_TEAMS_URL_ROOT);\n    metrics.reportOutgoingUrlEvent('Navigation', 'Teams Onboarding', 'click', 'learn-more', url);\n    jumpTo(url, false);\n}\n\nexport function openCollaborationLearnMore() {\n    const url = getLocalisedGoURL(configuration.LEARN_MORE_COLLABORATION_URL_ROOT);\n    jumpTo(url, false);\n}\n\nexport function quotaURL() {\n    const url = getLocalisedGoURL(configuration.LEARN_MORE_QUOTA_URL_ROOT);\n    metrics.reportOutgoingUrlEvent('Navigation', 'Onboarding', 'click', 'learn-more-quota', url);\n    jumpTo(url, false);\n}\n\nexport function openLibraryManagementURL() {\n    const url = getLocalisedGoURL(configuration.LIBRARY_MANAGEMENT_URL_ROOT);\n    metrics.reportOutgoingUrlEvent('Navigation', 'Onboarding', 'click', 'library-management', url);\n    jumpTo(url, false);\n}\n\nexport function openPathViewHelpURL() {\n    const url = getLocalisedGoURL(configuration.currentProduct.config.customGroupLearnMoreLink ?? configuration.PATH_VIEW_URL_ROOT);\n    jumpTo(url, false);\n}\n\nexport function openWhatsNewURL() {\n    const url = getLocalisedGoURL(configuration.WHATS_NEW_URL_ROOT);\n    metrics.reportOutgoingUrlEvent('Navigation', 'Whats New', 'click', 'learn-more', url);\n    jumpTo(url, false);\n}\n\nexport function openTeamLibrariesURL() {\n    const url = getLocalisedGoURL(configuration.TEAM_LIBRARIES_URL_ROOT);\n    metrics.reportOutgoingUrlEvent('Navigation', 'Create library dialog', 'click', 'learn-more', url);\n    jumpTo(url, false);\n}\n\nexport function openBusinessStorageURL() {\n    const url = getLocalisedGoURL(configuration.BUSINESS_STORAGE_URL_ROOT);\n    metrics.reportOutgoingUrlEvent('Navigation', 'Business Storage', 'click', 'learn-more', url);\n    jumpTo(url, false);\n}\n\nexport function openFeedbackURL() {\n    const url = getLocalisedGoURL(configuration.FEEDBACK_URL_ROOT);\n    // TODO: determine correct metrics to send.\n    // metrics.reportOutgoingUrlEvent('Navigation', 'Feedback', 'click', 'feedback', url);\n    jumpTo(url, false);\n}\n\nexport function openContactSupportURL() {\n    const url = getLocalisedGoURL(imsInterface.getEnvironment().supportContactGoURL);\n    jumpTo(url, false);\n}\n\nexport function openServiceErrorURL(errorType) {\n    let url = getLocalisedGoURL(configuration.SERVICE_ERROR_URL_ROOT);\n    if (errorType) {\n        url = url + '#' + errorType;\n    }\n    jumpTo(url, false);\n}\n\nexport function getServiceErrorURL(errorType) {\n    let url = getLocalisedGoURL(configuration.SERVICE_ERROR_URL_ROOT);\n    if (errorType) {\n        url = url + '#' + errorType;\n    }\n    return url;\n}\n\nexport function openOfficeInstructionsURL() {\n    const url = getLocalisedGoURL(configuration.OFFICE_INSTRUCTIONS_URL_ROOT);\n    jumpTo(url, false);\n}\n\nexport function openInstallCCAppURL() {\n    const url = getLocalisedGoURL(configuration.INSTALL_CC_APP_URL_ROOT);\n    jumpTo(url, false);\n}\n\nexport function getInstallCCAppURL() {\n    return getLocalisedGoURL(configuration.INSTALL_CC_APP_URL_ROOT);\n}\n\nexport function openUpdateCCAppURL() {\n    const url = getLocalisedGoURL(configuration.UPDATE_CC_APP_URL_ROOT);\n    jumpTo(url, false);\n}\n\nexport function getUpdateCCAppURL() {\n    return getLocalisedGoURL(configuration.UPDATE_CC_APP_URL_ROOT);\n}\n\nexport function openUpdateCCLibrariesURL() {\n    const url = getLocalisedGoURL(configuration.UPDATE_CC_LIBRARIES_URL_ROOT);\n    jumpTo(url, false);\n}\n\nexport function getUpdateCCLibrariesURL() {\n    return getLocalisedGoURL(configuration.UPDATE_CC_LIBRARIES_URL_ROOT);\n}\n\nexport function openShareLibraryLinkURL(library) {\n    if (library) {\n        const url = getLibraryURL(library) + getQueryParams({\n            dialog: 'share',\n            mv: configuration.SHARE_LINK_HOST_TYPE_PARAM,\n            mv2: configuration.currentProduct.config.code\n        });\n        metrics.reportOutgoingUrlEvent('Library Operations', 'Collaboration', 'click', 'share-link', url);\n        jumpTo(url, true);\n    }\n}\n\n// XD URLS\n\nexport function openAskCollaboratorsForAccessURL() {\n    const url = getLocalisedGoURL(configuration.XD_MISSING_LINKS_ASK_FOR_ACCESS_LEARN_MORE);\n    metrics.reportOutgoingUrlEvent('ResolveBrokenLinksDialog', 'Ask collaborators for access', 'click', 'learn-more', url);\n    jumpTo(url, false);\n}\n\nexport function openMigrateXDToCCLibrariesURL() {\n    const url = getLocalisedGoURL(configuration.XD_MIGRATE_TO_CCLIBRARIES_LEARN_MORE);\n    metrics.reportOutgoingUrlEvent('ResolveBrokenLinksDialog', 'Migrate xd to cc libraries', 'click', 'learn-more', url);\n    jumpTo(url, false);\n}\n\nexport function openXDUIKitsURL() {\n    const url = getLocalisedGoURL(configuration.XD_UI_KITS_ROOT);\n    jumpTo(url, false);\n    return url; // returns url for external use in reportOutgoingUrlEvent\n}\n\n// Adobe stock related methods\n\nfunction getStockURL() {\n    return 'https://' + imsInterface.getEnvironment().stockWebHost;\n}\n\nexport function launchStockSite() {\n    const url = getStockURL() + getQueryParams(getStockJumpURLParams());\n    jumpTo(url, true, configuration.STOCK_CLIENT_ID, configuration.STOCK_TARGET_SCOPE);\n}\n\nexport function launchLicenseURL(url) {\n    jumpTo(url, false);\n}\n\nexport function launchFindSimilarURL(assetId, options) {\n    const stockParams = getStockJumpURLParams();\n    stockParams.similar_content_id = assetId;\n\n    addContentTypeParams(options, stockParams);\n    const url = getStockURL() + configuration.STOCK_SEARCH_PATH + getQueryParams(stockParams);\n    jumpTo(url, true, configuration.STOCK_CLIENT_ID, configuration.STOCK_TARGET_SCOPE);\n}\n\nexport function launchSearchStockURL(keyword, options, audioSearch = false) {\n    options = options || {};\n    const stockParams = getStockJumpURLParams();\n    stockParams.k = encodeURIComponent(keyword);\n\n    addContentTypeParams(options, stockParams);\n\n    let url = `${getStockURL()}${configuration.STOCK_SEARCH_PATH}${audioSearch ? '/audio' : ''}${getQueryParams(stockParams)}`;\n\n    metrics.reportOutgoingUrlEvent('Stock', 'Search', 'click', 'show-more', url, { ui: { filter: viewState.getStockSearchOptionValuesArray().length ? viewState.getStockSearchOptionValuesArray().join(', ') : 'none' } }, true);\n    // For loading product specific templates and Motion Graphics Templates\n    if (options.template) {\n        const productCode = configuration.currentProduct.config.code;\n        const newTemplate = configuration.STOCK_SEARCH_PRODUCT_TEMPLATE_ID_MAP[productCode];\n        if (newTemplate) {\n            newTemplate.forEach((element) => {\n                url += '&filters[template_type_id][]=' + element;\n            });\n        }\n    }\n    jumpTo(url, true, configuration.STOCK_CLIENT_ID, configuration.STOCK_TARGET_SCOPE);\n}\n\nexport function launchStockAssetURL(contentId, elementType) {\n    const isAudio = elementType === configuration.AUDIO_ELEMENT_TYPE;\n    let url = getStockURL() + '/' + contentId + getQueryParams(getStockJumpURLParams());\n    // Audio elements have a different 1-up destination due to unique nature of search experience\n    if (isAudio) {\n        url = getStockURL() + '/search/audio' + getQueryParams(getStockJumpURLParams()) + '&k=' + contentId;\n    }\n    jumpTo(url, true, configuration.STOCK_CLIENT_ID, configuration.STOCK_TARGET_SCOPE);\n}\n\nexport function launchFollowLibraryURL(linkId) {\n    const url = getPublicLibraryURL(linkId);\n    jumpTo(url, true, configuration.PUBLIC_LINK_CLIENT_ID, configuration.PUBLIC_LINK_TARGET_SCOPE);\n}\n\nexport function fetchBrowseTeamsURL() {\n    const url = getEmbeddedBrowseAllURL();\n    return getJumpUrl(url, true);\n}\n\nexport function launchStockLicenseInfoURL() {\n    const url = getLocalisedGoURL(configuration.STOCK_LICENSE_INFORMATION_URL_ROOT);\n    jumpTo(url, false);\n}\n\nexport function launchMarketplaceURL() {\n    const url = getMarketplaceURL();\n    jumpTo(url, true, configuration.STOCK_CLIENT_ID, configuration.STOCK_TARGET_SCOPE);\n}\n\nexport function launchBrowseAllURL() {\n    const url = getBrowseAllURL();\n    jumpTo(url, true);\n}\n\nexport function launchCCWebMarketplaceURL() {\n    const env = environment.imsEnvironment;\n    let url = env === 'staging' ? configuration.CCWEB_MARKETPLACE_STAGE : configuration.CCWEB_MARKETPLACE_PROD;\n    url = url.replace(/ZZZZ/, environment.getLocale());\n\n    jumpTo(url, false);\n}\n\nexport function launchLearnMoreDeleteURL() {\n    const url = getLocalisedGoURL(configuration.DELETE_HELPX_ROOT);\n    jumpTo(url, false);\n}\n\nexport function launchLearnMorePublishURL() {\n    const url = getLocalisedGoURL(configuration.PUBLISH_LEARN_MORE_ROOT);\n    jumpTo(url, false);\n}\n\nexport function expressSharingURL(isBrand, libraryAssetId) {\n    // for example https://new.express.adobe.com/your-stuff/libraries/urn:aaid:sc:US:789d133a-0668-4397-b1a1-9348908afbfa\n    const env = environment.imsEnvironment;\n    let url = env === 'staging' ? configuration.EXPRESS_STAGE : configuration.EXPRESS_PROD;\n    url = url.replace(/ZZZZ/, isBrand ? 'brands' : 'libraries');\n    url = url.replace(/XXXX/, libraryAssetId);\n    return url;\n}\n\nexport function getFloodgateURL(clientId, userEmail, userOrg) {\n    let url = configuration.FLOODGATE_URL;\n    url = url.replace(/ZZZZ/, imsInterface.getEnvironment().personalizationHost);\n    url += getQueryParams(Object.assign({ clientId },\n        userEmail ? { ISUserSelectedID: userEmail } : null,\n        userOrg ? { CommonOrgID: userOrg } : null\n    ));\n    return url;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2013 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/**\n * Adds listener manager methods to an existing object - avoids having to write the same boilerplate code everywhere\n *\n * The following methods are added:\n * * notify(eventName)\n * * hasListeners(eventName)\n * * addListener(eventName, callback, isOneTime)\n * * removeListener(eventName, callback)\n *\n * @param {Object} [obj] Object to add listener methods to.\n * @param {string[]} [eventNames] Allowed event names - calls will throw an error if the event is not in this list. If undefined,\n *                                all events are allowed.\n */\nexport function addListenerManager(obj, eventNames) {\n\n    // Local state and initialization\n    let listenerManager, returnObject;\n    if (obj) {\n        // Attach the add methods to an existing object, and just return the private methods\n        listenerManager = obj;\n        returnObject = {};\n    } else {\n        // Return a single object with everything on it (both add and apply methods)\n        listenerManager = {};\n        returnObject = listenerManager;\n    }\n\n    // map from eventName to an array of listeners\n    const listeners = {};\n\n    if (eventNames) {\n        // Only allow the given event names, if provided\n        eventNames.forEach(function(eventName) {\n            listeners[eventName] = [];\n        });\n    }\n\n    function isEventValid(eventName) {\n        return !eventNames || listeners[eventName];\n    }\n\n    /**\n     * Notify all listeners of an event\n     *\n     * @param {string} eventName Name of the event.\n     * @param {...*} args Arguments to pass on to notification listeners.\n     */\n    returnObject.notify = function(eventName, ...args) {\n        if (listeners[eventName]) {\n            // Make a copy of the listeners array, in case it changes during the callback\n            const callbacks = listeners[eventName].slice();\n\n            // Remove any one-time listeners, since we're about to call them\n            listeners[eventName] = listeners[eventName].filter(cb => !cb.isOneTime);\n\n            // Call the listeners (these may in turn call back in to remove themselves or add other listeners)\n            callbacks.forEach(callback => callback(...args));\n        }\n    };\n\n    /**\n     * Are there any listeners registered for a given event.\n     *\n     * @param {string} eventName Name of the event.\n     * @returns {boolean} Whether or not there are any listener for the given event.\n     */\n    returnObject.hasListeners = function(eventName) {\n        return listeners[eventName] && listeners[eventName].length > 0;\n    };\n\n    /**\n     * Adds a listener\n     * Note: we add these automatically to the object if provided as an argument to addListenerManager()\n     *\n     * @param {string} eventName Name of the event.\n     * @param {Function} callback Callback function when the event happens.\n     * @param {boolean} [isOneTime=false] If true, the callback will only be triggered at most once.\n     */\n    listenerManager.addListener = function(eventName, callback, isOneTime) {\n        if (!isEventValid(eventName)) {\n            throw new Error('Invalid listener event: ' + eventName);\n        }\n        listeners[eventName] = listeners[eventName] || [];\n        listeners[eventName].push(callback);\n\n        if (isOneTime) {\n            callback.isOneTime = true;\n        }\n    };\n\n    /**\n     * Removes a listener\n     *\n     * @param {string} eventName Name of the event.\n     * @param {Function} callback Callback function when the event happens.\n     */\n    listenerManager.removeListener = function(eventName, callback) {\n        if (!isEventValid(eventName)) {\n            throw new Error('Invalid listener event: ' + eventName);\n        }\n        listeners[eventName] = listeners[eventName] || [];\n        const index = listeners[eventName].indexOf(callback);\n        if (index !== -1) {\n            listeners[eventName].splice(index, 1);\n        }\n    };\n\n    // Public API: This either contains all the methods, or just the notify methods, if you passed in a service.\n    return returnObject;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport environment from 'app/js/environment';\n\n/**\n * A locale-aware sorter of elements.\n */\nexport class LocalizedSorter {\n\n    init(locale = environment.getLocale()) {\n        this._collator = new Intl.Collator(locale, {\n            numeric: true\n        });\n    }\n\n    compare(v1, v2) {\n        if (v1 === v2) {\n            return 0;\n        }\n\n        if (typeof v1 === 'string' && typeof v2 === 'string') {\n            // For strings, we need a localized comparison:\n            return this._collator.compare(v1, v2);\n        }\n\n        return v1 < v2 ? -1 : 1;\n    }\n\n    _sort(elements, getValue, isAscending) {\n        return elements.sort((e1, e2) => isAscending\n            ? this.compare(getValue(e1), getValue(e2))\n            : this.compare(getValue(e2), getValue(e1))\n        );\n    }\n\n    /**\n     * Sort an array of elements (in-place) by created time in descending order\n     * (i.e. most recent first). You can optionally override this to sort in ascending\n     * order (i.e. most recent last).\n     *\n     * @param {ElementModel[]} elements\n     * @param {boolean} [isAscending=false] whether to sort in ascending order\n     */\n    sortByCreated(elements, isAscending = false) {\n        return this._sort(elements, e => e.created, isAscending);\n    }\n\n    /**\n     * Sort an array of elements (in-place) by modified time in descending order\n     * (i.e. most recent first). You can optionally override this to sort in ascending\n     * order (i.e. most recent last).\n     *\n     * @param {ElementModel[]} elements\n     * @param {boolean} [isAscending=false] whether to sort in ascending order\n     */\n    sortByModified(elements, isAscending = false) {\n        return this._sort(elements, e => e.modified, isAscending);\n    }\n\n    /**\n     * Sort an array of libraries/elements (in-place) by name, locale-aware.\n     *\n     * @param {LibraryModel[]|ElementModel[]} items\n     * @param {boolean} [isAscending=true] whether to sort in ascending order\n     */\n    sortByName(items, isAscending = true) {\n        return this._sort(items, l => l.name, isAscending);\n    }\n\n    /**\n     * Sort an array of groups by order.\n     * @param {GroupModel[]} groups\n     */\n    sortByOrder(groups) {\n        return groups.sort((a, b) => a.order < b.order ? -1 : (a.order > b.order ? 1 : 0));\n    }\n\n    /**\n     * Sort an array of elements by their order within the given group\n     * @param {GroupModel} group\n     * @param {ElementModel[]} elements\n     */\n    sortByOrderInGroup(group, elements) {\n        return elements.sort((a, b) => {\n            const aGroupOrder = a.getOrderInGroup && a.getOrderInGroup(group);\n            const bGroupOrder = b.getOrderInGroup && b.getOrderInGroup(group);\n            return aGroupOrder < bGroupOrder ? -1 : (aGroupOrder > bGroupOrder ? 1 : 0);\n        });\n    }\n}\n\nexport default new LocalizedSorter();\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2018 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\n// Utilities for context menu\n\nimport libraryManager from 'app/js/managers/libraryManager';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport layerSelectionManager from 'app/js/managers/layerSelectionManager';\n\n/**\n * Add the menu items specified by the group parameter to the ones in\n * menuItems. If the menuItems already contain some items and group is\n * not empty, also add a divider.\n *\n * @param {Array} menuItems menu items to which a group will be added\n * @param {Array} group the group that will added\n * @param {boolean} addDivider whether to add a divider before the group.\n */\nexport function pushMenuGroup(menuItems, group, addDivider = true) {\n    group = group.filter(x => x);\n    if (group.length > 0) {\n        if (menuItems.length > 0 && addDivider) {\n            menuItems.push({ divider: true });\n        }\n        menuItems.push.apply(menuItems, group);\n    }\n}\n\nexport function getAddMenuItems(elementAddCallback, workflow) {\n    const layerInfo = layerSelectionManager.getLayerInfo();\n    if (!layerInfo) {\n        return [];\n    }\n\n    const menuItems = [];\n    // getAddOperations also checks for space for 1 element\n    const addOperations = elementConfiguration.getAddOperations(layerInfo, libraryManager.currentLibrary);\n\n    const formatMenuItem = (op) => {\n        return {\n            label: op.name,\n            onClick: () => {\n                if (op.interactive) {\n                    op.apply(elementAddCallback);\n                    return;\n                }\n                op.apply(libraryManager.currentLibrary, workflow).then(elements => {\n                    elements = Array.isArray(elements) ? elements : [ elements ];\n                    elementAddCallback && elementAddCallback(elements, workflow);\n                });\n            },\n            divider: op.divider,\n            icon: op.icon,\n            style: op.style\n        };\n    };\n\n    // Move all operations with the interactive flag to a separate array to push as a separate group in the menu\n    const interactiveOperations = addOperations.filter(op => op.interactive).map((op) => formatMenuItem(op));\n    const nonInteractiveOps = addOperations.filter(op => !op.interactive).map((op) => formatMenuItem(op));\n\n    pushMenuGroup(menuItems, interactiveOperations);\n    pushMenuGroup(menuItems, nonInteractiveOps);\n\n    if (nonInteractiveOps.length > 1) {\n        menuItems.push({\n            label: 'DL_ADD_ALL',\n            icon: 'Add',\n            onClick: () => Promise.all(nonInteractiveOps.map(op => op.onClick(libraryManager.currentLibrary, workflow)))\n        });\n    }\n    return menuItems;\n}\n","import dialogManager from 'app/js/managers/dialogManager';\nimport { isCapturePresentInAddMenu } from 'app/js/utils/captureUtils';\nimport { observable } from 'mobx';\n\nconst TRANSITIONS = {\n    init: { 'click-add-button': 'onboarding' },\n    onboarding: {},\n    end: {}\n};\n\nexport default class CaptureOnboardingWorkflow {\n    name = 'CaptureOnboarding';\n\n    @observable _state = 'init';\n\n    notifyAction(action) {\n        this._state = TRANSITIONS[this._state][action] || 'end';\n        if (this._state === 'onboarding' && isCapturePresentInAddMenu()) {\n            dialogManager.openDialog('captureOnboardingPopover');\n        } else {\n            dialogManager.closeDialog();\n        }\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport libraryManager from 'app/js/managers/libraryManager';\nimport libraryProcessManager from 'app/js/managers/libraryProcessManager';\nimport viewState from 'app/js/state/viewState';\nimport dialogManager from 'app/js/managers/dialogManager';\nimport CaptureOnboardingWorkflow from 'app/js/components/onboarding/CaptureOnboardingWorkflow';\nimport { isCaptureEnabled } from 'app/js/utils/captureUtils';\nimport * as LibraryUtils from 'app/js/utils/libraryUtils';\nimport configuration from 'app/js/config/configuration';\nimport { when, reaction } from 'mobx';\nimport { translate } from 'app/js/managers/translationManager';\nimport appState from 'app/js/appState';\nimport HTMLText from 'app/js/components/HTMLText';\nimport { openPathViewHelpURL } from 'app/js/utils/linkUtils';\n\n// All onboarding popovers that will display in the Library elements view\nconst LIBRARY_ONBOARDING_TYPES = {\n    firstEnteredLibrary: { check: _shouldShowFirstEnteredLibraryOnboarding, start: _showFirstEnteredLibraryOnboarding },\n    groupsPathView: { check: _shouldShowGroupsOnboardingInLibraryView, start: showGroupsOnboarding },\n    capture: { check: _shouldShowCaptureOnboarding, start: _showCaptureOnboarding },\n    quotaUpdate: { check: _shouldShowQuotaOnboarding, start: _showQuotaOnboarding }\n};\n\n// All onboarding popovers that will display in the panel Root view\nconst ROOT_ONBOARDING_TYPES = {\n    panelRootOnboarding: { check: shouldShowRootIntroOnboarding, start: _showRootIntroOnboarding },\n    quotaUpdate: { check: _shouldShowQuotaOnboarding, start: _showQuotaOnboarding }\n};\n\n// All onboarding popovers that will display relating to Team Libraries\n// Point products only - teamLibraryOneUpPanel\n// CCD only - teamsLibraryOpen, teamsLibraryCreate\nconst TEAM_LIBRARIES_ONBOARDING_TYPES = [ 'teamLibraryOneUpPanel', 'teamsLibraryOpen', 'teamsLibraryCreate' ];\n\nconst ROOT_ONBOARDING_TIMEOUT_SECONDS = 5;\n\n// Therefore you should only call any of the \"showOnboarding\" functions after libraryManager.loaded.\nfunction _getSettingsKey(type) {\n    const userId = libraryManager.userId;\n    return `${userId}#onboarding#${type}`;\n}\n\nfunction _getOnboardingState(type) {\n    return libraryProcessManager.getLocalMachineSetting(_getSettingsKey(type));\n}\n\nasync function _setOnboardingState(type, value) {\n    await libraryProcessManager.setLocalMachineSetting(_getSettingsKey(type), value);\n}\n\nfunction _shouldShowFirstEnteredLibraryOnboarding() {\n    // show if not in root view and library is writable\n    return !viewState.isRootView() && !viewState.isOneUpMode() && libraryManager.currentLibrary.isWritable;\n}\n\nfunction _showFirstEnteredLibraryOnboarding() {\n    const isNewUserTour = _getOnboardingState('newUserRoot') === 'shown';\n    if (isNewUserTour) {\n        viewState.setTourInProgress(true);\n    }\n    const onClose = () => {\n        if (isNewUserTour) {\n            markOnboardingViewed('groupsPathView');\n        }\n        showLibraryOnboarding();\n    };\n\n    dialogManager.openDialog('firstEnteredLibraryOnboardingPopoverTour', { isNewUserTour }, onClose);\n}\n\nfunction _shouldShowGroupsOnboardingInLibraryView() {\n    const ownedLibraries = libraryManager.libraries.filter(library => !library.collaboration || library.collaboration === 'outgoing');\n    const hasElements = ownedLibraries.some(library => library.elements.length > 1);\n    return hasElements && shouldShowGroupsOnboarding();\n}\n\nexport function shouldShowGroupsOnboarding() {\n    if (viewState.viewByState !== configuration.VIEW_BY_MODES.GROUP || viewState.isRootView()) {\n        return false;\n    }\n\n    return _getOnboardingState('groupsPathView') !== 'shown';\n}\n\nexport function showGroupsOnboarding() {\n    if (shouldShowGroupsOnboarding()) {\n        dialogManager.openDialog('pathViewOnboarding', {}, showLibraryOnboarding);\n    }\n}\n\nfunction _shouldShowCaptureOnboarding() {\n    return isCaptureEnabled() && !viewState.isNewUserState() && !viewState.isRootView();\n}\n\nfunction _showCaptureOnboarding() {\n    viewState.setCurrentWorkflow(new CaptureOnboardingWorkflow());\n}\n\nexport function showLibraryOnboarding() {\n    if (configuration.currentProduct.config.disableOnboarding) {\n        return;\n    }\n    const onboardingType = getLibraryOnboardingState();\n    if (onboardingType) {\n        LIBRARY_ONBOARDING_TYPES[onboardingType].start();\n    }\n}\n\nexport function getRootOnboardingState() {\n    return Object.keys(ROOT_ONBOARDING_TYPES).find(type => _getOnboardingState(type) !== 'shown' && ROOT_ONBOARDING_TYPES[type].check());\n}\n\nexport function getLibraryOnboardingState() {\n    return Object.keys(LIBRARY_ONBOARDING_TYPES).find(type => _getOnboardingState(type) !== 'shown' && LIBRARY_ONBOARDING_TYPES[type].check());\n}\n\n// Warning: This is async, so you must await it before checking the result!\nexport async function markOnboardingViewed(type) {\n    // Persist the fact that this onboarding has been shown, so that it doesn't get shown again\n    if (!_getOnboardingState(type)) { // Don't re-write if it's already present\n        await _setOnboardingState(type, 'shown');\n    }\n}\n\nexport function resetOnboardingState() {\n    // Note: To clear the state, we _must_ set it to null, not undefined - otherwise the setting will get\n    // stripped when serialized and sent to the process.\n    _setOnboardingState('newUserRoot', null);\n    _setOnboardingState('librariesManager', null);\n    _setOnboardingState('deleteNestedGroupContents', null);\n    _setOnboardingState('pathViewEditToast', null);\n    _setOnboardingState('treeViewEditToast', null);\n    _setOnboardingState('projectsBanner', null);\n\n    Object.keys(LIBRARY_ONBOARDING_TYPES).forEach(type => _setOnboardingState(type, null));\n    Object.keys(ROOT_ONBOARDING_TYPES).forEach(type => _setOnboardingState(type, null));\n    TEAM_LIBRARIES_ONBOARDING_TYPES.forEach(type => _setOnboardingState(type, null));\n}\n\nexport function resetManagerOnboardingState() {\n    _setOnboardingState('librariesManager', null);\n}\n\n// Note, we're adding this function for unit tests to receive ALL onboarding flags as already viewed\n// Eg: In libraryManager.spec.js, we want all flags as viewed before each unit test.\n// We can reset it anytime by calling resetOnboardingState()\nexport function markAllOnboardingViewed() {\n    _setOnboardingState('newUserRoot', 'shown');\n    _setOnboardingState('librariesManager', 'shown');\n    _setOnboardingState('deleteNestedGroupContents', 'shown');\n    _setOnboardingState('pathViewEditToast', 'shown');\n    _setOnboardingState('treeViewEditToast', 'shown');\n\n    Object.keys(LIBRARY_ONBOARDING_TYPES).forEach(type => _setOnboardingState(type, 'shown'));\n    Object.keys(ROOT_ONBOARDING_TYPES).forEach(type => _setOnboardingState(type, 'shown'));\n    TEAM_LIBRARIES_ONBOARDING_TYPES.forEach(type => _setOnboardingState(type, 'shown'));\n}\n\nexport function shouldShowManagerOnboarding() { // exported for tests\n    // This is an observable result due to the local settings change notifications\n    return _getOnboardingState('librariesManager') !== 'shown';\n}\n\nexport function shouldShowProjectsBannerOnboarding() {\n    return _getOnboardingState('projectsBanner') !== 'shown';\n}\n\nexport function showManagerOnboarding(context) {\n    if (shouldShowManagerOnboarding()) {\n        context.dialogManager.openDialog('managerOnboardingPopoverTour');\n    }\n}\n\nexport function shouldShowDeleteNestedGroupContents() {\n    const seenAlready = _getOnboardingState('deleteNestedGroupContents');\n    return seenAlready !== 'shown';\n}\n\nexport function showDeleteNestedGroupContents(groups) {\n    if (shouldShowDeleteNestedGroupContents()) {\n        dialogManager.openDialog('confirm', {\n            title: translate('DL_DELETE_NESTED_TITLE'),\n            message: translate('DL_DELETE_NESTED_MESSAGE'),\n            okText: translate('DL_DELETE'),\n            hasDismissCheckbox: 'deleteNestedGroupContents', // key to persist in settings if user selects 'do not show this again'\n            onClickOK: () => libraryManager.deleteGroups(groups, { deleteContents: true, checkForDependents: false, hasSeenWarning: true })\n        });\n    }\n}\n\nexport function showRootViewOnboarding() {\n    if (configuration.currentProduct.config.disableOnboarding) {\n        return;\n    }\n    const onboardingType = getRootOnboardingState();\n    if (onboardingType) {\n        ROOT_ONBOARDING_TYPES[onboardingType].start();\n    }\n}\n\nexport function shouldShowRootIntroOnboarding() {\n    return !configuration.currentProduct.config.disableOnboarding && _getOnboardingState('panelRootOnboarding') !== 'shown' && !configuration.currentProduct.config.mustHaveCurrentLibrary;\n}\n\nfunction _showRootIntroOnboarding() {\n    // We have this timer in order to make sure the root onboarding view doesn't pop up in the middle of the user working\n    const timeoutTimerStart = Date.now();\n    when(() => [ 'ok', 'syncing' ].includes(libraryManager.syncStatus.state), () => {\n        const timeoutTimerEnd = Date.now();\n        const timeoutTimeElapsed = timeoutTimerEnd - timeoutTimerStart;\n        if (timeoutTimeElapsed <= (ROOT_ONBOARDING_TIMEOUT_SECONDS * 1000)) {\n            if (viewState.isRootView()) {\n                dialogManager.openDialog('rootViewOnboardingPopover', {}, showRootViewOnboarding);\n            }\n        }\n    });\n}\n\nfunction _shouldShowCCDTeamsOneUpOnboarding() {\n    if (!configuration.currentProduct.config.showCCDTeamsOnboarding) {\n        return false;\n    }\n    const seenAlready = _getOnboardingState('teamsLibraryOpen') === 'shown';\n    return !viewState.isRootView() && !viewState.isOneUpMode() && LibraryUtils.isTeamLibrary(libraryManager.currentLibrary) && !seenAlready;\n}\n\nexport function showCCDTeamsOneUpOnboarding() {\n    if (_shouldShowCCDTeamsOneUpOnboarding()) {\n        dialogManager.openDialog('teamsLibraryCCDOneUpOnboardingDialog');\n    }\n}\n\nexport function shouldShowCCDTeamsLibraryCreateOnboarding() {\n    return LibraryUtils.isTeamLibrariesEnabled() && _getOnboardingState('teamsLibraryCreate') !== 'shown';\n}\n\nexport async function showCCDTeamsLibraryCreateOnboarding(onCreate, onClose) {\n    if (!shouldShowCCDTeamsLibraryCreateOnboarding()) {return;}\n    await markOnboardingViewed('teamsLibraryCreate'); // causes re-render flicker in CCD so needs to finish before dialog opens\n    viewState.setRemoveDialogPadding(true);\n    dialogManager.openDialog('teamsLibraryCreateCCDOnboardingDialog', { removePadding: true, onCreate, onClose });\n}\n\nexport function _shouldShowPanelTeamLibraryOneUpOnboarding() {\n    if ((configuration.currentProduct.config.disableOnboarding && !configuration.currentProduct.config.showTeamsOnboarding) || configuration.currentProduct.config.disableCCDTeamsOneUpOnboarding) {\n        return;\n    }\n    const seenAlready = _getOnboardingState('teamLibraryOneUpPanel') === 'shown';\n    return !viewState.isRootView() && !viewState.isOneUpMode() && LibraryUtils.isTeamLibrary(libraryManager.currentLibrary) && !seenAlready;\n}\n\nexport function showPanelTeamLibraryOneUpOnboarding() {\n    if (_shouldShowPanelTeamLibraryOneUpOnboarding()) {\n        dialogManager.openDialog('panelTeamLibraryOneUpOnboardingPopover');\n    }\n}\n\nfunction _shouldShowQuotaOnboarding() {\n    return _getOnboardingState('quotaUpdate') !== 'shown';\n}\n\nfunction _showQuotaOnboarding() {\n    // eslint-disable-next-line prefer-const\n    let disposeLibraryWatcher, disposeQuotaWatcher;\n\n    const cancelWatchers = () => {\n        disposeLibraryWatcher && disposeLibraryWatcher();\n        disposeQuotaWatcher && disposeQuotaWatcher();\n    };\n\n    const showDialog = () => {\n        cancelWatchers();\n\n        const userQuota = libraryManager.userQuota;\n        const totalLibrariesSize = libraryManager.storageUsed;\n\n        const percentUsedWithLibraries = ((userQuota.storage_used + totalLibrariesSize) / userQuota.storage_quota) * 100;\n        if (percentUsedWithLibraries >= configuration.QUOTA_WARNING_THRESHOLD) {\n            dialogManager.openDialog('quotaWarningPopover', {}, viewState.isRootView() ? showRootViewOnboarding : showLibraryOnboarding);\n        }\n    };\n\n    disposeQuotaWatcher = when(() => !!(libraryManager.userQuota), showDialog);\n    // When changes to/from root view, we cancel the quota watcher so that the quota onboarding\n    // step in the rootview doesnt show up once the user navigates to a library\n    disposeLibraryWatcher = reaction(() => viewState.isRootView(), cancelWatchers);\n}\n\nfunction _shouldShowPathEditOnboardingToast(viewByGroupMode) {\n    return _getOnboardingState(`${viewByGroupMode}ViewEditToast`) !== 'shown';\n}\n\nexport function showPathEditOnboardingToast(viewByGroupMode) {\n    viewByGroupMode = viewByGroupMode.toLowerCase();\n    if (!_shouldShowPathEditOnboardingToast(viewByGroupMode)) {\n        return;\n    }\n    const toastMessage = viewByGroupMode === configuration.VIEW_BY_GROUP_MODES.PATH\n        ? translate('DL_GROUP_PATH_VIEW_EDIT_TOAST_MESSAGE')\n        : <HTMLText linkClickMethods={{ learnMore: () => openPathViewHelpURL() }} html={translate('DL_GROUP_TREE_VIEW_EDIT_TOAST_MESSAGE')}/>;\n\n    appState.panel.toastManager.openToast('message', { message: toastMessage });\n    markOnboardingViewed(`${viewByGroupMode}ViewEditToast`);\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2019 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport debugLog from './debugLog';\n\n/**\n * The purpose of the performance timer is to track the duration of an action.\n * This workflow can be done inline by invoking done() on the object, or the object\n * can be retrieved from the registry and the workflow can be completed in unrelated\n * code.\n */\nexport class PerformanceTimer {\n    _startTime = Date.now();\n\n    constructor(name) {\n        this._name = name;\n\n        this._timeout = setTimeout(() => {\n            // If this task isn't done in an hour, remove the timer to prevent a memory leak.\n            debugLog.log(`[PERFORMANCE] Metric: ${this._name}, Duration: Max time reached (1hr)`);\n        }, 3600000);\n    }\n\n    done() {\n        debugLog.log(`[PERFORMANCE] Metric: ${this._name}, Duration: ${Date.now() - this._startTime}ms`);\n        clearTimeout(this._timeout);\n    }\n}\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2018 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\nexport function delay(timeout, callback = () => {}) {\n    return new Promise((resolve) => {\n        setTimeout(() => {\n            resolve(callback());\n        }, timeout);\n    });\n}\n\n/**\n * Take a promise returning function and return a function returns a promise and is debounced.\n *\n * The debounced function will only invoke the original function if at least <timeout> milliseconds\n * elapsed since it was last called.\n *\n * @param {number} timeout if function wasn't called in the last <timeout> ms, execute it\n * @param {Function} fn the function to be debounced\n * @returns {Function} the wrapped function\n */\nexport function debounce(timeout, fn) {\n    let pending;\n\n    return (...args) => {\n        return new Promise((resolve, reject) => {\n            if (pending) {\n                clearTimeout(pending);\n            }\n\n            pending = setTimeout(() => {\n                fn(...args).then(resolve, reject);\n                pending = undefined;\n            }, timeout);\n        });\n    };\n}\n\n/**\n * Given a time, retryCount and a predicate function will try to run the given function\n * up to retryCount + 1 times (e.g. first time when invoked and then up to retryCount times\n * if the function returns a falsy value).\n *\n * Returns a promise that resolves with the truthy value or rejects with the last falsy\n * value when the retry count is reached.\n *\n * @typedef {function(any): Promise} Predicate\n * @param {number} timeout the amount of milliseconds to wait between retries\n * @param {number} retryCount the number of times to try again if the initial call fails\n * @param {Predicate} fn a synchronous or asynchronous predicate to be invoked upon each retry.\n * @returns {Promise}\n */\nexport async function retry(timeout, retryCount, fn) {\n    const result = await fn();\n\n    if (result) {\n        return Promise.resolve(result);\n    }\n\n    if (retryCount <= 0) {\n        return Promise.reject(result);\n    }\n\n    return delay(timeout)\n        .then(() => {\n            return retry(timeout, retryCount - 1, fn);\n        });\n}\n\n/**\n * This version of throttle both expects a promise callback and will return a promise from the throttle wrapper function.\n * Note that it will execute the promise callback only if the last call was more than ms ago.\n * It does not, however, schedule another run of the function after waiting ms, if it doesn't run.\n * @param {function(): Promise} promiseFn The promise callback that we are throttling\n * @param {number} ms The number of milliseconds that need to have passed if this will run\n * @returns {Function} Throttled wrapper for the promise\n */\nexport function throttle(promiseFn, ms) {\n    let inProgress, lastFinished;\n\n    return function(...args) {\n        if (!inProgress && (!lastFinished || lastFinished < Date.now() - ms)) {\n            inProgress = true;\n            return promiseFn(...args).finally(() => {\n                lastFinished = Date.now();\n                inProgress = false;\n            });\n        }\n\n        return Promise.resolve(); // simply resolve, rather than scheduling a call after a wait\n    };\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport elementConfiguration from 'app/js/config/elementConfiguration';\n\n/* Searching for Elements */\n\n// Returns true if element matches any string in the keywords array\nconst _elementMatchesSearchQuery = keywords => element => {\n    const searchFn = elementConfiguration.getElementSearchFunction(element.type);\n    return searchFn(element, keywords);\n};\n\nfunction _stripQuotesAndTrim(text) {\n    if (text.charAt(0) === '\"' && text.charAt(text.length - 1) === '\"') {\n        // Note that we do not trim again, so we respect the search for white space if in quotes.\n        return text.substring(1, text.length - 1);\n    }\n    return text;\n}\n\n/**\n * Check is search text is empty\n * @param {string} searchText\n * @returns {boolean}\n */\nexport function isSearchTextEmpty(searchText) {\n    searchText = searchText && searchText.trim().toLowerCase() && _stripQuotesAndTrim(searchText);\n    return !searchText;\n}\n\n/**\n * Turns the search text into an array of strings\n * @param {string} searchText\n * @returns {string[]}\n */\nfunction _getKeywords(searchText) {\n    searchText = searchText && searchText.trim().toLowerCase();\n    if (!searchText) { return []; }\n\n    let keywords;\n    // If quotes are used, the whole phrase is the keyword\n    if (searchText.length > 2 && searchText.charAt(0) === '\"' && searchText.charAt(searchText.length - 1) === '\"') {\n        keywords = [ searchText.substring(1, searchText.length - 1) ];\n    // Else separate search text into separate keywords, to be matched in any order\n    } else if (searchText.indexOf(' ') > -1 || searchText.indexOf('/') > -1) {\n        keywords = searchText.split(/[ /]+/);\n    } else {\n        keywords = [ searchText ];\n    }\n\n    return keywords;\n}\n\n/**\n * Search for elements that match the provided keywords in any of these libraries.\n * @param {string} searchText\n * @param {LibraryModel[]} libraries\n * @returns {ElementModel[]}\n */\nexport function findMatchingElements(searchText, libraries) {\n    if (!libraries || !Array.isArray(libraries) || !libraries.length || !searchText) { return []; }\n    const keywords = _getKeywords(searchText);\n    if (keywords.length === 0) { return []; }\n\n    // IMPORTANT: Since search needs to be fast, we call library.filterElements that does\n    // the search on the raw (unwrapped) library elements. This is because the search code\n    // accesses the element representations, so it's slow if we have to create a lot of wrappers.\n    const predicate = _elementMatchesSearchQuery(keywords);\n    let filteredElements = [];\n    libraries.forEach(library => filteredElements = filteredElements.concat(library.getFilteredElements(predicate)));\n\n    return filteredElements;\n}\n\n/**\n * Search for libraries that match the provided keywords.\n * @param {string} searchText\n * @param {LibraryModel[]} libraries\n * @returns {LibraryModel[]}\n */\nexport function findMatchingLibraries(searchText, libraries) {\n    if (!libraries || !Array.isArray(libraries) || !searchText) { return []; }\n    const keywords = _getKeywords(searchText);\n    if (keywords.length === 0) { return []; }\n    // When searching libraries, the name is our only current index.\n    // This could change in the future so refer to `search()` in app/js/config/elements/BaseElementConfig.js\n    // for a reference on searching over multiple fields.\n    return libraries.filter(library => {\n        const name = library.name.toLowerCase();\n        // Use a loop to avoid creating functions while searching\n        for (let i = 0; i < keywords.length; i++) {\n            const searchString = keywords[i];\n            const matches = name.includes(searchString);\n            if (!matches) {\n                return false;\n            }\n        }\n        // Has to match _all_ the searchStrings, to be a match!\n        return true;\n    });\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport punycode from 'punycode';\nimport environment from 'app/js/environment';\nimport configuration from 'app/js/config/configuration';\nimport { measureTextDimensions } from './DOMUtils';\nimport HTMLText from 'app/js/components/HTMLText';\n\n// General utilities for string-related operations\n\n/**\n * Truncate a string to a certain number of characters (ending in ellipsis).\n * This is unicode-safe, so it won't split multi-byte characters.\n *\n * @param {string} str - String to truncate\n * @param {number} maxLength - Maximum number of characters.\n * @param {boolean} [ellipses=true]\n * @returns {string} The truncated name.\n */\nexport function truncateString(str, maxLength, ellipses = true) {\n    const trailingChars = ellipses ? '...' : '';\n    // Javascript string.length, string.slice does not work correctly for certain unicode characters\n    // See https://mathiasbynens.be/notes/javascript-unicode\n    return str.length <= maxLength ? str : (punycode.ucs2.encode(punycode.ucs2.decode(str).slice(0, maxLength)) + trailingChars);\n}\n\n/**\n * Truncate a path to fit within a certain width in pixels, preserving individual entries.\n *\n * @param {string[]} entries - Entries that make up the path to truncate.\n * @param {Object} options\n * @property {number} options.maxWidth // Maximum width in pixels characters.\n * @property {boolean} options.className // Optional className to apply when calculating width.\n * @returns {string} The truncated name.\n */\nexport function truncatePath(entries, options) {\n    const path = entries.join(configuration.PATH_VIEW_GROUP_SEPARATOR);\n    const { maxWidth, className } = options;\n    // Nothing to enforce.\n    if (!maxWidth || entries.length === 1) { return path; }\n\n    // Measure Entry A / Entry B / Entry C / Entry D'\n    const { width } = measureTextDimensions(path, className);\n    if (width >= maxWidth) {\n        // Check if we've already started collapsing entries.\n        const collapsed = entries[1] === '...';\n        if (entries.length === 2 || (collapsed && entries.length === 3)) {\n            // 'Entry A / Entry D' or 'Entry A / ... / Entry D'\n            // We've truncated all we can, just return the head entry preceded by an ellipsis.\n            // i.e '... / Entry D'\n            return [ '...', entries[entries.length - 1] ].join(configuration.PATH_VIEW_GROUP_SEPARATOR);\n        }\n        // Overflow - truncate starting from the second entry.\n        // i.e. 'Entry A / ... / Entry C / Entry D'\n        return truncatePath([ entries[0], '...', ...entries.slice(collapsed ? 3 : 2) ], options);\n    }\n    return path;\n}\n\n/**\n * Calculates the length of a string in terms of number of unicode characters.\n *\n * @param {string} str string to compute the length of.\n * @returns {number} The number of unicode characters in the string.\n */\nexport function getStringLength(str) {\n    return punycode.ucs2.decode(str).length;\n}\n\n/**\n * Converts some number of milliseconds into a time string formatted as \"minutes:seconds\".\n *\n * @param {number} milliseconds to be converted\n * @returns {string} string with milliseconds converted into minutes:seconds\n */\nexport function millisecondsToMinutesAndSeconds(milliseconds) {\n    const minutes = Math.floor(milliseconds / 60000);\n    const seconds = ((milliseconds % 60000) / 1000).toFixed(0);\n    return minutes + ':' + (seconds < 10 ? '0' : '') + seconds;\n}\n\n/**\n * Approximates the time needed for a user to read the given string. Useful to determine the duration of toasts and messages.\n * The heuristic is length of string * x ms (depending on locale - default is 50ms) - with a minimum default time\n * @param {string} string to be converted\n * @returns {number} milliseconds needed to read the string.\n */\nexport function timeToReadString(string) {\n    // Some toasts render complex messages that include React components, use the default timeout for those.\n    if (!string.length) { return configuration.DEFAULT_TOAST_TIMEOUT; }\n    const locale = environment.getLocale();\n    const displayTimePerCharacter = configuration.DISPLAY_TIME_PER_CHARACTER[locale] || configuration.DISPLAY_TIME_PER_CHARACTER['en-US'];\n    return Math.max(string.length * displayTimePerCharacter, configuration.DEFAULT_TOAST_TIMEOUT);\n}\n\n/** Utility - ensures that the given string is in the range given by [upper, lower],\n * according to the JavaScript string comparison (lexicographical ordering).\n * It will return the string if it's already within the range, otherwise it will\n * truncate to the upper or lower bound.\n * @param {string} str\n * @param {string} lower\n * @param {string} upper\n * @returns {string}\n */\nfunction ensureStringBetween(str, lower, upper) {\n    str = str < lower ? lower : str;\n    str = str > upper ? upper : str;\n    return str;\n}\n\n// Utility - find a character half-way in between the given characters. e.g.:\n// charBetween('a', 'z') = 'n'\n// charBetween('a', 'c') = 'b'\nfunction getCharBetween(char1, char2) {\n    return String.fromCharCode(Math.round((char1.charCodeAt(0) + char2.charCodeAt(0)) / 2));\n}\n\n// Upper and lower-bounds on valid order strings:\n// Strings matching [a-z]+ must be greater than 'a' and less than '{'\nconst LOWER_ORDER = 'a';\nconst UPPER_ORDER = '{';\nconst ORDER_REGEXP = /^[a-z]*[b-z][a-z]*$/; // [a-z]+, excluding a+\n\n/**\n * Returns true if the given string is a valid order string\n * Order strings must match the regular expression [a-z]+, and not match the regular expression a+\n *\n * @param {string} str\n * @returns {boolean} whether the string is a valid order\n */\nexport function isValidOrderString(str) {\n    return typeof str === 'string' && ORDER_REGEXP.test(str);\n}\n\n/**\n * Returns a string that's in between the given two strings (but not equal to either of them),\n * according to the JavaScript string comparison (lexicographical ordering).\n *\n * It tries to find a string that's half-way between the given end-points. This is used for\n * calculating order fields, e.g. for user ordering of groups, and elements within groups.\n *\n * Order strings must match the regular expression [a-z]+, and not match the regular expression a+\n * Assuming that the inputs are of this form, the outputs will also be.\n * (We don't allow a string with all 'a's as an order, because there are only finitely many strings\n * above it lexicographically, if we stay within the characters [a-z]).\n *\n * @param {string} str1\n * @param {string} str2\n * @returns {string}\n */\nexport function getOrderStringBetween(str1, str2) {\n    str1 = ensureStringBetween(str1 || LOWER_ORDER, LOWER_ORDER, UPPER_ORDER);\n    str2 = ensureStringBetween(str2 || UPPER_ORDER, LOWER_ORDER, UPPER_ORDER);\n\n    // If the strings are equal, not much we can do - there is no string in between them, so\n    // just return the first\n    if (str2 === str1) {\n        return str1;\n    }\n\n    // The algorithm assumes that str1 < str2, so swap over if not\n    if (str2 < str1) {\n        const t = str1;\n        str1 = str2;\n        str2 = t;\n    }\n\n    for (let i = 0; i < str1.length; i++) {\n        const char1 = str1[i];\n        const char2 = str2[i];\n\n        if (!char2 || char1 < char2) {\n            // we try finding a new character in between char1 and char2\n            const middleChar = getCharBetween(char1, char2);\n            if (middleChar === char2) {\n                // There's no space between char1 and char2, so we need to use up to char1,\n                // plus a suffix that lies between the remaining characters and the max string\n                return str1.substring(0, i + 1) + getOrderStringBetween(str1.substring(i + 1), '{');\n            }\n\n            // We've found a new string that's greater than str1, but less than str2, so we're done!\n            return str1.substring(0, i) + middleChar;\n        }\n    }\n\n    // If we reach here, then str1 is a prefix of str2, so we just need to add a suffix to add onto str1,\n    // that's less than the remaining part of str2.\n    return str1 + getOrderStringBetween(LOWER_ORDER, str2.substring(str1.length));\n}\n\n/**\n * Returns an array of order strings that are (roughly) evenly spaced out between [str1, str2].\n * This can be used if you have an array of elements in order, and want to give them all orders that respect\n * their index in the array - by evenly spacing out the order strings, we can avoid order strings\n * getting too long as elements get dragged around and reordered.\n *\n * @param {number} num - number of strings to return\n * @param {string} str1 -  lower-bounding order string\n * @param {string} str2 - upper-bounding order string\n * @returns {string[]} array of order strings\n */\nexport function getMultipleOrderStringsBetween(num, str1, str2) {\n    if (num === 0) {\n        return [];\n    }\n\n    // We recursively split the space into three, such that lowerNum + 1 + upperNum === num\n    // Then, we can make more strings recursively - it'll be O(n log n)\n    const middle = getOrderStringBetween(str1, str2);\n    const lowerNum = Math.floor(num / 2);\n    const upperNum = num - lowerNum - 1;\n\n    const lowerStrings = getMultipleOrderStringsBetween(lowerNum, str1, middle);\n    const upperStrings = getMultipleOrderStringsBetween(upperNum, middle, str2);\n\n    return lowerStrings.concat([ middle ]).concat(upperStrings);\n}\n\n/**\n * Returns a string safe to use as file name\n *\n * @param {string} str - original fileName\n * @param {string} defaultResult - default file name\n * @returns {string} safe file name\n */\nexport function makeSafeFilename(str, defaultResult) {\n    str = str.replace(/[<>:\"/\\\\|?*\\x00-\\x1F]/g, '_').trim();\n    return str || defaultResult;\n}\n\n/**\n * Returns a string safe to use as in HTML\n *\n * @param {string} str - original string\n * @returns {string} html safe string\n */\nexport function encodeStringForHTML(str) {\n    return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;').replace(/'/g, '&#39;');\n}\n\n// Format sharesheet toast messages.\n// https://git.corp.adobe.com/CCX/ccx-sharing/blob/main/packages/component-react/integration.md#toast-messages\nexport function formatShareSheetToast(toastData) {\n    const { message, actions } = toastData;\n    if (actions && actions.validationNeeded) {\n        const { delimiter, href, text } = actions.validationNeeded;\n        const formattedText = `<a href=\"${href}\">${text}</a>`;\n        const formattedMessage = message.replace(delimiter, formattedText);\n        return <HTMLText className=\"panel-toast-sharesheet-message\" html={formattedMessage} />;\n    }\n    return message;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2016 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { translate } from 'app/js/managers/translationManager';\nimport { convertFontSizeUnits } from 'app/js/utils/unitUtils';\nimport * as ColorUtils from 'app/js/utils/colorUtils';\nimport configuration from 'app/js/config/configuration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport TextStyleElementView from 'app/js/components/elements/TextStyleElementView';\n\n// Translations for character style properties and values.\nlet _StyleStrings;\nfunction _getStrings() {\n    if (!_StyleStrings) {\n        _StyleStrings = {\n            // Property names\n            Underline: translate('DL_TEXT_ATTRIBUTE_UNDERLINE'),\n            Strikethrough: translate('DL_TEXT_ATTRIBUTE_STRIKETHROUGH'),\n            Kerning: translate('DL_TEXT_ATTRIBUTE_KERNING'),\n            Alignment: translate('DL_TEXT_ATTRIBUTE_ALIGNMENT'),\n            Hyphenate: translate('DL_TEXT_ATTRIBUTE_HYPHENATE'),\n            // Property values\n            KerningAuto: translate('DL_TEXT_KERNING_AUTO'),\n            KerningOptical: translate('DL_TEXT_KERNING_OPTICAL'),\n            KerningMetricsRomanOnly: translate('DL_TEXT_KERNING_METRICSROMANONLY'),\n            'Alignment.LEFT_ALIGN': translate('DL_TEXT_ALIGNMENT_LEFT'),\n            'Alignment.CENTER_ALIGN': translate('DL_TEXT_ALIGNMENT_CENTER'),\n            'Alignment.RIGHT_ALIGN': translate('DL_TEXT_ALIGNMENT_RIGHT'),\n            'Alignment.LEFT_JUSTIFIED': translate('DL_TEXT_ALIGNMENT_LEFT_JUSTIFY'),\n            'Alignment.CENTER_JUSTIFIED': translate('DL_TEXT_ALIGNMENT_CENTER_JUSTIFY'),\n            'Alignment.RIGHT_JUSTIFIED': translate('DL_TEXT_ALIGNMENT_RIGHT_JUSTIFY'),\n            'Alignment.FULLY_JUSTIFIED': translate('DL_TEXT_ALIGNMENT_FULL_JUSTIFY')\n        };\n    }\n    return _StyleStrings;\n}\n\n/**\n    Public API\n**/\n\n// Need this for testing, so that we can update the configuration.currentProduct.config and have the strings reset to reflect that change\nexport function resetStyleStrings() {\n    _StyleStrings = undefined;\n    _getStrings();\n}\n\nfunction getTextDecoration(style) {\n    if (style.textDecorationObject) {\n        return [\n            style.textDecorationObject.adbeUnderline && 'underline',\n            style.textDecorationObject.adbeStrikethrough && 'line-through'\n        ].filter(x => x);\n    }\n    return style.textDecoration || [];\n}\n\nexport function isUnderline(style) {\n    return getTextDecoration(style).includes('underline');\n}\n\nexport function isStrikethrough(style) {\n    return getTextDecoration(style).includes('line-through');\n}\n\n// Returns the text transform using CSS value semantics (capitalize|uppercase|lowercase)\n// However, XD's renderer uses \"titlecase\" rather than \"capitalize\", so we allow it to override.\nexport function getTextTransform(style = {}, capitalizeValue = 'capitalize') {\n    if (style.fontFeatureSettingsObject && style.fontFeatureSettingsObject.adbeCapitalization === 'FontCapsOption.ALLCAPS') {\n        return 'uppercase';\n    }\n    // We use different terms than CSS (see https://wiki.corp.adobe.com/display/ccprojects/JSON+Character+Style+Properties)\n    // because IDSN and AI store `textTransform = 'capitalize'` in the style data\n    // alongside ALLCAPS, so 'capitalize' is really not used at all and we ignore this value.\n    const textTransformMap = {\n        capitalize: 'uppercase',\n        titlecase: capitalizeValue\n    };\n    // Valid values for textTransform in XD: \"none\", \"uppercase\", \"lowercase\", or \"titlecase\".\n    return textTransformMap[style.textTransform] || style.textTransform;\n}\n\nexport function getTextScript(style = {}) {\n    const featureSettings = style.fontFeatureSettings;\n    if (featureSettings && featureSettings.includes('subs')) {\n        return 'subscript';\n    }\n    if (featureSettings && featureSettings.includes('sups')) {\n        return 'superscript';\n    }\n}\n\n// Note: Both XD and ISDN handle tracking as 1/1000th of an em.\n// e.g. `adbeTracking: 19` may be accompanied by `letterSpacing = { type: 'em', value: 0.02}` (rounded from 0.019). They can be negative too.\nexport function getTracking(style = {}) {\n    if (style.adbeTracking !== undefined) { // adbeTracking could be '0' or 'auto'\n        return style.adbeTracking;\n    }\n    // Letterspacing can be saved with type 'em' or 'px'.\n    if (style.letterSpacing && style.letterSpacing.type === 'em') {\n        // Tracking is defined in em (relative to font size), but 1000 times bigger\n        return style.letterSpacing.value * 1000;\n    }\n    if (style.letterSpacing && style.fontSize && style.fontSize.value) {\n        // Need to convert to em units first\n        const fontSize = convertFontSizeUnits(style.fontSize, 'px');\n        const letterSpacing = convertFontSizeUnits(style.letterSpacing, 'px');\n        return (letterSpacing / fontSize) * 1000;\n    }\n}\n\n// Returns an array of strings of style properties for tooltips. e.g. `[\"Iowan Old Style — 600px\", \"Character spacing: 0.049999999999999996\"]``\nexport function getStyleProperties(style) {\n    const properties = [];\n\n    const StyleStrings = _getStrings();\n\n    // Get the basic properties for the style.\n    const fontFamily = getFontFamily(style);\n    if (fontFamily) {\n        const fontSize = getFontSize(style);\n        const fontStyle = getFontStyle(style);\n        properties.push(getFontFamily(style) + (fontStyle ? ` ${fontStyle}` : '') + (fontSize ? ` — ${fontSize}` : ''));\n    }\n\n    if (isUnderline(style)) {\n        properties.push(StyleStrings.Underline);\n    }\n    if (isStrikethrough(style)) {\n        properties.push(StyleStrings.Strikethrough);\n    }\n\n    if (style.adbeAutoLeading) {\n        const leadingInfo = translate('DL_TEXT_LEADING_AUTO');\n        properties.push(translate(configuration.currentProduct.config.customTextStyleLeadingString || 'DL_TEXT_ATTRIBUTE_LEADING', { fontLeading : leadingInfo }));\n    } else if (style.lineHeight) {\n        const leading = style.lineHeight.value && Math.round(style.lineHeight.value * 100) / 100;\n        const leadingInfo = translate('DL_TEXT_ATTRIBUTE_FONT_SIZE', { size: leading, type: style.lineHeight.type });\n        properties.push(translate(configuration.currentProduct.config.customTextStyleLeadingString || 'DL_TEXT_ATTRIBUTE_LEADING', { fontLeading : leadingInfo }));\n    }\n\n    if (style.paragraphSpacing) {\n        const leading = style.paragraphSpacing.value && Math.round(style.paragraphSpacing.value * 100) / 100;\n        const leadingInfo = translate('DL_TEXT_ATTRIBUTE_FONT_SIZE', { size: leading, type: style.paragraphSpacing.type });\n        properties.push(translate('DL_TEXT_ATTRIBUTE_PARAGRAPH_SPACING', { fontLeading : leadingInfo }));\n    }\n\n    switch (style.adbeIlstKerningMethod) {\n    case 'AutoKernType.AUTO':\n        properties.push(StyleStrings.Kerning + ': ' + StyleStrings.KerningAuto);\n        break;\n    case 'AutoKernType.OPTICAL':\n        properties.push(StyleStrings.Kerning + ': ' + StyleStrings.KerningOptical);\n        break;\n    case 'AutoKernType.METRICSROMANONLY':\n        properties.push(StyleStrings.Kerning + ': ' + StyleStrings.KerningMetricsRomanOnly);\n        break;\n    }\n\n    const tracking = getTracking(style);\n    if (tracking !== undefined) {\n        properties.push(translate(configuration.currentProduct.config.customTextStyleTrackingString || 'DL_TEXT_ATTRIBUTE_TRACKING', { fontTracking: tracking }));\n    }\n\n    const paragraphAlignment = getParagraphAlignment(style);\n    if (paragraphAlignment) {\n        properties.push(`${StyleStrings.Alignment}: ${paragraphAlignment}`);\n    }\n\n    if (style.adbeHyphenation) {\n        properties.push(StyleStrings.Hyphenate);\n    }\n\n    return properties.filter(x => x);\n}\n\nexport function getPostScriptName(style = {}) {\n    return style?.adbeFont?.postScriptName || style.postScriptName;\n}\n\nexport function getFontFamily(style = {}) {\n    return style?.adbeFont?.family || style?.fontFamily;\n}\n\nexport function getFontStyle(style = {}) {\n    style = style.adbeFont?.style || style.fontStyle;\n    const normalizedStyle = style?.toLowerCase();\n    if (normalizedStyle && !normalizedStyle.includes('normal') && !normalizedStyle.includes('regular')) {\n        return style;\n    }\n}\n\nexport function getFontSize(style = {}) {\n    if (style.fontSize) {\n        const fontSize = style.fontSize.value;\n        const fontType = style.fontSize.type;\n        // These should always exist, but there was a bug in an old XD build that wascreating colors\n        // without these fields, so we need to handle that case so the panel does not crash\n        // Checking for undefined rather than just !fontSize and !fontType incase fontsize is 0 or fontType is an empty string\n        if (fontSize === undefined || fontType === undefined) {\n            return '';\n        }\n        const fontSizeRounded = Math.round(style.fontSize.value * 100) / 100;\n        const translatedFontType = fontType.toLowerCase() === 'pt' ? translate('DL_UNIT_PT') : fontType;\n        return translate('DL_TEXT_ATTRIBUTE_FONT_SIZE', { size: fontSizeRounded, type: translatedFontType });\n    }\n}\n\nexport function getParagraphAlignment(style = {}) {\n    const StyleStrings = _getStrings();\n    if (style.adbeParaAlignment) {\n        return StyleStrings[ style.adbeParaAlignment ];\n    }\n}\n\nexport function getFontSizeForPreview(style = {}, minSize = configuration.DEFAULT_MIN_PREVIEW_FONT_SIZE, maxSize = configuration.DEFAULT_MAX_PREVIEW_FONT_SIZE) {\n    const size = style.fontSize && style.fontSize.value ? convertFontSizeUnits(style.fontSize, 'px') : configuration.DEFAULT_PREVIEW_FONT_SIZE;\n    return Math.min(Math.max(size, minSize), maxSize);\n}\n\nexport function hasFontColor(style = {}) {\n    return style.color && Array.isArray(style.color) && style.color.length > 0;\n}\n\nexport function isFontColorPoorContrast(style = {}, backgroundColor = '#ffffff') {\n    if (!hasFontColor(style)) { return false; }\n\n    const swatchColor = ColorUtils.colorDataToRGB(ColorUtils.getRGBRepresentation(style.color));\n    return ColorUtils.getContrast(ColorUtils.hexToRGB(backgroundColor), swatchColor) <= configuration.CONTRAST_THRESHOLD;\n}\n\nexport function getCSSForPreview(style = {}, minSize = configuration.DEFAULT_MIN_PREVIEW_FONT_SIZE, maxSize = configuration.DEFAULT_MAX_PREVIEW_FONT_SIZE, includeLetterSpacing = true) {\n    const color = style.color ? ColorUtils.colorDataToHexString(style.color) : '#000000';\n\n    const postScriptName = getPostScriptName(style);\n    // We use the postscript name since it should be installed on the system, but the more generic family name as a fallback just in case.\n    let fontFamily = libraryManager.isFontAvailable(style) ? [ postScriptName, getFontFamily(style) ] : [];\n    fontFamily = fontFamily.filter(x => x).map(x => `\"${x}\"`).join(', ');\n    fontFamily = fontFamily || 'inherit';\n\n    // Font size for preview should be clamped between 11px and maxSize (default 20px)\n    const fontSize = getFontSizeForPreview(style, minSize, maxSize);\n    const lineHeight = `${fontSize}px`;\n\n    // Typically, we let the postscript name handle the font weight and style but we should set them manually as fallback.\n    const fontWeight = postScriptName ? undefined : style.fontWeight;\n    // We always need to set the oblique font-style even when postScriptName is provided. Note: never set to italic; that's captured by the postscript font\n    const fontStyle = postScriptName ? [ 'oblique' ].find(s => s === style.fontStyle) : getFontStyle(style);\n\n    // Other properties\n    const textTransform = getTextTransform(style);\n    const textDecoration = getTextDecoration(style)[0];\n\n    // We don't always include letter spacing (e.g. for list view previews)\n    let letterSpacing;\n    if (includeLetterSpacing) {\n        letterSpacing = style.adbeTracking !== undefined\n            ? `${style.adbeTracking / 1000}em`\n            : style.letterSpacing && `${style.letterSpacing.value}${style.letterSpacing.type}`;\n    }\n\n    return { color, fontFamily, fontSize, fontWeight, lineHeight, textTransform, textDecoration, fontStyle, letterSpacing };\n}\n\nexport function getDetailsText(style) {\n    const fontFamily = getFontFamily(style);\n    const fontStyle = style && style.adbeFont && style.adbeFont.style || translate('DL_INFO_REGULAR');\n    const fontSize = getFontSize(style);\n    return (fontFamily ? `${fontFamily} ` : '') + fontStyle + (fontSize ? ` — ${fontSize}` : '');\n}\n\nexport function getAdditionalTooltipData(style, isDisabled) {\n    if (!style) {\n        return {};\n    }\n\n    const styleProperties = getStyleProperties(style);\n    const data = {\n        properties: styleProperties,\n        missingFont: !libraryManager.isFontAvailable(style)\n    };\n\n    const postScriptName = getPostScriptName(style);\n    const fontData = postScriptName && libraryManager.getTypekitFontData(postScriptName);\n    if (!isDisabled && fontData && fontData.fontId) {\n        data.isTypekitFont = true;\n        data.isSyncable = fontData.fontActions && fontData.fontActions.length === 0;\n        data.isUpgradable = fontData.fontActions && fontData.fontActions.indexOf('upgrade') > -1;\n    }\n\n    data.isDisabled = isDisabled;\n\n    if (isDisabled) {\n        // use a generic string since this applies to Text Style, Paragraph Style, and Character Style elements\n        data.disabledMessage = `DL_ERROR_UNSUPPORTED_${configuration.currentProduct.config.translationSuffix}`;\n    }\n\n    return data;\n}\n\nexport function formatTooltipContent(tooltipData) {\n    const {\n        name,\n        group,\n        missingFont,\n        isSyncable,\n        isUpgradable,\n        description,\n        isDisabled,\n        disabledMessage\n    } = tooltipData;\n\n    let typekitTooltip = '';\n    const properties = tooltipData.properties || [];\n\n    if (isSyncable) {\n        typekitTooltip = 'DL_TYPEKIT_SYNC_TOOLTIP';\n    } else if (isUpgradable) {\n        typekitTooltip = 'DL_TYPEKIT_UPGRADE_TOOLTIP';\n    } else {\n        typekitTooltip = 'DL_ERROR_MISSING_FONT';\n    }\n\n    return [\n        name,\n        group,\n        ...properties,\n        disabledMessage && translate(disabledMessage),\n        !isDisabled && missingFont && translate(typekitTooltip),\n        description && { divider: true },\n        description\n    ];\n}\n\n// Font, Character Style, and Paragraph Style all use the same TextStyleElementView component.\nexport function usesTextStyleElementView(element) {\n    const View = elementConfiguration.getComponent(element.type);\n    return View === TextStyleElementView;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport Button from 'app/js/components/Button';\n\n@observer\nexport default class SpectrumSwitch extends React.Component {\n    static defaultProps = {\n        checked: false,\n    };\n\n    static propTypes = {\n        checked: PropTypes.bool,\n        onChange: PropTypes.func.isRequired\n    };\n\n    render() {\n        return (\n            <Button className=\"toggle-switch-wrapper\" onClick={this.props.onChange}>\n                <div className=\"spectrum-ToggleSwitch\" onClick={this.props.onChange}>\n                    <input type=\"checkbox\" className=\"spectrum-ToggleSwitch-input\" id=\"toggle-onoff-0\" checked={ this.props.checked } readOnly/>\n                    <span className=\"spectrum-ToggleSwitch-switch\" />\n                </div>\n            </Button>\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2020 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport React from 'react';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport SpectrumSwitch from 'app/js/components/spectrum/SpectrumSwitch';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport elementSelectionState from 'app/js/state/elementSelectionState';\nimport { translate } from 'app/js/managers/translationManager';\n\n@observer\nexport default class FontActivationSwitch extends React.Component {\n\n    @computed get element() {\n        if (elementSelectionState.selection.length >= 1) {\n            return elementSelectionState.selection[elementSelectionState.selection.length - 1];\n        }\n    }\n\n    @computed get typekitFont() {\n        const fontName = this.style && this.style.adbeFont && this.style.adbeFont.postScriptName;\n        return libraryManager.getTypekitFontData(fontName);\n    }\n\n    get typekitAction() {\n        const actions = this.typekitFont.fontActions;\n        if (actions && actions.length === 0) {\n            return 'sync';\n        }\n        if (actions && actions.includes('upgrade')) {\n            return 'upgrade';\n        }\n        // if neither sync or upgrade, font is unavailable\n    }\n\n    @computed get style() {\n        const shortType = elementConfiguration.getShortType(this.element.type);\n        const representation = elementConfiguration.findUsableRepresentation(this.element, `application/vnd.adobe.${shortType}+json`);\n        return representation && representation.getValue(shortType, 'data');\n    }\n\n    @computed get isMissingFont() {\n        return !libraryManager.isFontAvailable(this.style);\n    }\n\n    @computed get isFontActivated() {\n        return this.typekitAction === 'sync' && libraryManager.isFontAvailable(this.style);\n    }\n\n    onClick = () => {\n        if (this.typekitAction === 'sync') {\n            if (this.isFontActivated) {\n                this.typekitFont.unsync(this.style, 'info-panel', this.element);\n            } else {\n                this.typekitFont.sync(this.style, 'info-panel', this.element);\n            }\n        }\n    }\n\n    render() {\n        if (!this.typekitFont) {\n            return null;\n        }\n        if (this.typekitAction === 'sync') {\n            const switchLabel = this.isFontActivated ? 'DL_INFO_DEACTIVATE_FONT' : 'DL_INFO_ACTIVATE_FONT';\n            return <>\n                <div className=\"font-activation-switch\"><SpectrumSwitch checked={ this.isFontActivated } onChange={ this.onClick }/></div>\n                { translate(switchLabel) }\n            </>;\n        }\n        if (this.typekitAction === 'upgrade') {\n            return <div>{ translate('DL_INFO_SUBSCRIBE_FONT') }</div>;\n        }\n\n        return <div>{ translate('DL_INFO_UNAVAILABLE_FONT') }</div>;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2018 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n/*\n    Utilities related to Adobe Fonts (FKA as Typekit)\n*/\nimport { translate } from 'app/js/managers/translationManager';\nimport elementConfiguration from 'app/js/config/elementConfiguration';\nimport libraryManager from 'app/js/managers/libraryManager';\nimport FontActivationSwitch from 'app/js/components/FontActivationSwitch';\nimport viewState from 'app/js/state/viewState';\n\n/**\n * Check whether given font in an element(char/para style) has a typekit font\n * @param {ElementModel} element Actual element being passed\n * @returns {TypekitFont} Entire TypekitFont object for accessing id, postScriptName, etc.\n */\nexport function checkTypekitFont(element) {\n    const shortType = elementConfiguration.getShortType(element.type);\n    const representation = elementConfiguration.findUsableRepresentation(element, `application/vnd.adobe.${shortType}+json`);\n    const style = representation && representation.getValue(shortType, 'data');\n    const postScriptName = style && style.postScriptName || (style && style.adbeFont && style.adbeFont.postScriptName);\n    return libraryManager.getTypekitFontData(postScriptName);\n}\n\nexport function getCustomServiceProperties(element) {\n    const font = checkTypekitFont(element);\n    // Should not show font activation switch in oneup mode because it would be redundant to.\n    if (font && font.fontId && !viewState.isOneUpMode()) {\n        return [ { label: translate('DL_INFO_STATUS'), value: <FontActivationSwitch/> } ];\n    }\n    return [];\n}\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n*  Copyright 2015 Adobe Systems Incorporated\n*  All Rights Reserved.\n*\n* NOTICE:  All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any.  The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\n// Utilities for displaying measurement values (e.g. times, file sizes, etc).\n\nimport { translate, getLocalizedNumber } from 'app/js/managers/translationManager';\nimport configuration from 'app/js/config/configuration';\n\n/* Unit conversion function converting btwn pt, px, and mm\n * for conversion details: https://developer.mozilla.org/en-US/docs/Web/CSS/length\n * 1in = 2.54cm = 25.4mm = 96px = 72pt\n * @param {object} fontSize Should have value and type properties\n * @param {string} outputType 'px', 'pt', or 'mm'\n * @return {number} resulting value\n */\n// TODO: Add 'em', which may be used in letterSpacing\nexport function convertFontSizeUnits(fontSize, outputType) {\n    if (!fontSize || !outputType) { return undefined; }\n    // eslint-disable-next-line prefer-const\n    let { type, value } = fontSize;\n    value = parseFloat(value);\n    if (isNaN(value)) { return undefined; }\n    if (type === outputType) { return value; }\n\n    const MM_TO_PT = 72 / 25.4;\n    const PX_TO_PT = 72 / 96;\n    const MM_TO_PX = 96 / 25.4;\n\n    if (outputType === 'pt') {\n        if (type === 'mm') {\n            // 1mm = 72/25.4 pt\n            return value * MM_TO_PT;\n        } else if (type === 'px') {\n            // 1px = 72/96 pt\n            return value * PX_TO_PT;\n        }\n    } else if (outputType === 'px') {\n        if (type === 'pt') {\n            return value / PX_TO_PT;\n        } else if (type === 'mm') {\n            return value * MM_TO_PX;\n        }\n    } else if (outputType === 'mm') {\n        if (type === 'pt') {\n            return value / MM_TO_PT;\n        } else if (type === 'px') {\n            return value / MM_TO_PX;\n        }\n    }\n}\n\nexport function bytesToString(size, decimalPlaces) {\n    const byteMultiplier = configuration.BYTE_MULTIPLIER;\n    if (Math.round(size) <= 0) {\n        // Show \"-- KB\" if we have a zero or invalid size\n        return translate('DL_FILESIZE_KB', { size: '--' });\n    }\n\n    let suffix = 'B';\n    if (size >= byteMultiplier) {\n        size = size / byteMultiplier;\n        suffix = 'KB';\n        if (size >= byteMultiplier) {\n            size = size / byteMultiplier;\n            suffix = 'MB';\n            if (size >= byteMultiplier) {\n                size = size / byteMultiplier;\n                suffix = 'GB';\n            }\n        }\n    }\n    // Round to correct decimal places.\n    const factor = Math.pow(10, decimalPlaces || 0);\n    size = getLocalizedNumber(Math.round(size * factor) / factor);\n\n    return translate('DL_FILESIZE_' + suffix, { size });\n}\n\nexport function msToString(milliseconds) {\n    let seconds = Math.round(milliseconds / 1000),\n        minutes = Math.floor(seconds / 60);\n\n    seconds = seconds - (minutes * 60);\n    if (seconds < 10) {\n        seconds = '0' + seconds;\n    }\n    if (minutes) {\n        const hours = Math.floor(minutes / 60);\n        minutes = minutes - (hours * 60);\n        if (hours) {\n            if (minutes < 10) {\n                minutes = '0' + minutes;\n            }\n            return translate('DL_DURATION_HMS', { hours, minutes, seconds });\n        }\n        return translate('DL_DURATION_MS', { minutes, seconds });\n    }\n    return translate('DL_DURATION_S', { seconds });\n}\n\nexport function fpsToString(framerate) {\n    return translate('DL_FRAMERATE', { framerate: framerate.toString() });\n}\n\nexport function dimensionsToString(width, height) {\n    return translate('DL_DIMENSIONS', { width: width.toString(), height: height.toString() });\n}\n\nexport function bpmToString(tempo) {\n    return translate('DL_TEMPO', { tempo: tempo.toString() });\n}\n\nexport function roundToDecimalPlace(value, decimalPlaces = 2) {\n    if (value && typeof value === 'number' && value % 1 !== 0) {\n        return value.toFixed(decimalPlaces);\n    }\n    return value;\n}\n","import libraryManager from 'app/js/managers/libraryManager';\nimport libraryProcessManager from '../managers/libraryProcessManager';\nimport imsInterface from 'app/js/interface/imsInterface';\n// This class is essentially a wrapper for the API's we expose to the Stock and Capture UXP extension\n\nconst EventTarget = window.EventTarget || class A {};\n\nexport default class CCLibTarget extends EventTarget {\n    constructor() {\n        super();\n    }\n\n    createEvent(type, payload) {\n        return new CustomEvent(type, { detail: payload });\n    }\n\n    getLibraries() {\n        return libraryManager.libraries;\n    }\n\n    resolveElementReference(ref) {\n        return libraryManager.resolveElementReference(ref);\n    }\n\n    getServiceInfo() {\n        return libraryProcessManager.getServiceInfo();\n    }\n\n    getEnvironment() {\n        // 'Staging' or 'Production'\n        return imsInterface.getEnvironment().label;\n    }\n\n    getLibraryById(id) {\n        return libraryManager.getLibraryById(id);\n    }\n\n    getDeviceDescription() {\n        return libraryManager.DEVICE_DESCRIPTION;\n    }\n\n    writeToClipBoard(data) {\n        return new Promise((resolve, reject) => {\n            navigator.clipboard.writeText(data).then(() => resolve()\n                , () => reject()).catch(() => reject());\n        });\n    }\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\nCopyright 2019 Adobe\nAll Rights Reserved.\n\nNOTICE: Adobe permits you to use, modify, and distribute this file in\naccordance with the terms of the Adobe license agreement accompanying\nit. If you have received this file from a source other than Adobe,\nthen your use, modification, or distribution of it requires the prior\nwritten permission of Adobe.\n*/\nrequire(\"../common/ResizeObserver\");\nconst ResizeObserver_1 = __importDefault(require(\"../common/ResizeObserver\"));\nconst Margin_1 = __importStar(require(\"../common/Margin\"));\nconst getStableArray_1 = __importDefault(require(\"./getStableArray\"));\nconst react_1 = __importDefault(require(\"react\"));\nconst lerp_1 = __importDefault(require(\"../common/lerp\"));\nconst initialVisibleItemCount = 30;\nclass ClassProperties {\n    constructor(type) {\n        //  we mark this on all class properties after a container resize\n        //  so we can try to reload them if we still have\n        //  components of their class present\n        this.valid = false;\n        this.column = null;\n        //  these fields are used to estimate the size of future elements of this class\n        this.totalItemWidth = 0;\n        this.totalItemHeight = 0;\n        this.totalItemCount = 0;\n        this.type = type;\n    }\n    invalidate() {\n        this.valid = false;\n        this.totalItemCount = 0;\n        this.totalItemWidth = 0;\n        this.totalItemHeight = 0;\n    }\n    //  this function stores and tracks an average item size of this type.\n    //  this helps us more accurately estimate scroll location when doing flow layout.\n    setItemSize(width, height) {\n        this.totalItemWidth += width;\n        this.totalItemHeight += height;\n        this.totalItemCount++;\n        // recalculate width/height\n        this.width = Math.round(this.totalItemWidth / this.totalItemCount);\n        this.height = Math.round(this.totalItemHeight / this.totalItemCount);\n    }\n    setFromCss(css) {\n        if (this.cssInline == null) {\n            //  we only record the first css display.\n            //  chrome is changing inline-block to block occasionally\n            //  this does mean clients cannot change display\n            //  with responsive media queries.\n            this.cssInline = (css.display || \"\").indexOf(\"inline\") >= 0;\n        }\n        this.cssMargin = Margin_1.default.fromCssMargin(css);\n        let columnCountCss = css.getPropertyValue(\"--column-count-self\").trim();\n        let column = null;\n        if (columnCountCss) {\n            let count = columnCountCss === \"auto\" ? null : parseInt(columnCountCss);\n            let optimumWidth = null;\n            if (count == null) {\n                optimumWidth = (0, Margin_1.parseCssSize)(css.getPropertyValue(\"--optimum-width\"));\n                if (optimumWidth === 0) {\n                    let minWidth = (0, Margin_1.parseCssSize)(css.minWidth);\n                    let maxWidth = (0, Margin_1.parseCssSize)(css.maxWidth);\n                    if (minWidth === 0 || maxWidth === 0) {\n                        throw new Error(\"Expected either --optimum-width or min-width and max-width\");\n                    }\n                    optimumWidth = Math.ceil((minWidth + maxWidth) / 2);\n                }\n            }\n            column = { count, optimumWidth };\n        }\n        this.column = column;\n    }\n}\nclass ItemProperties {\n    constructor(type) {\n        this.x = 0;\n        this.y = 0;\n        this.width = 0;\n        this.height = 0;\n        this.rendered = false;\n        this.type = type;\n    }\n}\nfunction isHTMLElement(node) {\n    return node != null && node.nodeType === 1;\n}\n//  returns a memoized pixel css position.\nconst px = (() => {\n    const cache = [];\n    return (value) => {\n        let cached = cache[value];\n        if (cached === undefined) {\n            cached = cache[value] = `${value}px`;\n        }\n        return cached;\n    };\n})();\n/**\n * This represents state which we cache permanently on the container.\n * Changes to this DO NOT force a react re-render.\n * By contrast changes to our react state does force a re-render.\n */\nclass VirtualManager {\n    constructor(props) {\n        this.itemProperties = {};\n        this.classProperties = new Map();\n        this.containerPadding = new Margin_1.default(0);\n        this.scrollAnchor = null;\n        this.isScrolling = false;\n        //  TODO: This needs to be fixed for horizontal mode. Somehow we missed this.\n        this.lastScrollTop = 0;\n        this.scrollDirection = 0; // 1 = down, -1 = up, 0 = none\n        this.scrollDuration = 0.5;\n        this.scrollWaitAfterFinish = 0.2;\n        this.container = props.container;\n        this.containerWidth = this.container.clientWidth;\n        this.container[VirtualManager.symbol] = this;\n        this.horizontal = props.horizontal;\n        this.itemLookup = new Map();\n        this.itemKey = props.itemKey;\n        this.itemType = props.itemType;\n        this.itemRect = props.itemRect;\n        this.onresize = this.onresize.bind(this);\n        this.resizeObserver = new ResizeObserver_1.default(this.onresize);\n        this.updateAndLayout = this.updateAndLayout.bind(this);\n        this.container.addEventListener(\"scroll\", (e) => {\n            this.updateAndLayout();\n        });\n        this.container.addEventListener(\"wheel\", (e) => {\n            this.cancelScrollAnimation();\n        });\n        this.placeholder = document.createElement(\"div\");\n        this.container.appendChild(this.placeholder);\n        this.update(props);\n    }\n    update(props) {\n        this.items = props.items;\n        this.renderKeys = props.renderKeys;\n        this.setRenderKeys = props.setRenderKeys;\n        this.onLayout = props.onLayout;\n        if (!this.isScrolling) {\n            // we skip these time consuming steps if we are scrolling.\n            // since they will be done at the end of the call chain anyways.\n            let checkForDuplicates = new Set();\n            for (let item of this.items) {\n                let key = this.itemKey(item);\n                if (checkForDuplicates.has(key)) {\n                    console.error(`Duplicate items:`, this.itemLookup.get(key), item);\n                    throw new Error(`Item keys must be unique. Found duplicate: ${key}`);\n                }\n                checkForDuplicates.add(key);\n                this.itemLookup.set(key, item);\n            }\n            this.updateAndLayout(true);\n        }\n        return this.renderKeys;\n    }\n    static getReactElements(items, renderKeys, itemKey, itemType, factory, cache) {\n        const itemsByKey = new Map();\n        for (let item of items) {\n            itemsByKey.set(itemKey(item), item);\n        }\n        return renderKeys.map((key, elementIndex) => {\n            const elementKey = String(elementIndex);\n            const item = itemsByKey.get(key);\n            if (item == null) {\n                // if the item is not found it may have been temporarily hidden\n                // we will try to render it from cached element.\n                const cached = cache[key];\n                if (cached) {\n                    return cached;\n                }\n                /// console.warn(\"item missing: \", { key, elementIndex, items })\n                return null;\n            }\n            return (cache[key] = react_1.default.cloneElement(factory(item), {\n                key: elementKey,\n                \"data-key\": key,\n                \"data-type\": itemType(item),\n            }));\n        });\n    }\n    getItemRect(item, key) {\n        if (item == null && key != null) {\n            item = this.itemLookup.get(key) || null;\n        }\n        if (item != null) {\n            let rect = this.itemRect != null ? this.itemRect(item) : null;\n            if (rect != null) {\n                if (rect.x == null ||\n                    rect.y == null ||\n                    rect.width == null ||\n                    rect.height == null) {\n                    throw new Error(`Item rect missing required properties (x,y,width,height): ${JSON.stringify(rect)}`);\n                }\n                return rect;\n            }\n            if (key == null) {\n                key = this.itemKey(item);\n            }\n            if (key != null) {\n                let props = this.itemProperties[key];\n                if (props != null) {\n                    return props;\n                }\n            }\n        }\n        return null;\n    }\n    updateAndLayout(forceLayout = false) {\n        this.isScrolling = true;\n        let needsLayout = this.updateIndexes();\n        this.ensureElementsObservedAndSized();\n        if (needsLayout || forceLayout) {\n            this.layoutChildren();\n            // fire layout event\n            if (this.onLayout) {\n                this.onLayout();\n            }\n        }\n        this.isScrolling = false;\n    }\n    layoutChildren() {\n        let containerCss = window.getComputedStyle(this.container);\n        let columnGap = (0, Margin_1.parseCssSize)(containerCss.getPropertyValue(\"--column-gap\"));\n        let rowGap = (0, Margin_1.parseCssSize)(containerCss.getPropertyValue(\"--row-gap\"));\n        // create quick element lookup by key.\n        let elementLookup = this.getElementLookupByKey();\n        let x = 0, y = 0, width = this.containerWidth - this.containerPadding.horizontal, height = 0;\n        function newLine() {\n            x = 0;\n            y = height + rowGap;\n        }\n        // now iterate items\n        for (let item of this.items) {\n            let key = this.itemKey(item);\n            let element = elementLookup.get(key);\n            if (this.itemRect != null) {\n                let rect = this.getItemRect(item, key);\n                if (element) {\n                    const { style } = element;\n                    style.position = `absolute`;\n                    style.left = px(rect.x);\n                    style.top = px(rect.y);\n                    style.width = px(rect.width);\n                    style.height = px(rect.height);\n                }\n                height = rect.y + rect.height;\n                continue;\n            }\n            let type = this.itemType(item);\n            let properties = this.getItemProperties(key, type);\n            let classProps = this.classProperties.get(type);\n            if (!classProps) {\n                // console.warn(\"missing class properties: \" + type);\n                break;\n            }\n            let margin = classProps.cssMargin;\n            let inline = classProps.cssInline;\n            let elementWidth = properties.width + margin.horizontal;\n            let elementHeight = properties.height + margin.vertical;\n            let left, top;\n            // new column layout\n            let { column } = classProps;\n            if (column) {\n                let count = column.count ||\n                    Math.max(1, Math.round(width / (column.optimumWidth + columnGap)));\n                let index = Math.round(x / (elementWidth + columnGap));\n                elementWidth = Math.floor((width - columnGap * (count - 1)) / count);\n                // now we will tweak the x position to make sure we right align\n                // and distribute extra pixels fairly evenly across all columns\n                let l2r = index * (elementWidth + columnGap);\n                let r2l = width -\n                    (count - index) * (elementWidth + columnGap) +\n                    columnGap;\n                let alpha = count == 1 ? 0 : index / (count - 1);\n                x = Math.round((0, lerp_1.default)(l2r, r2l, alpha));\n            }\n            if (x > 0 &&\n                !this.horizontal &&\n                (!inline || x + elementWidth > width)) {\n                newLine();\n            }\n            left = x + this.containerPadding.left;\n            top = y + this.containerPadding.top;\n            if (this.horizontal) {\n                width = Math.max(width, x + elementWidth);\n            }\n            height = Math.max(height, y + elementHeight);\n            if (inline) {\n                x += elementWidth + columnGap;\n            }\n            else {\n                y += elementHeight + rowGap;\n            }\n            // store on properties\n            properties.x = left;\n            properties.y = top;\n            if (element) {\n                // track that this element has actually been rendered\n                properties.rendered = true;\n                // now absolutely position if there is an element\n                const { style } = element;\n                if (style.position !== \"absolute\") {\n                    style.position = \"absolute\";\n                }\n                style.left = px(left);\n                style.top = px(top);\n                if (column != null) {\n                    style.width = px(elementWidth);\n                }\n                if (!inline) {\n                    style.width = px(width - margin.horizontal);\n                }\n            }\n        }\n        //  we do this immediately after a layout of children.\n        //  there is logic in the scrollAnimationCallback that can correct\n        //  for an updated measurement of children which could cause visual jump\n        //  calling this immediately fixes it immediately so there will be no visual jump\n        //  what can cause the jump is as follows:\n        //      We estimate a scroll location at 10,000px.\n        //      We scroll to that location.\n        //      Upon actual sizing of some *estimated* elements, it turns out we need to be at 10,050 px.\n        //      So we want to immediately correct the position rather than either\n        //      being 50 pixels off or waiting a full animation frame to correct it.\n        this.scrollAnimationCallback();\n        // increase the placeholders height to match our layed out height.\n        if (this.horizontal) {\n            this.placeholder.style.width = px(width);\n        }\n        else {\n            this.placeholder.style.height = px(height);\n        }\n    }\n    getElementLookupByKey() {\n        let elementLookup = new Map();\n        let index = 0;\n        for (let child = this.container.firstChild; child != null; child = child.nextSibling) {\n            if (isHTMLElement(child)) {\n                let key = child.dataset.key;\n                if (key) {\n                    elementLookup.set(key, child);\n                }\n                else if (child.previousSibling != null) {\n                    // the first child is the height placeholder element\n                    // every other element should have a data-key property\n                    // if not that means they used a function or class component\n                    //  that is not passing ...otherProps to it's rendered element.\n                    let item = this.items[index];\n                    throw new Error(`Virtualizer item error: Function and Class components must pass through ...otherProps to rendered element. ie: <div {...otherProps}></div>. Check element created for ${JSON.stringify(item)}`);\n                }\n            }\n            index++;\n        }\n        return elementLookup;\n    }\n    ensureElementsObservedAndSized() {\n        this.resizeObserver.observe(this.container);\n        for (let child = this.container.firstChild; child != null; child = child.nextSibling) {\n            if (child.nodeType === 1) {\n                this.resizeObserver.observe(child);\n                // also make sure we've sized it if available.\n                // Browser ResizeObserver does not send resize events for inline elements.\n                this.onElementSized(child);\n            }\n        }\n    }\n    getVisibleRect() {\n        let x = this.container.scrollLeft;\n        let y = this.container.scrollTop;\n        let width = this.container.clientWidth;\n        let height = this.container.clientHeight;\n        return { x, y, width, height };\n    }\n    get pageSize() {\n        return this.container[this.horizontal ? \"clientWidth\" : \"clientHeight\"];\n    }\n    get prerenderOtherDirection() {\n        return 100;\n    }\n    get prerenderScrollDirection() {\n        return 500;\n    }\n    get isManualLayout() {\n        return this.itemRect != null;\n    }\n    getRenderItemIndices(scrollDirection) {\n        let { horizontal } = this;\n        let beginning = Math.max(0, this.container[horizontal ? \"scrollLeft\" : \"scrollTop\"]);\n        let { pageSize, prerenderScrollDirection, prerenderOtherDirection } = this;\n        if (scrollDirection === 0) {\n            // if we aren't scrolling then each direction is other.\n            prerenderScrollDirection = prerenderOtherDirection;\n        }\n        let end = beginning + pageSize;\n        let totalPagesSize = pageSize + prerenderScrollDirection + prerenderOtherDirection;\n        // now expand top\n        beginning = Math.max(0, beginning -\n            (scrollDirection >= 0\n                ? prerenderOtherDirection\n                : prerenderScrollDirection));\n        // then expand bottom by whatever is remaining. (if this is larger than content area, that is fine)\n        end = beginning + totalPagesSize;\n        const renderKeys = new Set();\n        const existingKeys = new Set();\n        // keys which we are adding so that we can pre-size them.\n        // only used without manual layout.\n        // This pre-sizing code ensures that we always contain at least one of each\n        // item type in the document so that we can capture sizing and css class properties.\n        const presize = !this.isManualLayout;\n        const presizeTypes = presize ? new Map() : null;\n        let size = horizontal ? \"width\" : \"height\";\n        let position = horizontal ? \"x\" : \"y\";\n        for (let index = 0; index < this.items.length; index++) {\n            const item = this.items[index];\n            const key = this.itemKey(item);\n            existingKeys.add(key);\n            const rect = this.getItemRect(item, key);\n            if (rect &&\n                rect[position] + rect[size] > beginning &&\n                rect[position] <= end) {\n                renderKeys.add(key);\n            }\n            else if (presizeTypes != null) {\n                let type = this.itemType(item);\n                if (!presizeTypes.has(type)) {\n                    presizeTypes.set(type, key);\n                }\n            }\n        }\n        // we have to render *some* items since we may only get their accurate reported positions after they are rendered.\n        if (renderKeys.size === 0) {\n            for (let i = 0; i < initialVisibleItemCount && i < this.items.length; i++) {\n                renderKeys.add(this.itemKey(this.items[i]));\n            }\n        }\n        // we also want to always keep rendering a focused item so add this too\n        const focusedKey = this.getFocusedItemKey();\n        if (focusedKey) {\n            renderKeys.add(focusedKey);\n        }\n        // finally, if we are pre-sizing elements we need to add some of each type.\n        if (presizeTypes && presizeTypes.size > 0) {\n            for (let key of presizeTypes.values()) {\n                renderKeys.add(key);\n            }\n        }\n        return [renderKeys, existingKeys];\n    }\n    /**\n     * Clip scrollTop - UXP should do this automatically, but it doesn't due to bug UXP-10612\n     * Can remove this once UXP bug is fixed\n     * @returns number between 0 the container area - total area\n     */\n    getClippedScrollTarget(scrollTarget) {\n        const scrollPx = this.container[this.horizontal ? \"scrollWidth\" : \"scrollHeight\"];\n        const clientPx = this.container[this.horizontal ? \"clientWidth\" : \"clientHeight\"];\n        return Math.max(0, Math.min(scrollTarget, scrollPx - clientPx));\n    }\n    getFocusedItemKey() {\n        for (let element = document.activeElement; element != null; element = element.parentNode) {\n            if (isHTMLElement(element)) {\n                const key = element.dataset.key;\n                if (key) {\n                    return key;\n                }\n            }\n        }\n        return null;\n    }\n    updateIndexes() {\n        if (this.pageSize === 0) {\n            return;\n        }\n        const scrollTop = this.getClippedScrollTarget(this.container.scrollTop);\n        if (this.container.scrollTop !== scrollTop) {\n            this.container.scrollTop = scrollTop;\n        }\n        const scrollDelta = scrollTop - this.lastScrollTop;\n        this.lastScrollTop = scrollTop;\n        const previousItems = this.previousItems || this.items;\n        this.previousItems = this.items;\n        const itemsProbablyChanged = this.items.length !== previousItems.length;\n        if (itemsProbablyChanged) {\n            this.scrollDirection = 0;\n        }\n        else if (scrollDelta !== 0) {\n            this.scrollDirection = Math.sign(scrollDelta);\n        }\n        // Get a set of the items we want to render, and a set of all the items\n        // (do this in one method, so we only need to iterate through all the items once)\n        const [renderKeys, existingKeys] = this.getRenderItemIndices(this.scrollDirection);\n        const getType = (key) => {\n            if (key != null) {\n                const item = this.itemLookup.get(key);\n                if (item) {\n                    return this.itemType(item);\n                }\n            }\n            return null;\n        };\n        //  We use keys since even with additions/removals, keys are stable\n        let oldKeys = this.renderKeys;\n        let newKeys = (0, getStableArray_1.default)(oldKeys, renderKeys, getType, getType);\n        const elementLookup = this.getElementLookupByKey();\n        newKeys.forEach((key) => {\n            let element = elementLookup.get(key);\n            if (element) {\n                const deleted = !existingKeys.has(key);\n                //  we HAVE to use display: none\n                //  if we use visibility: hidden then the hidden elements\n                //  still count for scroll size\n                element.style.display = deleted ? \"none\" : \"\";\n            }\n        });\n        // console.log({ existingKeys, renderKeys, newKeys })\n        // we do a deep compare as we don't want to cause react re-rendering unless our rendered item renderKeys have changed.\n        if (oldKeys.length !== newKeys.length ||\n            JSON.stringify(oldKeys) !== JSON.stringify(newKeys)) {\n            // const debug = true;\n            // if (debug) {\n            //     let counts: any = {};\n            //     for (let key of newKeys) {\n            //         let type = getType(key)!;\n            //         counts[type] = (counts[type] || 0) + 1;\n            //     }\n            //     console.log(JSON.stringify(counts, null, 2));\n            // }\n            this.setRenderKeys(newKeys);\n            // this.renderKeys won't change till react re-renders and then calls VirtualManager.update().\n            return true;\n        }\n        return false;\n    }\n    onElementSized(element) {\n        if (element === this.container) {\n            this.containerPadding = Margin_1.default.fromCssPadding(getComputedStyle(element));\n        }\n        let { key, type } = element.dataset;\n        if (key && type) {\n            //  cache element size\n            let properties = this.itemProperties[key];\n            if (properties == null) {\n                properties = this.getItemProperties(key, type);\n            }\n            // we REALLY only want to test these when absolutely necessary\n            // since reading them forces immediate layout.\n            const width = element.offsetWidth;\n            const height = element.offsetHeight;\n            if (width > 0 && height > 0) {\n                let changed = width !== properties.width || height !== properties.height;\n                properties.width = width;\n                properties.height = height;\n                //  cache ComputedCssProperties by className\n                if (changed) {\n                    let classProps = this.classProperties.get(type);\n                    if (classProps == null || !classProps.valid) {\n                        let css = getComputedStyle(element);\n                        if (classProps == null) {\n                            classProps = new ClassProperties(type);\n                            this.classProperties.set(type, classProps);\n                        }\n                        classProps.setFromCss(css);\n                    }\n                    classProps.setItemSize(width, height);\n                }\n            }\n        }\n    }\n    onresize(entries) {\n        //  if entries contains the container then we mark computed css obsolete\n        //  that way we can recompute while traversing elements.\n        for (let entry of entries) {\n            if (entry.target === this.container) {\n                this.containerWidth = this.container.clientWidth;\n                for (let classProps of this.classProperties.values()) {\n                    classProps.invalidate();\n                }\n                // also reset placeholder size\n                this.placeholder.style.width = \"1px\";\n                this.placeholder.style.height = \"1px\";\n                // TODO: Find currently visible items and use ScrollAnchor to restore them to same position after relayout.\n                // also, clear all cached item sizes.\n                for (let key in this.itemProperties) {\n                    let itemProps = this.itemProperties[key];\n                    itemProps.width = 0;\n                    itemProps.height = 0;\n                }\n            }\n            else {\n                this.onElementSized(entry.target);\n            }\n        }\n        this.updateAndLayout(true);\n    }\n    getItemTargetScrollPosition(anchor) {\n        var _a, _b;\n        let item = this.itemLookup.get(anchor.itemKey);\n        if (item) {\n            let itemPin = (_a = anchor.itemPin) !== null && _a !== void 0 ? _a : 0;\n            let windowPin = (_b = anchor.windowPin) !== null && _b !== void 0 ? _b : 0;\n            const bounds = this.getItemRect(item);\n            if (bounds) {\n                const clientSize = this.container[this.horizontal ? \"clientWidth\" : \"clientHeight\"];\n                const targetScrollPosition = bounds[this.horizontal ? \"x\" : \"y\"] +\n                    itemPin * bounds[this.horizontal ? \"width\" : \"height\"] -\n                    windowPin * clientSize;\n                return targetScrollPosition;\n            }\n        }\n        return null;\n    }\n    scrollToItem(key, options) {\n        var _a, _b, _c;\n        // correct for legacy .behavior option\n        if (options != null &&\n            options.behavior != null &&\n            options.duration == null) {\n            options.duration =\n                options.behavior === \"smooth\" ? 0.5 : 0.0;\n        }\n        const itemPin = (_a = options === null || options === void 0 ? void 0 : options.position) !== null && _a !== void 0 ? _a : 0;\n        const windowPin = (_b = options === null || options === void 0 ? void 0 : options.position) !== null && _b !== void 0 ? _b : 0;\n        const duration = (_c = options === null || options === void 0 ? void 0 : options.duration) !== null && _c !== void 0 ? _c : 0.5;\n        const scrollAnchor = { itemKey: key, itemPin, windowPin, duration };\n        const top = this.getItemTargetScrollPosition(scrollAnchor);\n        if (top != null) {\n            this.startScrollAnimation(scrollAnchor);\n        }\n    }\n    startScrollAnimation(scrollAnchor) {\n        this.scrollAnchor = scrollAnchor;\n        this.scrollStartTime = Date.now();\n        this.scrollStartPosition =\n            this.container[this.horizontal ? \"scrollLeft\" : \"scrollTop\"];\n        this.scrollDuration = scrollAnchor.duration;\n        this.scrollAnimationCallback();\n    }\n    cancelScrollAnimation() {\n        if (this.scrollAnimating != null) {\n            if (typeof cancelAnimationFrame === \"function\") {\n                cancelAnimationFrame(this.scrollAnimating);\n            }\n            delete this.scrollAnimating;\n        }\n        this.scrollAnchor = null;\n    }\n    scrollAnimationCallback() {\n        let continueAnimating = false;\n        delete this.scrollAnimating;\n        if (this.scrollAnchor != null) {\n            let targetPosition = this.getItemTargetScrollPosition(this.scrollAnchor);\n            if (targetPosition != null) {\n                let startDelta = targetPosition - this.scrollStartPosition;\n                //  we are going to try to smooth scroll... BUT if we are scrolling a very long way\n                //  we are first going to jump much closer to the target location.\n                //  let's say, not more than 2000 pixels away, maximum.\n                const maxDelta = 2000;\n                if (Math.abs(startDelta) > maxDelta) {\n                    startDelta = Math.sign(startDelta) * maxDelta;\n                }\n                let time = (Date.now() - this.scrollStartTime) / 1000;\n                let elapsed = Math.min(time, this.scrollDuration);\n                let alpha = this.scrollDuration > 0\n                    ? elapsed / this.scrollDuration\n                    : 1.0;\n                let animatedTopNow = targetPosition - (1 - alpha) * startDelta;\n                this.container[this.horizontal ? \"scrollLeft\" : \"scrollTop\"] =\n                    this.getClippedScrollTarget(animatedTopNow);\n                //  keep animating for twice the scroll duration.\n                //  this provides extra time after scroll for resizing of\n                //  nearby element positions to get fixed to the anchor point.\n                continueAnimating =\n                    time < this.scrollDuration + this.scrollWaitAfterFinish;\n                // console.log({ animatedTopNow, targetTop, alpha, elapsed, time, startDelta, startTop: this.scrollStartPosition, continueAnimating });\n            }\n        }\n        if (continueAnimating) {\n            if (this.scrollAnimating == null &&\n                typeof requestAnimationFrame === \"function\") {\n                this.scrollAnimating = requestAnimationFrame(this.scrollAnimationCallback.bind(this));\n            }\n        }\n        else {\n            this.cancelScrollAnimation();\n        }\n    }\n    getItemProperties(key, type) {\n        let props = this.itemProperties[key];\n        if (props == null) {\n            props = this.itemProperties[key] = new ItemProperties(type);\n        }\n        let classProps = this.classProperties.get(type);\n        if (classProps) {\n            if (props.width === 0) {\n                props.width = classProps.width;\n            }\n            if (props.height === 0) {\n                props.height = classProps.height;\n            }\n        }\n        return props;\n    }\n    static instance(container, props) {\n        let manager = container[VirtualManager.symbol];\n        if (manager == null && props != null) {\n            manager = new VirtualManager(props);\n        }\n        return manager;\n    }\n    static update(props) {\n        let manager = VirtualManager.instance(props.container, props);\n        manager.update(props);\n        return manager.renderKeys;\n    }\n}\nexports.default = VirtualManager;\nVirtualManager.symbol = Symbol(\"VirtualManager.symbol\");\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\nCopyright 2019 Adobe\nAll Rights Reserved.\n\nNOTICE: Adobe permits you to use, modify, and distribute this file in\naccordance with the terms of the Adobe license agreement accompanying\nit. If you have received this file from a source other than Adobe,\nthen your use, modification, or distribution of it requires the prior\nwritten permission of Adobe.\n*/\nconst react_1 = __importStar(require(\"react\"));\nconst VirtualManager_1 = __importDefault(require(\"./VirtualManager\"));\nconst memoize_1 = __importDefault(require(\"../common/memoize\"));\nrequire(\"../common/shims\");\nfunction createPropertyGetter(property, defaultValue, validator) {\n    if (property == null) {\n        return typeof defaultValue === \"function\"\n            ? defaultValue()\n            : undefined;\n    }\n    if (typeof property === \"function\") {\n        return (item) => {\n            const result = property(item);\n            if (validator) {\n                validator(result, item);\n            }\n            return result;\n        };\n    }\n    if (typeof property === \"string\" || typeof property === \"symbol\") {\n        return (item) => item[property];\n    }\n    throw new Error(`Unsupported property: ${String(property)}`);\n}\nexports.default = (0, react_1.forwardRef)(function Virtualizer(properties, ref) {\n    let { items, itemKey, itemType, itemRect, scrollToItem, onLayout, cacheElements = true, style, children: factory, ...otherProps } = properties;\n    let horizontal = properties.direction === \"horizontal\";\n    const itemKeyFunction = (0, react_1.useMemo)(() => (0, memoize_1.default)(createPropertyGetter(itemKey, () => {\n        //  if user provides no key property/function\n        //  then we use the item index as key\n        const itemToIndex = new Map(items.map((item, index) => [item, String(index)]));\n        return (item) => itemToIndex.get(item);\n    }, (value, item) => {\n        if (typeof value !== 'string' || value.length === 0) {\n            throw new Error(`Invalid key, expected a unique string, actual: (${JSON.stringify(value || null)}) for item: ${JSON.stringify(item)}`);\n        }\n    })), [itemKey, items]);\n    const itemTypeFunction = (0, react_1.useMemo)(() => (0, memoize_1.default)(createPropertyGetter(itemType, () => () => \"default\")), [itemType, items]);\n    const itemRectFunction = (0, react_1.useMemo)(() => createPropertyGetter(itemRect), [itemRect, items]);\n    let [renderKeys, setRenderKeys] = (0, react_1.useState)(new Array());\n    // we use a ref so we can persist the manager between calls to this component function.\n    const cache = (0, react_1.useRef)();\n    if (cache.current == null) {\n        cache.current = {};\n    }\n    function scrollByFunction(x, y) {\n        const container = cache.current.container;\n        // x is ignored, since we only scroll vertically\n        if (container && y) {\n            // Would be cleaner to use container.scrollBy, but UXP doesn't support this\n            // Instead, we need to compute the scrollTop to set based on the passed in offset\n            const clientHeight = container.clientHeight;\n            const scrollHeight = container.scrollHeight;\n            const maxScrollTop = Math.max(0, scrollHeight - clientHeight);\n            const scrollTop = Math.max(0, Math.min(maxScrollTop, container.scrollTop + y));\n            container.scrollTo({ top: scrollTop });\n        }\n    }\n    function scrollToItemFunction(key, options) {\n        let container = cache.current.container;\n        if (container) {\n            let manager = VirtualManager_1.default.instance(container);\n            manager === null || manager === void 0 ? void 0 : manager.scrollToItem(key, options);\n        }\n    }\n    function getManager() {\n        var _a;\n        let container = (_a = cache.current) === null || _a === void 0 ? void 0 : _a.container;\n        return container ? VirtualManager_1.default.instance(container) : null;\n    }\n    function getRenderKeys() {\n        return renderKeys;\n    }\n    function getItemRect(key) {\n        let manager = getManager();\n        if (manager) {\n            let rect = manager.getItemRect(null, key);\n            if (rect) {\n                //  we remove just the properties we want since the manager stores extra information\n                //  on the rect structure.\n                let { x, y, width, height } = rect;\n                return { x, y, width, height };\n            }\n        }\n        return { x: 0, y: 0, width: 0, height: 0 };\n    }\n    function getVisibleRect() {\n        var _a;\n        return ((_a = getManager()) === null || _a === void 0 ? void 0 : _a.getVisibleRect()) || { x: 0, y: 0, width: 0, height: 0 };\n    }\n    (0, react_1.useImperativeHandle)(ref, () => ({\n        scrollToItem: scrollToItemFunction,\n        scrollBy: scrollByFunction,\n        getRenderKeys,\n        getItemRect,\n        getVisibleRect,\n        container: cache.current.container,\n    }), [cache.current.container]);\n    function setContainer(container) {\n        if (container) {\n            cache.current.container = container;\n            //  we also update the renderKeys immediately\n            //  this matters for future renders where\n            //  we are calling setContainer with the cached container\n            //  we want the correct renderKeys BEFORE we hit this functions element declaration.\n            renderKeys = VirtualManager_1.default.update({\n                container,\n                horizontal,\n                items,\n                renderKeys,\n                setRenderKeys,\n                itemKey: itemKeyFunction,\n                itemType: itemTypeFunction,\n                itemRect: itemRectFunction,\n                onLayout,\n            });\n            //  if we have a scrollToItem then we scroll to it now.\n            if (scrollToItem) {\n                scrollToItemFunction(scrollToItem);\n            }\n        }\n    }\n    //  There is a delay between future renders and calling setContainer.\n    //  if we know the Container already, we call setContainer now\n    if (cache.current.container) {\n        setContainer(cache.current.container);\n    }\n    style = Object.assign({\n        position: \"relative\",\n        overflowX: horizontal ? \"scroll\" : \"hidden\",\n        overflowY: horizontal ? \"hidden\" : \"scroll\",\n        flex: \"1 1 auto\",\n        zIndex: 0\n    }, style);\n    return (react_1.default.createElement(\"div\", { ref: setContainer, style: style, ...otherProps }, VirtualManager_1.default.getReactElements(items, renderKeys, itemKeyFunction, itemTypeFunction, factory, \n    //  if we aren't caching elements then we return a new cache object each time\n    //  which effectively disables caching\n    cacheElements ? cache.current : {})));\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\n/*\nCopyright 2019 Adobe\nAll Rights Reserved.\n\nNOTICE: Adobe permits you to use, modify, and distribute this file in\naccordance with the terms of the Adobe license agreement accompanying\nit. If you have received this file from a source other than Adobe,\nthen your use, modification, or distribution of it requires the prior\nwritten permission of Adobe.\n*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst defaultTypes = () => \"default\";\nfunction mapValuesToIndex(values) {\n    let map = new Map();\n    for (let i = 0; i < values.length; i++) {\n        map.set(values[i], i);\n    }\n    return map;\n}\n/**\n *  Returns a new array that contains as many values as possible\n *  within the same location as previous array.\n *  We also try to reuse indexes by type and never return a array smaller than the old array unless items have been completely removed.\n */\nfunction getStableArray(oldValues, newSet, oldTypes = defaultTypes, newTypes = defaultTypes) {\n    let newSize = Math.max(oldValues.length, newSet.size);\n    // console.log(\"newSize: \" + JSON.stringify({ old: oldValues.length, new: newSet.size }));\n    // let oldSet = new Set(oldValues);\n    let oldMap = mapValuesToIndex(oldValues);\n    let newMap = new Map();\n    let newValues = [];\n    function assign(newValue, newIndex) {\n        newValues[newIndex] = newValue;\n        // also track in our new map of where it went.\n        newMap.set(newValue, newIndex);\n    }\n    // 1. Reassign indexes to old values if value is present in both old and new\n    for (let newValue of newSet) {\n        let oldIndex = oldMap.get(newValue);\n        if (oldIndex != null) {\n            assign(newValue, oldIndex);\n        }\n    }\n    //  2. Reassign new values to unused indexes\n    let startIndex = 0;\n    for (let newValue of newSet) {\n        let oldIndex = oldMap.get(newValue);\n        if (oldIndex == null) {\n            //  these elements were not in the old array\n            //  we must add them now.\n            let foundUndefined = false;\n            for (let index = startIndex; true; index++) {\n                let oldValue = oldValues[index];\n                let oldType = oldValue != null ? oldTypes(oldValue) : null;\n                let newType = newTypes(newValue);\n                if (newValues[index] === undefined) {\n                    foundUndefined = true;\n                    if (oldType == null || oldType === newType) {\n                        assign(newValue, index);\n                        break;\n                    }\n                }\n                else {\n                    //  we track where to start so that this isn't an\n                    //  n^2 algorithm.\n                    if (!foundUndefined) {\n                        startIndex = index;\n                    }\n                }\n            }\n        }\n    }\n    //  3. Retain old values if there are still any unused indexes.\n    for (let i = 0; i < newSize; i++) {\n        let newValue = newValues[i];\n        if (newValue === undefined) {\n            let oldValue = oldValues[i];\n            assign(oldValue, i);\n        }\n    }\n    // return newValues removing any undefined values;\n    return newValues;\n    // return newValues.filter(value => value != null);\n}\nexports.default = getStableArray;\n;\n//  Return also a Set of removed values.\n//  Those elements can be hidden and queued up for reuse by anything.\n//  If those elements are not toggled back open then they could end up being reused\n//  for their previous items which would be efficient and not uncommon.\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = void 0;\n/*\nCopyright 2019 Adobe\nAll Rights Reserved.\n\nNOTICE: Adobe permits you to use, modify, and distribute this file in\naccordance with the terms of the Adobe license agreement accompanying\nit. If you have received this file from a source other than Adobe,\nthen your use, modification, or distribution of it requires the prior\nwritten permission of Adobe.\n*/\n__exportStar(require(\"./Virtualizer\"), exports);\n__exportStar(require(\"./VirtualizerApi\"), exports);\nvar Virtualizer_1 = require(\"./Virtualizer\");\nObject.defineProperty(exports, \"default\", { enumerable: true, get: function () { return __importDefault(Virtualizer_1).default; } });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseCssSize = void 0;\n/*\nCopyright 2019 Adobe\nAll Rights Reserved.\n\nNOTICE: Adobe permits you to use, modify, and distribute this file in\naccordance with the terms of the Adobe license agreement accompanying\nit. If you have received this file from a source other than Adobe,\nthen your use, modification, or distribution of it requires the prior\nwritten permission of Adobe.\n*/\nfunction parseCssSize(size) {\n    if (size && size !== \"none\") {\n        if (size.endsWith(\"px\")) {\n            return parseFloat(size.slice(0, -2));\n        }\n        else {\n            console.warn(\"Unsupported units: \" + size);\n        }\n    }\n    return 0;\n}\nexports.parseCssSize = parseCssSize;\nclass Margin {\n    constructor(left, top = left, right = left, bottom = top) {\n        this.left = left;\n        this.top = top;\n        this.right = right;\n        this.bottom = bottom;\n    }\n    get horizontal() {\n        return this.left + this.right;\n    }\n    get vertical() {\n        return this.top + this.bottom;\n    }\n    static fromCssMargin(css) {\n        let cacheKey = css.margin || \"\";\n        let cached = Margin.cache.get(cacheKey);\n        if (cached == null) {\n            Margin.cache.set(cacheKey, cached = new Margin(parseCssSize(css.marginLeft), parseCssSize(css.marginTop), parseCssSize(css.marginRight), parseCssSize(css.marginBottom)));\n        }\n        return cached;\n    }\n    static fromCssPadding(css) {\n        let cacheKey = css.padding || \"\";\n        let cached = Margin.cache.get(cacheKey);\n        if (cached == null) {\n            Margin.cache.set(cacheKey, cached = new Margin(parseCssSize(css.paddingLeft), parseCssSize(css.paddingTop), parseCssSize(css.paddingRight), parseCssSize(css.paddingBottom)));\n        }\n        return cached;\n    }\n    toString() {\n        return `Margin(${this.left},${this.top},${this.right},${this.bottom})`;\n    }\n}\nexports.default = Margin;\n//  we are going to memoize these values for performance...\n//  and because they are almost always the same few values.\nMargin.cache = new Map();\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UxpResizeObserver = void 0;\n/*\nCopyright 2019 Adobe\nAll Rights Reserved.\n\nNOTICE: Adobe permits you to use, modify, and distribute this file in\naccordance with the terms of the Adobe license agreement accompanying\nit. If you have received this file from a source other than Adobe,\nthen your use, modification, or distribution of it requires the prior\nwritten permission of Adobe.\n*/\nconst __1 = require(\"..\");\nclass UxpResizeObserver {\n    constructor(callback) {\n        const resizeObserver = this;\n        this.elements = new Set();\n        this.pendingEntries = [];\n        this.externalObserver = callback;\n        this.internalObserver = function () {\n            let element = this;\n            let width = element.offsetWidth;\n            let height = element.offsetHeight;\n            resizeObserver.queueCallback({ target: element, contentRect: new DOMRect(0, 0, width, height) });\n        };\n        this.queuedCallback = () => {\n            this.queuedCallbackId = null;\n            if (this.pendingEntries.length > 0) {\n                let entries = this.pendingEntries;\n                this.pendingEntries = [];\n                callback(entries, this);\n            }\n        };\n    }\n    queueCallback(entry) {\n        this.pendingEntries.push(entry);\n        if (this.queuedCallbackId == null) {\n            this.queuedCallbackId = setTimeout(this.queuedCallback, 0);\n        }\n    }\n    observe(element, options) {\n        if (options != null && options.box !== \"border-box\") {\n            console.warn(`ResizeObserver shim only supports 'border-box', not ${options.box}`);\n        }\n        element.addEventListener(\"resize\", this.internalObserver);\n        this.elements.add(element);\n    }\n    unobserve(element) {\n        if (this.elements.has(element)) {\n            element.removeEventListener(\"resize\", this.internalObserver);\n            this.elements.delete(element);\n        }\n    }\n    disconnect() {\n        for (let element of this.elements.values()) {\n            this.unobserve(element);\n        }\n    }\n}\nexports.UxpResizeObserver = UxpResizeObserver;\nlet ResizeObserver = UxpResizeObserver;\nif (typeof window !== \"undefined\") {\n    if (window.ResizeObserver == null) {\n        if (__1.isUXP) {\n            window.ResizeObserver = ResizeObserver;\n        }\n        else {\n            console.error(\"This browser requires a ResizeObserver shim\");\n        }\n    }\n    else {\n        ResizeObserver = window.ResizeObserver;\n    }\n}\nexports.default = ResizeObserver;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction lerp(a, b, alpha) {\n    return (a * (1 - alpha)) + (b * alpha);\n}\nexports.default = lerp;\n","\"use strict\";\n/*\nCopyright 2019 Adobe\nAll Rights Reserved.\n\nNOTICE: Adobe permits you to use, modify, and distribute this file in\naccordance with the terms of the Adobe license agreement accompanying\nit. If you have received this file from a source other than Adobe,\nthen your use, modification, or distribution of it requires the prior\nwritten permission of Adobe.\n*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction memoize(fn) {\n    const symbol = Symbol();\n    const cache = new WeakMap();\n    return (input) => {\n        const e = Object.isExtensible(input);\n        let value = e ? input[symbol] : cache.get(input);\n        if (value === undefined) {\n            value = fn(input);\n            if (e) {\n                input[symbol] = value;\n            }\n            else {\n                cache.set(input, value);\n            }\n        }\n        return value;\n    };\n}\nexports.default = memoize;\n","\"use strict\";\n/*\nCopyright 2019 Adobe\nAll Rights Reserved.\n\nNOTICE: Adobe permits you to use, modify, and distribute this file in\naccordance with the terms of the Adobe license agreement accompanying\nit. If you have received this file from a source other than Adobe,\nthen your use, modification, or distribution of it requires the prior\nwritten permission of Adobe.\n*/\nif (typeof Element !== \"undefined\" && Element.prototype.scrollTo == null) {\n    /**\n     * Scrolls the element to the new x and y positions. If options object is used with behavior: \"smooth\" then the element is smoothly scrolled.\n     * @param {*} xOrOptions either the new scrollLeft position or an options object.\n     * @param {*} y the optional new scrollTop position.\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollTo\n     */\n    Element.prototype.scrollTo = function scrollTo(xOrOptions, y) {\n        let x;\n        let behavior = \"auto\";\n        if (typeof xOrOptions === \"object\" && xOrOptions != null) {\n            behavior = xOrOptions.behavior;\n            x = xOrOptions.left;\n            y = xOrOptions.top;\n        }\n        if (x == null) {\n            x = this.scrollLeft;\n        }\n        if (y == null) {\n            y = this.scrollTop;\n        }\n        cancelSmoothScrolling(this);\n        if (behavior === \"smooth\") {\n            beginSmoothScrolling(this, x, y);\n        }\n        else {\n            this.scrollLeft = x;\n            this.scrollTop = y;\n        }\n    };\n}\nconst scrollToAnimateId = Symbol(\"Element.scrollToAnimateId\");\nfunction cancelSmoothScrolling(element) {\n    if (element[scrollToAnimateId] != null) {\n        cancelAnimationFrame(element[scrollToAnimateId]);\n        element[scrollToAnimateId] = null;\n    }\n}\nfunction beginSmoothScrolling(element, x, y) {\n    const duration = 0.5;\n    const startX = element.scrollLeft;\n    const startY = element.scrollTop;\n    //  we use the parametric function to provide ease-in-out\n    const parametricBlend = (t, p = 1.8) => t ** p / (t ** p + (1 - t) ** p);\n    const lerp = (a, b, alpha) => Math.round(a + (b - a) * alpha);\n    const start = Date.now();\n    const animatePosition = () => {\n        const time = Date.now();\n        const deltaTime = (time - start) / 1000;\n        const alpha = parametricBlend(Math.min(1, deltaTime / duration));\n        element.scrollLeft = lerp(startX, x, alpha);\n        element.scrollTop = lerp(startY, y, alpha);\n        if (alpha < 1) {\n            element[scrollToAnimateId] = requestAnimationFrame(animatePosition);\n        }\n        else {\n            element[scrollToAnimateId] = null;\n        }\n    };\n    animatePosition();\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\nCopyright 2019 Adobe\nAll Rights Reserved.\n\nNOTICE: Adobe permits you to use, modify, and distribute this file in\naccordance with the terms of the Adobe license agreement accompanying\nit. If you have received this file from a source other than Adobe,\nthen your use, modification, or distribution of it requires the prior\nwritten permission of Adobe.\n*/\nrequire(\"./scrollToShim\");\n","\"use strict\";\n/*\nCopyright 2019 Adobe\nAll Rights Reserved.\n\nNOTICE: Adobe permits you to use, modify, and distribute this file in\naccordance with the terms of the Adobe license agreement accompanying\nit. If you have received this file from a source other than Adobe,\nthen your use, modification, or distribution of it requires the prior\nwritten permission of Adobe.\n*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isUXP = void 0;\nexports.isUXP = typeof document !== \"undefined\" && document.location.protocol === \"plugin:\";\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"const richTypes = { Date: true, RegExp: true, String: true, Number: true };\nexport default function diff(\n\tobj,\n\tnewObj,\n\toptions = { cyclesFix: true },\n\t_stack = []\n) {\n\tlet diffs = [];\n\tconst isObjArray = Array.isArray(obj);\n\tfor (const key in obj) {\n\t\tconst objKey = obj[key];\n\t\tconst path = isObjArray ? +key : key;\n\t\tif (!(key in newObj)) {\n\t\t\tdiffs.push({\n\t\t\t\ttype: \"REMOVE\",\n\t\t\t\tpath: [path],\n\t\t\t\toldValue: obj[key],\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tconst newObjKey = newObj[key];\n\t\tconst areObjects =\n\t\t\ttypeof objKey === \"object\" && typeof newObjKey === \"object\";\n\t\tif (\n\t\t\tobjKey &&\n\t\t\tnewObjKey &&\n\t\t\tareObjects &&\n\t\t\t!richTypes[Object.getPrototypeOf(objKey).constructor.name] &&\n\t\t\t(!options.cyclesFix || !_stack.includes(objKey))\n\t\t) {\n\t\t\tconst nestedDiffs = diff(\n\t\t\t\tobjKey,\n\t\t\t\tnewObjKey,\n\t\t\t\toptions,\n\t\t\t\toptions.cyclesFix ? _stack.concat([objKey]) : []\n\t\t\t);\n\t\t\tdiffs.push.apply(\n\t\t\t\tdiffs,\n\t\t\t\tnestedDiffs.map((difference) => {\n\t\t\t\t\tdifference.path.unshift(path);\n\t\t\t\t\treturn difference;\n\t\t\t\t})\n\t\t\t);\n\t\t} else if (\n\t\t\tobjKey !== newObjKey &&\n\t\t\t!(\n\t\t\t\tareObjects &&\n\t\t\t\t(isNaN(objKey)\n\t\t\t\t\t? objKey + \"\" === newObjKey + \"\"\n\t\t\t\t\t: +objKey === +newObjKey)\n\t\t\t)\n\t\t) {\n\t\t\tdiffs.push({\n\t\t\t\tpath: [path],\n\t\t\t\ttype: \"CHANGE\",\n\t\t\t\tvalue: newObjKey,\n\t\t\t\toldValue: objKey,\n\t\t\t});\n\t\t}\n\t}\n\tconst isNewObjArray = Array.isArray(newObj);\n\tfor (const key in newObj) {\n\t\tif (!(key in obj)) {\n\t\t\tdiffs.push({\n\t\t\t\ttype: \"CREATE\",\n\t\t\t\tpath: [isNewObjArray ? +key : key],\n\t\t\t\tvalue: newObj[key],\n\t\t\t});\n\t\t}\n\t}\n\treturn diffs;\n}\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Context } from './types';\n\n/** Get a key to uniquely identify a context value */\nexport function createContextKey(description: string) {\n  // The specification states that for the same input, multiple calls should\n  // return different keys. Due to the nature of the JS dependency management\n  // system, this creates problems where multiple versions of some package\n  // could hold different keys for the same property.\n  //\n  // Therefore, we use Symbol.for which returns the same key for the same input.\n  return Symbol.for(description);\n}\n\nclass BaseContext implements Context {\n  private _currentContext!: Map<symbol, unknown>;\n\n  /**\n   * Construct a new context which inherits values from an optional parent context.\n   *\n   * @param parentContext a context from which to inherit values\n   */\n  constructor(parentContext?: Map<symbol, unknown>) {\n    // for minification\n    const self = this;\n\n    self._currentContext = parentContext ? new Map(parentContext) : new Map();\n\n    self.getValue = (key: symbol) => self._currentContext.get(key);\n\n    self.setValue = (key: symbol, value: unknown): Context => {\n      const context = new BaseContext(self._currentContext);\n      context._currentContext.set(key, value);\n      return context;\n    };\n\n    self.deleteValue = (key: symbol): Context => {\n      const context = new BaseContext(self._currentContext);\n      context._currentContext.delete(key);\n      return context;\n    };\n  }\n\n  /**\n   * Get a value from the context.\n   *\n   * @param key key which identifies a context value\n   */\n  public getValue!: (key: symbol) => unknown;\n\n  /**\n   * Create a new context which inherits from this context and has\n   * the given key set to the given value.\n   *\n   * @param key context key for which to set the value\n   * @param value value to set for the given key\n   */\n  public setValue!: (key: symbol, value: unknown) => Context;\n\n  /**\n   * Return a new context which inherits from this context but does\n   * not contain a value for the given key.\n   *\n   * @param key context key for which to clear a value\n   */\n  public deleteValue!: (key: symbol) => Context;\n}\n\n/** The root context is used as the default parent context when there is no active context */\nexport const ROOT_CONTEXT: Context = new BaseContext();\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ROOT_CONTEXT } from './context';\nimport * as types from './types';\n\nexport class NoopContextManager implements types.ContextManager {\n  active(): types.Context {\n    return ROOT_CONTEXT;\n  }\n\n  with<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n    _context: types.Context,\n    fn: F,\n    thisArg?: ThisParameterType<F>,\n    ...args: A\n  ): ReturnType<F> {\n    return fn.call(thisArg, ...args);\n  }\n\n  bind<T>(_context: types.Context, target: T): T {\n    return target;\n  }\n\n  enable(): this {\n    return this;\n  }\n\n  disable(): this {\n    return this;\n  }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Updates to this file should also be replicated to @opentelemetry/core too.\n\n/**\n * - globalThis (New standard)\n * - self (Will return the current window instance for supported browsers)\n * - window (fallback for older browser implementations)\n * - global (NodeJS implementation)\n * - <object> (When all else fails)\n */\n\n/** only globals that common to node and browsers are allowed */\n// eslint-disable-next-line node/no-unsupported-features/es-builtins, no-undef\nexport const _globalThis: typeof globalThis =\n  typeof globalThis === 'object' ? globalThis :\n    typeof self === 'object' ? self :\n      typeof window === 'object' ? window :\n        typeof global === 'object' ? global :\n  {} as typeof globalThis;\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// this is autogenerated file, see scripts/version-update.js\nexport const VERSION = '1.3.0';\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { VERSION } from '../version';\n\nconst re = /^(\\d+)\\.(\\d+)\\.(\\d+)(-(.+))?$/;\n\n/**\n * Create a function to test an API version to see if it is compatible with the provided ownVersion.\n *\n * The returned function has the following semantics:\n * - Exact match is always compatible\n * - Major versions must match exactly\n *    - 1.x package cannot use global 2.x package\n *    - 2.x package cannot use global 1.x package\n * - The minor version of the API module requesting access to the global API must be less than or equal to the minor version of this API\n *    - 1.3 package may use 1.4 global because the later global contains all functions 1.3 expects\n *    - 1.4 package may NOT use 1.3 global because it may try to call functions which don't exist on 1.3\n * - If the major version is 0, the minor version is treated as the major and the patch is treated as the minor\n * - Patch and build tag differences are not considered at this time\n *\n * @param ownVersion version which should be checked against\n */\nexport function _makeCompatibilityCheck(\n  ownVersion: string\n): (globalVersion: string) => boolean {\n  const acceptedVersions = new Set<string>([ownVersion]);\n  const rejectedVersions = new Set<string>();\n\n  const myVersionMatch = ownVersion.match(re);\n  if (!myVersionMatch) {\n    // we cannot guarantee compatibility so we always return noop\n    return () => false;\n  }\n\n  const ownVersionParsed = {\n    major: +myVersionMatch[1],\n    minor: +myVersionMatch[2],\n    patch: +myVersionMatch[3],\n    prerelease: myVersionMatch[4],\n  };\n\n  // if ownVersion has a prerelease tag, versions must match exactly\n  if (ownVersionParsed.prerelease != null) {\n    return function isExactmatch(globalVersion: string): boolean {\n      return globalVersion === ownVersion;\n    };\n  }\n\n  function _reject(v: string) {\n    rejectedVersions.add(v);\n    return false;\n  }\n\n  function _accept(v: string) {\n    acceptedVersions.add(v);\n    return true;\n  }\n\n  return function isCompatible(globalVersion: string): boolean {\n    if (acceptedVersions.has(globalVersion)) {\n      return true;\n    }\n\n    if (rejectedVersions.has(globalVersion)) {\n      return false;\n    }\n\n    const globalVersionMatch = globalVersion.match(re);\n    if (!globalVersionMatch) {\n      // cannot parse other version\n      // we cannot guarantee compatibility so we always noop\n      return _reject(globalVersion);\n    }\n\n    const globalVersionParsed = {\n      major: +globalVersionMatch[1],\n      minor: +globalVersionMatch[2],\n      patch: +globalVersionMatch[3],\n      prerelease: globalVersionMatch[4],\n    };\n\n    // if globalVersion has a prerelease tag, versions must match exactly\n    if (globalVersionParsed.prerelease != null) {\n      return _reject(globalVersion);\n    }\n\n    // major versions must match\n    if (ownVersionParsed.major !== globalVersionParsed.major) {\n      return _reject(globalVersion);\n    }\n\n    if (ownVersionParsed.major === 0) {\n      if (\n        ownVersionParsed.minor === globalVersionParsed.minor &&\n        ownVersionParsed.patch <= globalVersionParsed.patch\n      ) {\n        return _accept(globalVersion);\n      }\n\n      return _reject(globalVersion);\n    }\n\n    if (ownVersionParsed.minor <= globalVersionParsed.minor) {\n      return _accept(globalVersion);\n    }\n\n    return _reject(globalVersion);\n  };\n}\n\n/**\n * Test an API version to see if it is compatible with this API.\n *\n * - Exact match is always compatible\n * - Major versions must match exactly\n *    - 1.x package cannot use global 2.x package\n *    - 2.x package cannot use global 1.x package\n * - The minor version of the API module requesting access to the global API must be less than or equal to the minor version of this API\n *    - 1.3 package may use 1.4 global because the later global contains all functions 1.3 expects\n *    - 1.4 package may NOT use 1.3 global because it may try to call functions which don't exist on 1.3\n * - If the major version is 0, the minor version is treated as the major and the patch is treated as the minor\n * - Patch and build tag differences are not considered at this time\n *\n * @param version version of the API requesting an instance of the global API\n */\nexport const isCompatible = _makeCompatibilityCheck(VERSION);\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MeterProvider } from '../metrics/MeterProvider';\nimport { ContextManager } from '../context/types';\nimport { DiagLogger } from '../diag/types';\nimport { _globalThis } from '../platform';\nimport { TextMapPropagator } from '../propagation/TextMapPropagator';\nimport type { TracerProvider } from '../trace/tracer_provider';\nimport { VERSION } from '../version';\nimport { isCompatible } from './semver';\n\nconst major = VERSION.split('.')[0];\nconst GLOBAL_OPENTELEMETRY_API_KEY = Symbol.for(\n  `opentelemetry.js.api.${major}`\n);\n\nconst _global = _globalThis as OTelGlobal;\n\nexport function registerGlobal<Type extends keyof OTelGlobalAPI>(\n  type: Type,\n  instance: OTelGlobalAPI[Type],\n  diag: DiagLogger,\n  allowOverride = false\n): boolean {\n  const api = (_global[GLOBAL_OPENTELEMETRY_API_KEY] = _global[\n    GLOBAL_OPENTELEMETRY_API_KEY\n  ] ?? {\n    version: VERSION,\n  });\n\n  if (!allowOverride && api[type]) {\n    // already registered an API of this type\n    const err = new Error(\n      `@opentelemetry/api: Attempted duplicate registration of API: ${type}`\n    );\n    diag.error(err.stack || err.message);\n    return false;\n  }\n\n  if (api.version !== VERSION) {\n    // All registered APIs must be of the same version exactly\n    const err = new Error(\n      '@opentelemetry/api: All API registration versions must match'\n    );\n    diag.error(err.stack || err.message);\n    return false;\n  }\n\n  api[type] = instance;\n  diag.debug(\n    `@opentelemetry/api: Registered a global for ${type} v${VERSION}.`\n  );\n\n  return true;\n}\n\nexport function getGlobal<Type extends keyof OTelGlobalAPI>(\n  type: Type\n): OTelGlobalAPI[Type] | undefined {\n  const globalVersion = _global[GLOBAL_OPENTELEMETRY_API_KEY]?.version;\n  if (!globalVersion || !isCompatible(globalVersion)) {\n    return;\n  }\n  return _global[GLOBAL_OPENTELEMETRY_API_KEY]?.[type];\n}\n\nexport function unregisterGlobal(type: keyof OTelGlobalAPI, diag: DiagLogger) {\n  diag.debug(\n    `@opentelemetry/api: Unregistering a global for ${type} v${VERSION}.`\n  );\n  const api = _global[GLOBAL_OPENTELEMETRY_API_KEY];\n\n  if (api) {\n    delete api[type];\n  }\n}\n\ntype OTelGlobal = {\n  [GLOBAL_OPENTELEMETRY_API_KEY]?: OTelGlobalAPI;\n};\n\ntype OTelGlobalAPI = {\n  version: string;\n\n  diag?: DiagLogger;\n  trace?: TracerProvider;\n  context?: ContextManager;\n  metrics?: MeterProvider;\n  propagation?: TextMapPropagator;\n};\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport type DiagLogFunction = (message: string, ...args: unknown[]) => void;\n\n/**\n * Defines an internal diagnostic logger interface which is used to log internal diagnostic\n * messages, you can set the default diagnostic logger via the {@link DiagAPI} setLogger function.\n * API provided implementations include :-\n * - a No-Op {@link createNoopDiagLogger}\n * - a {@link DiagLogLevel} filtering wrapper {@link createLogLevelDiagLogger}\n * - a general Console {@link DiagConsoleLogger} version.\n */\nexport interface DiagLogger {\n  /** Log an error scenario that was not expected and caused the requested operation to fail. */\n  error: DiagLogFunction;\n\n  /**\n   * Log a warning scenario to inform the developer of an issues that should be investigated.\n   * The requested operation may or may not have succeeded or completed.\n   */\n  warn: DiagLogFunction;\n\n  /**\n   * Log a general informational message, this should not affect functionality.\n   * This is also the default logging level so this should NOT be used for logging\n   * debugging level information.\n   */\n  info: DiagLogFunction;\n\n  /**\n   * Log a general debug message that can be useful for identifying a failure.\n   * Information logged at this level may include diagnostic details that would\n   * help identify a failure scenario.\n   * For example: Logging the order of execution of async operations.\n   */\n  debug: DiagLogFunction;\n\n  /**\n   * Log a detailed (verbose) trace level logging that can be used to identify failures\n   * where debug level logging would be insufficient, this level of tracing can include\n   * input and output parameters and as such may include PII information passing through\n   * the API. As such it is recommended that this level of tracing should not be enabled\n   * in a production environment.\n   */\n  verbose: DiagLogFunction;\n}\n\n/**\n * Defines the available internal logging levels for the diagnostic logger, the numeric values\n * of the levels are defined to match the original values from the initial LogLevel to avoid\n * compatibility/migration issues for any implementation that assume the numeric ordering.\n */\nexport enum DiagLogLevel {\n  /** Diagnostic Logging level setting to disable all logging (except and forced logs) */\n  NONE = 0,\n\n  /** Identifies an error scenario */\n  ERROR = 30,\n\n  /** Identifies a warning scenario */\n  WARN = 50,\n\n  /** General informational log message */\n  INFO = 60,\n\n  /** General debug log message */\n  DEBUG = 70,\n\n  /**\n   * Detailed trace level logging should only be used for development, should only be set\n   * in a development environment.\n   */\n  VERBOSE = 80,\n\n  /** Used to set the logging level to include all logging */\n  ALL = 9999,\n}\n\n/**\n * Defines options for ComponentLogger\n */\nexport interface ComponentLoggerOptions {\n  namespace: string;\n}\n\nexport interface LoggerOptions {\n  /**\n   * The {@link DiagLogLevel} used to filter logs sent to the logger.\n   *\n   * @defaultValue DiagLogLevel.INFO\n   */\n  logLevel?: DiagLogLevel;\n\n  /**\n   * Setting this value to `true` will suppress the warning message normally emitted when registering a logger when another logger is already registered.\n   */\n  suppressOverrideMessage?: boolean;\n}\n\nexport interface DiagLoggerApi {\n  /**\n  * Set the global DiagLogger and DiagLogLevel.\n  * If a global diag logger is already set, this will override it.\n  *\n  * @param logger - The {@link DiagLogger} instance to set as the default logger.\n  * @param options - A {@link LoggerOptions} object. If not provided, default values will be set.\n  * @returns `true` if the logger was successfully registered, else `false`\n  */\n  setLogger(logger: DiagLogger, options?: LoggerOptions): boolean;\n\n  /**\n   *\n   * @param logger - The {@link DiagLogger} instance to set as the default logger.\n   * @param logLevel - The {@link DiagLogLevel} used to filter logs sent to the logger. If not provided it will default to {@link DiagLogLevel.INFO}.\n   * @returns `true` if the logger was successfully registered, else `false`\n   */\n  setLogger(logger: DiagLogger, logLevel?: DiagLogLevel): boolean;\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getGlobal } from '../internal/global-utils';\nimport { ComponentLoggerOptions, DiagLogger, DiagLogFunction } from './types';\n\n/**\n * Component Logger which is meant to be used as part of any component which\n * will add automatically additional namespace in front of the log message.\n * It will then forward all message to global diag logger\n * @example\n * const cLogger = diag.createComponentLogger({ namespace: '@opentelemetry/instrumentation-http' });\n * cLogger.debug('test');\n * // @opentelemetry/instrumentation-http test\n */\nexport class DiagComponentLogger implements DiagLogger {\n  private _namespace: string;\n\n  constructor(props: ComponentLoggerOptions) {\n    this._namespace = props.namespace || 'DiagComponentLogger';\n  }\n\n  public debug(...args: any[]): void {\n    return logProxy('debug', this._namespace, args);\n  }\n\n  public error(...args: any[]): void {\n    return logProxy('error', this._namespace, args);\n  }\n\n  public info(...args: any[]): void {\n    return logProxy('info', this._namespace, args);\n  }\n\n  public warn(...args: any[]): void {\n    return logProxy('warn', this._namespace, args);\n  }\n\n  public verbose(...args: any[]): void {\n    return logProxy('verbose', this._namespace, args);\n  }\n}\n\nfunction logProxy(\n  funcName: keyof DiagLogger,\n  namespace: string,\n  args: any\n): void {\n  const logger = getGlobal('diag');\n  // shortcut if logger not set\n  if (!logger) {\n    return;\n  }\n\n  args.unshift(namespace);\n  return logger[funcName](...(args as Parameters<DiagLogFunction>));\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DiagComponentLogger } from '../diag/ComponentLogger';\nimport { createLogLevelDiagLogger } from '../diag/internal/logLevelLogger';\nimport {\n  ComponentLoggerOptions,\n  DiagLogFunction,\n  DiagLogger,\n  DiagLoggerApi,\n  DiagLogLevel,\n} from '../diag/types';\nimport {\n  getGlobal,\n  registerGlobal,\n  unregisterGlobal,\n} from '../internal/global-utils';\n\nconst API_NAME = 'diag';\n\n/**\n * Singleton object which represents the entry point to the OpenTelemetry internal\n * diagnostic API\n */\nexport class DiagAPI implements DiagLogger, DiagLoggerApi {\n  private static _instance?: DiagAPI;\n\n  /** Get the singleton instance of the DiagAPI API */\n  public static instance(): DiagAPI {\n    if (!this._instance) {\n      this._instance = new DiagAPI();\n    }\n\n    return this._instance;\n  }\n\n  /**\n   * Private internal constructor\n   * @private\n   */\n  private constructor() {\n    function _logProxy(funcName: keyof DiagLogger): DiagLogFunction {\n      return function (...args) {\n        const logger = getGlobal('diag');\n        // shortcut if logger not set\n        if (!logger) return;\n        return logger[funcName](...args);\n      };\n    }\n\n    // Using self local variable for minification purposes as 'this' cannot be minified\n    const self = this;\n\n    // DiagAPI specific functions\n\n    const setLogger: DiagLoggerApi['setLogger'] = (\n      logger,\n      optionsOrLogLevel = { logLevel: DiagLogLevel.INFO },\n    ) => {\n      if (logger === self) {\n        // There isn't much we can do here.\n        // Logging to the console might break the user application.\n        // Try to log to self. If a logger was previously registered it will receive the log.\n        const err = new Error(\n          'Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation'\n        );\n        self.error(err.stack ?? err.message);\n        return false;\n      }\n\n      if (typeof optionsOrLogLevel === 'number') {\n        optionsOrLogLevel = {\n          logLevel: optionsOrLogLevel,\n        };\n      }\n\n      const oldLogger = getGlobal('diag');\n      const newLogger = createLogLevelDiagLogger(optionsOrLogLevel.logLevel ?? DiagLogLevel.INFO, logger);\n      // There already is an logger registered. We'll let it know before overwriting it.\n      if (oldLogger && !optionsOrLogLevel.suppressOverrideMessage) {\n        const stack = new Error().stack ?? '<failed to generate stacktrace>';\n        oldLogger.warn(`Current logger will be overwritten from ${stack}`);\n        newLogger.warn(\n          `Current logger will overwrite one already registered from ${stack}`\n        );\n      }\n\n      return registerGlobal('diag', newLogger, self, true);\n    };\n\n    self.setLogger = setLogger;\n\n    self.disable = () => {\n      unregisterGlobal(API_NAME, self);\n    };\n\n    self.createComponentLogger = (options: ComponentLoggerOptions) => {\n      return new DiagComponentLogger(options);\n    };\n\n    self.verbose = _logProxy('verbose');\n    self.debug = _logProxy('debug');\n    self.info = _logProxy('info');\n    self.warn = _logProxy('warn');\n    self.error = _logProxy('error');\n  }\n\n  public setLogger!: DiagLoggerApi['setLogger'];\n  /**\n   *\n   */\n  public createComponentLogger!: (\n    options: ComponentLoggerOptions\n  ) => DiagLogger;\n\n  // DiagLogger implementation\n  public verbose!: DiagLogFunction;\n  public debug!: DiagLogFunction;\n  public info!: DiagLogFunction;\n  public warn!: DiagLogFunction;\n  public error!: DiagLogFunction;\n\n  /**\n   * Unregister the global logger and return to Noop\n   */\n  public disable!: () => void;\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DiagLogFunction, DiagLogger, DiagLogLevel } from '../types';\n\nexport function createLogLevelDiagLogger(\n  maxLevel: DiagLogLevel,\n  logger: DiagLogger\n): DiagLogger {\n  if (maxLevel < DiagLogLevel.NONE) {\n    maxLevel = DiagLogLevel.NONE;\n  } else if (maxLevel > DiagLogLevel.ALL) {\n    maxLevel = DiagLogLevel.ALL;\n  }\n\n  // In case the logger is null or undefined\n  logger = logger || {};\n\n  function _filterFunc(\n    funcName: keyof DiagLogger,\n    theLevel: DiagLogLevel\n  ): DiagLogFunction {\n    const theFunc = logger[funcName];\n\n    if (typeof theFunc === 'function' && maxLevel >= theLevel) {\n      return theFunc.bind(logger);\n    }\n    return function () {};\n  }\n\n  return {\n    error: _filterFunc('error', DiagLogLevel.ERROR),\n    warn: _filterFunc('warn', DiagLogLevel.WARN),\n    info: _filterFunc('info', DiagLogLevel.INFO),\n    debug: _filterFunc('debug', DiagLogLevel.DEBUG),\n    verbose: _filterFunc('verbose', DiagLogLevel.VERBOSE),\n  };\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NoopContextManager } from '../context/NoopContextManager';\nimport { Context, ContextManager } from '../context/types';\nimport {\n  getGlobal,\n  registerGlobal,\n  unregisterGlobal,\n} from '../internal/global-utils';\nimport { DiagAPI } from './diag';\n\nconst API_NAME = 'context';\nconst NOOP_CONTEXT_MANAGER = new NoopContextManager();\n\n/**\n * Singleton object which represents the entry point to the OpenTelemetry Context API\n */\nexport class ContextAPI {\n  private static _instance?: ContextAPI;\n\n  /** Empty private constructor prevents end users from constructing a new instance of the API */\n  private constructor() {}\n\n  /** Get the singleton instance of the Context API */\n  public static getInstance(): ContextAPI {\n    if (!this._instance) {\n      this._instance = new ContextAPI();\n    }\n\n    return this._instance;\n  }\n\n  /**\n   * Set the current context manager.\n   *\n   * @returns true if the context manager was successfully registered, else false\n   */\n  public setGlobalContextManager(contextManager: ContextManager): boolean {\n    return registerGlobal(API_NAME, contextManager, DiagAPI.instance());\n  }\n\n  /**\n   * Get the currently active context\n   */\n  public active(): Context {\n    return this._getContextManager().active();\n  }\n\n  /**\n   * Execute a function with an active context\n   *\n   * @param context context to be active during function execution\n   * @param fn function to execute in a context\n   * @param thisArg optional receiver to be used for calling fn\n   * @param args optional arguments forwarded to fn\n   */\n  public with<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n    context: Context,\n    fn: F,\n    thisArg?: ThisParameterType<F>,\n    ...args: A\n  ): ReturnType<F> {\n    return this._getContextManager().with(context, fn, thisArg, ...args);\n  }\n\n  /**\n   * Bind a context to a target function or event emitter\n   *\n   * @param context context to bind to the event emitter or function. Defaults to the currently active context\n   * @param target function or event emitter to bind\n   */\n  public bind<T>(context: Context, target: T): T {\n    return this._getContextManager().bind(context, target);\n  }\n\n  private _getContextManager(): ContextManager {\n    return getGlobal(API_NAME) || NOOP_CONTEXT_MANAGER;\n  }\n\n  /** Disable and remove the global context manager */\n  public disable() {\n    this._getContextManager().disable();\n    unregisterGlobal(API_NAME, DiagAPI.instance());\n  }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { ContextAPI } from './api/context';\n/** Entrypoint for context API */\nexport const context = ContextAPI.getInstance();\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { DiagAPI } from './api/diag';\n/**\n * Entrypoint for Diag API.\n * Defines Diagnostic handler used for internal diagnostic logging operations.\n * The default provides a Noop DiagLogger implementation which may be changed via the\n * diag.setLogger(logger: DiagLogger) function.\n */\nexport const diag = DiagAPI.instance();\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Meter } from './Meter';\nimport {\n  BatchObservableCallback,\n  Counter,\n  Histogram,\n  MetricOptions,\n  ObservableCallback,\n  ObservableCounter,\n  ObservableGauge,\n  ObservableUpDownCounter,\n  UpDownCounter,\n  MetricAttributes,\n  Observable,\n} from './Metric';\n\n/**\n * NoopMeter is a noop implementation of the {@link Meter} interface. It reuses\n * constant NoopMetrics for all of its methods.\n */\nexport class NoopMeter implements Meter {\n  constructor() {}\n\n  /**\n   * @see {@link Meter.createHistogram}\n   */\n  createHistogram(_name: string, _options?: MetricOptions): Histogram {\n    return NOOP_HISTOGRAM_METRIC;\n  }\n\n  /**\n   * @see {@link Meter.createCounter}\n   */\n  createCounter(_name: string, _options?: MetricOptions): Counter {\n    return NOOP_COUNTER_METRIC;\n  }\n\n  /**\n   * @see {@link Meter.createUpDownCounter}\n   */\n  createUpDownCounter(_name: string, _options?: MetricOptions): UpDownCounter {\n    return NOOP_UP_DOWN_COUNTER_METRIC;\n  }\n\n  /**\n   * @see {@link Meter.createObservableGauge}\n   */\n  createObservableGauge(\n    _name: string,\n    _options?: MetricOptions,\n  ): ObservableGauge {\n    return NOOP_OBSERVABLE_GAUGE_METRIC;\n  }\n\n  /**\n   * @see {@link Meter.createObservableCounter}\n   */\n  createObservableCounter(\n    _name: string,\n    _options?: MetricOptions,\n  ): ObservableCounter {\n    return NOOP_OBSERVABLE_COUNTER_METRIC;\n  }\n\n  /**\n   * @see {@link Meter.createObservableUpDownCounter}\n   */\n  createObservableUpDownCounter(\n    _name: string,\n    _options?: MetricOptions,\n  ): ObservableUpDownCounter {\n    return NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC;\n  }\n\n  /**\n   * @see {@link Meter.addBatchObservableCallback}\n   */\n  addBatchObservableCallback(_callback: BatchObservableCallback, _observables: Observable[]): void {}\n\n  /**\n   * @see {@link Meter.removeBatchObservableCallback}\n   */\n  removeBatchObservableCallback(_callback: BatchObservableCallback): void {}\n}\n\nexport class NoopMetric {}\n\nexport class NoopCounterMetric extends NoopMetric implements Counter {\n  add(_value: number, _attributes: MetricAttributes): void {}\n}\n\nexport class NoopUpDownCounterMetric extends NoopMetric implements UpDownCounter {\n  add(_value: number, _attributes: MetricAttributes): void {}\n}\n\nexport class NoopHistogramMetric extends NoopMetric implements Histogram {\n  record(_value: number, _attributes: MetricAttributes): void {}\n}\n\nexport class NoopObservableMetric {\n  addCallback(_callback: ObservableCallback) {}\n\n  removeCallback(_callback: ObservableCallback) {}\n}\n\nexport class NoopObservableCounterMetric extends NoopObservableMetric implements ObservableCounter {}\n\nexport class NoopObservableGaugeMetric extends NoopObservableMetric implements ObservableGauge {}\n\nexport class NoopObservableUpDownCounterMetric extends NoopObservableMetric implements ObservableUpDownCounter {}\n\nexport const NOOP_METER = new NoopMeter();\n\n// Synchronous instruments\nexport const NOOP_COUNTER_METRIC = new NoopCounterMetric();\nexport const NOOP_HISTOGRAM_METRIC = new NoopHistogramMetric();\nexport const NOOP_UP_DOWN_COUNTER_METRIC = new NoopUpDownCounterMetric();\n\n// Asynchronous instruments\nexport const NOOP_OBSERVABLE_COUNTER_METRIC = new NoopObservableCounterMetric();\nexport const NOOP_OBSERVABLE_GAUGE_METRIC = new NoopObservableGaugeMetric();\nexport const NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC = new NoopObservableUpDownCounterMetric();\n\n/**\n * Create a no-op Meter\n */\nexport function createNoopMeter(): Meter {\n  return NOOP_METER;\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Meter, MeterOptions } from './Meter';\nimport { MeterProvider } from './MeterProvider';\nimport { NOOP_METER } from './NoopMeter';\n\n/**\n * An implementation of the {@link MeterProvider} which returns an impotent Meter\n * for all calls to `getMeter`\n */\nexport class NoopMeterProvider implements MeterProvider {\n  getMeter(_name: string, _version?: string, _options?: MeterOptions): Meter {\n    return NOOP_METER;\n  }\n}\n\nexport const NOOP_METER_PROVIDER = new NoopMeterProvider();\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Meter, MeterOptions } from '../metrics/Meter';\nimport { MeterProvider } from '../metrics/MeterProvider';\nimport { NOOP_METER_PROVIDER } from '../metrics/NoopMeterProvider';\nimport { getGlobal, registerGlobal, unregisterGlobal } from '../internal/global-utils';\nimport { DiagAPI } from './diag';\n\nconst API_NAME = 'metrics';\n\n/**\n * Singleton object which represents the entry point to the OpenTelemetry Metrics API\n */\nexport class MetricsAPI {\n  private static _instance?: MetricsAPI;\n\n  /** Empty private constructor prevents end users from constructing a new instance of the API */\n  private constructor() {}\n\n  /** Get the singleton instance of the Metrics API */\n  public static getInstance(): MetricsAPI {\n    if (!this._instance) {\n      this._instance = new MetricsAPI();\n    }\n\n    return this._instance;\n  }\n\n  /**\n   * Set the current global meter provider.\n   * Returns true if the meter provider was successfully registered, else false.\n   */\n  public setGlobalMeterProvider(provider: MeterProvider): boolean {\n    return registerGlobal(API_NAME, provider, DiagAPI.instance());\n  }\n\n  /**\n   * Returns the global meter provider.\n   */\n  public getMeterProvider(): MeterProvider {\n    return getGlobal(API_NAME) || NOOP_METER_PROVIDER;\n  }\n\n  /**\n   * Returns a meter from the global meter provider.\n   */\n  public getMeter(name: string, version?: string, options?: MeterOptions): Meter {\n    return this.getMeterProvider().getMeter(name, version, options);\n  }\n\n  /** Remove the global meter provider */\n  public disable(): void {\n    unregisterGlobal(API_NAME, DiagAPI.instance());\n  }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { MetricsAPI } from './api/metrics';\n/** Entrypoint for metrics API */\nexport const metrics = MetricsAPI.getInstance();\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Context } from '../context/types';\nimport { TextMapPropagator } from './TextMapPropagator';\n\n/**\n * No-op implementations of {@link TextMapPropagator}.\n */\nexport class NoopTextMapPropagator implements TextMapPropagator {\n  /** Noop inject function does nothing */\n  inject(_context: Context, _carrier: unknown): void {}\n  /** Noop extract function does nothing and returns the input context */\n  extract(context: Context, _carrier: unknown): Context {\n    return context;\n  }\n  fields(): string[] {\n    return [];\n  }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Context } from '../context/types';\n\n/**\n * Injects `Context` into and extracts it from carriers that travel\n * in-band across process boundaries. Encoding is expected to conform to the\n * HTTP Header Field semantics. Values are often encoded as RPC/HTTP request\n * headers.\n *\n * The carrier of propagated data on both the client (injector) and server\n * (extractor) side is usually an object such as http headers. Propagation is\n * usually implemented via library-specific request interceptors, where the\n * client-side injects values and the server-side extracts them.\n */\nexport interface TextMapPropagator<Carrier = any> {\n  /**\n   * Injects values from a given `Context` into a carrier.\n   *\n   * OpenTelemetry defines a common set of format values (TextMapPropagator),\n   * and each has an expected `carrier` type.\n   *\n   * @param context the Context from which to extract values to transmit over\n   *     the wire.\n   * @param carrier the carrier of propagation fields, such as http request\n   *     headers.\n   * @param setter an optional {@link TextMapSetter}. If undefined, values will be\n   *     set by direct object assignment.\n   */\n  inject(\n    context: Context,\n    carrier: Carrier,\n    setter: TextMapSetter<Carrier>\n  ): void;\n\n  /**\n   * Given a `Context` and a carrier, extract context values from a\n   * carrier and return a new context, created from the old context, with the\n   * extracted values.\n   *\n   * @param context the Context from which to extract values to transmit over\n   *     the wire.\n   * @param carrier the carrier of propagation fields, such as http request\n   *     headers.\n   * @param getter an optional {@link TextMapGetter}. If undefined, keys will be all\n   *     own properties, and keys will be accessed by direct object access.\n   */\n  extract(\n    context: Context,\n    carrier: Carrier,\n    getter: TextMapGetter<Carrier>\n  ): Context;\n\n  /**\n   * Return a list of all fields which may be used by the propagator.\n   */\n  fields(): string[];\n}\n\n/**\n * A setter is specified by the caller to define a specific method\n * to set key/value pairs on the carrier within a propagator.\n */\nexport interface TextMapSetter<Carrier = any> {\n  /**\n   * Callback used to set a key/value pair on an object.\n   *\n   * Should be called by the propagator each time a key/value pair\n   * should be set, and should set that key/value pair on the propagator.\n   *\n   * @param carrier object or class which carries key/value pairs\n   * @param key string key to modify\n   * @param value value to be set to the key on the carrier\n   */\n  set(carrier: Carrier, key: string, value: string): void;\n}\n\n/**\n * A getter is specified by the caller to define a specific method\n * to get the value of a key from a carrier.\n */\nexport interface TextMapGetter<Carrier = any> {\n  /**\n   * Get a list of all keys available on the carrier.\n   *\n   * @param carrier\n   */\n  keys(carrier: Carrier): string[];\n\n  /**\n   * Get the value of a specific key from the carrier.\n   *\n   * @param carrier\n   * @param key\n   */\n  get(carrier: Carrier, key: string): undefined | string | string[];\n}\n\nexport const defaultTextMapGetter: TextMapGetter = {\n  get(carrier, key) {\n    if (carrier == null) {\n      return undefined;\n    }\n    return carrier[key];\n  },\n\n  keys(carrier) {\n    if (carrier == null) {\n      return [];\n    }\n    return Object.keys(carrier);\n  },\n};\n\nexport const defaultTextMapSetter: TextMapSetter = {\n  set(carrier, key, value) {\n    if (carrier == null) {\n      return;\n    }\n\n    carrier[key] = value;\n  },\n};\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createContextKey } from '../context/context';\nimport { Context } from '../context/types';\nimport { Baggage } from './types';\n\n/**\n * Baggage key\n */\nconst BAGGAGE_KEY = createContextKey('OpenTelemetry Baggage Key');\n\n/**\n * Retrieve the current baggage from the given context\n *\n * @param {Context} Context that manage all context values\n * @returns {Baggage} Extracted baggage from the context\n */\nexport function getBaggage(context: Context): Baggage | undefined {\n  return (context.getValue(BAGGAGE_KEY) as Baggage) || undefined;\n}\n\n/**\n * Store a baggage in the given context\n *\n * @param {Context} Context that manage all context values\n * @param {Baggage} baggage that will be set in the actual context\n */\nexport function setBaggage(context: Context, baggage: Baggage): Context {\n  return context.setValue(BAGGAGE_KEY, baggage);\n}\n\n/**\n * Delete the baggage stored in the given context\n *\n * @param {Context} Context that manage all context values\n */\nexport function deleteBaggage(context: Context): Context {\n  return context.deleteValue(BAGGAGE_KEY);\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Baggage, BaggageEntry } from '../types';\n\nexport class BaggageImpl implements Baggage {\n  private _entries: Map<string, BaggageEntry>;\n\n  constructor(entries?: Map<string, BaggageEntry>) {\n    this._entries = entries ? new Map(entries) : new Map();\n  }\n\n  getEntry(key: string): BaggageEntry | undefined {\n    const entry = this._entries.get(key);\n    if (!entry) {\n      return undefined;\n    }\n\n    return Object.assign({}, entry);\n  }\n\n  getAllEntries(): [string, BaggageEntry][] {\n    return Array.from(this._entries.entries()).map(([k, v]) => [k, v]);\n  }\n\n  setEntry(key: string, entry: BaggageEntry): BaggageImpl {\n    const newBaggage = new BaggageImpl(this._entries);\n    newBaggage._entries.set(key, entry);\n    return newBaggage;\n  }\n\n  removeEntry(key: string): BaggageImpl {\n    const newBaggage = new BaggageImpl(this._entries);\n    newBaggage._entries.delete(key);\n    return newBaggage;\n  }\n\n  removeEntries(...keys: string[]): BaggageImpl {\n    const newBaggage = new BaggageImpl(this._entries);\n    for (const key of keys) {\n      newBaggage._entries.delete(key);\n    }\n    return newBaggage;\n  }\n\n  clear(): BaggageImpl {\n    return new BaggageImpl();\n  }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DiagAPI } from '../api/diag';\nimport { BaggageImpl } from './internal/baggage-impl';\nimport { baggageEntryMetadataSymbol } from './internal/symbol';\nimport { Baggage, BaggageEntry, BaggageEntryMetadata } from './types';\n\nconst diag = DiagAPI.instance();\n\n/**\n * Create a new Baggage with optional entries\n *\n * @param entries An array of baggage entries the new baggage should contain\n */\nexport function createBaggage(\n  entries: Record<string, BaggageEntry> = {}\n): Baggage {\n  return new BaggageImpl(new Map(Object.entries(entries)));\n}\n\n/**\n * Create a serializable BaggageEntryMetadata object from a string.\n *\n * @param str string metadata. Format is currently not defined by the spec and has no special meaning.\n *\n */\nexport function baggageEntryMetadataFromString(\n  str: string\n): BaggageEntryMetadata {\n  if (typeof str !== 'string') {\n    diag.error(\n      `Cannot create baggage metadata from unknown type: ${typeof str}`\n    );\n    str = '';\n  }\n\n  return {\n    __TYPE__: baggageEntryMetadataSymbol,\n    toString() {\n      return str;\n    },\n  };\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Context } from '../context/types';\nimport {\n  getGlobal,\n  registerGlobal,\n  unregisterGlobal,\n} from '../internal/global-utils';\nimport { NoopTextMapPropagator } from '../propagation/NoopTextMapPropagator';\nimport {\n  defaultTextMapGetter,\n  defaultTextMapSetter,\n  TextMapGetter,\n  TextMapPropagator,\n  TextMapSetter,\n} from '../propagation/TextMapPropagator';\nimport {\n  getBaggage,\n  setBaggage,\n  deleteBaggage,\n} from '../baggage/context-helpers';\nimport { createBaggage } from '../baggage/utils';\nimport { DiagAPI } from './diag';\n\nconst API_NAME = 'propagation';\nconst NOOP_TEXT_MAP_PROPAGATOR = new NoopTextMapPropagator();\n\n/**\n * Singleton object which represents the entry point to the OpenTelemetry Propagation API\n */\nexport class PropagationAPI {\n  private static _instance?: PropagationAPI;\n\n  /** Empty private constructor prevents end users from constructing a new instance of the API */\n  private constructor() {}\n\n  /** Get the singleton instance of the Propagator API */\n  public static getInstance(): PropagationAPI {\n    if (!this._instance) {\n      this._instance = new PropagationAPI();\n    }\n\n    return this._instance;\n  }\n\n  /**\n   * Set the current propagator.\n   *\n   * @returns true if the propagator was successfully registered, else false\n   */\n  public setGlobalPropagator(propagator: TextMapPropagator): boolean {\n    return registerGlobal(API_NAME, propagator, DiagAPI.instance());\n  }\n\n  /**\n   * Inject context into a carrier to be propagated inter-process\n   *\n   * @param context Context carrying tracing data to inject\n   * @param carrier carrier to inject context into\n   * @param setter Function used to set values on the carrier\n   */\n  public inject<Carrier>(\n    context: Context,\n    carrier: Carrier,\n    setter: TextMapSetter<Carrier> = defaultTextMapSetter\n  ): void {\n    return this._getGlobalPropagator().inject(context, carrier, setter);\n  }\n\n  /**\n   * Extract context from a carrier\n   *\n   * @param context Context which the newly created context will inherit from\n   * @param carrier Carrier to extract context from\n   * @param getter Function used to extract keys from a carrier\n   */\n  public extract<Carrier>(\n    context: Context,\n    carrier: Carrier,\n    getter: TextMapGetter<Carrier> = defaultTextMapGetter\n  ): Context {\n    return this._getGlobalPropagator().extract(context, carrier, getter);\n  }\n\n  /**\n   * Return a list of all fields which may be used by the propagator.\n   */\n  public fields(): string[] {\n    return this._getGlobalPropagator().fields();\n  }\n\n  /** Remove the global propagator */\n  public disable() {\n    unregisterGlobal(API_NAME, DiagAPI.instance());\n  }\n\n  public createBaggage = createBaggage;\n\n  public getBaggage = getBaggage;\n\n  public setBaggage = setBaggage;\n\n  public deleteBaggage = deleteBaggage;\n\n  private _getGlobalPropagator(): TextMapPropagator {\n    return getGlobal(API_NAME) || NOOP_TEXT_MAP_PROPAGATOR;\n  }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport enum TraceFlags {\n  /** Represents no flag set. */\n  NONE = 0x0,\n  /** Bit to represent whether trace is sampled in trace flags. */\n  SAMPLED = 0x1 << 0,\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { PropagationAPI } from './api/propagation';\n/** Entrypoint for propagation API */\nexport const propagation = PropagationAPI.getInstance();\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SpanContext } from './span_context';\nimport { TraceFlags } from './trace_flags';\n\nexport const INVALID_SPANID = '0000000000000000';\nexport const INVALID_TRACEID = '00000000000000000000000000000000';\nexport const INVALID_SPAN_CONTEXT: SpanContext = {\n  traceId: INVALID_TRACEID,\n  spanId: INVALID_SPANID,\n  traceFlags: TraceFlags.NONE,\n};\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Exception } from '../common/Exception';\nimport { TimeInput } from '../common/Time';\nimport { SpanAttributes } from './attributes';\nimport { INVALID_SPAN_CONTEXT } from './invalid-span-constants';\nimport { Span } from './span';\nimport { SpanContext } from './span_context';\nimport { SpanStatus } from './status';\n\n/**\n * The NonRecordingSpan is the default {@link Span} that is used when no Span\n * implementation is available. All operations are no-op including context\n * propagation.\n */\nexport class NonRecordingSpan implements Span {\n  constructor(\n    private readonly _spanContext: SpanContext = INVALID_SPAN_CONTEXT\n  ) {}\n\n  // Returns a SpanContext.\n  spanContext(): SpanContext {\n    return this._spanContext;\n  }\n\n  // By default does nothing\n  setAttribute(_key: string, _value: unknown): this {\n    return this;\n  }\n\n  // By default does nothing\n  setAttributes(_attributes: SpanAttributes): this {\n    return this;\n  }\n\n  // By default does nothing\n  addEvent(_name: string, _attributes?: SpanAttributes): this {\n    return this;\n  }\n\n  // By default does nothing\n  setStatus(_status: SpanStatus): this {\n    return this;\n  }\n\n  // By default does nothing\n  updateName(_name: string): this {\n    return this;\n  }\n\n  // By default does nothing\n  end(_endTime?: TimeInput): void {}\n\n  // isRecording always returns false for NonRecordingSpan.\n  isRecording(): boolean {\n    return false;\n  }\n\n  // By default does nothing\n  recordException(_exception: Exception, _time?: TimeInput): void {}\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createContextKey } from '../context/context';\nimport { Context } from '../context/types';\nimport { Span } from './span';\nimport { SpanContext } from './span_context';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nimport { ContextAPI } from '../api/context';\n\n/**\n * span key\n */\nconst SPAN_KEY = createContextKey('OpenTelemetry Context Key SPAN');\n\n/**\n * Return the span if one exists\n *\n * @param context context to get span from\n */\nexport function getSpan(context: Context): Span | undefined {\n  return (context.getValue(SPAN_KEY) as Span) || undefined;\n}\n\n/**\n * Gets the span from the current context, if one exists.\n */\nexport function getActiveSpan(): Span | undefined {\n  return getSpan(ContextAPI.getInstance().active());\n}\n\n/**\n * Set the span on a context\n *\n * @param context context to use as parent\n * @param span span to set active\n */\nexport function setSpan(context: Context, span: Span): Context {\n  return context.setValue(SPAN_KEY, span);\n}\n\n/**\n * Remove current span stored in the context\n *\n * @param context context to delete span from\n */\nexport function deleteSpan(context: Context): Context {\n  return context.deleteValue(SPAN_KEY);\n}\n\n/**\n * Wrap span context in a NoopSpan and set as span in a new\n * context\n *\n * @param context context to set active span on\n * @param spanContext span context to be wrapped\n */\nexport function setSpanContext(\n  context: Context,\n  spanContext: SpanContext\n): Context {\n  return setSpan(context, new NonRecordingSpan(spanContext));\n}\n\n/**\n * Get the span context of the span if it exists.\n *\n * @param context context to get values from\n */\nexport function getSpanContext(context: Context): SpanContext | undefined {\n  return getSpan(context)?.spanContext();\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { INVALID_SPANID, INVALID_TRACEID } from './invalid-span-constants';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nimport { Span } from './span';\nimport { SpanContext } from './span_context';\n\nconst VALID_TRACEID_REGEX = /^([0-9a-f]{32})$/i;\nconst VALID_SPANID_REGEX = /^[0-9a-f]{16}$/i;\n\nexport function isValidTraceId(traceId: string): boolean {\n  return VALID_TRACEID_REGEX.test(traceId) && traceId !== INVALID_TRACEID;\n}\n\nexport function isValidSpanId(spanId: string): boolean {\n  return VALID_SPANID_REGEX.test(spanId) && spanId !== INVALID_SPANID;\n}\n\n/**\n * Returns true if this {@link SpanContext} is valid.\n * @return true if this {@link SpanContext} is valid.\n */\nexport function isSpanContextValid(spanContext: SpanContext): boolean {\n  return (\n    isValidTraceId(spanContext.traceId) && isValidSpanId(spanContext.spanId)\n  );\n}\n\n/**\n * Wrap the given {@link SpanContext} in a new non-recording {@link Span}\n *\n * @param spanContext span context to be wrapped\n * @returns a new non-recording {@link Span} with the provided context\n */\nexport function wrapSpanContext(spanContext: SpanContext): Span {\n  return new NonRecordingSpan(spanContext);\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ContextAPI } from '../api/context';\nimport { Context } from '../context/types';\nimport { getSpanContext, setSpan } from '../trace/context-utils';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nimport { Span } from './span';\nimport { isSpanContextValid } from './spancontext-utils';\nimport { SpanOptions } from './SpanOptions';\nimport { SpanContext } from './span_context';\nimport { Tracer } from './tracer';\n\nconst contextApi = ContextAPI.getInstance();\n\n/**\n * No-op implementations of {@link Tracer}.\n */\nexport class NoopTracer implements Tracer {\n  // startSpan starts a noop span.\n  startSpan(name: string, options?: SpanOptions, context?: Context): Span {\n    const root = Boolean(options?.root);\n    if (root) {\n      return new NonRecordingSpan();\n    }\n\n    const parentFromContext = context && getSpanContext(context);\n\n    if (\n      isSpanContext(parentFromContext) &&\n      isSpanContextValid(parentFromContext)\n    ) {\n      return new NonRecordingSpan(parentFromContext);\n    } else {\n      return new NonRecordingSpan();\n    }\n  }\n\n  startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n    name: string,\n    fn: F\n  ): ReturnType<F>;\n  startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n    name: string,\n    opts: SpanOptions | undefined,\n    fn: F\n  ): ReturnType<F>;\n  startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n    name: string,\n    opts: SpanOptions | undefined,\n    ctx: Context | undefined,\n    fn: F\n  ): ReturnType<F>;\n  startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n    name: string,\n    arg2?: F | SpanOptions,\n    arg3?: F | Context,\n    arg4?: F\n  ): ReturnType<F> | undefined {\n    let opts: SpanOptions | undefined;\n    let ctx: Context | undefined;\n    let fn: F;\n\n    if (arguments.length < 2) {\n      return;\n    } else if (arguments.length === 2) {\n      fn = arg2 as F;\n    } else if (arguments.length === 3) {\n      opts = arg2 as SpanOptions | undefined;\n      fn = arg3 as F;\n    } else {\n      opts = arg2 as SpanOptions | undefined;\n      ctx = arg3 as Context | undefined;\n      fn = arg4 as F;\n    }\n\n    const parentContext = ctx ?? contextApi.active();\n    const span = this.startSpan(name, opts, parentContext);\n    const contextWithSpanSet = setSpan(parentContext, span);\n\n    return contextApi.with(contextWithSpanSet, fn, undefined, span);\n  }\n}\n\nfunction isSpanContext(spanContext: any): spanContext is SpanContext {\n  return (\n    typeof spanContext === 'object' &&\n    typeof spanContext['spanId'] === 'string' &&\n    typeof spanContext['traceId'] === 'string' &&\n    typeof spanContext['traceFlags'] === 'number'\n  );\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Context } from '../context/types';\nimport { NoopTracer } from './NoopTracer';\nimport { Span } from './span';\nimport { SpanOptions } from './SpanOptions';\nimport { Tracer } from './tracer';\nimport { TracerOptions } from './tracer_options';\n\nconst NOOP_TRACER = new NoopTracer();\n\n/**\n * Proxy tracer provided by the proxy tracer provider\n */\nexport class ProxyTracer implements Tracer {\n  // When a real implementation is provided, this will be it\n  private _delegate?: Tracer;\n\n  constructor(\n    private _provider: TracerDelegator,\n    public readonly name: string,\n    public readonly version?: string,\n    public readonly options?: TracerOptions\n  ) {}\n\n  startSpan(name: string, options?: SpanOptions, context?: Context): Span {\n    return this._getTracer().startSpan(name, options, context);\n  }\n\n  startActiveSpan<F extends (span: Span) => unknown>(\n    _name: string,\n    _options: F | SpanOptions,\n    _context?: F | Context,\n    _fn?: F\n  ): ReturnType<F> {\n    const tracer = this._getTracer();\n    return Reflect.apply(tracer.startActiveSpan, tracer, arguments);\n  }\n\n  /**\n   * Try to get a tracer from the proxy tracer provider.\n   * If the proxy tracer provider has no delegate, return a noop tracer.\n   */\n  private _getTracer() {\n    if (this._delegate) {\n      return this._delegate;\n    }\n\n    const tracer = this._provider.getDelegateTracer(this.name, this.version, this.options);\n\n    if (!tracer) {\n      return NOOP_TRACER;\n    }\n\n    this._delegate = tracer;\n    return this._delegate;\n  }\n}\n\nexport interface TracerDelegator {\n  getDelegateTracer(name: string, version?: string, options?: TracerOptions): Tracer | undefined;\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Tracer } from './tracer';\nimport { TracerProvider } from './tracer_provider';\nimport { ProxyTracer } from './ProxyTracer';\nimport { NoopTracerProvider } from './NoopTracerProvider';\nimport { TracerOptions } from './tracer_options';\n\nconst NOOP_TRACER_PROVIDER = new NoopTracerProvider();\n\n/**\n * Tracer provider which provides {@link ProxyTracer}s.\n *\n * Before a delegate is set, tracers provided are NoOp.\n *   When a delegate is set, traces are provided from the delegate.\n *   When a delegate is set after tracers have already been provided,\n *   all tracers already provided will use the provided delegate implementation.\n */\nexport class ProxyTracerProvider implements TracerProvider {\n  private _delegate?: TracerProvider;\n\n  /**\n   * Get a {@link ProxyTracer}\n   */\n  getTracer(name: string, version?: string, options?: TracerOptions): Tracer {\n    return (\n      this.getDelegateTracer(name, version, options) ??\n      new ProxyTracer(this, name, version, options)\n    );\n  }\n\n  getDelegate(): TracerProvider {\n    return this._delegate ?? NOOP_TRACER_PROVIDER;\n  }\n\n  /**\n   * Set the delegate tracer provider\n   */\n  setDelegate(delegate: TracerProvider) {\n    this._delegate = delegate;\n  }\n\n  getDelegateTracer(\n    name: string,\n    version?: string,\n    options?: TracerOptions\n  ): Tracer | undefined {\n    return this._delegate?.getTracer(name, version, options);\n  }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NoopTracer } from './NoopTracer';\nimport { Tracer } from './tracer';\nimport { TracerOptions } from './tracer_options';\nimport { TracerProvider } from './tracer_provider';\n\n/**\n * An implementation of the {@link TracerProvider} which returns an impotent\n * Tracer for all calls to `getTracer`.\n *\n * All operations are no-op.\n */\nexport class NoopTracerProvider implements TracerProvider {\n  getTracer(\n    _name?: string,\n    _version?: string,\n    _options?: TracerOptions\n  ): Tracer {\n    return new NoopTracer();\n  }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  getGlobal,\n  registerGlobal,\n  unregisterGlobal,\n} from '../internal/global-utils';\nimport { ProxyTracerProvider } from '../trace/ProxyTracerProvider';\nimport {\n  isSpanContextValid,\n  wrapSpanContext,\n} from '../trace/spancontext-utils';\nimport { Tracer } from '../trace/tracer';\nimport { TracerProvider } from '../trace/tracer_provider';\nimport {\n  deleteSpan,\n  getActiveSpan,\n  getSpan,\n  getSpanContext,\n  setSpan,\n  setSpanContext,\n} from '../trace/context-utils';\nimport { DiagAPI } from './diag';\n\nconst API_NAME = 'trace';\n\n/**\n * Singleton object which represents the entry point to the OpenTelemetry Tracing API\n */\nexport class TraceAPI {\n  private static _instance?: TraceAPI;\n\n  private _proxyTracerProvider = new ProxyTracerProvider();\n\n  /** Empty private constructor prevents end users from constructing a new instance of the API */\n  private constructor() {}\n\n  /** Get the singleton instance of the Trace API */\n  public static getInstance(): TraceAPI {\n    if (!this._instance) {\n      this._instance = new TraceAPI();\n    }\n\n    return this._instance;\n  }\n\n  /**\n   * Set the current global tracer.\n   *\n   * @returns true if the tracer provider was successfully registered, else false\n   */\n  public setGlobalTracerProvider(provider: TracerProvider): boolean {\n    const success = registerGlobal(\n      API_NAME,\n      this._proxyTracerProvider,\n      DiagAPI.instance()\n    );\n    if (success) {\n      this._proxyTracerProvider.setDelegate(provider);\n    }\n    return success;\n  }\n\n  /**\n   * Returns the global tracer provider.\n   */\n  public getTracerProvider(): TracerProvider {\n    return getGlobal(API_NAME) || this._proxyTracerProvider;\n  }\n\n  /**\n   * Returns a tracer from the global tracer provider.\n   */\n  public getTracer(name: string, version?: string): Tracer {\n    return this.getTracerProvider().getTracer(name, version);\n  }\n\n  /** Remove the global tracer provider */\n  public disable() {\n    unregisterGlobal(API_NAME, DiagAPI.instance());\n    this._proxyTracerProvider = new ProxyTracerProvider();\n  }\n\n  public wrapSpanContext = wrapSpanContext;\n\n  public isSpanContextValid = isSpanContextValid;\n\n  public deleteSpan = deleteSpan;\n\n  public getSpan = getSpan;\n\n  public getActiveSpan = getActiveSpan;\n\n  public getSpanContext = getSpanContext;\n\n  public setSpan = setSpan;\n\n  public setSpanContext = setSpanContext;\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport {\n  BaggageEntry,\n  BaggageEntryMetadata,\n  Baggage,\n} from './baggage/types';\nexport { baggageEntryMetadataFromString } from './baggage/utils';\nexport { Exception } from './common/Exception';\nexport { HrTime, TimeInput } from './common/Time';\nexport { Attributes, AttributeValue } from './common/Attributes';\n\n// Context APIs\nexport {\n  createContextKey,\n  ROOT_CONTEXT,\n} from './context/context';\nexport {\n  Context,\n  ContextManager,\n} from './context/types';\nexport type { ContextAPI } from './api/context';\n\n// Diag APIs\nexport { DiagConsoleLogger } from './diag/consoleLogger';\nexport {\n  DiagLogFunction,\n  DiagLogger,\n  DiagLogLevel,\n  ComponentLoggerOptions,\n} from './diag/types';\nexport type { DiagAPI } from './api/diag';\n\n// Metrics APIs\nexport {\n  createNoopMeter,\n} from './metrics/NoopMeter';\nexport {\n  MeterOptions,\n  Meter,\n} from './metrics/Meter';\nexport {\n  MeterProvider,\n} from './metrics/MeterProvider';\nexport {\n  ValueType,\n  Counter,\n  Histogram,\n  MetricOptions,\n  Observable,\n  ObservableCounter,\n  ObservableGauge,\n  ObservableUpDownCounter,\n  UpDownCounter,\n  BatchObservableCallback,\n  MetricAttributes,\n  MetricAttributeValue,\n  ObservableCallback,\n} from './metrics/Metric';\nexport {\n  BatchObservableResult,\n  ObservableResult,\n} from './metrics/ObservableResult';\n\n// Propagation APIs\nexport {\n  TextMapPropagator,\n  TextMapSetter,\n  TextMapGetter,\n  defaultTextMapGetter,\n  defaultTextMapSetter,\n} from './propagation/TextMapPropagator';\nexport type { PropagationAPI } from './api/propagation';\n\n// Trace APIs\nexport {\n  SpanAttributes,\n  SpanAttributeValue,\n} from './trace/attributes';\nexport { Link } from './trace/link';\nexport { ProxyTracer, TracerDelegator } from './trace/ProxyTracer';\nexport { ProxyTracerProvider } from './trace/ProxyTracerProvider';\nexport { Sampler } from './trace/Sampler';\nexport { SamplingDecision, SamplingResult } from './trace/SamplingResult';\nexport { SpanContext } from './trace/span_context';\nexport { SpanKind } from './trace/span_kind';\nexport { Span } from './trace/span';\nexport { SpanOptions } from './trace/SpanOptions';\nexport { SpanStatus, SpanStatusCode } from './trace/status';\nexport { TraceFlags } from './trace/trace_flags';\nexport { TraceState } from './trace/trace_state';\nexport { createTraceState } from './trace/internal/utils';\nexport { TracerProvider } from './trace/tracer_provider';\nexport { Tracer } from './trace/tracer';\nexport { TracerOptions } from './trace/tracer_options';\nexport {\n  isSpanContextValid,\n  isValidTraceId,\n  isValidSpanId,\n} from './trace/spancontext-utils';\nexport {\n  INVALID_SPANID,\n  INVALID_TRACEID,\n  INVALID_SPAN_CONTEXT,\n} from './trace/invalid-span-constants';\nexport type { TraceAPI } from './api/trace';\n\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { context } from './context-api';\nimport { diag } from './diag-api';\nimport { metrics } from './metrics-api';\nimport { propagation } from './propagation-api';\nimport { trace } from './trace-api';\n\n// Named export.\nexport {\n  context,\n  diag,\n  metrics,\n  propagation,\n  trace,\n};\n// Default export.\nexport default {\n  context,\n  diag,\n  metrics,\n  propagation,\n  trace,\n};\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { TraceAPI } from './api/trace';\n/** Entrypoint for trace API */\nexport const trace = TraceAPI.getInstance();\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"export var ErrorKind;\n(function (ErrorKind) {\n    /** Argument is unclosed (e.g. `{0`) */\n    ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_CLOSING_BRACE\"] = 1] = \"EXPECT_ARGUMENT_CLOSING_BRACE\";\n    /** Argument is empty (e.g. `{}`). */\n    ErrorKind[ErrorKind[\"EMPTY_ARGUMENT\"] = 2] = \"EMPTY_ARGUMENT\";\n    /** Argument is malformed (e.g. `{foo!}``) */\n    ErrorKind[ErrorKind[\"MALFORMED_ARGUMENT\"] = 3] = \"MALFORMED_ARGUMENT\";\n    /** Expect an argument type (e.g. `{foo,}`) */\n    ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_TYPE\"] = 4] = \"EXPECT_ARGUMENT_TYPE\";\n    /** Unsupported argument type (e.g. `{foo,foo}`) */\n    ErrorKind[ErrorKind[\"INVALID_ARGUMENT_TYPE\"] = 5] = \"INVALID_ARGUMENT_TYPE\";\n    /** Expect an argument style (e.g. `{foo, number, }`) */\n    ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_STYLE\"] = 6] = \"EXPECT_ARGUMENT_STYLE\";\n    /** The number skeleton is invalid. */\n    ErrorKind[ErrorKind[\"INVALID_NUMBER_SKELETON\"] = 7] = \"INVALID_NUMBER_SKELETON\";\n    /** The date time skeleton is invalid. */\n    ErrorKind[ErrorKind[\"INVALID_DATE_TIME_SKELETON\"] = 8] = \"INVALID_DATE_TIME_SKELETON\";\n    /** Exepct a number skeleton following the `::` (e.g. `{foo, number, ::}`) */\n    ErrorKind[ErrorKind[\"EXPECT_NUMBER_SKELETON\"] = 9] = \"EXPECT_NUMBER_SKELETON\";\n    /** Exepct a date time skeleton following the `::` (e.g. `{foo, date, ::}`) */\n    ErrorKind[ErrorKind[\"EXPECT_DATE_TIME_SKELETON\"] = 10] = \"EXPECT_DATE_TIME_SKELETON\";\n    /** Unmatched apostrophes in the argument style (e.g. `{foo, number, 'test`) */\n    ErrorKind[ErrorKind[\"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\"] = 11] = \"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\";\n    /** Missing select argument options (e.g. `{foo, select}`) */\n    ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_OPTIONS\"] = 12] = \"EXPECT_SELECT_ARGUMENT_OPTIONS\";\n    /** Expecting an offset value in `plural` or `selectordinal` argument (e.g `{foo, plural, offset}`) */\n    ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\"] = 13] = \"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\";\n    /** Offset value in `plural` or `selectordinal` is invalid (e.g. `{foo, plural, offset: x}`) */\n    ErrorKind[ErrorKind[\"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\"] = 14] = \"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\";\n    /** Expecting a selector in `select` argument (e.g `{foo, select}`) */\n    ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_SELECTOR\"] = 15] = \"EXPECT_SELECT_ARGUMENT_SELECTOR\";\n    /** Expecting a selector in `plural` or `selectordinal` argument (e.g `{foo, plural}`) */\n    ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_SELECTOR\"] = 16] = \"EXPECT_PLURAL_ARGUMENT_SELECTOR\";\n    /** Expecting a message fragment after the `select` selector (e.g. `{foo, select, apple}`) */\n    ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\"] = 17] = \"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\";\n    /**\n     * Expecting a message fragment after the `plural` or `selectordinal` selector\n     * (e.g. `{foo, plural, one}`)\n     */\n    ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\"] = 18] = \"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\";\n    /** Selector in `plural` or `selectordinal` is malformed (e.g. `{foo, plural, =x {#}}`) */\n    ErrorKind[ErrorKind[\"INVALID_PLURAL_ARGUMENT_SELECTOR\"] = 19] = \"INVALID_PLURAL_ARGUMENT_SELECTOR\";\n    /**\n     * Duplicate selectors in `plural` or `selectordinal` argument.\n     * (e.g. {foo, plural, one {#} one {#}})\n     */\n    ErrorKind[ErrorKind[\"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\"] = 20] = \"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\";\n    /** Duplicate selectors in `select` argument.\n     * (e.g. {foo, select, apple {apple} apple {apple}})\n     */\n    ErrorKind[ErrorKind[\"DUPLICATE_SELECT_ARGUMENT_SELECTOR\"] = 21] = \"DUPLICATE_SELECT_ARGUMENT_SELECTOR\";\n    /** Plural or select argument option must have `other` clause. */\n    ErrorKind[ErrorKind[\"MISSING_OTHER_CLAUSE\"] = 22] = \"MISSING_OTHER_CLAUSE\";\n    /** The tag is malformed. (e.g. `<bold!>foo</bold!>) */\n    ErrorKind[ErrorKind[\"INVALID_TAG\"] = 23] = \"INVALID_TAG\";\n    /** The tag name is invalid. (e.g. `<123>foo</123>`) */\n    ErrorKind[ErrorKind[\"INVALID_TAG_NAME\"] = 25] = \"INVALID_TAG_NAME\";\n    /** The closing tag does not match the opening tag. (e.g. `<bold>foo</italic>`) */\n    ErrorKind[ErrorKind[\"UNMATCHED_CLOSING_TAG\"] = 26] = \"UNMATCHED_CLOSING_TAG\";\n    /** The opening tag has unmatched closing tag. (e.g. `<bold>foo`) */\n    ErrorKind[ErrorKind[\"UNCLOSED_TAG\"] = 27] = \"UNCLOSED_TAG\";\n})(ErrorKind || (ErrorKind = {}));\n","export var TYPE;\n(function (TYPE) {\n    /**\n     * Raw text\n     */\n    TYPE[TYPE[\"literal\"] = 0] = \"literal\";\n    /**\n     * Variable w/o any format, e.g `var` in `this is a {var}`\n     */\n    TYPE[TYPE[\"argument\"] = 1] = \"argument\";\n    /**\n     * Variable w/ number format\n     */\n    TYPE[TYPE[\"number\"] = 2] = \"number\";\n    /**\n     * Variable w/ date format\n     */\n    TYPE[TYPE[\"date\"] = 3] = \"date\";\n    /**\n     * Variable w/ time format\n     */\n    TYPE[TYPE[\"time\"] = 4] = \"time\";\n    /**\n     * Variable w/ select format\n     */\n    TYPE[TYPE[\"select\"] = 5] = \"select\";\n    /**\n     * Variable w/ plural format\n     */\n    TYPE[TYPE[\"plural\"] = 6] = \"plural\";\n    /**\n     * Only possible within plural argument.\n     * This is the `#` symbol that will be substituted with the count.\n     */\n    TYPE[TYPE[\"pound\"] = 7] = \"pound\";\n    /**\n     * XML-like tag\n     */\n    TYPE[TYPE[\"tag\"] = 8] = \"tag\";\n})(TYPE || (TYPE = {}));\nexport var SKELETON_TYPE;\n(function (SKELETON_TYPE) {\n    SKELETON_TYPE[SKELETON_TYPE[\"number\"] = 0] = \"number\";\n    SKELETON_TYPE[SKELETON_TYPE[\"dateTime\"] = 1] = \"dateTime\";\n})(SKELETON_TYPE || (SKELETON_TYPE = {}));\n/**\n * Type Guards\n */\nexport function isLiteralElement(el) {\n    return el.type === TYPE.literal;\n}\nexport function isArgumentElement(el) {\n    return el.type === TYPE.argument;\n}\nexport function isNumberElement(el) {\n    return el.type === TYPE.number;\n}\nexport function isDateElement(el) {\n    return el.type === TYPE.date;\n}\nexport function isTimeElement(el) {\n    return el.type === TYPE.time;\n}\nexport function isSelectElement(el) {\n    return el.type === TYPE.select;\n}\nexport function isPluralElement(el) {\n    return el.type === TYPE.plural;\n}\nexport function isPoundElement(el) {\n    return el.type === TYPE.pound;\n}\nexport function isTagElement(el) {\n    return el.type === TYPE.tag;\n}\nexport function isNumberSkeleton(el) {\n    return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.number);\n}\nexport function isDateTimeSkeleton(el) {\n    return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.dateTime);\n}\nexport function createLiteralElement(value) {\n    return {\n        type: TYPE.literal,\n        value: value,\n    };\n}\nexport function createNumberElement(value, style) {\n    return {\n        type: TYPE.number,\n        value: value,\n        style: style,\n    };\n}\n","// @generated from regex-gen.ts\nexport var SPACE_SEPARATOR_REGEX = /[ \\xA0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/;\nexport var WHITE_SPACE_REGEX = /[\\t-\\r \\x85\\u200E\\u200F\\u2028\\u2029]/;\n","/**\n * https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * Credit: https://github.com/caridy/intl-datetimeformat-pattern/blob/master/index.js\n * with some tweaks\n */\nvar DATE_TIME_REGEX = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;\n/**\n * Parse Date time skeleton into Intl.DateTimeFormatOptions\n * Ref: https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * @public\n * @param skeleton skeleton string\n */\nexport function parseDateTimeSkeleton(skeleton) {\n    var result = {};\n    skeleton.replace(DATE_TIME_REGEX, function (match) {\n        var len = match.length;\n        switch (match[0]) {\n            // Era\n            case 'G':\n                result.era = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short';\n                break;\n            // Year\n            case 'y':\n                result.year = len === 2 ? '2-digit' : 'numeric';\n                break;\n            case 'Y':\n            case 'u':\n            case 'U':\n            case 'r':\n                throw new RangeError('`Y/u/U/r` (year) patterns are not supported, use `y` instead');\n            // Quarter\n            case 'q':\n            case 'Q':\n                throw new RangeError('`q/Q` (quarter) patterns are not supported');\n            // Month\n            case 'M':\n            case 'L':\n                result.month = ['numeric', '2-digit', 'short', 'long', 'narrow'][len - 1];\n                break;\n            // Week\n            case 'w':\n            case 'W':\n                throw new RangeError('`w/W` (week) patterns are not supported');\n            case 'd':\n                result.day = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'D':\n            case 'F':\n            case 'g':\n                throw new RangeError('`D/F/g` (day) patterns are not supported, use `d` instead');\n            // Weekday\n            case 'E':\n                result.weekday = len === 4 ? 'short' : len === 5 ? 'narrow' : 'short';\n                break;\n            case 'e':\n                if (len < 4) {\n                    throw new RangeError('`e..eee` (weekday) patterns are not supported');\n                }\n                result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n                break;\n            case 'c':\n                if (len < 4) {\n                    throw new RangeError('`c..ccc` (weekday) patterns are not supported');\n                }\n                result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n                break;\n            // Period\n            case 'a': // AM, PM\n                result.hour12 = true;\n                break;\n            case 'b': // am, pm, noon, midnight\n            case 'B': // flexible day periods\n                throw new RangeError('`b/B` (period) patterns are not supported, use `a` instead');\n            // Hour\n            case 'h':\n                result.hourCycle = 'h12';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'H':\n                result.hourCycle = 'h23';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'K':\n                result.hourCycle = 'h11';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'k':\n                result.hourCycle = 'h24';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'j':\n            case 'J':\n            case 'C':\n                throw new RangeError('`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead');\n            // Minute\n            case 'm':\n                result.minute = ['numeric', '2-digit'][len - 1];\n                break;\n            // Second\n            case 's':\n                result.second = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'S':\n            case 'A':\n                throw new RangeError('`S/A` (second) patterns are not supported, use `s` instead');\n            // Zone\n            case 'z': // 1..3, 4: specific non-location format\n                result.timeZoneName = len < 4 ? 'short' : 'long';\n                break;\n            case 'Z': // 1..3, 4, 5: The ISO8601 varios formats\n            case 'O': // 1, 4: miliseconds in day short, long\n            case 'v': // 1, 4: generic non-location format\n            case 'V': // 1, 2, 3, 4: time zone ID or city\n            case 'X': // 1, 2, 3, 4: The ISO8601 varios formats\n            case 'x': // 1, 2, 3, 4: The ISO8601 varios formats\n                throw new RangeError('`Z/O/v/V/X/x` (timeZone) patterns are not supported, use `z` instead');\n        }\n        return '';\n    });\n    return result;\n}\n","// @generated from regex-gen.ts\nexport var WHITE_SPACE_REGEX = /[\\t-\\r \\x85\\u200E\\u200F\\u2028\\u2029]/i;\n","import { __assign } from \"tslib\";\nimport { WHITE_SPACE_REGEX } from './regex.generated';\nexport function parseNumberSkeletonFromString(skeleton) {\n    if (skeleton.length === 0) {\n        throw new Error('Number skeleton cannot be empty');\n    }\n    // Parse the skeleton\n    var stringTokens = skeleton\n        .split(WHITE_SPACE_REGEX)\n        .filter(function (x) { return x.length > 0; });\n    var tokens = [];\n    for (var _i = 0, stringTokens_1 = stringTokens; _i < stringTokens_1.length; _i++) {\n        var stringToken = stringTokens_1[_i];\n        var stemAndOptions = stringToken.split('/');\n        if (stemAndOptions.length === 0) {\n            throw new Error('Invalid number skeleton');\n        }\n        var stem = stemAndOptions[0], options = stemAndOptions.slice(1);\n        for (var _a = 0, options_1 = options; _a < options_1.length; _a++) {\n            var option = options_1[_a];\n            if (option.length === 0) {\n                throw new Error('Invalid number skeleton');\n            }\n        }\n        tokens.push({ stem: stem, options: options });\n    }\n    return tokens;\n}\nfunction icuUnitToEcma(unit) {\n    return unit.replace(/^(.*?)-/, '');\n}\nvar FRACTION_PRECISION_REGEX = /^\\.(?:(0+)(\\*)?|(#+)|(0+)(#+))$/g;\nvar SIGNIFICANT_PRECISION_REGEX = /^(@+)?(\\+|#+)?[rs]?$/g;\nvar INTEGER_WIDTH_REGEX = /(\\*)(0+)|(#+)(0+)|(0+)/g;\nvar CONCISE_INTEGER_WIDTH_REGEX = /^(0+)$/;\nfunction parseSignificantPrecision(str) {\n    var result = {};\n    if (str[str.length - 1] === 'r') {\n        result.roundingPriority = 'morePrecision';\n    }\n    else if (str[str.length - 1] === 's') {\n        result.roundingPriority = 'lessPrecision';\n    }\n    str.replace(SIGNIFICANT_PRECISION_REGEX, function (_, g1, g2) {\n        // @@@ case\n        if (typeof g2 !== 'string') {\n            result.minimumSignificantDigits = g1.length;\n            result.maximumSignificantDigits = g1.length;\n        }\n        // @@@+ case\n        else if (g2 === '+') {\n            result.minimumSignificantDigits = g1.length;\n        }\n        // .### case\n        else if (g1[0] === '#') {\n            result.maximumSignificantDigits = g1.length;\n        }\n        // .@@## or .@@@ case\n        else {\n            result.minimumSignificantDigits = g1.length;\n            result.maximumSignificantDigits =\n                g1.length + (typeof g2 === 'string' ? g2.length : 0);\n        }\n        return '';\n    });\n    return result;\n}\nfunction parseSign(str) {\n    switch (str) {\n        case 'sign-auto':\n            return {\n                signDisplay: 'auto',\n            };\n        case 'sign-accounting':\n        case '()':\n            return {\n                currencySign: 'accounting',\n            };\n        case 'sign-always':\n        case '+!':\n            return {\n                signDisplay: 'always',\n            };\n        case 'sign-accounting-always':\n        case '()!':\n            return {\n                signDisplay: 'always',\n                currencySign: 'accounting',\n            };\n        case 'sign-except-zero':\n        case '+?':\n            return {\n                signDisplay: 'exceptZero',\n            };\n        case 'sign-accounting-except-zero':\n        case '()?':\n            return {\n                signDisplay: 'exceptZero',\n                currencySign: 'accounting',\n            };\n        case 'sign-never':\n        case '+_':\n            return {\n                signDisplay: 'never',\n            };\n    }\n}\nfunction parseConciseScientificAndEngineeringStem(stem) {\n    // Engineering\n    var result;\n    if (stem[0] === 'E' && stem[1] === 'E') {\n        result = {\n            notation: 'engineering',\n        };\n        stem = stem.slice(2);\n    }\n    else if (stem[0] === 'E') {\n        result = {\n            notation: 'scientific',\n        };\n        stem = stem.slice(1);\n    }\n    if (result) {\n        var signDisplay = stem.slice(0, 2);\n        if (signDisplay === '+!') {\n            result.signDisplay = 'always';\n            stem = stem.slice(2);\n        }\n        else if (signDisplay === '+?') {\n            result.signDisplay = 'exceptZero';\n            stem = stem.slice(2);\n        }\n        if (!CONCISE_INTEGER_WIDTH_REGEX.test(stem)) {\n            throw new Error('Malformed concise eng/scientific notation');\n        }\n        result.minimumIntegerDigits = stem.length;\n    }\n    return result;\n}\nfunction parseNotationOptions(opt) {\n    var result = {};\n    var signOpts = parseSign(opt);\n    if (signOpts) {\n        return signOpts;\n    }\n    return result;\n}\n/**\n * https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#skeleton-stems-and-options\n */\nexport function parseNumberSkeleton(tokens) {\n    var result = {};\n    for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {\n        var token = tokens_1[_i];\n        switch (token.stem) {\n            case 'percent':\n            case '%':\n                result.style = 'percent';\n                continue;\n            case '%x100':\n                result.style = 'percent';\n                result.scale = 100;\n                continue;\n            case 'currency':\n                result.style = 'currency';\n                result.currency = token.options[0];\n                continue;\n            case 'group-off':\n            case ',_':\n                result.useGrouping = false;\n                continue;\n            case 'precision-integer':\n            case '.':\n                result.maximumFractionDigits = 0;\n                continue;\n            case 'measure-unit':\n            case 'unit':\n                result.style = 'unit';\n                result.unit = icuUnitToEcma(token.options[0]);\n                continue;\n            case 'compact-short':\n            case 'K':\n                result.notation = 'compact';\n                result.compactDisplay = 'short';\n                continue;\n            case 'compact-long':\n            case 'KK':\n                result.notation = 'compact';\n                result.compactDisplay = 'long';\n                continue;\n            case 'scientific':\n                result = __assign(__assign(__assign({}, result), { notation: 'scientific' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {}));\n                continue;\n            case 'engineering':\n                result = __assign(__assign(__assign({}, result), { notation: 'engineering' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {}));\n                continue;\n            case 'notation-simple':\n                result.notation = 'standard';\n                continue;\n            // https://github.com/unicode-org/icu/blob/master/icu4c/source/i18n/unicode/unumberformatter.h\n            case 'unit-width-narrow':\n                result.currencyDisplay = 'narrowSymbol';\n                result.unitDisplay = 'narrow';\n                continue;\n            case 'unit-width-short':\n                result.currencyDisplay = 'code';\n                result.unitDisplay = 'short';\n                continue;\n            case 'unit-width-full-name':\n                result.currencyDisplay = 'name';\n                result.unitDisplay = 'long';\n                continue;\n            case 'unit-width-iso-code':\n                result.currencyDisplay = 'symbol';\n                continue;\n            case 'scale':\n                result.scale = parseFloat(token.options[0]);\n                continue;\n            // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width\n            case 'integer-width':\n                if (token.options.length > 1) {\n                    throw new RangeError('integer-width stems only accept a single optional option');\n                }\n                token.options[0].replace(INTEGER_WIDTH_REGEX, function (_, g1, g2, g3, g4, g5) {\n                    if (g1) {\n                        result.minimumIntegerDigits = g2.length;\n                    }\n                    else if (g3 && g4) {\n                        throw new Error('We currently do not support maximum integer digits');\n                    }\n                    else if (g5) {\n                        throw new Error('We currently do not support exact integer digits');\n                    }\n                    return '';\n                });\n                continue;\n        }\n        // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width\n        if (CONCISE_INTEGER_WIDTH_REGEX.test(token.stem)) {\n            result.minimumIntegerDigits = token.stem.length;\n            continue;\n        }\n        if (FRACTION_PRECISION_REGEX.test(token.stem)) {\n            // Precision\n            // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#fraction-precision\n            // precision-integer case\n            if (token.options.length > 1) {\n                throw new RangeError('Fraction-precision stems only accept a single optional option');\n            }\n            token.stem.replace(FRACTION_PRECISION_REGEX, function (_, g1, g2, g3, g4, g5) {\n                // .000* case (before ICU67 it was .000+)\n                if (g2 === '*') {\n                    result.minimumFractionDigits = g1.length;\n                }\n                // .### case\n                else if (g3 && g3[0] === '#') {\n                    result.maximumFractionDigits = g3.length;\n                }\n                // .00## case\n                else if (g4 && g5) {\n                    result.minimumFractionDigits = g4.length;\n                    result.maximumFractionDigits = g4.length + g5.length;\n                }\n                else {\n                    result.minimumFractionDigits = g1.length;\n                    result.maximumFractionDigits = g1.length;\n                }\n                return '';\n            });\n            var opt = token.options[0];\n            // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#trailing-zero-display\n            if (opt === 'w') {\n                result = __assign(__assign({}, result), { trailingZeroDisplay: 'stripIfInteger' });\n            }\n            else if (opt) {\n                result = __assign(__assign({}, result), parseSignificantPrecision(opt));\n            }\n            continue;\n        }\n        // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#significant-digits-precision\n        if (SIGNIFICANT_PRECISION_REGEX.test(token.stem)) {\n            result = __assign(__assign({}, result), parseSignificantPrecision(token.stem));\n            continue;\n        }\n        var signOpts = parseSign(token.stem);\n        if (signOpts) {\n            result = __assign(__assign({}, result), signOpts);\n        }\n        var conciseScientificAndEngineeringOpts = parseConciseScientificAndEngineeringStem(token.stem);\n        if (conciseScientificAndEngineeringOpts) {\n            result = __assign(__assign({}, result), conciseScientificAndEngineeringOpts);\n        }\n    }\n    return result;\n}\n","// @generated from time-data-gen.ts\n// prettier-ignore  \nexport var timeData = {\n    \"AX\": [\n        \"H\"\n    ],\n    \"BQ\": [\n        \"H\"\n    ],\n    \"CP\": [\n        \"H\"\n    ],\n    \"CZ\": [\n        \"H\"\n    ],\n    \"DK\": [\n        \"H\"\n    ],\n    \"FI\": [\n        \"H\"\n    ],\n    \"ID\": [\n        \"H\"\n    ],\n    \"IS\": [\n        \"H\"\n    ],\n    \"ML\": [\n        \"H\"\n    ],\n    \"NE\": [\n        \"H\"\n    ],\n    \"RU\": [\n        \"H\"\n    ],\n    \"SE\": [\n        \"H\"\n    ],\n    \"SJ\": [\n        \"H\"\n    ],\n    \"SK\": [\n        \"H\"\n    ],\n    \"AS\": [\n        \"h\",\n        \"H\"\n    ],\n    \"BT\": [\n        \"h\",\n        \"H\"\n    ],\n    \"DJ\": [\n        \"h\",\n        \"H\"\n    ],\n    \"ER\": [\n        \"h\",\n        \"H\"\n    ],\n    \"GH\": [\n        \"h\",\n        \"H\"\n    ],\n    \"IN\": [\n        \"h\",\n        \"H\"\n    ],\n    \"LS\": [\n        \"h\",\n        \"H\"\n    ],\n    \"PG\": [\n        \"h\",\n        \"H\"\n    ],\n    \"PW\": [\n        \"h\",\n        \"H\"\n    ],\n    \"SO\": [\n        \"h\",\n        \"H\"\n    ],\n    \"TO\": [\n        \"h\",\n        \"H\"\n    ],\n    \"VU\": [\n        \"h\",\n        \"H\"\n    ],\n    \"WS\": [\n        \"h\",\n        \"H\"\n    ],\n    \"001\": [\n        \"H\",\n        \"h\"\n    ],\n    \"AL\": [\n        \"h\",\n        \"H\",\n        \"hB\"\n    ],\n    \"TD\": [\n        \"h\",\n        \"H\",\n        \"hB\"\n    ],\n    \"ca-ES\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"CF\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"CM\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"fr-CA\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"gl-ES\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"it-CH\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"it-IT\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"LU\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"NP\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"PF\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"SC\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"SM\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"SN\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"TF\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"VA\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"CY\": [\n        \"h\",\n        \"H\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"GR\": [\n        \"h\",\n        \"H\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CO\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"DO\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"KP\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"KR\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"NA\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"PA\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"PR\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"VE\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"AC\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"AI\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"BW\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"BZ\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CC\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CK\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CX\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"DG\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"FK\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"GB\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"GG\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"GI\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"IE\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"IM\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"IO\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"JE\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"LT\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"MK\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"MN\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"MS\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"NF\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"NG\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"NR\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"NU\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"PN\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"SH\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"SX\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"TA\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"ZA\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"af-ZA\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"AR\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"CL\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"CR\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"CU\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"EA\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"es-BO\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"es-BR\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"es-EC\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"es-ES\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"es-GQ\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"es-PE\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"GT\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"HN\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"IC\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"KG\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"KM\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"LK\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"MA\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"MX\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"NI\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"PY\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"SV\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"UY\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"JP\": [\n        \"H\",\n        \"h\",\n        \"K\"\n    ],\n    \"AD\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AM\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AO\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AT\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AW\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BE\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BF\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BJ\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BL\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"CG\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"CI\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"CV\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"DE\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"EE\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"FR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GA\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GF\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GN\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GP\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GW\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"HR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"IL\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"IT\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"KZ\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"MC\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"MD\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"MF\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"MQ\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"MZ\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"NC\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"NL\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"PM\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"PT\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"RE\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"RO\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"SI\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"SR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"ST\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"TG\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"TR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"WF\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"YT\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BD\": [\n        \"h\",\n        \"hB\",\n        \"H\"\n    ],\n    \"PK\": [\n        \"h\",\n        \"hB\",\n        \"H\"\n    ],\n    \"AZ\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"BA\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"BG\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"CH\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"GE\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"LI\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"ME\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"RS\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"UA\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"UZ\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"XK\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"AG\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"AU\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"BB\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"BM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"BS\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"CA\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"DM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"en-001\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"FJ\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"FM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"GD\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"GM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"GU\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"GY\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"JM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"KI\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"KN\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"KY\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"LC\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"LR\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"MH\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"MP\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"MW\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"NZ\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"SB\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"SG\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"SL\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"SS\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"SZ\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"TC\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"TT\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"UM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"US\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"VC\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"VG\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"VI\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"ZM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"BO\": [\n        \"H\",\n        \"hB\",\n        \"h\",\n        \"hb\"\n    ],\n    \"EC\": [\n        \"H\",\n        \"hB\",\n        \"h\",\n        \"hb\"\n    ],\n    \"ES\": [\n        \"H\",\n        \"hB\",\n        \"h\",\n        \"hb\"\n    ],\n    \"GQ\": [\n        \"H\",\n        \"hB\",\n        \"h\",\n        \"hb\"\n    ],\n    \"PE\": [\n        \"H\",\n        \"hB\",\n        \"h\",\n        \"hb\"\n    ],\n    \"AE\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"ar-001\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"BH\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"DZ\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"EG\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"EH\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"HK\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"IQ\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"JO\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"KW\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"LB\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"LY\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"MO\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"MR\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"OM\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"PH\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"PS\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"QA\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"SA\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"SD\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"SY\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"TN\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"YE\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"AF\": [\n        \"H\",\n        \"hb\",\n        \"hB\",\n        \"h\"\n    ],\n    \"LA\": [\n        \"H\",\n        \"hb\",\n        \"hB\",\n        \"h\"\n    ],\n    \"CN\": [\n        \"H\",\n        \"hB\",\n        \"hb\",\n        \"h\"\n    ],\n    \"LV\": [\n        \"H\",\n        \"hB\",\n        \"hb\",\n        \"h\"\n    ],\n    \"TL\": [\n        \"H\",\n        \"hB\",\n        \"hb\",\n        \"h\"\n    ],\n    \"zu-ZA\": [\n        \"H\",\n        \"hB\",\n        \"hb\",\n        \"h\"\n    ],\n    \"CD\": [\n        \"hB\",\n        \"H\"\n    ],\n    \"IR\": [\n        \"hB\",\n        \"H\"\n    ],\n    \"hi-IN\": [\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"kn-IN\": [\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"ml-IN\": [\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"te-IN\": [\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"KH\": [\n        \"hB\",\n        \"h\",\n        \"H\",\n        \"hb\"\n    ],\n    \"ta-IN\": [\n        \"hB\",\n        \"h\",\n        \"hb\",\n        \"H\"\n    ],\n    \"BN\": [\n        \"hb\",\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"MY\": [\n        \"hb\",\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"ET\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"gu-IN\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"mr-IN\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"pa-IN\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"TW\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"KE\": [\n        \"hB\",\n        \"hb\",\n        \"H\",\n        \"h\"\n    ],\n    \"MM\": [\n        \"hB\",\n        \"hb\",\n        \"H\",\n        \"h\"\n    ],\n    \"TZ\": [\n        \"hB\",\n        \"hb\",\n        \"H\",\n        \"h\"\n    ],\n    \"UG\": [\n        \"hB\",\n        \"hb\",\n        \"H\",\n        \"h\"\n    ]\n};\n","var _a;\nimport { __assign } from \"tslib\";\nimport { ErrorKind } from './error';\nimport { SKELETON_TYPE, TYPE, } from './types';\nimport { SPACE_SEPARATOR_REGEX } from './regex.generated';\nimport { parseNumberSkeleton, parseNumberSkeletonFromString, parseDateTimeSkeleton, } from '@formatjs/icu-skeleton-parser';\nimport { getBestPattern } from './date-time-pattern-generator';\nvar SPACE_SEPARATOR_START_REGEX = new RegExp(\"^\".concat(SPACE_SEPARATOR_REGEX.source, \"*\"));\nvar SPACE_SEPARATOR_END_REGEX = new RegExp(\"\".concat(SPACE_SEPARATOR_REGEX.source, \"*$\"));\nfunction createLocation(start, end) {\n    return { start: start, end: end };\n}\n// #region Ponyfills\n// Consolidate these variables up top for easier toggling during debugging\nvar hasNativeStartsWith = !!String.prototype.startsWith;\nvar hasNativeFromCodePoint = !!String.fromCodePoint;\nvar hasNativeFromEntries = !!Object.fromEntries;\nvar hasNativeCodePointAt = !!String.prototype.codePointAt;\nvar hasTrimStart = !!String.prototype.trimStart;\nvar hasTrimEnd = !!String.prototype.trimEnd;\nvar hasNativeIsSafeInteger = !!Number.isSafeInteger;\nvar isSafeInteger = hasNativeIsSafeInteger\n    ? Number.isSafeInteger\n    : function (n) {\n        return (typeof n === 'number' &&\n            isFinite(n) &&\n            Math.floor(n) === n &&\n            Math.abs(n) <= 0x1fffffffffffff);\n    };\n// IE11 does not support y and u.\nvar REGEX_SUPPORTS_U_AND_Y = true;\ntry {\n    var re = RE('([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)', 'yu');\n    /**\n     * legacy Edge or Xbox One browser\n     * Unicode flag support: supported\n     * Pattern_Syntax support: not supported\n     * See https://github.com/formatjs/formatjs/issues/2822\n     */\n    REGEX_SUPPORTS_U_AND_Y = ((_a = re.exec('a')) === null || _a === void 0 ? void 0 : _a[0]) === 'a';\n}\ncatch (_) {\n    REGEX_SUPPORTS_U_AND_Y = false;\n}\nvar startsWith = hasNativeStartsWith\n    ? // Native\n        function startsWith(s, search, position) {\n            return s.startsWith(search, position);\n        }\n    : // For IE11\n        function startsWith(s, search, position) {\n            return s.slice(position, position + search.length) === search;\n        };\nvar fromCodePoint = hasNativeFromCodePoint\n    ? String.fromCodePoint\n    : // IE11\n        function fromCodePoint() {\n            var codePoints = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                codePoints[_i] = arguments[_i];\n            }\n            var elements = '';\n            var length = codePoints.length;\n            var i = 0;\n            var code;\n            while (length > i) {\n                code = codePoints[i++];\n                if (code > 0x10ffff)\n                    throw RangeError(code + ' is not a valid code point');\n                elements +=\n                    code < 0x10000\n                        ? String.fromCharCode(code)\n                        : String.fromCharCode(((code -= 0x10000) >> 10) + 0xd800, (code % 0x400) + 0xdc00);\n            }\n            return elements;\n        };\nvar fromEntries = \n// native\nhasNativeFromEntries\n    ? Object.fromEntries\n    : // Ponyfill\n        function fromEntries(entries) {\n            var obj = {};\n            for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n                var _a = entries_1[_i], k = _a[0], v = _a[1];\n                obj[k] = v;\n            }\n            return obj;\n        };\nvar codePointAt = hasNativeCodePointAt\n    ? // Native\n        function codePointAt(s, index) {\n            return s.codePointAt(index);\n        }\n    : // IE 11\n        function codePointAt(s, index) {\n            var size = s.length;\n            if (index < 0 || index >= size) {\n                return undefined;\n            }\n            var first = s.charCodeAt(index);\n            var second;\n            return first < 0xd800 ||\n                first > 0xdbff ||\n                index + 1 === size ||\n                (second = s.charCodeAt(index + 1)) < 0xdc00 ||\n                second > 0xdfff\n                ? first\n                : ((first - 0xd800) << 10) + (second - 0xdc00) + 0x10000;\n        };\nvar trimStart = hasTrimStart\n    ? // Native\n        function trimStart(s) {\n            return s.trimStart();\n        }\n    : // Ponyfill\n        function trimStart(s) {\n            return s.replace(SPACE_SEPARATOR_START_REGEX, '');\n        };\nvar trimEnd = hasTrimEnd\n    ? // Native\n        function trimEnd(s) {\n            return s.trimEnd();\n        }\n    : // Ponyfill\n        function trimEnd(s) {\n            return s.replace(SPACE_SEPARATOR_END_REGEX, '');\n        };\n// Prevent minifier to translate new RegExp to literal form that might cause syntax error on IE11.\nfunction RE(s, flag) {\n    return new RegExp(s, flag);\n}\n// #endregion\nvar matchIdentifierAtIndex;\nif (REGEX_SUPPORTS_U_AND_Y) {\n    // Native\n    var IDENTIFIER_PREFIX_RE_1 = RE('([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)', 'yu');\n    matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) {\n        var _a;\n        IDENTIFIER_PREFIX_RE_1.lastIndex = index;\n        var match = IDENTIFIER_PREFIX_RE_1.exec(s);\n        return (_a = match[1]) !== null && _a !== void 0 ? _a : '';\n    };\n}\nelse {\n    // IE11\n    matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) {\n        var match = [];\n        while (true) {\n            var c = codePointAt(s, index);\n            if (c === undefined || _isWhiteSpace(c) || _isPatternSyntax(c)) {\n                break;\n            }\n            match.push(c);\n            index += c >= 0x10000 ? 2 : 1;\n        }\n        return fromCodePoint.apply(void 0, match);\n    };\n}\nvar Parser = /** @class */ (function () {\n    function Parser(message, options) {\n        if (options === void 0) { options = {}; }\n        this.message = message;\n        this.position = { offset: 0, line: 1, column: 1 };\n        this.ignoreTag = !!options.ignoreTag;\n        this.locale = options.locale;\n        this.requiresOtherClause = !!options.requiresOtherClause;\n        this.shouldParseSkeletons = !!options.shouldParseSkeletons;\n    }\n    Parser.prototype.parse = function () {\n        if (this.offset() !== 0) {\n            throw Error('parser can only be used once');\n        }\n        return this.parseMessage(0, '', false);\n    };\n    Parser.prototype.parseMessage = function (nestingLevel, parentArgType, expectingCloseTag) {\n        var elements = [];\n        while (!this.isEOF()) {\n            var char = this.char();\n            if (char === 123 /* `{` */) {\n                var result = this.parseArgument(nestingLevel, expectingCloseTag);\n                if (result.err) {\n                    return result;\n                }\n                elements.push(result.val);\n            }\n            else if (char === 125 /* `}` */ && nestingLevel > 0) {\n                break;\n            }\n            else if (char === 35 /* `#` */ &&\n                (parentArgType === 'plural' || parentArgType === 'selectordinal')) {\n                var position = this.clonePosition();\n                this.bump();\n                elements.push({\n                    type: TYPE.pound,\n                    location: createLocation(position, this.clonePosition()),\n                });\n            }\n            else if (char === 60 /* `<` */ &&\n                !this.ignoreTag &&\n                this.peek() === 47 // char code for '/'\n            ) {\n                if (expectingCloseTag) {\n                    break;\n                }\n                else {\n                    return this.error(ErrorKind.UNMATCHED_CLOSING_TAG, createLocation(this.clonePosition(), this.clonePosition()));\n                }\n            }\n            else if (char === 60 /* `<` */ &&\n                !this.ignoreTag &&\n                _isAlpha(this.peek() || 0)) {\n                var result = this.parseTag(nestingLevel, parentArgType);\n                if (result.err) {\n                    return result;\n                }\n                elements.push(result.val);\n            }\n            else {\n                var result = this.parseLiteral(nestingLevel, parentArgType);\n                if (result.err) {\n                    return result;\n                }\n                elements.push(result.val);\n            }\n        }\n        return { val: elements, err: null };\n    };\n    /**\n     * A tag name must start with an ASCII lower/upper case letter. The grammar is based on the\n     * [custom element name][] except that a dash is NOT always mandatory and uppercase letters\n     * are accepted:\n     *\n     * ```\n     * tag ::= \"<\" tagName (whitespace)* \"/>\" | \"<\" tagName (whitespace)* \">\" message \"</\" tagName (whitespace)* \">\"\n     * tagName ::= [a-z] (PENChar)*\n     * PENChar ::=\n     *     \"-\" | \".\" | [0-9] | \"_\" | [a-z] | [A-Z] | #xB7 | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x37D] |\n     *     [#x37F-#x1FFF] | [#x200C-#x200D] | [#x203F-#x2040] | [#x2070-#x218F] | [#x2C00-#x2FEF] |\n     *     [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n     * ```\n     *\n     * [custom element name]: https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name\n     * NOTE: We're a bit more lax here since HTML technically does not allow uppercase HTML element but we do\n     * since other tag-based engines like React allow it\n     */\n    Parser.prototype.parseTag = function (nestingLevel, parentArgType) {\n        var startPosition = this.clonePosition();\n        this.bump(); // `<`\n        var tagName = this.parseTagName();\n        this.bumpSpace();\n        if (this.bumpIf('/>')) {\n            // Self closing tag\n            return {\n                val: {\n                    type: TYPE.literal,\n                    value: \"<\".concat(tagName, \"/>\"),\n                    location: createLocation(startPosition, this.clonePosition()),\n                },\n                err: null,\n            };\n        }\n        else if (this.bumpIf('>')) {\n            var childrenResult = this.parseMessage(nestingLevel + 1, parentArgType, true);\n            if (childrenResult.err) {\n                return childrenResult;\n            }\n            var children = childrenResult.val;\n            // Expecting a close tag\n            var endTagStartPosition = this.clonePosition();\n            if (this.bumpIf('</')) {\n                if (this.isEOF() || !_isAlpha(this.char())) {\n                    return this.error(ErrorKind.INVALID_TAG, createLocation(endTagStartPosition, this.clonePosition()));\n                }\n                var closingTagNameStartPosition = this.clonePosition();\n                var closingTagName = this.parseTagName();\n                if (tagName !== closingTagName) {\n                    return this.error(ErrorKind.UNMATCHED_CLOSING_TAG, createLocation(closingTagNameStartPosition, this.clonePosition()));\n                }\n                this.bumpSpace();\n                if (!this.bumpIf('>')) {\n                    return this.error(ErrorKind.INVALID_TAG, createLocation(endTagStartPosition, this.clonePosition()));\n                }\n                return {\n                    val: {\n                        type: TYPE.tag,\n                        value: tagName,\n                        children: children,\n                        location: createLocation(startPosition, this.clonePosition()),\n                    },\n                    err: null,\n                };\n            }\n            else {\n                return this.error(ErrorKind.UNCLOSED_TAG, createLocation(startPosition, this.clonePosition()));\n            }\n        }\n        else {\n            return this.error(ErrorKind.INVALID_TAG, createLocation(startPosition, this.clonePosition()));\n        }\n    };\n    /**\n     * This method assumes that the caller has peeked ahead for the first tag character.\n     */\n    Parser.prototype.parseTagName = function () {\n        var startOffset = this.offset();\n        this.bump(); // the first tag name character\n        while (!this.isEOF() && _isPotentialElementNameChar(this.char())) {\n            this.bump();\n        }\n        return this.message.slice(startOffset, this.offset());\n    };\n    Parser.prototype.parseLiteral = function (nestingLevel, parentArgType) {\n        var start = this.clonePosition();\n        var value = '';\n        while (true) {\n            var parseQuoteResult = this.tryParseQuote(parentArgType);\n            if (parseQuoteResult) {\n                value += parseQuoteResult;\n                continue;\n            }\n            var parseUnquotedResult = this.tryParseUnquoted(nestingLevel, parentArgType);\n            if (parseUnquotedResult) {\n                value += parseUnquotedResult;\n                continue;\n            }\n            var parseLeftAngleResult = this.tryParseLeftAngleBracket();\n            if (parseLeftAngleResult) {\n                value += parseLeftAngleResult;\n                continue;\n            }\n            break;\n        }\n        var location = createLocation(start, this.clonePosition());\n        return {\n            val: { type: TYPE.literal, value: value, location: location },\n            err: null,\n        };\n    };\n    Parser.prototype.tryParseLeftAngleBracket = function () {\n        if (!this.isEOF() &&\n            this.char() === 60 /* `<` */ &&\n            (this.ignoreTag ||\n                // If at the opening tag or closing tag position, bail.\n                !_isAlphaOrSlash(this.peek() || 0))) {\n            this.bump(); // `<`\n            return '<';\n        }\n        return null;\n    };\n    /**\n     * Starting with ICU 4.8, an ASCII apostrophe only starts quoted text if it immediately precedes\n     * a character that requires quoting (that is, \"only where needed\"), and works the same in\n     * nested messages as on the top level of the pattern. The new behavior is otherwise compatible.\n     */\n    Parser.prototype.tryParseQuote = function (parentArgType) {\n        if (this.isEOF() || this.char() !== 39 /* `'` */) {\n            return null;\n        }\n        // Parse escaped char following the apostrophe, or early return if there is no escaped char.\n        // Check if is valid escaped character\n        switch (this.peek()) {\n            case 39 /* `'` */:\n                // double quote, should return as a single quote.\n                this.bump();\n                this.bump();\n                return \"'\";\n            // '{', '<', '>', '}'\n            case 123:\n            case 60:\n            case 62:\n            case 125:\n                break;\n            case 35: // '#'\n                if (parentArgType === 'plural' || parentArgType === 'selectordinal') {\n                    break;\n                }\n                return null;\n            default:\n                return null;\n        }\n        this.bump(); // apostrophe\n        var codePoints = [this.char()]; // escaped char\n        this.bump();\n        // read chars until the optional closing apostrophe is found\n        while (!this.isEOF()) {\n            var ch = this.char();\n            if (ch === 39 /* `'` */) {\n                if (this.peek() === 39 /* `'` */) {\n                    codePoints.push(39);\n                    // Bump one more time because we need to skip 2 characters.\n                    this.bump();\n                }\n                else {\n                    // Optional closing apostrophe.\n                    this.bump();\n                    break;\n                }\n            }\n            else {\n                codePoints.push(ch);\n            }\n            this.bump();\n        }\n        return fromCodePoint.apply(void 0, codePoints);\n    };\n    Parser.prototype.tryParseUnquoted = function (nestingLevel, parentArgType) {\n        if (this.isEOF()) {\n            return null;\n        }\n        var ch = this.char();\n        if (ch === 60 /* `<` */ ||\n            ch === 123 /* `{` */ ||\n            (ch === 35 /* `#` */ &&\n                (parentArgType === 'plural' || parentArgType === 'selectordinal')) ||\n            (ch === 125 /* `}` */ && nestingLevel > 0)) {\n            return null;\n        }\n        else {\n            this.bump();\n            return fromCodePoint(ch);\n        }\n    };\n    Parser.prototype.parseArgument = function (nestingLevel, expectingCloseTag) {\n        var openingBracePosition = this.clonePosition();\n        this.bump(); // `{`\n        this.bumpSpace();\n        if (this.isEOF()) {\n            return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        if (this.char() === 125 /* `}` */) {\n            this.bump();\n            return this.error(ErrorKind.EMPTY_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        // argument name\n        var value = this.parseIdentifierIfPossible().value;\n        if (!value) {\n            return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        this.bumpSpace();\n        if (this.isEOF()) {\n            return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        switch (this.char()) {\n            // Simple argument: `{name}`\n            case 125 /* `}` */: {\n                this.bump(); // `}`\n                return {\n                    val: {\n                        type: TYPE.argument,\n                        // value does not include the opening and closing braces.\n                        value: value,\n                        location: createLocation(openingBracePosition, this.clonePosition()),\n                    },\n                    err: null,\n                };\n            }\n            // Argument with options: `{name, format, ...}`\n            case 44 /* `,` */: {\n                this.bump(); // `,`\n                this.bumpSpace();\n                if (this.isEOF()) {\n                    return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n                }\n                return this.parseArgumentOptions(nestingLevel, expectingCloseTag, value, openingBracePosition);\n            }\n            default:\n                return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n        }\n    };\n    /**\n     * Advance the parser until the end of the identifier, if it is currently on\n     * an identifier character. Return an empty string otherwise.\n     */\n    Parser.prototype.parseIdentifierIfPossible = function () {\n        var startingPosition = this.clonePosition();\n        var startOffset = this.offset();\n        var value = matchIdentifierAtIndex(this.message, startOffset);\n        var endOffset = startOffset + value.length;\n        this.bumpTo(endOffset);\n        var endPosition = this.clonePosition();\n        var location = createLocation(startingPosition, endPosition);\n        return { value: value, location: location };\n    };\n    Parser.prototype.parseArgumentOptions = function (nestingLevel, expectingCloseTag, value, openingBracePosition) {\n        var _a;\n        // Parse this range:\n        // {name, type, style}\n        //        ^---^\n        var typeStartPosition = this.clonePosition();\n        var argType = this.parseIdentifierIfPossible().value;\n        var typeEndPosition = this.clonePosition();\n        switch (argType) {\n            case '':\n                // Expecting a style string number, date, time, plural, selectordinal, or select.\n                return this.error(ErrorKind.EXPECT_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition));\n            case 'number':\n            case 'date':\n            case 'time': {\n                // Parse this range:\n                // {name, number, style}\n                //              ^-------^\n                this.bumpSpace();\n                var styleAndLocation = null;\n                if (this.bumpIf(',')) {\n                    this.bumpSpace();\n                    var styleStartPosition = this.clonePosition();\n                    var result = this.parseSimpleArgStyleIfPossible();\n                    if (result.err) {\n                        return result;\n                    }\n                    var style = trimEnd(result.val);\n                    if (style.length === 0) {\n                        return this.error(ErrorKind.EXPECT_ARGUMENT_STYLE, createLocation(this.clonePosition(), this.clonePosition()));\n                    }\n                    var styleLocation = createLocation(styleStartPosition, this.clonePosition());\n                    styleAndLocation = { style: style, styleLocation: styleLocation };\n                }\n                var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n                if (argCloseResult.err) {\n                    return argCloseResult;\n                }\n                var location_1 = createLocation(openingBracePosition, this.clonePosition());\n                // Extract style or skeleton\n                if (styleAndLocation && startsWith(styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style, '::', 0)) {\n                    // Skeleton starts with `::`.\n                    var skeleton = trimStart(styleAndLocation.style.slice(2));\n                    if (argType === 'number') {\n                        var result = this.parseNumberSkeletonFromString(skeleton, styleAndLocation.styleLocation);\n                        if (result.err) {\n                            return result;\n                        }\n                        return {\n                            val: { type: TYPE.number, value: value, location: location_1, style: result.val },\n                            err: null,\n                        };\n                    }\n                    else {\n                        if (skeleton.length === 0) {\n                            return this.error(ErrorKind.EXPECT_DATE_TIME_SKELETON, location_1);\n                        }\n                        var dateTimePattern = skeleton;\n                        // Get \"best match\" pattern only if locale is passed, if not, let it\n                        // pass as-is where `parseDateTimeSkeleton()` will throw an error\n                        // for unsupported patterns.\n                        if (this.locale) {\n                            dateTimePattern = getBestPattern(skeleton, this.locale);\n                        }\n                        var style = {\n                            type: SKELETON_TYPE.dateTime,\n                            pattern: dateTimePattern,\n                            location: styleAndLocation.styleLocation,\n                            parsedOptions: this.shouldParseSkeletons\n                                ? parseDateTimeSkeleton(dateTimePattern)\n                                : {},\n                        };\n                        var type = argType === 'date' ? TYPE.date : TYPE.time;\n                        return {\n                            val: { type: type, value: value, location: location_1, style: style },\n                            err: null,\n                        };\n                    }\n                }\n                // Regular style or no style.\n                return {\n                    val: {\n                        type: argType === 'number'\n                            ? TYPE.number\n                            : argType === 'date'\n                                ? TYPE.date\n                                : TYPE.time,\n                        value: value,\n                        location: location_1,\n                        style: (_a = styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style) !== null && _a !== void 0 ? _a : null,\n                    },\n                    err: null,\n                };\n            }\n            case 'plural':\n            case 'selectordinal':\n            case 'select': {\n                // Parse this range:\n                // {name, plural, options}\n                //              ^---------^\n                var typeEndPosition_1 = this.clonePosition();\n                this.bumpSpace();\n                if (!this.bumpIf(',')) {\n                    return this.error(ErrorKind.EXPECT_SELECT_ARGUMENT_OPTIONS, createLocation(typeEndPosition_1, __assign({}, typeEndPosition_1)));\n                }\n                this.bumpSpace();\n                // Parse offset:\n                // {name, plural, offset:1, options}\n                //                ^-----^\n                //\n                // or the first option:\n                //\n                // {name, plural, one {...} other {...}}\n                //                ^--^\n                var identifierAndLocation = this.parseIdentifierIfPossible();\n                var pluralOffset = 0;\n                if (argType !== 'select' && identifierAndLocation.value === 'offset') {\n                    if (!this.bumpIf(':')) {\n                        return this.error(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, createLocation(this.clonePosition(), this.clonePosition()));\n                    }\n                    this.bumpSpace();\n                    var result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, ErrorKind.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE);\n                    if (result.err) {\n                        return result;\n                    }\n                    // Parse another identifier for option parsing\n                    this.bumpSpace();\n                    identifierAndLocation = this.parseIdentifierIfPossible();\n                    pluralOffset = result.val;\n                }\n                var optionsResult = this.tryParsePluralOrSelectOptions(nestingLevel, argType, expectingCloseTag, identifierAndLocation);\n                if (optionsResult.err) {\n                    return optionsResult;\n                }\n                var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n                if (argCloseResult.err) {\n                    return argCloseResult;\n                }\n                var location_2 = createLocation(openingBracePosition, this.clonePosition());\n                if (argType === 'select') {\n                    return {\n                        val: {\n                            type: TYPE.select,\n                            value: value,\n                            options: fromEntries(optionsResult.val),\n                            location: location_2,\n                        },\n                        err: null,\n                    };\n                }\n                else {\n                    return {\n                        val: {\n                            type: TYPE.plural,\n                            value: value,\n                            options: fromEntries(optionsResult.val),\n                            offset: pluralOffset,\n                            pluralType: argType === 'plural' ? 'cardinal' : 'ordinal',\n                            location: location_2,\n                        },\n                        err: null,\n                    };\n                }\n            }\n            default:\n                return this.error(ErrorKind.INVALID_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition));\n        }\n    };\n    Parser.prototype.tryParseArgumentClose = function (openingBracePosition) {\n        // Parse: {value, number, ::currency/GBP }\n        //\n        if (this.isEOF() || this.char() !== 125 /* `}` */) {\n            return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        this.bump(); // `}`\n        return { val: true, err: null };\n    };\n    /**\n     * See: https://github.com/unicode-org/icu/blob/af7ed1f6d2298013dc303628438ec4abe1f16479/icu4c/source/common/messagepattern.cpp#L659\n     */\n    Parser.prototype.parseSimpleArgStyleIfPossible = function () {\n        var nestedBraces = 0;\n        var startPosition = this.clonePosition();\n        while (!this.isEOF()) {\n            var ch = this.char();\n            switch (ch) {\n                case 39 /* `'` */: {\n                    // Treat apostrophe as quoting but include it in the style part.\n                    // Find the end of the quoted literal text.\n                    this.bump();\n                    var apostrophePosition = this.clonePosition();\n                    if (!this.bumpUntil(\"'\")) {\n                        return this.error(ErrorKind.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE, createLocation(apostrophePosition, this.clonePosition()));\n                    }\n                    this.bump();\n                    break;\n                }\n                case 123 /* `{` */: {\n                    nestedBraces += 1;\n                    this.bump();\n                    break;\n                }\n                case 125 /* `}` */: {\n                    if (nestedBraces > 0) {\n                        nestedBraces -= 1;\n                    }\n                    else {\n                        return {\n                            val: this.message.slice(startPosition.offset, this.offset()),\n                            err: null,\n                        };\n                    }\n                    break;\n                }\n                default:\n                    this.bump();\n                    break;\n            }\n        }\n        return {\n            val: this.message.slice(startPosition.offset, this.offset()),\n            err: null,\n        };\n    };\n    Parser.prototype.parseNumberSkeletonFromString = function (skeleton, location) {\n        var tokens = [];\n        try {\n            tokens = parseNumberSkeletonFromString(skeleton);\n        }\n        catch (e) {\n            return this.error(ErrorKind.INVALID_NUMBER_SKELETON, location);\n        }\n        return {\n            val: {\n                type: SKELETON_TYPE.number,\n                tokens: tokens,\n                location: location,\n                parsedOptions: this.shouldParseSkeletons\n                    ? parseNumberSkeleton(tokens)\n                    : {},\n            },\n            err: null,\n        };\n    };\n    /**\n     * @param nesting_level The current nesting level of messages.\n     *     This can be positive when parsing message fragment in select or plural argument options.\n     * @param parent_arg_type The parent argument's type.\n     * @param parsed_first_identifier If provided, this is the first identifier-like selector of\n     *     the argument. It is a by-product of a previous parsing attempt.\n     * @param expecting_close_tag If true, this message is directly or indirectly nested inside\n     *     between a pair of opening and closing tags. The nested message will not parse beyond\n     *     the closing tag boundary.\n     */\n    Parser.prototype.tryParsePluralOrSelectOptions = function (nestingLevel, parentArgType, expectCloseTag, parsedFirstIdentifier) {\n        var _a;\n        var hasOtherClause = false;\n        var options = [];\n        var parsedSelectors = new Set();\n        var selector = parsedFirstIdentifier.value, selectorLocation = parsedFirstIdentifier.location;\n        // Parse:\n        // one {one apple}\n        // ^--^\n        while (true) {\n            if (selector.length === 0) {\n                var startPosition = this.clonePosition();\n                if (parentArgType !== 'select' && this.bumpIf('=')) {\n                    // Try parse `={number}` selector\n                    var result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, ErrorKind.INVALID_PLURAL_ARGUMENT_SELECTOR);\n                    if (result.err) {\n                        return result;\n                    }\n                    selectorLocation = createLocation(startPosition, this.clonePosition());\n                    selector = this.message.slice(startPosition.offset, this.offset());\n                }\n                else {\n                    break;\n                }\n            }\n            // Duplicate selector clauses\n            if (parsedSelectors.has(selector)) {\n                return this.error(parentArgType === 'select'\n                    ? ErrorKind.DUPLICATE_SELECT_ARGUMENT_SELECTOR\n                    : ErrorKind.DUPLICATE_PLURAL_ARGUMENT_SELECTOR, selectorLocation);\n            }\n            if (selector === 'other') {\n                hasOtherClause = true;\n            }\n            // Parse:\n            // one {one apple}\n            //     ^----------^\n            this.bumpSpace();\n            var openingBracePosition = this.clonePosition();\n            if (!this.bumpIf('{')) {\n                return this.error(parentArgType === 'select'\n                    ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\n                    : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT, createLocation(this.clonePosition(), this.clonePosition()));\n            }\n            var fragmentResult = this.parseMessage(nestingLevel + 1, parentArgType, expectCloseTag);\n            if (fragmentResult.err) {\n                return fragmentResult;\n            }\n            var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n            if (argCloseResult.err) {\n                return argCloseResult;\n            }\n            options.push([\n                selector,\n                {\n                    value: fragmentResult.val,\n                    location: createLocation(openingBracePosition, this.clonePosition()),\n                },\n            ]);\n            // Keep track of the existing selectors\n            parsedSelectors.add(selector);\n            // Prep next selector clause.\n            this.bumpSpace();\n            (_a = this.parseIdentifierIfPossible(), selector = _a.value, selectorLocation = _a.location);\n        }\n        if (options.length === 0) {\n            return this.error(parentArgType === 'select'\n                ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR\n                : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, createLocation(this.clonePosition(), this.clonePosition()));\n        }\n        if (this.requiresOtherClause && !hasOtherClause) {\n            return this.error(ErrorKind.MISSING_OTHER_CLAUSE, createLocation(this.clonePosition(), this.clonePosition()));\n        }\n        return { val: options, err: null };\n    };\n    Parser.prototype.tryParseDecimalInteger = function (expectNumberError, invalidNumberError) {\n        var sign = 1;\n        var startingPosition = this.clonePosition();\n        if (this.bumpIf('+')) {\n        }\n        else if (this.bumpIf('-')) {\n            sign = -1;\n        }\n        var hasDigits = false;\n        var decimal = 0;\n        while (!this.isEOF()) {\n            var ch = this.char();\n            if (ch >= 48 /* `0` */ && ch <= 57 /* `9` */) {\n                hasDigits = true;\n                decimal = decimal * 10 + (ch - 48);\n                this.bump();\n            }\n            else {\n                break;\n            }\n        }\n        var location = createLocation(startingPosition, this.clonePosition());\n        if (!hasDigits) {\n            return this.error(expectNumberError, location);\n        }\n        decimal *= sign;\n        if (!isSafeInteger(decimal)) {\n            return this.error(invalidNumberError, location);\n        }\n        return { val: decimal, err: null };\n    };\n    Parser.prototype.offset = function () {\n        return this.position.offset;\n    };\n    Parser.prototype.isEOF = function () {\n        return this.offset() === this.message.length;\n    };\n    Parser.prototype.clonePosition = function () {\n        // This is much faster than `Object.assign` or spread.\n        return {\n            offset: this.position.offset,\n            line: this.position.line,\n            column: this.position.column,\n        };\n    };\n    /**\n     * Return the code point at the current position of the parser.\n     * Throws if the index is out of bound.\n     */\n    Parser.prototype.char = function () {\n        var offset = this.position.offset;\n        if (offset >= this.message.length) {\n            throw Error('out of bound');\n        }\n        var code = codePointAt(this.message, offset);\n        if (code === undefined) {\n            throw Error(\"Offset \".concat(offset, \" is at invalid UTF-16 code unit boundary\"));\n        }\n        return code;\n    };\n    Parser.prototype.error = function (kind, location) {\n        return {\n            val: null,\n            err: {\n                kind: kind,\n                message: this.message,\n                location: location,\n            },\n        };\n    };\n    /** Bump the parser to the next UTF-16 code unit. */\n    Parser.prototype.bump = function () {\n        if (this.isEOF()) {\n            return;\n        }\n        var code = this.char();\n        if (code === 10 /* '\\n' */) {\n            this.position.line += 1;\n            this.position.column = 1;\n            this.position.offset += 1;\n        }\n        else {\n            this.position.column += 1;\n            // 0 ~ 0x10000 -> unicode BMP, otherwise skip the surrogate pair.\n            this.position.offset += code < 0x10000 ? 1 : 2;\n        }\n    };\n    /**\n     * If the substring starting at the current position of the parser has\n     * the given prefix, then bump the parser to the character immediately\n     * following the prefix and return true. Otherwise, don't bump the parser\n     * and return false.\n     */\n    Parser.prototype.bumpIf = function (prefix) {\n        if (startsWith(this.message, prefix, this.offset())) {\n            for (var i = 0; i < prefix.length; i++) {\n                this.bump();\n            }\n            return true;\n        }\n        return false;\n    };\n    /**\n     * Bump the parser until the pattern character is found and return `true`.\n     * Otherwise bump to the end of the file and return `false`.\n     */\n    Parser.prototype.bumpUntil = function (pattern) {\n        var currentOffset = this.offset();\n        var index = this.message.indexOf(pattern, currentOffset);\n        if (index >= 0) {\n            this.bumpTo(index);\n            return true;\n        }\n        else {\n            this.bumpTo(this.message.length);\n            return false;\n        }\n    };\n    /**\n     * Bump the parser to the target offset.\n     * If target offset is beyond the end of the input, bump the parser to the end of the input.\n     */\n    Parser.prototype.bumpTo = function (targetOffset) {\n        if (this.offset() > targetOffset) {\n            throw Error(\"targetOffset \".concat(targetOffset, \" must be greater than or equal to the current offset \").concat(this.offset()));\n        }\n        targetOffset = Math.min(targetOffset, this.message.length);\n        while (true) {\n            var offset = this.offset();\n            if (offset === targetOffset) {\n                break;\n            }\n            if (offset > targetOffset) {\n                throw Error(\"targetOffset \".concat(targetOffset, \" is at invalid UTF-16 code unit boundary\"));\n            }\n            this.bump();\n            if (this.isEOF()) {\n                break;\n            }\n        }\n    };\n    /** advance the parser through all whitespace to the next non-whitespace code unit. */\n    Parser.prototype.bumpSpace = function () {\n        while (!this.isEOF() && _isWhiteSpace(this.char())) {\n            this.bump();\n        }\n    };\n    /**\n     * Peek at the *next* Unicode codepoint in the input without advancing the parser.\n     * If the input has been exhausted, then this returns null.\n     */\n    Parser.prototype.peek = function () {\n        if (this.isEOF()) {\n            return null;\n        }\n        var code = this.char();\n        var offset = this.offset();\n        var nextCode = this.message.charCodeAt(offset + (code >= 0x10000 ? 2 : 1));\n        return nextCode !== null && nextCode !== void 0 ? nextCode : null;\n    };\n    return Parser;\n}());\nexport { Parser };\n/**\n * This check if codepoint is alphabet (lower & uppercase)\n * @param codepoint\n * @returns\n */\nfunction _isAlpha(codepoint) {\n    return ((codepoint >= 97 && codepoint <= 122) ||\n        (codepoint >= 65 && codepoint <= 90));\n}\nfunction _isAlphaOrSlash(codepoint) {\n    return _isAlpha(codepoint) || codepoint === 47; /* '/' */\n}\n/** See `parseTag` function docs. */\nfunction _isPotentialElementNameChar(c) {\n    return (c === 45 /* '-' */ ||\n        c === 46 /* '.' */ ||\n        (c >= 48 && c <= 57) /* 0..9 */ ||\n        c === 95 /* '_' */ ||\n        (c >= 97 && c <= 122) /** a..z */ ||\n        (c >= 65 && c <= 90) /* A..Z */ ||\n        c == 0xb7 ||\n        (c >= 0xc0 && c <= 0xd6) ||\n        (c >= 0xd8 && c <= 0xf6) ||\n        (c >= 0xf8 && c <= 0x37d) ||\n        (c >= 0x37f && c <= 0x1fff) ||\n        (c >= 0x200c && c <= 0x200d) ||\n        (c >= 0x203f && c <= 0x2040) ||\n        (c >= 0x2070 && c <= 0x218f) ||\n        (c >= 0x2c00 && c <= 0x2fef) ||\n        (c >= 0x3001 && c <= 0xd7ff) ||\n        (c >= 0xf900 && c <= 0xfdcf) ||\n        (c >= 0xfdf0 && c <= 0xfffd) ||\n        (c >= 0x10000 && c <= 0xeffff));\n}\n/**\n * Code point equivalent of regex `\\p{White_Space}`.\n * From: https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n */\nfunction _isWhiteSpace(c) {\n    return ((c >= 0x0009 && c <= 0x000d) ||\n        c === 0x0020 ||\n        c === 0x0085 ||\n        (c >= 0x200e && c <= 0x200f) ||\n        c === 0x2028 ||\n        c === 0x2029);\n}\n/**\n * Code point equivalent of regex `\\p{Pattern_Syntax}`.\n * See https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n */\nfunction _isPatternSyntax(c) {\n    return ((c >= 0x0021 && c <= 0x0023) ||\n        c === 0x0024 ||\n        (c >= 0x0025 && c <= 0x0027) ||\n        c === 0x0028 ||\n        c === 0x0029 ||\n        c === 0x002a ||\n        c === 0x002b ||\n        c === 0x002c ||\n        c === 0x002d ||\n        (c >= 0x002e && c <= 0x002f) ||\n        (c >= 0x003a && c <= 0x003b) ||\n        (c >= 0x003c && c <= 0x003e) ||\n        (c >= 0x003f && c <= 0x0040) ||\n        c === 0x005b ||\n        c === 0x005c ||\n        c === 0x005d ||\n        c === 0x005e ||\n        c === 0x0060 ||\n        c === 0x007b ||\n        c === 0x007c ||\n        c === 0x007d ||\n        c === 0x007e ||\n        c === 0x00a1 ||\n        (c >= 0x00a2 && c <= 0x00a5) ||\n        c === 0x00a6 ||\n        c === 0x00a7 ||\n        c === 0x00a9 ||\n        c === 0x00ab ||\n        c === 0x00ac ||\n        c === 0x00ae ||\n        c === 0x00b0 ||\n        c === 0x00b1 ||\n        c === 0x00b6 ||\n        c === 0x00bb ||\n        c === 0x00bf ||\n        c === 0x00d7 ||\n        c === 0x00f7 ||\n        (c >= 0x2010 && c <= 0x2015) ||\n        (c >= 0x2016 && c <= 0x2017) ||\n        c === 0x2018 ||\n        c === 0x2019 ||\n        c === 0x201a ||\n        (c >= 0x201b && c <= 0x201c) ||\n        c === 0x201d ||\n        c === 0x201e ||\n        c === 0x201f ||\n        (c >= 0x2020 && c <= 0x2027) ||\n        (c >= 0x2030 && c <= 0x2038) ||\n        c === 0x2039 ||\n        c === 0x203a ||\n        (c >= 0x203b && c <= 0x203e) ||\n        (c >= 0x2041 && c <= 0x2043) ||\n        c === 0x2044 ||\n        c === 0x2045 ||\n        c === 0x2046 ||\n        (c >= 0x2047 && c <= 0x2051) ||\n        c === 0x2052 ||\n        c === 0x2053 ||\n        (c >= 0x2055 && c <= 0x205e) ||\n        (c >= 0x2190 && c <= 0x2194) ||\n        (c >= 0x2195 && c <= 0x2199) ||\n        (c >= 0x219a && c <= 0x219b) ||\n        (c >= 0x219c && c <= 0x219f) ||\n        c === 0x21a0 ||\n        (c >= 0x21a1 && c <= 0x21a2) ||\n        c === 0x21a3 ||\n        (c >= 0x21a4 && c <= 0x21a5) ||\n        c === 0x21a6 ||\n        (c >= 0x21a7 && c <= 0x21ad) ||\n        c === 0x21ae ||\n        (c >= 0x21af && c <= 0x21cd) ||\n        (c >= 0x21ce && c <= 0x21cf) ||\n        (c >= 0x21d0 && c <= 0x21d1) ||\n        c === 0x21d2 ||\n        c === 0x21d3 ||\n        c === 0x21d4 ||\n        (c >= 0x21d5 && c <= 0x21f3) ||\n        (c >= 0x21f4 && c <= 0x22ff) ||\n        (c >= 0x2300 && c <= 0x2307) ||\n        c === 0x2308 ||\n        c === 0x2309 ||\n        c === 0x230a ||\n        c === 0x230b ||\n        (c >= 0x230c && c <= 0x231f) ||\n        (c >= 0x2320 && c <= 0x2321) ||\n        (c >= 0x2322 && c <= 0x2328) ||\n        c === 0x2329 ||\n        c === 0x232a ||\n        (c >= 0x232b && c <= 0x237b) ||\n        c === 0x237c ||\n        (c >= 0x237d && c <= 0x239a) ||\n        (c >= 0x239b && c <= 0x23b3) ||\n        (c >= 0x23b4 && c <= 0x23db) ||\n        (c >= 0x23dc && c <= 0x23e1) ||\n        (c >= 0x23e2 && c <= 0x2426) ||\n        (c >= 0x2427 && c <= 0x243f) ||\n        (c >= 0x2440 && c <= 0x244a) ||\n        (c >= 0x244b && c <= 0x245f) ||\n        (c >= 0x2500 && c <= 0x25b6) ||\n        c === 0x25b7 ||\n        (c >= 0x25b8 && c <= 0x25c0) ||\n        c === 0x25c1 ||\n        (c >= 0x25c2 && c <= 0x25f7) ||\n        (c >= 0x25f8 && c <= 0x25ff) ||\n        (c >= 0x2600 && c <= 0x266e) ||\n        c === 0x266f ||\n        (c >= 0x2670 && c <= 0x2767) ||\n        c === 0x2768 ||\n        c === 0x2769 ||\n        c === 0x276a ||\n        c === 0x276b ||\n        c === 0x276c ||\n        c === 0x276d ||\n        c === 0x276e ||\n        c === 0x276f ||\n        c === 0x2770 ||\n        c === 0x2771 ||\n        c === 0x2772 ||\n        c === 0x2773 ||\n        c === 0x2774 ||\n        c === 0x2775 ||\n        (c >= 0x2794 && c <= 0x27bf) ||\n        (c >= 0x27c0 && c <= 0x27c4) ||\n        c === 0x27c5 ||\n        c === 0x27c6 ||\n        (c >= 0x27c7 && c <= 0x27e5) ||\n        c === 0x27e6 ||\n        c === 0x27e7 ||\n        c === 0x27e8 ||\n        c === 0x27e9 ||\n        c === 0x27ea ||\n        c === 0x27eb ||\n        c === 0x27ec ||\n        c === 0x27ed ||\n        c === 0x27ee ||\n        c === 0x27ef ||\n        (c >= 0x27f0 && c <= 0x27ff) ||\n        (c >= 0x2800 && c <= 0x28ff) ||\n        (c >= 0x2900 && c <= 0x2982) ||\n        c === 0x2983 ||\n        c === 0x2984 ||\n        c === 0x2985 ||\n        c === 0x2986 ||\n        c === 0x2987 ||\n        c === 0x2988 ||\n        c === 0x2989 ||\n        c === 0x298a ||\n        c === 0x298b ||\n        c === 0x298c ||\n        c === 0x298d ||\n        c === 0x298e ||\n        c === 0x298f ||\n        c === 0x2990 ||\n        c === 0x2991 ||\n        c === 0x2992 ||\n        c === 0x2993 ||\n        c === 0x2994 ||\n        c === 0x2995 ||\n        c === 0x2996 ||\n        c === 0x2997 ||\n        c === 0x2998 ||\n        (c >= 0x2999 && c <= 0x29d7) ||\n        c === 0x29d8 ||\n        c === 0x29d9 ||\n        c === 0x29da ||\n        c === 0x29db ||\n        (c >= 0x29dc && c <= 0x29fb) ||\n        c === 0x29fc ||\n        c === 0x29fd ||\n        (c >= 0x29fe && c <= 0x2aff) ||\n        (c >= 0x2b00 && c <= 0x2b2f) ||\n        (c >= 0x2b30 && c <= 0x2b44) ||\n        (c >= 0x2b45 && c <= 0x2b46) ||\n        (c >= 0x2b47 && c <= 0x2b4c) ||\n        (c >= 0x2b4d && c <= 0x2b73) ||\n        (c >= 0x2b74 && c <= 0x2b75) ||\n        (c >= 0x2b76 && c <= 0x2b95) ||\n        c === 0x2b96 ||\n        (c >= 0x2b97 && c <= 0x2bff) ||\n        (c >= 0x2e00 && c <= 0x2e01) ||\n        c === 0x2e02 ||\n        c === 0x2e03 ||\n        c === 0x2e04 ||\n        c === 0x2e05 ||\n        (c >= 0x2e06 && c <= 0x2e08) ||\n        c === 0x2e09 ||\n        c === 0x2e0a ||\n        c === 0x2e0b ||\n        c === 0x2e0c ||\n        c === 0x2e0d ||\n        (c >= 0x2e0e && c <= 0x2e16) ||\n        c === 0x2e17 ||\n        (c >= 0x2e18 && c <= 0x2e19) ||\n        c === 0x2e1a ||\n        c === 0x2e1b ||\n        c === 0x2e1c ||\n        c === 0x2e1d ||\n        (c >= 0x2e1e && c <= 0x2e1f) ||\n        c === 0x2e20 ||\n        c === 0x2e21 ||\n        c === 0x2e22 ||\n        c === 0x2e23 ||\n        c === 0x2e24 ||\n        c === 0x2e25 ||\n        c === 0x2e26 ||\n        c === 0x2e27 ||\n        c === 0x2e28 ||\n        c === 0x2e29 ||\n        (c >= 0x2e2a && c <= 0x2e2e) ||\n        c === 0x2e2f ||\n        (c >= 0x2e30 && c <= 0x2e39) ||\n        (c >= 0x2e3a && c <= 0x2e3b) ||\n        (c >= 0x2e3c && c <= 0x2e3f) ||\n        c === 0x2e40 ||\n        c === 0x2e41 ||\n        c === 0x2e42 ||\n        (c >= 0x2e43 && c <= 0x2e4f) ||\n        (c >= 0x2e50 && c <= 0x2e51) ||\n        c === 0x2e52 ||\n        (c >= 0x2e53 && c <= 0x2e7f) ||\n        (c >= 0x3001 && c <= 0x3003) ||\n        c === 0x3008 ||\n        c === 0x3009 ||\n        c === 0x300a ||\n        c === 0x300b ||\n        c === 0x300c ||\n        c === 0x300d ||\n        c === 0x300e ||\n        c === 0x300f ||\n        c === 0x3010 ||\n        c === 0x3011 ||\n        (c >= 0x3012 && c <= 0x3013) ||\n        c === 0x3014 ||\n        c === 0x3015 ||\n        c === 0x3016 ||\n        c === 0x3017 ||\n        c === 0x3018 ||\n        c === 0x3019 ||\n        c === 0x301a ||\n        c === 0x301b ||\n        c === 0x301c ||\n        c === 0x301d ||\n        (c >= 0x301e && c <= 0x301f) ||\n        c === 0x3020 ||\n        c === 0x3030 ||\n        c === 0xfd3e ||\n        c === 0xfd3f ||\n        (c >= 0xfe45 && c <= 0xfe46));\n}\n","import { timeData } from './time-data.generated';\n/**\n * Returns the best matching date time pattern if a date time skeleton\n * pattern is provided with a locale. Follows the Unicode specification:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#table-mapping-requested-time-skeletons-to-patterns\n * @param skeleton date time skeleton pattern that possibly includes j, J or C\n * @param locale\n */\nexport function getBestPattern(skeleton, locale) {\n    var skeletonCopy = '';\n    for (var patternPos = 0; patternPos < skeleton.length; patternPos++) {\n        var patternChar = skeleton.charAt(patternPos);\n        if (patternChar === 'j') {\n            var extraLength = 0;\n            while (patternPos + 1 < skeleton.length &&\n                skeleton.charAt(patternPos + 1) === patternChar) {\n                extraLength++;\n                patternPos++;\n            }\n            var hourLen = 1 + (extraLength & 1);\n            var dayPeriodLen = extraLength < 2 ? 1 : 3 + (extraLength >> 1);\n            var dayPeriodChar = 'a';\n            var hourChar = getDefaultHourSymbolFromLocale(locale);\n            if (hourChar == 'H' || hourChar == 'k') {\n                dayPeriodLen = 0;\n            }\n            while (dayPeriodLen-- > 0) {\n                skeletonCopy += dayPeriodChar;\n            }\n            while (hourLen-- > 0) {\n                skeletonCopy = hourChar + skeletonCopy;\n            }\n        }\n        else if (patternChar === 'J') {\n            skeletonCopy += 'H';\n        }\n        else {\n            skeletonCopy += patternChar;\n        }\n    }\n    return skeletonCopy;\n}\n/**\n * Maps the [hour cycle type](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle)\n * of the given `locale` to the corresponding time pattern.\n * @param locale\n */\nfunction getDefaultHourSymbolFromLocale(locale) {\n    var hourCycle = locale.hourCycle;\n    if (hourCycle === undefined &&\n        // @ts-ignore hourCycle(s) is not identified yet\n        locale.hourCycles &&\n        // @ts-ignore\n        locale.hourCycles.length) {\n        // @ts-ignore\n        hourCycle = locale.hourCycles[0];\n    }\n    if (hourCycle) {\n        switch (hourCycle) {\n            case 'h24':\n                return 'k';\n            case 'h23':\n                return 'H';\n            case 'h12':\n                return 'h';\n            case 'h11':\n                return 'K';\n            default:\n                throw new Error('Invalid hourCycle');\n        }\n    }\n    // TODO: Once hourCycle is fully supported remove the following with data generation\n    var languageTag = locale.language;\n    var regionTag;\n    if (languageTag !== 'root') {\n        regionTag = locale.maximize().region;\n    }\n    var hourCycles = timeData[regionTag || ''] ||\n        timeData[languageTag || ''] ||\n        timeData[\"\".concat(languageTag, \"-001\")] ||\n        timeData['001'];\n    return hourCycles[0];\n}\n","import { __assign } from \"tslib\";\nimport { ErrorKind } from './error';\nimport { Parser } from './parser';\nimport { isDateElement, isDateTimeSkeleton, isNumberElement, isNumberSkeleton, isPluralElement, isSelectElement, isTagElement, isTimeElement, } from './types';\nfunction pruneLocation(els) {\n    els.forEach(function (el) {\n        delete el.location;\n        if (isSelectElement(el) || isPluralElement(el)) {\n            for (var k in el.options) {\n                delete el.options[k].location;\n                pruneLocation(el.options[k].value);\n            }\n        }\n        else if (isNumberElement(el) && isNumberSkeleton(el.style)) {\n            delete el.style.location;\n        }\n        else if ((isDateElement(el) || isTimeElement(el)) &&\n            isDateTimeSkeleton(el.style)) {\n            delete el.style.location;\n        }\n        else if (isTagElement(el)) {\n            pruneLocation(el.children);\n        }\n    });\n}\nexport function parse(message, opts) {\n    if (opts === void 0) { opts = {}; }\n    opts = __assign({ shouldParseSkeletons: true, requiresOtherClause: true }, opts);\n    var result = new Parser(message, opts).parse();\n    if (result.err) {\n        var error = SyntaxError(ErrorKind[result.err.kind]);\n        // @ts-expect-error Assign to error object\n        error.location = result.err.location;\n        // @ts-expect-error Assign to error object\n        error.originalMessage = result.err.message;\n        throw error;\n    }\n    if (!(opts === null || opts === void 0 ? void 0 : opts.captureLocation)) {\n        pruneLocation(result.val);\n    }\n    return result.val;\n}\nexport * from './types';\n// only for testing\nexport var _Parser = Parser;\n","//\n// Main\n//\nexport default function memoize(fn, options) {\n    var cache = options && options.cache ? options.cache : cacheDefault;\n    var serializer = options && options.serializer ? options.serializer : serializerDefault;\n    var strategy = options && options.strategy ? options.strategy : strategyDefault;\n    return strategy(fn, {\n        cache: cache,\n        serializer: serializer,\n    });\n}\n//\n// Strategy\n//\nfunction isPrimitive(value) {\n    return (value == null || typeof value === 'number' || typeof value === 'boolean'); // || typeof value === \"string\" 'unsafe' primitive for our needs\n}\nfunction monadic(fn, cache, serializer, arg) {\n    var cacheKey = isPrimitive(arg) ? arg : serializer(arg);\n    var computedValue = cache.get(cacheKey);\n    if (typeof computedValue === 'undefined') {\n        computedValue = fn.call(this, arg);\n        cache.set(cacheKey, computedValue);\n    }\n    return computedValue;\n}\nfunction variadic(fn, cache, serializer) {\n    var args = Array.prototype.slice.call(arguments, 3);\n    var cacheKey = serializer(args);\n    var computedValue = cache.get(cacheKey);\n    if (typeof computedValue === 'undefined') {\n        computedValue = fn.apply(this, args);\n        cache.set(cacheKey, computedValue);\n    }\n    return computedValue;\n}\nfunction assemble(fn, context, strategy, cache, serialize) {\n    return strategy.bind(context, fn, cache, serialize);\n}\nfunction strategyDefault(fn, options) {\n    var strategy = fn.length === 1 ? monadic : variadic;\n    return assemble(fn, this, strategy, options.cache.create(), options.serializer);\n}\nfunction strategyVariadic(fn, options) {\n    return assemble(fn, this, variadic, options.cache.create(), options.serializer);\n}\nfunction strategyMonadic(fn, options) {\n    return assemble(fn, this, monadic, options.cache.create(), options.serializer);\n}\n//\n// Serializer\n//\nvar serializerDefault = function () {\n    return JSON.stringify(arguments);\n};\n//\n// Cache\n//\nfunction ObjectWithoutPrototypeCache() {\n    this.cache = Object.create(null);\n}\nObjectWithoutPrototypeCache.prototype.get = function (key) {\n    return this.cache[key];\n};\nObjectWithoutPrototypeCache.prototype.set = function (key, value) {\n    this.cache[key] = value;\n};\nvar cacheDefault = {\n    create: function create() {\n        // @ts-ignore\n        return new ObjectWithoutPrototypeCache();\n    },\n};\nexport var strategies = {\n    variadic: strategyVariadic,\n    monadic: strategyMonadic,\n};\n","import { __extends } from \"tslib\";\nexport var ErrorCode;\n(function (ErrorCode) {\n    // When we have a placeholder but no value to format\n    ErrorCode[\"MISSING_VALUE\"] = \"MISSING_VALUE\";\n    // When value supplied is invalid\n    ErrorCode[\"INVALID_VALUE\"] = \"INVALID_VALUE\";\n    // When we need specific Intl API but it's not available\n    ErrorCode[\"MISSING_INTL_API\"] = \"MISSING_INTL_API\";\n})(ErrorCode || (ErrorCode = {}));\nvar FormatError = /** @class */ (function (_super) {\n    __extends(FormatError, _super);\n    function FormatError(msg, code, originalMessage) {\n        var _this = _super.call(this, msg) || this;\n        _this.code = code;\n        _this.originalMessage = originalMessage;\n        return _this;\n    }\n    FormatError.prototype.toString = function () {\n        return \"[formatjs Error: \".concat(this.code, \"] \").concat(this.message);\n    };\n    return FormatError;\n}(Error));\nexport { FormatError };\nvar InvalidValueError = /** @class */ (function (_super) {\n    __extends(InvalidValueError, _super);\n    function InvalidValueError(variableId, value, options, originalMessage) {\n        return _super.call(this, \"Invalid values for \\\"\".concat(variableId, \"\\\": \\\"\").concat(value, \"\\\". Options are \\\"\").concat(Object.keys(options).join('\", \"'), \"\\\"\"), ErrorCode.INVALID_VALUE, originalMessage) || this;\n    }\n    return InvalidValueError;\n}(FormatError));\nexport { InvalidValueError };\nvar InvalidValueTypeError = /** @class */ (function (_super) {\n    __extends(InvalidValueTypeError, _super);\n    function InvalidValueTypeError(value, type, originalMessage) {\n        return _super.call(this, \"Value for \\\"\".concat(value, \"\\\" must be of type \").concat(type), ErrorCode.INVALID_VALUE, originalMessage) || this;\n    }\n    return InvalidValueTypeError;\n}(FormatError));\nexport { InvalidValueTypeError };\nvar MissingValueError = /** @class */ (function (_super) {\n    __extends(MissingValueError, _super);\n    function MissingValueError(variableId, originalMessage) {\n        return _super.call(this, \"The intl string context variable \\\"\".concat(variableId, \"\\\" was not provided to the string \\\"\").concat(originalMessage, \"\\\"\"), ErrorCode.MISSING_VALUE, originalMessage) || this;\n    }\n    return MissingValueError;\n}(FormatError));\nexport { MissingValueError };\n","import { isArgumentElement, isDateElement, isDateTimeSkeleton, isLiteralElement, isNumberElement, isNumberSkeleton, isPluralElement, isPoundElement, isSelectElement, isTimeElement, isTagElement, } from '@formatjs/icu-messageformat-parser';\nimport { MissingValueError, InvalidValueError, ErrorCode, FormatError, InvalidValueTypeError, } from './error';\nexport var PART_TYPE;\n(function (PART_TYPE) {\n    PART_TYPE[PART_TYPE[\"literal\"] = 0] = \"literal\";\n    PART_TYPE[PART_TYPE[\"object\"] = 1] = \"object\";\n})(PART_TYPE || (PART_TYPE = {}));\nfunction mergeLiteral(parts) {\n    if (parts.length < 2) {\n        return parts;\n    }\n    return parts.reduce(function (all, part) {\n        var lastPart = all[all.length - 1];\n        if (!lastPart ||\n            lastPart.type !== PART_TYPE.literal ||\n            part.type !== PART_TYPE.literal) {\n            all.push(part);\n        }\n        else {\n            lastPart.value += part.value;\n        }\n        return all;\n    }, []);\n}\nexport function isFormatXMLElementFn(el) {\n    return typeof el === 'function';\n}\n// TODO(skeleton): add skeleton support\nexport function formatToParts(els, locales, formatters, formats, values, currentPluralValue, \n// For debugging\noriginalMessage) {\n    // Hot path for straight simple msg translations\n    if (els.length === 1 && isLiteralElement(els[0])) {\n        return [\n            {\n                type: PART_TYPE.literal,\n                value: els[0].value,\n            },\n        ];\n    }\n    var result = [];\n    for (var _i = 0, els_1 = els; _i < els_1.length; _i++) {\n        var el = els_1[_i];\n        // Exit early for string parts.\n        if (isLiteralElement(el)) {\n            result.push({\n                type: PART_TYPE.literal,\n                value: el.value,\n            });\n            continue;\n        }\n        // TODO: should this part be literal type?\n        // Replace `#` in plural rules with the actual numeric value.\n        if (isPoundElement(el)) {\n            if (typeof currentPluralValue === 'number') {\n                result.push({\n                    type: PART_TYPE.literal,\n                    value: formatters.getNumberFormat(locales).format(currentPluralValue),\n                });\n            }\n            continue;\n        }\n        var varName = el.value;\n        // Enforce that all required values are provided by the caller.\n        if (!(values && varName in values)) {\n            throw new MissingValueError(varName, originalMessage);\n        }\n        var value = values[varName];\n        if (isArgumentElement(el)) {\n            if (!value || typeof value === 'string' || typeof value === 'number') {\n                value =\n                    typeof value === 'string' || typeof value === 'number'\n                        ? String(value)\n                        : '';\n            }\n            result.push({\n                type: typeof value === 'string' ? PART_TYPE.literal : PART_TYPE.object,\n                value: value,\n            });\n            continue;\n        }\n        // Recursively format plural and select parts' option — which can be a\n        // nested pattern structure. The choosing of the option to use is\n        // abstracted-by and delegated-to the part helper object.\n        if (isDateElement(el)) {\n            var style = typeof el.style === 'string'\n                ? formats.date[el.style]\n                : isDateTimeSkeleton(el.style)\n                    ? el.style.parsedOptions\n                    : undefined;\n            result.push({\n                type: PART_TYPE.literal,\n                value: formatters\n                    .getDateTimeFormat(locales, style)\n                    .format(value),\n            });\n            continue;\n        }\n        if (isTimeElement(el)) {\n            var style = typeof el.style === 'string'\n                ? formats.time[el.style]\n                : isDateTimeSkeleton(el.style)\n                    ? el.style.parsedOptions\n                    : formats.time.medium;\n            result.push({\n                type: PART_TYPE.literal,\n                value: formatters\n                    .getDateTimeFormat(locales, style)\n                    .format(value),\n            });\n            continue;\n        }\n        if (isNumberElement(el)) {\n            var style = typeof el.style === 'string'\n                ? formats.number[el.style]\n                : isNumberSkeleton(el.style)\n                    ? el.style.parsedOptions\n                    : undefined;\n            if (style && style.scale) {\n                value =\n                    value *\n                        (style.scale || 1);\n            }\n            result.push({\n                type: PART_TYPE.literal,\n                value: formatters\n                    .getNumberFormat(locales, style)\n                    .format(value),\n            });\n            continue;\n        }\n        if (isTagElement(el)) {\n            var children = el.children, value_1 = el.value;\n            var formatFn = values[value_1];\n            if (!isFormatXMLElementFn(formatFn)) {\n                throw new InvalidValueTypeError(value_1, 'function', originalMessage);\n            }\n            var parts = formatToParts(children, locales, formatters, formats, values, currentPluralValue);\n            var chunks = formatFn(parts.map(function (p) { return p.value; }));\n            if (!Array.isArray(chunks)) {\n                chunks = [chunks];\n            }\n            result.push.apply(result, chunks.map(function (c) {\n                return {\n                    type: typeof c === 'string' ? PART_TYPE.literal : PART_TYPE.object,\n                    value: c,\n                };\n            }));\n        }\n        if (isSelectElement(el)) {\n            var opt = el.options[value] || el.options.other;\n            if (!opt) {\n                throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage);\n            }\n            result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values));\n            continue;\n        }\n        if (isPluralElement(el)) {\n            var opt = el.options[\"=\".concat(value)];\n            if (!opt) {\n                if (!Intl.PluralRules) {\n                    throw new FormatError(\"Intl.PluralRules is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-pluralrules\\\"\\n\", ErrorCode.MISSING_INTL_API, originalMessage);\n                }\n                var rule = formatters\n                    .getPluralRules(locales, { type: el.pluralType })\n                    .select(value - (el.offset || 0));\n                opt = el.options[rule] || el.options.other;\n            }\n            if (!opt) {\n                throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage);\n            }\n            result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values, value - (el.offset || 0)));\n            continue;\n        }\n    }\n    return mergeLiteral(result);\n}\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\nimport { __assign, __rest, __spreadArray } from \"tslib\";\nimport { parse, } from '@formatjs/icu-messageformat-parser';\nimport memoize, { strategies } from '@formatjs/fast-memoize';\nimport { formatToParts, PART_TYPE, } from './formatters';\n// -- MessageFormat --------------------------------------------------------\nfunction mergeConfig(c1, c2) {\n    if (!c2) {\n        return c1;\n    }\n    return __assign(__assign(__assign({}, (c1 || {})), (c2 || {})), Object.keys(c1).reduce(function (all, k) {\n        all[k] = __assign(__assign({}, c1[k]), (c2[k] || {}));\n        return all;\n    }, {}));\n}\nfunction mergeConfigs(defaultConfig, configs) {\n    if (!configs) {\n        return defaultConfig;\n    }\n    return Object.keys(defaultConfig).reduce(function (all, k) {\n        all[k] = mergeConfig(defaultConfig[k], configs[k]);\n        return all;\n    }, __assign({}, defaultConfig));\n}\nfunction createFastMemoizeCache(store) {\n    return {\n        create: function () {\n            return {\n                get: function (key) {\n                    return store[key];\n                },\n                set: function (key, value) {\n                    store[key] = value;\n                },\n            };\n        },\n    };\n}\nfunction createDefaultFormatters(cache) {\n    if (cache === void 0) { cache = {\n        number: {},\n        dateTime: {},\n        pluralRules: {},\n    }; }\n    return {\n        getNumberFormat: memoize(function () {\n            var _a;\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new ((_a = Intl.NumberFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n        }, {\n            cache: createFastMemoizeCache(cache.number),\n            strategy: strategies.variadic,\n        }),\n        getDateTimeFormat: memoize(function () {\n            var _a;\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new ((_a = Intl.DateTimeFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n        }, {\n            cache: createFastMemoizeCache(cache.dateTime),\n            strategy: strategies.variadic,\n        }),\n        getPluralRules: memoize(function () {\n            var _a;\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new ((_a = Intl.PluralRules).bind.apply(_a, __spreadArray([void 0], args, false)))();\n        }, {\n            cache: createFastMemoizeCache(cache.pluralRules),\n            strategy: strategies.variadic,\n        }),\n    };\n}\nvar IntlMessageFormat = /** @class */ (function () {\n    function IntlMessageFormat(message, locales, overrideFormats, opts) {\n        if (locales === void 0) { locales = IntlMessageFormat.defaultLocale; }\n        var _this = this;\n        this.formatterCache = {\n            number: {},\n            dateTime: {},\n            pluralRules: {},\n        };\n        this.format = function (values) {\n            var parts = _this.formatToParts(values);\n            // Hot path for straight simple msg translations\n            if (parts.length === 1) {\n                return parts[0].value;\n            }\n            var result = parts.reduce(function (all, part) {\n                if (!all.length ||\n                    part.type !== PART_TYPE.literal ||\n                    typeof all[all.length - 1] !== 'string') {\n                    all.push(part.value);\n                }\n                else {\n                    all[all.length - 1] += part.value;\n                }\n                return all;\n            }, []);\n            if (result.length <= 1) {\n                return result[0] || '';\n            }\n            return result;\n        };\n        this.formatToParts = function (values) {\n            return formatToParts(_this.ast, _this.locales, _this.formatters, _this.formats, values, undefined, _this.message);\n        };\n        this.resolvedOptions = function () {\n            var _a;\n            return ({\n                locale: ((_a = _this.resolvedLocale) === null || _a === void 0 ? void 0 : _a.toString()) ||\n                    Intl.NumberFormat.supportedLocalesOf(_this.locales)[0],\n            });\n        };\n        this.getAst = function () { return _this.ast; };\n        // Defined first because it's used to build the format pattern.\n        this.locales = locales;\n        this.resolvedLocale = IntlMessageFormat.resolveLocale(locales);\n        if (typeof message === 'string') {\n            this.message = message;\n            if (!IntlMessageFormat.__parse) {\n                throw new TypeError('IntlMessageFormat.__parse must be set to process `message` of type `string`');\n            }\n            var _a = opts || {}, formatters = _a.formatters, parseOpts = __rest(_a, [\"formatters\"]);\n            // Parse string messages into an AST.\n            this.ast = IntlMessageFormat.__parse(message, __assign(__assign({}, parseOpts), { locale: this.resolvedLocale }));\n        }\n        else {\n            this.ast = message;\n        }\n        if (!Array.isArray(this.ast)) {\n            throw new TypeError('A message must be provided as a String or AST.');\n        }\n        // Creates a new object with the specified `formats` merged with the default\n        // formats.\n        this.formats = mergeConfigs(IntlMessageFormat.formats, overrideFormats);\n        this.formatters =\n            (opts && opts.formatters) || createDefaultFormatters(this.formatterCache);\n    }\n    Object.defineProperty(IntlMessageFormat, \"defaultLocale\", {\n        get: function () {\n            if (!IntlMessageFormat.memoizedDefaultLocale) {\n                IntlMessageFormat.memoizedDefaultLocale =\n                    new Intl.NumberFormat().resolvedOptions().locale;\n            }\n            return IntlMessageFormat.memoizedDefaultLocale;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    IntlMessageFormat.memoizedDefaultLocale = null;\n    IntlMessageFormat.resolveLocale = function (locales) {\n        if (typeof Intl.Locale === 'undefined') {\n            return;\n        }\n        var supportedLocales = Intl.NumberFormat.supportedLocalesOf(locales);\n        if (supportedLocales.length > 0) {\n            return new Intl.Locale(supportedLocales[0]);\n        }\n        return new Intl.Locale(typeof locales === 'string' ? locales : locales[0]);\n    };\n    IntlMessageFormat.__parse = parse;\n    // Default format options used as the prototype of the `formats` provided to the\n    // constructor. These are used when constructing the internal Intl.NumberFormat\n    // and Intl.DateTimeFormat instances.\n    IntlMessageFormat.formats = {\n        number: {\n            integer: {\n                maximumFractionDigits: 0,\n            },\n            currency: {\n                style: 'currency',\n            },\n            percent: {\n                style: 'percent',\n            },\n        },\n        date: {\n            short: {\n                month: 'numeric',\n                day: 'numeric',\n                year: '2-digit',\n            },\n            medium: {\n                month: 'short',\n                day: 'numeric',\n                year: 'numeric',\n            },\n            long: {\n                month: 'long',\n                day: 'numeric',\n                year: 'numeric',\n            },\n            full: {\n                weekday: 'long',\n                month: 'long',\n                day: 'numeric',\n                year: 'numeric',\n            },\n        },\n        time: {\n            short: {\n                hour: 'numeric',\n                minute: 'numeric',\n            },\n            medium: {\n                hour: 'numeric',\n                minute: 'numeric',\n                second: 'numeric',\n            },\n            long: {\n                hour: 'numeric',\n                minute: 'numeric',\n                second: 'numeric',\n                timeZoneName: 'short',\n            },\n            full: {\n                hour: 'numeric',\n                minute: 'numeric',\n                second: 'numeric',\n                timeZoneName: 'short',\n            },\n        },\n    };\n    return IntlMessageFormat;\n}());\nexport { IntlMessageFormat };\n","import { __extends } from \"tslib\";\nexport var IntlErrorCode;\n(function (IntlErrorCode) {\n    IntlErrorCode[\"FORMAT_ERROR\"] = \"FORMAT_ERROR\";\n    IntlErrorCode[\"UNSUPPORTED_FORMATTER\"] = \"UNSUPPORTED_FORMATTER\";\n    IntlErrorCode[\"INVALID_CONFIG\"] = \"INVALID_CONFIG\";\n    IntlErrorCode[\"MISSING_DATA\"] = \"MISSING_DATA\";\n    IntlErrorCode[\"MISSING_TRANSLATION\"] = \"MISSING_TRANSLATION\";\n})(IntlErrorCode || (IntlErrorCode = {}));\nvar IntlError = /** @class */ (function (_super) {\n    __extends(IntlError, _super);\n    function IntlError(code, message, exception) {\n        var _this = this;\n        var err = exception\n            ? exception instanceof Error\n                ? exception\n                : new Error(String(exception))\n            : undefined;\n        _this = _super.call(this, \"[@formatjs/intl Error \".concat(code, \"] \").concat(message, \"\\n\").concat(err ? \"\\n\".concat(err.message, \"\\n\").concat(err.stack) : '')) || this;\n        _this.code = code;\n        // @ts-ignore just so we don't need to declare dep on @types/node\n        if (typeof Error.captureStackTrace === 'function') {\n            // @ts-ignore just so we don't need to declare dep on @types/node\n            Error.captureStackTrace(_this, IntlError);\n        }\n        return _this;\n    }\n    return IntlError;\n}(Error));\nexport { IntlError };\nvar UnsupportedFormatterError = /** @class */ (function (_super) {\n    __extends(UnsupportedFormatterError, _super);\n    function UnsupportedFormatterError(message, exception) {\n        return _super.call(this, IntlErrorCode.UNSUPPORTED_FORMATTER, message, exception) || this;\n    }\n    return UnsupportedFormatterError;\n}(IntlError));\nexport { UnsupportedFormatterError };\nvar InvalidConfigError = /** @class */ (function (_super) {\n    __extends(InvalidConfigError, _super);\n    function InvalidConfigError(message, exception) {\n        return _super.call(this, IntlErrorCode.INVALID_CONFIG, message, exception) || this;\n    }\n    return InvalidConfigError;\n}(IntlError));\nexport { InvalidConfigError };\nvar MissingDataError = /** @class */ (function (_super) {\n    __extends(MissingDataError, _super);\n    function MissingDataError(message, exception) {\n        return _super.call(this, IntlErrorCode.MISSING_DATA, message, exception) || this;\n    }\n    return MissingDataError;\n}(IntlError));\nexport { MissingDataError };\nvar IntlFormatError = /** @class */ (function (_super) {\n    __extends(IntlFormatError, _super);\n    function IntlFormatError(message, locale, exception) {\n        return _super.call(this, IntlErrorCode.FORMAT_ERROR, \"\".concat(message, \"\\nLocale: \").concat(locale, \"\\n\"), exception) || this;\n    }\n    return IntlFormatError;\n}(IntlError));\nexport { IntlFormatError };\nvar MessageFormatError = /** @class */ (function (_super) {\n    __extends(MessageFormatError, _super);\n    function MessageFormatError(message, locale, descriptor, exception) {\n        var _this = _super.call(this, \"\".concat(message, \"\\nMessageID: \").concat(descriptor === null || descriptor === void 0 ? void 0 : descriptor.id, \"\\nDefault Message: \").concat(descriptor === null || descriptor === void 0 ? void 0 : descriptor.defaultMessage, \"\\nDescription: \").concat(descriptor === null || descriptor === void 0 ? void 0 : descriptor.description, \"\\n\"), locale, exception) || this;\n        _this.descriptor = descriptor;\n        return _this;\n    }\n    return MessageFormatError;\n}(IntlFormatError));\nexport { MessageFormatError };\nvar MissingTranslationError = /** @class */ (function (_super) {\n    __extends(MissingTranslationError, _super);\n    function MissingTranslationError(descriptor, locale) {\n        var _this = _super.call(this, IntlErrorCode.MISSING_TRANSLATION, \"Missing message: \\\"\".concat(descriptor.id, \"\\\" for locale \\\"\").concat(locale, \"\\\", using \").concat(descriptor.defaultMessage\n            ? \"default message (\".concat(typeof descriptor.defaultMessage === 'string'\n                ? descriptor.defaultMessage\n                : descriptor.defaultMessage\n                    .map(function (e) { var _a; return (_a = e.value) !== null && _a !== void 0 ? _a : JSON.stringify(e); })\n                    .join(), \")\")\n            : 'id', \" as fallback.\")) || this;\n        _this.descriptor = descriptor;\n        return _this;\n    }\n    return MissingTranslationError;\n}(IntlError));\nexport { MissingTranslationError };\n","import { __assign, __spreadArray } from \"tslib\";\nimport { IntlMessageFormat } from 'intl-messageformat';\nimport memoize, { strategies } from '@formatjs/fast-memoize';\nimport { UnsupportedFormatterError } from './error';\nexport function filterProps(props, allowlist, defaults) {\n    if (defaults === void 0) { defaults = {}; }\n    return allowlist.reduce(function (filtered, name) {\n        if (name in props) {\n            filtered[name] = props[name];\n        }\n        else if (name in defaults) {\n            filtered[name] = defaults[name];\n        }\n        return filtered;\n    }, {});\n}\nvar defaultErrorHandler = function (error) {\n    // @ts-ignore just so we don't need to declare dep on @types/node\n    if (process.env.NODE_ENV !== 'production') {\n        console.error(error);\n    }\n};\nvar defaultWarnHandler = function (warning) {\n    // @ts-ignore just so we don't need to declare dep on @types/node\n    if (process.env.NODE_ENV !== 'production') {\n        console.warn(warning);\n    }\n};\nexport var DEFAULT_INTL_CONFIG = {\n    formats: {},\n    messages: {},\n    timeZone: undefined,\n    defaultLocale: 'en',\n    defaultFormats: {},\n    fallbackOnEmptyString: true,\n    onError: defaultErrorHandler,\n    onWarn: defaultWarnHandler,\n};\nexport function createIntlCache() {\n    return {\n        dateTime: {},\n        number: {},\n        message: {},\n        relativeTime: {},\n        pluralRules: {},\n        list: {},\n        displayNames: {},\n    };\n}\nfunction createFastMemoizeCache(store) {\n    return {\n        create: function () {\n            return {\n                get: function (key) {\n                    return store[key];\n                },\n                set: function (key, value) {\n                    store[key] = value;\n                },\n            };\n        },\n    };\n}\n/**\n * Create intl formatters and populate cache\n * @param cache explicit cache to prevent leaking memory\n */\nexport function createFormatters(cache) {\n    if (cache === void 0) { cache = createIntlCache(); }\n    var RelativeTimeFormat = Intl.RelativeTimeFormat;\n    var ListFormat = Intl.ListFormat;\n    var DisplayNames = Intl.DisplayNames;\n    var getDateTimeFormat = memoize(function () {\n        var _a;\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return new ((_a = Intl.DateTimeFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n    }, {\n        cache: createFastMemoizeCache(cache.dateTime),\n        strategy: strategies.variadic,\n    });\n    var getNumberFormat = memoize(function () {\n        var _a;\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return new ((_a = Intl.NumberFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n    }, {\n        cache: createFastMemoizeCache(cache.number),\n        strategy: strategies.variadic,\n    });\n    var getPluralRules = memoize(function () {\n        var _a;\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return new ((_a = Intl.PluralRules).bind.apply(_a, __spreadArray([void 0], args, false)))();\n    }, {\n        cache: createFastMemoizeCache(cache.pluralRules),\n        strategy: strategies.variadic,\n    });\n    return {\n        getDateTimeFormat: getDateTimeFormat,\n        getNumberFormat: getNumberFormat,\n        getMessageFormat: memoize(function (message, locales, overrideFormats, opts) {\n            return new IntlMessageFormat(message, locales, overrideFormats, __assign({ formatters: {\n                    getNumberFormat: getNumberFormat,\n                    getDateTimeFormat: getDateTimeFormat,\n                    getPluralRules: getPluralRules,\n                } }, (opts || {})));\n        }, {\n            cache: createFastMemoizeCache(cache.message),\n            strategy: strategies.variadic,\n        }),\n        getRelativeTimeFormat: memoize(function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new (RelativeTimeFormat.bind.apply(RelativeTimeFormat, __spreadArray([void 0], args, false)))();\n        }, {\n            cache: createFastMemoizeCache(cache.relativeTime),\n            strategy: strategies.variadic,\n        }),\n        getPluralRules: getPluralRules,\n        getListFormat: memoize(function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new (ListFormat.bind.apply(ListFormat, __spreadArray([void 0], args, false)))();\n        }, {\n            cache: createFastMemoizeCache(cache.list),\n            strategy: strategies.variadic,\n        }),\n        getDisplayNames: memoize(function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new (DisplayNames.bind.apply(DisplayNames, __spreadArray([void 0], args, false)))();\n        }, {\n            cache: createFastMemoizeCache(cache.displayNames),\n            strategy: strategies.variadic,\n        }),\n    };\n}\nexport function getNamedFormat(formats, type, name, onError) {\n    var formatType = formats && formats[type];\n    var format;\n    if (formatType) {\n        format = formatType[name];\n    }\n    if (format) {\n        return format;\n    }\n    onError(new UnsupportedFormatterError(\"No \".concat(type, \" format named: \").concat(name)));\n}\n","import { getNamedFormat, filterProps } from './utils';\nimport { IntlError, IntlErrorCode } from './error';\nvar NUMBER_FORMAT_OPTIONS = [\n    'style',\n    'currency',\n    'currencyDisplay',\n    'unit',\n    'unitDisplay',\n    'useGrouping',\n    'minimumIntegerDigits',\n    'minimumFractionDigits',\n    'maximumFractionDigits',\n    'minimumSignificantDigits',\n    'maximumSignificantDigits',\n    // ES2020 NumberFormat\n    'compactDisplay',\n    'currencyDisplay',\n    'currencySign',\n    'notation',\n    'signDisplay',\n    'unit',\n    'unitDisplay',\n    'numberingSystem',\n];\nexport function getFormatter(_a, getNumberFormat, options) {\n    var locale = _a.locale, formats = _a.formats, onError = _a.onError;\n    if (options === void 0) { options = {}; }\n    var format = options.format;\n    var defaults = ((format &&\n        getNamedFormat(formats, 'number', format, onError)) ||\n        {});\n    var filteredOptions = filterProps(options, NUMBER_FORMAT_OPTIONS, defaults);\n    return getNumberFormat(locale, filteredOptions);\n}\nexport function formatNumber(config, getNumberFormat, value, options) {\n    if (options === void 0) { options = {}; }\n    try {\n        return getFormatter(config, getNumberFormat, options).format(value);\n    }\n    catch (e) {\n        config.onError(new IntlError(IntlErrorCode.FORMAT_ERROR, 'Error formatting number.', e));\n    }\n    return String(value);\n}\nexport function formatNumberToParts(config, getNumberFormat, value, options) {\n    if (options === void 0) { options = {}; }\n    try {\n        return getFormatter(config, getNumberFormat, options).formatToParts(value);\n    }\n    catch (e) {\n        config.onError(new IntlError(IntlErrorCode.FORMAT_ERROR, 'Error formatting number.', e));\n    }\n    return [];\n}\n","import { getNamedFormat, filterProps } from './utils';\nimport { FormatError, ErrorCode } from 'intl-messageformat';\nimport { IntlFormatError } from './error';\nvar RELATIVE_TIME_FORMAT_OPTIONS = ['numeric', 'style'];\nfunction getFormatter(_a, getRelativeTimeFormat, options) {\n    var locale = _a.locale, formats = _a.formats, onError = _a.onError;\n    if (options === void 0) { options = {}; }\n    var format = options.format;\n    var defaults = (!!format && getNamedFormat(formats, 'relative', format, onError)) || {};\n    var filteredOptions = filterProps(options, RELATIVE_TIME_FORMAT_OPTIONS, defaults);\n    return getRelativeTimeFormat(locale, filteredOptions);\n}\nexport function formatRelativeTime(config, getRelativeTimeFormat, value, unit, options) {\n    if (options === void 0) { options = {}; }\n    if (!unit) {\n        unit = 'second';\n    }\n    var RelativeTimeFormat = Intl.RelativeTimeFormat;\n    if (!RelativeTimeFormat) {\n        config.onError(new FormatError(\"Intl.RelativeTimeFormat is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-relativetimeformat\\\"\\n\", ErrorCode.MISSING_INTL_API));\n    }\n    try {\n        return getFormatter(config, getRelativeTimeFormat, options).format(value, unit);\n    }\n    catch (e) {\n        config.onError(new IntlFormatError('Error formatting relative time.', config.locale, e));\n    }\n    return String(value);\n}\n","import { __assign } from \"tslib\";\nimport { filterProps, getNamedFormat } from './utils';\nimport { IntlError, IntlErrorCode } from './error';\nvar DATE_TIME_FORMAT_OPTIONS = [\n    'formatMatcher',\n    'timeZone',\n    'hour12',\n    'weekday',\n    'era',\n    'year',\n    'month',\n    'day',\n    'hour',\n    'minute',\n    'second',\n    'timeZoneName',\n    'hourCycle',\n    'dateStyle',\n    'timeStyle',\n    'calendar',\n    // 'dayPeriod',\n    'numberingSystem',\n    'fractionalSecondDigits',\n];\nexport function getFormatter(_a, type, getDateTimeFormat, options) {\n    var locale = _a.locale, formats = _a.formats, onError = _a.onError, timeZone = _a.timeZone;\n    if (options === void 0) { options = {}; }\n    var format = options.format;\n    var defaults = __assign(__assign({}, (timeZone && { timeZone: timeZone })), (format && getNamedFormat(formats, type, format, onError)));\n    var filteredOptions = filterProps(options, DATE_TIME_FORMAT_OPTIONS, defaults);\n    if (type === 'time' &&\n        !filteredOptions.hour &&\n        !filteredOptions.minute &&\n        !filteredOptions.second &&\n        !filteredOptions.timeStyle &&\n        !filteredOptions.dateStyle) {\n        // Add default formatting options if hour, minute, or second isn't defined.\n        filteredOptions = __assign(__assign({}, filteredOptions), { hour: 'numeric', minute: 'numeric' });\n    }\n    return getDateTimeFormat(locale, filteredOptions);\n}\nexport function formatDate(config, getDateTimeFormat) {\n    var _a = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n        _a[_i - 2] = arguments[_i];\n    }\n    var value = _a[0], _b = _a[1], options = _b === void 0 ? {} : _b;\n    var date = typeof value === 'string' ? new Date(value || 0) : value;\n    try {\n        return getFormatter(config, 'date', getDateTimeFormat, options).format(date);\n    }\n    catch (e) {\n        config.onError(new IntlError(IntlErrorCode.FORMAT_ERROR, 'Error formatting date.', e));\n    }\n    return String(date);\n}\nexport function formatTime(config, getDateTimeFormat) {\n    var _a = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n        _a[_i - 2] = arguments[_i];\n    }\n    var value = _a[0], _b = _a[1], options = _b === void 0 ? {} : _b;\n    var date = typeof value === 'string' ? new Date(value || 0) : value;\n    try {\n        return getFormatter(config, 'time', getDateTimeFormat, options).format(date);\n    }\n    catch (e) {\n        config.onError(new IntlError(IntlErrorCode.FORMAT_ERROR, 'Error formatting time.', e));\n    }\n    return String(date);\n}\nexport function formatDateTimeRange(config, getDateTimeFormat) {\n    var _a = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n        _a[_i - 2] = arguments[_i];\n    }\n    var from = _a[0], to = _a[1], _b = _a[2], options = _b === void 0 ? {} : _b;\n    var timeZone = config.timeZone, locale = config.locale, onError = config.onError;\n    var filteredOptions = filterProps(options, DATE_TIME_FORMAT_OPTIONS, timeZone ? { timeZone: timeZone } : {});\n    try {\n        return getDateTimeFormat(locale, filteredOptions).formatRange(from, to);\n    }\n    catch (e) {\n        onError(new IntlError(IntlErrorCode.FORMAT_ERROR, 'Error formatting date time range.', e));\n    }\n    return String(from);\n}\nexport function formatDateToParts(config, getDateTimeFormat) {\n    var _a = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n        _a[_i - 2] = arguments[_i];\n    }\n    var value = _a[0], _b = _a[1], options = _b === void 0 ? {} : _b;\n    var date = typeof value === 'string' ? new Date(value || 0) : value;\n    try {\n        return getFormatter(config, 'date', getDateTimeFormat, options).formatToParts(date); // TODO: remove this when https://github.com/microsoft/TypeScript/pull/50402 is merged\n    }\n    catch (e) {\n        config.onError(new IntlError(IntlErrorCode.FORMAT_ERROR, 'Error formatting date.', e));\n    }\n    return [];\n}\nexport function formatTimeToParts(config, getDateTimeFormat) {\n    var _a = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n        _a[_i - 2] = arguments[_i];\n    }\n    var value = _a[0], _b = _a[1], options = _b === void 0 ? {} : _b;\n    var date = typeof value === 'string' ? new Date(value || 0) : value;\n    try {\n        return getFormatter(config, 'time', getDateTimeFormat, options).formatToParts(date); // TODO: remove this when https://github.com/microsoft/TypeScript/pull/50402 is merged\n    }\n    catch (e) {\n        config.onError(new IntlError(IntlErrorCode.FORMAT_ERROR, 'Error formatting time.', e));\n    }\n    return [];\n}\n","import { filterProps } from './utils';\nimport { IntlFormatError } from './error';\nimport { ErrorCode, FormatError } from 'intl-messageformat';\nvar PLURAL_FORMAT_OPTIONS = ['type'];\nexport function formatPlural(_a, getPluralRules, value, options) {\n    var locale = _a.locale, onError = _a.onError;\n    if (options === void 0) { options = {}; }\n    if (!Intl.PluralRules) {\n        onError(new FormatError(\"Intl.PluralRules is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-pluralrules\\\"\\n\", ErrorCode.MISSING_INTL_API));\n    }\n    var filteredOptions = filterProps(options, PLURAL_FORMAT_OPTIONS);\n    try {\n        return getPluralRules(locale, filteredOptions).select(value);\n    }\n    catch (e) {\n        onError(new IntlFormatError('Error formatting plural.', locale, e));\n    }\n    return 'other';\n}\n","import { __assign } from \"tslib\";\nimport { invariant } from '@formatjs/ecma402-abstract';\nimport { IntlMessageFormat, } from 'intl-messageformat';\nimport { MissingTranslationError, MessageFormatError } from './error';\nimport { TYPE } from '@formatjs/icu-messageformat-parser';\nfunction setTimeZoneInOptions(opts, timeZone) {\n    return Object.keys(opts).reduce(function (all, k) {\n        all[k] = __assign({ timeZone: timeZone }, opts[k]);\n        return all;\n    }, {});\n}\nfunction deepMergeOptions(opts1, opts2) {\n    var keys = Object.keys(__assign(__assign({}, opts1), opts2));\n    return keys.reduce(function (all, k) {\n        all[k] = __assign(__assign({}, (opts1[k] || {})), (opts2[k] || {}));\n        return all;\n    }, {});\n}\nfunction deepMergeFormatsAndSetTimeZone(f1, timeZone) {\n    if (!timeZone) {\n        return f1;\n    }\n    var mfFormats = IntlMessageFormat.formats;\n    return __assign(__assign(__assign({}, mfFormats), f1), { date: deepMergeOptions(setTimeZoneInOptions(mfFormats.date, timeZone), setTimeZoneInOptions(f1.date || {}, timeZone)), time: deepMergeOptions(setTimeZoneInOptions(mfFormats.time, timeZone), setTimeZoneInOptions(f1.time || {}, timeZone)) });\n}\nexport var formatMessage = function (_a, state, messageDescriptor, values, opts) {\n    var locale = _a.locale, formats = _a.formats, messages = _a.messages, defaultLocale = _a.defaultLocale, defaultFormats = _a.defaultFormats, fallbackOnEmptyString = _a.fallbackOnEmptyString, onError = _a.onError, timeZone = _a.timeZone, defaultRichTextElements = _a.defaultRichTextElements;\n    if (messageDescriptor === void 0) { messageDescriptor = { id: '' }; }\n    var msgId = messageDescriptor.id, defaultMessage = messageDescriptor.defaultMessage;\n    // `id` is a required field of a Message Descriptor.\n    invariant(!!msgId, \"[@formatjs/intl] An `id` must be provided to format a message. You can either:\\n1. Configure your build toolchain with [babel-plugin-formatjs](https://formatjs.io/docs/tooling/babel-plugin)\\nor [@formatjs/ts-transformer](https://formatjs.io/docs/tooling/ts-transformer) OR\\n2. Configure your `eslint` config to include [eslint-plugin-formatjs](https://formatjs.io/docs/tooling/linter#enforce-id)\\nto autofix this issue\");\n    var id = String(msgId);\n    var message = \n    // In case messages is Object.create(null)\n    // e.g import('foo.json') from webpack)\n    // See https://github.com/formatjs/formatjs/issues/1914\n    messages &&\n        Object.prototype.hasOwnProperty.call(messages, id) &&\n        messages[id];\n    // IMPORTANT: Hot path if `message` is AST with a single literal node\n    if (Array.isArray(message) &&\n        message.length === 1 &&\n        message[0].type === TYPE.literal) {\n        return message[0].value;\n    }\n    // IMPORTANT: Hot path straight lookup for performance\n    if (!values &&\n        message &&\n        typeof message === 'string' &&\n        !defaultRichTextElements) {\n        return message.replace(/'\\{(.*?)\\}'/gi, \"{$1}\");\n    }\n    values = __assign(__assign({}, defaultRichTextElements), (values || {}));\n    formats = deepMergeFormatsAndSetTimeZone(formats, timeZone);\n    defaultFormats = deepMergeFormatsAndSetTimeZone(defaultFormats, timeZone);\n    if (!message) {\n        if (fallbackOnEmptyString === false && message === '') {\n            return message;\n        }\n        if (!defaultMessage ||\n            (locale && locale.toLowerCase() !== defaultLocale.toLowerCase())) {\n            // This prevents warnings from littering the console in development\n            // when no `messages` are passed into the <IntlProvider> for the\n            // default locale.\n            onError(new MissingTranslationError(messageDescriptor, locale));\n        }\n        if (defaultMessage) {\n            try {\n                var formatter = state.getMessageFormat(defaultMessage, defaultLocale, defaultFormats, opts);\n                return formatter.format(values);\n            }\n            catch (e) {\n                onError(new MessageFormatError(\"Error formatting default message for: \\\"\".concat(id, \"\\\", rendering default message verbatim\"), locale, messageDescriptor, e));\n                return typeof defaultMessage === 'string' ? defaultMessage : id;\n            }\n        }\n        return id;\n    }\n    // We have the translated message\n    try {\n        var formatter = state.getMessageFormat(message, locale, formats, __assign({ formatters: state }, (opts || {})));\n        return formatter.format(values);\n    }\n    catch (e) {\n        onError(new MessageFormatError(\"Error formatting message: \\\"\".concat(id, \"\\\", using \").concat(defaultMessage ? 'default message' : 'id', \" as fallback.\"), locale, messageDescriptor, e));\n    }\n    if (defaultMessage) {\n        try {\n            var formatter = state.getMessageFormat(defaultMessage, defaultLocale, defaultFormats, opts);\n            return formatter.format(values);\n        }\n        catch (e) {\n            onError(new MessageFormatError(\"Error formatting the default message for: \\\"\".concat(id, \"\\\", rendering message verbatim\"), locale, messageDescriptor, e));\n        }\n    }\n    if (typeof message === 'string') {\n        return message;\n    }\n    if (typeof defaultMessage === 'string') {\n        return defaultMessage;\n    }\n    return id;\n};\n","/**\n * Cannot do Math.log(x) / Math.log(10) bc if IEEE floating point issue\n * @param x number\n */\nexport function getMagnitude(x) {\n    // Cannot count string length via Number.toString because it may use scientific notation\n    // for very small or very large numbers.\n    return Math.floor(Math.log(x) * Math.LOG10E);\n}\nexport function repeat(s, times) {\n    if (typeof s.repeat === 'function') {\n        return s.repeat(times);\n    }\n    var arr = new Array(times);\n    for (var i = 0; i < arr.length; i++) {\n        arr[i] = s;\n    }\n    return arr.join('');\n}\nexport function setInternalSlot(map, pl, field, value) {\n    if (!map.get(pl)) {\n        map.set(pl, Object.create(null));\n    }\n    var slots = map.get(pl);\n    slots[field] = value;\n}\nexport function setMultiInternalSlots(map, pl, props) {\n    for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\n        var k = _a[_i];\n        setInternalSlot(map, pl, k, props[k]);\n    }\n}\nexport function getInternalSlot(map, pl, field) {\n    return getMultiInternalSlots(map, pl, field)[field];\n}\nexport function getMultiInternalSlots(map, pl) {\n    var fields = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n        fields[_i - 2] = arguments[_i];\n    }\n    var slots = map.get(pl);\n    if (!slots) {\n        throw new TypeError(\"\".concat(pl, \" InternalSlot has not been initialized\"));\n    }\n    return fields.reduce(function (all, f) {\n        all[f] = slots[f];\n        return all;\n    }, Object.create(null));\n}\nexport function isLiteralPart(patternPart) {\n    return patternPart.type === 'literal';\n}\n/*\n  17 ECMAScript Standard Built-in Objects:\n    Every built-in Function object, including constructors, that is not\n    identified as an anonymous function has a name property whose value\n    is a String.\n\n    Unless otherwise specified, the name property of a built-in Function\n    object, if it exists, has the attributes { [[Writable]]: false,\n    [[Enumerable]]: false, [[Configurable]]: true }.\n*/\nexport function defineProperty(target, name, _a) {\n    var value = _a.value;\n    Object.defineProperty(target, name, {\n        configurable: true,\n        enumerable: false,\n        writable: true,\n        value: value,\n    });\n}\nexport var UNICODE_EXTENSION_SEQUENCE_REGEX = /-u(?:-[0-9a-z]{2,8})+/gi;\nexport function invariant(condition, message, Err) {\n    if (Err === void 0) { Err = Error; }\n    if (!condition) {\n        throw new Err(message);\n    }\n}\n","import { __assign } from \"tslib\";\nimport { filterProps } from './utils';\nimport { FormatError, ErrorCode } from 'intl-messageformat';\nimport { IntlError, IntlErrorCode } from './error';\nvar LIST_FORMAT_OPTIONS = [\n    'type',\n    'style',\n];\nvar now = Date.now();\nfunction generateToken(i) {\n    return \"\".concat(now, \"_\").concat(i, \"_\").concat(now);\n}\nexport function formatList(opts, getListFormat, values, options) {\n    if (options === void 0) { options = {}; }\n    var results = formatListToParts(opts, getListFormat, values, options).reduce(function (all, el) {\n        var val = el.value;\n        if (typeof val !== 'string') {\n            all.push(val);\n        }\n        else if (typeof all[all.length - 1] === 'string') {\n            all[all.length - 1] += val;\n        }\n        else {\n            all.push(val);\n        }\n        return all;\n    }, []);\n    return results.length === 1 ? results[0] : results.length === 0 ? '' : results;\n}\nexport function formatListToParts(_a, getListFormat, values, options) {\n    var locale = _a.locale, onError = _a.onError;\n    if (options === void 0) { options = {}; }\n    var ListFormat = Intl.ListFormat;\n    if (!ListFormat) {\n        onError(new FormatError(\"Intl.ListFormat is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-listformat\\\"\\n\", ErrorCode.MISSING_INTL_API));\n    }\n    var filteredOptions = filterProps(options, LIST_FORMAT_OPTIONS);\n    try {\n        var richValues_1 = {};\n        var serializedValues = values.map(function (v, i) {\n            if (typeof v === 'object') {\n                var id = generateToken(i);\n                richValues_1[id] = v;\n                return id;\n            }\n            return String(v);\n        });\n        return getListFormat(locale, filteredOptions)\n            .formatToParts(serializedValues)\n            .map(function (part) {\n            return part.type === 'literal'\n                ? part\n                : __assign(__assign({}, part), { value: richValues_1[part.value] || part.value });\n        });\n    }\n    catch (e) {\n        onError(new IntlError(IntlErrorCode.FORMAT_ERROR, 'Error formatting list.', e));\n    }\n    // @ts-ignore\n    return values;\n}\n","import { filterProps } from './utils';\nimport { FormatError, ErrorCode } from 'intl-messageformat';\nimport { IntlErrorCode, IntlError } from './error';\nvar DISPLAY_NAMES_OPTONS = [\n    'style',\n    'type',\n    'fallback',\n    'languageDisplay',\n];\nexport function formatDisplayName(_a, getDisplayNames, value, options) {\n    var locale = _a.locale, onError = _a.onError;\n    var DisplayNames = Intl.DisplayNames;\n    if (!DisplayNames) {\n        onError(new FormatError(\"Intl.DisplayNames is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-displaynames\\\"\\n\", ErrorCode.MISSING_INTL_API));\n    }\n    var filteredOptions = filterProps(options, DISPLAY_NAMES_OPTONS);\n    try {\n        return getDisplayNames(locale, filteredOptions).of(value);\n    }\n    catch (e) {\n        onError(new IntlError(IntlErrorCode.FORMAT_ERROR, 'Error formatting display name.', e));\n    }\n}\n","import { __assign } from \"tslib\";\nimport { createFormatters, DEFAULT_INTL_CONFIG } from './utils';\nimport { InvalidConfigError, MissingDataError } from './error';\nimport { formatNumber, formatNumberToParts } from './number';\nimport { formatRelativeTime } from './relativeTime';\nimport { formatDate, formatDateToParts, formatTime, formatTimeToParts, formatDateTimeRange, } from './dateTime';\nimport { formatPlural } from './plural';\nimport { formatMessage } from './message';\nimport { formatList, formatListToParts } from './list';\nimport { formatDisplayName } from './displayName';\nfunction messagesContainString(messages) {\n    var firstMessage = messages ? messages[Object.keys(messages)[0]] : undefined;\n    return typeof firstMessage === 'string';\n}\nfunction verifyConfigMessages(config) {\n    if (config.onWarn &&\n        config.defaultRichTextElements &&\n        messagesContainString(config.messages || {})) {\n        config.onWarn(\"[@formatjs/intl] \\\"defaultRichTextElements\\\" was specified but \\\"message\\\" was not pre-compiled. \\nPlease consider using \\\"@formatjs/cli\\\" to pre-compile your messages for performance.\\nFor more details see https://formatjs.io/docs/getting-started/message-distribution\");\n    }\n}\n/**\n * Create intl object\n * @param config intl config\n * @param cache cache for formatter instances to prevent memory leak\n */\nexport function createIntl(config, cache) {\n    var formatters = createFormatters(cache);\n    var resolvedConfig = __assign(__assign({}, DEFAULT_INTL_CONFIG), config);\n    var locale = resolvedConfig.locale, defaultLocale = resolvedConfig.defaultLocale, onError = resolvedConfig.onError;\n    if (!locale) {\n        if (onError) {\n            onError(new InvalidConfigError(\"\\\"locale\\\" was not configured, using \\\"\".concat(defaultLocale, \"\\\" as fallback. See https://formatjs.io/docs/react-intl/api#intlshape for more details\")));\n        }\n        // Since there's no registered locale data for `locale`, this will\n        // fallback to the `defaultLocale` to make sure things can render.\n        // The `messages` are overridden to the `defaultProps` empty object\n        // to maintain referential equality across re-renders. It's assumed\n        // each <FormattedMessage> contains a `defaultMessage` prop.\n        resolvedConfig.locale = resolvedConfig.defaultLocale || 'en';\n    }\n    else if (!Intl.NumberFormat.supportedLocalesOf(locale).length && onError) {\n        onError(new MissingDataError(\"Missing locale data for locale: \\\"\".concat(locale, \"\\\" in Intl.NumberFormat. Using default locale: \\\"\").concat(defaultLocale, \"\\\" as fallback. See https://formatjs.io/docs/react-intl#runtime-requirements for more details\")));\n    }\n    else if (!Intl.DateTimeFormat.supportedLocalesOf(locale).length &&\n        onError) {\n        onError(new MissingDataError(\"Missing locale data for locale: \\\"\".concat(locale, \"\\\" in Intl.DateTimeFormat. Using default locale: \\\"\").concat(defaultLocale, \"\\\" as fallback. See https://formatjs.io/docs/react-intl#runtime-requirements for more details\")));\n    }\n    verifyConfigMessages(resolvedConfig);\n    return __assign(__assign({}, resolvedConfig), { formatters: formatters, formatNumber: formatNumber.bind(null, resolvedConfig, formatters.getNumberFormat), formatNumberToParts: formatNumberToParts.bind(null, resolvedConfig, formatters.getNumberFormat), formatRelativeTime: formatRelativeTime.bind(null, resolvedConfig, formatters.getRelativeTimeFormat), formatDate: formatDate.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatDateToParts: formatDateToParts.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatTime: formatTime.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatDateTimeRange: formatDateTimeRange.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatTimeToParts: formatTimeToParts.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatPlural: formatPlural.bind(null, resolvedConfig, formatters.getPluralRules), \n        // @ts-expect-error TODO: will get to this later\n        formatMessage: formatMessage.bind(null, resolvedConfig, formatters), \n        // @ts-expect-error TODO: will get to this later\n        $t: formatMessage.bind(null, resolvedConfig, formatters), formatList: formatList.bind(null, resolvedConfig, formatters.getListFormat), formatListToParts: formatListToParts.bind(null, resolvedConfig, formatters.getListFormat), formatDisplayName: formatDisplayName.bind(null, resolvedConfig, formatters.getDisplayNames) });\n}\n",null,null,null,null,null,null,null,null,"'use strict';\nconst strictUriEncode = require('strict-uri-encode');\nconst decodeComponent = require('decode-uri-component');\nconst splitOnFirst = require('split-on-first');\nconst filterObject = require('filter-obj');\n\nconst isNullOrUndefined = value => value === null || value === undefined;\n\nconst encodeFragmentIdentifier = Symbol('encodeFragmentIdentifier');\n\nfunction encoderForArrayFormat(options) {\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tconst index = result.length;\n\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[', index, ']'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '[', encode(index, options), ']=', encode(value, options)].join('')\n\t\t\t\t];\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[]'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), '[]=', encode(value, options)].join('')];\n\t\t\t};\n\n\t\tcase 'colon-list-separator':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), ':list='].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), ':list=', encode(value, options)].join('')];\n\t\t\t};\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\tcase 'bracket-separator': {\n\t\t\tconst keyValueSep = options.arrayFormat === 'bracket-separator' ?\n\t\t\t\t'[]=' :\n\t\t\t\t'=';\n\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\t// Translate null to an empty string so that it doesn't serialize as 'null'\n\t\t\t\tvalue = value === null ? '' : value;\n\n\t\t\t\tif (result.length === 0) {\n\t\t\t\t\treturn [[encode(key, options), keyValueSep, encode(value, options)].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [[result, encode(value, options)].join(options.arrayFormatSeparator)];\n\t\t\t};\n\t\t}\n\n\t\tdefault:\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, encode(key, options)];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), '=', encode(value, options)].join('')];\n\t\t\t};\n\t}\n}\n\nfunction parserForArrayFormat(options) {\n\tlet result;\n\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /\\[(\\d*)\\]$/.exec(key);\n\n\t\t\t\tkey = key.replace(/\\[\\d*\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = {};\n\t\t\t\t}\n\n\t\t\t\taccumulator[key][result[1]] = value;\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(\\[\\])$/.exec(key);\n\t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\n\t\tcase 'colon-list-separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(:list)$/.exec(key);\n\t\t\t\tkey = key.replace(/:list$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = typeof value === 'string' && value.includes(options.arrayFormatSeparator);\n\t\t\t\tconst isEncodedArray = (typeof value === 'string' && !isArray && decode(value, options).includes(options.arrayFormatSeparator));\n\t\t\t\tvalue = isEncodedArray ? decode(value, options) : value;\n\t\t\t\tconst newValue = isArray || isEncodedArray ? value.split(options.arrayFormatSeparator).map(item => decode(item, options)) : value === null ? value : decode(value, options);\n\t\t\t\taccumulator[key] = newValue;\n\t\t\t};\n\n\t\tcase 'bracket-separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = /(\\[\\])$/.test(key);\n\t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n\t\t\t\tif (!isArray) {\n\t\t\t\t\taccumulator[key] = value ? decode(value, options) : value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst arrayValue = value === null ?\n\t\t\t\t\t[] :\n\t\t\t\t\tvalue.split(options.arrayFormatSeparator).map(item => decode(item, options));\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = arrayValue;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], arrayValue);\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\t}\n}\n\nfunction validateArrayFormatSeparator(value) {\n\tif (typeof value !== 'string' || value.length !== 1) {\n\t\tthrow new TypeError('arrayFormatSeparator must be single character string');\n\t}\n}\n\nfunction encode(value, options) {\n\tif (options.encode) {\n\t\treturn options.strict ? strictUriEncode(value) : encodeURIComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction decode(value, options) {\n\tif (options.decode) {\n\t\treturn decodeComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction keysSorter(input) {\n\tif (Array.isArray(input)) {\n\t\treturn input.sort();\n\t}\n\n\tif (typeof input === 'object') {\n\t\treturn keysSorter(Object.keys(input))\n\t\t\t.sort((a, b) => Number(a) - Number(b))\n\t\t\t.map(key => input[key]);\n\t}\n\n\treturn input;\n}\n\nfunction removeHash(input) {\n\tconst hashStart = input.indexOf('#');\n\tif (hashStart !== -1) {\n\t\tinput = input.slice(0, hashStart);\n\t}\n\n\treturn input;\n}\n\nfunction getHash(url) {\n\tlet hash = '';\n\tconst hashStart = url.indexOf('#');\n\tif (hashStart !== -1) {\n\t\thash = url.slice(hashStart);\n\t}\n\n\treturn hash;\n}\n\nfunction extract(input) {\n\tinput = removeHash(input);\n\tconst queryStart = input.indexOf('?');\n\tif (queryStart === -1) {\n\t\treturn '';\n\t}\n\n\treturn input.slice(queryStart + 1);\n}\n\nfunction parseValue(value, options) {\n\tif (options.parseNumbers && !Number.isNaN(Number(value)) && (typeof value === 'string' && value.trim() !== '')) {\n\t\tvalue = Number(value);\n\t} else if (options.parseBooleans && value !== null && (value.toLowerCase() === 'true' || value.toLowerCase() === 'false')) {\n\t\tvalue = value.toLowerCase() === 'true';\n\t}\n\n\treturn value;\n}\n\nfunction parse(query, options) {\n\toptions = Object.assign({\n\t\tdecode: true,\n\t\tsort: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ',',\n\t\tparseNumbers: false,\n\t\tparseBooleans: false\n\t}, options);\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst formatter = parserForArrayFormat(options);\n\n\t// Create an object with no prototype\n\tconst ret = Object.create(null);\n\n\tif (typeof query !== 'string') {\n\t\treturn ret;\n\t}\n\n\tquery = query.trim().replace(/^[?#&]/, '');\n\n\tif (!query) {\n\t\treturn ret;\n\t}\n\n\tfor (const param of query.split('&')) {\n\t\tif (param === '') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet [key, value] = splitOnFirst(options.decode ? param.replace(/\\+/g, ' ') : param, '=');\n\n\t\t// Missing `=` should be `null`:\n\t\t// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n\t\tvalue = value === undefined ? null : ['comma', 'separator', 'bracket-separator'].includes(options.arrayFormat) ? value : decode(value, options);\n\t\tformatter(decode(key, options), value, ret);\n\t}\n\n\tfor (const key of Object.keys(ret)) {\n\t\tconst value = ret[key];\n\t\tif (typeof value === 'object' && value !== null) {\n\t\t\tfor (const k of Object.keys(value)) {\n\t\t\t\tvalue[k] = parseValue(value[k], options);\n\t\t\t}\n\t\t} else {\n\t\t\tret[key] = parseValue(value, options);\n\t\t}\n\t}\n\n\tif (options.sort === false) {\n\t\treturn ret;\n\t}\n\n\treturn (options.sort === true ? Object.keys(ret).sort() : Object.keys(ret).sort(options.sort)).reduce((result, key) => {\n\t\tconst value = ret[key];\n\t\tif (Boolean(value) && typeof value === 'object' && !Array.isArray(value)) {\n\t\t\t// Sort object keys, not values\n\t\t\tresult[key] = keysSorter(value);\n\t\t} else {\n\t\t\tresult[key] = value;\n\t\t}\n\n\t\treturn result;\n\t}, Object.create(null));\n}\n\nexports.extract = extract;\nexports.parse = parse;\n\nexports.stringify = (object, options) => {\n\tif (!object) {\n\t\treturn '';\n\t}\n\n\toptions = Object.assign({\n\t\tencode: true,\n\t\tstrict: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ','\n\t}, options);\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst shouldFilter = key => (\n\t\t(options.skipNull && isNullOrUndefined(object[key])) ||\n\t\t(options.skipEmptyString && object[key] === '')\n\t);\n\n\tconst formatter = encoderForArrayFormat(options);\n\n\tconst objectCopy = {};\n\n\tfor (const key of Object.keys(object)) {\n\t\tif (!shouldFilter(key)) {\n\t\t\tobjectCopy[key] = object[key];\n\t\t}\n\t}\n\n\tconst keys = Object.keys(objectCopy);\n\n\tif (options.sort !== false) {\n\t\tkeys.sort(options.sort);\n\t}\n\n\treturn keys.map(key => {\n\t\tconst value = object[key];\n\n\t\tif (value === undefined) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (value === null) {\n\t\t\treturn encode(key, options);\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\tif (value.length === 0 && options.arrayFormat === 'bracket-separator') {\n\t\t\t\treturn encode(key, options) + '[]';\n\t\t\t}\n\n\t\t\treturn value\n\t\t\t\t.reduce(formatter(key), [])\n\t\t\t\t.join('&');\n\t\t}\n\n\t\treturn encode(key, options) + '=' + encode(value, options);\n\t}).filter(x => x.length > 0).join('&');\n};\n\nexports.parseUrl = (url, options) => {\n\toptions = Object.assign({\n\t\tdecode: true\n\t}, options);\n\n\tconst [url_, hash] = splitOnFirst(url, '#');\n\n\treturn Object.assign(\n\t\t{\n\t\t\turl: url_.split('?')[0] || '',\n\t\t\tquery: parse(extract(url), options)\n\t\t},\n\t\toptions && options.parseFragmentIdentifier && hash ? {fragmentIdentifier: decode(hash, options)} : {}\n\t);\n};\n\nexports.stringifyUrl = (object, options) => {\n\toptions = Object.assign({\n\t\tencode: true,\n\t\tstrict: true,\n\t\t[encodeFragmentIdentifier]: true\n\t}, options);\n\n\tconst url = removeHash(object.url).split('?')[0] || '';\n\tconst queryFromUrl = exports.extract(object.url);\n\tconst parsedQueryFromUrl = exports.parse(queryFromUrl, {sort: false});\n\n\tconst query = Object.assign(parsedQueryFromUrl, object.query);\n\tlet queryString = exports.stringify(query, options);\n\tif (queryString) {\n\t\tqueryString = `?${queryString}`;\n\t}\n\n\tlet hash = getHash(object.url);\n\tif (object.fragmentIdentifier) {\n\t\thash = `#${options[encodeFragmentIdentifier] ? encode(object.fragmentIdentifier, options) : object.fragmentIdentifier}`;\n\t}\n\n\treturn `${url}${queryString}${hash}`;\n};\n\nexports.pick = (input, filter, options) => {\n\toptions = Object.assign({\n\t\tparseFragmentIdentifier: true,\n\t\t[encodeFragmentIdentifier]: false\n\t}, options);\n\n\tconst {url, query, fragmentIdentifier} = exports.parseUrl(input, options);\n\treturn exports.stringifyUrl({\n\t\turl,\n\t\tquery: filterObject(query, filter),\n\t\tfragmentIdentifier\n\t}, options);\n};\n\nexports.exclude = (input, filter, options) => {\n\tconst exclusionFilter = Array.isArray(filter) ? key => !filter.includes(key) : (key, value) => !filter(key, value);\n\n\treturn exports.pick(input, exclusionFilter, options);\n};\n","/*************************************************************************\n*\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2017 Adobe Systems Incorporated\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe Systems Incorporated and its suppliers,\n* if any. The intellectual and technical concepts contained\n* herein are proprietary to Adobe Systems Incorporated and its\n* suppliers and are protected by trade secret or copyright law.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe Systems Incorporated.\n**************************************************************************/\n\n/*global module, require, console, window */\n\n/**\n    Utility functions\n**/\n\nfunction generateGUID() {\n    var s4 = function () {\n        return Math.floor((1 + Math.random()) * 0x10000)\n            .toString(16)\n            .substring(1);\n    };\n    return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();\n}\n\nfunction truncateEventQueue(queue, maxLength) {\n    var truncatedQueue = queue;\n    if (queue && queue.length > maxLength && maxLength > 0) {\n        var startIndex = queue.length - maxLength;\n        truncatedQueue = queue.slice(startIndex, queue.length);\n    }\n    return truncatedQueue;\n}\n\nfunction pad(n, length) {\n    var str = n.toString();\n    if (str.length < length) {\n        var padding = [];\n        padding.length = length - str.length + 1;\n        str = padding.join('0') + str;\n    }\n    return str;\n}\n\nfunction extend(dest, from) {\n    var props = Object.getOwnPropertyNames(from);\n\n    props.forEach(function (name) {\n        if (typeof from[name] === 'object') {\n            if (typeof dest[name] !== 'object') {\n                dest[name] = {};\n            }\n            extend(dest[name], from[name]);\n        } else {\n            var destination = Object.getOwnPropertyDescriptor(from, name);\n            Object.defineProperty(dest, name, destination);\n        }\n    });\n\n    return dest;\n}\n\nfunction notifyCallbacks(callbacks, err, numSentEvents) {\n    callbacks.forEach(function (callback) {\n        // Call each callback in a timeout, so if there's an exception in one callback it doesn't affect any others\n        setTimeout(function () {\n            callback(err, numSentEvents);\n        });\n    });\n}\n\n\n/**\n\t\tConstants\n**/\n\nvar LOG_PREFIX = 'Ingest :: ';\nvar ANALYTICS_HOST = {\n    prod:   'cc-api-data.adobe.io',\n    stage:  'cc-api-data-stage.adobe.io',\n    dev:    'cc-api-data-dev.adobe.io'\n};\nvar INGEST_PATH = '/ingest';\nvar RETRY_RANDOM_SECONDS = 10;\n\n// Settable options, with their default values\nvar DEFAULT_OPTIONS = {\n    ENVIRONMENT: 'prod',\n    ALLOW_NO_TOKEN: false,\n    ANALYTICS_INGEST_TYPE: 'dunamis',\n    ANALYTICS_MAX_QUEUED_EVENTS: 50,\n    ANALYTICS_DEBOUNCE: 10000,\n    ANALYTICS_API_KEY: null,\n    ANALYTICS_X_PRODUCT: null,\n    ANALYTICS_X_PRODUCT_LOCATION: undefined,\n    ANALYTICS_PROJECT: null,\n    ANALYTICS_USER_REGION: 'UNKNOWN',\n    TIMESTAMP_PROPERTY_NAME: 'event.dts_end'\n};\nvar REQUIRED_OPTIONS = [\n    'ANALYTICS_API_KEY',\n    'ANALYTICS_X_PRODUCT',\n    'ANALYTICS_PROJECT',\n];\n\n\n/**\n\t\tIngest Class\n**/\n\n// Constructor\nfunction Ingest(dependencies, options) {\n    dependencies = dependencies || {};\n    options = options || {};\n\n    var throwError = message => {\n        this._log(message);\n        throw new Error('ERROR: ' + message);\n    };\n\n    // Internal state\n    this._queuedEvents = [];\n    this._queuedCallbacks = [];\n    this._lastSendTime = 0;\n    this._isEnabled = false; // Sending analytics is disabled by default\n\n    // Configure dependencies\n    this._dependencies = extend({}, dependencies);\n    if (!dependencies.getAccessToken || typeof dependencies.getAccessToken !== 'function') {\n        throwError('Missing dependency: getAccessToken');\n    }\n\n    // Configure options\n    this._options = {};\n    Object.keys(DEFAULT_OPTIONS).forEach(key => {\n        this._options[key] = options[key] || DEFAULT_OPTIONS[key];\n    });\n\n    // Make sure required options have been passed in\n    REQUIRED_OPTIONS.forEach(option => {\n        if (!this._options[option]) {\n            throwError('Missing option: ' + option);\n        }\n    });\n\n    // Make sure we have fetch\n    if (typeof fetch === 'undefined') {\n        throwError(`Ingest requires fetch - if in a node environment, set 'global.fetch = require('node-fetch');'`);\n    }\n}\n\nIngest.prototype._log = function (message) {\n    var doLog = this._dependencies.log;\n    if (doLog) {\n        doLog(LOG_PREFIX + message);\n    }\n};\n\nIngest.prototype._getAgent = function (url, callback) {\n    if (this._dependencies.getAgent) {\n        this._dependencies.getAgent(url, callback);\n        return;\n    }\n    callback(null, {});\n};\n\nIngest.prototype._getAccessToken = function (callback) {\n    this._dependencies.getAccessToken(callback);\n};\n\nIngest.prototype._clearAccessToken = function () {\n    if (this._dependencies.clearAccessToken) {\n        this._dependencies.clearAccessToken();\n    }\n};\n\nIngest.prototype._getEnvironment = function () {\n    return ANALYTICS_HOST[this._options.ENVIRONMENT] ? this._options.ENVIRONMENT : 'prod';\n};\n\nIngest.prototype._getAnalyticsHost = function () {\n    return ANALYTICS_HOST[this._getEnvironment()];\n};\n\nIngest.prototype._formatTimestamp = function (date) {\n    // Corresponds to moment format string 'YYYY-MM-DDTHH:mm:ss.SSSZZ'\n    var YYYY = date.getFullYear();\n    var MM = pad(date.getMonth() + 1, 2); // Month is 0-11\n    var DD = pad(date.getDate(), 2);\n    var HH = pad(date.getHours(), 2);\n    var mm = pad(date.getMinutes(), 2);\n    var ss = pad(date.getSeconds(), 2);\n    var SSS = pad(date.getMilliseconds(), 3);\n\n    var offset = date.getTimezoneOffset();\n    var sign = offset < 0 ? '+' : '-'; // Sign is inverted\n    var hours = Math.floor(Math.abs(offset) / 60);\n    var mins = Math.abs(offset) % 60;\n    var ZZ = sign + pad(hours, 2) + pad(mins, 2);\n\n    return YYYY + '-' + MM + '-' + DD + 'T' + HH + ':' + mm + ':' + ss + '.' + SSS + ZZ;\n};\n\nIngest.prototype._updateDebounce = function (headers) {\n    var retryAfterHeader = headers && (headers['retry-after'] || headers['Retry-After']);\n    var retryAfter = 0;\n\n    if (retryAfterHeader) {\n        var retryTime;\n        try {\n            // First, try to parse it as a number (retry time in seconds)\n            retryTime = parseInt(retryAfterHeader, 10);\n        } catch (ignore) {\n            // ignore\n        }\n\n        if (retryTime) {\n            retryAfter = Math.max(0, retryTime);\n        } else {\n            // If that fails, try to parse it as a date\n            var retryDate = Date.parse(retryAfterHeader);\n            if (retryDate) {\n                // Need to add a randomised element to ensure requests don't all come back at the same time\n                var now = new Date().valueOf();\n                var retrySeconds = Math.max(0, retryDate - now) / 1000;\n                var retryRandom = Math.floor(Math.random() * RETRY_RANDOM_SECONDS);\n                retryAfter = retrySeconds + retryRandom;\n            }\n        }\n    }\n\n    this._options.ANALYTICS_DEBOUNCE = Math.max(retryAfter * 1000, this._options.ANALYTICS_DEBOUNCE);\n};\n\nIngest.prototype._queueEvent = function (event) {\n    if (this._queuedEvents.length >= this._options.ANALYTICS_MAX_QUEUED_EVENTS) {\n        this._queuedEvents.shift();\n    }\n    this._queuedEvents.push(event);\n};\n\nIngest.prototype._requeueEvents = function (failedEvents) {\n    // If we failed sending events, add them back to the beginning of the queue - but make sure it doesn't go over the maximum length\n    this._queuedEvents = failedEvents.concat(this._queuedEvents);\n    this._queuedEvents = truncateEventQueue(this._queuedEvents, this._options.ANALYTICS_MAX_QUEUED_EVENTS);\n};\n\nIngest.prototype._sendAnalytics = function (sendImmediately, callback, retryAttemps) {\n    retryAttemps = retryAttemps || 0;\n\n    if (callback) {\n        this._queuedCallbacks.push(callback);\n    }\n\n    if (!this._isEnabled || this._queuedEvents.length === 0) {\n        var callbacks = this._queuedCallbacks;\n        this._queuedCallbacks = [];\n        if (!this._isEnabled) {\n            notifyCallbacks(callbacks, new Error('Analytics Disabled'));\n        } else {\n            notifyCallbacks(callbacks, null, 0);\n        }\n        return;\n    }\n    var debounce = this._options.ANALYTICS_DEBOUNCE;\n\n    if (sendImmediately) {\n        // Clear any timeout, and set the debounce to zero, to force an immediate send\n        debounce = 0;\n        clearTimeout(this._pendingSendAnalyticsTimeout);\n        this._pendingSendAnalyticsTimeout = undefined;\n    }\n\n    if (this._sendingEvents || this._pendingSendAnalyticsTimeout) {\n        this._log('Queued ' + this._queuedEvents.length + ' events to be sent.');\n        // We're in the middle of sending analytics already\n        // This will automatically kick off another send afterwards, so no need to do anything\n        return;\n    }\n\n    var currentTime = new Date().valueOf();\n    if (currentTime - this._lastSendTime < debounce) {\n        // Throttle analytics, so we don't send too often - this allows us to batch up analytics\n        this._pendingSendAnalyticsTimeout = setTimeout(() => {\n            this._pendingSendAnalyticsTimeout = undefined;\n            this._sendAnalytics();\n        }, debounce);\n        return;\n    }\n\n    this._lastSendTime = currentTime;\n    // The queued events are now going to be sent\n    this._sendingEvents = this._queuedEvents;\n    this._sendingCallbacks = this._queuedCallbacks;\n    this._queuedEvents = [];\n    this._queuedCallbacks = [];\n\n    var requestId = generateGUID();\n    var logPrefix = '[' + requestId + '] ';\n    var ingestData = {\n        events: this._sendingEvents\n    };\n\n    // This gets called when finished, whether we got a response or failed with an error\n    var onFinished = err => {\n        var numNewEvents = this._queuedEvents ? this._queuedEvents.length : 0;\n        if (this._sendingEvents) {\n            var numSentEvents = this._sendingEvents.length;\n            if (err) {\n                this._requeueEvents(this._sendingEvents);\n                this._log(logPrefix + 'Error sending ' + numSentEvents + ' events: ' + err);\n            } else {\n                this._log(logPrefix + 'Success sending ' + numSentEvents + ' events: ' + JSON.stringify(this._sendingEvents));\n            }\n            delete this._sendingEvents;\n\n            var sendingCallbacks = this._sendingCallbacks;\n            delete this._sendingCallbacks;\n            if (err) {\n                notifyCallbacks(sendingCallbacks, err);\n            } else {\n                notifyCallbacks(sendingCallbacks, null, numSentEvents);\n            }\n        }\n\n        // If there were any new events while sending the last batch, trigger another send.\n        // Note: This doesn't auto-trigger a retry if we failed, and there were no new events.\n        if (numNewEvents > 0) {\n            this._sendAnalytics();\n        }\n    };\n\n    // This gets called when we get an actual response from the server\n    var handleResponse = (statusCode, headers) => {\n        this._updateDebounce(headers);\n\n        if (statusCode === 401 && retryAttemps === 0) {\n            this._clearAccessToken();\n\n            this._requeueEvents(this._sendingEvents);\n            delete this._sendingEvents;\n\n            this._queuedCallbacks = this._sendingCallbacks.concat(this._queuedCallbacks);\n            delete this._sendingCallbacks;\n\n            // Retry one more time\n            this._log(logPrefix + 'Access token is expired. Retry one more time.');\n            this._sendAnalytics(true, undefined, retryAttemps + 1);\n            return;\n        }\n        if (statusCode !== 200) {\n            onFinished(new Error('Unexpected Response: ' + statusCode));\n            return;\n        }\n        onFinished();\n    };\n\n    this._getAccessToken((err, token) => {\n        if (err && !this._options.ALLOW_NO_TOKEN) {\n            onFinished(err);\n            return;\n        }\n        if ((!token || token.length === 0) && !this._options.ALLOW_NO_TOKEN) {\n            onFinished(new Error('No access token'));\n            return;\n        }\n\n        var urlBase = 'https://' + this._getAnalyticsHost();\n        this._log(logPrefix + 'Sending analytics to ' + urlBase + INGEST_PATH);\n\n        const headers = {\n            'x-api-key': this._options.ANALYTICS_API_KEY,\n            'X-Product': this._options.ANALYTICS_X_PRODUCT,\n            'User-Agent': this._options.ANALYTICS_USER_AGENT || this._options.ANALYTICS_API_KEY,\n            'X-Request-Id': requestId,\n            'Content-Type': 'application/json'\n        };\n        if (token) {\n            headers.Authorization = 'Bearer ' + token;\n        }\n        if (this._options.ANALYTICS_X_PRODUCT_LOCATION) {\n            headers['X-Product-Location'] = this._options.ANALYTICS_X_PRODUCT_LOCATION;\n        }\n\n        this._getAgent(urlBase, (err, proxyOptions) => {\n            const options = {\n                method: 'POST',\n                headers,\n                body: JSON.stringify(ingestData)\n            };\n\n            if (proxyOptions && proxyOptions.agent) {\n                options.agent = proxyOptions && proxyOptions.agent;\n            } else {\n                extend(options, proxyOptions || {});\n            }\n\n            fetch(urlBase + INGEST_PATH, options).then(response => {\n                handleResponse(response.status, response.headers);\n            }, onFinished);\n        });\n    });\n};\n\n\n/**\n\t\tPublic APIs\n**/\n\n/**\n * Configure whether analytics is enabled or not. Note: By default, analytics are disabled, so you need to\n * explicitly call `ingest.enable(true)` to enable sending analytics.\n *\n * When sending analytics is disabled, events are still queued up, so they can be sent when it's reenabled.\n *\n * @param {Boolean} isEnabled Whether to enable or disable sending analytics.\n *\n * @memberof Ingest\n */\nIngest.prototype.enable = function (isEnabled) {\n    this._isEnabled = isEnabled;\n    if (isEnabled) {\n        // If we enable analytics, trigger flushing any queued events\n        this._sendAnalytics(true);\n    }\n};\n\n/**\n * Post an analytics event to ingest.\n *\n * @param {Object} payload Ingest payload to be sent\n * @param {Function} [callback] If supplied, called when the event has been posted (or failed)\n *\n * @memberof Ingest\n */\nIngest.prototype.postEvent = function (payload, callback, options) {\n    var overrideOptions = options || {};\n    var dtsStart = 'event.dts_start';\n    var collDts = 'event.coll_dts';\n    var dtsEnd = overrideOptions.TIMESTAMP_PROPERTY_NAME || this._options.TIMESTAMP_PROPERTY_NAME;\n    var ingestProject = overrideOptions.ANALYTICS_PROJECT ||  this._options.ANALYTICS_PROJECT;\n    var ingestType = overrideOptions.ANALYTICS_INGEST_TYPE ||  this._options.ANALYTICS_INGEST_TYPE;\n\n    if (payload[collDts] && payload[collDts] instanceof Date) {\n        payload[collDts] = this._formatTimestamp(payload[collDts]);\n    }\n    if (payload[dtsStart] && payload[dtsStart] instanceof Date) {\n        payload[dtsStart] = this._formatTimestamp(payload[dtsStart]);\n    }\n    // Set to current time, if it's not supplied\n    if (!payload[dtsEnd]) {\n        payload[dtsEnd] = this._formatTimestamp(new Date());\n    }\n    if (payload[dtsEnd] instanceof Date) {\n        payload[dtsEnd] = this._formatTimestamp(payload[dtsEnd]);\n    }\n    var event = {\n        time: payload[dtsEnd],\n        project: ingestProject,\n        environment: this._getEnvironment(),\n        ingesttype: ingestType,\n        data: payload\n    };\n\n    /**\n\t * Payload's 'simulate' property triggers the option to not\n\t * actually post the event but dump all relevant data to a log\n\t */\n    if (!payload.simulate) {\n        this._queueEvent(event);\n        this._sendAnalytics(false, callback);\n    } else {\n        this._log('event sim:' + JSON.stringify(event));\n        if (callback) {\n            notifyCallbacks([ callback ], null, 0);\n        }\n    }\n};\n\n/**\n * Flush the analytics (trigger sending any queued analytics to the server)\n *\n * @param {Boolean} immediate Flush event immediately or not\n * @param {Function} [callback] If supplied, called when the flush has finished (or failed)\n *\n * @memberof Ingest\n */\nIngest.prototype.flush = function (sendImmediately, callback) {\n    this._sendAnalytics(sendImmediately, callback);\n};\n\nmodule.exports = Ingest;\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\nimport type { ActionButton as ActionButtonType } from '@ccx-public/spectrum-web-component-fallbacks/dist/action-button';\nimport type {\n    Button as ButtonType,\n    ButtonVariants,\n} from '@ccx-public/spectrum-web-component-fallbacks/dist/button';\nimport type { SyntheticEvent } from 'react';\nimport React, { forwardRef } from 'react';\nimport type { ReactProps, SpectrumElementProps } from './utils';\nimport { filterBooleanProps } from './utils';\nimport createWrapper from './utils/createWrapper';\nimport { SWCLoader } from './utils/SWCLoader';\nimport interopRequireDefault from './utils/interopRequireDefault';\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\nconst RS2Button: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-var-requires\n      interopRequireDefault(require('react-spectrum/Button')).default\n    : undefined;\n\nconst fetchButton = async () => {\n    const { Button } = await import(\n        /* webpackChunkName: \"SpButton\" */\n        '@ccx-public/spectrum-web-component-fallbacks/dist/button'\n    );\n    return [Button];\n};\n\nconst fetchActionButton = async () => {\n    const { ActionButton } = await import(\n        /* webpackChunkName: \"SpActionButton\" */\n        '@ccx-public/spectrum-web-component-fallbacks/dist/action-button'\n    );\n    return [ActionButton];\n};\n\nconst fetchButtonUxp = async () => {\n    /* webpackChunkName: \"SpButtonUxp\" */\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n    const { Button } = await import('@swc-uxp-wrappers/button');\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n    return [Button];\n};\n\nconst fetchActionButtonUxp = async () => {\n    // webpackChunkName: \"SpActionButtonUxp\"\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n    const { ActionButton } = await import('@swc-uxp-wrappers/action-button');\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n    return [ActionButton];\n};\n\nlet swcActionButtonLoader;\nlet swcButtonLoader;\n\nif (!process.env.EXCLUDE_SWC) {\n    if (process.env.INCLUDE_SWC_UXP) {\n        swcButtonLoader = new SWCLoader(['sp-button'], fetchButtonUxp);\n        swcActionButtonLoader = new SWCLoader(\n            ['sp-action-button'],\n            fetchActionButtonUxp\n        );\n    } else {\n        swcButtonLoader = new SWCLoader(['sp-button'], fetchButton);\n        swcActionButtonLoader = new SWCLoader(\n            ['sp-action-button'],\n            fetchActionButton\n        );\n    }\n}\n\ntype RS2ButtonCompatProps = {\n    // RS2: autoFocus, SWC: autofocus\n    autoFocus?: boolean;\n    // RS2-only prop that Dropdown looks for in its children.\n    dropdownTrigger?: boolean;\n    // RS2-only prop to switch the html element\n    element?: string;\n    // RS2: holdAffordance, SWC: hold-affordance. React seems to handle this\n    holdAffordance?: boolean;\n    // SWC will automatically slot content into an anchor tag if passed\n    href?: string;\n    // RS2 icon prop will get transformed into an icon slot for SWC.\n    icon?: JSX.Element;\n    // RS2-only to be used for variants 'and' and 'or'\n    logic?: boolean;\n    /**\n     * RS2: onClick, SWC: onclick. React seems to handle this\n     * automatically, but we need this here for typescript.\n     */\n    onClick?: (event: SyntheticEvent) => unknown;\n    // Fixing a typescript incompatibility. No runtime fixes needed.\n    role?: string;\n    /**\n     * Selected is relevant for:\n     *  - SWC sp-action-button\n     *  - RS2 with variant=\"action\"\n     * It is _not_ relevant for SWC sp-button\n     */\n    selected?: ActionButtonType['selected'];\n    variant?: ButtonVariants | 'warning' | 'action' | 'tool' | 'and' | 'or';\n    value?: string;\n    // RS2-UXP-only prop\n    uxpUseNative?: boolean;\n};\n\ntype ButtonProps = ReactProps<ButtonType, RS2ButtonCompatProps>;\n\nfunction getButtonIcon(icon?: ButtonProps['icon']): React.ReactNode {\n    if (!icon) {\n        return;\n    }\n\n    return React.cloneElement(icon, {\n        key:\n            icon.key ||\n            // eslint-disable-next-line @typescript-eslint/restrict-template-expressions, @typescript-eslint/no-unsafe-member-access\n            `key-${icon.type?.render?.displayName || icon.type?.displayName}`,\n        slot: 'icon',\n    });\n}\n\nfunction spButtonVariantProps(\n    variant?: ButtonProps['variant'],\n    treatment?: ButtonProps['treatment']\n): Partial<SpectrumElementProps<ButtonType>> {\n    switch (variant) {\n        case 'cta':\n            return {\n                variant: 'accent',\n                treatment: treatment || 'fill',\n            };\n        case 'primary':\n        case 'secondary':\n            return {\n                variant,\n                treatment: treatment || 'outline',\n            };\n        case 'warning':\n            return {\n                variant: 'negative',\n                treatment: treatment || 'outline',\n            };\n        case 'overBackground':\n            return {\n                variant: 'white',\n                treatment: treatment || 'outline',\n            };\n        case 'action':\n        case 'tool':\n        case 'and':\n        case 'or':\n            return {};\n        case undefined:\n            return {\n                variant: 'primary',\n                treatment: 'outline',\n            };\n        default:\n            return { variant };\n    }\n}\n\nconst NormalButton = createWrapper<ButtonType, RS2ButtonCompatProps>({\n    displayName: 'Button',\n    fallback: RS2Button,\n    swcLoader: swcButtonLoader,\n    swcProps: (props) => {\n        const buttonIcon = getButtonIcon(props.icon);\n        const {\n            autoFocus,\n            className,\n            children,\n            disabled,\n            holdAffordance,\n            quiet,\n            variant,\n            /* eslint-disable @typescript-eslint/no-unused-vars */\n            // RS2-only props\n            dropdownTrigger,\n            icon,\n            label,\n            uxpUseNative,\n            // SWC-only props\n            treatment,\n            // Non-relevant props\n            selected,\n            /* eslint-enable @typescript-eslint/no-unused-vars */\n            ...rest\n        } = props;\n        const booleanProps = filterBooleanProps({\n            autofocus: autoFocus,\n            disabled,\n            'hold-affordance': holdAffordance,\n            quiet,\n        });\n        const variantProps = spButtonVariantProps(variant, treatment);\n        const labelContents =\n            label || (typeof children === 'string' ? children : null);\n\n        return {\n            ...rest,\n            ...booleanProps,\n            ...variantProps,\n            children: [\n                buttonIcon,\n                labelContents,\n                typeof children !== 'string' && children,\n            ],\n            class: className,\n        };\n    },\n    tagName: 'sp-button',\n});\n\nfunction spActionButtonVariantProps(\n    variant: ButtonProps['variant']\n): Partial<SpectrumElementProps<ActionButtonType>> {\n    if (variant === 'tool') {\n        return { quiet: true };\n    }\n\n    return {};\n}\n\nconst ActionButton = createWrapper<ActionButtonType, RS2ButtonCompatProps>({\n    displayName: 'ActionButton',\n    fallback: RS2Button,\n    swcLoader: swcActionButtonLoader,\n    swcProps: (props) => {\n        const {\n            autoFocus,\n            children,\n            className,\n            disabled,\n            holdAffordance,\n            quiet,\n            selected,\n            variant,\n            /* eslint-disable @typescript-eslint/no-unused-vars */\n            // RS2-only props\n            dropdownTrigger,\n            icon,\n            label,\n            uxpUseNative,\n            /* eslint-enable @typescript-eslint/no-unused-vars */\n            ...rest\n        } = props;\n        const buttonIcon = getButtonIcon(icon);\n        const variantProps = spActionButtonVariantProps(variant);\n        const booleanProps = filterBooleanProps({\n            autofocus: autoFocus,\n            disabled,\n            'hold-affordance': holdAffordance,\n            quiet,\n            selected,\n        });\n        const labelContents =\n            label || (typeof children === 'string' ? children : null);\n\n        return {\n            ...rest,\n            ...booleanProps,\n            ...variantProps,\n            children: [\n                buttonIcon,\n                labelContents,\n                typeof children !== 'string' && children,\n            ],\n            class: className,\n        };\n    },\n    tagName: 'sp-action-button',\n});\n\nexport default forwardRef(function Button(props: ButtonProps, ref) {\n    if (\n        props.variant === 'action' ||\n        props.variant === 'tool' ||\n        props.variant === 'and' ||\n        props.variant === 'or' ||\n        (props.variant === 'secondary' && props.quiet) ||\n        (props.variant === 'primary' && props.quiet)\n    ) {\n        return <ActionButton {...props} ref={ref} />;\n    }\n\n    return <NormalButton {...props} ref={ref} />;\n});\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n// https://opensource.adobe.com/spectrum-web-components/components/divider/\n// https://git.corp.adobe.com/torq/react-spectrum/tree/develop/src/Rule\nimport type { Divider as DividerType } from '@ccx-public/spectrum-web-component-fallbacks/dist/divider';\nimport type { ElementSize } from '@ccx-public/spectrum-web-component-fallbacks/dist/base';\nimport { SWCLoader } from './utils/SWCLoader';\nimport createWrapper from './utils/createWrapper';\nimport interopRequireDefault from './utils/interopRequireDefault';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Rule: React.ComponentType<unknown> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Rule')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\nif (!process.env.EXCLUDE_SWC) {\n    swcLoader = new SWCLoader(['sp-divider'], async () => {\n        const { Divider } = await import(\n            /* webpackChunkName: \"SpDivider\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/divider'\n        );\n        return [Divider];\n    });\n}\n\ntype RS2CompatProps = { variant?: 'small' | 'medium' | 'large' };\n\nconst SIZE_MAP: Record<string, ElementSize> = {\n    small: 's',\n    medium: 'm',\n    large: 'l',\n};\n\nexport default createWrapper<DividerType, RS2CompatProps>({\n    displayName: 'Rule',\n    fallback: RS2Rule,\n    swcLoader,\n    swcProps: (props) => {\n        const { className, variant = 'large', ...rest } = props;\n        // ReactSpectrum2           | SpectrumWebComponent\n        // ---------------------------------------------\n        // variant:small,           |  size: s,m,l\n        // medium,large(default)    |\n        // vertical not supported   | vertical supported\n\n        const size = SIZE_MAP[variant];\n        return {\n            ...rest,\n            class: className,\n            size,\n        };\n    },\n    tagName: 'sp-divider',\n});\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\nimport React, { useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport type { ReactProps } from './utils';\nimport { filterBooleanProps, useComponent } from './utils';\n\n// https://opensource.adobe.com/spectrum-web-components/components/popover/\n// https://git.corp.adobe.com/torq/react-spectrum/tree/develop/src/Popover\nimport type { Popover as PopoverType } from '@ccx-public/spectrum-web-component-fallbacks/dist/popover';\nimport Rule from './Rule';\nimport { SWCLoader } from './utils/SWCLoader';\nimport createWrapper from './utils/createWrapper';\nimport interopRequireDefault from './utils/interopRequireDefault';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\nconst RS2Popover: React.ComponentType<\n    ReactProps<PopoverType, BaseOptions & RS2CompatProps>\n> = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Popover')).default\n    : undefined;\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access */\n\nlet swcLoader;\nif (!process.env.EXCLUDE_SWC) {\n    swcLoader = new SWCLoader(['sp-popover'], async () => {\n        const { Popover } = await import(\n            /* webpackChunkName: \"SpPopover\" */\n            '@ccx-public/spectrum-web-component-fallbacks/dist/popover'\n        );\n        return [Popover];\n    });\n}\n\ntype RS2CompatProps = {\n    contentStyle?: object;\n    isDialog?: boolean;\n    open?: boolean;\n    role?: string;\n    title?: string;\n    trapFocus?: boolean;\n    variant?: string;\n};\nconst Heading = ({ text }: { text: string }): JSX.Element => {\n    const headingStyle = {\n        fontSize: 'var(--spectrum-global-dimension-static-font-size-300)',\n        fontWeight: 'var(--spectrum-global-font-weight-bold)',\n        color: 'var(--spectrum-alias-heading-text-color)',\n        paddingBottom: 'var( --spectrum-global-dimension-size-175)',\n    };\n    return <span style={headingStyle}>{text}</span>;\n};\n\ntype BaseOptions = {\n    enablePortaling?: boolean;\n    contentStyle?: object;\n};\n\nexport default createWrapper<PopoverType, BaseOptions & RS2CompatProps>({\n    displayName: 'Popover',\n    fallback: RS2Popover,\n    swcLoader,\n    SWCWrapper: function (props) {\n        const {\n            children,\n            className,\n            contentStyle,\n            enablePortaling = false,\n            open,\n            placement,\n            title,\n            /* eslint-disable @typescript-eslint/no-unused-vars */\n            // RS2-UXP-only props\n            trapFocus,\n            isDialog,\n            role,\n            /* eslint-enable @typescript-eslint/no-unused-vars */\n            ...rest\n        } = props;\n\n        // ReactSpectrum2           | SpectrumWebComponent\n        // ---------------------------------------------\n        // title                    | title: present in child\n        // placement                 | placement with tip & dialog true\n\n        const popoverContentStyle = {\n            color: 'var(--spectrum-alias-text-color)',\n            fontSize: 'var(--spectrum-global-dimension-static-font-size-100)',\n            fontWeight: 'var(--spectrum-global-font-weight-regular)',\n            ...contentStyle,\n        };\n        const popoverDividerStyle = {\n            marginBottom: 'var( --spectrum-global-dimension-size-175)',\n        };\n        const childrenArr = [];\n\n        if (title && title != '') {\n            childrenArr.push(\n                <Heading key=\"heading\" text={title} />,\n                <Rule key=\"rule\" style={popoverDividerStyle} variant=\"medium\" />\n            );\n        }\n\n        childrenArr.push(\n            <div key=\"popover-children\" style={popoverContentStyle}>\n                {children}\n            </div>\n        );\n\n        const childrenWrapperRef = useRef<HTMLDivElement>(null);\n        const [, forceUpdate] = useState(false);\n\n        useEffect(() => {\n            if (enablePortaling) {\n                forceUpdate(true);\n            }\n        }, [enablePortaling]);\n\n        const popoverContents = enablePortaling ? (\n            <div ref={childrenWrapperRef}></div>\n        ) : (\n            childrenArr\n        );\n\n        const Popover = useComponent('sp-popover');\n\n        return (\n            <>\n                <Popover\n                    {...rest}\n                    {...filterBooleanProps({\n                        open: open,\n                        tip: !!placement,\n                    })}\n                    class={className}\n                    dialog\n                    placement={placement}\n                >\n                    {popoverContents}\n                </Popover>\n                {enablePortaling &&\n                    childrenWrapperRef.current &&\n                    createPortal(childrenArr, childrenWrapperRef.current)}\n            </>\n        );\n    },\n    tagName: 'sp-popover',\n});\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\nimport type { ForwardedRef, MutableRefObject } from 'react';\nimport React, { forwardRef, useEffect, useRef } from 'react';\n\n// https://opensource.adobe.com/spectrum-web-components/components/menu/\n// https://git.corp.adobe.com/torq/react-spectrum/tree/develop/src/Menu\nimport type {\n    MenuDivider as MenuDividerType,\n    MenuGroup as MenuGroupType,\n    MenuItem as MenuItemType,\n    Menu as MenuType,\n} from '@ccx-public/spectrum-web-component-fallbacks/dist/menu';\nimport type { ReactProps } from './utils';\nimport { filterBooleanProps, useComponent } from './utils';\n\nimport Popover from './Popover';\nimport { SWCLoader } from './utils/SWCLoader';\nimport createWrapper from './utils/createWrapper';\nimport interopRequireDefault from './utils/interopRequireDefault';\nimport mergeRefs from './utils/mergeRefs';\n\ntype RS2MenuCompatProps = {\n    open?: boolean;\n    onSelect?: (option: string) => void;\n    onClose?: () => unknown;\n};\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires */\nconst RS2Menu: {\n    Menu: React.ComponentType<ReactProps<MenuType, RS2MenuCompatProps>>;\n    MenuHeading: React.ComponentType<unknown>;\n    SubMenu: React.ComponentType<unknown>;\n    MenuDivider: React.ComponentType<unknown>;\n    MenuItem: React.ComponentType<unknown>;\n} = process.env.INCLUDE_RS2\n    ? interopRequireDefault(require('react-spectrum/Menu'))\n    : {};\n\n/* eslint-enable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-var-requires */\n\nlet swcLoader;\nif (!process.env.EXCLUDE_SWC) {\n    swcLoader = new SWCLoader(\n        ['sp-menu', 'sp-menu-group', 'sp-menu-item', 'sp-menu-divider'],\n        async () => {\n            const { Menu, MenuGroup, MenuItem, MenuDivider } = await import(\n                /* webpackChunkName: \"SpMenu\" */\n                '@ccx-public/spectrum-web-component-fallbacks/dist/menu'\n            );\n            return [Menu, MenuGroup, MenuItem, MenuDivider];\n        }\n    );\n}\n\nexport const Menu = createWrapper<MenuType, RS2MenuCompatProps>({\n    displayName: 'Menu',\n    fallback: RS2Menu.Menu,\n    swcLoader,\n    SWCWrapper: forwardRef(function SpMenuPreview(\n        props,\n        ref: ForwardedRef<HTMLElement>\n    ) {\n        const privateRef = useRef<MenuType>(null);\n        const menuWrapperRef = ref\n            ? (ref as MutableRefObject<HTMLElement>)\n            : privateRef;\n        const { className, open, slot, style, onSelect, onClose, ...rest } =\n            props;\n        useEffect(() => {\n            const { current } = menuWrapperRef;\n            const handleSelect = (event: Event) => {\n                const target = event.target as HTMLInputElement;\n\n                onSelect?.(target.value);\n            };\n\n            if (current && onSelect) {\n                current.addEventListener('change', handleSelect);\n            }\n\n            return () => {\n                if (current && onSelect) {\n                    current.removeEventListener('change', handleSelect);\n                }\n            };\n        }, [onSelect, menuWrapperRef]);\n\n        useEffect(() => {\n            const { current } = menuWrapperRef;\n\n            if (current && onClose) {\n                current.addEventListener('close', onClose);\n            }\n\n            return () => {\n                if (current && onClose) {\n                    current.removeEventListener('close', onClose);\n                }\n            };\n        }, [onClose, menuWrapperRef]);\n\n        const Menu = useComponent('sp-menu');\n\n        return (\n            <Popover\n                open={open as boolean}\n                title={''}\n                style={{ minWidth: 'min-content', padding: 0, ...style }}\n                slot={slot}\n            >\n                <Menu ref={menuWrapperRef} class={className} {...rest} />\n            </Popover>\n        );\n    }),\n    tagName: 'sp-menu',\n});\n\ntype RS2MenuItemCompatProps = {\n    description?: JSX.Element | string;\n    icon?: JSX.Element;\n    role?: string;\n    valueContent?: JSX.Element;\n};\n\nfunction getIconSlot(icon?: RS2MenuItemCompatProps['icon']): React.ReactNode {\n    if (!icon) {\n        return;\n    }\n\n    return React.cloneElement(icon, { slot: 'icon' });\n}\n\nfunction getValueSlot(\n    value?: RS2MenuItemCompatProps['valueContent']\n): React.ReactNode {\n    if (!value) {\n        return;\n    }\n\n    return React.cloneElement(value, { slot: 'value' });\n}\n\nexport const MenuItem = createWrapper<MenuItemType, RS2MenuItemCompatProps>({\n    displayName: 'MenuItem',\n    fallback: RS2Menu.MenuItem,\n    swcLoader,\n    swcProps: function (props) {\n        const {\n            children,\n            description,\n            disabled,\n            icon,\n            selected,\n            valueContent,\n            className,\n            ...rest\n        } = props;\n\n        // ReactSpectrum2                   | SpectrumWebComponent\n        // ---------------------------------------------\n        // N/A (if Select, use renderItem)  | description\n        // N/A (if Select, use renderItem)  | valueContent\n\n        const iconSlot = getIconSlot(icon);\n        const valueSlot = getValueSlot(valueContent);\n\n        return {\n            class: className,\n            ...rest,\n            ...filterBooleanProps({\n                disabled: disabled,\n                selected: selected,\n            }),\n            children: (\n                <>\n                    {iconSlot}\n                    {children}\n                    {description && (\n                        <span slot=\"description\">{description}</span>\n                    )}\n                    {valueSlot}\n                </>\n            ),\n        };\n    },\n    tagName: 'sp-menu-item',\n});\n\nexport const MenuDivider = createWrapper<MenuDividerType>({\n    displayName: 'MenuDivider',\n    fallback: RS2Menu.MenuDivider,\n    swcLoader,\n    swcProps: function (props) {\n        const { className, ...rest } = props;\n        return { class: className, ...rest };\n    },\n    tagName: 'sp-menu-divider',\n});\n\nexport const MenuHeading = createWrapper<MenuGroupType>({\n    displayName: 'MenuHeading',\n    fallback: RS2Menu.MenuHeading,\n    swcLoader,\n    swcProps: function (props) {\n        const { children, ...rest } = props;\n\n        return {\n            ...rest,\n            children: <span slot=\"header\">{children}</span>,\n        };\n    },\n    tagName: 'sp-menu-group',\n});\n\nexport const SubMenu = createWrapper<MenuItemType, RS2MenuItemCompatProps>({\n    displayName: 'SubMenu',\n    fallback: RS2Menu.SubMenu,\n    swcLoader,\n    SWCWrapper: function (props) {\n        const { label, children, ...rest } = props;\n        const Menu = useComponent('sp-menu');\n        const MenuItem = useComponent('sp-menu-item');\n\n        return (\n            <MenuItem {...rest}>\n                {label}\n                <Menu slot=\"submenu\">{children}</Menu>\n            </MenuItem>\n        );\n    },\n    tagName: 'sp-menu-item',\n});\n\ntype MenuGroupReactCompatProps = {\n    onSelect?: (option: string) => unknown;\n};\n\n/**\n * MenuGroup component is only supported by Spectrum Web Components\n */\nexport const MenuGroup = createWrapper<\n    MenuGroupType,\n    MenuGroupReactCompatProps\n>({\n    displayName: 'MenuGroup',\n    fallback: undefined,\n    swcLoader,\n    SWCWrapper: forwardRef(function SpMenuGroupPreview(\n        props: ReactProps<MenuGroupType, MenuGroupReactCompatProps>,\n        ref: ForwardedRef<HTMLElement>\n    ) {\n        const menuGroupWrapperRef = useRef<MenuGroupType>(null);\n        const { className, children, onSelect, ...rest } = props;\n        useEffect(() => {\n            const { current } = menuGroupWrapperRef;\n            const handleChange = (event: Event) => {\n                const target = event.target as HTMLInputElement;\n\n                onSelect?.(target.value);\n            };\n\n            if (current && onSelect) {\n                current.addEventListener('change', handleChange);\n            }\n\n            return () => {\n                if (current && onSelect) {\n                    current.removeEventListener('change', handleChange);\n                }\n            };\n        }, [onSelect, menuGroupWrapperRef]);\n\n        const MenuGroup = useComponent('sp-menu-group');\n\n        return (\n            <MenuGroup\n                ref={mergeRefs([ref, menuGroupWrapperRef])}\n                class={className}\n                {...rest}\n            >\n                {children}\n            </MenuGroup>\n        );\n    }),\n    tagName: 'sp-menu-group',\n});\n\nexport const menuSwcLoader = swcLoader;\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\nimport type { MutableRefObject, RefCallback } from 'react';\n\nexport default function mergeRefs<T>(\n    refs: Array<MutableRefObject<T> | RefCallback<T> | null>\n): RefCallback<T> {\n    return function (value: T) {\n        refs.forEach((ref) => {\n            if (!ref) {\n                return;\n            }\n\n            if (typeof ref === 'function') {\n                ref(value);\n                return;\n            }\n\n            ref.current = value;\n        });\n    };\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\nimport type {\n    ProviderConfig,\n    ProviderPreloadProps,\n} from './utils/ThemeContext';\nimport { getProviderConfig } from './utils/ThemeContext';\n\ntype Loader = (config: ProviderConfig) => Promise<unknown>;\n\nconst _loaders: Loader[] = [];\n\nexport function _register(loader: Loader) {\n    _loaders.push(loader);\n}\n\nexport default function preload(props: ProviderPreloadProps = {}) {\n    const config = getProviderConfig(props);\n    const loaders = [..._loaders.map((loader) => loader(config))];\n    return Promise.all(loaders);\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\nimport { fallbackTagName } from '@ccx-public/spectrum-web-component-fallbacks/fallbackTagName';\nimport type { ProviderConfig } from './ThemeContext';\n\nfunction defineElement(\n    tagName: string,\n    CustomElementClass: CustomElementConstructor\n) {\n    try {\n        customElements.get(tagName) ||\n            customElements.define(tagName, CustomElementClass);\n    } catch (e) {\n        class SWCOverride extends CustomElementClass {}\n        customElements.define(tagName, SWCOverride);\n    }\n}\n\ntype Loader = (\n    providerConfig: ProviderConfig\n) => Promise<CustomElementConstructor[]>;\n\nexport class SWCLoader {\n    tags: string[];\n    _dependencies: SWCLoader[];\n    _load: Loader;\n\n    constructor(tags: string[], _load: Loader, dependencies: SWCLoader[] = []) {\n        this.tags = tags;\n        this._dependencies = dependencies;\n        this._load = _load;\n    }\n\n    private _loadMemo?: Promise<void>;\n\n    async load(providerConfig: ProviderConfig) {\n        if (this._loadMemo) {\n            return this._loadMemo;\n        }\n\n        await Promise.all(\n            this._dependencies.map((d) => d.load(providerConfig))\n        );\n\n        this._loadMemo = this._load(providerConfig).then((elements) =>\n            elements.forEach((element, index) =>\n                defineElement(fallbackTagName(this.tags[index]), element)\n            )\n        );\n        return this._loadMemo;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\nimport React from 'react';\nimport type { ComponentProps } from 'react';\nimport type {\n    Color,\n    Scale,\n    ThemeVariant,\n} from '@ccx-public/spectrum-web-component-fallbacks/dist/theme';\nimport type Provider from '../Provider';\n\nexport type ProviderPreloadProps = Pick<\n    ComponentProps<typeof Provider>,\n    'scale' | 'spectrumTheme' | 'theme' | 'typekitId'\n>;\n\nexport type ProviderConfig = {\n    scale: Scale;\n    spectrumTheme: ThemeVariant;\n    theme: Color;\n    typekitId: string;\n};\n\nexport const getProviderConfig = ({\n    scale,\n    spectrumTheme,\n    theme,\n    typekitId,\n}: ProviderPreloadProps = {}): ProviderConfig => ({\n    scale: scale || 'medium',\n    spectrumTheme: spectrumTheme || 'spectrum',\n    theme: theme || 'light',\n    typekitId: typekitId || 'ruf7eed',\n});\n\nexport const ThemeContext = React.createContext<ProviderConfig>(\n    getProviderConfig()\n);\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\nimport React, { forwardRef } from 'react';\nimport type { ReactProps, SpectrumElementProps } from '.';\nimport { loadSwcIfNeeded, useSWCLoader } from '.';\nimport type { SWCLoader } from './SWCLoader';\nimport { _register } from '../preload';\nimport type { ProviderConfig } from './ThemeContext';\n\ninterface BaseOptions<SWCProps, RS2CompatProps> {\n    displayName: string;\n    fallback:\n        | React.ComponentType<\n              Omit<\n                  ReactProps<SWCProps, RS2CompatProps>,\n                  'fallback' | 'forceFallback'\n              >\n          >\n        | undefined;\n    swcLoader: SWCLoader | undefined;\n    tagName: string;\n    loadSwc?: () => Promise<void>;\n}\n\ninterface SWCPropsOptions<SWCProps, RS2CompatProps>\n    extends BaseOptions<SWCProps, RS2CompatProps> {\n    swcProps: (\n        props: ReactProps<SWCProps, RS2CompatProps>\n    ) => SpectrumElementProps<SWCProps>;\n    SWCWrapper?: never;\n}\n\ninterface SWCWrapperOptions<SWCProps, RS2CompatProps>\n    extends BaseOptions<SWCProps, RS2CompatProps> {\n    swcProps?: never;\n    SWCWrapper: React.ComponentType<ReactProps<SWCProps, RS2CompatProps>>;\n}\n\ntype Options<SWCProps, RS2CompatProps> =\n    | SWCPropsOptions<SWCProps, RS2CompatProps>\n    | SWCWrapperOptions<SWCProps, RS2CompatProps>;\n\nexport default function createWrapper<SWCProps, RS2CompatProps = object>(\n    options: Options<SWCProps, RS2CompatProps>\n) {\n    // Register for preload\n    const loadSwc = (providerConfig: ProviderConfig) =>\n        loadSwcIfNeeded(options.tagName, providerConfig, options.swcLoader);\n\n    _register(options.loadSwc || loadSwc);\n\n    const Component: React.ForwardRefRenderFunction<\n        unknown,\n        ReactProps<SWCProps, RS2CompatProps>\n    > = (props, ref) => {\n        const { needsFallback, tagName } = useSWCLoader(\n            options.tagName,\n            options.swcLoader\n        );\n\n        const { fallback, forceFallback, ...rest } = props;\n\n        if (needsFallback || forceFallback) {\n            const { fallback: FallbackComponent } = options;\n\n            if (fallback) {\n                return <>{fallback}</>;\n            }\n\n            if (FallbackComponent) {\n                return <FallbackComponent {...rest} ref={ref} />;\n            }\n        }\n\n        if (options.SWCWrapper) {\n            return <options.SWCWrapper {...props} ref={ref} />;\n        }\n\n        const compatibilityProps = { ...options.swcProps(props), ref };\n        const SpComponent = tagName;\n\n        return (\n            <SpComponent {...(compatibilityProps as JSX.IntrinsicAttributes)} />\n        );\n    };\n    Component.displayName = options.displayName;\n    return forwardRef(Component);\n}\n","declare global {\n    interface Window {\n        __SPECTRUM_WRAPPER_STORYBOOK_FORCE_RS2__: boolean;\n    }\n}\n\nfunction useForceReactSpectrum() {\n    return (\n        window.__disable_swc__ ||\n        (window.__SPECTRUM_WRAPPER_STORYBOOK_FORCE_RS2__ &&\n            typeof process !== 'undefined' &&\n            process.env.STORYBOOK)\n    );\n}\n\nexport default useForceReactSpectrum;\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\nimport type { ReactNode } from 'react';\nimport { useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport semverSatisfies from 'semver/functions/satisfies';\nimport { fallbackTagName } from '@ccx-public/spectrum-web-component-fallbacks/fallbackTagName';\nimport type { SWCLoader } from './SWCLoader';\nimport type { ProviderConfig } from './ThemeContext';\nimport { ThemeContext } from './ThemeContext';\nimport useForceReactSpectrum from './useForceReactSpectrum';\n\nconst CAN_USE_SWC = !process.env.EXCLUDE_SWC && !window.__disable_swc__;\n\nlet isUxpEnv = false;\ntry {\n    isUxpEnv = !!window.require('uxp');\n} catch (e) {} // eslint-disable-line no-empty\n\nexport const isUXP = isUxpEnv;\n\n// UXP used to default to RS2 fallbacks, now it supports swc-uxp-wrapper\n// some clients still need RS2 fallbacks, so checking for INCLUDE_SWC_UXP override\nconst USE_RS2 = isUXP && !process.env.INCLUDE_SWC_UXP;\n\n// Use this to type the props of your wrapper so that they extends the web component you're wrapping.\n// This will help with any special cases with mismatching prop signatures where a spectrum web component accepts/requires props\n// that the React Spectrum component doesn't.\n\ntype Children = { children?: ReactNode };\ntype HTMLClass = { class?: string };\ntype ReactClass = { className?: string };\ntype ReactStyles = { style?: React.CSSProperties };\ntype FallbackProps = { fallback?: ReactNode; forceFallback?: boolean };\ntype ReactRef = { ref?: React.Ref<HTMLElement> };\ntype ModalOverlayProps = { modalTrigger?: boolean; modalContent?: boolean };\n\n// Utility for fixing the types coming from spectrum-web-components so that they\n// can be used in React.\n//\n// 1. The type expected for children is `HTMLCollection` and should be `ReactNode`.\n// 2. There is a `className` prop expected for some reason. We want to ignore that.\n// 3. We do want to provide a `class` property since that is what the web component expects.\nexport type SpectrumElementProps<T> = Partial<\n    Omit<T, 'children' | 'class' | 'style'> &\n        HTMLClass &\n        Children &\n        ReactStyles &\n        ReactRef\n>;\n\n// Utility for converting spectrum web component types to React prop-types and\n// providing overrides.\n//\n// Things done here:\n// 1. Remove `class` and replace with `className`\n// 2. Fix type of `children`\n// 3. Allow passing a `fallback` prop for all components\n// 4. Override default props. We use `Omit` for this because if you use & it\n//    just makes an intersection of all properties, for example `{ a: string } & {\n//    a: number } //=> { a: string & number }`, which results in `never`. We avoid\n//    this by omitting the overridden props before using `&`.\nexport type ReactProps<T, Overrides = object> = Partial<\n    Omit<SpectrumElementProps<T>, keyof Overrides | 'class'>\n> &\n    ReactClass &\n    FallbackProps &\n    ModalOverlayProps &\n    Overrides;\n\ntype SWCConstructor = CustomElementConstructor & { VERSION?: string };\n\n// UXP does not currently support Spectrum Web Components, but it does support \"Spectrum UXP\",\n// which are supposed to share the same signature as SPW (i.e <sp-button> is used isomorphically on both).\n// This does mean that checking the custom element registry (i.e window.customElements.get())\n// won't work in UXP as a way to check that the target web component is available.\n// As a workaround, in UXP we'll have to create the target element and check the return type\n// to determine the element availability. We'll cache the result so that we\n// only need to do this once per custom-element.\nexport const customElementRegistryCache = new Map<\n    string,\n    SWCConstructor | undefined\n>();\n\nfunction getCustomElementClass(tagName: string): SWCConstructor {\n    const cached = customElementRegistryCache.get(tagName);\n    if (cached !== undefined) {\n        return cached;\n    }\n\n    let registered = window.customElements?.get(tagName) as SWCConstructor;\n    if (!registered && USE_RS2 && CAN_USE_SWC) {\n        // RS2 fallback.\n        registered = document.createElement(tagName)\n            ?.constructor as SWCConstructor;\n    }\n\n    customElementRegistryCache.set(tagName, registered);\n    return registered;\n}\n\nexport function isRegisteredCustomElement(tagName: string) {\n    const constructor = getCustomElementClass(tagName);\n    return !!constructor && constructor !== HTMLElement;\n}\n\nconst SWC_COMPATIBLE_VERSION = '^0.42.0';\n\nexport function doesSWCNeedLoaded(tagName: string) {\n    if (USE_RS2 || !CAN_USE_SWC) {\n        return false;\n    }\n\n    if (!isRegisteredCustomElement(tagName)) {\n        return true;\n    }\n\n    const element = getCustomElementClass(tagName);\n\n    if (!element || !element.VERSION) {\n        return true;\n    }\n\n    return !semverSatisfies(element.VERSION, SWC_COMPATIBLE_VERSION);\n}\n\nexport const loadSwcIfNeeded = (\n    tagName: string,\n    providerConfig: ProviderConfig,\n    loader?: SWCLoader\n) => {\n    if (doesSWCNeedLoaded(tagName)) {\n        return loader?.load(providerConfig) || Promise.resolve();\n    } else {\n        return Promise.resolve();\n    }\n};\n\nfunction useIsUsingImportedSWC(tagName: string): boolean {\n    return useMemo(() => doesSWCNeedLoaded(tagName), [tagName]);\n}\n\nexport function useComponent<T extends string>(tagName: T): T {\n    return useIsUsingImportedSWC(tagName)\n        ? (fallbackTagName(tagName) as T)\n        : tagName;\n}\n\nexport function useSWCLoader<T extends string>(\n    tagName: T,\n    loader?: SWCLoader\n): { needsFallback: boolean; tagName: T } {\n    const shouldLoadSWC = useIsUsingImportedSWC(tagName);\n\n    const [, isLoaded] = useState(false);\n    const unmountedRef = useRef(true);\n    const theme = useContext(ThemeContext);\n\n    useEffect(() => {\n        unmountedRef.current = false;\n\n        if (shouldLoadSWC) {\n            // We need to load the SWC element. Note that it's ok if another component calls\n            // loader.load at the same time - it'll only import and register the component once.\n            loader?.load(theme).then(\n                () => {\n                    if (!unmountedRef.current) {\n                        isLoaded(true);\n                    }\n                },\n                (e) => console.error(`Error loading fallback for ${tagName}`, e)\n            );\n            return () => {\n                unmountedRef.current = true;\n            };\n        }\n    }, [theme, tagName, loader, shouldLoadSWC]);\n\n    const forceReactSpectrum = useForceReactSpectrum();\n    const registeredTagName = useComponent(tagName);\n\n    return {\n        needsFallback:\n            !isRegisteredCustomElement(registeredTagName) ||\n            !!forceReactSpectrum,\n        tagName: registeredTagName,\n    };\n}\n\nexport function filterBooleanProps<T extends object>(obj: T) {\n    const result: { [K in keyof T]?: T[K] } = {};\n    (Object.keys(obj) as Array<keyof T>).forEach((name) => {\n        if (obj[name]) {\n            result[name] = obj[name];\n        }\n    });\n    return result;\n}\n\nexport function chain(...callbacks: unknown[]) {\n    return (...args: unknown[]) => {\n        for (const callback of callbacks) {\n            if (typeof callback === 'function') {\n                callback(...args);\n            }\n        }\n    };\n}\n\nexport function configureTypekit(typeKitId: string) {\n    return new Promise((resolve) => {\n        if (!window.Typekit) {\n            const config = {\n                kitId: typeKitId,\n                scriptTimeout: 3000,\n            };\n            const t = setTimeout(() => {\n                resolve(null);\n            }, config.scriptTimeout);\n\n            const tk = document.createElement('script');\n            let d = false;\n\n            tk.src = `https://use.typekit.net/${config.kitId}.js`;\n            tk.type = 'text/javascript';\n            tk.async = true;\n            tk.onload = function onload() {\n                if (d) {\n                    resolve(null);\n                    return;\n                }\n                d = true;\n                clearTimeout(t);\n                try {\n                    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n                    window.Typekit.load(config);\n                } catch (b) {\n                    /* empty */\n                }\n                resolve(null);\n            };\n\n            const s = document.getElementsByTagName('script')[0];\n            s?.parentNode?.insertBefore(tk, s);\n        } else {\n            resolve(null);\n        }\n    });\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n/**\n * @torq-native/react-spectrum exports CommonJS modules:\n * https://git.corp.adobe.com/torq/react-spectrum/blob/develop/src/Provider/index.js#L20\n * @react/react-spectrum exports ES6 modules:\n * https://github.com/adobe/react-spectrum/blob/main/packages/%40react-spectrum/provider/src/Provider.tsx#L123\n * Ensure that we can import both types of modules isomorphically by\n * wrapping required CommonJS or ES6 modules and making them compatible with the ES6 module import syntax.\n * This is usually achieved by using Babel's `@babel/plugin-transform-modules-commonjs` plugin:\n * https://babeljs.io/docs/babel-plugin-transform-modules-commonjs#importinterop\n * but we don't want to add Babel as a dependency to this project.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport default function interopRequireDefault(obj: any) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment\n    return obj?.__esModule ? obj : { default: obj };\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe\n *  All Rights Reserved.\n *\n *  NOTICE:  All information contained herein is, and remains\n *  the property of Adobe and its suppliers, if any. The intellectual\n *  and technical concepts contained herein are proprietary to Adobe\n *  and its suppliers and are protected by all applicable intellectual\n *  property laws, including trade secret and copyright laws.\n *  Dissemination of this information or reproduction of this material\n *  is strictly forbidden unless prior written permission is obtained\n *  from Adobe.\n **************************************************************************/\n\n// This module is used when an icon implementation does exist in Spectrum, but is not in the Spectrum icon store.\n// Check /bin/generateIcons.js to see how it is used.\nexport default undefined;\n","\"use strict\";\n\nvar _UxpOptions = _interopRequireDefault(require(\"../utils/UxpOptions\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nmodule.exports = _UxpOptions.default.select('Button', () => require('./js/UxpButton'), () => require('./js/Button'));\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _events = require(\"../../utils/events\");\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _icon = require(\"../../utils/icon\");\n\nvar _convertUnsafeMethod = _interopRequireDefault(require(\"../../utils/convertUnsafeMethod\"));\n\nvar _CornerTriangle = _interopRequireDefault(require(\"../../Icon/core/CornerTriangle\"));\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _focusRing = _interopRequireWildcard(require(\"../../utils/focusRing\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nrequire(\"../style/index.css\");\n\nvar _class, _class2, _temp2;\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nif (process.env.SCALE_MEDIUM && process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/button/index.css\");\n\n  require(\"@adobe/spectrum-css/dist/components/button/index-diff.css\");\n} else if (process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/button/index-lg.css\");\n} else {\n  require(\"@adobe/spectrum-css/dist/components/button/index.css\");\n}\n\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHT) require(\"@adobe/spectrum-css/dist/components/button/multiStops/light.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARK) require(\"@adobe/spectrum-css/dist/components/button/multiStops/dark.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHTEST) require(\"@adobe/spectrum-css/dist/components/button/multiStops/lightest.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARKEST) require(\"@adobe/spectrum-css/dist/components/button/multiStops/darkest.css\");\n// For backward compatibility with coral\nconst VARIANTS = {\n  quiet: {\n    variant: 'primary',\n    quiet: true\n  },\n  minimal: {\n    variant: 'secondary',\n    quiet: true\n  },\n  icon: {\n    variant: 'action',\n    quiet: true\n  }\n};\n/**\n * A **button** represents an action a user can take. Buttons can be clicked or tapped to\n * perform an action or to navigate to another page. Buttons in Spectrum have several variations\n * for different uses and multiple levels of loudness for various attention-getting needs.\n */\n\nlet Button = (0, _convertUnsafeMethod.default)(_class = (0, _focusRing.default)(_class = (_temp2 = _class2 = class Button extends _react.Component {\n  constructor(...args) {\n    var _temp;\n\n    return _temp = super(...args), this.onClick = (event, ...rest) => {\n      // This is needed when `element` is an anchor or something similar.\n      // When `element` is a button, we won't even get here if it's disabled and clicked.\n      if (this.props.disabled) {\n        // If the element is an anchor with an href, we need to preventDefault() or the browser\n        // will follow the link.\n        event.preventDefault();\n      } else if (this.props.onClick) {\n        this.props.onClick(event, ...rest);\n      }\n    }, this.onKeyDownSpace = event => {\n      if (event.key === ' ' || event.key === 'Enter') {\n        event.preventDefault();\n        this.buttonRef.click();\n      }\n    }, this.setButtonRef = b => this.buttonRef = b, _temp;\n  }\n\n  componentDidMount() {\n    if (this.props.autoFocus) {\n      // wait a frame to make sure the button in the DOM and focusable\n      requestAnimationFrame(() => this.focus());\n    }\n  }\n  /**\n   * Focus the button\n   */\n\n\n  focus() {\n    if (this.buttonRef && !this.props.disabled && this.buttonRef.focus) {\n      this.buttonRef.focus();\n    }\n  }\n\n  render() {\n    let _this$props = this.props,\n        {\n      element: Element = 'button',\n      label,\n      children,\n      variant = 'secondary',\n      logic,\n      quiet,\n      icon,\n      selected,\n      block,\n      className,\n      disabled,\n      invalid,\n      onMouseDown,\n      onMouseUp,\n      autoFocus,\n      holdAffordance\n    } = _this$props,\n        otherProps = _objectWithoutProperties(_this$props, [\"element\", \"label\", \"children\", \"variant\", \"logic\", \"quiet\", \"icon\", \"selected\", \"block\", \"className\", \"disabled\", \"invalid\", \"onMouseDown\", \"onMouseUp\", \"autoFocus\", \"holdAffordance\"]); // Map variants for backwards compatibility\n\n\n    if (VARIANTS[variant]) {\n      let mappedVariant = VARIANTS[variant];\n      let variantName = (mappedVariant.quiet ? 'quiet ' : '') + `\"${mappedVariant.variant}\"`;\n      console.warn(`The \"${variant}\" variant of Button is deprecated. Please use the ${variantName} variant instead.`);\n      ({\n        variant,\n        quiet\n      } = mappedVariant);\n    }\n\n    let shouldRenderHoldAffordance = false; // Some button variants were broken out into their own components, map them appropriately\n\n    let baseButtonClass = 'spectrum-Button';\n\n    if (variant === 'action' || variant === 'toggle') {\n      baseButtonClass = 'spectrum-ActionButton';\n      shouldRenderHoldAffordance = holdAffordance;\n\n      if (variant === 'toggle') {\n        quiet = true;\n      }\n\n      variant = '';\n    } else if (logic) {\n      baseButtonClass = 'spectrum-LogicButton';\n    } else if (variant === 'clear') {\n      baseButtonClass = 'spectrum-ClearButton';\n      variant = '';\n    } else if (variant === 'field') {\n      baseButtonClass = 'spectrum-FieldButton';\n      variant = '';\n    } else if (variant === 'tool') {\n      baseButtonClass = 'spectrum-Tool'; // hold affordance is really only a part of tool.\n\n      shouldRenderHoldAffordance = holdAffordance;\n      variant = '';\n    }\n\n    if (Element !== 'button') {\n      otherProps.role = 'button';\n      otherProps.tabIndex = disabled ? null : otherProps.tabIndex || 0;\n      otherProps['aria-disabled'] = disabled || null;\n\n      if (Element === 'a' && disabled && otherProps.href) {\n        otherProps.href = null;\n      }\n\n      otherProps.onKeyDown = disabled ? null : this.onKeyDownSpace;\n    }\n\n    let labelContents = label || (typeof children === 'string' ? children : null);\n    let ariaExpanded = null;\n\n    if (otherProps['aria-expanded'] !== undefined) {\n      ariaExpanded = otherProps['aria-expanded'];\n    } else if (otherProps['aria-haspopup']) {\n      ariaExpanded = selected || null;\n    }\n\n    const filteredProps = typeof Element === 'string' ? (0, _filterDOMProps.default)(otherProps) : otherProps;\n    return /*#__PURE__*/_react.default.createElement(Element, _extends({}, filteredProps, {\n      className: (0, _classnames.default)(baseButtonClass, quiet ? `${baseButtonClass}--quiet` : '', variant ? `${baseButtonClass}--${variant}` : '', {\n        'is-selected': selected,\n        'is-disabled': disabled,\n        'is-invalid': invalid,\n        'spectrum-Button--block': block,\n        [_focusRing.FOCUS_RING_CLASSNAME]: autoFocus\n      }, className),\n      disabled: disabled,\n      \"aria-invalid\": invalid || null,\n      \"aria-expanded\": ariaExpanded,\n      onClick: this.onClick,\n      onMouseDown: (0, _events.chain)(this.onMouseDown, _events.focusAfterMouseEvent.bind(this, onMouseDown)),\n      onMouseUp: (0, _events.chain)(this.onMouseUp, _events.focusAfterMouseEvent.bind(this, onMouseUp)),\n      ref: this.setButtonRef\n    }), (0, _icon.cloneIcon)(icon, {\n      size: 'S'\n    }), labelContents && /*#__PURE__*/_react.default.createElement(\"span\", {\n      className: baseButtonClass + '-label'\n    }, labelContents), shouldRenderHoldAffordance && /*#__PURE__*/_react.default.createElement(_CornerTriangle.default, {\n      role: \"presentation\",\n      size: null,\n      className: \"spectrum-Tool-hold\"\n    }), typeof children !== 'string' && children);\n  }\n\n}, _class2.propTypes = {\n  /**\n   * The variant of button to display\n   */\n  variant: _propTypes.default.oneOf(['cta', 'primary', 'secondary', 'warning', 'action', 'toggle', 'and', 'or', 'icon', 'quiet', 'minimal', 'dropdown', 'clear', 'field', 'tool', 'overBackground']),\n\n  /**\n   * Whether the button should render using a quiet variant\n   */\n  quiet: _propTypes.default.bool,\n\n  /**\n   * Whether the button is a logic button variant\n   */\n  logic: _propTypes.default.bool,\n\n  /**\n   * Whether the button is disabled\n   */\n  disabled: _propTypes.default.bool,\n\n  /**\n   * Whether the button represents a selected state\n   */\n  selected: _propTypes.default.bool,\n\n  /**\n   * Whether the button represents an invalid state\n   */\n  invalid: _propTypes.default.bool,\n\n  /**\n   * An icon to render in the button.\n   */\n  icon: _propTypes.default.element,\n\n  /**\n   * The label to display in the button\n   */\n  label: _propTypes.default.string,\n\n  /**\n   * Whether the button is a block element\n   */\n  block: _propTypes.default.bool,\n\n  /**\n   * The DOM element to use to render the button\n   */\n  element: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.func]),\n\n  /**\n   * Whether the button should be auto focused on mount\n   */\n  autoFocus: _propTypes.default.bool,\n\n  /**\n   * A click handler for the button\n   */\n  onClick: _propTypes.default.func,\n\n  /**\n   * A visual variation that puts a small triangle in the lower right\n   */\n  holdAffordance: _propTypes.default.bool\n}, _class2.defaultProps = {\n  autoFocus: false,\n  block: false,\n  disabled: false,\n  element: 'button',\n  invalid: false,\n  label: '',\n  logic: false,\n  quiet: false,\n  selected: false,\n  variant: 'secondary',\n  holdAffordance: false\n}, _temp2)) || _class) || _class;\n\nexports.default = Button;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _Button = _interopRequireDefault(require(\"./Button\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _icon = require(\"../../utils/icon\");\n\nvar _CornerTriangle = _interopRequireDefault(require(\"../../Icon/core/CornerTriangle\"));\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _focusRing = require(\"../../utils/focusRing\");\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nrequire(\"../uxp-style/index.css\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nconst VARIANTS = {\n  quiet: {\n    variant: 'primary',\n    quiet: true\n  },\n  minimal: {\n    variant: 'secondary',\n    quiet: true\n  },\n  icon: {\n    variant: 'action',\n    quiet: true\n  }\n};\n\nclass UxpButton extends _Button.default {\n  constructor(...args) {\n    var _temp;\n\n    return _temp = super(...args), this.onKeyDownSpace = event => {\n      if (this.props.overrideOnKeyDown && this.onUxpKeyDown) {\n        return this.onUxpKeyDown(event);\n      }\n\n      if (event.key === ' ' || event.key === 'Enter') {\n        event.preventDefault();\n        this.buttonRef.click();\n      }\n    }, _temp;\n  }\n\n  render() {\n    let _this$props = this.props,\n        {\n      element: Element = 'button',\n      label,\n      children,\n      variant = 'secondary',\n      logic,\n      quiet,\n      icon,\n      selected,\n      block,\n      className,\n      disabled,\n      invalid,\n      uxpUseNative = true,\n      onMouseDown,\n      onMouseUp,\n      onPointerDown,\n      onPointerUp,\n      autoFocus,\n      holdAffordance\n    } = _this$props,\n        otherProps = _objectWithoutProperties(_this$props, [\"element\", \"label\", \"children\", \"variant\", \"logic\", \"quiet\", \"icon\", \"selected\", \"block\", \"className\", \"disabled\", \"invalid\", \"uxpUseNative\", \"onMouseDown\", \"onMouseUp\", \"onPointerDown\", \"onPointerUp\", \"autoFocus\", \"holdAffordance\"]);\n\n    this.onUxpKeyDown = this.props.onKeyDown;\n\n    if (icon !== undefined && icon !== null) {\n      return super.render();\n    }\n\n    if (children && typeof children !== 'string' || !uxpUseNative) {\n      return super.render(); // this will create a non-native button (using span tag)\n    }\n\n    if (Element === 'span') {\n      Element = 'button';\n    }\n\n    const isButton = Element === 'button'; // Map variants for backwards compatibility\n\n    if (VARIANTS[variant]) {\n      let mappedVariant = VARIANTS[variant];\n      let variantName = (mappedVariant.quiet ? 'quiet ' : '') + `\"${mappedVariant.variant}\"`;\n      console.warn(`The \"${variant}\" variant of Button is deprecated. Please use the ${variantName} variant instead.`);\n      ({\n        variant,\n        quiet\n      } = mappedVariant);\n    }\n\n    let shouldRenderHoldAffordance = false; // Some button variants were broken out into their own components, map them appropriately\n\n    let baseButtonClass = 'spectrum-Button';\n\n    if (variant === 'action' || variant === 'toggle') {\n      baseButtonClass = 'spectrum-ActionButton';\n      shouldRenderHoldAffordance = holdAffordance;\n\n      if (variant === 'toggle') {\n        quiet = true;\n      }\n\n      variant = '';\n    } else if (logic) {\n      baseButtonClass = 'spectrum-LogicButton';\n    } else if (variant === 'clear') {\n      baseButtonClass = 'spectrum-ClearButton';\n      variant = '';\n    } else if (variant === 'field') {\n      baseButtonClass = 'spectrum-FieldButton';\n      variant = '';\n    } else if (variant === 'tool') {\n      baseButtonClass = 'spectrum-Tool'; // hold affordance is really only a part of tool.\n\n      shouldRenderHoldAffordance = holdAffordance;\n      variant = '';\n    }\n\n    if (!isButton) {\n      otherProps.role = 'button';\n      otherProps.tabIndex = disabled ? null : otherProps.tabIndex || 0;\n      otherProps['aria-disabled'] = disabled || null;\n\n      if (Element === 'a' && disabled && otherProps.href) {\n        otherProps.href = null;\n      }\n\n      otherProps.onKeyDown = disabled ? null : this.onKeyDownSpace;\n    }\n\n    let labelContents = label || (typeof children === 'string' ? children : null);\n    let ariaExpanded = null;\n\n    if (otherProps['aria-expanded'] !== undefined) {\n      ariaExpanded = otherProps['aria-expanded'];\n    } else if (otherProps['aria-haspopup']) {\n      ariaExpanded = selected || null;\n    }\n\n    const filteredProps = typeof Element === 'string' ? (0, _filterDOMProps.default)(otherProps) : otherProps;\n    const uxpSelected = selected ? selected : false; // added for quick-actions when the button failed to render when selected was null\n\n    return /*#__PURE__*/_react.default.createElement(Element, _extends({}, filteredProps, {\n      \"uxp-variant\": variant,\n      \"uxp-quiet\": quiet.toString(),\n      \"uxp-selected\": uxpSelected.toString(),\n      className: (0, _classnames.default)(baseButtonClass, !isButton && quiet ? `${baseButtonClass}--quiet` : '', !isButton && variant ? `${baseButtonClass}--${variant}` : '', {\n        'is-selected': !isButton && selected,\n        'is-disabled': !isButton && disabled,\n        'is-invalid': invalid,\n        'spectrum-Button--block': block,\n        [_focusRing.FOCUS_RING_CLASSNAME]: autoFocus\n      }, className),\n      disabled: disabled,\n      \"aria-invalid\": invalid || null,\n      \"aria-expanded\": ariaExpanded,\n      onClick: this.onClick,\n      onPointerDown: onMouseDown || onPointerDown,\n      onPointerUp: onMouseUp || onPointerUp,\n      ref: this.setButtonRef\n    }), (0, _icon.cloneIcon)(icon, {\n      size: 'S'\n    }), labelContents && /*#__PURE__*/_react.default.createElement(\"span\", {\n      className: baseButtonClass + '-label'\n    }, labelContents), shouldRenderHoldAffordance && /*#__PURE__*/_react.default.createElement(_CornerTriangle.default, {\n      role: \"presentation\",\n      size: null,\n      className: \"spectrum-Tool-hold\"\n    }), typeof children !== 'string' && children);\n  }\n\n}\n\nexports.default = UxpButton;\nUxpButton.defaultProps = {\n  autoFocus: false,\n  block: false,\n  disabled: false,\n  element: 'span',\n  invalid: false,\n  label: '',\n  logic: false,\n  quiet: false,\n  selected: false,\n  variant: 'secondary',\n  holdAffordance: false\n};\n","\"use strict\";\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nmodule.exports = require('./js/ButtonGroup');\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _convertUnsafeMethod = _interopRequireDefault(require(\"../../utils/convertUnsafeMethod\"));\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _FocusManager = _interopRequireDefault(require(\"../../utils/FocusManager\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _class, _class2, _temp;\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nif (process.env.SCALE_MEDIUM && process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/buttongroup/index.css\");\n\n  require(\"@adobe/spectrum-css/dist/components/buttongroup/index-diff.css\");\n} else if (process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/buttongroup/index-lg.css\");\n} else {\n  require(\"@adobe/spectrum-css/dist/components/buttongroup/index.css\");\n}\n\nconst BUTTONGROUP_ITEM_SELECTOR = '.spectrum-ButtonGroup-item:not([disabled]):not([aria-disabled])';\nconst BUTTONGROUP_SELECTED_ITEM_SELECTOR = BUTTONGROUP_ITEM_SELECTOR + '[aria-checked=true].is-selected';\nconst ALLOWED_BUTTON_VARIANTS = {\n  tool: true,\n  action: true\n};\n\nlet ButtonGroup = (0, _convertUnsafeMethod.default)(_class = (_temp = _class2 = class ButtonGroup extends _react.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      value: props.value\n    };\n  }\n\n  UNSAFE_componentWillReceiveProps(props) {\n    if (props.value && props.value !== this.state.value) {\n      this.setState({\n        value: props.value\n      });\n    }\n  }\n\n  addSelection(button) {\n    return [...(this.state.value || []), button.value];\n  }\n\n  removeSelection(button) {\n    let value = this.state.value || [];\n    const index = value.indexOf(button.value);\n    return [...value.slice(0, index), ...value.slice(index + 1, value.length)];\n  }\n\n  handleSelect(button, e) {\n    if (!this.props.readOnly && !button.readOnly) {\n      let nextButtons;\n\n      if (this.props.multiple) {\n        if (this.isSelected(button)) {\n          nextButtons = this.removeSelection(button);\n        } else {\n          nextButtons = this.addSelection(button);\n        }\n      } else {\n        nextButtons = button.value;\n      } // Set state if in uncontrolled mode\n\n\n      if (!('value' in this.props)) {\n        this.setState({\n          value: nextButtons\n        });\n      }\n\n      if (this.props.onChange) {\n        this.props.onChange(nextButtons, e);\n      }\n    } // Support button's onClicks\n\n\n    if (button.onClick) {\n      button.onClick(e);\n    } // Allow's the ButtonGroup's onClick to be called when a button is clicked\n\n\n    if (this.props.onClick) {\n      this.props.onClick(button.value, e);\n    }\n  }\n  /**\n   * @private\n   * Evaluates whether button element is selected.\n   * @param   {Object}  button Button properties object\n   * @returns {Boolean} true if button is selected\n   */\n\n\n  isSelected(button) {\n    if (this.props.readOnly) {\n      return null;\n    }\n\n    return this.props.multiple ? this.state.value && this.state.value.indexOf(button.value) >= 0 : this.state.value === button.value;\n  }\n  /**\n   * @private\n   * The role to be used by buttons within the group. If the button group is readOnly,\n   * button should retain their implicit role of button. With multiple selection, buttons\n   * should have role of checkbox, and with single selection buttons should have role of radio.\n   * @returns {String} role of buttons within group, either null, radio or checkbox.\n   */\n\n\n  getChildRole() {\n    if (this.props.readOnly) {\n      return null;\n    }\n\n    return this.props.multiple ? 'checkbox' : 'radio';\n  }\n\n  getChildProps(button, index) {\n    const invalid = this.props.invalid || button.props.invalid;\n    const required = this.props.required || button.props.required;\n    const disabled = this.props.disabled || button.props.disabled;\n    const selected = this.isSelected(button.props);\n    const role = this.getChildRole();\n    const onClick = !disabled ? this.handleSelect.bind(this, button.props) : null;\n    const allowedVariant = ALLOWED_BUTTON_VARIANTS[button.props.variant];\n    const classes = (0, _classnames.default)('spectrum-ButtonGroup-item', button.props.className);\n    return {\n      className: classes,\n      selected: selected,\n      disabled: disabled,\n      variant: allowedVariant ? button.props.variant : 'action',\n      quiet: allowedVariant ? button.props.quiet : true,\n      onClick: onClick,\n      onKeyDown: button.props.onKeyDown,\n      role: role,\n      'aria-checked': selected,\n      'aria-invalid': invalid,\n      'aria-required': required\n    };\n  }\n\n  renderButtons() {\n    const {\n      children\n    } = this.props;\n    return _react.default.Children.map(children, (child, index) => child ? _react.default.cloneElement(child, this.getChildProps(child, index)) : null);\n  }\n\n  render() {\n    let _this$props = this.props,\n        {\n      children = [],\n      className,\n      multiple,\n      disabled,\n      readOnly,\n      invalid,\n      required,\n      orientation,\n      manageTabIndex,\n      role\n    } = _this$props,\n        otherProps = _objectWithoutProperties(_this$props, [\"children\", \"className\", \"multiple\", \"disabled\", \"readOnly\", \"invalid\", \"required\", \"orientation\", \"manageTabIndex\", \"role\"]);\n\n    delete otherProps.onChange;\n    delete otherProps.onClick;\n\n    if (!role) {\n      if (!readOnly && !multiple) {\n        // With single-selection, the wrapper element should have role=radiogroup.\n        role = 'radiogroup';\n      } else if (readOnly || children.length > 2) {\n        // With readOnly and more than one button, the wrapper element should have role=toolbar, otherwise with less than two items or multi-selection, use role=group.\n        role = readOnly && children.length > 2 ? 'toolbar' : 'group';\n      }\n    }\n\n    return /*#__PURE__*/_react.default.createElement(_FocusManager.default, {\n      itemSelector: BUTTONGROUP_ITEM_SELECTOR,\n      selectedItemSelector: BUTTONGROUP_SELECTED_ITEM_SELECTOR,\n      orientation: role === 'toolbar' ? orientation : 'both',\n      manageTabIndex: manageTabIndex\n    }, /*#__PURE__*/_react.default.createElement(\"div\", _extends({\n      \"aria-invalid\": invalid || null,\n      \"aria-required\": required || null,\n      \"aria-disabled\": disabled || null,\n      \"aria-orientation\": orientation !== 'both' && role === 'toolbar' ? orientation : null,\n      role: role\n    }, (0, _filterDOMProps.default)(otherProps), {\n      className: (0, _classnames.default)('spectrum-ButtonGroup', {\n        'spectrum-ButtonGroup--vertical': orientation === 'vertical'\n      }, className)\n    }), this.renderButtons(children)));\n  }\n\n}, _class2.propTypes = {\n  /**\n   * All buttons in ButtonGroup are disabled, greyed out and cannot be interacted with.\n   */\n  disabled: _propTypes.default.bool,\n\n  /**\n   * Will override all child buttons invalid\n   */\n  invalid: _propTypes.default.bool,\n\n  /**\n   * Whether to use roving tabIndex so that only one element within the group can receive focus with tab key at a time.\n   */\n  manageTabIndex: _propTypes.default.bool,\n\n  /**\n   * Allows multi select\n   */\n  multiple: _propTypes.default.bool,\n\n  /**\n   * Won't allow a permanent selection\n   */\n  readOnly: _propTypes.default.bool,\n\n  /**\n   * Will override all child buttons required\n   */\n  required: _propTypes.default.bool,\n\n  /**\n   * Called whenever a button is selected (non-readonly mode)\n   */\n  onChange: _propTypes.default.func,\n\n  /**\n   * Called whenever a button is clicked (readonly mode)\n   */\n  onClick: _propTypes.default.func,\n\n  /**\n   * Renders the button group as a row or a column\n   */\n  orientation: _propTypes.default.oneOf(['horizontal', 'vertical', 'both']),\n\n  /**\n   * Value to select one or more buttons in the group. Accepts an array of strings if multiple=true,\n   * otherwise accepts a string\n   */\n  value: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.arrayOf(_propTypes.default.string)])\n}, _class2.defaultProps = {\n  disabled: false,\n  invalid: false,\n  manageTabIndex: true,\n  multiple: false,\n  readOnly: false,\n  required: false,\n  orientation: 'both'\n}, _temp)) || _class;\n\nexports.default = ButtonGroup;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nObject.defineProperty(exports, \"Card\", {\n  enumerable: true,\n  get: function () {\n    return _Card.default;\n  }\n});\nObject.defineProperty(exports, \"CardBody\", {\n  enumerable: true,\n  get: function () {\n    return _CardBody.default;\n  }\n});\nObject.defineProperty(exports, \"CardCoverPhoto\", {\n  enumerable: true,\n  get: function () {\n    return _CardCoverPhoto.default;\n  }\n});\nObject.defineProperty(exports, \"CardFooter\", {\n  enumerable: true,\n  get: function () {\n    return _CardFooter.default;\n  }\n});\nObject.defineProperty(exports, \"CardPreview\", {\n  enumerable: true,\n  get: function () {\n    return _CardPreview.default;\n  }\n});\n\nvar _Card = _interopRequireDefault(require(\"./js/Card\"));\n\nvar _CardBody = _interopRequireDefault(require(\"./js/CardBody\"));\n\nvar _CardCoverPhoto = _interopRequireDefault(require(\"./js/CardCoverPhoto\"));\n\nvar _CardFooter = _interopRequireDefault(require(\"./js/CardFooter\"));\n\nvar _CardPreview = _interopRequireDefault(require(\"./js/CardPreview\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _autobindDecorator = _interopRequireDefault(require(\"autobind-decorator\"));\n\nvar _Checkbox = _interopRequireDefault(require(\"../../Checkbox/js/Checkbox\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _intl = require(\"../../utils/intl\");\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nrequire(\"../style/index.css\");\n\nvar _class, _class2, _temp;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst intlMessages = {\n  \"cs-CZ\": _interopRequireDefault(require(\"./../intl/cs-CZ.json\")).default,\n  \"da-DK\": _interopRequireDefault(require(\"./../intl/da-DK.json\")).default,\n  \"de-DE\": _interopRequireDefault(require(\"./../intl/de-DE.json\")).default,\n  \"en-US\": _interopRequireDefault(require(\"./../intl/en-US.json\")).default,\n  \"es-ES\": _interopRequireDefault(require(\"./../intl/es-ES.json\")).default,\n  \"fi-FI\": _interopRequireDefault(require(\"./../intl/fi-FI.json\")).default,\n  \"fr-FR\": _interopRequireDefault(require(\"./../intl/fr-FR.json\")).default,\n  \"hu-HU\": _interopRequireDefault(require(\"./../intl/hu-HU.json\")).default,\n  \"it-IT\": _interopRequireDefault(require(\"./../intl/it-IT.json\")).default,\n  \"ja-JP\": _interopRequireDefault(require(\"./../intl/ja-JP.json\")).default,\n  \"ko-KR\": _interopRequireDefault(require(\"./../intl/ko-KR.json\")).default,\n  \"nb-NO\": _interopRequireDefault(require(\"./../intl/nb-NO.json\")).default,\n  \"nl-NL\": _interopRequireDefault(require(\"./../intl/nl-NL.json\")).default,\n  \"pl-PL\": _interopRequireDefault(require(\"./../intl/pl-PL.json\")).default,\n  \"pt-BR\": _interopRequireDefault(require(\"./../intl/pt-BR.json\")).default,\n  \"ru-RU\": _interopRequireDefault(require(\"./../intl/ru-RU.json\")).default,\n  \"sv-SE\": _interopRequireDefault(require(\"./../intl/sv-SE.json\")).default,\n  \"tr-TR\": _interopRequireDefault(require(\"./../intl/tr-TR.json\")).default,\n  \"uk-UA\": _interopRequireDefault(require(\"./../intl/uk-UA.json\")).default,\n  \"zh-CN\": _interopRequireDefault(require(\"./../intl/zh-CN.json\")).default,\n  \"zh-TW\": _interopRequireDefault(require(\"./../intl/zh-TW.json\")).default\n};\n\nif (process.env.SCALE_MEDIUM && process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/card/index.css\");\n\n  require(\"@adobe/spectrum-css/dist/components/card/index-diff.css\");\n} else if (process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/card/index-lg.css\");\n} else {\n  require(\"@adobe/spectrum-css/dist/components/card/index.css\");\n}\n\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHT) require(\"@adobe/spectrum-css/dist/components/card/multiStops/light.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARK) require(\"@adobe/spectrum-css/dist/components/card/multiStops/dark.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHTEST) require(\"@adobe/spectrum-css/dist/components/card/multiStops/lightest.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARKEST) require(\"@adobe/spectrum-css/dist/components/card/multiStops/darkest.css\");\n\nif (process.env.SCALE_MEDIUM && process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/quickaction/index.css\");\n\n  require(\"@adobe/spectrum-css/dist/components/quickaction/index-diff.css\");\n} else if (process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/quickaction/index-lg.css\");\n} else {\n  require(\"@adobe/spectrum-css/dist/components/quickaction/index.css\");\n}\n\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHT) require(\"@adobe/spectrum-css/dist/components/quickaction/multiStops/light.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARK) require(\"@adobe/spectrum-css/dist/components/quickaction/multiStops/dark.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHTEST) require(\"@adobe/spectrum-css/dist/components/quickaction/multiStops/lightest.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARKEST) require(\"@adobe/spectrum-css/dist/components/quickaction/multiStops/darkest.css\");\nconst formatMessage = (0, _intl.messageFormatter)(intlMessages);\n\nlet Card = (0, _autobindDecorator.default)(_class = (_temp = _class2 = class Card extends _react.default.Component {\n  getChildContext() {\n    let actionMenu = this.props.actionMenu;\n\n    if (this.props.size === 'S') {\n      actionMenu = null;\n    } // Find the CardBody to determine if it has a title.\n    // This is used in CardPreview to decide whether to default the \n    // image to decorative for accessibility.\n\n\n    let cardBody = _react.default.Children.toArray(this.props.children).find(child => child.type.displayName === 'CardBody');\n\n    let hasTitle = Boolean(cardBody && cardBody.props.title);\n    return {\n      cardVariant: this.props.variant,\n      cardSize: this.props.size,\n      actionMenu,\n      onLoad: this.props.onLoad,\n      hasTitle\n    };\n  }\n\n  handleCheckboxClick(evt) {\n    if (this.props.onSelectionChange) {\n      evt.stopPropagation();\n    }\n  }\n\n  render() {\n    let _this$props = this.props,\n        {\n      variant,\n      size,\n      selected,\n      allowsSelection,\n      isDropTarget,\n      quickActions,\n      actionMenu,\n      children,\n      className\n    } = _this$props,\n        otherProps = _objectWithoutProperties(_this$props, [\"variant\", \"size\", \"selected\", \"allowsSelection\", \"isDropTarget\", \"quickActions\", \"actionMenu\", \"children\", \"className\"]); // Small size is not supported for standard cards\n\n\n    if (variant === 'standard' && size === 'S') {\n      size = 'L';\n    }\n\n    let checkbox = null;\n\n    if (allowsSelection) {\n      checkbox = /*#__PURE__*/_react.default.createElement(\"div\", {\n        className: (0, _classnames.default)('spectrum-QuickActions', 'spectrum-Card-quickActions')\n      }, /*#__PURE__*/_react.default.createElement(_Checkbox.default, {\n        onChange: this.props.onSelectionChange,\n        onClick: this.handleCheckboxClick,\n        checked: selected,\n        title: formatMessage('select')\n      }));\n    }\n\n    if (quickActions && actionMenu) {\n      throw new Error('Either quick actions or an action button can be passed to Card, not both.');\n    }\n\n    if (size === 'S' && actionMenu) {\n      quickActions = /*#__PURE__*/_react.default.createElement(\"div\", {\n        className: \"spectrum-QuickActions spectrum-Card-actions\"\n      }, actionMenu);\n    }\n\n    let assetClass = (0, _classnames.default)('spectrum-Card', `spectrum-Card--${variant}`, {\n      'spectrum-Card--large': size === 'L',\n      'spectrum-Card--small': size === 'S',\n      'is-selected': selected,\n      'is-drop-target': isDropTarget\n    }, className);\n    return /*#__PURE__*/_react.default.createElement(\"div\", _extends({}, (0, _filterDOMProps.default)(otherProps), {\n      className: assetClass\n    }), children, checkbox, quickActions);\n  }\n\n}, _class2.propTypes = {\n  /** Card variant */\n  variant: _propTypes.default.oneOf(['standard', 'quiet', 'gallery']),\n\n  /** Card can be large or small size */\n  size: _propTypes.default.oneOf(['S', 'L']),\n\n  /** Whether or not the card supports selection */\n  allowsSelection: _propTypes.default.bool,\n\n  /** Whether or not the card is selected */\n  selected: _propTypes.default.bool,\n\n  /** What happens when the checkbox is clicked */\n  onSelectionChange: _propTypes.default.func,\n\n  /** Whether the card is currently a drop target */\n  isDropTarget: _propTypes.default.bool,\n\n  /** Quick actions to display on the card. */\n  quickActions: _propTypes.default.element,\n\n  /** Action menu to display in the body of the card. */\n  actionMenu: _propTypes.default.element\n}, _class2.defaultProps = {\n  variant: 'standard',\n  size: 'L',\n  selected: false,\n  allowsSelection: true\n}, _class2.childContextTypes = {\n  cardVariant: _propTypes.default.string,\n  cardSize: _propTypes.default.string,\n  actionMenu: _propTypes.default.element,\n  onLoad: _propTypes.default.func,\n  hasTitle: _propTypes.default.bool\n}, _temp)) || _class;\n\nexports.default = Card;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\n\n/**\n * Body of a card. Allows optional title, subtitle, and description props, and custom children displayed underneath.\n */\nclass CardBody extends _react.default.Component {\n  render() {\n    let {\n      title,\n      subtitle,\n      description,\n      children\n    } = this.props;\n    let {\n      cardVariant,\n      actionMenu\n    } = this.context;\n    let subtitleWrapper = subtitle ? /*#__PURE__*/_react.default.createElement(\"div\", {\n      className: \"spectrum-Card-subtitle\"\n    }, subtitle) : null;\n    let descriptionWrapper = description ? /*#__PURE__*/_react.default.createElement(\"div\", {\n      className: \"spectrum-Card-description\"\n    }, description) : null;\n    return /*#__PURE__*/_react.default.createElement(\"div\", {\n      className: \"spectrum-Card-body\"\n    }, title || actionMenu ? /*#__PURE__*/_react.default.createElement(\"div\", {\n      className: \"spectrum-Card-header\"\n    }, title ? /*#__PURE__*/_react.default.createElement(\"div\", {\n      className: \"spectrum-Card-title\"\n    }, title) : null, cardVariant === 'gallery' && subtitleWrapper, cardVariant === 'gallery' && descriptionWrapper, actionMenu ? /*#__PURE__*/_react.default.createElement(\"div\", {\n      className: \"spectrum-Card-actionButton\"\n    }, _react.default.cloneElement(actionMenu, {\n      alignRight: true\n    })) : null) : null, cardVariant !== 'gallery' && (subtitle || description) ? /*#__PURE__*/_react.default.createElement(\"div\", {\n      className: \"spectrum-Card-content\"\n    }, subtitleWrapper, descriptionWrapper) : null, children);\n  }\n\n}\n\nexports.default = CardBody;\nCardBody.displayName = 'CardBody';\nCardBody.propTypes = {\n  /** Title for the card */\n  title: _propTypes.default.string,\n\n  /** Subtitle for the card, e.g. file type, displayed in capitalized style */\n  subtitle: _propTypes.default.string,\n\n  /** Description for the card */\n  description: _propTypes.default.string\n};\nCardBody.contextTypes = {\n  cardVariant: _propTypes.default.string,\n  actionMenu: _propTypes.default.element\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\n\n/**\n * Cover photo for standard variant cards. Accepts an image url, and custom children \n * (e.g. Avatar) displayed at the bottom of the cover photo.\n */\nclass CardCoverPhoto extends _react.default.Component {\n  render() {\n    let {\n      src,\n      children\n    } = this.props;\n    return /*#__PURE__*/_react.default.createElement(\"div\", {\n      className: \"spectrum-Card-coverPhoto\",\n      style: {\n        backgroundImage: `url(${JSON.stringify(src)})`\n      }\n    }, children);\n  }\n\n}\n\nexports.default = CardCoverPhoto;\nCardCoverPhoto.propTypes = {\n  /** Image url to be displayed in the cover photo */\n  src: _propTypes.default.string\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\n\n/**\n * Footer for a card. Pass custom content as children.\n */\nclass CardFooter extends _react.default.Component {\n  render() {\n    return /*#__PURE__*/_react.default.createElement(\"div\", {\n      className: \"spectrum-Card-footer\"\n    }, this.props.children);\n  }\n\n}\n\nexports.default = CardFooter;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\n\n/**\n * Image or file preview, displayed at the top of a card. Pass contents as children, often an Asset component.\n */\nclass CardPreview extends _react.default.Component {\n  render() {\n    let child = _react.default.Children.only(this.props.children);\n\n    let {\n      cardVariant,\n      onLoad,\n      hasTitle\n    } = this.context;\n    let smartness = 0;\n\n    if (cardVariant === 'quiet') {\n      smartness = 1;\n    } // Default image to decorative if there is already a title in the CardBody.\n    // If the child already defines the decorative prop or alt prop, don't override it.\n\n\n    let decorative = hasTitle;\n\n    if (child.props.decorative != null || child.props.alt != null) {\n      decorative = child.props.decorative;\n    }\n\n    return /*#__PURE__*/_react.default.createElement(\"div\", {\n      className: \"spectrum-Card-preview\"\n    }, _react.default.cloneElement(child, {\n      smartness,\n      onLoad,\n      decorative\n    }));\n  }\n\n}\n\nexports.default = CardPreview;\nCardPreview.contextTypes = {\n  cardVariant: _propTypes.default.string,\n  onLoad: _propTypes.default.func,\n  hasTitle: _propTypes.default.bool\n};\n","\"use strict\";\n\nvar _UxpOptions = _interopRequireDefault(require(\"../utils/UxpOptions\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nmodule.exports = _UxpOptions.default.select('Checkbox', () => require('./js/UxpCheckbox'), () => require('./js/Checkbox'));\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _CheckmarkSmall = _interopRequireDefault(require(\"../../Icon/core/CheckmarkSmall\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _DashSmall = _interopRequireDefault(require(\"../../Icon/core/DashSmall\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _SwitchBase = _interopRequireDefault(require(\"../../Switch/js/SwitchBase\"));\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nif (process.env.SCALE_MEDIUM && process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/checkbox/index.css\");\n\n  require(\"@adobe/spectrum-css/dist/components/checkbox/index-diff.css\");\n} else if (process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/checkbox/index-lg.css\");\n} else {\n  require(\"@adobe/spectrum-css/dist/components/checkbox/index.css\");\n}\n\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHT) require(\"@adobe/spectrum-css/dist/components/checkbox/multiStops/light.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARK) require(\"@adobe/spectrum-css/dist/components/checkbox/multiStops/dark.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHTEST) require(\"@adobe/spectrum-css/dist/components/checkbox/multiStops/lightest.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARKEST) require(\"@adobe/spectrum-css/dist/components/checkbox/multiStops/darkest.css\");\n\nclass Checkbox extends _react.Component {\n  componentDidMount() {\n    this.setIndeterminate();\n  }\n\n  componentDidUpdate() {\n    this.setIndeterminate();\n  } // There is no way to set indeterminate through markup such that it will be picked up by a CSS\n  // indeterminate pseudo-selector. It can only be done via javascript.\n\n\n  setIndeterminate() {\n    const {\n      indeterminate\n    } = this.props;\n    const input = this.inputRef && this.inputRef.getInput();\n\n    if (indeterminate != null && input) {\n      input.indeterminate = indeterminate;\n    }\n  }\n\n  render() {\n    const _this$props = this.props,\n          {\n      indeterminate,\n      quiet,\n      className\n    } = _this$props,\n          otherProps = _objectWithoutProperties(_this$props, [\"indeterminate\", \"quiet\", \"className\"]); // override the aria-checked prop of SwitchBase only if it is indeterminate.\n\n\n    if (indeterminate) {\n      otherProps['aria-checked'] = 'mixed';\n    }\n\n    let markIcon = indeterminate ? /*#__PURE__*/_react.default.createElement(_DashSmall.default, {\n      size: null,\n      className: \"spectrum-Checkbox-partialCheckmark\"\n    }) : /*#__PURE__*/_react.default.createElement(_CheckmarkSmall.default, {\n      size: null,\n      className: \"spectrum-Checkbox-checkmark\"\n    });\n    return /*#__PURE__*/_react.default.createElement(_SwitchBase.default, _extends({\n      ref: el => this.inputRef = el,\n      inputType: \"checkbox\",\n      className: (0, _classnames.default)('spectrum-Checkbox', {\n        'is-indeterminate': indeterminate,\n        'spectrum-Checkbox--quiet': quiet\n      }, className),\n      inputClassName: \"spectrum-Checkbox-input\",\n      markClassName: \"spectrum-Checkbox-box\",\n      markIcon: markIcon,\n      labelClassName: \"spectrum-Checkbox-label\"\n    }, otherProps));\n  }\n\n}\n\nexports.default = Checkbox;\nCheckbox.propTypes = {\n  /**\n   * Label for the checkbox\n   */\n  label: _propTypes.default.string,\n\n  /**\n   * Whether to render the label for the checkbox\n   */\n  renderLabel: _propTypes.default.bool,\n\n  /**\n   * defaultChecked is undefined by default so we can respect\n   * the value that is passed in without erroneously putting\n   * both checked and defaultChecked on the input\n   */\n  defaultChecked: _propTypes.default.bool,\n\n  /**\n   * if the checkbox can't be interacted with, and also greys it out\n   */\n  disabled: _propTypes.default.bool,\n\n  /**\n   * Uses standard HTML required to make a form invalid, also get a highlight if not filled in\n   */\n  required: _propTypes.default.bool,\n\n  /**\n   * If the value is invalid\n   */\n  invalid: _propTypes.default.bool,\n\n  /**\n   * Makes it so the checkbox can't be interacted with\n   */\n  readOnly: _propTypes.default.bool,\n\n  /**\n   * Callback for when the checkbox value changes\n   */\n  onChange: _propTypes.default.func,\n\n  /**\n   * Uses a dash instead of a check to indicate an in between or \"unknown\" state\n   */\n  indeterminate: _propTypes.default.bool,\n\n  /**\n  * Whether the checkbox is a quiet variation\n  */\n  quiet: _propTypes.default.bool\n};\nCheckbox.defaultProps = {\n  renderLabel: true,\n  defaultChecked: undefined,\n  disabled: false,\n  required: false,\n  invalid: false,\n  readOnly: false,\n  onChange: function () {},\n  indeterminate: false,\n  quiet: false\n};\nCheckbox.displayName = 'Checkbox';\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _Checkbox = _interopRequireDefault(require(\"./Checkbox\"));\n\nvar _convertUnsafeMethod = _interopRequireDefault(require(\"../../utils/convertUnsafeMethod\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _class, _class2, _temp, _initialiseProps;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n// pulled from react-spectrum-uxp, should come from spectrum-dna\nconst CheckboxMetrics = {\n  labelGap: '8px',\n  marginTop: '3px',\n  height: '18px',\n  width: '18px'\n};\nconst labelStyle = {\n  display: 'flex',\n  flexDirection: 'row',\n  alignItems: 'center',\n  marginTop: CheckboxMetrics.marginTop,\n  marginBottom: CheckboxMetrics.marginTop,\n  height: CheckboxMetrics.height\n};\nconst spanStyle = {\n  marginLeft: CheckboxMetrics.labelGap\n};\nconst inputStyle = {\n  width: CheckboxMetrics.width\n};\n\nlet UxpCheckbox = (0, _convertUnsafeMethod.default)(_class = (_temp = _class2 = class UxpCheckbox extends _Checkbox.default {\n  constructor(props) {\n    super(props);\n\n    _initialiseProps.call(this);\n\n    const {\n      checked,\n      defaultChecked\n    } = props;\n    this.state = {\n      checked: checked !== undefined ? checked : defaultChecked || false\n    };\n  }\n\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    if ('checked' in nextProps) {\n      this.setState({\n        checked: nextProps.checked\n      });\n    }\n  }\n\n  setChecked(checked) {\n    if (!('checked' in this.props)) {\n      this.setState({\n        checked\n      });\n    }\n  }\n\n  setIndeterminate() {\n    const {\n      indeterminate\n    } = this.props;\n    const input = this.inputRef;\n\n    if (indeterminate != null && input) {\n      input.indeterminate = indeterminate;\n    }\n  }\n\n  render() {\n    const _this$props = this.props,\n          {\n      label,\n      className,\n      children,\n      style\n    } = _this$props,\n          otherProps = _objectWithoutProperties(_this$props, [\"label\", \"className\", \"children\", \"style\"]);\n\n    delete otherProps.renderLabel;\n    let labelContents = label || (typeof children === 'string' ? children : null);\n    const {\n      checked\n    } = this.state;\n    return /*#__PURE__*/_react.default.createElement(\"label\", {\n      style: Object.assign({}, labelStyle, style)\n    }, /*#__PURE__*/_react.default.createElement(\"input\", _extends({\n      style: inputStyle,\n      ref: el => this.inputRef = el\n    }, otherProps, {\n      type: \"checkbox\",\n      checked: checked,\n      onChange: this.handleChange,\n      className: className\n    })), labelContents && labelContents.length > 0 && /*#__PURE__*/_react.default.createElement(\"span\", {\n      style: spanStyle\n    }, labelContents));\n  }\n\n}, _initialiseProps = function () {\n  this.handleChange = e => {\n    const {\n      onChange\n    } = this.props;\n    const {\n      checked\n    } = e.target;\n    this.setChecked(checked);\n\n    if (onChange) {\n      onChange(checked, e);\n    }\n  };\n}, _temp)) || _class;\n\nexports.default = UxpCheckbox;\n","\"use strict\";\n\nvar _UxpOptions = _interopRequireDefault(require(\"../utils/UxpOptions\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nmodule.exports = _UxpOptions.default.select('Dialog', () => require('./js/UxpDialog'), () => require('./js/Dialog'));\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _autobindDecorator = _interopRequireDefault(require(\"autobind-decorator\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _createId = _interopRequireDefault(require(\"../../utils/createId\"));\n\nvar _DialogButtons = _interopRequireDefault(require(\"./DialogButtons\"));\n\nvar _DialogHeader = _interopRequireDefault(require(\"./DialogHeader\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _FocusManager = require(\"../../utils/FocusManager\");\n\nvar _class, _class2, _temp;\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nif (process.env.SCALE_MEDIUM && process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/dialog/index.css\");\n\n  require(\"@adobe/spectrum-css/dist/components/dialog/index-diff.css\");\n} else if (process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/dialog/index-lg.css\");\n} else {\n  require(\"@adobe/spectrum-css/dist/components/dialog/index.css\");\n}\n\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHT) require(\"@adobe/spectrum-css/dist/components/dialog/multiStops/light.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARK) require(\"@adobe/spectrum-css/dist/components/dialog/multiStops/dark.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHTEST) require(\"@adobe/spectrum-css/dist/components/dialog/multiStops/lightest.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARKEST) require(\"@adobe/spectrum-css/dist/components/dialog/multiStops/darkest.css\");\n\nlet Dialog = (0, _autobindDecorator.default)(_class = (_temp = _class2 = class Dialog extends _react.Component {\n  constructor(props) {\n    super(props);\n    this.dialogId = (0, _createId.default)();\n  }\n  /*\n   * Calls the props.onConfirm() or props.onCancel() asynchronously if present,\n   * then props.onClose() on any response except false\n   */\n\n\n  _onAction(action, ...args) {\n    var _this = this;\n\n    return _asyncToGenerator(function* () {\n      let shouldClose = true;\n\n      if (action) {\n        shouldClose = yield action(...args);\n      }\n\n      if (shouldClose !== false) {\n        _this.props.onClose();\n      }\n    })();\n  }\n\n  onConfirm(...args) {\n    this._onAction(this.props.onConfirm, ...args);\n  }\n\n  onCancel() {\n    this._onAction(this.props.onCancel);\n  }\n\n  onFocus(e) {\n    if (this.props.onFocus) {\n      this.props.onFocus(e);\n    }\n  }\n\n  onKeyDown(e) {\n    const {\n      confirmDisabled,\n      keyboardConfirm,\n      onKeyDown,\n      disableEscKey\n    } = this.props;\n\n    if (onKeyDown) {\n      onKeyDown(e); // Do nothing if stopPropagation has been called on event after onKeyDown prop executes.\n\n      if (e.isPropagationStopped && e.isPropagationStopped()) {\n        return;\n      }\n    }\n\n    switch (e.key) {\n      case 'Enter':\n        if (!confirmDisabled && keyboardConfirm) {\n          this.onConfirm();\n        }\n\n        break;\n\n      case 'Esc':\n      case 'Escape':\n        if (!disableEscKey) {\n          this.onCancel();\n        }\n\n        break;\n\n      default:\n        if (this.props.trapFocus) {\n          (0, _FocusManager.trapFocus)(this, e);\n        }\n\n        break;\n    }\n  }\n\n  render() {\n    const _this$props = this.props,\n          {\n      children,\n      className = '',\n      cancelLabel,\n      confirmLabel,\n      secondaryLabel,\n      open,\n      title,\n      variant,\n      mode,\n      role,\n      tabIndex,\n      trapFocus,\n      isDismissible,\n      id = this.dialogId,\n      'aria-label': ariaLabel,\n      'aria-labelledby': ariaLabelledby,\n      'aria-describedby': ariaDescribedby,\n      'aria-modal': ariaModal\n    } = _this$props,\n          otherProps = _objectWithoutProperties(_this$props, [\"children\", \"className\", \"cancelLabel\", \"confirmLabel\", \"secondaryLabel\", \"open\", \"title\", \"variant\", \"mode\", \"role\", \"tabIndex\", \"trapFocus\", \"isDismissible\", \"id\", \"aria-label\", \"aria-labelledby\", \"aria-describedby\", \"aria-modal\"]);\n\n    const fullscreen = mode === 'fullscreen' || mode === 'fullscreenTakeover';\n    const derivedVariant = variant || (cancelLabel && confirmLabel ? 'confirmation' : 'information');\n    delete otherProps.modalContent;\n    delete otherProps.disableEscKey;\n    return (\n      /*#__PURE__*/\n      // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n      _react.default.createElement(\"div\", {\n        className: (0, _classnames.default)('spectrum-Dialog', 'react-spectrum-Dialog', {\n          [`spectrum-Dialog--${mode}`]: mode,\n          'spectrum-Dialog--error': variant === 'error',\n          'is-open': open,\n          'spectrum-Dialog--dismissible': isDismissible\n        }, className),\n        role: role\n        /* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex */\n        ,\n        tabIndex: tabIndex === undefined || trapFocus ? 1 : tabIndex,\n        onFocus: this.onFocus,\n        onKeyDown: this.onKeyDown,\n        id: id,\n        \"aria-label\": ariaLabel,\n        \"aria-labelledby\": ariaLabelledby || (title && !ariaLabel ? `${id}-heading` : null),\n        \"aria-describedby\": ariaDescribedby || (title && children ? `${id}-content` : null),\n        \"aria-modal\": ariaModal || trapFocus\n      }, title && /*#__PURE__*/_react.default.createElement(_DialogHeader.default, _extends({\n        variant: derivedVariant,\n        title: title,\n        fullscreen: fullscreen,\n        confirmLabel: confirmLabel,\n        secondaryLabel: secondaryLabel,\n        cancelLabel: cancelLabel,\n        isDismissible: isDismissible,\n        id: `${id}-heading`\n      }, otherProps, {\n        onConfirm: this.onConfirm,\n        onCancel: this.onCancel\n      })), title ? /*#__PURE__*/_react.default.createElement(\"div\", {\n        className: \"spectrum-Dialog-content\",\n        id: `${id}-content`\n      }, children) : children, !isDismissible && !fullscreen && confirmLabel && /*#__PURE__*/_react.default.createElement(_DialogButtons.default, _extends({}, this.props, {\n        variant: derivedVariant,\n        className: \"spectrum-Dialog-footer\",\n        onConfirm: this.onConfirm,\n        onCancel: this.onCancel\n      })))\n    );\n  }\n\n}, _class2.propTypes = {\n  /**\n   * Can dismiss by clicking on the backdrop\n   */\n  backdropClickable: _propTypes.default.bool,\n\n  /**\n   * Label of the cancel button\n   */\n  cancelLabel: _propTypes.default.string,\n\n  /**\n   * String of custom class names to add to the top level dom element of Dialog\n   */\n  className: _propTypes.default.string,\n\n  /**\n   * Confirm button is disabled\n   */\n  confirmDisabled: _propTypes.default.bool,\n\n  /**\n   * Label of the confirm button\n   */\n  confirmLabel: _propTypes.default.string,\n\n  /**\n   * Label for an additional button\n   */\n  secondaryLabel: _propTypes.default.string,\n\n  /**\n   * Callback when dialog closes\n   */\n  onClose: _propTypes.default.func,\n\n  /**\n   * Callback when cancel button clicked\n   */\n  onCancel: _propTypes.default.func,\n\n  /**\n   * Callback when confim button clicked. Has a paramater specifying which\n   * confirm button is clicked, \"primary\" or \"secondary\".\n   */\n  onConfirm: _propTypes.default.func,\n\n  /**\n   * Have dialog opened when mounted to DOM\n   */\n  open: _propTypes.default.bool,\n\n  /**\n   * Title of the dialog\n   */\n  title: _propTypes.default.node,\n\n  /**\n   * Affects the style used by the dialog, establishing its type\n   */\n  variant: _propTypes.default.oneOf(['confirmation', 'information', 'destructive', 'error']),\n\n  /**\n   *  Affects the display size of the dialog\n   */\n  mode: _propTypes.default.oneOf(['alert', 'fullscreen', 'fullscreenTakeover']),\n\n  /**\n   * For ARIA telling what type of dialog this is\n   */\n  role: _propTypes.default.oneOf(['dialog', 'alertdialog']),\n\n  /**\n   * Which button should be autoFocused after mounted to DOM\n   */\n  autoFocusButton: _propTypes.default.oneOf(['cancel', 'confirm', 'secondary', null]),\n\n  /**\n   * When true, allows user to press enter key and trigger confirm event and close dialog.\n   * When false, the user can still use keyboard navigation to close via the comfirm button.\n   */\n  keyboardConfirm: _propTypes.default.bool,\n\n  /**\n   * Keeps focus from escaping dialog\n   */\n  trapFocus: _propTypes.default.bool,\n\n  /**\n   * When true, the Esc key will not close the Dialog or trigger an onCancel event.\n   * Use for rare cases when a Dialog requires confirmation before being dismissed.\n   */\n  disableEscKey: _propTypes.default.bool,\n\n  /**\n   * Whether it is a dismissible dialogs. Dismissible dialogs should not have buttons.\n   */\n  isDismissible: _propTypes.default.bool\n}, _class2.defaultProps = {\n  backdropClickable: false,\n  confirmDisabled: false,\n  keyboardConfirm: false,\n  open: true,\n  role: 'dialog',\n  autoFocusButton: null,\n  onClose: function () {},\n  trapFocus: true,\n  disableEscKey: false,\n  isDismissible: false\n}, _temp)) || _class;\n\nexports.default = Dialog;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = DialogButtons;\n\nvar _Button = _interopRequireDefault(require(\"../../Button\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nrequire(\"../style/index.css\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nconst BUTTON_VARIANTS = {\n  confirmation: 'cta',\n  information: 'primary',\n  error: 'primary',\n  destructive: 'warning'\n};\n\nfunction DialogButtons({\n  autoFocusButton,\n  confirmLabel,\n  secondaryLabel,\n  cancelLabel,\n  confirmDisabled,\n  onConfirm,\n  onCancel,\n  className,\n  variant\n}) {\n  const confirmVariant = BUTTON_VARIANTS[variant] || 'primary';\n\n  let onKeyDown = event => {\n    if (event.key === ' ' || event.key === 'Enter') {\n      event.stopPropagation();\n    }\n  };\n\n  return /*#__PURE__*/_react.default.createElement(\"div\", {\n    className: (0, _classnames.default)('react-spectrum-Dialog-buttons', className)\n  }, cancelLabel && /*#__PURE__*/_react.default.createElement(_Button.default, {\n    variant: \"secondary\",\n    label: cancelLabel,\n    onClick: onCancel,\n    autoFocus: autoFocusButton === 'cancel',\n    onKeyDown: onKeyDown,\n    uxpUseNative: false\n  }), secondaryLabel && /*#__PURE__*/_react.default.createElement(_Button.default, {\n    variant: \"secondary\",\n    label: secondaryLabel,\n    onClick: onConfirm ? onConfirm.bind(null, 'secondary') : null,\n    autoFocus: autoFocusButton === 'secondary',\n    disabled: confirmDisabled || null,\n    onKeyDown: onKeyDown,\n    uxpUseNative: false\n  }), confirmLabel && /*#__PURE__*/_react.default.createElement(_Button.default, {\n    variant: confirmVariant,\n    label: confirmLabel,\n    onClick: onConfirm ? onConfirm.bind(null, 'primary') : null,\n    autoFocus: autoFocusButton === 'confirm',\n    disabled: confirmDisabled || null,\n    onKeyDown: onKeyDown,\n    uxpUseNative: false\n  }));\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = DialogHeader;\n\nvar _AlertMedium = _interopRequireDefault(require(\"../../Icon/core/AlertMedium\"));\n\nvar _Button = _interopRequireDefault(require(\"../../Button\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _CrossLarge = _interopRequireDefault(require(\"../../Icon/core/CrossLarge\"));\n\nvar _DialogButtons = _interopRequireDefault(require(\"./DialogButtons\"));\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _Heading = _interopRequireDefault(require(\"../../Heading\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nconst VARIANT_ICONS = {\n  error: _AlertMedium.default\n};\n\nfunction DialogHeader(_ref) {\n  let {\n    title,\n    variant,\n    fullscreen,\n    confirmDisabled,\n    confirmLabel,\n    secondaryLabel,\n    cancelLabel,\n    onConfirm,\n    onCancel,\n    onClose,\n    className,\n    autoFocusButton,\n    id,\n    isDismissible\n  } = _ref,\n      otherProps = _objectWithoutProperties(_ref, [\"title\", \"variant\", \"fullscreen\", \"confirmDisabled\", \"confirmLabel\", \"secondaryLabel\", \"cancelLabel\", \"onConfirm\", \"onCancel\", \"onClose\", \"className\", \"autoFocusButton\", \"id\", \"isDismissible\"]);\n\n  let Icon = VARIANT_ICONS[variant];\n  return /*#__PURE__*/_react.default.createElement(\"div\", _extends({}, (0, _filterDOMProps.default)(otherProps), {\n    className: (0, _classnames.default)('spectrum-Dialog-header', `spectrum-Dialog-header--${variant}`, className)\n  }), /*#__PURE__*/_react.default.createElement(_Heading.default, {\n    size: 3,\n    className: \"spectrum-Dialog-title\",\n    id: id\n  }, title), Icon && /*#__PURE__*/_react.default.createElement(Icon, {\n    size: null,\n    className: \"spectrum-Dialog-typeIcon\"\n  }), isDismissible && !fullscreen && /*#__PURE__*/_react.default.createElement(_Button.default, {\n    className: \"spectrum-Dialog-closeButton\",\n    variant: \"action\",\n    onClick: onClose,\n    quiet: true,\n    icon: /*#__PURE__*/_react.default.createElement(_CrossLarge.default, {\n      size: \"L\"\n    })\n  }), fullscreen && confirmLabel && /*#__PURE__*/_react.default.createElement(_DialogButtons.default, {\n    autoFocusButton: autoFocusButton,\n    variant: variant,\n    cancelLabel: cancelLabel,\n    secondaryLabel: secondaryLabel,\n    confirmLabel: confirmLabel,\n    confirmDisabled: confirmDisabled,\n    onConfirm: onConfirm,\n    onCancel: onCancel\n  }));\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _UxpNativeDialog = _interopRequireDefault(require(\"./UxpNativeDialog\"));\n\nvar _UxpNonNativeDialog = _interopRequireDefault(require(\"./UxpNonNativeDialog\"));\n\nvar _UxpOptions = _interopRequireDefault(require(\"../../utils/UxpOptions\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\n// if isNative props is supplied as true AND platform has compositing (z-index) issues \n// use the native modal dialogs provided by the platform\n// else use the default spectrum dialog\nconst UxpDialog = _react.default.forwardRef((props, ref) => {\n  if (_UxpOptions.default.productNeedsOverlayFix && props && props.isNative === true) {\n    return /*#__PURE__*/_react.default.createElement(_UxpNativeDialog.default, _extends({}, props, {\n      ref: ref\n    }));\n  } else {\n    return /*#__PURE__*/_react.default.createElement(_UxpNonNativeDialog.default, _extends({}, props, {\n      ref: ref\n    }));\n  }\n});\n\nvar _default = UxpDialog;\nexports.default = _default;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = UxpDialogButtons;\n\nvar _Button = _interopRequireDefault(require(\"../../Button\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nrequire(\"../style/index.css\");\n\nrequire(\"../uxp-style/index.css\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst BUTTON_VARIANTS = {\n  confirmation: 'cta',\n  information: 'primary',\n  error: 'primary',\n  destructive: 'warning'\n};\n\nfunction UxpDialogButtons({\n  autoFocusButton,\n  confirmLabel,\n  secondaryLabel,\n  cancelLabel,\n  confirmDisabled,\n  onConfirm,\n  onCancel,\n  className,\n  variant\n}) {\n  const confirmVariant = BUTTON_VARIANTS[variant] || 'primary';\n\n  let onKeyDown = event => {\n    if (event.key === ' ' || event.key === 'Enter') {\n      event.stopPropagation();\n    }\n  };\n\n  return /*#__PURE__*/_react.default.createElement(\"div\", {\n    className: (0, _classnames.default)('react-spectrum-Dialog-buttons', className)\n  }, cancelLabel && /*#__PURE__*/_react.default.createElement(_Button.default, {\n    className: \"dialog-buttons-Override\",\n    variant: \"secondary\",\n    label: cancelLabel,\n    onClick: onCancel,\n    autoFocus: autoFocusButton === 'cancel',\n    onKeyDown: onKeyDown,\n    uxpUseNative: false\n  }), secondaryLabel && /*#__PURE__*/_react.default.createElement(_Button.default, {\n    className: \"dialog-buttons-Override\",\n    variant: \"secondary\",\n    label: secondaryLabel,\n    onClick: onConfirm ? onConfirm.bind(null, 'secondary') : null,\n    autoFocus: autoFocusButton === 'secondary',\n    disabled: confirmDisabled || null,\n    onKeyDown: onKeyDown,\n    uxpUseNative: false\n  }), confirmLabel && /*#__PURE__*/_react.default.createElement(_Button.default, {\n    className: \"dialog-buttons-Override\",\n    variant: confirmVariant,\n    label: confirmLabel,\n    onClick: onConfirm ? onConfirm.bind(null, 'primary') : null,\n    autoFocus: autoFocusButton === 'confirm',\n    disabled: confirmDisabled || null,\n    onKeyDown: onKeyDown,\n    uxpUseNative: false\n  }));\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = UxpDialogHeader;\n\nvar _AlertMedium = _interopRequireDefault(require(\"../../Icon/core/AlertMedium\"));\n\nvar _Button = _interopRequireDefault(require(\"../../Button\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _CrossLarge = _interopRequireDefault(require(\"../../Icon/core/CrossLarge\"));\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _Heading = _interopRequireDefault(require(\"../../Heading\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _UxpDialogButtons = _interopRequireDefault(require(\"./UxpDialogButtons\"));\n\nrequire(\"../uxp-style/index.css\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nconst VARIANT_ICONS = {\n  error: _AlertMedium.default\n};\n\nfunction UxpDialogHeader(_ref) {\n  let {\n    children = [],\n    title,\n    variant,\n    fullscreen,\n    confirmDisabled,\n    confirmLabel,\n    secondaryLabel,\n    cancelLabel,\n    onConfirm,\n    onCancel,\n    onClose,\n    className,\n    autoFocusButton,\n    id,\n    isDismissible\n  } = _ref,\n      otherProps = _objectWithoutProperties(_ref, [\"children\", \"title\", \"variant\", \"fullscreen\", \"confirmDisabled\", \"confirmLabel\", \"secondaryLabel\", \"cancelLabel\", \"onConfirm\", \"onCancel\", \"onClose\", \"className\", \"autoFocusButton\", \"id\", \"isDismissible\"]);\n\n  let Icon = VARIANT_ICONS[variant];\n  return /*#__PURE__*/_react.default.createElement(\"div\", _extends({}, (0, _filterDOMProps.default)(otherProps), {\n    className: (0, _classnames.default)('spectrum-Dialog-header', `spectrum-Dialog-header--${variant}`, 'spectrum-Dialog-header-Override', className)\n  }), /*#__PURE__*/_react.default.createElement(_Heading.default, {\n    size: 3,\n    className: \"spectrum-Dialog-title\",\n    id: id\n  }, title), Icon && /*#__PURE__*/_react.default.createElement(Icon, {\n    size: null,\n    className: \"spectrum-Dialog-typeIcon\"\n  }), isDismissible && !fullscreen && /*#__PURE__*/_react.default.createElement(_Button.default, {\n    className: \"spectrum-Dialog-closeButton\",\n    variant: \"action\",\n    onClick: onClose,\n    quiet: true,\n    icon: /*#__PURE__*/_react.default.createElement(_CrossLarge.default, {\n      size: \"L\"\n    })\n  }), fullscreen && confirmLabel && /*#__PURE__*/_react.default.createElement(_UxpDialogButtons.default, {\n    autoFocusButton: autoFocusButton,\n    variant: variant,\n    cancelLabel: cancelLabel,\n    confirmLabel: confirmLabel,\n    confirmDisabled: confirmDisabled,\n    onConfirm: onConfirm,\n    onCancel: onCancel\n  }), children);\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _autobindDecorator = _interopRequireDefault(require(\"autobind-decorator\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _Dialog = _interopRequireDefault(require(\"./Dialog\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _UxpDialogButtons = _interopRequireDefault(require(\"./UxpDialogButtons\"));\n\nvar _UxpDialogHeader = _interopRequireDefault(require(\"./UxpDialogHeader\"));\n\nrequire(\"../uxp-style/index.css\");\n\nvar _class, _class2, _temp;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nif (process.env.SCALE_MEDIUM && process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/dialog/index.css\");\n\n  require(\"@adobe/spectrum-css/dist/components/dialog/index-diff.css\");\n} else if (process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/dialog/index-lg.css\");\n} else {\n  require(\"@adobe/spectrum-css/dist/components/dialog/index.css\");\n}\n\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHT) require(\"@adobe/spectrum-css/dist/components/dialog/multiStops/light.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARK) require(\"@adobe/spectrum-css/dist/components/dialog/multiStops/dark.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHTEST) require(\"@adobe/spectrum-css/dist/components/dialog/multiStops/lightest.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARKEST) require(\"@adobe/spectrum-css/dist/components/dialog/multiStops/darkest.css\");\nconst DefaultSize = {\n  width: 'auto',\n  height: 'auto'\n};\nconst DefaultOptions = {\n  resize: 'none',\n  titleVisibility: 'hide',\n  size: DefaultSize,\n  maxSize: DefaultSize,\n  minSize: DefaultSize\n};\n\nlet UxpNativeDialog = (0, _autobindDecorator.default)(_class = (_temp = _class2 = class UxpNativeDialog extends _Dialog.default {\n  componentDidMount() {\n    let overrideOptions = null;\n    const {\n      size\n    } = this.props;\n\n    if (this.dialogElementRef) {\n      if (size && size.width && size.height) {\n        overrideOptions = {\n          resize: 'none',\n          titleVisibility: 'hide',\n          size: size,\n          maxSize: DefaultSize,\n          minSize: DefaultSize\n        };\n      }\n\n      this.dialogElementRef.showModal(overrideOptions ? overrideOptions : DefaultOptions).then(() => {}, () => {});\n      this.dialogElementRef.addEventListener('close', this.onDialogCloseEvent);\n      this.dialogElementRef.addEventListener('cancel', this.onDialogCancelEvent);\n      this.dialogElementRef.addEventListener('load', this.onDialogLoadEvent);\n    }\n  }\n\n  componentWillUnmount() {\n    if (this.dialogElementRef) {\n      this.dialogElementRef.removeEventListener('close', this.onDialogCloseEvent);\n      this.dialogElementRef.removeEventListener('cancel', this.onDialogCancelEvent);\n      this.dialogElementRef.removeEventListener('load', this.onDialogLoadEvent);\n    }\n  }\n\n  onDialogCloseEvent() {\n    this.dialogElementRef = null;\n  }\n\n  onDialogCancelEvent() {\n    this.dialogElementRef = null;\n  }\n\n  onDialogLoadEvent() {\n    if (this.props.onLoad) {\n      this.props.onLoad();\n    }\n  }\n\n  onConfirm(...args) {\n    this._onAction(this.props.onConfirm, ...args);\n\n    this.closeDialog();\n  }\n\n  onCancel() {\n    this._onAction(this.props.onCancel);\n\n    this.closeDialog();\n  }\n\n  closeDialog() {\n    this.dialogElementRef.close();\n  }\n\n  render() {\n    const _this$props = this.props,\n          {\n      children,\n      className = '',\n      cancelLabel,\n      confirmLabel,\n      secondaryLabel,\n      open,\n      title,\n      variant,\n      mode,\n      tabIndex,\n      trapFocus,\n      isDismissible,\n      id = this.dialogId,\n      'aria-label': ariaLabel,\n      'aria-labelledby': ariaLabelledby,\n      'aria-describedby': ariaDescribedby,\n      'aria-modal': ariaModal\n    } = _this$props,\n          otherProps = _objectWithoutProperties(_this$props, [\"children\", \"className\", \"cancelLabel\", \"confirmLabel\", \"secondaryLabel\", \"open\", \"title\", \"variant\", \"mode\", \"tabIndex\", \"trapFocus\", \"isDismissible\", \"id\", \"aria-label\", \"aria-labelledby\", \"aria-describedby\", \"aria-modal\"]);\n\n    const fullscreen = mode === 'fullscreen' || mode === 'fullscreenTakeover';\n    const derivedVariant = variant || (cancelLabel && confirmLabel ? 'confirmation' : 'information');\n    delete otherProps.modalContent;\n    delete otherProps.disableEscKey;\n    delete otherProps.onLoad;\n    return (\n      /*#__PURE__*/\n\n      /* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions */\n      _react.default.createElement(\"dialog\", {\n        id: id,\n        ref: el => this.dialogElementRef = el,\n        defaultpreventedkeys: ['Escape'],\n        onConfirm: this.onConfirm,\n        onCancel: this.onCancel\n      }, /*#__PURE__*/_react.default.createElement(\"div\", {\n        onFocus: this.onFocus,\n        onKeyDown: this.onKeyDown,\n        className: (0, _classnames.default)('uxp-Native-Dialog', 'spectrum-Dialog', 'react-spectrum-Dialog', {\n          [`spectrum-Dialog--${mode}`]: mode,\n          'spectrum-Dialog--error': variant === 'error',\n          'is-open': open,\n          'spectrum-Dialog--dismissible': isDismissible\n        }, 'spectrum-Dialog-Override', className)\n        /* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex */\n        ,\n        tabIndex: tabIndex === undefined || trapFocus ? 1 : tabIndex,\n        \"aria-label\": ariaLabel,\n        \"aria-labelledby\": ariaLabelledby || (title && !ariaLabel ? `${id}-heading` : null),\n        \"aria-describedby\": ariaDescribedby || (title && children ? `${id}-content` : null),\n        \"aria-modal\": ariaModal || trapFocus\n      }, title && /*#__PURE__*/_react.default.createElement(_UxpDialogHeader.default, _extends({\n        variant: derivedVariant,\n        title: title,\n        fullscreen: fullscreen,\n        confirmLabel: confirmLabel,\n        secondaryLabel: secondaryLabel,\n        cancelLabel: cancelLabel,\n        isDismissible: isDismissible,\n        id: `${id}-heading`\n      }, otherProps), /*#__PURE__*/_react.default.createElement(\"div\", {\n        className: \"dialogSeparator\"\n      })), title ? /*#__PURE__*/_react.default.createElement(\"div\", {\n        className: \"spectrum-Dialog-content\",\n        id: `${id}-content`\n      }, children) : children, !isDismissible && !fullscreen && confirmLabel && /*#__PURE__*/_react.default.createElement(_UxpDialogButtons.default, _extends({}, this.props, {\n        variant: derivedVariant,\n        className: \"spectrum-Dialog-footer\",\n        onConfirm: this.onConfirm,\n        onCancel: this.onCancel\n      }))))\n    );\n  }\n\n}, _class2.propTypes = _objectSpread({}, _Dialog.default.propTypes, {\n  /**\n   * When custom size for modal is required to render long-content\n   */\n  size: _propTypes.default.objectOf({\n    width: _propTypes.default.number,\n    height: _propTypes.default.number\n  })\n}), _temp)) || _class;\n\nexports.default = UxpNativeDialog;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _autobindDecorator = _interopRequireDefault(require(\"autobind-decorator\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _Dialog = _interopRequireDefault(require(\"./Dialog\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _UxpDialogButtons = _interopRequireDefault(require(\"./UxpDialogButtons\"));\n\nvar _UxpDialogHeader = _interopRequireDefault(require(\"./UxpDialogHeader\"));\n\nrequire(\"../uxp-style/index.css\");\n\nvar _class;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nif (process.env.SCALE_MEDIUM && process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/dialog/index.css\");\n\n  require(\"@adobe/spectrum-css/dist/components/dialog/index-diff.css\");\n} else if (process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/dialog/index-lg.css\");\n} else {\n  require(\"@adobe/spectrum-css/dist/components/dialog/index.css\");\n}\n\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHT) require(\"@adobe/spectrum-css/dist/components/dialog/multiStops/light.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARK) require(\"@adobe/spectrum-css/dist/components/dialog/multiStops/dark.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHTEST) require(\"@adobe/spectrum-css/dist/components/dialog/multiStops/lightest.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARKEST) require(\"@adobe/spectrum-css/dist/components/dialog/multiStops/darkest.css\");\n\nlet UxpNonNativeDialog = (0, _autobindDecorator.default)(_class = class UxpNonNativeDialog extends _Dialog.default {\n  render() {\n    const _this$props = this.props,\n          {\n      children,\n      className = '',\n      cancelLabel,\n      confirmLabel,\n      secondaryLabel,\n      open,\n      title,\n      variant,\n      mode,\n      role,\n      tabIndex,\n      trapFocus,\n      isDismissible,\n      id = this.dialogId,\n      'aria-label': ariaLabel,\n      'aria-labelledby': ariaLabelledby,\n      'aria-describedby': ariaDescribedby,\n      'aria-modal': ariaModal\n    } = _this$props,\n          otherProps = _objectWithoutProperties(_this$props, [\"children\", \"className\", \"cancelLabel\", \"confirmLabel\", \"secondaryLabel\", \"open\", \"title\", \"variant\", \"mode\", \"role\", \"tabIndex\", \"trapFocus\", \"isDismissible\", \"id\", \"aria-label\", \"aria-labelledby\", \"aria-describedby\", \"aria-modal\"]);\n\n    const fullscreen = mode === 'fullscreen' || mode === 'fullscreenTakeover';\n    const derivedVariant = variant || (cancelLabel && confirmLabel ? 'confirmation' : 'information');\n    delete otherProps.modalContent;\n    delete otherProps.disableEscKey;\n    return (\n      /*#__PURE__*/\n      // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n      _react.default.createElement(\"div\", {\n        className: (0, _classnames.default)('spectrum-Dialog', {\n          [`spectrum-Dialog--${mode}`]: mode,\n          'spectrum-Dialog--error': variant === 'error',\n          'is-open': open,\n          'spectrum-Dialog--dismissible': isDismissible\n        }, 'spectrum-Dialog-Override', className),\n        role: role,\n        defaultpreventedkeys: ['Escape']\n        /* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex */\n        ,\n        tabIndex: tabIndex === undefined || trapFocus ? 1 : tabIndex,\n        onFocus: this.onFocus,\n        onKeyDown: this.onKeyDown,\n        id: id,\n        \"aria-label\": ariaLabel,\n        \"aria-labelledby\": ariaLabelledby || (title && !ariaLabel ? `${id}-heading` : null),\n        \"aria-describedby\": ariaDescribedby || (title && children ? `${id}-content` : null),\n        \"aria-modal\": ariaModal || trapFocus\n      }, title && /*#__PURE__*/_react.default.createElement(_UxpDialogHeader.default, _extends({\n        variant: derivedVariant,\n        title: title,\n        fullscreen: fullscreen,\n        confirmLabel: confirmLabel,\n        secondaryLabel: secondaryLabel,\n        cancelLabel: cancelLabel,\n        isDismissible: isDismissible,\n        id: `${id}-heading`\n      }, otherProps, {\n        onConfirm: this.onConfirm,\n        onCancel: this.onCancel\n      }), /*#__PURE__*/_react.default.createElement(\"div\", {\n        className: \"dialogSeparator\"\n      })), title ? /*#__PURE__*/_react.default.createElement(\"div\", {\n        className: \"spectrum-Dialog-content\",\n        id: `${id}-content`\n      }, children) : children, !isDismissible && !fullscreen && confirmLabel && /*#__PURE__*/_react.default.createElement(_UxpDialogButtons.default, _extends({}, this.props, {\n        variant: derivedVariant,\n        className: \"spectrum-Dialog-footer\",\n        onConfirm: this.onConfirm,\n        onCancel: this.onCancel\n      })))\n    );\n  }\n\n}) || _class;\n\nexports.default = UxpNonNativeDialog;\n","\"use strict\";\n\nvar _UxpOptions = _interopRequireDefault(require(\"../utils/UxpOptions\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nmodule.exports = _UxpOptions.default.select('Dropdown', () => require('./js/UxpDropdown'), () => require('./js/Dropdown'));\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _autobindDecorator = _interopRequireDefault(require(\"autobind-decorator\"));\n\nvar _events = require(\"../../utils/events\");\n\nvar _createId = _interopRequireDefault(require(\"../../utils/createId\"));\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _Menu = require(\"../../Menu\");\n\nvar _OverlayTrigger = _interopRequireDefault(require(\"../../OverlayTrigger\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nvar _class, _class2, _temp;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nlet Dropdown = (0, _autobindDecorator.default)(_class = (_temp = _class2 = class Dropdown extends _react.default.Component {\n  constructor(props) {\n    super(props);\n    this.dropdownId = (0, _createId.default)();\n    this.state = {\n      open: false\n    };\n  }\n\n  onOpen(e) {\n    this.setState({\n      open: true\n    });\n\n    if (this.props.onOpen) {\n      this.props.onOpen(e);\n    }\n  }\n\n  onClose(e) {\n    this.setState({\n      open: false\n    });\n\n    if (e && (e.type === 'keyup' || e.type === 'keydown')) {\n      this.restoreFocusOnClose();\n    }\n\n    if (this.props.onClose) {\n      this.props.onClose(e);\n    }\n  }\n\n  onMenuClose() {\n    this.overlayTrigger.hide();\n    this.restoreFocusOnClose();\n  }\n\n  onSelect(...args) {\n    if (this.props.closeOnSelect) {\n      this.onMenuClose();\n    }\n\n    if (this.props.onSelect) {\n      this.props.onSelect(...args);\n    }\n  }\n\n  onClick(e) {\n    if (this.props.onClick) {\n      this.props.onClick(e);\n    }\n  }\n\n  onKeyDownTrigger(e) {\n    if (typeof e.isDefaultPrevented === 'function' && e.isDefaultPrevented() || e.defaultPrevented) {\n      return;\n    }\n\n    if (this.triggerRef) {\n      switch (e.key) {\n        case 'Enter':\n        case 'ArrowDown':\n        case ' ':\n          e.preventDefault();\n          e.stopPropagation();\n          this.triggerRef.onClick();\n          break;\n      }\n    }\n  }\n\n  restoreFocusOnClose() {\n    const node = _reactDom.default.findDOMNode(this.triggerRef);\n\n    if (node && node.focus) {\n      node.focus();\n    }\n  }\n\n  render() {\n    const _this$props = this.props,\n          {\n      alignRight,\n      closeOnSelect,\n      flip,\n      trigger,\n      boundariesElement,\n      onLongClick\n    } = _this$props,\n          otherProps = _objectWithoutProperties(_this$props, [\"alignRight\", \"closeOnSelect\", \"flip\", \"trigger\", \"boundariesElement\", \"onLongClick\"]);\n\n    const children = _react.default.Children.toArray(this.props.children);\n\n    const triggerChild = children.find(c => c.props.dropdownTrigger) || children[0];\n    const triggerId = triggerChild.props.id || this.dropdownId + '-trigger';\n    const menu = children.find(c => c.props.dropdownMenu || c.type === _Menu.Menu) || children[1];\n    const menuId = menu.props.id || this.dropdownId + '-menu';\n    delete otherProps.onOpen;\n    delete otherProps.onClose;\n    delete otherProps.onClick;\n    return /*#__PURE__*/_react.default.createElement(\"div\", (0, _filterDOMProps.default)(otherProps), children.map((child, index) => {\n      if (child === triggerChild) {\n        return /*#__PURE__*/_react.default.createElement(_OverlayTrigger.default, {\n          boundariesElement: boundariesElement,\n          target: this,\n          trigger: trigger,\n          placement: alignRight ? 'bottom right' : 'bottom left',\n          ref: t => this.overlayTrigger = t,\n          onLongClick: onLongClick,\n          onClick: this.onClick,\n          onShow: this.onOpen,\n          closeOnSelect: closeOnSelect,\n          key: index,\n          onHide: this.onClose,\n          flip: flip,\n          delayHide: 0\n        }, _react.default.cloneElement(triggerChild, {\n          id: triggerId,\n          'aria-haspopup': triggerChild.props['aria-haspopup'] || 'true',\n          'aria-expanded': this.state.open || null,\n          'aria-controls': this.state.open ? menuId : null,\n          onKeyDown: (0, _events.chain)(triggerChild.props.onKeyDown, this.onKeyDownTrigger),\n          ref: node => {\n            this.triggerRef = node;\n            const {\n              ref\n            } = triggerChild;\n\n            if (typeof ref === 'function') {\n              ref(node);\n            }\n          }\n        }), _react.default.cloneElement(menu, {\n          id: menuId,\n          'aria-labelledby': menu.props['aria-labelledby'] || triggerId,\n          onClose: this.onMenuClose,\n          onSelect: this.onSelect,\n          autoFocus: true,\n          closeOnSelect\n        }));\n      } else if (child !== menu) {\n        return child;\n      }\n    }));\n  }\n\n}, _class2.propTypes = {\n  /**\n   * If true, dropdown will close on selection of an item\n   */\n  closeOnSelect: _propTypes.default.bool,\n\n  /**\n   * Determines what kind of action opens the menu\n   */\n  trigger: _propTypes.default.oneOf(['click', 'longClick', 'hover', 'focus']),\n\n  /**\n   * Callback for when the dropdown is opened\n   */\n  onOpen: _propTypes.default.func,\n\n  /**\n   * Callback for when the dropdown is closed\n   */\n  onClose: _propTypes.default.func,\n\n  /**\n   * Callback for when an item is selected from the dropdown\n   */\n  onSelect: _propTypes.default.func,\n\n  /**\n   * Aligns the dropdown to the right or left of the button opening the dropdown\n   */\n  alignRight: _propTypes.default.bool,\n\n  /**\n   * Sets whether the overlay is flippable\n   */\n  flip: _propTypes.default.bool\n}, _class2.defaultProps = {\n  closeOnSelect: true,\n  trigger: 'click'\n}, _temp)) || _class;\n\nexports.default = Dropdown;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _Dropdown = _interopRequireDefault(require(\"./Dropdown\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _UxpProvider = require(\"../../Provider/js/UxpProvider\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar _default = props => /*#__PURE__*/_react.default.createElement(_UxpProvider.SpectrumContext.Consumer, null, ({\n  boundariesElement\n}) => /*#__PURE__*/_react.default.createElement(_Dropdown.default, _extends({}, props, {\n  boundariesElement: boundariesElement\n})));\n\nexports.default = _default;\n","\"use strict\";\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nmodule.exports = require('./js/DropdownButton');\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = DropdownButton;\n\nvar _Button = _interopRequireDefault(require(\"../../Button\"));\n\nvar _Dropdown = _interopRequireDefault(require(\"../../Dropdown\"));\n\nvar _Menu = require(\"../../Menu\");\n\nvar _More = _interopRequireDefault(require(\"../../Icon/More\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction DropdownButton(_ref) {\n  let {\n    alignRight,\n    onClose,\n    onOpen,\n    onSelect,\n    children,\n    closeOnSelect,\n    menuClassName,\n    holdAffordance,\n    onClick\n  } = _ref,\n      props = _objectWithoutProperties(_ref, [\"alignRight\", \"onClose\", \"onOpen\", \"onSelect\", \"children\", \"closeOnSelect\", \"menuClassName\", \"holdAffordance\", \"onClick\"]);\n\n  let trigger = holdAffordance ? 'longClick' : undefined;\n  return /*#__PURE__*/_react.default.createElement(_Dropdown.default, {\n    style: {\n      display: 'inline-block'\n    },\n    onClose: onClose,\n    onOpen: onOpen,\n    onClick: onClick,\n    onSelect: onSelect,\n    alignRight: alignRight,\n    closeOnSelect: closeOnSelect,\n    trigger: trigger\n  }, /*#__PURE__*/_react.default.createElement(_Button.default, _extends({\n    variant: \"action\",\n    quiet: true,\n    holdAffordance: holdAffordance,\n    icon: /*#__PURE__*/_react.default.createElement(_More.default, {\n      alt: \"\\u2026\"\n    })\n  }, props)), /*#__PURE__*/_react.default.createElement(_Menu.Menu, {\n    className: menuClassName,\n    dropdownMenu: true\n  }, children));\n}\n\nDropdownButton.propTypes = {\n  /**\n   * If true, dropdown will close on selection of an item\n   */\n  closeOnSelect: _propTypes.default.bool,\n\n  /**\n   * Callback for when the dropdown is opened\n   */\n  onOpen: _propTypes.default.func,\n\n  /**\n   * Callback for when the dropdown is closed\n   */\n  onClose: _propTypes.default.func,\n\n  /**\n   * Callback for when an item is selected from the dropdown\n   */\n  onSelect: _propTypes.default.func,\n\n  /**\n   * Aligns the dropdown to the right or left of the button opening the dropdown\n   */\n  alignRight: _propTypes.default.bool,\n\n  /**\n   * Custom classname to apply to the Menu\n   */\n  menuClassName: _propTypes.default.string,\n\n  /**\n   * Whether to activate using a long click\n   */\n  holdAffordance: _propTypes.default.bool\n};\n","\"use strict\";\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nmodule.exports = require('./js/Heading');\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = Heading;\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nconst VARIANTS = {\n  1: 'display',\n  2: 'pageTitle',\n  3: 'subtitle1',\n  4: 'subtitle2',\n  5: 'subtitle3',\n  6: 'subtitle3'\n};\nconst ELEMENTS = {\n  'display': 'h1',\n  'pageTitle': 'h2',\n  'subtitle1': 'h2',\n  'subtitle2': 'h3',\n  'subtitle3': 'h4'\n};\n\nfunction Heading(_ref) {\n  let {\n    variant,\n    size = 1,\n    // back-compat\n    children,\n    className\n  } = _ref,\n      otherProps = _objectWithoutProperties(_ref, [\"variant\", \"size\", \"children\", \"className\"]);\n\n  variant = variant || VARIANTS[size] || 'display';\n  const Element = ELEMENTS[variant];\n  return /*#__PURE__*/_react.default.createElement(Element, _extends({\n    className: (0, _classnames.default)('spectrum-Heading', `spectrum-Heading--${variant}`, className)\n  }, (0, _filterDOMProps.default)(otherProps)), children);\n}\n\nHeading.displayName = 'Heading';\nHeading.propTypes = {\n  /**\n   * Variant of the heading to display. This maps to different heading HTML elements:\n   * - display: h1\n   * - pageTitle: h2\n   * - subtitle1: h2\n   * - subtitle2: h3\n   * - subtitle3: h4\n   */\n  variant: _propTypes.default.oneOf(['display', 'pageTitle', 'subtitle1', 'subtitle2', 'subtitle3']),\n\n  /**\n   * Custom classname to apply to the heading.\n   */\n  className: _propTypes.default.string\n};\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M29 16h-9V7a1 1 0 0 0-1-1h-2a1 1 0 0 0-1 1v9H7a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h9v9a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1v-9h9a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M37 20H26V9a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v11H9a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1h11v11a1 1 0 0 0 1 1h4a1 1 0 0 0 1-1V26h11a1 1 0 0 0 1-1v-4a1 1 0 0 0-1-1z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'Add';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M16 2a16 16 0 1 0 16 16A16 16 0 0 0 16 2zm10 17a1 1 0 0 1-1 1h-7v7a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-7H7a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1h7V9a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v7h7a1 1 0 0 1 1 1z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M24 4.1A19.9 19.9 0 1 0 43.9 24 19.9 19.9 0 0 0 24 4.1zM36 25a1 1 0 0 1-1 1h-9v9a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-9h-9a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1h9v-9a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v9h9a1 1 0 0 1 1 1z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'AddCircle';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M17.127 2.579L.4 32.512A1 1 0 0 0 1.272 34h33.456a1 1 0 0 0 .873-1.488L18.873 2.579a1 1 0 0 0-1.746 0zM20 29.5a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-3a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5zm0-6a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-12a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M44.37 39.036L25.752 5.186a2 2 0 0 0-3.5 0L3.63 39.036A2 2 0 0 0 5.383 42h37.234a2 2 0 0 0 1.753-2.964zM24 39a3 3 0 1 1 3-3 3 3 0 0 1-3 3zm-2.4-10V15a1 1 0 0 1 1-1h2.8a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1h-2.8a1 1 0 0 1-1-1z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'Alert';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M35.087 20.17S29.206 7.832 28.442 5.813c-.729-1.926-1.669-3.729-3.729-3.729-2.31 0-3.511 1.674-3.729 3.729-.063.59-.2 2.474-.361 4.23h-5.249c-.2-2.131-.349-4.134-.358-4.23-.181-2.093-1.016-3.73-3.729-3.73-2.06 0-2.91 1.84-3.729 3.729C6.9 7.322.764 20.447.764 20.447h.014a8.2 8.2 0 1 0 15.73 3.263c0-.252-.015-1.466-.038-1.712h3.058c-.022.246-.038 1.461-.038 1.712a8.2 8.2 0 1 0 15.6-3.542zM8.3 29.082a5.37 5.37 0 1 1 5.37-5.37 5.37 5.37 0 0 1-5.37 5.37zm19.392 0a5.37 5.37 0 1 1 5.37-5.37 5.37 5.37 0 0 1-5.362 5.37z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M46.91 28.25S39.024 11.707 38 9c-.978-2.583-2.238-5-5-5-3.1 0-4.707 2.244-5 5a490.06 490.06 0 0 0-.484 5h-7.037c-.269-2.857-.468-4.871-.479-5-.244-2.8-1.366-5-5-5-2.762 0-3.9 2.467-5 5C9.122 11.024.889 28.622.889 28.622h.02A11 11 0 1 0 22 33c0-.338-.021-.67-.05-1h4.1c-.03.33-.05.662-.05 1a11 11 0 1 0 20.91-4.75zM11 40.2a7.2 7.2 0 1 1 7.2-7.2 7.2 7.2 0 0 1-7.2 7.2zm26 0a7.2 7.2 0 1 1 7.2-7.2 7.2 7.2 0 0 1-7.2 7.2z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'Browse';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M12.509 21.03a4.917 4.917 0 0 0-4.194 1.2 12.924 12.924 0 0 0-2.68 4.782c-.463 1.94-.9 3.772-3.359 4.772a.6.6 0 0 0-.341.712.9.9 0 0 0 .644.658 23.76 23.76 0 0 0 1.977.4c2.608.41 7.48.738 10.807-1.651 1.237-.848 2.836-2.982 2.822-4.547a6.813 6.813 0 0 0-5.676-6.326zM19.9 24.1c7.235-8.227 16.422-19.535 14.016-21.941S21.546 10.976 14.38 18.83a10.051 10.051 0 0 1 5.52 5.27z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M16.647 26.889a7.858 7.858 0 0 0-6.01 2.188 14.07 14.07 0 0 0-2.967 5.879c-.875 2.783-1.7 5.41-5.261 7.107a1 1 0 0 0 .264 1.89c.8.136 1.72.252 2.72.326 3.6.268 10.38.154 15.315-3.6a7.605 7.605 0 0 0 3.139-5.563 7.739 7.739 0 0 0-7.2-8.227zM26.53 30.1C36.51 18.977 47.871 5.715 45.094 2.938S29.335 13.15 19.48 23.8a11.4 11.4 0 0 1 7.05 6.3z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'Brush';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M33 2H5a1 1 0 0 0-1 1v30a1 1 0 0 0 1 1h11V22h6v12h11a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1zM12 26H6v-4h6zm0-8H6v-4h6zm0-8H6V6h6zm10 8h-6v-4h6zm0-8h-6V6h6zm10 16h-6v-4h6zm0-8h-6v-4h6zm0-8h-6V6h6z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M4 6v36a2 2 0 0 0 2 2h14V33a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v11h14a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2zm12 30H8v-4h8zm0-8H8v-4h8zm0-8H8v-4h8zm0-8H8V8h8zm12 16h-8v-4h8zm0-8h-8v-4h8zm0-8h-8V8h8zm12 24h-8v-4h8zm0-8h-8v-4h8zm0-8h-8v-4h8zm0-8h-8V8h8z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'Building';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M33 6h-3V3a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v26a1 1 0 0 0 1 1h3v3a1 1 0 0 0 1 1h26a1 1 0 0 0 1-1V7a1 1 0 0 0-1-1zM4 28V4h24v2H7a1 1 0 0 0-1 1v21zm28 4H8V8h14v14l4-3 4 3V8h2z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M43 10H11a1 1 0 0 0-1 1v32a1 1 0 0 0 1 1h32a1 1 0 0 0 1-1V11a1 1 0 0 0-1-1zm-3 30H14V14h26z\" }),\n  React.createElement(\"path\", { d: \"M10 34H8V8h26v2h4V5a1 1 0 0 0-1-1H5a1 1 0 0 0-1 1v32a1 1 0 0 0 1 1h5z\" }),\n  React.createElement(\"path\", { d: \"M29 28l4-3.5 4 3.5V14h-8v14z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'CCLibrary';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M31.312 7.725l-1.455-1.133a1 1 0 0 0-1.4.175L14.822 24.283l-6.647-6.612a1 1 0 0 0-1.414 0L5.436 19a1 1 0 0 0 0 1.415l8.926 8.9a1 1 0 0 0 1.5-.093L31.487 9.128a1 1 0 0 0-.175-1.403z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M41.3 9.834L38.33 7.52a1 1 0 0 0-1.4.175l-17.697 22.73-8.613-8.614a1 1 0 0 0-1.414 0l-2.695 2.695a1 1 0 0 0 0 1.414l12.432 12.447a1 1 0 0 0 1.5-.093l21.034-27.037a1 1 0 0 0-.177-1.403z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'Checkmark';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M8 14.02a2 2 0 0 1 3.411-1.411l6.578 6.572 6.578-6.572a2 2 0 0 1 2.874 2.773l-.049.049-7.992 7.984a2 2 0 0 1-2.825 0l-7.989-7.983A1.989 1.989 0 0 1 8 14.02z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M22.585 31.7L11.94 21.05a2 2 0 0 1 0-2.828l.282-.282a2.006 2.006 0 0 1 2.828 0L24 26.888l8.949-8.948a2.006 2.006 0 0 1 2.828 0l.282.282a2 2 0 0 1 0 2.828L25.414 31.7a2 2 0 0 1-2.829 0z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'ChevronDown';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M12 18a1.988 1.988 0 0 0 .585 1.409l7.983 7.98a2 2 0 1 0 2.871-2.772l-.049-.049L16.819 18l6.572-6.57a2 2 0 0 0-2.773-2.87l-.049.049-7.983 7.98A1.988 1.988 0 0 0 12 18z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M16.3 22.585L26.949 11.94a2 2 0 0 1 2.828 0l.282.282a2.006 2.006 0 0 1 0 2.828L21.112 24l8.948 8.949a2.006 2.006 0 0 1 0 2.828l-.282.282a2 2 0 0 1-2.828 0L16.3 25.414a2 2 0 0 1 0-2.829z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'ChevronLeft';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M24 18a1.988 1.988 0 0 1-.585 1.409l-7.983 7.98a2 2 0 1 1-2.871-2.772l.049-.049L19.181 18l-6.572-6.57a2 2 0 0 1 2.773-2.87l.049.049 7.983 7.98A1.988 1.988 0 0 1 24 18z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M31.7 25.414L21.05 36.059a2 2 0 0 1-2.828 0l-.282-.282a2.006 2.006 0 0 1 0-2.828L26.888 24l-8.948-8.949a2.006 2.006 0 0 1 0-2.828l.282-.282a2 2 0 0 1 2.828 0L31.7 22.585a2 2 0 0 1 0 2.829z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'ChevronRight';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"rect\", { height: \"14\", rx: \"1\", ry: \"1\", width: \"14\", x: \"2\", y: \"2\" }),\n  React.createElement(\"rect\", { height: \"14\", rx: \"1\", ry: \"1\", width: \"14\", x: \"20\", y: \"2\" }),\n  React.createElement(\"rect\", { height: \"14\", rx: \"1\", ry: \"1\", width: \"14\", x: \"2\", y: \"20\" }),\n  React.createElement(\"rect\", { height: \"14\", rx: \"1\", ry: \"1\", width: \"14\", x: \"20\", y: \"20\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"rect\", { height: \"18\", rx: \"2\", ry: \"2\", width: \"18\", x: \"4\", y: \"4\" }),\n  React.createElement(\"rect\", { height: \"18\", rx: \"2\", ry: \"2\", width: \"18\", x: \"26\", y: \"4\" }),\n  React.createElement(\"rect\", { height: \"18\", rx: \"2\", ry: \"2\", width: \"18\", x: \"4\", y: \"26\" }),\n  React.createElement(\"rect\", { height: \"18\", rx: \"2\", ry: \"2\", width: \"18\", x: \"26\", y: \"26\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'ClassicGridView';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M26.485 6.686L18 15.172 9.515 6.686a1 1 0 0 0-1.414 0L6.686 8.1a1 1 0 0 0 0 1.414L15.172 18l-8.486 8.485a1 1 0 0 0 0 1.414L8.1 29.314a1 1 0 0 0 1.414 0L18 20.828l8.485 8.485a1 1 0 0 0 1.414 0l1.415-1.413a1 1 0 0 0 0-1.414L20.828 18l8.485-8.485a1 1 0 0 0 0-1.414L27.9 6.686a1 1 0 0 0-1.415 0z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M35.314 8.444L24 19.757 12.686 8.444a1 1 0 0 0-1.414 0l-2.828 2.828a1 1 0 0 0 0 1.414L19.757 24 8.444 35.314a1 1 0 0 0 0 1.414l2.828 2.828a1 1 0 0 0 1.414 0L24 28.243l11.314 11.313a1 1 0 0 0 1.414 0l2.828-2.828a1 1 0 0 0 0-1.414L28.243 24l11.313-11.314a1 1 0 0 0 0-1.414l-2.828-2.828a1 1 0 0 0-1.414 0z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'Close';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M28.286 28a5.714 5.714 0 1 0 0-11.429 5.777 5.777 0 0 0-.645.037 7.239 7.239 0 1 0-14.153-2.876 6.1 6.1 0 0 0-7.473 7.461A3.429 3.429 0 1 0 5.43 28z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M38.143 36a7.857 7.857 0 0 0 0-15.714 7.94 7.94 0 0 0-.887.05 9.954 9.954 0 1 0-19.46-3.954A8.386 8.386 0 0 0 7.522 26.64 4.715 4.715 0 1 0 6.714 36z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'Cloud';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M27.688 14.026Q27.348 14 27 14a9.001 9.001 0 0 0-7.484 14H3.718A3.92 3.92 0 0 1 0 23.854c0-1.73 1.792-4.261 4.092-4.261a4.815 4.815 0 0 1-.134-1.577 6.254 6.254 0 0 1 6.399-6.075 7.743 7.743 0 0 1 2.098.291c.936-3.166 3.622-6.17 7.607-6.17a7.296 7.296 0 0 1 7.641 7.57c0 .133-.005.264-.015.394z\" }),\n  React.createElement(\"path\", { d: \"M26.969 15.813a7.25 7.25 0 1 0 7.25 7.25 7.255 7.255 0 0 0-7.25-7.25zm3.87 9.915a.92.92 0 0 1-.65 1.57.925.925 0 0 1-.65-.27L27.111 24.6l-2.426 2.427a.919.919 0 0 1-1.57-.65.914.914 0 0 1 .27-.65l2.426-2.427-2.393-2.418a.818.818 0 0 1-.307-.589 1.007 1.007 0 0 1 .957-.982.925.925 0 0 1 .65.27L27.111 22l2.393-2.419a.925.925 0 0 1 .65-.27 1.007 1.007 0 0 1 .957.982.818.818 0 0 1-.306.589L28.412 23.3z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M4.946 38H27.61a11.995 11.995 0 0 1 9.98-17.99s-.01-.947-.01-1.476A10.31 10.31 0 0 0 27.124 8c-5.392 0-9.008 4.182-10.274 8.499a10.404 10.404 0 0 0-2.839-.396 8.492 8.492 0 0 0-8.657 8.282 6.627 6.627 0 0 0 .18 2.15C2.426 26.535 0 29.987 0 32.347 0 35.748 1.774 38 4.946 38z\" }),\n  React.createElement(\"path\", { d: \"M38 22a10 10 0 1 0 10 10 10.01 10.01 0 0 0-10-10zm5.246 13.416a1.295 1.295 0 0 1-.915 2.211 1.302 1.302 0 0 1-.916-.381L38 33.83l-3.415 3.416a1.293 1.293 0 0 1-2.21-.915 1.286 1.286 0 0 1 .379-.915L36.17 32l-3.37-3.404a1.151 1.151 0 0 1-.43-.828 1.417 1.417 0 0 1 1.346-1.383 1.302 1.302 0 0 1 .916.38L38 30.17l3.368-3.404a1.302 1.302 0 0 1 .916-.381 1.417 1.417 0 0 1 1.346 1.383 1.151 1.151 0 0 1-.43.828L39.83 32z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'CloudDisconnected';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M27.688 14.026Q27.348 14 27 14a9.001 9.001 0 0 0-7.484 14H3.718A3.92 3.92 0 0 1 0 23.854c0-1.73 1.792-4.261 4.092-4.261a4.815 4.815 0 0 1-.134-1.577 6.254 6.254 0 0 1 6.399-6.075 7.743 7.743 0 0 1 2.098.291c.936-3.166 3.622-6.17 7.607-6.17a7.296 7.296 0 0 1 7.641 7.57c0 .133-.005.264-.015.394z\" }),\n  React.createElement(\"path\", { d: \"M26.969 15.813a7.25 7.25 0 1 0 7.25 7.25 7.255 7.255 0 0 0-7.25-7.25zm-1.076 2.462c0-.053.15-.137.26-.178a2.27 2.27 0 0 1 .824-.088 2.877 2.877 0 0 1 .87.087c.113.042.276.138.276.18v1.386a43.029 43.029 0 0 1-.366 4.778c0 .041-.028.247-.163.247H26.42c-.09 0-.146-.194-.167-.247-.045-.38-.36-3.27-.36-4.778zm1.17 10.1a1.238 1.238 0 1 1 1.238-1.239 1.239 1.239 0 0 1-1.238 1.239z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M4.946 38H27.61a11.995 11.995 0 0 1 9.98-17.99s-.01-.947-.01-1.476A10.31 10.31 0 0 0 27.124 8c-5.392 0-9.008 4.182-10.274 8.499a10.404 10.404 0 0 0-2.839-.396 8.492 8.492 0 0 0-8.657 8.282 6.627 6.627 0 0 0 .18 2.15C2.426 26.535 0 29.987 0 32.347 0 35.748 1.774 38 4.946 38z\" }),\n  React.createElement(\"path\", { d: \"M38 22a10 10 0 1 0 10 10 10.01 10.01 0 0 0-10-10zm-1.487 3.2c0-.071.2-.182.346-.238a3.026 3.026 0 0 1 1.1-.117 3.837 3.837 0 0 1 1.16.117c.15.056.368.184.368.238v1.849a57.38 57.38 0 0 1-.488 6.371c0 .055-.038.33-.218.33h-1.565c-.12 0-.195-.259-.223-.33-.06-.508-.48-4.36-.48-6.371zM38 38.882a1.65 1.65 0 1 1 1.652-1.652A1.652 1.652 0 0 1 38 38.882z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'CloudError';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M23.614 6.145c-4.371-.7-9.005 0-9.648 2.092a2.293 2.293 0 0 0 1.294 2.909c1.152.647 2.6 2.673 1.139 4.54a2.827 2.827 0 0 1-3.124 1.126c-3.748-.946-7.893-2.881-11.285.345C-1.1 20.1.158 24.466 3.154 26.842a23.4 23.4 0 0 0 14.513 5.274C27.253 32.116 35.8 26.465 35.8 19c0-7.558-7.168-12.057-12.186-12.855zM8.694 27.453a3.8 3.8 0 1 1 3.8-3.8 3.8 3.8 0 0 1-3.8 3.8zM27.98 11.419a2.5 2.5 0 1 1-2.5 2.5 2.5 2.5 0 0 1 2.5-2.5zm-10.7 18.139A3.56 3.56 0 1 1 20.837 26a3.56 3.56 0 0 1-3.559 3.559zm7.79-1.5a3 3 0 1 1 3-3 3 3 0 0 1-3.002 3.005zM30 22.56a2.675 2.675 0 1 1 2.674-2.675A2.674 2.674 0 0 1 30 22.56z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M30.938 7.112c-5.4-.859-11.13 0-11.925 2.585a2.834 2.834 0 0 0 1.6 3.595c1.424.8 3.216 3.3 1.407 5.612a3.494 3.494 0 0 1-3.861 1.396c-4.633-1.17-9.755-3.561-13.948.427-3.822 3.63-2.263 9.028 1.439 11.966a28.925 28.925 0 0 0 17.938 6.518C35.436 39.211 46 32.226 46 23c0-9.341-8.86-14.9-15.062-15.888zM12.5 33.448a4.7 4.7 0 1 1 4.694-4.7 4.695 4.695 0 0 1-4.694 4.7zM38.233 13.7a2.834 2.834 0 1 1-2.833 2.833 2.833 2.833 0 0 1 2.833-2.833zM23.107 36.05a4.4 4.4 0 1 1 4.4-4.4 4.4 4.4 0 0 1-4.4 4.4zm9.629-1.85a3.714 3.714 0 1 1 3.713-3.714 3.714 3.714 0 0 1-3.713 3.714zm6.693-6.1a3.306 3.306 0 1 1 3.304-3.3 3.305 3.305 0 0 1-3.305 3.306z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'ColorPalette';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M35 6h-5V3a1 1 0 0 0-1-1h-2a1 1 0 0 0-1 1v3H12V3a1 1 0 0 0-1-1H9a1 1 0 0 0-1 1v3H3a1 1 0 0 0-1 1v26a1 1 0 0 0 1 1h32a1 1 0 0 0 1-1V7a1 1 0 0 0-1-1zm-1 26H4V8h4v1a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V8h14v1a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V8h4z\" }),\n  React.createElement(\"rect\", { height: \"8\", rx: \"1\", ry: \"1\", width: \"8\", x: \"22\", y: \"20\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M45 8h-7V5a1 1 0 0 0-1-1h-2a1 1 0 0 0-1 1v3H14V5a1 1 0 0 0-1-1h-2a1 1 0 0 0-1 1v3H3a1 1 0 0 0-1 1v32a1 1 0 0 0 1 1h42a1 1 0 0 0 1-1V9a1 1 0 0 0-1-1zm-3 30H6V12h4v1a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1v-1h20v1a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1v-1h4z\" }),\n  React.createElement(\"path\", { d: \"M28 25v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1h-8a1 1 0 0 0-1 1z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'Date';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M31.5 4H24V2a2 2 0 0 0-2-2H12a2 2 0 0 0-2 2v2H2.5a.5.5 0 0 0-.5.5v3a.5.5 0 0 0 .5.5h2l2.413 25.1a1 1 0 0 0 1 .9h18.179a1 1 0 0 0 1-.9L29.5 8h2a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 0-.5-.5zM12 2h10v2H12zm-.458 26.944l-1 .06a.5.5 0 0 1-.529-.469L8.87 11.49a.5.5 0 0 1 .469-.529l1-.06a.5.5 0 0 1 .529.469l1.145 17.045a.5.5 0 0 1-.471.529zM18 28.48a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5V11.4a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5zm5.985.056a.5.5 0 0 1-.529.469l-1-.06a.5.5 0 0 1-.469-.529l1.147-17.046a.5.5 0 0 1 .529-.469l1 .06a.5.5 0 0 1 .469.529z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M41 8h-9V6a4 4 0 0 0-4-4H18a4 4 0 0 0-4 4v2H5a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1h1.2l2 28a2 2 0 0 0 2 2h25.6a2 2 0 0 0 2-2l2-28H41a1 1 0 0 0 1-1V9a1 1 0 0 0-1-1zM15.982 39.353a1.013 1.013 0 0 1-.7.331l-.4.021h-.023a1.011 1.011 0 0 1-1.027-.951l-1.23-21.362a1 1 0 0 1 .951-1.052l.447-.023a1 1 0 0 1 1 .953l1.227 21.361a.992.992 0 0 1-.245.722zM24.2 38.7a1 1 0 0 1-1 1h-.4a1 1 0 0 1-1-1V17.3a1 1 0 0 1 1-1h.4a1 1 0 0 1 1 1zM28 8H18V6h10zm4.2 30.76a.992.992 0 0 1-.33.7 1.025 1.025 0 0 1-.682.258h-.033l-.4-.02a1 1 0 0 1-.693-.327.987.987 0 0 1-.258-.717l1.152-21.377a1 1 0 0 1 1-.95l.447.021a1 1 0 0 1 .693.327.977.977 0 0 1 .26.717z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'Delete';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M33.567 8.2L27.8 2.432a1.214 1.214 0 0 0-.866-.353H26.9a1.371 1.371 0 0 0-.927.406L5.084 23.372a1 1 0 0 0-.251.421L2.055 33.1c-.114.376.459.851.783.851a.274.274 0 0 0 .061-.006c.276-.064 7.867-2.344 9.312-2.779a.981.981 0 0 0 .414-.249l20.888-20.889a1.374 1.374 0 0 0 .4-.883 1.222 1.222 0 0 0-.346-.945zM11.4 29.316c-2.161.649-4.862 1.465-6.729 2.022l2.009-6.73z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M17.054 37.145c-3.1 1.116-6.975 2.516-9.652 3.475l3.456-9.653zm16.64-32.727L8.82 29.292a2.231 2.231 0 0 0-.521.814L4.115 41.659a1.654 1.654 0 0 0 2.171 2.186L17.9 39.713a2.23 2.23 0 0 0 .826-.526L43.59 14.274a1.887 1.887 0 0 0 .172-2.653l-7.42-7.382a1.888 1.888 0 0 0-2.648.179z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'Edit';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M30.946 2H3.054a1 1 0 0 0-.787 1.617L14 18.589V33.9a.992.992 0 0 0 1.68.825l3.98-4.153a1.221 1.221 0 0 0 .34-.845V18.589L31.733 3.617A1 1 0 0 0 30.946 2z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M42.885 4H5.119a1.464 1.464 0 0 0-1.136 2.388l16.1 19.671v18.417a1.464 1.464 0 0 0 2.46 1.073l4.93-5.445a1.464 1.464 0 0 0 .49-1.093V26.027L44.021 6.388A1.464 1.464 0 0 0 42.885 4z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'Filter';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M14.8 27a13.146 13.146 0 0 1 3.2-8.411c2.083-2.694 11.733-14.972 11.733-14.972A1 1 0 0 0 28.946 2H1.054a1 1 0 0 0-.787 1.617L12 18.589V33.9a.992.992 0 0 0 1.68.825l2.338-2.439A12.131 12.131 0 0 1 14.8 27z\" }),\n  React.createElement(\"path\", { d: \"M27 18.1a8.9 8.9 0 1 0 8.9 8.9 8.9 8.9 0 0 0-8.9-8.9zm-2.338 14.312l-4.128-4.127a.5.5 0 0 1 0-.707l1.036-1.036a.5.5 0 0 1 .707 0l2.731 2.731 6.106-6.106a.5.5 0 0 1 .707 0l1.043 1.043a.5.5 0 0 1 0 .707l-7.5 7.5a.5.5 0 0 1-.702-.005z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M20.3 36c0-4.157 1.449-7.322 4.265-10.735S39.621 6.388 39.621 6.388A1.464 1.464 0 0 0 38.486 4H1.529A1.464 1.464 0 0 0 .393 6.388l15.686 19.671v18.417a1.464 1.464 0 0 0 2.46 1.073l3.256-2.886A14.465 14.465 0 0 1 20.3 36z\" }),\n  React.createElement(\"path\", { d: \"M36 24.1A11.9 11.9 0 1 0 47.9 36 11.9 11.9 0 0 0 36 24.1zm-2.229 19.8l-6.133-6.133a.5.5 0 0 1 0-.707L29.4 35.3a.5.5 0 0 1 .707 0L34 39.188l8.939-8.94a.5.5 0 0 1 .707 0l1.887 1.887a.5.5 0 0 1 0 .707L34.479 43.9a.5.5 0 0 1-.708 0z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'FilterCheck';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M28.583 5.854a19.006 19.006 0 0 0-4.113.454 1.093 1.093 0 0 1-1.3-1.085V3.609a1.086 1.086 0 0 0-.814-1.061A19.5 19.5 0 0 0 17.75 2 19.154 19.154 0 0 0 8 4.648v15.165a19.1 19.1 0 0 1 9.76-2.646 1.1 1.1 0 0 1 1.073 1.1v3.739a.99.99 0 0 0 1.406.907 19.291 19.291 0 0 1 12.515-1.435A1.006 1.006 0 0 0 34 20.511V7.4a1 1 0 0 0-.751-.98 19.489 19.489 0 0 0-4.666-.566z\" }),\n  React.createElement(\"rect\", { height: \"34\", rx: \".5\", ry: \".5\", width: \"4\", x: \"2\", y: \"2\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M36.917 9.289a24.851 24.851 0 0 0-5.379.593 1.429 1.429 0 0 1-1.7-1.418V6.809a1.978 1.978 0 0 0-1.509-1.945 25.515 25.515 0 0 0-5.579-.614A25.048 25.048 0 0 0 10 7.712v19.832a24.98 24.98 0 0 1 12.765-3.461 1.44 1.44 0 0 1 1.4 1.439v3.807a2.01 2.01 0 0 0 2.843 1.812 25.245 25.245 0 0 1 14.637-1.569A1.982 1.982 0 0 0 44 27.619V11.848A1.978 1.978 0 0 0 42.491 9.9a25.515 25.515 0 0 0-5.574-.611z\" }),\n  React.createElement(\"rect\", { height: \"42\", rx: \"1\", ry: \"1\", width: \"4\", x: \"2\", y: \"4\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'Flag';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M33 32H3a1 1 0 0 1-1-1V10h31a1 1 0 0 1 1 1v20a1 1 0 0 1-1 1zM13.01 4.61A2 2 0 0 0 11.57 4H4a2 2 0 0 0-2 2v2h14.266z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M4 14v26a2 2 0 0 0 2 2h36a2 2 0 0 0 2-2V16a2 2 0 0 0-2-2zm14.01-9.39A2 2 0 0 0 16.57 4H8a4 4 0 0 0-4 4v2h19.266z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'Folder';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M14.7 27A12.293 12.293 0 0 1 34 16.893V11a1 1 0 0 0-1-1H2v21a1 1 0 0 0 1 1h12.769a12.24 12.24 0 0 1-1.069-5z\" }),\n  React.createElement(\"path\", { d: \"M27 18.1a8.9 8.9 0 1 0 8.9 8.9 8.9 8.9 0 0 0-8.9-8.9zm5 9.4a.5.5 0 0 1-.5.5H28v3.5a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5V28h-3.5a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5H26v-3.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5V26h3.5a.5.5 0 0 1 .5.5zM16 8H2V5.5A1.5 1.5 0 0 1 3.5 4h7.672a2 2 0 0 1 1.414.586z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M18.1 4.8a2 2 0 0 0-1.6-.8H6a2 2 0 0 0-2 2v4h18zm2 31.2A15.879 15.879 0 0 1 44 22.275V16a2 2 0 0 0-2-2H4v26a2 2 0 0 0 2 2h15.28a15.843 15.843 0 0 1-1.18-6z\" }),\n  React.createElement(\"path\", { d: \"M36 24.1A11.9 11.9 0 1 0 47.9 36 11.9 11.9 0 0 0 36 24.1zm8 13.4a.5.5 0 0 1-.5.5H38v5.5a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5V38h-5.5a.5.5 0 0 1-.5-.5v-3a.5.5 0 0 1 .5-.5H34v-5.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5V34h5.5a.5.5 0 0 1 .5.5z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'FolderAdd';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M12 6l4 4h14v4H6V7a1 1 0 0 1 1-1zm.5-2H7a3 3 0 0 0-3 3v7H.577a.5.5 0 0 0-.495.571l3.727 14.675a1 1 0 0 0 .969.754h26.444a1 1 0 0 0 .969-.754l3.727-14.675a.5.5 0 0 0-.495-.571H32V9a1 1 0 0 0-1-1H16.8l-3.5-3.6a1 1 0 0 0-.8-.4z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M16 8l6.437 6H40v6H8V9a1 1 0 0 1 1-1zm0-4H9a5 5 0 0 0-5 5v11H1.181a1 1 0 0 0-.987 1.164L3.7 40.359A2 2 0 0 0 5.668 42h36.664a2 2 0 0 0 1.968-1.641l3.506-19.195A1 1 0 0 0 46.819 20H44v-8a2 2 0 0 0-2-2H24l-4.7-4.526A4.647 4.647 0 0 0 16 4z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'FolderOpen';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M7.146 13.769C6.1 9.982 8.8 8.352 8.534 5.116A16.073 16.073 0 0 0 2 18c0 9.112 7.943 14.542 13.554 15.732a6.9 6.9 0 0 0 1.046.168c2-5.1-1.773-10.789-4.263-14.494-2.075-3.088-3.959-1.18-5.191-5.637z\" }),\n  React.createElement(\"path\", { d: \"M32.781 19.031c-1.61-.613-2.991 1.475-3.114-4.164a5.764 5.764 0 0 1 1.667-4 3.08 3.08 0 0 1 .729-.349c-.191-.349-.4-.684-.62-1.018-.037.019-.071.044-.109.062-1.25.583-1.423.755-2 0a1.576 1.576 0 0 1 .346-2.326 15.985 15.985 0 0 0-11.654-5.221c2.028.028 4.447 1.53 3.213 3.929.185-.381-4.027-1.29-4.6-1.29-.772 0 1.576-2.889 1.36-2.639a16.08 16.08 0 0 0-6.615 1.423c1.093.706 2.311.459 3.543.764a3.006 3.006 0 0 1 1.1.452 3.7 3.7 0 0 0-1.1-.452c-1.818-.211.88 4.777.778 4.114.5-2.292 3.612-3.176 4.566-.147a3.741 3.741 0 0 1-.838 2.265c-1.41 1.854-1.7 5.154-2.4 4.31-6.59-2.7-5.865.871-3.7 3.258 3.463 3.82 1.706.392 6.242 2.392 3.648 1.608 8.038 1.989 6.967 3.2-3.241 3.67-2.56 6.1-8.293 10.4.478-.013 2-.165 2.311-.216a16.274 16.274 0 0 0 13.375-14.4 2.4 2.4 0 0 1-1.154-.347z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M9.527 18.358c-1.4-5.049 2.207-7.223 1.852-11.537A21.43 21.43 0 0 0 2.667 24c0 12.149 10.591 19.39 18.072 20.976a9.2 9.2 0 0 0 1.393.221c2.668-6.8-2.364-14.385-5.684-19.326-2.765-4.113-5.278-1.571-6.921-7.513z\" }),\n  React.createElement(\"path\", { d: \"M19.9 5.6s-.485.029-.619.163c-1.014 1.01 1.776 6.1 1.656 5.322.664-3.056 4.816-4.235 6.088-.2a4.989 4.989 0 0 1-1.117 3.02c-1.88 2.472-2.262 6.872-3.2 5.746-8.787-3.6-7.82 1.161-4.936 4.343 4.618 5.094 2.275.522 8.323 3.189 4.864 2.145 10.718 2.652 9.289 4.27-4.322 4.894-3.413 8.137-11.057 13.872.637-.017 2.665-.22 3.082-.288a21.7 21.7 0 0 0 17.833-19.2 3.2 3.2 0 0 1-1.539-.469c-2.147-.817-3.989 1.967-4.152-5.552a7.686 7.686 0 0 1 2.222-5.333 4.107 4.107 0 0 1 .972-.465 22.301 22.301 0 0 0-.826-1.357c-.05.026-.094.059-.145.083-1.667.778-1.9 1.007-2.667 0a2.1 2.1 0 0 1 .461-3.1 21.313 21.313 0 0 0-15.533-6.957c2.7.037 5.929 2.039 4.284 5.239.247-.508-5.369-1.72-6.133-1.72-1.029 0 1.853-3.519 1.814-3.519a21.439 21.439 0 0 0-8.82 1.9C16.637 5.526 19.9 5.6 19.9 5.6z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'Globe';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M7.146 13.769C6.1 9.982 8.8 8.352 8.534 5.116A16.073 16.073 0 0 0 2 18c0 9.112 7.943 14.542 13.554 15.732a6.9 6.9 0 0 0 1.046.168c2-5.1-1.773-10.789-4.263-14.494-2.075-3.088-3.959-1.18-5.191-5.637zm22.042 4.189a6.027 6.027 0 0 0-5.1 4.923 5.952 5.952 0 0 0 1.935 5.484L22.27 34.22a.5.5 0 0 0 .151.691l.842.54a.5.5 0 0 0 .691-.151l3.746-5.855a6 6 0 1 0 1.483-11.487zM30 27.9a4 4 0 1 1 4-4 4 4 0 0 1-4 4z\" }),\n  React.createElement(\"path\", { d: \"M32.063 10.518c-.192-.349-.4-.684-.62-1.018-.037.019-.07.044-.109.062-1.25.583-1.423.755-2 0a1.576 1.576 0 0 1 .347-2.326 15.984 15.984 0 0 0-11.655-5.221c2.027.028 4.446 1.53 3.213 3.929.186-.381-4.027-1.29-4.6-1.29-.772 0 1.575-2.889 1.36-2.639a16.085 16.085 0 0 0-6.615 1.423c1.094.706 2.311.46 3.544.764a3.014 3.014 0 0 1 1.1.452 3.711 3.711 0 0 0-1.1-.452c-1.818-.211.88 4.777.777 4.114.5-2.292 3.612-3.176 4.565-.147a3.742 3.742 0 0 1-.837 2.265c-1.411 1.854-1.7 5.154-2.4 4.31-6.591-2.7-5.865.871-3.7 3.258 3.464 3.82 1.706.392 6.242 2.392a26.464 26.464 0 0 0 2.916 1.05 8.023 8.023 0 0 1 6.533-5.469c.232-.03.46-.034.689-.045a25.037 25.037 0 0 1-.045-1.063 5.766 5.766 0 0 1 1.666-4 3.1 3.1 0 0 1 .729-.349z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M15.181 4.584c1.457.942 3.081.613 4.724 1.019a4.01 4.01 0 0 1 1.465.6A4.926 4.926 0 0 0 19.9 5.6c-2.424-.281 1.173 6.37 1.037 5.485.664-3.056 4.816-4.235 6.088-.2a4.991 4.991 0 0 1-1.117 3.02c-1.88 2.472-2.262 6.872-3.2 5.746-8.787-3.6-7.819 1.162-4.936 4.344 4.618 5.094 2.274.522 8.323 3.189a35.524 35.524 0 0 0 3.937 1.415 12 12 0 0 1 9.836-5.3 19.362 19.362 0 0 1-.316-3.486 7.687 7.687 0 0 1 2.222-5.333 4.109 4.109 0 0 1 .973-.465 21.822 21.822 0 0 0-.827-1.357c-.05.026-.094.059-.145.083-1.666.778-1.9 1.007-2.666 0a2.1 2.1 0 0 1 .461-3.1 21.312 21.312 0 0 0-15.535-6.954c2.7.037 5.929 2.04 4.284 5.239.247-.508-5.37-1.72-6.133-1.72-1.03 0 2.1-3.852 1.813-3.519a21.438 21.438 0 0 0-8.818 1.897zm-3.802 2.237A21.429 21.429 0 0 0 2.667 24c0 12.149 10.591 19.39 18.071 20.976a9.239 9.239 0 0 0 1.394.221c2.668-6.8-2.364-14.385-5.684-19.326-2.765-4.115-5.278-1.571-6.921-7.514-1.395-5.048 2.207-7.221 1.852-11.536zm24.609 35.37a7.92 7.92 0 0 0 4 1.112 8.08 8.08 0 1 0-6.323-3.151l-5.376 5.376a1 1 0 0 0 0 1.414l.766.765a1 1 0 0 0 1.414 0zm4-12.082A5.194 5.194 0 1 1 34.8 35.3a5.194 5.194 0 0 1 5.192-5.192z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'GlobeSearch';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M22.5 14.025a4.417 4.417 0 0 1-1.535 3.41c-.936.916-1.823 1.731-1.823 2.472a2.664 2.664 0 0 0 .384 1.361.105.105 0 0 1-.1.173h-2.083a.4.4 0 0 1-.312-.1 2.76 2.76 0 0 1-.576-1.707c0-1.162.7-1.9 1.848-3.09.791-.815 1.247-1.335 1.247-2.1 0-.89-.576-1.508-2.039-1.508a5.957 5.957 0 0 0-3.022.815.121.121 0 0 1-.191-.1v-2.4c0-.1 0-.2.1-.248a7.445 7.445 0 0 1 3.646-.866c2.873.005 4.456 1.712 4.456 3.888zm-5.925 11.124a1.679 1.679 0 1 1 3.358 0 1.575 1.575 0 0 1-1.679 1.731 1.6 1.6 0 0 1-1.679-1.731z\" }),\n  React.createElement(\"path\", { d: \"M18 2.1A15.9 15.9 0 1 0 33.9 18 15.9 15.9 0 0 0 18 2.1zm0 29.812A13.912 13.912 0 1 1 31.913 18 13.912 13.912 0 0 1 18 31.913z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M24 7.9A16.1 16.1 0 1 1 7.9 24 16.118 16.118 0 0 1 24 7.9zm0-3.8A19.9 19.9 0 1 0 43.9 24 19.9 19.9 0 0 0 24 4.1z\" }),\n  React.createElement(\"path\", { d: \"M29.724 18.665c0 3.52-4.544 5.536-4.544 7.361a3.363 3.363 0 0 0 .576 1.7.166.166 0 0 1-.16.256h-2.817a.415.415 0 0 1-.384-.16 3.451 3.451 0 0 1-.832-2.176c0-2.561 4.192-4.128 4.192-6.689 0-1.248-1.024-2.336-2.976-2.336a9.241 9.241 0 0 0-3.872.8c-.128.064-.224 0-.224-.128v-2.532c0-.128 0-.256.128-.32a10.943 10.943 0 0 1 4.769-.992c3.744 0 6.144 2.144 6.144 5.216zm-7.969 14.082a2.24 2.24 0 0 1 4.48 0A2.084 2.084 0 0 1 24 34.987a2.116 2.116 0 0 1-2.245-2.24z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'HelpOutline';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"circle\", { cx: \"23.8\", cy: \"12.6\", r: \"2.5\" }),\n  React.createElement(\"path\", { d: \"M34.875 4H1.125A1.068 1.068 0 0 0 0 5v26a1.068 1.068 0 0 0 1.125 1h33.75A1.068 1.068 0 0 0 36 31V5a1.068 1.068 0 0 0-1.125-1zM34 22a15.166 15.166 0 0 0-6.182-2c-2.939 0-5.477 4-8.416 4s-6.679-8-9.618-8C7.113 16 2 24 2 24V6h32z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"circle\", { cx: \"32.16\", cy: \"17.52\", r: \"3\" }),\n  React.createElement(\"path\", { d: \"M44 6H4a2 2 0 0 0-2 2v32a2 2 0 0 0 2 2h40a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2zm-2 22.8c-2.149-1.269-3.146-2.4-5.018-2.4-3.526 0-6.572 4.8-10.1 4.8s-8.015-9.6-11.542-9.6C12.136 21.6 6 31.2 6 31.2V10h36z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'Image';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M18 2a16 16 0 1 0 16 16A16 16 0 0 0 18 2zm-.3 4.3a2.718 2.718 0 0 1 2.864 2.824 2.665 2.665 0 0 1-2.864 2.863 2.706 2.706 0 0 1-2.864-2.864A2.717 2.717 0 0 1 17.7 6.3zM22 27a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1h1v-6h-1a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v9h1a1 1 0 0 1 1 1z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M24 4.1A19.9 19.9 0 1 0 43.9 24 19.9 19.9 0 0 0 24 4.1zm-.3 6.2a2.718 2.718 0 0 1 2.864 2.824 2.665 2.665 0 0 1-2.864 2.863 2.706 2.706 0 0 1-2.864-2.864A2.717 2.717 0 0 1 23.7 10.3zM28 35a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1h1v-8h-1a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v11h1a1 1 0 0 1 1 1z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'Info';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"circle\", { cx: \"18\", cy: \"12\", r: \"2.15\" }),\n  React.createElement(\"path\", { d: \"M20.333 24H20v-7.6a.4.4 0 0 0-.4-.4h-3.933s-1.167.032-1.167 1 1.167 1 1.167 1H16v6h-.333s-1.167.032-1.167 1 1.167 1 1.167 1h4.667s1.167-.033 1.167-1-1.168-1-1.168-1z\" }),\n  React.createElement(\"path\", { d: \"M18 2.1A15.9 15.9 0 1 0 33.9 18 15.9 15.9 0 0 0 18 2.1zm0 29.812A13.912 13.912 0 1 1 31.913 18 13.912 13.912 0 0 1 18 31.913z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M24 7.9A16.1 16.1 0 1 1 7.9 24 16.118 16.118 0 0 1 24 7.9zm0-3.8A19.9 19.9 0 1 0 43.9 24 19.9 19.9 0 0 0 24 4.1z\" }),\n  React.createElement(\"path\", { d: \"M21.56 14.747a2.24 2.24 0 0 1 4.48 0 2.084 2.084 0 0 1-2.24 2.24 2.116 2.116 0 0 1-2.24-2.24zM27.5 32H26V21a1 1 0 0 0-1-1h-4.5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5H22v10h-1.5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h7a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'InfoOutline';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M31.7 4.3a7.176 7.176 0 0 0-10.148 0c-.385.385-4.264 4.222-5.351 5.309a8.308 8.308 0 0 1 3.742.607c.52-.52 3.568-3.526 3.783-3.741a4.1 4.1 0 1 1 5.8 5.8l-7.118 7.115a4.623 4.623 0 0 1-3.372 1.3 3.953 3.953 0 0 1-2.7-1.109 4.161 4.161 0 0 1-1.241-1.625 2.026 2.026 0 0 0-.427.318l-1.636 1.712a7.134 7.134 0 0 0 1.227 1.673c2.8 2.8 7.874 2.364 10.676-.438l6.765-6.769a7.176 7.176 0 0 0 0-10.152z\" }),\n  React.createElement(\"path\", { d: \"M15.926 25.824c-.52.52-3.5 3.547-3.713 3.761a4.1 4.1 0 0 1-5.8-5.8L13.6 16.6a4.584 4.584 0 0 1 3.367-1.293 4.2 4.2 0 0 1 3.783 2.783 2.026 2.026 0 0 0 .427-.318l1.735-1.721a7.134 7.134 0 0 0-1.227-1.673 7.311 7.311 0 0 0-10.26.047l-7.186 7.187a7.176 7.176 0 0 0 10.148 10.149c.385-.385 4.194-4.242 5.281-5.329a8.308 8.308 0 0 1-3.742-.608z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M42.357 5.643a11.071 11.071 0 0 0-15.657 0c-.594.594-3.806 3.741-5.483 5.418a12.818 12.818 0 0 1 5.774.939c.8-.8 2.732-2.668 3.064-3A6.327 6.327 0 0 1 39 17.945l-8.2 8.2c-2.47 2.47-6.9 2.76-9.375.289a6.419 6.419 0 0 1-1.915-2.508 3.125 3.125 0 0 0-.659.49l-2.524 2.641a11.006 11.006 0 0 0 1.892 2.581c4.324 4.324 12.149 3.648 16.472-.676l7.666-7.662a11.071 11.071 0 0 0 0-15.657z\" }),\n  React.createElement(\"path\", { d: \"M20.8 36.072c-.8.8-2.524 2.6-2.855 2.93A6.327 6.327 0 0 1 9 30.055l8.214-8.214c2.471-2.471 6.854-2.75 9.325-.279a6.079 6.079 0 0 1 1.706 2.577 3.125 3.125 0 0 0 .659-.491l2.676-2.655a11.006 11.006 0 0 0-1.892-2.581 11.28 11.28 0 0 0-15.829.073L5.643 26.7A11.071 11.071 0 0 0 21.3 42.357c.594-.594 3.6-3.672 5.274-5.349a12.818 12.818 0 0 1-5.774-.936z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'Link';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M30 17.5V30H6V6h12.5a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 0-.5-.5H3a1 1 0 0 0-1 1v30a1 1 0 0 0 1 1h30a1 1 0 0 0 1-1V17.5a.5.5 0 0 0-.5-.5h-3a.5.5 0 0 0-.5.5z\" }),\n  React.createElement(\"path\", { d: \"M23.54 2.853l3.389 3.389-9.546 9.546a.5.5 0 0 0 0 .707l2.117 2.122a.5.5 0 0 0 .707 0l9.546-9.546 3.389 3.389a.5.5 0 0 0 .858-.353V2H23.893a.5.5 0 0 0-.353.853z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M40 24.5V40H8V8h15.5a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 0-.5-.5H5a1 1 0 0 0-1 1v38a1 1 0 0 0 1 1h38a1 1 0 0 0 1-1V24.5a.5.5 0 0 0-.5-.5h-3a.5.5 0 0 0-.5.5z\" }),\n  React.createElement(\"path\", { d: \"M30.241 4a1.008 1.008 0 0 0-.655 1.716l4.228 4.228-9.842 9.842a.5.5 0 0 0 0 .707l3.536 3.535a.5.5 0 0 0 .707 0l9.842-9.842 4.217 4.214a1 1 0 0 0 1.706-.655V4z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'LinkOut';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M29 16h-1v-2a10 10 0 0 0-20 0v2H7a1 1 0 0 0-1 1v16a1 1 0 0 0 1 1h22a1 1 0 0 0 1-1V17a1 1 0 0 0-1-1zm-17-2a6 6 0 0 1 12 0v2H12zm8 12.222V29a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-2.778a3 3 0 1 1 4 0z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M38 20h-2v-2a12 12 0 1 0-24 0v2h-2a2 2 0 0 0-2 2v20a2 2 0 0 0 2 2h28a2 2 0 0 0 2-2V22a2 2 0 0 0-2-2zM26 33.445V37a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-3.555a4 4 0 1 1 4 0zM32 20H16v-2a8 8 0 1 1 16 0z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'LockClosed';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M35.338 32.3L23.865 20.824a12.013 12.013 0 1 0-3.04 3.04L32.3 35.338a2.155 2.155 0 0 0 3.04-3.04zM4 14a10 10 0 1 1 10 10A10 10 0 0 1 4 14z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M4 20a16 16 0 0 0 24.991 13.233l9.888 9.888a3 3 0 0 0 4.242-4.242l-9.888-9.888A16 16 0 1 0 4 20zm3.9 0A12.1 12.1 0 1 1 20 32.1 12.114 12.114 0 0 1 7.9 20z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'Magnify';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"circle\", { cx: \"18\", cy: \"18\", r: \"4.1\" }),\n  React.createElement(\"circle\", { cx: \"30\", cy: \"18\", r: \"4.1\" }),\n  React.createElement(\"circle\", { cx: \"6\", cy: \"18\", r: \"4.1\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"circle\", { cx: \"24\", cy: \"24\", r: \"6\" }),\n  React.createElement(\"circle\", { cx: \"42\", cy: \"24\", r: \"6\" }),\n  React.createElement(\"circle\", { cx: \"6\", cy: \"24\", r: \"6\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'More';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"circle\", { cx: \"18\", cy: \"18\", r: \"4.1\" }),\n  React.createElement(\"circle\", { cx: \"18\", cy: \"6\", r: \"4.1\" }),\n  React.createElement(\"circle\", { cx: \"18\", cy: \"30\", r: \"4.1\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"circle\", { cx: \"24\", cy: \"24\", r: \"6\" }),\n  React.createElement(\"circle\", { cx: \"24\", cy: \"6\", r: \"6\" }),\n  React.createElement(\"circle\", { cx: \"24\", cy: \"42\", r: \"6\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'MoreVertical';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M6 16.5V6h24v24H19.5a.5.5 0 0 0-.5.5v3a.5.5 0 0 0 .5.5H33a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v13.5a.5.5 0 0 0 .5.5h3a.5.5 0 0 0 .5-.5z\" }),\n  React.createElement(\"path\", { d: \"M5.54 20.853l3.389 3.389-7.546 7.547a.5.5 0 0 0 0 .707L3.5 34.617a.5.5 0 0 0 .707 0l7.546-7.546 3.389 3.389a.5.5 0 0 0 .858-.353V20H5.893a.5.5 0 0 0-.353.853z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M8 21.5V8h32v32H26.5a.5.5 0 0 0-.5.5v3a.5.5 0 0 0 .5.5H43a1 1 0 0 0 1-1V5a1 1 0 0 0-1-1H5a1 1 0 0 0-1 1v16.5a.5.5 0 0 0 .5.5h3a.5.5 0 0 0 .5-.5z\" }),\n  React.createElement(\"path\", { d: \"M10.241 24a1.008 1.008 0 0 0-.655 1.716l4.228 4.228-9.842 9.842a.5.5 0 0 0 0 .707l3.536 3.535a.5.5 0 0 0 .707 0l9.842-9.842 4.217 4.214a1 1 0 0 0 1.706-.655V24z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'OpenIn';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M33 2H15a1 1 0 0 0-1 1v11h10v20h9a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1zm-11 8h-6V6h6zm10 16h-6v-4h6zm0-8h-6v-4h6zm0-8h-6V6h6z\" }),\n  React.createElement(\"path\", { d: \"M2 17v16a1 1 0 0 0 1 1h18a1 1 0 0 0 1-1V17a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1zm12 1h6v4h-6zM4 18h6v4H4zm0 8h6v4H4z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M42 4H18a2 2 0 0 0-2 2v10h12v28h14a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2zm-14 8h-8V8h8zm12 24h-8v-4h8zm0-8h-8v-4h8zm0-8h-8v-4h8zm0-8h-8V8h8z\" }),\n  React.createElement(\"path\", { d: \"M4 22v20a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V22a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2zm8 20H6v-4h6zm0-8H6v-4h6zm0-8H6v-4h6zm10 8h-6v-4h6zm0-8h-6v-4h6z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'Organisations';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"rect\", { height: \"28\", rx: \"1\", ry: \"1\", width: \"8\", x: \"6\", y: \"4\" }),\n  React.createElement(\"rect\", { height: \"28\", rx: \"1\", ry: \"1\", width: \"8\", x: \"20\", y: \"4\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"rect\", { height: \"40\", rx: \"2\", ry: \"2\", width: \"12\", x: \"8\", y: \"4\" }),\n  React.createElement(\"rect\", { height: \"40\", rx: \"2\", ry: \"2\", width: \"12\", x: \"28\", y: \"4\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'Pause';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M9.46 4H7a1 1 0 0 0-1 1v26a1 1 0 0 0 1 1h2.46a2 2 0 0 0 1.007-.272l22.064-12.866a1 1 0 0 0 0-1.725L10.467 4.272A2 2 0 0 0 9.46 4z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M10.853 4H8a2 2 0 0 0-2 2v36a2 2 0 0 0 2 2h2.853a4 4 0 0 0 2.12-.608l30.09-17.667a2 2 0 0 0 0-3.449L12.973 4.608A4 4 0 0 0 10.853 4z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'Play';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M33.191 1.113L1.8 10.478a.5.5 0 0 0-.08.926l7.92 3.954zM15.645 22.372L10.08 19.25v7.639a.713.713 0 0 0 1.174.544l3.795-3.2a12.242 12.242 0 0 1 .596-1.861zM27 14.8a12.288 12.288 0 0 1 2.786.329l5.851-12.765-22.548 14.667 4.435 2.229A12.273 12.273 0 0 1 27 14.8zm0 3.3a8.9 8.9 0 1 0 8.9 8.9 8.9 8.9 0 0 0-8.9-8.9zm5.826 12.267a.5.5 0 0 1 0 .707l-1.752 1.752a.5.5 0 0 1-.707 0L27 29.459l-3.367 3.367a.5.5 0 0 1-.707 0l-1.752-1.752a.5.5 0 0 1 0-.707L24.541 27l-3.367-3.367a.5.5 0 0 1 0-.707l1.752-1.752a.5.5 0 0 1 .707 0L27 24.541l3.367-3.367a.5.5 0 0 1 .707 0l1.752 1.752a.5.5 0 0 1 0 .707L29.459 27z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M44.194 4.424L2 17a1.065 1.065 0 0 0-.191 1.978l9.669 4.834zM20.312 33.627L12.066 29v10.185a.95.95 0 0 0 1.564.725l6.57-5.531c.025-.254.072-.502.112-.752zM36 20.2a15.863 15.863 0 0 1 4.125.56l7.33-14.669-31.377 19.951 5.74 2.895A15.887 15.887 0 0 1 36 20.2z\" }),\n  React.createElement(\"path\", { d: \"M36 24.1A11.9 11.9 0 1 0 47.9 36 11.9 11.9 0 0 0 36 24.1zm8.132 17.2a.5.5 0 0 1 0 .707l-2.122 2.125a.5.5 0 0 1-.707 0l-5.3-5.3-5.3 5.3a.5.5 0 0 1-.707 0l-2.128-2.122a.5.5 0 0 1 0-.707l5.3-5.3-5.3-5.3a.5.5 0 0 1 0-.707l2.122-2.121a.5.5 0 0 1 .707 0l5.3 5.3 5.3-5.3a.5.5 0 0 1 .707 0l2.122 2.121a.5.5 0 0 1 0 .707l-5.3 5.3z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'PublishRemove';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M22 14h-9.006a.994.994 0 0 0-.994.994v6.012a.994.994 0 0 0 .994.994H22v8.912a.5.5 0 0 0 .848.351L36 18 22.848 4.736a.5.5 0 0 0-.848.352z\" }),\n  React.createElement(\"rect\", { height: \"28\", rx: \".707\", ry: \".707\", width: \"4\", x: \"4\", y: \"4\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M27.067 18H16a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h11.067v10.519a1 1 0 0 0 1.707.707L46 24 28.774 6.774a1 1 0 0 0-1.707.707z\" }),\n  React.createElement(\"rect\", { height: \"40\", rx: \"1\", ry: \"1\", width: \"6\", x: \"4\", y: \"4\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'RailRightClose';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M2.71 13.286A15.983 15.983 0 0 1 29.879 7.3l3.268-3.445a.5.5 0 0 1 .853.352V16H22.788a.5.5 0 0 1-.354-.854l4.613-4.863a11.887 11.887 0 0 0-20.393 4.128.488.488 0 0 1-.594.334l-2.993-.816a.518.518 0 0 1-.357-.643zM13.222 20a.5.5 0 0 1 .354.854l-4.617 4.862a11.88 11.88 0 0 0 20.386-4.126.488.488 0 0 1 .594-.334l2.993.816a.518.518 0 0 1 .358.643A15.984 15.984 0 0 1 6.123 28.7l-3.269 3.446A.5.5 0 0 1 2 31.793V20z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M28.052 19.146l5.548-5.311a13.98 13.98 0 0 0-22.966 5.989l-5.728-1.79a19.969 19.969 0 0 1 33.025-8.345L43.146 4.7a.5.5 0 0 1 .854.35V20H28.405a.5.5 0 0 1-.353-.854zM19.651 28a.5.5 0 0 1 .354.853l-5.626 5.294a13.982 13.982 0 0 0 22.987-5.971l5.728 1.79a19.974 19.974 0 0 1-33.084 8.292L4.854 43.11A.5.5 0 0 1 4 42.757V28z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'Refresh';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M31 0h2v36h-2zm-5.412 31.7L15.633 4.21c-.041-.169-.083-.21-.252-.21h-4.152a.2.2 0 0 0-.21.21 4.559 4.559 0 0 1-.3 1.738L1.485 31.662c-.041.21.045.338.255.338h2.88a.3.3 0 0 0 .338-.255L8.09 23H18.7l3.161 8.79a.378.378 0 0 0 .339.21h3.218c.214 0 .256-.128.17-.3zM13.347 6.88h.041c.759 2.707 3.355 9.972 4.44 13.12h-8.87c1.59-4.584 3.704-10.546 4.389-13.12z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"rect\", { height: \"44\", rx: \".5\", ry: \".5\", width: \"2\", x: \"38\", y: \"2\" }),\n  React.createElement(\"path\", { d: \"M12.823 31.3L9.117 41.69a.36.36 0 0 1-.41.31h-3.5c-.255 0-.36-.155-.31-.41l11.218-31.224a5.534 5.534 0 0 0 .36-2.111.242.242 0 0 1 .256-.255h5.043c.205 0 .255.05.306.255L34.167 41.64c.1.205.054.36-.205.36h-3.908a.459.459 0 0 1-.41-.255L25.886 31.3zm11.882-3.958C23.57 24 20.333 14.994 19.353 11.5H19.3c-.875 3.292-3.342 10.186-5.3 15.844z\" }),\n  React.createElement(\"path\", { d: \"M12.823 31.3L9.117 41.69a.36.36 0 0 1-.41.31h-3.5c-.255 0-.36-.155-.31-.41l11.218-31.224a5.534 5.534 0 0 0 .36-2.111.242.242 0 0 1 .256-.255h5.043c.205 0 .255.05.306.255L34.167 41.64c.1.205.054.36-.205.36h-3.908a.459.459 0 0 1-.41-.255L25.886 31.3zm11.882-3.958C23.57 24 20.333 14.994 19.353 11.5H19.3c-.875 3.292-3.342 10.186-5.3 15.844z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'Rename';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M32.9 15.793h-3.111a11.934 11.934 0 0 0-1.842-4.507l2.205-2.206a1.1 1.1 0 0 0 0-1.56l-1.673-1.672a1.1 1.1 0 0 0-1.561 0l-2.205 2.2a11.935 11.935 0 0 0-4.507-1.841V3.1A1.1 1.1 0 0 0 19.1 2h-2.2a1.1 1.1 0 0 0-1.1 1.1v3.112a11.935 11.935 0 0 0-4.507 1.841l-2.205-2.2a1.1 1.1 0 0 0-1.561 0L5.848 7.52a1.1 1.1 0 0 0 0 1.56l2.205 2.205a11.934 11.934 0 0 0-1.842 4.507H3.1A1.1 1.1 0 0 0 2 16.9v2.2a1.1 1.1 0 0 0 1.1 1.1h3.111a11.932 11.932 0 0 0 1.841 4.507l-2.2 2.2a1.1 1.1 0 0 0 0 1.56l1.672 1.672a1.1 1.1 0 0 0 1.561 0l2.2-2.2a11.934 11.934 0 0 0 4.507 1.842V32.9A1.1 1.1 0 0 0 16.9 34h2.2a1.1 1.1 0 0 0 1.1-1.1v-3.112a11.934 11.934 0 0 0 4.507-1.842l2.2 2.2a1.1 1.1 0 0 0 1.561 0l1.672-1.672a1.1 1.1 0 0 0 0-1.56l-2.2-2.2a11.932 11.932 0 0 0 1.841-4.507H32.9A1.1 1.1 0 0 0 34 19.1v-2.2a1.1 1.1 0 0 0-1.1-1.107zM22.414 18A4.414 4.414 0 1 1 18 13.586 4.414 4.414 0 0 1 22.414 18z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M42 20.7h-2.993a.487.487 0 0 1-.472-.374 14.882 14.882 0 0 0-1.664-4 .485.485 0 0 1 .07-.6l2.12-2.12a2 2 0 0 0 0-2.828l-1.838-1.84a2 2 0 0 0-2.828 0l-2.12 2.12a.485.485 0 0 1-.6.07 14.87 14.87 0 0 0-4-1.663.487.487 0 0 1-.374-.472V6a2 2 0 0 0-2-2H22.7a2 2 0 0 0-2 2v2.994a.487.487 0 0 1-.374.472 14.87 14.87 0 0 0-4 1.663.485.485 0 0 1-.6-.07l-2.12-2.12a2 2 0 0 0-2.828 0l-1.839 1.838a2 2 0 0 0 0 2.828l2.12 2.12a.485.485 0 0 1 .07.6 14.882 14.882 0 0 0-1.664 4 .487.487 0 0 1-.472.374H6a2 2 0 0 0-2 2v2.6a2 2 0 0 0 2 2h2.993a.487.487 0 0 1 .472.374 14.882 14.882 0 0 0 1.664 4 .485.485 0 0 1-.07.6l-2.12 2.12a2 2 0 0 0 0 2.828l1.839 1.839a2 2 0 0 0 2.829 0l2.12-2.12a.485.485 0 0 1 .6-.07 14.882 14.882 0 0 0 4 1.663.487.487 0 0 1 .374.472V42a2 2 0 0 0 2 2h2.6a2 2 0 0 0 2-2v-2.994a.487.487 0 0 1 .374-.472 14.882 14.882 0 0 0 4-1.663.485.485 0 0 1 .6.07l2.12 2.12a2 2 0 0 0 2.829 0l1.839-1.839a2 2 0 0 0 0-2.828l-2.12-2.12a.485.485 0 0 1-.07-.6 14.882 14.882 0 0 0 1.664-4 .487.487 0 0 1 .472-.374H42a2 2 0 0 0 2-2v-2.6a2 2 0 0 0-2-2zM24 31.5a7.5 7.5 0 1 1 7.5-7.5 7.5 7.5 0 0 1-7.5 7.5z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'Settings';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M24.476 7.165L18 0l-6.46 7.165a.5.5 0 0 0 .371.835H16v11.5a.5.5 0 0 0 .5.5h3a.5.5 0 0 0 .5-.5V8h4.1a.5.5 0 0 0 .376-.835z\" }),\n  React.createElement(\"path\", { d: \"M33 8h-6.5a.5.5 0 0 0-.5.5v3a.5.5 0 0 0 .5.5H30v16H6V12h3.5a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 0-.5-.5H3a1 1 0 0 0-1 1v22a1 1 0 0 0 1 1h30a1 1 0 0 0 1-1V9a1 1 0 0 0-1-1z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M45 12h-6.5a.5.5 0 0 0-.5.5v3a.5.5 0 0 0 .5.5H42v22H6V16h3.5a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 0-.5-.5H3a1 1 0 0 0-1 1v28a1 1 0 0 0 1 1h42a1 1 0 0 0 1-1V13a1 1 0 0 0-1-1z\" }),\n  React.createElement(\"path\", { d: \"M33.722 10.331L24 0l-9.708 10.331A1 1 0 0 0 15.035 12H20v13.5a.5.5 0 0 0 .5.5h7a.5.5 0 0 0 .5-.5V12h4.979a1 1 0 0 0 .743-1.669z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'Share';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"ellipse\", { cx: \"10.445\", cy: \"31.143\", rx: \"2.667\", ry: \"2.917\" }),\n  React.createElement(\"ellipse\", { cx: \"25.778\", cy: \"31.143\", rx: \"2.667\", ry: \"2.917\" }),\n  React.createElement(\"path\", { d: \"M29.326 23.857H10.469l.762-2.458H28a1.333 1.333 0 0 0 1.307-1.072L33.974 7.66a1.333 1.333 0 0 0-1.307-1.595h-.127v-.03H6.5l-1.289-3.5A1.333 1.333 0 0 0 3.889 1.4H1.333a1.333 1.333 0 1 0 0 2.667h1.406L8.667 20l-1.294 5.075A1.569 1.569 0 0 0 8.667 27h20.666a1.589 1.589 0 0 0 1.333-1.6 1.534 1.534 0 0 0-1.34-1.543zM7.529 8.836H30.6l-3.693 9.9H11.174z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M17.56 42a4 4 0 1 1-4-4 4 4 0 0 1 4 4zm20 0a4 4 0 1 1-4-4 4 4 0 0 1 4 4zm2-10H14.483l.922-4H39.56a2 2 0 0 0 1.961-1.608l4.44-18A2 2 0 0 0 44 6H11.78l-.41-2.294A2 2 0 0 0 9.392 2H4a2 2 0 0 0 0 4h3.667l3.893 19.9-1.94 7.611A2 2 0 0 0 11.56 36h28a2 2 0 1 0 0-4zm2-22l-3.641 14h-22.6l-2.692-14z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'ShoppingCart';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"rect\", { height: \"4\", rx: \"1\", ry: \"1\", width: \"28\", x: \"4\", y: \"16\" }),\n  React.createElement(\"rect\", { height: \"4\", rx: \"1\", ry: \"1\", width: \"28\", x: \"4\", y: \"6\" }),\n  React.createElement(\"rect\", { height: \"4\", rx: \"1\", ry: \"1\", width: \"28\", x: \"4\", y: \"26\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"rect\", { height: \"6\", rx: \"1\", ry: \"1\", width: \"32\", x: \"8\", y: \"20\" }),\n  React.createElement(\"rect\", { height: \"6\", rx: \"1\", ry: \"1\", width: \"32\", x: \"8\", y: \"8\" }),\n  React.createElement(\"rect\", { height: \"6\", rx: \"1\", ry: \"1\", width: \"32\", x: \"8\", y: \"32\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'ShowMenu';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M32 9.044v15h2.565a.431.431 0 0 1 .262.724l-3.971 3.955a.5.5 0 0 1-.706 0l-3.963-3.954a.431.431 0 0 1 .262-.724h2.565l.006-15a1 1 0 0 1 1-1h.993a.988.988 0 0 1 .987.999z\" }),\n  React.createElement(\"rect\", { height: \"4\", rx: \"1\", ry: \"1\", width: \"12\", x: \"2\", y: \"24\" }),\n  React.createElement(\"rect\", { height: \"4\", rx: \"1\", ry: \"1\", width: \"16\", x: \"2\", y: \"16\" }),\n  React.createElement(\"rect\", { height: \"4\", rx: \"1\", ry: \"1\", width: \"20\", x: \"2\", y: \"8\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M38 13v19l-3.405.011a.5.5 0 0 0-.349.862L40 38.615l5.766-5.742a.5.5 0 0 0-.349-.862L42 32V13a1 1 0 0 0-1-1h-2a1 1 0 0 0-1 1z\" }),\n  React.createElement(\"rect\", { height: \"4\", rx: \"1\", ry: \"1\", width: \"28\", x: \"4\", y: \"12\" }),\n  React.createElement(\"rect\", { height: \"4\", rx: \"1\", ry: \"1\", width: \"24\", x: \"4\", y: \"22\" }),\n  React.createElement(\"rect\", { height: \"4\", rx: \"1\", ry: \"1\", width: \"20\", x: \"4\", y: \"32\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'SortOrderDown';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M32 26.956v-15h2.565a.431.431 0 0 0 .262-.724l-3.971-3.956a.5.5 0 0 0-.706 0l-3.963 3.954a.431.431 0 0 0 .262.724h2.565l.006 15a1 1 0 0 0 1 1h.993a.988.988 0 0 0 .987-.998z\" }),\n  React.createElement(\"rect\", { height: \"4\", rx: \"1\", ry: \"1\", width: \"12\", x: \"2\", y: \"8\" }),\n  React.createElement(\"rect\", { height: \"4\", rx: \"1\", ry: \"1\", width: \"16\", x: \"2\", y: \"16\" }),\n  React.createElement(\"rect\", { height: \"4\", rx: \"1\", ry: \"1\", width: \"20\", x: \"2\", y: \"24\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M38 35V16l-3.405-.011a.5.5 0 0 1-.349-.862L40 9.385l5.766 5.742a.5.5 0 0 1-.349.862L42 16v19a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1z\" }),\n  React.createElement(\"rect\", { height: \"4\", rx: \"1\", ry: \"1\", width: \"28\", x: \"4\", y: \"32\" }),\n  React.createElement(\"rect\", { height: \"4\", rx: \"1\", ry: \"1\", width: \"24\", x: \"4\", y: \"22\" }),\n  React.createElement(\"rect\", { height: \"4\", rx: \"1\", ry: \"1\", width: \"20\", x: \"4\", y: \"12\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'SortOrderUp';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M5 4a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V8h8v20h-3a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1h-3V8h8v3a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V5a1 1 0 0 0-1-1z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M38 6H8a2 2 0 0 0-2 2v7a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1v-5h10v28h-3a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1h-3V10h10v5a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V8a2 2 0 0 0-2-2z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'Text';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M13.4 4c-4.5 0-8.919 3.623-9.353 8.105A9.008 9.008 0 0 0 13 22c1.05 0 3-.075 3-.075V33.5a.5.5 0 0 0 .5.5h2a.5.5 0 0 0 .5-.5V7h6v26.5a.5.5 0 0 0 .5.5h2a.5.5 0 0 0 .5-.5V5a1 1 0 0 0-1-1z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M18.412 4A12.276 12.276 0 0 0 6.1 14.427 12.012 12.012 0 0 0 18 28c1.4 0 4-.1 4-.1V43a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V8h8v35a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V6a2 2 0 0 0-2-2z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'TextParagraph';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M22.325 21.547v-2.224a1.539 1.539 0 0 1 .392-.993A11.746 11.746 0 0 0 25.388 11c0-5.547-2.942-8.647-7.387-8.647s-7.47 3.222-7.47 8.647a11.873 11.873 0 0 0 2.8 7.329 1.54 1.54 0 0 1 .392.993v2.214a1.528 1.528 0 0 1-1.333 1.542c-8.931.777-10.326 6.886-10.326 9.3 0 .268.032 1.321.051 1.585h31.857S34 32.642 34 32.374c0-2.309-1.577-8.4-10.346-9.286a1.535 1.535 0 0 1-1.329-1.541z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M29.026 27.832v-2.806a2.038 2.038 0 0 1 .455-1.253 17.506 17.506 0 0 0 3.1-9.86c0-7-3.419-10.3-8.585-10.3s-8.683 3.456-8.683 10.3a17.634 17.634 0 0 0 3.253 9.86 2.038 2.038 0 0 1 .455 1.253v2.794a1.888 1.888 0 0 1-1.549 1.946C6.182 30.881 4 38.96 4 42c0 .338.037 1.667.059 2h39.882c.023-.333.059-1.662.059-2 0-2.914-2.091-11.028-13.431-12.223a1.891 1.891 0 0 1-1.543-1.945z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'User';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M19.011 20.333v-2.084a1.442 1.442 0 0 1 .367-.93 11 11 0 0 0 2.5-6.866c0-5.2-2.756-8.1-6.919-8.1s-7 3.018-7 8.1a11.121 11.121 0 0 0 2.622 6.865 1.442 1.442 0 0 1 .367.93v2.074A1.431 1.431 0 0 1 9.7 21.768C1.338 22.5.031 28.218.031 30.474c0 .251.03 3.237.048 3.484h29.842s.026-3.234.026-3.484c0-2.163-1.478-7.864-9.691-8.7a1.437 1.437 0 0 1-1.245-1.441z\" }),\n  React.createElement(\"path\", { d: \"M27.374 19.534a1.342 1.342 0 0 1-1.16-1.346v-1.013a1.531 1.531 0 0 1 .342-.867 12.144 12.144 0 0 0 1.869-6.4c0-4.354-2.57-7.552-6.452-7.552-.232 0-.445.042-.668.062a10.931 10.931 0 0 1 2.974 8.037 13.46 13.46 0 0 1-2.869 8.171v.874c8.622 1.281 10.936 7.667 10.936 10.972 0 .108 0 .768-.01 1.484h3.586s.024-3.15.024-3.384a9.564 9.564 0 0 0-8.572-9.038z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M24.025 28.479v-2.694a1.958 1.958 0 0 1 .438-1.2 16.805 16.805 0 0 0 2.98-9.465c0-6.72-3.283-9.89-8.242-9.89s-8.336 3.317-8.336 9.89a16.925 16.925 0 0 0 3.126 9.469 1.948 1.948 0 0 1 .434 1.2v2.683a1.947 1.947 0 0 1-1.67 1.887C2.071 31.494 0 38.7 0 41.6V44h38v-2.4c0-2.782-1.59-10.024-12.319-11.235a1.949 1.949 0 0 1-1.656-1.886z\" }),\n  React.createElement(\"path\", { d: \"M36.559 27.851a1.755 1.755 0 0 1-1.5-1.7v-2.422a1.762 1.762 0 0 1 .394-1.083 15.125 15.125 0 0 0 2.682-8.519c0-6.048-2.954-8.9-7.418-8.9a8.337 8.337 0 0 0-2.289.338c1.729 2.17 2.851 5.273 2.851 9.552a20.732 20.732 0 0 1-3.417 11.32v.369C37.706 28.6 41.816 35.42 42 40h6v-2.4c0-2.5-1.787-8.664-11.441-9.749z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'UserGroup';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M14 25.013a2.737 2.737 0 0 1 1.833-2.86c0-3.219 2.049-4.882 3.108-5.964a10.942 10.942 0 0 0 2.939-7.736c0-5.2-2.756-8.1-6.919-8.1s-7 3.018-7 8.1a11.121 11.121 0 0 0 2.622 6.866 1.443 1.443 0 0 1 .367.93v2.074a1.431 1.431 0 0 1-1.25 1.444C1.338 20.5.031 26.217.031 28.474.031 28.725 0 30 0 30h14z\" }),\n  React.createElement(\"path\", { d: \"M32.987 24.013l-1 .038v-.718a7.205 7.205 0 0 0-6.567-7.323 6.94 6.94 0 0 0-7.313 6.93v1.111l-1.094-.039a1 1 0 0 0-1.012 1V35a1 1 0 0 0 1 1H33a1 1 0 0 0 1-1v-9.987a1 1 0 0 0-1.013-1zM20.882 22.94a4.164 4.164 0 1 1 8.328 0v1.111h-8.328zm5.552 8.482v1.928a.694.694 0 0 1-.694.694h-1.388a.694.694 0 0 1-.694-.694v-1.928a2.082 2.082 0 1 1 2.776 0z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M18 33a5 5 0 0 1 2.037-4.025 13.991 13.991 0 0 1 5.5-10.111 17.789 17.789 0 0 0 1.909-7.747c0-6.72-3.282-9.89-8.242-9.89s-8.336 3.317-8.336 9.89a16.927 16.927 0 0 0 3.126 9.469 1.949 1.949 0 0 1 .434 1.2v2.683a1.947 1.947 0 0 1-1.67 1.887C2.071 27.494 0 34.7 0 37.6V40h18zm27-1h-1v-2a10 10 0 0 0-20 0v2h-1a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h22a1 1 0 0 0 1-1V33a1 1 0 0 0-1-1zm-17-2a6 6 0 0 1 12 0v2H28zm8 10.222V43a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-2.779a3 3 0 1 1 4 0z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'UserLock';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"rect\", { height: \"8\", rx: \"1\", ry: \"1\", width: \"8\", x: \"2\", y: \"2\" }),\n  React.createElement(\"rect\", { height: \"4\", rx: \".5\", ry: \".5\", width: \"22\", x: \"12\", y: \"4\" }),\n  React.createElement(\"rect\", { height: \"4\", rx: \".5\", ry: \".5\", width: \"22\", x: \"12\", y: \"16\" }),\n  React.createElement(\"rect\", { height: \"4\", rx: \".5\", ry: \".5\", width: \"22\", x: \"12\", y: \"28\" }),\n  React.createElement(\"rect\", { height: \"8\", rx: \"1\", ry: \"1\", width: \"8\", x: \"2\", y: \"14\" }),\n  React.createElement(\"rect\", { height: \"8\", rx: \"1\", ry: \"1\", width: \"8\", x: \"2\", y: \"26\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"rect\", { height: \"10\", rx: \"2\", ry: \"2\", width: \"10\", x: \"4\", y: \"6\" }),\n  React.createElement(\"rect\", { height: \"10\", rx: \"2\", ry: \"2\", width: \"10\", x: \"4\", y: \"20\" }),\n  React.createElement(\"rect\", { height: \"10\", rx: \"2\", ry: \"2\", width: \"10\", x: \"4\", y: \"34\" }),\n  React.createElement(\"rect\", { height: \"6\", rx: \"1\", ry: \"1\", width: \"24\", x: \"18\", y: \"8\" }),\n  React.createElement(\"rect\", { height: \"6\", rx: \"1\", ry: \"1\", width: \"24\", x: \"18\", y: \"22\" }),\n  React.createElement(\"rect\", { height: \"6\", rx: \"1\", ry: \"1\", width: \"24\", x: \"18\", y: \"36\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'ViewList';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 36 36\" },\n  React.createElement(\"path\", { d: \"M24.613 8.58A14.973 14.973 0 0 0 18 6.937c-8.664 0-15.75 8.625-15.75 11.424 0 3 7.458 10.7 15.686 10.7 8.295 0 15.814-7.706 15.814-10.7 0-2.361-4.214-7.342-9.137-9.781zM18 27.225A9.225 9.225 0 1 1 27.225 18 9.225 9.225 0 0 1 18 27.225z\" }),\n  React.createElement(\"path\", { d: \"M20.667 18.083A2.667 2.667 0 0 1 18 15.417a2.631 2.631 0 0 1 1.35-2.269 4.912 4.912 0 0 0-1.35-.21A5.063 5.063 0 1 0 23.063 18a4.7 4.7 0 0 0-.175-1.2 2.623 2.623 0 0 1-2.221 1.283z\" })\n);\n\n","\"use strict\";\n\nvar React = require(\"react\");\nmodule.exports = React.createElement(\n  \"svg\",\n  { viewBox: \"0 0 48 48\" },\n  React.createElement(\"path\", { d: \"M32.817 11.44A19.965 19.965 0 0 0 24 9.249c-11.552 0-21 11.5-21 15.231 0 4 9.944 14.271 20.915 14.271C34.975 38.751 45 28.477 45 24.48c0-3.152-5.619-9.788-12.183-13.04zM24 36.3A12.3 12.3 0 1 1 36.3 24 12.3 12.3 0 0 1 24 36.3z\" }),\n  React.createElement(\"path\", { d: \"M27.556 24.111A3.556 3.556 0 0 1 24 20.555a3.508 3.508 0 0 1 1.8-3.026 6.551 6.551 0 0 0-1.8-.28A6.75 6.75 0 1 0 30.75 24a6.268 6.268 0 0 0-.233-1.594 3.5 3.5 0 0 1-2.961 1.705z\" })\n);\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Icon = require('../js/Icon');\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(_Icon2.default, _extends({}, props, { icon: { 18: require('./18'), 24: require('./24') } }));\n};\nWrappedIcon.displayName = 'Visibility';\n\nexports.default = WrappedIcon;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _Icon = require(\"../js/Icon\");\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(\n    _Icon2.default,\n    props,\n    _react2.default.createElement(\n      \"svg\",\n      { className: \"spectrum-UIIcon-AlertMedium\" },\n      _react2.default.createElement(\"path\", { d: \"M8.564 1.289L.2 16.256A.5.5 0 0 0 .636 17h16.728a.5.5 0 0 0 .5-.5.494.494 0 0 0-.064-.244L9.436 1.289a.5.5 0 0 0-.872 0zM10 14.75a.25.25 0 0 1-.25.25h-1.5a.25.25 0 0 1-.25-.25v-1.5a.25.25 0 0 1 .25-.25h1.5a.25.25 0 0 1 .25.25zm0-3a.25.25 0 0 1-.25.25h-1.5a.25.25 0 0 1-.25-.25v-6a.25.25 0 0 1 .25-.25h1.5a.25.25 0 0 1 .25.25z\", className: \"spectrum-UIIcon--medium\" }),\n      _react2.default.createElement(\"path\", { d: \"M10.563 2.206l-9.249 16.55a.5.5 0 0 0 .436.744h18.5a.5.5 0 0 0 .5-.5.494.494 0 0 0-.064-.244l-9.251-16.55a.5.5 0 0 0-.872 0zM12 17.25a.25.25 0 0 1-.25.25h-1.5a.25.25 0 0 1-.25-.25v-1.5a.25.25 0 0 1 .25-.25h1.5a.25.25 0 0 1 .25.25zm0-3.5a.25.25 0 0 1-.25.25h-1.5a.25.25 0 0 1-.25-.25v-6a.25.25 0 0 1 .25-.25h1.5a.25.25 0 0 1 .25.25z\", className: \"spectrum-UIIcon--large\" })\n    )\n  );\n};\n\nWrappedIcon.displayName = 'AlertMedium';\nexports.default = WrappedIcon;\n\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _Icon = require(\"../js/Icon\");\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(\n    _Icon2.default,\n    props,\n    _react2.default.createElement(\n      \"svg\",\n      { className: \"spectrum-UIIcon-CheckmarkMedium\" },\n      _react2.default.createElement(\"path\", { d: \"M4.5 10a1.023 1.023 0 0 1-.8-.384l-2.488-3a1 1 0 0 1 1.577-1.233L4.5 7.376l4.712-5.991a1 1 0 1 1 1.576 1.23l-5.511 7A.977.977 0 0 1 4.5 10z\", className: \"spectrum-UIIcon--medium\" }),\n      _react2.default.createElement(\"path\", { d: \"M6 14a1 1 0 0 1-.788-.385l-4-5a1 1 0 1 1 1.576-1.23L6 11.376l7.213-8.991a1 1 0 1 1 1.576 1.231l-8 10A1 1 0 0 1 6 14z\", className: \"spectrum-UIIcon--large\" })\n    )\n  );\n};\n\nWrappedIcon.displayName = 'CheckmarkMedium';\nexports.default = WrappedIcon;\n\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _Icon = require(\"../js/Icon\");\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(\n    _Icon2.default,\n    props,\n    _react2.default.createElement(\n      \"svg\",\n      { className: \"spectrum-UIIcon-CheckmarkSmall\" },\n      _react2.default.createElement(\"path\", { d: \"M3.788 9A1 1 0 0 1 3 8.615l-2.288-3a1 1 0 1 1 1.576-1.23l1.5 1.991 3.924-4.991a1 1 0 1 1 1.576 1.23l-4.712 6A1 1 0 0 1 3.788 9z\", className: \"spectrum-UIIcon--medium\" }),\n      _react2.default.createElement(\"path\", { d: \"M4.5 11a1 1 0 0 1-.788-.385l-3-4A.991.991 0 0 1 .5 6a1 1 0 0 1 1.788-.616L4.5 8.376l5.212-6.991a1 1 0 1 1 1.576 1.231l-6 8A1 1 0 0 1 4.5 11z\", className: \"spectrum-UIIcon--large\" })\n    )\n  );\n};\n\nWrappedIcon.displayName = 'CheckmarkSmall';\nexports.default = WrappedIcon;\n\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _Icon = require(\"../js/Icon\");\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(\n    _Icon2.default,\n    props,\n    _react2.default.createElement(\n      \"svg\",\n      { className: \"spectrum-UIIcon-ChevronRightMedium\" },\n      _react2.default.createElement(\"path\", { d: \"M5.99 5a1 1 0 0 0-.29-.707L1.717.3A1 1 0 1 0 .3 1.717L3.586 5 .3 8.283A1 1 0 1 0 1.717 9.7L5.7 5.707A1 1 0 0 0 5.99 5z\", className: \"spectrum-UIIcon--medium\" }),\n      _react2.default.createElement(\"path\", { d: \"M7.5 6a1 1 0 0 0-.293-.707L2.217.3A1 1 0 1 0 .8 1.717L5.086 6 .8 10.283A1 1 0 1 0 2.217 11.7l4.99-4.99A1 1 0 0 0 7.5 6z\", className: \"spectrum-UIIcon--large\" })\n    )\n  );\n};\n\nWrappedIcon.displayName = 'ChevronRightMedium';\nexports.default = WrappedIcon;\n\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _Icon = require(\"../js/Icon\");\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(\n    _Icon2.default,\n    props,\n    _react2.default.createElement(\n      \"svg\",\n      { className: \"spectrum-UIIcon-CornerTriangle\" },\n      _react2.default.createElement(\"path\", { d: \"M4.74.01a.25.25 0 0 0-.177.073l-4.48 4.48a.25.25 0 0 0 .177.427h4.48a.25.25 0 0 0 .25-.25V.26a.25.25 0 0 0-.25-.25z\", className: \"spectrum-UIIcon--medium\" }),\n      _react2.default.createElement(\"path\", { d: \"M5.74.01a.25.25 0 0 0-.177.073l-5.48 5.48a.25.25 0 0 0 .177.427h5.48a.25.25 0 0 0 .25-.25V.26a.25.25 0 0 0-.25-.25z\", className: \"spectrum-UIIcon--large\" })\n    )\n  );\n};\n\nWrappedIcon.displayName = 'CornerTriangle';\nexports.default = WrappedIcon;\n\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _Icon = require(\"../js/Icon\");\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(\n    _Icon2.default,\n    props,\n    _react2.default.createElement(\n      \"svg\",\n      { className: \"spectrum-UIIcon-CrossLarge\" },\n      _react2.default.createElement(\"path\", { d: \"M11.7 10.283L7.414 6 11.7 1.717A1 1 0 1 0 10.283.3L6 4.586 1.717.3A1 1 0 1 0 .3 1.717L4.586 6 .3 10.283A1 1 0 1 0 1.717 11.7L6 7.414l4.283 4.286a1 1 0 1 0 1.417-1.417z\", className: \"spectrum-UIIcon--medium\" }),\n      _react2.default.createElement(\"path\", { d: \"M15.7 14.283L9.414 8 15.7 1.717A1 1 0 1 0 14.283.3L8 6.586 1.717.3A1 1 0 1 0 .3 1.717L6.586 8 .3 14.283A1 1 0 1 0 1.717 15.7L8 9.414l6.283 6.286a1 1 0 1 0 1.417-1.417z\", className: \"spectrum-UIIcon--large\" })\n    )\n  );\n};\n\nWrappedIcon.displayName = 'CrossLarge';\nexports.default = WrappedIcon;\n\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _Icon = require(\"../js/Icon\");\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(\n    _Icon2.default,\n    props,\n    _react2.default.createElement(\n      \"svg\",\n      { className: \"spectrum-UIIcon-CrossMedium\" },\n      _react2.default.createElement(\"path\", { d: \"M7.77 6.709L5.061 4 7.77 1.291A.75.75 0 1 0 6.709.23L4 2.939 1.291.23A.75.75 0 1 0 .23 1.291L2.939 4 .23 6.709A.75.75 0 1 0 1.291 7.77L4 5.061 6.709 7.77A.75.75 0 1 0 7.77 6.709z\", className: \"spectrum-UIIcon--medium\" }),\n      _react2.default.createElement(\"path\", { d: \"M9.77 8.709L6.061 5 9.77 1.291A.75.75 0 1 0 8.709.23L5 3.939 1.291.23A.75.75 0 1 0 .23 1.291L3.939 5 .23 8.709A.75.75 0 1 0 1.291 9.77L5 6.061 8.709 9.77A.75.75 0 1 0 9.77 8.709z\", className: \"spectrum-UIIcon--large\" })\n    )\n  );\n};\n\nWrappedIcon.displayName = 'CrossMedium';\nexports.default = WrappedIcon;\n\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _Icon = require(\"../js/Icon\");\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(\n    _Icon2.default,\n    props,\n    _react2.default.createElement(\n      \"svg\",\n      { className: \"spectrum-UIIcon-CrossSmall\" },\n      _react2.default.createElement(\"path\", { d: \"M7.317 6.433L4.884 4l2.433-2.433a.625.625 0 0 0-.884-.884L4 3.116 1.567.683a.625.625 0 0 0-.884.884L3.116 4 .683 6.433a.625.625 0 0 0 .884.884L4 4.884l2.433 2.433a.625.625 0 0 0 .884-.884z\", className: \"spectrum-UIIcon--medium\" }),\n      _react2.default.createElement(\"path\", { d: \"M9.317 8.433L5.884 5l3.433-3.433a.625.625 0 0 0-.884-.884L5 4.116 1.567.683a.625.625 0 0 0-.884.884C.83 1.713 2.769 3.657 4.116 5L.683 8.433a.625.625 0 0 0 .884.884L5 5.884l3.433 3.433a.625.625 0 0 0 .884-.884z\", className: \"spectrum-UIIcon--large\" })\n    )\n  );\n};\n\nWrappedIcon.displayName = 'CrossSmall';\nexports.default = WrappedIcon;\n\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _Icon = require(\"../js/Icon\");\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(\n    _Icon2.default,\n    props,\n    _react2.default.createElement(\n      \"svg\",\n      { className: \"spectrum-UIIcon-DashSmall\" },\n      _react2.default.createElement(\"path\", { d: \"M8 4H2a1 1 0 0 0 0 2h6a1 1 0 0 0 0-2z\", className: \"spectrum-UIIcon--medium\" }),\n      _react2.default.createElement(\"path\", { d: \"M10.99 5H1.01a1 1 0 0 0 0 2h9.98a1 1 0 1 0 0-2z\", className: \"spectrum-UIIcon--large\" })\n    )\n  );\n};\n\nWrappedIcon.displayName = 'DashSmall';\nexports.default = WrappedIcon;\n\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _Icon = require(\"../js/Icon\");\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(\n    _Icon2.default,\n    props,\n    _react2.default.createElement(\n      \"svg\",\n      { className: \"spectrum-UIIcon-InfoMedium\" },\n      _react2.default.createElement(\"path\", { d: \"M9 1a8 8 0 1 0 8 8 8 8 0 0 0-8-8zm-.15 2.15a1.359 1.359 0 0 1 1.431 1.283v.129a1.332 1.332 0 0 1-1.223 1.432 1.444 1.444 0 0 1-.208 0 1.353 1.353 0 0 1-1.432-1.269 1.5 1.5 0 0 1 0-.164 1.359 1.359 0 0 1 1.3-1.412c.047-.002.089-.001.132.001zM11 13.5a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5H8V9h-.5a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 .5.5V12h.5a.5.5 0 0 1 .5.5z\", className: \"spectrum-UIIcon--medium\" }),\n      _react2.default.createElement(\"path\", { d: \"M11 2a9 9 0 1 0 9 9 9 9 0 0 0-9-9zm-.15 2.65a1.359 1.359 0 0 1 1.431 1.283v.129a1.332 1.332 0 0 1-1.224 1.432 1.444 1.444 0 0 1-.208 0 1.353 1.353 0 0 1-1.431-1.269 1.5 1.5 0 0 1 0-.164 1.359 1.359 0 0 1 1.3-1.412c.047-.002.089-.001.132.001zM13.5 16a.5.5 0 0 1-.5.5H9a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h1v-4H9a.5.5 0 0 1-.5-.5V9a.5.5 0 0 1 .5-.5h2.5a.5.5 0 0 1 .5.5v5.5h1a.5.5 0 0 1 .5.5z\", className: \"spectrum-UIIcon--large\" })\n    )\n  );\n};\n\nWrappedIcon.displayName = 'InfoMedium';\nexports.default = WrappedIcon;\n\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _Icon = require(\"../js/Icon\");\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(\n    _Icon2.default,\n    props,\n    _react2.default.createElement(\n      \"svg\",\n      { className: \"spectrum-UIIcon-Magnifier\" },\n      _react2.default.createElement(\"path\", { d: \"M15.77 14.709l-4.534-4.534a6.013 6.013 0 1 0-1.061 1.061l4.534 4.534a.75.75 0 1 0 1.061-1.061zM6.5 11A4.5 4.5 0 1 1 11 6.5 4.505 4.505 0 0 1 6.5 11z\", className: \"spectrum-UIIcon--medium\" }),\n      _react2.default.createElement(\"path\", { d: \"M19.77 18.709l-5.464-5.463a7.5 7.5 0 1 0-1.06 1.06l5.463 5.464a.75.75 0 1 0 1.061-1.061zM2.5 8.5a6 6 0 1 1 6 6 6.007 6.007 0 0 1-6-6z\", className: \"spectrum-UIIcon--large\" })\n    )\n  );\n};\n\nWrappedIcon.displayName = 'Magnifier';\nexports.default = WrappedIcon;\n\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _Icon = require(\"../js/Icon\");\n\nvar _Icon2 = _interopRequireDefault(_Icon);\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar WrappedIcon = function WrappedIcon(props) {\n  return _react2.default.createElement(\n    _Icon2.default,\n    props,\n    _react2.default.createElement(\n      \"svg\",\n      { className: \"spectrum-UIIcon-SuccessMedium\" },\n      _react2.default.createElement(\"path\", { d: \"M9 1a8 8 0 1 0 8 8 8 8 0 0 0-8-8zm5.333 4.54l-6.324 8.13a.6.6 0 0 1-.437.23h-.037a.6.6 0 0 1-.425-.176l-3.893-3.9a.6.6 0 0 1 0-.849l.663-.663a.6.6 0 0 1 .848 0L7.4 10.991l5.256-6.754a.6.6 0 0 1 .843-.1l.728.566a.6.6 0 0 1 .106.837z\", className: \"spectrum-UIIcon--medium\" }),\n      _react2.default.createElement(\"path\", { d: \"M11 2a9 9 0 1 0 9 9 9 9 0 0 0-9-9zm5.638 5.609L10.1 15.652a.5.5 0 0 1-.7.073.44.44 0 0 1-.039-.035L5.086 11.5a.5.5 0 0 1 0-.707l.707-.707a.5.5 0 0 1 .707 0L9.6 13.1l5.486-6.751a.5.5 0 0 1 .7-.073l.776.631a.5.5 0 0 1 .076.702z\", className: \"spectrum-UIIcon--large\" })\n    )\n  );\n};\n\nWrappedIcon.displayName = 'SuccessMedium';\nexports.default = WrappedIcon;\n\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = Icon;\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nif (process.env.SCALE_MEDIUM && process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/icon/index.css\");\n\n  require(\"@adobe/spectrum-css/dist/components/icon/index-diff.css\");\n} else if (process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/icon/index-lg.css\");\n} else {\n  require(\"@adobe/spectrum-css/dist/components/icon/index.css\");\n}\n\nconst SIZES = {\n  XXS: 18,\n  XS: 24,\n  S: 18,\n  M: 24,\n  L: 18,\n  XL: 24,\n  XXL: 24\n};\n\nfunction Icon(_ref) {\n  let {\n    icon,\n    // add, bell, heart, star\n    size = 'M',\n    // XS, S, M, L\n    className,\n    children,\n    'aria-label': ariaLabel,\n    'aria-hidden': ariaHidden,\n    role = 'img',\n    alt\n  } = _ref,\n      otherProps = _objectWithoutProperties(_ref, [\"icon\", \"size\", \"className\", \"children\", \"aria-label\", \"aria-hidden\", \"role\", \"alt\"]);\n\n  const sizeKey = SIZES[size];\n  let svg = icon && icon[sizeKey] || icon || children;\n\n  if (typeof svg === 'string') {\n    throw new Error('String icon names are deprecated. Please import icons from react-spectrum/Icon/IconName and render as <IconName />.');\n  }\n\n  if (!ariaHidden || ariaHidden === 'false') {\n    ariaHidden = undefined;\n  }\n\n  return _react.default.cloneElement(svg, _objectSpread({\n    focusable: 'false',\n    'aria-label': ariaLabel || alt,\n    'aria-hidden': ariaLabel || alt ? ariaHidden : true,\n    role,\n    className: (0, _classnames.default)(svg.props.className, 'spectrum-Icon', {\n      [`spectrum-Icon--size${size}`]: size\n    }, className)\n  }, otherProps));\n}\n\nIcon.displayName = 'Icon';\nIcon.propTypes = {\n  /**\n   * Size of icon, XXS to XXL\n   */\n  size: _propTypes.default.string\n};\n","\"use strict\";\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nmodule.exports = require('./js/IllustratedMessage');\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _Heading = _interopRequireDefault(require(\"../../Heading\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nif (process.env.SCALE_MEDIUM && process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/illustratedmessage/index.css\");\n\n  require(\"@adobe/spectrum-css/dist/components/illustratedmessage/index-diff.css\");\n} else if (process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/illustratedmessage/index-lg.css\");\n} else {\n  require(\"@adobe/spectrum-css/dist/components/illustratedmessage/index.css\");\n}\n\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHT) require(\"@adobe/spectrum-css/dist/components/illustratedmessage/multiStops/light.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARK) require(\"@adobe/spectrum-css/dist/components/illustratedmessage/multiStops/dark.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHTEST) require(\"@adobe/spectrum-css/dist/components/illustratedmessage/multiStops/lightest.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARKEST) require(\"@adobe/spectrum-css/dist/components/illustratedmessage/multiStops/darkest.css\");\n\n/**\n * An IllustratedMessage displays an illustration icon and a message, usually in an empty state or on an error page.\n */\nclass IllustratedMessage extends _react.default.Component {\n  isIllustrationDecorative() {\n    const {\n      illustration,\n      heading,\n      description\n    } = this.props;\n\n    if (illustration) {\n      const {\n        props\n      } = illustration;\n      const {\n        'aria-label': ariaLabel,\n        'aria-labelledby': ariaLabelledby,\n        'aria-hidden': ariaHidden\n      } = props; // If illustration is explicitly hidden for accessibility return the ariaHidden value.\n\n      if (ariaHidden != null) {\n        return ariaHidden;\n      } // If illustration is explicitly labelled using aria-label or aria-labelledby return null.\n\n\n      if (ariaLabel || ariaLabelledby) {\n        return false;\n      }\n    } // Otherwise, assume the image is decorative.\n\n\n    return !!(heading || description);\n  }\n\n  render() {\n    let _this$props = this.props,\n        {\n      illustration = null,\n      className,\n      heading,\n      description,\n      ariaLevel\n    } = _this$props,\n        otherProps = _objectWithoutProperties(_this$props, [\"illustration\", \"className\", \"heading\", \"description\", \"ariaLevel\"]);\n\n    if (illustration && (!illustration.props.className || !illustration.props.className.includes('spectrum-IllustratedMessage-illustration'))) {\n      illustration = _react.default.cloneElement(illustration, {\n        className: (0, _classnames.default)(illustration.props.className, 'spectrum-IllustratedMessage-illustration'),\n        'aria-hidden': this.isIllustrationDecorative() || null\n      });\n    }\n\n    return /*#__PURE__*/_react.default.createElement(\"div\", _extends({}, (0, _filterDOMProps.default)(otherProps), {\n      className: (0, _classnames.default)('spectrum-IllustratedMessage', className)\n    }), illustration, heading && /*#__PURE__*/_react.default.createElement(_Heading.default, {\n      variant: \"pageTitle\",\n      className: \"spectrum-IllustratedMessage-heading\",\n      \"aria-level\": ariaLevel\n    }, heading), description && /*#__PURE__*/_react.default.createElement(\"p\", {\n      className: \"spectrum-Body--secondary spectrum-IllustratedMessage-description\"\n    }, description));\n  }\n\n}\n\nexports.default = IllustratedMessage;\nIllustratedMessage.propTypes = {\n  /** The heading to be displayed */\n  heading: _propTypes.default.string,\n\n  /** The description to be displayed */\n  description: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.element]),\n\n  /** The illustration to be rendered above heading. Should be an SVG element. */\n  illustration: _propTypes.default.element,\n\n  /** The heading level for the heading element to preserve hierarchy of headings in web page for accessibility. */\n  ariaLevel: _propTypes.default.number\n};\nIllustratedMessage.defaultProps = {\n  heading: null,\n  description: null\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nObject.defineProperty(exports, \"List\", {\n  enumerable: true,\n  get: function () {\n    return _List.default;\n  }\n});\nexports.ListItem = void 0;\n\nvar _UxpOptions = _interopRequireDefault(require(\"../utils/UxpOptions\"));\n\nvar _List = _interopRequireDefault(require(\"./js/List\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2020 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nconst ListItem = _UxpOptions.default.select('ListItem', () => require('./js/UxpListItem'), () => require('./js/ListItem'));\n\nexports.ListItem = ListItem;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _convertUnsafeMethod = _interopRequireDefault(require(\"../../utils/convertUnsafeMethod\"));\n\nvar _createId = _interopRequireDefault(require(\"../../utils/createId\"));\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _FocusManager = _interopRequireDefault(require(\"../../utils/FocusManager\"));\n\nvar _focusRing = _interopRequireDefault(require(\"../../utils/focusRing\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _class, _class2, _temp;\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nif (process.env.SCALE_MEDIUM && process.env.SCALE_LARGE) {\n  require(\"../../spectrum-css-overrides/menu/index.css\");\n\n  require(\"../../spectrum-css-overrides/menu/index-diff.css\");\n} else if (process.env.SCALE_LARGE) {\n  require(\"../../spectrum-css-overrides/menu/index-lg.css\");\n} else {\n  require(\"../../spectrum-css-overrides/menu/index.css\");\n}\n\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHT) require(\"../../spectrum-css-overrides/menu/multiStops/light.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARK) require(\"../../spectrum-css-overrides/menu/multiStops/dark.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHTEST) require(\"../../spectrum-css-overrides/menu/multiStops/lightest.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARKEST) require(\"../../spectrum-css-overrides/menu/multiStops/darkest.css\");\nconst LIST_ITEM_SELECTOR = '.spectrum-Menu-item';\nconst NOT_DISABLED_SELECTOR = ':not(.is-disabled)';\nconst SELECTED_LIST_ITEM_SELECTOR = LIST_ITEM_SELECTOR + NOT_DISABLED_SELECTOR + '.is-selected';\n\nlet List = (0, _convertUnsafeMethod.default)(_class = (0, _focusRing.default)(_class = (_temp = _class2 = class List extends _react.Component {\n  constructor(props) {\n    super(props);\n    this.listId = (0, _createId.default)();\n  }\n\n  render() {\n    const _this$props = this.props,\n          {\n      className,\n      children,\n      role = 'listbox',\n      autoFocus,\n      selectable = false,\n      id = this.listId,\n      typeToSelect = true\n    } = _this$props,\n          otherProps = _objectWithoutProperties(_this$props, [\"className\", \"children\", \"role\", \"autoFocus\", \"selectable\", \"id\", \"typeToSelect\"]);\n\n    return /*#__PURE__*/_react.default.createElement(_FocusManager.default, {\n      itemSelector: LIST_ITEM_SELECTOR + NOT_DISABLED_SELECTOR,\n      selectedItemSelector: SELECTED_LIST_ITEM_SELECTOR,\n      typeToSelect: typeToSelect,\n      autoFocus: autoFocus\n    }, /*#__PURE__*/_react.default.createElement(\"ul\", _extends({\n      id: id,\n      className: (0, _classnames.default)('spectrum-Menu', {\n        'is-selectable': selectable\n      }, className),\n      role: role\n    }, (0, _filterDOMProps.default)(otherProps)), children));\n  }\n\n}, _class2.propTypes = {\n  /**\n   * Focus should immediately be given to the list upon render, specifically\n   * the currently selected item\n   */\n  autoFocus: _propTypes.default.bool,\n\n  /**\n   * Class added to this component\n   */\n  className: _propTypes.default.string,\n\n  /**\n   * The WAI-ARIA role for the list. Defaults to \"listbox\", but could be \"menu\" depending on context.\n   */\n  role: _propTypes.default.oneOf(['listbox', 'menu']),\n\n  /**\n   * Whether or not the list supports selection.\n   */\n  selectable: _propTypes.default.bool,\n\n  /**\n   * Whether to include alphanumeric typing as a way to move focus to items in a list.\n   */\n  typeToSelect: _propTypes.default.bool\n}, _class2.defaultProps = {\n  role: 'listbox'\n}, _temp)) || _class) || _class;\n\nexports.default = List;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _autobindDecorator = _interopRequireDefault(require(\"autobind-decorator\"));\n\nvar _CheckmarkMedium = _interopRequireDefault(require(\"../../Icon/core/CheckmarkMedium\"));\n\nvar _ChevronRightMedium = _interopRequireDefault(require(\"../../Icon/core/ChevronRightMedium\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _icon = require(\"../../utils/icon\");\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _events = require(\"../../utils/events\");\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _class, _class2, _temp;\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nlet ListItem =\n/**\n * An item in a list\n */\n(0, _autobindDecorator.default)(_class = (_temp = _class2 = class ListItem extends _react.Component {\n  handleMouseEnter(e) {\n    if (this.props.onMouseEnter) {\n      this.props.onMouseEnter(e);\n    } else {\n      e.currentTarget.focus();\n    }\n  }\n\n  handleFocus(e) {\n    if (this.props.onFocus) {\n      this.props.onFocus(e);\n    }\n  }\n\n  handleBlur(e) {\n    if (this.props.onBlur) {\n      this.props.onBlur(e);\n    }\n  }\n\n  onSelectFocused(e) {\n    e.preventDefault();\n\n    if (this.props.onClick) {\n      this.props.onClick(e);\n    }\n\n    if (this.props.onSelect && !e.isPropagationStopped()) {\n      this.props.onSelect(this.props.value, e);\n    }\n  }\n\n  onKeyDown(e) {\n    const {\n      onKeyDown,\n      disabled\n    } = this.props;\n\n    if (onKeyDown) {\n      onKeyDown(e);\n    }\n\n    if (!disabled) {\n      _events.interpretKeyboardEvent.call(this, e);\n    }\n  }\n\n  onTab(e) {\n    if (this.props.onTab) {\n      this.props.onTab(e);\n    }\n  }\n\n  render() {\n    const _this$props = this.props,\n          {\n      icon,\n      label,\n      className,\n      children,\n      selected,\n      disabled,\n      focused,\n      hasNestedMenu,\n      tabIndex = 0,\n      role = 'option'\n    } = _this$props,\n          otherProps = _objectWithoutProperties(_this$props, [\"icon\", \"label\", \"className\", \"children\", \"selected\", \"disabled\", \"focused\", \"hasNestedMenu\", \"tabIndex\", \"role\"]);\n\n    delete otherProps.value;\n    return (\n      /*#__PURE__*/\n\n      /* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions */\n      _react.default.createElement(\"li\", _extends({}, (0, _filterDOMProps.default)(otherProps), {\n        className: (0, _classnames.default)('spectrum-Menu-item', {\n          'is-selected': selected,\n          'is-disabled': disabled,\n          'is-focused': focused\n        }, className),\n        onKeyDown: this.onKeyDown,\n        onMouseEnter: disabled ? null : this.handleMouseEnter,\n        onFocus: disabled ? null : this.handleFocus,\n        onClick: disabled ? null : this.onSelectFocused,\n        onBlur: this.handleBlur\n        /* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex */\n        ,\n        tabIndex: !disabled ? tabIndex : null,\n        role: role,\n        \"aria-checked\": role === 'menuitemcheckbox' || role === 'menuitemradio' ? !!selected : null,\n        \"aria-selected\": role === 'option' ? !!selected || !!focused : null,\n        \"aria-disabled\": disabled || null\n      }), (0, _icon.cloneIcon)(icon, {\n        size: 'S'\n      }), /*#__PURE__*/_react.default.createElement(\"span\", {\n        className: \"spectrum-Menu-itemLabel\"\n      }, label || children), selected && /*#__PURE__*/_react.default.createElement(_CheckmarkMedium.default, {\n        size: null,\n        className: \"spectrum-Menu-checkmark\"\n      }), hasNestedMenu && /*#__PURE__*/_react.default.createElement(_ChevronRightMedium.default, {\n        className: \"spectrum-Menu-chevron\"\n      }))\n    );\n  }\n\n}, _class2.propTypes = {\n  /**\n   * Whether or not the list item is selected\n   */\n  selected: _propTypes.default.bool,\n\n  /**\n   * Whether or not  the list item is disabled\n   */\n  disabled: _propTypes.default.bool,\n\n  /**\n   * Callback for when the list item is clicked\n   */\n  onClick: _propTypes.default.func,\n\n  /**\n   * Callback for when the list item is selected\n   */\n  onSelect: _propTypes.default.func,\n\n  /**\n   * The WAI-ARIA role for the list item. Defaults to \"option\", but could be \"menuitem\", \"menuitemcheckbox\", or \"menuitemradio\" depending on context.\n   */\n  role: _propTypes.default.oneOf(['option', 'menuitem', 'menuitemcheckbox', 'menuitemradio'])\n}, _class2.defaultProps = {\n  selected: false,\n  disabled: false,\n  onSelect: function () {},\n  role: 'option'\n}, _temp)) || _class;\n\nexports.default = ListItem;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _autobindDecorator = _interopRequireDefault(require(\"autobind-decorator\"));\n\nvar _CheckmarkMedium = _interopRequireDefault(require(\"../../Icon/core/CheckmarkMedium\"));\n\nvar _ChevronRightMedium = _interopRequireDefault(require(\"../../Icon/core/ChevronRightMedium\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _icon = require(\"../../utils/icon\");\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _ListItem = _interopRequireDefault(require(\"./ListItem\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _class;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nlet UxpListItem = (0, _autobindDecorator.default)(_class = class UxpListItem extends _ListItem.default {\n  /*\n  This is a workaround done for https://jira.corp.adobe.com/browse/ID-4221363\n  The actual fix is to support event.preventDefault in a generic way in UXP.\n  MouseDown on ListItem triggers a blur event on search box in UXP, even though event is default prevented. \n  */\n  onUxpSelectFocused(e) {\n    e.preventDefault();\n\n    if (this.props.onUxpSelect && !e.isPropagationStopped()) {\n      this.props.onUxpSelect(this.props.value, e);\n    }\n  }\n\n  render() {\n    const _this$props = this.props,\n          {\n      icon,\n      label,\n      className,\n      children,\n      selected,\n      disabled,\n      focused,\n      hasNestedMenu,\n      tabIndex = 0,\n      role = 'option'\n    } = _this$props,\n          otherProps = _objectWithoutProperties(_this$props, [\"icon\", \"label\", \"className\", \"children\", \"selected\", \"disabled\", \"focused\", \"hasNestedMenu\", \"tabIndex\", \"role\"]);\n\n    delete otherProps.value;\n    delete otherProps.onMouseDown;\n    return (\n      /*#__PURE__*/\n\n      /* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions */\n      _react.default.createElement(\"li\", _extends({}, (0, _filterDOMProps.default)(otherProps), {\n        className: (0, _classnames.default)('spectrum-Menu-item', {\n          'is-selected': selected,\n          'is-disabled': disabled,\n          'is-focused': focused\n        }, className),\n        onKeyDown: this.onKeyDown,\n        onMouseEnter: disabled ? null : this.handleMouseEnter,\n        onFocus: disabled ? null : this.handleFocus,\n        onMouseDown: disabled ? null : this.onUxpSelectFocused,\n        onClick: disabled ? null : this.onSelectFocused,\n        onBlur: this.handleBlur\n        /* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex */\n        ,\n        tabIndex: !disabled ? tabIndex : null,\n        role: role,\n        \"aria-checked\": role === 'menuitemcheckbox' || role === 'menuitemradio' ? !!selected : null,\n        \"aria-selected\": role === 'option' ? !!selected || !!focused : null,\n        \"aria-disabled\": disabled || null\n      }), (0, _icon.cloneIcon)(icon, {\n        size: 'S'\n      }), /*#__PURE__*/_react.default.createElement(\"span\", {\n        className: \"spectrum-Menu-itemLabel\"\n      }, label || children), selected && /*#__PURE__*/_react.default.createElement(_CheckmarkMedium.default, {\n        size: null,\n        className: \"spectrum-Menu-checkmark\"\n      }), hasNestedMenu && /*#__PURE__*/_react.default.createElement(_ChevronRightMedium.default, {\n        className: \"spectrum-Menu-chevron\"\n      }))\n    );\n  }\n\n}) || _class;\n\nexports.default = UxpListItem;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nObject.defineProperty(exports, \"MenuItem\", {\n  enumerable: true,\n  get: function () {\n    return _MenuItem.default;\n  }\n});\nObject.defineProperty(exports, \"MenuDivider\", {\n  enumerable: true,\n  get: function () {\n    return _MenuDivider.default;\n  }\n});\nObject.defineProperty(exports, \"MenuHeading\", {\n  enumerable: true,\n  get: function () {\n    return _MenuHeading.default;\n  }\n});\nObject.defineProperty(exports, \"SubMenu\", {\n  enumerable: true,\n  get: function () {\n    return _SubMenu.default;\n  }\n});\nexports.Menu = void 0;\n\nvar _UxpOptions = _interopRequireDefault(require(\"../utils/UxpOptions\"));\n\nvar _MenuItem = _interopRequireDefault(require(\"./js/MenuItem\"));\n\nvar _MenuDivider = _interopRequireDefault(require(\"./js/MenuDivider\"));\n\nvar _MenuHeading = _interopRequireDefault(require(\"./js/MenuHeading\"));\n\nvar _SubMenu = _interopRequireDefault(require(\"./js/SubMenu\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nconst Menu = _UxpOptions.default.select('Menu', () => require('./js/UxpMenu'), () => require('./js/Menu'));\n\nexports.Menu = Menu;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _autobindDecorator = _interopRequireDefault(require(\"autobind-decorator\"));\n\nvar _List = require(\"../../List\");\n\nvar _Popover = _interopRequireDefault(require(\"../../Popover\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _class, _class2, _temp;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nlet Menu = (0, _autobindDecorator.default)(_class = (_temp = _class2 = class Menu extends _react.default.Component {\n  getListRef() {\n    return this.listRef;\n  }\n\n  onClick(e) {\n    e.preventDefault();\n\n    if (this.props.onClick) {\n      this.props.onClick(e);\n    }\n  }\n\n  render() {\n    const _this$props = this.props,\n          {\n      children,\n      className,\n      closeOnSelect,\n      open,\n      onClose,\n      onSelect,\n      placement,\n      role = 'menu',\n      style,\n      trapFocus\n    } = _this$props,\n          otherProps = _objectWithoutProperties(_this$props, [\"children\", \"className\", \"closeOnSelect\", \"open\", \"onClose\", \"onSelect\", \"placement\", \"role\", \"style\", \"trapFocus\"]);\n\n    delete otherProps.target;\n    delete otherProps.onClick;\n    return /*#__PURE__*/_react.default.createElement(_Popover.default, {\n      isDialog: false,\n      placement: placement,\n      open: open,\n      onClose: onClose,\n      style: _objectSpread({}, style, {\n        overflowY: 'auto'\n      }),\n      trapFocus: trapFocus\n    }, /*#__PURE__*/_react.default.createElement(_List.List, _extends({\n      ref: l => this.listRef = l,\n      role: role,\n      className: className,\n      onClick: this.onClick\n    }, otherProps), _react.default.Children.map(children, child => _react.default.cloneElement(child, {\n      onSelect,\n      closeOnSelect\n    }))));\n  }\n\n}, _class2.displayName = 'Menu', _class2.propTypes = {\n  /**\n   * Location of the menu in relation to the element triggering it. If used\n   * with overlay trigger and there isn't enough room for the menu in that\n   * position, it will make a limited attempt to find a new position.\n   */\n  placement: _propTypes.default.oneOf(['bottom', 'bottom left', 'bottom right', 'top', 'top left', 'top right', 'left', 'left top', 'left bottom', 'right', 'right top', 'right bottom']),\n\n  /**\n   * Whether the menu is opened.\n   */\n  open: _propTypes.default.bool,\n\n  /**\n   * Callback when menu closes.\n   */\n  onClose: _propTypes.default.func,\n\n  /**\n   * Callback when menu item is selected.\n   */\n  onSelect: _propTypes.default.func,\n\n  /**\n   * String for extra class names to add to the menu\n   */\n  className: _propTypes.default.string,\n\n  /**\n   * True by default, this keeps focus within children of this component.\n   * When disabled, focus may leave this component.\n   */\n  trapFocus: _propTypes.default.bool,\n\n  /**\n   * The WAI-ARIA role for the menu. Defaults to \"menu\", but could be \"listbox\" depending on context.\n   */\n  role: _propTypes.default.oneOf(['menu', 'listbox'])\n}, _class2.defaultProps = {\n  trapFocus: true\n}, _temp)) || _class;\n\nexports.default = Menu;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nclass MenuDivider extends _react.Component {\n  render() {\n    return /*#__PURE__*/_react.default.createElement(\"li\", {\n      className: \"spectrum-Menu-divider\",\n      role: \"separator\"\n    });\n  }\n\n}\n\nexports.default = MenuDivider;\nMenuDivider.displayName = 'MenuDivider';\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nclass MenuHeading extends _react.Component {\n  render() {\n    const _this$props = this.props,\n          {\n      label,\n      children,\n      role = 'presentation',\n      'aria-level': ariaLevel\n    } = _this$props,\n          otherProps = _objectWithoutProperties(_this$props, [\"label\", \"children\", \"role\", \"aria-level\"]);\n\n    return /*#__PURE__*/_react.default.createElement(\"li\", _extends({\n      role: role,\n      className: \"spectrum-Menu-sectionHeading\"\n    }, (0, _filterDOMProps.default)(otherProps)), /*#__PURE__*/_react.default.createElement(\"span\", {\n      role: \"heading\",\n      \"aria-level\": ariaLevel || 3\n    }, label || children));\n  }\n\n}\n\nexports.default = MenuHeading;\nMenuHeading.displayName = 'MenuHeading';\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _List = require(\"../../List\");\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/**\n * An item in a Menu\n */\nclass MenuItem extends _react.Component {\n  render() {\n    const _this$props = this.props,\n          {\n      role = 'menuitem'\n    } = _this$props,\n          otherProps = _objectWithoutProperties(_this$props, [\"role\"]);\n\n    return /*#__PURE__*/_react.default.createElement(_List.ListItem, _extends({\n      role: role\n    }, otherProps));\n  }\n\n}\n\nexports.default = MenuItem;\nMenuItem.displayName = 'MenuItem';\nMenuItem.propTypes = _objectSpread({}, _List.ListItem.propTypes, {\n  /**\n   * The WAI-ARIA role for the list item.\n   * Defaults to \"menuitem\", but could be \"menuitemcheckbox\", \"menuitemradio\" or \"option\" depending on context.\n   */\n  role: _propTypes.default.oneOf(['menuitem', 'menuitemcheckbox', 'menuitemradio', 'option'])\n});\nMenuItem.defaultProps = {\n  role: 'menuitem'\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _autobindDecorator = _interopRequireDefault(require(\"autobind-decorator\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _createId = _interopRequireDefault(require(\"../../utils/createId\"));\n\nvar _Menu = _interopRequireDefault(require(\"./Menu\"));\n\nvar _MenuItem = _interopRequireDefault(require(\"./MenuItem\"));\n\nvar _OverlayTrigger = _interopRequireDefault(require(\"../../OverlayTrigger\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nvar _class, _class2, _temp2;\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nlet SubMenu =\n/**\n * A menu item that has a sub menu under it that is opened on hover.\n */\n(0, _autobindDecorator.default)(_class = (_temp2 = _class2 = class SubMenu extends _react.Component {\n  constructor(...args) {\n    var _temp;\n\n    return _temp = super(...args), this.state = {\n      opened: false,\n      trapFocus: true\n    }, this.menuId = (0, _createId.default)(), this.subMenuId = (0, _createId.default)(), _temp;\n  }\n\n  handleKeyDown(event) {\n    const {\n      onKeyDown\n    } = this.props;\n\n    switch (event.key) {\n      case 'ArrowLeft':\n      case 'Left':\n        event.preventDefault();\n        event.stopPropagation();\n        this.setState({\n          opened: false\n        });\n        break;\n\n      case 'Enter':\n      case ' ':\n      case 'ArrowRight':\n      case 'Right':\n        event.preventDefault();\n        event.stopPropagation();\n        this.setState({\n          opened: true\n        });\n        break;\n    }\n\n    if (onKeyDown) {\n      onKeyDown(event);\n    }\n  }\n\n  handleSubMenuKeyDown(event) {\n    switch (event.key) {\n      case 'ArrowLeft':\n      case 'Left':\n        event.preventDefault();\n        this.setState({\n          opened: false\n        });\n        break;\n    }\n  }\n\n  hide() {\n    this.hideAnimationFrame = requestAnimationFrame(() => this.setState({\n      opened: false\n    }));\n  }\n\n  show() {\n    if (this.hideAnimationFrame) {\n      cancelAnimationFrame(this.hideAnimationFrame);\n    }\n\n    requestAnimationFrame(() => this.setState({\n      opened: true\n    }));\n\n    if (this.props._onNestedSubmenuOpen) {\n      this.props._onNestedSubmenuOpen();\n    }\n  }\n\n  cloneItem(item) {\n    const props = _objectSpread({}, item.props, {\n      onKeyDown: this.handleSubMenuKeyDown\n    });\n\n    if (item.type === SubMenu) {\n      props._onNestedSubmenuOpen = this.show;\n    }\n\n    return (0, _react.cloneElement)(item, props);\n  }\n\n  onHide() {\n    this.hide();\n  }\n\n  onMenuClose() {\n    this.overlayTrigger.hide();\n  }\n\n  onSelect(...args) {\n    if (this.props.closeOnSelect) {\n      this.onMenuClose();\n    }\n\n    if (this.props.onSelect) {\n      this.props.onSelect(...args);\n    }\n  }\n\n  render() {\n    const _this$props = this.props,\n          {\n      children,\n      className,\n      closeOnSelect,\n      label,\n      trapFocus\n    } = _this$props,\n          otherProps = _objectWithoutProperties(_this$props, [\"children\", \"className\", \"closeOnSelect\", \"label\", \"trapFocus\"]);\n\n    delete otherProps.onSelect;\n    const {\n      opened\n    } = this.state;\n    return /*#__PURE__*/_react.default.createElement(_OverlayTrigger.default, {\n      placement: \"right top\",\n      offset: -10,\n      crossOffset: -4,\n      selected: false,\n      show: this.state.opened,\n      onHide: this.onHide,\n      closeOnSelect: closeOnSelect,\n      ref: t => this.overlayTrigger = t\n    }, /*#__PURE__*/_react.default.createElement(_MenuItem.default, _extends({\n      id: this.menuId,\n      className: (0, _classnames.default)({\n        'is-open': opened\n      }, className),\n      ref: r => this.menuItem = r,\n      \"aria-haspopup\": \"menu\",\n      \"aria-expanded\": opened,\n      \"aria-owns\": opened ? this.subMenuId : null\n    }, otherProps, {\n      onKeyDown: otherProps.disabled ? undefined : this.handleKeyDown,\n      onClick: this.show,\n      onMouseEnter: this.show,\n      onMouseLeave: this.hide,\n      hasNestedMenu: true\n    }), label), /*#__PURE__*/_react.default.createElement(_Menu.default, {\n      id: this.subMenuId,\n      onSelect: this.onSelect,\n      autoFocus: true,\n      \"aria-labelledby\": this.menuId,\n      onMouseEnter: this.show,\n      onMouseLeave: this.hide,\n      trapFocus: trapFocus\n    }, _react.default.Children.toArray(children).map(this.cloneItem)));\n  }\n\n}, _class2.displayName = 'SubMenu', _class2.propTypes = _objectSpread({}, _MenuItem.default.propTypes, {\n  /**\n   * A custom classname to be applied to the menu item\n   */\n  className: _propTypes.default.string,\n\n  /**\n   * The displayed label of the submenu within its parent\n   */\n  label: _propTypes.default.string,\n\n  /**\n   * A select handler for the submenu, triggered whenever an item is selected.\n   */\n  onSelect: _propTypes.default.func,\n\n  /**\n   * True by default, this keeps focus within the expanded submenu of this component.\n   * When disabled, focus may leave the expanded submenu component.\n   */\n  trapFocus: _propTypes.default.bool\n}), _temp2)) || _class;\n\nexports.default = SubMenu;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _List = require(\"../../List\");\n\nvar _Menu = _interopRequireDefault(require(\"./Menu\"));\n\nvar _Popover = _interopRequireDefault(require(\"../../Popover\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nclass UxpMenu extends _Menu.default {\n  render() {\n    const _this$props = this.props,\n          {\n      children,\n      className,\n      closeOnSelect,\n      open,\n      onClose,\n      onSelect,\n      onUxpSelect,\n      placement,\n      role = 'menu',\n      style,\n      trapFocus\n    } = _this$props,\n          otherProps = _objectWithoutProperties(_this$props, [\"children\", \"className\", \"closeOnSelect\", \"open\", \"onClose\", \"onSelect\", \"onUxpSelect\", \"placement\", \"role\", \"style\", \"trapFocus\"]);\n\n    delete otherProps.target;\n    delete otherProps.onClick;\n    delete otherProps.autoComplete;\n    delete otherProps.boundariesElement;\n    return /*#__PURE__*/_react.default.createElement(_Popover.default, {\n      isDialog: false,\n      placement: placement,\n      open: open,\n      onClose: onClose,\n      style: _objectSpread({}, style, {\n        overflowY: 'auto'\n      }),\n      trapFocus: trapFocus\n    }, /*#__PURE__*/_react.default.createElement(_List.List, _extends({\n      defaultpreventedkeys: ['Escape'],\n      ref: l => this.listRef = l,\n      role: role,\n      className: className,\n      onClick: this.onClick\n    }, otherProps), _react.default.Children.map(children, child => _react.default.cloneElement(child, {\n      onTab: e => e.stopPropagation(),\n      defaultpreventedkeys: ['Tab'],\n      onSelect,\n      onUxpSelect,\n      closeOnSelect\n    }))));\n  }\n\n}\n\nexports.default = UxpMenu;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.modalManager = exports.Modal = exports.default = void 0;\n\nvar _autobindDecorator = _interopRequireDefault(require(\"autobind-decorator\"));\n\nvar _Modal = _interopRequireDefault(require(\"react-overlays/lib/Modal\"));\n\nvar _events = require(\"../../utils/events\");\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _closest = _interopRequireDefault(require(\"dom-helpers/query/closest\"));\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _ModalManager = _interopRequireDefault(require(\"./ModalManager\"));\n\nvar _OpenTransition = _interopRequireDefault(require(\"../../utils/OpenTransition\"));\n\nvar _PortalContainer = _interopRequireDefault(require(\"../../PortalContainer\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nvar _class;\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nif (process.env.SCALE_MEDIUM && process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/underlay/index.css\");\n\n  require(\"@adobe/spectrum-css/dist/components/underlay/index-diff.css\");\n} else if (process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/underlay/index-lg.css\");\n} else {\n  require(\"@adobe/spectrum-css/dist/components/underlay/index.css\");\n}\n\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHT) require(\"@adobe/spectrum-css/dist/components/underlay/multiStops/light.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARK) require(\"@adobe/spectrum-css/dist/components/underlay/multiStops/dark.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHTEST) require(\"@adobe/spectrum-css/dist/components/underlay/multiStops/lightest.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARKEST) require(\"@adobe/spectrum-css/dist/components/underlay/multiStops/darkest.css\");\nconst MODAL_LIFECYCLE_METHODS = ['onBackdropClick', 'onEnter', 'onEntering', 'onEntered', 'onEscapeKeyDown', 'onExit', 'onExiting', 'onExited', 'onHide', 'onShow'];\nconst MANAGER_SINGLETON = new _ModalManager.default({\n  handleContainerOverflow: false\n});\nexports.modalManager = MANAGER_SINGLETON;\nlet MODAL_KEY = 1;\n\nclass ModalContainer {\n  static show(content, context, container) {\n    let key = MODAL_KEY++; // If container is not specified, look for the provider of context\n\n    if (!container && context) {\n      container = () => (0, _closest.default)(_reactDom.default.findDOMNode(context), '.react-spectrum-provider');\n    } else if (!container) {\n      container = () => document.querySelector('.react-spectrum-provider') || document.body;\n    }\n\n    let _content$props = content.props,\n        {\n      disableEscKey,\n      role,\n      onClose,\n      onHide,\n      onExited\n    } = _content$props,\n        modalProps = _objectWithoutProperties(_content$props, [\"disableEscKey\", \"role\", \"onClose\", \"onHide\", \"onExited\"]);\n\n    role = role && role.indexOf('dialog') !== -1 ? 'presentation' : 'dialog'; // filter out content.props that are not modal lifecycle methods\n\n    modalProps = MODAL_LIFECYCLE_METHODS.reduce((obj, key) => _objectSpread({}, obj, {\n      [key]: modalProps[key]\n    }), {});\n\n    let modal = /*#__PURE__*/_react.default.createElement(Modal, _extends({}, modalProps, {\n      container: container,\n      key: key,\n      keyboard: !disableEscKey,\n      role: role,\n      onClose: onClose,\n      onHide: (0, _events.chain)(this.hide.bind(this, key), onHide, onExited),\n      \"aria-modal\": role === 'dialog' || null\n    }), content);\n\n    _PortalContainer.default.add(modal, context);\n\n    return key;\n  }\n\n  static hide(key) {\n    _PortalContainer.default.remove({\n      key\n    });\n  }\n\n}\n\nexports.default = ModalContainer;\n\nlet Modal = (0, _autobindDecorator.default)(_class = class Modal extends _react.default.Component {\n  constructor(...args) {\n    var _temp;\n\n    return _temp = super(...args), this.state = {\n      show: true\n    }, _temp;\n  }\n\n  onClose() {\n    this.setState({\n      show: false\n    });\n\n    if (this.props.onClose) {\n      this.props.onClose();\n    }\n  }\n\n  onEntering(e) {\n    if (this.props.onEntering) {\n      this.props.onEntering(e);\n    } // Make sure that autoFocus actually moves focus to the Modal.\n\n\n    if (this.baseModal.lastFocus === document.activeElement) {\n      this.baseModal.autoFocus();\n    }\n  }\n\n  backdropMode() {\n    /*\n     * backdropClickable (bc)\n     *     bc | !bc\n     *     ---|------\n     *      t |static\n     * if fullscreenTakeover, then always false\n     */\n    const {\n      backdropClickable,\n      mode\n    } = this.props.children.props;\n    let backdrop = 'static';\n\n    if (backdropClickable) {\n      backdrop = true;\n    }\n\n    if (mode === 'fullscreenTakeover') {\n      backdrop = false;\n    }\n\n    return backdrop;\n  }\n\n  render() {\n    const backdrop = this.backdropMode();\n\n    const _this$props = this.props,\n          {\n      children,\n      onHide\n    } = _this$props,\n          modalProps = _objectWithoutProperties(_this$props, [\"children\", \"onHide\"]); // The z-index here should match the one in Overlay\n\n\n    return /*#__PURE__*/_react.default.createElement(_Modal.default, _extends({}, modalProps, {\n      style: {\n        zIndex: 100000,\n        position: 'relative'\n      },\n      show: this.state.show,\n      ref: baseModal => this.baseModal = baseModal,\n      onEntering: this.onEntering,\n      onExited: onHide,\n      onHide: this.onClose,\n      backdrop: backdrop,\n      manager: MANAGER_SINGLETON,\n      renderBackdrop: props => /*#__PURE__*/_react.default.createElement(Underlay, props),\n      transition: _OpenTransition.default,\n      backdropTransition: _OpenTransition.default\n    }), (0, _react.cloneElement)(children, {\n      onClose: this.onClose\n    }));\n  }\n\n}) || _class;\n\nexports.Modal = Modal;\n\nclass Underlay extends _react.default.Component {\n  render() {\n    let _this$props2 = this.props,\n        {\n      open\n    } = _this$props2,\n        props = _objectWithoutProperties(_this$props2, [\"open\"]);\n\n    return /*#__PURE__*/_react.default.createElement(\"div\", _extends({}, (0, _filterDOMProps.default)(props), {\n      className: (0, _classnames.default)('spectrum-Underlay', {\n        'is-open': open\n      })\n    }));\n  }\n\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _ModalManager = _interopRequireDefault(require(\"react-overlays/lib/ModalManager\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\n// needed for the modal manager class\nclass SpectrumModalManager extends _ModalManager.default {\n  constructor(...args) {\n    var _temp;\n\n    return _temp = super(...args), this.overflowMap = new Map(), this.superAdd = this.add, this.superRemove = this.remove, this.add = (modal, container, className, isOverlay) => {\n      this.superAdd(modal, container, className);\n      this.hideBodyOverflow(modal, isOverlay);\n    }, this.hideBodyOverflow = (modal, isOverlay) => {\n      let currentBodyOverflow = getComputedStyle(document.body).overflow; // if it's not an overlay, it's a modal and scrolling should be disabled (i know, it's weird to think about)\n\n      if (!isOverlay && currentBodyOverflow !== 'hidden') {\n        this.overflowMap.set(modal, currentBodyOverflow);\n        document.body.style.overflow = 'hidden';\n      }\n    }, this.remove = (modal, container, className) => {\n      this.superRemove(modal, container, className);\n      this.resetBodyOverflow(modal);\n    }, this.resetBodyOverflow = modal => {\n      if (this.overflowMap.has(modal)) {\n        document.body.style.overflow = this.overflowMap.get(modal);\n        this.overflowMap.delete(modal);\n      }\n    }, _temp;\n  }\n\n  addToModal(child, isOverlay = false) {\n    const hideSiblingNodes = this.hideSiblingNodes;\n    this.hideSiblingNodes = false;\n    this.add(child, document.body, null, isOverlay);\n    this.hideSiblingNodes = hideSiblingNodes;\n  }\n\n  removeFromModal(child) {\n    const hideSiblingNodes = this.hideSiblingNodes;\n    this.hideSiblingNodes = false;\n    this.remove(child);\n    this.hideSiblingNodes = hideSiblingNodes;\n  }\n\n}\n\nexports.default = SpectrumModalManager;\n","\"use strict\";\n\nvar _UxpOptions = _interopRequireDefault(require(\"../utils/UxpOptions\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nmodule.exports = _UxpOptions.default.select('OverlayTrigger', () => require('./js/UxpOverlayTrigger'), () => require('./js/OverlayTrigger'));\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _autobindDecorator = _interopRequireDefault(require(\"autobind-decorator\"));\n\nvar _closest = _interopRequireDefault(require(\"dom-helpers/query/closest\"));\n\nvar _convertUnsafeMethod = _interopRequireDefault(require(\"../../utils/convertUnsafeMethod\"));\n\nvar _OpenTransition = _interopRequireDefault(require(\"../../utils/OpenTransition\"));\n\nvar _ownerDocument = _interopRequireDefault(require(\"react-overlays/lib/utils/ownerDocument\"));\n\nvar _Portal = _interopRequireDefault(require(\"react-overlays/lib/Portal\"));\n\nvar _Position = _interopRequireDefault(require(\"./Position\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nvar _RootCloseWrapper = _interopRequireDefault(require(\"react-overlays/lib/RootCloseWrapper\"));\n\nvar _class, _class2, _temp;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nconst VISIBLE_OVERLAYS = new Map();\nconst DEFAULT_BUCKET_KEY = 'all';\n\nlet Overlay = (0, _convertUnsafeMethod.default)(_class = (0, _autobindDecorator.default)(_class = (_temp = _class2 = class Overlay extends _react.default.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      exited: !this.props.show\n    };\n  }\n\n  get overlayBucketKey() {\n    const {\n      children\n    } = this.props;\n\n    if (children && children.props) {\n      return children.props.role === 'tooltip' ? 'tooltip' : DEFAULT_BUCKET_KEY;\n    }\n\n    return DEFAULT_BUCKET_KEY;\n  }\n\n  componentDidMount() {\n    this.setState({\n      targetNode: _reactDom.default.findDOMNode(this.props.target)\n    });\n    this.mounted = true;\n    this.addOverlay();\n  }\n\n  componentWillUnmount() {\n    this.mounted = false;\n    this.removeOverlay();\n  }\n\n  addOverlay(props = this.props) {\n    const {\n      overlayBucketKey\n    } = this;\n    let visibleOverlays = VISIBLE_OVERLAYS.get(overlayBucketKey);\n\n    if (!visibleOverlays) {\n      VISIBLE_OVERLAYS.set(overlayBucketKey, []);\n      visibleOverlays = VISIBLE_OVERLAYS.get(overlayBucketKey);\n    }\n\n    if (props.show && this.mounted && !visibleOverlays.includes(this)) {\n      visibleOverlays.push(this);\n    }\n  }\n\n  removeOverlay() {\n    // Remove overlay from the stack of visible overlays\n    const visibleOverlays = VISIBLE_OVERLAYS.get(this.overlayBucketKey);\n    let index = visibleOverlays.indexOf(this);\n\n    if (index >= 0) {\n      visibleOverlays.splice(index, 1);\n    }\n  }\n\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    if (nextProps.target && nextProps.target !== this.props.target) {\n      this.setState(_objectSpread({}, this.state, {\n        targetNode: _reactDom.default.findDOMNode(nextProps.target)\n      }));\n    }\n  }\n\n  onEntered(...args) {\n    this.setState(_objectSpread({}, this.state, {\n      exited: false\n    }));\n    this.addOverlay();\n\n    if (this.props.onEntered) {\n      this.props.onEntered(...args);\n    }\n  }\n\n  onExited(...args) {\n    this.setState(_objectSpread({}, this.state, {\n      exited: true\n    }));\n    this.removeOverlay();\n\n    if (this.props.onExited) {\n      this.props.onExited(...args);\n    }\n  }\n\n  getOverlayContainer(target) {\n    let immediateAvailableContainer = (0, _closest.default)(this.state.targetNode, '.react-spectrum-provider');\n    return this.props.container || immediateAvailableContainer;\n  }\n\n  hide(e) {\n    const visibleOverlays = VISIBLE_OVERLAYS.get(this.overlayBucketKey); // Only hide if this is the top overlay\n\n    if (visibleOverlays[visibleOverlays.length - 1] === this && this.props.onHide) {\n      this.props.onHide(e);\n    }\n  }\n\n  render() {\n    let _this$props = this.props,\n        {\n      containerPadding,\n      target,\n      container = this.getOverlayContainer(target),\n      placement,\n      offset,\n      crossOffset,\n      flip,\n      boundariesElement = () => (0, _ownerDocument.default)(this).body,\n      shouldUpdatePosition,\n      rootClose,\n      children,\n      show,\n      onExit,\n      onExiting,\n      onEnter,\n      onEntering\n    } = _this$props,\n        otherProps = _objectWithoutProperties(_this$props, [\"containerPadding\", \"target\", \"container\", \"placement\", \"offset\", \"crossOffset\", \"flip\", \"boundariesElement\", \"shouldUpdatePosition\", \"rootClose\", \"children\", \"show\", \"onExit\", \"onExiting\", \"onEnter\", \"onEntering\"]); // Don't un-render the overlay while it's transitioning out.\n\n\n    const mountOverlay = show || !this.state.exited;\n\n    if (!mountOverlay) {\n      // Don't bother showing anything if we don't have to.\n      return null;\n    }\n\n    let child = children; // Position is be inner-most because it adds inline styles into the child,\n    // which the other wrappers don't forward correctly.\n\n    child = /*#__PURE__*/_react.default.createElement(_Position.default, _extends({\n      container,\n      containerPadding,\n      target,\n      placement,\n      shouldUpdatePosition,\n      offset,\n      crossOffset,\n      flip,\n      boundariesElement\n    }, {\n      autoComplete: true\n    }), child);\n    delete otherProps.autoComplete; // This animates the child node by injecting props, so it must precede\n    // anything that adds a wrapping div.\n\n    child = /*#__PURE__*/_react.default.createElement(_OpenTransition.default, {\n      in: show,\n      appear: true,\n      onExit: onExit,\n      onExiting: onExiting,\n      onExited: this.onExited,\n      onEnter: onEnter,\n      onEntering: onEntering,\n      onEntered: this.onEntered\n    }, child); // This goes after everything else because it adds a wrapping div.\n\n    if (rootClose) {\n      child = /*#__PURE__*/_react.default.createElement(_RootCloseWrapper.default, {\n        onRootClose: this.hide\n      }, child);\n    }\n\n    return /*#__PURE__*/_react.default.createElement(_Portal.default, {\n      container: container\n    }, child);\n  }\n\n}, _class2.defaultProps = {\n  placement: 'left'\n}, _temp)) || _class) || _class;\n\nexports.default = Overlay;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _autobindDecorator = _interopRequireDefault(require(\"autobind-decorator\"));\n\nvar _events = require(\"../../utils/events\");\n\nvar _convertUnsafeMethod = _interopRequireDefault(require(\"../../utils/convertUnsafeMethod\"));\n\nvar _createId = _interopRequireDefault(require(\"../../utils/createId\"));\n\nvar _ModalContainer = require(\"../../ModalContainer/js/ModalContainer.js\");\n\nvar _Overlay = _interopRequireDefault(require(\"./Overlay\"));\n\nvar _ownerDocument = _interopRequireDefault(require(\"react-overlays/lib/utils/ownerDocument\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nvar _class, _class2, _temp;\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nconst triggerType = _propTypes.default.oneOf(['click', 'longClick', 'hover', 'focus']);\n\nconst MOUSE_BUTTONS = {\n  left: 0\n};\n/**\n * Check if value one is inside or equal to the of value\n *\n * @param {string} one\n * @param {string|array} of\n * @returns {boolean}\n */\n\nfunction isOneOf(one, of) {\n  if (Array.isArray(of)) {\n    return of.indexOf(one) >= 0;\n  }\n\n  return one === of;\n}\n/**\n * Find all of the scrollable parents of a DOM node\n */\n\n\nfunction getScrollParents(node) {\n  let nodes = [];\n\n  while (node.parentNode) {\n    var style = window.getComputedStyle(node); // Look for scrollable nodes, both real and fake.\n\n    if (/auto|scroll/.test(style.overflow + style.overflowY) || node.hasAttribute('data-scrollable')) {\n      nodes.push(node);\n    }\n\n    node = node.parentNode;\n  }\n\n  return nodes;\n}\n/*\n * Class based on React-bootstrap\n * https://github.com/react-bootstrap/react-bootstrap/blob/master/src/OverlayTrigger.js\n */\n\n\nlet OverlayTrigger = (0, _convertUnsafeMethod.default)(_class = (0, _autobindDecorator.default)(_class = (_temp = _class2 = class OverlayTrigger extends _react.Component {\n  constructor(props, context) {\n    super(props, context);\n\n    this.onMouseDown = e => {\n      if (!this.props.disabled && e.button === MOUSE_BUTTONS.left) {\n        const target = e.currentTarget;\n        this.longPressTimeout = setTimeout(() => {\n          this.longPressTimeout = null; // In Safari, buttons are force blurred after the mouse down event since we don't call e.preventDefault()\n          // Changing Button to prevent default would be a breaking change. So, assume that we want to restore\n          // focus to the trigger element when the overlay closes.\n\n          this._lastFocus = target;\n          this.show(e);\n        }, 250);\n      }\n    };\n\n    this.onMouseUp = e => {\n      // Prevent focus from being forced back to the button on long click.\n      // It will already be inside the popover/menu.\n      if (!this.longPressTimeout) {\n        e.preventDefault();\n      }\n\n      if (!this.props.disabled && this.longPressTimeout && e.button === MOUSE_BUTTONS.left) {\n        if (this.props.onClick) {\n          this.props.onClick(e);\n        }\n\n        this.hide(e);\n        clearTimeout(this.longPressTimeout);\n        this.longPressTimeout = null;\n      }\n    };\n\n    this.windowMouseUp = e => {\n      if (e.button === MOUSE_BUTTONS.left && !_reactDom.default.findDOMNode(this).contains(e.target) && this.longPressTimeout) {\n        clearTimeout(this.longPressTimeout);\n        this.longPressTimeout = null;\n      }\n    };\n\n    this.overlayId = (0, _createId.default)();\n    this._mountNode = null;\n    this.longPressTimeout = null;\n    this._lastFocus = props.lastFocus;\n    this.boundariesElement = props.boundariesElement ? props.boundariesElement : () => (0, _ownerDocument.default)(this).body;\n    this._scrollParents = null;\n    this.state = {\n      show: props.show === undefined ? props.defaultShow : props.show\n    };\n  }\n\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    if ('lastFocus' in nextProps && nextProps.lastFocus !== this.props.lastFocus) {\n      this._lastFocus = nextProps.lastFocus;\n    }\n\n    if (nextProps.show !== this.props.show) {\n      nextProps.show ? this.handleDelayedShow() : this.handleDelayedHide();\n    }\n  }\n\n  componentDidMount() {\n    this._mountNode = document.createElement('div');\n    this.renderOverlay();\n    document.body.addEventListener('mouseUp', this.windowMouseUp);\n  }\n\n  componentDidUpdate(prevProps) {\n    const isDisabled = prevProps.disabled;\n    const shouldDisable = this.props.disabled;\n\n    if (!isDisabled && shouldDisable) {\n      this.hide();\n    }\n\n    this.renderOverlay();\n  }\n\n  componentWillUnmount() {\n    _ModalContainer.modalManager.removeFromModal(this._overlay);\n\n    _reactDom.default.unmountComponentAtNode(this._mountNode);\n\n    this._mountNode = null;\n    clearTimeout(this._hoverShowDelay);\n    clearTimeout(this._hoverHideDelay);\n    this.removeListenersFromScrollParents();\n    document.body.removeEventListener('mouseUp', this.windowMouseUp);\n  }\n\n  handleToggle(e) {\n    if (this.state.show) {\n      this.hide(e);\n    } else {\n      this.show(e);\n    }\n  }\n\n  handleDelayedShow(e) {\n    if (this._hoverHideDelay != null) {\n      clearTimeout(this._hoverHideDelay);\n      this._hoverHideDelay = null;\n      return;\n    }\n\n    if (this.state.show || this._hoverShowDelay != null) {\n      return;\n    }\n\n    const delay = this.props.delayShow != null ? this.props.delayShow : this.props.delay;\n\n    if (!delay) {\n      this.show(e);\n      return;\n    }\n\n    this._hoverShowDelay = setTimeout(() => {\n      this._hoverShowDelay = null;\n      this.show(e);\n    }, delay);\n  }\n\n  handleDelayedHide(e) {\n    if (this._hoverShowDelay != null) {\n      clearTimeout(this._hoverShowDelay);\n      this._hoverShowDelay = null;\n      return;\n    }\n\n    if (!this.state.show || this._hoverHideDelay != null) {\n      return;\n    }\n\n    let delay = (!this.props.delayHide || this.props.delayHide === OverlayTrigger.defaultProps.delayHide) && this.props.delay != null ? this.props.delay : this.props.delayHide;\n\n    if (!delay) {\n      this.hide(e);\n      return;\n    }\n\n    this._hoverHideDelay = setTimeout(() => {\n      this._hoverHideDelay = null;\n      this.hide(e);\n    }, delay);\n  } // Simple implementation of mouseEnter and mouseLeave.\n  // React's built version is broken: https://github.com/facebook/react/issues/4251\n  // for cases when the trigger is disabled and mouseOut/Over can cause flicker\n  // moving from one child element to another.\n\n\n  handleMouseOverOut(handler, e) {\n    const target = e.currentTarget;\n    const related = e.relatedTarget || e.nativeEvent.toElement;\n\n    if (!related || related !== target && !target.contains(related)) {\n      handler(e);\n    }\n  }\n\n  show(e) {\n    if (!this.state.show && !this.props.disabled) {\n      this._lastFocus = this.rememberedFocus();\n      this.listenToScrollParents();\n      this.setState({\n        show: true\n      });\n\n      if (this.props.onShow) {\n        this.props.onShow(e);\n      }\n    }\n  } // if we're already listening, remove listeners and reapply\n\n\n  listenToScrollParents() {\n    if (this._scrollParents) {\n      this.removeListenersFromScrollParents();\n    }\n\n    this._scrollParents = getScrollParents(_reactDom.default.findDOMNode(this));\n\n    for (let node of this._scrollParents) {\n      node.addEventListener('scroll', this.hide, false);\n    }\n  } // if we have any listeners on parents, remove them\n\n\n  removeListenersFromScrollParents() {\n    if (this._scrollParents) {\n      for (let node of this._scrollParents) {\n        node.removeEventListener('scroll', this.hide, false);\n      }\n\n      this._scrollParents = null;\n    }\n  }\n\n  hide(e) {\n    this.removeListenersFromScrollParents();\n\n    if (this.state.show) {\n      this.setState({\n        show: false\n      });\n\n      if (this.props.onHide) {\n        this.props.onHide(e);\n      }\n    }\n  }\n\n  onKeyDown(e) {\n    if (e.key === 'ArrowDown' || e.key === 'Down') {\n      if (e.altKey || e.target === _reactDom.default.findDOMNode(this.dropdownRef.triggerRef)) {\n        e.preventDefault();\n        this.show(e);\n      }\n    }\n  }\n\n  onHide(e) {\n    // if we are in longClick mode and the onHide comes from the mouse up on the trigger, then ignore it\n    // it's actually an onHide coming from rootClose\n    if (isOneOf('longClick', this.props.trigger) && _reactDom.default.findDOMNode(this).contains(e.target)) {\n      return;\n    }\n\n    if (this.props.show === undefined) {\n      this.hide(e);\n    } else if (this.props.onHide) {\n      this.props.onHide(e);\n    }\n  }\n\n  onExited(e) {\n    this.restoreFocus(e);\n\n    if (this.props.onExited) {\n      this.props.onExited(e);\n    }\n  }\n\n  rememberedFocus() {\n    if (!this._lastFocus && document && document.activeElement !== document.body) {\n      this._lastFocus = document.activeElement;\n    }\n\n    return this._lastFocus;\n  }\n\n  restoreFocus(overlay) {\n    if (this._lastFocus && typeof this._lastFocus.focus === 'function') {\n      if (document) {\n        let node;\n\n        if (overlay) {\n          node = _reactDom.default.findDOMNode(overlay);\n        }\n\n        if (node && (node === document.activeElement || node.contains(document.activeElement)) || document.activeElement === document.body) {\n          this._lastFocus.focus();\n        }\n      }\n\n      if (!this.props.lastFocus) {\n        this._lastFocus = null;\n      }\n    }\n  }\n\n  makeOverlay(overlay, props) {\n    let {\n      target = this\n    } = this.props;\n\n    let {\n      rootClose = true\n    } = props,\n        overlayProps = _objectWithoutProperties(props, [\"rootClose\"]);\n\n    delete overlayProps.crossOffset;\n    delete overlayProps.defaultShow;\n    delete overlayProps.flip;\n    delete overlayProps.boundariesElement;\n\n    let topOverlayProps = _objectSpread({\n      id: overlay.props.id || overlayProps.id\n    }, props);\n\n    if (!overlay.props.id) {\n      overlayProps.id = this.overlayId;\n    }\n\n    return /*#__PURE__*/_react.default.createElement(_Overlay.default, _extends({}, topOverlayProps, {\n      show: this.state.show,\n      onHide: this.onHide,\n      onExited: this.onExited,\n      target: target,\n      rootClose: rootClose\n    }), (0, _react.cloneElement)(overlay, overlayProps));\n  }\n\n  renderOverlay() {\n    // Only add overlay to modalManager when it is shown.\n    if (this._overlay.props.show) {\n      _ModalContainer.modalManager.addToModal(this._overlay, true);\n    }\n\n    _reactDom.default.unstable_renderSubtreeIntoContainer(this, this._overlay, this._mountNode);\n  }\n\n  render() {\n    const _this$props = this.props,\n          {\n      trigger,\n      show,\n      selected = this.state.show\n    } = _this$props,\n          props = _objectWithoutProperties(_this$props, [\"trigger\", \"show\", \"selected\"]);\n\n    delete props.delay;\n    delete props.delayShow;\n    delete props.delayHide;\n    delete props.defaultShow;\n    delete props.onShow;\n    delete props.onHide;\n\n    const [triggerChild, overlayChild] = _react.default.Children.toArray(this.props.children);\n\n    const triggerProps = {};\n    delete props.children; // When Tooltip is shown,\n\n    if (this.state.show && overlayChild.type && overlayChild.props.role === 'tooltip') {\n      // Tooltip element id should match trigger element's aria-describedby value,\n      if (!props.id) {\n        props.id = overlayChild.props.id || this.overlayId;\n      } // Tooltip should add aria-describedby attribute to trigger element.\n\n\n      triggerProps['aria-describedby'] = props.id;\n    } // Attach trigger events in case on un-controlled overlay\n\n\n    if (show === undefined) {\n      if (isOneOf('click', trigger) && !isOneOf('longClick', trigger)) {\n        triggerProps.onClick = (0, _events.chain)(this.props.onClick, this.handleToggle);\n      }\n\n      if (isOneOf('longClick', trigger)) {\n        delete props.onClick;\n        triggerProps.onMouseDown = this.onMouseDown;\n        triggerProps.onMouseUp = this.onMouseUp;\n        triggerProps.onKeyDown = this.onKeyDown;\n      }\n\n      if (isOneOf('hover', trigger)) {\n        triggerProps.onMouseOver = this.handleMouseOverOut.bind(this, this.handleDelayedShow);\n        triggerProps.onMouseOut = this.handleMouseOverOut.bind(this, this.handleDelayedHide);\n        props.onMouseOver = this.handleMouseOverOut.bind(this, this.handleDelayedShow);\n        props.onMouseOut = this.handleMouseOverOut.bind(this, this.handleDelayedHide); // overlay should not trap focus when trigger is 'hover'\n\n        props.trapFocus = false;\n      }\n\n      if (isOneOf('focus', trigger)) {\n        triggerProps.onFocus = (0, _events.chain)(triggerChild.props.onFocus, this.handleDelayedShow);\n        triggerProps.onBlur = (0, _events.chain)(triggerChild.props.onBlur, this.handleDelayedHide);\n        props.onFocus = this.handleDelayedShow;\n        props.onBlur = this.handleDelayedHide; // overlay should not trap focus when trigger is 'focus'\n\n        props.trapFocus = false;\n      }\n    }\n\n    triggerProps.selected = selected; // Remove previous overlay from modalManager\n\n    if (this._overlay) {\n      _ModalContainer.modalManager.removeFromModal(this._overlay);\n    }\n\n    this._overlay = this.makeOverlay(overlayChild, props);\n    return (0, _react.cloneElement)(triggerChild, triggerProps);\n  }\n\n}, _class2.propTypes = _objectSpread({}, _Overlay.default.propTypes, {\n  /**\n   * Specify which action or actions trigger Overlay visibility\n   */\n  trigger: _propTypes.default.oneOfType([triggerType, _propTypes.default.arrayOf(triggerType)]),\n\n  /**\n   * A millisecond delay amount to show and hide the Overlay once triggered\n   */\n  delay: _propTypes.default.number,\n\n  /**\n   * A millisecond delay amount before showing the Overlay once triggered.\n   */\n  delayShow: _propTypes.default.number,\n\n  /**\n   * A millisecond delay amount before hiding the Overlay once triggered.\n   */\n  delayHide: _propTypes.default.number,\n\n  /**\n   * The initial visibility state of the Overlay. For more nuanced visibility\n   * control, consider using the Overlay component directly.\n   */\n  defaultShow: _propTypes.default.bool,\n\n  /**\n   * Specify the position of the overlay relative to the trigger element.\n   */\n  placement: _propTypes.default.string,\n\n  /**\n   * An element or text to overlay next to the target.\n   */\n\n  /**\n   * Callback when the overlay trigger is blurred.\n   */\n  onBlur: _propTypes.default.func,\n\n  /**\n   * Callback when the overlay trigger is clicked.\n   */\n  onClick: _propTypes.default.func,\n\n  /**\n   * Callback when the overlay trigger receives focus.\n   */\n  onFocus: _propTypes.default.func,\n\n  /**\n   * Callback when the mouse leaves the overlay trigger.\n   */\n  onMouseOut: _propTypes.default.func,\n\n  /**\n   * Callback when the mouse is over the overlay trigger.\n   */\n  onMouseOver: _propTypes.default.func,\n\n  /**\n   * Callback when the overlay show is invoked, determined by the 'trigger' prop.\n   */\n  onShow: _propTypes.default.func,\n\n  /**\n   * Callback when the overlay is hidden.\n   */\n  onHide: _propTypes.default.func,\n\n  /**\n   * Will cause the overlay to show in a controlled state.\n   */\n  show: _propTypes.default.bool,\n\n  /**\n   * Overlay will be shifted by specified units in the placement's axis direction.\n   */\n  offset: _propTypes.default.number,\n\n  /**\n   * Overlay will be shifted by specified units in the placement's cross-axis direction.\n   */\n  crossOffset: _propTypes.default.number,\n\n  /**\n   * Whether overlay should be allowed to flip if it hits the boundary\n   */\n  flip: _propTypes.default.bool,\n\n  /**\n   * Grey's out the trigger and removes interaction.\n   */\n  disabled: _propTypes.default.bool,\n\n  /**\n   * By default, the body of the owning document. The overlay will do a hit test to see if it\n   * extends outside the boundaries and move it to a new position if it collides.\n   */\n  boundariesElement: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.string]),\n\n  /**\n   * The last component or element to have focus before the overlay opened.\n   * If undefined, overlay will use the document.activeElement before it opened as the lastFocus.\n   * Set the lastFocus prop to override this default behavior.\n   */\n  lastFocus: _propTypes.default.oneOfType([_propTypes.default.element, _propTypes.default.object])\n}), _class2.defaultProps = {\n  defaultShow: false,\n  trigger: ['hover', 'focus'],\n  placement: 'left',\n  offset: 0,\n  crossOffset: 0,\n  flip: true,\n  disabled: false,\n  delayHide: 100\n}, _temp)) || _class) || _class;\n\nexports.default = OverlayTrigger;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _autobindDecorator = _interopRequireDefault(require(\"autobind-decorator\"));\n\nvar _calculatePosition = _interopRequireDefault(require(\"./calculatePosition\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _convertUnsafeMethod = _interopRequireDefault(require(\"../../utils/convertUnsafeMethod\"));\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _getContainer = _interopRequireDefault(require(\"react-overlays/lib/utils/getContainer\"));\n\nvar _ownerDocument = _interopRequireDefault(require(\"react-overlays/lib/utils/ownerDocument\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nvar _class, _class2, _temp;\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nlet Position =\n/**\n * The Position component calculates the coordinates for its child, to position\n * it relative to a `target` component or node. Useful for creating callouts\n * and tooltips, the Position component injects a `style` props with `left` and\n * `top` values for positioning your component.\n *\n * It also injects \"arrow\" `left`, and `top` values for styling callout arrows\n * for giving your components a sense of directionality.\n */\n(0, _convertUnsafeMethod.default)(_class = (0, _autobindDecorator.default)(_class = (_temp = _class2 = class Position extends _react.default.Component {\n  constructor(props, context) {\n    super(props, context);\n    this.state = {\n      positionLeft: 0,\n      positionTop: 0,\n      arrowOffsetLeft: null,\n      arrowOffsetTop: null,\n      placement: this.props.placement\n    };\n    this._needsFlush = false;\n    this._lastTarget = null;\n  }\n\n  componentDidMount() {\n    if (this.props.autoComplete) {\n      this.updatePosition(this.getTarget(), 'visible');\n    } else {\n      this.updatePosition(this.getTarget(), 'hidden');\n    }\n\n    window.addEventListener('resize', this.maybeUpdatePosition, false);\n  }\n\n  UNSAFE_componentWillReceiveProps() {\n    this._needsFlush = true;\n  }\n\n  componentDidUpdate(prevProps) {\n    if (this._needsFlush) {\n      this._needsFlush = false;\n      this.maybeUpdatePosition(this.props.placement !== prevProps.placement, 'visible');\n    }\n  }\n\n  componentWillUnmount() {\n    window.removeEventListener('resize', this.maybeUpdatePosition, false);\n  }\n\n  render() {\n    const _this$props = this.props,\n          {\n      children,\n      className\n    } = _this$props,\n          props = _objectWithoutProperties(_this$props, [\"children\", \"className\"]);\n\n    const {\n      positionLeft,\n      positionTop,\n      maxHeight,\n      arrowOffsetLeft,\n      arrowOffsetTop,\n      placement,\n      targetValid\n    } = this.state;\n    delete props.target;\n\n    const child = _react.default.Children.only(children);\n\n    return (0, _react.cloneElement)(child, _objectSpread({}, (0, _filterDOMProps.default)(props), {\n      placement,\n      className: (0, _classnames.default)(className, child.props.className),\n      arrowStyle: {\n        left: arrowOffsetLeft,\n        top: arrowOffsetTop\n      },\n      style: _objectSpread({}, child.props.style, {\n        position: 'absolute',\n        zIndex: 100000,\n        // should match the z-index in ModalTrigger\n        left: positionLeft,\n        top: positionTop,\n        maxHeight: maxHeight,\n        visibility: targetValid ? 'visible' : 'hidden'\n      })\n    }));\n  }\n\n  getTarget() {\n    const target = this.props.target;\n    const targetElement = typeof target === 'function' ? target() : target;\n    return targetElement && _reactDom.default.findDOMNode(targetElement) || null;\n  }\n\n  maybeUpdatePosition(placementChanged, visibility) {\n    const target = this.getTarget();\n\n    if (!this.props.shouldUpdatePosition && target === this._lastTarget && !placementChanged) {\n      return;\n    }\n\n    this.updatePosition(target, visibility);\n  }\n\n  updatePosition(target, visibility) {\n    const {\n      placement,\n      containerPadding,\n      offset,\n      crossOffset,\n      flip,\n      boundariesElement\n    } = this.props;\n    this._lastTarget = target;\n    let targetValid = false;\n\n    if (!target) {\n      this.setState({\n        positionLeft: 0,\n        positionTop: 0,\n        arrowOffsetLeft: null,\n        arrowOffsetTop: null,\n        targetValid\n      });\n      return;\n    }\n\n    let bounds = target.getBoundingClientRect();\n    const minValidMargin = 4; // knye: this is temporary work-around to support PS Max 2019\n\n    targetValid = bounds.x >= minValidMargin && bounds.y >= minValidMargin && bounds.width > 0 && bounds.height > 0 && visibility === 'visible';\n\n    if (!targetValid) {\n      return;\n    }\n\n    const overlay = _reactDom.default.findDOMNode(this);\n\n    overlay.visibility = visibility;\n    const container = (0, _getContainer.default)(this.props.container, (0, _ownerDocument.default)(this).body);\n    this.setState(_objectSpread({}, (0, _calculatePosition.default)(placement, overlay, target, container, containerPadding, flip, boundariesElement, offset, crossOffset), {\n      targetValid\n    }));\n  }\n\n}, _class2.defaultProps = {\n  containerPadding: 10,\n  offset: 0,\n  crossOffset: 0\n}, _temp)) || _class) || _class;\n\nexports.default = Position;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _OpenTransition = _interopRequireDefault(require(\"../../utils/OpenTransition\"));\n\nvar _Overlay = _interopRequireDefault(require(\"./Overlay\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _RootCloseWrapper = _interopRequireDefault(require(\"react-overlays/lib/RootCloseWrapper\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n// The component is overriden to have a native platform flyout implementation for overlay\n// In Photoshop and Illustrator, the input widget comes at the top of non-native overlays, thus the requirement.\nclass UxpFlyoutOverlay extends _Overlay.default {\n  render() {\n    // Fix unused vars\n    let _this$props = this.props,\n        {\n      rootClose,\n      children\n    } = _this$props,\n        props = _objectWithoutProperties(_this$props, [\"rootClose\", \"children\"]); // Don't un-render the overlay while it's transitioning out.\n\n\n    const mountOverlay = props.show || !this.state.exited;\n\n    if (!mountOverlay) {\n      // Don't bother showing anything if we don't have to.\n      return null;\n    }\n\n    let child = children; // This animates the child node by injecting props, so it must precede\n    // anything that adds a wrapping div.\n\n    let {\n      onExit,\n      onExiting,\n      onEnter,\n      onEntering\n    } = props;\n    child = /*#__PURE__*/_react.default.createElement(_OpenTransition.default, {\n      in: props.show,\n      appear: true,\n      onExit: onExit,\n      onExiting: onExiting,\n      onExited: this.onExited,\n      onEnter: onEnter,\n      onEntering: onEntering,\n      onEntered: this.onEntered\n    }, child); // This goes after everything else because it adds a wrapping div.\n\n    if (rootClose) {\n      child = /*#__PURE__*/_react.default.createElement(_RootCloseWrapper.default, {\n        onRootClose: this.hide\n      }, child);\n    }\n\n    return child;\n  }\n\n}\n\nexports.default = UxpFlyoutOverlay;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _OpenTransition = _interopRequireDefault(require(\"../../utils/OpenTransition\"));\n\nvar _Overlay = _interopRequireDefault(require(\"./Overlay\"));\n\nvar _ownerDocument = _interopRequireDefault(require(\"react-overlays/lib/utils/ownerDocument\"));\n\nvar _Portal = _interopRequireDefault(require(\"react-overlays/lib/Portal\"));\n\nvar _UxpPosition = _interopRequireDefault(require(\"./UxpPosition\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _RootCloseWrapper = _interopRequireDefault(require(\"react-overlays/lib/RootCloseWrapper\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nclass UxpOverlay extends _Overlay.default {\n  constructor(...args) {\n    var _temp;\n\n    return _temp = super(...args), this.keydown = e => {\n      // https://jira.corp.adobe.com/browse/UXP-10984\n      // This is a workaround for Ps not sending keyup events to UXP\n      // The hide callback in rootclose wrapper on keyup doesn't work because of the above limitation\n      // Escape Key\n      if (e.keyCode === 27) {\n        this.hide(e);\n      }\n    }, _temp;\n  }\n\n  render() {\n    let {\n      containerPadding,\n      target,\n      container = this.getOverlayContainer(target),\n      placement,\n      offset,\n      crossOffset,\n      flip,\n      boundariesElement = () => (0, _ownerDocument.default)(this).body,\n      shouldUpdatePosition,\n      rootClose,\n      children,\n      show,\n      onExit,\n      onExiting,\n      onEnter,\n      onEntering\n    } = this.props; // Don't un-render the overlay while it's transitioning out.\n\n    const mountOverlay = show || !this.state.exited;\n\n    if (!mountOverlay) {\n      // Don't bother showing anything if we don't have to.\n      return null;\n    }\n\n    let child = children; // Position is be inner-most because it adds inline styles into the child,\n    // which the other wrappers don't forward correctly.\n\n    child = /*#__PURE__*/_react.default.createElement(_UxpPosition.default, {\n      container,\n      containerPadding,\n      target,\n      placement,\n      shouldUpdatePosition,\n      offset,\n      crossOffset,\n      flip,\n      boundariesElement\n    }, child); // This animates the child node by injecting props, so it must precede\n    // anything that adds a wrapping div.\n\n    child = /*#__PURE__*/_react.default.createElement(_OpenTransition.default, {\n      in: show,\n      appear: true,\n      onExit: onExit,\n      onExiting: onExiting,\n      onExited: this.onExited,\n      onEnter: onEnter,\n      onEntering: onEntering,\n      onEntered: this.onEntered\n    }, child); // This goes after everything else because it adds a wrapping div.\n\n    if (rootClose) {\n      child = /*#__PURE__*/_react.default.createElement(_RootCloseWrapper.default, {\n        onRootClose: this.hide\n      }, child);\n    } // Fix: Add role here\n\n\n    child = /*#__PURE__*/_react.default.createElement(\"div\", {\n      onKeyDown: this.keydown\n    }, child);\n    return /*#__PURE__*/_react.default.createElement(_Portal.default, {\n      container: container\n    }, child);\n  }\n\n}\n\nexports.default = UxpOverlay;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _autobindDecorator = _interopRequireDefault(require(\"autobind-decorator\"));\n\nvar _closest = _interopRequireDefault(require(\"dom-helpers/query/closest\"));\n\nvar _createId = _interopRequireDefault(require(\"../../utils/createId\"));\n\nvar _UxpFlyoutOverlay = _interopRequireDefault(require(\"./UxpFlyoutOverlay\"));\n\nvar _ModalContainer = require(\"../../ModalContainer/js/ModalContainer.js\");\n\nvar _UxpOverlay = _interopRequireDefault(require(\"./UxpOverlay\"));\n\nvar _OverlayTrigger = _interopRequireDefault(require(\"./OverlayTrigger\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nrequire(\"../uxp-style/index.css\");\n\nvar _class;\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nlet UxpOverlayTrigger = (0, _autobindDecorator.default)(_class = class UxpOverlayTrigger extends _OverlayTrigger.default {\n  constructor(props, context) {\n    super(props, context);\n    this.overlayId = (0, _createId.default)();\n    this._mountNode = null;\n    this.popup = null;\n    this.state = {\n      show: props.show === undefined ? props.defaultShow : props.show\n    };\n    this.overlayChild = _react.default.Children.toArray(this.props.children)[1];\n    this.isFlyout = this.overlayChild ? this.overlayChild.props.flyoutMenu : false;\n  }\n\n  getFlyoutOverlayContainer() {\n    const closestContainer = (0, _closest.default)(_reactDom.default.findDOMNode(this), '.react-spectrum-provider');\n    return closestContainer || document.querySelector('.react-spectrum-provider') || document.body;\n  }\n\n  componentDidMount() {\n    this._mountNode = document.createElement('div');\n    this._immediateFlyoutContainer = this.getFlyoutOverlayContainer();\n\n    if (this.isFlyout) {\n      this.popup = document.createElement('popup');\n      this.popup.className = 'uxp-flyout';\n    }\n\n    this.renderOverlay();\n    document.body.addEventListener('mouseUp', this.windowMouseUp);\n  }\n\n  show(e) {\n    if (!this.state.show && !this.props.disabled) {\n      this._lastFocus = this.rememberedFocus();\n      this.listenToScrollParents();\n      this.setState({\n        show: true\n      });\n\n      if (this.isFlyout) {\n        this._immediateFlyoutContainer.appendChild(this.popup);\n\n        this.popup.addEventListener('close', this.hide);\n        this.popup.showFlyout(_reactDom.default.findDOMNode(this), {\n          placement: 'bottom left'\n        });\n      }\n\n      if (this.props.onShow) {\n        this.props.onShow(e);\n      }\n    }\n  }\n\n  hide(e) {\n    this.removeListenersFromScrollParents();\n\n    if (this.state.show) {\n      this.setState({\n        show: false\n      });\n\n      if (this.isFlyout) {\n        this.popup.close();\n        this.popup.removeEventListener('close', this.hide);\n\n        this._immediateFlyoutContainer.removeChild(this.popup);\n      }\n\n      if (this.props.onHide) {\n        this.props.onHide(e);\n      }\n    }\n  }\n\n  componentWillUnmount() {\n    _ModalContainer.modalManager.removeFromModal(this._overlay);\n\n    _reactDom.default.unmountComponentAtNode(this._mountNode);\n\n    this._mountNode = null;\n    clearTimeout(this._hoverShowDelay);\n    clearTimeout(this._hoverHideDelay);\n    this.removeListenersFromScrollParents();\n    document.body.removeEventListener('mouseUp', this.windowMouseUp);\n  }\n\n  renderOverlay() {\n    if (this._overlay.props.show) {\n      _ModalContainer.modalManager.addToModal(this._overlay, true);\n    }\n\n    if (this.isFlyout) {\n      // show native flyout when select component overlay is being shown\n      _reactDom.default.render(this._overlay, this.popup);\n    } else {\n      _reactDom.default.unstable_renderSubtreeIntoContainer(this, this._overlay, this._mountNode);\n    }\n  }\n\n  makeOverlay(overlay, props) {\n    let {\n      target = this\n    } = this.props;\n\n    let {\n      rootClose = true\n    } = props,\n        overlayProps = _objectWithoutProperties(props, [\"rootClose\"]);\n\n    delete overlayProps.crossOffset;\n    delete overlayProps.defaultShow;\n    delete overlayProps.flip;\n\n    let topOverlayProps = _objectSpread({\n      id: overlay.props.id || overlayProps.id\n    }, props);\n\n    if (!overlay.props.id) {\n      overlayProps.id = this.overlayId;\n    }\n\n    return this.isFlyout ? /*#__PURE__*/_react.default.createElement(_UxpFlyoutOverlay.default, _extends({}, topOverlayProps, {\n      show: this.state.show,\n      onHide: this.hide,\n      rootClose: rootClose\n    }), (0, _react.cloneElement)(overlay, overlayProps)) : /*#__PURE__*/_react.default.createElement(_UxpOverlay.default, _extends({}, topOverlayProps, {\n      show: this.state.show,\n      onExited: this.onExited,\n      onHide: this.onHide,\n      target: target,\n      rootClose: rootClose\n    }), (0, _react.cloneElement)(overlay, overlayProps));\n  }\n\n}) || _class;\n\nexports.default = UxpOverlayTrigger;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _autobindDecorator = _interopRequireDefault(require(\"autobind-decorator\"));\n\nvar _calculatePosition = _interopRequireDefault(require(\"./calculatePosition\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _getContainer = _interopRequireDefault(require(\"react-overlays/lib/utils/getContainer\"));\n\nvar _ownerDocument = _interopRequireDefault(require(\"react-overlays/lib/utils/ownerDocument\"));\n\nvar _Position = _interopRequireDefault(require(\"./Position\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nvar _setOverlayOnProvider = _interopRequireDefault(require(\"../../utils/setOverlayOnProvider\"));\n\nvar _class;\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nlet UxpPosition = (0, _autobindDecorator.default)(_class = class UxpPosition extends _Position.default {\n  /* https://jira.corp.adobe.com/browse/UXP-8669\n  Dropdown flickering occurs because UXP calculates client offset and size after the initial render, \n  unlike the browsers which do so before the initial render happens.\n  To avoid the flicker, we need to hide the dropdown button till the layout is rendered again.\n  This can be directly merged to react-spectrum if they agree to do that, because this will not impact them much. */\n  componentDidMount() {\n    this.updatePosition(this.getTarget(), 'hidden');\n    window.addEventListener('resize', this.maybeUpdatePosition, false);\n  }\n\n  componentDidUpdate(prevProps) {\n    if (this._needsFlush) {\n      this._needsFlush = false;\n      this.maybeUpdatePosition(this.props.placement !== prevProps.placement, 'visible');\n    }\n  }\n\n  render() {\n    const _this$props = this.props,\n          {\n      children,\n      className\n    } = _this$props,\n          props = _objectWithoutProperties(_this$props, [\"children\", \"className\"]);\n\n    const {\n      positionLeft,\n      positionTop,\n      // maxHeight, \n      arrowOffsetLeft,\n      arrowOffsetTop,\n      placement\n    } = this.state;\n    delete props.target;\n\n    const child = _react.default.Children.only(children);\n\n    return (0, _react.cloneElement)(child, _objectSpread({}, (0, _filterDOMProps.default)(props), {\n      placement,\n      className: (0, _classnames.default)(className, child.props.className),\n      arrowStyle: {\n        left: arrowOffsetLeft,\n        top: arrowOffsetTop\n      },\n      ref: overlay => this.overlay = overlay,\n      style: _objectSpread({}, child.props.style, {\n        position: 'absolute',\n        zIndex: 100000,\n        // should match the z-index in ModalTrigger\n        left: positionLeft,\n        top: positionTop\n        /* maxHeight: maxHeight\n        JIRA BUG: https://jira.corp.adobe.com/browse/UXP-9371\n        The issue persists in UXP because UXP doesn't know the size of overlay and hence the endEdgeOffset, and so cannot flip the dropdown unless the layout is drawn once on the bottom \n        The workaround is to remove the incorrect maxHeight of the popover which is being calculated due to this.*/\n\n      })\n    }));\n  } // https://jira.corp.adobe.com/browse/UXP-10711\n  // resize event is not triggered when there is no change in size of the overlay\n  // hence, update the bounding rect manually since the clone element has the same reference as the tooltip component and set it on provider\n\n\n  updateOverlayBoundingRect() {\n    if (this.overlay && this.overlay.tooltipRef) {\n      let boundingRect = this.overlay.tooltipRef.getBoundingClientRect();\n      boundingRect.x = this.state.positionLeft;\n      boundingRect.y = this.state.positionTop;\n      (0, _setOverlayOnProvider.default)(this.overlay.tooltipRef, true, this.overlay.hide, boundingRect);\n    }\n  }\n\n  maybeUpdatePosition(placementChanged, visibility) {\n    const target = this.getTarget();\n\n    if (!this.props.shouldUpdatePosition && target === this._lastTarget && !placementChanged) {\n      return;\n    }\n\n    this.updatePosition(target, visibility);\n  }\n\n  updatePosition(target, visibility) {\n    const {\n      placement,\n      containerPadding,\n      offset,\n      crossOffset,\n      flip,\n      boundariesElement\n    } = this.props;\n    this._lastTarget = target;\n\n    if (!target) {\n      this.setState({\n        positionLeft: 0,\n        positionTop: 0,\n        arrowOffsetLeft: null,\n        arrowOffsetTop: null\n      });\n      return;\n    }\n\n    const overlay = _reactDom.default.findDOMNode(this);\n\n    overlay.style.visibility = visibility;\n    const container = (0, _getContainer.default)(this.props.container, (0, _ownerDocument.default)(this).body);\n    this.setState((0, _calculatePosition.default)(placement, overlay, target, container, containerPadding, flip, boundariesElement, offset, crossOffset));\n\n    if (this.overlay) {\n      this.updateOverlayBoundingRect();\n    }\n  }\n\n}) || _class;\n\nexports.default = UxpPosition;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.calculatePositionInternal = calculatePositionInternal;\nexports.default = calculatePosition;\n\nvar _style = _interopRequireDefault(require(\"dom-helpers/style\"));\n\nvar _offset = _interopRequireDefault(require(\"dom-helpers/query/offset\"));\n\nvar _position = _interopRequireDefault(require(\"dom-helpers/query/position\"));\n\nvar _scrollLeft = _interopRequireDefault(require(\"dom-helpers/query/scrollLeft\"));\n\nvar _scrollTop = _interopRequireDefault(require(\"dom-helpers/query/scrollTop\"));\n\nvar _ownerDocument = _interopRequireDefault(require(\"dom-helpers/ownerDocument\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nconst AXIS = {\n  top: 'top',\n  bottom: 'top',\n  left: 'left',\n  right: 'left',\n  center: 'left'\n};\nconst FLIPPED_DIRECTION = {\n  top: 'bottom',\n  bottom: 'top',\n  left: 'right',\n  right: 'left'\n};\nconst CROSS_AXIS = {\n  top: 'left',\n  left: 'top'\n};\nconst AXIS_SIZE = {\n  top: 'height',\n  left: 'width'\n};\nconst PARSED_PLACEMENT_CACHE = {};\n\nfunction getContainerDimensions(containerNode) {\n  let width,\n      height,\n      top = 0,\n      left = 0;\n  let scroll = {};\n\n  const containerDOMNode = _reactDom.default.findDOMNode(containerNode);\n\n  if (containerDOMNode.tagName === 'BODY') {\n    width = window.innerWidth || containerNode.clientWidth;\n    height = window.innerHeight || containerNode.clientHeight;\n    scroll.top = (0, _scrollTop.default)((0, _ownerDocument.default)(containerDOMNode).documentElement) || (0, _scrollTop.default)(containerDOMNode);\n    scroll.left = (0, _scrollLeft.default)((0, _ownerDocument.default)(containerDOMNode).documentElement) || (0, _scrollLeft.default)(containerDOMNode);\n  } else {\n    ({\n      width,\n      height,\n      top,\n      left\n    } = (0, _offset.default)(containerDOMNode));\n    scroll.top = (0, _scrollTop.default)(containerDOMNode);\n    scroll.left = (0, _scrollLeft.default)(containerDOMNode);\n  }\n\n  return {\n    width,\n    height,\n    scroll,\n    top,\n    left\n  };\n}\n\nfunction getDelta(axis, offset, size, containerDimensions, padding) {\n  const containerScroll = containerDimensions.scroll[axis];\n  const containerHeight = containerDimensions[AXIS_SIZE[axis]];\n  const startEdgeOffset = offset - padding - containerScroll;\n  const endEdgeOffset = offset + padding - containerScroll + size;\n\n  if (startEdgeOffset < 0) {\n    return -startEdgeOffset;\n  } else if (endEdgeOffset > containerHeight) {\n    return Math.max(containerHeight - endEdgeOffset, -startEdgeOffset);\n  } else {\n    return 0;\n  }\n}\n\nfunction shouldFlip(axis, offset, size, padding, placement, flipContainerDimensions, containerOffsetWithBoundary) {\n  const containerScroll = flipContainerDimensions.scroll[axis];\n  const containerHeight = flipContainerDimensions[AXIS_SIZE[axis]];\n  const startEdgeOffset = containerOffsetWithBoundary[axis] + offset - padding - containerScroll;\n  const endEdgeOffset = containerOffsetWithBoundary[axis] + offset + padding - containerScroll + size;\n\n  if (startEdgeOffset < 0 && (placement === 'top' || placement === 'left')) {\n    return true;\n  } else if (endEdgeOffset > containerHeight && (placement === 'bottom' || placement === 'right')) {\n    return true;\n  } else {\n    return false;\n  }\n}\n\nfunction getMargins(node) {\n  const style = window.getComputedStyle(node);\n  return {\n    top: parseInt(style.marginTop, 10) || 0,\n    bottom: parseInt(style.marginBottom, 10) || 0,\n    left: parseInt(style.marginLeft, 10) || 0,\n    right: parseInt(style.marginRight, 10) || 0\n  };\n}\n\nfunction parsePlacement(input) {\n  if (PARSED_PLACEMENT_CACHE[input]) {\n    return PARSED_PLACEMENT_CACHE[input];\n  }\n\n  let [placement, crossPlacement] = input.split(' ');\n  let axis = AXIS[placement] || 'right';\n  let crossAxis = CROSS_AXIS[axis];\n\n  if (!AXIS[crossPlacement]) {\n    crossPlacement = 'center';\n  }\n\n  let size = AXIS_SIZE[axis];\n  let crossSize = AXIS_SIZE[crossAxis];\n  PARSED_PLACEMENT_CACHE[input] = {\n    placement,\n    crossPlacement,\n    axis,\n    crossAxis,\n    size,\n    crossSize\n  };\n  return PARSED_PLACEMENT_CACHE[input];\n}\n\nfunction computePosition(childOffset, containerDimensions, overlaySize, placementInfo, offset, crossOffset) {\n  const {\n    placement,\n    crossPlacement,\n    axis,\n    crossAxis,\n    size,\n    crossSize\n  } = placementInfo;\n  let position = {};\n  position[crossAxis] = childOffset[crossAxis] + crossOffset;\n\n  if (crossPlacement === 'center') {\n    position[crossAxis] += (childOffset[crossSize] - overlaySize[crossSize]) / 2;\n  } else if (crossPlacement !== crossAxis) {\n    position[crossAxis] += childOffset[crossSize] - overlaySize[crossSize];\n  } // Ensure overlay sticks to target(ignore for overlays smaller than target)\n\n\n  if (childOffset[crossSize] < overlaySize[crossSize]) {\n    const positionForPositiveSideOverflow = Math.min(position[crossAxis], childOffset[crossAxis]);\n    position[crossAxis] = Math.max(positionForPositiveSideOverflow, childOffset[crossAxis] - overlaySize[crossSize] + childOffset[crossSize]);\n  }\n\n  if (placement === axis) {\n    position[axis] = childOffset[axis] - overlaySize[size] + offset;\n  } else {\n    position[axis] = childOffset[axis] + childOffset[size] + offset;\n  }\n\n  return position;\n}\n\nfunction calculatePositionInternal(placementInput, containerDimensions, childOffset, overlaySize, margins, padding, flip, boundaryDimensions, containerOffsetWithBoundary, offset, crossOffset) {\n  let placementInfo = parsePlacement(placementInput);\n  const {\n    axis,\n    size,\n    crossAxis,\n    crossSize,\n    placement,\n    crossPlacement\n  } = placementInfo;\n  let position = computePosition(childOffset, containerDimensions, overlaySize, placementInfo, offset, crossOffset);\n  let normalizedOffset = offset; // First check if placement should be flipped\n\n  if (flip && shouldFlip(axis, position[axis], overlaySize[size], padding, placement, boundaryDimensions, containerOffsetWithBoundary)) {\n    const flippedPlacementInfo = parsePlacement(`${FLIPPED_DIRECTION[placement]} ${crossPlacement}`);\n    const {\n      axis,\n      size\n    } = flippedPlacementInfo;\n    const flippedPosition = computePosition(childOffset, containerDimensions, overlaySize, flippedPlacementInfo, -1 * offset, crossOffset); // Check if flipped placement has enough space otherwise flip is not possible\n\n    if (!shouldFlip(axis, flippedPosition[axis], overlaySize[size], padding, FLIPPED_DIRECTION[placement], boundaryDimensions, containerOffsetWithBoundary)) {\n      placementInfo = flippedPlacementInfo;\n      position = flippedPosition;\n      normalizedOffset = -1 * offset;\n    }\n  }\n\n  let delta = getDelta(crossAxis, position[crossAxis], overlaySize[crossSize], boundaryDimensions, padding);\n  position[crossAxis] += delta;\n  let maxHeight = Math.max(0, boundaryDimensions.height + boundaryDimensions.top + boundaryDimensions.scroll.top - containerOffsetWithBoundary.top - position.top - margins.top - margins.bottom - padding);\n  overlaySize.height = Math.min(overlaySize.height, maxHeight);\n  position = computePosition(childOffset, containerDimensions, overlaySize, placementInfo, normalizedOffset, crossOffset);\n  delta = delta = getDelta(crossAxis, position[crossAxis], overlaySize[crossSize], boundaryDimensions, padding);\n  position[crossAxis] += delta;\n  const arrowPosition = {};\n  arrowPosition[crossAxis] = childOffset[crossSize] > overlaySize[crossSize] ? null : childOffset[crossAxis] - position[crossAxis] + childOffset[crossSize] / 2;\n  return {\n    positionLeft: position.left,\n    positionTop: position.top,\n    maxHeight: maxHeight,\n    arrowOffsetLeft: arrowPosition.left,\n    arrowOffsetTop: arrowPosition.top,\n    placement: placementInfo.placement\n  };\n}\n\nfunction calculatePosition(placementInput, overlayNode, target, container, padding, flip, boundariesElement, offset, crossOffset) {\n  const isBodyContainer = container.tagName === 'BODY';\n  const childOffset = isBodyContainer ? (0, _offset.default)(target) : (0, _position.default)(target, container);\n\n  if (!isBodyContainer) {\n    childOffset.top += parseInt((0, _style.default)(target, 'marginTop'), 10) || 0;\n    childOffset.left += parseInt((0, _style.default)(target, 'marginLeft'), 10) || 0;\n  }\n\n  const overlaySize = (0, _offset.default)(overlayNode);\n  const margins = getMargins(overlayNode);\n  overlaySize.width += margins.left + margins.right;\n  overlaySize.height += margins.top + margins.bottom;\n  const containerDimensions = getContainerDimensions(container);\n  const boundaryContainer = boundariesElement === 'container' ? container : boundariesElement();\n  const boundaryDimensions = getContainerDimensions(boundaryContainer);\n  const containerOffsetWithBoundary = boundaryContainer.tagName === 'BODY' ? (0, _offset.default)(container) : (0, _position.default)(container, boundaryContainer);\n  return calculatePositionInternal(placementInput, containerDimensions, childOffset, overlaySize, margins, padding, flip, boundaryDimensions, containerOffsetWithBoundary, offset, crossOffset);\n}\n","\"use strict\";\n\nvar _UxpOptions = _interopRequireDefault(require(\"../utils/UxpOptions\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nmodule.exports = _UxpOptions.default.select('Popover', () => require('./js/UxpPopover'), () => require('./js/Popover'));\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _autobindDecorator = _interopRequireDefault(require(\"autobind-decorator\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _createId = _interopRequireDefault(require(\"../../utils/createId\"));\n\nvar _DialogHeader = _interopRequireDefault(require(\"../../Dialog/js/DialogHeader\"));\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _FocusManager = require(\"../../utils/FocusManager\");\n\nrequire(\"../style/index.css\");\n\nvar _class, _class2, _temp;\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nif (process.env.SCALE_MEDIUM && process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/popover/index.css\");\n\n  require(\"@adobe/spectrum-css/dist/components/popover/index-diff.css\");\n} else if (process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/popover/index-lg.css\");\n} else {\n  require(\"@adobe/spectrum-css/dist/components/popover/index.css\");\n}\n\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHT) require(\"@adobe/spectrum-css/dist/components/popover/multiStops/light.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARK) require(\"@adobe/spectrum-css/dist/components/popover/multiStops/dark.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHTEST) require(\"@adobe/spectrum-css/dist/components/popover/multiStops/lightest.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARKEST) require(\"@adobe/spectrum-css/dist/components/popover/multiStops/darkest.css\");\n\nif (process.env.SCALE_MEDIUM && process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/dialog/index.css\");\n\n  require(\"@adobe/spectrum-css/dist/components/dialog/index-diff.css\");\n} else if (process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/dialog/index-lg.css\");\n} else {\n  require(\"@adobe/spectrum-css/dist/components/dialog/index.css\");\n}\n\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHT) require(\"@adobe/spectrum-css/dist/components/dialog/multiStops/light.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARK) require(\"@adobe/spectrum-css/dist/components/dialog/multiStops/dark.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHTEST) require(\"@adobe/spectrum-css/dist/components/dialog/multiStops/lightest.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARKEST) require(\"@adobe/spectrum-css/dist/components/dialog/multiStops/darkest.css\");\n\nlet Popover = (0, _autobindDecorator.default)(_class = (_temp = _class2 = class Popover extends _react.Component {\n  constructor(props, context) {\n    super(props, context);\n    this.defaultId = (0, _createId.default)();\n  }\n\n  componentDidMount() {\n    if (this.props.trapFocus) {\n      this._trapFocusTimeout = requestAnimationFrame(() => {\n        if (this.popoverRef && !this.popoverRef.contains(document.activeElement)) {\n          this.popoverRef.focus();\n        }\n      });\n    }\n  }\n\n  componentWillUnmount() {\n    if (this._trapFocusTimeout) {\n      cancelAnimationFrame(this._trapFocusTimeout);\n    }\n  }\n\n  onFocus(e) {\n    if (this.props.onFocus) {\n      this.props.onFocus(e);\n    }\n\n    if (this.props.trapFocus && e.target === this.popoverRef && !this.popoverRef.contains(e.relatedTarget)) {\n      (0, _FocusManager.trapFocus)(this, e);\n    }\n  }\n\n  onKeyDown(e) {\n    if (this.props.onKeyDown) {\n      this.props.onKeyDown(e); // Do nothing if stopPropagation has been called on event after onKeyDown prop executes.\n\n      if (e.isPropagationStopped && e.isPropagationStopped()) {\n        return;\n      }\n    }\n\n    if (this.props.trapFocus) {\n      (0, _FocusManager.trapFocus)(this, e);\n    }\n  }\n\n  render() {\n    const _this$props = this.props,\n          {\n      variant,\n      placement,\n      open,\n      title,\n      children,\n      className,\n      isDialog = true,\n      // private. for use only by Menu.\n      trapFocus,\n      tabIndex = null,\n      id = this.defaultId,\n      'aria-label': ariaLabel,\n      'aria-labelledby': ariaLabelledby,\n      'aria-describedby': ariaDescribedby\n    } = _this$props,\n          otherProps = _objectWithoutProperties(_this$props, [\"variant\", \"placement\", \"open\", \"title\", \"children\", \"className\", \"isDialog\", \"trapFocus\", \"tabIndex\", \"id\", \"aria-label\", \"aria-labelledby\", \"aria-describedby\"]);\n\n    delete otherProps.target;\n    let content = isDialog ? /*#__PURE__*/_react.default.createElement(\"div\", {\n      className: \"spectrum-Dialog-content\",\n      role: \"presentation\",\n      id: `${id}-content`\n    }, children) : children;\n    return (\n      /*#__PURE__*/\n      // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n      _react.default.createElement(\"div\", _extends({\n        ref: p => this.popoverRef = p,\n        className: (0, _classnames.default)('spectrum-Popover', // 'react-spectrum-Popover', //animations not yet supported in UXP, causing the drop down to move\n        `spectrum-Popover--${placement.split(' ')[0]}`, {\n          'spectrum-Popover--withTip': isDialog,\n          'spectrum-Popover--dialog': isDialog,\n          [`spectrum-Dialog--${variant}`]: isDialog,\n          'is-open': open\n        }, className),\n        role: isDialog ? 'dialog' : 'presentation',\n        id: id,\n        \"aria-label\": ariaLabel,\n        \"aria-labelledby\": ariaLabelledby || (isDialog && title && !ariaLabel ? `${id}-heading` : null),\n        \"aria-describedby\": ariaDescribedby || (isDialog && title && children ? `${id}-content` : null),\n        \"data-testid\": \"popover\"\n      }, (0, _filterDOMProps.default)(otherProps), {\n        onFocus: this.onFocus,\n        onKeyDown: this.onKeyDown,\n        tabIndex: trapFocus && tabIndex === null ? 1 : tabIndex\n      }), isDialog && title && /*#__PURE__*/_react.default.createElement(_DialogHeader.default, {\n        id: `${id}-heading`,\n        title: title,\n        variant: variant\n      }), content, isDialog && this.renderTip())\n    );\n  }\n\n  renderTip() {\n    return /*#__PURE__*/_react.default.createElement(\"div\", {\n      className: \"spectrum-Popover-tip\",\n      style: this.props.arrowStyle,\n      \"aria-hidden\": \"true\",\n      \"data-testid\": \"tip\"\n    });\n  }\n\n}, _class2.propTypes = {\n  /**\n   * The variant will affect color and add an icon.\n   */\n  variant: _propTypes.default.oneOf(['default', 'error']),\n\n  /**\n   * The position of the popover. If used with overlay trigger and there isn't enough room\n   * for the tooltip in that position, it will make a limited attempt to find a new position.\n   */\n  placement: _propTypes.default.oneOf(['bottom', 'bottom left', 'bottom right', 'top', 'top left', 'top right', 'left', 'left top', 'left bottom', 'right', 'right top', 'right bottom']),\n\n  /**\n   * Whether the popover is opened.\n   */\n  open: _propTypes.default.bool,\n\n  /**\n   * The title of the popover.\n   */\n  title: _propTypes.default.node,\n\n  /**\n   * The css class name of the popover.\n   */\n  className: _propTypes.default.string,\n\n  /**\n   * Whether the focus should be trapped.\n   */\n  trapFocus: _propTypes.default.bool\n}, _class2.defaultProps = {\n  variant: 'default',\n  placement: 'bottom',\n  open: true,\n  trapFocus: true\n}, _temp)) || _class;\n\nexports.default = Popover;\nPopover.displayName = 'Popover';\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _autobindDecorator = _interopRequireDefault(require(\"autobind-decorator\"));\n\nvar _dna = _interopRequireDefault(require(\"../../utils/dna\"));\n\nvar _Popover = _interopRequireDefault(require(\"./Popover\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _setOverlayOnProvider = _interopRequireDefault(require(\"../../utils/setOverlayOnProvider\"));\n\nvar _UxpProvider = require(\"../../Provider/js/UxpProvider\");\n\nvar _class;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction getSizePathStyle(placement) {\n  const size = 10;\n  const width = size * 2;\n  const height = width;\n\n  if (placement === 'right') {\n    return [width, height, `M ${size * 2} 0 l ${-size} ${size} l ${size} ${size}`, {\n      left: -width\n    }];\n  }\n\n  if (placement === 'left') {\n    return [width, height, `M 0 0 l ${size} ${size} l ${-size} ${size}`, {\n      right: -width\n    }];\n  }\n\n  if (placement === 'top') {\n    return [width, height, `M 0 0 l ${size} ${size} l ${size} ${-size}`, {\n      bottom: -height + 0.5\n    }];\n  }\n\n  if (placement === 'bottom') {\n    return [width, height, `M 0 ${size * 2} l ${size} ${-size} l ${size} ${size}`, {\n      top: -height\n    }];\n  }\n}\n\nlet UxpPopover = (0, _autobindDecorator.default)(_class = class UxpPopover extends _Popover.default {\n  constructor(...args) {\n    var _temp;\n\n    return _temp = super(...args), this.setOverlayVisible = () => {\n      if (!this.props.flyoutMenu) {\n        (0, _setOverlayOnProvider.default)(this.popoverRef, true, this.hide);\n      }\n    }, this.setOverlayHidden = () => {\n      if (!this.props.flyoutMenu) {\n        (0, _setOverlayOnProvider.default)(this.popoverRef, false);\n      }\n    }, this.hide = () => {\n      if (this.popoverRef) {\n        this.popoverRef.style.display = 'none';\n      }\n    }, _temp;\n  }\n\n  componentDidMount() {\n    if (this.popoverRef) {\n      this.popoverRef.addEventListener('resize', this.setOverlayVisible);\n    }\n  }\n\n  componentWillUnmount() {\n    if (this.popoverRef) {\n      this.popoverRef.removeEventListener('resize', this.setOverlayVisible);\n    }\n\n    this.setOverlayHidden();\n  }\n\n  renderTip() {\n    const {\n      placement\n    } = this.props;\n    let [pathMetrics] = Array.of(getSizePathStyle(placement)); // Array.of used to remove error for uniterable return value\n\n    let [width, height, pathData, style] = pathMetrics;\n    return /*#__PURE__*/_react.default.createElement(_UxpProvider.SpectrumContext.Consumer, null, ({\n      scale,\n      theme\n    } = {}) => /*#__PURE__*/_react.default.createElement(\"svg\", {\n      className: \"spectrum-Popover-tip\",\n      style: _objectSpread({\n        width,\n        height,\n        border: 'none',\n        background: 'none',\n        fill: _dna.default.elements[theme][scale].popover.default.states.default['background-color'],\n        stroke: _dna.default.elements[theme][scale].popover.default.states.default['border-color']\n      }, style)\n    }, /*#__PURE__*/_react.default.createElement(\"path\", {\n      d: pathData\n    })));\n  }\n\n}) || _class;\n\nexports.default = UxpPopover;\n","\"use strict\";\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nmodule.exports = require('./js/PortalContainer');\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nlet children = {};\n/*\n * A global portal that lives in the document body which can be used to add\n * overlays like modals outside the normal React component tree.\n */\n\nclass PortalContainer {\n  /**\n   * Renders the child\n   * @param child component to be render\n   * @param context Parent with the context\n   */\n  static add(child, context) {\n    let node = children[child.key] || document.createElement('div');\n\n    if (!context) {\n      _reactDom.default.render(child, node);\n    } else {\n      _reactDom.default.unstable_renderSubtreeIntoContainer(context, child, node);\n    }\n\n    children[child.key] = node;\n  }\n  /**\n   * Remove child from the dom\n   * @param child\n   */\n\n\n  static remove(child) {\n    _reactDom.default.unmountComponentAtNode(children[child.key]);\n\n    delete children[child.key];\n  }\n  /**\n   * Remove all portals from the dom\n   */\n\n\n  static removeAll() {\n    for (let child in children) {\n      // skip loop if the property is from prototype\n      if (!children.hasOwnProperty(child)) {\n        continue;\n      }\n\n      _reactDom.default.unmountComponentAtNode(children[child]);\n\n      delete children[child];\n    }\n  }\n\n}\n\nexports.default = PortalContainer;\n","\"use strict\";\n\nvar _UxpOptions = _interopRequireDefault(require(\"../utils/UxpOptions\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nmodule.exports = _UxpOptions.default.select('Provider', () => require('./js/UxpProvider'), () => require('./js/Provider'));\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _configureTypekit = _interopRequireDefault(require(\"../../utils/configureTypekit\"));\n\nvar _convertUnsafeMethod = _interopRequireDefault(require(\"../../utils/convertUnsafeMethod\"));\n\nvar _intl = require(\"../../utils/intl\");\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _state = require(\"../../Toast/js/state\");\n\nrequire(\"../../focus-ring-polyfill\");\n\nrequire(\"../style/index.css\");\n\nvar _class, _class2, _temp;\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nif (process.env.SCALE_MEDIUM && process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/page/index.css\");\n\n  require(\"@adobe/spectrum-css/dist/components/page/index-diff.css\");\n} else if (process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/page/index-lg.css\");\n} else {\n  require(\"@adobe/spectrum-css/dist/components/page/index.css\");\n}\n\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHT) require(\"@adobe/spectrum-css/dist/components/page/multiStops/light.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARK) require(\"@adobe/spectrum-css/dist/components/page/multiStops/dark.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHTEST) require(\"@adobe/spectrum-css/dist/components/page/multiStops/lightest.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARKEST) require(\"@adobe/spectrum-css/dist/components/page/multiStops/darkest.css\");\n\nif (process.env.SCALE_MEDIUM && process.env.SCALE_LARGE) {\n  require(\"../../spectrum-css-overrides/typography/index.css\");\n\n  require(\"../../spectrum-css-overrides/typography/index-diff.css\");\n} else if (process.env.SCALE_LARGE) {\n  require(\"../../spectrum-css-overrides/typography/index-lg.css\");\n} else {\n  require(\"../../spectrum-css-overrides/typography/index.css\");\n}\n\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHT) require(\"../../spectrum-css-overrides/typography/multiStops/light.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARK) require(\"../../spectrum-css-overrides/typography/multiStops/dark.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHTEST) require(\"../../spectrum-css-overrides/typography/multiStops/lightest.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARKEST) require(\"../../spectrum-css-overrides/typography/multiStops/darkest.css\");\n\nlet Provider = (0, _convertUnsafeMethod.default)(_class = (_temp = _class2 = class Provider extends _react.Component {\n  // Expose the current theme etc. on the context for children to read if needed.\n  constructor(props) {\n    super(props);\n    (0, _intl.setLocale)(props.locale);\n    this.configureTypekit();\n  }\n\n  configureTypekit() {\n    if (process.browser) {\n      (0, _configureTypekit.default)(this.props.typekitId);\n    }\n\n    if (this.props.toastPlacement) {\n      (0, _state.setToastPlacement)(this.props.toastPlacement);\n    }\n  }\n\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    if ('locale' in nextProps) {\n      (0, _intl.setLocale)(nextProps.locale);\n    }\n\n    if (nextProps.toastPlacement) {\n      (0, _state.setToastPlacement)(nextProps.toastPlacement);\n    }\n  }\n\n  getChildContext() {\n    return {\n      theme: this.props.theme,\n      scale: this.props.scale,\n      locale: this.props.locale\n    };\n  }\n\n  render() {\n    let _this$props = this.props,\n        {\n      theme,\n      className,\n      children,\n      scale\n    } = _this$props,\n        props = _objectWithoutProperties(_this$props, [\"theme\", \"className\", \"children\", \"scale\"]);\n\n    return /*#__PURE__*/_react.default.createElement(\"div\", _extends({\n      className: (0, _classnames.default)(className, 'react-spectrum-provider', 'spectrum', `spectrum--${theme}`, `spectrum--${scale}`)\n    }, (0, _filterDOMProps.default)(props)), children);\n  }\n\n}, _class2.propTypes = {\n  /**\n   * Theme.\n   */\n  theme: _propTypes.default.oneOf(['light', 'lightest', 'dark', 'darkest']),\n\n  /**\n   * Scale.\n   */\n  scale: _propTypes.default.oneOf(['medium', 'large']),\n\n  /**\n   * The placement of the toasts. By default position is top- shorthand for \"top center\".\n   */\n  toastPlacement: _propTypes.default.oneOf(['top', 'top left', 'top center', 'top right', 'bottom', 'bottom left', 'bottom center', 'bottom right']),\n\n  /**\n   * Type kit ID. This is required and products must get their own id's.\n   * https://typekit.com/account/kits\n   * There is a default provided, but it's only intended for prototyping work.\n   */\n  typekitId: _propTypes.default.string,\n\n  /**\n   * Locale, takes format primary-region ex. en-US, cs-CZ\n   */\n  locale: _propTypes.default.string,\n\n  /**\n   * CSS class name.\n   */\n  className: _propTypes.default.string\n}, _class2.defaultProps = {\n  theme: 'light',\n  scale: 'medium',\n  typekitId: 'ruf7eed',\n  locale: _intl.defaultLocale\n}, _class2.childContextTypes = {\n  theme: _propTypes.default.oneOf(['light', 'lightest', 'dark', 'darkest']),\n  scale: _propTypes.default.oneOf(['medium', 'large']),\n  locale: _propTypes.default.string\n}, _temp)) || _class;\n\nexports.default = Provider;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.SpectrumContext = void 0;\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _hostStyleConfig = _interopRequireDefault(require(\"../../utils/hostStyleConfig\"));\n\nvar _ownerDocument = _interopRequireDefault(require(\"react-overlays/lib/utils/ownerDocument\"));\n\nvar _Provider = _interopRequireDefault(require(\"./Provider\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nif (process.env.SCALE_MEDIUM && process.env.SCALE_LARGE) {\n  require(\"../../spectrum-css-overrides/typography/index.css\");\n\n  require(\"../../spectrum-css-overrides/typography/index-diff.css\");\n} else if (process.env.SCALE_LARGE) {\n  require(\"../../spectrum-css-overrides/typography/index-lg.css\");\n} else {\n  require(\"../../spectrum-css-overrides/typography/index.css\");\n}\n\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHT) require(\"../../spectrum-css-overrides/typography/multiStops/light.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARK) require(\"../../spectrum-css-overrides/typography/multiStops/dark.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHTEST) require(\"../../spectrum-css-overrides/typography/multiStops/lightest.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARKEST) require(\"../../spectrum-css-overrides/typography/multiStops/darkest.css\");\n\nconst SpectrumContext = _react.default.createContext({\n  theme: 'light',\n  scale: 'medium',\n  productId: 'default',\n  boundariesElement: () => (0, _ownerDocument.default)(void 0).body,\n  disableNativeControls: false,\n  overlay: null\n});\n\nexports.SpectrumContext = SpectrumContext;\n\nclass UxpProvider extends _Provider.default {\n  constructor(props) {\n    super(props);\n    this.state = {\n      overlay: {\n        overlayRef: null,\n        data: {\n          visible: false,\n          callback: undefined,\n          boundingRect: null\n        }\n      }\n    };\n  }\n\n  setOverlay(overlayRef, data) {\n    this.setState({\n      overlay: {\n        overlayRef,\n        data\n      }\n    });\n  }\n\n  configureTypekit() {// Do nothing for Uxp - skip loading typekit for UXP\n  }\n\n  componentDidMount() {\n    // use this prop to use any host specified theme in your extension, by default no host styling is applied\n    if (this.props.useHostThemes) {\n      (0, _hostStyleConfig.default)();\n    }\n\n    this.providerRef.setAttribute('setOverlay', this.setOverlay.bind(this));\n  }\n\n  render() {\n    let _this$props = this.props,\n        {\n      theme = 'light',\n      scale = 'medium',\n      productId = '',\n      disableNativeControls,\n      boundariesElement,\n      className,\n      style: otherStyles = {},\n      children\n    } = _this$props,\n        otherProps = _objectWithoutProperties(_this$props, [\"theme\", \"scale\", \"productId\", \"disableNativeControls\", \"boundariesElement\", \"className\", \"style\", \"children\"]);\n\n    const {\n      overlay\n    } = this.state;\n    const styles = {\n      'fontFamily': 'Adobe Clean'\n    };\n    return /*#__PURE__*/_react.default.createElement(SpectrumContext.Provider, {\n      value: {\n        theme,\n        scale,\n        productId,\n        boundariesElement,\n        disableNativeControls,\n        overlay\n      }\n    }, /*#__PURE__*/_react.default.createElement(\"div\", _extends({\n      ref: r => this.providerRef = r\n    }, (0, _filterDOMProps.default)(otherProps), {\n      style: Object.assign({}, styles, otherStyles),\n      className: (0, _classnames.default)('react-spectrum-provider', `spectrum--${theme}`, className, `spectrum--${scale}`, 'spectrum', 'spectrum--override')\n    }), typeof children !== 'string' && children));\n  }\n\n}\n\nexports.default = UxpProvider;\n","\"use strict\";\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nmodule.exports = require('./js/Rule');\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = Rule;\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nif (process.env.SCALE_MEDIUM && process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/rule/index.css\");\n\n  require(\"@adobe/spectrum-css/dist/components/rule/index-diff.css\");\n} else if (process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/rule/index-lg.css\");\n} else {\n  require(\"@adobe/spectrum-css/dist/components/rule/index.css\");\n}\n\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHT) require(\"@adobe/spectrum-css/dist/components/rule/multiStops/light.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARK) require(\"@adobe/spectrum-css/dist/components/rule/multiStops/dark.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHTEST) require(\"@adobe/spectrum-css/dist/components/rule/multiStops/lightest.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARKEST) require(\"@adobe/spectrum-css/dist/components/rule/multiStops/darkest.css\");\n\nfunction Rule(_ref) {\n  let {\n    className,\n    variant = 'large'\n  } = _ref,\n      otherProps = _objectWithoutProperties(_ref, [\"className\", \"variant\"]);\n\n  return /*#__PURE__*/_react.default.createElement(\"hr\", _extends({}, (0, _filterDOMProps.default)(otherProps), {\n    className: (0, _classnames.default)('spectrum-Rule', `spectrum-Rule--${variant}`, className)\n  }));\n}\n\nRule.propTypes = {\n  /** Which Rule variant to render. */\n  variant: _propTypes.default.oneOf(['large', 'medium', 'small'])\n};\n","\"use strict\";\n\nvar _UxpOptions = _interopRequireDefault(require(\"../utils/UxpOptions\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nmodule.exports = _UxpOptions.default.select('Search', () => require('./js/UxpSearch'), () => require('./js/Search'));\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _autobindDecorator = _interopRequireDefault(require(\"autobind-decorator\"));\n\nvar _Button = _interopRequireDefault(require(\"../../Button\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _icon = require(\"../../utils/icon\");\n\nvar _convertUnsafeMethod = _interopRequireDefault(require(\"../../utils/convertUnsafeMethod\"));\n\nvar _createId = _interopRequireDefault(require(\"../../utils/createId\"));\n\nvar _CrossSmall = _interopRequireDefault(require(\"../../Icon/core/CrossSmall\"));\n\nvar _Magnifier = _interopRequireDefault(require(\"../../Icon/core/Magnifier\"));\n\nvar _intl = require(\"../../utils/intl\");\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _Textfield = _interopRequireDefault(require(\"../../Textfield\"));\n\nvar _class, _class2, _temp;\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst intlMessages = {\n  \"cs-CZ\": _interopRequireDefault(require(\"./../intl/cs-CZ.json\")).default,\n  \"da-DK\": _interopRequireDefault(require(\"./../intl/da-DK.json\")).default,\n  \"de-DE\": _interopRequireDefault(require(\"./../intl/de-DE.json\")).default,\n  \"en-US\": _interopRequireDefault(require(\"./../intl/en-US.json\")).default,\n  \"es-ES\": _interopRequireDefault(require(\"./../intl/es-ES.json\")).default,\n  \"fi-FI\": _interopRequireDefault(require(\"./../intl/fi-FI.json\")).default,\n  \"fr-FR\": _interopRequireDefault(require(\"./../intl/fr-FR.json\")).default,\n  \"hu-HU\": _interopRequireDefault(require(\"./../intl/hu-HU.json\")).default,\n  \"it-IT\": _interopRequireDefault(require(\"./../intl/it-IT.json\")).default,\n  \"ja-JP\": _interopRequireDefault(require(\"./../intl/ja-JP.json\")).default,\n  \"ko-KR\": _interopRequireDefault(require(\"./../intl/ko-KR.json\")).default,\n  \"nb-NO\": _interopRequireDefault(require(\"./../intl/nb-NO.json\")).default,\n  \"nl-NL\": _interopRequireDefault(require(\"./../intl/nl-NL.json\")).default,\n  \"pl-PL\": _interopRequireDefault(require(\"./../intl/pl-PL.json\")).default,\n  \"pt-BR\": _interopRequireDefault(require(\"./../intl/pt-BR.json\")).default,\n  \"ru-RU\": _interopRequireDefault(require(\"./../intl/ru-RU.json\")).default,\n  \"sv-SE\": _interopRequireDefault(require(\"./../intl/sv-SE.json\")).default,\n  \"tr-TR\": _interopRequireDefault(require(\"./../intl/tr-TR.json\")).default,\n  \"uk-UA\": _interopRequireDefault(require(\"./../intl/uk-UA.json\")).default,\n  \"zh-CN\": _interopRequireDefault(require(\"./../intl/zh-CN.json\")).default,\n  \"zh-TW\": _interopRequireDefault(require(\"./../intl/zh-TW.json\")).default\n};\n\nif (process.env.SCALE_MEDIUM && process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/search/index.css\");\n\n  require(\"@adobe/spectrum-css/dist/components/search/index-diff.css\");\n} else if (process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/search/index-lg.css\");\n} else {\n  require(\"@adobe/spectrum-css/dist/components/search/index.css\");\n}\n\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHT) require(\"@adobe/spectrum-css/dist/components/search/multiStops/light.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARK) require(\"@adobe/spectrum-css/dist/components/search/multiStops/dark.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHTEST) require(\"@adobe/spectrum-css/dist/components/search/multiStops/lightest.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARKEST) require(\"@adobe/spectrum-css/dist/components/search/multiStops/darkest.css\");\nconst formatMessage = (0, _intl.messageFormatter)(intlMessages);\n\nconst normalizeValue = value => value || '';\n\nlet Search = (0, _convertUnsafeMethod.default)(_class = (0, _autobindDecorator.default)(_class = (_temp = _class2 = class Search extends _react.Component {\n  constructor(props) {\n    super(props);\n    this.searchId = (0, _createId.default)();\n    const {\n      value,\n      defaultValue\n    } = props;\n    this.state = {\n      value: normalizeValue(value || defaultValue)\n    };\n  }\n\n  UNSAFE_componentWillReceiveProps(props) {\n    if (normalizeValue(props.value) !== this.state.value) {\n      this.setState({\n        value: props.value\n      });\n    }\n  }\n\n  handleTextKeyDown(e) {\n    const {\n      onSubmit,\n      onKeyDown,\n      disabled\n    } = this.props;\n    const {\n      value\n    } = this.state;\n    const key = e.which;\n\n    if (key === 13 || key === 27) {\n      e.preventDefault();\n    }\n\n    if (disabled) {\n      return;\n    }\n\n    if (key === 13) {\n      onSubmit(value);\n    }\n\n    if (key === 27) {\n      this.handleTextChange('', e, 'escapeKey');\n    }\n\n    if (onKeyDown) {\n      onKeyDown(e);\n    }\n  }\n\n  handleTextChange(value, e, from = 'input') {\n    const {\n      onChange,\n      disabled\n    } = this.props;\n\n    if (disabled || value === this.state.value) {\n      return;\n    }\n\n    if (!('value' in this.props)) {\n      this.setState({\n        value\n      });\n    }\n\n    onChange(value, e, {\n      from\n    });\n  }\n\n  handleClearButtonClick(e) {\n    this.handleTextChange('', e, 'clearButton'); // restore focus to the searchbox\n\n    if (this.searchbox) {\n      this.searchbox.focus();\n    }\n  }\n\n  render() {\n    const _this$props = this.props,\n          {\n      disabled,\n      className,\n      icon,\n      id = this.searchId\n    } = _this$props,\n          otherProps = _objectWithoutProperties(_this$props, [\"disabled\", \"className\", \"icon\", \"id\"]);\n\n    const {\n      value\n    } = this.state;\n    return /*#__PURE__*/_react.default.createElement(\"div\", {\n      className: (0, _classnames.default)('spectrum-Search', {\n        'is-disabled': disabled\n      }, className)\n    }, /*#__PURE__*/_react.default.createElement(_Textfield.default, _extends({\n      type: \"search\",\n      ref: s => this.searchbox = s,\n      className: \"spectrum-Search-input\",\n      value: value,\n      disabled: disabled,\n      id: id\n    }, otherProps, {\n      onKeyDown: this.handleTextKeyDown,\n      onChange: this.handleTextChange\n    })), (0, _icon.cloneIcon)(icon, {\n      className: 'spectrum-Search-icon',\n      size: 'S'\n    }), value !== '' && /*#__PURE__*/_react.default.createElement(_Button.default, {\n      \"aria-label\": formatMessage('Clear search'),\n      \"aria-labelledby\": `${id} ${id}-clear-button`,\n      variant: \"clear\",\n      icon: /*#__PURE__*/_react.default.createElement(_CrossSmall.default, null),\n      id: `${id}-clear-button`,\n      disabled: disabled,\n      onClick: this.handleClearButtonClick\n    }));\n  }\n\n}, _class2.propTypes = {\n  /** Sets the search field value (controlled). */\n  value: _propTypes.default.string,\n\n  /** Sets the default search field value (uncontrolled). */\n  defaultValue: _propTypes.default.string,\n\n  /** Sets the icon displayed in the search field. Magnifier icon by default. */\n  icon: _propTypes.default.node\n}, _class2.defaultProps = {\n  icon: /*#__PURE__*/_react.default.createElement(_Magnifier.default, {\n    \"data-testid\": \"searchicon\"\n  }),\n  onChange: function () {},\n  onSubmit: function () {}\n}, _temp)) || _class) || _class;\n\nexports.default = Search;\nSearch.displayName = 'Search';\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _Button = _interopRequireDefault(require(\"../../Button\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _icon = require(\"../../utils/icon\");\n\nvar _convertUnsafeMethod = _interopRequireDefault(require(\"../../utils/convertUnsafeMethod\"));\n\nvar _CrossSmall = _interopRequireDefault(require(\"../../Icon/core/CrossSmall\"));\n\nvar _intl = require(\"../../utils/intl\");\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Search = _interopRequireDefault(require(\"./Search\"));\n\nvar _Textfield = _interopRequireDefault(require(\"../../Textfield\"));\n\nvar _class;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst intlMessages = {\n  \"cs-CZ\": _interopRequireDefault(require(\"./../intl/cs-CZ.json\")).default,\n  \"da-DK\": _interopRequireDefault(require(\"./../intl/da-DK.json\")).default,\n  \"de-DE\": _interopRequireDefault(require(\"./../intl/de-DE.json\")).default,\n  \"en-US\": _interopRequireDefault(require(\"./../intl/en-US.json\")).default,\n  \"es-ES\": _interopRequireDefault(require(\"./../intl/es-ES.json\")).default,\n  \"fi-FI\": _interopRequireDefault(require(\"./../intl/fi-FI.json\")).default,\n  \"fr-FR\": _interopRequireDefault(require(\"./../intl/fr-FR.json\")).default,\n  \"hu-HU\": _interopRequireDefault(require(\"./../intl/hu-HU.json\")).default,\n  \"it-IT\": _interopRequireDefault(require(\"./../intl/it-IT.json\")).default,\n  \"ja-JP\": _interopRequireDefault(require(\"./../intl/ja-JP.json\")).default,\n  \"ko-KR\": _interopRequireDefault(require(\"./../intl/ko-KR.json\")).default,\n  \"nb-NO\": _interopRequireDefault(require(\"./../intl/nb-NO.json\")).default,\n  \"nl-NL\": _interopRequireDefault(require(\"./../intl/nl-NL.json\")).default,\n  \"pl-PL\": _interopRequireDefault(require(\"./../intl/pl-PL.json\")).default,\n  \"pt-BR\": _interopRequireDefault(require(\"./../intl/pt-BR.json\")).default,\n  \"ru-RU\": _interopRequireDefault(require(\"./../intl/ru-RU.json\")).default,\n  \"sv-SE\": _interopRequireDefault(require(\"./../intl/sv-SE.json\")).default,\n  \"tr-TR\": _interopRequireDefault(require(\"./../intl/tr-TR.json\")).default,\n  \"uk-UA\": _interopRequireDefault(require(\"./../intl/uk-UA.json\")).default,\n  \"zh-CN\": _interopRequireDefault(require(\"./../intl/zh-CN.json\")).default,\n  \"zh-TW\": _interopRequireDefault(require(\"./../intl/zh-TW.json\")).default\n};\n\nif (process.env.SCALE_MEDIUM && process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/search/index.css\");\n\n  require(\"@adobe/spectrum-css/dist/components/search/index-diff.css\");\n} else if (process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/search/index-lg.css\");\n} else {\n  require(\"@adobe/spectrum-css/dist/components/search/index.css\");\n}\n\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHT) require(\"@adobe/spectrum-css/dist/components/search/multiStops/light.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARK) require(\"@adobe/spectrum-css/dist/components/search/multiStops/dark.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHTEST) require(\"@adobe/spectrum-css/dist/components/search/multiStops/lightest.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARKEST) require(\"@adobe/spectrum-css/dist/components/search/multiStops/darkest.css\");\nconst formatMessage = (0, _intl.messageFormatter)(intlMessages);\n\nconst normalizeValue = value => value || '';\n\nlet UxpSearch = (0, _convertUnsafeMethod.default)(_class = class UxpSearch extends _Search.default {\n  UNSAFE_componentWillReceiveProps(props) {\n    // If props.value is empty string the following logic won't run. But the logic should run if the string is empty.\n    if (normalizeValue(props.value) !== this.state.value && props.value !== undefined && props.value !== null) {\n      this.setState({\n        value: props.value\n      });\n    }\n  }\n\n  render() {\n    const _this$props = this.props,\n          {\n      disabled,\n      className,\n      icon,\n      role = 'search'\n    } = _this$props,\n          otherProps = _objectWithoutProperties(_this$props, [\"disabled\", \"className\", \"icon\", \"role\"]);\n\n    const {\n      value\n    } = this.state;\n    return /*#__PURE__*/_react.default.createElement(\"div\", {\n      role: role,\n      className: (0, _classnames.default)('spectrum-Search', {\n        'is-disabled': disabled\n      }, className),\n      ref: s => this.searchContainer = s\n    }, /*#__PURE__*/_react.default.createElement(_Textfield.default, _extends({\n      role: \"searchbox\",\n      ref: s => this.searchbox = s,\n      className: \"spectrum-Search-input\",\n      value: value,\n      disabled: disabled\n    }, otherProps, {\n      onKeyDown: this.handleTextKeyDown,\n      onChange: this.handleTextChange\n    })), (0, _icon.cloneIcon)(icon, {\n      className: 'spectrum-Search-icon',\n      size: 'S'\n    }), value !== '' && /*#__PURE__*/_react.default.createElement(_Button.default, {\n      \"aria-label\": formatMessage('Clear search'),\n      variant: \"clear\",\n      icon: /*#__PURE__*/_react.default.createElement(_CrossSmall.default, null),\n      disabled: disabled,\n      onClick: this.handleClearButtonClick\n    }));\n  }\n\n}) || _class;\n\nexports.default = UxpSearch;\nUxpSearch.displayName = 'UxpSearch';\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nObject.defineProperty(exports, \"SideNav\", {\n  enumerable: true,\n  get: function () {\n    return _SideNav.default;\n  }\n});\nObject.defineProperty(exports, \"SideNavItem\", {\n  enumerable: true,\n  get: function () {\n    return _SideNavItem.default;\n  }\n});\nObject.defineProperty(exports, \"SideNavHeading\", {\n  enumerable: true,\n  get: function () {\n    return _SideNavHeading.default;\n  }\n});\n\nvar _SideNav = _interopRequireDefault(require(\"./js/SideNav\"));\n\nvar _SideNavItem = _interopRequireDefault(require(\"./js/SideNavItem\"));\n\nvar _SideNavHeading = _interopRequireDefault(require(\"./js/SideNavHeading\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _autobindDecorator = _interopRequireDefault(require(\"autobind-decorator\"));\n\nvar _events = require(\"../../utils/events\");\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _convertUnsafeMethod = _interopRequireDefault(require(\"../../utils/convertUnsafeMethod\"));\n\nvar _createId = _interopRequireDefault(require(\"../../utils/createId\"));\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _FocusManager = _interopRequireDefault(require(\"../../utils/FocusManager\"));\n\nvar _focusRing = _interopRequireDefault(require(\"../../utils/focusRing\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nrequire(\"../style/index.css\");\n\nvar _class, _class2, _temp;\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nif (process.env.SCALE_MEDIUM && process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/sidenav/index.css\");\n\n  require(\"@adobe/spectrum-css/dist/components/sidenav/index-diff.css\");\n} else if (process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/sidenav/index-lg.css\");\n} else {\n  require(\"@adobe/spectrum-css/dist/components/sidenav/index.css\");\n}\n\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHT) require(\"@adobe/spectrum-css/dist/components/sidenav/multiStops/light.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARK) require(\"@adobe/spectrum-css/dist/components/sidenav/multiStops/dark.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHTEST) require(\"@adobe/spectrum-css/dist/components/sidenav/multiStops/lightest.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARKEST) require(\"@adobe/spectrum-css/dist/components/sidenav/multiStops/darkest.css\");\nconst SIDENAV_ITEM_SELECTOR = '.spectrum-SideNav-itemLink:not(.is-hidden):not(.is-disabled)';\nconst SELECTED_SIDENAV_ITEM_SELECTOR = SIDENAV_ITEM_SELECTOR + '.is-selected';\n\nconst isNestedSelected = (props, value) => props.children && props.children.filter(c => {\n  const {\n    children\n  } = c.props;\n\n  if (children && typeof children !== 'string') {\n    return isNestedSelected(c.props, value);\n  }\n\n  return c.props.value === value;\n}).length !== 0;\n\nlet SideNav = (0, _convertUnsafeMethod.default)(_class = (0, _autobindDecorator.default)(_class = (0, _focusRing.default)(_class = (_temp = _class2 = class SideNav extends _react.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      value: this.props.defaultValue || this.props.value\n    };\n    this.id = (0, _createId.default)();\n  }\n\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    const {\n      value\n    } = nextProps;\n\n    if (value !== this.props.value) {\n      this.setState({\n        value\n      });\n    }\n  }\n\n  isSelected(child) {\n    return child.props.value === this.state.value;\n  }\n\n  isDefaultSelected(child) {\n    return child.props.value === this.props.defaultValue;\n  }\n\n  onSelect(value, e) {\n    if (this.props.value === undefined) {\n      this.setState({\n        value\n      });\n    }\n\n    this.props.onSelect(value, e);\n  }\n\n  isDefaultExpanded(child) {\n    if (child.props.defaultExpanded !== undefined) {\n      return child.props.defaultExpanded;\n    } // Expand nested sidenav if any item is selected\n\n\n    return Array.isArray(child.props.children) && isNestedSelected(child.props, this.state.value);\n  }\n\n  render() {\n    const _this$props = this.props,\n          {\n      className,\n      children,\n      hidden,\n      variant,\n      id = this.id,\n      manageTabIndex,\n      typeToSelect,\n      ariaLevel = 1,\n      autoFocus,\n      isNested,\n      'aria-label': ariaLabel,\n      'aria-labelledby': ariaLabelledby\n    } = _this$props,\n          otherProps = _objectWithoutProperties(_this$props, [\"className\", \"children\", \"hidden\", \"variant\", \"id\", \"manageTabIndex\", \"typeToSelect\", \"ariaLevel\", \"autoFocus\", \"isNested\", \"aria-label\", \"aria-labelledby\"]);\n\n    const isMultiLevel = variant === 'multiLevel';\n    const Element = isNested ? 'div' : 'nav';\n    delete otherProps.value;\n\n    let ul = /*#__PURE__*/_react.default.createElement(\"ul\", _extends({\n      className: (0, _classnames.default)('spectrum-SideNav', {\n        'spectrum-SideNav--multiLevel': isMultiLevel\n      }),\n      id: id + '-list',\n      \"aria-label\": isNested ? ariaLabel : undefined,\n      \"aria-labelledby\": isNested ? ariaLabelledby : undefined\n    }, (0, _filterDOMProps.default)(otherProps)), _react.Children.map(children, child => (0, _react.cloneElement)(child, {\n      hidden,\n      manageTabIndex,\n      isMultiLevel,\n      ariaLevel: isMultiLevel ? ariaLevel : undefined,\n      _nestedNavValue: this.state.value,\n      _isSelected: this.isSelected(child),\n      onSelect: (0, _events.chain)(child.props.onSelect, this.onSelect),\n      defaultExpanded: this.isDefaultExpanded(child)\n    }))); // If this is the root sidenav and we are managing focus, wrap the list in a toolbar\n\n\n    if (!isNested) {\n      ul = /*#__PURE__*/_react.default.createElement(\"div\", {\n        role: \"toolbar\",\n        \"aria-orientation\": \"vertical\"\n      }, ul);\n    }\n\n    return /*#__PURE__*/_react.default.createElement(Element, {\n      id: id,\n      hidden: hidden,\n      \"aria-hidden\": hidden,\n      role: isNested ? 'presentation' : undefined,\n      \"aria-label\": !isNested ? ariaLabel : undefined,\n      \"aria-labelledby\": !isNested ? ariaLabelledby : undefined,\n      className: (0, _classnames.default)(className, 'react-spectrum-SideNav')\n    }, isNested ? ul : /*#__PURE__*/_react.default.createElement(_FocusManager.default, {\n      itemSelector: SIDENAV_ITEM_SELECTOR,\n      selectedItemSelector: SELECTED_SIDENAV_ITEM_SELECTOR,\n      manageTabIndex: isMultiLevel || manageTabIndex,\n      typeToSelect: isMultiLevel || typeToSelect,\n      autoFocus: autoFocus\n    }, ul));\n  }\n\n}, _class2.propTypes = {\n  /**\n   * The variant of sidenav to display\n   */\n  variant: _propTypes.default.oneOf(['default', 'multiLevel']),\n\n  /**\n   * Whether SideNav should use roving tabIndex so that only one item can receive focus at a time. With multiLevel, this defaults to true.\n   */\n  manageTabIndex: _propTypes.default.bool,\n\n  /**\n   * Whether SideNav should use alphanumeric search to locate next item to focus. With multiLevel, this defaults to true.\n   */\n  typeToSelect: _propTypes.default.bool,\n\n  /**\n   * Custom className of sidenav to apply\n   */\n  className: _propTypes.default.string,\n\n  /**\n   * Value of selected Sidenav Item (use for controlled selection)\n   */\n  value: _propTypes.default.string,\n\n  /**\n   * Value of selected Sidenav Item at initialization\n   */\n  defaultValue: _propTypes.default.string,\n\n  /**\n   * Whether to automatically set focus to the seleted item when the component mounts.\n   */\n  autoFocus: _propTypes.default.bool,\n\n  /**\n   * Whether the sidenav is a child of a sidenav item\n   */\n  isNested: _propTypes.default.bool,\n\n  /**\n   * A select handler for the sidenav\n   */\n  onSelect: _propTypes.default.func\n}, _class2.defaultProps = {\n  variant: 'default',\n  manageTabIndex: false,\n  typeToSelect: false,\n  autoFocus: false,\n  isNested: false,\n  onSelect: () => {}\n}, _temp)) || _class) || _class) || _class;\n\nexports.default = SideNav;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = SideNavHeading;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _SideNavItem = _interopRequireDefault(require(\"./SideNavItem\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction SideNavHeading(_ref) {\n  let {\n    label\n  } = _ref,\n      props = _objectWithoutProperties(_ref, [\"label\"]);\n\n  return /*#__PURE__*/_react.default.createElement(_SideNavItem.default, _extends({\n    header: label\n  }, props, {\n    defaultExpanded: true\n  }));\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _autobindDecorator = _interopRequireDefault(require(\"autobind-decorator\"));\n\nvar _events = require(\"../../utils/events\");\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _icon = require(\"../../utils/icon\");\n\nvar _convertUnsafeMethod = _interopRequireDefault(require(\"../../utils/convertUnsafeMethod\"));\n\nvar _createId = _interopRequireDefault(require(\"../../utils/createId\"));\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _focusRing = _interopRequireDefault(require(\"../../utils/focusRing\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nvar _SideNav = _interopRequireDefault(require(\"./SideNav\"));\n\nvar _class, _class2, _temp;\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nconst NOOP = () => {};\n\nconst FOCUSABLE_SIDENAV_ITEMLINK_SELECTOR = '.spectrum-SideNav-itemLink[tabIndex]';\n/**\n * An item in a sidenav\n */\n\nlet SideNavItem = (0, _convertUnsafeMethod.default)(_class = (0, _autobindDecorator.default)(_class = (0, _focusRing.default)(_class = (_temp = _class2 = class SideNavItem extends _react.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      expanded: this.props.defaultExpanded || this.props.expanded,\n      focused: false\n    };\n\n    this.setSideNavItemRef = s => this.sideNavItemRef = s;\n\n    this.id = (0, _createId.default)();\n  }\n\n  get hasNestedNav() {\n    const {\n      children\n    } = this.props;\n    return children && typeof children !== 'string';\n  }\n\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    const {\n      expanded\n    } = nextProps;\n\n    if (expanded !== this.props.expanded) {\n      this.setState(prevState => _objectSpread({}, prevState, {\n        expanded\n      }));\n    }\n  }\n\n  handleClick(e) {\n    this.props.onClick(e);\n    this.onSelectFocused(e);\n  }\n\n  onSelectFocused(e) {\n    const {\n      onSelect,\n      value,\n      expanded,\n      href = e.target ? e.target.href : undefined\n    } = this.props;\n    let isKeyDown = e.type === 'keydown';\n\n    if (!href || isKeyDown) {\n      // When there is no href or if triggered from a keyboard event,\n      // preventDefault and stopPropagation.\n      e.preventDefault();\n      e.stopPropagation(); // If Enter of Space key pressed, trigger click event on event target\n\n      if (isKeyDown && (e.key === 'Enter' || e.key === ' ')) {\n        e.target.click();\n        return;\n      }\n    }\n\n    if (expanded === undefined) {\n      this.setState(prevState => _objectSpread({}, prevState, {\n        expanded: !prevState.expanded\n      }));\n    }\n\n    onSelect(value, e);\n  }\n  /**\n   * Keyboard event handler to interperet ArrowLeft/ArrowRight to collapse/expand section in multiLevel variant.\n   * @param {KeyboardEvent} e Keyboard event\n   */\n\n\n  onKeyDown(e) {\n    const {\n      isMultiLevel\n    } = this.props;\n    const {\n      expanded\n    } = this.state;\n    const isExpandableItem = isMultiLevel && this.hasNestedNav;\n\n    switch (e.key) {\n      case 'ArrowLeft':\n      case 'Left':\n        if (isExpandableItem) {\n          if (expanded) {\n            if (this.sideNavItemRef && this.sideNavItemRef.querySelector(FOCUSABLE_SIDENAV_ITEMLINK_SELECTOR) === document.activeElement) {\n              this.onSelectFocused(e);\n            } else {\n              e.preventDefault();\n              e.stopPropagation();\n            }\n\n            this.focus();\n          }\n        }\n\n        break;\n\n      case 'ArrowRight':\n      case 'Right':\n        if (isExpandableItem) {\n          if (!expanded) {\n            this.onSelectFocused(e);\n          } else if (this.sideNavItemRef) {\n            const links = Array.from(this.sideNavItemRef.querySelectorAll(FOCUSABLE_SIDENAV_ITEMLINK_SELECTOR));\n\n            if (links.indexOf(e.target) === 0) {\n              links[1].focus();\n            }\n          }\n        }\n\n        break;\n    }\n  }\n\n  onFocus() {\n    this.setState({\n      focused: true\n    });\n  }\n\n  onBlur() {\n    this.setState({\n      focused: false\n    });\n  }\n\n  focus() {\n    if (this.sideNavItemRef) {\n      const link = this.sideNavItemRef.querySelector(FOCUSABLE_SIDENAV_ITEMLINK_SELECTOR);\n      link.focus();\n    }\n  }\n\n  getDescendantId(postfix) {\n    const {\n      id = this.id\n    } = this.props;\n    return postfix ? `${id}-${postfix}` : id;\n  }\n\n  sideNavStyle() {\n    return {};\n  }\n\n  renderLink(label, tabIndex) {\n    let {\n      hidden,\n      id = this.id,\n      icon,\n      disabled,\n      href,\n      renderLink,\n      isMultiLevel,\n      target,\n      _isSelected,\n      'aria-current': ariaCurrent\n    } = this.props;\n    const {\n      expanded,\n      focused\n    } = this.state;\n    const isMultiLevelHeading = this.hasNestedNav && isMultiLevel;\n    let role = disabled || !href ? 'link' : undefined;\n    const props = {\n      href: disabled ? undefined : href,\n      onClick: disabled ? undefined : this.handleClick,\n      onFocus: disabled ? undefined : this.onFocus,\n      onBlur: disabled ? undefined : this.onBlur,\n      tabIndex: disabled ? undefined : tabIndex,\n      className: (0, _classnames.default)('spectrum-SideNav-itemLink', {\n        'is-selected': _isSelected,\n        'is-disabled': disabled,\n        'is-focused': focused,\n        'is-hidden': hidden\n      }),\n      id,\n      role,\n      'aria-disabled': disabled || undefined,\n      'aria-expanded': isMultiLevelHeading ? expanded : undefined,\n      'aria-controls': isMultiLevelHeading && expanded ? this.getDescendantId('child-list') : undefined,\n      'aria-current': _isSelected && !isMultiLevelHeading ? ariaCurrent : undefined,\n      target: disabled || !href ? undefined : target\n    };\n\n    if (renderLink) {\n      return renderLink(props);\n    }\n\n    return /*#__PURE__*/_react.default.createElement(\"a\", props, (0, _icon.cloneIcon)(icon, {\n      className: 'spectrum-SideNav-itemIcon',\n      size: 'S'\n    }), label);\n  }\n\n  render() {\n    let _this$props = this.props,\n        {\n      header,\n      className,\n      children,\n      disabled,\n      isMultiLevel,\n      renderLink,\n      id = this.id,\n      value,\n      _isSelected,\n      _nestedNavValue,\n      manageTabIndex,\n      onSelect,\n      ariaLevel,\n      hidden\n    } = _this$props,\n        otherProps = _objectWithoutProperties(_this$props, [\"header\", \"className\", \"children\", \"disabled\", \"isMultiLevel\", \"renderLink\", \"id\", \"value\", \"_isSelected\", \"_nestedNavValue\", \"manageTabIndex\", \"onSelect\", \"ariaLevel\", \"hidden\"]);\n\n    const {\n      expanded,\n      focused\n    } = this.state;\n    let {\n      label,\n      tabIndex = 0\n    } = this.props;\n\n    if (!label && !header) {\n      label = children;\n    }\n\n    let isCurrent = !!_nestedNavValue && value === _nestedNavValue;\n\n    if (isMultiLevel || manageTabIndex) {\n      tabIndex = isCurrent ? tabIndex : -1;\n    }\n\n    delete otherProps.label;\n    delete otherProps.target;\n    delete otherProps['aria-current'];\n    return /*#__PURE__*/_react.default.createElement(\"li\", _extends({\n      className: (0, _classnames.default)('spectrum-SideNav-item', {\n        'is-selected': _isSelected,\n        'is-disabled': disabled,\n        'is-focused': focused\n      }, className),\n      onKeyDown: disabled ? undefined : (0, _events.chain)(this.onKeyDown, _events.interpretKeyboardEvent.bind(this)),\n      ref: this.setSideNavItemRef\n    }, (0, _filterDOMProps.default)(otherProps)), (label || renderLink) && this.renderLink(label, tabIndex, isMultiLevel), header && /*#__PURE__*/_react.default.createElement(\"h2\", {\n      className: \"spectrum-SideNav-heading\",\n      id: this.getDescendantId('header')\n    }, header), this.hasNestedNav && /*#__PURE__*/_react.default.createElement(_SideNav.default, {\n      isNested: true,\n      variant: isMultiLevel ? 'multiLevel' : undefined,\n      id: this.getDescendantId('child'),\n      \"aria-labelledby\": header ? this.getDescendantId('header') : id,\n      ariaLevel: ariaLevel + 1,\n      hidden: hidden || (isMultiLevel ? !expanded : undefined),\n      value: _nestedNavValue,\n      onSelect: onSelect\n    }, children));\n  }\n\n}, _class2.propTypes = {\n  /**\n   * Custom className of sidenav to apply\n   */\n  className: _propTypes.default.string,\n\n  /**\n   * Whether the item is disabled\n   */\n  disabled: _propTypes.default.bool,\n\n  /**\n   * The label to display in the item\n   */\n  label: _propTypes.default.string,\n\n  /**\n   * The value of item\n   */\n  value: _propTypes.default.string,\n\n  /**\n   * The href of item\n   */\n  href: _propTypes.default.string,\n\n  /**\n   * The target type for item link\n   */\n  target: _propTypes.default.string,\n\n  /**\n   * Icon for item\n   */\n  icon: _propTypes.default.node,\n\n  /**\n   * Whether item should represent the current page within a set of pages or current location within an environment or context when selected.\n   * See <a href=\"https://www.w3.org/TR/wai-aria-1.1/#aria-current\" class=\"spectrum-Link\">WAI-ARIA 1.1 definition of `aria-current (state)`</a>\n   * attribute.\n   */\n  'aria-current': _propTypes.default.oneOf(['page', 'location']),\n\n  /**\n   * Whether the item is expanded in case of multi-level sidenav item\n   */\n  expanded: _propTypes.default.bool,\n\n  /**\n   * Whether the item is expanded at initialization in case of multi-level sidenav item\n   */\n  defaultExpanded: _propTypes.default.bool,\n\n  /**\n   * A function that returns a href wrapper component.\n   * Useful in providing custom href component(eg. Link from react-router-dom).\n   *\n   * ```js\n   *  <SideNavItem renderLink={(props) => <Link {...props} to=\"/\">Foo</Link>}>\n   *  </SideNavItem>\n   * ```\n   */\n  renderLink: _propTypes.default.func,\n\n  /**\n   * A click handler for the item\n   */\n  onClick: _propTypes.default.func,\n\n  /**\n   * A select handler for the item\n   */\n  onSelect: _propTypes.default.func\n}, _class2.defaultProps = {\n  'aria-current': 'page',\n  disabled: false,\n  target: '_self',\n  onSelect: NOOP,\n  onClick: NOOP\n}, _temp)) || _class) || _class) || _class;\n\nexports.default = SideNavItem;\n","\"use strict\";\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nmodule.exports = require('./js/Switch');\n","\"use strict\";\n\nvar _UxpOptions = _interopRequireDefault(require(\"../../utils/UxpOptions\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n//  so, we are defining this module which forks behavior here so that\n//  SwitchBase can import the appropriate Switch instance either Uxp or normal.\nmodule.exports = _UxpOptions.default.select('SwitchBase', () => require('./UxpSwitchBase'), () => require('./SwitchBase'));\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = Switch;\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _MaybeUxpSwitchBase = _interopRequireDefault(require(\"./MaybeUxpSwitchBase\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nif (process.env.SCALE_MEDIUM && process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/toggle/index.css\");\n\n  require(\"@adobe/spectrum-css/dist/components/toggle/index-diff.css\");\n} else if (process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/toggle/index-lg.css\");\n} else {\n  require(\"@adobe/spectrum-css/dist/components/toggle/index.css\");\n}\n\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHT) require(\"@adobe/spectrum-css/dist/components/toggle/multiStops/light.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARK) require(\"@adobe/spectrum-css/dist/components/toggle/multiStops/dark.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHTEST) require(\"@adobe/spectrum-css/dist/components/toggle/multiStops/lightest.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARKEST) require(\"@adobe/spectrum-css/dist/components/toggle/multiStops/darkest.css\");\n\nfunction Switch(_ref) {\n  let {\n    variant,\n    // 'ab'\n    quiet,\n    className\n  } = _ref,\n      otherProps = _objectWithoutProperties(_ref, [\"variant\", \"quiet\", \"className\"]);\n\n  return /*#__PURE__*/_react.default.createElement(_MaybeUxpSwitchBase.default, _extends({\n    inputType: \"checkbox\",\n    className: (0, _classnames.default)('spectrum-ToggleSwitch', {\n      [`spectrum-ToggleSwitch--${variant}`]: variant,\n      'spectrum-ToggleSwitch--quiet': quiet\n    }, className),\n    inputClassName: \"spectrum-ToggleSwitch-input\",\n    markClassName: \"spectrum-ToggleSwitch-switch\",\n    labelClassName: \"spectrum-ToggleSwitch-label\",\n    role: \"switch\"\n  }, otherProps));\n}\n\nSwitch.displayName = 'Switch';\nSwitch.propTypes = {\n  /**\n  * Class given to switch\n  */\n  className: _propTypes.default.string,\n\n  /**\n  * Whether the switch is checked or not (controlled state)\n  */\n  checked: _propTypes.default.bool,\n\n  /**\n  * Whether the switch should be checked (uncontrolled state)\n  */\n  defaultChecked: _propTypes.default.bool,\n\n  /** Text to add to switch. Can be Text of HTML */\n  label: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.object]),\n\n  /**\n  * Function called when switch is changed\n  */\n  onChange: _propTypes.default.func,\n\n  /**\n  * Whether switch is a quiet variation\n  */\n  quiet: _propTypes.default.bool,\n\n  /**\n  * Change switch to A/B variant rather an on/off\n  */\n  variant: _propTypes.default.oneOf(['ab'])\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _autobindDecorator = _interopRequireDefault(require(\"autobind-decorator\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _convertUnsafeMethod = _interopRequireDefault(require(\"../../utils/convertUnsafeMethod\"));\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _events = require(\"../../utils/events\");\n\nvar _focusRing = _interopRequireDefault(require(\"../../utils/focusRing\"));\n\nvar _string = require(\"../../utils/string\");\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _class, _class2, _temp;\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nlet SwitchBase = (0, _convertUnsafeMethod.default)(_class = (0, _focusRing.default)(_class = (0, _autobindDecorator.default)(_class = (_temp = _class2 = class SwitchBase extends _react.Component {\n  constructor(props) {\n    super(props);\n    const {\n      checked,\n      defaultChecked\n    } = props;\n    this.state = {\n      checked: checked !== undefined ? checked : defaultChecked || false\n    };\n  }\n\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    if ('checked' in nextProps) {\n      this.setState({\n        checked: nextProps.checked\n      });\n    }\n  }\n\n  focus() {\n    if (this.inputRef && !this.disabled) {\n      this.inputRef.focus();\n    }\n  }\n\n  setChecked(checked) {\n    if (!('checked' in this.props)) {\n      this.setState({\n        checked\n      });\n    }\n  }\n\n  getInput() {\n    return this.inputRef;\n  }\n\n  handleChange(e) {\n    const {\n      onChange\n    } = this.props;\n    const {\n      checked\n    } = e.target;\n    this.setChecked(checked);\n    onChange(checked, e);\n  }\n\n  render() {\n    const _this$props = this.props,\n          {\n      label,\n      value,\n      name,\n      disabled,\n      required,\n      invalid,\n      readOnly,\n      className,\n      style,\n      children,\n      inputType,\n      renderLabel,\n      inputClassName,\n      markClassName,\n      markIcon,\n      labelClassName,\n      onMouseDown,\n      onMouseUp\n    } = _this$props,\n          otherProps = _objectWithoutProperties(_this$props, [\"label\", \"value\", \"name\", \"disabled\", \"required\", \"invalid\", \"readOnly\", \"className\", \"style\", \"children\", \"inputType\", \"renderLabel\", \"inputClassName\", \"markClassName\", \"markIcon\", \"labelClassName\", \"onMouseDown\", \"onMouseUp\"]);\n\n    const {\n      checked\n    } = this.state;\n    const shouldRenderLabel = renderLabel && (label || children);\n    const Element = shouldRenderLabel ? 'label' : 'div'; // Don't let native browser change events bubble up to the root div.\n    // Otherwise we double dispatch.\n\n    delete otherProps.onChange; // Add aria-label that concatenates label and children\n    // when renderLabel is false and no other aria-label is provided.\n\n    let ariaLabel = null;\n\n    if (otherProps['aria-label']) {\n      ariaLabel = otherProps['aria-label'];\n      delete otherProps['aria-label'];\n    } else if (!renderLabel && (label || children)) {\n      let labels = [];\n\n      if (label) {\n        labels.push(label);\n      }\n\n      if (children) {\n        let str = (0, _string.getTextFromReact)(children);\n\n        if (str !== label) {\n          labels.push(str);\n        }\n      }\n\n      ariaLabel = labels.join(' ');\n    } // Fix for ESLint error: The attribute aria-checked is not supported by the role textbox. This role is implicit on the element input  jsx-a11y/role-supports-aria-props\n\n\n    if (inputType && !otherProps['aria-checked']) {\n      otherProps['aria-checked'] = checked;\n    }\n\n    return /*#__PURE__*/_react.default.createElement(Element, {\n      className: (0, _classnames.default)(className, {\n        'is-invalid': invalid,\n        'is-disabled': disabled\n      }),\n      style: style\n    }, /*#__PURE__*/_react.default.createElement(\"input\", _extends({\n      ref: el => this.inputRef = el,\n      type: inputType,\n      className: inputClassName,\n      checked: checked,\n      disabled: disabled,\n      name: name,\n      value: value,\n      required: required ? true : null,\n      readOnly: readOnly,\n      onChange: this.handleChange,\n      onMouseDown: _events.focusAfterMouseEvent.bind(this, onMouseDown),\n      onMouseUp: _events.focusAfterMouseEvent.bind(this, onMouseUp),\n      \"aria-invalid\": invalid || null,\n      \"aria-label\": ariaLabel\n    }, (0, _filterDOMProps.default)(otherProps))), /*#__PURE__*/_react.default.createElement(\"span\", {\n      className: markClassName\n    }, markIcon), shouldRenderLabel && /*#__PURE__*/_react.default.createElement(\"span\", {\n      className: labelClassName\n    }, label,\n    /* When both label and children are present,\n     include a space character so that the text\n     doesn't get smushed together. */\n    label && children && ' ', children));\n  }\n\n}, _class2.defaultProps = {\n  renderLabel: true,\n  // defaultChecked is undefined by default so we can repect\n  // the value that is passed in without erroneously putting\n  // both checked and defaultChecked on the input\n  defaultChecked: undefined,\n  disabled: false,\n  required: false,\n  invalid: false,\n  readOnly: false,\n  onChange: function () {}\n}, _temp)) || _class) || _class) || _class;\n\nexports.default = SwitchBase;\nSwitchBase.displayName = 'SwitchBase';\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _events = require(\"../../utils/events\");\n\nvar _string = require(\"../../utils/string\");\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _SwitchBase = _interopRequireDefault(require(\"./SwitchBase\"));\n\nrequire(\"../uxp-style/index.css\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nclass UxpSwitchBase extends _SwitchBase.default {\n  constructor(...args) {\n    var _temp;\n\n    return _temp = super(...args), this.onClickSpan = evt => {\n      evt.stopPropagation();\n    }, _temp;\n  }\n\n  render() {\n    const _this$props = this.props,\n          {\n      label,\n      value,\n      name,\n      disabled,\n      required,\n      invalid,\n      readOnly,\n      className,\n      style,\n      children,\n      inputType,\n      renderLabel,\n      inputClassName,\n      markClassName,\n      markIcon,\n      labelClassName,\n      onMouseDown,\n      onMouseUp\n    } = _this$props,\n          otherProps = _objectWithoutProperties(_this$props, [\"label\", \"value\", \"name\", \"disabled\", \"required\", \"invalid\", \"readOnly\", \"className\", \"style\", \"children\", \"inputType\", \"renderLabel\", \"inputClassName\", \"markClassName\", \"markIcon\", \"labelClassName\", \"onMouseDown\", \"onMouseUp\"]);\n\n    const {\n      checked\n    } = this.state;\n    const shouldRenderLabel = renderLabel && (label || children);\n    const Element = 'label'; // Fix for ESLint error: The attribute aria-checked is not supported by the role textbox. This role is implicit on the element input  jsx-a11y/role-supports-aria-props\n\n    if (inputType && !otherProps['aria-checked']) {\n      otherProps['aria-checked'] = checked;\n    } // Don't let native browser change events bubble up to the root div.\n    // Otherwise we double dispatch.\n\n\n    delete otherProps.onChange; // Add aria-label that concatenates label and children\n    // when renderLabel is false and no other aria-label is provided.\n\n    let ariaLabel = null;\n\n    if (otherProps['aria-label']) {\n      ariaLabel = otherProps['aria-label'];\n      delete otherProps['aria-label'];\n    } else if (!renderLabel && (label || children)) {\n      let labels = [];\n\n      if (label) {\n        labels.push(label);\n      }\n\n      if (children) {\n        let str = (0, _string.getTextFromReact)(children);\n\n        if (str !== label) {\n          labels.push(str);\n        }\n      }\n\n      ariaLabel = labels.join(' ');\n    }\n\n    return /*#__PURE__*/_react.default.createElement(Element, {\n      className: (0, _classnames.default)(className, {\n        'is-invalid': invalid,\n        'is-disabled': disabled\n      }),\n      style: style\n    }, /*#__PURE__*/_react.default.createElement(\"input\", _extends({\n      ref: el => this.inputRef = el,\n      type: inputType,\n      className: (0, _classnames.default)(inputClassName, 'uxp-switchBase'),\n      checked: checked,\n      disabled: disabled,\n      name: name,\n      value: value,\n      required: required ? true : null,\n      readOnly: readOnly,\n      onChange: this.handleChange,\n      onMouseDown: _events.focusAfterMouseEvent.bind(this, onMouseDown),\n      onMouseUp: _events.focusAfterMouseEvent.bind(this, onMouseUp),\n      \"aria-invalid\": invalid || null,\n      \"aria-label\": ariaLabel\n    }, (0, _filterDOMProps.default)(otherProps))), /*#__PURE__*/_react.default.createElement(\"span\", {\n      onClick: this.onClickSpan,\n      className: markClassName\n    }, markIcon), shouldRenderLabel && /*#__PURE__*/_react.default.createElement(\"span\", {\n      onClick: this.onClickSpan,\n      className: labelClassName\n    }, label,\n    /* When both label and children are present,\n     include a space character so that the text\n     doesn't get smushed together. */\n    label && children && ' ', children));\n  }\n\n}\n\nexports.default = UxpSwitchBase;\nUxpSwitchBase.displayName = 'UxpSwitchBase';\n","\"use strict\";\n\nvar _UxpOptions = _interopRequireDefault(require(\"../utils/UxpOptions\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nmodule.exports = _UxpOptions.default.select('Textfield', () => require('./js/UxpTextfield'), () => require('./js/Textfield'));\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _autobindDecorator = _interopRequireDefault(require(\"autobind-decorator\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nvar _class, _class2, _temp;\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nif (process.env.SCALE_MEDIUM && process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/textfield/index.css\");\n\n  require(\"@adobe/spectrum-css/dist/components/textfield/index-diff.css\");\n} else if (process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/textfield/index-lg.css\");\n} else {\n  require(\"@adobe/spectrum-css/dist/components/textfield/index.css\");\n}\n\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHT) require(\"@adobe/spectrum-css/dist/components/textfield/multiStops/light.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARK) require(\"@adobe/spectrum-css/dist/components/textfield/multiStops/dark.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHTEST) require(\"@adobe/spectrum-css/dist/components/textfield/multiStops/lightest.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARKEST) require(\"@adobe/spectrum-css/dist/components/textfield/multiStops/darkest.css\");\n\nlet Textfield = (0, _autobindDecorator.default)(_class = (_temp = _class2 = class Textfield extends _react.Component {\n  componentDidMount() {\n    if (this.props.autoFocus) {\n      // wait a frame to make sure the textfield in the DOM and focusable\n      requestAnimationFrame(() => this.focus());\n    }\n  }\n\n  focus() {\n    if (!this.props.disabled) {\n      _reactDom.default.findDOMNode(this).focus();\n    }\n  }\n\n  onChange(e) {\n    if (this.props.onChange) {\n      this.props.onChange(e.target.value, e);\n    }\n  }\n\n  render() {\n    const _this$props = this.props,\n          {\n      className,\n      quiet,\n      disabled,\n      required,\n      invalid,\n      readOnly,\n      multiLine,\n      validationState\n    } = _this$props,\n          otherProps = _objectWithoutProperties(_this$props, [\"className\", \"quiet\", \"disabled\", \"required\", \"invalid\", \"readOnly\", \"multiLine\", \"validationState\"]);\n\n    var Tag = multiLine ? 'textarea' : 'input';\n    const isInvalid = invalid || validationState === 'invalid';\n    delete otherProps.autoFocus;\n    delete otherProps.autocompleteInput;\n\n    if (invalid) {\n      console.warn('The \"invalid\" prop of Textfield is deprecated. Please use validationState=\"invalid\" instead.');\n    }\n\n    return /*#__PURE__*/_react.default.createElement(Tag, _extends({\n      type: \"text\",\n      className: (0, _classnames.default)('spectrum-Textfield', {\n        'spectrum-Textfield--multiline': multiLine,\n        'is-invalid': isInvalid,\n        'is-valid': validationState === 'valid',\n        'spectrum-Textfield--quiet': quiet\n      }, className),\n      disabled: disabled,\n      required: required,\n      readOnly: readOnly,\n      \"aria-invalid\": isInvalid || null,\n      defaultValue: otherProps.defaultValue\n    }, (0, _filterDOMProps.default)(otherProps), {\n      onChange: this.onChange,\n      rows: multiLine && !quiet ? otherProps.rows : 1\n    }));\n  }\n\n}, _class2.propTypes = {\n  /** Whether to automatically focus this text field */\n  autoFocus: _propTypes.default.bool,\n\n  /** Custom CSS class to add to the text field */\n  className: _propTypes.default.string,\n\n  /** Whether to disable the text field */\n  disabled: _propTypes.default.bool,\n\n  /** Whether to show the warning icon and red border. DEPRECATED: use validationState instead */\n  invalid: _propTypes.default.bool,\n\n  /** Whether to render a textfield that accepts multiple lines of text */\n  multiLine: _propTypes.default.bool,\n\n  /** Function called when focus is taken away from the text field */\n  onBlur: _propTypes.default.func,\n\n  /** Function called when the text field value is changed */\n  onChange: _propTypes.default.func,\n\n  /** Function called when focus is put on the text field */\n  onFocus: _propTypes.default.func,\n\n  /** String to show in the text field when nothing has been input */\n  placeholder: _propTypes.default.string,\n\n  /** Whether the text field should render using a quiet variant */\n  quiet: _propTypes.default.bool,\n\n  /** Whether the text field can only be read */\n  readOnly: _propTypes.default.bool,\n\n  /** Whether the text field requires user input (shows warning if empty) */\n  required: _propTypes.default.bool,\n\n  /** Show either checkmark or warning icons */\n  validationState: _propTypes.default.oneOf(['valid', 'invalid'])\n}, _class2.defaultProps = {\n  autoFocus: false,\n  disabled: false,\n  quiet: false,\n  required: false,\n  invalid: false,\n  readOnly: false\n}, _temp)) || _class;\n\nexports.default = Textfield;\nTextfield.displayName = 'Textfield';\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _autobindDecorator = _interopRequireDefault(require(\"autobind-decorator\"));\n\nvar _boundingRectOverlapping = _interopRequireDefault(require(\"../../utils/boundingRectOverlapping\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _dna = _interopRequireDefault(require(\"../../utils/dna\"));\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _validationStateSvg = require(\"./validationStateSvg\");\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _UxpProvider = require(\"../../Provider/js/UxpProvider\");\n\nvar _Textfield = _interopRequireDefault(require(\"./Textfield\"));\n\nvar _UxpOptions = _interopRequireDefault(require(\"../../utils/UxpOptions\"));\n\nrequire(\"../../utils/style/input.css\");\n\nrequire(\"../uxp-style/index.css\");\n\nvar _class, _class2, _temp;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nconst uxp = window.require && window.require('uxp');\n\nif (process.env.SCALE_MEDIUM && process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/textfield/index.css\");\n\n  require(\"@adobe/spectrum-css/dist/components/textfield/index-diff.css\");\n} else if (process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/textfield/index-lg.css\");\n} else {\n  require(\"@adobe/spectrum-css/dist/components/textfield/index.css\");\n}\n\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHT) require(\"@adobe/spectrum-css/dist/components/textfield/multiStops/light.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARK) require(\"@adobe/spectrum-css/dist/components/textfield/multiStops/dark.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHTEST) require(\"@adobe/spectrum-css/dist/components/textfield/multiStops/lightest.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARKEST) require(\"@adobe/spectrum-css/dist/components/textfield/multiStops/darkest.css\");\n\nlet UxpTextfield = (0, _autobindDecorator.default)(_class = (_temp = _class2 = class UxpTextfield extends _Textfield.default {\n  constructor(props) {\n    super(props);\n\n    this.getFontStyle = () => {\n      if (this.inputContainer) {\n        this.fontFamily = window.getComputedStyle(this.inputContainer).getPropertyValue('font-family');\n        this.fontSize = window.getComputedStyle(this.inputContainer).getPropertyValue('font-size');\n        this.fontVariant = window.getComputedStyle(this.inputContainer).getPropertyValue('font-variant');\n        this.inputContainer.removeEventListener('resize', this.getFontStyle);\n      }\n    };\n\n    this.focusInput = () => {\n      this.inputContainer.focus();\n      this.inputContainer.removeEventListener('resize', this.focusInput);\n    };\n\n    this.resize = () => {\n      if (this.inputContainer) {\n        this.inputContainer.focus();\n        this.inputContainer.select();\n        this.inFocus = true;\n        this.inputContainer.removeEventListener('resize', this.resize);\n      }\n    };\n\n    this.state = {\n      inputText: '',\n      showFocus: false,\n      overlayPresent: false\n    };\n    this.overlaysMap = new Map();\n    this.inputActive = true;\n  }\n\n  componentDidMount() {\n    if (this.inputContainer) {\n      this.inputContainer.addEventListener('resize', this.getFontStyle);\n\n      if (this.props.autoFocus && !this.props.disabled) {\n        // wait till the native node is created.\n        this.inputContainer.addEventListener('resize', this.resize);\n      }\n    }\n  }\n\n  hasPlaceholderText() {\n    if (this.props.placeholder && !this.props.value && !this.state.inputText) {\n      return true;\n    }\n\n    return false;\n  }\n\n  updateSpanStyle() {\n    //  https://git.corp.adobe.com/torq/torq-native/pull/3818\n    //  Using the font styles provided by the host application if any\n    this.inputContainer.style.fontFamily = this.fontFamily;\n    this.inputContainer.style.fontSize = this.fontSize;\n    this.inputContainer.style.fontVariant = this.fontVariant;\n\n    if (uxp.host && uxp.host.name === 'Photoshop') {\n      if (this.hasPlaceholderText()) {\n        this.inputContainer.style.fontStyle = 'italic';\n        this.inputContainer.style.paddingBottom = '1px';\n      }\n    } else if (uxp.host && (uxp.host.isDrover || uxp.host.name === 'Illustrator')) {\n      if (this.hasPlaceholderText()) {\n        this.inputContainer.style.fontStyle = 'italic';\n        this.inputContainer.style.fontSize = '11px';\n      }\n\n      this.inputContainer.style.paddingLeft = '4px';\n\n      if (!this.props.quiet && uxp.host.name !== 'Illustrator') {\n        this.inputContainer.style.paddingBottom = '1px';\n      }\n    }\n  }\n\n  componentDidUpdate() {\n    if (this.inputContainer && this.inputContainer.nodeName === 'SPAN') {\n      this.updateSpanStyle();\n    }\n\n    if (this.inFocus === true) {\n      const ov = this.isAnyOverlayVisible();\n\n      if (ov) {\n        this.inputActive = false;\n        this.inputContainer.addEventListener('resize', this.focusInput);\n      }\n\n      if (!this.inputActive && !ov) {\n        this.inputContainer.addEventListener('resize', this.focusInput);\n        this.inputActive = true;\n      }\n    }\n  }\n\n  focus() {\n    if (!this.props.disabled && this.inputContainer) {\n      this.inputContainer.focus();\n    }\n  }\n\n  isAnyOverlayVisible() {\n    var values = this.overlaysMap.values();\n\n    for (var obj of values) {\n      if (obj.visible) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  componentWillUnmount() {\n    if (this.props.autoFocus && !this.props.disabled && this.inputContainer) {\n      this.inputContainer.removeEventListener('resize', this.resize);\n    }\n  }\n\n  onChange(e) {\n    this.setState({\n      inputText: e.target.value\n    });\n\n    if (this.props.onChange) {\n      this.props.onChange(e.target.value, e);\n    }\n  }\n\n  handleClick(e) {\n    this.inputContainer.focus();\n    this.inFocus = true;\n\n    if (this.props.onClick) {\n      this.props.onClick(e);\n    }\n  }\n\n  handleFocus(e) {\n    this.setState({\n      showFocus: true\n    });\n\n    if (this.props.onFocus) {\n      this.props.onFocus(e);\n    }\n\n    this.inFocus = true;\n  }\n\n  handleBlur(e) {\n    this.setState({\n      showFocus: false\n    });\n\n    if (this.props.onBlur) {\n      this.props.onBlur(e);\n    }\n\n    this.inFocus = false;\n  }\n\n  executeOverlayCallbacks() {\n    var values = this.overlaysMap.values();\n\n    for (var obj of values) {\n      if (obj.callback) {\n        obj.callback();\n      }\n    }\n  }\n\n  handleSpanKeyUp(e) {\n    if (this.props.onKeyUp) {\n      this.props.onKeyUp(e);\n    }\n\n    this.executeOverlayCallbacks();\n    e.target.value = e.target.innerHTML;\n\n    if (e.key.length === 1) {\n      e.target.value += e.key;\n    }\n\n    switch (e.keyCode) {\n      case 8:\n        // Backspace\n        if (e.target.value && e.target.value.length > 0) {\n          let orgStr = e.target.value;\n          e.target.value = orgStr.substring(0, orgStr.length - 1);\n        }\n\n        break;\n    }\n\n    this.onChange(e);\n  }\n\n  removeOverlay(overlay) {\n    if (overlay && this.overlaysMap) {\n      this.overlaysMap.delete(overlay.overlayRef);\n    }\n  }\n\n  showInput(overlay) {\n    this.updateOverlayMap(overlay);\n    return this.overlaysMap.size === 0;\n  }\n\n  updateOverlayMap(overlay) {\n    if (!this.searchContainer) {\n      return;\n    }\n\n    const searchContainerBoundingRect = this.searchContainer.getBoundingClientRect();\n\n    if (searchContainerBoundingRect.height === 0 || searchContainerBoundingRect.width === 0) {\n      return;\n    }\n\n    if (overlay) {\n      if (overlay.data.visible && (0, _boundingRectOverlapping.default)(searchContainerBoundingRect, overlay.data.boundingRect)) {\n        this.overlaysMap.set(overlay.overlayRef, overlay.data);\n      } else {\n        this.removeOverlay(overlay);\n      }\n\n      const overlayPresentInMap = this.overlaysMap.has(overlay.overlayRef);\n      const {\n        overlayPresent\n      } = this.state;\n\n      if (overlayPresentInMap !== overlayPresent) {\n        this.setState({\n          overlayPresent: overlayPresentInMap\n        });\n      }\n    }\n  }\n\n  render() {\n    const _this$props = this.props,\n          {\n      className,\n      style,\n      quiet,\n      disabled,\n      required,\n      invalid,\n      readOnly,\n      multiLine,\n      validationState,\n      disableOnOverlay,\n      alwaysNative\n    } = _this$props,\n          otherProps = _objectWithoutProperties(_this$props, [\"className\", \"style\", \"quiet\", \"disabled\", \"required\", \"invalid\", \"readOnly\", \"multiLine\", \"validationState\", \"disableOnOverlay\", \"alwaysNative\"]);\n\n    var showFocus = this.state.showFocus;\n    var Tag = multiLine ? 'textarea' : 'input';\n    const isInvalid = invalid || validationState === 'invalid' || required && !this.state.inputText;\n    const isValid = validationState === 'valid';\n    delete otherProps.autoFocus;\n    delete otherProps.autocompleteInput;\n    delete otherProps.onFocus;\n    delete otherProps.onBlur;\n\n    if (invalid) {\n      console.warn('The \"invalid\" prop of Textfield is deprecated. Please use validationState=\"invalid\" instead.');\n    }\n\n    let displayValidationIcon = required && !this.state.inputText || isInvalid || isValid;\n    let validationIcon = _validationStateSvg.invalidSvg;\n\n    if (isValid) {\n      validationIcon = _validationStateSvg.validSvg;\n    }\n\n    let isDisabled = disabled ? 'disabled' : 'default';\n    let bgStyle = {};\n    return /*#__PURE__*/_react.default.createElement(_UxpProvider.SpectrumContext.Consumer, null, ({\n      scale,\n      theme,\n      productId,\n      disableNativeControls,\n      overlay\n    } = {}) => {\n      if (showFocus && !isInvalid) {\n        bgStyle['borderColor'] = _dna.default.elements[theme][scale].textfield['default'].states['mouse-focus']['border-color'];\n      }\n\n      let bgColor = _dna.default.elements[theme][scale].textfield['default'].states[isDisabled]['background-color'];\n      bgStyle['backgroundColor'] = bgColor;\n      return (\n        /*#__PURE__*/\n        // Fix lint : Visible, non-interactive elements with click handlers must have at least one keyboard listener.\n        _react.default.createElement(\"div\", {\n          className: (0, _classnames.default)('spectrum-Textfield', `spectrum--${theme}`, {\n            'spectrum-Textfield--multiline': multiLine,\n            'is-invalid': isInvalid,\n            'is-disabled': disabled,\n            'is-valid': isValid,\n            'spectrum-Textfield--quiet': quiet\n          }, className),\n          style: Object.assign({}, bgStyle, style),\n          ref: s => this.searchContainer = s,\n          disabled: disabled,\n          onClick: !disabled ? this.handleClick : undefined\n        }, alwaysNative || !_UxpOptions.default.productNeedsOverlayFix || !(!this.showInput(overlay) || disableOnOverlay && disableNativeControls) ? /*#__PURE__*/_react.default.createElement(Tag, _extends({\n          type: \"text\",\n          className: \"inputText\",\n          ref: s => this.inputContainer = s,\n          style: {\n            appearance: 'none',\n            backgroundColor: 'inherit'\n          },\n          onFocus: !disabled ? this.handleFocus : undefined,\n          onBlur: !disabled ? this.handleBlur : undefined,\n          value: this.state.inputText,\n          disabled: disabled,\n          required: required,\n          readOnly: readOnly,\n          \"aria-invalid\": isInvalid || null,\n          defaultValue: otherProps.defaultValue\n        }, (0, _filterDOMProps.default)(otherProps), {\n          onChange: this.onChange,\n          rows: multiLine && !quiet ? otherProps.rows : 1\n        })) :\n        /*#__PURE__*/\n        //  This is a workaround to handle the input and overlay overlap issues in Ps and Ai\n        //  https://wiki.corp.adobe.com/pages/viewpage.action?spaceKey=UXP&title=Proposal+for+overlapping+textedit+and+overlays\n        //  https://wiki.corp.adobe.com/display/UXP/PS+UXP+Overlay+Issues// Fix lint: Static HTML elements with event handlers require a role, `tabIndex` should only be declared on interactive elements, Avoid positive integer values for tabIndex\n        _react.default.createElement(\"span\", {\n          className: \"inputSpan\",\n          target: this.props.value || this.state.inputText ? 'value' : 'placeholder'\n          /* eslint-disable-next-line */\n          ,\n          tabIndex: 0,\n          ref: s => this.inputContainer = s,\n          onKeyUp: this.handleSpanKeyUp,\n          onFocus: !disabled ? this.handleFocus : undefined,\n          onBlur: !disabled ? this.handleBlur : undefined\n        }, this.props.value || this.state.inputText || this.props.placeholder), displayValidationIcon && _react.default.cloneElement(validationIcon))\n      );\n    });\n  }\n\n}, _class2.propTypes = _objectSpread({}, _Textfield.default.propTypes, {\n  alwaysNative: _propTypes.default.bool\n}), _class2.defaultProps = _objectSpread({}, _Textfield.default.defaultProps, {\n  alwaysNative: false\n}), _temp)) || _class;\n\nexports.default = UxpTextfield;\nUxpTextfield.displayName = 'UxpTextfield';\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.invalidSvg = exports.validSvg = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst validSvg = /*#__PURE__*/_react.default.createElement(\"svg\", {\n  id: \"valid_svg\",\n  height: \"12\",\n  viewBox: \"0 0 12 12\",\n  width: \"36\"\n}, /*#__PURE__*/_react.default.createElement(\"path\", {\n  style: {\n    fill: 'rgb(18, 128, 92)'\n  },\n  d: \"M4.5 10a1.023 1.023 0 0 1-.8-.384l-2.488-3a1 1 0 0 1 1.577-1.233L4.5 7.376l4.712-5.991a1 1 0 1 1 1.576 1.23l-5.511 7A.977.977 0 0 1 4.5 10z\"\n}));\n\nexports.validSvg = validSvg;\n\nconst invalidSvg = /*#__PURE__*/_react.default.createElement(\"svg\", {\n  id: \"invalid_svg\",\n  height: \"18\",\n  viewBox: \"0 0 18 18\",\n  width: \"42\"\n}, /*#__PURE__*/_react.default.createElement(\"path\", {\n  style: {\n    fill: 'rgb(227, 72, 80)'\n  },\n  d: \"M8.564 1.289L.2 16.256A.5.5 0 0 0 .636 17h16.728a.5.5 0 0 0 .5-.5.494.494 0 0 0-.064-.244L9.436 1.289a.5.5 0 0 0-.872 0zM10 14.75a.25.25 0 0 1-.25.25h-1.5a.25.25 0 0 1-.25-.25v-1.5a.25.25 0 0 1 .25-.25h1.5a.25.25 0 0 1 .25.25zm0-3a.25.25 0 0 1-.25.25h-1.5a.25.25 0 0 1-.25-.25v-6a.25.25 0 0 1 .25-.25h1.5a.25.25 0 0 1 .25.25z\"\n}));\n\nexports.invalidSvg = invalidSvg;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nObject.defineProperty(exports, \"default\", {\n  enumerable: true,\n  get: function () {\n    return _MaybeUxpToast.default;\n  }\n});\nObject.defineProperty(exports, \"Toast\", {\n  enumerable: true,\n  get: function () {\n    return _MaybeUxpToast.default;\n  }\n});\n\nvar _MaybeUxpToast = _interopRequireDefault(require(\"./js/MaybeUxpToast\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n","\"use strict\";\n\nvar _UxpOptions = _interopRequireDefault(require(\"../../utils/UxpOptions\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n//  so, we are defining this module which forks behavior here so that\n//  ToastContainer can import the appropriate Toast instance either Uxp or normal.\nmodule.exports = _UxpOptions.default.select('Toast', () => require('./UxpToast'), () => require('./Toast'));\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = Toast;\nexports.DEFAULT_ROLE = exports.ICONS = exports.formatMessage = void 0;\n\nvar _AlertMedium = _interopRequireDefault(require(\"../../Icon/core/AlertMedium\"));\n\nvar _Button = _interopRequireDefault(require(\"../../Button\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _CrossMedium = _interopRequireDefault(require(\"../../Icon/core/CrossMedium\"));\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _InfoMedium = _interopRequireDefault(require(\"../../Icon/core/InfoMedium\"));\n\nvar _intl = require(\"../../utils/intl\");\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _SuccessMedium = _interopRequireDefault(require(\"../../Icon/core/SuccessMedium\"));\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst intlMessages = {\n  \"cs-CZ\": _interopRequireDefault(require(\"./../intl/cs-CZ.json\")).default,\n  \"da-DK\": _interopRequireDefault(require(\"./../intl/da-DK.json\")).default,\n  \"de-DE\": _interopRequireDefault(require(\"./../intl/de-DE.json\")).default,\n  \"en-US\": _interopRequireDefault(require(\"./../intl/en-US.json\")).default,\n  \"es-ES\": _interopRequireDefault(require(\"./../intl/es-ES.json\")).default,\n  \"fi-FI\": _interopRequireDefault(require(\"./../intl/fi-FI.json\")).default,\n  \"fr-FR\": _interopRequireDefault(require(\"./../intl/fr-FR.json\")).default,\n  \"hu-HU\": _interopRequireDefault(require(\"./../intl/hu-HU.json\")).default,\n  \"it-IT\": _interopRequireDefault(require(\"./../intl/it-IT.json\")).default,\n  \"ja-JP\": _interopRequireDefault(require(\"./../intl/ja-JP.json\")).default,\n  \"ko-KR\": _interopRequireDefault(require(\"./../intl/ko-KR.json\")).default,\n  \"nb-NO\": _interopRequireDefault(require(\"./../intl/nb-NO.json\")).default,\n  \"nl-NL\": _interopRequireDefault(require(\"./../intl/nl-NL.json\")).default,\n  \"pl-PL\": _interopRequireDefault(require(\"./../intl/pl-PL.json\")).default,\n  \"pt-BR\": _interopRequireDefault(require(\"./../intl/pt-BR.json\")).default,\n  \"ru-RU\": _interopRequireDefault(require(\"./../intl/ru-RU.json\")).default,\n  \"sv-SE\": _interopRequireDefault(require(\"./../intl/sv-SE.json\")).default,\n  \"tr-TR\": _interopRequireDefault(require(\"./../intl/tr-TR.json\")).default,\n  \"uk-UA\": _interopRequireDefault(require(\"./../intl/uk-UA.json\")).default,\n  \"zh-CN\": _interopRequireDefault(require(\"./../intl/zh-CN.json\")).default,\n  \"zh-TW\": _interopRequireDefault(require(\"./../intl/zh-TW.json\")).default\n};\n\nif (process.env.SCALE_MEDIUM && process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/toast/index.css\");\n\n  require(\"@adobe/spectrum-css/dist/components/toast/index-diff.css\");\n} else if (process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/toast/index-lg.css\");\n} else {\n  require(\"@adobe/spectrum-css/dist/components/toast/index.css\");\n}\n\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHT) require(\"@adobe/spectrum-css/dist/components/toast/multiStops/light.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARK) require(\"@adobe/spectrum-css/dist/components/toast/multiStops/dark.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHTEST) require(\"@adobe/spectrum-css/dist/components/toast/multiStops/lightest.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARKEST) require(\"@adobe/spectrum-css/dist/components/toast/multiStops/darkest.css\");\nconst formatMessage = (0, _intl.messageFormatter)(intlMessages);\nexports.formatMessage = formatMessage;\nconst ICONS = {\n  error: _AlertMedium.default,\n  warning: _AlertMedium.default,\n  info: _InfoMedium.default,\n  success: _SuccessMedium.default\n};\nexports.ICONS = ICONS;\nconst DEFAULT_ROLE = 'alert';\nexports.DEFAULT_ROLE = DEFAULT_ROLE;\n\nfunction Toast(_ref) {\n  let {\n    variant,\n    children,\n    closable,\n    onClose,\n    onAction,\n    className,\n    timeout,\n    actionLabel,\n    closeOnAction\n  } = _ref,\n      otherProps = _objectWithoutProperties(_ref, [\"variant\", \"children\", \"closable\", \"onClose\", \"onAction\", \"className\", \"timeout\", \"actionLabel\", \"closeOnAction\"]);\n\n  let Icon = ICONS[variant];\n  let role = otherProps.role || DEFAULT_ROLE;\n\n  const handleAction = (...args) => {\n    if (onAction) {\n      onAction(...args);\n    }\n\n    if (closeOnAction && onClose) {\n      onClose(...args);\n    }\n  };\n\n  return /*#__PURE__*/_react.default.createElement(\"div\", _extends({\n    role: role,\n    className: (0, _classnames.default)('spectrum-Toast', {\n      ['spectrum-Toast--' + variant]: variant\n    }, className)\n  }, (0, _filterDOMProps.default)(otherProps)), Icon && /*#__PURE__*/_react.default.createElement(Icon, {\n    size: null,\n    className: \"spectrum-Toast-typeIcon\",\n    alt: formatMessage(variant)\n  }), /*#__PURE__*/_react.default.createElement(\"div\", {\n    className: \"spectrum-Toast-body\"\n  }, /*#__PURE__*/_react.default.createElement(\"div\", {\n    className: \"spectrum-Toast-content\"\n  }, children), actionLabel && /*#__PURE__*/_react.default.createElement(_Button.default, {\n    label: actionLabel,\n    quiet: true,\n    variant: \"overBackground\",\n    onClick: handleAction\n  })), closable && /*#__PURE__*/_react.default.createElement(\"div\", {\n    className: \"spectrum-Toast-buttons\"\n  }, /*#__PURE__*/_react.default.createElement(\"button\", {\n    \"aria-label\": formatMessage('close'),\n    className: \"spectrum-ClearButton spectrum-ClearButton--medium spectrum-ClearButton--overBackground\",\n    onClick: onClose\n  }, /*#__PURE__*/_react.default.createElement(_CrossMedium.default, {\n    size: null\n  }))));\n}\n\nToast.propTypes = {\n  /** Contents to be displayed in the Toast. */\n  children: _propTypes.default.node,\n\n  /** Variant of toast to use. */\n  variant: _propTypes.default.oneOf(['error', 'warning', 'info', 'success']),\n\n  /** Whether to show close button on toast. */\n  closable: _propTypes.default.bool,\n\n  /** Label for action button. */\n  actionLabel: _propTypes.default.string,\n\n  /** Should the action button close the toast? */\n  closeOnAction: _propTypes.default.bool,\n\n  /** Function called when toast is closed. */\n  onClose: _propTypes.default.func,\n\n  /** Function called when action button is clicked. */\n  onAction: _propTypes.default.func,\n\n  /**\n   * Set the amount of time in milliseconds that the toast should persist.\n   * If set to 0, the toast will remain until closed manually.\n  */\n  timeout: _propTypes.default.number\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _CrossMedium = _interopRequireDefault(require(\"../../Icon/core/CrossMedium\"));\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _setOverlayOnProvider = _interopRequireDefault(require(\"../../utils/setOverlayOnProvider\"));\n\nvar _Toast = _interopRequireWildcard(require(\"./Toast\"));\n\nrequire(\"../uxp-style/index.css\");\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nclass UxpToast extends _react.Component {\n  constructor(props) {\n    super(props);\n\n    this.toastHandler = () => {\n      (0, _setOverlayOnProvider.default)(this.toastRef, true);\n    };\n  }\n\n  componentDidMount() {\n    if (this.toastRef) {\n      window.addEventListener('resize', this.toastHandler);\n    }\n  }\n\n  componentWillUnmount() {\n    (0, _setOverlayOnProvider.default)(this.toastRef, false);\n    window.removeEventListener('resize', this.toastHandler);\n  }\n\n  render() {\n    const _this$props = this.props,\n          {\n      variant,\n      children,\n      closable,\n      onClose,\n      onAction,\n      className,\n      actionLabel,\n      closeOnAction,\n      icon\n    } = _this$props,\n          otherProps = _objectWithoutProperties(_this$props, [\"variant\", \"children\", \"closable\", \"onClose\", \"onAction\", \"className\", \"actionLabel\", \"closeOnAction\", \"icon\"]);\n\n    let Icon = icon || _Toast.ICONS[variant];\n    let role = otherProps.role || _Toast.DEFAULT_ROLE;\n\n    const handleAction = (...args) => {\n      if (onAction) {\n        onAction(...args);\n      }\n\n      if (closeOnAction && onClose) {\n        onClose(...args);\n      }\n    };\n\n    return /*#__PURE__*/_react.default.createElement(\"div\", _extends({\n      ref: r => this.toastRef = r,\n      role: role,\n      className: (0, _classnames.default)('spectrum-Toast', {\n        ['spectrum-Toast--' + variant]: variant\n      }, className)\n    }, (0, _filterDOMProps.default)(otherProps)), Icon && /*#__PURE__*/_react.default.createElement(Icon, {\n      size: null,\n      className: \"spectrum-Toast-typeIcon\",\n      alt: (0, _Toast.formatMessage)(variant)\n    }), /*#__PURE__*/_react.default.createElement(\"div\", {\n      className: \"spectrum-Toast-body\"\n    }, /*#__PURE__*/_react.default.createElement(\"div\", {\n      className: \"spectrum-Toast-content\"\n    }, children), actionLabel && /*#__PURE__*/_react.default.createElement(\"div\", {\n      className: (0, _classnames.default)('spectrum-Button spectrum-Button--quiet spectrum-Button--overBackground', 'uxp-labelStyle', className),\n      onClick: handleAction\n    }, actionLabel)), closable && /*#__PURE__*/_react.default.createElement(\"div\", {\n      className: \"spectrum-Toast-buttons\"\n    }, /*#__PURE__*/_react.default.createElement(\"div\", {\n      className: (0, _classnames.default)('spectrum-ClearButton spectrum-ClearButton--medium spectrum-ClearButton--overBackground', 'spectrum-ClearButton-Override', className),\n      onClick: onClose\n    }, /*#__PURE__*/_react.default.createElement(_CrossMedium.default, {\n      size: null\n    }))));\n  }\n\n}\n\nexports.default = UxpToast;\nUxpToast.propTypes = _Toast.default.propTypes;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.setToastPlacement = setToastPlacement;\nexports.TOAST_PLACEMENT = exports.TOAST_CONTAINERS = void 0;\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nconst TOAST_CONTAINERS = new Map();\nexports.TOAST_CONTAINERS = TOAST_CONTAINERS;\nlet TOAST_PLACEMENT = 'top center';\nexports.TOAST_PLACEMENT = TOAST_PLACEMENT;\n\nfunction setToastPlacement(placement) {\n  exports.TOAST_PLACEMENT = TOAST_PLACEMENT = placement;\n\n  for (let container of TOAST_CONTAINERS.values()) {\n    container.setState({\n      placement\n    });\n  }\n}\n","\"use strict\";\n\nvar _UxpOptions = _interopRequireDefault(require(\"../utils/UxpOptions\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nmodule.exports = _UxpOptions.default.select('Tooltip', () => require('./js/UxpTooltip'), () => require('./js/Tooltip'));\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _createId = _interopRequireDefault(require(\"../../utils/createId\"));\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nif (process.env.SCALE_MEDIUM && process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/tooltip/index.css\");\n\n  require(\"@adobe/spectrum-css/dist/components/tooltip/index-diff.css\");\n} else if (process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/tooltip/index-lg.css\");\n} else {\n  require(\"@adobe/spectrum-css/dist/components/tooltip/index.css\");\n}\n\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHT) require(\"@adobe/spectrum-css/dist/components/tooltip/multiStops/light.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARK) require(\"@adobe/spectrum-css/dist/components/tooltip/multiStops/dark.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHTEST) require(\"@adobe/spectrum-css/dist/components/tooltip/multiStops/lightest.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARKEST) require(\"@adobe/spectrum-css/dist/components/tooltip/multiStops/darkest.css\");\n\nclass Tooltip extends _react.Component {\n  constructor(props) {\n    super(props);\n    this.tooltipId = (0, _createId.default)();\n  }\n\n  render() {\n    const _this$props = this.props,\n          {\n      variant,\n      children,\n      className,\n      placement,\n      open,\n      id = this.tooltipId\n    } = _this$props,\n          otherProps = _objectWithoutProperties(_this$props, [\"variant\", \"children\", \"className\", \"placement\", \"open\", \"id\"]);\n\n    return /*#__PURE__*/_react.default.createElement(\"span\", _extends({\n      className: (0, _classnames.default)('spectrum-Tooltip', `spectrum-Tooltip--${variant}`, `spectrum-Tooltip--${placement.split(' ')[0]}`, {\n        'is-open': open\n      }, className),\n      id: id\n    }, (0, _filterDOMProps.default)(otherProps)), /*#__PURE__*/_react.default.createElement(\"span\", {\n      className: \"spectrum-Tooltip-label\"\n    }, children), this.renderTip());\n  }\n\n  renderTip() {\n    return /*#__PURE__*/_react.default.createElement(\"span\", {\n      className: \"spectrum-Tooltip-tip\",\n      style: this.props.arrowStyle\n    });\n  }\n\n}\n\nexports.default = Tooltip;\nTooltip.propTypes = {\n  /**\n   * The placement of the tooltip.\n   */\n  placement: _propTypes.default.oneOf(['bottom', 'top', 'left', 'right']),\n\n  /**\n   * The variant will affect color.\n   */\n  variant: _propTypes.default.oneOf(['inspect', 'info', 'success', 'error']),\n\n  /**\n   * The class name of the tooltip.\n   */\n  className: _propTypes.default.string,\n\n  /**\n   * The ID of the tooltip.\n   */\n  id: _propTypes.default.string,\n\n  /**\n   * The WAI-ARIA role for the tooltip\n   */\n  role: _propTypes.default.oneOf(['tooltip']),\n\n  /**\n   * Control if the tooltip should be opened or not.\n   */\n  open: _propTypes.default.bool\n};\nTooltip.defaultProps = {\n  variant: 'inspect',\n  placement: 'right',\n  open: true,\n  role: 'tooltip'\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _dna = _interopRequireDefault(require(\"../../utils/dna\"));\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _setOverlayOnProvider = _interopRequireDefault(require(\"../../utils/setOverlayOnProvider\"));\n\nvar _UxpProvider = require(\"../../Provider/js/UxpProvider\");\n\nvar _Tooltip = _interopRequireDefault(require(\"./Tooltip\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction getPathData(size, placement) {\n  if (placement === 'right') {\n    return `M ${size * 2} 0 l ${-size} ${size} l ${size} ${size} z`;\n  }\n\n  if (placement === 'left') {\n    return `M 0 0 l ${size} ${size} l ${-size} ${size} z`;\n  }\n\n  if (placement === 'top') {\n    return `M 0 0 l ${size} ${size} l ${size} ${-size} z`;\n  }\n\n  if (placement === 'bottom') {\n    return `M 0 ${size * 2} l ${size} ${-size} l ${size} ${size} z`;\n  }\n} // maps from our variant names to spectrum-dna variant names\n\n\nconst variantMap = {\n  inspect: 'default',\n  info: 'info',\n  error: 'negative',\n  success: 'positive'\n};\n\nclass UxpTooltip extends _Tooltip.default {\n  constructor(...args) {\n    var _temp;\n\n    return _temp = super(...args), this.setOverlayVisible = () => {\n      (0, _setOverlayOnProvider.default)(this.tooltipRef, true, this.hide);\n    }, this.setOverlayHidden = () => {\n      (0, _setOverlayOnProvider.default)(this.tooltipRef, false);\n    }, this.hide = () => {\n      if (this.tooltipRef) {\n        this.tooltipRef.style.display = 'none';\n      }\n    }, _temp;\n  }\n\n  componentDidMount() {\n    if (this.tooltipRef) {\n      this.tooltipRef.addEventListener('resize', this.setOverlayVisible);\n    }\n  }\n\n  componentWillUnmount() {\n    if (this.tooltipRef) {\n      this.tooltipRef.removeEventListener('resize', this.setOverlayVisible);\n    }\n\n    this.setOverlayHidden();\n  }\n\n  renderTip() {\n    const {\n      variant,\n      placement\n    } = this.props;\n    const s = 4; // size\n\n    return /*#__PURE__*/_react.default.createElement(_UxpProvider.SpectrumContext.Consumer, null, ({\n      scale,\n      theme\n    } = {}) =>\n    /*#__PURE__*/\n    // console.log(\"=========== \" + JSON.stringify({variant, placement, scale, theme}));\n    _react.default.createElement(\"svg\", {\n      className: \"spectrum-Tooltip-tip\",\n      style: {\n        width: s * 2,\n        height: s * 2,\n        border: 'none',\n        fill: _dna.default.elements[theme][scale].tooltip[variantMap[variant]].states.default['tip-color']\n      }\n    }, /*#__PURE__*/_react.default.createElement(\"path\", {\n      d: getPathData(s, placement)\n    })));\n  }\n\n  render() {\n    const _this$props = this.props,\n          {\n      variant,\n      children,\n      className,\n      placement,\n      open,\n      id = this.tooltipId\n    } = _this$props,\n          otherProps = _objectWithoutProperties(_this$props, [\"variant\", \"children\", \"className\", \"placement\", \"open\", \"id\"]);\n\n    return /*#__PURE__*/_react.default.createElement(\"span\", _extends({\n      ref: r => this.tooltipRef = r,\n      className: (0, _classnames.default)('spectrum-Tooltip', `spectrum-Tooltip--${variant}`, `spectrum-Tooltip--${placement.split(' ')[0]}`, {\n        'is-open': open\n      }, className),\n      id: id\n    }, (0, _filterDOMProps.default)(otherProps)), /*#__PURE__*/_react.default.createElement(\"span\", {\n      className: \"spectrum-Tooltip-label\"\n    }, children), this.renderTip());\n  }\n\n}\n\nexports.default = UxpTooltip;\n","\"use strict\";\n\nvar _UxpOptions = _interopRequireDefault(require(\"../utils/UxpOptions\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nmodule.exports = _UxpOptions.default.select('Wait', () => require('./js/UxpWait'), () => require('./js/Wait'));\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _Wait = require(\"./Wait\");\n\nvar _dna = _interopRequireDefault(require(\"../../utils/dna\"));\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _UxpProvider = require(\"../../Provider/js/UxpProvider\");\n\nrequire(\"../uxp-style/index.css\");\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* sigmoidFactory\n *\n * Generate an ease-in-out function with desired steepness.\n * Accompanying article: https://medium.com/analytic-animations/ease-in-out-the-sigmoid-factory-c5116d8abce9\n *\n * Required:\n *   k: (float != 0), sharpness of ease\n *\n * Return: f(t), t in 0..1\n */\nfunction sigmoidFactory(k) {\n  function base(t) {\n    return 1 / (1 + Math.exp(-k * t)) - 0.5;\n  }\n\n  var correction = 0.5 / base(1);\n  return function (t) {\n    t = clamp(t, 0, 1);\n    return correction * base(2 * t - 1) + 0.5;\n  };\n}\n\nfunction getViewBoxAttribute(height, width) {\n  return '0 0 ' + height.replace(/px/gi, '') + ' ' + width.replace(/px/gi, '');\n}\n\nfunction clamp(val, lower, upper) {\n  return Math.max(Math.min(val, upper), lower);\n}\n\nfunction getSvgArc(radius, startAngleDegrees, finishAngleDegrees) {\n  if (finishAngleDegrees < startAngleDegrees) {\n    finishAngleDegrees += 360;\n  }\n\n  let arcLengthDegrees = finishAngleDegrees - startAngleDegrees;\n\n  if (arcLengthDegrees >= 360) {\n    // draw a complete circle with two arcs\n    return `M ${radius * 2} ${radius} A ${radius} ${radius} 0 0 1 0 ${radius} A ${radius} ${radius} 0 0 1 ${radius * 2} ${radius}`;\n  }\n\n  let startAngle = 2 * Math.PI * (startAngleDegrees / 360);\n  let finishAngle = 2 * Math.PI * (finishAngleDegrees / 360);\n  let zeroAngle = -Math.PI / 2.2;\n  let x0 = radius + radius * Math.cos(startAngle + zeroAngle);\n  let y0 = radius + radius * Math.sin(startAngle + zeroAngle);\n  let x1 = radius + radius * Math.cos(finishAngle + zeroAngle);\n  let y1 = radius + radius * Math.sin(finishAngle + zeroAngle);\n  return `M ${x0} ${y0} A ${radius} ${radius} 0 ${arcLengthDegrees >= 180 ? 1 : 0} 1 ${x1} ${y1}`;\n}\n\nfunction getArcAngles(alpha\n/* 0 to 1 */\n) {\n  // most easing functions start and stop at zero which doesn't look good here.\n  // we want the animation sections to slow down but never completely stop.\n  // we are using the sigmoidFactory functions because it allows us to control the starting and stopping speeds\n  // and allow allow the slope of the function to remain positive at alpha = 0 and alpha = 1\n  let start = sigmoidFactory(4)(alpha) * 360;\n  let finish = sigmoidFactory(5.5)((alpha + 0.4) % 1) * 360;\n\n  if (start < 0) {\n    start += 1;\n  }\n\n  if (finish < start) {\n    finish += 1;\n  }\n\n  return [start, finish];\n}\n\nconst sizeToDnaVariantMap = {\n  L: {\n    determinate: 'large',\n    indeterminate: 'large',\n    overBackground: 'large-over-background'\n  },\n  M: {\n    determinate: 'medium',\n    indeterminate: 'medium',\n    overBackground: 'medium-over-background'\n  },\n  S: {\n    determinate: 'small',\n    indeterminate: 'small',\n    overBackground: 'small-over-background'\n  }\n};\n\nclass UxpWait extends _react.Component {\n  constructor(...args) {\n    var _temp;\n\n    return _temp = super(...args), this.tick = () => {\n      this.animId = requestAnimationFrame(() => {\n        let value = (this.getValue() + 1.8) % 100;\n        this.setState({\n          value\n        });\n        this.tick();\n      });\n    }, _temp;\n  }\n\n  getValue() {\n    if (this.props && this.props.value) {\n      return this.props.value;\n    }\n\n    if (this.state && this.state.value) {\n      return this.state.value;\n    }\n\n    return 0;\n  }\n\n  get indeterminate() {\n    return this.props.variant !== _Wait.DETERMINATE;\n  }\n\n  componentDidMount() {\n    this.tick();\n  }\n\n  componentWillUnmount() {\n    cancelAnimationFrame(this.animId);\n  }\n\n  render() {\n    let _this$props = this.props,\n        {\n      size = 'M',\n      className,\n\n      /* eslint-disable-next-line */\n      indeterminate = true,\n      centered = false,\n      variant = _Wait.INDETERMINATE\n    } = _this$props,\n        otherProps = _objectWithoutProperties(_this$props, [\"size\", \"className\", \"indeterminate\", \"centered\", \"variant\"]);\n\n    let startAngle, finishAngle;\n    let value = this.getValue(); // Using workaround for now as rgba is not working with stroke attribute.\n\n    let strokeOpacity = variant === 'overBackground' ? '0.2' : '1.0';\n\n    if (this.indeterminate) {\n      //  we don't know how long it will take so we\n      //  do a continual looping animation\n      [startAngle, finishAngle] = getArcAngles(value / 100);\n    } else {\n      //  we know how long it will take based on value being set so we\n      //  use the value to display from 0 to full 360\n      startAngle = 0;\n      finishAngle = this.props.value / 100 * 360;\n    }\n\n    return /*#__PURE__*/_react.default.createElement(_UxpProvider.SpectrumContext.Consumer, null, ({\n      scale,\n      theme\n    } = {}) => {\n      const genome = _dna.default.elements[theme][scale].circleloader[sizeToDnaVariantMap[size][variant]];\n      const spectrumTrackColor = genome.states.default['track-color'];\n      const spectrumFillColor = genome.states.default['track-fill-color'];\n      let strokeWidth = parseInt(genome.dimensions['border-size'].slice(0, -2), 10); // remove trailing px\n\n      let width = parseInt(genome.dimensions.width.slice(0, -2), 10); // remove trailing px\n\n      let radius = width / 2 - strokeWidth;\n      let translateBy = Math.floor(strokeWidth / 2 + 1);\n      let variantClass = `circleLoader--${sizeToDnaVariantMap[size]['indeterminate']}`;\n      return /*#__PURE__*/_react.default.createElement(\"div\", {\n        className: `spectrum-CircleLoader ${variantClass} ${className} ${centered ? 'react-spectrum-Wait--centered' : ''}`\n      }, /*#__PURE__*/_react.default.createElement(\"svg\", _extends({\n        viewBox: getViewBoxAttribute(genome.dimensions.height, genome.dimensions.width),\n        className: variantClass\n        /* we need variantClass on both the container and the svg elements */\n\n      }, (0, _filterDOMProps.default)(otherProps)), /*#__PURE__*/_react.default.createElement(\"path\", {\n        d: getSvgArc(radius, 0, 360),\n        stroke: spectrumTrackColor,\n        strokeOpacity: strokeOpacity,\n        fill: \"transparent\",\n        strokeWidth: strokeWidth,\n        transform: `translate(${translateBy}, ${translateBy})`\n      }), /*#__PURE__*/_react.default.createElement(\"path\", {\n        d: getSvgArc(radius, startAngle, finishAngle),\n        stroke: spectrumFillColor,\n        fill: \"transparent\",\n        strokeWidth: strokeWidth + 1,\n        transform: `translate(${translateBy}, ${translateBy})`\n      })));\n    });\n  }\n\n}\n\nexports.default = UxpWait;\nUxpWait.propTypes = {\n  /** Whether to center the Wait compnent in the parent container. */\n  centered: _propTypes.default.bool,\n\n  /** Custom CSS class to add to the Wait component */\n  className: _propTypes.default.string,\n\n  /**\n   * Boolean to determine if the Wait component should endlessly spin (indeterminate) or\n   * if it should be controlled manually.\n   */\n  indeterminate: _propTypes.default.bool,\n\n  /** Size of the Wait component */\n  size: _propTypes.default.string,\n\n  /** Adjust the filled portion of the Wait component to a determined value */\n  value: _propTypes.default.number,\n\n  /**\n  * The variant of Wait to display.\n  */\n  variant: _propTypes.default.string\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.INDETERMINATE = exports.DETERMINATE = void 0;\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _filterDOMProps = _interopRequireDefault(require(\"../../utils/filterDOMProps\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nrequire(\"../style/index.css\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nif (process.env.SCALE_MEDIUM && process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/circleloader/index.css\");\n\n  require(\"@adobe/spectrum-css/dist/components/circleloader/index-diff.css\");\n} else if (process.env.SCALE_LARGE) {\n  require(\"@adobe/spectrum-css/dist/components/circleloader/index-lg.css\");\n} else {\n  require(\"@adobe/spectrum-css/dist/components/circleloader/index.css\");\n}\n\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHT) require(\"@adobe/spectrum-css/dist/components/circleloader/multiStops/light.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARK) require(\"@adobe/spectrum-css/dist/components/circleloader/multiStops/dark.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_LIGHTEST) require(\"@adobe/spectrum-css/dist/components/circleloader/multiStops/lightest.css\");\nif (!process.env.THEME_LIGHT && !process.env.THEME_DARK && !process.env.THEME_LIGHTEST && !process.env.THEME_DARKEST || process.env.THEME_DARKEST) require(\"@adobe/spectrum-css/dist/components/circleloader/multiStops/darkest.css\");\nconst DETERMINATE = 'determinate';\nexports.DETERMINATE = DETERMINATE;\nconst INDETERMINATE = 'indeterminate';\nexports.INDETERMINATE = INDETERMINATE;\n\nclass Wait extends _react.default.Component {\n  render() {\n    let _this$props = this.props,\n        {\n      value = 0,\n      size = 'M',\n      indeterminate = true,\n      centered = false,\n      className,\n      variant\n    } = _this$props,\n        otherProps = _objectWithoutProperties(_this$props, [\"value\", \"size\", \"indeterminate\", \"centered\", \"className\", \"variant\"]); // Determinate version has two high level masks, 1) right half, 2) left half\n    // within each of those is a submask which rotates into view within that mask\n    // but starts off on the opposite side so it's hidden\n    // for first 50%, submask1 moves from -180 to 0 as it covers the first half\n    // for the second 50%, submask1 stays in one place and submask2 rotates in\n    // from -180 to 0\n\n\n    let angle;\n    let fillSubmask1Style = {};\n    let fillSubmask2Style = {};\n    let ariaValue = undefined;\n\n    if (variant === DETERMINATE || variant === INDETERMINATE) {\n      console.warn(`The \"${variant}\" variant of Wait is deprecated. Please use the \"indeterminate\" prop instead.`);\n    }\n\n    if (variant === DETERMINATE || !indeterminate) {\n      value = Math.min(Math.max(+value, 0), 100);\n      ariaValue = value;\n\n      if (value > 0 && value <= 50) {\n        angle = -180 + value / 50 * 180;\n        fillSubmask1Style.transform = 'rotate(' + angle + 'deg)';\n        fillSubmask2Style.transform = 'rotate(-180deg)';\n      } else if (value > 50) {\n        angle = -180 + (value - 50) / 50 * 180;\n        fillSubmask1Style.transform = 'rotate(0deg)';\n        fillSubmask2Style.transform = 'rotate(' + angle + 'deg)';\n      }\n    }\n\n    return /*#__PURE__*/_react.default.createElement(\"div\", _extends({\n      className: (0, _classnames.default)('spectrum-CircleLoader', {\n        'spectrum-CircleLoader--indeterminate': variant === INDETERMINATE || indeterminate && variant !== DETERMINATE,\n        'spectrum-CircleLoader--small': size === 'S',\n        'spectrum-CircleLoader--large': size === 'L',\n        'spectrum-CircleLoader--overBackground': variant === 'overBackground',\n        'react-spectrum-Wait--centered': centered\n      }, className),\n      role: \"progressbar\",\n      \"aria-valuenow\": ariaValue,\n      \"aria-valuemin\": 0,\n      \"aria-valuemax\": 100\n    }, (0, _filterDOMProps.default)(otherProps)), /*#__PURE__*/_react.default.createElement(\"div\", {\n      className: \"spectrum-CircleLoader-track\"\n    }), /*#__PURE__*/_react.default.createElement(\"div\", {\n      className: \"spectrum-CircleLoader-fills\"\n    }, /*#__PURE__*/_react.default.createElement(\"div\", {\n      className: \"spectrum-CircleLoader-fillMask1\"\n    }, /*#__PURE__*/_react.default.createElement(\"div\", {\n      className: \"spectrum-CircleLoader-fillSubMask1\",\n      style: fillSubmask1Style\n    }, /*#__PURE__*/_react.default.createElement(\"div\", {\n      className: \"spectrum-CircleLoader-fill\"\n    }))), /*#__PURE__*/_react.default.createElement(\"div\", {\n      className: \"spectrum-CircleLoader-fillMask2\"\n    }, /*#__PURE__*/_react.default.createElement(\"div\", {\n      className: \"spectrum-CircleLoader-fillSubMask2\",\n      style: fillSubmask2Style\n    }, /*#__PURE__*/_react.default.createElement(\"div\", {\n      className: \"spectrum-CircleLoader-fill\"\n    })))));\n  }\n\n}\n\nexports.default = Wait;\nWait.propTypes = {\n  /** Whether to center the Wait compnent in the parent container. */\n  centered: _propTypes.default.bool,\n\n  /** Custom CSS class to add to the Wait component */\n  className: _propTypes.default.string,\n\n  /**\n   * Boolean to determine if the Wait component should endlessly spin (indeterminate) or\n   * if it should be controlled manually.\n   */\n  indeterminate: _propTypes.default.bool,\n\n  /** Size of the Wait component */\n  size: _propTypes.default.string,\n\n  /** Adjust the filled portion of the Wait component to a determined value */\n  value: _propTypes.default.number,\n\n  /**\n  * The variant of Wait to display.\n  */\n  variant: _propTypes.default.oneOf(['overBackground'])\n};\n","/**\n *  Copyright 2018 Adobe. All rights reserved.\n *  This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n *  you may not use this file except in compliance with the License. You may obtain a copy\n *  of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n *  Unless required by applicable law or agreed to in writing, software distributed under\n *  the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n *  OF ANY KIND, either express or implied. See the License for the specific language\n *  governing permissions and limitations under the License.\n */\n\n// Provides explicit indication of elements receiving focus through keyboard interaction rather than mouse or touch.\n(function(doc) {\n  // In case file is imported in SSR context, don't polyfill anything\n  if (!doc) {\n    return;\n  }\n\n  var NAVIGATION_KEYS = [\n    'Tab',\n    'ArrowUp',\n    'ArrowRight',\n    'ArrowDown',\n    'ArrowLeft',\n    'Home',\n    'End',\n    'PageUp',\n    'PageDown',\n    'Enter',\n    ' ',\n    'Escape',\n\n    /* IE9 and Firefox < 37 */\n    'Up',\n    'Right',\n    'Down',\n    'Left',\n    'Esc'\n  ];\n  var TEXT_INPUT_TYPES = [\n    'text',\n    'date',\n    'datetime-local',\n    'email',\n    'month',\n    'number',\n    'password',\n    'search',\n    'tel',\n    'time',\n    'url',\n    'week'\n  ];\n  var keyboardFocus = false;\n  var elements = doc.getElementsByClassName('focus-ring');\n\n  function onKeydownHandler(event) {\n    if (event.ctrlKey || event.altKey || event.metaKey || NAVIGATION_KEYS.indexOf(event.key) === -1) {\n      return;\n    }\n    keyboardFocus = true;\n\n    if (doc.activeElement &&\n        doc.activeElement !== doc.body &&\n        doc.activeElement.tagName !== 'TEXTAREA' &&\n        !(doc.activeElement.tagName === 'INPUT' &&\n          TEXT_INPUT_TYPES.indexOf(doc.activeElement.type) !== -1)) {\n      doc.activeElement.classList.add('focus-ring');\n    }\n  }\n\n  function onMousedownHandler() {\n    keyboardFocus = false;\n\n    for (var i = 0; i < elements.length; i++) {\n      elements[i].classList.remove('focus-ring');\n    }\n\n  }\n\n  function onFocusHandler(event) {\n    var classList = event.target.classList;\n    if (classList && keyboardFocus) {\n      classList.add('focus-ring');\n    }\n  }\n\n  function onBlurHandler(event) {\n    var classList = event.target.classList;\n    classList && classList.remove('focus-ring');\n  }\n\n  doc.addEventListener('keydown', onKeydownHandler, true);\n  doc.addEventListener('mousedown', onMousedownHandler, true);\n  doc.addEventListener('focus', onFocusHandler, true);\n  doc.addEventListener('blur', onBlurHandler, true);\n})(typeof window === \"undefined\" ? undefined : document);\n","/* jshint node:true */\n\n'use strict';\n\nvar IntlMessageFormat = require('./lib/main')['default'];\n\n// Add all locale data to `IntlMessageFormat`. This module will be ignored when\n// bundling for the browser with Browserify/Webpack.\nrequire('./lib/locales');\n\n// Re-export `IntlMessageFormat` as the CommonJS default exports with all the\n// locale data registered, and with English set as the default locale. Define\n// the `default` prop for use with other compiled ES6 Modules.\nexports = module.exports = IntlMessageFormat;\nexports['default'] = exports;\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\n\n/* jslint esnext: true */\n\nexport default Compiler;\n\nfunction Compiler(locales, formats, pluralFn) {\n    this.locales  = locales;\n    this.formats  = formats;\n    this.pluralFn = pluralFn;\n}\n\nCompiler.prototype.compile = function (ast) {\n    this.pluralStack        = [];\n    this.currentPlural      = null;\n    this.pluralNumberFormat = null;\n\n    return this.compileMessage(ast);\n};\n\nCompiler.prototype.compileMessage = function (ast) {\n    if (!(ast && ast.type === 'messageFormatPattern')) {\n        throw new Error('Message AST is not of type: \"messageFormatPattern\"');\n    }\n\n    var elements = ast.elements,\n        pattern  = [];\n\n    var i, len, element;\n\n    for (i = 0, len = elements.length; i < len; i += 1) {\n        element = elements[i];\n\n        switch (element.type) {\n            case 'messageTextElement':\n                pattern.push(this.compileMessageText(element));\n                break;\n\n            case 'argumentElement':\n                pattern.push(this.compileArgument(element));\n                break;\n\n            default:\n                throw new Error('Message element does not have a valid type');\n        }\n    }\n\n    return pattern;\n};\n\nCompiler.prototype.compileMessageText = function (element) {\n    // When this `element` is part of plural sub-pattern and its value contains\n    // an unescaped '#', use a `PluralOffsetString` helper to properly output\n    // the number with the correct offset in the string.\n    if (this.currentPlural && /(^|[^\\\\])#/g.test(element.value)) {\n        // Create a cache a NumberFormat instance that can be reused for any\n        // PluralOffsetString instance in this message.\n        if (!this.pluralNumberFormat) {\n            this.pluralNumberFormat = new Intl.NumberFormat(this.locales);\n        }\n\n        return new PluralOffsetString(\n                this.currentPlural.id,\n                this.currentPlural.format.offset,\n                this.pluralNumberFormat,\n                element.value);\n    }\n\n    // Unescape the escaped '#'s in the message text.\n    return element.value.replace(/\\\\#/g, '#');\n};\n\nCompiler.prototype.compileArgument = function (element) {\n    var format = element.format;\n\n    if (!format) {\n        return new StringFormat(element.id);\n    }\n\n    var formats  = this.formats,\n        locales  = this.locales,\n        pluralFn = this.pluralFn,\n        options;\n\n    switch (format.type) {\n        case 'numberFormat':\n            options = formats.number[format.style];\n            return {\n                id    : element.id,\n                format: new Intl.NumberFormat(locales, options).format\n            };\n\n        case 'dateFormat':\n            options = formats.date[format.style];\n            return {\n                id    : element.id,\n                format: new Intl.DateTimeFormat(locales, options).format\n            };\n\n        case 'timeFormat':\n            options = formats.time[format.style];\n            return {\n                id    : element.id,\n                format: new Intl.DateTimeFormat(locales, options).format\n            };\n\n        case 'pluralFormat':\n            options = this.compileOptions(element);\n            return new PluralFormat(\n                element.id, format.ordinal, format.offset, options, pluralFn\n            );\n\n        case 'selectFormat':\n            options = this.compileOptions(element);\n            return new SelectFormat(element.id, options);\n\n        default:\n            throw new Error('Message element does not have a valid format type');\n    }\n};\n\nCompiler.prototype.compileOptions = function (element) {\n    var format      = element.format,\n        options     = format.options,\n        optionsHash = {};\n\n    // Save the current plural element, if any, then set it to a new value when\n    // compiling the options sub-patterns. This conforms the spec's algorithm\n    // for handling `\"#\"` syntax in message text.\n    this.pluralStack.push(this.currentPlural);\n    this.currentPlural = format.type === 'pluralFormat' ? element : null;\n\n    var i, len, option;\n\n    for (i = 0, len = options.length; i < len; i += 1) {\n        option = options[i];\n\n        // Compile the sub-pattern and save it under the options's selector.\n        optionsHash[option.selector] = this.compileMessage(option.value);\n    }\n\n    // Pop the plural stack to put back the original current plural value.\n    this.currentPlural = this.pluralStack.pop();\n\n    return optionsHash;\n};\n\n// -- Compiler Helper Classes --------------------------------------------------\n\nfunction StringFormat(id) {\n    this.id = id;\n}\n\nStringFormat.prototype.format = function (value) {\n    if (!value && typeof value !== 'number') {\n        return '';\n    }\n\n    return typeof value === 'string' ? value : String(value);\n};\n\nfunction PluralFormat(id, useOrdinal, offset, options, pluralFn) {\n    this.id         = id;\n    this.useOrdinal = useOrdinal;\n    this.offset     = offset;\n    this.options    = options;\n    this.pluralFn   = pluralFn;\n}\n\nPluralFormat.prototype.getOption = function (value) {\n    var options = this.options;\n\n    var option = options['=' + value] ||\n            options[this.pluralFn(value - this.offset, this.useOrdinal)];\n\n    return option || options.other;\n};\n\nfunction PluralOffsetString(id, offset, numberFormat, string) {\n    this.id           = id;\n    this.offset       = offset;\n    this.numberFormat = numberFormat;\n    this.string       = string;\n}\n\nPluralOffsetString.prototype.format = function (value) {\n    var number = this.numberFormat.format(value - this.offset);\n\n    return this.string\n            .replace(/(^|[^\\\\])#/g, '$1' + number)\n            .replace(/\\\\#/g, '#');\n};\n\nfunction SelectFormat(id, options) {\n    this.id      = id;\n    this.options = options;\n}\n\nSelectFormat.prototype.getOption = function (value) {\n    var options = this.options;\n    return options[value] || options.other;\n};\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\n\n/* jslint esnext: true */\n\nimport {extend, hop} from './utils';\nimport {defineProperty, objCreate} from './es5';\nimport Compiler from './compiler';\nimport parser from 'intl-messageformat-parser';\n\nexport default MessageFormat;\n\n// -- MessageFormat --------------------------------------------------------\n\nfunction MessageFormat(message, locales, formats) {\n    // Parse string messages into an AST.\n    var ast = typeof message === 'string' ?\n            MessageFormat.__parse(message) : message;\n\n    if (!(ast && ast.type === 'messageFormatPattern')) {\n        throw new TypeError('A message must be provided as a String or AST.');\n    }\n\n    // Creates a new object with the specified `formats` merged with the default\n    // formats.\n    formats = this._mergeFormats(MessageFormat.formats, formats);\n\n    // Defined first because it's used to build the format pattern.\n    defineProperty(this, '_locale',  {value: this._resolveLocale(locales)});\n\n    // Compile the `ast` to a pattern that is highly optimized for repeated\n    // `format()` invocations. **Note:** This passes the `locales` set provided\n    // to the constructor instead of just the resolved locale.\n    var pluralFn = this._findPluralRuleFunction(this._locale);\n    var pattern  = this._compilePattern(ast, locales, formats, pluralFn);\n\n    // \"Bind\" `format()` method to `this` so it can be passed by reference like\n    // the other `Intl` APIs.\n    var messageFormat = this;\n    this.format = function (values) {\n      try {\n        return messageFormat._format(pattern, values);\n      } catch (e) {\n        if (e.variableId) {\n          throw new Error(\n            'The intl string context variable \\'' + e.variableId + '\\'' +\n            ' was not provided to the string \\'' + message + '\\''\n          );\n        } else {\n          throw e;\n        }\n      }\n    };\n}\n\n// Default format options used as the prototype of the `formats` provided to the\n// constructor. These are used when constructing the internal Intl.NumberFormat\n// and Intl.DateTimeFormat instances.\ndefineProperty(MessageFormat, 'formats', {\n    enumerable: true,\n\n    value: {\n        number: {\n            'currency': {\n                style: 'currency'\n            },\n\n            'percent': {\n                style: 'percent'\n            }\n        },\n\n        date: {\n            'short': {\n                month: 'numeric',\n                day  : 'numeric',\n                year : '2-digit'\n            },\n\n            'medium': {\n                month: 'short',\n                day  : 'numeric',\n                year : 'numeric'\n            },\n\n            'long': {\n                month: 'long',\n                day  : 'numeric',\n                year : 'numeric'\n            },\n\n            'full': {\n                weekday: 'long',\n                month  : 'long',\n                day    : 'numeric',\n                year   : 'numeric'\n            }\n        },\n\n        time: {\n            'short': {\n                hour  : 'numeric',\n                minute: 'numeric'\n            },\n\n            'medium':  {\n                hour  : 'numeric',\n                minute: 'numeric',\n                second: 'numeric'\n            },\n\n            'long': {\n                hour        : 'numeric',\n                minute      : 'numeric',\n                second      : 'numeric',\n                timeZoneName: 'short'\n            },\n\n            'full': {\n                hour        : 'numeric',\n                minute      : 'numeric',\n                second      : 'numeric',\n                timeZoneName: 'short'\n            }\n        }\n    }\n});\n\n// Define internal private properties for dealing with locale data.\ndefineProperty(MessageFormat, '__localeData__', {value: objCreate(null)});\ndefineProperty(MessageFormat, '__addLocaleData', {value: function (data) {\n    if (!(data && data.locale)) {\n        throw new Error(\n            'Locale data provided to IntlMessageFormat is missing a ' +\n            '`locale` property'\n        );\n    }\n\n    MessageFormat.__localeData__[data.locale.toLowerCase()] = data;\n}});\n\n// Defines `__parse()` static method as an exposed private.\ndefineProperty(MessageFormat, '__parse', {value: parser.parse});\n\n// Define public `defaultLocale` property which defaults to English, but can be\n// set by the developer.\ndefineProperty(MessageFormat, 'defaultLocale', {\n    enumerable: true,\n    writable  : true,\n    value     : undefined\n});\n\nMessageFormat.prototype.resolvedOptions = function () {\n    // TODO: Provide anything else?\n    return {\n        locale: this._locale\n    };\n};\n\nMessageFormat.prototype._compilePattern = function (ast, locales, formats, pluralFn) {\n    var compiler = new Compiler(locales, formats, pluralFn);\n    return compiler.compile(ast);\n};\n\nMessageFormat.prototype._findPluralRuleFunction = function (locale) {\n    var localeData = MessageFormat.__localeData__;\n    var data       = localeData[locale.toLowerCase()];\n\n    // The locale data is de-duplicated, so we have to traverse the locale's\n    // hierarchy until we find a `pluralRuleFunction` to return.\n    while (data) {\n        if (data.pluralRuleFunction) {\n            return data.pluralRuleFunction;\n        }\n\n        data = data.parentLocale && localeData[data.parentLocale.toLowerCase()];\n    }\n\n    throw new Error(\n        'Locale data added to IntlMessageFormat is missing a ' +\n        '`pluralRuleFunction` for :' + locale\n    );\n};\n\nMessageFormat.prototype._format = function (pattern, values) {\n    var result = '',\n        i, len, part, id, value, err;\n\n    for (i = 0, len = pattern.length; i < len; i += 1) {\n        part = pattern[i];\n\n        // Exist early for string parts.\n        if (typeof part === 'string') {\n            result += part;\n            continue;\n        }\n\n        id = part.id;\n\n        // Enforce that all required values are provided by the caller.\n        if (!(values && hop.call(values, id))) {\n          err = new Error('A value must be provided for: ' + id);\n          err.variableId = id;\n          throw err;\n        }\n\n        value = values[id];\n\n        // Recursively format plural and select parts' option — which can be a\n        // nested pattern structure. The choosing of the option to use is\n        // abstracted-by and delegated-to the part helper object.\n        if (part.options) {\n            result += this._format(part.getOption(value), values);\n        } else {\n            result += part.format(value);\n        }\n    }\n\n    return result;\n};\n\nMessageFormat.prototype._mergeFormats = function (defaults, formats) {\n    var mergedFormats = {},\n        type, mergedType;\n\n    for (type in defaults) {\n        if (!hop.call(defaults, type)) { continue; }\n\n        mergedFormats[type] = mergedType = objCreate(defaults[type]);\n\n        if (formats && hop.call(formats, type)) {\n            extend(mergedType, formats[type]);\n        }\n    }\n\n    return mergedFormats;\n};\n\nMessageFormat.prototype._resolveLocale = function (locales) {\n    if (typeof locales === 'string') {\n        locales = [locales];\n    }\n\n    // Create a copy of the array so we can push on the default locale.\n    locales = (locales || []).concat(MessageFormat.defaultLocale);\n\n    var localeData = MessageFormat.__localeData__;\n    var i, len, localeParts, data;\n\n    // Using the set of locales + the default locale, we look for the first one\n    // which that has been registered. When data does not exist for a locale, we\n    // traverse its ancestors to find something that's been registered within\n    // its hierarchy of locales. Since we lack the proper `parentLocale` data\n    // here, we must take a naive approach to traversal.\n    for (i = 0, len = locales.length; i < len; i += 1) {\n        localeParts = locales[i].toLowerCase().split('-');\n\n        while (localeParts.length) {\n            data = localeData[localeParts.join('-')];\n            if (data) {\n                // Return the normalized locale string; e.g., we return \"en-US\",\n                // instead of \"en-us\".\n                return data.locale;\n            }\n\n            localeParts.pop();\n        }\n    }\n\n    var defaultLocale = locales.pop();\n    throw new Error(\n        'No locale data has been added to IntlMessageFormat for: ' +\n        locales.join(', ') + ', or the default locale: ' + defaultLocale\n    );\n};\n","// GENERATED FILE\nexport default {\"locale\":\"en\",\"pluralRuleFunction\":function (n,ord){var s=String(n).split(\".\"),v0=!s[1],t0=Number(s[0])==n,n10=t0&&s[0].slice(-1),n100=t0&&s[0].slice(-2);if(ord)return n10==1&&n100!=11?\"one\":n10==2&&n100!=12?\"two\":n10==3&&n100!=13?\"few\":\"other\";return n==1&&v0?\"one\":\"other\"}};\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\n\n/* jslint esnext: true */\n\nimport {hop} from './utils';\n\n// Purposely using the same implementation as the Intl.js `Intl` polyfill.\n// Copyright 2013 Andy Earnshaw, MIT License\n\nvar realDefineProp = (function () {\n    try { return !!Object.defineProperty({}, 'a', {}); }\n    catch (e) { return false; }\n})();\n\nvar es3 = !realDefineProp && !Object.prototype.__defineGetter__;\n\nvar defineProperty = realDefineProp ? Object.defineProperty :\n        function (obj, name, desc) {\n\n    if ('get' in desc && obj.__defineGetter__) {\n        obj.__defineGetter__(name, desc.get);\n    } else if (!hop.call(obj, name) || 'value' in desc) {\n        obj[name] = desc.value;\n    }\n};\n\nvar objCreate = Object.create || function (proto, props) {\n    var obj, k;\n\n    function F() {}\n    F.prototype = proto;\n    obj = new F();\n\n    for (k in props) {\n        if (hop.call(props, k)) {\n            defineProperty(obj, k, props[k]);\n        }\n    }\n\n    return obj;\n};\n\nexport {defineProperty, objCreate};\n","/* jslint esnext: true */\n\nimport IntlMessageFormat from './core';\nimport defaultLocale from './en';\n\nIntlMessageFormat.__addLocaleData(defaultLocale);\nIntlMessageFormat.defaultLocale = 'en';\n\nexport default IntlMessageFormat;\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\n\n/* jslint esnext: true */\n\nexport var hop = Object.prototype.hasOwnProperty;\n\nexport function extend(obj) {\n    var sources = Array.prototype.slice.call(arguments, 1),\n        i, len, source, key;\n\n    for (i = 0, len = sources.length; i < len; i += 1) {\n        source = sources[i];\n        if (!source) { continue; }\n\n        for (key in source) {\n            if (hop.call(source, key)) {\n                obj[key] = source[key];\n            }\n        }\n    }\n\n    return obj;\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.trapFocus = trapFocus;\nexports.TABBABLE_ELEMENT_SELECTOR = exports.FOCUSABLE_ELEMENT_SELECTOR = exports.default = void 0;\n\nvar _autobindDecorator = _interopRequireDefault(require(\"autobind-decorator\"));\n\nvar _events = require(\"./events\");\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nvar _string = require(\"./string\");\n\nvar _scrollToDOMNode = _interopRequireDefault(require(\"./scrollToDOMNode\"));\n\nvar _class, _class2, _temp2;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst WHITESPACE_REGEXP = /[\\n\\r]+|[\\s]{1,}/g;\nconst DELAY_BEFORE_AUTOFOCUS = 175;\n\nlet FocusManager = (0, _autobindDecorator.default)(_class = (_temp2 = _class2 = class FocusManager extends _react.default.Component {\n  constructor(...args) {\n    var _temp;\n\n    return _temp = super(...args), this.keysSoFar = '', this.keyClearTimeout = null, _temp;\n  }\n\n  getItems(selected = false) {\n    const {\n      itemSelector,\n      selectedItemSelector,\n      includeSelf\n    } = this.props;\n    const selector = selected && selectedItemSelector ? selectedItemSelector : itemSelector;\n\n    const node = _reactDom.default.findDOMNode(this);\n\n    const array = [];\n\n    if (includeSelf && node.matches(selector)) {\n      array.push(node);\n    }\n\n    let items = array.concat(Array.from(node.querySelectorAll(selector)));\n    /* When items have data-order defined, we use the attribute to sort the items.\n     * The sort order based on data-order attribute defines the next focus element.\n     */\n\n    if (items.length > 0 && items[0].getAttribute('data-order') !== undefined) {\n      items.sort(function (a, b) {\n        let p1 = a.getAttribute('data-order');\n        let p2 = b.getAttribute('data-order');\n        return parseInt(p1, 10) - parseInt(p2, 10);\n      });\n    }\n\n    return items;\n  }\n\n  onFocusFirst(e) {\n    const items = this.getItems();\n\n    if (items.length && (!e || items.indexOf(e.target) !== -1)) {\n      if (e) {\n        e.preventDefault();\n      }\n\n      items[0].focus();\n    }\n  }\n\n  onFocusLast(e) {\n    const items = this.getItems();\n\n    if (items.length && (!e || items.indexOf(e.target) !== -1)) {\n      if (e) {\n        e.preventDefault();\n      }\n\n      items[items.length - 1].focus();\n    }\n  }\n\n  onFocusPrevious(e, offset = 1) {\n    const items = this.getItems();\n\n    if (items.length && e && items.indexOf(e.target) !== -1) {\n      e.preventDefault();\n      let index = items.indexOf(e.target) - offset;\n\n      if (index < 0) {\n        if (this.props.disableCyclicFocus) {\n          return;\n        }\n\n        index = items.length - 1;\n      }\n\n      items[index].focus();\n    }\n  }\n\n  onFocusNext(e, offset = 1) {\n    const items = this.getItems();\n\n    if (items.length && e && items.indexOf(e.target) !== -1) {\n      e.preventDefault();\n      let index = items.indexOf(e.target) + offset;\n\n      if (index >= items.length) {\n        if (this.props.disableCyclicFocus) {\n          return;\n        }\n\n        index = 0;\n      }\n\n      items[index].focus();\n    }\n  }\n\n  onPageUp(e) {\n    if (this.props.ignorePageUpPageDown) {\n      return;\n    }\n\n    const items = this.getItems();\n\n    if (items.length && e && items.indexOf(e.target) !== -1) {\n      e.preventDefault();\n\n      const listNode = _reactDom.default.findDOMNode(this);\n\n      const nextPage = Math.max(e.target.offsetTop + e.target.offsetHeight - listNode.clientHeight, 0);\n      const index = items.indexOf(e.target);\n      const item = items.slice(0, index).reverse().find(item => item.offsetTop < nextPage);\n\n      if (item) {\n        item.focus();\n        (0, _scrollToDOMNode.default)(item, listNode, true);\n      } else {\n        this.onFocusFirst(e);\n      }\n    }\n  }\n\n  onPageDown(e) {\n    if (this.props.ignorePageUpPageDown) {\n      return;\n    }\n\n    const items = this.getItems();\n\n    if (items.length && e && items.indexOf(e.target) !== -1) {\n      e.preventDefault();\n\n      const listNode = _reactDom.default.findDOMNode(this);\n\n      const nextPage = Math.min(e.target.offsetTop + listNode.clientHeight, listNode.scrollHeight + listNode.clientHeight);\n      const index = items.indexOf(e.target) + 1;\n      const item = items.slice(index).find(item => item.offsetTop + item.offsetHeight > nextPage);\n\n      if (item) {\n        item.focus();\n        (0, _scrollToDOMNode.default)(item, listNode, true);\n      } else {\n        this.onFocusLast(e);\n      }\n    }\n  }\n\n  findItemToFocus(e) {\n    const {\n      target,\n      shiftKey,\n      charCode\n    } = e;\n    const character = (0, _string.removeDiacritics)(String.fromCharCode(charCode)).toUpperCase();\n    let items = this.getItems();\n\n    if (this.keysSoFar === '' || character === this.keysSoFar || shiftKey) {\n      // reverse order if shiftKey is pressed\n      if (shiftKey) {\n        items = items.reverse();\n      }\n\n      this.searchIndex = items.indexOf(target);\n    }\n\n    if (character !== this.keysSoFar) {\n      this.keysSoFar += character;\n    }\n\n    this.clearKeysSoFarAfterDelay();\n    let item = this.findMatchInRange(items, this.searchIndex + 1, items.length);\n\n    if (!item) {\n      item = this.findMatchInRange(items, 0, this.searchIndex);\n    }\n\n    if (item) {\n      item.focus();\n    }\n  }\n\n  clearKeysSoFarAfterDelay() {\n    if (this.keyClearTimeout) {\n      clearTimeout(this.keyClearTimeout);\n    }\n\n    this.keyClearTimeout = setTimeout(() => this.keysSoFar = '', 500);\n  }\n\n  findMatchInRange(items, startIndex, endIndex) {\n    // Find the first item starting with the keysSoFar substring, searching in the specified range of items\n    for (let i = startIndex; i < endIndex; i++) {\n      const label = items[i].innerText || items[i].textContent;\n\n      if (label && (0, _string.removeDiacritics)(label).replace(WHITESPACE_REGEXP, '').toUpperCase().indexOf(this.keysSoFar) === 0) {\n        return items[i];\n      }\n    }\n\n    return null;\n  }\n  /**\n   * Handle keydown event\n   * @param {Event} e Event object\n   */\n\n\n  onKeyDown(e) {\n    if (e.isPropagationStopped()) {\n      return;\n    }\n\n    _events.interpretKeyboardEvent.call(this, e, this.props.orientation);\n  }\n  /**\n   * Handle keypress event\n   * @param {Event} e Event object\n   */\n\n\n  onKeyPress(e) {\n    if (e.isPropagationStopped()) {\n      return;\n    }\n\n    this.findItemToFocus(e);\n  }\n  /**\n   * When an item receives focus, it should have tabIndex === 0 and all other items should have tabIndex === -1\n   * @param {Event} e Event object\n   */\n\n\n  onFocus(e) {\n    if (e.isPropagationStopped()) {\n      return;\n    }\n\n    this.getItems().forEach(item => item.tabIndex = item === e.target ? 0 : -1);\n  }\n  /**\n   * When an item loses focus, set the appropriate tabIndex on each item based on its selected state.\n   * If the item losing focus is selected,\n   * it should be the only item to receive focus on shift+tab or tab back to the control,\n   * However, if the item losing focus is not selected,\n   * any of the selected items should receive focus on shift+tab or tab.\n   * @param {Event} e Event object\n   */\n\n\n  onBlur(e) {\n    if (e.isPropagationStopped()) {\n      return;\n    }\n\n    const selectedItems = this.getItems(true); // If there are selected items,\n\n    if (selectedItems.length) {\n      // store whether item losing focus is selected.\n      const targetSelected = selectedItems.indexOf(e.target) !== -1;\n      this.getItems().forEach(item => {\n        // store whether the current item is selected.\n        const selected = selectedItems.indexOf(item) !== -1; // If the current item is the item losing focus and it is selected,\n        // or the current item is selected and the item losing focus is not selected,\n        // set tabIndex === 0, otherwise set tabIndex === -1.\n\n        item.tabIndex = item === e.target && targetSelected || !targetSelected && selected ? 0 : -1;\n      });\n    }\n  }\n\n  componentDidMount() {\n    const {\n      autoFocus,\n      selectedItemSelector\n    } = this.props;\n\n    if (autoFocus) {\n      const selectedItem = selectedItemSelector ? _reactDom.default.findDOMNode(this).querySelector(selectedItemSelector) : null; // wait a frame before trying to shift focus\n\n      this.focusTimer = setTimeout(() => {\n        if (selectedItem) {\n          selectedItem.focus();\n        } else {\n          this.onFocusFirst();\n        }\n      }, DELAY_BEFORE_AUTOFOCUS);\n    }\n  }\n\n  componentWillUnmount() {\n    clearTimeout(this.focusTimer);\n  }\n\n  render() {\n    const {\n      children,\n      disabled,\n      manageTabIndex,\n      typeToSelect\n    } = this.props;\n\n    const child = _react.default.Children.only(children);\n\n    const {\n      onKeyDown,\n      onKeyPress,\n      onFocus,\n      onBlur\n    } = child.props;\n    return _react.default.cloneElement(child, {\n      onKeyDown: !disabled ? (0, _events.chain)(onKeyDown, this.onKeyDown) : onKeyDown,\n      onKeyPress: typeToSelect && !disabled ? (0, _events.chain)(onKeyPress, this.onKeyPress) : onKeyPress,\n      onFocus: manageTabIndex && !disabled ? (0, _events.chain)(onFocus, this.onFocus) : onFocus,\n      onBlur: manageTabIndex && !disabled ? (0, _events.chain)(onBlur, this.onBlur) : onBlur\n    });\n  }\n\n}, _class2.propTypes = {\n  /**\n   * A selector of focusable elements to manage focus between\n   */\n  itemSelector: _propTypes.default.string.isRequired,\n\n  /**\n   * Whether to use roving tabIndex so that only one element within the group can receive focus with tab key at a time.\n   */\n  manageTabIndex: _propTypes.default.bool,\n\n  /**\n   * Orientation of items; \"horizontal\" orientation ignores up/down arrow keys, \"vertical\" orientation ignores left/right arrow keys, \"both\" handles up/left and down/right.\n   */\n  orientation: _propTypes.default.oneOf(['horizontal', 'vertical', 'both']),\n\n  /**\n   * A selector of selected elements\n   */\n  selectedItemSelector: _propTypes.default.string,\n\n  /**\n   * Whether to disable focus management\n   */\n  disabled: _propTypes.default.bool,\n\n  /**\n   * Whether to include alphanumeric typing as a way to move focus to items in a list.\n   */\n  typeToSelect: _propTypes.default.bool,\n\n  /**\n   * Whether to include the child wrapper element in the group of elements that can receive focus.\n   */\n  includeSelf: _propTypes.default.bool,\n\n  /**\n   * Whether to ignore PageUp and PageDown events to move focus between items.\n   */\n  ignorePageUpPageDown: _propTypes.default.bool,\n\n  /**\n   * Whether to autoFocus first selected item or first item.\n   */\n  autoFocus: _propTypes.default.bool\n}, _class2.defaultProps = {\n  manageTabIndex: true,\n  orientation: 'vertical',\n  typeToSelect: false,\n  includeSelf: false,\n  ignorePageUpPageDown: false\n}, _temp2)) || _class;\n\nexports.default = FocusManager;\nconst focusableElements = ['input:not([disabled]):not([type=hidden])', 'select:not([disabled])', 'textarea:not([disabled])', 'button:not([disabled])', 'a[href]', 'area[href]', 'summary', 'iframe', 'object', 'embed', 'audio[controls]', 'video[controls]', '[contenteditable]'];\nconst FOCUSABLE_ELEMENT_SELECTOR = focusableElements.join(',') + ',[tabindex]';\nexports.FOCUSABLE_ELEMENT_SELECTOR = FOCUSABLE_ELEMENT_SELECTOR;\nfocusableElements.push('[tabindex]:not([tabindex=\"-1\"])');\nconst TABBABLE_ELEMENT_SELECTOR = focusableElements.join(':not([tabindex=\"-1\"]),');\nexports.TABBABLE_ELEMENT_SELECTOR = TABBABLE_ELEMENT_SELECTOR;\n\nfunction trapFocus(componentOrElement, event) {\n  const {\n    type,\n    key,\n    shiftKey,\n    target\n  } = event;\n  let node;\n  let tabbables;\n  let tabbable;\n  let first;\n  let last;\n\n  if (type === 'keydown' || type === 'focus') {\n    node = _reactDom.default.findDOMNode(componentOrElement);\n\n    if (node) {\n      // find tabbable elements within container element\n      tabbables = Array.from(node.querySelectorAll(TABBABLE_ELEMENT_SELECTOR)).filter(el => el !== node);\n      first = tabbables[0] || node;\n      last = tabbables[tabbables.length - 1] || node;\n    }\n  } // If navigating using the tab key,\n\n\n  if (type === 'keydown' && key === 'Tab') {\n    if (node) {\n      if (shiftKey) {\n        // with focus on first tabbable element, navigating backwards,\n        if (target === first || target === node) {\n          // focus the last tabbable element\n          tabbable = last;\n        } // otherwise, with focus on last tabbable element, navigating forwards,\n\n      } else if (target === last || target === node) {\n        // focus the first tabbable element.\n        tabbable = first;\n      }\n    }\n  } else if (type === 'focus' && target === node) {\n    tabbable = first;\n  }\n\n  if (tabbable) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (tabbable !== document.activeElement) {\n      tabbable.focus();\n    }\n  }\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = OpenTransition;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Transition = _interopRequireDefault(require(\"react-transition-group/Transition\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nconst OPEN_STATES = {\n  entering: false,\n  entered: true\n};\n/**\n * timeout issues adding css animations to enter may be related to\n * https://github.com/reactjs/react-transition-group/issues/189 or\n * https://github.com/reactjs/react-transition-group/issues/22\n * my VM isn't good enough to debug accurately and get a better answer\n *\n * as a result, use enter 0 so that is-open is applied once entered\n * it doesn't matter if we know when the css-animation is done on entering\n * for exiting though, give time for the css-animation to play\n * before removing from the DOM\n * **note** hitting esc bypasses exit animation for anyone testing\n */\n\nfunction OpenTransition(props) {\n  return /*#__PURE__*/_react.default.createElement(_Transition.default, _extends({\n    timeout: {\n      enter: 0,\n      exit: 125\n    }\n  }, props), state => _react.default.cloneElement(props.children, {\n    open: !!OPEN_STATES[state]\n  }));\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _needsNative = _interopRequireDefault(require(\"./needsNative\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst isUxp = window.location.protocol === 'plugin:';\nconst defaultOptions = Object.freeze({\n  enabled: isUxp,\n  default: isUxp,\n  productNeedsOverlayFix: isUxp && (0, _needsNative.default)() || false,\n  AccordionItem: undefined,\n  Autocomplete: undefined,\n  Breadcrumbs: undefined,\n  Button: undefined,\n  Checkbox: undefined,\n  CoachMark: undefined,\n  CoachMarkIndicator: undefined,\n  CoachMarkPopover: undefined,\n  Dialog: undefined,\n  Dropdown: undefined,\n  FieldLabel: undefined,\n  Form: undefined,\n  Label: undefined,\n  ListItem: undefined,\n  Menu: undefined,\n  ModalTrigger: undefined,\n  OverlayTrigger: undefined,\n  Popover: undefined,\n  Provider: undefined,\n  Search: undefined,\n  Select: undefined,\n  SelectList: undefined,\n  Slider: undefined,\n  SwitchBase: undefined,\n  Tab: undefined,\n  TabList: undefined,\n  Textfield: undefined,\n  Toast: undefined,\n  Tooltip: undefined,\n  Video: undefined,\n  Wait: undefined\n}); //  this is necessary because we are using require(\"Component\") and the Component is exporting default usually\n\nfunction getDefaultExport(moduleExports) {\n  return moduleExports.default || moduleExports;\n}\n\nclass UxpOptions {\n  constructor() {\n    this.reset();\n  }\n\n  reset() {\n    Object.assign(this, defaultOptions);\n  }\n\n  select(name, UxpComponentFn, WebComponentFn) {\n    let Component = getDefaultExport(this[name] ? UxpComponentFn() : WebComponentFn());\n    return Component;\n  }\n\n} //  we use a proxy in order to provide logic for each option on get\n\n\nvar _default = new Proxy(new UxpOptions(), {\n  get(options, p) {\n    let value = options[p];\n\n    if (defaultOptions.hasOwnProperty(p)) {\n      if (options.enabled) {\n        return value != null ? value : options.default;\n      }\n\n      return false;\n    }\n\n    return value;\n  }\n\n});\n\nexports.default = _default;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = boundingRectOverlapping;\n\nfunction boundingRectOverlapping(br1, br2) {\n  if (isBoundingClientRectZero(br1) || isBoundingClientRectZero(br2)) {\n    return false;\n  }\n\n  return !(br2.left >= br1.right || br2.right <= br1.left || br2.top >= br1.bottom || br2.bottom <= br1.top);\n}\n\nfunction isBoundingClientRectZero(br) {\n  if (br.left === 0 && br.right === 0 && br.top === 0 && br.bottom === 0) {\n    return true;\n  }\n\n  return false;\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = configureTypekit;\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nfunction configureTypekit(typeKitId) {\n  const config = {\n    kitId: typeKitId,\n    scriptTimeout: 3000\n  };\n\n  if (!window.Typekit) {\n    // we load the typescript only once\n    const h = document.getElementsByTagName('html')[0];\n    h.className += ' wf-loading';\n    const t = setTimeout(() => {\n      h.className = h.className.replace(/(\\s|^)wf-loading(\\s|$)/g, ' ');\n      h.className += ' wf-inactive';\n    }, config.scriptTimeout);\n    const tk = document.createElement('script');\n    let d = false;\n    tk.src = `https://use.typekit.net/${config.kitId}.js`;\n    tk.type = 'text/javascript';\n    tk.async = 'true';\n\n    tk.onload = tk.onreadystatechange = function onload() {\n      const a = this.readyState;\n\n      if (d || a && a !== 'complete' && a !== 'loaded') {\n        return;\n      }\n\n      d = true;\n      clearTimeout(t);\n\n      try {\n        window.Typekit.load(config);\n      } catch (b) {\n        /* empty */\n      }\n    };\n\n    const s = document.getElementsByTagName('script')[0];\n    s.parentNode.insertBefore(tk, s);\n  }\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = convertUnsafeMethod;\n\nvar _semverCompare = _interopRequireDefault(require(\"semver-compare\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\n\n/**\n * This is a decorator that converts UNSAFE React lifecycle methods to their pre-React 16.3.0 variant\n*/\nfunction convertUnsafeMethod(WrappedComponent) {\n  const proto = WrappedComponent.prototype;\n  const UNSAFE_componentWillUpdate = proto.UNSAFE_componentWillUpdate;\n  const UNSAFE_componentWillMount = proto.UNSAFE_componentWillMount;\n  const UNSAFE_componentWillReceiveProps = proto.UNSAFE_componentWillReceiveProps;\n\n  if ((0, _semverCompare.default)(_react.default.version, '16.3.0') === -1) {\n    if (UNSAFE_componentWillUpdate) {\n      proto.componentWillUpdate = function (props, state) {\n        UNSAFE_componentWillUpdate.apply(this, arguments);\n      };\n    }\n\n    if (UNSAFE_componentWillMount) {\n      proto.componentWillMount = function () {\n        UNSAFE_componentWillMount.apply(this, arguments);\n      };\n    }\n\n    if (UNSAFE_componentWillReceiveProps) {\n      proto.componentWillReceiveProps = function (props) {\n        UNSAFE_componentWillReceiveProps.apply(this, arguments);\n      };\n    }\n  }\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nconst PREFIX = 'react-spectrum-';\nlet incrementor = 0;\n\nvar _default = () => PREFIX + ++incrementor;\n\nexports.default = _default;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n// ////////////////////////////////////////////////////////////////////\n//  DO NOT modify this file by hand.\n//  contents generated by extract-dna.js\n// ////////////////////////////////////////////////////////////////////\nvar _default = {\n  'elements': {\n    'lightest': {\n      'medium': {\n        'circleloader': {\n          'large': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(80, 80, 80)',\n                'track-color': 'rgb(234, 234, 234)',\n                'track-fill-color': 'rgb(38, 128, 235)'\n              }\n            },\n            'dimensions': {\n              'height': '64px',\n              'width': '64px',\n              'border-size': '4px'\n            }\n          },\n          'large-over-background': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(255, 255, 255)',\n                'track-color': 'rgba(255,255,255,0.2)',\n                'track-fill-color': 'rgb(255, 255, 255)'\n              }\n            },\n            'dimensions': {\n              'height': '64px',\n              'width': '64px',\n              'border-size': '4px'\n            }\n          },\n          'medium': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(80, 80, 80)',\n                'track-color': 'rgb(234, 234, 234)',\n                'track-fill-color': 'rgb(38, 128, 235)'\n              }\n            },\n            'dimensions': {\n              'height': '32px',\n              'width': '32px',\n              'border-size': '3px'\n            }\n          },\n          'medium-over-background': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(255, 255, 255)',\n                'track-color': 'rgba(255,255,255,0.2)',\n                'track-fill-color': 'rgb(255, 255, 255)'\n              }\n            },\n            'dimensions': {\n              'height': '32px',\n              'width': '32px',\n              'border-size': '3px'\n            }\n          },\n          'small': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(80, 80, 80)',\n                'track-color': 'rgb(234, 234, 234)',\n                'track-fill-color': 'rgb(38, 128, 235)'\n              }\n            },\n            'dimensions': {\n              'height': '16px',\n              'width': '16px',\n              'border-size': '2px'\n            }\n          },\n          'small-over-background': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(255, 255, 255)',\n                'track-color': 'rgba(255,255,255,0.2)',\n                'track-fill-color': 'rgb(255, 255, 255)'\n              }\n            },\n            'dimensions': {\n              'height': '16px',\n              'width': '16px',\n              'border-size': '2px'\n            }\n          }\n        },\n        'coachmark': {\n          'default': {\n            'dimensions': {\n              'indicator-ring-border-size': '2px',\n              'animation-indicator-ring-duration': '3000ms',\n              'animation-indicator-keyframe-50-opacity': '0.6',\n              'indicator-ring-diameter': '16px'\n            },\n            'states': {\n              'default': {\n                'indicator-ring-default-color': 'rgb(55, 142, 240)'\n              }\n            }\n          },\n          'quiet': {\n            'dimensions': {\n              'indicator-ring-border-size': '2px',\n              'animation-indicator-ring-duration': '3000ms',\n              'animation-indicator-keyframe-50-opacity': '0.6',\n              'indicator-ring-diameter': '8px'\n            },\n            'states': {\n              'default': {\n                'indicator-ring-default-color': 'rgb(55, 142, 240)'\n              }\n            }\n          }\n        },\n        'popover': {\n          'default': {\n            'states': {\n              'default': {\n                'background-color': 'rgb(255, 255, 255)',\n                'border-color': 'rgb(211, 211, 211)'\n              }\n            }\n          }\n        },\n        'sidenav': {\n          'default': {\n            'states': {\n              'key-focus': {\n                'item-border-color': 'rgb(55, 142, 240)'\n              }\n            }\n          },\n          'multilevel': {\n            'states': {\n              'key-focus': {\n                'item-border-color': 'rgb(55, 142, 240)'\n              }\n            }\n          }\n        },\n        'textfield': {\n          'default': {\n            'states': {\n              'default': {\n                'background-color': 'rgb(255, 255, 255)',\n                'border-color': 'rgb(234, 234, 234)'\n              },\n              'disabled': {\n                'background-color': 'rgb(244, 244, 244)',\n                'border-color': 'transparent'\n              },\n              'mouse-focus': {\n                'background-color': 'rgb(255, 255, 255)',\n                'border-color': 'rgb(38, 128, 235)'\n              }\n            }\n          },\n          'quiet': {\n            'states': {\n              'default': {\n                'background-color': 'transparent',\n                'border-color': 'rgb(234, 234, 234)'\n              },\n              'disabled': {\n                'background-color': 'transparent',\n                'border-color': 'rgb(234, 234, 234)'\n              },\n              'mouse-focus': {\n                'background-color': 'transparent',\n                'border-color': 'rgb(38, 128, 235)'\n              }\n            }\n          }\n        },\n        'tooltip': {\n          'default': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(116, 116, 116)'\n              }\n            }\n          },\n          'info': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(13, 102, 208)'\n              }\n            }\n          },\n          'negative': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(201, 37, 45)'\n              }\n            }\n          },\n          'positive': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(18, 128, 92)'\n              }\n            }\n          }\n        }\n      },\n      'large': {\n        'circleloader': {\n          'large': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(80, 80, 80)',\n                'track-color': 'rgb(234, 234, 234)',\n                'track-fill-color': 'rgb(38, 128, 235)'\n              }\n            },\n            'dimensions': {\n              'height': '80px',\n              'width': '80px',\n              'border-size': '5px'\n            }\n          },\n          'large-over-background': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(255, 255, 255)',\n                'track-color': 'rgba(255,255,255,0.2)',\n                'track-fill-color': 'rgb(255, 255, 255)'\n              }\n            },\n            'dimensions': {\n              'height': '80px',\n              'width': '80px',\n              'border-size': '5px'\n            }\n          },\n          'medium': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(80, 80, 80)',\n                'track-color': 'rgb(234, 234, 234)',\n                'track-fill-color': 'rgb(38, 128, 235)'\n              }\n            },\n            'dimensions': {\n              'height': '40px',\n              'width': '40px',\n              'border-size': '4px'\n            }\n          },\n          'medium-over-background': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(255, 255, 255)',\n                'track-color': 'rgba(255,255,255,0.2)',\n                'track-fill-color': 'rgb(255, 255, 255)'\n              }\n            },\n            'dimensions': {\n              'height': '40px',\n              'width': '40px',\n              'border-size': '4px'\n            }\n          },\n          'small': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(80, 80, 80)',\n                'track-color': 'rgb(234, 234, 234)',\n                'track-fill-color': 'rgb(38, 128, 235)'\n              }\n            },\n            'dimensions': {\n              'height': '20px',\n              'width': '20px',\n              'border-size': '3px'\n            }\n          },\n          'small-over-background': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(255, 255, 255)',\n                'track-color': 'rgba(255,255,255,0.2)',\n                'track-fill-color': 'rgb(255, 255, 255)'\n              }\n            },\n            'dimensions': {\n              'height': '20px',\n              'width': '20px',\n              'border-size': '3px'\n            }\n          }\n        },\n        'coachmark': {\n          'default': {\n            'dimensions': {\n              'indicator-ring-border-size': '2px',\n              'animation-indicator-ring-duration': '3000ms',\n              'animation-indicator-keyframe-50-opacity': '0.6',\n              'indicator-ring-diameter': '20px'\n            },\n            'states': {\n              'default': {\n                'indicator-ring-default-color': 'rgb(55, 142, 240)'\n              }\n            }\n          },\n          'quiet': {\n            'dimensions': {\n              'indicator-ring-border-size': '2px',\n              'animation-indicator-ring-duration': '3000ms',\n              'animation-indicator-keyframe-50-opacity': '0.6',\n              'indicator-ring-diameter': '10px'\n            },\n            'states': {\n              'default': {\n                'indicator-ring-default-color': 'rgb(55, 142, 240)'\n              }\n            }\n          }\n        },\n        'popover': {\n          'default': {\n            'states': {\n              'default': {\n                'background-color': 'rgb(255, 255, 255)',\n                'border-color': 'rgb(211, 211, 211)'\n              }\n            }\n          }\n        },\n        'sidenav': {\n          'default': {\n            'states': {\n              'key-focus': {\n                'item-border-color': 'rgb(55, 142, 240)'\n              }\n            }\n          },\n          'multilevel': {\n            'states': {\n              'key-focus': {\n                'item-border-color': 'rgb(55, 142, 240)'\n              }\n            }\n          }\n        },\n        'textfield': {\n          'default': {\n            'states': {\n              'default': {\n                'background-color': 'rgb(255, 255, 255)',\n                'border-color': 'rgb(234, 234, 234)'\n              },\n              'disabled': {\n                'background-color': 'rgb(244, 244, 244)',\n                'border-color': 'transparent'\n              },\n              'mouse-focus': {\n                'background-color': 'rgb(255, 255, 255)',\n                'border-color': 'rgb(38, 128, 235)'\n              }\n            }\n          },\n          'quiet': {\n            'states': {\n              'default': {\n                'background-color': 'transparent',\n                'border-color': 'rgb(234, 234, 234)'\n              },\n              'disabled': {\n                'background-color': 'transparent',\n                'border-color': 'rgb(234, 234, 234)'\n              },\n              'mouse-focus': {\n                'background-color': 'transparent',\n                'border-color': 'rgb(38, 128, 235)'\n              }\n            }\n          }\n        },\n        'tooltip': {\n          'default': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(116, 116, 116)'\n              }\n            }\n          },\n          'info': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(13, 102, 208)'\n              }\n            }\n          },\n          'negative': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(201, 37, 45)'\n              }\n            }\n          },\n          'positive': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(18, 128, 92)'\n              }\n            }\n          }\n        }\n      }\n    },\n    'light': {\n      'medium': {\n        'circleloader': {\n          'large': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(75, 75, 75)',\n                'track-color': 'rgb(225, 225, 225)',\n                'track-fill-color': 'rgb(20, 115, 230)'\n              }\n            },\n            'dimensions': {\n              'height': '64px',\n              'width': '64px',\n              'border-size': '4px'\n            }\n          },\n          'large-over-background': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(255, 255, 255)',\n                'track-color': 'rgba(255,255,255,0.2)',\n                'track-fill-color': 'rgb(255, 255, 255)'\n              }\n            },\n            'dimensions': {\n              'height': '64px',\n              'width': '64px',\n              'border-size': '4px'\n            }\n          },\n          'medium': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(75, 75, 75)',\n                'track-color': 'rgb(225, 225, 225)',\n                'track-fill-color': 'rgb(20, 115, 230)'\n              }\n            },\n            'dimensions': {\n              'height': '32px',\n              'width': '32px',\n              'border-size': '3px'\n            }\n          },\n          'medium-over-background': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(255, 255, 255)',\n                'track-color': 'rgba(255,255,255,0.2)',\n                'track-fill-color': 'rgb(255, 255, 255)'\n              }\n            },\n            'dimensions': {\n              'height': '32px',\n              'width': '32px',\n              'border-size': '3px'\n            }\n          },\n          'small': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(75, 75, 75)',\n                'track-color': 'rgb(225, 225, 225)',\n                'track-fill-color': 'rgb(20, 115, 230)'\n              }\n            },\n            'dimensions': {\n              'height': '16px',\n              'width': '16px',\n              'border-size': '2px'\n            }\n          },\n          'small-over-background': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(255, 255, 255)',\n                'track-color': 'rgba(255,255,255,0.2)',\n                'track-fill-color': 'rgb(255, 255, 255)'\n              }\n            },\n            'dimensions': {\n              'height': '16px',\n              'width': '16px',\n              'border-size': '2px'\n            }\n          }\n        },\n        'coachmark': {\n          'default': {\n            'dimensions': {\n              'indicator-ring-border-size': '2px',\n              'animation-indicator-ring-duration': '3000ms',\n              'animation-indicator-keyframe-50-opacity': '0.6',\n              'indicator-ring-diameter': '16px'\n            },\n            'states': {\n              'default': {\n                'indicator-ring-default-color': 'rgb(38, 128, 235)'\n              }\n            }\n          },\n          'quiet': {\n            'dimensions': {\n              'indicator-ring-border-size': '2px',\n              'animation-indicator-ring-duration': '3000ms',\n              'animation-indicator-keyframe-50-opacity': '0.6',\n              'indicator-ring-diameter': '8px'\n            },\n            'states': {\n              'default': {\n                'indicator-ring-default-color': 'rgb(38, 128, 235)'\n              }\n            }\n          }\n        },\n        'popover': {\n          'default': {\n            'states': {\n              'default': {\n                'background-color': 'rgb(255, 255, 255)',\n                'border-color': 'rgb(202, 202, 202)'\n              }\n            }\n          }\n        },\n        'sidenav': {\n          'default': {\n            'states': {\n              'key-focus': {\n                'item-border-color': 'rgb(38, 128, 235)'\n              }\n            }\n          },\n          'multilevel': {\n            'states': {\n              'key-focus': {\n                'item-border-color': 'rgb(38, 128, 235)'\n              }\n            }\n          }\n        },\n        'textfield': {\n          'default': {\n            'states': {\n              'default': {\n                'background-color': 'rgb(255, 255, 255)',\n                'border-color': 'rgb(225, 225, 225)'\n              },\n              'disabled': {\n                'background-color': 'rgb(234, 234, 234)',\n                'border-color': 'transparent'\n              },\n              'mouse-focus': {\n                'background-color': 'rgb(255, 255, 255)',\n                'border-color': 'rgb(20, 115, 230)'\n              }\n            }\n          },\n          'quiet': {\n            'states': {\n              'default': {\n                'background-color': 'transparent',\n                'border-color': 'rgb(225, 225, 225)'\n              },\n              'disabled': {\n                'background-color': 'transparent',\n                'border-color': 'rgb(225, 225, 225)'\n              },\n              'mouse-focus': {\n                'background-color': 'transparent',\n                'border-color': 'rgb(20, 115, 230)'\n              }\n            }\n          }\n        },\n        'tooltip': {\n          'default': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(116, 116, 116)'\n              }\n            }\n          },\n          'info': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(13, 102, 208)'\n              }\n            }\n          },\n          'negative': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(201, 37, 45)'\n              }\n            }\n          },\n          'positive': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(18, 128, 92)'\n              }\n            }\n          }\n        }\n      },\n      'large': {\n        'circleloader': {\n          'large': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(75, 75, 75)',\n                'track-color': 'rgb(225, 225, 225)',\n                'track-fill-color': 'rgb(20, 115, 230)'\n              }\n            },\n            'dimensions': {\n              'height': '80px',\n              'width': '80px',\n              'border-size': '5px'\n            }\n          },\n          'large-over-background': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(255, 255, 255)',\n                'track-color': 'rgba(255,255,255,0.2)',\n                'track-fill-color': 'rgb(255, 255, 255)'\n              }\n            },\n            'dimensions': {\n              'height': '80px',\n              'width': '80px',\n              'border-size': '5px'\n            }\n          },\n          'medium': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(75, 75, 75)',\n                'track-color': 'rgb(225, 225, 225)',\n                'track-fill-color': 'rgb(20, 115, 230)'\n              }\n            },\n            'dimensions': {\n              'height': '40px',\n              'width': '40px',\n              'border-size': '4px'\n            }\n          },\n          'medium-over-background': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(255, 255, 255)',\n                'track-color': 'rgba(255,255,255,0.2)',\n                'track-fill-color': 'rgb(255, 255, 255)'\n              }\n            },\n            'dimensions': {\n              'height': '40px',\n              'width': '40px',\n              'border-size': '4px'\n            }\n          },\n          'small': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(75, 75, 75)',\n                'track-color': 'rgb(225, 225, 225)',\n                'track-fill-color': 'rgb(20, 115, 230)'\n              }\n            },\n            'dimensions': {\n              'height': '20px',\n              'width': '20px',\n              'border-size': '3px'\n            }\n          },\n          'small-over-background': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(255, 255, 255)',\n                'track-color': 'rgba(255,255,255,0.2)',\n                'track-fill-color': 'rgb(255, 255, 255)'\n              }\n            },\n            'dimensions': {\n              'height': '20px',\n              'width': '20px',\n              'border-size': '3px'\n            }\n          }\n        },\n        'coachmark': {\n          'default': {\n            'dimensions': {\n              'indicator-ring-border-size': '2px',\n              'animation-indicator-ring-duration': '3000ms',\n              'animation-indicator-keyframe-50-opacity': '0.6',\n              'indicator-ring-diameter': '20px'\n            },\n            'states': {\n              'default': {\n                'indicator-ring-default-color': 'rgb(38, 128, 235)'\n              }\n            }\n          },\n          'quiet': {\n            'dimensions': {\n              'indicator-ring-border-size': '2px',\n              'animation-indicator-ring-duration': '3000ms',\n              'animation-indicator-keyframe-50-opacity': '0.6',\n              'indicator-ring-diameter': '10px'\n            },\n            'states': {\n              'default': {\n                'indicator-ring-default-color': 'rgb(38, 128, 235)'\n              }\n            }\n          }\n        },\n        'popover': {\n          'default': {\n            'states': {\n              'default': {\n                'background-color': 'rgb(255, 255, 255)',\n                'border-color': 'rgb(202, 202, 202)'\n              }\n            }\n          }\n        },\n        'sidenav': {\n          'default': {\n            'states': {\n              'key-focus': {\n                'item-border-color': 'rgb(38, 128, 235)'\n              }\n            }\n          },\n          'multilevel': {\n            'states': {\n              'key-focus': {\n                'item-border-color': 'rgb(38, 128, 235)'\n              }\n            }\n          }\n        },\n        'textfield': {\n          'default': {\n            'states': {\n              'default': {\n                'background-color': 'rgb(255, 255, 255)',\n                'border-color': 'rgb(225, 225, 225)'\n              },\n              'disabled': {\n                'background-color': 'rgb(234, 234, 234)',\n                'border-color': 'transparent'\n              },\n              'mouse-focus': {\n                'background-color': 'rgb(255, 255, 255)',\n                'border-color': 'rgb(20, 115, 230)'\n              }\n            }\n          },\n          'quiet': {\n            'states': {\n              'default': {\n                'background-color': 'transparent',\n                'border-color': 'rgb(225, 225, 225)'\n              },\n              'disabled': {\n                'background-color': 'transparent',\n                'border-color': 'rgb(225, 225, 225)'\n              },\n              'mouse-focus': {\n                'background-color': 'transparent',\n                'border-color': 'rgb(20, 115, 230)'\n              }\n            }\n          }\n        },\n        'tooltip': {\n          'default': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(116, 116, 116)'\n              }\n            }\n          },\n          'info': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(13, 102, 208)'\n              }\n            }\n          },\n          'negative': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(201, 37, 45)'\n              }\n            }\n          },\n          'positive': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(18, 128, 92)'\n              }\n            }\n          }\n        }\n      }\n    },\n    'dark': {\n      'medium': {\n        'circleloader': {\n          'large': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(227, 227, 227)',\n                'track-color': 'rgb(74, 74, 74)',\n                'track-fill-color': 'rgb(55, 142, 240)'\n              }\n            },\n            'dimensions': {\n              'height': '64px',\n              'width': '64px',\n              'border-size': '4px'\n            }\n          },\n          'large-over-background': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(255, 255, 255)',\n                'track-color': 'rgba(255,255,255,0.2)',\n                'track-fill-color': 'rgb(255, 255, 255)'\n              }\n            },\n            'dimensions': {\n              'height': '64px',\n              'width': '64px',\n              'border-size': '4px'\n            }\n          },\n          'medium': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(227, 227, 227)',\n                'track-color': 'rgb(74, 74, 74)',\n                'track-fill-color': 'rgb(55, 142, 240)'\n              }\n            },\n            'dimensions': {\n              'height': '32px',\n              'width': '32px',\n              'border-size': '3px'\n            }\n          },\n          'medium-over-background': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(255, 255, 255)',\n                'track-color': 'rgba(255,255,255,0.2)',\n                'track-fill-color': 'rgb(255, 255, 255)'\n              }\n            },\n            'dimensions': {\n              'height': '32px',\n              'width': '32px',\n              'border-size': '3px'\n            }\n          },\n          'small': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(227, 227, 227)',\n                'track-color': 'rgb(74, 74, 74)',\n                'track-fill-color': 'rgb(55, 142, 240)'\n              }\n            },\n            'dimensions': {\n              'height': '16px',\n              'width': '16px',\n              'border-size': '2px'\n            }\n          },\n          'small-over-background': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(255, 255, 255)',\n                'track-color': 'rgba(255,255,255,0.2)',\n                'track-fill-color': 'rgb(255, 255, 255)'\n              }\n            },\n            'dimensions': {\n              'height': '16px',\n              'width': '16px',\n              'border-size': '2px'\n            }\n          }\n        },\n        'coachmark': {\n          'default': {\n            'dimensions': {\n              'indicator-ring-border-size': '2px',\n              'animation-indicator-ring-duration': '3000ms',\n              'animation-indicator-keyframe-50-opacity': '0.6',\n              'indicator-ring-diameter': '16px'\n            },\n            'states': {\n              'default': {\n                'indicator-ring-default-color': 'rgb(38, 128, 235)'\n              }\n            }\n          },\n          'quiet': {\n            'dimensions': {\n              'indicator-ring-border-size': '2px',\n              'animation-indicator-ring-duration': '3000ms',\n              'animation-indicator-keyframe-50-opacity': '0.6',\n              'indicator-ring-diameter': '8px'\n            },\n            'states': {\n              'default': {\n                'indicator-ring-default-color': 'rgb(38, 128, 235)'\n              }\n            }\n          }\n        },\n        'popover': {\n          'default': {\n            'states': {\n              'default': {\n                'background-color': 'rgb(37, 37, 37)',\n                'border-color': 'rgb(90, 90, 90)'\n              }\n            }\n          }\n        },\n        'sidenav': {\n          'default': {\n            'states': {\n              'key-focus': {\n                'item-border-color': 'rgb(38, 128, 235)'\n              }\n            }\n          },\n          'multilevel': {\n            'states': {\n              'key-focus': {\n                'item-border-color': 'rgb(38, 128, 235)'\n              }\n            }\n          }\n        },\n        'textfield': {\n          'default': {\n            'states': {\n              'default': {\n                'background-color': 'rgb(37, 37, 37)',\n                'border-color': 'rgb(74, 74, 74)'\n              },\n              'disabled': {\n                'background-color': 'rgb(62, 62, 62)',\n                'border-color': 'transparent'\n              },\n              'mouse-focus': {\n                'background-color': 'rgb(37, 37, 37)',\n                'border-color': 'rgb(55, 142, 240)'\n              }\n            }\n          },\n          'quiet': {\n            'states': {\n              'default': {\n                'background-color': 'transparent',\n                'border-color': 'rgb(74, 74, 74)'\n              },\n              'disabled': {\n                'background-color': 'transparent',\n                'border-color': 'rgb(74, 74, 74)'\n              },\n              'mouse-focus': {\n                'background-color': 'transparent',\n                'border-color': 'rgb(55, 142, 240)'\n              }\n            }\n          }\n        },\n        'tooltip': {\n          'default': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(116, 116, 116)'\n              }\n            }\n          },\n          'info': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(13, 102, 208)'\n              }\n            }\n          },\n          'negative': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(201, 37, 45)'\n              }\n            }\n          },\n          'positive': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(18, 128, 92)'\n              }\n            }\n          }\n        }\n      },\n      'large': {\n        'circleloader': {\n          'large': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(227, 227, 227)',\n                'track-color': 'rgb(74, 74, 74)',\n                'track-fill-color': 'rgb(55, 142, 240)'\n              }\n            },\n            'dimensions': {\n              'height': '80px',\n              'width': '80px',\n              'border-size': '5px'\n            }\n          },\n          'large-over-background': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(255, 255, 255)',\n                'track-color': 'rgba(255,255,255,0.2)',\n                'track-fill-color': 'rgb(255, 255, 255)'\n              }\n            },\n            'dimensions': {\n              'height': '80px',\n              'width': '80px',\n              'border-size': '5px'\n            }\n          },\n          'medium': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(227, 227, 227)',\n                'track-color': 'rgb(74, 74, 74)',\n                'track-fill-color': 'rgb(55, 142, 240)'\n              }\n            },\n            'dimensions': {\n              'height': '40px',\n              'width': '40px',\n              'border-size': '4px'\n            }\n          },\n          'medium-over-background': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(255, 255, 255)',\n                'track-color': 'rgba(255,255,255,0.2)',\n                'track-fill-color': 'rgb(255, 255, 255)'\n              }\n            },\n            'dimensions': {\n              'height': '40px',\n              'width': '40px',\n              'border-size': '4px'\n            }\n          },\n          'small': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(227, 227, 227)',\n                'track-color': 'rgb(74, 74, 74)',\n                'track-fill-color': 'rgb(55, 142, 240)'\n              }\n            },\n            'dimensions': {\n              'height': '20px',\n              'width': '20px',\n              'border-size': '3px'\n            }\n          },\n          'small-over-background': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(255, 255, 255)',\n                'track-color': 'rgba(255,255,255,0.2)',\n                'track-fill-color': 'rgb(255, 255, 255)'\n              }\n            },\n            'dimensions': {\n              'height': '20px',\n              'width': '20px',\n              'border-size': '3px'\n            }\n          }\n        },\n        'coachmark': {\n          'default': {\n            'dimensions': {\n              'indicator-ring-border-size': '2px',\n              'animation-indicator-ring-duration': '3000ms',\n              'animation-indicator-keyframe-50-opacity': '0.6',\n              'indicator-ring-diameter': '20px'\n            },\n            'states': {\n              'default': {\n                'indicator-ring-default-color': 'rgb(38, 128, 235)'\n              }\n            }\n          },\n          'quiet': {\n            'dimensions': {\n              'indicator-ring-border-size': '2px',\n              'animation-indicator-ring-duration': '3000ms',\n              'animation-indicator-keyframe-50-opacity': '0.6',\n              'indicator-ring-diameter': '10px'\n            },\n            'states': {\n              'default': {\n                'indicator-ring-default-color': 'rgb(38, 128, 235)'\n              }\n            }\n          }\n        },\n        'popover': {\n          'default': {\n            'states': {\n              'default': {\n                'background-color': 'rgb(37, 37, 37)',\n                'border-color': 'rgb(90, 90, 90)'\n              }\n            }\n          }\n        },\n        'sidenav': {\n          'default': {\n            'states': {\n              'key-focus': {\n                'item-border-color': 'rgb(38, 128, 235)'\n              }\n            }\n          },\n          'multilevel': {\n            'states': {\n              'key-focus': {\n                'item-border-color': 'rgb(38, 128, 235)'\n              }\n            }\n          }\n        },\n        'textfield': {\n          'default': {\n            'states': {\n              'default': {\n                'background-color': 'rgb(37, 37, 37)',\n                'border-color': 'rgb(74, 74, 74)'\n              },\n              'disabled': {\n                'background-color': 'rgb(62, 62, 62)',\n                'border-color': 'transparent'\n              },\n              'mouse-focus': {\n                'background-color': 'rgb(37, 37, 37)',\n                'border-color': 'rgb(55, 142, 240)'\n              }\n            }\n          },\n          'quiet': {\n            'states': {\n              'default': {\n                'background-color': 'transparent',\n                'border-color': 'rgb(74, 74, 74)'\n              },\n              'disabled': {\n                'background-color': 'transparent',\n                'border-color': 'rgb(74, 74, 74)'\n              },\n              'mouse-focus': {\n                'background-color': 'transparent',\n                'border-color': 'rgb(55, 142, 240)'\n              }\n            }\n          }\n        },\n        'tooltip': {\n          'default': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(116, 116, 116)'\n              }\n            }\n          },\n          'info': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(13, 102, 208)'\n              }\n            }\n          },\n          'negative': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(201, 37, 45)'\n              }\n            }\n          },\n          'positive': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(18, 128, 92)'\n              }\n            }\n          }\n        }\n      }\n    },\n    'darkest': {\n      'medium': {\n        'circleloader': {\n          'large': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(200, 200, 200)',\n                'track-color': 'rgb(57, 57, 57)',\n                'track-fill-color': 'rgb(38, 128, 235)'\n              }\n            },\n            'dimensions': {\n              'height': '64px',\n              'width': '64px',\n              'border-size': '4px'\n            }\n          },\n          'large-over-background': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(255, 255, 255)',\n                'track-color': 'rgba(255,255,255,0.2)',\n                'track-fill-color': 'rgb(255, 255, 255)'\n              }\n            },\n            'dimensions': {\n              'height': '64px',\n              'width': '64px',\n              'border-size': '4px'\n            }\n          },\n          'medium': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(200, 200, 200)',\n                'track-color': 'rgb(57, 57, 57)',\n                'track-fill-color': 'rgb(38, 128, 235)'\n              }\n            },\n            'dimensions': {\n              'height': '32px',\n              'width': '32px',\n              'border-size': '3px'\n            }\n          },\n          'medium-over-background': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(255, 255, 255)',\n                'track-color': 'rgba(255,255,255,0.2)',\n                'track-fill-color': 'rgb(255, 255, 255)'\n              }\n            },\n            'dimensions': {\n              'height': '32px',\n              'width': '32px',\n              'border-size': '3px'\n            }\n          },\n          'small': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(200, 200, 200)',\n                'track-color': 'rgb(57, 57, 57)',\n                'track-fill-color': 'rgb(38, 128, 235)'\n              }\n            },\n            'dimensions': {\n              'height': '16px',\n              'width': '16px',\n              'border-size': '2px'\n            }\n          },\n          'small-over-background': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(255, 255, 255)',\n                'track-color': 'rgba(255,255,255,0.2)',\n                'track-fill-color': 'rgb(255, 255, 255)'\n              }\n            },\n            'dimensions': {\n              'height': '16px',\n              'width': '16px',\n              'border-size': '2px'\n            }\n          }\n        },\n        'coachmark': {\n          'default': {\n            'dimensions': {\n              'indicator-ring-border-size': '2px',\n              'animation-indicator-ring-duration': '3000ms',\n              'animation-indicator-keyframe-50-opacity': '0.6',\n              'indicator-ring-diameter': '16px'\n            },\n            'states': {\n              'default': {\n                'indicator-ring-default-color': 'rgb(20, 115, 230)'\n              }\n            }\n          },\n          'quiet': {\n            'dimensions': {\n              'indicator-ring-border-size': '2px',\n              'animation-indicator-ring-duration': '3000ms',\n              'animation-indicator-keyframe-50-opacity': '0.6',\n              'indicator-ring-diameter': '8px'\n            },\n            'states': {\n              'default': {\n                'indicator-ring-default-color': 'rgb(20, 115, 230)'\n              }\n            }\n          }\n        },\n        'popover': {\n          'default': {\n            'states': {\n              'default': {\n                'background-color': 'rgb(8, 8, 8)',\n                'border-color': 'rgb(73, 73, 73)'\n              }\n            }\n          }\n        },\n        'sidenav': {\n          'default': {\n            'states': {\n              'key-focus': {\n                'item-border-color': 'rgb(20, 115, 230)'\n              }\n            }\n          },\n          'multilevel': {\n            'states': {\n              'key-focus': {\n                'item-border-color': 'rgb(20, 115, 230)'\n              }\n            }\n          }\n        },\n        'textfield': {\n          'default': {\n            'states': {\n              'default': {\n                'background-color': 'rgb(8, 8, 8)',\n                'border-color': 'rgb(57, 57, 57)'\n              },\n              'disabled': {\n                'background-color': 'rgb(44, 44, 44)',\n                'border-color': 'transparent'\n              },\n              'mouse-focus': {\n                'background-color': 'rgb(8, 8, 8)',\n                'border-color': 'rgb(38, 128, 235)'\n              }\n            }\n          },\n          'quiet': {\n            'states': {\n              'default': {\n                'background-color': 'transparent',\n                'border-color': 'rgb(57, 57, 57)'\n              },\n              'disabled': {\n                'background-color': 'transparent',\n                'border-color': 'rgb(57, 57, 57)'\n              },\n              'mouse-focus': {\n                'background-color': 'transparent',\n                'border-color': 'rgb(38, 128, 235)'\n              }\n            }\n          }\n        },\n        'tooltip': {\n          'default': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(116, 116, 116)'\n              }\n            }\n          },\n          'info': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(13, 102, 208)'\n              }\n            }\n          },\n          'negative': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(201, 37, 45)'\n              }\n            }\n          },\n          'positive': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(18, 128, 92)'\n              }\n            }\n          }\n        }\n      },\n      'large': {\n        'circleloader': {\n          'large': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(200, 200, 200)',\n                'track-color': 'rgb(57, 57, 57)',\n                'track-fill-color': 'rgb(38, 128, 235)'\n              }\n            },\n            'dimensions': {\n              'height': '80px',\n              'width': '80px',\n              'border-size': '5px'\n            }\n          },\n          'large-over-background': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(255, 255, 255)',\n                'track-color': 'rgba(255,255,255,0.2)',\n                'track-fill-color': 'rgb(255, 255, 255)'\n              }\n            },\n            'dimensions': {\n              'height': '80px',\n              'width': '80px',\n              'border-size': '5px'\n            }\n          },\n          'medium': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(200, 200, 200)',\n                'track-color': 'rgb(57, 57, 57)',\n                'track-fill-color': 'rgb(38, 128, 235)'\n              }\n            },\n            'dimensions': {\n              'height': '40px',\n              'width': '40px',\n              'border-size': '4px'\n            }\n          },\n          'medium-over-background': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(255, 255, 255)',\n                'track-color': 'rgba(255,255,255,0.2)',\n                'track-fill-color': 'rgb(255, 255, 255)'\n              }\n            },\n            'dimensions': {\n              'height': '40px',\n              'width': '40px',\n              'border-size': '4px'\n            }\n          },\n          'small': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(200, 200, 200)',\n                'track-color': 'rgb(57, 57, 57)',\n                'track-fill-color': 'rgb(38, 128, 235)'\n              }\n            },\n            'dimensions': {\n              'height': '20px',\n              'width': '20px',\n              'border-size': '3px'\n            }\n          },\n          'small-over-background': {\n            'states': {\n              'default': {\n                'text-color': 'rgb(255, 255, 255)',\n                'track-color': 'rgba(255,255,255,0.2)',\n                'track-fill-color': 'rgb(255, 255, 255)'\n              }\n            },\n            'dimensions': {\n              'height': '20px',\n              'width': '20px',\n              'border-size': '3px'\n            }\n          }\n        },\n        'coachmark': {\n          'default': {\n            'dimensions': {\n              'indicator-ring-border-size': '2px',\n              'animation-indicator-ring-duration': '3000ms',\n              'animation-indicator-keyframe-50-opacity': '0.6',\n              'indicator-ring-diameter': '20px'\n            },\n            'states': {\n              'default': {\n                'indicator-ring-default-color': 'rgb(20, 115, 230)'\n              }\n            }\n          },\n          'quiet': {\n            'dimensions': {\n              'indicator-ring-border-size': '2px',\n              'animation-indicator-ring-duration': '3000ms',\n              'animation-indicator-keyframe-50-opacity': '0.6',\n              'indicator-ring-diameter': '10px'\n            },\n            'states': {\n              'default': {\n                'indicator-ring-default-color': 'rgb(20, 115, 230)'\n              }\n            }\n          }\n        },\n        'popover': {\n          'default': {\n            'states': {\n              'default': {\n                'background-color': 'rgb(8, 8, 8)',\n                'border-color': 'rgb(73, 73, 73)'\n              }\n            }\n          }\n        },\n        'sidenav': {\n          'default': {\n            'states': {\n              'key-focus': {\n                'item-border-color': 'rgb(20, 115, 230)'\n              }\n            }\n          },\n          'multilevel': {\n            'states': {\n              'key-focus': {\n                'item-border-color': 'rgb(20, 115, 230)'\n              }\n            }\n          }\n        },\n        'textfield': {\n          'default': {\n            'states': {\n              'default': {\n                'background-color': 'rgb(8, 8, 8)',\n                'border-color': 'rgb(57, 57, 57)'\n              },\n              'disabled': {\n                'background-color': 'rgb(44, 44, 44)',\n                'border-color': 'transparent'\n              },\n              'mouse-focus': {\n                'background-color': 'rgb(8, 8, 8)',\n                'border-color': 'rgb(38, 128, 235)'\n              }\n            }\n          },\n          'quiet': {\n            'states': {\n              'default': {\n                'background-color': 'transparent',\n                'border-color': 'rgb(57, 57, 57)'\n              },\n              'disabled': {\n                'background-color': 'transparent',\n                'border-color': 'rgb(57, 57, 57)'\n              },\n              'mouse-focus': {\n                'background-color': 'transparent',\n                'border-color': 'rgb(38, 128, 235)'\n              }\n            }\n          }\n        },\n        'tooltip': {\n          'default': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(116, 116, 116)'\n              }\n            }\n          },\n          'info': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(13, 102, 208)'\n              }\n            }\n          },\n          'negative': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(201, 37, 45)'\n              }\n            }\n          },\n          'positive': {\n            'states': {\n              'default': {\n                'tip-color': 'rgb(18, 128, 92)'\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n};\nexports.default = _default;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.interpretKeyboardEvent = interpretKeyboardEvent;\nexports.chain = chain;\nexports.focusAfterMouseEvent = focusAfterMouseEvent;\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nfunction interpretKeyboardEvent(event, orientation = 'vertical') {\n  switch (event.key) {\n    case 'Enter':\n    case ' ':\n      if (this.onSelectFocused) {\n        this.onSelectFocused(event);\n      }\n\n      break;\n\n    case 'Tab':\n      if (this.onTab) {\n        this.onTab(event);\n      }\n\n      break;\n\n    case 'PageUp':\n      if (this.onPageUp) {\n        this.onPageUp(event);\n      } else if (this.onFocusFirst) {\n        this.onFocusFirst(event);\n      }\n\n      break;\n\n    case 'PageDown':\n      if (this.onPageDown) {\n        this.onPageDown(event);\n      } else if (this.onFocusLast) {\n        this.onFocusLast(event);\n      }\n\n      break;\n\n    case 'Home':\n      if (this.onFocusFirst) {\n        this.onFocusFirst(event);\n      }\n\n      break;\n\n    case 'End':\n      if (this.onFocusLast) {\n        this.onFocusLast(event);\n      }\n\n      break;\n\n    case 'ArrowUp':\n    case 'Up':\n      if (event.altKey && this.onAltArrowUp) {\n        this.onAltArrowUp(event);\n      } else if (this.onFocusPrevious) {\n        switch (orientation) {\n          case 'vertical':\n            this.onFocusPrevious(event);\n            break;\n\n          case 'horizontal':\n            break;\n\n          default:\n            this.props.nextFocusOffset ? this.onFocusPrevious(event, this.props.nextFocusOffset()) : this.onFocusPrevious(event);\n            break;\n        }\n      }\n\n      break;\n\n    case 'ArrowDown':\n    case 'Down':\n      if (event.altKey && this.onAltArrowDown) {\n        this.onAltArrowDown(event);\n      } else if (this.onFocusNext) {\n        switch (orientation) {\n          case 'vertical':\n            this.onFocusNext(event);\n            break;\n\n          case 'horizontal':\n            break;\n\n          default:\n            this.props.nextFocusOffset ? this.onFocusNext(event, this.props.nextFocusOffset()) : this.onFocusNext(event);\n            break;\n        }\n      }\n\n      break;\n\n    case 'ArrowLeft':\n    case 'Left':\n      if (orientation !== 'vertical' && this.onFocusPrevious) {\n        this.onFocusPrevious(event);\n      }\n\n      break;\n\n    case 'ArrowRight':\n    case 'Right':\n      if (orientation !== 'vertical' && this.onFocusNext) {\n        this.onFocusNext(event);\n      }\n\n      break;\n\n    case 'Escape':\n    case 'Esc':\n      if (this.onEscape) {\n        this.onEscape(event);\n      }\n\n      break;\n\n    default: // do nothing\n\n  }\n}\n\nfunction chain(...callbacks) {\n  return (...args) => {\n    for (let callback of callbacks) {\n      if (typeof callback === 'function') {\n        callback(...args);\n      }\n    }\n  };\n}\n\nlet mouseDownPrevented = false;\n\nfunction focusAfterMouseEvent(handler, event) {\n  // If server side rendering, just call handler method.\n  if (!document) {\n    handler && handler.call(this, event);\n    return;\n  } // execute the handler\n\n\n  if (handler) {\n    handler.call(this, event);\n\n    if (event.isDefaultPrevented()) {\n      mouseDownPrevented = event.type === 'mousedown';\n      return;\n    }\n  } // make sure that the element has focus by calling this.focus();\n\n\n  if (!mouseDownPrevented && typeof this.focus === 'function') {\n    this.focus();\n  }\n\n  if (event.type === 'mouseup') {\n    mouseDownPrevented = false;\n  }\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = filterReactDomProps;\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nconst DOMProps = {\n  'abbr': 1,\n  'accept': 1,\n  'acceptCharset': 1,\n  'accessKey': 1,\n  'action': 1,\n  'allowFullScreen': 1,\n  'allowTransparency': 1,\n  'alt': 1,\n  'async': 1,\n  'autoComplete': 1,\n  'autoFocus': 1,\n  'autoPlay': 1,\n  'boundariesElement': 1,\n  'cellPadding': 1,\n  'cellSpacing': 1,\n  'challenge': 1,\n  'charset': 1,\n  'checked': 1,\n  'cite': 1,\n  'class': 1,\n  'className': 1,\n  'cols': 1,\n  'colSpan': 1,\n  'command': 1,\n  'content': 1,\n  'contentEditable': 1,\n  'contextMenu': 1,\n  'controls': 1,\n  'coords': 1,\n  'crossOrigin': 1,\n  'data': 1,\n  'dateTime': 1,\n  'default': 1,\n  'defaultPreventedKeys': 1,\n  'defaultpreventedkeys': 1,\n  'defaultPreventedEvents': 1,\n  'defaultpreventedevents': 1,\n  'defer': 1,\n  'dir': 1,\n  'disabled': 1,\n  'download': 1,\n  'draggable': 1,\n  'dropzone': 1,\n  'encType': 1,\n  'for': 1,\n  'form': 1,\n  'formAction': 1,\n  'formEncType': 1,\n  'formMethod': 1,\n  'formNoValidate': 1,\n  'formTarget': 1,\n  'frameBorder': 1,\n  'headers': 1,\n  'height': 1,\n  'hidden': 1,\n  'high': 1,\n  'href': 1,\n  'hrefLang': 1,\n  'htmlFor': 1,\n  'httpEquiv': 1,\n  'icon': 1,\n  'id': 1,\n  'inputMode': 1,\n  'isMap': 1,\n  'itemId': 1,\n  'itemProp': 1,\n  'itemRef': 1,\n  'itemScope': 1,\n  'itemType': 1,\n  'kind': 1,\n  'label': 1,\n  'lang': 1,\n  'list': 1,\n  'loop': 1,\n  'manifest': 1,\n  'max': 1,\n  'maxLength': 1,\n  'media': 1,\n  'mediaGroup': 1,\n  'method': 1,\n  'min': 1,\n  'minLength': 1,\n  'multiple': 1,\n  'muted': 1,\n  'name': 1,\n  'noValidate': 1,\n  'open': 1,\n  'optimum': 1,\n  'pattern': 1,\n  'ping': 1,\n  'placeholder': 1,\n  'poster': 1,\n  'preload': 1,\n  'radioGroup': 1,\n  'readOnly': 1,\n  'rel': 1,\n  'required': 1,\n  'role': 1,\n  'rows': 1,\n  'rowSpan': 1,\n  'sandbox': 1,\n  'scope': 1,\n  'scoped': 1,\n  'scrolling': 1,\n  'seamless': 1,\n  'selected': 1,\n  'shape': 1,\n  'size': 1,\n  'sizes': 1,\n  'sortable': 1,\n  'span': 1,\n  'spellCheck': 1,\n  'src': 1,\n  'srcDoc': 1,\n  'srcSet': 1,\n  'start': 1,\n  'step': 1,\n  'style': 1,\n  'tabIndex': 1,\n  'target': 1,\n  'title': 1,\n  'translate': 1,\n  'type': 1,\n  'typeMustMatch': 1,\n  'useMap': 1,\n  'value': 1,\n  'width': 1,\n  'wmode': 1,\n  'wrap': 1,\n  'onCopy': 1,\n  'onCut': 1,\n  'onPaste': 1,\n  'onLoad': 1,\n  'onError': 1,\n  'onWheel': 1,\n  'onScroll': 1,\n  'onCompositionEnd': 1,\n  'onCompositionStart': 1,\n  'onCompositionUpdate': 1,\n  'onKeyDown': 1,\n  'onKeyPress': 1,\n  'onKeyUp': 1,\n  'onFocus': 1,\n  'onBlur': 1,\n  'onChange': 1,\n  'onInput': 1,\n  'onSubmit': 1,\n  'onClick': 1,\n  'onContextMenu': 1,\n  'onDoubleClick': 1,\n  'onDrag': 1,\n  'onDragEnd': 1,\n  'onDragEnter': 1,\n  'onDragExit': 1,\n  'onDragLeave': 1,\n  'onDragOver': 1,\n  'onDragStart': 1,\n  'onDrop': 1,\n  'onMouseDown': 1,\n  'onMouseEnter': 1,\n  'onMouseLeave': 1,\n  'onMouseMove': 1,\n  'onMouseOut': 1,\n  'onMouseOver': 1,\n  'onMouseUp': 1,\n  'onSelect': 1,\n  'onTouchCancel': 1,\n  'onTouchEnd': 1,\n  'onTouchMove': 1,\n  'onTouchStart': 1,\n  'onAnimationStart': 1,\n  'onAnimationEnd': 1,\n  'onAnimationIteration': 1,\n  'onTransitionEnd': 1\n};\n/**\n * Checking for aria-* and data-* props\n */\n\nconst propRe = /^((data|aria)-.*)$/;\n\nfunction filterReactDomProps(props) {\n  const filterProps = {};\n\n  for (const prop in props) {\n    if (props.hasOwnProperty(prop) && (DOMProps[prop] || propRe.test(prop))) {\n      filterProps[prop] = props[prop];\n    }\n  }\n\n  return filterProps;\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = focusRing;\nexports.FOCUS_RING_CLASSNAME = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nconst FOCUS_RING_CLASSNAME = 'focus-ring';\n/**\n * This is a decorator that ensures a focus-ring className set by the focus-ring-polyfill\n * is retained when a focused component is rendered following a state change.\n*/\n\nexports.FOCUS_RING_CLASSNAME = FOCUS_RING_CLASSNAME;\n\nfunction focusRing(WrappedComponent) {\n  const proto = WrappedComponent.prototype;\n  const UNSAFE_componentWillUpdate = proto.UNSAFE_componentWillUpdate;\n  const componentDidUpdate = proto.componentDidUpdate;\n  let elementWithFocusRing = null;\n\n  proto.UNSAFE_componentWillUpdate = function (props, state) {\n    // call original method\n    if (UNSAFE_componentWillUpdate) {\n      UNSAFE_componentWillUpdate.apply(this, arguments);\n    }\n\n    if (elementWithFocusRing == null || elementWithFocusRing !== document.activeElement) {\n      try {\n        const node = _reactDom.default.findDOMNode(this);\n\n        elementWithFocusRing = node.parentNode.querySelector('.' + FOCUS_RING_CLASSNAME);\n      } catch (error) {// do nothing if component is not mounted\n      }\n    }\n  };\n\n  proto.componentDidUpdate = function (props, state) {\n    // call original method\n    if (componentDidUpdate) {\n      componentDidUpdate.apply(this, arguments);\n    }\n\n    try {\n      const node = _reactDom.default.findDOMNode(this);\n\n      if (elementWithFocusRing && (document.activeElement === elementWithFocusRing || node.contains(document.activeElement)) && !elementWithFocusRing.classList.contains(FOCUS_RING_CLASSNAME)) {\n        document.activeElement.classList.add(FOCUS_RING_CLASSNAME);\n        elementWithFocusRing = null;\n      }\n    } catch (error) {// do nothing if component is not mounted\n    }\n  };\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = hostStyleConfig;\n\nfunction hostStyleConfig() {\n  const uxp = window.require && window.require('uxp');\n\n  const product = uxp && uxp.host ? uxp.host.name : 'Browser';\n\n  switch (product) {\n    case 'Illustrator':\n      addIllustratorStyles();\n\n      if (window.navigator.platform === 'darwin') {\n        addIllustratorMacOverride();\n      }\n\n      break;\n\n    case 'Photoshop':\n      addPhotoshopStyles();\n      break;\n\n    default:\n      return null;\n  }\n}\n\nfunction addIllustratorMacOverride() {\n  let css = `.react-spectrum-provider:lang(zh-Hant) .spectrum-Menu-item {\n        font-size: 13px;\n    }\n    \n    .react-spectrum-provider:lang(zh-Hant) .spectrum-Textfield {\n        font-size: 13px;\n    } \n    \n    .react-spectrum-provider:lang(zh-Hans) .spectrum-Menu-item {\n        font-size: 13px;\n    }\n    \n    .react-spectrum-provider:lang(zh-Hans) .spectrum-Textfield {\n        font-size: 13px;\n    }\n    `;\n  let head = document.head || document.getElementsByTagName('head')[0];\n  let style = document.createElement('style');\n  head.appendChild(style);\n  style.type = 'text/css';\n  style.appendChild(document.createTextNode(css));\n}\n\nfunction addIllustratorStyles() {\n  let css = `:root {\n        --host-background-color-darkest: #323232;\n        --host-background-color-dark: #535353;\n        --host-background-color-light: #B8B8B8;\n        --host-background-color-lightest: #F0F0F0;\n    }\n    \n    .react-spectrum-provider {\n        font-family: Lucida Grande, Tahoma, sans-serif !important;\n    }\n    \n    .react-spectrum-provider:lang(ja) {\n        font-family: HiraKakuProN-W3, Meiryo, sans-serif !important;\n    }\n    \n    .react-spectrum-provider:lang(zh-Hant) {\n        font-family: LiHeiPro, Tahoma, sans-serif !important;\n    }\n    \n    .react-spectrum-provider:lang(zh-Hans) {\n        font-family: STXihei, SimSun, sans-serif !important;\n    }\n    \n    .react-spectrum-provider:lang(ko) {\n        font-family: AppleGothic, Malgun Gothic, sans-serif !important;\n    }\n    \n    .react-spectrum-provider.spectrum--darkest {\n        background-color: #323232;\n    }\n    \n    .react-spectrum-provider.spectrum--dark {\n        background-color: #535353;\n    }\n    \n    .react-spectrum-provider.spectrum--light {\n        background-color: #B8B8B8;\n    }\n    \n    .react-spectrum-provider.spectrum--lightest {\n        background-color: #F0F0F0;\n    }\n    \n    .react-spectrum-provider .spectrum-Menu-item {\n        font-size: 10px;\n    }\n    \n    .react-spectrum-provider .spectrum-Textfield {\n        font-size: 10px;\n    } \n    \n    .react-spectrum-provider:lang(ja) .spectrum-Menu-item {\n        font-size: 12px;\n    }\n    \n    .react-spectrum-provider:lang(ja) .spectrum-Textfield {\n        font-size: 12px;\n    } \n    \n    .react-spectrum-provider:lang(zh-Hant) .spectrum-Menu-item {\n        font-size: 12px;\n    }\n    \n    .react-spectrum-provider:lang(zh-Hant) .spectrum-Textfield {\n        font-size: 12px;\n    } \n    \n    .react-spectrum-provider:lang(zh-Hans) .spectrum-Menu-item {\n        font-size: 12px;\n    }\n    \n    .react-spectrum-provider:lang(zh-Hans) .spectrum-Textfield {\n        font-size: 12px;\n    }\n    \n    .react-spectrum-provider.spectrum--lightest .spectrum-Menu, .react-spectrum-provider.spectrum--lightest .spectrum-Menu-item, .react-spectrum-provider.spectrum--lightest .spectrum-Popover {\n        background-color: rgb(240, 240, 240);\n    }\n    \n    .react-spectrum-provider.spectrum--light .spectrum-Menu, .react-spectrum-provider.spectrum--light .spectrum-Menu-item, .react-spectrum-provider.spectrum--light .spectrum-Popover {\n        background-color: rgb(184, 184, 184);\n    }\n    \n    .react-spectrum-provider.spectrum--dark .spectrum-Menu, .react-spectrum-provider.spectrum--dark .spectrum-Menu-item, .react-spectrum-provider.spectrum--dark .spectrum-Popover {\n        background-color: rgb(83, 83, 83);\n    }\n    \n    .react-spectrum-provider.spectrum--darkest .spectrum-Menu, .react-spectrum-provider.spectrum--darkest .spectrum-Menu-item, .react-spectrum-provider.spectrum--darkest .spectrum-Popover {\n        background-color: rgb(50, 50, 50);\n    }\n    \n    .react-spectrum-provider.spectrum--lightest .spectrum-Menu-item:hover {\n        background-color: rgb(220, 220, 220);\n        color: rgb(72, 72, 72);\n    }\n    \n    .react-spectrum-provider.spectrum--light .spectrum-Menu-item:hover {\n        background-color: rgb(167, 167, 167);\n        color: rgb(34, 34, 34);\n    }\n    \n    .react-spectrum-provider.spectrum--dark .spectrum-Menu-item:hover {\n        background-color: rgb(95, 95, 95);\n        color: rgb(255, 255, 255);\n    }\n    \n    .react-spectrum-provider.spectrum--darkest .spectrum-Menu-item:hover {\n        background-color: rgb(62, 62, 62);\n        color: rgb(205, 205, 205);\n    }\n    \n    .react-spectrum-provider.spectrum--lightest .spectrum-Textfield, .react-spectrum-provider.spectrum--lightest .spectrum-Textfield .inputText {\n        background-color: rgb(255, 255, 255) !important;\n        color: rgb(72, 72, 72);\n    }\n    \n    .react-spectrum-provider.spectrum--light .spectrum-Textfield, .react-spectrum-provider.spectrum--light .spectrum-Textfield .inputText {\n        background-color: rgb(226, 226, 226) !important;\n        color: rgb(34, 34, 34);\n    }\n    \n    .react-spectrum-provider.spectrum--dark .spectrum-Textfield, .react-spectrum-provider.spectrum--dark .spectrum-Textfield .inputText {\n        background-color: rgb(255, 255, 255) !important;\n        color: rgb(75, 75, 75);\n    }\n    \n    .react-spectrum-provider.spectrum--darkest .spectrum-Textfield, .react-spectrum-provider.spectrum--darkest .spectrum-Textfield .inputText {\n        background-color: rgb(252, 252, 252) !important;\n        color: rgb(42, 42, 42);\n    }\n    `;\n  let head = document.head || document.getElementsByTagName('head')[0];\n  let style = document.createElement('style');\n  head.appendChild(style);\n  style.type = 'text/css';\n  style.appendChild(document.createTextNode(css));\n}\n\nfunction addPhotoshopStyles() {\n  let css = `\n    \n    .react-spectrum-provider {\n        background-color: var(--uxp-host-background-color);\n    }\n    \n    .react-spectrum-provider .spectrum-Menu-item, .react-spectrum-provider .spectrum-Textfield {\n        font-size: 10px;\n        color: var(--uxp-host-text-color);\n    }\n    \n    .react-spectrum-provider .spectrum-Menu, .react-spectrum-provider .spectrum-Menu-item, .react-spectrum-provider .spectrum-Popover {\n        background-color: var(--uxp-host-background-color);\n    }\n    \n    .react-spectrum-provider .spectrum-Menu-item:hover {\n        background-color: var(--uxp-host-link-text-color);\n        color: #FFFFFF;\n    }\n\n    .react-spectrum-provider .spectrum-Textfield, .react-spectrum-provider .spectrum-Textfield .inputText {\n        background-color: var(--uxp-host-background-color) !important;\n    }\n    \n    `;\n  let head = document.head || document.getElementsByTagName('head')[0];\n  let style = document.createElement('style');\n  head.appendChild(style);\n  style.type = 'text/css';\n  style.appendChild(document.createTextNode(css));\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.cloneIcon = cloneIcon;\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nfunction cloneIcon(icon, opts = {}) {\n  if (!icon) {\n    return null;\n  }\n\n  if (typeof icon === 'string') {\n    throw new Error('String icon names are deprecated. Pass icons by importing them from react-spectrum/Icon/IconName and render as <IconName />.');\n  }\n\n  const {\n    className,\n    size,\n    'aria-label': ariaLabel,\n    'aria-hidden': ariaHidden,\n    alt = ariaLabel || icon.props['aria-label'] || icon.props.alt\n  } = opts;\n  return _react.default.cloneElement(icon, {\n    className: (0, _classnames.default)(className, icon.props.className),\n    size: icon.props.size || size,\n    'aria-label': ariaLabel || alt,\n    alt,\n    'aria-hidden': ariaHidden || (alt ? icon.props['aria-hidden'] : true)\n  });\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.setLocale = setLocale;\nexports.getLocale = getLocale;\nexports.messageFormatter = messageFormatter;\nexports.defaultLocale = void 0;\n\nvar _intlMessageformat = _interopRequireDefault(require(\"intl-messageformat\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nconst defaultLocale = typeof navigator !== 'undefined' && (navigator.language || navigator.userLanguage) || 'en-US';\nexports.defaultLocale = defaultLocale;\nlet currentLocale = defaultLocale;\n\nfunction setLocale(locale) {\n  currentLocale = locale;\n}\n\nfunction getLocale() {\n  return currentLocale;\n}\n\nfunction messageFormatter(strings) {\n  let cache = {};\n  return function formatMessage(key, variables, formats) {\n    let message = cache[key + '.' + currentLocale];\n\n    if (!message) {\n      let localeStrings = strings[currentLocale] || strings['en-US'];\n      let msg = localeStrings[key];\n\n      if (!msg) {\n        throw new Error(`Could not find intl message ${key} in ${currentLocale} locale`);\n      }\n\n      message = new _intlMessageformat.default(msg, currentLocale, formats);\n      cache[key] = message;\n    }\n\n    return message.format(variables);\n  };\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = needsNative;\n\nfunction needsNative() {\n  const uxp = window.require && window.require('uxp');\n\n  return uxp && uxp.host ? uxp.host.isDrover || uxp.host.name === 'Photoshop' || uxp.host.name === 'Illustrator' : false;\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nvar _default = (node, parentNode, alignToStart) => {\n  if (parentNode && parentNode.contains(node)) {\n    const {\n      clientHeight,\n      clientWidth,\n      scrollTop,\n      scrollLeft\n    } = parentNode;\n    const {\n      offsetHeight,\n      offsetWidth,\n      offsetTop,\n      offsetLeft\n    } = node;\n    const parentPosition = window.getComputedStyle(parentNode).position;\n    let parentOffsetTop = parentNode.offsetTop;\n    let parentOffsetLeft = parentNode.offsetLeft;\n\n    if (parentPosition !== 'static') {\n      parentOffsetTop = parentOffsetLeft = 0;\n    }\n\n    if (offsetTop < scrollTop) {\n      parentNode.scrollTop = offsetTop;\n    } else {\n      const offsetBottom = offsetTop + offsetHeight;\n      const scrollBottom = scrollTop + clientHeight;\n\n      if (offsetBottom > scrollBottom) {\n        parentNode.scrollTop = alignToStart ? offsetTop - parentOffsetTop : offsetBottom - clientHeight - parentOffsetTop;\n      }\n    }\n\n    if (offsetLeft < scrollLeft) {\n      parentNode.scrollLeft = offsetLeft;\n    } else {\n      const offsetRight = offsetLeft + offsetWidth;\n      const scrollRight = scrollLeft + clientWidth;\n\n      if (offsetRight > scrollRight) {\n        parentNode.scrollLeft = alignToStart ? offsetLeft - parentOffsetLeft : offsetRight - clientWidth - parentOffsetLeft;\n      }\n    }\n  }\n};\n\nexports.default = _default;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = setOverlayOnProvider;\n\nvar _closest = _interopRequireDefault(require(\"dom-helpers/query/closest\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction setOverlayOnProvider(overlayRef, overlayVisibility = false, overlayCallback = undefined, boundingRect = null) {\n  if (!overlayRef) {\n    return;\n  }\n\n  const closestContainer = (0, _closest.default)(_reactDom.default.findDOMNode(overlayRef), '.react-spectrum-provider');\n  const provider = closestContainer || document.querySelector('.react-spectrum-provider');\n\n  if (provider) {\n    let setOverlay = provider.getAttribute('setOverlay');\n\n    if (boundingRect == null && overlayVisibility) {\n      boundingRect = overlayRef.getBoundingClientRect();\n    }\n\n    let data = {\n      visible: overlayVisibility,\n      callback: overlayCallback,\n      boundingRect: boundingRect\n    };\n\n    if (setOverlay) {\n      setOverlay(overlayRef, data);\n    }\n  }\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.isUrl = isUrl;\nexports.normalize = normalize;\nexports.removeDiacritics = removeDiacritics;\nexports.getTextFromReact = getTextFromReact;\n\n/*************************************************************************\n* ADOBE CONFIDENTIAL\n* ___________________\n*\n* Copyright 2019 Adobe\n* All Rights Reserved.\n*\n* NOTICE: All information contained herein is, and remains\n* the property of Adobe and its suppliers, if any. The intellectual\n* and technical concepts contained herein are proprietary to Adobe\n* and its suppliers and are protected by all applicable intellectual\n* property laws, including trade secret and copyright laws.\n* Dissemination of this information or reproduction of this material\n* is strictly forbidden unless prior written permission is obtained\n* from Adobe.\n**************************************************************************/\nfunction isUrl(string) {\n  return string && !!string.match(/\\/|:|\\./g);\n}\n\nfunction normalize(string = '', normalizationForm = 'NFC') {\n  if ('normalize' in String.prototype) {\n    string = string.normalize(normalizationForm);\n  }\n\n  return string;\n}\n\nfunction removeDiacritics(string = '', normalizationForm = 'NFD') {\n  return normalize(string, normalizationForm.replace('C', 'D')).replace(/[\\u0300-\\u036f]/g, '');\n}\n/** adapted from https://github.com/rwu823/react-addons-text-content */\n\n\nfunction getTextFromReact(reactChild) {\n  let result = '';\n\n  const addChildTextToResult = child => {\n    if (typeof child === 'string' || typeof child === 'number') {\n      result = `${result} ${child}`;\n    } else if (Array.isArray(child)) {\n      child.forEach(c => addChildTextToResult(c));\n    } else if (child && child.props) {\n      const {\n        children\n      } = child.props;\n\n      if (Array.isArray(children)) {\n        children.forEach(c => addChildTextToResult(c));\n      } else {\n        addChildTextToResult(children);\n      }\n    }\n  };\n\n  addChildTextToResult(reactChild); // clean up adjacent whitespace in result\n\n  const adjacentWhitespaceRegex = /(\\s)(?:\\s+)/g;\n  return result.trim().replace(adjacentWhitespaceRegex, '$1');\n}\n","function _extends() {\n  return (module.exports = _extends = Object.assign ? Object.assign.bind() : function (n) {\n    for (var e = 1; e < arguments.length; e++) {\n      var t = arguments[e];\n      for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n    }\n    return n;\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _extends.apply(null, arguments);\n}\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _interopRequireDefault(e) {\n  return e && e.__esModule ? e : {\n    \"default\": e\n  };\n}\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","Array.prototype.flat||Object.defineProperty(Array.prototype,\"flat\",{configurable:!0,value:function r(){var t=isNaN(arguments[0])?1:Number(arguments[0]);return t?Array.prototype.reduce.call(this,function(a,e){return Array.isArray(e)?a.push.apply(a,r.call(e,t-1)):a.push(e),a},[]):Array.prototype.slice.call(this)},writable:!0}),Array.prototype.flatMap||Object.defineProperty(Array.prototype,\"flatMap\",{configurable:!0,value:function(r){return Array.prototype.map.apply(this,arguments).flat()},writable:!0})\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nexport enum SAMErrorCode {\n    /* Unknown error. Should never be thrown for SAM.js */\n    UNKNOWN = 1,\n\n    /* Happens if user's device has insufficient space available for operation\n     * User should make some space available and retry\n     */\n    FULL_LOCAL_DISK_SPACE = 2,\n\n    /* Happens if allocated cloud space to user is full.\n     * User should be purchasing extra cloud space/ permanently deleting\n       some assets, and retry\n     */\n    FULL_CLOUD_STORAGE = 3,\n\n    /* Happens if no internet connection */\n    DEVICE_OFFLINE = 4,\n\n    /* Happens if network is down */\n    NETWORK_ERROR = 5,\n\n    /* Happens if user request is taking longer than expected.\n     * Possible reason: backend service being in transient state\n       (getting updated), flaky connections or bad network\n     */\n    REQUEST_TIMED_OUT = 6,\n\n    /* Happens if given request failed as it was cancelled by user */\n    USER_CANCELLED = 7,\n\n    /* Happens if there is some error related to coresync\n     * There are associated sub-codes relating to this error\n     */\n    CORESYNC_FAILURE = 8,\n\n    /**\n     * CoreSync is in a paused state.\n     */\n    SYNC_PAUSED = 9,\n\n    /* Happens if registration failed as more than permissible users are\n       simultaneously logged in Coresync */\n    USER_ALREADY_REGISTERED = 10,\n\n    /* Happens if an asset operation is denied as there were uncommited\n       changes for an asset, done from same app */\n    PENDING_UNCOMMITTED_CHANGES_FROM_THIS_APP = 11,\n\n    /* Happens if an asset operation is denied as there were uncommited\n       changes for an asset, done from different app */\n    PENDING_UNCOMMITTED_CHANGES_FROM_ANOTHER_APP = 12,\n\n    /* Happens if some error has occurred while processing user request\n     * that might succeed upon retry (now or later). Client or end user\n     * may retry again. Other error codes may also be retryable, this is\n     * just a catch all for the leftovers.\n     */\n    INTERNAL_ERROR = 13,\n\n    /* Happens if a request cannot be cancelled - Cancellation request gets\n       ignored */\n    OPERATION_IGNORED = 14,\n\n    /**\n     * Indicates that the request could not be processed because of conflict\n     * in the current state of the resource.\n     * <br>Client Action: Resolve conflict and try again.\n     */\n    CONFLICT = 15,\n\n    /**\n     * Happens when interacting with an asset the user no longer has access to.\n     */\n    ACCESS_DENIED = 16,\n\n    /* Happens if user is trying a feature that is not currently supported */\n    UNSUPPORTED = 17,\n\n    /* Happens if user is attempting an operation that cannot be performed\n       because the asset is not in sync [e.g. unpin] */\n    ASSET_NOT_IN_SYNC = 18,\n\n    /* Happens when the request is malformed or the operation is not allowed\n       on the asset for e.g. purging a folder */\n    BAD_REQUEST = 19,\n\n    /**\n     * Happens if asset failed to sync.\n     * There are associated sub-codes relating to this error which may have\n     * more information\n     */\n    SYNC_ERROR = 20,\n\n    /**\n     * Happens if requests is made for an asset that cannot be found.\n     */\n    NOT_FOUND = 21,\n\n    /**\n     * Happens when there is authorization error while performing the request\n     * for e.g. if requests are made which require user to be registered with\n     * ACPL, but user is not registered.\n     */\n    AUTHORIZATION_ERROR = 22,\n\n    /**\n     * Happens while performing an invalid operation for e.g. when attempting\n     * to migrate an asset to RepoNaming that has already been migrated\n     */\n    INVALID_OPERATION = 23,\n\n    /**\n     * Happens when a method is called on a asset that require that the\n     * asset have a context, but none is present or the asset does not\n     * belong to specified context.\n     */\n    INVALID_CONTEXT = 24,\n\n    /**\n     * An error occured during committing changes.\n     * Error sub-code may have more information around this\n     */\n    COMMIT_ERROR = 25,\n\n    /**\n     *  Parent not found for the asset\n     */\n    PARENT_NOT_FOUND = 26,\n\n    /**\n     * Parent folder is discarded\n     */\n    PARENT_DISCARDED = 27,\n\n    /**\n     * Project limit exceeded\n     */\n    PROJECT_LIMIT_EXCEEDED = 28,\n\n    /**\n     * The user or organization is not provisioned\n     * for the requested service access.\n     */\n    SERVICE_NOT_PROVISIONED = 29,\n}\n\nexport enum SAMErrorSubCode {\n    /* No sub-error */\n    NONE = 0,\n\n    /* Happens if Coresync service is not running, could not be launched,\n     * or is not responding */\n    CORESYNC_NOT_REACHABLE = 1,\n\n    /* Happens if CoreSync is not installed/found or it is running but\n      incompatible (lesser than lowest supported version) */\n    CORESYNC_NOT_COMPATIBLE = 2,\n\n    /**\n     * Happens if CoreSync binary is not present.  Ask end user install coresync\n     */\n    CORESYNC_BINARY_NOT_FOUND = 3,\n\n    /**\n     * Happens if CoreSync is not installed. Ask end user to install/upgrade coresync.\n     */\n    CORESYNC_NOT_INSTALLED = 4,\n\n    /**\n     * Happens if asset failed to sync. Sync will be retried by ACPL.\n     * Cient may wait for subsequent sync notification for the asset or retry\n     * the operation.\n     */\n    SYNC_FAILED = 5,\n\n    /**\n     * Syncing the asset failed due to an EditEdit conflict, but the conflict\n     * was resolved\n     */\n    SYNC_FAILED_EDIT_EDIT_RESOLVED = 6,\n\n    /**\n     * Syncing the asset failed due to an EditDelete conflict, but the conflict\n     * was resolved\n     */\n    SYNC_FAILED_EDIT_DELETE_RESOLVED = 7,\n\n    /**\n     * An error occured while moving an orphan to the root folder.\n     */\n    COMMIT_ON_ORPHAN_ERROR = 8,\n\n    /**\n     * Admin disabled creation of Projects\n     * https://wiki.corp.adobe.com/pages/viewpage.action?spaceKey=assetscollab&title=Proposal%3A+Project+API+V3+-+Capability\n     */\n    PROJECTS_ADMIN_ONLY = 9,\n\n    /**\n     * 404 specific projects errors.\n     * https://wiki.corp.adobe.com/pages/viewpage.action?spaceKey=assetscollab&title=Proposal%3A+Project+API+V3+-+Capability\n     */\n    PROJECTS_INVALID_REPOSITORY = 10,\n    PROJECTS_NO_HOME_REPOSITORY = 11,\n}\n\ntype ErrorCodeInfo = {\n    code: SAMErrorCode;\n    message: (href: string) => string;\n    subCode?: SAMErrorSubCode;\n}\n\nconst errorCodeInfos = new Map<number, ErrorCodeInfo>([\n    [ 401, { code: SAMErrorCode.AUTHORIZATION_ERROR, message: (href) => `Authorization error: ${href}` } ],\n    [ 403, { code: SAMErrorCode.ACCESS_DENIED, message: (href) => `Access to resource denied: ${href}` } ],\n    [ 404, { code: SAMErrorCode.NOT_FOUND, message: (href) => `Resource not found: ${href}` } ],\n    [ 409, { code: SAMErrorCode.CONFLICT, message: () => `Resource has a naming conflict.` } ],\n    [ 412, { code: SAMErrorCode.CONFLICT, message: () => `Resource has a conflict. Etag mismatch.` } ],\n]);\n\n/**\n * Convert server error codes to regular HTTP number codes.\n * '4041' -> 404\n * '404.1' -> 404\n * 4041 -> 404\n * 404 -> 404\n *\n * @param code from server\n * @returns http error code\n */\nfunction validateRepositoryCode(code: string | number): number {\n    // Repo APIs return string codes instead of numbers. In that case\n    if (typeof code === 'string') {\n        code = parseInt(code);\n    }\n\n    // Remove any extra floating point.\n    code = Math.floor(code);\n\n    // HTTP error codes only use 3 digits, but repo APIs can have even 5 digits.\n    // We only care about the most significant 3 digits though.\n    // https://git.corp.adobe.com/DMA/dcx-lib/blob/729085f1ed77936a1718377ea6cd5e3b16f6aada/lib/dcxlib/src/main/java/com/adobe/dcx/storagesession/StorageErrorCode.java#L12\n    while (code > 999) {\n        code = Math.floor(code / 10);\n    }\n\n    return code;\n}\n\nexport enum ProblemType {\n    LIMIT_CHANGELOGRETENTION = 'http://ns.adobe.com/adobecloud/problem/limit/changelogretention',\n    OPERATION_FAILED = 'adobecloud/problem/operation_failed',\n    SUBSCRIPTION_COUNT = 'http://ns.adobe.com/adobecloud/problem/limit/subscriptioncount',\n    QUOTA_EXCEEDED = 'http://ns.adobe.com/adobecloud/problem/quotaexceeded',\n    CHILDREN_LIMIT_EXCEEDED = 'http://ns.adobe.com/adobecloud/problem/limit/childrencount',\n    NO_HOME_REPOSITORY = 'http://ns.adobe.com/projects/problem/no-home-repository',\n    INVALID_HOME_REPOSITORY = 'http://ns.adobe.com/projects/problem/invalid-repository',\n    ADMIN_ONLY = 'http://ns.adobe.com/projects/problem/admin-only',\n    ACCESS_DENIED = 'http://ns.adobe.com/adobecloud/problem/accessdenied'\n}\n\nfunction formatUnderlyingError(underlyingError: any): String {\n    let errorStr: string = '';\n    if (underlyingError !== null && underlyingError !== undefined) {\n        try {\n            errorStr = ` -> ${String(underlyingError)}`;\n        } catch {\n            // Avoid linter error on empty blocks.\n            void (0);\n        }\n    }\n    return errorStr;\n}\n\n/**\n * This additional info is to be only used for debugging purposes by clients\n * or internally by SAM.js\n */\nexport interface IAdditionalErrorInfo {\n    /**\n     * Response object mainly for HTTP errors created with the help of createWithResponse* API\n     */\n    response?: Response;\n    /**\n     * For services that return RFC 7807 `type` metadata in the body.\n     */\n    problemType?: string;\n    /**\n     * These could be errors thrown from a service or an error thrown while parsing JSON\n     */\n    underlyingError?: any;\n\n    /**\n     * X-Request-Id header extracted from response, if available\n     */\n    reqId?: string;\n}\n\nexport const SAMErrorName = 'SAMError';\n\n/**\n * SAM.js would always throw back SAMError even when it is powered via SAM.cpp\n * The clients must rely only on `code` and `subCode` in order to write their business logic.\n * `description` can be used for logging purposes.\n * `_additionalInfo` should only be used for debugging purpose and there should not be any reference\n * to it in the code base.\n */\nexport class SAMError extends Error {\n    readonly code: SAMErrorCode;\n    readonly subCode?: SAMErrorSubCode;\n    /**\n     * The below fields are to be used by clients only for logging/debugging purposes only.\n     * For fine-grain error-handling, clients should only inspect `code` and `subCode`.\n     * They may be used internally by SAM.js\n     */\n    readonly description: string;\n    readonly _additionalInfo: IAdditionalErrorInfo;\n\n    private constructor(\n        code: SAMErrorCode,\n        description: string,\n        additionalInfo: IAdditionalErrorInfo = {},\n        subCode?: SAMErrorSubCode\n    ) {\n        // NOTE: clients should not rely on SAMError.message for fine-grain error handling; instead, use `code` and `subcode`.\n        super(`[${SAMErrorCode[code]}${ subCode === undefined ? '' : '-' + SAMErrorSubCode[subCode]}] ${description}${formatUnderlyingError(additionalInfo.underlyingError)}`);\n        this.code = code;\n        this.subCode = subCode;\n        this.description = description;\n        this._additionalInfo = additionalInfo;\n    }\n\n    get name() {\n        return SAMErrorName;\n    }\n\n    static wrapErrorIfNeeded(code: SAMErrorCode, description: string, underlyingError: any, subCode?: SAMErrorSubCode): SAMError {\n        if (underlyingError instanceof SAMError) {\n            return underlyingError;\n        }\n        return new SAMError(code, description, { underlyingError }, subCode);\n    }\n\n    static create(code: SAMErrorCode, description: string, additionalInfo?: IAdditionalErrorInfo, subCode?: SAMErrorSubCode): SAMError {\n        return new SAMError(code, description, additionalInfo, subCode);\n    }\n\n    static createWithResponse(response: Response, href?: string) {\n        const { status } = response;\n        const info = errorCodeInfos.get(validateRepositoryCode(status));\n        const responseUrl = href ?? response.url;\n        const reqId = response.headers.get('X-Request-Id') || '';\n\n        return new SAMError(\n            info?.code ?? SAMErrorCode.UNKNOWN,\n            (info?.message(href ?? responseUrl) ?? `Unexpected response status: ${status} for ${responseUrl}`)\n                + ` reqId: ${reqId}`,\n            { response, reqId },\n            info?.subCode,\n        );\n    }\n\n    static createWithResponseAndDescription(response: Response, description: string) {\n        const info = errorCodeInfos.get(validateRepositoryCode(response.status));\n        return new SAMError(\n            info?.code ?? SAMErrorCode.UNKNOWN,\n            description,\n            { response },\n            info?.subCode,\n        );\n    }\n\n    static createWithRepositoryCode(code: number | string, problemType: string, description: string) {\n        // Look out for Quota Exceeded errors.\n        // RAPI returns 403 with problemType = http://ns.adobe.com/adobecloud/problem/quotaexceeded for such errors.\n        // We want to return a more specific error code for this case.\n        if (problemType === ProblemType.QUOTA_EXCEEDED) {\n            return new SAMError(\n                SAMErrorCode.FULL_CLOUD_STORAGE,\n                description,\n                { problemType },\n            );\n        }\n        const validHTTPCode = validateRepositoryCode(code);\n        const info = code ? errorCodeInfos.get(validHTTPCode) : undefined;\n        return new SAMError(\n            info?.code ?? SAMErrorCode.UNKNOWN,\n            description,\n            { problemType },\n            info?.subCode,\n        );\n    }\n}\n\n/**\n * Throws SAMAssertionError when `assertedCondition` is false.\n * @param assertedCondition\n * @param message\n */\nexport function assert(assertedCondition: boolean, message: string) {\n    if (!assertedCondition) {\n        throw SAMError.create(SAMErrorCode.UNKNOWN, message);\n    }\n}\n\n/**\n * Helper function used to accurately determine if an error\n * is a SAMError and not a plain Error.\n *\n * @param error An Error type object\n * @returns\n */\nexport function isSAMError(error: any): error is SAMError {\n    return error && error.name === SAMErrorName;\n}\n\n// We've used this as a default in too many places now,\n// this should avoid a huge change just to update the paths.\nexport default SAMError;\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","// 'path' module extracted from Node.js v8.11.1 (only the posix part)\n// transplited with Babel\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nfunction assertPath(path) {\n  if (typeof path !== 'string') {\n    throw new TypeError('Path must be a string. Received ' + JSON.stringify(path));\n  }\n}\n\n// Resolves . and .. elements in a path with directory names\nfunction normalizeStringPosix(path, allowAboveRoot) {\n  var res = '';\n  var lastSegmentLength = 0;\n  var lastSlash = -1;\n  var dots = 0;\n  var code;\n  for (var i = 0; i <= path.length; ++i) {\n    if (i < path.length)\n      code = path.charCodeAt(i);\n    else if (code === 47 /*/*/)\n      break;\n    else\n      code = 47 /*/*/;\n    if (code === 47 /*/*/) {\n      if (lastSlash === i - 1 || dots === 1) {\n        // NOOP\n      } else if (lastSlash !== i - 1 && dots === 2) {\n        if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /*.*/ || res.charCodeAt(res.length - 2) !== 46 /*.*/) {\n          if (res.length > 2) {\n            var lastSlashIndex = res.lastIndexOf('/');\n            if (lastSlashIndex !== res.length - 1) {\n              if (lastSlashIndex === -1) {\n                res = '';\n                lastSegmentLength = 0;\n              } else {\n                res = res.slice(0, lastSlashIndex);\n                lastSegmentLength = res.length - 1 - res.lastIndexOf('/');\n              }\n              lastSlash = i;\n              dots = 0;\n              continue;\n            }\n          } else if (res.length === 2 || res.length === 1) {\n            res = '';\n            lastSegmentLength = 0;\n            lastSlash = i;\n            dots = 0;\n            continue;\n          }\n        }\n        if (allowAboveRoot) {\n          if (res.length > 0)\n            res += '/..';\n          else\n            res = '..';\n          lastSegmentLength = 2;\n        }\n      } else {\n        if (res.length > 0)\n          res += '/' + path.slice(lastSlash + 1, i);\n        else\n          res = path.slice(lastSlash + 1, i);\n        lastSegmentLength = i - lastSlash - 1;\n      }\n      lastSlash = i;\n      dots = 0;\n    } else if (code === 46 /*.*/ && dots !== -1) {\n      ++dots;\n    } else {\n      dots = -1;\n    }\n  }\n  return res;\n}\n\nfunction _format(sep, pathObject) {\n  var dir = pathObject.dir || pathObject.root;\n  var base = pathObject.base || (pathObject.name || '') + (pathObject.ext || '');\n  if (!dir) {\n    return base;\n  }\n  if (dir === pathObject.root) {\n    return dir + base;\n  }\n  return dir + sep + base;\n}\n\nvar posix = {\n  // path.resolve([from ...], to)\n  resolve: function resolve() {\n    var resolvedPath = '';\n    var resolvedAbsolute = false;\n    var cwd;\n\n    for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n      var path;\n      if (i >= 0)\n        path = arguments[i];\n      else {\n        if (cwd === undefined)\n          cwd = process.cwd();\n        path = cwd;\n      }\n\n      assertPath(path);\n\n      // Skip empty entries\n      if (path.length === 0) {\n        continue;\n      }\n\n      resolvedPath = path + '/' + resolvedPath;\n      resolvedAbsolute = path.charCodeAt(0) === 47 /*/*/;\n    }\n\n    // At this point the path should be resolved to a full absolute path, but\n    // handle relative paths to be safe (might happen when process.cwd() fails)\n\n    // Normalize the path\n    resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n\n    if (resolvedAbsolute) {\n      if (resolvedPath.length > 0)\n        return '/' + resolvedPath;\n      else\n        return '/';\n    } else if (resolvedPath.length > 0) {\n      return resolvedPath;\n    } else {\n      return '.';\n    }\n  },\n\n  normalize: function normalize(path) {\n    assertPath(path);\n\n    if (path.length === 0) return '.';\n\n    var isAbsolute = path.charCodeAt(0) === 47 /*/*/;\n    var trailingSeparator = path.charCodeAt(path.length - 1) === 47 /*/*/;\n\n    // Normalize the path\n    path = normalizeStringPosix(path, !isAbsolute);\n\n    if (path.length === 0 && !isAbsolute) path = '.';\n    if (path.length > 0 && trailingSeparator) path += '/';\n\n    if (isAbsolute) return '/' + path;\n    return path;\n  },\n\n  isAbsolute: function isAbsolute(path) {\n    assertPath(path);\n    return path.length > 0 && path.charCodeAt(0) === 47 /*/*/;\n  },\n\n  join: function join() {\n    if (arguments.length === 0)\n      return '.';\n    var joined;\n    for (var i = 0; i < arguments.length; ++i) {\n      var arg = arguments[i];\n      assertPath(arg);\n      if (arg.length > 0) {\n        if (joined === undefined)\n          joined = arg;\n        else\n          joined += '/' + arg;\n      }\n    }\n    if (joined === undefined)\n      return '.';\n    return posix.normalize(joined);\n  },\n\n  relative: function relative(from, to) {\n    assertPath(from);\n    assertPath(to);\n\n    if (from === to) return '';\n\n    from = posix.resolve(from);\n    to = posix.resolve(to);\n\n    if (from === to) return '';\n\n    // Trim any leading backslashes\n    var fromStart = 1;\n    for (; fromStart < from.length; ++fromStart) {\n      if (from.charCodeAt(fromStart) !== 47 /*/*/)\n        break;\n    }\n    var fromEnd = from.length;\n    var fromLen = fromEnd - fromStart;\n\n    // Trim any leading backslashes\n    var toStart = 1;\n    for (; toStart < to.length; ++toStart) {\n      if (to.charCodeAt(toStart) !== 47 /*/*/)\n        break;\n    }\n    var toEnd = to.length;\n    var toLen = toEnd - toStart;\n\n    // Compare paths to find the longest common path from root\n    var length = fromLen < toLen ? fromLen : toLen;\n    var lastCommonSep = -1;\n    var i = 0;\n    for (; i <= length; ++i) {\n      if (i === length) {\n        if (toLen > length) {\n          if (to.charCodeAt(toStart + i) === 47 /*/*/) {\n            // We get here if `from` is the exact base path for `to`.\n            // For example: from='/foo/bar'; to='/foo/bar/baz'\n            return to.slice(toStart + i + 1);\n          } else if (i === 0) {\n            // We get here if `from` is the root\n            // For example: from='/'; to='/foo'\n            return to.slice(toStart + i);\n          }\n        } else if (fromLen > length) {\n          if (from.charCodeAt(fromStart + i) === 47 /*/*/) {\n            // We get here if `to` is the exact base path for `from`.\n            // For example: from='/foo/bar/baz'; to='/foo/bar'\n            lastCommonSep = i;\n          } else if (i === 0) {\n            // We get here if `to` is the root.\n            // For example: from='/foo'; to='/'\n            lastCommonSep = 0;\n          }\n        }\n        break;\n      }\n      var fromCode = from.charCodeAt(fromStart + i);\n      var toCode = to.charCodeAt(toStart + i);\n      if (fromCode !== toCode)\n        break;\n      else if (fromCode === 47 /*/*/)\n        lastCommonSep = i;\n    }\n\n    var out = '';\n    // Generate the relative path based on the path difference between `to`\n    // and `from`\n    for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n      if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) {\n        if (out.length === 0)\n          out += '..';\n        else\n          out += '/..';\n      }\n    }\n\n    // Lastly, append the rest of the destination (`to`) path that comes after\n    // the common path parts\n    if (out.length > 0)\n      return out + to.slice(toStart + lastCommonSep);\n    else {\n      toStart += lastCommonSep;\n      if (to.charCodeAt(toStart) === 47 /*/*/)\n        ++toStart;\n      return to.slice(toStart);\n    }\n  },\n\n  _makeLong: function _makeLong(path) {\n    return path;\n  },\n\n  dirname: function dirname(path) {\n    assertPath(path);\n    if (path.length === 0) return '.';\n    var code = path.charCodeAt(0);\n    var hasRoot = code === 47 /*/*/;\n    var end = -1;\n    var matchedSlash = true;\n    for (var i = path.length - 1; i >= 1; --i) {\n      code = path.charCodeAt(i);\n      if (code === 47 /*/*/) {\n          if (!matchedSlash) {\n            end = i;\n            break;\n          }\n        } else {\n        // We saw the first non-path separator\n        matchedSlash = false;\n      }\n    }\n\n    if (end === -1) return hasRoot ? '/' : '.';\n    if (hasRoot && end === 1) return '//';\n    return path.slice(0, end);\n  },\n\n  basename: function basename(path, ext) {\n    if (ext !== undefined && typeof ext !== 'string') throw new TypeError('\"ext\" argument must be a string');\n    assertPath(path);\n\n    var start = 0;\n    var end = -1;\n    var matchedSlash = true;\n    var i;\n\n    if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n      if (ext.length === path.length && ext === path) return '';\n      var extIdx = ext.length - 1;\n      var firstNonSlashEnd = -1;\n      for (i = path.length - 1; i >= 0; --i) {\n        var code = path.charCodeAt(i);\n        if (code === 47 /*/*/) {\n            // If we reached a path separator that was not part of a set of path\n            // separators at the end of the string, stop now\n            if (!matchedSlash) {\n              start = i + 1;\n              break;\n            }\n          } else {\n          if (firstNonSlashEnd === -1) {\n            // We saw the first non-path separator, remember this index in case\n            // we need it if the extension ends up not matching\n            matchedSlash = false;\n            firstNonSlashEnd = i + 1;\n          }\n          if (extIdx >= 0) {\n            // Try to match the explicit extension\n            if (code === ext.charCodeAt(extIdx)) {\n              if (--extIdx === -1) {\n                // We matched the extension, so mark this as the end of our path\n                // component\n                end = i;\n              }\n            } else {\n              // Extension does not match, so our result is the entire path\n              // component\n              extIdx = -1;\n              end = firstNonSlashEnd;\n            }\n          }\n        }\n      }\n\n      if (start === end) end = firstNonSlashEnd;else if (end === -1) end = path.length;\n      return path.slice(start, end);\n    } else {\n      for (i = path.length - 1; i >= 0; --i) {\n        if (path.charCodeAt(i) === 47 /*/*/) {\n            // If we reached a path separator that was not part of a set of path\n            // separators at the end of the string, stop now\n            if (!matchedSlash) {\n              start = i + 1;\n              break;\n            }\n          } else if (end === -1) {\n          // We saw the first non-path separator, mark this as the end of our\n          // path component\n          matchedSlash = false;\n          end = i + 1;\n        }\n      }\n\n      if (end === -1) return '';\n      return path.slice(start, end);\n    }\n  },\n\n  extname: function extname(path) {\n    assertPath(path);\n    var startDot = -1;\n    var startPart = 0;\n    var end = -1;\n    var matchedSlash = true;\n    // Track the state of characters (if any) we see before our first dot and\n    // after any path separator we find\n    var preDotState = 0;\n    for (var i = path.length - 1; i >= 0; --i) {\n      var code = path.charCodeAt(i);\n      if (code === 47 /*/*/) {\n          // If we reached a path separator that was not part of a set of path\n          // separators at the end of the string, stop now\n          if (!matchedSlash) {\n            startPart = i + 1;\n            break;\n          }\n          continue;\n        }\n      if (end === -1) {\n        // We saw the first non-path separator, mark this as the end of our\n        // extension\n        matchedSlash = false;\n        end = i + 1;\n      }\n      if (code === 46 /*.*/) {\n          // If this is our first dot, mark it as the start of our extension\n          if (startDot === -1)\n            startDot = i;\n          else if (preDotState !== 1)\n            preDotState = 1;\n      } else if (startDot !== -1) {\n        // We saw a non-dot and non-path separator before our dot, so we should\n        // have a good chance at having a non-empty extension\n        preDotState = -1;\n      }\n    }\n\n    if (startDot === -1 || end === -1 ||\n        // We saw a non-dot character immediately before the dot\n        preDotState === 0 ||\n        // The (right-most) trimmed path component is exactly '..'\n        preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n      return '';\n    }\n    return path.slice(startDot, end);\n  },\n\n  format: function format(pathObject) {\n    if (pathObject === null || typeof pathObject !== 'object') {\n      throw new TypeError('The \"pathObject\" argument must be of type Object. Received type ' + typeof pathObject);\n    }\n    return _format('/', pathObject);\n  },\n\n  parse: function parse(path) {\n    assertPath(path);\n\n    var ret = { root: '', dir: '', base: '', ext: '', name: '' };\n    if (path.length === 0) return ret;\n    var code = path.charCodeAt(0);\n    var isAbsolute = code === 47 /*/*/;\n    var start;\n    if (isAbsolute) {\n      ret.root = '/';\n      start = 1;\n    } else {\n      start = 0;\n    }\n    var startDot = -1;\n    var startPart = 0;\n    var end = -1;\n    var matchedSlash = true;\n    var i = path.length - 1;\n\n    // Track the state of characters (if any) we see before our first dot and\n    // after any path separator we find\n    var preDotState = 0;\n\n    // Get non-dir info\n    for (; i >= start; --i) {\n      code = path.charCodeAt(i);\n      if (code === 47 /*/*/) {\n          // If we reached a path separator that was not part of a set of path\n          // separators at the end of the string, stop now\n          if (!matchedSlash) {\n            startPart = i + 1;\n            break;\n          }\n          continue;\n        }\n      if (end === -1) {\n        // We saw the first non-path separator, mark this as the end of our\n        // extension\n        matchedSlash = false;\n        end = i + 1;\n      }\n      if (code === 46 /*.*/) {\n          // If this is our first dot, mark it as the start of our extension\n          if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n        } else if (startDot !== -1) {\n        // We saw a non-dot and non-path separator before our dot, so we should\n        // have a good chance at having a non-empty extension\n        preDotState = -1;\n      }\n    }\n\n    if (startDot === -1 || end === -1 ||\n    // We saw a non-dot character immediately before the dot\n    preDotState === 0 ||\n    // The (right-most) trimmed path component is exactly '..'\n    preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n      if (end !== -1) {\n        if (startPart === 0 && isAbsolute) ret.base = ret.name = path.slice(1, end);else ret.base = ret.name = path.slice(startPart, end);\n      }\n    } else {\n      if (startPart === 0 && isAbsolute) {\n        ret.name = path.slice(1, startDot);\n        ret.base = path.slice(1, end);\n      } else {\n        ret.name = path.slice(startPart, startDot);\n        ret.base = path.slice(startPart, end);\n      }\n      ret.ext = path.slice(startDot, end);\n    }\n\n    if (startPart > 0) ret.dir = path.slice(0, startPart - 1);else if (isAbsolute) ret.dir = '/';\n\n    return ret;\n  },\n\n  sep: '/',\n  delimiter: ':',\n  win32: null,\n  posix: null\n};\n\nposix.posix = posix;\n\nmodule.exports = posix;\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport SAMError, { SAMErrorCode } from '../SAMError';\n\nexport const KeysProperty = Symbol('@key parameterMap');\nexport interface IHasKeyMap {\n    [KeysProperty]: Map<string, number>\n}\n\n// @key decorator is used to indicate the argument to the @cache and @synchronized decorators\nexport default (target: IHasKeyMap, propertyKey: string, parameterIndex: number) => {\n    const map = target[KeysProperty] = target[KeysProperty] || new Map;\n    if (map.has(propertyKey)) {\n        throw SAMError.create(SAMErrorCode.BAD_REQUEST, '@key cannot be applied to more than one parameter');\n    }\n    map.set(propertyKey, parameterIndex);\n};\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport type { ISAMObject } from '../../indexPrivate';\nimport SAMError, { SAMErrorCode } from '../SAMError';\nimport { IHasKeyMap, KeysProperty } from './key';\n\ntype CacheableDescriptor<ValueType> = (target: ISAMObject, propertyKey: string, descriptor: TypedPropertyDescriptor<ValueType>) => void;\n\n/**\n * Caches the result of the method, using the argument decorated with '@key' as the key (multiple arguments can also be\n * used, and they will be appended together). This ensures that the result is cached in memory and shared if multiple\n * people call the API at once. Once the value expires, it will be recomputed.\n *\n * Note:\n * 1) Keys are global, so different cached methods should use different key domains unless it's intended to be shared.\n *    We typically use URLs as keys to avoid such conflicts.\n * 2) Decorators are not passed the default value of parameters, so you can't write f(@key x = 'defaultValue') - you need\n *    to make sure the value is always passed in.\n */\nfunction cacheImpl<ValueType extends ISAMObject>(validate?: (value: any) => boolean): CacheableDescriptor<ValueType> {\n    return (target: ISAMObject, propertyKey: string, descriptor: TypedPropertyDescriptor<ValueType>) => {\n        const method = descriptor.value;\n        if (!method) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, '@cache decorator can only be applied to a method');\n        }\n        const newMethod = async function (this: IHasKeyMap & ISAMObject, ...args: any[]) {\n            const keyIndex = this[KeysProperty]?.get(propertyKey);\n            if (keyIndex === undefined) {\n                throw SAMError.create(SAMErrorCode.BAD_REQUEST, '@cache decorator requires one of the parameters to be labelled with @key');\n            }\n            const key: string = args[keyIndex];\n            return this._core._environment.cache.getItem(key, () => (method as any).apply(this, args), validate);\n        };\n        descriptor.value = (newMethod as unknown) as ValueType;\n    };\n}\n\n// Allow both @cache with no parameters, or @cache(validate) with a validation function\nexport default function cache<T1 extends ISAMObject, ValueType>(target: T1, property: string, arg3: TypedPropertyDescriptor<ValueType>): TypedPropertyDescriptor<ValueType>;\nexport default function cache(validate?: (value: any) => boolean): CacheableDescriptor<any>;\n\nexport default function cache(arg1: any, arg2?: string, arg3?: any): any {\n    if (!arg2) {\n        return cacheImpl(arg1);\n    }\n\n    // No parameter - invoke without validation\n    // (allows using @cache without any parameters)\n    return cacheImpl()(arg1, arg2, arg3);\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n// Memoize the value of a getter or method - this just caches the return value\n// forever, so it doesn't get recomputed each time it's called\nexport default (target: any, propertyKey: string, descriptor: PropertyDescriptor) => {\n    const memo = Symbol(`@memoize ${propertyKey}`);\n    const property = descriptor.get ? 'get' : 'value';\n    const method = descriptor[property];\n    descriptor[property] = function (this: { [memo]: ReturnType<typeof method> }, ...args: any[]) {\n        if (!Object.prototype.hasOwnProperty.call(this, memo)) {\n            this[memo] = method.call(this, ...args);\n        }\n        return this[memo];\n    };\n};\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport IEvent from './IEvent';\n\n/**\n * Base class for all events sent out from SAMJS.\n */\nexport default class SAMEvent implements IEvent {\n    constructor(private _type: string) {\n    }\n\n    get type(): string {\n        return this._type;\n    }\n\n    toString(): string {\n        return `SAMEvent(${this._type})`;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport SAMEvent from './SAMEvent';\n\nexport const CHANGE = 'change';\n\nexport default class ChangeEvent extends SAMEvent {\n    constructor() {\n        super(CHANGE);\n    }\n}\n\nexport const SharedChangeEvent = new ChangeEvent();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\nimport type { ISAMObject } from '../../indexPrivate';\nimport IEvent from '../IEvent';\nimport { SharedChangeEvent } from '../ChangeEvent';\n\n\nconst $OBSERVABLE_MAP = Symbol('$OBSERVABLE_MAP');\n\ntype ObservableMap = Map<string, IEvent>;\n\nexport function getEventForProp(obj: any, prop: string): IEvent | undefined {\n    return (obj[$OBSERVABLE_MAP] as ObservableMap || undefined)?.get(prop);\n}\n\nexport function getPropsForEvent(obj: any, event: IEvent): string[] {\n    return [ ...(obj[$OBSERVABLE_MAP] as ObservableMap || new Map()).entries() ]\n        .filter(([ , mappedEvent ]) => mappedEvent === event)\n        .map(([ prop ]) => prop);\n}\n\nfunction setEventForProp(obj: any, prop: string, event: IEvent) {\n    let map: ObservableMap;\n    // Detect if a map exists and whether or not it is inherited\n    if (Object.getOwnPropertyDescriptor(obj, $OBSERVABLE_MAP)) {\n        // not inherited, and it already exists\n        map = obj[$OBSERVABLE_MAP];\n    } else if (obj[$OBSERVABLE_MAP]) {\n        // Inherited, and it exists on the parent. The properties of the child class should not be mapped in the parent\n        // class, but the child class should have all the mapped properties of the parent class. So create a new map\n        // for the child that is a copy of the parent's map.\n        map = new Map(obj[$OBSERVABLE_MAP]);\n        obj[$OBSERVABLE_MAP] = map;\n    } else {\n        // Not inherited, and it does not exist\n        map = new Map();\n        obj[$OBSERVABLE_MAP] = map;\n    }\n\n    // TODO: warn if event is changed for a prop?\n    map.set(prop, event);\n}\n\nexport function observableImpl(event: IEvent, privatePropNames?: string[]) {\n    return (target: ISAMObject, key: string, descriptor: PropertyDescriptor): void => {\n        if (descriptor.get || descriptor.value) {\n            privatePropNames?.forEach(prop => setEventForProp(target, prop, event));\n        }\n        if (descriptor.get) {\n            const getter = descriptor.get;\n            descriptor.get = function (this: ISAMObject) {\n                this._core._environment.mobx.reportObserved(this, event.type);\n                return getter.call(this);\n            };\n        } else if (descriptor.value) {\n            const method = descriptor.value;\n            const newMethod = function (this: ISAMObject, ...args: any[]): any {\n                this._core._environment.mobx.reportObserved(this, event.type);\n                return (method as any).apply(this, args);\n            };\n            descriptor.value = newMethod;\n        } else {\n            throw new Error('@observable decorator can only be used with `getters` or `methods`.');\n        }\n    };\n}\n\n// With `@observable` (no parens), observable is called with target, key, descriptor\nfunction observable(target: ISAMObject, key: string, descriptor: PropertyDescriptor): void;\n// @observable(SomeEvent)\n// @observable(SomeEvent, '_prop1')\n// @observable(SomeEvent, ['_prop1', '_prop2'])\nfunction observable(event: IEvent, privatePropNames?: string | string[]): ReturnType<typeof observableImpl>;\nfunction observable(arg1: IEvent | ISAMObject, arg2?: string | string[], arg3?: PropertyDescriptor): ReturnType<typeof observableImpl> | void {\n    // @observable without parens\n    if (arg1 && arg2 && arg3) {\n        return observableImpl(SharedChangeEvent)(arg1 as ISAMObject, arg2 as string, arg3);\n    }\n    // @observable(SomeEvent)\n    // @observable(SomeEvent, '_prop1')\n    // @observable(SomeEvent, ['_prop1', '_prop2'])\n    if (typeof (arg1 as IEvent).type === 'string' && (typeof arg2 === 'string' || typeof arg2 === 'undefined' || Array.isArray(arg2))) {\n        arg2 = arg2 ? [].concat(arg2 as any) : undefined;\n        return observableImpl(arg1 as IEvent, arg2);\n    }\n    throw new Error('Invalid arguments for @observable');\n}\n\nexport default observable;\n","(function (global, factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine('uri-templates', [], factory);\n\t} else if (typeof module !== 'undefined' && module.exports){\n\t\tmodule.exports = factory();\n\t} else {\n\t\tglobal.UriTemplate = factory();\n\t}\n})(this, function () {\n\tvar uriTemplateGlobalModifiers = {\n\t\t\"+\": true,\n\t\t\"#\": true,\n\t\t\".\": true,\n\t\t\"/\": true,\n\t\t\";\": true,\n\t\t\"?\": true,\n\t\t\"&\": true\n\t};\n\tvar uriTemplateSuffices = {\n\t\t\"*\": true\n\t};\n\tvar urlEscapedChars = /[:/&?#]/;\n\n\tfunction notReallyPercentEncode(string) {\n\t\treturn encodeURI(string).replace(/%25[0-9][0-9]/g, function (doubleEncoded) {\n\t\t\treturn \"%\" + doubleEncoded.substring(3);\n\t\t});\n\t}\n\n\tfunction isPercentEncoded(string) {\n\t\tstring = string.replace(/%../g, '');\n\t\treturn encodeURIComponent(string) === string;\n\t}\n\n\tfunction uriTemplateSubstitution(spec) {\n\t\tvar modifier = \"\";\n\t\tif (uriTemplateGlobalModifiers[spec.charAt(0)]) {\n\t\t\tmodifier = spec.charAt(0);\n\t\t\tspec = spec.substring(1);\n\t\t}\n\t\tvar separator = \"\";\n\t\tvar prefix = \"\";\n\t\tvar shouldEscape = true;\n\t\tvar showVariables = false;\n\t\tvar trimEmptyString = false;\n\t\tif (modifier == '+') {\n\t\t\tshouldEscape = false;\n\t\t} else if (modifier == \".\") {\n\t\t\tprefix = \".\";\n\t\t\tseparator = \".\";\n\t\t} else if (modifier == \"/\") {\n\t\t\tprefix = \"/\";\n\t\t\tseparator = \"/\";\n\t\t} else if (modifier == '#') {\n\t\t\tprefix = \"#\";\n\t\t\tshouldEscape = false;\n\t\t} else if (modifier == ';') {\n\t\t\tprefix = \";\";\n\t\t\tseparator = \";\",\n\t\t\tshowVariables = true;\n\t\t\ttrimEmptyString = true;\n\t\t} else if (modifier == '?') {\n\t\t\tprefix = \"?\";\n\t\t\tseparator = \"&\",\n\t\t\tshowVariables = true;\n\t\t} else if (modifier == '&') {\n\t\t\tprefix = \"&\";\n\t\t\tseparator = \"&\",\n\t\t\tshowVariables = true;\n\t\t}\n\n\t\tvar varNames = [];\n\t\tvar varList = spec.split(\",\");\n\t\tvar varSpecs = [];\n\t\tvar varSpecMap = {};\n\t\tfor (var i = 0; i < varList.length; i++) {\n\t\t\tvar varName = varList[i];\n\t\t\tvar truncate = null;\n\t\t\tif (varName.indexOf(\":\") != -1) {\n\t\t\t\tvar parts = varName.split(\":\");\n\t\t\t\tvarName = parts[0];\n\t\t\t\ttruncate = parseInt(parts[1]);\n\t\t\t}\n\t\t\tvar suffices = {};\n\t\t\twhile (uriTemplateSuffices[varName.charAt(varName.length - 1)]) {\n\t\t\t\tsuffices[varName.charAt(varName.length - 1)] = true;\n\t\t\t\tvarName = varName.substring(0, varName.length - 1);\n\t\t\t}\n\t\t\tvar varSpec = {\n\t\t\t\ttruncate: truncate,\n\t\t\t\tname: varName,\n\t\t\t\tsuffices: suffices\n\t\t\t};\n\t\t\tvarSpecs.push(varSpec);\n\t\t\tvarSpecMap[varName] = varSpec;\n\t\t\tvarNames.push(varName);\n\t\t}\n\t\tvar subFunction = function (valueFunction) {\n\t\t\tvar result = \"\";\n\t\t\tvar startIndex = 0;\n\t\t\tfor (var i = 0; i < varSpecs.length; i++) {\n\t\t\t\tvar varSpec = varSpecs[i];\n\t\t\t\tvar value = valueFunction(varSpec.name);\n\t\t\t\tif (value == null || (Array.isArray(value) && value.length == 0) || (typeof value == 'object' && Object.keys(value).length == 0)) {\n\t\t\t\t\tstartIndex++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (i == startIndex) {\n\t\t\t\t\tresult += prefix;\n\t\t\t\t} else {\n\t\t\t\t\tresult += (separator || \",\");\n\t\t\t\t}\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\tif (showVariables) {\n\t\t\t\t\t\tresult += varSpec.name + \"=\";\n\t\t\t\t\t}\n\t\t\t\t\tfor (var j = 0; j < value.length; j++) {\n\t\t\t\t\t\tif (j > 0) {\n\t\t\t\t\t\t\tresult += varSpec.suffices['*'] ? (separator || \",\") : \",\";\n\t\t\t\t\t\t\tif (varSpec.suffices['*'] && showVariables) {\n\t\t\t\t\t\t\t\tresult += varSpec.name + \"=\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresult += shouldEscape ? encodeURIComponent(value[j]).replace(/!/g, \"%21\") : notReallyPercentEncode(value[j]);\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof value == \"object\") {\n\t\t\t\t\tif (showVariables && !varSpec.suffices['*']) {\n\t\t\t\t\t\tresult += varSpec.name + \"=\";\n\t\t\t\t\t}\n\t\t\t\t\tvar first = true;\n\t\t\t\t\tfor (var key in value) {\n\t\t\t\t\t\tif (!first) {\n\t\t\t\t\t\t\tresult += varSpec.suffices['*'] ? (separator || \",\") : \",\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfirst = false;\n\t\t\t\t\t\tresult += shouldEscape ? encodeURIComponent(key).replace(/!/g, \"%21\") : notReallyPercentEncode(key);\n\t\t\t\t\t\tresult += varSpec.suffices['*'] ? '=' : \",\";\n\t\t\t\t\t\tresult += shouldEscape ? encodeURIComponent(value[key]).replace(/!/g, \"%21\") : notReallyPercentEncode(value[key]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (showVariables) {\n\t\t\t\t\t\tresult += varSpec.name;\n\t\t\t\t\t\tif (!trimEmptyString || value != \"\") {\n\t\t\t\t\t\t\tresult += \"=\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (varSpec.truncate != null) {\n\t\t\t\t\t\tvalue = value.substring(0, varSpec.truncate);\n\t\t\t\t\t}\n\t\t\t\t\tresult += shouldEscape ? encodeURIComponent(value).replace(/!/g, \"%21\"): notReallyPercentEncode(value);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\t\tvar guessFunction = function (stringValue, resultObj, strict) {\n\t\t\tif (prefix) {\n\t\t\t\tstringValue = stringValue.substring(prefix.length);\n\t\t\t}\n\t\t\tif (varSpecs.length == 1 && varSpecs[0].suffices['*']) {\n\t\t\t\tvar varSpec = varSpecs[0];\n\t\t\t\tvar varName = varSpec.name;\n\t\t\t\tvar arrayValue = varSpec.suffices['*'] ? stringValue.split(separator || \",\") : [stringValue];\n\t\t\t\tvar hasEquals = (shouldEscape && stringValue.indexOf('=') != -1);\t// There's otherwise no way to distinguish between \"{value*}\" for arrays and objects\n\t\t\t\tfor (var i = 1; i < arrayValue.length; i++) {\n\t\t\t\t\tvar stringValue = arrayValue[i];\n\t\t\t\t\tif (hasEquals && stringValue.indexOf('=') == -1) {\n\t\t\t\t\t\t// Bit of a hack - if we're expecting \"=\" for key/value pairs, and values can't contain \"=\", then assume a value has been accidentally split\n\t\t\t\t\t\tarrayValue[i - 1] += (separator || \",\") + stringValue;\n\t\t\t\t\t\tarrayValue.splice(i, 1);\n\t\t\t\t\t\ti--;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (var i = 0; i < arrayValue.length; i++) {\n\t\t\t\t\tvar stringValue = arrayValue[i];\n\t\t\t\t\tif (shouldEscape && stringValue.indexOf('=') != -1) {\n\t\t\t\t\t\thasEquals = true;\n\t\t\t\t\t}\n\t\t\t\t\tvar innerArrayValue = stringValue.split(\",\");\n\t\t\t\t\tif (innerArrayValue.length == 1) {\n\t\t\t\t\t\tarrayValue[i] = innerArrayValue[0];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tarrayValue[i] = innerArrayValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (showVariables || hasEquals) {\n\t\t\t\t\tvar objectValue = resultObj[varName] || {};\n\t\t\t\t\tfor (var j = 0; j < arrayValue.length; j++) {\n\t\t\t\t\t\tvar innerValue = stringValue;\n\t\t\t\t\t\tif (showVariables && !innerValue) {\n\t\t\t\t\t\t\t// The empty string isn't a valid variable, so if our value is zero-length we have nothing\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (typeof arrayValue[j] == \"string\") {\n\t\t\t\t\t\t\tvar stringValue = arrayValue[j];\n\t\t\t\t\t\t\tvar innerVarName = stringValue.split(\"=\", 1)[0];\n\t\t\t\t\t\t\tvar stringValue = stringValue.substring(innerVarName.length + 1);\n\t\t\t\t\t\t\tif (shouldEscape) {\n\t\t\t\t\t\t\t\tif (strict && !isPercentEncoded(stringValue)) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tstringValue = decodeURIComponent(stringValue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tinnerValue = stringValue;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar stringValue = arrayValue[j][0];\n\t\t\t\t\t\t\tvar innerVarName = stringValue.split(\"=\", 1)[0];\n\t\t\t\t\t\t\tvar stringValue = stringValue.substring(innerVarName.length + 1);\n\t\t\t\t\t\t\tif (shouldEscape) {\n\t\t\t\t\t\t\t\tif (strict && !isPercentEncoded(stringValue)) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tstringValue = decodeURIComponent(stringValue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tarrayValue[j][0] = stringValue;\n\t\t\t\t\t\t\tinnerValue = arrayValue[j];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (shouldEscape) {\n\t\t\t\t\t\t\tif (strict && !isPercentEncoded(innerVarName)) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tinnerVarName = decodeURIComponent(innerVarName);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (objectValue[innerVarName] !== undefined) {\n\t\t\t\t\t\t\tif (Array.isArray(objectValue[innerVarName])) {\n\t\t\t\t\t\t\t\tobjectValue[innerVarName].push(innerValue);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tobjectValue[innerVarName] = [objectValue[innerVarName], innerValue];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tobjectValue[innerVarName] = innerValue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (Object.keys(objectValue).length == 1 && objectValue[varName] !== undefined) {\n\t\t\t\t\t\tresultObj[varName] = objectValue[varName];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresultObj[varName] = objectValue;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (shouldEscape) {\n\t\t\t\t\t\tfor (var j = 0; j < arrayValue.length; j++) {\n\t\t\t\t\t\t\tvar innerArrayValue = arrayValue[j];\n\t\t\t\t\t\t\tif (Array.isArray(innerArrayValue)) {\n\t\t\t\t\t\t\t\tfor (var k = 0; k < innerArrayValue.length; k++) {\n\t\t\t\t\t\t\t\t\tif (strict && !isPercentEncoded(innerArrayValue[k])) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tinnerArrayValue[k] = decodeURIComponent(innerArrayValue[k]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (strict && !isPercentEncoded(innerArrayValue)) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tarrayValue[j] = decodeURIComponent(innerArrayValue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (resultObj[varName] !== undefined) {\n\t\t\t\t\t\tif (Array.isArray(resultObj[varName])) {\n\t\t\t\t\t\t\tresultObj[varName] = resultObj[varName].concat(arrayValue);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresultObj[varName] = [resultObj[varName]].concat(arrayValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (arrayValue.length == 1 && !varSpec.suffices['*']) {\n\t\t\t\t\t\t\tresultObj[varName] = arrayValue[0];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresultObj[varName] = arrayValue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar arrayValue = (varSpecs.length == 1) ? [stringValue] : stringValue.split(separator || \",\");\n\t\t\t\tvar specIndexMap = {};\n\t\t\t\tfor (var i = 0; i < arrayValue.length; i++) {\n\t\t\t\t\t// Try from beginning\n\t\t\t\t\tvar firstStarred = 0;\n\t\t\t\t\tfor (; firstStarred < varSpecs.length - 1 && firstStarred < i; firstStarred++) {\n\t\t\t\t\t\tif (varSpecs[firstStarred].suffices['*']) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (firstStarred == i) {\n\t\t\t\t\t\t// The first [i] of them have no \"*\" suffix\n\t\t\t\t\t\tspecIndexMap[i] = i;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Try from the end\n\t\t\t\t\t\tfor (var lastStarred = varSpecs.length - 1; lastStarred > 0 && (varSpecs.length - lastStarred) < (arrayValue.length - i); lastStarred--) {\n\t\t\t\t\t\t\tif (varSpecs[lastStarred].suffices['*']) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ((varSpecs.length - lastStarred) == (arrayValue.length - i)) {\n\t\t\t\t\t\t\t// The last [length - i] of them have no \"*\" suffix\n\t\t\t\t\t\t\tspecIndexMap[i] = lastStarred;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// Just give up and use the first one\n\t\t\t\t\tspecIndexMap[i] = firstStarred;\n\t\t\t\t}\n\t\t\t\tfor (var i = 0; i < arrayValue.length; i++) {\n\t\t\t\t\tvar stringValue = arrayValue[i];\n\t\t\t\t\tif (!stringValue && showVariables) {\n\t\t\t\t\t\t// The empty string isn't a valid variable, so if our value is zero-length we have nothing\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tvar innerArrayValue = stringValue.split(\",\");\n\t\t\t\t\tvar hasEquals = false;\n\n\t\t\t\t\tif (showVariables) {\n\t\t\t\t\t\tvar stringValue = innerArrayValue[0]; // using innerArrayValue\n\t\t\t\t\t\tvar varName = stringValue.split(\"=\", 1)[0];\n\t\t\t\t\t\tvar stringValue = stringValue.substring(varName.length + 1);\n\t\t\t\t\t\tinnerArrayValue[0] = stringValue;\n\t\t\t\t\t\tvar varSpec = varSpecMap[varName] || varSpecs[0];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar varSpec = varSpecs[specIndexMap[i]];\n\t\t\t\t\t\tvar varName = varSpec.name;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (var j = 0; j < innerArrayValue.length; j++) {\n\t\t\t\t\t\tif (shouldEscape) {\n\t\t\t\t\t\t\tif (strict && !isPercentEncoded(innerArrayValue[j])) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tinnerArrayValue[j] = decodeURIComponent(innerArrayValue[j]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif ((showVariables || varSpec.suffices['*'])&& resultObj[varName] !== undefined) {\n\t\t\t\t\t\tif (Array.isArray(resultObj[varName])) {\n\t\t\t\t\t\t\tresultObj[varName] = resultObj[varName].concat(innerArrayValue);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresultObj[varName] = [resultObj[varName]].concat(innerArrayValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (innerArrayValue.length == 1 && !varSpec.suffices['*']) {\n\t\t\t\t\t\t\tresultObj[varName] = innerArrayValue[0];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresultObj[varName] = innerArrayValue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn 1;\n\t\t};\n\t\treturn {\n\t\t\tvarNames: varNames,\n\t\t\tprefix: prefix,\n\t\t\tsubstitution: subFunction,\n\t\t\tunSubstitution: guessFunction\n\t\t};\n\t}\n\n\tfunction UriTemplate(template) {\n\t\tif (!(this instanceof UriTemplate)) {\n\t\t\treturn new UriTemplate(template);\n\t\t}\n\t\tvar parts = template.split(\"{\");\n\t\tvar textParts = [parts.shift()];\n\t\tvar prefixes = [];\n\t\tvar substitutions = [];\n\t\tvar unSubstitutions = [];\n\t\tvar varNames = [];\n\t\twhile (parts.length > 0) {\n\t\t\tvar part = parts.shift();\n\t\t\tvar spec = part.split(\"}\")[0];\n\t\t\tvar remainder = part.substring(spec.length + 1);\n\t\t\tvar funcs = uriTemplateSubstitution(spec);\n\t\t\tsubstitutions.push(funcs.substitution);\n\t\t\tunSubstitutions.push(funcs.unSubstitution);\n\t\t\tprefixes.push(funcs.prefix);\n\t\t\ttextParts.push(remainder);\n\t\t\tvarNames = varNames.concat(funcs.varNames);\n\t\t}\n\t\tthis.fill = function (valueFunction) {\n\t\t\tif (valueFunction && typeof valueFunction !== 'function') {\n\t\t\t\tvar value = valueFunction;\n\t\t\t\tvalueFunction = function (varName) {\n\t\t\t\t\treturn value[varName];\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tvar result = textParts[0];\n\t\t\tfor (var i = 0; i < substitutions.length; i++) {\n\t\t\t\tvar substitution = substitutions[i];\n\t\t\t\tresult += substitution(valueFunction);\n\t\t\t\tresult += textParts[i + 1];\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\t\tthis.fromUri = function (substituted, options) {\n\t\t\toptions = options || {};\n\t\t\tvar result = {};\n\t\t\tfor (var i = 0; i < textParts.length; i++) {\n\t\t\t\tvar part = textParts[i];\n\t\t\t\tif (substituted.substring(0, part.length) !== part) {\n\t\t\t\t\treturn /*undefined*/;\n\t\t\t\t}\n\t\t\t\tsubstituted = substituted.substring(part.length);\n\t\t\t\tif (i >= textParts.length - 1) {\n\t\t\t\t\t// We've run out of input - is there any template left?\n\t\t\t\t\tif (substituted == \"\") {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn /*undefined*/;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar prefix = prefixes[i];\n\t\t\t\tif (prefix && substituted.substring(0, prefix.length) !== prefix) {\n\t\t\t\t\t// All values are optional - if we have a prefix and it doesn't match, move along\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Find the next part to un-substitute\n\t\t\t\tvar nextPart = textParts[i + 1];\n\t\t\t\tvar offset = i;\n\t\t\t\twhile (true) {\n\t\t\t\t\tif (offset == textParts.length - 2) {\n\t\t\t\t\t\tvar endPart = substituted.substring(substituted.length - nextPart.length);\n\t\t\t\t\t\tif (endPart !== nextPart) {\n\t\t\t\t\t\t\treturn /*undefined*/;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar stringValue = substituted.substring(0, substituted.length - nextPart.length);\n\t\t\t\t\t\tsubstituted = endPart;\n\t\t\t\t\t} else if (nextPart) {\n\t\t\t\t\t\tvar nextPartPos = substituted.indexOf(nextPart);\n\t\t\t\t\t\tvar stringValue = substituted.substring(0, nextPartPos);\n\t\t\t\t\t\tsubstituted = substituted.substring(nextPartPos);\n\t\t\t\t\t} else if (prefixes[offset + 1]) {\n\t\t\t\t\t\tvar nextPartPos = substituted.indexOf(prefixes[offset + 1]);\n\t\t\t\t\t\tif (nextPartPos === -1) nextPartPos = substituted.length;\n\t\t\t\t\t\tvar stringValue = substituted.substring(0, nextPartPos);\n\t\t\t\t\t\tsubstituted = substituted.substring(nextPartPos);\n\t\t\t\t\t} else if (textParts.length > offset + 2) {\n\t\t\t\t\t\t// If the separator between this variable and the next is blank (with no prefix), continue onwards\n\t\t\t\t\t\toffset++;\n\t\t\t\t\t\tnextPart = textParts[offset + 1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar stringValue = substituted;\n\t\t\t\t\t\tsubstituted = \"\";\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!unSubstitutions[i](stringValue, result, options.strict)) {\n\t\t\t\t\treturn /*undefined*/;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\tthis.varNames = varNames;\n\t\tthis.template = template;\n\t}\n\tUriTemplate.prototype = {\n\t\ttoString: function () {\n\t\t\treturn this.template;\n\t\t},\n\t\tfillFromObject: function (obj) {\n\t\t\treturn this.fill(obj);\n\t\t},\n\t\ttest: function (uri, options) {\n\t\t\treturn !!this.fromUri(uri, options)\n\t\t}\n\t};\n\n\treturn UriTemplate;\n});\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport SAMError, { SAMErrorCode } from '../core/SAMError';\nimport UriTemplate from 'uri-templates';\n\nexport type HeaderMap = {[s: string]: string | undefined };\n\nexport const JSON_MIME_TYPE = 'application/json';\nexport const JSON_PATCH_MIME_TYPE = 'application/json-patch+json';\n\nexport enum RelType {\n    // Repository API\n\n    PRIMARY = 'http://ns.adobe.com/adobecloud/rel/primary',\n    ID = 'http://ns.adobe.com/adobecloud/rel/id',\n    PATH = 'http://ns.adobe.com/adobecloud/rel/path',\n    RENDITION = 'http://ns.adobe.com/adobecloud/rel/rendition',\n    COMPONENT_RENDITION = 'http://ns.adobe.com/adobecloud/rel/componentRendition',\n    MANIFEST = 'http://ns.adobe.com/adobecloud/rel/manifest',\n    QUOTA = 'http://ns.adobe.com/adobecloud/rel/quota',\n    COMPONENT = 'http://ns.adobe.com/adobecloud/rel/component',\n    PAGE = 'http://ns.adobe.com/adobecloud/rel/page',\n    DISCARD = 'http://ns.adobe.com/adobecloud/rel/discard',\n    RESTORE = 'http://ns.adobe.com/adobecloud/rel/restore',\n    DIRECTORY = 'http://ns.adobe.com/adobecloud/rel/directory',\n    DIRECTORY_BASE = 'http://ns.adobe.com/adobecloud/rel/directory/base',\n    AC_EFFECTIVE = 'http://ns.adobe.com/adobecloud/rel/ac/effective',\n    AC_POLICY = 'http://ns.adobe.com/adobecloud/rel/ac/policy',\n    AC_CHECK = 'http://ns.adobe.com/adobecloud/rel/ac/check',\n    CREATE = 'http://ns.adobe.com/adobecloud/rel/create',\n    REPOSITORY = 'http://ns.adobe.com/adobecloud/rel/repository',\n    RESOLVE_ID = 'http://ns.adobe.com/adobecloud/rel/resolve/id',\n    RESOLVE_PATH = 'http://ns.adobe.com/adobecloud/rel/resolve/path',\n    OPS = 'http://ns.adobe.com/adobecloud/rel/ops',\n    BLOCK_INITIALIZE = 'http://ns.adobe.com/adobecloud/rel/block/init',\n    BLOCK_TRANSFER = 'http://ns.adobe.com/adobecloud/rel/block/transfer',\n    BLOCK_FINALIZE = 'http://ns.adobe.com/adobecloud/rel/block/finalize',\n    REPO_METADATA = 'http://ns.adobe.com/adobecloud/rel/metadata/repository',\n    APP_METADATA = 'http://ns.adobe.com/adobecloud/rel/metadata/application',\n    EMBEDDED_METADATA = 'http://ns.adobe.com/adobecloud/rel/metadata/embedded',\n    PERUSER_METADATA = 'http://ns.adobe.com/adobecloud/rel/metadata/peruser',\n    ANNOTATIONS = 'http://ns.adobe.com/adobecloud/rel/annotations',\n    DOWNLOAD = 'http://ns.adobe.com/adobecloud/rel/download',\n    DESCRIBED_BY = 'describedBy',\n    VERSION = 'version-history',\n\n    // ONS\n    SUBSCRIPTION_CREATE = 'subscription/create',\n    NOTIFICATIONS_LONGPOLL = 'notifications/longpoll',\n    ONS_CHANGELOG = 'ons/changelog',\n\n    // Projects API\n    REPOSITORIES_PAGE = 'http://ns.adobe.com/repositories/rel/page',\n    TEAMS_CREATE = 'http://ns.adobe.com/teams/rel/create',\n    TEAMS_DISCARD = 'http://ns.adobe.com/teams/rel/discard',\n    TEAMS_RESTORE = 'http://ns.adobe.com/teams/rel/restore',\n    TEAMS_RENAME = 'http://ns.adobe.com/teams/rel/rename',\n    TEAMS_PROPERTIES = 'http://ns.adobe.com/teams/rel/properties',\n    TEAMS_PAGE = 'http://ns.adobe.com/teams/rel/page',\n    TEAMS_PRIMARY = 'http://ns.adobe.com/teams/rel/primary',\n    TEAM_PROVISION = 'http://ns.adobe.com/teams/rel/provision',\n\n    WORKSPACES_CONTEXT = 'http://ns.adobe.com/ccprojects/rel/context',\n    WORKSPACES_BOOKMARKS_BATCH = 'http://ns.adobe.com/ccprojects/rel/bookmarks/batch',\n    WORKSPACES_PRIMARY = 'http://ns.adobe.com/ccprojects/rel/primary',\n    WORKSPACES_CREATE = 'http://ns.adobe.com/ccprojects/rel/create',\n    WORKSPACES_PAGE = 'http://ns.adobe.com/ccprojects/rel/page',\n\n    PROJECTS_LIBRARIES_PAGE = 'http://ns.adobe.com/ccprojects/rel/libraries/page',\n    PROJECTS_LIBRARIES_CREATE = 'http://ns.adobe.com/ccprojects/rel/libraries/create',\n    PROJECTS_LIBRARIES_BATCH = 'http://ns.adobe.com/ccprojects/rel/libraries/batch',\n\n    GENERIC_PAGE = 'page',\n    GENERIC_NEXT = 'next',\n\n    // Asset Transfer Service\n\n    ATS_MOVE = 'http://ns.adobe.com/ats/rel/move',\n\n    // Review Service\n    REVIEW_SERVICE_PROVISION = 'http://ns.adobe.com/ccassetreview/rel/provision',\n    REVIEW_SERVICE_DISCARD = 'http://ns.adobe.com/ccassetreview/rel/discard',\n    REVIEW_SERVICE_OUTPUTS = 'http://ns.adobe.com/ccassetreview/rel/outputs',\n    REVIEW_SERIVCE_HAS_OUTPUTS = 'http://ns.adobe.com/ccassetreview/rel/hasoutputs',\n\n    // Projects service v3\n    PROJECTS_CONTEXT = 'http://ns.adobe.com/projects/rel/context',\n    PROJECTS_PRIMARY = 'http://ns.adobe.com/projects/rel/primary',\n    PROJECTS_COLLECTION = 'http://ns.adobe.com/projects/rel/collection',\n    PROJECTS_CREATE = 'http://ns.adobe.com/projects/rel/create',\n    PROJECTS_RENAME = 'http://ns.adobe.com/projects/rel/rename',\n    PROJECTS_CREATOR = 'http://ns.adobe.com/projects/rel/creator',\n    PROJECTS_GRADIENTS_COLLECTION = 'http://ns.adobe.com/gradients/rel/collection',\n    PROJECTS_CAPABILITY = 'http://ns.adobe.com/projects/rel/capability',\n\n    // Assignment service\n    ASSIGNMENTS_ASSIGN = 'http://ns.adobe.com/assignments/rel/assign',\n    ASSIGNMENTS_COLLECTION = 'http://ns.adobe.com/assignments/rel/collection',\n    ASSIGNMENTS_CREATE = 'http://ns.adobe.com/assignments/rel/create',\n    ASSIGNMENTS_PRIMARY = 'http://ns.adobe.com/assignments/rel/primary',\n    ASSIGNMENTS_RETURN = 'http://ns.adobe.com/assignments/rel/return',\n    ASSIGNMENTS_START = 'http://ns.adobe.com/assignments/rel/start',\n    ASSIGNMENTS_SUBMIT = 'http://ns.adobe.com/assignments/rel/submit',\n}\n\nexport interface IServiceLink {\n    href: string;\n    templated?: boolean;\n    mode?: string;\n    type?: string;\n}\n\nexport type LinkRequirements = Partial<{ [key in RelType]: string[] }>;\n\nexport function validateLinkParameters(links: any, key: RelType, params: string[]): boolean {\n    try {\n        const templateString = getTemplateFromLinks(links, key);\n        const template = UriTemplate(templateString);\n\n        // Check that required arguments are available.\n        return params.every((param) => template.varNames.indexOf(param) !== -1);\n    } catch {\n        // We only care if the link is valid. If it is not valid, then we will return false,\n        // so that our caches could be invalidated correctly.\n        return false;\n    }\n}\n\nexport function validateLinks(links: any, requirements?: LinkRequirements): boolean {\n    if (links === undefined) {\n        return true;\n    }\n\n    if (Object(links) !== links) {\n        return false;\n    }\n\n    // All links should have an href\n    const hasMissingHrefs = Object.keys(links).some(key => {\n        const link = links[key];\n\n        if (!Array.isArray(link)) {\n            return typeof link.href !== 'string';\n        }\n\n        return link.some(({ href }) => typeof href !== 'string');\n    });\n    if (hasMissingHrefs) {\n        return false;\n    }\n\n    if (requirements) {\n        const keys = Object.keys(requirements) as RelType[];\n        const hasAllParameters = keys.every((key) => validateLinkParameters(links, key, requirements[key]!));\n        if (!hasAllParameters) {\n            return false;\n        }\n    }\n\n    return true;\n}\n\nexport function getLink(links: any, key: RelType): IServiceLink {\n\n    let link = links && links[key];\n\n    if (!link || (Array.isArray(link) && link.length === 0)) {\n        // The callers of these methods would fail without an actual URL.\n        // It is better to fail early by throwing a proper exception.\n        throw SAMError.create(SAMErrorCode.BAD_REQUEST, `Missing link for relationship type: ${key}.`);\n    }\n\n    if (Array.isArray(link)) {\n        link = link[0];\n    }\n\n    return link;\n}\n\nexport function getTemplateFromLinks(links: any, key: RelType): string {\n    return getLink(links, key).href;\n}\n\nexport function getURLFromLinks(links: any, key: RelType, params: {[s: string]: string | string[]} = {}): string {\n    const templateString = getTemplateFromLinks(links, key);\n\n    const template = UriTemplate(templateString);\n    return template && template.fill(params);\n}\n\nconst RETRY_RANDOM_SECONDS = 30; // Choose random seconds between [0,x] for retry-after as a date\n\nexport function getRetryAfterHeader(headers?: Headers): number {\n    const retryAfterHeader = headers && headers.get('Retry-After');\n    if (retryAfterHeader) {\n        try {\n            // First, try to parse it as a number (retry time in seconds)\n            const retryTime = parseInt(retryAfterHeader, 10);\n            if (retryTime) {\n                return Math.max(0, retryTime);\n            }\n\n            // If that fails, try to parse it as a date\n            const retryDate = Date.parse(retryAfterHeader);\n            if (retryDate) {\n                // Need to add a randomised element to ensure requests don't all come back at the same time\n                const now = Date.now();\n                const retrySeconds = Math.max(0, retryDate - now) / 1000;\n                const retryRandom = Math.floor(Math.random() * RETRY_RANDOM_SECONDS);\n                return retrySeconds + retryRandom;\n            }\n        } catch (e) {\n            // ignore\n        }\n    }\n\n    return 0;\n}\n\n/**\n * Add query parameters to a url from an object.\n * @param url\n * @param queryParams\n * @returns encoded url with query params\n */\nexport function fillURLTemplate(url: string, queryParams: Record<string, any>): string {\n    const template = UriTemplate(`${url}{?queryParams*}`);\n    return template.fillFromObject({ queryParams });\n}\n","'use strict'\n\nvar COMPATIBLE_ENCODING_PATTERN = /^utf-?8|ascii|utf-?16-?le|ucs-?2|base-?64|latin-?1$/i\nvar WS_TRIM_PATTERN = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g\nvar WS_CHAR_PATTERN = /\\s|\\uFEFF|\\xA0/\nvar WS_FOLD_PATTERN = /\\r?\\n[\\x20\\x09]+/g\nvar DELIMITER_PATTERN = /[;,\"]/\nvar WS_DELIMITER_PATTERN = /[;,\"]|\\s/\n\n/**\n * Token character pattern\n * @type {RegExp}\n * @see https://tools.ietf.org/html/rfc7230#section-3.2.6\n */\nvar TOKEN_PATTERN = /^[!#$%&'*+\\-\\.^_`|~\\da-zA-Z]+$/\n\nvar STATE = {\n  IDLE: 1 << 0,\n  URI: 1 << 1,\n  ATTR: 1 << 2,\n}\n\nfunction trim( value ) {\n  return value.replace( WS_TRIM_PATTERN, '' )\n}\n\nfunction hasWhitespace( value ) {\n  return WS_CHAR_PATTERN.test( value )\n}\n\nfunction skipWhitespace( value, offset ) {\n  while( hasWhitespace( value[offset] ) ) {\n    offset++\n  }\n  return offset\n}\n\nfunction needsQuotes( value ) {\n  return WS_DELIMITER_PATTERN.test( value ) ||\n    !TOKEN_PATTERN.test( value )\n}\n\n/**\n * Shallow compares two objects to check if their properties match.\n * @param {object} object1 First object to compare.\n * @param {object} object2 Second object to compare.\n * @returns {boolean} Do the objects have matching properties.\n */\nfunction shallowCompareObjects( object1, object2 ) {\n  return (\n    Object.keys( object1 ).length === Object.keys( object2 ).length &&\n    Object.keys( object1 ).every(\n      ( key ) => key in object2 && object1[ key ] === object2[ key ]\n    )\n  );\n}\n\nclass Link {\n\n  /**\n   * Link\n   * @constructor\n   * @param {String} [value]\n   * @returns {Link}\n   */\n  constructor( value ) {\n\n    /** @type {Array} URI references */\n    this.refs = []\n\n    if( value ) {\n      this.parse( value )\n    }\n\n  }\n\n  /**\n   * Get refs with given relation type\n   * @param {String} value\n   * @returns {Array<Object>}\n   */\n  rel( value ) {\n\n    var links = []\n    var type = value.toLowerCase()\n\n    for( var i = 0; i < this.refs.length; i++ ) {\n      if( this.refs[ i ].rel.toLowerCase() === type ) {\n        links.push( this.refs[ i ] )\n      }\n    }\n\n    return links\n\n  }\n\n  /**\n   * Get refs where given attribute has a given value\n   * @param {String} attr\n   * @param {String} value\n   * @returns {Array<Object>}\n   */\n  get( attr, value ) {\n\n    attr = attr.toLowerCase()\n\n    var links = []\n\n    for( var i = 0; i < this.refs.length; i++ ) {\n      if( this.refs[ i ][ attr ] === value ) {\n        links.push( this.refs[ i ] )\n      }\n    }\n\n    return links\n\n  }\n\n  /** Sets a reference. */\n  set( link ) {\n    this.refs.push( link )\n    return this\n  }\n\n  /**\n   * Sets a reference if a reference with similar properties isn’t already set.\n   */\n  setUnique( link ) {\n\n    if( !this.refs.some(( ref ) => shallowCompareObjects( ref, link )) ) {\n      this.refs.push( link )\n    }\n\n    return this\n\n  }\n\n  has( attr, value ) {\n\n    attr = attr.toLowerCase()\n\n    for( var i = 0; i < this.refs.length; i++ ) {\n      if( this.refs[ i ][ attr ] === value ) {\n        return true\n      }\n    }\n\n    return false\n\n  }\n\n  parse( value, offset ) {\n\n    offset = offset || 0\n    value = offset ? value.slice( offset ) : value\n\n    // Trim & unfold folded lines\n    value = trim( value ).replace( WS_FOLD_PATTERN, '' )\n\n    var state = STATE.IDLE\n    var length = value.length\n    var offset = 0\n    var ref = null\n\n    while( offset < length ) {\n      if( state === STATE.IDLE ) {\n        if( hasWhitespace( value[offset] ) ) {\n          offset++\n          continue\n        } else if( value[offset] === '<' ) {\n          if( ref != null ) {\n            ref.rel != null ?\n              this.refs.push( ...Link.expandRelations( ref ) ) :\n              this.refs.push( ref )\n          }\n          var end = value.indexOf( '>', offset )\n          if( end === -1 ) throw new Error( 'Expected end of URI delimiter at offset ' + offset )\n          ref = { uri: value.slice( offset + 1, end ) }\n          // this.refs.push( ref )\n          offset = end\n          state = STATE.URI\n        } else {\n          throw new Error( 'Unexpected character \"' + value[offset] + '\" at offset ' + offset )\n        }\n        offset++\n      } else if( state === STATE.URI ) {\n        if( hasWhitespace( value[offset] ) ) {\n          offset++\n          continue\n        } else if( value[offset] === ';' ) {\n          state = STATE.ATTR\n          offset++\n        } else if( value[offset] === ',' ) {\n          state = STATE.IDLE\n          offset++\n        } else {\n          throw new Error( 'Unexpected character \"' + value[offset] + '\" at offset ' + offset )\n        }\n      } else if( state === STATE.ATTR ) {\n        if( value[offset] ===';' || hasWhitespace( value[offset] ) ) {\n          offset++\n          continue\n        }\n        var end = value.indexOf( '=', offset )\n        if( end === -1 ) throw new Error( 'Expected attribute delimiter at offset ' + offset )\n        var attr = trim( value.slice( offset, end ) ).toLowerCase()\n        var attrValue = ''\n        offset = end + 1\n        offset = skipWhitespace( value, offset )\n        if( value[offset] === '\"' ) {\n          offset++\n          while( offset < length ) {\n            if( value[offset] === '\"' ) {\n              offset++; break\n            }\n            if( value[offset] === '\\\\' ) {\n              offset++\n            }\n            attrValue += value[offset]\n            offset++\n          }\n        } else {\n          var end = offset + 1\n          while( !DELIMITER_PATTERN.test( value[end] ) && end < length ) {\n            end++\n          }\n          attrValue = value.slice( offset, end )\n          offset = end\n        }\n        if( ref[ attr ] && Link.isSingleOccurenceAttr( attr ) ) {\n          // Ignore multiples of attributes which may only appear once\n        } else if( attr[ attr.length - 1 ] === '*' ) {\n          ref[ attr ] = Link.parseExtendedValue( attrValue )\n        } else {\n          attrValue = attr === 'type' ?\n            attrValue.toLowerCase() : attrValue\n          if( ref[ attr ] != null ) {\n            if( Array.isArray( ref[ attr ] ) ) {\n              ref[ attr ].push( attrValue )\n            } else {\n              ref[ attr ] = [ ref[ attr ], attrValue ]\n            }\n          } else {\n            ref[ attr ] = attrValue\n          }\n        }\n        switch( value[offset] ) {\n          case ',': state = STATE.IDLE; break\n          case ';': state = STATE.ATTR; break\n        }\n        offset++\n      } else {\n        throw new Error( 'Unknown parser state \"' + state + '\"' )\n      }\n    }\n\n    if( ref != null ) {\n      ref.rel != null ?\n        this.refs.push( ...Link.expandRelations( ref ) ) :\n        this.refs.push( ref )\n    }\n\n    ref = null\n\n    return this\n\n  }\n\n  toString() {\n\n    var refs = []\n    var link = ''\n    var ref = null\n\n    for( var i = 0; i < this.refs.length; i++ ) {\n      ref = this.refs[i]\n      link = Object.keys( this.refs[i] ).reduce( function( link, attr ) {\n        if( attr === 'uri' ) return link\n        return link + '; ' + Link.formatAttribute( attr, ref[ attr ] )\n      }, '<' + ref.uri + '>' )\n      refs.push( link )\n    }\n\n    return refs.join( ', ' )\n\n  }\n\n}\n\n/**\n * Determines whether an encoding can be\n * natively handled with a `Buffer`\n * @param {String} value\n * @returns {Boolean}\n */\nLink.isCompatibleEncoding = function( value ) {\n  return COMPATIBLE_ENCODING_PATTERN.test( value )\n}\n\nLink.parse = function( value, offset ) {\n  return new Link().parse( value, offset )\n}\n\nLink.isSingleOccurenceAttr = function( attr ) {\n  return attr === 'rel' || attr === 'type' || attr === 'media' ||\n    attr === 'title' || attr === 'title*'\n}\n\nLink.isTokenAttr = function( attr ) {\n  return attr === 'rel' || attr === 'type' || attr === 'anchor'\n}\n\nLink.escapeQuotes = function( value ) {\n  return value.replace( /\"/g, '\\\\\"' )\n}\n\nLink.expandRelations = function( ref ) {\n  var rels = ref.rel.split( ' ' )\n  return rels.map( function( rel ) {\n    var value = Object.assign( {}, ref )\n    value.rel = rel\n    return value\n  })\n}\n\n/**\n * Parses an extended value and attempts to decode it\n * @internal\n * @param {String} value\n * @return {Object}\n */\nLink.parseExtendedValue = function( value ) {\n  var parts = /([^']+)?(?:'([^']*)')?(.+)/.exec( value )\n  return {\n    language: parts[2].toLowerCase(),\n    encoding: Link.isCompatibleEncoding( parts[1] ) ?\n      null : parts[1].toLowerCase(),\n    value: Link.isCompatibleEncoding( parts[1] ) ?\n      decodeURIComponent( parts[3] ) : parts[3]\n  }\n}\n\n/**\n * Format a given extended attribute and it's value\n * @param {String} attr\n * @param {Object} data\n * @return {String}\n */\nLink.formatExtendedAttribute = function( attr, data ) {\n\n  var encoding = ( data.encoding || 'utf-8' ).toUpperCase()\n  var language = data.language || 'en'\n\n  var encodedValue = ''\n\n  if( Buffer.isBuffer( data.value ) && Link.isCompatibleEncoding( encoding ) ) {\n    encodedValue = data.value.toString( encoding )\n  } else if( Buffer.isBuffer( data.value ) ) {\n    encodedValue = data.value.toString( 'hex' )\n      .replace( /[0-9a-f]{2}/gi, '%$1' )\n  } else {\n    encodedValue = encodeURIComponent( data.value )\n  }\n\n  return attr + '=' + encoding + '\\'' +\n    language + '\\'' + encodedValue\n\n}\n\n/**\n * Format a given attribute and it's value\n * @param {String} attr\n * @param {String|Object} value\n * @return {String}\n */\nLink.formatAttribute = function( attr, value ) {\n\n  if( Array.isArray( value ) ) {\n    return value.map(( item ) => {\n      return Link.formatAttribute( attr, item )\n    }).join( '; ' )\n  }\n\n  if( attr[ attr.length - 1 ] === '*' || typeof value !== 'string' ) {\n    return Link.formatExtendedAttribute( attr, value )\n  }\n\n  if( Link.isTokenAttr( attr ) ) {\n    value = needsQuotes( value ) ?\n      '\"' + Link.escapeQuotes( value ) + '\"' :\n      Link.escapeQuotes( value )\n  } else if( needsQuotes( value ) ) {\n    value = encodeURIComponent( value )\n    // We don't need to escape <SP> <,> <;> within quotes\n    value = value\n      .replace( /%20/g, ' ' )\n      .replace( /%2C/g, ',' )\n      .replace( /%3B/g, ';' )\n\n    value = '\"' + value + '\"'\n  }\n\n  return attr + '=' + value\n\n}\n\nmodule.exports = Link\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport SAMError, { SAMErrorCode } from '../core/SAMError';\n\n/**\n * Implements the Response structure used as a return value for\n * the `parseAsyncResponse` method below.\n *\n * The class only supports json() and text(), we should not require more than\n * text encoding for the APIs that support Async requests.\n */\nclass AsyncResponse implements Response {\n    constructor(\n        readonly url: string,\n        readonly headers: Headers,\n        readonly status: number,\n        readonly statusText: string,\n        private _text: string\n    ) {\n    }\n\n    get ok(): boolean {\n        const { status } = this;\n        return status >= 200 && status <= 299;\n    }\n\n    get redirected(): boolean {\n        return false;\n    }\n\n    get type(): ResponseType {\n        return 'basic';\n    }\n\n    async json(): Promise<any> {\n        try {\n            return JSON.parse(this._text);\n        } catch (err: any) {\n            throw SAMError.create(SAMErrorCode.INTERNAL_ERROR,\n                `Failed to parse JSON response from '${this.url}' async request.`,\n                { underlyingError: err }\n            );\n        }\n    }\n\n    async text(): Promise<string> {\n        return this._text;\n    }\n\n    get trailer(): Promise<Headers> {\n        throw SAMError.create(SAMErrorCode.UNSUPPORTED, 'AsyncResponse.trailer not implemented.');\n    }\n\n    clone(): Response {\n        const clonedHeaders = new Headers();\n        this.headers.forEach((value, key) => clonedHeaders.set(key, value));\n        return new AsyncResponse(this.url,\n            clonedHeaders,\n            this.status,\n            this.statusText,\n            this._text);\n    }\n\n    get bodyUsed(): boolean {\n        throw SAMError.create(SAMErrorCode.UNSUPPORTED, 'AsyncResponse.bodyUsed not implemented.');\n    }\n\n    get body(): ReadableStream<Uint8Array> | null {\n        throw SAMError.create(SAMErrorCode.UNSUPPORTED, 'AsyncResponse.body not implemented.');\n    }\n\n    async arrayBuffer(): Promise<ArrayBuffer> {\n        throw SAMError.create(SAMErrorCode.UNSUPPORTED, 'AsyncResponse.arrayBuffer not implemented.');\n    }\n\n    async blob(): Promise<Blob> {\n        throw SAMError.create(SAMErrorCode.UNSUPPORTED, 'AsyncResponse.blob not implemented.');\n    }\n\n    async formData(): Promise<FormData> {\n        throw SAMError.create(SAMErrorCode.UNSUPPORTED, 'AsyncResponse.formData not implemented.');\n    }\n\n}\n\n// https://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.1\n\n// OCTET          = <any 8-bit sequence of data>\n// CHAR           = <any US-ASCII character (octets 0 - 127)>\n// CTL            = <any US-ASCII control character\n//                  (octets 0 - 31) and DEL (127)>\n// SP             = <US-ASCII SP, space (32)>\n// HT             = <US-ASCII HT, horizontal-tab (9)>\n// separators     = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n//                | \",\" | \";\" | \":\" | \"\\\" | <\">\n//                | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n//                | \"{\" | \"}\" | SP | HT\n// token          = 1*<any CHAR except CTLs or separators>\n\n// A header is just a <token>, the char ':' and the value.\nfunction createHeaderRegexp() {\n    const separators = '()<@,;:\"/[]={}';\n\n    // Start from the first character that is accepted by the <token>.\n    let start = 33;\n    const regexp = [ '^([' ];\n\n    for (let i = 34; i <= 127; ++i) {\n        // We know 127 is not accepted, so we use it as a terminator for our regexp segments.\n        // None of the separators are allowed.\n        if (i === 127 || separators.indexOf(String.fromCharCode(i)) !== -1) {\n            regexp.push('\\\\' + start.toString(8));\n            if (start < i - 1) {\n                regexp.push('-\\\\' + (i - 1).toString(8));\n            }\n            start = i + 1;\n        }\n    }\n    regexp.push(']+):(.*)$');\n    return new RegExp(regexp.join(''));\n}\n\nconst END_OF_LINE = '\\n';\nconst CR = '\\r';\nconst headerRegexp = createHeaderRegexp();\nconst statusRegexp = /^[^\\s]+\\s+(\\d+)\\s*(.*)$/;\n\nclass HttpResponseParser {\n\n    private _index: number = 0;\n\n    constructor(private _text: string) {\n    }\n\n    readLine(): string | undefined {\n        const { _index, _text } = this;\n\n        // The standard expects lines to end with CRLF by default.\n        // However, it recommends to accept a single LF as well,\n        // just in case some implementations do not implement the\n        // standard correctly.\n        // Async responses only use LF.\n        const endOfLine = _text.indexOf(END_OF_LINE, _index);\n        if (endOfLine === -1) {\n            // We're done.\n            return;\n        }\n        this._index = endOfLine + END_OF_LINE.length;\n\n        let line = _text.slice(_index, endOfLine);\n        if (line.endsWith(CR)) {\n            // If we have the CR just before the LF, then we want to skip it too.\n            line = line.slice(0, -1);\n        }\n        return line;\n    }\n\n    get remainderText(): string {\n        return this._text.slice(this._index);\n    }\n\n}\n\n/**\n * Implements parsing of the async response body.\n * https://git.corp.adobe.com/pages/caf/api-spec/chapters/advanced/asynchronous_invocation.html\n *\n * The caller should check for status code 202 then call this method to extract the contents\n * of final async result. The actual result is very similar to a nested HTTP reply inside the body\n * of the initial request.\n *\n */\nexport function parseAsyncResponse(originalUrl: string, body: string): Response {\n    if (!body) {\n        throw SAMError.create(SAMErrorCode.INTERNAL_ERROR, 'Invalid async response body.');\n    }\n\n    const parser = new HttpResponseParser(body);\n\n    let status: number;\n    let statusText: string;\n\n    const statusLine = parser.readLine();\n    if (!statusLine) {\n        // throw SAMError.create(SAMErrorCode.INTERNAL_ERROR, 'Could not find async response status line.');\n        // TODO: R-API does not return the status line for operations api. Any errors are reported in data section.\n        // When this is fixed, then missing status line should be an error.\n        // https://developers.corp.adobe.com/supplemental-resources/docs/async-invocation.md/#operations-api-exception\n        status = 200;\n        statusText = '';\n    } else {\n        // The status line has 3 parts separated by spaces.\n        // Example status line: HTTP/1.1 200 Status text\n        const statusMatch = statusLine.match(statusRegexp);\n        if (!statusMatch) {\n            throw SAMError.create(SAMErrorCode.INTERNAL_ERROR, 'Invalid status line for async response.');\n        }\n\n        // The status code is the second element\n        status = parseInt(statusMatch[1], 10);\n        if (!status) {\n            throw SAMError.create(SAMErrorCode.INTERNAL_ERROR, 'Could not find status code for async response.');\n        }\n\n        statusText = statusMatch[2];\n    }\n\n    // Now we extract the headers line by line.\n    const headers: string[][] = [];\n    let headerName: string | undefined;\n\n    for (;;) {\n        const headerLine = parser.readLine();\n        if (!headerLine) {\n            break;\n        }\n\n        const match = headerLine.match(headerRegexp);\n        if (!match) {\n            if (headerName) {\n                // If this is not a token, then we just continue with the value.\n                headers.push([ headerName, headerLine ]);\n            }\n            continue;\n        }\n\n        headerName = match[1];\n        headers.push([ headerName, match[2] ]);\n    }\n\n    // 1. The last `readLine()` call above will actually jump over the empty\n    // line that separates the headers from the data section.\n    // 2. The Headers constructor below takes care of multiple headers with the\n    // same name and concatenates them as necessary.\n    return new AsyncResponse(originalUrl, new Headers(headers), status, statusText, parser.remainderText);\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport UriTemplate from 'uri-templates';\nimport LinkHeader from 'http-link-header';\nimport SAMError, { SAMErrorCode } from '../core/SAMError';\nimport type { ISAMCorePrivate, ISAMObject } from '../indexPrivate';\nimport { RelType, getRetryAfterHeader, HeaderMap } from './LinkUtils';\nimport { parseAsyncResponse } from './AsyncResponse';\nimport { IFetchOptions } from '../core/Environment';\nimport clamp from '../utils/clamp';\n\nconst VALID_HTTP_RESPONSE_CODES = [ 200 ];\nexport type ValidHttpResponseCodes = number[] | 'any';\n\n// See https://git.corp.adobe.com/pages/caf/api-spec/chapters/responses/service_responses.html\nexport const RETRY_HTTP_RESPONSE_CODES = [\n    429, // Too many requests -- request is valid but should be retried later\n    500, // Internal service error -- may be transient, client can retry\n    // 501 -- Not implemented -- client must not retry\n    502, 503, 504 // Upstream service (gateways/proxies) errors -- may be transient, client can retry\n    // >=505 -- other non-retryable errors\n];\n// Make 1 request, then MAX_ERROR_RETRIES retries\nconst MAX_ERROR_RETRIES = 5;\n\ntype PaginatedResponse = { result: any, next?: () => Promise<PaginatedResponse> };\n\nexport type InterfaceBaseFetchOptions = IFetchOptions & {\n    additionalRetryErrorCodes?: number[];\n    successResponseCodes?: ValidHttpResponseCodes;\n    headers?: HeaderMap;\n};\n\n/**\n * InterfaceBase and its subclasses are abstractions around calling into a service (not to be confused with typescript\n * interfaces). It extends fetch to provide retry and error handling logic.\n */\n\nexport default class InterfaceBase implements ISAMObject {\n    protected _useHighPriorityRequestsIfEnabled: boolean = false;\n\n    constructor(\n        readonly _core: ISAMCorePrivate\n    ) {}\n\n    private async _fetch(\n        href: string,\n        options: InterfaceBaseFetchOptions = {\n            successResponseCodes: VALID_HTTP_RESPONSE_CODES\n        },\n        retryCount: number = 0\n    ): Promise<Response> {\n        const {\n            additionalRetryErrorCodes,\n            successResponseCodes = VALID_HTTP_RESPONSE_CODES,\n            // fetchOptions should only contain IFetchOptions\n            ...fetchOptions\n        } = options;\n        const retryErrorCodes = [ ...RETRY_HTTP_RESPONSE_CODES, ...(additionalRetryErrorCodes || []) ];\n        const overrides = await this._getFetchOptionOverrides(href, fetchOptions);\n        let response = await this._core._environment.fetch(overrides.href, overrides.options);\n        const { status } = response;\n        if (status === 202) {\n            response = await this._monitorResponse(response);\n        }\n\n        // If the Retry-After header is present, then retry regardless of status code.\n        if (status >= 400 && getRetryAfterHeader(response.headers)\n            // Always retry the retryErrorCodes\n            || retryErrorCodes.includes(status)\n        ) {\n            if (retryCount < MAX_ERROR_RETRIES) {\n                const delay = this._getRetryErrorDelay(response, retryCount);\n                this._core._environment.log(\n                    `Retryable error ${status} retrying in ${delay}ms, ${retryCount} retries so far`);\n                await new Promise(resolve => setTimeout(resolve, delay));\n                return await this._fetch(href, options, retryCount + 1);\n            } else {\n                this._core._environment.log(\n                    `Retryable error ${status} attempt ${retryCount} exceeded ${MAX_ERROR_RETRIES} retries`);\n            }\n        }\n        if (successResponseCodes !== 'any') {\n            this._checkResponseStatus(response, href, successResponseCodes);\n        }\n        return response;\n    }\n\n    protected _checkResponseStatus(response: Response, href: string, successResponseCodes: number[]) {\n        if (!successResponseCodes.includes(response.status)) {\n            const error = SAMError.createWithResponse(response, href);\n            this._core._environment.error(`InterfaceBase error ${error}`);\n            throw error;\n        }\n    }\n\n    protected async _monitorResponse(response: Response): Promise<Response> {\n        let href: string | null = response.headers.get('location');\n\n        if (!href) {\n            const json = await response.json();\n            if (!json) {\n                throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'Failed to parse content for 202 monitor response.');\n            }\n            href = json.href;\n            if (!href) {\n                throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'Missing href property for 202 monitor response.');\n            }\n        }\n\n        const delay = this._getMonitorRetryAfter(response.headers);\n        return this._fetchMonitorResponse(response.url, href, delay);\n    }\n\n    private async _fetchMonitorResponse(originalUrl: string, asyncUrl: string, delay: number): Promise<Response> {\n        if (delay) {\n            // Wait before trying again.\n            await new Promise((resolve) => setTimeout(resolve, delay));\n        }\n\n        const asyncResponse = await this._core._environment.fetch(asyncUrl);\n        const body = await asyncResponse.text();\n\n        const shouldRetry = this._shouldRetryMonitorResponse(asyncResponse, body);\n        if (shouldRetry) {\n            // Try again later.\n            const newDelay = this._getMonitorRetryAfter(asyncResponse.headers);\n            return this._fetchMonitorResponse(originalUrl, asyncUrl, newDelay);\n        }\n\n        // Parse the response from the async call.\n        return parseAsyncResponse(originalUrl, body);\n    }\n\n    /**\n     * Determines whether or not the response indicates the server-side async process is still underway.\n     */\n    // Overrides can use `body`\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    protected _shouldRetryMonitorResponse(asyncResponse: Response, body: string): boolean {\n        return asyncResponse.status === 202;\n    }\n\n    /**\n     * Calculate how long of a delay before re-requesting the status of a server-side async process.\n     */\n    private _getMonitorRetryAfter(headers: Headers): number {\n        return getRetryAfterHeader(headers) * 1000 || this._core._environment.getValue('ASYNC_DEFAULT_DELAY');\n    }\n\n    /**\n     * Calculate how long of a delay before retrying a request that failed\n     */\n    protected _getRetryErrorDelay(response: Response | undefined, retryCount: number): number {\n        const min = this._core._environment.getValue('MIN_RETRY_INTERVAL');\n        const max = this._core._environment.getValue('MAX_RETRY_INTERVAL');\n        const delay = (response && getRetryAfterHeader(response.headers) || Math.pow(2, retryCount)) * 1000;\n        return clamp(delay, min, max);\n    }\n\n    /**\n     * Make a GET request to the Platform API.\n     * @param href for request\n     * @param additionalFetchOptions {InterfaceBaseFetchOptions} (optional)\n     */\n    protected async _doGet(href: string, additionalFetchOptions?: InterfaceBaseFetchOptions) {\n        return this._fetch(\n            href,\n            {\n                method: 'GET',\n                successResponseCodes: VALID_HTTP_RESPONSE_CODES,\n                ...additionalFetchOptions\n            });\n    }\n\n    /**\n     * Make a HEAD request to the Platform API.\n     * @param href for request\n     * @param headers for request\n     */\n    protected async _doHead(href: string, headers: HeaderMap = {}) {\n        return this._fetch(href, { method: 'HEAD', headers });\n    }\n\n    /**\n     * Make a POST request to the Platform API.\n     * @param href for request\n     * @param headers for request\n     * @param body for request\n     * @param successResponseCodes for request. Most POST requests that create something will return a 201 success\n     *     code, but sometimes a different success code is used (e.g. 204 for discard/restore).\n     */\n    protected async _doPost(href: string, headers: HeaderMap = {}, body?: string | Blob, successResponseCodes: ValidHttpResponseCodes = [ 201 ], noOtherHeaders: boolean = false) {\n        return this._fetch(href, { method: 'POST', headers, noOtherHeaders, body, successResponseCodes });\n    }\n\n    /**\n     * Make a PATCH request to the Platform API.\n     * @param href for request\n     * @param headers for request\n     * @param body for request\n     * @param successResponseCodes for request.\n     */\n    protected async _doPatch(href: string, headers: HeaderMap = {}, body?: string, successResponseCodes: ValidHttpResponseCodes = [ 200 ]) {\n        return this._fetch(href, { method: 'PATCH', headers, body, successResponseCodes });\n    }\n\n    /**\n     * Make a PUT request to the Platform API.\n     * @param href for request\n     * @param headers for request\n     * @param body for request\n     * @param successResponseCodes for request.\n     */\n    protected async _doPut(href: string, headers: HeaderMap = {}, body?: string | Blob, successResponseCodes: ValidHttpResponseCodes = [ 201 ], noOtherHeaders: boolean = false) {\n        return this._fetch(href, { method: 'PUT', headers, body, noOtherHeaders, successResponseCodes });\n    }\n\n    /**\n     * Make a DELETE request to the Platform API.\n     * @param href for request\n     * @param headers for request\n     * @param successResponseCodes for request.\n     */\n    protected async _doDelete(href: string, headers: HeaderMap = {}, successResponseCodes: ValidHttpResponseCodes = [ 200 ], noOtherHeaders: boolean = false) {\n        return this._fetch(href, { method: 'DELETE', headers, noOtherHeaders, successResponseCodes });\n    }\n\n    /**\n     * Get a JSON resource from the platform API - handles parsing the response as JSON\n     * @param href for request\n     * @param additionalFetchOptions {InterfaceBaseFetchOptions} (optional)\n     */\n    protected async _getResponse<T>(href: string, additionalFetchOptions?: InterfaceBaseFetchOptions): Promise<T> {\n        const response = await this._doGet(\n            href,\n            additionalFetchOptions\n        );\n        return response.json();\n    }\n\n    private _sharedResponses: Map<string, Promise<any>> = new Map;\n\n    /**\n     * The same as _getResponse, except that it allows piggybacking on a request if it's\n     * already in-flight. This is useful when we have multiple places in the code that\n     * depend on data from the same request (e.g. getting both collaborators and invitations\n     * from the same API), and we want to avoid making repeated requests.\n     *\n     * @param href for request\n     * @param headers for request\n     */\n    protected async _getSharedResponse(href: string, headers: HeaderMap = {}) {\n        let response = this._sharedResponses.get(href);\n        if (!response) {\n            response = this._getResponse(href, { headers });\n            this._sharedResponses.set(href, response);\n            response.finally(() => this._sharedResponses.delete(href));\n        }\n        return response;\n    }\n\n    /**\n     * Make a request to the Platform API. If it is paged, provide a next callback\n     * @param href for page\n     * @param headers to send with request\n     */\n    protected async _getPagedResponse(href: string, headers: HeaderMap = {}): Promise<PaginatedResponse> {\n        const result = await this._getResponse<any>(href, headers);\n        if (result?._page?.next && result?._links?.[RelType.PAGE]) {\n            const template = UriTemplate(result._links[RelType.PAGE].href);\n            const nextHref = template.fill({\n                ...result._page,\n                start: result._page.next,\n                resource: RelType.PRIMARY\n            });\n            const next = () => this._getPagedResponse(nextHref, headers);\n            return { result, next };\n        }\n\n        return { result };\n    }\n\n    /**\n     * Get all of the pages of a page (or not) Platform API request\n     * @param href starting href\n     * @param headers to send along with the requests\n     */\n    protected _getAllPages(href: string, headers: HeaderMap = {}): Promise<any> {\n        let fullResult: any;\n\n        const readPages: (requestFn: () => Promise<PaginatedResponse>) => Promise<any> = async requestFn => {\n            const result = await requestFn();\n            const children = result && result.result && result.result.children;\n            if (!children) {\n                return fullResult;\n            }\n\n            if (!fullResult) {\n                fullResult = result.result;\n            } else {\n                fullResult.children = fullResult.children.concat(children);\n            }\n\n            return result.next ? readPages(result.next) : fullResult;\n        };\n\n        return readPages(() => this._getPagedResponse(href, headers));\n    }\n\n    /**\n     * Get and parse the links header for an object in the Platform API\n     * @param href of the object\n     */\n    protected _getLinksFromHeaders(headers: Headers) {\n        const linkHeader = headers && headers.get('Link');\n        if (!linkHeader) {\n            throw SAMError.create(SAMErrorCode.UNKNOWN, 'HEAD request did not return link header');\n        }\n\n        const link = LinkHeader.parse(linkHeader);\n\n        return (\n            link\n            && link.refs.reduce(\n                (memo: any, { rel, uri, ...otherData }) => {\n                    if (rel) {\n                        memo[rel] = memo[rel] || [];\n                        memo[rel].push({ href: uri, ...otherData });\n                    }\n\n                    return memo;\n                },\n                {}\n            )\n        );\n    }\n\n    protected _getETagFromHeaders(headers: Headers): string | null {\n        return headers.get('ETag');\n    }\n\n    // Sub-classes can refine requests if needed\n    protected async _getFetchOptionOverrides(\n        href: string,\n        options: IFetchOptions\n    ): Promise<{\n            href: string;\n            options: IFetchOptions\n        }> {\n        if (this._useHighPriorityRequestsIfEnabled && this._core._environment.getValue('HIGH_PRIORITY_RAPI_REQUESTS')) {\n            // See https://wiki.corp.adobe.com/pages/viewpage.action?spaceKey=CA&title=Proposal%3A+Priority+Header#Proposal:PriorityHeader-UrgencySummary\n            //\n            // If enabled, R-API requests will be made using with Priority u=1 header to enable HTTP/2 and HTTP/3, and\n            // to direct R-API to optimize calls for response time. HTTP/2+ reduces delays caused by too many\n            // connections open on the same domain. Currently, this can only be done on the edge network (CDN), which\n            // incurs some cost, but will likely be brought in-house.\n            //\n            // User-facing web clients SHOULD typically enable this to optimize user experience, but is off by default\n            // so that clients take responsibility for determining what priority to use.\n            href = !href.includes('platform-cs-edge')\n                ? href.replace('platform-cs', 'platform-cs-edge')\n                : href;\n            options.headers = {\n                ...(options.headers || {}),\n                'Priority': 'u=1'\n            };\n        }\n\n        // See https://wiki.corp.adobe.com/display/CA/Proposal%3A+Storage+Model+Unification+Detailed+Design#Proposal:StorageModelUnificationDetailedDesign-AdministratorACEs\n        // If ADMIN_MODE_ORG_ID is set, we need to add a header value to all service requests\n        // that contains the orgID provided by the Admin Console.\n        const adminModeOrgID = this._core._environment.getValue('ADMIN_MODE_ORG_ID');\n        if (adminModeOrgID) {\n            options.headers = {\n                ...(options.headers || {}),\n                'X-ACP-ADMIN-PRIVILEGES': adminModeOrgID\n            };\n        }\n\n        return { href, options };\n    }\n}\n","/*************************************************************************\n*   ADOBE CONFIDENTIAL\n*\n*   Copyright 2023 Adobe\n*   All Rights Reserved.\n*\n*   NOTICE:  All information contained herein is, and remains\n*   the property of Adobe and its suppliers, if any. The intellectual\n*   and technical concepts contained herein are proprietary to Adobe\n*   and its suppliers and are protected by all applicable intellectual\n*   property laws, including trade secret and copyright laws.\n*   Dissemination of this information or reproduction of this material\n*   is strictly forbidden unless prior written permission is obtained\n*   from Adobe.\n**************************************************************************/\n\n/**\n * Clamps a value to a minimum, maximum, or range\n *  @example <caption>Clamp to minimum of 4</caption>\n *  clamp(5, 4); // returns 4\n *  @example <caption>Clamp to a maximum of 3</caption>\n *  clamp(5, undefined, 3); // returns 3\n *  @example <caption>Clamp to a range 3 - 6</caption>\n *  clamp(5, 3, 6); // returns 5\n *\n * @param value {number} Value to be clamped\n * @param min {number|undefined} Minimum value\n * @param max {number|undefined} Maximum value\n * @return {number} Value that is clamped to be >= min (if provided) and <= max (if provided), or value if it is\n *          within range\n */\n\nfunction clamp(value: number, min: undefined, max: number): number;\nfunction clamp(value: number, min: number, max?: number): number;\nfunction clamp(value: number, min?: number, max?: number): number {\n    if (min !== undefined && value < min) { return min; }\n    if (max !== undefined && value > max) { return max; }\n    return value;\n}\n\nexport default clamp;\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport type { ISAMObject } from '../../indexPrivate';\nimport { getRetryAfterHeader } from '../../interface/LinkUtils';\nimport { RETRY_HTTP_RESPONSE_CODES } from '../../interface/InterfaceBase';\n\n// Support retrying an asynchronous method on failure, with a backoff\nexport default (target: ISAMObject, propertyKey: string, descriptor: PropertyDescriptor) => {\n    const timeout = Symbol(`@retry ${propertyKey}`);\n    const method = descriptor.value;\n    descriptor.value = async function (this: ISAMObject & { [timeout]?: ReturnType<typeof setTimeout> }, attempt: number = 0) {\n        const timeoutId = this[timeout];\n        if (timeoutId) {\n            clearTimeout(timeoutId);\n            this[timeout] = undefined;\n        }\n\n        try {\n            await method.call(this);\n        } catch (e) {\n            let interval: number = 0;\n            const response = e._additionalInfo?.response;\n            if (RETRY_HTTP_RESPONSE_CODES.includes(response?.status)) {\n                // InterfaceBase already auto-retried, so back off using the maximum retry interval.\n                interval = this._core._environment.getValue('MAX_RETRY_INTERVAL') || 20000;\n            } else {\n                // Retry all other errors, but at a different interval\n                const retryAfter = e._additionalInfo?.response ? getRetryAfterHeader(e._additionalInfo.response.headers) * 1000 : 0;\n                // If we're unable to resolve (unable to connect to services or unexpected response), we schedule a retry\n                interval = Math.max(this._core._environment.getRetryInterval(attempt), retryAfter);\n            }\n\n            this._core._environment.log(`Retrying ${propertyKey} in ${interval}ms`);\n            this[timeout] = setTimeout(() => descriptor.value.call(this, attempt + 1), interval);\n        }\n    };\n};\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport SAMError, { SAMErrorCode } from '../SAMError';\nimport { IHasKeyMap, KeysProperty } from './key';\n\n/**\n * The synchronized decorator ensures that only one caller can be executing the method at once,\n * similar to the synchronized keyword in Java for critical blocks. This only makes sense\n * to apply to asynchronous methods, since JavaScript is single-threaded.\n *\n * If an @synchronized method is called while another caller is already executing it, the second\n * caller will wait until the first caller finishes (regardless of whether the promise rejects or succeeds),\n * before executing.\n *\n * A parameter can be marked as @key, allowing multiple concurrent calls so long as the keys are different\n * (this is similar to passing a value to synchronized() in Java).\n */\nexport default (target: any, propertyKey: string, descriptor: PropertyDescriptor) => {\n    const promisesMapProperty = Symbol(`@synchronized ${propertyKey}`);\n    const method = descriptor.value;\n    if (!method) {\n        throw SAMError.create(SAMErrorCode.BAD_REQUEST, '@synchronized decorator can only be applied to a method');\n    }\n    descriptor.value = async function (this: IHasKeyMap & { [promisesMapProperty]: Map<string, ReturnType<typeof method>> }, ...args: any[]) {\n        const keyIndex = this[KeysProperty]?.get(propertyKey);\n        const key: string = keyIndex === undefined ? 'default' : args[keyIndex];\n\n        const map = this[promisesMapProperty] || (this[promisesMapProperty] = new Map);\n\n        let promise;\n        do {\n            promise = map.get(key);\n            if (promise) {\n                // Somebody else was already executing, so we wait for that to finish first\n                try {\n                    await promise;\n                } catch (e) {\n                    // Ignore any errors - we'll execute after the existing caller resolves or rejects\n                }\n            }\n        } while (promise);\n\n        // Now enter the critical block ourself - record the promise so others need to wait.\n        // Note that we use different promise so that we ensure other callers continue only after\n        // we've deleted the previous promise.\n        let outerResolve;\n        map.set(key, new Promise(resolve => outerResolve = resolve));\n        try {\n            return await method.apply(this, args);\n        } finally {\n            // Always delete the promise even if we reject, to allow others to continue\n            map.delete(key);\n            outerResolve && outerResolve();\n        }\n    };\n};\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport EventEmitter from 'events';\nimport IEvent from './IEvent';\nimport { IEventMap, GetEventNames } from './ITypedEventEmitter';\n\nexport * from './ITypedEventEmitter';\n\nexport const BECOME_OBSERVED = 'observed';\nexport const BECOME_UNOBSERVED = 'unobserved';\n\n/**\n * Base class that can be used to create Typed SAMEvent Emitters.\n * @example:\n * class ClickEvent extends SAMEvent {\n *     myClickProp: string;\n *     constructor() {\n *         super('click');\n *     }\n * }\n *\n * class MyClass extends TypedEventEmitter<{ click: ClickEvent }>() {\n *     baseProp : string;\n * }\n *\n * const obj = new MyClass();\n * obj.on('click', (ev, sender, payload) => {\n *     // The ev object is typed based on the 'click' event.\n *     ev.myClickProp;\n * });\n *\n * subClass.dispatch(new ClickEvent());\n */\nexport default class TypedEventEmitter<EventMap extends IEventMap> extends EventEmitter {\n    dispatch(ev: IEvent, payload?: any): boolean {\n        return super.emit(ev.type, ev, this, payload);\n    }\n    once<AnEventType extends GetEventNames<EventMap>>(\n        type: AnEventType,\n        callback: (event: EventMap[AnEventType], sender: this, payload?: any) => void\n    ): this {\n        const result = super.once(type, callback);\n        this._onEventListenerAdded();\n        return result;\n    }\n    on<AnEventType extends GetEventNames<EventMap>>(\n        type: AnEventType,\n        callback: (event: EventMap[AnEventType], sender: this, payload?: any) => void\n    ): this {\n        // Prevent adding duplicate listeners\n        if (this.listeners(type).includes(callback)) {\n            return this;\n        }\n        const result = super.on(type, callback);\n        if (type !== BECOME_OBSERVED && type !== BECOME_UNOBSERVED) {\n            this._onEventListenerAdded();\n            if (this.listenerCount(type) === 1) {\n                this.emit(BECOME_OBSERVED, type);\n            }\n        }\n        return result;\n    }\n    off<AnEventType extends GetEventNames<EventMap>>(\n        type: AnEventType,\n        callback: (event: EventMap[AnEventType], sender: this, payload?: any) => void\n    ): this {\n        const result = super.off(type, callback);\n        if (type !== BECOME_OBSERVED && type !== BECOME_UNOBSERVED) {\n            this._onEventListenerRemoved();\n            if (this.listenerCount(type) === 0) {\n                this.emit(BECOME_UNOBSERVED, type);\n            }\n        }\n        return result;\n    }\n    // Called when a new event listener is added on the object.\n    protected _onEventListenerAdded() {\n    }\n\n    protected _onEventListenerRemoved() {\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/**\n * Dummy implementation of the WeakRef interface to be used\n * in browsers that do not support WeakRefs natively.\n * Note that the associated objects will not be reclaimed by the\n * garbage collector. We don't expect this to be an actual issue\n * in practice for SAM though.\n */\nexport default class WeakRefPolyfill<T extends object> implements WeakRef<T> {\n    constructor(private _ref: T) {\n    }\n\n    /**\n     * Needed in order to fully implement the WeakRef interface.\n     * The `Symbol.toStringTag` symbol is a property that\n     * is used by the default implementation of the toString method.\n     */\n    get [Symbol.toStringTag](): 'WeakRef' {\n        return 'WeakRef';\n    }\n\n    /**\n     * Returns the WeakRef target object.\n     * Note that this implementation emulates the API, but cannot\n     * actually keep a weak reference.\n     *\n     * Based on MDN data, most modern browsers support WeakRef.\n     */\n    deref(): T | undefined {\n        return this._ref;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport WeakRefPolyfill from './WeakRefPolyfill';\n\nexport default typeof WeakRef !== 'undefined' ? WeakRef : WeakRefPolyfill;\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { SharedChangeEvent } from './ChangeEvent';\nimport IEvent from './IEvent';\nimport ItemBase, { ItemId } from './ItemBase';\nimport { ISAMCorePrivate, ISAMObject } from '../indexPrivate';\n\nexport type IUpdateSessionType = 'fetch' | 'mutation';\n\nfunction updateLastKnownClientMutationValues(item: ItemBase) {\n    item.updateLastKnownClientMutation();\n}\n\nfunction updateLastKnownClientMutationKeys(_: any, item: ItemBase) {\n    item.updateLastKnownClientMutation();\n}\n\nexport interface IUpdateSession<LocalType extends ItemBase> extends ISAMObject {\n    readonly hasChanges: boolean;\n    readonly updateContext?: string;\n    readonly mostRecentValidMutation?: number;\n    readonly type: IUpdateSessionType;\n\n    ensureItemIsAdded(item: LocalType): void;\n    reindexItem(item: LocalType, oldId: ItemId, newId: ItemId): void;\n\n    queueAddedItem(item: LocalType): void;\n    queueChangedItem(item: LocalType, event?: IEvent[]): void;\n    queueDiscardedItem(item: LocalType): void;\n\n    readonly addedItems?: LocalType[];\n    readonly changedItems?: LocalType[];\n    readonly discardedItems?: LocalType[];\n    readonly changedItemsWithEvents?: [LocalType, Set<IEvent>][];\n\n    getItemById(id: ItemId): LocalType | undefined;\n\n    checkIfItemAllowsMutations(item: LocalType): boolean;\n\n    commit(): void;\n}\n\nexport type IUpdateSessionDelegate<LocalType extends ItemBase> = {\n    getLocalItemById(id: ItemId): LocalType | undefined;\n    isItemDiscarded(item: LocalType): boolean;\n    reindexItem(item: LocalType, oldId: ItemId, newId: ItemId): void;\n    commitUpdateSession(session: UpdateSession<LocalType>): void;\n}\n\nexport default class UpdateSession<LocalType extends ItemBase> implements IUpdateSession<LocalType> {\n\n    private _addedItems?: Map<ItemId, LocalType>;\n    private _changedItems?: Map<LocalType, Set<IEvent>>;\n    private _discardedItems?: Set<LocalType>;\n\n    constructor(\n        readonly _core: ISAMCorePrivate,\n        private _delegate: IUpdateSessionDelegate<LocalType>,\n        readonly updateContext?: string,\n        readonly mostRecentValidMutation?: number,\n        readonly type: IUpdateSessionType = 'fetch'\n    ) {\n    }\n\n    get hasChanges(): boolean {\n        return Boolean(this._addedItems || this._changedItems || this._discardedItems);\n    }\n\n    get addedItems(): LocalType[] | undefined {\n        return this._addedItems && Array.from(this._addedItems.values());\n    }\n\n    get changedItems(): LocalType[] | undefined {\n        return this._changedItems && Array.from(this._changedItems.keys());\n    }\n\n    get discardedItems(): LocalType[] | undefined {\n        return this._discardedItems && Array.from(this._discardedItems);\n    }\n\n    get changedItemsWithEvents(): [LocalType, Set<IEvent>][] | undefined {\n        return this._changedItems && Array.from(this._changedItems);\n    }\n\n    checkIfItemAllowsMutations(item: LocalType): boolean {\n        const { lastKnownClientMutation } = item;\n        const { mostRecentValidMutation } = this;\n        // Return false only when the item has a mutation time that is more recent than the\n        // window of latency that the server APIs can guarantee.\n        return !lastKnownClientMutation || !mostRecentValidMutation || lastKnownClientMutation < mostRecentValidMutation;\n    }\n\n    ensureItemIsAdded(item: LocalType): void {\n        const { id } = item;\n        if (this._addedItems?.get(id) === item) {\n            // It was already part of this session.\n            return;\n        }\n\n        // Check if we already had it in the pool. If it was discarded before,\n        // then we want to recover it by adding it again.\n        const delegate = this._delegate;\n        if (delegate.getLocalItemById(id) === item && !delegate.isItemDiscarded(item)) {\n            return;\n        }\n\n        // Finally, let's just add this item again.\n        this.queueAddedItem(item);\n    }\n\n    reindexItem(item: LocalType, oldId: ItemId, newId: ItemId): void {\n        item._setId(newId);\n        this.queueChangedItem(item, [ SharedChangeEvent ]);\n        // Updates the key in the key-item cache\n        this._delegate.reindexItem(item, oldId, newId);\n    }\n\n    queueAddedItem(item: LocalType): void {\n        let addedItems = this._addedItems;\n        if (!addedItems) {\n            addedItems = new Map<ItemId, LocalType>();\n            this._addedItems = addedItems;\n        }\n        addedItems.set(item.id, item);\n\n        // Make sure we don't send any changed events on new items.\n        this._changedItems?.delete(item);\n    }\n\n    queueChangedItem(item: LocalType, events: IEvent[] = [ SharedChangeEvent ]): void {\n        if (this._addedItems?.has(item.id)) {\n            // We don't send any events on new items.\n            return;\n        }\n\n        let changedItems = this._changedItems;\n        if (!changedItems) {\n            changedItems = new Map<LocalType, Set<IEvent>>();\n            this._changedItems = changedItems;\n        }\n\n        let itemEvents = changedItems.get(item);\n        if (!itemEvents) {\n            itemEvents = new Set<IEvent>();\n            changedItems.set(item, itemEvents);\n        }\n\n        events.forEach((event) => itemEvents?.add(event));\n    }\n\n    queueDiscardedItem(item: LocalType): void {\n        let discardedItems = this._discardedItems;\n        if (!discardedItems) {\n            discardedItems = new Set<LocalType>();\n            this._discardedItems = discardedItems;\n        }\n        discardedItems.add(item);\n    }\n\n    getItemById(id: ItemId): LocalType | undefined {\n        return this._addedItems?.get(id) || this._delegate.getLocalItemById(id);\n    }\n\n    commit() {\n        // Committing the update session first to make sure the pool is up-to-date\n        // with the latest changes before we move control back to the client code.\n        this._delegate.commitUpdateSession(this);\n\n        // Dispatch all events on the changed items.\n        const changedItems = this._changedItems;\n        if (changedItems) {\n            for (const [ item, events ] of changedItems.entries()) {\n                for (const event of events) {\n                    item.dispatch(event);\n                }\n            }\n        }\n\n        if (this.type === 'mutation') {\n            // If this was the result of a mutation change, then we have to update the timestamps\n            // of all the items that were used.\n            this._addedItems?.forEach(updateLastKnownClientMutationValues);\n            this._discardedItems?.forEach(updateLastKnownClientMutationValues);\n            changedItems?.forEach(updateLastKnownClientMutationKeys);\n        }\n    }\n}\n","// Unique ID creation requires a high quality random # generator.  In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API.  We do the best we can via\n// feature-detection\n\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto\n// implementation. Also, find the complete implementation of crypto on IE11.\nvar getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) ||\n                      (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto));\n\nif (getRandomValues) {\n  // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n  var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n  module.exports = function whatwgRNG() {\n    getRandomValues(rnds8);\n    return rnds8;\n  };\n} else {\n  // Math.random()-based (RNG)\n  //\n  // If all else fails, use Math.random().  It's fast, but is of unspecified\n  // quality.\n  var rnds = new Array(16);\n\n  module.exports = function mathRNG() {\n    for (var i = 0, r; i < 16; i++) {\n      if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n      rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n    }\n\n    return rnds;\n  };\n}\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n  byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n  var i = offset || 0;\n  var bth = byteToHex;\n  // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n  return ([bth[buf[i++]], bth[buf[i++]], \n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]],\n\tbth[buf[i++]], bth[buf[i++]],\n\tbth[buf[i++]], bth[buf[i++]]]).join('');\n}\n\nmodule.exports = bytesToUuid;\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\nvar _clockseq;\n\n// Previous uuid creation time\nvar _lastMSecs = 0;\nvar _lastNSecs = 0;\n\n// See https://github.com/broofa/node-uuid for API details\nfunction v1(options, buf, offset) {\n  var i = buf && offset || 0;\n  var b = buf || [];\n\n  options = options || {};\n  var node = options.node || _nodeId;\n  var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n  // node and clockseq need to be initialized to random values if they're not\n  // specified.  We do this lazily to minimize issues related to insufficient\n  // system entropy.  See #189\n  if (node == null || clockseq == null) {\n    var seedBytes = rng();\n    if (node == null) {\n      // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n      node = _nodeId = [\n        seedBytes[0] | 0x01,\n        seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]\n      ];\n    }\n    if (clockseq == null) {\n      // Per 4.2.2, randomize (14 bit) clockseq\n      clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n    }\n  }\n\n  // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so\n  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n  var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n  // Per 4.2.1.2, use count of uuid's generated during the current clock\n  // cycle to simulate higher resolution clock\n  var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n  // Time since last uuid creation (in msecs)\n  var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n  // Per 4.2.1.2, Bump clockseq on clock regression\n  if (dt < 0 && options.clockseq === undefined) {\n    clockseq = clockseq + 1 & 0x3fff;\n  }\n\n  // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n  // time interval\n  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n    nsecs = 0;\n  }\n\n  // Per 4.2.1.2 Throw error if too many uuids are requested\n  if (nsecs >= 10000) {\n    throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n  }\n\n  _lastMSecs = msecs;\n  _lastNSecs = nsecs;\n  _clockseq = clockseq;\n\n  // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n  msecs += 12219292800000;\n\n  // `time_low`\n  var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n  b[i++] = tl >>> 24 & 0xff;\n  b[i++] = tl >>> 16 & 0xff;\n  b[i++] = tl >>> 8 & 0xff;\n  b[i++] = tl & 0xff;\n\n  // `time_mid`\n  var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n  b[i++] = tmh >>> 8 & 0xff;\n  b[i++] = tmh & 0xff;\n\n  // `time_high_and_version`\n  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n  b[i++] = tmh >>> 16 & 0xff;\n\n  // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n  b[i++] = clockseq >>> 8 | 0x80;\n\n  // `clock_seq_low`\n  b[i++] = clockseq & 0xff;\n\n  // `node`\n  for (var n = 0; n < 6; ++n) {\n    b[i + n] = node[n];\n  }\n\n  return buf ? buf : bytesToUuid(b);\n}\n\nmodule.exports = v1;\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n  var i = buf && offset || 0;\n\n  if (typeof(options) == 'string') {\n    buf = options === 'binary' ? new Array(16) : null;\n    options = null;\n  }\n  options = options || {};\n\n  var rnds = options.random || (options.rng || rng)();\n\n  // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n  rnds[6] = (rnds[6] & 0x0f) | 0x40;\n  rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n  // Copy bytes to buffer, if provided\n  if (buf) {\n    for (var ii = 0; ii < 16; ++ii) {\n      buf[i + ii] = rnds[ii];\n    }\n  }\n\n  return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n","var v1 = require('./v1');\nvar v4 = require('./v4');\n\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\n\nmodule.exports = uuid;\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\nimport ItemBase from './ItemBase';\nimport { IItemLoader, IItemLoaderOptions, ILoadedPage, ILoadNextPage } from './ItemLoader';\nimport { IItemFilter } from './ItemFilter';\nimport TypedEventEmitter from './TypedEventEmitter';\nimport { IItemOrder } from './ItemOrder';\nimport { IItemSourceConfig } from './ItemList';\nimport SAMEvent from './SAMEvent';\n\n// Must match GenericListStatus enum from SAM.cpp\nexport enum AssetListStatus {\n    NotStarted = 1,\n    HadLoaderErrors,\n    Loading,\n    ReadyHasMorePages,\n    ReadyFullyLoaded\n}\n\nexport const LOADER_STATE_CHANGED = 'loaderStateChanged';\n\nexport class ItemLoaderStateChangeEvent extends SAMEvent {\n    constructor(readonly hasUpdatedItems: boolean = false) {\n        super(LOADER_STATE_CHANGED);\n    }\n}\n\nconst SharedEventWithoutItemChanges = new ItemLoaderStateChangeEvent(false);\nconst SharedEventWithItemChanges = new ItemLoaderStateChangeEvent(true);\n\n/**\n * This is the structure of a page in memory.\n */\nclass ItemLoaderPage<LocalType extends ItemBase> {\n    items?: LocalType[];\n    startedGeneration: number = 0;\n    loadedGeneration: number = 0;\n\n    // When a page refreshes it should load the same\n    // page size as the first load.\n    limit?: number;\n}\n\ntype ItemLoaderStateEventMap = {\n    /**\n     * If the status of the loader changes, it will dispatch a 'change' event.\n     */\n    [LOADER_STATE_CHANGED]: ItemLoaderStateChangeEvent\n};\n\n/**\n * A list can have multiple loaders that provide items.\n * The ItemLoaderState maintains the state of each loader attached in a list:\n * - The loaded pages and their items\n * - The error state if we had one\n * - The next available page if any\n *\n * The Loader can also refresh the items starting with page 0. The items\n * in the pre-loaded pages will only refresh once those pages are fully loaded again.\n *\n * If a previous pending request is finished after we start a refresh cycle, then\n * the items in that page will update if and only if the new cycle didn't fetch that page yet.\n */\nexport default class ItemLoaderState<ItemConfig extends IItemSourceConfig> extends TypedEventEmitter<ItemLoaderStateEventMap> {\n    status: AssetListStatus = AssetListStatus.NotStarted;\n    total: number | undefined;\n    error: any;\n\n    private _pages: ItemLoaderPage<ItemConfig['type']>[] = [];\n\n    /**\n     * Each new refresh of the pages increments the generation index.\n     * We use this to differentiate between async network calls that\n     * might end up providing content after a new refresh has already\n     * been scheduled.\n     */\n    private _generation: number = 0;\n\n    /**\n     * Store the index and link of the next page. Once we reach\n     * the last page, the callback will become null.\n     */\n    private _nextPageIndex: number = 0;\n    private _nextPageCallback?: ILoadNextPage<ItemConfig>;\n\n    /**\n     * When a page load starts, we store the promise it generates,\n     * so that the next calls to load will queue up to receive a notification\n     * once the initial load is finished.\n     */\n    private _pendingLoad?: Promise<void>;\n\n    private _mostRecentValidMutation: number | undefined;\n\n    constructor(\n        private _loader: IItemLoader<ItemConfig>,\n        private _order: IItemOrder<ItemConfig['type']>,\n        private _filter: IItemFilter<ItemConfig['type']>,\n        private _implicitFilter: IItemFilter<ItemConfig['type']>,\n    ) {\n        super();\n    }\n\n    get mostRecentValidMutation(): number | undefined {\n        return this._mostRecentValidMutation;\n    }\n\n    /**\n     * Flag used to automatically load all pages without waiting for user intervention.\n     * This is useful for cases when all items are needed. For example, in the sidebar\n     * we want to display all the teams and bookmarked spaces.\n     */\n    private _loadAllPages: boolean = false;\n\n    /**\n     * Triggers a new generation of loading.\n     * @param generation    The generation index. This number must always increment for new loads.\n     * @param loadAllPages  Forces loading all the pages in the chain.\n     * @param limit (optional) override default items per page\n     * @returns Promise that can be used to know when the entire loading chain finished.\n     */\n    async load(generation: number, loadAllPages: boolean, limit?: number): Promise<void> {\n        this._loadAllPages = loadAllPages;\n\n        // If we were loading something before, we are aborting\n        // that in favor of the new generation.\n\n        // Reset the previous page token.\n        this._generation = generation;\n        this._nextPageCallback = undefined;\n        this._nextPageIndex = 0;\n        this._pendingLoad = undefined;\n\n        await this._loadPage(limit);\n    }\n\n    /**\n     * Load the next page.\n     * @returns Promise that can be used to know when the entire loading chain finished.\n     */\n    async loadNextPage(limit?: number): Promise<void> {\n        await this._loadPage(limit);\n    }\n\n    /**\n     * Load all the remaining pages.\n     * @returns Promise that can be used to know when the entire loading chain finished.\n     */\n    async loadAllPages(limit?: number): Promise<void> {\n        this._loadAllPages = true;\n        await this._loadPage(limit);\n    }\n\n    /**\n     * Pushes the items from all the loaded pages into the provided `dest` set.\n     *\n     * @param dest Set object that is populated with items from all the pages.\n     */\n    collectAllItems(dest: Set<ItemConfig['type']>) {\n        for (const page of this._pages) {\n            if (page && page.items) {\n                for (const item of page.items) {\n                    dest.add(item);\n                }\n            }\n        }\n    }\n\n    /**\n     * Loads or creates a page at the specified index.\n     * @param pageIndex\n     * @returns The page at index `pageIndex`.\n     */\n    private _ensurePage(pageIndex: number): ItemLoaderPage<ItemConfig['type']> {\n        let page = this._pages[pageIndex];\n        if (!page) {\n            page = new ItemLoaderPage<ItemConfig['type']>();\n            this._pages[pageIndex] = page;\n        }\n        return page;\n    }\n\n    /**\n     * Handle only one page load at a time by storing the promise and waiting on the same\n     * promise.\n     *\n     * Note that the promise chain can still be restarted via the `load()` method which\n     * starts loading everything from the first page again.\n     */\n    private async _loadPage(limit?: number) {\n        // Check if there is a load already in progress. We wait on that one before making more loads.\n        // This should prevent users from trying to load too many pages ahead of time.\n        let pendingLoad = this._pendingLoad;\n        if (!pendingLoad) {\n            // We don't have anything in progress, we can go ahead and load the page.\n            pendingLoad = this._loadPageImpl(limit);\n\n            // Store the pending load to make sure no requests are executed at the same time.\n            this._pendingLoad = pendingLoad;\n        }\n\n        // Wait for this load to finish.\n        await pendingLoad;\n\n        if (this._pendingLoad === pendingLoad) {\n            // If the load is still relevant for this generation of loading,\n            // then we can go ahead and remove the promise. Note that we will\n            // have to do this for all returning cases, even the paths that didn't\n            // actually trigger a load above. That's because we don't know which path\n            // continues the execution first and we want to make the caller can initiate\n            // another call immediately.\n            this._pendingLoad = undefined;\n        }\n    }\n\n    /**\n     * Loads the next page queued up for the loader.\n     * It will also update the current page and recursively call\n     * itself to load the next page if needed.\n     */\n    private async _loadPageImpl(limit?: number) {\n        const nextPageCallback = this._nextPageCallback;\n        const pageIndex = this._nextPageIndex;\n\n        // If this is not the first page and we don't have a callback, then we are out of pages to load.\n        if (pageIndex && !nextPageCallback) {\n            return;\n        }\n\n        // Ensure we have the next page in memory.\n        const page = this._ensurePage(pageIndex);\n\n        // Store the generation that we are in when the loading starts. If the results\n        // come by the time we've already switched to a new generation, then we will\n        // ignore the errors and keep the results only if no other newer generation has\n        // finished loading the same page already.\n        const startGeneration = this._generation;\n\n        if (page.startedGeneration >= startGeneration) {\n            // We've already loaded this or a newer generation in a different loading chain.\n            return;\n        }\n\n        // Make sure the page knows we are about to reload content using the new generation.\n        const previousPageGeneration = page.startedGeneration;\n        page.startedGeneration = startGeneration;\n\n        // Remove the error state in case we had one before.\n        this.error = null;\n\n        // Update the status to loading state before we start loading.\n        this._updateStatus(AssetListStatus.Loading);\n\n        let result: ILoadedPage<ItemConfig> | undefined;\n        let loaderError: any;\n\n        try {\n            const pageLimit = limit ?? page.limit;\n            const options: IItemLoaderOptions<ItemConfig> = {\n                order: this._order,\n                implicitFilter: this._implicitFilter,\n                filter: this._filter,\n                limit: pageLimit\n            };\n            if (nextPageCallback) {\n                result = await nextPageCallback(options);\n\n                // We delete the callback only after the page fully loaded.\n                // That's so that we can retry the load if the first try fails.\n                this._nextPageCallback = undefined;\n            } else {\n                // Load the first page.\n                result = await this._loader.loadPage(options);\n\n                // We can update the window of valid changes at this point.\n                // Note that we don't want to update the value for the rest of the pages\n                // as we would still have items from the first page that might not be included yet.\n                // For example, if a new asset is created and it shows up on the first page,\n                // but the server didn't know about it just yet, then follow up pages\n                // are not allowed to change this value until we do another reload cycle.\n                this._mostRecentValidMutation = result.mostRecentValidMutation;\n            }\n\n            // Once the page is loaded, save the limit we've used for that particular page.\n            // If we refresh the page we want to run it with the same page limit.\n            page.limit = pageLimit;\n        } catch (err) {\n            loaderError = err;\n        }\n\n        if (page.loadedGeneration >= startGeneration) {\n            // Ignore the results as a newer loader generation already finished loading this page.\n            return;\n        }\n\n        if (loaderError) {\n            if (page.startedGeneration !== startGeneration) {\n                // Note that we only revert if this load is still the most recent generation\n                // that started the load. Otherwise, we let the newer loader handle it eventually.\n                // Note that we return early in here to avoid bubbling up the error state while\n                // the newer loader is still in progress.\n                return;\n            }\n\n            // Revert the status of the page back to the original generation before we've started.\n            // This is needed so that we can retry loading this page again next time.\n            page.startedGeneration = previousPageGeneration;\n\n        } else if (result) {\n            // Note that we still use the results of the page even if the client started a new generation of loading.\n            // If we've reached this point, it means that the newer generation of loading has not yet reached this page.\n            // In that case, the result we just received is still new enough to considering it better than what we had before.\n\n            page.items = result.items.filter(item => this._implicitFilter.matches(item) && this._filter.matches(item));\n            this.total = result.total;\n            page.loadedGeneration = startGeneration;\n        }\n\n        // Update the state before sending any events.\n        const loadMorePages = this._updateStatusAndLinkToNextPage(startGeneration, pageIndex, result, loaderError);\n\n        // If we decided to load more pages, this is a good time to make that recursive async call.\n        if (loadMorePages) {\n            await this._loadPageImpl(limit);\n        }\n    }\n\n    /**\n     * Checks if the loader result can be used to load the next page.\n     * @param startGeneration   The generation that started this loader session.\n     * @param pageIndex         The index of the loaded page.\n     * @param result            The result received from the loader.\n     * @param loaderError       The error caught during the execution of the loader, if any.\n     * @returns true if the caller should continue loading the next page automatically.\n     */\n    private _updateStatusAndLinkToNextPage(startGeneration: number, pageIndex: number,\n        result: ILoadedPage<ItemConfig> | undefined, loaderError: any): boolean {\n        if (this._generation !== startGeneration || this._nextPageIndex !== pageIndex) {\n            // If the result is from a previous generation, we cannot update the `next page` link because we\n            // reserve the page chaining only to the current generation of the loader. We don't want to keep\n            // loading pages using the previous generation anyway, so this is where we bail out\n            // that previous generation.\n            if (result) {\n                // If we had a result and we got as far as this point, then we have new items\n                // already injected. However, there's a newer load already in progress, so there's no actual\n                // state change here. We only want to inform of the possibility of new items\n                // being added to the page, so we dispatch an event to let the ItemList update its 'items' contents\n                // to the most recent version loaded in this load chain.\n                this.dispatch(SharedEventWithItemChanges);\n            }\n            return false;\n        }\n\n        if (!result) {\n            // This page failed to load, so loading any other pages is compromised too.\n            this.error = loaderError;\n            this._updateStatus(AssetListStatus.HadLoaderErrors);\n            return false;\n        }\n\n        // Increment the page index and store the link to the next page that we've received from the loader.\n        this._nextPageIndex = pageIndex + 1;\n        this._nextPageCallback = result.loadNextPage;\n\n        if (!result.loadNextPage) {\n            // There are no other pages left. If we had any pages beyond this point\n            // before, this is a good time to remove them.\n            this._pages.splice(this._nextPageIndex);\n        }\n\n        // If we have a `loadNextPage` callback available then it means there are more pages to load.\n        this._updateStatus(result.loadNextPage ? AssetListStatus.ReadyHasMorePages : AssetListStatus.ReadyFullyLoaded);\n\n        // There are two cases when we want to automatically load the next pages:\n        // 1) If the client requested to load all pages automatically via the `this._loadAllPages` flag.\n        // 2) If the client already requested these pages before in a previous generation, we will keep reloading\n        //    the pages automatically. This is the use-case when the client already scrolled past the first page and\n        //    the client triggers a refresh of the list in the background. In that case the list must automatically\n        //    update up-to the last scroll position. The pages will refresh one-by-one until all new items are available.\n\n        // If the page was loaded before (case #2 above), then the page must be in the list of pages already.\n        // That means the page index is lower than the size of the pages array.\n        const didLoadNextPageBefore = this._nextPageIndex < this._pages.length;\n\n        return this._loadAllPages || didLoadNextPageBefore;\n    }\n\n    /**\n     * Triggers a status update event.\n     * @param newStatus\n     */\n\n    private _updateStatus(newStatus: AssetListStatus) {\n        // We always want to send an event when we have item changes,\n        // so that the ItemList can update the item list even if the status didn't change.\n        const hasItemChanges = newStatus === AssetListStatus.ReadyFullyLoaded || newStatus === AssetListStatus.ReadyHasMorePages;\n        if (hasItemChanges || newStatus !== this.status) {\n            this.status = newStatus;\n            this.dispatch(hasItemChanges ? SharedEventWithItemChanges : SharedEventWithoutItemChanges);\n        }\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { v4 } from 'uuid';\n\ndeclare global {\n    interface Crypto {\n        randomUUID: () => `${string}-${string}-${string}-${string}-${string}`;\n    }\n}\n\n// NOTE: since UXP doesn't provide `window.crypto` (https://jira.corp.adobe.com/browse/UXP-12909), SAM.js must include\n// an old version of uuid (3.3.2) that does not require `window.crypto` at all. Otherwise, each host app has to\n// inject the crypto API, which is not ideal, as it then becomes a hidden dependency for SAM.js. Host apps may still\n// choose to provide the crypto API for more cryptographically secure uuid, but there does not appear to be any\n// security holes in SAM.js using the older algorithm.\nexport default function samJsUuid(): string {\n    if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n        return crypto.randomUUID();\n    }\n    return v4();\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ItemBase from './ItemBase';\n\nexport type IItemFilterHash = string;\n\nexport type ItemFilterRelation =\n    // There are no known shared elements between lists using the two filters.\n    | 'disjoint'\n\n    // Some items can be borrowed from a list filtered with the other filter,\n    // however there might be other items that were not in the other list.\n    | 'unknown'\n\n    // The other filter has a sufficient list of items that the new filter\n    // can create its entire list just by using the in-memory items from the previous\n    // filter.\n    | 'subset';\n\nexport interface IItemFilter<LocalType extends ItemBase> {\n    /**\n     * Hash that can be used to uniqueuly identify the filter.\n     * This hash is used for caching in the ItemSource implementation.\n     */\n    readonly hash: IItemFilterHash;\n\n    /**\n     * Returns true if the provided item matches the filter.\n     * @param item\n     */\n    matches(item: LocalType): boolean;\n\n    /**\n     * This mechanism allows to process items on the client side while the\n     * server fetch executes in the background. We can create new lists based\n     * on items that are already loaded in memory. For example, switching the\n     * sorting order of a list that is fully loaded will do so entirely on\n     * the client side. In that case the filter is a perfect match.\n     *\n     * Another example is when a filter narrows down the results. In that case,\n     * if a list has the wider list of items, then we can create a new list\n     * by applying the filter entirely on the client side.\n     *\n     * This should return `disjoint` in cases where the lists would be entirely disjoint.\n     * For example, if the filter returns only Spaces inside a specific teamID, then there's\n     * no reason to reuse the Spaces from a different teamID.\n     * In that case, it would be a waste of time to grab items from the other list.\n     *\n     * In case `other` filter would be a good starting point to start populating a list,\n     * the method returns 'unknown'. The new list would be incomplete and will require\n     * a reload from the server in order to fully download all resources.\n     *\n     * In case `other` filter contains a sufficiently large list of items that the new\n     * filter would generate a complete list, this method will return `subset`.\n     * In theory, no server requests are necessary to create an entire list of items\n     * using the `this` filter.\n     *\n     * @param other filter of the source list.\n     */\n    getRelationToFilter(other: IItemFilter<LocalType>): ItemFilterRelation;\n}\n\nexport function getFiltersRelation<LocalType extends ItemBase>(\n    requestedFilter?: IItemFilter<LocalType>, other?: IItemFilter<LocalType>) {\n    if (requestedFilter === other) {\n        // If the exact same filter is given, then it must be a complete list.\n        return 'subset';\n    }\n\n    if (requestedFilter && other) {\n        // If the hash is the same, then we have the same filter.\n        if (requestedFilter.hash === other.hash) {\n            return 'subset';\n        }\n\n        // Since the hashes don't match, they aren't both EverythingFilter. So if `other`\n        // is everything filter, then the requested filter is a subset.\n        if (other.hash === 'everything') {\n            return 'subset';\n        }\n        // If requested filter is the EverythingFilter, then it is a superset\n        if (requestedFilter.hash === 'everything') {\n            return 'unknown';\n        }\n\n        return requestedFilter.getRelationToFilter(other);\n    }\n\n    // If we have a filter, it means the other list had no filter, so this is a complete subset of an unfiltered list.\n    if (requestedFilter) {\n        return 'subset';\n    }\n\n    // If the other list had a filter and this new list doesn't have a filter, then this new list will be incomplete.\n    return 'unknown';\n}\n\n/**\n * Useful for when you have an array as a value in a filter\n * and you want to compare the existing filter array value\n * with the new array value to see if they share some or all of their\n * items or even none.\n */\nexport function compareFilterArrayValues(arry1: any[], arry2: any[]): 'some' | 'all' | 'none' {\n    let lengthOfSharedElements = 0;\n    arry1.forEach((element1) => {\n        if (arry2.find((element2) => element1 === element2)) {\n            lengthOfSharedElements++;\n        }\n    });\n\n    if (lengthOfSharedElements === arry1.length && lengthOfSharedElements === arry2.length) {\n        return 'all';\n    }\n\n    if (lengthOfSharedElements > 0) {\n        return 'some';\n    }\n\n    return 'none';\n}\n\n/** Determine whether two date ranges overlap and return their filter relation\n * Default values chosen to functionally represent -Inf and Inf if any param is undefined\n * @param startThis\n * @param endThis\n * @param startOther\n * @param endOther\n */\nexport function getDateRangeRelation(\n    startThis: Date = new Date(-9999, 0, 1),\n    endThis: Date = new Date(9999, 0, 1),\n    startOther: Date = new Date(-9999, 0, 1),\n    endOther: Date = new Date(9999, 0, 1)): ItemFilterRelation {\n\n    //  startOther ---- startThis ---- endThis --- endOther\n    //  A is completely within B\n    if (startThis >= startOther && endThis <= endOther) { return 'subset'; }\n\n    // startThis --- endThis --- startOther ---- endOther\n    // or\n    // startOther --- endOther --- startThis --- endThis\n    // A and B have no overlap\n    if (startThis > endOther || endThis < startOther) { return 'disjoint'; }\n\n    // startThis --- startOther --- endThis --- startOther\n    // or\n    // startOther --- startThis --- endOther --- endThis\n    // or\n    // startThis --- startOther --- endOther --- endThis\n    // A and B have some overlap, but A is not a subset\n    return 'unknown';\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { IEventMap } from './ITypedEventEmitter';\nimport { IItemListBase } from './ItemList';\nimport { LogLevel } from './SAMCore';\n\nexport const ITEM_LIST_STATE_CHANGED = 'itemListStateChanged';\nexport const MESSAGE_LOGGED = 'messageLogged';\nexport const CONFIG_CHANGE = 'configChanged';\n\nexport class ConfigChangeEvent extends Event {\n    constructor() {\n        super(CONFIG_CHANGE);\n    }\n}\n\nexport class ItemListStateChangedEvent extends Event {\n    constructor(readonly list: IItemListBase) {\n        super(ITEM_LIST_STATE_CHANGED);\n    }\n}\n\nexport class MessageLoggedEvent extends Event {\n    constructor(readonly message: string, readonly logLevel: LogLevel) {\n        super(MESSAGE_LOGGED);\n    }\n}\n\ninterface ISAMCoreEvents extends IEventMap {\n    [ITEM_LIST_STATE_CHANGED]: ItemListStateChangedEvent;\n    [MESSAGE_LOGGED]: MessageLoggedEvent;\n    [CONFIG_CHANGE]: ConfigChangeEvent;\n}\n\nexport default ISAMCoreEvents;\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport SAMEvent from '../core/SAMEvent';\n\nexport const COLLABORATOR_CHANGED = 'collaborator_changed';\n\nexport default class CollaboratorChangedEvent extends SAMEvent {\n\n    constructor() {\n        super(COLLABORATOR_CHANGED);\n    }\n}\n\nexport const SharedCollaboratorChangedEvent = new CollaboratorChangedEvent();\n\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\nimport { RelType } from './LinkUtils';\nimport {\n    IEffectivePermissions,\n    PermissionType\n} from './RepositoryModel';\nimport { LastAccessedOrderField } from './USSModel';\n\nexport interface IAssetsPageSpec {\n    orderBy: string;\n    next: string;\n    count: number;\n}\n\nexport type IUSSAdobeAssetOrderBy =\n    | 'asset_name'\n    | 'create_date'\n    | 'modify_date'\n    | typeof LastAccessedOrderField;\n\nexport type ISWYAdobeAssetOrderBy = IUSSAdobeAssetOrderBy | 'shared_date';\nexport type ISBMAdobeAssetOrderBy = IUSSAdobeAssetOrderBy | 'shared_date';\n\nexport type IAdobeAssetOrderBy =\n    | 'repo:name'\n    | 'storage:deviceCreateDate'\n    | 'storage:deviceModifyDate';\n\nexport type IAssetVersionOrderBy = 'created'\n\n\n// Top-level application metadata fields that should be embedded in all R-API and USS listings\nexport const AppMetadataField = {\n    SHELL_VISIBILITY: 'shell:visibility',       // for filtering out hidden files client-side\n    CC_INHERITED: 'cc:inherited',               // project and workspace children\n    REVIEW_SOURCE_ASSET: 'review:sourceAsset',  // artifact source info\n    CONVERTED_TO: 'convertedTo',                // Project X (temporary support for legacy files)\n    NON_AUTO_MIGRATABLE: 'ccx:nonAutoMigratableCopiedFromId',  // Project X (temporary support for legacy files)\n    COPIED_IN_LEGACY_SPARK_TO: 'ccx:copiedLegacySparkId', // Project X (temporary support for legacy files)\n    CC_INHERITABLE: 'cc:inheritable',            // specfic to projects and workspaces\n    PROJECT_RENDITION: 'project:rendition'      // required for Projects showing up in USS listings\n} as const;\n\nconst RapiAppMetadataWildcardNamespaces = {\n    CC: 'cc',\n    CLASSROOM_ASSIGNMENTS: 'assignment',\n    CCX: 'ccx',\n};\n\n// This should be fix once https://jira.corp.adobe.com/browse/SEARCH-45142 is done\nconst NewFormatAppMetadataField = {\n    HZ_DOCUMENT_METADATA: 'hz:documentMetadata',  // Express metadata\n    CC_CREATED_FROM_UPLOAD: 'cc:createdFromUpload'\n};\n\n// The following fields must be escaped as-is to get all fields in the namespace\n// See: https://wiki.corp.adobe.com/pages/viewpage.action?spaceKey=CA&title=Proposal%3A+Enhanced+Filtering+and+Embedding+Support+for+JSON+Resources#Proposal:EnhancedFilteringandEmbeddingSupportforJSONResources-Selectors\n// eslint-disable-next-line no-useless-escape\nconst AppMetadataNamespacesRapiFormat = Object.values(RapiAppMetadataWildcardNamespaces).map((element) => `\\\"${element}:\\\"*`);\n\n// Rapi and USS have different formats for these core AppMetadataFields\nconst EmbedAppMetadataFieldsRapiFormat = (Object.values(AppMetadataField) as string[])\n    .concat(Object.values(NewFormatAppMetadataField))\n    .filter((element) => {\n        // Filter out all single field selectors that will be included by a wildcard selector\n        const ns = element.split(':')[0];\n        return !Object.values(RapiAppMetadataWildcardNamespaces).includes(ns);\n    })\n    .map((element) => '\"' + element + '\"')\n    .concat(AppMetadataNamespacesRapiFormat);\n\nconst EmbedAppMetadataFieldsUSSFormat = Object.values(AppMetadataField).map((element) => {\n    return ('app_metadata$$' + element);\n}).concat(Object.values(NewFormatAppMetadataField).map((element) => {\n    return ('api:metadata/application$$' + element);\n}));\n\n// Unified type for AppMetadataFields regardless of service origin eg. 'app_metadata$$shell:visibility' | '\"shell:visibility\"' | ...\nexport type IAppMetadataFieldTypeRapi = typeof EmbedAppMetadataFieldsRapiFormat[number];\nexport type IAppMetadataFieldTypeUSS = typeof EmbedAppMetadataFieldsUSSFormat[number];\nexport type IAppMetadataFieldType = IAppMetadataFieldTypeRapi | IAppMetadataFieldTypeUSS;\n\nexport function getRapiAppMetadataSelectors(): IAppMetadataFieldTypeRapi[] {\n    return EmbedAppMetadataFieldsRapiFormat;\n}\n\n// USSFetchFields should be embedded in USS calls only\nexport const USSFetchField = {\n    COLLABORATION_METADATA: 'collaboration_metadata',\n    COLLABMETADATA_MINE: 'collab_metadata#mine',\n    REPO_CREATED_BY_CLIENT_ID: 'repo:createdByClientId',\n} as const;\n\nconst USSFetchFields = Array.from(Object.values(USSFetchField));\nexport type IUSSFetchFieldType = typeof USSFetchFields[number] | IAppMetadataFieldTypeUSS;\n\n\n// Include all fields from AppMetadataFields and FetchFields in USS search results.\nexport function getUSSFetchFields(): IUSSFetchFieldType[] {\n    return [ ...EmbedAppMetadataFieldsUSSFormat, ...USSFetchFields ];\n}\n\n\nenum Permission {\n    // Should match AssetPermission.h\n    None   = 0, // Permissions are unknown\n    Ack    = 1 << 0, // Only the existence of this Asset can be checked\n    Read   = 1 << 1,\n    Write  = 1 << 2,\n    Delete = 1 << 3,\n\n    // TODO: get SAM.cpp to match\n    // synthetic permissions\n    Share  = 1 << 4, // user can share this Asset\n    Rename = 1 << 5,\n    // Asset can be moved out of its parent folder, but the\n    // destination folder must have Write permission\n    Move = 1 << 6,\n    Discard = 1 << 7,\n    Restore = 1 << 8,\n    // Asset can be duplicated in its current folder. To copy to a different folder, the Asset\n    // must have Read permission and the target folder must have Write permission.\n    Duplicate = 1 << 9,\n\n    ReadAppMetadata = 1 << 10,\n\n    // Typically, assets will have all permissions above for the logged-in user, but the\n    // service doesn't specify Ack because it is implied by the fact that the asset\n    // was included in the response.\n    All = Permission.Read\n        | Permission.Write\n        | Permission.Delete\n        | Permission.Share\n        | Permission.Rename\n        | Permission.Move\n        | Permission.Discard\n        | Permission.Restore\n        | Permission.Duplicate\n        | Permission.ReadAppMetadata\n}\n// `export enum` only exports the type, but we need to iterate over it\n// for tests\nexport { Permission };\n\n// Currently only exists in SAM.cpp\nexport interface ITransferStatus {\n    readonly started: boolean;\n    readonly hadError: boolean;\n    readonly bytesTransferred: number;\n    readonly bytesTotal: number;\n    readonly errorReason: string;\n    readonly errorType: string;\n}\n\nexport function parseEffectivePermissions(permissions: IEffectivePermissions): Permission {\n    // https://git.corp.adobe.com/pages/caf/api-spec/chapters/concepts/access.html#privileges\n\n    // Each permission type should look for its relevant key first, then fall back to \"*\" entry.\n    const primary = permissions[RelType.PRIMARY] || permissions['*'] || [];       // permissions directly on this obj\n    const policy = permissions[RelType.AC_POLICY] || permissions['*'] || [];      // contains \"share\" permission\n    const directory = permissions[RelType.DIRECTORY] || permissions['*'] || [];   // parent folder's permissions\n    const metadata = permissions[RelType.APP_METADATA] || permissions['*'] || []; // metadata's permissions\n\n    let mask = Permission.None;\n    primary.forEach((perm: PermissionType) => {\n        switch (perm) {\n        case 'ack':\n            mask |= Permission.Ack;\n            break;\n        case 'read':\n            mask |= Permission.Read;\n            if (directory.includes('write')) {\n                // Can duplicate this file in its current directory\n                mask |= Permission.Duplicate;\n            }\n            break;\n        case 'write':\n            // Clients need 'write' permission to edit the contents of a file, and they\n            // need 'write' permission on the parent folder to rename, discard, or restore\n            mask |= Permission.Write;\n            if (directory.includes('write')) {\n                mask |= Permission.Rename;\n                mask |= Permission.Discard;\n                mask |= Permission.Restore;\n            }\n            break;\n        case 'delete':\n            // Clients need Delete permission on the asset and Write permission on the\n            // parent directory in order to delete an asset.\n            if (directory.includes('write')) {\n                mask |= Permission.Delete;\n                mask |= Permission.Move;\n            }\n            break;\n        }\n    });\n\n    // synthetic permission\n    if (policy.includes('write')) {\n        mask |= Permission.Share;\n    }\n\n    // appmetadata permission\n    if (metadata.includes('read')) {\n        mask |= Permission.ReadAppMetadata;\n    }\n\n    return mask;\n}\n\n// NOTE: this isn't what Projects UI expects from XDCE service, but this is what it returns.\nexport interface IXDCEDocument {\n    id: string;\n    name: string;\n    thumbnail: {\n        assetID: string;\n        format: string;\n        scale: string;\n        url: string;\n    };\n    publisher: {\n        displayName: string;\n    };\n    artboardcount: number;\n    artboards: {\n        id: string;\n        name: string;\n        // A url like https://xdce-stage.adobe.io/v2/document/{urn}/artboard/{guid}?version=0\n        resourceAPI: string;\n        thumbnail: {\n            assetID: string;\n            format: string;\n            scale: string;\n            // A url like https://cdn-sharing-stage.adobecc.com/content/storage/id/{urn};revision=0?component_id={guid}&access_token={token}&api_key={key}\n            url: string;\n        };\n        bounds: {\n            x: number;\n            y: number;\n            width: number;\n            height: number;\n        };\n        viewportBounds: {\n            height: number;\n        };\n        triggers: any[];\n        parent: {\n            // A url like \"https://xdce-stage.adobe.io/v2/document/{urn}?version=0\"\n            resourceAPI: string;\n        }\n    }[];\n    homeArtboardId: string;\n    version: {\n        version: string;\n        // A url like https://xdce-stage.adobe.io/v2/document/{urn}?version=0\n        resourceAPI: string;\n    };\n    history: {\n        version: string;\n        // A url like https://xdce-stage.adobe.io/v2/document/{urn}?version=0\n        resourceAPI: string;\n    }[];\n    assetID: string;\n    includesDevelopmentData: boolean;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { ProblemType } from '../core/SAMError';\nimport { Permission } from './AssetModel';\nimport { IServiceLink, LinkRequirements, RelType } from './LinkUtils';\nimport { ActionLinks, Assignee, IEffectivePermissions, PermissionType } from './RepositoryModel';\n\nexport interface IProjectsIndexResponse {\n    _links: IProjectsIndexLinks\n}\n\nexport type IProjectView = 'yours' | 'sharedWithYou' | 'admin';\n\nexport interface IProjectsIndexLinks {\n    [RelType.PROJECTS_PRIMARY]: IServiceLink,\n    [RelType.PROJECTS_COLLECTION]: IServiceLink,\n    [RelType.PROJECTS_CREATE]: IServiceLink,\n    [RelType.RESOLVE_PATH]: IServiceLink,\n    [RelType.PROJECTS_CONTEXT]: IServiceLink\n}\n\n\nexport const PROJECTS_INDEX_LINKS: LinkRequirements = {\n    [RelType.PROJECTS_PRIMARY]: [ 'assetId', 'embed' ],\n    [RelType.PROJECTS_COLLECTION]: [ 'embed', 'limit', 'orderBy', 'start', 'view' ],\n    [RelType.PROJECTS_CREATE]: [ 'embed' ],\n    [RelType.RESOLVE_PATH]: [ 'path' ],\n    [RelType.PROJECTS_GRADIENTS_COLLECTION]: [],\n    [RelType.PROJECTS_CONTEXT]: []\n};\n\nexport type IProjectResourceTypes = RelType.AC_EFFECTIVE | RelType.APP_METADATA | RelType.PROJECTS_CREATOR | RelType.REPOSITORY;\nexport type IProjectsEmbeddableResource = IProjectResourceTypes[];\n\nexport type IProjectsOrderBy =\n    | 'repo:name'\n    | 'repo:createDate';\n\n\nexport interface IProjectsAppMetadata {\n    'project:rendition': {\n        'gradientId': string;\n    }\n}\n\nexport enum IProjectPatchKeys {\n    GRADIENT_ID = '/project:rendition/gradientId'\n}\n\nexport interface IProjectPatchData {\n    gradientID?: string;\n}\n\nexport interface IProjectsRepoMetadata {\n    'repo:owner': Assignee; // repo:owner has same shape as repo:assignee\n    'repo:repositoryId': string;\n}\n\n\nexport type IProjectsCreatorType = 'user' | 'org';\n\nexport interface IProjectsCreatorData {\n    id: string;\n    type: IProjectsCreatorType;\n    displayName: string;\n}\n\n// We get special permissions for projects apart from the ones coming from RAPI\n// More info: https://wiki.corp.adobe.com/pages/viewpage.action?spaceKey=assetscollab&title=Proposal%3A+Project+API+V3+-+Get+Project#Proposal:ProjectAPIV3GetProject-api:ac/effective.1\nexport interface IProjectsEffectivePermissions extends IEffectivePermissions {\n    [RelType.PROJECTS_PRIMARY]?: PermissionType[];\n}\n\nexport interface IProjectsResponseEmbeddedData {\n    [RelType.APP_METADATA]?: IProjectsAppMetadata;\n    [RelType.AC_EFFECTIVE]?: IProjectsEffectivePermissions;\n    [RelType.PROJECTS_CREATOR]?: IProjectsCreatorData;\n    [RelType.REPOSITORY]?: IProjectsRepoMetadata;\n}\n\nexport interface IProject {\n    _embedded?: IProjectsResponseEmbeddedData;\n    // @TODO@PROJECT We need to define a type for project links in later milestone when we have more ops\n    _links: IProjectLinks;\n    'repo:assetId': string;\n    'repo:repositoryId': string;\n    'repo:path': string;\n    'repo:createDate': string;\n    'repo:etag': string;\n    'repo:name': string;\n    'repo:state': string;\n    'storage:assignee': Assignee;\n    'project:view'?: IProjectView;\n}\n\nexport interface IProjectsPageSpec {\n    start: number;\n    limit: number;\n    orderBy: string;\n    count: number;\n    total: number;\n}\n\nexport interface IProjectsLinks {\n    [RelType.PROJECTS_CREATE]: IServiceLink;\n    [RelType.PROJECTS_COLLECTION]: IServiceLink;\n    next: IServiceLink;\n}\n\n// @TODO@PROJECT Should have all the links from the service represented.\nexport interface IProjectActions {\n    [RelType.PROJECTS_RENAME]: IServiceLink;\n    [RelType.APP_METADATA]: IServiceLink;\n}\n\nexport interface IProjectNavigationLinks {\n    [RelType.PAGE]?: IServiceLink;\n}\n\nexport type IProjectLinks = ActionLinks & IProjectActions & IProjectNavigationLinks;\n\nexport function _projectLinkKeys(): string[] {\n    return [ RelType.CREATE, RelType.RESTORE, RelType.DISCARD, RelType.PROJECTS_RENAME, RelType.PAGE ];\n}\n\nexport interface IProjectsResponse {\n    children: IProject[];\n    _page: IProjectsPageSpec,\n    _links: IProjectsLinks\n}\n\nexport interface IProjectsCreateData {\n    'repo:name': string;\n    [RelType.APP_METADATA]: IProjectsAppMetadata;\n    // Applies for the case of project creation within admin console for a specific org\n    'repo:repositoryId'?: string;\n}\n\nexport enum ProjectViews {\n    /**\n     * Combination of Projects returned from yours and sharedWithYou.\n     */\n    All,\n    /**\n     *  Only the Projects that are considered yours:\n     *  For CCI profile, only the projects within /projects directory are returned.\n     *  For CCT/CCE profile, a combination of projects within the assigned user storage for the profile,\n     *  and the shared storage of Org are returned. If the profile only has access to the\n     *  Project via inheritance or through orgEverybody group, then it will not be included.\n     */\n    Yours,\n    /**\n     * Only the Projects that are shared with the requestor. For both CCI and CCT/CCE profiles,\n     * the collection would be the negation of yours with the exception that the Projects shared\n     * via orgEverybody group are still not included.\n     */\n    SWY,\n    /**\n     * The full list of Projects regardless of how it is accessed. This includes Projects accessible\n     * via inheritance and shared via orgEverybody group.\n     */\n    Admin\n}\n\n/**\n * A utility that converts our Enumeration to\n * the services string enumeration.\n *\n * @param projectView The enumeration value we provide to clients.\n * @returns\n */\nexport function projectEnumToString(projectView?: ProjectViews): IProjectView | undefined {\n    switch (projectView) {\n    case ProjectViews.SWY:\n        return 'sharedWithYou';\n    case ProjectViews.Yours:\n        return 'yours';\n    case ProjectViews.Admin:\n        return 'admin';\n    default:\n        return;\n    }\n}\n\nexport function parseProjectEffectivePermissions(permissions: IProjectsEffectivePermissions): Permission {\n    // We get special permissions for projects which are present in the project primary relation\n    const projectPrimary = permissions[RelType.PROJECTS_PRIMARY] || permissions['*'] || [];       // permissions on the project\n    const primary = permissions[RelType.PRIMARY] || permissions['*'] || [];       // permissions on the folder representing the project\n    const directory = permissions[RelType.DIRECTORY] || permissions['*'] || [];   // parent folder's permissions\n\n    let mask = Permission.None;\n\n    // We get the 'ack', 'read', 'rename', 'discard', 'restore' permissions from the project primary relation\n    projectPrimary.forEach((perm: PermissionType) => {\n        switch (perm) {\n        case 'ack':\n            mask |= Permission.Ack;\n            break;\n        case 'read':\n            mask |= Permission.Read;\n            break;\n        case 'rename':\n            mask |= Permission.Rename;\n            break;\n        case 'discard':\n            mask |= Permission.Discard;\n            break;\n        case 'restore':\n            mask |= Permission.Restore;\n            break;\n        }\n    });\n\n    // We get the 'write' and 'delete' permissions from the folder representing the project and the parent folder\n    primary.forEach((perm: PermissionType) => {\n        switch (perm) {\n        case 'write':\n            mask |= Permission.Write;\n            break;\n        case 'delete':\n            if (directory.includes('write')) {\n                mask |= Permission.Delete;\n            }\n            break;\n        }\n    });\n\n    return mask;\n}\n\nexport enum ProjectCapabilities {\n    CREATE = 'create'\n}\n\nexport enum ProjectLeaveReason {\n    PENDING,\n    CAN_LEAVE,\n    /**\n     * All false reasons.\n     */\n    CANNOT_LEAVE_NO_COLLABORATORS,\n    CANNOT_LEAVE_ADDRESS_BOOK_GROUP_MEMBER,\n    CANNOT_LEAVE_LAST_COLLABORATOR,\n    /**\n     * @deprecated -- will be and removed on or after 2024-10-01.\n     */\n    CANNOT_LEAVE_LAST_DIRECT_COLLABORATOR,\n    CANNOT_LEAVE_IS_ADMIN_OF_PROJECT,\n    CANNOT_LEAVE_LAST_DIRECT_COLLAB_WITH_SHARE_PERMISSION,\n    CANNOT_LEAVE_IS_OWNER\n}\n\n/**\n * Reasons for why the user can or cannot create a project.\n */\nexport enum CanCreateProjectReason {\n    UNKNOWN,\n    ALLOWED,\n    ADMIN_DISABLED,\n    INVALID_REPOSITORY,\n    NO_HOME_REPOSITORY\n}\n\n/**\n * The interface for projects specific errors.\n */\nexport interface IProjectsServiceErrorResponse {\n    type: ProblemType;\n    title: string;\n    status: number;\n    detail?: string;\n    description?: string;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { CustomModelListingOptions } from './CustomModelInterface';\nimport { AssetLinks } from './RepositoryModel';\n\nexport enum CustomModelPublishedState {\n    DRAFT = 'draft',\n    READY = 'ready',\n    PUBLISHED = 'published',\n    UNPUBLISHED = 'unpublished',\n    QUEUED = 'queued',\n    TRAINING = 'training',\n    FAILED = 'failed',\n    CANCELLED = 'cancelled',\n    ALL = 'all'\n}\n\nexport enum CustomModelOrderBy {\n    MODIFY_DATE = 'modifyDate',\n    CREATE_DATE = 'createDate',\n    NAME = 'name'\n}\n\nexport type CustomModelData = {\n    assetId: string,\n    type: string,\n    createdBy: string,\n    createDate: string,\n    modifyDate: string,\n    assetName: string,\n    displayName: string,\n    publishedState: CustomModelPublishedState,\n    inferenceReady: boolean,\n    path: string,\n    version: string\n    etag: string\n    region: string,\n    size: number,\n    samplePrompt: string,\n    _links: AssetLinks,\n    renditionUrl?: string,\n    baseModelVersion: string,\n    basemodelName: string,\n    conceptId: string,\n    trainingMode: string,\n}\n\nexport type CustomModelsResponse = {\n    items: CustomModelData[],\n    nextPage?: CustomModelListingOptions,\n    total?: number\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nconst shownWarnings: Set<string> = new Set();\n\n/**\n * A utility logging function that warns a client once per page load using\n * the params provided by the caller.\n * @param topic\n * @param message\n */\nexport default function oneTimeWarning(topic: string, message: string) {\n    if (shownWarnings.has(topic)) { return; }\n    console.warn('One time warning (%s): %s', topic, message);\n    shownWarnings.add(topic);\n}\n\nexport function missingImplementationWarning(topic: string) {\n    oneTimeWarning(topic, 'Not implemented yet, but this method is safe to call.');\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ItemBase from '../core/ItemBase';\nimport type { IItemFilter, ItemFilterRelation } from '../core/ItemFilter';\n\n/**\n* A special filter used as a default to simplify logic around filtering rather than having special cases\n* for filter being undefined.\n*/\n\nexport default class EverythingFilter<Item extends ItemBase> implements IItemFilter<Item> {\n\n    constructor() {\n    }\n\n    get hash(): string {\n        return 'everything';\n    }\n\n    matches(item: Item): boolean {\n        return item !== undefined;\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    getRelationToFilter(other: IItemFilter<Item>): ItemFilterRelation {\n        return 'subset';\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { default as uuid } from './uuid';\nimport SAMEvent from './SAMEvent';\nimport ItemBase from './ItemBase';\nimport { IItemLoader } from './ItemLoader';\nimport { getFiltersRelation, IItemFilter } from './ItemFilter';\nimport ItemPool, { IItemPoolDelegate, ItemsChangedEvent, ItemType } from './ItemPool';\nimport ItemLoaderState, { AssetListStatus, ItemLoaderStateChangeEvent, LOADER_STATE_CHANGED } from './ItemLoaderState';\nimport { observable } from './decorators';\nimport ITypedEventEmitter, { IEventMap } from './ITypedEventEmitter';\nimport TypedEventEmitter from './TypedEventEmitter';\nimport { IItemOrder } from './ItemOrder';\nimport { ISAMCorePrivate, ItemListStateChangedEvent } from '../indexPrivate';\nimport oneTimeWarning from '../utils/oneTimeWarning';\nimport EverythingFilter from './EverythingFilter';\nimport SAMError, { SAMErrorCode } from './SAMError';\n\n// STATE_CHANGED must be a different than the SAM.cpp equivalent so that patchAssetList can throttle\n// the SAM.cpp notifications, and map the SAM.js event listeners to the throttled pseudo-events.\nexport const STATE_CHANGED = 'status_changed';\nexport const LIST_CHANGED = 'listChanged';\n// NOTE: listFullyLoaded should only be fired when its loaders completed a page and no more pages are available.\n//       It should *not* be fired for any other reason that list status changes to ReadyFullyLoaded.\nexport const LIST_FULLY_LOADED = 'listFullyLoaded';\n\n// For identifying updates of ItemList that originate from ItemLoaders. ONLY ItemLoaders should\n// use this updateContext.\nexport const LOADER_UPDATE_CONTEXT = 'LoaderUpdateContext';\n\nexport class StateChangedEvent extends SAMEvent {\n    constructor() {\n        super(STATE_CHANGED);\n    }\n}\n\nexport class ListChangedEvent extends SAMEvent {\n    constructor() {\n        super(LIST_CHANGED);\n    }\n}\n\nexport const SharedListChangedEvent = new ListChangedEvent();\nexport const SharedStateChangedEvent = new StateChangedEvent();\n\ninterface IItemListEventMap extends IEventMap {\n    [STATE_CHANGED]: StateChangedEvent,\n    [LIST_CHANGED]: ListChangedEvent\n}\n\nexport interface IItemSourceConfig<LocalType extends ItemBase = ItemBase,\n    ItemOrder extends IItemOrder<LocalType> = IItemOrder<LocalType>,\n    ImplicitItemFilter extends IItemFilter<LocalType> = IItemFilter<LocalType>,\n    ExplicitItemFilter extends IItemFilter<LocalType> = IItemFilter<LocalType>> {\n    type: LocalType;\n    order: ItemOrder;\n    filter: ExplicitItemFilter;\n    implicitFilter: ImplicitItemFilter;\n}\n\ninterface IPageOptions {\n    limit?: number;\n}\n\nexport interface ILoadOptions extends IPageOptions {\n    loadAllPages?: boolean;\n    /**\n     * Number of milliseconds past the last fetch where a refresh will be required.\n     * Note: Zero/undefined will force immediate refresh.\n     * Note: -1 will never force a refresh\n     */\n    refreshTimeout?: number;\n    limit?: number;\n}\n\nexport interface IItemListBase extends ITypedEventEmitter<IItemListEventMap> {\n    readonly type: ItemType;\n    readonly status: AssetListStatus;\n    readonly total: number | undefined;\n    readonly errors?: any[];\n    readonly generation: number;\n    readonly completedGeneration: number;\n    readonly hasLoaders: boolean;\n    readonly lastFetchTime: number;\n\n    /**\n     * Triggers the refresh of the items in the list.\n     *\n     * If the list already contains items from a previous load, the refresh\n     * doesn't throw away all the items immediately. It will refresh\n     * all preloaded pages one by one. The pages that were already loaded\n     * will be preserved until they had a chance to refresh.\n     */\n    refresh(): void;\n\n    /**\n     * If the initial `load` was started without using the `loadAllPages = true` option,\n     * this method allows the client to grab more items from the loaders as soon as more\n     * items are necessary.\n     *\n     * Note that calling this method again while the current page is still loading will\n     * not queue more pages.\n     */\n    loadNextPage(loadOptions?: IPageOptions): void;\n\n    /**\n     * Make the list automatically update itself.\n     */\n    setNeedsRefresh(): void;\n}\n\nexport interface IItemList<ItemConfig extends IItemSourceConfig> extends IItemListBase {\n    readonly order: ItemConfig['order'];\n    readonly filter: ItemConfig['filter'];\n    readonly implicitFilter: ItemConfig['implicitFilter'];\n    readonly items: ItemConfig['type'][];\n}\n\ninterface IPendingNotification<LocalType extends ItemBase> {\n    generation: number;\n    event: ItemsChangedEvent<LocalType>;\n}\n\ntype ItemGeneration<LocalType extends ItemBase> = Map<LocalType, boolean>;\n\nlet GlobalGeneration = 0;\n\n/**\n * Make sure we can sort lists based on how recent they've\n * started their server load. The more recent loads will have higher\n * priority over lists that have not been updated in a while.\n */\nfunction allocGenerationIndex(): number {\n    return ++GlobalGeneration;\n}\n\ninterface IPendingLoad {\n    loadAllPages: boolean;\n    promise: Promise<void>;\n    limit?: number;\n}\n\nexport default class ItemList<ItemConfig extends IItemSourceConfig> extends TypedEventEmitter<IItemListEventMap> implements IItemList<ItemConfig> {\n\n    private _status: AssetListStatus = AssetListStatus.NotStarted;\n    private _errors: any;\n    private _items: ItemConfig['type'][] = [];\n    private _total: number | undefined;\n\n    // Every time we refresh the list we increment the generation. This is used\n    // to make sure that older lists are updated once the new pages are loaded.\n    private _generation: number = 0;\n    private _completedGeneration: number = 0;\n\n    private _loaderStates: ItemLoaderState<ItemConfig>[] = [];\n\n    private _lastFetchTime: number = 0;\n    private _previousLoadPromise: Promise<any> | undefined;\n    private _needsRefresh: boolean = false;\n    private _pendingLoad: IPendingLoad | undefined;\n\n    // We will have to keep the client side items around until we fully fetch again the entire list.\n    // Example: We fetched the latest favorite spaces for the sidebar. Then we add a new space and make it favorite.\n    // The new space will be added to the list automatically without doing another fetch from the server.\n    // This list will refresh in the background eventually. Once the fetch is complete (ie. all pages are loaded),\n    // we can get rid of the assets added in the previous generation. At that point we can know for sure,\n    // that the items added in the previous generation have already been captured in the new generation of loaded pages.\n    // If an item is created after the load started, we have to keep it around until the next generation ends.\n    // That's because the initial pages might have contained the item, but we've started the load too early and the\n    // item might not be captured in the result yet.\n    // NOTE: only external changes, such as ONS refreshes, should cause entries to be made in _itemUpdatesByGeneration.\n    //       Changes from an ItemLoader loading a page should NOT be reflected here. To avoid that, ItemLoader should\n    //       always use `createUpdateSession()` or `createMutationSession()` with an `updateContext`.\n    private _itemUpdatesByGeneration = new Map<number, ItemGeneration<ItemConfig['type']>>();\n    private _pendingNotifications?: IPendingNotification<ItemConfig['type']>[];\n    private _listId: string = uuid();\n\n    constructor(\n        private _itemPool: ItemPool<ItemConfig['type']>,\n        loaders: IItemLoader<ItemConfig>[],\n        readonly order: ItemConfig['order'],\n        readonly implicitFilter: ItemConfig['implicitFilter'],\n        readonly filter: ItemConfig['filter'] = new EverythingFilter(),\n        similarItemList?: IItemList<ItemConfig>,\n        private _loadOptions?: ILoadOptions\n    ) {\n        super();\n        for (const loader of loaders) {\n            if (loader.supportsFilter && !loader.supportsFilter(filter)) {\n                // We don't want to use loaders that do not support the filters.\n                // Otherwise, we are better off running this list entirely on the client side.\n                // For example, the discarded items are better handled on the client for now.\n                continue;\n            }\n            const state = new ItemLoaderState(loader, order, filter, implicitFilter);\n            state.on(LOADER_STATE_CHANGED, this._onItemLoaderStateChanged);\n            this._loaderStates.push(state);\n        }\n\n        if (similarItemList) {\n            this._copyInitialItemsFrom(similarItemList);\n        }\n\n        _itemPool.addDelegate(this._itemPoolDelegate, 'list');\n    }\n\n    private _debug(msg: string) {\n        this._core._environment.debug(`[ItemList ${this._itemPool.type} ${this._listId.slice(-4)}] ${msg}`);\n    }\n\n    /**\n     * When client calls `Source.getList()` and an existing List is returned, the existing List's\n     * loadOptions might be different than the loadOptions that were requested. ItemSource calls\n     * this method to allow some adjustments.\n     *\n     * @package -- only to be used internally by SAM.js\n     */\n    _updateLoadOptions(loadOptions: ILoadOptions = {}): void {\n        if (!this._loadOptions) {\n            this._loadOptions = {};\n        }\n\n        // Can only increase the limit if there is a limit set, otherwise keep the default limit\n        // because it's not possible to tell if it is being increased or decreased since it could\n        // be defined on the service and not anywhere in SAM.js.\n        if (this._loadOptions.limit && loadOptions.limit && this._loadOptions.limit < loadOptions.limit) {\n            this._loadOptions.limit = loadOptions.limit;\n        }\n\n        // Can turn on loadAllPages, but cannot turn it off\n        if (!this._loadOptions.loadAllPages && loadOptions.loadAllPages) {\n            this._loadOptions.loadAllPages = loadOptions.loadAllPages;\n        }\n\n        // It can only lower the refreshTimeout duration. Annoyingly, -1 means \"infinite future\", while 0 means \"now\".\n        if (loadOptions.refreshTimeout !== -1\n            && (this._loadOptions.refreshTimeout === -1\n                || (this._loadOptions.refreshTimeout ?? 0) >= (loadOptions.refreshTimeout ?? 0))\n        ) {\n            this._loadOptions.refreshTimeout = loadOptions.refreshTimeout;\n        }\n\n        this._loadAsync({\n            ...this._loadOptions,\n            // if new refreshTimeout is -1, then it shouldn't refresh, but it can still turn on\n            // loadAllPages, which might require loading more pages.\n            refreshTimeout: loadOptions.refreshTimeout === -1 ? -1 : this._loadOptions.refreshTimeout\n        }).catch(this._onUnhandledPromiseError);\n    }\n\n    get type(): ItemType {\n        return this._itemPool.type;\n    }\n\n    get generation(): number {\n        return this._generation;\n    }\n\n    get completedGeneration(): number {\n        return this._completedGeneration;\n    }\n\n    get hasLoaders(): boolean {\n        return this._loaderStates.length > 0;\n    }\n\n    get lastFetchTime(): number {\n        return this._lastFetchTime;\n    }\n\n    get _core(): ISAMCorePrivate {\n        return this._itemPool._core;\n    }\n\n    /**\n     * In many cases the items already exist in a different list,\n     * we just need to reorder the items or just apply a different filter.\n     * In that case, we can bootstrap the list with items borrowed from a different\n     * list until the items are refreshed in the background if necessary.\n     * @package -- only for use in SAM.js\n     * @param other\n     */\n    _copyInitialItemsFrom(other: IItemList<ItemConfig>): void {\n        const itemGeneration: ItemGeneration<ItemConfig['type']> = new Map<ItemConfig['type'], boolean>();\n\n        const filter = this.filter;\n\n        for (const item of other.items) {\n            if (this.implicitFilter.matches(item) && filter.matches(item)) {\n                itemGeneration.set(item, true);\n            }\n        }\n\n        // Inject the items as if they were just new items.\n        // These items will be invalidated once the next generation loads,\n        // which happened when `load()` finishes to load all pages.\n\n        // This list starts with the items from a previously downloaded list,\n        // so it inherits the generation from the other list too.\n        this._generation = other.generation;\n        this._completedGeneration = other.completedGeneration;\n\n        this._itemUpdatesByGeneration.set(this._generation, itemGeneration);\n\n        // Set the status to ready if other list is also set to ready and the other\n        // list matches the filtering of this list.\n        if (other.status === AssetListStatus.ReadyFullyLoaded && getFiltersRelation(filter, other.filter) === 'subset') {\n            this._status = AssetListStatus.ReadyFullyLoaded;\n            // SAM should copy the lastFetchTime from the other list as it is Fully loaded.\n            // Essentially, the same items sorted in a different direction should be just as stale as the source list.\n            this._lastFetchTime = other.lastFetchTime;\n        }\n\n        // Make sure we recompute the items once the user calls the `items` getter.\n        this._updateListItemsFromItemLoaderStates();\n    }\n\n    /**\n     * When a list completely loads, its items can be copied to other compatible lists. E.g., ListA and ListB have the\n     * same filter and both are partially loaded. When ListA finishes loading, all of its items can be copied to\n     * ListB, and ListB can be considered fully loaded.\n     *\n     * @package -- only for use in SAM.js\n     */\n    _applyListItemsFrom(other: IItemList<ItemConfig>): void {\n        if (other.status !== AssetListStatus.ReadyFullyLoaded) {\n            throw SAMError.create(SAMErrorCode.INTERNAL_ERROR, '_applyListItems other list must be fully loaded');\n        }\n        if (getFiltersRelation(this.filter, other.filter) !== 'subset') {\n            throw SAMError.create(SAMErrorCode.INTERNAL_ERROR, '_applyListItems other list must be subset');\n        }\n\n        this._items = other.items.filter(item => this.implicitFilter.matches(item) && this.filter.matches(item));\n        this.order.sortItems(this._items);\n        this._dispatchItemsChangedEvent();\n        if (this._status !== AssetListStatus.ReadyFullyLoaded) {\n            this._status = AssetListStatus.ReadyFullyLoaded;\n            this._dispatchStateChangedEvents();\n        }\n    }\n\n    @observable(SharedStateChangedEvent)\n    get status(): AssetListStatus {\n        if (!this._loaderStates.length) {\n            // If we don't have any loaders, we always use the in-memory data for this list.\n            return AssetListStatus.ReadyFullyLoaded;\n        }\n        return this._status;\n    }\n\n    @observable(SharedStateChangedEvent)\n    get errors(): any[] {\n        return this._errors;\n    }\n\n    @observable(SharedListChangedEvent)\n    get items(): ItemConfig['type'][] {\n        return this._items;\n    }\n\n    @observable(SharedListChangedEvent)\n    get total(): number | undefined {\n        return this._total;\n    }\n\n    private _cleanPreviousGenerationItemsIfNeeded() {\n        // Check if all loaders are fully loaded and trim our previous generations.\n        let globalMostRecentValidMutation: number | undefined;\n\n        for (const loader of this._loaderStates) {\n            const { status, mostRecentValidMutation } = loader;\n            if (status === AssetListStatus.NotStarted || loader.status === AssetListStatus.HadLoaderErrors) {\n                // Ignore loaders that are not available.\n                continue;\n            }\n            if (status === AssetListStatus.Loading || status === AssetListStatus.ReadyHasMorePages) {\n                // We cannot trim any of the local items just yet. There are still more pages to load.\n                return;\n            }\n\n            // This loader is ready to trim some pages.\n\n            if (mostRecentValidMutation) {\n                // We have to take the minimum timestamps of all the loaders.\n                // If we have two loaders that have different latencies, then we have to keep items\n                // in the list until the most latent on has a chance to validate our local changes.\n                // The most recent mutations that we can eliminate from the local\n                // list are the ones outside of any latency window. The minimum is the most recent\n                // timestamp that is known to be valid across all loaders. Anything more recent than that\n                // would remove changes that were not yet replicated on at least one of the loaders.\n                globalMostRecentValidMutation = globalMostRecentValidMutation\n                    ? Math.min(globalMostRecentValidMutation, mostRecentValidMutation)\n                    : mostRecentValidMutation;\n            }\n        }\n\n        // We've loaded the entire set of pages, we are now ready to\n        // throw away the items that were added on the client side in\n        // the previous generations. These items should have been\n        // captured already by the new fetches from the server.\n        this._cleanPreviousGenerationItems(globalMostRecentValidMutation);\n    }\n\n\n    /**\n     * Removes items from the previous generations.\n     */\n    private _cleanPreviousGenerationItems(mostRecentValidMutation?: number): void {\n        // Convert any pending events into actual maps to make the changes available below.\n        this._applyItemsChangedEvents();\n\n        const currentGeneration = this._generation;\n        this._completedGeneration = currentGeneration;\n\n        // Pick all items added in the previous generations. If these items were indeed added, the updated\n        // lists should already contain the new items and we can go ahead and remove them from our in-memory store.\n        // Note that we cannot remove items added in the current generation as those were added\n        // after we've fetched the requests from the server and might not be up-to-date yet.\n        const newState: ItemGeneration<ItemConfig['type']> = new Map<ItemConfig['type'], boolean>();\n\n        let hadChanges = false;\n        let mostRecentDeletedGeneration = 0;\n\n        for (const [ key, generation ] of this._itemUpdatesByGeneration) {\n            if (key >= currentGeneration) {\n                continue;\n            }\n            // Deletes in JS Maps do not break the iterators, so it should be safe to delete generations while reading the map.\n            hadChanges = true;\n            this._itemUpdatesByGeneration.delete(key);\n            mostRecentDeletedGeneration = Math.max(mostRecentDeletedGeneration, key);\n\n            // If we have a most recent valid mutation timeframe, then we need to look for items that\n            // might still be inside that update time window.\n            if (mostRecentValidMutation) {\n                // Consolidate all the pending changes into a single generation.\n                for (const [ item, state ] of generation) {\n                    const { lastKnownClientMutation } = item;\n                    // If the item was already added to the list, then we have to keep updating its final state.\n                    if (newState.has(item) || lastKnownClientMutation && lastKnownClientMutation > mostRecentValidMutation) {\n                        // This item had a mutation too close to the last reload, so we cannot trust\n                        // that the listing returns the most up-to-date values. We have to preserve the item state (added / deleted)\n                        // until a future refresh.\n                        newState.set(item, state);\n                    }\n                }\n            }\n        }\n\n        if (newState.size) {\n            // Inject the new state in place of the most recent deleted generation.\n            this._itemUpdatesByGeneration.set(mostRecentDeletedGeneration, newState);\n        }\n\n        if (hadChanges) {\n            // Let the clients know the list must be recomputed.\n            this._dispatchItemsChangedEvent();\n        }\n    }\n\n    refresh(): void {\n        this._loadAsync(this._loadOptions).catch(this._onUnhandledPromiseError);\n    }\n\n    /**\n     * @deprecated -- Use {@link ItemList.refresh} instead. Will be removed on or after 2024-10-01.\n     */\n    load(options?: ILoadOptions): void {\n        oneTimeWarning('ItemList.load', 'ItemList.load() is deprecated and will be removed on or after'\n            + ' 2024-10-01. Use ItemList.refresh() instead. List load parameters are passed as the 3rd parameter to'\n            + ' ItemSource.getList(), which now automatically starts loading.');\n\n        // Previously, `ItemList.load()` with no parameters would always refresh the list because it implied a default\n        // value for `options.refreshTimeout` of `0` (\"refresh now\"). However, `_updateLoadOptions` assumes a\n        // default value for `options.refreshTimeout` of `-1` (\"never refresh\"). For better backward-compatibility,\n        // force a default for refreshTimeout of `0`. A defined value for refreshTimeout will override.\n        options = { refreshTimeout: 0, ...options };\n        this._updateLoadOptions(options);\n    }\n\n    // In case there is an error in load/loadNextPage that does not come from the Loader,\n    // append the error to the errors list.\n    private _onUnhandledPromiseError = (err: any): void => {\n        this._updateListStatusFromItemLoaderStates();\n        if (!this._errors?.length) {\n            this._errors = [];\n        }\n        this._errors.push(err);\n        this._status = AssetListStatus.HadLoaderErrors;\n        this.emit(STATE_CHANGED);\n    };\n\n    /**\n     * Other internal SAM.js code relies on getting a Promise.\n     * This should only be used inside SAM.js, not by clients.\n     * @package\n     */\n    async _loadAsync(options?: ILoadOptions): Promise<void> {\n        if (!this._loaderStates.length) {\n            // We don't have any loaders.\n            return;\n        }\n\n        const refreshTimeout = options?.refreshTimeout ?? 0;\n        const loadAllPages = options?.loadAllPages ?? false;\n\n        // Check if the list needs to be refreshed:\n        // 1. The user didn't provide a refresh timeout, meaning we always load the contents.\n        // 2. There is a need to refresh the contents because the list has changed outside of SAMJS.\n        // 3. There's a refresh timeout and the timeout expired. We can use this mechanism to prevent using\n        //    data that is considered to be too old without forcing a refresh all the times.\n        // 4. refreshTimeout === -1 means the client does NOT want to refresh, only wait for existing\n        //    load requests to finish, possibly for the purpose of modifying other loadOptions like limit\n        //    or loadAllPages.\n        const lastFetchTime = this._lastFetchTime;\n        if (this._needsRefresh || !lastFetchTime || !refreshTimeout || (refreshTimeout !== -1 && lastFetchTime + refreshTimeout < Date.now())) {\n            this._debug(`_loadAsync() calling _load(): _needsRefresh: ${this._needsRefresh}, lastFetchTime: ${lastFetchTime}`\n                + ` refreshTimeout: ${refreshTimeout}`);\n            await this._load(loadAllPages, options?.limit);\n            return;\n        } else {\n            this._debug(`_loadAsync() not time to refresh: _needsRefresh: ${this._needsRefresh}, lastFetchTime: ${lastFetchTime}`\n                + ` refreshTimeout: ${refreshTimeout}`);\n        }\n\n        // If there's a pending load, wait until it's finished.\n        const previousLoadPromise = this._previousLoadPromise;\n        if (previousLoadPromise) {\n            // Wait until the previous load is complete.\n            this._debug('_loadAsync() awaiting previousLoadPromise');\n            await previousLoadPromise;\n        }\n\n        if (loadAllPages) {\n            // Make sure the previous load didn't load just the first page.\n            await this._ensureAllPagesAreLoaded(options?.limit);\n        }\n    }\n\n    private async _load(loadAllPages: boolean, limit?: number): Promise<void> {\n        // Make sure we don't keep refreshing this list.\n        this._needsRefresh = false;\n\n        // Coalesce multiple load requests into one.\n        let pendingLoad = this._pendingLoad;\n        if (!pendingLoad) {\n            // Since _handlePendingLoad execution is deferred, control is returned to the caller where it\n            // should expect the List to already be loading, even though the Loader hasn't actually\n            // started.\n            this._status = AssetListStatus.Loading;\n            // _lastFetchTime must be defined now, because the _handlePendingLoad execution is deferred, which\n            // causes control to be passed back to the client. If the client then calls getList(), the refreshTimeout\n            // option would not be evaluated properly since _lastFetchTime would be stale.\n            this._lastFetchTime = Date.now();\n\n            // We use the generation to ignore results that are still in-flight.\n            // When a new load is issued, we will slowly cleanup the\n            // results as soon as the prior loading actions finish.\n            this._generation = allocGenerationIndex();\n\n            this._debug('_load() creating _pendingLoad');\n            this._pendingLoad = pendingLoad = {\n                loadAllPages,\n                limit,\n                // Make sure the load executes after the stack unrolls.\n                promise: Promise.resolve().then(this._handlePendingLoad)\n            };\n\n            // Alert clients of state change\n            this._dispatchStateChangedEvents();\n        } else if (loadAllPages) {\n            // Make sure that the pending load fetches all the pages.\n            pendingLoad.loadAllPages = true;\n        }\n        this._debug('_load() awaiting _pendingLoad');\n        await pendingLoad.promise;\n    }\n\n    private _handlePendingLoad = async () => {\n        const pendingLoad = this._pendingLoad;\n        if (pendingLoad) {\n            const { loadAllPages, limit } = pendingLoad;\n            this._pendingLoad = undefined;\n            this._debug('_handlePendingLoad() awaiting _runLoaders for loaderState.load');\n            await this._runLoaders((loaderState) => loaderState.load(this._generation, loadAllPages, limit));\n        }\n    }\n\n    loadNextPage(loadOptions?: IPageOptions): void {\n        this._loadNextPageAsync(loadOptions || this._loadOptions).catch(this._onUnhandledPromiseError);\n    }\n\n    /**\n     * Other internal SAM.js code relies on getting a Promise.\n     * This should only be used inside SAM.js, not by clients.\n     * @package\n     */\n    async _loadNextPageAsync(options?: IPageOptions): Promise<void> {\n        if (!this._loaderStates.length) {\n            // We don't have any loaders.\n            return;\n        }\n        if (this._pendingLoad) {\n            this._debug('_loadNextPageAsync() awaiting _pendingLoad');\n            await this._pendingLoad.promise;\n        } else {\n            // Since _loadAsync doesn't immediately start loading, but it does update its status and broadcast the\n            // status change event, _loadNextPageAsync must do the same. It can't be handled in _runLoaders only,\n            // because without the status event fired in _loadAsync, it'd be fired too late; with the status event\n            // fired in _loadAsync, it'd be fired redundantly.\n            this._status = AssetListStatus.Loading;\n            this._dispatchStateChangedEvents();\n            this._debug('_loadNextPageAsync() awaiting _runLoaders for loaderState.loadNextPage');\n            await this._runLoaders((loaderState) => loaderState.loadNextPage(options?.limit));\n        }\n    }\n\n    private async _runLoaders(fn: (loaderState: ItemLoaderState<ItemConfig>) => Promise<void>) {\n        // We need to update this first to avoid multiple calls to load\n        // from trying to load too often.\n        this._lastFetchTime = Date.now();\n\n        // Save the promise that triggered the last load.\n        const promise = Promise.all(this._loaderStates.map(fn));\n        this._previousLoadPromise = promise;\n\n        try {\n            this._debug('_runLoaders() awaiting loaders');\n            await promise;\n        } finally {\n            this._debug('_runLoaders() loaders complete');\n            // Remove the load promise.\n            this._previousLoadPromise = undefined;\n\n            // Notify listeners that the List.status has changed (computed from ItemLoaders). This must be the\n            // last line processed that alters any state in List, so that event listeners can immediately utilize\n            // the List in a completely settled state.\n            this._updateListStatusFromItemLoaderStates();\n            this._dispatchStateChangedEvents();\n\n            // Notify ItemSource that it can copy this list to other compatible lists.\n            // NOTE: this event not intended for clients.\n            if (this._status === AssetListStatus.ReadyFullyLoaded) {\n                this.emit(LIST_FULLY_LOADED);\n            }\n        }\n    }\n\n    setNeedsRefresh(): void {\n        if (this.status === AssetListStatus.NotStarted || !this._loaderStates.length) {\n            // List has never been loaded, so doesn't need refresh\n            return;\n        }\n\n        if (this.listenerCount(LIST_CHANGED)) {\n            // We have listeners waiting for changes, so go ahead and reload this list now.\n            this._needsRefresh = true;\n            this.refresh();\n            return;\n        }\n\n        // There are no listeners, we will keep a note to refresh this list\n        // once the list becomes active again.\n        this._needsRefresh = true;\n    }\n\n    _onEventListenerAdded() {\n        if (this._needsRefresh && this.listenerCount(LIST_CHANGED)) {\n            // Make sure the list is updated once the client\n            // needs to use the items of this list again.\n            this.refresh();\n        }\n    }\n\n    private async _ensureAllPagesAreLoaded(limit?: number): Promise<void> {\n        if (this.status !== AssetListStatus.ReadyHasMorePages) {\n            // No more pages to load. Bail out.\n            return;\n        }\n        // Looks like the previous load didn't finish all the pages.\n        // Note that if another prefetch is issued, we will just wait on the promise\n        // created by the _runLoaders below via `this._previousLoadPromise`.\n        await this._runLoaders((loaderState) => loaderState.loadAllPages(limit));\n    }\n\n    private _onItemLoaderStateChanged = (ev: ItemLoaderStateChangeEvent) => {\n        const { hasUpdatedItems } = ev;\n\n        this._cleanPreviousGenerationItemsIfNeeded();\n\n        // Only dispatch ItemsChanged events in response to ItemLoaderState events. ItemList will broadcast the\n        // StatusChanged event when exiting the load/loadNextPage methods so that all ItemList state is settled\n        // when the StatusChanged event fires.\n        if (hasUpdatedItems) {\n            this._updateListItemsFromItemLoaderStates();\n        }\n    }\n\n    // Reusable event that we use to avoid creating a new event object all the times.\n    private _globalStateChangedEvent = new ItemListStateChangedEvent(this);\n\n    /**\n     * @package -- only for use in SAM.js\n     */\n    _dispatchStateChangedEvents() {\n        this._debug(`_dispatchStateChangedEvents status: ${AssetListStatus[this.status]}`);\n        this.dispatch(SharedStateChangedEvent);\n\n        // Dispatch a global event that can be used to handle global\n        // state updates without adding individual events on all the item lists.\n        this._core.dispatch(this._globalStateChangedEvent);\n    }\n\n    private _updateListStatusFromItemLoaderStates() {\n        let newStatus: AssetListStatus = this._pendingLoad ? AssetListStatus.Loading : AssetListStatus.NotStarted;\n\n        // Remove any previous error.\n        this._errors = undefined;\n\n        for (const loaderState of this._loaderStates) {\n            switch (loaderState.status) {\n            case AssetListStatus.HadLoaderErrors:\n                // We only surface the error in cases when there's no loader pending to start.\n                if (this._pendingLoad) {\n                    break;\n                }\n\n                // We surface errors immediately.\n                this._status = AssetListStatus.HadLoaderErrors;\n                this._errors = [ loaderState.error ];\n\n                // Return early to avoid cleaning previous generation items.\n                return;\n\n            case AssetListStatus.ReadyHasMorePages:\n                if (newStatus !== AssetListStatus.Loading && !this._loadOptions?.loadAllPages) {\n                    // If we don't have a loader that is still loading, and we're not loading all pages, then\n                    // change status to ReadyHasMorePages\n                    newStatus = AssetListStatus.ReadyHasMorePages;\n                }\n                break;\n\n            case AssetListStatus.Loading:\n                // We always want to know when a page is still loading.\n                newStatus = AssetListStatus.Loading;\n                break;\n\n            case AssetListStatus.ReadyFullyLoaded:\n                if (newStatus !== AssetListStatus.ReadyHasMorePages && newStatus !== AssetListStatus.Loading) {\n                    // If we don't have a loader that still has pages to load and if we don't actually load something.\n                    newStatus = AssetListStatus.ReadyFullyLoaded;\n                }\n                break;\n            }\n        }\n\n        this._status = newStatus;\n    }\n\n    private _dispatchItemsChangedEvent() {\n        // Let the client know they have to read the item list again.\n        this.dispatch(SharedListChangedEvent);\n    }\n\n    private _updateListItemsFromItemLoaderStates() {\n        this._applyItemsChangedEvents();\n\n        const itemSet = new Set<ItemConfig['type']>();\n\n        let total: number | undefined;\n\n        // Collect the items from all the loaders.\n        for (const loaderState of this._loaderStates) {\n            loaderState.collectAllItems(itemSet);\n\n            if (loaderState.total !== undefined) {\n                total = Math.max(total || 0, loaderState.total);\n            }\n        }\n\n        // Collect any items that were changed on the client\n        // side and might not be captured in the requests from\n        // the server side yet.\n        for (const itemGeneration of this._itemUpdatesByGeneration.values()) {\n            for (const [ item, state ] of itemGeneration.entries()) {\n                if (state) {\n                    itemSet.add(item);\n                } else {\n                    itemSet.delete(item);\n                }\n            }\n        }\n\n        const items = Array.from(itemSet);\n\n        // Sort the items based on the current ordering.\n        this.order.sortItems(items);\n\n        this._items = items;\n        this._total = total;\n\n        this._dispatchItemsChangedEvent();\n    }\n\n    /**\n     * Handles the change notifications from the pool.\n     * This method executes until the GC collects the List reference.\n     * This handler must be as quick as possible and postpone any list\n     * updates until the items are actually needed by the client.\n     * @param ev\n     */\n    private _itemPoolDelegate: IItemPoolDelegate<ItemConfig['type']> = {\n        onItemsUpdated: (event: ItemsChangedEvent<ItemConfig['type']>) => {\n            if (event.updateContext === LOADER_UPDATE_CONTEXT) {\n                // Ignore changes from ItemLoaders, which are handled in _updateListItemsFromItemLoaderStates\n                // but not _applyItemsChangedEvents. This is so partially loaded lists can maintain independence\n                // from other partially loaded lists whose filters intersect. E.g., if listA has items sorted ascending,\n                // and listB has the same filter but sorted descending, loading a page from listA won't add items to\n                // listB, and vice versa. Updates still go through ItemPool, so if both lists have loaded the same item,\n                // there will only be one instance of the item.\n                return;\n            }\n\n            let pendingNotifications = this._pendingNotifications;\n            if (!pendingNotifications) {\n                pendingNotifications = [];\n                this._pendingNotifications = pendingNotifications;\n            }\n\n            pendingNotifications.push({\n                generation: this._generation,\n                event\n            });\n\n            this._updateListItemsFromItemLoaderStates();\n        }\n    };\n\n    /**\n     * Handles changes injected through the item pool. These can be either local changes\n     * made by the user, or changes detected while fetching other lists.\n     *\n     * We use this mechanism to propagate the changes immediately across the entire app.\n     * For example, if a different call detects a Space has been updated, all the active\n     * lists will get the notification and automatically apply the change to their own listing.\n     *\n     * We are only interested about additions and deletions. Note that items\n     * can be added (or removed) to the list if the mutations of the item properties make the\n     * updated item pass (or fail) the filter of the current list.\n     */\n    private _applyItemsChangedEvents(): void {\n        const pendingNotifications = this._pendingNotifications;\n        if (!pendingNotifications) {\n            return;\n        }\n        this._pendingNotifications = undefined;\n\n        // Break down changes into their own generations of added/removed items.\n\n        for (const notification of pendingNotifications) {\n            const { event, generation } = notification;\n            if (generation < this._completedGeneration) {\n                // Ignore changes from completed generations. We already have all\n                // the correct items received from the server.\n                continue;\n            }\n\n            let itemGeneration = this._itemUpdatesByGeneration.get(generation);\n            if (!itemGeneration) {\n                itemGeneration = new Map();\n                this._itemUpdatesByGeneration.set(generation, itemGeneration);\n            }\n\n            if (event.addedItems) {\n                for (const item of event.addedItems) {\n                    if (this.implicitFilter.matches(item) && this.filter.matches(item)) {\n                        itemGeneration.set(item, true);\n                    }\n                }\n            }\n\n            if (event.changedItems) {\n                for (const item of event.changedItems) {\n                    // Check if we have any items that pass the filter test or not.\n                    // We need to store both matching and non-matching, just in case\n                    // an non-matching item was matching before the update and\n                    // we now have to manually remove it from the list fetched from\n                    // the server.\n                    const included = this.implicitFilter.matches(item) && this.filter.matches(item);\n                    itemGeneration.set(item, included);\n                }\n            }\n\n            if (event.discardedItems) {\n                for (const item of event.discardedItems) {\n                    // Any discarded items must be removed entirely.\n                    itemGeneration.set(item, false);\n                }\n            }\n        }\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport TypedEventEmitter, { IEventMap } from './TypedEventEmitter';\nimport SAMEvent from './SAMEvent';\nimport ItemBase, { ItemId } from './ItemBase';\nimport WeakRef from './WeakRef';\nimport UpdateSession, { IUpdateSession, IUpdateSessionDelegate } from './UpdateSession';\nimport { ISAMCorePrivate, ISAMObject } from '../indexPrivate';\nimport { LOADER_UPDATE_CONTEXT } from './ItemList';\n\nexport const ITEMS_CHANGED = 'itemsChanged';\n\nexport class ItemsChangedEvent<LocalType extends ItemBase> extends SAMEvent {\n    constructor(\n        readonly addedItems?: LocalType[],\n        readonly changedItems?: LocalType[],\n        readonly discardedItems?: LocalType[],\n        readonly updateContext?: string,\n    ) {\n        super(ITEMS_CHANGED);\n    }\n}\n\ninterface ItemPoolEventMap<LocalType extends ItemBase> extends IEventMap {\n    [ITEMS_CHANGED]: ItemsChangedEvent<LocalType>;\n}\n\nexport interface IItemPoolDelegate<LocalType extends ItemBase> {\n    onItemsUpdated(event: ItemsChangedEvent<LocalType>, sender: ItemPool<LocalType>): void;\n}\n\n// We want to make sure that contexts delegates are added after all the lists,\n// so that they can expect the contents of the lists to be updated already.\ntype PoolDelegatePriority = 'list' | 'context';\n\n// Delegates are like events, but they keep weak references to the callbacks to\n// prevent memory leaks caused by the subscriber forgetting to unsubscribe.\ntype IPoolDelegateRef<LocalType extends ItemBase> = {\n    priority: PoolDelegatePriority;\n    delegate: WeakRef<IItemPoolDelegate<LocalType>>;\n};\n\nfunction compareDelegatesByPriority<LocalType extends ItemBase>(\n    a: IPoolDelegateRef<LocalType>, b: IPoolDelegateRef<LocalType>) {\n    if (a.priority === b.priority) {\n        return 0;\n    }\n    return a.priority === 'list' ? -1 : 1;\n}\n\nexport type ItemType =\n    | 'orgRepository'\n    | 'team'\n    | 'space'\n    | 'asset'\n    | 'collaborator'\n    | 'collaboratorsByAssetID'\n    | 'invitedCollaborator'\n    | 'version'\n    | 'project or adobeasset'\n    | 'assignment'\n    | 'gradient'\n    | 'frameio'\n    | 'classroom'\n    | 'comment'\n    | 'classroomMember';\n\n/**\n * The ItemPool class is used to keep unique references in memory for objects that\n * represent cloud items like assets, teams or spaces.\n * The ItemPool helps with mapping between a remote id and a local reference in memory.\n *\n * On supported browsers the pool uses the WeakRef object to keep the objects alive.\n * only as long as they are used by the application.\n */\nexport default class ItemPool<LocalType extends ItemBase>\n    extends TypedEventEmitter<ItemPoolEventMap<LocalType>> implements ISAMObject {\n\n    private _objectsById = new Map<ItemId, WeakRef<LocalType>>();\n    private _discardedObjects = new WeakSet<LocalType>();\n\n    private _delegates: IPoolDelegateRef<LocalType>[] = [];\n    private _hasUnsortedDelegates: boolean = false;\n\n    constructor(readonly _core: ISAMCorePrivate, readonly type: ItemType) {\n        super();\n    }\n\n    private _getObjectsById<TypeExtendsLocal extends LocalType>() {\n        return this._objectsById as Map<ItemId, WeakRef<TypeExtendsLocal>>;\n    }\n\n    /**\n     * Looks up the item in the local in-memory storage.\n     * The items are stored used WeakRef to avoid leaking. The client of this\n     * method is responsible with keeping these objects alive for as long as\n     * they are needed.\n     * @param id\n     * @returns\n     */\n    getLocalItemById = <TypeExtendsLocal extends LocalType>(id: ItemId): TypeExtendsLocal | undefined => {\n        const ref = this._getObjectsById<TypeExtendsLocal>().get(id);\n        return ref?.deref();\n    }\n\n    removeLocalItems = (ids: ItemId | ItemId[]): void => {\n        if (Array.isArray(ids)) {\n            ids.forEach((id: ItemId) => {\n                this._objectsById.delete(id);\n            });\n            return;\n        }\n        this._objectsById.delete(ids);\n    }\n\n    isItemDiscarded = (item: LocalType): boolean => {\n        return this._discardedObjects.has(item);\n    }\n\n    reindexItem = (item: LocalType, oldId: ItemId, newId: ItemId): void => {\n        if (oldId !== newId) {\n            this._objectsById.set(newId, new WeakRef(item));\n            this._objectsById.delete(oldId);\n        }\n    }\n\n    /**\n     * Creates an UpdateSession instance for add/update/delete of models in the SAM system, outside of ItemLoaders.\n     * UpdateSessions let you delay firing events until you're ready to notify clients via the commit--typically\n     * right after updating the model with remote data via one or more ItemUpdaters.\n     *\n     * @param updateContext {string} (optional) Useful to identify what is causing a particular change, especially\n     *        in ItemPool delegates.\n     * @param mostRecentValidMutation {number} (optional) Determines if UpdateSession will allow the update (see\n     *        {@link createLoaderUpdateSession})\n     */\n    createUpdateSession<TypeExtendsLocal extends LocalType>(updateContext?: string, mostRecentValidMutation?: number): IUpdateSession<TypeExtendsLocal> {\n        return new UpdateSession(this._core, this._updateSessionDelegate<TypeExtendsLocal>(), updateContext, mostRecentValidMutation);\n    }\n\n    /**\n     * For use in USS-based ItemLoaders.\n     *\n     * @param mostRecentValidMutation {number} UpdateSession only allows changes to items that that have a\n     *        `lastKnownClientMutation` before this timestamp. Since USS index lag can cause data to be 2-3 seconds\n     *        stale, all USS-based ItemLoaders *must* pass `mostRecentValidMutation` of\n     *        `Date.now() - core._environment.getValue('USS_LIST_UPDATE_LATENCY')`\n     */\n    createLoaderUpdateSession<TypeExtendsLocal extends LocalType>(mostRecentValidMutation: number): IUpdateSession<TypeExtendsLocal> {\n        return new UpdateSession(this._core, this._updateSessionDelegate<TypeExtendsLocal>(), LOADER_UPDATE_CONTEXT, mostRecentValidMutation);\n    }\n\n    /**\n     * Creates an UpdateSession for add/update/delete of models in the SAM system that get tracked as\n     * `item.lastKnownClientMutation`. Used when the data source is the \"source of truth\" for this model, in order to\n     * prevent stale data from overwriting it. E.g., for AdobeAsset, it should be used when loading a single Asset\n     * from R-API.\n     */\n    createMutationSession<TypeExtendsLocal extends LocalType>(): IUpdateSession<TypeExtendsLocal> {\n        return new UpdateSession(this._core, this._updateSessionDelegate<TypeExtendsLocal>(), undefined, undefined, 'mutation');\n    }\n\n    /**\n     * Creates an UpdateSession for ItemLoader implementations, as well as updates `item.lastKnownClientMutation`.\n     * when models are added/updated/deleted. Used when the data source is the \"source of truth\" for this model,\n     * in order to prevent stale data from overwriting it via `create*UpdateSession()`.\n     */\n    createLoaderMutationSession<TypeExtendsLocal extends LocalType>(): IUpdateSession<TypeExtendsLocal> {\n        return new UpdateSession(this._core, this._updateSessionDelegate<TypeExtendsLocal>(), LOADER_UPDATE_CONTEXT, undefined, 'mutation');\n    }\n\n    private _updateSessionDelegate = <TypeExtendsLocal extends LocalType>(): IUpdateSessionDelegate<TypeExtendsLocal> => {\n        return {\n            getLocalItemById: this.getLocalItemById,\n            isItemDiscarded: this.isItemDiscarded,\n            reindexItem: this.reindexItem,\n            commitUpdateSession: (session: IUpdateSession<TypeExtendsLocal>): void => {\n                if (!session.hasChanges) {\n                    return;\n                }\n\n                const objectsById = this._objectsById;\n                const discardedObjects = this._discardedObjects;\n\n                // Make a note about discarded objects.\n                const { discardedItems } = session;\n                if (discardedItems) {\n                    for (const item of discardedItems) {\n                        discardedObjects.add(item);\n                    }\n                }\n\n                // Inject the new items in the local map.\n                const { addedItems } = session;\n                if (addedItems) {\n                    for (const item of addedItems) {\n                        objectsById.set(item.id, new WeakRef(item));\n                        discardedObjects.delete(item);\n                    }\n                }\n\n                const event = new ItemsChangedEvent<LocalType>(\n                    session.addedItems,\n                    session.changedItems,\n                    session.discardedItems,\n                    session.updateContext,\n                );\n\n                const delegates = this._delegates;\n                if (this._hasUnsortedDelegates) {\n                    delegates.sort(compareDelegatesByPriority);\n                    this._hasUnsortedDelegates = false;\n                }\n\n                let hasEmptyWeakRefs = false;\n\n                for (const delegateRef of delegates) {\n                    const delegate = delegateRef.delegate.deref();\n                    if (!delegate) {\n                        // Remember to filter out the expired weak refs.\n                        hasEmptyWeakRefs = true;\n                        continue;\n                    }\n\n                    delegate.onItemsUpdated(event, this);\n                }\n\n                if (hasEmptyWeakRefs) {\n                    // Make another pass and keep only the delegates that are still alive.\n                    this._delegates = delegates.filter((ref) => ref.delegate.deref());\n                }\n\n                this.dispatch(event);\n            }\n        };\n    };\n\n    /**\n     * Adds a delegate to receive notifications when items change.\n     * The delegates cannot be removed, so the connection is alive\n     * as long as both the pool and the delegate are still referenced.\n     * The client must ensure the delegate is kept alive until the events\n     * are not necessary anymore.\n     *\n     * Performance: Adding too many delegates can obviously hurt performance.\n     * Make sure that the callbacks on the delegate are as fast as possible.\n     * If the user is not interested in any updates, it is best to make a note\n     * that the list is dirty and return as quick as possible. Make sure to delay\n     * any of the actual work until the data is requested by the client.\n     *\n     * Note that we are not adding this on top of the event dispatcher to avoid\n     * making the weak ref model a wide spread solution across the repo.\n     *\n     * @param delegate\n     */\n    addDelegate(delegate: IItemPoolDelegate<LocalType>, priority: PoolDelegatePriority): void {\n        this._delegates.push({ priority, delegate: new WeakRef(delegate) });\n        this._hasUnsortedDelegates = true;\n    }\n\n    forEach(fn: (item: LocalType) => void): void {\n        const objectsById = this._objectsById;\n        for (const [ key, itemRef ] of objectsById) {\n            const item = itemRef.deref();\n            if (!item) {\n                // Make sure to cleanup the interface while we do this.\n                objectsById.delete(key);\n                continue;\n            }\n            fn(item);\n        }\n    }\n\n    map<T>(fn: (item: LocalType) => T): Array<T> {\n        const results: Array<T> = [];\n        this.forEach((item: LocalType) => {\n            results.push(fn(item));\n        });\n        return results;\n    }\n\n    /**\n     * Returns all items currently in the ItemPool as an Array\n     */\n    toArray<TypeExtendsLocal extends LocalType>(): TypeExtendsLocal[] {\n        return this.map<TypeExtendsLocal>(item => item as TypeExtendsLocal);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport type {\n    Format,\n    Assignee,\n    AssetLinks,\n    ShellVisibility,\n    IAppMetadata,\n    PermissionType,\n    RepoResponseEmbeddedData\n} from './RepositoryModel';\nimport { AdobeAssetOrderField } from '../assets/AdobeAssetOrder';\nimport { USSAdobeAssetOrderField } from '../assets/USSAdobeAssetOrder';\nimport { IUSSFetchFieldType } from './AssetModel';\nimport { RelType } from './LinkUtils';\n\nexport enum SearchProps {\n    STORAGE_ASSIGNEE_TYPE = 'storage:assignee$$type',\n    VISIBLITY = 'app_metadata$$shell:visibility',\n    CREATIVE_CLOUD_TOPLEVEL_COLLECTION_NAME = 'creative_cloud_toplevel_collection_name',\n    FIELD_EXISTS = 'op_field_exists',\n    INCLUDES = 'includes',\n    TYPE = 'type',\n    ARTIFACT_FIELD = 'app_metadata$$review:sourceAsset$$dc:format',\n    STORAGE_ASSIGNEE_ID = 'storage:assignee$$id',\n    SHARED_VIA_INVITE = 'shared_via_invite',\n    OP_AND = 'op_and',\n    OP_OR = 'op_or',\n    REPO_ACL_MODIFIER = 'repo:acl$$repo:modifier',\n    REPO_ACL_PRIVILEGES = 'repo:acl$$repo:privileges',\n    REPO_ACL_RELATIONS = 'repo:acl$$repo:relations',\n    CREATED_FROM_UPLOAD = 'app_metadata$$cc:createdFromUpload',\n    CREATED_BY_CLIENT_ID = 'repo:createdByClientId'\n}\n\nexport const LastAccessedOrderField = 'api:metadata/peruser#mine$$shell:lastAccessDate';\n\nexport type IStorageAssigneeType =\n    | 'user'\n    | 'org';\n\nexport type ISearchSortOrderDirection =\n    | 'asc'\n    | 'desc';\n\nexport type ISearchSortOrderBy =\n    | 'asset_name'\n    | 'create_date'\n    | 'modify_date'\n    | 'shared_date'\n    | typeof LastAccessedOrderField;\n\nexport type ISearchVisibility = ShellVisibility;\n\nexport const OrderByToUSSOrderBy: { [key in AdobeAssetOrderField | USSAdobeAssetOrderField]: ISearchSortOrderBy } = {\n    name: 'asset_name',\n    created: 'create_date',\n    modified: 'modify_date',\n    shared: 'shared_date',\n    lastAccessed: LastAccessedOrderField\n};\n\nexport interface IHintsACPPlatform {\n    acp_platform_v2: boolean;\n    creative_cloud_rendition_v2?: boolean;\n}\n\nexport type IHint = IHintsACPPlatform;\n\ntype IncludeFields =\n    | 'app_metadata'\n    | 'collaboration_metadata'\n    | '_embedded'\n    | 'collab_metadata$$collaborators'\n    | typeof LastAccessedOrderField\n    | IUSSFetchFieldType;\n\nexport interface IFetchFieldsInclude {\n    [SearchProps.INCLUDES]: IncludeFields[];\n}\n\nexport interface IContainer {\n    asset_id: string[];\n}\n\n// These are a subset of fields USS supports for `op_field_exists`\n// Others are available.\ntype FieldExists =\n    | 'app_metadata$$review:sourceAsset$$dc:format'\n    | 'app_metadata$$cc:inheritable$$cc:team$$repo:assetId'\n    | 'app_metadata$$cc:inherited$$cc:team$$repo:assetId'\n    | 'app_metadata$$cc:inheritable$$cc:space$$repo:assetId'\n    | 'app_metadata$$cc:inherited$$cc:space$$repo:assetId'\n    | 'app_metadata$$cc:createdFromUpload'\n    | typeof LastAccessedOrderField;\n\nexport interface IOpFieldExists {\n    [SearchProps.FIELD_EXISTS]: FieldExists[];\n}\n\nexport interface IOpAnd {\n    [SearchProps.OP_AND]: IOp;\n}\n\nexport interface IOpOr {\n    [SearchProps.OP_OR]: IOp;\n}\n\nexport interface IOpVisibility {\n    [SearchProps.VISIBLITY]: ISearchVisibility | ISearchVisibility[];\n}\n\n// \"assets\" and \"archive\" = /assets and /archive folders, respectively\ntype TopLevelCollectionName = 'archive' | 'appdata' | 'assets' | 'cloud-content' | 'pubs' | 'files';\nexport interface IOpTopLevelCollection {\n    [SearchProps.CREATIVE_CLOUD_TOPLEVEL_COLLECTION_NAME]: TopLevelCollectionName | TopLevelCollectionName[];\n}\n\nexport interface IOpType {\n    [SearchProps.TYPE]: string[];\n}\n\nexport interface IOpStorageAssigneeId {\n    [SearchProps.STORAGE_ASSIGNEE_ID]: string | string[];\n}\n\nexport interface IOpStorageAssigneeType {\n    [SearchProps.STORAGE_ASSIGNEE_TYPE]: IStorageAssigneeType;\n}\n\nexport interface IOpCreatedFromUpload {\n    [SearchProps.CREATED_FROM_UPLOAD]: boolean;\n}\n\nexport interface IOpCreatedByClientId {\n    [SearchProps.CREATED_BY_CLIENT_ID]: string;\n}\n\nexport interface IOpHasPermission {\n    [SearchProps.REPO_ACL_MODIFIER]: 'grant';\n    [SearchProps.REPO_ACL_PRIVILEGES]: PermissionType[];\n    [SearchProps.REPO_ACL_RELATIONS]: RelType[];\n}\n\nexport interface IOpSharedViaInvite {\n    [SearchProps.SHARED_VIA_INVITE]: boolean;\n}\n\nexport type IOp = (\n    | IOpFieldExists\n    | IOpVisibility\n    | IOpTopLevelCollection\n    | IOpType\n    | IOpStorageAssigneeId\n    | IOpSharedViaInvite\n    | IOpAnd\n    | IOpOr\n    | IOpStorageAssigneeType\n    | IOpHasPermission\n    | IOpCreatedFromUpload\n    | IOpCreatedByClientId\n)[];\n\n/**\n * USS API Docs\n * https://git.corp.adobe.com/pages/adobesearch/search-services-docs/uss/cc/response/\n */\nexport interface ISearchQuery {\n    [SearchProps.STORAGE_ASSIGNEE_TYPE]?: IStorageAssigneeType[];\n    [SearchProps.CREATIVE_CLOUD_TOPLEVEL_COLLECTION_NAME]?: TopLevelCollectionName[];\n    asset_id_opacity?: boolean;\n    creative_cloud_archive?: boolean;\n    creative_cloud_discarded_directly?: boolean;\n    container?: IContainer;\n    fetch_fields?: IFetchFieldsInclude;\n    hints?: IHint | IHint[];\n    limit?: number;\n    op_and?: IOp;\n    op_none_of?: IOp;\n    op_or?: IOp;\n    op_field_exists?: FieldExists[];\n    scope?: string[];\n    shared_by_me?: boolean;\n    parent_id?: string[];\n    shared_via_invite?: boolean;\n    sort_order?: ISearchSortOrderDirection;\n    sort_orderby?: ISearchSortOrderBy;\n    start_index?: number;\n    [SearchProps.TYPE]?: string[];\n    q?: string;\n    [SearchProps.STORAGE_ASSIGNEE_ID]?: string | string[];\n}\n\ntype USSResponseResultSet = {\n    items: Partial<USSMetadata>[]\n    total_items: number,\n}\n\ntype USSResponseStatus = {\n    scope: string;\n    status: number;\n}\n\nexport type USSResponse = {\n    result_sets: USSResponseResultSet[];\n    status: USSResponseStatus[];\n}\n\ntype IUSSColaborationPermissions = 'canShare' | 'canComment';\n\ninterface IUSSCollaborationMetadata {\n    collaborator_id: string;\n    inviter_id: string;\n    shared_date: number;\n    role: 'viewer' | 'editor';\n    permissions: IUSSColaborationPermissions[];\n    type: 'individual' | 'group';\n    modified_date: number;\n}\n\nexport interface IPerUserMetadata {\n    'shell:favorite': boolean,\n    'shell:lastAccessDate': string\n}\n\nexport interface IUSSApplicationMetadata {\n    'cc:createdFromUpload'?: boolean;\n}\n\nexport type USSMetadata = {\n    type: Format,\n    asset_name: string,\n    asset_name_path: string,\n\n    create_date: string,\n\n    modify_date: string,\n\n    // A globally unique identifier for this Asset.\n    asset_id: string,\n\n    // the etag equivalent for composites\n    composite_manifest_etag: string,\n    etag: { primary: string },\n\n    // The Repository ID of the Repository storing this Asset.\n    'repo:repositoryId': string\n\n    // As per USS docs, this field is either 'composite' or 'element' when `creative_cloud_asset_type` is 'dcx'\n    // https://git.corp.adobe.com/pages/adobesearch/search-services-docs/uss/cc/response/\n    asset_sub_type: 'composite' | 'element',\n\n    'collab_metadata#mine': IUSSCollaborationMetadata,\n\n    // USS returns one of the following 4 values for this field\n    creative_cloud_asset_type: 'asset' | 'collection' | 'mount' | 'dcx',\n\n    // colortheme & gradient only apply to discarded Library Elements?\n    creative_cloud_colortheme?: any;\n    creative_cloud_gradient?: any;\n\n    // Size of the Primary Resource in bytes. Not applicable for directories\n    size: number,\n\n    // IMS User Id of the user who created this Asset.\n    creative_cloud_creator_id: string,\n\n    // WARNING: do not use. This appears to be populated by the XMP metadata version from the MANIFEST,\n    // not `repo:version` from repo metadata.\n    // 'repo:version': string;\n\n    // This field maps to the repo metadata repo:version field\n    'asset_version_id': string;\n\n    'storage:assignee': Assignee,\n\n    region: string,\n\n    collab_metadata: object,\n\n    collaboration_metadata: IUSSCollaborationMetadata[],\n\n    app_metadata: IAppMetadata,\n\n    // assetId of asset's ancestors, root starts from index 0\n    path: string[],\n\n    _links: AssetLinks,\n\n    // per user metadata\n    'api:metadata/peruser': IPerUserMetadata[],\n    'api:metadata/application': IUSSApplicationMetadata,\n\n    // effective permissions\n    _embedded: RepoResponseEmbeddedData\n};\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport InterfaceBase from './InterfaceBase';\nimport { ISearchQuery, SearchProps, USSResponse } from './USSModel';\nimport packageJSON from '../../package.json';\n\nconst DefaultSearchQuery: ISearchQuery = {\n    scope: [ 'creative_cloud' ],\n    // Ensures assetIds in results are returned with the correct casing. E.g. \":US:\" instead of \":us:\"\n    asset_id_opacity: true\n};\n\nexport default class USSInterface extends InterfaceBase {\n\n    private _getEndpointHref(endpoint: string): string {\n        return `https://${this._core._environment.endpoints.USS_HOST}${endpoint}`;\n    }\n\n    async getQueryResponse(searchQuery: ISearchQuery): Promise<USSResponse> {\n        searchQuery = { ...DefaultSearchQuery, ...searchQuery };\n        const endpointHref = this._getEndpointHref('/universal-search/v2/search');\n        const { PRODUCT_ID } = this._core._environment.getValue('HOST_PRODUCT_DATA');\n\n        const response = await this._doPost(\n            endpointHref,\n            {\n                'Content-Type': 'application/vnd.adobe.search-request+json',\n                'X-Product': PRODUCT_ID,\n                'X-Product-Location': `SAM.js/${packageJSON.version}`\n            },\n            JSON.stringify(searchQuery), [ 200 ]);\n\n        return response.json();\n    }\n\n    async searchSpace(\n        parentFolderId: string,\n        searchArtifacts: boolean,\n        embedPermissions: boolean,\n        options?: Partial<ISearchQuery>\n    ): Promise<USSResponse> {\n        const query: ISearchQuery = {\n            hints: [ { acp_platform_v2: true, creative_cloud_rendition_v2: true } ],\n            fetch_fields: { includes: [ 'app_metadata', 'collaboration_metadata' ] },\n            sort_orderby: options?.sort_orderby ?? 'modify_date',\n            sort_order: options?.sort_order ?? 'desc',\n            limit: options?.limit ?? 50,\n            start_index: options?.start_index ?? 0,\n            [SearchProps.TYPE]: options?.type || [],\n            container: { asset_id: [ parentFolderId ] },\n        };\n\n        if (!searchArtifacts) {\n            query.op_none_of = [\n                // exclude Artifacts\n                { op_field_exists: [ SearchProps.ARTIFACT_FIELD ] },\n                // exclude hidden\n                { [SearchProps.VISIBLITY]: [ 'hiddenSelf', 'hiddenRecursive' ] }\n            ];\n        } else {\n            // Only include artifacts\n            query.op_field_exists = [ SearchProps.ARTIFACT_FIELD ];\n        }\n        if (embedPermissions) {\n            query.fetch_fields!.includes.push('_embedded');\n        }\n\n        return this.getQueryResponse(query);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { SAMError, SAMErrorCode } from '../core/SAMError';\nimport InterfaceBase from './InterfaceBase';\nimport {\n    IInvitationShareBatchResponse,\n    IInvitationShareResponse,\n    IInvitationShareRequest,\n    IInvitationSharePatchRequest,\n    IPendingInvitation,\n    IInvitationBulkPatchResponse\n} from './InvitationModel';\n\nexport default class InvitationInterface extends InterfaceBase {\n\n    private _batchRequestLimit: number = 50;\n\n    get batchRequestLimit() {\n        return this._batchRequestLimit;\n    }\n\n    private _getUrl(endpoint: string): string {\n        return `https://${this._core._environment.endpoints.INVITATIONS_HOST}${endpoint}`;\n    }\n\n    async getCollaborators(urn: string): Promise<IInvitationShareResponse> {\n        // This allows piggybacking on a single request, so that we can support loading both the collaborators\n        // and invitations at the same time, without making two separate requests (the data for both of these\n        // is in the same response).\n        return await this._getSharedResponse(this._getUrl(`/api/v4/share/${encodeURIComponent(urn)}?extraFeatures=direct_acl`));\n    }\n\n    async addCollaborators(urn: string, request: IInvitationShareRequest): Promise<void> {\n        await this._doPost(\n            this._getUrl(`/api/v4/share/${encodeURIComponent(urn)}`),\n            {},\n            JSON.stringify(request),\n            [ 200 ]);\n    }\n\n    async modifyCollaborators(urn: string, request: IInvitationSharePatchRequest): Promise<IInvitationBulkPatchResponse> {\n        const response = await this._doPatch(\n            this._getUrl(`/api/v4/share/${encodeURIComponent(urn)}`),\n            {},\n            JSON.stringify(request),\n            [ 200 ]);\n        return await response.json();\n    }\n\n    async getCollaboratorListForUrns(urns: string[]): Promise<IInvitationShareBatchResponse> {\n        const request = {\n            'operation': 'bulkGetShares',\n            'parameters': {\n                urns,\n                'queryParams': {\n                    'extraFeatures': 'direct_acl,legacy_role'\n                }\n            }\n        };\n        const response =  await this._doPost(\n            this._getUrl(`/ops/v4/shares`),\n            { 'Content-Type': 'application/json' },\n            JSON.stringify(request),\n            [ 200 ]);\n\n        const result = await response.json();\n\n        // response is 200, but result is not in proper format\n        if (!result.result || !Array.isArray(result.result)) {\n            throw SAMError.create(SAMErrorCode.UNKNOWN, 'Failed to parse response for Invitation Service bulk API.');\n        }\n\n        return result;\n    }\n\n    async confirmAccess(urn: string): Promise<void> {\n        await this._doPost(\n            this._getUrl(`/api/v4/invitations/urn/${encodeURIComponent(urn)}`),\n            {},\n            undefined,\n            [ 200 ]);\n    }\n\n    // might be able to remove this after invitation service handles https://jira.corp.adobe.com/browse/CPX-7447\n    _shouldRetryMonitorResponse(asyncResponse: Response, body: string): boolean {\n        if (asyncResponse.status === 200) {\n            const responseBody = JSON.parse(body);\n            if (responseBody.jobStatus !== 'completed') {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    async declineAccess(urn: string): Promise<void> {\n        await this._doDelete(\n            this._getUrl(`/api/v4/invitations/urn/${encodeURIComponent(urn)}`),\n            {},\n            [ 200 ]);\n    }\n\n    async getPendingInvitations(): Promise<IPendingInvitation> {\n        const response = await this._doGet(\n            this._getUrl('/api/v4/invitations'),\n            { headers: { 'Content-Type': 'application/json' } }\n        );\n        return await response.json();\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\nexport type IsEqualFn = (a: any, b: any) => boolean;\n\nexport function isStrictEqual(a: any, b: any) {\n    return a === b;\n}\n\nexport function deepClone(value: any) {\n    return JSON.parse(JSON.stringify(value));\n}\n\n/**\n * Compares two items, including all their iterable properties, and all their nested properties.\n *\n * @param a {any} is compared to b\n * @param b {any} is compared to a\n * @param ignoreArrayOrder {boolean} (optional) when true, order of arrays does not matter.\n * @return {boolean} true if they match\n */\nexport function isDeepEqual(a: any, b: any, ignoreArrayOrder: boolean = false): boolean {\n    if (a === b) {\n        return true;\n    }\n\n    if (typeof a !== typeof b || a.constructor !== b.constructor) {\n        return false;\n    }\n\n    if (a instanceof Date) {\n        return a.toISOString() === b.toISOString();\n    }\n\n    if (Array.isArray(a)) {\n        const count = a.length;\n        if (count !== b.length) {\n            return false;\n        }\n        let arry1 = a;\n        let arry2 = b;\n        if (ignoreArrayOrder) {\n            // copy array to avoid mutating the original arrays\n            // .slice(0) is fastest, even faster than .slice()\n            arry1 = a.slice(0).sort();\n            arry2 = b.slice(0).sort();\n        }\n        for (let i = 0; i < count; ++i) {\n            if (!isDeepEqual(arry1[i], arry2[i], ignoreArrayOrder)) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    if (a instanceof Set) {\n        if (a.size !== b.size) {\n            return false;\n        }\n        for (const key of a.keys()) {\n            if (!b.has(key)) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    if (a instanceof Map) {\n        if (a.size !== b.size) {\n            return false;\n        }\n        for (const key of a.keys()) {\n            if (!b.has(key)) {\n                return false;\n            }\n            if (!isDeepEqual(a.get(key), b.get(key), ignoreArrayOrder)) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    if (typeof a === 'object') {\n        const keysA = Object.keys(a);\n        const keysB = Object.keys(b);\n        const count = keysA.length;\n        if (count !== keysB.length) {\n            return false;\n        }\n        keysA.sort();\n        keysB.sort();\n\n        for (let i = 0; i < count; ++i) {\n            const key = keysA[i];\n            if (key !== keysB[i]) {\n                return false;\n            }\n            if (!isDeepEqual(a[key], b[key], ignoreArrayOrder)) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    // We don't support other types.\n    return false;\n}\nexport const secondsPerHour = 60 * 60;\nexport const millisecondsPerHour = secondsPerHour * 1000;\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport AssetInterface from '../interface/AssetInterface';\nimport TypedEventEmitter from '../core/TypedEventEmitter';\nimport { ItemBaseEvents } from '../core/ItemBase';\nimport { isDeepEqual } from '../core/ObjectUtils';\nimport { ISAMCorePrivate } from '../indexPrivate';\n\n// @TODO Verify this solution and address the following task.\n// We should also write unit tests precisely verifying this behavior.\n// https://jira.corp.adobe.com/browse/SAM-2677\nconst finalizationRegistry = new FinalizationRegistry(objUrl => {\n    URL.revokeObjectURL(objUrl as string);\n});\n\nexport enum RenditionStatus {\n    /**\n     * Initial status\n     */\n    NotStarted = 0,\n    Fetching = 1,\n    Done = 2,\n    /**\n     * Occurs when there are any errors around fetching the\n     * rendition from the service, AdobeAsset.clearRenditionError can\n     * be used to clear the error and fetch again.\n     */\n    Error = 3\n}\n\nexport enum RenditionSize {\n    Size64 = 64,\n    Size128 = 128,\n    Size256 = 256,\n    Size512 = 512,\n    Size1024 = 1024,\n}\n\nexport enum RenditionType {\n    PNG = 'image/png',\n    JPEG = 'image/jpeg'\n}\n\nexport const THUMBNAIL_SIZE: number = RenditionSize.Size512; // matches ACPL/SAM.cpp thumbnail size\n\nconst SUPPORTED_SIZES = [\n    RenditionSize.Size64,\n    RenditionSize.Size128,\n    RenditionSize.Size256,\n    RenditionSize.Size512,\n    RenditionSize.Size1024\n];\n\ntype RenditionSizeEntry = {\n    type: string;\n    url: string;\n    size: number;\n    status: RenditionStatus;\n    etag: string;\n}\n\nexport class RenditionFetcher extends TypedEventEmitter<ItemBaseEvents>  {\n    private _entries: RenditionSizeEntry[] = [];\n    private _etag: string = '';\n\n    constructor(\n        public _core: ISAMCorePrivate\n    ) {\n        super();\n    }\n\n    /**\n     * Given any number, this method will return a predefined\n     * size that is greater than or equal to the target size.\n     * You may also specify an existing sizes array.\n     *\n     * @param targetSize The preferred or target size.\n     * @param sizes An array of sizes to sort and find.\n     * @returns\n     */\n    private _getStandardSize(targetSize: number, sizes: number[] = SUPPORTED_SIZES) {\n        // Clone the provided array so we don't alter it.\n        const sortedArray = [ ...sizes ].sort((a, b) => a - b);\n        const index = sortedArray.findIndex((s) => s >= targetSize);\n\n        // If no sizes are large enough, return the largest\n        if (index === -1) {\n            return sortedArray[sortedArray.length - 1];\n        }\n\n        return sortedArray[index];\n    }\n\n    private _findURLEntry(size: number, type: string): RenditionSizeEntry | undefined {\n        const clampedSize = this._getStandardSize(size);\n        if (this._entries.length > 0) {\n            return this._entries.find((u) => u.size === clampedSize && u.type === type && u.status !== RenditionStatus.Error);\n        }\n        return undefined;\n    }\n\n    /**\n     * Removes all entries matching the provided outdated\n     * etag.\n     *\n     * @param outdatedEtag\n     */\n    private _clearStaleEntries(outdatedEtag: string) {\n        const filteredEntries = this._entries.filter((entry) => {\n            if (entry.etag === outdatedEtag) {\n                URL.revokeObjectURL(entry.url);\n                return false;\n            }\n            return true;\n        });\n        this._entries = filteredEntries;\n    }\n\n    /**\n     * Finds an entry based on the provided size/type and returns\n     * a fallback size that is greater than the target, if available.\n     *\n     * @param size\n     * @param type\n     * @returns {IURLEntry}\n     */\n    private _getEntryWithFallback(size: number, type: string): RenditionSizeEntry | undefined {\n        const foundEntry = this._findURLEntry(size, type);\n        if (foundEntry) {\n            return foundEntry;\n        }\n\n        // If the exact size is not available and there\n        // are other sizes and types, return the size\n        // that is at-least greater than or equal to the current size.\n        const sizesArray =  this._entries.map((entry) => entry.size);\n        if (this._entries.length > 0) {\n            // Since we are passing in our own sizes array\n            // this should return the closest size already\n            // available.\n            const foundSize = this._getStandardSize(size, sizesArray);\n            return this._entries.find(s => s.size === foundSize);\n        }\n        return undefined;\n    }\n\n    /**\n     * Returns the download status of the requested rendition.\n     *\n     * @param size\n     * @param type\n     * @param etag\n     * @returns\n     */\n    public renditionURLStatus(size: number, type: string, etag: string): RenditionStatus {\n        const clampedSize = this._getStandardSize(size);\n        const urlStatus = this._entries.find(\n            e => e.etag === etag\n            && e.size >= clampedSize\n            && e.type === type\n        );\n        return (urlStatus && urlStatus.status) ?? RenditionStatus.NotStarted;\n    }\n\n    public get etag(): string {\n        return this._etag;\n    }\n\n    /**\n     *\n     * @param size Target size for the rendition\n     * @param type String type for example image/png.\n     * @param etag The etag string for cache busting.\n     * @param assetInterface {AssetInterface}\n     * @returns {string} The URL for the rendition.\n     */\n    public getURL(\n        size: number,\n        type: string,\n        etag: string,\n        assetInterface: Promise<AssetInterface>\n    ): string {\n        const etagChanged = etag !== this.etag;\n        const renditionEntry = this._getEntryWithFallback(size, type);\n        const clampedSize = this._getStandardSize(size);\n\n        // If we do have a rendition wether it be exact or a fallback\n        // we could return it but if the requested size is larger\n        // than the one we have in the cache we will need to add a new entry\n        // and start fetching.\n        if (renditionEntry && renditionEntry.size >= clampedSize && !etagChanged) {\n            return renditionEntry.url;\n        }\n\n        const newEntry = {\n            size: clampedSize,\n            status: RenditionStatus.Fetching,\n            url: '',\n            type,\n            etag\n        };\n\n        // If we find an existing entry that exactly matches our new\n        // entry then we wont need to fetch again.\n        const recentlyAddedEntry = this._entries.find(e =>\n            isDeepEqual(e, newEntry)\n            // We also want to check if there is an identical entry\n            // but with an error so that we don't keep fetching over and\n            // over again in case of a thumbnail fetching error.\n            || isDeepEqual(e, { ...newEntry, status: RenditionStatus.Error })\n        );\n\n        // If we know we have an existing entry and we have\n        // a new entry that was recently added but it's state\n        // is loading then we need to just return the existing url\n        // until this is no longer true.\n        // @note Without this logic, the ui will go into an infinite\n        // loop causing the browser to crash because we are fetching\n        // and pushing change notifications over and over again.\n        if (renditionEntry && recentlyAddedEntry) {\n            return renditionEntry.url;\n        }\n\n        this._entries.push(newEntry);\n\n        this._fetch(\n            newEntry,\n            assetInterface,\n        );\n\n        // If we have a rendition entry after starting to fetch\n        // it means that we have a new size requested with a fallback.\n        // Return the fallback while the new size is fetching.\n        if (renditionEntry) {\n            return renditionEntry.url;\n        }\n\n        // If the etag hasn't changed and we have an entry we should\n        // return the existing entry while waiting for the new one.\n        return newEntry.url;\n    }\n\n    // First we find if there is an existing entry\n    // then if there isn't, we create one\n    // if there is, we update the existing entry\n    private async _fetch(\n        entry: RenditionSizeEntry,\n        assetInterface: Promise<AssetInterface>,\n    ): Promise<void> {\n        const { size, type, etag } = entry;\n        const ai = await assetInterface;\n\n        this.dispatch({ type: 'change' });\n\n        // We want to fetch the URL contents and create an objectURL and return the path\n        // to clients instead of the raw URL because services in future will not\n        // allow the authorization token to be passed directly in the rendition URL\n        try {\n            const renditionBlob = await ai.getRendition(size, type);\n\n            // If there is a new etag all the old URLS that are now\n            // out of date so let's remove the existing ones.\n            if (etag && etag !== this._etag) {\n                this._clearStaleEntries(this._etag);\n                this._etag = etag;\n            }\n\n            entry.size = size;\n            entry.type = type;\n            entry.url = URL.createObjectURL(renditionBlob);\n            finalizationRegistry.register(this, entry.url, entry);\n            entry.status = RenditionStatus.Done;\n            entry.etag = etag;\n\n            this.dispatch({ type: 'change' });\n        } catch (e) {\n            // IF there was an error fetching the thumbnail, we don't\n            // want clients stuck in a bad state so we set the rendition\n            // to an error dispatch a change event.\n            entry.status = RenditionStatus.Error;\n            this.dispatch({ type: 'change' });\n        }\n\n    }\n\n    /**\n     * Resets the rendition status on the requested rendition to RenditionStatus.NotStarted\n     */\n    public clearRenditionError(size: number, type: string, etag: string): void {\n        const clampedSize = this._getStandardSize(size);\n        // Find an entry that has all the properties\n        // of the request one including the error status.\n        // Leaving out the URL case if for some reason it has a value\n        // but we still want to reset the error.\n        const foundErrorEntryIndex = this._entries.findIndex(e =>\n            e.size >= clampedSize\n            && e.type === type\n            && e.etag === etag\n            && e.status === RenditionStatus.Error\n        );\n\n        if (foundErrorEntryIndex === -1) {\n            return;\n        }\n\n        // Remove the entry so that when getURL is called again\n        // it will add a new entry and begin the fetch process\n        // again.\n        this._entries.splice(foundErrorEntryIndex, 1);\n        this.dispatch({ type: 'change' });\n    }\n\n    public release(): void {\n        if (this._entries.length === 0) {\n            return;\n        }\n\n        this._entries.forEach((value) => {\n            URL.revokeObjectURL(value.url);\n            finalizationRegistry.unregister(this);\n        });\n        this._entries = [];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { IUpdateSession } from '../core/UpdateSession';\nimport ItemPool from '../core/ItemPool';\nimport AdobeAsset from './AdobeAsset';\nimport Project from '../projects/Project';\nimport { ISAMCorePrivate } from '../indexPrivate';\nimport { AssetState } from '../interface/RepositoryModel';\nimport Space from '../workspaces/Space';\n\nconst MAX_LENGTH = 255;\nconst RESERVED_NAME_REGEX = /^(CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])$/i;\nconst RESERVED_CHAR_REGEX = /[\\\\/:*?\"|><]/;\n\nexport interface IFormatFileNameResult {\n    newName: string;\n    countUsed: number;\n}\n\nexport type NameConflictMap = Map<string, IFormatFileNameResult>;\n\n/** A map of asset IDs to their new names */\nexport type AssetRenameMap<T extends AdobeAsset | Space> = Map<T['id'], T['name']>;\n\nexport function validatePlatformRepoName(name: string) {\n    return (name.length > 0\n        && name.length <= MAX_LENGTH\n        && !RESERVED_NAME_REGEX.test(name)\n        && !RESERVED_CHAR_REGEX.test(name));\n}\n\nconst PATH_REGEX = /^(.*\\/)?(.*?)(?:[\\u00A0][^.]*)?(\\.[^.]*)?$/;\n\n/**\n * Called by SAM to get new name according to the specified format and counter\n * @param fullPath path of the asset, it can be full path/relative path/filename\n * @param format format should contain %@ and %d\n *      %@ to be replace with filename\n *      %d to be replace with supplied counter. counter value will change in following cases:\n *          - filename matches the format and counter supplied. counter will increment by 1\n *          - filename matches the formatWithoutCount and counter = 0. counter will be made 1\n *            e.g name = test copy, format = %@ copy %d, counter = 0 -> newName = test copy 1, countUsed = 1\n * @param counter count to be used in newName\n * @returns the IFormatFileNameResult object which contains new name and count used in new name\n */\nexport function formatFileName(fullPath: string, format: string, counter: number): IFormatFileNameResult {\n    // create regex from client passed format\n    function getRegexFormat(format: string, extPresent: boolean) {\n        // replace '(', ')' with backspace '\\(', '\\)'\n        let regexFormat = format.replace(/[()]/g, '\\\\$&');\n        // insert match patern for %d and %@\n        regexFormat = regexFormat.replace('%d', '([0-9]+)');\n        regexFormat = regexFormat.replace('%@', '(.*)?');\n        // if extPresent is true, we expect to find extension, otherwise it is optional\n        regexFormat = regexFormat + (extPresent ? '(\\\\.[^.]*)$' : '(\\\\.[^.]*)?$');\n        return regexFormat;\n    }\n    const extPresent = fullPath.lastIndexOf('.') > fullPath.lastIndexOf('/');\n    const regexFormat = getRegexFormat(format, extPresent);\n\n    // remove count from string\n    const formatWithoutCount = format.replace(/ [^ ]*$/, '');\n    const regexFormatWithoutCount = getRegexFormat(formatWithoutCount, extPresent);\n\n    // get parsed result\n    let result = fullPath.match(regexFormat);\n    let resultMatchedRegexWithoutCount: boolean = false;\n    if (result === null) {\n        result = fullPath.match(regexFormatWithoutCount);\n        resultMatchedRegexWithoutCount = result !== null;\n    }\n    let newPath: string = '';\n    let fileExtension: string = '';\n    if (result) {\n        let path: string = '';\n        let extension: string = '';\n        let currentCount: string = '';\n        if (resultMatchedRegexWithoutCount) {\n            [ , path, extension ] = result;\n        } else {\n            [ , path, currentCount, extension ] = result;\n        }\n        newPath = path;\n        fileExtension = extension;\n        if (resultMatchedRegexWithoutCount && counter === 0) {\n            // since the name does not contain the count\n            // but matches the regex without count, so\n            // if counter=0, next name in iteration is with counter=1\n            counter = 1;\n        } else if (!resultMatchedRegexWithoutCount && parseInt(currentCount) === counter) {\n            // since the name matches the format with count\n            // we should skip the counter that matches the current name\n            counter += 1;\n        }\n    } else {\n        const [ , directory, filename, extension ] = fullPath.match(PATH_REGEX)!; // All strings match the regexp above\n        newPath = `${directory || ''}${filename || ''}`;\n        fileExtension = extension;\n    }\n    let newName = '';\n    if (counter !== 0) {\n        newName = format.replace('%@', `${newPath || ''}`);\n        newName = newName.replace('%d', counter.toString());\n    } else {\n        newName = formatWithoutCount.replace('%@', `${newPath || ''}`);\n    }\n    return {\n        newName: `${newName || ''}${fileExtension || ''}`,\n        countUsed: counter\n    } as IFormatFileNameResult;\n}\n\n/**\n * Called to get newName as per format in case of batch ops. It considers name of other files as well in the operation for finding conflicts\n * @param core SAMCore\n * @param assetId Asset Id\n * @param newName FileName\n * @param sameFolder true if copying in same folder\n * @param assetConflictMap It saves the newName and count used for all files in batch\n */\nexport function batchFormatFileName(\n    core: ISAMCorePrivate,\n    assetId: string,\n    newName: string,\n    sameFolder: boolean,\n    assetConflictMap: NameConflictMap\n): string {\n    let localCounter = assetConflictMap.get(assetId)?.countUsed || 0;\n    let conflictWithOtherFilesInBatch: boolean = false;\n    const conflictedAssetIds: string[] = [];\n    // check if we are copying in the same folder\n    // if yes, then it should follow ASSET_COPY_NAME_FORMAT i.e. %@ copy (%d)\n    // if no and conflict, then it should follow ASSET_CONFLICT_NAME_FORMAT i.e. %@ (%d)\n    do {\n        const formatFileResult = sameFolder ? formatFileName(newName, core._environment.getValue('ASSET_COPY_NAME_FORMAT'), localCounter)\n            : (localCounter > 0 ? formatFileName(newName, core._environment.getValue('ASSET_CONFLICT_NAME_FORMAT'), localCounter) : { newName, countUsed: localCounter });\n        newName = formatFileResult.newName;\n        localCounter = formatFileResult.countUsed;\n\n        conflictWithOtherFilesInBatch = false;\n        for (const [ key, value ] of assetConflictMap) {\n            if (value.newName === newName) {\n                conflictWithOtherFilesInBatch = true;\n                conflictedAssetIds.push(key);\n                break;\n            }\n        }\n\n        if (conflictWithOtherFilesInBatch) {\n            localCounter++;\n        } else {\n            assetConflictMap.set(assetId, formatFileResult);\n        }\n    } while (conflictWithOtherFilesInBatch);\n\n    for (const id of conflictedAssetIds) {\n        // we should update count of all files which this file conflicted with\n        // so that they also start with the new count next time\n        const currentValue = assetConflictMap.get(id);\n        assetConflictMap.set(id, { newName: currentValue!.newName, countUsed: localCounter });\n    }\n    return newName;\n}\n\nconst ARCHIVE_GUID_REGEX = /^(.*)\\^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[12345][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/;\n\n// Archived assets get a guid suffix appended, so need to remove it when restoring\nexport function removeArchiveGuidFromName(name: string) {\n    const match = name.match(ARCHIVE_GUID_REGEX);\n    return match ? match[1] : name;\n}\n\n// Clients that haven't yet migrated to R-API still use the old archive locations when deleting assets (as a 2-step delete).\n// These locations are treated as discarded by SAM.js, but to implement recover() we need to know where to move the assets back to.\n// This is a mapping from the archive location to the restore location.\nconst ARCHIVE_TO_RESTORE_LOCATION: { [s: string]: string } = {\n    'cloud-content-archive': 'cloud-content',\n    'assets-archive': 'assets',\n    'archive': 'files'\n};\n\nexport function getRestorePath(path: string, newName?: string): string | undefined {\n    const newPath = path.split('/');\n\n    // Paths always start with \"/\" so newPath[0] is ''\n    // ESM paths are of the form /users/<userid>/...\n    const archiveIndex = newPath[1] === 'users' ? 3 : 1;\n    const restoreFolder = ARCHIVE_TO_RESTORE_LOCATION[newPath[archiveIndex]];\n    if (!restoreFolder) {\n        // Not archived, so no restore location\n        return undefined;\n    }\n\n    newPath[archiveIndex] = restoreFolder;\n    newPath[newPath.length - 1] = newName || removeArchiveGuidFromName(newPath[newPath.length - 1]);\n    return newPath.join('/');\n}\n\n/**\n * Replaces the ending filename in a path with the newName\n * and returns the result as a single string.\n *\n * @param newName\n * @param asset\n * @returns\n */\nexport function renameFileInPath(newName: string, asset: AdobeAsset | Project): string {\n    const path = asset.repoPath.split('/').slice(0, -1);\n    path.push(newName);\n    return path.join('/');\n}\n\n/**\n * Updates the cached descendents of the provided asset.\n *\n * @param param.assetPool Asset pool where items are to be udpated\n * @param param.asset The target asset to check for descendants.\n * @param param.session The update session\n * @param param.basePath The new base path string.\n * @returns\n */\ntype UpdateCachedDescendentsOperation =\n  | { type: 'discard' }\n  | { type: 'restore'; newPath?: string }\n  | { type: 'rename'; newPath: string };\n\nexport function updateCachedDescendents(params: {\n    operation: UpdateCachedDescendentsOperation,\n    assetPool: ItemPool<AdobeAsset>,\n    asset: AdobeAsset,\n    session: IUpdateSession<AdobeAsset>\n}) {\n    const { assetPool, asset, session, operation } = params;\n    if (!asset.isFolder || !asset.repoPath.trim()) {\n        // The asset must be a folder with a non-empty path\n        return;\n    }\n\n    // make sure we update the repo:path of all the descendants of this folder\n    assetPool.forEach(item => {\n        if (\n            item.repoPath.startsWith(asset.repoPath + '/') // make sure the item is a descendant of the asset\n        ) {\n            switch (operation.type) {\n            case 'rename': {\n                // Used by both rename and move operations.\n                // Checking if the item's repoPath starts with the folder's repo:path with '/' appended\n                // this also rules out the folder itself.\n                if (!item.repoPath.startsWith(operation.newPath)) {\n                    // We need to take care of recursive folders with the same name as well\n                    const newChildPath = item.repoPath.replace(asset.repoPath, operation.newPath);\n                    asset._core.hostAssetContext._adobeAssetUpdater.updateLocalItem(session, item, { 'repo:path': newChildPath });\n                }\n                break;\n            }\n            case 'discard': {\n                // If item is a descendant of the asset, set repo:state to DISCARDED_PARENT to prevent children of\n                // discarded parents from being added to the discarded list.\n                let repoState: AssetState | undefined = 'DISCARDED';\n                if (item.ancestorIDs?.includes(asset.id)) {\n                    repoState = 'DISCARDED_PARENT';\n                }\n                asset._core.hostAssetContext._adobeAssetUpdater.updateLocalItem(session, item, { 'repo:state': repoState });\n                break;\n            }\n            case 'restore': {\n                // Restore operations for assets may include a new path to restore to.\n                const newChildPath = operation.newPath ? item.repoPath.replace(asset.repoPath, operation.newPath) : item.repoPath;\n                asset._core.hostAssetContext._adobeAssetUpdater.updateLocalItem(session, item, { 'repo:state': 'ACTIVE', 'repo:path': newChildPath });\n                break;\n            }\n            }\n        }\n    });\n}\n\nexport const getBatchRenamedAssetName = <Item extends AdobeAsset | Space>(item: Item, map: AssetRenameMap<Item>): Item['name'] => {\n    return map.has(item.id) ? map.get(item.id)! : item.name;\n};\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\nimport type jsonpatch from 'json-patch';\n\nimport { IOrderDirection } from '../core/ItemOrder';\nimport InterfaceBase from './InterfaceBase';\nimport {\n    getLink,\n    getURLFromLinks,\n    HeaderMap,\n    IServiceLink,\n    JSON_MIME_TYPE,\n    JSON_PATCH_MIME_TYPE,\n    RelType\n} from './LinkUtils';\nimport type RepositoryInterface from './RepositoryInterface';\nimport {\n    AssetLinks,\n    DirectoryListingRepoMetadata,\n    EmbedSpecifier,\n    IACPolicyResponse,\n    IAppMetadata,\n    IDiscardOperation,\n    IEffectivePermissions,\n    IOperation,\n    IRestoreOperation,\n    ISAMOperationResult,\n    RepositoryMetadata\n} from './RepositoryModel';\nimport {\n    IAdobeAssetOrderBy,\n    IAssetVersionOrderBy,\n    parseEffectivePermissions,\n    Permission\n} from './AssetModel';\nimport SAMError, { SAMErrorCode } from '../core/SAMError';\nimport { IPerUserMetadata } from './USSModel';\nimport { RenditionType, THUMBNAIL_SIZE } from '../utils/RenditionFetcher';\nimport { IAssetVersionResponse } from '../assets/AssetVersionLoader';\nimport { formatFileName } from '../assets/AssetUtils';\nimport { isDeepEqual } from '../core/ObjectUtils';\n\nexport function getMaxTransferSizeFromLinks(links: AssetLinks): number {\n    return (getLink(links, RelType.BLOCK_INITIALIZE) as AssetLinks[RelType.BLOCK_INITIALIZE])['repo:maxsingletransfersize'];\n}\n\nconst MEGABYTE = 1024 * 1024;\nconst BLOCK_SIZE = 6000000;\nconst BULK_TRANSFER_MIME_TYPE = 'application/vnd.adobecloud.bulk-transfer+json';\n\nexport const DENY_SHARE_ACE = {\n    'repo:principal': 'all',\n    'repo:modifier': 'deny',\n    'repo:privileges': [\n        'write'\n    ],\n    'repo:relations': [ RelType.AC_POLICY ],\n    'repo:inheritance': 'deep'\n};\nexport const DENY_EDIT_ACE = {\n    'repo:principal': 'all',\n    'repo:modifier': 'deny',\n    'repo:privileges': [ 'write', 'delete' ],\n    'repo:relations': [\n        'describedby', // ACL service uses lower case?\n        RelType.ANNOTATIONS,\n        RelType.APP_METADATA,\n        RelType.EMBEDDED_METADATA,\n        RelType.REPO_METADATA,\n        RelType.PRIMARY,\n        RelType.RENDITION\n    ],\n    'repo:inheritance': 'deep'\n};\nexport function getRestrictEditUserGrantACEs(userId: string) {\n    return [ {\n        'repo:principal': {\n            'xdm:provider': { '@id': 'https://ims-na1.adobelogin.com/' },\n            '@id': userId,\n            '@type': 'https://ns.adobe.com/adobecloudplatform/ims/user'\n        },\n        'repo:modifier': 'grant',\n        'repo:privileges': [ 'read', 'write' ],\n        'repo:relations': [ 'http://ns.adobe.com/adobecloud/rel/ac/policy' ],\n        'repo:inheritance': 'deep'\n    },\n    {\n        'repo:principal': {\n            'xdm:provider': { '@id': 'https://ims-na1.adobelogin.com/' },\n            '@id': userId,\n            '@type': 'https://ns.adobe.com/adobecloudplatform/ims/user'\n        },\n        'repo:modifier': 'grant',\n        'repo:privileges': [ 'read', 'write', 'delete' ],\n        'repo:relations': [\n            'describedby',\n            'http://ns.adobe.com/adobecloud/rel/annotations',\n            'http://ns.adobe.com/adobecloud/rel/metadata/application',\n            'http://ns.adobe.com/adobecloud/rel/metadata/embedded',\n            'http://ns.adobe.com/adobecloud/rel/metadata/repository',\n            'http://ns.adobe.com/adobecloud/rel/primary',\n            'http://ns.adobe.com/adobecloud/rel/rendition'\n        ],\n        'repo:inheritance': 'deep'\n    } ];\n}\n\n\ninterface IBlockUploadInfo {\n    'repo:blocksize': number;\n    _links: {\n        [RelType.BLOCK_TRANSFER]: IServiceLink[];\n        [RelType.BLOCK_FINALIZE]: IServiceLink;\n    };\n}\n\ntype IBlockUploadRequestArgs = [string, Blob, number, number];\n\ntype IPageOptions = {\n    limit: number;\n    start?: string;\n    version?: string;\n}\n\nexport interface IVersionPatchOperation {\n    op: VersionPatchTypes,\n    jsonParams?: {\n        name?: string\n        description?: string\n    }\n}\n\nexport enum VersionPatchTypes {\n    add = 'add',\n    remove = 'remove',\n    replace = 'replace'\n}\n\ninterface IListingOptions<IOrderField> extends IPageOptions {\n    orderDirection: IOrderDirection;\n    orderBy: IOrderField;\n}\n\nexport interface AssetsListingOptions extends IListingOptions<IAdobeAssetOrderBy> {\n    type?: string[]; // If type is empty array, RAPI returns all type in response\n    embed?: EmbedSpecifier[];\n}\n\nexport interface ICustomRenditionURLTemplateOpts {\n    component_id?: string;\n    fragment?: string;\n}\n\nexport interface ICustomRenditionHeaders {\n    [key: string]: string;\n}\n\nexport interface VersionsListingOptions extends IListingOptions<IAssetVersionOrderBy> { }\n\nconst DefaultAssetsListingOptions: AssetsListingOptions = {\n    orderDirection: 'descending',\n    orderBy: 'storage:deviceModifyDate',\n    start: '',\n    limit: 0\n};\n\nconst DefaultVersionsListingOptions: VersionsListingOptions = {\n    orderDirection: 'descending',\n    orderBy: 'created',\n    start: '',\n    limit: 0,\n    version: ''\n};\n\nfunction createVersionTemplate(options?: Partial<VersionsListingOptions>) {\n    const userOptions: Partial<VersionsListingOptions> = { ...DefaultVersionsListingOptions, ...options };\n    const templateValues: any = createPageTemplate(userOptions);\n\n    templateValues.orderBy = getDirectionValue(userOptions);\n    templateValues.resource = RelType.VERSION;\n    return templateValues;\n}\n\nfunction createPageTemplate(options: Partial<AssetsListingOptions | VersionsListingOptions>) {\n    const templateValues: any = {};\n    const { start, limit, version } = options;\n    if (start) {\n        templateValues.start = start;\n    }\n    if (limit) {\n        templateValues.limit = limit;\n    }\n    if (version) {\n        templateValues.version = version;\n    }\n    return templateValues;\n}\n\nexport function getDirectionValue<IOrderField>(userOptions: Partial<IListingOptions<IOrderField>>) {\n    const directionFlag = userOptions.orderDirection === 'ascending' ? '+' : '-';\n    return directionFlag + userOptions.orderBy;\n}\n\nexport function getAssetsListingURL(links: any, options?: Partial<AssetsListingOptions>): string {\n    const userOptions: Partial<AssetsListingOptions> = { ...DefaultAssetsListingOptions, ...options };\n    const templateValues: any = createPageTemplate(userOptions);\n    templateValues.orderBy = getDirectionValue(userOptions);\n    templateValues.type = userOptions.type;\n    templateValues.embed = JSON.stringify(userOptions.embed);\n    return getURLFromLinks(links, RelType.PAGE, templateValues);\n}\n\nexport function getAssetVersionsListingURL(links: any, options?: Partial<VersionsListingOptions>): string {\n    const templateValues = createVersionTemplate(options);\n    return getURLFromLinks(links, RelType.PAGE, templateValues);\n}\n\nexport default class AssetInterface extends InterfaceBase {\n    protected _useHighPriorityRequestsIfEnabled = true;\n\n    constructor(\n        private _rapi: RepositoryInterface,\n        private _assetId: string,\n        private _links: AssetLinks,\n        private _etag: string\n    ) {\n        super(_rapi._core);\n    }\n\n    get assetID(): string {\n        return this._assetId;\n    }\n\n    get links(): AssetLinks {\n        return this._links;\n    }\n\n    get etag(): string {\n        return this._etag;\n    }\n\n    async getChildAssets(options?: Partial<AssetsListingOptions>): Promise<DirectoryListingRepoMetadata> {\n        const href = getAssetsListingURL(this._links, options);\n        const response = await this._doGet(href, {\n            // Ensure browser doesn't automatically add If-None-Match, otherwise\n            // service may respond with cached data FROM ANOTHER USER.\n            // https://jira.corp.adobe.com/browse/ACPCSS-5544\n            // Also causes SAM-1813, SAM-2066\n            headers: { ['Cache-Control']: 'no-cache, no-store, max-age=0' }\n        });\n\n        return response.json();\n    }\n\n    async getRepoMetadata(): Promise<RepositoryMetadata> {\n        const href = getURLFromLinks(this._links, RelType.REPO_METADATA);\n        const response = await this._doGet(href);\n        const repoMetadata = await response.json();\n\n        // Note: Do NOT use the ETag header in the repo metadata response, because that's the ETag for the repo metadata\n        // resource, not the asset itself. The ETag of the asset itself is inside the repo metadata response:\n        this._etag = repoMetadata['repo:etag'];\n\n        try {\n            // Update the persistent cache with the updated links\n            const resolveHref = this._rapi.getAssetResolveByIdHref(this._assetId);\n            await this._core._environment.cache.setItem(resolveHref, { links: this._links, etag: this._etag });\n        } catch (e) {\n            // it is not a failure if we're unable to update the persistent cache\n        }\n\n        return repoMetadata;\n    }\n\n    async getEmbeddedMetadata() {\n        const href = getURLFromLinks(this._links, RelType.EMBEDDED_METADATA);\n        // Embedded metadata is returned as application/rdf+xml by default - switch to JSON-LD\n        try {\n            const metadata = await this._getResponse(href, { headers: { Accept: JSON_MIME_TYPE } });\n            return metadata;\n        } catch (e) {\n            if (e.code === SAMErrorCode.NOT_FOUND) {\n                // If an asset doesn't have embedded metadata, just return empty metadata rather than\n                // treating it as a failure.\n                return {};\n            }\n            throw e;\n        }\n    }\n\n    async getAppMetadata(): Promise<IAppMetadata> {\n        const href = getURLFromLinks(this._links, RelType.APP_METADATA);\n        try {\n            const metadata = await this._getResponse<IAppMetadata>(href);\n            return metadata;\n        } catch (e) {\n            if (e.code === SAMErrorCode.NOT_FOUND) {\n                // If an asset doesn't have app metadata, just return empty metadata rather than\n                // treating it as a failure.\n                return {};\n            }\n            throw e;\n        }\n    }\n\n    async patchAppMetadata(body: jsonpatch.OpPatch[]): Promise<Response> {\n        const href = getURLFromLinks(this._links, RelType.APP_METADATA);\n        return await this._doPatch(\n            href,\n            {\n                'Content-Type': JSON_PATCH_MIME_TYPE\n            },\n            JSON.stringify(body),\n            [ 204 ]\n        );\n    }\n\n    async getEffectivePermissions(): Promise<Permission> {\n        const href = getURLFromLinks(this._links, RelType.AC_EFFECTIVE);\n        const response = await this._getResponse<IEffectivePermissions>(href);\n\n        // NOTE: Missing permissions is not an error case. This collection is sparse, so the key may just not be there.\n        return parseEffectivePermissions(response);\n    }\n\n    async getAssetPolicy(): Promise<Response> {\n        const href = getURLFromLinks(this._links, RelType.AC_POLICY);\n        return await this._doGet(href);\n    }\n\n    async getManifest() {\n        const href = getURLFromLinks(this._links, RelType.MANIFEST);\n        const headers: { [s: string]: string } = {};\n\n        const response = await this._doGet(href, headers);\n        const manifest = await response.json();\n\n        return { manifest, etag: response.headers.get('ETag') };\n    }\n\n    async getVersions(options?: Partial<VersionsListingOptions>): Promise<IAssetVersionResponse> {\n        const href = getAssetVersionsListingURL(this._links, options);\n        const response = await this._doGet(href);\n        return response.json();\n    }\n\n    async getLastAccessed(): Promise<Date | undefined> {\n        const href = getURLFromLinks(this._links, RelType.PERUSER_METADATA);\n        const response =  await this._doGet(href, { headers: { 'Content-Type': JSON_MIME_TYPE } });\n        const perUserMetadata: IPerUserMetadata = await response.json();\n        const lastAccessedISOString = perUserMetadata?.['shell:lastAccessDate'];\n        return lastAccessedISOString ? new Date(lastAccessedISOString) : undefined;\n    }\n\n    async restoreVersionManifest(versionManifestLink: string) {\n        // first fetch the version manifest\n        const response = await this._doGet(versionManifestLink, {});\n        const versionManifest = await response.json();\n\n        //doput to current asset manifest url\n        const assetManifest = getURLFromLinks(this.links, RelType.MANIFEST);\n        await this._doPut(assetManifest, {\n            'Content-Type': 'application/vnd.adobe.dcx-manifest+json',\n            'If-Match': '*'\n        }, JSON.stringify(versionManifest), [ 204 ]);\n    }\n\n\n    async patchVersion(body?: IVersionPatchOperation[]): Promise<Response> {\n        const href = getURLFromLinks(this.links, RelType.VERSION);\n        const response = await this._doPatch(href, {\n            'Content-Type': JSON_PATCH_MIME_TYPE\n        }, JSON.stringify(body), [ 204 ]);\n        return response;\n    }\n\n    async createFolder(relativePath: string): Promise<RepositoryMetadata | undefined> {\n        const href = getURLFromLinks(this._links, RelType.CREATE, { path: relativePath, intermediates: 'true', respondWith: 'http://ns.adobe.com/adobecloud/rel/metadata/repository' });\n        const response = await this._doPost(href, {\n            'Content-Type': 'application/vnd.adobecloud.directory+json'\n        }, undefined, [ 200, 201 ]);\n\n        // when 200 that means asset created, but error while fetching metadata\n        return response.status === 201 ? await response.json() : undefined;\n    }\n\n    async _uploadIndividualBlock(href: string, file: Blob, start: number, end: number): Promise<Response> {\n        const headers: HeaderMap = {};\n        return await this._doPut(href, headers, file.slice(start, end), [ 200 ], true /* noOtherHeaders */);\n    }\n\n    async _blockUpload(file: Blob, relativePath: string, mediaType: string): Promise<RepositoryMetadata | undefined> {\n        const initialBlockUploadHref = getURLFromLinks(this._links, RelType.BLOCK_INITIALIZE);\n        const initBody = JSON.stringify({\n            'repo:size': file.size,\n            'repo:blocksize': BLOCK_SIZE,\n            'repo:reltype': RelType.PRIMARY,          // The relation type of the target Resource\n            'dc:format': mediaType,\n        });\n        const initResponse = await this._doPost(initialBlockUploadHref, {\n            'Content-Type': BULK_TRANSFER_MIME_TYPE\n        }, initBody, [ 200 ]);\n        const blockUploadInfo: IBlockUploadInfo = await initResponse.json();\n        const blockSize = blockUploadInfo['repo:blocksize'];\n        const transferHrefs = blockUploadInfo._links[RelType.BLOCK_TRANSFER];\n        const finalizeHref = getURLFromLinks(blockUploadInfo._links, RelType.BLOCK_FINALIZE, { path: relativePath, respondWith: RelType.REPO_METADATA });\n\n        // Split the file into chunks, and upload each to one of the transfer links\n        // (platform guarantees we get enough links for the size we requested)\n        const uploadRequests: IBlockUploadRequestArgs[] = [];\n        for (let i = 0, start = 0; start < file.size; i++, start += blockSize) {\n            const href = transferHrefs[i].href;\n            const end = Math.min(file.size, start + blockSize);\n            uploadRequests.push([ href, file, start, end ]);\n        }\n\n        // Only send a max of 3 blocks simultaneously, so the browser's request queue doesn't get\n        // over-saturated, and intermittent outages (like wifi blips) will only cause up to 3 requests to\n        // need retries.\n        const MAX_SIMULTANEOUS_BLOCKS = 3;\n        while (uploadRequests.length) {\n            await Promise.all(uploadRequests.splice(0, MAX_SIMULTANEOUS_BLOCKS).map(args => this._uploadIndividualBlock(...args)));\n        }\n\n        // Note: When finalizing, pass in the response we got from the initialize request\n        const response = await this._doPost(finalizeHref, {\n            'Content-Type': BULK_TRANSFER_MIME_TYPE\n        }, JSON.stringify(blockUploadInfo), [ 200, 201 ]);\n\n        return response.json();\n    }\n\n    async importFile(file: Blob, relativePath: string, mediaType?: string): Promise<RepositoryMetadata | undefined> {\n        // check if the size of the file to be imported is greater than maxSingleTransferSize.\n        const maxSingleTransferSize = getMaxTransferSizeFromLinks(this._links) || 9 * MEGABYTE;\n\n        if (file.size >= maxSingleTransferSize) {\n            // The platform requires a block upload for components > 10MB.\n            // See https://git.corp.adobe.com/pages/CAF/api-spec/#block-upload\n            return this._blockUpload(file, relativePath, mediaType ?? file.type);\n        }\n\n        const href = getURLFromLinks(this._links, RelType.CREATE, { path: relativePath, respondWith: RelType.REPO_METADATA });\n        const response = await this._doPost(href, {\n            'Content-Type': mediaType ?? file.type\n        }, file, [ 200, 201 ]);\n\n        // when 200 that means asset created, but error while fetching metadata\n        return response.status === 201 ? await response.json() : undefined;\n    }\n\n    async getBlockDownloadURL(url: string): Promise<string> {\n        const response =  await this._doGet(url);\n        const json = await response.json();\n        if (!json?.href) {\n            throw SAMError.create(SAMErrorCode.INTERNAL_ERROR, 'Cannot get block download URL');\n        }\n        return json.href;\n    }\n\n    async getContent(): Promise<{ content: Blob, etag: string | null}> {\n        const href = getURLFromLinks(this._links, RelType.PRIMARY);\n        const response = await this._doGet(href, {});\n        return { content: await response.blob(), etag: this._getETagFromHeaders(response.headers) };\n    }\n\n    async commitFileChanges(file: Blob, localETag?: string): Promise<{ MetaData: RepositoryMetadata, eTag: string | null}> {\n        const href = getURLFromLinks(this._links, RelType.PRIMARY);\n        const headers: HeaderMap = {\n            'Content-type': file.type\n        };\n        localETag && (headers['If-Match'] = localETag);\n        const response = await this._doPut(href, headers, file, [ 200, 201, 204 ]);\n        return { MetaData: response.status === 201 ? await response.json() : undefined, eTag: this._getETagFromHeaders(response.headers) };\n    }\n\n    async restore(name: string, _counter: number = 0): Promise<RepositoryMetadata> {\n        const operation: IRestoreOperation = {\n            op: 'restore',\n            target: { 'repo:assetId': this.assetID },\n            name\n        };\n        try {\n            const repoMetadata = (await this.runOperation(operation)).asset!;\n            return repoMetadata;\n        } catch (error) {\n            if (error.code === SAMErrorCode.CONFLICT) {\n                const { newName, countUsed } = formatFileName(\n                    name,\n                    this._core._environment.getValue('ASSET_CONFLICT_NAME_FORMAT'),\n                    _counter\n                );\n                return this.restore(newName, countUsed);\n            }\n            throw error;\n        }\n    }\n\n    async discard(): Promise<RepositoryMetadata> {\n        const operation: IDiscardOperation = {\n            op: 'discard',\n            target: { 'repo:assetId': this.assetID }\n        };\n        const { asset } = await this.runOperation(operation);\n        return asset!;\n    }\n\n    // Last access date is a string so replace has the same effect as add.\n    async patchLastAccessed(date: Date): Promise<Response> {\n        const href = getURLFromLinks(this._links, RelType.PERUSER_METADATA);\n        const bodyData: jsonpatch.OpPatch[] = [];\n        // We should always perform an add and not a replace as a replace will cause a 400 bad request\n        // if the property is not present.\n        // As we don't have ONS notifications for the PUPA metadata yet we should always do an add\n        // as it will have the same effect as replace.\n        bodyData.push({\n            op: 'add',\n            value: date.toISOString(),\n            path: '/shell:lastAccessDate'\n        });\n\n        return await this._doPatch(\n            href,\n            {\n                'Content-Type': JSON_PATCH_MIME_TYPE\n            },\n            JSON.stringify(bodyData),\n            [ 204 ]);\n    }\n\n    async runOperation(op: IOperation): Promise<ISAMOperationResult> {\n        const response = await this._rapi.runOperation(op);\n        const { asset, error } = response[0];\n        if (!(asset || error)) {\n            throw SAMError.wrapErrorIfNeeded(SAMErrorCode.UNKNOWN, 'Missing Asset metadata in operation response', error);\n        } else if (error) {\n            throw error;\n        }\n        return response[0];\n    }\n\n    async getRendition(size: number, type: string): Promise<Blob> {\n        const renditionURL = getURLFromLinks(\n            this._links,\n            RelType.RENDITION, {\n                size: String(size),\n                type\n            }\n        );\n\n        const newURL = new URL(renditionURL);\n        newURL.searchParams.append('etag', this.etag);\n\n        const response = await this._doGet(newURL.toString());\n        return await response.blob();\n    }\n\n    /**\n     * Use case: When clients need to fine tune the rendition requests for cases other than the lazy-load and cache\n     * mechanism in SAM. Clients are responsible for\n     *   1. Determining when these requests should be made – SAM will not attempt to automatically download renditions\n     *      requested with this method when etag or whatnot changes\n     *   2. Ensuring efficient use of server resources – clients should only make requests as needed and avoid papering\n     *      over issues with repeated calls\n     *   3. Parsing the Response – the image in the Response.body and any additional metadata embedded by the server\n     *   4. Caching the response – clients will need to use URL.createObjectURL() to make the response usable to render\n     *      in DOM. This causes the browser to keep the rendition in memory until they call URL.releaseObjectURL(url).\n     *      Failing to do so could cause memory leaks. To fine-tune the browser caching behavior, clients will need to\n     *      set explicit caching headers in the `additionalHeaders` parameter rather than relying on adding\n     *      cache-busting fake parameters to the URL.\n     *\n     * SAM.js will\n     *   1. Get the correct URL template for the AdobeAsset or AssetVersion and fill it with metadata from the\n     *      Asset/Version, plus additional data from `urlTemplateOptions`\n     *   2. Add the API key and auth token headers, as well as additional headers specified in `additionalHeaders`\n     *   3. Handle some auto-retries for error responses\n     *   4. Reject with SAMError if there is a service error that can't be resolved with retry\n     *\n     * @param size\n     * @param type\n     * @param urlTemplateOptions\n     * @param additionalHeaders\n     */\n    async getCustomRendition({\n        size = THUMBNAIL_SIZE,\n        type = RenditionType.PNG,\n        urlTemplateOptions = {},\n        additionalHeaders\n    }: {\n        size?: number;\n        type?: string;\n        urlTemplateOptions?: ICustomRenditionURLTemplateOpts;\n        additionalHeaders?: ICustomRenditionHeaders;\n    }): Promise<Response> {\n        const url = getURLFromLinks(\n            this._links,\n            RelType.RENDITION, {\n                size: String(size),\n                type,\n                ...urlTemplateOptions\n            }\n        );\n        return await this._doGet(url, { headers: additionalHeaders });\n    }\n\n    /**\n     * Clients may have a requirement to get the JSON object describing all the available sizes, rather than returning\n     * a JSON object describing only the specified size. Especially useful in case of fetching rendition resource of\n     * type \"application/vnd.adobe.ccv.videometadata\" for video assets\n     * @param type\n     * @param urlTemplateOptions\n     * @param additionalHeaders\n     */\n    async getAllCustomRenditions({\n        type,\n        urlTemplateOptions = {},\n        additionalHeaders\n    }: {\n        type?: string;\n        urlTemplateOptions?: ICustomRenditionURLTemplateOpts;\n        additionalHeaders?: ICustomRenditionHeaders;\n    }): Promise<Response> {\n        const url = type ? getURLFromLinks(\n            this._links,\n            RelType.RENDITION, {\n                type,\n                ...urlTemplateOptions\n            }\n        ) : getURLFromLinks(this._links, RelType.RENDITION, { ...urlTemplateOptions });\n        return await this._doGet(url, { headers: additionalHeaders });\n    }\n\n    async setEditingInheritanceRestricted(restrictEdit: boolean, addCurrentUserAsEditor?: boolean): Promise<void> {\n        // API documentation: https://developers.corp.adobe.com/acp/acl-front-service/documentation/src/main/docs/swagger.json#operation/jsonPatchPolicy\n        const userId = this._core._environment.getValue('USER_ID');\n        if (restrictEdit) {\n            // NOTE: attempting to add these ACEs when they are already set has no effect\n            const addPatches: jsonpatch.AddPatch[] = [ {\n                op: 'add',\n                // Index for 'add' probably doesn't matter\n                path: '/repo:acl/0',\n                value: DENY_EDIT_ACE\n            }, {\n                op: 'add',\n                path: '/repo:acl/1',\n                value: DENY_SHARE_ACE\n            } ];\n            if (addCurrentUserAsEditor) {\n                const userACEs = getRestrictEditUserGrantACEs(userId);\n                addPatches.push({ op: 'add', path: '/repo:acl/2', value: userACEs[0] });\n                addPatches.push({ op: 'add', path: '/repo:acl/3', value: userACEs[1] });\n            }\n            await this._patchACL(addPatches);\n        } else {\n            // Find the index of the deny ACEs. This is critical to ensure only the desired ACEs get removed.\n            const { policyResponse, denyEditAceIndex, denyShareAceIndex } = await this._getEditingInheritanceRestrictedInfo();\n            // If either or both ACE is missing, the toggle is not on\n            if (denyEditAceIndex < 0 || denyShareAceIndex < 0) {\n                return;\n            }\n            const removePatches: jsonpatch.RemovePatch[] = [ {\n                op: 'remove',\n                path: `/repo:acl/${denyShareAceIndex}`\n            }, {\n                op: 'remove',\n                path: `/repo:acl/${denyEditAceIndex}`\n            } ];\n            // The patches must be sorted by index descending or else the wrong items will be removed, because they\n            // are applied in order. If we have acl = [A, B, C] and try to remove index 0 before 1, it will first remove\n            // A, making B be index 0; removing index 1 after that will erroneously remove C. Instead, removing 1 first\n            // will result in [A, C] and then removing index 0 will leave the desired [C] remaining.\n            removePatches.sort((ace1, ace2) => ace1.path < ace2.path ? 0 : -1);\n            await this._patchACL(removePatches, policyResponse.headers.get('etag') || undefined);\n        }\n    }\n\n    private async _patchACL(patches: jsonpatch.OpPatch[], etag?: string): Promise<void> {\n        const url = getURLFromLinks(this._links, RelType.AC_POLICY);\n        await this._doPatch(url,\n            {\n                'Content-Type': 'application/json-patch+json',\n                'If-Match': etag\n            },\n            JSON.stringify(patches),\n            [ 200 ]\n        );\n    }\n\n    async getEditingInheritanceRestricted(): Promise<boolean> {\n        const { denyEditAceIndex, denyShareAceIndex } = await this._getEditingInheritanceRestrictedInfo();\n        // both must be present for the toggle to be on\n        return denyEditAceIndex >= 0 && denyShareAceIndex >= 0;\n    }\n\n    private async _getEditingInheritanceRestrictedInfo() {\n        const policyResponse = await this.getAssetPolicy();\n        const acl = (await policyResponse.json() as IACPolicyResponse)['repo:acl'];\n        const denyEditAce = acl.find(ace => isDeepEqual(ace, DENY_EDIT_ACE, true));\n        const denyShareAce = acl.find(ace => isDeepEqual(ace, DENY_SHARE_ACE, true));\n        return {\n            policyResponse,\n            denyEditAceIndex: acl.indexOf(denyEditAce as any),\n            denyShareAceIndex: acl.indexOf(denyShareAce as any)\n        };\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { synchronized, key } from './decorators';\nimport SAMError, { SAMErrorCode } from './SAMError';\nimport { ISAMCorePrivate, ISAMObject } from '../indexPrivate';\n\ntype TransactionType = 'readonly' | 'readwrite';\ntype RequestsFn = (objectStore: IDBObjectStore) => Promise<any> | any;\n\nexport type CachedValue = {\n    value?: any,\n    expiry?: Date\n};\n\nexport const NotFound = Symbol('NotFound');\n\nexport interface IPersistentCache {\n    getItem(itemKey: string): Promise<CachedValue | undefined>;\n    setItem(itemKey: string, value: any, expiry?: Date): Promise<void>;\n    deleteItem(itemKey: string): Promise<void>;\n}\n\n// Persistent cache based on indexedDB\nclass IndexedDBCache implements IPersistentCache {\n\n    constructor(protected _name: string, protected _core: ISAMCorePrivate) {}\n\n    private _database?: IDBDatabase;\n\n    static isSupported(): boolean {\n        if (typeof window === 'undefined' || !window.indexedDB) {\n            return false;\n        }\n\n        try {\n            const request = window.indexedDB.open('sam_indexeddb_test', 1);\n            request.onsuccess = () => request.result.close();\n            return true;\n        } catch (error) {\n            return false;\n        }\n    }\n\n    private async _transaction(transactionType: TransactionType, requestsFn: RequestsFn): Promise<any> {\n        const database = await this._connect();\n        if (!database) {\n            return;\n        }\n\n        return new Promise((resolve) => {\n            try {\n                const transaction = database.transaction(this._name, transactionType);\n                const objectStore = transaction.objectStore(this._name);\n                const promResult = requestsFn(objectStore);\n                transaction.onerror = (err) => {\n                    this._core._environment.error(`transaction error: ${err}`);\n                    resolve(undefined);\n                };\n                transaction.oncomplete = () => {\n                    resolve(promResult);\n                };\n            } catch (ex) {\n                // this can happens due to version upgrade when we close db.\n                this._core._environment.error(`transaction exception: ${ex}`);\n                resolve(undefined);\n            }\n        });\n    }\n\n    async getItem(itemKey: string): Promise<CachedValue | undefined> {\n        return this._transaction('readonly', async (objectStore: IDBObjectStore) => {\n            return new Promise((resolve) => {\n                const request = objectStore.get(itemKey);\n                request.onsuccess = () => {\n                    resolve(request.result ? {\n                        value: request.result.value,\n                        expiry: request.result.expiry as Date\n                    } : undefined);\n                };\n            });\n        });\n    }\n\n    async setItem(itemKey: string, value: any, expiry?: Date): Promise<void> {\n        return this._transaction('readwrite', (objectStore: IDBObjectStore) => {\n            objectStore.put({ id: itemKey, expiry, value });\n            return;\n        });\n    }\n\n    async deleteItem(itemKey: string): Promise<void> {\n        return this._transaction('readwrite', (objectStore: IDBObjectStore) => {\n            objectStore.delete(itemKey);\n            return;\n        });\n    }\n\n    private async _connect(): Promise<IDBDatabase | undefined> {\n        if (this._database) {\n            return this._database;\n        }\n        const version = this._core._environment.getValue('INDEXED_DB_VERSION');\n        const request = window.indexedDB.open(this._name, version);\n\n        return new Promise((resolve) => {\n            request.onerror = (err) => {\n                this._core._environment.error(`CONNECTION_FAILED Unable to connect to IndexedDB: ${this._name}, error: ${err}`);\n                resolve(undefined);\n            };\n\n            request.onupgradeneeded = () => {\n                const database = request.result;\n                if (database.objectStoreNames.contains(this._name)) {\n                    database.deleteObjectStore(this._name);\n                }\n                database.createObjectStore(this._name, { keyPath: 'id' });\n            };\n\n            request.onsuccess = () => {\n                const database = this._database = request.result;\n                database.onversionchange = (evt) => {\n                    this._core._environment.error(`IndexedDb version changed detected ${this._name}.${version}, ${evt}`);\n                    // close current db connection allowing the other client to upgrade a version\n                    database.close();\n                    database.onversionchange = null;\n                    this._database = undefined;\n                };\n                resolve(database);\n            };\n        });\n    }\n\n    // @ts-ignore -- for use in console debugging\n    private async _clear(): Promise<void> {\n        return this._transaction('readwrite', async (objectStore: IDBObjectStore) => {\n            return new Promise((resolve) => {\n                const request = objectStore.clear();\n                request.onsuccess = () => {\n                    // eslint-disable-next-line no-console\n                    console.log('localDB cleared for', objectStore.name);\n                    resolve(undefined);\n                };\n            });\n        });\n    }\n}\n\n// Persistent cache based on localStorage\nclass LocalStorageCache implements IPersistentCache {\n\n    constructor(protected _name: string, protected _core: ISAMCorePrivate) {}\n\n    static isSupported(): boolean {\n        try {\n            return typeof window !== 'undefined' && !!window.localStorage;\n        } catch (e) {\n            // Firefox throws an exception when accessing localStorage in private mode\n            return false;\n        }\n    }\n\n    private _getKey(itemKey: string): string {\n        return `${this._name}#${itemKey}`;\n    }\n\n    async getItem(itemKey: string): Promise<CachedValue | undefined> {\n        const storedValue = window.localStorage.getItem(this._getKey(itemKey));\n        if (storedValue) {\n            try {\n                const { value, expiry } = JSON.parse(storedValue);\n                return {\n                    value,\n                    expiry: expiry ? new Date(expiry as string) : undefined\n                };\n            } catch (e) {\n                // ignore\n            }\n        }\n        return undefined;\n    }\n\n    async setItem(itemKey: string, value: any, expiry?: Date): Promise<void> {\n        const storedValue = JSON.stringify({ expiry, value });\n        window.localStorage.setItem(this._getKey(itemKey), storedValue);\n    }\n\n    async deleteItem(itemKey: string): Promise<void> {\n        window.localStorage.removeItem(this._getKey(itemKey));\n    }\n}\n\n/**\n * Persistent cache of values using indexedDB - if the browser doesn't support indexedDB it falls back to localStorage,\n * and if neither is supported it'll just use a local in-memory cache that doesn't persist between sessions.\n */\nexport default class Cache implements ISAMObject {\n\n    private _name: string;\n\n    // Persistent cache layer - either indexedDB, localStorage, or neither if none are supported (e.g. in private browsing)\n    private _persistentCache?: IPersistentCache;\n\n    // Local cache layer - this is an optimization if there's no persistent cache layer\n    private _localCache: Map<string, CachedValue> = new Map;\n\n    constructor(private _userId: string, readonly _core: ISAMCorePrivate, _persistentCache?: IPersistentCache) {\n        this._name = 'SAM.js-' + this._userId;\n\n        if (_persistentCache) {\n            // Clients can override SAM.js to use their own caching layer if required\n            this._persistentCache = _persistentCache;\n        } else if (IndexedDBCache.isSupported()) {\n            this._persistentCache = new IndexedDBCache(this._name, _core);\n        } else if (LocalStorageCache.isSupported()) {\n            this._persistentCache = new LocalStorageCache(this._name, _core);\n        }\n    }\n\n    get name(): string {\n        return this._name;\n    }\n\n    @synchronized\n    async getItem(@key itemKey: string, computeValue?: () => Promise<any>, validateValue?: (value: any) => boolean, expiryMs?: number): Promise<any> {\n        let cachedItem: CachedValue | undefined = this._localCache.get(itemKey);\n        if (!cachedItem && this._persistentCache) {\n            cachedItem = await this._persistentCache.getItem(itemKey);\n        }\n\n        // Check if the cached item expired or invalid - if so, ignore it\n        const isInvalid = validateValue && cachedItem && !validateValue(cachedItem.value);\n        const isExpired = cachedItem?.expiry && cachedItem.expiry <= new Date(Date.now());\n        if (isInvalid || isExpired) {\n            await this.deleteItem(itemKey);\n            cachedItem = undefined;\n        }\n\n        // If we're passed in a computeValue function, use it to update the cache if there's no\n        // cached value (or it expired)\n        if (!cachedItem && computeValue) {\n            const value = await computeValue();\n            if (validateValue && !validateValue(value)) {\n                throw SAMError.create(SAMErrorCode.UNKNOWN, `Value for cache key ${itemKey} is invalid: ${JSON.stringify(value)}`);\n            }\n            await this.setItem(itemKey, value, expiryMs);\n            return value;\n        }\n\n        return cachedItem ? cachedItem.value : NotFound;\n    }\n\n    async setItem(itemKey: string, value: any, expirationDurMsec: number = this._core._environment.getValue('CACHE_DEFAULT_TTL')): Promise<void> {\n        const expiry = expirationDurMsec ? new Date(Date.now() + expirationDurMsec) : undefined;\n        this._localCache.set(itemKey, { value, expiry });\n        if (this._persistentCache) {\n            await this._persistentCache.setItem(itemKey, value, expiry);\n        }\n    }\n\n    async deleteItem(itemKey: string): Promise<void> {\n        this._localCache.delete(itemKey);\n        if (this._persistentCache) {\n            await this._persistentCache.deleteItem(itemKey);\n        }\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport InterfaceBase from './InterfaceBase';\nimport {\n    cache,\n    key, synchronized,\n} from '../core/decorators';\nimport {\n    getURLFromLinks,\n    HeaderMap,\n    RelType\n} from './LinkUtils';\nimport AssetInterface from './AssetInterface';\nimport ItemPool from '../core/ItemPool';\nimport ItemBase from '../core/ItemBase';\nimport SAMError, {\n    ProblemType,\n    SAMErrorCode\n} from '../core/SAMError';\nimport { IUpdateSession } from '../core/UpdateSession';\nimport {\n    AssetLinks,\n    IBatchOperationResult,\n    ICopyOperation,\n    IFailedOperation,\n    IMoveOperation,\n    IOperationError,\n    IOperationQuery,\n    IOperationResult,\n    IOperationResults,\n    IOperationSingleError,\n    IRepositoryIndex,\n    ISAMOperationResult,\n    ISAMOperationResults,\n    RepositoryMetadata,\n    Owner\n} from './RepositoryModel';\nimport { IQuotaInfo } from '../assets/AssetContext';\nimport Cache, { NotFound } from '../core/Cache';\nimport { IRepositoriesDataResponse } from './RepositoryModel';\n\ninterface IQuotaServiceData {\n    'xdm:amount': number;\n    'xdm:consumed': number;\n    'xdm:enforcement': string;\n    'xdm:unit': string;\n    '_links': Object;\n}\n\nconst MAX_INDEX_RETRIES = 5;\n\nexport default class RepositoryInterface extends InterfaceBase {\n    // Index document is a well-known endpoint, so does not need to come from discovery.\n    // https://developers.corp.adobe.com/index-repository-api/docs/index-document.md\n    public repositoryIndex = `https://${this._core._environment.endpoints.ACP_CS_HOST}/index`;\n    public repositoryNameIndex = `https://${this._core._environment.endpoints.ACP_CS_HOST}/repositories`;\n\n    protected _useHighPriorityRequestsIfEnabled = true;\n    private _cache: Cache = this._core._environment.cache;\n\n    private get _fetchIndexState() { return this._core._fetchIndexState; }\n    private set _fetchIndexState(state) { this._core._fetchIndexState = state; }\n\n    @cache\n    _getAndCacheDocument(@key href: string) {\n        return this._getAllPages(href);\n    }\n\n    async getRootLink(relType: RelType, params: {[s: string]: string} = {}): Promise<string> {\n        // The only thing uses in SAM.js from the `/` resource is the `_links` metadata, which is identical to the\n        // `_links` in the `/index` resource, so use the `/index` resource for the root links\n        const rootDocument = await this.getIndex();\n        return getURLFromLinks(rootDocument._links, relType, params);\n    }\n\n    async getIndex(): Promise<IRepositoryIndex> {\n        const fetchIndexState = this._fetchIndexState;\n\n        // If something triggered clearing the cache, wait for it to finish\n        if (fetchIndexState.pendingCacheClear) {\n            await fetchIndexState.pendingCacheClear;\n        }\n        if (fetchIndexState.response && fetchIndexState.hasChildren) {\n            // Data is complete, so return it now\n            return fetchIndexState.response;\n        }\n\n        const existing = await this._cache.getItem(this.repositoryIndex);\n        if (existing !== NotFound) {\n            fetchIndexState.response = existing;\n            fetchIndexState.hasChildren = Boolean(fetchIndexState.response?.children?.length);\n        }\n\n        // Refresh index in background if it hasn't been refreshed successfully this session. This allows typical\n        // calls to return quickly from cache while still updating the cache regularly [SAM-3165].\n        if (!fetchIndexState.promise) {\n            fetchIndexState.promise = new Promise((resolve, reject) => {\n                this._getResponse<IRepositoryIndex>(\n                    this.repositoryIndex,\n                    {\n                        // R-API returns an E-Tag which doesn't change when the content changes, causing the browser to\n                        // use stale cached data. Using Cache-Control header to disable browser cache so this doesn't happen.\n                        // [SAM-2952]\n                        headers: { 'Cache-Control': 'no-cache, no-store, max-age=0' },\n                        // R-API might be temporarily returning 404 on the /index document for some users\n                        additionalRetryErrorCodes: [ 404 ],\n                    }\n                ).then(async indexJson => {\n                    // Only cache /index if it has children [SAM-2952]\n                    if (indexJson.children?.length) {\n                        await this._cache.setItem(this.repositoryIndex, indexJson);\n                        fetchIndexState.hasChildren = true;\n                    } else {\n                        // Allow getHomeDirectoryMetadata() to retry fetching /index if there were no children\n                        fetchIndexState.hasChildren = false;\n                        fetchIndexState.promise = undefined;\n                    }\n                    // Response can be used for _links even if there are no children\n                    fetchIndexState.response = indexJson;\n                    resolve(indexJson);\n                })\n                    .catch(reject);\n            });\n        }\n\n        // If the /index is not in cache, or missing data, wait for fetch, otherwise use the\n        // cache value while the index is refreshed in the background.\n        if (fetchIndexState.promise && (!fetchIndexState.response || !fetchIndexState.hasChildren)) {\n            await fetchIndexState.promise;\n        }\n\n        // The _links property of the response will still be usable even if children are not present.\n        return fetchIndexState.response!;\n    }\n\n    /**\n     * @package -- for use in SAM.js only\n     */\n    _clearIndexCache(): void {\n        this._fetchIndexState.pendingCacheClear = new Promise(resolve => {\n            // Allow pending request to complete before clearing the cache so the final state is\n            // a clear cache.\n            Promise.resolve(this._fetchIndexState.promise)\n                .finally(() => {\n                    return this._cache.deleteItem(this.repositoryIndex);\n                })\n                .finally(() => {\n                    this._fetchIndexState = {};\n                    resolve();\n                });\n        });\n    }\n\n    @cache\n    private async _getAndCacheLinksFromHref(@key href: string): Promise<{ links: AssetLinks }> {\n        const response = await this._doGet(href);\n        // The etag header from Links API no longer represents the Asset or its repo metadata, so it\n        // isn't being stored in the SAM.js persistent cache.\n        const { _links } = await response.json();\n        return { links: _links };\n    }\n\n    getAssetResolveByIdHref(assetId: string): string {\n        // Links API is a \"well-known endpoint\" and so does not need to use discovery\n        // https://developers.corp.adobe.com/storage-api/docs/reference/links.md\n        const url = new URL(`https://${this._core._environment.endpoints.ACP_CS_HOST}/links`);\n        url.searchParams.set('assetId', assetId);\n        return url.toString();\n    }\n\n    async getCloudQuotaUsedAndMax(): Promise<IQuotaInfo> {\n        const metadata = await this.getHomeDirectoryMetadata();\n        const url = getURLFromLinks(metadata._links, RelType.QUOTA);\n\n        const responseJson: IQuotaServiceData = await this._getResponse(url);\n        return { used: responseJson['xdm:consumed'], total: responseJson['xdm:amount'] };\n    }\n\n    /**\n     * Takes an asset id and returns the links for the resource.\n     *\n     * @param id {string} assetId of the object\n     * @TODO_Deprecation to be removed after it is no longer used in SAMCpp.ts patchAdobeAsset\n     */\n    async resolveById(assetId: string): Promise<AssetInterface> {\n        const resolveHref = this.getAssetResolveByIdHref(assetId);\n        const { links } = await this._getAndCacheLinksFromHref(resolveHref);\n        return new AssetInterface(this, assetId, links, '');\n    }\n\n    async getRepoMetadataById(assetId: string): Promise<RepositoryMetadata> {\n        // GET on the resolve link will return the repo metadata\n        const resolveHref = await this.getRootLink(RelType.RESOLVE_ID, { id: assetId });\n        return await this._getResponse(resolveHref);\n    }\n\n    async getRepoMetadataByPath(repositoryId: string, path: string): Promise<RepositoryMetadata> {\n        const resolveHref = await this.getRootLink(RelType.RESOLVE_PATH, { repositoryId, path, mode: 'id' });\n        const repoMetadata: RepositoryMetadata = await this._getResponse(resolveHref);\n\n        const assetId = repoMetadata['repo:assetId'];\n        const links = repoMetadata._links;\n        // We want to cache the links, but we do so under the resolveById href - that's because the path can\n        // change over time, but asset ids are immutable.\n        const resolveByIdHref = this.getAssetResolveByIdHref(assetId);\n        await this._cache.setItem(resolveByIdHref, { links });\n        return repoMetadata;\n    }\n\n    async getHomeDirectoryMetadata(): Promise<RepositoryMetadata> {\n        return await this._getHomeDirectoryMetadata(0);\n    }\n\n    private async _getHomeDirectoryMetadata(retryCount: number): Promise<RepositoryMetadata> {\n        // Fire off background refresh of index data\n        const cachedIndex = await this.getIndex();\n        // Wait for background refresh, which may or may not be the same as the cached value\n        const index = await (this._fetchIndexState.promise ?? cachedIndex);\n\n        // Likely cause: Enterprise user has not been granted quota by their administrator, but this error\n        // could change. Host apps should verify that the user has quota before trying to get their home\n        // directory info, and if they have none, show a message suggesting they contact their administrator.\n        if (!index.children.length) {\n            if (retryCount >= MAX_INDEX_RETRIES) {\n                throw SAMError.create(SAMErrorCode.INVALID_OPERATION, `Home repository not found after ${MAX_INDEX_RETRIES} retries`);\n            } else {\n                // NOTE: assumes that getIndex() does not cache if there are no children, so no need to clear cache here\n                this._core._environment.log(`/index has no children, ${MAX_INDEX_RETRIES - retryCount} retries left`);\n                await new Promise(resolve => setTimeout(resolve, this._getRetryErrorDelay(undefined, retryCount)));\n                return await this._getHomeDirectoryMetadata(retryCount + 1);\n            }\n        }\n        return index.children[0]._embedded[RelType.REPO_METADATA];\n    }\n\n    /**\n     * Run a cloud operation.\n     * https://git.corp.adobe.com/pages/caf/api-spec/schemas/repository/operation.html\n     *\n     * @param ops {IOperationQuery}\n     */\n    async runOperation(ops: IOperationQuery): Promise<ISAMOperationResults> {\n        const opHref = await this.getRootLink(RelType.OPS);\n\n        const headers: HeaderMap = {\n            'Content-type': 'application/vnd.adobe.asset-operation+json'\n        };\n        const firstOp = Array.isArray(ops) ? ops[0] : ops;\n        // If the operation is copy and SAM is configured to copy all resources\n        // by default then we add the directive header in RAPI call as RAPI needs\n        // this header to copy secondary resources by default.\n        const copyResources = (firstOp as ICopyOperation)?.op === 'copy';\n        copyResources && (headers['directive'] = 'ops-2021');\n\n        // If the operation is move and the client has set the 'enable-x-bucket-move' feature flag to 'true',\n        // add the enable-x-bucket-move header to the request to ensure that cross bucket moves are enabled\n        // for the operation (SHARED-844). Cross-bucket moves will occur when the storage-assignee of the\n        // source and destination are different.\n        const moveResources = (firstOp as IMoveOperation)?.op === 'move';\n        const featureFlags = this._core._environment.getValue('FEATURE_FLAGS');\n        if (moveResources && featureFlags?.['enable-x-bucket-move']) {\n            headers['enable-x-bucket-move'] = 'true';\n        }\n\n        // If we send a single operation, then errors will fail the entire request.\n        // If we send multiple operations, we always get a 200 and then separate error\n        // codes inside the response. We want to normalize this behavior here, in order\n        // to make it easier to handle the response.\n        // Note that some errors are still going to return a proper array even\n        // for single items, so we need to be prepared for both types of replies.\n\n        // We are using 'any' below to disable the status code validation and allow\n        // this method to handle the error codes.\n        const response = await this._doPost(opHref, headers, JSON.stringify(ops), 'any');\n\n        let result: IOperationResults | IOperationError | undefined;\n        try {\n            result = await response.json();\n        } catch {\n            // Ignore the error here.\n        }\n\n        if (result && !Array.isArray(result) && response.status !== 200) {\n            // If this was a single operation request, then sometimes the service will fail the entire request\n            // instead of returning the array for the item. Try to normalize the reply to avoid bugs in the callers.\n            // https://jira.corp.adobe.com/browse/ACPCSS-3613\n            return [\n                {\n                    ...firstOp,\n                    error: SAMError.createWithRepositoryCode(\n                        // We cannot use the result.code as that uses non-standard HTTP error codes like 4041 instead of 404.\n                        response.status,\n                        (result as IOperationError).type ?? ProblemType.OPERATION_FAILED,\n                        (result as IOperationError).title ?? (result as IOperationSingleError).message ?? 'Operation failed'\n                    )\n                }\n            ];\n        }\n\n        // If we don't actually get a response or if we get an array,\n        // then we should expect to get a 200 response code.\n        this._checkResponseStatus(response, opHref, [ 200 ]);\n\n        if (!result) {\n            // We've got a 200 status, but there's no actual result or the JSON parsing failed.\n            throw SAMError.create(SAMErrorCode.UNKNOWN, 'Failed to parse response for repo bulk API.');\n        }\n\n        // Convert the result to ensure it is always an array.\n        // If we have a single item, we know it cannot be an error as that was handled above already.\n        const list = Array.isArray(result) ? result : [ result as IOperationResult ];\n\n        // Map errors to SAMErrors before returning.\n        return list.map((item): ISAMOperationResult => {\n            const { error } = item;\n            return {\n                ...item,\n                error: error ? SAMError.createWithRepositoryCode(error.status, error.type, error.title) : undefined\n            };\n        });\n    }\n\n    /**\n     * Runs the runOperation API for any specific context\n     * Initiate session of that context\n     * Check every model operation's result and update model meta data\n     * commit session\n     * returns ILocalOperationResult array collected over all results collectively\n     *\n     * @param ops Opeartions to run\n     * @param modelsById A map of model to it's id\n     * @param itemPool ItemPool of the specific context used to create session\n     * @param updateLocalModel for updating Model metaData\n     * @param errorHandlers If needed to validate or check any specific error code, and respond differently\n     */\n    async runOperationsForContext<LocalType extends ItemBase>(\n        ops: IOperationQuery,\n        modelsById: Map<string, LocalType>,\n        itemPool: ItemPool<LocalType>,\n        updateLocalModel: (session: IUpdateSession<LocalType>, model: LocalType, remoteItem?: RepositoryMetadata) => LocalType | undefined,\n        errorHandlers?: { match: (error: SAMError) => boolean, action: (model: LocalType, error: SAMError) => Promise<void | IFailedOperation<LocalType>> }[]\n    ): Promise<IBatchOperationResult<LocalType>> {\n        const result = await this.runOperation(ops);\n\n        const resultOps: IBatchOperationResult<LocalType> = { failedResults: [], newModels: [] };\n\n        const session = itemPool.createMutationSession();\n        const promises: Promise<void>[] = [];\n\n        for (const op of result) {\n            const currentModel = op.id && modelsById.get(op.id);\n            if (!currentModel) {\n                continue;\n            }\n\n            const { asset: updatedModelMetaData, error } = op;\n\n            if (error) {\n                if (errorHandlers) {\n                    const onError = (errorHandlers.find(errorHandler => errorHandler.match(error)))?.action;\n                    if (onError) {\n                        promises.push(onError(currentModel, error).then(failedOp => {\n                            if (failedOp) {\n                                resultOps.failedResults.push(failedOp);\n                            }\n                        }));\n                        continue;\n                    }\n                }\n\n                resultOps.failedResults.push({ model: currentModel, error });\n                continue;\n            }\n\n            try {\n                const newModel = updateLocalModel(session, currentModel, updatedModelMetaData);\n                if (newModel) {\n                    resultOps.newModels.push(newModel);\n                }\n            } catch (error: any) {\n                const samError = error as SAMError;\n                if (samError && samError.code === SAMErrorCode.UNKNOWN) {\n                    resultOps.failedResults.push({ model: currentModel, error: samError });\n                } else {\n                    throw error;\n                }\n            }\n        }\n\n        session.commit();\n\n        // Wait for any Promises from errorHandlers callback\n        await Promise.all(promises);\n\n        return resultOps;\n    }\n\n    /* Fetches data from the repositories endpoint.\n     * These are all the repositories that contain at least one discoverable asset for this user.\n     */\n    @synchronized\n    async getRepositoriesData(): Promise<IRepositoriesDataResponse> {\n        const fetchRepositories = () => this._getResponse(this.repositoryNameIndex);\n        const dayInMs = 24 * 60 * 60 * 1000; //30 day expiration on cache entry\n        return await this._cache.getItem(this.repositoryNameIndex, fetchRepositories, undefined, 30 * dayInMs);\n    }\n\n    async getRepositoryName(id: string): Promise<string | undefined> {\n        const response =  await this.getRepositoriesData();\n        if (!response) {\n            return undefined;\n        }\n\n        const children = response.children;\n        const data =  children.find(data => data._embedded[RelType.PRIMARY]['repo:repositoryId'] === id);\n        return data?._embedded[RelType.PRIMARY]['dc:title']?.['rdf:_1']?.['@value'];\n    }\n\n    /**\n     * Fetches and returns the owner details for a given list of repositoryIDs.\n     * @returns A map where each key is a repositoryID and the value is an Owner object.\n     */\n    async getAssetsOwnerDetails(): Promise<Map<string, Owner>> {\n        const response =  await this.getRepositoriesData();\n        return new Map(response.children.map(repoData => {\n            const primary = repoData._embedded[RelType.PRIMARY] || {};\n            return [ primary['repo:repositoryId'], primary['repo:owner'] ];\n        }));\n    }\n\n    /* Call the Links API to get the asset links resulting in a service call instead of using local cache.\n     * This is intended as an eventual replacement for resolveById which uses the local cache.\n     * Fixes [SAM-3444]. NOTE: the /links API does not include the restore and discard links, but since\n     * SAM.js uses the /ops API for these operations, it shouldn't be needed. Meanwhile, SAM.js\n     * needs the download and block transfer links, which do not appear in the /:repometadata\n     * body (they're only in the header), but do appear in the /links body.\n     */\n    async getAssetLinks(assetId: string): Promise<AssetLinks> {\n        const resolveHref = this.getAssetResolveByIdHref(assetId);\n        const { _links } = await this._getResponse(resolveHref) as { _links: AssetLinks };\n        return _links;\n    }\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2015 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\n/**\n * @typedef {object} PrivateData\n * @property {EventTarget} eventTarget The event target.\n * @property {{type:string}} event The original event object.\n * @property {number} eventPhase The current event phase.\n * @property {EventTarget|null} currentTarget The current event target.\n * @property {boolean} canceled The flag to prevent default.\n * @property {boolean} stopped The flag to stop propagation.\n * @property {boolean} immediateStopped The flag to stop propagation immediately.\n * @property {Function|null} passiveListener The listener if the current listener is passive. Otherwise this is null.\n * @property {number} timeStamp The unix time.\n * @private\n */\n\n/**\n * Private data for event wrappers.\n * @type {WeakMap<Event, PrivateData>}\n * @private\n */\nconst privateData = new WeakMap();\n\n/**\n * Cache for wrapper classes.\n * @type {WeakMap<Object, Function>}\n * @private\n */\nconst wrappers = new WeakMap();\n\n/**\n * Get private data.\n * @param {Event} event The event object to get private data.\n * @returns {PrivateData} The private data of the event.\n * @private\n */\nfunction pd(event) {\n    const retv = privateData.get(event);\n    console.assert(\n        retv != null,\n        \"'this' is expected an Event object, but got\",\n        event\n    );\n    return retv\n}\n\n/**\n * https://dom.spec.whatwg.org/#set-the-canceled-flag\n * @param data {PrivateData} private data.\n */\nfunction setCancelFlag(data) {\n    if (data.passiveListener != null) {\n        if (\n            typeof console !== \"undefined\" &&\n            typeof console.error === \"function\"\n        ) {\n            console.error(\n                \"Unable to preventDefault inside passive event listener invocation.\",\n                data.passiveListener\n            );\n        }\n        return\n    }\n    if (!data.event.cancelable) {\n        return\n    }\n\n    data.canceled = true;\n    if (typeof data.event.preventDefault === \"function\") {\n        data.event.preventDefault();\n    }\n}\n\n/**\n * @see https://dom.spec.whatwg.org/#interface-event\n * @private\n */\n/**\n * The event wrapper.\n * @constructor\n * @param {EventTarget} eventTarget The event target of this dispatching.\n * @param {Event|{type:string}} event The original event to wrap.\n */\nfunction Event(eventTarget, event) {\n    privateData.set(this, {\n        eventTarget,\n        event,\n        eventPhase: 2,\n        currentTarget: eventTarget,\n        canceled: false,\n        stopped: false,\n        immediateStopped: false,\n        passiveListener: null,\n        timeStamp: event.timeStamp || Date.now(),\n    });\n\n    // https://heycam.github.io/webidl/#Unforgeable\n    Object.defineProperty(this, \"isTrusted\", { value: false, enumerable: true });\n\n    // Define accessors\n    const keys = Object.keys(event);\n    for (let i = 0; i < keys.length; ++i) {\n        const key = keys[i];\n        if (!(key in this)) {\n            Object.defineProperty(this, key, defineRedirectDescriptor(key));\n        }\n    }\n}\n\n// Should be enumerable, but class methods are not enumerable.\nEvent.prototype = {\n    /**\n     * The type of this event.\n     * @type {string}\n     */\n    get type() {\n        return pd(this).event.type\n    },\n\n    /**\n     * The target of this event.\n     * @type {EventTarget}\n     */\n    get target() {\n        return pd(this).eventTarget\n    },\n\n    /**\n     * The target of this event.\n     * @type {EventTarget}\n     */\n    get currentTarget() {\n        return pd(this).currentTarget\n    },\n\n    /**\n     * @returns {EventTarget[]} The composed path of this event.\n     */\n    composedPath() {\n        const currentTarget = pd(this).currentTarget;\n        if (currentTarget == null) {\n            return []\n        }\n        return [currentTarget]\n    },\n\n    /**\n     * Constant of NONE.\n     * @type {number}\n     */\n    get NONE() {\n        return 0\n    },\n\n    /**\n     * Constant of CAPTURING_PHASE.\n     * @type {number}\n     */\n    get CAPTURING_PHASE() {\n        return 1\n    },\n\n    /**\n     * Constant of AT_TARGET.\n     * @type {number}\n     */\n    get AT_TARGET() {\n        return 2\n    },\n\n    /**\n     * Constant of BUBBLING_PHASE.\n     * @type {number}\n     */\n    get BUBBLING_PHASE() {\n        return 3\n    },\n\n    /**\n     * The target of this event.\n     * @type {number}\n     */\n    get eventPhase() {\n        return pd(this).eventPhase\n    },\n\n    /**\n     * Stop event bubbling.\n     * @returns {void}\n     */\n    stopPropagation() {\n        const data = pd(this);\n\n        data.stopped = true;\n        if (typeof data.event.stopPropagation === \"function\") {\n            data.event.stopPropagation();\n        }\n    },\n\n    /**\n     * Stop event bubbling.\n     * @returns {void}\n     */\n    stopImmediatePropagation() {\n        const data = pd(this);\n\n        data.stopped = true;\n        data.immediateStopped = true;\n        if (typeof data.event.stopImmediatePropagation === \"function\") {\n            data.event.stopImmediatePropagation();\n        }\n    },\n\n    /**\n     * The flag to be bubbling.\n     * @type {boolean}\n     */\n    get bubbles() {\n        return Boolean(pd(this).event.bubbles)\n    },\n\n    /**\n     * The flag to be cancelable.\n     * @type {boolean}\n     */\n    get cancelable() {\n        return Boolean(pd(this).event.cancelable)\n    },\n\n    /**\n     * Cancel this event.\n     * @returns {void}\n     */\n    preventDefault() {\n        setCancelFlag(pd(this));\n    },\n\n    /**\n     * The flag to indicate cancellation state.\n     * @type {boolean}\n     */\n    get defaultPrevented() {\n        return pd(this).canceled\n    },\n\n    /**\n     * The flag to be composed.\n     * @type {boolean}\n     */\n    get composed() {\n        return Boolean(pd(this).event.composed)\n    },\n\n    /**\n     * The unix time of this event.\n     * @type {number}\n     */\n    get timeStamp() {\n        return pd(this).timeStamp\n    },\n\n    /**\n     * The target of this event.\n     * @type {EventTarget}\n     * @deprecated\n     */\n    get srcElement() {\n        return pd(this).eventTarget\n    },\n\n    /**\n     * The flag to stop event bubbling.\n     * @type {boolean}\n     * @deprecated\n     */\n    get cancelBubble() {\n        return pd(this).stopped\n    },\n    set cancelBubble(value) {\n        if (!value) {\n            return\n        }\n        const data = pd(this);\n\n        data.stopped = true;\n        if (typeof data.event.cancelBubble === \"boolean\") {\n            data.event.cancelBubble = true;\n        }\n    },\n\n    /**\n     * The flag to indicate cancellation state.\n     * @type {boolean}\n     * @deprecated\n     */\n    get returnValue() {\n        return !pd(this).canceled\n    },\n    set returnValue(value) {\n        if (!value) {\n            setCancelFlag(pd(this));\n        }\n    },\n\n    /**\n     * Initialize this event object. But do nothing under event dispatching.\n     * @param {string} type The event type.\n     * @param {boolean} [bubbles=false] The flag to be possible to bubble up.\n     * @param {boolean} [cancelable=false] The flag to be possible to cancel.\n     * @deprecated\n     */\n    initEvent() {\n        // Do nothing.\n    },\n};\n\n// `constructor` is not enumerable.\nObject.defineProperty(Event.prototype, \"constructor\", {\n    value: Event,\n    configurable: true,\n    writable: true,\n});\n\n// Ensure `event instanceof window.Event` is `true`.\nif (typeof window !== \"undefined\" && typeof window.Event !== \"undefined\") {\n    Object.setPrototypeOf(Event.prototype, window.Event.prototype);\n\n    // Make association for wrappers.\n    wrappers.set(window.Event.prototype, Event);\n}\n\n/**\n * Get the property descriptor to redirect a given property.\n * @param {string} key Property name to define property descriptor.\n * @returns {PropertyDescriptor} The property descriptor to redirect the property.\n * @private\n */\nfunction defineRedirectDescriptor(key) {\n    return {\n        get() {\n            return pd(this).event[key]\n        },\n        set(value) {\n            pd(this).event[key] = value;\n        },\n        configurable: true,\n        enumerable: true,\n    }\n}\n\n/**\n * Get the property descriptor to call a given method property.\n * @param {string} key Property name to define property descriptor.\n * @returns {PropertyDescriptor} The property descriptor to call the method property.\n * @private\n */\nfunction defineCallDescriptor(key) {\n    return {\n        value() {\n            const event = pd(this).event;\n            return event[key].apply(event, arguments)\n        },\n        configurable: true,\n        enumerable: true,\n    }\n}\n\n/**\n * Define new wrapper class.\n * @param {Function} BaseEvent The base wrapper class.\n * @param {Object} proto The prototype of the original event.\n * @returns {Function} The defined wrapper class.\n * @private\n */\nfunction defineWrapper(BaseEvent, proto) {\n    const keys = Object.keys(proto);\n    if (keys.length === 0) {\n        return BaseEvent\n    }\n\n    /** CustomEvent */\n    function CustomEvent(eventTarget, event) {\n        BaseEvent.call(this, eventTarget, event);\n    }\n\n    CustomEvent.prototype = Object.create(BaseEvent.prototype, {\n        constructor: { value: CustomEvent, configurable: true, writable: true },\n    });\n\n    // Define accessors.\n    for (let i = 0; i < keys.length; ++i) {\n        const key = keys[i];\n        if (!(key in BaseEvent.prototype)) {\n            const descriptor = Object.getOwnPropertyDescriptor(proto, key);\n            const isFunc = typeof descriptor.value === \"function\";\n            Object.defineProperty(\n                CustomEvent.prototype,\n                key,\n                isFunc\n                    ? defineCallDescriptor(key)\n                    : defineRedirectDescriptor(key)\n            );\n        }\n    }\n\n    return CustomEvent\n}\n\n/**\n * Get the wrapper class of a given prototype.\n * @param {Object} proto The prototype of the original event to get its wrapper.\n * @returns {Function} The wrapper class.\n * @private\n */\nfunction getWrapper(proto) {\n    if (proto == null || proto === Object.prototype) {\n        return Event\n    }\n\n    let wrapper = wrappers.get(proto);\n    if (wrapper == null) {\n        wrapper = defineWrapper(getWrapper(Object.getPrototypeOf(proto)), proto);\n        wrappers.set(proto, wrapper);\n    }\n    return wrapper\n}\n\n/**\n * Wrap a given event to management a dispatching.\n * @param {EventTarget} eventTarget The event target of this dispatching.\n * @param {Object} event The event to wrap.\n * @returns {Event} The wrapper instance.\n * @private\n */\nfunction wrapEvent(eventTarget, event) {\n    const Wrapper = getWrapper(Object.getPrototypeOf(event));\n    return new Wrapper(eventTarget, event)\n}\n\n/**\n * Get the immediateStopped flag of a given event.\n * @param {Event} event The event to get.\n * @returns {boolean} The flag to stop propagation immediately.\n * @private\n */\nfunction isStopped(event) {\n    return pd(event).immediateStopped\n}\n\n/**\n * Set the current event phase of a given event.\n * @param {Event} event The event to set current target.\n * @param {number} eventPhase New event phase.\n * @returns {void}\n * @private\n */\nfunction setEventPhase(event, eventPhase) {\n    pd(event).eventPhase = eventPhase;\n}\n\n/**\n * Set the current target of a given event.\n * @param {Event} event The event to set current target.\n * @param {EventTarget|null} currentTarget New current target.\n * @returns {void}\n * @private\n */\nfunction setCurrentTarget(event, currentTarget) {\n    pd(event).currentTarget = currentTarget;\n}\n\n/**\n * Set a passive listener of a given event.\n * @param {Event} event The event to set current target.\n * @param {Function|null} passiveListener New passive listener.\n * @returns {void}\n * @private\n */\nfunction setPassiveListener(event, passiveListener) {\n    pd(event).passiveListener = passiveListener;\n}\n\n/**\n * @typedef {object} ListenerNode\n * @property {Function} listener\n * @property {1|2|3} listenerType\n * @property {boolean} passive\n * @property {boolean} once\n * @property {ListenerNode|null} next\n * @private\n */\n\n/**\n * @type {WeakMap<object, Map<string, ListenerNode>>}\n * @private\n */\nconst listenersMap = new WeakMap();\n\n// Listener types\nconst CAPTURE = 1;\nconst BUBBLE = 2;\nconst ATTRIBUTE = 3;\n\n/**\n * Check whether a given value is an object or not.\n * @param {any} x The value to check.\n * @returns {boolean} `true` if the value is an object.\n */\nfunction isObject(x) {\n    return x !== null && typeof x === \"object\" //eslint-disable-line no-restricted-syntax\n}\n\n/**\n * Get listeners.\n * @param {EventTarget} eventTarget The event target to get.\n * @returns {Map<string, ListenerNode>} The listeners.\n * @private\n */\nfunction getListeners(eventTarget) {\n    const listeners = listenersMap.get(eventTarget);\n    if (listeners == null) {\n        throw new TypeError(\n            \"'this' is expected an EventTarget object, but got another value.\"\n        )\n    }\n    return listeners\n}\n\n/**\n * Get the property descriptor for the event attribute of a given event.\n * @param {string} eventName The event name to get property descriptor.\n * @returns {PropertyDescriptor} The property descriptor.\n * @private\n */\nfunction defineEventAttributeDescriptor(eventName) {\n    return {\n        get() {\n            const listeners = getListeners(this);\n            let node = listeners.get(eventName);\n            while (node != null) {\n                if (node.listenerType === ATTRIBUTE) {\n                    return node.listener\n                }\n                node = node.next;\n            }\n            return null\n        },\n\n        set(listener) {\n            if (typeof listener !== \"function\" && !isObject(listener)) {\n                listener = null; // eslint-disable-line no-param-reassign\n            }\n            const listeners = getListeners(this);\n\n            // Traverse to the tail while removing old value.\n            let prev = null;\n            let node = listeners.get(eventName);\n            while (node != null) {\n                if (node.listenerType === ATTRIBUTE) {\n                    // Remove old value.\n                    if (prev !== null) {\n                        prev.next = node.next;\n                    } else if (node.next !== null) {\n                        listeners.set(eventName, node.next);\n                    } else {\n                        listeners.delete(eventName);\n                    }\n                } else {\n                    prev = node;\n                }\n\n                node = node.next;\n            }\n\n            // Add new value.\n            if (listener !== null) {\n                const newNode = {\n                    listener,\n                    listenerType: ATTRIBUTE,\n                    passive: false,\n                    once: false,\n                    next: null,\n                };\n                if (prev === null) {\n                    listeners.set(eventName, newNode);\n                } else {\n                    prev.next = newNode;\n                }\n            }\n        },\n        configurable: true,\n        enumerable: true,\n    }\n}\n\n/**\n * Define an event attribute (e.g. `eventTarget.onclick`).\n * @param {Object} eventTargetPrototype The event target prototype to define an event attrbite.\n * @param {string} eventName The event name to define.\n * @returns {void}\n */\nfunction defineEventAttribute(eventTargetPrototype, eventName) {\n    Object.defineProperty(\n        eventTargetPrototype,\n        `on${eventName}`,\n        defineEventAttributeDescriptor(eventName)\n    );\n}\n\n/**\n * Define a custom EventTarget with event attributes.\n * @param {string[]} eventNames Event names for event attributes.\n * @returns {EventTarget} The custom EventTarget.\n * @private\n */\nfunction defineCustomEventTarget(eventNames) {\n    /** CustomEventTarget */\n    function CustomEventTarget() {\n        EventTarget.call(this);\n    }\n\n    CustomEventTarget.prototype = Object.create(EventTarget.prototype, {\n        constructor: {\n            value: CustomEventTarget,\n            configurable: true,\n            writable: true,\n        },\n    });\n\n    for (let i = 0; i < eventNames.length; ++i) {\n        defineEventAttribute(CustomEventTarget.prototype, eventNames[i]);\n    }\n\n    return CustomEventTarget\n}\n\n/**\n * EventTarget.\n *\n * - This is constructor if no arguments.\n * - This is a function which returns a CustomEventTarget constructor if there are arguments.\n *\n * For example:\n *\n *     class A extends EventTarget {}\n *     class B extends EventTarget(\"message\") {}\n *     class C extends EventTarget(\"message\", \"error\") {}\n *     class D extends EventTarget([\"message\", \"error\"]) {}\n */\nfunction EventTarget() {\n    /*eslint-disable consistent-return */\n    if (this instanceof EventTarget) {\n        listenersMap.set(this, new Map());\n        return\n    }\n    if (arguments.length === 1 && Array.isArray(arguments[0])) {\n        return defineCustomEventTarget(arguments[0])\n    }\n    if (arguments.length > 0) {\n        const types = new Array(arguments.length);\n        for (let i = 0; i < arguments.length; ++i) {\n            types[i] = arguments[i];\n        }\n        return defineCustomEventTarget(types)\n    }\n    throw new TypeError(\"Cannot call a class as a function\")\n    /*eslint-enable consistent-return */\n}\n\n// Should be enumerable, but class methods are not enumerable.\nEventTarget.prototype = {\n    /**\n     * Add a given listener to this event target.\n     * @param {string} eventName The event name to add.\n     * @param {Function} listener The listener to add.\n     * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\n     * @returns {void}\n     */\n    addEventListener(eventName, listener, options) {\n        if (listener == null) {\n            return\n        }\n        if (typeof listener !== \"function\" && !isObject(listener)) {\n            throw new TypeError(\"'listener' should be a function or an object.\")\n        }\n\n        const listeners = getListeners(this);\n        const optionsIsObj = isObject(options);\n        const capture = optionsIsObj\n            ? Boolean(options.capture)\n            : Boolean(options);\n        const listenerType = capture ? CAPTURE : BUBBLE;\n        const newNode = {\n            listener,\n            listenerType,\n            passive: optionsIsObj && Boolean(options.passive),\n            once: optionsIsObj && Boolean(options.once),\n            next: null,\n        };\n\n        // Set it as the first node if the first node is null.\n        let node = listeners.get(eventName);\n        if (node === undefined) {\n            listeners.set(eventName, newNode);\n            return\n        }\n\n        // Traverse to the tail while checking duplication..\n        let prev = null;\n        while (node != null) {\n            if (\n                node.listener === listener &&\n                node.listenerType === listenerType\n            ) {\n                // Should ignore duplication.\n                return\n            }\n            prev = node;\n            node = node.next;\n        }\n\n        // Add it.\n        prev.next = newNode;\n    },\n\n    /**\n     * Remove a given listener from this event target.\n     * @param {string} eventName The event name to remove.\n     * @param {Function} listener The listener to remove.\n     * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\n     * @returns {void}\n     */\n    removeEventListener(eventName, listener, options) {\n        if (listener == null) {\n            return\n        }\n\n        const listeners = getListeners(this);\n        const capture = isObject(options)\n            ? Boolean(options.capture)\n            : Boolean(options);\n        const listenerType = capture ? CAPTURE : BUBBLE;\n\n        let prev = null;\n        let node = listeners.get(eventName);\n        while (node != null) {\n            if (\n                node.listener === listener &&\n                node.listenerType === listenerType\n            ) {\n                if (prev !== null) {\n                    prev.next = node.next;\n                } else if (node.next !== null) {\n                    listeners.set(eventName, node.next);\n                } else {\n                    listeners.delete(eventName);\n                }\n                return\n            }\n\n            prev = node;\n            node = node.next;\n        }\n    },\n\n    /**\n     * Dispatch a given event.\n     * @param {Event|{type:string}} event The event to dispatch.\n     * @returns {boolean} `false` if canceled.\n     */\n    dispatchEvent(event) {\n        if (event == null || typeof event.type !== \"string\") {\n            throw new TypeError('\"event.type\" should be a string.')\n        }\n\n        // If listeners aren't registered, terminate.\n        const listeners = getListeners(this);\n        const eventName = event.type;\n        let node = listeners.get(eventName);\n        if (node == null) {\n            return true\n        }\n\n        // Since we cannot rewrite several properties, so wrap object.\n        const wrappedEvent = wrapEvent(this, event);\n\n        // This doesn't process capturing phase and bubbling phase.\n        // This isn't participating in a tree.\n        let prev = null;\n        while (node != null) {\n            // Remove this listener if it's once\n            if (node.once) {\n                if (prev !== null) {\n                    prev.next = node.next;\n                } else if (node.next !== null) {\n                    listeners.set(eventName, node.next);\n                } else {\n                    listeners.delete(eventName);\n                }\n            } else {\n                prev = node;\n            }\n\n            // Call this listener\n            setPassiveListener(\n                wrappedEvent,\n                node.passive ? node.listener : null\n            );\n            if (typeof node.listener === \"function\") {\n                try {\n                    node.listener.call(this, wrappedEvent);\n                } catch (err) {\n                    if (\n                        typeof console !== \"undefined\" &&\n                        typeof console.error === \"function\"\n                    ) {\n                        console.error(err);\n                    }\n                }\n            } else if (\n                node.listenerType !== ATTRIBUTE &&\n                typeof node.listener.handleEvent === \"function\"\n            ) {\n                node.listener.handleEvent(wrappedEvent);\n            }\n\n            // Break if `event.stopImmediatePropagation` was called.\n            if (isStopped(wrappedEvent)) {\n                break\n            }\n\n            node = node.next;\n        }\n        setPassiveListener(wrappedEvent, null);\n        setEventPhase(wrappedEvent, 0);\n        setCurrentTarget(wrappedEvent, null);\n\n        return !wrappedEvent.defaultPrevented\n    },\n};\n\n// `constructor` is not enumerable.\nObject.defineProperty(EventTarget.prototype, \"constructor\", {\n    value: EventTarget,\n    configurable: true,\n    writable: true,\n});\n\n// Ensure `eventTarget instanceof window.EventTarget` is `true`.\nif (\n    typeof window !== \"undefined\" &&\n    typeof window.EventTarget !== \"undefined\"\n) {\n    Object.setPrototypeOf(EventTarget.prototype, window.EventTarget.prototype);\n}\n\nexport default EventTarget;\nexport { defineEventAttribute, EventTarget };\n//# sourceMappingURL=event-target-shim.mjs.map\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * See LICENSE file in root directory for full license.\n */\nimport { EventTarget, defineEventAttribute } from 'event-target-shim';\n\n/**\n * The signal class.\n * @see https://dom.spec.whatwg.org/#abortsignal\n */\nclass AbortSignal extends EventTarget {\n    /**\n     * AbortSignal cannot be constructed directly.\n     */\n    constructor() {\n        super();\n        throw new TypeError(\"AbortSignal cannot be constructed directly\");\n    }\n    /**\n     * Returns `true` if this `AbortSignal`'s `AbortController` has signaled to abort, and `false` otherwise.\n     */\n    get aborted() {\n        const aborted = abortedFlags.get(this);\n        if (typeof aborted !== \"boolean\") {\n            throw new TypeError(`Expected 'this' to be an 'AbortSignal' object, but got ${this === null ? \"null\" : typeof this}`);\n        }\n        return aborted;\n    }\n}\ndefineEventAttribute(AbortSignal.prototype, \"abort\");\n/**\n * Create an AbortSignal object.\n */\nfunction createAbortSignal() {\n    const signal = Object.create(AbortSignal.prototype);\n    EventTarget.call(signal);\n    abortedFlags.set(signal, false);\n    return signal;\n}\n/**\n * Abort a given signal.\n */\nfunction abortSignal(signal) {\n    if (abortedFlags.get(signal) !== false) {\n        return;\n    }\n    abortedFlags.set(signal, true);\n    signal.dispatchEvent({ type: \"abort\" });\n}\n/**\n * Aborted flag for each instances.\n */\nconst abortedFlags = new WeakMap();\n// Properties should be enumerable.\nObject.defineProperties(AbortSignal.prototype, {\n    aborted: { enumerable: true },\n});\n// `toString()` should return `\"[object AbortSignal]\"`\nif (typeof Symbol === \"function\" && typeof Symbol.toStringTag === \"symbol\") {\n    Object.defineProperty(AbortSignal.prototype, Symbol.toStringTag, {\n        configurable: true,\n        value: \"AbortSignal\",\n    });\n}\n\n/**\n * The AbortController.\n * @see https://dom.spec.whatwg.org/#abortcontroller\n */\nclass AbortController {\n    /**\n     * Initialize this controller.\n     */\n    constructor() {\n        signals.set(this, createAbortSignal());\n    }\n    /**\n     * Returns the `AbortSignal` object associated with this object.\n     */\n    get signal() {\n        return getSignal(this);\n    }\n    /**\n     * Abort and signal to any observers that the associated activity is to be aborted.\n     */\n    abort() {\n        abortSignal(getSignal(this));\n    }\n}\n/**\n * Associated signals.\n */\nconst signals = new WeakMap();\n/**\n * Get the associated signal of a given controller.\n */\nfunction getSignal(controller) {\n    const signal = signals.get(controller);\n    if (signal == null) {\n        throw new TypeError(`Expected 'this' to be an 'AbortController' object, but got ${controller === null ? \"null\" : typeof controller}`);\n    }\n    return signal;\n}\n// Properties should be enumerable.\nObject.defineProperties(AbortController.prototype, {\n    signal: { enumerable: true },\n    abort: { enumerable: true },\n});\nif (typeof Symbol === \"function\" && typeof Symbol.toStringTag === \"symbol\") {\n    Object.defineProperty(AbortController.prototype, Symbol.toStringTag, {\n        configurable: true,\n        value: \"AbortController\",\n    });\n}\n\nexport default AbortController;\nexport { AbortController, AbortSignal };\n//# sourceMappingURL=abort-controller.mjs.map\n","/*globals self, window */\nimport * as ac from \"./dist/abort-controller\"\n\n/*eslint-disable @mysticatea/prettier */\nconst g =\n    typeof self !== \"undefined\" ? self :\n    typeof window !== \"undefined\" ? window :\n    typeof global !== \"undefined\" ? global :\n    /* otherwise */ undefined\n/*eslint-enable @mysticatea/prettier */\n\nif (g) {\n    if (typeof g.AbortController === \"undefined\") {\n        g.AbortController = ac.AbortController\n    }\n    if (typeof g.AbortSignal === \"undefined\") {\n        g.AbortSignal = ac.AbortSignal\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n * Copyright 2021 Adobe Systems Incorporated\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any. The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport EventEmitter from 'events';\nimport ONSInterface from './ONSInterface';\nimport SAMError, { ProblemType, SAMErrorCode } from '../core/SAMError';\nimport type { ISAMObject } from '../indexPrivate';\nimport { synchronized } from '../core/decorators';\nimport type jsonpatch from 'json-patch';\nimport { isDeepEqual } from '../core/ObjectUtils';\nimport { getRetryAfterHeader, JSON_PATCH_MIME_TYPE, RelType, getURLFromLinks } from './LinkUtils';\n\nconst ONS_SUBSCRIPTION_MIME_TYPE = 'application/vnd.adobecloud.subscription+json';\nconst ONS_AUTH_HEADER = 'X-User-Token';\nconst MAX_RETRY_ATTEMPTS: number = 3;\nconst MIN_RETRY_INTERVAL_MS: number = 10; // 10 msec\n\nexport type ONSResourceType = 'api:metadata/repository' | 'api:metadata/application' | 'api:ac/policy';\n\nexport interface ONSResource {\n    reltype: ONSResourceType;\n}\n\n/**\n * Properties used to configure each asset in the ONS subscription.\n *\n * directoryLevel\n *   self: Notified only when the directory asset itself changes.\n *   shallow: Notified when the directory asset or any of its immediate children change.\n *   deep: Notified when the directory asset or any of its children (recursively) change.\n * includeResources: Array of resources to monitor (if omitted, only repo metadata is monitored)\n */\nexport interface ONSObjectProperties {\n    directoryLevel?: 'self' | 'shallow'; // | 'deep' not supported yet\n    includeResources?: ONSResource[];\n}\n\nexport type ONSAssetMap = Map<string, ONSObjectProperties>;\n\n// By default we want to monitor all resources that ONS supports:\nconst defaultONSObjectProperties = {\n    includeResources: [\n        { reltype: 'api:metadata/repository' },\n        { reltype: 'api:metadata/application' },\n        { reltype: 'api:ac/policy' }\n    ]\n};\n\ntype ONSCreateRequestObjects = Array<{ id: string & ONSObjectProperties }>;\ntype ONSCreateRequestBody = {\n    id?: string,\n    objects: ONSCreateRequestObjects,\n    device: {\n        id: string\n    },\n    expiresAt: number\n}\n\nexport interface ONSCachedSubscription {\n    id: string;\n    href: string;\n    assets: { [id: string]: ONSObjectProperties };\n    expiresAt?: number;\n}\n\n// Additional information that comes with an ONS event\nexport interface ONSChangedAssetInfo {\n    parentAssetId?: string\n    changedResources?: ONSResourceType[]\n}\n\n/**\n* Interface to register ONS subscription and listen for change events.\n*/\nexport default class ONSSubscription extends EventEmitter implements ISAMObject {\n    private _lastError?: any;\n    private _retryTimeout?: ReturnType<typeof setTimeout>;\n    private _retryChangeLogTimeout?: ReturnType<typeof setTimeout>;\n    private _nextChangeLogLinks?: any;\n    private _assets: ONSAssetMap = new Map();\n    private _watchedAssets: ONSAssetMap = new Map();\n    private _initializedFromCache: boolean = false;\n    private _subscriptionId?: string;\n    private _subscriptionHref?: string;\n    private _expiresAt?: number;\n\n    // Default interval between retry attempts in seconds if no Retry-After header value is available.\n    static DEFAULT_RETRY_INTERVAL_SEC = 0;\n\n    constructor(\n        private _onsInterface: ONSInterface,\n        cachedSubscription?: ONSCachedSubscription\n    ) {\n        super();\n        if (cachedSubscription) {\n            const { id, href, assets, expiresAt } = cachedSubscription;\n            this._subscriptionId = id;\n            this._subscriptionHref = href;\n            this._expiresAt = expiresAt;\n            this._watchedAssets = new Map(Object.entries(assets));\n\n            // We check if we are given watchedAssetId's and this will\n            // indicate that we are loading them from cache.\n            this._initializedFromCache = this._watchedAssets.size > 0;\n        }\n    }\n\n    get _core() { return this._onsInterface._core; }\n    get subscriptionId(): string | undefined { return this._subscriptionId; }\n    get subscriptionHref(): string | undefined { return this._subscriptionHref; }\n    get expiresAt(): number { return this._expiresAt ?? 0; }\n\n    private _log(msg: string) {\n        this._core._environment.log(msg);\n    }\n\n    get lastError(): any { return this._lastError; }\n    get assets(): ONSAssetMap { return this._assets; }\n    get watchedAssets(): ONSAssetMap { return this._watchedAssets; }\n\n    abort(): boolean {\n        if (this._retryTimeout) {\n            clearTimeout(this._retryTimeout);\n            this._retryTimeout = undefined;\n            this._log(`subscription ${this.subscriptionId} retry got aborted`);\n            return true;\n        }\n        return false;\n    }\n\n    set assets(assets: ONSAssetMap) {\n        this._assets = new Map(assets);\n        this._update();\n    }\n\n    @synchronized\n    private async _update(tryAttempt: number = 0) {\n        // Abort any retry attempts as we might need to remove, add\n        // or update subscriptions which may cancel out previous\n        // requests.\n        this.abort();\n        const assets = this._assets;\n\n        // This makes a comparison of the \"new\" id's just added and the\n        // previous assets that were added (watchedAssets);\n        if (isDeepEqual(assets, this._watchedAssets)) {\n            if (this._lastError) {\n                // If we had an error creating or updating the subscription, but then we revert back to the\n                // previous state, we need to clear the error otherwise we'll be stuck with an error!\n                this._lastError = undefined;\n\n                // Emit a change event to tell ONSInterface that we can begin\n                // the longpoll request.\n                this.emit('change');\n            } else if (this._initializedFromCache) {\n                // If we initialized the subscription with information\n                // from the cache and the assets being added by the client\n                // are exactly the same, we still want to notify the ONSInterface\n                // that it can begin the longpoll request otherwise it wont.\n                this.emit('change', { fromCache: true });\n            }\n            return;\n        }\n\n        this._log(`Setting ${assets.size} asset ids for ${this.subscriptionId || '<pending subscription id>'}`);\n\n        try {\n            if (assets.size === 0) {\n                this._log(`deleting subscription ${this.subscriptionId} requested assets no longer exist`);\n                await this._deleteSubscriptionFromServer();\n            } else if (this._subscriptionHref) {\n                this._log(`updating subscription on the server ${this.subscriptionId}`);\n                await this._updateSubscriptionOnServer(assets);\n            } else {\n                this._log(`creating subscription`);\n                await this._createSubscriptionOnServer(assets);\n            }\n\n            // Add the new ids to the \"old\" ids list\n            // so we can track changes later on when even newer\n            // ids are added to this subscription.\n            this._watchedAssets = assets;\n            this._lastError = undefined;\n            this.emit('change');\n        } catch (err) {\n            this._log(`Error updating subscription: ${err}`);\n            this._lastError = err;\n            this.emit('change');\n            // Schedule a retry for later if there's an error\n            if (tryAttempt < MAX_RETRY_ATTEMPTS) {\n                let retryAfter = (getRetryAfterHeader(err.response?.headers) || ONSSubscription.DEFAULT_RETRY_INTERVAL_SEC) * 1000;\n                retryAfter = Math.max(MIN_RETRY_INTERVAL_MS, retryAfter);\n                this._retryTimeout = setTimeout(() => {\n                    this._retryTimeout = undefined;\n                    this._update(tryAttempt + 1);\n                },\n                retryAfter);\n            }\n        }\n    }\n\n    private async _parseSubscriptionResponse(operation: string, getResponse: () => Promise<Response>) {\n        const response = await getResponse();\n\n        if (response.status < 200 || response.status >= 300) {\n            let errMsg = `operation ${operation} with http response.status: ${response.status}`;\n\n            if (response.status === 403) {\n                const jsonError = await response.json();\n                if (jsonError.type === ProblemType.SUBSCRIPTION_COUNT) {\n                    errMsg = `Maximum number of subscriptions per user per device exceeded (${jsonError.max})`;\n                }\n            }\n\n            this._log(errMsg);\n            throw SAMError.createWithResponseAndDescription(response, errMsg);\n        }\n\n        const json = await response.json();\n\n        if (!json.id || !json._links || !json._links.self || !json._links.self.href) {\n            const errMsg = `No subscription ID or href was returned in subscribe response.`;\n            this._log(errMsg);\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, errMsg, { response });\n        }\n\n        this._subscriptionId   = json.id;\n        this._subscriptionHref = json._links.self.href;\n\n        if (json.expiresAt) {\n            this._expiresAt = json.expiresAt;\n        }\n    }\n\n    private _createObjectsRequestBody(assets: ONSAssetMap): ONSCreateRequestObjects {\n        const objects: ONSCreateRequestObjects = [];\n        assets.forEach((properties, id) =>\n            objects.push({ id, ...defaultONSObjectProperties, ...properties })\n        );\n        return objects;\n    }\n\n    private async _createRequestBody(assets?: ONSAssetMap): Promise<string> {\n        const objects = this._createObjectsRequestBody(assets ?? this.watchedAssets);\n        const deviceId = await this._core._environment.getDeviceId();\n        const requestBody: ONSCreateRequestBody = {\n            id: this.subscriptionId,\n            objects,\n            device: { id: deviceId },\n            expiresAt: Date.now() + this._core._environment.getValue('ONS_SUBSCRIPTION_TIME_TO_LIVE')\n        };\n        return JSON.stringify(requestBody);\n    }\n\n    private async _createSubscriptionOnServer(assets: ONSAssetMap): Promise<void> {\n        const href = await this._onsInterface._getLink(RelType.SUBSCRIPTION_CREATE);\n        const requestBody = await this._createRequestBody(assets);\n        this._log(`Creating subscription for ${assets.size} assets: ${[ ...assets.keys() ].join(', ')}`);\n        return this._parseSubscriptionResponse('create',\n            () => this._core._environment.fetch(href, {\n                method: 'POST',\n                body: requestBody,\n                authHeader: ONS_AUTH_HEADER,\n                headers: {\n                    'Content-Type': ONS_SUBSCRIPTION_MIME_TYPE\n                }\n            }));\n    }\n\n    private async _updateSubscriptionOnServer(assets: ONSAssetMap): Promise<void> {\n        // finding out which assetID(s) to add and which to remove\n        const oldAssets = this._watchedAssets;\n        const newAssets = assets;\n\n        const operations: jsonpatch.OpPatch[] = [];\n        newAssets.forEach((properties: ONSObjectProperties, id: string) => {\n            if (!oldAssets.has(id)) {\n                const item: jsonpatch.AddPatch = { 'op': 'add', 'path': '/objects/-', 'value': { id, ...defaultONSObjectProperties, ...properties } };\n                operations.push(item);\n            }\n        });\n        oldAssets.forEach((properties: ONSObjectProperties, id: string) => {\n            if (!newAssets.has(id)) {\n                const item: jsonpatch.RemovePatch = { 'op': 'remove', 'path': `/objects/id=${id}` };\n                operations.push(item);\n            }\n        });\n        const requestBody: string = JSON.stringify(operations);\n\n        this._log(`Updating subscription ${this._subscriptionId}: ${requestBody}`);\n\n        try {\n            await this._parseSubscriptionResponse('update',\n                () => this._core._environment.fetch(this._subscriptionHref!, {\n                    method: 'PATCH',\n                    body: requestBody,\n                    authHeader: ONS_AUTH_HEADER,\n                    headers: {\n                        'Content-Type': JSON_PATCH_MIME_TYPE\n                    }\n                }));\n        } catch (err) {\n            // If we get a 404 updating a subscription, we should fall back to creating a new subscription instead\n            if (err.code === SAMErrorCode.NOT_FOUND) {\n                this._log(`The subscription we tried to update no longer exists (${this._subscriptionId}) - creating a new subscription instead`);\n                return this._createSubscriptionOnServer(assets);\n            }\n            throw err;\n        }\n    }\n\n    private async _deleteSubscriptionFromServer(): Promise<void> {\n        this._log(`Deleting subscription ${this._subscriptionId}`);\n\n        try {\n            // Note: There's no way to reach this point with _subscriptionHref undefined, so we assert that it's defined\n            await this._core._environment.fetch(this._subscriptionHref!, {\n                method: 'DELETE',\n                authHeader: ONS_AUTH_HEADER\n            });\n        } catch (error) {\n            // We tried.\n            this._log(`Unable to delete subscription: ${this._subscriptionHref}. Error: ${error}`);\n        }\n\n        // We clear the subscription even if we fail to delete it - ONS will auto-delete orphaned subscriptions after some time anyway,\n        // so we don't need to be aggressive about retrying\n        this._subscriptionId = undefined;\n        this._subscriptionHref = undefined;\n        this._expiresAt = undefined;\n    }\n\n    public async refreshSubscriptionExpiryDate(): Promise<void> {\n        this._log(`Refreshing expiry date on subscription ${this.subscriptionId}`);\n        const requestBody = await this._createRequestBody();\n        return this._parseSubscriptionResponse(\n            'update',\n            () => this._core._environment.fetch(\n                this.subscriptionHref!,\n                {\n                    method: 'PUT',\n                    body: requestBody,\n                    authHeader: ONS_AUTH_HEADER,\n                    headers: {\n                        'Content-Type': ONS_SUBSCRIPTION_MIME_TYPE\n                    }\n                }\n            )\n        )\n            .catch(() => {\n                // We tried to update the expiry date on the subscription and failed\n                // Lets try and update\n                return this._update();\n            });\n    }\n\n    private async _fetchChangeLogPage(changedAssets: Map<string, ONSChangedAssetInfo>): Promise<boolean> {\n        const options = { subscriptionId: this._subscriptionId! };\n\n        const href = this._nextChangeLogLinks\n            ? getURLFromLinks(this._nextChangeLogLinks, RelType.GENERIC_NEXT, options)\n            : await this._onsInterface._getLink(RelType.ONS_CHANGELOG, options);\n\n        // Note: Unlike the other ONS calls, this uses the standard Authorization header (other ONS calls use X-User-Token)\n        // This is confusing and error-prone, so I'd like them to standardize on the Authorization header for all calls, but\n        // we have to live with this inconsistency for now.\n        // ONS introduced a new directive header, all clients are expected to pass ons-repometa to\n        // indicate they are ready to handle compact URI for repository metadata resource\n        const response = await this._core._environment.fetch(href, { headers: { 'directive': 'ons-repometa' } });\n\n        if (response.status !== 200) {\n            let errMsg = `Unexpected response fetching change log: ${response.status}`;\n            // In the case that it's 403 and the type is\n            // ONS_PROBLEM_LIMIT_CHANGELOGRETENTION this should mean that the\n            // the current Changelog Token is expired and the we should get\n            // a new \"next\" link.\n            if (response.status === 403) {\n                const parsedResponse = await response.json();\n                if (parsedResponse.type === ProblemType.LIMIT_CHANGELOGRETENTION) {\n                    errMsg = `Changelog retention period expired, discarding \"next\" link and fetching changelog again.`;\n                    // When we throw an error below, it will cause the caller\n                    // to retry this call and by setting _nextChangeLogLinks to undefined\n                    // it will then fetch a new \"next\" link above.\n                    this._nextChangeLogLinks = undefined;\n                }\n            }\n\n            this._log(errMsg);\n            throw SAMError.createWithResponseAndDescription(response, errMsg);\n        }\n        const json = await response.json();\n\n        // From the response, determine which asset ids changed\n        const changedSubscriptions = json['ons:changedSubscriptions'] ?? [];\n        const changedSubscription = changedSubscriptions.find((subscriptionInfo: any) => subscriptionInfo['ons:subscriptionId'] === this._subscriptionId);\n        const changes = changedSubscription?.['ons:changes'] ?? [];\n        changes.forEach((assetInfo: any) => {\n            const assetId = assetInfo['repo:assetId'];\n            const onsResourceInfo = assetInfo['ons:resources'] ?? [];\n            const onsResourcesChanged: ONSResourceType[] = [ ...Object.keys(onsResourceInfo) as ONSResourceType[] ];\n            const parentAssetId = assetInfo['ons:subscribedDirectoryAssetId'];\n            if (assetId) {\n                // If the asset is already in changedAssets, merge the next changed resource so we\n                // don't lose any previous resources that were added here.\n                if (changedAssets.has(assetId)) {\n                    const existingAsset = changedAssets.get(assetId)!;\n                    existingAsset.changedResources = [ ...new Set([ ...existingAsset.changedResources!, ...onsResourcesChanged ]) ];\n                    changedAssets.set(assetId, existingAsset);\n                } else {\n                    changedAssets.set(assetId, { parentAssetId, changedResources: onsResourcesChanged });\n                }\n            }\n        });\n\n        this._nextChangeLogLinks = json?._links;\n        return this._nextChangeLogLinks?.next?.nextPage;\n    }\n\n    /**\n     * Fetch the changed assets ids in the subscription, and emit a change event on the parent ONS Interface for any changed assets.\n     * The reason this API emits events rather than just returning the changed assets is so we can have robust retry logic - if it fails\n     * to fetch the change log it'll schedule a retry with an appropriate backoff, so it automatically recovers. The ONS Interface can\n     * simply call fetchAndNotifyChanges on a subscription that it knows has changes, and the subscription will take responsibility for\n     * eventually fetching and emitting notifications for these changes, even if it has to retry.\n     *\n     * This API is stateful, so if you call it when the subscription changed, it will emit a change event for those assets, but if you call it\n     * again (and there are no further changes), it will not emit an event.\n     */\n    @synchronized\n    async fetchAndNotifyChanges(attempt: number = 0): Promise<void> {\n        this._log(`Fetching ChangeLog for subscription ${this._subscriptionId}...`);\n\n        // If we got another notification of a change, this causes us to retry immediately, and cancels any pending retry\n        if (this._retryChangeLogTimeout) {\n            clearTimeout(this._retryChangeLogTimeout);\n        }\n\n        const retry = (error: any) => {\n            const retryAfter = getRetryAfterHeader(error.response?.headers) * 1000;\n            const interval = Math.max(retryAfter, this._core._environment.getRetryInterval(attempt));\n\n            this._log(`Retrying change log fetch in ${interval}ms`);\n            this._retryChangeLogTimeout = setTimeout(() => this.fetchAndNotifyChanges(attempt + 1), interval);\n        };\n\n        const changedAssets: Map<string, ONSChangedAssetInfo> = new Map();\n        try {\n            let hasMorePages = true;\n            while (hasMorePages) {\n                hasMorePages = await this._fetchChangeLogPage(changedAssets);\n            }\n        } catch (error) {\n            this._log(`Error fetching change log: ${error}`);\n            retry(error);\n        }\n\n        // Even if there's an error, we always notify of any changes we did manage to fetch - for example, if the\n        // first page succeeded, but the second page didn't, when we retry we'll retry from the second page.\n        if (changedAssets.size) {\n            this._log(`Changed Assets: ${[ ...changedAssets.keys() ].join(', ')}`);\n            this._onsInterface.emit('change', changedAssets);\n        }\n    }\n\n    // This is called to check whether the subscription still exists on the server.\n    // The ONS long poll will sometimes request the client to\n    // validate its subscriptions. If the subscription was deleted, it'll recreate it.\n    async validate() {\n        if (!this._subscriptionHref) {\n            // If we're requesting to watch at least one asset id, and don't have a subscription at all,\n            // something must have gone wrong creating it - we attempt to create again.\n            if (this._assets.size > 0) {\n                this._log(`assets exist for subscription but no _subscriptionHref was found, trying to _update() again...`);\n                return this._update();\n            }\n            this._log(`subscription has no assets and no _subscriptionHref set`);\n            return;\n        }\n\n        let checkResponse;\n        try {\n            // ONS spec says to GET (vs HEAD). Why?\n            checkResponse = await this._core._environment.fetch(this._subscriptionHref, {\n                authHeader: ONS_AUTH_HEADER\n            });\n            this._log(`Subscription ${this._subscriptionId} exists on the server`);\n        } catch (error) {\n            this._log(`Error checking ${this._subscriptionId}, it does not exist on the server`);\n            this._log(error);\n            return;\n        }\n\n        // If we can't find the subscription, we need to make a new one.\n        if (![ 200, 201, 204 ].includes(checkResponse.status)) {\n            this._log(`ONS subscription has been invalidated. Creating new subscription...`);\n            this._subscriptionHref = undefined;\n            this._subscriptionId = undefined;\n            this._watchedAssets = new Map();\n            return this._update();\n        }\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n * Copyright 2020 Adobe Systems Incorporated\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any. The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport EventEmitter from 'events';\n// TODO: Remove after all clients have upgraded to UXP 6.2\n// https://jira.corp.adobe.com/browse/UXP-19257\nimport 'abort-controller/polyfill';\n\nimport { cache, key } from '../core/decorators';\nimport type { ISAMCorePrivate, ISAMObject } from '../indexPrivate';\nimport { getRetryAfterHeader, getURLFromLinks, RelType } from './LinkUtils';\nimport ONSSubscription, { ONSCachedSubscription, ONSObjectProperties } from './ONSSubscription';\nimport { synchronized, memoize } from '../core/decorators';\nimport Cache, { NotFound } from '../core/Cache';\n\nconst REQUIRED_LINKS: RelType[] = [ RelType.SUBSCRIPTION_CREATE, RelType.NOTIFICATIONS_LONGPOLL, RelType.ONS_CHANGELOG ];\nconst ONS_AUTH_HEADER = 'X-User-Token';\n\n// Set the x-poll-timeout request header value (in seconds) for ONS long poll requests\n// This controls the frequency of the ONS server long poll responses.\nexport const ONS_POLLTIMEOUT_SECONDS = 160;\n\nexport const FIRST_LONG_POLL_STARTED = 'firstLongPollStarted';\nexport const FIRST_LONG_POLL_COMPLETED = 'firstLongPollCompleted';\n\nconst validateRootDocument = (json: any) => json._links && REQUIRED_LINKS.every(key => json._links[key]);\ntype SubscriptionConfig = {\n    maxSubscriptionPerLongPoll?: number,\n    maxAssetsPerRequest?: number\n};\n\nexport const cacheKey = 'ONS_SUBSCRIPTIONS';\n\n/**\n * Interface to register ONS subscription and listen for change events.\n * Design notes:\n * Polling will only happen when the following three conditions are ALL met:\n *  1. start() has been called (and stop() has not been called).\n *  2. watch() has been called with a non-empty set of asset ids.\n *  3. The document is visible (document.visibilityState === 'visible').\n */\nexport default class ONSInterface extends EventEmitter implements ISAMObject {\n\n    private _abortController?: AbortController;\n    private _pollURL?: string;\n    private _stopTimeout?: ReturnType<typeof setTimeout>;\n\n    // This flag is indicating if the top level start()/stop() has been called.\n    private _isStarted = false;\n\n    private _subscriptions: ONSSubscription[] = [];\n    private _maxAssetsPerSubscription: number = 5;\n    private _assetIds: Set<string> = new Set();\n    private _cache: Cache;\n    private _cachedSubscriptionsUsed: boolean = false;\n\n    constructor(\n        readonly _core: ISAMCorePrivate,\n        // @TODO SAM-2845 This may be enabled the same in the future but working\n        // with the SharedWorker. For now we want to return undefined.\n        private _cacheEnabled: boolean = _core._environment.getValue('ENABLE_ONS_CACHE')\n    ) {\n        super();\n        this._cache = _core._environment.cache;\n    }\n\n    private async _getSubscriptionConfig(): Promise<SubscriptionConfig> {\n        try {\n            const rootDocument = await this._getRootDocument();\n            return rootDocument?.config?.subscriptions ?? {};\n        } catch (e) {\n            this._log(`Error fetching subscription config from ONS root document: ${e}`);\n            return {};\n        }\n    }\n\n    @synchronized\n    private async _updateCachedSubscriptions() {\n        // @TODO SAM-2845 where this is defined for more information.\n        // Prevent data from being written to cache\n        // until it is enabled again in the future.\n        if (!this._cacheEnabled) { return; }\n\n        const newCachedSubscriptions: ONSCachedSubscription[] = [];\n        this._subscriptions.forEach((subscription) => {\n            const { subscriptionId, subscriptionHref, assets, expiresAt } = subscription;\n            // If the ONSSubscription doesn't have an ID or Href\n            // that means it wasn't created on the server and\n            // it doesn't have any information to cache.\n            if (!subscriptionId || !subscriptionHref) {\n                return;\n            }\n\n            const updatedCache: ONSCachedSubscription = {\n                id: subscriptionId,\n                href: subscriptionHref,\n                assets: Object.fromEntries(assets),\n                expiresAt: expiresAt || Date.now() + this._core._environment.getValue('ONS_SUBSCRIPTION_TIME_TO_LIVE')\n            };\n\n            newCachedSubscriptions.push(updatedCache);\n        });\n\n        await this._cache.setItem(\n            cacheKey,\n            JSON.stringify({ subscriptions: newCachedSubscriptions }),\n\n            // This ensures that the cached subscription will expire the same time\n            // that the subscription expires on the server.\n            this._core._environment.getValue('ONS_SUBSCRIPTION_TIME_TO_LIVE')\n        );\n    }\n\n    private async _getAndParseCachedSubscriptions(): Promise<ONSCachedSubscription[]> {\n        // @TODO SAM-2845 Prevent data from being retrieved from cache\n        // until it is enabled again in the future.\n        if (!this._cacheEnabled) {return [];}\n\n        const existingCreatedSubscriptions = await this._cache.getItem(cacheKey);\n        if (existingCreatedSubscriptions !== NotFound) {\n            try {\n                return JSON.parse(existingCreatedSubscriptions).subscriptions;\n            } catch (e) {\n                this._log('error parsing cached subscriptions');\n            }\n        }\n        return [];\n    }\n\n    private async _ensureSubscriptions() {\n        const subscriptionConfig = await this._getSubscriptionConfig();\n        const maxSubscriptions = subscriptionConfig.maxSubscriptionPerLongPoll || this._core._environment.getValue('ONS_DEFAULT_MAX_SUBSCRIPTIONS');\n        this._maxAssetsPerSubscription = subscriptionConfig.maxAssetsPerRequest || this._core._environment.getValue('ONS_DEFAULT_MAX_ASSETS_PER_SUBSCRIPTION');\n\n        if (maxSubscriptions > this._subscriptions.length) {\n            // Just because we are creating an ONSSubscription does not mean\n            // we are creating a subscription on the service. We actually\n            // create the max number of local ONSSubscription allowed by ONS but only\n            // create the subscription on the service if there are assets on that subscription.\n\n            const parsedCachedSubscriptions = await this._getAndParseCachedSubscriptions();\n            this._cachedSubscriptionsUsed = parsedCachedSubscriptions.length > 0;\n\n            // Add new subscriptions\n            for (let i = this._subscriptions.length; i < maxSubscriptions; ++i) {\n                // If we have a corresponding cached subscription\n                // pull the information from cache and construct\n                // the ONSSubscription with data from the cache.\n                // If the cached subscription information is out of date,\n                // it will be handled inside the ONSSubscription.\n                const sub: ONSSubscription = new ONSSubscription(\n                    this,\n                    parsedCachedSubscriptions[i]\n                );\n\n                this._subscriptions.push(sub);\n                sub.on('change', this._onSubscriptionChange);\n            }\n        } else if (maxSubscriptions < this._subscriptions.length) {\n            // Remove subscriptions over the limit\n            for (let i = maxSubscriptions; i < this._subscriptions.length; ++i) {\n                const sub = this._subscriptions[i];\n                sub.assets = new Map();\n                sub.off('change', this._onSubscriptionChange);\n            }\n            this._subscriptions.length = maxSubscriptions; // Removes the overflow from the array\n        }\n    }\n\n    private _onSubscriptionChange = ({ fromCache = false } = {}) => {\n        // IF change are notified let's make sure to update the cache as well.\n        if (!fromCache) {\n            this._cachedSubscriptionsUsed = false;\n        }\n        this._updateCachedSubscriptions();\n        this._startLongPoll();\n    }\n\n    private get _activeSubscriptionIds(): string[] {\n        return Array.from(this._subscriptions)\n            .filter(sub => sub.subscriptionId && sub.watchedAssets.size > 0) // Note: watchedAssets not assets\n            .map(sub => `${sub.subscriptionId}`)\n            .sort();\n    }\n\n    @synchronized async _startLongPoll() {\n        const subscriptionIds = this._activeSubscriptionIds;\n\n        // we don't want to create a bogus long pollURL if\n        // there is no subscriptions...\n        const newPollURL = subscriptionIds.length === 0 ? undefined : await this._getLink(RelType.NOTIFICATIONS_LONGPOLL, {\n            includeJournal: 'false', subscriptionId: subscriptionIds });\n\n        const isUrlChanged: boolean = this._pollURL !== newPollURL;\n        this._pollURL = newPollURL;\n        if (this.isActive && isUrlChanged) {\n            this._stop();\n            this._start();\n        }\n    }\n\n    private _log(message: string) {\n        this._core._environment.debug(`ONS: ${message}`);\n    }\n\n    get isActive() {\n        return Boolean(this._abortController);\n    }\n\n    get assetIds(): Set<string> {\n        return new Set<string>(this._assetIds); // lets return copy it's safer\n    }\n\n    get watchedAssetIds(): Set<string> {\n        const assetIds: Set<string> = new Set();\n        this._subscriptions.forEach((sub: ONSSubscription)  => {\n            sub.watchedAssets.forEach((properties: ONSObjectProperties, assetId: string) => assetIds.add(assetId));\n        });\n        return assetIds;\n    }\n\n    get _document(): Document | undefined {\n        if (typeof window !== 'undefined') {\n            return window.document;\n        }\n        return undefined;\n    }\n\n    /**\n     * Start ONS session\n     */\n    start() {\n        if (this._isStarted) {\n            return;\n        }\n        this._document?.addEventListener('visibilitychange', this._onVisibilityChange);\n        this._isStarted = true;\n        if (!this._document || this._document.visibilityState === 'visible') {\n            this._start();\n        }\n    }\n\n    /**\n     * Stop ONS session\n     */\n    stop() {\n        if (!this._isStarted) {\n            return;\n        }\n        this._document?.removeEventListener('visibilitychange', this._onVisibilityChange);\n        this._isStarted = false;\n        this._subscriptions.forEach((sub) => sub.abort());\n        this._stop();\n    }\n\n    _onVisibilityChange = () => {\n        if (this._stopTimeout) {\n            clearTimeout(this._stopTimeout);\n            this._stopTimeout = undefined;\n        }\n        if (this._document?.visibilityState === 'visible') {\n            this._start(); // Won't do anything if we didn't stop yet, since still active\n        } else {\n            // we're de-bouncing to avoid repeatedly stopping/restarting if the user switches between\n            // Web browser tabs frequently.\n            this._stopTimeout = setTimeout(() => this._stop(), this._core._environment.getValue('ONS_DOCUMENT_VISIBILITY_TIMEOUT')); // 10s\n        }\n    }\n\n    _stop() {\n        if (!this.isActive) {\n            return;\n        }\n        if (this._stopTimeout) {\n            clearTimeout(this._stopTimeout);\n            this._stopTimeout = undefined;\n        }\n\n        this._log(`Stopping...`);\n        const abortController = this._abortController;\n        delete this._abortController;\n        this._abortController = undefined;\n        abortController?.abort();\n    }\n\n    _start() {\n        if (this.isActive) {\n            this._log(`Already starting skipping...`);\n            return;\n        }\n\n        this._log(`Starting...`);\n        this._abortController = new AbortController();\n        this._poll();\n    }\n\n    private _truncateAssetIdsByMaxSizeIfNeeded(assetIds: Set<string>) {\n        const maxTotalAssets = this._maxAssetsPerSubscription * this._subscriptions.length;\n        if (assetIds.size > maxTotalAssets) {\n            this._log(`Number of assets ${assetIds.size} exceeds the maximum allowed by ONS. Limiting to ${maxTotalAssets}`);\n            // TODO:\n            //this._analytics.reportError('ONSSubscriptionError', `Requested assets exceed number allowed. Count: ${assetIds.length}, Max: ${maxTotalAssets}`);\n            assetIds = new Set<string>(Array.from(assetIds).slice(0, maxTotalAssets));\n        }\n        return assetIds;\n    }\n\n    /**\n     * Watches an array of assetIds.\n     *\n     * @param {Array} assetIds\n     */\n    async watch(assetIds: Set<string>) {\n        // This will create and store instances of ONSSubscription\n        // the number created will be the number of MAX_SUBSCRIPTIONS\n        // set by SAM.js or service (we don't actually create subscriptions\n        // on the server though, unless they have any assets to monitor)\n        await this._ensureSubscriptions();\n\n        // Firstly we want to look for all the asset ids for which we don't also\n        // have their parent loaded. If we're also monitoring the parent, we can just\n        // do a shallow directory monitor, which covers the children as well.\n        const assetIdsToMonitor = new Set<string>();\n        assetIds.forEach(id => {\n            const asset = this._core.hostAssetContext._assetPool.getLocalItemById(id);\n            const ancestorIds = asset?.ancestorIDs ?? [];\n            const parentId = ancestorIds[ancestorIds.length - 1];\n            // Note: we monitor all folder assets regardless of if we're monitoring the parent,\n            // otherwise we'd have to individually monitor children of nested folders. We\n            // could maybe optimize this if we haven't loaded any children of the directory,\n            // but this seems sufficient\n            if (!assetIds.has(parentId) || asset?.isFolder) {\n                assetIdsToMonitor.add(id);\n            }\n        });\n        this._assetIds = this._truncateAssetIdsByMaxSizeIfNeeded(assetIdsToMonitor);\n\n        // map from subscription id to current assets being monitored,\n        // (in the form of a map from the asset id to its properties)\n        // minus ones we no longer need to monitor:\n        // Creates an array and each entry is a\n        // Map() that represents the assets in the subscription.\n        const existingAssetIds = new Set<string>();\n        const subscriptionToAssetIds = Array.from(\n            this._subscriptions.map(\n                sub => {\n                    const ids = new Map();\n                    sub.assets.forEach((properties, id) => {\n                        if (this._assetIds.has(id) && existingAssetIds.add(id)) {\n                            ids.set(id, properties);\n                        }\n                    });\n                    return ids;\n                }\n            )\n        );\n\n        // We assign assets to subscriptions such that we fill up the first subscription first\n        // before creating new ones. Note that when this was first implemented in SAM.js, we\n        // would try to spread assets across as many subscriptions as possible, because ONS didn't\n        // tell us which asset in a subscription changed - but now that we have the changelog API,\n        // it's better to concentrate assets in as few subscriptions as possible.\n        let nextIndex = 0;\n        this._assetIds.forEach(\n            id => {\n                // Skip any assets that are already part of a subscription\n                if (existingAssetIds.has(id)) {\n                    return;\n                }\n                // Find the next subscription with space in it\n                while (subscriptionToAssetIds[nextIndex].size >= this._maxAssetsPerSubscription) {\n                    nextIndex++;\n                }\n                // Determine if the asset is a directory or not - since we want to do a self monitor of directories:\n                const asset = this._core.hostAssetContext._assetPool.getLocalItemById(id);\n                subscriptionToAssetIds[nextIndex].set(id, asset?.isFolder ? { directoryLevel: 'shallow' } : {});\n            }\n        );\n\n        // Finally, update the actual subscriptions\n        this._subscriptions.forEach((sub, index) => sub.assets = subscriptionToAssetIds[index]);\n    }\n\n    // This is used to notify the client that the initial long poll has been started along with the information\n    // whether cached subscriptions were used or not. It can be used by the clients to avoid any refresh of its cached\n    // data if cached subscriptions were used.\n    @memoize\n    _notifyFirstLongPollStarted(cachedSubscriptionsUsed: Boolean = false) {\n        this.emit(FIRST_LONG_POLL_STARTED, { cachedSubscriptionsUsed });\n    }\n\n    // This is used to notify the client that the initial long poll has been completed along with the information\n    // whether they were expired or not. It can be used by the clients to avoid any refresh of its cached\n    // data if cached subscriptions were used.\n    @memoize\n    _notifyFirstLongPollCompleted(expired: Boolean) {\n        this.emit(FIRST_LONG_POLL_COMPLETED, { expired });\n    }\n\n    // ONS Subscriptions are more efficient if they are kept alive and updated so we check whether the subscription\n    // is within 10% of its TTL and refresh as necessary\n    _validateAndUpdateSubscriptionExpiration() {\n        const now = Date.now();\n\n        // We calculate the remaining time to live being within a 10% zone of the current time based\n        // on environment set TTL with a minimum time remaining being 5 mins.\n        const ttl = Math.max(\n            this._core._environment.getValue('ONS_SUBSCRIPTION_TIME_TO_LIVE') * 0.1,\n            this._core._environment.getValue('ONS_SUBSCRIPTION_RENEW_TIME')\n        );\n        this._subscriptions\n            .filter(sub => sub.watchedAssets.size && (sub.expiresAt - now) < ttl)\n            .forEach(sub => sub.refreshSubscriptionExpiryDate());\n    }\n\n    /**\n     * _poll sets up the longpoll request with retries if needed.\n     *\n     * @param attempt This tracks the number of attempts already made so we can back off in needed.\n     * @returns void;\n     */\n    async _poll(attempt: number = 0) {\n        const retry = (error: any, interval: number = 0) => {\n            interval = Math.max(this._core._environment.getRetryInterval(attempt), interval);\n\n            const abortController = this._abortController;\n            if (!abortController) {\n                return;\n            }\n\n            this._log(`Retrying long poll in ${interval}ms`);\n            const timeout = setTimeout(() => this._poll(attempt + 1), interval);\n            abortController.signal.addEventListener('abort', () => {\n                if (abortController !== this._abortController) {\n                    clearTimeout(timeout);\n                }\n            });\n        };\n\n        const abortController = this._abortController;\n        if (!abortController) {\n            this._log(`No abort controller...`);\n            return;\n        }\n        try {\n            // this.pollURL can be undefined at start up when watch didn't have a time to build it yet,\n            // also if we deleted all subscriptions calling watch with empty set.\n            //\n            // _pollURL is set by calling watch() which calls _ensureSubscriptions() which then sets\n            // an event handler for a \"change\" event on each subscription created (ONSSubscription). The subscription\n            // will emit a \"change\" event for various cases but mainly for when assetIds are updated on\n            // the subscription. Once a change is emitted, the\n            // the assigned _onSubscriptionChangeFun() is called and then calls _onSubScriptionChange().\n            // then finally sets the URL. @TODO maybe we can streamline this process a bit more.\n            if (this._pollURL === undefined) {\n                this._log(`Poll URL undefined...`);\n                // just returning here because when pollUrl get populated it will call _stop(), _start()\n                return;\n            }\n            // Go ahead and notify clients about first long poll.\n            this._notifyFirstLongPollStarted(this._cachedSubscriptionsUsed);\n\n            const href = this._pollURL as string;\n            // Give the service a 20s buffer to respond on their end before terminating on our end\n            const requestTimeoutMs = (ONS_POLLTIMEOUT_SECONDS + 20) * 1000;\n            const response = await this._core._environment.fetch(href, {\n                signal: abortController.signal,\n                authHeader: ONS_AUTH_HEADER,\n                headers: {\n                    'x-poll-timeout': `${ ONS_POLLTIMEOUT_SECONDS }`\n                },\n                requestTimeoutMs\n            });\n\n            if ([ 200, 201, 204 ].includes(response.status)) {\n                const json = await response.json();\n\n                this._notifyFirstLongPollCompleted(false);\n                this._log(`Successful long poll for ${href}`);\n\n                // Sometimes (frequently) we get a 20x response, and nothing has changed.\n                if (json && json.subscriptions && json.subscriptions.length > 0) {\n                    this._log(`Subscriptions changed: ${json.subscriptions.join(', ')}`);\n\n                    // Trigger the changed subscriptions to fetch changes via the changelog API:\n                    // Note that ONS does not yet support a single changelog for multiple subscriptions, so we have\n                    // to call the changelog separately for each subscription right now.\n                    json.subscriptions.forEach((id: string) => {\n                        const subscription = this._subscriptions.find(sub => sub.subscriptionId === id);\n                        subscription?.fetchAndNotifyChanges();\n                    });\n\n                    // After a successful long poll we should do a quick check on the expire times on the\n                    // active subscriptions.\n                    this._validateAndUpdateSubscriptionExpiration();\n\n                    // We don't really need this as part of the public API, but it makes the tests much easier,\n                    // so we can abort the polling.\n                    this.emit('notified');\n                }\n\n                // If ONS is worried that our subscription is invalid, verify it is still there. (ONS will do this\n                // every few hours no matter what.)\n                if (json && json.checkSubscriptions && json.checkSubscriptions.length > 0) {\n                    this._log(`Checking subscriptions for subscriptions to check ${json.checkSubscriptions.length}`);\n                    json.checkSubscriptions.forEach((id: string) => {\n                        const subscription = this._subscriptions.find(sub => sub.subscriptionId === id);\n                        if (subscription) {\n                            subscription.validate();\n                        }\n                    });\n                }\n\n                this._pollURL = json && json._links && json._links.next && json._links.next.href;\n                this._poll();\n            } else if (response.status === 404) {\n                this._notifyFirstLongPollCompleted(true);\n                this._log(`404 Response long poll for ${href}, subscription missing or expired`);\n                // If the response is a 404, we've somehow lost the subscriptions. Make a new one.\n                this._subscriptions.forEach((subscription: ONSSubscription) => {\n                    if (subscription.subscriptionId) {\n                        subscription.validate();\n                    }\n                });\n                // We need to retry here because if subscription will be validated on the server\n                // then 'change' event will not be emitted and we will stop polling here.\n                retry(undefined, this._core._environment.getValue('MAX_RETRY_INTERVAL'));\n            } else {\n                this._log(`Unexpected response, trying again ${href}`);\n                // Otherwise, follow the retry logic defined by the ONS team.\n                retry(undefined, getRetryAfterHeader(response.headers) * 1000);\n            }\n        } catch (error) {\n            // If we aborted this request, we don't want to retry.\n            // But only if we aborted it locally. If it was aborted elsewhere, we want to retry.\n            // (AbortController is used for timeouts in Proxy#fetch)\n            if (abortController.signal.aborted && abortController !== this._abortController) {\n                this.emit('aborted');\n                this._notifyFirstLongPollCompleted(true);\n                return;\n            }\n            this._log(`Error trying to create long poll request`);\n            retry(error);\n        }\n    }\n\n    @cache(validateRootDocument)\n    private async _getAndCacheDocument(@key href: string) {\n        const response = await this._core._environment.fetch(href, {\n            headers: {\n                Accept: 'application/vnd.syncservice.v2.hal+json'\n            },\n            authHeader: ONS_AUTH_HEADER\n        });\n\n        return response.json();\n    }\n\n    _getRootDocument() {\n        return this._getAndCacheDocument(`https://${this._core._environment.endpoints.SYNC_SERVICE_HOST}/api/v1`);\n    }\n\n    async _getLink(key: RelType, options: {[s: string]: string | string[]}  = {}) {\n        const rootDocument = await this._getRootDocument();\n        return getURLFromLinks(rootDocument._links, key, options);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport SAMError from '../core/SAMError';\nimport type { RelType, IServiceLink } from './LinkUtils';\nimport { IAssetsPageSpec } from './AssetModel';\nimport { IRemoteAssignmentAppMetadata } from './AssignmentModel';\n\n/**\n * The Operation Document describes requests that manipulate Assets within a Repository.\n */\nexport type IOperationQuery = IOperation | IOperation[];\n\nexport type IOperation =\n    | ICopyOperation\n    | IPublishOperation\n    | IRemixOperation\n    | ICopyResourcesOperation\n    | IMoveOperation\n    | IDeleteOperation\n    | IDiscardOperation\n    | IRestoreOperation\n    | IPackageOperation;\n\nexport type AssetRef =\n    | IAssetRefRepoPath\n    | IAssetRefRepoAssetId\n    | IAssetRefPath\n    | IAssetRefRepoId\n    | IAssetRefHref;\n\nexport type AssetRefWithoutVersion =\n    | Omit<IAssetRefRepoPath, 'repo:version'>\n    | Omit<IAssetRefRepoAssetId, 'repo:version'>\n    | Omit<IAssetRefPath, 'repo:version'>\n    | Omit<IAssetRefRepoId, 'repo:version'>\n    | Omit<IAssetRefHref, 'repo:version'>;\n\nexport interface IAssetRefRepoPath {\n    'repo:path': string;\n    'repo:baseAssetId'?: string;\n    'repo:repositoryId': string;\n    'if-match'?: string;\n    'if-none-match'?: string;\n    'repo:version'?: string;\n}\n\nexport interface IAssetRefRepoAssetId {\n    'repo:assetId': string;\n    'repo:repositoryId'?: string;\n    'if-match'?: string;\n    'if-none-match'?: string;\n    'repo:version'?: string;\n}\n\nexport interface IAssetRefPath {\n    path: string;\n    'if-match'?: string;\n    'if-none-match'?: string;\n    'repo:version'?: string;\n}\n\nexport interface IAssetRefRepoId {\n    'repo:id': string;\n    'if-match'?: string;\n    'if-none-match'?: string;\n    'repo:version'?: string;\n}\n\nexport interface IAssetRefHref {\n    href: string;\n    'if-match'?: string;\n    'if-none-match'?: string;\n    'repo:version'?: string;\n}\n\n/**\n * If the resource is a component in a composite, component_id identifies the exact component referenced\n */\nexport type ComponentId = string;\n\n/**\n * If the resource is a component in a composite, the revision provides identifies the exact revision of the component\n */\nexport type Revision = string;\n\n/**\n * If an individual resource is being identified, this property represents that resource's entity tag\n */\nexport type EntityTag = string;\n\n\nexport interface IResourceDesignator {\n    reltype: string;\n    component_id?: ComponentId;\n    revision?: Revision;\n    etag?: EntityTag;\n}\n\nexport type ResourceSourceTarget = {\n    source: IResourceDesignator;\n    target: IResourceDesignator;\n};\n\nexport type ResourceCopy = IResourceDesignator | ResourceSourceTarget;\n\nexport type OneOrMoreAssetRef = AssetRef | AssetRef[];\n\n/**\n * The physical or digital manifestation of the resource. Typically, Format should include the media-type of the resource.\n * Format may be used to determine the software, hardware or other equipment needed to display or operate the resource.\n * Recommended best practice is to select a value from a controlled vocabulary (for example, the list of\n * [Internet Media Types](http://www.iana.org/assignments/media-types/) defining computer media formats).\n */\nexport type Format = string;\n\nexport type Assignee = {\n    // ID of the owner e.g. IMS user-id or IMS org-id\n    id: string,\n\n    // the name to show in the UI\n    displayName?: string,\n\n    // The type of owner e.g. org or user\n    type: 'user' | 'org'\n}\n\n// NOTE: R-API uses 'file', 'composite', 'directory'\n//       USS uses 'element' to identify Library Elements\n//       'entity' is not implemented yet\nexport type AssetClass = 'file' | 'composite' | 'directory' | 'entity' | 'element';\nexport type AssetState = 'ACTIVE' | 'DISCARDED' | 'DISCARDED_PARENT';\nexport type DirectoryType = 'system' | 'assigned' | 'content' | 'syncgroup';\nexport type ShellVisibility = 'hiddenSelf' | 'hiddenRecursive' | '';\n\n// We get discard, restore, and rename privileges from the projects service\nexport type PermissionType = 'ack' | 'read' | 'write' | 'delete' | 'discard' | 'restore' | 'rename';\n\nexport const AssetClassChoices: AssetClass[] = [ 'file', 'composite', 'directory', 'entity', 'element' ];\nexport const AssetStateChoices: AssetState[] = [ 'ACTIVE', 'DISCARDED', 'DISCARDED_PARENT' ];\nexport const DirectoryTypeChoices: DirectoryType[] = [ 'system', 'assigned', 'content', 'syncgroup' ];\nexport const ShellVisibilityChoices: ShellVisibility[] = [ 'hiddenSelf', 'hiddenRecursive', '' ];\n\nexport type AclLinks = {\n    [RelType.AC_POLICY]: IServiceLink,\n    [RelType.AC_CHECK]: IServiceLink,\n    [RelType.AC_EFFECTIVE]: IServiceLink,\n}\n\nexport type NavigationLinks = {\n    [RelType.DIRECTORY]: IServiceLink,\n    [RelType.DIRECTORY_BASE]: IServiceLink,\n    [RelType.PATH]: IServiceLink,\n    [RelType.ID]: IServiceLink,\n    [RelType.PAGE]: IServiceLink,\n    [RelType.REPOSITORY]: IServiceLink\n}\n\nexport type AssociatedLinks = {\n    [RelType.PRIMARY]: IServiceLink,\n    [RelType.REPO_METADATA]: IServiceLink,\n    [RelType.APP_METADATA]: IServiceLink,\n    [RelType.EMBEDDED_METADATA]: IServiceLink,\n    [RelType.PERUSER_METADATA]: IServiceLink,\n    [RelType.AC_POLICY]: IServiceLink,\n    [RelType.VERSION]: IServiceLink,\n    [RelType.RENDITION]: IServiceLink,\n    [RelType.BLOCK_INITIALIZE]: IServiceLink & {\n        'repo:maxsingletransfersize': number;\n        'repo:minsingletransfersize': number;\n    }\n    // Component Rendition may only come from USS?\n    [RelType.COMPONENT_RENDITION]: IServiceLink,\n    [RelType.MANIFEST]: IServiceLink,\n    [RelType.QUOTA]: IServiceLink,\n    [RelType.COMPONENT]: IServiceLink,\n}\n\nexport type ActionLinks = {\n    [RelType.CREATE]: IServiceLink,\n    [RelType.RESTORE]: IServiceLink,\n    [RelType.DISCARD]: IServiceLink,\n    [RelType.DOWNLOAD]: IServiceLink,\n}\n\ninterface IRootChildLinks {\n    [RelType.PRIMARY]: IServiceLink,\n    [RelType.PAGE]?: IServiceLink,\n}\n\nexport type AssetLinks = AclLinks & NavigationLinks & AssociatedLinks & ActionLinks;\n\nexport interface IEffectivePermissions {\n    '*'?: PermissionType[];\n    [RelType.PRIMARY]?: PermissionType[];\n    [RelType.AC_POLICY]?: PermissionType[];\n    [RelType.DIRECTORY]?: PermissionType[];\n    [RelType.APP_METADATA]?: PermissionType[];\n}\n\nexport type RepositoryMetadata = {\n    'dc:format': Format,\n    'repo:name': string,\n    'repo:path': string,\n\n    // The server date and time the asset was created. This time may precede the date\n    // of the first version if it was created without a Primary Resource.\n    // The Date Time property conforms to the RFC 3339 standard.\n    'repo:createDate': string,\n\n    // The server date and time the Primary Resource of this Asset was last modified.\n    // The behavior may differ by Asset Class, as described in the specification.\n    // The Date Time property conforms to the RFC 3339 standard.\n    'repo:modifyDate': string,\n\n    // The Repository ID of the Repository storing this Asset.\n    'repo:repositoryId': string,\n\n    // A globally unique identifier for this Asset.\n    'repo:assetId': string,\n\n    // The class of this Asset.\n    'repo:assetClass': AssetClass,\n\n    // @deprecated -- use repo:assetId\n    // 'repo:id': string,\n\n    // Size of the Primary Resource in bytes. Not applicable for directories\n    'repo:size': number,\n\n    // The HTTP entity tag of the Asset's Primary Resource.\n    'repo:etag': EntityTag,\n\n    // Identifier of the head version of the Asset. Applicable only to assets that support versioning and have a primary resource.\n    'repo:version': string,\n\n    // IMS User Id of the user who created this Asset.\n    'repo:createdBy': string,\n\n    // 'IMS User Id of the user who caused the last Asset modification, as defined in repo:modifyDate'\n    'repo:modifiedBy': string,\n\n    // 'Indicates whether an Asset is active, or if it has been directly or indirectly discarded.'\n    'repo:state': AssetState,\n\n    // The time the Asset was discarded, either directly or by inheritance. The Date Time property conforms to the RFC 3339 standard.\n    'repo:discardDate': string,\n\n    // IMS User Id of the user who discarded the Asset directly or by inheritance.\n    'repo:discardedBy': string,\n\n    // The date and time an Asset is scheduled for deletion, either directly or by inheritance.\n    'repo:scheduledDeletionDate': string,\n\n    // A policy set on Directories, to decide after how many hours the direct children shall be scheduled for deletion.\n    'repo:defaultScheduledDeletionDuration': string,\n\n    // IMS Client ID of the client that created this Asset.\n    'repo:createdByClientId': string,\n\n    // IMS Client ID of the client that last modified the Primary Resource of this Asset.\n    'repo:modifiedByClientId': string,\n\n    // IP address(es) received in x-forwarded-for header with request that created this Asset.\n    'repo:createdByIpAddress': string[],\n\n    // IP address(es) received in x-forwarded-for header with request that last modified the Asset.\n    'repo:modifiedByIpAddress': string[],\n\n    // assetId of asset's ancestors, root starts from index 0\n    'repo:ancestors': string[],\n\n    // An opaque, unique identifier of the device associated with the most recent update to this Asset,\n    // if any. This property is removed when a request creates a new version of the Asset and does not\n    // specify a new value for this property.\n    'storage:deviceId': string,\n\n    // A timestamp capturing the time at which this Asset was created on the client, and which may\n    // therefore precede the time at which it was created in the Repository. (It can also be later,\n    // due to clock skew.).\n    // Can be set only at the time of Asset creation and, if not set, defaults to repo:createDate.\n    'storage:deviceCreateDate': string,\n\n    // A timestamp capturing the time at which this Asset was last modified on the client,\n    // and which may therefore precede the time at which the corresponding modification was\n    // uploaded to the Repository. (It can also be later, due to clock skew.).\n    // If not specified with any request that creates a new version of the Asset, it will\n    // be updated to repo:modifyDate.\n    'storage:deviceModifyDate': string,\n\n    'storage:assignee': Assignee,\n\n    'storage:directoryType': DirectoryType,\n\n    'storage:region': string,\n\n    // For image and video Assets, width in pixels. Otherwise, not present.\n    'tiff:imageWidth': number,\n\n    // For image and video Assets, height in pixels, Otherwise, not present.\n    'tiff:imageLength': number,\n\n    // For document Assets, number of pages or artboards. Otherwise, not present.\n    'xmpTPg:NPages': number,\n\n    _links: AssetLinks,\n\n    // If requested, listings can contain application metadata\n    _embedded?: RepoResponseEmbeddedData\n};\n\nexport interface IRepositoryData {\n    _embedded: {\n        [RelType.PRIMARY]: {\n            'dc:title'?: {\n                '@type': string,\n                'rdf:_1'?: {\n                    '@language': string,\n                    '@value': string\n                }\n            },\n            'repo:repositoryId': string\n            'repo:owner': {\n                'id': string,\n                'type': 'user' | 'org',\n            }\n        }\n    }\n}\n\nexport interface IRepositoriesDataResponse {\n    children: IRepositoryData[];\n}\n\n\nexport type DirectoryListingRepoMetadata = {\n    children: RepositoryMetadata[];\n    _page: IAssetsPageSpec;\n    'repo:ancestors'?: string[];\n}\n\nexport type IOperationError = {\n    status: number | string;\n    title: string;\n    type: string;\n}\n\nexport type IOperationResultProps = {\n    error?: IOperationError;\n    asset?: RepositoryMetadata;\n}\nexport type IOperationResult = IOperation & IOperationResultProps;\n\n// In some cases the operation API returns a single error entry.\nexport type IOperationSingleError = {\n    code: string;\n    message: string;\n}\n\nexport type IOperationResults =  IOperationSingleError | IOperationResult | IOperationResult[];\n\n// The repository interface updates the return values to use SAM errors instead.\nexport type ISAMOperationResultProps = {\n    error?: SAMError;\n    asset?: RepositoryMetadata;\n}\nexport type ISAMOperationResult = IOperation & ISAMOperationResultProps;\nexport type ISAMOperationResults = ISAMOperationResult[];\n\n// The return obj inteface when one operation fails for any context\nexport interface IFailedOperation<LocalType> {\n    model: LocalType;\n    error: SAMError\n}\n\n// result for batch operations\n// failedResults contains failed list of items\n// newModels contains list of new assets which are added,\n// newModels will be populated with items for ops like copy/duplicate and will be empty in case of ops like move\nexport interface IBatchOperationResult<LocalType> {\n    failedResults: IFailedOperation<LocalType>[];\n    newModels: LocalType[];\n}\n\nexport interface ICopyOperation {\n    op: 'copy';\n    id?: string;\n    source: AssetRef;\n    target: AssetRefWithoutVersion;\n    intermediates?: boolean;\n    includeResources?: IResourceDesignator[];\n    excludeResources?: IResourceDesignator[];\n}\n\nexport interface IPublishOperation {\n    op: 'publish';\n    id?: string;\n    source: AssetRef;\n    target: AssetRefWithoutVersion;\n    intermediates?: boolean;\n    includeResources?: IResourceDesignator[];\n    excludeResources?: IResourceDesignator[];\n    rights?: {\n        [k: string]: unknown;\n    };\n    marked?: boolean;\n    usage_terms?: {\n        [k: string]: unknown;\n    };\n    web_statement?: string;\n    manage_ui?: string;\n    manage_to?: string;\n    license?: string;\n    attribution_url?: string;\n    attribution_name?: string;\n}\n\nexport interface IRemixOperation {\n    op: 'remix';\n    id?: string;\n    source: AssetRef;\n    target: AssetRefWithoutVersion;\n    intermediates?: boolean;\n    includeResources?: IResourceDesignator[];\n    excludeResources?: IResourceDesignator[];\n    creator_tool?: string;\n}\n\nexport interface ICopyResourcesOperation {\n    op: 'copy_resources';\n    id?: string;\n    source: AssetRef;\n    target: AssetRefWithoutVersion;\n    intermediates?: boolean;\n    resources: ResourceCopy[];\n}\n\nexport interface IMoveOperation {\n    op: 'move';\n    id?: string;\n    source: AssetRefWithoutVersion;\n    target: AssetRefWithoutVersion;\n    intermediates?: boolean;\n}\n\nexport interface IDeleteOperation {\n    op: 'delete';\n    id?: string;\n    target: AssetRefWithoutVersion;\n    recursive?: boolean;\n}\n\nexport interface IDiscardOperation {\n    op: 'discard';\n    id?: string;\n    target: AssetRefWithoutVersion;\n}\n\nexport interface IRestoreOperation {\n    op: 'restore';\n    id?: string;\n    target: AssetRefWithoutVersion;\n    name?: string;\n}\n\nexport interface IPackageOperation {\n    op: 'package';\n    id?: string;\n    source: OneOrMoreAssetRef;\n    target: AssetRefWithoutVersion;\n    max_package_size?: number;\n    'dc:format'?: Format;\n}\n\nexport interface IRootChild {\n    'repo:name': string;\n    'repo:path': string;\n    'dc:format': string;\n    _links: IRootChildLinks;\n}\n\n// Spec: https://wiki.corp.adobe.com/display/assetscollab/Proposal%3A+CCAC+Inherited+Metadata#Proposal:CCACInheritedMetadata-TeamFoldersandSpaces\nexport type IAppMetadata =  Partial<IRemoteAssignmentAppMetadata> & {\n    'shell:visibility'?: ShellVisibility;\n    'convertedTo'?: string;\n    'cc:inherited'?: { // contains any inheritable data from ancestors\n        'cc:team'?: {\n            'repo:assetId'?: string;\n        }\n        'cc:assignment'?: {\n            'repo:assetId'?: string;\n        }\n        'cc:space'?: {\n            'repo:assetId'?: string;\n        };\n    };\n    'cc:inheritable'?: {\n        'cc:team'?: {\n            'repo:assetId'?: string;\n        },\n        'cc:assignment'?: {\n            'repo:assetId'?: string;\n        }\n    };\n    'project:rendition'?: {\n        'gradientId': string;\n    };\n    'cc:createdFromUpload'?: boolean;\n}\n\nexport type RepoResponseEmbeddedData = {\n    [RelType.APP_METADATA]?: IAppMetadata;\n    [RelType.AC_EFFECTIVE]?: IEffectivePermissions;\n}\n\nexport type EmbedSpecifier = {\n    resource: {reltype: string}\n    selectors?: string[];\n}\n\nexport type RepositoryLinks = {\n    [RelType.RESOLVE_ID]: IServiceLink;\n    [RelType.RESOLVE_PATH]: IServiceLink;\n    [RelType.OPS]: IServiceLink;\n}\n\nexport interface IRepositoryIndex {\n    _links: RepositoryLinks;\n    'repo:regions': string[],\n    children: { _embedded: { [RelType.REPO_METADATA]: RepositoryMetadata} }[];\n}\n\n// Currently, the Owner and Assignee have the same shape, but that could change.\n// Also, they're logically distinct entities.\nexport type Owner = Assignee;\n\nexport enum MoveWarning {\n    None,\n    CollaboratorMaybeEditing\n}\n\nexport enum CannotMoveReason {\n    DifferentOwner = 1,\n    PermissionDeniedDestination = 2,\n    PermissionDeniedSource = 3,\n    NotAFolder = 4,\n}\n\nexport type MoveCapability =\n    { canMove: true; warning: MoveWarning; } |\n    { canMove: false; reason: CannotMoveReason; };\n\n// Note: this just describes the schema we've encountered in SAM.js,\n// and does not include all possible options.\n// https://git.corp.adobe.com/pages/caf/api-spec/schemas/accesscontrol/accesscontrolpolicy.html\nexport interface IACPolicyResponse {\n    'repo:acl': {\n        'repo:principal': 'all' | 'authenticated' | 'unauthenticated' |\n            // XDM principals, such as IMS users\n            {\n                'xdm:provider': { '@id': string };\n                '@id': string;\n                '@type': string;\n            };\n        'repo:modifier': 'grant' | 'deny';\n        'repo:privileges': ('read' | 'write' | 'delete')[];\n        'repo:relations': (\n            'describedby' |\n            RelType.AC_POLICY |\n            RelType.ANNOTATIONS |\n            RelType.APP_METADATA |\n            RelType.EMBEDDED_METADATA |\n            RelType.REPO_METADATA |\n            RelType.PRIMARY |\n            RelType.RENDITION\n        )[];\n        'repo:inheriance': 'self' | 'deep' | 'deep_override';\n    }[];\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport TypedEventEmitter, { IEventMap } from './TypedEventEmitter';\nimport ChangeEvent, { SharedChangeEvent } from './ChangeEvent';\nimport { observable } from './decorators';\nimport  { ISAMObject, ISAMCorePrivate } from '../indexPrivate';\n\nexport type ItemId = string;\n\nexport interface ItemBaseEvents extends IEventMap {\n    change: ChangeEvent;\n}\n\nexport type TaskName =\n    | 'archive'\n    | 'bookmark'\n    | 'copy'\n    | 'delete'\n    | 'move'\n    | 'rename'\n    | 'restore'\n    | 'update';\n\n/**\n * Each ItemBase can be assigned a single task at a time.\n * Different objects have different instances of this object.\n */\nexport interface ExclusiveTask {\n    readonly name: TaskName;\n    readonly items: ItemBase<ItemBaseEvents>[];\n}\n\nexport class ItemExclusiveTaskChain {\n    next?: ItemExclusiveTaskChain;\n\n    constructor(\n        readonly task: ExclusiveTask,\n        readonly onGotOwnership: () => void) {\n    }\n\n    // Add the task at the end of the linked list.\n    registerNewTask(newTask: ItemExclusiveTaskChain) {\n        let itemTask: ItemExclusiveTaskChain = this;\n        while (itemTask) {\n            const next: ItemExclusiveTaskChain | undefined = itemTask.next;\n            if (!next) {\n                // We've found the first empty slot.\n                itemTask.next = newTask;\n                return;\n            }\n            // Keep going till the end.\n            itemTask = next;\n        }\n    }\n}\n\n/**\n * Base object used for all assets, teams, spaces etc.\n */\nexport default abstract class ItemBase<Events extends ItemBaseEvents = ItemBaseEvents> extends TypedEventEmitter<Events> implements ISAMObject {\n    protected _exclusiveTaskChain?: ItemExclusiveTaskChain;\n\n    // Timestamp of the last known mutation that this client executed.\n    // The servers have to replicate this mutation between each other and sometimes the\n    // fetches do not include changes for up to a specific amount of seconds.\n    // The timestamp will be used to compare against the expected update\n    // windows of each request.\n    protected _lastKnownClientMutation?: number;\n\n    constructor(\n        readonly _core: ISAMCorePrivate,\n        readonly id: ItemId) {\n        super();\n    }\n\n    get lastKnownClientMutation(): number | undefined {\n        return this._lastKnownClientMutation;\n    }\n\n    updateLastKnownClientMutation() {\n        this._lastKnownClientMutation = Date.now();\n    }\n\n    /**\n     * Waits for at least `delay` ms since the last known asset mutation.\n     * @param delay\n     */\n    async waitForMutationPropagationIfNeeded(delay: number) {\n        const mutation = this._lastKnownClientMutation;\n        if (mutation) {\n            const waitTime = mutation + delay - Date.now();\n            if (waitTime > 0) {\n                // We still have some time left before the asset change is propagated for sure.\n                await new Promise((resolve) => setTimeout(resolve, waitTime));\n            }\n        }\n    }\n\n    @observable\n    get exclusiveTask(): ExclusiveTask | undefined {\n        return this._exclusiveTaskChain?.task;\n    }\n\n    private _setExclusiveTaskChain(itemTaskChain: ItemExclusiveTaskChain | undefined) {\n        this._exclusiveTaskChain = itemTaskChain;\n        this.dispatch(SharedChangeEvent);\n    }\n\n    /**\n     * @package -- only for use by UpdateSession\n     */\n    _setId(newId: string) {\n        // @ts-ignore -- this is the only place where ID can be changed.\n        this.id = newId;\n    }\n\n    /**\n     * Locks exclusive ownership for a subset of items during execution of the `schedule`.\n     * It is guaranteed that the `schedule` method will receive ownership of the items\n     * before it starts execution and all the way up to the point when the returned promise\n     * gets resolved.\n     *\n     * Multiple tasks can run at the same time as long as they do not share any of their items.\n     * For example, task A working with assets (i1, i2) will be scheduled to run in parallel with\n     * task B with assets (i3, i4).\n     *\n     * If multiple tasks are registered on same items, the tasks will be executed in their\n     * order of scheduling. For example, task C working with assets (i1, i2) will not be allowed\n     * to run at the same time with task D that needs assets (i2, i3). Task D will only schedule\n     * once all the previously scheduled tasks have released ownership of i2 and i3.\n     *\n     * Recursivity is not supported, a task should not lock same items again while it holds ownership.\n     *\n     * A single item can only be part of a single exclusive task at any moment of time.\n     *\n     * @param name Name of the task to schedule. Useful for debugging.\n     * @param items The items to lock during the execution of the task.\n     * @param schedule The function to execute once the task has ownership of the items.\n     * @returns A promise resolved once the task is complete. The value of the returned promise\n     * is propagated from the promise returned by the `schedule` function.\n     */\n    static runExclusiveTask<T>(name: TaskName, items: ItemBase[], schedule: (task: ExclusiveTask) => Promise<T>): Promise<T> {\n        return new Promise<T>((resolve) => {\n            const task: ExclusiveTask = { name, items };\n\n            const runTask = () => resolve(schedule(task).finally(() => {\n                // Make sure all the items pick up their next task\n                // before we give up ownership.\n                for (const item of items) {\n                    // We know the item must have a task. We just finished it.\n                    const next = item._exclusiveTaskChain!.next;\n\n                    // Assign ownership to the next waiting task.\n                    // If tasks are still pending, then there should\n                    // never be a gap of of ownership on the item,\n                    // to avoid letting other tasks inject themselves\n                    //in the middle. The tasks needs to execute in the order\n                    // of scheduling to avoid interlacing issues.\n                    item._setExclusiveTaskChain(next);\n\n                    // Let the next task know it received the ownership now.\n                    // Once the next task acquires all the locks, then it will\n                    // continue with its own execution.\n                    // Note that the callback uses use a timer once the execution\n                    // actually starts to avoid crashing this promise chain.\n                    next?.onGotOwnership();\n                }\n            }));\n\n            // We don't want to schedule the task until all the items are ready to execute the task.\n            let waitCount = 0;\n            const onGotOwnership = () => {\n                // Wait for all other task to finish first.\n                if (--waitCount === 0) {\n                    // Using a separate stack to avoid crashing the previous task\n                    // that might have invoked the `onGotOwnership` method.\n                    setTimeout(runTask, 0);\n                }\n            };\n\n            for (const item of items) {\n                // Each item gets its own task object. We cannot share the objects as\n                // we require strict task ordering for each individual item.\n                const newTask = new ItemExclusiveTaskChain(task, onGotOwnership);\n\n                const itemTask = item._exclusiveTaskChain;\n                if (!itemTask) {\n                    // Assign the new task right away. The task will maintain\n                    // owneship until it gets scheduled.\n                    item._setExclusiveTaskChain(newTask);\n                    continue;\n                }\n\n                // Increment the number of items that we are still waiting ownership for.\n                ++waitCount;\n\n                // Register the task to be executed immediately after the last task in this item's task chain.\n                itemTask.registerNewTask(newTask);\n            }\n\n            if (waitCount === 0) {\n                // We've got owernship of all the required assets already,\n                // we can proceed with running the task.\n                runTask();\n            }\n        });\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ItemBase from './ItemBase';\n\nexport type IOrderDirection =\n    | 'ascending'\n    | 'descending';\n\nexport type IItemOrderHash = string;\n\n/**\n * Structure used to sort the items once loaded.\n */\nexport interface IItemOrder<LocalType extends ItemBase> {\n    /**\n     * Hash that can be used to uniquely identify this sorting order.\n     * This hash is used for caching in the ItemSource implementation.\n     */\n    readonly hash: IItemOrderHash;\n    readonly direction: IOrderDirection;\n\n    /**\n     * Sorts the items inplace using the sorting order.\n     * @param items to be sorted inplace.\n     */\n    sortItems(items: LocalType[]): void;\n}\n\nexport function compareStrings(a: string, b: string): number {\n    return a.localeCompare(b);\n}\n\nexport function compareValues<T>(a: T, b: T): number {\n    if (a === b) {\n        return 0;\n    }\n    return a < b ? -1 : 1;\n}\n\nexport type ComparatorFn<LocalType extends ItemBase> = (a: LocalType, b: LocalType) => number;\n\nexport type IComparatorMap<LocalType extends ItemBase, IOrderField extends string> = {\n    [key in IOrderField]: ComparatorFn<LocalType>;\n}\n\nfunction reverseComparator<LocalType extends ItemBase>(comparator: ComparatorFn<LocalType>) {\n    return (a: LocalType, b: LocalType) => -comparator(a, b);\n}\n\nclass ItemOrder<LocalType extends ItemBase, IOrderField> implements IItemOrder<LocalType> {\n    constructor(\n        readonly direction: IOrderDirection,\n        readonly field: IOrderField,\n        readonly comparator: ComparatorFn<LocalType>) {\n    }\n\n    get hash(): IItemOrderHash {\n        return this.direction + ':' + this.field;\n    }\n\n    sortItems(items: LocalType[]): void {\n        items.sort(this.comparator);\n    }\n}\n\nexport function createItemOrderFactory<LocalType extends ItemBase, IOrderField extends string>(\n    comparatorMap: IComparatorMap<LocalType, IOrderField>) {\n\n    return class extends ItemOrder<LocalType, IOrderField> {\n        constructor(direction: IOrderDirection, field: IOrderField) {\n            let comparator = comparatorMap[field];\n            if (direction === 'descending') {\n                comparator = reverseComparator(comparator);\n            }\n            super(direction, field, comparator);\n        }\n    };\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { ISWYAdobeAssetOrderBy } from '../interface/AssetModel';\n\nimport { compareStrings, compareValues, createItemOrderFactory, IComparatorMap } from '../core/ItemOrder';\nimport AdobeAsset from './AdobeAsset';\n\nexport type SWYAdobeAssetOrderField =\n     | 'name'\n     | 'created'\n     | 'modified'\n     | 'shared'\n\nexport const OrderFieldToISWYAdobeAssetOrderBy: { [key in SWYAdobeAssetOrderField]: ISWYAdobeAssetOrderBy } = {\n    'name': 'asset_name',\n    'created': 'create_date',\n    'modified': 'modify_date',\n    'shared': 'shared_date',\n};\n\nconst OrderFieldToComparator: IComparatorMap<AdobeAsset, SWYAdobeAssetOrderField> = {\n    name(a: AdobeAsset, b: AdobeAsset): number {\n        return compareStrings(a.name, b.name);\n    },\n    shared(a: AdobeAsset, b: AdobeAsset): number {\n        return compareValues(a.shared, b.shared);\n    },\n    created(a: AdobeAsset, b: AdobeAsset): number {\n        return compareValues(a.created, b.created);\n    },\n    modified(a: AdobeAsset, b: AdobeAsset): number {\n        return compareValues(a.modified, b.modified);\n    }\n};\n\nexport default class SWYAdobeAssetOrder extends createItemOrderFactory(OrderFieldToComparator) {\n    static default = new SWYAdobeAssetOrder('descending', 'shared');\n}\n","export const USSAssetFilterName = 'USSAdobeAssetFilter';\n","/*************************************************************************\n *   ADOBE CONFIDENTIAL\n *\n *   Copyright 2022 Adobe\n *   All Rights Reserved.\n *\n *   NOTICE:  All information contained herein is, and remains\n *   the property of Adobe and its suppliers, if any. The intellectual\n *   and technical concepts contained herein are proprietary to Adobe\n *   and its suppliers and are protected by all applicable intellectual\n *   property laws, including trade secret and copyright laws.\n *   Dissemination of this information or reproduction of this material\n *   is strictly forbidden unless prior written permission is obtained\n *   from Adobe.\n **************************************************************************/\nimport AdobeAsset, { USSAdobeAssetUpdaterMetadata } from './AdobeAsset';\nimport { IItemSourceConfig } from '../core/ItemList';\nimport { IItemLoader, IItemLoaderOptions, ILoadedPage, ILoadNextPage } from '../core/ItemLoader';\nimport ItemPool from '../core/ItemPool';\nimport { USSMetadata, USSResponse } from '../interface/USSModel';\nimport { ISAMCorePrivate } from '../indexPrivate';\nimport AdobeAssetFilter from './AdobeAssetFilter';\nimport { IUpdateSession } from '../core/UpdateSession';\nimport LibraryContext from '../libraries/LibraryContext';\nimport { USSAssetFilterName } from './USSAssetFilterName';\nimport USSAdobeAssetFilter from './USSAdobeAssetFilter';\n\n\ninterface IMediaTypes {\n    mediaTypes: string[];\n    excludeMediaTypes: string[];\n}\n\nexport interface IGetUSSResults<T extends IItemSourceConfig<AdobeAsset>> extends IItemLoaderOptions<T>, IMediaTypes {\n    start: number;\n}\n\nexport interface IUSSLoader<T extends IItemSourceConfig<AdobeAsset>> extends IItemLoader<T> {\n    /**\n     * Loaders must implement this method and call from Loader.loadPage(options)\n     */\n    _getUSSResults(opts: IGetUSSResults<T>): Promise<USSResponse>;\n    /**\n     * Loaders can optionally implement to provide additional metadata that is\n     * implied by the Loader but not included in the USS response.\n     */\n    _getItemData?(item: Partial<USSMetadata>): USSAdobeAssetUpdaterMetadata;\n    /**\n     * Loaders can optionally implement to perform additional internal state management.\n     */\n    _postProcessPage?(loaderPageOpts: IItemLoaderOptions<T>, page: ILoadedPage<T>): void;\n    /**\n     * Loaders can optionally implement to perform additional processing of USS search results.\n     */\n    _extractItems?(session: IUpdateSession<AdobeAsset>, items: USSMetadata[]): AdobeAsset[];\n    /**\n     * Loaders can optionally preload the library context.\n     */\n    _libraryContext?: LibraryContext;\n}\n\nconst DEFAULT_LIMIT = 50;\n\n/**\n * AdobeAsset Loader classes should use this class to do the page loading. Using composition rather\n * than inheritance because a base USSLoader class was causing circular dependencies at runtime that\n * would cause the base USSLoader class to be undefined when the Loader class that was extending it\n * was declared.\n */\nexport default class USSLoaderHelper<T extends IItemSourceConfig<AdobeAsset>> {\n    constructor(\n        private _assetPool: ItemPool<AdobeAsset>,\n        protected _core: ISAMCorePrivate,\n        private _loader: IUSSLoader<T>\n    ) {}\n\n    async loadPage(options: IItemLoaderOptions<T>, start?: number): Promise<ILoadedPage<T>> {\n        const {  order, limit = DEFAULT_LIMIT, filter, implicitFilter } = options;\n        const latency = this._core._environment.getValue('USS_LIST_UPDATE_LATENCY');\n        const mostRecentValidMutation = Date.now() - latency;\n        start = start || 0;\n\n        const adobeAssetFilter =  filter as AdobeAssetFilter;\n        const { mediaTypes, excludeMediaTypes } = adobeAssetFilter;\n\n        let uploadedFrom;\n        let userId;\n        if (adobeAssetFilter.name === USSAssetFilterName) {\n            const ussAssetFilter = adobeAssetFilter as USSAdobeAssetFilter;\n            uploadedFrom = ussAssetFilter.uploadedFrom;\n            userId = ussAssetFilter.userId;\n        }\n\n        const result: USSResponse = await this._loader._getUSSResults({\n            order,\n            limit,\n            filter,\n            implicitFilter,\n            start,\n            mediaTypes: Array.from(mediaTypes ?? []),\n            excludeMediaTypes: Array.from(excludeMediaTypes ?? []),\n            ...(uploadedFrom ? { uploadedFrom } : {}),\n            ...(userId ? { userId } : {})\n        });\n\n        const resultSet = result.result_sets[0];\n\n        const session = this._assetPool.createLoaderUpdateSession(mostRecentValidMutation);\n        const items = this._extractItems(session, resultSet.items as USSMetadata[]);\n        let loadNextPage: ILoadNextPage<T> | undefined;\n        const total = resultSet.total_items || 0;\n        const pageItemCount = resultSet.items.length;\n        // [SEARCH-30755] -- May be caused by USS filtering out items due to permissions for the\n        // current user, which aren't subtracted from the total. Try to ensure that the Loader paginates\n        // as though the total_items is correct.\n        const nextStartIndex = (pageItemCount === 0 ? start + limit : start + pageItemCount);\n        if (nextStartIndex < total) {\n            loadNextPage = (options: IItemLoaderOptions<T>) => this.loadPage(options, nextStartIndex);\n        }\n\n        const page: ILoadedPage<T> = {\n            items,\n            total,\n            loadNextPage,\n            mostRecentValidMutation\n        };\n\n        // allow Loader to do additional internal state management (optional)\n        this._loader._postProcessPage?.(options, page);\n\n        session.commit();\n\n        return page;\n    }\n\n    private _getItemData(item: Partial<USSMetadata>): USSAdobeAssetUpdaterMetadata {\n        let publicLink: boolean | undefined = false;\n        let directCount: number | undefined = 0;\n        const collaboration_metadata = item['collaboration_metadata'];\n        if (collaboration_metadata !== undefined) {\n            publicLink = collaboration_metadata.some((collaborator) => {\n                return collaborator.collaborator_id === 'all';\n            });\n            directCount = collaboration_metadata.length;\n        }\n        return {\n            ...item,\n            // Presence of collab_metadata#mine indicates that the item is shared with the user via an invite\n            sharedViaInvite: !!item['collab_metadata#mine'],\n            isShared: directCount > 0,\n            isPublicLink: publicLink,\n            directCollaboratorCount: directCount,\n            // No need to refresh collaborators for share flags, directCollaboratorCount, since they are computed\n            // above. Not clearing the collaboratorDataIsDirty flag, because we cannot populate collaboratorArray\n            // from USS.\n            shareFlagsAreDirty: false\n        };\n    }\n\n    /**\n     * @package -- for use by USSLoaderHelper\n     */\n    _extractItems(session: IUpdateSession<AdobeAsset>, items: USSMetadata[]): AdobeAsset[] {\n        return this._core._adobeAssetFactory.assetsFromUSSMetadata(session, items, this._loader._getItemData || this._getItemData, this._loader._libraryContext);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport AdobeAsset/*, { USSAdobeAssetUpdaterMetadata }*/  from './AdobeAsset';\nimport { IItemLoaderOptions, ILoadedPage } from '../core/ItemLoader';\nimport ItemPool from '../core/ItemPool';\nimport { SWYAdobeAssetConfig } from './SWYAdobeAssetSource';\nimport SWYAdobeAssetFilter from './SWYAdobeAssetFilter';\nimport { OrderFieldToISWYAdobeAssetOrderBy } from './SWYAdobeAssetOrder';\nimport type SWYInterface from '../interface/SWYInterface';\nimport { USSResponse } from '../interface/USSModel';\nimport USSLoaderHelper, { IGetUSSResults, IUSSLoader } from './USSLoaderHelper';\nimport { ISAMCorePrivate } from '../indexPrivate';\nimport AdobeAssetFilter from '../assets/AdobeAssetFilter';\nimport LibraryContext from '../libraries/LibraryContext';\n\nexport default class SWYAdobeAssetLoader implements IUSSLoader<SWYAdobeAssetConfig> {\n    private _ussLoaderHelper: USSLoaderHelper<SWYAdobeAssetConfig>;\n    /**\n      * @package -- only for use in SAM.js\n      */\n    _libraryContext?: LibraryContext;\n\n    constructor(\n        assetPool: ItemPool<AdobeAsset>,\n        private _core: ISAMCorePrivate,\n        private _swyInterface: SWYInterface,\n    ) {\n        this._ussLoaderHelper = new USSLoaderHelper(assetPool, _core, this);\n    }\n\n    supportsFilter(filter?: SWYAdobeAssetFilter | AdobeAssetFilter): boolean {\n        // If we don't provide a filter at all, then we cannot use the loader\n        return filter !== undefined;\n    }\n\n    async loadPage(options: IItemLoaderOptions<SWYAdobeAssetConfig>): Promise<ILoadedPage<SWYAdobeAssetConfig>> {\n        if (!this._libraryContext) {\n            this._libraryContext = await this._core.getLibraryContext();\n        }\n        return this._ussLoaderHelper.loadPage(options);\n    }\n\n    /**\n     * @package -- for use by USSLoaderHelper\n     */\n    async _getUSSResults({\n        start,\n        limit,\n        mediaTypes,\n        excludeMediaTypes,\n        order\n    }: IGetUSSResults<SWYAdobeAssetConfig>): Promise<USSResponse> {\n        return this._swyInterface.getSWYAssets({\n            orderBy: OrderFieldToISWYAdobeAssetOrderBy[order.field],\n            orderDirection: order.direction,\n            start,\n            limit,\n            mediaTypes,\n            excludeMediaTypes,\n            embedPermissions: true\n        });\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nexport function updateAssetTypeForUSS(type?: string[]) {\n    // directories in uss contain mime type 'application/x-sharedcloud-collection+json'\n    // adding it to the list if clients wants to search for directories\n    if (type?.find((item) => {return item === 'application/vnd.adobecloud.directory+json';})) {\n        type.push('application/x-sharedcloud-collection+json');\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { IOrderDirection } from '../core/ItemOrder';\nimport InterfaceBase from './InterfaceBase';\nimport { ISearchQuery, ISearchSortOrderDirection, SearchProps, USSResponse } from './USSModel';\nimport { ISBMAdobeAssetOrderBy } from './AssetModel';\nimport { updateAssetTypeForUSS } from './USSUtils';\n\ntype IPageOptions = {\n    limit: number;\n    start?: number;\n}\n\ninterface IListingOptions<IOrderField> extends IPageOptions {\n    orderDirection: IOrderDirection;\n    orderBy: IOrderField;\n}\n\nexport interface SBMAssetsListingOptions extends IListingOptions<ISBMAdobeAssetOrderBy> {\n    type?: string[]\n}\n\nconst DefaultSBMAssetsListingOptions: SBMAssetsListingOptions = {\n    orderDirection: 'descending',\n    orderBy: 'shared_date',\n    start: 0,\n    limit: 0\n};\n\nexport function getDirectionValue(userOptions: Partial<SBMAssetsListingOptions>): ISearchSortOrderDirection {\n    const directionFlag = userOptions.orderDirection === 'ascending' ? 'asc' : 'desc';\n    return directionFlag;\n}\n\nexport default class SBMInterface extends InterfaceBase {\n\n    async getSharedByMeAssets(parentId: string, options?: Partial<SBMAssetsListingOptions>): Promise<USSResponse> {\n        options = { ...DefaultSBMAssetsListingOptions, ...options };\n        updateAssetTypeForUSS(options.type);\n        const filters: ISearchQuery = {\n            hints: {\n                acp_platform_v2: true,\n            },\n            'fetch_fields': {\n                'includes': [\n                    'collab_metadata$$collaborators'\n                ]\n            },\n            'storage:assignee$$type': [ 'user' ],\n            op_none_of: [\n                {\n                    'app_metadata$$shell:visibility': 'hiddenSelf',\n                },\n            ],\n            parent_id: [ parentId ],\n            [SearchProps.TYPE]: options.type || [],\n            sort_orderby: options.orderBy,\n            sort_order: getDirectionValue(options),\n            limit: options.limit,\n            start_index: options.start\n        };\n\n        const response = await this._core.hostAssetContext._ussInterface.getQueryResponse(filters);\n        return response;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { IOrderDirection } from '../core/ItemOrder';\nimport InterfaceBase from './InterfaceBase';\nimport { ISearchQuery, ISearchSortOrderDirection, USSResponse, SearchProps } from './USSModel';\nimport { getUSSFetchFields, ISWYAdobeAssetOrderBy } from './AssetModel';\nimport { updateAssetTypeForUSS } from './USSUtils';\n\ntype IPageOptions = {\n    limit: number;\n    start?: number;\n}\n\ninterface IListingOptions<IOrderField> extends IPageOptions {\n    orderDirection: IOrderDirection;\n    orderBy: IOrderField;\n}\n\nexport interface SWYAssetsListingOptions extends IListingOptions<ISWYAdobeAssetOrderBy> {\n    mediaTypes?: string[],\n    excludeMediaTypes?: string[],\n    embedPermissions?: boolean,\n}\n\nconst DefaultSWYAssetsListingOptions: SWYAssetsListingOptions = {\n    orderDirection: 'descending',\n    orderBy: 'shared_date',\n    start: 0,\n    limit: 0,\n    mediaTypes: [],\n    excludeMediaTypes: [],\n};\n\nexport function getDirectionValue(userOptions: Partial<SWYAssetsListingOptions>): ISearchSortOrderDirection {\n    const directionFlag = userOptions.orderDirection === 'ascending' ? 'asc' : 'desc';\n    return directionFlag;\n}\n\nexport default class SWYInterface extends InterfaceBase {\n\n    async getSWYAssets(options?: Partial<SWYAssetsListingOptions>): Promise<USSResponse> {\n        options = { ...DefaultSWYAssetsListingOptions, ...options };\n        updateAssetTypeForUSS(options.mediaTypes);\n        updateAssetTypeForUSS(options.excludeMediaTypes);\n        const filters: ISearchQuery = {\n            shared_via_invite: true,\n            hints: {\n                acp_platform_v2: true,\n            },\n            fetch_fields: { includes: getUSSFetchFields() },\n            op_none_of: [\n                {\n                    op_field_exists: [\n                        'app_metadata$$cc:inheritable$$cc:team$$repo:assetId',\n                        // for excluding the older spaces and its children\n                        // We would want to show project children, but not projects themselves in swy\n                        'app_metadata$$cc:inherited$$cc:space$$repo:assetId',\n                        'app_metadata$$cc:inheritable$$cc:space$$repo:assetId'\n                    ],\n                },\n                {\n                    [SearchProps.VISIBLITY]: [ 'hiddenSelf', 'hiddenRecursive' ],\n                },\n                {\n                    [SearchProps.CREATIVE_CLOUD_TOPLEVEL_COLLECTION_NAME]: 'appdata',\n                },\n                {\n                    [SearchProps.TYPE]: options.excludeMediaTypes || [],\n                },\n                {\n                    [SearchProps.STORAGE_ASSIGNEE_ID]: this._core._environment.getValue('USER_ID'),\n                },\n            ],\n            [SearchProps.TYPE]: options.mediaTypes || [],\n            sort_orderby: options.orderBy,\n            sort_order: getDirectionValue(options),\n            limit: options.limit,\n            start_index: options.start,\n        };\n\n        if (options.embedPermissions) {\n            filters.fetch_fields!.includes.push('_embedded');\n        }\n\n        const response = await this._core.hostAssetContext._ussInterface.getQueryResponse(filters);\n        return response;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { IOrderDirection } from '../core/ItemOrder';\nimport InterfaceBase from './InterfaceBase';\nimport { ISearchQuery, ISearchSortOrderDirection, USSResponse, SearchProps } from './USSModel';\nimport { getUSSFetchFields, IUSSAdobeAssetOrderBy } from './AssetModel';\nimport { updateAssetTypeForUSS } from './USSUtils';\nimport { UploadedFromType } from '../assets/USSAdobeAssetFilter';\n\n type IPageOptions = {\n     limit: number;\n     start?: number;\n }\n\ninterface IListingOptions<IOrderField> extends IPageOptions {\n    orderDirection: IOrderDirection;\n    orderBy: IOrderField;\n}\n\nexport interface AssetsListingSearchOptions extends IListingOptions<IUSSAdobeAssetOrderBy> {\n    mediaTypes?: string[];\n    excludeMediaTypes?: string[];\n    query?: string;\n    deepSearch?: boolean;\n    assetId?: string;\n    embedPermissions?: boolean;\n    userId?: string;\n    uploadedFrom?: UploadedFromType;\n}\n\nconst DefaultAssetsListingSearchOptions: AssetsListingSearchOptions = {\n    orderDirection: 'descending',\n    orderBy: 'modify_date',\n    start: 0,\n    limit: 0\n};\n\nexport function getDirectionValue(userOptions: Partial<AssetsListingSearchOptions>): ISearchSortOrderDirection {\n    const directionFlag = userOptions.orderDirection === 'ascending' ? 'asc' : 'desc';\n    return directionFlag;\n}\n\nexport default class AdobeAssetSearchInterface extends InterfaceBase {\n\n    async getFilteredAssets(options?: Partial<AssetsListingSearchOptions>): Promise<USSResponse> {\n        options = { ...DefaultAssetsListingSearchOptions, ...options };\n        updateAssetTypeForUSS(options.mediaTypes);\n        updateAssetTypeForUSS(options.excludeMediaTypes);\n        const filters: ISearchQuery = {\n            hints: {\n                acp_platform_v2: true,\n            },\n            fetch_fields: { includes: getUSSFetchFields() },\n            [SearchProps.STORAGE_ASSIGNEE_TYPE]: [ 'user' ],\n            op_none_of: [\n                {\n                    op_field_exists: [\n                        'app_metadata$$cc:inheritable$$cc:team$$repo:assetId',\n                        'app_metadata$$cc:inherited$$cc:team$$repo:assetId',\n                    ],\n                },\n                {\n                    [SearchProps.VISIBLITY]: [ 'hiddenSelf', 'hiddenRecursive' ],\n                },\n                {\n                    [SearchProps.CREATIVE_CLOUD_TOPLEVEL_COLLECTION_NAME]: 'appdata',\n                },\n                {\n                    [SearchProps.TYPE]: options.excludeMediaTypes || [],\n                },\n            ],\n            ...(options.assetId ? {\n                ...options.deepSearch ? { container: { 'asset_id': [ options.assetId ] } }\n                    : { parent_id: [ options.assetId ] }\n            } : {}),\n            [SearchProps.TYPE]: options.mediaTypes || [],\n            sort_orderby: options.orderBy,\n            sort_order: getDirectionValue(options),\n            limit: options.limit,\n            start_index: options.start,\n            // Since this is a JSON payload in the request, the `query` param is safe from injection attacks\n            ...(options.query ? { q: options.query } : {})\n        };\n\n        const userId = options.userId;\n        const uploadedFrom = options.uploadedFrom;\n\n        if (userId) {\n            filters.op_and = filters.op_and || [];\n            filters.op_and.push({\n                [SearchProps.STORAGE_ASSIGNEE_ID]: userId\n            });\n        }\n        if (uploadedFrom) {\n            filters.op_and = filters.op_and || [];\n            filters.op_and.push({\n                [SearchProps.CREATED_FROM_UPLOAD]: true\n            });\n            if (Array.isArray(uploadedFrom)) {\n                const op_or = uploadedFrom.map((clientId: string) => {\n                    return { [SearchProps.CREATED_BY_CLIENT_ID]: clientId };\n                });\n                filters.op_and.push({ [SearchProps.OP_OR]: op_or });\n            }\n        }\n\n        const response = await this._core.hostAssetContext._ussInterface.getQueryResponse(filters);\n        return response;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { IOrderDirection } from '../core/ItemOrder';\nimport InterfaceBase from './InterfaceBase';\nimport { ISearchQuery, ISearchSortOrderDirection, USSResponse, SearchProps } from './USSModel';\nimport { getUSSFetchFields, IUSSAdobeAssetOrderBy } from './AssetModel';\nimport { updateAssetTypeForUSS } from './USSUtils';\n\n type IPageOptions = {\n     limit: number;\n     start?: number;\n }\n\ninterface IListingOptions<IOrderField> extends IPageOptions {\n    orderDirection: IOrderDirection;\n    orderBy: IOrderField;\n}\n\nexport interface AssetsListingGlobalSearchOptions extends IListingOptions<IUSSAdobeAssetOrderBy> {\n    mediaTypes?: string[];\n    query?: string;\n    excludeMediaTypes?: string[];\n    embedPermissions?: boolean;\n}\n\nconst DefaultAssetsListingGlobalSearchOptions: AssetsListingGlobalSearchOptions = {\n    orderDirection: 'descending',\n    orderBy: 'modify_date',\n    start: 0,\n    limit: 0\n};\n\nexport function getDirectionValue(userOptions: Partial<AssetsListingGlobalSearchOptions>): ISearchSortOrderDirection {\n    const directionFlag = userOptions.orderDirection === 'ascending' ? 'asc' : 'desc';\n    return directionFlag;\n}\n\nexport default class AdobeAssetGlobalSearchInterface extends InterfaceBase {\n    /**\n     * @TODO We should open this up to allow clients to configure the resctrictions\n     * on this query through a filter.\n     * https://jira.corp.adobe.com/browse/SAM-2542\n     */\n    async getFilteredAssets(options?: Partial<AssetsListingGlobalSearchOptions>): Promise<USSResponse> {\n        options = { ...DefaultAssetsListingGlobalSearchOptions, ...options };\n        updateAssetTypeForUSS(options.mediaTypes);\n        updateAssetTypeForUSS(options.excludeMediaTypes);\n        const filters: ISearchQuery = {\n            hints: {\n                acp_platform_v2: true,\n            },\n            fetch_fields: { includes: getUSSFetchFields() },\n            [SearchProps.STORAGE_ASSIGNEE_TYPE]: [ 'user' ],\n            op_none_of: [\n                {\n                    op_field_exists: [\n                        // for excluding the older spaces and its children\n                        // We would want to show project and its children in global search\n                        'app_metadata$$cc:inheritable$$cc:space$$repo:assetId',\n                        'app_metadata$$cc:inherited$$cc:space$$repo:assetId',\n                    ],\n                },\n                {\n                    [SearchProps.VISIBLITY]: [ 'hiddenSelf', 'hiddenRecursive' ],\n                },\n                {\n                    [SearchProps.CREATIVE_CLOUD_TOPLEVEL_COLLECTION_NAME]: 'appdata',\n                },\n                {\n                    [SearchProps.TYPE]: options.excludeMediaTypes || [],\n                },\n\n            ],\n            op_or: [\n                // TODO: Update _getItemData in AdobeAssetGlobalSearchLoader if we support Global\n                // search loader to show other items as well. For e.g. projects\n                {\n                    [SearchProps.STORAGE_ASSIGNEE_ID]: this._core._environment.getValue('USER_ID')\n                },\n                {\n                    [SearchProps.SHARED_VIA_INVITE]: true\n                }\n            ],\n            [SearchProps.TYPE]: options.mediaTypes || [],\n            sort_orderby: options.orderBy,\n            sort_order: getDirectionValue(options),\n            limit: options.limit,\n            start_index: options.start,\n            // Since this is a JSON payload in the request, the `query` param is safe from injection attacks\n            ...(options.query ? { q: options.query } : {})\n        };\n\n        if (options.embedPermissions) {\n            filters.fetch_fields!.includes.push('_embedded');\n        }\n\n        const response = await this._core.hostAssetContext._ussInterface.getQueryResponse(filters);\n        return response;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { UploadedFromType } from '../assets/USSAdobeAssetFilter';\nimport { getUSSFetchFields } from './AssetModel';\nimport InterfaceBase from './InterfaceBase';\nimport { ISearchQuery, USSResponse, SearchProps, LastAccessedOrderField, IOpOr } from './USSModel';\nimport { updateAssetTypeForUSS } from './USSUtils';\n\ntype IPageOptions = {\n    limit: number;\n    start?: number;\n}\n\ninterface IListingOptions extends IPageOptions {}\n\nexport interface RecentAssetsListingOptions extends IListingOptions {\n    mediaTypes?: string[],\n    excludeMediaTypes?: string[],\n    embedPermissions?: boolean,\n    uploadedFrom?: UploadedFromType;\n    userId?: string;\n}\n\nconst DefaultRecentAssetsListingOptions: RecentAssetsListingOptions = {\n    start: 0,\n    limit: 0,\n    mediaTypes: [],\n    excludeMediaTypes: [],\n};\n\nexport default class RecentInterface extends InterfaceBase {\n\n    private _getCommonFilters(options?: Partial<RecentAssetsListingOptions>): ISearchQuery {\n        options = { ...DefaultRecentAssetsListingOptions, ...options };\n        const { uploadedFrom } = options ?? {};\n        updateAssetTypeForUSS(options.mediaTypes);\n        updateAssetTypeForUSS(options.excludeMediaTypes);\n        // Folders should never be included in Recents listing\n        options.excludeMediaTypes = Array.from(\n            new Set([ 'application/x-sharedcloud-collection+json', ...(options.excludeMediaTypes || []) ])\n        );\n        const filters: ISearchQuery = {\n            hints: {\n                acp_platform_v2: true,\n            },\n            fetch_fields: { includes: getUSSFetchFields() },\n            sort_order: 'desc',\n            limit: options.limit,\n            start_index: options.start,\n            [SearchProps.TYPE]: options.mediaTypes || [],\n            op_none_of: [\n                {\n                    [SearchProps.FIELD_EXISTS]: [\n                        // for excluding the older spaces and its children\n                        'app_metadata$$cc:inheritable$$cc:space$$repo:assetId',\n                        'app_metadata$$cc:inherited$$cc:space$$repo:assetId',\n                        // for excluding only the projects\n                        'app_metadata$$cc:inheritable$$cc:team$$repo:assetId',\n                    ],\n                },\n                {\n                    [SearchProps.VISIBLITY]: [ 'hiddenSelf', 'hiddenRecursive' ],\n                },\n                {\n                    [SearchProps.CREATIVE_CLOUD_TOPLEVEL_COLLECTION_NAME]: [ 'appdata' ],\n                },\n                {\n                    [SearchProps.TYPE]: options.excludeMediaTypes || [],\n                },\n                {\n                    // For excluding legacy artifacts.\n                    [SearchProps.CREATIVE_CLOUD_TOPLEVEL_COLLECTION_NAME]: 'pubs'\n                },\n                {\n                    // For excluding more modern artifacts.\n                    [SearchProps.OP_AND]: [\n                        {\n                            [SearchProps.CREATIVE_CLOUD_TOPLEVEL_COLLECTION_NAME]: 'cloud-content'\n                        },\n                        {\n                            [SearchProps.FIELD_EXISTS]: [ 'app_metadata$$review:sourceAsset$$dc:format' ]\n                        }\n                    ],\n                }\n            ],\n        };\n\n        if (options.embedPermissions) {\n            filters.fetch_fields!.includes.push('_embedded');\n        }\n\n        if (uploadedFrom) {\n            filters.op_and = [];\n            filters.op_and.push({\n                [SearchProps.CREATED_FROM_UPLOAD]: true\n            });\n        }\n\n        if (uploadedFrom && Array.isArray(uploadedFrom)) {\n            const length = filters.op_and!.push({\n                [SearchProps.OP_OR]: []\n            });\n            uploadedFrom.forEach((value: string) => {\n                const filter = filters.op_and![length - 1] as IOpOr;\n                filter[SearchProps.OP_OR].push(\n                    {\n                        [SearchProps.CREATED_BY_CLIENT_ID]: value\n                    }\n                );\n            });\n        }\n\n        if (uploadedFrom && !Array.isArray(uploadedFrom) && uploadedFrom !== 'ALL') {\n            filters.op_and!.push({\n                [SearchProps.CREATED_BY_CLIENT_ID]: uploadedFrom\n            });\n        }\n\n        return filters;\n    }\n\n    async getRecentAssets(options?: Partial<RecentAssetsListingOptions>): Promise<USSResponse> {\n        const filters = this._getCommonFilters(options);\n        const { userId } = options ?? {};\n        // should not give order given by client in this request\n        // because Recent assets mean descending direction of modified date\n        filters.sort_orderby = 'modify_date';\n        const storageAssigneeQuery = {\n            [SearchProps.STORAGE_ASSIGNEE_ID]: userId ?? this._core._environment.getValue('USER_ID')\n        };\n\n        // If the userId is present we want to add this to the and\n        // operation of the query.\n        if (userId) {\n            if (!filters.op_and) {\n                filters.op_and = [];\n            }\n            filters.op_and.push(storageAssigneeQuery);\n        } else {\n            // If the userId is present then we don't want to include the\n            // SHARED_VIA_INVITED as well since that will include results that are not\n            // equal to the userId provided.\n\n            if (!filters.op_or) {\n                filters.op_or = [];\n            }\n\n            filters.op_or.push(storageAssigneeQuery);\n            filters.op_or.push({\n                [SearchProps.SHARED_VIA_INVITE]: true\n            });\n        }\n\n        const response = await this._core.hostAssetContext._ussInterface.getQueryResponse(filters);\n        return response;\n    }\n\n    async getMRUAssets(options?: Partial<RecentAssetsListingOptions>): Promise<USSResponse> {\n        const filters = this._getCommonFilters(options);\n        filters.fetch_fields!.includes.push(LastAccessedOrderField);\n        const { userId } = options ?? {};\n\n        if (userId) {\n            if (!filters.op_and) {\n                filters.op_and = [];\n            }\n\n            filters.op_and.push({\n                [SearchProps.STORAGE_ASSIGNEE_ID]: userId\n            });\n        }\n\n        // should not give order given by client in this request\n        // because Recent assets mean descending direction of last accessed date\n        filters.sort_orderby = LastAccessedOrderField;\n        filters.op_field_exists = [ LastAccessedOrderField ];\n        const response = await this._core.hostAssetContext._ussInterface.getQueryResponse(filters);\n        return response;\n    }\n}\n","/*************************************************************************\n*   ADOBE CONFIDENTIAL\n*\n*   Copyright 2024 Adobe\n*   All Rights Reserved.\n*\n*   NOTICE:  All information contained herein is, and remains\n*   the property of Adobe and its suppliers, if any. The intellectual\n*   and technical concepts contained herein are proprietary to Adobe\n*   and its suppliers and are protected by all applicable intellectual\n*   property laws, including trade secret and copyright laws.\n*   Dissemination of this information or reproduction of this material\n*   is strictly forbidden unless prior written permission is obtained\n*   from Adobe.\n**************************************************************************/\nimport { ISAMObject } from '../ISAMObject';\nimport IEvent from '../IEvent';\nimport { observableImpl } from './observable';\nimport TypedEventEmitter, { BECOME_UNOBSERVED } from '../TypedEventEmitter';\nimport ItemBase from '../ItemBase';\n\nconst $LAZY_LOAD_MANAGERS = Symbol('$LAZY_LOAD_MANAGERS');\n\ntype ILazyLoaded = ISAMObject & TypedEventEmitter<any> & {\n    [$LAZY_LOAD_MANAGERS]: Map<IEvent, LazyLoadManager>;\n}\n\nexport enum LoadStatus {\n    NotLoaded = 1,\n    Pending,\n    Loading,\n    Loaded,\n    Error\n}\n\ninterface ILazyLoadConfig {\n    event: IEvent;\n    fetchData: () => Promise<void>;\n    prefetchTimeout?: number;\n    retryErrorTimeout?: number;\n    cancelFetchData?: () => boolean;\n}\n\ntype LLMConstructorConfig = ILazyLoadConfig & {\n    target: ILazyLoaded;\n}\n\nconst MAX_RETRIES = 5;\nconst FETCH_START_DELAY_MS = 100;\n\n/**\n * For managing lazy loading of data throughout SAM.js in a consistent manner. This involves\n *\n * 1. A new custom event for the data that is lazily fetched should be created. While it can work with the default\n *    'change' event, using a custom event will allow SAM.js to track what lazy-loaded data is actively being\n *    monitored by clients so that it only fetches when necessary.\n * 2. The class that has lazy-loaded data should call static method LazyLoadManager.manageLazyLoading() to instantiate\n *    the LazyLoadManager(s) and annotate the getters for the lazy-loaded data with @lazyLoaded\n *\n * @package -- only for use in SAM.js\n */\nexport class LazyLoadManager {\n    // config\n    private readonly _target: ILazyLoaded;\n    private _event: IEvent;\n    private _loadStatus: LoadStatus = LoadStatus.NotLoaded;\n    private _fetchData: () => Promise<void>;\n    private _prefetchTimeout: number = FETCH_START_DELAY_MS;\n    private _retryErrorTimeout: number = Number.POSITIVE_INFINITY;\n    private _cancelFetchData?: () => boolean;\n\n    // state\n    private _prefetchResolve?: (cancelled: boolean) => void;\n    private _retriesRemaining: number = MAX_RETRIES;\n\n\n    constructor({\n        target,\n        event,\n        fetchData,\n        prefetchTimeout = FETCH_START_DELAY_MS,\n        retryErrorTimeout = Number.POSITIVE_INFINITY,\n        cancelFetchData,\n    }: LLMConstructorConfig) {\n        this._target = target;\n        this._event = event;\n        this._fetchData = fetchData;\n        this._prefetchTimeout = prefetchTimeout;\n        this._retryErrorTimeout = retryErrorTimeout;\n        this._cancelFetchData = cancelFetchData;\n\n        this._target.on(BECOME_UNOBSERVED, this._onBecomeUnobserved);\n    }\n\n    /**\n     * Ideal way for client classes to instantiate LazyLoadManager(s)\n     *\n     * @example\n     * class MyClass extends ISAMObject {\n     *    private _lazyLoadVal?: number;\n     *\n     *    constructor() {\n     *        LazyLoadManager.manageLazyLoading(this, [{\n     *            event: MyEventInstance,\n     *            fetchData: this._fetchData\n     *        }]\n     *\n     *        @lazyLoaded(MyEventInstance, '_lazyLoadVal')\n     *        get lazyLoadVal(): number | undefined {\n     *            return this._lazyLoadVal;\n     *        }\n     *\n     *        private async _fetchData(): void {\n     *            this._lazyLoadValue = await this._core.someContext.fetchData();\n     *        }\n     *    }\n     *\n     * @param target {ItemBase} the class instance that has lazy-loaded data to manage\n     * @param configs {ILazyLoadConfig[]} the config for each LazyLoadManager\n     */\n    static manageLazyLoading(target: ItemBase, configs: ILazyLoadConfig[]): void {\n        const instance = target as unknown as ILazyLoaded;\n        instance[$LAZY_LOAD_MANAGERS] = instance[$LAZY_LOAD_MANAGERS] || new Map();\n\n        configs.forEach((cfg) => {\n            const manager = new LazyLoadManager({\n                target: instance,\n                ...cfg\n            });\n            instance[$LAZY_LOAD_MANAGERS].set(cfg.event, manager);\n        });\n    }\n\n    /**\n     * Primarily for internal use/testing. Finds the relevant LazyLoadManager for a specific event (by name or\n     * by shared SAMEvent instance).\n     *\n     * @param target {ItemBase} the class instance that has lazy-loaded data to manage\n     * @param event {IEvent|string} the SAMEvent instance or name\n     */\n    static getManager(target: ItemBase, event: IEvent | string): LazyLoadManager {\n        const map = (target as unknown as ILazyLoaded)[$LAZY_LOAD_MANAGERS];\n\n        let foundEvent: IEvent | undefined;\n        if (typeof event === 'string') {\n            foundEvent = [ ...map.keys() ].find(e => e.type === event);\n        } else {\n            foundEvent = event;\n        }\n\n        const manager = map.get(foundEvent!);\n        if (!manager) {\n            throw new Error(`Target does not have a LazyLoadManager for event ${event}`);\n        }\n\n        return manager;\n    }\n\n    /**\n     * For external code to check if a LazyLoadManager exists for a specific event.\n     * @param target {ImtemBase} the class instance that has lazy-loaded data to manage\n     * @param event {IEvent|string} the SAMEvent instance or name\n     */\n    static hasManager(target: ItemBase, event: IEvent | string): boolean {\n        try {\n            return LazyLoadManager.getManager(target, event) !== undefined;\n        } catch (e) {\n            return false;\n        }\n    }\n\n    /**\n     * Used by code outside the _fetchData method that needs to modify the loadStatus.\n     *\n     * @param target {ItemBase} the target instance that has lazy-loaded data\n     * @param event {string | IEvent} the event name or instance tied to the lazy-loaded data\n     * @param loadStatus {LoadStatus} the new LoadStatus\n     */\n    static setLoadStatus(target: ItemBase, event: string | IEvent, loadStatus: LoadStatus): void {\n        const manager = LazyLoadManager.getManager(target, event);\n        manager.setLoadStatus(loadStatus);\n    }\n\n    /**\n     * For external code to check load status.\n     *\n     * @param target {ItemBase} the target instance that has lazy-loaded data\n     * @param event {string | IEvent} the event name tied to the lazy-loaded data\n     * @return LoadStatus\n     */\n    static getLoadStatus(target: ItemBase, event: string | IEvent): LoadStatus {\n        const manager = LazyLoadManager.getManager(target, event);\n        return manager.loadStatus;\n    }\n\n    static fetchIfNeeded(target: ItemBase, event: string | IEvent): void {\n        const manager = LazyLoadManager.getManager(target, event);\n        manager.fetchIfNeeded();\n    }\n\n    /**\n     * For cases where code modifies the lazy-load data outside of fetching. Ensures the correct LoadStatus is set and\n     * the appropriate event is fired.\n     *\n     * @param target {ItemBase} the target instance that has lazy-loaded data\n     * @param event {string | IEvent} the event name or instance tied to the lazy-loaded data\n     */\n    static updatedExternally(target: ItemBase, event: string | IEvent): void {\n        const manager = LazyLoadManager.getManager(target, event);\n        manager.updatedExternally();\n    }\n\n    get loadStatus(): LoadStatus {\n        return this._loadStatus;\n    }\n\n    private _onBecomeUnobserved = (eventName: string) => {\n        if (eventName !== this._event.type) { return; }\n\n        if (this._loadStatus === LoadStatus.Pending) {\n            this._prefetchResolve!(true);\n            return;\n        }\n\n        // Only cancel fetching if it is loading and there is a way to do it\n        if (this._loadStatus === LoadStatus.Loading && this._cancelFetchData) {\n            // _cancelFetchData returns true if cancel succeeds\n            if (this._cancelFetchData.call(this._target)) {\n                this.setLoadStatus(LoadStatus.NotLoaded);\n            }\n        }\n    }\n\n    private async _prefetchDelay(): Promise<boolean> {\n        return new Promise((resolve) => {\n            this._prefetchResolve = resolve;\n            this.setLoadStatus(LoadStatus.Pending);\n            setTimeout(() => {\n                resolve(false);\n                this._prefetchResolve = undefined;\n            }, this._prefetchTimeout);\n        });\n    }\n\n    onPropertyAccess(): void {\n        this.fetchIfNeeded();\n    }\n\n    async fetchIfNeeded(): Promise<void> {\n        if (this._loadStatus === LoadStatus.NotLoaded) {\n            if (this._prefetchTimeout) {\n                const cancelled = await this._prefetchDelay();\n                if (cancelled) {\n                    this.setLoadStatus(LoadStatus.NotLoaded);\n                    return;\n                }\n            }\n            try {\n                this._loadStatus = LoadStatus.Loading;\n\n                // Note: uses `call` for better memory footprint. That way, the _fetchData implementation can be a\n                // single instance of a function on the class prototype, rather than a method bound (via `=>` or\n                // `.bind()`) on each instance of the class.\n                await this._fetchData.call(this._target);\n                // Don't transition to Loaded if it was cancelled\n                if (this._loadStatus === LoadStatus.Loading) {\n                    this.setLoadStatus(LoadStatus.Loaded);\n                }\n            } catch (e) {\n                this.setLoadStatus(LoadStatus.Error);\n            }\n        }\n    }\n\n    setLoadStatus(loadStatus: LoadStatus) {\n        if (this._loadStatus === loadStatus) { return; }\n\n        this._loadStatus = loadStatus;\n        // Transitioning to NotLoaded means the data still needs to be loaded, so listeners should be notified so\n        // they can trigger lazy-loading if they want.\n        if (loadStatus === LoadStatus.NotLoaded || loadStatus === LoadStatus.Loaded) {\n            // Reset remaining retries on successful load\n            if (loadStatus === LoadStatus.Loaded) {\n                this._retriesRemaining = MAX_RETRIES;\n            }\n            this._target.dispatch(this._event);\n        } else if (loadStatus === LoadStatus.Error\n            && this._retryErrorTimeout < Number.POSITIVE_INFINITY\n            && this._retriesRemaining > 0\n        ) {\n            // If retry-able, wait the designated time and then set back to NotLoaded, which will notify clients\n            // so they can kick-off lazy loading again if desired\n            setTimeout(() => {\n                this._retriesRemaining--;\n                if (this._loadStatus === LoadStatus.Error) {\n                    this.setLoadStatus(LoadStatus.NotLoaded);\n                }\n            }, this._retryErrorTimeout);\n        }\n    }\n\n    /**\n     * For cases when something updates lazy-loaded data outside of a lazy-load fetch (such as mutating the value of a\n     * field as part of a service operation), where the event must be fired and the loadStatus should be set to Loaded\n     */\n    updatedExternally() {\n        if (this._loadStatus !== LoadStatus.Loaded) {\n            // setLoadStatus will fire the event\n            this.setLoadStatus(LoadStatus.Loaded);\n        } else {\n            this._target.dispatch(this._event);\n        }\n    }\n}\n\n/**\n * Annotation for marking a getter as the entry point for clients to access lazy-loaded fields, which\n * makes them observed and starts lazy-loading if needed.\n *\n * @param event {IEvent} the event instance that will be fired when the lazy-loaded data changes\n * @param privatePropNames {string[]} an array of the private property names that the annotated getter references.\n *        When ItemUpdater modifies one of these private fields, it will fire the event specified, rather than the\n *        default event for the ItemUpdater.\n */\nexport function lazyLoaded(event: IEvent, privatePropNames: string | string[]) {\n    return function (target: ItemBase, key: string, descriptor: PropertyDescriptor) {\n        if (descriptor.get) {\n            const getter = descriptor.get;\n            descriptor.get = function (this: ItemBase) {\n                const manager = LazyLoadManager.getManager(this, event);\n                if (!manager) {\n                    throw new Error(`@lazyLoaded target is missing LazyLoadManager for event ${event.type}. Use`\n                        + ' LazyLoadManager.manageLazyLoading() in constructor to configure');\n                }\n                manager.onPropertyAccess();\n                return getter.call(this);\n            };\n        } else if (typeof descriptor.value === 'function') {\n            const method = descriptor.value;\n            const newMethod = function (this: ItemBase, ...args: any[]): any {\n                const manager = LazyLoadManager.getManager(this, event);\n                if (!manager) {\n                    throw new Error(`@lazyLoaded target is missing LazyLoadManager for event ${event.type}. Use`\n                        + ' LazyLoadManager.manageLazyLoading() in constructor to configure');\n                }\n                manager.onPropertyAccess();\n                return (method as any).apply(this, args);\n            };\n            descriptor.value = newMethod;\n        } else {\n            throw new Error('@lazyLoaded only works with getters and methods');\n        }\n        // layer @observabile on top of @lazyLoaded\n        privatePropNames = [].concat(privatePropNames as any);\n        observableImpl(event, privatePropNames)(target, key, descriptor);\n    };\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { memoize, observable } from '../core/decorators';\nimport ItemBase from '../core/ItemBase';\nimport { CollaboratorSource } from './CollaboratorSource';\nimport { InvitedCollaboratorSource } from './InvitedCollaboratorSource';\nimport Collaborator from './Collaborator';\nimport InvitedCollaborator from './InvitedCollaborator';\nimport { ISAMCorePrivate, SharedCollaboratorChangedEvent } from '../indexPrivate';\nimport { ICollaboratorSources } from './CollaborationContext';\nimport { IItemPoolDelegate } from '../core/ItemPool';\nimport oneTimeWarning from '../utils/oneTimeWarning';\nimport { lazyLoaded, LazyLoadManager, LoadStatus } from '../core/decorators/LazyLoadManager';\n\nexport default class ShareableItem extends ItemBase {\n    private _collaboratorsArray: Collaborator[] = [];\n    private _collaboratorSources?: ICollaboratorSources;\n    protected _isSharedWithYouAsset: boolean | undefined;\n    protected _isShared: boolean | undefined;\n    private _directCollaboratorCount: number | undefined;\n    private _isPublicLink: boolean | undefined;\n    protected _shareFlagsAreDirty: boolean = true;\n\n    constructor(core: ISAMCorePrivate, id: string) {\n        super(core, id);\n        LazyLoadManager.manageLazyLoading(this, [ {\n            event: SharedCollaboratorChangedEvent,\n            fetchData: this._queueCollaborators,\n            prefetchTimeout: 0,\n            cancelFetchData: this._dequeueCollaborators\n        } ]);\n    }\n\n    @observable(SharedCollaboratorChangedEvent, '_isShared')\n    get isShared(): boolean | undefined {\n        this._fetchShareFlagsIfNeeded();\n        return this._isShared;\n    }\n\n    @observable(SharedCollaboratorChangedEvent, '_isSharedWithYouAsset')\n    get isSharedWithYouAsset(): boolean | undefined {\n        this._fetchShareFlagsIfNeeded();\n        return this._isSharedWithYouAsset;\n    }\n\n    @observable(SharedCollaboratorChangedEvent, '_directCollaboratorCount')\n    get directCollaboratorCount(): number | undefined {\n        this._fetchShareFlagsIfNeeded();\n        return this._directCollaboratorCount;\n    }\n\n    @observable(SharedCollaboratorChangedEvent, '_isPublicLink')\n    get isPublicLink(): boolean | undefined {\n        this._fetchShareFlagsIfNeeded();\n        return this._isPublicLink;\n    }\n\n    /**\n     * @package, used internally by filters, tests, etc.\n     */\n    get _isSWYAsset_NoLazyLoad(): boolean | undefined {\n        return this._isSharedWithYouAsset;\n    }\n\n    /**\n     * @package, used internally by filters, tests, etc.\n     */\n    get _isShared_NoLazyLoad(): boolean | undefined {\n        return this._isShared;\n    }\n\n    /**\n     * @package, used internally by filters, tests, etc.\n     */\n    get _directCollaboratorCount_NoLazyLoad(): number | undefined {\n        return this._directCollaboratorCount;\n    }\n\n    /**\n     * @package, used internally by filters, tests, etc.\n     */\n    get _isPublicLink_NoLazyLoad(): boolean | undefined {\n        return this._isPublicLink;\n    }\n\n    /**\n     * @deprecated Please use isSharedWithYouAsset -- will be removed on or after 2024-10-01\n     */\n    get isSharedWithMe(): boolean | undefined {\n        oneTimeWarning('isSharedWithMe', 'isSharedWithMe is deprecated and will be removed on or after'\n            + ' 2024-10-01. Please use isSharedWithYouAsset instead.');\n        return this.isSharedWithYouAsset;\n    }\n\n    /**\n     * @package -- used internally to check if collaborator data has been lazy-loaded without triggering lazy-loading.\n     */\n    get _isCollaboratorDataLoaded(): boolean {\n        return LazyLoadManager.getLoadStatus(this, SharedCollaboratorChangedEvent.type) === LoadStatus.Loaded;\n    }\n\n    private _fetchShareFlagsIfNeeded() {\n        if (this._shareFlagsAreDirty) {\n            LazyLoadManager.fetchIfNeeded(this, SharedCollaboratorChangedEvent);\n        }\n    }\n\n    /**\n     * @package used internally.\n     */\n    _queueCollaborators(): Promise<void> {\n        return this._core.collaborationContext._collaboratorRequestQueue.enqueue(this);\n    }\n\n    private _dequeueCollaborators(): boolean {\n        return this._core.collaborationContext._collaboratorRequestQueue.dequeue(this);\n    }\n\n    @lazyLoaded(SharedCollaboratorChangedEvent, '_collaboratorsArray')\n    get collaboratorArray(): Collaborator[] {\n        return this._collaboratorsArray;\n    }\n\n    @memoize\n    get collaborators(): CollaboratorSource {\n        if (!this._collaboratorSources) {\n            this._collaboratorSources = this._core.collaborationContext._getCollaboratorSources(this.id);\n            this._collaboratorSources.collaboratorPool.addDelegate(this._itemPoolDelegate, 'context');\n        }\n        return this._collaboratorSources.collaboratorSource;\n    }\n\n    async removeCollaborator(collaborator: Collaborator): Promise<void> {\n        await this._core.collaborationContext._removeCollaborator(this.id, collaborator);\n    }\n\n    async removeCurrentUserFromCollaborationList(): Promise<void> {\n        return this._core.collaborationContext._removeCurrentUserFromCollaborationList(this);\n    }\n\n    /**\n     * @TODO_Deprecation -- will be marked deprecated on or after 2024-10-01, and removed on or after 2025-01-01.\n     *   Only used in admin console for managing Teams, which is already deprecated.\n     *\n     * @returns {InvitedCollaboratorSource}\n     */\n    @memoize\n    get invitedCollaborators(): InvitedCollaboratorSource {\n        if (!this._collaboratorSources) {\n            this._collaboratorSources = this._core.collaborationContext._getCollaboratorSources(this.id);\n        }\n        return this._collaboratorSources.invitedCollaboratorSource;\n    }\n\n    /**\n     * @TODO_Deprecation -- will be marked deprecated on or after 2024-10-01, and removed on or after 2025-01-01.\n     *   Only used in admin console for managing Teams, which is already deprecated.\n     *\n     * @param {InvitedCollaborator} invitedCollaborator\n     * @returns {Promise<void>}\n     */\n    removeInvitedCollaborator(invitedCollaborator: InvitedCollaborator) {\n        return this._core.collaborationContext.removeInvitedCollaborator(this.id, invitedCollaborator);\n    }\n\n    /**\n     * @package Internal use only\n     *\n     * @param sources\n     * @param collaborators\n     */\n    _setCollaboratorData(collaborators?: Collaborator[]) {\n        this._collaboratorSources = this._core.collaborationContext._getCollaboratorSources(this.id);\n        const collaboratorItemPool = this._collaboratorSources.collaboratorPool;\n        this._collaboratorsArray = collaborators ?? collaboratorItemPool.toArray();\n        this._shareFlagsAreDirty = false;\n\n        // set the isShared flag. The collaborators array contains the owner of the asset\n        // as well the organization that owns the asset.\n        // We use the isDirect flag to determine if the asset is explicitly shared or not.\n        this._isShared = this._collaboratorsArray.some((collaborator) => {\n            return collaborator.isDirect;\n        });\n\n        // set the isSharedWithYouAsset flag\n        this._isSharedWithYouAsset = this._collaboratorsArray.some((collaborator) => {\n            return collaborator.isDirect && collaborator.isCurrentUser;\n        });\n\n        // set the isPublicLink flag\n        this._isPublicLink = this._collaboratorsArray.some((collaborator) => {\n            return collaborator.id === 'all';\n        });\n\n        // calculate the number of direct collaborators\n        this._directCollaboratorCount = this._collaboratorsArray.filter(collaborator => collaborator.isDirect).length;\n    }\n\n    private _itemPoolDelegate: IItemPoolDelegate<Collaborator> = {\n        onItemsUpdated: () => {\n            this._setCollaboratorData();\n            // This code path is not governed by LazyLoadManager, but LLM still needs to be informed of the update.\n            LazyLoadManager.updatedExternally(this, SharedCollaboratorChangedEvent);\n        }\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport EventEmitter from 'events';\nimport { observable } from '../core/decorators';\nimport { ISAMCorePrivate, ISAMObject } from '../indexPrivate';\n\nexport default abstract class Resource extends EventEmitter implements ISAMObject {\n\n    private _isLoaded: boolean = false;\n    protected _data: any;\n\n    constructor(\n        readonly _core: ISAMCorePrivate\n    ) {\n        super();\n    }\n\n    protected abstract _loadData(): Promise<void>;\n\n    async load() {\n        await this._loadData();\n        this._isLoaded = true;\n        this.emit('change');\n    }\n\n    unload() {\n        this._data = undefined;\n        this._isLoaded = false;\n        this.emit('change');\n    }\n\n    /**\n     * Merge new data into existing. Supports cases where data sources might not include all fields.\n     * @package -- for use in SAM.js only\n     */\n    _mergeData(data: any) {\n        this._data = { ...(this._data || {}), ...(data || {}) };\n        this.emit('change');\n    }\n\n    @observable\n    get isLoaded(): boolean {\n        return this._isLoaded;\n    }\n\n    @observable\n    get data(): any {\n        return this._data;\n    }\n\n    /**\n     * @package -- for use in SAM.js only\n     */\n    _setData(data: any) {\n        this._data = data;\n        this._isLoaded = true;\n        this.emit('change');\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport Resource from './Resource';\nimport { RelType } from '../interface/LinkUtils';\nimport AdobeAsset from './AdobeAsset';\nimport { ISAMCorePrivate } from '../indexPrivate';\n\nexport default class EmbeddedMetadataResource extends Resource {\n\n    constructor(\n        readonly _core: ISAMCorePrivate,\n        readonly _parent: AdobeAsset,\n    ) {\n        super(_core);\n    }\n\n    protected async _loadData() {\n        await this._parent._ensureLink(RelType.EMBEDDED_METADATA);\n        const assetInterface = await this._parent._getAssetInterface();\n        this._data = await assetInterface.getEmbeddedMetadata();\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport type jsonpatch from 'json-patch';\n\nimport Resource from './Resource';\nimport { RelType } from '../interface/LinkUtils';\nimport AdobeAsset from './AdobeAsset';\nimport { ISAMCorePrivate } from '../indexPrivate';\n// import { Permission } from '../interface/AssetModel';\n// import { SAMErrorCode } from '../core/SAMError';\n\nexport default class AppMetadataResource extends Resource {\n\n    constructor(\n        readonly _core: ISAMCorePrivate,\n        readonly _parent: AdobeAsset,\n    ) {\n        super(_core);\n    }\n\n    /*\n        A note regarding the following commented code:\n\n        While the code below is what we want, the issue is that, at the time load() is being called,\n        the parent's permissions have not been set yet.\n\n        In AdobeAsset _load(), the permissions are updated by AdobeAssetUpdater.updateLocalItem at the end,\n        but AppMetadataResource/load() is being called by await Promise.all(resourcesToReload.map(resource => resource.load()));\n        that happens before.\n\n        As long as we do not have a better mechanism to handle the permissions, we have to unsatisfy this request from\n        https://jira.corp.adobe.com/browse/SAM-3326:\n\n        6. Update `AppMetadataResource._loadData()` to check the permission on the parent, and if it does not have Permission.ReadAppMetadata, throw ACCESS_DENIED error instead of making the call.\n    */\n\n    // async load() {\n    //     if (this._parent.hasPermission(Permission.ReadAppMetadata)) {\n    //         await super.load();\n    //     } else {\n    //         throw SAMErrorCode.ACCESS_DENIED;\n    //     }\n    // }\n\n    protected async _loadData() {\n        await this._parent._ensureLink(RelType.APP_METADATA);\n        const assetInterface = await this._parent._getAssetInterface();\n        this._data = await assetInterface.getAppMetadata();\n    }\n\n    /**\n     * @package to be used internally by SAM.js\n     */\n    async _patch(patches: jsonpatch.OpPatch[]): Promise<void> {\n        await this._parent._ensureLink(RelType.APP_METADATA);\n        const assetInterface = await this._parent._getAssetInterface();\n        await assetInterface.patchAppMetadata(patches);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport Resource from './Resource';\nimport { observable } from '../core/decorators';\nimport AssetVersion from './AssetVersion';\nimport AdobeAsset from './AdobeAsset';\nimport { ISAMCorePrivate } from '../indexPrivate';\n\n// ManifestResource is a Resource that represents the manifest of an AdobeAsset or AssetVersion.\nexport default class ManifestResource extends Resource {\n\n    _etag: string = '';\n\n    constructor(\n        readonly _core: ISAMCorePrivate,\n        readonly _parent: AdobeAsset | AssetVersion,\n    ) {\n        super(_core);\n    }\n\n    @observable\n    get etag(): string {\n        return this._etag;\n    }\n\n    protected async _loadData() {\n        const assetInterface = await this._parent._getAssetInterface();\n        const { manifest, etag } = await assetInterface.getManifest();\n        this._data = manifest;\n        this._etag = etag || '';\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { IUpdateSession } from './UpdateSession';\nimport { SharedChangeEvent } from './ChangeEvent';\nimport SAMEvent from './SAMEvent';\nimport ItemBase, { ItemId } from './ItemBase';\nimport PropertyUpdater from './PropertyUpdater';\nimport SAMError, { SAMErrorCode } from './SAMError';\nimport { ISAMCorePrivate } from '../indexPrivate';\nimport { getEventForProp } from './decorators/observable';\n\ntype ItemConstructor<LocalType extends ItemBase> = { new (core: ISAMCorePrivate, id: ItemId, ...args: any[]): LocalType };\n\nexport interface ILocalItemUpdaterOptions {\n    /**\n     * The property updater used to apply the changes.\n     */\n    propertyUpdater: PropertyUpdater;\n\n    /**\n     * The default event scheduled when a change is detected.\n     * @default value is the 'change' event.\n     */\n    changeEvent?: SAMEvent;\n\n    /**\n     * A mapping of properties to events to allow\n     * events to be sent for specific properties that\n     * have changed and override the default event.\n     */\n    changeEventMap?: Map<string, SAMEvent>\n}\n\nexport class LocalItemUpdater<LocalType extends ItemBase, RemoteType> {\n\n    protected _propertyUpdater: PropertyUpdater;\n    protected _changeEvent: SAMEvent;\n    protected _changeEventsMap?:  Map<string, SAMEvent>;\n\n    constructor(options: ILocalItemUpdaterOptions) {\n        this._propertyUpdater = options.propertyUpdater;\n        this._changeEvent = options.changeEvent || SharedChangeEvent;\n        this._changeEventsMap = options.changeEventMap;\n    }\n\n    /**\n     * Update the local item with values from the remote item.\n     * @param localItem\n     * @param remoteItem\n     */\n    updateLocalItem(updateSession: IUpdateSession<LocalType>, localItem: LocalType, remoteItem: RemoteType): void {\n        if (!updateSession.checkIfItemAllowsMutations(localItem)) {\n            // The item had local changes that we don't want to overwrite because\n            // the server might not yet be consistent with the change.\n            return;\n        }\n\n        // If the item is not already added, add it to the list.\n        updateSession.ensureItemIsAdded(localItem);\n        const changedFields = this._propertyUpdater.update(localItem, remoteItem);\n        const changeEvents = new Set(changedFields\n            .map(\n                changedProperty =>\n                    this._changeEventsMap?.get(changedProperty)\n                        ?? getEventForProp(localItem, changedProperty)\n                        ?? this._changeEvent\n            )\n        );\n        if (changedFields.length) {\n            updateSession.queueChangedItem(localItem, [ ...changeEvents ]);\n        }\n    }\n}\n\nexport interface IItemUpdaterBaseOptions<LocalType extends ItemBase, RemoteType> extends ILocalItemUpdaterOptions {\n    /**\n     * The constructor of the local object.\n     */\n    localItemType: ItemConstructor<LocalType>;\n\n    /**\n     * Returns the alternate ID for the value received from the local cache or server side.\n     * @param remoteItem\n     */\n    getAlternateIds(remoteItem: RemoteType): string[] | undefined;\n\n    /**\n     * Returns the ID for the value received from the server side.\n     * @param remoteItem\n     */\n    getRemoteId(remoteItem: RemoteType): string | undefined;\n}\n\nexport abstract class ItemUpdaterBase<LocalType extends ItemBase, RemoteType> extends LocalItemUpdater<LocalType, RemoteType> {\n\n    /**\n     * The constructor of the local object.\n     */\n    protected _localItemType: ItemConstructor<LocalType>;\n\n    protected _getRemoteId: (remoteItem: RemoteType) => string | undefined;\n    protected _getAlternateIds: (remoteItem: RemoteType) => string[] | undefined;\n\n    constructor(options: IItemUpdaterBaseOptions<LocalType, RemoteType>) {\n        super(options);\n        this._localItemType = options.localItemType;\n        this._getRemoteId = options.getRemoteId;\n        this._getAlternateIds = options.getAlternateIds;\n    }\n\n    /**\n     * If you have an instance of the item already (such `this` in the item class), use updateLocalItem directly.\n     * If you don't, use this method to create a new instance of the item from the remote data and update it locally.\n     */\n    updateRemoteItem(\n        updateSession: IUpdateSession<LocalType>,\n        remoteItem: RemoteType\n    ): LocalType {\n        const id = this._getRemoteId(remoteItem);\n        const altIds = this._getAlternateIds(remoteItem);\n        if (!id && !altIds?.length) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'An ID or alternate ID must exist on the remote item structure.');\n        }\n        let localItem = id ? updateSession.getItemById(id) : undefined;\n        // Item is not cached by primary ID so check if it has been cached by an alt ID\n        if (!localItem && altIds) {\n            for (let i = 0; i < altIds.length; i++) {\n                const altId = altIds[i];\n                localItem = updateSession.getItemById(altId);\n                if (localItem) {\n                    if (id) {\n                        // Re-index cached item with its preferred ID\n                        updateSession.reindexItem(localItem, altId, id);\n                    }\n                    break;\n                }\n            }\n        }\n\n        // Item is not cached at all so create a new instance\n        if (!localItem) {\n            const LocalItemType = this._localItemType;\n            // The primary altId is the first ID in the array\n            localItem = new LocalItemType(updateSession._core, id || altIds![0]);\n        }\n\n        // Inject remote data.\n        this.updateLocalItem(updateSession, localItem, remoteItem);\n\n        return localItem;\n    }\n\n    updateRemoteItems(\n        updateSession: IUpdateSession<LocalType>,\n        remoteItems: RemoteType[]\n    ): LocalType[] {\n        if (!Array.isArray(remoteItems)) {\n            // Invalid remote data provided.\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'Invalid data received, expected list of items.');\n        }\n        return remoteItems.map((remoteItem) => this.updateRemoteItem(updateSession, remoteItem));\n    }\n}\n\nexport interface IItemUpdaterOptions<LocalType extends ItemBase, RemoteType>\n    // Removing the `getRemoteId` and `getAlternateIds` requirements as we are going to implement those in the `ItemUpdater` constructor\n    // based on the remoteIdProperty and alternateIdProperties passed via this interface.\n    extends Omit<IItemUpdaterBaseOptions<LocalType, RemoteType>, 'getRemoteId' | 'getAlternateIds'>\n{\n    /**\n     * Can be used to customize the property of the remote id that is used for the hash lookup.\n     *\n     * @see If the `id` is more complicated to reach and is not an immediate property of the RemoteType,\n     * then you can use the `ItemUpdaterBase` instead and override the `getRemoteId` method instead\n     * of using the `remotePropertyId` name in this class.\n     */\n    remoteIdProperty: string;\n\n    /**\n     * Set when the model has an initial temporary ID that will be replaced with\n     * remoteIdProperty (defined by remoteIdProperty) later.\n     */\n    alternateIdProperties?: string[];\n}\n\nexport default class ItemUpdater<LocalType extends ItemBase, RemoteType> extends ItemUpdaterBase<LocalType, RemoteType> {\n    public changeEventMap?: Map<string, SAMEvent>;\n    constructor(options: IItemUpdaterOptions<LocalType, RemoteType>) {\n        super(Object.assign({\n            getRemoteId(remoteItem: RemoteType): string | undefined {\n                // The generic types in TS are not lazy evaluated, so TS will try to resolve this based entirely\n                // on the constraints added to the generic type. Maybe one day TS will be able to evaluate\n                // based on the actual interface that is passed as the `RemoteType` and we could fix this model.\n                // As a result, we have use `any` because TS doesn't know the type of the generic RemoteType.\n                return (remoteItem as any)[options.remoteIdProperty];\n            },\n            getAlternateIds(remoteItem: RemoteType): string[] | undefined {\n                if (!options.alternateIdProperties) {\n                    return undefined;\n                }\n                // The generic types in TS are not lazy evaluated, so TS will try to resolve this based entirely\n                // on the constraints added to the generic type. Maybe one day TS will be able to evaluate\n                // based on the actual interface that is passed as the `RemoteType` and we could fix this model.\n                // As a result, we have use `any` because TS doesn't know the type of the generic RemoteType.\n                // Fetch all the altId values to check the cache with\n                return options.alternateIdProperties.map((altIdProperty) => (remoteItem as any)[altIdProperty]).filter((altId) => !!altId);\n            }\n        }, options));\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport type { ISAMObject } from '../indexPrivate';\nimport { deepClone, isDeepEqual, IsEqualFn, isStrictEqual } from './ObjectUtils';\nimport SAMError, { SAMErrorCode } from './SAMError';\n\nexport const NotFound = Symbol('NotFound');\n\ntype ParseFn = (a: any) => any;\n\nexport type PropertyFormatType = {\n    parse: ParseFn,\n    isEqual: IsEqualFn\n}\n\ntype GetFn = (source: any, dest: ISAMObject) => any;\ntype SetFn = (parsedSource: any, dest: ISAMObject) => any;\n\ntype BuiltinPropertyFormats = 'string' | 'boolean' | 'number' | 'date' | 'date_as_number' | 'object' | 'object_subset';\ntype PropertyFormat = BuiltinPropertyFormats | PropertyFormatType;\n\ntype IPropertyType = {\n    name: string,\n    format: PropertyFormatType,\n    choices?: any[],\n    isArray: boolean,\n    mapByKey?: string,\n    // \"get\" from the source data\n    get: GetFn,\n    // \"set\" on the dest object\n    set: SetFn\n}\n\ntype IUserPropertyType = string | {\n    name?: string,\n    format?: PropertyFormat,\n    choices?: any[],\n    isArray?: boolean,\n    mapByKey?: string,\n    get?: GetFn,\n    set?: SetFn\n};\n\nexport type IPropertyTypeMap = {\n    [key: string]: IUserPropertyType\n}\n\ntype IPropertyUpdater = (dest: ISAMObject, source: any) => boolean;\n\nconst formats: { [ key in BuiltinPropertyFormats ]: PropertyFormatType } = {\n    string: {\n        // In general, parse strings as strings, but special case null's as undefined, and undefined's as undefined since String() will convert them to \"undefined\".\n        parse: (value: any) => (value === null) || (value === undefined) ? undefined : String(value),\n        isEqual: isStrictEqual\n    },\n    number: {\n        parse: Number,\n        isEqual: isStrictEqual\n    },\n    date: {\n        parse: (value: any) => {\n            if (value === null) {return undefined;}\n            if (value === undefined || value instanceof Date) { return value; }\n            return new Date(String(value));\n        },\n        isEqual: (a?: Date, b?: Date) => a?.toISOString() === b?.toISOString()\n    },\n    // Some APIs like the invitation service return dates as a number (Unix epoch time) rather than a string\n    // These still map onto the JS Date object, but need to be parsed differently.\n    date_as_number: {\n        parse: (value: any) => value === undefined ? undefined : new Date(Number(value)),\n        isEqual: (a?: Date, b?: Date) => a?.toISOString() === b?.toISOString()\n    },\n\n    // Support actual booleans, the string 'true', or non-zero numbers.\n    boolean: {\n        parse: (value: any) => value === true\n            || (typeof value === 'string' && value.toLowerCase() === 'true')\n            || (typeof value === 'number' && Boolean(value)),\n        isEqual: isStrictEqual\n    },\n    object: {\n        // Make a deep copy of the object if it is defined.\n        parse: (value: any) => value !== undefined ? deepClone(value) : undefined,\n        isEqual: isDeepEqual\n    },\n    // Sometimes the source data is only going to be merged into the destination property, so\n    // comparison only needs to happen among the top-level keys that are present in the source.\n    object_subset: {\n        parse: deepClone,\n        isEqual(destObj: any, sourceObj: any): boolean {\n            // if both are undefined, then they are equal\n            if (destObj === sourceObj) { return true; }\n            // if destObj is undefined, then it can be overwritten with sourceObj\n            // NOTE: sourceObj is expected to not be undefined because JSON doesn't support undefined properties,\n            // and so will get skipped since the sourceObj will be NotFound.\n            if (destObj === undefined) {\n                return false;\n            }\n            const sourceKeys = Object.keys(sourceObj);\n            const destObjSubset = sourceKeys.reduce((result: any, key: string) => {\n                result[key] = destObj[key];\n                return result;\n            }, {});\n            return isDeepEqual(destObjSubset, sourceObj);\n        }\n    }\n};\n\nconst KEY_REGEXP = /([^.[]+)|(\\[[^\\]]+\\])/g;\nfunction getKeys(name: string): string[] {\n    let keys = name.match(KEY_REGEXP) || [];\n    if (!keys.length) {\n        throw SAMError.create(SAMErrorCode.BAD_REQUEST, `Un-parseable key ${name}`);\n    }\n    keys = keys.map(key => {\n        // Remove brackets\n        if (key[0] === '[' && key.slice(-1) === ']') {\n            return key.slice(1, -1);\n        }\n        return key;\n    });\n    return keys;\n}\n\nfunction makeGetFn(name: string) {\n    const keys = getKeys(name);\n    return (source: any) => {\n        let value = source;\n        for (const key of keys) {\n            if (!Object.prototype.hasOwnProperty.call(value, key)) {\n                return NotFound;\n            }\n            value = value[key];\n        }\n        return value;\n    };\n}\n\nfunction makeSetFn(name: string) {\n    if (name.includes('.')) {\n        // For complex properties of the Item being updated, assumptions can't be made about how to set them,\n        // because some might be a class instance.\n        throw SAMError.create(SAMErrorCode.BAD_REQUEST, `Cannot use dot delimiter (${name}) without a custom setter`);\n    }\n    return (parsedSource: any, dest: any): void => {\n        dest[name] = parsedSource;\n    };\n}\n\nfunction makeMergeSetFn(name: string) {\n    if (name.includes('.')) {\n        // For complex properties of the Item being updated, assumptions can't be made about how to set them,\n        // because some might be a class instance.\n        throw SAMError.create(SAMErrorCode.BAD_REQUEST, `Cannot use dot delimiter (${name}) without a custom setter`);\n    }\n    return (parsedSource: any, dest: any): void => {\n        dest[name] = {\n            ...(dest[name] ?? {}),\n            ...(parsedSource ?? {})\n        };\n    };\n}\n\nfunction normalizeFormat(name: string, format?: PropertyFormat, mapByKey?: string): PropertyFormatType {\n    if (!format) {\n        // When we use mapByKey, the format is always an object as needs to have the actual mapByKey property.\n        return mapByKey ? formats.object : formats.string;\n    }\n    if (typeof format === 'string') {\n        if (!Object.prototype.hasOwnProperty.call(formats, format)) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, `Unexpected type format ${format} for ${name} property updater.`);\n        }\n        return formats[format];\n    }\n    return format as PropertyFormatType;\n}\n\nfunction normalizeType(key: string, type: IUserPropertyType): IPropertyType {\n    // When the property type is a simple string, then the source property is a simple\n    // string parameter\n    if (typeof type === 'string') {\n        return {\n            name: key,\n            format: formats.string,\n            get: makeGetFn(type),\n            set: makeSetFn(key),\n            isArray: false\n        };\n    }\n\n    const { name, format, choices, get, set, isArray, mapByKey } = type;\n    const sourceName = name ?? key;\n    return {\n        name: sourceName,\n        format: normalizeFormat(sourceName, format, mapByKey),\n        choices,\n        mapByKey,\n        isArray: isArray ?? false,\n        get: get ?? makeGetFn(name ?? key),\n        set: set ?? (format === 'object_subset' ? makeMergeSetFn(key) : makeSetFn(key))\n    };\n}\n\nfunction validateValue(dest: ISAMObject, name: string, choices: any[] | undefined, value: any): boolean {\n    if (choices && !choices.includes(value)) {\n        dest._core._environment.error(`Invalid value ${value} passed for the ${name} property. Expected one of ${ choices.join(', ') }.`);\n        return false;\n    }\n    return true;\n}\n\nfunction createPropertyUpdater(key: string, userType: IUserPropertyType): IPropertyUpdater {\n    const type = normalizeType(key, userType);\n    const { name, format, choices, get, set, isArray, mapByKey } = type;\n\n    return (dest: ISAMObject, source: any): boolean => {\n        const anyDest: any = dest;\n        const destValGetter = makeGetFn(key);\n        // If the dest property does not exist, treat it as undefined so it can be updated\n        // This prevents the `a.toISOString is not a function` error for date fields\n        const destVal = (destValGetter(anyDest) === NotFound ? undefined : destValGetter(anyDest));\n\n        let value = get(source, dest);\n        if (value === NotFound) {\n            return false;\n        }\n\n        if (mapByKey) {\n            /**\n             * The input value is just an array like the following example:\n             *\n             * [\n             *     {\n             *         name: 'working_files',\n             *         id: 'urn:1'\n             *     },\n             *     {\n             *         name: 'canvases',\n             *         id: 'urn:2'\n             *     }\n             * ]\n             *\n             * The result will be a Map object like the following:\n             *\n             *  'working_files' => {\n             *      name: 'working_files',\n             *      id: 'urn:1'\n             *  },\n             *  'canvases' => {\n             *      name: 'canvases',\n             *      id: 'urn:1'\n             *  },\n             *\n             * - In this case the 'name' property becomes the key of the map. The caller can change the key using the\n             * `mapByKey` variable.\n             * - The actual value of the map entries is just the object itself.\n             * - This value can be customized using the `format.parse` function provided by the caller.\n             * - The parsed value can be validated against a predefined list of `choices` provided by the caller.\n             */\n            if (!Array.isArray(value)) {\n                dest._core._environment.error(`Invalid value ${value} passed for the ${name} property. Expected an array.`);\n                return false;\n            }\n\n            const map = new Map();\n            for (const item of value) {\n                if (!Object.prototype.hasOwnProperty.call(item, mapByKey)) {\n                    dest._core._environment.error(`Invalid item passed for the ${name} array property. Missing ${mapByKey} property on the item of the array.`);\n                    continue;\n                }\n                const key = item[mapByKey];\n                const parsedItem = format.parse(item);\n                if (!validateValue(dest, name, choices, parsedItem)) {\n                    continue;\n                }\n                map.set(key, parsedItem);\n            }\n\n            if (isDeepEqual(destVal, map)) {\n                return false;\n            }\n\n            value = map;\n\n        } else if (isArray) {\n            if (!Array.isArray(value)) {\n                dest._core._environment.error(`Invalid value ${value} passed for the ${name} property. Expected an array.`);\n                return false;\n            }\n            // Arrays must make a copy of their initial content to avoid mutations\n            // of the original array after the value is stored inside the object.\n            const array = [];\n            for (const item of value) {\n                const parsedItem = format.parse(item);\n                if (validateValue(dest, name, choices, parsedItem)) {\n                    array.push(parsedItem);\n                }\n            }\n            if (isDeepEqual(destVal, value)) {\n                return false;\n            }\n\n            value = array;\n\n        } else {\n            value = format.parse(value);\n            if (!validateValue(dest, name, choices, value)) {\n                return false;\n            }\n            if (format.isEqual(destVal, value)) {\n                return false;\n            }\n        }\n\n        set(value, anyDest);\n        return true;\n    };\n}\n\nexport default class PropertyUpdater {\n\n    private _updaters: { updater: IPropertyUpdater; key: string}[];\n\n    constructor(map: IPropertyTypeMap) {\n        this._updaters = Object.keys(map).map(\n            (key) => {\n                return {\n                    updater: createPropertyUpdater(key, map[key]),\n                    key\n                };\n            }\n        );\n    }\n\n    update(dest: ISAMObject, source: any): string[] {\n        const propertyChanges = [];\n        for (const updateObj of this._updaters) {\n            const { updater, key } = updateObj;\n            if (updater(dest, source)) {\n                propertyChanges.push(key);\n            }\n        }\n        return propertyChanges;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport type { IItemFilter, ItemFilterRelation } from '../core/ItemFilter';\nimport type { default as AdobeAsset } from './AdobeAsset';\n\nexport interface IImplicitAdobeAssetFilterBaseOptions {\n    readonly _includeHiddenRecursive?: boolean;\n    readonly _isDiscarded?: boolean;\n    readonly _isPublished?: boolean;\n    readonly _isSharedWithYou?: boolean;\n}\n\n/**\n * Class for handling common filtering for AdobeAsset ItemSources. All implicit filters for AdobeAsset\n * should extend this class.\n */\n\nexport default abstract class ImplicitAdobeAssetFilterBase implements IItemFilter<AdobeAsset> {\n    private _isDiscarded: boolean = false;\n    private _isPublished: boolean = false;\n    private _isSharedWithYou: boolean = false;\n    private _includeHiddenRecursive: boolean = false;\n\n    constructor(options?: Partial<IImplicitAdobeAssetFilterBaseOptions>) {\n        this._includeHiddenRecursive = !!(options?._includeHiddenRecursive);\n        this._isDiscarded = !!(options?._isDiscarded);\n        this._isPublished = !!(options?._isPublished);\n        this._isSharedWithYou = !!(options?._isSharedWithYou);\n    }\n\n    matches(item: AdobeAsset): boolean {\n\n        // If a Composite has zero size, it's probably an intermediate that is pending content, so\n        // it should not be visible until the content is available. Client apps are responsible for cleaning\n        // up Composites that never get content.\n\n        if (item.isComposite && item.sizeInBytes === 0) {\n            return false;\n        }\n\n        if (item.isDiscarded !== this._isDiscarded) {\n            return false;\n        }\n\n        if ((item._isSWYAsset_NoLazyLoad) && item._isSWYAsset_NoLazyLoad !== this._isSharedWithYou) {\n            return false;\n        }\n\n        // Do not include children of directly discarded Assets in isDiscarded\n        if (this._isDiscarded && item['_assetState'] === 'DISCARDED_PARENT') {\n            return false;\n        }\n\n        if (item.isPublished !== this._isPublished) {\n            return false;\n        }\n\n        // ONS subscriptions may cause loading of /cloud-content-archive or /archive when monitoring discardSource list\n        // items but these folders should never appear in any list.\n        if (item.repoPath === '/cloud-content-archive' || item.repoPath === '/archive') {\n            return false;\n        }\n\n        // For all sources of AdobeAsset, the shellVisibility field dictates whether it can be seen in UI,\n        // except for when items in hidden folders (hiddenRecursive) must be included.\n        return !((item.shellVisibility === 'hiddenSelf' || (item.shellVisibility === 'hiddenRecursive' && !this._includeHiddenRecursive)));\n    }\n\n    get hash(): string {\n        return (this._isDiscarded ? 'discarded' : '')\n        + (this._isPublished ? 'published' : '')\n        + (this._isSharedWithYou ? 'shared' : '')\n        + (this._includeHiddenRecursive ? 'hiddenRecursive' : '');\n    }\n\n    getRelationToFilter(other: ImplicitAdobeAssetFilterBase): ItemFilterRelation {\n        if (this._isDiscarded !== other._isDiscarded) {\n            return 'disjoint';\n        }\n        if (this._isPublished !== other._isPublished) {\n            return 'disjoint';\n        }\n\n        if (this._includeHiddenRecursive !== other._includeHiddenRecursive) {\n            return 'disjoint';\n        }\n\n        if (this._isSharedWithYou !== other._isSharedWithYou) {\n            return 'disjoint';\n        }\n\n        return 'subset';\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport path from 'path-browserify';\nimport { IItemFilter, ItemFilterRelation } from '../core/ItemFilter';\nimport type { default as AdobeAsset } from './AdobeAsset';\nimport ImplicitAdobeAssetFilterBase from './ImplicitAdobeAssetFilterBase';\n\nexport interface IAdobeAssetSearchFilterOptions {\n    readonly deepSearch?: boolean;\n    readonly query?: string;\n    readonly asset?: AdobeAsset;\n}\n\nexport default class AdobeAssetSearchFilter extends ImplicitAdobeAssetFilterBase implements IItemFilter<AdobeAsset> {\n    private _deepSearch?: boolean | undefined;\n    private _asset?: AdobeAsset;\n    _query?: string;\n\n    constructor(options?: Partial<IAdobeAssetSearchFilterOptions>) {\n        super();\n        this._query = options?.query;\n        this._deepSearch = options?.deepSearch;\n        this._asset = options?.asset;\n    }\n\n    get hash(): string {\n        return [\n            this._asset?.id,\n            super.hash,\n            this.deepSearch !== undefined ? `deepSearch=${this._deepSearch}` : undefined,\n            this.query ? `query=${this._query}` : undefined,\n        ].filter(x => x).join(':');\n    }\n\n    get deepSearch(): boolean | undefined {\n        return this._deepSearch;\n    }\n\n    get asset(): AdobeAsset | undefined {\n        return this._asset;\n    }\n\n    get query(): string | undefined {\n        return this._query;\n    }\n\n    // The matching rules USS are deceptively complex, and could change over time. Attempting to\n    // replicate here could result in items being incorrectly filtered out or incorrectly included.\n    // Search Lists should not try to share items from Lists with similar queries, other\n    // than treating the queries as case-insensitve.\n    // TODO: Lists filtered with AdobeAssetSearchFilter currently take on unwanted items:\n    // https://jira.corp.adobe.com/browse/SAM-3118\n    matches(item: AdobeAsset): boolean {\n\n        // USS does not give repository id of an item. So compare repository id\n        // only when it is available on both assets\n        if (this.asset && this.asset.repositoryID && item.repositoryID\n            && this.asset.repositoryID !== item.repositoryID) {\n            return false;\n        }\n\n        // If asset is set, check whether item should belong this search or not based on\n        // deep search. If deep search is true this asset should be container for incoming\n        // item else this asset should be immediate parent of incoming asset\n        if (this.asset && this.asset.repoPath && item.repoPath) {\n            const assetRepoPath = this.asset.repoPath;\n            if (this.deepSearch) {\n                if (!item.repoPath.startsWith(path.join(assetRepoPath, '/'))) {\n                    return false;\n                }\n            } else if (assetRepoPath !== item.repoPath.substring(0, item.repoPath.lastIndexOf('/'))) {\n                return false;\n            }\n        }\n\n        return super.matches(item);\n    }\n\n    getRelationToFilter(other: AdobeAssetSearchFilter): ItemFilterRelation {\n        const thisFilterRepoID = this.asset?.repositoryID;\n        const otherFilterRepoID = other.asset?.repositoryID;\n        if (thisFilterRepoID && otherFilterRepoID && thisFilterRepoID !== otherFilterRepoID) {\n            return 'disjoint';\n        }\n\n        if (this.deepSearch !== other.deepSearch\n            || this.query?.toLowerCase()  !== other.query?.toLowerCase()) {\n            return 'disjoint';\n        }\n\n        return super.getRelationToFilter(other);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { IAdobeAssetOrderBy } from '../interface/AssetModel';\n\nimport { compareStrings, compareValues, createItemOrderFactory, IComparatorMap } from '../core/ItemOrder';\nimport AdobeAsset from './AdobeAsset';\n\nexport type AdobeAssetOrderField =\n    | 'name'\n    | 'created'\n    | 'modified'\n    | 'shared';\n\nexport const OrderFieldToIAdobeAssetOrderBy: { [key in AdobeAssetOrderField]: IAdobeAssetOrderBy } = {\n    'name': 'repo:name',\n    'created': 'storage:deviceCreateDate',\n    'modified': 'storage:deviceModifyDate',\n    // R-API doesn't sort on share date\n    'shared': 'storage:deviceModifyDate'\n};\n\nconst OrderFieldToComparator: IComparatorMap<AdobeAsset, AdobeAssetOrderField> = {\n    name(a: AdobeAsset, b: AdobeAsset): number {\n        return compareStrings(a.name, b.name);\n    },\n    created(a: AdobeAsset, b: AdobeAsset): number {\n        return compareValues(a.created, b.created);\n    },\n    modified(a: AdobeAsset, b: AdobeAsset): number {\n        return compareValues(a.modified, b.modified);\n    },\n    shared(a: AdobeAsset, b: AdobeAsset): number {\n        return compareValues(a.shared, b.shared);\n    }\n};\n\nexport default class AdobeAssetOrder extends createItemOrderFactory(OrderFieldToComparator) {\n    static default = new AdobeAssetOrder('descending', 'modified');\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport AdobeAsset from './AdobeAsset';\nimport { getRapiAppMetadataSelectors } from '../interface/AssetModel';\nimport { IItemLoader, IItemLoaderOptions, ILoadedPage, ILoadNextPage } from '../core/ItemLoader';\nimport ItemPool from '../core/ItemPool';\nimport { AdobeAssetConfig } from './AdobeAssetSource';\nimport AdobeAssetFilter from './AdobeAssetFilter';\nimport { OrderFieldToIAdobeAssetOrderBy } from './AdobeAssetOrder';\nimport { RelType } from '../interface/LinkUtils';\nimport { EmbedSpecifier } from '../interface/RepositoryModel';\nimport { ISAMCorePrivate } from '../indexPrivate';\nimport type Library from '../libraries/Library';\nimport { LibraryData, LibrarySpecificData } from '../interface/LibraryModel';\nimport SAMError, { SAMErrorCode } from '../core/SAMError';\n\nexport default class AdobeAssetDirectoryLoader implements IItemLoader<AdobeAssetConfig> {\n\n    constructor(\n        private _assetPool: ItemPool<AdobeAsset>,\n        private _asset: AdobeAsset,\n        private _core: ISAMCorePrivate,\n        private _includePermissions?: boolean,\n        private _loadLibraryData?: boolean\n    ) {\n    }\n\n    supportsFilter(filter?: AdobeAssetFilter): boolean {\n        // TODO: ?? can be undefined but can't be undefined ??\n        return filter !== undefined;\n    }\n\n    async loadPage(options: IItemLoaderOptions<AdobeAssetConfig>): Promise<ILoadedPage<AdobeAssetConfig>> {\n        return await this._loadPage(options);\n    }\n\n    private async _loadPage(options: IItemLoaderOptions<AdobeAssetConfig>, start?: string): Promise<ILoadedPage<AdobeAssetConfig>> {\n        const { order, limit, filter, implicitFilter } = options;\n        const mediaTypes: string[] = [ ...(('mediaTypes' in implicitFilter && implicitFilter['mediaTypes']) || ('mediaTypes' in filter && filter['mediaTypes'])\n            || []) ];\n\n\n        /* Note: re-evaluate this after we have more data about the Project.libraries use case\n         * We're currently calling for melville data for every page load.\n         * We don't think it's a problem because it reduces code complexity and\n         * we predict the standard use case to be just one page of libraries.\n         * If that changes in future, we should re-evaluate this strategy.\n         */\n        let librariesDataPromise = undefined;\n        if (this._loadLibraryData) {\n            if (!this._asset.isProject) {\n                throw SAMError.create(SAMErrorCode.UNSUPPORTED, `Asking for child libraries from non-project asset with id: ${this._asset.id}`);\n            } else {\n                // TODO [SHARED-975]: This doesn't fetch subsequent pages (max list of 50). Needs to go through the LibraryListLoader.\n                librariesDataPromise = this._core.hostAssetContext._libraryInterface.getLibrariesForProject(this._asset.id);\n            }\n        }\n        // We will ignore the update if we had local changes sooner than this timestamp.\n        const latency = this._assetPool._core._environment.getValue('ASSETS_LIST_UPDATE_LATENCY');\n        const mostRecentValidMutation = Date.now() - latency;\n\n\n        const embed: EmbedSpecifier[] = [ {\n            'resource': {\n                'reltype': RelType.APP_METADATA\n            },\n            'selectors': getRapiAppMetadataSelectors()\n        } ];\n        if (this._includePermissions) {\n            embed.push(\n                {\n                    'resource': {\n                        'reltype': RelType.AC_EFFECTIVE\n                    }\n                }\n            );\n        }\n\n        // SAM-3087: USS doesn't include PAGE link\n        await this._asset._ensureLink(RelType.PAGE);\n        const assetInterface = await this._asset._getAssetInterface();\n        const rapiPage = await assetInterface.getChildAssets({\n            orderBy: OrderFieldToIAdobeAssetOrderBy[order.field],\n            orderDirection: order.direction,\n            start,\n            limit,\n            type: mediaTypes,\n            embed\n        });\n\n        // A \"mutation\" session is used here to track the time when a change is made to an Asset that is known to be\n        // fresh (since it came from R-API). This helps avoid problems where fresh data from R-API gets overwritten by\n        // stale data (e.g. from USS due to indexing lag). It also should use createLoaderMutationSession\n        // (SAM-2973, SAM-3017).\n        const session = this._assetPool.createLoaderMutationSession();\n\n        if (this._asset.isProject) {\n            // Update the project's children with the repo:ancestors from the parent project. This is to ensure that\n            // the user's root and the project's root are included in the child's repo:ancestors. This is only an issue\n            // for children of Project, so restricting this to only Projects.\n            this._core.hostAssetContext._adobeAssetUpdater.updateLocalItem(session, this._asset, { 'repo:ancestors': rapiPage['repo:ancestors' ] });\n        }\n\n        const libraryContext = await this._core.getLibraryContext();\n        const items = this._core._adobeAssetFactory.assetsFromRepoMetadata(session, rapiPage.children.map((item) => {\n            // Directory listings don't include repo:ancestors, but since we know the parent asset,\n            // we can construct it based on the parent's repo:ancestors\n            if (!item['repo:ancestors']) {\n                item['repo:ancestors'] = [ ...(this._asset.ancestorIDs ?? []), this._asset.id ];\n            }\n            return item;\n        }), libraryContext);\n\n        let librariesInPage: Library[];\n        if (this._loadLibraryData) {\n            librariesInPage = items.filter((item): item is Library => item.isLibrary);\n            librariesInPage.forEach(library => library._setLibraryLoadState('LOADING'));\n        }\n        session.commit();\n\n        if (this._loadLibraryData) {\n            librariesDataPromise!\n                .then((librariesData) => this._updateLibrariesData(librariesInPage, librariesData));\n        }\n\n        // Check if we have another page to load.\n        let loadNextPage: ILoadNextPage<AdobeAssetConfig> | undefined;\n\n        const nextStart = rapiPage._page.next;\n        if (nextStart) {\n            loadNextPage = (options: IItemLoaderOptions<AdobeAssetConfig>) =>\n                this._loadPage(options, nextStart);\n        }\n\n        return {\n            items,\n            loadNextPage,\n            mostRecentValidMutation\n        };\n    }\n\n    // Libraries listing may have stale data due to USS indexing delays. Thus, this method\n    // retrieves LibrarySpecificData from LibraryData, which is always safe to use as it will not overwrite RAPI data.\n    // TODO [SHARED-902]: Move to LibraryUtils\n    private _getSafeLibraryData(libraryData: LibraryData): Partial<LibraryData> {\n        if (!libraryData) { return {}; }\n        const { library_urn, id, bookmark, name, ownership, roles }: LibrarySpecificData = libraryData;\n        return { library_urn, id, bookmark, name, ownership, roles };\n    }\n\n    /**\n     * Given a set of libraries that have been loading, update their data and loading state with the data from Melville.\n     */\n    private async _updateLibrariesData(librariesToUpdate: Library[], librariesData: LibraryData[]): Promise<void> {\n        const session = this._core.hostAssetContext._assetPool.createUpdateSession<Library>();\n        const libraryContext = await this._core.getLibraryContext();\n\n        librariesToUpdate.forEach(library => {\n            const libraryData = librariesData.find(item => item.library_urn === library.id);\n            if (libraryData) {\n                const librarySpecificData = this._getSafeLibraryData(libraryData);\n                libraryContext._libraryUpdater.updateLocalItem(session, library, librarySpecificData);\n                library._setLibraryLoadState('LOADED');\n            } else {\n                // USS indexing delays may cause Melville non-public libraries listing data to be stale.\n                // Thus it is possible that we have RAPI data for a new library but no matching melville data in the listing.\n                // Setting the library to NOT_LOADED will trigger lazy loading if the library is being used,\n                // which will cause Melville to pull the up-to-date data for this library from platform.\n                library._setLibraryLoadState('NOT_LOADED');\n            }\n        });\n        session.commit();\n    }\n\n}\n\n\n\n","/*************************************************************************\n*   ADOBE CONFIDENTIAL\n*\n*   Copyright 2023 Adobe\n*   All Rights Reserved.\n*\n*   NOTICE:  All information contained herein is, and remains\n*   the property of Adobe and its suppliers, if any. The intellectual\n*   and technical concepts contained herein are proprietary to Adobe\n*   and its suppliers and are protected by all applicable intellectual\n*   property laws, including trade secret and copyright laws.\n*   Dissemination of this information or reproduction of this material\n*   is strictly forbidden unless prior written permission is obtained\n*   from Adobe.\n**************************************************************************/\n\nimport type {\n    IAppMetadata,\n    RepositoryMetadata\n} from './RepositoryModel';\n\nexport enum USSv3OrderField {\n    // TODO: need last access date before switching RecentsMRU to USSv3\n    Created = 'rm.storage:deviceCreateDate',\n    Modified = 'rm.storage:deviceModifyDate',\n    Name = 'rm.repo:name'\n}\n\nexport enum USSv3OrderDir {\n    Ascending = 'ASC',\n    Descending = 'DESC'\n}\n\nexport interface ISearchQueryEntrySort {\n    sortOrderBy: USSv3OrderField;\n    sortOrder: USSv3OrderDir;\n}\n\nexport enum USSv3FilterField {\n    MEDIA_TYPE = 'rm.dc:format',\n    DIRECTORY_TYPE = 'am.project:directoryType',\n    INHERITANCE_TYPE  = `function:missing`\n}\n\nexport interface ISearchQueryEntryFilter {\n    // mediaType\n    [USSv3FilterField.MEDIA_TYPE]?: string[];\n    [USSv3FilterField.INHERITANCE_TYPE]?: {\n        funcParams: { fields: string[]; }\n    };\n    [USSv3FilterField.DIRECTORY_TYPE]?: string[];\n}\n\nexport enum FetchFields {\n    SharedBy = 'cm.sharedBy',\n    LastAccessDate = 'am.shell:lastActivity.date',\n    Collaborator =  'cm.collaborator',\n    PublicCollaborator = 'cm.publicCollaborator',\n    ParentProjectId = 'am.cc:inherited.cc:team.repo:assetId',\n    StudentAssignmentAssetId = 'am.cc:inherited.cc:studentAssignment.repo:assetId',\n    StudentAssignmentDirectoryId = 'am.cc:inheritable.cc:studentAssignment.repo:assetId',\n    // We need both projects and its children to show up in global search\n    CCInherited = 'am.cc:inherited',\n    CCInheritable = 'am.cc:inheritable',\n    // App metadata field required for Express\n    HzDocumentMetadata = 'am.hz:documentMetadata',\n    CreatedFromUpload = 'am.cc:createdFromUpload',\n    CreatedByClientId = 'rm.createdByClientId'\n}\n\nexport interface ISearchQueryEntry {\n    start: number;\n    limit: number;\n    id?: string;\n    textQuery?: string;\n    sorts?: ISearchQueryEntrySort[];\n    scope?: { entities: ('AcpAsset')[] };\n    filters?: ISearchQueryEntryFilter[];\n    fetchFields?: FetchFields[];\n}\n\nexport interface ISearchQuery {\n    experienceId: string;\n    queries: ISearchQueryEntry[];\n}\n\ntype USSQueryResults = {\n    id: string;\n    status: { httpCode: number; };\n    metadata: {\n        totalHits: number;\n        start: number;\n        limit: number;\n    };\n    items?: USSItemMetadata[];\n}\n\nexport type USSResponse = {\n    experienceId: string;\n    status: { httpCode: number; };\n    queryResults: USSQueryResults[];\n}\n\nexport type USSItemMetadata = {\n    id: string;\n    cm: {\n        sharedBy: string[]\n    };\n    rm: RepositoryMetadata;\n    am: IAppMetadata;\n};\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { IUSSAdobeAssetOrderBy } from '../interface/AssetModel';\nimport { compareStrings, compareValues, createItemOrderFactory, IComparatorMap } from '../core/ItemOrder';\nimport AdobeAsset from './AdobeAsset';\nimport { LastAccessedOrderField } from '../interface/USSModel';\nimport { USSv3OrderField } from '../interface/USSv3Model';\n\nexport type USSAdobeAssetOrderField =\n    | 'name'\n    | 'created'\n    | 'modified'\n    | 'lastAccessed';\n\nexport const OrderFieldToIUSSAdobeAssetOrderBy: { [key in USSAdobeAssetOrderField]: IUSSAdobeAssetOrderBy } = {\n    'name': 'asset_name',\n    'created': 'create_date',\n    'modified': 'modify_date',\n    'lastAccessed': LastAccessedOrderField\n};\n\nexport const OrderFieldToUSSv3OrderField: { [key in USSAdobeAssetOrderField]: USSv3OrderField } = {\n    'name': USSv3OrderField.Name,\n    'created': USSv3OrderField.Created,\n    'modified': USSv3OrderField.Modified,\n    // TODO: update with correct field once V3 supports it\n    'lastAccessed': USSv3OrderField.Modified\n};\n\nconst OrderFieldToComparator: IComparatorMap<AdobeAsset, USSAdobeAssetOrderField> = {\n    name(a: AdobeAsset, b: AdobeAsset): number {\n        return compareStrings(a.name, b.name);\n    },\n    created(a: AdobeAsset, b: AdobeAsset): number {\n        return compareValues(a.created, b.created);\n    },\n    modified(a: AdobeAsset, b: AdobeAsset): number {\n        return compareValues(a.modified, b.modified);\n    },\n    lastAccessed(a: AdobeAsset, b: AdobeAsset): number {\n        return compareValues(a.lastAccessed, b.lastAccessed);\n    }\n};\n\nexport default class USSAdobeAssetOrder extends createItemOrderFactory(OrderFieldToComparator) {\n    static default = new USSAdobeAssetOrder('descending', 'modified');\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport AdobeAsset from './AdobeAsset';\nimport { IItemLoaderOptions, ILoadedPage } from '../core/ItemLoader';\nimport ItemPool from '../core/ItemPool';\nimport { AdobeAssetSearchConfig } from './AdobeAssetSource';\nimport AdobeAssetSearchFilter from './AdobeAssetSearchFilter';\nimport { OrderFieldToIUSSAdobeAssetOrderBy } from './USSAdobeAssetOrder';\nimport type AdobeAssetSearchInterface from '../interface/AdobeAssetSearchInterface';\nimport { USSMetadata, USSResponse } from '../interface/USSModel';\nimport USSLoaderHelper, { IGetUSSResults, IUSSLoader } from './USSLoaderHelper';\nimport { ISAMCorePrivate } from '../indexPrivate';\nimport { USSAssetFilterName } from './USSAssetFilterName';\nimport USSAdobeAssetFilter from './USSAdobeAssetFilter';\nimport { AssetsListingSearchOptions } from '../interface/AdobeAssetSearchInterface';\n\nexport default class AdobeAssetDirectorySearchLoader implements IUSSLoader<AdobeAssetSearchConfig> {\n    private _ussLoaderHelper: USSLoaderHelper<AdobeAssetSearchConfig>;\n\n    constructor(\n        assetPool: ItemPool<AdobeAsset>,\n        core: ISAMCorePrivate,\n        private _adobeAssetSearchInterface: AdobeAssetSearchInterface,\n        private _asset: AdobeAsset,\n        private _implicitFilter: AdobeAssetSearchFilter\n    ) {\n        this._ussLoaderHelper = new USSLoaderHelper(assetPool, core, this);\n    }\n\n    supportsFilter(filter?: any): boolean {\n        // If we don't provide a filter at all, then we cannot use the loader\n        return filter !== undefined;\n    }\n\n    async loadPage(options: IItemLoaderOptions<AdobeAssetSearchConfig>): Promise<ILoadedPage<AdobeAssetSearchConfig>> {\n        return this._ussLoaderHelper.loadPage(options);\n    }\n\n    /**\n     * @package -- only for use by USSLoaderHelper\n     */\n    async _getUSSResults({\n        start,\n        limit,\n        order,\n        mediaTypes,\n        excludeMediaTypes,\n        filter\n    }: IGetUSSResults<AdobeAssetSearchConfig>): Promise<USSResponse> {\n        const query = this._implicitFilter?._query;\n        const deepSearch = Boolean(this._implicitFilter.deepSearch);\n\n        const options: Partial<AssetsListingSearchOptions> = {\n            orderBy: OrderFieldToIUSSAdobeAssetOrderBy[order.field],\n            orderDirection: order.direction,\n            start,\n            limit,\n            mediaTypes,\n            excludeMediaTypes,\n            query,\n            deepSearch,\n            assetId: this._asset.cloudID\n        };\n\n        if (filter.name === USSAssetFilterName) {\n            const ussFilter = filter as USSAdobeAssetFilter;\n            options.userId = ussFilter.userId;\n            options.uploadedFrom = ussFilter.uploadedFrom;\n        }\n\n        return this._adobeAssetSearchInterface.getFilteredAssets(options);\n    }\n\n    /**\n     * @package -- only for use by USSLoaderHelper\n     */\n    _getItemData: (item: Partial<USSMetadata>) => Partial<USSMetadata> = this._getItemDataWithRepoId(this._asset.repositoryID);\n\n    /**\n     * @package -- only for use by USSLoaderHelper\n     */\n    private _getItemDataWithRepoId(repoID: string) {\n        // TODO: Patching should be removed once https://jira.corp.adobe.com/browse/SRCH-1989 is fixed\n        //       and re-indexing is finished, which has ETA of Feb 28 2023\n        return (item: Partial<USSMetadata>) => {\n            return {\n                ...item,\n                'repo:repositoryId': repoID\n            };\n        };\n    }\n}\n","/*************************************************************************\n*   ADOBE CONFIDENTIAL\n*\n*   Copyright 2022 Adobe\n*   All Rights Reserved.\n*\n*   NOTICE:  All information contained herein is, and remains\n*   the property of Adobe and its suppliers, if any. The intellectual\n*   and technical concepts contained herein are proprietary to Adobe\n*   and its suppliers and are protected by all applicable intellectual\n*   property laws, including trade secret and copyright laws.\n*   Dissemination of this information or reproduction of this material\n*   is strictly forbidden unless prior written permission is obtained\n*   from Adobe.\n**************************************************************************/\nimport { IItemList, STATE_CHANGED } from '../core/ItemList';\nimport EventEmitter from 'events';\nimport { AssetListStatus } from '../core/ItemLoaderState';\n\n/**\n * Returns a Promise that resolves when a List is loaded.\n * @param list to monitor for loading\n */\nexport function waitForListLoad(list: IItemList<any>): Promise<void> {\n    const listEventSource = list as unknown as EventEmitter;\n\n    return new Promise(resolve => {\n        function onStatusChange(): void {\n            if (list.status !== AssetListStatus.Loading) {\n                listEventSource.off(STATE_CHANGED, onStatusChange);\n                resolve();\n            }\n        }\n\n        listEventSource.on(STATE_CHANGED, onStatusChange);\n        // if List is already loaded, resolve now\n        onStatusChange();\n    });\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ItemList, {\n    IItemSourceConfig,\n    IItemList,\n    ILoadOptions,\n    LIST_FULLY_LOADED,\n} from './ItemList';\nimport { AssetListStatus } from './ItemLoaderState';\nimport { IItemLoader } from './ItemLoader';\nimport { getFiltersRelation, ItemFilterRelation } from './ItemFilter';\nimport ItemPool from './ItemPool';\nimport WeakRef from './WeakRef';\nimport SAMError, { SAMErrorCode } from './SAMError';\nimport EverythingFilter from './EverythingFilter';\nimport { waitForListLoad } from '../utils/waitForListLoad';\n\ntype IListHash = string;\ntype ListByHash<ItemListType extends object> = Map<IListHash, WeakRef<ItemListType>>;\n\ntype IListCandidate<ItemListType> = {\n    list: ItemListType;\n    filterRelation: ItemFilterRelation | undefined;\n    generation: number;\n    length: number;\n}\n\n// TODO: change OrderDirection/Field to use SAM.cpp enums\n// https://jira.corp.adobe.com/browse/SAM-1644\nexport enum OrderDirection {\n    Ascending,\n    Descending\n}\nexport enum OrderField {\n    Name,\n    Modified,\n    Created,\n    Shared\n}\n\nfunction candidateSort<ItemListType>(a: IListCandidate<ItemListType>, b: IListCandidate<ItemListType>): number {\n    if (a.filterRelation !== b.filterRelation) {\n        // We prefer to start from a list that contains as many items as possible,\n        // so a list that can generate a complete `subset` must be moved to the left.\n        return a.filterRelation === 'subset' ? -1 : 1;\n    }\n\n    if (a.generation !== b.generation) {\n        // Newer generations must be moved to the left.\n        // Return a negative number if a.generation is larger.\n        return b.generation - a.generation;\n    }\n\n    // Lists with more items move left.\n    // Return a negative number if a.length is larger.\n    return b.length - a.length;\n}\n\n/**\n * ItemSource is the primary class and interface for interacting with lists of items\n * throughout SAM.js. It holds the only reference to the cache of lists which allows\n * SAM.js to be much more efficient when applying new filters and fetching new lists.\n *\n * @usage Instances of to this class must be cached so clients can\n * take advantage of shared cached lists.\n */\n\nexport default class ItemSource<ItemConfig extends IItemSourceConfig> {\n\n    private _lists: ListByHash<ItemList<ItemConfig>> = new Map();\n\n    // To ensure that we always have an implicit filter, we will use the EverythingFilter as a default\n\n    constructor(\n        private _itemPool: ItemPool<ItemConfig['type']>,\n        private _loaders: IItemLoader<ItemConfig>[],\n        protected _implicitFilter: ItemConfig['implicitFilter'] = new EverythingFilter()\n    ) {\n    }\n\n    // [SAM-2302] SAMCpp.ts patches SAM.cpp to support two different call signatures. Once CDO has moved to using\n    // SAM.js-style getList and SAM.cpp supports the SAM.js call signature, this can be removed.\n    getList(orderDir: OrderDirection, orderField: OrderField): IItemList<ItemConfig>;\n    // eslint-disable-next-line no-dupe-class-members\n    getList(order: ItemConfig['order'], filter?: ItemConfig['filter'], loadOptions?: ILoadOptions): IItemList<ItemConfig>;\n    // To ensure that we always have an explicit filter, we will use the EverythingFilter as a default\n    // eslint-disable-next-line no-dupe-class-members\n    getList(\n        order: (ItemConfig['order'] | OrderDirection),\n        filter: (ItemConfig['filter'] | OrderField) = new EverythingFilter(),\n        loadOptions?: ILoadOptions\n    ): IItemList<ItemConfig> {\n        if (typeof order === 'number' || typeof filter === 'number') {\n            throw SAMError.create(\n                SAMErrorCode.UNSUPPORTED,\n                'Using OrderDirection and OrderField is not implemented in SAM.js, and will be deprecated in SAM.cpp'\n            );\n        }\n\n        let list: ItemList<ItemConfig> | undefined = this._getExistingList(order, filter);\n\n        // If the list has been deactivated, then we cannot use the list anymore\n        // and we have to create a new one.\n\n        if (!list) {\n            // If this is an internal list, then we can bootstrap the\n            // contents of the list based on a similar list in the cache.\n            // This way we don't have to reload the contents when changing\n            // sort order.\n            const mostCompleteList = this._getMostCompleteCompatibleList(filter);\n            list = new ItemList<ItemConfig>(\n                this._itemPool,\n                this._loaders,\n                order,\n                this._implicitFilter,\n                filter,\n                mostCompleteList,\n                loadOptions\n            );\n            // When a list fully loads, copy its items to other compatible lists\n            list.on(LIST_FULLY_LOADED, () => this._onListFullyLoaded(list!));\n            this._lists.set(this._getListHash(order, filter, this._implicitFilter), new WeakRef(list));\n        } else {\n            // The client may be passing in different loadOptions than what was specified for the\n            // existing List. Try to accommodate these new options without negatively impacting\n            // other clients of the same List. If the client did not explicitly specify refreshTimeout, assume\n            // that the existing list should not be refreshed. This is for better backward-compatibility for\n            // cases where clients expected that `getList()` would not automatically load data in order to make use\n            // of a cached List.\n            list._updateLoadOptions({ refreshTimeout: -1, ...loadOptions });\n        }\n\n        if (list.status === AssetListStatus.NotStarted) {\n            // Start loading.\n            list.refresh();\n        }\n\n        return list;\n    }\n\n    /**\n     * @TODO_Deprecation will be marked as deprecated on or after 2024-10-01 and removed on or after 2025-01-01\n     */\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    getListWithTypes(orderDir: OrderDirection, orderField: OrderField, types: string[]) {\n        throw SAMError.create(SAMErrorCode.UNSUPPORTED, 'getListWithTypes is not implemented in SAM.js and will be deprecated in SAM.cpp');\n    }\n\n    private _getListHash(order: ItemConfig['order'], filter: ItemConfig['filter'], implicitFilter: ItemConfig['implicitFilter']): string {\n        return `${implicitFilter.hash}:${filter.hash}:${order.hash}`;\n    }\n\n    /**\n     * @package -- for use in SAM.js only\n     */\n    _getExistingList(order: ItemConfig['order'], filter: ItemConfig['filter']): ItemList<ItemConfig> | undefined {\n        const existingHash = this._getListHash(order, filter, this._implicitFilter);\n        const listWeakRef = this._lists.get(existingHash);\n        if (listWeakRef) {\n            return listWeakRef.deref();\n        }\n    }\n\n    public setNeedsRefresh() {\n        for (const list of this._getLists()) {\n            list.setNeedsRefresh();\n        }\n    }\n\n    /**\n     * Find an already loaded list that is a good candidate to borrow items for when creating a new list.\n     *\n     * For example, switching the sorting order of a list would have the same filter,\n     * so it should be ok to just run that entirely on the client side.\n     *\n     * Another example is filtering down some items. If we already loaded a list that contained these items,\n     * then we can build the filtered down list by just executing the same filter on the client side.\n     *\n     * @param requestedFilter Filter of the new list.\n     * @returns The best candidate list that could be used as a starting point.\n     */\n    private _getMostCompleteCompatibleList(requestedFilter?: ItemConfig['filter']): IItemList<ItemConfig> | undefined {\n        const candidates: IListCandidate<IItemList<ItemConfig>>[] = [];\n\n        for (const list of this._getLists()) {\n            if (list.status === AssetListStatus.ReadyFullyLoaded) {\n                const filterRelation = getFiltersRelation(requestedFilter, list.filter);\n                if (filterRelation !== 'disjoint') {\n                    candidates.push({ list, filterRelation, generation: list.generation, length: list.items.length });\n                }\n            }\n        }\n\n        // We want to pick the item with the newest items, or the list that has the largest subset of items.\n        candidates.sort(candidateSort);\n\n        // The first item in the list is the best candidate.\n        return candidates[0]?.list;\n    }\n\n    private *_getLists() {\n        const lists = this._lists;\n        for (const [ hash, listRef ] of lists.entries()) {\n            const list = listRef.deref();\n            if (!list) {\n                // The weak ref has expired, remove it from the map.\n                // Note that JS Maps are ok with deletions during iteration.\n                lists.delete(hash);\n                continue;\n            }\n            yield list;\n        }\n    }\n\n    /**\n     * Copies fully loaded lists to compatible lists when load completes.\n     */\n    private _onListFullyLoaded(loadedList: ItemList<ItemConfig>) {\n        if (loadedList.status !== AssetListStatus.ReadyFullyLoaded) {\n            return;\n        }\n\n        for (const list of this._getLists()) {\n            // Other lists that are subsets of the loaded list can be inferred to be fully loaded, too.\n            if (list !== loadedList\n                && getFiltersRelation(list.filter, loadedList.filter) === 'subset'\n            ) {\n                // Don't update lists that are loading, as it could interfere with its generation tracking\n                waitForListLoad(list).then(() => {\n                    // Skip lists that are fresher than the loaded list\n                    if (list.completedGeneration >= loadedList.completedGeneration) {\n                        return;\n                    }\n                    list._applyListItemsFrom(loadedList);\n                });\n            }\n        }\n    }\n}\n\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { AssetLinks } from '../interface/RepositoryModel';\nimport ItemBase from '../core/ItemBase';\nimport { ISAMObject } from '../indexPrivate';\nimport { observable } from '../core/decorators';\nimport PropertyUpdater from '../core/PropertyUpdater';\nimport ItemUpdater from '../core/ItemUpdater';\nimport { getURLFromLinks, RelType } from '../interface/LinkUtils';\nimport AssetInterface, { VersionPatchTypes } from '../interface/AssetInterface';\nimport SAMError, { SAMErrorCode } from '../core/SAMError';\nimport { RenditionFetcher, RenditionStatus, RenditionType } from '../utils/RenditionFetcher';\nimport ManifestResource from './ManifestResource';\n\nexport interface IAssetVersion {\n    // These fields come from the version history listing\n    version: string;\n    created: string;\n    created_by: string;\n    milestone: IVersionMilestone | undefined;\n    _links: AssetLinks;  // links for this version\n    // These fields are provided from AssetVersionLoader using data from the parent AdobeAsset's AssetInterface\n    assetId: string;\n    assetEtag: string;\n    assetLinks: AssetLinks;\n}\n\nexport interface IVersionMilestone {\n    label?: string;\n    description?: string;\n}\n\nexport default class AssetVersion extends ItemBase implements ISAMObject {\n    // We are intentially setting a static etag.\n    // Using the HEAD version of the asset's etag will cause unintended side affects.\n    private _etag: string = 'static-etag';\n    // These fields come from the parent Asset\n    private _assetId: string = '';\n    private _assetEtag: string = '';\n    private _assetLinks?: AssetLinks;\n\n    // These fields come from the AssetVersionLoader\n    private _createdAt: Date = new Date();\n    private _createdBy: string = '';\n    private _label?: string;\n    private _description?: string;\n    private __links?: AssetLinks;\n    private _renditionFetcher: RenditionFetcher | undefined;\n    // @ts-ignore\n    private fr: FinalizationRegistry | undefined;\n\n    private _manifest: ManifestResource = new ManifestResource(this._core, this);\n\n    private get _headAssetInterface() {\n        // NOTE: this AssetInterface is tied to the parent AdobeAsset for all AssetVersion instances. Where API\n        // calls are version-specific, the links need to come from this.__links; if the API call is not specific to\n        // a particular version, then the links need to come from `this._assetLinks`.\n        return new AssetInterface(\n            this._core.hostAssetContext._rapi,\n            this._assetId,\n            this._assetLinks!,\n            // etag only applies to the head version, and isn't needed\n            // by version history R-API calls, but is required for AssetInterface.\n            this._assetEtag\n        );\n    }\n\n    async _getAssetInterface() {\n        return new AssetInterface(\n            this._core.hostAssetContext._rapi,\n            this._assetId,\n            this.__links!,\n            this._etag\n        );\n    }\n\n    @observable\n    get versionId(): string {\n        return this.id;\n    }\n\n    @observable\n    get created(): Date {\n        return this._createdAt;\n    }\n\n    @observable\n    get createdBy(): string {\n        return this._createdBy;\n    }\n\n    @observable\n    get assetId(): string {\n        return this._assetId;\n    }\n\n    @observable\n    get milestone(): IVersionMilestone | undefined {\n        return this._label ? {\n            label: this._label,\n            description: this._description,\n        } : undefined;\n    }\n\n    get manifest(): ManifestResource {\n        return this._manifest;\n    }\n\n    @observable\n    get links(): AssetLinks {\n        // Make a copy to avoid the client accidentally manipulating the links\n        return Object.assign({}, this.__links);\n    }\n\n    private _getRenditionFetcher(): RenditionFetcher {\n        if (!this._renditionFetcher) {\n            this._renditionFetcher = new RenditionFetcher(\n                this._core\n            );\n\n            // Forward change events from the rendition fetcher\n            // to this class.\n            this._renditionFetcher.on('change', () => {\n                this.dispatch({ type: 'change' });\n            });\n        }\n        return this._renditionFetcher;\n    }\n\n    @observable\n    getRenditionURL(size: number, type: string = RenditionType.PNG): string {\n        const renditionFetcher = this._getRenditionFetcher();\n        return renditionFetcher.getURL(size, type, this._etag, this._getAssetInterface());\n    }\n\n    @observable\n    public renditionURLStatus(size: number, type: string): RenditionStatus {\n        const renditionFetcher = this._getRenditionFetcher();\n        return renditionFetcher.renditionURLStatus(size, type, this._etag);\n    }\n\n    /**\n     * See {@link AssetInterface#getCustomRendition} for usage\n     */\n    async getCustomRendition({\n        size,\n        type,\n        urlTemplateOptions,\n        additionalHeaders\n    }: Parameters<AssetInterface['getCustomRendition']>[0] = {}): Promise<Response> {\n        const assetInterface = await this._getAssetInterface();\n        return assetInterface.getCustomRendition({ size, type, urlTemplateOptions, additionalHeaders });\n    }\n\n    /**\n     * See {@link AssetInterface#getCustomRendition} for usage\n     */\n    async getAllCustomRenditions({\n        type,\n        urlTemplateOptions,\n        additionalHeaders\n    }: Parameters<AssetInterface['getAllCustomRenditions']>[0] = {}): Promise<Response> {\n        const assetInterface = await this._getAssetInterface();\n        return assetInterface.getAllCustomRenditions({ type, urlTemplateOptions, additionalHeaders });\n    }\n\n    async restore() {\n        const asset = await this._core.hostAssetContext.getAssetWithCloudID(this._assetId);\n        const isComposite = asset.isComposite;\n        if (isComposite) {\n            const href = getURLFromLinks(this.__links, RelType.MANIFEST);\n            await this._headAssetInterface.restoreVersionManifest(href);\n            await asset._load();\n        } else {\n            const target = getURLFromLinks(asset.links, RelType.PRIMARY);\n            await this.copy(target);\n        }\n    }\n\n    async copy(target: string) {\n        const asset = await this._core.hostAssetContext.getAssetWithCloudID(this._assetId);\n        const isComposite = asset.isComposite;\n        const source = getURLFromLinks(this.__links, RelType.PRIMARY);\n        if (isComposite) {\n            // Copy for composite assets not yet implemented, JIRA: https://jira.corp.adobe.com/browse/ACPCSS-1875\n            throw SAMError.create(SAMErrorCode.UNSUPPORTED, 'AssetVersion.copy not implemented for composite assets');\n        } else {\n            const result = await this._headAssetInterface.runOperation({\n                op: 'copy',\n                id: this._assetId,\n                source: { 'href': source, 'if-match': '*' },\n                target: { 'href': target, 'if-match': '*' }\n            });\n            return result;\n        }\n    }\n\n    async setMilestone({ label = this.milestone?.label || '', description = this.milestone?.description || '' }: Partial<IVersionMilestone>) {\n        const jsonParams = [ {\n            op: this.milestone ? VersionPatchTypes.replace : VersionPatchTypes.add,\n            path: `/children/version=${this.versionId}/milestone`,\n            value: { label, description }\n        } ];\n\n        await this._headAssetInterface.patchVersion(jsonParams);\n        const asset = await this._core.hostAssetContext.getAssetWithCloudID(this._assetId);\n        const session = asset._versionPool.createUpdateSession();\n        VersionUpdater.updateLocalItem(session, this, {\n            milestone: {\n                label,\n                description\n            }\n        });\n        session.commit();\n    }\n\n    async removeMilestone() {\n        if (!this.milestone) {\n            return;\n        }\n        const jsonParams = [ {\n            op: VersionPatchTypes.remove,\n            path: `/children/version=${this.versionId}/milestone`,\n        } ];\n\n        await this._headAssetInterface.patchVersion(jsonParams);\n        const asset = await this._core.hostAssetContext.getAssetWithCloudID(this._assetId);\n        const session = asset._versionPool.createUpdateSession();\n        VersionUpdater.updateLocalItem(session, this, {\n            milestone: {\n                label: ''\n            } as IVersionMilestone\n        });\n        session.commit();\n    }\n}\n\nexport const VersionUpdater = new ItemUpdater<AssetVersion, Partial<IAssetVersion>>({\n    localItemType: AssetVersion,\n    remoteIdProperty: 'version',\n    propertyUpdater: new PropertyUpdater({\n        '_createdAt': { name: 'created', format: 'date' },\n        '_createdBy': 'created_by',\n        '_label': 'milestone.label',\n        '_description': 'milestone.description',\n        '_assetId': 'assetId',\n        '_assetEtag': 'assetEtag',\n        '_assetLinks': { name: 'assetLinks', format: 'object' },\n        '__links': { name: '_links', format: 'object' },\n    })\n});\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport AssetInterface from '../interface/AssetInterface';\nimport { IItemLoader, IItemLoaderOptions, ILoadedPage, ILoadNextPage } from '../core/ItemLoader';\nimport ItemPool from '../core/ItemPool';\nimport { AssetVersionConfig } from './AdobeAssetSource';\nimport AssetVersion, { IAssetVersion, VersionUpdater } from './AssetVersion';\nimport AssetVersionFilter from './AssetVersionFilter';\n\n\nexport interface IAssetVersionResponse {\n    children: IAssetVersion[];\n    total_children: number;\n}\n\nexport default class AssetVersionLoader implements IItemLoader<AssetVersionConfig> {\n\n    constructor(\n        private _versionPool: ItemPool<AssetVersion>,\n        private _assetInterfacePromise: Promise<AssetInterface>\n    ) {}\n\n    async loadPage(options: IItemLoaderOptions<AssetVersionConfig>, start?: string): Promise<ILoadedPage<AssetVersionConfig>> {\n        return await this._loadPage(options, start);\n    }\n\n    private async _loadPage(options: IItemLoaderOptions<AssetVersionConfig>, start?: string): Promise<ILoadedPage<AssetVersionConfig>> {\n        const { limit } = options;\n        // We will ignore the update if we had local changes sooner than this timestamp.\n        const latency = this._versionPool._core._environment.getValue('VERSIONS_LIST_UPDATE_LATENCY');\n        const mostRecentValidMutation = Date.now() - latency;\n\n        const assetInterface = await this._assetInterfacePromise;\n        const filter = options.filter as AssetVersionFilter;\n        const version = filter?.version || undefined;\n        const result: IAssetVersionResponse = await assetInterface.getVersions({ start, limit, version });\n        const session = this._versionPool.createLoaderUpdateSession(mostRecentValidMutation);\n        const versions: IAssetVersion[] =  result.children.map((version: IAssetVersion) => ({\n            ...version,\n            // assetId, assetEtag, assetLinks are needed to construct the AssetInterface for the AssetVersion\n            assetId: assetInterface.assetID,\n            assetEtag: assetInterface.etag,\n            assetLinks: assetInterface.links\n        }));\n        const items = VersionUpdater.updateRemoteItems(session, versions);\n        session.commit();\n        // Check if we have another page to load.\n        let loadNextPage: ILoadNextPage<AssetVersionConfig> | undefined;\n        const currentCount = result.children.length;\n        // TODO: unit test to ensure this doesn't throw an exception if there are 0 pages\n        const nextStart = result.children[currentCount - 1]?.created;\n\n        if (nextStart && limit && currentCount === limit) {\n            loadNextPage = (options: IItemLoaderOptions<AssetVersionConfig>) =>\n                this._loadPage(options, nextStart);\n        }\n\n        return {\n            items,\n            total: result.total_children,\n            loadNextPage,\n            mostRecentValidMutation\n        };\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport Resource from './Resource';\nimport { observable } from '../core/decorators';\nimport AdobeAsset from './AdobeAsset';\nimport { ISAMCorePrivate } from '../indexPrivate';\nimport { RelType } from '../interface/LinkUtils';\n\nexport default class FileContentResource extends Resource {\n\n    private _etag: string = '';\n\n    constructor(\n        readonly _core: ISAMCorePrivate,\n        readonly _parent: AdobeAsset,\n    ) {\n        super(_core);\n    }\n\n    @observable\n    get etag(): string {\n        return this._etag;\n    }\n\n    /**\n     * @package -- only for use inside SAM.js\n     */\n    _setContent(data: any, etag: string | null) {\n        this._etag = etag || '';\n        this._data = data;\n        this.emit('change');\n    }\n\n    protected async _loadData() {\n        await this._parent._ensureLink(RelType.PRIMARY);\n        const assetInterface = await this._parent._getAssetInterface();\n        const { content, etag } = await assetInterface.getContent();\n        this._data = content;\n        this._etag = etag || '';\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport type { IItemFilter, ItemFilterRelation } from '../core/ItemFilter';\nimport AssetVersion from './AssetVersion';\nexport interface IAssetVersionFilterOptions {\n    readonly isMilestone?: boolean;\n    readonly createdAfter?: Date;\n    readonly createdBefore?: Date;\n    readonly createdBy?: string[];\n    readonly version?: string;\n}\n\nexport default class AssetVersionFilter implements IItemFilter<AssetVersion> {\n    private _isMilestone: boolean | undefined;\n    private _createdAfter: Date | undefined;\n    private _createdBefore: Date | undefined;\n    private _createdBy: string[] | undefined;\n    private _version: string | undefined;\n\n    constructor(options?: IAssetVersionFilterOptions) {\n        this._isMilestone = options?.isMilestone;\n        this._createdAfter = options?.createdAfter;\n        this._createdBefore = options?.createdBefore;\n        this._createdBy = options?.createdBy;\n        this._version = options?.version;\n    }\n\n    static BookmarkedVersions = new AssetVersionFilter({\n        isMilestone: true\n    });\n\n    static AssetVersionFilter(isMilestone?: boolean, createdAfter?: Date, createdBefore?: Date, createdBy?: string[], version?: string) {\n        return new AssetVersionFilter({\n            createdBy,\n            createdAfter,\n            createdBefore,\n            isMilestone,\n            version\n        });\n    }\n\n    get isMilestone(): boolean | undefined {\n        return this._isMilestone;\n    }\n\n    get createdBy(): string[] | undefined {\n        return this._createdBy;\n    }\n\n    get createdAfter(): Date | undefined {\n        return this._createdAfter;\n    }\n\n    get createdBefore(): Date | undefined {\n        return this._createdBefore;\n    }\n\n    get version(): string | undefined {\n        return this._version;\n    }\n\n    get hash(): string {\n        const collaborator = this.createdBy?.join(',');\n        const createdAfter =  this.createdAfter?.getTime() || 0;\n        const createdBefore =  this.createdBefore?.getTime() || 0;\n        const version = this.version || undefined;\n        return String(this.isMilestone) + ':'\n            + collaborator + ':'\n            + createdAfter + ':' + createdBefore + ':' + version;\n    }\n\n    matches(item: AssetVersion): boolean {\n        const matchesBookmark = this.isMilestone === undefined || this.isMilestone === Boolean(item.milestone);\n        const matchesCollab = this.createdBy === undefined || this.createdBy.includes(item.createdBy);\n        const matchesDateRange = (!this.createdAfter || item.created >= this.createdAfter) && (!this.createdBefore || item.created <= this.createdBefore);\n        const matchesVersion = this.version === undefined || this.version === item.versionId;\n        return matchesBookmark && matchesCollab && matchesDateRange && matchesVersion;\n    }\n\n    private _getRelationWrtMilestone(other: AssetVersionFilter): ItemFilterRelation {\n        return this.isMilestone === other.isMilestone ? 'subset' : this.isMilestone === undefined || other.isMilestone === undefined ? 'unknown' : 'disjoint';\n    }\n\n    private _getRelationWrtCreatedBy(other: AssetVersionFilter): ItemFilterRelation {\n        if (!this.createdBy && !other.createdBy) {\n            return 'subset';\n        }\n        if (this.createdBy && other.createdBy) {\n            const createdBy = new Set(this.createdBy);\n            if (other.createdBy.every(user => createdBy.has(user))) {\n                // Every user in the other filter is also in this filter, so this filter is a subset\n                return 'subset';\n            }\n            if (!other.createdBy.some(user => createdBy.has(user))) {\n                // No user in the other filter is in this filter, so the intersection is empty\n                return 'disjoint';\n            }\n            return 'unknown';\n        }\n        return this.createdBy ? 'subset' : 'unknown';\n    }\n\n    private _getRelationWrtDateRange(other: AssetVersionFilter): ItemFilterRelation {\n        const thisRange = { start: this.createdAfter?.getTime() || -Infinity, end: this.createdBefore?.getTime() || Infinity };\n        const otherRange = { start: other.createdAfter?.getTime() || -Infinity, end: other.createdBefore?.getTime() || Infinity };\n        if (otherRange.start <= thisRange.start && otherRange.end >= thisRange.end) {\n            // other contains all dates, or both ranges contain all dates\n            return 'subset';\n        }\n\n        if (otherRange.start > thisRange.end || otherRange.end < thisRange.start) {\n            // there is no overlap\n            return 'disjoint';\n        }\n\n        // the only remaining possibility is that there's some overlap\n        return 'unknown';\n    }\n\n    private _getRelationWrtVersion(other: AssetVersionFilter): ItemFilterRelation {\n        if (this.version === other.version) {\n            return 'subset';\n        }\n        if (this.version === undefined || other.version === undefined) {\n            return 'unknown';\n        }\n        return 'disjoint';\n    }\n\n    getRelationToFilter(other: AssetVersionFilter): ItemFilterRelation {\n        const relations = [\n            this._getRelationWrtMilestone(other),\n            this._getRelationWrtCreatedBy(other),\n            this._getRelationWrtDateRange(other),\n            this._getRelationWrtVersion(other)\n        ];\n        if (relations.includes('disjoint')) {\n            return 'disjoint';\n        }\n        if (relations.every(relation => relation === 'subset')) {\n            return 'subset';\n        }\n        // only remaining possibility is 'unknown'\n        return 'unknown';\n\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { IItemFilter, ItemFilterRelation } from '../core/ItemFilter';\nimport type { default as AdobeAsset } from './AdobeAsset';\nimport ImplicitAdobeAssetFilterBase, { IImplicitAdobeAssetFilterBaseOptions } from './ImplicitAdobeAssetFilterBase';\n\nexport interface IImplicitDirectoryListingFilterOptions extends IImplicitAdobeAssetFilterBaseOptions {\n    readonly asset: AdobeAsset;\n}\n\nexport default class ImplicitDirectoryListingFilter extends ImplicitAdobeAssetFilterBase implements IItemFilter<AdobeAsset> {\n    private _asset: AdobeAsset;\n\n    constructor(options: IImplicitDirectoryListingFilterOptions) {\n        const { asset, ...superOptions } = options;\n        super(superOptions);\n        this._asset = asset;\n    }\n\n    get asset(): AdobeAsset {\n        return this._asset;\n    }\n\n    get hash(): string {\n        return [\n            this._asset.id, super.hash\n        ].filter(x => x).join(':');\n    }\n\n    matches(item: AdobeAsset): boolean {\n        // Only check repositoryID if defined\n        // TODO: this was to fix a USS bug that doesn't exist anymore, should it always verify repositoryID?\n        if (this._asset.repositoryID && item.repositoryID\n            && this._asset.repositoryID !== item.repositoryID) {\n            return false;\n        }\n\n        // check item is a direct child of current asset\n        const assetRepoPath = this._asset.repoPath;\n        if (assetRepoPath && (assetRepoPath !== item.repoPath.substring(0, item.repoPath.lastIndexOf('/')))) {\n            return false;\n        }\n\n        return super.matches(item);\n    }\n\n    getRelationToFilter(other: ImplicitDirectoryListingFilter): ItemFilterRelation {\n        const thisFilterRepoPath = this._asset.repoPath;\n        const otherFilterRepoPath = other._asset.repoPath;\n        if (thisFilterRepoPath && otherFilterRepoPath && thisFilterRepoPath !== otherFilterRepoPath) {\n            // assetRepoPath are entirely different, no shared elements are expected.\n            return 'disjoint';\n        }\n\n        const thisFilterRepoID = this._asset.repositoryID;\n        const otherFilterRepoID = other._asset.repositoryID;\n        if (thisFilterRepoID && otherFilterRepoID && thisFilterRepoID !== otherFilterRepoID) {\n            return 'disjoint';\n        }\n\n        if (!thisFilterRepoPath && otherFilterRepoPath) {\n            // This list isn't filtered by repoPath, but the other is. They\n            // could overlap, but can't know for sure.\n            return 'unknown';\n        }\n\n        return super.getRelationToFilter(other);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { RepositoryMetadata } from '../interface/RepositoryModel';\nimport { RelType } from '../interface/LinkUtils';\n\nexport default function addProjectIdToMetadata(metadata: RepositoryMetadata, parentId: string) {\n    metadata._embedded ||= {};\n    metadata._embedded[RelType.APP_METADATA] ||= {};\n    metadata._embedded[RelType.APP_METADATA]!['cc:inherited'] ||= {};\n    metadata._embedded[RelType.APP_METADATA]!['cc:inherited']!['cc:team'] ||= {};\n    metadata._embedded[RelType.APP_METADATA]!['cc:inherited']!['cc:team']!['repo:assetId'] = parentId;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport path from 'path-browserify';\nimport ItemBase from '../core/ItemBase';\nimport AssetInterface from '../interface/AssetInterface';\nimport ShareableItem from '../collaboration/ShareableItem';\nimport { memoize, observable, retry } from '../core/decorators';\nimport SAMError, { SAMErrorCode } from '../core/SAMError';\nimport EmbeddedMetadataResource from './EmbeddedMetadataResource';\nimport AppMetadataResource from './AppMetadataResource';\nimport ManifestResource from './ManifestResource';\nimport Resource from './Resource';\nimport {\n    AssetRenameMap,\n    formatFileName,\n    getRestorePath,\n    removeArchiveGuidFromName,\n    renameFileInPath,\n    updateCachedDescendents,\n    validatePlatformRepoName\n} from './AssetUtils';\nimport {\n    AssetClass,\n    AssetClassChoices,\n    AssetLinks,\n    AssetState,\n    AssetStateChoices,\n    Assignee,\n    IAssetRefRepoAssetId,\n    ICopyOperation,\n    IMoveOperation,\n    RepositoryMetadata,\n    ShellVisibility\n} from '../interface/RepositoryModel';\nimport { AppMetadataField, ITransferStatus, parseEffectivePermissions, Permission } from '../interface/AssetModel';\nimport ItemUpdater, { IItemUpdaterOptions } from '../core/ItemUpdater';\nimport PropertyUpdater, { NotFound, PropertyFormatType } from '../core/PropertyUpdater';\nimport { AdobeAssetSearchSource, AdobeAssetSource, AssetVersionSource } from './AdobeAssetSource';\nimport AdobeAssetSearchFilter from './AdobeAssetSearchFilter';\nimport AdobeAssetDirectoryLoader from './AdobeAssetDirectoryLoader';\nimport AdobeAssetDirectorySearchLoader from './AdobeAssetDirectorySearchLoader';\nimport ItemSource from '../core/ItemSource';\nimport { getURLFromLinks, RelType } from '../interface/LinkUtils';\nimport AssetVersion from './AssetVersion';\nimport AssetVersionLoader from './AssetVersionLoader';\nimport ItemPool from '../core/ItemPool';\nimport { IBatchOperationAssetResult } from './AssetContext';\nimport { USSMetadata } from '../interface/USSModel';\nimport Space from '../workspaces/Space';\nimport FileContentResource from './FileContentResource';\nimport oneTimeWarning from '../utils/oneTimeWarning';\nimport { RenditionFetcher, RenditionStatus, RenditionType, THUMBNAIL_SIZE } from '../utils/RenditionFetcher';\nimport { AssetReviewServiceData } from '../interface/AssetReviewServiceInterface';\nimport { IUpdateSession } from '../core/UpdateSession';\nimport { ISAMCorePrivate, SharedCollaboratorChangedEvent } from '../indexPrivate';\nimport AssetVersionFilter from './AssetVersionFilter';\nimport ImplicitDirectoryListingFilter from './ImplicitDirectoryListingFilter';\nimport addProjectIdToMetadata from '../projects/addProjectIdToMetadata';\nimport jsonpatch from 'json-patch';\nimport CommentsResource from '../comments/CommentsResource';\nimport { LazyLoadManager, LoadStatus } from '../core/decorators/LazyLoadManager';\n\nexport const BLOCK_DOWNLOAD_MIN_SIZE: number = 10485760;\n\n/**\n * @deprecated -- will be removed on or after 2024-10-01. Clients should use {@link AdobeAsset.isFolder} etc. instead.\n */\nexport enum AssetType {\n    Folder = 0x100,\n    File = 0x200,\n    Composite = 0x400\n}\n\n// This must be kept in sync with AdobeAsset.h\nexport enum AssetSyncStatus {\n    InSync,\n    OutOfSync,\n    SyncConflict,\n    SyncError,\n    Syncing\n}\n\n// This must be kept in sync with AdobeAsset.h\nexport enum AssetSyncSuspensionReason {\n    None,\n    CloudContentCorrupted,\n    LocalContentCorrupted,\n    HasTooManyComponents,\n    HasTooManyChildren,\n    MaximumSizeExceeded,\n    Unknown\n}\n\n/**\n * Response from the server for the commit request.\n **/\nexport enum CommitStatus { NoErr, Conflict, DeleteConflict, ParentDeletedConflict }\n\n/**\n * The result of committing a new file.\n **/\nexport interface FileCommitResult {\n    status: CommitStatus;\n    newAsset?: AdobeAsset;\n    committedEtag?: string | null;\n}\n\n// It's unfortunate that SAM uses different constants for asset types than the R-API, but we need to be consistent with SAM-CPP\nconst assetClassToTypeMap: Map<AssetClass, AssetType> = new Map([\n    [ 'file', AssetType.File ],\n    [ 'composite', AssetType.Composite ],\n    [ 'directory', AssetType.Folder ],\n    // TODO: determine if this is needed, add to JS Bindings & AssetType\n    // [ 'entity', 'Entity' ]\n]);\n\n// Do not refresh app metadata for root folders like / or /cloud-content or /cloud-content-archive etc. They do not\n// show up in listings, but they can get loaded due to ONS notifications. Since the Filters prevent them from appearing\n// in listings already, there's no need to load the app metadata to see that they should be hidden due to\n// shell:visibility.\n// TODO: also ignore root folders of ESM stores.\nconst APP_METADATA_REFRESH_IGNORE_REGEX = /^\\/[^/]+$|^\\/$/;\n\nexport default class AdobeAsset extends ShareableItem {\n\n    protected _name: string = ''; // don't change this in subclasses\n    private _etag: string = '';\n    private _repositoryID: string = '';\n    private _repositoryName?: string;\n    private _path: string = '';\n    private _storageRegion: string = '';\n    private _type: string = '';\n    private _size: number = 0;\n    private _version: string = '';\n    protected _assetClass: AssetClass = 'file';\n    private _assetState: AssetState = 'ACTIVE';\n    private _created: Date = new Date();\n    private _modified: Date = new Date();\n    private _lastAccessed?: Date;\n    private _shared?: Date;\n    private _discarded: Date | undefined;\n    private _createdBy: string = '';\n    private _modifiedBy: string = '';\n    private _discardedBy: string | undefined;\n    // Assume user has full permissions for any Asset they run across, as it's better to\n    // err on allowing an action in the UI and have it fail on the service. Sources that\n    // require permission checks are responsible for ensuring the permissions are set\n    // appropriately.\n    private _permissions: Permission = Permission.All;\n    protected __links: AssetLinks | undefined;\n    private _isPublished: boolean = false;\n    private _ancestorIDs: string[] | undefined;\n    private _storageAssignee: Assignee = { id: '', type: 'user' };\n    private _embeddedMetadata: EmbeddedMetadataResource;\n    private _appMetadata: AppMetadataResource;\n    private _manifest: ManifestResource;\n    private _fileContent: FileContentResource;\n    private _renditionFetcher: RenditionFetcher;\n    private _hasArtifacts: boolean | undefined;\n    // Library Elements in USS discarded results are pseudo-Assets that are not in\n    // /cloud-content-archive and do not have state=DISCARDED. This ensures that these items only appear in discarded\n    // search results. In case Library Elements appear in other collections, we are not inferring that all Library\n    // Elements are discarded just because today the discarded list is the only place they appear.\n    private _isArchivedLibraryElement: boolean = false;\n\n\n    // Base implementation, subclasses should override if they need to return true.\n    protected _needsRepoMetadata: boolean = false;\n\n    private fr: FinalizationRegistry;\n    private _imageLength?: number;\n    private _imageWidth?: number;\n    private _createdByClientId?: string;\n    private _createdFromUpload?: boolean;\n\n    // SAM should never create an AdobeAsset for a project. Therefore isProject should always be false.\n    public isProject: boolean = false;\n    public isLibrary: boolean = false;\n    public isCustomModel: boolean = false;\n\n    /**\n     * @package -- only for use in SAM.js\n     */\n    _versionPool = new ItemPool<AssetVersion>(this._core, 'version');\n\n    /**\n     * Determines if __links came from resolve API (true) or a listing (false)\n     * @package -- only for use in SAM.js\n     */\n    _linksCameFromResolveAPI: boolean = false;\n\n    // SAM web doesn't support caching yet\n    isAvailableOffline: boolean = false;\n\n    // [SAM-2268][SAM-2494] Fields/methods that only exist on SAM.cpp are defined here (as optional) since this file\n    // also defines the public API for SAM.cpp AdobeAsset. After SAM-1586, the public TypeScript API will be defined in\n    // a separate file, and these definitions should be removed.\n    localID?: string;\n    downloadStatus?: ITransferStatus;\n    uploadStatus?: ITransferStatus;\n    syncStatus?: AssetSyncStatus;\n    syncSuspensionReason?: AssetSyncSuspensionReason;\n    // This field isn't useful for feature-detection, so hard-coding as false, which is a sensible value for web\n    isUserPinned: boolean = false;\n    // Expecting that a data migration will occur that makes this field obsolete. If that doesn't happen, then\n    // this field will need to be populated with an async call.\n    /**\n     * @deprecated -- will be removed on or after 2024-10-01\n     */\n    isNameDCTitle: boolean = false;\n    purge?(): Promise<void>;\n    pin?(): Promise<void>;\n    unpin?(): Promise<void>;\n    archive?(): Promise<void>;\n    /**\n     * SAM.cpp Only - not available on web.\n     * Downloads the  composite to the local cache\n     * but also respects cache clearing policies so it may\n     * be cleared at some point.\n     */\n    downloadComposite?(): Promise<void>;\n    // end [SAM-2268][SAM-2494]\n\n    constructor(\n        readonly _core: ISAMCorePrivate,\n        id: string,\n        metadata?: {\n            links?: AssetLinks,\n            etag?: string\n        }\n    ) {\n        super(_core, id);\n        this._embeddedMetadata = new EmbeddedMetadataResource(_core, this);\n        this._appMetadata = new AppMetadataResource(_core, this);\n        this._manifest = new ManifestResource(_core, this);\n        this._fileContent = new FileContentResource(_core, this);\n        this.__links = metadata?.links;\n        this._etag = metadata?.etag || '';\n        this._renditionFetcher = new RenditionFetcher(\n            this._core\n        );\n\n        // Forward change events from the rendition fetcher\n        // to this class.\n        this._renditionFetcher.on('change', () => {\n            this.dispatch({ type: 'change' });\n        });\n\n        // Create a weakReference to track if the\n        // the object has been GC'd\n        // Ensure working per https://jira.corp.adobe.com/browse/SAM-2677\n        this.fr = new FinalizationRegistry(() => {\n            this._finalizer();\n        });\n        this.fr.register(this, 'adobe-asset');\n    }\n\n    /**\n     * A property that indicates wether or not a file was created from upload. If it's undefined\n     * that means it has not been set previously and doesn't necessarily mean\n     * that it was not created from an upload action in an application. Only a 'true' value\n     * can guarantee that this file was created from an upload action.\n     */\n    @observable\n    public get createdFromUpload(): boolean | undefined {\n        const ccCreatedFromUploadPropertyName = 'cc:createdFromUpload';\n        // If the data was provided by a USS result, return that result.\n        if (this.appMetadata.data && this.appMetadata.data[ccCreatedFromUploadPropertyName]) {\n            return !!this.appMetadata.data[ccCreatedFromUploadPropertyName];\n        }\n\n        return this._createdFromUpload;\n    }\n\n    /**\n     * The ID of the client who created the repository asset.\n     */\n    @observable\n    public get createdByClientId(): string | undefined {\n        return this._createdByClientId;\n    }\n\n    private _finalizer() {\n        this._renditionFetcher.release();\n    }\n\n    /**\n     * @package -- for use in SAM.js only\n     */\n    @retry\n    _loadWithRetry(): Promise<void> {\n        return this._load();\n    }\n\n    /**\n     * @package -- for use in SAM.js only\n     */\n    async _getAssetInterface(): Promise<AssetInterface> {\n        return new AssetInterface(this._core.hostAssetContext._rapi, this.id, this.links, this.etag);\n    }\n\n    private get _resources(): Map<keyof AdobeAsset, Resource> {\n        return new Map<keyof AdobeAsset, Resource>([\n            [ 'embeddedMetadata', this._embeddedMetadata ],\n            [ 'appMetadata', this._appMetadata ],\n            [ 'manifest', this._manifest ],\n            [ 'fileContent', this._fileContent ]\n        ]);\n    }\n\n    /**\n     * @package -- only for use in SAM.js\n     */\n    async _reloadPermissions(): Promise<void> {\n        const assetMetadata: Partial<AdobeAssetUpdaterMetadata> = {};\n        let error: SAMError | undefined = undefined;\n        try {\n            await this._ensureLink(RelType.AC_EFFECTIVE);\n            const assetInterface = await this._getAssetInterface();\n            const permissions: Permission | undefined = await assetInterface.getEffectivePermissions();\n            if (permissions) {\n                assetMetadata.effectivePermission = permissions;\n            }\n        } catch (e: any) {\n            error = e;\n        }\n        if (error) {\n            if ([ SAMErrorCode.NOT_FOUND, SAMErrorCode.ACCESS_DENIED ].includes(error.code)) {\n                assetMetadata.effectivePermission = (error.code === SAMErrorCode.ACCESS_DENIED ? Permission.Ack : Permission.None);\n            } else {\n                throw error;\n            }\n        }\n\n        const hasLostAccess = [ Permission.Ack, Permission.None ].includes(assetMetadata.effectivePermission!);\n        if (hasLostAccess && this._core.hostAssetContext._assetPool.isItemDiscarded(this)) {\n            // The asset has already been removed from the asset pool so we can just\n            // skip any further updates. This typically means it's been permanently deleted.\n            this._isShared = false;\n            this._isSharedWithYouAsset = false;\n            this._shareFlagsAreDirty = false;\n            LazyLoadManager.setLoadStatus(this, SharedCollaboratorChangedEvent, LoadStatus.Loaded);\n            return;\n        }\n\n        // A \"mutation\" session is used here to track the time when a change is made to an Asset that is known to be\n        // fresh (since it came from R-API). This helps avoid problems where fresh data from R-API gets overwritten by\n        // stale data (e.g. from USS due to indexing lag).\n        const session = this._core.hostAssetContext._assetPool.createMutationSession();\n        // We always update the asset with the new permissions even if it's\n        // been permanently deleted or permissions have been removed. This\n        // ensures subscribers to \"change\" events of AdobeAsset are notified\n        // AssetLink being one example.\n        if (hasLostAccess) {\n            // If the user lost access, it is effectively not shared with them anymore\n            assetMetadata.isShared = false;\n            assetMetadata.sharedViaInvite = false;\n\n            // Refreshing collaborators will likely fail, so clear the dirty flags to prevent the refresh.\n            assetMetadata.shareFlagsAreDirty = false;\n            LazyLoadManager.setLoadStatus(this, SharedCollaboratorChangedEvent, LoadStatus.Loaded);\n            session.queueDiscardedItem(this);\n        } else {\n            // Since we are explicitly reloading the permissions we want to mark\n            // that the collaboration data is out of date which will\n            // fetch new data when the ShareableItem.collaboratorArray is read.\n            assetMetadata.shareFlagsAreDirty = true;\n            LazyLoadManager.setLoadStatus(this, SharedCollaboratorChangedEvent, LoadStatus.NotLoaded);\n        }\n\n        this._core.hostAssetContext._adobeAssetUpdater.updateLocalItem(\n            session,\n            this,\n            assetMetadata,\n        );\n\n        session.commit();\n    }\n\n    /**\n     * @param repoMetadata {RepositoryMetadata} If passed in, it will be used instead of loading from the service\n     * @param appMetadata {any} If passed in, it will be used instead of loading from the service\n     * @param effectivePermission {Permission} If passed in, it will be used instead of loading from the service\n     *\n     * @package -- only for use in SAM.js\n     */\n    async _load({\n        repoMetadata,\n        appMetadata,\n        effectivePermission\n    }: {\n        repoMetadata?: RepositoryMetadata;\n        appMetadata?: any;\n        effectivePermission?: Permission;\n    } = {}): Promise<void> {\n        let error: SAMError | undefined = undefined;\n        let assetInterface: AssetInterface;\n        let assetMetadata: Partial<AdobeAssetUpdaterMetadata> = {};\n        try {\n            await this._ensureLink(RelType.REPO_METADATA);\n            assetInterface = await this._getAssetInterface();\n            // Do these requests in parallel for better performance\n            const resolutions = await Promise.allSettled([\n                repoMetadata ? Promise.resolve(repoMetadata) : assetInterface.getRepoMetadata(),\n                effectivePermission ? Promise.resolve(effectivePermission) : assetInterface.getEffectivePermissions()\n            ]);\n            repoMetadata = resolutions[0].status === 'fulfilled' ? resolutions[0].value : undefined;\n            const permissions: Permission | undefined = resolutions[1].status === 'fulfilled' ? resolutions[1].value : undefined;\n            error = resolutions.map(resolution => resolution.status === 'rejected' && resolution.reason).find(x => x);\n            this._linksCameFromResolveAPI = repoMetadata !== undefined;\n\n            // if repoMetadata failed to load, the permissions should still be set\n            assetMetadata = repoMetadata || {};\n            if (permissions) {\n                assetMetadata.effectivePermission = permissions;\n            }\n        } catch (e: any) {\n            error = e;\n        }\n\n        // Check for the asset missing (404) or having restricted access (403)\n        if (error) {\n            if ([ SAMErrorCode.NOT_FOUND, SAMErrorCode.ACCESS_DENIED ].includes(error.code)) {\n                assetMetadata.effectivePermission = (error.code === SAMErrorCode.ACCESS_DENIED ? Permission.Ack : Permission.None);\n            } else {\n                throw error;\n            }\n        } else {\n            // Refresh any resources that are already loaded\n            const resourcesToReload: Resource[] = [ ...this._resources.values() ].filter(resource => resource.isLoaded);\n            // If shellVisibility is undefined, then app metadata must be loaded to ensures hidden Assets do not\n            // appear in lists due to ONS notifications.\n            if (this.shellVisibility === undefined\n                // Root folders don't show up in lists anyway, so no need to check shell:visibility\n                && !APP_METADATA_REFRESH_IGNORE_REGEX.test(assetMetadata['repo:path']!)\n                // Already scheduled to reload\n                && !resourcesToReload.includes(this._appMetadata)\n                // Do we have the permission\n                && assetMetadata.effectivePermission && ((assetMetadata.effectivePermission & Permission.ReadAppMetadata) === Permission.ReadAppMetadata)\n            ) {\n                resourcesToReload.push(this._appMetadata);\n            }\n\n            // If the app metadata is passed in, use it instead of loading it again\n            if (appMetadata) {\n                // setting the data also sets isLoaded to true\n                this._appMetadata._setData(appMetadata);\n                // Remove the app metadata from the list of resources to reload\n                const index = resourcesToReload.indexOf(this._appMetadata);\n                if (index !== -1) {\n                    resourcesToReload.splice(index, 1);\n                }\n            }\n\n            if (resourcesToReload.length) {\n                await Promise.all(resourcesToReload.map(resource => resource.load()));\n            }\n        }\n\n        const hasLostAccess = [ Permission.Ack, Permission.None ].includes(assetMetadata.effectivePermission!);\n        if (hasLostAccess && this._core.hostAssetContext._assetPool.isItemDiscarded(this)) {\n            // The asset has already been removed from the asset pool so we can just\n            // skip any further updates. This typically means it's been permanently deleted.\n            this._isShared = false;\n            this._isSharedWithYouAsset = false;\n            this._shareFlagsAreDirty = false;\n            LazyLoadManager.setLoadStatus(this, SharedCollaboratorChangedEvent, LoadStatus.Loaded);\n            return;\n        }\n\n        const isFolder = assetMetadata['repo:assetClass'] === 'directory' || this.isFolder;\n        // get the last access date by the user to refresh the lastAccessed property\n        const lastAccessed = isFolder || hasLostAccess ? undefined : await assetInterface!.getLastAccessed();\n\n        // A \"mutation\" session is used here to track the time when a change is made to an Asset that is known to be\n        // fresh (since it came from R-API). This helps avoid problems where fresh data from R-API gets overwritten by\n        // stale data (e.g. from USS due to indexing lag).\n        const session = this._core.hostAssetContext._assetPool.createMutationSession();\n        if (isFolder && assetMetadata['repo:path'] && assetMetadata['repo:path'] !== this.repoPath) {\n            // If it's a directory, and its path changed, we also need to update the repo:path of all its children!\n            updateCachedDescendents({\n                assetPool: this._core.hostAssetContext._assetPool,\n                asset: this,\n                session,\n                operation: { type: 'rename', newPath: assetMetadata['repo:path'] }\n            });\n        }\n\n        // We always update the asset with the new permissions even if it's\n        // been permanently deleted or permissions have been removed. This\n        // ensures subscribers to \"change\" events of AdobeAsset are notified\n        // AssetLink being one example.\n        this._core.hostAssetContext._adobeAssetUpdater.updateLocalItem(\n            session,\n            this,\n            {\n                ...assetMetadata,\n                lastAccessed,\n            }\n        );\n\n        if (hasLostAccess) {\n            this._isShared = false;\n            this._isSharedWithYouAsset = false;\n            this._shareFlagsAreDirty = false;\n            LazyLoadManager.setLoadStatus(this, SharedCollaboratorChangedEvent, LoadStatus.Loaded);\n            session.queueDiscardedItem(this);\n        }\n\n        session.commit();\n    }\n\n    @memoize\n    get versions(): AssetVersionSource {\n        const loader = new AssetVersionLoader(this._versionPool, this._ensureLink(RelType.PAGE).then(() => this._getAssetInterface()));\n        return new ItemSource(this._versionPool, [ loader ], new AssetVersionFilter());\n    }\n\n    async getCommentsResource(): Promise<CommentsResource> {\n        return this._core.hostAssetContext.getCommentsResource(this.id);\n    }\n\n    /**\n     * Note:  Clients should avoid using this field and instead rely on the \"is*\" properties, like `isFolder`,\n     * `isFile`, `isComposite`, etc.\n     *\n     * @deprecated - will be removed on or after 2024-10-01\n     */\n    @observable\n    get assetType(): AssetType {\n        oneTimeWarning('AdobeAsset.assetType',\n            'AdobeAsset.assetType is deprecated and will be removed on or after 2024-10-01. Please use isFolder,'\n            + ' isFile, isComposite, etc. instead');\n        return assetClassToTypeMap.get(this._assetClass)!;\n    }\n\n    @observable\n    get isFolder(): boolean {\n        return this._assetClass === 'directory';\n    }\n\n    @observable\n    get isAssignment(): boolean | undefined {\n        // if appMetadata isn't loaded, it's not yet known\n        return this.appMetadata.data ? this.appMetadata.data['project:directoryType'] === 'assignment' : undefined;\n    }\n\n    @observable\n    get isFile(): boolean {\n        return this._assetClass === 'file';\n    }\n\n    @observable\n    get isComposite(): boolean {\n        return this._assetClass === 'composite';\n    }\n\n    @observable\n    get isLibraryElement(): boolean {\n        return this._assetClass === 'element';\n    }\n\n    @observable\n    get imageLength(): number | undefined {\n        return this._imageLength;\n    }\n\n    @observable\n    get imageWidth(): number | undefined {\n        return this._imageWidth;\n    }\n\n    // Similar to Project, we rely on app metadata to determine if an asset is a child of an assignment.\n    // If app metadata is not loaded, then we don't know if it has a parent assignment id and it is undefined.\n    @observable\n    get parentAssignmentID(): string | undefined {\n        return this.appMetadata.data?.['cc:inherited']?.['cc:assignment']?.['repo:assetId'];\n    }\n\n    // Similar to isChildOfProject\n    @observable\n    get isChildOfAssignment(): boolean {\n        return !!this.parentAssignmentID;\n    }\n\n    @observable\n    get parentClassroomId(): string | undefined {\n        return this.appMetadata.data?.['cc:inherited']?.['cc:classroom']?.['repo:assetId'];\n    }\n\n    @observable\n    get isChildOfClassroom(): boolean {\n        return !!this.parentClassroomId;\n    }\n\n    @observable\n    get parentAssignmentMaterialsId(): string | undefined {\n        return this.appMetadata.data?.['cc:inherited']?.['cc:assignmentMaterials']?.['repo:assetId'];\n    }\n\n    @observable\n    get isChildOfAssignmentMaterials(): boolean {\n        return !!this.parentAssignmentMaterialsId;\n    }\n\n    @observable\n    get parentStudentAssignmentId(): string | undefined {\n        return this.appMetadata.data?.['cc:inherited']?.['cc:studentAssignment']?.['repo:assetId'];\n    }\n\n    @observable\n    get isChildOfStudentAssignment(): boolean {\n        return !!this.parentStudentAssignmentId;\n    }\n\n    /**\n     * Returns true if the asset path is inside of a project, otherwise undefined.\n     */\n    private _isPathInsideProject(): boolean {\n\n        // It is assumed that the folder and filenames have already been validated\n        // as these regular expressions allow for invalid characters.\n        const projectChildPatterns = [\n            '/projects/[^/]+/[^/]+',\n            '/content/assets/projects/[^/]+/[^/]+',\n            '/users/[^/]+/projects/[^/]+/[^/]+'\n        ];\n        return projectChildPatterns.some(pattern => new RegExp(pattern).test(this._path));\n    }\n\n    // We rely on app metadata to determine if an asset is a child of a project.\n    // If app metadata is not loaded, then we don't know if it has a parent project id and it is undefined.\n    @observable\n    get parentProjectID(): string | undefined {\n        // EBroker handling will ensure that all descendants have the following, corresponding, application metadata property\n        const parentProjectID = this.appMetadata.data?.['cc:inherited']?.['cc:team']?.['repo:assetId'];\n\n        // [SAM-3590] If the parent project ID is not found in the app metadata or the ancestorIDs array,\n        // and it's inside a project, call the Context API to obtain the parent projet ID.\n        const parentIsMissingFromAncestorIDs = this._ancestorIDs && !this._ancestorIDs.includes(parentProjectID);\n        if ((!parentProjectID || parentIsMissingFromAncestorIDs) && this._isPathInsideProject()) {\n            this._fixParentProjectID();\n        }\n        return parentProjectID;\n    }\n\n    /**\n     * Fix the parentProjectID in appMetadata and then notify clients.\n     */\n    @memoize\n    private async _fixParentProjectID(): Promise<void> {\n        const response = await this._core.projectContext._callContextAPI(this.cloudID, this.repositoryID);\n        // Fix app metadata from response.\n        const parentProjectID = response['repo:assetId'];\n        if (parentProjectID) {\n            // Update the app metadata with the parent project ID.\n            this.appMetadata._mergeData({ 'cc:inherited': { 'cc:team': { 'repo:assetId': parentProjectID } } });\n        }\n    }\n\n    @observable\n    get isChildOfProject(): boolean {\n        return !!this.parentProjectID;\n    }\n\n    @observable\n    get isArtifact(): boolean | undefined {\n        // if appMetadata isn't loaded, it's not yet known\n        if (!this.appMetadata.data) {\n            return undefined;\n        }\n        // if `review:sourceAsset` is present, then it's an Artifact\n        return !!this.appMetadata.data['review:sourceAsset'];\n    }\n\n    /**\n    * Determines if the repo metadata needs to be loaded.\n    */\n    get needsRepoMetadata(): boolean {\n        return this._needsRepoMetadata;\n    }\n\n    // NOTE: isReviewLink includes legacy items that are not Artifacts\n    get isReviewLink(): boolean | undefined {\n        // legacy reviews were published in /pubs but might not have review:sourceAsset app metadata\n        if (this.repoPath.startsWith('/pubs/')) { return true; }\n        return this.isArtifact;\n    }\n    /**\n    * Returns the media type of the source document used to generate this Review Link. If not a Review Link, or no\n    * source document can be identified, it will return ''\n    * Hard coding these strings was a conscious decision to avoid enums and the hardening any logic around mediaTypes\n    * because they are still evolving. The ideal solution is for no app specific logic here, we want to simply reference\n    * dc:format for all artifacts.\n    */\n    get reviewLinkSourceType(): string {\n        if (!this.isReviewLink) { return ''; }\n\n        // current S4R-compliant artifacts store the source type in app metadata\n        const dcFormat: string = this.appMetadata.data?.[AppMetadataField.REVIEW_SOURCE_ASSET]['dc:format']; // dcFormat equates to mediaType\n        if (dcFormat) {return dcFormat;}\n\n        // XD \"prototype\" and \"spec\" have media type 'application/vnd.adobe.xd.cloudproject+dcx' -- return this.mediaType\n        // There's nothing that dictates what media type Artifacts must be, the source app can pick. For Xd, they\n        // chose another Xd-specific format. For S4R, most clients that implemented it chose PDF, so we are only\n        // checking for the XD format here and not any others.\n        if (this.mediaType === 'application/vnd.adobe.xd.cloudproject+dcx') { return this.mediaType; }\n\n        // legacy Aero links are in /pubs/aero/v5/ -- return Aero media type\n        if (this.repoPath.startsWith('/pubs/aero/v5/')) { return 'application/vnd.adobe.real+dcx'; }\n\n        // Legacy InDesign artifacts may be in /pubs/id_review\n        if (this.repoPath.startsWith('/pubs/id_review/')) { return ''; }\n\n        // legacy 3d scenes are in /pubs/<review creator ID> (to be confirmed) -- return media type (needs research)\n        if (this.repoPath.startsWith('/pubs/')) { return '3d/vnd.adobe.asd+dcx'; }\n\n        return '';\n    }\n\n    // NOTE: this should only ever be the repo:name of the Asset. For user-friendly names, use `displayName`\n    @observable\n    get name(): string {\n        // NOTE: includes file extension\n        return removeArchiveGuidFromName(this._name);\n    }\n\n    // Subclasses should override if the user-facing name is something other than repo:name. Do not return `this.name`\n    // (the repo:name) as displayName, as in some cases, that might be a guid that the client may want to exclude, in\n    // which case the client would have to write a regex to hide guids...but if a user chooses a guid as a file name,\n    // that'd cause the user's legit file name to be hidden. Keeping these concepts distinct will ensure clients can\n    // have full control over their UI.\n    get displayName(): string | undefined {\n        return undefined;\n    }\n\n    // NOTE: when _appMetadata changes, it won't trigger any observers of shellVisibility to update. But since\n    // shellVisibility shouldn't change after initial load (from listing, or getAssetWith*()), this isn't currently\n    // necessary. If it becomes necessary, we'll need to have AdobeAsset fire a change even when _appMetadata changes.\n    @observable\n    get shellVisibility(): ShellVisibility | undefined {\n        // If _appMetadata.data is undefined, then it has not been loaded from listings or\n        // by _appMetadata.load(), so shell visibility is unknown.\n        if (this._appMetadata.data === undefined) { return undefined; }\n        // '' means that the shell:visibility is known to be visible\n        return this._appMetadata.data['shell:visibility'] || '';\n    }\n\n    @observable\n    get ancestorIDs(): string[] | undefined {\n        return this._ancestorIDs;\n    }\n\n    @observable\n    get storageAssignee(): Assignee {\n        return this._storageAssignee;\n    }\n\n    @observable\n    get extension(): string {\n        // To match SAM C++, extension does not include the \".\"\n        // Do not return extension if file name starts with '.'\n        if (this.name.lastIndexOf('.') > 0) {\n            return this.name.substring(this.name.lastIndexOf('.') + 1);\n        } else {\n            return '';\n        }\n    }\n\n    @observable\n    get mediaType(): string {\n        return this._type;\n    }\n\n    @observable\n    get cloudID(): string {\n        return this.id;\n    }\n\n    @observable\n    get repositoryID(): string {\n        return this._repositoryID;\n    }\n\n    @observable\n    get repositoryName(): string | undefined {\n        if (this._repositoryName === undefined) {\n            this._populateRepositoryName();\n        }\n\n        return this._repositoryName;\n    }\n\n    @observable\n    get repoPath(): string {\n        // TODO: Switch to new repo:relativePath once implemented by platform\n        return this._path;\n    }\n\n    @observable\n    get storageRegion(): string {\n        return this._storageRegion;\n    }\n\n    @observable\n    get created(): Date {\n        return this._created;\n    }\n\n    @observable\n    get modified(): Date {\n        return this._modified;\n    }\n\n    // returns the last access date for the user.\n    // returns undefined if last access date is not set or the asset is not\n    // populated via USS.\n    @observable\n    get lastAccessed(): Date | undefined {\n        return this._lastAccessed;\n    }\n\n    // updates the user's last access date.\n    // Does not apply to folders\n    // This internally makes a call to PUPA service to patch the last access date.\n    async updateLastAccessed(): Promise<void> {\n        if (this.isFolder) {\n            oneTimeWarning('AdobeAsset.updateLastAccessed',\n                'updateLastAccessed API is not allowed on folders');\n            return;\n        }\n        // We probably need to make sure that peruser metadata link is present.\n        // It may not be present if this AdobeAsset is created as a result of\n        // USS call.\n        await this._ensureLink(RelType.PERUSER_METADATA);\n\n        const assetInterface = await this._getAssetInterface();\n        const accessDate = new Date();\n        await assetInterface.patchLastAccessed(accessDate);\n\n        const session = this._core.hostAssetContext._assetPool.createUpdateSession();\n        this._core.hostAssetContext._adobeAssetUpdater.updateLocalItem(\n            session,\n            this,\n            { lastAccessed: accessDate }\n        );\n        session.commit();\n    }\n\n    @observable\n    get shared(): Date | undefined {\n        return this._shared;\n    }\n\n    @observable\n    get sizeInBytes(): number {\n        return this._size;\n    }\n\n    @observable\n    get isDiscarded(): boolean {\n        return this._isArchivedLibraryElement\n            || getRestorePath(this.repoPath) !== undefined\n            || [ 'DISCARDED', 'DISCARDED_PARENT' ].includes(this._assetState);\n    }\n\n    @observable\n    get assetRefString(): string {\n        return JSON.stringify({\n            cloud_id: this.cloudID,\n            path: this.repoPath,\n            display_name: this.name,\n            repository_id: this.repositoryID\n        });\n    }\n\n    @observable\n    get isPublished(): boolean {\n        return this._isPublished;\n    }\n\n    @memoize\n    get children(): AdobeAssetSource | undefined {\n        if (!this.isFolder) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'Children list can be fetched only for folder');\n        }\n        // https://jira.corp.adobe.com/browse/SAM-3206\n        // We will embed permissions for projects and children of projects\n        const embedPermissions = this.isProject || this.isChildOfProject;\n        const loader = new AdobeAssetDirectoryLoader(this._core.hostAssetContext._assetPool, this, this._core, embedPermissions);\n        // Children of Project folders can be SWY items\n        const implicitFilter = new ImplicitDirectoryListingFilter({ asset: this, _isSharedWithYou: true  });\n        return new ItemSource(this._core.hostAssetContext._assetPool, [ loader ], implicitFilter);\n    }\n\n    searchChildren(opts: { deepSearch?: boolean, query?: string}): AdobeAssetSearchSource {\n        if (!this.isFolder) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'Children can be searched only in the folder');\n        }\n        const { deepSearch, query } = opts;\n        const implicitFilter = new AdobeAssetSearchFilter({ asset: this, deepSearch, query });\n        const loader = new AdobeAssetDirectorySearchLoader(\n            this._core.hostAssetContext._assetPool,\n            this._core,\n            this._core.hostAssetContext._adobeAssetSearchInterface,\n            this,\n            implicitFilter\n        );\n        return new ItemSource(this._core.hostAssetContext._assetPool, [ loader ], implicitFilter);\n    }\n\n    /**\n     * Discard the asset - this changes its repo:state to DISCARDED, but it's still present as an\n     * asset, and can later be restored, or permanently deleted.\n     */\n    async discard(): Promise<void> {\n        if (this.isDiscarded) {\n            throw SAMError.create(SAMErrorCode.INVALID_OPERATION, 'Asset is already discarded');\n        }\n        const assetInterface = await this._getAssetInterface();\n        const repoMetadata = await assetInterface.discard();\n\n        // Artifacts are from Share For Review, for assets where you can create a Review artifact via the Share For Review workflow\n        if (this._hasArtifacts) {\n            // NOTE: this is done in the background and if it fails will not count as a failure\n            // for discard. This also means when `discard()` resolves, the output folder may not\n            // be deleted yet.\n            this._core.hostAssetContext._deleteAssetOutputsFolder(this);\n        }\n\n        if (repoMetadata) {\n            // Use response metadata to reflect the new state of the Asset\n            const session = this._core.hostAssetContext._assetPool.createUpdateSession();\n            this._core.hostAssetContext._adobeAssetUpdater.updateLocalItem(session, this, repoMetadata);\n\n            if (this.isFolder) {\n                // If it's a directory, we also need to update the repo:state of all its children.\n                updateCachedDescendents({\n                    assetPool: this._core.hostAssetContext._assetPool,\n                    asset: this,\n                    session,\n                    operation: { type: 'discard' }\n                });\n            }\n\n            session.commit();\n        }\n    }\n\n    /**\n     * Simple getter to see if the flag for the outputs folder has been set\n     * requires calling AssetContext.assetsHaveArtifacts() before reading this value.\n     */\n    @observable\n    get hasArtifacts(): boolean | undefined {\n        return this._hasArtifacts;\n    }\n\n    /**\n     * @package -- for use in SAM.js only\n     */\n    _clearRepositoryName() {\n        this._repositoryName = undefined;\n        this.emit('change');\n    }\n\n    private async _populateRepositoryName(): Promise<void> {\n        if (this._repositoryName) {\n            return;\n        }\n\n        const repositoryName = await this._core.hostAssetContext._repositoryNameFromID(this._repositoryID);\n        if (repositoryName) {\n            const session = this._core.hostAssetContext._assetPool.createUpdateSession();\n            this._core.hostAssetContext._adobeAssetUpdater.updateLocalItem(session, this, { repositoryName });\n            session.commit();\n        }\n    }\n\n    /**\n     * create a Folder asset - this create a empty Folder inside this Folder asset\n     * returns the newly created folder asset\n     */\n    async createFolder(name: string, retryOnConflict: boolean = false, counter: number = 0): Promise<AdobeAsset> {\n        if (!this.isFolder) {\n            throw SAMError.create(SAMErrorCode.INVALID_OPERATION, 'Asset is not Folder');\n        }\n        if (!validatePlatformRepoName(name)) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'Invalid name provided for asset create folder operation.');\n        }\n\n        try {\n            const relativePath = name;\n            await this._ensureLink(RelType.CREATE);\n            const assetInterface = await this._getAssetInterface();\n            const newFolderMetaData = await assetInterface.createFolder(relativePath);\n            if (newFolderMetaData) {\n                if (this.isProject || this.isChildOfProject) {\n                    addProjectIdToMetadata(newFolderMetaData, this.isChildOfProject ? this.parentProjectID! : this.id);\n                }\n                return this._core.hostAssetContext._createAssetFromMetadata(newFolderMetaData);\n            }\n            return await this._core.hostAssetContext.getAssetWithRepoPath(`${this.repoPath}/${relativePath}`, this.repositoryID);\n        } catch (error: any) {\n            if (error.code === SAMErrorCode.CONFLICT && retryOnConflict) {\n                const formatFileResult = formatFileName(name, this._core._environment.getValue('ASSET_CONFLICT_NAME_FORMAT'), counter + 1);\n                return this.createFolder(formatFileResult.newName, retryOnConflict, formatFileResult.countUsed);\n            }\n            throw error;\n        }\n    }\n\n    /**\n     * A small private helper to update the createdFromUpload data and PUPA.\n     * @param uploadedAsset The asset that was newly created.\n     * @package Used only internally.\n     */\n    async _setCreatedFromUploadData() {\n        await this.patchAppMetadata([ { op: 'add', path: '/cc:createdFromUpload', value: true } ]);\n        // Update last accessed to make it easier for clients to sort/filter uploaded files.\n        await this.updateLastAccessed();\n    }\n\n    /**\n     * Imports content as a new file inside of the current folder\n     *\n     * Returns the newly created asset.\n     */\n    async importFile(file: Blob | string, name: string, mediaType?: string, retryOnConflict: boolean = false, counter: number = 0): Promise<AdobeAsset> {\n        if (!this.isFolder) {\n            throw SAMError.create(SAMErrorCode.INVALID_OPERATION, 'Asset is not Folder');\n        }\n        if (typeof file === 'string') {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'Unsupported string for file to import');\n        }\n        if (!validatePlatformRepoName(name)) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'Invalid name provided for file import operation.');\n        }\n        try {\n            const relativePath = name;\n            await this._ensureLink(RelType.CREATE);\n            await this._ensureLink(RelType.BLOCK_INITIALIZE);\n            const assetInterface = await this._getAssetInterface();\n\n            const newFileMetaData = await assetInterface.importFile(file, relativePath, mediaType);\n            if (newFileMetaData) {\n                if (this.isProject || this.isChildOfProject) {\n                    addProjectIdToMetadata(newFileMetaData, this.isChildOfProject ? this.parentProjectID! : this.id);\n                }\n\n                const assetFromMetadata = this._core.hostAssetContext._createAssetFromMetadata(newFileMetaData);\n                await assetFromMetadata._setCreatedFromUploadData();\n                return assetFromMetadata;\n            }\n\n            const asset = await this._core.hostAssetContext.getAssetWithRepoPath(`${this.repoPath}/${relativePath}`, this.repositoryID);\n            await asset._setCreatedFromUploadData();\n            return asset;\n\n        } catch (error: any) {\n            if (error.code === SAMErrorCode.CONFLICT && retryOnConflict) {\n                const formatFileResult = formatFileName(name, this._core._environment.getValue('ASSET_CONFLICT_NAME_FORMAT'), counter + 1);\n                return this.importFile(file, formatFileResult.newName, mediaType, retryOnConflict, counter + 1);\n            }\n            throw error;\n        }\n    }\n\n    async getDownloadURL(): Promise<string> {\n        await this._ensureLink(RelType.PRIMARY);\n        const assetInterface = await this._getAssetInterface();\n        if (this._size < BLOCK_DOWNLOAD_MIN_SIZE) {\n            const blob = await assetInterface.getContent();\n            if (!blob.content) {\n                throw SAMError.create(SAMErrorCode.INTERNAL_ERROR, 'Cannot fetch blob');\n            }\n\n            // For now we are leaking the memory allocated for the blob url.\n            // Filed this ticket to address: https://jira.corp.adobe.com/browse/SAM-2996\n            const blobUrl = URL.createObjectURL(blob.content);\n            if (!blobUrl?.length) {\n                throw SAMError.create(SAMErrorCode.INTERNAL_ERROR, 'Cannot convert blob to URL');\n            }\n            return blobUrl;\n        } else {\n\n            // If the download link is missing, we need to fetch the download link from the service (SAM-3396). This is a no-op if the link is already present.\n            await this._ensureLink(RelType.DOWNLOAD);\n            const blockDownloadServiceURL = getURLFromLinks(this.__links, RelType.DOWNLOAD);\n\n            return await assetInterface.getBlockDownloadURL(blockDownloadServiceURL);\n        }\n    }\n\n    /**\n     * Contents of the file as a binary blob.\n     */\n    get fileContent(): FileContentResource {\n        if (!this.isFile) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'Cannot get content of an asset that is not a file');\n        }\n        return this._fileContent;\n    }\n\n    /**\n     * Commit the file\n     *\n     * content are the changes that needs to be committed.\n     * localETag is the ETag associated with the file on the server\n     * Returns NoErr if successfully committed. Returns Conflict if committing the asset causes a conflict.\n     */\n    async commitFileChanges(file: Blob, localETag?: string): Promise<FileCommitResult> {\n        if (!this.isFile) {\n            throw SAMError.create(SAMErrorCode.INVALID_OPERATION, 'Asset is not File');\n        }\n        try {\n            await this._ensureLink(RelType.PRIMARY);\n            const assetInterface = await this._getAssetInterface();\n            const newFileDetails = await assetInterface.commitFileChanges(file, localETag);\n            if (this._fileContent.isLoaded) {\n                this._fileContent._setContent(file, newFileDetails.eTag);\n            }\n            return { status: CommitStatus.NoErr, committedEtag: newFileDetails.eTag };\n        } catch (error: any) {\n            if (error instanceof SAMError) {\n                if (error.code === SAMErrorCode.CONFLICT) {\n                    return { status: CommitStatus.Conflict } as FileCommitResult;\n                }\n                if (error.code === SAMErrorCode.NOT_FOUND) {\n                    // The file has been deleted. We need to create a new asset and then provide that to the user.\n                    const parentRepoPath = this.repoPath.substring(0, this.repoPath.lastIndexOf('/'));\n                    let parentDeleted = false;\n                    const parentAsset = await this._core.hostAssetContext\n                        .getAssetWithRepoPath(parentRepoPath, this.repositoryID)\n                        .catch(error => {\n                            const samError = error as SAMError;\n                            if (SAMErrorCode.NOT_FOUND === samError.code) {\n                                parentDeleted = true;\n                                return undefined;\n                            }\n                            throw error;\n                        });\n                    if (parentDeleted) {\n                        return { status: CommitStatus.ParentDeletedConflict };\n                    }\n                    const newFile = await parentAsset?.importFile(file, this.name);\n                    return { status: CommitStatus.DeleteConflict, newAsset: newFile } as FileCommitResult;\n                }\n            }\n            throw error;\n        }\n    }\n\n    /**\n     * Restore the asset - can be given an optional name to restore to, otherwise it\n     * restores to the previous repo:name of the asset.\n     * @param {string} name - name to use when restoring, defaults to current name\n     */\n    async restore(name?: string, _counter?: number): Promise<void> {\n        if (!this.isDiscarded) {\n            throw SAMError.create(SAMErrorCode.INVALID_OPERATION, 'Cannot restore an asset that is not discarded');\n        }\n\n        if (this.isLibraryElement) {\n            // If asset is a Library Element, we need to use the Melville service to restore\n            await this._core.hostAssetContext.restoreLibraryElement(this.cloudID);\n            // We create fake AdobeAssets for Library Elements returned from the DiscardedSource so they can appear\n            // in the discarded list with other Assets. They are not monitored by ONS and do not otherwise exist as Assets in SAM.\n            // So when we restore them, rather than updating the state, we remove it from the _assetPool and thereby the discardedSource lists.\n            const session = this._core.hostAssetContext._assetPool.createUpdateSession();\n            session.queueDiscardedItem(this);\n            session.commit();\n        } else {\n            let repoMetadata: RepositoryMetadata | undefined;\n            const restoreLocation = getRestorePath(this.repoPath, name);\n            if (restoreLocation) {\n                // If archived rather than discarded, we need to move to the restore location\n                repoMetadata = await this._move(restoreLocation, true);\n            } else {\n                const assetInterface = await this._getAssetInterface();\n                try {\n                    repoMetadata = await assetInterface.restore(name || this.name);\n                } catch (e) {\n                    const error = e as SAMError;\n                    if (error.code === SAMErrorCode.CONFLICT) {\n                        const { newName, countUsed } = formatFileName(\n                            name || this.name,\n                            this._core._environment.getValue('ASSET_CONFLICT_NAME_FORMAT'),\n                            (_counter || 0) + 1\n                        );\n                        return this.restore(newName, countUsed);\n                    } else if (error.code === SAMErrorCode.ACCESS_DENIED) {\n                        if (this.ancestorIDs?.length) {\n                            const parentId = this.ancestorIDs[this.ancestorIDs.length - 1];\n                            const parentAsset = await this._core.hostAssetContext.getAssetWithCloudID(parentId);\n                            if (parentAsset.isDiscarded) {\n                                throw SAMError.create(SAMErrorCode.PARENT_DISCARDED, 'Parent folder is discarded');\n                            }\n                        }\n                    }\n\n                    throw error;\n                }\n            }\n            if (repoMetadata) {\n                // Optimistically update repo state from operation result\n                const session = this._core.hostAssetContext._assetPool.createUpdateSession();\n                this._core.hostAssetContext._adobeAssetUpdater.updateLocalItem(session, this, repoMetadata);\n                if (this.isFolder && repoMetadata['repo:path']) {\n                    // If it's a directory, we also need to update the repo:path of all its children!\n                    updateCachedDescendents({\n                        assetPool: this._core.hostAssetContext._assetPool,\n                        asset: this,\n                        session,\n                        operation: { type: 'restore', newPath: repoMetadata['repo:path'] }\n                    });\n                }\n                session.commit();\n            }\n        }\n    }\n\n\n    /**\n     * Permanently delete the asset\n     */\n    async permanentlyDelete(): Promise<void> {\n        if (this.isLibraryElement) {\n            await this._core.hostAssetContext.permanentlyDeleteLibraryElement(this.cloudID);\n            const session = this._core.hostAssetContext._assetPool.createUpdateSession();\n            session.queueDiscardedItem(this);\n            session.commit();\n        } else {\n            const resultItems = await this._core.hostAssetContext.permanentlyDeleteAssets([ this ]);\n            if (resultItems.failedResults.length) {\n                throw resultItems.failedResults[0].error;\n            }\n        }\n    }\n\n    // Note - The APIs below aren't present in SAM-CPP:\n\n    @observable\n    get etag(): string {\n        return this._etag;\n    }\n\n    @observable\n    get version(): string {\n        return this._version;\n    }\n\n    @observable\n    get createdBy(): string {\n        return this._createdBy;\n    }\n\n    @observable\n    get modifiedBy(): string {\n        return this._modifiedBy;\n    }\n\n    @observable\n    get discarded(): Date | undefined {\n        return this._discarded;\n    }\n\n    @observable\n    get discardedBy(): string | undefined {\n        return this._discardedBy;\n    }\n\n    @observable\n    /**\n     * Detect if the user has a specific permission or permissions\n     * @param permissions\n     * @usage\n     *    // single permission check\n     *    asset.hasPermission(Permission.Delete);\n     *    // multiple\n     *    asset.hasPermission(Permission.Write, Permission.Read);\n     *    // multiple via bitwise OR\n     *    asset.hasPermission(Permission.Write | Permission.Read);\n     *    // multiple via spread operator\n     *    asset.hasPermission(...permsToCheck);\n     */\n    hasPermission(...permissions: Permission[]): boolean {\n        return permissions.every((permission) =>\n            (this._permissions & permission) === permission);\n    }\n\n    // SAM-CPP doesn't expose the embedded metadata directly - you need to access it via DCX-CPP. We should port this API\n    // back to SAM. Since not everybody needs to load the embedded metadata, this returns an object that the user can\n    // explicitly load.\n    get embeddedMetadata(): EmbeddedMetadataResource {\n        return this._embeddedMetadata;\n    }\n\n    @observable\n    get appMetadata(): AppMetadataResource {\n        return this._appMetadata;\n    }\n\n    /**\n     * Patches application metadata for an Asset.\n     * CAUTION: SAM does not validate the JSONPatch array. Wherever possible, use a service that is responsible for\n     * maintaining the app metadata fields you want to modify, rather then modifying them directly. E.g., to modify\n     * Project related data, use the Projects Service; for Reviews, use the Review service; allow server-side events\n     * to populate fields as needed; etc.\n     *\n     * @param patches {jsonpatch.OpPatch[]} JSONPatch array of operations (https://jsonpatch.com/).\n     */\n    async patchAppMetadata(patches: jsonpatch.OpPatch[]): Promise<void> {\n        await this._appMetadata._patch(patches);\n    }\n\n    get manifest(): ManifestResource {\n        if (!this.isComposite) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'Cannot get manifest of an asset that is not a composite');\n        }\n        return this._manifest;\n    }\n\n    /**\n     * For use internally to release renditions after\n     * the asset has been deleted permanently.\n     * @package\n     */\n    _releaseRenditions() {\n        this._renditionFetcher.release();\n    }\n\n    // NOTE: this is only guaranteed to work as advertised on web. Clients writing for desktop and\n    // web should use `AdobeAsset.thumbnailURL` instead\n    @observable\n    getRenditionURL(size: number, type: string = RenditionType.PNG): string {\n        // Do not try to fetch rendition for folders, or LEs that have no rendition link\n        if (this.isFolder || (this.isLibraryElement && !this.links[RelType.RENDITION])) {\n            return '';\n        }\n        return this._renditionFetcher.getURL(size, type, this.etag, this._getAssetInterface());\n    }\n\n    @observable\n    get thumbnailURL(): string {\n        return this.getRenditionURL(THUMBNAIL_SIZE, RenditionType.PNG);\n    }\n\n    @observable\n    get thumbnailStatus(): RenditionStatus {\n        return this.renditionURLStatus(THUMBNAIL_SIZE, RenditionType.PNG);\n    }\n\n    /**\n     * See {@link AssetInterface#getCustomRendition} for usage\n     */\n    async getCustomRendition({\n        size,\n        type,\n        urlTemplateOptions,\n        additionalHeaders\n    }: Parameters<AssetInterface['getCustomRendition']>[0] = {}): Promise<Response> {\n        await this._ensureLink(RelType.RENDITION);\n        const assetInterface = await this._getAssetInterface();\n        return assetInterface.getCustomRendition({ size, type, urlTemplateOptions, additionalHeaders });\n    }\n\n    /**\n     * See {@link AssetInterface#getCustomRendition} for usage\n     */\n    async getAllCustomRenditions({\n        type,\n        urlTemplateOptions,\n        additionalHeaders\n    }: Parameters<AssetInterface['getAllCustomRenditions']>[0] = {}): Promise<Response> {\n        await this._ensureLink(RelType.RENDITION);\n        const assetInterface = await this._getAssetInterface();\n        return assetInterface.getAllCustomRenditions({ type, urlTemplateOptions, additionalHeaders });\n    }\n\n    /**\n     * Clears the error status on the request rendition and sets it\n     * back to RenditionStatus.NotStarted\n     *\n     * @note After attempting to fetch a thumbnail and an error has occurred during\n     * the fetch request, we assign an error status to the rendition. At this\n     * point, we won't try to refetch the thumbnail until this method is called.\n     * It is meant to give clients a means to handle when they attempt to refresh\n     * instead of SAM.js making that decisions internally which could cause thumbnails\n     * to begin loading when that may not be the desired behavior. This is also\n     * not meant to fix every issue with thumbnails fetching so in the case where\n     * the user might be offline or something similar, it's not recommended for\n     * clients to continue to call this indefinitely.\n     *\n     *\n     * @param size Defaults to 512\n     * @param type Defaults to PNG\n     * @returns {void} If the rendition requested is not found or the etag requested is different\n     * than the one that was already fetched, this method will do nothing.\n     */\n    public clearRenditionError(size: number = THUMBNAIL_SIZE, type: string = RenditionType.PNG): void {\n        this._renditionFetcher.clearRenditionError(size, type, this.etag);\n    }\n\n    /**\n     * Returns one the enumeration values of RenditionStatus.\n     *\n     * @returns {RenditionStatus}\n     */\n    @observable\n    public renditionURLStatus(size: number, type: string): RenditionStatus {\n        // Do not try to fetch rendition for folders, or LEs that have no rendition link\n        if (this.isFolder || (this.isLibraryElement && !this.links[RelType.RENDITION])) {\n            return RenditionStatus.Done;\n        }\n        return this._renditionFetcher.renditionURLStatus(size, type, this.etag);\n    }\n\n    /**\n     * @deprecated -- will be removed on or after 2024-10-01\n     */\n    @observable\n    get spaceID(): string | undefined {\n        oneTimeWarning('AdobeAsset.spaceID',\n            'AdobeAsset.spaceID is deprecated and will be removed on or after 2024-10-01.');\n        return this.appMetadata.data?.['cc:inherited']?.['cc:space']?.['repo:assetId'];\n    }\n\n    /**\n     * @deprecated -- will be removed on or after 2024-10-01\n     */\n    get isSpaceAsset(): boolean {\n        oneTimeWarning('AdobeAsset.isSpaceAsset',\n            'AdobeAsset.isSpaceAsset is deprecated and will be removed on or after 2024-10-01.');\n        return !!this.spaceID;\n    }\n\n    /**\n     * @deprecated -- will be removed on or after 2024-10-01\n     */\n    async getSpace(): Promise<Space> {\n        oneTimeWarning('AdobeAsset.getSpace',\n            'AdobeAsset.getSpace is deprecated and will be removed on or after 2024-10-01.');\n        const space = await this._core.spaceContext.getEnclosingSpace(this.cloudID);\n        if (!space) {\n            throw SAMError.create(SAMErrorCode.NOT_FOUND, 'Asset does not belong to a Space');\n        }\n        return space;\n    }\n\n    // Exposes the raw links for the underlying asset. This is so we can share them with clients like Fred, that don't have\n    // access to SAM (since they're running in a web worker). SAM-CPP doesn't expose this.\n    @observable\n    get links(): AssetLinks {\n        // Make a copy to avoid the client accidentally manipulating the links\n        return Object.assign({}, this.__links);\n    }\n\n    /**\n     * [SAM-2443] If missing links, then Asset probably came from USS, which doesn't have all R-API links\n     *  (SEARCH-32676). In that case, try to update the links from R-API via the resolve API.\n     * @package -- only for use in SAM.js\n     */\n    async _ensureLink(relType: keyof AssetLinks): Promise<void> {\n        if (this.__links?.[relType]) {\n            return;\n        }\n        const links = await this._core.hostAssetContext._rapi.getAssetLinks(this.cloudID);\n        const session = this._core.hostAssetContext._assetPool.createUpdateSession();\n        this._core.hostAssetContext._adobeAssetUpdater.updateLocalItem(\n            session,\n            this,\n            { '_links': { ...this.__links, ...links } }\n        );\n        session.commit();\n    }\n\n    /**\n     * Move within same repository\n     *\n     * @package -- for use in SAM.js only\n     */\n    async _move(newPath: string, retryOnConflict: boolean = false, counter: number = 0): Promise<RepositoryMetadata | undefined> {\n        try {\n            // In case of Asset created from USS response, repo id is not present\n            // Jira on USS https://jira.corp.adobe.com/browse/SRCH-1989\n            if (!this._repositoryID) {\n                await this._load();\n            }\n\n            const operation: IMoveOperation = {\n                op: 'move',\n                source: {\n                    'repo:assetId': this.id,\n                    'repo:repositoryId': this._repositoryID\n                },\n                target: {\n                    'repo:path': newPath,\n                    'repo:repositoryId': this._repositoryID\n                }\n            };\n\n            const assetInterface = await this._getAssetInterface();\n            const result = await assetInterface.runOperation(operation);\n            return result.asset;\n        } catch (e: any) {\n            if (e.code === SAMErrorCode.CONFLICT && retryOnConflict) {\n                // If we can't restore because an asset already exists with the same name, we append a counter and try again\n                const formatFileResult = formatFileName(newPath, this._core._environment.getValue('ASSET_CONFLICT_NAME_FORMAT'), counter + 1);\n                return this._move(formatFileResult.newName, true, formatFileResult.countUsed);\n            }\n            throw e;\n        }\n    }\n\n    protected async _copy(\n        destFolder: AdobeAsset,\n        destName?: string,\n        retryOnConflict: boolean = true,\n        counter: number = 0,\n        modelUpdater?: (session: IUpdateSession<AdobeAsset>, asset: AdobeAsset, remoteItem?: RepositoryMetadata) => AdobeAsset\n    ): Promise<AdobeAsset> {\n        let resultOps: IBatchOperationAssetResult = { failedResults: [], newModels: [] };\n        await ItemBase.runExclusiveTask('copy', [ this ], async () => {\n            const { path: newPath, counter: currCounter } = this._finalizePath(destFolder.repoPath, destName, counter);\n            counter = currCounter;\n\n            const assetsById = new Map<string, AdobeAsset>();\n            assetsById.set(this.id, this);\n\n            if (!destFolder.repositoryID) {\n                await destFolder._load();\n            }\n\n            const ops: ICopyOperation = this._getCopyOp(destFolder.repositoryID, newPath);\n\n            resultOps = await this._core.hostAssetContext._runOperations(\n                [ ops ],\n                assetsById,\n                modelUpdater ? modelUpdater : (session: IUpdateSession<AdobeAsset>, asset: AdobeAsset, remoteItem?: RepositoryMetadata): AdobeAsset => {\n                    if (!remoteItem) {\n                        throw SAMError.create(SAMErrorCode.UNKNOWN, 'Missing metadata from asset copy operation.');\n                    }\n\n                    const newAsset = this._core.hostAssetContext._adobeAssetUpdater.updateRemoteItem(session, remoteItem);\n                    return newAsset;\n                }\n            );\n        });\n\n        if (resultOps.failedResults.length) {\n            if (resultOps.failedResults[0].error.code === SAMErrorCode.CONFLICT && retryOnConflict === true) {\n                return await this._copy(destFolder, destName, retryOnConflict, counter + 1);\n            }\n            throw resultOps.failedResults[0].error;\n        }\n\n        return resultOps.newModels[0];\n    }\n\n    /**\n     * Make a copy of this Asset within the same repository using the dest folder metadata provided, when the dest folder asset is not on hand.\n     *\n     * @param destFolderRepoId -- The destination folder's repository ID\n     * @param destFolderRepoPath -- The destination folder's repo path\n     * @param destName -- (not available on SAM.cpp) -- preferred name for the copy\n     */\n    async _copyWithDestMetadata(\n        destFolderRepoId: string,\n        destFolderRepoPath: string,\n        destName?: string,\n        retryOnConflict: boolean = true,\n        counter: number = 0,\n        modelUpdater?: (session: IUpdateSession<AdobeAsset>, asset: AdobeAsset, remoteItem?: RepositoryMetadata) => AdobeAsset\n    ): Promise<AdobeAsset> {\n        let resultOps: IBatchOperationAssetResult = { failedResults: [], newModels: [] };\n        await ItemBase.runExclusiveTask('copy', [ this ], async () => {\n            const { path, counter: currCounter } = this._finalizePath(destFolderRepoPath, destName, counter);\n            counter = currCounter;\n\n            const assetsById = new Map<string, AdobeAsset>();\n            assetsById.set(this.id, this);\n\n            const ops: ICopyOperation = this._getCopyOp(destFolderRepoId, path);\n\n            resultOps = await this._core.hostAssetContext._runOperations(\n                [ ops ],\n                assetsById,\n                modelUpdater ? modelUpdater : (session: IUpdateSession<AdobeAsset>, asset: AdobeAsset, remoteItem?: RepositoryMetadata): AdobeAsset => {\n                    if (!remoteItem) {\n                        throw SAMError.create(SAMErrorCode.UNKNOWN, 'Missing metadata from asset copy operation.');\n                    }\n\n                    const newAsset = this._core.hostAssetContext._adobeAssetUpdater.updateRemoteItem(session, remoteItem);\n                    return newAsset;\n                }\n            );\n        });\n\n        if (resultOps.failedResults.length) {\n            if (resultOps.failedResults[0].error.code === SAMErrorCode.CONFLICT && retryOnConflict === true) {\n                return await this._copyWithDestMetadata(destFolderRepoId, destFolderRepoPath, destName, retryOnConflict, counter + 1);\n            }\n            throw resultOps.failedResults[0].error;\n        }\n\n        return resultOps.newModels[0];\n    }\n\n    protected _finalizePath(\n        destFolderRepoPath: string,\n        destName?: string,\n        counter: number = 0,\n    ): {path: string; counter: number} {\n        let targetName: string = this.name;\n        if (destName !== undefined) {\n            if (!validatePlatformRepoName(destName)) {\n                throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'Invalid name provided for asset copy operation.');\n            }\n            targetName = destName;\n            if (counter) {\n                const formatFileResult = formatFileName(targetName, this._core._environment.getValue('ASSET_CONFLICT_NAME_FORMAT'), counter);\n                targetName = formatFileResult.newName;\n                counter = formatFileResult.countUsed;\n            }\n        } else {\n            // check if we are copying in the same folder\n            // if yes, then it should follow ASSET_COPY_NAME_FORMAT i.e. %@ copy (%d)\n            // if no and conflict, then it should follow ASSET_CONFLICT_NAME_FORMAT i.e. %@ (%d)\n            const sameFolder = destFolderRepoPath === this.repoPath.substring(0, this.repoPath.lastIndexOf('/'));\n            const formatFileResult = sameFolder ? formatFileName(targetName, this._core._environment.getValue('ASSET_COPY_NAME_FORMAT'), counter)\n                : (counter > 0 ? formatFileName(targetName, this._core._environment.getValue('ASSET_CONFLICT_NAME_FORMAT'), counter) : { newName: targetName, countUsed: counter });\n            targetName = formatFileResult.newName;\n            counter = formatFileResult.countUsed;\n        }\n\n        return { path: `${destFolderRepoPath}/${targetName}`, counter };\n    }\n\n    protected _getCopyOp(destFolderRepoId: string, path: string): ICopyOperation {\n        // We only want to copy App metadata for PDFs and no other file format\n        // This is a temporary solution and we will have a better solution on the service side\n        const includeResources = [ { 'reltype': RelType.PRIMARY } ];\n        if (this.mediaType === 'application/pdf') {\n            includeResources.push({ 'reltype': RelType.APP_METADATA });\n        }\n        const ops: ICopyOperation = {\n            op: 'copy',\n            id: this.id,\n            source: {\n                'repo:assetId': this.id\n            },\n            target: {\n                'repo:path': path,\n                'repo:repositoryId': destFolderRepoId\n            },\n            // The following copies Content Resources for all formats\n            // and Application Metadata for PDFs only\n            includeResources\n        };\n\n        if (this.repositoryID) {\n            const source = ops.source as IAssetRefRepoAssetId;\n            source['repo:repositoryId'] = this.repositoryID;\n        }\n        return ops;\n    }\n\n    /**\n     * Make a copy of this Asset within the same repository. If you do not have the dest folder asset on hand consider using _copyWithDestMetadata instead.\n     *\n     * @param destFolder -- AdobeAsset instance representing the folder in which the copy of this AdobeAsset will be\n     *     made. If you do not have the destFolder asset on hand but do have its repo ID and path, consider using\n     *     _copyWithDestMetadata instead to avoid an API call to fetch the dest folder.\n     * @param destName -- (not available on SAM.cpp) -- preferred name for the copy\n     */\n    async copy(destFolder: AdobeAsset, destName?: string): Promise<this> {\n        return await this._copy(destFolder, destName) as this;\n    }\n\n    /**\n     * Duplicate this Asset within the same folder.\n     *\n     * @param destName -- (not available on SAM.cpp) -- preferred name for the duplicate\n     */\n    async duplicate(destName?: string): Promise<this> {\n        const parentId = this.ancestorIDs!.slice(-1)[0];\n        const parentAsset = await this._core.hostAssetContext.getAssetWithCloudID(parentId);\n        return await this._copy(parentAsset, destName) as this;\n    }\n\n    async rename(newName: string): Promise<void> {\n        if (!validatePlatformRepoName(newName)) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'Invalid name provided for asset rename operation.');\n        }\n        const newPath = renameFileInPath(newName, this);\n        const newMetadata = await this._move(newPath);\n        if (newMetadata) {\n            const assetPool = this._core.hostAssetContext._assetPool;\n            // Update the metadata after a rename, since both name and path have changed\n            const session = assetPool.createUpdateSession();\n            if (this.isFolder) {\n                updateCachedDescendents({\n                    assetPool,\n                    asset: this,\n                    session,\n                    operation: { type: 'rename', newPath }\n                });\n            }\n            this._core.hostAssetContext._adobeAssetUpdater.updateLocalItem(session, this, newMetadata);\n            session.commit();\n        }\n    }\n\n    /**\n     * Moves the AdobeAsset to a new folder and/or renames it\n     * @param destFolder AdobeAsset instance representing the folder to which the AdobeAsset will be moved\n     * @param assetRenameMap allows renaming of the asset during the move operation\n     */\n    async move(destFolder: AdobeAsset, newAssetName?: string): Promise<void> {\n        let assetRenameMap: AssetRenameMap<AdobeAsset> | undefined;\n\n        if (newAssetName) {\n            assetRenameMap = new Map([ [ this.id, newAssetName ] ]);\n        }\n\n        const resultItems = await this._core.hostAssetContext.moveAssets([ this ], destFolder, assetRenameMap);\n        if (resultItems.failedResults.length) {\n            throw  resultItems.failedResults[0].error;\n        }\n    }\n\n    /**\n     * @deprecated -- will be removed on or after 2024-10-01\n     */\n    transferToSpace(target: Space | AdobeAsset): Promise<string> {\n        oneTimeWarning('AdobeAsset.transferToSpace',\n            'AdobeAsset.transferToSpace is deprecated and will be removed on or after 2024-10-01.');\n        return this._core.hostAssetContext.transfer(this, target);\n    }\n}\n\n\nfunction getPermission(source: Partial<AdobeAssetUpdaterMetadata>): Permission | typeof NotFound {\n    // from Asset._load()\n    if (source.effectivePermission !== undefined) {\n        return source.effectivePermission;\n    }\n    // From R-API directory listing or USS listings\n    if (source._embedded?.[RelType.AC_EFFECTIVE]) {\n        return parseEffectivePermissions(source._embedded[RelType.AC_EFFECTIVE]!);\n    }\n    // If the permissions are not present in the metadata then maintain the current value\n    return NotFound;\n}\n\nexport const StorageAssigneeFormat: PropertyFormatType = {\n    parse: (value: Assignee): Assignee => {\n        return value;\n    },\n    isEqual: (a: Assignee, b: Assignee): boolean => {\n        return a?.id === b?.id && a?.type === b?.type;\n    }\n};\n\n// A mish mash of metadata from different sources is evidently OK here in the UpdaterMetadata,\n// as long as we keep the source interfaces like RepositoryMetadata separate.\nexport type AdobeAssetUpdaterMetadata = RepositoryMetadata & {\n    // values from AdobeAsset._load()\n    effectivePermission?: Permission;\n    lastAccessed?: Date;\n\n    // values from USSv3\n    isShared?: boolean;\n    sharedViaInvite?: boolean;\n\n    // value from RepositoryInterface.getRepositoryName()\n    repositoryName?: string;\n\n    // used to control when isShared() and isSharedWithYouAsset() should call queueCollaborators()\n    shareFlagsAreDirty?: boolean;\n\n    // TODO: add support for these when available from USSv3\n    // published?: boolean;\n    // isArchivedLibraryElement?: boolean;\n}\n\nexport const AssetItemUpdaterOptions: IItemUpdaterOptions<AdobeAsset, Partial<AdobeAssetUpdaterMetadata | AssetReviewServiceData>> = {\n    localItemType: AdobeAsset,\n    remoteIdProperty: 'repo:assetId',\n    // We want the SharedCollaboratorChangedEvent to fire when these properties update\n    // so that internally and externally we can response to this specific event to do\n    // things like update collaborators etc.\n    changeEventMap: new Map([\n        [ '_isShared', SharedCollaboratorChangedEvent ],\n        [ '_isSharedWithYouAsset', SharedCollaboratorChangedEvent ]\n    ]),\n    // Mapping AdobeAssetUpdaterMetadata | AssetReviewServiceData to AdobeAsset\n    propertyUpdater: new PropertyUpdater({\n        '_name': 'repo:name',\n        '_etag': 'repo:etag',\n        '_repositoryID': 'repo:repositoryId',\n        '_repositoryName': 'repositoryName',\n        '_path': 'repo:path',\n        '_storageRegion': 'storage:region',\n        '_type': 'dc:format',\n        '_size': { name: 'repo:size', format: 'number' },\n        '_version': 'repo:version',\n        '_assetClass': { name: 'repo:assetClass', choices: AssetClassChoices },\n        '_assetState': { name: 'repo:state', choices: AssetStateChoices },\n        '_created': { name: 'storage:deviceCreateDate', format: 'date' },\n        '_modified': { name: 'storage:deviceModifyDate', format: 'date' },\n        '_lastAccessed': { name: 'lastAccessed', format: 'date' },\n        '_storageAssignee': { name: 'storage:assignee', format: StorageAssigneeFormat },\n        '_discarded': { name: 'repo:discardDate', format: 'date' },\n        '_createdBy': 'repo:createdBy',\n        '_modifiedBy': 'repo:modifiedBy',\n        '_discardedBy': 'repo:discardedBy',\n        '_imageLength': { name: 'tiff:imageLength', format: 'number' },\n        '_imageWidth': { name: 'tiff:imageWidth', format: 'number' },\n        '_permissions': { get: getPermission, format: 'number' },\n        '_isShared': { name: 'isShared', format: 'boolean' },\n        '_isSharedWithYouAsset': { name: 'sharedViaInvite', format: 'boolean' },\n        '_shareFlagsAreDirty': { name: 'shareFlagsAreDirty', format: 'boolean' },\n        // PropertyUpdater reads from _appMetadata._data for comparison\n        '_appMetadata._data': {\n            name: `_embedded[${RelType.APP_METADATA}]`,\n            // Use object_subset format to avoid unnecessary change events. E.g., if _appMetadata.data is\n            // `{ 'shell:visibility': 'hiddenSelf', foo: 32 }` and the listing contains\n            // `{ 'shell:visibility': 'hiddenSelf' }` then the _mergeData will cause no change, but using format\n            // 'object', isEqual() will see source and dest aren't equal and thus assume that a change did occur.\n            format: 'object_subset',\n            // Only update the appMetadata properties that are in the listing's embedded appMetadata\n            set: (parsedSource, dest) => {\n                const asset = dest as AdobeAsset;\n                asset.appMetadata._mergeData(parsedSource);\n            }\n        },\n        '_ancestorIDs': { name: 'repo:ancestors', isArray: true, format: 'string' },\n        '__links': { name: '_links', format: 'object' },\n        '_hasArtifacts': { name: 'hasArtifacts', format: 'boolean' },\n        '_createdByClientId': 'repo:createdByClientId'\n    })\n};\n\n\nexport const AdobeAssetUpdater = new ItemUpdater<AdobeAsset, Partial<AdobeAssetUpdaterMetadata | AssetReviewServiceData>>(AssetItemUpdaterOptions);\n\n\nfunction getUSSAssetType(source: Partial<USSMetadata>) {\n    // uss type is 'application/x-sharedcloud-collection+json' for directory\n    // changing it to standard mime directory type to abstract it for SAM clients\n    if (source.type === 'application/x-sharedcloud-collection+json') {\n        return 'application/vnd.adobecloud.directory+json';\n    }\n    return source.type;\n}\n\nfunction getUSSAssetClass(source: Partial<USSMetadata>) {\n    // for directories, asset_sub_type is not present in USS response\n    if (source.type === 'application/x-sharedcloud-collection+json' || source.type === 'application/vnd.adobecloud.directory+json') {\n        return 'directory';\n    }\n    // for files, asset_sub_type is not present in USS response\n    // so we assign anything else that is not dcx or directory as file\n    if (source.creative_cloud_asset_type !== 'dcx') {\n        return 'file';\n    }\n    return source.asset_sub_type;\n}\n\nfunction getUSSLastAccessed(source: Partial<USSMetadata>) {\n    const lastAccessedISOString = source['api:metadata/peruser']?.[0]?.['shell:lastAccessDate'];\n    // If the property is not present, the current value should be left alone\n    if (lastAccessedISOString === undefined) {return NotFound;}\n    // If the property is present, but empty, clear the current value\n    if (lastAccessedISOString === '') {return undefined;}\n    return lastAccessedISOString;\n}\n\nfunction getCreatedFromUpload(source: Partial<USSMetadata>): boolean | undefined {\n    return source['api:metadata/application']?.['cc:createdFromUpload'];\n}\n\nfunction getUSSStorageRegion(source: Partial<USSMetadata>): string {\n    // USS stores 'region' as 'US', 'AP', 'EU' for some Assets, and 'va6c2', 'va7' for other Assets. According to USS\n    // team, the US/AP/EU strings can be mapped to VA6/JPN3/IRL1, and the others match the R-API storage:region.\n    switch (source.region?.toLowerCase()) {\n    case 'us':\n        return 'VA6';\n    case 'ap':\n        return 'JPN3';\n    case 'eu':\n        return 'IRL1';\n    default:\n        return source.region?.toUpperCase() || '';\n    }\n}\n\n// USS result item does not contain asset name in path, to keep it sync with repo path\n// received from RAPI, we will add asset name in asset path while creating/updating asset\n// from USS result\nfunction getAssetPath(source: Partial<USSMetadata>): string {\n    if (source.asset_name_path && source.asset_name) {\n        return path.join(source.asset_name_path, source.asset_name);\n    }\n    return source.asset_name_path || source.asset_name || '';\n}\n\nfunction getEtag(source: Partial<USSMetadata>): string {\n    return source.composite_manifest_etag || source.etag?.primary || '';\n}\n\nexport type USSAdobeAssetUpdaterMetadata = Partial<USSMetadata> & {\n    // from SWY/Recent Loader\n    sharedViaInvite?: boolean;\n    isShared?: boolean;\n    // from Published Loader\n    published?: boolean;\n    // from Discarded loader\n    isArchivedLibraryElement?: boolean;\n    isPublicLink?: boolean;\n    directCollaboratorCount?: number;\n    shareFlagsAreDirty?: boolean;\n}\n\nconst USSAssetItemUpdaterOptions: IItemUpdaterOptions<AdobeAsset, USSAdobeAssetUpdaterMetadata> = {\n    localItemType: AdobeAsset,\n    remoteIdProperty: 'asset_id',\n    // We want the SharedCollaboratorChangedEvent to fire when these properties update\n    // so that internally and externally we can respond to this specific event to do\n    // things like update collaborators etc.\n    changeEventMap: new Map([\n        [ '_isShared', SharedCollaboratorChangedEvent ],\n        [ '_isSharedWithYouAsset', SharedCollaboratorChangedEvent ],\n        [ '_isPublicLink', SharedCollaboratorChangedEvent ],\n        [ '_directCollaboratorCount', SharedCollaboratorChangedEvent ]\n    ]),\n    propertyUpdater: new PropertyUpdater({\n        '_name': 'asset_name',\n        '_etag': { get: getEtag },\n        // NOTE: USS team added this field recently, so only some Assets will have this field until\n        //       re-indexing is finished, which has ETA of Feb 28 2023\n        '_repositoryID': 'repo:repositoryId',\n        '_path': { get: getAssetPath, format: 'string' },\n        '_type': { get: getUSSAssetType, format: 'string' },\n        '_size': { name: 'size', format: 'number' },\n        '_version': 'asset_version_id',\n        '_assetClass': { get: getUSSAssetClass, choices: AssetClassChoices, format: 'string' },\n        '_permissions': { get: getPermission, format: 'number' },\n        '_created': { name: 'create_date', format: 'date' },\n        '_modified': { name: 'modify_date', format: 'date' },\n        '_shared': { name: 'collab_metadata#mine.shared_date', format: 'date_as_number' },\n        '_discarded': { name: 'discarded_date', format: 'date' },\n        '_discardedBy': 'discarded_by',\n        '_assetState': { name: 'repo:state', choices: AssetStateChoices, format: 'string' },\n        '_isArchivedLibraryElement': { name: 'isArchivedLibraryElement', format: 'boolean' },\n        '_lastAccessed': { get: getUSSLastAccessed, format: 'date' },\n        '_createdFromUpload': { get: getCreatedFromUpload, format: 'boolean' },\n        '_storageAssignee': { name: 'storage:assignee', format: StorageAssigneeFormat },\n        '_storageRegion': { name: 'region', get: getUSSStorageRegion, format: 'string' },\n        '_createdBy': 'creative_cloud_creator_id',\n        '_isSharedWithYouAsset': { name: 'sharedViaInvite', format: 'boolean' },\n        '_isShared': { name: 'isShared', format: 'boolean' },\n        '_isPublicLink': { name: 'isPublicLink', format: 'boolean' },\n        '_directCollaboratorCount': { name: 'directCollaboratorCount', format: 'number' },\n        '_isPublished': { name: 'published', format: 'boolean' },\n        '_imageLength': { name: 'image_height', format: 'number' },\n        '_imageWidth': { name: 'image_width', format: 'number' },\n        '_shareFlagsAreDirty': { name: 'shareFlagsAreDirty', format: 'boolean' },\n        // See notes in AdobeAssetUpdater\n        '_appMetadata._data': {\n            name: 'app_metadata',\n            format: 'object_subset',\n            set: (parsedSource: any, dest: any) => {\n                const asset = dest as AdobeAsset;\n                asset.appMetadata._mergeData(parsedSource);\n            }\n        },\n        '_ancestorIDs': { name: 'path', isArray: true, format: 'string' },\n        '__links': { name: '_links', format: 'object' },\n        '_createdByClientId': 'repo:createdByClientId'\n    })\n};\n\nexport const USSAdobeAssetUpdater = new ItemUpdater<AdobeAsset, USSAdobeAssetUpdaterMetadata>(USSAssetItemUpdaterOptions);\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport InterfaceBase from './InterfaceBase';\nimport { getURLFromLinks, IServiceLink, RelType } from './LinkUtils';\nimport SAMError from '../core/SAMError';\n\ninterface IAssetTransferServiceLinks {\n    [RelType.ATS_MOVE]: IServiceLink\n}\n\ninterface IAssetTransferServiceIndexResponse {\n    _links: IAssetTransferServiceLinks\n}\n\ninterface IAssetTransferQuery {\n    source: { assetId: string, repositoryId: string},\n    target: { assetId: string, repositoryId: string}\n}\n\nexport default class AssetTransferInterface extends InterfaceBase {\n    async transfer(data: IAssetTransferQuery): Promise<string> {\n        const links = await this.discoverLinks();\n        const response = await this._doPost(\n            getURLFromLinks(links, RelType.ATS_MOVE),\n            { 'Content-Type': 'application/json' },\n            JSON.stringify(data), [ 200 ]);\n\n        // Asset Transfer Service will return a 200 response when a dependent service fails.\n        const json = await response.json();\n        if (json.status && json.status !== 200) {\n            throw SAMError.createWithResponse(response);\n        }\n\n        // Returns the transferred asset's Cloud ID.\n        return json.assetId;\n    }\n\n    async discoverLinks(): Promise<IAssetTransferServiceLinks> {\n        const response = await this._getResponse<IAssetTransferServiceIndexResponse>(this.getUrl('/'));\n        return response._links;\n    }\n\n    private getUrl(endpoint: string): string {\n        return `https://${this._core._environment.endpoints.TRANSFER_SERVICE_HOST}${endpoint}`;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport InterfaceBase from './InterfaceBase';\nimport { cache, key } from '../core/decorators';\nimport {\n    IServiceLink,\n    LinkRequirements,\n    RelType,\n    validateLinks,\n    HeaderMap,\n    getURLFromLinks,\n    JSON_MIME_TYPE\n} from './LinkUtils';\nimport AdobeAsset from '../assets/AdobeAsset';\nimport { Either } from '../utils/either';\n\nexport type AssetReviewServiceData = {\n    hasArtifacts: boolean;\n}\n\nconst REVIEW_SERVICE_LINKS: LinkRequirements = {\n    [RelType.REVIEW_SERVICE_PROVISION]: [\n        'documentId',\n        'assetRegion',\n        'repositoryId'\n    ],\n    [RelType.REVIEW_SERVICE_DISCARD]: [ 'assetId', 'assetRegion', 'repositoryId' ],\n    [RelType.REVIEW_SERVICE_OUTPUTS]: [\n        'assetId',\n        'assetRegion',\n        'documentId',\n        'embed',\n        'limit',\n        'orderBy',\n        'outputType',\n        'repositoryId',\n        'start'\n    ],\n    [RelType.REVIEW_SERIVCE_HAS_OUTPUTS]: [ 'assetRegion' ]\n};\n\ninterface IReviewServiceIndexLinks {\n    [RelType.REVIEW_SERIVCE_HAS_OUTPUTS]: IServiceLink,\n    [RelType.REVIEW_SERVICE_DISCARD]: IServiceLink,\n    [RelType.REVIEW_SERVICE_OUTPUTS]: IServiceLink,\n    [RelType.REVIEW_SERVICE_PROVISION]: IServiceLink\n}\n\ninterface IReviewServiceIndexResponse {\n    _links: IReviewServiceIndexLinks\n}\n\nexport interface IReviewServiceAssetIdentifer {\n    ['repo:assetId']: string;\n    ['repo:repositoryId']: string;\n}\n\nexport const mapAssetsToAssetIndentifier = function (assets: AdobeAsset[]): IReviewServiceAssetIdentifer[] {\n    return assets.map((asset: AdobeAsset) => {\n        return {\n            'repo:assetId': asset.id,\n            'repo:repositoryId': asset.repositoryID\n        };\n    });\n};\n\nfunction validateReviewServiceLinks(links: any) {\n    return validateLinks(links, REVIEW_SERVICE_LINKS);\n}\n\n// See https://wiki.corp.adobe.com/pages/viewpage.action?spaceKey=CreativeCloudAssets&title=Proposal+v2%3A+CCARS+Frame+S4R+APIs\n//  for schema of a response.\nexport interface IReviewServiceFrameLinkResponse {\n    'repo:assetId': string;         /* a unique identifier for cloud source documents (cloud-id)*/\n    'review:documentId': string;    /* a unique identifier for local source documents (xmpDocumentId) */\n    'frameio:reviewLinkId': string; /* a Frame.io identifier for a review link */\n    'frameio:artifactId': string;   /* a Frame.io identifier for an asset ( file or version_stack ) */\n    'frameio:projectId': string;    /* a Frame.io identifier for the project containing the review link */\n    'repo:createdDate': number;     /* Date Time when the review link was created */\n    'repo:modifiedDate': number;    /* Date Time when the review link was updated */\n    'repo:etag': string;            /* etag of the review link stored */\n}\n\n//--------------------------------------------------------------------\n// Parameters for POST/GET/PUT/DELETE to frameLink endpoint\n//\n// The source document is either a local document, in which case\n// you identify it only with documentId ( the XMP DocumentId ),\n// or it's a cloud document, in which case, you provide it's\n// cloud-id as assetId, and optionally provide an assetRegion.\n\ntype ReviewServiceCloudSource = {\n    assetId: string;\n    assetRegion?: string;\n    repositoryId?: string;\n};\n\ntype ReviewServiceLocalSource = {\n    documentId: string;\n};\n\n// AssetReviewServiceInterface.createReviewLink() parameter\nexport type ReviewServiceCreateReviewLinkParam =  Either<ReviewServiceCloudSource, ReviewServiceLocalSource> & {\n    reviewLinkId: string;\n    artifactId: string;\n    projectId: string;\n};\n\n// AssetReviewServiceInterface.getReviewLinks() parameter\nexport type ReviewServiceGetReviewLinksParam =  Either<ReviewServiceCloudSource, ReviewServiceLocalSource> & {\n    reviewLinkId?: string;\n};\n\n// AssetReviewServiceInterface.updateReviewLink() parameter\nexport type ReviewServiceUpdateReviewLinkParam =  Either<ReviewServiceCloudSource, ReviewServiceLocalSource> & {\n    reviewLinkId: string;\n    artifactId: string;\n    projectId: string;\n    etag?: string;\n};\n\n//--------------------------------------------------------------------\n\n// AssetReviewServiceInterface.deleteReviewLink() parameter\nexport type ReviewServiceDeleteReviewLinkParam =  Either<ReviewServiceCloudSource, ReviewServiceLocalSource> & {\n    reviewLinkId: string;\n    etag?: string;\n};\n\n//  end parameters for frameLink endpoint\n//--------------------------------------------------------------------\n\n\nexport default class AssetReviewServiceInterface extends InterfaceBase {\n    public readonly baseURL = `https://${this._core._environment.endpoints.REVIEW_SERVICE_HOST}`;\n    public readonly baseEndpoint: string = '/api/v1';\n    public readonly indexEndpoint = this.baseEndpoint + '/index';\n\n    public getEndpointURL(endpoint: string): string {\n        return `${this.baseURL}${endpoint}`;\n    }\n\n    @cache(validateReviewServiceLinks)\n    private async _discoverLinks(@key rootHref: string): Promise<IReviewServiceIndexLinks> {\n        const response: IReviewServiceIndexResponse = await this._getResponse(rootHref, this._getHeaders());\n        return response._links;\n    }\n\n    private _getHeaders(contentType?: string): HeaderMap {\n        const headers: HeaderMap = {};\n        if (contentType) {\n            headers['Content-Type'] = contentType;\n        }\n        return headers;\n    }\n\n    async discoverLinks(): Promise<IReviewServiceIndexLinks> {\n        return this._discoverLinks(this.getEndpointURL(this.indexEndpoint));\n    }\n\n    public async discardOutputsForAsset(assetId: string, assetRegion?: string, repositoryID?: string): Promise<void> {\n        const links = await this.discoverLinks();\n        const url = getURLFromLinks(\n            links,\n            RelType.REVIEW_SERVICE_DISCARD,\n            {\n                assetId,\n                ...(assetRegion && { assetRegion }),\n                ...(repositoryID && { repositoryID }),\n            }\n        );\n        await this._doPost(url, this._getHeaders(), undefined, [ 204 ]);\n    }\n\n    async hasOutputs(assets: IReviewServiceAssetIdentifer[], assetRegion?: string): Promise<IReviewServiceAssetIdentifer[]> {\n        const links = await this.discoverLinks();\n        const url = getURLFromLinks(\n            links,\n            RelType.REVIEW_SERIVCE_HAS_OUTPUTS,\n            { ...(assetRegion && { assetRegion }) },\n        );\n        const response = await this._doPost(url, this._getHeaders(JSON_MIME_TYPE), JSON.stringify(assets), [ 200 ]);\n        return await response.json();\n    }\n\n    private _createFrameLinkUrl(params: any) {\n        const url = new URL(`${this.baseURL}/api/v1/frameioLink`);\n        Object.entries(params).forEach(([ key, val ]) => url.searchParams.set(key, val as string));\n        return url.toString();\n    }\n\n    /*\n     * See https://wiki.corp.adobe.com/display/CreativeCloudAssets/Proposal+v2%3A+CCARS+Frame+S4R+APIs\n     *\n     * We use the frameLink endpoint for all four CRUD operations, we just change the method:\n     *  POST -> associate a new review with source document\n     */\n    public async createReviewLink(param: ReviewServiceCreateReviewLinkParam): Promise<IReviewServiceFrameLinkResponse> {\n        const { reviewLinkId, artifactId, projectId, ...query } = param;\n\n        const response = await this._doPost(\n            this._createFrameLinkUrl(query),\n            { 'Content-Type': 'application/json' },\n            JSON.stringify({\n                reviewLinkId: `${reviewLinkId}`,\n                artifactId: `${artifactId}`,\n                projectId: `${projectId}`\n            })\n        );\n\n        return await response.json();\n    }\n\n    /*\n     * See https://wiki.corp.adobe.com/display/CreativeCloudAssets/Proposal+v2%3A+CCARS+Frame+S4R+APIs\n     *\n     * We use the frameLink endpoint for all four CRUD operations, we just change the method:\n     *  GET -> return array of all reviews associated with source document\n     */\n    public async getReviewLinks(param: ReviewServiceGetReviewLinksParam): Promise<Array<IReviewServiceFrameLinkResponse>> {\n        const response = await this._doGet(\n            this._createFrameLinkUrl(param),\n        );\n\n        return await response.json();\n    }\n\n    /*\n     * See https://wiki.corp.adobe.com/display/CreativeCloudAssets/Proposal+v2%3A+CCARS+Frame+S4R+APIs\n     *\n     * We use the frameLink endpoint for all four CRUD operations, we just change the method:\n     *  PUT -> update an existing review associated with source document\n     */\n    public async updateReviewLink(param: ReviewServiceUpdateReviewLinkParam): Promise<IReviewServiceFrameLinkResponse> {\n        const { artifactId, projectId, etag = '*', ...query } = param;\n\n        const response = await this._doPut(\n            this._createFrameLinkUrl(query),\n            {\n                'Content-Type': 'application/json',\n                'If-Match': `${etag}`\n            },\n            JSON.stringify({\n                artifactId: `${artifactId}`,\n                projectId: `${projectId}`\n            })\n        );\n\n        return await response.json();\n    }\n\n    /*\n     * See https://wiki.corp.adobe.com/display/CreativeCloudAssets/Proposal+v2%3A+CCARS+Frame+S4R+APIs\n     *\n     * We use the frameLink endpoint for all four CRUD operations, we just change the method:\n     *  DELETE -> update an existing review associated with source document\n     */\n    public async deleteReviewLink(param: ReviewServiceDeleteReviewLinkParam): Promise<void> {\n        const { etag, ...query } = param;\n\n        let headers: HeaderMap = {};\n\n        if (etag) {\n            headers = {\n                'If-Match': `${etag}`\n            };\n        }\n\n        // there is no reponse body to a DELETE returning status 204\n        await this._doDelete(\n            this._createFrameLinkUrl(query),\n            headers,\n            [ 204 ]\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nexport const reloadSpace = Symbol('reloadSpace');\nexport const clearLastReloadError = Symbol('clearLastReloadError');\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { SpaceSearchConfig } from './SpaceSearchSource';\nimport ItemPool from '../core/ItemPool';\nimport AdobeAsset from './AdobeAsset';\nimport { OrderByToUSSOrderBy, USSMetadata, USSResponse } from '../interface/USSModel';\nimport SAMError, { SAMErrorCode } from '../core/SAMError';\nimport SpaceSearchAssetFilter, { ISpaceSearchAssetFilterOptions } from './SpaceSearchAssetFilter';\nimport USSInterface from '../interface/USSInterface';\nimport USSLoaderHelper, { IGetUSSResults, IUSSLoader } from './USSLoaderHelper';\nimport { IItemLoaderOptions, ILoadedPage } from '../core/ItemLoader';\nimport { ISAMCorePrivate } from '../indexPrivate';\n\nexport default class SpaceSearchAssetLoader implements IUSSLoader<SpaceSearchConfig> {\n    private _ussLoaderHelper: USSLoaderHelper<SpaceSearchConfig>;\n\n    constructor(\n        assetPool: ItemPool<AdobeAsset>,\n        core: ISAMCorePrivate,\n        private _asset: AdobeAsset,\n        private _ussInterface: USSInterface,\n        private _artifactFilter: ISpaceSearchAssetFilterOptions['artifactFilter'],\n        private _embedPermissions: boolean = false\n    ) {\n        this._ussLoaderHelper = new USSLoaderHelper(assetPool, core, this);\n    }\n\n    supportsFilter(filter: any): boolean {\n        const supportedFilters: SpaceSearchAssetFilter[] = [];\n        supportedFilters.push(filter);\n\n        // Client can call getList with SpaceSearchAssetFilter.artifactFilter undefined, but can't pass\n        // SSAF.artifactFilter that doesn't match this._artifactFilter\n        if (!supportedFilters.every(f => (f.artifactFilter === this._artifactFilter || f.artifactFilter === undefined))) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST,\n                'SpaceSearchAssetFilter.artifactFilter does not match SpaceSearchAssetLoader.artifactFilter');\n        }\n        return true;\n    }\n\n    loadPage(options: IItemLoaderOptions<SpaceSearchConfig>): Promise<ILoadedPage<SpaceSearchConfig>> {\n        return this._ussLoaderHelper.loadPage(options);\n    }\n\n    /**\n     * @package -- for use by USSLoaderHelper\n     */\n    async _getUSSResults({\n        start,\n        limit,\n        order,\n        mediaTypes\n    }: IGetUSSResults<SpaceSearchConfig>): Promise<USSResponse> {\n        return this._ussInterface.searchSpace(\n            this._asset.id,\n            this._artifactFilter === 'onlyArtifacts',\n            this._embedPermissions,\n            {\n                type: mediaTypes,\n                sort_orderby: OrderByToUSSOrderBy[order.field],\n                sort_order: order.direction === 'descending' ? 'desc' : 'asc',\n                limit,\n                start_index: start\n            }\n        );\n    }\n\n    /**\n     * @package -- for use by USSLoaderHelper\n     */\n    _getItemData: (item: Partial<USSMetadata>) => Partial<USSMetadata> = this._getItemDataWithRepoId(this._asset.repositoryID);\n\n    private _getItemDataWithRepoId(repoID: string) {\n        // TODO: Patching should be removed once https://jira.corp.adobe.com/browse/SRCH-1989 is fixed\n        //       and re-indexing is finished, which has ETA of Feb 28 2023\n        return (item: Partial<USSMetadata>) => {\n            return {\n                ...item,\n                'repo:repositoryId': repoID\n            };\n        };\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ImplicitAdobeAssetFilterBase from './ImplicitAdobeAssetFilterBase';\nimport { IItemFilter, ItemFilterRelation } from '../core/ItemFilter';\nimport AdobeAsset from './AdobeAsset';\n\nexport interface ISpaceSearchAssetFilterOptions {\n    // For Space.searchWorkingFiles and Space.searchArtifacts, it needs an implicit filter\n    // so the two sources generate separate lists. Can't use the AdobeAsset of the Space or\n    // the working_files folder, because it isn't known at the time the Source is constructed.\n    readonly asset?: AdobeAsset;\n    readonly artifactFilter?: 'onlyArtifacts' | 'excludeArtifacts';\n    /**\n     * @package -- for use in SAM.js only\n     */\n    readonly _includeHiddenRecursive?: boolean;\n}\n\nexport default class SpaceSearchAssetFilter extends ImplicitAdobeAssetFilterBase implements IItemFilter<AdobeAsset> {\n    static default = new SpaceSearchAssetFilter();\n    private _asset?: AdobeAsset;\n    readonly artifactFilter?: ISpaceSearchAssetFilterOptions['artifactFilter'];\n\n    constructor(options?: ISpaceSearchAssetFilterOptions) {\n        super({ _includeHiddenRecursive: options?._includeHiddenRecursive });\n        this._asset = options?.asset;\n        this.artifactFilter = options?.artifactFilter;\n    }\n\n    get hash() {\n        return [\n            // include 'spaceSearch' so a match on hash can only happen\n            // for other spaceSearch lists\n            'spaceSearch', this._asset?.id, this.artifactFilter, super.hash\n        ].filter(x => x).join(':');\n    }\n\n    matches(item: AdobeAsset) {\n        // check if item is a descendant of the space/working Files folder\n        if (this._asset?.repoPath && !item.repoPath.startsWith(`${this._asset.repoPath}/`)) {\n            return false;\n        }\n\n        // check item meets artifactFilter criteria\n        if (item.isArtifact && this.artifactFilter === 'excludeArtifacts') {\n            return false;\n        }\n        if (!item.isArtifact && this.artifactFilter === 'onlyArtifacts') {\n            return false;\n        }\n\n        return super.matches(item);\n    }\n\n    getRelationToFilter(other: SpaceSearchAssetFilter): ItemFilterRelation {\n        const repoPath = this._asset?.repoPath;\n        const otherRepoPath = other._asset?.repoPath;\n        if (repoPath\n            && otherRepoPath\n            && !repoPath.startsWith(`${otherRepoPath}/`)\n            && !otherRepoPath.startsWith(`${repoPath}/`)\n        ) {\n            // no overlap in descendants\n            return 'disjoint';\n        }\n\n        if (this.artifactFilter\n            && other.artifactFilter\n            && this.artifactFilter !== other.artifactFilter\n        ) {\n            // mutually exclusive artifactFilter\n            return 'disjoint';\n        }\n\n        const mediaTypeRelation: ItemFilterRelation = super.getRelationToFilter(other);\n        if (mediaTypeRelation === 'disjoint') {\n            return 'disjoint';\n        }\n\n        //----- All 'disjoint' cases must be handled above this line\n\n        if (mediaTypeRelation === 'unknown') {\n            // This filter shares some, but not all of the mediaTypes of other. They\n            // could overlap, but can't know for sure.\n            return 'unknown';\n        }\n\n        if (!repoPath && otherRepoPath) {\n            // This list isn't filtered by asset's path, but the other could contain\n            // some of this list's items, but possibly not all of them.\n            return 'unknown';\n        }\n\n        if (repoPath\n            && otherRepoPath\n            && repoPath.startsWith(`${otherRepoPath}/`)\n        ) {\n            // This asset is a descendant of the other's, so it could have\n            // some of the other's items, but possibly not all of them.\n            return 'unknown';\n        }\n\n        if (!this.artifactFilter && other.artifactFilter) {\n            // This list isn't filtered by Artifact status, but the other is.\n            // It could have some\n            return 'unknown';\n        }\n\n        //------ All 'unknown' cases must be handled above this line\n\n        // Since the filters can't be 'disjoint', there must be some overlap, leaving\n        // only 'unknown' and 'subset' as a possibility. Since all 'unknown' cases have\n        // been eliminated, the only remaining possibility is 'subset'.\n        return 'subset';\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ShareableItem from '../collaboration/ShareableItem';\nimport { memoize, observable } from '../core/decorators';\nimport type { IProjectsSpace, IProjectsSpaceChild, IProjectsSpaceChildLinks, IProjectsSpaceChildName, IProjectsSpaceLinks, IProjectsSpaceState } from '../interface/WorkspacesModel';\nimport ItemUpdater from '../core/ItemUpdater';\nimport PropertyUpdater, { PropertyFormatType } from '../core/PropertyUpdater';\nimport { isDeepEqual } from '../core/ObjectUtils';\nimport type { ISpaceUpdate } from './SpaceContext';\nimport { SharedChangeEvent } from '../core/ChangeEvent';\nimport { clearLastReloadError, reloadSpace } from '../core/InternalProperties';\nimport { SAMError, assert, SAMErrorCode } from '../core/SAMError';\nimport ItemSource from '../core/ItemSource';\nimport { SpaceSearchSource } from '../assets/SpaceSearchSource';\nimport SpaceSearchAssetLoader from '../assets/SpaceSearchAssetLoader';\nimport SpaceSearchAssetFilter from '../assets/SpaceSearchAssetFilter';\nimport { AdobeAssetSource } from '../assets/AdobeAssetSource';\n\nexport type TeamRole = 'UNKNOWN' | 'NONE' | 'MEMBER';\nconst TeamRoles = [ 'UNKNOWN', 'NONE', 'MEMBER' ];\n\nexport type RGBColor = string;\n\nexport type SpaceAccess =\n    | 'private'\n    | 'team';\n\nexport type SpaceRole =\n    | 'NONE'          // Has no access to the space\n    | 'CONTRIBUTOR'   // Has access to all parts of the space and can edit the contents of a space\n    | 'REVIEWER';     // Has read-only access to the artifacts in a space\n\nconst SpaceAccessChoices: SpaceAccess[] = [ 'private', 'team' ];\nconst SpaceRoleChoices: SpaceRole[]  = [ 'NONE', 'CONTRIBUTOR', 'REVIEWER' ];\n\nexport type SpaceState = IProjectsSpaceState;\nconst SpaceStates: SpaceState[] = [ 'active', 'archived', 'in_progress' ];\n\nexport type ISpaceChild = {\n    id: string;\n    _links: IProjectsSpaceChildLinks;\n};\n\nexport type SpaceChildName = IProjectsSpaceChildName;\n\nexport type ISpaceReloadOptions = {\n    refreshTimeout?: number;\n};\n\ntype SpaceReload = {\n    pending: boolean;\n    promise: Promise<void>;\n    generation: number;\n    requestTime: number;\n    inProgress: boolean;\n    error?: any;\n};\n\n/// Represents the notion of a \"space\" where multiple Adobe account holders collaborate\nexport default class Space extends ShareableItem {\n\n    private _name: string = '';\n    private _repositoryID: string = '';\n    private _repositoryName: string = '';\n    private _pathName: string = '';\n    private _created: Date = new Date();\n    private _modified: Date = new Date();\n    private _contributorCount: number = 0;\n    private _role: SpaceRole = 'NONE';\n    private _color: RGBColor = '';\n    private _isBookmarked: boolean = false;\n    private _teamID: string = '';\n    private _teamName: string = '';\n    private _description?: string;\n    private _thumbnail: string = '';\n    private _access: SpaceAccess = 'private';\n    private _etag: string = '';\n    private _children?: Map<SpaceChildName, ISpaceChild>;\n    private _version: number = 0;\n    private _state: SpaceState = 'active';\n    private __links: IProjectsSpaceLinks | undefined;\n\n    private _lastReload?: SpaceReload;\n    private _loadedGeneration: number = 0;\n\n    // Note that we maintain this flag based on where the item was loaded from.\n    // Spaces loaded via the teamAccess=false API will have teamRole='NONE', all other\n    // spaces will assume a 'UNKNOWN' role until they are updated with the correct role\n    // on the client side.\n    private _teamRole: TeamRole = 'UNKNOWN';\n\n    /// The unique id that represents the space.\n    get spaceID(): string {\n        return this.id;\n    }\n\n    /// The user-visible name assigned to the space.\n    @observable\n    get name(): string {\n        return this._name;\n    }\n\n    @observable\n    get access(): SpaceAccess {\n        return this._access;\n    }\n\n    @observable\n    get etag(): string {\n        return this._etag;\n    }\n\n    @observable\n    get state(): SpaceState {\n        return this._state;\n    }\n\n    /// The unique id of the repository that owns this space.\n    @observable\n    get repositoryID(): string {\n        return this._repositoryID;\n    }\n\n    /// The user-visible name of the repository (i.e. the organization name) that owns this space.\n    @observable\n    get repositoryName(): string {\n        return this._repositoryName;\n    }\n\n    /// The full path name for the space (e.g. \"/content/assets/Everyone/Test Space\").\n    @observable\n    get pathName(): string {\n        return this._pathName;\n    }\n\n    /// The created date of the space, relative to 00:00:00 UTC on Jan 1, 1970.\n    @observable\n    get created(): Date {\n        return this._created;\n    }\n\n    /// The modified date of the space, relative to 00:00:00 UTC on Jan 1, 1970.\n    @observable\n    get modified(): Date {\n        return this._modified;\n    }\n\n    /// Total number of contributors for this space. Any groups that are added as a Contributor\n    /// count as 1 toward this total.\n    @observable\n    get contributorCount(): number {\n        return this._contributorCount;\n    }\n\n    /// Role on the space for the current user.\n    @observable\n    get role(): SpaceRole {\n        return this._role;\n    }\n\n    /// The color assigned to the space.\n    @observable\n    get color(): RGBColor {\n        return this._color;\n    }\n\n    /// Indicates whether the space is bookmarked (i.e. followed) by the current user.\n    @observable\n    get isBookmarked(): boolean {\n        return this._isBookmarked;\n    }\n\n    /// The teamID of the parent team.\n    @observable\n    get teamID(): string {\n        return this._teamID;\n    }\n\n    /// The user-visible name of the parent team.\n    @observable\n    get teamName(): string {\n        return this._teamName;\n    }\n\n    /// Description of the space.\n    @observable\n    get description(): string | undefined {\n        return this._description;\n    }\n\n    /// Thumbnail URL of the space.\n    @observable\n    get thumbnail(): string {\n        return this._thumbnail;\n    }\n\n    @observable\n    get version(): number {\n        return this._version;\n    }\n\n    @observable\n    get teamRole(): TeamRole {\n        return this._teamRole;\n    }\n\n    @observable\n    get _links(): IProjectsSpaceLinks | undefined {\n        return this.__links;\n    }\n\n    async ensureDescription(): Promise<string> {\n        if (this._description === undefined) {\n            await this.load({ refreshTimeout: -1 });\n        }\n        return this.description ?? '';\n    }\n\n    async getChild(name: SpaceChildName): Promise<ISpaceChild | undefined> {\n        if (!this._children) {\n            // Retrieve the children of the space if needed.\n            await this.load({ refreshTimeout: -1 });\n        }\n        return this._children?.get(name);\n    }\n\n    // Only used for 1-Off Invitees.\n    // Memoized so the same Source and its Lists can be reused.\n    @memoize\n    async searchWorkingFiles(): Promise<SpaceSearchSource> {\n        const { _assetPool, _ussInterface } = this._core.hostAssetContext;\n\n        const workingFilesFolder = await this._core.hostAssetContext\n            .getAssetWithRepoPath(`${this.pathName}/working_files`, this.repositoryID);\n\n        const spaceSearchAssetLoader = new SpaceSearchAssetLoader(\n            _assetPool,\n            this._core,\n            workingFilesFolder,\n            _ussInterface,\n            'excludeArtifacts',\n            true // always include permissions for 1-off invitees\n        );\n\n        const implicitFilter = new SpaceSearchAssetFilter({\n            asset: workingFilesFolder,\n            artifactFilter: 'excludeArtifacts'\n        });\n        return new ItemSource(_assetPool, [ spaceSearchAssetLoader ], implicitFilter);\n    }\n\n    // All Space members should use `searchArtifacts(false)`, as the UI can assume the user has\n    // full permissions. For 1-Off Invitees, use `searchArtifacts(true)`\n    // Memoized so the same Source and its Lists can be reused -- note that this means you\n    // cannot switch between embedPermissions = true and = false.\n    @memoize\n    async searchArtifacts(embedPermissions: boolean = false): Promise<SpaceSearchSource> {\n        const { _assetPool, _ussInterface } = this._core.hostAssetContext;\n\n        const spaceAdobeAsset = await this._core.hostAssetContext.getAssetWithCloudID(this.id);\n\n        const spaceSearchAssetLoader = new SpaceSearchAssetLoader(\n            _assetPool,\n            this._core,\n            spaceAdobeAsset,\n            _ussInterface,\n            'onlyArtifacts',\n            embedPermissions\n        );\n\n        const implicitFilter = new SpaceSearchAssetFilter({\n            asset: spaceAdobeAsset,\n            artifactFilter: 'onlyArtifacts',\n            // Some artifacts may be in hidden folders\n            _includeHiddenRecursive: true\n        });\n        return new ItemSource(_assetPool, [ spaceSearchAssetLoader ], implicitFilter);\n    }\n\n    @memoize\n    async getWorkingFiles(): Promise<AdobeAssetSource> {\n        // Assuming repo path of working_files rather than getting it via discovery so it is compatible\n        // with SAM.cpp AssetContext. When all of Spaces can be handled in SAM.cpp, this should switch back\n        // to using discovery.\n        // const workingFiles = await this.getChild('working_files');\n        // if (!workingFiles) {\n        //     throw SAMError.create(SAMErrorCode.NOT_FOUND, 'could not load working_files');\n        // }\n        // const folder = await this._core.hostAssetContext.getAssetWithCloudID(workingFiles.id);\n        const folder = await this._core.hostAssetContext\n            .getAssetWithRepoPath(`${this.pathName}/working_files`, this.repositoryID);\n        return folder.children!;\n    }\n\n    async load(options?: ISpaceReloadOptions): Promise<void> {\n        const refreshTimeout = options?.refreshTimeout;\n        let lastReload = this._lastReload;\n        const canReuseLastReload = lastReload && (\n            // The previous load is still pending execution, so we could reuse the same call.\n            lastReload.pending\n            // Just wanted to do at least one load.\n            || refreshTimeout === -1\n            // Just in case the data didn't expire already.\n            || (refreshTimeout && lastReload.requestTime + refreshTimeout > Date.now()));\n\n        if (!canReuseLastReload) {\n            // Otherwise let's load the space again.\n            // Note that generation of reloads, we want to make sure that only the very last reload\n            // gets a chance to update the space.\n            lastReload = this._lastReload = {\n                pending: true,\n                inProgress: true,\n                generation: (lastReload?.generation ?? this._loadedGeneration) + 1,\n                requestTime: Date.now(),\n                promise: new Promise((resolve, reject) => {\n                    // Wait until the loop ends to avoid multiple queries on the same data.\n                    setTimeout(() => this._executeReload(lastReload!).finally(() =>\n                        lastReload!.error ? reject(lastReload!.error) : resolve()), 0);\n                })\n            };\n\n            // Notify the users we have a new loading session.\n            this.dispatch(SharedChangeEvent);\n        }\n\n        await lastReload!.promise;\n    }\n\n    private async _executeReload(reload: SpaceReload) {\n        if (reload !== this._lastReload) {\n            // The same reload will be used inside the load method up to the point when we actually execute the request.\n            // However, there's a case when the `clearLastReloadError` was used while we were waiting. in the setTimeout above.\n            // In that case we can just avoid fetching the request entirely.\n            assert(!reload.pending, 'The pending flag must be false after the reload was cleared out.');\n            return;\n        }\n\n        // Make a note that the request was executed.\n        reload.pending = false;\n        try {\n            await this._core.spaceContext[reloadSpace](this);\n        } catch (error: any) {\n            reload.error = error;\n        }\n        // Check if the asset was removed. We will want to remove it from the lists.\n        reload.inProgress = false;\n\n        const lastReload = this._lastReload;\n        if (lastReload !== reload && reload.generation <= this._loadedGeneration) {\n            // This result is older than a newer request that was already applied to this object.\n            // Ignore the results. This can happen if a particular request takes longer to execute\n            // and a new reload was already good to go.\n            return;\n        }\n\n        if (reload.error instanceof SAMError && reload.error.code === SAMErrorCode.NOT_FOUND) {\n            const session = this._core.spaceContext.spacePool.createUpdateSession();\n            session.queueDiscardedItem(this);\n            session.commit();\n        }\n\n        // Notify about the end of the load sequence.\n        this.dispatch(SharedChangeEvent);\n    }\n\n    /**\n     * If the item gets updated through the listing API then we need to clear any errors from the previous reload.\n     * This usually happens if the user gets re-invited to a space while the space is still in memory.\n     * At that point, we need to clear the previous error when the listing API detects the new space.\n     */\n    [clearLastReloadError]() {\n        const lastReload = this._lastReload;\n        if (lastReload?.error) {\n            lastReload.error = undefined;\n\n            // Setting pending to false to be able to track it inside `_executeReload` above.\n            lastReload.pending = false;\n\n            this.dispatch(SharedChangeEvent);\n        }\n    }\n\n    @observable\n    get isReloading(): boolean {\n        return this._lastReload?.inProgress ?? false;\n    }\n\n    @observable\n    get lastReloadError(): any {\n        return this._lastReload?.error;\n    }\n\n    async update(data: ISpaceUpdate) {\n        await this._core.spaceContext.updateSpace(this, data);\n    }\n\n    async rename(newName: string) {\n        await this._core.spaceContext.updateSpace(this, { name: newName });\n    }\n\n    async archive() {\n        const resultItems = await this._core.spaceContext.archiveSpaces([ this ]);\n        if (resultItems.failedResults.length) {\n            throw  resultItems.failedResults[0].error;\n        }\n    }\n\n    async restore(name?: string) {\n        let nameMap: Map<Space, string> | undefined;\n        if (name !== undefined) {\n            nameMap = new Map();\n            nameMap.set(this, name);\n        }\n        const resultItems = await this._core.spaceContext.restoreSpaces([ this ], nameMap);\n        if (resultItems.failedResults.length) {\n            throw  resultItems.failedResults[0].error;\n        }\n    }\n}\n\nconst SpaceChildFormat: PropertyFormatType = {\n    parse: (value: IProjectsSpaceChild): ISpaceChild => {\n        return {\n            id: value.id,\n            _links: value._links\n        };\n    },\n    isEqual: (a: ISpaceChild, b: ISpaceChild): boolean => {\n        return a.id === b.id && isDeepEqual(a._links, b._links);\n    }\n};\n\nexport const SpaceUpdater = new ItemUpdater<Space, Partial<IProjectsSpace & { teamRole: TeamRole }>>({\n    localItemType: Space,\n    remoteIdProperty: 'id',\n    propertyUpdater: new PropertyUpdater({\n        '_name': 'name',\n        '_access': { name: 'access', choices: SpaceAccessChoices },\n        '_etag': 'etag',\n        '_repositoryID': 'repositoryId',\n        '_repositoryName': 'repositoryName',\n        '_pathName': 'pathName',\n        '_created': { name: 'createdDate', format: 'date' },\n        '_modified': { name: 'modifiedDate', format: 'date' },\n        '_contributorCount': { name: 'contributorCount', format: 'number' },\n        '_role': { name: 'role', choices: SpaceRoleChoices },\n        '_color': { name: 'color' },\n        '_isBookmarked': { name: 'bookmarked', format: 'boolean' },\n        '_teamID': 'teamId',\n        '_teamName': 'teamName',\n        '_description': 'description',\n        '_thumbnail': 'thumbnail',\n        '_children': { name: 'children', mapByKey: 'name', format: SpaceChildFormat },\n        '_version': { name: 'version', format: 'number' },\n        '_teamRole': { name: 'teamRole', choices: TeamRoles },\n        '_state': { name: 'state', choices: SpaceStates },\n        '__links': { name: '_links', format: 'object' }\n    })\n});\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport AdobeAsset from './AdobeAsset';\nimport { IItemLoaderOptions, ILoadedPage } from '../core/ItemLoader';\nimport ItemPool from '../core/ItemPool';\nimport { RecentAdobeAssetConfig } from './RecentAdobeAssetSource';\nimport RecentAdobeAssetFilter from './RecentAdobeAssetFilter';\nimport type RecentInterface from '../interface/RecentInterface';\nimport USSLoaderHelper, { IGetUSSResults, IUSSLoader } from './USSLoaderHelper';\nimport { ISAMCorePrivate } from '../indexPrivate';\nimport AdobeAssetFilter from '../assets/AdobeAssetFilter';\nimport { USSResponse } from '../interface/USSModel';\nimport LibraryContext from '../libraries/LibraryContext';\nimport { USSAssetFilterName } from './USSAssetFilterName';\nimport USSAdobeAssetFilter from './USSAdobeAssetFilter';\nimport { RecentAssetsListingOptions } from '../interface/RecentInterface';\n\nexport default class RecentAdobeAssetLoader implements IUSSLoader<RecentAdobeAssetConfig> {\n    private _ussLoaderHelper: USSLoaderHelper<RecentAdobeAssetConfig>;\n    /**\n      * @package -- only for use in SAM.js\n      */\n    _libraryContext?: LibraryContext;\n    constructor(\n        assetPool: ItemPool<AdobeAsset>,\n        private _core: ISAMCorePrivate,\n        private _recentInterface: RecentInterface,\n        private _implicitFilter: RecentAdobeAssetFilter\n    ) {\n        this._ussLoaderHelper = new USSLoaderHelper(assetPool, _core, this);\n    }\n\n    supportsFilter(filter?: RecentAdobeAssetFilter | AdobeAssetFilter): boolean {\n        // If we don't provide a filter at all, then we cannot use the loader\n        return filter !== undefined;\n    }\n\n    async loadPage(options: IItemLoaderOptions<RecentAdobeAssetConfig>): Promise<ILoadedPage<RecentAdobeAssetConfig>> {\n        if (!this._libraryContext) {\n            this._libraryContext = await this._core.getLibraryContext();\n        }\n        return this._ussLoaderHelper.loadPage(options);\n    }\n\n    /**\n     * @package -- only for use by USSLoaderHelper\n     */\n    async _getUSSResults({\n        start,\n        limit,\n        mediaTypes,\n        excludeMediaTypes,\n        filter\n    }: IGetUSSResults<RecentAdobeAssetConfig>): Promise<USSResponse> {\n        const options: Partial<RecentAssetsListingOptions> = {\n            start,\n            limit,\n            mediaTypes,\n            excludeMediaTypes,\n            embedPermissions: true\n        };\n        if (filter.name === USSAssetFilterName) {\n            const ussFilter = filter as USSAdobeAssetFilter;\n            options.userId = ussFilter.userId;\n            options.uploadedFrom = ussFilter.uploadedFrom;\n        }\n        return this._recentInterface.getRecentAssets(options);\n    }\n\n    /**\n     * @package -- only for use by USSLoaderHelper\n     */\n    _postProcessPage(\n        loaderOptions: IItemLoaderOptions<RecentAdobeAssetConfig>,\n        page: ILoadedPage<RecentAdobeAssetConfig>\n    ): void {\n        const { items } = page;\n\n        // update modification time of last asset on implicit filter (assets are already sorted by modification time),\n        // so that these items can be matched with this filter in ItemLoaderState before adding them in ItemLoaderState._pages\n        if (items.length) {\n            this._implicitFilter._lastModificationDate = items[items.length - 1].modified;\n        }\n    }\n}\n\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { IItemFilter, ItemFilterRelation } from '../core/ItemFilter';\nimport type { default as AdobeAsset } from './AdobeAsset';\nimport ImplicitAdobeAssetFilterBase from './ImplicitAdobeAssetFilterBase';\n\nexport default class RecentAdobeAssetFilter extends ImplicitAdobeAssetFilterBase implements IItemFilter<AdobeAsset> {\n    /**\n     * @package -- only for use in SAM.js\n     */\n    _lastModificationDate: Date | undefined;\n    constructor() {\n        super({ _isSharedWithYou: true });\n    }\n\n    get hash(): string {\n        return super.hash;\n    }\n\n    matches(item: AdobeAsset): boolean {\n        // We don't want folders to match the Recents filter\n        if (item.isFolder) {\n            return false;\n        }\n        if (this._lastModificationDate && item.modified < this._lastModificationDate) {\n            return false;\n        }\n        return super.matches(item);\n    }\n\n    getRelationToFilter(other: RecentAdobeAssetFilter): ItemFilterRelation {\n        const otherAdobeAssetFilter: RecentAdobeAssetFilter = other as RecentAdobeAssetFilter;\n\n        if (this._lastModificationDate?.valueOf() !== otherAdobeAssetFilter._lastModificationDate?.valueOf()) {\n            return 'disjoint';\n        }\n\n        return super.getRelationToFilter(other);\n    }\n}\n\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ItemBase from '../core/ItemBase';\nimport SAMError, { SAMErrorCode } from '../core/SAMError';\nimport { IBatchOperationResult, IFailedOperation } from '../interface/RepositoryModel';\nimport { AssetRenameMap, NameConflictMap } from './AssetUtils';\n\ninterface IConflictRetryOp<Source extends ItemBase, Destination extends ItemBase> {\n    (\n        assets: Source[],\n        destination: Destination,\n        assetRenameMap: AssetRenameMap<any>,\n        retryOnConflict: boolean,\n        conflictMap: NameConflictMap\n    ): Promise<IBatchOperationResult<Source>>\n}\n\n/**\n * Used by batch operations to retry failed ops and rename the conflicted assets\n * @param resultOps result for batch operation. Contains failed results and new models.\n * @param destination target asset location where the source assets are moved/copied\n * @param assetRenameMap allows renaming of assets in the batch operation\n * @param conflictMap saves the newName and count used for all files in batch\n * @param conflictRetryOp the original batch op method that is called after renaming conflicted assets\n * @returns the result for batch operation after retrying for failed assets.\n */\nexport async function retryFailedOpsDueToConflict<Source extends ItemBase, Destination extends ItemBase>(\n    resultOps: IBatchOperationResult<Source>,\n    destination: Destination,\n    assetRenameMap: AssetRenameMap<any>,\n    conflictMap: NameConflictMap,\n    conflictRetryOp: IConflictRetryOp<Source, Destination>\n): Promise<IBatchOperationResult<Source>> {\n    const failedAssetsDueToConflict: Source[] = [];\n    const otherFailedOps: IFailedOperation<Source>[] = [];\n\n    resultOps.failedResults.forEach((failedOp) => {\n        if ((failedOp.error as SAMError).code === SAMErrorCode.CONFLICT) {\n            failedAssetsDueToConflict.push(failedOp.model);\n        } else {\n            otherFailedOps.push(failedOp);\n        }\n    });\n\n    if (failedAssetsDueToConflict.length) {\n        for (const [ key, value ] of conflictMap) {\n            conflictMap.set(key, { newName: value.newName, countUsed: value.countUsed + 1 });\n        }\n        const newResultOps = await conflictRetryOp(failedAssetsDueToConflict, destination, assetRenameMap, true, conflictMap);\n        newResultOps.failedResults = [ ...newResultOps.failedResults, ...otherFailedOps ];\n        newResultOps.newModels = [ ...newResultOps.newModels, ...resultOps.newModels ];\n        return newResultOps;\n    }\n\n    return resultOps;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport AdobeAsset from './AdobeAsset';\nimport { IItemLoaderOptions, ILoadedPage } from '../core/ItemLoader';\nimport ItemPool from '../core/ItemPool';\nimport { MRUAdobeAssetConfig } from './MRUAdobeAssetSource';\nimport MRUAdobeAssetFilter from './MRUAdobeAssetFilter';\nimport type RecentInterface from '../interface/RecentInterface';\nimport { USSResponse } from '../interface/USSModel';\nimport USSLoaderHelper, { IGetUSSResults, IUSSLoader } from './USSLoaderHelper';\nimport { ISAMCorePrivate } from '../indexPrivate';\nimport AdobeAssetFilter from '../assets/AdobeAssetFilter';\nimport USSAdobeAssetFilter from './USSAdobeAssetFilter';\n\nexport default class MRUAdobeAssetLoader implements IUSSLoader<MRUAdobeAssetConfig> {\n    private _ussLoaderHelper: USSLoaderHelper<MRUAdobeAssetConfig>;\n\n    constructor(\n        assetPool: ItemPool<AdobeAsset>,\n        _core: ISAMCorePrivate,\n        private _recentInterface: RecentInterface\n    ) {\n        this._ussLoaderHelper = new USSLoaderHelper(assetPool, _core, this);\n    }\n\n    supportsFilter(filter?: MRUAdobeAssetFilter | AdobeAssetFilter | USSAdobeAssetFilter): boolean {\n        // If we don't provide a filter at all, then we cannot use the loader\n        return filter !== undefined;\n    }\n\n    async loadPage(options: IItemLoaderOptions<MRUAdobeAssetConfig>): Promise<ILoadedPage<MRUAdobeAssetConfig>> {\n        return this._ussLoaderHelper.loadPage(options);\n    }\n\n    /**\n     * @package -- only for use by USSLoaderHelper\n     */\n    async _getUSSResults({\n        start,\n        limit,\n        mediaTypes,\n        excludeMediaTypes\n    }: IGetUSSResults<MRUAdobeAssetConfig>): Promise<USSResponse> {\n        return this._recentInterface.getMRUAssets({\n            start,\n            limit,\n            mediaTypes,\n            excludeMediaTypes,\n            embedPermissions: true\n        });\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\nimport { IItemFilter } from '../core/ItemFilter';\nimport type { default as AdobeAsset } from './AdobeAsset';\nimport ImplicitAdobeAssetFilterBase from './ImplicitAdobeAssetFilterBase';\n\nexport default class MRUAdobeAssetFilter extends ImplicitAdobeAssetFilterBase implements IItemFilter<AdobeAsset> {\n    constructor() {\n        super({ _isSharedWithYou: true });\n    }\n\n    get hash(): string {\n        return `${super.hash}`;\n    }\n\n    matches(item: AdobeAsset): boolean {\n        // We don't want folders to match the Recents filter\n        if (item.isFolder) {\n            return false;\n        }\n\n        // do we need to allow certain items up to a threshold in the MRU list\n        // as we do in the recents list by keeping record of lastModified\n        if (item.lastAccessed === undefined) {\n            return false;\n        }\n\n        return super.matches(item);\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/**\n * Melville APIs for reading/writing Libraries data.\n * Warning: The libraries listings for non-public libraries returned from GET /libraries, and results for /search, may have stale data due to USS indexing delays.\n * However, Melville will always return the latest data from platform when fetching a specific library from GET /library/:id.\n */\n\nimport InterfaceBase from './InterfaceBase';\nimport { JSON_MIME_TYPE } from './LinkUtils';\nimport { fillURLTemplate, HeaderMap } from './LinkUtils';\nimport {\n    AccessOption,\n    BookmarkData,\n    BookmarksResponse,\n    CopyLibraryRequest,\n    CreateLibraryOptions,\n    LibraryData,\n    LibraryRole,\n    MoveLibraryRequest,\n    LibrariesResponse,\n    LibraryListParameters,\n    MelvilleLink\n} from './LibraryModel';\nimport SAMError, { SAMErrorCode } from '../core/SAMError';\n\ninterface IMelvilleRestoreContextQuery {\n    'self': {\n        'id': string;\n        'elements': string[];\n    }\n}\n\nexport type UpdateLibraryMetadataPayload = {\n    name: string;\n    roles: LibraryRole[];\n    // id is intentionally commented out as we don't currently want to expose the ability to change the Library ID\n    // id: string;\n}\n\nfunction parseLibraryAndElementID(libraryElementID: string): string[] {\n    const parts = libraryElementID.split(':');\n    const elementID = parts.pop() as string;\n    const libraryID = parts.join(':');\n    return [ elementID, libraryID ];\n}\n\nfunction getLibraryAccessOption(restrictEdit?: boolean): AccessOption | '' {\n    if (restrictEdit === true) {\n        return 'team_view';\n    } else if (restrictEdit === false) {\n        return 'team_edit';\n    } else {\n        return '';\n    }\n}\n\n/**\n * Given a libraries or elements listing URL, move the supported query params to headers.\n * This avoids extra CORS preflight OPTIONS requests per unique url.\n * @param melvilleUrl - supports both full url and path only, with query params\n * @returns tuple of [path, headers], with the path truncated of the query params that were moved to headers\n */\nexport function moveUrlQueryParamsToHeaders(melvilleUrl: string): [string, HeaderMap] {\n    // The below query params are supported as headers\n    // Note: 'owner' is supported by libraries list, and 'type' and 'group' is supported for elements list\n    const MelvilleParamsAsHeaders = [ 'start', 'limit', 'selector', 'type', 'orderBy', 'group', 'owner' ];\n\n    const [ path, query ] = melvilleUrl.split('?');\n    const urlParams = new URLSearchParams(query); // create obj from query and encode params if they aren't already\n    const headers: HeaderMap = {};\n\n    MelvilleParamsAsHeaders.forEach(paramAsHeader => {\n        const value = urlParams.get(paramAsHeader);\n        if (value) {\n            headers[paramAsHeader] = value;\n            urlParams.delete(paramAsHeader);\n        }\n    });\n    const urlParamsString = `${urlParams}`;\n    const url = urlParamsString.length > 0 ? `${path}?${urlParamsString}` : path;\n\n    return [ url, headers ];\n}\n\n// Sort parameters so that the query string is stable, preventing unnecessary cache misses.\nconst sortParameters = (parameters: LibraryListParameters): LibraryListParameters => {\n    return Object.fromEntries(\n        Object.entries(parameters)\n            .map(([ key, value ]) => {\n                if (Array.isArray(value)) {\n                    return [ key, value.sort() ];\n                }\n                return [ key, value ];\n            })\n            .sort()\n    );\n};\n\nexport default class LibraryInterface extends InterfaceBase {\n\n    private _getUrl(endpoint: string): string {\n        return `https://${this._core._environment.endpoints.MELVILLE_HOST}${endpoint}`;\n    }\n\n    async getLibraryData(libraryId: string): Promise<LibraryData> {\n        return await this._getResponse(\n            this._getUrl(`/api/v1/libraries/${libraryId}?selector=rendition_grid`),\n            {\n                // Ensure browser doesn't automatically add If-None-Match, otherwise\n                // service may respond with cached data for a library\n                headers: { ['Cache-Control']: 'no-cache, no-store, max-age=0' }\n            }\n        );\n    }\n\n    // Warning: the libraries listing returned from /libraries may have stale data due to USS indexing delays.\n    // The exception to this is public libraries as those are fetched from platform, for now.\n    // (Other calls, such as fetching library data by ID, will always return the latest data from platform.)\n    // Update only LibrarySpecificData to avoid overwriting RAPI data if you are worried about this.\n    async getLibraries(queryParams: LibraryListParameters): Promise<LibrariesResponse> {\n        if (queryParams?.limit && queryParams?.start === undefined) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, '[Melville] If limit is provided, start must also be provided.');\n        }\n        queryParams = sortParameters(queryParams);\n        const urlWithQueryParams = fillURLTemplate(\n            this._getUrl('/api/v1/libraries'),\n            queryParams\n        );\n        // Pass as many parameters as headers as we can, to avoid extra CORS preflight OPTIONS requests per url.\n        const [ url, headers ] = moveUrlQueryParamsToHeaders(urlWithQueryParams);\n        // Ensure browser doesn't automatically add If-None-Match, otherwise\n        // service may respond with cached data for a library\n        const defaultHeaders: HeaderMap = { ['Cache-Control']: 'no-cache, no-store, max-age=0' };\n        const finalHeaders = { ...defaultHeaders, ...headers };\n\n        return await this._getResponse(url, { headers: finalHeaders });\n    }\n\n    // TODO[SHARED-975]: This will need to return the json response for pagination.\n    async getLibrariesForProject(projectId: string): Promise<LibraryData[]> {\n        const response = await this.getLibraries({ team: projectId, selector: 'rendition_grid' });\n        return response.libraries;\n    }\n\n    async getLibrariesWithLink(pageLink: MelvilleLink): Promise<LibrariesResponse> {\n        // The link will not include headers, so we will need switch query params to headers to reduce OPTIONS requests.\n        const [ url, headers ] = moveUrlQueryParamsToHeaders(this._getUrl(pageLink.href));\n        return await this._getResponse(url, { headers });\n    }\n\n    // The assetId's passed to restoreLibraryElement() and permanentlyDeleteLibraryElement() are in the\n    // form 'LIBRARY_CLOUD_ID:ELEMENT_GUID', i.e:\n    // 'urn:aaid:sc:us:2be71fea-f24b-4c10-a6a9-4f0926bda772:0fad1009-3bc1-4119-9227-5d1889ffcaf2'\n    // I filed https://jira.corp.adobe.com/browse/SAM-2683 to support batch restore/permanentDelete operations which in\n    // this workflow would allow us to make just one request to restore/permanentlyDelete multiple CCLibrary Elements that\n    // belong to the same CCLibrary.\n\n    async restoreLibraryElement(assetId: string): Promise<void> {\n        const [ elementID, libraryID ] = parseLibraryAndElementID(assetId);\n        const body: IMelvilleRestoreContextQuery = { self: { id: libraryID.toString(), elements: [ elementID ] } };\n        await this._doPost(\n            this._getUrl(`/api/v1/libraries/${libraryID}/archive`),\n            { 'Content-Type': 'application/json' },\n            JSON.stringify(body),\n            [ 200 ]);\n    }\n\n    async permanentlyDeleteLibraryElement(assetId: string): Promise<void> {\n        const [ elementID, libraryID ] = parseLibraryAndElementID(assetId);\n        await this._doDelete(\n            this._getUrl(`/api/v1/libraries/${libraryID}/archive/${elementID}`),\n            { 'Content-Type': 'application/json' },\n            [ 204 ]);\n    }\n\n    async discardLibrary(assetId: string): Promise<void> {\n        await this._doDelete(\n            this._getUrl(`/api/v1/libraries/${assetId}`),\n            { 'Content-Type': 'application/json' },\n            [ 204 ]);\n    }\n\n    async restoreLibrary(assetId: string): Promise<void> {\n        const body: any = { self: `/api/v1/archive/${assetId}` };\n        await this._doPost(\n            this._getUrl(`/api/v1/libraries`),\n            { 'Content-Type': 'application/json' },\n            JSON.stringify(body),\n            [ 201 ]);\n    }\n\n    async copyLibrary(assetId: string, destName: string, parentAssetID?: string, restrictEdit?: boolean): Promise<LibraryData> {\n        const accessString = getLibraryAccessOption(restrictEdit);\n        const body: CopyLibraryRequest = { source: assetId, name: destName };\n        if (accessString !== '') {\n            body['access'] = accessString;\n        }\n        if (parentAssetID !== undefined) {\n            body['parent_assetId'] = parentAssetID;\n        }\n\n        const response = await this._doPost(\n            this._getUrl(`/api/v1/libraries`),\n            { 'Content-Type': 'application/json' },\n            JSON.stringify(body),\n            [ 200, 201 ]);\n\n        return await response.json();\n    }\n\n    async moveLibrary(assetId: string, parentAssetID: string, restrictEdit?: boolean): Promise<LibraryData> {\n        const accessString = getLibraryAccessOption(restrictEdit);\n        const body: MoveLibraryRequest = {\n            self: assetId,\n            parent_assetId: parentAssetID,\n            'repo:manifestPatch': [ { 'op': 'replace', 'path': '/id', 'value': assetId } ]\n        };\n        if (accessString !== '') {\n            body['access'] = accessString;\n        }\n\n        const response = await  this._doPost(\n            this._getUrl(`/api/v1/libraries`),\n            { 'Content-Type': 'application/json' },\n            JSON.stringify(body),\n            [ 200, 201 ]);\n\n        return await response.json();\n    }\n\n    /**\n     *\n     * @param nameOrOptions - For backward compatability, this can be a string representing the name of the library to create.\n     *                      If an object is passed, it should be a CreateLibraryOptions object.\n     * @returns LibraryData - The created library data from the response. This will include the ID of the created library.\n     */\n    async createLibrary(nameOrOptions: string | CreateLibraryOptions): Promise<LibraryData> {\n        let options: CreateLibraryOptions;\n        let url: string = `/api/v1/libraries`;\n\n        if (typeof nameOrOptions === 'string') {\n            options = { name: nameOrOptions };\n        } else if (typeof nameOrOptions === 'object') {\n            options = nameOrOptions;\n            url = options.syncCreate ? `/api/v1/libraries?invocation_mode=sync` : `/api/v1/libraries`;\n        } else {\n            throw new Error('Invalid arguments');\n        }\n\n        /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\n        const { syncCreate, ...requestOptions } = options;\n        const response = await this._doPost(\n            this._getUrl(url),\n            { 'Content-Type': 'application/json' },\n            JSON.stringify(requestOptions),\n            [ 201, 200 ]);\n\n        return await response.json();\n    }\n\n    /**\n     * Follow aka bookmark one or more libraries.\n     * @param bookmarks - array of BookmarkData objects\n     * Required properties: In each bookmark, besides the id, you must include either urn for collaborated libraries or url for public libraries.\n     * @returns BookmarksResponse - contains all the bookmarks for the user of the same type(s) that were created (public or collab or both)\n     */\n    async bookmarkLibraries(bookmarks: Partial<BookmarkData>[]): Promise<BookmarksResponse> {\n        bookmarks = bookmarks.map(bookmark => {\n            if (!bookmark.id || (!bookmark.urn && !bookmark.url) || (bookmark.type === 'collab' && !bookmark.urn) || (bookmark.type === 'public' && !bookmark.url)) {\n                throw SAMError.create(SAMErrorCode.BAD_REQUEST, '[Melville] BookmarkData must include `id` and either `urn` for collaborated libraries or `url` for public libraries.');\n            }\n\n            bookmark.type = bookmark.type || (bookmark.url ? 'public' : 'collab');\n            return bookmark;\n        });\n\n        const body = { bookmarks };\n\n        // Will return 201 even if the library is already bookmarked\n        const response = await this._doPost(\n            this._getUrl(`/api/v1/libraries/bookmarks`),\n            { 'Content-Type': 'application/json' },\n            JSON.stringify(body),\n            [ 200, 201 ]\n        );\n\n        return await response.json();\n    }\n\n    /**\n     * Get all bookmarks for the user from Melville.\n     */\n    async getBookmarks(): Promise<BookmarkData[]> {\n        const response = await this._getResponse<any>(\n            this._getUrl(`/api/v1/libraries/bookmarks?useCache=false&ussCache=false`),\n            { headers: { 'Content-Type': JSON_MIME_TYPE, 'Cache-Control': 'no-cache, no-store, max-age=0' } });\n\n        return await response.bookmarks;\n    }\n\n\n    /**\n     * Unfollow aka unbookmark the library. (User can always bookmark again as long as they maintain access.)\n     */\n    async unbookmarkLibrary(bookmarkId: BookmarkData['id']): Promise<void> {\n        await this._doDelete(\n            this._getUrl(`/api/v1/libraries/bookmarks/${bookmarkId}`),\n            { 'Content-Type': 'application/json' },\n            [ 204 ]);\n    }\n\n    /**\n     * Set metadata on a library - eg setting roles, renaming, etc.\n     */\n    async updateMetadata(libraryId: string, body: Partial<UpdateLibraryMetadataPayload>) {\n        await this._doPut(\n            this._getUrl(`/api/v1/libraries/${libraryId}/metadata`),\n            { 'Content-Type': 'application/json' },\n            JSON.stringify(body),\n            [ 204, 200 ]);\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { IOrderDirection } from '../core/ItemOrder';\nimport InterfaceBase from './InterfaceBase';\nimport { ISearchQuery, ISearchSortOrderDirection, USSResponse, SearchProps } from './USSModel';\nimport { IUSSAdobeAssetOrderBy } from './AssetModel';\nimport { updateAssetTypeForUSS } from './USSUtils';\n\ntype IPageOptions = {\n    limit: number;\n    start?: number;\n}\n\ninterface IListingOptions<IOrderField> extends IPageOptions {\n    orderDirection: IOrderDirection;\n    orderBy: IOrderField;\n}\n\nexport interface PublishedAssetsListingOptions extends IListingOptions<IUSSAdobeAssetOrderBy> {\n    mediaTypes?: string[],\n    excludeMediaTypes?: string[],\n}\n\nconst DefaultPublishedAssetsListingOptions: PublishedAssetsListingOptions = {\n    orderDirection: 'descending',\n    orderBy: 'modify_date',\n    start: 0,\n    limit: 0,\n    mediaTypes: [],\n    excludeMediaTypes: [],\n};\n\nexport function getDirectionValue(userOptions: Partial<PublishedAssetsListingOptions>): ISearchSortOrderDirection {\n    return userOptions.orderDirection === 'ascending' ? 'asc' : 'desc';\n}\n\nexport default class PublishedInterface extends InterfaceBase {\n\n    async getPublishedAssets(options?: Partial<PublishedAssetsListingOptions>): Promise<USSResponse> {\n        options = { ...DefaultPublishedAssetsListingOptions, ...options };\n        updateAssetTypeForUSS(options.mediaTypes);\n        updateAssetTypeForUSS(options.excludeMediaTypes);\n        const filters: ISearchQuery = {\n            sort_orderby: options.orderBy,\n            hints: {\n                acp_platform_v2: true,\n            },\n            fetch_fields: { includes: [ 'app_metadata' ] },\n            op_or: [\n                {\n                    [SearchProps.CREATIVE_CLOUD_TOPLEVEL_COLLECTION_NAME]: 'pubs'\n                },\n                {\n                    [SearchProps.OP_AND]: [\n                        {\n                            [SearchProps.CREATIVE_CLOUD_TOPLEVEL_COLLECTION_NAME]: 'cloud-content'\n                        },\n                        {\n                            [SearchProps.FIELD_EXISTS]: [ 'app_metadata$$review:sourceAsset$$dc:format' ]\n                        }\n                    ],\n                }\n            ],\n            op_none_of: [\n                {\n                    [SearchProps.TYPE]: options.excludeMediaTypes || [],\n                },\n            ],\n            [SearchProps.STORAGE_ASSIGNEE_ID]: this._core._environment.getValue('USER_ID'),\n            asset_id_opacity: true,\n            [SearchProps.TYPE]: options.mediaTypes || [],\n            sort_order: getDirectionValue(options),\n            limit: options.limit,\n            start_index: options.start,\n        };\n\n        return await this._core.hostAssetContext._ussInterface.getQueryResponse(filters);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport PublishedInterface from '../interface/PublishedInterface';\nimport { IItemLoaderOptions, ILoadedPage } from '../core/ItemLoader';\nimport ItemPool from '../core/ItemPool';\nimport { USSMetadata, USSResponse } from '../interface/USSModel';\nimport AdobeAsset, { USSAdobeAssetUpdaterMetadata } from './AdobeAsset';\nimport PublishedAdobeAssetFilter from './PublishedAdobeAssetFilter';\nimport { PublishedAdobeAssetConfig } from './PublishedAdobeAssetSource';\nimport USSLoaderHelper, { IUSSLoader, IGetUSSResults } from './USSLoaderHelper';\nimport { OrderFieldToIUSSAdobeAssetOrderBy } from './USSAdobeAssetOrder';\nimport { ISAMCorePrivate } from '../indexPrivate';\nimport AdobeAssetFilter from '../assets/AdobeAssetFilter';\n\nexport default class PublishedAdobeAssetLoader implements IUSSLoader<PublishedAdobeAssetConfig> {\n    private _ussLoaderHelper: USSLoaderHelper<PublishedAdobeAssetConfig>;\n\n    constructor(\n        assetPool: ItemPool<AdobeAsset>,\n        core: ISAMCorePrivate,\n        private _publishedInterface: PublishedInterface\n    ) {\n        this._ussLoaderHelper = new USSLoaderHelper(assetPool, core, this);\n    }\n\n    supportsFilter(filter?: PublishedAdobeAssetFilter | AdobeAssetFilter): boolean {\n        // If we don't provide a filter at all, then we cannot use the loader\n        return filter !== undefined;\n    }\n\n    async loadPage(options: IItemLoaderOptions<PublishedAdobeAssetConfig>): Promise<ILoadedPage<PublishedAdobeAssetConfig>> {\n        return this._ussLoaderHelper.loadPage(options);\n    }\n\n    /**\n     * @package -- only for use inside USSLoaderHelper\n     */\n    async _getUSSResults({\n        start,\n        limit,\n        mediaTypes,\n        excludeMediaTypes,\n        order\n    }: IGetUSSResults<PublishedAdobeAssetConfig>): Promise<USSResponse> {\n        return this._publishedInterface.getPublishedAssets({\n            orderBy: OrderFieldToIUSSAdobeAssetOrderBy[order.field],\n            orderDirection: order.direction,\n            start,\n            limit,\n            mediaTypes,\n            excludeMediaTypes\n        });\n    }\n\n    /**\n     * @package -- only for use inside USSLoaderHelper\n     */\n    _getItemData(item: Partial<USSMetadata>): USSAdobeAssetUpdaterMetadata {\n        return {\n            ...item,\n            published: true\n        };\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { IItemFilter } from '../core/ItemFilter';\nimport type { default as AdobeAsset } from './AdobeAsset';\nimport ImplicitAdobeAssetFilterBase from './ImplicitAdobeAssetFilterBase';\n\nexport default class PublishedAdobeAssetFilter extends ImplicitAdobeAssetFilterBase implements IItemFilter<AdobeAsset> {\n    constructor() {\n        super({ _isPublished: true });\n    }\n}\n","/*************************************************************************\n*   ADOBE CONFIDENTIAL\n*\n*   Copyright 2023 Adobe\n*   All Rights Reserved.\n*\n*   NOTICE:  All information contained herein is, and remains\n*   the property of Adobe and its suppliers, if any. The intellectual\n*   and technical concepts contained herein are proprietary to Adobe\n*   and its suppliers and are protected by all applicable intellectual\n*   property laws, including trade secret and copyright laws.\n*   Dissemination of this information or reproduction of this material\n*   is strictly forbidden unless prior written permission is obtained\n*   from Adobe.\n**************************************************************************/\nimport ImplicitAdobeAssetFilterBase from './ImplicitAdobeAssetFilterBase';\nimport { IItemFilter } from '../core/ItemFilter';\nimport AdobeAsset from './AdobeAsset';\nimport { Permission } from '../interface/AssetModel';\n\nexport default class DiscardedAdobeAssetFilter extends ImplicitAdobeAssetFilterBase implements IItemFilter<AdobeAsset> {\n    constructor() {\n        super({\n            _isDiscarded: true\n        });\n    }\n\n    matches(item: AdobeAsset): boolean {\n\n        if (this.isSyncedAsset(item) || this.isMobileCreation(item)) {\n            return false;\n        }\n\n        // TODO: We should also handle this in the USS query when it's supported, but keep this check here for good measure.\n        // https://jira.corp.adobe.com/browse/SEARCH-41079\n        if (!item.hasPermission(Permission.Restore) && !item.hasPermission(Permission.Delete)) {\n            return false;\n        }\n\n        return super.matches(item);\n    }\n\n    isSyncedAsset(item: AdobeAsset): boolean {\n        return item.repoPath.startsWith('/files/');\n    }\n\n    isMobileCreation(item: AdobeAsset): boolean {\n        return item.repoPath.startsWith('/assets/') && !item.repoPath.startsWith('/assets/adobe-libraries/');\n    }\n}\n","/*************************************************************************\n*   ADOBE CONFIDENTIAL\n*\n*   Copyright 2023 Adobe\n*   All Rights Reserved.\n*\n*   NOTICE:  All information contained herein is, and remains\n*   the property of Adobe and its suppliers, if any. The intellectual\n*   and technical concepts contained herein are proprietary to Adobe\n*   and its suppliers and are protected by all applicable intellectual\n*   property laws, including trade secret and copyright laws.\n*   Dissemination of this information or reproduction of this material\n*   is strictly forbidden unless prior written permission is obtained\n*   from Adobe.\n**************************************************************************/\nimport InterfaceBase from './InterfaceBase';\nimport { updateAssetTypeForUSS } from './USSUtils';\nimport { ISearchQuery, OrderByToUSSOrderBy, SearchProps } from './USSModel';\nimport { IOrderDirection } from '../core/ItemOrder';\nimport { AdobeAssetOrderField } from '../assets/AdobeAssetOrder';\nimport { getUSSFetchFields, IUSSFetchFieldType } from './AssetModel';\nimport { RelType } from './LinkUtils';\n\nexport interface DiscardedAssetsListingOptions {\n    limit?: number;\n    start?: number;\n    orderDirection?: IOrderDirection;\n    orderBy?: AdobeAssetOrderField;\n    mediaTypes?: string[];\n    excludeMediaTypes?: string[];\n}\n\nconst DEFAULT_OPTIONS: DiscardedAssetsListingOptions = {\n    limit: 50,\n    start: 0,\n    orderDirection: 'descending',\n    orderBy: 'modified',\n    mediaTypes: [],\n    excludeMediaTypes: []\n};\n\nexport const DISCARD_FETCH_FIELDS: IUSSFetchFieldType[] = [\n    'creative_cloud_colortheme',\n    'creative_cloud_gradient',\n    '_embedded'\n];\n\nexport const MOBILE_CREATIONS_MIMETYPES: string[] = [\n    'application/vnd.adobe.draw.project+dcx',\n    'application/vnd.adobe.sketch.project+dcx',\n    'application/vnd.adobe.photoshop-mix.composition+dcx',\n    'application/vnd.adobe.photoshop-fix.composition+dcx',\n    'application/vnd.adobe.line.sketchbook+dcx',\n    'application/vnd.adobe.layup.project+dcx',\n    'application/vnd.adobe.comp.project+dcx',\n    'application/vnd.adobe.clip.project+dcx',\n    'application/vnd.adobe.clsproject+dcx',\n    'image/vnd.adobe.cls+dcx'\n];\n\nexport default class DiscardedInterface extends InterfaceBase {\n\n    async getDiscardedAssets(options?: DiscardedAssetsListingOptions) {\n        options = { ...DEFAULT_OPTIONS, ...options };\n        updateAssetTypeForUSS(options.mediaTypes);\n        updateAssetTypeForUSS(options.excludeMediaTypes);\n\n        const sort_order = options.orderDirection === 'ascending' ? 'asc' : 'desc';\n        const sort_orderby = OrderByToUSSOrderBy[options.orderBy || 'modified'];\n        const userId = this._core._environment.getValue('USER_ID');\n\n        const filters: ISearchQuery = {\n            hints: { acp_platform_v2: true },\n            creative_cloud_archive: true,\n            creative_cloud_discarded_directly: true,\n            [SearchProps.TYPE]: options.mediaTypes || [],\n            fetch_fields: { includes: [\n                ...getUSSFetchFields(),\n                ...DISCARD_FETCH_FIELDS\n            ] },\n            // Asset must either be owned by the current user, or a Library (composite) that exists in /projects\n            // and the current user has write access to it.\n            op_or: [\n                { [SearchProps.STORAGE_ASSIGNEE_ID]: userId },\n                { op_and: [\n                    { [SearchProps.STORAGE_ASSIGNEE_TYPE]: 'org' },\n                    { [SearchProps.TYPE]: [ 'application/vnd.adobe.library+dcx' ] },\n                    {\n                        [SearchProps.REPO_ACL_MODIFIER]: 'grant',\n                        [SearchProps.REPO_ACL_PRIVILEGES]: [ 'write' ],\n                        [SearchProps.REPO_ACL_RELATIONS]: [ RelType.PRIMARY ]\n                    }\n                ] },\n                {\n                    // we just want the projects that are either owned by the current user\n                    // or are in shared-storage\n                    op_and: [\n                        { op_or: [\n                            { [SearchProps.STORAGE_ASSIGNEE_ID]: userId },\n                            { [SearchProps.STORAGE_ASSIGNEE_TYPE]: 'org' }\n                        ] },\n                        { op_field_exists: [\n                            'app_metadata$$cc:inheritable$$cc:team$$repo:assetId',\n                            'app_metadata$$cc:inherited$$cc:team$$repo:assetId',\n                        ] }\n                    ]\n                }\n            ],\n            op_none_of: [\n                { [SearchProps.TYPE]: options.excludeMediaTypes || [] },\n                { [SearchProps.VISIBLITY ]: [ 'hiddenSelf', 'hiddenRecursive' ] },\n                { [SearchProps.FIELD_EXISTS]: [ 'app_metadata$$review:sourceAsset$$dc:format' ] },\n                { [SearchProps.CREATIVE_CLOUD_TOPLEVEL_COLLECTION_NAME]: [ 'archive', 'files' ] },\n                { [SearchProps.TYPE]: MOBILE_CREATIONS_MIMETYPES }\n            ],\n            sort_orderby,\n            sort_order,\n            limit: options.limit,\n            start_index: options.start\n        };\n\n        return this._core.hostAssetContext._ussInterface.getQueryResponse(filters);\n    }\n}\n","/*************************************************************************\n*   ADOBE CONFIDENTIAL\n*\n*   Copyright 2023 Adobe\n*   All Rights Reserved.\n*\n*   NOTICE:  All information contained herein is, and remains\n*   the property of Adobe and its suppliers, if any. The intellectual\n*   and technical concepts contained herein are proprietary to Adobe\n*   and its suppliers and are protected by all applicable intellectual\n*   property laws, including trade secret and copyright laws.\n*   Dissemination of this information or reproduction of this material\n*   is strictly forbidden unless prior written permission is obtained\n*   from Adobe.\n**************************************************************************/\nimport USSLoaderHelper, { IGetUSSResults, IUSSLoader } from './USSLoaderHelper';\nimport { DiscardedAdobeAssetConfig } from './DiscardedAdobeAssetSource';\nimport AdobeAsset, { USSAdobeAssetUpdaterMetadata } from './AdobeAsset';\nimport ItemPool from '../core/ItemPool';\nimport { USSMetadata, USSResponse } from '../interface/USSModel';\nimport { IItemLoaderOptions } from '../core/ItemLoader';\nimport { ILoadedPage } from '../core/ItemLoader';\nimport DiscardedInterface from '../interface/DiscardedInterface';\nimport { RelType } from '../interface/LinkUtils';\nimport { AssetLinks } from '../interface/RepositoryModel';\nimport { ISAMCorePrivate } from '../indexPrivate';\nimport LibraryContext from '../libraries/LibraryContext';\n\nexport default class DiscardedAdobeAssetLoader implements IUSSLoader<DiscardedAdobeAssetConfig> {\n    private _ussLoaderHelper: USSLoaderHelper<DiscardedAdobeAssetConfig>;\n    /**\n      * @package -- only for use in SAM.js\n      */\n    _libraryContext?: LibraryContext;\n    constructor(\n        assetPool: ItemPool<AdobeAsset>,\n        private _core: ISAMCorePrivate,\n        private _discardedInterface: DiscardedInterface\n    ) {\n        this._ussLoaderHelper = new USSLoaderHelper<DiscardedAdobeAssetConfig>(assetPool, _core, this);\n    }\n\n    supportsFilter(filter?: DiscardedAdobeAssetConfig['filter']): boolean {\n        return filter !== undefined;\n    }\n\n    async loadPage(options: IItemLoaderOptions<DiscardedAdobeAssetConfig>): Promise<ILoadedPage<DiscardedAdobeAssetConfig>> {\n        if (!this._libraryContext) {\n            this._libraryContext = await this._core.getLibraryContext();\n        }\n        // Check if the user can restore the project in the current repository\n        // TODO: Not sure how to handle this for the Admin Console deleted view (if there is one)\n        // Maybe we need to do this for the list of repositories the user has access to\n        const repositories = await this._core.hostAssetContext._getListOfRepositoryIDs();\n        repositories?.forEach(repository => this._core.projectContext._canRestoreProject(repository));\n        return this._ussLoaderHelper.loadPage(options);\n    }\n\n    _getUSSResults({\n        start,\n        limit,\n        mediaTypes,\n        excludeMediaTypes,\n        order\n    }: IGetUSSResults<DiscardedAdobeAssetConfig>): Promise<USSResponse> {\n        return this._discardedInterface.getDiscardedAssets({\n            start,\n            limit,\n            orderBy: order.field,\n            orderDirection: order.direction,\n            mediaTypes,\n            excludeMediaTypes\n        });\n    }\n\n    _getItemData(item: Partial<USSMetadata>): USSAdobeAssetUpdaterMetadata {\n        // TODO: come up with proposal for Melville to provide rendering service for non-image LEs\n        // Colors/gradients have RENDITION links that cause 404 error. Clear them out so that\n        // AdobeAsset does not try to fetch their renditions.\n\n        const LERenditionURL = item.creative_cloud_colortheme || item.creative_cloud_gradient\n            ? undefined\n            : item._links?.[RelType.RENDITION];\n\n        const isArchivedLibraryElement = item.asset_sub_type === 'element';\n        if (isArchivedLibraryElement) {\n            item._links = {\n                ...(item._links || {}),\n                [RelType.RENDITION]: LERenditionURL\n            } as AssetLinks;\n        }\n        return {\n            ...item,\n            isArchivedLibraryElement\n        };\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport type { IItemFilter, ItemFilterRelation } from '../core/ItemFilter';\nimport type { default as AdobeAsset } from './AdobeAsset';\nimport ImplicitAdobeAssetFilterBase from './ImplicitAdobeAssetFilterBase';\n\n/**\n * @TODO We should open this up to allow clients to configure the restrictions\n * on this query through the filter options below.\n * https://jira.corp.adobe.com/browse/SAM-2542\n */\nexport interface IAdobeAssetGlobalSearchFilterOptions {\n    /**\n     * @package -- only for use by implicit filter\n     */\n    readonly _query: string;\n    readonly _matchingIDsFromSearch: Set<string>;\n    readonly _projectsOnly: boolean;\n}\n\nexport default class AdobeAssetGlobalSearchFilter extends ImplicitAdobeAssetFilterBase implements IItemFilter<AdobeAsset> {\n    _query: string = '';\n\n    /**\n     * @package -- only for use by AdobeAssetGlobalSearchFilter/Loader\n     */\n    _matchingIDsFromSearch: Set<string> | undefined;\n\n    /**\n     * @package only for use by AdobeAssetGlobalSearchFilter/Loader\n     */\n    _projectsOnly: boolean = false;\n\n    constructor(options?: Partial<IAdobeAssetGlobalSearchFilterOptions>) {\n        super({ _isSharedWithYou: true });\n        this._query = options?._query || '';\n        this._projectsOnly = options?._projectsOnly || false;\n    }\n\n    get hash(): string {\n        return [\n            super.hash,\n            this.query ? `query=${this._query}` : undefined,\n            this.projectsOnly ? `projects_only=${this._projectsOnly}` : undefined,\n        ].filter(x => x).join(':');\n    }\n\n    get query(): string {\n        return this._query;\n    }\n\n    get projectsOnly(): boolean {\n        return this._projectsOnly;\n    }\n\n    // The matching rules USS are deceptively complex, and could change over time. Attempting to\n    // replicate here could result in items being incorrectly filtered out or incorrectly included.\n    // Global search Lists should not try to share items from Lists with similar queries, other\n    // than treating the queries as case-insensitive.\n    matches(item: AdobeAsset): boolean {\n\n        // Check if the item's id is in the current filter's id list\n        if (this._matchingIDsFromSearch && !this._matchingIDsFromSearch.has(item.id)) {\n            return false;\n        }\n\n        // If the query exists but there's no id list, we probably haven't finished loading yet\n        if ((this._query) && !this._matchingIDsFromSearch) {\n            return false;\n        }\n        return super.matches(item);\n    }\n\n    getRelationToFilter(other: AdobeAssetGlobalSearchFilter): ItemFilterRelation {\n        if (this.query?.toLowerCase()  !== other.query?.toLowerCase()) {\n            return 'disjoint';\n        }\n\n        return super.getRelationToFilter(other);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { default as uuid } from './uuid';\n\nexport type CreateAtomFn = (name: string, onBecomeObservedHandler: () => void, onBecomeUnobservedHandler: () => void) => any;\n\ntype MobXInstanceInfo = {\n    id: string,\n    references: Set<string>\n}\n\n/**\n * Manager for observability via MobX - classes should call reportObserved\n * for any getters or methods that should be observable if used in the context\n * of MobX. Since SAM.js does not include MobX, clients need to makeObservable()\n * with their MobX instance\n */\nexport default class MobX {\n\n    private _contexts: Map<CreateAtomFn, MobXInstanceInfo> = new Map();\n\n    /**\n     * Register a MobX instance to make SAM.js observable.\n     * Returns a function that can be called to unregister.\n     */\n    register(createAtom: CreateAtomFn): () => void {\n        // It can be the case the register is called multiple times with the same createAtom function,\n        // which can happen if multiple components are using SAM.js but sharing the same MobX instance.\n        // In this case, we don't want to create more atoms than necessary since that would cause performance\n        // problems - instead, we detect if the createAtom was already registered, and just keep a reference\n        // count instead of registering it multiple times.\n        let instanceInfo = this._contexts.get(createAtom);\n        if (!instanceInfo) {\n            instanceInfo = { id: uuid(), references: new Set() };\n            this._contexts.set(createAtom, instanceInfo);\n        }\n        const refId = uuid();\n        instanceInfo.references.add(refId);\n\n        return () => {\n            const instanceInfo = this._contexts.get(createAtom);\n            if (instanceInfo) {\n                instanceInfo.references.delete(refId);\n                if (instanceInfo.references.size === 0) {\n                    this._contexts.delete(createAtom);\n                }\n            }\n        };\n    }\n\n    /**\n     * Called to report an observation on an object. Any reaction that observes this\n     * will be triggered whenever the given change event on the object triggers.\n     * In the simple case where we only have one change event for an object ('change'),\n     * getters and methods can be instrumented with just _environment.mobx.reportObserved(this).\n     */\n    reportObserved(object: any, event: string = 'change') {\n        for (const [ createAtom, { id } ] of this._contexts) {\n            const key = `_atom_${id}_${event}`;\n            let atom = object[key];\n            if (!atom) {\n                const onChange = () => atom.reportChanged();\n                atom = createAtom(`${object.constructor.name}_${event}`,\n                    () => {\n                        object.on(event, onChange);\n                    },\n                    () => {\n                        object.off(event, onChange);\n                    }\n                );\n                object[key] = atom;\n            }\n            atom.reportObserved();\n        }\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n// TODO: Remove after all clients have upgraded to UXP 6.2\n// https://jira.corp.adobe.com/browse/UXP-19257\nimport 'abort-controller/polyfill';\n\nimport { default as uuid } from './uuid';\nimport { memoize, synchronized } from './decorators';\nimport SAMError, { SAMErrorCode } from './SAMError';\nimport MobX from './MobX';\nimport Cache, { IPersistentCache } from '../core/Cache';\nimport { LogLevel } from './SAMCore';\nimport { ISAMCorePrivate, MESSAGE_LOGGED, MessageLoggedEvent, ISAMObject } from '../indexPrivate';\nimport IEvent from './IEvent';\nimport { CONFIG_CHANGE } from './SAMCoreEvents';\nimport { deepClone } from './ObjectUtils';\nimport { HeaderMap } from '../interface/LinkUtils';\n\n// Utility for combining multiple signals:\nconst combineSignals = (options: {[s: string]: any}, ...signals: AbortSignal[]) => {\n    const controller = new AbortController();\n    const removeListeners = () => {\n        signals.forEach(signal => signal.removeEventListener('abort', onAbort));\n    };\n    const onAbort = () => {\n        controller.abort();\n        removeListeners();\n    };\n    if (signals.some(signal => signal.aborted)) {\n        onAbort();\n    } else {\n        signals.forEach(signal => signal.addEventListener('abort', onAbort));\n    }\n    options.signal = controller.signal;\n    return removeListeners;\n};\n\nexport enum Env {\n    Stage,\n    Production\n}\n\nexport type HostProductData = {\n    /**\n     * The name of the user-facing product, with version number. E.g. Photoshop/22.0\n     *  https://git.corp.adobe.com/pages/adobesearch/search-services-docs/uss/getting-started/\n     */\n    PRODUCT_ID: string,\n    /**\n     * The feature within the user-facing product, with version number. E.g., CDO/1.125.0\n     * https://git.corp.adobe.com/pages/adobesearch/search-services-docs/uss/getting-started/\n     *\n     * @TODO_Deprecation To be marked as deprecated on or after 2024-10-01. SAM.js is now providing\n     * this header, so there is no need for clients to configure it.\n     */\n    PRODUCT_LOCATION: string,\n}\n\nconst DEFAULT_HOST_PRODUCT_DATA: HostProductData = {\n    PRODUCT_ID: '',\n    PRODUCT_LOCATION: ''\n};\n\n// Define as required: everything that is necessary as either client-supplied config or default config.\n// Define as optional: anything optional for both client-supplied config and default config.\ntype InternalConfiguration = {\n    ENVIRONMENT: Env,\n    // Required for USS searches\n    HOST_PRODUCT_DATA: HostProductData,\n    USER_ID: string,\n    USER_EMAIL?: string,\n    CLIENT_ID: string,\n    ACCOUNT_TYPE?: string,\n    ACCESS_TOKEN: string,\n    DEVICE_ID?: string,\n    FETCH_REQUEST_TIMEOUT: number,\n    ASYNC_DEFAULT_DELAY: number,\n    CACHE_DEFAULT_TTL: number,\n    MIN_RETRY_INTERVAL: number,\n    MAX_RETRY_INTERVAL: number,\n    ONS_DOCUMENT_VISIBILITY_TIMEOUT: number,\n    ONS_DEFAULT_MAX_SUBSCRIPTIONS: number,\n    ONS_DEFAULT_MAX_ASSETS_PER_SUBSCRIPTION: number,\n    ONS_SUBSCRIPTION_TIME_TO_LIVE: number,\n    ONS_SUBSCRIPTION_RENEW_TIME: number,\n    INDEXED_DB_VERSION: number,\n    PROJECTS_LIST_UPDATE_LATENCY: number,\n    PROJECTS_ITEM_UPDATE_LATENCY: number,\n    CLASSROOMS_LIST_UPDATE_LATENCY: number,\n    ASSETS_LIST_UPDATE_LATENCY: number,\n    USS_LIST_UPDATE_LATENCY: number,\n    VERSIONS_LIST_UPDATE_LATENCY: number,\n    ASSET_COPY_NAME_FORMAT: string,\n    ASSET_CONFLICT_NAME_FORMAT: string,\n    FEATURE_FLAGS: {\n        'enable-x-bucket-move': boolean;\n    };\n    /**\n     * @deprecated -- this flag is no longer functional and will be removed on or after 2024-10-01\n     */\n    USE_SAM_CPP?: boolean,\n    /**\n     * @package -- only for use in SAM.js\n     */\n    _DISABLE_SAM_CPP?: boolean,\n    DISABLE_ONS: boolean,\n    /**\n     * @deprecated -- this flag is no longer functional and will be removed on or after 2024-10-01\n     */\n    COPY_RESOURCES?: boolean,\n    ENABLE_ONS_CACHE: boolean,\n    /**\n     * @package -- only for use in SAM.js\n     */\n    _VERSION_OVERRIDE_FOR_TEST: string,\n    HIGH_PRIORITY_RAPI_REQUESTS: boolean,\n    LOCALE?: string,\n    // Allow for the client to change the default Frameio token expiration.\n    // Value is number of minutes to expire after.\n    FRAMEIO_EXPIRE_AUTH_TOKEN?: number,\n    FRAMEIO_EXPIRE_REFRESH_TOKEN?: number,\n    /**\n     * @package -- only for use in SAM.js\n     */\n\n    /*\n     * Our services typically require an Authorization header\n     * with a valid Bearer token because the user must be\n     * logged into the Creative Cloud.\n     *\n     * But the Commenting UI lets users without a Creative Cloud\n     * account view assets when they've been shared with a public\n     * link, and they are allowed to comment on such assets\n     * if they create a temporary Guest session with the commenting\n     * service.\n     *\n     * So to support commenting, SESSION_TYPE can be\n     *   { 'logged-out', 'guest', 'logged-in' }\n     *\n     * where the default value is 'logged-in'.\n     */\n    SESSION_TYPE: string,\n    USE_GRAPHQL: boolean,\n    /*\n     * As part of Storage Model Unification (SMU) support, we need to\n     * enable a way for the Admin Console to indicate to services\n     * that project listings need to include all projects in the\n     * ownership of the org, not just the user.\n     *\n     * When ADMIN_MODE_ORG_ID is set to an OrgID, SAM will include the\n     * `X-ACP-ADMIN-PRIVILEGES` header in requests in all service requests,\n     * with the header value set to the supplied OrgID.\n     *\n     * The default value is undefined, which prevents the\n     * `X-ACP-ADMIN-PRIVILEGES` header from being included in service requests.\n     *\n     * See https://wiki.corp.adobe.com/display/CA/Proposal%3A+Storage+Model+Unification+Detailed+Design#Proposal:StorageModelUnificationDetailedDesign-ListingofProjects\n     */\n    ADMIN_MODE_ORG_ID?: string\n}\n\n/**\n * SAM.js Configuration passed in from the client.\n * @param ACCESS_TOKEN {string} (optional, discouraged) Access token for the current user. NOTE: clients should use\n *          refreshAccessToken hook instead, as it is not possible to re-initialize SAM when the token expires.\n * @param CLIENT_ID {string} API key used for service requests. See SAM.js README for the list of services for which\n *          this API key must be white-listed for SAM.js to be fully functional.\n * @param HOST_PRODUCT_DATA {HostProductData} Used for USS queries to allow USS team to track usage patterns.\n * @param USER_ID {string} Adobe user id for the current user\n * @param HIGH_PRIORITY_RAPI_REQUESTS {boolean} (optional) User-facing web apps should set this to true,\n *          otherwise leave it as the default.\n *\n * Clients can override other SAM.js defaults, but it is discouraged unless directed by the SAM.js team.\n */\nexport type Configuration = Pick<InternalConfiguration,\n    | 'CLIENT_ID'\n    | 'HOST_PRODUCT_DATA'\n    | 'USER_ID'\n> & Partial<InternalConfiguration>\n\ntype EnvironmentConfig = {\n    LABEL: string,\n    ACP_CS_HOST: string,\n    SYNC_SERVICE_HOST: string,\n    PROJECTS_HOST: string,\n    ASSIGNMENTS_HOST: string,\n    INVITATIONS_HOST: string,\n    TRANSFER_SERVICE_HOST: string,\n    USS_HOST: string,\n    XDCE_HOST: string,\n    REVIEW_SERVICE_HOST: string,\n    MELVILLE_HOST: string,\n    USSv3_HOST: string,\n    PPS_HOST: string,\n    BEHANCE_HOST: string,\n    CLASSROOMS_HOST: string,\n    COMMENT_HOST: string\n};\n\ntype EnvironmentConfigMap = {\n    [k in Env]: EnvironmentConfig\n};\n\nexport type UpdatableConfiguration = Pick<Configuration, 'LOCALE'>;\nexport type UpdatableKey = keyof UpdatableConfiguration;\n\n// Default settings\nconst DEFAULT_CONFIG: InternalConfiguration = {\n    USER_ID: '',\n    USER_EMAIL: '',\n    CLIENT_ID: '',\n    ACCESS_TOKEN: '',\n    ENVIRONMENT: Env.Production,\n    HOST_PRODUCT_DATA: DEFAULT_HOST_PRODUCT_DATA,\n    FETCH_REQUEST_TIMEOUT: 60 * 1000, // 1 minute timeout on requests\n    ASYNC_DEFAULT_DELAY: 1 * 1000, // 1 second to wait for monitor results. This default is matching DCX.JS.\n    CACHE_DEFAULT_TTL: 30 * 24 * 60 * 60 * 1000, // 30 days in msec\n    MIN_RETRY_INTERVAL: 1 * 1000, // 1 second is default interval between retries\n    MAX_RETRY_INTERVAL: 2 * 60 * 1000, // 2 minutes is a maximum interval between retries\n    ONS_DOCUMENT_VISIBILITY_TIMEOUT: 10000, // 10 seconds is default timeout for stopping ONS for invisible document\n    ONS_DEFAULT_MAX_SUBSCRIPTIONS: 5, // These are default values - the ONS root document returns the actual values for max subscriptions and assets per subscription\n    ONS_DEFAULT_MAX_ASSETS_PER_SUBSCRIPTION: 100,\n\n    // @TODO Since we are creating more subscriptions more often due to\n    // us no longer caching subscriptions we will need to set\n    // the TTL to a more recent time in order for subscriptions\n    // to get garbage collected faster. We should update this once\n    // SAM-2845 is done. Generally, web clients should leave it at the default. Clients like the Library\n    // Process need longer timeouts since it stays open longer, thus reducing the frequency of\n    // renewing subscriptions.\n    ONS_SUBSCRIPTION_TIME_TO_LIVE: 1000 * 60 * 60 * 6, // 6 hours in msec for ONS Subscription TTL default\n    ONS_SUBSCRIPTION_RENEW_TIME: 1000 * 60 * 5, // 5 mins in msec as minimum time before TTL is renewed\n    INDEXED_DB_VERSION: 1, // Version for indexedDB database\n    PROJECTS_LIST_UPDATE_LATENCY: 3000, // 3s delay that we wait between mutations and new requests to projects listings.\n    PROJECTS_ITEM_UPDATE_LATENCY: 1000, // 1s delay that we wait between mutations and new requests to projects items.\n    CLASSROOMS_LIST_UPDATE_LATENCY: 3000, // 3s delay that we wait between mutations and new requests to classroon listings.\n    ASSETS_LIST_UPDATE_LATENCY: 100, // 100ms delay that we wait between mutations and new requests to assets listings.\n    USS_LIST_UPDATE_LATENCY: 3000, // USS has a delay on indexing\n    VERSIONS_LIST_UPDATE_LATENCY: 100, // 100ms delay that we wait between mutations and new requests to assets listings.\n    ASSET_COPY_NAME_FORMAT: '%@ copy (%d)', // FORMAT to use when duplicating an asset\n    ASSET_CONFLICT_NAME_FORMAT: '%@ (%d)', // FORMAT to use when asset name conflicts in copy/move operation\n    DISABLE_ONS: false, // can set to true to disable ONS - this could be used if a client is doing a one-time operation and doesn't need change notifications\n    ENABLE_ONS_CACHE: false,\n    _VERSION_OVERRIDE_FOR_TEST: '',\n    HIGH_PRIORITY_RAPI_REQUESTS: false,\n    LOCALE: 'en-US',\n    SESSION_TYPE: 'logged-in',\n    USE_GRAPHQL: false,\n    FEATURE_FLAGS: {\n        'enable-x-bucket-move': false // This will add the enable-x-bucket-move header to RAPI move requests.\n        // TODO: If another feature flag is added, please add a Unit test that verifies that all feature flags\n        // are included in the client's configuration when only one flag is set by the client.\n    }\n};\n\nconst ENVIRONMENTS: EnvironmentConfigMap = {\n    [Env.Stage]: {\n        LABEL: 'Staging',\n        ACP_CS_HOST: 'platform-cs-stage.adobe.io',\n        SYNC_SERVICE_HOST: 'acp-ss-stage.adobe.io',\n        PROJECTS_HOST: 'ccprojects-stage.adobe.io',\n        ASSIGNMENTS_HOST: 'hume-stage.adobe.io',\n        INVITATIONS_HOST: 'invitations-stage.adobe.io',\n        TRANSFER_SERVICE_HOST: 'ats-stage.adobe.io',\n        USS_HOST: 'adobesearch-stage.adobe.io',\n        XDCE_HOST: 'xdce-stage.adobe.io',\n        REVIEW_SERVICE_HOST: 'ccassetreview-stage.adobe.io',\n        MELVILLE_HOST: 'ccx-melville-stage.adobe.io',\n        // TODO: get final endpoint that doesn't reference ax-projects\n        USSv3_HOST: 'ax-projects-search-stage.adobe.io',\n        PPS_HOST: 'pps-stage.adobe.io',\n        BEHANCE_HOST: 'cc-api-behance-stage.adobe.io',\n        CLASSROOMS_HOST: 'edu-classrooms-stage.adobe.io',\n        COMMENT_HOST: 'comments-stage.adobe.io'\n    },\n    [Env.Production]: {\n        LABEL: 'Production',\n        ACP_CS_HOST: 'platform-cs.adobe.io',\n        SYNC_SERVICE_HOST: 'acp-ss.adobe.io',\n        PROJECTS_HOST: 'ccprojects.adobe.io',\n        ASSIGNMENTS_HOST: 'hume.adobe.io',\n        INVITATIONS_HOST: 'invitations.adobe.io',\n        TRANSFER_SERVICE_HOST: 'ats.adobe.io',\n        USS_HOST: 'adobesearch.adobe.io',\n        XDCE_HOST: 'xdce.adobe.io',\n        REVIEW_SERVICE_HOST: 'ccassetreview.adobe.io',\n        MELVILLE_HOST: 'libraries.adobe.io',\n        // TODO: get final endpoint that doesn't reference ax-projects\n        USSv3_HOST: 'ax-projects-search.adobe.io',\n        PPS_HOST: 'pps.adobe.io',\n        BEHANCE_HOST: 'cc-api-behance.adobe.io',\n        CLASSROOMS_HOST: 'edu-classrooms.adobe.io',\n        COMMENT_HOST: 'comments-stage.adobe.io'\n    }\n};\n\nconst isNonEmptyString = (x: any) => (typeof x === 'string') && Boolean(x);\nconst isNumber = (x: any) => (typeof x === 'number');\ntype ConfigItemValidator = {\n    key: keyof InternalConfiguration;\n    validator: (x: any) => boolean;\n}\n\nconst configItemValidators: Array<ConfigItemValidator> = [ {\n    key: 'CLIENT_ID',\n    validator: isNonEmptyString\n}, {\n    key: 'USER_ID',\n    validator: isNonEmptyString\n}, {\n    key: 'ENVIRONMENT',\n    validator: (x: any) => isNumber(x) && (x in Env)\n}, {\n    key: 'HOST_PRODUCT_DATA',\n    validator(hostProductData?: HostProductData) {\n        if (!hostProductData) {\n            return false;\n        }\n        const { PRODUCT_ID } = hostProductData;\n        // required for USS queries\n        return isNonEmptyString(PRODUCT_ID);\n    }\n} ];\n\nexport type Hooks = {\n    fetch?: typeof fetch,\n    refreshAccessToken?: (failedToken: string) => Promise<string>\n    persistentCache?: IPersistentCache\n}\n\nexport type ConfigurationPayload = {\n    configurationKeyName: keyof Configuration;\n};\n\n// Only allow one retry on a 401 response to avoid getting into an infinite loop if we keep being given an invalid access token\nconst MAX_401_RETRIES = 1;\n\nexport type IFetchOptions = Omit<RequestInit, 'headers'> & {\n    headers?: HeaderMap;\n    authHeader?: string;\n    noOtherHeaders?: boolean;\n    requestTimeoutMs?: number;\n}\n\nexport default class Environment implements ISAMObject {\n    private _config: InternalConfiguration;\n    private _cache: Cache;\n    private _isTokenInvalid = true;\n    readonly mobx = new MobX;\n\n    constructor(\n        readonly _core: ISAMCorePrivate,\n        userConfig: Configuration,\n        private _hooks: Hooks\n    ) {\n        const featureFlagsConfig = Object.assign({}, DEFAULT_CONFIG.FEATURE_FLAGS, userConfig.FEATURE_FLAGS);\n        const config: InternalConfiguration = Object.assign({}, DEFAULT_CONFIG, userConfig);\n        config.FEATURE_FLAGS = featureFlagsConfig;\n        const invalidOptions = configItemValidators.filter(({ key, validator }) => !validator(config[key]));\n\n        if (invalidOptions.length) {\n            const invalidKeys = invalidOptions.map(({ key }) => key).join(', ');\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, `Invalid required options: ${invalidKeys}`);\n        }\n\n        if (config.ACCESS_TOKEN) {\n            this._isTokenInvalid = false;\n        } else if (!_hooks.refreshAccessToken) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, `refreshAccessToken hook must be provided if ACCESS_TOKEN is not set`);\n        }\n\n        this._config = config;\n        this._cache = new Cache(config.USER_ID, _core, _hooks.persistentCache);\n    }\n\n    get cache(): Cache {\n        return this._cache;\n    }\n\n    getValue<K extends keyof InternalConfiguration>(key: K): InternalConfiguration[K] {\n        return this._config[key];\n    }\n\n    /**\n     * Set the _environment global configuration value.\n     *\n     * @param key Configuration KeyName\n     * @param value The value of the Configuration.\n     * @event IEvent Dispatches an event when a particular key has changed.\n     */\n    setValue<K extends keyof InternalConfiguration>(key: K, value: InternalConfiguration[K]) {\n        this._config[key] = value;\n        const event: IEvent = {\n            type: CONFIG_CHANGE\n        };\n        const eventPayload: ConfigurationPayload = {\n            configurationKeyName: key\n        };\n        this._core.dispatch(event, eventPayload);\n    }\n\n    get endpoints(): EnvironmentConfig {\n        const env: Env = this._config.ENVIRONMENT;\n        return ENVIRONMENTS[env];\n    }\n\n    // Returns a unique device id for the client - this can be provided as a config option, or a guid can\n    // be generated (which will be cached across instances for the same user). Note that if a value is passed in,\n    // this takes precedence even if there's a cached device id.\n    @memoize\n    async getDeviceId(): Promise<string> {\n        return this._config['DEVICE_ID'] || await this.cache.getItem('DEVICE_ID', async () => uuid(), (value: any) => typeof value === 'string');\n    }\n\n    getUserId(): string {\n        return this.getValue('USER_ID');\n    }\n\n    private _loggerEvent(message: string, level: LogLevel) {\n        if (this._core.listenerCount(MESSAGE_LOGGED) > 0) {\n            this._core.emit(MESSAGE_LOGGED, new MessageLoggedEvent(message, level));\n        }\n    }\n\n    // Reserve for informational messages that may be useful in debugging infrequent but major\n    // SAM.js system events, such as initializing, or refreshing auth token.\n    log(message: string) {\n        this._loggerEvent(message, LogLevel.Info);\n    }\n\n    // Reserve for detailed messages about complex coordinated async processes, such as List loading, that\n    // are difficult to trace without log messages, but are too noisy to include in regular production apps.\n    debug(message: string) {\n        this._loggerEvent(message, LogLevel.Debug);\n    }\n\n    // For error conditions that do not warrant throwing an exception that bubbles to the client, but could be\n    // useful for debugging purposes. E.g., an ItemUpdater failing to parse a field from a service response --\n    // devs should see and fix these errors immediately and have unit tests to validate it, but the same error\n    // in a production system should not necessarily be raised to the user.\n    error(message: string) {\n        this._loggerEvent(message, LogLevel.Err);\n    }\n\n    // For deprecation notices and possibly (but not definitively) bad configuration options, etc. These sorts of\n    // messages should include instructions on how to resolve the issue. E.g. how React treats warnings about missing\n    // `key` on children -- this isn't necessarily a breaking condition but often can cause bugs; since they are\n    // entirely avoidable, devs should work to eradicate the warnings so they do not become red herrings that must\n    // be investigated when an unrelated bug emerges.\n    warn(message: string) {\n        this._loggerEvent(message, LogLevel.Warn);\n    }\n\n    @synchronized\n    private async _refreshAccessToken() {\n        if (this._config.SESSION_TYPE !== 'logged-out' && this._isTokenInvalid) {\n            if (!this._hooks.refreshAccessToken) {\n                // If a refresh hook wasn't provided, we just clear the token so we don't keep on\n                // attempting requests with an invalid token\n                return '';\n            }\n            this.log(`Refreshing access token from host...`);\n            try {\n                this._config.ACCESS_TOKEN = await this._hooks.refreshAccessToken(this._config.ACCESS_TOKEN);\n            } catch (e) {\n                // The error could already be a SAM error due to the recursive fetch calls above.\n                throw SAMError.wrapErrorIfNeeded(SAMErrorCode.AUTHORIZATION_ERROR, 'Failed to refresh access token', e);\n            }\n            this._isTokenInvalid = false;\n            this.log(`Refreshing access token ${this._config.ACCESS_TOKEN ? 'successful' : 'unsuccessful'}`);\n        }\n        return this._config.ACCESS_TOKEN;\n    }\n\n    async fetch(url: string, options: IFetchOptions = {}, numRetries: number = 0): Promise<Response> {\n        if (this._hooks.fetch) {\n            return this._hooks.fetch(url, options as Parameters<typeof fetch>[1]);\n        }\n\n        const session = this._config.SESSION_TYPE;\n\n        // If the access token is invalid, we wait for it to be refreshed:\n        const token = this._isTokenInvalid ? await this._refreshAccessToken() : this._config.ACCESS_TOKEN;\n        if ((session !== 'logged-out') && !token) {\n            throw SAMError.create(SAMErrorCode.AUTHORIZATION_ERROR, `Unable to obtain access token - did you provide a refreshAccessToken hook?`);\n        }\n\n        // Extract parameters that won't be passed to `fetch`, and clone the ones that will so that a) there are no\n        // side-effects to the caller, and b) 401 retries can use the same `options` as the original request.\n        const { headers = {}, authHeader, noOtherHeaders, requestTimeoutMs, ...requestInit } = options;\n\n        // ONS uses a different auth header from other services, so this needs to be configurable\n        const authorizationHeader = 'Authorization';\n\n        const auth = (session !== 'logged-out')\n            ? { [authHeader || authorizationHeader]: `${(session === 'guest') ? 'AnonBearer' : 'Bearer'} ${token}` }\n            : { };\n\n        // After this line, `requestHeaders` and `headers` should not be modified to avoid side-effects for the caller.\n        // deepClone removes headers with undefined values -- this makes it easier to assemble Headers where some\n        // headers could be optional.\n        const requestHeaders = noOtherHeaders ? deepClone(headers) : {\n            ...deepClone(headers),\n            ...auth,\n            'X-Api-Key': this._config.CLIENT_ID\n        };\n\n        // Include a timeout on the request (fetch doesn't have a timeout, so it will never resolve if the socket hangs up)\n        const abortController = new AbortController();\n        let uncombineSignals = () => {};\n        if (requestInit.signal) {\n            uncombineSignals = combineSignals(requestInit, requestInit.signal, abortController.signal);\n        } else {\n            requestInit.signal = abortController.signal;\n        }\n        const timeoutLength = requestTimeoutMs || this.getValue('FETCH_REQUEST_TIMEOUT');\n        const timeout = setTimeout(() => abortController.abort(), timeoutLength);\n\n        const startTime = Date.now();\n\n        try {\n            const response = await fetch(url, { ...requestInit, headers: requestHeaders });\n            const requestId = response.headers.get('X-Request-Id');\n            const requestIdString = requestId || `no requestId`;\n            this.debug(`[${requestIdString}] ${options.method || 'GET'} ${url} ${response.status} (${Date.now() - startTime}ms)`);\n\n            clearTimeout(timeout);\n\n            if (response.status === 401) {\n                // If we get a 401 response it usually means that access token has expired.\n                if (token !== this._config.ACCESS_TOKEN) {\n                    // If the access token was already refreshed during the request, just retry and\n                    // it will pick up the new token.\n                    // NOTE: We are not using await here to avoid capturing the errors in the parent try block.\n                    // NOTE: using `options` instead of `requestInit` so the retry will use the same settings as the original request.\n                    return this.fetch(url, options, numRetries + 1);\n                } else {\n                    // Otherwise it means we discovered the current token is invalid. We need to invalidate the token and retry. The retry\n                    // will detect that the token is invalid and refresh it (if the host has provided a hook).\n                    this._isTokenInvalid = true;\n                    if (numRetries < MAX_401_RETRIES) {\n                        // NOTE: We are not using await here to avoid capturing the errors in the parent try block.\n                        // NOTE: using `options` instead of `requestInit` so the retry will use the same settings as the original request.\n                        return this.fetch(url, options, numRetries + 1);\n                    }\n                }\n            }\n\n            return response;\n        } catch (e) {\n            this.debug(`Error - ${e} (${Date.now() - startTime}ms)`);\n            throw SAMError.wrapErrorIfNeeded(SAMErrorCode.NETWORK_ERROR, `Failed network request when fetching: ${url}`, e);\n        } finally {\n            // If we combined signals, we need to uncombine after the request is done, otherwise we'll continue to add\n            // event listeners to the original signal and hit the maximum limit. This would both be a memory leak and\n            // result in some aborts not being handled.\n            uncombineSignals();\n        }\n    }\n\n    // Returns a retry time based on the retry attempt number.\n    // For now, this uses the minimum retry interval a few times, before jumping to the maximum interval.\n    // We may want to change this to an exponential or Fibonacci backoff in future.\n    getRetryInterval(attempt: number): number {\n        // We retry quickly a few times on failure, before backing off to a slower interval:\n        return this.getValue(attempt < 3 ? 'MIN_RETRY_INTERVAL' : 'MAX_RETRY_INTERVAL');\n    }\n}\n","/*************************************************************************\n*   ADOBE CONFIDENTIAL\n*\n*   Copyright 2023 Adobe\n*   All Rights Reserved.\n*\n*   NOTICE:  All information contained herein is, and remains\n*   the property of Adobe and its suppliers, if any. The intellectual\n*   and technical concepts contained herein are proprietary to Adobe\n*   and its suppliers and are protected by all applicable intellectual\n*   property laws, including trade secret and copyright laws.\n*   Dissemination of this information or reproduction of this material\n*   is strictly forbidden unless prior written permission is obtained\n*   from Adobe.\n**************************************************************************/\nimport InterfaceBase from './InterfaceBase';\nimport {\n    FetchFields,\n    ISearchQuery,\n    ISearchQueryEntry,\n    USSResponse\n} from './USSv3Model';\nimport { Env } from '../core/Environment';\n\nexport const DEFAULT_MAX_LIMIT = 50;\n// These are for USS internal tracing and are not secrets\nexport const STAGE_APP_TOKEN = '4c7f3f73-27a6-48f9-8447-d2c8404661fa';\nexport const PROD_APP_TOKEN = '4c988f33-6435-4469-b37b-7dbe33687bd8';\nexport const USS_CONTENT_TYPE = 'application/vnd.adobe.search-request+json';\nexport const DEFAULT_EXPERIENCE_ID = 'Default-Global-Search-Experience';\n\nexport default class USSv3Interface extends InterfaceBase {\n\n    readonly queryPath: string = '/uss/v3/query';\n\n    async getQueryResponse(queryEntry: ISearchQueryEntry): Promise<USSResponse> {\n        const url = `https://${this._core._environment.endpoints.USSv3_HOST}${this.queryPath}`;\n        const queryEntryWithDefaults: ISearchQueryEntry =  {\n            'id': 'query1',\n            'scope': {\n                'entities': [ 'AcpAsset' ]\n            },\n            'fetchFields': [ FetchFields.SharedBy, FetchFields.LastAccessDate, FetchFields.CCInheritable, FetchFields.CCInherited, FetchFields.HzDocumentMetadata ],\n            ...queryEntry\n        };\n        const query: ISearchQuery = {\n            experienceId: DEFAULT_EXPERIENCE_ID,\n            queries: [ queryEntryWithDefaults ]\n        };\n        const response = await this._doPost(\n            url,\n            {\n                'X-App-Token': this._core._environment.getValue('ENVIRONMENT') === Env.Stage\n                    ? STAGE_APP_TOKEN\n                    : PROD_APP_TOKEN,\n                'content-type': USS_CONTENT_TYPE,\n            },\n            JSON.stringify(query),\n            [ 200 ]\n        );\n\n        return response.json();\n    }\n}\n","/*************************************************************************\n*   ADOBE CONFIDENTIAL\n*\n*   Copyright 2023 Adobe\n*   All Rights Reserved.\n*\n*   NOTICE:  All information contained herein is, and remains\n*   the property of Adobe and its suppliers, if any. The intellectual\n*   and technical concepts contained herein are proprietary to Adobe\n*   and its suppliers and are protected by all applicable intellectual\n*   property laws, including trade secret and copyright laws.\n*   Dissemination of this information or reproduction of this material\n*   is strictly forbidden unless prior written permission is obtained\n*   from Adobe.\n**************************************************************************/\nimport { IItemSourceConfig } from '../core/ItemList';\nimport { IItemLoader, IItemLoaderOptions, ILoadedPage, ILoadNextPage } from '../core/ItemLoader';\nimport AdobeAsset, { AdobeAssetUpdaterMetadata } from './AdobeAsset';\nimport ItemPool from '../core/ItemPool';\nimport { USSResponse, USSItemMetadata } from '../interface/USSv3Model';\nimport { ISAMCorePrivate } from '../indexPrivate';\nimport { IUpdateSession } from '../core/UpdateSession';\nimport { RelType } from '../interface/LinkUtils';\nimport LibraryContext from '../libraries/LibraryContext';\nimport USSAdobeAssetFilter from './USSAdobeAssetFilter';\n\ninterface IAdditionalOptions {\n    mediaTypes: string[];\n    excludeMediaTypes: string[];\n    excludeInheritanceTypes: string[];\n}\n\nexport interface IGetUSSResultsOpts<T extends IItemSourceConfig<AdobeAsset>> extends IItemLoaderOptions<T>, IAdditionalOptions {\n    start: number;\n}\n\nexport interface IUSSLoader<T extends IItemSourceConfig<AdobeAsset>> extends IItemLoader<T> {\n    /**\n     * Loaders must implement this method and call from Loader.loadPage(options)\n     */\n    _getUSSResults(opts: IGetUSSResultsOpts<T>): Promise<USSResponse>;\n    /**\n     * Loaders can optionally implement to provide additional metadata that is\n     * implied by the Loader but not included in the USS response.\n     */\n    _getItemData?(item: USSItemMetadata): Partial<AdobeAssetUpdaterMetadata>;\n    /**\n     * Loaders can optionally implement to perform additional internal state management.\n     */\n    _postProcessPage?(loaderPageOpts: IItemLoaderOptions<T>, page: ILoadedPage<T>): void;\n    /**\n     * Loaders can optionally implement to perform additional processing of USS search results.\n     */\n    _extractItems?(session: IUpdateSession<AdobeAsset>, items: USSItemMetadata[]): AdobeAsset[];\n    /**\n     * Loaders can optionally preload the library context.\n     */\n    _libraryContext?: LibraryContext;\n}\n\nconst DEFAULT_LIMIT = 50;\n\n/**\n * AdobeAsset Loader classes should use this class to do the page loading. Using composition rather\n * than inheritance because a base USSLoader class was causing circular dependencies at runtime that\n * would cause the base USSLoader class to be undefined when the Loader class that was extending it\n * was declared.\n */\nexport default class USSv3LoaderHelper<T extends IItemSourceConfig<AdobeAsset>> {\n    constructor(\n        private _assetPool: ItemPool<AdobeAsset>,\n        protected _core: ISAMCorePrivate,\n        private _loader: IUSSLoader<T>\n    ) {}\n\n    async loadPage(options: IItemLoaderOptions<T>, start?: number): Promise<ILoadedPage<T>> {\n        const { order, limit = DEFAULT_LIMIT, filter, implicitFilter } = options;\n        const latency = this._core._environment.getValue('USS_LIST_UPDATE_LATENCY');\n        const mostRecentValidMutation = Date.now() - latency;\n        start = start || 0;\n\n        const { mediaTypes, excludeMediaTypes, excludeInheritanceTypes } = filter as USSAdobeAssetFilter;\n\n        const result: USSResponse = await this._loader._getUSSResults({\n            order,\n            limit,\n            filter,\n            implicitFilter,\n            start,\n            mediaTypes: Array.from(mediaTypes ?? []),\n            excludeMediaTypes: Array.from(excludeMediaTypes ?? []),\n            excludeInheritanceTypes: Array.from(excludeInheritanceTypes ?? [])\n        });\n        const queryResult = result.queryResults[0];\n        // TODO: it'd be nice if USS returned empty array when there are no matches\n        const resultItems = queryResult.items || [];\n\n        const session = this._assetPool.createLoaderUpdateSession(mostRecentValidMutation);\n\n        const items = this._loader._extractItems ? this._loader._extractItems(session, resultItems) : this._extractItems(session, resultItems);\n\n        let loadNextPage: ILoadNextPage<T> | undefined;\n        const total = queryResult.metadata.totalHits || 0;\n        const pageItemCount = resultItems.length;\n        // [SEARCH-30755] -- May be caused by USS filtering out items due to permissions for the\n        // current user, which aren't subtracted from the total. Try to ensure that the Loader paginates\n        // as though the total_items is correct.\n        const nextStartIndex = (pageItemCount === 0 ? start + limit : start + pageItemCount);\n        if (nextStartIndex < total) {\n            loadNextPage = (options: IItemLoaderOptions<T>) => this.loadPage(options, nextStartIndex);\n        }\n\n        const page: ILoadedPage<T> = {\n            items,\n            total,\n            loadNextPage,\n            mostRecentValidMutation\n        };\n\n        // allow Loader to do additional internal state management (optional)\n        this._loader._postProcessPage?.(options, page);\n\n        session.commit();\n\n        return page;\n    }\n\n    private _getItemDataWithUserId(userId: string)  {\n        return (item: USSItemMetadata) => {\n            return {\n                ...item.rm,\n                // cm.sharedBy is an array of user IDs that have shared the asset\n                // assuming that it is an ordered array, the first item is the first sharer\n                // Even after this assumption we can't be sure that first sharer is the owner\n                // We will need more info to figure out whether the asset is sharedViaInvite.\n                // For example consider an asset inside a project that is not owned by the user\n                // and that asset is 1-off shared with some user C by user B.\n                // Now user A does not know whether this asset is shared via invite with him because\n                // he is not the owner of the asset and cm.sharedBy will have user B's ID but it is not\n                // shared via invite with user A.\n                sharedViaInvite: item.cm?.sharedBy.length > 0 && item.cm!.sharedBy[0] !== userId,\n                isShared: item.cm?.sharedBy.length > 0,\n                // Get the app metadata from the item if it exists.\n                ...(item.am && { _embedded: { [RelType.APP_METADATA]: item.am } }),\n                // No need to refresh collaborators for share flags, directCollaboratorCount, since they are computed\n                // above. Not clearing the collaboratorDataIsDirty flag, because we cannot populate collaboratorArray\n                // from USS.\n                shareFlagsAreDirty: false\n            };\n        };\n    }\n\n    //curry this function to get the user id here\n    private _getItemData = this._getItemDataWithUserId(this._core._environment.getUserId());\n\n    private _extractItems(session: IUpdateSession<AdobeAsset>, items: USSItemMetadata[]): AdobeAsset[] {\n        return this._core._adobeAssetFactory.assetsFromUSSV3AppMetadata(session, items, this._loader._getItemData ?? this._getItemData, this._loader?._libraryContext);\n    }\n}\n","/*************************************************************************\n*   ADOBE CONFIDENTIAL\n*\n*   Copyright 2023 Adobe\n*   All Rights Reserved.\n*\n*   NOTICE:  All information contained herein is, and remains\n*   the property of Adobe and its suppliers, if any. The intellectual\n*   and technical concepts contained herein are proprietary to Adobe\n*   and its suppliers and are protected by all applicable intellectual\n*   property laws, including trade secret and copyright laws.\n*   Dissemination of this information or reproduction of this material\n*   is strictly forbidden unless prior written permission is obtained\n*   from Adobe.\n**************************************************************************/\nimport USSv3LoaderHelper, { IGetUSSResultsOpts, IUSSLoader } from './USSv3LoaderHelper';\nimport { AdobeAssetGlobalSearchConfig } from './AdobeAssetSource';\nimport ItemPool from '../core/ItemPool';\nimport AdobeAsset from './AdobeAsset';\nimport { DEFAULT_MAX_LIMIT } from '../interface/USSv3Interface';\nimport { IItemLoaderOptions, ILoadedPage } from '../core/ItemLoader';\nimport { USSResponse } from '../interface/USSv3Model';\nimport AdobeAssetGlobalSearchFilter from './AdobeAssetGlobalSearchFilter';\nimport GlobalSearchInterface from '../interface/GlobalSearchInterface';\nimport { ISAMCorePrivate } from '../indexPrivate';\nimport LibraryContext from '../libraries/LibraryContext';\n\nexport default class GlobalSearchLoader implements IUSSLoader<AdobeAssetGlobalSearchConfig> {\n    private _ussLoaderHelper: USSv3LoaderHelper<AdobeAssetGlobalSearchConfig>;\n    /**\n      * @package -- only for use in SAM.js\n      */\n    _libraryContext?: LibraryContext;\n    constructor(\n        assetPool: ItemPool<AdobeAsset>,\n        private _core: ISAMCorePrivate,\n        private _globalSearchInterface: GlobalSearchInterface,\n        private _implicitFilter: AdobeAssetGlobalSearchFilter\n    ) {\n        this._ussLoaderHelper = new USSv3LoaderHelper<AdobeAssetGlobalSearchConfig>(assetPool, this._core, this);\n    }\n\n    supportsFilter(filter?: AdobeAssetGlobalSearchConfig['filter']): boolean {\n        return filter !== undefined;\n    }\n\n    async loadPage(options: IItemLoaderOptions<AdobeAssetGlobalSearchConfig>): Promise<ILoadedPage<AdobeAssetGlobalSearchConfig>> {\n        if (!this._libraryContext) {\n            this._libraryContext = await this._core.getLibraryContext();\n        }\n        return this._ussLoaderHelper.loadPage(options);\n    }\n\n    _getUSSResults({\n        start,\n        limit = DEFAULT_MAX_LIMIT,\n        order,\n        mediaTypes,\n        excludeMediaTypes,\n        excludeInheritanceTypes,\n    }: IGetUSSResultsOpts<AdobeAssetGlobalSearchConfig>): Promise<USSResponse> {\n        const { _query: query, _projectsOnly: projectsOnly } = this._implicitFilter;\n        return this._globalSearchInterface.globalSearch({\n            start,\n            limit,\n            query,\n            order,\n            mediaTypes: [ ...(mediaTypes || []) ],\n            excludeMediaTypes: [ ...(excludeMediaTypes || []) ],\n            excludeInheritanceTypes: [ ...(excludeInheritanceTypes || []) ],\n            projectsOnly\n        });\n    }\n\n    _postProcessPage(\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        { filter }: IItemLoaderOptions<AdobeAssetGlobalSearchConfig>,\n        { items }: ILoadedPage<AdobeAssetGlobalSearchConfig>\n    ): void {\n        this._implicitFilter._matchingIDsFromSearch = new Set([\n            // copy existing\n            ...(this._implicitFilter._matchingIDsFromSearch || []),\n            ...(items.map(item => item.id))\n        ]);\n    }\n}\n","/*************************************************************************\n *   ADOBE CONFIDENTIAL\n *\n *   Copyright 2023 Adobe\n *   All Rights Reserved.\n *\n *   NOTICE:  All information contained herein is, and remains\n *   the property of Adobe and its suppliers, if any. The intellectual\n *   and technical concepts contained herein are proprietary to Adobe\n *   and its suppliers and are protected by all applicable intellectual\n *   property laws, including trade secret and copyright laws.\n *   Dissemination of this information or reproduction of this material\n *   is strictly forbidden unless prior written permission is obtained\n *   from Adobe.\n **************************************************************************/\nimport { IOrderDirection } from '../core/ItemOrder';\nimport { OrderFieldToUSSv3OrderField, USSAdobeAssetOrderField } from '../assets/USSAdobeAssetOrder';\nimport InterfaceBase from './InterfaceBase';\nimport { ISearchQueryEntryFilter, USSResponse, USSv3FilterField, USSv3OrderDir } from './USSv3Model';\nimport USSv3Interface, { DEFAULT_MAX_LIMIT } from './USSv3Interface';\nimport { ISAMCorePrivate } from '../indexPrivate';\n\nexport interface IGlobalSearchOpts {\n    query: string;\n    start: number;\n    limit: number;\n    order?: {\n        direction: IOrderDirection;\n        field: USSAdobeAssetOrderField;\n    },\n    mediaTypes?: string[];\n    excludeMediaTypes?: string[];\n    excludeInheritanceTypes?: string[];\n    projectsOnly?: boolean;\n}\n\nexport default class GlobalSearchInterface extends InterfaceBase {\n\n    constructor(\n        _core: ISAMCorePrivate,\n        private _ussInterface: USSv3Interface\n    ) {\n        super(_core);\n    }\n\n    async globalSearch({\n        query,\n        start = 0,\n        limit = DEFAULT_MAX_LIMIT,\n        order,\n        mediaTypes,\n        excludeInheritanceTypes,\n        projectsOnly\n    }: IGlobalSearchOpts): Promise<USSResponse> {\n        const { field = 'modified', direction = 'descending' } = order || {};\n\n        const filters: ISearchQueryEntryFilter[] = [];\n        if (projectsOnly) {\n            // As per the recent discussions this is how the project:directoryType is defined as of now\n            // The old spaces were identified with project:directoryType = project\n            // The old workspaces were identified with project:directoryType = team\n            // The new projects are now identified with project:directoryType = team\n            filters.push({ [USSv3FilterField.DIRECTORY_TYPE]: [ 'team' ] });\n        } else {\n            if (mediaTypes?.length ?? 0 > 0) {\n                filters.push({\n                    [USSv3FilterField.MEDIA_TYPE]: mediaTypes,\n                });\n            }\n\n            if (excludeInheritanceTypes?.length ?? 0 > 0) {\n                filters.push({\n                    [USSv3FilterField.INHERITANCE_TYPE]: {\n                        funcParams: { fields: excludeInheritanceTypes! }\n                    }\n                });\n            }\n        }\n\n        return this._ussInterface.getQueryResponse({\n            start,\n            limit,\n            textQuery: query,\n            sorts: [ {\n                sortOrderBy: OrderFieldToUSSv3OrderField[field],\n                sortOrder: (direction === 'ascending' ? USSv3OrderDir.Ascending : USSv3OrderDir.Descending)\n            } ],\n            // TODO: figure out how to exclude media types once USS v3 supports it\n            filters\n        });\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport AdobeAsset from './AdobeAsset';\nimport { IItemLoaderOptions, ILoadedPage } from '../core/ItemLoader';\nimport ItemPool from '../core/ItemPool';\nimport { AdobeAssetGlobalSearchConfig } from './AdobeAssetSource';\nimport AdobeAssetGlobalSearchFilter from './AdobeAssetGlobalSearchFilter';\nimport { OrderFieldToIUSSAdobeAssetOrderBy } from './USSAdobeAssetOrder';\nimport type AdobeAssetGlobalSearchInterface from '../interface/AdobeAssetGlobalSearchInterface';\nimport { USSResponse } from '../interface/USSModel';\nimport USSLoaderHelper, { IGetUSSResults, IUSSLoader } from './USSLoaderHelper';\nimport { ISAMCorePrivate } from '../indexPrivate';\nimport AdobeAssetFilter from './AdobeAssetFilter';\nimport LibraryContext from '../libraries/LibraryContext';\n\nexport default class AdobeAssetGlobalSearchLoader implements IUSSLoader<AdobeAssetGlobalSearchConfig> {\n    private _ussLoaderHelper: USSLoaderHelper<AdobeAssetGlobalSearchConfig>;\n    _libraryContext?: LibraryContext;\n    constructor(\n        assetPool: ItemPool<AdobeAsset>,\n        private _implicitFilter: AdobeAssetGlobalSearchFilter,\n        private _core: ISAMCorePrivate,\n        private _adobeAssetGlobalSearchInterface: AdobeAssetGlobalSearchInterface\n    ) {\n        this._ussLoaderHelper = new USSLoaderHelper(assetPool, _core, this);\n    }\n\n    supportsFilter(filter?: AdobeAssetGlobalSearchFilter | AdobeAssetFilter): boolean {\n        // If we don't provide a filter at all, then we cannot use the loader\n        return filter !== undefined;\n    }\n\n    async loadPage(options: IItemLoaderOptions<AdobeAssetGlobalSearchConfig>): Promise<ILoadedPage<AdobeAssetGlobalSearchConfig>> {\n        if (!this._libraryContext) {\n            this._libraryContext = await this._core.getLibraryContext();\n        }\n        return this._ussLoaderHelper.loadPage(options);\n    }\n\n    /**\n     * @package -- only for use by USSLoaderHelper\n     */\n    _getUSSResults({\n        start,\n        limit,\n        order,\n        mediaTypes,\n        excludeMediaTypes\n    }: IGetUSSResults<AdobeAssetGlobalSearchConfig>): Promise<USSResponse> {\n        const query = this._implicitFilter?._query;\n\n        return this._adobeAssetGlobalSearchInterface.getFilteredAssets({\n            orderBy: OrderFieldToIUSSAdobeAssetOrderBy[order.field],\n            orderDirection: order.direction,\n            start,\n            limit,\n            mediaTypes,\n            excludeMediaTypes,\n            query,\n            embedPermissions: true,\n        });\n    }\n\n    /**\n     * @package -- only for use by USSLoaderHelper\n     */\n    _postProcessPage(\n        loaderOptions: IItemLoaderOptions<AdobeAssetGlobalSearchConfig>,\n        page: ILoadedPage<AdobeAssetGlobalSearchConfig>\n    ): void {\n        const { items } = page;\n\n        this._implicitFilter!._matchingIDsFromSearch = new Set([\n            // copy existing, if needed\n            ...(this._implicitFilter!._matchingIDsFromSearch || []),\n            ...(items.map(item => item.id)) ]);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport type { IItemFilter, ItemFilterRelation } from '../core/ItemFilter';\nimport type { default as AdobeAsset } from './AdobeAsset';\nimport ImplicitAdobeAssetFilterBase from './ImplicitAdobeAssetFilterBase';\n\nexport default class SWYAdobeAssetFilter extends ImplicitAdobeAssetFilterBase implements IItemFilter<AdobeAsset> {\n\n    constructor() {\n        super({\n            _isSharedWithYou: true\n        });\n    }\n\n    get hash(): string {\n        return super.hash;\n    }\n\n    matches(item: AdobeAsset): boolean {\n        if (!item._isSWYAsset_NoLazyLoad) {\n            return false;\n        }\n        return super.matches(item);\n    }\n\n    getRelationToFilter(other: SWYAdobeAssetFilter): ItemFilterRelation {\n        const otherAdobeAssetFilter = other as SWYAdobeAssetFilter;\n        return super.getRelationToFilter(otherAdobeAssetFilter);\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport SAMError, { SAMErrorSubCode, isSAMError } from '../core/SAMError';\nimport { IOrderDirection } from '../core/ItemOrder';\nimport { cache, key, synchronized } from '../core/decorators';\nimport InterfaceBase from './InterfaceBase';\nimport { getURLFromLinks, IServiceLink, JSON_MIME_TYPE, JSON_PATCH_MIME_TYPE, RelType, validateLinks } from './LinkUtils';\nimport {\n    IProject,\n    IProjectsCreateData,\n    IProjectsEmbeddableResource,\n    IProjectsOrderBy,\n    IProjectsResponse,\n    IProjectsIndexLinks,\n    IProjectsIndexResponse,\n    PROJECTS_INDEX_LINKS,\n    IProjectLinks,\n    IProjectPatchData,\n    IProjectPatchKeys,\n    ProjectCapabilities,\n    IProjectsServiceErrorResponse,\n    IProjectView\n} from './ProjectsModel';\nimport { SAMErrorCode, ProblemType } from '../core/SAMError';\nimport { IGradientsResponse } from './GradientModel';\nimport { NotFound } from '../core/Cache';\nimport jsonpatch from 'json-patch';\n\n// Link for the projects service v3 API spec: https://developers.corp.adobe.com/ccteams/src/main/resources/static/openapi/v3/index.yaml\n\ntype IPageOptions = {\n    start: number;\n    limit: number;\n}\n\ninterface IListingOptions<IOrderField> extends IPageOptions {\n    orderDirection: IOrderDirection;\n    orderBy: IOrderField;\n}\n\nexport interface ProjectsListingOptions extends IListingOptions<IProjectsOrderBy> {\n    // Projects service allows certain properties to be embedded in the response as '_embedded' property in each child\n    embed?: IProjectsEmbeddableResource[];\n\n    // filters out the projects based on the view. Gives all the results if not specified\n    view?: IProjectView;\n\n    // We need to provide support for repository ID based filtering\n    // This will be required by Admin console to narrow results to a specific organization\n    repositoryId?: string;\n}\n\nexport interface IContextAPIResponse {\n    'repo:assetId': string;\n}\n\nexport const DefaultEmbeddedResources: IProjectsEmbeddableResource[] = [\n    [ RelType.AC_EFFECTIVE ],\n    [ RelType.APP_METADATA ],\n    [ RelType.PROJECTS_CREATOR ],\n    [ RelType.REPOSITORY ]\n];\n\nconst DefaultProjectsListingOptions: ProjectsListingOptions = {\n    orderDirection: 'ascending',\n    orderBy: 'repo:name',\n    start: 0,\n    limit: 0,\n    // we want to embed all the resources by default\n    embed: DefaultEmbeddedResources\n};\n\nfunction getDefaultOptions<OptionTypes>(Defaults: OptionTypes, options?: Partial<OptionTypes>): OptionTypes {\n    return Object.assign({}, Defaults, options);\n}\n\nfunction getDirectionValue<IOrderField>(userOptions: IListingOptions<IOrderField>) {\n    const directionFlag = userOptions.orderDirection === 'ascending' ? '+' : '-';\n    return directionFlag + userOptions.orderBy;\n}\n\nfunction createPageTemplate(options: IPageOptions) {\n    const templateValues: any = {};\n    if (options.start) {\n        templateValues.start = options.start;\n    }\n    if (options.limit) {\n        templateValues.limit = options.limit;\n    }\n    return templateValues;\n}\n\nexport function getProjectsListingPath(links: IProjectsIndexLinks, options?: Partial<ProjectsListingOptions>): string {\n    const userOptions = getDefaultOptions(DefaultProjectsListingOptions, options);\n    const templateValues: any = createPageTemplate(userOptions);\n    templateValues.orderBy = getDirectionValue(userOptions);\n    const { embed, view, repositoryId } = userOptions;\n    if (embed?.length) {\n        templateValues.embed = embed.join(',');\n    }\n    if (view) {\n        templateValues.view = view;\n    }\n    if (repositoryId) {\n        templateValues.repositoryId = repositoryId;\n    }\n    return getURLFromLinks(links, RelType.PROJECTS_COLLECTION, templateValues);\n}\n\nfunction validateRequiredProjectLinks(links: any) {\n    return validateLinks(links, PROJECTS_INDEX_LINKS);\n}\n\n/**\n * Small utility function that returns an OpPatch operation\n * for gradients. Seperated to make it easier to share here and\n * in tests.\n *\n * @param path\n * @param gradientID\n * @returns\n */\nexport function getProjectGradientPatchOP(path: string, gradientID: string): jsonpatch.OpPatch {\n    return {\n        'op': 'replace',\n        path,\n        'value': gradientID\n    };\n}\n\nexport default class ProjectsInterface extends InterfaceBase {\n    /**\n     * We should fetch gradient data once per session\n     * to ensure that if there are updates to the gradients\n     * we get the updates if the page refreshes.\n     */\n    private _gradientLanguageFetched: string = '';\n\n    @cache(validateRequiredProjectLinks)\n    private async _discoverLinks(@key rootHref: string): Promise<IProjectsIndexLinks> {\n        const response: IProjectsIndexResponse = await this._getResponse(rootHref);\n        return response._links;\n    }\n\n    private _getEndpointHref(endpoint: string): string {\n        return `https://${this._core._environment.endpoints.PROJECTS_HOST}${endpoint}`;\n    }\n\n    async discoverLinks(): Promise<IProjectsIndexLinks> {\n        return this._discoverLinks(this._getEndpointHref(`/api/v3/index`));\n    }\n\n    /**\n     * Fetches the list of projects based on the options provided\n     * @param options : options to sort and filter the projects listing\n     * @returns the list of projects along with the page information and links to the next page\n     */\n    async getProjects(options?: Partial<ProjectsListingOptions>): Promise<IProjectsResponse> {\n        const links = await this.discoverLinks();\n        const url = getProjectsListingPath(links, options);\n        return await this._getResponse(url);\n    }\n\n    /**\n     *\n     * @package Internal use only\n     */\n    async _getProjectLink(\n        id: string,\n        embed: IProjectsEmbeddableResource[] = DefaultEmbeddedResources\n    ) {\n        const links = await this.discoverLinks();\n        const url = getURLFromLinks(links, RelType.PROJECTS_PRIMARY, {\n            assetId: id,\n            ...(embed.length ? { embed: embed.join(',') } : undefined)\n        });\n        return url;\n    }\n    /**\n     *\n     * @param id Gets the project metadata for the given project id from the projects service\n     * @param embed the resources that are to be embedded in the response. By default all the resources are embedded\n     * @returns the project metadata for the given project id\n     */\n    async getProject(\n        id: string,\n        embed: IProjectsEmbeddableResource[] = DefaultEmbeddedResources\n    ): Promise<IProject> {\n        const url = await this._getProjectLink(id, embed);\n        return await this._getResponse(url);\n    }\n\n    async getProjectsWithLink(pageLink: IServiceLink): Promise<IProjectsResponse> {\n        return await this._getResponse(pageLink.href);\n    }\n\n    /**\n     *\n     * @package Internal use only\n     *\n     */\n    private async _getCreateLink(embed: IProjectsEmbeddableResource[]) {\n        const links = await this.discoverLinks();\n        return getURLFromLinks(links, RelType.PROJECTS_CREATE, embed.length ? { embed: embed.join(',') } : undefined);\n    }\n\n    /**\n     * Creates a new project\n     * @param data needed to create a project like name and color\n     * @param embed the resources to be returned in the response of the newly created project. By default all the resources are embedded\n     * @returns the newly created project\n     */\n    async createProject(data: IProjectsCreateData, embed: IProjectsEmbeddableResource[] = DefaultEmbeddedResources): Promise<IProject> {\n        const url = await this._getCreateLink(embed);\n\n        // 403 is included as a success code below so we can special case it after _doPost returns.\n        const response = await this._doPost(url, { 'Content-Type': JSON_MIME_TYPE }, JSON.stringify(data), [ 201, 403 ]);\n        let jsonResponse = {} as any;\n\n        // Use try/catch in case body is empty or not JSON. It's expected that success cases will always return\n        // JSON, but not sure about all error cases. Otherwise, it could throw an exception here and hide the\n        // service call that caused the problem.\n        try {\n            jsonResponse = await response.json();\n        } catch {\n            // Ignore the error here.\n        }\n\n        if (jsonResponse.status === 403) {\n            if (jsonResponse.type === ProblemType.CHILDREN_LIMIT_EXCEEDED) {\n                throw SAMError.create(\n                    SAMErrorCode.PROJECT_LIMIT_EXCEEDED,\n                    'Maximum number of Projects exceeded',\n                    { response, reqId: response.headers.get('x-request-id') || '' }\n                );\n            } else {\n                const error = SAMError.createWithResponse(response, response.url);\n                this._core._environment.error(`ProjectsInterface error ${error}`);\n                throw error;\n            }\n        }\n\n        return jsonResponse;\n    }\n\n    /**\n     * Find the project that matches the given name, if available\n     * @param path relative path of the project, which is the project name\n     * @returns data associated with the project\n     */\n    async resolveProjectByName(path: string): Promise<IProject> {\n        const url = await this._getResolveByPathLink(path);\n        return this._getResponse(url);\n    }\n\n    /**\n     * Renames the project with the new name\n     * @param newName new name for the project\n     * @param links links associated with the project. We use the rename link to rename the project\n     */\n    async renameProject(newName: string, links: IProjectLinks): Promise<void> {\n        const href = getURLFromLinks(links, RelType.PROJECTS_RENAME);\n        await this._doPost(\n            href,\n            { 'Content-Type': JSON_MIME_TYPE },\n            JSON.stringify({ 'repo:name': newName }),\n            [ 204 ]);\n    }\n\n    /**\n     *\n     * @package Internal use only\n     *\n     */\n    async _getResolveByPathLink(path: string, repositoryID?: string): Promise<string> {\n        const links = await this.discoverLinks();\n        const url = getURLFromLinks(links, RelType.RESOLVE_PATH, {\n            path,\n            ...(repositoryID ? { repositoryId: repositoryID } : {})\n        });\n        return url;\n    }\n\n    /**\n     * Validate the project name either for creation or renaming a project.\n     * If the head call responds with 404, it means the project name is valid\n     * and no other project exists with the same name/path.\n     * 200 and 403 responses are considered name conflicts.\n     * Please refer https://wiki.corp.adobe.com/display/assetscollab/Proposal%3A+Project+API+V3+-+Resolve\n     * for more details.\n     * @param path The relative path or absolute path of a project. If the path is relative,\n     * project service prepends a prefix to form an absolute path\n     */\n    async validateProjectName(path: string, repositoryID?: string): Promise<void> {\n        const url = await this._getResolveByPathLink(path, repositoryID);\n        await this._doHead(url);\n    }\n\n    /**\n     * Discards a project.\n     */\n    async discardProject(id: string, links: IProjectLinks) {\n        if (!links?.[RelType.DISCARD]) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, `Discard link is missing for this project${id}`);\n        }\n\n        const href = getURLFromLinks(links, RelType.DISCARD);\n        await this._doPost(\n            href,\n            undefined,\n            undefined,\n            [ 204 ]\n        );\n    }\n\n    /**\n     * Restores a project.\n     */\n    async restoreProject(id: string, links: IProjectLinks) {\n        if (!links?.[RelType.RESTORE]) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, `Restore link is missing for this project${id}`);\n        }\n\n        const href = getURLFromLinks(links, RelType.RESTORE);\n        await this._doPost(\n            href,\n            undefined,\n            undefined,\n            [ 204 ]\n        );\n    }\n\n    @synchronized\n    async getGradients(\n        languageCode: string\n    ): Promise<IGradientsResponse> {\n        const cacheKey = `${languageCode}-gradient-data`;\n        const cacheData = await this._core._environment.cache.getItem(cacheKey);\n\n        if (cacheData === NotFound) {\n            // No cache, so need to refresh\n            return this._refreshGradients(languageCode);\n        }\n        if (this._gradientLanguageFetched !== languageCode) {\n            // Haven't yet refreshed the gradient data for this language\n            // this session, so refresh\n            return this._refreshGradients(languageCode);\n        }\n        return cacheData;\n    }\n    /**\n     *\n     * @package Internal use only\n     *\n     */\n    async _getGradientsLink() {\n        const links = await this.discoverLinks();\n        const url = getURLFromLinks(\n            links,\n            RelType.PROJECTS_GRADIENTS_COLLECTION,\n        );\n        return url;\n    }\n\n    @synchronized\n    private async _refreshGradients(\n        languageCode: string\n    ): Promise<IGradientsResponse> {\n        const url = await this._getGradientsLink();\n        const response = await this._doGet(url, {\n            headers: {\n                'Content-Type': JSON_MIME_TYPE,\n                'Accept-Language': languageCode\n            }\n        });\n\n        const responseJson  = await response.json();\n        // set the data to the cache\n        const cacheKey = `${languageCode}-gradient-data`;\n        await this._core._environment.cache.setItem(cacheKey, responseJson);\n        this._gradientLanguageFetched = languageCode;\n        return responseJson;\n    }\n\n    async patchProject(links: IProjectLinks, data: IProjectPatchData) {\n        const jsonData: jsonpatch.OpPatch[] = [];\n\n        if (data.gradientID) {\n            jsonData.push(getProjectGradientPatchOP(IProjectPatchKeys.GRADIENT_ID, data.gradientID));\n        }\n\n        const url = getURLFromLinks(links, RelType.APP_METADATA);\n        await this._doPatch(url, { 'Content-Type': JSON_PATCH_MIME_TYPE, 'If-Match': '*' }, JSON.stringify(jsonData), [ 204 ]);\n    }\n\n    /**\n     *\n     * @package Internal use only\n     *\n     */\n    async _getCapabilityLink(capability: ProjectCapabilities, repositoryID?: string) {\n        const links = await this.discoverLinks();\n        return getURLFromLinks(links, RelType.PROJECTS_CAPABILITY, {\n            privilege: capability,\n            // @TODO We need change all instances of repositoryID to repositoryId\n            // in order to prevent some bugs in the future and keep the naming consistent.\n            ...(repositoryID ? { repositoryId: repositoryID } : {})\n        });\n    }\n\n    async getCapability(capability: ProjectCapabilities, repositoryID?: string) {\n        const url = await this._getCapabilityLink(capability, repositoryID);\n\n        try {\n            await this._doGet(url);\n        } catch (e) {\n            // If the error is not a SAMError then we can\n            // just throw it normally. We don't want to obfuscate a regular error\n            // that could occur just because it's not a SAMError.\n            if (!isSAMError(e)) {\n                throw e;\n            }\n\n            const samError = e as SAMError;\n            const errorResponse = samError._additionalInfo.response;\n\n            // If the response is not defined then let's just\n            // throw the error as well since it's not an error created by\n            // a response from a request in SAM.\n            if (!errorResponse) {\n                throw e;\n            }\n\n            const failedResponseCode = [ 404, 403 ];\n            if (!failedResponseCode.includes(errorResponse.status)) {\n                throw e;\n            }\n\n            const responseJson: IProjectsServiceErrorResponse = await errorResponse.json();\n            switch (responseJson.type) {\n            case ProblemType.ADMIN_ONLY:\n                throw SAMError.create(\n                    SAMErrorCode.ACCESS_DENIED,\n                    'Admin disabled creation of projects for user',\n                    undefined,\n                    SAMErrorSubCode.PROJECTS_ADMIN_ONLY\n                );\n            case ProblemType.NO_HOME_REPOSITORY:\n                throw SAMError.create(\n                    SAMErrorCode.NOT_FOUND,\n                    'No home repository for the user',\n                    undefined,\n                    SAMErrorSubCode.PROJECTS_NO_HOME_REPOSITORY\n                );\n            case ProblemType.INVALID_HOME_REPOSITORY:\n                throw SAMError.create(\n                    SAMErrorCode.NOT_FOUND,\n                    'Invalid home Repository for the user',\n                    undefined,\n                    SAMErrorSubCode.PROJECTS_INVALID_REPOSITORY\n                );\n            default:\n                throw e;\n            }\n        }\n    }\n\n    /**\n     *\n     * @package Internal use only\n     *\n     */\n    async _issueContextAPIRequest(assetId: string, repoId: string, href: string) {\n        const body = JSON.stringify({\n            'repo:assetId': assetId,\n            'repo:repositoryId': repoId\n        });\n        const response = await this._doPost(href, {\n            'Content-Type': 'application/json'\n        }, body, [ 200 ]);\n        return response.json();\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\nimport { RepositoryMetadata } from './RepositoryModel';\nimport { IServiceLink, LinkRequirements, RelType } from './LinkUtils';\nimport { IRemoteStudentAssignment } from './StudentAssignmentModel';\nimport { Tutorial } from './TutorialModel';\n\nexport interface IAssignmentsIndexResponse {\n    _links: IAssignmentsIndexLinks\n}\n\nexport interface IAssignmentsIndexLinks {\n    [RelType.ASSIGNMENTS_COLLECTION]: IServiceLink,\n    [RelType.ASSIGNMENTS_CREATE]: IServiceLink,\n    [RelType.ASSIGNMENTS_PRIMARY]: IServiceLink,\n}\n\nexport const ASSIGNMENTS_INDEX_LINKS: LinkRequirements = {\n    [RelType.ASSIGNMENTS_COLLECTION]: [ 'classroomId' ],\n    [RelType.ASSIGNMENTS_CREATE]: [ 'classroomId' ],\n    [RelType.ASSIGNMENTS_PRIMARY]: [ 'assignmentId' ]\n};\n\nexport interface IAssignmentActions {\n    [RelType.ASSIGNMENTS_PRIMARY]: IServiceLink;\n    [RelType.ASSIGNMENTS_ASSIGN]: IServiceLink;\n    [RelType.DISCARD]: IServiceLink;\n    [RelType.RESTORE]: IServiceLink;\n}\n\nexport type IAssignmentLinks = IAssignmentActions;\n\nexport enum AssignmentStatus {\n    DRAFT = 'DRAFT',\n    ASSIGNED = 'ASSIGNED',\n}\n\nexport interface AssignmentAdobeAssetMetadata {\n    'repo:assetId': string;\n}\n\n/** Model representing an assignment from the service */\nexport interface IRemoteAssignment extends IRemoteAssignmentAppMetadata, Pick<RepositoryMetadata,\n    'repo:assetId' | 'repo:createDate' | 'repo:state' | 'repo:name' | 'repo:path' | 'repo:createdBy' | 'repo:modifiedBy'\n> {\n    /** Student assignments */\n    'children': IRemoteStudentAssignment[];\n    /** Assignment links */\n    _links?: IAssignmentLinks;\n    /** Folder of a Adobe asset. Constructed by Hume. This is NOT stored in appMetadata */\n    'assignment:materialsFolder'?: AssignmentAdobeAssetMetadata;\n}\n\n/** Model representing an assignment info stored as appMetadata */\nexport interface IRemoteAssignmentAppMetadata {\n    /** Whether student can read each other's submission */\n    'assignment:canClassroomReadSubmissions': boolean;\n    /** Associated classroom ID */\n    'assignment:classroomId': string;\n    /** Assignment creator */\n    'assignment:createdBy': string;\n    /** Instructions */\n    'assignment:instructions': string;\n    /** Due date */\n    'assignment:dueDate'?: string;\n    /** Status */\n    'assignment:status': string;\n    /** acceptable types of assignment task document: https://git.corp.adobe.com/Horizon/hz/blob/main/features/tasks/src/typings/TaskIDEnums.ts#L26 */\n    'assignment:tasks'?: string[];\n    /** Asset IDs of template files that students can use to start their assignment */\n    'assignment:templateIds'?: string[];\n    /** Asset ID of a guided activity as a starting point for the student's assignment */\n    'assignment:externalTemplateIds'?: string[];\n    /** A stringified list of @see {Tutorial} objects */\n    'assignment:externalTutorials'?: string;\n    /** Assignment code used for URLs/share with students */\n    'assignment:code': string;\n    /** Additional reference assets used to create the assignment */\n    'assignment:referenceIds'?: string[];\n}\n\nexport interface ExternalAsset {\n    content: Blob | string;\n    name: string;\n    mediaType?: string;\n}\n\nexport interface IAssignmentCreateData {\n    canClassroomReadSubmissions?: boolean;\n    classroomId: string;\n    createdBy?: string;\n    dueDate?: Date;\n    externalTemplateIds?: string[],\n    instructions?: string;\n    name: string;\n    status?: AssignmentStatus;\n    tasks?: string[];\n    templateIds?: string[];\n    references?: (string | ExternalAsset)[];\n    externalTutorials?: Tutorial[];\n}\n\nexport interface IAssignmentUpdateData extends IAssignmentCreateData {}\n\nexport interface IAssignmentPatchData extends Partial<Pick<IAssignmentUpdateData,\n    | 'canClassroomReadSubmissions'\n    | 'instructions'\n    | 'dueDate'\n    | 'externalTemplateIds'\n    | 'externalTutorials'\n    | 'name'\n    | 'tasks'\n    | 'templateIds'\n    | 'status'>> {\n    referenceIds?: string[]\n}\n\nexport interface IAssignmentRemotePatchData extends Partial<Pick<IRemoteAssignment,\n    | 'assignment:canClassroomReadSubmissions'\n    | 'assignment:instructions'\n    | 'assignment:dueDate'\n    | 'assignment:externalTemplateIds'\n    | 'assignment:externalTutorials'\n    | 'assignment:templateIds'\n    | 'repo:name'\n    | 'assignment:tasks'\n    | 'assignment:status'\n    | 'assignment:referenceIds'>> {}\n\n/**\n * A mapping of fields from the local assignment model to the remote assignment model\n * This is the inverse of AssignmentUpdater.\n */\nexport const assignmentRemoteFieldMapping: Record<keyof IAssignmentPatchData, keyof IAssignmentRemotePatchData> = {\n    canClassroomReadSubmissions: 'assignment:canClassroomReadSubmissions',\n    instructions: 'assignment:instructions',\n    dueDate: 'assignment:dueDate',\n    externalTemplateIds: 'assignment:externalTemplateIds',\n    templateIds: 'assignment:templateIds',\n    name: 'repo:name',\n    tasks: 'assignment:tasks',\n    status: 'assignment:status',\n    referenceIds: 'assignment:referenceIds',\n    externalTutorials: 'assignment:externalTemplateIds'\n};\n\nexport interface IAssignmentsAppMetadata {\n    // not sure what would be the required/optional app metadata here, will update this later when we learn more\n    'assignment:rendition': Partial<IRemoteAssignment>;\n}\n\nexport type IAssignmentsOrderBy =\n  | 'repo:name'\n  | 'assignment:status'\n  | 'assignment:dueDate';\n\nexport interface IAssignmentsPageSpec {\n    start: number;\n    limit: number;\n    orderBy: string;\n    count: number;\n    total: number;\n}\n\nexport interface IAssignmentsLinks {\n    [RelType.ASSIGNMENTS_CREATE]: IServiceLink;\n    [RelType.ASSIGNMENTS_COLLECTION]: IServiceLink;\n}\n\nexport interface IAssignmentsResponse {\n    children: IRemoteAssignment[];\n    _page: IAssignmentsPageSpec;\n    _links: IAssignmentsLinks;\n}\n\n// exact same list as in https://git.corp.adobe.com/Horizon/hz/blob/main/features/tasks/src/typings/TaskIDEnums.ts#L26\n// Perhaps in the future, to prevent maintaining 2 lists, we can pull in Horizon when it's extensively used in this repo.\nexport enum AssignmentTaskIDEnums {\n    albumCover = 'album-cover',\n    bannerPrint = 'banner-print',\n    bannerWeb = 'banner-web',\n    blogGraphic = 'blog-graphic',\n    blogHeader = 'blog-header',\n    bookCover = 'book-cover',\n    bookmark = 'bookmark',\n    brochure = 'brochure',\n    businessCard = 'business-card',\n    calendar = 'calendar',\n    cardGreeting = 'card-greeting',\n    certificate = 'certificate',\n    checklist = 'checklist',\n    classSchedule = 'class-schedule',\n    comicStrip = 'comic-strip',\n    conceptMap = 'concept-map',\n    couponSheet = 'coupon-sheet',\n    coverPage = 'cover-page',\n    displayAd = 'display-ad',\n    dividerPage = 'divider-page',\n    drawing = 'drawing',\n    drawingWorksheet = 'drawing-worksheet',\n    ebookCover = 'ebook-cover',\n    emailHeader = 'email-header',\n    etsyShopBanner = 'etsy-shop-banner',\n    etsyShopCover = 'etsy-shop-cover',\n    eventbriteHeader = 'eventbrite-header',\n    facebookAd = 'facebook-ad',\n    facebookEventCover = 'facebook-event-cover',\n    facebookGroupCover = 'facebook-group-cover',\n    facebookPageCover = 'facebook-page-cover',\n    facebookPost = 'facebook-post',\n    facebookProfileCover = 'facebook-profile-cover',\n    facebookShopCover = 'facebook-shop-cover',\n    facebookStory = 'facebook-story',\n    flashCard = 'flash-card',\n    flashCardSheet = 'flash-card-sheet',\n    flyer = 'flyer',\n    giftCertificate = 'gift-certificate',\n    giftTag = 'gift-tag',\n    googleClassroomBanner = 'google-classroom-banner',\n    graph = 'graph',\n    graphicOrganizer = 'graphic-organizer',\n    idCard = 'id-card',\n    infographic = 'infographic',\n    instagramAd = 'instagram-ad',\n    instagramCarousel = 'instagram-carousel',\n    instagramLandscapePost = 'instagram-landscape-post',\n    instagramPortraitPost = 'instagram-portrait-post',\n    instagramReel = 'instagram-reel',\n    instagramSquarePost = 'instagram-square-post',\n    instagramStory = 'instagram-story',\n    instagramStoryAd = 'instagram-story-ad',\n    invitation = 'invitation',\n    invoice = 'invoice',\n    journal = 'journal',\n    label = 'label',\n    labelSheet = 'label-sheet',\n    leafletTrifold = 'leaflet-trifold',\n    lessonPlan = 'lesson-plan',\n    letter = 'letter',\n    letterhead = 'letterhead',\n    lineAdSmall = 'line-ad-small',\n    lineAdSquare = 'line-ad-square',\n    lineAdSquareVideo = 'line-ad-square-video',\n    lineAdVertical = 'line-ad-vertical',\n    lineRichMenuLarge = 'line-rich-menu-large',\n    lineRichMenuSmall = 'line-rich-menu-small',\n    lineRichMessage = 'line-rich-message',\n    linkedinBlogPost = 'linkedin-blog-post',\n    linkedinPost = 'linkedin-post',\n    linkedinProfileCover = 'linkedin-profile-cover',\n    logo = 'logo',\n    magazine = 'magazine',\n    mediaKit = 'media-kit',\n    meme = 'meme',\n    memo = 'memo',\n    menu = 'menu',\n    mindmap = 'mindmap',\n    mobileVideo = 'mobile-video',\n    mug = 'mug',\n    nameTag = 'name-tag',\n    newsletter = 'newsletter',\n    noteHeaderImage = 'note-header-image',\n    onlineNewsletter = 'online-newsletter',\n    onlineReport = 'online-report',\n    pamphlet = 'pamphlet',\n    photoBook = 'photo-book',\n    pinterestIdeaPin = 'pinterest-idea-pin',\n    pinterestPost = 'pinterest-post',\n    pinterestSquare = 'pinterest-square',\n    pinterestVertical = 'pinterest-vertical',\n    placeCard = 'place-card',\n    planner = 'planner',\n    playlistCover = 'playlist-cover',\n    podcastCover = 'podcast-cover',\n    postcard = 'postcard',\n    poster = 'poster',\n    presentation = 'presentation',\n    printAd = 'print-ad',\n    program = 'program',\n    proposal = 'proposal',\n    recipeCard = 'recipe-card',\n    redditCover = 'reddit-cover',\n    report = 'report',\n    reportCard = 'report-card',\n    resume = 'resume',\n    rubric = 'rubric',\n    snapchatAd = 'snapchat-ad',\n    snapchatFilter = 'snapchat-filter',\n    soundcloudBanner = 'soundcloud-banner',\n    tableOfContents = 'table-of-contents',\n    ticket = 'ticket',\n    tiktokAd = 'tiktok-ad',\n    tiktokVideo = 'tiktok-video',\n    tshirt = 'tshirt',\n    tumblrBanner = 'tumblr-banner',\n    twitchBanner = 'twitch-banner',\n    twitchOverlay = 'twitch-overlay',\n    twitterHeader = 'twitter-header',\n    twitterPost = 'twitter-post',\n    twitterVideo = 'twitter-video',\n    video = 'video',\n    wallpaperDesktop = 'wallpaper-desktop',\n    wallpaperMobile = 'wallpaper-mobile',\n    webpage = 'webpage',\n    worksheet = 'worksheet',\n    youtubeBanner = 'youtube-banner',\n    youtubeDisplayAds = 'youtube-display-ads',\n    youtubeProfilePhoto = 'youtube-profile-photo',\n    youtubeShorts = 'youtube-shorts',\n    youtubeThumbnail = 'youtube-thumbnail',\n    youtubeVideo = 'youtube-video',\n    youtubeVideoAd = 'youtube-video-ad',\n    zoomBackground = 'zoom-background'\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nexport interface IClassroomMember {\n    classroomId: string;\n    computedKey: string;\n    userId: string;\n    firstName: string;\n    lastName: string;\n    email: string;\n    displayName: string;\n    role: ClassroomMemberRole;\n    membershipStatus: ClassroomMemberStatus;\n    inviteSource: ClassroomMemberInviteSource;\n}\n\nexport interface IRemoteClassroomMembers {\n    members: IClassroomMember[];\n    classroomId: string;\n}\n\nexport enum ClassroomMemberRole {\n    STUDENT = 'student',\n    TEACHER = 'teacher',\n    NONE = 'none',\n}\n\nexport enum ClassroomMemberStatus {\n    ACTIVE = 'ACTIVE',\n    DECLINED = 'DECLINED',\n    INACTIVE = 'INACTIVE',\n    INVITED = 'INVITED',\n    IN_REVIEW = 'IN_REVIEW',\n    NOT_A_MEMBER = 'NOT_A_MEMBER',\n    OWNER = 'OWNER',\n}\n\nexport enum ClassroomMemberInviteSource {\n    CLASSLINK = 'CLASSLINK',\n    CLEVER = 'CLEVER',\n    EMAIL = 'EMAIL',\n    GOOGLE_CLASSROOM = 'GOOGLE_CLASSROOM',\n    NONE = 'NONE',\n}\n","import { ClassroomMemberRole } from '../interface/ClassroomMemberModel';\n\ntype ValidationType = 'string' | 'date' | 'string[]' | 'enum' | 'blob' | 'object';\n\nexport interface ValidationMap<T> {\n    key: keyof T;\n    type: ValidationType;\n    isRequired: boolean;\n    ref?: any;\n}\n\n/**\n * Validates that a given piece of data is of the correct type\n * @returns true if the data is of the correct type, false otherwise\n */\nexport function validateType(value: any, type: ValidationType, isRequired: boolean, ref?: any): boolean {\n    if (!isRequired && (value === undefined || value === null)) {\n        return true;\n    }\n\n    switch (type) {\n    case 'string':\n        return typeof value === 'string';\n    case 'date':\n        return typeof value === 'object' && (value as Date).toDateString !== undefined;\n    case 'string[]':\n        return Array.isArray(value) && value.every((item) => validateType(item, 'string', false));\n    case 'enum':\n        return Object.values(ref).some((enumValue) => enumValue === value);\n    case 'blob':\n        return value instanceof Blob;\n    case 'object':\n        return typeof value === 'object' && !Array.isArray(value) && value !== null;\n    }\n\n    // Not reachable through TS, but JS could hit this. Including for completeness.\n    return false;\n}\n\n/**\n * Validates multiple pieces of data against a validation map\n * @returns an array of error messages for each piece of data that failed validation\n */\nexport function validateTypes<T extends any>(validationMap: ValidationMap<T>[], data: T): string[] {\n    return validationMap.reduce((errors: string[], { key, type, ref, isRequired }) => {\n        if (!validateType(data[key], type, isRequired, ref)) {\n            const article = (type === 'enum' || type === 'object') ? 'an' : 'a';\n            let errMsg = `${key.toString()} is not ${article} ${type}`;\n            if (isRequired) {\n                errMsg += ' or is missing';\n            }\n            errors.push(errMsg);\n        }\n\n        return errors;\n    }, [] as string[]);\n}\n\nexport function getMemberComputedKey(classroomId: string, role: string) {\n    if (role === ClassroomMemberRole.NONE) {\n        return '';\n    }\n    return `${classroomId}-${role}`;\n}\n","/*************************************************************************\n   *\n   * ADOBE CONFIDENTIAL\n   * ___________________\n   *\n   *  Copyright 2024 Adobe Systems Incorporated\n   *  All Rights Reserved.\n   *\n   * NOTICE:  All information contained herein is, and remains\n   * the property of Adobe Systems Incorporated and its suppliers,\n   * if any.  The intellectual and technical concepts contained\n   * herein are proprietary to Adobe Systems Incorporated and its\n   * suppliers and are protected by trade secret or copyright law.\n   * Dissemination of this information or reproduction of this material\n   * is strictly forbidden unless prior written permission is obtained\n   * from Adobe Systems Incorporated.\n   **************************************************************************/\n\nimport {\n    IRemoteAssignment,\n    IAssignmentCreateData,\n    IAssignmentsLinks,\n    IAssignmentsOrderBy,\n    IAssignmentsResponse,\n    ASSIGNMENTS_INDEX_LINKS,\n    AssignmentStatus,\n    IAssignmentsIndexLinks,\n    IAssignmentsIndexResponse,\n    IAssignmentRemotePatchData,\n} from './AssignmentModel';\nimport {\n    getURLFromLinks,\n    RelType,\n    JSON_MIME_TYPE,\n    validateLinks\n} from './LinkUtils';\nimport InterfaceBase from './InterfaceBase';\nimport { IOrderDirection } from '../core/ItemOrder';\nimport { cache, key } from '../core/decorators';\nimport SAMError, { SAMErrorCode } from '../core/SAMError';\nimport { Tutorial } from './TutorialModel';\nimport { validateType, validateTypes, ValidationMap } from '../utils/classroomUtils';\n\ntype IPageOptions = {\n    start: number;\n    limit: number;\n};\n\ninterface IListingOptions<IOrderField> extends IPageOptions {\n    orderDirection: IOrderDirection;\n    orderBy: IOrderField;\n}\n\nexport interface AssignmentsListingOptions // will be used in getAssignments\n    extends IListingOptions<IAssignmentsOrderBy> {\n    // filters out the assignments based on the view. Gives all the results if not specified\n    view?: 'All';\n\n    classroomId?: string;\n}\n\nfunction getDefaultOptions<OptionTypes>(Defaults: OptionTypes, options?: Partial<OptionTypes>): OptionTypes {\n    return Object.assign({}, Defaults, options);\n}\n\nconst DefaultAssignmentsListingOptions: AssignmentsListingOptions = {\n    orderDirection: 'ascending',\n    orderBy: 'repo:name',\n    start: 0,\n    limit: 0\n};\n\nfunction createPageTemplate(options: IPageOptions) {\n    const templateValues: any = {};\n    if (options.start) {\n        templateValues.start = options.start;\n    }\n    if (options.limit) {\n        templateValues.limit = options.limit;\n    }\n    return templateValues;\n}\n\nfunction getDirectionValue<IOrderField>(userOptions: IListingOptions<IOrderField>) {\n    const directionFlag = userOptions.orderDirection === 'ascending' ? '+' : '-';\n    return directionFlag + userOptions.orderBy;\n}\n\nexport function getAssignmentsListingPath(links: IAssignmentsLinks, options?: Partial<AssignmentsListingOptions>): string {\n    const userOptions = getDefaultOptions(DefaultAssignmentsListingOptions, options);\n    const templateValues: any = createPageTemplate(userOptions);\n    templateValues.orderBy = getDirectionValue(userOptions);\n    const { view, classroomId } = userOptions;\n    if (view) {\n        templateValues.view = view;\n    }\n\n    if (classroomId) {\n        templateValues.classroomId = classroomId;\n    }\n    return getURLFromLinks(links, RelType.ASSIGNMENTS_COLLECTION, templateValues);\n}\n\nfunction validateRequiredAssignmentLinks(links: any) {\n    return validateLinks(links, ASSIGNMENTS_INDEX_LINKS);\n}\n\n/**\n * Validates that a Tutorial object has all of the required properties and they are the correct types\n * @returns An array of error messages if there are any validation errors\n */\nfunction validateTutorialData(data: Tutorial): string[] {\n    return validateTypes([\n        { key: 'surfaces', type: 'object', isRequired: true },\n        { key: 'aem_id', type: 'string', isRequired: true },\n        { key: 'metadata', type: 'object', isRequired: false },\n    ], data);\n}\n\n/**\n * Validates that the object which will create an Assignment has all of the required properties and they are the correct types\n * @returns An array of error messages if there are any validation errors\n */\nexport function validateAssignmentData(data: IAssignmentCreateData): string[] {\n    const errors: string[] = [];\n\n    // Handle basic type validation\n    const assignmentDataToValidate: ValidationMap<IAssignmentCreateData>[] = [\n        { key: 'classroomId', type: 'string', isRequired: true },\n        { key: 'createdBy', type: 'string', isRequired: false },\n        { key: 'dueDate', type: 'date', isRequired: false },\n        { key: 'externalTemplateIds', type: 'string[]', isRequired: false },\n        { key: 'instructions', type: 'string', isRequired: false },\n        { key: 'name', type: 'string', isRequired: true },\n        { key: 'status', type: 'enum', isRequired: false, ref: AssignmentStatus },\n        { key: 'tasks', type: 'string[]', isRequired: false },\n        { key: 'templateIds', type: 'string[]', isRequired: false },\n    ];\n\n    errors.push(...validateTypes(assignmentDataToValidate, data));\n\n    // Handle references since it can be multiple types\n    data.references?.forEach((reference, idx) => {\n        if (typeof reference === 'object') {\n            if (!validateType(reference.content, 'string', true) && !validateType(reference.content, 'blob', true)) {\n                errors.push(`references[${idx}].content is not a string, Blob, or is missing`);\n            }\n\n            if (!validateType(reference.name, 'string', true)) {\n                errors.push(`references[${idx}].name is not a string or is missing`);\n            }\n        } else if (typeof reference !== 'string') {\n            errors.push(`references[${idx}] is not an string or ExternalAsset`);\n        }\n    });\n\n    // Handle tutorials\n    if (data.externalTutorials) {\n        if (!Array.isArray(data.externalTutorials)) {\n            errors.push('externalTutorials is not an array');\n        } else {\n            data.externalTutorials.forEach((tutorial, idx) => {\n                validateTutorialData(tutorial).forEach((error) => {\n                    errors.push(`externalTutorials[${idx}]: ${error}`);\n                });\n            });\n        }\n    }\n\n    // Handle assignment material validation\n    const hasTasks = (data.tasks?.length ?? 0) > 0;\n    const hasTemplates = (data.templateIds?.length ?? 0) > 0;\n    const hasTutorials = (data.externalTutorials?.length ?? 0) > 0;\n    const hasExternalTemplates = (data.externalTemplateIds?.length ?? 0) > 0;\n    const isDraft = data.status === AssignmentStatus.DRAFT;\n    const hasStartingPoint = hasTasks || hasTemplates || hasTutorials || hasExternalTemplates;\n\n    if (!isDraft && !hasStartingPoint) {\n        errors.push('Assigned Assignment must have tasks, templates, externalTemplateIds, or tutorials');\n    }\n\n    return errors;\n}\n\nexport default class AssignmentsInterface extends InterfaceBase {\n    @cache(validateRequiredAssignmentLinks)\n    private async _discoverLinks(@key rootHref: string): Promise<IAssignmentsIndexLinks> {\n        const response: IAssignmentsIndexResponse = await this._getResponse(rootHref);\n        return response._links;\n    }\n\n    private _getEndpointHref(endpoint: string): string {\n        return `https://${this._core._environment.endpoints.ASSIGNMENTS_HOST}${endpoint}`;\n    }\n\n    async discoverLinks(): Promise<IAssignmentsIndexLinks> {\n        return this._discoverLinks(this._getEndpointHref(`/api/v1/index`));\n    }\n\n    /**\n     * @description Fetches the list of Assignments based on the options provided\n     * @param options : options to sort and filter the Assignments listing\n     * @returns resolves to list of Assignments along with the page information and links to the next page\n    */\n    async getAssignments(options: Partial<AssignmentsListingOptions>): Promise<IAssignmentsResponse> {\n        // options.classroomId is optional as the type is reused elsewhere, but really it's needed here to get assignments\n        if (!options.classroomId) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'classroomId is required to fetch assignments');\n        }\n\n        const links = await this.discoverLinks();\n        const url = getAssignmentsListingPath(links, options);\n        return this._getResponse(url);\n    }\n\n    /**\n     * @description Gets the metadata for a single assignment\n     * @param id asset id that uniquely identifies the assignment\n     * @returns resolves to assignment metadata for the given id\n    */\n    async getAssignment(id: string): Promise<IRemoteAssignment> {\n        const links = await this.discoverLinks();\n        const url = getURLFromLinks(links, RelType.ASSIGNMENTS_PRIMARY, { assignmentId: id });\n        return await this._getResponse(url);\n    }\n\n    /**\n     * @description Gets the metadata for a single assignment by code\n     * @param code code that identifies assignment\n     * @returns resolves to assignment metadata for the given code\n    */\n    async getAssignmentByCode(code: string): Promise<IRemoteAssignment> {\n        const links = await this.discoverLinks();\n        const url = `${getURLFromLinks(links, RelType.ASSIGNMENTS_PRIMARY)}code/${code}`;\n        return await this._getResponse(url);\n    }\n\n    /**\n     * Creates a new Assignment\n     * @param data needed to create a Assignment like name and instructions\n     * @returns the newly created Assignment\n    */\n    async createAssignment(data: IAssignmentCreateData): Promise<IRemoteAssignment> {\n        // [ACPCEDU-444]: When specified, status always takes precedence; if tasks present then assignment is ASSIGNED, otherwise it is DRAFT.\n        const hasTasks = (data.tasks?.length ?? 0) > 0;\n        const status = data.status || (hasTasks ? AssignmentStatus.ASSIGNED : AssignmentStatus.DRAFT);\n\n        const links = await this.discoverLinks();\n        const url = new URL(getURLFromLinks(links, RelType.ASSIGNMENTS_CREATE));\n        url.searchParams.append('classroomId', data.classroomId);\n        url.searchParams.append('assign', status === AssignmentStatus.ASSIGNED ? 'true' : 'false');\n\n        const extTemplateIds = data.externalTemplateIds || [];\n        const extTutorials = data.externalTutorials?.map(t => JSON.stringify(t)) || [];\n\n        const response = await this._doPost(url.toString(), { 'Content-Type': JSON_MIME_TYPE }, JSON.stringify({\n            'assignment:canClassroomReadSubmissions': data.canClassroomReadSubmissions,\n            'assignment:dueDate': data.dueDate?.toISOString(),\n            'assignment:instructions': data.instructions,\n            'repo:name': data.name,\n            'assignment:status': status,\n            'assignment:tasks': data.tasks || [],\n            'assignment:createdBy': data.createdBy,\n            'assignment:externalTemplateIds': [ ...extTemplateIds, ...extTutorials ],\n        }), [ 201 ]);\n        // TODO: https://jira.corp.adobe.com/browse/ACPCEDU-403 Add error handling\n        const jsonResponse = await response.json();\n\n        return jsonResponse;\n    }\n\n    /**\n     * Updates an assignment's data\n     * @param id The id of the Assignment to update\n     * @param data The data to update the Assignment with. Currently only the instructions, dueDate, tasks, and templateIds can be modified.\n     */\n    async patchAssignment(id: string, data: IAssignmentRemotePatchData): Promise<void> {\n        const links = await this.discoverLinks();\n\n        const ops = Object.entries(data)\n            .filter(([ key ]) => key.startsWith('assignment:')) // We can only update the assignment metadata, not the asset metadata\n            .map(([ key, value ]) => ({ op: 'replace', path: `/${key}`, value }));\n\n        if (ops.length === 0) {\n            return;\n        }\n\n        const url = getURLFromLinks(links, RelType.ASSIGNMENTS_PRIMARY, { assignmentId: id });\n        await this._doPatch(url, { 'Content-Type': JSON_MIME_TYPE }, JSON.stringify(ops), [ 200, 204 ]);\n    }\n\n    /**\n     * Discards an assignment -- from the DISCARDED state, an assignment can be permanently deleted or restored\n     * @param id The id of the Assignment to discard\n     */\n    async discardAssignment(id: string): Promise<void> {\n        const links = await this.discoverLinks();\n        const url = `${getURLFromLinks(links, RelType.ASSIGNMENTS_PRIMARY, {\n            assignmentId: id,\n        })}/:discard`;\n        await this._doPost(url, undefined, undefined, [ 204 ]);\n    }\n\n    /**\n     * Restores an assignment\n     * @param id The id of the Assignment to restore\n     */\n    async restoreAssignment(id: string): Promise<void> {\n        const links = await this.discoverLinks();\n        const url = `${getURLFromLinks(links, RelType.ASSIGNMENTS_PRIMARY, {\n            assignmentId: id,\n        })}/:restore`;\n        await this._doPost(url, undefined, undefined, [ 204 ]);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { AssignmentAdobeAssetMetadata } from './AssignmentModel';\nimport { IServiceLink, RelType } from './LinkUtils';\nimport { RepositoryMetadata } from './RepositoryModel';\n\nexport type Assignee = {\n    displayName: string;\n    email: string;\n    id: string;\n}\n\nexport interface IStudentAssignmentsActions {\n    [RelType.ASSIGNMENTS_START]?: IServiceLink;\n    [RelType.ASSIGNMENTS_RETURN]?: IServiceLink;\n    [RelType.ASSIGNMENTS_SUBMIT]?: IServiceLink;\n}\n\nexport type IStudentAssignmentLinks = IStudentAssignmentsActions\n\nexport enum StudentAssignmentStatus {\n    NOT_STARTED = 'NOT_STARTED',\n    IN_PROGRESS = 'IN_PROGRESS',\n    RETURNED = 'RETURNED',\n    SUBMITTED = 'SUBMITTED',\n}\n\nexport interface IRemoteStudentAssignment extends Pick<RepositoryMetadata, 'repo:assetId'> {\n    /** Owner of this assignment */\n    'assignment:assignee': Assignee;\n    /** The submitted work for the assignment */\n    'assignment:submission'?: AssignmentAdobeAssetMetadata;\n    /** Status */\n    'assignment:submissionStatus': StudentAssignmentStatus;\n    /** Date the assignment was submitted */\n    'assignment:submissionDate'?: string;\n    /** Student assignment links */\n    _links: IStudentAssignmentLinks;\n}\n\nexport interface IStudentAssignmentReturnData {\n    /** The current set of student assignment links. */\n    links: IStudentAssignmentLinks;\n    /** The student assignment ID that is being returned. */\n    studentAssignmentId: string;\n    /** The submission ID that is being returned for this assignment. */\n    submissionId: string;\n}\n\nexport interface IStudentAssignmentStartData {\n    /** The assignment ID that is being started. */\n    assignmentId: string;\n    /** The current set of student assignment links. */\n    links: IStudentAssignmentLinks;\n}\n\nexport interface IStudentAssignmentSubmitClassroomContextData {\n    /** The current set of student assignment links. */\n    links: IStudentAssignmentLinks;\n    /** The student assignment ID that is being submitted. This or studentAssignmentId is needed to submit an assignment. */\n    studentAssignmentId?: string;\n    /** The assignment ID. This or studentAssignmentId is needed to submit an assignment. */\n    assignmentId?: string;\n    /** The submission ID that is being submitted for this assignment. */\n    submissionId: string;\n}\n\nexport interface IStudentAssignmentSubmitData {\n    /** The current set of student assignment links. */\n    links: IStudentAssignmentLinks;\n    /** The student assignment ID that is being submitted. This or studentAssignmentId is needed to submit an assignment. */\n    studentAssignmentId: string;\n    /** The submission ID that is being submitted for this assignment. */\n    submissionId: string;\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { AssignmentAdobeAssetMetadata } from '../interface/AssignmentModel';\nimport { Assignee, IStudentAssignmentLinks, StudentAssignmentStatus } from '../interface/StudentAssignmentModel';\nimport { IStudentAssignmentFilesOptions } from '../interface/StudentAssignmentFileModel';\nimport ISAMCorePrivate from '../core/ISAMCorePrivate';\nimport { AssetClass } from '../interface/RepositoryModel';\nimport ItemBase from '../core/ItemBase';\nimport { CHANGE } from '../core/ChangeEvent';\nimport { observable } from '../core/decorators';\nimport StudentAssignmentFile from './StudentAssignmentFile';\nimport AdobeAsset from '../assets/AdobeAsset';\nimport AdobeAssetOrder from '../assets/AdobeAssetOrder';\nimport { waitForListLoad } from '../utils/waitForListLoad';\n\nexport type StudentAssignmentParams = {\n    readonly _core: ISAMCorePrivate;\n    assignmentId: string;\n    id: string;\n    links: IStudentAssignmentLinks;\n    status: StudentAssignmentStatus;\n    student: Assignee;\n    studentDirectoryId?: string;\n    submission?: AssignmentAdobeAssetMetadata;\n    submissionDate?: Date;\n}\n\nexport default class StudentAssignment extends ItemBase {\n    protected _assetClass: AssetClass = 'directory'; // this makes assignment a folder\n    private _assignmentId: string;\n    private _links: IStudentAssignmentLinks;\n    private _status: StudentAssignmentStatus;\n    private _student: Assignee;\n    private _studentDirectoryId?: string;\n    private _submission?: AssignmentAdobeAssetMetadata;\n    private _submissionDate?: Date;\n\n    constructor(params: StudentAssignmentParams) {\n        super(params._core, params.id);\n\n        this._assignmentId = params.assignmentId;\n        this._links = params.links;\n        this._status = params.status || StudentAssignmentStatus.NOT_STARTED;\n        this._student = params.student;\n        this._studentDirectoryId = params.studentDirectoryId;\n        this._submission = params.submission;\n        this._submissionDate = params.submissionDate;\n    }\n\n    @observable\n    get assignmentId(): string {\n        return this._assignmentId;\n    }\n\n    @observable\n    get status(): StudentAssignmentStatus {\n        return this._status;\n    }\n\n    @observable\n    get student(): Assignee {\n        return this._student;\n    }\n\n    @observable\n    get studentDirectoryId(): string | undefined {\n        return this._studentDirectoryId;\n    }\n\n    @observable\n    get submission(): AssignmentAdobeAssetMetadata | undefined {\n        return this._submission;\n    }\n\n    @observable\n    get submissionDate(): Date | undefined {\n        return this._submissionDate;\n    }\n\n    /**\n     * Returns the files in the student's assignment directory. Optional parameter to specify the order of the files.\n     */\n    async getFiles({ order }: IStudentAssignmentFilesOptions): Promise<StudentAssignmentFile[]> {\n        return this._core.classroomContext.getStudentAssignmentFiles({ studentDirectoryId: this.studentDirectoryId!, order });\n    }\n\n    canStart(): boolean {\n        return this._status === StudentAssignmentStatus.NOT_STARTED;\n    }\n\n    canReturn(): boolean {\n        return this._status === StudentAssignmentStatus.SUBMITTED;\n    }\n\n    /**\n     * Marks this student assignment as returned.\n     */\n    async return(): Promise<StudentAssignment> {\n        const remoteStudentAssignment = await this._core.classroomContext._returnAssignment({\n            links: this._links,\n            studentAssignmentId: this.studentDirectoryId!,\n            submissionId: this.submission?.['repo:assetId'] as string,\n        });\n\n        this._links = remoteStudentAssignment._links;\n        this._status = remoteStudentAssignment['assignment:submissionStatus'];\n        this.emit(CHANGE);\n        return this;\n    }\n\n    /**\n     * Marks this student assignment as started.\n     */\n    async start(): Promise<StudentAssignment> {\n        const remoteStudentAssignment = await this._core.classroomContext._startAssignment({\n            assignmentId: this.assignmentId,\n            links: this._links,\n        });\n\n        this._links = remoteStudentAssignment._links;\n        this._status = remoteStudentAssignment['assignment:submissionStatus'];\n        this._studentDirectoryId = remoteStudentAssignment['repo:assetId'];\n        this.emit(CHANGE);\n        return this;\n    }\n\n    /**\n     * Marks this student assignment as submitted.\n     * @param submissionId - The asset ID of the student's work to become the submission for this assignment.\n     */\n    async submit(submissionId: string): Promise<StudentAssignment> {\n        // If the assignment has not yet been started, start it first\n        if (this._status === StudentAssignmentStatus.NOT_STARTED) {\n            await this.start();\n        }\n\n        // If asset associated with submissionId is not already in the student's directory, move it there\n        const directory: AdobeAsset = await this._core.hostAssetContext.getAssetWithCloudID(this.studentDirectoryId!); // Know it is defined because we just started the assignment\n\n        let list;\n        if (directory.children) {\n            list = directory.children.getList(AdobeAssetOrder.default);\n            await waitForListLoad(list);\n        }\n\n        if (list && list.items.find(asset => asset.id === submissionId) === undefined) {\n            const submittedAsset: AdobeAsset = await this._core.hostAssetContext.getAssetWithCloudID(submissionId);\n            // Match date formatting when submitting an assignment\n            const formattedDate = this._core.classroomContext._getFormattedCreatedDateHelper({ includeFormattedDate: false, date: new Date() });\n            const assignment = await this._core.classroomContext.getAssignmentByID(this.assignmentId);\n            const updatedName = `${this.student.displayName} ${assignment.name} ${formattedDate}.${submittedAsset.extension}`;\n\n            // Naming collision will not be a problem, move will rename the file to a unique name if needed\n            await submittedAsset.move(directory, updatedName);\n        }\n\n        const remoteStudentAssignment = await this._core.classroomContext.submitAssignment({\n            links: this._links,\n            studentAssignmentId: this.studentDirectoryId!,\n            submissionId,\n        });\n\n        this._links = remoteStudentAssignment._links;\n        this._status = remoteStudentAssignment['assignment:submissionStatus'];\n        this._submission = {\n            'repo:assetId': submissionId,\n        };\n        this._submissionDate = remoteStudentAssignment['assignment:submissionDate']\n            ? new Date(remoteStudentAssignment['assignment:submissionDate'])\n            : undefined;\n        this.emit(CHANGE);\n        return this;\n    }\n}\n","import {\n    compareValues,\n    createItemOrderFactory,\n    IComparatorMap,\n} from '../core/ItemOrder';\nimport { StudentAssignmentStatus } from '../interface/StudentAssignmentModel';\nimport StudentAssignment from './StudentAssignment';\n\nexport type StudentAssignmentOrderField = 'studentDisplayName' | 'submissionDate' | 'status';\n\n// Prioritize assignments that require teacher attention: SUBMITTED, IN_PROGRESS, RETURNED, NOT_STARTED\nconst StatusOrderValues = {\n    [StudentAssignmentStatus.SUBMITTED]: 0,\n    [StudentAssignmentStatus.IN_PROGRESS]: 1,\n    [StudentAssignmentStatus.RETURNED]: 2,\n    [StudentAssignmentStatus.NOT_STARTED]: 3,\n};\n\nconst compareStudentDisplayName =  (a: StudentAssignment, b: StudentAssignment) => {\n    return compareValues(a.student.displayName || '', b.student.displayName || '');\n};\n\nconst OrderFieldToComparator: IComparatorMap<StudentAssignment, StudentAssignmentOrderField>\n  = {\n      studentDisplayName(a: StudentAssignment, b: StudentAssignment): number {\n          return compareStudentDisplayName(a, b);\n      },\n      submissionDate(a: StudentAssignment, b: StudentAssignment): number {\n          let value;\n          if (!a.submissionDate && !b.submissionDate) {\n              value  = 0;\n          } else if (!a.submissionDate) {\n              value = 1; // Undefined date should be sorted last in ascending order\n          } else if (!b.submissionDate) {\n              value = -1;\n          } else {\n              value = compareValues(a.submissionDate.getTime(), b.submissionDate.getTime());\n          }\n          if (value === 0) {\n              // If equal submission date (probably both are undefined), sort by student display name\n              return compareStudentDisplayName(a, b);\n          }\n          return value;\n      },\n      status(a: StudentAssignment, b: StudentAssignment): number {\n          const value = compareValues(StatusOrderValues[a.status], StatusOrderValues[b.status]);\n          if (value === 0) {\n              // Within the same status, sort by student display name\n              return compareStudentDisplayName(a, b);\n          }\n          return value;\n      }\n  };\n\nexport default class StudentAssignmentOrder extends createItemOrderFactory(\n    OrderFieldToComparator\n) {\n    static default = new StudentAssignmentOrder('ascending', 'studentDisplayName');\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport AdobeAsset, { AdobeAssetUpdaterMetadata } from '../assets/AdobeAsset';\nimport { observable, retry } from '../core/decorators';\nimport {\n    AssetClass,\n    AssetLinks,\n    AssetStateChoices,\n    RepositoryMetadata,\n} from '../interface/RepositoryModel';\nimport { ISAMCorePrivate, ISAMObject } from '../indexPrivate';\nimport { Permission } from '../interface/AssetModel';\nimport {\n    AssignmentAdobeAssetMetadata,\n    AssignmentStatus,\n    IAssignmentPatchData,\n    IRemoteAssignment,\n} from '../interface/AssignmentModel';\nimport ItemUpdater from '../core/ItemUpdater';\nimport PropertyUpdater from '../core/PropertyUpdater';\nimport AssignmentsInterface from '../interface/AssignmentsInterface';\nimport { IRemoteStudentAssignment, StudentAssignmentStatus } from '../interface/StudentAssignmentModel';\nimport StudentAssignment from './StudentAssignment';\nimport StudentAssignmentOrder from './StudentAssignmentOrder';\nimport oneTimeWarning from '../utils/oneTimeWarning';\nimport { Tutorial } from '../interface/TutorialModel';\n\nexport const AssignmentStatusChoices: AssignmentStatus[] = Object.values(AssignmentStatus);\n\nexport default class Assignment extends AdobeAsset {\n    protected _assetClass: AssetClass = 'directory'; // this makes assignment a folder\n    private _assignmentInterface = new AssignmentsInterface(this._core);\n    private _canClassroomReadSubmissions: boolean = false;\n    private _classroomId: string = '';\n    private _code: string = '';\n    private _dueDate?: Date; // due date is optional here otherwise the default value would be the current date\n    private _externalTemplateIds: string[] = [];\n    /**\n     * This is the raw data from remote, we need to parse it to get the actual external tutorials.\n     * Storing the raw data allows the property updater to know if the data has changed.\n     * Both externalTemplateIds and externalTutorials are derived from this data.\n     */\n    private _externalTemplateIdsRemote: string[] = [];\n    private _instructions: string = '';\n    private _isAutoCreated: boolean = false;\n    private _materialsFolder?: AssignmentAdobeAssetMetadata;\n    private _status!: AssignmentStatus;\n    private _studentAssignments: StudentAssignment[] = [];\n    private _tasks?: string[];\n    private _templateIds?: string[];\n    private _referenceIds?: string[];\n    private _externalTutorials: Partial<Tutorial>[] = [];\n    private _isExternalTutorialsDirty: boolean = false;\n\n    constructor(\n        readonly _core: ISAMCorePrivate,\n        id: string,\n        metadata?: {\n            links?: AssetLinks;\n        }\n    ) {\n        super(_core, id, metadata);\n\n        // Overridden property.\n        // True to start with. If we have the metadata, we will update this.\n        // Keep in mind that the assignment service does not include all Adobe\n        // Asset metadata in its responses, hence why this is needed.\n        this._needsRepoMetadata = true;\n    }\n\n    @observable\n    get canClassroomReadSubmissions(): boolean {\n        return this._canClassroomReadSubmissions;\n    }\n\n    @observable\n    get classroomId(): string {\n        return this._classroomId;\n    }\n\n    /** Gets all student assignments for this assignment */\n    @observable\n    get studentAssignments(): StudentAssignment[] {\n        return this._studentAssignments;\n    }\n\n    /** Gets all student assignments for this assignment by a given status */\n    getStudentAssignmentsByStatus(status: StudentAssignmentStatus[]): StudentAssignment[];\n    // eslint-disable-next-line no-dupe-class-members\n    getStudentAssignmentsByStatus(status: StudentAssignmentStatus): StudentAssignment[];\n    // eslint-disable-next-line no-dupe-class-members\n    getStudentAssignmentsByStatus(status: StudentAssignmentStatus | StudentAssignmentStatus[]): StudentAssignment[] {\n        if (Array.isArray(status)) {\n            return this._studentAssignments.filter((sa) => status.includes(sa.status));\n        }\n\n        return this._studentAssignments.filter((sa) => sa.status === status);\n    }\n\n    /** Gets all student assignments for this assignment that are not NOT_STARTED */\n    get existingStudentAssignments(): StudentAssignment[] {\n        const existsList = [\n            StudentAssignmentStatus.IN_PROGRESS,\n            StudentAssignmentStatus.SUBMITTED,\n            StudentAssignmentStatus.RETURNED\n        ];\n\n        return this.getStudentAssignmentsByStatus(existsList);\n    }\n\n    @observable\n    get code(): string {\n        return this._code;\n    }\n\n    @observable\n    get isAssignment(): boolean {\n        return true;\n    }\n\n    @observable\n    get instructions(): string {\n        return this._instructions;\n    }\n\n    @observable\n    get isAutoCreated(): boolean {\n        return this._isAutoCreated;\n    }\n\n    @observable\n    get dueDate(): Date | undefined {\n        return this._dueDate;\n    }\n\n    @observable\n    get status(): AssignmentStatus {\n        return this._status;\n    }\n\n    @observable\n    get tasks(): string[] {\n        return this._tasks ?? [];\n    }\n\n    @observable\n    get templateIds(): string[] {\n        return this._templateIds ?? [];\n    }\n\n    @observable\n    get externalTemplateIds(): string[] {\n        if (this._isExternalTutorialsDirty) {\n            this._externalTemplateIds = this._externalTemplateIdsRemote.filter((templateIdOrTutorial) => {\n                try {\n                    JSON.parse(templateIdOrTutorial);\n                    // If it is an object then it is not a template ID, filter it out\n                    return false;\n                } catch {\n                    return true;\n                }\n            });\n        }\n\n        return this._externalTemplateIds;\n    }\n\n    @observable\n    get externalTutorials(): Partial<Tutorial>[] {\n        if (this._isExternalTutorialsDirty) {\n            this._externalTutorials = this._externalTemplateIdsRemote.reduce((acc, templateIdOrTutorial) => {\n                try {\n                    acc.push(JSON.parse(templateIdOrTutorial));\n                } catch {\n                    // Not a tutorial, ignore\n                }\n\n                return acc;\n            }, [] as  Partial<Tutorial>[]);\n        }\n\n        return this._externalTutorials;\n    }\n\n    @observable\n    get referenceIds(): string[] {\n        return this._referenceIds ?? [];\n    }\n\n    /**\n     * @deprecated Please use @see {templateIds} instead -- will be removed on or after 2024-10-01\n     */\n    get templates(): AssignmentAdobeAssetMetadata[] {\n        oneTimeWarning('Assignment.templates', 'Assignment.templates is deprecated and will be removed'\n            + ' on or after 2024-10-01. Please use Assignment.templateIds instead.');\n        return [];\n    }\n\n    @observable\n    get materialsFolder(): AssignmentAdobeAssetMetadata | undefined {\n        return this._materialsFolder;\n    }\n\n    /**\n     * @package -- for use in SAM.js only\n     * Will override any cached assignment with the latest data from the assignment service and R-API\n     */\n    @retry\n    _loadWithRetry(): Promise<void> {\n        return this._load();\n    }\n\n    /**\n   * @param repoMetadata {RepositoryMetadata} If passed in, it will be used instead of loading from the service\n   * @param appMetadata {any} If passed in, it will be used instead of loading from the service\n   *\n   * @package -- only for use in SAM.js\n   */\n    async _load({\n        repoMetadata,\n        appMetadata,\n        effectivePermission,\n    }: {\n        repoMetadata?: RepositoryMetadata;\n        appMetadata?: any;\n        effectivePermission?: Permission;\n    } = {}): Promise<void> {\n        // Similar to what Project already has, first load the AdobeAsset so that once we get the assignment metadata we override any relevant\n        // properties with the assignment metadata\n        await super._load({ repoMetadata, appMetadata, effectivePermission });\n        this._needsRepoMetadata = false;\n\n        // A majority of the Assignment model has already been set at this point using an AdobeAsset\n        // However the AdobeAsset does not include the expected children array or materialsFolder so\n        // we need to call Hume to fetch this info to preserve existing behavior.\n        // Once all clients have moved onto lazy loading studentAssignments and the materialsFolder, this can be removed.\n        const isPartialAssignment = this.studentAssignments.length === 0 || !this.materialsFolder;\n        // The assignment model is constructed of a mix of repo and app metadata, if either are missing, refetch the assignment\n        const isStaleAssignment = !repoMetadata || !appMetadata;\n        if (isStaleAssignment || isPartialAssignment) {\n            // load the assignment metadata using the assignment service\n            const assignmentMetadata = await this._assignmentInterface.getAssignment(\n                this.id\n            );\n            const session = this._core.classroomContext.assignmentPool.createMutationSession<Assignment>();\n            AssignmentUpdater.updateRemoteItem(session, assignmentMetadata!);\n            session.commit();\n        }\n    }\n\n    /**\n     * Updates the metadata for an assignment. If template IDs are provided then they\n     * will be cloned to the assignment's working folder with new asset IDs\n     */\n    async updateAssignment(data: IAssignmentPatchData): Promise<void> {\n        return this._core.classroomContext.updateAssignment(this.id, data);\n    }\n\n    /**\n     * Clones the incoming assets to the assignment's working folder with new asset IDs\n     * @param templateAssetIds - An array of asset IDs which will be used to copy the asset from the teacher to the assignment\n     */\n    async setTemplates(templateAssetIds: string[]): Promise<void> {\n        return this._core.classroomContext.updateAssignment(this.id, { templateIds: templateAssetIds });\n    }\n\n    /**\n     * Assigns an in-draft assignment to all students in the classroom\n     * @deprecated Calls to this function should be replaced with updateAssignment(assignmentId, { status: AssignmentStatus.ASSIGNED })\n     */\n    async assignAssignment(): Promise<void> {\n        return this._core.classroomContext.updateAssignment(this.id, { status: AssignmentStatus.ASSIGNED });\n    }\n\n    /**\n     * Discards an assignment -- from discarded state, assignment can either be restored or permanently deleted.\n     */\n    async discard(): Promise<void> {\n        if (this.isDiscarded) {\n            return;\n        }\n\n        await this._assignmentInterface.discardAssignment(this.id);\n        const assignmentPool = this._core.classroomContext.assignmentPool;\n        const session = assignmentPool.createUpdateSession<Assignment>();\n        AssignmentUpdater.updateLocalItem(session, this, { 'repo:state': AssetStateChoices[1] });\n        session.commit();\n    }\n\n    /**\n     * Restores an assignment from the discarded state\n     */\n    async restore(): Promise<void> {\n        if (!this.isDiscarded) {\n            return;\n        }\n\n        await this._assignmentInterface.restoreAssignment(this.id);\n        const assignmentPool = this._core.classroomContext.assignmentPool;\n        const session = assignmentPool.createUpdateSession<Assignment>();\n        AssignmentUpdater.updateLocalItem(session, this, { 'repo:state': AssetStateChoices[0] });\n        session.commit();\n    }\n}\n\nexport const AssignmentUpdater = new ItemUpdater<\nAssignment,\nPartial<IRemoteAssignment | AdobeAssetUpdaterMetadata>\n>({\n    // perhaps we need the following props as well though at the moment we're not too sure about the format of the data\n    // _createdBy, _etag(repo:etag), _storageAssignee (storage:assignee),\n    // remoteIdProperty(repo:assetId), _repositoryID (repo:repositoryId), _name(repo:name), and _creator\n    localItemType: Assignment,\n    remoteIdProperty: 'repo:assetId',\n    propertyUpdater: new PropertyUpdater({\n        _canClassroomReadSubmissions: { name: 'assignment:canClassroomReadSubmissions', format: 'boolean' },\n        // things copied from AdobeAssetUpdater that should stay in sync (TODO: re-use AdobeAssetUpdater or its PropertyUpdater) are below\n        _name: { name: 'repo:name', format: 'string' },\n        _created: { name: 'repo:createDate', format: 'date' },\n        _repositoryID: { name: 'repo:repositoryId', format: 'string' },\n        // things TBD from Assignment service are below\n        _assignmentLinks: { name: '_links', format: 'object' },\n        _studentAssignments: {\n            isArray: true,\n            name: 'children',\n            format: 'object',\n            set: (studentAssignments: IRemoteStudentAssignment[], dest: ISAMObject) => {\n                const assignment = dest as Assignment;\n\n                // Clearing the collection in case this updater is called twice, to avoid duplicate student assignments.\n                assignment.studentAssignments.length = 0;\n\n                studentAssignments.forEach((studentAssignment) => {\n                    const sa = new StudentAssignment({\n                        _core: assignment._core,\n                        assignmentId: assignment.id,\n                        id: studentAssignment['repo:assetId'],\n                        links: studentAssignment._links,\n                        status: studentAssignment['assignment:submissionStatus'],\n                        student: studentAssignment['assignment:assignee'],\n                        studentDirectoryId: studentAssignment['repo:assetId'],\n                        submission: studentAssignment['assignment:submission'],\n                        submissionDate: studentAssignment['assignment:submissionDate']\n                            ? new Date(studentAssignment['assignment:submissionDate'])\n                            : undefined,\n                    });\n\n                    assignment.studentAssignments.push(sa);\n                });\n\n                const order = StudentAssignmentOrder.default;\n                order.sortItems(assignment.studentAssignments);\n            } },\n        _tasks: { isArray: true, name: 'assignment:tasks' },\n        _code: { name: 'assignment:code', format: 'string' },\n        _classroomId: { name: 'assignment:classroomId', format: 'string' },\n        _createdBy: { name: 'repo:createdBy', format: 'string' },\n        _status: { name: 'assignment:status', format: 'string', choices: AssignmentStatusChoices },\n        _dueDate: { name: 'assignment:dueDate', format: 'date' },\n        _instructions: { name: 'assignment:instructions', format: 'string' },\n        _materialsFolder: { name: 'assignment:materialsFolder', format: 'object' },\n        _templateIds: { name: 'assignment:templateIds', isArray: true },\n        _externalTemplateIdsRemote: {\n            name: 'assignment:externalTemplateIds',\n            isArray: true,\n            set: (externalTemplateIdsAndTutorials: string[], dest: ISAMObject) => {\n                const assignment = dest as Assignment;\n                assignment['_externalTemplateIdsRemote'] = externalTemplateIdsAndTutorials;\n                assignment['_isExternalTutorialsDirty'] = true;\n            }\n        },\n        _referenceIds: { name: 'assignment:referenceIds', isArray: true },\n        _path: { name: 'repo:path', format: 'string' },\n        _modifiedBy: { name: 'repo:modifiedBy', format: 'string' },\n        _assetState: { name: 'repo:state', choices: AssetStateChoices },\n        _isAutoCreated: { get: (source) => source['assignment:createdBy'] === 'adobe', format: 'boolean' },\n    }),\n});\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n\nimport { IAppMetadata, IEffectivePermissions, RepositoryMetadata } from '../interface/RepositoryModel';\nimport { USSItemMetadata } from '../interface/USSv3Model';\nimport { IProject, IProjectsAppMetadata, IProjectsEffectivePermissions } from '../interface/ProjectsModel';\nimport { IUpdateSession } from '../core/UpdateSession';\nimport AdobeAsset, { AdobeAssetUpdaterMetadata, USSAdobeAssetUpdater } from './AdobeAsset';\nimport Library from '../libraries/Library';\nimport { LibraryData } from '../interface/LibraryModel';\nimport { IRemoteAssignment } from '../interface/AssignmentModel';\nimport Project from '../projects/Project';\nimport { ISAMObject } from '../core/ISAMObject';\nimport { ISAMCorePrivate } from '../indexPrivate';\nimport { RelType } from '../interface/LinkUtils';\nimport { USSMetadata } from '../interface/USSModel';\nimport LibraryContext from '../libraries/LibraryContext';\nimport { parseEffectivePermissions, Permission } from '../interface/AssetModel';\nimport Assignment, { AssignmentUpdater } from '../assignments/Assignment';\n\n\nexport const libraryMediaTypeString = 'application/vnd.adobe.library+dcx';\n\nexport function repoMetadataIsLibrary(repoMetadata: Partial<RepositoryMetadata>): boolean {\n    return repoMetadata?.['dc:format'] === libraryMediaTypeString;\n}\n\nexport function appMetadataIsAssignment(app_metadata?: IAppMetadata) {\n    return !!app_metadata?.['cc:inheritable']?.['cc:assignment']?.['repo:assetId'];\n}\n\nexport function appMetadataIsProject(app_metadata?: IAppMetadata) {\n    return !!app_metadata?.['cc:inheritable']?.['cc:team']?.['repo:assetId'];\n}\n\nexport function ussV3ItemMetadataIsProject(item: USSItemMetadata): boolean {\n    return !!item.am?.['cc:inheritable']?.['cc:team']?.['repo:assetId'];\n}\n\nexport function ussV3ItemMetadataIsLibrary(item: USSItemMetadata): boolean {\n    return item.rm?.['dc:format'] === libraryMediaTypeString;\n}\n\nexport function ussMetadataIsLibrary(item: Partial<USSMetadata>): boolean {\n    return item.type === libraryMediaTypeString;\n}\n\n/* Utils to translate incoming data to the type expected by the subclass's PropertyUpdater: */\n// (This mapping is necessary at minimum to translate the id to the remoteIdProperty expected by the PropertyUpdater,\n// because we use the updaters to indirectly create an instance of the subclass in the call to\n// updater.updateRemoteItems({remoteIdProperty}), regardless of whether the updater supports the incoming data type.)\n\nexport function ussV3ToProjectMetadata(item: Partial<USSItemMetadata>): Partial<IProject> {\n    // TODO: Add more Project attributes here as they become available in USS.\n    // Minimal data needed for ProjectUpdater. When additional Project metadata\n    // is available from the USSv3 query result, add them here.\n    return { 'repo:assetId': item.id };\n}\nexport function ussToProjectData(item: Partial<USSMetadata>): Partial<IProject> {\n    return {\n        'repo:assetId': item.asset_id,\n        'repo:repositoryId': item['repo:repositoryId'],\n        _embedded: {\n            [RelType.AC_EFFECTIVE]: item._embedded?.[RelType.AC_EFFECTIVE] as IProjectsEffectivePermissions,\n            [RelType.APP_METADATA]: item.app_metadata as IProjectsAppMetadata\n        }\n    };\n}\n\nexport function ussToLibraryData(item: Partial<USSMetadata>): Partial<LibraryData> {\n    return { 'library_urn': item.asset_id };\n}\n\nfunction ussV3ToLibraryData(item: Partial<USSItemMetadata>): Partial<LibraryData> {\n    return { 'library_urn': item.id };\n}\n\nfunction repoToLibraryData(item: Partial<RepositoryMetadata>): Partial<LibraryData> {\n    return { 'library_urn': item['repo:assetId'] };\n}\n\nfunction repoToAssignmentData(item: Partial<RepositoryMetadata>, appMetadata: IAppMetadata): Partial<IRemoteAssignment> {\n    return {\n        ...item,\n        ...appMetadata,\n        // Assignment specific links and correctly structured children assets are not available from an AdobeAsset\n        _links: undefined,\n        children: [],\n    };\n}\n\nexport default class AdobeAssetFactory implements ISAMObject {\n    constructor(\n        readonly _core: ISAMCorePrivate\n    ) {}\n\n    // Creates assets from a list of USSItemMetadata returned from USSv3\n    // getItemData maps the repo metadata fields, as well as isShared, sharedViaInvite, and app metadata fields\n    // from USSv3 format to RAPI format\n    // NOTE: Caller is responsible for committing the session after this is called\n    assetsFromUSSV3AppMetadata(\n        session: IUpdateSession<AdobeAsset>,\n        appMetadata: USSItemMetadata[],\n        getItemData: (arg: USSItemMetadata) => Partial<AdobeAssetUpdaterMetadata>,\n        libraryContext?: LibraryContext\n    ): AdobeAsset[] {\n        if (libraryContext) {\n            libraryContext._libraryUpdater.updateRemoteItems(\n                session as IUpdateSession<Library>,\n                appMetadata.filter(ussV3ItemMetadataIsLibrary).map(ussV3ToLibraryData));\n        }\n\n        this._core.projectContext._projectUpdater.updateRemoteItems(\n            session as IUpdateSession<Project>,\n            appMetadata.filter(ussV3ItemMetadataIsProject).map(ussV3ToProjectMetadata));\n\n        return this._core.hostAssetContext._adobeAssetUpdater.updateRemoteItems(\n            session,\n            // allow Loader to provide additional item metadata (optional)\n            appMetadata.map((item: USSItemMetadata): Partial<AdobeAssetUpdaterMetadata> => {\n                return getItemData(item);\n            }));\n    }\n\n    // Create assets from a list of USSMetadata\n    // getItemData allows the caller to add additional metadata\n    // NOTE: Caller is responsible for committing the session after this is called\n    assetsFromUSSMetadata(session: IUpdateSession<AdobeAsset>, items: USSMetadata[], getItemData: (arg: USSMetadata) => Partial<AdobeAssetUpdaterMetadata>, libraryContext?: LibraryContext) {\n        // Ensure that Projects are added to the discarded list as a \"Project\" instance.\n        // ProjectUpdater creates a blank Project instance and relies on the USSAdobeAssetUpdater\n        // to fill in the blanks.\n        const projects = this._core.projectContext._projectUpdater.updateRemoteItems(\n            session as IUpdateSession<Project>,\n            items.filter(item => appMetadataIsProject(item.app_metadata)).map(ussToProjectData));\n\n        // USS won't have all the permissions required for the deleted view\n        // Loaders are responsible for populating the _canRestoreProject cache before it gets here.\n        for (const project of projects) {\n            project._applyRestorePermission(session as IUpdateSession<Project>);\n        }\n\n        // Ensure that Libraries are added to the discarded list as a \"Library\" instance\n        if  (libraryContext) {\n            libraryContext._libraryUpdater.updateRemoteItems(\n                session as IUpdateSession<Library>,\n                items.filter(ussMetadataIsLibrary).map(ussToLibraryData));\n        }\n        return USSAdobeAssetUpdater.updateRemoteItems(\n            session,\n            // allow Loader to provide additional item metadata (optional)\n            items.map(item => getItemData?.(item) || item)\n        );\n    }\n\n    // Create assets from a list of RepositoryMetadata returned from RAPI\n    // NOTE: Caller is responsible for committing the session after this is called\n    assetsFromRepoMetadata(session: IUpdateSession<AdobeAsset>, repoMetadatas: RepositoryMetadata[], libraryContext: LibraryContext): AdobeAsset[] {\n        return repoMetadatas.map(repoMetadata => {\n            let permissions: Permission = {} as Permission;\n            if (repoMetadata._embedded?.[RelType.AC_EFFECTIVE]) {\n                permissions = parseEffectivePermissions(repoMetadata._embedded?.[RelType.AC_EFFECTIVE] as IEffectivePermissions);\n            }\n            return this.assetFromRepoMetadata(\n                session,\n                repoMetadata,\n                permissions,\n                repoMetadata._embedded?.[RelType.APP_METADATA]!,\n                libraryContext\n            );\n        });\n    }\n\n    assetFromRepoMetadata(session: IUpdateSession<AdobeAsset>, repoMetadata: RepositoryMetadata, permissions: Permission, appMetadata: IAppMetadata, libraryContext?: LibraryContext, projectMetadata?: IProject) {\n        let asset: AdobeAsset;\n        if (appMetadata && Object.keys(appMetadata).length > 0) {\n            // We should have a better way to do this\n            repoMetadata._embedded = { ...repoMetadata._embedded, [RelType.APP_METADATA]: appMetadata };\n        }\n        const assetMetadata: Partial<AdobeAssetUpdaterMetadata> =  repoMetadata || {};\n        if (permissions && Object.keys(permissions).length > 0) {\n            assetMetadata.effectivePermission = permissions;\n        }\n\n        if (projectMetadata && Object.keys(projectMetadata).length > 0) {\n            asset = this._core.projectContext._projectUpdater.updateRemoteItem(session as IUpdateSession<Project>, projectMetadata);\n            // Since ProjectUpdater doesn't handle all repo metadata fields, use AdobeAssetUpdater\n            // For example we need the links coming in from the repoMetadata to be used in AdobeAsset\n            this._core.hostAssetContext._adobeAssetUpdater.updateLocalItem(session, asset, assetMetadata);\n            // Apply Project-specific metadata and overrides\n            // An example of this is the createdBy field which is different for Projects\n            this._core.projectContext._projectUpdater.updateLocalItem(session as IUpdateSession<Project>, asset as Project, projectMetadata);\n        } else if (repoMetadataIsLibrary(assetMetadata) && libraryContext) {\n            const libraryData = repoToLibraryData(assetMetadata);\n            libraryContext._libraryUpdater.updateRemoteItem(session as IUpdateSession<Library>, libraryData);\n            // Update repo metadata fields that are not handled by LibraryUpdater with the AdobeAssetUpdater\n            asset = this._core.hostAssetContext._adobeAssetUpdater.updateRemoteItem(session, assetMetadata);\n        } else if (appMetadataIsAssignment(appMetadata)) {\n            const assignmentData = repoToAssignmentData(assetMetadata, appMetadata);\n            asset = AssignmentUpdater.updateRemoteItem(session as IUpdateSession<Assignment>, assignmentData);\n            // Update repo metadata fields that are not handled by AssignmentUpdater with the AdobeAssetUpdater\n            this._core.hostAssetContext._adobeAssetUpdater.updateLocalItem(session, asset, assetMetadata);\n        } else {\n            asset = this._core.hostAssetContext._adobeAssetUpdater.updateRemoteItem(session, assetMetadata);\n        }\n        return asset;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport InterfaceBase from './InterfaceBase';\nimport {\n    ICommentDeleteCommentData,\n    ICommentGetCommentData,\n    ICommentEditCommentData,\n    CommentCore,\n    CommentData,\n    ICommentMetadata\n} from './CommentModel';\nimport { HeaderMap } from './LinkUtils';\nimport { ISAMCorePrivate } from '../indexPrivate';\n\nexport default class CommentInterface extends InterfaceBase {\n\n    constructor(\n        readonly _core: ISAMCorePrivate,\n        readonly _assetId: string\n    ) {\n        super(_core);\n    }\n\n    private _getUrl(endpoint: string): string {\n        // TODO: Should we be using a rel links ?\n        //  const url = getURLFromLinks(links, RelType.ASSIGNMENTS_START, { assignmentId });\n\n        return `https://${this._core._environment.endpoints.COMMENT_HOST}${endpoint}`;\n    }\n    private _getCommonHeaders(etag?: string): HeaderMap {\n        const headers: HeaderMap = {\n            'Content-Type': 'application/ld+json; profile=\"https://www.w3.org/ns/anno.jsonld\"',\n            'Accept': 'application/ld+json; profile=\"https://www.w3.org/ns/anno.jsonld\"',\n            'Prefer': 'return=representation;include=\"https://www.w3.org/ns/oa#PreferContainedDescriptions\"',\n            'x-ccx-workflow': 'true'\n        };\n\n        etag && (headers['If-Match'] = etag);\n\n        return headers;\n    }\n\n    /**\n     * @description Get a list of the comments associated with an asset\n     * from the Red Hawk Commenting Service.\n     * @param etag The etag from the previous request, if available\n     * @returns The server Response object\n     *\n     * A typical interface method would return a strongly typed\n     * response.json() ( in this case, an IAnnotationCollection ).\n     *\n     * But we expect the caller to poll this endpoint, so we also\n     * want to return response.headers.get('etag'), so it can be\n     * used as a parameter in the next use of this endpoint,\n     * which allows the server to provide a 206 response ( nothing changed ).\n     *\n     * So this returns the Response object, which lets the caller\n     * obtain both values.\n     */\n    async getCommentList(etag?: string): Promise<Response> {\n        const url = this._getUrl(`/assets/${this._assetId}/annots/?status=open%2Cresolved`);\n        const headers = this._getCommonHeaders();\n\n        etag && (headers['If-None-Match'] = etag);\n\n        return this._doGet(url,\n            {\n                headers,\n                successResponseCodes: [ 200, 208 ]\n            }\n        );\n    }\n\n    /**\n     * @description Get a comment from the Red Hawk Commenting Service.\n     * @param data The information necessary for calling the create API.\n     * @returns A promise that resolves to the server's response,\n     * a CommentCore corresponding to the comment requested for by id.\n     */\n    async getComment(data: ICommentGetCommentData): Promise<CommentCore> {\n        const { annotationId, etag } = data;\n\n        const url = this._getUrl(`/assets/${this._assetId}/annots/${annotationId}?recursive=true`);\n        return this._getResponse(url,\n            {\n                headers: this._getCommonHeaders(etag)\n            }\n        );\n    }\n\n    /**\n     * @description Creates a comment by POST-ing to the Red Hawk Commenting Service.\n     * @param data The information necessary for calling the create API.\n     * @returns A promise that resolves to the server's response.\n     * a CommentCore corresponding to the comment created.\n     */\n    async createComment(data: CommentData): Promise<CommentCore> {\n        // RE: https://git.corp.adobe.com/redhawk/native_client_sdk/blob/fddd524698ec5ad2cb4df23748c845a3c2129243/EurekaClientSDK/api/WebAnnotationsApi.cpp#L469\n        // NOTE : CPP supports ANONBEARER, but for a first draft, we'll\n        // only support BEARER, which we get for free from InterfaceBase\n        // NOTE : We don't need to include User-Agent either\n        // NOTE : Investigate whether we can get the URL from links\n\n        const url = this._getUrl(`/assets/${this._assetId}/annots`);\n        const response = await this._doPost(url,\n            this._getCommonHeaders(),\n            JSON.stringify(data)\n        );\n\n        return response.json();\n    }\n\n    /**\n     * @description Edit a comment from the Red Hawk Commenting Service.\n     * @param data The information necessary for calling the API.\n     * @returns A promise that resolves to the server's response,\n     * a CommentCore corresponding to the updated comment.\n     */\n    async editComment(data: ICommentEditCommentData): Promise<CommentCore> {\n        const { annotationId, etag, body } = data;\n\n        const url = this._getUrl(`/assets/${this._assetId}/annots/${annotationId}`);\n        const response = await this._doPut(url,\n            this._getCommonHeaders(etag),\n            JSON.stringify(body),\n            [ 200 ]\n        );\n\n        // response should be a new annotation.\n\n        return response.json();\n    }\n\n    /**\n     * @description Delete a comment from the Red Hawk Commenting Service.\n     * @param data The information necessary for calling the delete API.\n     * @returns A promise that resolves to void.\n     */\n    async deleteComment(data: ICommentDeleteCommentData): Promise<void> {\n        const { annotationId, etag } = data;\n\n        const url = this._getUrl(`/assets/${this._assetId}/annots/${annotationId}?recursive=true`);\n        await this._doDelete(url,\n            this._getCommonHeaders(etag),\n            [ 204 ]\n        );\n\n        return;\n    }\n\n    /**\n     * @description Get the collection of ICommentMetadata for an asset\n     * with the Red Hawk Commenting Service.\n     * @returns A promise that resolves to the server's response.\n     */\n    async getMetadata(): Promise<ICommentMetadata[]> {\n        const url = this._getUrl(`/assets/${this._assetId}?operation=fetch_user_comment_metadata`);\n        return this._getResponse(url,\n            {\n                headers: this._getCommonHeaders()\n            }\n        );\n    }\n\n    /**\n     * @description Set the metadata for a comment with the Red Hawk Commenting Service.\n     * @param data The information necessary for calling the API.\n     * @returns A promise that resolves to the server's response.\n     */\n    async updateMetadata(data: Partial<ICommentMetadata>): Promise<ICommentMetadata> {\n        const { annotId, read } = data;\n        const annotationId = annotId || '';\n\n        const url = this._getUrl(`/assets/${this._assetId}/annots/${annotationId}/metadata?recursive=false`);\n        const response = await this._doPut(url,\n            {\n                'Content-Type': 'application/vnd.adobe.dc+json;profile=\"https://comments.adobe.io/schemas/annots_metadata.jsonld\"',\n                'Accept': 'application/vnd.adobe.dc+json;profile=\"https://comments.adobe.io/schemas/annots_metadata.jsonld\"',\n                'x-ccx-workflow': 'true'\n            },\n            JSON.stringify({\n                annotId: `/assets/${this._assetId}/annots/${annotationId}`,\n                read: read || false\n            }),\n            [ 200 ]\n        );\n\n        return response.json();\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { observable } from '../core/decorators';\nimport ItemBase from '../core/ItemBase';\nimport PropertyUpdater from '../core/PropertyUpdater';\nimport ItemUpdater from '../core/ItemUpdater';\nimport {\n    CommentCore,\n    CommentCreator,\n    CommentMention,\n    CommentTarget,\n    MotivationType,\n    GeneratorType,\n    TypeAnnotation,\n    StatusType,\n    CommentData,\n    CommentMetadata\n} from '../interface/CommentModel';\nimport CommentsResource from './CommentsResource';\nimport CommentInterface from '../interface/CommentInterface';\nimport ItemPool from '../core/ItemPool';\n\n// RE: https://wiki.corp.adobe.com/display/ACPCSDK/Commenting+Service+Integration+Into+SAM\n\n// TODO : Commenting can be used by Guest Users\n// RE: https://git.corp.adobe.com/redhawk/native_client_sdk/blob/f0cd86aa3047c1392403b4444b5338189d7302e5/EurekaClientSDK/api/WebAnnotationsApi.cpp\n//  I haven't researched how it's done, but the native code supports\n//  AnonBearer tokens for guest users.\n\n\n/**\n * Class representing the notion of a comment ( aka annotation ).\n * @extends ItemBase\n *\n * @example\n * // Instantiate list and load contents\n * const classroomsList = core.classroomContext.getClassrooms().getList(...options);\n * await waitForListLoad(classroomsList);\n *\n * // Get a specific classroom\n * const load = useMemo(() => core.classroomContext.getClassroomById(id), [classroomContext, id]);\n * const { value: classroom, error, loading } = useLoading<Classroom | undefined>(undefined, load);\n */\n\nexport default class Comment extends ItemBase {\n    private _commentsResource?: CommentsResource;\n\n    // WARNING: the server response for a comment includes\n    //  \"id\": \"/assets/${assetUrn}/annots/${annotationId}\",\n    //  \"creationId\": \"${annotationId}\",\n    //\n    // so we map \"creationId\" to comment.id\n    // because ItemBase.id is expected to be the object's cloud-id,\n    // and \"id\" to comment.uri to avoid a naming conflict.\n\n    private _creator?: CommentCreator = undefined;\n    private _created: Date = new Date(0);\n    private _bodyValue?: string = undefined;\n    private _motivation?: MotivationType = undefined;\n    private _generator: GeneratorType = 'https://comments.acrobat.com/Comment';\n    private _type: TypeAnnotation = 'Annotation';\n    private _target?: CommentTarget = undefined;\n    private _mentions?: Array<CommentMention> = undefined;\n    private _modified: Date = new Date(0);\n    private _etag?: string = undefined;\n    private _uri?: string = undefined;\n    private _status?: StatusType = undefined;\n    private _replies?: Array<CommentCore> = undefined;\n    private _readStatus: boolean = false;\n\n    //-----------------------------------------------------------------\n    // Simple accessors\n\n    @observable\n    get creator(): any {\n        return this._creator;\n    }\n\n    @observable\n    get created(): Date {\n        return this._created;\n    }\n\n    @observable\n    get bodyValue(): string {\n        return this._bodyValue || '';\n    }\n\n    @observable\n    get motivation(): MotivationType {\n        // Possible values are ('commenting' | 'replying')\n        return this._motivation || 'commenting';\n    }\n\n    @observable\n    get generator(): GeneratorType {\n        // Possible value is 'https://comments.acrobat.com/Comment'\n        return this._generator || 'https://comments.acrobat.com/Comment';\n    }\n\n    @observable\n    get type(): TypeAnnotation {\n        // Possible value is 'Annotation'\n        return this._type || 'Annotation';\n    }\n\n    @observable\n    get target(): CommentTarget | undefined {\n        return this._target;\n    }\n\n    @observable\n    get mentions(): Array<CommentMention> | undefined {\n        return this._mentions;\n    }\n\n    @observable\n    get modified(): Date {\n        return this._modified;\n    }\n\n    @observable\n    get etag(): string {\n        return this._etag || '';\n    }\n\n    @observable\n    get uri(): string {\n        return this._uri || '';\n    }\n\n    @observable\n    get status(): StatusType {\n        // Possible values are ('open' | 'resolved')\n        return this._status || 'open';\n    }\n\n    @observable\n    get replies(): Array<CommentCore> | undefined {\n        // Possible values are ('open' | 'resolved')\n        return this._replies;\n    }\n\n    @observable\n    get readStatus(): boolean {\n        return this._readStatus;\n    }\n\n    toJSON() {\n\n        // When an object implements toJSON()\n        // JSON.stringify(object) serializes object.toJSON()\n        // instead of object, allowing you to control\n        // the keys and values written.\n        //\n        // This method is returning a Partial<CommentCore>\n        // which can be used in a POST or PUT to the server.\n\n        return {\n            '@context': [\n                'https://www.w3.org/ns/anno.jsonld',\n                'https://comments.acrobat.com/ns/anno.jsonld'\n            ],\n            'creator': this._creator,\n            'created': this.created.toISOString(),\n            'bodyValue': this.bodyValue,\n            'motivation': this.motivation,\n            'generator': this.generator,\n            'type': this.type,\n            'target': this.target,\n\n            /* TODO : 'mentions' : this.mentions */\n\n            'modified': this.modified.toISOString(),\n            'etag': this.etag,\n\n            // Map ItemBase.id back to 'creationId',\n            // and Comment.uri back to 'id'.\n\n            'id': this.uri,\n            'creationId': this.id,\n            'status': this.status,\n\n            /* TODO :  'replies': this.replies, */\n        };\n\n    }\n    // Simple accessors\n    //-----------------------------------------------------------------\n\n    get assetUrn(): string {\n        // Split \"/assets/${assetUrn}/annots/${annotationId}\"\n        // into ['', 'assets', assetUrn, 'annots', annotationId]\n        // so we can return assetUrn\n\n        const uri = this.uri;\n        const array = uri.split('/');\n\n        return (array.length > 2) ? array[2] : '';\n    }\n\n    private get _pool(): ItemPool<Comment> {\n        return this._commentsResource!._commentPool!;\n    }\n\n    private get _interface(): CommentInterface {\n        return this._commentsResource!._commentInterface!;\n    }\n\n    //-----------------------------------------------------------------\n    // Public methods\n\n    async edit(changes: Partial<CommentCore>): Promise<Comment> {\n        const commentInterface = this._interface;\n        const commentPool = this._pool;\n\n        // Get our current state as a CommentCore\n        const current: Partial<CommentCore> = this.toJSON();\n\n        // combine current with changes\n        const body: Partial<CommentCore> = { ...current, ...changes };\n\n        // update the server with the edited body\n        const response = await commentInterface.editComment({\n            annotationId: this.id,\n            etag: this.etag,\n            body\n        });\n\n        // update our local object with the server response, triggering notifications\n        const session = commentPool.createUpdateSession<Comment>();\n        CommentUpdater.updateLocalItem(session, this, response);\n        session.commit();\n\n        return this;\n    }\n\n    async updateResolvedStatus(isResolved: boolean): Promise<Comment> {\n        const status = isResolved ? 'resolved' : 'open';\n\n        return this.edit({ status });\n    }\n\n    async updateReadStatus(isRead: boolean): Promise<Comment> {\n        const commentInterface = this._interface;\n        const commentPool = this._pool;\n\n        const response = await commentInterface.updateMetadata({\n            annotId: this.id,\n            read: isRead\n        });\n\n        const session = commentPool.createUpdateSession<Comment>();\n        CommentUpdater.updateLocalItem(session, this, {\n            creationId: this.id,\n            readStatus: response.read\n\n        });\n        session.commit();\n\n        return this;\n    }\n\n    async delete(): Promise<void> {\n        const commentInterface = this._interface;\n        const commentPool = this._pool;\n        const id = this.id;\n\n        await commentInterface.deleteComment({\n            annotationId: id,\n            etag: this.etag\n        });\n\n        // after the server deletes the remote object,\n        // discard our local object which triggers notifications\n        const session = commentPool.createUpdateSession<Comment>();\n        session.queueDiscardedItem(this);\n        session.commit();\n\n        // the session doesn't actually remove the item from the pool\n        commentPool.removeLocalItems([ id ]);\n    }\n\n    /**\n     * @description Create a reply to this comment.\n     * @param data The information necessary for calling the API.\n     * @returns A promise that resolves to the newly created reply.\n     */\n    async reply(data: CommentData): Promise<Comment> {\n        const required: Partial<CommentCore> = {\n            motivation: 'replying',\n            target: {\n                source: this.uri\n            }\n        };\n\n        // overwrite data with the reply required fields\n        return this._commentsResource!.createComment({ ...data, ...required });\n    }\n}\n\nexport const CommentUpdater = new ItemUpdater<Comment, Partial<CommentCore | CommentMetadata>>({\n    localItemType: Comment,\n\n    // NOTE: We are using property 'creationId' in the response as the ItemBase.id\n\n    remoteIdProperty: 'creationId',\n    propertyUpdater: new PropertyUpdater({\n        // TODO : create nested updater for CommentCreator ?\n        _creator: { name: 'creator', format: 'object' },\n\n        // TODO : this is a Date.toISOString(); should this be Date ?\n        _created: { name: 'created', format: 'date' },\n\n        _bodyValue: { name: 'bodyValue', format: 'string' },\n\n        // should be ( 'commenting' | 'replying' ), but allow any string (future proof)\n        _motivation: { name: 'motivation', format: 'string' },\n\n        // should be 'https://comments.acrobat.com/Comment', but allow any string (future proof)\n        _generator: { name: 'generator', format: 'string' },\n\n        // should be 'Annotation', but allow any string (future proof)\n        _type: { name: 'type', format: 'string' },\n\n        // TODO : create nested updater for CommentTarget ?\n        _target: { name: 'target', format: 'object' },\n\n        // TODO : create nested updater for CommentMention[] ?\n        _mentions: { name: 'mentions', format: 'object' },\n\n        // TODO : this is a Date.toISOString(); should this be Date ?\n        _modified: { name: 'modified', format: 'date' },\n\n        _etag: { name: 'etag', format: 'string' },\n\n        // NOTE: 'creationId' is mapped to ItemBase.id,\n        // and 'id' is mapped to comment.uri.\n        _uri: { name: 'id', format: 'string' },\n\n        // should be ( 'open' | 'resolved' ), but allow any string (future proof)\n        _status: { name: 'status', format: 'string' },\n\n        // TODO : create nested updater for Comment[] ?\n        _replies: { name: 'replies', format: 'object' },\n\n        _readStatus: { name: 'readStatus', format: 'boolean' }\n    }),\n});\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { IItemLoader, IItemLoaderOptions, ILoadedPage } from '../core/ItemLoader';\nimport Comment, { CommentUpdater } from './Comment';\nimport { CommentConfig } from './CommentSource';\nimport CommentsResource from './CommentsResource';\nimport ItemPool from '../core/ItemPool';\nimport CommentInterface from '../interface/CommentInterface';\nimport { IAnnotationCollection } from '../interface/CommentModel';\n\nexport default class CommentLoader implements IItemLoader<CommentConfig> {\n    private _etag?: string;\n    private _retryAfter?: string;\n\n    constructor(private _commentsResource: CommentsResource) {}\n\n    async loadPage(options: IItemLoaderOptions<CommentConfig>): Promise<ILoadedPage<CommentConfig>> {\n        return await this._loadPage(options);\n    }\n\n    get retryAfter(): number {\n        // convert seconds:string into milliseconds:Number\n        return +(this._retryAfter || '12') * 1000;\n    }\n\n    private get _pool(): ItemPool<Comment> {\n        return this._commentsResource!._commentPool!;\n    }\n\n    private get _interface(): CommentInterface {\n        return this._commentsResource!._commentInterface!;\n    }\n\n    private async _loadPage(options: IItemLoaderOptions<CommentConfig>, start?: number): Promise<ILoadedPage<CommentConfig>> {\n        // Red Hawk doesn't paginate or sort, so parameters are ignored.\n        options; start;\n\n        // For the initial load(), this._etag is undefined.\n        // When polling(), it's the etag from the last call.\n\n        // NOTE: This makes the assumption the loader is only used for one list,\n        // which is true in the CommentsResource case.\n        const response = await this._interface.getCommentList(this._etag);\n\n        // use (get() || undefined) to convert null into undefined\n        this._retryAfter = response.headers.get('retry-after') || undefined;\n        this._etag = response.headers.get('etag') || undefined;\n        const status = response.status;\n\n        // For (status === 200), the body is a list of comments.\n        if (status === 200) {\n            const result = await response.json() as IAnnotationCollection;\n\n            const items = result.first.items;\n\n            const session = this._pool.createLoaderUpdateSession(Date.now());\n            const comments = CommentUpdater.updateRemoteItems(session, items);\n            session.commit();\n\n            comments.forEach((comment) => {\n                comment['_commentsResource'] = this._commentsResource;\n            });\n\n            return {\n                items: comments,\n                total: comments.length,\n                loadNextPage: undefined\n            };\n        }\n\n        // For (status === 208), the body is omitted because our local etag\n        // matches the remote etag ( aka nothing has changed ).\n        //\n        // We are required to return a list of comments, and we've already\n        // assumed CommentsResource has one list for one loader, so we'll\n        // return the existing list of comments.\n        const comments = this._commentsResource.getCommentList()?.items || [];\n\n        return {\n            items: comments,\n            total: comments.length,\n            loadNextPage: undefined\n        };\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { compareValues, createItemOrderFactory, IComparatorMap } from '../core/ItemOrder';\nimport Comment from './Comment';\n\nexport type CommentOrderField =\n    | 'created';\n\nconst OrderFieldToComparator: IComparatorMap<Comment, CommentOrderField> = {\n    created(a: Comment, b: Comment): number {\n        return compareValues(a.created.getTime(), b.created.getTime());\n    },\n};\n\nexport default class CommentOrder extends createItemOrderFactory(OrderFieldToComparator) {\n    static default = new CommentOrder('ascending', 'created');\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport type { ISAMCorePrivate, ISAMObject } from '../indexPrivate';\nimport ItemPool from '../core/ItemPool';\nimport CommentInterface from '../interface/CommentInterface';\nimport TypedEventEmitter, { IEventMap } from '../core/TypedEventEmitter';\nimport Comment, { CommentUpdater } from '../comments/Comment';\nimport {\n    CommentData,\n    ICommentGetCommentData,\n    ICommentMetadata\n} from '../interface/CommentModel';\nimport { CommentConfig, CommentSource } from '../comments/CommentSource';\nimport CommentLoader from '../comments/CommentLoader';\nimport ItemSource from '../core/ItemSource';\nimport { IItemList } from '../core/ItemList';\nimport CommentOrder from './CommentOrder';\nimport { waitForListLoad } from '../utils/waitForListLoad';\n\nexport interface CommentsResourceEvents extends IEventMap {\n    // TBD\n}\n\n\nexport default class CommentsResource extends TypedEventEmitter<CommentsResourceEvents> implements ISAMObject {\n\n    /**\n     * @package -- for SAM.js internal use only\n     */\n    readonly _commentInterface = new CommentInterface(this._core, this._assetId);\n\n    /**\n     * @package -- for SAM.js internal use only\n     */\n    readonly _commentPool: ItemPool<Comment> = new ItemPool<Comment>(this._core, 'comment');\n\n    private _loader =  new CommentLoader(this);\n\n    private _source: CommentSource =  new ItemSource(this._commentPool, [ this._loader ]);\n\n    private _list?: IItemList<CommentConfig>;\n\n    private _stopTimeout?: ReturnType<typeof setTimeout>;\n\n    constructor(readonly _core: ISAMCorePrivate, readonly _assetId: string) {\n        super();\n    }\n\n    /**\n     * @description Get a list of the comments associated with an asset\n     * from the Red Hawk Commenting Service.\n     * @param data The information necessary for calling the API.\n     * @returns A promise that resolves to the server's response,\n     * an Array of CommentCore's listing the asset's comments.\n     */\n    async createComment(data: CommentData): Promise<Comment> {\n\n        // Update the remote object with our proposed edit\n        const response = await this._commentInterface.createComment(data);\n\n        // The server has successfully updated the remote object,\n        // so update our local object to match the final state.\n        const session = this._commentPool.createUpdateSession<Comment>();\n        const comment = CommentUpdater.updateRemoteItem(session, response);\n        session.commit();\n\n        comment['_commentsResource'] = this;\n\n        return comment;\n    }\n\n    /**\n     * @experimental API is not ready and mock data is being used\n     *\n     * @param data creation data (e.g. title, instructions, etc)\n     *\n     * @returns a promise that resolves to the assignment recently and successfully created\n     */\n    async getComment(data: ICommentGetCommentData): Promise<Comment> {\n        let comment = this._commentPool.getLocalItemById(data.annotationId);\n\n        if (!comment) {\n            // fetch remote asset with a server call\n            const response = await this._commentInterface.getComment(data);\n            const session = this._commentPool.createUpdateSession<Comment>();\n            comment = CommentUpdater.updateRemoteItem(session, response);\n            session.commit();\n\n            // @ts-ignore : bit of a hack\n            comment._commentsResource = this;\n        }\n\n        return comment;\n    }\n\n    getCommentList(): IItemList<CommentConfig> {\n        if (!this._list) {\n            this._list = this._source.getList(CommentOrder.default, undefined, { refreshTimeout: -1 });\n        }\n        return this._list;\n    }\n\n    private async _poll() {\n        const list = this.getCommentList();\n\n        // let the loader re-load the list of comments\n        list.setNeedsRefresh();\n        list.refresh();\n        await waitForListLoad(list);\n\n        // TODO: should this be done when polling? Or every N polls? Typically, read status is always going to be updated\n        //     locally, so shouldn't need to sync with remote except on the first fetch. Maybe a PM question.\n\n        // unfortunately, we'll have to explicitly load the metadata ourselves\n        // to update the readStatus ( as it's per-user data ).\n        const array: ICommentMetadata[] = await this._commentInterface.getMetadata();\n        const readStatuses = new Map(array.map(item => [ item.annotId, item.read ]));\n\n        const session = this._commentPool.createLoaderUpdateSession(Date.now());\n        // Only update comments in the pool. If a comment is added/removed between fetching the comment list and\n        // the comment read statuses, there could be a mismatch. If so, it will eventually be consistent with the next\n        // poll.\n        this._commentPool.forEach((comment) => {\n            // The Red Hawk service doesn't save metadata until it's been\n            // explicitly set, so it's expected that a comment doesn't\n            // always have corresponding metadata, in which case it's in\n            // the default (readStatus === false) state.\n\n            // Frustratingly, metadata.creationId looks like\n            //  \"d4bd6758-6234-4e67-aa6e-fcb6712304d9:8CF81E8A5CD449B40A49403E@c62f24cc5b5b7e0e0a494004\"\n            // but comment.creationId looks like\n            //  \"d4bd6758-6234-4e67-aa6e-fcb6712304d9\"\n            // So match using the annotId ( which has been rename uri in the comment ).\n            const readStatus = readStatuses.get(comment.uri) || false;\n\n            if (comment.readStatus !== readStatus) {\n                CommentUpdater.updateRemoteItem(session, {\n                    creationId: comment.id,\n                    readStatus\n                });\n            }\n        });\n        session.commit();\n\n        this._stopTimeout = setTimeout(() => this._poll(), this._loader.retryAfter);\n    }\n\n    startShortPoll() {\n        if (!this._stopTimeout) {\n            this._poll();\n        }\n    }\n\n    stopShortPoll(): void {\n        if (this._stopTimeout) {\n            clearTimeout(this._stopTimeout);\n            this._stopTimeout = undefined;\n        }\n    }\n\n    get isShortPollActive(): boolean {\n        return (this._stopTimeout !== undefined);\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport path from 'path-browserify';\nimport { key, synchronized } from '../core/decorators';\nimport type { ISAMCorePrivate, ISAMObject } from '../indexPrivate';\nimport ItemPool, { ITEMS_CHANGED, ItemsChangedEvent } from '../core/ItemPool';\nimport USSInterface from '../interface/USSInterface';\nimport InvitationInterface from '../interface/InvitationInterface';\nimport RepositoryInterface from '../interface/RepositoryInterface';\nimport ONSInterface, { FIRST_LONG_POLL_COMPLETED, FIRST_LONG_POLL_STARTED } from '../interface/ONSInterface';\nimport { ONSChangedAssetInfo } from '../interface/ONSSubscription';\nimport {\n    CannotMoveReason,\n    IAssetRefRepoAssetId,\n    IBatchOperationResult,\n    ICopyOperation,\n    IDeleteOperation,\n    IMoveOperation,\n    IOperationQuery,\n    MoveCapability,\n    MoveWarning,\n    RepositoryMetadata\n} from '../interface/RepositoryModel';\nimport SAMError, { SAMErrorCode } from '../core/SAMError';\nimport ItemBase, { ItemBaseEvents, ItemId } from '../core/ItemBase';\nimport { IUpdateSession } from '../core/UpdateSession';\nimport SWYAdobeAssetLoader from './SWYAdobeAssetLoader';\nimport { SWYAdobeAssetSource } from './SWYAdobeAssetSource';\nimport SBMInterface from '../interface/SBMInterface';\nimport SWYInterface from '../interface/SWYInterface';\nimport AdobeAssetSearchInterface from '../interface/AdobeAssetSearchInterface';\nimport { RecentAdobeAssetSource } from './RecentAdobeAssetSource';\nimport { AdobeAssetGlobalSearchSource } from './AdobeAssetSource';\nimport AdobeAssetGlobalSearchInterface from '../interface/AdobeAssetGlobalSearchInterface';\nimport RecentInterface from '../interface/RecentInterface';\nimport AdobeAsset, { AdobeAssetUpdater } from './AdobeAsset';\nimport { AssetRenameMap, batchFormatFileName, getBatchRenamedAssetName, NameConflictMap, updateCachedDescendents } from './AssetUtils';\nimport AssetTransferInterface from '../interface/AssetTransferInterface';\nimport AssetReviewServiceInterface, {\n    IReviewServiceAssetIdentifer,\n    mapAssetsToAssetIndentifier\n} from '../interface/AssetReviewServiceInterface';\nimport Space from '../workspaces/Space';\nimport ItemSource from '../core/ItemSource';\nimport RecentAdobeAssetLoader from './RecentAdobeAssetLoader';\nimport memoize from '../core/decorators/memoize';\nimport RecentAdobeAssetFilter from './RecentAdobeAssetFilter';\nimport { retryFailedOpsDueToConflict } from './ConflictRetryHelper';\nimport { IXDCEDocument, Permission } from '../interface/AssetModel';\nimport { IItemSourceConfig } from '../core/ItemList';\nimport oneTimeWarning from '../utils/oneTimeWarning';\nimport TypedEventEmitter, { IEventMap } from '../core/TypedEventEmitter';\nimport { MRUAdobeAssetSource } from './MRUAdobeAssetSource';\nimport MRUAdobeAssetLoader from './MRUAdobeAssetLoader';\nimport MRUAdobeAssetFilter from './MRUAdobeAssetFilter';\nimport LibraryInterface from '../interface/LibraryInterface';\nimport PublishedInterface from '../interface/PublishedInterface';\nimport { PublishedAdobeAssetSource } from './PublishedAdobeAssetSource';\nimport PublishedAdobeAssetLoader from './PublishedAdobeAssetLoader';\nimport PublishedAdobeAssetFilter from './PublishedAdobeAssetFilter';\nimport { DiscardedAdobeAssetSource } from './DiscardedAdobeAssetSource';\nimport DiscardedAdobeAssetFilter from './DiscardedAdobeAssetFilter';\nimport DiscardedInterface from '../interface/DiscardedInterface';\nimport DiscardedAdobeAssetLoader from './DiscardedAdobeAssetLoader';\nimport AdobeAssetGlobalSearchFilter from './AdobeAssetGlobalSearchFilter';\nimport { RelType } from '../interface/LinkUtils';\nimport USSv3Interface from '../interface/USSv3Interface';\nimport GlobalSearchLoader from './GlobalSearchLoader';\nimport GlobalSearchInterface from '../interface/GlobalSearchInterface';\nimport AdobeAssetGlobalSearchLoader from './AdobeAssetGlobalSearchLoader';\nimport SWYAdobeAssetFilter from './SWYAdobeAssetFilter';\nimport AssetInterface from '../interface/AssetInterface';\nimport Project from '../projects/Project';\nimport ChangeEvent, { CHANGE } from '../core/ChangeEvent';\nimport ProjectsInterface from '../interface/ProjectsInterface';\nimport { appMetadataIsProject } from './AdobeAssetFactory';\nimport { IProject } from '../interface/ProjectsModel';\nimport WeakRef from '../core/WeakRef';\nimport CommentsResource from '../comments/CommentsResource';\nimport { LazyLoadManager } from '../core/decorators/LazyLoadManager';\nimport { COLLABORATOR_CHANGED } from '../indexPrivate';\n\n\nexport type IBatchOperationAssetResult = IBatchOperationResult<AdobeAsset>;\n\n// Must be kept in sync with CloudSyncStatus in CCAssetContext.h\nexport enum CloudSyncStatus {\n    Initializing,\n    Offline,\n    NotStarted,\n    Disabled,\n    Synchronized,\n    InProgress,\n    ErrorQuotaExceeded,\n    ErrorSyncDown,\n    ErrorOther\n}\n\n// Must be kept in sync with NetworkStatus in AssetContext.h\nexport enum NetworkStatus {\n    Offline,\n    Wan,\n    Cellular,\n    // on web, it might not be known if the connection is Wan or Cellular\n    OnlineUnknown\n}\n\nexport interface IQuotaInfo {\n    readonly used: number;\n    readonly total: number;\n}\n\nexport const ONS_FIRST_LONG_POLL_STARTED = FIRST_LONG_POLL_STARTED;\nexport const ONS_FIRST_LONG_POLL_COMPLETED = FIRST_LONG_POLL_COMPLETED;\nexport class ONSFirstLongPollStartedEvent extends Event {\n    constructor(readonly cachedSubscriptionsUsed: boolean) {\n        super(ONS_FIRST_LONG_POLL_STARTED);\n    }\n}\n\nexport class ONSFirstLongPollCompletedEvent extends Event {\n    constructor(readonly expired: boolean) {\n        super(ONS_FIRST_LONG_POLL_COMPLETED);\n    }\n}\n\nexport interface IAssetContextEvents extends IEventMap {\n    [CHANGE]: ChangeEvent;\n    [ONS_FIRST_LONG_POLL_STARTED]: ONSFirstLongPollStartedEvent;\n    [ONS_FIRST_LONG_POLL_COMPLETED]: ONSFirstLongPollCompletedEvent;\n}\n\nexport default class AssetContext extends TypedEventEmitter<ItemBaseEvents> implements ISAMObject {\n\n    private _rootFolder?: AdobeAsset;\n    private _homeFolder?: AdobeAsset;\n    /**\n     * @package -- for use in SAM.js only\n     */\n    readonly _rapi: RepositoryInterface = new RepositoryInterface(this._core);\n    private _ons: ONSInterface = new ONSInterface(this._core);\n    /**\n     * @package -- for use in SAM.js only\n     */\n    readonly _invitationInterface: InvitationInterface = new InvitationInterface(this._core);\n    /**\n     * @package -- for use in SAM.js only\n     */\n    readonly _ussInterface: USSInterface = new USSInterface(this._core);\n    private _SBMInterface = new SBMInterface(this._core);\n    /**\n     * @package -- for use in SAM.js only\n     */\n    readonly _swyInterface = new SWYInterface(this._core);\n    /**\n     * @package -- for use in SAM.js only\n     */\n    readonly _recentInterface = new RecentInterface(this._core);\n    /**\n     * @package -- for use in SAM.js only\n     */\n    readonly _adobeAssetSearchInterface = new AdobeAssetSearchInterface(this._core);\n    /**\n     * @package -- for use in SAM.js only\n     */\n    readonly _adobeAssetGlobalSearchInterface = new AdobeAssetGlobalSearchInterface(this._core)\n    private _assetTransferService: AssetTransferInterface = new AssetTransferInterface(this._core);\n    private _assetReviewServiceInterface: AssetReviewServiceInterface = new AssetReviewServiceInterface(this._core);\n    /**\n     * @package -- for use in SAM.js only\n     */\n    readonly _publishedInterface: PublishedInterface = new PublishedInterface(this._core);\n    private readonly _discardedInterface: DiscardedInterface = new DiscardedInterface(this._core);\n    /**\n     * @package -- for use in SAM.js only\n     */\n    readonly __ussInterfaceV3: USSv3Interface = new USSv3Interface(this._core);\n\n    /**\n     * @package -- only for use in SAM.js\n     */\n    readonly _globalSearchInterfaceV3: GlobalSearchInterface = new GlobalSearchInterface(this._core, this.__ussInterfaceV3);\n\n    /**\n     * @package -- only for use in SAM.js\n     */\n    readonly _libraryInterface: LibraryInterface =  new LibraryInterface(this._core);\n\n    private _commentsById = new Map<string, WeakRef<CommentsResource>>();\n\n    constructor(\n        readonly _core: ISAMCorePrivate,\n        /**\n         * @package -- only for use in SAM.js\n         */\n        readonly _assetPool: ItemPool<AdobeAsset>\n    ) {\n        super();\n\n        // We want to know all the asset ids that we care about, so we can register for change\n        // notifications with ONS. This consists of all loaded assets in the asset pool.\n        this._assetPool.on(ITEMS_CHANGED, this._onAssetsChanged);\n\n        // When an ONS notification comes in, we go through and refresh any assets that changed\n        this._ons.on('change', this._onONSNotification);\n        this._ons.on(FIRST_LONG_POLL_STARTED, data => {\n            this.dispatch(new ONSFirstLongPollStartedEvent(data.cachedSubscriptionsUsed));\n        });\n        this._ons.on(FIRST_LONG_POLL_COMPLETED, data => {\n            this.dispatch(new ONSFirstLongPollCompletedEvent(data.expired));\n        });\n    }\n\n    /**\n     * @package -- only for use in SAM.js\n     * Updaters shouldn't be accessed directly.\n     */\n    readonly _adobeAssetUpdater = AdobeAssetUpdater;\n\n    /**\n     * @package -- for use in SAM.js only\n     * @deprecated -- will be removed on or after 2024-10-01.\n     */\n    get repoInterface(): RepositoryInterface {\n        oneTimeWarning('AssetContext.repoInterface', 'AssetContext.repoInterface is deprecated and will be removed'\n            + ' on or after 2024-10-01. It is for internal SAM.js use only.');\n        return this._rapi;\n    }\n\n    /**\n     * @package -- for use in SAM.js only\n     * @deprecated -- will be removed on or after 2024-10-01.\n     */\n    get onsInterface(): ONSInterface {\n        oneTimeWarning('AssetContext.onsInterface', 'AssetContext.onsInterface is deprecated and will be removed'\n            + ' on or after 2024-10-01. It is for internal SAM.js use only.');\n        return this._ons;\n    }\n\n    /**\n     * @package -- for use in SAM.js only\n     * @deprecated -- will be removed on or after 2024-10-01.\n     */\n    get ussInterface(): USSInterface {\n        oneTimeWarning('AssetContext.ussInterface', 'AssetContext.ussInterface is deprecated and will be removed'\n            + ' on or after 2024-10-01. It is for internal SAM.js use only.');\n        return this._ussInterface;\n    }\n\n    /**\n     * @package -- for use in SAM.js only\n     * @deprecated -- will be removed on or after 2024-10-01.\n     */\n    get ussInterfaceV3(): USSv3Interface {\n        oneTimeWarning('AssetContext.ussInterfaceV3', 'AssetContext.ussInterfaceV3 is deprecated and will be removed'\n            + ' on or after 2024-10-01. It is for internal SAM.js use only.');\n        return this.__ussInterfaceV3;\n    }\n\n    /**\n     * @deprecated -- will be removed on or after 2024-10-01 with no replacement.\n     */\n    get sbmInterface(): SBMInterface {\n        oneTimeWarning('AssetContext.sbmInterface', 'AssetContext.sbmInterface is deprecated and will be removed'\n            + ' on or after 2024-10-01.');\n        return this._SBMInterface;\n    }\n\n    /**\n     * @package -- for use in SAM.js only\n     * @deprecated -- will be removed on or after 2024-10-01.\n     */\n    get swyInterface(): SWYInterface {\n        oneTimeWarning('AssetContext.swyInterface', 'AssetContext.swyInterface is deprecated and will be removed'\n            + ' on or after 2024-10-01. It is for internal SAM.js use only.');\n        return this._swyInterface;\n    }\n\n    /**\n     * @package -- for use in SAM.js only\n     * @deprecated -- will be removed on or after 2024-10-01.\n     */\n    get recentInterface(): RecentInterface {\n        oneTimeWarning('AssetContext.recentInterface', 'AssetContext.recentInterface is deprecated and will be removed'\n            + ' on or after 2024-10-01. It is for internal SAM.js use only.');\n        return this._recentInterface;\n    }\n\n    /**\n     * @package -- for use in SAM.js only\n     * @deprecated -- will be removed on or after 2024-10-01.\n     */\n    get invitationInterface(): InvitationInterface {\n        oneTimeWarning('AssetContext.invitationInterface', 'AssetContext.invitationInterface is deprecated and will be removed'\n            + ' on or after 2024-10-01. It is for internal SAM.js use only.');\n        return this._invitationInterface;\n    }\n\n    /**\n     * @package -- for use in SAM.js only\n     * @deprecated -- will be removed on or after 2024-10-01.\n     */\n    get publishedInterface(): PublishedInterface {\n        oneTimeWarning('AssetContext.publishedInterface', 'AssetContext.publishedInterface is deprecated and will be removed'\n            + ' on or after 2024-10-01. It is for internal SAM.js use only.');\n        return this._publishedInterface;\n    }\n\n    /**\n     * @package -- for internal use only\n     * @deprecated -- will be removed on or after 2024-10-01.\n     */\n    get assetPool(): ItemPool<AdobeAsset> {\n        oneTimeWarning('AsseContext._assetPool', 'AssetContext._assetPool is deprecated and will be removed on or after'\n            + ' 2024-10-01. ItemPools are for internal SAM.js use only.');\n        return this._assetPool;\n    }\n\n    @memoize\n    get sharedSource(): SWYAdobeAssetSource {\n        const implicitFilter = new SWYAdobeAssetFilter();\n        const swyloader = new SWYAdobeAssetLoader(this._assetPool, this._core, this._swyInterface);\n        return new ItemSource(this._assetPool, [ swyloader ], implicitFilter);\n    }\n\n    @memoize\n    get recentAssetsSource(): RecentAdobeAssetSource {\n        const implicitFilter = new RecentAdobeAssetFilter();\n        const recentAssetsLoader = new RecentAdobeAssetLoader(this._assetPool, this._core, this._recentInterface, implicitFilter);\n        implicitFilter._lastModificationDate = new Date(9999, 0, 1);\n        return new ItemSource(this._assetPool, [ recentAssetsLoader ], implicitFilter);\n    }\n\n    @memoize\n    get MRUAssetsSource(): MRUAdobeAssetSource {\n        const implicitFilter = new MRUAdobeAssetFilter();\n        const MRUAssetsLoader = new MRUAdobeAssetLoader(this._assetPool, this._core, this._recentInterface);\n        return new ItemSource(this._assetPool, [ MRUAssetsLoader ], implicitFilter);\n    }\n\n    @memoize\n    get publishedSource(): PublishedAdobeAssetSource | undefined {\n        const implicitFilter = new PublishedAdobeAssetFilter();\n        const publishedLoader = new PublishedAdobeAssetLoader(this._assetPool, this._core, this._publishedInterface);\n        return new ItemSource(this._assetPool, [ publishedLoader ], implicitFilter);\n    }\n\n    @memoize\n    get discardedSource(): DiscardedAdobeAssetSource {\n        const implicitFilter = new DiscardedAdobeAssetFilter();\n        const loader = new DiscardedAdobeAssetLoader(this._assetPool, this._core, this._discardedInterface);\n        return new ItemSource(this._assetPool, [ loader ], implicitFilter);\n    }\n\n    getGlobalSearchAssetsSource(query: string): AdobeAssetGlobalSearchSource {\n        const implicitFilter = new AdobeAssetGlobalSearchFilter({\n            _query: query,\n            _matchingIDsFromSearch: new Set<string>()\n        });\n        const globalSearchLoader = new AdobeAssetGlobalSearchLoader(\n            this._assetPool,\n            implicitFilter,\n            this._core,\n            this._adobeAssetGlobalSearchInterface\n        );\n        return new ItemSource(this._assetPool, [ globalSearchLoader ], implicitFilter);\n    }\n\n    /**\n     * Experimental -- this is for early integration by Project X and will be removed\n     * in the future.  When the real API is ready, this method will be marked deprecated\n     * at that time.\n     */\n    getGlobalSearchAssetsSourceV3(query: string): AdobeAssetGlobalSearchSource {\n        const implicitFilter = new AdobeAssetGlobalSearchFilter({\n            _query: query,\n            _matchingIDsFromSearch: new Set<string>()\n        });\n        const globalSearchLoader = new GlobalSearchLoader(\n            this._assetPool,\n            this._core,\n            this._globalSearchInterfaceV3,\n            implicitFilter\n        );\n        return new ItemSource(this._assetPool, [ globalSearchLoader ], implicitFilter);\n    }\n\n    /**\n     * Clients should use isOnline() to determine online/offline status so that SAM is responsible for encapsulating\n     * which values of NetworkStatus mean \"online\" vs \"offline\".\n     */\n    get isOnline(): boolean {\n        oneTimeWarning('AssetContext.isOnline', 'AssetContext.isOnline() is not fully implemented for web');\n        return this.networkStatus !== NetworkStatus.Offline;\n    }\n\n    /**\n     * Use for fine-grain network status (WAN vs Cellular). For offline/online, use isOnline() above.\n     */\n    get networkStatus(): NetworkStatus {\n        oneTimeWarning('AssetContext.networkStatus', 'AssetContext.networkStatus is not fully implemented for web');\n        return NetworkStatus.OnlineUnknown;\n    }\n\n    /**\n     * Gets an Asset from cache, or loads it from the cloud. If ONS is disabled, it will also refresh\n     * cached Assets as well.\n     *\n     * Uses @synchronized to ensure only one request for a particular Asset can be serviced at a time,\n     * which prevents race conditions due to multiple load requests for the same Asset stepping on\n     * one another.\n     *\n     * @param assetId {string}\n     * @param resolveMetadata {RepositoryMetadata} -- For getAssetWith* calls that have already resolved the\n     *        Asset repo metadata to get the assetId, so additional resolve requests are unnecessary.\n     * @returns Promise<AdobeAsset>\n     * @private\n     */\n    @synchronized\n    private async _getAssetById(@key assetId: string, resolveMetadata?: RepositoryMetadata): Promise<AdobeAsset> {\n        const asset = this._assetPool.getLocalItemById(assetId);\n        if (asset) {\n            // Force refresh if ONS is disabled, because the data may be stale\n            const forceRefresh = this._core._environment.getValue('DISABLE_ONS') || asset.needsRepoMetadata;\n            if (forceRefresh) {\n                // If the reload fails, we still return the asset but schedule a retry - that's equivalent to using the\n                // cached data for the asset (e.g. if go offline), and having the asset update later.\n                // @TODO Another potential optimisation here is to not load the project metadata again if we come to this\n                // code path because the project lacks repo metadata and ONS is enabled.\n                await asset._loadWithRetry();\n            } else if (!asset._linksCameFromResolveAPI) {\n                // No resolve metadata was passed in, or the links metadata came from listings,\n                // which might be stale (esp. from USS). Assume that the metadata is likely up-to-date,\n                // but refresh in the background in case it isn't.\n                this._rapi.getAssetLinks(assetId).then((links) => {\n                    const session = this._assetPool.createUpdateSession();\n                    this._core.hostAssetContext._adobeAssetUpdater.updateLocalItem(session, asset!, {\n                        _links: links\n                    });\n                    asset!._linksCameFromResolveAPI = true;\n                    session.commit();\n                });\n            }\n            return asset;\n        }\n\n        // AssetInterface (and links) aren't cached - need to fetch\n        if (!resolveMetadata) {\n            resolveMetadata = await this._rapi.getRepoMetadataById(assetId);\n        }\n\n        const libraryContext = await this._core.getLibraryContext();\n        const projectInterface = new ProjectsInterface(this._core);\n\n        // Check if this is a Project and populate some params for assetFromRepoMetadata.\n        let projectMetadata: IProject = {} as IProject;\n        const assetInterface = new AssetInterface(this._rapi, assetId, resolveMetadata._links, resolveMetadata['repo:etag']);\n        const permission = await assetInterface.getEffectivePermissions();\n        const appMetadata = ((permission & Permission.ReadAppMetadata) === Permission.ReadAppMetadata) ? await assetInterface.getAppMetadata() : {};\n        const isProject = appMetadataIsProject(appMetadata);\n\n        if (isProject) {\n            projectMetadata = await projectInterface.getProject(resolveMetadata['repo:assetId']);\n        }\n        const session = this._assetPool.createMutationSession();\n        const newAsset = this._core._adobeAssetFactory.assetFromRepoMetadata(\n            session,\n            resolveMetadata,\n            permission,\n            appMetadata,\n            libraryContext,\n            isProject ? projectMetadata : undefined);\n        session.commit();\n\n        if (isProject) {\n            await (newAsset as Project)._load({ repoMetadata: resolveMetadata, appMetadata, effectivePermission: permission, projectMetadata });\n        } else {\n            await newAsset._load({ repoMetadata: resolveMetadata, appMetadata, effectivePermission: permission });\n        }\n\n        newAsset!._linksCameFromResolveAPI = true;\n        return newAsset;\n    }\n\n    /**\n     * Returns the \"/\" folder for USM users and the \"/users/<user-id>\" folder for ESM user. For access to the\n     * \"/cloud-content\" folder for the current user, use `getRootFolder()`\n     */\n    @synchronized\n    async getHomeFolder(): Promise<AdobeAsset> {\n        if (!this._homeFolder) {\n            const homeDirectoryMetadata = await this._rapi.getHomeDirectoryMetadata();\n            const session = this._assetPool.createMutationSession();\n            this._homeFolder = this._core.hostAssetContext._adobeAssetUpdater.updateRemoteItem(session, homeDirectoryMetadata);\n            session.commit();\n            this._homeFolder.on(CHANGE, this._onHomeFolderChange);\n        }\n        return this._homeFolder;\n    }\n\n    private _onHomeFolderChange = (): void => {\n        // Clear cached /index so it gets refreshed on next request\n        this._rapi._clearIndexCache();\n    };\n\n    /**\n     * Gets the current user's `/cloud-content` folder. If the folder does not exist, it will be\n     * created.\n     */\n    async getRootFolder(): Promise<AdobeAsset> {\n        if (!this._rootFolder) {\n            this._rootFolder = await this.getAssetWithRepoPath('/cloud-content');\n        }\n        return this._rootFolder;\n    }\n\n    async getUserRepoID(): Promise<string> {\n        return this.getHomeFolder().then((asset) => asset.repositoryID);\n    }\n\n    async getAssetWithCloudID(assetId: string, confirmAccess: boolean = false): Promise<AdobeAsset> {\n        if (confirmAccess) { await this._core.collaborationContext.confirmAccess(assetId); }\n        return this._getAssetById(assetId);\n    }\n\n    /**\n     * Resolves the Asset at the given assetPath. If repositoryId is not passed, it will look up the repositoryId\n     * for the current user, and assume that the path is relative to the user's home directory (`/` for USM users,\n     * `/users/<userId>` for ESM users). If the repositoryId is passed, then the path is assumed to be absolute.\n     *\n     * @example <caption>Assuming 'xyz' is the current userId and 'abc' is the repositoryId</caption>\n     *    getAssetWithRepoPath('/cloud-content');                  // returns /users/xyz/cloud-content\n     *    getAssetWithRepoPath('/users/xyz/cloud-content', 'abc'); // \"\n     *    getAssetWithRepoPath('/users/xyz/cloud-content');        // NOT_FOUND error\n     *\n     * @param assetPath {string}\n     * @param repositoryId {string} (optional)\n     * @return AdobeAsset\n     */\n    @synchronized\n    async getAssetWithRepoPath(assetPath: string, repositoryId?: string): Promise<AdobeAsset> {\n        if (!repositoryId) {\n            // Since clients typically start by resolving a folder by path, also get the `/` folder so that it is\n            // monitored for ONS changes.\n            const homeFolder = await this.getHomeFolder();\n            repositoryId = homeFolder.repositoryID;\n            const userContentRootFolder = homeFolder.repoPath;\n            assetPath = path.join(userContentRootFolder, assetPath);\n        }\n        try {\n            const repositoryMetadata = await this._rapi.getRepoMetadataByPath(repositoryId!, assetPath);\n            return this._getAssetById(repositoryMetadata['repo:assetId'], repositoryMetadata);\n        } catch (e) {\n            const topLevelFolders = [ 'cloud-content', 'temp' ];\n            for (const topLevelFolder of topLevelFolders) {\n                const topLevelPath = `/${topLevelFolder}`;\n                const appearsOnlyOnce = assetPath.indexOf(topLevelPath) === assetPath.lastIndexOf(topLevelPath);\n                if (e.code === SAMErrorCode.NOT_FOUND && appearsOnlyOnce && assetPath.endsWith(topLevelPath)) {\n                    const homeFolder = await this.getHomeFolder();\n                    // return the promise to create the folder\n                    return homeFolder.createFolder(topLevelFolder);\n                }\n            }\n            throw e;\n        }\n    }\n\n    // including confirmAccess to match Seal bindings.\n    async getAssetWithAssetRefString(assetRefStr: string, confirmAccess = false): Promise<AdobeAsset> {\n        type AssetRefKeys = 'cloud_id' | 'local_id' | 'path' | 'repository_id';\n        let parsedAssetRef: Partial<{ [key in AssetRefKeys]: string }>;\n\n        try {\n            parsedAssetRef = JSON.parse(assetRefStr);\n        } catch (error: any) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'Incorrectly formatted AssetRefString', { underlyingError: error });\n        }\n\n        if (parsedAssetRef.cloud_id) {\n            return this.getAssetWithCloudID(parsedAssetRef.cloud_id, confirmAccess);\n        } else if (parsedAssetRef.path) {\n            return this.getAssetWithRepoPath(parsedAssetRef.path, parsedAssetRef.repository_id);\n        } else {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'Invalid AssetRefString');\n        }\n    }\n\n    /**\n     * @package -- only for use in SAM.js\n     */\n    _createAssetFromMetadata(assetMetaData: RepositoryMetadata): AdobeAsset {\n        const session = this._assetPool.createUpdateSession();\n        const localItem = this._core.hostAssetContext._adobeAssetUpdater.updateRemoteItem(session, assetMetaData);\n        session.commit();\n\n        return localItem;\n    }\n\n    async _repositoryNameFromID(id: string): Promise<string | undefined> {\n        return await this._rapi.getRepositoryName(id);\n    }\n\n    /**\n     * @package -- only for use in SAM.js\n     */\n    async _getListOfRepositoryIDs(): Promise<string[] | undefined> {\n        const response =  await this._rapi.getRepositoriesData();\n        if (!response) {\n            return undefined;\n        }\n\n        const children = response.children;\n        return children.map(repositoryInfo => repositoryInfo._embedded[RelType.PRIMARY]['repo:repositoryId']);\n    }\n\n    /**\n     * XD layers their own artifact publishing system on top of CCAC Projects, backed by their own service. Clients like\n     * CDO and Projects UI need to call this API in order to get metadata for rendering these special Artifacts.\n     * @param assetId\n     */\n    async getXDCEData(assetId: string): Promise<IXDCEDocument> {\n        return this._core._environment.fetch(`https://${this._core._environment.endpoints.XDCE_HOST}/v2/document/${assetId}`)\n            .then(response => response.json());\n    }\n\n    private removeAssetsFromAssetsPool(assetIds: string[]): void {\n        this._assetPool.removeLocalItems(assetIds);\n    }\n\n    async permanentlyDeleteAssets(assets: AdobeAsset[]): Promise<IBatchOperationAssetResult> {\n        let assetResults: IBatchOperationAssetResult;\n\n        // If client wll try to resolve permanently deleted assets, SAM should not return the cached assets\n        // from asset pool. Hence removing permanently deleted assets from asset pool.\n        const onItemsChanged = (event: ItemsChangedEvent<AdobeAsset>) => {\n            // Remove only successfully permanently deleted items from asset pool.\n            if (event.discardedItems) {\n                const permanentDeletedAssetsIds: ItemId[] = event.discardedItems.filter(value => assets.includes(value)).map(item => item.id);\n                if (permanentDeletedAssetsIds.length) {\n                    this.removeAssetsFromAssetsPool(permanentDeletedAssetsIds);\n                }\n            }\n        };\n\n        // ITEMS_CHANGED event is triggered from item pool for all update/mutate sessions.\n        // This event will be triggered by other sessions (sessions other than the session\n        // created by this permanent delete operation) also. But in onItemsChanged we will\n        // remove assets which were added in this session.\n        this._assetPool.on(ITEMS_CHANGED, onItemsChanged);\n\n        try {\n            await ItemBase.runExclusiveTask('delete', assets, async () => {\n                const assetsById = new Map<string, AdobeAsset>();\n\n                const ops = assets.map((asset) => {\n                    assetsById.set(asset.id, asset);\n\n                    const deleteOp: IDeleteOperation = {\n                        op: 'delete',\n                        id: asset.id,\n                        target: {\n                            'repo:assetId': asset.id,\n                        }\n                    };\n\n                    // repository id is optional field in target here\n                    // because target is specified by assetId\n                    if (asset.repositoryID) {\n                        const target = deleteOp.target as IAssetRefRepoAssetId;\n                        target['repo:repositoryId'] = asset.repositoryID;\n                    }\n\n                    deleteOp.recursive = asset.isFolder;\n                    return deleteOp;\n                });\n\n                assetResults = await this._runOperations(ops,\n                    assetsById,\n                    (session: IUpdateSession<AdobeAsset>, asset: AdobeAsset) => {\n                        // Since we know the asset has been permanently deleted\n                        // we should clear any renditions on it to prevent memory leaks.\n                        asset._releaseRenditions();\n\n                        // If the Asset was removed from the pool while the operation was underway (such as by ONS-\n                        // triggered refresh), do not try to update it again, as it will get re-added to the pool.\n                        if (!this._assetPool.getLocalItemById(asset.id)) {\n                            return undefined;\n                        }\n\n                        // We update the effectivePermission here first to notify on \"change\" subscribers\n                        // of AdobeAsset (such as AssetLink) that may need to know this assets permission is set to None before\n                        // it gets discarded.\n                        this._core.hostAssetContext._adobeAssetUpdater.updateLocalItem(session, asset, { effectivePermission: Permission.None });\n                        session.queueDiscardedItem(asset);\n                        return undefined;\n                    });\n\n            });\n        } finally {\n            this._assetPool.off(ITEMS_CHANGED, onItemsChanged);\n        }\n\n        return assetResults!;\n    }\n\n\n    // [SAM-2245][SAM-2244][SAM-2242] TS interface for SAM.cpp-only features. After SAM-1586, the public TypeScript API\n    // will be defined in a separate file, and these definitions should be removed.\n    syncingSource?: ItemSource<IItemSourceConfig<AdobeAsset, any>>;\n    cloudSyncStatus?: CloudSyncStatus;\n    getAssetWithLocalID?(id: string): Promise<AdobeAsset>;\n\n    async getCloudQuotaUsedAndMax(): Promise<IQuotaInfo> {\n        return this._rapi.getCloudQuotaUsedAndMax();\n    }\n    // Note: Other props/methods in JS bindings that are only used in the SAM.cpp demo app have been removed.\n    //       E.g. release(), appDidEnterBackground(), etc.\n    // end [SAM-2245][SAM-2244][SAM-2242]\n\n    public async transfer(source: AdobeAsset, target: AdobeAsset | Space): Promise<string> {\n        let targetId: string;\n        if (target instanceof Space) {\n            const workingFiles = await target.getChild('working_files');\n            if (!workingFiles) {\n                throw SAMError.create(SAMErrorCode.NOT_FOUND, 'unable to find working_files for provided space');\n            }\n            targetId = workingFiles.id;\n        } else {\n            targetId = target.cloudID;\n        }\n\n        const payload = {\n            source: { assetId: source.cloudID, repositoryId: source.repositoryID },\n            target: { assetId: targetId, repositoryId: target.repositoryID }\n        };\n\n        const response = await this._assetTransferService.transfer(payload);\n\n        const updater = this._assetPool.createUpdateSession();\n        updater.queueDiscardedItem(source);\n        updater.commit();\n\n        return response;\n    }\n\n    /**\n     * Internal helper method for moving assets (batch).\n     * @param assets assets to be moved (in the same repository)\n     * @param destFolder destination folder where assets are intended to be moved\n     * @param assetRenameMap allows renaming of assets in the batch operation\n     * @param retryOnConflict whether to retry the move op for failed assets in case of conflict\n     * @param assetConflictMap map to save the newName and count used for all assets in batch\n     * @returns the result for batch operation after retrying for failed assets if asked.\n     */\n    private async _moveAssets(\n        assets: AdobeAsset[],\n        destFolder: AdobeAsset,\n        assetRenameMap: AssetRenameMap<AdobeAsset> = new Map(),\n        retryOnConflict: boolean = true,\n        assetConflictMap?: NameConflictMap\n    ): Promise<IBatchOperationAssetResult> {\n        let resultOps: IBatchOperationAssetResult = { failedResults: [], newModels: [] };\n\n        await ItemBase.runExclusiveTask('move', assets, async () => {\n            // In case of Asset created from USS response, repo id is not present\n            // Jira on USS https://jira.corp.adobe.com/browse/SRCH-1989\n            if (!destFolder.repositoryID) {\n                await destFolder._load();\n            }\n            if (assetConflictMap === undefined) {\n                assetConflictMap = new Map() as NameConflictMap;\n            }\n            const assetsById = new Map<string, AdobeAsset>();\n            const ops = assets.map((asset) => {\n                assetsById.set(asset.id, asset);\n                let newPath = `${destFolder.repoPath}/${getBatchRenamedAssetName(asset, assetRenameMap)}`;\n                newPath = batchFormatFileName(this._core, asset.id, newPath, false, assetConflictMap!);\n\n                const op: IMoveOperation = {\n                    op: 'move',\n                    id: asset.id,\n                    source: {\n                        'repo:assetId': asset.id\n                    },\n                    target: {\n                        'repo:path': newPath,\n                        'repo:repositoryId': destFolder.repositoryID\n                    }\n                };\n\n                if (asset.repositoryID) {\n                    const source = op.source as IAssetRefRepoAssetId;\n                    source['repo:repositoryId'] = asset.repositoryID;\n                }\n\n                // re-fetch repository name if the dest folder is in a different repository\n                if (asset.repositoryID !== destFolder.repositoryID) {\n                    asset._clearRepositoryName();\n                }\n\n                if (asset.isFolder) {\n                    const session = this._assetPool.createUpdateSession();\n                    updateCachedDescendents({\n                        assetPool: this._assetPool,\n                        asset,\n                        session,\n                        operation: { type: 'rename', newPath }\n                    });\n                    session.commit();\n                }\n\n                return op;\n            });\n\n            resultOps = await this._runOperations(ops, assetsById);\n        });\n\n        if (retryOnConflict) {\n            return await retryFailedOpsDueToConflict(resultOps, destFolder, assetRenameMap, assetConflictMap!, this._moveAssets.bind(this));\n        }\n        return resultOps;\n    }\n\n    /**\n     * Public method to move assets to a folder\n     * @param assets assets to be moved\n     * @param destFolder destination folder where spaces are intended to be moved\n     * @param assetRenameMap allows renaming of assets in the batch operation\n     * @returns the result for batch operation after retrying for failed assets.\n     */\n    async moveAssets(assets: AdobeAsset[], destFolder: AdobeAsset, assetRenameMap: AssetRenameMap<AdobeAsset> = new Map()): Promise<IBatchOperationAssetResult> {\n        return this._moveAssets(assets, destFolder, assetRenameMap);\n    }\n\n    /**\n     * Public method to check move assets capabilities to a target folder\n     * @param assets List of assets to be moved\n     * @param destFolder destination folder where spaces are intended to be moved\n     * @returns the move capability results for the assets to be moved.\n     */\n    public async getMoveCapability(\n        assets: AdobeAsset[],\n        targetFolder: AdobeAsset\n    ): Promise<MoveCapability> {\n\n        if (!targetFolder.isFolder) {\n            return { canMove: false, reason: CannotMoveReason.NotAFolder };\n        }\n\n        if (!targetFolder.hasPermission(Permission.Write)) {\n            return { canMove: false, reason: CannotMoveReason.PermissionDeniedDestination };\n        }\n\n        if (assets.some(asset => !asset.hasPermission(Permission.Move))) {\n            return { canMove: false, reason: CannotMoveReason.PermissionDeniedSource };\n        }\n\n        // If they're the same assignee, they're in the same bucket, so no warning checks are needed.\n        if (assets.every(asset => asset.storageAssignee.id === targetFolder.storageAssignee.id)) {\n            return { canMove: true, warning: MoveWarning.None };\n        }\n\n        const assetRepoOwnerById = await this._rapi.getAssetsOwnerDetails();\n        const targetRepoOwner = assetRepoOwnerById.get(targetFolder.repositoryID);\n        if (targetRepoOwner === undefined) {\n            throw SAMError.create(SAMErrorCode.NOT_FOUND, 'target\\'s repo owner detail is not available');\n        }\n\n        if (assets.some(asset => assetRepoOwnerById.get(asset.repositoryID)?.id !== targetRepoOwner.id)) {\n            return { canMove: false, reason: CannotMoveReason.DifferentOwner };\n        }\n\n        // Cross-bucket moves (i.e., different assignee, same owner) can cause data loss if a collaborator is editing. To optimize\n        // checking for the possibility of editors, we can assume Projects & their children have editors. Folders might have shared items,\n        // but it are too expensive to exhaustively check, so assume they could have shared items. If isShared flag is already\n        // populated, we can assume it has an editor without loading Collaborators.\n        let maybeHasEditors = assets.some(asset => (\n            asset.isFolder\n            || asset.isProject\n            || asset.isChildOfProject\n            || asset._isShared_NoLazyLoad\n        ));\n\n        if (maybeHasEditors) {\n            return { canMove: true, warning: MoveWarning.CollaboratorMaybeEditing };\n        }\n\n        // If the _isShared_NoLazyLoad flag is not populated, we have to fetch the Collaborator data to\n        // see if we need to warn about editors. Since we're fetching the Collaborators anyway, might as\n        // well check explicitly if there are direct editors, rather than assuming they exist.\n        let needsProcessing = false;\n        assets.forEach(asset => {\n            if (!asset._isCollaboratorDataLoaded  && asset.isShared === undefined) {\n                LazyLoadManager.fetchIfNeeded(asset, COLLABORATOR_CHANGED);\n                needsProcessing = true;\n            }\n        });\n        if (needsProcessing) {\n            await this._core.collaborationContext._collaboratorRequestQueue._processNow();\n            maybeHasEditors = assets.some(asset => asset.isShared\n                && asset.collaboratorArray.some(collab => collab.isDirect && collab.role === 'editor'));\n            if (maybeHasEditors) {\n                return { canMove: true, warning: MoveWarning.CollaboratorMaybeEditing };\n            }\n        }\n\n        // No warnings needed\n        return { canMove: true, warning: MoveWarning.None };\n    }\n\n    /**\n     * Checks an array of the provided AdobeAssets have an outputs directory and returns true\n     * if any of the assets have an output folder. This will also update each\n     * AdobeAsset.hasArtifacts property to true if the asset does have it.\n     *\n     * Currently the UI is not expected\n     * to show which folders have artificats individually but rather if any of the selected\n     * assets contain artifacts.\n     *\n     * Usage of this API requires the user to have at least READ\n     * permissions on the source document.\n     *\n     * @note This method is inteded to be a stop gap solution until simulated sub assets\n     * are shipped. See https://wiki.corp.adobe.com/x/h8JNp\n     *\n     * @param assets {AdobeAsset}\n     */\n    async assetsHaveArtifacts(assets: AdobeAsset[]): Promise<boolean> {\n        const assetIndentifiers: IReviewServiceAssetIdentifer[] = mapAssetsToAssetIndentifier(assets);\n        const results = await this._assetReviewServiceInterface.hasOutputs(assetIndentifiers);\n        if (results.length === 0) {\n            return false;\n        }\n\n        const session = this._assetPool.createUpdateSession();\n        this._core.hostAssetContext._adobeAssetUpdater.updateRemoteItems(\n            session,\n            results.map(result => {\n                return { 'repo:assetId': result['repo:assetId'], 'hasArtifacts': true };\n            })\n        );\n        session.commit();\n        return true;\n    }\n\n    /**\n     * The asset to delete the output folders for. Currently the\n     * API only supports one asset at a time.\n     *\n     * @param asset Single asset to delete.\n     * @package Only to be used within SAM.js\n     */\n    async _deleteAssetOutputsFolder(asset: AdobeAsset) {\n        return this._assetReviewServiceInterface.discardOutputsForAsset(asset.id);\n    }\n\n    /**\n     * @package -- Internal helper method for copying assets (batch).\n     *\n     * @param assets assets to be copied (in the same repository)\n     * @param destFolder destination folder where assets are intended to be copied\n     * @param assetRenameMap allows renaming of assets in the batch operation\n     * @param retryOnConflict whether to retry the copy op for failed assets in case of conflict\n     * @param assetConflictMap map to save the newName and count used for all assets in batch\n     * @returns the result for batch operation after retrying for failed assets if asked.\n     */\n    private async _copyAssets(\n        assets: AdobeAsset[],\n        destFolder: AdobeAsset,\n        assetRenameMap: AssetRenameMap<AdobeAsset> = new Map(),\n        retryOnConflict: boolean = true,\n        assetConflictMap?: NameConflictMap\n    ): Promise<IBatchOperationAssetResult> {\n        let resultOps: IBatchOperationAssetResult = { failedResults: [], newModels: [] };\n        await ItemBase.runExclusiveTask('copy', assets, async () => {\n            // In case of Asset created from USS response, repo id is not present\n            // Jira on USS https://jira.corp.adobe.com/browse/SRCH-1989\n            if (!destFolder.repositoryID) {\n                await destFolder._load();\n            }\n            if (assetConflictMap === undefined) {\n                assetConflictMap = new Map() as NameConflictMap;\n            }\n            const assetsById = new Map<string, AdobeAsset>();\n            const ops = assets.map((asset) => {\n                assetsById.set(asset.id, asset);\n\n                let newPath = `${destFolder.repoPath}/${getBatchRenamedAssetName(asset, assetRenameMap)}`;\n                const sameFolder = destFolder.repoPath === asset.repoPath.substring(0, asset.repoPath.lastIndexOf('/'));\n                newPath = batchFormatFileName(this._core, asset.id, newPath, sameFolder, assetConflictMap!);\n\n                // We only want to copy App metadata for PDFs and no other file format\n                // This is a temporary solution and we will have a better solution on the service side\n                const includeResources = [ { 'reltype': RelType.PRIMARY } ];\n                if (asset.mediaType === 'application/pdf') {\n                    includeResources.push({ 'reltype': RelType.APP_METADATA });\n                }\n                const operation: ICopyOperation = {\n                    op: 'copy',\n                    id: asset.id,\n                    source: {\n                        'repo:assetId': asset.id,\n                    },\n                    target: {\n                        'repo:path': newPath,\n                        'repo:repositoryId': destFolder.repositoryID\n                    },\n                    // The following copies Content Resources for all formats\n                    // and Application Metadata for PDFs only\n                    includeResources\n                };\n\n                if (asset.repositoryID) {\n                    const source = operation.source as IAssetRefRepoAssetId;\n                    source['repo:repositoryId'] = asset.repositoryID;\n                }\n\n                return operation;\n            });\n\n            resultOps = await this._runOperations(\n                ops,\n                assetsById,\n                (session: IUpdateSession<AdobeAsset>, asset: AdobeAsset, remoteItem?: RepositoryMetadata) => {\n                    if (!remoteItem) {\n                        throw SAMError.create(SAMErrorCode.UNKNOWN, 'Missing metadata from asset bulk operation.');\n                    }\n                    const newAsset = this._core.hostAssetContext._adobeAssetUpdater.updateRemoteItem(session, remoteItem);\n                    return newAsset;\n                }\n            );\n        });\n\n        if (retryOnConflict) {\n            return await retryFailedOpsDueToConflict(resultOps, destFolder, assetRenameMap, assetConflictMap!, this._copyAssets.bind(this));\n        }\n\n        return resultOps;\n    }\n\n    /**\n     * Public method to copy assets to a folder\n     * @param assets assets to be copied\n     * @param destFolder destination folder where spaces are intended to be copied\n     * @param assetRenameMap allows renaming of assets in the batch operation\n     * @returns the result for batch operation after retrying for failed assets.\n     */\n    async copyAssets(assets: AdobeAsset[], destFolder: AdobeAsset, assetRenameMap: AssetRenameMap<AdobeAsset> = new Map()): Promise<IBatchOperationAssetResult> {\n        return await this._copyAssets(assets, destFolder, assetRenameMap);\n    }\n\n    async duplicateAssets(assets: AdobeAsset[]): Promise<IBatchOperationAssetResult> {\n        const parentRepoPath = assets[0].repoPath.substring(0, assets[0].repoPath.lastIndexOf('/'));\n        const parentAsset = await this._core.hostAssetContext.getAssetWithRepoPath(parentRepoPath, assets[0].repositoryID);\n        return await this._copyAssets(assets, parentAsset);\n    }\n\n    /**\n     * @package -- for use in SAM.js only\n     */\n    async _runOperations(\n        ops: IOperationQuery,\n        assetsById: Map<string, AdobeAsset>,\n        assetUpdater?: (\n            session: IUpdateSession<AdobeAsset>,\n            asset: AdobeAsset,\n            remoteItem?: RepositoryMetadata\n        ) => AdobeAsset | undefined\n    ): Promise<IBatchOperationAssetResult> {\n        return await this._rapi.runOperationsForContext<AdobeAsset>(\n            ops,\n            assetsById,\n            this._assetPool,\n            assetUpdater ? assetUpdater : (session: IUpdateSession<AdobeAsset>, asset: AdobeAsset, updatedAssetMetaData?: RepositoryMetadata) => {\n                if (!updatedAssetMetaData) {\n                    throw SAMError.create(SAMErrorCode.UNKNOWN, 'Missing metadata from asset bulk operation.');\n                }\n                this._core.hostAssetContext._adobeAssetUpdater.updateLocalItem(session, asset, updatedAssetMetaData);\n                return undefined;\n            },\n            [\n                {\n                    // If remote asset found to be SAMErrorCode.ACCESS_DENIED or SAMErrorCode.NOT_FOUND\n                    // that means we need to update local asset to get it in sync with remote\n                    match: (error: SAMError) => error.code === SAMErrorCode.ACCESS_DENIED || error.code === SAMErrorCode.NOT_FOUND,\n                    action: async (asset: AdobeAsset, error: SAMError) => {\n                        await asset._load();\n                        return { model: asset, error };\n                    }\n                }\n            ]\n        );\n    }\n\n    // Called when we get a notification from ONS - we reload any assets when we find out they changed\n    private _onONSNotification = (changedAssets: Map<string, ONSChangedAssetInfo>) => {\n        // Update any assets in the pool\n        changedAssets.forEach((assetInfo: ONSChangedAssetInfo, assetID: string) => {\n            const asset = this._assetPool.getLocalItemById(assetID);\n            if (asset) {\n                if (assetInfo.changedResources?.includes('api:metadata/repository')) {\n                    // TODO: bypass loading app metadata if changedResources includes api:metadata/application\n                    // TODO: bypass permission refresh if changedResources includes api:ac/policy\n                    // https://jira.corp.adobe.com/browse/SAM-3499\n                    asset._loadWithRetry();\n                }\n                if (assetInfo.changedResources?.includes('api:metadata/application')) {\n                    if (asset.isAssignment) {\n                        // TODO: bypass loading repo metadata if changedResources includes api:metadata/repository\n                        // Refetch assignment since assignment is constructed of app metadata\n                        asset._loadWithRetry();\n                    } else {\n                        asset.appMetadata.load();\n                    }\n                }\n                if (assetInfo.changedResources?.includes('api:ac/policy')) {\n                    // Load the permissions and set collaborator data dirty flags\n                    asset._reloadPermissions();\n                }\n            } else if (assetInfo.parentAssetId && this._assetPool.getLocalItemById(assetInfo.parentAssetId)) {\n                // Check for items that were added remotely to a folder that we're monitoring (e.g. move, restore, discard,\\\n                // and copy can cause an item to appear in a folder that is being monitored). This will cause any list of children\n                // for the folder to be updated when a new asset is added to it.\n                //\n                // Note that we ONLY do this if the parent asset is loaded - in the case where we're monitoring asset ids\n                // directly via the link list, as the CC Library process does, no AdobeAssets are loaded (SAM is only used\n                // to get the notifications). So if we always loaded the asset here it would introduce unnecessary network\n                // calls. In the folder listing case, we always have the parent asset loaded, so this is safe.\n                const cachedItem = this._assetPool.getLocalItemById(assetInfo.parentAssetId);\n                // TODO: [ACPCEDU-2219] The logic in the 'if' statement is not needed when StudentAssignment extends AdobeAsset and is cached in the asset pool\n                if (cachedItem?.isAssignment) {\n                    // found parent assignment, can refresh so StudentAssignment gets changes\n                    cachedItem._loadWithRetry();\n                } else {\n                    this.getAssetWithCloudID(assetID);\n                }\n            }\n        });\n\n        // Also refresh any links that changed\n        const changedIDs = new Set(changedAssets.keys());\n        this._core.assetLinkManager.lists.forEach(list => list._onONSNotification(changedIDs));\n    }\n\n    /**\n     * Called whenever any new assets are added to the asset pool, or when links / link\n     * lists are modified. When this happens, we gather the set of all assets we need to\n     *  monitor and trigger watching this with ONS.\n     *\n     *  @package -- only for use in SAM.js\n     */\n    _onAssetsChanged = (e?: ItemsChangedEvent<AdobeAsset>) => {\n        // Compute the set of asset ids to watch - start with all the monitored lists:\n        const assetIDs: Set<string> = new Set();\n\n        // We want to monitor all assets in the asset pool (so they get updated when they change)\n        this._assetPool.forEach((asset: AdobeAsset) => assetIDs.add(asset.id));\n\n        // Ignore Assets queued for removal from the pool, if this is an ItemsChangedEvent\n        e?.discardedItems?.forEach((asset: AdobeAsset) => assetIDs.delete(asset.id));\n\n        // And also any assets referenced by links (since the link might be broken and we want\n        // to re-resolve when the asset comes in)\n        this._core.assetLinkManager.lists.forEach(list => list.monitoredAssetIDs.forEach(id => assetIDs.add(id)));\n\n        // Update the list of assetIds that ONS is watching - note that this only modifies the\n        // subscription if the list of assets changes, so calling ONS with the same assetIds won't\n        // cause any new API calls.\n        if (assetIDs.size > 0 && !this._core._environment.getValue('DISABLE_ONS')) {\n            this._ons.watch(assetIDs);\n            this._ons.start();\n        } else {\n            this._ons.stop();\n        }\n    }\n\n    /**\n     * We are keeping the following library element methods here to support SAM.cpp and will\n     * move them to LibraryContext after we get better support for library elements.\n     */\n    async restoreLibraryElement(elementId: string) {\n        await this._libraryInterface.restoreLibraryElement(elementId);\n    }\n\n    async permanentlyDeleteLibraryElement(elementId: string) {\n        await this._libraryInterface.permanentlyDeleteLibraryElement(elementId);\n    }\n\n    /**\n     * @package -- for use in SAM.js only\n     * @deprecated -- will be removed on or after after 2024-10-01\n     */\n    getAssetInterface(repoMetadata: RepositoryMetadata): AssetInterface {\n        oneTimeWarning('AdobeAsset.getAssetInterface', 'AdobeAsset.getAssetInterface is deprecated and will be removed on or after 2024-10-01.');\n        return new AssetInterface(this._rapi, repoMetadata['repo:assetId'], repoMetadata._links, repoMetadata['repo:etag']);\n    }\n\n    /**\n     * Asynchronous method that returns the CommentsResource associated with the asset identified by assetId.\n     *\n     * Clients with an AdobeAsset instance should use AdobeAsset.getCommentsResource(),\n     * but when the Commenting UI has ( SESSION_TYPE === 'logged-out' ),\n     * it isn't possible to construct an AdobeAsset, so they will call this method directly.\n     *\n     * CommentsResource's are asset specific, and they are cached in a Map of WeakRef's,\n     * so client code should ensure there is a pinning reference if they want the context\n     * to be preserved.\n     *\n     * @param assetId {string}\n     * @returns {Promise<CommentContent>}\n     * @see {@link AdobeAsset.getCommentsResource}\n     */\n    async getCommentsResource(assetId: string): Promise<CommentsResource> {\n        let comments = this._commentsById.get(assetId)?.deref();\n\n        if (!comments) {\n            comments = new CommentsResource(this._core, assetId);\n            this._commentsById.set(assetId, new WeakRef(comments));\n        }\n        return comments!;\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport path from 'path-browserify';\nimport EventEmitter from 'events';\nimport AssetLinkList from './AssetLinkList';\nimport AdobeAsset from '../assets/AdobeAsset';\nimport SAMError, { SAMErrorCode } from '../core/SAMError';\nimport type { ISAMObject } from '../indexPrivate';\nimport { observable, retry, synchronized } from '../core/decorators';\nimport { Permission } from '../interface/AssetModel';\n\nexport type LinkReference = {\n    ['repo:assetId']: string,\n    ['repo:repositoryId']?: string,\n    ['repo:name']?: string,\n    ['repo:etag']?: string,\n    ['repo:version']?: string,\n    ['dc:format']?: string,\n    ['stRef:relativePath']?: string,\n    ['stRef:fromPart']?: string,\n    ['stRef:documentID']?: string,\n    ['stRef:instanceID']?: string,\n    ['stRef:fromPartInstanceID']?: string,\n    ['stRef:fromPartName']?: string,\n    ['stRef:fromPartDerivedFrom']?: LinkReference,\n    ['stRef:manager']?: 'Adobe Cloud'\n};\n\n// Properties of a link reference that correspond to mutable asset metadata properties (e.g. name, path etc).\n// These are properties that can change on the asset, but don't correspond to a content change\n// (i.e. the link state would be MetadataOutOfDate rather than OutOfDate)\nconst assetMetadataProperties: (keyof LinkReference)[] = [\n    'repo:repositoryId',\n    'repo:name',\n    'repo:etag',\n    'stRef:relativePath',\n    'stRef:documentID'\n];\n\nexport type LinkStatus =\n    | 'UpToDate'\n    | 'MetadataOutOfDate'\n    | 'OutOfDate'\n    | 'Restricted'\n    | 'Discarded'\n    | 'Broken';\n\nfunction isBrokenAsset(asset: AdobeAsset) {\n    // Need to know if permission exactly matches Ack or None, rather than contains, so can't use\n    // hasPermission() here.\n    const permission = asset['_permissions'];\n    return permission === Permission.Ack\n        || permission === Permission.None;\n}\n\n// Illustrator (prior to MAX 2021) does not update the instance ID on save, so we need to fall back to the etag in this case\n// See https://jira.corp.adobe.com/browse/AI-4251857\nconst typesWithUnreliableInstanceID = [\n    'application/illustrator'\n];\n\nexport default class AssetLink extends EventEmitter implements ISAMObject {\n\n    private _resolvedAssets?: AdobeAsset[];\n    private _resolutionErrors: SAMError[] = [];\n\n    constructor(\n        private _assetLinkList: AssetLinkList,\n        private _data: LinkReference\n    ) {\n        super();\n    }\n\n    _onChange = () => {\n        // Check if any of the resolved assets broke, and transfer their errors to the link\n        // so we get the right link state (broken or restricted)\n        const brokenAssets = this._resolvedAssets?.filter(isBrokenAsset);\n        if (brokenAssets?.length) {\n            this._resolutionErrors = brokenAssets.map(asset =>\n                SAMError.create(\n                    asset['_permissions'] === Permission.Ack ? SAMErrorCode.ACCESS_DENIED : SAMErrorCode.NOT_FOUND,\n                    'lost access'\n                ));\n            this._resolvedAssets = this._resolvedAssets?.filter(asset => !brokenAssets.includes(asset));\n        }\n        this.emit('change');\n        this._assetLinkList._onChange();\n    }\n\n    @synchronized\n    async _setLinkData(linkData: LinkReference, asset?: AdobeAsset) {\n        this._data = linkData;\n        if (asset) {\n            this._resolvedAssets = [ asset ];\n        }\n        this._onChange();\n        if (!this.adobeAsset || this.assetID !== this.adobeAsset.cloudID) {\n            await this._resolveWithRetry();\n        }\n        // TODO: Check if relative path changed\n        return this;\n    }\n\n    async _setLinkedAsset(asset: AdobeAsset) {\n        const data = this._getLinkDataForAsset(asset);\n        return this._setLinkData(data, asset);\n    }\n\n    _getLinkDataForAsset(asset: AdobeAsset): LinkReference {\n        const linkData: LinkReference = {\n            'repo:assetId': asset.cloudID,\n            'repo:repositoryId': asset.repositoryID,\n            'repo:etag': asset.etag,\n            'dc:format': asset.mediaType,\n            'repo:name': asset.name,\n            'stRef:documentID': asset.embeddedMetadata.data?.['xmpMM:DocumentID'],\n            'stRef:instanceID': asset.embeddedMetadata.data?.['xmpMM:InstanceID'],\n            'stRef:manager': 'Adobe Cloud'\n        };\n\n        // Add relative path if it exists\n        const parent = this._assetLinkList.containerAsset;\n        if (parent && parent.repositoryID === asset.repositoryID) {\n            linkData['stRef:relativePath'] = path.relative(path.dirname(parent.repoPath), asset.repoPath);\n        }\n\n        return linkData;\n    }\n\n    // Ensures that link reference strings are always serialized with the keys in the same order\n    _serializeLinkData(linkData: LinkReference): string {\n        return JSON.stringify(linkData, Object.keys(linkData).sort());\n    }\n\n    @retry\n    _resolveWithRetry(): Promise<void> {\n        return this._resolve();\n    }\n\n    async _resolve(): Promise<void> {\n        const resolvedAssets: AdobeAsset[] = [];\n        const resolutionErrors: SAMError[] = [];\n\n        const handleError = (e: SAMError) => {\n            if ([ SAMErrorCode.NOT_FOUND, SAMErrorCode.ACCESS_DENIED ].includes(e.code)) {\n                resolutionErrors.push(e);\n            } else {\n                throw e;\n            }\n        };\n\n        try {\n            const asset = await this._context.getAssetWithCloudID(this.assetID);\n            if (!asset.embeddedMetadata.isLoaded) {\n                // First time, we need to load - after that, it'll get updated whenever the asset is refreshed\n                await asset.embeddedMetadata.load();\n            }\n            resolvedAssets.push(asset);\n        } catch (e) {\n            this._core._environment.error(`Failed to resolve link by id (${this.assetID}): ${e}`);\n            handleError(e);\n        }\n\n        const parent = this._assetLinkList.containerAsset;\n        if (this.relativePath && parent && parent.repositoryID === this.repositoryID) {\n            // Resolve by relative path, but this only makes sense if the container asset and linked\n            // asset are in the same repository.\n            const repoPath = path.join(path.dirname(parent.repoPath), this.relativePath);\n            try {\n                const asset = await this._context.getAssetWithRepoPath(repoPath, this.repositoryID);\n                if (!asset.embeddedMetadata.isLoaded) {\n                    // First time, we need to load - after that, it'll get updated whenever the asset is refreshed\n                    await asset.embeddedMetadata.load();\n                }\n                // Most of the time, resolution by path will match resolution by asset id - only add an alternate\n                // if they're different.\n                if (!resolvedAssets[0] || resolvedAssets[0].cloudID !== asset.cloudID) {\n                    if (resolvedAssets[0]?.isDiscarded) {\n                        // Special case if the resolution by id is discarded - we want the path-based resolution\n                        // to become the primary adobeAsset\n                        resolvedAssets.unshift(asset);\n                    } else {\n                        resolvedAssets.push(asset);\n                    }\n                }\n            } catch (e) {\n                this._core._environment.error(`Failed to resolve link by path: ${this.repositoryID}, ${repoPath}`);\n                handleError(e);\n            }\n        }\n\n        // Attach event listeners so we can notify the link when the asset changes\n        this._resolvedAssets && this._resolvedAssets.forEach(asset => asset.off('change', this._onChange));\n        resolvedAssets.forEach(asset => asset.on('change', this._onChange));\n\n        this._resolvedAssets = resolvedAssets;\n        this._resolutionErrors = resolutionErrors;\n        this._onChange();\n    }\n\n    get _core() {\n        return this._assetLinkList._core;\n    }\n\n    get _context() {\n        return this._assetLinkList._manager._context;\n    }\n\n    /**\n     * The asset that the link resolves to - this will not be defined if the linkStatus\n     * is Restricted or Broken.\n     */\n    @observable\n    get adobeAsset(): AdobeAsset | undefined {\n        return this._resolvedAssets?.[0];\n    }\n\n    /**\n     * An alternative asset which can be used as link, in case there is ambiguity resolving the link.\n     * This will usually be undefined.\n     */\n    @observable\n    get alternativeAdobeAsset(): AdobeAsset | undefined {\n        return this._resolvedAssets?.[1];\n    }\n\n    /**\n     * The current state of the link (OutOfDate, UpToDate, Restricted or Broken).\n     */\n    @observable\n    get linkStatus(): LinkStatus {\n        if (!this._resolvedAssets) {\n            return 'UpToDate';\n        }\n        if (!this.adobeAsset) {\n            // If we get a 403 resolving an asset, we know it exists but the user doesn't have access\n            // This corresponds to the Restricted state - we can direct the user to request access via assets web.\n            return this._resolutionErrors.some(error => error.code === SAMErrorCode.ACCESS_DENIED) ? 'Restricted' : 'Broken';\n        }\n        if (this.adobeAsset.isDiscarded) {\n            // If the primary asset resolved is discarded, it means that we don't have an undiscarded alternative\n            // (otherwise it would be the primary asset). We therefore treat the link state as Discarded.\n            // This means that the user can be presented the option to restore the asset to fix the link.\n            return 'Discarded';\n        }\n\n        // Check to see if the asset has changed - we check the xmpMM:InstanceID, which should be modified on every save.\n        // There are two exceptions:\n        // 1) If the asset doesn't have any XMP metadata (and neither does the link), we fall back to compare the repo:etag\n        // 2) Illustrator has a bug that it doesn't update the XMP metadata on save - so we also fall back to the repo:etag\n        //    for Illustrator types, in case they were edited in an older version of Illustrator.\n        const instanceID = this.adobeAsset.embeddedMetadata.data['xmpMM:InstanceID'] || '';\n        const shouldCheckEtag = (!instanceID && !this.instanceID) || typesWithUnreliableInstanceID.includes(this.type);\n        const assetHasChanged = instanceID !== this.instanceID || (shouldCheckEtag && this.etag !== this.adobeAsset.etag);\n        if (this.alternativeAdobeAsset || assetHasChanged) {\n            return 'OutOfDate';\n        }\n\n        // Check whether any metadata is out of date\n        const assetLinkData = this._getLinkDataForAsset(this.adobeAsset);\n        const hasMetadataChanges = assetMetadataProperties.some(key => assetLinkData[key] !== this._data[key]);\n        return hasMetadataChanges ? 'MetadataOutOfDate' : 'UpToDate';\n    }\n\n    /**\n     * The fragment specifier which can be used by the client to link to a fragment within the asset.\n     */\n    @observable\n    get fragmentIdentifier(): string {\n        return this._data['stRef:fromPart'] || '';\n    }\n\n    /**\n     * The version of the asset to which the link is referring to. This is only used if linking to a specific\n     * version, and the version must be specified at the time of link creation.\n     */\n    @observable\n    get version(): string {\n        return this._data['repo:version'] || '';\n    }\n\n    /**\n     * The asset ID of the asset which the link refers to.\n     */\n    @observable\n    get assetID(): string {\n        return this._data['repo:assetId'];\n    }\n\n    /**\n     * The repository ID of the asset which the link refers to.\n     */\n    @observable\n    get repositoryID(): string {\n        return this._data['repo:repositoryId'] || '';\n    }\n\n    /**\n     * The owner ID of the asset which the link refers to.\n     */\n    // get ownerID(): string {\n    //     return this._data['stRef:fromPart'] || '';\n    // }\n\n    /**\n     * The name of the asset when the link was created or last updated.\n     */\n    @observable\n    get name(): string {\n        return this._data['repo:name'] || '';\n    }\n\n    /**\n     * The type of the asset when the link was created.\n     */\n    @observable\n    get type(): string {\n        return this._data['dc:format'] || '';\n    }\n\n    /**\n     * The etag of the asset when the link was created or last updated.\n     */\n    @observable\n    get etag(): string {\n        return this._data['repo:etag'] || '';\n    }\n\n    /**\n     * The relative path of the asset when the link was created or last updated.\n     */\n    @observable\n    get relativePath(): string {\n        return this._data['stRef:relativePath'] || '';\n    }\n\n    /**\n     * The document id as per the XMP metadata when the link was created or last updated.\n     */\n    @observable\n    get documentID(): string {\n        return this._data['stRef:documentID'] || '';\n    }\n\n    /**\n     * The instance id as per the XMP metadata when the link was created or last updated.\n     */\n    @observable\n    get instanceID(): string {\n        return this._data['stRef:instanceID'] || '';\n    }\n\n    /**\n     * Obtain the asset link reference to be stored in the container document for the link.\n     * Note: Clients can choose to store this as a string by calling getAssetLinkRefString() instead.\n     */\n    @observable\n    getAssetLinkRef(): LinkReference {\n        return Object.assign({}, this._data);\n    }\n\n    /**\n     * Obtain the asset link reference string to be stored in the container document for the link.\n     * Note: Clients can choose to store this as an object by calling getAssetLinkRef() instead.\n     */\n    @observable\n    getAssetLinkRefString(): string {\n        return this._serializeLinkData(this._data);\n    }\n\n    /**\n     * Obtain the asset link reference corresponding to the given asset. This is useful for knowing\n     * the new link reference that would be obtained by updating to the given asset\n     */\n    @observable\n    getNewAssetLinkRef(asset: AdobeAsset): LinkReference {\n        return this._getLinkDataForAsset(asset);\n    }\n\n    /**\n     * Obtain the asset link reference string corresponding to the given asset. This is useful for knowing\n     * the new linkReference string that would be obtained by updating to the given asset\n     */\n    @observable\n    getNewAssetLinkRefString(asset: AdobeAsset): string {\n        return this._serializeLinkData(this.getNewAssetLinkRef(asset));\n    }\n\n    /**\n     * Called by the clients to accept the latest changes and get the new asset link reference\n     * @param asset The new asset to update to (or the current asset to accept an update)\n     * @returns The new linkReference string.\n     */\n    async updateWithAsset(asset: AdobeAsset): Promise<string> {\n        await this._setLinkedAsset(asset);\n        return this.getAssetLinkRefString();\n    }\n\n    /**\n     * Called by the clients to accept the latest changes and get the new asset link reference\n     * @param linkRef A new link reference to update to\n     * @returns The new link reference.\n     */\n    async updateWithLinkRef(linkRef: LinkReference): Promise<LinkReference> {\n        await this._setLinkData(linkRef);\n        return linkRef;\n    }\n\n    /**\n     * Called by the clients to accept the latest changes and get the new asset link reference\n     * @param linkRef A new link reference string to update to\n     * @returns The new link reference string.\n     */\n    async updateWithLinkRefString(linkRefString: string): Promise<string> {\n        await this._setLinkData(JSON.parse(linkRefString));\n        return linkRefString;\n    }\n\n    /**\n     * Called by the clients to accept metadata updates when the link is in the OutOfDate state.\n     * If called when the link is in a different state, this does nothing.\n     * @returns The new linkReference string.\n     */\n    acceptMetadataChanges(): string {\n        if (this.adobeAsset && this.linkStatus === 'MetadataOutOfDate') {\n            const assetLinkData = this._getLinkDataForAsset(this.adobeAsset);\n            // Note that we substitute fields rather than replacing the whole link reference, because the link reference\n            // may include fragment data that we don't want to delete\n            this._data = { ...this._data, ...assetLinkData };\n            this._onChange();\n        }\n        return this.getAssetLinkRefString();\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport EventEmitter from 'events';\nimport AdobeAsset from '../assets/AdobeAsset';\nimport AssetLinkManager from './AssetLinkManager';\nimport AssetLink, { LinkReference } from './AssetLink';\nimport type { ISAMObject } from '../indexPrivate';\nimport { observable } from '../core/decorators';\nimport oneTimeWarning from '../utils/oneTimeWarning';\n\nexport default class AssetLinkList extends EventEmitter implements ISAMObject {\n\n    private _links: Set<AssetLink> = new Set();\n\n    // We store directly monitored asset ids as a map, where the key is the lower case\n    // asset id, and the value is the asset id passed in. This allows us to easily look\n    // up the original case of the asset id passed in, so we can send notifications in\n    // the correct case, in case a client passed it in with the wrong case\n    private _directlyMonitoredAssetIDs: Map<string, string> = new Map();\n\n    constructor(\n        public _manager: AssetLinkManager,\n        private _containerAsset?: AdobeAsset\n    ) {\n        super();\n    }\n\n    get _core() {\n        return this._manager._core;\n    }\n\n    _onChange = () => {\n        this.emit('change');\n    }\n\n    private _refreshLinks = (changedIDs: Set<string> = new Set(this.monitoredAssetIDs)) => {\n        this.forEach(link => {\n            if (!link.adobeAsset && changedIDs.has(link.assetID)) {\n                // Link is broken, but asset id changed - try re-resolving\n                link._resolveWithRetry();\n            }\n            // Note - we do not need to refresh any assets; this will be handled by AssetContext\n            // since it's updating all the assets in the asset pool.\n        });\n    }\n\n    _onONSNotification = (changedIDs: Set<string>) => {\n        this._refreshLinks(changedIDs);\n\n        // As well as refreshing changed links, we emit a notified event, so clients can know that\n        // we were notified of a change to these assets - this is useful if clients are only monitoring\n        // asset ids directly, not via links.\n        // Compute the intersection of changedIDs and the ones we're monitoring:\n        const monitoredAssetIDs = this._monitoredAssetIDs;\n        const monitoredChangedIDs = new Set();\n        changedIDs.forEach(id => {\n            if (monitoredAssetIDs.has(id)) {\n                monitoredChangedIDs.add(id);\n            }\n            // The client might have passed in an asset id in a different case to the normalized\n            // platform case (e.g. clients like CC Libraries might have some older cached client\n            // ids). We therefore need to map the asset id we get from the notification to the\n            // one passed in.\n            const normalizedId = this._directlyMonitoredAssetIDs.get(id.toLowerCase());\n            if (normalizedId) {\n                monitoredChangedIDs.add(normalizedId);\n            }\n        });\n        this.emit('notified', [ ...monitoredChangedIDs ]);\n    }\n\n    /**\n     * Monitor an asset id directly, rather than going through an AssetLink. This allows you to monitor\n     * a specific asset for changes without maintaining any state (i.e. it will not resolve the assetID\n     * to an AdobeAsset).\n     *\n     * This is a lower-level API and should only be used if you're explicitly not wanting to load the\n     * asset with SAM (for example, the CC Libraries API uses this since it fetches the asset data\n     * from Melville, rather than R-API via SAM, so it just needs the raw notification).\n     */\n    addAssetID(assetID: string) {\n        this._directlyMonitoredAssetIDs.set(assetID.toLowerCase(), assetID);\n        this._onChange();\n    }\n\n    /**\n     * Stop monitoring an asset id that was added via `addAssetId()`. Note that if any links in the list\n     * also reference this asset id, this will not stop monitoring them.\n     */\n    removeAssetID(assetID: string) {\n        this._directlyMonitoredAssetIDs.delete(assetID.toLowerCase());\n        this._onChange();\n    }\n\n    /**\n     * Add one or more existing links (from link reference or link reference strings) to the list.\n     */\n    add(linkReferences: (string | LinkReference)[]): Promise<AssetLink[]> {\n        return Promise.all(linkReferences.map(async linkRef => {\n            // TODO: Should check if already have duplicate link\n            const linkReference = typeof linkRef === 'string' ? JSON.parse(linkRef) : linkRef;\n            const link = new AssetLink(this, linkReference);\n            this._links.add(link);\n            this._onChange();\n            // When adding an existing link we can always return an AssetLink even if it fails\n            // We'll retry the resolution after which the link state will update.\n            await link._resolveWithRetry();\n            return link;\n        }));\n    }\n\n    /**\n     * Create a new link from an asset, and add it to the list.\n     * @param asset\n     * @param [fragmentSpecifier] An optional string containing the fragmentSpecifier within the asset.\n     * @param [version] An optional string containing the version identifier of the Adobe asset.\n     */\n    async create(asset: AdobeAsset | string, fragmentSpecifier?: string, version?: string): Promise<AssetLink> {\n        const assetID = typeof asset === 'string' ? asset : asset.cloudID;\n        const link = new AssetLink(this, {\n            'repo:assetId': assetID,\n            'stRef:fromPart': fragmentSpecifier,\n            'repo:version': version,\n            'stRef:manager': 'Adobe Cloud'\n        });\n        this._links.add(link);\n        this._onChange();\n        // When creating a new link, we do _not_ retry on failure - this is because the link reference needs to be updated.\n        // Errors are propagated to the client.\n        await link._resolve();\n        if (link.adobeAsset) {\n            link._setLinkedAsset(link.adobeAsset);\n        }\n        return link;\n    }\n\n    /**\n     * Remove an asset link from the list. This will cause it to stop being actively monitored for changes.\n     */\n    remove(link: AssetLink) {\n        this._links.delete(link);\n        this._onChange();\n    }\n\n    /**\n     * Clear the whole list.\n     */\n    clear() {\n        this._links.clear();\n        this._onChange();\n    }\n\n    /**\n     * Number of asset links in the list.\n     */\n    @observable\n    get count() {\n        return this._links.size;\n    }\n\n    /**\n     * Get an array of all the asset links in the list.\n     */\n    @observable\n    get links(): AssetLink[] {\n        return [ ...this._links ];\n    }\n\n    /**\n     * Get a set of all the asset ids being monitored by the link list. This includes\n     * asset ids in any links, as well as asset ids being directly monitored.\n     */\n    private get _monitoredAssetIDs(): Set<string> {\n        const assetIDs: Set<string> = new Set(this._directlyMonitoredAssetIDs.values());\n        this.forEach(link => {\n            assetIDs.add(link.assetID);\n            // We also monitor the path-based resolution if it differs from asset-based:\n            if (link.alternativeAdobeAsset) {\n                assetIDs.add(link.alternativeAdobeAsset.cloudID);\n            }\n        });\n        return assetIDs;\n    }\n\n    /**\n     * Get an array of all the asset ids being monitored by the link list. This includes\n     * asset ids in any links, as well as asset ids being directly monitored.\n     */\n    @observable\n    get monitoredAssetIDs(): string[] {\n        return [ ...this._monitoredAssetIDs ];\n    }\n\n    /**\n     * Iterate through all the asset links in the list.\n     */\n    @observable\n    forEach(callback: (link: AssetLink) => void) {\n        this._links.forEach(callback);\n    }\n\n    /**\n     * Get the container asset for the link list (the document that contains the links)\n     */\n    @observable\n    get containerAsset(): AdobeAsset | undefined {\n        return this._containerAsset;\n    }\n\n    /**\n     * Marks a list as active so that the asset link manager can actively start monitoring all the asset links in it.\n     * @param [duration] If a duration is specified (in ms), the list will automatically deactivate after this time. Otherwise it will remain active.\n     * @deprecated This method is deprecated - lists are always monitored for notifications unless you pass in DISABLE_ONS when initializing SAM.\n     *    Will be removed on or after 2024-10-01.\n     */\n    activate(duration: number = 0) {\n        oneTimeWarning('AssetLinkList.activate', `AssetLinkList.activate(${duration}) is deprecated - lists are always monitored for notifications.`\n         + `This method will be removed on or after 2024-10-01.`);\n    }\n\n    /**\n     * Deactivate a list so that the asset link manager can stop monitoring all the asset links in it.\n     * @deprecated This method is deprecated - lists are always monitored for notifications unless you pass in DISABLE_ONS when initializing SAM.\n     *    Will be removed on or after 2024-10-01.\n     */\n    deactivate() {\n        oneTimeWarning('AssetLinkList.deactivate', 'AssetLinkList.deactivate() is deprecated - lists are'\n            + ' always monitored for notifications. This method will be removed on or after 2024-10-01.');\n    }\n\n    /**\n     * Whether the list is active (asset links in it are actively monitored for changes or not).\n     * @deprecated This method is deprecated - lists are always monitored for notifications unless you pass in DISABLE_ONS when initializing SAM.\n     *    Will be removed on or after 2024-10-01.\n     */\n    @observable\n    get isActive(): boolean {\n        oneTimeWarning('AssetLinkList.isActive', 'AssetLinkList.isActive is deprecated - lists are always'\n            + ' monitored for notifications. This method will be removed on or after 2024-10-01.');\n        return true;\n    }\n\n    /**\n     * Change the container asset associated with this list (the document that contains the links in the list)\n     * This will change relative path based resolution of the links\n     */\n    async updateContainerAsset(containerAsset: AdobeAsset) {\n        this._containerAsset = containerAsset;\n        this._onChange();\n        // Need to resolve all the links again, because the relative path could have changed\n        await Promise.all(Array.from(this._links).map(link => link._resolveWithRetry()));\n    }\n\n    /**\n     * Clone the asset list for a another container asset (adding it to this list)\n     */\n    clone(assetLinkList: AssetLinkList) {\n        // TODO: Need to trigger all links to re-resolve, since relative path resolution may have changed\n        assetLinkList.links.forEach(link => this._links.add(link));\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport EventEmitter from 'events';\nimport AssetContext from '../assets/AssetContext';\nimport AdobeAsset from '../assets/AdobeAsset';\nimport AssetLinkList from './AssetLinkList';\nimport type { ISAMObject } from '../indexPrivate';\nimport { observable } from '../core/decorators';\n\nexport default class AssetLinkManager extends EventEmitter implements ISAMObject {\n\n    private _lists: Set<AssetLinkList> = new Set();\n\n    constructor(\n        public _context: AssetContext\n    ) {\n        super();\n    }\n\n    get _core() {\n        return this._context._core;\n    }\n\n    private _onListChange = () => {\n        // We need to notify the AssetContext whenever a list changes, so it can\n        // update the asset ids it's subscribing to in ONS (if a link is broken,\n        // we still want to get updates even if the asset isn't in the asset pool)\n        this._context._onAssetsChanged();\n    }\n\n    createList(containerAsset?: AdobeAsset): AssetLinkList {\n        const list = new AssetLinkList(this, containerAsset);\n        list.on('change', this._onListChange);\n        this._lists.add(list);\n        this.emit('change');\n        return list;\n    }\n\n    removeList(list: AssetLinkList) {\n        this._lists.delete(list);\n        list.off('change', this._onListChange);\n        this.emit('change');\n    }\n\n    /**\n     * Get an array of all the asset link lists.\n     */\n    @observable\n    get lists(): AssetLinkList[] {\n        return [ ...this._lists ];\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { RelType, IServiceLink, LinkRequirements } from './LinkUtils';\n\nexport type IProjectSpaceSelector =\n    | 'BOOKMARKED'\n    | 'CHILDREN'\n    | 'CONTRIBUTOR_COUNT'\n    | 'FULL'\n    | 'MINIMUM'\n    | 'REPOSITORY_NAME'\n    | 'ROLE';\n\nexport interface IProjectsTeamLinks {\n    [RelType.PRIMARY]: IServiceLink,\n    [RelType.WORKSPACES_CREATE]: IServiceLink,\n    [RelType.WORKSPACES_PAGE]: IServiceLink,\n    [RelType.TEAMS_DISCARD]: IServiceLink,\n    [RelType.TEAMS_RESTORE]: IServiceLink,\n    [RelType.TEAMS_RENAME]: IServiceLink,\n    [RelType.TEAMS_PROPERTIES]: IServiceLink,\n    [RelType.TEAMS_PRIMARY]: IServiceLink\n}\n\nexport interface IProjectsOrgRepository {\n    repositoryId: string;\n}\n\nexport interface IProjectsTeam {\n    repositoryId: string;\n    repositoryName: string;\n    repositoryOwner: {\n        id: string,\n        type: string,\n        email?: string\n    };\n    collaboratorRole: string;\n    _links: IProjectsTeamLinks;\n    id: string;\n    name: string;\n    state: string;\n    createDate: string;\n    createdBy: string;\n    description?: string;\n    role: string;\n}\n\nexport type IProjectsTeamState =\n    | 'active'\n    | 'discarded';\n\nexport type IProjectsTeamsOrderBy =\n    | 'name'\n    | 'createDate';\n\nexport interface IProjectsTeamsLinks {\n    [RelType.TEAMS_CREATE]: IServiceLink,\n    [RelType.GENERIC_PAGE]: IServiceLink\n}\n\nexport interface IProjectsSpaceLinks {\n    [RelType.PRIMARY]: IServiceLink,\n    [RelType.DISCARD]: IServiceLink,\n    [RelType.RESTORE]: IServiceLink,\n    [RelType.WORKSPACES_PRIMARY]: IServiceLink\n}\n\n// Child name 'libraries'\nexport interface IProjectSpaceLibrariesChildLinks {\n    [RelType.PROJECTS_LIBRARIES_PAGE]: IServiceLink,\n    [RelType.PROJECTS_LIBRARIES_CREATE]: IServiceLink,\n    [RelType.PROJECTS_LIBRARIES_BATCH]: IServiceLink,\n}\n\n// Child name 'outputs'\nexport interface IProjectSpaceOutputsChildLinks {\n    [RelType.PRIMARY]: IServiceLink,\n    [RelType.PAGE]: IServiceLink,\n}\n\n// Child name 'working_files'\nexport interface IProjectSpaceWorkingFilesChildLinks {\n    [RelType.PRIMARY]: IServiceLink,\n    [RelType.PAGE]: IServiceLink,\n    [RelType.CREATE]: IServiceLink\n}\n\nexport type IProjectsSpaceChildLinks  = IProjectSpaceLibrariesChildLinks | IProjectSpaceOutputsChildLinks | IProjectSpaceWorkingFilesChildLinks;\n\nexport interface IProjectsSpacesLinks {\n    [RelType.GENERIC_PAGE]: IServiceLink;\n}\n\nexport interface IWorkspacesIndexLinks {\n    [RelType.WORKSPACES_CONTEXT]: IServiceLink,\n    [RelType.TEAMS_PAGE]: IServiceLink,\n    [RelType.WORKSPACES_PRIMARY]: IServiceLink,\n    [RelType.WORKSPACES_PAGE]: IServiceLink,\n    [RelType.REPOSITORIES_PAGE]: IServiceLink,\n    [RelType.TEAMS_CREATE]: IServiceLink,\n    [RelType.TEAM_PROVISION]: IServiceLink,\n    [RelType.WORKSPACES_BOOKMARKS_BATCH]: IServiceLink\n}\n\nexport const WORKSPACE_INDEX_LINKS: LinkRequirements = {\n    [RelType.WORKSPACES_CONTEXT]: [],\n    [RelType.TEAMS_PAGE]: [ 'start', 'limit' ],\n    [RelType.WORKSPACES_PRIMARY]: [ 'id', 'selector' ],\n    [RelType.WORKSPACES_PAGE]: [ 'orderBy', 'start', 'limit', 'teamId', 'bookmarkFilter', 'teamAccess' ],\n    [RelType.REPOSITORIES_PAGE]: [],\n    [RelType.TEAMS_CREATE]: [],\n    [RelType.TEAM_PROVISION]: [],\n    [RelType.WORKSPACES_BOOKMARKS_BATCH]: []\n};\n\nexport interface IProjectsPageSpec {\n    start: number;\n    limit: number;\n    totalLimit: number;\n}\n\nexport interface IProjectsOrgRepositoriesResponse {\n    repositories: IProjectsOrgRepository[];\n}\n\nexport interface IProjectsTeamsResponse {\n    teams: IProjectsTeam[],\n    pageSpec: IProjectsPageSpec,\n    _links: IProjectsTeamsLinks\n}\n\nexport type IProjectSpaceAccess =\n    | 'private'\n    | 'team';\n\nexport type IProjectsSpaceChildName =\n    | 'canvases'\n    | 'libraries'\n    | 'outputs'\n    | 'resources'\n    | 'working_files';\n\nexport type IProjectsSpaceState =\n    | 'active'\n    | 'archived'\n    | 'in_progress';\n\n\nexport interface IProjectsSpaceChild {\n    id: string;\n    name: IProjectsSpaceChildName;\n    _links: IProjectsSpaceChildLinks;\n}\n\nexport interface IProjectsSpace {\n    etag: string;\n    access: IProjectSpaceAccess;\n    description: string;\n    children: IProjectsSpaceChild[];\n    state: IProjectsSpaceState;\n    thumbnail: string;\n\n    directoryType: string;\n    pathName: string;\n\n    createdDate: string;\n    modifiedDate: string;\n\n    isProject: boolean;\n\n    role: string;\n    contributorCount: number;\n    version: number;\n    repositoryId: string;\n    repositoryName: string;\n    teamId: string;\n    teamName: string;\n    bookmarked: boolean;\n    color: string;\n\n    _links: IProjectsSpaceLinks;\n    id: string;\n    name: string;\n}\n\nexport interface IProjectsSpacesResponse {\n    projects: IProjectsSpace[];\n    pageSpec: IProjectsPageSpec,\n    _links: IProjectsSpacesLinks\n}\n\nexport interface IProjectsTeamPropertiesResponse {\n    description?: string;\n}\n\nexport type IProjectsSpaceOrderBy =\n    | 'name'\n    | 'createdDate';\n\nexport interface IProjectsSpaceResponse extends IProjectsSpace {\n}\n\nexport interface IWorkspacesIndexResponse {\n    _links: IWorkspacesIndexLinks\n}\n\nexport interface IProjectsTeamCreateQuery extends IProjectsTeamCreateData {\n    repositoryId: string;\n}\n\nexport interface IProjectsTeamCreateData {\n    name: string;\n}\n\nexport interface IProjectsTeamCreateResponse extends IProjectsTeam {\n}\n\nexport interface IProjectsTeamProvisionResponse extends IProjectsTeam {\n}\n\nexport type IProjectsBookmarkOpType = 'ADD' | 'REMOVE';\nexport interface IProjectsBookmarkOpsData {\n    op: IProjectsBookmarkOpType;\n    items: {\n        projectUrn: string;\n        userId: string;\n    }[];\n}\nexport interface IProjectsBookmarkBatchResponse {\n    responses: {\n        status: number;\n        request: {\n            projectUrn: string;\n        };\n    }[];\n}\n\nexport type IProjectCreateDataAccess =\n    | 'private'\n    | 'team';\n\nexport interface IProjectsCreateData {\n    name: string;\n    description: string;\n    color: string;\n    access: IProjectCreateDataAccess;\n}\n\nexport interface IProjectsCreateQuery extends IProjectsCreateData {\n    parentId: string;\n}\n\nexport interface IProjectsSpaceContextQuery {\n    'repo:assetId': string;\n}\n\nexport type IProjectsSpaceContextRequest = IProjectsSpaceContextQuery[];\n\nexport interface IProjectsSpaceContextResponseItem {\n    body: IProjectsSpace,\n    request: IProjectsSpaceContextQuery,\n    status: number;\n}\n\nexport interface IProjectsSpaceContextResponse {\n    _links: {},\n    responses: IProjectsSpaceContextResponseItem[]\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\nimport type jsonpatch from 'json-patch';\n\nimport { IOrderDirection } from '../core/ItemOrder';\nimport InterfaceBase from './InterfaceBase';\nimport {\n    IProjectsTeamsResponse,\n    IProjectsSpacesResponse,\n    IProjectsSpaceOrderBy,\n    IProjectsSpaceResponse,\n    IProjectsSpaceLinks,\n    IProjectsTeamCreateResponse,\n    IWorkspacesIndexLinks,\n    IProjectsTeamsOrderBy,\n    IWorkspacesIndexResponse,\n    WORKSPACE_INDEX_LINKS,\n    IProjectsTeamProvisionResponse,\n    IProjectsBookmarkOpsData,\n    IProjectsSpaceContextRequest,\n    IProjectsSpaceContextResponse,\n    IProjectsBookmarkBatchResponse,\n    IProjectsOrgRepositoriesResponse,\n    IProjectSpaceSelector,\n    IProjectsTeamLinks,\n    IProjectsCreateQuery,\n    IProjectsTeamCreateQuery,\n    IProjectsTeamState,\n    IProjectsTeamPropertiesResponse\n} from './WorkspacesModel';\nimport {\n    getURLFromLinks,\n    HeaderMap,\n    JSON_MIME_TYPE,\n    JSON_PATCH_MIME_TYPE,\n    RelType,\n    validateLinks\n} from './LinkUtils';\nimport { cache, key } from '../core/decorators';\n\n// Team provisioning can return both 200 and 201 depending on if\n// the user already had the team created or not. We check for this ahead of time,\n// but there is a chance the user has a pending or simultaneous call to provision\n// the team from a different tab or application. In SAM we don't actually\n// care about 200 or 201, but we want to make sure they are both valid codes.\nconst TEAM_PROVISION_SUCCESS_CODES = [ 200, 201 ];\n\nexport const SPACE_FULL_SELECTOR: IProjectSpaceSelector[] = [ 'FULL' ];\n\ntype IPageOptions = {\n    start: number;\n    limit: number;\n}\n\nexport interface TeamsListingOptions extends IListingOptions<IProjectsTeamsOrderBy> {\n    state?: IProjectsTeamState;\n    nameContains?: string;\n}\n\ninterface IListingOptions<IOrderField> extends IPageOptions {\n    orderDirection: IOrderDirection;\n    orderBy: IOrderField;\n}\n\nexport interface SpacesListingOptions extends IListingOptions<IProjectsSpaceOrderBy> {\n    bookmarked: boolean;\n    teamID?: string;\n    teamAccess?: boolean;\n}\n\nconst DefaultTeamListingOptions: TeamsListingOptions = {\n    start: 0,\n    limit: 0,\n    orderDirection: 'ascending',\n    orderBy: 'name'\n};\n\nconst DefaultSpacesListingOptions: SpacesListingOptions = {\n    orderDirection: 'ascending',\n    orderBy: 'name',\n    bookmarked: false,\n    teamID: undefined,\n    start: 0,\n    limit: 0\n};\n\nfunction getDefaultOptions<OptionTypes>(Defaults: OptionTypes, options?: Partial<OptionTypes>): OptionTypes {\n    return Object.assign({}, Defaults, options);\n}\n\nfunction getDirectionValue<IOrderField>(userOptions: IListingOptions<IOrderField>) {\n    const directionFlag = userOptions.orderDirection === 'ascending' ? '+' : '-';\n    return directionFlag + userOptions.orderBy;\n}\n\nfunction createPageTemplate(options: IPageOptions) {\n    const templateValues: any = {};\n    if (options.start) {\n        templateValues.start = options.start;\n    }\n    if (options.limit) {\n        templateValues.limit = options.limit;\n    }\n    return templateValues;\n}\n\nexport function getTeamListingPath(links: IWorkspacesIndexLinks, options?: Partial<TeamsListingOptions>): string {\n    const userOptions = getDefaultOptions(DefaultTeamListingOptions, options);\n    const templateValues = createPageTemplate(userOptions);\n    templateValues.orderBy = getDirectionValue(userOptions);\n    templateValues.nameContains = userOptions.nameContains;\n    templateValues.state = userOptions.state;\n    return getURLFromLinks(links, RelType.TEAMS_PAGE, templateValues);\n}\n\nexport function getSpacesListingPath(links: IWorkspacesIndexLinks, options?: Partial<SpacesListingOptions>): string {\n    const userOptions = getDefaultOptions(DefaultSpacesListingOptions, options);\n    const templateValues: any = createPageTemplate(userOptions);\n    templateValues.orderBy = getDirectionValue(userOptions);\n    // The service sets bookmarkFilter to \"true\" by default, so pass \"false\" if bookmarked is false or undefined.\n    if (!userOptions.bookmarked) {\n        templateValues.bookmarkFilter = false;\n    }\n    // The only value that is implemented by the server is teamAccess=undefined or teamAccess=false.\n    // teamAccess=undefined -> all spaces are returned\n    // teamAccess=false -> returns only the spaces that are from teams the user is not part of.\n    if (userOptions.teamAccess === false) {\n        templateValues.teamAccess = false;\n    }\n    const { teamID } = userOptions;\n    if (teamID) {\n        templateValues.teamId = teamID;\n    }\n    return getURLFromLinks(links, RelType.WORKSPACES_PAGE, templateValues);\n}\n\nfunction validateRequiredProjectLinks(links: any) {\n    return validateLinks(links, WORKSPACE_INDEX_LINKS);\n}\n\nexport default class WorkspacesInterface extends InterfaceBase {\n\n    private _getHeaders(contentType?: string): HeaderMap {\n        const headers: HeaderMap = {\n            'x-service-features': 'CanvasMigration',\n            // NOTE: [SAM-1222] disabling cache because /projects/{spaceId} sets an etag header that\n            //      does not change when the user's bookmark preference changes, causing browsers to\n            //      automatically add the etag header on requests and get the cached value of the\n            //      bookmark field rather than the actual value.\n            'Cache-Control': 'no-cache'\n        };\n        if (contentType) {\n            headers['Content-Type'] = contentType;\n        }\n        return headers;\n    }\n\n    @cache(validateRequiredProjectLinks)\n    private async _discoverLinks(@key rootHref: string): Promise<IWorkspacesIndexLinks> {\n        const response: IWorkspacesIndexResponse = await this._getResponse(rootHref, this._getHeaders());\n        return response._links;\n    }\n\n    private _getEndpointHref(endpoint: string): string {\n        return `https://${this._core._environment.endpoints.PROJECTS_HOST}${endpoint}`;\n    }\n\n    async discoverLinks(): Promise<IWorkspacesIndexLinks> {\n        return this._discoverLinks(this._getEndpointHref(`/api/v2/index`));\n    }\n\n    async getTeams(options?: Partial<TeamsListingOptions>): Promise<IProjectsTeamsResponse> {\n        const links = await this.discoverLinks();\n        const url = getTeamListingPath(links, options);\n        return await this._getResponse(url, this._getHeaders());\n    }\n\n    /**\n     * Get repositories where user can create CC Team\n     */\n    async getOrgRepositories(): Promise<IProjectsOrgRepositoriesResponse> {\n        const links = await this.discoverLinks();\n        const url = getURLFromLinks(links, RelType.REPOSITORIES_PAGE, {});\n        return await this._getResponse(url, this._getHeaders());\n    }\n\n    /**\n     * Create a team under /content/assets folder.\n     */\n    async createTeam(data: IProjectsTeamCreateQuery): Promise<IProjectsTeamCreateResponse> {\n        const links = await this.discoverLinks();\n        const url = getURLFromLinks(links, RelType.TEAMS_CREATE, {});\n        const response = await this._doPost(\n            url,\n            this._getHeaders(JSON_MIME_TYPE),\n            JSON.stringify(data));\n        return response.json();\n    }\n\n    /**\n     * Permanently Delete a Team\n     */\n    async permanentlyDeleteTeam(links: IProjectsTeamLinks): Promise<void> {\n        const url = getURLFromLinks(links, RelType.TEAMS_PRIMARY);\n        await this._doDelete(url, this._getHeaders(), [ 204 ]);\n    }\n\n    /**\n     * Archive/Discard Team\n     */\n    async archiveTeam(links: IProjectsTeamLinks): Promise<void> {\n        const url = getURLFromLinks(links, RelType.TEAMS_DISCARD);\n        await this._doPost(url, this._getHeaders(), undefined, [ 204 ]);\n    }\n\n    /**\n     * Restore Team.\n     */\n    async restoreTeam(teamLinks: IProjectsTeamLinks): Promise<void> {\n        const url = getURLFromLinks(teamLinks, RelType.TEAMS_RESTORE);\n        await this._doPost(url, this._getHeaders(), undefined, [ 204 ]);\n    }\n\n    /**\n     * Rename Team.\n     */\n    async renameTeam(teamLinks: IProjectsTeamLinks, name: string): Promise<void> {\n        const url = getURLFromLinks(teamLinks, RelType.TEAMS_RENAME);\n        await this._doPost(url, this._getHeaders(JSON_MIME_TYPE), JSON.stringify({ name }), [ 204 ]);\n    }\n\n    /**\n     * Patch a Team\n     */\n    async patchTeam(teamLinks: IProjectsTeamLinks, data: jsonpatch.OpPatch[]) {\n        const url = getURLFromLinks(teamLinks, RelType.TEAMS_PROPERTIES);\n        await this._doPatch(url, { ...this._getHeaders(JSON_PATCH_MIME_TYPE), 'If-Match': '*' }, JSON.stringify(data), [ 204 ]);\n    }\n\n    /**\n     * Fetches Properties for a team.\n     */\n    async getTeamProperties(teamLinks: IProjectsTeamLinks): Promise<IProjectsTeamPropertiesResponse> {\n        const url = getURLFromLinks(teamLinks, RelType.TEAMS_PROPERTIES);\n        return await this._getResponse(url, this._getHeaders());\n    }\n\n    /**\n     * Provisions a Team folder within User storage for a Type 1 user only. The provisioned team name is in format:\n     * \"Team {{USER_FIRST_NAME}}\" depending on the localization of the requesting user.\n     */\n    async provisionTeam(): Promise<IProjectsTeamProvisionResponse> {\n        const links = await this.discoverLinks();\n        const url = getURLFromLinks(links, RelType.TEAM_PROVISION, {});\n        const response = await this._doPost(url, this._getHeaders(), undefined, TEAM_PROVISION_SUCCESS_CODES);\n        return response.json();\n    }\n\n    async getSpaces(options?: Partial<SpacesListingOptions>): Promise<IProjectsSpacesResponse> {\n        const links = await this.discoverLinks();\n        const url = getSpacesListingPath(links, options);\n        return await this._getResponse(url, this._getHeaders());\n    }\n\n    async getSpace(id: string, selector: IProjectSpaceSelector[] = SPACE_FULL_SELECTOR): Promise<IProjectsSpaceResponse> {\n        const links = await this.discoverLinks();\n        const spaceLink = getURLFromLinks(links, RelType.WORKSPACES_PRIMARY, { id, selector });\n        return await this._getResponse(spaceLink, this._getHeaders());\n    }\n\n    async reloadSpace(spaceLinks: IProjectsSpaceLinks, selector: IProjectSpaceSelector[] = SPACE_FULL_SELECTOR): Promise<IProjectsSpaceResponse> {\n        const spaceLink = getURLFromLinks(spaceLinks, RelType.WORKSPACES_PRIMARY, { selector });\n        return await this._getResponse(spaceLink, this._getHeaders());\n    }\n\n    async bookmarkOp(data: IProjectsBookmarkOpsData): Promise<IProjectsBookmarkBatchResponse> {\n        const links = await this.discoverLinks();\n        const url = getURLFromLinks(links, RelType.WORKSPACES_BOOKMARKS_BATCH);\n        const response = await this._doPost(url, this._getHeaders(JSON_MIME_TYPE), JSON.stringify(data), [ 200 ]);\n        return response.json();\n    }\n\n    async createSpace(teamLinks: IProjectsTeamLinks, data: IProjectsCreateQuery): Promise<IProjectsSpaceResponse> {\n        const url = getURLFromLinks(teamLinks, RelType.WORKSPACES_CREATE);\n        const response = await this._doPost(url, this._getHeaders(JSON_MIME_TYPE), JSON.stringify(data));\n        return response.json();\n    }\n\n    async patchSpace(spaceLinks: IProjectsSpaceLinks, data: jsonpatch.OpPatch[]): Promise<void> {\n        const url = getURLFromLinks(spaceLinks, RelType.WORKSPACES_PRIMARY);\n        await this._doPatch(url, this._getHeaders(JSON_PATCH_MIME_TYPE), JSON.stringify(data), [ 200, 204 ]);\n    }\n\n    async getEnclosingSpaces(data: IProjectsSpaceContextRequest): Promise<IProjectsSpaceContextResponse> {\n        const links = await this.discoverLinks();\n        const url = getURLFromLinks(links, RelType.WORKSPACES_CONTEXT);\n        const response = await this._doPost(url, this._getHeaders(JSON_MIME_TYPE), JSON.stringify(data), [ 200 ]);\n        return response.json();\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { IProjectsSpaceOrderBy } from '../interface/WorkspacesModel';\n\nimport { compareStrings, compareValues, createItemOrderFactory, IComparatorMap } from '../core/ItemOrder';\nimport Space from './Space';\n\nexport type SpaceOrderField =\n    | 'name'\n    | 'created';\n\nexport const OrderFieldToIProjectsSpaceOrderBy: { [key in SpaceOrderField]: IProjectsSpaceOrderBy } = {\n    'name': 'name',\n    'created': 'createdDate',\n};\n\nconst OrderFieldToComparator: IComparatorMap<Space, SpaceOrderField> = {\n    name(a: Space, b: Space): number {\n        return compareStrings(a.name, b.name);\n    },\n    created(a: Space, b: Space): number {\n        return compareValues(a.created, b.created);\n    }\n};\n\nexport default class SpaceOrder extends createItemOrderFactory(OrderFieldToComparator) {\n    static default = new SpaceOrder('ascending', 'name');\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport WorkspaceInterface from '../interface/WorkspacesInterface';\nimport Space, { SpaceUpdater, TeamRole } from './Space';\nimport { IItemLoader, IItemLoaderOptions, ILoadedPage, ILoadNextPage } from '../core/ItemLoader';\nimport ItemPool from '../core/ItemPool';\nimport { OrderFieldToIProjectsSpaceOrderBy } from './SpaceOrder';\nimport SpaceFilter from './SpaceFilter';\nimport { SpaceConfig } from './SpaceSource';\nimport SAMError, { SAMErrorCode } from '../core/SAMError';\nimport { clearLastReloadError } from '../core/InternalProperties';\n\nexport type GetTeamRoleFn = (teamId: string) => TeamRole;\nexport type TeamRoleGetterFactory = () => Promise<GetTeamRoleFn>;\n\nexport default class SpaceLoader implements IItemLoader<SpaceConfig> {\n\n    constructor(\n        private _spacePool: ItemPool<Space>,\n        private _workspaceInterface: WorkspaceInterface,\n        private _teamRoleGetterFactory: TeamRoleGetterFactory) {\n    }\n\n    supportsFilter(filter?: SpaceFilter): boolean {\n        // - only state === 'active' is supported.\n        // - cannot handle teamRole === 'MEMBER' yet.\n        if (!filter) {\n            // If we don't provide a filter at all, then we cannot use the loader\n            return false;\n        }\n        const { teamRole, state } = filter;\n        return teamRole !== 'MEMBER' && state === 'active';\n    }\n\n    async loadPage(options: IItemLoaderOptions<SpaceConfig>): Promise<ILoadedPage<SpaceConfig>> {\n        return await this._loadPage(options);\n    }\n\n    private async _loadPage(options: IItemLoaderOptions<SpaceConfig>, start?: number): Promise<ILoadedPage<SpaceConfig>> {\n        const { order, filter, limit } = options;\n        const teamRole = (filter as SpaceFilter)?.teamRole;\n        if (teamRole === 'MEMBER') {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'Filtering only for spaces with reamRole MEMBER is not supported.');\n        }\n\n        // We will ignore the update if we had local changes sooner than this timestamp.\n        const latency = this._spacePool._core._environment.getValue('PROJECTS_LIST_UPDATE_LATENCY');\n        const mostRecentValidMutation = Date.now() - latency;\n\n        const resultPromise = this._workspaceInterface.getSpaces({\n            orderBy: OrderFieldToIProjectsSpaceOrderBy[order.field],\n            orderDirection: order.direction,\n            teamID: (filter as SpaceFilter)?.teamID,\n            bookmarked: (filter as SpaceFilter)?.bookmarked,\n            teamAccess: teamRole === 'NONE' ? false : undefined,\n            start,\n            limit\n        });\n\n        // If the teamRole was used in the request, then we trust the server resolved the correct value for the filter.\n        // If we don't have teamRole in the filter, then we will lookup in the client side list of teams. If the teams are not\n        // loaded yet, we will just fallback to 'NONE' until the teams are eventually loaded.\n        // The team pool delegate in the space context will update the team role once the teams are known.\n        const teamRoleFn = teamRole ? (() => teamRole) : await this._teamRoleGetterFactory();\n\n        // Wait for the results after we start loading the role factory above. That will make the requests run in parallel when needed.\n        const result = await resultPromise;\n\n        const session = this._spacePool.createLoaderUpdateSession(mostRecentValidMutation);\n\n        // Inject the teamRole in all the items that we load.\n        const items = SpaceUpdater.updateRemoteItems(session, result.projects.map((item) => {\n            return {\n                ...item,\n                teamRole: teamRoleFn(item.teamId),\n\n                // The `/projects` listing endpoint doesn't add the state property,\n                // but it only returns active spaces anyways. We can inject\n                // the property automatically to make sure any restored space,\n                // gets back into the correct lists.\n                state: 'active'\n            };\n        }));\n\n        // Make sure we ignore any reload errors now that we have refreshed the listing of the space.\n        for (const item of items) {\n            item[clearLastReloadError]();\n        }\n\n        session.commit();\n\n        // Check if we have another page to load.\n        let loadNextPage: ILoadNextPage<SpaceConfig> | undefined;\n\n        // Note that it is important to skip the entire page size,\n        // even if we didn't get any items back.\n        // The service is based on USS which might filter out items\n        // on the fly when they are retrieved instead of ahead of time\n        // when the total limit is computed. As a result, some pages might\n        // even come in empty.\n        const nextStart = result.pageSpec.start + result.pageSpec.limit;\n        if (nextStart < result.pageSpec.totalLimit) {\n            loadNextPage = (options: IItemLoaderOptions<SpaceConfig>) =>\n                this._loadPage(options, nextStart);\n        }\n\n        return {\n            items,\n            total: result.pageSpec.totalLimit,\n            loadNextPage,\n            mostRecentValidMutation\n        };\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nexport enum AvatarSizes {\n    Size50 = '50',\n    Size100 = '100',\n    Size115 = '115',\n    Size230 = '230',\n    Size138 = '138',\n    Size276 = '276'\n}\n\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ItemBase from '../core/ItemBase';\nimport PropertyUpdater from '../core/PropertyUpdater';\nimport ItemUpdater from '../core/ItemUpdater';\nimport { IComputedInvitationCollaborator, Role, InheritanceType, CollaboratorType, ICollaboratorAdditionalData } from '../interface/InvitationModel';\nimport { observable } from '../core/decorators';\nimport { SharedCollaboratorChangedEvent } from '../indexPrivate';\nimport { AvatarSizes } from '../collaboration/AvatarSizes';\nimport oneTimeWarning from '../utils/oneTimeWarning';\n\nexport type CollaboratorRole = Role;\nexport const CollaboratorRoles: CollaboratorRole[]  = [ 'owner', 'viewer', 'editor', 'none' ];\nconst ContributorRoles: CollaboratorRole[] = [ 'editor', 'owner' ];\n\nexport type { CollaboratorType } from '../interface/InvitationModel';\nconst CollaboratorTypes: CollaboratorType[] = [\n    'imsUser',\n    'addressBookGroup',\n    'addressBookContact',\n    'predefinedPrincipal',\n    'imsGroup',\n];\n\n// deep means that resource members have permission on the resource and all of its children.\n// deep_override is for admins and owners in user storage, meaning the same as deep but it cannot be denied.\n// If an admin is invited to collaborate, then they have both [deep_override, deep]\nexport type { InheritanceType } from '../interface/InvitationModel';\nexport const InheritanceTypes: InheritanceType[] = [ 'self', 'deep', 'deep_override' ];\n\n/**\n * A Collaborator represents the relationship between the user and the\n * asset. Users have other Profile information that is unique to the user.\n *\n * Eventually we will offer a Profile class with a Profile context that\n * offers information unrelated to an asset.\n */\nexport default class Collaborator extends ItemBase {\n    private _role: CollaboratorRole = 'viewer';\n    private _type: CollaboratorType = 'imsUser';\n    private _inheritances?: InheritanceType[];\n    private _additionalData?: ICollaboratorAdditionalData;\n    private _isDirect: boolean = false;\n    private _assetID: string = '';\n    private _canShare: boolean = false;\n\n    get assetId(): string {\n        return this._assetID;\n    }\n\n    /**\n     * Returns false if the Behance/PPS service\n     * was unable to return a profile for this collaborator.\n     * @deprecated -- clients should just check that profile info is not undefined (SAM-3420). Will be removed on or\n     *                after 2024-10-01\n     */\n    get hasProfile(): boolean | undefined {\n        oneTimeWarning('Collaborator.hasProfile', 'Collaborator.hasProfile is deprecated and will be'\n            + ' removed on or after 2024-10-01');\n        // This used to return the private property _hasProfile, but since _hasProfile was never\n        // set correctly, we're just returning undefined here to avoid confusion.\n        // This getter will eventually be removed by SAM-3420.\n        return undefined;\n    }\n\n    // `imsUser id` if invited via user email directly\n    // `addressBookContact id` (i.e urn.ab:contact:...) if members are invited via shareSheet's recommend dropdown\n    // `addressBookGroup id` (i.e urn:ab:group:...) if groups are invited via shareSheet's recommend dropdown\n    get collaboratorID(): string {\n        return this.id;\n    }\n\n    // Track the imsUser id\n    // - Same as 'id' for direct invited collaborators\n    // - Represents the collaborator actual ims id for addressBookContact, which is useful to check (compare ims id)\n    // for thing like if the logged in user is in the collaborator list ,...\n    // - undefined for 'addressBookGroup'\n    get imsUserId(): string | undefined {\n        const type = this._type;\n        if (type === 'imsUser') {\n            return this.id;\n        }\n\n        return this._additionalData?.linkedIdentity;\n    }\n\n    @observable(SharedCollaboratorChangedEvent)\n    // Collaborator email\n    get email(): string | undefined {\n        return this._additionalData?.email;\n    }\n\n    // Collaborator name for imsUser and addressBookContact\n    // Group name for addressBookGroup\n    @observable(SharedCollaboratorChangedEvent)\n    get name(): string | undefined {\n        const additionalData = this._additionalData;\n        return (additionalData?.displayName\n            ?? additionalData?.groupName\n            ?? additionalData?.organizationName);\n    }\n\n    get role(): CollaboratorRole {\n        return this._role;\n    }\n\n    get type(): CollaboratorType {\n        return this._type;\n    }\n\n    get inheritances(): InheritanceType[] | undefined {\n        return this._inheritances;\n    }\n\n    get isDirect() {\n        return this._isDirect;\n    }\n\n    get hasContributorRole() {\n        return ContributorRoles.includes(this._role);\n    }\n\n    get hasName() {\n        return !!this.name;\n    }\n\n    get invited() {\n        return this._inheritances?.includes('deep');\n    }\n\n    get isAdmin() {\n        return this._inheritances?.includes('deep_override');\n    }\n\n    get canShare(): boolean {\n        return this._canShare;\n    }\n\n    /**\n     * Checks if this collaborator is the user that is currently logged in.\n     *\n     * **NOTE**: It is not safe to assume that Collaborator.id === currentUserId\n     *           will work. Always use Collaborator.isCurrentUser instead.\n     */\n    get isCurrentUser() {\n        return this._core._environment.getValue('USER_ID') === this.imsUserId;\n    }\n\n    /**\n     * Returns a standard size of 138x138\n     */\n    @observable(SharedCollaboratorChangedEvent)\n    get avatarURL(): string {\n        return this.getAvatarURL(AvatarSizes.Size138);\n    }\n\n    @observable(SharedCollaboratorChangedEvent)\n    getAvatarURL(size: AvatarSizes): string {\n        return this._additionalData?.images?.[size] ?? '';\n    }\n}\n\nexport const CollaboratorUpdater = new ItemUpdater<Collaborator, Partial<IComputedInvitationCollaborator>>({\n    localItemType: Collaborator,\n    remoteIdProperty: 'id',\n    changeEvent: SharedCollaboratorChangedEvent,\n    propertyUpdater: new PropertyUpdater({\n        '_type': { name: 'type', choices: CollaboratorTypes },\n        '_role': { name: 'role', choices: CollaboratorRoles },\n        '_inheritances': { name: 'inheritances', isArray: true, choices: InheritanceTypes },\n        '_additionalData': { name: 'additionalData', format: 'object' },\n        '_isDirect': { name: 'isDirect', format: 'boolean' },\n        '_avatarURLs': { name: 'avatarURLs', format: 'object' },\n        '_assetID': { name: 'assetID', format: 'string' },\n        '_canShare': { name: 'canShare', format: 'boolean' }\n    })\n});\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { observable } from '../core/decorators';\nimport ShareableItem from '../collaboration/ShareableItem';\nimport type { IProjectsCreateData, IProjectsTeam, IProjectsTeamLinks, IProjectsTeamState } from '../interface/WorkspacesModel';\nimport PropertyUpdater from '../core/PropertyUpdater';\nimport ItemUpdater from '../core/ItemUpdater';\nimport { CollaboratorRoles, CollaboratorRole } from '../collaboration/Collaborator';\nimport type Space from './Space';\nimport { ITeamUpdate } from './SpaceContext';\nimport oneTimeWarning from '../utils/oneTimeWarning';\n\nexport type RepositoryOwnerType =\n    | 'org'\n    | 'user';\n\nconst RepositoryOwnerTypes: RepositoryOwnerType[]  = [ 'org', 'user' ];\n\nexport type TeamState = IProjectsTeamState;\nconst TeamStates: TeamState[] = [ 'active', 'discarded' ];\n\n/**\n * Represents the notion of a \"team\" of Adobe account\n * holders that collaborate on projects.\n *\n * @example\n * // Instatiate list and load contents\n * const teamsList = core.spaceContext.getTeams().getList(...options);\n * await waitForListLoad(teamsList);\n *\n * // Get the first team in the list as an example.\n * const team = teamsList.items[0];\n *\n * // Perform some actions on a team.\n * await team.rename('newName');\n * await team.archive();\n * await team.restore();\n *\n * // log the teamID\n * console.log(team.teamID)\n *\n */\nexport default class Team extends ShareableItem {\n\n    private _created: Date = new Date();\n    private _createdBy: string = '';\n    private _description?: string;\n    private _name: string = '';\n    private _repositoryID: string = '';\n    private _repositoryName: string = '';\n    private _repositoryOwnerID: string | undefined;\n    private _repositoryOwnerEmail: string | undefined;\n    private _repositoryOwnerType: RepositoryOwnerType | undefined;\n    private _state: TeamState = 'active';\n    private _role: CollaboratorRole = 'none';\n    private __links: IProjectsTeamLinks | undefined;\n\n    /**\n     * The unique id that represents the team.\n     */\n    get teamID(): string {\n        return this.id;\n    }\n\n    @observable\n    get created(): Date {\n        return this._created;\n    }\n\n    @observable\n    get createdBy(): string {\n        return this._createdBy;\n    }\n\n    /**\n     * The user-visible name assigned to the team\n     */\n    @observable\n    get name(): string {\n        return this._name;\n    }\n\n    /**\n     * The description property of this team.\n     *\n     * @note Only available after a call to ensureDescription()\n     */\n    @observable\n    get description(): string | undefined {\n        return this._description;\n    }\n\n    /**\n     * The unique id of the repository that owns this team\n     */\n    @observable\n    get repositoryID(): string {\n        return this._repositoryID;\n    }\n\n    /**\n     * The user-visible name of the repository (i.e. the organization name)\n     * that owns this team\n     */\n    @observable\n    get repositoryName(): string {\n        return this._repositoryName;\n    }\n\n    @observable\n    get repositoryOwnerID(): string | undefined {\n        return this._repositoryOwnerID;\n    }\n\n    @observable\n    get repositoryOwnerEmail(): string | undefined {\n        return this._repositoryOwnerEmail;\n    }\n\n    @observable\n    get repositoryOwnerType(): RepositoryOwnerType | undefined {\n        return this._repositoryOwnerType;\n    }\n\n    /**\n     * The role or permissions of the user for this team.\n     * 'editor' and 'owner' are combined for backward\n     * compatibility.\n     * @deprecated Use 'role' instead.\n     */\n    @observable\n    get collaboratorRole(): CollaboratorRole {\n        oneTimeWarning(\n            'collaboratorRoleDeprecated',\n            'The property collaboratorRole has been depecrated in favor of role.'\n        );\n        return this._role === 'owner'\n            ? 'editor' : this._role;\n    }\n\n    /**\n     * The role or permissions of the user for this team.\n     * can be any of the following values: 'editor', 'viewer'\n     * 'owner'.\n     *\n     * @note The 'viewer' role is not set in any workflow currently.\n     */\n    @observable\n    get role(): CollaboratorRole {\n        return this._role;\n    }\n\n    @observable\n    get state(): TeamState {\n        return this._state;\n    }\n\n    /**\n     * The links provided by the service for this team.\n     *\n     * @private\n     */\n    @observable\n    get _links(): IProjectsTeamLinks | undefined {\n        return this.__links;\n    }\n\n    /**\n     * Archive/Discard team\n     *\n     * @NOTE Currently there are some inconsistencies in how the API's are\n     * named within Projects\n     * Team API uses “discarded”, Project API uses “archived”\n     */\n    async archive(): Promise<void> {\n        await this._core.spaceContext.archiveTeam(this);\n    }\n\n    /**\n     * Create a space for this team.\n     *\n     * @param data {IProjectsCreateData}\n     */\n    async createSpace(data: IProjectsCreateData): Promise<Space> {\n        return await this._core.spaceContext.createSpace(this, data);\n    }\n\n    /**\n     * Permanently Delete a Team that has already been discarded.\n     *\n     */\n    async permanentlyDelete(): Promise<void> {\n        await this._core.spaceContext.permanentlyDeleteTeam(this);\n    }\n\n    /**\n     * Rename this Team.\n     *\n     * @param newName\n     */\n    async rename(newName: string): Promise<void> {\n        await this._core.spaceContext.renameTeam(this, newName);\n    }\n\n    /**\n     * Restore this Team\n     */\n    async restore(): Promise<void> {\n        await this._core.spaceContext.restoreTeam(this);\n    }\n\n    /**\n     * Update properties on this team\n     */\n    async update(data: ITeamUpdate): Promise<void> {\n        await this._core.spaceContext.updateTeam(this, data);\n    }\n\n    /**\n     * Ensures the description is loaded and available\n     * on a team.\n     */\n    async ensureDescription(): Promise<void> {\n        await this._core.spaceContext.loadTeamProperties(this);\n    }\n}\n\nexport const TeamUpdater = new ItemUpdater<Team, Partial<IProjectsTeam>>({\n    localItemType: Team,\n    remoteIdProperty: 'id',\n    propertyUpdater: new PropertyUpdater({\n        '_created': { name: 'createDate', format: 'date' },\n        '_createdBy': 'createdBy',\n        '_description': 'description',\n        '_name': 'name',\n        '_repositoryID': 'repositoryId',\n        '_repositoryName': 'repositoryName',\n        '_repositoryOwnerID': 'repositoryOwner.id',\n        '_repositoryOwnerEmail': 'repositoryOwner.email',\n        '_repositoryOwnerType': { name: 'repositoryOwner.type', choices: RepositoryOwnerTypes },\n        '_role': { name: 'role', choices: CollaboratorRoles },\n        '_state': { name: 'state', choices: TeamStates },\n        '__links': { name: '_links', format: 'object' }\n    })\n});\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { IProjectsTeamsOrderBy } from '../interface/WorkspacesModel';\n\nimport { compareStrings, compareValues, createItemOrderFactory, IComparatorMap } from '../core/ItemOrder';\nimport Team from './Team';\n\nexport type TeamOrderField =\n    | 'name'\n    | 'created';\n\nexport const OrderFieldToIProjectsTeamsOrderBy: { [key in TeamOrderField]: IProjectsTeamsOrderBy } = {\n    'name': 'name',\n    'created': 'createDate',\n};\n\nconst OrderFieldToComparator: IComparatorMap<Team, TeamOrderField> = {\n    name(a: Team, b: Team): number {\n        return compareStrings(a.name, b.name);\n    },\n    created(a: Team, b: Team): number {\n        return compareValues(a.created, b.created);\n    }\n};\n\nexport default class TeamOrder extends createItemOrderFactory(OrderFieldToComparator) {\n    static default = new TeamOrder('ascending', 'name');\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ProjectInterface from '../interface/WorkspacesInterface';\nimport Team, { TeamUpdater } from './Team';\nimport { IItemLoader, IItemLoaderOptions, ILoadedPage, ILoadNextPage } from '../core/ItemLoader';\nimport ItemPool from '../core/ItemPool';\nimport { TeamConfig } from './TeamSource';\nimport { OrderFieldToIProjectsTeamsOrderBy } from './TeamOrder';\nimport TeamFilter from './TeamFilter';\n\nexport default class TeamLoader implements IItemLoader<TeamConfig> {\n\n    constructor(\n        private _teamPool: ItemPool<Team>,\n        private _projectInterface: ProjectInterface) {\n    }\n\n    async loadPage(options: IItemLoaderOptions<TeamConfig>): Promise<ILoadedPage<TeamConfig>> {\n        return await this._loadPage(options);\n    }\n\n    private async _loadPage(options: IItemLoaderOptions<TeamConfig>, start?: number): Promise<ILoadedPage<TeamConfig>> {\n        const { limit, filter, order } = options;\n\n        // We will ignore the update if we had local changes sooner than this timestamp.\n        const latency = this._teamPool._core._environment.getValue('PROJECTS_LIST_UPDATE_LATENCY');\n        const mostRecentValidMutation = Date.now() - latency;\n\n        const result = await this._projectInterface.getTeams({\n            orderBy: OrderFieldToIProjectsTeamsOrderBy[order.field],\n            orderDirection: order.direction,\n            start,\n            limit,\n            nameContains: (filter as TeamFilter)?.nameContains,\n            state: (filter as TeamFilter)?.state\n        });\n\n        const session = this._teamPool.createLoaderUpdateSession(mostRecentValidMutation);\n        const items = TeamUpdater.updateRemoteItems(session, result.teams);\n        session.commit();\n\n        // Check if we have another page to load.\n        let loadNextPage: ILoadNextPage<TeamConfig> | undefined;\n\n        // Note that it is important to skip the entire page size,\n        // even if we didn't get any items back.\n        // The service is based on USS which might filter out items\n        // on the fly when they are retrieved instead of ahead of time\n        // when the total limit is computed. As a result, some pages might\n        // even come in empty.\n        const nextStart = result.pageSpec.start + result.pageSpec.limit;\n        if (nextStart < result.pageSpec.totalLimit) {\n            loadNextPage = (options: IItemLoaderOptions<TeamConfig>) =>\n                this._loadPage(options, nextStart);\n        }\n\n        return {\n            items,\n            total: result.pageSpec.totalLimit,\n            loadNextPage,\n            mostRecentValidMutation\n        };\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { observable } from '../core/decorators';\nimport ItemBase from '../core/ItemBase';\nimport PropertyUpdater from '../core/PropertyUpdater';\nimport ItemUpdater from '../core/ItemUpdater';\nimport { IProjectsOrgRepository, IProjectsTeamCreateData } from '../interface/WorkspacesModel';\nimport Team from './Team';\n\nexport default class OrgRepository extends ItemBase {\n\n    private _repositoryID: string = '';\n\n    @observable\n    get repositoryID(): string {\n        return this._repositoryID;\n    }\n\n    /**\n     * Create a team under /content/assets folder.\n     */\n    async createTeam(data: IProjectsTeamCreateData): Promise<Team> {\n        return await this._core.spaceContext.createTeam(this, data);\n    }\n}\n\nexport const OrgRepositoryUpdater = new ItemUpdater<OrgRepository, Partial<IProjectsOrgRepository>>({\n    localItemType: OrgRepository,\n    remoteIdProperty: 'repositoryId',\n    propertyUpdater: new PropertyUpdater({\n        '_repositoryID': 'repositoryId'\n    })\n});\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { IItemLoader, ILoadedPage } from '../core/ItemLoader';\nimport ItemPool from '../core/ItemPool';\nimport ProjectInterface from '../interface/WorkspacesInterface';\nimport OrgRepository, { OrgRepositoryUpdater } from './OrgRepository';\nimport { OrgRepositoryConfig } from './OrgRepositorySource';\n\nexport default class OrgRepositoryLoader implements IItemLoader<OrgRepositoryConfig> {\n\n    constructor(\n        private _orgRepositoryPool: ItemPool<OrgRepository>,\n        private _projectInterface: ProjectInterface) {\n    }\n\n    async loadPage(): Promise<ILoadedPage<OrgRepositoryConfig>> {\n        const result = await this._projectInterface.getOrgRepositories();\n        const session = this._orgRepositoryPool.createLoaderUpdateSession(Date.now());\n\n        const items = OrgRepositoryUpdater.updateRemoteItems(session, result.repositories);\n        session.commit();\n\n        return { items };\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n\nimport type { IItemFilter, ItemFilterRelation } from '../core/ItemFilter';\nimport { default as Team, TeamState } from './Team';\n\n\nexport interface ITeamFilterOptions {\n    readonly nameContains?: string;\n    readonly state?: TeamState;\n}\n\nenum StringRelationResult {\n    DISJOINTED,\n    SUPERSET,\n    SUBSET,\n    UNKNOWN,\n    IDENTICAL\n}\n\nconst whitespaceFilter = (w: string) => /\\S/.test(w);\n\n/**\n * Available when M2 is released, M1 currently\n * does not support this filter.\n * @experimental\n */\nexport default class TeamFilter implements IItemFilter<Team> {\n    private _nameContains?: string;\n    private _state?: TeamState;\n\n    constructor(options?: Partial<ITeamFilterOptions>) {\n        this._nameContains = options?.nameContains;\n        this._state = options?.state;\n    }\n\n    static TeamsContainingName(name: string) {\n        return new TeamFilter({\n            nameContains: name\n        });\n    }\n\n    static ActiveTeams = new TeamFilter({\n        state: 'active'\n    });\n\n    static DiscardedTeams = new TeamFilter({\n        state: 'discarded'\n    });\n\n    get nameContains(): string | undefined {\n        return this._nameContains;\n    }\n\n    get state(): TeamState | undefined {\n        return this._state;\n    }\n\n    get hash(): string {\n        return (this._nameContains ?? 'any-name') + ':'\n            + (this._state ?? 'any-state');\n    }\n\n    private _getRelationToNameContains(name: string, otherName: string): StringRelationResult {\n        if (name === otherName) {\n            return StringRelationResult.IDENTICAL;\n        }\n        const nameTerms = name.toLowerCase()\n            .split(' ').filter(whitespaceFilter).sort();\n        const otherNameTerms = otherName.toLowerCase()\n            .split(' ').filter(whitespaceFilter).sort();\n\n        if (nameTerms.length === 0 && otherNameTerms.length === 0) {\n            return StringRelationResult.IDENTICAL;\n        }\n\n        if (nameTerms.length === 0 || otherNameTerms.length === 0) {\n            return StringRelationResult.DISJOINTED;\n        }\n\n        if (nameTerms.length === otherNameTerms.length\n            && nameTerms.every(\n                (n, i) => n === otherNameTerms[i]\n            )) {\n            return StringRelationResult.IDENTICAL;\n        }\n\n        let subsetMatches = 0;\n        let supersetMatches = 0;\n\n        nameTerms.forEach((nameTerm) => {\n            const findMatch = otherNameTerms.find((otherTerm) => {\n                const superSet = otherTerm.startsWith(nameTerm);\n                const subSet = nameTerm.startsWith(otherTerm);\n                return superSet || subSet;\n            });\n\n            if (findMatch) {\n                if (nameTerm.length <= findMatch.length) {\n                    supersetMatches++;\n                }\n\n                if (nameTerm.length > findMatch.length) {\n                    subsetMatches++;\n                }\n            }\n        });\n\n        if (nameTerms.length === subsetMatches) {\n            return StringRelationResult.SUBSET;\n        }\n\n        if (nameTerms.length === supersetMatches) {\n            return StringRelationResult.SUPERSET;\n        }\n\n        if (subsetMatches === 0 && supersetMatches === 0) {\n            return StringRelationResult.DISJOINTED;\n        }\n\n        return StringRelationResult.UNKNOWN;\n    }\n\n    private _searchTarget(searchString: string, targetString: string): boolean {\n        const searchTerms = searchString.toLowerCase()\n            .split(' ').filter(whitespaceFilter);\n        const targetTerms = targetString.toLowerCase()\n            .split(' ').filter(whitespaceFilter);\n\n        // Empty word or search term\n        if (searchTerms.length === 0 || targetTerms.length === 0) {\n            return false;\n        }\n\n        return searchTerms.every((searchTerm) => {\n            return targetTerms.find((targetTerm) => {\n                return targetTerm.startsWith(searchTerm);\n            });\n        });\n    }\n\n    matches(item: Team): boolean {\n        const state = this._state;\n        if (state && state !== item.state) {\n            return false;\n        }\n\n        const nameContains = this._nameContains;\n        if (nameContains\n            && !this._searchTarget(nameContains, item.name)\n        ) {\n            return false;\n        }\n\n        return true;\n    }\n\n    getRelationToFilter(other: TeamFilter): ItemFilterRelation {\n        let searchMatch;\n        if (this.nameContains && other.nameContains) {\n            searchMatch = this._getRelationToNameContains(this.nameContains, other.nameContains);\n            if (searchMatch === StringRelationResult.DISJOINTED) {\n                return 'disjoint';\n            }\n        }\n\n        if (this.state && other.state && this.state !== other.state) {\n            return 'disjoint';\n        }\n\n        if (!this.state && other.state) {\n            return 'unknown';\n        }\n\n        if (!this.nameContains && other.nameContains) {\n            return 'unknown';\n        }\n\n        if (searchMatch && searchMatch === StringRelationResult.SUPERSET\n            || searchMatch === StringRelationResult.UNKNOWN\n        ) {\n            return 'unknown';\n        }\n\n        //------ All 'unknown' cases must be handled above this line\n        return 'subset';\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport type { IItemFilter, ItemFilterRelation } from '../core/ItemFilter';\nimport type { default as Space, SpaceState, TeamRole } from './Space';\n\nexport interface ISpaceFilterOptions {\n    readonly bookmarked?: boolean;\n    readonly teamID?: string;\n    readonly state?: SpaceState;\n\n    /**\n     * Undefined -> returns all spaces, regardless of the role on the parent team.\n     * 'NONE' -> Returns only the spaces from teams the user IS NOT part of\n     * (ie. the role of the user on those team is none).\n     *\n     * In the future we may add a value of 'MEMBER' to return only the spaces from teams the\n     * user IS part of. However, that feature is not supported by the server at the moment,\n     * so we are not exposing that value yet.\n     */\n    readonly teamRole?: TeamRole;\n}\n\nexport default class SpaceFilter implements IItemFilter<Space> {\n\n    private _bookmarked: boolean = false;\n    private _teamID?: string;\n    private _state?: SpaceState;\n    private _teamRole?: TeamRole;\n\n    constructor(options?: Partial<ISpaceFilterOptions>) {\n        this._bookmarked = Boolean(options?.bookmarked);\n        this._teamID = options?.teamID;\n        this._teamRole = options?.teamRole;\n        this._state = options?.state;\n        this._teamRole = options?.teamRole;\n    }\n\n    static ActiveSpaces = new SpaceFilter({\n        state: 'active'\n    });\n\n    static ArchivedSpaces = new SpaceFilter({\n        state: 'archived'\n    });\n\n    static ActiveBookmarkedSpaces = new SpaceFilter({\n        state: 'active',\n        bookmarked: true\n    });\n\n    static ActiveSpacesFromOtherTeams = new SpaceFilter({\n        state: 'active',\n        teamRole: 'NONE'\n    });\n\n    static ActiveSpacesFromTeam(teamID: string) {\n        return new SpaceFilter({\n            state: 'active',\n            teamID\n        });\n    }\n\n    get bookmarked(): boolean {\n        return this._bookmarked;\n    }\n\n    get teamID(): string | undefined {\n        return this._teamID;\n    }\n\n    get teamRole(): TeamRole | undefined {\n        return this._teamRole;\n    }\n\n    get state(): SpaceState | undefined {\n        return this._state;\n    }\n\n    get hash(): string {\n        return String(this.bookmarked) + ':'\n            + (this.teamID || 'all-teams') + ':'\n            + (this._teamRole ?? 'all-roles') + ':'\n            + (this._state ?? 'any-state');\n    }\n\n    matches(item: Space): boolean {\n        if (this._bookmarked && !item.isBookmarked) {\n            return false;\n        }\n        const teamID = this._teamID;\n        if (teamID && item.teamID !== teamID) {\n            return false;\n        }\n\n        const teamRole = this._teamRole;\n        if (teamRole && item.teamRole !== teamRole) {\n            return false;\n        }\n\n        const state = this._state;\n        if (state && state !== item.state) {\n            return false;\n        }\n\n        return true;\n    }\n\n    getRelationToFilter(other: SpaceFilter): ItemFilterRelation {\n        const otherSpaceFilter = other as SpaceFilter;\n\n        if (this._teamRole !== otherSpaceFilter._teamRole) {\n            if (this._teamRole && otherSpaceFilter._teamRole) {\n                // If both filters specify a completely different teamRole then the\n                // lists are entirely disjoint.\n                return 'disjoint';\n            }\n            // If only one filter specifically looks for the team role, then the other might be\n            // able to borrow some items from it.\n            return 'unknown';\n        }\n\n        if (this.teamID && otherSpaceFilter.teamID && this.teamID !== otherSpaceFilter.teamID) {\n            // Teams are entirely different, no shared elements are expected.\n            return 'disjoint';\n        }\n\n        if (!this.teamID && otherSpaceFilter.teamID) {\n            // If the other list has a teamID and this filter doesn't then\n            // this is list is going to have an unknown final state.\n            return 'unknown';\n        }\n\n        // If the other list filtered for only bookmarked items and this doesn't,\n        // then this is list is going to have an unknown final state.\n        if (!this.bookmarked && other.bookmarked) {\n            return 'unknown';\n        }\n\n        if (this._state !== other._state) {\n            // If both filters expect a state and the states do not match, then\n            // the lists are not going to have any items in common.\n            if (this._state && other._state) {\n                return 'disjoint';\n            }\n            // If only one list expects a specific state and the other can take any state,\n            // then we could possible share some items.\n            return 'unknown';\n        }\n\n        return 'subset';\n    }\n\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport type jsonpatch from 'json-patch';\n\nimport { memoize } from '../core/decorators';\nimport ItemPool, { IItemPoolDelegate, ItemsChangedEvent, ITEMS_CHANGED } from '../core/ItemPool';\nimport { ItemId } from '../core/ItemBase';\nimport ItemSource from '../core/ItemSource';\nimport ProjectInterface, { SPACE_FULL_SELECTOR } from '../interface/WorkspacesInterface';\nimport type { ISAMCorePrivate, ISAMObject } from '../indexPrivate';\nimport type Space from './Space';\nimport { SpaceUpdater } from './Space';\nimport SpaceLoader, { TeamRoleGetterFactory } from './SpaceLoader';\nimport type Team from './Team';\nimport { TeamUpdater } from './Team';\nimport TeamLoader from './TeamLoader';\nimport { TeamConfig, TeamSource } from './TeamSource';\nimport type OrgRepository from './OrgRepository';\nimport OrgRepositoryLoader from './OrgRepositoryLoader';\nimport { OrgRepositorySource } from './OrgRepositorySource';\nimport SAMError, { SAMErrorCode } from '../core/SAMError';\nimport TeamOrder from './TeamOrder';\nimport { IItemList } from '../core/ItemList';\nimport {\n    IProjectsBookmarkOpType,\n    IProjectsCreateData,\n    IWorkspacesIndexLinks,\n    IProjectsSpace,\n    IProjectsBookmarkBatchResponse,\n    IProjectsTeamCreateData,\n    IProjectsTeam\n} from '../interface/WorkspacesModel';\nimport {\n    batchFormatFileName,\n    NameConflictMap,\n    validatePlatformRepoName,\n    updateCachedDescendents,\n    renameFileInPath,\n    AssetRenameMap,\n    getBatchRenamedAssetName\n} from '../assets/AssetUtils';\nimport { SpaceSource } from './SpaceSource';\nimport ItemBase from '../core/ItemBase';\nimport AdobeAsset from '../assets/AdobeAsset';\nimport { reloadSpace } from '../core/InternalProperties';\nimport { IUpdateSession } from '../core/UpdateSession';\nimport { IBatchOperationResult, IOperation, IOperationQuery, RepositoryMetadata } from '../interface/RepositoryModel';\nimport RepositoryInterface from '../interface/RepositoryInterface';\nimport { waitForListLoad } from '../utils/waitForListLoad';\nimport { retryFailedOpsDueToConflict } from '../assets/ConflictRetryHelper';\nimport TeamFilter from './TeamFilter';\nimport SpaceFilter from './SpaceFilter';\nimport EverythingFilter from '../core/EverythingFilter';\nimport ItemList from '../core/ItemList';\n\n// We want to refresh teams only if we didn't get the list in the past 5 minutes.\n// This avoids loading teams again during auto-provisioning in case the client\n// already fetched the teams.\nconst TEAM_REFRESH_TIMEOUT = 5 * 60 * 1000;\n\nfunction createTeamRoleGetter(teams: IItemList<TeamConfig> | ItemList<TeamConfig>) {\n    const map = new Set<string>(teams.items.map((team) => team.id));\n    return (teamID: string) => map.has(teamID) ? 'MEMBER' : 'NONE';\n}\n\nfunction getLinks<LinkTypes>(item: { _links: LinkTypes }) {\n    const links: LinkTypes = item._links;\n    if (!links) {\n        throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'Object has not been loaded correctly, missing \"_links\" property.');\n    }\n    return links!;\n}\n\nexport interface ISpaceUpdate {\n    name?: string;\n    description?: string;\n    color?: string;\n}\n\nexport interface ITeamUpdate {\n    description?: string;\n    name?: string;\n}\n\nexport type IBatchOperationSpaceResult = IBatchOperationResult<Space>;\n\nexport default class SpaceContext implements ISAMObject {\n\n    private _orgRepositoryPool = new ItemPool<OrgRepository>(this._core, 'orgRepository');\n    private _teamPool = new ItemPool<Team>(this._core, 'team');\n    private _spacePool = new ItemPool<Space>(this._core, 'space');\n\n    private _projectInterface = new ProjectInterface(this._core);\n    private _rapi = new RepositoryInterface(this._core);\n    private _hostAssetContext = this._core.hostAssetContext;\n\n    constructor(readonly _core: ISAMCorePrivate) {\n        // Make sure we have a delegate to update all the teamRoles of the spaces once a new team is added.\n        this._teamPool.addDelegate(this._teamPoolDelegate, 'context');\n    }\n\n    get projectInterface(): ProjectInterface {\n        return this._projectInterface;\n    }\n\n    get orgRepositoryPool(): ItemPool<OrgRepository> {\n        return this._orgRepositoryPool;\n    }\n\n    get teamPool(): ItemPool<Team> {\n        return this._teamPool;\n    }\n\n    get spacePool(): ItemPool<Space> {\n        return this._spacePool;\n    }\n\n    /**\n     * Returns a cached list of links for the project service index route.\n     */\n    async discoverLinks(): Promise<IWorkspacesIndexLinks> {\n        return await this._projectInterface.discoverLinks();\n    }\n\n    @memoize\n    getOrgRepositories(): OrgRepositorySource {\n        const loader = new OrgRepositoryLoader(this._orgRepositoryPool, this._projectInterface);\n        return new ItemSource(this._orgRepositoryPool, [ loader ]);\n    }\n\n    @memoize\n    getTeams(): TeamSource {\n        const loader = new TeamLoader(this._teamPool, this._projectInterface);\n        return new ItemSource(this._teamPool, [ loader ], new TeamFilter());\n    }\n\n    @memoize\n    getSpaces(): SpaceSource {\n        // Make sure that the space loader checks for team membership during load.\n        const loader = new SpaceLoader(this._spacePool, this._projectInterface, this._teamRoleGetterFactory);\n        return new ItemSource(this._spacePool, [ loader ], new SpaceFilter());\n    }\n\n    private _teamRoleGetterFactory: TeamRoleGetterFactory = async () => {\n        const teams = await this._fetchTeams();\n        return createTeamRoleGetter(teams);\n    }\n\n    private _teamPoolDelegate: IItemPoolDelegate<Team> = {\n        onItemsUpdated: () => {\n            // Iterate on all the known spaces and update their teamRole based on what we know from the list of Teams.\n            // Note that this might update spaces that have been discarded, but that's alright as they might be restored\n            // at some point in the future. Since `this.getSpaces().getList()` will trigger fetching the Teams, it is\n            // expected that the Team list will typically already be loaded, so it should not use `getTeams().getList()`\n            // since that will cause it to fetch the Teams list again. Fetching teams as a side-effect of unit tests that\n            // manipulate Teams using the teamPool will unexpectedly cause the teams list to load without any Nock mock\n            // to provide it.\n            const teams = this.getTeams()._getExistingList(TeamOrder.default, new EverythingFilter());\n            // Teams List won't exist if manipulating the teamPool without loading the teams first.\n            // Teams List will be empty when the TeamLoader converts the service response to Team models via\n            // TeamUpdater.updateRemoteItems(), because it triggers ItemPool.onItemsUpdated() before it has actually\n            // put the items in the List.\n            if (!teams || !teams.items.length) {\n                this._core._environment.debug('[SpaceContext._teamPoolDelegate] skipping update of Space.teamRole -- no teams');\n                return;\n            }\n            const spacePool = this._spacePool;\n            const getTeamRole = createTeamRoleGetter(teams);\n            const spaceSession = spacePool.createUpdateSession('Updating teamRole across all spaces');\n            this._spacePool.forEach((space: Space) => {\n                const newTeamRole = getTeamRole(space.teamID);\n                if (space.teamRole !== newTeamRole) {\n                    SpaceUpdater.updateLocalItem(spaceSession, space, { teamRole: newTeamRole });\n                }\n            });\n            spaceSession.commit();\n        }\n    };\n\n    private async _fetchTeams(): Promise<IItemList<TeamConfig>> {\n        // Get the list with refreshTimeOut so that it will not immediately refresh if the list already exists\n        const teams = this.getTeams().getList(TeamOrder.default, undefined, { refreshTimeout: TEAM_REFRESH_TIMEOUT });\n        await waitForListLoad(teams);\n        return teams;\n    }\n\n    async provisionType1Team(): Promise<Team | undefined> {\n        // Auto-provision a team for CCI user if the user is not currently sponsoring a team.\n        if (this._core._environment.getValue('ACCOUNT_TYPE') !== 'type1') {\n            return undefined;\n        }\n\n        const teams = await this._fetchTeams();\n\n        const userId = this._core._environment.getValue('USER_ID');\n        let team = teams.items.find((team: Team) => team.repositoryOwnerID === userId && team.repositoryOwnerType === 'user');\n        if (!team) {\n            // This should automatically add the team to the lists.\n            const response = await this._projectInterface.provisionTeam();\n\n            // The team might be just created, if we are refreshing the list of teams\n            // it might not exist yet, so we have to keep it alive until USS is eventually consistent.\n            const session = this._teamPool.createMutationSession();\n            team = TeamUpdater.updateRemoteItem(session, response);\n            session.commit();\n        }\n\n        return team;\n    }\n\n    async createTeam(orgRepository: OrgRepository, data: IProjectsTeamCreateData): Promise<Team> {\n        const response = await this._projectInterface.createTeam({\n            ...data,\n            repositoryId: orgRepository.repositoryID\n        });\n        const session = this._teamPool.createMutationSession();\n        const team = TeamUpdater.updateRemoteItem(session, response);\n        session.commit();\n        return team;\n    }\n\n    private async _renameAsset(id: string, newName: string): Promise<AdobeAsset> {\n        if (!validatePlatformRepoName(newName)) {\n            // Validate the name here to avoid resolving the asset if the name is invalid.\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'Invalid name provided for the rename operation.');\n        }\n\n        // FIXME: `item._links[RelType.PRIMARY]` already has the resolved link for the asset.\n        // We could reuse the link to avoid a separate resolve by id call.\n        const asset = await this._hostAssetContext.getAssetWithCloudID(id);\n        await asset.rename(newName);\n\n        // Return the new name of the asset, just in case the server decided to change it.\n        return asset;\n    }\n\n    private async _renameTeam(team: Team, update: ITeamUpdate) {\n        const name = update.name;\n        if (!name) {\n            return;\n        }\n\n        if (!validatePlatformRepoName(name)) {\n            // Validate the name here to avoid resolving the asset if the name is invalid.\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'Invalid name provided for the rename operation.');\n        }\n\n        const links = getLinks(team);\n        await this._projectInterface.renameTeam(links, name);\n\n        // Since the client could have both an instance to a Team\n        // and the underlying AdobeAsset we should check that if the\n        // AdobeAsset exists in the AssetContext ItemPool and if it does\n        // update it and it's descendents as well.\n        const adobeAssetPool = this._hostAssetContext._assetPool;\n        const localAdobeAsset = adobeAssetPool.getLocalItemById(team.id);\n        if (localAdobeAsset) {\n            const newPath = renameFileInPath(name, localAdobeAsset);\n            const adobeAssetSession = adobeAssetPool.createUpdateSession();\n\n            updateCachedDescendents({\n                assetPool: this._hostAssetContext._assetPool,\n                asset: localAdobeAsset,\n                session: adobeAssetSession,\n                operation: { type: 'rename', newPath }\n            });\n\n            this._hostAssetContext._adobeAssetUpdater.updateLocalItem(\n                adobeAssetSession,\n                localAdobeAsset,\n                {\n                    'repo:path': newPath,\n                    'repo:name': name\n                }\n            );\n            adobeAssetSession.commit();\n        }\n\n        const updateSession = this.teamPool.createMutationSession();\n        TeamUpdater.updateLocalItem(updateSession, team, { name });\n        updateSession.commit();\n    }\n\n    async renameTeam(team: Team, newName: string): Promise<void> {\n        await this.updateTeam(team, { name: newName });\n    }\n\n    async restoreTeam(team: Team): Promise<void> {\n        await ItemBase.runExclusiveTask('restore', [ team ], async () => {\n            try {\n                const links = getLinks(team);\n                const updateSession = this.teamPool.createUpdateSession();\n                await this._projectInterface.restoreTeam(links);\n                TeamUpdater.updateLocalItem(updateSession, team, { state: 'active' });\n                updateSession.commit();\n            } catch (e) {\n                // We want to avoid updating the pool if\n                // there are errors like CONFLICT that could occur.\n                throw SAMError.create(SAMErrorCode.UNKNOWN,\n                    'An error occured restoring team',\n                    { underlyingError: e }\n                );\n            }\n        });\n    }\n\n    async archiveTeam(team: Team): Promise<void> {\n        await ItemBase.runExclusiveTask('archive', [ team ], async () => {\n            // TODO: should this be createMutationSession?\n            const updateSession = this.teamPool.createUpdateSession();\n            try {\n                const links = getLinks(team);\n                await this._projectInterface.archiveTeam(links);\n            } catch (error) {\n                const e = error as SAMError;\n                // @TODO https://jira.corp.adobe.com/browse/SAM-2064\n                // Temporary fallback, remove once M2 APIs are in prod\n                if (e.code === SAMErrorCode.BAD_REQUEST) {\n                    const asset = await this._hostAssetContext.getAssetWithCloudID(team.id);\n                    await asset.discard();\n                } else {\n                    throw e;\n                }\n            }\n            TeamUpdater.updateLocalItem(updateSession, team, { state: 'discarded' });\n            updateSession.commit();\n        });\n    }\n\n    /**\n     * The Projects services accepts only\n     * a string value with the length\n     * less than or equal to 1000.\n     */\n    private _validateDescription(value: string) {\n        return value.length <= 1000;\n    }\n\n    private _validateColor(value: string) {\n        return /^#[A-Fa-f0-9]{6}$/.test(value);\n    }\n\n    private _getPatchOP(\n        value: string,\n        path: string,\n        existingValue?: string,\n        validator?: (value: string) => boolean\n    ): jsonpatch.OpPatch {\n\n        if (validator && !validator(value)) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, `Property ${path} has invalid value`);\n        }\n\n        // If there was a description and now there\n        // is none, we should \"remove\".\n        if (value.length === 0\n            && existingValue && existingValue.length > 0) {\n            return {\n                op: 'remove',\n                path\n            };\n        }\n\n        return {\n            op: existingValue ? 'replace' : 'add',\n            value,\n            path\n        };\n    }\n\n    private async _patchTeam(team: Team, update: ITeamUpdate): Promise<void> {\n        const  { description } = update;\n        const bodyData: jsonpatch.OpPatch[] = [];\n        const localUpdate: Partial<IProjectsTeam> = {};\n\n        if (description !== undefined) {\n            bodyData.push(this._getPatchOP(\n                description,\n                '/description',\n                team.description,\n                this._validateDescription\n            ));\n            localUpdate.description = description;\n        }\n\n        if (!bodyData.length) {\n            return;\n        }\n\n        const links = getLinks(team);\n        await this._projectInterface.patchTeam(links, bodyData);\n\n        const updateSession = this.teamPool.createMutationSession();\n        TeamUpdater.updateLocalItem(updateSession, team, localUpdate);\n        updateSession.commit();\n    }\n\n    async updateTeam(team: Team, update: ITeamUpdate): Promise<void> {\n        await ItemBase.runExclusiveTask('update', [ team ], async () => {\n            const results = await Promise.allSettled([\n                this._patchTeam(team, update),\n                this._renameTeam(team, update)\n            ]);\n\n            // Checks for rejection and calls the handler\n            // to delete the item because it has not been\n            // found.\n            this._checkForRejection(results, () => {\n                const session = this.teamPool.createUpdateSession();\n                session.queueDiscardedItem(team);\n                session.commit();\n            });\n        });\n    }\n\n    async loadTeamProperties(team: Team): Promise<void> {\n        const links = getLinks(team);\n        const properties = await this._projectInterface.getTeamProperties(links);\n        if (!properties || Object.keys(properties).length === 0) {\n            return;\n        }\n\n        const updateSession = this.teamPool.createMutationSession();\n        TeamUpdater.updateLocalItem(updateSession, team, { ...properties });\n        updateSession.commit();\n    }\n\n    async permanentlyDeleteTeam(team: Team): Promise<void> {\n        if (team.state === 'active') {\n            throw SAMError.create(\n                SAMErrorCode.UNSUPPORTED,\n                'Teams that are not \\'discarded\\' cannot be permanently deleted.'\n            );\n        }\n\n        const onItemsChanged = (event: ItemsChangedEvent<Team>) => {\n            if (event.discardedItems) {\n                const permDeleteTeamIDs: ItemId[] = event.discardedItems\n                    .filter(item => item.id === team.id)\n                    .map(item => item.id);\n                if (permDeleteTeamIDs.length) {\n                    this._teamPool.removeLocalItems(permDeleteTeamIDs);\n                }\n            }\n        };\n\n        this._teamPool.on(ITEMS_CHANGED, onItemsChanged);\n        try {\n            await ItemBase.runExclusiveTask('delete', [ team ], async () => {\n                const links = getLinks(team);\n                await this._projectInterface.permanentlyDeleteTeam(links);\n                const updateSession = this.teamPool.createUpdateSession();\n                updateSession.queueDiscardedItem(team);\n                updateSession.commit();\n            });\n        } finally {\n            this.teamPool.off(ITEMS_CHANGED, onItemsChanged);\n        }\n    }\n\n    // Reload space is an implementation detail of the space context,\n    // external projects should use space.load() instead.\n    async [reloadSpace](space: Space): Promise<void> {\n        const latency = this._core._environment.getValue('PROJECTS_ITEM_UPDATE_LATENCY');\n        await space.waitForMutationPropagationIfNeeded(latency);\n\n        const links = getLinks(space);\n        const result = await this._projectInterface.reloadSpace(links, SPACE_FULL_SELECTOR);\n        const session = this._spacePool.createUpdateSession();\n        SpaceUpdater.updateLocalItem(session, space, result);\n        session.commit();\n    }\n\n    /**\n     * Internal helper method for moving spaces.\n     * @param spaces spaces to be moved\n     * @param team destination team where spaces are intended to be moved\n     * @param assetRenameMap allows renaming of assets in the batch operation\n     * @param retryOnConflict whether to retry the move op for failed spaces in case of conflict\n     * @param assetConflictMap map to save the newName and count used for all assets in batch\n     * @returns the result for batch operation after retrying for failed assets if asked.\n     */\n    private async _moveSpaces(\n        spaces: Space[],\n        team: Team,\n        assetRenameMap: AssetRenameMap<Space> = new Map(),\n        retryOnConflict: boolean = true,\n        assetConflictMap?: NameConflictMap\n    ): Promise<IBatchOperationSpaceResult> {\n        let resultOps: IBatchOperationSpaceResult = { failedResults: [], newModels: [] };\n\n        await ItemBase.runExclusiveTask('move', spaces, async () => {\n            const targetAsset = await this._hostAssetContext.getAssetWithCloudID(team.id);\n            if (assetConflictMap === undefined) {\n                assetConflictMap = new Map() as NameConflictMap;\n            }\n            const spacesById = new Map<string, Space>();\n            const ops = spaces.map((space) => {\n                spacesById.set(space.id, space);\n                let newPath = `${targetAsset.repoPath}/${getBatchRenamedAssetName(space, assetRenameMap)}`;\n\n                newPath = batchFormatFileName(this._core, space.id, newPath, false, assetConflictMap!);\n                return {\n                    op: 'move',\n                    id: space.id,\n                    source: {\n                        'repo:assetId': space.id,\n                        'repo:repositoryId': space.repositoryID\n                    },\n                    target: {\n                        'repo:path': newPath,\n                        'repo:repositoryId': targetAsset.repositoryID\n                    }\n                } as IOperation;\n            });\n\n            resultOps = await this._runOperations(ops, spacesById, {\n                teamId: team.id,\n                teamName: team.name\n            });\n        });\n        if (retryOnConflict) {\n            return await retryFailedOpsDueToConflict(resultOps, team, assetRenameMap, assetConflictMap!, this._moveSpaces.bind(this));\n        }\n        return resultOps;\n    }\n\n    /**\n     * Public method to move spaces to a team\n     * @param spaces spaces to be moved\n     * @param team destination team where spaces are intended to be moved\n     * @returns the result for batch operation after retrying for failed assets.\n     */\n    async moveSpaces(spaces: Space[], team: Team): Promise<IBatchOperationSpaceResult> {\n        return this._moveSpaces(spaces, team);\n    }\n\n    async archiveSpaces(spaces: Space[]): Promise<IBatchOperationSpaceResult> {\n        return await ItemBase.runExclusiveTask('archive', spaces, async () => {\n            const spacesById = new Map<string, Space>();\n            const ops = spaces.map((space) => {\n                spacesById.set(space.id, space);\n                return {\n                    op: 'discard',\n                    id: space.id,\n                    target: {\n                        'repo:assetId': space.id,\n                        'repo:repositoryId': space.repositoryID\n                    },\n                } as IOperation;\n            });\n\n            return await this._runOperations(ops, spacesById);\n        });\n    }\n\n    async restoreSpaces(spaces: Space[], restoreNameMap?: Map<Space, string>): Promise<IBatchOperationSpaceResult> {\n        return await ItemBase.runExclusiveTask('restore', spaces, async () => {\n            const spacesById = new Map<string, Space>();\n            const ops = spaces.map((space) => {\n                spacesById.set(space.id, space);\n                return {\n                    op: 'restore',\n                    id: space.id,\n                    target: {\n                        'repo:assetId': space.id,\n                        'repo:repositoryId': space.repositoryID\n                    },\n                    name: restoreNameMap?.get(space)\n                } as IOperation;\n            });\n            return await this._runOperations(ops, spacesById);\n        });\n    }\n\n    async _runOperations(\n        ops: IOperationQuery, spacesById: Map<string, Space>, additionalSpaceUpdates: Partial<IProjectsSpace> = {}\n    ): Promise<IBatchOperationSpaceResult> {\n        return await this._rapi.runOperationsForContext<Space>(\n            ops,\n            spacesById,\n            this._spacePool,\n            (session: IUpdateSession<Space>, space: Space, remoteItem?: RepositoryMetadata) => {\n                if (!remoteItem) {\n                    throw SAMError.create(SAMErrorCode.UNKNOWN, 'Missing metadata from asset bulk operation.');\n                }\n                // We want to update the repo:path of all the descendants of the space only in case of move/rename.\n                const remoteRepoPath = remoteItem['repo:path'];\n                if (space.pathName !== remoteRepoPath) {\n                    const adobeAssetPool = this._hostAssetContext._assetPool;\n                    const localAdobeAsset = adobeAssetPool.getLocalItemById(space.id);\n                    const assetSession = adobeAssetPool.createUpdateSession();\n\n                    if (localAdobeAsset) {\n                        updateCachedDescendents({\n                            assetPool: this._hostAssetContext._assetPool,\n                            asset: localAdobeAsset,\n                            session: assetSession,\n                            operation: { type: 'rename', newPath: remoteRepoPath }\n                        });\n                        this._hostAssetContext._adobeAssetUpdater.updateLocalItem(\n                            assetSession,\n                            localAdobeAsset,\n                            {\n                                'repo:path': remoteRepoPath\n                            }\n                        );\n                        assetSession.commit();\n                    }\n                }\n\n                SpaceUpdater.updateLocalItem(session, space, {\n                    state: remoteItem['repo:state'] === 'ACTIVE' ? 'active' : 'archived',\n                    name: remoteItem['repo:name'],\n                    pathName: remoteItem['repo:path'],\n                    ...additionalSpaceUpdates\n                });\n                return undefined;\n            },\n            [\n                {\n                    // Refresh this space to make sure we have the latest version of it.\n                    // Note that we cannot use 404 - NOT_FOUND as a sign that the space has been\n                    // permanently deleted as we get that same error code when the space\n                    // is still active, just that the user is not allowed to archive/restore it.\n                    // It is better to just reload the space to validate we still have access to\n                    match: (error: SAMError) => error.code === SAMErrorCode.ACCESS_DENIED || error.code === SAMErrorCode.NOT_FOUND,\n                    action: async (space: Space) => {\n                        return await space.load().catch((error: Error) => {\n                            return { model: space, error: error as SAMError };\n                        });\n                    }\n                }\n            ]\n        );\n    }\n\n    async createSpaceBookmarks(spaces: Space[]): Promise<void>  {\n        return this._bookmarkSpaces('ADD', spaces);\n    }\n\n    async removeSpaceBookmarks(spaces: Space[]): Promise<void>  {\n        return this._bookmarkSpaces('REMOVE', spaces);\n    }\n\n    private async _bookmarkSpaces(op: IProjectsBookmarkOpType, spaces: Space[]): Promise<void> {\n        await ItemBase.runExclusiveTask('bookmark', spaces, async () => {\n            const userId = this._core._environment.getValue('USER_ID');\n\n            // Attempt to make the change ahead of time.\n            const change: Partial<IProjectsSpace>  = {\n                bookmarked: op === 'ADD'\n            };\n            const localSession = this.spacePool.createUpdateSession();\n\n            const spaceById = new Map<string, { space: Space, wasBookmarked: boolean, status?: number }>();\n            const items = spaces.map((space) => {\n                spaceById.set(space.id, { space, wasBookmarked: space.isBookmarked });\n                SpaceUpdater.updateLocalItem(localSession, space, change);\n                return {\n                    projectUrn: space.id,\n                    userId\n                };\n            });\n            localSession.commit();\n\n            let response: IProjectsBookmarkBatchResponse | undefined;\n\n            try {\n                response = await this._projectInterface.bookmarkOp({ op, items });\n            } finally {\n                if (response) {\n                    for (const item of response.responses) {\n                        const info = spaceById.get(item.request?.projectUrn);\n                        if (info) {\n                            info.status = item.status;\n                        }\n                    }\n                }\n\n                // Revert all incomplete changes.\n                const restoreSession = this.spacePool.createUpdateSession();\n                const mutationSession = this.spacePool.createMutationSession();\n\n                for (const { space, wasBookmarked, status } of spaceById.values()) {\n                    if (status === 201) {\n                        // Reapply the change, in case there was a different fetch in-between.\n                        // This should also force the mutation timestamp to update on the space.\n                        SpaceUpdater.updateLocalItem(mutationSession, space, change);\n                    } else {\n                        // Revert the local change.\n                        SpaceUpdater.updateLocalItem(restoreSession, space, {\n                            bookmarked: wasBookmarked\n                        });\n\n                        // Check if the item was removed on a different device\n                        // and remove it from internal lists too.\n                        if (status === 404) {\n                            restoreSession.queueDiscardedItem(space);\n                        }\n                    }\n                }\n                restoreSession.commit();\n                mutationSession.commit();\n            }\n        });\n    }\n\n    private _checkForRejection(\n        results: PromiseSettledResult<void>[],\n        onRemoveItem: () => void\n    ) {\n        for (const result of results) {\n            if (result.status === 'rejected') {\n                const error = result.reason;\n                // Remove the item entirely\n                if (error instanceof SAMError && error.code === SAMErrorCode.NOT_FOUND) {\n                    onRemoveItem();\n                }\n                throw error;\n            }\n        }\n    }\n\n    async updateSpace(space: Space, update: ISpaceUpdate): Promise<void> {\n        // Make both rename and patch go through the same exclusive task,\n        // to allow them to execute in parallel.\n        await ItemBase.runExclusiveTask('update', [ space ], async () => {\n            const results = await Promise.allSettled([\n                this._renameSpace(space, update),\n                this._patchSpace(space, update)\n            ]);\n\n            this._checkForRejection(results, () => {\n                const session = this.spacePool.createUpdateSession();\n                session.queueDiscardedItem(space);\n                session.commit();\n            });\n        });\n    }\n\n    private async _renameSpace(space: Space, update: ISpaceUpdate): Promise<void> {\n        const  { name } = update;\n        if (name === undefined) {\n            return;\n        }\n\n        const asset = await this._renameAsset(space.id, name);\n        const updateSession = this.spacePool.createMutationSession();\n        SpaceUpdater.updateLocalItem(updateSession, space, {\n            name: asset.name,\n            pathName: asset.repoPath\n        });\n        updateSession.commit();\n    }\n\n    private async _patchSpace(space: Space, update: ISpaceUpdate): Promise<void> {\n        const  { description, color } = update;\n        const bodyData: jsonpatch.OpPatch[] = [];\n        const localUpdate: Partial<IProjectsSpace> = {};\n\n        if (description !== undefined) {\n            bodyData.push(this._getPatchOP(\n                description,\n                `/description`,\n                space.description,\n                this._validateDescription\n            ));\n            localUpdate.description = description;\n        }\n\n        if (color !== undefined) {\n            bodyData.push(this._getPatchOP(\n                color,\n                `/color`,\n                space.color,\n                this._validateColor\n            ));\n            localUpdate.color = color;\n        }\n\n        if (!bodyData.length) {\n            return;\n        }\n\n        const links = getLinks(space);\n\n        // Ideally, the patch would return the updated state, but that's not the case here.\n        await this._projectInterface.patchSpace(links, bodyData);\n\n        // We will have to assume that a successful change means the changed values are the latest ones.\n        const updateSession = this.spacePool.createMutationSession();\n        SpaceUpdater.updateLocalItem(updateSession, space, localUpdate);\n        updateSession.commit();\n    }\n\n    async createSpace(team: Team, data: IProjectsCreateData): Promise<Space> {\n        const links = getLinks(team);\n\n        this._validateColor(data.color);\n        this._validateDescription(data.description);\n        validatePlatformRepoName(data.name);\n\n        const response = await this._projectInterface.createSpace(links, {\n            ...data,\n            parentId: team.id\n        });\n        // A space might not show up until a few seconds later, so we must keep it alive during this time.\n        const updateSession = this.spacePool.createMutationSession();\n        const space = SpaceUpdater.updateRemoteItem(updateSession, {\n            ...response,\n\n            // Make sure the service injects the teamId.\n            teamId: team.id\n        });\n        updateSession.commit();\n        return space;\n    }\n\n    async getEnclosingSpace(assetId: string): Promise<Space | undefined> {\n        const spaceMap = await this.getEnclosingSpaces([ assetId ]);\n        return spaceMap.get(assetId);\n    }\n\n    async getEnclosingSpaces(assetIds: string[]): Promise<Map<string, Space>> {\n        // The :context API uses the USS to lookup the enclosing space, so it suffers by the\n        // same amount of latency as the listing APIs. We will ignore the info we get from this\n        // API if the asset was mutated more recently than the maximum expected latency for USS.\n        const latency = this._core._environment.getValue('PROJECTS_LIST_UPDATE_LATENCY');\n        const mostRecentValidMutation = Date.now() - latency;  // We will ignore the update if we had local changes sooner than this timestamp.\n\n        const result = await this._projectInterface.getEnclosingSpaces(assetIds.map((id) => ({ 'repo:assetId': id })));\n        const map = new Map<string, Space>();\n        const updateSession = this.spacePool.createUpdateSession('get enclosing spaces', mostRecentValidMutation);\n        for (const item of result.responses) {\n            if (item.status !== 200) {\n                continue;\n            }\n            const id = item.request['repo:assetId'];\n            const space = SpaceUpdater.updateRemoteItem(updateSession, item.body);\n            map.set(id, space);\n        }\n        updateSession.commit();\n        return map;\n    }\n\n    async lookupSpaceById(id: string): Promise<Space> {\n        let space = this._spacePool.getLocalItemById(id);\n        if (!space) {\n            // Note that we don't have a local space, so we don't have to worry about eventual consistency on this item.\n            const response = await this._projectInterface.getSpace(id, SPACE_FULL_SELECTOR);\n            const session = this._spacePool.createUpdateSession();\n            space = SpaceUpdater.updateRemoteItem(session, response);\n            session.commit();\n        }\n        return space;\n    }\n\n    /**\n     * This API is temporary and it is specifically for Projects UI to use with SS workflows.\n     * It will eventually be deprecated in favor of using notifications\n     * @param teamId\n     */\n    onUserLeftTeam(teamId: string): void {\n        const team = this._teamPool.getLocalItemById(teamId);\n        if (team) {\n            const session = this._teamPool.createUpdateSession();\n            session.queueDiscardedItem(team);\n            session.commit();\n        }\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport InvitationInterface from '../interface/InvitationInterface';\nimport { IComputedInvitationCollaborator } from '../interface/InvitationModel';\nimport Collaborator, { CollaboratorUpdater } from './Collaborator';\nimport { IItemLoader, ILoadedPage } from '../core/ItemLoader';\nimport ItemPool from '../core/ItemPool';\nimport { CollaboratorConfig } from './CollaboratorSource';\n\nexport default class CollaboratorLoader implements IItemLoader<CollaboratorConfig> {\n\n    constructor(\n        private _collaboratorPool: ItemPool<Collaborator>,\n        private _invitationInterface: InvitationInterface,\n        private _urn: string) {\n    }\n\n    async loadPage(): Promise<ILoadedPage<CollaboratorConfig>> {\n        // FIXME: Implement latency tracker once we move more collaborator operations into SAM.JS.\n\n        // Note, this request is piggy-backed, so if we load both the collaborators and invited collaborators at the same\n        // time, it only results in one network call\n        const result = await this._invitationInterface.getCollaborators(this._urn);\n\n        // Update the collaborators\n        const collaboratorUpdateSession = this._collaboratorPool.createLoaderUpdateSession(Date.now());\n        const directSet = new Set(result.directCollaborators.map(({ id }) => id));\n        result.collaborators.forEach(collaborator =>\n            (collaborator as IComputedInvitationCollaborator).isDirect = directSet.has(collaborator.id)\n        );\n        const collaborators = CollaboratorUpdater.updateRemoteItems(collaboratorUpdateSession, result.collaborators);\n        collaboratorUpdateSession.commit();\n\n        return { items: collaborators };\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ItemBase from '../core/ItemBase';\nimport PropertyUpdater from '../core/PropertyUpdater';\nimport ItemUpdater from '../core/ItemUpdater';\n\nimport { CollaboratorRole, CollaboratorRoles, InheritanceType, InheritanceTypes } from './Collaborator';\nimport { IInvitation } from '../interface/InvitationModel';\n\nexport default class InvitedCollaborator extends ItemBase {\n\n    private _email: string = '';\n    private _role: CollaboratorRole = 'viewer';\n    private _canComment: boolean = false;\n    private _canShare: boolean = false;\n    private _acceptanceRequired: boolean = false;\n    private _inheritance?: InheritanceType;\n    private _created: Date = new Date;\n\n    get invitationID(): string {\n        return this.id;\n    }\n\n    // Invited email\n    get email(): string {\n        return this._email;\n    }\n\n    get role(): CollaboratorRole {\n        return this._role;\n    }\n\n    get canComment(): boolean {\n        return this._canComment;\n    }\n\n    get canShare(): boolean {\n        return this._canShare;\n    }\n\n    get acceptanceRequired(): boolean {\n        return this._acceptanceRequired;\n    }\n\n    get inheritance(): InheritanceType | undefined {\n        return this._inheritance;\n    }\n\n    get created(): Date {\n        return this._created;\n    }\n}\n\nexport const InvitedCollaboratorUpdater = new ItemUpdater<InvitedCollaborator, Partial<IInvitation>>({\n    localItemType: InvitedCollaborator,\n    remoteIdProperty: 'id',\n    propertyUpdater: new PropertyUpdater({\n        '_email': 'email',\n        '_role': { name: 'role', choices: CollaboratorRoles },\n        '_canComment': { name: 'canComment', format: 'boolean' },\n        '_canShare': { name: 'canShare', format: 'boolean' },\n        '_acceptanceRequired': { name: 'acceptanceRequired', format: 'boolean' },\n        '_inheritance': { name: 'inheritance', choices: InheritanceTypes },\n        '_created': { name: 'created', format: 'date_as_number' }\n    })\n});\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport InvitationInterface from '../interface/InvitationInterface';\nimport InvitedCollaborator, { InvitedCollaboratorUpdater } from './InvitedCollaborator';\nimport { IItemLoader, ILoadedPage } from '../core/ItemLoader';\nimport ItemPool from '../core/ItemPool';\nimport { InvitedCollaboratorConfig } from './InvitedCollaboratorSource';\n\nexport default class InvitedCollaboratorLoader implements IItemLoader<InvitedCollaboratorConfig> {\n\n    constructor(\n        private _invitedCollaboratorPool: ItemPool<InvitedCollaborator>,\n        private _invitationInterface: InvitationInterface,\n        private _urn: string) {\n    }\n\n    async loadPage(): Promise<ILoadedPage<InvitedCollaboratorConfig>> {\n        // FIXME: Implement latency tracker once we move more collaborator operations into SAM.JS.\n\n        // Note, this request is piggy-backed, so if we load both the collaborators and invited collaborators at the same\n        // time, it only results in one network call\n        const result = await this._invitationInterface.getCollaborators(this._urn);\n\n        // Update the pending invitations\n        const invitedCollaboratorUpdateSession = this._invitedCollaboratorPool.createLoaderUpdateSession(Date.now());\n        const invitedCollaborators = InvitedCollaboratorUpdater.updateRemoteItems(invitedCollaboratorUpdateSession, result.invitations);\n        invitedCollaboratorUpdateSession.commit();\n\n        return { items: invitedCollaborators };\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ItemBase from '../core/ItemBase';\nimport PropertyUpdater, { PropertyFormatType } from '../core/PropertyUpdater';\nimport ItemUpdater from '../core/ItemUpdater';\nimport { ISAMObject } from '../indexPrivate';\nimport ItemPool from '../core/ItemPool';\nimport { isDeepEqual } from '../core/ObjectUtils';\nimport SAMError from '../core/SAMError';\nimport { IInvitationCollaborator, IInvitationShareBatchResponseItem, IInvitationShareResponse } from '../interface/InvitationModel';\nimport Collaborator, { CollaboratorUpdater } from './Collaborator';\n\nexport default class CollaboratorsByAssetID extends ItemBase {\n    private _collaborators: Collaborator[] = [];\n    private _error: SAMError | undefined = undefined;\n\n    /**\n     * Since collaborators are a model around the relationship of a\n     * particular user and an asset, it should always have an AssetID.\n     */\n    get getAssetID(): string {\n        return this.id;\n    }\n\n    get collaborators(): Collaborator[] {\n        return this._collaborators;\n    }\n\n    get error(): SAMError | undefined {\n        return this._error;\n    }\n}\n\nconst CollaboratorFormat: PropertyFormatType = {\n    parse: (value: Collaborator[]): Collaborator[] => {\n        return value;\n    },\n    isEqual: (a: Collaborator[], b: Collaborator[]): boolean => {\n        return isDeepEqual(a, b);\n    }\n};\n\nfunction getCollaborators(source: Partial<IInvitationShareBatchResponseItem>, dest: ISAMObject): Collaborator[] {\n    const collaboratorPool = new ItemPool<Collaborator>(dest._core, 'collaborator');\n    const session = collaboratorPool.createUpdateSession();\n    // failed to fetch collaborators for this asset\n    if (source.statusCode! !== 200) {\n        return [];\n    }\n    const response: IInvitationShareResponse = JSON.parse(source.response!);\n\n    // Add the assetID to the response from the URN provided by\n    // the service so Collaborators are tied to an asset.\n    const collaboratorsWithID = response.collaborators.map((collab: IInvitationCollaborator) => {\n        return { ...collab, assetID: source.urn };\n    });\n    const collaborators = CollaboratorUpdater.updateRemoteItems(session, collaboratorsWithID);\n    session.commit();\n    return collaborators;\n}\n\nconst ErrorFormat: PropertyFormatType = {\n    parse: (value: SAMError): SAMError => {\n        return value;\n    },\n    isEqual: (a: SAMError, b: SAMError): boolean => {\n        return isDeepEqual(a, b);\n    }\n};\n\nfunction getError(source: Partial<IInvitationShareBatchResponseItem>): SAMError | undefined {\n    if (source.statusCode! === 200) {\n        return undefined;\n    }\n    // this is how a sample response looks like (got it from the sam.js demo)\n    // response: '{\"statusCode\":404,\"error\":\"Not Found\"}'\n    const response = JSON.parse(source.response!);\n    return SAMError.createWithRepositoryCode(response.statusCode, '', response.error);\n}\n\nexport const CollaboratorsByAssetIDUpdater = new ItemUpdater<CollaboratorsByAssetID, Partial<IInvitationShareBatchResponseItem>>({\n    localItemType: CollaboratorsByAssetID,\n    remoteIdProperty: 'urn',\n    propertyUpdater: new PropertyUpdater({\n        '_collaborators': { get: getCollaborators, format: CollaboratorFormat },\n        '_error': { get: getError, format: ErrorFormat }\n    })\n});\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport InvitationInterface from '../interface/InvitationInterface';\nimport CollaboratorsByAssetID, { CollaboratorsByAssetIDUpdater } from './CollaboratorsByAssetID';\nimport { IItemLoader, IItemLoaderOptions, ILoadedPage, ILoadNextPage } from '../core/ItemLoader';\nimport ItemPool from '../core/ItemPool';\nimport { CollaboratorsByAssetIDConfig } from './CollaboratorsByAssetIDSource';\n\nexport default class CollaboratorsByAssetIDLoader implements IItemLoader<CollaboratorsByAssetIDConfig> {\n\n    constructor(\n        private _collaboratorsByAssetIDPool: ItemPool<CollaboratorsByAssetID>,\n        private _invitationInterface: InvitationInterface,\n        private _assetIDs: string[]) {\n    }\n\n    async loadPage(options: IItemLoaderOptions<CollaboratorsByAssetIDConfig>): Promise<ILoadedPage<CollaboratorsByAssetIDConfig>> {\n        return await this._loadPage(options);\n    }\n\n    private async _loadPage(options: IItemLoaderOptions<CollaboratorsByAssetIDConfig>, start: number = 0): Promise<ILoadedPage<CollaboratorsByAssetIDConfig>> {\n        let { limit } = options;\n        limit = limit === undefined ? this._invitationInterface.batchRequestLimit : limit;\n\n        // max limit supported by invitation service batch api is 50, capping limit\n        limit = Math.min(limit, this._invitationInterface.batchRequestLimit);\n\n        const slicedAssetIDs = this._assetIDs.slice(start, start + limit);\n\n        const batchInvitationResponse = await this._invitationInterface.getCollaboratorListForUrns(slicedAssetIDs);\n        const session = this._collaboratorsByAssetIDPool.createLoaderUpdateSession(Date.now());\n        const collaboratorByAssetIDs = CollaboratorsByAssetIDUpdater.updateRemoteItems(session, batchInvitationResponse.result);\n        session.commit();\n\n        // Check if we have another page to load.\n        let loadNextPage: ILoadNextPage<CollaboratorsByAssetIDConfig> | undefined;\n        if (start + collaboratorByAssetIDs.length < this._assetIDs.length) {\n            loadNextPage = (options: IItemLoaderOptions<CollaboratorsByAssetIDConfig>) =>\n                this._loadPage(options, start + collaboratorByAssetIDs.length);\n        }\n\n        return { items: collaboratorByAssetIDs, loadNextPage };\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n/**\n * Simplfies cases where a Promise needs to be resolved or rejected externally from the Promise itself.\n *\n */\nexport class ManagedPromise<T> {\n    promise: Promise<T>;\n    resolve!: (result: T) => void;\n    reject!: (error?: any) => void;\n\n    constructor() {\n        this.promise = new Promise((resolve, reject) => {\n            this.resolve = resolve;\n            this.reject = reject;\n        });\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\nimport { ManagedPromise } from '../utils/ManagedPromise';\n\nclass BatchOperationQueue<T extends { id: string }> {\n    // Sets are guaranteed to be iterated in FIFO order\n    private _itemQueue: Set<T> = new Set();\n    private _itemPromises: Map<T, ManagedPromise<void>> = new Map();\n    private _inFlightBatches: Set<{ batch: Set<T>, promise: Promise<void> }> = new Set();\n    private _timer: any;\n\n    constructor(\n        private _batchProcessor: (items: Set<T>) => Promise<void>,\n        private _maxItemsPerBatch: number = 50,\n        private _delay: number = 50,\n        private _maxInFlightBatches: number = 3\n    ) {}\n\n    enqueue(item: T): Promise<void> {\n        // Already in progress\n        if (this.isInQueue(item) || this.isInFlight(item)) {\n            return this._itemPromises.get(item)!.promise;\n        }\n        this._itemQueue.add(item);\n        const managedPromise = new ManagedPromise<void>();\n        this._itemPromises.set(item, managedPromise);\n        if (!this._timer) {\n            this._timer = setTimeout(this._processQueue, this._delay);\n        }\n        // Don't wait to process the batch if a max-size batch request can be made\n        if (this._itemQueue.size >= this._maxItemsPerBatch) {\n            this._processQueue();\n        }\n        return managedPromise.promise;\n    }\n\n    dequeue(item: T): boolean {\n        const hasItem = this._itemQueue.has(item);\n        this._itemQueue.delete(item);\n        // Only resolve if still pending, otherwise it is too late to dequeue and must wait for the batch result\n        if (hasItem) {\n            this._itemPromises.get(item)!.resolve();\n            this._itemPromises.delete(item);\n        }\n        return hasItem;\n    }\n\n    /**\n     * Called by batchProcessor implementation if it needs to mark some items in the batch as successes, and some\n     * as failures. If it does neither, it will assume that resolving the batchProcessor means all succeeded, and\n     * rejecting the batchProcessor will mean all failed.\n     *\n     * @param item {T}\n     */\n    resolveItemPromise(item: T): void {\n        this._itemPromises.get(item)?.resolve();\n        this._itemPromises.delete(item);\n    }\n\n    rejectItemPromise(item: T): void {\n        this._itemPromises.get(item)?.reject();\n        this._itemPromises.delete(item);\n    }\n\n    get size(): number {\n        return this._itemQueue.size;\n    }\n\n    get inFlightCount(): number {\n        return this._inFlightBatches.size;\n    }\n\n    isInQueue(item: T): boolean {\n        return this._itemQueue.has(item);\n    }\n\n    isInFlight(item: T): boolean {\n        return !![ ... this._inFlightBatches ].find(inFlightBatch => inFlightBatch.batch.has(item));\n    }\n\n    /**\n     * Forces the queue to run all batches as fast as possible.\n     *\n     * @package -- for internal SAM.js use only\n     */\n    async _processNow(): Promise<void> {\n        if (!this._itemQueue.size && !this._inFlightBatches.size) {\n            // No work to do\n            return;\n        }\n        do {\n            this._processQueue();\n            try {\n                await Promise.race([ ...this._inFlightBatches ].map(batch => batch.promise));\n            } catch (e) {\n                // do nothing\n            }\n        } while (this._itemQueue.size);\n    }\n\n    private _processQueue = async () => {\n        clearTimeout(this._timer);\n        this._timer = undefined;\n\n        try {\n            if (this.inFlightCount >= this._maxInFlightBatches) {\n                await Promise.race([ ...this._inFlightBatches ].map(inFlightBatch => inFlightBatch.promise));\n            }\n        } catch (e) {\n            // Do nothing\n        }\n\n        while (this.inFlightCount <= this._maxInFlightBatches && this._itemQueue.size > 0) {\n            const batch: Set<T> = new Set();\n            while (this._itemQueue.size > 0 && batch.size < this._maxItemsPerBatch) {\n                const item = this._itemQueue.values().next().value;\n                this._itemQueue.delete(item);\n                batch.add(item);\n            }\n\n            // self-deleting batch Promise\n            const inFlightBatch = {\n                batch,\n                promise: this._batchProcessor(batch)\n                    .catch(() => { [ ...batch.values() ].forEach((item) => this.rejectItemPromise(item)); })\n                    .finally(() => {\n                        this._inFlightBatches.delete(inFlightBatch);\n                        [ ...batch.values() ].forEach(item => this.resolveItemPromise(item));\n                    })\n            };\n            this._inFlightBatches.add(inFlightBatch);\n        }\n\n        if (this._itemQueue.size > 0 && !this._timer) {\n            this._timer = setTimeout(this._processQueue, this._delay);\n        }\n    }\n}\n\nexport default BatchOperationQueue;\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ItemPool from '../core/ItemPool';\nimport ItemSource from '../core/ItemSource';\nimport {\n    ISAMCorePrivate,\n    ISAMObject,\n    SharedCollaboratorChangedEvent,\n} from '../indexPrivate';\nimport InvitationInterface from '../interface/InvitationInterface';\nimport Collaborator, { CollaboratorUpdater } from './Collaborator';\nimport InvitedCollaborator from './InvitedCollaborator';\nimport CollaboratorLoader from './CollaboratorLoader';\nimport InvitedCollaboratorLoader from './InvitedCollaboratorLoader';\nimport { CollaboratorConfig, CollaboratorSource } from './CollaboratorSource';\nimport CollaboratorsByAssetIDLoader from './CollaboratorsByAssetIDLoader';\nimport { InvitedCollaboratorConfig, InvitedCollaboratorSource } from './InvitedCollaboratorSource';\nimport CollaboratorsByAssetID from './CollaboratorsByAssetID';\nimport { CollaboratorsByAssetIDConfig, CollaboratorsByAssetIDSource } from './CollaboratorsByAssetIDSource';\nimport EverythingFilter from '../core/EverythingFilter';\nimport BatchOperationQueue from '../core/BatchOperationQueue';\nimport ShareableItem from './ShareableItem';\nimport {\n    IInvitationShareBatchResponseItem,\n    IInvitationShareResponse,\n    IInvitationShareBatchResponse,\n    IInvitationShareRequest,\n    IInvitationRecipient,\n    IPendingInvitation,\n    IInvitationConfiguration,\n    IInvitationNotification,\n    IInvitationCaptcha,\n    IComputedInvitationCollaborator\n} from '../interface/InvitationModel';\nimport SAMError, { SAMErrorCode } from '../core/SAMError';\nimport oneTimeWarning from '../utils/oneTimeWarning';\nimport { LazyLoadManager } from '../core/decorators/LazyLoadManager';\n\nexport interface ICollaboratorSources {\n    collaboratorPool: ItemPool<Collaborator>,\n    collaboratorSource: ItemSource<CollaboratorConfig>,\n    invitedCollaboratorPool: ItemPool<InvitedCollaborator>,\n    invitedCollaboratorSource: ItemSource<InvitedCollaboratorConfig>\n}\n\nexport type AssetToCollaborator = {\n    id: string;\n    collaborator: Collaborator;\n}\n\nexport default class CollaborationContext implements ISAMObject {\n\n    private _collaboratorSourceMap = new Map<string, ICollaboratorSources>();\n    private _invitationInterface = new InvitationInterface(this._core);\n    private _collaboratorsByAssetIDPool = new ItemPool<CollaboratorsByAssetID>(this._core, 'collaboratorsByAssetID');\n    private _accessConfirmedIDs = new Set<string>();\n\n    /**\n     * @package -- for use in SAM.js only\n     */\n    readonly _collaboratorRequestQueue: BatchOperationQueue<ShareableItem>;\n\n    constructor(readonly _core: ISAMCorePrivate) {\n        this._collaboratorRequestQueue = new BatchOperationQueue<ShareableItem>(this._handleBatchRequest);\n    }\n\n    private _handleBatchRequest = async (items: Set<ShareableItem>): Promise<void> => {\n        const assetMap = new Map([ ...items ].map(item => [ item.id, item ]));\n        const batchInvitationResponse: IInvitationShareBatchResponse = await this._invitationInterface.getCollaboratorListForUrns([ ...assetMap.keys() ]);\n        const results: IInvitationShareBatchResponseItem[] = batchInvitationResponse.result;\n        results.forEach((result: IInvitationShareBatchResponseItem) => {\n            const assetId = result.urn;\n            const asset = assetMap.get(assetId);\n            if (!asset) {\n                return;\n            }\n            if (result.statusCode !== 200) {\n                // Reject the item promise so that the item can be fetched again later.\n                this._collaboratorRequestQueue.rejectItemPromise(asset);\n                return;\n            }\n\n            const sources = this._getCollaboratorSources(assetId);\n            const invitationResponse: IInvitationShareResponse = JSON.parse(result.response);\n\n            // Add the assetId and isDirect to the returned data.\n            const collaboratorsWithAssetIds: IComputedInvitationCollaborator[] = invitationResponse.collaborators.map(\n                (collaboratorData) => {\n                    const isDirectCollaborator = invitationResponse.directCollaborators.find((c) => c.id === collaboratorData.id);\n                    return {\n                        ...collaboratorData,\n                        assetID: assetId,\n                        isDirect: !!isDirectCollaborator\n                    };\n                }\n            );\n\n            const collaboratorUpdateSession = sources.collaboratorPool.createUpdateSession();\n            const collaborators = CollaboratorUpdater.updateRemoteItems(collaboratorUpdateSession, collaboratorsWithAssetIds);\n            collaboratorUpdateSession.commit();\n\n            asset._setCollaboratorData(collaborators);\n        });\n    }\n\n    /**\n     * For use-cases where we want to immediately fetch collaborators but using the batch system\n     * instead of the collaborator listing.\n     */\n    private async _getCollaboratorsNow(asset: ShareableItem): Promise<void> {\n        this._collaboratorRequestQueue.enqueue(asset);\n        await this._collaboratorRequestQueue._processNow();\n        if (LazyLoadManager.hasManager(asset, SharedCollaboratorChangedEvent)) {\n            LazyLoadManager.updatedExternally(asset, SharedCollaboratorChangedEvent);\n        } else {\n            // SAM.cpp doesn't have LazyLoadManager\n            asset.dispatch(SharedCollaboratorChangedEvent);\n        }\n    }\n\n    /**\n     * get a list of Collaborators\n     * @param assetsIDs list of assetIDs (including from Teams and Spaces, not just AdobeAssets)\n     */\n    /**\n     * @deprecated -- will be removed on or after 2024-10-01\n     *  Use {@link ShareableItem.collaboratorArray} instead.\n     */\n    getCollaboratorsForAssets(assetsIDs: string[]): CollaboratorsByAssetIDSource {\n        oneTimeWarning('getCollaboratorsForAssets',\n            'This method is deprecated and will be removed. Use ShareableItem.collaboratorArray instead.');\n        const loader = new CollaboratorsByAssetIDLoader(this._collaboratorsByAssetIDPool, this._invitationInterface, assetsIDs);\n        const source = new ItemSource<CollaboratorsByAssetIDConfig>(this._collaboratorsByAssetIDPool, [ loader ], new EverythingFilter());\n        return source;\n    }\n\n    /**\n     * Get's all the ItemSources for Collaborators and InvitedCollaborators.\n     * @note ItemPools for collaborators can't be shared between assets because they may have different roles per asset.\n     * @note This no longer stores and returns WeakRefs due to how we have to update the collaborators, it causes\n     * the refs to be reclaimed before we are able to update the collaborators with new information and causes\n     * new item pools to be created everytime.\n     * @package used internally only\n     */\n    _getCollaboratorSources(assetID: string): ICollaboratorSources {\n        const sources = this._collaboratorSourceMap.get(assetID);\n        if (sources) {\n            return sources;\n        }\n\n        // We cannot share the pools for Collaborator/InvitedCollaborator objects between\n        // assets as they might have different roles for the same IDs.\n        const collaboratorPool = new ItemPool<Collaborator>(this._core, 'collaborator');\n        const collaboratorLoader = new CollaboratorLoader(collaboratorPool, this._invitationInterface, assetID);\n        const collaboratorSource = new ItemSource<CollaboratorConfig>(collaboratorPool, [ collaboratorLoader ], new EverythingFilter());\n\n        const invitedCollaboratorPool = new ItemPool<InvitedCollaborator>(this._core, 'invitedCollaborator');\n        const invitedCollaboratorLoader = new InvitedCollaboratorLoader(invitedCollaboratorPool, this._invitationInterface, assetID);\n        const invitedCollaboratorSource = new ItemSource<InvitedCollaboratorConfig>(invitedCollaboratorPool, [ invitedCollaboratorLoader ], new EverythingFilter());\n\n        const collaboratorSources = { collaboratorPool, collaboratorSource, invitedCollaboratorPool, invitedCollaboratorSource };\n        this._collaboratorSourceMap.set(assetID, collaboratorSources);\n        return collaboratorSources;\n    }\n\n    /**\n     * @deprecated -- will be removed on or after 2024-10-01\n     *    Use {@link ShareableItem.collaboratorArray} instead\n     */\n    getCollaborators(assetID: string): CollaboratorSource {\n        oneTimeWarning('CollaborationContext.getCollaborators',\n            'This method is deprecated and will be removed. Use ShareableItem.collaboratorArray instead.');\n        return this._getCollaboratorSources(assetID).collaboratorSource;\n    }\n\n    /**\n     * @deprecated -- will be renamed for internal use on or after 2024-10-01.\n     *   Use {@link ShareableItem.removeCollaborator} instead\n     */\n    async removeCollaborator(assetID: string, collaborator: Collaborator): Promise<void> {\n        oneTimeWarning('CollaborationContext.removeCollaborator',\n            'This method is deprecated and will be removed on or after 2024-10-01. Use ShareableItem.removeCollaborator instead.');\n        return this._removeCollaborator(assetID, collaborator);\n    }\n\n    /**\n     * Removes the provided Collaborator and updates the ItemPools.\n     *\n     * This eventually performs a PATCH request to the invitations service and removes the provided invited\n     * collaborator.\n     *\n     * @package -- for use in SAM.js only\n     *\n     * @throws If the request is not successful, an error is thrown.\n     *\n     * @param assetID\n     * @param collaborator {Collaborator}\n     */\n    async _removeCollaborator(assetID: string, collaborator: Collaborator): Promise<void> {\n        const response = await this._invitationInterface.modifyCollaborators(\n            assetID,\n            {\n                collaborators: [ { id: collaborator.id, action: 'remove' } ]\n            }\n        );\n\n        const collaboratorResponse = response.collaborators?.find((c) => c.id === collaborator.id);\n        if (!collaboratorResponse) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'Collaborator patch request unsuccessful');\n        }\n\n        if (collaboratorResponse.statusCode !== 200) {\n            throw SAMError.createWithRepositoryCode(\n                collaboratorResponse.statusCode,\n                collaboratorResponse.errorSubcode ?? '',\n                collaboratorResponse.statusText\n            );\n        }\n\n        const { collaboratorPool } = this._getCollaboratorSources(assetID);\n        const updateSession = collaboratorPool.createUpdateSession();\n        updateSession.queueDiscardedItem(collaborator);\n\n        // If the current user is being removed from the collaboration list, remove the asset from accessConfirmedIDs\n        // in case the user is re-invited to the asset and needs to confirm access again.\n        if (collaborator.isCurrentUser) {\n            this._accessConfirmedIDs.delete(assetID);\n        }\n        updateSession.commit();\n    }\n\n    /**\n     * Removes the provided InvitedCollaborator and updates the ItemPools.\n     *\n     * This eventually performs a PATCH request to the invitations service and removes the provided invited\n     * collaborator.\n     *\n     * @throws If the request is not successful, an error is thrown.\n     *\n     * @param assetID\n     * @param invitedCollaborator {InvitedCollaborator}\n     */\n    /**\n     * @deprecated -- will be removed on or after 2025-01-01.\n     */\n    async removeInvitedCollaborator(assetID: string, invitedCollaborator: InvitedCollaborator): Promise<void> {\n        oneTimeWarning('CollaborationContext.removeInvitedCollaborator',\n            'This method is deprecated and will be removed on or after 2025-01-01.');\n        const response = await this._invitationInterface.modifyCollaborators(\n            assetID,\n            {\n                invitations: [ { id: invitedCollaborator.id, action: 'remove' } ]\n            }\n        );\n\n        const collaboratorResponse = response.invitations?.find((c) => c.id === invitedCollaborator.id);\n        if (!collaboratorResponse) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'InvitedCollaborator patch request unsuccessful');\n        }\n\n        if (collaboratorResponse.statusCode !== 200) {\n            throw SAMError.createWithRepositoryCode(\n                collaboratorResponse.statusCode,\n                collaboratorResponse.errorSubcode ?? '',\n                collaboratorResponse.statusText\n            );\n        }\n\n        const { invitedCollaboratorPool } = this._getCollaboratorSources(assetID);\n        const updateSession = invitedCollaboratorPool.createUpdateSession();\n        updateSession.queueDiscardedItem(invitedCollaborator);\n        updateSession.commit();\n    }\n\n    /**\n     * @deprecated -- will be removed on or after 2025-01-01.\n     *    It may be possible to use {@link ShareableItem.collaboratorArray}. If this does not work, contact the\n     *    SAM.js team before removal.\n     */\n    getInvitedCollaborators(assetID: string): InvitedCollaboratorSource {\n        oneTimeWarning('CollaborationContext.getInvitedCollaborators',\n            'This method is deprecated and will be removed on or after 2025-01-01. Use'\n            + ' ShareableItem.collaboratorArray instead.');\n        return this._getCollaboratorSources(assetID).invitedCollaboratorSource;\n    }\n\n    /**\n     * Used by ShareableItem and SAMCpp.ts patches\n     *\n     * @package -- only for use inside SAM.js\n     */\n    async _removeCurrentUserFromCollaborationList(asset: ShareableItem): Promise<void> {\n        // If collaborator array isn't loaded or needs refresh, load it immediately\n        if (!asset._isCollaboratorDataLoaded) {\n            await this._getCollaboratorsNow(asset);\n        }\n        const collaborator = asset.collaboratorArray.find(c => c.isCurrentUser);\n        if (!collaborator) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, `Current user is not a collaborator on ${asset.id}`);\n        }\n        await this._removeCollaborator(asset.id, collaborator);\n        // _removeCollaborator() will remove the Collaborator from the pools, but it also needs to be removed from the\n        // collaboratorArray, and the collaboration flags need to be re-calculated, and collaboration event listeners\n        // notified.\n        if (asset.collaboratorArray.includes(collaborator)) {\n            const updatedCollaborators = asset.collaboratorArray.filter(c => c !== collaborator);\n            asset._setCollaboratorData(updatedCollaborators);\n            if (LazyLoadManager.hasManager(asset, SharedCollaboratorChangedEvent)) {\n                LazyLoadManager.updatedExternally(asset, SharedCollaboratorChangedEvent);\n            } else {\n                // SAM.cpp doesn't have LazyLoadManager\n                asset.dispatch(SharedCollaboratorChangedEvent);\n            }\n        }\n    }\n\n    /**\n     * @deprecated -- do not use, it does not work for users who were invited via an address book contact,\n     * and may break for all use cases in the future. Instead, use\n     * {@link ShareableItem.removeCurrentUserFromCollaborationList}. Will be removed on or after 2024-10-01.\n     *\n     *  https://jira.corp.adobe.com/browse/SAM-3564\n     */\n    removeCurrentUserFromCollaborationList(assetID: string): Promise<void> {\n        oneTimeWarning('removeCurrentUserFromCollaborationList/getCollaborator',\n            'This method does not work correctly and will be removed. Use'\n            + ' ShareableItem.removeCurrentUserFromCollaboratorList() insstead.');\n        const collaborator = this.getCollaborator(assetID);\n        return this._removeCollaborator(assetID, collaborator);\n    }\n\n    /**\n     * @deprecated -- Do not use, it does not work unless collaborator data is already loaded, and the Collaborator\n     * representing the current user was NOT invited via an address book contact. The Collaborator it returns in most\n     * cases will have invalid data in it. Will be removed on or after 2024-10-01.\n     *\n     * https://jira.corp.adobe.com/browse/SAM-3564\n     */\n    getCollaborator(assetID: string): Collaborator {\n        oneTimeWarning('removeCurrentUserFromCollaborationList/getCollaborator',\n            'This method does not work correctly and will be removed. Use'\n            + ' ShareableItem.collaboratorsArray.find(c => c.isCurrentUser()) instead.');\n\n        const userID = this._core._environment.getValue('USER_ID');\n        const collaborator: Collaborator = this._getCollaboratorSources(assetID).collaboratorPool.getLocalItemById(userID) ?? new Collaborator(this._core, userID);\n        return collaborator;\n    }\n\n    /**\n     *\n     * @package Used internally for now, please reach out to our team\n     * if this is required externally.\n     *\n     * @param assetID\n     * @param collaborators List of collaborators to add\n     */\n    _addCollaborators(\n        assetID: string,\n        collaborators: IInvitationRecipient[],\n        configuration?: IInvitationConfiguration,\n        notification?: IInvitationNotification,\n        captcha?: IInvitationCaptcha\n    ) {\n        const request: IInvitationShareRequest = {\n            recipients: collaborators,\n            // Notification parameter requires a value.\n            ...(\n                !notification\n                    ? {\n                        notification: {\n                            ans: {}\n                        }\n                    }\n                    : { notification }\n            ),\n            ...(configuration ? { configuration } : {}),\n            ...(captcha ? { captcha } : {})\n        };\n        this._invitationInterface.addCollaborators(assetID, request);\n    }\n\n    getPendingInvitations(): Promise<IPendingInvitation> {\n        return this._invitationInterface.getPendingInvitations();\n    }\n\n    /**\n     * A method that confirms access for a resource or asset and keeps\n     * track of that confirmation for this session to prevent\n     * more than one call being made per session per asset.\n     *\n     * Confirming access is not about permissions per-say, it's more\n     * about accepting the invitation to a resource that requires acceptance.\n     *\n     * It also handles email/account ambiguity so let's say an email\n     * has more than one adobe account associated with it, calling\n     * confirm access will also resolve this issue at that time.\n     *\n     * @note This is really just a temporary measure until\n     * the Invitations Service can provide a more efficient way\n     * of checking multiple assets at a time to see if they\n     * have already confirmed access for the current user token.\n     *\n     *\n     * @param assetId Resource URN\n     * @returns void\n     */\n    async confirmAccess(assetId: string) {\n        if (this._accessConfirmedIDs.has(assetId)) {\n            return;\n        }\n\n        await this._invitationInterface.confirmAccess(assetId);\n        this._accessConfirmedIDs.add(assetId);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\nimport EventEmitter from 'events';\nimport { ISAMCorePrivate } from '../indexPrivate';\n\ntype Extension = {[key: string]: PropertyDescriptor | Function}\n\n// NOTE: since previous versions of SAM.js used override_map, this cannot be changed to override_set,\n//       or it would defeat the purpose of tracking overrides applied by different versions of SAM.js.\nconst $OVERRIDE_SET = Symbol.for('com.adobe.ccac.samjs.extendclass.override_map');\nconst $EXTENSION_SET = Symbol.for('com.adobe.ccac.samjs.extendclass.extension_set');\nconst $OBSERVABLE_SET = Symbol.for('com.adobe.ccac.samjs.extendclass.observable_set');\nconst $EMITTER = Symbol.for('com.adobe.ccac.samjs.extendclass.emitter');\nexport const $OVERRIDDEN_GETTERS = Symbol.for('com.adobe.ccac.samjs.extendclass.overridden_getters');\n\ninterface IExtendClassOptions<T> {\n    /**\n     * The target class to be extended\n     */\n    klass: T;\n    /**\n     * The instance of SAMCore\n     */\n    core: ISAMCorePrivate;\n    /**\n     * Properties that will extend the target class if they are not defined\n     */\n    extensions?: Extension;\n    /**\n     * Properties that will override the target class, whether or not they are defined.\n     */\n    overrides?: Extension;\n    /**\n     * Some SAM.js classes emit a single event for a topic while SAM.cpp emits multiple. Sometimes only the event names\n     * differ. This map will allow the client code to subscribe to the SAM.js event (key) and the extended class will\n     * subscribe to all of the SAM.cpp events (values). It will add EventEmitter APIs to classes that do not have them.\n     */\n    eventMap?: { [key: string]: string[] };\n    /**\n     * If provided, it will make all of the getter properties of the target class observable, bound to this event.\n     * It will not make observable any property defined in `extensions` nor `overrides` nor `observableMap`.\n     */\n    defaultObservableEvent?: string;\n    /**\n     * If provided, it will make just the getter properties specified in the values observable. It will not add\n     * observability to properties defined in `extensions` nor `overrides`. The keys represent the event that\n     * the observable properties will be bound to.\n     */\n    observableMap?: { [event: string]: string[]; };\n}\n\n\n/**\n * Extends the provided `klass` with the properties with new behaviors, and ensures it supports the\n * EventEmitter interface. Optionally, it will make all getter properties observable.\n *\n * @param options: IExtendClassOptions\n * @example\n *     class MyClass {\n *         private _foo = 32;\n *         private _bar = 99;\n *         private _baz = {};\n *         refreshBaz(x) { some impl }\n *         get foo() { return this._foo; }\n *         get bar() { return this._bar; }\n *         get baz() { return this.baz; }\n *     }\n *     ExtendClass({\n *         klass: MyClass,\n *         extensions: {\n *             refreshBaz(x) { return x * 2; },       // ignored because it exists on MyClass\n *             newFn() { return this._foo; }          // Added\n *             // Getters/setters must use PropertyDescriptor syntax\n *             // NOTE: won't be automatically made observable\n *             aliasForFoo: {\n *                 get() {\n *                     // make this getter alias observable\n *                     this._core._environment.mobx.reportObserved('change');\n *                     return this._foo;\n *                 }\n *             }\n *         },\n *         overrides: {\n *             // replaces original refreshBaz\n *             refreshBaz(x) {\n *                 // Use the added TypedEventEmitter.dispatch()\n *                 this.dispatch({ type: 'bazRefresh' });\n *                 // invoke original oldFn\n *                 return this.oldFn.original(x);\n *             }\n *         },\n *         // When client subscribes to 'change' event, the extended class will proxy that event handler to the\n *         // 'incrementFoo' and 'incrementBar' events that the native implementation emits.\n *         eventMap: { change: [ 'incrementFoo', 'incrementBar' ] },\n *         observableMap: {\n *             // the `baz` getter will be made observable, bound to the 'bazRefresh' event\n *             'bazRefresh': [ 'baz' ]\n *         }\n *         // `foo` and `bar` getter will be made observable, bound to the 'change' event;\n *         defaultObservableEvent: 'change',\n *     });\n */\nexport default function ExtendClass<T extends { prototype: { [key: string]: any } }>(\n    {\n        klass,\n        core,\n        extensions = {},\n        overrides = {},\n        eventMap = {},\n        defaultObservableEvent,\n        observableMap = {}\n    }: IExtendClassOptions<T>\n) {\n    const originalProps = Object.getOwnPropertyDescriptors(klass.prototype);\n    // SAM.cpp EventEmitter-ish interface is on the prototype's prototype\n    let emitterProps = originalProps;\n    if (typeof emitterProps.on === 'undefined') {\n        emitterProps = Object.getOwnPropertyDescriptors(Object.getPrototypeOf(klass.prototype));\n    }\n\n    // Add reference to shared core if not already defined\n    if (!originalProps._core) {\n        Object.defineProperty(klass.prototype, '_core', { value: core });\n    }\n\n    // When overriding a getter, patch code may need access to the original using\n    //    this[$OVERRIDDEN_GETTERS]['someProp'].call(this)\n    if (!Object.getOwnPropertyDescriptor(klass.prototype, $OVERRIDDEN_GETTERS)) {\n        Object.defineProperty(klass.prototype, $OVERRIDDEN_GETTERS, { value: {} });\n    }\n\n\n    // Some SAM.cpp classes (AssetList) have an event handling API similar to EventEmitter, and some don't\n    // (Asset). Meanwhile, most SAM.js classes implement TypedEventEmitter. This section patches the\n    // prototype to match the TypedEventEmitter API. If the SAM.cpp class doesn't have an event-handling\n    // API, an actual instance of EventEmitter is used instead.\n    if (!Object.getOwnPropertyDescriptor(klass.prototype, $EMITTER)) {\n        Object.defineProperties(klass.prototype, {\n            [$EMITTER]: {\n                get() {\n                    // Redefine the $EMITTER getter property for `this` instance to an actual EventEmitter, or an\n                    // adapter to the SAM.cpp equivalent. The $EMITTER getter on the prototype remains unchanged\n                    // so the next instance will get its own properly bound $EMITTER.\n                    let emitter: EventEmitter;\n                    if (typeof emitterProps.on?.value === 'function') {\n                        // SAM.cpp class has an event handling API already, so create an adapter bound\n                        // to the SAM.cpp implementation\n                        emitter = {\n                            on: emitterProps.on.value.bind(this),\n                            off: emitterProps.off.value.bind(this),\n                            emit: emitterProps.trigger.value.bind(this),\n                            addListener: emitterProps.on.value.bind(this),\n                            removeListener: emitterProps.off.value.bind(this)\n                        } as EventEmitter;\n                    } else {\n                        // SAM.cpp class has no event handling API, so use an actual EventEmitter\n                        emitter = new EventEmitter();\n                    }\n                    Object.defineProperty(this, $EMITTER, { value: emitter });\n                    return this[$EMITTER];\n                }\n            },\n            on: {\n                value(eventName: string, ...rest: any[]) {\n                    // Some SAM.cpp events map to multiple SAM.js events. If there's no mapping, then subscribe\n                    // to `eventName` only.\n                    const mappedEvents = eventMap[eventName] ?? [ eventName ];\n                    mappedEvents.forEach(mappedEventName => this[$EMITTER].on(mappedEventName, ...rest));\n                    return this;\n                }\n            },\n            addListener: {\n                value(...args: any[]) { return this.on(...args); }\n            },\n            off: {\n                value(eventName: string, ...rest: any[]) {\n                    // Some SAM.cpp events map to multiple SAM.js events. If there's no mapping, then unsubscribe\n                    // from `eventName` only.\n                    const mappedEvents = eventMap[eventName] ?? [ eventName ];\n                    mappedEvents.forEach(mappedEventName => this[$EMITTER].off(mappedEventName, ...rest));\n                    return this;\n                }\n            },\n            removeListener: {\n                value(...args: any[]) { return this.off(...args); }\n            },\n            emit: {\n                value(...args: any[]) {\n                    return this[$EMITTER].emit(...args);\n                }\n            },\n            // SAM.js TypedEventEmitter behavior\n            dispatch: {\n                value(event: Event) { return this.emit(event.type, event, this); }\n            }\n        });\n\n    }\n\n    // Allow shortcut of { someMethod(): {} } instead of { someMethod: { value: function() {} } }\n    function makePropertyDesc(\n        map: { [key: string]: Function | PropertyDescriptor },\n        key: string\n    ): PropertyDescriptor {\n        const propertyDesc = map[key];\n        if (typeof map[key] === 'function') {\n            return { value: propertyDesc };\n        } else if ([ 'string', 'boolean', 'number' ].includes(typeof map[key])) {\n            // TypeScript doesn't block clients from passing a primitive, and\n            // Object.defineProperty(obj, key, primitive) is a no-op.\n            throw new Error('Cannot use primitives for PropertyDescriptor');\n        } else {\n            // An object. TypeScript will verify that it is a valid PropertyDescriptor.\n            return propertyDesc as PropertyDescriptor;\n        }\n    }\n\n    // Track which properties have been handled in this call to ExtendClass\n    const handledProps: Set<string> = new Set();\n\n    // Extensions should handle their own observability, thus should not be made observable automatically,\n    // so extensions must be tracked across calls to ExtendClass.\n    const extendedProps: Set<string> = klass.prototype[$EXTENSION_SET as any] || new Set();\n\n    Object.keys(extensions).forEach(propertyName => {\n        // cannot override existing properties with extensions\n        if (originalProps[propertyName]) { return; }\n\n        const propertyDesc = makePropertyDesc(extensions, propertyName);\n        Object.defineProperty(klass.prototype, propertyName, propertyDesc);\n        handledProps.add(propertyName);\n        extendedProps.add(propertyName);\n    });\n    klass.prototype[$EXTENSION_SET as any] = extendedProps;\n\n    const overriddenProps = klass.prototype[$OVERRIDE_SET as any] || new Set();\n    Object.keys(overrides).forEach(propertyName => {\n        if (overriddenProps.has(propertyName)) {\n            // Overrides from a previous call to ExtendClass should not be overridden again, but this\n            // is not an error.\n            return;\n        }\n        if (handledProps.has(propertyName) || extendedProps.has(propertyName)) {\n            throw new Error(`[ExtendClass] cannot override property '${propertyName}' because it is an extension.`);\n        }\n        // Since overridden functions might expect to use `this.originalFn.original()`, it's not safe to treat the\n        // override as an extension. Different hosts could have different versions of SAM.cpp, so patching code should\n        // be aware of what is needed.\n        if (!originalProps[propertyName]) {\n            throw new Error(`[ExtendClass] target class does not have property '${propertyName}' so it cannot `\n                + 'be overridden.');\n        }\n        const propertyDesc = makePropertyDesc(overrides, propertyName);\n        const original = originalProps[propertyName].value;\n        if (typeof original === 'function') {\n            // Replace the the original method with the override, then attach the original\n            // to the override so you can call it with `this.override.original()`\n            Object.defineProperty(klass.prototype, propertyName, {\n                get() {\n                    // Ensure `original` is bound to correct `this`\n                    propertyDesc.value.original = original.bind(this);\n                    return propertyDesc.value;\n                }\n            });\n        } else {\n            if (originalProps[propertyName].get) {\n                klass.prototype[$OVERRIDDEN_GETTERS as any][propertyName] = originalProps[propertyName].get;\n            }\n            Object.defineProperty(klass.prototype, propertyName, propertyDesc);\n        }\n        overriddenProps.add(propertyName);\n        handledProps.add(propertyName);\n    });\n    klass.prototype[$OVERRIDE_SET as any] = overriddenProps;\n\n    // Validate the passed-in observableMap config does not contain coding errors. If a config defines\n    // two events for the same property, or defines an event for an extension/override, that is likely\n    // a bug.\n    const propToEventMap: { [key: string]: string } = {};\n    Object.keys(observableMap).reduce((seenPropNames, eventName) => {\n        observableMap[eventName].forEach(propName => {\n            // If a property is mapped multiple times, or was extended/overwritten, treat as a coding error,\n            // otherwise the result would be difficult to debug\n            if (seenPropNames.has(propName)) {\n                throw new Error(`[ExtendClass] cannot have the same property (${propName}) appear multiple times in observableMap`);\n            }\n            if (handledProps.has(propName)) {\n                throw new Error(`[ExtendClass] cannot make property (${propName}) observable as it was defined in extensions/overrides`);\n            }\n            seenPropNames.add(propName);\n            propToEventMap[propName] = eventName;\n        });\n        return seenPropNames;\n    }, new Set());\n\n    // Add properties to be observed using the defaultObservableEvent to propToEventMap\n    if (defaultObservableEvent) {\n        Object.keys(originalProps)\n            // only collect getter properties\n            .filter(propName => !!originalProps[propName].get)\n            .forEach(propName => propToEventMap[propName] = defaultObservableEvent);\n    }\n\n    // Get already-wrapped properties that were made observable by previous calls to ExtendClass, if any,\n    // so that they won't be wrapped again.\n    const observedProps: Set<string> = klass.prototype[$OBSERVABLE_SET as any] || new Set<string>();\n\n    // merge all extended/overridden/observed props (including from previous calls to ExtendClass) into handledProps\n    [ ...extendedProps, ...overriddenProps, ...observedProps ].forEach(propName => handledProps.add(propName));\n\n    Object.entries(propToEventMap).forEach(([ propName, eventName ]) => {\n        // Only wrap getters, and properties that have not already been patched, either from this\n        // call to ExtendClass, or a previous call. If it is from a previous call, then this is not\n        // error.\n        if (!originalProps[propName]?.get || handledProps.has(propName)) {\n            return;\n        }\n\n        Object.defineProperty(klass.prototype, propName, {\n            get() {\n                this._core._environment.mobx.reportObserved(this, eventName);\n                return originalProps[propName].get!.call(this);\n            }\n        });\n        observedProps.add(propName);\n    });\n    klass.prototype[$OBSERVABLE_SET as any] = observedProps;\n}\n","/*************************************************************************\n*   ADOBE CONFIDENTIAL\n*\n*   Copyright 2022 Adobe\n*   All Rights Reserved.\n*\n*   NOTICE:  All information contained herein is, and remains\n*   the property of Adobe and its suppliers, if any. The intellectual\n*   and technical concepts contained herein are proprietary to Adobe\n*   and its suppliers and are protected by all applicable intellectual\n*   property laws, including trade secret and copyright laws.\n*   Dissemination of this information or reproduction of this material\n*   is strictly forbidden unless prior written permission is obtained\n*   from Adobe.\n**************************************************************************/\nimport { IOrderDirection } from '../ItemOrder';\nimport AdobeAssetOrder, { AdobeAssetOrderField } from '../../assets/AdobeAssetOrder';\nimport ExtendClass, { $OVERRIDDEN_GETTERS } from '../ExtendClass';\nimport AdobeAssetFilter from '../../assets/AdobeAssetFilter';\nimport AdobeAsset from '../../assets/AdobeAsset';\nimport oneTimeWarning from '../../utils/oneTimeWarning';\nimport { SharedChangeEvent } from '../ChangeEvent';\nimport { SharedListChangedEvent, SharedStateChangedEvent } from '../ItemList';\nimport SAMEvent from '../SAMEvent';\nimport { Permission } from '../../interface/AssetModel';\nimport AssetInterface from '../../interface/AssetInterface';\nimport Space from '../../workspaces/Space';\nimport SAMError, { SAMErrorCode } from '../SAMError';\nimport { SpaceSearchSource } from '../../assets/SpaceSearchSource';\nimport AssetVersion from '../../assets/AssetVersion';\nimport AssetVersionLoader from '../../assets/AssetVersionLoader';\nimport ItemSource, { OrderDirection, OrderField } from '../ItemSource';\nimport ItemPool from '../ItemPool';\nimport SpaceSearchAssetLoader from '../../assets/SpaceSearchAssetLoader';\nimport SpaceSearchAssetFilter from '../../assets/SpaceSearchAssetFilter';\nimport AssetContext, { NetworkStatus } from '../../assets/AssetContext';\nimport AssetReviewServiceInterface, { IReviewServiceAssetIdentifer, mapAssetsToAssetIndentifier } from '../../interface/AssetReviewServiceInterface';\nimport { AssetListStatus } from '../ItemLoaderState';\nimport { RepositoryMetadata } from '../../interface/RepositoryModel';\nimport { RenditionStatus } from '../../utils/RenditionFetcher';\nimport { ISAMCorePrivate, SharedCollaboratorChangedEvent } from '../../indexPrivate';\nimport EverythingFilter from '../../core/EverythingFilter';\nimport Collaborator from '../../collaboration/Collaborator';\nimport { COLLABORATOR_CHANGED } from '../../../src/indexPrivate';\nimport CommentsResource from '../../comments/CommentsResource';\n\n\n/*\nNOTE when testing in UXP SAM Demo app:\n\nWhen using Chrome debugger to refresh the JS source code, it does not destroy and recreate the SAM.cpp\nJS prototypes, so any changes made to this file will not be applied despite appearing in the source\ninspector. You have to quit the SAM.cpp demo app and restart.\n*/\n\n// Use a getter so that unit tests can inject a mock acplModel\nfunction getACPLModel(): any {\n    // NOTE: must use this syntax for accessing properties of `window`, or else it will break NodeJS clients\n    // like Libraries.\n    // @ts-ignore\n    return typeof window !== 'undefined' ? window?.acplModel : undefined;\n}\n\n// Convert semver into a padded string that can be compared lexically\nfunction parseVersion(version: string = ''): string {\n    // Old SAM.cpp versions looked like 2.0.0-main.1234, where the final number was the\n    // patch version. Current SAM.cpp uses standard semver major.minor.patch.\n    const parts: string[] = version.split('.');\n\n    // Coerce old SAM.cpp version into a standard semver, like 2.0.1234, by\n    // deleting the '0-main' element\n    if (parts[2] === '0-main') {\n        parts.splice(2, 1);\n    }\n    // Ensure each part has some value\n    const [ major = '0', minor = '0', patch = '0' ] = parts;\n    // '2.0.1234' becomes '000200001234'\n    return [ major, minor, patch ].map(part => part.padStart(4, '0')).join('');\n}\n\nfunction isSAMCppVer(comparison: 'lt' | 'gte', version: string) {\n    const aVer = parseVersion(getACPLModel()?.version);\n    const bVer = parseVersion(version);\n    switch (comparison) {\n    case 'lt': return aVer < bVer;\n    case 'gte':return aVer >= bVer;\n    default: return false;\n    }\n}\n\nclass ThumbnailChangeEvent extends SAMEvent {\n    constructor() {\n        super('thumbnailChange');\n    }\n}\nconst SharedThumbnailChangeEvent = new ThumbnailChangeEvent();\n\nclass PermissionsChangeEvent extends SAMEvent {\n    constructor() {\n        super('permissionsChange');\n    }\n}\n\nconst SharedPermissionsChangeEvent = new PermissionsChangeEvent();\n\ninterface IObservableAsset {\n    _onAssetChanged(): void;\n    _onRenditionChanged(): void;\n    _hasArtifacts: boolean | undefined;\n    id: string;\n    isDiscarded: boolean;\n}\ninterface IAssetsChangedEvent {\n    status: IObservableAsset[];\n    properties: IObservableAsset[];\n    previews: IObservableAsset[];\n}\n\n// See note above about testing in UXP SAM demo app\nexport function patchAssetContext(core: ISAMCorePrivate) {\n    const acplModel = getACPLModel();\n    // TODO: expose SAM.cpp AssetContext as acplModel.AssetContext\n    // https://jira.corp.adobe.com/browse/SAM-1365\n    const AssetContextJS = acplModel.applicationAssetContext.constructor;\n\n    // TODO: update actual version when the issues below are fixed\n    if (isSAMCppVer('lt', '9999.9999.9999')) {\n        ExtendClass({\n            klass: AssetContextJS,\n            core,\n            overrides: {\n                // SAM.cpp does not support optional param\n                getAssetWithCloudID(this: any, id: string, confirmAccess: boolean = false) {\n                    return this.getAssetWithCloudID.original(id, confirmAccess);\n                },\n                // SAM.cpp does not support optional param\n                getAssetWithAssetRefString(this: any, assetRefString: string, confirmAccess: boolean = false) {\n                    return this.getAssetWithAssetRefString.original(assetRefString, confirmAccess);\n                }\n            },\n            extensions: {\n                // SAM.cpp hasn't implemented AssetContext#getUserRepoId(). This method was added to\n                // address *SAM-1888*. This patch can be removed when SamCpp supports AssetContext#getUserRepoId()\n                getUserRepoID(this: any) {\n                    // Can't use hostAssetContext.getUserRepoID() because it needs hostAssetContext.itemPool,\n                    // which doesn't exist on SAM.cpp hostAssetContext.\n                    if (!this._userRepoID) {\n                        return this._core._AssetContextJS._rapi.getHomeDirectoryMetadata()\n                            .then((homeDirectoryMetadata: RepositoryMetadata) => {\n                                this._userRepoID = homeDirectoryMetadata['repo:repositoryId'];\n                                return this._userRepoID;\n                            });\n                    }\n                    return Promise.resolve(this._userRepoID);\n                },\n\n                transfer(this: any, source: AdobeAsset, target: AdobeAsset | Space): Promise<string> {\n                    return (async () => {\n                        let targetId: string;\n                        if (target instanceof Space) {\n                            const workingFiles = await target.getChild('working_files');\n                            if (!workingFiles) {\n                                throw SAMError.create(SAMErrorCode.NOT_FOUND, 'unable to find working_files for provided space');\n                            }\n                            targetId = workingFiles.id;\n                        } else {\n                            targetId = target.cloudID;\n                        }\n\n                        // ACPL substitutes ~ for user's repoID\n                        let sourceRepoID = source.repositoryID;\n                        let targetRepoID = target.repositoryID;\n                        if (sourceRepoID === '~') {\n                            sourceRepoID = await this.getUserRepoID();\n                        }\n                        if (targetRepoID === '~') {\n                            targetRepoID = await this.getUserRepoID();\n                        }\n\n                        const payload = {\n                            source: { assetId: source.cloudID, repositoryId: sourceRepoID },\n                            target: { assetId: targetId, repositoryId: targetRepoID }\n                        };\n\n                        return this._core._AssetContextJS._assetTransferService.transfer(payload);\n                    })();\n                },\n\n                // For code in SAM.js that needs to use the ItemPool from SAM.js, like SpaceContext.moveSpace()\n                /**\n                 * @deprecated To be removed on or after 2024-10-01.\n                 */\n                assetPool: {\n                    get(this: any) {\n                        oneTimeWarning('SAMCpp.ts _assetPool', 'AssetContext._assetPool is deprecated and will be'\n                            + ' removed on or after 2024-10-01. ItemPools are not for use by clients.');\n                        return this._core._AssetContextJS._assetPool;\n                    }\n                },\n\n                /**\n                 * @package -- for use in SAM.js only\n                 */\n                _assetPool: {\n                    get(this: any) {\n                        return this._core._AssetContextJS._assetPool;\n                    }\n                },\n\n                isOnline: {\n                    get(this: any) {\n                        return this.networkStatus !== undefined ? this.networkStatus !== NetworkStatus.Offline : undefined;\n                    }\n                },\n\n                // Most JS clients never used recentsSource, so use the SAM.js name\n                recentAssetsSource: {\n                    get(this: any) {\n                        return this.recentsSource;\n                    }\n                },\n\n                getRootFolder(this: any): Promise<AdobeAsset> {\n                    return Promise.resolve(this.rootFolder);\n                },\n\n                assetsHaveArtifacts(assets: AdobeAsset[]) {\n                    return (async () => {\n                        // @ts-ignore\n                        if (assets.some((a: AdobeAsset) => !a.routesToAcplV2)) {\n                            return false;\n                        }\n\n                        const assetReviewServiceInterface = new AssetReviewServiceInterface(core);\n                        const assetIndentifiers: IReviewServiceAssetIdentifer[] = mapAssetsToAssetIndentifier(assets);\n                        const results = await assetReviewServiceInterface.hasOutputs(assetIndentifiers);\n                        if (results.length === 0) {\n                            return false;\n                        }\n\n                        results.forEach((asset) => {\n                            const foundAsset = assets.find((a) => a.id === asset['repo:assetId']);\n                            if (!foundAsset) {\n                                return;\n                            }\n\n                            foundAsset['_hasArtifacts'] = true;\n                            foundAsset.dispatch({ type: 'change' });\n                        });\n\n                        return true;\n                    })();\n                }\n            },\n            observableMap: {\n                'networkChanged': [ 'networkStatus' ],\n                'stateChanged': [ 'cloudSyncStatus' ]\n            }\n        });\n        const onAssetsChanged = ({ properties, status, previews }: IAssetsChangedEvent) => {\n            for (const asset of [ ...properties, ...status ]) {\n                asset._onAssetChanged?.();\n            }\n\n            for (const asset of previews) {\n                asset?._onRenditionChanged?.();\n            }\n        };\n        // only subscribe once\n        if (!acplModel.applicationAssetContext._isForwardingAssetChangeEvents) {\n            acplModel.applicationAssetContext.on('changedAssets', onAssetsChanged);\n            acplModel.applicationAssetContext._isForwardingAssetChangeEvents = true;\n        }\n    }\n}\n\n// See note above about testing in UXP SAM demo app\nexport function patchAssetSource(core: ISAMCorePrivate) {\n    const acplModel = getACPLModel();\n\n    const dirMap: { [key in IOrderDirection]: OrderDirection } = {\n        ascending: OrderDirection.Ascending,\n        descending: OrderDirection.Descending\n    };\n\n    const fieldMap: { [key in AdobeAssetOrderField]: OrderField} = {\n        name: OrderField.Name,\n        modified: OrderField.Modified,\n        created: OrderField.Created,\n        shared: OrderField.Shared\n    };\n\n    const AssetSource = acplModel.applicationAssetContext.rootFolder.children.constructor;\n\n    // TODO: update actual version when the issues below are fixed\n    if (isSAMCppVer('lt', '9999.9999.9999')) {\n        ExtendClass({\n            klass: AssetSource,\n            core,\n            overrides: {\n                // SAM.cpp doesn't support Order/Filter objects that SAM.js clients are using. Meanwhile,\n                // clients like CDO are expecting the SAM.cpp call signature, so both APIs are supported here.\n                getList(this: any, maybeOrder: (AdobeAssetOrder | OrderDirection), maybeFilter?: (AdobeAssetFilter | OrderField)) {\n                    let field: OrderField;\n                    let dir: OrderDirection;\n\n                    // if both `direction` and `field` are defined, then it is an AdobeAssetOrder instance\n                    const order = maybeOrder as AdobeAssetOrder;\n                    if (order.direction ?? order.field ?? true) {\n                        dir = dirMap[order.direction];\n                        field = fieldMap[order.field];\n                    } else {\n                        dir = maybeOrder as OrderDirection;\n                        field = maybeFilter as OrderField;\n                        maybeFilter = undefined;\n                    }\n\n                    // Fallback to safe defaults\n                    dir = (dir in OrderDirection) ? dir : OrderDirection.Descending;\n                    field = (field in OrderField) ? field : OrderField.Modified;\n\n                    const filter = maybeFilter as AdobeAssetFilter;\n                    let list: any;\n                    // Note: if mediaTypes is undefined, it should use the default filter (SAM.cpp only)\n                    // If mediaTypes is an empty array, that means \"show everything\".\n                    if (filter?.mediaTypes) {\n                        list = this.getListWithTypes(dir, field, [ ...filter.mediaTypes ]);\n                    } else {\n                        list = this.getList.original(dir, field);\n                    }\n                    // Note: must patch AssetList before patching AssetSource or else next line will throw an exception\n                    list._addEventInterceptors();\n                    return list;\n                }\n            }\n        });\n    }\n}\n\n// See note above about testing in UXP SAM demo app\nexport function patchAssetList(core: ISAMCorePrivate) {\n    const acplModel = getACPLModel();\n\n    const SAM_CPP_ITEM_EVENTS = [ 'refreshed', 'movedAsset', 'addedAsset', 'removedAsset' ];\n    const SAM_CPP_STATUS_EVENT = 'statusChanged';\n    const DELAY_MS = 120;\n\n    // TODO: expose AssetSource, AssetList as acplModel.AssetSource, acplModel.AssetList\n    // https://jira.corp.adobe.com/browse/SAM-1365\n    const assetSource = acplModel.applicationAssetContext.rootFolder.children;\n    const AssetList = assetSource.getList(OrderDirection.Descending, OrderField.Modified).constructor;\n\n    // TODO: update actual version when the issues below are fixed\n    if (isSAMCppVer('lt', '9999.9999.9999')) {\n        ExtendClass({\n            klass: AssetList,\n            core,\n            extensions: {\n                // SAM.cpp doesn't have loadNextPage, so map to loadMoreItems\n                loadNextPage(this: any) {\n                    return this.loadMoreItems();\n                },\n                // TODO: deprecate SAM.cpp load() and add refresh()\n                //       https://jira.corp.adobe.com/browse/SAM-2099\n                refresh(this: any) {\n                    return this.load();\n                },\n                // patchAssetSource calls this\n                _addEventInterceptors(this: any) {\n                    // only subscribe once\n                    if (!this._onError) {\n                        this._onError = (error: string) => {\n                            this._errors = this._errors || [];\n                            this._errors.push(error);\n                            this.dispatch(SharedStateChangedEvent);\n                        };\n                        this.on('error', this._onError);\n                    }\n\n                    if (!this._onListNotification) {\n                        this._onListNotification = () => {\n                            if (this._notificationTimer !== undefined) { return; }\n\n                            this._notificationTimer = setTimeout(() => {\n                                this._notificationTimer = undefined;\n                                // Invoke the SAM.cpp items getter\n                                this._items = this[$OVERRIDDEN_GETTERS]['items'].call(this);\n                                this.dispatch(SharedListChangedEvent);\n                                // Also fire status change so that items list is at the expected contents\n                                // when the status changes. Clients may post-process and cache list items\n                                // from SharedListChangedEvent, so SharedStateChangeEvent must be fired\n                                // afterward to ensure their cache has all expected items when the status changes.\n                                this.dispatch(SharedStateChangedEvent);\n                            }, DELAY_MS);\n                        };\n                        // SAM.cpp fires 4 different events for list change, but SAM.js clients only expect 1.\n                        SAM_CPP_ITEM_EVENTS.forEach(eventName => this.on(eventName, this._onListNotification));\n                    }\n\n                    if (!this._onStatusChange) {\n                        this._onStatusChange = () => {\n                            // After calling getList, clients should immediately receive the Loading\n                            // status change event\n                            if (this.status === AssetListStatus.Loading) {\n                                this.dispatch(SharedStateChangedEvent);\n                            } else {\n                                this._onListNotification();\n                            }\n                        };\n                        this.on(SAM_CPP_STATUS_EVENT, this._onStatusChange);\n                    }\n                },\n                errors: {\n                    get(this: any) {\n                        // Mobx observes under the SAM.js status event, rather than the CPP events\n                        this._core._environment.mobx.reportObserved(this, SharedStateChangedEvent.type);\n                        return this._errors;\n                    }\n                }\n            },\n            overrides: {\n                load(this: any) {\n                    this._errors = undefined;\n                    this.load.original();\n                    this.dispatch(SharedStateChangedEvent);\n                },\n                loadMoreItems(this: any) {\n                    this.loadMoreItems.original();\n                    this.dispatch(SharedStateChangedEvent);\n                },\n                // SAM.cpp creates a new Array instance and populates it every time clients call `list.items`, which\n                // adds a small (but non-zero) performance hit, and has unexpected behavior like\n                // `list.items !== list.items`. This patch caches the SAM.cpp items Array.\n                items: {\n                    get(this: any) {\n                        this._core._environment.mobx.reportObserved(this, SharedListChangedEvent.type);\n                        if (!this._items) {\n                            // Invoke the SAM.cpp getter\n                            this._items = this[$OVERRIDDEN_GETTERS]['items'].call(this);\n                        }\n                        return this._items;\n                    }\n                }\n            },\n            observableMap: {\n                // This makes 'status' property observable under the SAM.js SharedStateChangedEvent\n                [SharedStateChangedEvent.type]: [ 'status' ]\n                // The 'items' property is made observable in the getter override under the SharedListChangeEvent\n            }\n        });\n    }\n}\n\n// @TODO Will be used once https://jira.corp.adobe.com/browse/SAM-2145 is resolved.\nexport function patchTeamList(core: ISAMCorePrivate): void {\n    const acplModel = getACPLModel();\n    if (isSAMCppVer('gte', '9999.9999.9999')) {\n        return;\n    }\n\n    const spacesContext = acplModel.applicationAssetContext.spaceContext;\n    const teamsList = spacesContext.getTeams()\n        .getList(OrderDirection.Descending, OrderField.Name).constructor;\n    ExtendClass({\n        klass: teamsList,\n        core,\n        extensions: {\n            // TODO: deprecate SAM.cpp load() and add refresh()\n            //       https://jira.corp.adobe.com/browse/SAM-2099\n            refresh(this: any) {\n                return this.load();\n            }\n        }\n    });\n}\n\n// See note above about testing in UXP SAM demo app\nexport function patchAdobeAsset(core: ISAMCorePrivate) {\n    const acplModel = getACPLModel();\n    const ACPLAsset = acplModel.applicationAssetContext.rootFolder.constructor;\n    // TODO: update actual version when the issues below are fixed\n    if (isSAMCppVer('lt', '9999.9999.9999')) {\n        ExtendClass({\n            klass: ACPLAsset,\n            core,\n            overrides: {\n                restore(this: any, name?: string) {\n                    if (this.isLibraryElement) {\n                        // SAM.cpp doesn't support restoring CCLibrary Elements\n                        return this._core._AssetContextJS.restoreLibraryElement(this.cloudID);\n                    } else {\n                        return this.restore.original(name);\n                    }\n                },\n                permanentlyDelete(this: any) {\n                    if (this.isLibraryElement) {\n                        // SAM.cpp doesn't support permanently deleting CCLibrary Elements\n                        return this._core._AssetContextJS.permanentlyDeleteLibraryElement(this.cloudID);\n                    } else {\n                        return this.permanentlyDelete.original();\n                    }\n                },\n                duplicate(this: any) {\n                    return this.duplicate.original(false /*overWriteExisting*/);\n                }\n            },\n            extensions: {\n                // SAM.cpp doesn't have a `_setCollaboratorData`, which is called when the bulk fetch response is received in _handleBatchRequest.\n                _setCollaboratorData(this: any, updatedCollaborators: Collaborator[]) {\n                    AdobeAsset.prototype._setCollaboratorData.apply(this, [ updatedCollaborators ]);\n                    this._isCollaboratorDataLoaded = true;\n                    this.dispatch(SharedCollaboratorChangedEvent);\n                },\n                _queueCollaborators() {\n                    if (!this._isCollaboratorDataLoaded) {\n                        AdobeAsset.prototype._queueCollaborators.apply(this);\n                    }\n                },\n                // SAM.cpp doesn't have a `isShared` property\n                isShared: {\n                    get(this: any) {\n                        this._core._environment.mobx.reportObserved(this, COLLABORATOR_CHANGED);\n                        // SWY Assets are shared, so no need to load collaborator data\n                        // if isSharedWithYouAsset is false, it might not be known if it is a SWY item\n                        if (this.isSharedWithYouAsset) { return true; }\n                        this._queueCollaborators();\n                        return this._isShared;\n                    }\n                },\n                // SAM.cpp doesn't have a `directCollaboratorCount` property\n                directCollaboratorCount: {\n                    get(this: any) {\n                        this._core._environment.mobx.reportObserved(this, COLLABORATOR_CHANGED);\n                        this._queueCollaborators();\n                        return this._directCollaboratorCount;\n                    }\n                },\n                // SAM.cpp doesn't have a `collaboratorArray` property\n                collaboratorArray: {\n                    get(this: any) {\n                        this._core._environment.mobx.reportObserved(this, COLLABORATOR_CHANGED);\n                        this._queueCollaborators();\n                        return this._collaboratorsArray;\n                    }\n                },\n                // SAM.cpp doesn't have an `isPublicLink` property\n                isPublicLink: {\n                    get(this: any) {\n                        this._core._environment.mobx.reportObserved(this, COLLABORATOR_CHANGED);\n                        this._queueCollaborators();\n                        return this._isPublicLink;\n                    }\n                },\n                // SAM.cpp doesn't have an `id` property\n                id: {\n                    get(this: any) {\n                        // `id` is observable because cloudID and localID are observable\n                        // due to defaultObservableEvent\n                        return this.cloudID || this.localID;\n                    }\n                },\n                // SAM.cpp doesn't expose leave\n                removeCurrentUserFromCollaborationList(this: any): Promise<void> {\n                    return this._core.collaborationContext._removeCurrentUserFromCollaborationList(this);\n                },\n                // SAM.cpp doesn't expose discard\n                discard(this: any) {\n                    // For Projects items, archive() will do a discard\n                    return this.archive().then(() => {\n                        if (!this.routesToAcplV2) {\n                            oneTimeWarning('discardAsArchive',\n                                `Asset.discard(): '${this.repoPath}' will be archived rather than discarded`\n                                + ' because it routes to ACPL v1 rather than V2.');\n                        }\n\n                        // Archive might not be complete in the cloud yet, so monitor via event listener\n                        const discardOutputs = () => {\n                            // If the asset is not discarded or does not have artifacts\n                            // or does not route to ACPLv2 we don't want to attempt to discard\n                            // the outputs folder.\n                            if (!this.isDiscarded || !this._hasArtifacts || !this.routesToAcplV2) { return; }\n\n                            const assetReviewServiceInterface = new AssetReviewServiceInterface(this._core);\n                            assetReviewServiceInterface.discardOutputsForAsset(this.id).then(() => {\n                                this._hasArtifacts = false;\n                                this.off(SharedChangeEvent.type, discardOutputs);\n                            });\n                        };\n\n                        this.on(SharedChangeEvent.type, discardOutputs);\n\n                        // in case it did complete in the cloud\n                        if (this.isDiscarded && this._hasArtifacts) { discardOutputs(); }\n                    });\n                },\n                // SAM.cpp doesn't have `links`\n                links: {\n                    get(this: any) {\n                        // Can't infer the real links because there's no way to know the real region the Asset is\n                        // hosted. Can't use the generalized endpoints, because when the service redirects to the\n                        // regionalized endpoint, it can drop the auth headers, causing the redirect to fail. For\n                        // now, return empty object to prevent `undefined` errors.\n                        return {};\n                    }\n                },\n                hasPermission(this: any, ...permissions: Permission[]): boolean {\n                    this._core._environment.mobx.reportObserved(this, SharedPermissionsChangeEvent.type);\n                    const hasPermissions = !!this._permissions && AdobeAsset.prototype.hasPermission.apply(this, permissions);\n                    if (!this._hasLoadedPermissions) {\n                        // prevent loading when already loading\n                        this._hasLoadedPermissions = true;\n                        this._core._AssetContextJS._rapi.resolveById(this.cloudID)\n                            .then((assetInterface: AssetInterface) => {\n                                return assetInterface.getEffectivePermissions();\n                            })\n                            .then((permissions: Permission) => {\n                                this._permissions = permissions;\n                                this.dispatch(SharedPermissionsChangeEvent);\n                            });\n                    }\n                    return hasPermissions;\n                },\n                // SAM.cpp doesn't have thumbnailURL\n                thumbnailURL: {\n                    get(this: any) {\n                        this._core._environment.mobx.reportObserved(this, SharedThumbnailChangeEvent.type);\n                        // Library Elements do not work on SAM.cpp at all\n                        if (this.isFolder || this.isLibraryElement) {\n                            return '';\n                        }\n                        if (this._refreshThumbnail || !this._thumbnailInfo) {\n                            // Prevent multiple calls to getThumbnailRendition. ACPLAsset.ts didn't retry\n                            // on reject, so this code shouldn't need to.\n                            this._refreshThumbnail = false;\n                            this._thumbnailStatus = RenditionStatus.Fetching;\n                            this.getThumbnailRendition()\n                                .then(({ file, hash }: { file: string, hash: string }) => {\n                                    this._thumbnailStatus = RenditionStatus.Done;\n                                    if (this._thumbnailInfo?.file === file && this._thumbnailInfo?.hash === hash) {\n                                        return; // no change\n                                    }\n                                    // `#` and `^` must be encoded separately to work in UXP\n                                    file = file.replace('#', '%23').replace('^', '%5E');\n\n                                    const url = new URL(`file://${file}`);\n                                    url.searchParams.append('force', hash);\n                                    this._thumbnailInfo = {\n                                        file,\n                                        hash,\n                                        url: url.href\n                                    };\n                                    this.dispatch(SharedThumbnailChangeEvent);\n                                })\n                                .catch(() => {\n                                    this._thumbnailStatus = RenditionStatus.Error;\n                                    // Use empty thumbnailInfo so that re-render due to the status change doesn't try to\n                                    // fetch, which will probably still fail, getting stuck in a loop.\n                                    this._thumbnailInfo = {};\n\n                                    this.dispatch(SharedThumbnailChangeEvent);\n                                });\n                        }\n                        // While waiting for thumbnail, return existing thumbnail (if it exists) so the\n                        // UI doesn't go blank while waiting.\n                        return this._thumbnailInfo?.url || '';\n                    }\n                },\n\n                thumbnailStatus: {\n                    get(this: any) { return this._thumbnailStatus ?? RenditionStatus.NotStarted; }\n                },\n\n                getRenditionURL() {\n                    oneTimeWarning(\n                        'getRenditionURL',\n                        'SAM.cpp does not support all options of getRenditionURL. Clients that run on web'\n                        + ' and desktop should use AdobeAsset.thumbnailURL instead.');\n                    return this.thumbnailURL;\n                },\n\n                renditionURLStatus(this: any) { return this.thumbnailStatus; },\n\n                clearRenditionError(this: any) {\n                    if (this._thumbnailStatus === RenditionStatus.Error) {\n                        this._thumbnailStatus = RenditionStatus.NotStarted;\n                        this._thumbnailInfo = undefined;\n                        this._refreshThumbnail = true;\n                        this.dispatch(SharedThumbnailChangeEvent);\n                    }\n                },\n\n                // SAM.cpp fires Asset events via AssetContext, but SAM.js emits them from AdobeAsset\n                _onAssetChanged(this: any) {\n                    this.dispatch(SharedChangeEvent);\n                },\n                _onRenditionChanged(this: any) {\n                    this._refreshThumbnail = true;\n                    // Raise event so only clients that are observing will refresh the thumbnail\n                    this.dispatch(SharedThumbnailChangeEvent);\n                },\n                transferToSpace(this: AdobeAsset, target: Space | AdobeAsset) {\n                    return this._core.hostAssetContext.transfer(this, target);\n                },\n                // SAM.cpp doesn't have versions\n                versions: {\n                    get(this: any) {\n                        if (this._assetVersionSource) { return this._assetVersionSource; } // memoize\n                        const versionPool = new ItemPool<AssetVersion>(this._core, 'version');\n                        const getAssetInterface = this._core._AssetContextJS._rapi.resolveById(this.id);\n                        const loader = new AssetVersionLoader(versionPool, getAssetInterface);\n                        this._assetVersionSource = new ItemSource(versionPool, [ loader ], new EverythingFilter());\n                        return this._assetVersionSource;\n                    }\n                },\n                // SAM.cpp doesn't have getCommentsResource\n                getCommentsResource(this: any): Promise<CommentsResource> {\n                    if (!this._commentsResource) {\n                        // TODO: lazy-load CommentsResource module\n                        this._commentsResource = new CommentsResource(this._core, this.id);\n                    }\n                    return this._commentsResource;\n                },\n                hasArtifacts: {\n                    get(this: any) {\n                        this._core._environment.mobx.reportObserved(this, 'change');\n                        return this._hasArtifacts;\n                    }\n                }\n            },\n            // make all getter properties observable under the standard 'change' event\n            defaultObservableEvent: SharedChangeEvent.type\n        });\n    }\n}\n\n\ninterface IPatchedSpace extends Space {\n    _searchWorkingFilesSource: Promise<SpaceSearchSource>;\n    _searchArtifactsSource: Promise<SpaceSearchSource>;\n}\n\nexport function patchSpaceJS() {\n    const acplModel = getACPLModel();\n    const assetContext = acplModel.applicationAssetContext;\n\n    // Prior to version 1524, SAM.cpp space search APIs were not working correctly\n    // https://jira.corp.adobe.com/browse/SAM-1886\n    // https://jira.corp.adobe.com/browse/SAM-2189\n    if (isSAMCppVer('gte', '2.0.0-main.1524') && isSAMCppVer('lt', '9999.9999.9999')) {\n        // Until SAM.cpp can supply everything needed from SpaceContext and Spaces UI is not\n        // dependant on SAM.js internals, patching the Sources for Space contents to use SAM.cpp\n        // Sources so Spaces UI can have caching/badging.\n        Object.defineProperties(Space.prototype, {\n            searchWorkingFiles: {\n                value(this: IPatchedSpace): Promise<SpaceSearchSource> {\n                    if (this._searchWorkingFilesSource) {\n                        return Promise.resolve(this._searchWorkingFilesSource);\n                    }\n                    this._searchWorkingFilesSource = new Promise((resolve, reject) => {\n                        assetContext.spaceContext.lookupSpaceById(this.id)\n                            .then((space: Space) => {\n                                // `space` is the SAM.cpp Space object\n                                if (!space) {\n                                    reject(SAMError.create(SAMErrorCode.NOT_FOUND, `searchWorkingFiles could not find Space ${this.id}`));\n                                }\n                                resolve(space.searchWorkingFiles());\n                            });\n                    });\n                    return this._searchWorkingFilesSource;\n                }\n            },\n\n            searchArtifacts: {\n                value(this: IPatchedSpace, embedPermissions = false): Promise<SpaceSearchSource> {\n                    if (this._searchArtifactsSource) {\n                        return Promise.resolve(this._searchArtifactsSource);\n                    }\n                    this._searchArtifactsSource = new Promise((resolve, reject) => {\n                        assetContext.spaceContext.lookupSpaceById(this.id)\n                            .then((space: Space) => {\n                                // `space` is the SAM.cpp Space object\n                                if (!space) {\n                                    reject(SAMError.create(SAMErrorCode.NOT_FOUND, `searchArtifacts could not find Space ${this.id}`));\n                                }\n                                resolve(space.searchArtifacts(embedPermissions));\n                            });\n                    });\n                    return this._searchArtifactsSource;\n                }\n            }\n        });\n    } else if (isSAMCppVer('lt', '2.0.0-main.1524')) {\n        // For the prior versions of SAM where we don't have space search\n        // support in SAM.cpp we are using the temp code\n        // to use _AssetContextJS for _assetPool, USSInterface;\n        // use hostAssetContext for workingFilesFolder or spaceAdobeAsset\n        Object.defineProperties(Space.prototype, {\n            searchWorkingFiles: {\n                async value(this: Space): Promise<SpaceSearchSource> {\n                    const assetContext: AssetContext = this._core._AssetContextJS!;\n                    const { _assetPool, _ussInterface } = assetContext;\n\n                    // We need to use the hostAssetContext as we need to get updates from SAM.cpp AdobeAsset so that the search\n                    // filter works fine in case of updates to the space.\n                    const workingFilesFolder = await this._core.hostAssetContext\n                        .getAssetWithRepoPath(`${this.pathName}/working_files`, this.repositoryID);\n\n                    const spaceSearchAssetLoader = new SpaceSearchAssetLoader(\n                        _assetPool,\n                        this._core,\n                        workingFilesFolder,\n                        _ussInterface,\n                        'excludeArtifacts',\n                        true // always include permissions for 1-off invitees\n                    );\n\n                    const implicitFilter = new SpaceSearchAssetFilter({\n                        asset: workingFilesFolder,\n                        artifactFilter: 'excludeArtifacts'\n                    });\n                    return new ItemSource(_assetPool, [ spaceSearchAssetLoader ], implicitFilter);\n                }\n            },\n\n            searchArtifacts: {\n                async value(this: Space, embedPermissions = false): Promise<SpaceSearchSource> {\n                    // SAM.cpp AssetContext doesn't expose _assetPool/_ussInterface, so need\n                    // to fall back to the JS impl of AssetContext when present. This is\n                    // required as SAM.cpp space search APIs are not patched for\n                    // SAM versions prior to 1524\n                    const assetContext: AssetContext = this._core._AssetContextJS!;\n                    const { _assetPool, _ussInterface } = assetContext;\n\n                    // We need to use the hostAssetContext as we need to get updates from SAM.cpp AdobeAsset so that the search\n                    // filter works fine in case of updates to the space.\n                    const spaceAdobeAsset = await this._core.hostAssetContext.getAssetWithCloudID(this.id);\n\n                    const spaceSearchAssetLoader = new SpaceSearchAssetLoader(\n                        _assetPool,\n                        this._core,\n                        spaceAdobeAsset,\n                        _ussInterface,\n                        'onlyArtifacts',\n                        embedPermissions\n                    );\n\n                    const implicitFilter = new SpaceSearchAssetFilter({\n                        asset: spaceAdobeAsset,\n                        artifactFilter: 'onlyArtifacts',\n                        // Some artifacts may be in hidden folders\n                        _includeHiddenRecursive: true\n                    });\n                    return new ItemSource(_assetPool, [ spaceSearchAssetLoader ], implicitFilter);\n                }\n            }\n        });\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n\nimport { IServiceLink, RelType } from './LinkUtils';\n\nexport interface IGradientColorRGB {\n    r: number;\n    g: number;\n    b: number;\n}\n\nexport interface IGradientColorStopValue {\n    mode: string;\n    value: IGradientColorRGB;\n}\n\n/**\n * Color Stop\n * Each color stop has at minimum a color and offset.\n * Every color must include an sRGB representation.\n */\nexport interface IGradientColorStop {\n    color: IGradientColorStopValue[];\n    /**\n     * Percentage offset for the color stop along the gradient path\n     */\n    offset: number;\n}\n\nexport interface IGradientResponseLinks {\n    [RelType.PROJECTS_GRADIENTS_COLLECTION]: IServiceLink\n}\n\nexport interface IGradientItemResponse {\n    'project:gradientId': string;\n    /**\n     * IComputedGradientData extends IGradientData and\n     * adds a couple of properties for use within SAM.js.\n     */\n    'project:gradientData': IComputedGradientData;\n    'project:gradientName': string;\n    'project:gradientTextColor': IGradientTextColor;\n}\n\nexport interface IGradientTextColor {\n    alpha: number;\n    mode: 'RGB' | string;\n    value: IGradientColorRGB;\n    type: 'process' | string;\n}\n\n// The computed item response interface allows us to create an unique\n// id for the gradient based on language and it's actual id\n// this way we can store the unique gradients.\nexport interface IGradientComputedItemResponse extends IGradientItemResponse {\n    computedID: string;\n}\n\nexport function computeGradientID(rawGradientId: string, languageCode: string): string {\n    return `${rawGradientId}-${languageCode}`;\n}\n\nexport interface IGradientOpacity {\n    /**\n     * Percentage offset for the opacity stop along the gradient path\n     */\n    offset: number;\n    /**\n     * Location of midpoint between the previous stop and this stop,\n     * as a percentage of the distance between by the interpolation algorithm).\n     * The midpoint is ignored for the first stop, since it has no previous stop.\n     */\n    opacity: number;\n}\n\n/**\n * Gradient Data Derived from\n * https://git.corp.adobe.com/caf/xcm/blob/1efcec108c1dcc7bfbfe7bc7eb313dcfdcc94138/schemas/cc/library/data/gradient/gradient.schema.json\n */\n\nexport interface IGradientData {\n    /**\n     * The type of gradient (linear or radial)\n     */\n    type: 'linear' | 'radial';\n    /**\n     * Rotation of the gradient (applies to both linear and radial gradients)\n     * - this is measured anti clockwise from the positive x-axis\n     */\n    angle?: number;\n    /**\n     * Each color stop has at minimum a color and offset.\n     * Every color must include an sRGB representation.\n     */\n    stops: IGradientColorStop[];\n    /**\n     * This is separate from the color stops, since some applications like\n     * Photoshop support separate color and opacity stops\n     */\n    opacities?: IGradientOpacity[];\n}\n\nexport interface IComputedGradientData extends IGradientData {\n    isDefault?: boolean;\n    languageCode?: string;\n}\n\nexport interface IGradientsResponse {\n    default: string;\n    children: IGradientItemResponse[];\n    _links: IGradientResponseLinks;\n}\n\n/**\n * Takes the response from the service and computes the result\n * to add additional properties.\n *\n * @param rawGradientData Data directly from the service.\n * @param defaultGradientId The default gradient from the service.\n * @param languageCode The language code.\n * @returns\n */\nexport function computeGradients(\n    rawGradientData: IGradientItemResponse[],\n    defaultGradientId: string,\n    languageCode: string\n): IGradientComputedItemResponse[] {\n    return rawGradientData.map((gradient: IGradientItemResponse) => {\n        return {\n            ...gradient,\n            computedID: computeGradientID(gradient['project:gradientId'], languageCode),\n            'project:gradientData': {\n                ...gradient['project:gradientData'],\n                isDefault: defaultGradientId === gradient['project:gradientId'],\n                languageCode\n            }\n        };\n    });\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { IItemFilter, ItemFilterRelation } from '../core/ItemFilter';\nimport type { default as AdobeAsset } from './AdobeAsset';\n\nconst AdobeAssetFilterName = 'AdobeAssetFilter';\n\nexport interface IAdobeAssetFilterOptions {\n    readonly mediaTypes?: string[];\n    readonly excludeMediaTypes?: string[];\n}\n\n/**\n * For ItemSources on AssetContext and AdobeAsset, the AdobeAssetFilter is the only one used by clients today.\n * Separately, we have the USSAdobeAssetFilter which is used by clients to filter USS assets,\n * and other external filters on other sources.\n * This filter can be used to filter AdobeAsset objects by mediaType and excludeMediaType.\n * If both mediaType and excludeMediaType are specified then only mediaType\n * will be considered for filtering. If neither mediaType nor excludeMediaType are specified then all mediaTypes\n * will be considered for filtering.\n */\n\nexport default class AdobeAssetFilter implements IItemFilter<AdobeAsset> {\n    _mediaTypes?: Set<string> = undefined;\n    _excludeMediaTypes?: Set<string> = undefined;\n\n    constructor(options?: Partial<IAdobeAssetFilterOptions>) {\n        if (options?.mediaTypes) {\n            this._mediaTypes = new Set(options.mediaTypes);\n        }\n\n        if (options?.excludeMediaTypes) {\n            this._excludeMediaTypes = new Set(options.excludeMediaTypes);\n        }\n\n        if (options?.mediaTypes?.length && options?.excludeMediaTypes?.length) {\n            this._mediaTypes = new Set([]);\n            console.warn('Both mediaTypes and excludeMediaTypes should not be specified while creating AdobeAssetFilter, setting default value for mediaTypes');\n        }\n    }\n\n    get hash(): string {\n        let mediaTypeHashPart = 'mediatypes=' + (this._mediaTypes?.size ? `${[ ...this._mediaTypes ].sort().join(',')}` : 'all-types');\n        mediaTypeHashPart += ':excludemediatypes=' + (this._excludeMediaTypes?.size ? `${[ ...this._excludeMediaTypes ].sort().join(',')}` : 'none');\n        return mediaTypeHashPart;\n    }\n\n    get mediaTypes(): Set<string> | undefined {\n        return this._mediaTypes;\n    }\n\n    get excludeMediaTypes(): Set<string> | undefined {\n        return this._excludeMediaTypes;\n    }\n\n    get name(): string {\n        return AdobeAssetFilterName;\n    }\n\n    matches(item: AdobeAsset): boolean {\n\n        return (!this._excludeMediaTypes?.size || !this._excludeMediaTypes.has(item.mediaType))\n            && (!this._mediaTypes?.size || this._mediaTypes.has(item.mediaType));\n\n    }\n\n    getRelationToFilter(other: AdobeAssetFilter): ItemFilterRelation {\n        const mediaTypeRelation: ItemFilterRelation = this.getMediaRelationToFilter(other);\n\n        if (mediaTypeRelation === 'disjoint') {\n            return 'disjoint';\n        }\n\n        //----- All 'disjoint' cases must be handled above this line\n\n        if (mediaTypeRelation === 'unknown') {\n            // This filter shares some, but not all of the mediaTypes of other. They\n            // could overlap, but can't know for sure.\n            return 'unknown';\n        }\n\n        //------ All 'unknown' cases must be handled above this line\n\n        // Since the filters can't be 'disjoint', there must be some overlap, leaving\n        // only 'unknown' and 'subset' as a possibility. Since all 'unknown' cases have\n        // been eliminated, the only remaining possibility is 'subset'.\n        // NOTE: Returns mediaTypeRelation for verification in unit tests.\n        return mediaTypeRelation;\n    }\n\n    /*\n    Cases to be handled for include and exclude filter:\n    ---------------------------------------------------------------------------------\n    this_include | this_exclude | other_include | other_exclude | case no,\n                                                                    possible values\n                                                                    s=subset,\n                                                                    u=unknown,\n                                                                    d=disjoint\n    ---------------------------------------------------------------------------------\n        0               0               0               0           case 1 - s\n    ---------------------------------------------------------------------------------\n        0               0               0               1           case 2 - u\n    ---------------------------------------------------------------------------------\n        0               0               1               0           case 3 - u\n    ---------------------------------------------------------------------------------\n        0               0               1               1           na\n    ---------------------------------------------------------------------------------\n        0               1               0               0           case 4 - s\n    ---------------------------------------------------------------------------------\n        0               1               0               1           case 5 - s & u\n    ---------------------------------------------------------------------------------\n        0               1               1               0           case 6 - u & d\n    ---------------------------------------------------------------------------------\n        0               1               1               1           na\n    ---------------------------------------------------------------------------------\n        1               0               0               0           case 7 - s\n    ---------------------------------------------------------------------------------\n        1               0               0               1           case 8 - s, u & d\n    ---------------------------------------------------------------------------------\n        1               0               1               0           case 9 - s, u & d\n    ---------------------------------------------------------------------------------\n        1               0               1               1           na\n    ---------------------------------------------------------------------------------\n        1               1               0               0           na\n    ---------------------------------------------------------------------------------\n        1               1               0               1           na\n    ---------------------------------------------------------------------------------\n        1               1               1               0           na\n    ---------------------------------------------------------------------------------\n        1               1               1               1           na\n    ---------------------------------------------------------------------------------\n\n    There are some cases which are not applicable(na) because for now it is not allowed to specify both include\n    and exclude mediatypes on a filter\n    */\n\n    getMediaRelationToFilter(other: AdobeAssetFilter): ItemFilterRelation {\n\n        enum mediaTypeRelation {\n            uninitialized = 0,\n            subset,\n            disjoint,\n            intersaction,\n        }\n\n        function getMediaTypeRelation(current: Set<string>, other: Set<string>): mediaTypeRelation {\n            let subset: boolean = true;\n            let intersaction: boolean = false;\n            for (const item of current) {\n                if (other.has(item)) {\n                    intersaction = true;\n                } else {\n                    subset = false;\n                }\n            }\n            if (!intersaction) {\n                return mediaTypeRelation.disjoint;\n            } else if (subset) {\n                return mediaTypeRelation.subset;\n            }\n            return mediaTypeRelation.intersaction;\n        }\n\n        let thisIncludeOtherInclude: mediaTypeRelation = mediaTypeRelation.uninitialized;\n        let thisIncludeOtherExclude: mediaTypeRelation = mediaTypeRelation.uninitialized;\n        let otherIncludeThisExclude: mediaTypeRelation = mediaTypeRelation.uninitialized;\n        let otherExcludethisExclude: mediaTypeRelation = mediaTypeRelation.uninitialized;\n\n        if (this._mediaTypes?.size && other._mediaTypes?.size) {\n            thisIncludeOtherInclude = getMediaTypeRelation(this._mediaTypes, other._mediaTypes);\n        }\n\n        if (this._mediaTypes?.size && other._excludeMediaTypes?.size) {\n            thisIncludeOtherExclude = getMediaTypeRelation(this._mediaTypes, other._excludeMediaTypes);\n        }\n\n        if (this._excludeMediaTypes?.size && other._mediaTypes?.size) {\n            otherIncludeThisExclude = getMediaTypeRelation(other._mediaTypes, this._excludeMediaTypes);\n        }\n\n        if (this._excludeMediaTypes?.size && other._excludeMediaTypes?.size) {\n            otherExcludethisExclude = getMediaTypeRelation(other._excludeMediaTypes, this._excludeMediaTypes);\n        }\n\n        // handling disjoint for case 6, 8, 9\n        if (otherIncludeThisExclude === mediaTypeRelation.subset\n                || thisIncludeOtherExclude === mediaTypeRelation.subset\n                || thisIncludeOtherInclude === mediaTypeRelation.disjoint) {\n            return 'disjoint';\n        }\n\n        // handling unknown for case 5, 6, 8, 9\n        if (otherExcludethisExclude === mediaTypeRelation.intersaction\n                || otherIncludeThisExclude === mediaTypeRelation.intersaction\n                || thisIncludeOtherExclude === mediaTypeRelation.intersaction\n                || thisIncludeOtherInclude === mediaTypeRelation.intersaction) {\n            return 'unknown';\n        }\n\n        // handling for case 2, 3 - only possible value 'unknown'\n        if (!this._mediaTypes?.size && !this._excludeMediaTypes?.size\n                && (other._mediaTypes?.size || other._excludeMediaTypes?.size)) {\n            // If the other list has mediaType/excludeMediaType and this filter doesn't then\n            // this list is going to have an unknown final state.\n            return 'unknown';\n        }\n\n        // we have handled all possible disjoint/unknown cases above and can safely return subset from here\n        return 'subset';\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { IItemFilter, ItemFilterRelation } from '../core/ItemFilter';\nimport type { default as AdobeAsset } from './AdobeAsset';\nimport ImplicitDirectoryListingFilter, { IImplicitDirectoryListingFilterOptions } from './ImplicitDirectoryListingFilter';\nimport AdobeAssetFilter, { IAdobeAssetFilterOptions } from './AdobeAssetFilter';\nimport { IImplicitAdobeAssetFilterBaseOptions } from './ImplicitAdobeAssetFilterBase';\n\n\nexport type IImplicitDirectoryListingAssetFilterOptions = IAdobeAssetFilterOptions & IImplicitDirectoryListingFilterOptions & IImplicitAdobeAssetFilterBaseOptions;\n\nexport default class ImplicitDirectoryListingAssetFilter implements IItemFilter<AdobeAsset> {\n    private readonly _implicitDirectoryListingFilter?: ImplicitDirectoryListingFilter;\n    private readonly _adobeAssetFilter?: AdobeAssetFilter;\n\n    constructor(options: IImplicitDirectoryListingAssetFilterOptions) {\n        const { asset, mediaTypes, excludeMediaTypes, ...baseOpts } = options;\n        // ImplicitDirectoryListingFilter handles the ImplicitAdobeAssetFilterBase cases\n        this._implicitDirectoryListingFilter = new ImplicitDirectoryListingFilter({ asset, ...baseOpts });\n        if (mediaTypes || excludeMediaTypes) {\n            this._adobeAssetFilter = new AdobeAssetFilter({\n                mediaTypes,\n                excludeMediaTypes\n            });\n        }\n    }\n\n    get hash(): string {\n        return [\n            this._implicitDirectoryListingFilter?.hash,\n            this._adobeAssetFilter?.hash\n        ].filter(hash => !!hash).join(':');\n    }\n\n    getRelationToFilter(other: ImplicitDirectoryListingAssetFilter): ItemFilterRelation {\n        if (this._adobeAssetFilter && other._adobeAssetFilter && this._adobeAssetFilter.getRelationToFilter(other._adobeAssetFilter) === 'disjoint') {\n            return 'disjoint';\n        }\n        if (this._implicitDirectoryListingFilter && other._implicitDirectoryListingFilter && this._implicitDirectoryListingFilter.getRelationToFilter(other._implicitDirectoryListingFilter) === 'disjoint') {\n            return 'disjoint';\n        }\n        if (this._adobeAssetFilter && other._adobeAssetFilter && this._adobeAssetFilter.getRelationToFilter(other._adobeAssetFilter) === 'unknown') {\n            return 'unknown';\n        }\n        if (this._implicitDirectoryListingFilter && other._implicitDirectoryListingFilter && this._implicitDirectoryListingFilter.getRelationToFilter(other._implicitDirectoryListingFilter) === 'unknown') {\n            return 'unknown';\n        }\n        return 'subset';\n    }\n\n    matches(item: AdobeAsset): boolean {\n        if (this._adobeAssetFilter && !this._adobeAssetFilter.matches(item)) {\n            return false;\n        }\n\n        if (this._implicitDirectoryListingFilter && !this._implicitDirectoryListingFilter.matches(item)) {\n            return false;\n        }\n\n        // it matched both filters above\n        return true;\n    }\n\n    get mediaTypes(): Set<string> | undefined {\n        return this._adobeAssetFilter?.mediaTypes;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { AssetClass, AssetLinks, AssetStateChoices, Assignee, RepositoryMetadata } from '../interface/RepositoryModel';\nimport { memoize, observable } from '../core/decorators';\nimport oneTimeWarning from '../utils/oneTimeWarning';\nimport {\n    _projectLinkKeys,\n    IProject,\n    IProjectLinks,\n    IProjectPatchData,\n    IProjectsCreatorData,\n    parseProjectEffectivePermissions,\n    ProjectLeaveReason,\n    ProjectViews\n} from '../interface/ProjectsModel';\nimport ItemUpdater from '../core/ItemUpdater';\nimport PropertyUpdater, { NotFound } from '../core/PropertyUpdater';\nimport AdobeAsset, { AdobeAssetUpdaterMetadata, StorageAssigneeFormat } from '../assets/AdobeAsset';\nimport { renameFileInPath, validatePlatformRepoName, updateCachedDescendents } from '../assets/AssetUtils';\nimport SAMError, { SAMErrorCode } from '../core/SAMError';\nimport ProjectsInterface from '../interface/ProjectsInterface';\nimport { RelType } from '../interface/LinkUtils';\nimport { Permission } from '../interface/AssetModel';\nimport { Gradient } from './Gradient';\nimport { computeGradientID } from '../interface/GradientModel';\nimport { ISAMCorePrivate, ISAMObject, SharedCollaboratorChangedEvent } from '../indexPrivate';\nimport { AdobeAssetSource } from '../assets/AdobeAssetSource';\nimport AdobeAssetDirectoryLoader from '../assets/AdobeAssetDirectoryLoader';\nimport ItemSource from '../core/ItemSource';\nimport { libraryMediaTypeString } from '../assets/AdobeAssetFactory';\nimport ImplicitDirectoryListingAssetFilter from '../assets/ImplicitDirectoryListingAssetFilter';\nimport { IUpdateSession } from '../core/UpdateSession';\nimport { lazyLoaded, LazyLoadManager, LoadStatus } from '../core/decorators/LazyLoadManager';\nimport { CHANGE, SharedChangeEvent } from '../core/ChangeEvent';\nimport { CreateLibraryOptions, CreateProjectLibraryData } from '../interface/LibraryModel';\nimport Library from '../libraries/Library';\n\nexport interface IProjectProperties {\n    gradientID: string;\n    /**\n     * @experimental API May change.\n     */\n    description: string;\n}\n/**\n * The views that a project can actually have\n * which currently excludes ProjectViews.All and ProjectViews.Admin\n */\ntype ProjectItemView = ProjectViews.SWY | ProjectViews.Yours | undefined;\n\nexport default class Project extends AdobeAsset {\n    private _description: string = '';\n    private _projectLinks?: IProjectLinks;\n\n    // We have separate permissions for a Project and AdobeAsset.\n    // AdobeAsset permissions for a project are the permissions on the folder (i.e. representing the project)\n    // ESM users might not have permission on the parent folder for Projects, so the permissions cannot be derived\n    // from the parent folder like normal folders.\n    private _projectPermissions: Permission = Permission.All;\n    /**\n     * This is the raw id that exists on the project app metadata\n     * but we internally compute this value and join the language\n     * code so we can store them in the ItemPool uniquely\n     * so if you need the computed gradientID, use the public\n     * Project.gradientID() and not the private _gradientID;\n     */\n    private _gradientID?: string;\n    private _view: ProjectItemView;\n    private _creator?: IProjectsCreatorData;\n    protected _assetClass: AssetClass = 'directory';\n    private _gradient: Gradient | undefined;\n\n    private _projectInterface = new ProjectsInterface(this._core);\n\n    public isProject: boolean = true;\n\n    private _repositoryOwner: Assignee = { id: '', type: 'user' };\n\n    constructor(\n        readonly _core: ISAMCorePrivate,\n        id: string,\n        metadata?: {\n            projectLinks?: IProjectLinks,\n            links?: AssetLinks,\n            etag?: string\n        }\n    ) {\n        super(_core, id, metadata);\n        this._projectLinks = metadata?.projectLinks;\n\n        // Overridden property.\n        // True to start with. If we have the metadata, we will update this.\n        this._needsRepoMetadata = true;\n\n        LazyLoadManager.manageLazyLoading(this, [ {\n            event: SharedChangeEvent,\n            fetchData: this._getGradient\n        } ]);\n    }\n\n\n    @observable\n    get gradientID(): string {\n        return this._gradientID ?? '';\n    }\n\n    /**\n     * Lazy loads and returns the Gradient belonging to this\n     * Project.\n     *\n     * @param languageCode\n     * @returns\n     */\n    @lazyLoaded(SharedChangeEvent, '_gradient')\n    get gradient(): Gradient | undefined {\n        return this._gradient;\n    }\n\n    private async _getGradient() {\n        this._gradient = await this._core.projectContext.getGradient(this.gradientID);\n    }\n\n    /**\n     * @TODO@PROJECT\n     * @experimental API may change.\n     */\n    @observable\n    get description(): string {\n        oneTimeWarning('Description Not yet Supported', 'Currently the description field is not supported by the service.');\n        return this._description;\n    }\n\n    /**\n     * @param repoMetadata {RepositoryMetadata} If passed in, it will be used instead of loading from the service\n     * @param appMetadata {any} If passed in, it will be used instead of loading from the service\n     *\n     * @package -- only for use in SAM.js\n     */\n    async _load({\n        repoMetadata,\n        appMetadata,\n        effectivePermission,\n        projectMetadata\n    }: {\n        repoMetadata?: RepositoryMetadata;\n        appMetadata?: any;\n        effectivePermission?: Permission;\n        projectMetadata?: IProject;\n    } = {}): Promise<void> {\n        // First load the AdobeAsset so that once we get the project metadata we override any relevant\n        // properties with the project metadata. One example of such field is createdBy. Etag is another one.\n        // We need to take care of permissions. We will get the permissions from the project service\n        // and we should handle them here as they are extended from RAPI effective permissions.\n        // https://jira.corp.adobe.com/browse/SAM-3086\n        // Also we need update the load method so that it does not load the permissions for a project\n        // We can probably govern that with the help of an argument to the load method.\n        await super._load({ repoMetadata, appMetadata, effectivePermission });\n        // now that we have the AdobeAsset loaded, we can reset the _needsRepoMetadata flag\n        this._needsRepoMetadata = false;\n\n        // If we have the project metadata, then we will use that to update the project\n        if (!projectMetadata) {\n            // load the project metadata using the project service\n            projectMetadata = await this._projectInterface.getProject(this.id);\n        }\n        const session = this._core.projectContext._assetPool.createMutationSession<Project>();\n        this._core.projectContext._projectUpdater.updateRemoteItem(session, projectMetadata!);\n        session.commit();\n    }\n\n    // @TODO@PROJECT We should implement something similar to _ensureLink here.\n    get projectLinks(): IProjectLinks | undefined {\n        return this._projectLinks;\n    }\n\n    get creator(): IProjectsCreatorData | undefined {\n        return this._creator;\n    }\n\n    /**\n     * The view that this project belongs to.\n     *\n     */\n    get view(): ProjectItemView {\n        return this._view;\n    }\n\n    async move(destFolder: AdobeAsset): Promise<void> {\n        oneTimeWarning('[MOVE_UNSUPPORTED]', `Move on a project is not supported ${destFolder}`);\n        return;\n    }\n\n    async rename(newName: string): Promise<void> {\n        if (!this._projectLinks?.[RelType.PROJECTS_RENAME]) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'Rename link is missing for this project.');\n        }\n        if (!validatePlatformRepoName(newName)) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'Invalid name provided for asset rename operation.');\n        }\n        await this._projectInterface.renameProject(newName, this._projectLinks);\n        const projectPool = this._core.projectContext._assetPool;\n        // Update the repo:name and repo:path after a rename\n        const session = projectPool.createUpdateSession<Project>();\n        const newPath = renameFileInPath(newName, this);\n        updateCachedDescendents({\n            assetPool: this._core.hostAssetContext._assetPool,\n            asset: this,\n            session,\n            operation: { type: 'rename', newPath }\n        });\n        this._core.projectContext._projectUpdater.updateLocalItem(session, this, { 'repo:name': newName, 'repo:path': newPath });\n        session.commit();\n    }\n\n    /**\n     * Discards a project through the Projects service instead of RAPI.\n     *\n     */\n    async discard(): Promise<void> {\n        if (this.isDiscarded) {\n            throw SAMError.create(SAMErrorCode.INVALID_OPERATION, 'Asset is already discarded');\n        }\n\n        await this._ensureLink(RelType.DISCARD);\n\n        await this._projectInterface.discardProject(this.id, this._projectLinks as IProjectLinks);\n        const projectPool = this._core.projectContext._assetPool;\n        const session = projectPool.createUpdateSession<Project>();\n        updateCachedDescendents({\n            assetPool: this._core.hostAssetContext._assetPool,\n            asset: this,\n            session,\n            operation: { type: 'discard' }\n        });\n        this._core.projectContext._projectUpdater.updateLocalItem(session, this, { 'repo:state': 'DISCARDED' });\n        session.commit();\n    }\n\n    /**\n     * Restores a project through the Projects service instead of RAPI.\n     *\n     */\n    async restore(): Promise<void> {\n        if (!this.isDiscarded) {\n            throw SAMError.create(SAMErrorCode.INVALID_OPERATION, 'Cannot restore an asset that is not discarded');\n        }\n\n        await this._ensureLink(RelType.RESTORE);\n\n        await this._projectInterface.restoreProject(this.id, this._projectLinks as IProjectLinks);\n        const projectPool = this._core.projectContext._assetPool;\n        const session = projectPool.createUpdateSession<Project>();\n        updateCachedDescendents({\n            assetPool: this._core.hostAssetContext._assetPool,\n            asset: this,\n            session,\n            operation: { type: 'restore' }\n        });\n        this._core.projectContext._projectUpdater.updateLocalItem(session, this, { 'repo:state': 'ACTIVE' });\n        session.commit();\n    }\n\n    /**\n     * @package\n     **/\n    async _updateProjectLinksFromService() {\n        // load the project links using the project service\n        const returnProject = await this._projectInterface.getProject(this.id);\n        const { _links } = returnProject;\n\n        const projectPool = this._core.projectContext._assetPool;\n        const session = projectPool.createUpdateSession<Project>();\n        this._core.projectContext._projectUpdater.updateLocalItem(session, this, { _links });\n        session.commit();\n    }\n\n    /**\n     * @package\n     **/\n    _isProjectLinkType(relType: RelType): relType is keyof IProjectLinks {\n        return _projectLinkKeys().includes(relType);\n    }\n\n    async _ensureLink(relType: keyof (AssetLinks & IProjectLinks)): Promise<void> {\n        // if the link is in _projectLinks, copy the _projectLink into _links\n        // relType is an AssetsLink index, it might be a link that isn't in IProjectLinks\n        if (this._isProjectLinkType(relType)) {\n            if (!this._projectLinks?.[relType as keyof IProjectLinks]) {\n                await this._updateProjectLinksFromService();\n            }\n            const links: AssetLinks = { ...this.__links, [relType]: this._projectLinks![relType] } as AssetLinks;\n\n            //using the AssetUpdater instead of ProjectUpdater because ProjectUpdater has no way to update _links\n            const session = this._core.hostAssetContext._assetPool.createUpdateSession();\n            this._core.hostAssetContext._adobeAssetUpdater.updateLocalItem(\n                session,\n                this,\n                { '_links': links }\n            );\n            session.commit();\n            return;\n        }\n\n        //call out to fetch the missing link\n        this._core._environment.debug(`ProjectLinkMissing ${relType} Link ${relType} missing on project, called out fetch it`);\n        await super._ensureLink(relType);\n    }\n\n    /**\n     * Validates whether this project can be renamed to the provided name\n     * SAM will take in the name from the client and substitute this in the repo:path\n     * of the project to get an absolute path. Project service would need the absolute\n     * path to disambiguate between projects for accounts that contain projects in both\n     * shared storage (/content/assets) and user storage (/projects). Right now both these\n     * belong to the same repository and once we have the unified storage model they will\n     * have separate repository ids and we will be able to identify them using repository id.\n     * @param name name of the project to be validated for rename.\n     */\n    async validateProjectNameForRename(name: string): Promise<boolean> {\n        if (name.toLowerCase() === this.name.toLowerCase()) {\n            return true;\n        }\n\n        return await this._core.projectContext.validateProjectNameForCreate(name, this);\n    }\n\n    /**\n     * @experimental API May change.\n     * @deprecated - to be removed in a future major version on or after 2024-10-01. SAM-3333\n     */\n    async updateProperties(/* properties: IProjectProperties */) {}\n\n    /**\n     * Returns an enumeration with a more precise reason for why the user\n     * can or cannot leave the Project. It may also return PENDING if we are still\n     * loading collaborator information.\n     *\n     * @returns {ProjectLeaveReason} An enumeration of reasons why the user can or cannot leave.\n     */\n    @lazyLoaded(SharedCollaboratorChangedEvent, '_collaboratorsArray')\n    leaveStatus(): ProjectLeaveReason {\n        // Note: queues collaborators if not fetched already\n        const collaborators = this.collaboratorArray;\n\n        if (!this._isCollaboratorDataLoaded) {\n            return ProjectLeaveReason.PENDING;\n        }\n\n        // If there are no collaborators returned, they can't leave anyway\n        if (collaborators.length === 0) {\n            return ProjectLeaveReason.CANNOT_LEAVE_NO_COLLABORATORS;\n        }\n\n        const currentUserCollaborator = collaborators.find((c) => c.isCurrentUser);\n\n        // If the user doesn't exist in the collaborators list\n        // this user has inherited access to this project and thus they can't\n        // leave and we should return the address book group member error response.\n        if (!currentUserCollaborator) {\n            return ProjectLeaveReason.CANNOT_LEAVE_ADDRESS_BOOK_GROUP_MEMBER;\n        }\n\n        if (currentUserCollaborator.role === 'owner') {\n            return ProjectLeaveReason.CANNOT_LEAVE_IS_OWNER;\n        }\n\n        // Admins of the org have access to all Projects. But sometimes, they can be directly invited by other members\n        // to the Project, which in this case, they are allowed to leave the Project as direct collaborator.\n        // This only removes their entry in the `directCollaborators` list, but won't change the permission as admin\n        // still have access to all content. Without direct invite permission, on leave, we show toast message such\n        // that admin can't leave Project.\n        if (!currentUserCollaborator.isDirect && currentUserCollaborator.isAdmin) {\n            return ProjectLeaveReason.CANNOT_LEAVE_IS_ADMIN_OF_PROJECT;\n        }\n\n        // At this point if they are the only collaborator then\n        // they can't leave, this case happens when a CCI user creates\n        // a Project and they are the only collaborator direct or not.\n        if (collaborators.length === 1) {\n            return ProjectLeaveReason.CANNOT_LEAVE_LAST_COLLABORATOR;\n        }\n\n        // User cannot leave if they are no more collaborators who can share.\n        const anotherDirectCollabWithSharePermissions = collaborators.find((c) => c.canShare && c.isDirect && c !== currentUserCollaborator);\n        // We also need to distinguish between whether it is a USM project or shared-storage project.\n        // In shared-storage projects, the user can't leave if they are the last direct collaborator with share permissions.\n        // In user storage projects, the user can leave as long as she is not the owner of the project.\n        if (!anotherDirectCollabWithSharePermissions && this.storageAssignee.type !== 'user') {\n            return ProjectLeaveReason.CANNOT_LEAVE_LAST_DIRECT_COLLAB_WITH_SHARE_PERMISSION;\n        }\n\n        // If the user is not a direct collaborator and is also\n        // not and admin, they can't leave due to inheriting\n        // access to this project and not getting directly invited.\n        if (!currentUserCollaborator.isDirect) {\n            return ProjectLeaveReason.CANNOT_LEAVE_ADDRESS_BOOK_GROUP_MEMBER;\n        }\n\n        return ProjectLeaveReason.CAN_LEAVE;\n    }\n\n    /**\n     * Returns a boolean based on the userCanLeaveReason() response above.\n     *\n     * @deprecated -- Use {@link Project.leaveStatus instead} -- will be removed on or after 2024-10-01\n     *\n     * @returns Undefined while fetching collaborator data.\n     */\n    userCanLeaveProject(): boolean | undefined {\n        oneTimeWarning('userCanLeaveProject Deprecated', 'Use Project.leaveStatus instead.'\n            + ' This will be removed on or after 2024-10-01.');\n        const reason: ProjectLeaveReason = this.leaveStatus();\n        switch (reason) {\n        case ProjectLeaveReason.PENDING:\n            return;\n        case ProjectLeaveReason.CAN_LEAVE:\n            return true;\n        case ProjectLeaveReason.CANNOT_LEAVE_NO_COLLABORATORS:\n        case ProjectLeaveReason.CANNOT_LEAVE_ADDRESS_BOOK_GROUP_MEMBER:\n        case ProjectLeaveReason.CANNOT_LEAVE_LAST_COLLABORATOR:\n        case ProjectLeaveReason.CANNOT_LEAVE_LAST_DIRECT_COLLAB_WITH_SHARE_PERMISSION:\n        case ProjectLeaveReason.CANNOT_LEAVE_IS_ADMIN_OF_PROJECT:\n        case ProjectLeaveReason.CANNOT_LEAVE_IS_OWNER:\n            return false;\n        }\n    }\n\n    @observable\n    hasPermission(...permissions: Permission[]): boolean {\n        return permissions.every((permission) =>\n            (this._projectPermissions & permission) === permission);\n    }\n\n    /**\n     * Updates project data like gradientID\n     *\n     * @param data Data to be updated on a project.\n     */\n    async updateProject(data: IProjectPatchData) {\n        await this._core.projectContext.updateProject(this.id, data);\n    }\n\n    /**\n     * @package For SAM.js internal use only\n     * checks and sets the permission to restore the project\n     */\n    _applyRestorePermission(updateSession: IUpdateSession<Project>): void {\n        // We don't get the project permissions from USS right now so we try to infer the restore permissions\n        // A user has restore permissions if she can create a project in the repository.\n        const canRestore = this._core.projectContext._getCachedRestoreCapability(this.repositoryID);\n        canRestore ? (this._projectPermissions |= Permission.Restore) : (this._projectPermissions &= ~Permission.Restore);\n        this._core.projectContext._projectUpdater.updateLocalItem(updateSession, this, { projectPermissions: this._projectPermissions });\n    }\n\n    /**\n    * @package -- only for use in SAM.js\n    */\n    // TODO: SAM-3499 will allow us to make this more efficient.\n    async _reloadPermissions(): Promise<void> {\n        await this._load();\n        super._reloadPermissions();\n    }\n\n    @memoize\n    get librariesSource(): AdobeAssetSource {\n        const directoryLoader = new AdobeAssetDirectoryLoader(this._core.hostAssetContext._assetPool, this, this._core, true, true);\n        const implicitFilter = new ImplicitDirectoryListingAssetFilter({\n            asset: this,\n            mediaTypes: [ libraryMediaTypeString ],\n            // Any Asset in a Project can also be SWY\n            _isSharedWithYou: true\n        });\n        return new ItemSource(this._core.hostAssetContext._assetPool, [ directoryLoader ], implicitFilter);\n    }\n\n    @observable\n    get repositoryOwner(): Assignee {\n        return this._repositoryOwner;\n    }\n\n    /**\n     * Creates a Library in this Project.\n     *\n     * @example\n     * const roles: LibraryRole[] = [{\n     *      type: 'brand',\n     *      usage: 'usage_brand',\n     *      priority: 'priority_brand'\n     * }];\n     * const library = project.createLibrary({ name: 'test', restrictEdit: true, roles });\n     *\n     */\n    async createLibrary(data: CreateProjectLibraryData): Promise<Library> {\n        const libraryContext = await this._core.getLibraryContext();\n        const options: CreateLibraryOptions = {\n            name: data.name,\n            parent_assetId: this.id,\n            roles: data.roles\n        };\n\n        // only specify the optional access when the optional restrictEdit was defined\n        if (data.restrictEdit !== undefined) {\n            options.access = data.restrictEdit ? 'team_view' : 'team_edit';\n        }\n\n        return libraryContext._createLibrary(options);\n    }\n\n}\n\nfunction getView(parsedSource: Partial<IProject>): ProjectItemView {\n    switch (parsedSource['project:view']) {\n    case 'sharedWithYou':\n        return ProjectViews.SWY;\n    case 'yours':\n        return ProjectViews.Yours;\n    default:\n        return;\n    }\n}\n\nfunction getPermission(source: Partial<IProject>): Permission | typeof NotFound {\n    // From Project listing\n    if (source._embedded?.[RelType.AC_EFFECTIVE]) {\n        return parseProjectEffectivePermissions(source._embedded[RelType.AC_EFFECTIVE]!);\n    }\n    // If the permissions are not present in the metadata then maintain the current value\n    return NotFound;\n}\n\nexport type ProjectUpdaterMetadata = AdobeAssetUpdaterMetadata & {\n    projectPermissions?: Permission;\n}\n\nexport const ProjectUpdater = new ItemUpdater<Project, Partial<IProject | ProjectUpdaterMetadata>>({\n    localItemType: Project,\n    remoteIdProperty: 'repo:assetId',\n    propertyUpdater: new PropertyUpdater({\n        '_repositoryID': 'repo:repositoryId',\n        '_path': 'repo:path',\n        '_etag': 'repo:etag',\n        '_view': { name: 'project:view', get: getView, format: 'number' },\n        '_created': { name: 'repo:createDate', format: 'date' },\n        '_description': 'description',\n        '_name': 'repo:name',\n        '_assetState': { name: 'repo:state', choices: AssetStateChoices },\n        '_storageAssignee': { name: 'storage:assignee', format: StorageAssigneeFormat },\n        '_projectLinks': { name: '_links', format: 'object' },\n        '_creator': { name: `_embedded[${RelType.PROJECTS_CREATOR}]`, format: 'object' },\n        '_createdBy': `_embedded[${RelType.PROJECTS_CREATOR}].id`,\n        /**\n         * @note Adding single quotes to ['project:rendition'] causes the property\n         * name to be computed as ''project:rendition'' with two single quotes.\n         * This obviously will cause the property updater to not find the requested property and\n         * not update it so the property naming convention is [project:rendition]\n         * without single quotes around the name.\n         */\n        '_gradientID': {\n            name: `_embedded[${RelType.APP_METADATA}][project:rendition].gradientId`,\n            set: (gradientID: string, dest: ISAMObject) => {\n                const project = dest as Project;\n\n                if (!gradientID) {\n                    project['_gradientID'] = '';\n                    return;\n                }\n                const computedGradientID = computeGradientID(gradientID, project._core._environment.getValue('LOCALE')!);\n                if (project['_gradientID'] !== computedGradientID) {\n                    project['_gradientID'] = computedGradientID;\n                    LazyLoadManager.setLoadStatus(project, CHANGE, LoadStatus.NotLoaded);\n                }\n            }\n        },\n        '_projectPermissions': { get: getPermission, format: 'number' },\n        '_repositoryOwner': { name: `_embedded[${RelType.REPOSITORY}][repo:owner]`, format: StorageAssigneeFormat },\n    })\n});\n\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { IProjectsOrderBy } from '../interface/ProjectsModel';\n\nimport { compareStrings, compareValues, createItemOrderFactory, IComparatorMap } from '../core/ItemOrder';\nimport Project from './Project';\n\nexport type ProjectOrderField =\n    | 'name'\n    | 'created';\n\nexport const OrderFieldToIProjectsOrderBy: { [key in ProjectOrderField]: IProjectsOrderBy } = {\n    'name': 'repo:name',\n    'created': 'repo:createDate',\n};\n\nconst OrderFieldToComparator: IComparatorMap<Project, ProjectOrderField> = {\n    name(a: Project, b: Project): number {\n        return compareStrings(a.name, b.name);\n    },\n    created(a: Project, b: Project): number {\n        return compareValues(a.created, b.created);\n    }\n};\n\nexport default class ProjectOrder extends createItemOrderFactory(OrderFieldToComparator) {\n    static default = new ProjectOrder('ascending', 'name');\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ProjectInterface from '../interface/ProjectsInterface';\nimport Project from './Project';\nimport { IItemLoader, IItemLoaderOptions, ILoadedPage, ILoadNextPage } from '../core/ItemLoader';\nimport ItemPool from '../core/ItemPool';\nimport { OrderFieldToIProjectsOrderBy } from './ProjectOrder';\nimport ProjectFilter from './ProjectFilter';\nimport { ProjectConfig } from './ProjectSource';\nimport { IServiceLink } from '../interface/LinkUtils';\nimport { IProject, IProjectsResponse, projectEnumToString } from '../interface/ProjectsModel';\nimport AdobeAsset, { AdobeAssetUpdaterMetadata } from '../assets/AdobeAsset';\nimport ItemUpdater from '../core/ItemUpdater';\n\nexport default class ProjectsListLoader implements IItemLoader<ProjectConfig> {\n\n    constructor(\n        private _projectPool: ItemPool<Project | AdobeAsset>,\n        private _projectInterface: ProjectInterface,\n        private _projectUpdater: ItemUpdater<Project, Partial<IProject | AdobeAssetUpdaterMetadata>>\n    ) {\n    }\n\n    supportsFilter(filter?: ProjectFilter): boolean {\n        return filter !== undefined;\n    }\n\n    async loadPage(options: IItemLoaderOptions<ProjectConfig>): Promise<ILoadedPage<ProjectConfig>> {\n        return await this._loadPage(options);\n    }\n\n    private async _loadPage(options: IItemLoaderOptions<ProjectConfig>, pageLink?: IServiceLink): Promise<ILoadedPage<ProjectConfig>> {\n        const { order, limit, filter } = options;\n\n        // We will ignore the update if we had local changes sooner than this timestamp.\n        // This default latency is set to 3 seconds right now. We should revisit this value.\n        const latency = this._projectPool._core._environment.getValue('PROJECTS_LIST_UPDATE_LATENCY');\n        const mostRecentValidMutation = Date.now() - latency;\n\n        let result: IProjectsResponse;\n\n        if (pageLink) {\n            // We are loading the next page with the link provided.\n            result = await this._projectInterface.getProjectsWithLink(pageLink);\n        } else {\n            const projectFilter = filter as ProjectFilter;\n            const view = projectFilter?.view ? { view: projectEnumToString(projectFilter.view) } : {};\n            const repositoryId = projectFilter?.repositoryID ? { repositoryId: projectFilter.repositoryID } : {};\n            result = await this._projectInterface.getProjects({\n                orderBy: OrderFieldToIProjectsOrderBy[order.field],\n                orderDirection: order.direction,\n                limit,\n                ...view,\n                ...repositoryId\n            });\n        }\n\n        const session = this._projectPool.createLoaderUpdateSession<Project>(mostRecentValidMutation);\n        const items = this._projectUpdater.updateRemoteItems(session, result.children);\n        session.commit();\n\n        // Check if we have another page to load.\n        let loadNextPage: ILoadNextPage<ProjectConfig> | undefined;\n        const nextPageLink = result._links.next;\n        if (nextPageLink) {\n            loadNextPage = (options: IItemLoaderOptions<ProjectConfig>) =>\n                this._loadPage(options, nextPageLink);\n        }\n\n        return {\n            items,\n            total: result._page.total,\n            loadNextPage,\n            mostRecentValidMutation\n        };\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport type { IItemFilter, ItemFilterRelation } from '../core/ItemFilter';\nimport { default as Project } from './Project';\nimport { ProjectViews } from '../interface/ProjectsModel';\n\nexport interface IProjectFilterOptions {\n    readonly _isDiscarded?: boolean;\n    view?: ProjectViews;\n    repositoryID?: string;\n}\n\nexport default class ProjectFilter implements IItemFilter<Project> {\n    private _isDiscarded: boolean = false;\n    private _view: ProjectViews = ProjectViews.All;\n    private _repositoryID?: string;\n\n    static YourProjects = new ProjectFilter({\n        view: ProjectViews.Yours\n    });\n\n    static AllProjects = new ProjectFilter({\n        view: ProjectViews.All\n    });\n\n    static SWYProjects = new ProjectFilter({\n        view: ProjectViews.SWY\n    });\n\n    static AdminProjects = new ProjectFilter({\n        view: ProjectViews.Admin\n    });\n\n    constructor(options?: Partial<IProjectFilterOptions>) {\n        const { _isDiscarded, view, repositoryID } = options ?? {};\n        this._isDiscarded = !!(_isDiscarded);\n        if (view !== undefined) {\n            this._view = view;\n        }\n\n        if (repositoryID) {\n            this._repositoryID = repositoryID;\n        }\n    }\n\n    get hash(): string {\n        return `discarded=${this._isDiscarded}view=${this._view}repositoryId=${this._repositoryID}`;\n    }\n\n    get view(): ProjectViews {\n        return this._view;\n    }\n\n    get repositoryID(): string | undefined {\n        return this._repositoryID;\n    }\n\n    matches(item: Project): boolean {\n        if (!item.isProject) {\n            return false;\n        }\n\n        if (item.isDiscarded !== this._isDiscarded) {\n            return false;\n        }\n\n        // If the repositoryId exists on this filter and it doesn't\n        // equal the item in question then return false.\n        if (this._repositoryID && this._repositoryID !== item.repositoryID) {\n            return false;\n        }\n\n        // Admin is a superset of all values so if it's an\n        // admin view, then just return true because it's supposed\n        // to match every possible view case.\n        const isAdmin = this._view === ProjectViews.Admin;\n        if (isAdmin) {\n            return true;\n        }\n\n        // Since we know it's not admin, it could be all\n        // and so we do our normal check here.\n        const isAll = this._view === ProjectViews.All;\n        if (!isAll && this._view && this._view !== item.view) {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * This method determines the commonality between the already present filter (other)\n     * and the new filter to be applied (this). The point of this is to\n     * see if the new filter (this) can build some, all, or none of it's items\n     * from (other) filter.\n     *\n     * Subset: Means that ALL items for this filter can be built from other\n     * Disjoint: No items for this filter can be built from other.\n     * Unknown: Some items for this filter can be built from other.\n     *\n     * @note we should always determine disjoint cases first before other cases.\n     * @note this = NEW FILTER, other = EXISTING FILTER\n     *\n     * @param other The existing filter that we are getting the relation to.\n     * @returns { ItemFilterRelation }\n     */\n    getRelationToFilter(other: ProjectFilter): ItemFilterRelation {\n        if (this._repositoryID !== other.repositoryID) {\n            return 'disjoint';\n        }\n\n        if (this._isDiscarded !== other._isDiscarded) {\n            return 'disjoint';\n        }\n\n        // The only case where the filters are disjoint is when the views are SWY and Yours.\n        if (this._view !== other.view && [ ProjectViews.SWY, ProjectViews.Yours ].includes(this._view)\n            && [ ProjectViews.SWY, ProjectViews.Yours ].includes(other.view)) {\n            return 'disjoint';\n        }\n\n        // If the views are the same, then we can consider this a subset.\n        if (this._view === other.view) {\n            return 'subset';\n        }\n\n        // We always know that if that admin view is the the superset of everything.\n        // So if the other view is admin, then we can consider this a subset.\n        if (other.view === ProjectViews.Admin) {\n            return 'subset';\n        }\n\n        // All the views are a subset of the all view except for admin.\n        // For admin, it is unknown\n        if (other.view === ProjectViews.All && this.view !== ProjectViews.Admin) {\n            return 'subset';\n        }\n\n        // All the other cases would be unknown.\n        return 'unknown';\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ItemUpdater from '../core/ItemUpdater';\nimport ItemBase from '../core/ItemBase';\nimport PropertyUpdater from '../core/PropertyUpdater';\nimport { IGradientColorRGB, IGradientColorStop, IGradientComputedItemResponse } from '../interface/GradientModel';\n\nexport class Gradient extends ItemBase {\n    private _isDefault: boolean = false;\n    private _type: string = '';\n    private _angle: number = 0;\n    private _stops: IGradientColorStop[] = [];\n    private _name: string = '';\n    private _languageCode: string = '';\n    private _gradientID: string = '';\n    private _textAlpha: number = 1;\n    private _textMode: string = 'RGB';\n    private _textColorValue: IGradientColorRGB = { r: 0, g: 0, b: 0 };\n    private _textType: string | 'process' = 'process';\n\n    get isDefault() {\n        return this._isDefault;\n    }\n\n    get type(): string {\n        return this._type;\n    }\n\n    get angle(): number {\n        return this._angle;\n    }\n\n    get stops(): IGradientColorStop[] {\n        return this._stops;\n    }\n\n    get name(): string {\n        return this._name;\n    }\n\n    get languageCode(): string {\n        return this._languageCode;\n    }\n\n    /**\n     * The original non-computed gradient ID to be used when\n     * assigning a gradient to a Project.\n     */\n    get gradientID(): string {\n        return this._gradientID;\n    }\n\n    get textAlpha(): number {\n        return this._textAlpha;\n    }\n\n    get textMode(): string {\n        return this._textMode;\n    }\n\n    get textColorValue(): IGradientColorRGB {\n        return this._textColorValue;\n    }\n\n    get textType(): 'process' | string {\n        return this._textType;\n    }\n}\n\nexport const GradientUpdater = new ItemUpdater<Gradient, Partial<IGradientComputedItemResponse>>({\n    localItemType: Gradient,\n    /**\n     * The computedID is property that is computed based on the\n     * gradientId from the service, and the language code from the service.\n     * It typically looks something like. 'FUSCHIA-en-US'. This helps\n     * us store and retrieve the gradients by not just id but also language to\n     * make it more performant if the user switches languages during runtime.\n     * IGradientComputedItemResponse extends IGradientItemResponse to include\n     * the computedID property.\n     */\n    remoteIdProperty: 'computedID',\n    propertyUpdater: new PropertyUpdater({\n        '_isDefault': { name: 'project:gradientData.isDefault', format: 'boolean' },\n        '_type': { name: 'project:gradientData.type', format: 'string' },\n        '_angle': { name: 'project:gradientData.angle', format: 'string' },\n        '_name': { name: 'project:gradientName', format: 'string' },\n        '_stops': { name: 'project:gradientData.stops', format: 'object' },\n        '_languageCode': { name: 'project:gradientData.languageCode', format: 'string' },\n        '_gradientID': 'project:gradientId',\n        '_textAlpha': { name: 'project:gradientTextColor.alpha', format: 'number' },\n        '_textMode': { name: 'project:gradientTextColor.mode', format: 'string' },\n        '_textColorValue': { name: 'project:gradientTextColor.value', format: 'object' },\n        '_textType': { name: 'project:gradientTextColor.type', format: 'string' }\n    })\n});\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ProjectsInterface, { IContextAPIResponse }  from '../interface/ProjectsInterface';\nimport ItemPool from '../core/ItemPool';\nimport { ISAMCorePrivate, ISAMObject } from '../indexPrivate';\nimport Project, { ProjectUpdater } from './Project';\nimport { memoize } from '../core/decorators';\nimport { renameFileInPath, validatePlatformRepoName } from '../assets/AssetUtils';\nimport SAMError, { SAMErrorSubCode, isSAMError } from '../core/SAMError';\nimport { SAMErrorCode } from '../core/SAMError';\nimport { ProjectSource } from './ProjectSource';\nimport ProjectsListLoader from './ProjectsListLoader';\nimport ItemSource from '../core/ItemSource';\nimport ProjectFilter from './ProjectFilter';\nimport AdobeAsset from '../assets/AdobeAsset';\nimport { Gradient, GradientUpdater } from './Gradient';\nimport {  computeGradients } from '../interface/GradientModel';\nimport { RelType } from '../interface/LinkUtils';\nimport { ConfigurationPayload } from '../core/Environment';\nimport IEvent from '../core/IEvent';\nimport { CONFIG_CHANGE } from '../core/SAMCoreEvents';\nimport { CanCreateProjectReason, IProjectPatchData, ProjectCapabilities, IProject } from '../interface/ProjectsModel';\nimport { AdobeAssetGlobalSearchSource } from '../assets/AdobeAssetSource';\nimport AdobeAssetGlobalSearchFilter from '../assets/AdobeAssetGlobalSearchFilter';\nimport GlobalSearchLoader from '../assets/GlobalSearchLoader';\nimport oneTimeWarning from '../utils/oneTimeWarning';\n\n// @TODO@PROJECTS: We need to add support for repository ID here for admin console.\nexport interface IProjectCreate {\n    name: string;\n    gradientID: string;\n    repositoryID?: string;\n}\n\n/**\n * Provides all Project related functionality like getting\n * lists of projects among other features.\n *\n * @experimental This API is in an experimental phase so expect that\n * API\"s will not be final and there will be breaking changes\n * without bumping the major version until this comment is removed.\n */\nexport default class ProjectContext implements ISAMObject {\n    private _projectInterface = new ProjectsInterface(this._core);\n    private _gradientPool = new ItemPool<Gradient>(this._core, 'gradient');\n    private _defaultGradient?: Gradient;\n    private _canRestoreProjectCache: Map<string, boolean> = new Map();\n\n    constructor(\n        readonly _core: ISAMCorePrivate,\n        /**\n         * @package -- For use in SAM.js only\n         */\n        readonly _assetPool: ItemPool<Project | AdobeAsset>\n    ) {\n        // If the language configuration changes lets\n        // just start refetching the gradients automatically.\n        this._core.on(CONFIG_CHANGE,\n            (\n                event: IEvent,\n                sender: any,\n                payload: ConfigurationPayload\n            ) => {\n                if (payload.configurationKeyName === 'LOCALE') {\n                    this._getGradients();\n                }\n            }\n        );\n    }\n\n    /**\n     * @package -- only for use in SAM.js\n     * Updaters shouldn't be accessed directly.\n     */\n    readonly _projectUpdater =  ProjectUpdater;\n\n    /**\n     * @package -- only for use in SAM.js\n     * @deprecated Will be removed on or after 10-01-2024.\n     */\n    get assetPool(): ItemPool<Project | AdobeAsset> {\n        oneTimeWarning('ProjectContext._assetPool', 'This property is deprecated and will be removed on or after'\n            + ' 10-01-2024. For internal use by SAM.js only.');\n        return this._assetPool;\n    }\n\n    /**\n     * @experimental API May change.\n     *\n     * @example\n     * const projectContext = samCore.projectContext;\n     * const projectsSource = projectsContext.projects;\n     * const yourProjects = projectsSource.getList();\n     *\n     * @TODO SAM-2834\n     */\n    @memoize\n    projects(): ProjectSource {\n        const loader = new ProjectsListLoader(\n            this._assetPool,\n            this._projectInterface,\n            this._projectUpdater\n        );\n        return new ItemSource(this._assetPool as ItemPool<Project>, [ loader ], ProjectFilter.AllProjects);\n    }\n\n    /**\n     * @experimental API May change.\n     */\n    async createProject(data: IProjectCreate) {\n        const { name, gradientID, repositoryID } = data;\n        if (!validatePlatformRepoName(name)) {\n            // Validate the name here to avoid resolving the asset if the name is invalid.\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'Invalid name provided for the rename operation.');\n        }\n\n        // Get the gradient and use the original gradient ID\n        // provided by the services when creating a project.\n        // The id for gradients is computed to include the language\n        // code as well.\n        const originalGradient = await this.getGradient(gradientID);\n        const response = await this._projectInterface.createProject({\n            [RelType.APP_METADATA]: {\n                'project:rendition': {\n                    'gradientId': originalGradient.gradientID\n                }\n            },\n            'repo:name': name,\n            ...(repositoryID ? { 'repo:repositoryId': repositoryID } : {})\n        });\n        const session = this._assetPool.createMutationSession<Project>();\n        const project = this._projectUpdater.updateRemoteItem(session, response);\n        session.commit();\n        return project;\n    }\n\n    /**\n     * Resolves a given name to a Project, if one exists.\n     * @param name name of the project to be resolved.\n     * @returns a promise that resolves to the Project with the given name.\n     */\n    async resolveProjectByName(name: string): Promise<Project> {\n        const projectMetadata: IProject = await this._projectInterface.resolveProjectByName(name);\n        const id: string = projectMetadata['repo:assetId'];\n        this._core.collaborationContext.confirmAccess(id);\n        const session = this._assetPool.createMutationSession<Project>();\n        const project = this._projectUpdater.updateRemoteItem(session, projectMetadata);\n        session.commit();\n        return project;\n    }\n\n    /**\n     * Validates whether the user can create a new project with the provided name.\n     * Project service is able to determine where to create the project for a user hence\n     * the name is sufficient for this validation.\n     * @param name name of the project to be validated for creation.\n     */\n    async validateProjectNameForCreate(name: string, project?: Project, repositoryID?: string): Promise<boolean> {\n        if (!validatePlatformRepoName(name)) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'Invalid name provided for asset rename operation.');\n        }\n\n        let updatedName = name;\n        if (project) {\n            updatedName = renameFileInPath(name, project);\n        }\n\n        try {\n            await this._projectInterface.validateProjectName(updatedName, repositoryID);\n        } catch (e) {\n            const samError = e as SAMError;\n            if (samError.code === SAMErrorCode.NOT_FOUND) {\n                return true;\n            } else if (samError.code === SAMErrorCode.CONFLICT) {\n                return false;\n            }\n\n            // At this point the error is something else entirely and\n            // not related to the the availability of the name. Could\n            // be a networking error or something similar.\n            throw e;\n        }\n        return false;\n    }\n\n    /**\n     * Gets a project with the given ID.\n     *\n     * @note This method will automatically determine if it should call\n     * to confirm access with the invitations service. We\n     * have removed the ability to manually turn this on and off for clients\n     * via the confirmAccess property.\n     *\n     * @param id ID of the project\n     * @returns a promise that resolves to the Project with the given ID\n     */\n    async getProjectbyID(id: string): Promise<Project> {\n        let project = this._assetPool.getLocalItemById<Project>(id);\n        if (project) {\n            // Asynchronously confirm access since the user got here\n            // from a list or confirmed it before since it's in the cache so\n            // the call may not need to happen or may not affect the user.\n            this._core.collaborationContext.confirmAccess(id);\n            return project;\n        }\n\n        await this._core.collaborationContext.confirmAccess(id);\n        const projectMetadata = await this._projectInterface.getProject(id);\n        const session = this._assetPool.createMutationSession<Project>();\n        project = this._projectUpdater.updateRemoteItem(session, projectMetadata);\n        session.commit();\n        return project;\n    }\n\n    private async _getGradients(): Promise<Gradient[]> {\n        const locale = this._core._environment.getValue('LOCALE')!;\n        const gradientData = await this._projectInterface.getGradients(locale);\n        const defaultGradientId = gradientData.default;\n        const session = this._gradientPool.createUpdateSession();\n        const computedGradients = computeGradients(gradientData.children, defaultGradientId, locale);\n        const gradients: Gradient[] = GradientUpdater.updateRemoteItems(session, computedGradients);\n        session.commit();\n        return gradients;\n    }\n\n    /**\n     * Returns the list of available gradients.\n     *\n     *\n     * @param languageCode Example \"en-US\"\n     * @returns\n     */\n    async getGradients(): Promise<Gradient[]> {\n        return await this._getGradients();\n    }\n\n    /**\n     * Gets a single gradient by ID if that gradient does not\n     * locally we fetch all the gradients and if it still does not\n     * exist then we return the default gradient provided.\n     *\n     * @param id\n     * @returns\n     */\n    async getGradient(id: string): Promise<Gradient> {\n        const gradient = this._gradientPool.getLocalItemById(id);\n        const locale = this._core._environment.getValue('LOCALE');\n        if (gradient && gradient.languageCode === locale) {\n            return gradient;\n        }\n\n        await this._getGradients();\n        const newGradient = this._gradientPool.getLocalItemById(id);\n\n        if (!newGradient) {\n            if (this._defaultGradient && this._defaultGradient.languageCode === locale) {\n                return this._defaultGradient;\n            }\n\n            this._gradientPool.forEach((gradient: Gradient) => {\n                if (gradient.isDefault) {\n                    this._defaultGradient = gradient;\n                }\n            });\n\n            if (this._defaultGradient) {\n                return this._defaultGradient;\n            }\n\n            // There should always be a default gradient but in the case\n            // where maybe it doesn't exist we should still throw an error\n            throw SAMError.create(SAMErrorCode.UNKNOWN, `Gradient ID does not exist ${id}`);\n        }\n\n        return newGradient;\n    }\n\n    async updateProject(id: string, data: IProjectPatchData) {\n        let newData = {};\n        if (data.gradientID)  {\n            const gradient = await this.getGradient(data.gradientID);\n            const project = await this.getProjectbyID(id);\n            const links = project.projectLinks!;\n            newData = { ...newData, ...{ gradientID: gradient.gradientID } };\n            await this._projectInterface.patchProject(links, newData);\n\n            const session = this._assetPool.createMutationSession<Project>();\n            this._projectUpdater.updateRemoteItem(session, {\n                'repo:assetId': project.id,\n                _embedded: {\n                    [RelType.APP_METADATA]: {\n                        'project:rendition': {\n                            /**\n                             * @note when updating the local model with\n                             * \"remote\" data, we should use the raw gradientID\n                             * instead of the computed one.\n                             */\n                            gradientId: gradient.gradientID\n                        }\n                    }\n                }\n            });\n            session.commit();\n        }\n    }\n\n    /**\n     * Used to hide and show the create button for users who may or may not\n     * have the required privileges to do so.\n     * @note Does not throw errors, use canCreateProjectReason to determine the specific\n     * reason behind why a user can or cannot create a project.\n     *\n     * @param repositoryID Optional repositoryID for admins for who have access to multiple repos.\n     * @returns {boolean}\n     */\n    async canCreateProjects(repositoryID?: string): Promise<boolean> {\n        try {\n            await this._projectInterface.getCapability(ProjectCapabilities.CREATE, repositoryID);\n            return true;\n        } catch (e) {\n            // If it's not a sam error then something else happened\n            // and we should throw that error.\n            if (!isSAMError(e)) {\n                throw e;\n            }\n\n            return false;\n        }\n    }\n\n    /**\n     * @package for internal SAM.js use only.\n     * @param repositoryID the repository id of the project\n     * Restoring capability is same as the capability to create a project.\n     */\n    async _canRestoreProject(repositoryID: string): Promise<boolean> {\n        if (this._canRestoreProjectCache.has(repositoryID)) {\n            return this._canRestoreProjectCache.get(repositoryID)!;\n        }\n        const canRestore = await this.canCreateProjects(repositoryID);\n        this._canRestoreProjectCache.set(repositoryID, canRestore);\n        return canRestore;\n    }\n\n    /**\n     * @package for internal SAM.js use only.\n     * @param repositoryID the repository id of the project\n     */\n    _getCachedRestoreCapability(repositoryID: string): boolean {\n        return this._canRestoreProjectCache.get(repositoryID) || false;\n    }\n\n    /**\n     * Used to determine the specific reasoning behind why a user can't\n     * create projects. Returns unknown if the error is unrelated to\n     * one of the \"known\" reasons.\n     *\n     * @param repositoryID\n     * @returns\n     */\n    async canCreateProjectReason(repositoryID?: string): Promise<CanCreateProjectReason> {\n        try {\n            await this._projectInterface.getCapability(ProjectCapabilities.CREATE, repositoryID);\n            return CanCreateProjectReason.ALLOWED;\n        } catch (error) {\n            if (!isSAMError(error)) {\n                return CanCreateProjectReason.UNKNOWN;\n            }\n            switch (error.subCode) {\n            case SAMErrorSubCode.PROJECTS_ADMIN_ONLY:\n                return CanCreateProjectReason.ADMIN_DISABLED;\n            case SAMErrorSubCode.PROJECTS_NO_HOME_REPOSITORY:\n                return CanCreateProjectReason.NO_HOME_REPOSITORY;\n            case SAMErrorSubCode.PROJECTS_INVALID_REPOSITORY:\n                return CanCreateProjectReason.INVALID_REPOSITORY;\n            default:\n                return CanCreateProjectReason.UNKNOWN;\n            }\n        }\n    }\n\n    getProjectsSearchSource(query: string): AdobeAssetGlobalSearchSource {\n        const implicitFilter = new AdobeAssetGlobalSearchFilter({\n            _query: query,\n            _projectsOnly: true\n        });\n        const globalSearchLoader = new GlobalSearchLoader(\n            this._core.hostAssetContext._assetPool,\n            this._core,\n            this._core.hostAssetContext._globalSearchInterfaceV3,\n            implicitFilter\n        );\n        return new ItemSource(this._assetPool, [ globalSearchLoader ], implicitFilter);\n    }\n\n    /**\n     * It has been reported that sometimes a Project asset is missing the parent project id in the inherited property of the app\n     * metadata [SAM-3590].\n     * This method is used to call the Context API [CCXB-20015] which was implemented to address the issue in the following ways:\n     * 1. Returns the parent project id so SAM.js can fix the inherited property of the local child asset.\n     * 2. Fixes the inheritable property of the parent project if it is missing data.\n     * 3. Fixes the inherited property of the child asset if it is missing data.\n     * @param assetId\n     * @param repoId\n     * @package -- only for use in SAM.js\n     */\n    async _callContextAPI(assetId: string, repoId: string): Promise<IContextAPIResponse> {\n        const discoveryLinks = await this._projectInterface.discoverLinks();\n        const href = discoveryLinks[RelType.PROJECTS_CONTEXT].href;\n        return await this._projectInterface._issueContextAPIRequest(assetId, repoId, href);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { ClassroomMemberRole } from './ClassroomMemberModel';\n\nexport interface IEntityRef {\n    authSrc: string;\n    ident: string;\n}\nexport interface IUserProfile {\n    email: string;\n    firstName: string;\n    lastName: string;\n    userId: string;\n}\n\nexport enum LearningManagementSystems {\n    GC = 'GC', // GC is Google Classroom\n}\n\nexport enum LearningManagementSystemRoles {\n    STUDENT = 'STUDENT',\n    TEACHER = 'TEACHER',\n}\n\nexport enum RosterImportState {\n    BLOCKED = 'BLOCKED',\n    INVITED = 'INVITED',\n    JOINED = 'JOINED',\n    NOT_ENROLLED = 'NOT_ENROLLED',\n    REMOVED = 'REMOVED',\n}\n\nexport enum ImportSourceType {\n    CLEVER = 'clever',\n    CLASS_LINK = 'classlink',\n}\n\nexport enum ClassroomStatus {\n    ACTIVE = 'ACTIVE',\n    ARCHIVED = 'ARCHIVED',\n}\n\nexport enum ClassroomType {\n    /** Allowed classrooms for Top Down organization users */\n    TRUE = 'TRUE',\n    /** Allowed classrooms for Bottom up organization users */\n    RESTRICTED = 'RESTRICTED',\n    /** Allowed classrooms for users on their personal account */\n    UNRESTRICTED = 'UNRESTRICTED',\n    /** Not allowed classrooms */\n    NONE = 'NONE',\n}\n\nexport interface IRemoteImportSource {\n    /** The ImportSource's ID of the classroom */\n    source?: ImportSourceType;\n    /** The type of import source, e.g., 'clever', 'classlink' */\n    sourceId?: string;\n    /** The date when the classroom was last synced with the import source */\n    lastUpdatedAt?: string;\n}\n\nexport interface IImportSource {\n    /**\n     * The ImportSource's ID of the classroom\n     * Maps to the remote importedFrom.sourceId\n     * */\n    id?: string;\n    /**\n     * The type of import source, e.g., 'clever', 'classlink'\n     * Maps to the remote importedFrom.source\n     * */\n    type?: ImportSourceType;\n    /**\n     * The date when the classroom was last synced with the import source\n     * Maps to the remote importedFrom.lastUpdatedAt\n     * */\n    synced?: Date;\n}\n\nexport interface IRosterEntry {\n    adobeId: string;\n    courseId: string;\n    emailID: string;\n    firstName: string;\n    lastName: string;\n    lmsRole: LearningManagementSystemRoles;\n    rosterImportState: RosterImportState[];\n    sourceLms: LearningManagementSystems;\n    userId: string;\n}\n\nexport enum SubjectTypes {\n    noSubject = '',\n    allsubjects = 'allsubjects',\n    careersTechnicalEducation = 'careersTechnicalEducation',\n    computerScience = 'computerScience',\n    english = 'english',\n    math = 'math',\n    otherLanguages = 'otherLanguages',\n    others = 'others',\n    science = 'science',\n    socialStudies = 'socialStudies',\n    visualPerformingArts = 'visualPerformingArts',\n}\n\nexport interface IClassroomCreateData {\n    // Can be undefined if the classroom is being created from a virtual class\n    name?: string;\n    // Defined if the classroom is being created from a virtual class\n    id?: string;\n    subject?: SubjectTypes;\n    grades?: string[];\n    period?: string;\n}\n\nexport interface IClassroomUpdateData extends Partial<IClassroomCreateData> {}\n\nexport enum ClassroomRole {\n    STUDENT = 'STUDENT',\n    TEACHER = 'TEACHER',\n}\n\nexport interface IRemoteClassroom {\n    /**\n     * The class code for the classroom.  Used for generating invite links and LMS integration.\n     * @example '3R9RPQ'\n     */\n    classCode: string;\n    /**\n     * The unique id that represents the classroom.\n     * @example 'EFBF1A3F6567A3180A494138@AdobeOrg'\n     */\n    classId: string;\n    /**\n     * The name of the classroom.\n     */\n    className: string;\n    /**\n     * Username for the account that created this classroom.\n     */\n    createdBy: string;\n    /**\n     * The unix time the classroom was created. Note that it is in seconds and not milliseconds.\n     */\n    createdOn: number;\n    entityRef: IEntityRef;\n    /**\n     * Indicates if the classroom has been deleted.\n     */\n    deleted: boolean;\n    /**\n     * The list of grades associated with the classroom.\n     * @example [ 'K', '1' ]\n     */\n    grades: string[];\n    importedFrom?: IRemoteImportSource;\n    /**\n     * Contains the role of the member fetching the classroom.\n     */\n    memberRole: ClassroomMemberRole;\n    /**\n     * The period of the classroom.\n     * @example '1'\n     */\n    period: string;\n    /** True if the classroom is a virtual classroom */\n    isVirtual?: boolean;\n    /**\n     * The class status\n     * @example 'ACTIVE'\n     */\n    status: ClassroomStatus;\n    /**\n     * The class subject.\n     * @example 'math'\n     */\n    subject: SubjectTypes;\n    /**\n     * The class type\n     * @example 'UNRESTRICTED'\n     */\n    type: ClassroomType;\n    /**\n     * For SAM.js internal use only\n     * Due to the classroom ID changing when the classroom is migrated\n     * from a virtual to a real class, clients will NOT have access to\n     * the new instance of the classroom through their existing reference\n     * to the original virtual instance of the class.\n     *\n     * To support classroom workflow reattempts directly following the migration\n     * of the virtual class when the client is still referencing the class\n     * ID when it was virtual, the virtual instance of the class ID will persist\n     * on this session's migrated instance of the class.\n     */\n    virtualId?: string;\n}\n\nexport interface IRemoteBlockOrRemoveResponse {\n    apiSuccessResponse: BlockApiSuccessResponses;\n    httpStatus: string;\n}\n\nexport interface IRemoteMembership {\n    role: ClassroomMemberRole;\n    status: MembershipStatus;\n}\n\nexport enum BlockApiSuccessResponses {\n    REMOVE_STUDENT_SUCCESS = 'REMOVE_STUDENT_SUCCESS',\n    BLOCK_STUDENT_SUCCESS = 'BLOCK_STUDENT_SUCCESS',\n    UNBLOCK_STUDENT_SUCCESS = 'UNBLOCK_STUDENT_SUCCESS',\n    DELETE_DOMAIN_MAPPING_ACCEPTED = 'DELETE_DOMAIN_MAPPING_ACCEPTED',\n}\n\nexport enum MembershipStatus {\n    OWNER = 'OWNER',\n    ACTIVE = 'ACTIVE',\n    INACTIVE = 'INACTIVE',\n    INVITED = 'INVITED',\n    IN_REVIEW = 'IN_REVIEW',\n    DECLINED = 'DECLINED',\n    NOT_A_MEMBER = 'NOT_A_MEMBER',\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { getMemberComputedKey, validateTypes, ValidationMap } from '../utils/classroomUtils';\nimport { ClassroomMemberRole, IClassroomMember, IRemoteClassroomMembers } from './ClassroomMemberModel';\nimport { IClassroomCreateData, IClassroomUpdateData, IRemoteBlockOrRemoveResponse, IRemoteClassroom, SubjectTypes, IRemoteMembership } from './ClassroomModel';\nimport InterfaceBase from './InterfaceBase';\nimport { JSON_MIME_TYPE, HeaderMap } from './LinkUtils';\n\nconst API_ROOT = '/api/v1';\nconst headers: HeaderMap = { 'Content-Type': JSON_MIME_TYPE };\n\ninterface IRefreshCodeResponse {\n    classroomId: string;\n    classcode: string;\n}\n\nexport function validateClassroomData(data: IClassroomCreateData): string[] {\n    const errors: string[] = [];\n\n    // Handle basic validation\n    const classroomDataToValidate: ValidationMap<IClassroomCreateData>[] = [\n        { key: 'subject', type: 'enum', isRequired: false, ref: SubjectTypes },\n        { key: 'grades', type: 'string[]', isRequired: false },\n        { key: 'period', type: 'string', isRequired: false },\n    ];\n\n    errors.push(...validateTypes(classroomDataToValidate, data));\n\n    // Handle validation of virtual and non-virtual classrooms\n    const hasName = typeof data.name === 'string' && data.name !== null;\n    const hasId = typeof data.id === 'string' && data.id !== null;\n\n    // One of these must be defined\n    // Both _can_ be defined, but id will take precedence and name will be ignored\n    if (!hasName && !hasId) {\n        errors.push('name or id is missing');\n    }\n\n    return errors;\n}\n\nexport default class ClassroomsInterface extends InterfaceBase {\n    /** Overrides the default behavior for a 202 response */\n    protected async _monitorResponse(response: Response): Promise<Response> {\n        return response;\n    }\n\n    private _getUrl(endpoint: string): string {\n        return `https://${this._core._environment.endpoints.CLASSROOMS_HOST}${endpoint}`;\n    }\n\n    /**\n     * @description Creates a new Classroom\n     *\n     * @param data needed to create a Classroom like name and subject\n     * @returns promise resolving to the newly created Classroom\n    */\n    async createClassroom(data: IClassroomCreateData): Promise<IRemoteClassroom> {\n        const response = await this._doPost(this._getUrl(`${API_ROOT}/classrooms`), headers, JSON.stringify({\n            className: data.name,\n            subject: data.subject,\n            grades: data.grades,\n            period: data.period\n        }), [ 201 ]);\n        const jsonResponse = await response.json();\n\n        return jsonResponse;\n    }\n\n    /**\n     * Creates a new Classroom from a virtual class\n     * @param id that maps to the virtual classroom being migrated to a real class\n     * @returns promise resolving to the newly created Classroom\n    */\n    async createClassroomFromVirtual(virtualClassroomId: string): Promise<IRemoteClassroom> {\n        const response = await this._doPost(this._getUrl(`${API_ROOT}/classrooms/virtual/${virtualClassroomId}/create`), { 'Content-Type': JSON_MIME_TYPE }, undefined, [ 201 ]);\n        const jsonResponse = await response.json();\n\n        return jsonResponse;\n    }\n\n    /**\n     * Creates a new Classroom with updated metadata from a virtual class\n     * @param id that maps to the virtual classroom being migrated to a real class\n     * @param data that the real classroom will be created with\n     * @returns promise resolving to the newly created Classroom\n    */\n    async updateClassroomFromVirtual(virtualClassroomId: string, data: IClassroomCreateData): Promise<IRemoteClassroom> {\n        const response = await this._doPost(this._getUrl(`${API_ROOT}/classrooms/virtual/${virtualClassroomId}/update`), { 'Content-Type': JSON_MIME_TYPE }, JSON.stringify({\n            className: data.name,\n            subject: data.subject,\n            grades: data.grades,\n            period: data.period\n        }), [ 201 ]);\n        const jsonResponse = await response.json();\n\n        return jsonResponse;\n    }\n\n    /**\n     * @description Deletes a single classroom\n     *\n     * @param id Either the classId or the classCode.  The endpoint queries both.\n    */\n    async deleteClassroom(id: string): Promise<void> {\n        await this._doDelete(this._getUrl(`${API_ROOT}/classrooms/${id}`), headers, [ 202 ]);\n    }\n\n    /**\n     * @description Deletes a single virtual classroom\n     *\n     * @param id the classId\n    */\n    async deleteVirtualClassroom(id: string): Promise<void> {\n        await this._doPost(this._getUrl(`${API_ROOT}/classrooms/virtual/${id}/delete`), headers, undefined, [ 202 ]);\n    }\n\n    /**\n     * @description Gets a single classroom by class ID\n     *\n     * @param id Either the classId or the classCode.  The endpoint queries both.\n     * @returns A promise that resolves to a classroom\n     */\n    async getClassroom(id: string): Promise<IRemoteClassroom> {\n        const response = this._getResponse(this._getUrl(`${API_ROOT}/classrooms/${id}`));\n        return response.then((classroom: any) => {\n            // Handle the null value of importedFrom in ACPCEDU-1892\n            classroom.importedFrom ??= {};\n            return classroom;\n        });\n    }\n\n    /**\n     * @description Gets a list of all available classrooms\n     *\n     * @returns A promise that resolves to a list of classrooms\n     */\n    async getClassrooms(): Promise<IRemoteClassroom[]> {\n        const response = this._getResponse(this._getUrl(`${API_ROOT}/classrooms`));\n\n        // Handle the null value of importedFrom in ACPCEDU-1892\n        return response.then((classrooms) => {\n            return (classrooms as any[]).map((classroom) => {\n                classroom.importedFrom ??= {};\n                return classroom;\n            });\n        });\n    }\n\n    /**\n     * @description Refreshes the classroom code for a given classroom\n     *\n     * @param id The classroom ID associated with a single classroom\n     * @returns A promise that resolves to a classroom\n     */\n    async refreshClassroomCode(id: string): Promise<IRefreshCodeResponse> {\n        return this._doPut(this._getUrl(`${API_ROOT}/classrooms/${id}/code/refresh`), undefined, undefined, [ 200 ]).then((response) => response.json());\n    }\n\n    /**\n     * Updates a classroom with new data\n     * @param id The classroom ID\n     * @param data The new data that the classroom will be updated with\n     * @returns A promise that resolves to the classroom with updated fields\n     */\n    async updateClassroom(id: string, data: IClassroomUpdateData): Promise<Partial<IRemoteClassroom>> {\n        const response = await this._doPatch(this._getUrl(`${API_ROOT}/classrooms/${id}`), { 'Content-Type': JSON_MIME_TYPE }, JSON.stringify({\n            className: data.name,\n            subject: data.subject,\n            grades: data.grades,\n            period: data.period\n        }));\n        return response.json();\n    }\n\n    /**\n     * Gets the teachers of a classroom\n     * @param id The classroom ID\n     * @returns Teachers of a given classroom\n     */\n    async getClassroomTeachers(id: string): Promise<IClassroomMember[]> {\n        return this.getClassroomMembers(id, ClassroomMemberRole.TEACHER);\n    }\n\n    /**\n     * Gets the students of a classroom\n     * @param id The classroom ID\n     * @returns Students of a given classroom, wrapped in a classroom object for the list loader\n     */\n    async getClassroomStudents(id: string): Promise<IClassroomMember[]> {\n        return await this.getClassroomMembers(id, ClassroomMemberRole.STUDENT);\n    }\n\n    /**\n     * Gets the members of a classroom\n     * @param id The classroom ID\n     * @param filter The filter to apply to the members, either 'students' or 'teachers'. If not provided, all members are returned.\n     * @returns Members of a given classroom\n     */\n    async getClassroomMembers(id: string, filter: ClassroomMemberRole): Promise<IClassroomMember[]> {\n        const urlFilter = filter === ClassroomMemberRole.NONE ?  '' : `/${filter}s`;\n        const url = `${API_ROOT}/classrooms/${id}/members${urlFilter}`;\n        const classroomResponse: IRemoteClassroomMembers = await this._getResponse(this._getUrl(url));\n\n        // Response doesn't include classroomId on each member, so need to add it here\n        classroomResponse.members.forEach((member) => {\n            member.classroomId = id;\n            member.computedKey = getMemberComputedKey(id, member.role);\n        });\n\n        return classroomResponse.members;\n    }\n\n    /**\n     * Gets the membership status of a user in a classroom\n     * @param id The classroom ID\n     *\n     * @returns Membership status of the user in the classroom\n     */\n    async getMembership(id: string): Promise<IRemoteMembership> {\n        return this._getResponse(this._getUrl(`${API_ROOT}/classrooms/${id}/members/status`));\n    }\n\n    /**\n     * Blocks a student from a classroom\n     *\n     * @param classroomId Class ID of the classroom to block the student from\n     * @param studentId Student ID to block\n     *\n     * @returns A promise that resolves to the response from the server\n     */\n    async blockStudent(classroomId: string, studentId: string): Promise<IRemoteBlockOrRemoveResponse> {\n        const response = await this._doPost(this._getUrl(`${API_ROOT}/classrooms/${classroomId}/members/students/block`), headers, JSON.stringify({\n            studentId\n        }), [ 200 ]);\n        return await response.json();\n    }\n\n    /**\n     * Unblocks a student from a classroom\n     *\n     * @param classroomId Class ID of the classroom to unblock the student from\n     * @param studentId Student ID to unblock\n     *\n     * @returns A promise that resolves to the response from the server\n     */\n    async unblockStudent(classroomId: string, studentId: string): Promise<IRemoteBlockOrRemoveResponse> {\n        const response = await this._doPost(this._getUrl(`${API_ROOT}/classrooms/${classroomId}/members/students/unblock`), headers, JSON.stringify({\n            studentId\n        }), [ 200 ]);\n        return await response.json();\n    }\n\n    /**\n     * Removes a student from a classroom\n     *\n     * @param classroomId Class ID of the classroom to remove the student from\n     * @param studentId Student ID to remove\n     *\n     * @returns A promise that resolves to the response from the server\n     */\n    async removeStudent(classroomId: string, studentId: string): Promise<IRemoteBlockOrRemoveResponse> {\n        const response = await this._doDelete(this._getUrl(`${API_ROOT}/classrooms/${classroomId}/members/students?studentId=${studentId}`), headers, [ 202 ]);\n        return await response.json();\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { ClassroomMemberRole, IClassroomMember } from '../interface/ClassroomMemberModel';\nimport { observable } from '../core/decorators';\nimport ItemBase from '../core/ItemBase';\nimport { ClassroomMemberStatus } from '../interface/ClassroomMemberModel';\nimport { ClassroomMemberInviteSource } from '../interface/ClassroomMemberModel';\nimport ItemUpdater from '../core/ItemUpdater';\nimport PropertyUpdater from '../core/PropertyUpdater';\n\nexport default class ClassroomMember extends ItemBase {\n    private _classroomId: string = '';\n    private _displayName: string = '';\n    private _email: string = '';\n    private _firstName: string = '';\n    private _inviteSource: ClassroomMemberInviteSource = ClassroomMemberInviteSource.NONE;\n    private _lastName: string = '';\n    private _membershipStatus: ClassroomMemberStatus = ClassroomMemberStatus.NOT_A_MEMBER;\n    private _role: ClassroomMemberRole = ClassroomMemberRole.NONE;\n    private _userId: string = '';\n\n    @observable\n    get classroomId(): string {\n        return this._classroomId;\n    }\n\n    @observable\n    get displayName(): string {\n        return this._displayName;\n    }\n\n    @observable\n    get email(): string {\n        return this._email;\n    }\n\n    @observable\n    get firstName(): string {\n        return this._firstName;\n    }\n\n    @observable\n    get inviteSource(): ClassroomMemberInviteSource {\n        return this._inviteSource;\n    }\n\n    @observable\n    get lastName(): string {\n        return this._lastName;\n    }\n\n    @observable\n    get membershipStatus(): ClassroomMemberStatus {\n        return this._membershipStatus;\n    }\n\n    @observable\n    get role(): ClassroomMemberRole {\n        return this._role;\n    }\n\n    @observable\n    get userId(): string {\n        return this._userId;\n    }\n}\n\nexport const ClassroomMemberUpdater = new ItemUpdater<ClassroomMember, Partial<IClassroomMember>>({\n    localItemType: ClassroomMember,\n    // Note that ID of classroomMember is computed, and in the format of `{classroomId}-{role}`\n    remoteIdProperty: 'computedKey',\n    propertyUpdater: new PropertyUpdater({\n        _classroomId: { name: 'classroomId', format: 'string' },\n        _displayName: { name: 'displayName', format: 'string' },\n        _email: { name: 'email', format: 'string' },\n        _firstName: { name: 'firstName', format: 'string' },\n        _inviteSource: { name: 'inviteSource', format: 'string', choices: Object.values(ClassroomMemberInviteSource) },\n        _lastName: { name: 'lastName', format: 'string' },\n        _membershipStatus: { name: 'membershipStatus', format: 'string', choices: Object.values(ClassroomMemberStatus) },\n        _role: { name: 'role', format: 'string', choices: Object.values(ClassroomMemberRole) },\n        _userId: { name: 'userId', format: 'string' },\n    }),\n});\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ClassroomsInterface from '../interface/ClassroomsInterface';\nimport { IItemLoader, IItemLoaderOptions, ILoadedPage } from '../core/ItemLoader';\nimport ItemPool from '../core/ItemPool';\nimport ClassroomMember, { ClassroomMemberUpdater } from './ClassroomMember';\nimport { ClassroomMemberConfig } from './ClassroomMemberSource';\nimport ClassroomMemberFilter from '../classrooms/ClassroomMemberFilter';\n\nexport default class ClassroomMemberListLoader implements IItemLoader<ClassroomMemberConfig> {\n    constructor(private _ClassroomMemberPool: ItemPool<ClassroomMember>, private _classroomsInterface: ClassroomsInterface) {}\n\n    async loadPage(options: IItemLoaderOptions<ClassroomMemberConfig>): Promise<ILoadedPage<ClassroomMemberConfig>> {\n        return await this._loadPage(options);\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    private async _loadPage(options: IItemLoaderOptions<ClassroomMemberConfig>, start?: number): Promise<ILoadedPage<ClassroomMemberConfig>> {\n        const { filter } = options;\n        const classroomMemberFilter = filter as ClassroomMemberFilter;\n\n        const result = await this._classroomsInterface.getClassroomMembers(classroomMemberFilter.classroomId, classroomMemberFilter.role);\n        const session = this._ClassroomMemberPool.createLoaderUpdateSession<ClassroomMember>(Date.now());\n        const items = ClassroomMemberUpdater.updateRemoteItems(session, result);\n        session.commit();\n\n        return {\n            items,\n            total: items.length,\n            loadNextPage: undefined,\n        };\n    }\n}\n","import { getMemberComputedKey } from '../utils/classroomUtils';\nimport ClassroomMember from '../classroom-member/ClassroomMember';\nimport { IItemFilter, ItemFilterRelation } from '../core/ItemFilter';\nimport { ClassroomMemberRole } from '../interface/ClassroomMemberModel';\n\nexport interface IClassroomMemberFilterOptions {\n    classroomId: string;\n    role: ClassroomMemberRole;\n}\n\n/**\n * A filter for classroom members\n *\n * Example usage, to get just a list of students back:\n *\n * classroom.members.getList(ClassroomMemberOrder.default, new ClassroomMemberFilter({ classroomId: classroom.id, role: 'student' }), { refreshTimeout: -1 });\n */\nexport default class ClassroomMemberFilter implements IItemFilter<ClassroomMember> {\n    public classroomId: string;\n    public role: ClassroomMemberRole;\n    public computedKey: string;\n\n    constructor(options: Partial<IClassroomMemberFilterOptions>) {\n        this.classroomId = options.classroomId || '';\n        this.role = options.role || ClassroomMemberRole.NONE;\n        this.computedKey = options.classroomId && options.role && getMemberComputedKey(options.classroomId, options.role) || '';\n    }\n\n    matches(item: ClassroomMember): boolean {\n        // If we have a role, we're only loading students OR teachers\n        if (this.role && this.role !== ClassroomMemberRole.NONE) {\n            if (item.id !== this.computedKey) {\n                return false;\n            }\n        }\n\n        // If we don't have a role, we're loading all members, so need to manually check for the computedKey\n        if (!this.role || this.role === ClassroomMemberRole.NONE) {\n            if (item.id === getMemberComputedKey(this.classroomId, ClassroomMemberRole.STUDENT)) {\n                return true;\n            } else if (item.id === getMemberComputedKey(this.classroomId, ClassroomMemberRole.TEACHER)) {\n                return true;\n            } {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    getRelationToFilter(): ItemFilterRelation {\n        // Address in [ACPCEDU-2336] -- ProjectsFilter has an example\n        return 'unknown';\n    }\n\n    get hash(): string {\n        return `userId=${getMemberComputedKey(this.classroomId, this.role)}`;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { observable } from '../core/decorators';\nimport ItemBase from '../core/ItemBase';\nimport { IRemoteClassroom, SubjectTypes, IClassroomUpdateData, IImportSource, IRemoteImportSource, ClassroomStatus, ClassroomType } from '../interface/ClassroomModel';\nimport ClassroomsInterface from '../interface/ClassroomsInterface';\nimport PropertyUpdater from '../core/PropertyUpdater';\nimport ItemUpdater from '../core/ItemUpdater';\nimport { ISAMCorePrivate, ISAMObject } from '../indexPrivate';\nimport { ClassroomMemberSource } from '../classroom-member/ClassroomMemberSource';\nimport ItemSource from '../core/ItemSource';\nimport ClassroomMemberListLoader from '../classroom-member/ClassroomMemberListLoader';\nimport ClassroomMemberFilter from './ClassroomMemberFilter';\nimport { ClassroomMemberRole } from '../interface/ClassroomMemberModel';\n\nexport const SubjectChoices: SubjectTypes[] = Object.values(SubjectTypes);\n\n/**\n * Class representing the notion of a \"classroom\".  This is currently a read-only object\n * but this may be extended to support CRUD operations in the future.\n * @extends ItemBase\n *\n * @example\n * // Instatiate list and load contents\n * const classroomsList = core.classroomContext.getClassrooms().getList(...options);\n * await waitForListLoad(classroomsList);\n *\n * // Get a specific classroom\n * const load = useMemo(() => core.classroomContext.getClassroomById(id), [classroomContext, id]);\n * const { value: classroom, error, loading } = useLoading<Classroom | undefined>(undefined, load);\n */\nexport default class Classroom extends ItemBase {\n    private _code: string = '';\n    private _created?: string;\n    private _importSource: IImportSource = {};\n    private _isDeleted: boolean = false;\n    private _isVirtual: boolean = false;\n    private _grades: string[] = [];\n    private _members: ClassroomMemberSource;\n    private _memberRole: ClassroomMemberRole = ClassroomMemberRole.NONE;\n    private _name: string = '';\n    private _period: string = '';\n    private _status: ClassroomStatus = ClassroomStatus.ACTIVE;\n    private _subject: SubjectTypes = SubjectTypes.noSubject;\n    private _type?: ClassroomType;\n    private _classroomsInterface = new ClassroomsInterface(this._core);\n    private _userCount?: number; // User count is not captured for virtual classrooms\n\n    constructor(readonly _core: ISAMCorePrivate, id: string) {\n        super(_core, id);\n        const loader = new ClassroomMemberListLoader(this._core.classroomContext._classroomMemberPool, this._classroomsInterface);\n        this._members = new ItemSource(this._core.classroomContext._classroomMemberPool, [ loader ], new ClassroomMemberFilter({ classroomId: this.id }));\n    }\n\n    /**\n     * For SAM.js internal use only\n     * Due to the classroom ID changing when the classroom is migrated\n     * from a virtual to a real class, clients will NOT have access to\n     * the new instance of the classroom through their existing reference\n     * to the original virtual instance of the class.\n     *\n     * To support classroom workflow reattempts directly following the migration\n     * of the virtual class when the client is still referencing the class\n     * ID when it was virtual, the virtual instance of the class ID will persist\n     * on this session's migrated instance of the class.\n     */\n    _virtualId?: string;\n\n    @observable\n    get code(): string {\n        return this._code;\n    }\n\n    @observable\n    get created(): Date | undefined {\n        if (!this._created) {\n            return undefined;\n        }\n\n        return new Date(this._created);\n    }\n\n    @observable\n    get importSource(): IImportSource {\n        return this._importSource;\n    }\n\n    @observable\n    get isDeleted(): boolean {\n        return this._isDeleted;\n    }\n\n    @observable\n    get isVirtual(): boolean {\n        return this._isVirtual;\n    }\n\n    @observable\n    get grades(): string[] {\n        return this._grades;\n    }\n\n    /**\n     * When getting the resulting list from the ClassroomMemberSource, include a role on the filter to get only students or teachers back\n     * Example usage to get just students back:\n     * classroom.members.getList(ClassroomMemberOrder.default, new ClassroomMemberFilter({ classroomId: classroom.id, role: 'student' }), { refreshTimeout: -1 });\n     *\n     * And omit the role field on the filter to get all members back\n     */\n    @observable\n    get members(): ClassroomMemberSource {\n        if (this._members) {\n            return this._members;\n        }\n        return new ItemSource(this._core.classroomContext._classroomMemberPool, [ new ClassroomMemberListLoader(this._core.classroomContext._classroomMemberPool, this._classroomsInterface) ], new ClassroomMemberFilter({ classroomId: this.id }));\n    }\n\n    @observable\n    get memberRole(): ClassroomMemberRole {\n        return this._memberRole;\n    }\n\n    @observable\n    get name(): string {\n        return this._name;\n    }\n\n    @observable\n    get period(): string {\n        return this._period;\n    }\n\n    @observable\n    get status(): ClassroomStatus {\n        return this._status;\n    }\n\n    @observable\n    get subject(): SubjectTypes {\n        return this._subject;\n    }\n\n    @observable\n    get type(): ClassroomType | undefined {\n        return this._type;\n    }\n\n    @observable\n    get userCount(): number | undefined {\n        // For now, userCount is calculated as studentCount + 1.\n        // In the future, this could give an inaccurate count if we allow multiple teachers to one classroom\n        // Follow up on this field in [ACPCEDU-2333]\n        return this._userCount;\n    }\n\n    async delete(): Promise<void> {\n        await this._classroomsInterface.deleteClassroom(this.id);\n    }\n\n    async refreshCode(): Promise<void> {\n        this._classroomsInterface.refreshClassroomCode(this.id);\n    }\n\n    async update(data: IClassroomUpdateData): Promise<void> {\n        return this._core.classroomContext.updateClassroom(this.id, data);\n    }\n}\n\nexport const ClassroomUpdater = new ItemUpdater<Classroom, Partial<IRemoteClassroom>>({\n    localItemType: Classroom,\n    remoteIdProperty: 'classId',\n    alternateIdProperties: [ 'virtualId' ],\n    propertyUpdater: new PropertyUpdater({\n        _code: { name: 'classCode', format: 'string' },\n        _created: { name: 'createdOn', format: 'string' },\n        _importSource: {\n            name: 'importedFrom',\n            format: 'object',\n            set: (remoteImportSource: IRemoteImportSource, dest: ISAMObject) => {\n                const classroom = dest as Classroom;\n\n                classroom['_importSource'] = {\n                    id: remoteImportSource.sourceId,\n                    type: remoteImportSource.source,\n                    synced: remoteImportSource.lastUpdatedAt ? new Date(remoteImportSource.lastUpdatedAt) : undefined,\n                };\n            },\n        },\n        _isDeleted: { name: 'deleted', format: 'boolean' },\n        _isVirtual: { name: 'isVirtualClassroom', format: 'boolean' },\n        _grades: { isArray: true, name: 'grades' },\n        _memberRole: { name: 'memberRole', format: 'string' },\n        _name: { name: 'className', format: 'string' },\n        _period: { name: 'period', format: 'string' },\n        _status: { name: 'status', format: 'string', choices: Object.values(ClassroomStatus) },\n        _subject: { name: 'subject', format: 'string', choices: SubjectChoices },\n        _type: { name: 'type', format: 'string', choices: Object.values(ClassroomType) },\n        _userCount: { name: 'userCount', format: 'number' },\n        _virtualId: { name: 'virtualId', format: 'string' },\n    }),\n});\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ClassroomsInterface from '../interface/ClassroomsInterface';\nimport { IItemLoader, IItemLoaderOptions, ILoadedPage } from '../core/ItemLoader';\nimport ItemPool from '../core/ItemPool';\nimport Classroom, { ClassroomUpdater } from './Classroom';\nimport { ClassroomConfig } from './ClassroomSource';\n\nexport default class ClassroomListLoader implements IItemLoader<ClassroomConfig> {\n    constructor(private _classroomPool: ItemPool<Classroom>, private _classroomsInterface: ClassroomsInterface) {}\n\n    async loadPage(options: IItemLoaderOptions<ClassroomConfig>): Promise<ILoadedPage<ClassroomConfig>> {\n        return await this._loadPage(options);\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    private async _loadPage(options: IItemLoaderOptions<ClassroomConfig>, start?: number): Promise<ILoadedPage<ClassroomConfig>> {\n        const result = await this._classroomsInterface.getClassrooms();\n        const session = this._classroomPool.createLoaderUpdateSession(Date.now());\n        const items = ClassroomUpdater.updateRemoteItems(session, result);\n        session.commit();\n\n        return {\n            items,\n            total: items.length,\n            loadNextPage: undefined,\n        };\n    }\n}\n","import AssignmentInterface from '../interface/AssignmentsInterface';\nimport Assignment, { AssignmentUpdater } from './Assignment';\nimport {\n    IItemLoader,\n    IItemLoaderOptions,\n    ILoadedPage,\n} from '../core/ItemLoader';\nimport ItemPool from '../core/ItemPool';\nimport { AssignmentConfig } from './AssignmentSource';\nimport { IServiceLink } from '../interface/LinkUtils';\nimport { IAssignmentsResponse } from '../interface/AssignmentModel';\nimport AssignmentFilter from './AssignmentFilter';\nimport AdobeAsset from '../assets/AdobeAsset';\n\nexport default class AssignmentsListLoader\nimplements IItemLoader<AssignmentConfig> {\n    constructor(\n        private _assignmentPool: ItemPool<Assignment | AdobeAsset>,\n        private _assignmentInterface: AssignmentInterface\n    ) {}\n\n    async loadPage(\n        options: IItemLoaderOptions<AssignmentConfig>\n    ): Promise<ILoadedPage<AssignmentConfig>> {\n        return await this._loadPage(options);\n    }\n\n    private async _loadPage(\n        options: IItemLoaderOptions<AssignmentConfig>,\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars -- TODO: https://jira.corp.adobe.com/browse/ACPCEDU-405 add support for paging or remove this\n        pageLink?: IServiceLink\n    ): Promise<ILoadedPage<AssignmentConfig>> {\n        const result: IAssignmentsResponse = await this._assignmentInterface.getAssignments({\n            ...options,\n            classroomId: (options.filter as AssignmentFilter).classroomId,\n        });\n        const mostRecentValidMutation = Date.now(); // can add latency similar to what Project has\n\n        // TBD: we probably want a \"mutation\" session here instead of \"update\" session\n        // Details can be found in https://git.corp.adobe.com/torq/acpl-model/pull/3902#discussion_r7024503\n        const session = this._assignmentPool.createLoaderUpdateSession<Assignment>(\n            mostRecentValidMutation\n        );\n        const items = AssignmentUpdater.updateRemoteItems(session, result.children);\n        session.commit();\n\n        return {\n            items,\n            total: result.children.length,\n            mostRecentValidMutation,\n        };\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport InterfaceBase from './InterfaceBase';\nimport { IRemoteStudentAssignment, IStudentAssignmentReturnData, IStudentAssignmentStartData, IStudentAssignmentSubmitData } from './StudentAssignmentModel';\nimport { RelType, getURLFromLinks } from './LinkUtils';\n\nexport default class StudentAssignmentsInterface extends InterfaceBase {\n    /**\n     * @description Calls the return API for a student assignment.\n     * @param data The information necessary for calling the return API.\n     * @returns A promise that the assignment has been returned.\n     */\n    async return(data: IStudentAssignmentReturnData): Promise<IRemoteStudentAssignment> {\n        try {\n            const { links, studentAssignmentId, submissionId } = data;\n\n            const url = getURLFromLinks(links, RelType.ASSIGNMENTS_RETURN, { studentAssignmentId, submissionId });\n            const response = await this._doPost(url, undefined, undefined, [ 200 ]);\n            const jsonResponse = await response.json();\n\n            return jsonResponse;\n        } catch (e) {\n            this._core._environment.error(`Error was thrown in StudentAssignmentsInterface.return. ${e}`);\n            throw e;\n        }\n    }\n\n    /**\n     * @description Calls the start API for a student assignment.\n     * @param data The information necessary for calling the start API.\n     * @returns A promise that resolves to the interface for the remote student assignment.\n     */\n    async start(data: IStudentAssignmentStartData): Promise<IRemoteStudentAssignment> {\n        try {\n            const { assignmentId, links } = data;\n\n            const url = getURLFromLinks(links, RelType.ASSIGNMENTS_START, { assignmentId });\n            const response = await this._doPost(url, undefined, undefined, [ 200 ]);\n            const jsonResponse = await response.json();\n\n            return jsonResponse;\n        } catch (e) {\n            this._core._environment.error(`Error was thrown in StudentAssignmentsInterface.start. ${e}`);\n            throw e;\n        }\n    }\n\n    /**\n     * @description Calls the submit API for a student assignment.\n     * @param data The information necessary for calling the submit API.\n     * @returns A promise that the assignment has been submitted.\n     */\n    async submit(data: IStudentAssignmentSubmitData): Promise<IRemoteStudentAssignment> {\n        try {\n            const { links, studentAssignmentId, submissionId } = data;\n\n            const url = getURLFromLinks(links, RelType.ASSIGNMENTS_SUBMIT, { studentAssignmentId, submissionId });\n            const response = await this._doPost(url, undefined, undefined, [ 200 ]);\n            const jsonResponse = await response.json();\n\n            return jsonResponse;\n        } catch (e) {\n            this._core._environment.error(`Error was thrown in StudentAssignmentsInterface.submit. ${e}`);\n            throw e;\n        }\n    }\n}\n","import { AssignmentStatus } from '../interface/AssignmentModel';\nimport {\n    compareStrings,\n    compareValues,\n    createItemOrderFactory,\n    IComparatorMap,\n} from '../core/ItemOrder';\nimport Assignment from './Assignment';\n\nexport type AssignmentOrderField = 'name' | 'dueDate' | 'status';\n\nconst StatusOrderValues = {\n    [AssignmentStatus.DRAFT]: 0,\n    [AssignmentStatus.ASSIGNED]: 1,\n};\n\nconst compareAssignmentNames =  (a: Assignment, b: Assignment) => {\n    return compareStrings(a.name || '', b.name || '');\n};\n\nconst OrderFieldToComparator: IComparatorMap<Assignment, AssignmentOrderField>\n  = {\n      name(a: Assignment, b: Assignment): number {\n          return compareAssignmentNames(a, b);\n      },\n      dueDate(a: Assignment, b: Assignment): number {\n          let value;\n          if (!a.dueDate && !b.dueDate) {\n              value  = 0;\n          } else if (!a.dueDate) {\n              value = 1; // Undefined date should be sorted last in ascending order\n          } else if (!b.dueDate) {\n              value = -1;\n          } else {\n              value = compareValues(a.dueDate.getTime(), b.dueDate.getTime());\n          }\n          if (value === 0) {\n              // Within the same dueDate, sort by name\n              return compareAssignmentNames(a, b);\n          }\n          return value;\n      },\n      status(a: Assignment, b: Assignment): number {\n          const value = compareValues(StatusOrderValues[a.status as AssignmentStatus], StatusOrderValues[b.status as AssignmentStatus]);\n          if (value === 0) {\n              // Within the same status, sort by name\n              return compareAssignmentNames(a, b);\n          }\n          return value;\n      }\n  };\n\nexport default class AssignmentOrder extends createItemOrderFactory(OrderFieldToComparator) {\n    static default = new AssignmentOrder('ascending', 'name');\n}\n","import { IItemFilter, ItemFilterRelation } from '../core/ItemFilter';\nimport Assignment from './Assignment';\n\nexport interface IAssignmentFilterOptions {\n    classroomId: string;\n}\n\nexport default class AssignmentFilter implements IItemFilter<Assignment> {\n    public classroomId: string;\n\n    constructor(options: Partial<IAssignmentFilterOptions>) {\n        this.classroomId = options.classroomId || '';\n    }\n\n    matches(item: Assignment): boolean {\n        if (!item.isAssignment) {\n            return false;\n        }\n        if (item.classroomId !== this.classroomId) {\n            return false;\n        }\n        if (item.isDiscarded) {\n            return false;\n        }\n        return true;\n    }\n\n    // will add more logics in next iterations\n    getRelationToFilter(): ItemFilterRelation {\n        // Address in [ACPCEDU-2336] -- ProjectsFilter has an example\n        return 'unknown';\n    }\n\n    get hash(): string {\n        return `classroomId=${this.classroomId}`;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n//import { observable } from '../core/decorators';\nimport AdobeAsset, { AdobeAssetUpdaterMetadata } from '../assets/AdobeAsset';\nimport PropertyUpdater from '../core/PropertyUpdater';\nimport ItemUpdater from '../core/ItemUpdater';\nimport { IPatchStudentAssignmentFileData, IRemoteStudentAssignmentFile } from '../interface/StudentAssignmentFileModel';\nimport { ISAMCorePrivate } from '../indexPrivate';\nimport jsonpatch from 'json-patch';\nimport { Tutorial } from '../interface/TutorialModel';\n\n// NOTE: This file will be refactored in ACPCEDU-1418, current version is to unblock UI work.\n\n/**\n * Represents a file that is part of a student assignment.\n */\nexport default class StudentAssignmentFile { //extends AdobeAsset {\n    private _adobeAsset: AdobeAsset;\n    private _core: ISAMCorePrivate;\n\n    constructor(core: ISAMCorePrivate, adobeAsset: AdobeAsset) {\n        this._adobeAsset = adobeAsset;\n        this._core = core;\n    }\n\n    get id(): string {\n        return this._adobeAsset.id;\n    }\n\n    get 'repo:assetId'(): string {\n        return this._adobeAsset.id;\n    }\n\n    get sourceAssets(): string[] | undefined {\n        return this._adobeAsset.appMetadata.data['assignment:sourceAssets'];\n    }\n\n    get sourceTasks(): string[] | undefined {\n        return this._adobeAsset.appMetadata.data['assignment:sourceTasks'];\n    }\n\n    get sourceTutorials(): Partial<Tutorial>[] | undefined {\n        return this._adobeAsset.appMetadata.data['assignment:sourceTutorials'];\n    }\n\n    get mediaType(): string {\n        return this._adobeAsset.mediaType;\n    }\n\n    get adobeAsset(): AdobeAsset {\n        return this._adobeAsset;\n    }\n\n    async update({ sourceAssets, sourceTasks, sourceTutorials }: IPatchStudentAssignmentFileData): Promise<StudentAssignmentFile> {\n        if (!sourceAssets && !sourceTasks && !sourceTutorials) {\n            throw Error('Incorrect parameters: sourceAssetId, sourceTask, or sourceTutorials parameter required');\n        }\n\n        await this._core.classroomContext.updateStudentAssignmentFile(\n            this,\n            {\n                'assignment:sourceAssets': sourceAssets,\n                'assignment:sourceTasks': sourceTasks,\n                'assignment:sourceTutorials': sourceTutorials\n            },\n        );\n\n        return this;\n    }\n\n    async patchAppMetadata(patches: jsonpatch.OpPatch[]): Promise<void> {\n        return this._adobeAsset.patchAppMetadata(patches);\n    }\n}\n\nexport const StudentAssignmentFileUpdater = new ItemUpdater<AdobeAsset, Partial<AdobeAssetUpdaterMetadata | IRemoteStudentAssignmentFile>>({\n    localItemType: AdobeAsset,\n    remoteIdProperty: 'id',\n    propertyUpdater: new PropertyUpdater({})\n});\n","/** Returns true if the object has a key. Can be used as a replacement to `Object.hasOwnProperty` and `Object.hasOwn`. */\nconst hasProperty = (obj: object, key: string): boolean => {\n    return Object.getOwnPropertyDescriptor(obj, key) !== undefined;\n};\n\nexport default hasProperty;\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { memoize, synchronized } from '../core/decorators';\nimport type { ISAMCorePrivate, ISAMObject } from '../indexPrivate';\nimport ItemPool from '../core/ItemPool';\nimport ItemSource from '../core/ItemSource';\nimport { IBatchOperationResult } from '../interface/RepositoryModel';\nimport Classroom, { ClassroomUpdater } from './Classroom';\nimport ClassroomListListLoader from './ClassroomListLoader';\nimport ClassroomsInterface, { validateClassroomData } from '../interface/ClassroomsInterface';\nimport { ClassroomSource } from './ClassroomSource';\nimport Assignment, { AssignmentUpdater } from '../assignments/Assignment';\nimport AdobeAsset from '../assets/AdobeAsset';\nimport AssignmentsListLoader from '../assignments/AssignmentListLoader';\nimport AssignmentsInterface, { validateAssignmentData } from '../interface/AssignmentsInterface';\nimport { AssignmentConfig, AssignmentSource } from '../assignments/AssignmentSource';\nimport { IClassroomCreateData, IClassroomUpdateData, IRemoteClassroom, IRemoteBlockOrRemoveResponse, IRemoteMembership } from '../interface/ClassroomModel';\nimport { AssignmentStatus, ExternalAsset, IAssignmentCreateData, IAssignmentPatchData, IAssignmentRemotePatchData, IAssignmentUpdateData, assignmentRemoteFieldMapping } from '../interface/AssignmentModel';\nimport { validatePlatformRepoName } from '../assets/AssetUtils';\nimport { IRemoteStudentAssignment, IStudentAssignmentReturnData, IStudentAssignmentStartData, IStudentAssignmentSubmitClassroomContextData } from '../interface/StudentAssignmentModel';\nimport SAMError from '../core/SAMError';\nimport { SAMErrorCode } from '../core/SAMError';\nimport StudentAssignmentsInterface from '../interface/StudentAssignmentsInterface';\nimport AssignmentOrder from '../assignments/AssignmentOrder';\nimport AssignmentFilter from '../assignments/AssignmentFilter';\nimport AdobeAssetOrder from '../assets/AdobeAssetOrder';\nimport StudentAssignmentFile, { StudentAssignmentFileUpdater } from '../assignments/StudentAssignmentFile';\nimport { IItemList, LIST_FULLY_LOADED } from '../../src/core/ItemList';\nimport { IGetStudentAssignmentFiles, IStudentAssignmentFileRemotePatchData } from '../interface/StudentAssignmentFileModel';\nimport hasProperty from '../utils/hasProperty';\nimport { AssetListStatus } from '../../src/core/ItemLoaderState';\nimport jsonpatch from 'json-patch';\nimport { waitForListLoad } from '../utils/waitForListLoad';\nimport ClassroomMember from '../classroom-member/ClassroomMember';\nimport { ClassroomMemberSource } from '../classroom-member/ClassroomMemberSource';\nimport ClassroomMemberListLoader from '../classroom-member/ClassroomMemberListLoader';\n\nexport type IBatchOperationClassroomResult = IBatchOperationResult<Classroom>;\n\ninterface UpdateAssignmentMaterialsResult {\n    shouldUpdateTemplates: boolean;\n    shouldUpdateReferences: boolean;\n    updatedTemplateIds: string[];\n    updatedReferenceIds: string[];\n    assetsToDiscard: string[];\n}\n\nexport default class ClassroomContext implements ISAMObject {\n    private _assignmentInterface = new AssignmentsInterface(this._core);\n    private _classroomsInterface = new ClassroomsInterface(this._core);\n    private _studentAssignmentsInterface = new StudentAssignmentsInterface(this._core);\n\n    constructor(readonly _core: ISAMCorePrivate, private _assetPool: ItemPool<Assignment | AdobeAsset>) {}\n\n    /**\n     * @TODO_Deprecated -- to be deprecated on or after 10-01-2024 and removed on or after 01-01-2025.\n     *   Either use this._assetPool, or create a new _assignmentPool getter that returns this._assetPool.\n     *\n     * @package -- for SAM.js internal use only\n     */\n    get assignmentPool(): ItemPool<Assignment | AdobeAsset> {\n        return this._assetPool;\n    }\n\n    /**\n     * @package -- for SAM.js internal use only\n     */\n    public _classroomPool = new ItemPool<Classroom>(this._core, 'classroom');\n\n    /**\n     * @package -- for SAM.js internal use only\n     */\n    public _classroomMemberPool = new ItemPool<ClassroomMember>(this._core, 'classroomMember');\n\n    /**\n     * @description Gets a classroom with the given class ID.\n     *\n     * @param id comes from classId or classCode\n     * @returns a promise that resolves to the Classroom\n     */\n    @synchronized\n    async getClassroomById(id: string): Promise<Classroom> {\n        const classroomInterface = this._classroomsInterface;\n        const pool = this._classroomPool;\n        let classroom = pool.getLocalItemById(id);\n        if (!classroom) {\n            // Note that we don't have a local classroom, so we don't have to worry about eventual consistency on this item.\n            const response = await classroomInterface.getClassroom(id);\n            const session = pool.createUpdateSession();\n            classroom = ClassroomUpdater.updateRemoteItem(session, this._processRemoteClassroomItem(id, response));\n            session.commit();\n        }\n        return classroom;\n    }\n\n    /**\n     * @description Gets a classroom with the given class code. Typically, using getClassroomById is preferred.\n     *\n     * @param id comes from classCode\n     * @returns a promise that resolves to the Classroom\n     */\n    @synchronized\n    async getClassroomByCode(classCode: string): Promise<Classroom> {\n        // Check if the classroom is cached already\n        // Since getLocalItemById only supports the primary ID,\n        // not the code, iterate through the cached list\n        const classroom = this._classroomPool.toArray().find((classroom) => classroom.code === classCode);\n        if (classroom) {\n            return classroom;\n        }\n        // The interface passes to ID or CODE through the same endpoint and param.\n        return this.getClassroomById(classCode);\n    }\n\n    /**\n     * @description Gets all classrooms a user has access to.\n     *\n     * @example\n     * const classroomContext = samCore.classroomContext;\n     * const assignmentsSource = classroomContext.getClassrooms();\n     */\n    @memoize\n    getClassrooms(): ClassroomSource {\n        return new ItemSource(this._classroomPool, [ new ClassroomListListLoader(this._classroomPool, this._classroomsInterface) ]);\n    }\n\n    /**\n     * Gets all classroom members\n     * @param classroomId\n     * @returns list of classroom members\n     */\n    @memoize\n    getClassroomMembers(): ClassroomMemberSource {\n        return new ItemSource(this._classroomMemberPool, [ new ClassroomMemberListLoader(this._classroomMemberPool, this._classroomsInterface) ]);\n    }\n\n    /**\n     * @example\n     * const classroomContext = samCore.classroomContext;\n     * const assignmentsSource = classroomContext.getAssignments();\n     *\n     * Gets all assignments for the classroom\n     */\n    @memoize\n    getAssignments(): AssignmentSource {\n        const loader = new AssignmentsListLoader(\n            this._assetPool,\n            this._assignmentInterface\n        );\n        return new ItemSource(this._assetPool as ItemPool<Assignment>, [ loader ]);\n    }\n\n    private cleanAssignmentName(name: string): string {\n        return name.trimEnd();\n    }\n\n    /**\n     * Creates a new Classroom\n     * @param data creation data (e.g. name, grade etc)\n     *\n     * @returns a promise that resolves to the classroom\n     */\n    @synchronized\n    async createClassroom(data: IClassroomCreateData): Promise<Classroom> {\n        const classroomValidationErrors = validateClassroomData(data);\n        if (classroomValidationErrors.length > 0) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, JSON.stringify(classroomValidationErrors));\n        }\n\n        let response;\n        // Class is being created from a virtual classroom\n        if (data.id) {\n            response = await this._classroomsInterface.createClassroomFromVirtual(data.id);\n            // Preserve the old original identifier for the class to re-index the existing item under its preferred id\n            response.virtualId = data.id;\n        } else {\n            const className = data.name?.trim() || '';\n\n            if (!validatePlatformRepoName(className)) {\n                // Validate the name here to avoid resolving the asset if the name is invalid.\n                throw SAMError.create(\n                    SAMErrorCode.BAD_REQUEST,\n                    'Invalid class name provided for the creation operation.'\n                );\n            }\n\n            response = await this._classroomsInterface.createClassroom({\n                ...data,\n                name: className\n            });\n        }\n\n        // Cache new classroom\n        const session = this._classroomPool.createMutationSession<Classroom>();\n        const classroom = ClassroomUpdater.updateRemoteItem(session, response);\n        session.commit();\n        return classroom;\n    }\n\n    /**\n     * Creates a new Assignment\n     * @param data creation data (e.g. title, instructions, etc)\n     *\n     * @returns a promise that resolves to the assignment recently and successfully created\n     */\n    @synchronized\n    async createAssignment(data: IAssignmentCreateData): Promise<Assignment> {\n        const assignmentValidateErrors = validateAssignmentData(data);\n        if (assignmentValidateErrors.length > 0) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, JSON.stringify(assignmentValidateErrors));\n        }\n\n        let classroomId = data.classroomId;\n        // See if the class ID given maps to a virtual class that has already been migrated recently\n        // if not fetch the classroom and see if it is virtual which requires migrating the class to\n        // a real class before an assignment can be created for it\n        const recentMigratedClassroom = this._classroomPool.toArray().find((classroom) => classroom._virtualId === data.classroomId);\n        if (recentMigratedClassroom) {\n            classroomId = recentMigratedClassroom.id;\n        } else {\n            // Class that maps to given ID has not been migrated recently so fetch and see if it maps to a virtual class\n            const classroom = await this.getClassroomById(data.classroomId);\n            if (classroom.isVirtual) {\n                const migratedClassroom = await this.createClassroom({ id: classroom.id });\n                classroomId = migratedClassroom.id;\n\n                // Check if the virtual class is still being referenced if so throw an error\n                // The newly created real class is what is expected to be returned\n                if (classroomId === data.classroomId) {\n                    throw SAMError.create(\n                        SAMErrorCode.BAD_REQUEST,\n                        'Cannot create an assignment with a virtual classroom.'\n                    );\n                }\n            }\n        }\n\n        const trimmedName = this.cleanAssignmentName(data.name);\n\n        if (!validatePlatformRepoName(trimmedName)) {\n            // Validate the name here to avoid resolving the asset if the name is invalid.\n            throw SAMError.create(\n                SAMErrorCode.BAD_REQUEST,\n                'Invalid name provided for the creation operation.'\n            );\n        }\n\n        // We will not create the assignment with the incoming template IDs\n        // Instead updateAssignment() will clone them and save new asset IDs to this assignment\n        const { templateIds, references, ...createData } = data;\n        createData.name = trimmedName;\n\n        const incomingTemplateIds = templateIds ?? [];\n        const incomingReferences = references ?? [];\n        const hasMaterials = incomingTemplateIds.length + incomingReferences.length > 0;\n\n        // If the assignment has materials, it should be created as a draft\n        // and only be assigned when the materials are copied\n        const finalStatus = createData.status || AssignmentStatus.DRAFT;\n        if (!hasProperty(createData, 'status') || hasMaterials) {\n            createData.status = AssignmentStatus.DRAFT;\n        }\n\n        const response = await this._assignmentInterface.createAssignment({ ...createData, classroomId });\n        const session = this._assetPool.createMutationSession<Assignment>();\n        const assignment = AssignmentUpdater.updateRemoteItem(session, response);\n        session.commit();\n\n        const materialsUpdateData: Pick<IAssignmentUpdateData, 'references' | 'templateIds'> = {};\n        if (incomingTemplateIds.length > 0) {\n            materialsUpdateData.templateIds = incomingTemplateIds;\n        }\n        if (incomingReferences.length > 0) {\n            materialsUpdateData.references = incomingReferences;\n        }\n\n        // Only update with materials that need copying. Other data is able to be assigned on creation\n        if (hasMaterials) {\n            await this.updateAssignment(assignment.id, {\n                ...materialsUpdateData,\n                status: finalStatus\n            });\n        }\n\n        return assignment;\n    }\n\n    /**\n     * Assigns a draft assignment to each member of the classroom\n     * @deprecated Calls to this function should be replaced with updateAssignment(assignmentId, { status: AssignmentStatus.ASSIGNED })\n     * @param assignmentId ID of assignment to assign\n     * @package Only for use in SAM.js\n     */\n    async _assignAssignment(assignmentId: string) {\n        const assignment = this._assetPool.getLocalItemById<Assignment>(assignmentId);\n        if (!assignment) {\n            throw SAMError.create(SAMErrorCode.NOT_FOUND, `Could not find assignment to assign with ID of \"${assignmentId}\"`);\n        }\n        return this.updateAssignment(assignmentId, { status: AssignmentStatus.ASSIGNED });\n    }\n\n    /**\n     * Gets a Assignment with the given ID.\n     *\n     * @note in the near future, we can call to check the access to this assignment given by an ID.\n     *\n     * @param id ID of the Assignment\n     * @returns a promise that resolves to the Assignment with the given ID\n     */\n    @synchronized\n    async getAssignmentByID(id: string): Promise<Assignment> {\n        let assignment = this._assetPool.getLocalItemById<Assignment>(id);\n        if (assignment) {\n            return assignment;\n        }\n        const assignmentMetadata = await this._assignmentInterface.getAssignment(\n            id\n        );\n        const session = this._assetPool.createMutationSession<Assignment>();\n        assignment = AssignmentUpdater.updateRemoteItem(\n            session,\n            assignmentMetadata\n        );\n        session.commit();\n        return assignment;\n    }\n\n    /**\n     * This function gets an assignment by its code.\n     *\n     * @param code Code used to fetch assignment\n     * @returns A promise that resolves to the assignment with the given code\n     */\n    @synchronized\n    async getAssignmentByCode(code: string): Promise<Assignment> {\n        // Check if the assignment is cached already\n        // Since getLocalItemById only supports the primary ID,\n        // not the code, iterate through the cached list\n        let assignment = this._assetPool.toArray<Assignment>().find((assignment) => assignment.code === code);\n        if (assignment) {\n            return assignment;\n        }\n\n        const assignmentMetadata = await this._assignmentInterface.getAssignmentByCode(code);\n\n        const session = this._assetPool.createMutationSession<Assignment>();\n        assignment = AssignmentUpdater.updateRemoteItem(\n            session,\n            assignmentMetadata\n        );\n        session.commit();\n        return assignment;\n    }\n\n    /**\n     * Discards the given assignment\n     * This assignment will be eligible to be restored or permanentlyDeleted from this state\n     * @param assignment Assignment to be discarded\n     * @package Only for use in SAM.js\n     */\n    @synchronized\n    async _discardAssignment(assignment: Assignment) {\n        try {\n            await assignment.discard();\n        } catch (error) {\n            const e = error as Error;\n            throw e;\n        }\n    }\n\n    /**\n     * Restores the given assignment\n     * @param assignment Assignment to be restored\n     * @package Only for use in SAM.js\n     */\n    @synchronized\n    async _restoreAssignment(assignment: Assignment)  {\n        try {\n            await assignment.restore();\n        } catch (error) {\n            const e = error as Error;\n            throw e;\n        }\n    }\n\n    /**\n     * Returns a StudentAssignment.\n     * @param data The data necessary to return the assignment.\n     * @returns a promise that resolves to the partial StudentAssignment object that was returned.\n     * @package Only for use in SAM.js\n     */\n    @synchronized\n    async _returnAssignment(data: IStudentAssignmentReturnData): Promise<IRemoteStudentAssignment> {\n        return this._studentAssignmentsInterface.return(data);\n    }\n\n    /**\n     * Starts a StudentAssignment.\n     * @param data The data necessary to start the assignment.\n     * @returns a promise that resolves to the partial StudentAssignment object that was started.\n     * @package Only for use in SAM.js\n     */\n    @synchronized\n    async _startAssignment(data: IStudentAssignmentStartData): Promise<IRemoteStudentAssignment> {\n        return this._studentAssignmentsInterface.start(data);\n    }\n\n    /**\n     * Submits a StudentAssignment.\n     * @param data The data necessary to submit the assignment.\n     * @returns a promise that resolves to the partial StudentAssignment object that was submitted.\n     */\n    @synchronized\n    public async submitAssignment(data: IStudentAssignmentSubmitClassroomContextData): Promise<IRemoteStudentAssignment> {\n        let studentAssignmentId = data.studentAssignmentId;\n\n        if (data.assignmentId) {\n            const assignment = await this.getAssignmentByID(data.assignmentId);\n            // It is ok to assume that the first studentAssignment is available since the student\n            // is the one submitting the assignment\n            studentAssignmentId = assignment.studentAssignments[0].id;\n        }\n\n        if (!studentAssignmentId) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'Either studentAssignmentId or assignmentId is required to submit an assignment');\n        }\n\n        return this._studentAssignmentsInterface.submit({ studentAssignmentId, submissionId: data.submissionId, links: data.links });\n    }\n\n    /**\n     * Function to update a StudentAssignmentFile\n     *\n     * @param studentAssignmentFile StudentAssignmentFile that will be updated. Either the object or the ID can be passed.\n     * @param data Data to update the file with. Note that sourceAssets OR sourceTasks are allowed, but not both in one update call.\n     * @returns Updated StudentAssignmentFile\n     * @experimental This function may change and is a work in progress\n     */\n    async updateStudentAssignmentFile(studentAssignmentFile: StudentAssignmentFile | string, data: IStudentAssignmentFileRemotePatchData): Promise<StudentAssignmentFile | AdobeAsset> {\n        data['assignment:sourceAssets'] ??= [];\n        data['assignment:sourceTasks'] ??= [];\n        data['assignment:sourceTutorials'] ??= [];\n\n        const patchData: jsonpatch.OpPatch[] = [\n            {\n                op: 'add',\n                path: '/assignment:sourceAssets',\n                value: data['assignment:sourceAssets']\n            },\n            {\n                op: 'add',\n                path: '/assignment:sourceTasks',\n                value: data['assignment:sourceTasks']\n            },\n            {\n                op: 'add',\n                path: '/assignment:sourceTutorials',\n                value: data['assignment:sourceTutorials']\n            },\n        ];\n\n        const assetToPatch = typeof studentAssignmentFile === 'string'\n            ? await this._core.hostAssetContext.getAssetWithCloudID(studentAssignmentFile)\n            : studentAssignmentFile;\n\n        await assetToPatch.patchAppMetadata(patchData);\n\n        return assetToPatch;\n    }\n\n    /**\n     * Determine if the given name is valid for creating an assignment\n     * @throws SAMError if the name is invalid - The error messages are in English and would need\n     *         to be localized if exposed through the UI.\n     */\n    async validateAssignmentNameForCreate(name: string, classroomId?: string): Promise<void> {\n        await this._validateAssignmentName(name, classroomId);\n    }\n\n    /**\n     * Determine if the given name is valid when updating an assignment\n     * @throws SAMError if the name is invalid - The error messages are in English and would need\n     *         to be localized if exposed through the UI.\n     */\n    async validateAssignmentNameForUpdate(name: string, classroomId: string, assignmentId: string): Promise<void> {\n        await this._validateAssignmentName(name, classroomId, assignmentId);\n    }\n\n    /**\n     * @package -- only exposed for testing\n     */\n    public _assignmentListsToKeepAlive: Map<IItemList<AssignmentConfig>, ReturnType<typeof setTimeout>> = new Map();\n    /**\n     * Keep references to assignment lists to prevent garbage collection.\n     */\n    private keepAssignmentListAlive(list: IItemList<AssignmentConfig>) {\n        if (this._assignmentListsToKeepAlive.has(list)) {\n            const existingTimeout = this._assignmentListsToKeepAlive.get(list);\n            if (existingTimeout) {\n                clearTimeout(existingTimeout);\n            }\n        }\n        this._assignmentListsToKeepAlive.set(\n            list,\n            setTimeout(\n                () => this._assignmentListsToKeepAlive.delete(list),\n                10 * 60 * 1000, // 10 minutes\n            ),\n        );\n    }\n\n    /**\n     * Determine if the given name is valid\n     *  - Name cannot contain only whitespace\n     *  - Name must adhere to asset naming rules\n     *  - Name cannot end in a period\n     *  - The name must be unique within the classroom\n     * @throws SAMError if the name is invalid - The error messages are in English and would need\n     *         to be localized if exposed through the UI.\n     */\n    @synchronized\n    private async _validateAssignmentName(name: string, classroomId?: string, assignmentId?: string): Promise<void> {\n        const trimmedName = name.trim();\n        // Name cannot have leading or trailing whitespace\n        if (trimmedName.length === 0) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'The assignment name cannot be blank.');\n        }\n        // Name must adhere to asset naming rules\n        if (!validatePlatformRepoName(trimmedName)) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'The assignment name is an invalid platform repo name.');\n        }\n        // Name cannot end in a period\n        if (trimmedName.endsWith('.')) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'The assignment name cannot end with a period.');\n        }\n\n        // Name must be unique within the classroom\n        if (!classroomId) {\n            // Assignment does not map to a specific class yet so the name is valid for this case\n            return;\n        }\n        const classroom = await this.getClassroomById(classroomId);\n        if (classroom.isVirtual) {\n            // No assignments exist in a virtual classroom\n            return;\n        }\n        const assignments = this.getAssignments();\n        const assignmentList = assignments.getList(\n            AssignmentOrder.default,\n            new AssignmentFilter({ classroomId }),\n            {}\n        );\n        this.keepAssignmentListAlive(assignmentList);\n        await waitForListLoad(assignmentList);\n        const locale = this._core._environment.getValue('LOCALE');\n        const matchingAssignment = assignmentList.items.find(assignment => assignment.name.toLocaleLowerCase(locale) === trimmedName.toLocaleLowerCase(locale));\n        if (matchingAssignment) {\n            if (!assignmentId || matchingAssignment.id !== assignmentId) {\n                throw SAMError.create(SAMErrorCode.CONFLICT, 'The assignment name must be unique within the classroom.');\n            }\n        }\n    }\n\n    /**\n     * Updates and Assignment's name\n     * @param assignmentId The assignment ID\n     * @param newName The new name\n     * @returns\n     */\n    @synchronized\n    private async _renameAssignment(assignmentId: string, newName: string): Promise<void> {\n        const assignment = await this.getAssignmentByID(assignmentId);\n\n        try {\n            // repositoryID must be present for the rename operation to work\n            if (!assignment.repositoryID) {\n                await assignment._load();\n            }\n\n            return assignment.rename(newName);\n        } catch (error) {\n            if (error instanceof SAMError) {\n                throw error;\n            }\n\n            throw SAMError.create(SAMErrorCode.INTERNAL_ERROR, `Could not rename asset \"${assignmentId}\"`);\n        }\n    }\n\n    /**\n     * Updates an Assignment's data and copies any given asset to the materials folder of the assignment\n     * @param id The assignmentId of the Assignment to update\n     * @param data The data to update the Assignment with\n     * @returns\n     */\n    @synchronized\n    async updateAssignment(assignmentId: string, data: Partial<IAssignmentUpdateData>): Promise<void> {\n        // Extract references and templateIds because they should not be updated\n        // unless _getUpdatedAssignmentMaterials determines that they should be\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        const { references, status, templateIds, ...otherAssignmentData } = data;\n        const materialUpdates = await this._getUpdatedAssignmentMaterials(assignmentId, data);\n\n        const patchData: IAssignmentPatchData = otherAssignmentData;\n\n        if (materialUpdates.shouldUpdateTemplates) {\n            patchData.templateIds = materialUpdates.updatedTemplateIds;\n        }\n\n        if (materialUpdates.shouldUpdateReferences) {\n            patchData.referenceIds = materialUpdates.updatedReferenceIds;\n        }\n        const promises = [];\n        const shouldRename = hasProperty(data, 'name');\n\n        // The update operation can happen in parallel with the rename operation\n        if (shouldRename) {\n            patchData.name = this.cleanAssignmentName(data.name!);\n            promises.push(this._renameAssignment(assignmentId, patchData.name));\n        }\n        if (status === AssignmentStatus.ASSIGNED) {\n            patchData.status = status;\n        }\n\n        promises.push(this._updateAssignmentMetadata(assignmentId, patchData));\n\n        await Promise.all(promises);\n\n        // Cleaning up after setting the new templates in case the copy OR update fails\n        // Note: If the discard operation fails on any asset then it will be orphaned forever\n        // TODO: Determine how we can do a proper cleanup of any orphaned assets, not just on update\n        this._discardAssets(materialUpdates.assetsToDiscard);\n    }\n\n    /**\n     * Updates an Assignment's data\n     * @param assignmentId The assignmentId of the Assignment to update\n     * @param data The data to update the Assignment with\n     * @returns\n     */\n    @synchronized\n    private async _updateAssignmentMetadata(assignmentId: string, data: IAssignmentPatchData): Promise<void> {\n        if (Object.keys(data).length === 0) {\n            // Nothing to update\n            return;\n        }\n\n        const mappedData = Object.entries(assignmentRemoteFieldMapping).reduce((acc, [ localKey, remoteKey ]) => {\n            const hasKey = hasProperty(data, localKey);\n            if (hasKey) {\n                const value = data[localKey as keyof IAssignmentPatchData];\n                if (value instanceof Date) {\n                    // @ts-expect-error\n                    acc[remoteKey] = value.toISOString();\n                } else {\n                    // @ts-expect-error\n                    acc[remoteKey] = value;\n                }\n            }\n\n            return acc;\n        }, { 'repo:assetId': assignmentId } as IAssignmentRemotePatchData);\n\n        await this._assignmentInterface.patchAssignment(assignmentId, mappedData);\n\n        const session = this._assetPool.createMutationSession<Assignment>();\n        AssignmentUpdater.updateRemoteItem(\n            session,\n            mappedData\n        );\n        session.commit();\n    }\n\n    /**\n     * Gets the asset representing the materials folder of an assignment\n     * @param assignmentId\n     * @returns\n     */\n    private async _getAssignmentMaterialsFolderAsset(assignmentId: string): Promise<AdobeAsset> {\n        const assignment = await this.getAssignmentByID(assignmentId);\n\n        const materialsFolder = assignment.materialsFolder?.['repo:assetId'];\n        if (!materialsFolder) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'Assignment does not have a materials folder.');\n        }\n\n        const materialsFolderAsset =  await this._core.hostAssetContext.getAssetWithCloudID(materialsFolder);\n        if (!materialsFolderAsset) {\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, `Could not find materials folder with ID of \"${materialsFolder}\"`);\n        }\n\n        return materialsFolderAsset;\n    }\n\n    /** Gets a list of assets by ID */\n    private async _getAssets(assetIds: string[]): Promise<AdobeAsset[]> {\n        return (await Promise.allSettled(assetIds.map(assetId => this._core.hostAssetContext.getAssetWithCloudID(assetId)))).map((result, index) => {\n            if (result.status === 'fulfilled') {\n                return result.value;\n            }\n\n            throw SAMError.wrapErrorIfNeeded(SAMErrorCode.INTERNAL_ERROR, `Failed to get asset with ID of \"${assetIds[index]}\"`, result.reason);\n        });\n    }\n\n    /** Discards a list of assets by ID */\n    private async _discardAssets(assetIds: string[]): Promise<void> {\n        if (assetIds.length === 0) {\n            return;\n        }\n\n        const assets = await this._getAssets(assetIds);\n\n        await Promise.allSettled(assets.map((asset) => asset.discard()));\n    }\n\n    /**\n     * Copies the given assets to the materials folder of the assignment\n     * @param assignmentId The assignment ID to copy to\n     * @param assetIds The assets to copy\n     * @returns The asset IDs of the copied assets\n     */\n    private async _copyAssetsToMaterialsFolder(assignmentId: string, assetIds: string[]): Promise<string[]> {\n        if (assetIds.length === 0) {\n            return [];\n        }\n\n        const assignment = await this.getAssignmentByID(assignmentId);\n        const assetsToCopy = await this._getAssets(assetIds);\n\n        // Copying the assets one at a time (but in parallel) because the batch copy cannot copy assets from different directories\n        const copyPromises = assetsToCopy.map((asset, idx) => asset._copyWithDestMetadata(assignment.repositoryID, `${assignment.repoPath}/materials`, `${assignment.name} ${this._getFormattedCreatedDateHelper({ includeFormattedDate: true, date: new Date() })} ${idx}.${asset.extension}`));\n\n        const clonedAssets = (await Promise.allSettled(copyPromises))\n            .map((result, index) => {\n                if (result.status === 'fulfilled') {\n                    return result.value;\n                }\n\n                throw SAMError.wrapErrorIfNeeded(SAMErrorCode.INTERNAL_ERROR, `Failed to copy asset with ID of \"${assetIds[index]}\"`, result.reason);\n            });\n\n        return clonedAssets.map(asset => asset.id);\n    }\n\n    /**\n     * Helper function to format the created date for the asset name\n     * @package -- for SAM.js internal use only\n     */\n    public _getFormattedCreatedDateHelper({ includeFormattedDate, date }: {includeFormattedDate: boolean, date: Date}): string {\n        const locale = this._core._environment.getValue('LOCALE');\n        const dateTimeFormat: Intl.DateTimeFormatOptions = includeFormattedDate ? {\n            year: 'numeric',\n            month: 'numeric',\n            day: 'numeric',\n            hour: 'numeric',\n            minute: 'numeric',\n            second: 'numeric',\n            fractionalSecondDigits: 3,\n            hourCycle: 'h24'\n        } : {\n            hour: 'numeric',\n            minute: 'numeric',\n            second: 'numeric',\n        };\n        // Need to replace to convert from colons to periods, example: 14:28:00 to 14.28.00\n        return new Intl.DateTimeFormat(locale, dateTimeFormat).format(date).replace(/[/:]/g, '.');\n    }\n\n    /** Determines which files need to be kept, cloned, and discarded when updating an assignment with new resources. */\n    private async _determineAssetDifferences(assignmentId: string, field: 'templateIds' | 'referenceIds', incomingAssetIds: string[] | undefined) {\n        const assignment = await this.getAssignmentByID(assignmentId);\n\n        if (!incomingAssetIds) {\n            return {\n                assetsToCopy: [],\n                assetsToKeep: [],\n                assetsToDiscard: assignment[field],\n            };\n        }\n\n        const assetsToDiscard = assignment[field].filter(templateId => !incomingAssetIds.includes(templateId));\n        const assetsToCopy = incomingAssetIds.filter(templateId => !assignment[field].includes(templateId));\n        const assetsToKeep = assignment[field].filter(templateId => incomingAssetIds.includes(templateId));\n\n        return {\n            assetsToCopy,\n            assetsToKeep,\n            assetsToDiscard,\n        };\n    }\n\n    /**\n     * Based on incoming update data this will determine which assets need to be kept, cloned, and discarded.\n     * Assets to be kept are returned as-is.\n     * Assets to be cloned are copied to the materials folder of the assignment, and returned along with the kept asset IDs.\n     * Assets to be discarded are returned and are expected to be discarded after calling this function.\n     */\n    private async _getUpdatedAssignmentMaterials(assignmentId: string, data: Partial<IAssignmentUpdateData>): Promise<UpdateAssignmentMaterialsResult> {\n        const shouldUpdateTemplates = hasProperty(data, 'templateIds');\n        const shouldUpdateReferences = hasProperty(data, 'references');\n\n        const result: UpdateAssignmentMaterialsResult = {\n            updatedTemplateIds: [],\n            updatedReferenceIds: [],\n            assetsToDiscard: [],\n            shouldUpdateTemplates,\n            shouldUpdateReferences,\n        };\n\n        const assetsToCopy: string[] = [];\n        let splitIdx = 0;\n\n        const materialsPromises: (() => Promise<any>)[] = [];\n\n        if (shouldUpdateTemplates) {\n            const templateDifferences = await this._determineAssetDifferences(assignmentId, 'templateIds', data.templateIds);\n            result.assetsToDiscard.push(...templateDifferences.assetsToDiscard);\n            assetsToCopy.push(...templateDifferences.assetsToCopy);\n            result.updatedTemplateIds.push(...templateDifferences.assetsToKeep);\n            splitIdx = assetsToCopy.length;\n        }\n\n        if (shouldUpdateReferences) {\n            // Split the incoming references into IDs and ExternalAssets\n            const { referenceIds, referencesToImport } = data.references?.reduce((acc, cur) => {\n                if (typeof cur === 'string') {\n                    acc.referenceIds.push(cur);\n                } else {\n                    acc.referencesToImport.push(cur);\n                }\n\n                return acc;\n            }, {\n                referenceIds: [],\n                referencesToImport: [],\n            } as { referenceIds: string[], referencesToImport: ExternalAsset[] }) ?? { referenceIds: [], referencesToImport: [] };\n\n            const referenceDifferences = await this._determineAssetDifferences(assignmentId, 'referenceIds', referenceIds);\n            result.assetsToDiscard.push(...referenceDifferences.assetsToDiscard);\n            assetsToCopy.push(...referenceDifferences.assetsToCopy);\n            result.updatedReferenceIds.push(...referenceDifferences.assetsToKeep);\n\n            // If there are any ExternalAssets to import then we need to import them into the materials folder\n            // and store the new asset IDs in the references field\n            if (referencesToImport.length > 0) {\n                materialsPromises.push(async () => {\n                    const importedReferenceAssetIds: string[] = [];\n                    const importResults = await this.importNewReferencesForAssignment(assignmentId, referencesToImport);\n                    importResults.forEach((result) => {\n                        if (result.status === 'fulfilled') {\n                            importedReferenceAssetIds.push(result.value.id);\n                        }\n                    // TODO: Need to handle the case where the import fails\n                    });\n                    result.updatedReferenceIds.push(...importedReferenceAssetIds);\n                });\n            }\n        }\n\n        let clonedAssetIds: string[] = [];\n\n        // Copy all assets at once to avoid multiple API calls\n        materialsPromises.push(async () => {\n            clonedAssetIds = await this._copyAssetsToMaterialsFolder(assignmentId, assetsToCopy);\n        });\n\n        // Upload references and copy templates concurrently\n        await Promise.all(materialsPromises.map((fn) => fn()));\n\n        // Split the result into templates and references\n        const [ clonedTemplates, clonedReferences ] = [ clonedAssetIds.slice(0, splitIdx), clonedAssetIds.slice(splitIdx) ];\n\n        result.updatedTemplateIds.push(...clonedTemplates);\n        result.updatedReferenceIds.push(...clonedReferences);\n\n        return result;\n    }\n\n    /**\n     * Imports each ExternalAsset as a file into the assignment's materials folder\n     * @returns The AdobeAsset objects of the imported files\n     */\n    private async importNewReferencesForAssignment(assignmentId: string, references: ExternalAsset[]): Promise<PromiseSettledResult<AdobeAsset>[]> {\n        const materialsFolder = await  this._getAssignmentMaterialsFolderAsset(assignmentId);\n        return Promise.allSettled(references.map(async (reference) =>\n            materialsFolder.importFile(reference.content, reference.name, reference.mediaType, true)));\n    }\n\n    /**\n     * Function to get a list of StudentAssignmentFiles for a given StudentDirectoryId\n     *\n     * @param {} param Contains paramaters for StudentDirectoryId and order for the list\n     * @returns List of StudentAssignmentFiles\n     * @deprecated Fast follow to improve this function in ACPCEDU-1448\n     * @experimental This function may change and is a work in progress\n     */\n    async getStudentAssignmentFiles({ studentDirectoryId, order }: IGetStudentAssignmentFiles): Promise<StudentAssignmentFile[]> {\n        const asset = await this._core.hostAssetContext.getAssetWithCloudID(studentDirectoryId);\n        const itemList = asset.children?.getList(order || AdobeAssetOrder.default);\n\n        if (!itemList) {\n            return Promise.resolve([]);\n        }\n\n        const mapItems = async (items: AdobeAsset[]) => {\n            return items.map((item) =>  new StudentAssignmentFile(this._core, item));\n        };\n\n        if (itemList.status === AssetListStatus.ReadyFullyLoaded) {\n            return mapItems(itemList.items);\n        }\n\n        return new Promise((resolve) => {\n            const handleFullyLoaded = async () => {\n                const assignmentFiles = await mapItems(itemList.items);\n\n                const session = this._assetPool.createMutationSession<AdobeAsset>();\n                // Update the local cache with the AdobeAsset items that are our files.\n                StudentAssignmentFileUpdater.updateRemoteItems(\n                    session,\n                    itemList.items\n                );\n\n                session.commit();\n\n                itemList.off(LIST_FULLY_LOADED, handleFullyLoaded);\n\n                resolve(assignmentFiles);\n            };\n\n            itemList.on(LIST_FULLY_LOADED, handleFullyLoaded);\n        });\n    }\n\n    /**\n     * Refreshes the classroom codes for the given classroom IDs\n     *\n     * @param classIds list of classroomIds to refresh\n     */\n    @synchronized\n    async refreshClassroomCodes(classIds: string[]): Promise<void> {\n        // Attempt to refresh all codes\n        const results = await Promise.allSettled(classIds.map(id => this._classroomsInterface.refreshClassroomCode(id)));\n\n        // Filter out failing requests\n        // @ts-ignore -- TS can't infer the type of results after filtering. Will be fixed in TS 5.5\n        const classroomsToUpdate = results.filter(result => result.status === 'fulfilled').map(result => result.value);\n\n        // Fetch each classroom so that we have an IRemoteClassroom, update its code to the new one\n        const updatedClassrooms = await Promise.allSettled(classroomsToUpdate.map(async ({ classroomId, classcode }) => {\n            const classroom = await this._classroomsInterface.getClassroom(classroomId);\n            classroom.classCode = classcode;\n            return classroom;\n        }));\n\n        // Filter out any lookups that failed\n        // @ts-ignore -- TS can't infer the type of results after filtering. Will be fixed in TS 5.5\n        const successfullyUpdatedClassrooms = updatedClassrooms.filter(result => result.status === 'fulfilled').map(result => result.value);\n\n        const session = this._classroomPool.createMutationSession<Classroom>();\n        ClassroomUpdater.updateRemoteItems(session, successfullyUpdatedClassrooms);\n        session.commit();\n    }\n\n    /**\n     * @description Deletes classrooms with the given class IDs.\n     *\n     * @param ids and array of classIds or classCodes the interface supports both\n     * @returns a promise that resolves to void\n     */\n    async deleteClassrooms(ids: string | string[]): Promise<void> {\n        if (Array.isArray(ids)) {\n            await Promise.all(ids.map(id => this.deleteClassrooms(id)));\n        } else {\n            const classroom = await this.getClassroomById(ids);\n            if (classroom.isVirtual) {\n                await this._classroomsInterface.deleteVirtualClassroom(ids);\n            } else {\n                await this._classroomsInterface.deleteClassroom(ids);\n            }\n            const session = this._classroomPool.createUpdateSession<Classroom>();\n            session.queueDiscardedItem(classroom);\n            session.commit();\n            // The session doesn't actually remove the item from the pool\n            this._classroomPool.removeLocalItems([ classroom.id! ]);\n        }\n    }\n\n    /** Updates a classroom with new data */\n    async updateClassroom(classroomId: string, data: IClassroomUpdateData): Promise<void> {\n        let updatedClassroomData;\n        const classroom = await this.getClassroomById(classroomId);\n        // Classroom name is required for the update operation\n        // If it is not passed in then we can get it from the pool\n        data.name ??= classroom.name;\n        if (classroom.isVirtual) {\n            updatedClassroomData = await this._classroomsInterface.updateClassroomFromVirtual(classroom.id, data);\n            // Preserve the old original identifier for the class to re-index the existing item under its preferred id\n            updatedClassroomData.virtualId = classroom.id;\n        } else {\n            updatedClassroomData = await this._classroomsInterface.updateClassroom(classroomId, data);\n        }\n\n        const session = this._classroomPool.createMutationSession<Classroom>();\n        ClassroomUpdater.updateRemoteItem(session, this._processRemoteClassroomItem(classroomId, updatedClassroomData));\n        session.commit();\n    }\n\n    private _processRemoteClassroomItem(classroomId: string, remoteClassroom: Partial<IRemoteClassroom>): Partial<IRemoteClassroom> {\n        const cachedClassroom = this._classroomPool.getLocalItemById(classroomId);\n        // Preserve the classroom's old virtual ID if it is set in this session\n        if (cachedClassroom?._virtualId) {\n            remoteClassroom.virtualId = cachedClassroom._virtualId;\n        }\n        return remoteClassroom;\n    }\n\n    /**\n     * Returns the current user's (determined by bearer token of the request) membership status for a classroom\n     *\n     * @param classroomId ID of the classroom to check status of user for\n     * @returns Response including role and status of user\n     */\n    async getClassroomMembership(classroomId: string): Promise<IRemoteMembership> {\n        return this._classroomsInterface.getMembership(classroomId);\n    }\n\n    /**\n     * Blocks a student from a classroom\n     *\n     * @param classroomId Classroom ID to block student from\n     * @param studentId Student ID to block\n     *\n     * @returns a promise that resolves to the response from the server\n     */\n    async blockStudentFromClassroom(classroomId: string, studentId: string): Promise<IRemoteBlockOrRemoveResponse> {\n        return this._classroomsInterface.blockStudent(classroomId, studentId);\n    }\n\n    /**\n     * Unblocks a student from a classroom\n     *\n     * @param classroomId Classroom ID to unblock student from\n     * @param studentId Student ID to unblock\n     *\n     * @returns a promise that resolves to the response from the server\n     */\n    async unblockStudentFromClassroom(classroomId: string, studentId: string): Promise<IRemoteBlockOrRemoveResponse> {\n        return this._classroomsInterface.unblockStudent(classroomId, studentId);\n    }\n\n    /**\n     * Removes a student from a classroom\n     *\n     * @param classroomId Classroom ID to remove student from\n     * @param studentId Student ID to remove\n     *\n     * @returns a promise that resolves to the response from the server\n     */\n    async removeStudentFromClassroom(classroomId: string, studentId: string): Promise<IRemoteBlockOrRemoveResponse> {\n        return this._classroomsInterface.removeStudent(classroomId, studentId);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport SAMEvent from '../core/SAMEvent';\n\nexport const FRAMEIO_AUTHORIZATION_CHANGE = 'frameioAuthorizationChange';\n\nexport default class FrameioAuthorizationChangeEvent extends SAMEvent {\n    constructor() {\n        super(FRAMEIO_AUTHORIZATION_CHANGE);\n    }\n}\n\nexport const SharedFrameioAuthorizationChangeEvent = new FrameioAuthorizationChangeEvent();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport SAMEvent from '../core/SAMEvent';\n\nexport const FRAMEIO_REVIEW_LINKS_CHANGE = 'frameioReviewLinksChange';\n\nexport default class FrameioReviewLinksChangeEvent extends SAMEvent {\n    constructor() {\n        super(FRAMEIO_REVIEW_LINKS_CHANGE);\n    }\n}\n\nexport const SharedFrameioReviewLinksChangeEvent = new FrameioReviewLinksChangeEvent();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport SAMError, { SAMErrorCode } from '../core/SAMError';\nimport InterfaceBase from '../interface/InterfaceBase';\nimport oneTimeWarning from '../utils/oneTimeWarning';\nimport UriTemplate from 'uri-templates';\nimport LinkHeader from 'http-link-header';\nimport { IFetchOptions } from '../core/Environment';\nimport { NotFound } from '../core/Cache';\nimport { millisecondsPerHour, secondsPerHour } from '../core/ObjectUtils';\nimport FrameioContext, { FrameioSourceDocument } from './FrameioContext';\nimport { FRAMEIO_AUTHORIZATION_CHANGE, SharedFrameioAuthorizationChangeEvent } from './FrameioAuthorizationChangeEvent';\nimport { FRAMEIO_REVIEW_LINKS_CHANGE } from './FrameioReviewLinksChangeEvent';\n\n// Consolidate Frame.io links used by FrameioInterface into\n// templated urls\nconst FRAMEIO_API_BASE = 'https://api.frame.io';\nconst FRAMEIO_LINKS = {\n    ME: `${FRAMEIO_API_BASE}/v2/me`,\n    ACCOUNT: `${FRAMEIO_API_BASE}/v2/accounts/{accountId}`,\n    ACCOUNTS: `${FRAMEIO_API_BASE}/v2/accounts?join=collaborator`,\n    TEAMS: `${FRAMEIO_API_BASE}/v2/accounts/{accountId}/teams?include=user_role&role=member`,\n    TEAM: `${FRAMEIO_API_BASE}/v2/teams/{teamId}?include=account`,\n    PROJECT: `${FRAMEIO_API_BASE}/v2/projects/{projectId}?include=string`,\n    PROJECTS: `${FRAMEIO_API_BASE}/v2/teams/{teamId}/projects?filter[archived]`,\n    SHAREDPROJECTS: `${FRAMEIO_API_BASE}/v2/projects/shared?filter[account_id]={accountId}`,\n    REVIEWS: `${FRAMEIO_API_BASE}/v2/projects/{projectId}/review_links`,\n    REVIEW: `${FRAMEIO_API_BASE}/v2/review_links/{reviewLinkId}`,\n    ITEMCREATE: `${FRAMEIO_API_BASE}/v2/review_links/{reviewLinkId}/assets`,\n    ASSETS: `${FRAMEIO_API_BASE}/v2/assets/{assetId}/children?include=cover_asset`,\n    ASSET: `${FRAMEIO_API_BASE}/v2/assets/{assetId}?type=folder&include=cover_asset`,\n    CREATEASSET: `${FRAMEIO_API_BASE}/v2/assets/{parentId}/children`,\n    VERSION: `${FRAMEIO_API_BASE}/v2/assets/{assetId}/version`,\n    CREATECOMMENT: `${FRAMEIO_API_BASE}/v2/assets/{assetId}/comments`,\n    GETCOMMENT: `${FRAMEIO_API_BASE}/v2/comments/{commentId}?include=string`,\n    GETCOMMENTS: `${FRAMEIO_API_BASE}/v2/assets/{assetId}/comments?include=string`,\n    IMPRESSIONS: `${FRAMEIO_API_BASE}/v2/comments/{commentId}/impressions?include=string`,\n    COMMENT: `${FRAMEIO_API_BASE}/v2/comments/{commentId}`,\n    REPLY: `${FRAMEIO_API_BASE}/v2/comments/{commentId}/replies`,\n    GETREPLIES: `${FRAMEIO_API_BASE}/v2/comments/{commentId}/replies?include=replies`,\n    LIKE: `${FRAMEIO_API_BASE}/v2/comments/{commentId}/like`,\n    COMPLETE: `${FRAMEIO_API_BASE}/v2/comments/{commentId}/complete`,\n    FOLDERTREE: `${FRAMEIO_API_BASE}/v2/projects/{projectId}/folder_tree`,\n    ANCESTORS: `${FRAMEIO_API_BASE}/v2/assets/{assetId}/ancestors`,\n    ADOBE_SUSI_USER: `${FRAMEIO_API_BASE}/v2/auth/adobe/method`,\n    ADOBE_SUSI: `${FRAMEIO_API_BASE}/v2/auth/adobe/callback`\n};\n\nfunction fillURLTemplate(url: string, params: any) {\n    // such as fillURLTemplate('v2/accounts/{accountId}', { \"accountId\": \"id-for-account\"})\n    const template = UriTemplate(url);\n    return template.fill(params);\n}\n\nexport interface FrameioNativeAuthenticationInfo {\n    adobeId: string;\n    ccUserId: string;\n    productKey: string;\n    xFrameioClient: string;\n\n    // The native code ignores the remaining properties when (!frameioToken),\n    // and it requires them all when (frameioToken)\n    // !!@ Consider grouping them in an interface, so this all or nothing\n    // aspect could be captured by the API.\n    frameioToken?: string;\n    frameioRefreshToken?: string;\n    frameioTokenExpires?: string;\n    frameioUserId?: string;\n    frameioLastRefresh?: string;\n}\n\nexport enum IFrameioAuthenticationStatus {\n    authLoggedOut,\n    authLoggedIn,\n    authExpired\n}\n\nexport interface IFrameioFileHandle {\n    close(): Promise<void>;\n    size(): number;\n    read(srcOffset?: number, destBuffer?: ArrayBuffer): Promise<ArrayBuffer>;\n}\n\n// Some Frame.io methods are implemented with native code\nexport interface IFrameioNativeContext {\n    authenticateUser(info: FrameioNativeAuthenticationInfo): Promise<string>;\n    deauthenticateUser(userid: string): Promise<void>;\n    isUserAuthenticated(userid: string): boolean;\n    authenticationStatus(userid: string): IFrameioAuthenticationStatus;\n    authenticationInfo(): FrameioNativeAuthenticationInfo;\n    getToken(forceRefresh?: boolean): Promise<string>;\n    openFile(filename: string): IFrameioFileHandle;\n    addEventListener(name: string, listener: any): void;\n    removeEventListener(name: string, listener: any): void;\n    dispatchReviewLinksChangeEvent(json: string): void;\n}\n\n// See https://developer.frame.io/api/reference/operation/getMe/\n//  for schema of a user\nexport interface IFrameioUserResponse {\n    _type: string;\n    account_id: string;\n    bio: any;\n    context: any;\n    deleted_at: any; // ISO Date\n    digest_frequency: string;\n    email: string;\n    email_confirm_by: any;\n    email_preferences: any;\n    features_seen: any;\n    first_login_at: string;\n    from_google: boolean;\n    id: string;\n    image_128: string;\n    image_256: string;\n    image_32: string;\n    image_64: string;\n    inserted_at: string;\n    joined_via: string;\n    last_seen: string;\n    location: any;\n    mfa_enforced_at: string;\n    name: string;\n    next_digest_date: string;\n    phone: any;\n    profile_image: string;\n    profile_image_original: any;\n    roles: any;\n    timezone_value: string;\n    updated_at: string;\n    upload_url: string;\n    user_default_color: string;\n    user_hash: string;\n}\n\n// See https://developer.frame.io/api/reference/operation/getAccount/\n//  for schema of an account\nexport interface IFrameioAccountResponse {\n    _type: string;\n    account_default_color: string;\n    account_settings: any;\n    account_members: IFrameioAccountMemberResponse[];\n    archived_storage: number;\n    available_features: any;\n    billing_emails: string;\n    city: string;\n    collaborator_count: number;\n    collaborator_role_count: number;\n    company_address: string;\n    company_name: string;\n    country: string;\n    deleted_at: string;\n    delinquent_at: string;\n    display_name: string;\n    drm_configuration_id: string;\n    duration: number;\n    file_count: number;\n    folder_count: number;\n    frames: number;\n    id: string;\n    image: string;\n    image_128: string;\n    image_256: string;\n    image_32: string;\n    image_64: string;\n    inserted_at: string;\n    invoice_emails: string[];\n    lifetime_file_count: number;\n    line1: string;\n    line2: string;\n    locked_at: string;\n    member_count: number;\n    mfa_enforced_at: string;\n    owner: IFrameioUserResponse\n    owner_id: string;\n    plan: IFrameioPlanResponse;\n    postal_code: string;\n    project_count: number;\n    state: string;\n    storage: number;\n    subscription: IFrameioSubscriptionResponse;\n    team_count: number;\n    teams: IFrameioTeamResponse[];\n    unpaid_at: string;\n    updated_at: string;\n    upload_url: string;\n    user_count: number;\n    vat: string;\n    version: number;\n    watermark: IFrameioWatermarkResponse;\n}\n\n// See https://developer.frame.io/api/reference/operation/getTeam/\n//  for schema of a team\nexport interface IFrameioTeamResponse {\n    account_id: string,\n    disable_sbwm_internally: boolean,\n    creator_id: string,\n    storage: number,\n    default_font_color: string,\n    access: FrameioTeamAccess,\n    font_color: string,\n    // @TODO replace any\n    user_role: any,\n    file_count: number,\n    // @TODO replace any\n    default_session_watermark_template: any;\n    link: string;\n    asset_lifecycle_policy: number;\n    upload_url: string;\n    // @TODO replace any\n    admin_only_actions: any;\n    deleted_at: string,\n    default_background_color: string,\n    storage_limit: number,\n    location: string,\n    name: string,\n    default_color: string,\n    // @TODO replace any\n    slack_webhook: any,\n    image_64: string,\n    archived_storage: number,\n    image_128: string,\n    solo: false,\n    // @TODO replace any\n    account: any,\n    image_32: string,\n    inserted_at: string,\n    updated_at: string,\n    project_count: number,\n    duration: number,\n    team_image: string,\n    collaborator_count: number,\n    bio: string,\n    // @TODO replace any\n    watermark: any;\n    color: string;\n    // @TODO replace any\n    email_branding: any;\n    folder_count: number;\n    dark_theme: boolean;\n    id: string;\n    member_limit: number;\n    frames: number;\n    member_count: number;\n    image_256: string;\n    background_color: string;\n    _type: string;\n}\n\n// See https://developer.frame.io/api/reference/operation/getProject/\n//  for schema of a project\nexport interface IFrameioProjectResponse {\n    _type: string;\n    archive_status: string;\n    archived_at: string;\n    archived_file_count: number;\n    archived_storage: number;\n    collaborator_count: number;\n    deleted_at: string;\n    description: string;\n    file_count: number;\n    folder_count: number;\n    id: string;\n    ignore_archive: boolean;\n    inserted_at: string;\n    invite_url: string;\n    name: string;\n    owner_id: string;\n    private: boolean;\n    project_preferences: any;\n    read_only: boolean;\n    root_asset: any; /* IFrameioAssetResponse */ /* folder */\n    root_asset_id: string;\n    shared: boolean;\n    storage: number;\n    team: IFrameioTeamResponse;\n    team_id: string;\n    updated_at: string;\n    user_permissions: any;\n    user_preferences: any;\n    watermark: any;\n}\n\n// See https://developer.frame.io/api/reference/operation/reviewLinkGet/\n//  for schema of a review\nexport interface IFrameioReviewLinkResponse {\n    access_control: Partial<IFrameioAccessControlResponse>;\n    allow_approvals: boolean;\n    available_features: any;\n    bundle_count: number;\n    current_version_only: boolean;\n    deleted_at: string;\n    enable_comments: boolean;\n    enable_downloading: boolean;\n    expires_at: string;\n    folder_item_count: number;\n    has_password: boolean;\n    id: string;\n    inserted_at: string;\n    is_active: boolean;\n    is_autoplay: boolean;\n    item_count: number;\n    items: any; /* Array<ReviewLinkItem> */\n    name: string;\n    notify_on_view: boolean;\n    owner: any; /* IFrameioUserResponse */\n    owner_id: string;\n    password: string;\n    project: any /* IFrameioProjectResponse */\n    project_id: string;\n    reviewer_count: number;\n    short_url: string;\n    team: any /* IFrameioTeamResponse */\n    updated_at: string;\n    view_count: number;\n    _type: string;\n\n    // these come from the Review Service, and not Frame.io\n    'frameio:artifactId': string;\n    'repo:etag': string;\n}\n\n\n// See https://developer.frame.io/api/reference/operation/getAsset/\n//  for schema of an asset - type is one of { file, folder, version_stack, bundle }\nexport interface IFrameioAssetResponse {\n    _type: string;\n    account_id: string;\n    allow_original_playback: boolean;\n    archive_from: string;\n    asset_type: string;\n    cover_asset: any;\n    comment_count: number;\n    cover_asset_id: string;\n    creator: IFrameioUserResponse;\n    creator_id: string;\n    deleted_at: string;\n    filesize: number;\n    filetype: string;\n    frames: number;\n    hard_deleted_at: string;\n    id: string;\n    index: number;\n    inserted_at: string;\n    is_hls_required: boolean;\n    is_session_watermarked: boolean;\n    item_count: number;\n    label: string;\n    metadata: any;\n    metadata_flags: any;\n    name: string;\n    original: string;\n    parent_id: string | null;\n    project_id: string;\n    properties: any; /* accepts arbitrary key/value pairs ... can we use this ? */\n    required_transcodes: any;\n    team_id: string;\n    type: string;\n    updated_at: string;\n    uploaded_at: string;\n    upload_urls: string[];\n    user_permissions: any;\n    versions: number;\n    view_count: number;\n}\n\nexport interface IFrameioCommentResponse {\n    _type: string;\n    annotation: string;\n    anonymous_user_id: string;\n    aspect_ratio: number;\n    asset_id: string;\n    comment_entities: any; // [] ??\n    completed: boolean;\n    completed_at: string;\n    completer_id: string;\n    deleted_at: string;\n    device_channel_input_id: string;\n    duration: string;\n    fov: number;\n    frame: string;\n    has_replies: boolean;\n    id: string;\n    inserted_at: string;\n    like_count: number;\n    owner: IFrameioUserResponse;\n    owner_id: string;\n    page: string;\n    parent_id: string;\n    pitch: number;\n    private: boolean;\n    read_count: number;\n    review_link_id: string;\n    target_asset_id: string;\n    text: string;\n    text_edited_at: string;\n    thumb: any;\n    timestamp: number;\n    timestamp_microseconds: number;\n    updated_at: string;\n    yaw: any;\n}\n\nexport interface IFrameioLikeResponse {\n    _type: string;\n    anonymous_user_id: string;\n    comment: IFrameioCommentResponse;\n    comment_id: string;\n    deleted_at: string;\n    id: string;\n    inserted_at: string;\n    type: string;\n    updated_at: string;\n    user_id: string;\n}\n\n\nexport interface IFrameioImpressionResponse {\n    assetId: string;\n    count: number;\n    deleted_at: string;\n    id: string;\n    inserted_at: string;\n    review_link_id: string;\n    type: string;\n    updated_at: string;\n    user: IFrameioUserResponse;\n    user_id: string;\n}\n\nexport interface IFrameioFolderTreeFolderResponse {\n    id: string;\n    name: string;\n    parent_id: string | null;\n}\n\nexport interface IFrameioOwnerResponse {\n    email: string;\n}\n\n// Response format from Frame.io's SUSI(Single User Sign In) availability.\nexport interface IFrameioAdobeSusiUserResponse {\n    _type: string;\n    exists: boolean;\n    id: string | null;\n    method: string;\n    restriction: string | null;\n}\n\n// Response format from Frame.io's SUSI(Single User Sign In) account information\n// and authentication. If the user's IMS token does not already have an existing\n// Frame.io account, it will create it at the same time. The auth info will be\n// in the response headers rather than in the body.\nexport interface IFrameioAdobeSusiResponse {\n    updated_at: Date | null,\n    joined_via: string,\n    inserted_at: Date | null,\n    profile_image_original: string | null,\n    id: string,\n    location: string,\n    image_128: string | null,\n    name: string | null,\n    last_seen: Date | null,\n    email_confirm_by: any | null,\n    phone: string | null,\n    user_hash: string,\n    email: string,\n    roles: string | null,\n    features_seen: string | null,\n    account_id: string,\n    timezone_value: string,\n    _type: string,\n    deleted_at: Date | null,\n    image_32: string | null,\n    bio: string | null,\n    image_64: string | null,\n    user_default_color: string,\n    profile_image: string | null,\n    from_google: boolean,\n    digest_frequency: string,\n    first_login_at: Date | null,\n    email_preferences: string | null,\n    image_256: string | null,\n    mfa_enforced_at: Date | null,\n    from_adobe: boolean,\n    next_digest_date: Date | null,\n    context: any | null,\n    upload_url: string | null,\n    highest_account_role: string | null\n}\n\nexport type FrameioTeamAccess = 'private' | 'public' | 'restricted';\n\n/**\n * Optional parameter to FrameioInterface.authenticate.\n *\n * When using a Frame.io developer token,\n * set frameioToken with the developer token,\n * and leave the rest undefined.\n *\n * When using your own authentication,\n * all values are expected.\n *\n * When relying on the native authentication\n * provided by SAM, omit the optional parameter\n * to authenticate().\n */\nexport interface FrameioAuthenticationInfo {\n    frameioToken: string;\n    frameioRefreshToken?: string;\n    frameioTokenExpires?: string;\n    frameioUserId?: string;\n    frameioLastRefresh?: string;\n    useAdobeSusi?: boolean;\n}\n\n// Info from Frame.io relating to the Adobe SUSI (Single User Sign In) user.\nexport interface FrameioAdobeSusiInfo {\n    userExists: boolean;\n    susiAvailable: boolean;\n    // Frame.io provides the restriction string values as \"admin-block\",\n    // \"region-block\" (+ code: <code>), or \"unspecified\"\n    restriction?: string;\n}\n\ninterface IFrameioAccessControlResponse {\n    id: string;\n    invite_only: boolean;\n}\n\ninterface IFrameioPlanResponse {\n}\n\ninterface IFrameioWatermarkResponse {\n}\n\ninterface IFrameioSubscriptionResponse {\n}\n\ninterface IFrameioAccountMemberResponse {\n}\n\nexport interface FrameioReviewLinksChangeEventParam {\n    source: FrameioSourceDocument;\n    reviewLink: Partial<IFrameioReviewLinkResponse>;\n}\n\n// Values for credential caching.\nconst frameioCredentialsCacheKey = 'FRAMEIO_CREDENTIALS_';\n// Local cache expires in 14 days (in ms)\nconst frameioCredentialsTTL = millisecondsPerHour * (24 * 14);\n// Refresh token expiration (in second)\nconst frameioRefreshTokenDuration = secondsPerHour * (24 * 15);\n\n// An Interface, in this context, is the RESTful interface implemented\n// by a service, so most methods of FrameioInterface wrap an HTTP\n// Request to Frame.io, and all requests we make to Frame.io should\n// go through some method of FrameioInterface.\n\nexport default class FrameioInterface extends InterfaceBase {\n    private _frameioContext: FrameioContext;\n    private _frameioClientId: string;\n    private _nativeContext: IFrameioNativeContext | undefined;\n    private _authenticationInfo: FrameioAuthenticationInfo | undefined;\n\n    constructor(ctx: FrameioContext) {\n        super(ctx._core);\n        this._frameioContext = ctx;\n\n        // Set the Frame.io client ID used in request analytics.\n        const { PRODUCT_ID } = this._core._environment.getValue('HOST_PRODUCT_DATA');\n        const frameioClient = 'adobe+' + PRODUCT_ID;\n        this._frameioClientId = frameioClient.toLowerCase();\n    }\n\n    /**\n     * We use native code to login to Frame.io,\n     * and authentication is specific to their service,\n     * so we'll only access nativeContext methods\n     * from FrameioInterface.\n     */\n\n    //----------------------------------------------------------------\n    // Limit FrameioInterface to be the only client of IFrameioNativeContext,\n    // the interface implementing the native support for frame.io.\n    private get nativeContext(): IFrameioNativeContext {\n        // @ts-ignore\n        const acplModel: any = (typeof window !== 'undefined') && window.acplModel;\n\n        if (!this._nativeContext && acplModel) {\n            const workflows = acplModel.Workflows;\n\n            if (workflows.createShareForReviewWorkflow) {\n                const shareForReviewWorkflow = workflows.createShareForReviewWorkflow(acplModel.applicationAssetContext);\n                this._nativeContext = shareForReviewWorkflow.getFrameioAssetContext();\n\n                if (this._nativeContext) {\n                    const self = this;\n\n                    this._nativeContext.addEventListener(FRAMEIO_REVIEW_LINKS_CHANGE,  (json: string) => {\n                        self._frameioContext._handleReviewLinksChangeEvent(json);\n                    });\n\n                    this._nativeContext.addEventListener(FRAMEIO_AUTHORIZATION_CHANGE, async () => {\n                        const nativeAuthInfo = self.nativeContext.authenticationInfo();\n\n                        if (nativeAuthInfo.frameioToken) {\n                            // logged in, or refreshed\n                            await self._cacheCredentials(JSON.stringify(nativeAuthInfo));\n\n                            // when the id changes, the context will clear user data\n                            self._frameioContext._updateCurrentUserId(nativeAuthInfo.frameioUserId);\n                        } else {\n                            // logged out\n                            await self._core._environment.cache.deleteItem(self._cachedCredentialsId());\n\n                            // clear user specific information.\n                            self._frameioContext._updateCurrentUserId(undefined);\n                        }\n\n                        self._frameioContext.dispatch(SharedFrameioAuthorizationChangeEvent);\n                    });\n                }\n\n            } else {\n                oneTimeWarning('FrameioInterface.nativeContext',\n                    'Share for Review workflows are not enabled for this application');\n            }\n        }\n\n        if (!this._nativeContext) {\n            oneTimeWarning('FrameioInterface.nativeContext',\n                'native Frameio context does not exist, web/browser mode is utilized for testing only');\n        }\n        return this._nativeContext!;\n    }\n\n    // ID value to use as a key for authentication credentials.\n    private get _authenticationId(): string {\n        return this.adobeId;\n    }\n\n    private _cachedCredentialsId(): string {\n        return frameioCredentialsCacheKey + this._authenticationId;\n    }\n\n    private _getRefreshTokenExpiration(lastRefresh: any): number {\n        const lastRefreshVal = parseInt(lastRefresh);\n\n        if (lastRefreshVal) {\n            return lastRefreshVal + frameioRefreshTokenDuration;\n        }\n        return 0;\n    }\n\n    // Retrieve the cached string.\n    private async _getCachedCredentials(): Promise<string> {\n        const credentialsId = this._cachedCredentialsId();\n        const existingCredentials = await this._core._environment.cache.getItem(credentialsId);\n        if (existingCredentials !== NotFound) {\n            return existingCredentials;\n        }\n        return '';\n    }\n\n    // Persist the credenital string in the browser cache. Eventually this\n    // may be transfered to the native side and persisted in the device keychain.\n    private async _cacheCredentials(credentials: string): Promise<void> {\n        return this._core._environment.cache.setItem(\n            this._cachedCredentialsId(),\n            credentials,\n            frameioCredentialsTTL\n        );\n    }\n\n    public get adobeId(): string {\n        // This is expected to return the Adobe user GUID.\n        return this._core._environment.getValue('USER_ID');\n    }\n\n    public get ccUserId(): string {\n        // This is expected to return the Adobe CC ID (email address use to login)\n        return this._core._environment.getValue('USER_EMAIL') || '';\n    }\n\n    public get imsToken(): string {\n        return this._core._environment.getValue('ACCESS_TOKEN');\n    }\n\n    public get xFrameioClient(): string {\n        return this._frameioClientId;\n    }\n\n    public get productKey(): string {\n        const { PRODUCT_ID } = this._core._environment.getValue('HOST_PRODUCT_DATA');\n\n        // The Frame.io native module expect the product code to be the 4CC\n        // client product identifier.  However, SAM.js seems to use the whole\n        // product name, so we need to do a conversion here.\n        // Currently only Photoshop(PHXS), Illustrator(ILST), InDesign(IDSN) and\n        // the `dev` key are supported.\n        if (PRODUCT_ID.includes('Photoshop')) {\n            return 'PHXS';\n        } else if (PRODUCT_ID.includes('Illustrator')) {\n            return 'ILST';\n        } else if (PRODUCT_ID.includes('InDesign')) {\n            return 'IDSN';\n        } else if (PRODUCT_ID.includes('SAMJSDemoApp')) {\n            return 'dev';\n        } else if (PRODUCT_ID.includes('/')) {\n            // According to the SAM.js comments, this should be passed in as\n            // client name/version - but we only need the client name, so drop\n            // the rest. This handles the case where the client may pass in the\n            // 4CC code with the version (i.e. 'PHXS/25.0') instead of the full\n            // name handled above.\n            return PRODUCT_ID.slice(0, PRODUCT_ID.indexOf('/'));\n        }\n        // If its an unsupported or demo application, then default to dev key.\n        return 'dev';\n    }\n\n    public async checkForCachedCredentials(): Promise<IFrameioAuthenticationStatus> {\n        // Quick check if we have already set credentials at least once\n        // that have not expired.\n        const cachedCredentials = await this._getCachedCredentials();\n\n        if (cachedCredentials !== '') {\n            const nativeContext: IFrameioNativeContext = this.nativeContext;\n            const parsedCredentials = JSON.parse(cachedCredentials);\n            const refreshExpiration = this._getRefreshTokenExpiration(parsedCredentials.frameioLastRefresh);\n\n            if (refreshExpiration) {\n                const nowSec = Math.floor(Date.now() / 1000); // ms -> s\n                const expired = refreshExpiration - nowSec;\n\n                if (expired <= 0) {\n                    return IFrameioAuthenticationStatus.authExpired;\n                }\n            }\n            // Always use the current app version no matter what version was cached.\n            parsedCredentials.xFrameioClient = this.xFrameioClient;\n            if (nativeContext) {\n                // Not expired refresh so auto login.\n                const token = await nativeContext.authenticateUser(parsedCredentials);\n\n                // Check to see if there was a refresh on the token, and refresh\n                // the cached credentials if there was.\n                if (token !== parsedCredentials.token) {\n                    const nativeAuthInfo = nativeContext.authenticationInfo();\n                    await this._cacheCredentials(JSON.stringify(nativeAuthInfo));\n                    return IFrameioAuthenticationStatus.authLoggedIn;\n                }\n            }\n            // else not supported for web so issue logout.\n        }\n        return IFrameioAuthenticationStatus.authLoggedOut;\n    }\n\n    public async isAuthenticated(): Promise<boolean> {\n        const authStatus = await this.authenticationStatus();\n        return (authStatus === IFrameioAuthenticationStatus.authLoggedIn);\n    }\n\n    public async authenticationStatus(): Promise<IFrameioAuthenticationStatus> {\n        const nativeContext: IFrameioNativeContext = this.nativeContext;\n\n        if (nativeContext) {\n            let nativeAuthStatus =  nativeContext.authenticationStatus(this._authenticationId);\n\n\n            if (nativeAuthStatus === IFrameioAuthenticationStatus.authLoggedOut) {\n                // If the state is logged out - check for previous cached info.\n                nativeAuthStatus = await this.checkForCachedCredentials();\n            }\n            return nativeAuthStatus;\n        }\n        if (this._authenticationInfo?.frameioLastRefresh) {\n            // Check for the last refresh expiration.  Frame.io refresh tokens\n            // expire in 15 day, so set refresh an hour before.\n            const kExpiresHours = (15 * 24) - 1;\n            const now = new Date();\n            const lastRefresh = new Date(0);\n            lastRefresh.setUTCSeconds(parseInt(this._authenticationInfo?.frameioLastRefresh));\n            // The `valueOf` looks weird here but it is needed to avoid the Typescript\n            // error of: \"The left-hand side of an arithmetic operation must be of type\n            //   'any', 'number', 'bigint' or an enum type.\"\n            const deltaT = Math.abs(now.valueOf() - lastRefresh.valueOf()) / 36e5;\n\n            if (deltaT >= kExpiresHours) {\n                return IFrameioAuthenticationStatus.authExpired;\n            }\n            return (this._authenticationInfo?.frameioToken ? IFrameioAuthenticationStatus.authLoggedIn : IFrameioAuthenticationStatus.authLoggedOut);\n        }\n        // If auth refresh is not set - assume logged out.\n        return IFrameioAuthenticationStatus.authLoggedOut;\n    }\n\n    public async getToken(): Promise<string> {\n        const nativeContext: IFrameioNativeContext = this.nativeContext;\n\n        if (nativeContext) {\n            // The native code caches the token and refreshes it\n            // when it's stale, so don't persistently store the\n            // token in javascript as it will break the refresh.\n            return await nativeContext.getToken();\n        }\n        return this._authenticationInfo?.frameioToken || '';\n    }\n\n    // Execute a force refresh of the authentication token.\n    public async refreshToken(): Promise<string> {\n        const nativeContext: IFrameioNativeContext = this.nativeContext;\n\n        if (nativeContext) {\n            // The native code caches the token and refreshes it\n            // when it's stale, so don't persistently store the\n            // token in javascript as it will break the refresh.\n            const token = await nativeContext.getToken(true);\n            // After refreshing to token, the save the new info to the store.\n            const nativeAuthInfo = nativeContext.authenticationInfo();\n            if (token === nativeAuthInfo.frameioToken) {\n                await this._cacheCredentials(JSON.stringify(nativeAuthInfo));\n            }\n            return token;\n        }\n        // not supported for web based, so only return what we currently have.\n        return this._authenticationInfo?.frameioToken || '';\n    }\n\n    public async authenticate(info?: FrameioAuthenticationInfo): Promise<string> {\n        const nativeContext: IFrameioNativeContext = this.nativeContext;\n\n        if (nativeContext) {\n            const adobeId = this.adobeId;\n            const ccUserId = this.ccUserId;\n            const productKey = this.productKey;\n            const xFrameioClient = this.xFrameioClient;\n\n            if (!nativeContext.isUserAuthenticated(this._authenticationId)) {\n                const nativeInfo: FrameioNativeAuthenticationInfo = {\n                    adobeId,\n                    ccUserId,\n                    productKey,\n                    xFrameioClient,\n                };\n\n                if (info !== undefined) {\n                    nativeInfo.frameioToken = info.frameioToken;\n                    // non-required parameters\n                    nativeInfo.frameioRefreshToken = info?.frameioRefreshToken || undefined;\n                    nativeInfo.frameioTokenExpires = info?.frameioTokenExpires || undefined;\n                    nativeInfo.frameioUserId = info?.frameioUserId || undefined;\n                    nativeInfo.frameioLastRefresh = info?.frameioLastRefresh || undefined;\n                }\n                // Removing the following block for now as PM has decided they dont want to have\n                // single sign on for the moment as to allow the user to select login account rather\n                // than limiting it to the Adobe associated account.  This is subject to change and\n                // so its better to leave the SUSI block here for the time being.\n                // } else {\n                //     // check for SUSI availability.\n                //     const susiInfo = await this.getAdobeSusiInfo();\n\n                //     if (susiInfo.susiAvailable) {\n                //         const susiAuthInfo = await this.authenticateAdobeSusi();\n\n                //         nativeInfo.frameioToken = susiAuthInfo.frameioToken;\n                //         // non-required parameters\n                //         nativeInfo.frameioRefreshToken = susiAuthInfo?.frameioRefreshToken || undefined;\n                //         nativeInfo.frameioTokenExpires = susiAuthInfo?.frameioTokenExpires || undefined;\n                //         nativeInfo.frameioUserId = susiAuthInfo?.frameioUserId || undefined;\n                //         nativeInfo.frameioLastRefresh = susiAuthInfo?.frameioLastRefresh || undefined;\n                //     }\n                // }\n                const token = await nativeContext.authenticateUser(nativeInfo);\n\n                if (token !== '') {\n                    const nativeAuthInfo = nativeContext.authenticationInfo();\n                    await this._cacheCredentials(JSON.stringify(nativeAuthInfo));\n                }\n                return token;\n            }\n        } else {\n            this._authenticationInfo = info || undefined;\n        }\n        return await this.getToken();\n    }\n\n    public async deauthenticate(): Promise<void> {\n        this._authenticationInfo = undefined;\n        await this._core._environment.cache.deleteItem(this._cachedCredentialsId());\n        const nativeContext: IFrameioNativeContext = this.nativeContext;\n\n        if (nativeContext) {\n            await nativeContext.deauthenticateUser(this._authenticationId);\n        }\n        return;\n    }\n\n    public async openFile(filename: string) {\n        const nativeContext: IFrameioNativeContext = this.nativeContext;\n\n        if (nativeContext) {\n            return await nativeContext.openFile(filename);\n        }\n        throw SAMError.create(SAMErrorCode.UNSUPPORTED,\n            'Method is not supported in browser _environment.');\n    }\n\n    // end of IFrameioNativeContext\n    //----------------------------------------------------------------\n\n    public dispatchReviewLinksChangeEvent(json: string) {\n        const nativeContext: IFrameioNativeContext = this.nativeContext;\n\n        if (!nativeContext) {\n            throw SAMError.create(SAMErrorCode.UNSUPPORTED,\n                'Method is not supported in browser _environment.');\n        }\n\n        nativeContext.dispatchReviewLinksChangeEvent(json);\n    }\n\n    // Methods related to using Adobe Single User Sign In (SUSI)\n    public async getAdobeSusiInfo(): Promise<FrameioAdobeSusiInfo> {\n        const respJson = await this._adobeSusiUserRequest();\n        const susiInfo: FrameioAdobeSusiInfo = {\n            userExists: respJson.exists,\n            susiAvailable: (respJson.method === 'adobe'),\n            restriction: respJson.restriction || undefined\n        };\n        return susiInfo;\n    }\n\n    public async authenticateAdobeSusi(): Promise<FrameioAuthenticationInfo> {\n        const authInfo = await this._adobeSusiRequest();\n        return authInfo;\n    }\n\n    private async _adobeSusiUserRequest(): Promise<IFrameioAdobeSusiUserResponse> {\n        const response = await this._doPost(\n            FRAMEIO_LINKS.ADOBE_SUSI_USER,\n            { 'Content-Type': 'application/json' },\n            JSON.stringify({ access_token: this.imsToken }),\n            [ 200 ]\n        );\n        return response.json();\n    }\n\n    private async _adobeSusiRequest(): Promise<FrameioAuthenticationInfo> {\n        const response = await this._doPost(\n            FRAMEIO_LINKS.ADOBE_SUSI,\n            { 'Content-Type': 'application/json' },\n            JSON.stringify({ access_token: this.imsToken }),\n            [ 200 ]\n        );\n        const respHeaders = response.headers;\n        const respBody = await response.json();\n        const token = respHeaders.get('authorization');\n        const refreshToken = respHeaders.get('x-refresh-token');\n        const tokenExpires = respHeaders.get('x-expires');\n        const authInfo: FrameioAuthenticationInfo = {\n            frameioToken: token ? token.replace('Bearer ', '') : '',\n            frameioRefreshToken: refreshToken || undefined,\n            frameioTokenExpires: tokenExpires || undefined,\n            frameioUserId: respBody.id || undefined,\n            frameioLastRefresh: Date.now().toString(),\n            useAdobeSusi: true\n        };\n        return authInfo;\n    }\n\n    //----------------------------------------------------------------\n    // InterfaceBase._fetch() lets subclasses adjust the fetch options\n    // by calling _getFetchOptionOverrides().\n    //\n    // FrameioInterface specifies noOtherHeaders=true to block ACP\n    // specific headers, such as _fetch() injecting it's own\n    // ACP specific authorization token. Instead, we specify\n    // the Frameio authorization token\n    protected  async _getFetchOptionOverrides(\n        href: string,\n        fetchOptions: IFetchOptions\n    ): Promise<{ href: string, options: IFetchOptions}> {\n        const token = await this.getToken();\n        return {\n            href,\n            options: {\n                ...fetchOptions,\n                headers: {\n                    ...fetchOptions.headers,\n                    // Override Environment.fetch default auth header\n                    'authorization': `Bearer ${token}`,\n                    'x-frameio-client': this.xFrameioClient\n                },\n                // Do not allow Environment.fetch to supply its default headers\n                noOtherHeaders: true\n            }\n        };\n    }\n\n    // Frameio endpoints that return Array<>'s can be paginated:\n    //   https://developer.frame.io/docs/getting-started/key-concepts#h2-section-pagination\n    //   NOTE: The default page size is 50.\n    //\n    // _getMultiPageResponse() will read each page in the response,\n    // and return the result of combining them into one large array.\n    private async _getMultiPageResponse(href: string) {\n        let result: any[] = [];\n\n        const nextPageUri = (response: any) => {\n            const linkHeader = response && response.headers && response.headers.get('Link');\n            const link = linkHeader && LinkHeader.parse(linkHeader);\n            const ref = link && link.has('rel', 'next') && link.get('rel', 'next');\n            const uri = ref && ref[0] && ref[0].uri;\n\n            // For some reason, the link headers are specifying http,\n            // but our requests fail with 403 unless we use https.\n            return uri && uri.replace('http:', 'https:');\n        };\n\n        const readPage = async (url: string): Promise<any> => {\n            const response = await this._doGet(url);\n            const json = await response.json();\n\n            const next = nextPageUri(response);\n\n            // Accumulate the pages in result\n            result = result.concat(json);\n\n            // Use tail recursion to read the next page, or return\n            // the final result if there are no more pages.\n            return next ? readPage(next) : result;\n        };\n\n        return readPage(href);\n    }\n    //\n    //----------------------------------------------------------------\n\n    // See https://developer.frame.io/api/reference/operation/getMe/\n    public async getCurrentUser(): Promise<IFrameioUserResponse> {\n        return this._getResponse(\n            FRAMEIO_LINKS.ME\n        );\n    }\n\n    // See https://developer.frame.io/api/reference/operation/getAccount/\n    public async getAccount(accountId: string): Promise<IFrameioAccountResponse> {\n        return this._getResponse(\n            fillURLTemplate(FRAMEIO_LINKS.ACCOUNT, { accountId })\n        );\n    }\n\n    // See https://developer.frame.io/api/reference/operation/getAccounts/\n    public async getAccounts(): Promise<Array<IFrameioAccountResponse>> {\n        return this._getMultiPageResponse(\n            FRAMEIO_LINKS.ACCOUNTS\n        );\n    }\n\n    // See https://developer.frame.io/api/reference/operation/getTeamsByAccount/\n    public async getTeams(accountId: string): Promise<Array<IFrameioTeamResponse>> {\n        return this._getMultiPageResponse(\n            fillURLTemplate(FRAMEIO_LINKS.TEAMS, { accountId })\n        );\n    }\n\n    // See https://developer.frame.io/api/reference/operation/getTeam/\n    public async getTeam(teamId: string): Promise<IFrameioTeamResponse> {\n        return this._getResponse(\n            fillURLTemplate(FRAMEIO_LINKS.TEAM, { teamId })\n        );\n    }\n\n    // See https://developer.frame.io/api/reference/operation/getProject/\n    public async getProject(projectId: string): Promise<IFrameioProjectResponse> {\n        return this._getResponse(\n            fillURLTemplate(FRAMEIO_LINKS.PROJECT, { projectId })\n        );\n    }\n\n    // See https://developer.frame.io/api/reference/operation/getProjectsByTeam/\n    public async getProjects(teamId: string): Promise<Array<IFrameioProjectResponse>> {\n        return this._getMultiPageResponse(\n            fillURLTemplate(FRAMEIO_LINKS.PROJECTS, { teamId })\n        );\n    }\n\n    // See https://developer.frame.io/api/reference/operation/getSharedProjects/\n    // NOTE: Using filter[account_id]={accountId} to restrict results to a specific account\n    public async getSharedProjects(accountId: string): Promise<Array<IFrameioProjectResponse>> {\n        return this._getMultiPageResponse(\n            fillURLTemplate(FRAMEIO_LINKS.SHAREDPROJECTS, { accountId })\n        );\n    }\n\n    // See https://developer.frame.io/api/reference/operation/reviewLinksList/\n    public async getReviewLinks(projectId: string): Promise<Array<IFrameioReviewLinkResponse>> {\n        return this._getMultiPageResponse(\n            fillURLTemplate(FRAMEIO_LINKS.REVIEWS, { projectId })\n        );\n    }\n\n    // See https://developer.frame.io/api/reference/operation/reviewLinkGet/\n    public async getReviewLink(reviewLinkId: string): Promise<IFrameioReviewLinkResponse> {\n        return this._getResponse(\n            fillURLTemplate(FRAMEIO_LINKS.REVIEW, { reviewLinkId })\n        );\n    }\n\n    // See https://developer.frame.io/api/reference/operation/reviewLinkCreate/\n    public async createReviewLink(projectId: string, displayName: string): Promise<IFrameioReviewLinkResponse> {\n        const response = await this._doPost(\n            fillURLTemplate(FRAMEIO_LINKS.REVIEWS, { projectId }),\n            { 'Content-Type': 'application/json' },\n            JSON.stringify({ name: displayName }),\n            [ 200 ]\n        );\n\n        return response.json();\n    }\n\n    // See https://developer.frame.io/api/reference/operation/createAsset/\n    public async createFolder(parentId: string, displayName: string): Promise<IFrameioAssetResponse> {\n        const response = await this._doPost(\n            fillURLTemplate(FRAMEIO_LINKS.CREATEASSET, { parentId }),\n            { 'Content-Type': 'application/json' },\n            JSON.stringify({ name: displayName, type: 'folder' }),\n            [ 200 ]\n        );\n\n        return response.json();\n    }\n\n    // See https://developer.frame.io/api/reference/operation/createAsset/\n    // See also https://developer.frame.io/docs/workflows-assets/uploading-assets\n    public async createFile(parentId: string, displayName: string, fileSize: number, mimeType: string = 'application/pdf'): Promise<IFrameioAssetResponse> {\n        const response = await this._doPost(\n            fillURLTemplate(FRAMEIO_LINKS.CREATEASSET, { parentId }),\n            { 'Content-Type': 'application/json' },\n            JSON.stringify({\n                name: displayName,\n                type: 'file',\n                filetype: mimeType,\n                filesize: fileSize\n            }),\n            [ 200 ]\n        );\n\n        return response.json();\n    }\n\n    // See https://developer.frame.io/api/reference/operation/createAsset/\n    // See also https://developer.frame.io/docs/workflows-assets/uploading-assets\n    public async uploadFile(url: string, bytes: ArrayBuffer, mimeType: string = 'application/pdf'): Promise<void> {\n        // !!@ The upload urls are to AWS, so I'm just using a raw fetch for now...\n        const init = {\n            method: 'PUT',\n            headers: {\n                'Content-Type': mimeType,\n                'x-amz-acl': 'private'\n            },\n            body: bytes\n        };\n\n        await fetch(url, init);\n    }\n\n    // See https://developer.frame.io/api/reference/operation/reviewLinkItemCreate/\n    public async reviewLinkAddAsset(reviewLinkId: string, assetId: string): Promise<IFrameioReviewLinkResponse> {\n        const response = await this._doPost(\n            fillURLTemplate(FRAMEIO_LINKS.ITEMCREATE, { reviewLinkId }),\n            { 'Content-Type': 'application/json' },\n            JSON.stringify({ asset_ids: [ assetId ] }),\n            [ 200 ]\n        );\n\n        return response.json();\n    }\n\n\n    // See https://developer.frame.io/api/reference/operation/getAssets/\n    public async getChildren(assetId: string): Promise<Array<IFrameioAssetResponse>> {\n        return this._getMultiPageResponse(\n            fillURLTemplate(FRAMEIO_LINKS.ASSETS, { assetId })\n        );\n    }\n\n    // See https://developer.frame.io/api/reference/operation/getAsset/\n    public async getAsset(assetId: string): Promise<IFrameioAssetResponse> {\n        return this._getResponse(\n            fillURLTemplate(FRAMEIO_LINKS.ASSET, { assetId })\n        );\n    }\n\n    // See https://developer.frame.io/api/reference/operation/addVersionToAsset/\n    public async addVersionToAsset(assetId: string, nextAssetId: string): Promise<IFrameioAssetResponse> {\n        const response = await this._doPost(\n            fillURLTemplate(FRAMEIO_LINKS.VERSION, { assetId }),\n            { 'Content-Type': 'application/json' },\n            JSON.stringify({ next_asset_id: nextAssetId }),\n            [ 200 ]\n        );\n\n        return response.json();\n    }\n\n    // See https://developer.frame.io/api/reference/operation/createComment/\n    public async createComment(assetId: string, text: string): Promise<IFrameioCommentResponse> {\n        const response = await this._doPost(\n            fillURLTemplate(FRAMEIO_LINKS.CREATECOMMENT, { assetId }),\n            { 'Content-Type': 'application/json' },\n            JSON.stringify({ text }),\n            [ 200 ]\n        );\n\n        return response.json();\n    }\n\n    // See https://developer.frame.io/api/reference/operation/getComment/\n    public async getComment(commentId: string): Promise<IFrameioCommentResponse> {\n        return this._getResponse(\n            fillURLTemplate(FRAMEIO_LINKS.GETCOMMENT, { commentId })\n        );\n    }\n\n    // See https://developer.frame.io/api/reference/operation/getComments/\n    public async getComments(assetId: string): Promise<Array<IFrameioCommentResponse>> {\n        return this._getMultiPageResponse(\n            fillURLTemplate(FRAMEIO_LINKS.GETCOMMENTS, { assetId })\n        );\n    }\n\n    // See https://developer.frame.io/api/reference/operation/getCommentImpressions/\n    public async getImpressions(commentId: string): Promise<Array<IFrameioImpressionResponse>> {\n        return this._getMultiPageResponse(\n            fillURLTemplate(FRAMEIO_LINKS.IMPRESSIONS, { commentId })\n        );\n    }\n\n    // See https://developer.frame.io/api/reference/operation/updateComment/\n    public async updateComment(commentId: string, text: string): Promise<IFrameioCommentResponse> {\n        const response = await this._doPut(\n            fillURLTemplate(FRAMEIO_LINKS.COMMENT, { commentId }),\n            { 'Content-Type': 'application/json' },\n            JSON.stringify({ text }),\n            [ 200 ]\n        );\n\n        return response.json();\n    }\n\n    // See https://developer.frame.io/api/reference/operation/deleteComment/\n    public async deleteComment(commentId: string): Promise<IFrameioCommentResponse> {\n        const response = await this._doDelete(\n            fillURLTemplate(FRAMEIO_LINKS.COMMENT, { commentId })\n        );\n\n        return response.json();\n    }\n\n    // See https://developer.frame.io/api/reference/operation/createReply/\n    public async createReply(commentId: string, text: string): Promise<IFrameioCommentResponse> {\n        const response = await this._doPost(\n            fillURLTemplate(FRAMEIO_LINKS.REPLY, { commentId }),\n            { 'Content-Type': 'application/json' },\n            JSON.stringify({ text }),\n            [ 200 ]\n        );\n\n        return response.json();\n    }\n\n    // See https://developer.frame.io/api/reference/operation/getComments/\n    public async getReplies(commentId: string): Promise<Array<IFrameioCommentResponse>> {\n        return this._getMultiPageResponse(\n            fillURLTemplate(FRAMEIO_LINKS.GETREPLIES, { commentId })\n        );\n    }\n\n    // See https://developer.frame.io/api/reference/operation/createCommentImpressionLike/\n    public async createLike(commentId: string): Promise<IFrameioLikeResponse> {\n        const response = await this._doPost(\n            fillURLTemplate(FRAMEIO_LINKS.LIKE, { commentId }),\n            { },\n            undefined,\n            [ 200 ]\n        );\n\n        return response.json();\n    }\n\n\n    // See https://developer.frame.io/api/reference/operation/deleteCommentImpressionLike/\n    public async deleteLike(commentId: string): Promise<IFrameioLikeResponse> {\n        const response = await this._doDelete(\n            fillURLTemplate(FRAMEIO_LINKS.LIKE, { commentId })\n        );\n\n        return response.json();\n    }\n\n    // See https://developer.frame.io/api/reference/operation/completeComment/\n    public async completeComment(commentId: string): Promise<IFrameioCommentResponse> {\n        const response = await this._doPost(\n            fillURLTemplate(FRAMEIO_LINKS.COMPLETE, { commentId }),\n            { },\n            undefined,\n            [ 200 ]\n        );\n\n        return response.json();\n    }\n\n\n    // See https://developer.frame.io/api/reference/operation/uncompleteComment/\n    public async uncompleteComment(commentId: string): Promise<IFrameioCommentResponse> {\n        const response = await this._doDelete(\n            fillURLTemplate(FRAMEIO_LINKS.COMPLETE, { commentId })\n        );\n\n        return response.json();\n    }\n\n    // This is an undocumented interface. It will not work with developer tokens\n\n    // Loosely speaking, a tree of assets gets stringify()'ed as a dictionary.\n    //\n    // Each folder in the tree is added to the dictionary using the folder id\n    // as a key, and an array of objects describing the folder's immediate children\n    // as the value. The description of a child includes { id, parent_id, name },\n    // but is not a full asset description ( IFrameioAssetResponse ).\n    //\n    // As the root folder has no parent to describe it, the value of data[\"root\"]\n    // is an array containing the root folder's description.\n    public async getFolderTree(projectId: string): Promise<any> {\n        return this._getResponse(\n            fillURLTemplate(FRAMEIO_LINKS.FOLDERTREE, { projectId })\n        );\n    }\n\n    // This is an undocumented interface. It will not work with developer tokens.\n    //\n    // The response is an array of assets.\n    //\n    // If the asset's path relative to it's project is ./folder/asset,\n    // then the array would be:\n    //\n    // array[0] = root_asset\n    // array[1] = folder\n    // array[2] = asset\n    public async getAncestors(assetId: string): Promise<Array<IFrameioAssetResponse>> {\n        return this._getMultiPageResponse(\n            fillURLTemplate(FRAMEIO_LINKS.ANCESTORS, { assetId })\n        );\n    }\n}\n\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ItemBase from '../core/ItemBase';\nimport FrameioContext from './FrameioContext';\n\nexport default class FrameioBase extends ItemBase {\n    // ItemBase implements this.id for us\n\n    /**\n     * @package - not yet decided if context is internal use only.\n     *  In the meantime, I'm decorating them to discourage it's use.\n     */\n    get context(): FrameioContext {\n        return this._core.frameioContext;\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ItemUpdater from '../core/ItemUpdater';\nimport PropertyUpdater from '../core/PropertyUpdater';\n\nimport { IFrameioUserResponse } from './FrameioInterface';\nimport FrameioAccount from './FrameioAccount';\nimport FrameioBase from './FrameioBase';\n\n// See https://developer.frame.io/api/reference/operation/getAccount/\n//  for schema of the data FrameioAccount encapsulates.\nexport default class FrameioUser extends FrameioBase {\n    private _accountId: string = '';\n    private _email: string = '';\n    private _name: string = '';\n    private _profileImage: string = '';\n    private _userDefaultColor: string = '';\n\n    private _account: FrameioAccount | undefined;\n\n    get accountId(): string {\n        return this._accountId;\n    }\n\n    get email(): string {\n        return this._email;\n    }\n\n    get name(): string {\n        return this._name;\n    }\n\n    get profileImage(): string {\n        return this._profileImage;\n    }\n\n    get userDefaultColor(): string {\n        return this._userDefaultColor;\n    }\n\n    async getAccount(): Promise<FrameioAccount> {\n        if (!this._account) {\n            this._account = await this.context.getAccount(this.accountId);\n        }\n\n        return this._account;\n    }\n}\n\nexport const FrameioUserUpdater = new ItemUpdater<FrameioUser, Partial<IFrameioUserResponse>>({\n    localItemType: FrameioUser,\n    remoteIdProperty: 'id',\n    propertyUpdater: new PropertyUpdater({\n        '_accountId': 'account_id',\n        '_email': 'email',\n        '_name': 'name',\n        '_profileImage': 'profile_image',\n        '_userDefaultColor': 'user_default_color'\n    })\n});\n\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport FrameioBase from './FrameioBase';\n\n// See https://developer.frame.io/api/reference/operation/getAsset/\n//  for schema of IFrameioAssetResponse. FrameioFolder\n//  encapsulates the data for assets of type=\"folder\".\n//\n// See FrameioFile, FrameioVersionStack for other asset types.\nexport default class FrameioAsset extends FrameioBase {\n    // ItemBase implements this.id for us\n    private _insertedAt?: Date;\n    private _name: string = '';\n    private _parentId: string | undefined;\n    private _projectId: string = '';\n    private _teamId: string = '';\n    private _updatedAt?: Date;\n\n    /* All of a FrameioAsset's id's should be valid id's.\n     *\n     * But Frame.io indicates a root_asset folder with\n     * (parent_id == null), as a root doesn't have a parent.\n     *\n     * SAM.js isn't a fan of the null's, so it's using\n     * undefined for the same thing.\n     */\n    get insertedAt(): Date | undefined {\n        return this._insertedAt;\n    }\n\n    get name(): string {\n        return this._name;\n    }\n\n    get parentId(): string | undefined {\n        return this._parentId;\n    }\n\n    async getParent(): Promise<FrameioAsset | undefined> {\n        const ctx = this.context;\n        const parentId = this.parentId;\n\n        if (parentId) {\n            return ctx.getAsset(parentId);\n        }\n        return undefined;\n    }\n\n    get projectId(): string {\n        return this._projectId;\n    }\n\n    get teamId(): string {\n        return this._teamId;\n    }\n\n    get updatedAt(): Date | undefined {\n        return this._updatedAt;\n    }\n\n    /*\n     * If the path to an asset relative to it's project is\n     *      ./folder/subfolder/asset\n     *\n     * Then\n     *      ancestors[0] = folder : FrameioFolder\n     *      ancestors[1] = subfolder : FrameioFolder\n     *      ancestors[2] = asset : FrameioAsset\n     */\n    async getAncestors(): Promise<Array<FrameioAsset>> {\n        return this.context.getAncestors(this.id);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ItemUpdater from '../core/ItemUpdater';\nimport PropertyUpdater from '../core/PropertyUpdater';\nimport FrameioBase from './FrameioBase';\nimport { IFrameioCommentResponse, IFrameioLikeResponse } from './FrameioInterface';\nimport { ISAMObject } from '../core/ISAMObject';\nimport FrameioComment, { FrameioCommentUpdater } from './FrameioComment';\n\n// See https://developer.frame.io/api/reference/operation/createCommentImpressionLike/\n//  for schema of IFrameioLikeResponse, aka response.type=\"like\".\n\nexport default class FrameioLike extends FrameioBase {\n    // Frame.io uses { myString : null } for unspecified\n    // values, which causes our updater to set the string\n    // property to undefined, but our getters substitute\n    // '' for undefined, so our clients aren't exposed to this.\n    private _anonymousUserId?: string;\n    private _comment?: FrameioComment;\n    private _commentId?: string;\n    private _deletedAt?: Date;\n    private _insertedAt?: Date;\n    private _updatedAt?: Date;\n    private _userId?: string;\n\n    get anonymousUserId(): string {\n        return this._anonymousUserId || '';\n    }\n\n    get comment(): FrameioComment | undefined {\n        return this._comment;\n    }\n\n    get commentId(): string {\n        return this._commentId || '';\n    }\n\n    get deletedAt(): Date | undefined {\n        return this._deletedAt;\n    }\n\n    get insertedAt(): Date | undefined {\n        return this._insertedAt;\n    }\n\n    get updatedAt(): Date | undefined {\n        return this._updatedAt;\n    }\n\n    get userId(): string {\n        return this._userId || '';\n    }\n}\n\nexport const FrameioLikeUpdater = new ItemUpdater<FrameioLike, Partial<IFrameioLikeResponse>>({\n    localItemType: FrameioLike,\n    remoteIdProperty: 'id',\n    propertyUpdater: new PropertyUpdater({\n        '_anonymousUserId': 'anonymous_user_id',\n        '_comment': {\n            // The comment property of an IFrameioLikeResponse is a nested\n            // object of type IFrameioCommentResponse, so let's update it!\n            set: (comment: IFrameioCommentResponse, dest: ISAMObject) => {\n                const like = dest as FrameioLike;\n                const context = like.context;\n                const pool = context._objectPool;\n\n                const session = pool.createUpdateSession<FrameioComment>();\n                like['_comment'] = FrameioCommentUpdater.updateRemoteItem(session, comment);\n                session.commit();\n            },\n            name: 'comment',\n            format: 'object'\n        },\n        '_commentId': 'comment_id',\n        '_deletedAt': { name: 'deleted_at', format: 'date' },\n        '_insertedAt': { name: 'inserted_at', format: 'date' },\n        '_updatedAt': { name: 'updated_at', format: 'date' },\n        '_userId': 'user_id'\n    })\n});\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ItemUpdater from '../core/ItemUpdater';\nimport PropertyUpdater from '../core/PropertyUpdater';\nimport FrameioBase from './FrameioBase';\nimport { IFrameioCommentResponse, IFrameioUserResponse } from './FrameioInterface';\nimport FrameioLike, { FrameioLikeUpdater } from './FrameioLike';\nimport { ISAMObject } from '../core/ISAMObject';\nimport FrameioUser, { FrameioUserUpdater } from './FrameioUser';\n\nexport type FrameioCommentParam = {\n    text: string;\n    mentions?: any; /* unimplemented, currently ignored */\n    annotationData?: any; /* unimplemented, currently ignored */\n};\n\n// See https://developer.frame.io/api/reference/operation/getAsset/\n//  for schema of IFrameioAssetResponse. FrameioFile\n//  encapsulates the data for assets of type=\"file\".\n//\n// See FrameioFolder, FrameioVersionStack for other asset types.\nexport default class FrameioComment extends FrameioBase {\n    // Frame.io uses { myString : null } for unspecified\n    // values, which causes our updater to set the string\n    // property to undefined, but our getters substitute\n    // '' for undefined, so our clients aren't exposed to this.\n\n    private _assetId?: string;\n    private _completed: boolean = false;\n    private _completedAt?: Date;\n    private _completerId?: string;\n    private _deletedAt?: Date;\n    private _hasReplies: boolean = false;\n    private _insertedAt?: Date;\n    private _likeCount: number = 0;\n    private _owner?: FrameioUser;\n    private _ownerId?: string;\n    private _page?: string;\n    private _parentId?: string;\n    private _private: boolean = false;\n    private _readCount: number = 0;\n    private _reviewLinkId?: string;\n    private _targetAssetId?: string;\n    private _text?: string;\n    private _textEditedAt?: Date;\n    private _timestamp: number = 0;\n    private _timestampMicroseconds: number = 0;\n    private _updatedAt?: Date;\n\n    get assetId(): string {\n        return this._assetId || '';\n    }\n\n    get completed(): boolean {\n        return this._completed;\n    }\n\n    get completedAt(): Date | undefined {\n        return this._completedAt;\n    }\n    get completerId(): string {\n        return this._completerId || '';\n    }\n\n    get deletedAt(): Date | undefined {\n        return this._deletedAt;\n    }\n\n    get hasReplies(): boolean {\n        return this._hasReplies;\n    }\n\n    get insertedAt(): Date | undefined {\n        return this._insertedAt;\n    }\n\n    get likeCount(): number {\n        return this._likeCount;\n    }\n\n    get owner(): FrameioUser | undefined {\n        return this._owner;\n    }\n\n    get ownerId(): string {\n        return this._ownerId || '';\n    }\n\n    get page(): string {\n        return this._page || '';\n    }\n\n    get parentId(): string {\n        return this._parentId || '';\n    }\n\n    get private(): boolean {\n        return this._private;\n    }\n\n    get readCount(): number {\n        return this._readCount;\n    }\n\n    get reviewLinkId(): string {\n        return this._reviewLinkId || '';\n    }\n\n    get targetAssetId(): string {\n        return this._targetAssetId || '';\n    }\n\n    get text(): string {\n        return this._text || '';\n    }\n\n    get textEditedAt(): Date | undefined {\n        return this._textEditedAt;\n    }\n\n    get timestamp(): number {\n        return this._timestamp;\n    }\n\n    get timestampMicroseconds(): number {\n        return this._timestampMicroseconds;\n    }\n\n    get updatedAt(): Date | undefined {\n        return this._updatedAt;\n    }\n\n    async updateComment(param: FrameioCommentParam): Promise<FrameioComment> {\n        const ctx = this.context;\n\n        const response = await ctx._frameioInterface.updateComment(this.id, param.text);\n        const session = ctx._objectPool.createUpdateSession<FrameioComment>();\n        const comment = FrameioCommentUpdater.updateRemoteItem(session, response);\n        session.commit();\n\n        return comment;\n    }\n\n    async deleteComment(): Promise<FrameioComment> {\n        const ctx = this.context;\n\n        const response = await ctx._frameioInterface.deleteComment(this.id);\n        const session = ctx._objectPool.createUpdateSession<FrameioComment>();\n        const comment = FrameioCommentUpdater.updateRemoteItem(session, response);\n        session.commit();\n\n        return comment;\n    }\n\n    async createLike(): Promise<FrameioLike> {\n        const ctx = this.context;\n\n        const response = await ctx._frameioInterface.createLike(this.id);\n        const session = ctx._objectPool.createUpdateSession<FrameioLike>();\n        const like = FrameioLikeUpdater.updateRemoteItem(session, response);\n        session.commit();\n\n        return like;\n    }\n\n    async deleteLike(): Promise<FrameioLike> {\n        const ctx = this.context;\n\n        const response = await ctx._frameioInterface.deleteLike(this.id);\n        const session = ctx._objectPool.createUpdateSession<FrameioLike>();\n        const like = FrameioLikeUpdater.updateRemoteItem(session, response);\n        session.commit();\n\n        return like;\n    }\n\n    async createReply(param: FrameioCommentParam): Promise<FrameioComment> {\n        const ctx = this.context;\n\n        const response = await ctx._frameioInterface.createReply(this.id, param.text);\n        const session = ctx._objectPool.createUpdateSession<FrameioComment>();\n        const reply = FrameioCommentUpdater.updateRemoteItem(session, response);\n        session.commit();\n\n        return reply;\n    }\n\n    async getReplies(): Promise<Array<FrameioComment>> {\n        const ctx = this.context;\n\n        const response = await ctx._frameioInterface.getReplies(this.id);\n        const session = ctx._objectPool.createUpdateSession<FrameioComment>();\n        const replies = FrameioCommentUpdater.updateRemoteItems(session, response);\n        session.commit();\n\n        return replies;\n    }\n\n    async completeComment(): Promise<FrameioComment> {\n        const ctx = this.context;\n\n        const response = await ctx._frameioInterface.completeComment(this.id);\n        const session = ctx._objectPool.createUpdateSession<FrameioComment>();\n        const comment = FrameioCommentUpdater.updateRemoteItem(session, response);\n        session.commit();\n\n        return comment;\n    }\n\n    async uncompleteComment(): Promise<FrameioComment> {\n        const ctx = this.context;\n\n        const response = await ctx._frameioInterface.uncompleteComment(this.id);\n        const session = ctx._objectPool.createUpdateSession<FrameioComment>();\n        const comment = FrameioCommentUpdater.updateRemoteItem(session, response);\n        session.commit();\n\n        return comment;\n    }\n\n\n}\n\nexport const FrameioCommentUpdater = new ItemUpdater<FrameioComment, Partial<IFrameioCommentResponse>>({\n    localItemType: FrameioComment,\n    remoteIdProperty: 'id',\n    propertyUpdater: new PropertyUpdater({\n\n\n        '_assetId': 'asset_id',\n        '_completed': { name: 'completed', format: 'boolean' },\n        '_completedAt': { name: 'completed_at', format: 'date' },\n        '_completerId': 'completer_id',\n        '_deletedAt': { name: 'deleted_at', format: 'date' },\n        '_hasReplies': { name: 'has_replies', format: 'boolean' },\n        '_insertedAt': { name: 'inserted_at', format: 'date' },\n        '_likeCount': { name: 'like_count', format: 'number' },\n        '_owner': {\n            // The owner property of an IFrameioComment is a nested\n            // IFrameioUserResponse, so let's update it!\n            set: (owner: IFrameioUserResponse, dest: ISAMObject) => {\n                const comment = dest as FrameioComment;\n                const context = comment.context;\n                const pool = context._objectPool;\n\n                const session = pool.createUpdateSession<FrameioUser>();\n                comment['_owner'] = FrameioUserUpdater.updateRemoteItem(session, owner);\n                session.commit();\n            },\n            name: 'owner',\n            format: 'object'\n        },\n        '_ownerId': 'owner_id',\n        '_page': 'page',\n        '_parentId': 'parent_id',\n        '_private': { name: 'private', format: 'boolean' },\n        '_readCount': { name: 'read_count', format: 'number' },\n        '_reviewLinkId': 'review_link_id',\n        '_targetAssetId': 'target_asset_id',\n        '_text': 'text',\n        '_textEditedAt': { name: 'text_edited_at', format: 'date' },\n        '_timestamp': { name: 'timestamp', format: 'number' },\n        '_timestampMicroseconds': { name: 'timestamp_microseconds', format: 'number' },\n        '_updatedAt': { name: 'updated_at', format: 'date' }\n    })\n});\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ItemUpdater from '../core/ItemUpdater';\nimport PropertyUpdater from '../core/PropertyUpdater';\n\nimport { IFrameioAssetResponse } from './FrameioInterface';\nimport FrameioAsset from './FrameioAsset';\nimport FrameioComment, { FrameioCommentParam, FrameioCommentUpdater } from './FrameioComment';\n\n// See https://developer.frame.io/api/reference/operation/getAsset/\n//  for schema of IFrameioAssetResponse. FrameioFile\n//  encapsulates the data for assets of type=\"file\".\n//\n// See FrameioFolder, FrameioVersionStack for other asset types.\nexport default class FrameioFile extends FrameioAsset {\n    private _comments: Array<FrameioComment> | undefined;\n\n    async createComment(param: FrameioCommentParam): Promise<FrameioComment> {\n        const ctx = this.context;\n\n        const response = await ctx._frameioInterface.createComment(this.id, param.text);\n        const session = ctx._objectPool.createUpdateSession<FrameioComment>();\n        const comment = FrameioCommentUpdater.updateRemoteItem(session, response);\n        session.commit();\n\n        this._comments = undefined; // force it to refresh the next time it's called.\n\n        return comment;\n    }\n\n    // https://developer.frame.io/docs/workflows-projects/gather-all-comments-from-a-project\n    //  implies that only a file can have comments, folders and version stacks should\n    //  enumerate their children for files with comments\n    async getComments(): Promise<Array<FrameioComment>> {\n        let comments = this._comments;\n        if (!comments) {\n            const ctx = this.context;\n\n            const response = await ctx._frameioInterface.getComments(this.id);\n            const session = ctx._objectPool.createUpdateSession<FrameioComment>();\n            comments = FrameioCommentUpdater.updateRemoteItems(session, response);\n            session.commit();\n\n            this._comments = comments;\n        }\n\n        return comments;\n    }\n}\n\nexport const FrameioFileUpdater = new ItemUpdater<FrameioFile, Partial<IFrameioAssetResponse>>({\n    localItemType: FrameioFile,\n    remoteIdProperty: 'id',\n    propertyUpdater: new PropertyUpdater({\n        '_commentCount': 'comment_count',\n        '_insertedAt': { name: 'inserted_at', format: 'date' },\n        '_name': 'name',\n        '_parentId': 'parent_id',\n        '_projectId': 'project_id',\n        '_teamId': 'team_id',\n        '_updatedAt': { name: 'updated_at', format: 'date' }\n    })\n});\n\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ItemUpdater from '../core/ItemUpdater';\nimport PropertyUpdater from '../core/PropertyUpdater';\n\nimport { IFrameioAssetResponse, IFrameioFileHandle } from './FrameioInterface';\nimport FrameioAsset from './FrameioAsset';\nimport FrameioFile, { FrameioFileUpdater } from './FrameioFile';\nimport FrameioContext, { frameioAssetUpdater } from './FrameioContext';\n\n// See https://developer.frame.io/api/reference/operation/getAsset/\n//  for schema of IFrameioAssetResponse. FrameioFolder\n//  encapsulates the data for assets of type=\"folder\".\n//\n// See FrameioFile, FrameioVersionStack for other asset types.\nexport default class FrameioFolder extends FrameioAsset {\n    private _children: Array<FrameioAsset> | undefined;\n\n    // clients shouldn't need to deal with id's\n\n    async getChildren(): Promise<Array<FrameioAsset>> {\n        if (!this._children) {\n            const ctx = this.context;\n            const response = await ctx._frameioInterface.getChildren(this.id);\n            const session = ctx._objectPool.createUpdateSession<FrameioAsset>();\n\n            // IFrameioAssetResponse is a special case, as it corresponds to multiple classes\n            // inheriting from FrameioAsset ( FrameioFile, FrameioFolder, FrameioVersionStack ),\n            // so use a utility function to select the correct updater for the type.\n            //\n            // See also FrameioContext.getAncestors()\n            this._children = response.map((asset: IFrameioAssetResponse) => frameioAssetUpdater(session, asset));\n            session.commit();\n        }\n\n        return this._children;\n    }\n\n    private async _uploadFile(urls: Array<string>, fp: IFrameioFileHandle): Promise<void> {\n        // Frame.io splits uploads into ~20MB chunks, whereas our expected\n        // artifact size is ~5MB, so the most common case will be (numChunks == 1).\n\n        const ctx: FrameioContext = this.context;\n\n        // limit the number of concurrent streams\n        const maxStreams = 8;\n\n        const fileSize = fp.size();\n        const numChunks = urls.length;\n        const chunkSize = Math.ceil(fileSize / numChunks); // round-down might lead to omitted bytes.\n\n        let iChunk = 0;\n\n        const nextChunk = async (bytes: ArrayBuffer): Promise<void> => {\n            const i = iChunk++;\n            bytes = await fp.read((i) * chunkSize, bytes);\n\n            return ctx._frameioInterface.uploadFile(urls[i], bytes).then(() => {\n                return  (iChunk < numChunks) ? nextChunk(bytes) : Promise.resolve();\n            });\n        };\n\n        const limit = Math.min(numChunks, maxStreams);\n        const promises = [];\n\n        for (let i = 0; i < limit; i++) {\n            promises.push(nextChunk(new ArrayBuffer(chunkSize)));\n        }\n\n        await Promise.all(promises);\n    }\n\n    async createFile(display_name: string, path: string): Promise<FrameioFile> {\n        const ctx: FrameioContext = this.context;\n\n        const fp = await ctx._frameioInterface.openFile(path);\n        const fileSize = fp.size();\n\n        // create the empty asset\n        const response = await ctx._frameioInterface.createFile(this.id, display_name, fileSize);\n        const session = ctx._objectPool.createUpdateSession<FrameioFile>();\n        const file = FrameioFileUpdater.updateRemoteItem(session, response);\n        session.commit();\n\n        await this._uploadFile(response['upload_urls'], fp);\n        fp.close();\n\n        return file;\n    }\n\n    async createFolder(display_name: string): Promise<FrameioFolder> {\n        const ctx: FrameioContext = this.context;\n\n        const response = await ctx._frameioInterface.createFolder(this.id, display_name);\n        const session = ctx._objectPool.createUpdateSession<FrameioFolder>();\n        const folder = FrameioFolderUpdater.updateRemoteItem(session, response);\n        session.commit();\n\n        return folder;\n    }\n\n}\n\nexport const FrameioFolderUpdater = new ItemUpdater<FrameioFolder, Partial<IFrameioAssetResponse>>({\n    localItemType: FrameioFolder,\n    remoteIdProperty: 'id',\n    propertyUpdater: new PropertyUpdater({\n        '_insertedAt': { name: 'inserted_at', format: 'date' },\n        '_name': 'name',\n        '_parentId': 'parent_id',\n        '_projectId': 'project_id',\n        '_teamId': 'team_id',\n        '_updatedAt': { name: 'updated_at', format: 'date' }\n    })\n});\n\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ItemUpdater from '../core/ItemUpdater';\nimport PropertyUpdater from '../core/PropertyUpdater';\n\nimport { IFrameioTeamResponse } from './FrameioInterface';\nimport FrameioBase from './FrameioBase';\nimport FrameioProject, { FrameioProjectUpdater } from './FrameioProject';\n\n// See https://developer.frame.io/api/reference/operation/getTeamsByAccount/\n//  for schema of the data FrameioTeam encapsulates.\nexport default class FrameioTeam extends FrameioBase {\n    private _projects: Array<FrameioProject> | undefined;\n    private _email: string = '';\n    private _name: string = '';\n\n    get email(): string {\n        return this._email;\n    }\n\n    get name(): string {\n        return this._name;\n    }\n\n    async getProjects(): Promise<Array<FrameioProject>> {\n        let projects = this._projects;\n        if (!projects) {\n            const ctx = this.context;\n\n            const projectsResponse = await this._core.frameioContext._frameioInterface.getProjects(this.id);\n            const session = ctx._objectPool.createUpdateSession<FrameioProject>();\n            projects = FrameioProjectUpdater.updateRemoteItems(session, projectsResponse);\n            session.commit();\n\n            this._projects = projects;\n        }\n\n        return projects;\n    }\n}\n\nexport const FrameioTeamUpdater = new ItemUpdater<FrameioTeam, Partial<IFrameioTeamResponse>>({\n    localItemType: FrameioTeam,\n    remoteIdProperty: 'id',\n    propertyUpdater: new PropertyUpdater({\n        '_email': 'owner.email',\n        '_name': 'name'\n    })\n});\n\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ItemUpdater from '../core/ItemUpdater';\nimport PropertyUpdater from '../core/PropertyUpdater';\n\nimport { IFrameioAssetResponse } from './FrameioInterface';\nimport FrameioAsset from './FrameioAsset';\nimport { frameioAssetUpdater } from './FrameioContext';\nimport { ISAMObject } from '../core/ISAMObject';\n\n// See https://developer.frame.io/api/reference/operation/getAsset/\n//  for schema of IFrameioAssetResponse. FrameioVersionStack\n//  encapsulates the data for assets of type=\"version_stack\".\n//\n// See FrameioFile, FrameioFolder for other asset types.\nexport default class FrameioVersionStack extends FrameioAsset {\n    private _children?: Array<FrameioAsset>;\n    private _coverAsset?: FrameioAsset;\n    private _coverAssetId: string = '';\n    private _versions: number = 0;\n\n    get coverAssetId(): string {\n        return this._coverAssetId;\n    }\n\n    async getCoverAsset(): Promise<FrameioAsset> {\n        if (!this._coverAsset) {\n            this._coverAsset = await this.context.getAsset(this.coverAssetId);\n        }\n\n        return this._coverAsset!;\n    }\n\n    get versions(): number {\n        return this._versions;\n    }\n\n    async getChildren(): Promise<Array<FrameioAsset>> {\n        if (!this._children) {\n            const ctx = this.context;\n            const response = await ctx._frameioInterface.getChildren(this.id);\n            const session = ctx._objectPool.createUpdateSession<FrameioAsset>();\n\n            // IFrameioAssetResponse is a special case, as it corresponds to multiple classes\n            // inheriting from FrameioAsset ( FrameioFile, FrameioFolder, FrameioVersionStack ),\n            // so use a utility function to select the correct updater for the type.\n            //\n            // See also FrameioContext.getAncestors()\n            this._children = response.map((asset: IFrameioAssetResponse) => frameioAssetUpdater(session, asset));\n            session.commit();\n        }\n\n        return this._children;\n    }\n}\n\nexport const FrameioVersionStackUpdater = new ItemUpdater<FrameioVersionStack, Partial<IFrameioAssetResponse>>({\n    localItemType: FrameioVersionStack,\n    remoteIdProperty: 'id',\n    propertyUpdater: new PropertyUpdater({\n        '_coverAsset': {\n            // when the update reads response.root_asset\n            // ( which matches name: 'root_asset' ),\n            // it will invoke set: with the child object\n            //\n            name: 'cover_asset',\n            format: 'object',\n            set: (response: IFrameioAssetResponse, dest: ISAMObject): void => {\n                const stack = dest as FrameioVersionStack;\n                const pool = stack.context._objectPool;\n                const session = pool.createUpdateSession<FrameioAsset>();\n                const asset = frameioAssetUpdater(session, response);\n                session.commit();\n\n                // @ts-ignore\n                stack._coverAsset = asset;\n            },\n\n        },\n        '_coverAssetId': 'cover_asset_id',\n        '_insertedAt': { name: 'inserted_at', format: 'date' },\n        '_name': 'name',\n        '_parentId': 'parent_id',\n        '_projectId': 'project_id',\n        '_teamId': 'team_id',\n        '_updatedAt': { name: 'updated_at', format: 'date' },\n        '_versions': { name: 'versions', format: 'number' }\n    })\n});\n\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ItemUpdater from '../core/ItemUpdater';\nimport PropertyUpdater from '../core/PropertyUpdater';\n\nimport { FrameioReviewLinksChangeEventParam, IFrameioReviewLinkResponse } from './FrameioInterface';\nimport FrameioContext, { FrameioSourceDocument } from './FrameioContext';\nimport FrameioBase from './FrameioBase';\nimport FrameioAsset  from './FrameioAsset';\nimport FrameioFile  from './FrameioFile';\nimport FrameioFolder  from './FrameioFolder';\nimport FrameioVersionStack, { FrameioVersionStackUpdater } from './FrameioVersionStack';\nimport SAMError, { SAMErrorCode } from '../core/SAMError';\n\n// See https://developer.frame.io/api/reference/operation/getTeamsByAccount/\n//  for schema of the data FrameioTeam encapsulates.\nexport default class FrameioReviewLink extends FrameioBase {\n    private _name: string = '';\n    private _shortUrl: string = '';\n    private _ownerId: string = '';\n    private _projectId: string = '';\n    private _active: boolean = false;\n    private _inviteOnly: boolean = false;\n    private _etag?: string;\n\n    private _itemId?: string;\n    private _item?: FrameioAsset;\n\n    get name(): string {\n        return this._name;\n    }\n\n    get shortUrl(): string {\n        return this._shortUrl;\n    }\n\n    get ownerId(): string {\n        return this._ownerId;\n    }\n\n    get projectId(): string {\n        return this._projectId;\n    }\n\n    get active(): boolean {\n        return this._active;\n    }\n\n    get inviteOnly(): boolean {\n        return this._inviteOnly;\n    }\n\n    get itemId(): string | undefined {\n        return this._itemId;\n    }\n\n    /*\n     * Returns the number of artifacts currently in the review.\n     */\n    async getArtifactCount(): Promise<number> {\n        const item = await this.getItem();\n\n        if (item instanceof FrameioVersionStack) {\n            return item.versions;\n        }\n\n        return 1;\n    }\n\n    /*\n    * Recents the most recently published artifact,\n    * a FrameioFile containing a PDF.\n    */\n    async getArtifact(): Promise<FrameioFile> {\n        const item = await this.getItem();\n\n        if (item instanceof FrameioVersionStack) {\n            return (await item.getCoverAsset()) as FrameioFile;\n        }\n\n        return item as FrameioFile;\n    }\n\n    async getItem(): Promise<FrameioAsset> {\n        if (!this._item) {\n            if (!this._itemId) {\n                return Promise.reject(SAMError.create(SAMErrorCode.BAD_REQUEST, `FrameioReviewLink.getItem() could not find item ${this._itemId}`));\n            }\n\n            this._item = await this.context.getAsset(this._itemId);\n        }\n\n        return this._item!;\n    }\n\n    private _dispatchReviewLinksChangeEvent(source: FrameioSourceDocument) {\n        const ctx: FrameioContext = this.context;\n\n        // After a successful updateReviewLink(),\n        // we use SAM.cpp to dispatch an event to all DOM's,\n        // so they can each update FrameioContext._reviewLinksForDocument\n        //\n        // For example, when ShareSheet creates a new review link,\n        // ShareSheet and Commenting want to update their cache.\n        //\n        // See also FrameioContext._handleReviewLinksChangeEvent()\n\n        const param: FrameioReviewLinksChangeEventParam = {\n            source,\n            reviewLink: {\n                id: this.id,\n                name: this._name,\n                short_url: this._shortUrl,\n                owner_id: this._ownerId,\n                project_id: this._projectId,\n                is_active: (this._active) ? true : false,\n                access_control: {\n                    invite_only: (this._inviteOnly) ? true : false\n                },\n                'frameio:artifactId': this._itemId,\n                'repo:etag': this._etag\n            }\n        };\n\n        ctx._frameioInterface.dispatchReviewLinksChangeEvent(JSON.stringify(param));\n    }\n    async updateReviewLink(source: FrameioSourceDocument, parent: FrameioFolder, artifactPath: string) {\n        const file = await parent.createFile(this.name, artifactPath);\n\n        if (!this._itemId) {\n            // (_itemId === undefined) means this review has never been updated,\n            // so the file asset should be added as an item to the review and remembered.\n            const ctx: FrameioContext = this.context;\n\n            const response = await ctx._frameioInterface.reviewLinkAddAsset(this.id, file.id);\n            const session = ctx._objectPool.createUpdateSession<FrameioReviewLink>();\n            FrameioReviewLinkUpdater.updateRemoteItem(session, response); // updates this\n            session.commit();\n\n            // Notify the Review Service of the newly created review.\n            const result = await ctx._reviewServiceInterface.createReviewLink({\n                ...source,\n                projectId: this.projectId,\n                reviewLinkId: this.id,\n                artifactId: file.id\n            });\n            this._etag = result['repo:etag'];\n\n            this._item = file;\n            this._itemId = file.id;\n        } else {\n            // (_itemId !== undefined) means this isn't the first update.\n            //\n            // For the second update, we'll version the original file\n            // (this._itemId) with the new file to create a stack.\n            // We'll overwrite this._itemId with the stack's id and notify\n            // the Review Service.\n            //\n            // For any remaining calls, this._itemId is already a stack,\n            // and versioning a stack with a new file just adds the file\n            // to the stack. As the stack doesn't change, there's no\n            // further need to update the Review Service.\n\n            const ctx: FrameioContext = this.context;\n            const response = await ctx._frameioInterface.addVersionToAsset(this._itemId, file.id);\n            const session = ctx._objectPool.createUpdateSession<FrameioVersionStack>();\n            const item = FrameioVersionStackUpdater.updateRemoteItem(session, response);\n            session.commit();\n\n            if (this._itemId !== item.id) {\n                // Notify the Review Service that the file\n                // has been replaced with a version stack.\n                const result = await ctx._reviewServiceInterface.updateReviewLink({\n                    ...source,\n                    projectId: this.projectId,\n                    reviewLinkId: this.id,\n                    artifactId: item.id,\n                    etag: this._etag\n                });\n                this._etag = result['repo:etag'];\n\n                this._item = item;\n                this._itemId = item.id;\n            }\n        }\n        this._dispatchReviewLinksChangeEvent(source);\n    }\n}\n\nexport const FrameioReviewLinkUpdater = new ItemUpdater<FrameioReviewLink, Partial<IFrameioReviewLinkResponse>>({\n    localItemType: FrameioReviewLink,\n    remoteIdProperty: 'id',\n    propertyUpdater: new PropertyUpdater({\n        '_name': 'name',\n        '_shortUrl': 'short_url',\n        '_ownerId': 'owner_id',\n        '_projectId': 'project_id',\n        '_active': { name: 'is_active', format: 'boolean' },\n        '_inviteOnly': { name: 'access_control.invite_only', format: 'boolean' },\n        '_itemId': 'frameio:artifactId',\n        '_etag': 'repo:etag'\n    })\n});\n\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ItemUpdater from '../core/ItemUpdater';\nimport PropertyUpdater from '../core/PropertyUpdater';\nimport { ISAMObject } from '../indexPrivate';\n\nimport {\n    IFrameioAssetResponse,\n    IFrameioProjectResponse,\n    IFrameioTeamResponse,\n    IFrameioFolderTreeFolderResponse\n} from './FrameioInterface';\nimport FrameioContext from './FrameioContext';\nimport FrameioFolder, { FrameioFolderUpdater } from './FrameioFolder';\nimport FrameioTeam, { FrameioTeamUpdater } from './FrameioTeam';\nimport FrameioReviewLink, { FrameioReviewLinkUpdater } from './FrameioReviewLink';\nimport FrameioBase from './FrameioBase';\n\n// See https://developer.frame.io/api/reference/operation/getProjectsByTeam/\n//  for schema of the data FrameioProject encapsulates.\nexport default class FrameioProject extends FrameioBase {\n    private _reviews: Array<FrameioReviewLink> | undefined;\n    private _rootAssetId: string = '';\n    private _rootFolder: FrameioFolder | undefined;\n    private _name: string = '';\n    private _ownerId: string = '';\n    private _teamId: string = '';\n    private _team: FrameioTeam | undefined;\n\n\n    get name(): string {\n        return this._name;\n    }\n\n    get ownerId(): string {\n        return this._ownerId;\n    }\n\n    get rootAssetId(): string {\n        return this._rootAssetId;\n    }\n\n    get teamId(): string {\n        return this._teamId;\n    }\n\n    async getTeam(): Promise<FrameioTeam> {\n        if (!this._team) {\n            this._team = await this.context.getTeam(this.rootAssetId);\n        }\n\n        return this._team!;\n    }\n\n    async getRootFolder(): Promise<FrameioFolder> {\n        if (!this._rootFolder) {\n            this._rootFolder = await this.context.getAsset(this.rootAssetId) as FrameioFolder;\n        }\n\n        return this._rootFolder!;\n    }\n\n    async getReviewLinks(): Promise<FrameioReviewLink[]> {\n        let reviews = this._reviews;\n        if (!reviews) {\n            const ctx = this.context;\n\n            const response = await ctx._frameioInterface.getReviewLinks(this.id);\n            const session = ctx._objectPool.createUpdateSession<FrameioReviewLink>();\n            reviews = FrameioReviewLinkUpdater.updateRemoteItems(session, response);\n            session.commit();\n\n            this._reviews = reviews;\n        }\n\n        return reviews;\n    }\n\n    private createFolder(data: any, folder: IFrameioFolderTreeFolderResponse): FrameioFolder {\n        const ctx = this.context;\n\n        // IFrameioFolderTreeFolderResponse only contains\n        //      { id, name, parent_id }\n        //\n        // but FrameioFolderUpdater expects to read\n        //      { id, name, parent_id, project_id, team_id }\n        //\n        // from a IFrameioAssetResponse, so copy { project_id, team_id }\n        // from this project into the response so we can use the\n        // updater.\n\n        const response = folder as IFrameioAssetResponse;\n        response['project_id'] = this.id;\n        response['team_id'] = this.teamId;\n\n        const session = ctx._objectPool.createUpdateSession<FrameioFolder>();\n        const that = FrameioFolderUpdater.updateRemoteItem(session, response);\n        session.commit();\n\n        that['_children'] = data[response.id].map((folder: IFrameioFolderTreeFolderResponse) => this.createFolder(data, folder));\n\n        return that;\n    }\n    async getFolderTree(): Promise<FrameioFolder> {\n        // returns the rootFolder, but only after constructing FrameioFolder's for all of the\n        // folders in project using an undocumented API.\n\n        const response =  await this._core.frameioContext._frameioInterface.getFolderTree(this.id);\n\n        this._rootFolder = this.createFolder(response.data, response.data['root'][0]);\n\n        return this._rootFolder;\n    }\n\n    async createReviewLink(display_name: string): Promise<FrameioReviewLink> {\n        const ctx: FrameioContext = this.context;\n        const response = await ctx._frameioInterface.createReviewLink(this.id, display_name);\n\n\n        const session = ctx._objectPool.createUpdateSession<FrameioReviewLink>();\n        const review = FrameioReviewLinkUpdater.updateRemoteItem(session, response);\n        session.commit();\n\n        if (this._reviews) {\n            // update the cache of reviews owned by this project\n            // by adding the newly created review.\n            this._reviews.push(review);\n        }\n\n        return review;\n    }\n}\n\nexport const FrameioProjectUpdater = new ItemUpdater<FrameioProject, Partial<IFrameioProjectResponse>>({\n    localItemType: FrameioProject,\n    remoteIdProperty: 'id',\n    propertyUpdater: new PropertyUpdater({\n        '_name': 'name',\n        '_ownerId': 'owner_id',\n        '_rootAssetId': 'root_asset_id',\n        '_rootFolder': {\n            // when the update reads response.root_asset\n            // ( which matches name: 'root_asset' ),\n            // it will invoke set: with the child object\n            //\n            name: 'root_asset',\n            format: 'object',\n            set: (rootFolder: IFrameioAssetResponse, dest: ISAMObject): void => {\n                const project = dest as FrameioProject;\n                const pool = project.context._objectPool;\n                const session = pool.createUpdateSession<FrameioFolder>();\n                const folder = FrameioFolderUpdater.updateRemoteItem(session, rootFolder);\n                session.commit();\n\n                // @ts-ignore\n                project._rootFolder = folder;\n            },\n\n        },\n        '_team': {\n            // The owner property of an IFrameioAccountResponse is a nested\n            // object of type IFrameioUserResponse, so let's construct that\n            // while we are here.\n            set: (team: IFrameioTeamResponse, dest: ISAMObject) => {\n                const project = dest as FrameioProject;\n                const context = project.context;\n                const pool = context._objectPool;\n\n                const session = pool.createUpdateSession<FrameioTeam>();\n                project['_team'] = FrameioTeamUpdater.updateRemoteItem(session, team);\n                session.commit();\n            },\n            name: 'team',\n            format: 'object'\n        },\n\n        '_teamId': 'team_id'\n    })\n});\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { ISAMObject } from '../indexPrivate';\nimport ItemUpdater from '../core/ItemUpdater';\nimport PropertyUpdater from '../core/PropertyUpdater';\n\nimport { IFrameioAccountResponse, IFrameioUserResponse } from './FrameioInterface';\nimport FrameioBase from './FrameioBase';\nimport FrameioProject, { FrameioProjectUpdater } from './FrameioProject';\nimport FrameioTeam, { FrameioTeamUpdater } from './FrameioTeam';\nimport FrameioUser, { FrameioUserUpdater } from './FrameioUser';\n\n// See https://developer.frame.io/api/reference/operation/getAccount/\n//  for schema of the data FrameioAccount encapsulates.\nexport default class FrameioAccount extends FrameioBase {\n    private _teams: Array<FrameioTeam> | undefined;\n    private _sharedProjects: Array<FrameioProject> | undefined;\n    private _displayName: string = '';\n    private _owner: FrameioUser | undefined;\n    private _ownerId: string = '';\n    private _version: number = 0;\n\n    /**\n     * @package - not yet decided if id's are internal use only.\n     *  In the meantime, I'm decorating them to discourage their use.\n     */\n    get ownerId(): string {\n        return this._ownerId;\n    }\n\n    get owner(): FrameioUser | undefined {\n        return this._owner;\n    }\n\n    get displayName(): string {\n        return this._displayName!;\n    }\n\n    get version(): number {\n        return this._version;\n    }\n\n    // getTeams() should really be a getter for property teams,\n    // but then we'd need an async getter, and I'm not sure\n    // of the convention for that.\n    // https://medium.com/trabe/async-getters-and-setters-is-it-possible-c18759b6f7e4\n\n    // see getProjectTree() below\n    async getTeams(): Promise<Array<FrameioTeam>> {\n        let teams = this._teams;\n        if (!teams) {\n            const ctx = this.context;\n\n            const teamsResponse = await ctx._frameioInterface.getTeams(this.id);\n            const session = ctx._objectPool.createUpdateSession<FrameioTeam>();\n            teams = FrameioTeamUpdater.updateRemoteItems(session, teamsResponse);\n            session.commit();\n\n            this._teams = teams;\n        }\n\n        return teams;\n    }\n\n    async getSharedProjects(): Promise<Array<FrameioProject>> {\n        let shared = this._sharedProjects;\n        if (!shared) {\n            const ctx = this.context;\n\n            const projectsResponse = await ctx._frameioInterface.getSharedProjects(this.id);\n            const session = ctx._objectPool.createUpdateSession<FrameioProject>();\n            shared = FrameioProjectUpdater.updateRemoteItems(session, projectsResponse);\n            session.commit();\n\n            this._sharedProjects = shared;\n        }\n\n        return shared;\n    }\n\n    async getSharedTeams(): Promise<Array<FrameioTeam>> {\n        const projects = await this.getSharedProjects();\n        const set = new Set<string>();\n        const teams: Array<FrameioTeam> = [];\n\n        // The array we return should not contain duplicates,\n        // but a team could have more than one shared projects,\n        // so use a set to unique the teams we add to the array.\n\n        for (const project of projects) {\n            const id = project.teamId;\n\n            if (!set.has(id)) {\n                const team = await project.getTeam();\n\n                set.add(id);\n                teams.push(team);\n            }\n        }\n\n        return teams;\n    }\n\n    // same return as getTeams(), but we pre-load the projects of each team\n    // before resolving the promise.\n    async getProjectTree(): Promise<Array<FrameioTeam>> {\n        const teams = await this.getTeams();\n        const promises: Array<any> = [];\n\n        teams.forEach((team: any) => {\n            promises.push(team.getProjects());\n        });\n\n        await Promise.all(promises);\n        return teams;\n    }\n}\n\nexport const FrameioAccountUpdater = new ItemUpdater<FrameioAccount, Partial<IFrameioAccountResponse>>({\n    localItemType: FrameioAccount,\n    remoteIdProperty: 'id',\n    propertyUpdater: new PropertyUpdater({\n        '_displayName': 'display_name',\n        '_owner': {\n            // The owner property of an IFrameioAccountResponse is a nested\n            // object of type IFrameioUserResponse, so let's construct that\n            // while we are here.\n            set: (owner: IFrameioUserResponse, dest: ISAMObject) => {\n                const account = dest as FrameioAccount;\n                const context = account.context;\n                const pool = context._objectPool;\n\n                const session = pool.createUpdateSession<FrameioUser>();\n                account['_owner'] = FrameioUserUpdater.updateRemoteItem(session, owner);\n                session.commit();\n            },\n            name: 'owner',\n            format: 'object'\n        },\n        '_ownerId': 'owner_id',\n        '_version': { name: 'version', format: 'number' }\n    })\n});\n\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { ISAMCorePrivate, ISAMObject } from '../indexPrivate';\nimport ItemPool from '../core/ItemPool';\n\nimport FrameioInterface, {\n    IFrameioAssetResponse,\n    IFrameioAuthenticationStatus,\n    FrameioAuthenticationInfo,\n    FrameioAdobeSusiInfo, IFrameioReviewLinkResponse, FrameioReviewLinksChangeEventParam\n} from './FrameioInterface';\nimport AssetReviewServiceInterface, {\n    IReviewServiceFrameLinkResponse\n} from '../interface/AssetReviewServiceInterface';\nimport FrameioBase from './FrameioBase';\nimport FrameioUser, { FrameioUserUpdater } from './FrameioUser';\nimport FrameioAccount, { FrameioAccountUpdater } from './FrameioAccount';\nimport FrameioAsset from './FrameioAsset';\nimport FrameioFile, { FrameioFileUpdater } from './FrameioFile';\nimport FrameioFolder, { FrameioFolderUpdater } from './FrameioFolder';\nimport FrameioProject, { FrameioProjectUpdater } from './FrameioProject';\nimport FrameioTeam, { FrameioTeamUpdater } from './FrameioTeam';\nimport FrameioVersionStack, { FrameioVersionStackUpdater } from './FrameioVersionStack';\nimport FrameioReviewLink, { FrameioReviewLinkUpdater } from './FrameioReviewLink';\nimport FrameioComment, { FrameioCommentUpdater } from './FrameioComment';\nimport { IUpdateSession } from '../core/UpdateSession';\nimport SAMError, { SAMErrorCode } from '../core/SAMError';\nimport { IEventMap } from '../core/ITypedEventEmitter';\nimport FrameioAuthorizationChangeEvent from './FrameioAuthorizationChangeEvent';\nimport TypedEventEmitter from '../core/TypedEventEmitter';\nimport FrameioReviewLinksChangeEvent, { SharedFrameioReviewLinksChangeEvent } from './FrameioReviewLinksChangeEvent';\n\n//----------------------------------------------------------------\n\ntype FrameioCloudSourceDocument = {\n    assetId: string;\n    assetRegion?: string;\n    repositoryId?: string;\n    documentId?: never;\n}\n\ntype FrameioLocalSourceDocument = {\n    documentId: string;\n    assetId?: never;\n    assetRegion?: never;\n    repositoryId?: never;\n}\n\n// When the source is a local-only document, you must provide only the documentId.\n//\n// When the source is a creative cloud document, you must provide an assetId,\n// you cannot provide a documentId, and you can optionally provide the assetRegion\n// and repositoryId for potential performance gains.\nexport type FrameioSourceDocument =  (FrameioCloudSourceDocument | FrameioLocalSourceDocument);\n\n//----------------------------------------------------------------\n\ntype FrameioReviewLinkForDocumentError = {\n    error: SAMError;\n    reviewLink?: never;\n}\n\ntype FrameioReviewLinkForDocumentReviewLink = {\n    error?: never;\n    reviewLink: FrameioReviewLink;\n}\n\n// getReviewLinksForDocument() returns a Promise<Array<FrameioReviewLinkForDocumentItem>>\nexport type FrameioReviewLinkForDocumentItem =  (FrameioReviewLinkForDocumentError | FrameioReviewLinkForDocumentReviewLink);\n\n//----------------------------------------------------------------\n\nexport interface FrameioContextEvents extends IEventMap {\n    frameioAuthorizationChange: FrameioAuthorizationChangeEvent;\n    frameioReviewLinksChange: FrameioReviewLinksChangeEvent;\n}\n\n//----------------------------------------------------------------\n\nexport default class FrameioContext extends TypedEventEmitter<FrameioContextEvents> implements ISAMObject {\n    /**\n     * @package - internal use only\n     */\n    _objectPool: ItemPool<FrameioBase> = new ItemPool(this._core, 'frameio');\n\n    /**\n     * @package - internal use only\n     */\n    _frameioInterface: FrameioInterface = new FrameioInterface(this);\n\n    /**\n     * @package - internal use only\n     */\n    _reviewServiceInterface: AssetReviewServiceInterface = new AssetReviewServiceInterface(this._core);\n\n    private _currentUserId: string | undefined;\n    private _currentUser: FrameioUser | undefined;\n    private _accounts: Array<FrameioAccount> | undefined;\n    private _reviewLinksForDocument: Map<string, WeakRef<Array<FrameioReviewLinkForDocumentItem>>> = new Map();\n\n    constructor(readonly _core: ISAMCorePrivate) {\n        super();\n    }\n    /**\n     * @package\n     *\n     * We _updateUserId() whenever the native FrameioAssetContext::authInfo_\n     * changes, to allow us to reset any user specific data when the user id\n     * changes.\n     */\n    _updateCurrentUserId(id: string | undefined) {\n        if (!id || (this._currentUserId !== id)) {\n            this._currentUserId = id;\n            this._currentUser = undefined;\n            this._accounts = undefined;\n            this._reviewLinksForDocument.clear();\n        }\n    }\n\n    private _mapKeyForSourceDocument(source: FrameioSourceDocument): string {\n        // We need a hash key for a Map<>,\n        // so use the assetId of cloud documents,\n        // and the documentId of local documents.\n        if (source.documentId) {\n            return source.documentId;\n        }\n\n        // ignore the optional assetRegion and repositoryId\n        return source.assetId!;\n    }\n\n    private _retainUntilTimeout(weak: WeakRef<Array<FrameioReviewLinkForDocumentItem>>, milliseconds = 2 * 60 * 1000) {\n        const obj = weak.deref();\n\n        // obj will be retained until the timeout fires\n        // because it's referenced in the handler.\n        setTimeout(function (): any { return obj; }, milliseconds);\n    }\n\n    _handleReviewLinksChangeEvent(json: string): void {\n        // after a successful FrameioReviewLink.updateReviewLink(),\n        // we use SAM.cpp to dispatch an event to all DOM's,\n        // so they can each update FrameioContext._reviewLinksForDocument\n        //\n        // For example, when ShareSheet creates a new review link,\n        // ShareSheet and Commenting want to update their cache.\n        //\n        // See also FrameioReviewLink._dispatchReviewLinksChangeEvent()\n\n        const param: FrameioReviewLinksChangeEventParam = JSON.parse(json);\n        const response: Partial<IFrameioReviewLinkResponse> = param.reviewLink;\n        const key: string = this._mapKeyForSourceDocument(param.source);\n\n        const session = this._objectPool.createUpdateSession<FrameioReviewLink>();\n        const reviewLink = FrameioReviewLinkUpdater.updateRemoteItem(session, response);\n        session.commit();\n\n        const weak = new WeakRef([ { reviewLink } ]);\n\n        this._reviewLinksForDocument.set(key, weak);\n        this._retainUntilTimeout(weak);\n\n        // let client know the reviewLinksForDocument has changed.\n        this.dispatch(SharedFrameioReviewLinksChangeEvent);\n    }\n\n    async isAuthenticated(): Promise<boolean> {\n        return await this._frameioInterface.isAuthenticated();\n    }\n\n    async authenticationStatus(): Promise<IFrameioAuthenticationStatus> {\n        return await this._frameioInterface.authenticationStatus();\n    }\n\n    // !!@ Consider making this package scoped\n    async getToken(): Promise<string> {\n        return this._frameioInterface.getToken();\n    }\n\n    async refreshToken(): Promise<string> {\n        return this._frameioInterface.refreshToken();\n    }\n\n    /* Call with void parameters to rely on native authentication.\n     * The return is a token.\n     */\n    async authenticate(info?: FrameioAuthenticationInfo): Promise<string> {\n        return await this._frameioInterface.authenticate(info);\n    }\n\n    async deauthenticate(): Promise<void> {\n        return await this._frameioInterface.deauthenticate();\n    }\n\n    async getCurrentUser(): Promise<FrameioUser> {\n        let user = this._currentUser;\n        if (!user) {\n            const response = await this._frameioInterface.getCurrentUser();\n            const session = this._objectPool.createUpdateSession<FrameioUser>();\n            user = FrameioUserUpdater.updateRemoteItem(session, response);\n            session.commit();\n\n            this._currentUser = user;\n        }\n        return user;\n    }\n\n\n    async getAccounts(): Promise<Array<FrameioAccount>> {\n        let accounts = this._accounts;\n        if (!accounts) {\n            const response = await this._frameioInterface.getAccounts();\n            const session = this._objectPool.createUpdateSession<FrameioAccount>();\n            accounts = FrameioAccountUpdater.updateRemoteItems(session, response);\n            session.commit();\n            this._accounts = accounts;\n        }\n\n        return accounts;\n    }\n\n    private _getLocalAncestors(id: string): Array<FrameioAsset> | undefined {\n        // Based on prior usage of the package, it's possible\n        // we can build ancestors from already local objects\n        // in the _objectPool. If so, return the completed\n        // array so getAncestors() can avoid the server call.\n        //\n        // However, if not all of the ancestors are locally available,\n        // make the server call to get the entire array.\n        const ancestors = new Array<FrameioAsset>();\n\n        for (;;) {\n            const asset = this._objectPool.getLocalItemById(id) as FrameioAsset;\n\n            if (asset === undefined) {\n                // At least one item isn't local,\n                // so we'll need to GET the ancestors from the server.\n                return undefined;\n            }\n\n            // add latest ancestor to front of array\n            ancestors.unshift(asset);\n\n            // walk up one link of the ancestor chain\n            if (asset.parentId) {\n                id = asset.parentId;\n                continue;\n            }\n\n            // we've reached the root asset of the project\n            break;\n        }\n        return ancestors;\n    }\n\n    async getAncestors(id: string): Promise<Array<FrameioAsset>> {\n        // ideally, the whole ancestor chain is already local,\n        // and we can fulfill this promise without a server call.\n        let ancestors = this._getLocalAncestors(id);\n\n        if (!ancestors) {\n            const response = await this._frameioInterface.getAncestors(id);\n            const session = this._objectPool.createUpdateSession<FrameioAsset>();\n\n            // IFrameioAssetResponse is a special case, as it corresponds to multiple classes\n            // inheriting from FrameioAsset ( FrameioFile, FrameioFolder, FrameioVersionStack ),\n            // so use a utility function to select the correct updater for the type.\n            //\n            // See also FrameioFolder.getChildren()\n            ancestors = response.map((asset: IFrameioAssetResponse) => frameioAssetUpdater(session, asset));\n\n            session.commit();\n        }\n\n        return ancestors;\n    }\n\n    async getReviewLinksForDocument(source: FrameioSourceDocument, refresh: boolean = true): Promise<Array<FrameioReviewLinkForDocumentItem>> {\n        const key: string = this._mapKeyForSourceDocument(source);\n        const weak = this._reviewLinksForDocument.get(key);\n        let result: Array<FrameioReviewLinkForDocumentItem> | undefined = weak ? weak.deref() : undefined;\n\n        if (!refresh && result) {\n            this._retainUntilTimeout(weak!); // non-null result means weak is also non-null\n            return result; // return cached result\n        }\n\n        // compute result from scratch\n        result = [];\n\n        // The Review Service maintains a database of FrameioReview links we've\n        // created maintained by our calls to ReviewServiceInterface.createReviewLinks()\n        // and ReviewServiceInterface.updateReviewLinks().\n\n        // Get the list of review links\n        const reviews: Array<IReviewServiceFrameLinkResponse> = await this._reviewServiceInterface.getReviewLinks(source);\n\n        // I'm uncertain of the list ordering, so sort it by date.\n        reviews.sort((a, b) => (b['repo:createdDate'] - a['repo:createdDate']));\n\n        // The id's associated with a review link may no longer be valid\n        // ( i.e. the link has been deleted ) or not currently valid\n        // ( i.e. we've logged into the wrong account ), so we need\n        // to filter the list to only containing currently valid\n        // review links.\n        //\n        // NOTE: As we cannot distinquish between no longer valid and\n        // not currently valid, it's not safe to\n        // ReviewServiceInterface.deleteReviewLinks() to clean up the\n        // list.\n\n        for (let i = 0; i < reviews.length; i++) {\n            const review = reviews[i];\n            const projectId = review['frameio:projectId'];\n            const reviewLinkId = review['frameio:reviewLinkId'];\n            const itemId = review['frameio:artifactId'];\n            const etag = review['repo:etag'];\n\n            // review is valid if we can obtain a reviewLink using reviewLinkId,\n            // and we can obtain an item using itemId.\n            //\n            // ShareSheet potentially shows toast when the most recent reviewLinks\n            // are invalid, so we push FrameioReviewLinkForDocumentError into\n            // result when there's an error validating review.\n            //\n            // Because validation is expensive, and because reviews[] grows\n            // unbounded, and because ShareSheet only cares whether there is\n            // 0 or 1 valid reviews, we stop after adding a valid reviewLink\n            // to result.\n\n            let reviewLink: FrameioReviewLink | undefined = undefined;\n\n            // obtain the reviewLink directly from Frame.io\n            try {\n                const response = await this._frameioInterface.getReviewLink(reviewLinkId);\n                const session = this._objectPool.createUpdateSession<FrameioReviewLink>();\n                reviewLink = FrameioReviewLinkUpdater.updateRemoteItem(session, response);\n                session.commit();\n            } catch (e) {\n                // we expect it to throw when a review has been disabled.\n            }\n\n            try {\n                if (!reviewLink) {\n                    // disabled reviewLink's are known to throw 403 errors,\n                    // so as a fallback, try to get the project, the project's\n                    // list of reviewLinks, and find reviewLinkId in the list\n                    // (disabled reviewLink's are known to be reachable this way)\n\n                    // project is cached in the object pool,\n                    // and project._reviewLinks is memoized,\n                    // so although we are in a loop,\n                    // each method should never hit the network more than once.\n                    const project = await this.getProject(projectId);\n                    const reviewLinks = await project.getReviewLinks();\n\n                    reviewLink = reviewLinks.find(({ id }) => (id === reviewLinkId));\n                }\n\n                if (reviewLink) {\n                    // Copy data that's on the Review Service and not Frame.io\n                    // into the reviewLink.\n                    reviewLink['_itemId'] = itemId;\n                    reviewLink['_etag'] = etag;\n\n                    // getItem() rejects when itemId isn't valid.\n                    await reviewLink.getItem();\n\n                    result.push({ reviewLink });\n                    break;\n                } else {\n                    const error = SAMError.create(SAMErrorCode.NOT_FOUND, `frameio:reviewLinkId = ${reviewLinkId} not found in projectId = ${projectId}`);\n                    result.push({  error });\n                }\n            } catch (error) {\n                result.push({ error });\n            }\n        }\n\n        const ref = new WeakRef(result);\n\n        // cache the newly computed result\n        this._reviewLinksForDocument.set(key, ref);\n        this._retainUntilTimeout(ref);\n\n        return result;\n    }\n\n\n    async getAccount(id: string): Promise<FrameioAccount> {\n        const accounts = await this.getAccounts();\n        let account = accounts.find(element => (element.id === id));\n\n        if (!account) {\n            const response = await this._frameioInterface.getAccount(id);\n            const session = this._objectPool.createUpdateSession<FrameioAccount>();\n            account = FrameioAccountUpdater.updateRemoteItem(session, response);\n            session.commit();\n        }\n\n        return account;\n    }\n\n    async getAsset(id: string): Promise<FrameioAsset> {\n        // avoid server call for local asset\n        let asset = this._objectPool.getLocalItemById(id) as FrameioAsset;\n\n        if (!asset) {\n            // fetch remote asset with a server call\n            const response = await this._frameioInterface.getAsset(id);\n            const session = this._objectPool.createUpdateSession<FrameioAsset>();\n            asset = frameioAssetUpdater(session, response);\n            session.commit();\n        }\n        return asset;\n    }\n\n    async getTeam(id: string): Promise<FrameioTeam> {\n        // avoid server call for local asset\n        let team = this._objectPool.getLocalItemById(id) as FrameioTeam;\n\n        if (!team) {\n            // fetch remote asset with a server call\n            const response = await this._frameioInterface.getTeam(id);\n            const session = this._objectPool.createUpdateSession<FrameioTeam>();\n            team = FrameioTeamUpdater.updateRemoteItem(session, response);\n            session.commit();\n        }\n        return team;\n    }\n\n    async getProject(id: string): Promise<FrameioProject> {\n        // avoid server call for local asset\n        let project = this._objectPool.getLocalItemById(id) as FrameioProject;\n\n        if (!project) {\n            // fetch remote asset with a server call\n            const response = await this._frameioInterface.getProject(id);\n            const session = this._objectPool.createUpdateSession<FrameioProject>();\n            project = FrameioProjectUpdater.updateRemoteItem(session, response);\n            session.commit();\n        }\n        return project;\n    }\n\n    async getComment(id: string): Promise<FrameioComment> {\n        // avoid server call for local asset\n        let comment = this._objectPool.getLocalItemById(id) as FrameioComment;\n\n        if (!comment) {\n            // fetch remote asset with a server call\n            const response = await this._frameioInterface.getComment(id);\n            const session = this._objectPool.createUpdateSession<FrameioComment>();\n            comment = FrameioCommentUpdater.updateRemoteItem(session, response);\n            session.commit();\n        }\n        return comment;\n    }\n\n    async getAdobeSusiInfo(): Promise<FrameioAdobeSusiInfo> {\n        return await this._frameioInterface.getAdobeSusiInfo();\n    }\n}\n\nexport function frameioAssetUpdater(session: IUpdateSession<FrameioBase>, asset: IFrameioAssetResponse): FrameioAsset {\n    // frame.io multiplexes asset.type's 'file', 'folder', 'version_stack' and 'bundle' into IFrameioAssetResponse,\n    // but we have separate FrameioFile, FrameioFolder, FrameioVersionStack classes that inherit from FrameioAsset.\n\n    if (asset.type === 'file') {\n        const fileSession = session as IUpdateSession<FrameioFile>;\n        return FrameioFileUpdater.updateRemoteItem(fileSession, asset);\n    } else if (asset.type === 'folder') {\n        const folderSession = session as IUpdateSession<FrameioFolder>;\n        return FrameioFolderUpdater.updateRemoteItem(folderSession, asset);\n    } else if (asset.type === 'version_stack') {\n        const versionStackSession = session as IUpdateSession<FrameioVersionStack>;\n        return FrameioVersionStackUpdater.updateRemoteItem(versionStackSession, asset);\n    }\n    throw SAMError.create(SAMErrorCode.UNSUPPORTED, `Invalid Frameio asset type ${asset.type}`);\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport SAMEvent from '../core/SAMEvent';\nexport const LIBRARY_DATA_CHANGED = 'library_data_changed';\nexport default class LibraryDataChangedEvent extends SAMEvent {\n\n    constructor() {\n        super(LIBRARY_DATA_CHANGED);\n    }\n}\n\nexport const LibraryDataChangedEventInstance = new LibraryDataChangedEvent();\n","/*************************************************************************\n*   ADOBE CONFIDENTIAL\n*\n*   Copyright 2024 Adobe\n*   All Rights Reserved.\n*\n*   NOTICE:  All information contained herein is, and remains\n*   the property of Adobe and its suppliers, if any. The intellectual\n*   and technical concepts contained herein are proprietary to Adobe\n*   and its suppliers and are protected by all applicable intellectual\n*   property laws, including trade secret and copyright laws.\n*   Dissemination of this information or reproduction of this material\n*   is strictly forbidden unless prior written permission is obtained\n*   from Adobe.\n**************************************************************************/\n\nimport SAMEvent from '../core/SAMEvent';\nexport const RESTRICT_EDIT_CHANGED = 'restrict_edit_changed';\nexport default class RestrictEditChangedEvent extends SAMEvent {\n\n    constructor() {\n        super(RESTRICT_EDIT_CHANGED);\n    }\n}\n\nexport const RestrictEditChangedEventInstance = new RestrictEditChangedEvent();\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\nimport path from 'path-browserify';\n\nimport { AssetLinks, RepositoryMetadata } from '../interface/RepositoryModel';\nimport LibraryInterface from '../interface/LibraryInterface';\nimport { RelType } from '../interface/LinkUtils';\nimport {\n    BookmarkData,\n    LibraryData,\n    LibraryRenditionGrid,\n    LibraryRole,\n    Ownership,\n    LibraryManifestId,\n    PublicLibraryId\n} from '../interface/LibraryModel';\nimport AdobeAsset from '../assets/AdobeAsset';\nimport { ISAMCorePrivate } from '../indexPrivate';\nimport { observable } from '../core/decorators';\nimport SAMError, { SAMErrorCode } from '../core/SAMError';\nimport ItemUpdater, { IItemUpdaterOptions } from '../core/ItemUpdater';\nimport PropertyUpdater, { IPropertyTypeMap } from '../core/PropertyUpdater';\nimport { LIBRARY_DATA_CHANGED, LibraryDataChangedEventInstance } from './LibraryDataChangedEvent';\nimport { RESTRICT_EDIT_CHANGED, RestrictEditChangedEventInstance } from './RestrictEditChangedEvent';\nimport { Permission } from '../interface/AssetModel';\nimport { lazyLoaded, LazyLoadManager, LoadStatus } from '../core/decorators/LazyLoadManager';\n\nexport type LibraryDataLoadState = 'NOT_LOADED' | 'LOADING' | 'LOADED';\n\ninterface ILibraryDataLoadInfo {\n    state: LibraryDataLoadState;\n    promise?: Promise<void>; // A promise that completes when resolve is called, meant for waiting for libraries to load\n    resolve?: () => void; // Call to resolve promise\n}\nexport default class Library extends AdobeAsset {\n    public isLibrary: boolean = true;\n\n    private _libraryInterface = new LibraryInterface(this._core);\n    private _libraryRoles?: LibraryRole[];\n    private _ownership?: Ownership;\n    private _legacyLibraryId?: LibraryManifestId | PublicLibraryId;\n    private _libraryDataLoadInfo: ILibraryDataLoadInfo = {\n        state: 'NOT_LOADED'\n    };\n    private _displayName?: string;\n    private _bookmark?: BookmarkData;\n    private _renditionGrid?: LibraryRenditionGrid;\n    private _isEditingRestricted: boolean | undefined;\n\n    constructor(\n        readonly _core: ISAMCorePrivate,\n        id: string,\n        metadata?: {\n            links?: AssetLinks;\n        }\n    ) {\n        super(_core, id, metadata);\n\n        // Overridden property.\n        // True to start with. If we have the metadata, we will update this.\n        this._needsRepoMetadata = true;\n\n        LazyLoadManager.manageLazyLoading(this, [ {\n            event: RestrictEditChangedEventInstance,\n            fetchData: this._refreshEditingRestricted\n        } ]);\n    }\n\n    /**\n     * @package -- for use in SAM.js only\n     */\n    // Check if melville data has been loaded at least once, not just repoMetadata\n    get _libraryLoaded(): boolean {\n        return this._libraryDataLoadInfo.state === 'LOADED';\n    }\n\n    /**\n     * @package -- for use in SAM.js only\n     * Set a promise to resolve when libraries are loaded.  Returns a resolve function that needs to be called after\n     * the library is loaded, or undefined if something else is already calling for melville data.\n     */\n    _setLibraryLoadState(state: LibraryDataLoadState): void  {\n        const { state: priorState } = this._libraryDataLoadInfo;\n        if (state === priorState) { return; }\n\n        this._libraryDataLoadInfo.state = state;\n\n        if (state === 'LOADED') {\n            if (this._libraryDataLoadInfo.resolve) {\n                this._libraryDataLoadInfo.resolve();\n            }\n        } else if (state === 'LOADING') {\n            let resolve;\n            this._libraryDataLoadInfo.promise = new Promise(r => { resolve = r; });\n            this._libraryDataLoadInfo.resolve = resolve;\n        } else if (state === 'NOT_LOADED') {\n            // Transitioning to NOT_LOADED means the data still needs to be loaded. Notify listeners\n            // in order to trigger lazy-loading. Unblock anything waiting on the Promise.\n            if (this._libraryDataLoadInfo.resolve) {\n                this._libraryDataLoadInfo.resolve();\n            }\n            this.emit(LIBRARY_DATA_CHANGED);\n        }\n    }\n\n    /**\n     * Starts loading Melville data for a single Library, if it hasn't already been loaded, or waits\n     * for in-flight load to complete.\n     *\n     * @parameter canRetry {boolean} (optional) For cases in Library that need to ensure Library\n     *         data loads, but it may have failed from a listing, it can try one extra time.\n     *\n     * @package -- for use in SAM.js only\n     */\n    async _waitForLibraryLoad(canRetry: boolean = false): Promise<void> {\n        this._populateLibraryDataIfNotLoading();\n        await this._libraryDataLoadInfo.promise;\n        if (canRetry && !this._libraryLoaded) {\n            await this._waitForLibraryLoad(false);\n        }\n        return this._libraryDataLoadInfo.promise;\n    }\n\n    @observable(LibraryDataChangedEventInstance)\n    get displayName(): string | undefined {\n        this._populateLibraryDataIfNotLoading();\n        // Melville will always have the correct name, whereas the RAPI .name will not have the name for libraries in sync groups.\n        return this._displayName;\n    }\n\n    /**\n     * Returns the Library's current roles.\n     *\n     */\n    @observable(LibraryDataChangedEventInstance)\n    public get roles(): LibraryRole[] | undefined {\n        this._populateLibraryDataIfNotLoading();\n        return this._libraryRoles;\n    }\n\n    @observable(LibraryDataChangedEventInstance)\n    public get renditionGrid(): LibraryRenditionGrid | undefined {\n        this._populateLibraryDataIfNotLoading();\n        return this._renditionGrid;\n    }\n\n    /**\n     * Makes a service request to update the Library's metadata, then updates local Library model.\n     */\n    async setRoles(roles: LibraryRole[] | LibraryRole) {\n        const newRoles = { roles: Array.isArray(roles) ? roles : [ roles ] };\n        await this._libraryInterface.updateMetadata(this.id, newRoles);\n        this._setLibraryLoadState('NOT_LOADED');\n        await this._populateLibraryDataIfNotLoading();\n    }\n\n    async _load({\n        repoMetadata,\n        appMetadata,\n        effectivePermission\n    }: {\n        repoMetadata?: RepositoryMetadata;\n        appMetadata?: any;\n        effectivePermission?: Permission;\n    } = {}): Promise<void> {\n        // When an ONS notification comes in, load the repoMetadata\n        await super._load({ repoMetadata, appMetadata, effectivePermission });\n        this._needsRepoMetadata = false;\n        // We also want the Melville data to be reloaded, so we mark it as out of date,\n        // and as soon as a getter is accessed, the melville data will lazy load.\n        this._setLibraryLoadState('NOT_LOADED');\n    }\n\n    /**\n     * Return whether the library is bookmarked (aka followed) by the user.\n     * Will return undefined if data has not been loaded yet.\n    */\n    // Blocked by CCXB-20127: Bookmark data may currently be out of date due to a caching issue in Melville.\n    // CCXC-20748: If we eventually support loading unbookmarked public libraries, bookmark data will already\n    // be present in the library data when unbookmarked. Thus, we will need to separately load the user's bookmarks to verify isBookmarked.\n    @observable(LibraryDataChangedEventInstance)\n    public get isBookmarked(): boolean | undefined {\n        this._populateLibraryDataIfNotLoading();\n        return this._libraryLoaded ? !!this._bookmark : undefined;\n    }\n\n    @observable(LibraryDataChangedEventInstance)\n    // TODO: Not yet part of public interface, need to follow up to see if _isPublicLink can be set instead.\n    // Warning: `this.isPublicLink` (from USSMetadata) is false for public libraries.\n    get _isPublic(): boolean | undefined {\n        // Warning: `ownership` is 'public' for a public library in most melville responses,\n        // such as to the 'public' end points, or GET /libraries/<manifestId>.\n        // However, GET /libraries/<assetId> will return 'incoming' for a public library,\n        // and there's no way to tell it is public from the response\n        // -- even the `id` is no longer the public library id but a new id.\n        // But as long as we don't fetch public libraries that way, this definition is fine.\n        // Warning2: `isPublicLink` from USS loaders is false for public libraries.\n        return this._libraryLoaded ? this._ownership === 'public' : undefined;\n    }\n\n    @observable(LibraryDataChangedEventInstance)\n    get ownership(): Ownership | undefined {\n        this._populateLibraryDataIfNotLoading();\n        return this._ownership;\n    }\n\n    /**\n     * @deprecated -- will be removed on or after 2024-12-01\n     */\n    // This legacy id is usually the dcx manifest id, but on public libraries, it will be a unique type of public library id.\n    @observable(LibraryDataChangedEventInstance)\n    public get libraryManifestId(): string | undefined {\n        this._populateLibraryDataIfNotLoading();\n        return this._legacyLibraryId;\n    }\n\n    // move calls moveLibrary without specifying restrictEdit, thus getting the default of \"team_view\"\n    async move(destFolder: AdobeAsset): Promise<void> {\n        return this.moveLibrary(destFolder);\n    }\n\n    /**\n     * Move a Library\n     * Reqired properties\n     * @param destFolder - The folder to move the library to\n     * Optional properties\n     * @param restrictEdit {boolean} (optional) If true, will tell Melville to move the library with TEAM_VIEW access.\n     *      If false, will tell Melville to move with TEAM_EDIT access. If undefined, it is up to Melville to decide.\n     */\n    async moveLibrary(destFolder: AdobeAsset, restrictEdit?: boolean): Promise<void> {\n        const libraryData = await this._libraryInterface.moveLibrary(this.cloudID, destFolder.cloudID, restrictEdit);\n\n        const session = this._core.hostAssetContext._assetPool.createUpdateSession<Library>('move library');\n        const libraryContext = await this._core.getLibraryContext();\n\n        if (libraryData.library_urn !== this.id) {\n            // Melville currently does a \"fake\" move using copy and delete.\n            // Melville team hopes to eventually turn this into a real move.\n            // For now we will just discard the old library and rely on ONS to create a new one in our pool.\n            session.queueDiscardedItem(this);\n        } else {\n            // If the cloudID didn't change, then it needs to be updated to reflect its new location\n            libraryContext._libraryUpdater.updateLocalItem(session, this, libraryData);\n        }\n        session.commit();\n    }\n\n    async rename(newName: string) {\n        await this._libraryInterface.updateMetadata(this.id, { name: newName });\n        this._setLibraryLoadState('NOT_LOADED');\n    }\n\n    /**\n     * Discard the library through melville, which also cleans up bookmarks.\n     * This changes its repo:state to DISCARDED, but it can later be restored or permanently deleted.\n     */\n    async discard(): Promise<void> {\n        if (this.isDiscarded) {\n            throw SAMError.create(SAMErrorCode.INVALID_OPERATION, 'Asset is already discarded');\n        }\n\n        await this._libraryInterface.discardLibrary(this.cloudID);\n        const libraryContext = await this._core.getLibraryContext();\n        const session = libraryContext._assetPool.createUpdateSession<Library>('discard library'); // tracks changes to the asset\n        // Update the local item with values from the remote item\n        this._core.hostAssetContext._adobeAssetUpdater.updateLocalItem(session, this, { 'repo:state': 'DISCARDED' });\n        session.commit(); // fire notifications for tracked changes\n    }\n\n    async restore(): Promise<void> {\n        if (!this.isDiscarded) {\n            throw SAMError.create(SAMErrorCode.INVALID_OPERATION, 'Cannot restore an asset that is not discarded');\n        }\n\n        await this._libraryInterface.restoreLibrary(this.cloudID);\n        const session = this._core.hostAssetContext._assetPool.createUpdateSession<Library>('restore library');\n        this._core.hostAssetContext._adobeAssetUpdater.updateLocalItem(session, this, { 'repo:state': 'ACTIVE' });\n        session.commit();\n    }\n\n    /*\n     * Override AdobeAsset._copy() so that both AdobeAsset.copy() and AdobeAsset.duplicate()\n     * get handled by Melville. Melville handles rename on conflict.\n     */\n    protected async _copy(destFolder: AdobeAsset, destName?: string): Promise<Library> {\n        return this.copyLibrary(destFolder, destName);\n    }\n\n    /**\n     * Copy a Library\n     * Optional properties\n     * @param destFolder - If destFolder is undefined then the library will be copied in the User's personal library\n     *     folder\n     * @param destName - If destName is undefined then the current library name will be preserved\n     * @param restrictEdit (optional) If true, copies the library with TEAM_VIEW access. If false, copies the library\n     *      with TEAM_EDIT access. If undefined, Melville will determine the access.\n     * @returns - The new copied Library\n     */\n    async copyLibrary(destFolder?: AdobeAsset, destName?: string, restrictEdit?: boolean): Promise<Library> {\n        let newName = destName ? destName : this.name;\n        // get name without file extension if any (this.name has .cclibc)\n        newName = path.basename(newName, path.extname(newName));\n        // Melville will fix any name conflicts, unlike R-API\n        const libraryData = await this._libraryInterface.copyLibrary(this.cloudID, newName, destFolder?.cloudID, restrictEdit);\n\n        const session = this._core.hostAssetContext._assetPool.createUpdateSession<Library>('copy library');\n        const libraryContext = await this._core.getLibraryContext();\n        const library = libraryContext._libraryUpdater.updateRemoteItem(session, libraryData);\n        session.commit();\n\n        return library;\n    }\n\n    /**\n     * Makes a service request to bookmark the library, then updates local Library model.\n     * Applies to project (aka team) and shared private libraries. Public libraries not yet supported.\n     */\n    async bookmark(): Promise<void> {\n        await this._waitForLibraryLoad(true);\n        if (this.isBookmarked) { return; }\n\n        let bookmarkData: Partial<BookmarkData> = {};\n        if (this._isPublic) {\n            return Promise.reject('Bookmarking public libraries not implemented yet.');\n        } else {\n            bookmarkData = {\n                id: this._legacyLibraryId,\n                type: 'collab',\n                urn: this.cloudID\n            };\n        }\n\n        const { bookmarks } = await this._libraryInterface.bookmarkLibraries([ bookmarkData ]);\n        const bookmark = bookmarks.find(bookmark => bookmark.id === this._legacyLibraryId);\n        const libraryContext = await this._core.getLibraryContext();\n        const session = libraryContext._assetPool.createUpdateSession<Library>('bookmark library');\n        libraryContext._libraryUpdater.updateLocalItem(session, this,  { bookmark });\n        session.commit();\n    }\n\n    /**\n     * Makes a service request to remove a bookmark from the library, then updates local Library model.\n     */\n    async unbookmark(): Promise<void> {\n        await this._waitForLibraryLoad(true);\n\n        const bookmarkId = this._bookmark?.id;\n        if (!bookmarkId) { return; }\n\n        await this._libraryInterface.unbookmarkLibrary(bookmarkId); // 404 means it's already unbookmarked\n        const libraryContext = await this._core.getLibraryContext();\n        const session = libraryContext._assetPool.createUpdateSession<Library>('unbookmark library');\n        libraryContext._libraryUpdater.updateLocalItem(session, this,  { bookmark: undefined });\n        session.commit();\n    }\n\n    // calls out to melville to get the library data\n    private async _populateLibraryDataIfNotLoading(): Promise<void> {\n        if (this._libraryDataLoadInfo.state === 'NOT_LOADED') {\n            this._setLibraryLoadState('LOADING');\n            const libraryContext = await this._core.getLibraryContext();\n            const libraryData = await this._libraryInterface.getLibraryData(this.id);\n\n            const session = this._core.hostAssetContext._assetPool.createUpdateSession<Library>();\n            libraryContext._libraryUpdater.updateLocalItem(session, this, libraryData);\n            this._setLibraryLoadState('LOADED');\n            session.commit();\n        }\n    }\n\n    /**\n     * Returns `true` if the Library has inherited editing/sharing rights blocked, `false` if it is not. Direct\n     * collaborators and USM users are not affected.\n     *\n     * Lazy-loaded: the property will be `undefined` on initial access, and will contain the old value when it is being\n     * updated. Use Mobx to monitor for changes, or subscribe to 'restrict_edit_changed' event.\n     */\n    @lazyLoaded(RestrictEditChangedEventInstance, '_isEditingRestricted')\n    get isEditingRestricted(): boolean | undefined {\n        return this._isEditingRestricted;\n    }\n\n    /**\n     * Sets or adds the ACL entries to block inherited editing/sharing rights to this Library. Clients MUST add the\n     * current user as a direct editor collaborator before calling or else no one can remove the restriction except\n     * admins.\n     *\n     * @param isRestricted {boolean} true to restrict inherited editing/sharing permissions, false to allow inherited\n     *      editing/sharing permissions.\n     * @param addCurrentUserAsEditor {boolean} When setting isRestricted to true, also adds the current user\n     *      to have direct edit/sharing permissions. This is so Share Sheet can detect if the user is already added\n     *      as an address book contact, in order to avoid duplicate ACEs for the same user.\n     */\n    async setEditingRestricted(restrictEdit: true, addCurrentUserAsEditor: boolean): Promise<void>;\n    // eslint-disable-next-line no-dupe-class-members\n    async setEditingRestricted(restrictEdit: false): Promise<void>;\n    // eslint-disable-next-line no-dupe-class-members\n    async setEditingRestricted(restrictEdit: boolean, addCurrentUserAsEditor?: boolean): Promise<void> {\n        await this._ensureLink(RelType.AC_POLICY);\n        const assetInterface = await this._getAssetInterface();\n        await assetInterface.setEditingInheritanceRestricted(restrictEdit, addCurrentUserAsEditor);\n        this._isEditingRestricted = restrictEdit;\n        LazyLoadManager.updatedExternally(this, RESTRICT_EDIT_CHANGED);\n    }\n\n    private async _refreshEditingRestricted(): Promise<void> {\n        await this._ensureLink(RelType.AC_POLICY);\n        const assetInterface = await this._getAssetInterface();\n        this._isEditingRestricted = await assetInterface.getEditingInheritanceRestricted();\n    }\n\n    /**\n     * @package -- only for use in SAM.js\n     */\n    async _reloadPermissions(): Promise<void> {\n        // When policy change is detected, mark restrictEdit data stale. Meanwhile, leave the last known state of\n        // _isEditingRestricted unchanged so it doesn't cause the UI to flash when the toggle is being changed.\n        LazyLoadManager.setLoadStatus(this, RESTRICT_EDIT_CHANGED, LoadStatus.NotLoaded);\n        return super._reloadPermissions();\n    }\n}\n\n// These are properties specific to melville that are always safe to update as they will not overwrite RAPI data.\n// These properties should match LibrarySpecificData.\nconst safePropertyUpdaterTypes: IPropertyTypeMap = {\n    '_bookmark': { name: 'bookmark', format: 'object' },\n    '_libraryRoles': { name: 'roles', format: 'object',  isArray: true },\n    '_ownership': 'ownership',\n    '_legacyLibraryId': 'id',\n    '_renditionGrid': { name: 'rendition_grid', format: 'object' },\n    '_displayName': 'name', // May differ from AdobeAsset.name for libraries in sync groups\n};\n\n// These melville properties will overwrite RAPI data. This is not always safe to do.\n// Know which melville call you are making to know if the data may be stale, in which which case you should only pass LibrarySpecificData to the PropertyUpdater.\n// Note that safePropertyUpdaterTypes and rapiOverridesPropertyUpdaterTypes should be mutually exclusive.\nconst rapiOverridesPropertyUpdaterTypes: IPropertyTypeMap = {\n    '_etag': 'manifest_etag',\n    '_path': 'storage_path',\n    '_version': 'version',\n    '_created': { name: 'created_date', format: 'date_as_number' },\n    '_modified': { name: 'modified_date', format: 'date_as_number' },\n    '_discarded': { name: 'archived_date', format: 'date_as_number' },\n    '_createdBy': 'created_by',\n    '_discardedBy': 'archived_by',\n    '_appMetadata._data': {\n        name: 'application_metadata',\n        // Use object_subset format to avoid unnecessary change events. E.g., if _appMetadata.data is\n        // `{ 'shell:visibility': 'hiddenSelf', foo: 32 }` and the listing contains\n        // `{ 'shell:visibility': 'hiddenSelf' }` then the _mergeData will cause no change, but using format\n        // 'object', isEqual() will see source and dest aren't equal and thus assume that a change did occur.\n        format: 'object_subset',\n        // Only update the appMetadata fields that are available from this data source\n        set: (parsedSource, dest) => {\n            const asset = dest as AdobeAsset;\n            asset.appMetadata._mergeData(parsedSource);\n        }\n    },\n\n    // TODO: These will need to be verified that they match the format of the repo metadata if we need them:\n    // '_storageRegion': { name: 'region', get: getUSSStorageRegion, format: 'string' }, // getUSSStorageRegion will uppercase 'va6c2' for consistency. are the rest of the values matching USS?\n    // '_type': 'dc:format', // document_type?\n    // '_storageAssignee': { name: 'storage_assignee', format: StorageAssigneeFormat },\n    // '_permissions': { get: getPermission, format: 'number' },\n    // '_isShared': { name: 'isShared', format: 'boolean' },\n    // '_isSharedWithYouAsset': { name: 'sharedViaInvite', format: 'boolean' },\n    // PropertyUpdater reads from _appMetadata._data for comparison\n    // '__links': { name: '_links', format: 'object' },\n    // TODO: Fill in other LibraryData properties as needed\n};\n\nconst propertyUpdaterTypes: IPropertyTypeMap = { ...safePropertyUpdaterTypes, ...rapiOverridesPropertyUpdaterTypes };\n\nconst libraryItemUpdaterOptions: IItemUpdaterOptions<Library, Partial<LibraryData>> = {\n    localItemType: Library,\n    remoteIdProperty: 'library_urn',\n    // Any changes to these properties will trigger watchers of LIBRARY_DATA_CHANGED.\n    // Other properties updated will trigger the  default 'change' event.\n    changeEventMap: new Map([\n        [ '_libraryRoles', LibraryDataChangedEventInstance ],\n        [ '_displayName', LibraryDataChangedEventInstance ],\n        [ '_legacyLibraryId', LibraryDataChangedEventInstance ],\n        [ '_bookmark', LibraryDataChangedEventInstance ],\n        [ '_ownership', LibraryDataChangedEventInstance ],\n        [ '_renditionGrid', LibraryDataChangedEventInstance ],\n        [ '_ownership', LibraryDataChangedEventInstance ],\n    ]),\n    // Mapping LibraryData to Library\n    propertyUpdater: new PropertyUpdater(propertyUpdaterTypes)\n};\n\nexport const LibraryUpdater = new ItemUpdater<Library, Partial<LibraryData>>(libraryItemUpdaterOptions);\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport type { IItemFilter } from '../core/ItemFilter';\nimport { default as Library } from './Library';\nimport ImplicitAdobeAssetFilterBase from '../assets/ImplicitAdobeAssetFilterBase';\n\n/**\n * Internal filter that is for ensuring only libraries that are not hidden, discarded, etc. are shown in Library lists.\n * The Implicit Filter determines the nature of the LibrarySource.\n */\nexport default class ImplicitLibraryFilter extends ImplicitAdobeAssetFilterBase implements IItemFilter<Library> {\n\n    constructor() {\n        super({ _isSharedWithYou: true });\n    }\n\n    // used by ItemList and ItemLoaderState and is called when asset change notifications come in to check if the asset is still eligible to be on a particular list\n    matches(item: Library): boolean {\n        if (!item.isLibrary) {\n            return false;\n        }\n\n        return super.matches(item);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { IAppMetadata } from './RepositoryModel';\n\n// `_fc` is short for \"from cache\". It signals whether or not the object is fetched from the Melville cache (true) or from the data source (false)\nexport type LibraryRenditionGrid = {\n    main?: LibraryRenditionData;\n    tiles?: LibraryRenditionData[];\n    _fc?: boolean;\n};\n\nexport type LibraryRenditionData = {\n    type: 'href' | string; // Will be href if the rendition is a link or a specific type (application/vnd.adobe.element.colortheme+dcx)\n    rendition_mimetype?: string;\n    rendition: any; // can be a link or json\n    elementId?: string;\n    elementType?: string;\n};\n\n/**\n * This field reflects legacy behavior from USS, so try to use storage:assignee, path, etc. if it is more applicable.\n * A few things to note:\n * 'private' is a library owned by the user and stored in the user's storage\n * 'incoming' is a bookmarked library in user or org storage, that is not owned by the session user and the user does not have read access to the directory\n * 'team' is a project library in either ESM or USM. Could by owned by session user, or not. Could be bookmarked, or not. (e.g. can be returned by the 'owner=incoming' or 'owner=other' filter.)\n * 'public' is any library owned by someone else that was shared publicly by link, and which the session user is following.\n * The rest, I am unsure if they are really returned. https://jira.corp.adobe.com/browse/CCXB-21079\n */\n// https://git.corp.adobe.com/Stormcloud/melville/blob/integration/com.adobe.melville.core/src/main/java/com/adobe/melville/derivables/ownership/OwnershipDeriverImpl.java\n// https://git.corp.adobe.com/Stormcloud/melville/blob/integration/com.adobe.melville.core/src/main/java/com/adobe/melville/dto/library/LibraryOwnershipScope.java#L45\nexport type Ownership = 'private' | 'public' | 'incoming' | 'outgoing' | 'team' | 'discovery' | 'other';\n\ntype Collaboration = {\n    rootURN?: string;\n    ownerId?: string;\n    state?: string;\n    collaborators?: any;\n    invitations?: any;\n    public?: boolean;\n    hasAdmin?: boolean;\n    _fc?: boolean;\n};\n\nexport type LibraryRole = {\n    type: 'brand' | 'cme' | 'cm_training_set' | string; // 'cme' is legacy type.\n    usage?: string;\n    priority?: string;\n};\n\n\nexport type BookmarkData = {\n    id: LibraryManifestId | PublicLinkId,\n    type?: string,\n    url?: string, // public links cdn url for public libraries\n    urn?: string, // in collab bookmarks, will be added to the public bookmarks.\n    role?: string,\n    can_share?: boolean,\n    can_comment?: boolean,\n    created?: number,\n    _fc?: boolean\n};\n\nexport type BookmarksResponse = {\n    bookmarks: BookmarkData[],\n    _fc?: boolean\n};\n\nexport type GroupData = {\n    id?: string;\n    name: string;\n    classifier?: string;\n    order: string;\n    created_date?: number;\n    modified_date?: number;\n    parent_id?: string;\n    // In the schema, but not yet supported by melville:\n    localized_names?: { [s: string]: string };\n    sourceRef?: string; // Only present in published libraries.\n};\n\nexport type LibraryAssetId = string; // the urn used as the global asset identifier. This will be the id we use moving forwards.\n// Legacy IDs:\nexport type LibraryManifestId = string; // the id of the dcx manifest, previously used as the library id (except on public libraries)\nexport type PublicLibraryId = string; // A special id for public libraries that looks like '1UIWQK2SZ5GWPJPLJMNVJS154OMEFF'\nexport type PublicLinkId = string; // Currently for public libraries, the link is its own entity with its own permissions and id. Has the same format as a manifest id.\n\ntype LibraryRemoteIdProperty = {\n    library_urn: LibraryAssetId; // Equivalent to the asset id or cloudID. Required in the updater to identify or create the item in the pool.\n};\n\n// This data is always safe to pass to LibraryUpdater, as it will not overwrite RAPI data.\n// These properties should be updated in Library > safePropertyUpdaterTypes.\nexport type LibrarySpecificData = LibraryRemoteIdProperty & {\n    id: LibraryManifestId | PublicLibraryId;\n    bookmark?: BookmarkData;\n    name: string; // Gets saved to _displayName instead of _name so it does not overwrite RAPI data.\n    ownership: Ownership;\n    roles: LibraryRole[];\n}\n\nexport type ParentAssetId = string;\ntype ParentIMSId = string;\nexport type StorageAssignee = { // the same as RepositoryModel.Assignee\n    id: ParentIMSId;\n    type: 'user' | 'org';\n};\n\nexport type LibraryData = LibrarySpecificData & {\n    toolkit_id?: string;\n    storage_used?: number;\n    document_id?: string;\n    document_type?: string;\n    creator?: string;\n    org_id?: ParentIMSId; // Equivalent to storage_assignee?.type === 'org' && storage_assignee.id. Only present on project libraries in ESM.\n    workspace_name?: string;\n    workspace_urn?: ParentAssetId; // legacy property kept for backwards compatibility. Use the newer parent_assetId.\n    application_metadata?: IAppMetadata; // seems to be returned on USM or ESM project libraries, regardless of the list selector\n    created_date: number;\n    modified_date: number;\n    version: string;\n    region?: string;\n    storage_path?: string;\n    elements_count: number;\n    removed_elements_count: number;\n    document_elements_count?: number;\n    rendition_grid?: LibraryRenditionGrid;\n    collaboration?: Collaboration;\n    asset_acl: any;\n    details?: {\n        manifest_id: LibraryManifestId; // Only place to find the manifest id on public libraries, but it is not used for anything.\n        num_elements: number;\n        num_documentation_elements: number;\n        num_archived_elements: number;\n    };\n    groups?: GroupData[];\n    _links: MelvilleLinks;\n    searchable?: boolean;\n    raw_name?: string;\n    renditionGridMissing?: boolean;\n    assetSubType?: string;\n    _fc?: boolean;\n    manifest_etag?: string; // This might not be present on older libraries\n    is_searchable?: boolean;\n    parent_assetId?: ParentAssetId; // any parent urn, whether project, sync group, or other folder. This should be mapped to the Asset's _ancestorIDs, but at the moment there is no client need to expose this.\n    archived_date?: number;\n    archived_by?: string;\n    storage_assignee?: StorageAssignee; // will not be present on public libraries\n    'firefly#cme'?: any;\n    created_by?: string;\n};\n\nexport type MelvilleLink = {\n    href: string;\n    rel: string;\n    templated?: boolean;\n    type?: string; // did not see this returned in reality\n}\n\nexport type MelvilleLinks = {\n    [key: string]: MelvilleLink;\n}\n\nexport type LibraryListLinks = MelvilleLinks & {\n    page: MelvilleLink;\n    next: MelvilleLink;\n};\n\nexport type LibrariesResponse = {\n    total_count: number;\n    libraries: LibraryData[];\n    _page: {\n        orderBy: string,\n        start: string,\n        next: string,\n        count: 0,\n        type: string,\n        property: string\n    };\n    _links: LibraryListLinks;\n}\n\nexport type AccessOption = 'team_edit' | 'team_view' | 'invite_only';\n\nexport type CopyLibraryRequest = {\n    source: string;\n    name: string;\n    access?: AccessOption;\n    parent_assetId?: string;\n}\n\nexport type Guideline = {\n    text: string;\n}\n\nexport type ResourceDesignator = {\n    reltype: string;\n    revision: string;\n    component_id: string;\n}\n\nexport type BrandCopyGuidelines = {\n    toneOfVoice: Guideline[];\n    coreValues: Guideline[];\n    uniqueAttributes: Guideline[];\n    frequentKeywords: Guideline[];\n    guidelines: Guideline[];\n    restrictions: Guideline[];\n    additionalGuidelines: Guideline[];\n};\n\n\nexport type CreateLibraryOptions = {\n    syncCreate?: boolean; // If true, the library will be created with invocation_mode=sync. Otherwise, it will be created with invocation_mode=async\n    name: string;\n    parent_assetId?: string;\n    roles?: LibraryRole[];\n    source?: string;\n    self?: string;\n    access?: AccessOption;\n    repository?: string;\n    'firefly#cme'?: {\n        [key: string]: any;\n    },\n    'brand#copyGuideLines'?: {\n        brandCopyGuidelines: BrandCopyGuidelines\n    },\n    'library#description'?: {\n        [key: string]: any;\n    },\n    includeResources?: ResourceDesignator[];\n};\n\nexport type CreatePersonalLibraryData = Pick<CreateLibraryOptions, 'name' | 'roles'>;\nexport type CreateProjectLibraryData = Pick<CreateLibraryOptions, 'name' | 'roles'> & { restrictEdit?: boolean };\n\nexport type MoveLibraryRequest = {\n    self: string;\n    parent_assetId: string;\n    'repo:manifestPatch': { op: 'replace', path: '/id', value: string }[];\n    access?: AccessOption;\n}\n\nexport enum LibraryOrderBy {\n    MODIFIED_DATE = 'modified_date',\n    CREATED_DATE = 'created_date',\n    NAME = 'name' // actually displayName\n}\n\n/**\n * Enum for library owner filter\n * (If you update this list, also update LibraryFilter.matches/getRelationToFilter.)\n * @enum {string}\n */\nexport enum LibraryOwnerFilter {\n    /**\n     * Personal libraries created in User Storage that are specifically stored inside the sync group: `/assets/adobe-libraries`\n     * Excludes CCI Project Libraries.\n     */\n    Personal = 'private',\n    /**\n     * Bookmarked public libraries.\n     * Currently will be ignored if combined with other ownership types.\n     */\n    Public = 'public',\n    /**\n     * Bookmarked incoming libraries. This includes:\n     * - Libraries shared directly with the user that the user has accepted the invite to\n     * - CCI Project Libraries which live in User Storage (`/users/{userId}` in ESM, `/` in USM and for unified users)\n     * - Project Libraries the user has followed (After SMU, these will all live in `/projects/{projectName}`)\n     */\n    Incoming = 'incoming',\n    /**\n     * Everything the user has acccess to that is not in User Storage, except public libraries.\n     * Includes: Project libraries, Incoming libraries (except CCI Project Libraries since they are in User Storage)\n     * Excludes: Public libraries, CCI Project Libraries, Private Libraries\n     */\n    Discovery = 'discovery',\n    /**\n     * A subset of 'discovery' that excludes already bookmarked libraries.\n     */\n    // Other = 'other',\n    /**\n     * All of the above except public libraries currently (until supported by USS).\n     * If combined with other owner types, the others will be ignored.\n     */\n    // All = 'all'\n}\n\nexport enum LibraryProjectFilterEnum {\n    /**\n     * Include all project libraries.\n     */\n    All = 'all',\n    /**\n     * Do not include any project libraries.\n     */\n    None = 'none',\n    /**\n     * Include project libraries that the user is NOT a member of.\n     */\n    // Other = 'other'\n}\n/**\n * Project filter supports a project id or any value in the LibraryProjectFilterEnum\n */\nexport type LibraryProjectFilter = LibraryProjectFilterEnum | ProjectAssetId;\n\nexport enum LibraryRolesFilter {\n    /**\n     * Include libraries that have no roles\n     */\n    None = 'none',\n    /**\n     * Include libraries that have at least one role where role.type === 'brand'\n     */\n    Brand = 'brand'\n    // CME = 'cme', // will return legacy cme libraries that are otherwise hidden. Not exposed to clients.\n    // CMTrainingSet = 'cm_training_set'\n}\n\ntype CommaDelimitedString = string;\n/**\n * Selectors determine what data is returned in the libraries response. You may combine multiple in a comma delimited list.\n * default: only base data for a library (You do not need to specify this to get default data from the other selectors.)\n * rendition_grid: adds `rendition_grid` and `renditionGridMissing` to default data\n * collaboration: adds `collaboration` to default data\n * groups: adds `groups` to default data\n * details: adds `details` to the default data\n * app_metadata: <needs to be tested. `application_metadata` appears on team libraries without using this.>\n */\ntype LibrarySelectors = 'default' | 'details' | 'collaboration' | 'groups' | 'rendition_grid' | 'app_metadata' | CommaDelimitedString;\nexport type OwnerParameters = LibraryOwnerFilter | CommaDelimitedString;\ntype ProjectAssetId = string; // urn of the project\ntype TeamParameters = LibraryProjectFilter;\ntype LibraryCapabilities = 'write' | CommaDelimitedString;\nexport type RolesParameters = LibraryRolesFilter | CommaDelimitedString;\ntype ToolkitId = string;\ntype ToolkitParameter = 'all' | 'none' | ToolkitId | CommaDelimitedString;\ntype OrderBy = LibraryOrderBy.NAME | LibraryOrderBy.MODIFIED_DATE | LibraryOrderBy.CREATED_DATE | '-name' | '-created_date' | '-modified_date' | CommaDelimitedString; // Default: modified_date. Sorting is not available for public libraries.\n/**\n * Query parameters from the GET /libraries endpoint via Melville's API\n * @see https://git.corp.adobe.com/pages/Stormcloud/apidocs/?urls.primaryName=melville#/Libraries/getLibraries\n*/\nexport type LibraryListParameters = {\n    owner?: OwnerParameters;\n    team?: TeamParameters;\n    roles?: RolesParameters;\n    toolkit?: ToolkitParameter;\n    selector?: LibrarySelectors;\n    capabilities?: LibraryCapabilities;\n    workspace?: string;\n    start?: number; // paging not available for public libraries. Default if undefined: 0. Required if there is a limit.\n    limit?: number; // paging not available for public libraries. Default if undefined: 50. Limits greated than 50 will be capped at 50.\n    orderBy?: OrderBy;\n};\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { LibraryOrderBy } from '../interface/LibraryModel';\nimport { compareStrings, compareValues, createItemOrderFactory, IComparatorMap } from '../core/ItemOrder';\n\nimport Library from './Library';\n\nexport type LibraryOrderField =\n    | 'name'\n    | 'created'\n    | 'modified';\n\nexport const OrderFieldToLibraryOrderBy: { [key in LibraryOrderField]: LibraryOrderBy} = {\n    'name': LibraryOrderBy.NAME,\n    'created': LibraryOrderBy.CREATED_DATE,\n    'modified': LibraryOrderBy.MODIFIED_DATE\n};\n\n// Appropriate comparator is used in order.sortItems when copying or updating ItemLists,\n// which occurs when a page is loaded and the ItemLoaderState changes.\nconst OrderFieldToComparator: IComparatorMap<Library, LibraryOrderField> = {\n    name(a: Library, b: Library): number {\n        // LibraryOrder is only used on lists from LibrarySource, where LibraryData from melville should already be loaded.\n        // (But just in case, this falls back to repoMetadata name, though this wouldn't work properly for libraries in sync groups.)\n        return compareStrings(a.displayName || a.name, b.displayName || b.name);\n    },\n\n    created(a: Library, b: Library): number {\n        return compareValues(a.created, b.created);\n    },\n\n    modified(a: Library, b: Library): number {\n        return compareValues(a.modified, b.modified);\n    }\n};\n\nexport default class LibraryOrder extends createItemOrderFactory(OrderFieldToComparator) {\n    static default = new LibraryOrder('descending', 'modified');\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport type { IItemFilter, ItemFilterRelation } from '../core/ItemFilter';\nimport { default as Library } from './Library';\nimport { LibraryOwnerFilter, LibraryProjectFilter, LibraryRolesFilter, LibraryProjectFilterEnum, Ownership } from '../interface/LibraryModel';\nimport SAMError, { SAMErrorCode } from '../core/SAMError';\n\nexport function checkSetOverlap(newValuesSet: Set<string>, existingValuesSet: Set<string>): ItemFilterRelation {\n    // equivalent to `const intersection = newValuesSet.intersection(existingValuesSet);` but typescript is outdated and doesn't recognize the method.\n    const intersection = new Set([ ...existingValuesSet ].filter(x => newValuesSet.has(x)));\n    const subset = intersection.size === newValuesSet.size;\n\n    if (subset) { return 'subset';} // all new values are in existing values\n    if (intersection.size > 0) { return 'unknown'; } // some overlap\n    return 'disjoint'; // no overlap since intersection.size === 0\n}\n\n// Equivalent to `diff = setA.symmetricDifference(setB);`, but typescript is outdated and doesn't recognize the method.\nfunction getSetDifference(setA: Set<string>, setB: Set<string>): Set<string> {\n    // Create a new set to store the non-overlapping values\n    const diff = new Set<string>();\n\n    // Add values from setA that are not in setB\n    for (const value of setA) {\n        if (!setB.has(value)) { diff.add(value); }\n    }\n\n    // Add values from setB that are not in setA\n    for (const value of setB) {\n        if (!setA.has(value)) { diff.add(value); }\n    }\n\n    return diff;\n}\n\n/**\n * Filter options for libraries.\n */\nexport interface LibraryFilterOptions {\n    owner?: LibraryOwnerFilter[];\n    roles?: LibraryRolesFilter[];\n    project?: LibraryProjectFilter;\n}\n\n/**\n * Internal filter that is for defining the ItemSource(s).\n * It contains both the parameters sent in the server request, and the filters used on the returned item data.\n * e.g. The LibrarySource should return libraries that are private, incoming, etc.\n */\nexport default class LibraryFilter implements IItemFilter<Library> {\n    _hash: string | undefined;\n    _owner: Set<LibraryOwnerFilter>;\n    _roles: Set<LibraryRolesFilter> | undefined;\n    _project: LibraryProjectFilter | undefined;\n\n    /* Static filters that represent typical filters used in the UI. */\n\n    // Contains all of the user's libraries, including private, followed project libraries, and libraries the user has accepted an invite to.\n    // In the future, this will also include followed public libraries. (USS does not currently support adding public to the query.)\n    static AllLibraries = new LibraryFilter({\n        // we don't use LibraryOwnerFilter.All query param because it includes unfollowed business storage libraries\n        owner: [ LibraryOwnerFilter.Incoming, LibraryOwnerFilter.Personal ]\n    });\n\n    static DEFAULT = LibraryFilter.AllLibraries;\n\n    constructor(readonly filterOptions: LibraryFilterOptions = {}) {\n        this._project = filterOptions.project;\n        if (filterOptions.roles && filterOptions.roles.length > 0) {\n            this._roles = new Set([ ...(filterOptions.roles) ]);\n        }\n        this._owner = filterOptions.owner ? new Set([ ...filterOptions.owner ]) : LibraryFilter.DEFAULT._owner;\n        if (this._owner.size > 1) {\n            if (this._owner.has(LibraryOwnerFilter.Public)) {\n                // This is the case temporarily until melville supports public libraries in the same query.\n                throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'Public libraries cannot be combined with other ownership types.');\n            }\n            if (this._owner.has(LibraryOwnerFilter.Discovery) && this._owner.has(LibraryOwnerFilter.Incoming)) {\n                throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'Discovery and Incoming are redundant, as Incoming is a subset of Discovery.');\n            }\n        }\n    }\n\n    // Used in ItemSource._getListHash to identify the list.\n    get hash(): string {\n        if (!this._hash) {\n            this._hash = [\n                `owner=${[ ...this._owner ].sort().join(',')}`,\n                this._roles ? `roles=${[ ...this._roles ].sort().join(',')}` : undefined,\n                this._project ? `project=${this._project}` : undefined\n            ].filter(x => x).join(':');\n        }\n        return this._hash;\n    }\n\n    /**\n     * Checks if an item matchers the filter. (May be used by ItemList and ItemLoaderState, and is called when asset change notifications\n     * come in to check if the asset is still eligible to be on a particular list.)\n     */\n    matches(item: Library): boolean {\n        // If a library has not loaded melville data, it is not considered a match.\n        // We also make sure not to trigger lazy loading on an unloaded library, as that should only be triggered by the client.\n        if (!item.isLibrary || item._libraryLoaded === false) {\n            return false;\n        }\n\n        const passesOwnerFilter = this._owner.has(item.ownership as LibraryOwnerFilter)\n            // 'ownership' field can be 'incoming' or 'team' for followed project libraries. We are trying to move away from relying on this field,\n            // so this just checks for a collab bookmark.\n            || (this._owner.has(LibraryOwnerFilter.Incoming) && !item._isPublic && item.isBookmarked)\n            // Discovery returns any Incoming/Team library whether or not it is bookmarked\n            || (this._owner.has(LibraryOwnerFilter.Discovery) && [ 'team' as Ownership, LibraryOwnerFilter.Incoming as Ownership ].includes(item.ownership  as LibraryOwnerFilter));\n        if (!passesOwnerFilter) { return false; }\n\n        if (this._project) {\n            const passesProjectFilter = (this._project === LibraryProjectFilterEnum.All && item.isChildOfProject)\n                || (this._project === 'none' && !item.isChildOfProject)\n                || (this._project === 'other' && item.isChildOfProject && !item.isBookmarked)\n                || (this._project === item.parentProjectID);\n            if (!passesProjectFilter) { return false; }\n        }\n\n        if (this._roles) {\n            const passesRolesFilter = this._roles.has(LibraryRolesFilter.None) && (!item.roles || item.roles.length === 0)\n                // one of the roles filters matches one of the roles on the library\n                || item.roles?.some(role => this._roles!.has(role.type as LibraryRolesFilter));\n            if (!passesRolesFilter) { return false; }\n        }\n\n        return true;\n    }\n\n    /**\n     * This method determines the commonality between the already present filter (existing)\n     * and the new filter to be applied (this). The point of this is to\n     * see if the new filter (this) can build some, all, or none of it's items\n     * from (existing) filter.\n     *\n     * Subset: Means that ALL items for this filter can be built from existing\n     * Disjoint: No items for this filter can be built from existing.\n     * Unknown: Some items for this filter can be built from existing.\n     *\n     * @note we should always determine disjoint cases first before other cases.\n     * @note this = NEW FILTER, existing = EXISTING FILTER\n     *\n     * @param existing The existing filter that we are getting the relation to.\n     * @returns { ItemFilterRelation }\n     */\n    getRelationToFilter(existing: LibraryFilter): ItemFilterRelation {\n        const checkOwnerRelation = (newOwnerSet: Set<LibraryOwnerFilter>, existingOwnerSet: Set<LibraryOwnerFilter>): ItemFilterRelation => {\n            const intersection = new Set([ ...existingOwnerSet ].filter(x => newOwnerSet.has(x)));\n            const subset = intersection.size === newOwnerSet.size;\n            if (subset) { return 'subset';} // all new values are in existing values\n\n            const difference = getSetDifference(newOwnerSet, existingOwnerSet);\n            if (difference.has(LibraryOwnerFilter.Discovery) && difference.has(LibraryOwnerFilter.Incoming)) {\n                // if the only difference is that the existing filter has 'discovery'\n                // and the new filter has 'incoming', then that should be considered a subset.\n                // The rest of the filter types must match exactly to be a subset.\n                if (difference.size === 2 && existingOwnerSet.has(LibraryOwnerFilter.Discovery) && newOwnerSet.has(LibraryOwnerFilter.Incoming)) {\n                    return 'subset';\n                }\n                // Moreover, if one filter is 'incoming', it may partially overlap with a 'discovery' filter,\n                // regardless of what other filters are present, or which is pre-existing.\n                if (newOwnerSet.has(LibraryOwnerFilter.Discovery) && existingOwnerSet.has(LibraryOwnerFilter.Incoming)\n                    || existingOwnerSet.has(LibraryOwnerFilter.Discovery) && newOwnerSet.has(LibraryOwnerFilter.Incoming)) {\n                    return 'unknown';\n                }\n            }\n\n            if (intersection.size > 0) { return 'unknown'; } // some overlap\n            return 'disjoint'; // no overlap since intersection.size === 0\n        };\n\n        const relations = [\n            // owner filter always exists\n            checkOwnerRelation(this._owner, existing._owner),\n        ];\n\n        if (this._roles && existing._roles) {\n            relations.push(checkSetOverlap(this._roles, existing._roles));\n        } else if (this._roles || existing._roles) {\n            relations.push('unknown');\n        } // if both are undefined, we don't need to check roles. 'undefined' is equivalent to 'all roles'\n\n        if (this._project) {\n            const checkIfIsProjId = (projectFilter: string): boolean => {\n                // Assume that any projectFilter that is not one of the enum values is a project id\n                return !Object.values(LibraryProjectFilterEnum).includes(projectFilter as LibraryProjectFilterEnum);\n            };\n            const subset = !existing._project // if existing project filter is undefined, that means it includes libraries that may or may not be in a project\n                || this._project === existing._project\n                || (checkIfIsProjId(this._project) && existing._project === LibraryProjectFilterEnum.All); // if project filter is 'all', that means the library must be in a project\n            relations.push(subset ? 'subset' : 'disjoint');\n        } else if (!this._project && existing._project) {\n            relations.push('unknown');\n        }\n\n        if (relations.includes('disjoint')) {\n            return 'disjoint';\n        }\n        if (relations.every(relation => relation === 'subset')) {\n            return 'subset';\n        }\n\n        // only remaining possibility is 'unknown'\n        return 'unknown';\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport LibraryInterface from '../interface/LibraryInterface';\nimport { LibraryListParameters, LibraryData, LibrariesResponse, MelvilleLink, OwnerParameters, RolesParameters } from '../interface/LibraryModel';\nimport Library from './Library';\nimport { IItemLoader, IItemLoaderOptions, ILoadedPage, ILoadNextPage } from '../core/ItemLoader';\nimport ItemPool from '../core/ItemPool';\nimport { OrderFieldToLibraryOrderBy } from './LibraryOrder';\nimport LibraryFilter from './LibraryFilter';\n\nimport { LibraryConfig } from './LibrarySource';\nimport AdobeAsset from '../assets/AdobeAsset';\nimport ItemUpdater from '../core/ItemUpdater';\n\n// Load Libraries from Melville\nexport default class LibraryListLoader implements IItemLoader<LibraryConfig> {\n\n    constructor(\n        private _libraryPool: ItemPool<Library | AdobeAsset>,\n        private _libraryInterface: LibraryInterface,\n        private _libraryUpdater: ItemUpdater<Library, Partial<LibraryData>>\n    ) {}\n\n    // only supports LibraryFilter\n    supportsFilter(filter: LibraryFilter): boolean {\n        // If we don't provide a filter at all, then we cannot use the loader\n        return filter !== undefined;\n    }\n\n    async loadPage(options: IItemLoaderOptions<LibraryConfig>): Promise<ILoadedPage<LibraryConfig>> {\n        return await this._loadPage(options);\n    }\n\n    private async _loadPage(options: IItemLoaderOptions<LibraryConfig>, pageLink?: MelvilleLink): Promise<ILoadedPage<LibraryConfig>> {\n        let result: LibrariesResponse;\n\n        if (pageLink) {\n            // We are loading the next page with the link provided.\n            result = await this._libraryInterface.getLibrariesWithLink(pageLink);\n        } else {\n            const { order, limit, filter } = options;\n\n            // Move filters into query parameters, making sure to sort the arrays so that the eventual query string is deterministic.\n            const queryParams: LibraryListParameters = {};\n            const ownerFilter = filter._owner || LibraryFilter.DEFAULT._owner; // Use default if filter is EverythingFilter\n            queryParams.owner = [ ...ownerFilter ].sort().join(',') as OwnerParameters;\n            if (filter._roles) {\n                queryParams.roles = [ ...filter._roles ].sort().join(',') as RolesParameters;\n            }\n            if (filter._project) {\n                queryParams.team = filter._project;\n            }\n            queryParams.orderBy = order.direction === 'ascending' ? OrderFieldToLibraryOrderBy[order.field] : `-${OrderFieldToLibraryOrderBy[order.field]}`;\n            if (limit) {\n                queryParams.limit = limit;\n                if (!queryParams.start) {\n                    queryParams.start = 0;\n                }\n            }\n            // The selector specifies what data will be returned on each library.\n            queryParams.selector = 'rendition_grid';\n\n            result = await this._libraryInterface.getLibraries(queryParams);\n        }\n\n        // Libraries listings from Melville are considered \"USS\" sources (with the current exception of a public libraries-only listing), and may have stale data.\n        // To prevent it from potentially overwriting fresh RAPI data within the USS latency window, we will use\n        // 'createLoaderUpdateSession' instead of 'createLoaderMutationSession' and this update will be ignored if there were local changes later than this timestamp.\n        const latency = this._libraryPool._core._environment.getValue('USS_LIST_UPDATE_LATENCY');\n        const mostRecentValidMutation = Date.now() - latency;\n        const session = this._libraryPool.createLoaderUpdateSession<Library>(mostRecentValidMutation);\n        const items = this._libraryUpdater.updateRemoteItems(session, result.libraries); // get or create Library instances\n        items.forEach(library => library._setLibraryLoadState('LOADED'));\n        session.commit(); // put items in the pool\n\n        // Check if we have another page to load.\n        let loadNextPage: ILoadNextPage<LibraryConfig> | undefined;\n        const nextPageLink = result._links?.next;\n        if (nextPageLink) {\n            loadNextPage = (options: IItemLoaderOptions<LibraryConfig>) =>\n                this._loadPage(options, nextPageLink);\n        }\n\n        return {\n            items,\n            total: result.total_count, // total number of libraries in the account (not the page)\n            loadNextPage,\n            mostRecentValidMutation\n        };\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport AdobeAsset from '../assets/AdobeAsset';\nimport SAMError, { SAMErrorCode } from '../core/SAMError';\nimport AssetContext from '../assets/AssetContext';\nimport LibraryInterface from '../interface/LibraryInterface';\nimport { NotFound } from '../core/Cache';\nimport { EventEmitter } from 'events';\n\n/**\n * Represents a location in the user storage which are required to exist for the LibraryContext to function properly.\n * It provides functions to ensure the existence of the location and to watch for changes in the location.\n */\nexport abstract class SubscriptionLocation extends EventEmitter {\n    protected _cacheKey: string;\n    protected _path: string;\n    protected _asset: AdobeAsset | undefined = undefined;\n    protected _watching = false;\n\n    constructor(cacheKey: string, path: string) {\n        super();\n        this._cacheKey = cacheKey;\n        this._path = path;\n    }\n\n    get cacheKey(): string { return this._cacheKey; }\n    get path(): string { return this._path; }\n    get asset(): AdobeAsset | undefined { return this._asset; }\n\n    async ensureExistence(context: AssetContext, libraryInterface: LibraryInterface): Promise<AdobeAsset> {\n        const environment = context._core._environment;\n        const cache = environment.cache;\n        const cacheKey = this._cacheKey;\n        const assetId = await cache.getItem(cacheKey);\n        try {\n            const asset = assetId !== NotFound ? await context.getAssetWithCloudID(assetId) : await context.getAssetWithRepoPath(this._path);\n            cache.setItem(cacheKey, asset.cloudID);\n            this._asset = asset;\n            return this._asset;\n        } catch (e: any) {\n            if (e.code === SAMErrorCode.NOT_FOUND) {\n                environment.debug(`${this._path} not found, creating it now`);\n                const asset = await this._create(context, libraryInterface);\n                cache.setItem(cacheKey, asset.cloudID);\n                this._asset = asset;\n                return this._asset;\n            }\n            throw e;\n        }\n    }\n\n    startWatching(): void {\n        if (this._watching) {\n            return;\n        }\n        if (this._asset) {\n            this._asset.on('change', this._callback);\n            this._watching = true;\n            return;\n        }\n        throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'Asset not cached yet');\n    }\n\n    stopWatching(): void {\n        if (this._watching && this._asset) {\n            this._asset.off('change', this._callback);\n        }\n    }\n\n    private _callback = () => {\n        this.emit('change');\n    };\n\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    protected abstract _create(context: AssetContext, libraryInterface: LibraryInterface): Promise<AdobeAsset>;\n}\n\nexport class SyncGroupLocation extends SubscriptionLocation {\n    constructor() {\n        super('SYNC_GROUP_ID', '/assets/adobe-libraries');\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    protected async _create(context: AssetContext, libraryInterface: LibraryInterface): Promise<AdobeAsset> {\n        return await (await context.getHomeFolder()).createFolder(this.path);\n    }\n}\n\nclass BookmarkLocation extends SubscriptionLocation {\n    constructor(cacheKey: string, path: string) {\n        super(cacheKey, path);\n    }\n\n    protected async _create(context: AssetContext, libraryInterface: LibraryInterface): Promise<AdobeAsset> {\n        // call to Melville's GET /bookmarks endpoint ensures that the bookmarks are created\n        await libraryInterface.getBookmarks();\n        return context.getAssetWithRepoPath(this.path);\n    }\n}\n\nexport class CollabBookmarkLocation extends BookmarkLocation {\n    constructor() {\n        super('COLLAB_BOOKMARKS_ID', '/sync/adobe-libraries/collab-bookmarks.json');\n    }\n}\n\nexport class PublicBookmarkLocation extends BookmarkLocation {\n    constructor() {\n        super('PUBLIC_BOOKMARKS_ID', '/sync/adobe-libraries/bookmarks.json');\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ItemPool from '../core/ItemPool';\nimport Library, { LibraryUpdater } from './Library';\nimport LibraryInterface  from '../interface/LibraryInterface';\nimport { CreateLibraryOptions, CreatePersonalLibraryData } from '../interface/LibraryModel';\nimport AdobeAsset from '../assets/AdobeAsset';\nimport { validatePlatformRepoName } from '../assets/AssetUtils';\nimport { ISAMCorePrivate, ISAMObject } from '../indexPrivate';\nimport { LibraryConfig, LibrarySource } from './LibrarySource';\nimport { memoize } from '../core/decorators';\nimport ItemSource from '../core/ItemSource';\nimport ImplicitLibraryFilter from './ImplicitLibraryFilter';\nimport LibraryListLoader from './LibraryListLoader';\nimport { SAMError, SAMErrorCode } from '../core/SAMError';\nimport { SyncGroupLocation, PublicBookmarkLocation, CollabBookmarkLocation, SubscriptionLocation } from './SubscriptionLocation';\n\n/**\n * Provides all Library related functionality like getting\n * lists of libraries among other features.\n *\n * @experimental This API is in an experimental phase so expect that\n * APIs will not be final and there will be breaking changes\n * without bumping the major version until this comment is removed.\n */\nexport default class LibraryContext implements ISAMObject {\n    constructor(\n        readonly _core: ISAMCorePrivate,\n        private __assetPool: ItemPool<Library | AdobeAsset>\n    ) { }\n\n    /**\n     * @package -- only for use in SAM.js\n     */\n    readonly _libraryUpdater = LibraryUpdater;\n\n    /**\n     * @package -- only for use in SAM.js\n     */\n    readonly _libraryInterface: LibraryInterface = new LibraryInterface(this._core);\n\n    private _syncGroupLocation: SubscriptionLocation = new SyncGroupLocation();\n    private _publicBookmarkLocation: SubscriptionLocation = new PublicBookmarkLocation();\n    private _collabBookmarkLocation: SubscriptionLocation = new CollabBookmarkLocation();\n\n    /**\n     * @package -- for use in SAM.js only\n     */\n    get _assetPool(): ItemPool<Library | AdobeAsset> {\n        return this.__assetPool;\n    }\n\n    /**\n     * Returns the LibrarySource which will return a list of the user's libraries.\n     * To request a different set of libraries, create a new LibraryFilter and pass it to the getList method.\n     * @example\n     * const libraryContext = await core.getLibraryContext();\n     * const order = new LibraryOrder('ascending', 'modified');\n     * const filter = LibraryFilter.AllLibraries; // If no filter is provided, will default to all of the user's libraries.\n     * const libraryList = libraryContext.librariesSource.getList(order, filter, loadOptions);\n     * libraryList.on(STATE_CHANGED, () => {\n     *     if (list.status !== AssetListStatus.Loading) { const libraries = libraryList.items; }\n     * });\n     * Note: loadOptions.limit will be ignored on public libraries, which are not currently paginated.\n     */\n    @memoize\n    get librariesSource(): LibrarySource {\n        const loader = new LibraryListLoader(\n            this._assetPool,\n            this._libraryInterface,\n            this._libraryUpdater\n        );\n        return new ItemSource<LibraryConfig>(this._assetPool as ItemPool<Library>, [ loader ], new ImplicitLibraryFilter());\n    }\n\n    /**\n     * @package -- for use in SAM.js only\n     */\n    async _createLibrary(options: CreateLibraryOptions): Promise<Library> {\n        if (!validatePlatformRepoName(options.name)) {\n            // Validate the name here to avoid resolving the asset if the name is invalid.\n            throw SAMError.create(SAMErrorCode.BAD_REQUEST, 'Invalid name provided for the createLibrary operation.');\n        }\n\n        const libraryData = await this._libraryInterface.createLibrary(options);\n        const session = this._assetPool.createMutationSession<Library>();\n        const library = this._libraryUpdater.updateRemoteItem(session, libraryData);\n        library._setLibraryLoadState('LOADED');\n        session.commit();\n        return library;\n    }\n\n    /**\n     * Creates a personal library.\n     *\n     * @example\n     * const libraryContext = await core.getLibraryContext();\n     * const roles: LibraryRole[] = [{\n     *      type: 'brand',\n     *      usage: 'usage_brand',\n     *      priority: 'priority_brand'\n     * }];\n     * const library = libraryContext.createLibrary({ name: 'test', roles });\n     *\n     */\n    async createPersonalLibrary(data: CreatePersonalLibraryData): Promise<Library> {\n        const options = { syncCreate: true, name: data.name, roles: data.roles };\n\n        return this._createLibrary(options);\n    }\n\n    private async _getLibraryLocally(assetId: string): Promise<Library | undefined> {\n        // Locate the library in the local pool\n        const library = this._assetPool.getLocalItemById(assetId) as Library | undefined;\n        if (!library) {\n            // Library not found locally.\n            return undefined;\n        }\n\n        // This will go to Melville only if the library is not fully loaded.\n        await library._waitForLibraryLoad();\n        return library;\n    }\n\n    private async _getLibraryRemotely(assetId: string): Promise<Library | undefined> {\n        // Load the library from Melville. There will be a network call here.\n        const libraryData = await this._libraryInterface.getLibraryData(assetId);\n        if (!libraryData) {\n            return undefined;\n        }\n\n        const session = this._assetPool.createMutationSession<Library>();\n        const updatedLibrary = this._libraryUpdater.updateRemoteItem(session, libraryData);\n        session.commit();\n        return updatedLibrary;\n    }\n\n    private _isValidURN(id: string): boolean {\n        const urnRegex = /^urn:[a-zA-Z0-9][a-zA-Z0-9-]{0,31}:[a-zA-Z0-9()+,\\-.:=@;$_!*'%/?#]+$/;\n        return urnRegex.test(id);\n    }\n\n    // assetId can be LibraryAssetId or, currently, PublicLibraryId.\n    // TODO: Once [CCXB-21655] is complete, this will support assetIDs for public libraries.\n    // At that point, we can remove tryRemoteOnly.\n    async getLibraryByAssetId(assetId: string): Promise<Library> {\n        const tryLocalThenRemote = async (id: string) => {\n            let library = await this._getLibraryLocally(id);\n            if (!library) {\n                library = await this._getLibraryRemotely(id);\n            }\n            return library;\n        };\n\n        const tryRemoteOnly = async (id: string) => {\n            return await this._getLibraryRemotely(id);\n        };\n\n        // For private libraries, we first try to get the library locally and then remotely using the asset id.\n        // For public libraries, we only try to get the libraries remotely using the public library id.\n        const library = this._isValidURN(assetId)\n            ? await tryLocalThenRemote(assetId)\n            : await tryRemoteOnly(assetId);\n\n        if (!library) {\n            throw SAMError.create(SAMErrorCode.NOT_FOUND, `Library not found for the given ID: ${assetId}`);\n        }\n\n        return library;\n    }\n\n    get syncGroupLocation(): SubscriptionLocation { return this._syncGroupLocation; }\n    get publicBookmarkLocation(): SubscriptionLocation { return this._publicBookmarkLocation; }\n    get collabBookmarkLocation(): SubscriptionLocation { return this._collabBookmarkLocation; }\n\n    /**\n     * should be called once the client is interested in libraries listing\n     * @package -- for use in SAM.js only\n     * @returns Promise<void> - resolves when the special library locations are ensured to exist\n     * TODO: should be marked as private once getLibraries() functionality is added and the tests are updated.\n     */\n    async _ensureSubscriptionLocationExistence(): Promise<void> {\n        return Promise.allSettled([\n            this._syncGroupLocation.ensureExistence(this._core.hostAssetContext, this._libraryInterface),\n            this._publicBookmarkLocation.ensureExistence(this._core.hostAssetContext, this._libraryInterface),\n            this._collabBookmarkLocation.ensureExistence(this._core.hostAssetContext, this._libraryInterface)\n        ]).then(results => {\n            results.forEach(result => {\n                if (result.status === 'rejected') {\n                    throw result.reason;\n                }\n            });\n            return;\n        });\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport ItemUpdater from '../core/ItemUpdater';\nimport AdobeAsset from '../assets/AdobeAsset';\nimport { CustomModelData, CustomModelPublishedState } from '../interface/CustomModelModel';\nimport PropertyUpdater from '../core/PropertyUpdater';\nimport { observable } from '../core/decorators';\n\nexport default class CustomModel extends AdobeAsset {\n    public isCustomModel: boolean = true;\n\n    private _inferenceReady: boolean = false;\n    private _publishedState: CustomModelPublishedState = CustomModelPublishedState.UNPUBLISHED;\n    private _samplePrompt: string = '';\n    private _renditionUrl?: string;\n    private _displayName: string = '';\n    private _baseModelName: string = '';\n    private _baseModelVersion: string = '';\n    private _conceptId: string = '';\n    private _trainingMode: string = '';\n\n    @observable\n    get inferenceReady() {\n        return this._inferenceReady;\n    }\n\n    @observable\n    get publishedState() {\n        return this._publishedState;\n    }\n\n    @observable\n    get samplePrompt() {\n        return this._samplePrompt;\n    }\n\n    @observable\n    get renditionUrl() {\n        return this._renditionUrl;\n    }\n\n    @observable\n    get displayName() {\n        return this._displayName;\n    }\n\n    @observable\n    get baseModelName() {\n        return this._baseModelName;\n    }\n    @observable\n    get baseModelVersion() {\n        return this._baseModelVersion;\n    }\n    @observable\n    get conceptId() {\n        return this._conceptId;\n    }\n    @observable\n    get trainingMode() {\n        return this._trainingMode;\n    }\n}\n\nexport const CustomModelUpdater = new ItemUpdater<CustomModel, CustomModelData>(\n    {\n        localItemType: CustomModel,\n        remoteIdProperty: 'assetId',\n        propertyUpdater: new PropertyUpdater({\n            '_inferenceReady': { name: 'inferenceReady', format: 'boolean' },\n            // TODO: create a type with array of choices?\n            '_publishedState': 'publishedState',\n            '_samplePrompt': 'samplePrompt',\n            '_renditionUrl': 'renditionUrl',\n            '_displayName': 'displayName',\n            '_baseModelName': 'baseModelName',\n            '_baseModelVersion': 'baseModelVersion',\n            '_conceptId': 'conceptId',\n            '_trainingMode': 'trainingMode',\n            // on AdobeAsset\n            '_links': { name: '_links', format: 'object' },\n            '_name': 'assetName',\n            '_path': 'path',\n            '_created': { name: 'createDate', format: 'date' },\n            '_modified': { name: 'modifyDate', format: 'date'  },\n            '_createdBy': 'createdBy',\n            '_version': 'version',\n            '_etag': 'etag',\n            '_storageRegion': 'region',\n            '_size': { name: 'size', format: 'number' },\n        }),\n    }\n);\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { CustomModelOrderBy } from '../interface/CustomModelModel';\nimport { compareStrings, compareValues, createItemOrderFactory, IComparatorMap } from '../core/ItemOrder';\n\nimport CustomModel from './CustomModel';\n\nexport type CustomModelOrderField =\n    | 'name'\n    | 'created'\n    | 'modified';\n\nexport const OrderFieldToCustomModelOrderBy: { [key in CustomModelOrderField]: CustomModelOrderBy} = {\n    'name': CustomModelOrderBy.NAME,\n    'created': CustomModelOrderBy.CREATE_DATE,\n    'modified': CustomModelOrderBy.MODIFY_DATE\n};\n\nconst OrderFieldToComparator: IComparatorMap<CustomModel, CustomModelOrderField> = {\n    name(a: CustomModel, b: CustomModel): number {\n        return compareStrings(a.name, b.name);\n    },\n\n    created(a: CustomModel, b: CustomModel): number {\n        return compareValues(a.created, b.created);\n    },\n\n    modified(a: CustomModel, b: CustomModel): number {\n        return compareValues(a.modified, b.modified);\n    }\n};\n\nexport default class CustomModelOrder extends createItemOrderFactory(OrderFieldToComparator) {\n    static default = new CustomModelOrder('descending', 'modified');\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport CustomModelInterface from '../interface/CustomModelInterface';\nimport ItemPool from '../core/ItemPool';\nimport { ISAMCorePrivate } from '../indexPrivate';\nimport { AdobeAsset } from 'src';\nimport {\n    CustomModelConfig,\n} from './CustomModelSource';\nimport {\n    IItemLoader,\n    IItemLoaderOptions,\n    ILoadNextPage,\n    ILoadedPage,\n} from '../core/ItemLoader';\nimport CustomModel, { CustomModelUpdater } from '../custom-models/CustomModel';\nimport { OrderFieldToCustomModelOrderBy } from './CustomModelOrder';\nimport CustomModelFilter from './CustomModelFilter';\n\nexport default class CustomModelLoader\nimplements IItemLoader<CustomModelConfig> {\n    constructor(\n        private _assetPool: ItemPool<CustomModel | AdobeAsset>,\n        private _core: ISAMCorePrivate,\n        private _customModelInterface: CustomModelInterface\n    ) {}\n\n    async loadPage(options: IItemLoaderOptions<CustomModelConfig>) {\n        return await this._loadPage(options);\n    }\n\n    private async _loadPage(\n        options: IItemLoaderOptions<CustomModelConfig>,\n        startIndex?: number\n    ): Promise<ILoadedPage<CustomModelConfig>> {\n        const { order, limit, filter } = options;\n        const customModelFilter = filter as CustomModelFilter;\n        const listingOptions = customModelFilter.listingOptions;\n\n        const listOptions = {\n            orderBy: OrderFieldToCustomModelOrderBy[order.field],\n            limit,\n            ...listingOptions,\n        };\n        const result = await this._customModelInterface.getCustomModels(\n            startIndex ? { ...listOptions, startIndex } : listOptions\n        );\n        const session = this._assetPool.createLoaderUpdateSession<CustomModel>(\n            Date.now() - this._core._environment.getValue('USS_LIST_UPDATE_LATENCY')\n        );\n        const items = CustomModelUpdater.updateRemoteItems(session, result.items);\n        session.commit();\n\n        // Check if we have another page to load.\n        let loadNextPage: ILoadNextPage<CustomModelConfig> | undefined;\n        const nextPageLink = result.nextPage?.startIndex;\n        if (nextPageLink) {\n            loadNextPage = (options: IItemLoaderOptions<CustomModelConfig>) =>\n                this._loadPage(options, nextPageLink);\n        }\n\n        return {\n            items,\n            loadNextPage,\n            total: result.total\n        };\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { CustomModelPublishedState } from '../indexPrivate';\nimport { CustomModelsResponse, CustomModelOrderBy } from './CustomModelModel';\nimport InterfaceBase from './InterfaceBase';\nimport { fillURLTemplate } from './LinkUtils';\n\nexport const REGION_MAP: Record<string, string> = {\n    VA6C2: 'va6',\n    VA6: 'va6',\n    VA7: 'va6',\n    JPN3: 'jp3',\n    IRL1: 'irl1',\n};\n\n// define type based off of keys of REGION_MAP\ntype RegionKey = keyof typeof REGION_MAP;\n\n/**\n * Returns the storage region for a given region key. The storage region is stored in the home folder and is stored as\n * an uppercase string. The mapping takes this uppercase string and returns the corresponding storage region that is used\n * to build the url to the endpoint.\n * @param region    The region key as stored in the home folder\n */\nexport function storageRegionForUrl(region: RegionKey): string {\n    return REGION_MAP[region];\n}\n\ninterface IListingOptions<IOrderField> {\n    orderBy: IOrderField;\n    limit: number;\n}\n\nexport interface CustomModelListingOptions\n    extends IListingOptions<CustomModelOrderBy> {\n    startIndex?: number;\n    createdBy?: string;\n    name?: string;\n    publishedState?: CustomModelPublishedState;\n    createDateMin?: Date;\n    createDateMax?: Date;\n    modifyDateMin?: Date;\n    modifyDateMax?: Date;\n}\n\nexport default class CustomModelInterface extends InterfaceBase {\n    private async _getUrl(endpoint: string): Promise<string> {\n        const homeFolder = await this._core.hostAssetContext.getHomeFolder();\n        const region = REGION_MAP[homeFolder.storageRegion];\n        const acpHost = this._core._environment.endpoints.ACP_CS_HOST;\n        const subdomain = acpHost.split('.')[0];\n        const regionalizedSubdomain = `${subdomain}-${region}`;\n\n        // Replaces non-regionalized subdomain with its' regionalized version, using the region of the homeFolder eg.\n        //\n        //   when storage region = 'JPN3':\n        //     platform-cs-stage.adobe.io =>\n        //     platform-cs-stage-${REGION_MAP[JPN3]}.adobe.com =>\n        //     platform-cs-stage-jpn3.adobe.com\n        //\n        //   when storage region = 'IRL1':\n        //     platform-cs-stage.adobe.io =>\n        //     platform-cs-stage-${REGION_MAP[IRL1]}.adobe.com =>\n        //     platform-cs-stage-irl1.adobe.com\n        return `https://${acpHost.replace(\n            subdomain,\n            regionalizedSubdomain\n        )}/fps/${endpoint}`;\n    }\n\n    /**\n   * Fetches the list of custom models based on the options provided\n   * @param options : options to sort and filter the projects listing\n   * @returns the list of custom models along with the page information and links to the next page\n   */\n    async getCustomModels(\n        options?: Partial<CustomModelListingOptions>\n    ): Promise<CustomModelsResponse> {\n        const queryParams = options\n            ? JSON.parse(\n                JSON.stringify(options)\n            )\n            : {};\n\n        const url = fillURLTemplate(\n            await this._getUrl('customModels'),\n            queryParams\n        );\n\n        return this._getResponse(url);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\nimport AdobeAsset from '../assets/AdobeAsset';\nimport {\n    IItemLoader,\n    IItemLoaderOptions,\n    ILoadNextPage,\n    ILoadedPage,\n} from '../core/ItemLoader';\nimport ItemPool from '../core/ItemPool';\nimport { ISAMCorePrivate } from '../indexPrivate';\nimport CustomModelInterface from '../interface/CustomModelInterface';\nimport CustomModel, { CustomModelUpdater } from './CustomModel';\nimport CustomModelFilter from './CustomModelFilter';\nimport { OrderFieldToCustomModelOrderBy } from './CustomModelOrder';\nimport { CustomModelSearchConfig } from './CustomModelSource';\n\nexport default class CustomModelSearchLoader implements IItemLoader<CustomModelSearchConfig> {\n    constructor(\n        private _assetPool: ItemPool<CustomModel | AdobeAsset>,\n        private _core: ISAMCorePrivate,\n        private _customModelInterface: CustomModelInterface\n    ) {}\n\n    supportsFilter(filter?: CustomModelFilter): boolean {\n        // If we don't provide a filter at all, then we cannot use the loader\n        return filter !== undefined;\n    }\n\n    async loadPage(options: IItemLoaderOptions<CustomModelSearchConfig>) {\n        return this._loadPage(options);\n    }\n\n    private async _loadPage(options: IItemLoaderOptions<CustomModelSearchConfig>, startIndex?: number): Promise<ILoadedPage<CustomModelSearchConfig>> {\n        const { order, limit, implicitFilter, filter } = options;\n        const customModelSearchFilter = implicitFilter;\n        const customModelFilter = filter as CustomModelFilter;\n        const listingOptions = ('listingOptions' in customModelFilter && customModelFilter['listingOptions']) || [];\n\n        const listOptions = {\n            orderBy: OrderFieldToCustomModelOrderBy[order.field],\n            limit,\n            ...listingOptions,\n            name: customModelSearchFilter.query\n        };\n        const result = await this._customModelInterface.getCustomModels(\n            startIndex ? { ...listOptions, startIndex } : listOptions\n        );\n        const session = this._assetPool.createLoaderUpdateSession<CustomModel>(\n            Date.now() - this._core._environment.getValue('USS_LIST_UPDATE_LATENCY')\n        );\n        const items = CustomModelUpdater.updateRemoteItems(session, result.items);\n        session.commit();\n\n        // Check if we have another page to load.\n        let loadNextPage: ILoadNextPage<CustomModelSearchConfig> | undefined;\n        const nextPageLink = result.nextPage?.startIndex;\n        if (nextPageLink) {\n            loadNextPage = (options: IItemLoaderOptions<CustomModelSearchConfig>) =>\n                this._loadPage(options, nextPageLink);\n        }\n\n        implicitFilter!._matchingIDsFromSearch = new Set([\n            // copy existing, if needed\n            ...(implicitFilter!._matchingIDsFromSearch || []),\n            ...(items.map(item => item.id)) ]);\n\n        return {\n            items,\n            loadNextPage,\n            total: result.total\n        };\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport CustomModel from './CustomModel';\nimport ImplicitAdobeAssetFilterBase, {\n    IImplicitAdobeAssetFilterBaseOptions\n} from '../assets/ImplicitAdobeAssetFilterBase';\nimport { IItemFilter } from '../core/ItemFilter';\n\nexport default class ImplicitCustomModelFilter extends ImplicitAdobeAssetFilterBase implements IItemFilter<CustomModel> {\n    constructor(options?: Partial<IImplicitAdobeAssetFilterBaseOptions>) {\n        super(options);\n    }\n\n    matches(item: CustomModel) {\n        if (!item.isCustomModel) {\n            return false;\n        }\n\n        return super.matches(item);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport {\n    IImplicitAdobeAssetFilterBaseOptions\n} from '../assets/ImplicitAdobeAssetFilterBase';\nimport CustomModel from './CustomModel';\nimport { ItemFilterRelation } from '../core/ItemFilter';\n\nimport ImplicitCustomModelFilter from './ImplicitCustomModelFilter';\n\nexport interface ICustomModelSearchListingOptions {\n    query: string\n}\n\nexport default class CustomModelSearchFilter extends ImplicitCustomModelFilter {\n    readonly _query: string;\n    _matchingIDsFromSearch: Set<string> | undefined;\n\n    constructor(options: ICustomModelSearchListingOptions & Partial<IImplicitAdobeAssetFilterBaseOptions>) {\n        const { query, ...superOptions } = options;\n        super(superOptions);\n\n        this._query = query.trim();\n    }\n\n    get hash(): string {\n        return [\n            super.hash,\n            `query=${this.query}`,\n        ].filter(x => x).join(':');\n    }\n\n    get query(): string {\n        return this._query;\n    }\n\n    matches(item: CustomModel): boolean {\n        // Check if the item's id is in the current filter's id list\n        if (this._matchingIDsFromSearch && !this._matchingIDsFromSearch.has(item.id)) {\n            return false;\n        }\n\n        // If the query exists but there's no id list, we probably haven't finished loading yet\n        if ((this._query) && !this._matchingIDsFromSearch) {\n            return false;\n        }\n        return super.matches(item);\n    }\n\n    getRelationToFilter(other: CustomModelSearchFilter): ItemFilterRelation {\n        if (this.query.toLowerCase()  !== other.query.toLowerCase()) {\n            return 'disjoint';\n        }\n\n        return super.getRelationToFilter(other);\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport {\n    CustomModelConfig, CustomModelSearchConfig, CustomModelSearchSource,\n    CustomModelSource,\n} from '../custom-models/CustomModelSource';\nimport { memoize } from '../core/decorators';\nimport AdobeAsset from '../assets/AdobeAsset';\nimport ItemPool from '../core/ItemPool';\nimport { ISAMCorePrivate, ISAMObject } from '../indexPrivate';\nimport ItemSource from '../core/ItemSource';\nimport CustomModelLoader from '../custom-models/CustomModelLoader';\nimport CustomModelInterface from '../interface/CustomModelInterface';\nimport CustomModel, { CustomModelUpdater } from './CustomModel';\nimport CustomModelSearchLoader from './CustomModelSearchLoader';\nimport CustomModelSearchFilter from './CustomModelSearchFilter';\nimport ImplicitCustomModelFilter from './ImplicitCustomModelFilter';\n\n/**\n * Provides Custom Model functionality such as listing.\n *\n * @experimental This API is in an experimental phase so expect that\n * API\"s will not be final and there will be breaking changes\n * without bumping the major version until this comment is removed.\n */\nexport default class CustomModelContext implements ISAMObject {\n    readonly _customModelInterface = new CustomModelInterface(this._core);\n\n    constructor(\n        /**\n         * @package -- for use in SAM.js only\n         */\n        readonly _core: ISAMCorePrivate,\n        /**\n         * @package -- for use in SAM.js only\n         */\n        readonly _assetPool: ItemPool<CustomModel | AdobeAsset>\n    ) {}\n\n    /**\n     * @package -- only for use in SAM.js\n     * Updaters shouldn't be accessed directly.\n     */\n    readonly _customModelUpdater =  CustomModelUpdater;\n\n    /**\n   * @example\n   * const customModelContext = samCore.customModelContext;\n   * const customModelSource = customModelContext.customModelSearchSource;\n   *\n   * Search custom models a user has access to by name. The set of assets returned in a list is static once the\n   * search is executed - ie newly created items which fit a list will not be added, edits to items which qualify\n   * them to be part of a list will not have any effect. However, discard/delete/permission loss will still be\n   * reflected.\n   */\n    customModelSearchSource(query: string): CustomModelSearchSource {\n        // declare an implicitFilter\n        const implicitFilter = new CustomModelSearchFilter({ query });\n\n        // declare a CustomModelSearchLoader\n        return new ItemSource<CustomModelSearchConfig>(\n            this._assetPool as ItemPool<CustomModel>,\n            [\n                new CustomModelSearchLoader(\n                    this._assetPool,\n                    this._core,\n                    this._customModelInterface\n                ),\n            ],\n            implicitFilter\n        );\n    }\n\n    /**\n   * @example\n   * const customModelContext = samCore.customModelContext;\n   * const customModelSource = customModelContext.customModelSource;\n   *\n   * Gets all custom models a user has access to\n   */\n    @memoize\n    get customModelSource(): CustomModelSource {\n        return new ItemSource<CustomModelConfig>(\n            this._assetPool as ItemPool<CustomModel>,\n            [\n                new CustomModelLoader(\n                    this._assetPool,\n                    this._core,\n                    this._customModelInterface\n                ),\n            ],\n            new ImplicitCustomModelFilter()\n        );\n    }\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport AssetContext from '../assets/AssetContext';\nimport AssetLinkManager from '../links/AssetLinkManager';\nimport SpaceContext from '../workspaces/SpaceContext';\nimport CollaborationContext from '../collaboration/CollaborationContext';\nimport { memoize } from './decorators';\nimport Environment, { Configuration, Hooks, UpdatableConfiguration, UpdatableKey } from './Environment';\nimport { CreateAtomFn } from './MobX';\nimport TypedEventEmitter from './TypedEventEmitter';\nimport packageJSON from '../../package.json';\nimport {\n    patchAdobeAsset,\n    patchAssetContext,\n    patchAssetList,\n    patchAssetSource,\n    patchSpaceJS\n} from './patches/SAMCpp';\nimport ProjectContext from '../projects/ProjectContext';\nimport ClassroomContext from '../classrooms/ClassroomContext';\nimport { ISAMCoreEvents, ISAMCorePrivate, ISAMCore } from '../indexPrivate';\nimport ItemPool from './ItemPool';\nimport AdobeAsset from '../assets/AdobeAsset';\nimport Project from '../projects/Project';\nimport FrameioContext from '../frameio/FrameioContext';\nimport Assignment from '../assignments/Assignment';\nimport Library from '../libraries/Library';\nimport AdobeAssetFactory from '../assets/AdobeAssetFactory';\nimport LibraryContext from '../libraries/LibraryContext';\nimport CustomModelContext from '../custom-models/CustomModelContext';\nimport CustomModel from '../custom-models/CustomModel';\nimport oneTimeWarning from '../utils/oneTimeWarning';\n\n\n// If multiple versions of SAM.js are loaded in the same app, they will have different\n// contents in the closure of the module, so the Symbol used to store the global instances\n// of SAMCore must be a global Symbol.\nconst $SAM_INSTANCE_MAP = Symbol.for('com.adobe.ccac-sam-js.instances');\n\n// Matches ACPL log level enum\nexport enum LogLevel {\n    Off,\n    Err,\n    Warn,\n    Info,\n    Debug\n}\n\nexport default class SAMCore extends TypedEventEmitter<ISAMCoreEvents> implements ISAMCorePrivate {\n\n    /**\n     * @package -- for use in SAM.js only\n     */\n    readonly _environment: Environment;\n    private _AssetContext: AssetContext | undefined;\n    private _SpaceContext: SpaceContext | undefined;\n    private _ProjectContext: ProjectContext | undefined;\n    private _ClassroomContext: ClassroomContext | undefined;\n    private _LibraryContext: LibraryContext | undefined;\n    private _CustomModelContext: CustomModelContext | undefined;\n    private _assetPool = new ItemPool<CustomModel | Assignment | Project | Library | AdobeAsset>(this, 'project or adobeasset');\n\n    /**\n     * @package -- for use in SAM.js only\n     */\n    readonly _adobeAssetFactory: AdobeAssetFactory = new AdobeAssetFactory(this);\n\n    _fetchIndexState = {};\n\n    /**\n     * @package -- for use in SAM.js patches for SAM.cpp\n     */\n    _AssetContextJS?: AssetContext;\n\n    constructor(config: Configuration, hooks: Hooks = {}) {\n        super();\n        this._environment = new Environment(this, config, hooks);\n    }\n\n    /**\n     * @package -- for use in initializeSharedAssetModel\n     */\n    _setAssetContext(assetContext: AssetContext) {\n        if (this._AssetContext) {\n            // If multiple SAM.js instances invoke this, only the first gets to set it. This\n            // is likely a temporary condition while SAM.js clients converge on compatible versions.\n            console.error('[SAMCore] AssetContext already initialized');\n            return;\n        }\n        this._AssetContext = assetContext;\n        this._AssetContextJS = new AssetContext(this, this._assetPool);\n    }\n\n    /**\n     * @package -- for use in initializeSharedAssetModel\n     */\n    _setSpaceContext(spaceContext: SpaceContext) {\n        if (this._SpaceContext) {\n            // If multiple SAM.js instances invoke this, only the first gets to set it. This\n            // is likely a temporary condition while SAM.js clients converge on compatible versions.\n            console.error('[SAMCore] SpaceContext already initialized');\n            return;\n        }\n        this._SpaceContext = spaceContext;\n    }\n\n    /**\n     * @package -- for use in initializeSharedAssetModel\n     */\n    _setProjectContext(projectContext: ProjectContext) {\n        if (this._ProjectContext) {\n            // If multiple SAM.js instances invoke this, only the first gets to set it. This\n            // is likely a temporary condition while SAM.js clients converge on compatible versions.\n            console.error('[SAMCore] ProjectContext already initialized');\n            return;\n        }\n        this._ProjectContext = projectContext;\n    }\n\n    /**\n     * @package -- for use in initializeSharedAssetModel\n     */\n    _setClassroomContext(classroomContext: ClassroomContext) {\n        if (this._ClassroomContext) {\n            // If multiple SAM.js instances invoke this, only the first gets to set it. This\n            // is likely a temporary condition while SAM.js clients converge on compatible versions.\n            console.error('[SAMCore] ClassroomContext already initialized');\n            return;\n        }\n        this._ClassroomContext = classroomContext;\n    }\n\n    get hostAssetContext(): AssetContext {\n        // If initializeSharedAssetModel didn't inject AssetContext, then create one\n        if (!this._AssetContext) {\n            this._AssetContext = new AssetContext(this, this._assetPool);\n        }\n        return this._AssetContext;\n    }\n\n    @memoize\n    get assetLinkManager(): AssetLinkManager {\n        return new AssetLinkManager(this.hostAssetContext);\n    }\n\n    /**\n     * @deprecated -- will be removed on or after 2024-10-01\n     */\n    get spaceContext(): SpaceContext {\n        oneTimeWarning('SAMCore.spaceContext', 'spaceContext is deprecated and will be removed on or after 2024-10-01');\n        // If initializeSharedAssetModel didn't inject SpaceContext, then create one\n        if (!this._SpaceContext) {\n            this._SpaceContext = new SpaceContext(this);\n        }\n        return this._SpaceContext;\n    }\n\n    @memoize\n    get collaborationContext(): CollaborationContext {\n        return new CollaborationContext(this);\n    }\n\n    /**\n     * Provides all Project related functionality like getting\n     * lists of projects among other features.\n     */\n    get projectContext(): ProjectContext {\n        // If initializeSharedAssetModel didn't inject ProjectContext, then create one\n        if (!this._ProjectContext) {\n            this._ProjectContext = new ProjectContext(this, this._assetPool);\n        }\n        return this._ProjectContext;\n    }\n\n    /**\n     * Provides all Classroom related functionality.\n     *\n     * @experimental This API is in an experimental phase so expect that\n     * APIs will not be final and there will be breaking changes\n     * without bumping the major version until this comment is removed.\n     */\n    get classroomContext(): ClassroomContext {\n        if (!this._ClassroomContext) {\n            this._ClassroomContext = new ClassroomContext(this, this._assetPool);\n        }\n        return this._ClassroomContext;\n    }\n\n    @memoize\n    get frameioContext(): FrameioContext {\n        return new FrameioContext(this);\n    }\n\n    async getLibraryContext(): Promise<LibraryContext> {\n        if (!this._LibraryContext) {\n            // When bundle splitting is implemented, we will need to lazily import the LibraryContext here.\n            // See: https://wiki.corp.adobe.com/pages/viewpage.action?spaceKey=CCXCD&title=SAM.js+Bundle+Splitting+and+Optimizations\n            this._LibraryContext = new LibraryContext(this, this._assetPool);\n        }\n        return this._LibraryContext;\n    }\n\n    async getCustomModelContext(): Promise<CustomModelContext> {\n        if (!this._CustomModelContext) {\n            this._CustomModelContext = new CustomModelContext(this, this._assetPool);\n        }\n\n        return this._CustomModelContext;\n    }\n\n    makeObservable(createAtom: CreateAtomFn): () => void {\n        return this._environment.mobx.register(createAtom);\n    }\n\n    /**\n     * @deprecated -- will be renamed for internal use on or after 2024-10-01\n     */\n    /**\n     * @package -- for use in SAM.js only\n     */\n    get environment(): Environment {\n        oneTimeWarning('SAMCore.environment', 'environment is deprecated and will be renamed for internal use on or after 2024-10-01');\n        return this._environment;\n    }\n\n    updateConfig(config: UpdatableConfiguration) {\n        const keys = Object.keys(config);\n        keys.forEach((key: string) => {\n            const updatableKey = key as UpdatableKey;\n            this._environment.setValue(updatableKey, config[updatableKey]);\n        });\n    }\n}\n\ntype SAMInstanceMap = { [s: string]: Promise<ISAMCore> };\n\ndeclare global {\n    interface Window {\n        [$SAM_INSTANCE_MAP]: SAMInstanceMap;\n    }\n}\n\nexport async function initializeSharedAssetModel(config: Configuration, hooks: Hooks = {}): Promise<ISAMCore> {\n    let samInstances: SAMInstanceMap = {};\n\n    // SAM.js supports running in a node.js _environment, so we can't assume that window is defined.\n    if (typeof window !== 'undefined') {\n        if (!window[$SAM_INSTANCE_MAP]) {\n            window[$SAM_INSTANCE_MAP] = samInstances;\n        } else {\n            samInstances = window[$SAM_INSTANCE_MAP];\n        }\n    }\n\n    // Check to see if any versions of SAM.js have already been loaded that are compatible with us (using semantic versioning, the\n    // major version must match, and the minor.patch version must be later than or equal to the one we need)\n    const version = (config._VERSION_OVERRIDE_FOR_TEST !== undefined && config._VERSION_OVERRIDE_FOR_TEST !== '')\n        ? config._VERSION_OVERRIDE_FOR_TEST\n        : packageJSON.version;\n    const [ major, minor, patch ] = version!.split('.').map(Number);\n    const loadedVersions = Object.keys(samInstances);\n    const compatibleLoadedVersion = loadedVersions.find(loadedVersion => {\n        if (loadedVersion === version) {\n            return true;\n        }\n        // If it's not an exact version match, we parse the versions and do a semantic version comparison - note that if\n        // the major version is 0, it's assumed that all changes are breaking.\n        const [ loadedMajor, loadedMinor, loadedPatch ] = loadedVersion.split('.').map(Number);\n        return major !== 0 && loadedMajor === major && (loadedMinor > minor || (loadedMinor === minor && loadedPatch >= patch));\n    });\n\n    // If there's a compatible version, use it!\n    if (compatibleLoadedVersion) {\n        return samInstances[compatibleLoadedVersion];\n    }\n\n    // If not, create a new version (warn if this means there will be multiple SAM.js versions)\n    if (loadedVersions.length > 0) {\n        console.warn(`An instance of SAM.js already exists, but is not compatible with the requested version: ${version}. `\n            + `Because of this, a new instance of SAM.js will be created. Loaded versions: ${loadedVersions.join(', ')}.`);\n    }\n\n    // Wait for host asset context, and patch SAM.cpp as needed\n    // Presence of global acplModel tells us SAM.cpp JS bindings are present\n    // @ts-ignore\n    const acplModel: any = (typeof window !== 'undefined') && window.acplModel;\n\n    const isPatchableVersion = () => {\n        // SAM.cpp 2.0.0-main.1301 is the earliest release that supports patching prototypes.\n        const rootFolderProto = acplModel.applicationAssetContext?.rootFolder.constructor.prototype;\n        return Boolean(rootFolderProto) && Object.getOwnPropertyDescriptor(rootFolderProto, 'name')?.configurable === true;\n    };\n\n    samInstances[version] = new Promise<ISAMCore>((resolve, reject) => {\n        if (acplModel && !config._DISABLE_SAM_CPP) {\n            // Either immediately resolve with existing applicationAssetContext, or wait for it\n            Promise.race([\n                acplModel.applicationAssetContext ?? acplModel.waitForApplicationContextReady()\n            ]).then(() => {\n                try {\n                    if (!isPatchableVersion()) {\n                        resolve(new SAMCore(config, hooks));\n                        return;\n                    }\n                    const core = new SAMCore(config, hooks);\n                    // Patching should be done in this order, because the SAM.cpp prototypes aren't exposed in the global\n                    // namespace, or on global `acplModel`, so the only way to get prototypes is to find an instance of\n                    // the class and get a reference to `obj.constructor.prototype`. E.g., to patch AssetList, it needs\n                    // to get it from `acplModel.applicationAssetContext.rootFolder.children.getList()`, so\n                    // `AssetSource.getList()` cannot be patched yet.\n                    patchAdobeAsset(core);\n                    patchSpaceJS();\n                    patchAssetList(core);\n                    patchAssetSource(core);\n                    patchAssetContext(core);\n                    core._setAssetContext(acplModel.applicationAssetContext);\n\n                    if (loadedVersions.length > 0) {\n                        console.error('[initializeSharedAssetModel] SAM.cpp can only be observable by one'\n                            + ' instance of SAMCore. Clients using SAM.js internal version ' + version + ' will not'\n                            + ' see Mobx observables working. Clients on a host app should align on the same SAM.js'\n                            + ' version before shipping to customers.');\n                    }\n\n                    resolve(core);\n                } catch (e) {\n                    console.error('[initializeSharedAssetModel] failed to patch SAM.cpp', e);\n                    reject(e);\n                }\n            });\n        } else {\n            // No SAM.cpp present, use pure SAM.js implementation\n            resolve(new SAMCore(config, hooks));\n        }\n    });\n    // Do not cache failed initialization attempts\n    try {\n        await samInstances[version];\n    } catch (e) {\n        delete samInstances[version];\n        throw e;\n    }\n    return samInstances[version];\n}\n\n/**\n * @deprecated Use {@link initializeSharedAssetModel} instead, will be removed on or after 2024-10-01.\n */\nexport function createSharedAssetModel(config: Configuration, hooks: Hooks = {}): ISAMCore {\n    oneTimeWarning('createSharedAssetModel',\n        'createSharedAssetModel is deprecated and will be removed on or after 2024-10-01. Use'\n        + ' initializeSharedAssetModel instead.');\n    return new SAMCore(config, hooks);\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { createItemOrderFactory, IComparatorMap } from '../core/ItemOrder';\nimport Version from './AssetVersion';\nimport { compareValues } from '../core/ItemOrder';\n\n\nexport type AssetVersionField = 'created';\n\nconst OrderFieldToComparator: IComparatorMap<Version, AssetVersionField> = {\n    created(a: Version, b: Version): number {\n        return compareValues(a.created, b.created);\n    }\n};\n\nexport default class AssetVersionOrder extends createItemOrderFactory(OrderFieldToComparator) {\n    static default = new AssetVersionOrder('descending', 'created');\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { compareStrings, compareValues, createItemOrderFactory, IComparatorMap } from '../core/ItemOrder';\nimport Classroom from './Classroom';\n\nexport type ClassroomOrderField =\n    | 'name'\n    | 'created';\n\nconst OrderFieldToComparator: IComparatorMap<Classroom, ClassroomOrderField> = {\n    name(a: Classroom, b: Classroom): number {\n        return compareStrings(a.name, b.name);\n    },\n    created(a: Classroom, b: Classroom): number {\n        let value;\n        if (!a.created && !b.created) {\n            value  = 0;\n        } else if (!a.created) {\n            value = 1; // Undefined date should be sorted last in ascending order\n        } else if (!b.created) {\n            value = -1;\n        } else {\n            value = compareValues(a.created.getTime(), b.created.getTime());\n        }\n        if (value === 0) {\n            // Within the same created, sort by name\n            return compareStrings(a.name, b.name);\n        }\n        return value;\n    },\n};\n\nexport default class ClassroomOrder extends createItemOrderFactory(OrderFieldToComparator) {\n    static default = new ClassroomOrder('ascending', 'name');\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2024 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { compareStrings, createItemOrderFactory, IComparatorMap } from '../core/ItemOrder';\nimport ClassroomMember from './ClassroomMember';\n\nexport type ClassroomMemberOrderField =\n    | 'name';\n\nconst OrderFieldToComparator: IComparatorMap<ClassroomMember, ClassroomMemberOrderField> = {\n    name(a: ClassroomMember, b: ClassroomMember): number {\n        return compareStrings(a.displayName, b.displayName);\n    },\n};\n\nexport default class ClassroomMemberOrder extends createItemOrderFactory(OrderFieldToComparator) {\n    static default = new ClassroomMemberOrder('ascending', 'name');\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\nimport USSAdobeAssetOrder from './USSAdobeAssetOrder';\n\nexport default class MRUAdobeAssetOrder extends USSAdobeAssetOrder {\n    static default = new MRUAdobeAssetOrder('descending', 'lastAccessed');\n}\n\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2023 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\n\nimport USSAdobeAssetOrder from './USSAdobeAssetOrder';\n\nexport default class PublishedAdobeAssetOrder extends USSAdobeAssetOrder {\n    static default = new PublishedAdobeAssetOrder('descending', 'modified');\n}\n\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { compareStrings, createItemOrderFactory, IComparatorMap } from '../core/ItemOrder';\nimport OrgRepository from './OrgRepository';\n\nexport type OrgRepositoryOrderField = 'id';\n\nconst OrderFieldToComparator: IComparatorMap<OrgRepository, OrgRepositoryOrderField> = {\n    id(a: OrgRepository, b: OrgRepository): number {\n        return compareStrings(a.id, b.id);\n    }\n};\n\nexport default class OrgRepositoryOrder extends createItemOrderFactory(OrderFieldToComparator) {\n    static default = new OrgRepositoryOrder('ascending', 'id');\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2021 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { compareStrings, createItemOrderFactory, IComparatorMap } from '../core/ItemOrder';\nimport Collaborator from './Collaborator';\n\nexport type CollaboratorOrderField = 'name';\n\nconst OrderFieldToComparator: IComparatorMap<Collaborator, CollaboratorOrderField> = {\n    name(a: Collaborator, b: Collaborator): number {\n        return compareStrings(a.name ?? a.id, b.name ?? a.id);\n    }\n};\n\nexport default class CollaboratorOrder extends createItemOrderFactory(OrderFieldToComparator) {\n    static default = new CollaboratorOrder('ascending', 'name');\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { compareStrings, createItemOrderFactory, IComparatorMap } from '../core/ItemOrder';\nimport InvitedCollaborator from './InvitedCollaborator';\n\nexport type InvitedCollaboratorOrderField = 'email';\n\nconst OrderFieldToComparator: IComparatorMap<InvitedCollaborator, InvitedCollaboratorOrderField> = {\n    email(a: InvitedCollaborator, b: InvitedCollaborator): number {\n        return compareStrings(a.email ?? a.id, b.email ?? a.id);\n    }\n};\n\nexport default class InvitedCollaboratorOrder extends createItemOrderFactory(OrderFieldToComparator) {\n    static default = new InvitedCollaboratorOrder('ascending', 'email');\n}\n","/*************************************************************************\n *\n * ADOBE CONFIDENTIAL\n * ___________________\n *\n *  Copyright 2022 Adobe Systems Incorporated\n *  All Rights Reserved.\n *\n * NOTICE:  All information contained herein is, and remains\n * the property of Adobe Systems Incorporated and its suppliers,\n * if any.  The intellectual and technical concepts contained\n * herein are proprietary to Adobe Systems Incorporated and its\n * suppliers and are protected by trade secret or copyright law.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe Systems Incorporated.\n **************************************************************************/\n\nimport { createItemOrderFactory, IComparatorMap } from '../core/ItemOrder';\nimport CollaboratorsByAssetID from './CollaboratorsByAssetID';\n\nexport type CollaboratorsByAssetIDOrderField = 'noop';\n\nconst OrderFieldToComparator: IComparatorMap<CollaboratorsByAssetID, CollaboratorsByAssetIDOrderField> = {\n    // there is nothing in collaboratorListByUrn to order, this will keep order same\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    noop(a: CollaboratorsByAssetID, b: CollaboratorsByAssetID): number {\n        return 0;\n    }\n};\n\nexport default class CollaboratorsByAssetIDOrder extends createItemOrderFactory(OrderFieldToComparator) {\n    static default = new CollaboratorsByAssetIDOrder('ascending', 'noop');\n}\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n              t[p[i]] = s[p[i]];\n      }\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n  return new (P || (P = Promise))(function (resolve, reject) {\n      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n      function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\n\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n  return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (g && (g = 0, op[0] && (_ = 0)), _) try {\n          if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n  }\n  Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n  function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\") throw new TypeError(\"Object expected.\");\n    var dispose;\n    if (async) {\n        if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n        dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n        if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n        dispose = value[Symbol.dispose];\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  function next() {\n    while (env.stack.length) {\n      var rec = env.stack.pop();\n      try {\n        var result = rec.dispose && rec.dispose.call(rec.value);\n        if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n      }\n      catch (e) {\n          fail(e);\n      }\n    }\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"CCLibraries:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t\tif (script.src.indexOf(window.location.origin + '/') !== 0) {\n\t\t\tscript.crossOrigin = \"anonymous\";\n\t\t}\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + ({\"59\":\"css/AEFT-css-generated-15-main-scss\",\"144\":\"SpIconCCLibrary\",\"188\":\"SpTray\",\"201\":\"SpMenu\",\"208\":\"XIconShop\",\"386\":\"SpIconFlag\",\"406\":\"css/IDSN-css-light-main-scss\",\"437\":\"css/PPRO-css-generated-53-main-scss\",\"487\":\"XIconCCLibrary\",\"515\":\"XIconBrush\",\"532\":\"css/PPRO-css-generated-50-main-scss\",\"539\":\"css/AEFT-css-generated-43-main-scss\",\"554\":\"XIconUserGroup\",\"583\":\"css/PPRO-css-generated-23-main-scss\",\"608\":\"css/CLIO-css-light-main-scss\",\"622\":\"css/AEFT-css-generated-5-main-scss\",\"669\":\"SpProgressCircle\",\"748\":\"SpIconLink\",\"810\":\"css/AEFT-css-generated-80-main-scss\",\"834\":\"SpIconShoppingCart\",\"926\":\"css/PPRO-css-generated-98-main-scss\",\"956\":\"SpIconInvite\",\"1016\":\"css/PPRO-css-generated-55-main-scss\",\"1071\":\"css/PowerPoint-css-lighter-main-scss\",\"1255\":\"SpActionGroup\",\"1258\":\"XIconMore\",\"1311\":\"css/PPRO-css-generated-15-main-scss\",\"1331\":\"css/STGR-css-darker-main-scss\",\"1341\":\"css/PPRO-css-generated-45-main-scss\",\"1441\":\"css/AEFT-css-generated-83-main-scss\",\"1465\":\"css/StyleGuide-css-lighter-main-scss\",\"1573\":\"css/IDSN-css-lighter-main-scss\",\"1583\":\"css/PHXS-css-darker-main-scss\",\"1596\":\"SpIconRefresh\",\"1605\":\"SpIconDownloadFromCloudOutline\",\"1672\":\"css/KBRG-css-darker-main-scss\",\"1766\":\"css/AEFT-css-generated-60-main-scss\",\"1776\":\"SpIconOpenIn\",\"1813\":\"css/AEFT-css-generated-3-main-scss\",\"1839\":\"css/DRWV-css-light-main-scss\",\"1866\":\"XIconChevronRight\",\"1890\":\"css/DRWV-css-darker-main-scss\",\"1892\":\"SWCExpressMediumScale\",\"1894\":\"XIconCheckmark\",\"1952\":\"css/PPRO-css-generated-35-main-scss\",\"1977\":\"SpIconCloudDisconnected\",\"2000\":\"css/AEFT-css-generated-48-main-scss\",\"2002\":\"css/PPRO-css-generated-25-main-scss\",\"2012\":\"css/AEFT-css-generated-98-main-scss\",\"2039\":\"SWCExpressDarkestTheme\",\"2120\":\"SpIconClose\",\"2124\":\"css/AEFT-css-generated-63-main-scss\",\"2131\":\"css/PPRO-css-generated-63-main-scss\",\"2194\":\"css/PPRO-css-generated-70-main-scss\",\"2205\":\"SpIconSortOrderDown\",\"2216\":\"css/PPRO-css-generated-73-main-scss\",\"2261\":\"SpCheckbox\",\"2269\":\"css/PPRO-css-generated-83-main-scss\",\"2369\":\"css/PPRO-css-generated-33-main-scss\",\"2397\":\"css/PPRO-css-dark-main-scss\",\"2399\":\"css/AEFT-css-generated-58-main-scss\",\"2425\":\"css/PPRO-css-generated-8-main-scss\",\"2472\":\"css/PPRO-css-generated-3-main-scss\",\"2497\":\"css/AEFT-css-generated-30-main-scss\",\"2509\":\"XIconCloud\",\"2515\":\"SpIconInfoOutline\",\"2517\":\"SpIconLinkOut\",\"2581\":\"css/AEFT-css-generated-38-main-scss\",\"2620\":\"XIconSortOrderDown\",\"2625\":\"css/AEFT-css-generated-25-main-scss\",\"2636\":\"SpIconTextParagraph\",\"2652\":\"XIconFolderAdd\",\"2659\":\"SWCExpressLargeScale\",\"2663\":\"css/PHXS_UXP-css-light-main-scss\",\"2668\":\"SpActionMenu\",\"2697\":\"SpIconCloudError\",\"2716\":\"css/AEFT-css-generated-45-main-scss\",\"2729\":\"SWCLightTheme\",\"2764\":\"XIconClassicGridView\",\"2777\":\"css/KBRG-css-dark-main-scss\",\"2819\":\"SpIconCloud\",\"2861\":\"css/AEFT-css-generated-95-main-scss\",\"2880\":\"css/AEFT-css-light-main-scss\",\"2923\":\"css/AEFT-css-generated-10-main-scss\",\"2968\":\"SpIconText\",\"2984\":\"css/PPRO-css-generated-60-main-scss\",\"2988\":\"XIconFlag\",\"3019\":\"css/PPRO-css-light-main-scss\",\"3113\":\"css/CLIO-css-darker-main-scss\",\"3149\":\"SpIconFilter\",\"3223\":\"SpSwitch\",\"3239\":\"css/AEFT-css-generated-53-main-scss\",\"3240\":\"css/ILST_UXP-css-lighter-main-scss\",\"3241\":\"css/PPRO-css-generated-58-main-scss\",\"3326\":\"css/ACCC-css-darker-main-scss\",\"3368\":\"css/AEFT-css-generated-50-main-scss\",\"3461\":\"SpIconAdd\",\"3482\":\"css/AEFT-css-generated-78-main-scss\",\"3498\":\"SpIconUserGroup\",\"3633\":\"css/DRWV-css-lighter-main-scss\",\"3659\":\"css/PPRO-css-generated-38-main-scss\",\"3681\":\"css/AEFT-css-generated-8-main-scss\",\"3703\":\"css/AEFT-css-generated-93-main-scss\",\"3769\":\"css/PPRO-css-generated-20-main-scss\",\"3775\":\"css/PHXS-css-light-main-scss\",\"3795\":\"SpIconGlobe\",\"3869\":\"css/PowerPoint-css-darker-main-scss\",\"3878\":\"css/PPRO-css-generated-40-main-scss\",\"3882\":\"SpIconFolder\",\"3945\":\"css/PPRO-css-generated-48-main-scss\",\"4029\":\"css/ILST-css-light-main-scss\",\"4031\":\"css/ILST_UXP-css-dark-main-scss\",\"4051\":\"SpButtonGroup\",\"4067\":\"SpIconSortOrderUp\",\"4135\":\"css/PPRO-css-generated-68-main-scss\",\"4146\":\"XIconVisibility\",\"4192\":\"css/KBRG-css-lighter-main-scss\",\"4214\":\"css/Word-css-lighter-main-scss\",\"4231\":\"css/AEFT-css-darker-main-scss\",\"4255\":\"SpIconDate\",\"4268\":\"SWCMediumScale\",\"4356\":\"css/AEFT-css-generated-18-main-scss\",\"4386\":\"css/STGR-css-lighter-main-scss\",\"4400\":\"SpActionButton\",\"4450\":\"css/PPRO-css-generated-13-main-scss\",\"4458\":\"SpDivider\",\"4537\":\"SpOverlay\",\"4541\":\"SpIconBrush\",\"4549\":\"css/AEFT-css-generated-55-main-scss\",\"4587\":\"SpIconUserLock\",\"4589\":\"css/AEFT-css-generated-88-main-scss\",\"4665\":\"css/PPRO-css-generated-75-main-scss\",\"4668\":\"css/IDSN-css-darker-main-scss\",\"4671\":\"css/DRWV-css-dark-main-scss\",\"4687\":\"XIconCloudError\",\"4738\":\"css/AEFT-css-generated-28-main-scss\",\"4764\":\"SpIconClassicGridView\",\"4787\":\"XIconLockClosed\",\"4788\":\"SpIconBuilding\",\"4882\":\"css/AEFT-css-generated-23-main-scss\",\"4923\":\"css/IDSN-css-dark-main-scss\",\"4959\":\"css/PHXS_UXP-css-dark-main-scss\",\"5019\":\"css/ILST_UXP-css-light-main-scss\",\"5035\":\"SpIconRename\",\"5108\":\"css/AEFT-css-generated-85-main-scss\",\"5144\":\"SpTheme\",\"5155\":\"XIconRefresh\",\"5169\":\"css/FLPR-css-dark-main-scss\",\"5180\":\"css/ACCC-css-light-main-scss\",\"5339\":\"SpCard\",\"5341\":\"css/KBRG-css-lighter_mondo-main-scss\",\"5378\":\"XIconImage\",\"5408\":\"css/AEFT-css-generated-73-main-scss\",\"5458\":\"SWCLargeScale\",\"5502\":\"SpButton\",\"5529\":\"SpPopover\",\"5537\":\"SpIconMagnify\",\"5548\":\"css/ILST-css-lighter-main-scss\",\"5549\":\"SpIconSettings\",\"5599\":\"css/AEFT-css-dark-main-scss\",\"5661\":\"css/PHXS-css-dark-main-scss\",\"5670\":\"SpIconChevronLeft\",\"5706\":\"SpIconMore\",\"5724\":\"SpIconLockClosed\",\"5812\":\"css/Figma-css-dark-main-scss\",\"5874\":\"css/AEFT-css-generated-35-main-scss\",\"5883\":\"SpIconShowMenu\",\"5895\":\"css/GoogleSlides-css-lighter-main-scss\",\"5897\":\"css/Figma-css-lighter-main-scss\",\"6030\":\"css/ILST_UXP-css-darker-main-scss\",\"6085\":\"XIconColorPalette\",\"6142\":\"XIconBuilding\",\"6153\":\"XIconFilter\",\"6160\":\"XIconChevronLeft\",\"6282\":\"XIconDelete\",\"6284\":\"css/PPRO-css-generated-28-main-scss\",\"6289\":\"css/PPRO-css-generated-10-main-scss\",\"6301\":\"SpIconColorPalette\",\"6305\":\"XIconSortOrderUp\",\"6318\":\"XIconShoppingCart\",\"6321\":\"css/PPRO-css-generated-18-main-scss\",\"6365\":\"XIconText\",\"6414\":\"SpIconImage\",\"6462\":\"SpIconRailRightClose\",\"6465\":\"css/KBRG-css-dark_mondo-main-scss\",\"6488\":\"css/PPRO-css-generated-78-main-scss\",\"6552\":\"css/PPRO-css-generated-5-main-scss\",\"6589\":\"css/KBRG-css-light_mondo-main-scss\",\"6624\":\"SpIconFolderOpen\",\"6707\":\"XIconAddCircle\",\"6754\":\"SpIconAddCircle\",\"6776\":\"css/PPRO-css-generated-93-main-scss\",\"6817\":\"SpTooltip\",\"6837\":\"SpIconPublishRemove\",\"6875\":\"SWCExpressLightTheme\",\"6900\":\"css/AEFT-css-generated-75-main-scss\",\"6939\":\"SpIconVisibility\",\"6991\":\"SpIconDelete\",\"7050\":\"css/AEFT-css-generated-13-main-scss\",\"7057\":\"css/AEFT-css-generated-65-main-scss\",\"7075\":\"XIconClose\",\"7128\":\"css/PHXS-css-lighter-main-scss\",\"7136\":\"css/PPRO-css-generated-43-main-scss\",\"7167\":\"css/CCX-css-lighter-main-scss\",\"7213\":\"XIconEdit\",\"7242\":\"SpIconBrowse\",\"7254\":\"css/ILST-css-dark-main-scss\",\"7283\":\"SpIconViewList\",\"7311\":\"SWCLightestTheme\",\"7326\":\"css/PPRO-css-generated-85-main-scss\",\"7334\":\"css/AEFT-css-generated-20-main-scss\",\"7423\":\"css/PPRO-css-generated-88-main-scss\",\"7487\":\"SpIconUser\",\"7553\":\"XIconShowMenu\",\"7633\":\"XIconAdd\",\"7665\":\"SpIconHelpOutline\",\"7674\":\"SpIconEdit\",\"7685\":\"SpIconShop\",\"7725\":\"css/AEFT-css-dark-v7-main-scss\",\"7775\":\"XIconFolder\",\"7776\":\"css/ILST-css-darker-main-scss\",\"7793\":\"SpIconGlobeSearch\",\"7876\":\"XIconShare\",\"7933\":\"css/SPRK-css-lighter-main-scss\",\"7938\":\"css/GenStudio-css-lighter-main-scss\",\"8051\":\"SWCDarkestTheme\",\"8104\":\"XIconSettings\",\"8121\":\"SpIconFilterCheck\",\"8202\":\"SWCExpressLightestTheme\",\"8211\":\"css/AEFT-css-generated-70-main-scss\",\"8237\":\"css/AEFT-css-generated-90-main-scss\",\"8320\":\"css/FLPR-css-lighter-main-scss\",\"8362\":\"css/PHXS_UXP-css-lighter-main-scss\",\"8422\":\"XIconInfo\",\"8499\":\"css/PPRO-css-dark-v7-main-scss\",\"8544\":\"css/PPRO-css-generated-95-main-scss\",\"8637\":\"SpIconAlert\",\"8655\":\"XIconRename\",\"8684\":\"SWCDarkTheme\",\"8689\":\"SWCExpressDarkTheme\",\"8697\":\"SpIconChevronRight\",\"8719\":\"XIconInvite\",\"8740\":\"css/PPRO-css-generated-65-main-scss\",\"8762\":\"XIconChevronDown\",\"8797\":\"css/CLIO-css-lighter-main-scss\",\"8843\":\"css/PPRO-css-generated-90-main-scss\",\"8849\":\"SpStatusLight\",\"8867\":\"XIconUser\",\"8908\":\"XIconCloudDisconnected\",\"9011\":\"css/CLIO-css-dark-main-scss\",\"9020\":\"SpIconFolderAdd\",\"9107\":\"css/AEFT-css-generated-68-main-scss\",\"9196\":\"SpIconChevronDown\",\"9217\":\"XIconLink\",\"9219\":\"SpIconOrganisations\",\"9222\":\"XIconViewList\",\"9297\":\"css/PHXS_UXP-css-darker-main-scss\",\"9369\":\"css/AEFT-css-generated-40-main-scss\",\"9469\":\"XIconAlert\",\"9623\":\"css/PPRO-css-darker-main-scss\",\"9686\":\"SpIconCheckmark\",\"9690\":\"css/AH-css-darker-main-scss\",\"9729\":\"css/Word-css-darker-main-scss\",\"9754\":\"css/PPRO-css-generated-80-main-scss\",\"9776\":\"css/PPRO-css-generated-30-main-scss\",\"9860\":\"SpIconShare\",\"9864\":\"SpIconInfo\",\"9910\":\"css/AH-css-light-main-scss\",\"9988\":\"css/AEFT-css-generated-33-main-scss\"}[chunkId] || chunkId) + \".bundle.js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.hmd = (module) => {\n\tmodule = Object.create(module);\n\tif (!module.children) module.children = [];\n\tObject.defineProperty(module, 'exports', {\n\t\tenumerable: true,\n\t\tset: () => {\n\t\t\tthrow new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);\n\t\t}\n\t});\n\treturn module;\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0,\n\t3312: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(3312 != chunkId) {\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkCCLibraries\"] = self[\"webpackChunkCCLibraries\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\n__webpack_require__.O(undefined, [3312], () => (__webpack_require__(77123)))\n__webpack_require__.O(undefined, [3312], () => (__webpack_require__(32390)))\n__webpack_require__.O(undefined, [3312], () => (__webpack_require__(75523)))\n__webpack_require__.O(undefined, [3312], () => (__webpack_require__(71674)))\n__webpack_require__.O(undefined, [3312], () => (__webpack_require__(37460)))\n__webpack_require__.O(undefined, [3312], () => (__webpack_require__(25587)))\n__webpack_require__.O(undefined, [3312], () => (__webpack_require__(56143)))\n__webpack_require__.O(undefined, [3312], () => (__webpack_require__(67738)))\n__webpack_require__.O(undefined, [3312], () => (__webpack_require__(28972)))\n__webpack_require__.O(undefined, [3312], () => (__webpack_require__(92188)))\nvar __webpack_exports__ = __webpack_require__.O(undefined, [3312], () => (__webpack_require__(18413)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["root","factory","exports","module","define","amd","self","map","webpackAsyncContext","req","__webpack_require__","o","Promise","resolve","then","e","Error","code","ids","id","t","keys","Object","webpackContext","webpackContextResolve","window","global","SENTRY_RELEASE","isErrorEvent","event","isTransactionEvent","discarded_events","dsn","timestamp","type","constructor","recordDroppedEvent","options","url","captureException","result","eventId","captureMessage","message","level","hint","scope","promisedEvent","captureEvent","captureSession","updateSession","init","getDsn","getOptions","getSdkMetadata","getTransport","flush","close","getEventProcessors","addEventProcessor","setupIntegrations","getIntegrationById","getIntegration","addIntegration","setupIntegration","sendEvent","metadata","tunnel","enhanceEventWithSdkInfo","env","createAttachmentEnvelopeItem","attachment","promise","sendSession","session","sent_at","sdkInfo","sdk","on","emit","_updateSessionFromEvent","errored","exceptions","crashed","status","errors","_isClientDoneProcessing","clearInterval","ticked","_isEnabled","_prepareEvent","evt","trace","trace_id","span_id","parent_span_id","dynamicSamplingContext","_captureEvent","finalEvent","reason","_processEvent","prepared","beforeSendResult","beforeSendLabel","processedEvent","transactionInfo","source","data","__sentry__","originalException","_process","value","_sendEnvelope","_clearOutcomes","category","quantity","name","packages","version","WINDOW","eventFromException","eventFromMessage","captureUserFeedback","_flushOutcomes","ex","exception","frames","values","stackParser","reactMinifiedRegexp","extractMessage","attachStacktrace","addExceptionMechanism","syntheticException","isUnhandledRejection","addExceptionTypeValue","extra","__serialized__","synthetic","input","stacktrace","getNonErrorObjectExceptionValue","obj","ignoreOnError","setTimeout","fn","before","ignoreNextOnError","withScope","arguments","sentryWrapped","markFunctionWrapped","addNonEnumerableProperty","get","setupOnce","preprocessEvent","applyAggregateErrorsToEvent","exceptionFromError","LinkedErrors","filenameMetadataMap","Map","parsedStacks","Set","parser","ensureMetadataStacksAreParsed","client","forEachEnvelopeItem","stripMetadataFromStackFrames","item","addGlobalEventProcessor","frame","addMetadataToStackFrames","ModuleMetadata","errorsInstrumented","errorCallback","activeTransaction","tag","object","acc","baggageHeaderToObject","baggageHeader","split","baggageEntry","reduce","parentSampled","traceId","parentSpanId","sentryTrace","baggage","baggageObject","currBaggageObject","spanId","sampled","propagationContext","traceparentData","sampledString","add","span","startChild","spanContext","childSpan","setTag","setData","setStatus","setHttpStatus","setName","isSuccess","finish","toTraceparent","toContext","description","endTimestamp","op","startTimestamp","tags","updateWithContext","getTraceContext","toJSON","start_timestamp","origin","transactionContext","spanMetadata","initSpanRecorder","setContext","setMeasurement","unit","setMetadata","trimEnd","getDynamicSamplingContext","dsc","setHub","_finishTransaction","contexts","spans","transaction","sdkProcessingMetadata","transaction_info","idleTimeout","finalTimeout","heartbeatInterval","IDLE_TRANSACTION_FINISH_REASONS","_pushActivity","_popActivity","transactionSpanId","maxlen","_idleHub","_idleTimeout","_finalTimeout","_heartbeatInterval","_onScope","callback","registerBeforeFinishCallback","cancelIdleTimeout","restartOnChildSpanChange","clearTimeout","setFinishReason","_restartIdleTimeout","_beat","_pingHeartbeat","samplingContext","traceHeaders","_startTransaction","customSamplingContext","hub","onScope","carrier","addInstrumentationHandler","context","onError","activeSpan","maybePromiseResult","finishAndSetSpan","currentScope","createChildSpanOrTransaction","parentSpan","ctx","normalizeContext","createTransport","matcher","otherTransports","release","send","eventFromEnvelope","transport","makeOverrideReleaseTransport","transports","envelope","getEvent","types","filter","results","allTransports","GLOBAL_OBJ","metric","reportAllChanges","delta","prevValue","performance","entryType","startTime","navigationEntry","getNavigationEntryFromPerformanceTiming","navigationType","rating","entries","opts","po","buffered","cb","removeEventListener","addEventListener","firstHiddenTime","onHidden","timeStamp","reportedMetricIDs","handlers","instrumented","_previousCls","_previousFid","_previousLcp","addHandler","observe","triggerHandlers","instrumentPerformanceObserver","typeHandlers","handler","f","instrumentCls","sessionValue","sessionEntries","entry","report","handleEntries","onCLS","instrumentFid","onFID","instrumentLcp","once","capture","onLCP","addMetricObserver","instrumentFn","previousValue","getCleanupCallback","isShadowRoot","n","isNativeShadowDom","shadowRoot","stringifyStylesheet","s","cssText","fixBrowserCompatibilityIssuesInCSS","stringifyRule","rule","importStringified","statement","escapeImportStatement","cssStringified","NodeType","Mirror","getId","getNode","getIds","getMeta","removeNodeFromMap","has","hasNode","replace","reset","shouldMaskInput","maskInputOptions","tagName","maskInputValue","isMasked","element","maskInputFn","text","toLowerCase","str","toUpperCase","ORIGINAL_ATTRIBUTE_NAME","getInputType","getInputValue","el","_id","tagNameRegex","RegExp","genId","canvasService","canvasCtx","URL_IN_CSS_REF","URL_PROTOCOL_MATCH","URL_WWW_MATCH","DATA_URI","absoluteToStylesheet","href","stack","parts","SRCSET_NOT_SPACES","SRCSET_COMMAS_OR_SPACES","absoluteToDoc","doc","attributeValue","a","isSVGElement","getHref","transformAttribute","maskAttributeFn","chars","pos","collectCharacters","output","inParens","descriptorsStr","ignoreAttribute","_value","distanceToMatch","node","matchPredicate","limit","Infinity","distance","createMatchPredicate","className","selector","regex","needMaskingText","maskTextClass","maskTextSelector","unmaskTextClass","unmaskTextSelector","maskAllText","unmaskDistance","maskDistance","serializeNode","mirror","childNodes","compatMode","publicId","systemId","rootId","blockClass","blockSelector","unblockSelector","attributes","canvas","getImageData","blankCanvas","image","console","oldValue","recordInlineImage","class","rr_width","rr_height","isCustomElement","isSVG","needBlock","isCustom","inlineStylesheet","dataURLOptions","inlineImages","recordCanvas","keepIframeSrcFn","newlyAddedElement","textContent","maskTextFn","isStyle","lowerIfExists","maybeAttr","serializeNodeWithId","sn","slimDOMOptions","_serializedNode","onSerialize","recordChild","serializedNode","preserveWhiteSpace","skipChild","onIframeLoad","iframeLoadTimeout","onStylesheetLoad","stylesheetLoadTimeout","serializedChildNode","iframeEl","listener","readyState","fired","onceIframeLoaded","link","styleSheetLoadTimeout","styleSheetLoaded","onceStylesheetLoaded","target","document","passive","DEPARTED_MIRROR_ACCESS_WARNING","_mirror","func","previous","timeout","remaining","hookSetter","key","d","isRevoked","win","set","original","patch","replacement","wrapped","__rrweb_original__","enumerable","Proxy","Reflect","nowTimestamp","Date","now","getWindowScroll","left","top","getWindowHeight","getWindowWidth","isBlocked","checkAncestors","unblockDistance","isIgnored","isAncestorRemoved","legacy_isTouchEvent","isSerializedIframe","isSerializedStylesheet","hasShadowRoot","StyleSheetMirror","newId","getStyle","generateId","getShadowHost","shadowHost","shadowHostInDom","rootShadowHost","inDom","EventType","EventType2","IncrementalSource","IncrementalSource2","MouseInteractions","MouseInteractions2","PointerTypes","PointerTypes2","CanvasContext","CanvasContext2","isNodeInLinkedList","DoubleLinkedList","current","addNode","next","removeNode","moveKey","parentId","MutationBuffer","mutations","ns","nextId","adds","addedIds","pushAdd","tailNode","unhandledNode","Node","host","addList","candidate","texts","attribute","removes","unattachedDoc","attributeName","styleDiff","_unchangedStyles","old","newPriority","m","deepDelete","isShadow","undefined","targetId","forEach","freeze","unfreeze","isFrozen","lock","unlock","addsSet","isParentRemoved","_isParentRemoved","isAncestorInSet","_isAncestorInSet","errorHandler","registerErrorHandler","unregisterErrorHandler","callbackWrapper","mutationBuffers","getEventTarget","initMutationObserver","rootEl","mutationBuffer","mutationObserverCtor","observer","attributeOldValue","characterData","characterDataOldValue","childList","subtree","initMouseInteractionObserver","mouseInteractionCb","sampling","disableMap","eventKey","pointerType","thisEventKey","currentPointerType","x","y","eventName","initScrollObserver","scrollCb","wrapEventWithUserTriggeredFlag","v","enable","INPUT_TAGS","lastInputValueMap","WeakMap","getNestedCSSRulePositions","childRule","hasNestedCSSRule","getIdAndStyleId","sheet","styleMirror","styleId","initAdoptedStyleSheetObserver","stylesheetManager","hostId","configurable","initObservers","hooks","mutationCb","mousemoveCb","viewportResizeCb","inputCb","mediaInteractionCb","styleSheetRuleCb","styleDeclarationCb","canvasMutationCb","fontCb","selectionCb","customElementCb","mergeHooks","p","positions","timeBaseline","callbackThreshold","timeOffset","wrappedCb","threshold","trailing","width","height","lastH","lastW","ignoreClass","ignoreSelector","userTriggeredOnInput","isChecked","cbWithDedup","userTriggered","querySelectorAll","lastInputValue","isTrusted","currentWindow","currentTime","volume","muted","playbackRate","apply","index","replaceSync","supportedNestedCSSRuleTypes","unmodifiedFunctions","insertRule","deleteRule","ignoreCSSAttributes","property","priority","remove","fontMap","family","buffer","descriptors","fontSource","JSON","initFontObserver","param","collapsed","ranges","start","startOffset","end","endOffset","updateSelection","pluginHandlers","mutationObserver","mousemoveHandler","mouseInteractionHandler","scrollHandler","viewportResizeHandler","inputHandler","mediaInteractionHandler","styleSheetObserver","adoptedStyleSheetObserver","styleDeclarationObserver","fontObserver","selectionObserver","customElementObserver","prop","canMonkeyPatchNestedCSSRule","CrossOriginIframeMirror","idToRemoteIdMap","remoteIdToIdMap","getRemoteId","getRemoteIds","getIdToRemoteIdMap","getRemoteIdToIdMap","IframeManagerNoop","addIframe","addLoadListener","attachIframe","IframeManager","isAttachIframe","handleMessage","crossOriginMessageEvent","transformCrossOriginEvent","replaceIds","replaceStyleIds","replaceIdOnNode","patchRootIdOnNode","ShadowDomManagerNoop","addShadowRoot","observeAttachShadow","ShadowDomManager","shadowDomManager","patchAttachShadow","manager","__awaiter","thisArg","_arguments","P","generator","step","reject","lookup","Uint8Array","i","length","canvasVarMap","saveWebGLVar","ctor","contextMap","list","serializeArg","rr_type","args","base64","src","serializeArgs","isInstanceOfWebGLObject","initCanvasContextObserver","setPreserveDrawingBufferToTrue","contextType","contextAttributes","preserveDrawingBuffer","patchGLPrototype","prototype","includes","setter","createURL","sourcemapArg","enableUnicodeArg","enableUnicode","binaryView","WorkerFactory","CanvasManagerNoop","CanvasManager","latestId","invokeId","initCanvasFPSObserver","worker","snapshotInProgressMap","commands","lastSnapshotTime","matchedCanvas","getCanvas","bitmap","rafId","canvasContextReset","cancelAnimationFrame","initCanvasMutationObserver","canvas2DReset","canvasWebGL1and2Reset","startPendingCanvasMutationFlusher","requestAnimationFrame","startRAFTimestamping","flushPendingCanvasMutations","flushPendingCanvasMutationFor","StylesheetManager","attachLinkElement","trackLinkElement","adoptStyleSheets","styleIds","sheets","styles","rules","adoptedStyleSheetData","trackStylesheetInLinkElement","ProcessedNodeManager","periodicallyClear","inOtherBuffer","clear","destroy","wrapEvent","wrappedEmit","takeFullSnapshot","canvasManager","recording","record","collectFonts","plugins","onMutation","passEmitsToParent","color","date","email","month","number","range","search","tel","time","week","textarea","select","radio","checkbox","_maskInputOptions","script","comment","headFavicon","headWhitespace","headMetaSocial","headMetaRobots","headMetaHttpEquiv","headMetaVerification","headMetaAuthorship","headMetaDescKeywords","_slimDOMOptions","polyfill","isCheckout","lastFullSnapshotEvent","incrementalSnapshotCount","adoptedStyleSheetCb","recordCrossOriginIframes","plugin","nodeMirror","crossOriginIframeMirror","crossOriginIframeStyleMirror","__RRWEB_EXCLUDE_SHADOW_DOM__","bypassOptions","iframeManager","processedNodeManager","maskAllInputs","slimDOM","initialOffset","payload","replay","addCustomEvent","freezePage","fill","slowClickConfig","_addBreadcrumbEvent","addListeners","obs","cleanupWindowOpen","removeListeners","handleClick","breadcrumb","clickBreadcrumb","clickCount","_handleMultiClick","click","_getClicks","_checkClicks","timedOutClicks","_generateBreadcrumbs","route","timeAfterClickMs","endReason","_scheduleCheckClicks","SLOW_CLICK_TAGS","nowInSeconds","ATTRIBUTES_TO_RECORD","normalizedKey","handlerData","maxStringLength","getBaseDomBreadcrumb","isClick","clickDetector","getClickTargetNode","addBreadcrumbEvent","nodeId","Boolean","join","baseBreadcrumb","metaKey","shiftKey","ctrlKey","altKey","ENTRY_TYPES","resource","initiatorType","responseEnd","decodedBodySize","encodedBodySize","responseStatus","transferSize","size","statusCode","paint","navigation","duration","domComplete","domContentLoadedEventStart","domContentLoadedEventEnd","domInteractive","loadEventStart","loadEventEnd","redirectCount","createPerformanceEntry","getAbsoluteTime","clearCallbacks","addLcpInstrumentationHandler","addEvent","eventSize","getEarliestTimestamp","ensureReady","error","postMessage","method","arg","_getAndIncrementId","_sendEventToWorker","_finishRequest","response","ensureWorkerIsLoaded","_ensureWorkerIsLoaded","_switchToCompressionWorker","events","hasCheckout","addEventPromises","useCompression","workerUrl","customWorkerUrl","deleteSession","started","lastActivity","segmentId","previousSessionId","sessionSampleRate","allowBuffering","stickySession","saveSession","initialTime","expiry","targetTime","maxReplayDuration","sessionIdleExpire","isExpired","traceInternals","sessionOptions","_addEvent","replayOptions","eventAfterPossibleCallback","maybeApplyCallback","getCurrentHub","replayContext","handleTransactionEvent","handleErrorEvent","includeAfterSendEventHandling","replayId","afterSendHandler","createPerformanceSpans","addNetworkBreadcrumb","ALLOWED_PRIMITIVES","json","_evaluateJsonPos","_handleObj","_handleArr","_handleColon","_handleComma","_handleObjClose","_handleArrClose","_handleQuote","_isEscaped","body","textEncoder","request","headers","_meta","warnings","bodySize","info","filteredHeaders","_serializeFormData","formData","_prepareFetchData","makeNetworkReplayBreadcrumb","status_code","requestBodySize","request_body_size","responseBodySize","response_body_size","captureDetails","urlMatches","_getRequestInfo","buildSkippedNetworkRequestOrResponse","_getResponseInfo","networkCaptureBodies","networkRequestHeaders","fetchArgs","networkResponseHeaders","getAllHeaders","buildNetworkRequestOrResponse","res","_parseFetchBody","bodyText","getBodySize","_getFetchRequestArgBody","allowedHeaders","allHeaders","getHeadersFromOptions","_prepareXhrData","getAllowedHeaders","xhr","networkDetailAllowUrls","networkDetailDenyUrls","parseContentLengthHeader","enrichXhrBreadcrumb","captureXhrBreadcrumbToReplay","enrichFetchBreadcrumb","captureFetchBreadcrumbToReplay","_LAST_BREADCRUMB","newBreadcrumb","isTruncated","hasHooks","addMemoryEntry","createMemoryEntry","memoryEntry","memory","jsHeapSizeLimit","totalJSHeapSize","usedJSHeapSize","hadFirstEvent","addEventSync","errorSampleRate","useCompressionOption","blockAllMedia","networkDetailHasUrls","networkRequestHasHeaders","networkResponseHasHeaders","addSettingsEvent","replayEvent","recordingData","createEventEnvelopeHeaders","payloadWithSequence","prepareReplayEvent","integrations","eventHint","event_id","prepareEvent","preparedEvent","sendReplayRequest","eventContext","preparedRecordingData","prepareRecordingData","segment_id","urls","errorIds","traceIds","initialTimestamp","baseEvent","replay_start_timestamp","error_ids","trace_ids","replay_id","replay_type","createReplayEnvelope","sendReplay","replayData","retryConfig","count","interval","_retryCount","maxCount","durationSeconds","counter","_cleanup","isThrottled","recordingOptions","ReplayContainer","sessionIdlePause","initialUrl","cancelTimers","callbackReturnValue","timerId","maxTimerId","debounced","maxWait","scrollTimeout","getContext","isEnabled","isPaused","initializeSampling","logInfoNextTick","startBuffering","startRecording","checkoutEveryNms","stopRecording","stop","forceFlush","force","clearSession","pause","logInfo","resume","sendBufferedReplayOrFlush","continueRecording","activityTime","hasStoppedRecording","addUpdate","triggerUserActivity","updateUserActivity","conditionalFlush","flushImmediate","cancelFlush","getSessionId","checkAndHandleExpiredSession","setInitialState","throttledAddEvent","getCurrentRoute","_initializeRecording","_handleException","_initializeSessionForSampling","_checkSession","shouldRefreshSession","_refreshSession","_addListeners","handleNetworkBreadcrumbs","addGlobalListeners","_removeListeners","__init","__init2","__init3","__init4","handleKeyboardEvent","_doChangeToBackgroundTasks","_doChangeToForegroundTasks","_updateUserActivity","_updateSessionActivity","_createCustomBreadcrumb","_addPerformanceEntries","_clearContext","_updateInitialTimestampFromEventBuffer","_popEventContext","_runFlush","__init5","tooShort","tooLong","eventBuffer","_maybeSaveSession","__init6","getOption","selectors","defaultSelectors","deprecatedClassOption","deprecatedSelectorOption","allSelectors","MEDIA_SELECTORS","DEFAULT_NETWORK_HEADERS","_initialized","flushMinDelay","flushMaxDelay","minReplayDuration","_experiments","mutationBreadcrumbLimit","mutationLimit","slowClickTimeout","slowClickIgnoreSelectors","mask","maskAttributes","unmask","block","unblock","ignore","maskFn","beforeAddRecordingEvent","password","privacyOptions","maskAttribute","err","getReplayId","_initialize","_setup","initialOptions","opt","finalOptions","_getMergedNetworkHeaders","Replay","msToSec","getBrowserPerformanceAPI","_lcpEntry","_clsEntry","_performanceCursor","_measurements","fidCallback","clsCallback","lcpCallback","performanceEntries","_addPerformanceNavigationTiming","_startChild","_addRequest","_addNavigationSpans","responseStartTimestamp","requestStartTimestamp","timeOrigin","_addMeasureSpans","resourceName","_addResourceSpans","_trackNavigator","measurementName","_tagMetricInfo","eventEnd","traceFetch","traceXHR","enableHTTPTimings","tracingOrigins","tracePropagationTargets","_options","shouldCreateSpanForRequest","shouldAttachHeaders","shouldCreateSpan","shouldCreateSpanResult","sentryXhrData","setHeaderOnXhr","addHTTPTimings","resourceTiming","nextHopProtocol","_name","timingSpanData","spanData","sentryTraceHeader","sentryBaggageHeader","DEFAULT_BROWSER_TRACING_OPTIONS","TRACING_DEFAULTS","markBackgroundTransactions","routingInstrumentation","customStartTransaction","startTransactionOnPageLoad","startTransactionOnLocationChange","to","from","startingUrl","enableLongTask","defaultRequestInstrumentationOptions","addTracingExtensions","addPerformanceInstrumentationHandler","instrumentRouting","instrumentOutgoingRequests","_createRouteTransaction","finalContext","location","idleTransaction","addPerformanceEntries","_registerInteractionListener","inflightInteractionTransaction","promisifyRequest","store","createIndexedDbStore","insert","serializeEnvelope","serialized","pop","deserialized","parseEnvelope","createStore","flushTimer","found","delay","flushIn","retryDelay","shouldQueue","flushWithBackOff","log","MS_TO_NS","THREAD_ID_STRING","String","THREAD_NAME","OS_PLATFORM","OS_PLATFORM_VERSION","OS_ARCH","OS_BROWSER","OS_MODEL","OS_LOCALE","userAgentData","profile","samples","stacks","thread_metadata","EMPTY_STACK_ID","STACK_ID","elapsed_since_start_ns","stack_id","thread_id","function","abs_path","lineno","colno","stackTop","getHighEntropyValues","ua","catch","debugIdStackParserCache","debugIdStackFramesCache","parsedStack","resource_paths","images","code_file","debug_id","PROFILING_CONSTRUCTOR_FAILED","profile_id","processed_profile","platform","environment","runtime","os","build_number","device","locale","model","manufacturer","architecture","is_emulator","debug_meta","transactions","active_thread_id","relative_start_ns","relative_end_ns","PROFILE_MAP","sampleInterval","maxBufferSize","onProfileHandler","profiler","maxDurationTimeoutID","addProfileToGlobalCache","originalFinish","startProfileForTransaction","profiledTransactionEvents","profiledTransaction","profilesToAddToEnvelope","profiles","addProfilesToEnvelope","logger","BrowserProfilingIntegration","windowIntegrations","INTEGRATIONS","CoreIntegrations","BrowserIntegrations","MAX_ALLOWED_STRING_LENGTH","dom","fetch","history","sentry","keyAttrs","htmlTreeAsString","addSentryBreadcrumb","_consoleBreadcrumb","_xhrBreadcrumb","_fetchBreadcrumb","_historyBreadcrumb","parsedFrom","Breadcrumbs","processEvent","currentEvent","_isSameStacktrace","frameA","_isSameFingerprint","_getExceptionFromEvent","_getFramesFromEvent","Dedupe","onerror","onunhandledrejection","globalHandlerLog","installFunc","_installGlobalOnErrorHandler","msg","_eventFromIncompleteOnError","_enhanceEventWithInitialFrame","eventFromUnknownInput","line","column","addMechanismAndCapture","_installGlobalOnUnhandledRejectionHandler","_eventFromRejectionWithPrimitive","ev0sf","filename","in_app","handled","getHubAndOptions","GlobalHandlers","referrer","Referer","userAgent","HttpContext","DEFAULT_EVENT_TARGET","XMLHttpRequest","eventTarget","setInterval","_wrapTimeFunction","mechanism","_wrapRAF","wrap","_wrapXHR","originalSend","xmlHttpRequestProps","wrapOptions","_wrapEventTarget","proto","originalRemoveEventListener","TryCatch","clientClass","initAndBind","startSessionOnHub","startSessionTracking","injectionPoint","ignoreDuration","UNKNOWN_FUNCTION","createFrame","chromeRegex","chromeEvalRegex","geckoREgex","geckoEvalRegex","extractSafariExtensionDetails","winjsRegex","opera10Regex","opera11Regex","isSafariExtension","cachedFetchImpl","nativeFetch","sandbox","fetchImpl","pendingBodySize","pendingCount","referrerPolicy","keepalive","feedback","getBaseApiEndpoint","_encodedAuth","sentry_key","sentry_version","sentry_client","tunnelOrOptions","dsnLike","dialogOptions","encodedOptions","getGlobalEventProcessors","processors","final","captureContext","isOlderThan","bindClient","pushScope","popScope","getClient","getScope","getStack","getStackTop","lastEventId","addBreadcrumb","consoleSandbox","mergedBreadcrumb","setUser","setTags","setExtras","setExtra","configureScope","run","makeMain","startTransaction","endSession","closeSession","startSession","user","shouldSendDefaultPii","_sendSessionUpdate","_withClient","_callExtensionMethod","extensions","setHubOnCarrier","getGlobalHub","registry","hasHubOnCarrier","__SENTRY__","defaultIntegrations","integration","integrationsByName","finalIntegrations","integrationIndex","installedIntegrations","originalFunctionToString","Function","FunctionToString","DEFAULT_IGNORE_ERRORS","DEFAULT_IGNORE_TRANSACTIONS","internalOptions","clientOptions","allowUrls","denyUrls","ignoreErrors","ignoreTransactions","ignoreInternal","possibleMessages","lastException","_getEventFilterUrl","InboundFilters","newScope","addScopeListener","getUser","getRequestSession","setRequestSession","extras","setFingerprint","setLevel","setTransactionName","setSpan","getSpan","getTransaction","setSession","getSession","update","breadcrumbs","getLastBreadcrumb","clearBreadcrumbs","addAttachment","getAttachments","clearAttachments","applyToEvent","additionalEventProcessors","setSDKProcessingMetadata","setPropagationContext","getPropagationContext","_getBreadcrumbs","_notifyScopeListeners","_applyFingerprint","generatePropagationContext","sid","did","abnormal_mechanism","attrs","ip_address","user_agent","user_segment","public_key","$","drain","makeRequest","filteredEnvelopeItems","rateLimits","recordEnvelopeLoss","getEventForEnvelopeItem","removeTrailingSlash","applyClientOptions","applyIntegrationsMetadata","applyDebugIds","finalScope","filenameDebugIdMap","applyDebugMeta","b","normalized","consoleHandler","CaptureConsole","debugger","stringify","Debug","depth","enhanceEventWithErrorData","extraErrorInfo","ExtraErrorData","_event","_error","eventProcessor","_cacheEvent","_enforceMaxEvents","iterate","cacheKey","sort","slice","_purgeEvent","_purgeEvents","_sendEvents","Offline","reports","plainBody","details","normalizeArray","up","ReportingObserver","splitPathRe","splitPath","resolvedPath","resolvedAbsolute","trim","arr","RewriteFrames","process","samePartsLength","outputParts","_processExceptionsEvent","_processStacktrace","SessionTiming","_getTransaction","Transaction","failedRequestStatusCodes","failedRequestTargets","_fetchResponseHandler","requestInfo","cookieHeader","cookies","requestHeaders","requestCookies","responseHeaders","responseCookies","_xhrResponseHandler","_getResponseSizeFromHeaders","_parseCookieString","_extractFetchHeaders","_getXHRResponseHeaders","_isInGivenRequestTargets","_isInGivenStatusRanges","_wrapFetch","_shouldCaptureResponse","_createEvent","body_size","HttpClient","addSourceContext","htmlLines","htmlFilename","linesOfContext","addContextToFrame","applySourceContextToFrame","ContextLines","reactIs","require","REACT_STATICS","childContextTypes","contextTypes","defaultProps","displayName","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","propTypes","KNOWN_STATICS","caller","callee","arity","MEMO_STATICS","compare","TYPE_STATICS","getStatics","component","isMemo","ForwardRef","render","Memo","defineProperty","getOwnPropertyNames","getOwnPropertySymbols","getOwnPropertyDescriptor","getPrototypeOf","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","concat","targetStatics","sourceStatics","descriptor","exceptionFromErrorImplementation","maxValueLimit","aggregateExceptionsFromError","prevExceptions","exceptionId","applyExceptionGroupFieldsForParentException","applyExceptionGroupFieldsForChildException","newExceptions","newException","newExceptionId","childError","is_exception_group","exception_id","parent_id","elem","nextStr","out","len","currentElem","_htmlElementAsString","keyAttrPairs","classes","attr","DSN_REGEX","path","projectId","pass","port","protocol","publicKey","dsnFromComponents","components","items","append","stringifiedPayload","buffers","merged","offset","textDecoder","dropUndefinedKeys","content_type","attachment_type","sessions","client_report","user_report","replay_event","replay_recording","check_in","statsd","instrument","CONSOLE_LEVELS","originalConsoleMethods","instrumentConsole","refCount","handlerForType","originalAddEventListener","instrumentDOM","request_headers","xhrInfo","onreadystatechangeHandler","instrumentXHR","fetchData","instrumentFetch","lastHref","instrumentHistory","_oldOnErrorHandler","_oldOnUnhandledRejectionHandler","hasProp","getUrlFromResource","debounceTimerID","lastCapturedEventType","lastCapturedEventTargetId","makeDOMEventHandler","eventType","objectToString","toString","isBuiltin","wat","wrappedLevels","wrappedFuncs","enabled","disable","getRandomByte","getFirstException","firstException","Math","sourceLine","ERROR","maxSize","visit","maxProperties","memo","inner","numAdded","unmemoize","writable","getOwnProperties","currentTarget","newObj","serializeEventTarget","extractedProps","_dropUndefinedKeys","memoizationMap","returnValue","inputValue","limits","rateLimitHeader","categories","updatedRateLimits","WEBPACK_ERROR_REGEXP","STRIP_FRAME_REGEXP","sortedParsers","localStack","defaultFunctionName","newLine","testString","patterns","requireExactStringMatch","pattern","States","SyncPromise","executor","onfulfilled","onrejected","finally","isRejected","val","onfinally","cachedHandlers","dateTimestampSource","nowSeconds","platformPerformance","timestampSource","_browserPerformanceTimeOriginMode","hash","relative","isGlobalObj","inferEnvironment","hostname","reactEvents","divergentNativeEvents","onDoubleClick","mimickedReactEvents","onInput","onFocusOut","onSelectionChange","captureEvents","retargetEvents","reactEventName","nativeEventName","getNativeEventName","ignoreEventPaths","nativeEvent","composedPath","push","parentElement","getComposedPath","reactComponent","findReactComponent","props","findReactProps","dispatchEvent","cancelBubble","indexOf","hasOwnProperty","call","memoizedProps","componentProps","isPropagationStopped","fallbackTagNameSuffix","fallbackTagName","BUILD_VERSION","Level","Metrics","adobeMetrics","back","this","_log","RecordType","HISTORY","INFO","forward","go","unshift","state","analytics","track","ANALYTICS","trackEvent","eventData","trackPage","pageData","trackUser","userData","assign","LOCATION","reload","shift","g","recordType","write","metricsState","sdkVersion","LOG","warn","WARN","debug","DEBUG","TRACE","prefix","create","TIMER","EVENT","recent","revent","RECENT","sea","seaEvent","SEA","queue","MetricsEvents","UserOptOutAllowList","isUnicodeLanguageSubtag","isUnicodeScriptSubtag","isUnicodeRegionSubtag","isStructurallyValidLanguageTag","parseUnicodeLanguageId","parseUnicodeLocaleId","getCanonicalLocales","tslib_1","parser_1","emitter_1","canonicalizer_1","locales","seen","_i","locales_1","canonicalizedTag","emitUnicodeLocaleId","canonicalizeUnicodeLocaleId","CanonicalizeLocaleList","parser_2","__exportStar","_1","should_polyfill_1","Intl","shouldPolyfill","variantAlias","scriptAlias","territoryAlias","languageAlias","canonicalizeUnicodeLanguageId","aliases_generated_1","likelySubtags_generated_1","canonicalizeKVs","all","arr_1","kv","compareKV","t1","t2","compareExtension","e1","e2","mergeVariants","v1","v2","__spreadArray","v2_1","unicodeLanguageId","finalLangAst","variants","replacedLang_1","_a","variant","emitUnicodeLanguageId","lang","replacedLangAst","SEPARATOR","region","replacedLang_2","replacedLang_3","replacedLang","regionAlias","replacedRegion","regions","likelySubtag","likelySubtags","likelyRegion","alias","isUnicodeVariantSubtag","extension","keywords","strs","fields","chunks","extensions_1","ext","ALPHANUM_1_8","ALPHANUM_2_8","ALPHANUM_3_8","KEY_REGEX","TYPE_REGEX","ALPHA_4","OTHER_EXTENSION_TYPE","UNICODE_REGION_SUBTAG_REGEX","UNICODE_VARIANT_SUBTAG_REGEX","UNICODE_LANGUAGE_SUBTAG_REGEX","TKEY_REGEX","test","RangeError","parseUnicodeExtension","keyword","parseKeyword","parseTransformedExtension","parsePuExtension","exts","parseOtherExtensionValue","__assign","unicodeExtension","transformedExtension","puExtension","otherExtensionMap","parseExtensions","Actions","ElementTypes","trackingEvent","metrics","keyboard","display","getMetrics","applicationName","flattenArray","arrayKey","toFlatten","flattened","button","textbox","page","eventPayload","flattenedAttributes","Array","isArray","flattenAttributes","searchData","term","resultCount","facets","facet","createSearchData","errorEvent","AbortSignal","EventTarget","super","TypeError","aborted","abortedFlags","defineEventAttribute","defineProperties","Symbol","toStringTag","AbortController","signals","signal","createAbortSignal","getSignal","abort","controller","ac","boundClass","ownKeys","boundMethod","definingProperty","boundFn","bind","_len","_key","__esModule","instance","Constructor","_defineProperty","_defineProperty2","default","protoProps","staticProps","_assign","_assign2","_setPrototypeOf2","_interopRequireDefault","_create2","_typeof3","subClass","superClass","__proto__","_typeof2","ReferenceError","_iterator2","_symbol2","_typeof","$Object","D","it","desc","isObject","toIObject","toLength","toAbsoluteIndex","IS_INCLUDES","$this","fromIndex","O","core","__e","aFunction","that","c","is","createElement","getKeys","gOPS","pIE","getSymbols","symbols","isEnum","hide","$export","own","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","S","IS_PROTO","IS_BIND","B","IS_WRAP","W","expProto","C","virtual","R","U","exec","__g","dP","createDesc","documentElement","cof","propertyIsEnumerable","setToStringTag","IteratorPrototype","NAME","LIBRARY","redefine","Iterators","$iterCreate","ITERATOR","BUGGY","KEYS","VALUES","returnThis","Base","DEFAULT","IS_SET","FORCED","methods","getMethod","kind","TAG","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","done","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","meta","KEY","NEED","fastKey","getWeak","onFreeze","DESCRIPTORS","toObject","IObject","$assign","A","K","k","T","aLen","j","anObject","dPs","enumBugKeys","IE_PROTO","Empty","createDict","iframeDocument","iframe","style","contentWindow","open","lt","Properties","IE8_DOM_DEFINE","toPrimitive","Attributes","gOPD","gOPN","windowNames","getWindowNames","$keys","hiddenKeys","ObjectProto","arrayIndexOf","names","fails","exp","check","setPrototypeOf","buggy","def","stat","shared","uid","SHARED","mode","copyright","toInteger","defined","TO_STRING","l","charCodeAt","charAt","max","min","ceil","floor","isNaN","valueOf","px","random","wksExt","$Symbol","USE_SYMBOL","addToUnscopables","iterated","_t","_k","Arguments","$getPrototypeOf","$at","point","$fails","wks","wksDefine","enumKeys","_create","gOPNExt","$GOPD","$GOPS","$DP","$JSON","_stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","USE_NATIVE","QObject","findChild","setSymbolDesc","protoDesc","sym","isSymbol","iterator","$defineProperty","$defineProperties","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","$set","es6Symbols","wellKnownSymbols","keyFor","useSetter","useSimple","FAILS_ON_PRIMITIVES","replacer","$replacer","TO_STRING_TAG","DOMIterables","Collection","charenc","utf8","stringToBytes","bin","unescape","encodeURIComponent","bytesToString","bytes","decodeURIComponent","escape","fromCharCode","hasOwn","classNames","argType","deselectCurrent","clipboardToIE11Formatting","reselectPrevious","selection","mark","success","createRange","getSelection","position","clip","whiteSpace","webkitUserSelect","MozUserSelect","msUserSelect","userSelect","stopPropagation","format","preventDefault","clipboardData","clearData","onCopy","appendChild","selectNodeContents","addRange","execCommand","copyKey","navigator","prompt","removeRange","removeAllRanges","removeChild","entryUnbind","WrappedWellKnownSymbolModule","parent","isCallable","tryToString","argument","toIndexedObject","lengthOfArrayLike","createMethod","TO_STRING_TAG_SUPPORT","classofRaw","wellKnownSymbol","CORRECT_ARGUMENTS","tryGet","getOwnPropertyDescriptorModule","definePropertyModule","createPropertyDescriptor","wrappedWellKnownSymbolModule","EXISTS","getBuiltIn","match","Deno","versions","v8","CONSTRUCTOR","METHOD","createNonEnumerableProperty","setGlobal","copyConstructorProperties","isForced","targetProperty","sourceProperty","TARGET","GLOBAL","STATIC","noTargetGet","forced","sham","aCallable","FunctionPrototype","getDescriptor","PROPER","CONFIGURABLE","namespace","V","globalThis","classof","functionToString","inspectSource","NATIVE_WEAK_MAP","sharedKey","OBJECT_ALREADY_INITIALIZED","wmget","wmhas","wmset","facade","STATE","enforce","getterFor","TYPE","feature","detection","normalize","POLYFILL","NATIVE","string","USE_SYMBOL_AS_UID","V8_VERSION","symbol","toPropertyKey","propertyIsEnumerableModule","internalObjectKeys","NASHORN_BUG","objectKeys","TO_ENTRIES","pref","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","InternalStateModule","CONFIGURABLE_FUNCTION_NAME","getInternalState","enforceInternalState","TEMPLATE","unsafe","simple","IS_PURE","repeat","requireObjectCoercible","IS_END","maxLength","fillString","fillLen","stringFiller","intMaxLength","stringLength","fillStr","toIntegerOrInfinity","PROPER_FUNCTION_NAME","whitespaces","METHOD_NAME","whitespace","ltrim","rtrim","integer","IndexedObject","ordinaryToPrimitive","exoticToPrim","postfix","NATIVE_SYMBOL","WellKnownSymbolsStore","createWellKnownSymbol","withoutSetter","$values","$padStart","padStart","$trimStart","forcedStringTrimMethod","trimStart","trimLeft","defineWellKnownSymbol","base64map","crypt","rotl","rotr","endian","Number","randomBytes","bytesToWords","words","wordsToBytes","bytesToHex","hex","hexToBytes","parseInt","substr","bytesToBase64","triplet","base64ToBytes","imod4","pow","token","singleMatcher","multiMatcher","decodeComponents","right","decode","tokens","encodedURI","replaceMap","customDecodeURIComponent","_ownerDocument","activeElement","classList","_hasClass","setAttribute","baseVal","contains","_addClass","addClass","_removeClass","removeClass","hasClass","_default","replaceClassName","origClass","classToRemove","off","attachEvent","detachEvent","srcElement","getRootNode","ownerDocument","isDoc","_matches","parentNode","nodeType","DOCUMENT_NODE","compareDocumentPosition","fallback","defaultView","parentWindow","matchesCache","_inDOM","nativeMatch","matches","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","ie8MatchesSelector","_querySelectorAll","_isWindow","docElem","box","_contains","getBoundingClientRect","pageYOffset","scrollTop","clientTop","pageXOffset","scrollLeft","clientLeft","offsetWidth","offsetHeight","offsetParent","nodeName","_style","parentOffset","_offsetParent","_offset","_scrollTop","_scrollLeft","_extends2","maybeID","maybeClass","nameOnly","simpleSelectorRE","getElementById","getElementsByClassName","toArray","getElementsByTagName","scrollTo","opener","getComputedStyle","getPropertyValue","_camelizeStyle","currentStyle","rnumnonpx","rposition","runStyle","runtimeStyle","rsLeft","pixelLeft","css","transforms","_getComputedStyle2","_hyphenateStyle","_isTransform","_removeStyle","_properties","transform","removeProperty","removeAttribute","supportedTransforms","animationEnd","animationDelay","animationTiming","animationDuration","animationName","transitionEnd","transitionDuration","transitionDelay","transitionTiming","transitionProperty","_getTransitionPropert","vendorMap","Moz","Webkit","ms","vendors","vendor","getTransitionProperties","timing","rHyphen","_","chr","_camelize","msPattern","rUpper","_hyphenate","recalc","scrollDiv","overflow","clientWidth","privateData","wrappers","pd","retv","assert","setCancelFlag","passiveListener","cancelable","canceled","Event","eventPhase","stopped","immediateStopped","defineRedirectDescriptor","defineCallDescriptor","getWrapper","wrapper","BaseEvent","CustomEvent","isFunc","defineWrapper","isStopped","setPassiveListener","NONE","CAPTURING_PHASE","AT_TARGET","BUBBLING_PHASE","stopImmediatePropagation","bubbles","defaultPrevented","composed","initEvent","listenersMap","getListeners","listeners","eventTargetPrototype","listenerType","prev","delete","newNode","defineEventAttributeDescriptor","defineCustomEventTarget","eventNames","CustomEventTarget","optionsIsObj","wrappedEvent","handleEvent","setEventPhase","setCurrentTarget","ReflectOwnKeys","ReflectApply","receiver","NumberIsNaN","EventEmitter","emitter","errorListener","removeListener","resolver","eventTargetAgnosticAddListener","flags","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","_getMaxListeners","_addListener","prepend","existing","warning","newListener","warned","onceWrapper","wrapFn","_onceWrap","_listeners","unwrap","evlistener","ret","unwrapListeners","arrayClone","listenerCount","copy","wrapListener","setMaxListeners","getMaxListeners","doError","er","addListener","prependListener","prependOnceListener","originalListener","spliceOne","removeAllListeners","rawListeners","predicate","isArr","peg$SyntaxError","expected","captureStackTrace","child","peg$subclass","SyntaxError","parse","peg$result","peg$FAILED","peg$startRuleFunctions","peg$parsestart","peg$startRuleFunction","peg$c0","elements","peg$c1","outerLen","innerLen","peg$c2","messageText","peg$c3","peg$c4","peg$c5","peg$c6","peg$c7","peg$c8","peg$c9","peg$c10","peg$c11","peg$c12","peg$c13","peg$c14","peg$c15","peg$c16","peg$c17","peg$c18","peg$c19","peg$c20","peg$c21","pluralStyle","ordinal","peg$c22","peg$c23","peg$c24","peg$c25","peg$c26","peg$c27","peg$c28","peg$c29","peg$c30","peg$c31","peg$c32","peg$c33","peg$c34","peg$c35","peg$c36","peg$c37","peg$c38","peg$c39","peg$c40","peg$c41","peg$c42","peg$c43","peg$c44","peg$c45","peg$c46","peg$c47","digits","peg$c48","peg$c49","peg$c50","peg$c51","peg$c52","peg$c53","peg$c54","peg$c55","peg$c56","peg$c57","peg$c58","peg$c59","peg$c60","peg$c61","peg$c62","peg$c63","peg$c64","peg$c65","peg$currPos","peg$savedPos","peg$posDetailsCache","seenCR","peg$maxFailPos","peg$maxFailExpected","peg$silentFails","startRule","peg$computeLocation","peg$computePosDetails","ch","startPos","endPos","startPosDetails","endPosDetails","peg$fail","peg$buildException","splice","cleanupExpected","expectedDescs","stringEscape","buildMessage","peg$parsemessageFormatPattern","s0","s1","s2","peg$parsemessageFormatElement","peg$parsemessageTextElement","peg$parseargumentElement","peg$parsemessageText","s3","s4","s5","peg$parse_","peg$parsechars","peg$parsews","substring","peg$parseargument","peg$parsenumber","s6","s7","s8","peg$parseelementFormat","peg$parsesimpleFormat","peg$parsepluralFormat","peg$parseselectOrdinalFormat","peg$parseselectFormat","peg$parsepluralStyle","peg$parseoptionalFormatPattern","peg$parseselector","peg$parseoffset","peg$parsedigit","peg$parsehexDigit","peg$parsechar","isBuffer","readFloatLE","isSlowBuffer","_isBuffer","r","u","_dereq_","scheduleDrain","draining","Mutation","MutationObserver","WebKitMutationObserver","called","nextTick","createTextNode","setImmediate","MessageChannel","scriptEl","onreadystatechange","channel","port1","onmessage","port2","oldQueue","immediate","task","INTERNAL","REJECTED","FULFILLED","PENDING","outcome","safelyResolveThenable","QueueItem","onFulfilled","onRejected","callFulfilled","otherCallFulfilled","callRejected","otherCallRejected","getThen","thenable","onSuccess","tryToUnwrap","tryCatch","iterable","resolved","allResolver","resolveFromAll","outValue","race","_classCallCheck","getIDB","indexedDB","webkitIndexedDB","mozIndexedDB","OIndexedDB","msIndexedDB","idb","isIndexedDBValid","isSafari","openDatabase","hasFetch","IDBKeyRange","createBlob","properties","Blob","builder","BlobBuilder","MSBlobBuilder","MozBlobBuilder","WebKitBlobBuilder","getBlob","Promise$1","executeCallback","executeTwoCallbacks","normalizeKey","getCallback","DETECT_BLOB_SUPPORT_STORE","supportsBlobs","dbContexts","READ_ONLY","READ_WRITE","_binStringToArrayBuffer","buf","ArrayBuffer","_checkBlobSupportWithoutCaching","txn","blob","objectStore","put","onabort","oncomplete","matchedChrome","matchedEdge","_checkBlobSupport","_deferReadiness","dbInfo","dbContext","deferredOperation","deferredOperations","dbReady","_advanceReadiness","_rejectReadiness","_getConnection","upgradeNeeded","createDbContext","db","dbArgs","openreq","onupgradeneeded","createObjectStore","storeName","oldVersion","newVersion","onsuccess","onversionchange","_getOriginalConnection","_getUpgradedConnection","_isUpgradeNeeded","defaultVersion","isNewStore","objectStoreNames","isDowngrade","isUpgrade","incVersion","_encodeBlob","reader","FileReader","onloadend","btoa","__local_forage_encoded_blob","readAsBinaryString","_decodeBlob","encodedBlob","atob","_isEncodedBlob","_fullyReady","_initReady","_dbInfo","_tryReconnect","forages","forage","createTransaction","retries","tx","_initStorage","ready","initPromises","_defaultConfig","getItem","openCursor","iterationNumber","cursor","setItem","blobSupport","removeItem","advanced","openKeyCursor","advance","dropInstance","currentConfig","config","dbPromise","dropObjectPromise","deleteObjectStore","_forage2","dropDBPromise","deleteDatabase","onblocked","asyncStorage","_driver","_support","isWebSQLValid","BASE_CHARS","BLOB_TYPE_PREFIX","BLOB_TYPE_PREFIX_REGEX","SERIALIZED_MARKER","SERIALIZED_MARKER_LENGTH","TYPE_ARRAYBUFFER","TYPE_BLOB","TYPE_INT8ARRAY","TYPE_UINT8ARRAY","TYPE_UINT8CLAMPEDARRAY","TYPE_INT16ARRAY","TYPE_INT32ARRAY","TYPE_UINT16ARRAY","TYPE_UINT32ARRAY","TYPE_FLOAT32ARRAY","TYPE_FLOAT64ARRAY","TYPE_SERIALIZED_MARKER_LENGTH","toString$1","stringToBuffer","serializedString","encoded1","encoded2","encoded3","encoded4","bufferLength","bufferToString","base64String","serialize","valueType","marker","fileReader","onload","readAsArrayBuffer","deserialize","blobType","Int8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","localforageSerializer","createDbTable","executeSql","_initStorage$1","dbInfoPromise","serializer","tryExecuteSql","sqlStatement","SYNTAX_ERR","rows","getItem$1","iterate$1","_setItem","retriesLeft","originalValue","sqlError","QUOTA_ERR","setItem$1","removeItem$1","clear$1","length$1","key$1","keys$1","getAllStoreNames","storeNames","dropInstance$1","operationInfo","dropTable","operations","webSQLStorage","isLocalStorageValid","localStorage","_getKeyPrefix","defaultConfig","keyPrefix","checkIfLocalStorageThrows","localStorageTestKey","_isLocalStorageUsable","_initStorage$2","clear$2","getItem$2","iterate$2","keyPrefixLength","key$2","keys$2","itemKey","length$2","removeItem$2","setItem$2","dropInstance$2","localStorageWrapper","sameValue","array","searchElement","DefinedDrivers","DriverSupport","DefaultDrivers","INDEXEDDB","WEBSQL","LOCALSTORAGE","DefaultDriverOrder","OptionalDriverMethods","LibraryMethods","DefaultConfig","driver","callWhenReady","localForageInstance","libraryMethod","_args","extend","LocalForage","driverTypeKey","driverName","defineDriver","_config","_driverSet","_initDriver","_ready","_wrapLibraryMethodsWithReady","setDriver","driverObject","complianceError","driverMethods","driverMethodName","configureMissingMethods","methodNotImplementedFactory","methodName","optionalDriverMethod","setDriverSupport","support","getDriver","getDriverPromise","getSerializer","serializerPromise","drivers","supportedDrivers","_getSupportedDrivers","setDriverToConfig","extendSelfWithDriver","_extend","initDriver","currentDriverIndex","driverPromiseLoop","oldDriverSetDone","supports","libraryMethodsAndProperties","createInstance","localforage_js","svgNS","locationHref","_useWebWorker","initialDefaultFrame","setWebWorker","flag","getWebWorker","setLocationHref","getLocationHref","createTag","extendPrototype","sources","destination","sourcePrototype","createProxyFunction","ProxyFunction","audioControllerFactory","AudioController","audioFactory","audios","_volume","_isMuted","addAudio","audio","setRate","rateValue","createAudio","assetPath","Howl","isPlaying","play","seek","playing","rate","setVolume","setAudioFactory","_updateVolume","mute","unmute","getVolume","createTypedArray","createRegularArray","createSizedArray","_typeof$6","subframeEnabled","expressionsPlugin","expressionsInterfaces","idPrefix$1","_shouldRoundValues","bmPow","bmSqrt","sqrt","bmFloor","bmMax","bmMin","BMMath","ProjectInterface$1","propertyNames","abs","absArr","defaultCurveSegments","degToRads","PI","roundCorner","roundValues","bmRnd","round","styleDiv","transformOrigin","webkitTransformOrigin","backfaceVisibility","webkitBackfaceVisibility","transformStyle","webkitTransformStyle","mozTransformStyle","BMEnterFrameEvent","totalTime","frameMultiplier","direction","BMCompleteEvent","BMCompleteLoopEvent","totalLoops","currentLoop","BMSegmentStartEvent","firstFrame","totalFrames","BMDestroyEvent","BMRenderFrameErrorEvent","nativeError","BMConfigErrorEvent","BMAnimationConfigErrorEvent","createElementID","_count","HSVtoRGB","h","q","RGBtoHSV","addSaturationToRGB","hsv","addBrightnessToRGB","addHueToRGB","rgbToHex","colorMap","setSubframeEnabled","getSubframeEnabled","setExpressionsPlugin","getExpressionsPlugin","setExpressionInterfaces","getExpressionInterfaces","setDefaultCurveSegments","getDefaultCurveSegments","setIdPrefix","getIdPrefix","createNS","createElementNS","_typeof$5","dataManager","workerFn","workerInstance","_counterId","processes","workerProxy","_workerSelf","setupWorker","Worker","URL","createObjectURL","createWorker","completeLayers","layers","comps","layerData","jLen","kLen","completed","hasMask","maskProps","masksProperties","pt","convertPathsToAbsoluteValues","ty","findCompLayers","refId","completeShapes","shapes","completeText","comp","findComp","__used","ks","checkVersion","minimum","animVersionString","animVersion","minimumVersion","checkText","iterateLayers","textLayer","documentData","animationData","assets","checkChars","charData","ip","st","sr","sk","sa","checkPathProperties","pathData","checkColors","iterateShapes","checkShapes","completeClosingShapes","closed","cl","moduleOb","__complete","completeChars","dataFunctionManager","assetLoader","formatResponse","contentTypeHeader","getResponseHeader","responseType","responseText","load","fullPath","completeData","animation","onComplete","createProcess","loadAnimation","processId","pathname","loadData","completeAnimation","anim","ImagePreloader","proxyImage","fillStyle","fillRect","imageLoaded","loadedAssets","totalImages","loadedFootagesCount","totalFootages","imagesLoadedCb","footageLoaded","getAssetsPath","assetData","assetsPath","originalPath","imagePath","testImageLoaded","img","intervalId","getBBox","_imageLoaded","createFootageData","ob","footageData","_footageLoaded","ImagePreloaderFactory","loadAssets","_createImageData","setAssetsPath","setPath","loadedImages","loadedFootages","getAsset","createImgData","crossOrigin","createImageData","setAttributeNS","_elementHelper","setCacheType","elementHelper","triggerEvent","_cbs","callbacks","markerParser","parsePayloadLines","lines","keysCount","_markers","markers","_marker","markerData","tm","dr","cm","__","ProjectInterface","registerComposition","compositions","_thisProjectFunction","nm","prepareFrame","xt","currentFrame","compInterface","renderers","registerRenderer","getRenderer","getRegisteredRenderer","_typeof$4","AnimationItem","isLoaded","currentRawFrame","frameRate","frameMult","playSpeed","playDirection","playCount","autoplay","loop","renderer","animationID","timeCompleted","segmentPos","isSubframeEnabled","segments","_idle","_completedLoop","projectInterface","imagePreloader","audioController","configAnimation","onSetupError","onSegmentComplete","drawnFrameEvent","setParams","params","container","animType","RendererClass","rendererSettings","globalData","defs","setProjectInterface","autoloadSegments","initialSegment","setupAnimation","lastIndexOf","fileName","trigger","wrapperAttributes","getNamedItem","prerender","includeLayers","newLayers","fonts","fontManager","addChars","addFonts","initExpressions","loadNextSegment","segment","segmentPath","loadSegments","imagesLoaded","checkLoaded","preloadImages","animData","fr","searchExtraCompositions","updaFrameModifier","waitForFontsLoaded","triggerConfigError","rendererType","initItems","gotoFrame","resize","_width","_height","updateContainerSize","setSubframe","renderFrame","resetFrame","triggerRenderFrameError","togglePause","setCurrentRawFrameValue","getMarkerData","markerName","goToAndStop","isFrame","numValue","frameModifier","goToAndPlay","playSegments","advanceTime","nextValue","_isComplete","checkSegments","adjustSegment","setSpeed","setDirection","setSegment","pendingFrame","forceFlag","resetSegments","onEnterFrame","onLoopComplete","onSegmentStart","onDestroy","setLoop","isLooping","getPath","getAssetData","show","getDuration","updateDocumentData","getElementByPath","animationManager","registeredAnimations","initTime","playingAnimationsNum","_stopped","_isFrozen","removeElement","ev","animItem","subtractPlayingCount","registerAnimation","addPlayingCount","activate","nowTime","elapsedTime","first","searchAnimations","standalone","animElements","lenAnims","innerText","div","getRegisteredAnimations","animations","BezierFactory","beziers","bezEasing","BezierEasing","kSampleStepSize","float32ArraySupported","aA1","aA2","calcBezier","aT","getSlope","points","_p","_mSampleValues","_precomputed","mX1","mY1","mX2","mY2","_precompute","_getTForX","_calcSampleValues","aX","mSampleValues","intervalStart","currentSample","kSplineTableSize","guessForT","initialSlope","aGuessT","currentSlope","newtonRaphsonIterate","aA","aB","currentX","currentT","binarySubdivide","pooling","poolFactory","initialLength","_release","_length","_maxLength","pool","newElement","bezierLengthPool","addedLength","percents","lengths","segmentsLengthPool","totalLength","bezFunction","math","pointOnLine2D","x1","y1","x2","y2","x3","y3","det1","getBezierLength","pt1","pt2","pt3","pt4","ptCoord","perc","ptDistance","curveSegments","lastPoint","lengthData","BezierData","segmentLength","PointData","partial","partialLength","storedData","buildBezierData","bezierName","bezierData","getDistancePerc","initPos","lengthPos","lPerc","dir","bezierSegmentPoints","getSegmentsLength","shapeData","segmentsLength","pathV","pathO","pathI","getNewSegment","startPerc","endPerc","t0","u0","u1","u0u0u0","t0u0u0_3","t0t0u0_3","t0t0t0","u0u0u1","t0u0u1_3","t0t0u1_3","t0t0t1","u0u1u1","t0u1u1_3","t0t1u1_3","t0t1t1","u1u1u1","t1u1u1_3","t1t1u1_3","t1t1t1","getPointInSegment","percent","pointOnLine3D","z1","z2","z3","diffDist","dist1","dist2","dist3","bez","initFrame","mathAbs","interpolateValue","frameNum","caching","newValue","offsetTime","propType","pv","keyData","nextKeyData","keyframeMetadata","fnc","iterationIndex","lastIndex","keyframes","keyframesMetadata","endValue","nextKeyTime","keyTime","ti","ind","__fnct","getBezierEasing","segmentPerc","distanceInLine","lastFrame","_lastKeyframeIndex","_lastAddedLength","_lastPoint","outX","outY","inX","inY","keyValue","sh","quaternionToEuler","slerp","createQuaternion","omega","cosom","sinom","scale0","scale1","ax","ay","az","aw","bx","by","bz","bw","acos","sin","quat","qx","qy","qz","qw","heading","atan2","attitude","asin","bank","c1","cos","c2","c3","getValueAtCurrentTime","renderedFrame","endTime","_caching","renderResult","setVValue","multipliedValue","mult","_mdf","processEffectsSequence","frameId","effectsSequence","_isFirstFrame","finalValue","kf","addEffect","effectFunction","addDynamicProperty","ValueProperty","vel","getValue","MultiDimensionalProperty","KeyframedValueProperty","KeyframedMultidimensionalProperty","arrLen","PropertyFactory","getProp","slotManager","DynamicPropertyContainer","dynamicProperties","_isAnimated","iterateDynamicProperties","initDynamicPropertyContainer","pointPool","ShapePath","setPathData","setLength","doubleArrayLength","setXYAt","setTripleAt","vX","vY","oX","oY","iX","iY","reverse","newPath","vertices","outPoints","inPoints","cnt","shapePool","shapePath","clone","shape","cloned","ShapeCollection","addShape","releaseShapes","shapeCollectionPool","newShapeCollection","shapeCollection","ShapePropertyFactory","interpolateShape","keyPropS","keyPropE","isHold","vertexValue","interpolateShapeCurrentTime","resetShape","paths","localShapeCollection","shape1","shape2","shapesEqual","ShapeProperty","KeyframedShapeProperty","EllShapeProperty","cPoint","EllShapePropertyFactory","convertEllToPath","p0","p1","_cw","_v","StarShapeProperty","StarShapePropertyFactory","sy","ir","convertToPath","convertStarToPath","convertPolygonToPath","or","rad","roundness","perimSegment","numPts","angle","longFlag","longRad","shortRad","longRound","shortRound","longPerimSegment","shortPerimSegment","currentAng","ox","oy","RectShapeProperty","RectShapePropertyFactory","convertRectToPath","v0","Matrix","_cos","_sin","_tan","tan","_rnd","rotate","mCos","mSin","rotateX","rotateY","rotateZ","shear","sx","skew","skewFromAxis","scale","sz","setTransform","translate","tz","a2","b2","d2","f2","g2","h2","i2","j2","k2","l2","m2","n2","o2","p2","_identityCalculated","a1","b1","d1","f1","g1","h1","i1","j1","k1","l1","m1","n1","o1","multiply","matrix","matrixProps","isIdentity","_identity","equals","matr","cloneFromProps","applyToPoint","z","applyToX","applyToY","applyToZ","getInverseMatrix","determinant","inverseMatrix","inversePoint","applyToPointArray","inversePoints","pts","retPts","applyToTriplePoints","p4","p5","p12","p13","applyToPointStringified","toCSS","cssValue","roundMatrixProperty","to2dCSS","_typeof$3","lottie","setLocation","setSubframeRendering","setPrefix","setQuality","inBrowser","installPlugin","getFactory","checkReady","readyStateCheckInterval","getQueryVariable","variable","vars","queryString","pair","useWebWorker","setIDPrefix","__getFactory","scripts","myScript","ShapeModifiers","modifiers","registerModifier","getModifier","ShapeModifier","TrimModifier","PuckerAndBloatModifier","initModifierProperties","addShapeToModifier","setAsAnimated","processKeys","sValue","eValue","pathsData","calculateShapeEdges","shapeLength","totalModifierLength","segmentOb","shapeSegments","shapeS","shapeE","releasePathsData","processShapes","shapePaths","_s","totalShapeLength","edges","newShapesData","addShapes","lastShape","addPaths","newPaths","addSegment","newShape","addSegmentFromArray","shapeSegment","currentLengthData","segmentCount","amount","processPath","centerPoint","pathLength","clonedPath","TransformPropertyFactory","defaultVector","TransformProperty","pre","appliedTransformations","py","pz","rx","ry","rz","_isDirty","applyToMatrix","mat","forceRender","precalculateMatrix","autoOriented","getValueAtTime","autoOrient","_addDynamicProperty","getTransformProperty","RepeaterModifier","RoundCornersModifier","floatEqual","floatZero","lerp","lerpPoint","quadRoots","singleRoot","polynomialCoefficients","p3","singlePoint","PolynomialBezier","linearize","pointEqual","coeffx","coeffy","extrema","intersectData","boundingBox","cx","cy","splitData","boxIntersect","intersectsImpl","tolerance","intersections","maxRecursion","d1s","d2s","crossProduct","lineIntersection","start1","end1","start2","end2","v3","v4","polarOffset","pointDistance","hypot","ZigZagModifier","setPoint","outputBezier","amplitude","outAmplitude","inAmplitude","angO","angI","getPerpendicularVector","vector","rot","getProjectingAngle","cur","prevIndex","nextIndex","pVector","zigZagCorner","frequency","pointType","prevPoint","nextPoint","prevDist","nextDist","zigZagSegment","dist","normalAngle","linearOffset","offsetSegment","p1a","p1b","p2b","p2a","joinLines","seg1","seg2","lineJoin","miterLimit","angleOut","tangentAngle","angleIn","center","radius","intersection","getIntersection","intersect","pruneSegmentIntersection","outa","outb","pruneIntersections","offsetSegmentSplit","mid","flex","inflectionPoints","OffsetPathModifier","getFontProperties","fontData","fStyle","fWeight","weight","tr","so","eo","pMatrix","rMatrix","sMatrix","tMatrix","applyTransforms","inv","scaleX","scaleY","elemsData","_currentCopies","_elements","_groups","resetElements","_processed","cloneElements","newElements","changeGroupRender","renderFlag","_render","itemsTransform","cont","hasReloaded","copies","group","ix","reloadShapes","elems","transformData","offsetModulo","roundOffset","pProps","rProps","sProps","iteration","mProps","rd","currentV","currentI","currentO","closerV","newPosPerc","derivative","denom","tcusp","square","p10","p11","p20","p21","bounds","bottom","other","shapeSegmentInverted","pointsType","ml","lj","inputBezier","multiSegments","lastSeg","multiSegment","FontManager","emptyChar","combinedCharacters","BLACK_FLAG_CODE_POINT","surrogateModifiers","setUpNode","font","fontFamily","fontSize","fontVariant","fontStyle","fontWeight","letterSpacing","familyArray","enabledFamilies","trimFontOptions","createHelper","helper","engine","fontProps","tHelper","fFamily","fClass","tCanvasHelper","OffscreenCanvas","measureText","getComputedTextLength","getCodePoint","codePoint","second","isRegionalCode","Font","typekitLoaded","_warned","setIsLoadedBinded","setIsLoaded","checkLoadedFontsBinded","checkLoadedFonts","isModifier","firstCharCode","secondCharCode","sum","isZeroWidthJoiner","charCode","isFlagEmoji","isCombinedCharacter","_char3","isRegionalFlag","isVariationSelector","fontPrototype","cache","fontArr","_pendingFonts","loadedSelector","shouldLoadFont","loaded","monoCase","sansCase","fPath","fOrigin","rel","sc","getCharData","_char","getFontByName","fName","_char2","fontName","doubleSize","singleSize","loadedCount","SlotManager","slotFactory","RenderableElement","slots","initRenderable","isInRange","hidden","isTransparent","renderableComponents","addRenderableComponent","removeRenderableComponent","prepareRenderableFrame","num","checkLayerLimits","checkTransparency","finalTransform","mProp","renderConfig","hideOnTransparent","renderRenderable","sourceRectAtTime","getLayerSize","textData","getBlendMode","blendModeEnums","SliderEffect","AngleEffect","ColorEffect","PointEffect","LayerIndexEffect","MaskIndexEffect","CheckboxEffect","NoValueEffect","EffectsManager","effects","ef","effectElements","effectItem","GroupEffect","BaseElement","FrameElement","FootageElement","imageLoader","initBaseData","AudioElement","_isPlaying","_canPlay","_currentTime","_volumeMultiplier","_previousVolume","_placeholder","lv","au","BaseRenderer","eff","checkMasks","LayerExpressionInterface","EffectsExpressionInterface","ShapeExpressionInterface","TextExpressionInterface","CompExpressionInterface","layerInterface","maskManager","registerMaskInterface","effectsInterface","createEffectsInterface","registerEffectsInterface","shapeInterface","shapesData","itemsData","content","textInterface","setBlendMode","blendModeValue","bm","baseElement","layerElement","layerId","effectsManager","getType","prepareProperties","isVisible","_isParent","getBaseElement","FootageInterface","getFootageData","timeRemapped","totalVolume","volumeValue","checkLayers","buildItem","checkPendingElements","createItem","layer","createImage","createComp","createSolid","createNull","createShape","createText","createCamera","createFootage","buildAllItems","pInterface","progressiveLoad","buildElementParenting","parentName","hierarchy","setAsParent","setHierarchy","addPendingElement","pendingElements","pathValue","setupGlobalData","fontsContainer","animationItem","compSize","effectTypes","TRANSFORM_EFFECT","TransformElement","MaskElement","maskElement","viewData","solidPath","rect","expansor","feMorph","currentMasks","maskType","maskRef","getShapeProp","lastPath","filterID","expan","lastOperator","filterId","lastRadius","createLayerSolidPath","invRect","drawPath","maskedElement","initTransform","_matMdf","_localMatMdf","_opMdf","localMat","localOpacity","ao","renderTransform","finalMat","renderLocalTransform","localTransforms","lmat","localOp","opacity","searchEffectTransforms","renderableEffectsManager","transformEffects","getEffects","globalToLocal","ptNew","mHelper","getMaskProperty","isFirstFrame","getMaskelement","pathNodes","pathString","pathShapeValue","filtersFactory","filId","skipCoordinates","fil","feColorMatrix","featureSupport","svgLumaHidden","offscreenCanvas","registeredEffects$1","idPrefix","SVGEffects","filterManager","createFilter","filters","Effect","effect","countsAsEffect","registerEffect$1","SVGBaseElement","HierarchyElement","RenderableDOMElement","IImageElement","initElement","sourceRect","ProcessedElement","IShapeElement","initRendererElement","createContainerElements","matteElement","transformedElement","_sizeChanged","layerElementParent","td","matteMasks","gg","tt","ln","hd","cp","clipId","cpGroup","renderElement","destroyBaseElement","createRenderableComponents","getMatte","matteType","useElement","masker","createAlphaToLuminanceFilter","maskGroup","maskGrouper","feCTr","feFunc","alphaRect","setMatte","initHierarchy","checkParenting","createContent","renderInnerContent","innerElem","pr","imagePreserveAspectRatio","addShapeToModifiers","shapeModifiers","isShapeInAnimatedModifiers","isAnimatedWithShape","renderModifiers","searchProcessedElement","processedElements","addProcessedElement","lineCapEnum","lineJoinEnum","SVGShapeData","transformers","caches","lStr","lvl","SVGStyleData","pElem","msElem","DashProperty","dataProps","dashStr","dashArray","dashoffset","SVGStrokeStyleData","styleOb","SVGFillStyleData","SVGNoStyleData","GradientProperty","cLength","_cmdf","_omdf","_collapsable","checkCollapsable","_hasOpacity","SVGGradientFillStyleData","initGradientData","SVGGradientStrokeStyleData","ShapeGroupData","prevViewData","gr","SVGTransformData","comparePoints","stops","setGradientData","setGradientOpacity","pathElement","gradientId","gfill","gf","cst","opacityId","maskId","opFill","lc","of","ost","buildShapeString","_o","shapeString","SVGElementsRenderer","_identityMatrix","_matrixHelper","renderContentTransform","styleData","itemData","renderNoop","renderPath","pathStringTransformed","redraw","iterations","lLen","renderFill","styleElem","renderGradientStroke","renderGradient","renderStroke","hasOpacity","attr1","attr2","cValues","oValues","ang","createRenderFunction","SVGShapeElement","stylesList","animatedContents","LetterProps","sw","fc","TextProperty","_frameId","keysIndex","canResize","minimumFontSize","currentData","ascent","boxWidth","defaultBoxWidth","justifyOffset","lh","lineWidths","ls","ps","fillColorAnim","strokeColorAnim","strokeWidthAnim","yOffset","finalSize","finalText","finalLineHeight","copyData","searchProperty","completeTextData","initSecondaryElement","identityMatrix","buildExpressionInterface","searchShapes","filterUniqueShapes","tempShapes","areAnimated","setShapesAsAnimated","createStyleElement","elementData","addToAnimatedContents","createGroupElement","createTransformElement","transformProperty","createShapeElement","ownTransformers","setElementStyles","currentTransform","modifier","processedPos","ownStyles","ownModifiers","renderShape","animatedContent","updated","setCurrentData","searchKeyframes","getKeyframeValue","_finalValue","currentValue","currentIndex","textKeys","buildFinalText","charactersArray","shouldCombine","shouldCombineNext","currentChars","newLineFlag","letters","anchorGrouping","currentSize","currentPos","currentLine","lineWidth","maxLineWidth","trackingOffset","currentHeight","boxHeight","lastSpaceIndex","currentChar","uncollapsedSpaces","an","anIndexes","animatorJustifyOffset","animatorData","letterData","based","animators","indexes","fh","fs","fb","rn","totalChars","newInd","currentInd","newData","dData","recalculate","canResizeFont","_canResize","setMinimumFontSize","_fontValue","TextSelectorProp","TextSelectorPropFactory","_currentTextLength","finalS","finalE","xe","ne","sm","getMult","textProperty","easer","tot","smoothness","newCharsFlag","divisor","getTextSelectorProp","TextAnimatorDataProperty","animatorProps","defaultData","textAnimatorAnimatables","TextAnimatorProperty","renderType","_hasMaskedPath","_textData","_renderType","_elem","_animatorsData","_pathData","_moreOptions","alignment","renderedLetters","lettersChangedFlag","ITextElement","searchProperties","getMeasures","xPos","yPos","pathInfo","currentLength","currentPoint","pointInd","segmentInd","tanAngle","matrixHelper","renderedLettersCount","tLength","pi","letterValue","yOff","firstLine","offf","xPathPos","yPathPos","elemOpacity","letterSw","letterSc","letterFc","letterO","initPathPos","initSegmentInd","initPointInd","letterM","letterP","defaultPropsArray","animatorFirstCharOffset","justifyOffsetMult","isNewLine","animatorOffset","atan","textAnimator","createPathShape","shapeStr","_fontSize","applyTextPropertiesToMatrix","lineNumber","buildColor","colorData","emptyProp","validateText","buildNewText","emptyShapeData","SVGTextLottieElement","textSpans","ISolidElement","NullElement","SVGRendererBase","ICompElement","SVGCompElement","supports3d","SVGRenderer","svgElement","ariaLabel","title","titleElement","titleId","descElement","descId","preserveAspectRatio","contentVisibility","viewBoxOnly","viewBoxSize","focusable","filterSize","runExpressions","destroyed","ShapeTransformManager","sequences","sequenceList","transform_key_count","singleShape","textContainer","buildTextContents","textArray","textContents","currentTextContent","buildShapeData","shapeItem","tSpan","usesGlyphs","cachedSpansLength","glyph","glyphElement","_debug","tElement","justify","textBox","bbox","renderedLetter","textSpan","findIndexByInd","appendElementInPos","elementIndex","tp","matteMask","nextElement","insertBefore","setElements","getElements","destroyElements","addTransformSequence","sequence","processSequence","processSequences","getNewKey","lumaLoader","lumaBuffer","lumaBufferCtx","svg","loadLuma","_svg","createCanvas","loadLumaCanvas","getLumaCanvas","registeredEffects","CVEffects","registerEffect","CVMaskElement","hasMasks","CVBaseElement","canvasContext","beginPath","moveTo","lineTo","bezierCurveTo","save","operationsMap","CVShapeData","transformsManager","styledShapes","styledShape","trNodes","CVShapeElement","CVTextElement","stroke","currentRender","sWidth","fValue","CVImageElement","CVSolidElement","CanvasRendererBase","strokeStyle","lineCap","CVContextData","cArrPos","cTr","nativeContext","transformMat","currentOpacity","currentFillStyle","appliedFillStyle","currentStrokeStyle","appliedStrokeStyle","currentLineWidth","appliedLineWidth","currentLineCap","appliedLineCap","currentLineJoin","appliedLineJoin","appliedMiterLimit","currentMiterLimit","CVCompElement","CanvasRenderer","clearCanvas","dpr","devicePixelRatio","currentGlobalAlpha","contextData","ctxTransform","ctxOpacity","ctxFillStyle","ctxStrokeStyle","ctxLineWidth","ctxLineCap","ctxLineJoin","ctxMiterLimit","ctxFill","ctxFillRect","ctxStroke","HBaseElement","HSolidElement","HShapeElement","shapesContainer","currentBBox","HTextElement","textPaths","HCameraElement","pe","_prevMat","HImageElement","HybridRendererBase","threeDElements","camera","HCompElement","HybridRenderer","createElements","bufferCanvas","bufferCanvas2","_isProxy","transformCanvas","blendMode","globalCompositeOperation","hideElement","showElement","clearRect","prepareLayer","bufferCtx","drawImage","getTransform","exitLayer","forceRealStack","restore","transformHelper","dashResetter","preTransforms","co","wi","da","addTransformToStyleList","removeTransformFromStyleList","closeStyles","shouldRender","ownTransforms","_shouldRender","renderShapeTransform","parentTransform","groupTransform","drawLayer","nodes","coOp","grd","setLineDash","lineDashOffset","closePath","isMain","renderGradientFill","renderStyledShape","shapeNodes","groupTransformMat","createLinearGradient","createRadialGradient","addColorStop","hasFill","hasStroke","pathArr","commandsCounter","lastFill","lastStroke","lastStrokeW","widthCrop","heightCrop","imgW","imgH","imgRel","canvasRel","par","globalAlpha","actionFlag","containerStyle","mozTransformOrigin","isDashed","elementWidth","elementHeight","elementRel","animationRel","fillType","duplicate","newLength","forceRestore","currentContext","prevStack","saveOnNativeFlag","currentStack","newStack","setOpacity","trProps","checkBlendMode","tg","transformedElementStyle","matrixValue","webkitTransform","addEffects","backgroundColor","_renderShapeFrame","shapeCont","getTransformedPoint","calculateShapeBoundingBox","vPoint","oPoint","nextIPoint","nextVPoint","checkBounds","getBoundsOfCurve","shapeBoundingBox","xMax","yMax","tempBoundingBox","b2ac","calculateF","calculateBoundingBox","expandStrokeBoundingBox","widthProperty","kfw","currentBoxContains","changed","shapeStyle","shapeTransform","compW","compH","innerElemStyle","textColor","strokeWidth","lineHeight","tParent","tCont","children","tContStyle","tContTranslation","tStyle","tSpanTranslation","svgStyle","translation","textPath","margin","svgTransform","setup","perspectiveStyle","perspectiveElem","perspective","webkitPerspective","mTransf","diffVector","mag","lookDir","lookLengthOnXZ","mRotationX","mRotationY","hasMatrixChanged","matValue","Image","imageElem","newDOMElement","ddd","addTo3dContainer","nextDOMElement","nextLayer","getThreeDContainerByPos","createThreeDContainer","threeDContainerData","build3dContainers","lastThreeDContainerData","currentContainer","resizerElem","cWidth","cHeight","floatingContainer","_createBaseContainerElements","_thisLayerFunction","pixelAspect","frameDuration","displayStartTime","numLayers","_typeof$2","seedRandom","startdenom","significance","ARC4","keylen","me","flatten","typ","mixkey","seed","smear","stringseed","tostring","shortseed","entropy","crypto","msCrypto","getRandomValues","browser","screen","autoseed","arc4","prng","int32","quick","is_math_call","initialize$2","SHAPE","_typeof$1","ExpressionManager","_lottieGlobal","$bm_isInstanceOfArray","isNumerable","tOfV","$bm_neg","tOfA","lenA","retArr","easeInBez","easeOutBez","easeInOutBez","tOfB","lenB","sub","mul","mod","$bm_sum","$bm_sub","$bm_mul","$bm_div","$bm_mod","clamp","mm","radiansToDegrees","radians_to_degrees","degreesToRadians","degrees_to_radians","helperLengthArray","arr1","arr2","vec","rgbToHsl","hue2rgb","hslToRgb","linear","tMin","tMax","value1","value2","_tMin","rnd","createPath","inTangents","outTangents","inVertexPoint","outVertexPoint","arrPlaceholder","initiateExpression","noOp","needsVelocity","_needsRandom","elemType","$bm_transform","thisProperty","valueAtTime","inPoint","outPoint","loopIn","loop_in","loopOut","loop_out","smooth","toWorld","fromWorld","fromComp","toComp","fromCompToSurface","rotation","anchorPoint","thisLayer","thisComp","velocityAtTime","scoped_bm_rt","expression_function","eval","numKeys","active","wiggle","freq","amp","iWiggle","lenWiggle","addedAmps","periods","loopInDuration","loopOutDuration","getVelocityAtTime","velocity","textIndex","textTotal","selectorValue","lookAt","elem1","elem2","fVec","pitch","easeOut","val1","val2","applyEase","easeIn","ease","iKey","lenKey","nearestKey","obKey","framesToTime","fps","timeToFrames","seedrandom","randSeed","posterizeTime","framesPerSecond","hasParent","executeExpression","frameExpressionId","__preventDeadCodeRemoval","Expressions","stackCount","registers","pushExpression","popExpression","releaseInstances","registerExpressionProperty","expression","MaskManagerInterface","MaskInterface","_mask","_data","_masksInterfaces","ExpressionPropertyInterface","defaultUnidimensionalValue","defaultMultidimensionalValue","completeProperty","expressionValue","valueProp","speedAtTime","getSpeedAtTime","propertyGroup","defaultGetter","UnidimensionalPropertyInterface","arrValue","MultidimensionalPropertyInterface","TransformExpressionInterface","_thisFunction","xRotation","yRotation","xPosition","yPosition","zPosition","_px","_py","_pz","_transformFactory","getMatrix","toWorldMat","toWorldVec","applyPoint","fromWorldVec","invertPoint","sampleImage","transformInterface","anchorPointDescriptor","anchor_point","propertyGroupFactory","interfaceFunction","parentPropertyGroup","PropertyInterface","propertyName","createGroupInterface","groupInterface","mn","_propertyGroup","createValueInterface","numProperties","np","en","expressionProperty","setGroupProperty","effectsData","ShapePathInterface","view","propertyIndex","iterateElements","groupInterfaceFactory","fillInterfaceFactory","strokeInterfaceFactory","trimInterfaceFactory","ellipseInterfaceFactory","starInterfaceFactory","rectInterfaceFactory","roundedInterfaceFactory","repeaterInterfaceFactory","gradientFillInterfaceFactory","interfaces","transformInterfaceFactory","cix","contentsInterfaceFactory","startPoint","endPoint","_dashPropertyGroup","dashOb","addPropertyToDashOb","dash","skewAxis","outerRadius","outerRoundness","innerRoundness","innerRadius","_interfaceFunction","_sourceText","sourceText","stringValue","fillColor","dataInterfaceFactory","outlineInterface","currentPropertyName","currentProperty","propertyNameIndex","outlineInterfaceFactory","dataInterface","footage","getInterface","expressionHelpers","searchExpressions","speed","_cachingAtTime","getStaticValueAtTime","addPropertyDecorator","durationFlag","cycleDuration","firstKeyFrame","lastKeyFrame","initV","endV","repeats","lastValue","nextLastValue","firstValue","nextFirstValue","sampleValue","sampleFrequency","getTransformValueAtTime","_transformCachingAtTime","anchor","rotationZ","rotationY","rotationX","orientation","positionX","positionY","positionZ","getTransformStaticValueAtTime","propertyGetProp","ShapePropertyConstructorFunction","getConstructorFunction","KeyframedShapePropertyConstructorFunction","getKeyframedConstructorFunction","ShapeExpressions","isClosed","pointOnPath","_segmentsLength","accumulatedLength","initIndex","endIndex","vectorOnPath","vectorType","xLength","yLength","magnitude","tangentOnPath","normalOnPath","shapeValue","lastTime","propertyGetShapeProp","trims","initialize$1","addDecorator","getExpressionValue","calculateExpression","isKeyframed","hasExpressions","initialize","SVGComposableEffect","createMergeNode","resultId","ins","feMergeNode","feMerge","linearFilterValue","SVGTintFilter","linearFilter","matrixFilter","SVGFillFilter","SVGStrokeEffect","initialized","SVGTritoneFilter","feComponentTransfer","feFuncR","feFuncG","feFuncB","SVGProLevelsFilter","createFeFunc","feFuncA","feFuncRComposed","feFuncGComposed","feFuncBComposed","SVGDropShadowEffect","globalFilterSize","feGaussianBlur","feOffset","feFlood","feComposite","colorBlack","colorWhite","groupPath","elemChildren","pathMasker","dasharrayValue","getTotalLength","lineLength","units","color1","color2","color3","tableR","tableG","tableB","getTableValue","inputBlack","inputWhite","gamma","outputBlack","outputWhite","colorValue","table","outputDelta","inputDelta","col","_svgMatteSymbols","SVGMatte3Effect","filterElem","SVGGaussianBlurEffect","TransformEffect","SVGTransformEffect","CVTransformEffect","findSymbol","replaceInParent","symbolId","nextChild","useElem","setElementAsMask","sigma","dimensions","sigmaX","sigmaY","edgeMode","forceFrame","isUniformScale","scaleHeight","scaleWidth","md5","encoding","FF","_ff","GG","_gg","HH","_hh","II","_ii","aa","bb","cc","dd","_blocksize","_digestsize","digestbytes","asBytes","asString","mobx","React","reactDom","React__default","unstable_batchedUpdates$1","classCallCheck","AwaitValue","AsyncGenerator","gen","front","settle","_invoke","return","asyncIterator","throw","createClass","inherits","possibleConstructorReturn","_this","defineProperty$1","createChainableTypeChecker","validate","checkType","isRequired","propName","componentName","propFullName","rest","untracked","actual","chainedCheckType","propValue","getPropType","getPreciseType","createObservableTypeCheckerCreator","allowNativeType","mobxType","mobxChecker","isObservableArray","isObservableObject","isObservableMap","preciseType","nativeTypeExpectationMessage","createObservableArrayOfTypeChecker","typeChecker","_len2","_key2","observableArray","observableArrayOf","observableMap","observableObject","arrayOrObservableArray","arrayOrObservableArrayOf","objectOrObservableObject","isStateless","injectorContextTypes","mobxStores","seal","proxiedInjectorProps","isMobxInjector","createStoreInjector","grabStoresFn","injectNames","_class","_temp2","Injector","_Component","_ref","_temp","storeRef","wrappedInstance","newProps","additionalProps","ref","Component","wrappedComponent","grabStoresByName","baseStores","nextProps","inject","componentClass","injected","isDevtoolsEnabled","isUsingStaticRendering","warnedAboutObserverInjectDeprecation","componentByNodeRegistery","renderReporter","findDOMNode$2","findDOMNode","reportRendering","renderTime","__$mobRenderEnd","__$mobRenderStart","trackComponents","useStaticRendering","errorsReporter","funcName","runMixinFirst","base","mixinFunc","reactiveMixin","shallowEqual","objA","objB","keysA","keysB","componentWillMount","initialName","rootNodeID","_reactInternalInstance","_rootNodeID","_reactInternalFiber","_debugID","skipRender","isForcingUpdate","makePropertyObservableReference","baseRender","reaction","isRenderingPending","initialRender","Reaction","componentWillReact","__$mobxIsUnmounted","hasError","forceUpdate","dispose","reactiveRender","$mobx","rendering","allowStateChanges","valueHolder","atom","Atom","reportObserved","reportChanged","componentWillUnmount","componentDidMount","componentDidUpdate","shouldComponentUpdate","nextState","arg1","arg2","isReactClass","isPrototypeOf","mixinLifecycleEvents","isMobXReactObserver","Observer","observerInject","InjectComponent","ObserverPropsCheck","extraKey","specialReactKeys","Provider","Children","only","stores","suppressChangedStoreWarning","unstable_batchedUpdates","setReactionScheduler","__MOBX_DEVTOOLS_GLOBAL_HOOK__","mobx$1","spy","mobxReact","injectMobxReact","PropTypes","extendStatics","__extends","BaseAtom","getNextId","isPendingUnobservation","observers","observersIndexes","diffValue","lastAccessedBy","lowestObserverState","IDerivationState","NOT_TRACKING","onBecomeUnobserved","startBatch","observable","STALE","dependenciesState","UP_TO_DATE","isTracing","TraceMode","logTraceInfo","onBecomeStale","propagateChanged","endBatch","_super","onBecomeObservedHandler","onBecomeUnobservedHandler","noop","isBeingTracked","globalState","trackingDerivation","isAtom","createInstanceofPredicate","hasInterceptors","interceptable","interceptors","registerInterceptor","idx","interceptChange","change","prevU","untrackedStart","invariant","untrackedEnd","hasListeners","listenable","changeListeners","registerListener","notifyListeners","isSpyEnabled","spyListeners","spyReport","spyReportStart","objectAssign","END_EVENT","spyReportEnd","IS_ITERATING_MARKER","arrayAsIterator","addHiddenFinalProp","declareIterator","prototType","iteratorFactory","safariPrototypeSetterInheritanceBug","OBSERVABLE_ARRAY_BUFFER_SIZE","StubArray","ObservableArrayAdministration","enhancer","owned","lastKnownLength","newV","oldV","dehanceValue","dehancer","dehanceValues","intercept","fireImmediately","added","addedCount","removed","removedCount","getArrayLength","setArrayLength","newItems","spliceWithArray","updateArrayLength","oldLength","reserveArrayBuffer","deleteCount","checkIfStateModificationsAreAllowed","EMPTY_ARRAY","lengthDelta","spliceItemsIntoValues","notifyArraySplice","notifyArrayChildUpdate","notifySpy","notify","ObservableArray","initialValues","adm","ENTRY_0","arrays","peek","toJS","find","findIndex","compareFn","move","toIndex","checkIndex","oldItems","impl","baseFunc","addHiddenProp","propNames","makeNonEnumerable","createArrayEntryDescriptor","createArrayBufferItem","isObservableArrayAdministration","thing","UNCHANGED","ObservableValue","hasUnreportedChange","prepareNewValue","setNewValue","primitiveSymbol","isObservableValue","messages","m001","m002","m003","m004","m005","m006","m007","m008","m009","m010","m011","m012","m013","m014","m015","m016","m017","m018","m019","m020","m021","m022","m024","m025","m026","m028","m029","m030a","m030b","m031","m032","m033","m034","m035","m036","m037","m038","getMessage","createAction","actionName","executeAction","originalFn","isMobxAction","runInfo","flattendArgs","prevDerivation","prevAllowStateChanges","allowStateChangesStart","startAction","allowStateChangesEnd","endAction","useStrict","strict","strictMode","isStrictModeEnabled","createClassPropertyDecorator","onInitialize","allowCustomArguments","classPropertyDecorator","customArgs","argLen","quacksLikeADecorator","__mobxLazyInitializers","value_1","initializer_1","initializer","__mobxDidRunLazyInitializers","runLazyInitializers","newDescriptor","__mobxInitializedProps","typescriptInitializeProperty","outerArgs","baseDescriptor","actionFieldDecorator","originalDescriptor","action","boundActionDecorator","defineBoundAction","arg3","arg4","namedActionDecorator","runInAction","isAction","deepEqual","eq","aStack","bStack","areArrays","aCtor","bCtor","deepEq","bound","action_1","autoBind","isES6Map","iteratorToArray","identityComparer","comparer","identity","structural","areBothNaN","autorun","reactionRunner","schedule","getDisposer","when","prevUntracked","autorunAsync","isScheduled","isDisposed","fail","isModifierDescriptor","compareStructural","struct","firstTime","ComputedValue","derivation","observing","newObserving","runId","unboundDepsCount","__mapid","CaughtException","isComputing","isRunningSetter","POSSIBLY_STALE","propagateMaybeChanged","clearObserving","inBatch","shouldCompute","computeValue","trackAndCompute","propagateChangeConfirmed","isCaughtException","cause","wasSuspended","computationDepth","trackDerivedFunction","whyRun","isTracking","unique","dep","getObservers","joinStrings","isComputedValue","ObservableObjectAdministration","asObservableObject","isPlainObject","defineObservablePropertyFromDescriptor","defaultEnhancer","modifierDescriptor","defineObservableProperty","initialValue","computedValue","generateComputedPropConfig","defineComputedPropertyFromComputedValue","defineComputedProperty","assertPropertyConfigurable","observablePropertyConfigs","setPropertyValue","generateObservablePropConfig","notifyPropertyAddition","getter","asInstanceProperty","computedPropertyConfigs","isObservableObjectAdministration","isObservable","isReaction","createDecoratorForEnhancer","baseValue","extendObservable","extendObservableHelper","deepEnhancer","extendShallowObservable","referenceEnhancer","propSet","definedProps","isPropertyConfigurable","deepDecorator","shallowDecorator","shallowEnhancer","refDecorator","deepStructDecorator","deepStructEnhancer","refStructDecorator","refStructEnhancer","observableFactories","incorrectlyUsedAsDecorator","shallowBox","shallowArray","ObservableMap","shallowMap","shallowObject","createModifierDescriptor","shallow","deep","isMobxModifierDescriptor","ObservableMapMarker","initialData","_hasMap","_keys","merge","_has","isValidKey","_updateHasMapEntry","assertValidKey","hasKey","_updateValue","_addValue","observable$$1","map$$1","newKeys","deprecated","getGlobal","mobxGuid","deprecatedMessages","invoked","things","separator","prototypeHasOwnProperty","clazz","isArrayLike","persistentKeys","MobXGlobals","pendingUnobservations","pendingReactions","isRunningReactions","resetId","globalReactionErrorHandlers","shareGlobalStateCalled","runInIsolationCalled","warnedAboutMultipleInstances","global_1","getAtom","anyThing","getDebugName","getAdministration","getDependencyTree","nodeToDependencyTree","dependencies","nodeToObserverTree","hasObservers","addObserver","removeObserver","queueForUnobservation","filler","runReactions","BREAK","printDepTree","tree","__mobxInstanceCount","changeDependenciesStateTo0","isComputingDerivation","hasObservers$$1","prevTracking","prevObserving","lowestNewObservingDerivationState","i0","bindDependencies","getAtomFromArgs","enterBreakPoint","onInvalidate","_isScheduled","_isTrackPending","_isRunning","runReaction","reportExceptionInDerivation","messageToUser","reactionScheduler","runReactionsHelper","allReactions","remainingReactions","asReference","asStructure","asFlat","asMap","createComputedDecorator","computedDecorator","computedStructDecorator","computed","isComputed","propOrCb","cbOrFire","observeObservableProperty","observeObservable","propOrHandler","interceptProperty","interceptInterceptable","expr","detectCycles","__alreadySeen","toAdd","res_1","createTransformer","transformer","onCleanup","objectCache","Transformer","sourceIdentifier","sourceObject","identifier","tid","$transformId","getMemoizationId","reactiveTransformer","getGlobalState","getObserverTree","interceptReads","onReactionError","resetGlobalState","defaultGlobals","isolateGlobalState","shareGlobalState","ownState","__mobservableTrackingStack","__mobservableViewStack","__mobxGlobal","baseScheduler","everything","isBoxedObservable","warnedAboutDefaultExport","_loop_1","injectMobx","propIsEnumerable","test1","test2","test3","letter","shouldUseNative","assertPath","normalizeStringPosix","allowAboveRoot","lastSegmentLength","lastSlash","dots","lastSlashIndex","posix","cwd","isAbsolute","trailingSeparator","joined","fromStart","fromEnd","fromLen","toStart","toLen","lastCommonSep","fromCode","_makeLong","dirname","hasRoot","matchedSlash","basename","extIdx","firstNonSlashEnd","extname","startDot","startPart","preDotState","pathObject","sep","_format","delimiter","win32","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","queueIndex","cleanUpNextTick","drainQueue","runClearTimeout","Item","argv","binding","chdir","umask","_react2","_createChainableTypeChecker2","isValidElement","_warning","_warning2","validator","componentNameSafe","propFullNameSafe","messageKey","_resetWarned","_reactIs","isValidElementType","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","secret","getShim","ReactPropTypes","bigint","bool","any","arrayOf","elementType","instanceOf","objectOf","oneOf","oneOfType","exact","checkPropTypes","freeGlobal","punycode","maxInt","regexPunycode","regexNonASCII","regexSeparators","stringFromCharCode","mapDomain","ucs2decode","ucs2encode","digitToBasic","digit","adapt","numPoints","baseMinusTMin","basic","oldi","baseMinusT","inputLength","bias","encode","handledCPCount","basicLength","handledCPCountPlusOne","qMinusT","ba","ea","fa","ha","ia","ja","la","ma","na","oa","ka","pa","qa","ra","extractEvents","eventTypes","ta","phasedRegistrationNames","registrationName","va","wa","xa","ya","za","Aa","Ba","Ca","stateNode","Da","Ea","Fa","Ga","Ha","Ia","Ja","Ka","La","Ma","Na","Oa","Pa","Qa","acceptsBooleans","attributeNamespace","mustUseProperty","sanitizeURL","Ua","Va","xlinkHref","Wa","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","Xa","Sa","Ta","Ra","ReactCurrentDispatcher","ReactCurrentBatchConfig","suspense","Ya","for","Za","$a","ab","eb","gb","hb","ib","jb","kb","lb","mb","nb","pb","$$typeof","_status","_result","qb","_debugOwner","_debugSource","rb","sb","xb","_valueTracker","setValue","stopTracking","tb","yb","checked","zb","defaultChecked","defaultValue","_wrapperState","initialChecked","Ab","controlled","Bb","Cb","Db","Eb","Gb","Fb","Hb","selected","defaultSelected","disabled","Ib","dangerouslySetInnerHTML","Jb","Kb","Lb","Mb","Nb","Ob","Pb","Qb","namespaceURI","innerHTML","firstChild","MSApp","execUnsafeLocalFunction","Rb","lastChild","nodeValue","Sb","Tb","animationend","animationiteration","animationstart","transitionend","Ub","Vb","Wb","transition","Xb","Yb","Zb","$b","bc","dc","alternate","effectTag","ec","memoizedState","dehydrated","hc","sibling","gc","ic","jc","kc","_dispatchListeners","_dispatchInstances","isPersistent","mc","nc","correspondingUseElement","oc","pc","qc","topLevelType","targetInst","ancestors","rc","eventSystemFlags","containerInfo","tc","uc","vc","wc","xc","yc","zc","Ac","Bc","Cc","Dc","Ec","Fc","Gc","Hc","Ic","Kc","blockedOn","Lc","pointerId","Mc","Nc","Pc","unstable_runWithPriority","hydrate","Qc","Rc","Sc","Tc","Uc","unstable_scheduleCallback","unstable_NormalPriority","Vc","Wc","Yc","Zc","$c","ad","bubbled","captured","eventPriority","bd","cd","unstable_UserBlockingPriority","ed","fd","gd","Oc","jd","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridArea","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","lineClamp","order","orphans","tabSize","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","kd","ld","md","setProperty","nd","menuitem","area","br","embed","hr","keygen","wbr","od","qd","sd","ud","vd","nextSibling","wd","xd","HTMLIFrameElement","yd","contentEditable","Bd","Cd","Dd","Ed","Fd","autoFocus","Gd","__html","Hd","Id","Jd","Kd","previousSibling","Ld","Md","Nd","Od","Pd","Qd","Rd","Sd","Td","dispatchConfig","Ud","_targetInst","Vd","Wd","Xd","Yd","Zd","$d","ae","be","ce","Interface","isDefaultPrevented","ee","eventPool","fe","destructor","de","getPooled","persist","ge","he","ie","je","ke","documentMode","le","oe","beforeInput","compositionEnd","compositionStart","compositionUpdate","qe","keyCode","re","detail","se","ve","which","te","char","ue","we","datetime","ye","ze","Ae","Be","Ce","De","Ee","Fe","Ge","He","Ie","Je","Ke","Le","Me","_isInputEventSupported","Ne","Oe","Alt","Control","Meta","Shift","Pe","getModifierState","Qe","Re","Se","Te","Ue","Ve","screenX","screenY","clientX","clientY","pageX","pageY","buttons","relatedTarget","fromElement","toElement","movementX","movementY","We","pressure","tangentialPressure","tiltX","tiltY","twist","isPrimary","Xe","mouseEnter","mouseLeave","pointerEnter","pointerLeave","Ye","$e","af","bf","cf","df","ff","hf","jf","selectionStart","selectionEnd","anchorNode","anchorOffset","focusNode","focusOffset","onSelect","lf","pseudoElement","mf","nf","pf","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","qf","rf","sf","dataTransfer","tf","touches","targetTouches","changedTouches","uf","vf","deltaX","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","wf","SimpleEventPlugin","EnterLeaveEventPlugin","ChangeEventPlugin","SelectEventPlugin","BeforeInputEventPlugin","yf","zf","H","I","Af","J","Bf","Cf","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","L","Df","Ef","Ff","getChildContext","Gf","__reactInternalMemoizedMergedChildContext","Hf","If","Jf","Kf","unstable_cancelCallback","Lf","unstable_requestPaint","Mf","unstable_now","Nf","unstable_getCurrentPriorityLevel","Of","unstable_ImmediatePriority","Pf","Qf","Rf","unstable_LowPriority","Sf","unstable_IdlePriority","Tf","Uf","unstable_shouldYield","Vf","Wf","Xf","Yf","Zf","$f","ag","bg","cg","dg","eg","fg","hg","ig","jg","kg","lg","mg","ng","og","_context","_currentValue","pg","childExpirationTime","qg","firstContext","expirationTime","rg","sg","observedBits","responders","ug","updateQueue","baseState","baseQueue","pending","vg","wg","suspenseConfig","xg","yg","zg","ca","Ag","Bg","Cg","Dg","Eg","refs","Fg","Jg","isMounted","enqueueSetState","Gg","Hg","Ig","enqueueReplaceState","enqueueForceUpdate","Kg","isPureReactComponent","Lg","updater","Mg","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","Ng","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","Og","Pg","_owner","_stringRef","Qg","Rg","lastEffect","nextEffect","firstEffect","Sg","Tg","Ug","implementation","Vg","Wg","Xg","Yg","Zg","$g","ah","bh","dh","eh","gh","M","hh","revealOrder","ih","responder","jh","kh","N","mh","Q","nh","oh","ph","qh","rh","th","uh","vh","wh","lastRenderedReducer","eagerReducer","eagerState","lastRenderedState","dispatch","xh","yh","zh","Ah","deps","Bh","Ch","Dh","Eh","Fh","Gh","Hh","Ih","Jh","Kh","Lh","Mh","Nh","readContext","useCallback","useContext","useEffect","useImperativeHandle","useLayoutEffect","useMemo","useReducer","useRef","useState","useDebugValue","useResponder","useDeferredValue","useTransition","Oh","Ph","Qh","Rh","Sh","Th","pendingProps","Uh","Vh","Wh","Xh","Yh","ReactCurrentOwner","Zh","$h","ai","bi","ci","di","ei","fi","UNSAFE_componentWillUpdate","componentWillUpdate","gi","hi","pendingContext","ni","qi","ii","retryTime","ji","unstable_avoidThisFallback","ki","li","isBackwards","renderingStartTime","last","tail","tailExpiration","tailMode","mi","ri","si","wasMultiple","multiple","onClick","onclick","ui","vi","xi","yi","zi","Ai","Bi","WeakSet","Ci","Fi","Ei","Gi","__reactInternalSnapshotBeforeUpdate","Hi","Ii","Ji","focus","Ki","Li","Di","Mi","Ni","Oi","Pi","Qi","Ri","_reactRootContainer","Si","Ti","Ui","Vi","Wi","Xi","Yi","Zi","$i","componentDidCatch","aj","componentStack","Rj","bj","cj","dj","fj","gj","X","kj","mj","nj","oj","Y","qj","rj","sj","tj","uj","vj","wj","timeoutMs","xj","yj","Z","zj","lastExpiredTime","Aj","firstPendingTime","lastPingedTime","nextKnownPendingLevel","callbackExpirationTime","callbackPriority","callbackNode","Bj","Cj","Dj","Ej","Fj","Gj","Hj","finishedWork","finishedExpirationTime","lastSuspendedTime","Ij","timeoutHandle","Jj","busyMinDurationMs","busyDelayMs","Kj","Mj","Nj","pingCache","Oj","ub","Pj","Xc","Qj","Sj","firstSuspendedTime","rangeCount","wb","activeElementDetached","focusedElem","selectionRange","Tj","setStart","setEnd","vb","Uj","Vj","Wj","_ctor","Xj","_calculateChangedBits","unstable_observedBits","Zj","isReactComponent","pendingChildren","ak","bk","ck","dk","ek","fk","Jc","_internalRoot","gk","ik","hasAttribute","hk","jk","kk","unmount","form","Lj","lk","Events","findFiberByHostInstance","__REACT_DEVTOOLS_GLOBAL_HOOK__","isDisabled","supportsFiber","onCommitFiberRoot","onCommitFiberUnmount","Yj","overrideHookState","overrideProps","setSuspenseHandler","scheduleUpdate","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","bundleType","rendererPackageName","createPortal","flushSync","unmountComponentAtNode","unstable_createPortal","unstable_renderSubtreeIntoContainer","checkDCE","hasElementType","Element","hasMap","hasSet","hasArrayBuffer","isView","equal","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Fragment","Lazy","Portal","Profiler","StrictMode","Suspense","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isPortal","isProfiler","isStrictMode","isSuspense","typeOf","setState","prevState","prevProps","__reactInternalSnapshotFlag","__reactInternalSnapshot","foundWillMountName","foundWillReceivePropsName","foundWillUpdateName","newApiName","maybeSnapshot","snapshot","__suppressDeprecationWarning","_propTypes2","_componentOrElement2","_reactDom2","_getContainer2","_ownerDocument2","_possibleConstructorReturn","_React$Component","_mountOverlayTarget","_overlayTarget","_portalContainerNode","_unmountOverlayTarget","_renderOverlay","overlay","_overlayInstance","onRendered","_unrenderOverlay","getMountNode","_inherits","_isMounted","_extends","_activeElement2","_contains2","_inDOM2","_deprecated2","_elementType2","_react","_ModalManager2","_Portal2","_RefHolder2","_addEventListener2","_addFocusListener2","modalManager","Modal","_initialiseProps","omitProps","_props","Transition","backdrop","onExit","onExiting","onEnter","onEntering","onEntered","dialog","filteredProps","exited","_dialog$props","role","tabIndex","cloneElement","appear","unmountOnExit","onExited","handleHidden","setMountNode","onPortalRendered","setModalNodeRef","renderBackdrop","setDialogRef","checkForFocus","onShow","onHide","_props2","dialogElement","getDialogElement","currentActiveElement","lastFocus","restoreLastFocus","isTopModal","onEscapeKeyDown","onEscapeKeyUp","onBackdropClick","backdropStyle","backdropClassName","containerClassName","backdropTransition","enforceFocus","restoreFocus","_this2","_props3","handleBackdropClick","_onDocumentKeydownListener","handleDocumentKeyDown","_onDocumentKeyupListener","handleDocumentKeyUp","_onFocusinListener","mountNode","modalNode","_props4","Manager","_class2","_style2","_scrollbarSize2","_isOverflowing2","_manageAriaHidden","findContainer","modal","modals","some","setContainerStyle","paddingRight","overflowing","removeContainerStyle","ModalManager","_ref2","_ref2$hideSiblingNode","hideSiblingNodes","_ref2$handleContainer","handleContainerOverflow","modalIdx","containerIdx","containers","hideSiblings","showSiblings","ariaHidden","_LegacyPortal2","setContainer","RefHolder","RootCloseWrapper","addEventListeners","documentMouseCaptureListener","handleMouseCapture","documentMouseListener","handleMouse","documentKeyupListener","handleKeyUp","removeEventListeners","preventMouseRootClose","isModifiedEvent","isLeftClickEvent","onRootClose","_on2","_off2","useFocusin","defaultContainer","_reactDom","_isWindow2","isBody","fullWidth","innerWidth","documentElementRect","bodyIsOverflowing","scrollHeight","clientHeight","siblings","BLACKLIST","mount","componentOrElement","EXITING","ENTERED","ENTERING","EXITED","UNMOUNTED","_interopRequireWildcard","_reactLifecyclesCompat","initialStatus","parentGroup","transitionGroup","isMounting","enter","appearStatus","in","mountOnEnter","nextCallback","_proto","updateStatus","nextStatus","cancelNextCallback","getTimeouts","exit","mounting","performEnter","performExit","appearing","timeouts","enterTimeout","safeSetState","onTransitionEnd","_this3","cancel","setNextCallback","_this4","doesNotHaveTimeoutOrListener","addEndListener","_this$props","childProps","excluded","sourceKeys","_objectWithoutPropertiesLoose","classNamesShape","timeoutsShape","createDetectElementResize","nonce","_window","raf","requestFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","cancelFrame","mozCancelAnimationFrame","webkitCancelAnimationFrame","resetTriggers","triggers","__resizeTriggers__","expand","firstElementChild","contract","lastElementChild","expandChild","scrollWidth","scrollListener","__resizeRAF__","__resizeLast__","checkTriggers","__resizeListeners__","keyframeprefix","animationstartevent","domPrefixes","startEvents","elm","animationKeyframes","animationStyle","addResizeListener","elementStyle","head","styleSheet","createStyles","__animationListener__","removeResizeListener","AutoSizer","_React$PureComponent","_ret","defaultHeight","defaultWidth","_onResize","disableHeight","disableWidth","onResize","_parentNode","paddingLeft","paddingTop","paddingBottom","newHeight","newWidth","_setRef","autoSizer","_autoSizer","HTMLElement","_detectElementResize","_state","outerStyle","childParams","createCallbackMemoizer","requireAllKeys","cachedIndices","indices","allInitialized","every","indexChanged","cachedValue","SCROLL_POSITION_CHANGE_REASONS","CollectionView","isScrolling","_calculateSizeAndPositionDataOnNextUpdate","_onSectionRenderedMemoizer","_onScrollMemoizer","_invokeOnSectionRenderedHelper","cellLayoutManager","onSectionRendered","getLastRenderedIndices","_setScrollingContainerRef","_scrollingContainer","_updateScrollPositionForScrollToCell","_this$props2","scrollToAlignment","scrollToCell","_this$state","scrollPosition","getScrollPositionForCell","align","cellIndex","_setScrollPosition","_onScroll","_enablePointerEventsAfterDelay","_this$props3","isScrollingChange","scrollbarSize","_scrollbarSize","_cellLayoutManager$ge","getTotalSize","totalHeight","totalWidth","scrollPositionChangeReason","_invokeOnScrollMemoizer","_scrollbarSizeMeasured","_cellLayoutManager$ge2","_disablePointerEventsTimeoutId","autoHeight","cellCount","horizontalOverscanSize","noContentRenderer","verticalOverscanSize","_state2","_lastRenderedCellCount","_lastRenderedCellLayoutManager","calculateSizeAndPositionData","_cellLayoutManager$ge3","childrenToDisplay","cellRenderers","collectionStyle","boxSizing","WebkitOverflowScrolling","willChange","verticalScrollBarSize","horizontalScrollBarSize","overflowX","overflowY","onScroll","maxHeight","maxWidth","pointerEvents","_ref3","_ref4","newState","Section","_indexMap","_indices","SectionManager","sectionSize","_sectionSize","_cellMetadata","_sections","getSections","section","getCellIndices","sectionXStart","sectionXStop","sectionYStart","sectionYStop","sections","sectionX","sectionY","cellMetadatum","addCellIndex","getUpdatedOffsetForIndex","_ref$align","cellOffset","cellSize","containerSize","currentOffset","maxOffset","minOffset","_lastRenderedCellIndices","_cellCache","_isScrollingChange","_setCollectionViewRef","_collectionView","recomputeCellSizesAndPositions","cellSizeAndPositionGetter","cellMetadata","sectionManager","registerCell","_sectionManager","targetIndex","cellGroupRenderer","cellRenderer","cellCache","getCellMetadata","cellRendererProps","renderedCell","__self","__source","IsSomeRendererActing","PureComponent","createContext","_currentValue2","_threadCount","Consumer","createFactory","createRef","forwardRef","lazy","Op","iteratorSymbol","asyncIteratorSymbol","toStringTagSymbol","innerFn","outerFn","tryLocsList","protoGenerator","Generator","Context","GenStateSuspendedStart","GenStateExecuting","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","GenStateSuspendedYield","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","getProto","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","invoke","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iteratorMethod","isGeneratorFunction","genFun","awrap","async","iter","skipTempReset","rootRecord","rval","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","truncate","illegalRe","controlRe","reservedRe","windowsReservedRe","windowsTrailingRe","sanitize","sanitized","unstable_forceFrameRate","sortIndex","priorityLevel","unstable_Profiling","unstable_continueExecution","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","unstable_wrapCallback","ANY","Comparator","parseOptions","loose","semver","operator","COMPARATORLOOSE","COMPARATOR","SemVer","cmp","intersects","Range","includePrerelease","startsWith","raw","parseRange","isNullSet","isAny","memoKey","FLAG_INCLUDE_PRERELEASE","FLAG_LOOSE","cached","HYPHENRANGELOOSE","HYPHENRANGE","hyphenReplace","COMPARATORTRIM","comparatorTrimReplace","rangeList","TILDETRIM","tildeTrimReplace","CARETTRIM","caretTrimReplace","parseComparator","replaceGTE0","rangeMap","comparators","thisComparators","isSatisfiable","rangeComparators","thisComparator","rangeComparator","testSet","remainingComparators","testComparator","otherComparator","replaceCarets","replaceTildes","replaceXRanges","replaceStars","isX","replaceTilde","TILDELOOSE","TILDE","replaceCaret","CARETLOOSE","CARET","replaceXRange","XRANGELOOSE","XRANGE","gtlt","xM","xm","xp","anyX","STAR","GTE0PRE","GTE0","incPr","$0","fM","fm","fp","fpr","tM","tpr","prerelease","allowed","major","minor","MAX_LENGTH","MAX_SAFE_INTEGER","compareIdentifiers","LOOSE","FULL","build","compareMain","comparePre","compareBuild","inc","identifierBase","neq","gt","gte","lte","MAX_SAFE_COMPONENT_LENGTH","RELEASE_TYPES","SEMVER_SPEC_VERSION","NODE_DEBUG","numeric","anum","bnum","rcompareIdentifiers","looseOption","emptyOpts","createToken","isGlobal","NUMERICIDENTIFIER","NUMERICIDENTIFIERLOOSE","NONNUMERICIDENTIFIER","PRERELEASEIDENTIFIER","PRERELEASEIDENTIFIERLOOSE","BUILDIDENTIFIER","MAINVERSION","PRERELEASE","BUILD","FULLPLAIN","MAINVERSIONLOOSE","PRERELEASELOOSE","LOOSEPLAIN","XRANGEIDENTIFIER","XRANGEIDENTIFIERLOOSE","GTLT","XRANGEPLAIN","XRANGEPLAINLOOSE","COERCE","LONETILDE","LONECARET","Yallist","MAX","LENGTH","LENGTH_CALCULATOR","ALLOW_STALE","MAX_AGE","DISPOSE","NO_DISPOSE_ON_SET","LRU_LIST","CACHE","UPDATE_AGE_ON_GET","naiveLength","doUse","hit","isStale","del","unshiftNode","maxAge","diff","walker","Entry","forEachStep","thisp","stale","noDisposeOnSet","updateAgeOnGet","mL","allowStale","mA","lengthCalculator","lC","itemCount","rforEach","dump","dumpLru","expiresAt","prune","inserted","pushNode","forEachReverse","getReverse","mapReverse","initial","reduceReverse","toArrayReverse","sliceReverse","separatorIndex","getRangeAt","blur","getLength","isHighSurrogate","isLowSurrogate","byteLength","charLength","curByteLength","uriTemplateGlobalModifiers","uriTemplateSuffices","notReallyPercentEncode","encodeURI","doubleEncoded","isPercentEncoded","uriTemplateSubstitution","spec","shouldEscape","showVariables","trimEmptyString","varNames","varList","varSpecs","varSpecMap","varName","suffices","varSpec","subFunction","valueFunction","startIndex","guessFunction","resultObj","arrayValue","hasEquals","innerArrayValue","objectValue","innerValue","innerVarName","specIndexMap","firstStarred","lastStarred","substitution","unSubstitution","UriTemplate","template","textParts","prefixes","substitutions","unSubstitutions","part","remainder","funcs","fromUri","substituted","nextPart","endPart","nextPartPos","fillFromObject","uri","prevCodePoint","uuid","byteToHex","bth","rnds8","rnds","_nodeId","_clockseq","rng","bytesToUuid","_lastMSecs","_lastNSecs","clockseq","seedBytes","msecs","getTime","nsecs","dt","tl","tmh","DOMParser","locator","DOMHandler","cdata","columnNumber","_locator","_toString","java","appendElement","hander","currentElement","parseFromString","mimeType","sax","XMLReader","domBuilder","defaultNSMap","xmlns","entityMap","setDocumentLocator","errorImpl","isCallback","buildErrorHandler","nbsp","xml","startDocument","DOMImplementation","createDocument","documentURI","startElement","localName","qName","getURI","getQName","createAttributeNS","getLocator","setAttributeNode","endElement","startPrefixMapping","endPrefixMapping","processingInstruction","createProcessingInstruction","ignorableWhitespace","characters","charNode","createCDATASection","skippedEntity","endDocument","comm","createComment","startCDATA","endCDATA","startDTD","createDocumentType","fatalError","dest","Class","Super","ppt","ELEMENT_NODE","ATTRIBUTE_NODE","TEXT_NODE","CDATA_SECTION_NODE","ENTITY_REFERENCE_NODE","ENTITY_NODE","PROCESSING_INSTRUCTION_NODE","COMMENT_NODE","DOCUMENT_TYPE_NODE","DOCUMENT_FRAGMENT_NODE","NOTATION_NODE","ExceptionCode","ExceptionMessage","HIERARCHY_REQUEST_ERR","INDEX_SIZE_ERR","DOMSTRING_SIZE_ERR","NOT_FOUND_ERR","WRONG_DOCUMENT_ERR","INVALID_CHARACTER_ERR","NO_DATA_ALLOWED_ERR","NO_MODIFICATION_ALLOWED_ERR","INUSE_ATTRIBUTE_ERR","NOT_SUPPORTED_ERR","INVALID_STATE_ERR","INVALID_MODIFICATION_ERR","NAMESPACE_ERR","INVALID_ACCESS_ERR","DOMException","NodeList","LiveNodeList","refresh","_node","_refresh","_updateLiveList","_inc","__set__","NamedNodeMap","_findNodeIndex","_addNamedNode","newAttr","oldAttr","ownerElement","_onRemoveAttribute","_nsMap","_onAddAttribute","_removeNamedNode","features","_features","_xmlEncoder","_visitNode","Document","_onUpdateChild","newChild","cs","_removeChild","_insertBefore","newFirst","newLast","Attr","CharacterData","Text","Comment","CDATASection","DocumentType","Notation","Entity","EntityReference","DocumentFragment","ProcessingInstruction","XMLSerializer","nodeSerializeToString","isHtml","nodeFilter","refNode","lookupPrefix","visibleNamespaces","serializeToString","needNamespaceDefine","isHTML","pubid","sysid","internalSubset","importNode","node2","cloneNode","attrs2","_ownerElement","setNamedItem","setNamedItemNS","getNamedItemNS","removeNamedItem","removeNamedItemNS","hasFeature","qualifiedName","doctype","refChild","replaceChild","oldChild","hasChildNodes","appendData","isSupported","hasAttributes","lookupNamespaceURI","isDefaultNamespace","importedNode","rtv","getAttribute","createDocumentFragment","createAttribute","specified","createEntityReference","pl","getAttributeNode","removeAttributeNode","_appendSingleChild","setAttributeNodeNS","removeAttributeNS","getAttributeNodeNS","hasAttributeNS","getAttributeNS","getElementsByTagNameNS","substringData","insertData","replaceData","deleteData","splitText","newText","getTextContent","$$length","nameStartChar","nameChar","tagNamePattern","copyLocator","parseElementStartPart","currentNSMap","entityReplacer","attrName","setTagName","localNSMap","nsp","nsPrefix","_copy","parseHtmlSpecialContent","elStartEnd","elEndStart","fixSelfClosed","closeMap","parseDCC","matchs","reg","lastMatch","endDTD","parseInstruction","ElementAttributes","_set_proto_","thiz","defaultNSMapCopy","fixedFromCharCode","surrogate1","surrogate2","appendText","lineEnd","linePattern","lineStart","parseStack","tagStart","endMatch","locator2","getLocalName","Module","nodeRequire","resolveLookupPaths","_resolveLookupPaths","actualParentPaths","ccLibrariesPublicPath","viewBox","SpectrumPagination","onKeyDown","pageInput","changePage","newPage","isInvalidPage","onPageChange","onPageInputBlur","currentPage","onNext","onPrevious","onInputChangeEvent","onButtonKeyPress","oldProps","totalPages","pageDisplay","allowInput","inputDisplay","noInputDisplay","onBlur","onChange","Button","Icon","BaseInfoPanelController","navigationControls","currentStopIndex","controllerData","navigationRow","stopLabel","stopDetails","testId","label","displayBar","onDrop","onMouseDown","onActive","onInactive","buttonView","quiet","otherProps","divView","filterDOMProps","buttonProps","onMouseUp","onMouseLeave","tooltip","placement","featureId","RS2ButtonGroup","interopRequireDefault","buttonGroupLoader","actionGroupLoader","EXCLUDE_SWC","SWCLoader","ButtonGroup","ActionGroup","NormalButtonGroup","createWrapper","swcLoader","swcProps","vertical","compatabilityProps","isUXP","ActionButtonGroup","SWCWrapper","actionGroupContainer","selects","selectedValues","flat","handleOnChange","useComponent","filterBooleanProps","preferSpectrumFallback","ContextMenuButton","overlayState","OverlayState","ignoreScrollEvents","ignoreFocus","toggleOverlay","buttonPos","customLabelRef","viewState","setContextMenuPositionState","onContextMenuClick","setCustomLabelRef","isOpen","icon","LibrariesContext","dataTestId","CreateItemCard","graphicsViewContents","createCardButton","shortType","buttonText","smallIcon","fullWidthContents","shortTypeCaps","HTMLText","html","tooltipContent","Tooltip","DialogContainerView","dialogManager","isDialogAlwaysInline","DiscoverLibrariesMessage","_revealRootView","showRootView","_browseSharedLibrariesinCCD","libraryManager","openBrowseAll","_browsePublicLibrariesInCCD","openMarketplace","_openLM","_discoverLibraries","configuration","libraries","currentLibrary","isDocumentAssets","callToActionText","callToActionType","showImage","onClickHandler","hasLibraryManager","noLMRootViewMessage","getCallToAction","discoverLibrariesContent","getCustomDiscoverLibrariesView","EmptyFilterLibraryView","syncStatus","librariesIcon","graphic","header","featureFlags","subtitle","hasGlobalSearch","clearFilterButton","isLibraryNameSearch","isLibraryNameSearchType","resetCurrentLibrariesFilter","setSearchText","NoLibrariesView","showClearButton","emptyFilterLibraryViewOverride","linkClickMethods","nodeListToJSX","elementNodeToJSX","DIV","SPAN","BR","UL","OL","LI","hrefAttribute","nodeToJSX","nodeList","getSWCSize","getSWCProps","alt","RS2Add","spectrumTheme","xIcon","IconAdd","RS2AddCircle","IconAddCircle","RS2Alert","IconAlert","RS2Building","IconBuilding","RS2Browse","IconBrowse","RS2Brush","IconBrush","RS2CCLibrary","IconCCLibrary","RS2Checkmark","IconCheckmark","RS2ChevronDown","IconChevronDown","RS2ChevronLeft","IconChevronLeft","RS2ChevronRight","IconChevronRight","RS2ClassicGridView","IconGridView","IconClassicGridView","RS2Close","IconClose","RS2Cloud","IconCloud","RS2CloudDisconnected","IconCloudStateDisconnected","IconCloudDisconnected","RS2CloudError","IconCloudStateError","IconCloudError","RS2ColorPalette","IconColorPalette","RS2Date","IconDate","RS2Delete","IconDelete","RS2DownloadFromCloudOutline","IconDownloadFromCloudOutline","RS2Edit","IconEdit","RS2Filter","IconFilter","RS2FilterCheck","IconFilterCheck","RS2Flag","IconFlag","RS2Folder","IconFolder","RS2FolderAdd","IconFolderAdd","RS2FolderOpen","IconFolderOpen","RS2Globe","IconGlobe","RS2GlobeSearch","IconGlobeSearch","RS2HelpOutline","IconHelpOutline","RS2Image","IconImage","RS2Invite","IconInvite","RS2Info","IconInfo","RS2InfoOutline","IconInfoOutline","RS2Link","IconLink","RS2LinkOut","IconLinkOut","RS2LockClosed","IconLockClosed","RS2Magnify","IconMagnify","RS2More","IconMore","RS2OpenIn","IconOpenIn","RS2Organisations","IconOrganisations","RS2PublishRemove","IconPublishRemove","RS2RailRightClose","IconRailRightClose","RS2Refresh","IconRefresh","RS2Rename","IconRename","RS2Settings","IconSettings","RS2ShoppingCart","IconShoppingCart","RS2Share","IconShare","RS2Shop","IconSmallBusiness","IconShop","RS2ShowMenu","IconShowMenu","RS2SortOrderDown","IconSortOrderDown","RS2SortOrderUp","IconSortOrderUp","RS2Text","IconText","RS2TextParagraph","IconTextParagraph","RS2User","IconUser","RS2UserGroup","IconUserGroup","RS2UserLock","IconUserLock","RS2ViewList","IconListView","IconViewList","RS2Visibility","IconVisibility","ActivateFonts","DownloadFromCloudOutline","ActivateFontsSpinner","Refresh","Add","Add12","Add14","AddBrush","Brush","AddCircle","AddGroup","FolderAdd","AddParagraphStyle","TextParagraph","AddText","Alert","Back","ChevronLeft","Browse","Building","CCLibrary","CCLibrary16","CCXCreateColor","ColorPalette","CCXCreateFont","CCXCreateImage","Checkmark","ChevronDownMedium","ChevronDown","ChevronDownSmall","ChevronLeftMedium","ChevronLeftSmall","ChevronRightMedium","ChevronRight","ChevronRightSmall","Close","Cloud","Delete","DownArrow","Edit","Filter","Filter16","FilterApplied","FilterCheck","Flag","Folder","FolderOpen","Globe","GlobeSearch","GridView","ClassicGridView","Group","UserGroup","HelpOutline","Info","InfoOutline","Invite","Leave","RailRightClose","Link","LinkOut","LinkedLibrary","ListView","ViewList","Lock","LockClosed","Magnify","More","Next","OpenIn","Organisations","Plus","PublishRemove","Question","ReadOnly","UserLock","Rename","Settings","ShareAssets","Share","Shop","ShoppingCart","ShowMenu","Sort","SortOrderDown","SortDescending","SortOrderUp","SyncAlert","CloudError","SyncError","CloudDisconnected","SyncDefault","SyncingSpinner","User","Visibility","icons","loadedSpritesheetCache","_setSVGRef","_updateIconReaction","_loadSVG","iconId","cachedDocument","createHTMLDocument","iconSVG","fragment","ownNode","adoptNode","iconProps","SpectrumIcon","SpectrumIconRegistry","slot","formatProperties","InfoPanelView","updateStockData","AdobeStockUtils","disposeStockReaction","fetchLibraryCollaborations","elementSelectionState","library","elementConfiguration","toLocaleUpperCase","placeholder","iconHeight","customControls","Controller","serviceProperties","primaryProperties","numElements","getLibrarySharingString","librarySizeManager","subProperties","createdModifiedProperties","createdValue","getLocalizedDate","created","modifiedValue","modified","collaborators","creator","collab","createdBy","modifiedBy","createdModifiedProps","canEditInSource","getDocumentName","editInSource","propertiesList","isOneUpMode","ElementModel","ElementTypeHeader","toggleCollapsed","isCollapseDisabled","eventSubType","setTypeCollapsed","onClickAdd","disableAdd","isTypeCollapsed","isDocumentAssetsType","isDocumentSearchType","isDocumentSearchMode","collapsedSections","isGroupLocalizationString","isRole","collapseArrow","collapseGroupChevronHeight","addButton","showAdd","TimestampHeader","toLocaleString","GroupTreeView","handleDoubleClick","disableEditing","viewManager","startEditPath","pathState","isEditing","editPathGroup","treeView","EditableGroupPath","autocomplete","DocumentGroup","GroupHeaderView","isUngrouped","usePathView","viewByGroupMode","pathViewHeader","GroupPathView","treeViewHeader","ungroupedHeader","ungroupedEmptyMessage","isGroupEmpty","viewMode","ungrouped","GroupView","onToggleCollapse","mouseEvent","menuManager","isWindowsOS","isCollapsed","initiallyCollapsed","customCollapseGroupWithModifierKey","optionKey","expandNonMeaningfulChildren","setGroupCollapsed","GroupUtils","shouldCollapse","onAddClick","addButtonAction","handleGroupHeaderClick","enableMultiSelect","getState","isOutsideSelection","groupSelectionState","descenders","getGroups","groupsInViewOrder","firstGroupSelected","getFirst","getLast","elemToSelect","handleContextMenu","stopRename","actions","getContextMenu","handleDragStart","dragEvent","isDraggable","effectAllowed","useCustomGhostImage","DragUtils","setDragImage","dragManager","ghostContainer","dragClone","emptyMessage","handleDragEnd","createSubgroupFromEmpty","groupActions","createSubgroup","isGroupCollapsed","isSelected","isHighestSelected","addAssetsButton","isAddButtonActive","addButtonTooltip","padding","marginRight","groupHeader","hasGroups","areSomeElementsUngrouped","emptyGroupMessage","hideDefaultTextInEmptyGroup","isLibraryWritable","isHighlighted","renamingItem","activeDropTarget","draggingOverGroup","isValidDropTarget","showSeparatorAbove","showSeparatorBelow","containerClasses","headerClasses","hideHeader","draggable","onDragStart","onDragEnd","displayAddButton","DropZoneView","BaseDropTarget","TargetMap","_targets","minSection","maxSection","dragData","targets","mainDropTarget","ARROW_UP","ARROW_DOWN","GroupPathViewAutocomplete","onClose","handleBlur","registerInputEl","inputEl","handleKeyDown","handleInputChange","registerOverlay","unregisterInputEl","dropdownEl","setParentElement","dropdownParentEl","handleEnter","commitEdit","getNewSelectedIndex","keyboardEventKey","isFirstItem","selectedIndex","isLastItem","menuItems","handleArrowTravel","setSelection","_lockedPath","autocompletePath","updateEntry","headIndex","resetInputCursor","handleClickOnResult","acceptAutocomplete","handleReturnFocus","setDropdownRef","disposeResetSelection","autocompleteResults","hideOverlay","getParentElement","_selection","query","hidePathHead","isGroup","isNewGroup","matchedPath","getNewGroupEntry","getAutocompleteResultsForPath","maxDepth","livePath","addEntry","setSelectionRange","getPathLabel","truncatedPath","truncatePath","getAllAncestors","createPathNames","onMouseOver","BaseDropdown","disableUpperCaseTitle","BaseContentView","_getCellItemKey","_getCellKey","getKeyForObject","_cellRenderer","additionalStyles","gridSizeType","itemView","ITEM_VIEWS","_cellSizeAndPositionGetter","_sectionItems","_setCollection","collection","_collection","clearAllSelections","handleDragEnter","handleDragOver","isElementData","BaseElementModel","viewByState","dropEffect","validDropTargets","dropTargets","_bounds","libraryContents","draggedY","draggedX","_onDragOver","handleDrop","dropEvent","setSelectedSection","binarySearch","binarySearchResult","setCurrentSection","_debouncedSetSelectedSection","debounce","handleScroll","scrollEvent","findNextElementToNavigate","isShiftDown","isFocusKeyDown","elementArr","elementsInViewOrder","getElementsInViewOrder","pivotElementID","pivotIndex","curRowIndex","isHandled","isFocusKey","beforeElement","afterElement","nextElementIndex","reorderElements","groupArr","currentGroupIndex","currentSection","setContentsRef","showPanelTeamLibraryOneUpOnboarding","_loadingReaction","_showLoadingToast","toggleLoadingToast","_syncErrorReaction","_showSyncErrorToast","toggleSyncErrorToast","areElementsLoaded","errorType","currentGroup","_clearDropTargets","itemInjector","sectionItems","_scrollToCell","offsetTop","_collectionStyle","outline","scrollBehavior","_getScrollToCellAndClearPending","forceClose","referenceId","toastManager","openToast","closable","closeToast","renderVirtualizer","onDragEnter","onDragOver","View","showDetails","timeHeader","removedElementsMessage","documentAssetsOnboarding","ungroupedSeparator","searchResultHeader","SearchResultHeader","numResults","searchOptionsMessage","SearchOptionsMessage","loadSpinner","SpectrumCircleLoader","indeterminate","dropZone","pathViewAutocomplete","spacer","brandKitView","getBrandKitView","GroupDropTarget","beforeGroup","_dropTarget","afterGroup","isReorder","isSelfDrop","isParentDrop","isChildDrop","isGroupDescendantOfParent","groupTarget","areValidDescendants","reorderGroup","copyOrMoveGroup","shouldShowDocumentAssetsOnboarding","isEmptyLibrary","appState","addDropTarget","dropTarget","getLayoutDimensions","availableWidth","dynamicLayoutRules","gridHorizontalPadding","horizontalSpacing","gridVerticalPadding","verticalSpacing","gridType","gridSizeInfo","minimumBreakpoint","breakpointSize","stepsAway","getColumns","getNumColumns","cellWidth","cellHeight","getHeight","pushDocumentAssetsOnboarding","getGroupsTree","groups","pathViewMaxDepth","sortBy","getTree","branches","fromEntries","getDocumentSearchResultsTree","getLibraryCustomGroupsTree","addElementDropTarget","dropTargetData","ElementDropTarget","getSubgroupIndent","levels","branch","getGroupedSectionsLevels","getLastSectionHeight","headerHeight","getViewByGroupItems","groupEmptyHeight","GROUP_EMPTY_HEIGHT","groupContainerBottomPadding","leftPadding","paddingBetweenGroups","reorderIndicatorHeight","headerMargin","pathView","sortByOrder","getGroupedSections","isFiltering","scrollBarWidth","shouldRenderItem","requestedItems","pushGroupSection","initialX","isEmpty","indent","emptyUngroupedSection","hideUngroupedTitle","hideUngroupedSection","indentedEmptyGroupHeight","emptySectionHeight","groupSeparationPadding","isPathViewDragSpawn","isHoldingDragOverGroup","allowReorder","hideWhenEmpty","isMeaningfulGroupBranch","collapsedAncestorBranch","getClosestCollapsedAncestor","parentSections","_y","groupSeparatorHeight","groupItem","groupData","isPathView","groupX","groupY","groupWidth","ELEMENT_Z_INDEX","addGroupItem","higherSibling","parentBranch","childBranch","findHigherSibling","collapsedHeight","elementLeftPadding","rightPadding","hasLargeItems","hasMediumItems","hasSmallItems","hasWideItems","gridSize","getGroupGridSize","dropTargetX","isRowEnd","dropTargetWidth","lastX","precedesGroup","listStyle","ungroupedHeight","getScrollTopPadding","searchResultHeaderHeight","hasDisplayedSection","searchOptionsMessageHeight","ungroupedEmpty","isEmptyUngroupedHidden","GroupContentView","injectItems","baseContentView","MobxPropTypes","DefaultBaseContentView","getViewByTypeItems","sortType","isWritable","showCreateCardAndEmptySection","FileUtils","_isSectionTypeUsable","contentSections","showEmptySection","nameLocalizationKey","typeHeaderIndex","openPicker","libFilter","isBrandLibrary","headerData","showCreateCard","createItemWidth","shouldShowBrandKitView","BRAND_KIT_VIEW_HEIGHT","TypeContentView","Library","DocumentAssetsContainer","DocumentElement","LibraryContentsView","shouldRenderGroupView","ContentView","LibraryDropTarget","isDraggedOver","_onDragLeave","_onDragEnter","getDraggingData","_onDrop","getData","files","isLayerDragData","assetList","createElementFromDocument","_showElementAddedToast","parsedPayload","libraryId","elementIds","isMove","subtype","copyOrMoveElements","addElementsFromFileList","messageString","libraryName","onDragLeave","EditableLibraryName","EditableName","allowBlankName","allowLongDoubleClick","inputClassName","onEditFinish","onOverflowChange","isReadOnly","isLibraryRenameable","isEditDisabled","LibraryListItem","finishRename","renameTrigger","getClosestFocusedAncestor","searchText","getSearchText","isSearchMode","selectedLibrary","sectionLibrary","libraryType","roles","libraryOrder","librariesInViewOrder","openLibraryPayload","mapOwnershipType","ownership","getSearchId","isRenamingMode","allowNavigation","selectType","setSearchType","handleOverflowChange","hasOverflow","hasNameTooltip","disableContextMenu","excludedActions","libraryActions","getLibraryActions","isRecent","_recentLibrary","gatedUpdates","gatedUpdatesBadge","countLabel","folder","platformFolders","parentDirectoryId","disableEditableName","linkedLibraryIcon","documentId","shareIcon","LibraryUtils","invalidRename","renameStatus","shareLabel","shareTooltip","shareStatus","sharingIconOnly","isLibraryRecentlyActive","createdDate","contextMenuButton","onKeyPress","showContextMenuButton","showCreatedDate","EmptyLibraryView","addDocContentOperation","containerKey","documentType","instructionContent","accessType","instructionMessage","howToUseInBrowser","openHelpURL","emptyIconName","emptyIcon","headerContentWriteAccess","headerContent","learnMoreButton","addDocContentButton","buttonToolTip","buttonName","openSourceFilelink","openSourceFileButton","openSourceFile","isDeletedFromServer","LibraryDragLayer","_dragTargets","mutationsList","removedNodes","removedNode","hasNativeFileTypes","_doFilesDragEnter","_doLayersDragEnter","debugLog","resetMode","_setDropData","_showLibraryFullError","showReadOnlyAlert","dropData","isValid","setDropData","linked","valid","getNamesFromDropData","handleDragLeave","_dropData","setDragLayerRef","dragLayerNode","EnvironmentMutationObserver","disconnect","layersNode","dropArea","showDropMessage","hasDropTargets","dragLayer","panelHeaderHeight","NoRelinkResult","LibraryView","getNormalModeView","getLibraryContentsView","getBrandKitModeView","disposer","searchResults","librariesSearchState","filterCount","clearUnusedTypeOptions","relinkResults","elementTypeFilter","AutoSizerComponent","LibraryContentsViewComponent","shouldDoSearch","isSearchTextEmpty","deletedFromServer","sharedOrDeleted","collaboration","deleteLibrary","contents","isRemovedElementsMode","removedElements","searchState","isLoading","getSearchType","NoSearchResult","filteredGroups","searchResultsGroups","filteredElements","hasElements","isRelinkLayerMode","noEmptyState","EmptyLibraryComponent","contentsHeader","isDefaultMode","AdditionalLibraryHeaderView","MenuItems","iconSize","_getDataTestId","_getIcon","iconClasses","destructive","menuData","actionKey","divider","hideDividers","isTitle","enableMenu","MenuView","onClickBack","activeSubMenu","_getMenuIndex","menuItem","menuId","_getItemIcon","hideIcon","_getMenuItem","itemClasses","labelClasses","onClickMenuItem","translationData","setScrollableElement","_scrollableElement","onMenuWheel","isAtTop","isAtBottom","headerLabel","mainMenuContainerHeight","menuContainerStyle","menuItemHeight","preserveMainMenuHeightForSubMenus","menuTop","footerMenu","minMenuHeight","minMenuItemsVisible","maxMenuHeight","maxMenuItemsVisible","MAX_NUMBER_DIVIDERS","canShowOutsidePanel","containerHeight","minHeight","onWheel","MosaicElementView","getEmptyElementView","elementId","ColorElementView","disableInteraction","ColorThemeElementView","isMosaicView","GradientElementView","usesTextStyleElementView","TextStyleElementView","mosaicTileSize","Thumbnail","RENDITION_POSITIONING_CLASSES","MosaicView","getMosaicTile","tileClasses","getFullSizeMosaicTile","mosaicTiles","renditionGrid","main","tiles","reconnectToProcess","libraryProcessManager","showAddLibraryDialog","openDialog","requestSync","sync","enableSyncing","openNetworkErrorURL","LinkUtils","ERROR_BUTTONS","excludeHostnameOSX","excludeHostnameWin","excludeHostnameWin10","verifyDnsSettings","verifySocketConnection","syncDisabled","iconWrapper","iconString","isDownloadingLibraries","getNewLibrarySyncProgress","retryMessage","ErrorUtils","retryDuration","syncingProgressBar","Progress","ProgressBar","progress","syncProgress","showMetaData","serviceError","noService","updateServer","updateClient","newLibraryButton","retrySyncButton","areLibrariesLoaded","clearFilters","clearDocumentFilters","isStockSearchMode","links","hidePromptText","SearchSourceDropdown","searchType","onClickLabel","dialogName","closeDialog","currentSearchType","getSearchTypes","isDisabledStockType","isDisabledAllLibrariesType","disableCCLibraries","labelIcon","currentLabel","dropdownOptions","SearchBar","onClickSearch","hasRecentSearches","onClickCancel","searchInputVisible","onFocus","isFocused","onKeydown","clearFindSimilarSearchMode","currentProductConfig","truncateString","reportSearchSDMEvents","suggestionList","getRecentSearches","personalSearchPayload","viewSearchResultPayload","_setSearchInput","searchInput","clickSearchToStart","classicSearchBar","inputClasses","wrapperClasses","showSourceSelectionButton","cancelButton","customProductSearchPlaceholderOptions","customProductSearchPlaceholder","searchIcon","showInputBox","placeholderText","spellCheck","sourceSelectionButton","noLibraries","searchableLibraries","showCancel","disableAllLibrariesSearch","isRootView","SearchFiltersDropdown","onFilterToggle","filterType","setSearchOption","onFilterDelete","elementsLinkedinDoc","documentAssetsContainer","linkReference","documentAssetGroups","filterTypeOptions","onClearFilters","hasSelectedFilters","searchFilters","isLibrariesSearchMode","filterLibrariesOptions","formatFilterOption","isSearchOptionEnabled","onClickDeleteFn","removable","onClickDelete","clearFiltersLabel","typeFilters","libraryFilters","searchResultsCount","iconSelected","iconNotSelected","footer","isOnline","launchSearchStockURL","ShareButton","onClickShare","invite","NavigationHeaderRow","menuOverlayState","onClickBackButton","onCloseMenu","modeParams","previousMode","setStateBeforeOneUpMode","onClickMenu","stopEditDescription","onOpenLibrariesManager","shouldShowBackButton","backButton","shareButton","isLibraryInvitable","isSharingEnabled","librariesManagerButton","hasNotification","librariesInitError","isRestrictedAccount","hasUpdates","publishState","isPendingUpdate","elementContextMenuButton","subElement","getMenuItems","menu","navigationLabelText","getTeamLibraryToolTipData","platformFolder","getTeamLibraryPlatformFolder","ownerName","navigationLabel","getShortLibrarySharingString","isTeamLibrary","backButtonWrapperClasses","onContextMenu","handleContextMenuLibraryClick","libraryContextMenuButton","HeaderView","onGridButtonClick","_setViewState","handleViewByGroupModeToggle","setViewByGroupMode","onCreateLibraryClick","setHeaderRef","headerRef","setSearchRef","searchRef","onClickFlyoutMenu","viewTypeDisabled","listGridDisabled","setHeaderView","getSearchBarBottom","isLibrariesFilterEnabled","canShowLibrariesFilterDropdown","canShowSearchFiltersDropdown","setViewState","treePathToggleButton","treePathState","treePathTooltip","viewToggleButton","listGridTooltip","sortDropdownButton","SortDropdown","sortOrderControl","hideGroupBy","filterDropdown","LibraryListFilterButton","viewModeControls","sortOnRightInRootView","relinkHeader","missing","removedElementsHeader","hideViewModeHeader","isPlainRootView","libraryModeHeader","variableRow","searchBar","createLibraryButton","documentAssets","isDocumentAssetsRootView","showLibraryListItemContextMenuButton","shouldDisplaySearchBar","isExpandedView","libraryNameSearch","hideAllLibrariesSearch","RelinkFooterView","onClickRelink","_sendElementChosen","productInterface","relinkButton","actionMessage","RemovedElementsFooterView","onClickRestore","deleteButton","restoreButton","UpdateAllFooterView","updateAll","updateLinkedAssets","updateLabel","numberGatedUpdates","BaseFooterMenuView","onOpen","onClickButton","menuContents","listItems","minWidth","menuMinWidth","hasMenuContents","AddAssetView","layerSelectionManager","inNewUserWorkflow","getAddMenuItems","AddLibraryMenuView","createNewLibrary","onAddDocContentClick","fromDocument","CaptureUtils","elementAddCallback","isImportExportInProgress","DocumentLibraryMenuView","DeleteButton","_deleteElementsAndReport","_deleteGroupAndReport","disabledViews","disabledSelections","deleteElements","deleteGroups","deleteContents","LockedPopup","disposeReaction","LockedButton","closePopup","showMenu","popup","iconView","FooterView","readOnlyIcon","createGroupButton","CreateGroupButton","addButtons","isLocked","openLibraryManagerButton","footerView","SyncButton","newLinkedAssetsExist","hideSyncStateFooter","StockSearchTips","_getTipsHeader","_getTips","measureTextHeight","SEARCH_MORE_BUTTON_TEXT_CLASS","SearchFooter","handleSearchOnWebClick","stockSearchState","searchOnWeb","findSimilarData","canOpenSimilarOnWeb","_getSearchMoreButton","_getSearchMoreButtonText","_getSearchTips","_canSearchMoreOnWeb","_canShowTips","BUTTON_MARGIN","measure","StockSearchState","Loading","spinnerMessage","layoutSearchResults","leftOffset","topOffset","assetLayoutData","rowAssets","rowWidth","asset","assetRowWidth","thumbnail_width","thumbnail_height","layoutRow","rowHeight","layoutData","isGoodRowLayout","contentWidth","rowAsset","isVerticalLayout","StockSearchResults","layout","getItemView","usableWidth","loading","noResults","searchResultLayout","searchResultIndex","lastSearchResult","lastLayout","footerMetrics","SEARCH_MORE_BUTTON_MARGIN","media_type_id","StockSearchResultComponent","StockSearchView","_getRenderComponent","hasSearchFailed","isOnLine","_getSearchResults","PanelRootView","_navigateToLibrary","getLibraryItem","addElementsFromDropEvent","activeLibraries","getFilteredLibraries","brandLibraries","brandsEnabled","traditionalLibraries","recentLibrariesView","recentLibraries","brandLibrariesView","traditionalLibrariesView","libraryList","librariesSections","showLibrariesHeader","discoverLibrariesMessage","projectsBanner","hasDisplayableLibraries","hasProjectsBanner","projects","shouldShowProjectsBannerOnboarding","ProjectsBanner","rootView","emptyLibraryNameSearchView","libraryNameSearchResultsHeader","isLibraryNameSearchMode","EditableOneUpName","textClassName","disableRename","isShowingEditIcon","OneUpView","detailView","ElementView","elementNameAndType","infoPanel","EditableDescription","LANGUAGE_MAP","PanelView","_onOnline","_onOffline","reactSpectrumTheme","themeManager","appCode","legacySpectrumEnabled","windows","getISOLanguageCode","elementCount","eventProperties","isDocumentLibrary","panelView","CustomPanelView","ToastContainerView","panel","topLevelHeader","CustomHeaderView","onDragOverCapture","onDropCapture","flexDirection","getPaywallBanner","DebugHUD","progressBar","ProjectGradient","project","gradientData","getCSSForGradient","emojiRegEx","gradientLetterOrEmoji","projectName","potentialEmoji","shouldShowEmoji","Team","handleClose","hideBanner","markOnboardingViewed","isExpandedBrandsView","onLearnClick","openBusinessStorageURL","onProjectsClick","useUppercase","toast","ManagerReferenceNodeContext","ManagerReferenceNodeSetterContext","_React$useState","referenceNode","setReferenceNode","hasUnmounted","handleSetReferenceNode","unwrapArray","safeInvoke","setRef","useIsomorphicLayoutEffect","includeScale","getWindow","isHTMLElement","ShadowRoot","getNodeName","getDocumentElement","getWindowScrollBarX","isScrollParent","_getComputedStyle","getCompositeRect","elementOrVirtualElement","isFixed","isOffsetParentAnElement","offsetParentIsScaled","isElementScaled","scroll","offsets","getNodeScroll","getLayoutRect","clientRect","offsetLeft","getParentNode","assignedSlot","getScrollParent","listScrollParents","_element$ownerDocumen","scrollParent","visualViewport","updatedList","isTableElement","getTrueOffsetParent","getOffsetParent","isFirefox","currentNode","contain","getContainingBlock","auto","basePlacements","viewport","popper","variationPlacements","modifierPhases","visited","requires","requiresIfExists","depModifier","DEFAULT_OPTIONS","strategy","areValidElements","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","reference","orderedModifiers","modifiersData","effectCleanupFns","isDestroyed","setOptions","setOptionsAction","cleanupModifierEffects","scrollParents","contextElement","phase","orderModifiers","mergeByName","_ref3$options","cleanupFn","noopFn","_state$elements","rects","_state$orderedModifie","_state$orderedModifie2","onFirstUpdate","_options$scroll","_options$resize","getBasePlacement","getVariation","getMainAxisFromPlacement","computeOffsets","basePlacement","variation","commonX","commonY","mainAxis","unsetSides","mapToStyles","_Object$assign2","popperRect","gpuAcceleration","adaptive","roundOffsets","roundOffsetsByDPR","_ref3$x","_ref3$y","hasX","hasY","sideX","sideY","heightProp","widthProp","_Object$assign","commonStyles","_options$offset","invertDistance","skidding","distanceAndSkiddingToXY","_data$state$placement","popperOffsets","getOppositePlacement","matched","getOppositeVariationPlacement","rootNode","isSameNode","rectToClientRect","getClientRectFromMixedType","clippingParent","getViewportRect","getInnerBoundingClientRect","winScroll","getDocumentRect","getClippingRect","boundary","rootBoundary","mainClippingParents","clippingParents","clipperElement","getClippingParents","firstClippingParent","clippingRect","accRect","mergePaddingObject","paddingObject","expandToHashMap","hashMap","detectOverflow","_options$placement","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","axis","within","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","referenceRect","tetherOffsetValue","mainSide","altSide","additive","minLen","maxLen","arrowElement","arrow","arrowRect","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","arrowOffsetParent","clientOffset","offsetModifierValue","tetherMin","tetherMax","preventedOffset","_mainSide","_altSide","_min","_max","_preventedOffset","_state$modifiersData$","toPaddingObject","minProp","maxProp","endDiff","startDiff","clientSize","centerToReference","axisProp","centerOffset","_options$element","querySelector","getSideOffsets","preventedOffsets","isAnySideFullyClipped","side","eventListeners","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","initialStyles","_skip","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","flipVariations","allowedAutoPlacements","preferredPlacement","oppositePlacement","getExpandedFallbackPlacements","placements","_options$allowedAutoP","allowedPlacements","overflows","computeAutoPlacement","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","_loop","fittingPlacement","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","EMPTY_MODIFIERS","NOOP","NOOP_PROMISE","Popper","_ref$placement","_ref$strategy","_ref$modifiers","referenceElement","innerRef","popperElement","setPopperElement","_React$useState2","setArrowElement","_usePopper","prevOptions","optionsWithDefaults","updateStateModifier","popperOptions","newOptions","popperInstanceRef","popperInstance","createPopper","usePopper","childrenProps","arrowProps","Reference","refHandler","RS2Tooltip","RS2OverlayTrigger","OverlayTrigger","placementMap","DEFAULT_TRIGGERS","delayShow","boundariesElement","childrenArray","modalTriggerRef","slotNames","resultArray","curTrigger","secondChild","TriggerComp","curSlot","TriggerTargetComp","delayed","PopperTooltip","portalNode","popperModifiers","ReactDOM","PortalContext","handleMouseOver","isTooltipActive","_tooltipDelayTimer","handleMouseOut","_visibleTimer","handleMouseDown","setTooltipActive","resetTooltip","contentText","getSpectrumTooltip","CustomTooltip","onMouseOut","handleOpenDashboardClick","apiVersion","panelVersion","versionManager","BaseDialog","onClickOK","onClickSecondary","onClickOutsideDialog","closeOnOutsideClick","_dialogElement","isEventWithin","desiredFn","setDialogElement","okButton","okButtonText","okButtonEnabled","treatment","cancelButtonText","secondaryButton","secondaryButtonText","secondaryButtonEnabled","_icons","showMosaic","showMosaicLibrary","mosaicContainer","windowClasses","titleClasses","banner","showFooter","cloud","CreateOrPublishLibraryDialog","onCreate","onPublish","documentActions","publish","createSection","getSection","getHeader","getBulletItems","getAction","disabledMessage","OFFLINE","QUOTA","EMPTY","MISSING_STORAGE","UPGRADE","disabledStatus","publishSection","canPublish","canUpgrade","uxpUseNative","tooltipRef","RelinkOrphanedDocumentAsset","setSelectedLibrary","additionalAvailable","getRelinkCandidatesInLibrary","setRelinkAdditional","_selectedLibrary","_relinkAdditional","onRelink","selectedRelinkCandidates","linksToCreate","relinkAdditional","onCancel","ownerType","classnames","resolvableLinks","getModifiedDateColumn","getBrokenLinksColumn","getRelinkableAssets","_relinkableAssetsMap","_relinkableLibrariesMap","relinkableLibraries","relinkCandidatesForAsset","localizedSorter","loadingSpinner","getNameColumn","getColumnHeader","getSharingColumn","wrapWithLibrariesListItemContainer","brokenLinksColumnHeader","relinkableLibrariesHeader","relinkableLibrariesPicker","relinkAdditionalMessage","additionalLinksCount","dialogData","messageLabel","ctaButton","RelinkDocumentLibraryDialog","handleCreateNew","onRelinkChoice","handlePublish","openRelinkOrphanDialog","relinkDocumentToOrphanedLibrary","relinkableLibrary","canRelinkOrphans","orphanedLibraries","showRelinkWarning","primaryLabel","primaryHandler","secondaryLabel","secondaryHandler","messageBullets","_getBullets","bullets","bullet","RelinkOrphanedDocumentLibraryDialog","showConfirmationDialog","relinkToOrphanLibrary","orphanedLibrariesPicker","ResolveBrokenLinksDialog","toggleShouldAcceptInvites","_shouldAcceptInvites","toggleFollowLibrary","_librariesToFollow","resolveSelectedLinks","selectedPendingFollowLibraries","brokenLinks","shouldAcceptInvites","pendingInviteAssets","resolveLinks","getSourceDocumentItem","documentName","canOpenSource","isMissingLegacyDocumentLink","getSourceItem","getSourceLibraryItem","canToggle","showSummaryView","isLibrarySelected","getLibraryInvitesItem","numInvites","invitationsData","numberResolutionStep","numStep","stepContent","localizedNumStep","shouldFetchInvitations","_isLoading","fetchLibraryInvitations","pendingFollowLibraries","_dispose","_dialogHasMissingLinks","fetchInvitations","isPendingInvite","isMissingLibrary","assetsContainer","isMissingLink","isDeprecatedLegacyDocumentLink","resolvableMissingLinks","librariesToFollow","selectedToFollow","operationCount","pendingInvites","sourceLibraries","isPendingFollow","cachedLinkedLibraryName","cachedLinkedLibraryId","deprecatedSourceDocuments","sourceDocuments","linkedDocumentName","getResolutionStep","getSourceHeading","legacyLinkInfo","openMigrateXDToCCLibrariesURL","pendingFollowInfo","pendingInviteInfo","suggestRequestInvite","suggestMakeLocal","missingElementSteps","steps","globalResolutionSteps","assetsMissingLinkedLibrary","missingLinks","offline","offlineTooltip","resolutionInfo","actionableLibraryLinks","ctaDisabled","ctaDisabledTooltip","openAskCollaboratorsForAccessURL","isMissingElement","cancelButtonLabel","secondaryButtonTooltip","okButtonTooltip","startEdit","charactersRemaining","getStringLength","startEditDescription","deleteDescription","handleInputKeyDown","keyEvent","finishEditing","onButtonPress","onButtonMouseDown","handleInput","descriptionInput","setInputRef","setTextRef","descriptionText","isEditingDescription","editDescriptionElement","editBadge","deleteBadge","splitDesc","cancelChanges","editTrigger","newDescription","subtypePrefix","descriptionButtons","nameNode","readOnly","_disposeOverflowReaction","nameText","refreshOverflow","getOverflow","onNameClick","startEditing","handleClickEdit","setRenameValue","nameInput","renameValue","isEditingName","isAutoNamed","onEditStart","startRename","isNameValid","showWarning","newName","onEditCancel","renameItem","tooltipErrorMessage","EditableElementName","editableNameContainerClasses","nameVisibility","PlaceButton","applyOperation","getClasses","ContentAuthenticityBadge","contentAuthenticityBadge","Badge","EditBadge","editOperation","onEditItem","LinkBadge","_getElementSourceGroup","linkedElement","_getElementSourceName","linkedLibrary","sourceName","isLegacyDocumentLink","previousTooltips","checkIfCanAddTeamLibrary","showPreview","_checkIfCanAddTeamLibrary","cachedLinkedLibraryAssetId","fetchTeamLibraryData","throttle","hidePreview","isNormalLinkState","isBrokenLegacyDocumentLink","canRelinkToDocument","relinkToDocument","canRelinkToLibrary","relinkAssetToLibrary","onRightClick","iconName","isSyncing","isRestricted","linkType","tooltipStrings","linkedAsset","dateString","isMissingLibraryLink","typeOfSource","formatGroupNameTooltip","linkBadge","isUnlinking","getIsUnlinkingAsset","isLinked","BaseElementView","handleLicense","_lastClickTime","navigateToElement","onClickSetSelection","selectedElements","draggedData","usedRepresentationForAnalytics","dragOutData","useUXPDragImage","representation","contentPath","getCachedContentPath","fileExtension","getRepresentationExtension","blankImage","elementNode","uxpSetDragImageAt","setElementDragData","countElement","displayCount","libraryFilter","showContextMenu","setMetadataRef","metadataRef","_registerElementNode","subSelected","focused","placeButton","applyOperations","placeButtonOp","operation","showPlaceButton","getElementDownloadStatus","isDownloadPending","hasFailed","purchaseButton","elementBadges","isFireflyElement","leftElementBadges","rightElementBadges","badge","classForElementTypeAndView","isUngroupedDropTargetActive","isGroupView","additionalClasses","isActiveDropTarget","isActiveEndDropTarget","showElementOrderIndicator","elementSortState","showElementContextMenuButton","getGroupMeta","additionalDetails","shouldExcludeRoot","excludeFromChildPaths","usedWidth","measureTextDimensions","hideExtension","basicInfo","groupInfo","allInfo","nameAndDescription","gridElementDetails","shouldRenderThumbnailAboveName","thumbnailContents","nameHeight","disableTooltip","stockId","getLegacyReference","elementView","thumbnailOnly","BasicThumbnailElementView","thumbnailType","convertSingleColor","getBackgroundColor","getPrimaryRepresentation","alpha","colorView","panelColorItemCSS","UXPColorProfiles","swatch","isInteractive","swatches","colorThemeData","useColor","operationToApply","background","ColorUtils","getColorSwatches","innerClasses","clickEvent","colorThemeContainerClasses","getCSSForGradientElement","customRenderer","gradientThumbnail","CustomRenderer","panelGradientItemCSS","gradient","gradientView","LicenseBadge","licenseBadge","StockElementView","renderProps","ThumbnailElementView","SyncFontBadge","runTypekitAction","typekitAction","typekitFont","upgrade","loadingBadge","SmallSpinner","missingFontBadge","activateBadge","badgeSize","adbeFont","postScriptName","getTypekitFontData","isFontSyncing","isMissingFont","isFontAvailable","isTypekitFont","fontId","fontActions","TextStyleElementViewImpl","colorStyle","TextStyleUtils","colorDataToHexString","requiresContrastingBackground","getColorSwatch","isFloating","colorSwatchOverlay","isWideElement","postScriptNameOrFamily","uselivePreview","useThumbnails","fallbackToLivePreview","_isMissingRendition","thumbnailManager","getThumbnail","detailsLine","syncFontBadge","getTextStyleView","previewText","isCentered","showDetailsLine","minSize","includeLetterSpacing","cssStyle","contrast","fontRenditionClasses","isFont","getLivePreviewText","isListOrThumbnailViewMode","getLivePreviewFontSize","textStyleGridView","textStyleListView","resizedWidth","thumbnail","thumbnailContainer","buttonClasses","FileAsset","StockDownloadOverlay","retryElementDownload","tooltipText","percentDownloaded","getClassNames","isGridView","_handleError","_hasFailed","_disposeReaction","_url","stockDownloadOverlay","isStockAsset","loadingView","ghostLoadingView","spinnerView","brokenThumbnailView","preferredBackup","thumbnailGraphic","showCheckeredBackground","elementBackgroundPattern","checkedBackgroundThumbnailView","isThumbnailTiled","tiledThumbnailView","backgroundImage","thumbnailView","isTextStyleElement","useFallbackOnly","ManagerSideNav","handleBrowseTeam","handleManage","handleNewLibraryClick","isPublished","getSideNavItems","manageNavItem","browseNavItem","SideNav","sideNavButton","Rule","DropdownButton","iconOnly","getNavigationItems","MenuItem","ManagerLibrariesList","contextMenu","alignRight","handleLibraryToggle","newToggleState","isLibraryActive","setLibraryActiveState","libraryItem","Switch","ManagerMonetization","upgradeSubscription","upgradeToPublishButton","DocumentLibraryView","publishedLibrary","publishedDocumentLibrary","syncError","writableFolders","canPromote","unpublish","share","promote","relinkOrphan","COEDITOR_PUBLISHING","MAX_ELEMENTS","isPublishing","isLibraryLoading","isDocumentSyncing","syncErrorStatus","EXCEEDS_QUOTA","isSharedUserLibrary","statusMessage","quotaURL","syncingStatus","labelId","loadingStatus","tooltipDisabled","pushLibraryButton","shareLibraryButton","actionsView","syncing","shouldHideMenu","unpublishRef","promoteRef","relinkRef","ManagerContent","handleMenuSelection","toggleValue","setLibrariesActiveState","handleSearchChange","managerSection","localeKey","localeParams","sectionStyle","Heading","showManagerOnboarding","showSearch","showUpgradeView","isUpgradeView","filteredLibraries","MoreVertical","showAllRef","hideAllRef","searchView","IllustratedMessage","illustration","documentLibraryView","allLibrariesView","upgradeView","searchResultsView","ManagerDialogContainerView","isTour","ManagerToastContainerView","toastData","timeToReadString","ManagerView","acceptsFirstPointer","disableEmptySubgroups","createGroupFromSet","hasSelection","buttonNode","showLabel","tooltipString","handleAddLibrary","ICON_STRINGS","ok","working","isMouseDown","shouldShowInfoViewOnMouseDown","isSyncDisabled","isOwnedQuotaError","isSharedQuotaError","quotaErrorLibraries","getOwnedQuotaErrorLibraries","getSharedQuotaErrorLibraries","disableSyncStatusText","syncingLibrariesProgress","syncingLibraries","summary","libraryProgress","truncatedName","messageContent","infoView","ignoreAllEvents","_controlled","onKeyNavOnDropDownItem","_getSiblingNodeForFocus","prevSibling","onClickDropDown","isNext","noDropdown","onItemKeyPress","onDropdownKeyPress","setWrappedLabelRef","wrappedLabelRef","_setParentElement","_parentElement","_setMenuAlignmentClass","getMenuAlignment","_setMenuElement","_menuElement","handleClickButton","checkMarkIcon","isSelectedIcon","iconData","iconClassName","menuListStyle","isStringLabel","wrapCustomLabel","dropdownDimensions","dropdownBottom","dropdownRight","leftAdjustment","currentLabelRef","dropdownClasses","locationBasedOnLabel","handleSortBySelection","option","setSortState","onSortChange","handleSortOrderToggle","setSortOrder","sortOrderDescending","handleViewBySelection","setViewByState","sortState","sortOptions","sortTooltip","alwaysShowSortIcon","sortControlLabel","groupByOptions","getViewByStateOptions","sortByOptions","viewBySection","sortSection","TRAILING_ENTRY","ESC","ENTER","ARROW_LEFT","ARROW_RIGHT","changedIndex","isRename","handleCommitEdit","stopEdit","handleInputClick","setInputElement","hideHead","placeCursorAt","selectHead","headValue","setSelectionRangeUXP","headStart","headEnd","handleRenameCommit","isInvalidName","PathViewState","LegacyBrowserResizeObserver","_cb","setPathRef","pathRef","handleResize","extraWidthSubtraction","_maxWidth","ResizeObserver","resizeObserver","SpectrumCheckbox","checkboxClasses","Wait","fillSubmask1Style","fillSubmask2Style","uxpProgressBar","StockSearchResultBadge","_getLicensedBadge","is_licensed","_getLicenseButton","licenseClickHandler","onLicenseClick","licenseClasses","_getSaveCompButton","saveCompClickHandler","onSaveCompClick","compClasses","badgeLayoutClass","getStockAssetDestinationLibraries","lib","StockSearchResult","_setImageRef","imageElement","_handleSaveCompClick","saveCompToLibrary","error_desc","_handleLicenseClick","licenseAssetAndSaveToLibrary","_handleContextMenu","librariesGroup","toLibraryItems","launchStockAssetURL","pushMenuGroup","assetOperationsGroup","_handleDragStart","dragStartEvent","_handleDragEnd","dragEndEvent","_handleDoubleClick","thumbnail_url","getTooltip","PortalProvider","borderRadius","getItemRect","getItemType","licensed","isLicensed","BaseComponent","UXPBaseContentView","_setVirtualScroller","_uxpVirtualScroller","_autoScrolling","AUTO_SCROLL_AREA","AUTO_SCROLL_OFFSET","autoScroll","scrollBy","scrollToItemKey","itemType","itemRect","scrollToItem","UXPLibraryContentsView","UXPTooltip","maxLineLength","BaseSearchState","_getSearchFilters","optionsMap","optionName","_searchTypeFilters","_searchTypeOptions","_searchLibrariesFilters","_searchLibrariesOptions","_searchDocumentGroupFilters","_searchDocumentGroupOptions","_searchDocumentLinkFilters","_searchDocumentLinkOptions","filterables","INITIAL_STATE","ErrorBoundary","showReportDialog","errorBoundaryError","seenErrors","recurse","setCause","beforeCapture","react","onMount","onUnmount","onReset","resetError","RS2Provider","TAG_NAME","Theme","darkSpectrumThemeLoader","darkestSpectrumThemeLoader","lightSpectrumThemeLoader","lightestSpectrumThemeLoader","darkExpressThemeLoader","darkestExpressThemeLoader","lightExpressThemeLoader","lightestExpressThemeLoader","largeSpectrumScaleLoader","mediumSpectrumScaleLoader","largeExpressScaleLoader","mediumExpressScaleLoader","loadScale","system","loadColor","_register","theme","typekitId","promises","configureTypekit","doesSWCNeedLoaded","loadSwcIfNeeded","ProviderWrapper","getProviderConfig","ThemeContext","LibrariesProvider","CCDEmptyLibraryView","_contentWidth","contentRef","openAddElementsDialog","addElementsFromFileDialog","libraryContent","libraryKey","libraryDetail","emptyStateContents","setContentRef","addElementsButton","emptyLibCards","numCardsFit","instruction","testID","addGroupButton","isHidden","card","addOpenFileButton","editStateTraditionalLibrary","writableContent","isLinkedLibrary","readOnlyContent","defaultSizes","MIN_WIDTH","HORIZONTAL_SPACING","VERTICAL_SPACING","MIN_NUM_COLUMNS","HEIGHT_OFFSET","ExpandedGrid","sizeOverrides","mobileSizeOverrides","sizes","mobileSizes","sizeOverride","mobileSizeOverride","_getCurrentSizes","getDynamicLayoutMinimumBreakpoint","getDynamicLayoutBreakpointWidth","getDynamicLayoutRules","LARGE_SIZES","MEDIUM_SIZES","SMALL_SIZES","_getDynamicLayoutRule","getAppConfiguration","fullName","translationSuffix","ghostLoading","lastSectionFullHeight","disabledCollapseSectionIds","enableUnusableElements","groupScrollAlignment","windowGutterPaddingWidth","disableGroupMargin","gridLeftPadding","mediumIconHeight","smallIconHeight","extraSmallIconHeight","emptyGroupHeight","disableGroupSeparator","emptyGroupBottomPadding","sectionNavIndent","emptyUngroupedCustomMessage","viewBySelectCustomOptionGroup","viewBySelectCustomOptionType","customPanelTitle","invalidGroupNameSlashMessage","emptyLibraryCustomComponent","enableUngroupedDropOverlay","customDragCardHeight","customDragCardWidth","spectrumFailedThumbnail","uniformElementSize","disablePaddingWithinGridGroup","evenlySpacedSubgroups","disableGroupViewRename","disableGroupViewDragging","disableGroupViewHeaderClick","disableFindSimilar","disableDefaultEditError","disableOneUpMode","enableUppercaseGridDetails","enableReplaceGraphic","maintainCurrentSectionOnResize","useTextStyleThumbnails","disableContentViewTooltips","hideExtraBottomSpace","hideFirstSectionHeader","disableRestorePreviousCurrentLibrary","defaultViewByState","defaultViewByGroupMode","teamOnboardingRightSpacing","teamOnboardingTopSpacing","showCCDTeamsOnboarding","disableCCDTeamsOneUpOnboarding","noFlyoutMenu","showOpenInAppMenu","disableGroupContextMenuInView","disableNestedGroupIndent","disableEditPathOperation","disableDeleteEmptyAncestors","editWidthSubtraction","mosaicCardVariant","mosaicCellPaddingBottom","themes","translationOverrides","defaultTheme","elementTypes","DefaultConfigs","_dynamicGrid","handleViewPathView","openPathViewHelpURL","_handleToastClick","onboardingStore","tour","componentId","tourId","viewType","disableProgress","onTourEnd","tourContent","stepNumber","domTarget","confirmLabel","cancelLabel","mandatory","confirmAnalyticsId","cancelAnalyticsId","register","showCustomGroupViewPopover","AEFTColorElementConfig","ColorElementConfig","_setColor","after","representations","rep","reportApplyMetric","getApplyOperations","layerInfo","selectionExists","displayInMenu","aeLog","formattedString","submatch","addOrUpdateElementInProject","addingElement","updateAssetReq","adobeStockId","assetRep","contentLength","contentType","videoData","framerate","getContentURL","trackingdata","userId","imsInterface","accessToken","imsToken","getContentPath","filePath","AEFTImageElementConfig","ImageElementConfig","AEFTLookElementConfig","LookElementConfig","_applyLook","findUsableRepresentation","AEFTVideoElementConfig","VideoElementConfig","AEFTMaterialElementConfig","MaterialElementConfig","AEFTThreeDElementConfig","ThreeDElementConfig","AEFTLightElementConfig","LightElementConfig","rgbColorFromColor","getScaleColor","cssThemeBGScale","darker","dark_v7","dark","light","lighter","lookupStepName","rgb","dragDropSource","defaultStockSearchOptions","collapsedTypes","tooltipState","startEventListener","reportEvent","getUserData","strReturnValue","hideAddControls","onFootageNeedsUpdate","shouldAddNewItem","onUploadCapsule","UPLOADRESPONSE","responseEvent","capsuleData","primaryPath","secondaryPath","thumbnailPath","sendProgress","currentCount","totalCount","progressEvent","total","representationPromise","uploadCount","videoPreviewPath","createElementExtraMetrics","capsuleName","createRepresentation","setContentFromPath","handleSuccess","cleanupPromises","setThumbnailCache","endOperation","handleError","stopEventListener","CEPFontElementConfig","FontElementConfig","_setStyleInfo","_setFont","multiOpData","isFirstElement","isLastElement","checkTypekitFont","styleName","_getStyleData","DRWVColorElementConfig","_copyColorValue","relationship","rgbRep","hexColorValue","isLeftClick","DRWVImageElementConfig","_addImageToDocument","onlyDownload","mimeTypeInfo","isPSD","app","getElementModifiedTime","getThumbnailPath","reportApplyFullSizeMetric","getCachedThumbnailPath","isDocumentOpen","pendingInfoRequest","updateLibrariesInfo","libraryNames","sendDataToApp","currentLibraryData","currentLibraryItems","colors","thumbnails","thumbnailError","currentLibraryItemList","updateApp","currentLib","libElemArr","rgbValue","hexValue","elemCount","currentElementRep","elementRef","primaryType","elementName","adobeStockID","isUnlicensedStockAsset","colorAliasName","colorThemeColor","parseAndAddLibrary","pushLibrariesInfo","safeGetStringProperty","libraryID","opType","onLayerUpdateEvent","onAddAssetToLibrary","onDocumentChange","documentStatus","editElement","lockId","renditionPath","assetClosed","assetSaveInProgress","tempFileManager","listenerId","documentWatchManager","lockManager","checkFileSize","isDeleted","isDeletedLocally","isRecovered","beginOperation","removeAllRepresentations","assetMimeType","newRepresentation","setThumbnail","operationsFinished","doneCbk","recoveryLibraryName","originalLibraryName","sendElementUpdated","requestRef","modifiedTime","creationTime","fillUpdatePromises","updatePromises","fileData","file","fileMimeType","updatePromise","deleteLocalFiles","filesMap","checkEventData","onUpdateElement","checkLibraryWritable","rendition","animationMIMEType","symbolMIMEType","onEditElement","primaryRep","FLPRAnimationElementConfig","AnimationElementConfig","_addAnimationToDocument","getValues","allowMultiple","_addDocContent","_confirmAddOperation","appMetadata","layerIds","dragAssetId","addAnimationElement","layerName","_addAsset","generatePreview","addFilePromises","docSaved","getAddOperations","enableDocumentUpload","enableAnimationUpload","dropSupport","defaultEditOperation","getDragData","usableRepresentation","metaData","FLPRColorElementConfig","FLPRBrushElementConfig","BrushElementConfig","_addBrushToDocument","brushTypes","isRendition","isBrush","isRepresentationCompatible","_addBrush","addBrushElement","primary","enableBrushUpload","iconToolTip","FLPRImageElementConfig","addOperationInstantiated","addOperationComplete","extensionId","APPLY_CONFIG","_addObjectToDocument","ANALYTICS_OP_TYPE","ANALYTICS_ELEMENT_TYPE","forceInPlaceGun","noDocState","ALLOW_PNG_FALLBACK","isSnippetType","IDSNAnimationElementConfig","IDSNColorElementConfig","textSelectionExists","insertionPointExists","colorWasChanged","parsedColor","IDSNColorThemeElementConfig","ColorThemeElementConfig","_createColorGroup","themeData","colorThemeOps","IDSNImageElementConfig","_getLockId","_onDocumentClose","editData","isSaveInProgress","tempPath","docPath","_onDocumentSave","pdfPath","pngPath","stockData","pdfMimeType","pdfRepresentation","isEditable","STYLE_REPRESENTATION_JSON_TYPE","STYLE_NAMESPACE","STYLE_DATA_KEY","ILSTParagraphStyleElementConfig","ParagraphStyleElementConfig","_useParaStyle","idmsPath","tempStyleData","_setParaStyle","_addTextStyle","IDSNTemplateElementConfig","TemplateElementConfig","_openDocumentFromTemplate","isStockMissing","templateTypes","isTemplate","IDSNTextElementConfig","TextElementConfig","_useText","withStyles","inline","textId","styleObj","_setText","_setTextUnLinked","_setPlainText","_setTextInline","canBringTextInline","getTextPromise","textDataObj","textInfo","STYLE_REPRESENTATION_SNIPPET_TYPE","IDSNTextStyleElementConfig","TextStyleElementConfig","_useTextStyle","TypekitUtils","_setTextStyle","_addTextStyleElement","copyTempFileIfNecessary","previewPath","primaryRepresentation","styleInfo","newRendition","isAppliedCharStyleSupported","offsetSelectMenu","stateMethod","usesEscapedFilePathsInEvents","isCaptureEnabled","captureModules","includeGuidInTempFileName","tempFolder","majorVersion","copyFileSync","resetPanelView","resetPanelState","elementCreationContext","useMouseEventToDetectDrop","setCreateElementContext","exportContext","resetCreateElementContext","creationContext","onPreferencesUpdateEvent","ApplicationFontManager","onFontListUpdateEvent","invalidateFontList","onDocumentActivateEvent","onDocumentDeactivateEvent","onNewAssetToMigrateEvent","newLibrary","assetName","onCreateNewLibraryEvent","acquireLibrary","createNew","onCreateNewColorThemeEvent","colorThemeName","themeName","baseSwatchIndex","baseColorIndex","mood","colorObj","onCreateNewColorsEvent","colorList","colorName","createColorElement","onCreateNewTypeStylesEvent","isCharStyle","STYLE_ELEMENT_TYPE","documentID","styleUIDList","styleID","addRenditionPromise","onCreateNewParaStylesEvent","onCreateNewCharStylesEvent","onWorkspaceChangeEvent","switchLibrary","onStockOpenEvent","onStockOpenTemplateEvent","onCreateSnippetForElement","sendSnippetCreatedEvent","guid","stripStyles","dropHandler","customDropMessage","isWindows","dropTextMessage","customOverlayMessage","allowCmdDrag","PIPGlobals","getLibraryFromEventData","logPIPEvent","subcategory","eventname","ILST_NAMESPACE","ILST_DATA_KEY","getIllustratorData","setIllustratorData","newRep","pushSelectedSwatchColors","isNew","swatchList","lastColorObj","spotColorName","pushSelectedSwatchGroups","swatchGroupList","lastColorTheme","colorThemeObj","colorTheme","createColorThemeElement","pushColorsToLibrary","uploadSwatch","uploadSwatchGroup","addStyle","isCharacterStyle","styleIDList","styleNames","addTextStyle","addParaStyle","dispatchUnknownError","elementIdentifier","errorObj","attachUploadListner","openBrowserAfterOperation","additionalQueryParameters","linkedOpened","eventSent","dispatchLibraryStatusEvent","errorStatus","BrowserUtils","dlStatus","openElementURL","onAddElementToLibrary","dLElementType","getCuratedName","addAsset","canAddTextAsset","textAssetName","representationType","isFile","isPreferredThumbnail","addTextAsset","addGraphicElement","onAddSelectionToLibrary","pushMaterialsToLibrary","createMaterialElement","material","moveFile","checkFileSizes","thumbnailSize","addMaterialElement","materialList","onFontListChanged","currentLibraryIndex","onForceSyncLibrary","onWorkspaceChanged","onGetTextAsAiFile","sendAiTextFileCreatedEvent","dataMap","stripStyle","usingContextMenu","placeInline","ILSTBrushElementConfig","ILSTColorElementConfig","ilstData","isSpotMismatch","alertSpotMismatch","ILSTColorThemeElementConfig","_addThemeAsSwatchGroup","ILSTFontElementConfig","ILSTImageElementConfig","IDSNParagraphStyleElementConfig","_createTextLayer","ILSTPatternElementConfig","PatternElementConfig","dragType","allowDragWithoutUsableRepresentation","_applyPattern","svgRepresentation","_addVectorPatternTileToDocument","isPattern","placeType","ILSTTemplateElementConfig","ILSTTextElementConfig","_sendAiTextFileCreatedEvent","dataObj","isValidSave","ILSTTextStyleElementConfig","enableSVGPatterns","ILSTEvents","colorModifiedByUser","Color","spotMismatch","isColorSupported","colorObject","_className","isModeSupported","colorToRGB","rgbColor","RGBColor","red","green","blue","convertSampleColor","ImageColorSpace","CMYK","cyan","magenta","yellow","black","RGB","ColorConvertPurpose","dummypurpose","LAB","GrayScale","gray","spot","colorToCMYK","cmykColor","CMYKColor","findRepWithMode","reps","getBestColorRepresentation","areDataSame","c1Val","c2Val","valToCompare","parseFloat","dataToSolidColor","activeDoc","activeDocument","spotFound","spotColor","SpotColor","spots","getByName","appSpotData","solidColorToData","spotData","areSame","_colorByMode","colorType","ColorModel","SPOT","NoColor","TEXT","RegistrationColor","updateRegistrationColor","PROCESS","finalColor","LabColor","GrayColor","profileName","colorProfileName","colorItem","getDisplayName","getSelectedSwatchList","getSelected","getSelectedSwatchGroupList","allSwatchesInColorTheme","swatchGroups","getAllSwatches","swatchCollection","swatchObj","addSwatchGroup","groupName","swatchMoodKey","swatchCollectionkey","swatchGroupObj","colorCollection","colorRep","ColorCollectionObj","addSpot","addSwatch","setFillColor","newColor","defaultFillColor","setStrokeColor","defaultStrokeColor","setColor","documents","isFillActive","isStrokeActive","returnVal","addColor","getLayerColor","replaceColor","originalColor","modifiedColor","showColorPicker","COLOR","elementUpdated","initialCommunicationError","elementUploaded","libraryListUpdated","spotMishmatched","fitCurrentDocumentViewToActiveArtboard","textFileCreated","applyPattern","libData","itemName","adobeStockLicense","isOpenIn","listen","getStockDragData","hideDefaultSearchCancelIcon","panelWidthAdjustment","cancelButtonQuiet","gSelectedElements","sendRenditionDataToBridge","selectedElement","colorUtils","rgbValues","sendCurrentSelectionToBridge","selectedItems","selectionData","onClearSelection","onGetCurrentSelection","transformPSColorToLibraryColor","_obj","yellowColor","grain","hue","saturation","brightness","luminance","COLOR_REPRESENTATION_TYPE","addPSColor","secondaryRepresentation","addPSGradient","PUSH_ASSET_HANDLERS","brushInfo","brushOptions","representationData","brushPrimaryRep","abrPath","psCharStyleInfo","descriptorID","textItemJSON","textItem","CHAR_STYLE_REPRESENTATION_JSON_TYPE","psColorInfo","secondary","layerStyle","stylePrimaryRep","aslPath","addLayerStyleElement","parameters","eventMetadata","exportInfo","pixelWidth","pixelHeight","layerIDs","pushEventMetadata","psGradientInfo","pushAssetToLibrary","event_metadata","respond","handleOK","elementID","libraryElementCount","libraryShared","getElementProperties","assetType","toCall","lastDocID","onPreferenceChanged","PS_EVENTS","psEventData","dynamic","psEventDataString","handlePushAssetToLibrary","csEvent","handlePSEvent","csEventData","firstOpenBrace","parsableCSEventData","strEventID","eventID","matchingEventHandlerInfo","PHXSBrushElementConfig","brushSettings","tool","flow","PHXSColorElementConfig","historyName","setColorOperation","enableShapeLayerApplyOperations","disableClick","_colorWasChanged","returnedColors","PHXSGradientElementConfig","GradientElementConfig","_fixGradientData","_defineCustomGradient","_applyCustomGradient","primaryRepIsTemplateFormat","editImageOr3DElement","strDocOpen","docOpen","PHXSImageElementConfig","isVectorType","addOperations","libraryLinked","PHXSLayerStyleElementConfig","LayerStyleElementConfig","_applyLayerStyle","enableApplyStyle","_addLayerStyle","strPathObject","filePaths","hasLayerStyles","PHXSLookElementConfig","_applyLookIfRGBDoc","showErrorIfNotRGB","frontDocIsRGBStr","alert","enableApplyLook","PHXSPatternElementConfig","_applyPatternToDocument","_definePatternFile","PHXSTemplateElementConfig","errorMessage","PHXSTextStyleElementConfig","enableApplyText","PHXSThreeDElementConfig","_add3dObjectToDocument","PHXSFontElementConfig","DocumentState","documentState","enableAddDocContent","hasOpenDoc","isAddDocContentEnabled","deleteIcon","enablePatternDragging","getFlyoutMenuItems","addDocContent","getAddDocContentOperation","handleActiveDocChanged","newDocumentId","dropHandlers","gradientIndex","saveAndAddLayerStyle","styleIndex","strSaveInfo","saveInfo","brush","saveAndAddBrush","brushIndex","strConfigInfo","configInfo","enableGradientContextMenu","initPromise","strReadableExtensions","readableExtensions","psdtIndex","readOnlyExtensions","eventIDs","readyEvent","PHXSEvents","extraMetrics","EXECUTE_OPERATION_IN_MODAL","modalBehavior","executeWhileModal","executeBatchPlayCommand","command","executeOptions","photoshopAction","batchPlay","executeMultipleBatchPlayCommand","getAppProperty","returnRawResult","propertyKey","actionArgs","additionalArgsMap","getCommand","psGetResult","getCurrentTool","getCurrentToolOptions","currentToolSupportsBrushes","setLayerName","activeDocumentId","activeLayerId","setLayerNameCommand","setCurrentTool","toolName","setCurrentToolCommand","setToolOptions","toolOptions","applyToolOptionsCommand","setForegroundColor","solidColor","foregroundColorCommand","getForegroundColor","getShowTooltips","getSelectedLayerIndices","wantIDs","backgroundIndexOffset","DocumentUtils","ktargetLayers","targetLayers","targetLayerIndices","selectLayerByIndex","layerIndex","addToSelection","selectLayerCommand","forEachSelectedLayer","layerIndexes","setPattern","propertyID","setPatternCommand","getFileFormats","fileFormats","tempFolderPath","photoshopCCLibrariesPanel","cclibrariespanel","getTempFolder","generateRepresentationAndPreview","repFolderPath","repNameNoExt","maxPreviewWidth","ImageUtils","maxPreviewHeight","exportCommand","exportResult","repPath","_path","Constants","saveAssets","repResult","strLayerName","psRGBMode","psHSBMode","psCMYKMode","psGrayscaleMode","psLABMode","textApplyOverrideOperation","psBlackColor","psSolidColorToLibraryColorWithRGB","psSolidColorToLibraryColor","convertColorToRGB","psRGBColor","libraryColorToPSSolidColor","addUnitToHSBModeSolidColor","newSolidColor","showColorPickerCommand","AppUtils","setStrokeColorForShapeLayer","tempSolidColor","strokeColorCommand","setColorOverlayForSinglySelectedLayer","colorOverlayCommand","setColorOverlay","doSetOverlayColorFunc","setColorOverlayModalHandler","executionControl","suspendHistory","_enum","suspensionID","resumeHistory","psCore","executeAsModal","setTextColor","textFillCommand","setCurrentSolidFillOrShapeLayerColor","solidFillCommand","setColorForSinglySelectedLayer","layerKind","doSetColorFunc","setColorModalHandler","colorConvertCommand","DescriptorUtils","getSolidFillColor","adjustment","getSolidStrokeColor","strokeStyleContent","getLayerEffectColor","layerEffect","forEffect","colorInformation","RGBFloatColor","PSClass_TextStyleRange","PSClass_TextStyle","PSClass_TextLayer","PSClass_TextKey","PSClass_Color","PSKey_FontCaps","PSKey_AltLigature","PSKey_Fractions","PSKey_Leading","PSKey_Ligature","PSKey_ImpliedLeading","PSKey_NoBreak","PSKey_OldStyle","PSKey_Ordinals","PSKey_Ornaments","PSKey_Titling","PSKey_Tracking","PSKey_HorizontalScale","PSKey_VerticalScale","PSKey_Size","PSKey_ImpliedFontSize","PSKey_SubScript","PSKey_SuperScript","PSKey_BaselineNormal","PSKey_StylisticAlternates","PSKey_ContextualLigatures","PSKey_Swash","PSKey_SyntheticBold","PSKey_SyntheticItalic","PSKey_TextClickPoint","PSKey_TextShape","PSKey_Underline","PSKey_AutoKerning","PSKey_transform","PSKey_warp","PSString_AutoLeading","PSString_strikethrough","PSString_fontPostScriptName","PSKey_Baseline","PSKey_ImpliedBaselineShift","PSKey_CCLib_Config_key","PSKey_SmartObject","PSKey_CCLibrariesElement","PSKey_Adjustment","PSKey_AGMStrokeStyleInfo","PSString_ORIENTATION","PSString_ANTI_ALIAS","PSString_ANTI_ALIAS_TYPE","PSString_PixelWidth","PSString_PixelHeight","PSString_UNDERLINE_UNDERLINEOFF","PSString_UNDERLINE_UNDERLINELEFT","PSString_STRIKETHRU_STRIKEOFF","PSString_STRIKETHRU_STRIKEHEIGHT","PSString_TEXT_CASE_ALLCAPS","PSString_TEXT_CASE_NORMAL","PSString_TEXT_CASE_SMALLCAPS","PSString_Document_Mode_RGB","PSString_Layer_Adjustment_ColorLookup","PSString_BlendMode","PSString_BlendMode_Normal","PSGlobals_maxNameLength","PSGlobals_textPreviewFontSize","PSGlobals_textPreviewString","PSEvent_Record","PSKey_HighbeamEventName","PSKey_HighbeamLibraryID","PSKey_HighbeamLibraryElementCount","PSKey_HighbeamElementID","PSKey_HighbeamElementType","PSKey_HighbeamRepresentationType","PSKey_HighbeamOpType","PSKey_HighbeamDetails","putEnumerationValueInDescriptor","enumKey","putUnitValueInDescriptor","unitKey","getEnumerationValueFromDescriptor","layerKindMap","getLayerKindString","GenericUtils","getNumberOfDocuments","appDocuments","frontDocIsRGB","getActiveDocumentId","getDocumentMode","getSpecificLayerAdjustment","getActiveLayerId","getLayerKind","getLayerName","getNumberOfLayers","numberOfLayers","hasBackgroundLayer","moveLayer","targetLayerIndex","moveLayerCommand","getActiveLayerName","activeLayerName","selectedLayerIds","getLayerProperty","getLayerInfo","layerObject","isAppliedParaStyleSupported","layerColors","areEqual","colorData1","colorData2","pushUnique","colorDataValue","colorTypeValue","TextUtils","textKeyDescriptor","textKey","antiAlias","textStyleRange","textStyle","fontInfo","smartObjectDesc","strokeColor","solidFillColor","frameFXColor","psForegroundColor","foregroundColor","isBackgroundLayer","getFontList","getLayerAdjustment","getDocumentTitle","isMatchingDocOpen","filePathMap","psUnitMap","unitToString","stringToUnit","getKeyFromMap","mapObject","previewMaxWidth","previewMaxHeight","placeAsset","libraryNameValue","adobeStockIdValue","placeAssetCommand","openAssetForEdit","openAssetForEditCommand","openImageForEditInPS","documentTitle","addBrushToDocument","applyBrushFile","currentToolData","currentToolOptions","applyBrushFileCommand","saveBrushByIndex","randomNumber","saveBrushAndThumbnailFilesCommand","applyGradientOperation","gradientCommand","saveGradientByIndex","saveGradientCommand","applyStyleFile","applyStyleFileCommand","applyLayerStyle","saveStyleFile","layerNameString","saveStyleAndThumbnailToFile","saveStyleFileCommand","thumbnailStyleFileCommand","saveLayerStyleByIndex","saveStyleAndThumbnailFilesCommand","characterStyle","GradientUtils","pushAssetToLibraryResponse","onDocInfoChangedEvent","_message","onForegroundColorChangedEvent","onConvertModeEvent","showTooltips","PUSH_ASSET_TO_LIBRARY_EVENT","librariesExtensionReady","logHighbeam","safeAddStringPropertyToCommand","logHighbeamCommand","PHXSUXPGradientElementConfig","PHXSUXPColorElementConfig","openDocumentFromTemplate","elementReferenceObj","templateCommand","PHXSUXPTemplateElementConfig","TemplateUtils","getCompatibleRepresentation","PHXSUXPBrushElementConfig","BrushUtils","PHXSUXPTextStyleElementConfig","defineAndMakePattern","patternName","definePatternCommand","makePatternCommand","createPatternPreset","createPatternPresetCommand","makePatternLayerFromFile","layerAdjustment","patternID","ID","PHXSUXPPatternElementConfig","scalePercent","PatternUtils","ops","isActiveLayerColorLookUp","activeLayer","applylook","lookName","onlyOneLayerSelected","isColorLookup","setColorLookupLayer","makeColorLookupLayerFromFile","makerColorLookupCommand","setColorLookupCommand","PHXSUXPLookElementConfig","LookUtils","isRepresentationVectorType","PHXSUXPThreeDElementConfig","PHXSUXPLayerStyleElementConfig","LayerStyleUtils","customClearSearchIconHeight","applyElementOnNameClick","gradientInfo","saveAndAddGradient","StyleUtils","addLayerStyle","addBrush","configInfoValue","readableFileExtensions","HighbeamUtils","antiAliasMap","orientationMap","underlineMap","strikeThroughMap","textCaseMap","autoKernMap","getTextPropertyInPSFormat","librariesData","getTextPropertyInLibrariesFormat","psData","getAntiAliasInPSFormat","adbePhxsAntiAliasMethod","setFont","alreadyInModal","setFontLocalFunction","fontList","fontPostScriptName","getStylePostScriptName","layerIndices","applyStyleToText","setFontModalHandler","createTextLayerAndApplyFontStyle","createTextLayerModalHandler","createNormalLayer","currentLayerIndex","createTextLayer","getTextKey","updateTextKey","applyTextStyleCommand","createNormalLayerCommand","createTextLayerCommand","fontIndex","fontFamilyName","getTextKeyById","getOrientationInPSFormat","adbePhxsDirection","getAutoKernInPSFormat","adbePhxsAutoKerning","getUnderlineInPSFormat","adbePhxsUnderline","getStrikeThruInPSFormat","adbePhxsStrikethru","textDescriptor","newTextDescriptor","xformDesc","sqr","r1","yx","yy","r2","xy","xx","treatAsRotate","xformYScale","vx","vy","textClickPoint","textShapeList","textShape","textShapeInstance","warp","textStyleRangeList","hasFontFeatureSettings","fontFeatureSettings","newTextStyle","adbeHorizontalScale","horizontalScale","adbeVerticalScale","verticalScale","adbePhxsFauxBold","syntheticBold","adbePhxsFauxItalic","syntheticItalic","adbeAutoLeading","autoLeading","adbeTracking","tracking","baselineShift","noBreak","textDecoration","textTransform","oldStyle","altligature","ligature","stylisticAlternates","swash","fractions","titling","ordinals","ornaments","contextualLigatures","textStyleRangeInstance","getOrientationInLibrariesFormat","textStyleDescriptor","getAntiAliasInLibrariesFormat","getFontObject","fontObject","fontStyleName","getLibrariesTextItemObject","textObject","sizeValue","sizeUnitType","_unit","leadingValue","leadingUnitType","baselineValue","baselineUnitType","psColor","toFixed","psUnderlineValue","psStrikeThroughValue","psFontCapsValue","psBaselineValue","psAutoKernValue","saveTextStylePreview","generateTextThumbnailCommand","addPSCharacterStyleWithDesc","PPROImageElementConfig","PPROLookElementConfig","_addLookFromData","lookData","lookPath","cubePath","look","PPROVideoElementConfig","_addVideoToDocument","usableFormats","contentURLs","isStockAssetDraggable","PPROAudioElementConfig","AudioElementConfig","_addAudioToDocument","PPROTextStyleElementConfig","stockDragFormat","addSupportForTextStyle","onGetIMSAccessToken","messageData","clientId","onGetVideoDownloadData","elementRefData","onGetLibraryReadWriteStatus","LIBRARYSTATUS","libraryIdList","libraryResult","onDeleteCapsule","DELETESTATUS","itemsToDelete","deleteResult","onUpdateAlternateRepresentation","UPDATERESPONSE","jsonPath","representationToRemove","removeRepresentation","Gradient","_xdGradient","serializeForLibrary","opacities","getColorStops","serializeAGC","nativeAngle","aspectRatio","LinearGradient","setColorStops","colorStops","setEndPoints","xdEndPoints","startX","startY","endX","endY","localBounds","getGradientParams","RadialGradient","centerX","centerY","gradientTransform","boundingBoxTransform","degreeRotation","scaleFactorsAndRotation","_transformAspectRatio","endR","SPRKImageElementConfig","placeLinked","operationName","isVector","insertVectorImage","insertBitmapImage","_getImageNodesFromSelection","isComponent","SceneGraphUtils","inLibrary","imageData","guids","_createImageElement","createOrUpdateElementFromAGC","vectorWidth","vectorHeight","SPRKColorElementConfig","publishToLibraryLabel","_getColorApplyModes","applyModes","firstSelection","_applyAndLinkColor","createColorNode","altKeyPressed","hexColor","getRGBColor","_createOrUpdateColorElement","_getElementDataFromSelection","border","textEditorValues","getColorDataFromColorSceneNode","visitSelection","fillEnabled","strokeEnabled","visitNonEditable","skipChildren","createOrUpdateElementFromAsset","assetColorData","updateImageProviderWithColorSpace","colorProfile","imageProvider","colorSpace","updateRendition","debounceWidthUpdate","clearImageProvider","debouncedWidth","updateImageProviderWithTargetColorSpace","screenColorProfile","shouldHandleScreenColorProfileChange","targetColorSpace","clearReaction","_reaction","provider","scaleToFit","naturalWidth","naturalHeight","imgStyle","screenColorProfileDisposer","screencolorProfile","_imageProvider","_imageProviderType","shouldDebounceWidthUpdate","overlays","ViewTypeMap","grid","TextStyleRenderer","isUnderline","isStrikethrough","textScript","baselineDisplayOffset","characterSpacing","setCharacterStyleGridInfo","dimension","setCharacterStyleListInfo","SPRKTextStyleElementConfig","_applyAndLinkTextStyle","getTextStyleDataFromElement","_getApplyMode","textNodes","_getTextStyleFromSelection","_createOrUpdateTextStyleElement","styleRange","getTextStyleDataFromNodeOrStyleRange","_createThumbnail","nodeOrStyleRange","strikethrough","charSpacing","underline","postscriptName","tempFileName","textStyleData","resultElement","textNodeOrStyleRange","assetTextStyleData","getCustomRenderer","searchAdditionalElementData","RadialGradientRenderer","serializedStops","serializedColors","setGradientInfo","SPRKGradientElementConfig","_canReceiveGradient","_getGradientApplyModes","_setGradient","getColorOrGradientFromElement","_getGradientsFromSelection","gradients","getGradientDataFromGradientSceneNode","_createOrUpdateGradientElement","typeNameSingular","assetGradientData","BG_CHANGE","DEFAULT_BG_COLORS","ComponentRenderer","_backgroundAtom","onBackgroundColorChange","contrastBackground","bgColor","getRenditionProvider","SPRKComponentElementConfig","ComponentElementConfig","editItemLabel","editInSourceLabel","_getDragAndComponentData","BaseElementConfig","imageUIDToPathMap","childRepresentation","normalizedPath","imageInfo","getReference","symbolData","_getComponentsFromSelection","existingElement","componentData","getAdditionalTooltipData","createdIn","instances","SPRKAudioElementConfig","mediaFile","audioPath","_representation","audioName","addAudioElement","MAX_CONTENT_LENGTH","SPRKVideoElementConfig","getExtension","filesize","UnitUtils","formatTooltipContent","tooltipData","videoPath","videoName","addVideoElement","hasLinkReference","MissingFontsHeader","_toggleCollapsed","missingFontsCount","warnIcon","collapseChevron","MissingFontView","missingFont","replaceFontAllowed","highlight","_onBlur","_onClick","numInstances","MissingFontWrapper","MissingFontsContainer","missingFonts","MissingFonts","setIsScrollable","_missingFontsContainerRef","isOverflow","_lastChild","setMissingFontsContainerRef","DocumentRepresentation","_changeAtom","wrapDocumentElement","isCompatibleType","getExternalLinkDownloadProgress","APP_NAMESPACE","hideCustomSearchIcon","hideHeaderCreateLibraryButton","disableRecentLibrariesView","disableEditOnDoubleClickAsset","customTextStyleTrackingString","customTextStyleLeadingString","defaultToDocumentAssets","defaultViewState","hideFooterInRootView","hideNamesInGridView","hideListViewMetadata","enableSAM","disableOnboarding","showTeamsOnboarding","listViewElementHeight","smallColorGridElement","getScrollBarPadding","gridRightPadding","hideSearchSelectorOnSearch","STOCK_SEARCH_UI_OPTIONS","reportSDMEvent","requestPublish","MAX_RETRIES","notifyPublishEnd","isElementEditable","disableDelete","handleDiscoverLibraries","openXDUIKitsURL","shouldShowExtensionInSearch","rootGroup","disabledLibraryContextMenuActions","customGroupLearnMoreLink","registerDocumentAssetsContainers","getDocumentAssetsContainer","wrapDocumentAssetsContainer","onElementDrop","_parsedCCLibraryData","publishStateListenerDisposers","addPublishStateEventListener","removeAllPublishStateEventListeners","isPublishingHandler","_upgradeOrUpdateToastAction","isStarterPlanUser","onPendingUpdate","actionLabel","onAction","addSubscriptionChangeListener","userUpgraded","subscriptionListenerDisposer","removeSubscriptionChangeListener","onInviteSent","assetId","inviteId","pagename","_onSelectionStateChange","_selectionStateListenerDisposers","addSelectionStateEventListener","removeAllSelectionStateEventListeners","getAdditionalMenuItems","_element","SPRKDocumentAssetsContainer","_batchableOperations","_pendingOperations","_operationCount","_xdOperationsInProgress","_pendingChangeCallbacks","_changeCount","_library","_isObserved","_ccLibrariesEventListener","removeChangeListener","_onChange","addChangeListener","_beginOperationEvents","BEGIN_BULK_OPERATION","RESTART_BULK_OPERATION_TO_RENDER","LINKED_ELEMENTS_IMPORT_START","_endOperationEvents","END_BULK_OPERATION","EDIT_BATCH_FINISHED","PAUSE_BULK_OPERATION_TO_RENDER","LINKED_ELEMENTS_IMPORT_END","_ignoreEvents","ASSETS_PANEL_DISMISS_EDITOR","ASSETS_PANEL_DISMISS_MISSING_FONTS_EDITOR","_bulkOperationLabels","GROUP_TOGETHER","REORDER","UNGROUP","changeCount","linkedLibraryId","_reportChanged","cleanDocumentElementsCache","cleanDocumentGroupsCache","_scheduleChangeCallback","itemId","_getChangedItemById","GROUP_REMOVED_EVENT","ELEMENT_REMOVED_EVENT","stopEditPath","pendingChangeCallbacks","getFilteredElements","changeEvent","ELEMENT_CHANGED_EVENT","GROUP_CHANGED_EVENT","getGroupById","removeGroup","includeContents","_currentBulkOperationLabel","_group","removeDocumentGroupFromCache","wrapDocumentGroup","getGroupCount","newLinkedElementRef","hasPendingLinkedElementsToAdd","removeDocumentElementFromCache","_getOrderInGroup","_setGroupParent","_setGroupOrder","_setElementOrder","_createGroupChild","_reorderOpInProgress","bulkOpLabel","publishableGroupCount","isAppControlled","SPRKDocumentElement","_renditionProviders","cleanDocumentRepresentationsCache","isActive","needsUpdate","defaultName","getOrderInGroup","setOrderInGroup","canRename","hasPermissionToRelink","cachedLinkedElementSourceRefString","getSymbolId","isLegacyCloudDocumentLink","linkedElementRefObj","linkedElementRef","isLegacyCCLibrariesLink","getLinkReferenceType","referenceType","linkedElementFileName","cachedLinkedElementInstanceId","cachedLinkedElementName","cachedLinkedElementSourceRef","getLinkedElementSourceRef","linkState","_documentLinkState","_elementLinkState","isLinkMissingFile","isLinkBroken","doesLinkNeedUpdate","_isLinkStatusLoading","contentChanged","nameChanged","linkedElementLastModified","instanceId","syncState","_newLinkedElementRef","getStaticSourceRefString","getStaticCachedLinkedElementSourceRefString","newElementRef","isCanceled","wrapDocumentRepresentation","linkData","getReferenceString","getThumbnailContent","getActions","installedVersions","isCompatibleVersionInstalled","BaseGroupModel","disableDraggingFromOutside","newOrder","createChild","getFilteredChildren","visitNode","shouldVisitChildren","RGBA","colorDataToRGBA","fontColor","lineSpacing","paragraphSpacing","fontFeatureSettingsObject","adbeCapitalization","isAI","isAGC","showGenericErrorToast","linkVectorImage","linkVectorGraphic","linkBitmapImage","cloneWithOverrides","insertVectorThumbnail","cachedPath","imageNode","createVectorThumbnail","createVectorImage","createAINode","createAGCNode","useAILoader","previewSize","insertLoadingImage","insertFullSizeThumbnail","insertAIRepresentation","insertAGCRepresentation","getContent","utf8Content","isBitmap","loadImage","loadingContainer","getFilledRectangle","locked","linkedContentReadyState","linkedElementWillUnlinkOnLoad","createLoadingContainer","loadFromURL","createBitmapImage","createBitmapStockPreview","insertStockPreview","fullElement","useCanonicalComponent","dependentAssetIds","primaryContentPath","svgRenditionContentPath","PNGRenditionPath","imagePathsToDelete","isNxdFormat","createPrimaryContent","createSVGRendition","createPNGRendition","representationContentPromises","copyFileToRepresentation","moveFileToRepresentation","useXDComponentContainerType","getMimeType","addPrimaryRepresentationChild","imageRepresentation","setContentPath","setPrimaryRepresentation","svgRendition","setSVGRendition","PNGRendition","setPNGRendition","flattenGradientStops","isDefined","xdStyleData","textDecorationObject","adbeUnderline","adbeStrikethrough","convertFontSizeUnits","isValidColorData","hasProps","hasRgbColorValues","addColorAsset","addImageAsset","addModelAsset","addModelElement","onElementOpenForEdit","ADD_OPERATIONS","onAddAsset","STGRColorElementConfig","_getRGBRepresentation","_placeColorAsset","STGRImageElementConfig","_placeImageAsset","STGRLightElementConfig","_placeLightAsset","STGRMaterialElementConfig","_placeMaterialAsset","STGRThreeDElementConfig","_placeModelAsset","models","missingDropEventsBug","products","PHXS","PHXS_UXP","ILST","ILST_UXP","IDSN","AEFT","PPRO","FLPR","DRWV","KBRG","SPRK","ACCC","STGR","appName","appConfigurations","COMPONENT_MAP","loadTimer","PerformanceTimer","translationManager","localSettings","productManager","JSXRoot","shimJSX","coreJSX","jsonJSX","appJSX","onProductInit","testHookManager","linkManager","MainComponent","renderApp","strAppPath","BaseState","_rootContext","RenameState","_item","groupsTree","isLibrary","validUniqueLibraryName","team","validElementName","validGroupName","ViewManager","renameState","_resetTooltipActive","setUnlinkingAsset","unlinkingAssets","_editDescriptionElement","showPathEditOnboardingToast","_resetTooltipTimeout","ManagerViewState","_searchText","documentLibrary","findMatchingLibraries","LibraryActions","shouldShowCCDTeamsLibraryCreateOnboarding","showCCDTeamsLibraryCreateOnboarding","isTeamLeave","leave","export","_openShareSheetWithCollaborators","collaboratorEmails","collaborator","_isCrossRepoMove","originalLibrary","targetProject","owner","_isActionAllowed","projectsEnabled","selectedFolder","permission","copiedLibrary","copyLibrary","permissionInheritance","moveLibrary","handlePromotedLibrary","promotedLib","handleLibraryOpen","pushedPromotedDisposer","isPushedToServer","createdPromotedDisposer","isHeader","shareAction","openInCCD","getLink","makeTeamPersonalCopy","newLib","duplicateLibrary","useRenameDialog","collaborationType","BrandUtils","canInvite","toolkitId","canShareLink","canExport","isStyleguideEnabled","showDuplicate","proxyLib","availableProjects","canMoveOrCopy","brandActions","unbrandLibrary","brandLibrary","validateLibraryName","showToast","isUnique","autogenerateEmptyLibraryGroups","groupedElements","orderedElements","groupNames","nameA","nameB","createBrandLibrary","createTitle","createPlaceholder","isCreatingBrand","DocumentAssetsActions","_openShareSheet","onSave","isPublishedLibraryNotFound","relinkDocument","linkedAnalyticsValue","isTeamLibrariesEnabled","analyticsProperties","availableFolders","defaultTeam","publishPromise","choice","totalMissingLinksBefore","_getLinksResolutionStatus","_showLinksResolutionStatus","resolvedLinks","unresolvedLinks","orphanPublishedLibrary","librariesToAccept","libraryData","acceptAllLibraryInvitations","followLibrary","_showLinkResolutionProgress","resolutionOp","showSyncSpinner","_showUnresolvedLinksStatus","totalMissingLinksAfter","_showResolvedLinksStatus","totalResolved","additionalResolvedLinks","learnMore","relinkCandidates","relinkableAssetsData","TeamLibraryPermissionSelector","initialPermission","defaultPermission","onDropdownSelectionHandler","selectedPermission","onPermissionChange","getLabel","dropdownData","RS2Switch","switchWrapperRef","renderLabel","emphasized","TeamLibraryPermissionSwitch","onSwitchChange","onSwitchSelectionHandler","switchOptions","showHelp","switchOn","TeamSelector","refreshTeams","showPersonalFolder","teams","firstAvailableFolder","disabledTeamIds","onFolderChange","updateSelectedFolderPermission","disableProjectsPermissionSwitch","getPlainTextLabel","personalFolderIsBrands","getLabelIcon","personalFolderIcon","onClickDropdownItem","folderMenuData","folders","folderMenuItem","sublabel","iconContent","infoTooltipContent","permissionSelector","PermissionSelector","dropdown","disableTeamSelection","noTeams","CreateLibraryDialog","teamLibraryPermission","inputElement","createLibrary","onTextChange","isValidName","hasPressedKey","handleFolderChange","currentUser","isEnterpriseUser","warningMessage","nameErrorStatus","remainingCharacters","charCount","isError","isDuplicateLibraryName","duplicateLibraryName","isOverMaxLength","isErrorWarning","sourceAction","createTeamLibrary","inputContainerClasses","RenameLibraryDialog","renameLibrary","getElementThumbnail","DeleteLibraryDialog","onClickLearnMore","launchLearnMoreDeleteURL","isPublicLibrary","isIncomingLibrary","unfollowLibrary","publishedFrom","_defaultDeleteLibrary","getLibraryByAssetId","toastMessage","removeType","deleteType","isPublishedBrand","publishedTo","private","outgoing","incoming","bookmarked","publishedBrand","numberOfCollaborators","visibleCollaborators","privateString","floodgateManager","sharedString","brandName","numUsers","NoteDialog","noteInput","charactersLeft","ConfirmDialog","handleClickOK","doNotShowAgain","hasDismissCheckbox","okText","WHATS_NEW_MAP","latest","whatsNew","packageInfo","WhatsNewDialog","closeClick","onLearnMoreClick","openWhatsNewURL","featureList","releaseNotes","VALID_NAME_REGEXP","ImportExportInitialDialog","_getTranslatedString","suffix","_chooseFile","validName","ImportExport","_location","_parseLocation","fileLocation","_handleStart","onStart","_handleKeyDown","isOkEnabled","defaultBrowseText","ERROR_TO_METRICS","OUT_OF_SPACE","INVALID_DATA","ACCESS_ERROR","ImportExportProgressDialog","handleProgressUpdate","_importExportOperation","_startOperation","locations","_handleOperation","_locationCounter","errorCode","underlyingError","eventWorkflow","eventSubcategory","errorProperties","errorDescription","metricsValue","allCompleted","operationLibrary","extraEventMetrics","contentCategory","_handleCancel","cancelled","setImportExportInProgress","progressTitle","ImportExportCompleteDialog","ImportExportErrorDialog","_handleOk","ERROR_MESSAGES","ENOENT","cancelText","ImportExportCancelDialog","cancelledList","cancelledPaths","ImportExportDialog","_locations","_uiState","_handleSuccess","_errorCode","cancelledLocations","_handleCloseAfterCompleteState","initialState","progressState","cancelledState","completeState","errorState","DropFilesDialog","onContinue","createElementsFromFiles","canContinue","AnalyticsDialog","toggleRecording","isRecording","clearRecording","getDetailsButton","recordButton","clearButton","overrideButton","enabledState","DebugThemeAndLocaleDialog","themeMap","panelBackgroundColor","listItem","useTheme","currentTheme","currentLocale","switchTheme","switchLocale","themeList","localeList","getThemeName","hexName","appSkinInfo","RelinkLayerOverlay","closeOverlay","uiState","overlayMessage","StockErrorDialog","StockVideoCompPickerDialog","onClickA","licenseA","onClickB","licenseB","describe","license","resolution","Tray","ContextMenu","hideEvent","setParentRef","menuWidth","xObj","yObj","trayComponent","itemWithoutOnClickClose","mappedMenuItems","justifyContent","defaultContextMenu","menuItemsExcludingDividers","spectrumWrapperContextMenu","Triangle","horizontalPlacement","BasePopover","closeOnOverlayEvent","ignoreClickOutsideEvent","closeOnWindowClick","ignoreResizeEvents","closeOnResize","closeOnButtonClick","_setPopoverParent","_popoverParent","handleWindowClick","popoverPositionStyle","innerHeight","popoverTriangle","showPopoverTriangle","triangleOffset","buttonSize","hideFooter","verticalButtonGroup","additionalFooterContent","additionalFooterButtons","indicators","UnlockToolkitDialog","toolkitType","toolkitName","unlockCoachmark","STORED_RECENT_SEARCH_LIBRARIES_KEY","STORED_RECENT_SEARCH_STOCK_KEY","RecentSearchesOverlay","onClearAllClick","clearAllRecentSearches","onClearItemClick","clearRecentSearch","onRecentSearchClick","searchQuery","recentLibrarySearches","setOverlayElement","recentStockSearches","getListItem","clearAllButton","getSearchTypeList","isStockList","searches","recentHeaderText","headerText","includeClearAll","recentLibrarySearchList","recentStockSearchList","showDivider","topDistance","searchBarBottom","shouldShowStockList","PromoteTeamLibraryDialog","handleClickCancel","handleClickCopy","emailString","getCollaboratorEmails","buttonContent","isCollaboratorsLoaded","warningMessageAndButton","loadingSpinnerMessage","CopyTeamLibraryDialog","DeleteTeamLibraryDialog","PublishLibraryDialog","clickOk","hasLinkedElements","clickCancel","QuotaWarningPopover","onClickManage","openLibraryArchiveURL","usedStorage","userQuota","storage_used","totalStorage","storage_quota","librariesSize","storageUsed","isAlwaysInline","ERROR_TYPE_OWNED","ERROR_TYPE_SHARED","OverQuotaPopover","sharedQuotaErrorLibraries","ownedQuotaErrorLibraries","SaveCloudDocDialog","saved","EnableSyncPopup","enableSync","RS2Checkbox","Checkbox","checkboxWrapperRef","invalid","readonly","CREATE_MODE_TYPES","BRAND","GROUP","CREATE_MODE_PAGE_INFO","inputHeader","getInputPlaceholder","currentGroupBranch","getDefaultGroupName","BaseSelectTargetPopover","disposeZeroLibrariesReaction","selectedGroup","setSelectedGroup","clearSelectedLibrary","shouldDisableSubmission","createData","nameStatus","validateTarget","shouldAllowBack","shouldHideFooterIcon","footerIconType","showGroupPicker","shouldDisableFooterIcon","setSelectedGroupToParent","showNameRow","showLoading","operationTitle","enableSetAsDefault","createIcons","onClickFooterIcon","createModeType","getFooterIcon","footerIconSize","onClickCell","_makeCurrentLibraryDefault","getTargetItem","targetClassNames","getTargetProps","getCellIcons","getCellIconElement","disableGroupSelection","allowUnloaded","cancelCreateMode","submitAction","onSubmit","makeCurrentLibraryDefault","ccl","set_as_default","createGroupAction","newGroup","createGroup","onCreateGroup","_createTeamLibrary","_createPersonalLibrary","createLibraryAction","libManager","isCreatingFirstLib","is_creating_first_library","createBrandAction","newBrand","_createActions","setDefaultLibrary","shouldCloseOnCancel","getCustomGroupsTree","includeUngrouped","zeroLoadedLibraries","startingLibrary","defaultLibrary","getDefaultLibrary","areLibrariesLoading","showCreateActionsInHeader","panelWidthModifier","hostContainerWidth","pickerWidth","hostContainerHeight","pickerHeight","groupItems","emptyGroupMessageLabel","defaultPickerBody","createInputHeader","createGroupOrLibPickerBody","showErrorTooltip","okButtonLabel","inputPlaceholder","disableSetAsDefaultLibraryCheckbox","mergeInfo","disableSearch","isGroupOp","startingGroup","CopyMovePickerPopover","_handleChange","_validateTarget","isGroupsOp","_handleSubmit","copyMoveAction","_onCreateGroup","mergeable","mergeableGroups","sourceGroup","getMergeableGroupsInBranch","localizedTextKey","headerTitle","localizedHeaderKey","MIGRATE_TOAST_TIMEOUT","MigrateLibraryWithSlashesPopover","handleClickReplaceSlashes","replaceGroupDelimiters","showErrorToast","handleConvertDelimitedNamesToGroups","convertDelimitedNamesToGroups","shouldShowGroupsOnboarding","showGroupsOnboarding","handleClickBackToRoot","migrateGraphic","QUOTA_ERROR","PublishQuotaErrorDialog","handleUpgrade","handleFreeUpSpace","isFirstTimePublishing","ViewByGroupPopover","LoadLibraryByAssetIdDialog","loadLibrary","handleChange","loadLibraryByAssetId","JsApi2DashboardDialog","pushDisplayState","displayState","libraryHeaders","libraryOperations","syncingEnabled","dangerouslyAccessCCLibraries","tickInterval","handleSyncClick","disableSyncing","actionToQueueMap","cellToLinkedCellMap","actionQueues","actionQueue","row","cell","didFindCellLastRow","scanRow","linkedAction","linkedActionQueue","linkedCell","linkedCellIndex","linkedActionElements","dependentAction","maxColumn","minColumn","actionElements","actionCount","currentDisplayState","Play","Pause","RS2Wait","ProgressCircle","SIZE_CONVERSIONS","static","PublishDialog","toUnpublish","unpublishBrand","brand","publishBrand","isActionLoading","triggerConfetti","handleUnpublish","currPage","Lottie","confettiCanvasRef","GenStudioToast","onCompleteAnimation","triggerPublishPillAnimation","launchLearnMorePublishURL","publishPillCanvasRef","GenStudio_Published","isBrandLifecycleEnabled","showPublishBrandBanner","needsReview","isOrgLoading","orgName","repositoryName","actionSpinner","publishContent","organization","publishConfetti","publishSuccessContent","unpublishContent","unpublishDialogBody","publishBrandBanner","displayPage","dialogRef","CaptureOnboardingPopover","setCurrentWorkflow","onboardingImage","OnboardingConstants","RootViewOnboardingPopover","onClickSkip","isLastStep","currentStepId","getCoachmarkIndicatorRings","openTeamsLearnMoreURL","isNewUser","isNewUserState","markViewed","currentStep","allStepsNewUser","allStepsReturningUser","htmlBody","customHeaderView","verticalPlacement","NewUserOnboardingImage","indicator","ReturningUserOnboardingImage","PathViewOnboarding","handleLearnMoreClick","PanelTeamLibraryOneUpOnboardingPopover","allSteps","FirstEnteredLibraryOnboardingPopoverTour","setTourInProgress","isNewUserTour","groupTriangleOffset","inviteY","lastStepText","ManagerOnboardingPopoverTour","TeamsLibraryCCDOneUpOnboardingDialog","TeamsLibraryCreateCCDOnboardingDialog","setRemoveDialogPadding","teamLibrariesOnboarding","RevisionHistoryDialog","PublishBrandDialog","BaseUIState","ManagerState","BaseDialogManager","ToastManager","librariesDialogs","APP_NAME","FEATURE","sendPublishBrandOmegaEvent","brandId","widget","sendUnpublishBrandOmegaEvent","BrandActions","rename","getBrandActions","canLeave","canDelete","canEdit","isBrandEditable","isInBrandOneUpView","canUnpublish","editBrand","successToastMessage","committed","resolvedBrand","patchAppMetadata","OmegaMetrics","inviteOrganization","statusText","unpublishBrandM3","draftBrandId","draftBrand","removeOrganization","closeDraft","GroupActions","highestSelected","closestCommon","minimumCommonAncestor","addElementsToGroup","_onNewGroup","PanelState","handleFocusVisibility","currentLibrariesFilter","filterData","filterOptions","disabledFilters","filterItem","onFilterChange","isBrands","onStockSearchClick","onLibrariesSearchClick","MESSAGE_MARGIN","searchStockLink","_prevDimensions","_globalHide","fromFlyoutMenu","isEventOutsideParents","_parentElements","_resizeHide","currentDimensions","_hideOnEscapeKey","_doHideOverlay","_hideEvent","_openOverlay","_focusEvent","_isOpen","ignoreViewState","ignoreEscape","VIEW_BY_GROUP_MODES","LEADING_SPACE","DOUBLE_SPACES","TRAILING_SLASH","_isNewGroup","_inputElement","TREE","_groupPath","changesToCommit","_commitPath","rectifyGroupPathWithExistingTree","isEmptyHead","getRootGroups","namesMatch","getFilteredGroups","_livePath","offerUndo","moveGroupElementsToPath","deleteEmpty","undo","restoreGroups","_escapeName","deleteEntry","EXTENSION_ID","MANAGER_EXTENSION_ID","STOCK_PURCHASE_EXTENSION_ID","PROFILE_CHANGE_EVENT_ID","strTempFolder","DRAGDROP_SOURCE","UNGROUPED_GROUP","MAX_DRAG_DISPLAY_COUNT","DRAG_COUNT_TRIGGER_MAX","PATH_VIEW_GROUP_SEPARATOR","nativeProxy","SYNC_NOTIFICATIONS_AVAILABLE","SUPPORTED_PRODUCTS","currentProduct","SHARE_LINK_HOST_TYPE_PARAM","LEARN_MORE_URL_ROOT","LIBRARY_MANAGEMENT_URL_ROOT","PATH_VIEW_URL_ROOT","SERVICE_ERROR_URL_ROOT","INSTALL_CC_APP_URL_ROOT","UPDATE_CC_APP_URL_ROOT","UPDATE_CC_LIBRARIES_URL_ROOT","WHATS_NEW_URL_ROOT","STOCK_LICENSE_INFORMATION_URL_ROOT","FEEDBACK_URL_ROOT","TEAM_LIBRARIES_URL_ROOT","BUSINESS_STORAGE_URL_ROOT","LEARN_MORE_QUOTA_URL_ROOT","LEARN_MORE_TEAMS_URL_ROOT","LEARN_MORE_COLLABORATION_URL_ROOT","OFFICE_INSTRUCTIONS_URL_ROOT","DELETE_HELPX_ROOT","PUBLISH_LEARN_MORE_ROOT","XD_UI_KITS_ROOT","XD_MISSING_LINKS_ASK_FOR_ACCESS_LEARN_MORE","XD_MIGRATE_TO_CCLIBRARIES_LEARN_MORE","XD_GROUP_LEARN_MORE","LIBRARIES_VIEW_STATES","GRID","LIST","ELEMENTS_VIEW_STATES","AVAILABLE_HELP_LANGUAGES","cn","cz","es","hu","il","jp","mx","kr","no","nl","ru","tw","DEFAULT_HELP_LANGUAGE","TEST_LOCALE","FLOODGATE_CLIENT_ID","FLOODGATE_URL","FLOODGATE_LIBRARIES_CLIENT_ID","FLOODGATE_BRANDS_CLIENT_ID","ASSETS_WEB_SPECIALTY_LANGUAGE_MAP","CCWEB_ELEMENT_URL","CCWEB_LIBRARIES_URL","CCWEB_LIBRARY_ARCHIVE_URL","CCWEB_LIBRARIES_ARCHIVE_URL","CCWEB_TEAM_LIBRARIES_URL","CCWEB_BROWSE_ALL_URL","CCWEB_MARKETPLACE_STAGE","CCWEB_MARKETPLACE_PROD","EXPRESS_STAGE","EXPRESS_PROD","CCWEB_LIBRARIES_ROUTE_SELECTOR","ASSET_ID_SELECTOR","LIBRARY_ID_SELECTOR","PUBLIC_LIBRARY_URL","CREATIVE_CLOUD_ID","FIREFLY_RECIPE_TYPE","IMAGE_ELEMENT_TYPE","CHANNEL_ELEMENT_TYPE","COLOR_ELEMENT_TYPE","COLOR_THEME_ELEMENT_TYPE","BRUSH_ELEMENT_TYPE","CHARACTER_STYLE_ELEMENT_TYPE","PARAGRAPH_STYLE_ELEMENT_TYPE","FONT_ELEMENT_TYPE","LAYER_STYLE_ELEMENT_TYPE","LOOK_ELEMENT_TYPE","CAPSULE_ELEMENT_TYPE","VIDEO_ELEMENT_TYPE","THREE_D_ELEMENT_TYPE","LIGHT_ELEMENT_TYPE","MATERIAL_ELEMENT_TYPE","PATTERN_ELEMENT_TYPE","TEMPLATE_ELEMENT_TYPE","TEXT_ELEMENT_TYPE","ANIMATION_ELEMENT_TYPE","LIBRARY_TYPE","GRADIENT_ELEMENT_TYPE","COMPONENT_ELEMENT_TYPE","AUDIO_ELEMENT_TYPE","IMAGE_GUIDELINE_ELEMENT_TYPE","ROLE_TYPE_BRAND","ROLE_LOGO","ROLE_HEADER","ROLE_BODY","ROLE_PRIORITY_PRIMARY","ROLE_PRIORITY_SECONDARY","ROLE_VERIFIED","FETCH_COLLABORATIONS_THROTTLE","FETCH_INVITATIONS_THROTTLE","FETCH_TEAM_LIBS_THROTTLE","IMAGE_THUMBNAIL_SIZE","LOOK_THUMBNAIL_SIZE","CAPSULE_THUMBNAIL_SIZE","VIDEO_THUMBNAIL_SIZE","THREE_D_THUMBNAIL_SIZE","LIGHT_THUMBNAIL_SIZE","MATERIAL_THUMBNAIL_SIZE","BRUSH_THUMBNAIL_SIZE","CHARACTER_STYLE_THUMBNAIL_SIZE","PARAGRAPH_STYLE_THUMBNAIL_SIZE","FONT_THUMBNAIL_SIZE","LAYER_STYLE_THUMBNAIL_SIZE","PATTERN_THUMBNAIL_SIZE","TEMPLATE_THUMBNAIL_SIZE","TEXT_THUMBNAIL_SIZE","ANIMATION_THUMBNAIL_SIZE","COMPONENT_THUMBNAIL_SIZE","AUDIO_THUMBNAIL_SIZE","LARGE_THUMBNAIL_SIZE","MAX_INPUT_STRING_LENGTH","MAX_REMAINING_CHARACTERS_LENGTH","GROUP_GRID_WIDTH","GROUP_GRID_HEIGHT","QUOTA_WARNING_THRESHOLD","BYTE_MULTIPLIER","MEGABYTE_MULTIPLIER","WARN_EXTENDED_UPLOAD_TIME","GRID_MINIMUM_BREAKPOINT","GRID_VIEW_BREAKPOINT_SIZE","GRID_TYPE_LARGE","GRID_TYPE_MEDIUM","GRID_TYPE_SMALL","GRID_TYPE_WIDE","GRID_TYPE_WIDE_SET_HEIGHT","MAX_CONTEXT_MENU_WIDTH","GRID_VIEW_NAME_HEIGHT","EXPANDED_GRID_VIEW_NAME_HEIGHT","GRID_SIZE_TYPES","ELEMENT_BACKGROUNDS","CHECKERED","SOLID","THUMBNAIL_RENDERER_DEBOUNCE","OPEN_SHARESHEET_TIMEOUT","MAX_LIBRARIES_ONBOARDING","SUBGROUP_INDENT_PERCENT","MAX_SUBGROUP_INDENT","SHORT_FONT_PREVIEW_TEXT","DEFAULT_MAX_PREVIEW_FONT_SIZE","DEFAULT_MIN_PREVIEW_FONT_SIZE","DEFAULT_PREVIEW_FONT_SIZE","ONE_UP_ELEMENT_VIEW_MAX_PREVIEW_FONT_SIZE","LIST_VIEW_PREVIEW_FONT_SIZE","MOSAIC_VIEW_QUARTER_PREVIEW_FONT_SIZE","MOSAIC_VIEW_FULL_PREVIEW_FONT_SIZE","GRID_MEDIUM_PREVIEW_FONT_SIZE","GRID_LARGE_PREVIEW_FONT_SIZE","MANAGER_CEP_EVENTS","INIT","CLOSE","OPEN_DIALOG","RECENT_SEARCH_TIMER","STORED_RECENT_LIBRARIES_SEARCH_LIMIT","STORED_RECENT_STOCK_SEARCH_LIMIT","STORED_RECENT_SEARCH_DISPLAY_LIMIT","STOCK_NAMESPACE","STOCK_DATA_KEY","STOCK_CLIENT_ID","STOCK_TARGET_SCOPE","STOCK_GET_USER_PROFILE_PATH","STOCK_LICENSE_PATH","STOCK_METADATA_PATH","STOCK_INFO_PATH","STOCK_SEARCH_PATH","STOCK_SEARCH_API_PATH","STOCK_ABANDON_TRANSACTION_PATH","INVITATIONS_COLLABORATIONS_API_PATH","INVITATIONS_CAPABILITIES_API_PATH","INVITATIONS_PENDING_API_PATH","INVITATIONS_ACCEPT_API_PATH","STOCK_LICENSE_TYPE_STANDARD","STOCK_LICENSE_TYPE_EXTENDED","STOCK_LICENSE_TYPE_SMALL","STOCK_IMAGE_LICENSE_TYPE_SMALL","STOCK_IMAGE_LICENSE_TYPE_FULL","STOCK_IMAGE_LICENSE_TYPES","STOCK_VIDEO_LICENSE_TYPE_HD","STOCK_VIDEO_LICENSE_TYPE_4K","STOCK_VIDEO_LICENSE_TYPES","STOCK_STATE_PURCHASED","STOCK_STATE_NOT_PURCHASED","STOCK_STATE_CANCELLED","STOCK_SEARCH_RESULT_SIZE","NOTES_MAX_CHARACTER_COUNT","STOCK_SEARCH_TIMEOUT","STOCK_SIMILARITY_THUMBNAIL_SIZE","STOCK_SEARCH_OPTION_PHOTO","STOCK_SEARCH_OPTION_ILLUSTRATION","STOCK_SEARCH_OPTION_VECTOR","STOCK_SEARCH_OPTION_VIDEO","STOCK_SEARCH_OPTION_TEMPLATE","STOCK_SEARCH_OPTION_3D","STOCK_SEARCH_SUB_FILTER_MODEL","STOCK_SEARCH_SUB_FILTER_LIGHT","STOCK_SEARCH_SUB_FILTER_MATERIAL","STOCK_SEARCH_OPTION_PREMIUM","STOCK_SEARCH_OPTIONS","STOCK_SEARCH_PRODUCT_TEMPLATE_ID_MAP","STOCK_SEARCH_PRODUCT_MOGRT_VERSION_MAP","STOCK_CORE_CONTENT_LEVEL_ID","STOCK_FREE_CONTENT_LEVEL_ID","STOCK_PREMIUM_CONTENT_LEVEL_IDS","STOCK_TEMPLATES_SUPPORTED_PRODUCTS","AGC_REPRESENTATION_TYPE","NXD_REPRESENTATION_TYPE","COLOR_NAMESPACE","COLOR_DATA_KEY","DEFAULT_SRGB_PROFILE","COLOR_THEME_DATA_KEY","COLOR_THEME_NAMESPACE","COLOR_THEME_REPRESENTATION_TYPE","GRADIENT_NAMESPACE","GRADIENT_DATA_KEY","GRADIENT_REPRESENTATION_TYPE","CHARACTER_STYLE_REPRESENTATION","FONT_NAMESPACE","FONT_DATA_KEY","FONT_REPRESENTATION_TYPE","THREE_D_NAMESPACE","THREE_D_DATA_KEY","TEXT_REPRESENTATION_ID_SNIPPET_TYPE","TEXT_REPRESENTATION_JSON_TYPE","TEXT_NAMESPACE","TEXT_DATA_KEY","CAPSULE_DEFINITION_REPRESENTATION_TYPE","CAPSULE_NAMESPACE","CAPSULE_DATA_KEY","VIDEO_NAMESPACE","AUDIO_NAMESPACE","PUBLIC_LINK_CLIENT_ID","PUBLIC_LINK_TARGET_SCOPE","LIBRARY_SNAPSHOT_EXTENSION","LIBRARY_CLOUD_EXTENSION","LIBRARY_ALLOWED_EXTENSIONS","NATIVE_DROP_ALLOWED_FILE_EXTENSIONS","NATIVE_DROP_FILES_SLOW_PERFORMANCE_THRESHOLD","NATIVE_DROP_MAX_FILE_COUNT","DEFAULT_ELEMENTS_PER_CATEGORY","SHOW_MORE_STAGGER_INTERVAL","THEME_COLOR_CHANGED_EVENT","THEME_COLOR_CHANGED_EVENT_UXP","CONTEXT_MENUS_ENABLED","IS_APP_IN_TOUCH_MODE","RECENTS_LIST_LIMIT","RECENTS_LIST_LIBRARY_MIN","RECENT_LIBRARY_ID_FLAG","DEFAULT_TOAST_TIMEOUT","UNDO_TOAST_TIMEOUT","TOAST_FADEOUT","IMPORT_EXPORT_DEFAULT_FOLDER","SLOW_COPY_MOVE_THRESHOLD","CONTRAST_THRESHOLD","MAX_ONEUP_ELEMENT_CONTEXT_MENU_ITEMS","SELECTION_CHANGE_THROTTLE","AUTO_SCROLL_GROUP_SELECT_DEBOUNCE","WINDOW_RESIZE_DEBOUNCE","ANALYTICS_PROJECT","ANALYTICS_INGEST_TYPE","ANALYTICS_MAX_QUEUED_EVENTS","ANALYTICS_DEBOUNCE","DISABLE_CREATE_ELEMENT_METRIC_OPTYPES","GROUPS_TREE_CACHE_KEEPALIVE_TIME","THUMBNAIL_CACHE_KEEPALIVE_TIME","AUTO_GROUPS_ORDER","EXPORTABLE_ELEMENT_TYPES","DRAGOUT_ELEMENT_TYPES","TOOLKIT_TYPES","WINDOWS_RESERVED_NAMES","RENAME_STATES","VALID","SLASH_ELEMENT","SLASH_GROUP","INVALID_CHARACTER","INVALID_LIBRARY_PERIOD","INVALID_LIBRARY_LENGTH","DUPLICATE_LIBRARY","DUPLICATE_GROUP","RENAME_STATE_ERROR_MESSAGES","ASSET_LINK_STATES","NORMAL","PENDING_UPDATE","MISSING_ELEMENT","MISSING_LIBRARY","NEED_TO_FOLLOW","SYNCING","PENDING_INVITE","BROKEN","FILE_MISSING","XD_ASSET_LINK_REFERENCE_TYPES","CCLIBRARIES_ELEMENT","LEGACY_CCLIBRARIES_ELEMENT","LEGACY_DOCUMENT_ASSET","LEGACY_CLOUD_DOCUMENT_ASSET","SAM_LINK_STATES","PENDING_METADATA_UPDATE","RESTRICTED","DISCARDED","SAM_PERMISSIONS","READ","WRITE","DELETE","SHARE","MOVE","RENAME","ALL","ACK","EDIT","VIEW","SAM_LEGACY_PERMISSIONS_MAP","DOCUMENT_LIBRARY_STATES","LOADING","NOT_PUBLISHED","PUBLISHED","PUBLISHING","UNPUBLISHED_CHANGES","NOT_FOUND","DOCUMENT_ASSETS_MESSAGES","RECEIVE_ASSETS","RECEIVE_CONFIG","SEND_UPDATE","LIBRARIES_MESSAGES","APPLY_ELEMENTS","REQUEST_ACTION","RECEIVE_UPDATE","CCX_ACTIONS","OPEN_PICKER","OPEN_SHARE_SHEET","OPEN_TEMPLATE_PREVIEW","GEN_STUDIO_ACTIONS","OPEN_UPLOAD_WIZARD","DISABLED_PUBLISH_STATES","ELEMENT_CHANGE_TYPE","CONTENT","GROUP_CHANGE_TYPE","PATH","VIEW_BY_MODES","LIBRARY_CONTENTS_VIEW_TABS","ELEMENTS","PREVIEW","BRANDS_FILTER_OPTIONS_M2_1","YOURS","BRANDS_FILTER_OPTIONS","CREATED","DRAFTS","BRANDS_SORT_OPTIONS","MODIFIED","MAX_ASSET_UPDATE_COUNT","ELEMENT_VIEW_MODES","DISPLAY_TIME_PER_CHARACTER","PREFERRED_EXPORT_TYPES","DEFAULT_SELECT_TARGET_POPOVER_WIDTH","DEFAULT_SELECT_TARGET_POPOVER_HEIGHT","COPYMOVE_TL_DROPDOWN_MAXHEIGHT","MAX_COLLABORATORS","TOOLTIP_MAX_WIDTH","MIN_CEP_VULCAN_7_VERSION","PROGRESS_LOG","CONSTANT_KEY_IDS","SPECTRUM_ICONS_MAP","PAYWALL_BANNER_TYPES","LIBRARY_PANEL","LIST_VIEW_ELEMENT_HEIGHT","LIST_VIEW_ELEMENT_THUMBNAIL_HEIGHT","SCROLLBAR_WIDTH","initApplication","appConfig","getElementType","_getConfiguration","_configurations","configurations","_elementTypes","ConfigurationClass","expectedTypes","getElementTypes","getElementRole","usage","getElementPriority","getThumbnailSizes","thumbnailSizes","getFullRenditionConfig","fullRenditionConfig","getComponent","getInfoControlComponent","getStockComponent","stockComponent","getGridSizeByType","getElementSearchFunction","_elementSearchFunctionClosure","getTypeName","singular","getShortType","isStockMultiLicense","isPremium","isEditorial","getStockCompKeyForLicenseType","requestedLicenseType","getAutoGroupName","getThumbnailSize","getLocalThumbnailURL","isLarge","blobToDataURL","getThumbnailURL","getBadgeText","getCustomPanelInfoPrimaryProperties","getCustomPanelInfoSubProperties","getCustomServiceProperties","overrideType","getMultiApplyOperations","applyOperationMap","applyFunctions","getOnClickApplyOperation","getOnEditApplyOperation","editOperations","getEditOperations","onEditItemOperations","checkElementWritable","isDownloadInProgress","elemConfiguration","reportEditOperation","eventSubtype","editOperationName","isEditOriginalEnabled","editOriginal","isCommitted","allowEditInOtherApps","allowBrokenLinks","editableMimeTypes","getOpenPickerOperation","openElementPreview","openPreview","getTooltipData","elemConfig","typeInfo","getTruncatedElementName","getTooltipContent","enabledTooltipData","dataType","searchModeTooltips","includeTypeSpecificDragData","adobeStock","premiumLevel","additionalDragData","dragThumbDetails","stockDragData","setStockMetadata","contentTypes","isExternalLink","getCachedExternalLinkError","autoDownloadExternalLinks","getEmbeddedData","groupElementsByType","sortDescending","sortFn","elementRolesInViewByRole","typeSectionMap","viewByRole","roleSectionMap","groupElementsByCustomGroup","includeEmpty","groupElementsByTopLevelGroup","getChildElements","groupElementsByTime","timeField","sectionMap","getAdditionalElementDetails","getGridElementDetails","canFindSimilar","getAdditionalClasses","getBackupThumbnail","getReplaceableExtensions","getRepresentationForExport","representationTypes","typeName","usableTypes","condition","getPrimaryRepresentationBadge","getPrimaryRepresentationExtension","getElementMetadata","METADATA","AudioElementView","audioIcons","audioData","artist","tempo","album","typeMimeInfo","mimeLookup","imgSrc","StockSearchResultChin","_getIsEditorial","is_editorial","_getIsIllustrative","is_illustrative","_getIsFree","_getIsPremium","is_premium","_getFreeChin","_getPremiumChin","price","_getEditorialChin","_getChin","chinClasses","StockImageSearchResult","fallbackIcons","searchStrings","getStockId","stockSearchQuery","getStockSearchQuery","searchString","getFilename","baseName","BrushElementView","brushTypeNames","brushType","_createColor","_getColorData","primaryValue","customData","createElementFromData","updateElement","ColorThemeController","setOneUpSubElement","currentColorIndex","onColorChange","pageNumber","colortheme","CapsuleElementConfig","jsonRepresentation","ChannelElementConfig","ImageGuidelineElementConfig","UnsupportedElementConfig","wrapAsCharacterStyle","_formatRepresentationDataFromPicker","getFileFromRepresentationData","stageRepresentationForCommit","stagedData","setStagedContent","GradientController","resetCurrentStopIndex","onStopChange","disposeElementReaction","gradientStyle","currentStop","stopCount","gradientTypes","radial","noise","panelInfo","degree","roundToDecimalPlace","INTERCHANGABLE_EXTENSIONS","replacements","interactive","getStockPanelInfo","getCustomPanelInfo","STOCK_METADATA_KEY","subproperties","stockMetadata","materialMetadata","materials","tileable","procedural","_addParaStyleImpl","patternType","_addTextImpl","selectionType","getDropLabel","paragraphs","_getTooltipTextData","paragraphText","firstPara","firstParaLength","secondPara","paragraph","runs","stylePointer","textStyles","isLightColor","STYLE_REPRESENTATION_TYPE","_addTextStyleImpl","VideoElementView","videoDuration","videoBadge","StockVideoSearchResult","_playing","video_small_preview_url","getLicenseLabels","field","getLicenseTypesFromSearchResult","videoFooter","licenseLabels","licenseLabel","msToString","preload","licenseTypes","_addBool","shouldShowInMenu","afterHook","_addEnum","enums","shouldShowCaptureFeatureFlag","shouldShowTextStyleFeatureFlag","enumVal","_fs","FSSettings","_settings","_writing","_pendingWrite","_fileName","_listenerManager","addListenerManager","readFileSync","_write","finishedWrite","writeFile","LocalStorageSettings","_localStorageKey","settingsStr","rebind","_save","numChunks","getKey","LocalSettings","settingsFileName","debugFileName","loadSettings","_debugSettings","existsSync","setDebugValue","hasDebugSettings","getDebugValue","showDebugMenu","Environment","Enumeration","_enumName","_enumId","_kind","EnumerationValue","enumValueName","enumValueId","enumId","enumName","_enumValueName","_enumValueId","isNonCreatable","_target","reduceNonCreatableObjects","targetObj","LiveObjectAPICall","theArgs","ConvertLiveObjectValue","LiveObjectAPIGet","createNonCreatableProxyHandler","LiveObjectAPIPut","theObject","createJSProxy","enumerationId","liveObjectAPI","getEnumerationValue","ConvertLiveObjectObject","liveObjectProxy","classInfo","getClassInfo","targetObject","indexNumber","classInfoCache","disableCache","setDisableCache","addEnumValue","enumObject","enumValueObject","enumValueCache","enumValues","defaultForm","enumDefinition","enumValueDefinition","ILSTAppUtils","getThumbnailOptions","antiAliasing","transparency","dimn","withDots","saveAsPNG","exportFullFile","exportFile","ExportType","PNG24","exportSelectionAsPNG","assetDetails","uxpfs","storage","localFileSystem","getTemporaryFolder","assetFile","destPath","nativePath","copyFile","shouldLoadToPlaceGun","importFile","createFile","overwrite","pngFile","aiPath","aiFile","exportSelectionAsAi","fillTooltipObj","strokeTooltipObj","isFontAvailableinAIObj","fillTooltip","strokeTooltip","characterAttributes","textFont","isFontAvailableinAI","textFonts","currentFont","getCurrentFont","appSelection","textRange","populateTextOptionsInLayerObject","shortenString","openAsset","OpenOptions","addToRecentFiles","newDoc","loadAndSelectBrush","FilePath","BrushName","TemplatePath","PARASTYLE_REPRESENTATION_JSON_TYPE","CHARSTYLE_REPRESENTATION_JSON_TYPE","GET_CHARACTER_STYLE","GET_PARAGRAPH_STYLE","GET_CHARACTER_STYLE_BY_ID","GET_PARAGRAPH_STYLE_BY_ID","GET_COLLISION_RESPONCE","MAX_STYLE_NAME_SIZE","TypographyArray","GlobalConflictResolutionStrategy","ConflictResolutionStrategy","wasNotOk","useExisting","useIncoming","isEmptyObject","collectCharacterAttributes","charAttributes","__class__","adbeIlstStrokeColor","adbeIlstAlignment","alternateGlyphs","adbeIlstAlternateGlyphs","AlternateGlyphsForm","DEFAULTFORM","baselineDirection","adbeIlstBaselineDirection","adbeIdsnTatechuyoko","figureStyle","adbeIlstFigureStyle","kerningMethod","adbeIlstKerningMethod","AutoKernType","AUTO","openTypePosition","adbeIlstOpenTypePosition","wariChuJustification","adbeIlstWariChuJustification","akiLeft","adbeIlstAkiLeft","akiRight","adbeIlstAkiRight","connectionForms","adbeIlstConnectionForms","leading","language","adbeIdsnAppliedLanguageName","overprintFill","adbeIlstOverprintFill","overprintStroke","adbeIlstOverprintStroke","proportionalMetrics","adbeIlstProportionalMetrics","adbeIlstRotation","strokeWeight","adbeIlstStrokeWeight","tateChuYokoHorizontal","adbeIlstTateChuYokoHorizontal","tateChuYokoVertical","adbeIlstTateChuYokoVertical","adbeOTFSwash","justificationAlternates","adbeOTFJustificationAlternates","stylisticSets","adbeIdsnOtfStylisticSets","adbeOTFOrdinals","adbeOTFOrnaments","kana","adbeOTFHVKana","discretionaryLigature","adbeOTFDiscretionaryLigatures","contextualLigature","adbeOTFContextualAlternates","adbeLigatures","adbeOTFFractions","adbeOTFTitlingAlternates","adbeOTFStylisticAlternates","italics","adbeOTFRomanItalics","baselinePosition","FontBaselineOption","SUPERSCRIPT","adbePosition","SUBSCRIPT","NORMALBASELINE","capitalization","FontCapsOption","NORMALCAPS","ALLSMALLCAPS","SMALLCAPS","ALLCAPS","Tsume","adbeIlstTsume","strikeThrough","wariChuCharactersAfterBreak","adbeIlstWariChuCharactersAfterBreak","wariChuCharactersBeforeBreak","adbeIlstWariChuCharactersBeforeBreak","wariChuEnabled","adbeIlstWariChuEnabled","wariChuLineGap","adbeIlstWariChuLineGap","wariChuLines","adbeIlstWariChuLines","wariChuScale","adbeIlstWariChuScale","kashidas","adbeIdsnKashidas","dirOverride","adbeIdsnCharacterDirection","digitSet","adbeIdsnDigitsType","diacVPos","adbeIdsnDiacriticPosition","diacXOffset","adbeIdsnXOffsetDiacritic","diacYOffset","adbeIdsnYOffsetDiacritic","collectParagraphAttributes","getJustificationAttributes","getScalingAttributes","getSpacingAttributes","getHyphenationAttributes","getIndentationAttributes","getOtherAttributes","getTabAttributes","convertJustificationString","justificationStr","isSingleWord","convertKinsokuTypeString","kinsokuStr","convertTabAlignmentTypeString","TabAlignmentStr","TabStopAlignment","Center","Decimal","convertComposerEngineTypeString","composerEngineTypeStr","ComposerEngineType","optycaComposer","latinCJKComposer","justification","adbeParaAlignment","singleWordJustification","justStr","adbeSingleWordJustification","minimumWordSpacing","adbeMinimumWordSpacing","desiredWordSpacing","adbeDesiredWordSpacing","maximumWordSpacing","adbeMaximumWordSpacing","minimumLetterSpacing","adbeMinimumLetterSpacing","desiredLetterSpacing","adbeDesiredLetterSpacing","maximumLetterSpacing","adbeMaximumLetterSpacing","spaceAfter","adbeSpaceAfter","spaceBefore","adbeSpaceBefore","minimumGlyphScaling","adbeMinimumGlyphScaling","desiredGlyphScaling","adbeDesiredGlyphScaling","maximumGlyphScaling","adbeMaximumGlyphScaling","hyphenation","adbeHyphenation","hyphenationZone","adbeHyphenationZone","hyphenateCapitalizedWords","adbeHyphenateCapitalizedWords","hyphenationPreference","adbeHyphenWeight","maximumConsecutiveHyphens","adbeHyphenateLimit","minimumAfterHyphen","adbeHyphenateAfterFirst","minimumBeforeHyphen","adbeHyphenateBeforeLast","minimumHyphenatedWordSize","adbeHyphenateWordsLongerThan","firstLineIndent","adbeFirstLineIndent","leftIndent","adbeLeftIndent","rightIndent","adbeRightIndent","paragraphDirection","adbeIdsnParagraphDirection","kashidaWidth","adbeIdsnKashidaWidth","composerEngine","adbeIlstComposerEngine","bunriKinshi","adbeBunriKinshi","kinsokuOrder","adbeKinsokuType","autoLeadingAmount","adbeParaAutoLeading","burasagariType","BurasagariTypeEnum","Forced","adbeIlstBurasagariType","Standard","None","everyLineComposer","adbeIlstEveryLineComposer","leadingType","adbeLeadingModel","kurikaeshiMojiShori","adbeIlstKurikaeshiMojiShori","mojikumi","adbeIlstMojikumi","kinsoku","adbeKinsokuSet","romanHanging","adbeIlstRomanHanging","tabStops","adbeTabStops","tabStop","tabStopObj","adbeTabAlignment","adbeTabAlignmentChar","alignmentCharacter","adbeTabLeader","leader","adbeTabPosition","captureText","responseJsonData","stylesMap","styleItem","styleItemKey","styleItemValue","newStyleItemValue","styleType","getTextInfo","textObj","topObject","basePath","getParagraphStyle","paragraphStyleObject","jsonString","ex1","ex2","getCharacterStyle","characterStyleObject","getParaStyleInfo","getCharStyleInfo","processStyleName","getParagraphStyleJSONStringfromAI","thumbnailFilePath","payLoad","getCharacterStyleJSONStringfromAI","removeParagraphStyle","paragraphStyle","removeCharacterStyle","spotsVar","spotCount","REGISTRATION","addCharacterAttributesToStyle","StyleRunAlignmentType","TextOrientation","VERTICAL","ROMANBASELINE","BaselineDirectionType","TateChuYoko","FigureStyleType","FontOpenTypePositionOption","WariChuJustificationType","KashidasType","DirOverrideType","DigitSetType","DiacVPosType","bShift","UnitValue","as","lead","typename","setJustificationAttributes","paragraphAttributes","ParagraphDirectionType","Justification","CENTER","LEFT","RIGHT","FULLJUSTIFY","FULLJUSTIFYLASTLINECENTER","FULLJUSTIFYLASTLINELEFT","FULLJUSTIFYLASTLINERIGHT","setScalingAttributes","setSpacingAttributes","setHyphenationAttributes","setIndentationAttributes","setOtherAttributes","KinsokuOrderEnum","PUSHOUTFIRST","PUSHIN","PUSHOUTONLY","AutoLeadingType","BOTTOMTOBOTTOM","TOPTOTOP","KashidaWidthType","setTabAttributes","tabStopInfo","tab","TabStopInfo","decimalCharacter","addParagraphStyleToAI","styleAttributes","tempStyleName","tempStyleObject","tempStyleJSONString","exisingStyleJSONString","resonseJSON","wasOk","ActionOK","ex0","addCharacterStyleToAI","setParagraphStyle","applyTo","setCharacterStyle","styleObject","addParagraphStyles","numStyles","itr","typography","addParagraphStyle","addCharacterStyles","addCharacterStyle","getCharacterStyleById","getParagraphStyleById","addCharStyleById","addParaStyleById","AIEnvironment","UXPEnvironment","pluginId","hasUXPStockExtension","hasOpacityBug","additionalStockLicenseCoreModules","hasInputZOrderBug","uxpHost","findLocaleMatch","_hostEnvironment","appId","appVersion","isAppOnline","appLocale","appUILocale","setPanelFlyoutMenu","currentMenu","entrypoints","getPanel","dividerCount","_flyoutMenuClickHandlers","reformattedMenuItems","removeAt","newItem","insertAt","handleFlyout","panels","ccLibrariesPanel","_waitForInit","_panelMountPoint","getMountPoint","renderPanel","unmountPanel","invokeMenu","adobeStockLicensingPlugin","openStockLicenseExtension","hasVideoRenderingBug","getDataFolder","execApp","connectProductInterface","getProductInterfaceHandler","requiresData","disconnectProductInterface","_handlers","dragStarted","dragEnded","application","localStorageImpl","supportedLocales","LOGIN_STATE","OS_NAME_MAP","winarm","mac","macarm","BaseEnvironment","supportsAnimations","supportsCSSListItem","videoElementsSupported","developerMode","canPlaceElements","isMenuInJson","recolorLightTextElements","supportsDropFiles","supportsFileSystem","supportsProcessConnection","_supportsFileURLs","supportsFilePicker","supportsImagesInButtons","supportsNotes","supportsExportElement","IMSLib","ElementDragId","GroupDragId","delayProcessLaunch","setIsViewMounted","mounted","_setIsViewMounted","notifyProductInitialized","shouldRenderPanel","shouldConvertColor","getExtensionID","_extensionId","fetchResourceBundle","__webpack_public_path__","loadResourceBundle","strings","parseLocalisationFile","_loadResourceBundle","bundle","_resourceBundle","resourceBundle","clearResourceBundle","getGlobalRoot","getUserDataPath","getLocalRoot","getAppName","getLocalStorageKey","isLibrariesPanel","isLibrariesManager","getOSName","processOSName","osType","_getClientOSName","getOSVersion","winVersion","getOSInformation","osName","osVersion","getHostEnvironment","getAppVersion","getLocale","keepUnderscore","getAppDescription","createEvent","_notifyEventListeners","getFeatureFlag","getAvailableExtensions","contextMenuEventListeners","contextMenuHandler","getRootPanelElement","getPanelWidth","getPanelHeight","getHostContainerWidth","getHostContainerHeight","isLoggedIn","getLoginState","getCustomPanelView","getCustomHeaderView","isComposingInputEvent","getSavePath","getCurrentDocumentState","layerID","launchInBrowserAsync","urlPromise","launchInBrowser","hideDebugFlyoutMenu","getProfile","documentLibraryConstants","openLibraryManagerWindow","isLibraryManagerWindowOpen","addManagerInitListener","addOpenDialogEventListener","extraNameHeight","numEvenSteps","ignoreFocusOutsideToast","navigateToLibrary","copyContentToClipboard","copyToClipboard","showError","showMessage","supportsFileURLs","handleDroppedStockElement","dragState","currentlyDraggedElement","currentlyDraggedElementPromise","requiredOperation","maintainConnectionToProcess","isViewMounted","canLaunchProcess","TEMPLATE_ID","createTemplateIfNecessary","BaseView","bodyClassList","routeHandlers","shadowDOM","attachShadow","shadowBody","mountPoint","connectedCallback","hasStyles","_localeReactionDispose","handleRouteChange","disconnectedCallback","observedAttributes","isMobileViewAttributeName","isCurrentUserBrandCreator","attributeChangedCallback","BaseComponentView","NoLibrariesListView","LibraryListOnboarding","handleCreateLibrary","followLibraryButton","handleMarketplace","handleFollowLibrary","LibraryListEmptyFilteredView","resetFilter","resetFilterLink","LibraryListView","onContextClickTitle","getDebugMenuItems","handleBrowseMore","isLoadingLibraries","loadingLibraries","sortedLibraries","getCCLibraries","isAscending","librarySortOrderDescendingState","librarySortState","navigationItem","navigationItems","starterKitEnabled","getLibraryListFilterOptions","filterOption","isFilterEnabled","libraryOnboarding","listControls","LibraryListViewContainer","SelectViewTypeDropdown","viewOption","selectedOption","groupLabel","typeLabel","showTitle","SectionNavigationItem","isReorderable","isCollapsible","isGroupNavigationCollapsed","setCollapsedGroupNavigationToDrag","sourceId","onReorderDrop","isDraggedOverBottom","collapsedGroupNavigationToDrag","setGroupNavigationCollapsed","clearCollapsedGroupNavigationToDrag","isElementDropTarget","elementInfo","onElementsDrop","isDraggedOverTop","expanderIcon","expander","onClickProp","onContextClick","requiresFocus","adjustLeft","dragProps","focusAttributes","EditableGroupName","Expander","hasChildren","SectionNavigationGroupItem","onGroupClick","firstElemInGroup","onGroupContextClick","handleReorderDrop","isAfter","collapsedGroups","orderedGroups","hiddenChildren","getAllDescendantGroups","visibleOrderedGroups","destinationIndex","afterGroupCollapsed","handleElementsDrop","reorderInSameGroup","SectionNavigation","_MAX_WIDTH","RESIZE_THRESHOLD","adjustNavWidth","MAX_WIDTH","mouseDragHandler","moveEvent","_xOffset","desiredWidth","_startingPanelWidth","handleResizeStart","setCurrentFirstSection","typedElements","typeGroup","typeList","onTypeClick","firstElemInType","groupedSectionsLevels","subgroupIndent","groupList","disableGroup","createNewGroupWithElements","halfWindow","setFooter","showFooterActions","typeSortOptions","groupSortOption","sortValue","zoomFactor","isDescending","supportReverseOrder","CCDLibraryContentsView","disposeHeaderChangeReaction","disposeViewStateReaction","disposeLibraryElementsReaction","showCCDTeamsOneUpOnboarding","inOrder","viewPanel","showNavigation","stickyHeader","onlyHasUngrouped","getTypeHeader","getGroupHeader","toolkitUnlock","contentsClasses","gridZoomFactor","LibraryCustomDialog","LibraryCustomDialogView","webComponent","LibraryInfoPanelView","GRID_VIEW","LIST_VIEW","LibrariesExpandedViewHeader","onClickBrowseLibraries","onToggleViewClick","setLibrariesViewState","librariesViewState","onSearchChange","getHeaderButton","disableActions","browseAllButton","toggleViewButton","toggleIcon","filterBySearch","newButton","newDropdownData","isEmptyView","libraryMosiacHeaderControls","RS2Card","Card","actionMenu","onchange","CardBody","headingSlot","subheadingSlot","descriptionSlot","CardPreview","LibraryMosaicGridItem","handleContextMenuClick","_isBrandLibrary","handleLibraryContextMenu","coverImage","StatusLight","RS2DropdownButton","ActionMenu","forceFallback","actionMenuWrapperRef","buttonIcon","getButtonIcon","labelContents","menuPlacement","handleSelect","SWCActionMenuProps","disableDropdownButton","menuIconSize","gradientBackgroundIcons","BrandsGradientItem","hashCode","simpleHash","statusBadge","publishedBadge","BrandCard","getGenStudioContextMenu","draftBadge","getBrandSubtitle","allowsSelection","handleCardPress","LibrariesExpandedGridView","getCellHeight","CELL_HEIGHT_STATIC_HEIGHT","_getCard","searchResultsHeader","yourLibraryTour","cellDimensions","CELL_PADDING_BOTTOM","CELL_PADDING_RIGHT","CELL_WIDTH_MIN","CONTAINER_PADDING_TOP","MIN_COLUMNS","showSearchHeader","searchHeaderHeight","discoverY","registerYourLibraryTour","registerOnboarding","getLibraryInfo","projectNameLoading","getLibrarySubtitle","librarySharingData","_showDiscoverMessage","showDiscoverMessageInRootView","_showProjectsBanner","shouldShowBanner","hasProjects","createItemCard","filterBy","LibraryMosaicListItem","modifiedDate","modifiedDateString","formatDate","mosaicGrid","showSharingStatus","LibrariesExpandedListView","handleSortChange","setLibrarySortOrderDescendingState","setLibrarySortState","sortingIcon","arrowIcon","listViewHeader","PanelRootExpandedView","getLibrariesContent","currentViewState","isSearchFiltering","emptyView","CustomEmptyRootState","librariesView","LibraryTeamsView","teamNames","sortOrder","teamLibraries","getLibrariesInViewOrder","teamId","LibraryTeamsViewContainer","LibraryYoursViewContainer","CCDApi","_initPromise","_markInit","_loadedPromise","_markLoaded","_environment","_listenerCallbacks","vulcanInterface","themeInfo","displayLocale","setVulcanInterface","defineElement","LibraryListViewComponent","LibraryCustomDialogViewComponent","LibraryInfoPanelViewComponent","LibraryYoursViewComponent","LibraryTeamsViewComponent","ccdContext","updateHostInfo","keyBindings","yourlibrary","teamlibrary","openBrowseLibs","openBrowseMore","openPublicLibs","openCreateNewLibraryDialog","updateLocale","updateTheme","waitOnInit","getSyncState","getDefaultElement","libraryCount","firstElement","findFirstElement","asyncGetLibraryByAssetId","lowerCaseAssetId","hasLibrariesFromOtherTeams","addLibraryChangeListener","removeLibraryChangeListener","isProcessRunning","isSyncingEnabled","setSyncingEnabled","addSyncingEnabledChangedListener","removeSyncingEnabledChangedListener","navigateToAllLibraries","CCDAutoSizer","contentBox","SpectrumTooltip","showTooltip","hideTooltip","CCDVulcanInterface","BaseVulcanInterface","cep","convertion","b64_to_utf8","base64ToUtf8","utf8_to_b64","utf8ToBase64","_vulcanInterface","isCCLibProcessInstalled","isAppInstalledEx","ccLibProcessSAPCode","isCCLibProcessRunning","isAppRunningEx","launchAppEx","launchCCLibProcess","addMessageListener","removeMessageListener","sendMessage","payloadType","CEPVulcanMessage","setPayload","dispatchMessage","ccdApi","_ccdApi","createRefEx","imsEndpoint","endpoint","fetchAccessToken","imsRef","clientSecret","serviceId","scopes","imsData","access_token","mapToContextMenu","isDivider","subMenu","TOOLBAR_ITEMS_TO_OMIT","TOOLBAR_ITEMS_TO_OVERWRITE","CCDEnvironment","isAnyViewMounted","isContentViewMounted","isLibrariesViewMounted","ccdOnline","cloudDriverConnector","imsEnvironment","imsProfile","refreshAccessToken","ccLibrariesDriver","_ccLibrariesDriver","hybridDriver","LocalDriver","ccdConnector","_rawVulcanInterface","HybridDriver","ccdAPI","imsUserId","getAppVersionFromUserAgent","_availableActions","moreActions","iconComponentID","isCTA","posX","posY","setContextMenu","menuY","doCopyOrMoveElements","elementDetailMode","excludeDocumentRoot","responsiveLayout","disableGPUTooltips","enableDragOutsideProduct","capitalizeCreateLibraryHeader","customCreateLibraryHeader","dialogOverrides","confirm","showDialog","onConfirm","dropFiles","varient","pathViewOnboarding","rootViewOnboardingPopover","firstEnteredLibraryOnboardingPopoverTour","quotaWarningPopover","_openToast","setContextMenuPositionEventHandler","_routeHandlers","openSharesheet","retryCount","desiredLib","showShareSheet","handleClientConnected","logEvent","__disable_swc__","setSyncState","setHeader","setSelectionData","infoPanelComponent","availableActions","deselectCallback","getIsStarterKitsAvailable","isStarterKitsAvailable","routeToStarterKits","setRoute","_waitTillAccessTokenIsAvailable","fetchBrowseTeamsURL","teamUrl","showWebArticle","assetsSite","ccwebHost","openFollowLibrary","followLibraryURL","followLibrariesGoURL","onMessage","linkId","launchFollowLibraryURL","enableProjects","isTeam","sharesheetPayload","urn","enableProjectsSharesheet","libraryResourceURL","expressSharingURL","shareCapabilities","parentFolder","teamName","editMode","isLibraryAction","onUserAdd","hideViewOnlyLabel","subTitle","onNameChange","closeOnAction","toastId","hideToast","toastStore","hideAllToasts","hideAll","_toast","formattedData","totalPercentage","errorString","getLoadingErrorMessage","errorLink","getErrorLink","hideDialog","_currentDialogKey","openCustomDialog","removePadding","footerData","_currentBaseWebComponent","setCurrentBaseWebComponent","getDragFileList","getDraggedFilePaths","showFolderPicker","windowTitle","promptButton","getFileForSaving","suggestedName","filePickerStore","openFolderPicker","CSXSWindowType","_PANEL","_MODELESS","_MODAL_DIALOG","CSEvent","SystemPath","ColorType","MenuItemStatus","menuItemLabel","ContextMenuItemStatus","menuItemID","CSInterface","USER_DATA","COMMON_FILES","MY_DOCUMENTS","APPLICATION","EXTENSION","HOST_APPLICATION","GRADIENT","hostEnvironment","__adobe_cep__","closeExtension","getSystemPath","pathType","decodeURI","OSVersion","evalScript","getApplicationID","getHostCapabilities","requestOpenExtension","getExtensions","extensionIds","extensionIdsStr","extensionsStr","getNetworkPreferences","initResourceBundle","resElms","resEl","resKey","resValue","dumpInstallationInfo","winBit","openURLInDefaultBrowser","util","getExtensionId","getScaleFactor","setScaleFactorChangedHandler","getCurrentApiVersion","invokeSync","updatePanelMenuItem","EXTENDED_PANEL_MENU","itemStatus","invokeAsync","setContextMenuByJSON","updateContextMenuItem","isWindowVisible","resizeContent","registerInvalidCertificateCallback","registerKeyEventsInterest","keyEventsInterest","setWindowTitle","getWindowTitle","CEPVulcanInterface","_ccLibProcessIdentifier","_cepVulcanInterface","useSpecifiers","ccLibProcessSpecifier","CEP_LIBSVulcanInterface","isAppInstalled","isAppRunning","launchApp","getPayload","_vulcanPrefix","CEPEnvironment","cepConnector","VulcanInterface","VulcanMessage","ignoreRenditionGrids","useHybridDriver","hasManagerPersistenceBug","flyoutMenuClickEvent","_waitForManagerInit","_appInterface","_evalScript","numRetries","strArguments","extScriptPrfix","getPluginPath","getMyDocumentsPath","_menuItems","isImmediate","openURL","_extensionList","openDialogInManager","onCloseCallback","_openDialogInManager","removeOpenDialogEventListener","shareMode","isCCDFiveThree","openCollaborateURL","_sendApplicationEvent","_notifyLibraryCreated","notifyElementCreated","notifyElementChosen","notifyElementUpdated","notifyLibraryTempDir","dlElementOpenForEdit","dlElementReveal","dlElementChoose","dlElementChooseCancel","dlElementLinkCreated","dlElementDropped","dlCreateLibrary","dlSetCurrentLibrary","currentStateMethod","addDocumentChangeListener","removeDocumentChangeListener","_handler","eventPath","documentAfterDeactivate","documentAfterSave","NodeVulcanInterface","VulcanJS","vulcanjs","nodeVulcanjsPath","VulcanAdapter","_VulcanMessageLib","_VulcanControlLib","VulcanControlAdapter","sourceVersion","getAppDetails","_launchCCLibProcessV2","_launchCCLibProcessV1","convertMenuToNativeFormat","getMenuItem","submenu","ElectronEnvironment","disableCustomDragImage","useSVGLegacyHref","_callbacks","_electron","oldPath","tempFile","createWriteStream","sourceFile","createReadStream","finished","pipe","ipcRenderer","_onMessage","nodeConnector","nodeImslibPath","loadLib","imslibPath","_sendMessage","hasShown","remote","showErrorBox","extensionPath","USERPROFILE","HOME","processMenuItem","getCurrentWindow","buildFromTemplate","setSize","shell","openExternal","getAdjustedBoundingClientRect","elementDimensions","Unexpected_Events","PSEnvironment","__non_webpack_require__","hasUXPButtonStyleBug","hasUXPCaptureExtension","additionalCaptureCoreModules","closeContextMenu","flyoutDialogElement","removeContextMenu","suppressResizeGripper","_pluginInfo","pluginPath","uxpEntries","_onUXPStockDialogClosed","stockLicenseExtensionClosed","_deleteUndefinedKeys","_contextMenu","minItems","showFlyout","libraryElementCreated","libraryElementUpdated","libraryElementChosen","createLibraryResponse","addNotificationListener","removeNotificationListener","ElementOpenForEdit","ElementReveal","ElementChoose","ElementChooseCancel","ElementLinkCreated","ElementDropped","CreateLibrary","DragStarted","DragEnded","currentState","noOfDocuments","deleteFile","deleteTempFile","base64AToB","bits","base64BToA","B64_ALPHABET","o3","e3","e4","UXPContextMenu","renderMenuItem","setMenuRef","_menuRef","popupAt","UXPPanel","UXPAutoSizer","throttled","UXPMutationObserver","UXPVulcanInterface","uxpVulcan","vulcan","_dispatcher","dispatcher","_control","control","getInstalledAppsEx","_getInstalledApps","_getInstalledAppsV2","_getInstalledAppsV1","getInstalledApps","apps","sapCode","installed","isRunning","launch","broadcastMessage","OS_NAME","darwin","win10","UXP_THEME_MAP","REACT_SPECTRUM_THEME_MAP","useSVGPolyfill","hasNativeControlStyles","hasUXPInputClickBug","hasUXPInputSelectionRangeBug","hasUXPScrollWidthBug","hasUXPSelectBlurBug","hasUXPWindowsCTRLClickBug","hasUXPResizeBug","hasUXPTransformBug","hasUXPRevealElementBug","autoScrollNotSupported","maxLocalStorageLength","nativeIds","_stockExtensionOpen","_isLoggedIn","attributesProperty","IS_XD_TEST_ENVIRONMENT","IS_AI_TEST_ENVIRONMENT","IS_PS_TEST_ENVIRONMENT","newAttributes","visibilityState","randomUUID","applyPatches","_isReadyToRender","_updateTheme","licensing","isProductionEnv","clientScope","getAccessToken","forceRefresh","uxpConnector","domElement","_panel","renderManager","_manager","unmountManager","getUXPDialog","getFileForOpening","pluginFolder","getEntryFromDataFolder","entryName","getEntry","getBase64DataFromImage","imageAbsPath","formats","binary","read","arrayBuffer","arrayBufferToDataURL","pm","pluginManager","invokeCommand","_getManager","_managerInitPromise","_managerMountPoint","showModal","homedir","_flyoutMenu","getRootManagerElement","scrollBugFix","collectionView","scrollingContainer","maxScrollTop","registerElementNode","_nativeId","getNativeIdForElement","_getTheme","getTheme","panelNamedTheme","didFinish","stockLocation","stockPlugin","createPlugin","PLUGIN_TYPE_FIRST_PARTY","allowDebugging","enableDebugging","_enableStockDebugging","allowCodeGenerationFromStrings","addPlugin","stockExtension","RUNTIME_INITIALIZE","registerUxpModule","registerCoreModule","CCLibEventTarget","licenseData","unload","removePlugin","_isCheckingUser","checkIfUserIsValid","lstatSync","writePlainTextClipboard","appLanguage","appLocaleMap","FeatureTooltip","_setTooltipNode","_tooltipNode","XDTooltip","MissingFontsModel","XDCCLibrariesAPIs","_onLibraryChange","_api","_collapsed","addAssetsChangeListener","removeAssetsChangeListener","_reportChangedTimeout","_wrapMissingFont","getMissingFonts","ApplicationDialogView","localeMap","XD_THEME_MAP","_xdAnalyticsSubcategoriesAndSubtypes","Search","Manage","Navigation","Toast","Launch","_xdAnalyticsElementTypes","XDEnvironment","disableAPILoggingByDefault","_documentChangeAtom","_settingsChangeAtom","_colorProfileChangeAtom","_moduleCache","hasUXPScrollZIndexBug","_updateCloudAssetId","_cloudAssetId","_updateCloudStorageWritable","writableStatus","_hasWritableStorage","_handleXDMigrationDetection","shouldOfferDelimitedNamesConversion","_linkListeners","_libraryNameChangeDisposers","_libraryListChangeDisposers","_updateIsPaidUser","_isPaidUser","_XDCCLibrariesAPIs","isPaidUser","_coeditorPublishingHandler","_isCoeditorPublishing","dismissToastMessage","_coeditorFinishPublishingHandler","LIBRARY_SYNC_STATES","productVersion","_missingFontsModel","addCoeditorPublishStartListener","addCoeditorPublishEndListener","isCoeditorPublishing","getColorProfile","getScreenColorProfile","_waitForXD","waitForXD","getPermanentCloudUrn","isCloudStorageWritable","addPermanentCloudUrnListener","addCloudStorageWritableListener","addCanvasMouseDownListener","_onCanvasClick","addIsPaidUserListener","docInfo","_host","DOC_ID_CHANGE","docId","clearDocumentCache","USER_CHANGED_NAME","registerChangeCallback","addColorProfileChangeListener","initLibrariesApis","ccLibrariesAPI","ccLibrariesManager","getMultipleOrderStringsBetween","revealAssets","revealDocumentAssetsView","revealRootView","setItemViewMode","canEditElementInSource","editElementInSource","resolveElementReference","getLibraryById","getLibraries","addLinkStateListener","removeLinkStateListener","registerLibrary","addLibraryListChangedListener","removeLibraryListChangedListener","hasLibrariesLoadingError","addLibraryNameChangedListener","removeLibraryNameChangedListener","waitForInitialLoad","getServiceInfo","canRenameElements","renameElement","getSourceId","openApplicationDialog","waitForModalDialogClosed","dialogMountPoint","_renderApplicationDialog","REJECTION_REASON_NOT_ALLOWED","Dialog","listenerMap","CATEGORY_CC_LIBRARIES","_xdRequire","cloudAssetId","canSaveDocToCloud","hasAvailableStorage","getCloudStorageData","quotaTotal","quotaUsed","waitForCloudAssetId","getDocumentMimeType","documentSharingRole","cloudSharingRole","canEditDocument","isSavedCloudDocument","isCloudDocNamed","isSyncedCloudDocument","invitees","toggleShareSheet","formatShareSheetToast","toggleCCLibraryManager","isCCLibraryManagerVisible","getCurrentDocumentLibrary","getLinkedLibraryIdFromDocument","getPublishedDocumentLibraryId","linkDocumentToLibrary","publishedDocumentLibraryId","setPublishedDocumentLibraryId","documentPath","isLegacyDocumentLinkDeprecated","isDocumentLinkingDeprecated","handleUpgradeButtonClicked","removeIsPaidUserListener","baseData","_getGroupAnalyticsProperties","libraryGroupCount","groupID","groupClassifierName","classifierName","groupLevel","getGroupLevel","deleteGroup","storedExtraMetrics","renameGroup","reparentGroup","psdUtils","fontUtils","_shouldReportToXDAnalytics","_reportEventToXDAnalytics","reportCCLibraryActionAnalyticsEvent","subCat","subType","allowedEventValues","textEditModel","TextPropertyUtils","addTextEditListener","TextEditModel","TEXT_STYLE_UPDATE","TEXT_EDIT_MODE_CHANGE","TEXT_PROPERTY_CHANGE","removeTextEditListener","isCanvasTextEditInProgress","editInProgress","isDecoration","hasTextEditSelection","paddedSelection","featureTooltipProvider","registerFeatureTooltip","registerView","unregisterFeatureTooltip","unregisterView","getAppSetting","renditionService","Artboard","Line","SymbolGroup","Rectangle","BitmapFill","GraphicNode","containerTypeAllowsEditingContents","isInsideRepeatGridOrSymbolGroup","isEffectivelyEmptyGroup","swapNodes","origNode","SceneNodeUtil","centerImageInMask","replaceNodePreservingInteractions","isContainer","_selectionModel","selectionModel","sceneNodes","addSelectionListener","SelectionModel","SELECTION_CHANGE","ARTWORK_CHANGE","removeSelectionListener","addInviteEventListener","addShareSheetInviteSentListener","removeInviteEventListener","removeShareSheetInviteSentListener","editContextModel","findContainingArtboardsForSelection","progressController","incrementProgressValue","isProgressCancelRequested","recordHistory","comp_height","comp_width","dragDropEvent","AIToNode","tempAIToNode","normalizePath","SVGToNode","linkedGraphicRegistry","_getXDAssetDataForSVG","isSVGOrAGCImportError","parseAGCForImport","agcDocument","importUtil","importAGCComponentFromCCLib","importAGCNodeFromCCLib","failedItems","importedArt","assignBlurToNode","assignBlurForLoadingVector","_getTempPath","_tempDir","makeTemporaryFolder","_writeTextFile","deleteFileOrFolderSync","serializeCanonicalComponent","isNXDEnabled","primaryRepresentationForComponent","getPrimaryRepresentationForComponent","serializedSymbol","serializedSymbolString","canonicalComponentToSVG","getSVGRepresentationForComponent","canonicalComponentToPNG","getPNGRepresentationForComponent","nodeGuidsToAGC","getPrimaryRepresentationForSceneNodeGuids","nodeGuidsToSVG","getSVGRepresentationForSceneNodeGuids","nodeGuidsToPNG","getPNGRepresentationForSceneNodeGuids","characterStyleToPNG","getPNGRepresentationForCharacterStyle","getContextForNode","getSizeforFile","getSizeForAIFile","operationFn","undoLabel","artwork","startRecord","onFinish","endRecord","applyColorToSelection","colorOrGradient","applyColorFromDocumentAsset","applyColorFromCCLibrariesElement","applyCharacterStyleToSelection","charStyle","applyCharacterStyleFromDocumentAsset","applyCharacterStyleFromCCLibrariesElement","addAudioToDocument","applyAudioFromCCLibrariesElement","addToCanvas","selectAfterPlace","importData","setPosition","addImportedItemFromCCLib","addComponentToCanvas","addDropEventListener","DRAG_DROP","removeDropEventListener","representationTypeMap","xdConstants","XD_COLOR_REPRESENTATION_TYPE","XD_LINEAR_GRADIENT_REPRESENTATION_TYPE","XD_RADIAL_GRADIENT_REPRESENTATION_TYPE","XD_ANGULAR_GRADIENT_REPRESENTATION_TYPE","SYMBOL_REPRESENTATION_TYPE","_generateToastMessage","openApplicationToast","onDismiss","displayToastMessage","getMissingFontsCollapsed","toggleMissingFontsCollapsed","highlightOnCanvas","_getEditAnalyticsAction","notifySelectionChange","editMasterComponent","editColor","nativeId","editCharacterStyle","getDocumentEditActions","sourceRef","replaceFont","getAssetInstanceCount","ignoreLinkedElements","getNumInstancesOfAsset","linkedAssetId","migrateLinkReferences","updateData","migrateLinkedAssets","updateAndAddAllLinkedAssets","canUnlinkAssets","canAssetsBeMadeLocal","canDeleteAssets","canAssetsBeDeleted","unlinkAssets","makeLocal","relinkAssetsToDocument","relink","handleDocumentLinkingAssetNoLongerSupported","isPreviewActive","_isPreviewActive","startPreview","commitPreview","cancelPreview","isPreviewing","previewModeController","deleteAssets","openSaveAs","openSaveAsDialog","renameAsset","originalName","requestPublishStart","unlinkAssetsFromDocument","documentRef","removeFromLibrary","isXDFeatureFlagEnabled","featureFlagName","isFeatureFlagEnabled","isAltKeyDown","didNavigateToLibrary","_fetchInvitationsService","apiPath","utilName","reqMethod","reqBody","invitationsHost","reqOptions","getLibrariesInvitations","acceptInvitation","invitationId","recipients","canComment","recipient","getStockServiceURL","stockHost","_searchStockAssets","searchOptions","resultSize","renditionRetries","searchRetries","viaStockSearch","binaryDataToUpload","urlWithAuth","readFile","optionsQueryParameters","optionsQueryParams","filterKey","filterValue","productCode","newTemplate","newTemplateParams","mogrtApiVersion","getMogrtApiVersion","getSearchUIOptions","sBinaryData","fileParamName","POST_REQUEST_BOUNDARY","CRLF","DASHES","binaryData","ords","byte","getBinaryBuffer","transformRequest","prepareForBinaryUpload","Request","searchStockAssets","licenseAsset","licenseType","getStockAssetMetadata","Vulcan","_version","getTargetSpecifiers","targetSpecifier","cmdLine","requiredParamsValid","getAppPath","strStartsWith","TYPE_PREFIX","vulcanMessage","SCOPE_SUITE","DEFAULT_APP_ID","DEFAULT_APP_VERSION","DEFAULT_DATA","dataTemplate","payloadTemplate","xmlData","xmlStr","GetValueByKey","getTargetSpecifiersEx","productSAPCodeSpecifier","getAppPathEx","getEndPoints","getSelfEndPoint","Vulcan11","Vulcan7","SCOPES","FETCH_TOKEN_EVENT","CONFIGS","IMSInterface","NGLInterface","imsConnect","imsDisconnect","imsFetchAccounts","imsFetchAccessToken","userAccountGuid","serviceAccountGuid","imsRevokeDeviceToken","imsSetProxyCredentials","proxyUsername","proxyPassword","showAAM","redirectUri","imsGetCurrentUserId","getCurrentImsUserId","imsGetCurrentUserIdHelper","result2","imsConnectWithEndpoint","imsRes","imsFetchContinueToken","bearerToken","targetClientId","imsLogoutUser","imsFetchUserProfileData","imsAttemptSSOJumpWorkflows","openBrowser","clientID","targetScope","targetResponseType","targetLocale","imsFetchAccessTokenWithStatus","imsRevokeAccessToken","imsAAMIMSStatus","imsSSOStatus","IMS_SUCCESS","IMS_ERROR_FAILURE","IMS_ERROR_INVALID_ARGUMENTS","IMS_ERROR_CANCEL","IMS_ERROR_TIMEOUT","IMS_ERROR_HTTPFAILURE","IMS_ERROR_SSLFAILURE","IMS_ERROR_AUTH_PROXY_REQUIRED","IMS_ERROR_AUTH_PROXY_FAILED","IMS_ERROR_IN_ACCESS_IDP","IMS_ERROR_ANOTHER_REQUEST_IN_PROCESS","IMS_ERROR_IN_READ_USER_DATA","IMS_ERROR_IN_SAVE_USER_DATA","IMS_ERROR_IN_REMOVE_USER_DATA","IMS_ERROR_USER_DATA_NOT_PRESENT","IMS_ERROR_IN_READ_DEVICE_TOKEN","IMS_ERROR_IN_SAVE_DEVICE_TOKEN","IMS_ERROR_IN_REMOVE_DEVICE_TOKEN","IMS_ERROR_DEVICE_TOKEN_NOT_PRESENT","IMS_ERROR_INVALID_DEVICE_TOKEN","IMS_ERROR_CLIENTID_NOT_PRESENT","IMS_ERROR_IN_FETCH_USER_ACCOUNTS","IMS_ERROR_IN_SAVE_USER_FOR_CLIENTID","IMS_ERROR_DEVICE_ID_NOT_PRESENT","IMS_ERROR_DEFAULT_USER_FOR_CLIENTID_NOT_PRESENT","IMS_ERROR_NO_USER_RECORDS_PRESENT","IMS_ERROR_ACCESS_DENIED","IMS_ERROR_INVALID_REQUEST","IMS_ERROR_INVALID_CLIENT","IMS_ERROR_INVALID_GRANT","IMS_ERROR_UNAUTHORIZED_CLIENT","IMS_ERROR_UNSUPPORTED_RESPONSE_TYPE","IMS_ERROR_INVALID_SCOPE","IMS_ERROR_UNSUPPORTED_GRANT_TYPE","IMS_ERROR_BAD_REQUEST","IMS_ERROR_INVALID_CREDENTIALS","IMS_ERROR_IN_GET_AUTH_DATA_FROM_IDP","IMS_ERROR_IN_GET_DEVICE_TOKEN_FROM_IDP","IMS_ERROR_IN_GET_REFRESH_TOKEN_FROM_IDP","IMS_ERROR_IN_GET_ACCESS_TOKEN_FROM_IDP","IMS_ERROR_IN_GET_PROFILE_DATA_FROM_IDP","IMS_ERROR_TOU_CHANGED","IMS_ERROR_IN_REVOKE_DEVICE_TOKEN","IMS_ERROR_TOU_NOT_CURRENT","IMS_ERROR_EVS_INVALID","IMS_ERROR_ACCT_ACT_REQ","IMS_ERROR_ACCT_DISABLED","IMS_ERROR_SUBS_ACT_REQ","IMS_ERROR_SUBS_NO_SUB","IMS_ERROR_NO_BUDDY_GROUP_FOR_CLIENT","IMS_ERROR_CLIENT_REGISTERED_FOR_OTHER_GROUP","IMS_ERROR_GROUP_ENTRY_NOT_PRESENT","IMS_ERROR_IN_SAVE_GROUP_DATA","IMS_ERROR_CNAME_ENTRY_NOT_PRESENT","IMS_ERROR_IN_SAVE_BACKOFF_DATA","IMSMANAGER_ERROR_EXCEPTION","IMSMANAGER_ERROR_ENCODING","IMSMANAGER_SUCCESS_BROWSER_OPENED","IMSMANAGER_ERROR_BROWSER_FAILED_TO_OPEN","IMS_UNKNOWN_ERROR","nglImsFetchAccessToken","imsFetchProfile","nglImsFetchProfile","SUCCESS","RESULT_PENDING","NOT_CONFIGURED","ALREADY_CONFIGURED","NOT_IMPLEMENTED","INVALID_PARAM","INVALID_CONFIG","INVALID_NID","INVALID_APP_ID_ERROR","INVALID_APP_VERSION_ERROR","INVALID_PROFILE_STATUS","SIGNIN_UNAVAILABLE","FEATURE_UNAVAILABLE","INVALID_OPERATING_CONFIG","TRANSIENT_BUILD_EXPIRED","INVALID_URL","NETWORK_ERROR","PROXY_AUTH_REQUIRED","UNAUTHORISED_SERVER_CALL","HTTP_REQUEST_CANCELLED","HTTP_REQUEST_TIMEDOUT","HTTP_FAILURE","HTTP_SSL_FAILURE","HTTP_BAD_REQUEST","NO_CONTENT","EXCEPTION_RETRIEVING_LATEST_COP","FAILED_TO_VERIFY_LATEST_COP","FAILED_TO_PARSE_LATEST_COP","COP_RETRIEVAL_FAILED","FAILED_TO_SAVE_NGL_PROFILE_LOCALLY","FAILED_TO_FETCH_PRINCIPAL","FAILED_TO_FETCH_CACHED_NGL_PROFILE","FAILED_TO_PARSE_CACHED_NGL_PROFILE","FAILED_TO_DELETE_CACHED_NGL_PROFILE","NGL_PROFILE_STORAGE_FAILURE","DEVICE_ID_PRINCIPAL_MISMATCH","LATEST_COP_PRINCIPAL_MISMATCH","LATEST_COP_DEV_TOKEN_HASH_MISMATCH","ACCESS_TOKEN_COULD_NOT_BE_FETCHED","LATEST_COP_COULD_NOT_BE_SAVED_LOCALLY","LATEST_COP_RUNTIME_MODE_MISMATCH","LATEST_COP_APP_ID_MISMATCH","PRINCIPAL_NOT_FOUND","PRINCIPAL_STORAGE_FAILURE","INVALID_DEVICE_TOKEN_TO_FETCH_ACCESS_TOKEN","CACHED_NGL_PROFILE_PRINCIPAL_MISMATCH","RUNTIME_MODE_MISMATCH_IN_CACHED_NGL_PROFILE","APP_ID_MISMATCH_IN_CACHED_NGL_PROFILE","ACCESS_DENIED_TO_SAVE_NGL_PROFILE","ACCESS_DENIED_TO_GET_CACHED_NGL_PROFILE","ACCESS_DENIED_TO_DELETE_CACHED_NGL_PROFILE","ACCESS_DENIED_IN_STORING_PRINCIPAL","CACHED_NGL_PROFILE_NOT_FOUND","WORKFLOW_RETRIEVAL_FAILED","FAILED_TO_CREATE_REQUEST_BODY","FAILED_TO_FETCH_SUSI_WF","FAILED_TO_FETCH_WF","FAILED_FETCH_IMS_JUMP_TOKEN","FAILED_TO_PARSE_WF_JSON","INVALID_WF_TYPE_IN_REPSONSE","PARSING_ERROR","STORAGE_PARSE_ERROR","STORAGE_ACCESS_DENIED","STORAGE_READ_ERROR","STORAGE_WRITE_ERROR","STORAGE_DELETE_ERROR","STORAGE_DATA_NOT_FOUND","STORAGE_INSUFFICIENT_MEMORY","STORAGE_INSUFFICIENT_SIZE","STORAGE_DATA_CONVERSION_ERROR","STORAGE_DATA_RETRIEVAL_ERROR","INVALID_ASNP_FRL_FILE","CANNOT_FETCH_WITH_NGLU_NOTIFIED_TOKEN_TEMPORARILY","SESSION_ID_MISMATCH","FAILED_TO_LOAD_DATA_FROM_STORAGE_TO_MEMORY","CLOCK_ROLLED_BACK","CACHELIFETIME_ELAPSED","NPDID_PRINCIPAL_MISMATCH","EXCEPTION_ID_MISMATCH","UNLICENSED_APP_DENY_COPS_CALL_PRINCIPAL_INVALID","IMS_ERROR_JUMP_URL_HANDLING_REQUIRED","IMS_ERROR_ACCT_PASSWORD_UPDATED","IMS_ERROR_ACCT_MIGRATE","IMS_ERROR_ACCT_DOB_AGE","IMS_ERROR_ACCESS_DENIED_NON_T1","IMS_ERROR_UNKNOWN_ERROR","IMS_ERROR_ACCESS_DENIED_T1","IMS_ERROR_RETRY_REQUEST","WORKFLOW_REQUIRED","PROFILE_EXPIRED","PROFILE_UNAVAILABLE","PROFILE_DENIED","PROFILE_OVERACTIVATED","PROFILE_LOCALE_RECONFIGURE","PROFILE_SIGNIN","PROFILE_SIGNOUT","PROFILE_REFRESH_NEEDED","INTERNAL_ERROR","RUNTIME_ERROR","GENERIC_FAILURE","USER_ABORT","NGLMANAGER_ERROR_EXCEPTION","NGLMANAGER_ERROR_ENCODING","_nglInterface","CEPNGLInterface","_imsInterface","CEPIMSInterface","_imsRefCache","getEnvironment","ims","_getAccessTokenCEP","interfaceInstance","resolveAccessToken","getToken","funcParams","_getAccessToken","tokenPromise","environmentType","processEnvType","productEnvType","envType","_accessTokenCache","_getAccessTokenPromise","clearAccessToken","hasValidUser","getLoginURL","redirectURI","getCurrentUserIdHelper","decodeToken","extractUserDataFromToken","decoded","user_id","client_id","STORE_OFFLINE","CONTENT_CATEGORY_OPTYPE_OVERRIDES","UNKNOWN_EVENT_ATTR_VALUE","_ingest","Ingest","IngestAPI","isInitialized","postEvent","setEnabled","OFFLINE_TYPEKIT_EVENTS_KEY","IGNORED_ERRORS","STOCK_EVENTSOURCE","SEARCH","CONTEXT_MENU","extraElementMetrics","_recordedEvents","reportError","_recordEvent","recordedEvents","clearRecordedEvents","productLocation","userAccountStatus","userProfile","accountType","RelationshipProfile","appEntitlementStatus","accountStatus","setEnvironment","product","consumer","addProductHeaders","rawStateOnly","currentUserId","_enabled","analyticsApiKey","_checkEnabled","setForceEnableAnalytics","setUserId","hasUserChanged","isOfflineError","_initializeIngest","brands","publishedCount","unpublishedCount","isUnpublishedBrand","_reportInitializeEvent","currentLibraryElementCount","initData","setExtraEventMetrics","getExtraEventMetrics","clearExtraEventMetrics","_getApiReportGroup","_getApiReportElement","reportStoredOfflineEvents","offlineEvents","reportElementEvent","workflow","elementProperties","_getElementProperties","_extendProperties","reportGroupEvent","groupProperties","_getGroupProperties","shouldDisableMetricsEvent","currentLibraryProperties","_getLibraryProperties","basePayload","createBasePayload","actionUrl","updateEventPayload","localReports","contentKey","payloadKey","payloadValue","error_code","error_type","reportSearchEvent","reportStockEvent","reportOutgoingUrlEvent","baseUrl","isStock","_getAPIElementUpdateType","_getAPIGroupUpdateType","reportAPIEvent","disableReport","overrideCategory","addElementCategory","contentElement","reportLibraryEvent","groupId","getRootGroupType","updateType","groupOrder","numberElementsInGroup","_reportToProduct","reportAPIError","reportUseElement","isRightClick","_getUIPayload","reportCreateLink","reportCheckoutElement","reportPublishBrand","reportUnpublishBrand","optionsArray","isOperationalEvent","corpId","ENVIRONMENT","ANALYTICS_ENABLED","ANALYTICS_API_KEY","ANALYTICS_X_PRODUCT","ANALYTICS_X_PRODUCT_LOCATION","ANALYTICS_USER_AGENT","author","context_guid","library_storage_type","_libraryStorageType","trackingData","tracking_data","linkedData","linkedElementLibrary","linkedLibraryType","asset_linked_data","createdContext","mimetype","addtionalMetaData","_getElementMetaData","additionalProperties","assetRoleInfo","customElementData","_getColorElementMetaData","_getFontElementMetaData","_getImageElementMetaData","SUBTYPE","WORKFLOW","SUBCATEGORY","CrudResult","operationalIngestClient","initializeOperationalMetrics","getElementPayload","getLibraryPayload","addExtraMetrics","sendCreateLibraryEvent","baseEventAttrs","sendLibraryEvent","sendCopyElementEvent","sendElementEvent","sendCreateElementEvent","sendDeleteElementEvent","sendDeleteLibraryEvent","sendDuplicateElementEvent","sendMoveElementEvent","sendMoveLibraryEvent","sendPublishLibraryEvent","sendUpdateElementEvent","Sentry","AppRequestManager","_editRequestRefs","_chooseRequestRef","setEditRequestRef","getEditRequestRef","clearEditRequestRef","setChooseRequestRef","getChooseRequestRef","getUsablePathForElement","_appRequestManager","invokeChooseElement","selections","cancelChooseElement","openElementForEdit","revealElement","reportElementLinkCreated","reportElementDropped","usedRepresentation","enforceUniqueName","makeCurrent","setCurrentLibrary","invokeVisualSearch","deleteFileAfterUse","launchCaptureWorkflow","imageUriList","startDragFromProduct","endDragFromProduct","_getElementEventData","startListening","stopListening","sendElementCreated","sendElementChosen","elementEditCompleted","VULCAN_PREFIX","handlePortDiscoveryCall","requestType","requestPayload","responseHandler","timeoutId","timeoutExpired","_dialogs","_openDialog","_closeDialog","dialogs","dialogClass","_currentDialog","canDisplay","_onCloseCallback","guidExpr","_nextListenerId","_listenerMap","_onDocumentStateChangeEvent","listenerMatchPath","tempFileId","_updateModifiedTimestamp","_getNewListenerId","mtime","_ensureListener","numListeners","guidMatch","_activate","_groupActivateTimeout","isHoldingDrag","onActivate","onDeactivate","_groupPopoverTrigger","draggedGroups","isReadOnlyGroups","isNewElement","_dropElements","_handleDropOnType","ignoreInternalReorder","StockDragManager","_handleElementDropped","dragEndState","_dragManager","elementDroppedEventReceived","_validateCreateElementPreconditions","_getLicenseType","_createElement","dragThumbFormat","dragThumbSize","thumbnailDetails","saveRenditionSync","didCreateElement","updateLicensedStockElements","cleanup","didDropSucceed","_hooks","_handleGlobalDrop","_reportAppliedElement","_handleDragOver","_dragClone","visibility","setActiveDropTarget","rectX","rectY","xOffset","_dragType","registerHook","_dragData","_activeDropTarget","holdingDropTarget","_holdingDropTarget","dragHandler","populateDragImageNode","dropEventTypes","afterOrder","beforeOrder","orders","handleHoldDragEnd","handleHoldDragStart","_setHoldingDropTarget","representationForMetrics","_fetchFloodgateService","userEmail","userOrg","projectedProductContext","prodCtx","owningEntity","getFloodgateURL","getFeatures","releases","_currentUserId","arraysOfFeatures","accumulator","floodGateFeatures","_featuresSet","_loaded","hasLoaded","_listening","_lastSelectionChange","_currentDocumentPath","_layerInfo","updateLayerInfo","_updatingPromise","_getDocumentState","_hasCurrentDocument","handleSelectionChange","_selectionChangeTimeout","getCurrentDocumentName","getCurrentDocumentPath","hasDocumentOpen","ProgressiveLoaderWrapper","progressiveLoader","_progressiveLoader","isComplete","SyncState","_libraryManager","_launchProcess","_setProcessState","_processState","_loadingTimeout","_loginTimeout","establishConnectionWithProcess","_startProcessTimeout","isAppLoggedIn","_connectionState","updateRequired","portDiagnosis","showTestUrl","connectionPort","_ccLibraries","connectionState","_loginState","_secondsToRetry","_retryInvalidator","secondsToRetry","millisecondsToMinutesAndSeconds","_syncState","commitError","primaryError","getPrimarySyncError","transformErrorCodeToErrorType","_isWorking","_accessState","ACCESS_DENIED","_initialState","shutdownWarning","stringifyGroups","elementGroupsData","diffElements","targetLibrary","sourceLibrary","DiffElements","diffGroups","documentGroups","DiffGroups","DiffItems","targetItems","sourceItems","sourceGroupTree","targetGroupTree","_targetItems","_sourceItems","_sourceGroupTree","_targetGroupTree","_sourceMap","_newItems","_unchangedItems","_itemsToUpdate","_itemsToDelete","_itemsToDiff","_computeDiff","_sourceDepthMap","unchangedItems","itemsToUpdate","hasChanges","updates","reduceItem","_visitItem","_isDeleted","_ignore","targetOrderMap","_createOrderAndDepthMap","sourceOrderMap","sourceDepthMap","_targetOrderMap","_sourceOrderMap","_diff","groupTree","orderMap","depthMap","visitData","getSourceInstanceId","_assetTypeChanged","documentGroup","sourceParent","publishedParent","PublishState","_assetsContainer","_publishedLibrary","logDiff","states","groupDiff","DocumentAssetsUtils","elementDiff","syncErrors","_canSaveDocToCloud","_hasLibraryAccess","_hasDocumentAccess","_documentAssetsCount","_hasPublishableContent","_isOversizedDocument","OPERATION_MAP","_getTypekitDomain","unsync","entitlements","typekitHost","doFontOperation","getURL","httpMethod","userID","_fetchRequest","httpRequest","TypekitFont","getFontDataFromProcess","_postScriptName","_getFontDataFromProcess","_getFontData","_variationDetails","font_id","required_action","_fontSyncing","getCachedSystemFontAvailability","variationDetails","metricSubType","errorDesc","AdobeTypekitRest","fontUpgradeURL","_fontMap","_fontAvailableMap","_hasFetchedFontAvailability","_hasRefreshedFontData","_pendingFontAvailabilityPromises","_fontManager","getFontData","isSystemFontAvailable","matchFamily","isAvailable","_getSystemFontAvailabilityFromProcess","INIT_CCLIBS","isConnected","getLocalSetting","resolveLibraryReference","resolveCachedLibraryReference","resolveElementReferenceToLibrary","resolveCachedElementReferenceToLibrary","resolveCachedElementReference","JSAPI_SEARCH_TYPES","UPLOADING","DOWNLOADING","DONE","LibraryManager","ccLibrariesModel","_restorePreviousCurrentLibrary","localStorageLatestLibraryId","_getCurrentLibraryIdKey","currentLibraryId","shouldShowRootIntroOnboarding","_findNextCurrentLibrary","_onLibrariesConnectionChange","operationalMetrics","featuresSet","changeDriver","updatedOptions","enableBrandLifecycleManagement","includeApprovedBrandsInLibraries","cloudDriver","updateOptions","CCLibraries","sentrySetUser","_onAreLibrariesLoadedChange","_initLegacyActiveLibrariesMap","showRootViewOnboarding","teamUrn","_collaborationData","_invitationsData","_teamLibrariesData","loadCollaborators","_getInvites","invitationData","resourceType","resourceURN","_throttledFetchInvitations","_secondsConsideredRecent","_tempDirDisposer","_onSyncStateChange","_detectBrokenLinksAndOfferResolution","checkInvitesAndTeamLibAccess","_migrateLinkReferences","publishStatus","_legacyActiveLibraries","_legacyGetLibraryActiveKey","tempDir","getSearchResults","elementSort","searchViewState","legacySearchGenerator","findMatchingElements","searchLoader","ProgressiveLoader","byteMultiplier","storage_available","_localizeGroup","_cachedLocalizedNames","defaultLocale","localeToStringMap","parsedStringsMap","getAllLocalizedStrings","localizedName","setLocalizedName","_updateGroupParents","publishResults","documentGroupToGroupMap","documentGroupParent","groupParent","_publishGroup","existingGroup","_publishGroups","newDocumentGroups","groupsToDelete","groupsToUpdate","unchangedGroups","groupPromises","checkForDependents","showUndoToast","hasSeenWarning","_updateGroupsMetadata","_publishElement","updateContent","restoreElement","sourceRefString","elementConfig","_updateElementDependencies","assetIdToElement","errorElements","rootSourceId","filteredAssetIds","hasMissingDependencies","missingIds","syncStateCompleteListener","preStateHit","syncStateTimeout","syncStateDisposer","_requestPublish","_isPublishing","_clearPublishQuotaErrorListener","linkToDocument","_publishedLibraryIdDisposer","previousPlaceHolderId","_publishToLibrary","elementPromises","newAssets","elementsToDelete","elementsToUpdate","unchangedElements","logProgress","publishCompleteResolver","completePromise","syncStateCompleteDisposer","_startPublishQuotaErrorListener","documentLinkedLibraryId","includePartiallyLoadedLibraries","isLibraryLoaded","partiallyLoadedLibraries","allLibraries","numRecentLibraries","lib1","lib2","getLastAccess","getLibraryByToolkitId","tooltkitId","_currentLibrary","_clearDeletionListener","_clearElementLoadCheckListener","_clearDocumentChangeListener","_clearAssetIdChangeListener","currentLibraryDateKey","_elementLoadCheckListener","isTransient","libraryStillExists","_deletionListener","nextLibrary","_assetIdChangeListener","localCachedLibraryId","_documentChangeListener","showLibraryOnboarding","getTempDir","isBrandKitMode","setBrandKitMode","mostRecentLibrary","mostRecentAccess","lastAccess","removeLibraryResponse","removeLibrary","moveLibraryResponse","importLibrary","exportLibrary","permanentlyDelete","MAX_REMOVED_ELEMENTS","performanceTimer","undoableDeletes","isPermanentDelete","disableNonPermanentDelete","deleteEmptyAncestors","allElements","descendants","curr","emptyAncestors","ungroup","shouldShowDeleteNestedGroupContents","groupToRemove","showDeleteNestedGroupContents","restoreElements","moveElement","getOverflowLibrary","copyElement","getRecoveryLibrary","teamLibrariesData","_relinkableAssetsData","acceptInvitePromises","adobeAsset","isDiscarded","includeRemovedElements","libRef","resolveLibraryById","resolveLibraryByAssetId","missingLinksSourceRefs","scanForLegacyLinkMatches","legacySourceIdentifier","matchingSourceIdentifier","wrapElement","processInfo","getSNISettings","utils","shouldSync","_activeLibraries","_activeLibrariesKey","_recentlyActiveLibraries","_updateRecentlyActiveLibraries","setTimeoutId","_isLoadingAppLoggedInState","_isAppLoggedIn","_dependencies","ccLibraries","_onLibrariesChanged","_librariesAtom","cleanLibrariesCache","_onLocalSettings","_localSettingsAtom","_onSync","_syncAtom","clearCache","_removeAllListeners","DANGEROUS","wrapLibrary","libraryRef","setOption","setLocalSetting","getRootDir","reconnect","connected","canAccessLocalProcess","registerDependencies","getFileSize","getInstalledVersion","_nglEventListener","disableLocalFallthrough","disablePreemptiveLibraryLoad","disableFallbackDefaultLibrary","skipConnectingOnInit","enableGenStudioAPIs","mobXCreateAtom","mobXTransaction","CloudDriver","fileSystemCache","renditionSizes","apiKey","commitedEvents","reportCallback","_isConnected","maintainConnection","_disconnectTimeout","disconnectTimeoutDuration","_publishQuotaErrorListener","_clearPublishedLibraryListener","_clearTempDirListener","MAX_COMPONENT_SIZE","DEVICE_DESCRIPTION","RETRYABLE_SERVER_ERROR","LOGGED_OUT","FS_ERROR","REQUEST_FAILED","accessed","_getLibraryWithName","allowOverride","extractPathElementId","extractElementId","extractPathGroupId","extractGroupId","callbackWithDigest","launchBrowseAllURL","launchMarketplaceURL","openCCWebMarketplace","launchCCWebMarketplaceURL","waitForLibrariesLoaded","timeToWait","getUserId","transientProgress","FIXED_CONSTANTS","LibraryProcessManager","_cclibraryProcessLaunchPending","isProcessInstalled","disconnectFromProcess","_clearAndResetProcessConnectionPolling","_clearAndResetProcessLaunchPolling","_cclibraryProcessLaunchPolling","_cclibraryProcessConnectionPolling","launchCCLibraryProcess","startLibrariesProcess","getLocalMachineSetting","setLocalMachineSetting","syncingEnabledChangedListener","jsonResponse","vulcanSyncState","genericErrors","addSyncStateChangedListener","syncStateChangedListener","transformSyncState","removeSyncStateChangedListener","_pendingElementsMap","incrementPendingElements","decrementPendingElements","canAddElements","numberOfNewElements","uploadingElementsInProgress","LibraryModel","getSize","getSizeAsString","LibraryLink","AssetLink","assetLink","_disposeLinkChangeListener","linkStatus","getLocalData","libraryAsset","cloudID","repositoryID","_resource","getNewLinkRef","_links","_embedded","getRenditionURL","primaryContentURL","primaryContent","_linkedPrimary","_linkedRendition","templated","embedded","reltype","component_id","alternativeLinkedElement","fragmentInstanceId","fragmentName","_getNewLinkRef","SAMEnvironment","LinkManager","_completeInit","areLogsEnabled","CLIENT_ID","USER_ID","HOST_PRODUCT_DATA","PRODUCT_ID","PRODUCT_LOCATION","initializeSharedAssetModel","_assetModel","MESSAGE_LOGGED","_handleSAMLogEvent","_linkManager","assetLinkManager","_linkList","createList","makeObservable","linkList","_addLink","CCLibrariesUtils","isLibraryLinkReference","addLink","removeLink","_link","getAssetWithCloudID","hostAssetContext","resolveProjectByName","projectContext","_locks","obtainLock","lockName","continuation","thisObject","pendingContinuations","releaseLock","getTranslatedMenuXML","Label","Checkable","Checked","Enabled","subMenuItems","translateLabels","getMenuData","makeMenuItemMapping","mapping","getFlyoutMenu","includeDebugItems","_getFlyoutMenu","_onFlyoutMenuClicked","_flyoutMenuMapping","_onFlyoutMenuOpened","flyoutMenuOpen","_onFlyoutMenuClosed","_pendingFlyoutMenuItems","_setFlyoutMenu","oncontextmenu","commonOnClick","openContextMenu","_tempFileMap","_getFilePath","rawAssetName","includeGuid","maxFileNameLength","_copyToTempLocation","savePath","getTempFile","updateTempFile","__test__","getCurrentLibraryInfo","setFilePath","_filePath","getFilePath","getFilesToImport","_files","setFilesToImport","File","lastModified","enableAddElementMenu","layerInfoObj","selectElements","elementNames","elementsToSelect","disableSync","isCSSLoaded","styleSheets","cssRules","selectorText","loadTheme","use","unloadTheme","unuse","_roots","_onAppThemeColorChanged","_fetchStyles","STYLES_URL","_globalStyleTag","endsWith","_addGlobalCSSAsStyleTag","_finishedInitialization","globalStyleTag","newStyle","themeSystem","addRoot","isThemeLoaded","_theme","_waitForBackgroundColor","removeRoot","_replaceTheme","newTheme","oldTheme","_validateAppSkinInfo","appSetColor","updatedTheme","getStr","computedValueStr","toHex","best","loadingPromise","loadCSS","_loadingPromise","ThumbnailDataCache","_fetchId","_blobCache","_isLarge","blobSrc","revokeObjectURL","_elementModified","cacheExpiry","isRemovedFromLocalCache","_modified","_update","fetchId","loadDelayTimeout","onFinished","_getThumbnailUrl","_getThumbnailBlobUrl","cachedUrl","_thumbnailCache","_deletionListeners","_clearThumbnailData","cacheEntry","_addDeletionEventListener","_getThumbnailData","uniqueKey","keepaliveTimeout","isThumbnailLoading","thumbnailDataCache","BaseToast","isFadingOut","fadeout","BaseUndoToast","undoDelete","UndoDeleteElementsToast","toastName","numGroups","UndoDeleteGroupToast","UndoDeleteDescriptionToast","MessageToast","ActionMessageToast","UndoMergeGroupsToast","SyncProgressToast","_toasts","toastRefId","_forceClose","toastClass","ToastClass","PROJECTS_SUFFIX","PROJECTS_OVERRIDES","_formatters","_testStringMap","__testStringMap","setStringMap","stringMap","_stringMap","translated","getLocalizedNumber","dateTime","dateOnly","dateStyle","timeStyle","DateTimeFormat","NumberFormat","_pendingPromises","pluginVersion","getPluginVersion","manifestPath","strManifest","xmlParser","PLUGIN_VERSION","getUserAgent","VULCAN_APP_READY","VULCAN_DATA_IMPORT_RESOURCE","openInEligibleApps","install","supportedAppsByMimetype","sendToSubstance3DApp","checkAppIsRunningOrLaunch","running","checkAppIsReady","appReadyTimeout","appReadyRequestInterval","appReadyCallback","getOpenInThreeDAppMenuItem","eligibleApps","eligibleTypes","actualType","appInfo","maxItemLimit","installLabel","allowDocumentLibraries","allowUnloadedLibraryWrite","getSingleElementMenuItems","isAudio","canDisplayStockMenuItems","getThumbnailUrl","getAuthenticatedThumbnailURL","thumbnailUrl","getStockMenuItems","getTypekitMenuItems","getContentMenuItems","replaceableExtensions","isLogo","replaceTypeError","fileTypes","getFilesUsingHTMLFileDialog","extOfSelected","fileNameToExtension","replaceElementFromFile","doReplaceGraphic","additionalMenuItems","onNoteOperationClick","destinationPath","fullDestinationPath","sourcePath","doExportPrimaryRepresentation","showGetInfo","targetGroup","preserveGroups","isDuplicate","copyString","numberElements","reportOperationalEvent","groupType","getAssetLinkingMenuItems","libraryLinks","documentLinks","notRelinkable","allRelinkable","singleTypeSelection","validLibraryRelinkSelection","getCopyMoveMenuItems","parentLibraries","elementsAndDependencies","getElementsAndDependencies","canCopyElements","canMoveElements","canDuplicateElements","copyMoveItems","itemsMoveLabel","_getCopyMovePickerItems","getMultiElementMenuItems","openInAppMenuItems","areAllElementsUngrouped","canUngroup","groupMenuItems","areAllElementsSameGroup","existingGroups","getGroupMenuItems","isOwnedLibrary","objectsMap","launchFile","formatShortDate","epochTime","getMonth","getDate","getFullYear","formatShortTime","minutes","getMinutes","getHours","Authorization","resources","resourceUrn","BrandsOnboardingStates","EDIT_TUTORIAL","DRAFT_TUTORIAL_STEP_1","DRAFT_TUTORIAL_STEP_2","DRAFT_TUTORIAL_SKIPPED","PUBLISH_CHANGES_TUTORIAL","onboardingState","onboardingStateString","clearAll","setOnboardingState","getOnboardingState","mappedValue","storedValue","_getLibraryOperationItems","isLibraryDeletedFromServer","enableLibraryActions","includeSendLink","includeCollaboration","includeRename","includeUnfollow","includeRemove","includeExport","includeAutogenerateGroups","teamItems","enablePromote","enableUnfollow","_getTeamLibraryItems","includeViewOnWebsite","includeViewArchive","includeProvideFeedback","_getDebugInfoItems","elementsOfType","elementSummary","libraryInformation","DebugUtils","tempFilePath","StringUtils","writeFileSync","processVersion","codeVersion","buildNumber","resetManagerOnboardingState","stockSimulationTargetAppCode","targetAppCode","resetOnboardingState","brandsOnboardingUtils","_getDebugHelperItems","toolkitLibraries","toolkit","_getDebugToolkitItems","loadVersionHistory","libraryPromises","_libraryVersion","envLabel","_getDebugEnvironmentItems","includeImport","_getCreateLibraryItem","getProductMenuItems","productMenuItems","_getViewOperationItems","getGroupAddElementsMenuItems","_handleCreateSubgroupClick","analyticsCategory","selectionCommonAncestor","canGroupMultiselect","canPerformElementOps","elementsInGroup","availableLibraryMap","getWritableLibraries","hasWritableTargets","canCopyGroup","canMoveGroup","getNestedGroupsCopyMoveMenuItems","renameOp","editPathOp","renameOrEditOp","modifiedContext","wasModifiedLocally","wasCreatedLocally","BaseLibraryModel","loadElements","BaseWrappedElementModel","_waitForSetThumbnailCache","_copyThumbnailPromises","_pushPendingElementChanged","cleanRepresentationsCache","getLocalizedName","wrapGroup","removeExistingGroups","descriptionModified","descriptionModifiedBy","descriptionModifiedContext","wasDescriptionModifiedLocally","removedBy","removedContext","wasRemovedLocally","wrapRepresentation","getRepresentationById","preserveThumbnail","removeRepresentationFromCache","removeRepresentationsCache","_copyThumbnailToTempDir","getTempPath","copyPromise","_removeCopiedPath","copiedPath","unlink","_finishedSetThumbnailCache","newPathToThumbnail","supportsVectorThumbnail","GroupModel","getLocalizedNames","BaseWrappedLibraryModel","classifier","changeAtom","_pendingElementChangeAtoms","_onChangeElements","changeAtoms","cleanElementsCache","cleanGroupsCache","publicLinkId","composite","_dcxComposite","resourceId","bookmark","isParentWritable","isQuotaExceeded","lastPublishedVersion","extractedFrom","sortObject","removedElementCount","documentationElements","documentationElementCount","excludeRemovedElements","permanentlyRemove","removeElementFromCache","removeElementsInGroup","removeGroupFromCache","copyGroup","moveGroup","renditionType","getRenditionPath","getAuthenticatedRenditionURL","setRendition","removeRendition","setRenditionFromPath","rebindToServer","keepModifiedTime","_pendingChanges","assetsToRemove","filterElementsInPlace","_sendPendingChanges","_sendChange","_onLinkChange","updateLink","_updateRepresentations","_representations","repData","isLocalUpdate","previousLinkReference","_updateLock","doLockedUpdate","updateFn","removeLock","_getLinkedAssetRenditionURL","etag","cancelTimeout","renditionURL","canRelink","messageType","messagePayload","preserveModifiedTime","contentURL","linkRef1","linkRef2","getAssetLinkRef","newLinkRef","permissions","samPermissionName","hasPermission","updateWithLinkRef","getNewAssetLinkRef","repositoryId","fragmentIdentifier","RepresentationModel","_onSyncChange","externalLinkDownloadProgress","_lastExternalLinkDownloadProgress","isFullSize","isMetadata","setContent","setContentFromURL","createLink","getAuthenticatedContentURL","testExternalLink","clearCachedExternalLink","documentAssetsContainers","_librariesCache","_libraryObjectToModelMap","_elementsByLibraryCache","_groupsByLibraryCache","_assetsByDocumentCache","_assetsContainerCache","_groupsByDocumentCache","_wrapRepresentation","elementsByLibraryCache","Model","elementsCache","representationsCache","representationsById","_cleanRepresentationsCache","elementsCacheEntry","newRepresentationsCache","_wrapElement","_removeElementFromCache","_cleanElementsCache","newElementsCache","_wrapGroup","groupsByParentCache","groupsCache","_removeGroupFromCache","_cleanGroupsCache","newGroupsCache","librariesCache","libraryObjectToModelMap","newLibrariesCache","newLibraryObjectToModelMap","isMockBoundToCCLibraries","makeBrowserOfflineTransport","makeFetchTransport","inAppStackPattern","iteratee","inlineScript","tracesSampleRate","beforeBreadcrumb","dataset","_cdtXHR","beforeSend","searchStockWithContext","debouncedSearchStockWithContext","_currentSearchContext","_searchResults","_hasSearchFailed","_isOnLine","getFindSimilarData","getStockSearchOptionValuesArray","searchOption","_handleOnLineTransition","shouldDebounce","_handleSearchSuccess","_handleSearchFailure","searchContext","_persistSearchOptions","serializedOptions","launchFindSimilarURL","ROLE_SECTIONS","_getElementSection","_focusedElement","_selectedElements","_allElements","_allElementsInViewOrder","setItemPendingScroll","_itemPendingScroll","ensureSelection","setFocusedElement","doScroll","forceExpand","expandSection","collapsedType","_lastSelectedElement","_lastSelectedElementWithShift","selectingEntireGroup","pivot","lastInSelection","firstInSelection","clearSelection","toggleSelection","revealElements","revealGroup","snapToGroup","_disableScrollEasing","itemPendingScroll","lastSelectedElementWithShift","currentFocusedElement","clearItemPendingScroll","addSelectionChangedListener","shouldEaseScrolling","desiredGroup","groupSelection","includeDescendants","groupsToChange","_selectedGroups","getSelectionCommonAncestor","findHighestSelectedGroups","ancestorGroup","LibrariesSearchState","resetSearchLoader","resultsReaction","completeReaction","visibleResultsLimit","_loaderSearchResults","sectionType","elementSearchSort","isLibrarySearchMode","_isDocumentSearch","setVisibleResultsCursor","seachCompleteHandler","orderType","lastResult","orderedValue","elementTypeOrder","visibleSearchResults","matchingElements","_matchingElements","isAboveType","isAboveLimit","isInLoadingType","_isSearchMode","_searchResultsTypes","foundTypes","_searchResultsLibraries","foundLibraryIds","hasTypeFilters","hasSelectedTypeFilters","hasLibraryFilters","hasSelectedLibraryFilters","hasDocumentGroupFilters","hasSelectedDocumentGroupFilters","hasDocumentLinkFilters","hasSelectedDocumentLinkFilters","includeGroupFilter","matchingGroup","elementGroup","isValidGroup","getBaseRef","isValidLink","isValidType","isValidParentLibrary","isTopLevel","clearLibrariesFilters","DEFAULT_RELINK_TYPE_FILTER","MODES","enableContextMenu","COLLAPSED_KEY","groupNavigation","STOCK_SEARCH_SORT_OPTIONS","ELEMENTS_SORT_OPTIONS","ELEMENTS_SEARCH_SORT_OPTIONS","LIBRARIES_SORT_OPTIONS","ELEMENT_VIEW_BY_SORT_BY_MATRIX","State","elementSortDescending","initLibrarySort","librarySort","librarySortOrderDescending","_stockSearchState","_currentSearchTimeout","_librariesSearchState","viewBy","contextMenuPosition","collapsedGroupNavToDrag","headerView","_headerView","_setState","_setMode","newMode","_deleteFindSimilarFile","_draggingData","_currentWorkflow","currentWorkflowName","notifyWorkflowAction","notifyAction","_getViewByStateKey","baseKey","localSettingsValue","getViewByGroupModeOptions","getViewStateOptions","setCurrentLibrariesFilter","defaultSortValue","_elementSearchSortState","elementSortDescendingState","localDescendingOrder","contextMenuPositionState","_getUnlockedKey","lockToolkit","allowUnloadedElements","isContextMenuEnabled","searchId","_getRecentSearchKey","stock","_addRecentSearch","recentSearches","searchLimit","storedSearches","storedSearch","_storeRecentSearch","currentSearchText","isDifferent","findSimilarId","setSearchMode","getElementSortOptions","getLibrariesSearchSortOptions","getElementSearchSortOptions","setElementSearchSort","_setElementSearchSortState","isValidElementSortOption","sortOption","restoredValue","searchOptionValues","setStockSearchOptionValuesArray","setElementSortState","setElementSortDescendingState","sortOrderState","setGridZoomFactor","zoomFactorState","setShowNavigation","currViewState","currLibrariesViewState","resetViewStates","getRemovePadding","sectionToReveal","getTypeSectionsInViewOrder","setNameVisibility","setElementBackgroundPattern","setRelinkLayerMode","elementFilterTypes","setRemovedElementsMode","clearSearchMode","setOneUpMode","oneUpParams","clearOneUpModeParams","setNumResults","setFindSimilarSearchMode","findSimilarUrl","findSimilarPath","_getCollapsedKey","_getCollapsedMap","_setCollapsedMap","libraryIds","_isCollapsed","collapsedKey","disabledIDs","defaultCollapsedMap","_setCollapsed","collapsedArray","newMap","resetCollapsedTypes","isElementSectionCollapsed","_getElementsFromBranches","groupBranches","sectionElements","_getElementsInNestedGroupOrder","groupSections","getLibraryElementsInViewOrder","elementSortBy","isTourInProgress","measurementCache","measurementDOMElements","customRootNode","getContentDuration","onloadedmetadata","ancestor","CustomElementClass","customElements","CustomElementOverride","addMultiFileElement","setDuration","droppedFiles","elementMetaDataForAnalytics","createElementFromFile","dropFile","fileSize","fileListArray","priorities","elementMetaData","asset_role","asset_priority","newFile","stagedRepresentationData","restrictToUsableTypes","getFileUploadData","hasFiles","updateLicenses","imageContents","licensedData","purchase_details","compData","thumbnailData","licensedStockData","content_id","stock_id","setLicensedData","licensedRepresentation","licensedPromise","content_length","currentPrimary","compUrl","url1","url2","compRepresentation","compPromise","capsule","url_json","jsonPromise","url_png","pngRepresentation","pngPromise","thumbnailRepresentation","thumbnailPromise","updateElementWithLicensedURL","stockSearchAsset","member","LicenseStockButton","USER_CANCELLED","LIMIT_REACHED","ALTERNATIVE_LICENSE_IDS","getStockData","stockPanelInfo","getStockDataForElement","creator_name","onClickLicense","launchStockLicenseInfoURL","isStandardCoreType","premium_level_id","_getGenericLicenseName","_getStockLicenseString","updateStockMetadata","fetchedMetadata","compStockData","setStockData","isSupportedElementType","getLocalizationSuffix","hasStockData","getStockMethod","getStockPremiumLevel","setStockSearchQuery","getStockEditError","getStockTemplateUseError","isPurchased","searchResult","availableLicenseTypes","availableLicenses","licenses","compOrLicense","getCompSizeFromSearchResult","compHeight","compWidth","dpiDiff","isFreeAsset","canSaveComp","isValidMediaType","hasComps","searchUIOptions","showLicenseDialog","addToLibraryID","skipQuotaCheck","contentId","invokerId","_el","findStockElementInLibrary","_onReportMetric","cartId","extensionID","initEventID","_onPurchaseDialogClosed","xmlDoc","doneEventID","_onPurchaseDialogInit","srcElementRef","assetTypeDescription","assetDescription","mediaTypeId","capsuleMap","threeDMap","validateAssetAndLibrary","ERROR_MAP","UNKNOWN","showStockError","stockError","getRenditionFromDOMElement","licenseChooser","createStockElement","makeStockMetadata","createdElementRef","retry","needleStockIdString","getFindMethod","similarData","representationPromises","targetComp","primaryPromise","audio_samplerate","samplerate","audio_samplerate_preview","commitPromises","dataURL","currentProductVersion","mogrtVersions","highestProdVersion","canShowLicenseDialog","canOpenExtensions","isStockPanelAvailable","isBrandCreator","m3Enabled","filteredAllLibraries","hasPublishedAsset","isPublishedAssetLoaded","brandLocation","onLine","CAPTURE_EXTENSION_ID","CAPTURE_EVENTS","CAPTURE_PREFERENCE_KEY","onCaptureInit","_isWebGLSupported","onCaptureSaveCallback","assetTypeToCaptureModule","onCaptureSave","privateLibraries","libraryElement","captureData","libraryRep","onCaptureClose","_setCapturePreference","_getCapturePreference","getCaptureModules","moduleName","isCaptureSupported","gl","isWebGLSupported","isCaptureEnabledForProduct","isCapturePresentInAddMenu","openCapture","forceTakeTour","_openCapture","openCaptureForAssetType","_getCaptureSettingKey","_getCaptureRestState","imageURI","takeTour","captureLocation","capturePlugin","captureExtension","UXPEventTarget","fetchProfile","captureInitData","modules","selectedModule","analyticsEnabled","UserProfile","_openUXPCapture","sendResponseToCapture","_openCEPCapture","preference","preferenceKey","MONITOR","SRGB","rgbToHexNumber","ALPHA_OFFSET","addAlphaToRGBHexNumber","hexToRGB","hexToRGBA","getBrightness","getContrast","fgColor","_pipeRGBValues","inputData","getRGBRepresentation","colorDataToRGB","colorDataToHexNumber","colorDataToHexNumberWithAlpha","colorDataAndAlphaToHexNumber","colorDataToRgbaCss","convertFn","rgbColorData","convertedAlpha","convertedColor","convertedRgbData","_linearInterpolate","_linearInterpolateColor","targetOffset","colorDataA","colorDataB","colorA","colorB","_addMidpointStops","valueKey","newStops","stopA","stopB","midpoint","interpolate","_getFauxValue","prevStop","nextStop","opacityStops","addFauxStops","addFauxValues","addToMap","offsetMap","_combineStops","useTransform","forceLinear","willTransform","finalRgbColorData","rgba","SCALE","getSwatchBackgroundColor","getStringColorValue","includePrefixes","rgbColors","getAllColorValues","allColors","typeColor","trueColorValue","opacityColor","getColorThemeData","getGradientData","allStops","midpointDistance","logFileExtension","_progressMap","pendingLogWrite","writingToLog","_isInitialized","_messagesBeforeInit","_duplicateMessageCount","_maxLogSize","maxLogSize","_swapLogIfNeeded","logFilePath","stats","prevLogFilePath","_doLogWrite","logRoot","dataToWrite","appendFile","tempDirectory","TEMP","logFilePrefix","jsxLogFilePath","_previousMessage","logFileMessage","showLogFile","jsxLog","getLogFolder","progressUtil","getDropOperation","checkDropType","showErrorMsg","messageParameter","isDefaultMessage","getEditActions","invokeAction","defaultError","checkForStockErrors","stockErrorMessage","documentTypeExtensionMap","colorTypeStrings","registration","none","withData","dataKey","withFontData","withRGBData","TextstyleUtils","fontOpacity","fontColorType","fontHexColor","fontRgbColor","fontCmykColor","cmyk","fontLabColor","lab","fontHsbColor","hsb","fontGrayColor","fontSpotColor","paragraphAlignment","fontDecoration","decoration","createIndentFunction","translationKey","paragraphLeftIndent","paragraphRightIndent","paragraphSpaceBefore","paragraphSpaceAfter","paragraphFirstLineIndent","videoFramesPerSecond","capsuleFramesPerSecond","capsuleDuration","elementSize","staticSourceRef","getStaticCachedLinkedElementSourceRef","getStaticSourceRef","sourceRefDcFormatString","sourceRefObj","getSourceRefMimetype","arrayBufferToBase64","binaryString","base64ToDataUrl","_blobToDataURLIfFileReader","readAsDataURL","ERROR_MESSAGE","general","jsx","loggedOut","appLoggedOut","network","noAccess","quota","sharedQuota","server","requestFailed","NON_GENERIC_LOADING_ERRORS","isGenericLoadingError","getFooterErrorMessage","stringId","LIGHT_MIME_TYPE","MATERIAL_MIME_TYPE","CAPSULE_AE_MIME_TYPE","CAPSULE_PPRO_MIME_TYPE","mimeMap","bulkUploadMimeTypesByElementType","getTypesWithProperty","propertyFn","elementMimeMap","doesTypeSatisfyProperty","getUploadElementTypeFromMimeType","getUsableTypes","usable","getEditableTypes","editable","extendTypes","mimeTypes","fileExtensions","mimeTypeToExtensions","firstFileExtension","extendTypesWithExtensions","extensionToMimeTypes","extendUsableTypes","extendUsableTypesWithExtensions","extendEditableTypes","extendEditableTypesWithExtensions","canGenerateRenditionFromMimeType","isVectorMimeType","fileNameToMimeType","curateFileName","getFileNameFromPath","indexOfDelimiter","getFileNameWithoutExtension","indexOfPeriod","getFileNameExtension","isLibraryFileExtension","isUploadableType","isUploadableFile","getUploadableType","mimeTypeList","existsFile","unlinkSync","statFile","statSync","generateUuid","parsed","ensurePathExists","recursiveEnsurePath","dirs","pathToTest","exists","mkdir","MouseEvent","getUploadExtensionsForElementType","bulkUploadMimeTypes","isTypeUsable","mimeTypesMap","bulkUploadMimeType","RestoreGroupsTree","oldBranches","existingItems","_root","RestoreGroupsTreeGroupBranch","RestoreGroupsTreeBranch","oldBranch","_oldBranch","_tree","_restore","_existingItems","_oldParentGroup","_restoredParentGroup","oldItem","_restoreItem","_restoreMetadata","RestoreGroupsTreeElementBranch","_createGroup","oldName","oldOrder","GroupsTree","_branches","addBranch","pendingGroups","GroupsTreeGroupBranch","_addNodesToGroupBranch","getElementsByGroup","groupBranch","itemsAsBranches","newBranch","GroupsTreeElementBranch","insertChildren","GroupsTreeBranch","_parent","_order","_depth","compareBranches","_compareGroupBranches","_compareElementBranches","originalDepth","_getOrder","_getName","getSortValue","_originalDepth","_children","currentBranchIndex","GROUP_DELIMITER","GROUP_DELIMITER_REPLACEMENT_REGEX","GROUP_COLLECTOR_REGEX","matchesGroupName","toLocaleLowerCase","conflict","beforeSibling","elemsInParentGroup","getOrderStringBetween","_getSubgroupOrder","getLevel","getRoot","toggleCollapseChildrenState","hasSubgroups","groupsTreeCache","includeSelf","descendantChildren","addToDescendants","currGroup","childGroup","getAllDescendantElements","descendantElements","visitElements","getFirstElement","subgroups","findLastElement","addChildrenGroups","currChildren","_getMinCommonAncestor","branchA","branchB","common","visitBranch","_getAllDescendantBranches","minimumCommon","ensureGroupPath","moveSubgroups","oldGroupPath","newHead","elementsToMove","groupsToMove","itemsToMove","copyOrMoveGroupAndDescendants","willGroupBeEmpty","movedAllChildren","getConstrainedAncestor","targetConstrainedAncestor","isInvalidChild","targetParentGroup","firstGroup","targetBranch","canGroupBeMergedInto","mergeGroups","_mergeGroups","newParent","relativeOrder","newParentBranch","newPreviousSibling","newNextSibling","reparentItem","mergeableGroup","restoreGroupsTree","nameFromCounter","sortedChildren","elementGroupMap","elementCollection","buildPathFromString","replaceGroupDelimitersInNode","canReplaceGroupDelimitersInElement","newGroupPath","matchAll","matchedGroups","findMatch","searchParent","searchLibrary","imgSize","fileType","toDataURL","chooseExportFile","promptStr","calcDestinationFile","chooseImportFile","calcSourceFile","exportLocation","currentLayerInfo","deleteFilesOnError","isTooBig","deleteFileOnError","reportBulkUploadError","isImportError","WARNING_MAP","hasUnsupportedExtensions","hasOverSizedFiles","slowUpload","warningMap","supportedFiles","supportedFilesSize","fileIsLibrary","getNativeDropTypes","exceedsFileCountLimit","supportedExtensions","strName","labelPrefixKey","labelPrefix","regexp","highestFound","matchResult","ensureOrdersValid","isValidOrderString","newOrders","nextOrder","prevOrder","GroupedElement","shouldMerge","sourceGroupsTree","mergeGroupsAfterOperation","sortByCustomGroup","getSortedElementsInGroup","lastElement","suffixes","ensureElementOrdersValid","doElementsHaveDependents","elementsById","librariesToCheck","dependency","confirmDeleteElements","confirmOperation","confirmOperationWithDependents","toLibrary","toGroup","dateSortedElements","fromLibraries","fromLibrary","newGroups","isCrossLibraryOp","mergedGroup","checkForDependencies","doElementsHaveDependencies","isRepresentationDownloadPending","downloadingRep","getElementDownloadProgress","numElementsToAdd","isIncomingApprovedBrandLibrary","isCurrentUserCreatedLibrary","isSharedWithMe","trimmedName","hasForbiddenLetter","endsWithPeriod","correctLength","isWindowsReserveName","reserved","normalizedName","forTooltip","collabNames","temp","oldCheck","doesUserBelongToProject","isCurrentUserOwnedLibrary","canWriteName","isLibraryDeletable","errorLibs","isSharedOverQuota","ElementReferenceUtils","ellapsedLimit","rft","RelativeTimeFormat","dtf","nowDate","SECOND","MINUTE","HOUR","DAY","WEEK","MONTH","YEAR","intervals","diffAbs","isFuture","getIconForLibrary","disableDelimiterCheck","libraryItems","hasDelimitedNames","isStyleGuideEnabled","getStyleguideLabel","_stableKeysForObjects","newUUID","loadSortedElements","collectGroupsInOrder","getOrderedGroupIds","collaboratedLibrary","jumpTo","targetUrl","requireAuthorization","getJumpUrl","doRetry","encodeOptionsAsString","bearer_token","target_client_id","target_redirect_uri","target_scope","target_response_type","jump","getWebHostName","getAssetsWebLibraryId","getLibraryURL","hostName","getElementURL","getQueryParams","optionString","getLocalisedGoURL","urlRoot","getStockJumpURLParams","sso_inbound","addContentTypeParams","stockParams","hasOptions","setParam","keyAcceptsArray","openLibraryURL","eventSource","getArchiveURL","additionalParams","openReportAbuseURL","openStyleguideURL","mv","mv2","isFlyout","openFeedbackURL","openContactSupportURL","supportContactGoURL","openServiceErrorURL","getServiceErrorURL","openInstallCCAppURL","getInstallCCAppURL","openUpdateCCLibrariesURL","getUpdateCCLibrariesURL","openShareLibraryLinkURL","getStockURL","stockWebHost","similar_content_id","audioSearch","linkServiceWebHost","getPublicLibraryURL","specialShortLocale","getEmbeddedBrowseAllURL","getBrowseAllURL","isBrand","libraryAssetId","personalizationHost","ISUserSelectedID","CommonOrgID","listenerManager","returnObject","isEventValid","isOneTime","_collator","Collator","_sort","sortByCreated","sortByModified","sortByName","sortByOrderInGroup","aGroupOrder","bGroupOrder","addDivider","formatMenuItem","interactiveOperations","nonInteractiveOps","TRANSITIONS","onboarding","CaptureOnboardingWorkflow","LIBRARY_ONBOARDING_TYPES","firstEnteredLibrary","_getOnboardingState","groupsPathView","ownedLibraries","quotaUpdate","_shouldShowQuotaOnboarding","_showQuotaOnboarding","ROOT_ONBOARDING_TYPES","panelRootOnboarding","timeoutTimerStart","ROOT_ONBOARDING_TIMEOUT_SECONDS","TEAM_LIBRARIES_ONBOARDING_TYPES","_getSettingsKey","_setOnboardingState","onboardingType","seenAlready","_shouldShowCCDTeamsOneUpOnboarding","_shouldShowPanelTeamLibraryOneUpOnboarding","disposeLibraryWatcher","disposeQuotaWatcher","cancelWatchers","totalLibrariesSize","_shouldShowPathEditOnboardingToast","_startTime","_timeout","promiseFn","inProgress","lastFinished","_getKeywords","searchFn","_elementMatchesSearchQuery","ellipses","trailingChars","milliseconds","seconds","displayTimePerCharacter","ensureStringBetween","lower","upper","getCharBetween","char1","char2","LOWER_ORDER","ORDER_REGEXP","str1","str2","middleChar","middle","lowerNum","upperNum","lowerStrings","upperStrings","makeSafeFilename","defaultResult","encodeStringForHTML","validationNeeded","formattedText","formattedMessage","_StyleStrings","_getStrings","Underline","Strikethrough","Kerning","Alignment","Hyphenate","KerningAuto","KerningOptical","KerningMetricsRomanOnly","getTextDecoration","getTextTransform","capitalizeValue","capitalize","titlecase","getTextScript","featureSettings","getTracking","getStyleProperties","StyleStrings","getFontFamily","getFontSize","getFontStyle","leadingInfo","fontLeading","fontTracking","getParagraphAlignment","getPostScriptName","normalizedStyle","fontType","fontSizeRounded","translatedFontType","getFontSizeForPreview","hasFontColor","isFontColorPoorContrast","swatchColor","getCSSForPreview","getDetailsText","isSyncable","isUpgradable","typekitTooltip","SpectrumSwitch","FontActivationSwitch","isFontActivated","switchLabel","outputType","MM_TO_PT","MM_TO_PX","decimalPlaces","factor","hours","fpsToString","dimensionsToString","bpmToString","CCLibTarget","getDeviceDescription","writeToClipBoard","clipboard","writeText","__createBinding","__setModuleDefault","__importStar","__importDefault","ResizeObserver_1","Margin_1","getStableArray_1","react_1","lerp_1","ClassProperties","totalItemWidth","totalItemHeight","totalItemCount","invalidate","setItemSize","setFromCss","cssInline","cssMargin","fromCssMargin","columnCountCss","optimumWidth","parseCssSize","ItemProperties","rendered","VirtualManager","itemProperties","classProperties","containerPadding","scrollAnchor","lastScrollTop","scrollDirection","scrollDuration","scrollWaitAfterFinish","containerWidth","horizontal","itemLookup","onresize","updateAndLayout","cancelScrollAnimation","renderKeys","setRenderKeys","onLayout","checkForDuplicates","itemsByKey","elementKey","forceLayout","needsLayout","updateIndexes","ensureElementsObservedAndSized","layoutChildren","containerCss","columnGap","rowGap","elementLookup","getElementLookupByKey","getItemProperties","classProps","l2r","r2l","scrollAnimationCallback","onElementSized","getVisibleRect","pageSize","prerenderOtherDirection","prerenderScrollDirection","isManualLayout","getRenderItemIndices","beginning","totalPagesSize","existingKeys","presizeTypes","focusedKey","getFocusedItemKey","getClippedScrollTarget","scrollTarget","scrollPx","clientPx","scrollDelta","previousItems","sign","oldKeys","deleted","fromCssPadding","itemProps","getItemTargetScrollPosition","_b","itemPin","windowPin","_c","behavior","startScrollAnimation","scrollStartTime","scrollStartPosition","scrollAnimating","continueAnimating","targetPosition","startDelta","maxDelta","elapsed","animatedTopNow","VirtualManager_1","memoize_1","createPropertyGetter","cacheElements","itemKeyFunction","itemToIndex","itemTypeFunction","itemRectFunction","scrollByFunction","scrollToItemFunction","getManager","getRenderKeys","getReactElements","defaultTypes","oldValues","newSet","oldTypes","newTypes","newSize","oldMap","mapValuesToIndex","newValues","newIndex","oldIndex","foundUndefined","oldType","newType","Virtualizer_1","Margin","marginLeft","marginTop","marginBottom","UxpResizeObserver","__1","pendingEntries","externalObserver","internalObserver","queueCallback","contentRect","DOMRect","queuedCallback","queuedCallbackId","unobserve","xOrOptions","scrollToAnimateId","parametricBlend","animatePosition","deltaTime","beginSmoothScrolling","MIME_TYPE_MAP","SUPPORTED_PNG_MIMETYPES","EXTENSION_MAP","extensionForUnresolvedContentType","getMimeTypes","contentTypeForUnresolvedExtension","canComputeRenditionFromMimeType","backoffIntervals","rapiMaxSingleTransferSize","tlsDiscoveryPortRange","orchestratorRequestRetryTimeoutSequence","orchestratorRequestRetryMax","asimovMaxChunkSize","toolkitNames","photoshop","photoshop_swatches","photoshop_brushes","photoshop_gradients","photoshop_patterns","photoshop_styles","photoshop_shapes","photoshop_swatches_prerelease","photoshop_brushes_prerelease","photoshop_gradients_prerelease","photoshop_patterns_prerelease","photoshop_styles_prerelease","photoshop_shapes_prerelease","ElementMimeTypeMap","ML_MODEL_ELEMENT_TYPE","ElementTypeRegex","ProductCodeMap","CCX","Figma","FRED","GoogleSlides","PowerPoint","StyleGuide","Word","LibraryConstants","DL_NAMESPACE","VALID_RELATIONS","DEFAULT_GROUP_CLASSIFIER","ELEMENT_ACTIONS","LIBRARY_ACTIONS","DOCUMENT_LIBRARY_ACTION_PRODUCT_MAP","ELEMENT_ACTION_PRODUCT_MAP","VECTOR_RENDITION_ELEMENT_TYPES","vulcanLibrariesTargetSpecifier","vulcanLibrariesSAPCode","vulcanQueryRequestPayload","MelvilleParamsAsHeaders","HttpStatus","OK","ACCEPTED","MULTIPLE_CHOICES","BAD_REQUEST","UNAUTHORIZED","FORBIDDEN","CONFLICT","PRECONDITION_FAILED","UNSUPPOERTED_MEDIA_TYPE","IM_A_TEAPOT","INTERNAL_SERVER_ERROR","BAD_GATEWAY","SERVICE_UNAVAILABLE","ABORT_ERROR","placeholderRegexString","placeholderRegex","containsPlaceholderRegex","createPlaceholderId","isPlaceholder","createLibraryData","deletable","parseNewLinkSchema","serializeLinkReference","linkRef","parseLinkReference","ELEMENT_REF_REGEXP","parseLegacyLinkSchema","getAssetAndFragmentIdFromReference","getFileExtension","fileNameOrPath","dotIndex","getPrimaryMimetypeForFile","_estimateTimeToUploadSortedArray","numBatches","getImageDimensionsWeb","getImageDimensions","BaseError","CodePriority","LibraryError","codeOrErrorLikeObject","errorLikeObj","errLikeCast","isErrorLike","RestrictedEventEmitter","_emitter","AsyncOperation","_abortController","_progress","MessageLoggedEvent","logLevel","Logger","_loggerEvent","LogLevel","RequestError","_code","_response","_underlyingError","setResponse","getRequestError","getRequestErrorFromStatus","getSAMRequestError","_additionalInfo","AsyncResponse","_text","redirected","trailer","clonedHeaders","Headers","bodyUsed","headerRegexp","createHeaderRegexp","statusRegexp","HttpResponseParser","readLine","_index","endOfLine","remainderText","parseAsyncResponse","originalUrl","statusLine","statusMatch","headerName","headerLine","_handleResponse","abortOperation","rawBody","jsonData","exception_code","newLocation","retryAfter","sleep","createAtom","_contexts","nestedTransaction","getObservableDecorator","bindingKey","mobXRegistry","isDecoratorArgs","richTypes","cyclesFix","_stack","diffs","isObjArray","objKey","newObjKey","areObjects","nestedDiffs","difference","isNewObjArray","sanitizeVersionInput","compareVersions","version1","version2","a1Part","ApplicationAction","_applicationActionData","minVersion","apiRoot","installedApps","sendAction","constructActions","codes","currentAction","Configuration","renditionSize","RENDITION_SIZES","FULL_RENDITION_CONFIG","doReject","mergeRecords","additionalRecords","flattenKeys","flatObject","flatKey","debounceDecorator","wait","getScopedStorageKey","SignalType","timoutFutureFactory","future","combineSignals","onAbort","abortSignalReasons","aborter","signalToReasonMap","give","ConnectionState","collectAll","_d","iterator_1","__asyncValues","iterator_1_1","Driver","_connector","_asyncFn","_cache","serializedArgs","cachedPromise","newPromise","promiseCache","_token","_failedConnectionAttempt","CONNECTED","_connectionPromise","CONNECTING","resetAbortController","abortController","onConnect","onDisconnect","connect","_isConnectingOrConnected","_connect","_attemptToConnect","abortSignal","connectionInfo","_handleConnected","currentAbortSignal","_handleDisconnected","getAllLibraries","getRenditionGrids","getAllElements","getAllDocumentationElements","getDocumentationElements","getAllRemovedElements","getRemovedElements","getAllGroups","setRenditionCacheChangeListener","addWatchedLibrary","removeWatchedLibrary","addLibrariesSyncGroupListener","removeLibrariesSyncGroupListener","operationFactory","getOperationTypes","_operationTypes","constructOperation","klass","supportsAction","addAction","getLocalSettings","settings","_localStorage","squelchModelEvents","propertyDescriptor","_squelchModelChangeEvents","_unsquelchModelChangeEvents","ModelCache","_Class","_isSquelched","_receivedEventDuringSquelchPeriod","_changedModelsQueue","registerIndex","updateIndices","getByIndex","shouldNotify","_add","idOrModel","_remove","dataArray","_replace","upsert","_upsertItems","_models","changes","_dataSinceLastReport","__rest","microdiff","modelData","previousPlaceholderId","modelChanges","hasChanged","_findCachedModels","modelFromCache","dataModelMatchList","indexEntryList","itemFromCache","indexKey","_onModelChange","dataArrayIds","initializesCaches","_childModelCaches","_updateCaches","__decorate","_modelCache","_commitFuture","_commitResolver","_isCommitted","_waitingForCommit","squelchChangeEvents","unsquelchChangeEvents","accessor","isLocallyManaged","requiresWrite","requiresCloudDriver","requiresLocalDriver","isRGB","isSRGB","getStyleName","generateNameMap","Published","newLinkSchema","legacySourceModified","sourceModifiedDate","_updateAction","parentChangeListenerMap","makeDependentModel","_isChangeListenerBound","doCallbacks","mapAttributesToArray","customKey","PublishedModel","Representation","_lastLocalUpdateDate","getName","getGeneratedName","autoName","localizedNames","dependencyIds","membership","groupMembership","descriptionModifiedDate","descriptionModifiedLocally","modifiedLocally","createdLocally","_removed","removedDate","removedLocally","_representationCache","renditionUrl","removeValue","getRenditionUrl","getRendition","actionId","docProductMap","docCodes","productMap","fullData","stripWhitespace","elementRegex","groupRegex","extractElementCollection","deepCopy","structuredClone","replaceActionPlaceHolders","targetAction","idCache","placeholderReplacers","newAction","originalAction","replacePlaceholders","sourceActions","targetActions","pathPlaceholderReplacer","groupDataPlaceholderReplacer","representationDataPlaceholderReplacer","placeholderId","getPlaceholderId","actualId","oldId","hasReplacedGroups","_e","_f","_g","_h","_j","newRepresentations","replacedRepresentations","replaceRepresentation","actualData","findMatchingRepresentationData","candidates","replaceRepresentationsOnTarget","newChildren","targetData","PLATFORM","PLATFORM_DISCOVERY_ENDPOINTS","PRIORITY_HEADER","Priority","extractExpiryFromToken","created_at","expires_in","useEdge","parsedUri","uriTemplates","getRenditionObject","mapper","getRenditionGrid","sortedByModified","sortedByCreated","firstImage","gridGenerationEtag","renditionObject","RapiLinkType","mapManifestToLibraryData","manifest","getElementsFromDCXNode","groupsNode","getCustomDCXData","getRepresentationsFromDCXNode","RENDITION","templateString","candidateSize","representationSize","POSITIVE_INFINITY","getRenditionCandidate","setRenditionUrl","getComponentUrl","COMPONENT","renditionTemplate","revision","linktype","mapResponseToVersionData","MANIFEST","manifestTemplate","versionId","manifestUrl","mapResponseToCollaboratorData","collaboratorID","inheritances","isDirect","hasContributorRole","hasName","invited","isAdmin","allowedRepresentationCustomData","isRepresentationPreflightResponse","stubRenditionGridElement","rendition_mimetype","mapResponseToLibraryData","libraryResponse","forceReadOnly","injectStubRenditionGridElements","manifest_etag","asset_acl","primaryPermissions","fullPermissions","localized_names","toolkit_id","document_id","document_type","created_date","modified_date","created_by","modified_by","mapResponseToGroupData","elements_count","removed_elements_count","application_metadata","library_urn","storage_assignee","tile","stubRenditionGridElements","rendition_grid","workspace_urn","parent_assetId","mapResponseToElementData","elementResponse","is_auto_named","dependency_ids","mapResponseToRepresentationData","mapResponseToGroupMembershipData","groupResponse","groupMembershipResponse","representationResponse","is_full_size","is_external_link","blockDownloadUrl","mapResponseToTeamData","teamResponse","collaboratorRole","repositoryOwner","mapElementDataToElementMetadata","extractCustomData","mapRepresentationDataToRequest","is_preferred_thumbnail","storage_href","asset_id","allowedKeys","typedKey","mapElementDataToRequest","clientInfo","Representation_1","_childCache","_updateRepresentationData","locallyManaged","getRepresentationContent","getExternalLinkDownloadProgressByKey","updatedData","filteredRepresentations","staging","invitation_hostname","teams_hostname","platform_hostname","production","validatesOperation","_actions","Operation","SingleOperation","execute","_actionMappers","createContextKey","parentContext","_currentContext","BaseContext","deleteValue","ROOT_CONTEXT","with","_globalThis","VERSION","isCompatible","ownVersion","acceptedVersions","rejectedVersions","myVersionMatch","ownVersionParsed","globalVersion","_reject","_accept","globalVersionMatch","globalVersionParsed","_makeCompatibilityCheck","GLOBAL_OPENTELEMETRY_API_KEY","_global","registerGlobal","diag","api","unregisterGlobal","DiagLogLevel","_namespace","logProxy","verbose","_logProxy","setLogger","optionsOrLogLevel","oldLogger","newLogger","maxLevel","_filterFunc","theLevel","theFunc","VERBOSE","createLogLevelDiagLogger","suppressOverrideMessage","createComponentLogger","DiagComponentLogger","_instance","DiagAPI","NOOP_CONTEXT_MANAGER","NoopContextManager","getInstance","ContextAPI","setGlobalContextManager","contextManager","_getContextManager","createHistogram","NOOP_HISTOGRAM_METRIC","createCounter","NOOP_COUNTER_METRIC","createUpDownCounter","NOOP_UP_DOWN_COUNTER_METRIC","createObservableGauge","NOOP_OBSERVABLE_GAUGE_METRIC","createObservableCounter","NOOP_OBSERVABLE_COUNTER_METRIC","createObservableUpDownCounter","NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC","addBatchObservableCallback","_callback","_observables","removeBatchObservableCallback","_attributes","NoopMetric","addCallback","removeCallback","NoopObservableMetric","NOOP_METER","NoopMeter","NoopCounterMetric","NoopHistogramMetric","NoopUpDownCounterMetric","NoopObservableCounterMetric","NoopObservableGaugeMetric","NoopObservableUpDownCounterMetric","NOOP_METER_PROVIDER","getMeter","MetricsAPI","setGlobalMeterProvider","getMeterProvider","_carrier","extract","defaultTextMapGetter","defaultTextMapSetter","BAGGAGE_KEY","getBaggage","setBaggage","deleteBaggage","_entries","getAllEntries","setEntry","newBaggage","BaggageImpl","removeEntry","removeEntries","createBaggage","TraceFlags","NOOP_TEXT_MAP_PROPAGATOR","NoopTextMapPropagator","PropagationAPI","setGlobalPropagator","propagator","_getGlobalPropagator","propagation","INVALID_SPANID","INVALID_TRACEID","INVALID_SPAN_CONTEXT","traceFlags","_spanContext","setAttributes","updateName","_endTime","recordException","_exception","_time","SPAN_KEY","getActiveSpan","deleteSpan","setSpanContext","NonRecordingSpan","getSpanContext","VALID_TRACEID_REGEX","VALID_SPANID_REGEX","isSpanContextValid","wrapSpanContext","contextApi","startSpan","parentFromContext","startActiveSpan","contextWithSpanSet","NOOP_TRACER","NoopTracer","_provider","_getTracer","_fn","tracer","_delegate","getDelegateTracer","NOOP_TRACER_PROVIDER","getTracer","ProxyTracer","getDelegate","setDelegate","_proxyTracerProvider","ProxyTracerProvider","TraceAPI","setGlobalTracerProvider","getTracerProvider","telemetrySpan","spanName","opentelemetry","retVal","addTelemetrySpanAttribute","resourceRefToPayload","resourceRef","PERMISSION_INHERITANCE_MAP","supportedActionNames","CloudSingleOperation","_createLibraryActionMap","_removeLibrary","permanentlyDeleteLibrary","_permanentlyDeleteLibrary","_unfollowLibrary","leaveLibrary","_leaveLibrary","_moveLibrary","_createLibrary","documentExtractionData","includeApplicationMetadata","includeAppMetadata","access","includeResources","relType","asyncResponse","_patchBrandAppMetadata","driverConfig","newAppMetadata","MoveCopyElementOperation","lastAction","actualActions","_doMoveCopyRequest","sourceEtag","linkedActions","linkedEtag","CloudMoveCopyElementOperation","sourceAssetId","targetAssetId","tokenizePlaceholders","requests","tokenMap","removeRepresentationPlaceholderIds","omitUndefined","RESPONSE_MAPPERS","updateLibrary","deleteElement","BatchOperation","getClientInfo","query_params","permanent","includeElements","include_contents","tokenizedPayload","_baseLibraryOperationPath","responses","newActions","isSupportedAction","ContentOperation","_updateElementContent","ParallelOperation","CloudParallelOperation","uploadComponent","parseLinks","linksList","firstLinkIndex","secondLinkIndex","parseLink","linkString","hrefMatch","convertToPrimitiveType","strAsNumber","defaultElementSort","sortFieldMap","LegacyPublicLibraryExtension","routePublicLibraryRequestIfNeeded","publicFn","baseFn","getLibraryParams","getLibraryByPublicLinkId","libraryParams","_getLibrary","__asyncDelegator","_getAllElements","elementParams","getElementsByPublicLinkId","responseMapper","orderBy","queryParams","fetchAllPages","arrayFormat","getRemovedElementsByPublicLinkId","getDocumentationElementsByPublicLinkId","getElement","loadProgressively","firstUrl","nextUrl","total_count","pageTemplateString","_page","pageTemplate","nextStart","AssetNotificationManager","assetIds","_changeCallback","_librariesToMonitor","createAssetLinkList","_onChangeCallback","setWatchedLibraries","librariesToMonitor","monitoredAssetIDs","removeAssetID","addAssetID","_syncGroupListener","syncGroupDirectory","sam","getAssetWithRepoPath","_fetchNext","combineGenerators","generators","finalized","yielded","InMemoryStorage","StorageInterface","storageKey","_storageKey","_storage","_load","mapProjectToTeamData","storageAssignee","mapGradientToGradientData","waitForListLoad","onStatusChange","AssetListStatus","STATE_CHANGED","samLoggingLevel","getLibrary","_publicExt","_getElementsByAssetId","_getRemovedElementsByAssetId","_getDocumentationElementsByAssetId","_getElement","_env","_refreshAccessToken","_clientId","_analyticsEnabled","_ignoreRenditionGrids","_codeVersion","_fetch","ACCESS_TOKEN","SAMEnv","DISABLE_ONS","samDisableOns","HIGH_PRIORITY_RAPI_REQUESTS","persistentCache","samPersistentCache","_sam","_samLoggingHandler","handleConnectRetries","_notificationManager","getConfiguration","_assets","configurationData","cloudDriverConfig","getAppMetadata","manifestPromise","_getManifest","searchParams","URLSearchParams","getProjectByName","publishedFilters","itemFilter","getLibrariesList","projectFilter","personalFilters","publicFilters","pageGenerators","getApprovedBrandLibraries","fetchAllApprovedBrandPages","_getLibrariesResponseMapper","library_roles_type","_getLibrariesURL","getLibrariesPage","fetchOnePage","getPresignedDownloadUrl","responseJson","presignedUrlData","blockDownloadResponse","hostContext","versionList","getList","AssetVersionOrder","loadAllPages","listStateChange","loadVersion","getCollaborators","collaboratorSource","collaborationContext","collaboratorList","CollaboratorOrder","bookmarks","folderId","organizationId","invocation_mode","repository","isDone","publishedAssetId","operationId","setLibraryChangeListener","setSyncStateListener","removeSyncStateListener","removeFontDataChangeListeners","_getElementsOfTypeByAssetId","getTeams","teamData","getProjects","ProjectOrder","ProjectFilter","projectList","getProjectGradient","getProjectbyID","samProject","getGradient","gradientID","urlString","representationUrl","blockDownloadData","setFontDataChangeListener","moveUrlQueryParamsToHeaders","melvillePath","urlParams","headerParamKey","headerParamValue","applicationAction","includeAuthHeader","Response","requestId","_getFetchError","problem_type_message","paramsAsHeaders","_fetchLibraryLinks","componentLink","blockUploadLink","maxSingleTransferSize","componentUrl","preflightResponse","_initializeBlockUpload","transferDocument","_transferBlocks","_finalizeBlockUpload","uploadResponse","indexResponse","indexLinks","resolveLink","resolveTemplate","resolveUrl","resolveResponse","initResponse","blockSize","transferLinks","blockUploads","duplex","finalizeLink","finalizeUrl","finalizeRequest","getLocalDriver","_requestProcessToUploadData","originalTimeStamp","userHash","urlWithoutPort","allSettled","_fetchProcessConnectInfo","restApiToken","restApiPort","deviceId","ignoreLocalSyncEvents","isInsertAction","isUpdateAction","isRemoveAction","isAggregateAction","PATH_REGEX","VALID_PATH_REGEX","EXPRESSION_REGEX","validatesPath","otherArgs","JSONPath","_handlePathPart","lastPart","parentPath","parentArray","_handleFilterExpression","reducer","subAction","insertObject","updateObject","removeObject","FIFOStringSet","capacity","_capacity","oldestKey","oldest","operationPending","Store","modelCache","_baseData","_currentData","shouldNotifyChange","_dispatch","revert","_pendingActions","_pendingActionSemaphore","commit","_confirmActionsAtHead","markSubstitutedPlaceholders","newBaseData","_reducer","_previouslySeenEtags","isAnyRemoveLibraryAction","newBase","_rebaseActions","collapsedActions","_collapseActions","onCommit","_pendingOperationResolvers","isOperationInProgress","_operation","processElement","_isDeletedLocally","LibraryVersion","_groupCache","_elementCache","_documentationElementCache","_removedElementCache","isPublic","hasUngroupedElements","Version","versionData","Collaborator","isPredefinedGroup","isStorageAdminOnly","executeFn","obtain","_obtain","_isLocked","_queue","onObtain","abortPendingOperations","hasPendingRequest","_lock","ACTION_TYPE_HANDLERS","oldElements","oldElement","removeAction","rebaseAction","isLibraryLoadedByDefault","isTrainingSetLibrary","isPersonal","ownershipFilter","isBookmarked","isApprovedBrand","_hasExplicitlyLoadedElements","clearElements","empty","abortLoadElements","_loadElementsAbortController","abortSearch","optimisticFetch","firstElementsLoad","_l","publishedToUrn","resolveLibraryWithoutCache","publishedFromUrn","loadGivenElements","elementDataList","copyGuidelines","guidelines","renditionOutdated","lastSyncState","lastSyncProgress","_syncProgress","errorMap","excludeDocumentationElements","_createElementAtPath","createDocumentationElement","removeElementActionBase","_transferElement","removeElements","removeGroupActionBase","_transferGroup","_versionCache","collaboratorData","_collaboratorCache","newElementActions","updateElementContentActions","newElementAction","updateElementContentAction","rebasedActions","rebasedAction","LibraryAbortController","libAbortControllerMap","is_writable","num_elements","num_documentation_elements","num_archived_elements","is_parent_writable","team_id","owner_type","custom_data","public_link","locally_managed","remove_type","mapLibraryDataToRequest","mapGroupDataToRequest","auto_name","source_ref","source_modified_date","created_locally","created_context","modified_locally","modified_context","description_modified_date","description_modified_locally","description_modified_by","description_modified_context","removed_date","removed_locally","removed_by","removed_context","element_ref","mapGroupMembershipDataToRequest","groupMembershipData","isChild","ownerId","mapProjectsResponseToTeamData","projectData","updateGroup","cleanedData","LocalSingleOperation","team_permission_inheritance","LocalParallelOperation","LocalMoveCopyElementOperation","MoveCopyGroupOperation","group_id","newGroupData","SSENotificationEventSource","_eventSource","EventSource","onopen","_errorCount","_listenedEvents","WebsocketNotificationEventSource","wsUrl","_ws","WebSocket","OPEN","NodeWebsocketNotificationEventSource","Connector","launchTimeout","_launchTimeout","_generateListener","_timeoutId","_connectionInfoHandler","apiVersionInfo","apiMinVersion","apiMaxVersion","serviceToken","serviceHostname","_launchProcessHandler","_requestConnectionInfo","launchProcessCallback","getMessageType","connectionInfoCallback","messageTypes","DEFAULT_FETCH_OPTIONS","reconnectOnErrors","reconnectOnNoResponse","connector","configurationUpdate","_needToReconnect","_renditionCacheChangeListener","responseKeys","_lastNotificationPayload","libraryResponseEntry","_libraryChangeListener","_getLibraryById","_getElementsByLibraryId","_getRemovedElementsByLibraryId","_getDocumentationElementsByLibraryId","_notificationEventSource","_handleConfigurationMutation","_hostname","_cloudParams","cloudParams","NotificationEventSource","_handleLibraryMutation","_handleRenditionCacheMutation","getCloudDriver","_getElementsOfType","elements_only","order_by","element_types","newBody","fetchOptions","follow","controllerInstance","removeRenditionCacheChangeListener","configUpdate","updateRenditionCacheConfiguration","updateConfiguration","optimistic","responseBody","shouldReconnect","font_name","match_family","is_font_available","font_data","_localConnector","_cloudConnector","_localDriver","localDriver","getVulcanInterface","Vulcan5","_specifer","CEPConnector","REQUEST","RESPONSE","INITIALIZE","CCDConnector","_wrapHandler","NodeConnector","processName","UXPConnector","_installedAppsFn","_getCCLibrariesInstall","ccLibrariesInstall","_generator","_getPages","_results","_refreshGradient","MIGRATIONS","keyPath","autoConnect","resolveValueWhenDBUnsupported","supported","IndexedDBInterface","_databaseName","_supported","_connectPromise","_database","_createSchema","getAll","deleteAll","migration","transactionType","requestsFn","requestsPromise","FileSystemDatabaseAdapter","_getData","_debouncedWriteFile","_writeFile","PersistentModelCache","LibraryClass","persistUpdate","waitForHydrate","databaseName","_createFileSystemCache","dirExists","lstat","recursive","dbPath","cachedData","_bookmarkMigration","_resolveWaitForCacheRestore","_cacheRestorePromise","dataSet","isLibraryData","SyncStatus","_orchestrator","_handleLocalUpdate","_handleUpdate","_handleRemoteUpdate","halt","_primaryError","_transientProgress","_syncErrors","syncErrorEntry","_commitError","_externalLinkDownloadProgress","doOperations","currentUpdate","_serialize","_lastUpdate","syncUpdate","_resolveLocalErrors","resolvedErrors","_resolveRemoteErrors","_setErrors","_setPrimaryError","_setCommitError","_setProgress","_setTransientProgress","newLibraryProgress","_setExternalLinkDownloadProgress","externalLinkProgress","priorityError","currentError","loggedError","errorData","libraryWithError","Orchestrator","_isLoaded","_initialLibrariesLoaded","_setDriverConnectionListeners","_handleRefreshGrid","emitSyncChange","changePromise","_libraryPullLockCount","_lockedLibraryPullCallbacks","lockedNewLibraryUpdate","resolveUnknownLibrary","cachedElementDataIdx","_handleRenditionChange","_handleLibraryChange","_isSyncGroupChangeInProgress","_hasUnhandledSyncGroupNotification","newLibrariesData","_diffLibraries","_cleanupRenditionElements","handleSyncGroupChange","newLibsHash","localLib","_setLibraryChangeListener","_setRenditionCacheChangeListener","_apiRoot","initialLibrariesLoad","_doOperations","_initializeDriver","_isPaused","_loadedLibraryLists","_handleConnect","_halt","switchListener","_loadLibraryList","newLibraryData","listId","freshList","refreshProjects","idsToRemove","previousLibraries","loadList","loadPage","completeOperation","_quietPeriodTimeoutId","_inFlightOperations","promiseRef","deref","_canDoOperation","operationPromise","_doOperation","WeakRef","_quietPeriodDuration","_doLinkedAction","_doIsolatedAction","_handleActionError","sourceIsTarget","_libraryRequestRetryMap","retryData","lockPullsDuringAction","lockNewLibraries","requestRetryData","sourceHeadAction","targetHeadAction","_onAction","ErrorKind","SKELETON_TYPE","isLiteralElement","literal","isArgumentElement","isNumberElement","isDateElement","isTimeElement","isSelectElement","isPluralElement","plural","isPoundElement","pound","isTagElement","isNumberSkeleton","isDateTimeSkeleton","SPACE_SEPARATOR_REGEX","DATE_TIME_REGEX","parseDateTimeSkeleton","skeleton","era","year","day","weekday","hour12","hourCycle","hour","minute","timeZoneName","FRACTION_PRECISION_REGEX","SIGNIFICANT_PRECISION_REGEX","INTEGER_WIDTH_REGEX","CONCISE_INTEGER_WIDTH_REGEX","parseSignificantPrecision","roundingPriority","minimumSignificantDigits","maximumSignificantDigits","parseSign","signDisplay","currencySign","parseConciseScientificAndEngineeringStem","stem","notation","minimumIntegerDigits","parseNotationOptions","signOpts","parseNumberSkeleton","tokens_1","currency","useGrouping","maximumFractionDigits","compactDisplay","currencyDisplay","unitDisplay","g3","g4","g5","minimumFractionDigits","trailingZeroDisplay","conciseScientificAndEngineeringOpts","timeData","getDefaultHourSymbolFromLocale","hourCycles","regionTag","languageTag","maximize","SPACE_SEPARATOR_START_REGEX","SPACE_SEPARATOR_END_REGEX","createLocation","hasNativeStartsWith","hasNativeFromCodePoint","fromCodePoint","hasNativeFromEntries","hasNativeCodePointAt","codePointAt","hasTrimStart","hasTrimEnd","isSafeInteger","isFinite","REGEX_SUPPORTS_U_AND_Y","RE","matchIdentifierAtIndex","codePoints","entries_1","IDENTIFIER_PREFIX_RE_1","_isWhiteSpace","_isPatternSyntax","Parser","ignoreTag","requiresOtherClause","shouldParseSkeletons","parseMessage","nestingLevel","parentArgType","expectingCloseTag","isEOF","parseArgument","UNMATCHED_CLOSING_TAG","clonePosition","_isAlpha","parseTag","parseLiteral","bump","startPosition","parseTagName","bumpSpace","bumpIf","childrenResult","endTagStartPosition","INVALID_TAG","closingTagNameStartPosition","UNCLOSED_TAG","parseQuoteResult","tryParseQuote","parseUnquotedResult","tryParseUnquoted","parseLeftAngleResult","tryParseLeftAngleBracket","codepoint","openingBracePosition","EXPECT_ARGUMENT_CLOSING_BRACE","EMPTY_ARGUMENT","parseIdentifierIfPossible","MALFORMED_ARGUMENT","parseArgumentOptions","startingPosition","bumpTo","typeStartPosition","typeEndPosition","EXPECT_ARGUMENT_TYPE","styleAndLocation","styleStartPosition","parseSimpleArgStyleIfPossible","EXPECT_ARGUMENT_STYLE","styleLocation","argCloseResult","tryParseArgumentClose","location_1","parseNumberSkeletonFromString","EXPECT_DATE_TIME_SKELETON","dateTimePattern","skeletonCopy","patternPos","patternChar","extraLength","hourLen","dayPeriodLen","hourChar","getBestPattern","parsedOptions","typeEndPosition_1","EXPECT_SELECT_ARGUMENT_OPTIONS","identifierAndLocation","pluralOffset","EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE","tryParseDecimalInteger","INVALID_PLURAL_ARGUMENT_OFFSET_VALUE","optionsResult","tryParsePluralOrSelectOptions","location_2","pluralType","INVALID_ARGUMENT_TYPE","nestedBraces","apostrophePosition","bumpUntil","UNCLOSED_QUOTE_IN_ARGUMENT_STYLE","stringTokens_1","stemAndOptions","options_1","INVALID_NUMBER_SKELETON","expectCloseTag","parsedFirstIdentifier","hasOtherClause","parsedSelectors","selectorLocation","EXPECT_PLURAL_ARGUMENT_SELECTOR","INVALID_PLURAL_ARGUMENT_SELECTOR","DUPLICATE_SELECT_ARGUMENT_SELECTOR","DUPLICATE_PLURAL_ARGUMENT_SELECTOR","EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT","EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT","fragmentResult","EXPECT_SELECT_ARGUMENT_SELECTOR","MISSING_OTHER_CLAUSE","expectNumberError","invalidNumberError","hasDigits","decimal","nextCode","pruneLocation","els","originalMessage","memoize","cacheDefault","serializerDefault","strategyDefault","monadic","variadic","assemble","ObjectWithoutPrototypeCache","ErrorCode","strategies","PART_TYPE","FormatError","InvalidValueError","variableId","INVALID_VALUE","InvalidValueTypeError","MissingValueError","MISSING_VALUE","isFormatXMLElementFn","formatToParts","formatters","currentPluralValue","els_1","getNumberFormat","getDateTimeFormat","medium","formatFn","PluralRules","MISSING_INTL_API","getPluralRules","mergeLiteral","mergeConfigs","configs","createFastMemoizeCache","IntlErrorCode","IntlMessageFormat","overrideFormats","formatterCache","pluralRules","ast","resolvedOptions","resolvedLocale","supportedLocalesOf","getAst","resolveLocale","__parse","parseOpts","memoizedDefaultLocale","Locale","short","long","full","IntlError","UnsupportedFormatterError","UNSUPPORTED_FORMATTER","InvalidConfigError","MissingDataError","MISSING_DATA","IntlFormatError","FORMAT_ERROR","MessageFormatError","defaultMessage","MissingTranslationError","MISSING_TRANSLATION","filterProps","allowlist","defaults","filtered","DEFAULT_INTL_CONFIG","timeZone","defaultFormats","fallbackOnEmptyString","onWarn","getNamedFormat","formatType","NUMBER_FORMAT_OPTIONS","getFormatter","formatNumber","formatNumberToParts","RELATIVE_TIME_FORMAT_OPTIONS","formatRelativeTime","getRelativeTimeFormat","DATE_TIME_FORMAT_OPTIONS","filteredOptions","formatTime","formatDateTimeRange","formatRange","formatDateToParts","formatTimeToParts","PLURAL_FORMAT_OPTIONS","formatPlural","setTimeZoneInOptions","deepMergeOptions","opts1","opts2","deepMergeFormatsAndSetTimeZone","mfFormats","formatMessage","messageDescriptor","defaultRichTextElements","msgId","Err","getMessageFormat","LIST_FORMAT_OPTIONS","formatList","getListFormat","formatListToParts","ListFormat","richValues_1","serializedValues","generateToken","DISPLAY_NAMES_OPTONS","formatDisplayName","getDisplayNames","DisplayNames","verifyConfigMessages","createIntl","relativeTime","displayNames","createFormatters","resolvedConfig","$t","DEFAULT_LOCALE","SUPPORTED_LOCALES","IntlInterface","setLocale","_locale","_loadLocaleData","_intl","_fontsCache","_updateFontData","_clearCache","_map","getLibraryProperties","getBadge","getColorElementMetaData","getFontElementMetaData","getImageElementMetaData","getElementMetaData","shortTypeMatches","ALLOW_NO_TOKEN","ingest","IngestClass","productParts","productName","ANALYTICS_X_PRODUCT_LOCATIONS","addBaseProperties","baseProperties","setBaseProperties","reportCreateBrandFromDocument","reportEditElement","reportEditLibrary","isOffline","productLocationParts","sessionGuid","_m","_q","_r","clientName","_handleCloudDriverConnect","_handleLocalDriverConnect","_handleLocalDriverDisconnect","messageId","CCLIBS","_cloudDriver","ingestApiKey","_teamsCache","_missingResolutionTargetsMap","_handleDriverConnect","_handleDriverDisconnect","_bindDriverEvents","_libraryCache","_bindLibraryCacheEvents","newDriver","driverConnectPromise","driverConnectResolver","_transientLibraryCache","_libraryCacheChangeHandler","_refreshTeams","libraryCopy","filteredLibraryId","library_id","elementsToLoadPerLibrary","cleared","elementsToLoad","_searchLoader","lowerCamelKey","isUpperSnakeCase","backReference","toLowerCamel","_setSyncEnabledConfig","_resolveLibrary","idOrAssetId","resolutionKey","_resolutionProgressMap","resolveLibrary","_resolveElementById","cachedLibrary","_getLinkReferenceStatus","cachedElement","resolveToElement","resolutionTargetKey","includeRemovedKey","_resolveElementReferenceAndNotify","resolveReference","toolkitLibrary","customDefaultLibrary","isOlder","_setDefaultLibraryMonitor","_disposeDefaultLibraryMonitor","defaultLibraryMonitor","TLS_DISCOVERY_PORT_RANGE","isPlaceholderId","estimateUploadTime","fileList","asimov","standard","fullChunks","remainingChunk","newChunks","_chunkAsimovUploads","strictUriEncode","decodeComponent","splitOnFirst","filterObject","encodeFragmentIdentifier","validateArrayFormatSeparator","keysSorter","removeHash","hashStart","queryStart","parseValue","parseNumbers","parseBooleans","arrayFormatSeparator","formatter","isEncodedArray","parserForArrayFormat","shouldFilter","skipNull","skipEmptyString","keyValueSep","encoderForArrayFormat","objectCopy","parseUrl","url_","parseFragmentIdentifier","stringifyUrl","queryFromUrl","parsedQueryFromUrl","getHash","pick","exclude","exclusionFilter","pad","notifyCallbacks","numSentEvents","ANALYTICS_HOST","prod","stage","dev","INGEST_PATH","ANALYTICS_USER_REGION","TIMESTAMP_PROPERTY_NAME","REQUIRED_OPTIONS","throwError","_queuedEvents","_queuedCallbacks","_lastSendTime","doLog","_getAgent","getAgent","_clearAccessToken","_getEnvironment","_getAnalyticsHost","_formatTimestamp","YYYY","MM","DD","ss","getSeconds","SSS","getMilliseconds","getTimezoneOffset","mins","_updateDebounce","retryAfterHeader","retryDate","_queueEvent","_requeueEvents","failedEvents","truncatedQueue","truncateEventQueue","_sendAnalytics","sendImmediately","retryAttemps","_pendingSendAnalyticsTimeout","_sendingEvents","_sendingCallbacks","logPrefix","ingestData","numNewEvents","sendingCallbacks","handleResponse","urlBase","proxyOptions","agent","overrideOptions","dtsStart","collDts","dtsEnd","ingestProject","ingestType","ingesttype","simulate","RS2Button","fetchButton","fetchActionButton","ActionButton","fetchButtonUxp","fetchActionButtonUxp","swcActionButtonLoader","swcButtonLoader","INCLUDE_SWC_UXP","NormalButton","holdAffordance","dropdownTrigger","booleanProps","autofocus","variantProps","spButtonVariantProps","spActionButtonVariantProps","RS2Rule","Divider","SIZE_MAP","small","large","RS2Popover","Popover","contentStyle","enablePortaling","trapFocus","isDialog","popoverContentStyle","popoverDividerStyle","childrenArr","childrenWrapperRef","popoverContents","tip","RS2Menu","MenuGroup","MenuDivider","privateRef","menuWrapperRef","valueContent","iconSlot","getIconSlot","valueSlot","getValueSlot","MenuHeading","SubMenu","menuGroupWrapperRef","_loaders","loader","SWCOverride","_loadMemo","providerConfig","loadSwc","useSWCLoader","needsFallback","FallbackComponent","compatibilityProps","SpComponent","__SPECTRUM_WRAPPER_STORYBOOK_FORCE_RS2__","STORYBOOK","CAN_USE_SWC","isUxpEnv","USE_RS2","customElementRegistryCache","getCustomElementClass","registered","isRegisteredCustomElement","semverSatisfies","useIsUsingImportedSWC","shouldLoadSWC","unmountedRef","forceReactSpectrum","useForceReactSpectrum","registeredTagName","typeKitId","Typekit","kitId","scriptTimeout","tk","_UxpOptions","_classnames","_icon","_convertUnsafeMethod","_CornerTriangle","_filterDOMProps","_focusRing","_propTypes","_getRequireWildcardCache","hasPropertyDescriptor","_objectWithoutProperties","sourceSymbolKeys","VARIANTS","minimal","onKeyDownSpace","buttonRef","setButtonRef","logic","mappedVariant","variantName","shouldRenderHoldAffordance","baseButtonClass","ariaExpanded","FOCUS_RING_CLASSNAME","chain","focusAfterMouseEvent","cloneIcon","_Button","UxpButton","overrideOnKeyDown","onUxpKeyDown","onPointerDown","onPointerUp","isButton","uxpSelected","_FocusManager","BUTTONGROUP_ITEM_SELECTOR","ALLOWED_BUTTON_VARIANTS","addSelection","removeSelection","nextButtons","getChildRole","getChildProps","required","allowedVariant","renderButtons","manageTabIndex","itemSelector","selectedItemSelector","_Card","_CardBody","_CardCoverPhoto","_CardFooter","_CardPreview","_autobindDecorator","_Checkbox","intlMessages","messageFormatter","cardBody","hasTitle","cardVariant","cardSize","onLoad","handleCheckboxClick","isDropTarget","quickActions","assetClass","subtitleWrapper","descriptionWrapper","CardCoverPhoto","CardFooter","smartness","decorative","_CheckmarkSmall","_DashSmall","_SwitchBase","setIndeterminate","inputRef","getInput","markIcon","inputType","markClassName","labelClassName","CheckboxMetrics","labelStyle","alignItems","spanStyle","inputStyle","UxpCheckbox","setChecked","_createId","_DialogButtons","_DialogHeader","asyncGeneratorStep","_next","_throw","dialogId","shouldClose","confirmDisabled","keyboardConfirm","disableEscKey","isDismissible","ariaLabelledby","ariaDescribedby","ariaModal","fullscreen","derivedVariant","modalContent","backdropClickable","autoFocusButton","confirmVariant","BUTTON_VARIANTS","confirmation","information","VARIANT_ICONS","_Heading","_CrossLarge","_AlertMedium","_UxpNativeDialog","_UxpNonNativeDialog","productNeedsOverlayFix","isNative","_UxpDialogButtons","_Dialog","_UxpDialogHeader","enumerableOnly","DefaultSize","DefaultOptions","titleVisibility","UxpNativeDialog","dialogElementRef","onDialogCloseEvent","onDialogCancelEvent","onDialogLoadEvent","defaultpreventedkeys","getOwnPropertyDescriptors","_objectSpread","UxpNonNativeDialog","_Menu","_OverlayTrigger","Dropdown","dropdownId","restoreFocusOnClose","onMenuClose","overlayTrigger","closeOnSelect","onKeyDownTrigger","triggerRef","flip","onLongClick","triggerChild","triggerId","dropdownMenu","delayHide","_Dropdown","_UxpProvider","SpectrumContext","_More","menuClassName","_Icon2","WrappedIcon","SIZES","XXS","XS","XL","XXL","isIllustrationDecorative","ariaLevel","_List","ListItem","List","selectable","typeToSelect","LIST_ITEM_SELECTOR","_CheckmarkMedium","_ChevronRightMedium","handleMouseEnter","onMouseEnter","handleFocus","onSelectFocused","interpretKeyboardEvent","onTab","hasNestedMenu","_ListItem","UxpListItem","onUxpSelectFocused","onUxpSelect","_MenuItem","_MenuDivider","_MenuHeading","_SubMenu","_Popover","getListRef","listRef","opened","subMenuId","handleSubMenuKeyDown","hideAnimationFrame","_onNestedSubmenuOpen","cloneItem","crossOffset","UxpMenu","autoComplete","_Modal","_closest","_ModalManager","_OpenTransition","_PortalContainer","MODAL_LIFECYCLE_METHODS","MANAGER_SINGLETON","MODAL_KEY","_content$props","modalProps","baseModal","backdropMode","Underlay","SpectrumModalManager","overflowMap","superAdd","superRemove","isOverlay","hideBodyOverflow","currentBodyOverflow","resetBodyOverflow","addToModal","removeFromModal","_Portal","_Position","_RootCloseWrapper","VISIBLE_OVERLAYS","Overlay","overlayBucketKey","targetNode","addOverlay","removeOverlay","visibleOverlays","getOverlayContainer","immediateAvailableContainer","shouldUpdatePosition","rootClose","_ModalContainer","_Overlay","triggerType","MOUSE_BUTTONS","isOneOf","one","longPressTimeout","_lastFocus","windowMouseUp","overlayId","_mountNode","_scrollParents","defaultShow","handleDelayedShow","handleDelayedHide","renderOverlay","shouldDisable","_overlay","_hoverShowDelay","_hoverHideDelay","removeListenersFromScrollParents","handleToggle","handleMouseOverOut","related","rememberedFocus","listenToScrollParents","getScrollParents","dropdownRef","makeOverlay","overlayProps","topOverlayProps","overlayChild","triggerProps","_calculatePosition","_getContainer","Position","positionLeft","positionTop","arrowOffsetLeft","arrowOffsetTop","_needsFlush","_lastTarget","updatePosition","getTarget","maybeUpdatePosition","targetValid","arrowStyle","targetElement","placementChanged","UxpFlyoutOverlay","_UxpPosition","UxpOverlay","keydown","_UxpFlyoutOverlay","_UxpOverlay","UxpOverlayTrigger","flyoutMenu","getFlyoutOverlayContainer","_immediateFlyoutContainer","_setOverlayOnProvider","UxpPosition","updateOverlayBoundingRect","boundingRect","calculatePositionInternal","placementInput","overlayNode","isBodyContainer","childOffset","_position","overlaySize","margins","getMargins","containerDimensions","getContainerDimensions","boundaryContainer","boundaryDimensions","containerOffsetWithBoundary","AXIS","FLIPPED_DIRECTION","CROSS_AXIS","AXIS_SIZE","PARSED_PLACEMENT_CACHE","containerNode","containerDOMNode","getDelta","containerScroll","startEdgeOffset","endEdgeOffset","shouldFlip","flipContainerDimensions","parsePlacement","crossPlacement","crossAxis","crossSize","computePosition","placementInfo","positionForPositiveSideOverflow","normalizedOffset","flippedPlacementInfo","flippedPosition","arrowPosition","defaultId","_trapFocusTimeout","popoverRef","renderTip","_dna","UxpPopover","setOverlayVisible","setOverlayHidden","getSizePathStyle","popover","_configureTypekit","toastPlacement","setToastPlacement","_hostStyleConfig","_Provider","productId","disableNativeControls","UxpProvider","overlayRef","visible","setOverlay","useHostThemes","providerRef","otherStyles","_CrossSmall","_Magnifier","_Textfield","normalizeValue","handleTextKeyDown","handleTextChange","handleClearButtonClick","searchbox","_Search","UxpSearch","searchContainer","_SideNav","_SideNavItem","_SideNavHeading","SIDENAV_ITEM_SELECTOR","isNestedSelected","isDefaultSelected","isDefaultExpanded","defaultExpanded","isNested","isMultiLevel","ul","_nestedNavValue","_isSelected","FOCUSABLE_SIDENAV_ITEMLINK_SELECTOR","SideNavItem","expanded","setSideNavItemRef","sideNavItemRef","hasNestedNav","isKeyDown","isExpandableItem","getDescendantId","sideNavStyle","renderLink","ariaCurrent","isMultiLevelHeading","_MaybeUxpSwitchBase","_string","SwitchBase","shouldRenderLabel","labels","getTextFromReact","UxpSwitchBase","onClickSpan","Textfield","multiLine","validationState","Tag","isInvalid","autocompleteInput","_boundingRectOverlapping","_validationStateSvg","uxp","UxpTextfield","inputContainer","focusInput","inFocus","inputText","showFocus","overlayPresent","overlaysMap","inputActive","hasPlaceholderText","updateSpanStyle","isDrover","ov","isAnyOverlayVisible","executeOverlayCallbacks","handleSpanKeyUp","onKeyUp","orgStr","showInput","updateOverlayMap","searchContainerBoundingRect","overlayPresentInMap","disableOnOverlay","alwaysNative","displayValidationIcon","validationIcon","invalidSvg","validSvg","bgStyle","textfield","appearance","_MaybeUxpToast","DEFAULT_ROLE","ICONS","_CrossMedium","_InfoMedium","_SuccessMedium","_Toast","UxpToast","toastHandler","toastRef","TOAST_PLACEMENT","TOAST_CONTAINERS","tooltipId","_Tooltip","getPathData","variantMap","inspect","UxpTooltip","_Wait","sigmoidFactory","correction","getViewBoxAttribute","getSvgArc","startAngleDegrees","finishAngleDegrees","arcLengthDegrees","startAngle","finishAngle","zeroAngle","sizeToDnaVariantMap","determinate","overBackground","UxpWait","tick","animId","DETERMINATE","centered","INDETERMINATE","getArcAngles","genome","circleloader","spectrumTrackColor","spectrumFillColor","translateBy","variantClass","ariaValue","NAVIGATION_KEYS","TEXT_INPUT_TYPES","keyboardFocus","Compiler","pluralFn","StringFormat","PluralFormat","useOrdinal","PluralOffsetString","numberFormat","SelectFormat","compile","pluralStack","currentPlural","pluralNumberFormat","compileMessage","compileMessageText","compileArgument","compileOptions","optionsHash","MessageFormat","_mergeFormats","_resolveLocale","_findPluralRuleFunction","_compilePattern","messageFormat","__localeData__","src$compiler$$","localeData","pluralRuleFunction","parentLocale","src$utils$$","mergedType","mergedFormats","src$es5$$","localeParts","ord","n10","n100","realDefineProp","__defineGetter__","objCreate","__addLocaleData","src$en$$","hop","tabbables","tabbable","TABBABLE_ELEMENT_SELECTOR","FOCUSABLE_ELEMENT_SELECTOR","_scrollToDOMNode","WHITESPACE_REGEXP","FocusManager","keysSoFar","keyClearTimeout","getItems","onFocusFirst","onFocusLast","onFocusPrevious","disableCyclicFocus","onFocusNext","onPageUp","ignorePageUpPageDown","listNode","nextPage","onPageDown","findItemToFocus","character","removeDiacritics","searchIndex","clearKeysSoFarAfterDelay","findMatchInRange","targetSelected","selectedItem","focusTimer","focusableElements","_Transition","OPEN_STATES","entering","entered","_needsNative","isUxp","AccordionItem","Autocomplete","CoachMark","CoachMarkIndicator","CoachMarkPopover","FieldLabel","Form","ModalTrigger","Select","SelectList","Slider","Tab","TabList","Video","UxpComponentFn","WebComponentFn","moduleExports","isBoundingClientRectZero","br1","br2","WrappedComponent","_semverCompare","incrementor","onAltArrowUp","nextFocusOffset","onAltArrowDown","onEscape","mouseDownPrevented","DOMProps","propRe","elementWithFocusRing","addIllustratorStyles","addIllustratorMacOverride","addPhotoshopStyles","variables","_intlMessageformat","userLanguage","alignToStart","parentPosition","parentOffsetTop","parentOffsetLeft","offsetBottom","offsetRight","overlayVisibility","overlayCallback","normalizationForm","isUrl","reactChild","addChildTextToResult","flatMap","SAMErrorCode","SAMErrorSubCode","errorCodeInfos","AUTHORIZATION_ERROR","validateRepositoryCode","ProblemType","SAMErrorName","SAMError","additionalInfo","subCode","errorStr","formatUnderlyingError","responseUrl","reqId","problemType","QUOTA_EXCEEDED","FULL_CLOUD_STORAGE","validHTTPCode","assertedCondition","isSAMError","decorators","decorate","__param","paramIndex","decorator","pathBrowserify","KeysProperty","parameterIndex","cacheImpl","newMethod","keyIndex","_core","SAMEvent","_type","CHANGE","SharedChangeEvent","$OBSERVABLE_MAP","observableImpl","privatePropNames","setEventForProp","JSON_MIME_TYPE","JSON_PATCH_MIME_TYPE","RelType","validateLinks","requirements","hasMissingHrefs","hasAllParameters","getTemplateFromLinks","validateLinkParameters","getURLFromLinks","getRetryAfterHeader","retrySeconds","fillURLTemplate","COMPATIBLE_ENCODING_PATTERN","WS_TRIM_PATTERN","WS_CHAR_PATTERN","WS_FOLD_PATTERN","DELIMITER_PATTERN","WS_DELIMITER_PATTERN","TOKEN_PATTERN","hasWhitespace","skipWhitespace","needsQuotes","setUnique","shallowCompareObjects","object1","object2","expandRelations","attrValue","isSingleOccurenceAttr","parseExtendedValue","formatAttribute","isCompatibleEncoding","isTokenAttr","escapeQuotes","formatExtendedAttribute","Buffer","UNSUPPORTED","VALID_HTTP_RESPONSE_CODES","RETRY_HTTP_RESPONSE_CODES","InterfaceBase","_useHighPriorityRequestsIfEnabled","_sharedResponses","successResponseCodes","additionalRetryErrorCodes","retryErrorCodes","_getFetchOptionOverrides","overrides","_monitorResponse","_getRetryErrorDelay","_checkResponseStatus","createWithResponse","_getMonitorRetryAfter","_fetchMonitorResponse","asyncUrl","_shouldRetryMonitorResponse","newDelay","_doGet","additionalFetchOptions","_doHead","_doPost","noOtherHeaders","_doPatch","_doPut","_doDelete","_getResponse","_getSharedResponse","_getPagedResponse","PAGE","nextHref","PRIMARY","_getAllPages","fullResult","readPages","requestFn","_getLinksFromHeaders","linkHeader","LinkHeader","otherData","_getETagFromHeaders","adminModeOrgID","attempt","getRetryInterval","promisesMapProperty","outerResolve","BECOME_OBSERVED","BECOME_UNOBSERVED","TypedEventEmitter","_onEventListenerAdded","_onEventListenerRemoved","WeakRefPolyfill","updateLastKnownClientMutationValues","updateLastKnownClientMutation","updateLastKnownClientMutationKeys","UpdateSession","updateContext","mostRecentValidMutation","_addedItems","_changedItems","_discardedItems","addedItems","changedItems","discardedItems","changedItemsWithEvents","checkIfItemAllowsMutations","lastKnownClientMutation","ensureItemIsAdded","getLocalItemById","isItemDiscarded","queueAddedItem","reindexItem","_setId","queueChangedItem","itemEvents","queueDiscardedItem","getItemById","commitUpdateSession","rngBrowserModule","bytesToUuid_1","require$$0","require$$1","v1_1","v4_1","uuid_1","samJsUuid","getFiltersRelation","requestedFilter","getRelationToFilter","LOADER_STATE_CHANGED","ItemLoaderStateChangeEvent","hasUpdatedItems","SharedEventWithoutItemChanges","SharedEventWithItemChanges","ItemLoaderPage","startedGeneration","loadedGeneration","ItemLoaderState","_loader","_filter","_implicitFilter","NotStarted","_pages","_generation","_nextPageIndex","_loadAllPages","_mostRecentValidMutation","generation","_nextPageCallback","_pendingLoad","_loadPage","loadNextPage","collectAllItems","_ensurePage","pageIndex","pendingLoad","_loadPageImpl","nextPageCallback","startGeneration","previousPageGeneration","_updateStatus","pageLimit","implicitFilter","loaderError","_updateStatusAndLinkToNextPage","HadLoaderErrors","ReadyHasMorePages","ReadyFullyLoaded","didLoadNextPageBefore","newStatus","hasItemChanges","CONFIG_CHANGE","ItemListStateChangedEvent","COLLABORATOR_CHANGED","SharedCollaboratorChangedEvent","AppMetadataField","SHELL_VISIBILITY","CC_INHERITED","REVIEW_SOURCE_ASSET","CONVERTED_TO","NON_AUTO_MIGRATABLE","COPIED_IN_LEGACY_SPARK_TO","CC_INHERITABLE","PROJECT_RENDITION","RapiAppMetadataWildcardNamespaces","CC","CLASSROOM_ASSIGNMENTS","NewFormatAppMetadataField","HZ_DOCUMENT_METADATA","CC_CREATED_FROM_UPLOAD","AppMetadataNamespacesRapiFormat","EmbedAppMetadataFieldsRapiFormat","EmbedAppMetadataFieldsUSSFormat","USSFetchFields","COLLABORATION_METADATA","COLLABMETADATA_MINE","REPO_CREATED_BY_CLIENT_ID","getUSSFetchFields","Permission","parseEffectivePermissions","policy","AC_POLICY","directory","DIRECTORY","APP_METADATA","perm","Ack","Read","Duplicate","Write","Discard","Restore","Move","ReadAppMetadata","PROJECTS_INDEX_LINKS","PROJECTS_PRIMARY","PROJECTS_COLLECTION","PROJECTS_CREATE","RESOLVE_PATH","PROJECTS_GRADIENTS_COLLECTION","PROJECTS_CONTEXT","IProjectPatchKeys","ProjectViews","ProjectCapabilities","ProjectLeaveReason","CanCreateProjectReason","CustomModelPublishedState","CustomModelOrderBy","projectEnumToString","projectView","SWY","Yours","Admin","shownWarnings","oneTimeWarning","topic","EverythingFilter","LIST_CHANGED","LIST_FULLY_LOADED","LOADER_UPDATE_CONTEXT","SharedListChangedEvent","SharedStateChangedEvent","GlobalGeneration","ItemList","_itemPool","loaders","similarItemList","_loadOptions","_items","_completedGeneration","_loaderStates","_lastFetchTime","_needsRefresh","_itemUpdatesByGeneration","_listId","_onUnhandledPromiseError","_updateListStatusFromItemLoaderStates","_errors","_handlePendingLoad","_runLoaders","loaderState","_onItemLoaderStateChanged","_cleanPreviousGenerationItemsIfNeeded","_updateListItemsFromItemLoaderStates","_globalStateChangedEvent","_itemPoolDelegate","onItemsUpdated","pendingNotifications","_pendingNotifications","supportsFilter","_copyInitialItemsFrom","addDelegate","_updateLoadOptions","loadOptions","refreshTimeout","_loadAsync","completedGeneration","hasLoaders","lastFetchTime","itemGeneration","_applyListItemsFrom","sortItems","_dispatchItemsChangedEvent","_dispatchStateChangedEvents","_total","globalMostRecentValidMutation","_cleanPreviousGenerationItems","_applyItemsChangedEvents","currentGeneration","hadChanges","mostRecentDeletedGeneration","previousLoadPromise","_previousLoadPromise","_ensureAllPagesAreLoaded","_loadNextPageAsync","setNeedsRefresh","itemSet","notification","included","ITEMS_CHANGED","ItemsChangedEvent","compareDelegatesByPriority","ItemPool","_objectsById","_discardedObjects","_delegates","_hasUnsortedDelegates","_getObjectsById","removeLocalItems","_updateSessionDelegate","objectsById","discardedObjects","delegates","hasEmptyWeakRefs","createUpdateSession","createLoaderUpdateSession","createMutationSession","createLoaderMutationSession","SearchProps","LastAccessedOrderField","OrderByToUSSOrderBy","lastAccessed","DefaultSearchQuery","asset_id_opacity","USSInterface","_getEndpointHref","endpoints","USS_HOST","getQueryResponse","endpointHref","packageJSON","searchSpace","parentFolderId","searchArtifacts","embedPermissions","hints","acp_platform_v2","creative_cloud_rendition_v2","fetch_fields","sort_orderby","sort_order","start_index","op_field_exists","ARTIFACT_FIELD","op_none_of","VISIBLITY","InvitationInterface","_batchRequestLimit","batchRequestLimit","_getUrl","INVITATIONS_HOST","addCollaborators","modifyCollaborators","getCollaboratorListForUrns","urns","confirmAccess","jobStatus","declineAccess","getPendingInvitations","isStrictEqual","deepClone","isDeepEqual","ignoreArrayOrder","toISOString","arry1","arry2","finalizationRegistry","FinalizationRegistry","objUrl","RenditionStatus","RenditionSize","RenditionType","THUMBNAIL_SIZE","Size512","SUPPORTED_SIZES","Size64","Size128","Size256","Size1024","RenditionFetcher","_etag","_getStandardSize","targetSize","sortedArray","_findURLEntry","clampedSize","_clearStaleEntries","outdatedEtag","filteredEntries","_getEntryWithFallback","foundEntry","sizesArray","foundSize","renditionURLStatus","urlStatus","assetInterface","etagChanged","renditionEntry","newEntry","Fetching","recentlyAddedEntry","renditionBlob","Done","clearRenditionError","foundErrorEntryIndex","unregister","RESERVED_NAME_REGEX","RESERVED_CHAR_REGEX","validatePlatformRepoName","formatFileName","getRegexFormat","extPresent","regexFormat","formatWithoutCount","regexFormatWithoutCount","resultMatchedRegexWithoutCount","countUsed","batchFormatFileName","sameFolder","assetConflictMap","localCounter","conflictWithOtherFilesInBatch","conflictedAssetIds","formatFileResult","ARCHIVE_GUID_REGEX","removeArchiveGuidFromName","ARCHIVE_TO_RESTORE_LOCATION","getRestorePath","archiveIndex","restoreFolder","renameFileInPath","repoPath","updateCachedDescendents","assetPool","isFolder","newChildPath","_adobeAssetUpdater","updateLocalItem","repoState","ancestorIDs","getBatchRenamedAssetName","BULK_TRANSFER_MIME_TYPE","DENY_SHARE_ACE","DENY_EDIT_ACE","ANNOTATIONS","EMBEDDED_METADATA","REPO_METADATA","getRestrictEditUserGrantACEs","VersionPatchTypes","DefaultAssetsListingOptions","orderDirection","DefaultVersionsListingOptions","createPageTemplate","templateValues","getDirectionValue","userOptions","getAssetsListingURL","getAssetVersionsListingURL","createVersionTemplate","AssetInterface","_rapi","_assetId","assetID","getChildAssets","getRepoMetadata","repoMetadata","resolveHref","getAssetResolveByIdHref","getEmbeddedMetadata","Accept","getEffectivePermissions","AC_EFFECTIVE","getAssetPolicy","getManifest","getVersions","getLastAccessed","PERUSER_METADATA","perUserMetadata","lastAccessedISOString","restoreVersionManifest","versionManifestLink","versionManifest","assetManifest","patchVersion","createFolder","relativePath","CREATE","intermediates","respondWith","_uploadIndividualBlock","_blockUpload","mediaType","initialBlockUploadHref","BLOCK_INITIALIZE","initBody","blockUploadInfo","transferHrefs","BLOCK_TRANSFER","finalizeHref","BLOCK_FINALIZE","uploadRequests","MAX_SIMULTANEOUS_BLOCKS","getBlockDownloadURL","commitFileChanges","localETag","MetaData","eTag","_counter","runOperation","discard","patchLastAccessed","bodyData","wrapErrorIfNeeded","newURL","getCustomRendition","PNG","urlTemplateOptions","additionalHeaders","getAllCustomRenditions","setEditingInheritanceRestricted","restrictEdit","addCurrentUserAsEditor","addPatches","userACEs","_patchACL","_getEditingInheritanceRestrictedInfo","policyResponse","denyEditAceIndex","denyShareAceIndex","removePatches","ace1","ace2","patches","getEditingInheritanceRestricted","acl","denyEditAce","ace","denyShareAce","NotFound","IndexedDBCache","_transaction","database","promResult","deleteItem","_clear","LocalStorageCache","_getKey","Cache","_userId","_persistentCache","_localCache","validateValue","expiryMs","cachedItem","expirationDurMsec","synchronized","RepositoryInterface","repositoryIndex","ACP_CS_HOST","repositoryNameIndex","_fetchIndexState","_getAndCacheDocument","getRootLink","getIndex","rootDocument","fetchIndexState","pendingCacheClear","indexJson","_clearIndexCache","_getAndCacheLinksFromHref","getCloudQuotaUsedAndMax","getHomeDirectoryMetadata","used","resolveById","getRepoMetadataById","RESOLVE_ID","getRepoMetadataByPath","resolveByIdHref","_getHomeDirectoryMetadata","cachedIndex","INVALID_OPERATION","OPS","opHref","firstOp","moveResources","createWithRepositoryCode","OPERATION_FAILED","runOperationsForContext","modelsById","itemPool","updateLocalModel","errorHandlers","resultOps","failedResults","newModels","currentModel","updatedModelMetaData","failedOp","newModel","samError","getRepositoriesData","fetchRepositories","getRepositoryName","getAssetsOwnerDetails","repoData","getAssetLinks","ac.AbortController","ac.AbortSignal","ONS_SUBSCRIPTION_MIME_TYPE","ONS_AUTH_HEADER","defaultONSObjectProperties","ONSSubscription","_onsInterface","cachedSubscription","_watchedAssets","_initializedFromCache","_subscriptionId","_subscriptionHref","_expiresAt","subscriptionId","subscriptionHref","lastError","_lastError","watchedAssets","_retryTimeout","tryAttempt","fromCache","_deleteSubscriptionFromServer","_updateSubscriptionOnServer","_createSubscriptionOnServer","DEFAULT_RETRY_INTERVAL_SEC","_parseSubscriptionResponse","getResponse","errMsg","jsonError","SUBSCRIPTION_COUNT","createWithResponseAndDescription","_createObjectsRequestBody","objects","_createRequestBody","getDeviceId","requestBody","_getLink","SUBSCRIPTION_CREATE","authHeader","oldAssets","refreshSubscriptionExpiryDate","_fetchChangeLogPage","changedAssets","_nextChangeLogLinks","GENERIC_NEXT","ONS_CHANGELOG","LIMIT_CHANGELOGRETENTION","changedSubscriptions","changedSubscription","subscriptionInfo","assetInfo","onsResourceInfo","onsResourcesChanged","parentAssetId","existingAsset","changedResources","fetchAndNotifyChanges","_retryChangeLogTimeout","hasMorePages","checkResponse","REQUIRED_LINKS","NOTIFICATIONS_LONGPOLL","FIRST_LONG_POLL_STARTED","FIRST_LONG_POLL_COMPLETED","ONSInterface","_cacheEnabled","_isStarted","_subscriptions","_maxAssetsPerSubscription","_assetIds","_cachedSubscriptionsUsed","_onSubscriptionChange","_updateCachedSubscriptions","_startLongPoll","_onVisibilityChange","_stopTimeout","_document","_start","_stop","_getSubscriptionConfig","_getRootDocument","subscriptions","newCachedSubscriptions","subscription","updatedCache","_getAndParseCachedSubscriptions","existingCreatedSubscriptions","_ensureSubscriptions","subscriptionConfig","maxSubscriptions","maxSubscriptionPerLongPoll","maxAssetsPerRequest","parsedCachedSubscriptions","_activeSubscriptionIds","subscriptionIds","includeJournal","newPollURL","isUrlChanged","_pollURL","watchedAssetIds","_poll","_truncateAssetIdsByMaxSizeIfNeeded","maxTotalAssets","watch","assetIdsToMonitor","_assetPool","ancestorIds","existingAssetIds","subscriptionToAssetIds","directoryLevel","_notifyFirstLongPollStarted","cachedSubscriptionsUsed","_notifyFirstLongPollCompleted","expired","_validateAndUpdateSubscriptionExpiration","ttl","requestTimeoutMs","checkSubscriptions","SYNC_SERVICE_HOST","AssetClassChoices","AssetStateChoices","MoveWarning","CannotMoveReason","ItemExclusiveTaskChain","onGotOwnership","registerNewTask","newTask","itemTask","ItemBase","_lastKnownClientMutation","waitForMutationPropagationIfNeeded","mutation","waitTime","exclusiveTask","_exclusiveTaskChain","_setExclusiveTaskChain","itemTaskChain","runTask","waitCount","compareStrings","localeCompare","compareValues","createItemOrderFactory","comparatorMap","comparator","reverseComparator","OrderFieldToISWYAdobeAssetOrderBy","OrderFieldToComparator","SWYAdobeAssetOrder","USSAssetFilterName","USSLoaderHelper","latency","mediaTypes","adobeAssetFilter","excludeMediaTypes","uploadedFrom","ussAssetFilter","_getUSSResults","resultSet","result_sets","_extractItems","total_items","pageItemCount","nextStartIndex","_postProcessPage","_getItemData","publicLink","directCount","collaboration_metadata","collaborator_id","sharedViaInvite","isShared","isPublicLink","directCollaboratorCount","shareFlagsAreDirty","_adobeAssetFactory","assetsFromUSSMetadata","_libraryContext","SWYAdobeAssetLoader","_swyInterface","_ussLoaderHelper","getLibraryContext","getSWYAssets","updateAssetTypeForUSS","DefaultSBMAssetsListingOptions","SBMInterface","getSharedByMeAssets","_ussInterface","DefaultSWYAssetsListingOptions","SWYInterface","shared_via_invite","CREATIVE_CLOUD_TOPLEVEL_COLLECTION_NAME","STORAGE_ASSIGNEE_ID","DefaultAssetsListingSearchOptions","AdobeAssetSearchInterface","getFilteredAssets","STORAGE_ASSIGNEE_TYPE","deepSearch","op_and","CREATED_FROM_UPLOAD","op_or","CREATED_BY_CLIENT_ID","OP_OR","DefaultAssetsListingGlobalSearchOptions","AdobeAssetGlobalSearchInterface","SHARED_VIA_INVITE","DefaultRecentAssetsListingOptions","RecentInterface","_getCommonFilters","FIELD_EXISTS","OP_AND","getRecentAssets","storageAssigneeQuery","getMRUAssets","$LAZY_LOAD_MANAGERS","LoadStatus","LazyLoadManager","prefetchTimeout","retryErrorTimeout","cancelFetchData","_loadStatus","NotLoaded","_prefetchTimeout","_retryErrorTimeout","_retriesRemaining","_onBecomeUnobserved","Pending","_cancelFetchData","setLoadStatus","_prefetchResolve","_fetchData","cfg","foundEvent","loadStatus","fetchIfNeeded","updatedExternally","_prefetchDelay","onPropertyAccess","Loaded","lazyLoaded","ShareableItem","_collaboratorsArray","_shareFlagsAreDirty","_setCollaboratorData","manageLazyLoading","_queueCollaborators","_dequeueCollaborators","_fetchShareFlagsIfNeeded","_isShared","isSharedWithYouAsset","_isSharedWithYouAsset","_directCollaboratorCount","_isPublicLink","_isSWYAsset_NoLazyLoad","_isShared_NoLazyLoad","_directCollaboratorCount_NoLazyLoad","_isPublicLink_NoLazyLoad","_isCollaboratorDataLoaded","getLoadStatus","_collaboratorRequestQueue","enqueue","dequeue","collaboratorArray","_collaboratorSources","_getCollaboratorSources","collaboratorPool","removeCollaborator","_removeCollaborator","removeCurrentUserFromCollaborationList","_removeCurrentUserFromCollaborationList","invitedCollaborators","invitedCollaboratorSource","removeInvitedCollaborator","invitedCollaborator","collaboratorItemPool","isCurrentUser","Resource","_loadData","_mergeData","_setData","EmbeddedMetadataResource","_ensureLink","_getAssetInterface","AppMetadataResource","_patch","ManifestResource","ItemUpdater","_propertyUpdater","propertyUpdater","_changeEvent","_changeEventsMap","changeEventMap","localItem","remoteItem","changedFields","changeEvents","changedProperty","getEventForProp","_localItemType","localItemType","_getRemoteId","_getAlternateIds","getAlternateIds","updateRemoteItem","altIds","altId","LocalItemType","updateRemoteItems","remoteItems","remoteIdProperty","alternateIdProperties","altIdProperty","isEqual","date_as_number","boolean","object_subset","destObj","sourceObj","destObjSubset","KEY_REGEXP","makeGetFn","makeSetFn","parsedSource","makeMergeSetFn","normalizeFormat","mapByKey","choices","createPropertyUpdater","userType","normalizeType","anyDest","destValGetter","destVal","parsedItem","PropertyUpdater","_updaters","propertyChanges","updateObj","ImplicitAdobeAssetFilterBase","_isDiscarded","_isPublished","_isSharedWithYou","_includeHiddenRecursive","isComposite","sizeInBytes","shellVisibility","AdobeAssetSearchFilter","_query","_deepSearch","_asset","assetRepoPath","thisFilterRepoID","otherFilterRepoID","OrderFieldToIAdobeAssetOrderBy","AdobeAssetOrder","AdobeAssetDirectoryLoader","_includePermissions","_loadLibraryData","librariesDataPromise","isProject","_libraryInterface","getLibrariesForProject","rapiPage","libraryContext","assetsFromRepoMetadata","librariesInPage","_setLibraryLoadState","_updateLibrariesData","_getSafeLibraryData","librariesToUpdate","librarySpecificData","_libraryUpdater","USSv3OrderField","USSv3OrderDir","USSv3FilterField","FetchFields","OrderFieldToIUSSAdobeAssetOrderBy","OrderFieldToUSSv3OrderField","Name","Created","Modified","USSAdobeAssetOrder","AdobeAssetDirectorySearchLoader","_adobeAssetSearchInterface","_getItemDataWithRepoId","ussFilter","repoID","listEventSource","OrderDirection","OrderField","candidateSort","filterRelation","ItemSource","_lists","_getExistingList","mostCompleteList","_getMostCompleteCompatibleList","_onListFullyLoaded","_getListHash","getListWithTypes","orderDir","orderField","existingHash","listWeakRef","_getLists","lists","loadedList","AssetVersion","_assetEtag","_createdAt","_createdBy","_manifest","_headAssetInterface","_assetLinks","__links","milestone","_label","_description","_getRenditionFetcher","_renditionFetcher","setMilestone","jsonParams","_versionPool","VersionUpdater","removeMilestone","AssetVersionLoader","_assetInterfacePromise","assetEtag","assetLinks","total_children","FileContentResource","_setContent","AssetVersionFilter","_isMilestone","isMilestone","_createdAfter","createdAfter","_createdBefore","createdBefore","matchesBookmark","matchesCollab","matchesDateRange","matchesVersion","_getRelationWrtMilestone","_getRelationWrtCreatedBy","_getRelationWrtDateRange","thisRange","otherRange","_getRelationWrtVersion","relations","relation","ImplicitDirectoryListingFilter","thisFilterRepoPath","otherFilterRepoPath","addProjectIdToMetadata","AssetType","AssetSyncStatus","AssetSyncSuspensionReason","CommitStatus","assetClassToTypeMap","Composite","APP_METADATA_REFRESH_IGNORE_REGEX","AdobeAsset","_repositoryID","_storageRegion","_size","_assetClass","_assetState","_created","_modifiedBy","_permissions","All","_storageAssignee","_isArchivedLibraryElement","_needsRepoMetadata","isCustomModel","_linksCameFromResolveAPI","isAvailableOffline","isUserPinned","isNameDCTitle","_embeddedMetadata","_appMetadata","_fileContent","_finalizer","createdFromUpload","ccCreatedFromUploadPropertyName","_createdFromUpload","createdByClientId","_createdByClientId","_loadWithRetry","_resources","_reloadPermissions","assetMetadata","effectivePermission","hasLostAccess","resolutions","resourcesToReload","getCommentsResource","isAssignment","isLibraryElement","imageLength","_imageLength","imageWidth","_imageWidth","parentAssignmentID","isChildOfAssignment","parentClassroomId","isChildOfClassroom","parentAssignmentMaterialsId","isChildOfAssignmentMaterials","parentStudentAssignmentId","isChildOfStudentAssignment","_isPathInsideProject","parentProjectID","parentIsMissingFromAncestorIDs","_ancestorIDs","_fixParentProjectID","_callContextAPI","isChildOfProject","isArtifact","needsRepoMetadata","isReviewLink","reviewLinkSourceType","dcFormat","_repositoryName","_populateRepositoryName","storageRegion","_lastAccessed","updateLastAccessed","accessDate","_shared","assetRefString","cloud_id","display_name","repository_id","searchChildren","_hasArtifacts","_deleteAssetOutputsFolder","hasArtifacts","_clearRepositoryName","_repositoryNameFromID","retryOnConflict","newFolderMetaData","_createAssetFromMetadata","_setCreatedFromUploadData","newFileMetaData","assetFromMetadata","getDownloadURL","blobUrl","DOWNLOAD","blockDownloadServiceURL","fileContent","newFileDetails","NoErr","committedEtag","Conflict","parentRepoPath","parentDeleted","parentAsset","ParentDeletedConflict","DeleteConflict","newAsset","restoreLibraryElement","restoreLocation","_move","PARENT_DISCARDED","permanentlyDeleteLibraryElement","permanentlyDeleteAssets","resultItems","discarded","_discarded","discardedBy","_discardedBy","embeddedMetadata","_releaseRenditions","thumbnailURL","thumbnailStatus","spaceID","isSpaceAsset","getSpace","spaceContext","getEnclosingSpace","space","destFolder","destName","modelUpdater","runExclusiveTask","_finalizePath","currCounter","assetsById","_getCopyOp","_runOperations","_copyWithDestMetadata","destFolderRepoId","destFolderRepoPath","targetName","newMetadata","newAssetName","assetRenameMap","moveAssets","transferToSpace","transfer","getPermission","StorageAssigneeFormat","AdobeAssetUpdater","USSAdobeAssetUpdater","composite_manifest_etag","asset_name_path","asset_name","creative_cloud_asset_type","asset_sub_type","AssetTransferInterface","discoverLinks","ATS_MOVE","getUrl","TRANSFER_SERVICE_HOST","REVIEW_SERVICE_LINKS","REVIEW_SERVICE_PROVISION","REVIEW_SERVICE_DISCARD","REVIEW_SERVICE_OUTPUTS","REVIEW_SERIVCE_HAS_OUTPUTS","mapAssetsToAssetIndentifier","AssetReviewServiceInterface","baseURL","REVIEW_SERVICE_HOST","baseEndpoint","indexEndpoint","getEndpointURL","_discoverLinks","rootHref","_getHeaders","discardOutputsForAsset","assetRegion","hasOutputs","_createFrameLinkUrl","createReviewLink","reviewLinkId","artifactId","getReviewLinks","updateReviewLink","deleteReviewLink","reloadSpace","clearLastReloadError","SpaceSearchAssetLoader","_artifactFilter","_embedPermissions","supportedFilters","artifactFilter","SpaceSearchAssetFilter","otherRepoPath","mediaTypeRelation","Space","_pathName","_contributorCount","_role","_color","_isBookmarked","_teamID","_teamName","_thumbnail","_access","_loadedGeneration","_teamRole","pathName","contributorCount","teamID","teamRole","ensureDescription","getChild","searchWorkingFiles","workingFilesFolder","spaceSearchAssetLoader","spaceAdobeAsset","getWorkingFiles","lastReload","_lastReload","requestTime","_executeReload","spacePool","isReloading","lastReloadError","updateSpace","archive","archiveSpaces","nameMap","restoreSpaces","SpaceUpdater","RecentAdobeAssetLoader","_recentInterface","loaderOptions","_lastModificationDate","RecentAdobeAssetFilter","otherAdobeAssetFilter","retryFailedOpsDueToConflict","conflictMap","conflictRetryOp","failedAssetsDueToConflict","otherFailedOps","newResultOps","MRUAdobeAssetLoader","MRUAdobeAssetFilter","parseLibraryAndElementID","libraryElementID","getLibraryAccessOption","melvilleUrl","paramAsHeader","urlParamsString","LibraryInterface","MELVILLE_HOST","getLibraryData","urlWithQueryParams","defaultHeaders","finalHeaders","getLibrariesWithLink","pageLink","discardLibrary","restoreLibrary","parentAssetID","accessString","nameOrOptions","syncCreate","requestOptions","bookmarkLibraries","getBookmarks","unbookmarkLibrary","bookmarkId","updateMetadata","DefaultPublishedAssetsListingOptions","PublishedInterface","getPublishedAssets","PublishedAdobeAssetLoader","_publishedInterface","published","PublishedAdobeAssetFilter","DiscardedAdobeAssetFilter","isSyncedAsset","isMobileCreation","DISCARD_FETCH_FIELDS","MOBILE_CREATIONS_MIMETYPES","DiscardedInterface","getDiscardedAssets","creative_cloud_archive","creative_cloud_discarded_directly","REPO_ACL_MODIFIER","REPO_ACL_PRIVILEGES","REPO_ACL_RELATIONS","DiscardedAdobeAssetLoader","_discardedInterface","_getListOfRepositoryIDs","repositories","_canRestoreProject","LERenditionURL","creative_cloud_colortheme","creative_cloud_gradient","isArchivedLibraryElement","AdobeAssetGlobalSearchFilter","_projectsOnly","projectsOnly","_matchingIDsFromSearch","MobX","instanceInfo","references","Env","DEFAULT_CONFIG","USER_EMAIL","Production","FETCH_REQUEST_TIMEOUT","ASYNC_DEFAULT_DELAY","CACHE_DEFAULT_TTL","MIN_RETRY_INTERVAL","MAX_RETRY_INTERVAL","ONS_DOCUMENT_VISIBILITY_TIMEOUT","ONS_DEFAULT_MAX_SUBSCRIPTIONS","ONS_DEFAULT_MAX_ASSETS_PER_SUBSCRIPTION","ONS_SUBSCRIPTION_TIME_TO_LIVE","ONS_SUBSCRIPTION_RENEW_TIME","INDEXED_DB_VERSION","PROJECTS_LIST_UPDATE_LATENCY","PROJECTS_ITEM_UPDATE_LATENCY","CLASSROOMS_LIST_UPDATE_LATENCY","ASSETS_LIST_UPDATE_LATENCY","USS_LIST_UPDATE_LATENCY","VERSIONS_LIST_UPDATE_LATENCY","ASSET_COPY_NAME_FORMAT","ASSET_CONFLICT_NAME_FORMAT","ENABLE_ONS_CACHE","_VERSION_OVERRIDE_FOR_TEST","LOCALE","SESSION_TYPE","USE_GRAPHQL","FEATURE_FLAGS","ENVIRONMENTS","Stage","LABEL","PROJECTS_HOST","ASSIGNMENTS_HOST","XDCE_HOST","USSv3_HOST","PPS_HOST","BEHANCE_HOST","CLASSROOMS_HOST","COMMENT_HOST","isNonEmptyString","configItemValidators","isNumber","hostProductData","userConfig","_isTokenInvalid","featureFlagsConfig","invalidOptions","invalidKeys","configurationKeyName","Warn","requestInit","auth","uncombineSignals","timeoutLength","requestIdString","USSv3Interface","queryPath","queryEntry","queryEntryWithDefaults","SharedBy","LastAccessDate","CCInheritable","CCInherited","HzDocumentMetadata","experienceId","queries","USSv3LoaderHelper","_getItemDataWithUserId","excludeInheritanceTypes","queryResult","queryResults","totalHits","rm","sharedBy","am","assetsFromUSSV3AppMetadata","GlobalSearchLoader","_globalSearchInterface","globalSearch","GlobalSearchInterface","DIRECTORY_TYPE","MEDIA_TYPE","INHERITANCE_TYPE","textQuery","sorts","sortOrderBy","Ascending","Descending","AdobeAssetGlobalSearchLoader","_adobeAssetGlobalSearchInterface","SWYAdobeAssetFilter","DefaultEmbeddedResources","PROJECTS_CREATOR","REPOSITORY","DefaultProjectsListingOptions","getProjectsListingPath","Defaults","getDefaultOptions","ProjectsInterface","_gradientLanguageFetched","_getProjectLink","getProject","getProjectsWithLink","_getCreateLink","createProject","CHILDREN_LIMIT_EXCEEDED","PROJECT_LIMIT_EXCEEDED","_getResolveByPathLink","renameProject","PROJECTS_RENAME","validateProjectName","discardProject","DISCARD","restoreProject","RESTORE","getGradients","languageCode","cacheData","_refreshGradients","_getGradientsLink","patchProject","GRADIENT_ID","_getCapabilityLink","capability","PROJECTS_CAPABILITY","privilege","getCapability","errorResponse","ADMIN_ONLY","NO_HOME_REPOSITORY","INVALID_HOME_REPOSITORY","PROJECTS_ADMIN_ONLY","PROJECTS_NO_HOME_REPOSITORY","PROJECTS_INVALID_REPOSITORY","_issueContextAPIRequest","repoId","ASSIGNMENTS_INDEX_LINKS","ASSIGNMENTS_COLLECTION","ASSIGNMENTS_CREATE","ASSIGNMENTS_PRIMARY","AssignmentStatus","assignmentRemoteFieldMapping","canClassroomReadSubmissions","instructions","dueDate","externalTemplateIds","templateIds","tasks","referenceIds","externalTutorials","AssignmentTaskIDEnums","ClassroomMemberRole","ClassroomMemberStatus","ClassroomMemberInviteSource","validateType","toDateString","enumValue","validateTypes","validationMap","article","getMemberComputedKey","classroomId","DefaultAssignmentsListingOptions","getAssignmentsListingPath","validateAssignmentData","assignmentDataToValidate","tutorial","validateTutorialData","hasTasks","hasTemplates","hasTutorials","hasExternalTemplates","DRAFT","AssignmentsInterface","getAssignments","getAssignment","assignmentId","getAssignmentByCode","createAssignment","ASSIGNED","extTemplateIds","extTutorials","patchAssignment","discardAssignment","restoreAssignment","StudentAssignmentStatus","StudentAssignment","_assignmentId","NOT_STARTED","_student","student","_studentDirectoryId","studentDirectoryId","_submission","submission","_submissionDate","submissionDate","getFiles","classroomContext","getStudentAssignmentFiles","canStart","canReturn","SUBMITTED","_returnAssignment","studentAssignmentId","submissionId","remoteStudentAssignment","_startAssignment","submit","submittedAsset","formattedDate","_getFormattedCreatedDateHelper","includeFormattedDate","getAssignmentByID","assignment","updatedName","submitAssignment","StatusOrderValues","IN_PROGRESS","RETURNED","compareStudentDisplayName","studentDisplayName","StudentAssignmentOrder","AssignmentStatusChoices","Assignment","_assignmentInterface","_canClassroomReadSubmissions","_classroomId","_externalTemplateIds","_externalTemplateIdsRemote","_instructions","_isAutoCreated","_studentAssignments","_externalTutorials","_isExternalTutorialsDirty","studentAssignments","getStudentAssignmentsByStatus","existingStudentAssignments","existsList","isAutoCreated","_dueDate","_tasks","_templateIds","templateIdOrTutorial","_referenceIds","templates","materialsFolder","_materialsFolder","isPartialAssignment","assignmentMetadata","assignmentPool","AssignmentUpdater","updateAssignment","setTemplates","templateAssetIds","assignAssignment","_assignmentLinks","studentAssignment","externalTemplateIdsAndTutorials","libraryMediaTypeString","appMetadataIsProject","app_metadata","ussV3ItemMetadataIsProject","ussV3ItemMetadataIsLibrary","ussMetadataIsLibrary","ussV3ToProjectMetadata","ussToProjectData","ussToLibraryData","ussV3ToLibraryData","AdobeAssetFactory","getItemData","_projectUpdater","_applyRestorePermission","repoMetadatas","assetFromRepoMetadata","projectMetadata","repoMetadataIsLibrary","assignmentData","repoToAssignmentData","CommentInterface","_getCommonHeaders","getCommentList","getComment","annotationId","editComment","deleteComment","getMetadata","annotId","_creator","_bodyValue","_motivation","_mentions","_uri","_replies","_readStatus","bodyValue","motivation","mentions","replies","readStatus","assetUrn","_pool","_commentsResource","_commentPool","_interface","_commentInterface","edit","commentInterface","commentPool","CommentUpdater","updateResolvedStatus","isResolved","updateReadStatus","isRead","creationId","reply","CommentLoader","_retryAfter","comments","CommentOrder","CommentsResource","_source","_list","readStatuses","startShortPoll","stopShortPoll","isShortPollActive","CloudSyncStatus","NetworkStatus","ONSFirstLongPollStartedEvent","ONSFirstLongPollCompletedEvent","AssetContext","_ons","_invitationInterface","_SBMInterface","_assetTransferService","_assetReviewServiceInterface","__ussInterfaceV3","_globalSearchInterfaceV3","_commentsById","_onHomeFolderChange","_onONSNotification","changedIDs","_onAssetsChanged","assetIDs","repoInterface","onsInterface","ussInterface","ussInterfaceV3","sbmInterface","swyInterface","recentInterface","invitationInterface","publishedInterface","sharedSource","swyloader","recentAssetsSource","recentAssetsLoader","MRUAssetsSource","MRUAssetsLoader","publishedSource","publishedLoader","discardedSource","getGlobalSearchAssetsSource","globalSearchLoader","getGlobalSearchAssetsSourceV3","networkStatus","OnlineUnknown","_getAssetById","resolveMetadata","getHomeFolder","_homeFolder","homeDirectoryMetadata","getRootFolder","_rootFolder","getUserRepoID","homeFolder","userContentRootFolder","repositoryMetadata","topLevelFolder","topLevelPath","appearsOnlyOnce","getAssetWithAssetRefString","assetRefStr","parsedAssetRef","assetMetaData","repositoryInfo","getXDCEData","removeAssetsFromAssetsPool","onItemsChanged","permanentDeletedAssetsIds","deleteOp","assetResults","workingFiles","_moveAssets","getMoveCapability","targetFolder","canMove","NotAFolder","PermissionDeniedDestination","PermissionDeniedSource","assetRepoOwnerById","targetRepoOwner","DifferentOwner","CollaboratorMaybeEditing","needsProcessing","_processNow","assetsHaveArtifacts","assetIndentifiers","_copyAssets","copyAssets","duplicateAssets","assetUpdater","updatedAssetMetaData","getAssetInterface","assetMetadataProperties","isBrokenAsset","typesWithUnreliableInstanceID","_assetLinkList","_resolutionErrors","brokenAssets","_resolvedAssets","_setLinkData","_resolveWithRetry","_setLinkedAsset","_getLinkDataForAsset","containerAsset","_serializeLinkData","_resolve","resolvedAssets","resolutionErrors","alternativeAdobeAsset","instanceID","shouldCheckEtag","assetHasChanged","assetLinkData","hasMetadataChanges","getAssetLinkRefString","getNewAssetLinkRefString","updateWithAsset","updateWithLinkRefString","linkRefString","acceptMetadataChanges","AssetLinkList","_containerAsset","_directlyMonitoredAssetIDs","_refreshLinks","_monitoredAssetIDs","monitoredChangedIDs","normalizedId","linkReferences","fragmentSpecifier","deactivate","updateContainerAsset","assetLinkList","AssetLinkManager","_onListChange","removeList","WORKSPACE_INDEX_LINKS","WORKSPACES_CONTEXT","TEAMS_PAGE","WORKSPACES_PRIMARY","WORKSPACES_PAGE","REPOSITORIES_PAGE","TEAMS_CREATE","TEAM_PROVISION","WORKSPACES_BOOKMARKS_BATCH","TEAM_PROVISION_SUCCESS_CODES","SPACE_FULL_SELECTOR","DefaultTeamListingOptions","DefaultSpacesListingOptions","getTeamListingPath","nameContains","getSpacesListingPath","bookmarkFilter","teamAccess","WorkspacesInterface","getOrgRepositories","createTeam","permanentlyDeleteTeam","TEAMS_PRIMARY","archiveTeam","TEAMS_DISCARD","restoreTeam","teamLinks","TEAMS_RESTORE","renameTeam","TEAMS_RENAME","patchTeam","TEAMS_PROPERTIES","getTeamProperties","provisionTeam","getSpaces","spaceLink","spaceLinks","bookmarkOp","createSpace","WORKSPACES_CREATE","patchSpace","getEnclosingSpaces","OrderFieldToIProjectsSpaceOrderBy","SpaceOrder","SpaceLoader","_spacePool","_workspaceInterface","_teamRoleGetterFactory","resultPromise","teamRoleFn","pageSpec","totalLimit","AvatarSizes","CollaboratorRoles","ContributorRoles","InheritanceTypes","_isDirect","_assetID","_canShare","hasProfile","_additionalData","linkedIdentity","additionalData","organizationName","_inheritances","canShare","avatarURL","getAvatarURL","Size138","CollaboratorUpdater","repositoryOwnerID","_repositoryOwnerID","repositoryOwnerEmail","_repositoryOwnerEmail","repositoryOwnerType","_repositoryOwnerType","updateTeam","loadTeamProperties","TeamUpdater","OrderFieldToIProjectsTeamsOrderBy","TeamOrder","TeamLoader","_teamPool","_projectInterface","OrgRepository","OrgRepositoryUpdater","OrgRepositoryLoader","_orgRepositoryPool","StringRelationResult","whitespaceFilter","TeamFilter","_nameContains","_getRelationToNameContains","otherName","IDENTICAL","nameTerms","otherNameTerms","DISJOINTED","subsetMatches","supersetMatches","nameTerm","otherTerm","superSet","subSet","SUBSET","SUPERSET","_searchTarget","targetString","searchTerms","targetTerms","searchTerm","targetTerm","searchMatch","SpaceFilter","_bookmarked","otherSpaceFilter","createTeamRoleGetter","getLinks","SpaceContext","_hostAssetContext","_fetchTeams","_teamPoolDelegate","getTeamRole","spaceSession","newTeamRole","orgRepositoryPool","teamPool","provisionType1Team","orgRepository","_renameAsset","_renameTeam","adobeAssetPool","localAdobeAsset","adobeAssetSession","_validateDescription","_validateColor","_getPatchOP","existingValue","_patchTeam","localUpdate","_checkForRejection","permDeleteTeamIDs","_moveSpaces","spaces","targetAsset","spacesById","moveSpaces","restoreNameMap","additionalSpaceUpdates","remoteRepoPath","assetSession","createSpaceBookmarks","_bookmarkSpaces","removeSpaceBookmarks","localSession","spaceById","wasBookmarked","projectUrn","restoreSession","mutationSession","onRemoveItem","_renameSpace","_patchSpace","spaceMap","lookupSpaceById","onUserLeftTeam","CollaboratorLoader","_collaboratorPool","_urn","collaboratorUpdateSession","directSet","directCollaborators","InvitedCollaboratorUpdater","_email","_canComment","_acceptanceRequired","invitationID","acceptanceRequired","inheritance","_inheritance","InvitedCollaboratorLoader","_invitedCollaboratorPool","invitedCollaboratorUpdateSession","invitations","CollaboratorFormat","ErrorFormat","CollaboratorsByAssetIDUpdater","_collaborators","getAssetID","collaboratorsWithID","CollaboratorsByAssetIDLoader","_collaboratorsByAssetIDPool","_assetIDs","slicedAssetIDs","batchInvitationResponse","collaboratorByAssetIDs","ManagedPromise","BatchOperationQueue","_batchProcessor","_maxItemsPerBatch","_delay","_maxInFlightBatches","_itemQueue","_itemPromises","_inFlightBatches","_processQueue","_timer","inFlightCount","inFlightBatch","batch","rejectItemPromise","resolveItemPromise","isInQueue","isInFlight","managedPromise","hasItem","CollaborationContext","_collaboratorSourceMap","_accessConfirmedIDs","_handleBatchRequest","assetMap","invitationResponse","collaboratorsWithAssetIds","isDirectCollaborator","_getCollaboratorsNow","hasManager","getCollaboratorsForAssets","assetsIDs","collaboratorLoader","invitedCollaboratorPool","invitedCollaboratorLoader","collaboratorSources","collaboratorResponse","errorSubcode","getInvitedCollaborators","updatedCollaborators","getCollaborator","_addCollaborators","captcha","ans","$OVERRIDE_SET","$EXTENSION_SET","$OBSERVABLE_SET","$EMITTER","$OVERRIDDEN_GETTERS","ExtendClass","eventMap","defaultObservableEvent","originalProps","emitterProps","makePropertyDesc","propertyDesc","mappedEventName","handledProps","extendedProps","overriddenProps","propToEventMap","seenPropNames","observedProps","getACPLModel","acplModel","parseVersion","isSAMCppVer","comparison","aVer","bVer","SharedThumbnailChangeEvent","SharedPermissionsChangeEvent","patchAssetContext","AssetContextJS","applicationAssetContext","_userRepoID","_AssetContextJS","sourceRepoID","targetRepoID","recentsSource","rootFolder","routesToAcplV2","assetReviewServiceInterface","foundAsset","onAssetsChanged","previews","_onAssetChanged","_onRenditionChanged","_isForwardingAssetChangeEvents","patchAssetSource","dirMap","ascending","descending","fieldMap","Shared","AssetSource","maybeOrder","maybeFilter","_addEventInterceptors","patchAssetList","SAM_CPP_ITEM_EVENTS","AssetList","loadMoreItems","_onError","_onListNotification","_notificationTimer","_onStatusChange","patchAdobeAsset","ACPLAsset","localID","discardOutputs","hasPermissions","_hasLoadedPermissions","_refreshThumbnail","_thumbnailInfo","_thumbnailStatus","getThumbnailRendition","_assetVersionSource","versionPool","patchSpaceJS","assetContext","_searchWorkingFilesSource","_searchArtifactsSource","computeGradientID","rawGradientId","computeGradients","rawGradientData","defaultGradientId","computedID","isDefault","AdobeAssetFilter","_mediaTypes","_excludeMediaTypes","mediaTypeHashPart","getMediaRelationToFilter","getMediaTypeRelation","subset","intersaction","disjoint","thisIncludeOtherInclude","uninitialized","thisIncludeOtherExclude","otherIncludeThisExclude","otherExcludethisExclude","ImplicitDirectoryListingAssetFilter","baseOpts","_implicitDirectoryListingFilter","_adobeAssetFilter","Project","_projectPermissions","_repositoryOwner","_projectLinks","projectLinks","_getGradient","_gradientID","_gradient","_view","projectPool","_updateProjectLinksFromService","returnProject","_isProjectLinkType","validateProjectNameForRename","validateProjectNameForCreate","updateProperties","leaveStatus","CANNOT_LEAVE_NO_COLLABORATORS","currentUserCollaborator","CANNOT_LEAVE_ADDRESS_BOOK_GROUP_MEMBER","CANNOT_LEAVE_IS_OWNER","CANNOT_LEAVE_IS_ADMIN_OF_PROJECT","CANNOT_LEAVE_LAST_COLLABORATOR","CAN_LEAVE","CANNOT_LEAVE_LAST_DIRECT_COLLAB_WITH_SHARE_PERMISSION","userCanLeaveProject","updateProject","_getCachedRestoreCapability","projectPermissions","librariesSource","directoryLoader","ProjectUpdater","computedGradientID","projectPrimary","parseProjectEffectivePermissions","OrderFieldToIProjectsOrderBy","ProjectsListLoader","_projectPool","nextPageLink","GradientUpdater","_isDefault","_angle","_stops","_languageCode","_textAlpha","_textMode","_textColorValue","_textType","textAlpha","textMode","textColorValue","textType","ProjectContext","_gradientPool","_canRestoreProjectCache","sender","_getGradients","AllProjects","originalGradient","computedGradients","newGradient","_defaultGradient","canCreateProjects","canRestore","canCreateProjectReason","ALLOWED","ADMIN_DISABLED","INVALID_REPOSITORY","getProjectsSearchSource","discoveryLinks","LearningManagementSystems","LearningManagementSystemRoles","RosterImportState","ImportSourceType","ClassroomStatus","ClassroomType","SubjectTypes","ClassroomRole","BlockApiSuccessResponses","MembershipStatus","validateClassroomData","classroomDataToValidate","hasId","ClassroomsInterface","createClassroom","subject","grades","period","createClassroomFromVirtual","virtualClassroomId","updateClassroomFromVirtual","deleteClassroom","deleteVirtualClassroom","getClassroom","classroom","importedFrom","getClassrooms","classrooms","refreshClassroomCode","updateClassroom","getClassroomTeachers","getClassroomMembers","TEACHER","getClassroomStudents","STUDENT","urlFilter","classroomResponse","members","computedKey","getMembership","blockStudent","studentId","unblockStudent","removeStudent","ClassroomMember","_displayName","_firstName","_inviteSource","_lastName","_membershipStatus","NOT_A_MEMBER","firstName","inviteSource","lastName","membershipStatus","ClassroomMemberUpdater","ClassroomMemberListLoader","_ClassroomMemberPool","_classroomsInterface","classroomMemberFilter","ClassroomMemberFilter","SubjectChoices","Classroom","_importSource","_isVirtual","_grades","_memberRole","_period","ACTIVE","_subject","noSubject","_classroomMemberPool","_members","importSource","isVirtual","memberRole","userCount","_userCount","refreshCode","ClassroomUpdater","remoteImportSource","synced","lastUpdatedAt","_virtualId","ClassroomListLoader","_classroomPool","AssignmentsListLoader","_assignmentPool","StudentAssignmentsInterface","ASSIGNMENTS_RETURN","ASSIGNMENTS_START","ASSIGNMENTS_SUBMIT","compareAssignmentNames","AssignmentOrder","AssignmentFilter","StudentAssignmentFile","_adobeAsset","sourceAssets","sourceTasks","sourceTutorials","updateStudentAssignmentFile","StudentAssignmentFileUpdater","hasProperty","ClassroomContext","_studentAssignmentsInterface","_assignmentListsToKeepAlive","getClassroomById","classroomInterface","_processRemoteClassroomItem","getClassroomByCode","classCode","ClassroomListListLoader","cleanAssignmentName","classroomValidationErrors","virtualId","assignmentValidateErrors","recentMigratedClassroom","migratedClassroom","incomingReferences","hasMaterials","incomingTemplateIds","finalStatus","materialsUpdateData","_assignAssignment","_discardAssignment","_restoreAssignment","studentAssignmentFile","patchData","assetToPatch","validateAssignmentNameForCreate","_validateAssignmentName","validateAssignmentNameForUpdate","keepAssignmentListAlive","existingTimeout","assignments","assignmentList","matchingAssignment","_renameAssignment","otherAssignmentData","_getUpdatedAssignmentMaterials","materialUpdates","shouldUpdateTemplates","updatedTemplateIds","shouldUpdateReferences","updatedReferenceIds","_updateAssignmentMetadata","_discardAssets","assetsToDiscard","mappedData","localKey","remoteKey","_getAssignmentMaterialsFolderAsset","materialsFolderAsset","_getAssets","_copyAssetsToMaterialsFolder","assetsToCopy","copyPromises","clonedAssets","dateTimeFormat","fractionalSecondDigits","_determineAssetDifferences","incomingAssetIds","assetsToKeep","templateId","splitIdx","materialsPromises","templateDifferences","referencesToImport","referenceDifferences","importedReferenceAssetIds","importNewReferencesForAssignment","clonedAssetIds","clonedTemplates","clonedReferences","itemList","mapItems","handleFullyLoaded","assignmentFiles","refreshClassroomCodes","classIds","classroomsToUpdate","classcode","updatedClassrooms","successfullyUpdatedClassrooms","deleteClassrooms","updatedClassroomData","remoteClassroom","cachedClassroom","getClassroomMembership","blockStudentFromClassroom","unblockStudentFromClassroom","removeStudentFromClassroom","FRAMEIO_AUTHORIZATION_CHANGE","SharedFrameioAuthorizationChangeEvent","FRAMEIO_REVIEW_LINKS_CHANGE","SharedFrameioReviewLinksChangeEvent","FRAMEIO_API_BASE","FRAMEIO_LINKS","ME","ACCOUNT","ACCOUNTS","TEAMS","TEAM","PROJECT","PROJECTS","SHAREDPROJECTS","REVIEWS","REVIEW","ITEMCREATE","ASSETS","ASSET","CREATEASSET","CREATECOMMENT","GETCOMMENT","GETCOMMENTS","IMPRESSIONS","COMMENT","REPLY","GETREPLIES","LIKE","COMPLETE","FOLDERTREE","ANCESTORS","ADOBE_SUSI_USER","ADOBE_SUSI","IFrameioAuthenticationStatus","FrameioInterface","_frameioContext","frameioClient","_frameioClientId","_nativeContext","workflows","Workflows","createShareForReviewWorkflow","shareForReviewWorkflow","getFrameioAssetContext","_handleReviewLinksChangeEvent","nativeAuthInfo","authenticationInfo","frameioToken","_cacheCredentials","_updateCurrentUserId","frameioUserId","_cachedCredentialsId","_authenticationId","adobeId","_getRefreshTokenExpiration","lastRefresh","lastRefreshVal","secondsPerHour","_getCachedCredentials","credentialsId","existingCredentials","credentials","millisecondsPerHour","ccUserId","xFrameioClient","productKey","checkForCachedCredentials","cachedCredentials","parsedCredentials","refreshExpiration","frameioLastRefresh","nowSec","authExpired","authenticateUser","authLoggedIn","authLoggedOut","isAuthenticated","authenticationStatus","authStatus","nativeAuthStatus","_authenticationInfo","setUTCSeconds","refreshToken","authenticate","isUserAuthenticated","nativeInfo","frameioRefreshToken","frameioTokenExpires","deauthenticate","deauthenticateUser","openFile","dispatchReviewLinksChangeEvent","getAdobeSusiInfo","_adobeSusiUserRequest","respJson","susiInfo","userExists","susiAvailable","restriction","authenticateAdobeSusi","_adobeSusiRequest","authInfo","respHeaders","respBody","tokenExpires","useAdobeSusi","_getMultiPageResponse","nextPageUri","readPage","getCurrentUser","getAccount","accountId","getAccounts","getTeam","getSharedProjects","getReviewLink","filetype","uploadFile","reviewLinkAddAsset","asset_ids","getChildren","addVersionToAsset","nextAssetId","next_asset_id","commentId","getComments","getImpressions","updateComment","createReply","getReplies","createLike","deleteLike","completeComment","uncompleteComment","getFolderTree","getAncestors","FrameioBase","frameioContext","FrameioUserUpdater","_accountId","_profileImage","_userDefaultColor","profileImage","userDefaultColor","_account","FrameioAsset","_projectId","_teamId","insertedAt","_insertedAt","_parentId","getParent","updatedAt","_updatedAt","FrameioLikeUpdater","anonymousUserId","_anonymousUserId","_comment","_commentId","deletedAt","_deletedAt","like","_objectPool","FrameioCommentUpdater","_completed","_hasReplies","_likeCount","_private","_readCount","_timestamp","_timestampMicroseconds","completedAt","_completedAt","completerId","_completerId","hasReplies","likeCount","_ownerId","readCount","_reviewLinkId","_targetAssetId","textEditedAt","_textEditedAt","timestampMicroseconds","_frameioInterface","FrameioFileUpdater","_comments","FrameioFolderUpdater","frameioAssetUpdater","_uploadFile","chunkSize","iChunk","nextChunk","FrameioTeamUpdater","_projects","projectsResponse","FrameioProjectUpdater","FrameioVersionStack","_coverAssetId","_versions","coverAssetId","getCoverAsset","_coverAsset","FrameioVersionStackUpdater","FrameioReviewLinkUpdater","_shortUrl","_active","_inviteOnly","shortUrl","inviteOnly","_itemId","getArtifactCount","getArtifact","_dispatchReviewLinksChangeEvent","reviewLink","short_url","owner_id","project_id","is_active","access_control","invite_only","artifactPath","_reviewServiceInterface","_rootAssetId","rootAssetId","_team","reviews","_reviews","review","FrameioAccountUpdater","_teams","teamsResponse","_sharedProjects","getSharedTeams","getProjectTree","account","FrameioContext","_reviewLinksForDocument","_currentUser","_accounts","_mapKeyForSourceDocument","_retainUntilTimeout","weak","accounts","_getLocalAncestors","getReviewLinksForDocument","reviewLinks","fileSession","folderSession","versionStackSession","LIBRARY_DATA_CHANGED","LibraryDataChangedEventInstance","RESTRICT_EDIT_CHANGED","RestrictEditChangedEventInstance","_libraryDataLoadInfo","_refreshEditingRestricted","_libraryLoaded","_waitForLibraryLoad","canRetry","_populateLibraryDataIfNotLoading","_libraryRoles","_renditionGrid","setRoles","newRoles","_bookmark","_isPublic","_ownership","libraryManifestId","_legacyLibraryId","bookmarkData","unbookmark","isEditingRestricted","_isEditingRestricted","setEditingRestricted","propertyUpdaterTypes","LibraryUpdater","ImplicitLibraryFilter","LibraryOrderBy","LibraryOwnerFilter","LibraryProjectFilterEnum","LibraryRolesFilter","OrderFieldToLibraryOrderBy","CREATED_DATE","MODIFIED_DATE","LibraryOrder","LibraryFilter","_project","_roles","Public","Discovery","Incoming","_hash","newOwnerSet","existingOwnerSet","setA","setB","getSetDifference","checkOwnerRelation","newValuesSet","existingValuesSet","checkSetOverlap","checkIfIsProjId","Personal","AllLibraries","LibraryListLoader","_libraryPool","ownerFilter","SubscriptionLocation","_watching","_cacheKey","ensureExistence","libraryInterface","startWatching","stopWatching","SyncGroupLocation","BookmarkLocation","CollabBookmarkLocation","PublicBookmarkLocation","LibraryContext","__assetPool","_syncGroupLocation","_publicBookmarkLocation","_collabBookmarkLocation","createPersonalLibrary","_getLibraryLocally","_getLibraryRemotely","updatedLibrary","_isValidURN","tryLocalThenRemote","tryRemoteOnly","syncGroupLocation","publicBookmarkLocation","collabBookmarkLocation","_ensureSubscriptionLocationExistence","CustomModel","_inferenceReady","_publishedState","UNPUBLISHED","_samplePrompt","_baseModelName","_baseModelVersion","_conceptId","_trainingMode","inferenceReady","publishedState","samplePrompt","_renditionUrl","baseModelName","baseModelVersion","conceptId","trainingMode","CustomModelUpdater","OrderFieldToCustomModelOrderBy","CREATE_DATE","MODIFY_DATE","CustomModelOrder","CustomModelLoader","_customModelInterface","listingOptions","listOptions","getCustomModels","REGION_MAP","VA6C2","VA6","VA7","JPN3","IRL1","CustomModelInterface","acpHost","subdomain","regionalizedSubdomain","CustomModelSearchLoader","customModelSearchFilter","customModelFilter","ImplicitCustomModelFilter","CustomModelSearchFilter","CustomModelContext","_customModelUpdater","customModelSearchSource","customModelSource","$SAM_INSTANCE_MAP","SAMCore","_setAssetContext","_AssetContext","_setSpaceContext","_SpaceContext","_setProjectContext","_ProjectContext","_setClassroomContext","_ClassroomContext","_LibraryContext","getCustomModelContext","_CustomModelContext","updateConfig","updatableKey","samInstances","loadedVersions","compatibleLoadedVersion","loadedVersion","loadedMajor","loadedMinor","loadedPatch","isPatchableVersion","rootFolderProto","_DISABLE_SAM_CPP","waitForApplicationContextReady","ClassroomOrder","ClassroomMemberOrder","MRUAdobeAssetOrder","PublishedAdobeAssetOrder","OrgRepositoryOrder","InvitedCollaboratorOrder","CollaboratorsByAssetIDOrder","__esDecorate","descriptorIn","contextIn","initializers","extraInitializers","accept","addInitializer","__runInitializers","useValue","__propKey","__setFunctionName","__metadata","metadataKey","metadataValue","fulfilled","rejected","__generator","trys","verb","__values","__read","ar","__spread","__spreadArrays","jl","pack","__asyncGenerator","fulfill","__makeTemplateObject","cooked","__classPrivateFieldGet","__classPrivateFieldSet","__classPrivateFieldIn","__addDisposableResource","asyncDispose","_SuppressedError","SuppressedError","suppressed","__disposeResources","rec","__webpack_module_cache__","deferred","leafPrototypes","dataWebpackPrefix","moduleId","cachedModule","__webpack_modules__","amdO","chunkIds","notFulfilled","definition","chunkId","hmd","needAttach","charset","onScriptComplete","doneFns","nmd","installedChunks","installedChunkData","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}